From a689b016a49a61c25a3c805f8aa755cd477e32a8 Mon Sep 17 00:00:00 2001 From: KandJX <83637364+YegorKandziuba@users.noreply.github.com> Date: Fri, 26 Jan 2024 20:29:28 +0200 Subject: [PATCH 01/45] Fix Guppy shuttle ventilation (#1833) --- maps/sierra/z1-z5_sierra.dmm | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/maps/sierra/z1-z5_sierra.dmm b/maps/sierra/z1-z5_sierra.dmm index f79e56f0b9d1d..54b85115f4edc 100644 --- a/maps/sierra/z1-z5_sierra.dmm +++ b/maps/sierra/z1-z5_sierra.dmm @@ -15860,7 +15860,8 @@ /area/medical/staging) "ctF" = ( /obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - dir = 1 + dir = 1; + id_tag = "guppy_shuttle_pump_out_internal" }, /obj/floor_decal/techfloor/orange{ dir = 8 @@ -49817,7 +49818,9 @@ /obj/floor_decal/techfloor/orange{ dir = 8 }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ + id_tag = "guppy_shuttle_pump_out_external" + }, /turf/simulated/floor/tiled/techfloor/grid, /area/guppy_hangar/start) "htx" = ( @@ -56443,7 +56446,9 @@ /obj/floor_decal/techfloor/orange{ dir = 4 }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ + id_tag = "guppy_shuttle_pump_out_external" + }, /obj/machinery/airlock_sensor/airlock_exterior{ frequency = 1331; id_tag = "guppy_shuttle_exterior_sensor"; @@ -62683,7 +62688,9 @@ /turf/simulated/floor/plating, /area/maintenance/firstdeck/centralstarboard) "jrK" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ + id_tag = "guppy_shuttle_pump" + }, /obj/floor_decal/techfloor/orange{ dir = 8 }, @@ -111305,7 +111312,9 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/maintenance/fourthdeck/port) "qIK" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ + id_tag = "guppy_shuttle_pump" + }, /obj/floor_decal/techfloor/orange{ dir = 4 }, @@ -143038,7 +143047,8 @@ /area/security/sierra/hallway/aft) "vrg" = ( /obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - dir = 1 + dir = 1; + id_tag = "guppy_shuttle_pump_out_internal" }, /obj/floor_decal/techfloor/orange{ dir = 4 From a40fcb307a856991b5f6e4e292fba2ceeeda6b62 Mon Sep 17 00:00:00 2001 From: Sierra Helper <125094432+SierraHelper@users.noreply.github.com> Date: Fri, 26 Jan 2024 21:30:08 +0300 Subject: [PATCH 02/45] =?UTF-8?q?=D0=A7=D0=B5=D0=B9=D0=BD=D0=B4=D0=B6?= =?UTF-8?q?=D0=BB=D0=BE=D0=B3=20=D0=B4=D0=BB=D1=8F=20PR=20#1833=20[ci=20sk?= =?UTF-8?q?ip]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html/changelogs/AutoChangeLog-sierra-pr-1833.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-sierra-pr-1833.yml diff --git a/html/changelogs/AutoChangeLog-sierra-pr-1833.yml b/html/changelogs/AutoChangeLog-sierra-pr-1833.yml new file mode 100644 index 0000000000000..77d67eaeaa3a5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-sierra-pr-1833.yml @@ -0,0 +1,4 @@ +author: KandJX +changes: + - {bugfix: Пофиксил венты Гуппа} +delete-after: true From 98e62a1af58bd790e64e6cc0fe365bd6fb7125e1 Mon Sep 17 00:00:00 2001 From: Sierra Helper <125094432+SierraHelper@users.noreply.github.com> Date: Sat, 27 Jan 2024 01:15:12 +0000 Subject: [PATCH 03/45] =?UTF-8?q?=D0=90=D0=B2=D1=82=D0=BE=D0=BC=D0=B0?= =?UTF-8?q?=D1=82=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=B0=D1=8F=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BC=D0=BF=D0=B8=D0=BB=D1=8F=D1=86=D0=B8=D1=8F=20=D1=87=D0=B5?= =?UTF-8?q?=D0=B9=D0=BD=D0=B4=D0=B6=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=20[ci=20?= =?UTF-8?q?skip]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html/changelog.html | 19 ++++++------------- html/changelogs/.all_changelog.yml | 4 ++++ .../AutoChangeLog-sierra-pr-1833.yml | 4 ---- 3 files changed, 10 insertions(+), 17 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-sierra-pr-1833.yml diff --git a/html/changelog.html b/html/changelog.html index a15b8931ae647..3fad47c1a53af 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -28,6 +28,12 @@

Sierra SS13

-->
+

27.01 - 2024

+

Обновления KandJX:

+
+
Пофиксил венты Гуппа
+
+

26.01 - 2024

Обновления LordNest:

@@ -523,19 +529,6 @@

Обновления SuhEugene:

Теперь (надеюсь) абсолютно все текстовые записи в файл используют RustG
Обновил DLL RustG до третьей версии, чтобы не только сервер работал, но и ваша локалка могла запуститься без проблем.
- -

25.11 - 2023

-

Обновления KandJX:

-
-
Значительные мапфиксы.
-
ГП имеет полный доступ, кроме АВД, Капитана и Внутренних Дел.
-
Выдан доступ Research всему ЭК.
-
Выдан доступ Research Storage всему отделу РнД. Отвечает за доступы в офис и раздевалку.
-
Выдан доступ EXTERNAL информационному технику
-
Доступ к инженерному коридору убран
-
Доступ к коридору вокруг чекпойна СБ 4ой палубы изменен с ЭКСТЕРНАЛ, на (СБ, МЕД, ИНЖ).
-
Охлаждение СМ теперь будет работать. Однако все равно ждём /turf/space/open от @sprtn
-
Icons by Icons8
diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 6830e3e55e9f2..fa8c753986b67 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -23088,3 +23088,7 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY sierra_genchangelog.p - soundadd: "\u041F\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u043B \u0437\ \u0432\u0443\u043A\u0438 \u041D\u0435\u043B\u043B\u0438 \u0434\u043B\u044F \u044F\ \u0449\u0435\u0440\u043E\u0432" +2024-01-27: + KandJX: + - bugfix: "\u041F\u043E\u0444\u0438\u043A\u0441\u0438\u043B \u0432\u0435\u043D\u0442\ + \u044B \u0413\u0443\u043F\u043F\u0430" diff --git a/html/changelogs/AutoChangeLog-sierra-pr-1833.yml b/html/changelogs/AutoChangeLog-sierra-pr-1833.yml deleted file mode 100644 index 77d67eaeaa3a5..0000000000000 --- a/html/changelogs/AutoChangeLog-sierra-pr-1833.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: KandJX -changes: - - {bugfix: Пофиксил венты Гуппа} -delete-after: true From 4c6deb8dbb71706e1cbd8df834d92d851ee00cd8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 27 Jan 2024 14:39:58 +0300 Subject: [PATCH 04/45] [MIRROR] Bump styfle/cancel-workflow-action from 0.12.0 to 0.12.1 --- .github/workflows/cancel.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cancel.yml b/.github/workflows/cancel.yml index 48967b95f0aa3..bf11bf4ea04d0 100644 --- a/.github/workflows/cancel.yml +++ b/.github/workflows/cancel.yml @@ -17,7 +17,7 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 3 steps: - - uses: styfle/cancel-workflow-action@01ce38bf961b4e243a6342cbade0dbc8ba3f0432 + - uses: styfle/cancel-workflow-action@85880fa0301c86cca9da44039ee3bb12d3bedbfa with: workflow_id: 3545321 access_token: ${{ github.token }} From 953ae8ad65b7c8c79504f15bccb7137837829fa0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 27 Jan 2024 14:40:11 +0300 Subject: [PATCH 05/45] [MIRROR] Bump dorny/paths-filter from 2.11.1 to 3.0.0 --- .github/workflows/generate_documentation.yml | 2 +- .github/workflows/test.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/generate_documentation.yml b/.github/workflows/generate_documentation.yml index dfa4a1dabba38..8cf42cbcc00f4 100644 --- a/.github/workflows/generate_documentation.yml +++ b/.github/workflows/generate_documentation.yml @@ -19,7 +19,7 @@ jobs: - name: checkout uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 - name: paths-filter - uses: dorny/paths-filter@4512585405083f25c027a35db413c2b3b9006d50 + uses: dorny/paths-filter@0bc4621a3135347011ad047f9ecf449bf72ce2bd id: filter with: filters: .github/workflow-config/preflight-filters.yml diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 481b5cbb5b742..c7a9ca371377b 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -21,7 +21,7 @@ jobs: - name: checkout uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 - name: paths-filter - uses: dorny/paths-filter@4512585405083f25c027a35db413c2b3b9006d50 + uses: dorny/paths-filter@0bc4621a3135347011ad047f9ecf449bf72ce2bd id: filter with: filters: .github/workflow-config/preflight-filters.yml From 701a853e97211952d5f1a69f313be57e2a508752 Mon Sep 17 00:00:00 2001 From: Sbotkin <5092934+Sbotkin@users.noreply.github.com> Date: Sat, 27 Jan 2024 14:40:05 +0300 Subject: [PATCH 06/45] [MIRROR] (re)moves the fleet report --- maps/torch/torch6_bridge.dmm | 2 +- packs/event_2022jul30/documents.dm | 9 --------- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/maps/torch/torch6_bridge.dmm b/maps/torch/torch6_bridge.dmm index a437f81063621..e4e462a423447 100644 --- a/maps/torch/torch6_bridge.dmm +++ b/maps/torch/torch6_bridge.dmm @@ -2201,7 +2201,6 @@ /obj/floor_decal/corner/blue{ dir = 10 }, -/obj/item/folder/envelope/declassified1, /obj/machinery/camera/network/bridge{ c_tag = "Bridge"; dir = 1 @@ -11492,6 +11491,7 @@ /obj/item/folder/yellow, /obj/item/folder/white, /obj/floor_decal/industrial/outline/yellow, +/obj/item/paper/dclassreport1, /turf/simulated/floor/tiled/dark/monotile, /area/bridge/storage) "Hg" = ( diff --git a/packs/event_2022jul30/documents.dm b/packs/event_2022jul30/documents.dm index 81f7c82fc0cba..40f5fe7e93589 100644 --- a/packs/event_2022jul30/documents.dm +++ b/packs/event_2022jul30/documents.dm @@ -1,12 +1,3 @@ -/obj/item/folder/envelope/declassified1 - desc = "A thick envelope. The Sol Fleet crest is stamped in the corner, along with 'PUBLIC RELEASE DOCUMENTATION.'" - - -/obj/item/folder/envelope/declassified1/Initialize() - . = ..() - new /obj/item/paper/dclassreport1 (src) - - /obj/item/paper/dclassreport1 name = "Declassified Report: Status of the Fleets" info = {"\ From 6e51889e075fd6c0a58c66765484d343c8fbcfa0 Mon Sep 17 00:00:00 2001 From: Sierra Helper <125094432+SierraHelper@users.noreply.github.com> Date: Sat, 27 Jan 2024 18:57:10 +0300 Subject: [PATCH 07/45] =?UTF-8?q?=D0=A7=D0=B5=D0=B9=D0=BD=D0=B4=D0=B6?= =?UTF-8?q?=D0=BB=D0=BE=D0=B3=20=D0=B4=D0=BB=D1=8F=20PR=20#1842=20[ci=20sk?= =?UTF-8?q?ip]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html/changelogs/AutoChangeLog-sierra-pr-1842.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-sierra-pr-1842.yml diff --git a/html/changelogs/AutoChangeLog-sierra-pr-1842.yml b/html/changelogs/AutoChangeLog-sierra-pr-1842.yml new file mode 100644 index 0000000000000..41a0a0cac281a --- /dev/null +++ b/html/changelogs/AutoChangeLog-sierra-pr-1842.yml @@ -0,0 +1,4 @@ +author: Sbotkin +changes: + - {maptweak: The "Status of the Fleets" is moved to the Bridge storage.} +delete-after: true From ba474dac0c5f7c2929172a69608985e7eec6eb76 Mon Sep 17 00:00:00 2001 From: Sierra Helper <125094432+SierraHelper@users.noreply.github.com> Date: Sun, 28 Jan 2024 01:20:58 +0000 Subject: [PATCH 08/45] =?UTF-8?q?=D0=90=D0=B2=D1=82=D0=BE=D0=BC=D0=B0?= =?UTF-8?q?=D1=82=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=B0=D1=8F=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BC=D0=BF=D0=B8=D0=BB=D1=8F=D1=86=D0=B8=D1=8F=20=D1=87=D0=B5?= =?UTF-8?q?=D0=B9=D0=BD=D0=B4=D0=B6=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=20[ci=20?= =?UTF-8?q?skip]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html/changelog.html | 21 ++++++------------- html/changelogs/.all_changelog.yml | 3 +++ .../AutoChangeLog-sierra-pr-1842.yml | 4 ---- 3 files changed, 9 insertions(+), 19 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-sierra-pr-1842.yml diff --git a/html/changelog.html b/html/changelog.html index 3fad47c1a53af..461d3dc5af1f0 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -28,6 +28,12 @@

Sierra SS13

-->
+

28.01 - 2024

+

Обновления Sbotkin:

+
+
The "Status of the Fleets" is moved to the Bridge storage.
+
+

27.01 - 2024

Обновления KandJX:

@@ -514,21 +520,6 @@

Обновления BurpleBineapple:

EMP damage to robotic legs and feet no longer immediately weaken the victim.
FBPs and IPCs first fall over before being paralyzed when their battery is dead or destroyed.
- -

26.11 - 2023

-

Обновления Kam_Survivor:

-
-
Backswept и Ponytail 7 (alt) теперь доступны для выбора
-
-

Обновления SuhEugene:

-
-
Добавил умножение задержки на √2 для диагонального движения. Теперь оно не будет ощущаться быстрым и неправильным.
-
Убрал неплохо жрущий ресурсы сервера цикл. Возможны баги с анимацией движения вынутых из карманов, портфеля и иных мест предметов.
-
Сделал так, чтобы предметы на карго-тележке двигались с той же скоростью, что и тележка. Это та, на которой инженеры водород для раста и мамки возят.
-
Пофиксил сохранение персонажей
-
Теперь (надеюсь) абсолютно все текстовые записи в файл используют RustG
-
Обновил DLL RustG до третьей версии, чтобы не только сервер работал, но и ваша локалка могла запуститься без проблем.
-
Icons by Icons8
diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index fa8c753986b67..2648b33115e5b 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -23092,3 +23092,6 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY sierra_genchangelog.p KandJX: - bugfix: "\u041F\u043E\u0444\u0438\u043A\u0441\u0438\u043B \u0432\u0435\u043D\u0442\ \u044B \u0413\u0443\u043F\u043F\u0430" +2024-01-28: + Sbotkin: + - maptweak: The "Status of the Fleets" is moved to the Bridge storage. diff --git a/html/changelogs/AutoChangeLog-sierra-pr-1842.yml b/html/changelogs/AutoChangeLog-sierra-pr-1842.yml deleted file mode 100644 index 41a0a0cac281a..0000000000000 --- a/html/changelogs/AutoChangeLog-sierra-pr-1842.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Sbotkin -changes: - - {maptweak: The "Status of the Fleets" is moved to the Bridge storage.} -delete-after: true From 541849b91f42a1da3eb9bcb726f518256a75c19f Mon Sep 17 00:00:00 2001 From: emmanuelbassil <6874235+emmanuelbassil@users.noreply.github.com> Date: Sun, 28 Jan 2024 13:24:58 +0300 Subject: [PATCH 09/45] [MIRROR] Fixes Radial menu in exosuits --- code/_onclick/hud/radial.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/_onclick/hud/radial.dm b/code/_onclick/hud/radial.dm index 90213e96bde3b..450a0130e7709 100644 --- a/code/_onclick/hud/radial.dm +++ b/code/_onclick/hud/radial.dm @@ -307,6 +307,8 @@ var/global/list/radial_menus = list() /proc/show_radial_menu(mob/user, atom/anchor, list/choices, uniqueid, radius, datum/callback/custom_check, require_near = FALSE, tooltips = FALSE, no_repeat_close = FALSE, list/check_locs, use_labels = FALSE) if(!user || !anchor || !length(choices)) return + if (istype(user.loc, /mob/living/exosuit)) + anchor = user.loc if(!uniqueid) uniqueid = "defmenu_[any2ref(user)]_[any2ref(anchor)]" From de01a2a8c2c63a9a31883ad137e36646a8ac4cc8 Mon Sep 17 00:00:00 2001 From: Sierra Helper <125094432+SierraHelper@users.noreply.github.com> Date: Sun, 28 Jan 2024 19:23:54 +0300 Subject: [PATCH 10/45] =?UTF-8?q?=D0=A7=D0=B5=D0=B9=D0=BD=D0=B4=D0=B6?= =?UTF-8?q?=D0=BB=D0=BE=D0=B3=20=D0=B4=D0=BB=D1=8F=20PR=20#1845=20[ci=20sk?= =?UTF-8?q?ip]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html/changelogs/AutoChangeLog-sierra-pr-1845.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-sierra-pr-1845.yml diff --git a/html/changelogs/AutoChangeLog-sierra-pr-1845.yml b/html/changelogs/AutoChangeLog-sierra-pr-1845.yml new file mode 100644 index 0000000000000..4e1051f291d7e --- /dev/null +++ b/html/changelogs/AutoChangeLog-sierra-pr-1845.yml @@ -0,0 +1,4 @@ +author: emmanuelbassil +changes: + - {bugfix: Radial menus now properly work when inside an exosuit} +delete-after: true From 2377a003773f5aa2736370a65bd02e01512d2f7f Mon Sep 17 00:00:00 2001 From: LordNest <77477080+LordNest@users.noreply.github.com> Date: Sun, 28 Jan 2024 20:25:05 +0400 Subject: [PATCH 11/45] Fix antagonists, unathi and update petting zoo (#1824) Co-authored-by: SuhEugene <32931701+SuhEugene@users.noreply.github.com> --- .../subsystems/initialization/robots.dm | 3 + .../ventcrawl/ventcrawl_atmospherics.dm | 3 + .../datums/species/species_overrides.dm | 27 ++ maps/sierra/icons/mob/onmob/item/lefthand.dmi | Bin 0 -> 1329 bytes .../mob/onmob/item}/lefthand_guns_secure.dmi | Bin .../sierra/icons/mob/onmob/item/righthand.dmi | Bin 0 -> 1551 bytes .../mob/onmob/item}/righthand_guns_secure.dmi | Bin .../sierra/icons/obj/baton.dmi | Bin maps/sierra/items/items.dm | 28 ++ maps/sierra/sierra.dm | 2 +- maps/sierra/z1-z5_sierra.dmm | 3 +- mods/antagonists/_antagonists.dme | 2 + mods/antagonists/code/blackout.dm | 80 +++++ mods/antagonists/code/operative.dm | 2 +- mods/antagonists/code/traitor.dm | 121 ++++--- mods/antagonists/code/uplink.dm | 93 +++++ mods/antagonists/icons/obj/blackout.dmi | Bin 0 -> 619 bytes mods/hairs_ports/code/_accessory_hair.dm | 12 - mods/leroy_beasts/_leroy_beasts.dm | 5 - mods/leroy_beasts/_leroy_beasts.dme | 7 - mods/petting_zoo/README.md | 81 +++++ mods/petting_zoo/_petting_zoo.dm | 5 + mods/petting_zoo/_petting_zoo.dme | 12 + .../code/beasts.dm | 61 +--- mods/petting_zoo/code/commanded.dm | 161 +++++++++ mods/petting_zoo/code/datums.dm | 319 ++++++++++++++++++ .../simple => mods/petting_zoo/code}/fox.dm | 22 +- .../simple => mods/petting_zoo/code}/koala.dm | 2 +- .../petting_zoo/code}/rabbit.dm | 8 +- .../icons/leroy_beasts_32x32.dmi | Bin .../icons/leroy_beasts_32x64.dmi | Bin .../mob => mods/petting_zoo/icons}/mobs.dmi | Bin .../petting_zoo/icons/onmob}/mob_holder.dmi | Bin mods/ssinput/README.md | 2 + packs/infinity/_pack.dm | 5 - .../icons/mob/onmob/items/lefthand.dmi | Bin 1186 -> 0 bytes .../icons/mob/onmob/items/righthand.dmi | Bin 1679 -> 0 bytes packs/infinity/icons/obj/items.dmi | Bin 24210 -> 24259 bytes 38 files changed, 945 insertions(+), 121 deletions(-) create mode 100644 maps/sierra/icons/mob/onmob/item/lefthand.dmi rename {packs/infinity/icons/mob/onmob/items => maps/sierra/icons/mob/onmob/item}/lefthand_guns_secure.dmi (100%) create mode 100644 maps/sierra/icons/mob/onmob/item/righthand.dmi rename {packs/infinity/icons/mob/onmob/items => maps/sierra/icons/mob/onmob/item}/righthand_guns_secure.dmi (100%) rename packs/infinity/icons/obj/item/weapons.dmi => maps/sierra/icons/obj/baton.dmi (100%) create mode 100644 mods/antagonists/code/blackout.dm create mode 100644 mods/antagonists/code/uplink.dm create mode 100644 mods/antagonists/icons/obj/blackout.dmi delete mode 100644 mods/leroy_beasts/_leroy_beasts.dm delete mode 100644 mods/leroy_beasts/_leroy_beasts.dme create mode 100644 mods/petting_zoo/README.md create mode 100644 mods/petting_zoo/_petting_zoo.dm create mode 100644 mods/petting_zoo/_petting_zoo.dme rename mods/{leroy_beasts => petting_zoo}/code/beasts.dm (88%) create mode 100644 mods/petting_zoo/code/commanded.dm create mode 100644 mods/petting_zoo/code/datums.dm rename {packs/infinity/mobs/simple => mods/petting_zoo/code}/fox.dm (66%) rename {packs/infinity/mobs/simple => mods/petting_zoo/code}/koala.dm (94%) rename {packs/infinity/mobs/simple => mods/petting_zoo/code}/rabbit.dm (87%) rename mods/{leroy_beasts => petting_zoo}/icons/leroy_beasts_32x32.dmi (100%) rename mods/{leroy_beasts => petting_zoo}/icons/leroy_beasts_32x64.dmi (100%) rename {packs/infinity/icons/mob => mods/petting_zoo/icons}/mobs.dmi (100%) rename {packs/infinity/icons/mob/onmob/items => mods/petting_zoo/icons/onmob}/mob_holder.dmi (100%) delete mode 100644 packs/infinity/icons/mob/onmob/items/lefthand.dmi delete mode 100644 packs/infinity/icons/mob/onmob/items/righthand.dmi diff --git a/code/controllers/subsystems/initialization/robots.dm b/code/controllers/subsystems/initialization/robots.dm index ca1eb2913fc42..e3af38b0344a3 100644 --- a/code/controllers/subsystems/initialization/robots.dm +++ b/code/controllers/subsystems/initialization/robots.dm @@ -15,6 +15,9 @@ SUBSYSTEM_DEF(robots) ) var/list/mmi_types_by_title = list( + // [SIERRA-ADD] - Allow to join as cyborg, + "cyborg" = /obj/item/device/mmi, + // [/SIERRA-ADD] , "robot" = /obj/item/organ/internal/posibrain, "drone" = /obj/item/device/mmi/digital/robot, "robot, flying" = /obj/item/organ/internal/posibrain, diff --git a/code/modules/ventcrawl/ventcrawl_atmospherics.dm b/code/modules/ventcrawl/ventcrawl_atmospherics.dm index d356caa32424e..f0a54cbf1497e 100644 --- a/code/modules/ventcrawl/ventcrawl_atmospherics.dm +++ b/code/modules/ventcrawl/ventcrawl_atmospherics.dm @@ -20,6 +20,9 @@ /obj/machinery/atmospherics/relaymove(mob/living/user, direction) if(user.loc != src || !(direction & initialize_directions)) //can't go in a way we aren't connecting to return + // [SIERRA-ADD] - SSINPUT + direction &= ~(direction & ~initialize_directions) + // [SIERRA-ADD] ventcrawl_to(user,findConnecting(direction),direction) /obj/machinery/atmospherics/proc/ventcrawl_to(mob/living/user, obj/machinery/atmospherics/target_move, direction) diff --git a/maps/sierra/datums/species/species_overrides.dm b/maps/sierra/datums/species/species_overrides.dm index 21846cf9e8ae3..49a2d057030cd 100644 --- a/maps/sierra/datums/species/species_overrides.dm +++ b/maps/sierra/datums/species/species_overrides.dm @@ -7,3 +7,30 @@ Various overrides for standart species, which are too tiny to have their own mod /obj/item/organ/internal/eyes/skrell eye_icon = 'maps/sierra/icons/mob/human_races/species/skrell/eyes.dmi' apply_eye_colour = FALSE + +// Unathi + +/datum/species/unathi + autohiss_basic_map = list( + "s" = list("ss", "sss", "ssss"), + + "с" = list("с", "сс", "ссс") + ) + autohiss_extra_map = list( + "x" = list("ks", "kss", "ksss"), + + "к" = list("х"), + + "г" = list("х"), + + "з" = list("с", "сс", "ссс"), + + "ч" = list("щ", "щщ", "щщщ"), + + "ж" = list("ш", "шш", "шшш") + + ) + autohiss_exempt = list( + LANGUAGE_UNATHI_SINTA, + LANGUAGE_UNATHI_YEOSA + ) diff --git a/maps/sierra/icons/mob/onmob/item/lefthand.dmi b/maps/sierra/icons/mob/onmob/item/lefthand.dmi new file mode 100644 index 0000000000000000000000000000000000000000..0ab48a0cf6f883cbfb46d11049d053b12448012e GIT binary patch literal 1329 zcmV-11004jp1^@s6jALRO0001jdQ@0+L}hbh za%pgMX>V=-0C=2JR&a84_w-Y6@%7{?OD!tS%+FJ>RWQ*r;NmRLOex6#a*U0*I5Sc+ z(=$pSoZ^zil2jm5Nr{UyC9|j)$TZ~QOe;#vO@*-G3X&2_^7G;olS?woQW1(x@F*sz zs-P%8g(yV?tW{QU^>YFH8URSgN7ujMhP40y1Zqh{K~#90?cG048$lGu@d0s!q`{&{ zX{1OT0f~enby85IOTr1#q%aCCC$KmG5~NOng2WM!BH=O>G|3SnZT2k;GLF4}*qM1V z0000000000002O4R-IUw23Sr&2JDkH?eO6taC}z`> zAVn;l&+Kx3UtCk|cei3Buf@3A@>ZYhSHRgxSac6=yI(3?k0-bK1huiTQJ7D~ann7w z+FtHg?Vo|R<8CXr`UGK%)pio>eyJC^>$uy>r9MIQEmEpQ4t3qB)+Y#8#YwHmp|3Z! z`T%+Jb&uqpUXS`1|3#q4^{5X300000000000000000000003u(!{OWyEG{Y~3_d1y|QdV!nt9iOxpOSMK4u9t6~*X|?RHA46hz?2Kz zq)&f3IaYd{oSdBKbam>TZeX_^f_G2lS z9shL5qL}~G3p~$se>yv^z6G|EC7qw7{a8_TB8$_a@z1Vs^0VgrKYCcP4^`XS+veux z#(X_IlpT_L=#fGmj7DZK7?{h;OXIRJ;&hGn_xGc$&7$#3*w$YB`R|(T?NQAC^u0Xj zFLumle>yp*bbxYwUYDLa{wU@@g#tJ6-6AaZ8ub}}6l06xBAzHzf4W#}gB##sE;l80=qE%qHb=YnE#v$>`KlxiehY0Tm;lG{{R30 z00003FsFVera(0NeDZt2#Yh(NK&1+9yn#RU(+3G)&T-{G@dgpdI0^0qqp4xcLoP*)Nm z@reNHO6K2!n?%t*44q}Q0@~LJyZo<4tbn?*3ZUp3LIS8Oy8w1Y0Ci>a91v+DfKWvM np^5-P6#;}Q0ti(E5UTzGQ=G$QqGaqy00000NkvXXu0mjf7i4;^ literal 0 HcmV?d00001 diff --git a/packs/infinity/icons/mob/onmob/items/lefthand_guns_secure.dmi b/maps/sierra/icons/mob/onmob/item/lefthand_guns_secure.dmi similarity index 100% rename from packs/infinity/icons/mob/onmob/items/lefthand_guns_secure.dmi rename to maps/sierra/icons/mob/onmob/item/lefthand_guns_secure.dmi diff --git a/maps/sierra/icons/mob/onmob/item/righthand.dmi b/maps/sierra/icons/mob/onmob/item/righthand.dmi new file mode 100644 index 0000000000000000000000000000000000000000..69294665fcaa0ff1760039764e954f0d9c6daeaa GIT binary patch literal 1551 zcmbW1X;2af7>2PtQ1d>QEVLanCDZcUL@3idP*hOJwpP@rwFD`}_10DKNOU*MsU{E9 zveq<7ltbIdvrI%gydVvaRr3UuHPdjN{n?LZc4yx2d*_|!*Z1T7@&b^a8fqXl005xj z?d6Wzar(}r1C@6+H6ncPj%6eUor!hF$3$FMd)69Ay( zTFljx396sW!Xr-G4I{`Efl_)vL z0d5?9&hKvyDg;AF6)0^+;72ziZJ9BG{dp=PsR?%LPJ)0c=UpWHD&UtSKqp-vB@FD< z%u%AR6gTg776DD~eM5pjT*O-&AKH4PJ%YOEU)TdFs(5IZ%jB)rcq%WBTW~w(b)JDF z{&{D9X*el)H#1_gLAq~y1CJHux*C-N#lwOf7M%$_HJfo23S+(P zo!JB@WfsoMoVn|OzoItkf5`%a#a4koA4qpT3WtMTv%pG>`4{^|J|Fo+K9|u?h>D_O zFqlg4I#d<6G#-NjhAnW z6REsVll}V*{mWq1aXIa{l-u#Pu59gU<7fRtrPU^FTrQVR@K4sGxqU~iL1~r;@+l%3 zo6X8#J2csQ&OyTF#?g)Fi;(e!`-slW9IebI7uiwYSCBB|xLr-LMDk^mP6#LgqKd)p z4;pldw!T8ve^n4mA?POP%6wO`s9VO(TX8m5*t1U) zd$zK7J!t`nhs$HlHnoMHqDqi!0G5VlFy=Dfr_e#Qs1jM`M{T+r13bUOh*X*Z!_OIs zK4L!YLk&sMa~Tblfvz7OMt`(qb=vQaAJRGIWNlAb0uiDG0k zshqgQ*?Dr?(Ox$mJaKC_@CloZ<@5RaT@dCiDTL-2#UE@^t zO}nNS`H%*RWActA^OFD;#o`*hYG#0i7C7ET4|T-+qQQ+<=A4>$Es**W!?AaeU38F* z0<;cR4rvXR9p?^px6eGSOMf=E`qxWLt4f)^SfjX#}$~MG^MF6T?3pVg?__5B(?A=UeboW!$ glVx8Wu@mJg$`17f^j0Wt=feZMJ&^8?-EbNI07-ks<^TWy literal 0 HcmV?d00001 diff --git a/packs/infinity/icons/mob/onmob/items/righthand_guns_secure.dmi b/maps/sierra/icons/mob/onmob/item/righthand_guns_secure.dmi similarity index 100% rename from packs/infinity/icons/mob/onmob/items/righthand_guns_secure.dmi rename to maps/sierra/icons/mob/onmob/item/righthand_guns_secure.dmi diff --git a/packs/infinity/icons/obj/item/weapons.dmi b/maps/sierra/icons/obj/baton.dmi similarity index 100% rename from packs/infinity/icons/obj/item/weapons.dmi rename to maps/sierra/icons/obj/baton.dmi diff --git a/maps/sierra/items/items.dm b/maps/sierra/items/items.dm index 22385dc949995..793cfbed5b2c7 100644 --- a/maps/sierra/items/items.dm +++ b/maps/sierra/items/items.dm @@ -453,6 +453,34 @@ Passports icon_state = "gangtool-white" region_access = ACCESS_REGION_GENERAL +// Overrides + +/obj/item/melee/baton + icon = 'maps/sierra/icons/obj/baton.dmi' + icon_state = "stunbaton" + item_state = "baton" + item_icons = list( + slot_r_hand_str = 'maps/sierra/icons/mob/onmob/item/righthand.dmi', + slot_l_hand_str = 'maps/sierra/icons/mob/onmob/item/lefthand.dmi', + ) + +/obj/item/melee/baton/on_update_icon() + if(status) + icon_state = "[initial(icon_state)]_active" + item_state = "[initial(item_state)]_active" + else if(!bcell) + icon_state = "[initial(icon_state)]_nocell" + item_state = "[initial(item_state)]" + else + icon_state = "[initial(icon_state)]" + item_state = "[initial(item_state)]" + + if(icon_state == "[initial(item_state)]_active") + set_light(1.5, 2, "#75acff") + else + set_light(0) + loc.update_icon() + #undef REMOTE_OPEN #undef REMOTE_BOLT #undef REMOTE_ELECT diff --git a/maps/sierra/sierra.dm b/maps/sierra/sierra.dm index de73b541825dd..d99b22d1947e2 100644 --- a/maps/sierra/sierra.dm +++ b/maps/sierra/sierra.dm @@ -182,7 +182,7 @@ #include "../../mods/fancy_sofas/_fancy_sofas.dme" #include "../../mods/jukebox_tapes/_jukebox_tapes.dme" #include "../../mods/legalese_language/_legalese.dme" - #include "../../mods/leroy_beasts/_leroy_beasts.dme" + #include "../../mods/petting_zoo/_petting_zoo.dme" #include "../../mods/screentips/_screentips.dme" #include "../../mods/tajara/_tajara.dme" diff --git a/maps/sierra/z1-z5_sierra.dmm b/maps/sierra/z1-z5_sierra.dmm index 54b85115f4edc..dd3484f8607df 100644 --- a/maps/sierra/z1-z5_sierra.dmm +++ b/maps/sierra/z1-z5_sierra.dmm @@ -29818,7 +29818,7 @@ "eqV" = ( /obj/floor_decal/corner/red/mono, /obj/structure/closet/secure_closet{ - name = "Security Equipment Locker"; + name = "Checkpoint Locker"; req_access = list("ACCESS_SECURITY") }, /obj/floor_decal/industrial/outline/yellow, @@ -92673,6 +92673,7 @@ d2 = 4; icon_state = "0-4" }, +/mob/living/simple_animal/hostile/commanded/rex, /turf/simulated/floor/wood/mahogany, /area/crew_quarters/heads/office/hos/cobed) "nSz" = ( diff --git a/mods/antagonists/_antagonists.dme b/mods/antagonists/_antagonists.dme index f571dcf97e1e1..911fe25f76179 100644 --- a/mods/antagonists/_antagonists.dme +++ b/mods/antagonists/_antagonists.dme @@ -3,11 +3,13 @@ #include "_antagonists.dm" +#include "code/blackout.dm" #include "code/ert.dm" #include "code/mercenary.dm" #include "code/revolutionary.dm" #include "code/operative.dm" #include "code/traitor.dm" #include "code/teleportation.dm" +#include "code/uplink.dm" #endif diff --git a/mods/antagonists/code/blackout.dm b/mods/antagonists/code/blackout.dm new file mode 100644 index 0000000000000..8d298493a3667 --- /dev/null +++ b/mods/antagonists/code/blackout.dm @@ -0,0 +1,80 @@ +// Too complex, so different file for it +// Blackout tool, used to trigger massive electricity outttage on ship or station, including connected levels. +// It may have additional shots to use, but currently balanced to one shot. + +/datum/uplink_item/item/tools/blackout + name = "High Pulse Electricity Outage Tool" + item_cost = 36 + path = /obj/item/device/blackout + desc = "A device which can create power surge in terminal, spread it in power network and temporally creating blackout." + +/obj/item/device/blackout + name = "Energy network scanner" + desc = "A device with several metal antennas. It looks like a scanner or multimeter, but this one is completely black." + icon = 'mods/antagonists/icons/obj/blackout.dmi' + icon_state = "device_blackout-off" + + var/severity = 2 + var/shots = 1 + var/lastUse = 0 + var/cooldown = (20 MINUTES) + +/obj/item/device/blackout/afterattack(obj/target, mob/user, proximity) + if(!proximity) + return + if(!istype(target)) + return + + target.add_fingerprint(user) + + if(istype(target, /obj/machinery/power/terminal)) + var/obj/machinery/power/terminal/terminal = target + + if(!terminal.powernet) + to_chat(user, SPAN_WARNING("This power station isn't connected to power net.")) + return + + if(check_to_use()) + to_chat(user, SPAN_WARNING("Device does not respond. Perhaps you need to try later.")) + return + + if(!shots) + to_chat(user, SPAN_WARNING("Device does not respond.")) + return + + hacktheenergy(terminal, user) + +/obj/item/device/blackout/proc/hacktheenergy(obj/machinery/power/terminal/terminal_in, mob/user) + if(!istype(terminal_in) || !user) return // security + + src.audible_message("Synthesized recording states, \"-- Вас приветствует Ассистент КиДжи. Начало. Производится подключение к терминалу. --\"") + if(!do_after(user, 60, terminal_in)) return + + src.audible_message("Synthesized recording states, \"-- Подключение к терминалу успешно. Начато получение информации о конфигурации электросети... --\"") + if(!do_after(user, 160, terminal_in)) return + + src.audible_message("Synthesized recording states, \"-- Сканирование корабельной электросети успешно. Начинается процедура перегрузки корабельной электросети. Не прерывайте работу терминала. --\"") + icon_state = "device_blackout-on" + playsound(src, 'sound/items/goggles_charge.ogg', 50, 1) + + if(do_after(user, 80, terminal_in)) + src.audible_message("Synthesized recording states, \"-- Перегрузка завершена. Можете отсоединять терминал. \ + Утилизируйте устройство после использования. --\"") + + shots-- + cooldown = world.time + + power_failure() + + log_and_message_admins("[key_name(usr)] used \the [src.name] on \the [admin_jump_link(terminal_in, src)] to shutdown entire ship.") + + icon_state = "device_blackout-off" + +/obj/item/device/blackout/proc/check_to_use() + return lastUse <= (world.time - cooldown) + +/obj/item/device/blackout/examine(mob/user) + . = ..() + if (isobserver(user) || (user.mind && user.mind.special_role != null) || user.skill_check(SKILL_DEVICES, SKILL_EXPERIENCED) || user.skill_check(SKILL_ELECTRICAL, SKILL_EXPERIENCED)) + to_chat(user, "This device appears to be able to send a signal to overload the power grid. ") + return diff --git a/mods/antagonists/code/operative.dm b/mods/antagonists/code/operative.dm index 9b3644ea5150b..a2fe9515d1a12 100644 --- a/mods/antagonists/code/operative.dm +++ b/mods/antagonists/code/operative.dm @@ -59,6 +59,6 @@ /obj/item/clothing/mask/gas/syndicate, /obj/item/storage/backpack/dufflebag/syndie_kit/plastique, /obj/item/storage/box/anti_photons, - /obj/item/device/encryptionkey/syndicate, + /obj/item/device/encryptionkey/syndie_full, /obj/item/card/emag ) diff --git a/mods/antagonists/code/traitor.dm b/mods/antagonists/code/traitor.dm index 15331e19b5362..ad58cade54310 100644 --- a/mods/antagonists/code/traitor.dm +++ b/mods/antagonists/code/traitor.dm @@ -42,16 +42,6 @@ airlock.ex_act(1) qdel(src) -// -// Uplink part -// - -/datum/uplink_item/item/tools/door_charge - name = "Door Charge" - desc = "Special explosive, which can be planted on doors and will explode when somebody will open this door." - item_cost = 14 - path = /obj/item/door_charge - // // BLUESPACE JAUNTER // @@ -107,31 +97,10 @@ to_chat(user, "You can't link [src] to [target]!") update_icon() -// -// Uplink part -// - /obj/item/storage/box/syndie_kit/jaunter startswith = list(/obj/item/device/syndietele, /obj/item/device/syndiejaunter) -/datum/uplink_item/item/tools/jaunter - name = "Bluespace Jaunter" - item_cost = 42 - path = /obj/item/storage/box/syndie_kit/jaunter - desc = "Disposable one way teleportation device. Use with care. Don't forget to link jaunter to the beacon!" - - -// -// Psi Amp - Uplink part (Here because turned off by Bay12) -// - -/datum/uplink_item/item/visible_weapons/psi_amp - name = "Cerebroenergetic Psionic Amplifier" - item_cost = 50 - path = /obj/item/clothing/head/helmet/space/psi_amp/lesser - desc = "A powerful, illegal psi-amp. Boosts latent psi-faculties to extremely high levels." - // // HOLOBOMBS // @@ -215,12 +184,88 @@ startswith = list(/obj/item/device/holobomb = 5, /obj/item/paper/holobomb = 1) // -// Holobombs - Uplink part +// Poison // -/datum/uplink_item/item/tools/holobomb - name = "Box of holobombs" - item_cost = 32 - path =/obj/item/storage/box/syndie_kit/holobombs - desc = "Contains 5 holobomb and instruction. \ - A bomb that changes appearance, and can destroy some hands." +/obj/item/storage/box/syndie_kit/bioterror + startswith = list( + /obj/item/reagent_containers/glass/beaker/vial/random/toxin/bioterror = 7 + ) + +/obj/item/reagent_containers/glass/beaker/vial/random/toxin/bioterror + random_reagent_list = list( + list(/datum/reagent/drugs/mindbreaker = 10, /datum/reagent/drugs/hextro = 20) = 2, + list(/datum/reagent/toxin/carpotoxin = 30) = 2, + list(/datum/reagent/impedrezene = 30) = 2, + list(/datum/reagent/mutagen = 30) = 2, + list(/datum/reagent/toxin/amatoxin = 30) = 2, + list(/datum/reagent/drugs/cryptobiolin = 30) = 2, + list(/datum/reagent/impedrezene = 30) = 2, + list(/datum/reagent/toxin/potassium_chlorophoride = 30) = 2, + list(/datum/reagent/acid/polyacid = 30) = 2, + list(/datum/reagent/radium = 30) = 2, + list(/datum/reagent/toxin/zombiepowder = 30) = 1) + +// Key + +/obj/item/device/encryptionkey/syndie_full + icon_state = "cypherkey" + channels = list("Mercenary" = 1, "Command" = 1, "Security" = 1, "Engineering" = 1, "Exploration" = 1, "Science" = 1, "Medical" = 1, "Supply" = 1, "Service" = 1) + origin_tech = list(TECH_ESOTERIC = 3) + syndie = 1 + +// Stimm + +/obj/item/reagent_containers/hypospray/autoinjector/stimpack + name = "stimpack" + band_color = COLOR_PINK //inf //was: COLOR_DARK_GRAY + starts_with = list(/datum/reagent/nitritozadole = 5) + +/datum/reagent/nitritozadole + name = "Nitritozadole" + description = "Nitritozadole is a very dangerous mix, which can increase your speed temporarly." + taste_description = "metal" + reagent_state = LIQUID + color = "#ff2681" + metabolism = REM * 0.20 + overdose = REAGENTS_OVERDOSE / 3 + value = 4.5 + +/datum/reagent/nitritozadole/affect_blood(mob/living/carbon/M, alien, removed) + if(alien == SPECIES_DIONA) + return + + if(prob(2)) + to_chat(M, SPAN_DANGER("My heart gonna break out from the chest!")) + M.stun_effect_act(0, 15, BP_CHEST, "heart damage") //a small pain without damage + if(prob(15)) + for(var/obj/item/organ/internal/heart/H in M.internal_organs) + H.damage += 1 + + if(prob(5)) + M.emote(pick("twitch", "blink_r", "shiver")) + M.add_chemical_effect(CE_SPEEDBOOST, 1.5) + M.add_chemical_effect(CE_PULSE, 3) + + +// Radlaser + +/obj/item/device/scanner/health/syndie + name = "health analyzer" + desc = "A hand-held body scanner able to distinguish vital signs of the subject." + item_flags = ITEM_FLAG_NO_BLUDGEON + matter = list(MATERIAL_ALUMINIUM = 200) + origin_tech = list(TECH_MAGNET = 3, TECH_BIO = 2, TECH_ESOTERIC = 2) + +/obj/item/device/scanner/health/syndie/scan(mob/living/carbon/human/A, mob/user) + playsound(src, 'sound/effects/fastbeep.ogg', 20) + if(!istype(A)) + return + + A.apply_damage(30, DAMAGE_RADIATION, damage_flags = DAMAGE_FLAG_DISPERSED) + +/obj/item/device/scanner/health/syndie/examine(mob/user) + . = ..() + if (isobserver(user) || (user.mind && user.mind.special_role != null) || user.skill_check(SKILL_DEVICES, SKILL_MASTER) || user.skill_check(SKILL_MEDICAL, SKILL_MASTER)) + to_chat(user, "The scanner contacts do not look as they should. ") + return diff --git a/mods/antagonists/code/uplink.dm b/mods/antagonists/code/uplink.dm new file mode 100644 index 0000000000000..0d07d687bfd62 --- /dev/null +++ b/mods/antagonists/code/uplink.dm @@ -0,0 +1,93 @@ +// +// DOOR CHARGE Uplink part +// + +/datum/uplink_item/item/tools/door_charge + name = "Door Charge" + desc = "Special explosive, which can be planted on doors and will explode when somebody will open this door." + item_cost = 14 + path = /obj/item/door_charge + +// +// JAINTER Uplink part +// + +/datum/uplink_item/item/tools/jaunter + name = "Bluespace Jaunter" + item_cost = 42 + path = /obj/item/storage/box/syndie_kit/jaunter + desc = "Disposable one way teleportation device. Use with care. Don't forget to link jaunter to the beacon!" + +// +// Psi Amp - Uplink part (Here because turned off by Bay12) +// + +/datum/uplink_item/item/visible_weapons/psi_amp + name = "Cerebroenergetic Psionic Amplifier" + item_cost = 50 + path = /obj/item/clothing/head/helmet/space/psi_amp/lesser + desc = "A powerful, illegal psi-amp. Boosts latent psi-faculties to extremely high levels." + +// +// Holobombs - Uplink part +// + +/datum/uplink_item/item/tools/holobomb + name = "Box of holobombs" + item_cost = 32 + path =/obj/item/storage/box/syndie_kit/holobombs + desc = "Contains 5 holobomb and instruction. \ + A bomb that changes appearance, and can destroy some hands." + +// +// С-4 pack - Uplink part +// + +/datum/uplink_item/item/tools/plastique_bag + name = "Box of holobombs" + item_cost = 48 + path =/obj/item/storage/backpack/dufflebag/syndie_kit/plastique + desc = "Contains 6 C-4 charges at 50% discount." + +// +// Poison - Uplink part +// + +/datum/uplink_item/item/tools/bioterror + name = "Poisons kit" + desc = "A box, containing 7 vials of random and very deadly poisons." + item_cost = 48 + path = /obj/item/storage/box/syndie_kit/bioterror + +// +// Encrypt key - Uplink part +// + +/datum/uplink_item/item/tools/encryptionkey_full + name = "Special Encryption Key" + desc = "This headset encryption key will allow you listen and speak on any channel! Use a screwdriver on your headset to exchange keys." + item_cost = 24 + path = /obj/item/device/encryptionkey/syndie_full + +// Stimpack + +/datum/uplink_item/item/tools/stimpack + name = "Stimpack" + desc = "Autoinjector, containing 5u of experimental stimulants, that will increase your speed temporarly." + item_cost = 18 + antag_costs = list(MODE_MERCENARY = 12) + path = /obj/item/reagent_containers/hypospray/autoinjector/stimpack + +// Radlaser + +/datum/uplink_item/item/tools/radlaser + name = "Radioactive Microlaser" + item_cost = 18 + path = /obj/item/device/scanner/health/syndie + desc = "A tiny microlaser, hidden in health analyzer, that can irradiate your targets." + +/datum/uplink_item/item/tools/blackout + name = "High Pulse Electricity Outage Tool" + item_cost = 24 + path = /obj/item/device/blackout + desc = "A device which can create power surge in terminal, spread it in power network and temporally creating blackout." diff --git a/mods/antagonists/icons/obj/blackout.dmi b/mods/antagonists/icons/obj/blackout.dmi new file mode 100644 index 0000000000000000000000000000000000000000..a0d4df3eeef5cc1959bb667807820309b252e3fa GIT binary patch literal 619 zcmV-x0+juUP)eL_t(oh3%KoZo@DL zMeQ2gW=`F$?Y1oc|DnU~GdKz&N+a`_gWwWJ4%fM@!yEGhG&mV^7YuosE}Vkn=G5}~ zye3$2BAybw9j5>U39Gqz13-*YhL*eYW%xMTaR5khys{GX98-*Wyc%(Ofhl3WWwt=& zpQ|}3xP9HF2Jj#*G=Qhb_b`F15a4@@34Sya6oq_&*BSk4C*TXTC&=^}V@9@sl9vRM zfKmY!r;B77hUqf>8F5D!2}y{FRjB0Ukmh+#{42l|f|t1$I3-jCLIEA8L&6f7yKc3- zWR$Su^^XCT{21~6>wEVH-5+#+(EY(K{K5L&v$gp(x8v6C`P#mv)p3!+78m`&5`}7i zuwLPU33Liu9!{;WJwf*ed+-Or2XX)REgl5k{lQWF!9QErCv};y?lk}a002ovPDHLk FV1gbA0gnIx literal 0 HcmV?d00001 diff --git a/mods/hairs_ports/code/_accessory_hair.dm b/mods/hairs_ports/code/_accessory_hair.dm index 0e0bbeab39175..3dfd957cd056c 100644 --- a/mods/hairs_ports/code/_accessory_hair.dm +++ b/mods/hairs_ports/code/_accessory_hair.dm @@ -41,9 +41,6 @@ /datum/sprite_accessory/hair/modpack_hairs_port/aurora_belenko name = "Belenko" icon_state = "hair_belenko" -/datum/sprite_accessory/hair/modpack_hairs_port/aurora_braid_grande - name = "Braid Grande" - icon_state = "hair_braid_grande" /datum/sprite_accessory/hair/modpack_hairs_port/aurora_afrobig name = "Afro Big" icon_state = "hair_afrobig" @@ -51,9 +48,6 @@ /datum/sprite_accessory/hair/modpack_hairs_port/aurora_bangshort name = "Bang Short" icon_state = "hair_bangshort" -/datum/sprite_accessory/hair/modpack_hairs_port/aurora_braid_medium - name = "Braid Medium" - icon_state = "hair_braid_medium" /datum/sprite_accessory/hair/modpack_hairs_port/aurora_bun_casual name = "Bun Casual" icon_state = "hair_bun_casual" @@ -116,9 +110,6 @@ /datum/sprite_accessory/hair/modpack_hairs_port/inf_pigtails_kagami name = "Pigtails Kagami" icon_state = "hair_pigtails_kagami" -/datum/sprite_accessory/hair/modpack_hairs_port/inf_ponytail_hayasaka - name = "Ponytail Hayasaka" - icon_state = "hair_ponytail_hayasaka" /datum/sprite_accessory/hair/modpack_hairs_port/inf_roxy name = "Roxy" icon_state = "hair_roxy" @@ -167,9 +158,6 @@ /datum/sprite_accessory/hair/modpack_hairs_port/inf_pigtails_low name = "Pigtail Slow" icon_state = "hair_pigtails_low" -/datum/sprite_accessory/hair/modpack_hairs_port/inf_ponytailpiky - name = "Ponytail Spiky" - icon_state = "hair_ponytailpiky" /datum/sprite_accessory/hair/modpack_hairs_port/inf_toph name = "Toph" icon_state = "hair_toph" diff --git a/mods/leroy_beasts/_leroy_beasts.dm b/mods/leroy_beasts/_leroy_beasts.dm deleted file mode 100644 index 1b4c5dfaa6da6..0000000000000 --- a/mods/leroy_beasts/_leroy_beasts.dm +++ /dev/null @@ -1,5 +0,0 @@ - -/singleton/modpack/leroy_beasts - name = "Leroy's Beasts" - desc = "Набор различных зверей от Лероя: мейн-кун, каракал, несколько пород собак, горилла, лягушка, кролик и много других." - author = "Papa Leroy#5647" diff --git a/mods/leroy_beasts/_leroy_beasts.dme b/mods/leroy_beasts/_leroy_beasts.dme deleted file mode 100644 index 8271737bdb306..0000000000000 --- a/mods/leroy_beasts/_leroy_beasts.dme +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef MODPACK_LEROY_BEASTS -#define MODPACK_LEROY_BEASTS - -#include "_leroy_beasts.dm" -#include "code/beasts.dm" - -#endif diff --git a/mods/petting_zoo/README.md b/mods/petting_zoo/README.md new file mode 100644 index 0000000000000..b8382692fc398 --- /dev/null +++ b/mods/petting_zoo/README.md @@ -0,0 +1,81 @@ + +#### Список PRов: + +- https://github.com/SierraBay/SierraBay12/pull/16 +- https://github.com/SierraBay/SierraBay12/pull/1824 + + + +## Мод-пример + +ID мода: PETTING_ZOO + + +### Описание мода + +Различное зверьё + + +### Изменения *кор кода* + +- `Отсутствуют` + + +### Оверрайды + +- `Отсутствуют` + + + +### Дефайны + +- `Отсутствуют` + + +### Используемые файлы, не содержащиеся в модпаке + +- `Отсутствуют` + + +### Авторы: + +LordNest (Code) +PapaLeroy (Sprites) +Zhuzhila (AI) + diff --git a/mods/petting_zoo/_petting_zoo.dm b/mods/petting_zoo/_petting_zoo.dm new file mode 100644 index 0000000000000..d22c828906b69 --- /dev/null +++ b/mods/petting_zoo/_petting_zoo.dm @@ -0,0 +1,5 @@ + +/singleton/modpack/petting_zoo + name = "Petting Zoo" + desc = "Контактный зоопарк имени Папы Лероя. Добавляет различных животных в билд." + author = "Papa Leroy#5647, LordNest" diff --git a/mods/petting_zoo/_petting_zoo.dme b/mods/petting_zoo/_petting_zoo.dme new file mode 100644 index 0000000000000..e0ea31aeeca28 --- /dev/null +++ b/mods/petting_zoo/_petting_zoo.dme @@ -0,0 +1,12 @@ +#ifndef MODPACK_PETTING_ZOO +#define MODPACK_PETTING_ZOO + +#include "_petting_zoo.dm" +#include "code/beasts.dm" +#include "code/commanded.dm" +#include "code/datums.dm" +#include "code/fox.dm" +#include "code/koala.dm" +#include "code/rabbit.dm" + +#endif diff --git a/mods/leroy_beasts/code/beasts.dm b/mods/petting_zoo/code/beasts.dm similarity index 88% rename from mods/leroy_beasts/code/beasts.dm rename to mods/petting_zoo/code/beasts.dm index a7ce2a9d5cbcf..30cc0963daceb 100644 --- a/mods/leroy_beasts/code/beasts.dm +++ b/mods/petting_zoo/code/beasts.dm @@ -1,7 +1,7 @@ /mob/living/simple_animal/butterfly name = "butterfly" desc = "A colorful butterfly, how'd it get up here?" - icon = 'mods/leroy_beasts/icons/leroy_beasts_32x32.dmi' + icon = 'mods/petting_zoo/icons/leroy_beasts_32x32.dmi' icon_state = "butterfly" icon_living = "butterfly" icon_dead = "butterfly_dead" @@ -31,7 +31,7 @@ /mob/living/simple_animal/friendly/cat/maine_coon name = "maine coon" desc = "What a hell of a cat!" - icon = 'mods/leroy_beasts/icons/leroy_beasts_32x32.dmi' + icon = 'mods/petting_zoo/icons/leroy_beasts_32x32.dmi' icon_state = "maine_coon" item_state = "maine_coon" icon_living = "maine_coon" @@ -42,7 +42,7 @@ /mob/living/simple_animal/friendly/cat/floppa name = "caracal" desc = "Well-known for distinctive tassels on its ears and a strong urge for dumplings." - icon = 'mods/leroy_beasts/icons/leroy_beasts_32x64.dmi' + icon = 'mods/petting_zoo/icons/leroy_beasts_32x64.dmi' icon_state = "caracal" item_state = "caracal" icon_living = "caracal" @@ -61,7 +61,7 @@ // Dogs. Some kind of happinies is measured out in miles. What makes you think you're something special when you smile? /mob/living/simple_animal/friendly/dogs - icon = 'mods/leroy_beasts/icons/leroy_beasts_32x32.dmi' + icon = 'mods/petting_zoo/icons/leroy_beasts_32x32.dmi' speak_emote = list("barks", "woofs") turns_per_move = 10 response_help = "pets" @@ -88,19 +88,6 @@ emote_hear = list("woofs", "barks") speak = list("Bark!", "Woof!") -/mob/living/simple_animal/friendly/dogs/german - name = "german shepherd" - real_name = "german shepherd" - desc = "That very type of a dog that appears in everybody's mind in the first place." - icon_state = "german_shepherd" - icon_living = "german_shepherd" - icon_dead = "german_shepherd_dead" - -/mob/living/simple_animal/friendly/dogs/german/black - icon_state = "german_shepherd_black" - icon_living = "german_shepherd_black" - icon_dead = "german_shepherd_black_dead" - /mob/living/simple_animal/friendly/dogs/pug // Some kind of solitude is measured out in you name = "pug" real_name = "pug" @@ -115,14 +102,6 @@ ai_holder = /datum/ai_holder/simple_animal/passive/corgi say_list_type = /datum/say_list/corgi //we don't need repeat main say list here, aren't we? -/mob/living/simple_animal/friendly/dogs/golden_retriever - name = "golden retriever" - real_name = "golden retriever" - desc = "Your perfect companion." - icon_state = "golden_retriever" - icon_living = "golden_retriever" - icon_dead = "golden_retriever_dead" - /mob/living/simple_animal/friendly/dogs/shiba_inu name = "shiba inu" real_name = "shiba inu" @@ -131,20 +110,12 @@ icon_living = "shiba_inu" icon_dead = "shiba_inu_dead" -/mob/living/simple_animal/friendly/dogs/bullterrier - name = "bullterrier" - real_name = "bullterrier" - desc = "Don't tempt this perky guy." - icon_state = "bullterrier" - icon_living = "bullterrier" - icon_dead = "bullterrier_dead" - // Big Mon'keigh, ahem, just a normal gorilla /mob/living/simple_animal/hostile/gorilla name = "gorilla" desc = "A ground-dwelling, predominantly herbivorous ape that inhabits the tropic forests." - icon = 'mods/leroy_beasts/icons/leroy_beasts_32x32.dmi' + icon = 'mods/petting_zoo/icons/leroy_beasts_32x32.dmi' icon_state = "gorilla" icon_living = "gorilla" icon_dead = "gorilla_dead" @@ -180,7 +151,7 @@ /mob/living/simple_animal/friendly/frog name = "frog" desc = "They seem a little sad." - icon = 'mods/leroy_beasts/icons/leroy_beasts_32x32.dmi' + icon = 'mods/petting_zoo/icons/leroy_beasts_32x32.dmi' icon_state = "frog" icon_living = "frog" icon_dead = "frog_dead" @@ -218,7 +189,7 @@ gender = PLURAL health = 15 maxHealth = 15 - icon = 'mods/leroy_beasts/icons/leroy_beasts_32x32.dmi' + icon = 'mods/petting_zoo/icons/leroy_beasts_32x32.dmi' icon_state = "rabbit" icon_living = "rabbit" icon_dead = "rabbit_dead" @@ -253,7 +224,7 @@ name = "kangaroo" real_name = "kangaroo" desc = "A large marsupial herbivore. It has powerful hind legs, with nails that resemble long claws." - icon = 'mods/leroy_beasts/icons/leroy_beasts_32x64.dmi' + icon = 'mods/petting_zoo/icons/leroy_beasts_32x64.dmi' icon_state = "kangaroo" // Credit: FoS icon_living = "kangaroo" icon_dead = "kangaroo_dead" @@ -277,7 +248,7 @@ /mob/living/simple_animal/friendly/lizard/axolotl name = "axolotl" desc = "A cute tiny axolotl. And it's just like you - has no brain as well!" - icon = 'mods/leroy_beasts/icons/leroy_beasts_32x32.dmi' + icon = 'mods/petting_zoo/icons/leroy_beasts_32x32.dmi' icon_state = "axolotl" icon_living = "axolotl" icon_dead = "axolotl_dead" @@ -286,7 +257,7 @@ /mob/living/simple_animal/friendly/megamoth name = "big moff" desc = "Keep it away from fire." - icon = 'mods/leroy_beasts/icons/leroy_beasts_32x32.dmi' + icon = 'mods/petting_zoo/icons/leroy_beasts_32x32.dmi' icon_state = "megamoth" icon_living = "megamoth" icon_dead = "megamoth_dead" @@ -314,7 +285,7 @@ /mob/living/simple_animal/hostile/panther name = "panther" desc = "A long sleek, black cat with sharp teeth and claws." - icon = 'mods/leroy_beasts/icons/leroy_beasts_32x64.dmi' + icon = 'mods/petting_zoo/icons/leroy_beasts_32x64.dmi' icon_state = "panther" icon_living = "panther" icon_dead = "panther_dead" @@ -373,7 +344,7 @@ /mob/living/simple_animal/hostile/panther/lion name = "lion" desc = "The proud bearer of his majestic mane." - icon = 'mods/leroy_beasts/icons/leroy_beasts_32x64.dmi' + icon = 'mods/petting_zoo/icons/leroy_beasts_32x64.dmi' icon_state = "lion" icon_living = "lion" icon_dead = "lion_dead" @@ -393,7 +364,7 @@ see_in_dark = 5 turns_per_move = 10 density = FALSE - icon = 'mods/leroy_beasts/icons/leroy_beasts_32x32.dmi' + icon = 'mods/petting_zoo/icons/leroy_beasts_32x32.dmi' ai_holder = /datum/ai_holder/simple_animal/passive /mob/living/simple_animal/penguin/emperor @@ -444,7 +415,7 @@ /mob/living/simple_animal/hostile/retaliate/reindeer name = "reindeer" desc = "The king of tundra, extremely endurant beast." - icon = 'mods/leroy_beasts/icons/leroy_beasts_32x64.dmi' + icon = 'mods/petting_zoo/icons/leroy_beasts_32x64.dmi' icon_state = "reindeer" icon_living = "reindeer" icon_dead = "reindeer_dead" @@ -490,7 +461,7 @@ /mob/living/simple_animal/pet/sloth name = "sloth" desc = "An adorable, sleepy creature. Still twice more productive than most of the crewmembers." - icon = 'mods/leroy_beasts/icons/leroy_beasts_32x32.dmi' + icon = 'mods/petting_zoo/icons/leroy_beasts_32x32.dmi' icon_state = "sloth" icon_living = "sloth" icon_dead = "sloth_dead" @@ -516,7 +487,7 @@ // Override of legacy space bear /mob/living/simple_animal/hostile/bear - icon = 'mods/leroy_beasts/icons/leroy_beasts_32x64.dmi' + icon = 'mods/petting_zoo/icons/leroy_beasts_32x64.dmi' icon_state = "brown_bear" icon_living = "brown_bear" icon_dead = "brown_bear_dead" diff --git a/mods/petting_zoo/code/commanded.dm b/mods/petting_zoo/code/commanded.dm new file mode 100644 index 0000000000000..45bb59fb8d684 --- /dev/null +++ b/mods/petting_zoo/code/commanded.dm @@ -0,0 +1,161 @@ +/mob/living/simple_animal/hostile/commanded/rex + var/list/possible_natural_weapon // Rex can attack with random natural weapon + name = "Rex" + desc = "A large.... dog?" + + icon_state = "lavadog" + icon_living = "lavadog" + icon_dead = "lavadog_dead" + + + health = 45 + maxHealth = 45 + speed = 8 + + density = TRUE + + natural_weapon = /obj/item/natural_weapon/bite + possible_natural_weapon = list(/obj/item/natural_weapon/bite, /obj/item/natural_weapon/claws) + can_escape = TRUE + + max_gas = list(GAS_PHORON = 10, GAS_CO2 = 10) + + response_help = "pets" + response_harm = "bites" + response_disarm = "pushes" + + known_commands = list("stay", "stop", "attack", "follow", "guard", "forget master", "obey", "forget target") + ai_holder = /datum/ai_holder/simple_animal/melee/commanded + +/mob/living/simple_animal/hostile/commanded/rex/get_natural_weapon() + if(natural_weapon) + qdel(natural_weapon) + natural_weapon = pick(possible_natural_weapon) + return ..() + +/mob/living/simple_animal/hostile/commanded/rex/hear_say(message, verb = "says", datum/language/language = null, alt_name = "", italics = 0, mob/speaker = null, sound/speech_sound, sound_vol) + + if(!master && istype(speaker, /mob/living/carbon/human)) + var/mob/living/carbon/human/S = speaker + if ("ACCESS_HEAD_OF_SECURITY" in S.GetAccess()) + master = S + ai_holder.leader = S + friends |= weakref(S) + allowed_targets -= S + S.guards += src + ..() + +/mob/living/simple_animal/hostile/commanded/rex/can_use_item(obj/item/O, mob/user) + if(istype(O, /obj/item/reagent_containers/food/snacks/meat) && stat != DEAD) + if(user != master) + visible_message(SPAN_WARNING("\The [src] started to growl")) + else + visible_message(SPAN_NOTICE("\The [user] start feeding the [src] [O]")) + if(do_after(user, 30, src)) + var/prev_AI_busy = ai_holder.busy + set_AI_busy(FALSE) + heal_overall_damage(10, 10) + qdel(O) + visible_message(SPAN_NOTICE("\The [src] ate [O]")) + set_AI_busy(prev_AI_busy) + + else + ..() + +/mob/living/simple_animal/hostile/commanded/rex/attack_hand(mob/living/carbon/human/target) + if(target.a_intent != I_HELP && retribution) //assume he wants to hurt us. + var/dealt_damage = harm_intent_damage + var/harm_verb = response_harm + if(ishuman(target) && target.species) + var/datum/unarmed_attack/attack = target.get_unarmed_attack(src) + dealt_damage = max(dealt_damage, attack.damage) + harm_verb = pick(attack.attack_verb) + if(attack.sharp || attack.edge) + adjustBleedTicks(dealt_damage) + + adjustBruteLoss(dealt_damage) + target.visible_message(SPAN_WARNING("[target] [harm_verb] \the [src]!")) + target.do_attack_animation(src) + + if((target == master) && prob(80)) + visible_message(SPAN_WARNING("The [src] whines")) + return TRUE + + target_mob = target + allowed_targets |= target + stance = STANCE_ATTACK + friends |= weakref(target) + set_AI_busy(FALSE) + ai_holder.react_to_attack(target) + return TRUE + + + else if(target.a_intent == I_HELP) + if((target == master) || (weakref(target) in friends)) + visible_message("The [src] wags its tail") + if(prob(20)) + say("Wuff!") + return TRUE + + visible_message(SPAN_WARNING("\The [src] started to growl")) + if(prob(10)) + attack_target(target) + + . = ..() + +/mob/living/simple_animal/hostile/commanded/dog + icon = 'mods/petting_zoo/icons/leroy_beasts_32x32.dmi' + speak_emote = list("barks", "woofs") + turns_per_move = 10 + response_help = "pets" + response_disarm = "bops" + response_harm = "kicks" + see_in_dark = 5 + mob_size = 15 + possession_candidate = 1 + pass_flags = PASS_FLAG_TABLE + density = FALSE + + meat_type = /obj/item/reagent_containers/food/snacks/meat/corgi + meat_amount = 5 + skin_material = MATERIAL_SKIN_FUR_ORANGE + + var/obj/item/inventory_head + var/obj/item/inventory_back + + ai_holder = /datum/ai_holder/simple_animal/melee/commanded + say_list_type = /datum/say_list/dog + +/datum/say_list/dog + emote_see = list("wiggles its tail warily", "scratches itself") + emote_hear = list("woofs", "barks") + speak = list("Bark!", "Woof!") + +/mob/living/simple_animal/hostile/commanded/dog/german + name = "german shepherd" + real_name = "german shepherd" + desc = "That very type of a dog that appears in everybody's mind in the first place." + icon_state = "german_shepherd" + icon_living = "german_shepherd" + icon_dead = "german_shepherd_dead" + +/mob/living/simple_animal/hostile/commanded/dog/german/black + icon_state = "german_shepherd_black" + icon_living = "german_shepherd_black" + icon_dead = "german_shepherd_black_dead" + +/mob/living/simple_animal/hostile/commanded/dog/golden_retriever + name = "golden retriever" + real_name = "golden retriever" + desc = "Your perfect companion." + icon_state = "golden_retriever" + icon_living = "golden_retriever" + icon_dead = "golden_retriever_dead" + +/mob/living/simple_animal/hostile/commanded/dog/bullterrier + name = "bullterrier" + real_name = "bullterrier" + desc = "Don't tempt this perky guy." + icon_state = "bullterrier" + icon_living = "bullterrier" + icon_dead = "bullterrier_dead" diff --git a/mods/petting_zoo/code/datums.dm b/mods/petting_zoo/code/datums.dm new file mode 100644 index 0000000000000..139aa6fcc9a3e --- /dev/null +++ b/mods/petting_zoo/code/datums.dm @@ -0,0 +1,319 @@ +#define COMMANDED_STOP 6 //basically 'do nothing' +#define COMMANDED_FOLLOW 7 //follows a target +#define COMMANDED_MISC 8 //catch all state for misc commands that need one. + +/mob/living/carbon + var/list/guards = list() // We need this list here + +/mob/living/simple_animal/hostile/commanded + name = "commanded" + stance = COMMANDED_STOP + natural_weapon = /obj/item/natural_weapon + density = FALSE + var/list/command_buffer = list() + var/list/known_commands = list("stay", "stop", "attack", "follow", "guard", "forget master", "forget target", "obey") + var/mob/master = null //undisputed master. Their commands hold ultimate sway and ultimate power. + var/list/allowed_targets = list() //WHO CAN I KILL D: + var/retribution = 1 //whether or not they will attack us if we attack them like some kinda dick. + var/list/protected_mobs = list() // who under our protection + + ai_holder = /datum/ai_holder/simple_animal/melee/commanded + +/datum/ai_holder/simple_animal/melee/commanded/can_attack(atom/movable/the_target, vision_required) + var/mob/living/simple_animal/hostile/commanded/H = holder + if(!(the_target in H.allowed_targets)) + return FALSE + return ..() + +/datum/ai_holder/simple_animal/melee/commanded/find_target(list/possible_targets, has_targets_list) + ai_log("commanded/find_target() : Entered.", AI_LOG_TRACE) + var/mob/living/simple_animal/hostile/commanded/C = holder + if(!length(C.allowed_targets)) + return null + var/mode = "specific" + if(C.allowed_targets[1] == "everyone") //we have been given the golden gift of murdering everything. Except our master, of course. And our friends. So just mostly everyone. + mode = "everyone" + for(var/atom/A in list_targets()) + var/mob/M = null + if(A == src) + continue + if(isliving(A)) + M = A + if(M && M.stat) + continue + if(mode == "specific") + if(!(A in C.allowed_targets)) + continue + C.stance = STANCE_IDLE + give_target(A) + return A + else + C.allowed_targets += A + if(M == C.master || (weakref(M) in C.friends)) + continue + C.stance = STANCE_IDLE + give_target(M) + return A + return ..() + +/mob/living/simple_animal/hostile/commanded/hear_say(message, verb = "says", datum/language/language = null, alt_name = "", italics = 0, mob/speaker = null, sound/speech_sound, sound_vol) + if(((weakref(speaker) in friends) && !master) || speaker == master) + command_buffer.Add(speaker) + command_buffer.Add(lowertext(html_decode(message))) + return FALSE + +/mob/living/simple_animal/hostile/commanded/hear_radio(message, verb="says", datum/language/language=null, part_a, part_b, part_c, mob/speaker = null, hard_to_hear = 0) + if(((weakref(speaker) in friends) && !master) || speaker == master) + command_buffer.Add(speaker) + command_buffer.Add(lowertext(html_decode(message))) + return FALSE + +/mob/living/simple_animal/hostile/commanded/Life() + . = ..() + if(!.) + return FALSE + while(length(command_buffer) > 0) + var/mob/speaker = command_buffer[1] + var/text = command_buffer[2] + var/filtered_name = lowertext(html_decode(name)) + if(dd_hasprefix(text,filtered_name) || dd_hasprefix(text,"everyone") || dd_hasprefix(text, "everybody")) //in case somebody wants to command 8 bears at once. + var/substring = copytext(text,length(filtered_name)+1) //get rid of the name. + listen(speaker,substring) + command_buffer.Remove(command_buffer[1],command_buffer[2]) + . = ..() + if(.) + switch(stance) + if(COMMANDED_FOLLOW) + follow_target() + if(COMMANDED_STOP) + commanded_stop() + + +//TODO:use AI following behaviour +/mob/living/simple_animal/hostile/commanded/proc/follow_target() + set_AI_busy(TRUE) + if(!target_mob) + return + + if(target_mob in ai_holder.list_targets()) + walk_to(src,target_mob,1,move_speed) + ai_holder.destination = target_mob.loc + else if(ai_holder.destination) + ai_holder.min_distance_to_destination = 0 + ai_holder.walk_to_destination() + step(src, get_dir(src.loc, target_mob.loc), move_speed) + if(get_dist(src,target_mob)<=3) + step(src, get_dir(src.loc, target_mob.loc), move_speed) + ai_holder.min_distance_to_destination = 1 + + +/mob/living/simple_animal/hostile/commanded/proc/commanded_stop() //basically a proc that runs whenever we are asked to stay put. Probably going to remain unused. + return + +/mob/living/simple_animal/hostile/commanded/proc/listen(mob/speaker, text) + for(var/command in known_commands) + if(findtext(text,command)) + switch(command) + if("stay") + if(stay_command(speaker,text)) //find a valid command? Stop. Don't try and find more. + break + if("stop") + if(stop_command(speaker,text)) + break + if("attack") + if(attack_command(speaker,text)) + break + if("follow") + if(follow_command(speaker,text)) + break + if("guard") + if(guard_command(speaker,text)) + break + if("forget master") + if(forget_master_command(speaker,text)) + break + if("forget target") + if(forget_target_command(speaker,text)) + break + if("obey") + if(obey_command(speaker,text)) + break + else + misc_command(speaker,text) //for specific commands + + return TRUE + +//returns a list of everybody we wanna do stuff with. +/mob/living/simple_animal/hostile/commanded/proc/get_targets_by_name(text, filter_friendlies = 0) + var/list/possible_targets = hearers(src,10) + . = list() + for(var/mob/M in possible_targets) + if(filter_friendlies && ((weakref(M) in friends) || M.faction == faction || M == master || M == src)) + continue + var/found = 0 + if(findtext(text, "[M]")) + found = 1 + else + var/list/parsed_name = splittext(replace_characters(lowertext(html_decode("[M]")),list("-"=" ", "."=" ", "," = " ", "'" = " ")), " ") //this big MESS is basically 'turn this into words, no punctuation, lowercase so we can check first name/last name/etc' + for(var/a in parsed_name) + if(a == "the" || length(a) < 2) //get rid of shit words. + continue + if(findtext(text,"[a]")) + found = 1 + break + if(found) + . += M + + +/mob/living/simple_animal/hostile/commanded/proc/clear_protected_mobs() + for(var/mob/living/carbon/guarded in protected_mobs) + guarded.guards -= src + friends -= weakref(guarded) + + protected_mobs = list() + +/mob/living/simple_animal/hostile/commanded/proc/attack_command(mob/speaker, text) + clear_protected_mobs() // I must attack something, don`t guard + target_mob = null //want me to attack something? Well I better forget my old target. + set_AI_busy(FALSE) + walk_to(src,0) + stance = STANCE_ATTACK + if(text == " attack." || findtext(text,"everyone") || findtext(text,"anybody") || findtext(text, "somebody") || findtext(text, "someone")) //if its just 'attack' then just attack anybody, same for if they say 'everyone', somebody, anybody. Assuming non-pickiness. + allowed_targets = list("everyone")//everyone? EVERYONE + return TRUE + + var/list/targets = get_targets_by_name(text) + allowed_targets -= "everyone" + for(var/target in targets) + allowed_targets |= target + + return length(targets) != 0 + +/mob/living/simple_animal/hostile/commanded/proc/stay_command(mob/speaker, text) + target_mob = null + stance = COMMANDED_STOP + set_AI_busy(TRUE) + walk_to(src,0) + return TRUE + +/mob/living/simple_animal/hostile/commanded/proc/stop_command(mob/speaker, text) + clear_protected_mobs() + allowed_targets = list() + walk_to(src,0) + ai_holder.target = null + target_mob = null //gotta stop SOMETHIN + stance = STANCE_IDLE + set_AI_busy(FALSE) + return TRUE + +/mob/living/simple_animal/hostile/commanded/proc/follow_command(mob/speaker, text) + //we can assume 'stop following' is handled by stop_command + clear_protected_mobs() + if(findtext(text,"me")) + stance = COMMANDED_FOLLOW + target_mob = speaker //this wont bite me in the ass later. + friends |= weakref(target_mob) + return TRUE + + var/list/targets = get_targets_by_name(text) + if(length(targets) > 1 || !length(targets)) //CONFUSED. WHO DO I FOLLOW? + return FALSE + + stance = COMMANDED_FOLLOW //GOT SOMEBODY. BETTER FOLLOW EM. + target_mob = targets[1] //YEAH GOOD IDEA + friends |= weakref(target_mob) + + return TRUE + +/mob/living/simple_animal/hostile/commanded/proc/guard_command(mob/living/carbon/speaker, text) + if(findtext(text,"me")) + stance = COMMANDED_FOLLOW + target_mob = speaker + clear_protected_mobs() + speaker.guards |= src + friends |= weakref(target_mob) + return TRUE + + var/list/targets = get_targets_by_name(text) + if(!length(targets)) + return FALSE + + for(var/mob/living/carbon/guarded_mob in targets) // only carbon lives need protection + if(!(src in guarded_mob.guards)) + guarded_mob.guards += src + protected_mobs += guarded_mob + friends |= weakref(guarded_mob) + + stance = COMMANDED_FOLLOW + target_mob = pick(targets) + return TRUE + +/mob/living/simple_animal/hostile/commanded/proc/forget_target_command(mob/speaker, text) + allowed_targets = list() + ai_holder.target = null + target_mob = null //gotta stop SOMETHIN + return TRUE + +/mob/living/simple_animal/hostile/commanded/proc/forget_master_command(mob/speaker, text) + if(speaker != master) + return FALSE + friends -= weakref(master) + + master = null // I`m alone, again, maybe my name is Hachiko? + ai_holder.leader = null + walk_to(src,0) + target_mob = null //gotta stop SOMETHIN + stance = STANCE_IDLE + set_AI_busy(FALSE) + return TRUE + +/mob/living/simple_animal/hostile/commanded/proc/obey_command(mob/speaker, text) + if(speaker != master) + return FALSE + + var/list/targets = list() + for(var/mob/living/carbon/human/H in get_targets_by_name(text)) //I want to obey humans + targets += H + if(length(targets) > 1 || !length(targets)) //CONFUSED. WHO DO I OBEY? + return FALSE + master = targets[1] + friends |= weakref(master) + ai_holder.leader = master + return TRUE + +/mob/living/simple_animal/hostile/commanded/proc/misc_command(mob/speaker, text) + return FALSE + +/mob/living/simple_animal/hostile/commanded/hit_with_weapon(obj/item/O, mob/living/user, effective_force, hit_zone) + //if they attack us, we want to kill them. None of that "you weren't given a command so free kill" bullshit. + . = ..() + if(. && retribution) + target_mob = user + allowed_targets |= target_mob //fuck this guy in particular. + stance = STANCE_ATTACK + friends -= weakref(user) + set_AI_busy(FALSE) + ai_holder.react_to_attack(user) + + +/mob/living/simple_animal/hostile/commanded/attack_hand(mob/living/carbon/human/M as mob) + ..() + if(M.a_intent == I_HURT && retribution) //assume he wants to hurt us. + target_mob = M + allowed_targets |= M //fuck this guy in particular. + stance = STANCE_ATTACK + friends -= weakref(M) + set_AI_busy(FALSE) + ai_holder.react_to_attack(M) + + +/mob/living/simple_animal/hostile/commanded/proc/hunt_on(mob/M) + if(M in ai_holder.list_targets()) + friends -= weakref(M) + set_AI_busy(FALSE) + stance = STANCE_ATTACK + allowed_targets |= M + +#undef COMMANDED_STOP +#undef COMMANDED_FOLLOW +#undef COMMANDED_MISC diff --git a/packs/infinity/mobs/simple/fox.dm b/mods/petting_zoo/code/fox.dm similarity index 66% rename from packs/infinity/mobs/simple/fox.dm rename to mods/petting_zoo/code/fox.dm index f0d86f8622ac7..a47f8d773849c 100644 --- a/packs/infinity/mobs/simple/fox.dm +++ b/mods/petting_zoo/code/fox.dm @@ -1,8 +1,26 @@ +/mob/living/simple_animal/friendly/fox + holder_type = /obj/item/holder/fox + +/obj/item/holder/fox + slot_flags = null + icon = 'mods/petting_zoo/icons/mobs.dmi' + icon_state = "fox" + + item_icons = list( + slot_l_hand_str = 'mods/petting_zoo/icons/onmob/mob_holder.dmi', + slot_r_hand_str = 'mods/petting_zoo/icons/onmob/mob_holder.dmi', + ) + + item_state_slots = list( + slot_l_hand_str = "fox_l", + slot_r_hand_str = "fox_r", + ) + //Foxxy /mob/living/simple_animal/friendly/fox name = "fox" desc = "It's a fox." - icon = 'packs/infinity/icons/mob/mobs.dmi' + icon = 'mods/petting_zoo/icons/mobs.dmi' icon_state = "fox" icon_living = "fox" icon_dead = "fox_dead" @@ -12,6 +30,8 @@ response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" + mob_size = MOB_SMALL + density = TRUE ai_holder = /datum/ai_holder/simple_animal/passive/fox say_list_type = /datum/say_list/fox diff --git a/packs/infinity/mobs/simple/koala.dm b/mods/petting_zoo/code/koala.dm similarity index 94% rename from packs/infinity/mobs/simple/koala.dm rename to mods/petting_zoo/code/koala.dm index 7aece381d7304..266cfa67d3904 100644 --- a/packs/infinity/mobs/simple/koala.dm +++ b/mods/petting_zoo/code/koala.dm @@ -1,7 +1,7 @@ /mob/living/simple_animal/friendly/koala name = "space koala" desc = "A little grey bear, now much time he gonna sleep today?" - icon = 'packs/infinity/icons/mob/mobs.dmi' + icon = 'mods/petting_zoo/icons/mobs.dmi' icon_state = "koala" icon_living = "koala" icon_dead = "koala_dead" diff --git a/packs/infinity/mobs/simple/rabbit.dm b/mods/petting_zoo/code/rabbit.dm similarity index 87% rename from packs/infinity/mobs/simple/rabbit.dm rename to mods/petting_zoo/code/rabbit.dm index 8b1884dac7de4..6c4257cb8f132 100644 --- a/packs/infinity/mobs/simple/rabbit.dm +++ b/mods/petting_zoo/code/rabbit.dm @@ -3,12 +3,12 @@ /obj/item/holder/rabbit slot_flags = null - icon = 'packs/infinity/icons/mob/mobs.dmi' + icon = 'mods/petting_zoo/icons/mobs.dmi' icon_state = "rabbit_white" item_icons = list( - slot_l_hand_str = 'packs/infinity/icons/mob/onmob/items/mob_holder.dmi', - slot_r_hand_str = 'packs/infinity/icons/mob/onmob/items/mob_holder.dmi', + slot_l_hand_str = 'mods/petting_zoo/icons/onmob/mob_holder.dmi', + slot_r_hand_str = 'mods/petting_zoo/icons/onmob/mob_holder.dmi', ) item_state_slots = list( @@ -19,7 +19,7 @@ /mob/living/simple_animal/rabbit name = "\improper rabbit" desc = "The hippiest hop around." - icon = 'packs/infinity/icons/mob/mobs.dmi' + icon = 'mods/petting_zoo/icons/mobs.dmi' icon_state = "rabbit_white" icon_living = "rabbit_white" icon_dead = "rabbit_white_dead" diff --git a/mods/leroy_beasts/icons/leroy_beasts_32x32.dmi b/mods/petting_zoo/icons/leroy_beasts_32x32.dmi similarity index 100% rename from mods/leroy_beasts/icons/leroy_beasts_32x32.dmi rename to mods/petting_zoo/icons/leroy_beasts_32x32.dmi diff --git a/mods/leroy_beasts/icons/leroy_beasts_32x64.dmi b/mods/petting_zoo/icons/leroy_beasts_32x64.dmi similarity index 100% rename from mods/leroy_beasts/icons/leroy_beasts_32x64.dmi rename to mods/petting_zoo/icons/leroy_beasts_32x64.dmi diff --git a/packs/infinity/icons/mob/mobs.dmi b/mods/petting_zoo/icons/mobs.dmi similarity index 100% rename from packs/infinity/icons/mob/mobs.dmi rename to mods/petting_zoo/icons/mobs.dmi diff --git a/packs/infinity/icons/mob/onmob/items/mob_holder.dmi b/mods/petting_zoo/icons/onmob/mob_holder.dmi similarity index 100% rename from packs/infinity/icons/mob/onmob/items/mob_holder.dmi rename to mods/petting_zoo/icons/onmob/mob_holder.dmi diff --git a/mods/ssinput/README.md b/mods/ssinput/README.md index 0a92b4955bd23..be410f081c4f1 100644 --- a/mods/ssinput/README.md +++ b/mods/ssinput/README.md @@ -2,6 +2,7 @@ #### Список PRов: - https://github.com/SierraBay/SierraBay12/pull/908 +-https://github.com/SierraBay/SierraBay12/pull/1824
+

29.01 - 2024

+

Обновления LordNest:

+
+
Мыши больше не вываливаются из труб
+
Автохисс починил
+
Станбатону иконки синие приделал
+
Удалил дубли причёсок
+
Вернул Рекса
+
+

Обновления emmanuelbassil:

+
+
Radial menus now properly work when inside an exosuit
+
+

28.01 - 2024

Обновления Sbotkin:

@@ -510,16 +524,6 @@

Обновления rootoo807:

Flowers grown in hydroponics can be made into wearable hair pins by adding a piece of cable.
Hairflowers are now color select in loadout.
- -

27.11 - 2023

-

Обновления BurpleBineapple:

-
-
EMP damage is now calculated with a 1 to 3 multiplicative modifier with 3 being the pre-change damage.
-
The ion pistol now has half the fire delay it had before to differentiate it from the ion rifle.
-
EMP damage to limbs has been reduced by 50%. Torso damage remains the same.
-
EMP damage to robotic legs and feet no longer immediately weaken the victim.
-
FBPs and IPCs first fall over before being paralyzed when their battery is dead or destroyed.
-
Icons by Icons8
diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 2648b33115e5b..c7d405669151a 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -23095,3 +23095,18 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY sierra_genchangelog.p 2024-01-28: Sbotkin: - maptweak: The "Status of the Fleets" is moved to the Bridge storage. +2024-01-29: + LordNest: + - bugfix: "\u041C\u044B\u0448\u0438 \u0431\u043E\u043B\u044C\u0448\u0435 \u043D\u0435\ + \ \u0432\u044B\u0432\u0430\u043B\u0438\u0432\u0430\u044E\u0442\u0441\u044F \u0438\ + \u0437 \u0442\u0440\u0443\u0431" + - tweak: "\u0410\u0432\u0442\u043E\u0445\u0438\u0441\u0441 \u043F\u043E\u0447\u0438\ + \u043D\u0438\u043B" + - imageadd: "\u0421\u0442\u0430\u043D\u0431\u0430\u0442\u043E\u043D\u0443 \u0438\ + \u043A\u043E\u043D\u043A\u0438 \u0441\u0438\u043D\u0438\u0435 \u043F\u0440\u0438\ + \u0434\u0435\u043B\u0430\u043B" + - imagedel: "\u0423\u0434\u0430\u043B\u0438\u043B \u0434\u0443\u0431\u043B\u0438\ + \ \u043F\u0440\u0438\u0447\u0451\u0441\u043E\u043A" + - maptweak: "\u0412\u0435\u0440\u043D\u0443\u043B \u0420\u0435\u043A\u0441\u0430" + emmanuelbassil: + - bugfix: Radial menus now properly work when inside an exosuit diff --git a/html/changelogs/AutoChangeLog-sierra-pr-1824.yml b/html/changelogs/AutoChangeLog-sierra-pr-1824.yml deleted file mode 100644 index e013850c89e98..0000000000000 --- a/html/changelogs/AutoChangeLog-sierra-pr-1824.yml +++ /dev/null @@ -1,8 +0,0 @@ -author: LordNest -changes: - - {bugfix: Мыши больше не вываливаются из труб} - - {tweak: Автохисс починил} - - {imageadd: Станбатону иконки синие приделал} - - {imagedel: Удалил дубли причёсок} - - {maptweak: Вернул Рекса} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-sierra-pr-1845.yml b/html/changelogs/AutoChangeLog-sierra-pr-1845.yml deleted file mode 100644 index 4e1051f291d7e..0000000000000 --- a/html/changelogs/AutoChangeLog-sierra-pr-1845.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: emmanuelbassil -changes: - - {bugfix: Radial menus now properly work when inside an exosuit} -delete-after: true From 143f3349d3b41bd437a058595a092470aaa01095 Mon Sep 17 00:00:00 2001 From: cdbrunow <32042876+cdbrunow@users.noreply.github.com> Date: Mon, 29 Jan 2024 22:05:20 +0300 Subject: [PATCH 14/45] [MIRROR] Adds new overmap vessel placeholder sprite --- maps/event/placeholders/placeholders.dm | 8 ++++++++ maps/event/placeholders/scg-64.dmi | Bin 2791 -> 3454 bytes 2 files changed, 8 insertions(+) diff --git a/maps/event/placeholders/placeholders.dm b/maps/event/placeholders/placeholders.dm index 63ac37942c3f6..09404c6ebe853 100644 --- a/maps/event/placeholders/placeholders.dm +++ b/maps/event/placeholders/placeholders.dm @@ -306,3 +306,11 @@ Middle-Click / Ctrl-Click - Jump a placeholder to a point and deselect it icon = 'gen-32.dmi' icon_state = "sf-mantaray" speed = 0.2 + +/obj/overmap/visitable/placeholder/ec_komarov + name = "SEV Komarov" + desc = "A hulking mass of redundant systems and extensive electromagnetic shielding. The hull is tattered with a myriad of warped and charred paneling, this ship looks like it just tore out from hell itself, most likely because it has. The Transponder reads, 'SEV Komarov, HSC-2-07-X'" + icon = 'scg-64.dmi' + icon_state = "ec-komarov" + pixel_x = -17 + pixel_y = -12 diff --git a/maps/event/placeholders/scg-64.dmi b/maps/event/placeholders/scg-64.dmi index f5d511f3b2d837969e2786697ad15bf2d359f6d3..d96d2a49788aef4de83d22b450ca63586b0c1987 100644 GIT binary patch literal 3454 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 literal 2791 zcmVV=-0C=2@%CQc@AQV8+8NTABooh5{+*k~aVQBw>P$(}7mJw z*rUJU)4nk-CB+(?O`;dpSxV;NF#EsOQ5V-W)VQ2Nu)kmn!z4kDihlqeL0S9~M01M( z015|5L_t(|ob8=!lIu7KMwO{qMfSh8Y$NkyIw@P$1H=agg;RCwcBdUZK`#(4B}tMb zNs=T|WGyo$Fa=xB8 zmi7Hd>u*vTD;?fYzMtwfdwCaEQey1&<1ER(ZP;0WZ!07buW>o&@v%rbLh&}uL^BHwUSw=bo zG)FOw0#|7^^9@A31lUUOOMxv{)a^XlOCXdbI0*!Jt*)vB5(Q|DSQew$UHKx}-Imci z+NJbU>lwA9;-x*nQgPjm;UY;LB;!~Tmsnvy%HD@iY;JfD21b;0Iz~yvuUJh&B`%wc$gRBPtRB!1fZPZ zP90|84n54@8^A|EZwheWxD{SZ463DD9>=~eOHSyw>d>FkD zBl0&=7&ZSOgxSONXbeb}D*(uVw|pUn@EG!*>nW{Bf<9QvOh^0(;U4Sz84TGN{f^9Q z2z(RVIrdsngv+_H=XLRfl_ib)WzdHOK@=~6Py>V3DNt*4>s5Nx7@^k16Y35gErG%< zi7aO-WL{8L2;y`<`fT+1HxKX20wOypcPV9R?-<@+RdyN@Dvop64l(I);3lal| zxakteVxWU5z~D9*+#fvfUZ504Xuw1tn1=lcrSw8H^?R=<%OFC#d97eP3xwxPK1z7EfZsN)Pq8<^J}xd#|_Ea76q>>>p@FHcl;VO@&fLHJ8y zyH1!YzJ)Vf&r|er3_9`n+=Xy=nh|ikc`X%R<3`wpx0l2*n>8NT{94BdIrKxk|arzBuSDaNs=Te)dVT5T{>fYvh_gl}Ar5MGPgx)@%6c1xTbG>uT1&6{71 zi}R)R9Gbij0A%teOD-2>=tRhNOD9h3C@{d~8SO}bAsR9Y25(Rg6Dno$Zm>(tpHA!` z^_d`Fk%Z^xLqjgS7_WzVWbjmgz^^d3OP7GR+O zC~IgG5RtA&5w#%h(25KQ!&(8ldx0I+{@Q_U zBLvRvMSd1?@`XZjn<4C2nO#PHCgC=@Gtv$~&hY2TO*0KZ@_X&i!>15<#W_hvPMlV6nF_^w+I(M4gMZh|8!LEZ-_ z-GYu>flKwbi=ue#@FR5@g~q++xwq$bAeQaexAiIDbbyRt2RL=y!a4ut9%v9Naj)KD zU#JM}KU8gtbm098r?YN6|8azYdE<@P1Q4z|# z%=OI2u?Ki>k5Tzh7ownTfK~ub;Z~P5-i4qP+ESp0$<&X6=>CkJ0b%aZFa_w`TH=oC zv*#m(2Am21(lIdMyXGjmKhJ=A2r~oJ?N`M*x-3b2&CHLnUF!$)R0|1#E1gsnb?r;Er4vXX85H{JFF9nD7>;!hC zqXg1pzzD)W!mT0jmar&*XIxVWDr5ufYBXg}o&SM(6;R>}#LZI`hA$A+8-R0fz@IM=0n`ZKmDwzX zI0f@I6H2p5SBvTI-g3blM&B)fa9Cfn+Z5J6aT(I9Z;Jf zuSndWduh3Li(Y&s(vmM&MF?M@OM_4f+j%CULX@&5{2wG2>djd21^U*faR9c=SVv z>hqPm z#J6Ik1n|KyeSs1f3MY7?y(EQH02|07m+^7}&ZLeaPXLXTKq>$hvo&x)TpB`C0rWVz zG%OwiM{|qlaWa1O9$GYtiAV*&fr Date: Mon, 29 Jan 2024 22:00:22 +0300 Subject: [PATCH 15/45] [MIRROR] Fix white skybox appearance --- code/_onclick/hud/skybox.dm | 7 ++++++- code/controllers/subsystems/skybox.dm | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/code/_onclick/hud/skybox.dm b/code/_onclick/hud/skybox.dm index e4f93a2f617da..9b21e0b7243a0 100644 --- a/code/_onclick/hud/skybox.dm +++ b/code/_onclick/hud/skybox.dm @@ -23,9 +23,14 @@ screen |= skybox skybox.screen_loc = "CENTER:[-224 - T.x],CENTER:[-224 - T.y]" +/client/proc/deferred_update_skybox(rebuild) + set waitfor = FALSE + sleep(1) + update_skybox(rebuild) + /mob/Login() ..() - client.update_skybox(1) + client.deferred_update_skybox(1) /mob/Move() var/old_z = get_z(src) diff --git a/code/controllers/subsystems/skybox.dm b/code/controllers/subsystems/skybox.dm index f87d2cfe6ef1e..775b1edf332e4 100644 --- a/code/controllers/subsystems/skybox.dm +++ b/code/controllers/subsystems/skybox.dm @@ -42,6 +42,7 @@ SUBSYSTEM_DEF(skybox) dust.blend_mode = BLEND_ADD var/mutable_appearance/space = new /mutable_appearance(/turf/space) space.icon_state = "white" + space.plane = SKYBOX_PLANE space.AddOverlays(dust) space_appearance_cache[index] = space.appearance background_color = RANDOM_RGB From 15ad524b2801725cdb6d591d8689786627e44d15 Mon Sep 17 00:00:00 2001 From: Sierra Helper <125094432+SierraHelper@users.noreply.github.com> Date: Tue, 30 Jan 2024 00:15:04 +0300 Subject: [PATCH 16/45] =?UTF-8?q?=D0=A7=D0=B5=D0=B9=D0=BD=D0=B4=D0=B6?= =?UTF-8?q?=D0=BB=D0=BE=D0=B3=20=D0=B4=D0=BB=D1=8F=20PR=20#1849=20[ci=20sk?= =?UTF-8?q?ip]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html/changelogs/AutoChangeLog-sierra-pr-1849.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-sierra-pr-1849.yml diff --git a/html/changelogs/AutoChangeLog-sierra-pr-1849.yml b/html/changelogs/AutoChangeLog-sierra-pr-1849.yml new file mode 100644 index 0000000000000..f0ee5e35d7be2 --- /dev/null +++ b/html/changelogs/AutoChangeLog-sierra-pr-1849.yml @@ -0,0 +1,4 @@ +author: Rockton +changes: + - {rscadd: Adds Komarov overmap placeholder sprites for admin use} +delete-after: true From 33b5e6b8ea34d824f2d63fef6453250776905daa Mon Sep 17 00:00:00 2001 From: Sierra Helper <125094432+SierraHelper@users.noreply.github.com> Date: Tue, 30 Jan 2024 00:15:27 +0300 Subject: [PATCH 17/45] =?UTF-8?q?=D0=A7=D0=B5=D0=B9=D0=BD=D0=B4=D0=B6?= =?UTF-8?q?=D0=BB=D0=BE=D0=B3=20=D0=B4=D0=BB=D1=8F=20PR=20#1848=20[ci=20sk?= =?UTF-8?q?ip]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html/changelogs/AutoChangeLog-sierra-pr-1848.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-sierra-pr-1848.yml diff --git a/html/changelogs/AutoChangeLog-sierra-pr-1848.yml b/html/changelogs/AutoChangeLog-sierra-pr-1848.yml new file mode 100644 index 0000000000000..8c8f96cfa194e --- /dev/null +++ b/html/changelogs/AutoChangeLog-sierra-pr-1848.yml @@ -0,0 +1,4 @@ +author: SuhEugene +changes: + - {bugfix: Fixed white skybox} +delete-after: true From dddcf39904dc560417eebdfd0867ba3ceeaf8459 Mon Sep 17 00:00:00 2001 From: Sierra Helper <125094432+SierraHelper@users.noreply.github.com> Date: Tue, 30 Jan 2024 01:15:52 +0000 Subject: [PATCH 18/45] =?UTF-8?q?=D0=90=D0=B2=D1=82=D0=BE=D0=BC=D0=B0?= =?UTF-8?q?=D1=82=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=B0=D1=8F=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BC=D0=BF=D0=B8=D0=BB=D1=8F=D1=86=D0=B8=D1=8F=20=D1=87=D0=B5?= =?UTF-8?q?=D0=B9=D0=BD=D0=B4=D0=B6=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=20[ci=20?= =?UTF-8?q?skip]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html/changelog.html | 31 ++++++------------- html/changelogs/.all_changelog.yml | 5 +++ .../AutoChangeLog-sierra-pr-1848.yml | 4 --- .../AutoChangeLog-sierra-pr-1849.yml | 4 --- 4 files changed, 15 insertions(+), 29 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-sierra-pr-1848.yml delete mode 100644 html/changelogs/AutoChangeLog-sierra-pr-1849.yml diff --git a/html/changelog.html b/html/changelog.html index 4c81167de11fa..ba73351d50e22 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -28,6 +28,16 @@

Sierra SS13

-->
+

30.01 - 2024

+

Обновления Rockton:

+
+
Adds Komarov overmap placeholder sprites for admin use
+
+

Обновления SuhEugene:

+
+
Fixed white skybox
+
+

29.01 - 2024

Обновления LordNest:

@@ -503,27 +513,6 @@

Обновления Spookerton:

Removed the free OFD charges from the mercenary ship.
Added the "Structures & Vehicles" uplink category, containing 80tc OFD charges for mercenaries.
- -

28.11 - 2023

-

Обновления BurpleBineapple:

-
-
Prosthetic bone repair now checks for Complex Devices instead of Medicine/Anatomy
-
-

Обновления LordNest:

-
-
Теперь ТОКАМАК ГКК не должен переворачиваться в процессе работы
-
Трава теперь красивая, у ГКК починились трубы
-
-

Обновления TheNightingale:

-
-
Certain programs - computer config, email, file browser and download tool - now require less processing power to run, allowing more programs to be run consecutively.
-
Email now requires 1 GB instead of _7_.
-
-

Обновления rootoo807:

-
-
Flowers grown in hydroponics can be made into wearable hair pins by adding a piece of cable.
-
Hairflowers are now color select in loadout.
-
Icons by Icons8
diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index c7d405669151a..33ee0a99249fb 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -23110,3 +23110,8 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY sierra_genchangelog.p - maptweak: "\u0412\u0435\u0440\u043D\u0443\u043B \u0420\u0435\u043A\u0441\u0430" emmanuelbassil: - bugfix: Radial menus now properly work when inside an exosuit +2024-01-30: + Rockton: + - rscadd: Adds Komarov overmap placeholder sprites for admin use + SuhEugene: + - bugfix: Fixed white skybox diff --git a/html/changelogs/AutoChangeLog-sierra-pr-1848.yml b/html/changelogs/AutoChangeLog-sierra-pr-1848.yml deleted file mode 100644 index 8c8f96cfa194e..0000000000000 --- a/html/changelogs/AutoChangeLog-sierra-pr-1848.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: SuhEugene -changes: - - {bugfix: Fixed white skybox} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-sierra-pr-1849.yml b/html/changelogs/AutoChangeLog-sierra-pr-1849.yml deleted file mode 100644 index f0ee5e35d7be2..0000000000000 --- a/html/changelogs/AutoChangeLog-sierra-pr-1849.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Rockton -changes: - - {rscadd: Adds Komarov overmap placeholder sprites for admin use} -delete-after: true From 729af9b31ca73ceaa5cb3da36f245b7693a2d455 Mon Sep 17 00:00:00 2001 From: MuckerMayhem <1161516+MuckerMayhem@users.noreply.github.com> Date: Wed, 31 Jan 2024 00:15:23 +0300 Subject: [PATCH 19/45] [MIRROR] fix up interlude tp stuff --- code/game/machinery/bluespace_drive.dm | 11 +++++++++-- maps/torch/torch_procs.dm | 5 +++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/code/game/machinery/bluespace_drive.dm b/code/game/machinery/bluespace_drive.dm index 3a4be5d9f5b10..c65ebbfd420b4 100644 --- a/code/game/machinery/bluespace_drive.dm +++ b/code/game/machinery/bluespace_drive.dm @@ -218,8 +218,15 @@ continue if (GLOB.using_map.use_bluespace_interlude && prob(interlude_teleport_chance)) - addtimer(new Callback(GLOBAL_PROC, /proc/do_unstable_teleport_safe, mob, GetConnectedZlevels(mob.z)), rand(1, 2) MINUTES) - GLOB.using_map.do_interlude_teleport(mob, duration = rand(1, 2.5) MINUTES) + if (istype(mob, /mob/living/simple_animal) && prob(80)) + return + var/turf/T = pick_area_turf_in_connected_z_levels( + list(/proc/is_not_space_area), + list(/proc/not_turf_contains_dense_objects, /proc/IsTurfAtmosSafe), + zlevels[1]) + if (!T) + return + GLOB.using_map.do_interlude_teleport(mob, T, rand(1, 2.5) MINUTES) return if (mob != being) var/source_position = being.loc diff --git a/maps/torch/torch_procs.dm b/maps/torch/torch_procs.dm index 352fa294a1e5f..55e58b6ef01b6 100644 --- a/maps/torch/torch_procs.dm +++ b/maps/torch/torch_procs.dm @@ -86,11 +86,12 @@ /datum/map/torch/do_interlude_teleport(atom/movable/target, atom/destination, duration = 30 SECONDS, precision, type) var/turf/T = pick_area_turf(/area/bluespace_interlude/platform, list(/proc/not_turf_contains_dense_objects, /proc/IsTurfAtmosSafe)) - if (!T) + if (!T && destination) do_teleport(target, destination) return if (isliving(target)) to_chat(target, FONT_LARGE(SPAN_WARNING("Your vision goes blurry and nausea strikes your stomach. Where are you...?"))) do_teleport(target, T, precision, type) - addtimer(new Callback(GLOBAL_PROC, /proc/do_teleport, target, destination), duration) + if (destination) + addtimer(new Callback(GLOBAL_PROC, /proc/do_teleport, target, destination), duration) From a90e1198c063414d1ad217cb08f44db26a8180e3 Mon Sep 17 00:00:00 2001 From: emmanuelbassil <6874235+emmanuelbassil@users.noreply.github.com> Date: Wed, 31 Jan 2024 01:45:21 +0300 Subject: [PATCH 20/45] [MIRROR] Fixes Unathi nutrition --- .../reagents/Chemistry-Reagents/Chemistry-Reagents-Food.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food.dm index 5935eba1bfb7a..38eceee4c4c96 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food.dm @@ -48,10 +48,10 @@ M.add_chemical_effect(CE_BLOODRESTORE, 4 * removed) /datum/reagent/nutriment/proc/adjust_nutrition(mob/living/carbon/M, removed) - var/nut_removed = removed - var/hyd_removed = removed if (HAS_TRAIT(M, /singleton/trait/boon/cast_iron_stomach)) removed *= 0.1 // Unathi get most of their nutrition from meat. + var/nut_removed = removed + var/hyd_removed = removed if(nutriment_factor) M.adjust_nutrition(nutriment_factor * nut_removed) // For hunger and fatness if(hydration_factor) From a1b78f6248c6cd81c7e3a06a03c03f2c52629a2e Mon Sep 17 00:00:00 2001 From: Sierra Helper <125094432+SierraHelper@users.noreply.github.com> Date: Wed, 31 Jan 2024 02:50:49 +0300 Subject: [PATCH 21/45] =?UTF-8?q?=D0=A7=D0=B5=D0=B9=D0=BD=D0=B4=D0=B6?= =?UTF-8?q?=D0=BB=D0=BE=D0=B3=20=D0=B4=D0=BB=D1=8F=20PR=20#1852=20[ci=20sk?= =?UTF-8?q?ip]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html/changelogs/AutoChangeLog-sierra-pr-1852.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-sierra-pr-1852.yml diff --git a/html/changelogs/AutoChangeLog-sierra-pr-1852.yml b/html/changelogs/AutoChangeLog-sierra-pr-1852.yml new file mode 100644 index 0000000000000..2046292dbad83 --- /dev/null +++ b/html/changelogs/AutoChangeLog-sierra-pr-1852.yml @@ -0,0 +1,4 @@ +author: emmanuelbassil +changes: + - {bugfix: Unathi no longer get as much nutrition from non-meat items} +delete-after: true From 2b272387e443f336bb92c6d144d6e897dbd94e8d Mon Sep 17 00:00:00 2001 From: Sierra Helper <125094432+SierraHelper@users.noreply.github.com> Date: Wed, 31 Jan 2024 01:16:43 +0000 Subject: [PATCH 22/45] =?UTF-8?q?=D0=90=D0=B2=D1=82=D0=BE=D0=BC=D0=B0?= =?UTF-8?q?=D1=82=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=B0=D1=8F=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BC=D0=BF=D0=B8=D0=BB=D1=8F=D1=86=D0=B8=D1=8F=20=D1=87=D0=B5?= =?UTF-8?q?=D0=B9=D0=BD=D0=B4=D0=B6=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=20[ci=20?= =?UTF-8?q?skip]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html/changelog.html | 6 ++++++ html/changelogs/.all_changelog.yml | 3 +++ html/changelogs/AutoChangeLog-sierra-pr-1852.yml | 4 ---- 3 files changed, 9 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-sierra-pr-1852.yml diff --git a/html/changelog.html b/html/changelog.html index ba73351d50e22..3dcf9b36e2f0e 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -28,6 +28,12 @@

Sierra SS13

-->
+

31.01 - 2024

+

Обновления emmanuelbassil:

+
+
Unathi no longer get as much nutrition from non-meat items
+
+

30.01 - 2024

Обновления Rockton:

diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 33ee0a99249fb..e4a0354f88719 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -23115,3 +23115,6 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY sierra_genchangelog.p - rscadd: Adds Komarov overmap placeholder sprites for admin use SuhEugene: - bugfix: Fixed white skybox +2024-01-31: + emmanuelbassil: + - bugfix: Unathi no longer get as much nutrition from non-meat items diff --git a/html/changelogs/AutoChangeLog-sierra-pr-1852.yml b/html/changelogs/AutoChangeLog-sierra-pr-1852.yml deleted file mode 100644 index 2046292dbad83..0000000000000 --- a/html/changelogs/AutoChangeLog-sierra-pr-1852.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: emmanuelbassil -changes: - - {bugfix: Unathi no longer get as much nutrition from non-meat items} -delete-after: true From 6131823ff3a753381d5545cb0ce5b108df8130a1 Mon Sep 17 00:00:00 2001 From: SuhEugene <32931701+SuhEugene@users.noreply.github.com> Date: Thu, 1 Feb 2024 13:45:53 +0300 Subject: [PATCH 23/45] Disable Onyx loadout --- code/__defines/~mods/~master_defines.dm | 3 ++ code/controllers/subsystems/jobs.dm | 2 +- code/datums/communication/ooc.dm | 8 ++-- .../preference_setup/general/05_preview.dm | 44 ++++++++++--------- maps/sierra/loadout/loadout.dm | 24 +++++----- mods/global_modpacks.dm | 2 +- 6 files changed, 46 insertions(+), 37 deletions(-) diff --git a/code/__defines/~mods/~master_defines.dm b/code/__defines/~mods/~master_defines.dm index 7d788238af008..8b77841503b83 100644 --- a/code/__defines/~mods/~master_defines.dm +++ b/code/__defines/~mods/~master_defines.dm @@ -23,6 +23,8 @@ // UTF8 - End // DON_LOADOUT - Start +// Не открывать до Рождества +/* #define DONATION_TIER_NONE null #define DONATION_TIER_ONE "Tier 1" #define DONATION_TIER_TWO "Tier 2" @@ -41,6 +43,7 @@ DONATION_TIER_NONE, DONATION_TIER_ONE, \ DONATION_TIER_TWO, DONATION_TIER_THREE, \ DONATION_TIER_FOUR, DONATION_TIER_ADMIN) +*/ // DON_LOADOUT - End // GLIDING - Start diff --git a/code/controllers/subsystems/jobs.dm b/code/controllers/subsystems/jobs.dm index 7ab726d00b79a..233a82a703a4c 100644 --- a/code/controllers/subsystems/jobs.dm +++ b/code/controllers/subsystems/jobs.dm @@ -397,7 +397,7 @@ SUBSYSTEM_DEF(jobs) for(var/required in G.allowed_skills) if(!H.skill_check(required,G.allowed_skills[required])) permitted = 0 - + // [SIERRA-ADD] - LOADOUT_ITEMS - Поддержка фракционных предметов в лодауте if(permitted && G.allowed_factions) var/singleton/cultural_info/faction = H.get_cultural_value(TAG_FACTION) diff --git a/code/datums/communication/ooc.dm b/code/datums/communication/ooc.dm index 1d112c3d886cb..9d51816fc2f51 100644 --- a/code/datums/communication/ooc.dm +++ b/code/datums/communication/ooc.dm @@ -35,14 +35,16 @@ var/ooc_color = C.prefs.ooccolor // [SIERRA-ADD] - DON_LOADOUT - var/ckey_prefix = C.donator_info.get_decorated_message(C, "[C.key]:") + // Не открывать до Рождества + // var/ckey_prefix = C.donator_info.get_decorated_message(C, "[C.key]:") // [/SIERRA-ADD] for(var/client/target in GLOB.clients) if(target.is_key_ignored(C.key)) // If we're ignored by this person, then do nothing. continue // [SIERRA-EDIT] - DON_LOADOUT - // var/sent_message = "[create_text_tag("ooc", "OOC:", target)] [C.key]: [SPAN_CLASS("message linkify", "[message]")]" // SIERRA-EDIT - ORIGINAL - var/sent_message = "[create_text_tag("ooc", "OOC:", target)] [ckey_prefix] [SPAN_CLASS("message linkify", "[message]")]" + // Не открывать до Рождества + var/sent_message = "[create_text_tag("ooc", "OOC:", target)] [C.key]: [SPAN_CLASS("message linkify", "[message]")]" // SIERRA-EDIT - ORIGINAL + // var/sent_message = "[create_text_tag("ooc", "OOC:", target)] [ckey_prefix] [SPAN_CLASS("message linkify", "[message]")]" // [/SIERRA-EDIT] if(can_badmin) receive_communication(C, target, SPAN_COLOR(ooc_color, SPAN_CLASS("ooc", sent_message))) diff --git a/code/modules/client/preference_setup/general/05_preview.dm b/code/modules/client/preference_setup/general/05_preview.dm index 7d2a3df38a3e3..28fc46f739b05 100644 --- a/code/modules/client/preference_setup/general/05_preview.dm +++ b/code/modules/client/preference_setup/general/05_preview.dm @@ -17,8 +17,9 @@ /datum/preferences/proc/dress_preview_mob(mob/living/carbon/human/mannequin) // [SIERRA-ADD] - DON_LOADOUT - Mob preview - if(!mannequin) - return + // Не открывать до Рождества + // if(!mannequin) + // return // [/SIERRA-ADD] var/update_icon = FALSE copy_to(mannequin, TRUE) @@ -32,8 +33,9 @@ else return // [SIERRA-ADD] - DON_LOADOUT - Mob preview - if(!previewJob && mannequin.icon) - update_icon = TRUE // So we don't end up stuck with a borg/AI icon after setting their priority to non-high + // Не открывать до Рождества + // if(!previewJob && mannequin.icon) + // update_icon = TRUE // So we don't end up stuck with a borg/AI icon after setting their priority to non-high // [/SIERRA-ADD] if(preview_job && previewJob) mannequin.job = previewJob.title @@ -48,15 +50,15 @@ // Equip custom gear loadout, replacing any job items var/list/loadout_taken_slots = list() // [SIERRA-EDIT] - DON_LOADOUT - Trying gears - // for(var/thing in Gear()) // SIERRA-EDIT - ORIGINAL - var/list/accessories = list() - - var/list/orig_gears = Gear() - var/list/gears = orig_gears.Copy() - if(trying_on_gear) - gears[trying_on_gear] = trying_on_tweaks.Copy() - - for(var/thing in gears) + for(var/thing in Gear()) // SIERRA-EDIT - ORIGINAL + // var/list/accessories = list() + // + // var/list/orig_gears = Gear() + // var/list/gears = orig_gears.Copy() + // if(trying_on_gear) + // gears[trying_on_gear] = trying_on_tweaks.Copy() + // + // for(var/thing in gears) // [/SIERRA-EDIT] var/datum/gear/G = gear_datums[thing] if(G) @@ -73,19 +75,21 @@ if(!permitted) continue // [SIERRA-ADD] - DON_LOADOUT - Accessories preview - if(G.slot == slot_tie) - accessories.Add(G) - continue + // Не открывать до Рождества + // if(G.slot == slot_tie) + // accessories.Add(G) + // continue // [/SIERRA-ADD] if(G.slot && G.slot != slot_tie && !(G.slot in loadout_taken_slots) && G.spawn_on_mob(mannequin, gear_list[gear_slot][G.display_name])) loadout_taken_slots.Add(G.slot) update_icon = TRUE // [SIERRA-ADD] - DON_LOADOUT - Accessories preview // equip accessories after other slots so they don't attach to a suit which will be replaced - for(var/datum/gear/G in accessories) - G.spawn_as_accessory_on_mob(mannequin, gears[G.display_name]) - if(length(accessories)) - update_icon = TRUE + // Не открывать до Рождества + // for(var/datum/gear/G in accessories) + // G.spawn_as_accessory_on_mob(mannequin, gears[G.display_name]) + // if(length(accessories)) + // update_icon = TRUE // [/SIERRA-ADD] if(update_icon) mannequin.update_icons() diff --git a/maps/sierra/loadout/loadout.dm b/maps/sierra/loadout/loadout.dm index 6359524178af9..7fecbc39ef2ae 100644 --- a/maps/sierra/loadout/loadout.dm +++ b/maps/sierra/loadout/loadout.dm @@ -3,14 +3,14 @@ description = "With additional light armor plate" path = /obj/item/clothing/suit/armor/pcarrier/light cost = 25 - donation_tier = DONATION_TIER_TWO + // donation_tier = DONATION_TIER_TWO // Не открывать до Рождества /datum/gear/pmp_w_tape display_name = "music player" description = "With custom tape" path = /obj/item/music_player cost = 0 - donation_tier = DONATION_TIER_TWO + // donation_tier = DONATION_TIER_TWO // Не открывать до Рождества /datum/gear/pmp_w_tape/New() . = ..() @@ -26,28 +26,28 @@ description = "With custom tape" path = /obj/item/music_player/boombox/custom_tape cost = 0 - donation_tier = DONATION_TIER_FOUR + // donation_tier = DONATION_TIER_FOUR // Не открывать до Рождества /datum/gear/bikehorn display_name = "bike horn" description = "for real aesthetes" path = /obj/item/bikehorn cost = 0 - donation_tier = DONATION_TIER_ONE + // donation_tier = DONATION_TIER_ONE // Не открывать до Рождества /datum/gear/bikehorn/rubberducky display_name = "rubber duck" description = "QUACK" path = /obj/item/bikehorn/rubberducky cost = 0 - donation_tier = DONATION_TIER_ONE + // donation_tier = DONATION_TIER_ONE // Не открывать до Рождества /datum/gear/premium_alcohol display_name = "expensive alcohol" description = "sometimes it turns out that the bar is closed, but you want a drink." path = /obj/item/reagent_containers/food/drinks/bottle cost = 0 - donation_tier = DONATION_TIER_ONE + // donation_tier = DONATION_TIER_ONE // Не открывать до Рождества /datum/gear/premium_alcohol/New() . = ..() @@ -65,7 +65,7 @@ description = "pizza time" path = /obj/item/pizzabox cost = 0 - donation_tier = DONATION_TIER_ONE + // donation_tier = DONATION_TIER_ONE // Не открывать до Рождества /datum/gear/pizzabox/New() . = ..() @@ -82,7 +82,7 @@ description = "let's DOOT" path = /obj/item/device/synthesized_instrument cost = 0 - donation_tier = DONATION_TIER_ONE + // donation_tier = DONATION_TIER_ONE // Не открывать до Рождества /datum/gear/musical_instruments/New() . = ..() @@ -102,7 +102,7 @@ description = "Admit it, you invested so much money just for one clown costume." path = /obj/item/clothing/mask/gas/sexyclown cost = 0 - donation_tier = DONATION_TIER_THREE + // donation_tier = DONATION_TIER_THREE // Не открывать до Рождества /datum/gear/head/kittyears display_name = "kitty ears" @@ -110,13 +110,13 @@ sort_category = "Earwear" allowed_roles = null cost = 0 - donation_tier = DONATION_TIER_TWO + // donation_tier = DONATION_TIER_TWO // Не открывать до Рождества /datum/gear/mre display_name = "MRE" path = /obj/item/storage/mre cost = 0 - donation_tier = DONATION_TIER_ONE + // donation_tier = DONATION_TIER_ONE // Не открывать до Рождества /datum/gear/mre/New() . = ..() @@ -138,4 +138,4 @@ description = "Ah, I see you're a man of culture as well." path = /obj/item/material/sword/katana/replica cost = 0 - donation_tier = DONATION_TIER_TWO + // donation_tier = DONATION_TIER_TWO // Не открывать до Рождества diff --git a/mods/global_modpacks.dm b/mods/global_modpacks.dm index 7ef38996b18a9..53ddea1452887 100644 --- a/mods/global_modpacks.dm +++ b/mods/global_modpacks.dm @@ -2,7 +2,7 @@ #include "ai/_ai.dme" #include "body_markings/_body_markings.dme" #include "client_verbs/_client_verbs.dme" -#include "don_loadout/_don_loadout.dme" +// #include "don_loadout/_don_loadout.dme" // Не открывать до Рождества #include "eris_announcer/_eris_announcer.dme" #include "emote_panel/_emote_panel.dme" #include "ex666_ecosystem/_ex666_ecosystem.dme" From 341c4c70f3744751b23a64bc56aef6588dc16206 Mon Sep 17 00:00:00 2001 From: Sierra Helper <125094432+SierraHelper@users.noreply.github.com> Date: Thu, 1 Feb 2024 13:54:59 +0300 Subject: [PATCH 24/45] =?UTF-8?q?=D0=A7=D0=B5=D0=B9=D0=BD=D0=B4=D0=B6?= =?UTF-8?q?=D0=BB=D0=BE=D0=B3=20=D0=B4=D0=BB=D1=8F=20PR=20#1853=20[ci=20sk?= =?UTF-8?q?ip]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html/changelogs/AutoChangeLog-sierra-pr-1853.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-sierra-pr-1853.yml diff --git a/html/changelogs/AutoChangeLog-sierra-pr-1853.yml b/html/changelogs/AutoChangeLog-sierra-pr-1853.yml new file mode 100644 index 0000000000000..d07a1222da2b2 --- /dev/null +++ b/html/changelogs/AutoChangeLog-sierra-pr-1853.yml @@ -0,0 +1,4 @@ +author: SuhEugene +changes: + - {rscdel: 'Отключил Onyx лодаут, который возможно и создавал большие лаги сервера.'} +delete-after: true From 0ecd397a21964e38d87940d209223657c680ebc4 Mon Sep 17 00:00:00 2001 From: MuckerMayhem <1161516+MuckerMayhem@users.noreply.github.com> Date: Thu, 1 Feb 2024 20:00:25 +0300 Subject: [PATCH 25/45] [MIRROR] Revert "Fix white skybox appearance" --- code/_onclick/hud/skybox.dm | 7 +------ code/controllers/subsystems/skybox.dm | 1 - 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/code/_onclick/hud/skybox.dm b/code/_onclick/hud/skybox.dm index 9b21e0b7243a0..e4f93a2f617da 100644 --- a/code/_onclick/hud/skybox.dm +++ b/code/_onclick/hud/skybox.dm @@ -23,14 +23,9 @@ screen |= skybox skybox.screen_loc = "CENTER:[-224 - T.x],CENTER:[-224 - T.y]" -/client/proc/deferred_update_skybox(rebuild) - set waitfor = FALSE - sleep(1) - update_skybox(rebuild) - /mob/Login() ..() - client.deferred_update_skybox(1) + client.update_skybox(1) /mob/Move() var/old_z = get_z(src) diff --git a/code/controllers/subsystems/skybox.dm b/code/controllers/subsystems/skybox.dm index 775b1edf332e4..f87d2cfe6ef1e 100644 --- a/code/controllers/subsystems/skybox.dm +++ b/code/controllers/subsystems/skybox.dm @@ -42,7 +42,6 @@ SUBSYSTEM_DEF(skybox) dust.blend_mode = BLEND_ADD var/mutable_appearance/space = new /mutable_appearance(/turf/space) space.icon_state = "white" - space.plane = SKYBOX_PLANE space.AddOverlays(dust) space_appearance_cache[index] = space.appearance background_color = RANDOM_RGB From d52f3dbd26e7da781830b37953f04cecda1ba3fb Mon Sep 17 00:00:00 2001 From: Sierra Helper <125094432+SierraHelper@users.noreply.github.com> Date: Thu, 1 Feb 2024 20:24:47 +0300 Subject: [PATCH 26/45] =?UTF-8?q?=D0=A7=D0=B5=D0=B9=D0=BD=D0=B4=D0=B6?= =?UTF-8?q?=D0=BB=D0=BE=D0=B3=20=D0=B4=D0=BB=D1=8F=20PR=20#1854=20[ci=20sk?= =?UTF-8?q?ip]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html/changelogs/AutoChangeLog-sierra-pr-1854.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-sierra-pr-1854.yml diff --git a/html/changelogs/AutoChangeLog-sierra-pr-1854.yml b/html/changelogs/AutoChangeLog-sierra-pr-1854.yml new file mode 100644 index 0000000000000..12defd7f65d66 --- /dev/null +++ b/html/changelogs/AutoChangeLog-sierra-pr-1854.yml @@ -0,0 +1,4 @@ +author: Mucker +changes: + - {bugfix: Brought back the good skybox.} +delete-after: true From 0762d3a018a8e0163f90a066b902cb1a0c27b329 Mon Sep 17 00:00:00 2001 From: Sierra Helper <125094432+SierraHelper@users.noreply.github.com> Date: Fri, 2 Feb 2024 01:15:47 +0000 Subject: [PATCH 27/45] =?UTF-8?q?=D0=90=D0=B2=D1=82=D0=BE=D0=BC=D0=B0?= =?UTF-8?q?=D1=82=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=B0=D1=8F=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BC=D0=BF=D0=B8=D0=BB=D1=8F=D1=86=D0=B8=D1=8F=20=D1=87=D0=B5?= =?UTF-8?q?=D0=B9=D0=BD=D0=B4=D0=B6=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=20[ci=20?= =?UTF-8?q?skip]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html/changelog.html | 17 ++++++++++------- html/changelogs/.all_changelog.yml | 9 +++++++++ .../changelogs/AutoChangeLog-sierra-pr-1853.yml | 4 ---- .../changelogs/AutoChangeLog-sierra-pr-1854.yml | 4 ---- 4 files changed, 19 insertions(+), 15 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-sierra-pr-1853.yml delete mode 100644 html/changelogs/AutoChangeLog-sierra-pr-1854.yml diff --git a/html/changelog.html b/html/changelog.html index 3dcf9b36e2f0e..a2b1781af51a5 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -28,6 +28,16 @@

Sierra SS13

-->
+

02.02 - 2024

+

Обновления Mucker:

+
+
Brought back the good skybox.
+
+

Обновления SuhEugene:

+
+
Отключил Onyx лодаут, который возможно и создавал большие лаги сервера.
+
+

31.01 - 2024

Обновления emmanuelbassil:

@@ -512,13 +522,6 @@

Обновления UEDHighCommand:

В лодаут добавлены окрашиваемые плащи и плащи отделов. Плащи крепятся к скафандрам в качестве акксесуара;
В лодаут добавлены перекрашиваемые обмотки и сандали для унати.
- -

01.12 - 2023

-

Обновления Spookerton:

-
-
Removed the free OFD charges from the mercenary ship.
-
Added the "Structures & Vehicles" uplink category, containing 80tc OFD charges for mercenaries.
-
Icons by Icons8
diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index e4a0354f88719..bca31103e1d77 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -23118,3 +23118,12 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY sierra_genchangelog.p 2024-01-31: emmanuelbassil: - bugfix: Unathi no longer get as much nutrition from non-meat items +2024-02-02: + Mucker: + - bugfix: Brought back the good skybox. + SuhEugene: + - rscdel: "\u041E\u0442\u043A\u043B\u044E\u0447\u0438\u043B Onyx \u043B\u043E\u0434\ + \u0430\u0443\u0442, \u043A\u043E\u0442\u043E\u0440\u044B\u0439 \u0432\u043E\u0437\ + \u043C\u043E\u0436\u043D\u043E \u0438 \u0441\u043E\u0437\u0434\u0430\u0432\u0430\ + \u043B \u0431\u043E\u043B\u044C\u0448\u0438\u0435 \u043B\u0430\u0433\u0438 \u0441\ + \u0435\u0440\u0432\u0435\u0440\u0430." diff --git a/html/changelogs/AutoChangeLog-sierra-pr-1853.yml b/html/changelogs/AutoChangeLog-sierra-pr-1853.yml deleted file mode 100644 index d07a1222da2b2..0000000000000 --- a/html/changelogs/AutoChangeLog-sierra-pr-1853.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: SuhEugene -changes: - - {rscdel: 'Отключил Onyx лодаут, который возможно и создавал большие лаги сервера.'} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-sierra-pr-1854.yml b/html/changelogs/AutoChangeLog-sierra-pr-1854.yml deleted file mode 100644 index 12defd7f65d66..0000000000000 --- a/html/changelogs/AutoChangeLog-sierra-pr-1854.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Mucker -changes: - - {bugfix: Brought back the good skybox.} -delete-after: true From 23da65a1f25c48f81f8bcc44df1628f6184cd59a Mon Sep 17 00:00:00 2001 From: Sbotkin <5092934+Sbotkin@users.noreply.github.com> Date: Fri, 2 Feb 2024 14:55:25 +0300 Subject: [PATCH 28/45] [MIRROR] Fixes vote extend text and fleet medical fatigues --- code/datums/vote/transfer.dm | 10 +++++----- maps/torch/items/clothing/solgov-under.dm | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/code/datums/vote/transfer.dm b/code/datums/vote/transfer.dm index 7acc75d71a914..79f8041713078 100644 --- a/code/datums/vote/transfer.dm +++ b/code/datums/vote/transfer.dm @@ -1,5 +1,5 @@ -#define CHOICE_TRANSFER "Initiate crew transfer" -#define CHOICE_EXTEND "Extend the round ([config.vote_autotransfer_interval / 600] minutes)" +#define CHOICE_TRANSFER "Initiate bluespace jump" +#define CHOICE_EXTEND "Extend the round ([config.vote_autotransfer_interval] minutes)" #define CHOICE_ADD_ANTAG "Add antagonist" /datum/vote/transfer @@ -17,10 +17,10 @@ return //Mods bypass further checks. var/singleton/security_state/security_state = GET_SINGLETON(GLOB.using_map.security_state) if (!automatic && security_state.current_security_level_is_same_or_higher_than(security_state.high_security_level)) - to_chat(creator, "The current alert status is too high to call for a crew transfer!") + to_chat(creator, "The current alert status is too high to call for a bluespace jump!") return FALSE if(GAME_STATE <= RUNLEVEL_SETUP) - to_chat(creator, "The crew transfer button has been disabled!") + to_chat(creator, "The bluespace jump button has been disabled!") return FALSE /datum/vote/transfer/setup_vote(mob/creator, automatic) @@ -45,7 +45,7 @@ else factor = 1.4 choices[CHOICE_TRANSFER] = round(choices[CHOICE_TRANSFER] * factor) - to_world(SPAN_COLOR("purple", "Crew Transfer Factor: [factor]")) + to_world(SPAN_COLOR("purple", "Bluespace Jump Factor: [factor]")) /datum/vote/transfer/report_result() if(..()) diff --git a/maps/torch/items/clothing/solgov-under.dm b/maps/torch/items/clothing/solgov-under.dm index 63fe70c46c870..c90c759d8b051 100644 --- a/maps/torch/items/clothing/solgov-under.dm +++ b/maps/torch/items/clothing/solgov-under.dm @@ -205,7 +205,7 @@ item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/utility/fleet/combat/medical - accessories = list(/obj/item/clothing/accessory/solgov/department/medical/fleet, /obj/item/clothing/accessory/armband/medblue) + accessories = list(/obj/item/clothing/accessory/solgov/department/medical/fleet) item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/utility/fleet/combat/command From 31b1ee8556e0ebf84d2d171ffc0bb1153c2f00e5 Mon Sep 17 00:00:00 2001 From: Nyvrem <10331933+Nyvrem@users.noreply.github.com> Date: Thu, 1 Feb 2024 21:50:22 +0300 Subject: [PATCH 29/45] [MIRROR] Vox only get neuter pronouns --- code/modules/species/outsider/vox.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/species/outsider/vox.dm b/code/modules/species/outsider/vox.dm index 76876f8f56c6b..c459bf92d902f 100644 --- a/code/modules/species/outsider/vox.dm +++ b/code/modules/species/outsider/vox.dm @@ -79,6 +79,7 @@ ) genders = list(NEUTER) + pronouns = list(PRONOUNS_THEY_THEM, PRONOUNS_IT_ITS) descriptors = list( /datum/mob_descriptor/height = -1, /datum/mob_descriptor/build = 1, From 1dd754ddff1e7a2fcd639cdc9983a662c43c5a9e Mon Sep 17 00:00:00 2001 From: Sierra Helper <125094432+SierraHelper@users.noreply.github.com> Date: Fri, 2 Feb 2024 19:17:04 +0300 Subject: [PATCH 30/45] =?UTF-8?q?=D0=A7=D0=B5=D0=B9=D0=BD=D0=B4=D0=B6?= =?UTF-8?q?=D0=BB=D0=BE=D0=B3=20=D0=B4=D0=BB=D1=8F=20PR=20#1857=20[ci=20sk?= =?UTF-8?q?ip]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html/changelogs/AutoChangeLog-sierra-pr-1857.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-sierra-pr-1857.yml diff --git a/html/changelogs/AutoChangeLog-sierra-pr-1857.yml b/html/changelogs/AutoChangeLog-sierra-pr-1857.yml new file mode 100644 index 0000000000000..ff062c9b6cd4c --- /dev/null +++ b/html/changelogs/AutoChangeLog-sierra-pr-1857.yml @@ -0,0 +1,5 @@ +author: Sbotkin +changes: + - {bugfix: Fleet medical fatigues no longer spawn with an armband.} + - {bugfix: The end-of-round vote now correctly displays extend time.} +delete-after: true From 0b1be40197bce0216eaf29145e91787904e6d0e2 Mon Sep 17 00:00:00 2001 From: Sierra Helper <125094432+SierraHelper@users.noreply.github.com> Date: Fri, 2 Feb 2024 19:17:11 +0300 Subject: [PATCH 31/45] =?UTF-8?q?=D0=A7=D0=B5=D0=B9=D0=BD=D0=B4=D0=B6?= =?UTF-8?q?=D0=BB=D0=BE=D0=B3=20=D0=B4=D0=BB=D1=8F=20PR=20#1855=20[ci=20sk?= =?UTF-8?q?ip]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html/changelogs/AutoChangeLog-sierra-pr-1855.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-sierra-pr-1855.yml diff --git a/html/changelogs/AutoChangeLog-sierra-pr-1855.yml b/html/changelogs/AutoChangeLog-sierra-pr-1855.yml new file mode 100644 index 0000000000000..2a0785d7f1513 --- /dev/null +++ b/html/changelogs/AutoChangeLog-sierra-pr-1855.yml @@ -0,0 +1,5 @@ +author: Nyvrem +changes: + - {tweak: Vox have had errant thoughts of excessive identity pruned from their mindscapes. + Again.} +delete-after: true From 7f78304f3850dedd3b66fe0cfd4c7f882db6e26c Mon Sep 17 00:00:00 2001 From: Sierra Helper <125094432+SierraHelper@users.noreply.github.com> Date: Sat, 3 Feb 2024 01:14:59 +0000 Subject: [PATCH 32/45] =?UTF-8?q?=D0=90=D0=B2=D1=82=D0=BE=D0=BC=D0=B0?= =?UTF-8?q?=D1=82=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=B0=D1=8F=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BC=D0=BF=D0=B8=D0=BB=D1=8F=D1=86=D0=B8=D1=8F=20=D1=87=D0=B5?= =?UTF-8?q?=D0=B9=D0=BD=D0=B4=D0=B6=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=20[ci=20?= =?UTF-8?q?skip]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html/changelog.html | 18 +++++++++++------- html/changelogs/.all_changelog.yml | 7 +++++++ .../AutoChangeLog-sierra-pr-1855.yml | 5 ----- .../AutoChangeLog-sierra-pr-1857.yml | 5 ----- 4 files changed, 18 insertions(+), 17 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-sierra-pr-1855.yml delete mode 100644 html/changelogs/AutoChangeLog-sierra-pr-1857.yml diff --git a/html/changelog.html b/html/changelog.html index a2b1781af51a5..d15df6a519ec9 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -28,6 +28,17 @@

Sierra SS13

-->
+

03.02 - 2024

+

Обновления Nyvrem:

+
+
Vox have had errant thoughts of excessive identity pruned from their mindscapes. Again.
+
+

Обновления Sbotkin:

+
+
Fleet medical fatigues no longer spawn with an armband.
+
The end-of-round vote now correctly displays extend time.
+
+

02.02 - 2024

Обновления Mucker:

@@ -515,13 +526,6 @@

Обновления LordNest:

Добавил новые марки протезов для котов
Вернул плакаты котиков и честно наворовал протезов
- -

02.12 - 2023

-

Обновления UEDHighCommand:

-
-
В лодаут добавлены окрашиваемые плащи и плащи отделов. Плащи крепятся к скафандрам в качестве акксесуара;
-
В лодаут добавлены перекрашиваемые обмотки и сандали для унати.
-
Icons by Icons8
diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index bca31103e1d77..f7933ac5b3f9b 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -23127,3 +23127,10 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY sierra_genchangelog.p \u043C\u043E\u0436\u043D\u043E \u0438 \u0441\u043E\u0437\u0434\u0430\u0432\u0430\ \u043B \u0431\u043E\u043B\u044C\u0448\u0438\u0435 \u043B\u0430\u0433\u0438 \u0441\ \u0435\u0440\u0432\u0435\u0440\u0430." +2024-02-03: + Nyvrem: + - tweak: Vox have had errant thoughts of excessive identity pruned from their mindscapes. + Again. + Sbotkin: + - bugfix: Fleet medical fatigues no longer spawn with an armband. + - bugfix: The end-of-round vote now correctly displays extend time. diff --git a/html/changelogs/AutoChangeLog-sierra-pr-1855.yml b/html/changelogs/AutoChangeLog-sierra-pr-1855.yml deleted file mode 100644 index 2a0785d7f1513..0000000000000 --- a/html/changelogs/AutoChangeLog-sierra-pr-1855.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: Nyvrem -changes: - - {tweak: Vox have had errant thoughts of excessive identity pruned from their mindscapes. - Again.} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-sierra-pr-1857.yml b/html/changelogs/AutoChangeLog-sierra-pr-1857.yml deleted file mode 100644 index ff062c9b6cd4c..0000000000000 --- a/html/changelogs/AutoChangeLog-sierra-pr-1857.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: Sbotkin -changes: - - {bugfix: Fleet medical fatigues no longer spawn with an armband.} - - {bugfix: The end-of-round vote now correctly displays extend time.} -delete-after: true From 720ea252af07f62ff066cdf5041e46cd25de977e Mon Sep 17 00:00:00 2001 From: Sierra Helper <125094432+SierraHelper@users.noreply.github.com> Date: Sun, 4 Feb 2024 01:20:50 +0000 Subject: [PATCH 33/45] =?UTF-8?q?=D0=90=D0=B2=D1=82=D0=BE=D0=BC=D0=B0?= =?UTF-8?q?=D1=82=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=B0=D1=8F=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BC=D0=BF=D0=B8=D0=BB=D1=8F=D1=86=D0=B8=D1=8F=20=D1=87=D0=B5?= =?UTF-8?q?=D0=B9=D0=BD=D0=B4=D0=B6=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=20[ci=20?= =?UTF-8?q?skip]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html/changelog.html | 9 --------- 1 file changed, 9 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index d15df6a519ec9..2a9e184a42974 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -517,15 +517,6 @@

Обновления LordNest:

Голобомбы вернул
Исправил ряд мелких ошибок карты
- -

03.12 - 2023

-

Обновления LordNest:

-
-
Починил пропадавшие текстуры и невозможность брать протезы таярам
-
Подредачил слегка цифры котам, ничего криминального (возраст)
-
Добавил новые марки протезов для котов
-
Вернул плакаты котиков и честно наворовал протезов
-
Icons by Icons8
From 923b9039affab68507ea72be6b3234a940164fc9 Mon Sep 17 00:00:00 2001 From: Sierra Helper <125094432+SierraHelper@users.noreply.github.com> Date: Mon, 5 Feb 2024 01:18:17 +0000 Subject: [PATCH 34/45] =?UTF-8?q?=D0=90=D0=B2=D1=82=D0=BE=D0=BC=D0=B0?= =?UTF-8?q?=D1=82=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=B0=D1=8F=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BC=D0=BF=D0=B8=D0=BB=D1=8F=D1=86=D0=B8=D1=8F=20=D1=87=D0=B5?= =?UTF-8?q?=D0=B9=D0=BD=D0=B4=D0=B6=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=20[ci=20?= =?UTF-8?q?skip]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html/changelog.html | 8 -------- 1 file changed, 8 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index 2a9e184a42974..473f0d4df39ba 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -509,14 +509,6 @@

Обновления gy1ta23:

Torch pilot helmets are a selection box instead of all pre-spawned.
- -

04.12 - 2023

-

Обновления LordNest:

-
-
Исправил отсутствие некоторых вещей в лодауте
-
Голобомбы вернул
-
Исправил ряд мелких ошибок карты
-
Icons by Icons8
From c2803f47e737440dbd207229a48b2d468aaf6d3f Mon Sep 17 00:00:00 2001 From: ddorou <155924453+ddorou@users.noreply.github.com> Date: Mon, 5 Feb 2024 18:44:40 +0300 Subject: [PATCH 35/45] Increase storage pouches slots amount to 3 (#1846) Co-authored-by: SuhEugene <32931701+SuhEugene@users.noreply.github.com> --- baystation12.dme | 2 +- maps/sierra/items/pouches.dm | 19 +++++++++++++++++++ maps/sierra/sierra.dm | 1 + 3 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 maps/sierra/items/pouches.dm diff --git a/baystation12.dme b/baystation12.dme index 524cf816f2fcd..8a322268c0dd0 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -88,8 +88,8 @@ #include "code\__defines\xenoarcheaology.dm" #include "code\__defines\ZAS.dm" #include "code\__defines\zmimic.dm" -#include "code\__defines\~mods\rust_g.dm" #include "code\__defines\~mods\expanded_culture_descriptor.dm" +#include "code\__defines\~mods\rust_g.dm" #include "code\__defines\~mods\~master_defines.dm" #include "code\_global_vars\edible.dm" #include "code\_global_vars\logging.dm" diff --git a/maps/sierra/items/pouches.dm b/maps/sierra/items/pouches.dm new file mode 100644 index 0000000000000..54ece2a71b43a --- /dev/null +++ b/maps/sierra/items/pouches.dm @@ -0,0 +1,19 @@ +/obj/item/clothing/accessory/storage/pouches + desc = "A collection of black pouches that can be attached to a plate carrier. Carries up to three items." + slots = 3 STORAGE_SLOTS + + +/obj/item/clothing/accessory/storage/pouches/blue + desc = "A collection of blue pouches that can be attached to a plate carrier. Carries up to three items." + + +/obj/item/clothing/accessory/storage/pouches/navy + desc = "A collection of navy blue pouches that can be attached to a plate carrier. Carries up to three items." + + +/obj/item/clothing/accessory/storage/pouches/green + desc = "A collection of green pouches that can be attached to a plate carrier. Carries up to three items." + + +/obj/item/clothing/accessory/storage/pouches/tan + desc = "A collection of tan pouches that can be attached to a plate carrier. Carries up to three items." diff --git a/maps/sierra/sierra.dm b/maps/sierra/sierra.dm index d99b22d1947e2..d504588a22c88 100644 --- a/maps/sierra/sierra.dm +++ b/maps/sierra/sierra.dm @@ -66,6 +66,7 @@ #include "items/papers.dm" #include "items/rigs.dm" #include "items/stamps.dm" + #include "items/pouches.dm" #include "items/clothing/clothing.dm" #include "items/clothing/exploration.dm" From 8dc5a368fa6e378753b46407663b24be12c03a34 Mon Sep 17 00:00:00 2001 From: LordNest <77477080+LordNest@users.noreply.github.com> Date: Mon, 5 Feb 2024 20:11:50 +0400 Subject: [PATCH 36/45] Add sealgen and other macguffins (#1847) --- baystation12.dme | 1 + code/modules/mining/abandonedcrates.dm | 5 +- maps/sierra/icons/obj/shielding.dmi | Bin 22198 -> 1408 bytes maps/sierra/items/items.dm | 6 + maps/sierra/machinery/vendors.dm | 9 +- maps/sierra/z1-z5_sierra.dmm | 43 +-- mods/_maps/liberia/maps/liberia.dmm | 4 +- .../modules/projectiles/projectile/bullets.dm | 3 + mods/global_modpacks.dm | 3 +- mods/gravity_generator/_gravity_generator.dm | 5 - mods/gravity_generator/_gravity_generator.dme | 10 - .../README.md | 5 +- mods/machinery/_machinery.dm | 5 + mods/machinery/_machinery.dme | 11 + .../code/gravity_generator}/base.dm | 2 +- .../code/gravity_generator}/main.dm | 0 .../code/gravity_generator}/wires.dm | 0 mods/machinery/code/sealing_generator.dm | 274 ++++++++++++++++++ .../icons/gravity_generator.dmi | Bin mods/machinery/icons/sealing_generator.dmi | Bin 0 -> 19096 bytes mods/utility_items/README.md | 79 +++++ mods/utility_items/_utility_items.dm | 4 + mods/utility_items/_utility_items.dme | 10 + mods/utility_items/code/multimeter.dm | 231 +++++++++++++++ mods/utility_items/code/wires.dm | 255 ++++++++++++++++ mods/utility_items/icons/multimeter.dmi | Bin 0 -> 378 bytes mods/utility_items/sounds/mbeep.ogg | Bin 0 -> 8674 bytes packs/infinity/_pack.dm | 3 - packs/infinity/icons/obj/items.dmi | Bin 24259 -> 23900 bytes .../infinity/icons/obj/machines/shielding.dmi | Bin 21946 -> 0 bytes packs/infinity/items/multimeter.dm | 80 ----- packs/infinity/items/powertools.dm | 138 --------- packs/infinity/items/toys.dm | 5 - 33 files changed, 909 insertions(+), 282 deletions(-) create mode 100644 mods/_master_files/code/modules/projectiles/projectile/bullets.dm delete mode 100644 mods/gravity_generator/_gravity_generator.dm delete mode 100644 mods/gravity_generator/_gravity_generator.dme rename mods/{gravity_generator => machinery}/README.md (97%) create mode 100644 mods/machinery/_machinery.dm create mode 100644 mods/machinery/_machinery.dme rename mods/{gravity_generator/code => machinery/code/gravity_generator}/base.dm (99%) rename mods/{gravity_generator/code => machinery/code/gravity_generator}/main.dm (100%) rename mods/{gravity_generator/code => machinery/code/gravity_generator}/wires.dm (100%) create mode 100644 mods/machinery/code/sealing_generator.dm rename mods/{gravity_generator => machinery}/icons/gravity_generator.dmi (100%) create mode 100644 mods/machinery/icons/sealing_generator.dmi create mode 100644 mods/utility_items/README.md create mode 100644 mods/utility_items/_utility_items.dm create mode 100644 mods/utility_items/_utility_items.dme create mode 100644 mods/utility_items/code/multimeter.dm create mode 100644 mods/utility_items/code/wires.dm create mode 100644 mods/utility_items/icons/multimeter.dmi create mode 100644 mods/utility_items/sounds/mbeep.ogg delete mode 100644 packs/infinity/icons/obj/machines/shielding.dmi delete mode 100644 packs/infinity/items/multimeter.dm delete mode 100644 packs/infinity/items/powertools.dm delete mode 100644 packs/infinity/items/toys.dm diff --git a/baystation12.dme b/baystation12.dme index 8a322268c0dd0..44bc89b5d8efb 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -3365,6 +3365,7 @@ #include "mods\_master_files\code\modules\events\gravity.dm" #include "mods\_master_files\code\modules\mob\new_player\new_player.dm" #include "mods\_master_files\code\modules\power\gravitygenerator.dm" +#include "mods\_master_files\code\modules\projectiles\projectile\bullets.dm" #include "mods\_master_files\maps\mapsystem\maps.dm" #include "mods\_master_files\maps\sierra\sierra_ranks.dm" #include "mods\_master_files\maps\sierra\items\rigs.dm" diff --git a/code/modules/mining/abandonedcrates.dm b/code/modules/mining/abandonedcrates.dm index f291299a6aafe..32f0ca83683ad 100644 --- a/code/modules/mining/abandonedcrates.dm +++ b/code/modules/mining/abandonedcrates.dm @@ -5,7 +5,10 @@ var/list/code = list() var/list/lastattempt = list() var/attempts = 10 - var/codelen = 4 + // [SIERRA-EDIT] - UTILITY_ITEMS - Multimeter Avoiding redeclare of var "codelen" + // var/codelen = 4 // SIERRA-EDIT - ORIGINAL + codelen = 4 + // [/SIERRA-EDIT] - UTILITY_ITEMS locked = 1 /obj/structure/closet/crate/secure/loot/New() diff --git a/maps/sierra/icons/obj/shielding.dmi b/maps/sierra/icons/obj/shielding.dmi index 825dba510eda73eb8c34bc1ec2ddd7fb8714b697..f2a1ece462d1f6dbc48228a8d53a18f5a0d80982 100644 GIT binary patch literal 1408 zcmV-`1%LX9P)V=-0C=2JR&a84_w-Y6@%7{?OD!tS%+FJ> zRWQ*r;NmRLOex6#a*U0*I5Sc+(=$pSoZ^zil2jm5DLpkWwJ5P9zsNv|i!&v&s2C_{ z$iVP2@y+*jKQC4vEa{+q+0EnGADL2>?ssI24 zI!Q!9R9J=WSM73~Fbu@lqQZnEPDxtYUYqxS%C5|pZ8#fd?oVgxBzGaZTFE+aR#i1G zRqJY9x>i-X0zv^kBq*b3yCPhsgk~cUE;8^DLDlL@Ncf_X8gSig37RZ?KtRF9Ctxg} zz{Gn%MNLZ!PHhvHxWH?CLXiIW1gz>>u}=_nNgB|i#2F{3g#rt_#m59}$M^)S43;P$ zf!TKH8_?K}m3?}$ipe%%6J}WA`{(Cg;v)h|6+J>cGKnsCBpH`IObxIee|bTX+}WTB zGd#t=zE1HW0jfwqPD8y`szwg&2nmpDCNyY3r&aSJ_{)>h9h%TYu*5&V3jX@+<2Qn0 zN#LAFo7%r9=Oh8oC31`Y0Jq2heG9y^O&h{KzDEY=_dY%(p#M%PsOKdWI0_PofC+IU z0uj8A4+yBg!?#{n=Lp|h0;^qz4C^wuB)h>rKEf#?pr!Z%X_tHEs0Fkha1cuC-B+yq7%;}%$FX~Ys--c#K5*?4?N@}MwJ z0@x-cEzq{l<0v45SJ;5B!GZ8KJ=s{QvJie}3=%e}2AL?Y-nzpP%CItI*(={C{b_ zSnPeJ)$LRK{pU^TDlqsZ|6iIfW_vIG|Aq|Ezls0f41US~m*$Jv-gmLT?>2*9^8cmz zVz&3G|KALL$^Vz;i`Cw{H}AgTzu#PF@Js%`G+)g2UIvUM!8Bkj2EXM0OY_BK?_~#} zfKMCdm2! zB0jo3!Hr3RjQ>A1AEbmU{{P&35ECx>|MT;~O1S3#&&>xR;iCUPJ0GlstNy<{AN1be zuY{}qpL$c84=nusM!4$#$@Hc)AHe?y6U;^bPugVXhyU}z3H%?P5B>r*NR2Me;F$6N O0000b6QKT3o%Z#k0GD0fJSdt}cmh5XK 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 VlqQg0_<)EO;&R|Hro -## Генератор гравитации +## Машинерия -ID мода: GRAVITY_GENERATOR +ID мода: MACHINERY + + +## Предметы-утилиты + +ID мода: UTILITY_ITEMS + + +### Описание мода + +Модпак добавляет различные предметы, которые будут полезны в использовании, но слишком комплексные, чтобы держать их в файлах карты или где-то ещё. + + +### Изменения *кор кода* + +- `code/modules/mining/abandonedcrates.dm` `/obj/structure/closet/crate/secure/loot/var/codelen` + + + +### Оверрайды + +- Отсутствуют + + + +### Дефайны + +- Отсутствуют + + +### Используемые файлы, не содержащиеся в модпаке + +- `mods/ntnet/code/NTNet_code.dm` + + +### Авторы: + +LordNest + diff --git a/mods/utility_items/_utility_items.dm b/mods/utility_items/_utility_items.dm new file mode 100644 index 0000000000000..cf6c4c2aa882e --- /dev/null +++ b/mods/utility_items/_utility_items.dm @@ -0,0 +1,4 @@ +/singleton/modpack/utility + name = "Предметы-утилиты" + desc = "Модпак добавляет различные предметы, которые будут полезны в использовании, но слишком комплексные, чтобы держать их в файлах карты или где-то ещё." + author = "LordNest" diff --git a/mods/utility_items/_utility_items.dme b/mods/utility_items/_utility_items.dme new file mode 100644 index 0000000000000..e9739e678d821 --- /dev/null +++ b/mods/utility_items/_utility_items.dme @@ -0,0 +1,10 @@ +#ifndef MODPACK_UTILITY_ITEMS +#define MODPACK_UTILITY_ITEMS + +#include "_utility_items.dm" + + +#include "code/multimeter.dm" +#include "code/wires.dm" + +#endif diff --git a/mods/utility_items/code/multimeter.dm b/mods/utility_items/code/multimeter.dm new file mode 100644 index 0000000000000..8e7c181ce11fc --- /dev/null +++ b/mods/utility_items/code/multimeter.dm @@ -0,0 +1,231 @@ +#define METER_MESURING "Measuring" +#define METER_CHECKING "Checking" + +#define isMultimeter(A) (A && A.ismultimeter()) + +/obj/item/device/multitool/multimeter + name = "multimeter" + desc = "Используется для измерения потребления электроэнергии оборудования и прозвонки проводов. Рекомендуется докторами." + icon = 'mods/utility_items/icons/multimeter.dmi' + icon_state = "multimeter" + origin_tech = list(TECH_MAGNET = 4, TECH_ENGINEERING = 4) + slot_flags = SLOT_BELT + var/mode = METER_MESURING // Mode + +/obj/item/device/multitool/multimeter/attack_self(mob/user) + switch(mode) + if(METER_MESURING) + mode = METER_CHECKING + if(METER_CHECKING) + mode = METER_MESURING + to_chat(user, "Режим сменён на: [mode].") + +/obj/item/device/multitool/multimeter/ismultimeter() + return TRUE + +/atom/proc/ismultimeter() + return FALSE + +/datum/wires/Topic(href, href_list) + . = ..() + var/list/unsolved_wires = src.wires.Copy() + var/colour_function + var/solved_colour_function + + if(in_range(holder, usr) && isliving(usr)) + + var/mob/living/L = usr + if(CanUse(L) && href_list["action"]) + + var/obj/item/I = L.get_active_hand() + + var/obj/item/offhand_item + if(ishuman(usr)) + var/mob/living/carbon/human/H = usr + offhand_item = H.wearing_rig && H.wearing_rig.selected_module + + if(href_list["pulse"]) + var/colour = href_list["pulse"] + if(isMultimeter(I)) + var/obj/item/device/multitool/multimeter/O = L.get_active_hand() + if(O.mode == METER_MESURING) + if (L.skill_check(SKILL_ELECTRICAL, SKILL_TRAINED)) + to_chat(usr, SPAN_NOTICE("Вы подаёте напряжение на провод...")) + if(!do_after(L, 50, holder)) + return + PulseColour(colour) + to_chat(usr,SPAN_NOTICE("Провод пропульсован.")) + else + to_chat(L, SPAN_NOTICE ("Вы не знаете с каким напряжением работает этот провод.")) + else + if (L.skill_check(SKILL_ELECTRICAL, SKILL_TRAINED)) + if(!do_after(L, 10, holder)) + return + if(!IsColourCut(colour)) + colour_function = unsolved_wires[colour] + solved_colour_function = SolveWireFunction(colour_function) + if(solved_colour_function != "") + to_chat(L, "the [colour] wire connected to [solved_colour_function]") + playsound(O.loc, 'mods/utility_items/sounds/mbeep.ogg', 20, 1) + else + to_chat(L, "the [colour] wire not connected") + else + to_chat(L, "the [colour] wire not connected") + else + to_chat(L, SPAN_NOTICE ("Вы не умеете подключать мультиметр.")) + + if(href_list["examine"]) + if(isMultimeter(I) || isMultimeter(offhand_item)) + var/obj/item/device/multitool/multimeter/O = L.get_active_hand() + if (L.skill_check(SKILL_ELECTRICAL, SKILL_TRAINED)) + if(O.mode == METER_CHECKING) + to_chat(L, SPAN_NOTICE ("Перебираем провода...")) + var/name_by_type = name_by_type() + to_chat(L, "[name_by_type] wires:") + for(var/colour in src.wires) + if(unsolved_wires[colour]) + if(!do_after(L, 10, holder)) + return + if(!IsColourCut(colour)) + colour_function = unsolved_wires[colour] + solved_colour_function = SolveWireFunction(colour_function) + if(solved_colour_function != "") + to_chat(L, "the [colour] wire connected to [solved_colour_function]") + playsound(O.loc, 'mods/utility_items/sounds/mbeep.ogg', 20, 1) + else + to_chat(L, "the [colour] wire not connected") + else + to_chat(L, "the [colour] wire not connected") + else + to_chat(L, SPAN_NOTICE ("Переключите мультиметр в режим прозвонки.")) + else + to_chat(L, SPAN_NOTICE ("Вы не знаете как с этим работать.")) + +/datum/design/item/tool/multimeter + name = "multimeter" + desc = "Используется для измерения потребления электроэнергии оборудования и прозвонки проводов. Рекомендуется докторами." + id = "multimeter" + req_tech = list(TECH_MAGNET = 4, TECH_ENGINEERING = 5, TECH_MATERIAL = 6) + materials = list(DEFAULT_WALL_MATERIAL = 1000, MATERIAL_GLASS = 1000, MATERIAL_SILVER = 500) + build_path = /obj/item/device/multitool/multimeter + sort_string = "VAGAM" + +// Closet unlocking + +/obj/structure/closet + + var/code1[8] + var/code2[8] + var/validate = 0 + var/codelen + +/obj/structure/closet/Initialize(mapload, need_fill) + ..() + update_icon() + if((setup & CLOSET_HAS_LOCK)) + verbs += /obj/structure/closet/proc/togglelock_verb + + codelen = rand(7,10) + codelen = length(code1) + codelen = length(code2) + for(var/i=1 to codelen) + code1[i] = rand(0,9) + code2[i] = rand(0,9) + + return mapload ? INITIALIZE_HINT_LATELOAD : INITIALIZE_HINT_NORMAL + +// Overrides this because otherwise this leads us to unit tests failing +/obj/structure/closet/crate/secure/loot + codelen = 4 + +// Proceeding to do stuff + +/obj/structure/closet/use_tool(obj/item/tool, mob/user, list/click_params) + . = ..() + if(setup & CLOSET_HAS_LOCK) + if(isMultimeter(tool)) + var/obj/item/device/multitool/multimeter/O = tool + if(O.mode != METER_CHECKING) + to_chat(user, SPAN_NOTICE ("Переключите мультиметр.")) + else + if (user.skill_check(SKILL_ELECTRICAL, SKILL_TRAINED)) + src.interact(usr) + else + to_chat(user, SPAN_NOTICE ("Вы не умеете работать с этим замком.")) + +/obj/structure/closet/interact(mob/user) + add_fingerprint(user) + + var/dat = "" + for(var/i = 1 to codelen) + dat += "" + for(var/i = 1 to codelen) + dat += "" + for(var/i = 1 to codelen) + dat += "
+" + dat += "
[code2[i]]" + dat += "
-" + dat += "

Сопоставить код" + + user.set_machine(src) + var/datum/browser/popup = new(user, "closet", "[name]", 90 + codelen * 30, 200) + popup.set_content(dat) + popup.open(1) + +/obj/structure/closet/Topic(href, href_list) + if(!ishuman(usr)) + return + + var/mob/living/carbon/human/user = usr + var/obj/item/device/multitool/multimeter/W = user.get_active_hand() + user.set_machine(src) + + if(href_list["check"]) + if(!W.in_use) + W.in_use = TRUE + else + return + + validate = 0 + + if(W.mode != METER_CHECKING) + to_chat(user, SPAN_NOTICE("Мультиметр не реагирует на подключение.")) + return + + to_chat(usr, SPAN_NOTICE ("Вы начинаете проверять замок...")) + for(var/i = 1 to codelen) + if(do_after(user, 10, src)) + if(code2[i] == code1[i]) + validate++ + to_chat(usr, SPAN_NOTICE ("Ключ подходит.")) + playsound(W.loc, 'mods/utility_items/sounds/mbeep.ogg', 30, 1, frequency = rand(50000, 55000)) + else + to_chat(usr, SPAN_NOTICE ("Ключ не подходит.")) + W.in_use = FALSE + + if(validate < codelen) + return + + locked = !locked + update_icon() + visible_message(SPAN_WARNING ("[user] has [locked ? "locked" : "hacked"] [src]!")) + return + + if(href_list["inc"]) + var/inc = text2num(href_list["inc"]) + code2[inc]++ + if(code2[inc] > 9) + code2[inc] = 0 + interact(user) + + if(href_list["dec"]) + var/inc = text2num(href_list["dec"]) + code2[inc]-- + if(code2[inc] < 0) + code2[inc] = 9 + interact(user) + +#undef METER_MESURING +#undef METER_CHECKING + +#undef isMultimeter diff --git a/mods/utility_items/code/wires.dm b/mods/utility_items/code/wires.dm new file mode 100644 index 0000000000000..d89ce6386eee5 --- /dev/null +++ b/mods/utility_items/code/wires.dm @@ -0,0 +1,255 @@ +// Multitool wires solving function - Just too big + +// Wire solve functions + +/datum/wires/proc/name_by_type() + var/name_by_type + if(istype(src, /datum/wires/airlock)) + name_by_type = "Airlock" + if(istype(src, /datum/wires/apc)) + name_by_type = "APC" + if(istype(src, /datum/wires/robot)) + name_by_type = "Cyborg" + if(istype(src, /datum/wires/fabricator)) + name_by_type = "Autolathe" + if(istype(src, /datum/wires/alarm)) + name_by_type = "Air Alarm" + if(istype(src, /datum/wires/camera)) + name_by_type = "Camera" + if(istype(src, /datum/wires/explosive)) + name_by_type = "C4 Bomb" + if(istype(src, /datum/wires/nuclearbomb)) + name_by_type = "Nuclear Bomb" + if(istype(src, /datum/wires/particle_acc)) + name_by_type = "Particle Accelerator" + if(istype(src, /datum/wires/radio)) + name_by_type = "Radio" + if(istype(src, /datum/wires/vending)) + name_by_type = "Vending Machine" + return name_by_type + +/datum/wires/proc/SolveWires() + var/list/unsolved_wires = src.wires.Copy() + var/colour_function + var/solved_colour_function + + var/name_by_type = name_by_type() + + var/solved_txt = "[name_by_type] wires:
" + + for(var/colour in src.wires) + if(unsolved_wires[colour]) //unsolved_wires[red] + colour_function = unsolved_wires[colour] //unsolved_wires[red] = 1 so colour_index = 1 + solved_colour_function = SolveWireFunction(colour_function) //unsolved_wires[red] = 1, 1 = AIRLOCK_WIRE_IDSCAN + solved_txt += "the [colour] wire connected to [solved_colour_function]
" //the red wire is the ID wire + + solved_txt += "
" + + return solved_txt + +/datum/wires/proc/SolveWireFunction(WireFunction) + return WireFunction //Default returns the original number, so it still "works" + +/datum/wires/airlock/SolveWireFunction(function) + var/sf = "" + var/obj/machinery/door/airlock/AIRL = holder + switch(function) + if(AIRLOCK_WIRE_IDSCAN) + sf = "Port A" + if(AIRLOCK_WIRE_MAIN_POWER1) + sf = "Port B" + if(AIRLOCK_WIRE_MAIN_POWER2) + sf = "Port C" + if(AIRLOCK_WIRE_DOOR_BOLTS) + sf = "Port D" + if(AIRLOCK_WIRE_BACKUP_POWER1) + sf = "Port E" + if(AIRLOCK_WIRE_BACKUP_POWER2) + sf = "Port F" + if(AIRLOCK_WIRE_OPEN_DOOR) + sf = "Port G" + if(AIRLOCK_WIRE_AI_CONTROL) + sf = "Port H (NTNet ID = [AIRL.NTNet_id])" + if(AIRLOCK_WIRE_ELECTRIFY) + sf = "Port I" + if(AIRLOCK_WIRE_SAFETY) + sf = "Port J" + if(AIRLOCK_WIRE_SPEED) + sf = "Port K" + if(AIRLOCK_WIRE_LIGHT) + sf = "Port L" + + return sf + +/datum/wires/alarm/SolveWireFunction(function) + var/sf = "" + switch(function) + if(AALARM_WIRE_IDSCAN) + sf = "Port A" + if(AALARM_WIRE_POWER) + sf = "Port B" + if(AALARM_WIRE_SYPHON) + sf = "Port C" + if(AALARM_WIRE_AI_CONTROL) + sf = "Port D" + if(AALARM_WIRE_AALARM) + sf = "Port E" + + return sf + +/datum/wires/apc/SolveWireFunction(function) + var/sf = "" + switch(function) + if(APC_WIRE_IDSCAN) + sf = "Port A" + if(APC_WIRE_MAIN_POWER1) + sf = "Port B" + if(APC_WIRE_MAIN_POWER2) + sf = "Port C" + if(APC_WIRE_AI_CONTROL) + sf = "Port D" + + return sf + +/datum/wires/camera/SolveWireFunction(function) + var/sf = "" + switch(function) + if(CAMERA_WIRE_FOCUS) + sf = "Port A" + if(CAMERA_WIRE_POWER) + sf = "Port B" + if(CAMERA_WIRE_LIGHT) + sf = "Port C" + if(CAMERA_WIRE_ALARM) + sf = "Port D" + if(CAMERA_WIRE_NOTHING1) + sf = "Port E" + if(CAMERA_WIRE_NOTHING2) + sf = "Port F" + + return sf + +/datum/wires/explosive/SolveWireFunction(function) + var/sf = "" + switch(function) + if(WIRE_EXPLODE) + sf = "explosive" + + return sf + +/datum/wires/nuclearbomb/SolveWireFunction(function) + var/sf = "" + switch(function) + if(NUCLEARBOMB_WIRE_LIGHT) + sf = "Port A" + if(NUCLEARBOMB_WIRE_TIMING) + sf = "Port B" + if(NUCLEARBOMB_WIRE_SAFETY) + sf = "Port C" + return sf + +/datum/wires/particle_acc/SolveWireFunction(function) + var/sf = "" + switch(function) + if(PARTICLE_TOGGLE_WIRE) + sf = "Port A" + if(PARTICLE_STRENGTH_WIRE) + sf = "Port B" + if(PARTICLE_INTERFACE_WIRE) + sf = "Port C" + if(PARTICLE_LIMIT_POWER_WIRE) + sf = "Port D" + + return sf + +/datum/wires/radio/SolveWireFunction(function) + var/sf = "" + switch(function) + if(WIRE_SIGNAL) + sf = "Port A" + if(WIRE_RECEIVE) + sf = "Port B" + if(WIRE_TRANSMIT) + sf = "Port C" + + return sf + +/datum/wires/robot/SolveWireFunction(function) + var/sf = "" + switch(function) + if(BORG_WIRE_LAWCHECK) + sf = "Port A" + if(BORG_WIRE_MAIN_POWER) + sf = "Port B" + if(BORG_WIRE_LOCKED_DOWN) + sf = "Port C" + if(BORG_WIRE_AI_CONTROL) + sf = "Port D" + + return sf + +/datum/wires/shield_generator/SolveWireFunction(function) + var/sf = "" + switch(function) + if(SHIELDGEN_WIRE_POWER) + sf = "Port A" + if(SHIELDGEN_WIRE_HACK) + sf = "Port B" + if(SHIELDGEN_WIRE_CONTROL) + sf = "Port C" + if(SHIELDGEN_WIRE_AICONTROL) + sf = "Port D" + if(SHIELDGEN_WIRE_NOTHING) + sf = "Port E" + return sf + +/datum/wires/smartfridge/SolveWireFunction(function) + var/sf = "" + switch(function) + if(SMARTFRIDGE_WIRE_ELECTRIFY) + sf = "Port A" + if(SMARTFRIDGE_WIRE_THROW) + sf = "Port B" + if(SMARTFRIDGE_WIRE_IDSCAN) + sf = "Port C" + return sf + +/datum/wires/smes/SolveWireFunction(function) + var/sf = "" + switch(function) + if(SMES_WIRE_RCON) + sf = "Port A" + if(SMES_WIRE_INPUT) + sf = "Port B" + if(SMES_WIRE_OUTPUT) + sf = "Port C" + if(SMES_WIRE_GROUNDING) + sf = "Port D" + if(SMES_WIRE_FAILSAFES) + sf = "Port E" + return sf + +/datum/wires/suit_storage_unit/SolveWireFunction(function) + var/sf = "" + switch(function) + if(SUIT_STORAGE_WIRE_ELECTRIFY) + sf = "Port A" + if(SUIT_STORAGE_WIRE_SAFETY) + sf = "Port B" + if(SUIT_STORAGE_WIRE_LOCKED) + sf = "Port C" + return sf + +/datum/wires/vending/SolveWireFunction(function) + var/sf = "" + switch(function) + if(WIRE_THROW_PRODUCTS) + sf = "A" + if(WIRE_SHOW_CONTRABAND) + sf = "B" + if(WIRE_SHOCK_USERS) + sf = "C" + if(WIRE_SCAN_ID) + sf = "D" + + return sf diff --git a/mods/utility_items/icons/multimeter.dmi b/mods/utility_items/icons/multimeter.dmi new file mode 100644 index 0000000000000000000000000000000000000000..14079cbd799a1856fd1bfa84a134add90040dfcc GIT binary patch literal 378 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 literal 0 HcmV?d00001 diff --git a/packs/infinity/_pack.dm b/packs/infinity/_pack.dm index 33e06c8ca8e8e..db292e4dff234 100644 --- a/packs/infinity/_pack.dm +++ b/packs/infinity/_pack.dm @@ -36,9 +36,6 @@ #include "items\chairs.dm" #include "items\chemistry.dm" #include "items\grown.dm" -#include "items\multimeter.dm" -#include "items\powertools.dm" -#include "items\toys.dm" // Guns #include "items\projectile\ammunition\boxes.dm" diff --git a/packs/infinity/icons/obj/items.dmi b/packs/infinity/icons/obj/items.dmi index 3d7cc108faef4c83aa5a957a7a277ac037c2d0b6..81b20a79463a0e205e198d96d09014f533de1b36 100644 GIT binary patch literal 23900 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 Q*L3K{^*dSx8kV8|1u{STj{pDw literal 24259 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⋓A5egJ+zM; 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 diff --git a/packs/infinity/items/multimeter.dm b/packs/infinity/items/multimeter.dm deleted file mode 100644 index 5b49a150eb1db..0000000000000 --- a/packs/infinity/items/multimeter.dm +++ /dev/null @@ -1,80 +0,0 @@ -#if FALSE - -// SIERRA TODO: multimeter - -#define METER_MESURING "Measuring" -#define METER_CHECKING "Checking" - -#define isMultimeter(A) (A && A.ismultimeter()) - -/obj/item/device/multitool/multimeter - name = "multimeter" - desc = "Используется для измерения потребления электроэнергии оборудования и прозвонки проводов. Рекомендуется докторами." - icon = 'infinity/icons/obj/items.dmi' - icon_state = "multimeter" - origin_tech = list(TECH_MAGNET = 4, TECH_ENGINEERING = 4) - slot_flags = SLOT_BELT - var/mode = METER_MESURING // Mode - -/obj/item/device/multitool/multimeter/attack_self(mob/user) - switch(mode) - if(METER_MESURING) - mode = METER_CHECKING - if(METER_CHECKING) - mode = METER_MESURING - to_chat(user, "Режим сменён на: [mode].") - -/obj/item/device/multitool/multimeter/ismultimeter() - return TRUE - - - -/datum/wires/Topic(href, href_list) - . = ..() - var/list/unsolved_wires = src.wires.Copy() - var/colour_function - var/solved_colour_function - - if(in_range(holder, usr) && isliving(usr)) - - var/mob/living/L = usr - if(CanUse(L) && href_list["action"]) - - var/obj/item/I = L.get_active_hand() - - var/obj/item/offhand_item - if(ishuman(usr)) - var/mob/living/carbon/human/H = usr - offhand_item = H.wearing_rig && H.wearing_rig.selected_module - - if(href_list["check"]) - if(isMultimeter(I) || isMultimeter(offhand_item)) - var/obj/item/device/multitool/multimeter/O = L.get_active_hand() - if (L.skill_check(SKILL_ELECTRICAL, SKILL_BASIC)) - if(O.mode == METER_CHECKING) - to_chat(L, "Перебираем провода...") - var/name_by_type = name_by_type() - to_chat(L, "[name_by_type] wires:") - for(var/colour in src.wires) - if(unsolved_wires[colour]) - if(!do_after(L, 10, holder)) - return - if(!IsColourCut(colour)) - colour_function = unsolved_wires[colour] - solved_colour_function = SolveWireFunction(colour_function) - if(solved_colour_function != "") - to_chat(L, "the [colour] wire connected to [solved_colour_function]") - playsound(O.loc, 'infinity/sound/machines/mbeep.ogg', 20, 1) - else - to_chat(L, "the [colour] wire not connected") - else - to_chat(L, "the [colour] wire not connected") - //to_chat(L, "[all_solved_wires[holder_type]]") - else - to_chat(L, "Переключите мультиметр в режим прозвонки.") - else - to_chat(L, "Вы не знаете как с этим работать.") - else - to_chat(L, "Вам нужен мультиметр.") - -#endif diff --git a/packs/infinity/items/powertools.dm b/packs/infinity/items/powertools.dm deleted file mode 100644 index 2db33515e8bb7..0000000000000 --- a/packs/infinity/items/powertools.dm +++ /dev/null @@ -1,138 +0,0 @@ -// SIERRA TODO: usesound с Paradise (или подобные) - -// -// DRILL -// - -/obj/item/wrench/power - name = "hand drill" - desc = "A simple powered hand drill. It's fitted with a bolt bit." - icon = 'packs/infinity/icons/obj/items.dmi' - icon_state = "drill_bolt" - item_state = "drill" - obj_flags = OBJ_FLAG_CONDUCTIBLE - slot_flags = SLOT_BELT - force = 8.0 - throwforce = 8.0 - throw_speed = 2 - throw_range = 3 - w_class = ITEM_SIZE_NORMAL - origin_tech = list(TECH_MATERIAL = 2, TECH_ENGINEERING = 3) - matter = list(DEFAULT_WALL_MATERIAL = 5000, "silver" = 2000) - center_of_mass = "x=17;y=16" - attack_verb = list("drilled", "screwed", "jabbed") - -/obj/item/wrench/power/attack_self(mob/user) - playsound(get_turf(user), 'packs/infinity/sound/items/change_drill.ogg', 50, 1) - - var/obj/item/screwdriver/power/s_drill = new /obj/item/screwdriver/power - - to_chat(user, "You attach the screw driver bit to [src].") - qdel(src) - - user.put_in_active_hand(s_drill) - -/obj/item/wrench/power/Initialize() - . = ..() - icon_state = "drill_bolt" - color = "#ffffff" - - -/obj/item/screwdriver/power - name = "hand drill" - desc = "A simple powered hand drill. It's fitted with a screw bit." - icon = 'packs/infinity/icons/obj/items.dmi' - icon_state = "drill_screw" - item_state = "drill" - obj_flags = OBJ_FLAG_CONDUCTIBLE - slot_flags = SLOT_BELT - force = 8 - throwforce = 8 - throw_speed = 2 - throw_range = 3 - w_class = ITEM_SIZE_NORMAL - origin_tech = list(TECH_MATERIAL = 2, TECH_ENGINEERING = 3) - matter = list(DEFAULT_WALL_MATERIAL = 5000, "silver" = 2000) - center_of_mass = "x=16;y=7" - attack_verb = list("drilled", "screwed", "jabbed","whacked") - hitsound = 'packs/infinity/sound/items/drill_hit.ogg' - -/obj/item/screwdriver/power/attack_self(mob/user) - playsound(get_turf(user), 'packs/infinity/sound/items/change_drill.ogg', 50, 1) - var/obj/item/wrench/power/b_drill = new /obj/item/wrench/power - to_chat(user, "You attach the bolt driver bit to [src].") - qdel(src) - user.put_in_active_hand(b_drill) - -/obj/item/screwdriver/power/Initialize() - . = ..() - icon_state = "drill_screw" - color = "#ffffff" - - -// -// JAWS OF LIFE -// - -/obj/item/wirecutters/power - name = "jaws of life" - desc = "A set of jaws of life, compressed through the magic of science. It's fitted with a cutting head." - icon = 'packs/infinity/icons/obj/items.dmi' - icon_state = "jaws_cutter" - item_state = "jawsoflife" - obj_flags = OBJ_FLAG_CONDUCTIBLE - slot_flags = SLOT_BELT - force = 15.0 - throwforce = 10.0 - throw_speed = 2.0 - throw_range = 2.0 - w_class = ITEM_SIZE_NORMAL - origin_tech = list(TECH_MATERIAL = 2, TECH_ENGINEERING = 3) - matter = list(DEFAULT_WALL_MATERIAL = 5000, "silver" = 2000) - center_of_mass = "x=18;y=10" - attack_verb = list("pinched", "nipped") - sharp = 1 - edge = 1 - -/obj/item/wirecutters/power/attack_self(mob/user) - playsound(get_turf(user), 'packs/infinity/sound/items/change_jaws.ogg', 50, 1) - var/obj/item/crowbar/power/pryjaws = new /obj/item/crowbar/power - to_chat(user, "You attach the pry jaws to [src].") - qdel(src) - user.put_in_active_hand(pryjaws) - -/obj/item/wirecutters/power/Initialize() - . = ..() - icon_state = "jaws_cutter" - color = "#ffffff" - - -/obj/item/crowbar/power - name = "jaws of life" - desc = "A set of jaws of life, compressed through the magic of science. It's fitted with a prying head." - icon = 'packs/infinity/icons/obj/items.dmi' - icon_state = "jaws_pry" - item_state = "jawsoflife" - obj_flags = OBJ_FLAG_CONDUCTIBLE - slot_flags = SLOT_BELT - force = 15.0 - throwforce = 10.0 - throw_speed = 2.0 - throw_range = 2.0 - w_class = ITEM_SIZE_NORMAL - origin_tech = list(TECH_MATERIAL = 2, TECH_ENGINEERING = 3) - matter = list(DEFAULT_WALL_MATERIAL = 5000, "silver" = 2000) - center_of_mass = "x=18;y=10" - attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked") - -/obj/item/crowbar/power/attack_self(mob/user) - playsound(get_turf(user), 'packs/infinity/sound/items/change_jaws.ogg', 50, 1) - var/obj/item/wirecutters/power/cutjaws = new /obj/item/wirecutters/power - to_chat(user, "You attach the cutting jaws to [src].") - qdel(src) - user.put_in_active_hand(cutjaws) - -/obj/item/crowbar/power/Initialize() - . = ..() - icon_state = "jaws_pry" - color = "#ffffff" diff --git a/packs/infinity/items/toys.dm b/packs/infinity/items/toys.dm deleted file mode 100644 index 1761836d798c6..0000000000000 --- a/packs/infinity/items/toys.dm +++ /dev/null @@ -1,5 +0,0 @@ -/obj/item/toy/sierramodel - name = "table-top NSV Sierra model" - desc = "This is a replica of the NSV Sierra, in 1:250th scale, on a handsome wooden stand. Small lights blink on the hull and at the engine exhaust." - icon = 'packs/infinity/icons/obj/toy.dmi' - icon_state = "sierra_model_figure" From 2526029de40c9cea462eefba432a4abab3494d2a Mon Sep 17 00:00:00 2001 From: Sierra Helper <125094432+SierraHelper@users.noreply.github.com> Date: Mon, 5 Feb 2024 19:12:28 +0300 Subject: [PATCH 37/45] =?UTF-8?q?=D0=A7=D0=B5=D0=B9=D0=BD=D0=B4=D0=B6?= =?UTF-8?q?=D0=BB=D0=BE=D0=B3=20=D0=B4=D0=BB=D1=8F=20PR=20#1847=20[ci=20sk?= =?UTF-8?q?ip]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html/changelogs/AutoChangeLog-sierra-pr-1847.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-sierra-pr-1847.yml diff --git a/html/changelogs/AutoChangeLog-sierra-pr-1847.yml b/html/changelogs/AutoChangeLog-sierra-pr-1847.yml new file mode 100644 index 0000000000000..247925ce7b53e --- /dev/null +++ b/html/changelogs/AutoChangeLog-sierra-pr-1847.yml @@ -0,0 +1,10 @@ +author: LordNest +changes: + - {tweak: Увеличил скорость пулям} + - {soundadd: Добавил новый звук} + - {rscadd: Добавил силген. Занерфил его насколько смог.} + - {rscadd: Добавил мультиметр. Занерфил его насколько смог.} + - {imageadd: Добавил новую иконку переноски силгена от которой Вольфора хватил припадок} + - {maptweak: 'Добавил силген и мультиметр на карту. Удалил окно между РД и СМО опять. + Канджи, только попробуй.'} +delete-after: true From a9f9ebb4d846fac2d87f9da21d8706ef8c625d66 Mon Sep 17 00:00:00 2001 From: Sierra Helper <125094432+SierraHelper@users.noreply.github.com> Date: Tue, 6 Feb 2024 01:16:48 +0000 Subject: [PATCH 38/45] =?UTF-8?q?=D0=90=D0=B2=D1=82=D0=BE=D0=BC=D0=B0?= =?UTF-8?q?=D1=82=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=B0=D1=8F=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BC=D0=BF=D0=B8=D0=BB=D1=8F=D1=86=D0=B8=D1=8F=20=D1=87=D0=B5?= =?UTF-8?q?=D0=B9=D0=BD=D0=B4=D0=B6=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=20[ci=20?= =?UTF-8?q?skip]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html/changelog.html | 44 +++++-------------- html/changelogs/.all_changelog.yml | 27 ++++++++++++ .../AutoChangeLog-sierra-pr-1847.yml | 10 ----- 3 files changed, 38 insertions(+), 43 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-sierra-pr-1847.yml diff --git a/html/changelog.html b/html/changelog.html index 473f0d4df39ba..46f2b81770748 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -28,6 +28,17 @@

Sierra SS13

-->
+

06.02 - 2024

+

Обновления LordNest:

+
+
Увеличил скорость пулям
+
Добавил новый звук
+
Добавил силген. Занерфил его насколько смог.
+
Добавил мультиметр. Занерфил его насколько смог.
+
Добавил новую иконку переноски силгена от которой Вольфора хватил припадок
+
Добавил силген и мультиметр на карту. Удалил окно между РД и СМО опять. Канджи, только попробуй.
+
+

03.02 - 2024

Обновления Nyvrem:

@@ -476,39 +487,6 @@

Обновления Sbotkin:

Cobby's gender has been discovered, it's a boy!
- -

05.12 - 2023

-

Обновления BurpleBineapple:

-
-
Added toggleable NRC notifications for join, leave, and message events.
-
The NRC program is 2GQ and installed on PDAs by default.
-
Held computers can connect to NRC channels properly.
-
-

Обновления Lexanx:

-
-
IPC parts are colorable by using markings.
-
IPCs have some head accessories as hair.
-
IPCs using heads with screens can display text on the screen.
-
-

Обновления Mucker:

-
-
Re-added borg all access.
-
Removed e-guns from traitor borgs.
-
Slightly lowered the regen rate of flamer fuel for traitor borgs.
-
-

Обновления Rockton:

-
-
New placeholder sprite for the SFV Lexington overmap icon
-
-

Обновления Sbotkin:

-
-
The canister storage now can be accessed by scientists via the Petrov's maints.
-
Scientists now have access to Chlorine!
-
-

Обновления gy1ta23:

-
-
Torch pilot helmets are a selection box instead of all pre-spawned.
-
diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index f7933ac5b3f9b..78ea9f42e41c3 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -23134,3 +23134,30 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY sierra_genchangelog.p Sbotkin: - bugfix: Fleet medical fatigues no longer spawn with an armband. - bugfix: The end-of-round vote now correctly displays extend time. +2024-02-06: + LordNest: + - tweak: "\u0423\u0432\u0435\u043B\u0438\u0447\u0438\u043B \u0441\u043A\u043E\u0440\ + \u043E\u0441\u0442\u044C \u043F\u0443\u043B\u044F\u043C" + - soundadd: "\u0414\u043E\u0431\u0430\u0432\u0438\u043B \u043D\u043E\u0432\u044B\ + \u0439 \u0437\u0432\u0443\u043A" + - rscadd: "\u0414\u043E\u0431\u0430\u0432\u0438\u043B \u0441\u0438\u043B\u0433\u0435\ + \u043D. \u0417\u0430\u043D\u0435\u0440\u0444\u0438\u043B \u0435\u0433\u043E\ + \ \u043D\u0430\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u0441\u043C\u043E\u0433\ + ." + - rscadd: "\u0414\u043E\u0431\u0430\u0432\u0438\u043B \u043C\u0443\u043B\u044C\u0442\ + \u0438\u043C\u0435\u0442\u0440. \u0417\u0430\u043D\u0435\u0440\u0444\u0438\u043B\ + \ \u0435\u0433\u043E \u043D\u0430\u0441\u043A\u043E\u043B\u044C\u043A\u043E\ + \ \u0441\u043C\u043E\u0433." + - imageadd: "\u0414\u043E\u0431\u0430\u0432\u0438\u043B \u043D\u043E\u0432\u0443\ + \u044E \u0438\u043A\u043E\u043D\u043A\u0443 \u043F\u0435\u0440\u0435\u043D\u043E\ + \u0441\u043A\u0438 \u0441\u0438\u043B\u0433\u0435\u043D\u0430 \u043E\u0442 \u043A\ + \u043E\u0442\u043E\u0440\u043E\u0439 \u0412\u043E\u043B\u044C\u0444\u043E\u0440\ + \u0430 \u0445\u0432\u0430\u0442\u0438\u043B \u043F\u0440\u0438\u043F\u0430\u0434\ + \u043E\u043A" + - maptweak: "\u0414\u043E\u0431\u0430\u0432\u0438\u043B \u0441\u0438\u043B\u0433\ + \u0435\u043D \u0438 \u043C\u0443\u043B\u044C\u0442\u0438\u043C\u0435\u0442\u0440\ + \ \u043D\u0430 \u043A\u0430\u0440\u0442\u0443. \u0423\u0434\u0430\u043B\u0438\ + \u043B \u043E\u043A\u043D\u043E \u043C\u0435\u0436\u0434\u0443 \u0420\u0414\ + \ \u0438 \u0421\u041C\u041E \u043E\u043F\u044F\u0442\u044C. \u041A\u0430\u043D\ + \u0434\u0436\u0438, \u0442\u043E\u043B\u044C\u043A\u043E \u043F\u043E\u043F\u0440\ + \u043E\u0431\u0443\u0439." diff --git a/html/changelogs/AutoChangeLog-sierra-pr-1847.yml b/html/changelogs/AutoChangeLog-sierra-pr-1847.yml deleted file mode 100644 index 247925ce7b53e..0000000000000 --- a/html/changelogs/AutoChangeLog-sierra-pr-1847.yml +++ /dev/null @@ -1,10 +0,0 @@ -author: LordNest -changes: - - {tweak: Увеличил скорость пулям} - - {soundadd: Добавил новый звук} - - {rscadd: Добавил силген. Занерфил его насколько смог.} - - {rscadd: Добавил мультиметр. Занерфил его насколько смог.} - - {imageadd: Добавил новую иконку переноски силгена от которой Вольфора хватил припадок} - - {maptweak: 'Добавил силген и мультиметр на карту. Удалил окно между РД и СМО опять. - Канджи, только попробуй.'} -delete-after: true From 5adf40c1b441aa51f9921b3f4dd8d6443961f247 Mon Sep 17 00:00:00 2001 From: LordNest <77477080+LordNest@users.noreply.github.com> Date: Tue, 6 Feb 2024 23:25:28 +0300 Subject: [PATCH 39/45] [MIRROR] FIX: Humans can choke now --- code/modules/emotes/definitions/_mob.dm | 1 + code/modules/emotes/emote_mob.dm | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/code/modules/emotes/definitions/_mob.dm b/code/modules/emotes/definitions/_mob.dm index cc05715403de7..dbc141c932cc4 100644 --- a/code/modules/emotes/definitions/_mob.dm +++ b/code/modules/emotes/definitions/_mob.dm @@ -135,6 +135,7 @@ /singleton/emote/visible/shrug, /singleton/emote/visible/smile, /singleton/emote/visible/pale, + /singleton/emote/audible/choke, /singleton/emote/visible/tremble, /singleton/emote/visible/wink, /singleton/emote/visible/hug, diff --git a/code/modules/emotes/emote_mob.dm b/code/modules/emotes/emote_mob.dm index 2e45a8a25fd88..c0c567858a3cc 100644 --- a/code/modules/emotes/emote_mob.dm +++ b/code/modules/emotes/emote_mob.dm @@ -44,7 +44,8 @@ var/singleton/emote/use_emote = usable_emotes[act] if(!use_emote) - to_chat(src, SPAN_WARNING("Unknown emote '[act]'. Type say *help for a list of usable emotes.")) + var/emote_prefix = get_prefix_key(/singleton/prefix/custom_emote) + to_chat(src, SPAN_WARNING("Unknown emote '[act]'. Type say [emote_prefix]help for a list of usable emotes.")) return if(m_type != use_emote.message_type && use_emote.conscious && stat != CONSCIOUS) From d1af069f74d553a91d3846954dce9e929cc7f1cc Mon Sep 17 00:00:00 2001 From: emmanuelbassil <6874235+emmanuelbassil@users.noreply.github.com> Date: Tue, 6 Feb 2024 23:25:34 +0300 Subject: [PATCH 40/45] [MIRROR] Closets/Crates are now puncheable --- code/game/antagonist/outsider/vox.dm | 2 -- .../machinery/_machines_base/machinery.dm | 2 +- code/game/objects/objs.dm | 4 ++- code/game/objects/structures.dm | 13 ++++++++-- .../crates_lockers/closets/__closet.dm | 25 ++++++++++--------- .../closets/secure/_secure_closets.dm | 1 + .../structures/crates_lockers/crates.dm | 2 ++ .../structures/crates_lockers/largecrate.dm | 14 ++++++++--- 8 files changed, 41 insertions(+), 22 deletions(-) diff --git a/code/game/antagonist/outsider/vox.dm b/code/game/antagonist/outsider/vox.dm index cf9c014f9e1ea..f68a82056f101 100644 --- a/code/game/antagonist/outsider/vox.dm +++ b/code/game/antagonist/outsider/vox.dm @@ -93,7 +93,6 @@ GLOBAL_LIST_EMPTY(vox_artifact_spawners) desc = "A pulsating mass of flesh and steel." icon = 'maps/antag_spawn/vox/vox.dmi' icon_state = "printer" - breakable = FALSE anchored = TRUE density = TRUE var/favors = 0 @@ -269,7 +268,6 @@ GLOBAL_LIST_EMPTY(vox_artifact_spawners) desc = "An old, dusty machine meant to analyze various bluespace anomalies and send research data directly to SCGEC Observatory." icon = 'icons/obj/machines/research/xenoarcheology_scanner.dmi' icon_state = "scanner" - breakable = FALSE anchored = FALSE density = TRUE var/points = 0 diff --git a/code/game/machinery/_machines_base/machinery.dm b/code/game/machinery/_machines_base/machinery.dm index 372bc39ded8af..82845ae4cfc6b 100644 --- a/code/game/machinery/_machines_base/machinery.dm +++ b/code/game/machinery/_machines_base/machinery.dm @@ -236,7 +236,7 @@ // If you don't call parent in this proc, you must make all appropriate checks yourself. // If you do, you must respect the return value. /obj/machinery/attack_hand(mob/user) - if((. = ..())) // Buckling, climbers, punching on harm; unlikely to return true. + if((. = ..())) // Buckling, climbers; unlikely to return true unless on harm intent and damage is dealt. return if(!CanPhysicallyInteract(user)) return FALSE // The interactions below all assume physical access to the machine. If this is not the case, we let the machine take further action. diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index a0cae74b6899a..2d2b403ef91e6 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -242,6 +242,9 @@ /obj/attack_hand(mob/living/user) + . = ..() + if (.) + return if (Adjacent(user)) add_fingerprint(user) @@ -276,7 +279,6 @@ ) damage_health(damage, attack.get_damage_type(), attack.damage_flags()) return TRUE - ..() /obj/is_fluid_pushable(amt) return ..() && w_class <= round(amt/20) diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index 4d5dec82835d9..0873dd7182ccb 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -3,7 +3,7 @@ w_class = ITEM_SIZE_NO_CONTAINER layer = STRUCTURE_LAYER - var/breakable + var/fragile var/parts var/list/connections = list("0", "0", "0", "0") var/list/other_connections = list("0", "0", "0", "0") @@ -16,7 +16,7 @@ /obj/structure/damage_health(damage, damage_type, damage_flags, severity, skip_can_damage_check) if (damage && HAS_FLAGS(damage_flags, DAMAGE_FLAG_TURF_BREAKER)) - if (breakable) + if (fragile) return kill_health() damage = max(damage, 10) ..() @@ -117,6 +117,15 @@ return ..() +/obj/structure/proc/dump_contents() + for(var/mob/M in src) + M.dropInto(loc) + if(M.client) + M.client.eye = M.client.mob + M.client.perspective = MOB_PERSPECTIVE + + for(var/atom/movable/AM in src) + AM.dropInto(loc) /obj/structure/proc/can_visually_connect() return anchored diff --git a/code/game/objects/structures/crates_lockers/closets/__closet.dm b/code/game/objects/structures/crates_lockers/closets/__closet.dm index 687bfcbe66340..c89398ebfe9ec 100644 --- a/code/game/objects/structures/crates_lockers/closets/__closet.dm +++ b/code/game/objects/structures/crates_lockers/closets/__closet.dm @@ -6,6 +6,7 @@ density = TRUE w_class = ITEM_SIZE_NO_CONTAINER health_max = 100 + health_min_damage = 3 var/welded = 0 var/large = 1 @@ -71,6 +72,14 @@ else to_chat(user, "It is full.") +/obj/structure/closet/damage_health(damage, damage_type, damage_flags, severity, skip_can_damage_check) + . = ..() + if (!length(contents)) + return + var/content_damage = damage / length(contents) + for (var/atom/victim as anything in contents) + victim.damage_health(content_damage, damage_type, damage_flags, severity, skip_can_damage_check) + /obj/structure/closet/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) if(air_group || (height==0 || wall_mounted)) return 1 return (!density) @@ -92,16 +101,6 @@ return FALSE return TRUE -/obj/structure/closet/proc/dump_contents() - for(var/mob/M in src) - M.dropInto(loc) - if(M.client) - M.client.eye = M.client.mob - M.client.perspective = MOB_PERSPECTIVE - - for(var/atom/movable/AM in src) - AM.dropInto(loc) - /obj/structure/closet/proc/store_contents() var/stored_units = 0 @@ -402,8 +401,10 @@ to_chat(user, SPAN_NOTICE("It won't budge!")) /obj/structure/closet/attack_hand(mob/user as mob) - src.add_fingerprint(user) - src.toggle(user) + if (user.a_intent == I_HURT) + return ..() + add_fingerprint(user) + toggle(user) /obj/structure/closet/attack_ghost(mob/ghost) if(ghost.client && ghost.client.inquisitive_ghost) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/_secure_closets.dm b/code/game/objects/structures/crates_lockers/closets/secure/_secure_closets.dm index 46660b3f8e5d8..07b4d7993a191 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/_secure_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/_secure_closets.dm @@ -6,6 +6,7 @@ setup = CLOSET_HAS_LOCK | CLOSET_CAN_BE_WELDED locked = TRUE health_max = 200 + health_min_damage = 5 /obj/structure/closet/secure_closet/slice_into_parts(obj/item/weldingtool/WT, mob/user) to_chat(user, SPAN_NOTICE("\The [src] is too strong to be taken apart.")) diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index f0c1f2078a5ba..58d2681264ac7 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -90,6 +90,8 @@ closet_appearance = /singleton/closet_appearance/crate/secure setup = CLOSET_HAS_LOCK locked = TRUE + health_max = 200 + health_min_damage = 5 /obj/structure/closet/crate/secure/Initialize() . = ..() diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm index 801ffce12f025..b428c5b716720 100644 --- a/code/game/objects/structures/crates_lockers/largecrate.dm +++ b/code/game/objects/structures/crates_lockers/largecrate.dm @@ -5,6 +5,8 @@ icon_state = "densecrate" density = TRUE atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE + health_max = 100 + health_min_damage = 4 /obj/structure/largecrate/Initialize() . = ..() @@ -14,17 +16,16 @@ I.forceMove(src) /obj/structure/largecrate/attack_hand(mob/user as mob) + if (user.a_intent == I_HURT) + return ..() to_chat(user, SPAN_NOTICE("You need a crowbar to pry this open!")) - return - /obj/structure/largecrate/use_tool(obj/item/tool, mob/user, list/click_params) // Crowbar - Open crate if (isCrowbar(tool)) var/obj/item/stack/material/wood/A = new(loc) transfer_fingerprints_to(A) - for (var/atom/movable/item as anything in contents) - item.dropInto(loc) + dump_contents() user.visible_message( SPAN_NOTICE("\The [user] pries \the [src] open with \a [tool]."), SPAN_NOTICE("You pry \the [src] open with \the [tool]."), @@ -35,6 +36,11 @@ return ..() +/obj/structure/largecrate/on_death() + var/obj/item/stack/material/wood/A = new(loc) + transfer_fingerprints_to(A) + dump_contents() + qdel_self() /obj/structure/largecrate/mule name = "MULE crate" From 3477fdf845b58662317e2c57889bd769b1a75bb3 Mon Sep 17 00:00:00 2001 From: Sierra Helper <125094432+SierraHelper@users.noreply.github.com> Date: Wed, 7 Feb 2024 00:12:19 +0300 Subject: [PATCH 41/45] =?UTF-8?q?=D0=A7=D0=B5=D0=B9=D0=BD=D0=B4=D0=B6?= =?UTF-8?q?=D0=BB=D0=BE=D0=B3=20=D0=B4=D0=BB=D1=8F=20PR=20#1861=20[ci=20sk?= =?UTF-8?q?ip]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html/changelogs/AutoChangeLog-sierra-pr-1861.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-sierra-pr-1861.yml diff --git a/html/changelogs/AutoChangeLog-sierra-pr-1861.yml b/html/changelogs/AutoChangeLog-sierra-pr-1861.yml new file mode 100644 index 0000000000000..ce1af39fd8efc --- /dev/null +++ b/html/changelogs/AutoChangeLog-sierra-pr-1861.yml @@ -0,0 +1,4 @@ +author: LordNest +changes: + - {bugfix: Humans can choke (use emote) now properly.} +delete-after: true From c7ca57358565085304e5b43e3fa4fa2344cfd26c Mon Sep 17 00:00:00 2001 From: Sierra Helper <125094432+SierraHelper@users.noreply.github.com> Date: Wed, 7 Feb 2024 00:12:33 +0300 Subject: [PATCH 42/45] =?UTF-8?q?=D0=A7=D0=B5=D0=B9=D0=BD=D0=B4=D0=B6?= =?UTF-8?q?=D0=BB=D0=BE=D0=B3=20=D0=B4=D0=BB=D1=8F=20PR=20#1862=20[ci=20sk?= =?UTF-8?q?ip]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html/changelogs/AutoChangeLog-sierra-pr-1862.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-sierra-pr-1862.yml diff --git a/html/changelogs/AutoChangeLog-sierra-pr-1862.yml b/html/changelogs/AutoChangeLog-sierra-pr-1862.yml new file mode 100644 index 0000000000000..3d333bcf7b99e --- /dev/null +++ b/html/changelogs/AutoChangeLog-sierra-pr-1862.yml @@ -0,0 +1,7 @@ +author: emmanuelbassil +changes: + - {tweak: 'As part of the damage standardization, can now damage closets/crates + with melee attacks.'} + - {tweak: Damaging a closet also relays some damage to whatever's inside.} + - {tweak: Secure closets/crates are tougher than regular closets/crates.} +delete-after: true From 8c05027c7ed986dc5e6ec3d36edff6b58ad23fed Mon Sep 17 00:00:00 2001 From: Spookerton <918997+Spookerton@users.noreply.github.com> Date: Tue, 6 Feb 2024 23:25:22 +0300 Subject: [PATCH 43/45] [MIRROR] adding coolant to pacmans with coolant adds coolant to the pacman --- code/modules/power/port_gen.dm | 36 ++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index 08da1c8cc0116..35463efb1dcf4 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -475,7 +475,7 @@ machine_desc = "This nuclear generator uses a combination of uranium and, strangely, vodka. Rated for 150 kW max safe output." var/coolant_volume = 120 var/coolant_use = 1 - var/coolant_reagent = /datum/reagent/ethanol/vodka + var/datum/reagent/coolant_reagent = /datum/reagent/ethanol/vodka /obj/machinery/power/port_gen/pacman/super/potato/New() create_reagents(coolant_volume) @@ -503,18 +503,28 @@ if(power_output > max_safe_output) icon_state = "potatodanger" -/obj/machinery/power/port_gen/pacman/super/potato/use_tool(obj/item/O, mob/living/user, list/click_params) - if(istype(O, /obj/item/reagent_containers)) - var/obj/item/reagent_containers/R = O - if(R.standard_pour_into(src,user)) - if(reagents.has_reagent("vodka")) - audible_message(SPAN_NOTICE("[src] blips happily")) - playsound(get_turf(src),'sound/machines/synth_yes.ogg', 50, 0) - else - audible_message(SPAN_WARNING("[src] blips in disappointment")) - playsound(get_turf(src), 'sound/machines/synth_no.ogg', 50, 0) - return TRUE - return ..() +/obj/machinery/power/port_gen/pacman/super/potato/use_tool(obj/item/item, mob/living/user, list/click_params) + if (!istype(item, /obj/item/reagent_containers)) + return ..() + var/datum/reagents/item_reagents = item.reagents + if (!HAS_FLAGS(item.atom_flags, ATOM_FLAG_OPEN_CONTAINER)) + to_chat(user, SPAN_WARNING("\The [item] is closed.")) + else if (!item_reagents.has_reagent(coolant_reagent)) + to_chat(user, SPAN_WARNING("\The [src] needs [initial(coolant_reagent.name)] to run.")) + else if (length(item_reagents.reagent_list) > 1) + to_chat(user, SPAN_WARNING("The contents of \the [item] is impure.")) + else + var/obj/item/reagent_containers/container = item + var/transferred = item_reagents.trans_to_holder(reagents, container.amount_per_transfer_from_this) + if (transferred) + user.visible_message( + SPAN_ITALIC("\The [user] pours something from \the [item] into \the [src]."), + SPAN_ITALIC("You pour [transferred]u from \the [item] into \the [src]."), + SPAN_ITALIC("You hear a liquid gurgling.") + ) + else + to_chat(user, SPAN_WARNING("The [src] is full.")) + return TRUE /obj/machinery/power/port_gen/pacman/super/potato/reactor name = "nuclear reactor" From e15305139060aecd682323f874032260090f5a46 Mon Sep 17 00:00:00 2001 From: Sierra Helper <125094432+SierraHelper@users.noreply.github.com> Date: Wed, 7 Feb 2024 00:14:09 +0300 Subject: [PATCH 44/45] =?UTF-8?q?=D0=A7=D0=B5=D0=B9=D0=BD=D0=B4=D0=B6?= =?UTF-8?q?=D0=BB=D0=BE=D0=B3=20=D0=B4=D0=BB=D1=8F=20PR=20#1860=20[ci=20sk?= =?UTF-8?q?ip]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html/changelogs/AutoChangeLog-sierra-pr-1860.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-sierra-pr-1860.yml diff --git a/html/changelogs/AutoChangeLog-sierra-pr-1860.yml b/html/changelogs/AutoChangeLog-sierra-pr-1860.yml new file mode 100644 index 0000000000000..580dfa22093a3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-sierra-pr-1860.yml @@ -0,0 +1,5 @@ +author: Spookerton +changes: + - {bugfix: The potato reactor and reactor reactor correctly accept vodka and coolant + as coolants respectively.} +delete-after: true From 923416da091260d4482dd7ea3db77c092dbcb83b Mon Sep 17 00:00:00 2001 From: Sierra Helper <125094432+SierraHelper@users.noreply.github.com> Date: Wed, 7 Feb 2024 01:14:16 +0000 Subject: [PATCH 45/45] =?UTF-8?q?=D0=90=D0=B2=D1=82=D0=BE=D0=BC=D0=B0?= =?UTF-8?q?=D1=82=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=B0=D1=8F=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BC=D0=BF=D0=B8=D0=BB=D1=8F=D1=86=D0=B8=D1=8F=20=D1=87=D0=B5?= =?UTF-8?q?=D0=B9=D0=BD=D0=B4=D0=B6=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=20[ci=20?= =?UTF-8?q?skip]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html/changelog.html | 16 ++++++++++++++++ html/changelogs/.all_changelog.yml | 11 +++++++++++ html/changelogs/AutoChangeLog-sierra-pr-1860.yml | 5 ----- html/changelogs/AutoChangeLog-sierra-pr-1861.yml | 4 ---- html/changelogs/AutoChangeLog-sierra-pr-1862.yml | 7 ------- 5 files changed, 27 insertions(+), 16 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-sierra-pr-1860.yml delete mode 100644 html/changelogs/AutoChangeLog-sierra-pr-1861.yml delete mode 100644 html/changelogs/AutoChangeLog-sierra-pr-1862.yml diff --git a/html/changelog.html b/html/changelog.html index 46f2b81770748..894cc1d34c1af 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -28,6 +28,22 @@

Sierra SS13

-->
+

07.02 - 2024

+

Обновления LordNest:

+
+
Humans can choke (use emote) now properly.
+
+

Обновления Spookerton:

+
+
The potato reactor and reactor reactor correctly accept vodka and coolant as coolants respectively.
+
+

Обновления emmanuelbassil:

+
+
As part of the damage standardization, can now damage closets/crates with melee attacks.
+
Damaging a closet also relays some damage to whatever's inside.
+
Secure closets/crates are tougher than regular closets/crates.
+
+

06.02 - 2024

Обновления LordNest:

diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 78ea9f42e41c3..a15094aae2f7e 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -23161,3 +23161,14 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY sierra_genchangelog.p \ \u0438 \u0421\u041C\u041E \u043E\u043F\u044F\u0442\u044C. \u041A\u0430\u043D\ \u0434\u0436\u0438, \u0442\u043E\u043B\u044C\u043A\u043E \u043F\u043E\u043F\u0440\ \u043E\u0431\u0443\u0439." +2024-02-07: + LordNest: + - bugfix: Humans can choke (use emote) now properly. + Spookerton: + - bugfix: The potato reactor and reactor reactor correctly accept vodka and coolant + as coolants respectively. + emmanuelbassil: + - tweak: As part of the damage standardization, can now damage closets/crates with + melee attacks. + - tweak: Damaging a closet also relays some damage to whatever's inside. + - tweak: Secure closets/crates are tougher than regular closets/crates. diff --git a/html/changelogs/AutoChangeLog-sierra-pr-1860.yml b/html/changelogs/AutoChangeLog-sierra-pr-1860.yml deleted file mode 100644 index 580dfa22093a3..0000000000000 --- a/html/changelogs/AutoChangeLog-sierra-pr-1860.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: Spookerton -changes: - - {bugfix: The potato reactor and reactor reactor correctly accept vodka and coolant - as coolants respectively.} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-sierra-pr-1861.yml b/html/changelogs/AutoChangeLog-sierra-pr-1861.yml deleted file mode 100644 index ce1af39fd8efc..0000000000000 --- a/html/changelogs/AutoChangeLog-sierra-pr-1861.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: LordNest -changes: - - {bugfix: Humans can choke (use emote) now properly.} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-sierra-pr-1862.yml b/html/changelogs/AutoChangeLog-sierra-pr-1862.yml deleted file mode 100644 index 3d333bcf7b99e..0000000000000 --- a/html/changelogs/AutoChangeLog-sierra-pr-1862.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: emmanuelbassil -changes: - - {tweak: 'As part of the damage standardization, can now damage closets/crates - with melee attacks.'} - - {tweak: Damaging a closet also relays some damage to whatever's inside.} - - {tweak: Secure closets/crates are tougher than regular closets/crates.} -delete-after: true