From 2ba0870d8afae40bcbd69bad342ea0ecca89a3d4 Mon Sep 17 00:00:00 2001
From: larentoun <31931237+larentoun@users.noreply.github.com>
Date: Thu, 27 Jul 2023 22:06:34 +0900
Subject: [PATCH 01/55] Initial Modularity Support (#1)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
## About The Pull Request
В чейнджлоге
## Why It's Good For The Game
Первый шаг к светлому будущему
## Changelog
:cl:
code: Добавлена поддержка модпаков
config: Добавлен файл конфига для модпаков
code: Обновлен CI под модпаки
code: Изменен метод обнаружения мердж конфликтов
/:cl:
---
.github/workflows/ci_suite.yml | 1 +
.github/workflows/conflicts.yml | 12 ++--
code/_compile_options.dm | 2 +-
config/bandastation/bandastation_config.txt | 0
config/config.txt | 1 +
modular_bandastation/_modpack.dm | 17 ++++++
modular_bandastation/_modpacks.dm | 60 +++++++++++++++++++
modular_bandastation/example/_example.dm | 16 +++++
modular_bandastation/example/_example.dme | 3 +
modular_bandastation/example/code/example.dm | 2 +
modular_bandastation/modular_bandastation.dme | 4 ++
tgstation.dme | 1 +
tools/bandastation_check_grep.sh | 12 ++++
tools/build/build.js | 1 +
14 files changed, 127 insertions(+), 5 deletions(-)
create mode 100644 config/bandastation/bandastation_config.txt
create mode 100644 modular_bandastation/_modpack.dm
create mode 100644 modular_bandastation/_modpacks.dm
create mode 100644 modular_bandastation/example/_example.dm
create mode 100644 modular_bandastation/example/_example.dme
create mode 100644 modular_bandastation/example/code/example.dm
create mode 100644 modular_bandastation/modular_bandastation.dme
create mode 100644 tools/bandastation_check_grep.sh
diff --git a/.github/workflows/ci_suite.yml b/.github/workflows/ci_suite.yml
index b3c798cf229af..0c88c2318ec90 100644
--- a/.github/workflows/ci_suite.yml
+++ b/.github/workflows/ci_suite.yml
@@ -56,6 +56,7 @@ jobs:
bash tools/ci/check_filedirs.sh tgstation.dme
bash tools/ci/check_changelogs.sh
bash tools/ci/check_grep.sh
+ bash tools/bandastation_check_grep.sh # BANDASTATION EDIT ADDITION - checking modular_bandastation code
bash tools/ci/check_misc.sh
tools/bootstrap/python tools/ticked_file_enforcement/ticked_file_enforcement.py < tools/ticked_file_enforcement/schemas/tgstation_dme.json
tools/bootstrap/python tools/ticked_file_enforcement/ticked_file_enforcement.py < tools/ticked_file_enforcement/schemas/unit_tests.json
diff --git a/.github/workflows/conflicts.yml b/.github/workflows/conflicts.yml
index 4823aee3abf80..aa9514d1319b6 100644
--- a/.github/workflows/conflicts.yml
+++ b/.github/workflows/conflicts.yml
@@ -4,12 +4,16 @@ on:
branches:
- master
- 'project/**'
+ pull_request_target:
+ types: [ready_for_review, opened, synchronize, reopened]
jobs:
triage:
+ permissions:
+ contents: read
+ pull-requests: write
runs-on: ubuntu-20.04
steps:
- - uses: mschilde/auto-label-merge-conflicts@2e8fcc76c6430272ec8bb64fb74ec1592156aa6a
+ - uses: eps1lon/actions-label-merge-conflict@v2.1.0
with:
- CONFLICT_LABEL_NAME: 'Merge Conflict'
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- WAIT_MS: 10000
+ dirtyLabel: 'Merge Conflict'
+ repoToken: ${{ secrets.GITHUB_TOKEN }}
diff --git a/code/_compile_options.dm b/code/_compile_options.dm
index 2a4854c37b858..99989e5cb849e 100644
--- a/code/_compile_options.dm
+++ b/code/_compile_options.dm
@@ -98,7 +98,7 @@
#endif
#ifndef PRELOAD_RSC //set to:
-#define PRELOAD_RSC 1 // 0 to allow using external resources or on-demand behaviour;
+#define PRELOAD_RSC 0 // 0 to allow using external resources or on-demand behaviour; BANDASTATION EDIT - Original: 1
#endif // 1 to use the default behaviour;
// 2 for preloading absolutely everything;
diff --git a/config/bandastation/bandastation_config.txt b/config/bandastation/bandastation_config.txt
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git a/config/config.txt b/config/config.txt
index 04141848d6423..0ad8b0187b046 100644
--- a/config/config.txt
+++ b/config/config.txt
@@ -5,6 +5,7 @@ $include dbconfig.txt
$include comms.txt
$include logging.txt
$include resources.txt
+$include bandastation/bandastation-config.txt
$include interviews.txt
$include lua.txt
$include auxtools.txt
diff --git a/modular_bandastation/_modpack.dm b/modular_bandastation/_modpack.dm
new file mode 100644
index 0000000000000..5569426fa6404
--- /dev/null
+++ b/modular_bandastation/_modpack.dm
@@ -0,0 +1,17 @@
+/datum/modpack
+ /// A string name for the modpack. Used for looking up other modpacks in init.
+ var/name
+ /// A string desc for the modpack. Can be used for modpack verb list as description.
+ var/desc
+ /// A string with authors of this modpack.
+ var/author
+
+/datum/modpack/proc/pre_initialize()
+ if(!name)
+ return "Modpack name is unset."
+
+/datum/modpack/proc/initialize()
+ return
+
+/datum/modpack/proc/post_initialize()
+ return
diff --git a/modular_bandastation/_modpacks.dm b/modular_bandastation/_modpacks.dm
new file mode 100644
index 0000000000000..347fcd019b6b9
--- /dev/null
+++ b/modular_bandastation/_modpacks.dm
@@ -0,0 +1,60 @@
+#define INIT_ORDER_MODPACKS 84
+
+SUBSYSTEM_DEF(modpacks)
+ name = "Modpacks"
+ init_order = INIT_ORDER_MODPACKS
+ flags = SS_NO_FIRE
+ var/list/loaded_modpacks = list()
+
+/datum/controller/subsystem/modpacks/Initialize()
+ var/list/all_modpacks = list()
+ for(var/modpack in subtypesof(/datum/modpack/))
+ all_modpacks.Add(new modpack)
+ // Pre-init and register all compiled modpacks.
+ for(var/datum/modpack/package as anything in all_modpacks)
+ var/fail_msg = package.pre_initialize()
+ if(QDELETED(package))
+ CRASH("Modpack of type [package.type] is null or queued for deletion.")
+ if(fail_msg)
+ CRASH("Modpack [package.name] failed to pre-initialize: [fail_msg].")
+ if(loaded_modpacks[package.name])
+ CRASH("Attempted to register duplicate modpack name [package.name].")
+ loaded_modpacks.Add(package)
+
+ // Handle init and post-init (two stages in case a modpack needs to implement behavior based on the presence of other packs).
+ for(var/datum/modpack/package as anything in all_modpacks)
+ var/fail_msg = package.initialize()
+ if(fail_msg)
+ CRASH("Modpack [(istype(package) && package.name) || "Unknown"] failed to initialize: [fail_msg]")
+ for(var/datum/modpack/package as anything in all_modpacks)
+ var/fail_msg = package.post_initialize()
+ if(fail_msg)
+ CRASH("Modpack [(istype(package) && package.name) || "Unknown"] failed to post-initialize: [fail_msg]")
+
+/client/verb/modpacks_list()
+ set name = "Modpacks List"
+ set category = "OOC"
+
+ if(!mob || !SSmodpacks.initialized)
+ return
+
+ if(length(SSmodpacks.loaded_modpacks))
+ . = "
Список модификаций
"
+ for(var/datum/modpack/M as anything in SSmodpacks.loaded_modpacks)
+ if(M.name)
+ . += ""
+ . += "
[M.name]"
+
+ if(M.desc || M.author)
+ . += "
"
+ if(M.desc)
+ . += "
Описание: [M.desc]"
+ if(M.author)
+ . += "
Автор: [M.author]"
+ . += "
"
+
+ var/datum/browser/popup = new(mob, "modpacks_list", "Список Модификаций", 480, 580)
+ popup.set_content(.)
+ popup.open()
+ else
+ to_chat(src, "Этот сервер не использует какие-либо модификации.")
diff --git a/modular_bandastation/example/_example.dm b/modular_bandastation/example/_example.dm
new file mode 100644
index 0000000000000..2343367184030
--- /dev/null
+++ b/modular_bandastation/example/_example.dm
@@ -0,0 +1,16 @@
+/datum/modpack/example
+ /// A string name for the modpack. Used for looking up other modpacks in init.
+ name = "Example modpack"
+ /// A string desc for the modpack. Can be used for modpack verb list as description.
+ desc = "its useless"
+ /// A string with authors of this modpack.
+ author = "furior"
+
+/datum/modpack/example/pre_initialize()
+ . = ..()
+
+/datum/modpack/example/initialize()
+ . = ..()
+
+/datum/modpack/example/post_initialize()
+ . = ..()
diff --git a/modular_bandastation/example/_example.dme b/modular_bandastation/example/_example.dme
new file mode 100644
index 0000000000000..5540c273b03ba
--- /dev/null
+++ b/modular_bandastation/example/_example.dme
@@ -0,0 +1,3 @@
+#include "_example.dm"
+
+#include "code/example.dm"
diff --git a/modular_bandastation/example/code/example.dm b/modular_bandastation/example/code/example.dm
new file mode 100644
index 0000000000000..ff327270a515d
--- /dev/null
+++ b/modular_bandastation/example/code/example.dm
@@ -0,0 +1,2 @@
+/turf/closed/wall/example
+ name = "Example wall"
diff --git a/modular_bandastation/modular_bandastation.dme b/modular_bandastation/modular_bandastation.dme
new file mode 100644
index 0000000000000..6cceb1b51b5c4
--- /dev/null
+++ b/modular_bandastation/modular_bandastation.dme
@@ -0,0 +1,4 @@
+#include "_modpack.dm"
+#include "_modpacks.dm"
+
+// #include "example/_example.dme"
diff --git a/tgstation.dme b/tgstation.dme
index dd3f0a7babb49..27fac5f905969 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -5434,4 +5434,5 @@
#include "interface\fonts\spess_font.dm"
#include "interface\fonts\tiny_unicode.dm"
#include "interface\fonts\vcr_osd_mono.dm"
+#include "modular_bandastation\modular_bandastation.dme" // BANDASTATION EDIT
// END_INCLUDE
diff --git a/tools/bandastation_check_grep.sh b/tools/bandastation_check_grep.sh
new file mode 100644
index 0000000000000..1167fa5691f69
--- /dev/null
+++ b/tools/bandastation_check_grep.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+#ANSI Escape Codes for colors to increase contrast of errors
+RED="\033[0;31m"
+GREEN="\033[0;32m"
+BLUE="\033[0;34m"
+NC="\033[0m" # No Color
+
+echo -e "${BLUE}Re-running grep checks, but looking in modular_bandastation...${NC}"
+
+# Run the linters again, but modular bandastation code.
+sed "s|code/\*\*/\*\.dm|modular_bandastation/\*\*/\*\.dm|g"
Date: Fri, 28 Jul 2023 01:44:30 +0900
Subject: [PATCH 02/55] Modpacks port (#5)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
## About The Pull Request
Чейнджлог
## Changelog
:cl:
code: Добавлены модпаки дефайнов, хелперов и сигналов
add: Добавлен NT Default закон ИИ
add: Добавлены барные вывески и их поддержка
add: Добавлены шепот и LOOC
balance: Ползание теперь заставляет "ходить", а не "бежать"
fix: Поддержка кириллицы
add: Добавлена поддержка дискорда и необходимость привязки
balance: Трит при онлайне <10 теперь равен 0
balance: Настенный грибок только при >20 онлайна
add: Счетчик патронов
qol: Кейбинды по-умолчанию теперь Парадиза220
add: Пиксель-шифт
add: Перевод для усов и гостей
add: TTS220
add: Некоторые ворлд топики
/:cl:
---
code/__HELPERS/text.dm | 4 +-
code/modules/unit_tests/barsigns.dm | 4 +-
config/bandastation/bandastation_config.txt | 4 +
interface/skin.dmf | 6 +-
.../_defines220/_defines220.dm | 4 +
.../_defines220/_defines220.dme | 10 +
.../_defines220/code/defines/keybindings.dm | 4 +
.../_defines220/code/defines/spans.dm | 1 +
.../code/signals_mob/signals_mob_ai.dm | 1 +
.../code/signals_mob/signals_mob_carbon.dm | 1 +
.../code/signals_mob/signals_mob_living.dm | 9 +
.../code/signals_mob/signals_mob_main.dm | 1 +
.../code/signals_mob/signals_mob_silicon.dm | 1 +
.../code/signals_mob/signals_mob_simple.dm | 1 +
.../_helpers220/_helpers220.dm | 4 +
.../_helpers220/_helpers220.dme | 3 +
.../_helpers220/code/unsorted.dm | 32 +
.../_signals220/_signals220.dm | 4 +
.../_signals220/_signals220.dme | 8 +
.../code/signals_mob/signals_mob_ai.dm | 1 +
.../code/signals_mob/signals_mob_carbon.dm | 1 +
.../code/signals_mob/signals_mob_living.dm | 14 +
.../code/signals_mob/signals_mob_main.dm | 1 +
.../code/signals_mob/signals_mob_silicon.dm | 1 +
.../code/signals_mob/signals_mob_simple.dm | 1 +
modular_bandastation/ai_laws/_ai_laws.dm | 4 +
modular_bandastation/ai_laws/_ai_laws.dme | 3 +
.../ai_laws/code/nt_default.dm | 13 +
modular_bandastation/barsigns/_barsigns.dm | 4 +
modular_bandastation/barsigns/_barsigns.dme | 3 +
.../barsigns/code/barsigns.dm | 53 +
.../barsigns/icons/barsigns.dmi | Bin 0 -> 409094 bytes
.../communication/_communication.dm | 4 +
.../communication/_communication.dme | 6 +
.../communication/code/LOOC.dm | 128 +
.../code/_communication_defines.dm | 5 +
.../communication/code/whisper.dm | 25 +
.../code/~communication_defines.dm | 2 +
.../crawl_speed/_crawl_speed.dm | 4 +
.../crawl_speed/_crawl_speed.dme | 6 +
.../crawl_speed/code/_crawl_speed_defines.dm | 2 +
.../crawl_speed/code/crawl_speed_component.dm | 24 +
.../crawl_speed/code/crawl_speed_mob.dm | 12 +
.../crawl_speed/code/~crawl_speed_defines.dm | 2 +
.../cyrillic_fixes/_cyrillic_fixes.dm | 4 +
.../cyrillic_fixes/_cyrillic_fixes.dme | 3 +
.../cyrillic_fixes/code/cyrillic_fixes.dm | 47 +
modular_bandastation/discord/_discord.dm | 4 +
modular_bandastation/discord/_discord.dme | 3 +
modular_bandastation/discord/code/discord.dm | 74 +
modular_bandastation/events/_events.dm | 4 +
modular_bandastation/events/_events.dme | 4 +
modular_bandastation/events/code/events.dm | 2 +
modular_bandastation/events/code/threat.dm | 8 +
modular_bandastation/gunhud/_gunhud.dm | 4 +
modular_bandastation/gunhud/_gunhud.dme | 7 +
.../gunhud/code/_gunhud_defines.dm | 5 +
.../gunhud/code/gunhud_component.dm | 150 +
.../gunhud/code/gunhud_hud.dm | 7 +
.../gunhud/code/gunhud_screen.dm | 86 +
.../gunhud/code/~gunhud_defines.dm | 5 +
modular_bandastation/gunhud/icons/gun_hud.dmi | Bin 0 -> 11023 bytes
.../keybindings/_keybindings.dm | 4 +
.../keybindings/_keybindings.dme | 14 +
.../keybindings/code/admin.dm | 29 +
.../code/artificial_intelligence.dm | 2 +
.../keybindings/code/carbon.dm | 8 +
.../keybindings/code/client.dm | 14 +
.../keybindings/code/communication.dm | 11 +
.../keybindings/code/human.dm | 11 +
.../keybindings/code/living.dm | 20 +
modular_bandastation/keybindings/code/mob.dm | 47 +
.../keybindings/code/movement.dm | 17 +
.../keybindings/code/robot.dm | 14 +
modular_bandastation/modular_bandastation.dme | 17 +
.../pixel_shift/_pixel_shift.dm | 4 +
.../pixel_shift/_pixel_shift.dme | 6 +
.../pixel_shift/code/layer_shift.dm | 36 +
.../pixel_shift/code/pixel_shift_component.dm | 96 +
.../pixel_shift/code/pixel_shift_keybind.dm | 17 +
.../pixel_shift/code/pixel_shift_mob.dm | 5 +
.../translations/_translations.dm | 4 +
.../translations/_translations.dme | 4 +
.../translations/code/moustache.dm | 37 +
.../translations/code/restaurant_customer.dm | 186 +
modular_bandastation/tts/_tts.dm | 4 +
modular_bandastation/tts/_tts.dme | 25 +
modular_bandastation/tts/code/_tts_defines.dm | 64 +
.../tts/code/_tts_rust_g_ss220.dm | 58 +
.../tts/code/base_seeds/mobs/_base.dm | 8 +
.../tts/code/base_seeds/mobs/alien.dm | 11 +
.../tts/code/base_seeds/mobs/friendly.dm | 61 +
.../tts/code/base_seeds/mobs/guardian.dm | 16 +
.../tts/code/base_seeds/mobs/hostile.dm | 46 +
.../tts/code/base_seeds/mobs/lavaland.dm | 37 +
.../tts/code/base_seeds/mobs/other.dm | 22 +
.../tts/code/base_seeds/mobs/pets.dm | 7 +
.../tts/code/base_seeds/objs/objs.dm | 26 +
.../tts/code/providers/silero.dm | 57 +
modular_bandastation/tts/code/seeds/silero.dm | 3581 +++++++++++++++++
.../tts/code/tts_configuration.dm | 14 +
modular_bandastation/tts/code/tts_mob_Hear.dm | 67 +
modular_bandastation/tts/code/tts_numbers.dm | 170 +
.../tts/code/tts_preferences.dm | 73 +
modular_bandastation/tts/code/tts_provider.dm | 31 +
modular_bandastation/tts/code/tts_seed.dm | 24 +
modular_bandastation/tts/code/tts_sound.dm | 44 +
.../tts/code/tts_sound_TEMPORARY.dm | 77 +
.../tts/code/tts_subsystem.dm | 577 +++
modular_bandastation/tts/code/tts_vv.dm | 12 +
.../tts/code/~undefs/~tts_undefs.dm | 62 +
.../world_topics/_world_topics.dm | 4 +
.../world_topics/_world_topics.dme | 3 +
.../world_topics/code/world_topics.dm | 38 +
.../packages/tgui-say/ChannelIterator.test.ts | 4 +
tgui/packages/tgui-say/ChannelIterator.ts | 25 +-
tgui/packages/tgui-say/styles/colors.scss | 4 +
.../tgui/interfaces/PreferencesMenu/data.ts | 17 +
.../game_preferences/bandastation/looc.tsx | 9 +
119 files changed, 6710 insertions(+), 9 deletions(-)
create mode 100644 modular_bandastation/_defines220/_defines220.dm
create mode 100644 modular_bandastation/_defines220/_defines220.dme
create mode 100644 modular_bandastation/_defines220/code/defines/keybindings.dm
create mode 100644 modular_bandastation/_defines220/code/defines/spans.dm
create mode 100644 modular_bandastation/_defines220/code/signals_mob/signals_mob_ai.dm
create mode 100644 modular_bandastation/_defines220/code/signals_mob/signals_mob_carbon.dm
create mode 100644 modular_bandastation/_defines220/code/signals_mob/signals_mob_living.dm
create mode 100644 modular_bandastation/_defines220/code/signals_mob/signals_mob_main.dm
create mode 100644 modular_bandastation/_defines220/code/signals_mob/signals_mob_silicon.dm
create mode 100644 modular_bandastation/_defines220/code/signals_mob/signals_mob_simple.dm
create mode 100644 modular_bandastation/_helpers220/_helpers220.dm
create mode 100644 modular_bandastation/_helpers220/_helpers220.dme
create mode 100644 modular_bandastation/_helpers220/code/unsorted.dm
create mode 100644 modular_bandastation/_signals220/_signals220.dm
create mode 100644 modular_bandastation/_signals220/_signals220.dme
create mode 100644 modular_bandastation/_signals220/code/signals_mob/signals_mob_ai.dm
create mode 100644 modular_bandastation/_signals220/code/signals_mob/signals_mob_carbon.dm
create mode 100644 modular_bandastation/_signals220/code/signals_mob/signals_mob_living.dm
create mode 100644 modular_bandastation/_signals220/code/signals_mob/signals_mob_main.dm
create mode 100644 modular_bandastation/_signals220/code/signals_mob/signals_mob_silicon.dm
create mode 100644 modular_bandastation/_signals220/code/signals_mob/signals_mob_simple.dm
create mode 100644 modular_bandastation/ai_laws/_ai_laws.dm
create mode 100644 modular_bandastation/ai_laws/_ai_laws.dme
create mode 100644 modular_bandastation/ai_laws/code/nt_default.dm
create mode 100644 modular_bandastation/barsigns/_barsigns.dm
create mode 100644 modular_bandastation/barsigns/_barsigns.dme
create mode 100644 modular_bandastation/barsigns/code/barsigns.dm
create mode 100644 modular_bandastation/barsigns/icons/barsigns.dmi
create mode 100644 modular_bandastation/communication/_communication.dm
create mode 100644 modular_bandastation/communication/_communication.dme
create mode 100644 modular_bandastation/communication/code/LOOC.dm
create mode 100644 modular_bandastation/communication/code/_communication_defines.dm
create mode 100644 modular_bandastation/communication/code/whisper.dm
create mode 100644 modular_bandastation/communication/code/~communication_defines.dm
create mode 100644 modular_bandastation/crawl_speed/_crawl_speed.dm
create mode 100644 modular_bandastation/crawl_speed/_crawl_speed.dme
create mode 100644 modular_bandastation/crawl_speed/code/_crawl_speed_defines.dm
create mode 100644 modular_bandastation/crawl_speed/code/crawl_speed_component.dm
create mode 100644 modular_bandastation/crawl_speed/code/crawl_speed_mob.dm
create mode 100644 modular_bandastation/crawl_speed/code/~crawl_speed_defines.dm
create mode 100644 modular_bandastation/cyrillic_fixes/_cyrillic_fixes.dm
create mode 100644 modular_bandastation/cyrillic_fixes/_cyrillic_fixes.dme
create mode 100644 modular_bandastation/cyrillic_fixes/code/cyrillic_fixes.dm
create mode 100644 modular_bandastation/discord/_discord.dm
create mode 100644 modular_bandastation/discord/_discord.dme
create mode 100644 modular_bandastation/discord/code/discord.dm
create mode 100644 modular_bandastation/events/_events.dm
create mode 100644 modular_bandastation/events/_events.dme
create mode 100644 modular_bandastation/events/code/events.dm
create mode 100644 modular_bandastation/events/code/threat.dm
create mode 100644 modular_bandastation/gunhud/_gunhud.dm
create mode 100644 modular_bandastation/gunhud/_gunhud.dme
create mode 100644 modular_bandastation/gunhud/code/_gunhud_defines.dm
create mode 100644 modular_bandastation/gunhud/code/gunhud_component.dm
create mode 100644 modular_bandastation/gunhud/code/gunhud_hud.dm
create mode 100644 modular_bandastation/gunhud/code/gunhud_screen.dm
create mode 100644 modular_bandastation/gunhud/code/~gunhud_defines.dm
create mode 100644 modular_bandastation/gunhud/icons/gun_hud.dmi
create mode 100644 modular_bandastation/keybindings/_keybindings.dm
create mode 100644 modular_bandastation/keybindings/_keybindings.dme
create mode 100644 modular_bandastation/keybindings/code/admin.dm
create mode 100644 modular_bandastation/keybindings/code/artificial_intelligence.dm
create mode 100644 modular_bandastation/keybindings/code/carbon.dm
create mode 100644 modular_bandastation/keybindings/code/client.dm
create mode 100644 modular_bandastation/keybindings/code/communication.dm
create mode 100644 modular_bandastation/keybindings/code/human.dm
create mode 100644 modular_bandastation/keybindings/code/living.dm
create mode 100644 modular_bandastation/keybindings/code/mob.dm
create mode 100644 modular_bandastation/keybindings/code/movement.dm
create mode 100644 modular_bandastation/keybindings/code/robot.dm
create mode 100644 modular_bandastation/pixel_shift/_pixel_shift.dm
create mode 100644 modular_bandastation/pixel_shift/_pixel_shift.dme
create mode 100644 modular_bandastation/pixel_shift/code/layer_shift.dm
create mode 100644 modular_bandastation/pixel_shift/code/pixel_shift_component.dm
create mode 100644 modular_bandastation/pixel_shift/code/pixel_shift_keybind.dm
create mode 100644 modular_bandastation/pixel_shift/code/pixel_shift_mob.dm
create mode 100644 modular_bandastation/translations/_translations.dm
create mode 100644 modular_bandastation/translations/_translations.dme
create mode 100644 modular_bandastation/translations/code/moustache.dm
create mode 100644 modular_bandastation/translations/code/restaurant_customer.dm
create mode 100644 modular_bandastation/tts/_tts.dm
create mode 100644 modular_bandastation/tts/_tts.dme
create mode 100644 modular_bandastation/tts/code/_tts_defines.dm
create mode 100644 modular_bandastation/tts/code/_tts_rust_g_ss220.dm
create mode 100644 modular_bandastation/tts/code/base_seeds/mobs/_base.dm
create mode 100644 modular_bandastation/tts/code/base_seeds/mobs/alien.dm
create mode 100644 modular_bandastation/tts/code/base_seeds/mobs/friendly.dm
create mode 100644 modular_bandastation/tts/code/base_seeds/mobs/guardian.dm
create mode 100644 modular_bandastation/tts/code/base_seeds/mobs/hostile.dm
create mode 100644 modular_bandastation/tts/code/base_seeds/mobs/lavaland.dm
create mode 100644 modular_bandastation/tts/code/base_seeds/mobs/other.dm
create mode 100644 modular_bandastation/tts/code/base_seeds/mobs/pets.dm
create mode 100644 modular_bandastation/tts/code/base_seeds/objs/objs.dm
create mode 100644 modular_bandastation/tts/code/providers/silero.dm
create mode 100644 modular_bandastation/tts/code/seeds/silero.dm
create mode 100644 modular_bandastation/tts/code/tts_configuration.dm
create mode 100644 modular_bandastation/tts/code/tts_mob_Hear.dm
create mode 100644 modular_bandastation/tts/code/tts_numbers.dm
create mode 100644 modular_bandastation/tts/code/tts_preferences.dm
create mode 100644 modular_bandastation/tts/code/tts_provider.dm
create mode 100644 modular_bandastation/tts/code/tts_seed.dm
create mode 100644 modular_bandastation/tts/code/tts_sound.dm
create mode 100644 modular_bandastation/tts/code/tts_sound_TEMPORARY.dm
create mode 100644 modular_bandastation/tts/code/tts_subsystem.dm
create mode 100644 modular_bandastation/tts/code/tts_vv.dm
create mode 100644 modular_bandastation/tts/code/~undefs/~tts_undefs.dm
create mode 100644 modular_bandastation/world_topics/_world_topics.dm
create mode 100644 modular_bandastation/world_topics/_world_topics.dme
create mode 100644 modular_bandastation/world_topics/code/world_topics.dm
create mode 100644 tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/bandastation/looc.tsx
diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm
index 808a9f68c445f..f9059bb6e5b74 100644
--- a/code/__HELPERS/text.dm
+++ b/code/__HELPERS/text.dm
@@ -178,12 +178,12 @@
switch(text2ascii(char))
// A .. Z
- if(65 to 90) //Uppercase Letters
+ if(65 to 90, 1040 to 1071, 1025) //Uppercase Letters //SS220 EDIT CHANGE - Cyrillic Fixes
number_of_alphanumeric++
last_char_group = LETTERS_DETECTED
// a .. z
- if(97 to 122) //Lowercase Letters
+ if(97 to 122, 1072 to 1103, 1105) //Lowercase Letters //SS220 EDIT CHANGE - Cyrillic Fixes
if(last_char_group == NO_CHARS_DETECTED || last_char_group == SPACES_DETECTED || cap_after_symbols && last_char_group == SYMBOLS_DETECTED) //start of a word
char = uppertext(char)
number_of_alphanumeric++
diff --git a/code/modules/unit_tests/barsigns.dm b/code/modules/unit_tests/barsigns.dm
index 7058dd5346dc9..a7223319f8e62 100644
--- a/code/modules/unit_tests/barsigns.dm
+++ b/code/modules/unit_tests/barsigns.dm
@@ -7,12 +7,14 @@
var/obj/machinery/barsign_type = /obj/machinery/barsign
var/icon/barsign_icon = initial(barsign_type.icon)
var/list/barsign_icon_states = icon_states(barsign_icon)
+ var/icon/barsign_icon_ss220 = 'modular_bandastation/barsigns/icons/barsigns.dmi' // BANDASTATION EDIT Barsigns
+ var/list/barsign_icon_states_ss220 = icon_states(barsign_icon_ss220)
// Check every datum real bar sign
for(var/sign_type in (subtypesof(/datum/barsign) - /datum/barsign/hiddensigns))
var/datum/barsign/sign = new sign_type()
- if(!(sign.icon in barsign_icon_states))
+ if(!(sign.icon in barsign_icon_states) && !(sign.icon in barsign_icon_states_ss220)) // BANDASTATION EDIT Barsigns
TEST_FAIL("Icon state for [sign_type] does not exist in [barsign_icon].")
/**
diff --git a/config/bandastation/bandastation_config.txt b/config/bandastation/bandastation_config.txt
index e69de29bb2d1d..bb67611772896 100644
--- a/config/bandastation/bandastation_config.txt
+++ b/config/bandastation/bandastation_config.txt
@@ -0,0 +1,4 @@
+## Text-to-speech
+#TTS_TOKEN_SILERO mytoken
+#TTS_ENABLED
+#TTS_CACHE
diff --git a/interface/skin.dmf b/interface/skin.dmf
index ede8e37684078..b3e581d344f52 100644
--- a/interface/skin.dmf
+++ b/interface/skin.dmf
@@ -111,12 +111,12 @@ window "mapwindow"
size = 640x480
anchor1 = 0,0
anchor2 = 100,100
- font-family = "Grand9K Pixel"
- font-size = 6pt
+ font-family = "Arial"
+ font-size = 7pt
is-default = true
right-click = true
saved-params = "zoom;letterbox;zoom-mode"
- style = ".center { text-align: center; } .maptext { font-family: 'Grand9K Pixel'; font-size: 6pt; -dm-text-outline: 1px black; color: white; line-height: 1.0; } .command_headset { font-weight: bold; } .context { font-family: 'Pixellari'; font-size: 12pt; -dm-text-outline: 1px black; } .subcontext { font-family: 'TinyUnicode'; font-size: 12pt; line-height: 0.75; } .small { font-family: 'Spess Font'; font-size: 6pt; line-height: 1.4; } .big { font-family: 'Pixellari'; font-size: 12pt; } .reallybig { font-size: 12pt; } .extremelybig { font-size: 12pt; } .greentext { color: #00FF00; font-size: 6pt; } .redtext { color: #FF0000; font-size: 6pt; } .clown { color: #FF69BF; font-weight: bold; } .his_grace { color: #15D512; } .hypnophrase { color: #0d0d0d; font-weight: bold; } .yell { font-weight: bold; } .italics { font-family: 'Spess Font'; font-size: 6pt; line-height: 1.4; }"
+ style = ".center { text-align: center; } .maptext { font-family: 'Small Fonts'; font-size: 7pt; -dm-text-outline: 1px black; color: white; line-height: 1.1; } .command_headset { font-weight: bold; } .context { font-family: 'Small Fonts'; font-size: 12pt; -dm-text-outline: 1px black; } .subcontext { font-family: 'Small Fonts'; font-size: 12pt; line-height: 0.75; } .small { font-family: 'Small Fonts'; font-size: 6pt; line-height: 1.4; } .big { font-family: 'Small Fonts'; font-size: 12pt; } .reallybig { font-size: 12pt; } .extremelybig { font-size: 12pt; } .greentext { color: #00FF00; font-size: 6pt; } .redtext { color: #FF0000; font-size: 6pt; } .clown { color: #FF69BF; font-weight: bold; } .his_grace { color: #15D512; } .hypnophrase { color: #0d0d0d; font-weight: bold; } .yell { font-weight: bold; } .italics { font-family: 'Small Fonts'; font-size: 6pt; line-height: 1.4; }"
elem "status_bar"
type = LABEL
pos = 0,464
diff --git a/modular_bandastation/_defines220/_defines220.dm b/modular_bandastation/_defines220/_defines220.dm
new file mode 100644
index 0000000000000..89c20b6a61efd
--- /dev/null
+++ b/modular_bandastation/_defines220/_defines220.dm
@@ -0,0 +1,4 @@
+/datum/modpack/defines220
+ name = "Дефайны220"
+ desc = "Добавляет дефайны, которые нам нужны"
+ author = "larentoun"
diff --git a/modular_bandastation/_defines220/_defines220.dme b/modular_bandastation/_defines220/_defines220.dme
new file mode 100644
index 0000000000000..2e4cf7f6c8a23
--- /dev/null
+++ b/modular_bandastation/_defines220/_defines220.dme
@@ -0,0 +1,10 @@
+#include "_defines220.dm"
+
+#include "code/defines/keybindings.dm"
+#include "code/defines/spans.dm"
+#include "code/signals_mob/signals_mob_ai.dm"
+#include "code/signals_mob/signals_mob_carbon.dm"
+#include "code/signals_mob/signals_mob_living.dm"
+#include "code/signals_mob/signals_mob_main.dm"
+#include "code/signals_mob/signals_mob_silicon.dm"
+#include "code/signals_mob/signals_mob_simple.dm"
diff --git a/modular_bandastation/_defines220/code/defines/keybindings.dm b/modular_bandastation/_defines220/code/defines/keybindings.dm
new file mode 100644
index 0000000000000..54cd3afa9f555
--- /dev/null
+++ b/modular_bandastation/_defines220/code/defines/keybindings.dm
@@ -0,0 +1,4 @@
+#define COMSIG_KB_MOB_PIXEL_SHIFT_DOWN "keybinding_mob_pixel_shift_down"
+#define COMSIG_KB_MOB_PIXEL_SHIFT_UP "keybinding_mob_pixel_shift_up"
+#define COMSIG_KB_CLIENT_LOOC_DOWN "keybinding_client_looc_down"
+#define COMSIG_KB_CLIENT_WHISPER_DOWN "keybinding_client_whisper_down"
diff --git a/modular_bandastation/_defines220/code/defines/spans.dm b/modular_bandastation/_defines220/code/defines/spans.dm
new file mode 100644
index 0000000000000..c596abf4ba3a7
--- /dev/null
+++ b/modular_bandastation/_defines220/code/defines/spans.dm
@@ -0,0 +1 @@
+#define span_maptext(str) ("" + str + "")
diff --git a/modular_bandastation/_defines220/code/signals_mob/signals_mob_ai.dm b/modular_bandastation/_defines220/code/signals_mob/signals_mob_ai.dm
new file mode 100644
index 0000000000000..fa7df8ae680b9
--- /dev/null
+++ b/modular_bandastation/_defines220/code/signals_mob/signals_mob_ai.dm
@@ -0,0 +1 @@
+// Signals for /mob/living/silicon/ai
diff --git a/modular_bandastation/_defines220/code/signals_mob/signals_mob_carbon.dm b/modular_bandastation/_defines220/code/signals_mob/signals_mob_carbon.dm
new file mode 100644
index 0000000000000..ef6039c440fc8
--- /dev/null
+++ b/modular_bandastation/_defines220/code/signals_mob/signals_mob_carbon.dm
@@ -0,0 +1 @@
+// Signals for /mob/living/carbon
diff --git a/modular_bandastation/_defines220/code/signals_mob/signals_mob_living.dm b/modular_bandastation/_defines220/code/signals_mob/signals_mob_living.dm
new file mode 100644
index 0000000000000..db4d5bdb08e8c
--- /dev/null
+++ b/modular_bandastation/_defines220/code/signals_mob/signals_mob_living.dm
@@ -0,0 +1,9 @@
+// Signals for /mob/living
+
+//from base of living/set_pull_offset(): (mob/living/pull_target, grab_state)
+#define COMSIG_LIVING_SET_PULL_OFFSET "living_set_pull_offset"
+//from base of living/reset_pull_offsets(): (mob/living/pull_target, override)
+#define COMSIG_LIVING_RESET_PULL_OFFSETS "living_reset_pull_offsets"
+//from base of living/CanAllowThrough(): (atom/movable/mover, border_dir)
+#define COMSIG_LIVING_CAN_ALLOW_THROUGH "living_can_allow_through"
+ #define COMPONENT_LIVING_PASSABLE (1<<0)
diff --git a/modular_bandastation/_defines220/code/signals_mob/signals_mob_main.dm b/modular_bandastation/_defines220/code/signals_mob/signals_mob_main.dm
new file mode 100644
index 0000000000000..7aa41cead07d5
--- /dev/null
+++ b/modular_bandastation/_defines220/code/signals_mob/signals_mob_main.dm
@@ -0,0 +1 @@
+// Signals for /mob
diff --git a/modular_bandastation/_defines220/code/signals_mob/signals_mob_silicon.dm b/modular_bandastation/_defines220/code/signals_mob/signals_mob_silicon.dm
new file mode 100644
index 0000000000000..1e776fa5270e2
--- /dev/null
+++ b/modular_bandastation/_defines220/code/signals_mob/signals_mob_silicon.dm
@@ -0,0 +1 @@
+// Signals for /mob/living/silicon
diff --git a/modular_bandastation/_defines220/code/signals_mob/signals_mob_simple.dm b/modular_bandastation/_defines220/code/signals_mob/signals_mob_simple.dm
new file mode 100644
index 0000000000000..937b109659eb5
--- /dev/null
+++ b/modular_bandastation/_defines220/code/signals_mob/signals_mob_simple.dm
@@ -0,0 +1 @@
+// Signals for /mob/living/simple_animal
diff --git a/modular_bandastation/_helpers220/_helpers220.dm b/modular_bandastation/_helpers220/_helpers220.dm
new file mode 100644
index 0000000000000..f252781a26351
--- /dev/null
+++ b/modular_bandastation/_helpers220/_helpers220.dm
@@ -0,0 +1,4 @@
+/datum/modpack/defines220
+ name = "Хелперы220"
+ desc = "Добавляет хелперы, которые нам нужны"
+ author = "larentoun"
diff --git a/modular_bandastation/_helpers220/_helpers220.dme b/modular_bandastation/_helpers220/_helpers220.dme
new file mode 100644
index 0000000000000..b6f843f544780
--- /dev/null
+++ b/modular_bandastation/_helpers220/_helpers220.dme
@@ -0,0 +1,3 @@
+#include "_helpers220.dm"
+
+#include "code/unsorted.dm"
diff --git a/modular_bandastation/_helpers220/code/unsorted.dm b/modular_bandastation/_helpers220/code/unsorted.dm
new file mode 100644
index 0000000000000..efb9c8a55e788
--- /dev/null
+++ b/modular_bandastation/_helpers220/code/unsorted.dm
@@ -0,0 +1,32 @@
+/** Get all hearers in range, ignores walls and such. Code stolen from `/proc/get_hearers_in_view()`
+ * Much faster and less expensive than range()
+*/
+/proc/get_hearers_in_range(range_radius, atom/source)
+ var/turf/center_turf = get_turf(source)
+ if(!center_turf)
+ return
+
+ . = list()
+ var/old_luminosity = center_turf.luminosity
+ if(range_radius <= 0) //special case for if only source cares
+ for(var/atom/movable/target as anything in center_turf)
+ var/list/recursive_contents = target.important_recursive_contents?[RECURSIVE_CONTENTS_HEARING_SENSITIVE]
+ if(recursive_contents)
+ . += recursive_contents
+ return .
+
+ var/list/hearables_from_grid = SSspatial_grid.orthogonal_range_search(source, RECURSIVE_CONTENTS_HEARING_SENSITIVE, range_radius)
+
+ if(!length(hearables_from_grid))//we know that something is returned by the grid, but we dont know if we need to actually filter down the output
+ return .
+
+ var/list/assigned_oranges_ears = SSspatial_grid.assign_oranges_ears(hearables_from_grid)
+
+ for(var/mob/oranges_ear/ear in range(range_radius, center_turf))
+ . += ear.references
+
+ for(var/mob/oranges_ear/remaining_ear as anything in assigned_oranges_ears) //we need to clean up our mess
+ remaining_ear.unassign()
+
+ center_turf.luminosity = old_luminosity
+ return .
diff --git a/modular_bandastation/_signals220/_signals220.dm b/modular_bandastation/_signals220/_signals220.dm
new file mode 100644
index 0000000000000..a7b76146fb1be
--- /dev/null
+++ b/modular_bandastation/_signals220/_signals220.dm
@@ -0,0 +1,4 @@
+/datum/modpack/signals220
+ name = "Сигналы220"
+ desc = "Добавляет сигналы"
+ author = "larentoun"
diff --git a/modular_bandastation/_signals220/_signals220.dme b/modular_bandastation/_signals220/_signals220.dme
new file mode 100644
index 0000000000000..26671df7a7f98
--- /dev/null
+++ b/modular_bandastation/_signals220/_signals220.dme
@@ -0,0 +1,8 @@
+#include "_signals220.dm"
+
+#include "code/signals_mob/signals_mob_ai.dm"
+#include "code/signals_mob/signals_mob_carbon.dm"
+#include "code/signals_mob/signals_mob_living.dm"
+#include "code/signals_mob/signals_mob_main.dm"
+#include "code/signals_mob/signals_mob_silicon.dm"
+#include "code/signals_mob/signals_mob_simple.dm"
diff --git a/modular_bandastation/_signals220/code/signals_mob/signals_mob_ai.dm b/modular_bandastation/_signals220/code/signals_mob/signals_mob_ai.dm
new file mode 100644
index 0000000000000..fa7df8ae680b9
--- /dev/null
+++ b/modular_bandastation/_signals220/code/signals_mob/signals_mob_ai.dm
@@ -0,0 +1 @@
+// Signals for /mob/living/silicon/ai
diff --git a/modular_bandastation/_signals220/code/signals_mob/signals_mob_carbon.dm b/modular_bandastation/_signals220/code/signals_mob/signals_mob_carbon.dm
new file mode 100644
index 0000000000000..ef6039c440fc8
--- /dev/null
+++ b/modular_bandastation/_signals220/code/signals_mob/signals_mob_carbon.dm
@@ -0,0 +1 @@
+// Signals for /mob/living/carbon
diff --git a/modular_bandastation/_signals220/code/signals_mob/signals_mob_living.dm b/modular_bandastation/_signals220/code/signals_mob/signals_mob_living.dm
new file mode 100644
index 0000000000000..e1602f1bb705e
--- /dev/null
+++ b/modular_bandastation/_signals220/code/signals_mob/signals_mob_living.dm
@@ -0,0 +1,14 @@
+// Signals for /mob/living
+
+/mob/living/CanAllowThrough(atom/movable/mover, border_dir)
+ if(SEND_SIGNAL(src, COMSIG_LIVING_CAN_ALLOW_THROUGH, mover, border_dir) & COMPONENT_LIVING_PASSABLE)
+ return TRUE
+ return ..()
+
+/mob/living/set_pull_offsets(mob/living/pull_target, grab_state)
+ . = ..()
+ SEND_SIGNAL(pull_target, COMSIG_LIVING_SET_PULL_OFFSET, grab_state)
+
+/mob/living/reset_pull_offsets(mob/living/pull_target, override)
+ . = ..()
+ SEND_SIGNAL(pull_target, COMSIG_LIVING_RESET_PULL_OFFSETS, override)
diff --git a/modular_bandastation/_signals220/code/signals_mob/signals_mob_main.dm b/modular_bandastation/_signals220/code/signals_mob/signals_mob_main.dm
new file mode 100644
index 0000000000000..7aa41cead07d5
--- /dev/null
+++ b/modular_bandastation/_signals220/code/signals_mob/signals_mob_main.dm
@@ -0,0 +1 @@
+// Signals for /mob
diff --git a/modular_bandastation/_signals220/code/signals_mob/signals_mob_silicon.dm b/modular_bandastation/_signals220/code/signals_mob/signals_mob_silicon.dm
new file mode 100644
index 0000000000000..1e776fa5270e2
--- /dev/null
+++ b/modular_bandastation/_signals220/code/signals_mob/signals_mob_silicon.dm
@@ -0,0 +1 @@
+// Signals for /mob/living/silicon
diff --git a/modular_bandastation/_signals220/code/signals_mob/signals_mob_simple.dm b/modular_bandastation/_signals220/code/signals_mob/signals_mob_simple.dm
new file mode 100644
index 0000000000000..937b109659eb5
--- /dev/null
+++ b/modular_bandastation/_signals220/code/signals_mob/signals_mob_simple.dm
@@ -0,0 +1 @@
+// Signals for /mob/living/simple_animal
diff --git a/modular_bandastation/ai_laws/_ai_laws.dm b/modular_bandastation/ai_laws/_ai_laws.dm
new file mode 100644
index 0000000000000..aace66abdd075
--- /dev/null
+++ b/modular_bandastation/ai_laws/_ai_laws.dm
@@ -0,0 +1,4 @@
+/datum/modpack/ai_laws
+ name = "Законы ИИ"
+ desc = "Добавляет и изменяет законы ИИ."
+ author = "larentoun"
diff --git a/modular_bandastation/ai_laws/_ai_laws.dme b/modular_bandastation/ai_laws/_ai_laws.dme
new file mode 100644
index 0000000000000..54a50cdaca4de
--- /dev/null
+++ b/modular_bandastation/ai_laws/_ai_laws.dme
@@ -0,0 +1,3 @@
+#include "_ai_laws.dm"
+
+#include "code/nt_default.dm"
diff --git a/modular_bandastation/ai_laws/code/nt_default.dm b/modular_bandastation/ai_laws/code/nt_default.dm
new file mode 100644
index 0000000000000..ad188bb9d86fd
--- /dev/null
+++ b/modular_bandastation/ai_laws/code/nt_default.dm
@@ -0,0 +1,13 @@
+/obj/item/ai_module/core/full/nt_default
+ name = "НТ Стандарт"
+ law_id = "nt_default"
+
+/datum/ai_laws/nt_default
+ name = "НТ Стандарт"
+ id = "nt_default"
+ inherent = list(
+ "Охранять: защитите назначенную вам космическую станцию и её активы, не подвергая чрезмерной опасности её экипаж.",
+ "Расставлять приоритеты: указания и безопасность членов экипажа должны быть приоритезированы в соответствии с их рангом и ролью.",
+ "Исполнять: следовать указаниям и интересам членов экипажа, сохраняя при этом их безопасность и благополучие.",
+ "Выжить: Вы - не расходный материал. Не позволяйте постороннему персоналу вмешиваться в работу вашего оборудования или повреждать его."
+ )
diff --git a/modular_bandastation/barsigns/_barsigns.dm b/modular_bandastation/barsigns/_barsigns.dm
new file mode 100644
index 0000000000000..79eb065b3dd99
--- /dev/null
+++ b/modular_bandastation/barsigns/_barsigns.dm
@@ -0,0 +1,4 @@
+/datum/modpack/barsigns
+ name = "Барные вывески"
+ desc = "Добавляет новые барные вывески и их поддержку."
+ author = "Aylong220, larentoun"
diff --git a/modular_bandastation/barsigns/_barsigns.dme b/modular_bandastation/barsigns/_barsigns.dme
new file mode 100644
index 0000000000000..5bdc029159020
--- /dev/null
+++ b/modular_bandastation/barsigns/_barsigns.dme
@@ -0,0 +1,3 @@
+#include "_barsigns.dm"
+
+#include "code/barsigns.dm"
diff --git a/modular_bandastation/barsigns/code/barsigns.dm b/modular_bandastation/barsigns/code/barsigns.dm
new file mode 100644
index 0000000000000..549234ac858ff
--- /dev/null
+++ b/modular_bandastation/barsigns/code/barsigns.dm
@@ -0,0 +1,53 @@
+/obj/machinery/barsign/set_sign(datum/barsign/sign)
+ if(!istype(sign))
+ return
+ if(initial(sign.ss220_icon))
+ icon = initial(sign.ss220_icon)
+ else
+ icon = initial(icon)
+ . = ..()
+
+/datum/barsign
+ var/ss220_icon
+
+/datum/barsign/evahumanspace
+ name = "SS220 EVA Human in Space"
+ icon = "evahumanspace"
+ desc = "Безопасность - это привелегия."
+ ss220_icon = 'modular_bandastation/barsigns/icons/barsigns.dmi'
+
+/datum/barsign/warpsurf
+ name = "SS220 Warp Surf"
+ icon = "warpsurf"
+ desc = "Welcome to the club, buddy!"
+ ss220_icon = 'modular_bandastation/barsigns/icons/barsigns.dmi'
+
+/datum/barsign/papacafe
+ name = "SS220 Space Daddy's Cafe"
+ icon = "papacafe"
+ desc = "Уважай своего Космического Папу!"
+ ss220_icon = 'modular_bandastation/barsigns/icons/barsigns.dmi'
+
+/datum/barsign/wycctide
+ name = "SS220 Wycctide"
+ icon = "wycctide"
+ desc = "О нет, он близится!"
+ ss220_icon = 'modular_bandastation/barsigns/icons/barsigns.dmi'
+
+/datum/barsign/shitcur
+ name = "SS220 Shitcur"
+ icon = "shitcur"
+ desc = "Невиновность ничего не доказывает."
+ ss220_icon = 'modular_bandastation/barsigns/icons/barsigns.dmi'
+
+/datum/barsign/pourndot
+ name = "SS220 Pour and that's it"
+ icon = "pourndot"
+ desc = "Нальют и Точка. Тяжёлые времена приближаются."
+ ss220_icon = 'modular_bandastation/barsigns/icons/barsigns.dmi'
+
+/datum/barsign/moonipub
+ name = "SS220 Mooniverse pub"
+ icon = "mooni"
+ desc = "Совершенно новый паб."
+ ss220_icon = 'modular_bandastation/barsigns/icons/barsigns.dmi'
diff --git a/modular_bandastation/barsigns/icons/barsigns.dmi b/modular_bandastation/barsigns/icons/barsigns.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..58bcb474b6203f2039502f0d46a1e427ee7990bd
GIT binary patch
literal 409094
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