From ff819ec4f40eccc4fb574f132d4564b6db036853 Mon Sep 17 00:00:00 2001 From: Skies-Of-Blue <86762641+Skies-Of-Blue@users.noreply.github.com> Date: Sun, 3 Mar 2024 22:12:53 -0800 Subject: [PATCH 01/30] SHIPSPAWN TYPO (#2799) ## About The Pull Request ![image](https://github.com/shiptest-ss13/Shiptest/assets/86762641/598c488d-aa2b-4cf7-a59f-1abf636a52f7) ## Why It's Good For The Game ![image](https://github.com/shiptest-ss13/Shiptest/assets/86762641/1b41229a-ed14-478d-92b2-b8256d7e7af8) ![server is now less of a bottom](https://github.com/shiptest-ss13/Shiptest/assets/86762641/2624defa-33af-435e-92f5-b3b6d02341e0) ## Changelog :cl: fix: resolves a typo, making the server less passive when it speaks /:cl: --- code/modules/admin/verbs/toggle_ship_spawn.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/admin/verbs/toggle_ship_spawn.dm b/code/modules/admin/verbs/toggle_ship_spawn.dm index 4116084c7d99..c257eaba0afa 100644 --- a/code/modules/admin/verbs/toggle_ship_spawn.dm +++ b/code/modules/admin/verbs/toggle_ship_spawn.dm @@ -13,7 +13,7 @@ GLOBAL_VAR_INIT(ship_spawn_enabled, TRUE) var/message if(GLOB.ship_spawn_enabled) message = "[key_name_admin(usr)] enabled player ship spawning." - to_chat(world, "Ship Spawning is now enabled,", confidential = TRUE) + to_chat(world, "Ship Spawning is now enabled.", confidential = TRUE) else message = "[key_name_admin(usr)] disabled player ship spawning." to_chat(world, "Ship Spawning is now disabled.", confidential = TRUE) From 994d66baea1ec55c96837f00eeecd4ac123a0285 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Mon, 4 Mar 2024 00:28:17 -0600 Subject: [PATCH 02/30] Automatic changelog generation for PR #2799 [ci skip] --- html/changelogs/AutoChangeLog-pr-2799.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2799.yml diff --git a/html/changelogs/AutoChangeLog-pr-2799.yml b/html/changelogs/AutoChangeLog-pr-2799.yml new file mode 100644 index 000000000000..6975bd008640 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2799.yml @@ -0,0 +1,4 @@ +author: Skies-Of-Blue +changes: + - {bugfix: 'resolves a typo, making the server less passive when it speaks'} +delete-after: true From 2bde0d04771c966778a9d5d40334ae99b58144cb Mon Sep 17 00:00:00 2001 From: JimKil3 <47290811+JimKil3@users.noreply.github.com> Date: Mon, 4 Mar 2024 00:16:22 -0600 Subject: [PATCH 03/30] Tweaks plasma thrusters (#2797) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## About The Pull Request Changes how plasma thrusters calculate the maximum amount of fuel they can store. Instead of using the heater's volume, they now use an amount of moles based on standard conditions for plasma thrusters - if you cool down your plasma or refit your ship to more efficiently fill the thrusters than with a standard gas pump, you can still get numbers over 100% (just like you can with ion engines if you directly connect them to a grid). ## Why It's Good For The Game Plasma thrusters showing like 180% with a default setup hurts my soul and is also pretty unintuitive. With these changes, you can still tweak your thrusters to be more efficient - for default plasma thrusters though, this makes their display more useful. ## Changelog :cl: tweak: Plasma thrusters now have a more sensible fuel readout /🆑 --- code/game/machinery/shuttle/shuttle_heater.dm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/code/game/machinery/shuttle/shuttle_heater.dm b/code/game/machinery/shuttle/shuttle_heater.dm index 706898eac4c6..94735ba4ab25 100644 --- a/code/game/machinery/shuttle/shuttle_heater.dm +++ b/code/game/machinery/shuttle/shuttle_heater.dm @@ -102,7 +102,10 @@ var/datum/gas_mixture/air_contents = use_tank ? fuel_tank?.air_contents : airs[1] if(!air_contents) return - return air_contents.return_volume() + //Using the ideal gas law here - the pressure is 4500 because that's the limit of gas pumps, which most ships use on plasma thrusters + //If you refit your fuel system to use a volume pump or cool your plasma, you can have numbers over 100% on the helm as a treat + var/mole_capacity = (4500 * air_contents.return_volume()) / (R_IDEAL_GAS_EQUATION * T20C) + return mole_capacity /obj/machinery/atmospherics/components/unary/shuttle/heater/proc/update_gas_stats() var/datum/gas_mixture/air_contents = use_tank ? fuel_tank?.air_contents : airs[1] From 783d5194b00b102baa2af7c4bf8ae0414fbd6b7d Mon Sep 17 00:00:00 2001 From: Theos Date: Mon, 4 Mar 2024 01:32:51 -0500 Subject: [PATCH 04/30] Dissection tweaks: I'm tired of the corpse pile (#2722) ## About The Pull Request Problem: people are dissecting well-documented life like common animals and, distressingly, _human corpses._ Not only is this behavior odd, cadaver disposal methods can end up being quite concerning. Or quite concerningly non-instanced. Solution: Dissections no longer provide points as a default for animal/humanoid corpses, massively shortening the list of dissectable things. Pod and jellypeople have also been removed from the modified dissections table as people since they are both playable (pods less but still) and slimes can show up as legion corpses. In their place, crystal mobs, ancient goliaths, and elites/megafauna can be dissected, since they are both unique and rare (relatively) I also switched the dissection variant scaling to be fractional of the expected maximum at advanced surgery/experimental tier dissection, since that's what is going to be used throughout the majority of a round and having the commonly used numbers more directly present makes for easier balance checks. New dissectable things at experimental dissection research outputs, halve and quarter for thorough and base outputs respectively: Megafauna: 60k, on par with xeno bodies. Since you can't drag these, a clinic would have to be prepared on-site for the ones that leave a body (dragon) to extract the full value, and they are both rare and more than capable of killing a crew Elites: 12k, uncommon spawn on some planets, can be lethal crystal goliath: 10k, likely less lethal than the crystal legion but still dangerous mega arachnid, 8k, Appears in one ruin as a miniboss, rare enough it'd be something to peek at forgotten watcher: 6k, rare but relatively harmless compared to the other crystal mobs (unless I'm missing something) watcher variants: 4k, uncommon subspecies of watchers ancient goliath: 4k, it's a remarkably old goliath, probably some value there ## Why It's Good For The Game Five. Hundred. Human bodies. In my medbay. ## Changelog :cl: add: ancient goliaths, crystal fauna (aside from legion), elites and megafauna now have boosted dissection outputs del: human corpses, podpeople, jellypeople and animal corpses can no longer be dissected. What did you expect to find, an extra pair of lungs? /:cl: --------- Signed-off-by: Theos Co-authored-by: Mark Suckerberg --- .../surgery/experimental_dissection.dm | 50 +++++++++++-------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/code/modules/surgery/experimental_dissection.dm b/code/modules/surgery/experimental_dissection.dm index 48f423a12512..70dbac246e4e 100644 --- a/code/modules/surgery/experimental_dissection.dm +++ b/code/modules/surgery/experimental_dissection.dm @@ -1,4 +1,4 @@ -#define BASE_HUMAN_REWARD 500 +#define MAX_DISSECTION_REWARD 2000 #define EXPDIS_FAIL_MSG "You dissect [target], but do not find anything particularly interesting." #define PUBLIC_TECHWEB_GAIN 0.6 //how many research points go directly into the main pool #define PRIVATE_TECHWEB_GAIN (1 - PUBLIC_TECHWEB_GAIN) //how many research points go directly into the main pool @@ -16,7 +16,7 @@ target_mobtypes = list(/mob/living) //Feel free to dissect devils but they're magic. replaced_by = /datum/surgery/advanced/experimental_dissection/adv requires_tech = FALSE - var/value_multiplier = 1 + var/value_multiplier = 0.25 /datum/surgery/advanced/experimental_dissection/can_start(mob/user, mob/living/target) . = ..() @@ -45,31 +45,37 @@ user.visible_message("[user] starts dissecting [target].", "You start dissecting [target].") /datum/surgery_step/dissection/proc/check_value(mob/living/target, datum/surgery/advanced/experimental_dissection/ED) - var/cost = BASE_HUMAN_REWARD + var/cost = 0 var/multi_surgery_adjust = 0 //determine bonus applied + var/static/list/mob_mult_list = list(/mob/living/simple_animal/hostile/asteroid/elite = 6, + /mob/living/simple_animal/hostile/asteroid/goliath/beast/ancient/crystal = 5, + /mob/living/simple_animal/hostile/jungle/mega_arachnid = 4, + /mob/living/simple_animal/hostile/asteroid/basilisk/watcher/forgotten = 3, + /mob/living/simple_animal/hostile/asteroid/basilisk/watcher/icewing = 2, + /mob/living/simple_animal/hostile/asteroid/basilisk/watcher/magmawing = 2, + /mob/living/simple_animal/hostile/asteroid/goliath/beast/ancient = 2 + ) if(isalienqueen(target) || isalienroyal(target)) - cost = (BASE_HUMAN_REWARD*38) + cost = (MAX_DISSECTION_REWARD*38) else if(isalienadult(target)) - cost = (BASE_HUMAN_REWARD*30) - else if(ismonkey(target)) - cost = (BASE_HUMAN_REWARD*0.5) + cost = (MAX_DISSECTION_REWARD*30) + else if(isalien(target)) + cost = (MAX_DISSECTION_REWARD*14) + else if(ismegafauna(target)) + cost = (MAX_DISSECTION_REWARD*30) else if(ishuman(target)) var/mob/living/carbon/human/H = target if(H?.dna?.species) if(isabductor(H)) - cost = (BASE_HUMAN_REWARD*24) + cost = (MAX_DISSECTION_REWARD*24) else if(iszombie(H) || isshadow(H) || isandroid(H)) - cost = (BASE_HUMAN_REWARD*20) - else if(isjellyperson(H) || ispodperson(H) || isalien(H)) - cost = (BASE_HUMAN_REWARD*14) - else if(isskeleton(H)) - cost = (BASE_HUMAN_REWARD * 0.5) - else - cost = (BASE_HUMAN_REWARD * 0.5) - - + cost = (MAX_DISSECTION_REWARD*20) + else for(var/type in mob_mult_list) // THIS. ELSE IF(). ENDS. HERE. + if(istype(target, type)) + cost = (MAX_DISSECTION_REWARD*mob_mult_list[type]) + break //now we do math for surgeries already done (no double dipping!). for(var/i in typesof(/datum/surgery/advanced/experimental_dissection)) @@ -96,7 +102,7 @@ target.apply_damage(80, BRUTE, L) ADD_TRAIT(target, TRAIT_DISSECTED, "[surgery.name]") repeatable = FALSE - experience_given = max(points_earned/(BASE_HUMAN_REWARD/MEDICAL_SKILL_MEDIUM),1) + experience_given = max(points_earned/(MAX_DISSECTION_REWARD/MEDICAL_SKILL_MEDIUM),1) return ..() /datum/surgery_step/dissection/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) @@ -114,24 +120,24 @@ /datum/surgery/advanced/experimental_dissection/adv name = "Thorough Dissection" - value_multiplier = 2 + value_multiplier = 0.5 replaced_by = /datum/surgery/advanced/experimental_dissection/exp requires_tech = TRUE /datum/surgery/advanced/experimental_dissection/exp name = "Experimental Dissection" - value_multiplier = 4 + value_multiplier = 1 replaced_by = /datum/surgery/advanced/experimental_dissection/alien requires_tech = TRUE /datum/surgery/advanced/experimental_dissection/alien name = "Extraterrestrial Dissection" - value_multiplier = 8 + value_multiplier = 2 requires_tech = TRUE replaced_by = null -#undef BASE_HUMAN_REWARD +#undef MAX_DISSECTION_REWARD #undef EXPDIS_FAIL_MSG #undef PUBLIC_TECHWEB_GAIN #undef PRIVATE_TECHWEB_GAIN From 9aa9256ca8e2ac69642bd54f820e532822c298d7 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Mon, 4 Mar 2024 01:02:00 -0600 Subject: [PATCH 05/30] Automatic changelog generation for PR #2722 [ci skip] --- html/changelogs/AutoChangeLog-pr-2722.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2722.yml diff --git a/html/changelogs/AutoChangeLog-pr-2722.yml b/html/changelogs/AutoChangeLog-pr-2722.yml new file mode 100644 index 000000000000..d57a53a24678 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2722.yml @@ -0,0 +1,7 @@ +author: SomeguyManperson +changes: + - {rscadd: 'ancient goliaths, crystal fauna (aside from legion), elites and megafauna + now have boosted dissection outputs'} + - {rscdel: 'human corpses, podpeople, jellypeople and animal corpses can no longer + be dissected. What did you expect to find, an extra pair of lungs?'} +delete-after: true From 2887e2a6a07cd160512c9857fbeb6b9b4ff32d8c Mon Sep 17 00:00:00 2001 From: Skies-Of-Blue <86762641+Skies-Of-Blue@users.noreply.github.com> Date: Sun, 3 Mar 2024 22:35:58 -0800 Subject: [PATCH 06/30] Buckleable Stools (#2800) ## About The Pull Request ![image](https://github.com/shiptest-ss13/Shiptest/assets/86762641/7e625f17-8175-4057-833c-82c3f918f6ae) ## Why It's Good For The Game Given Shiptest's takeoff/landing gameplay loop, it's important to have buckleable objects on a ship for all of your crew. The Aegis has an excess of bar stools and a lack of chairs. Players frequently replace the stools with chairs, or even couches, so the entire crew doesn't fall down whenever the ship moves. This loses quite a bit of flavor, and looks considerably more stupid. Yes, this is a spite PR. ## Changelog :cl: tweak: you can now buckle to stools, just as the founding members of the SUNS intended /:cl: --- code/game/objects/structures/beds_chairs/chair.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm index 80c6bedb49bb..7a7c73b33fc6 100644 --- a/code/game/objects/structures/beds_chairs/chair.dm +++ b/code/game/objects/structures/beds_chairs/chair.dm @@ -220,7 +220,6 @@ name = "stool" desc = "Apply butt." icon_state = "stool" - can_buckle = FALSE buildstackamount = 1 item_chair = /obj/item/chair/stool From 9901a71d3c85d065543c66a35f26e826c2acf543 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Mon, 4 Mar 2024 01:21:04 -0600 Subject: [PATCH 07/30] Automatic changelog generation for PR #2800 [ci skip] --- html/changelogs/AutoChangeLog-pr-2800.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2800.yml diff --git a/html/changelogs/AutoChangeLog-pr-2800.yml b/html/changelogs/AutoChangeLog-pr-2800.yml new file mode 100644 index 000000000000..b4ce32b6ec51 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2800.yml @@ -0,0 +1,5 @@ +author: Skies-Of-Blue +changes: + - {tweak: 'you can now buckle to stools, just as the founding members of the SUNS + intended'} +delete-after: true From 93e1b61384072b23a5b4d2a32d605688021198f5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Mar 2024 06:36:27 +0000 Subject: [PATCH 08/30] Bump es5-ext from 0.10.53 to 0.10.63 in /tgui (#2773) Bumps [es5-ext](https://github.com/medikoo/es5-ext) from 0.10.53 to 0.10.63.
Release notes

Sourced from es5-ext's releases.

0.10.63 (2024-02-23)

Bug Fixes

  • Do not rely on problematic regex (3551cdd), addresses #201
  • Support ES2015+ function definitions in function#toStringTokens() (a52e957), addresses #021
  • Ensure postinstall script does not crash on Windows, fixes #181 (bf8ed79)

Maintenance Improvements

  • Simplify the manifest message (7855319)

Comparison since last release

0.10.62 (2022-08-02)

Maintenance Improvements


Comparison since last release

0.10.61 (2022-04-20)

Bug Fixes

  • Ensure postinstall script does not error (a0be4fd)

Maintenance Improvements


Comparison since last release

0.10.60 (2022-04-07)

Maintenance Improvements

  • Improve postinstall script configuration (ab6b121)

Comparison since last release

0.10.59 (2022-03-17)

Maintenance Improvements

... (truncated)

Changelog

Sourced from es5-ext's changelog.

0.10.63 (2024-02-23)

Bug Fixes

  • Do not rely on problematic regex (3551cdd), addresses #201
  • Support ES2015+ function definitions in function#toStringTokens() (a52e957), addresses #021
  • Ensure postinstall script does not crash on Windows, fixes #181 (bf8ed79)

Maintenance Improvements

  • Simplify the manifest message (7855319)

0.10.62 (2022-08-02)

Maintenance Improvements

0.10.61 (2022-04-20)

Bug Fixes

  • Ensure postinstall script does not error (a0be4fd)

Maintenance Improvements

0.10.60 (2022-04-07)

Maintenance Improvements

  • Improve postinstall script configuration (ab6b121)

0.10.59 (2022-03-17)

Maintenance Improvements

0.10.58 (2022-03-11)

Maintenance Improvements

  • Improve "call for peace" manifest (3beace4)

0.10.57 (2022-03-08)

... (truncated)

Commits
  • de4e03c chore: Release v0.10.63
  • 3fd53b7 chore: Upgrade lint-staged to v13
  • bf8ed79 chore: Ensure postinstall script does not crash on Windows
  • 2cbbb07 chore: Bump dependencies
  • 22d0416 chore: Bump LICENSE year
  • a52e957 fix: Support ES2015+ function definitions in function#toStringTokens()
  • 3551cdd fix: Do not rely on problematic regex
  • 7855319 chore: Simplify the manifest message
  • 78e041f chore: Release v0.10.62
  • c51d552 chore: Improve manifest
  • Additional commits viewable in compare view

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=es5-ext&package-manager=npm_and_yarn&previous-version=0.10.53&new-version=0.10.63)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/shiptest-ss13/Shiptest/network/alerts).
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Mark Suckerberg --- tgui/yarn.lock | 45 +++++++++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/tgui/yarn.lock b/tgui/yarn.lock index 37d2964d40c8..c71f2a55d264 100644 --- a/tgui/yarn.lock +++ b/tgui/yarn.lock @@ -3859,18 +3859,19 @@ __metadata: languageName: node linkType: hard -"es5-ext@npm:^0.10.35, es5-ext@npm:^0.10.46, es5-ext@npm:^0.10.50, es5-ext@npm:^0.10.51, es5-ext@npm:^0.10.53, es5-ext@npm:~0.10.14, es5-ext@npm:~0.10.2, es5-ext@npm:~0.10.46": - version: 0.10.53 - resolution: "es5-ext@npm:0.10.53" +"es5-ext@npm:^0.10.35, es5-ext@npm:^0.10.46, es5-ext@npm:^0.10.50, es5-ext@npm:^0.10.51, es5-ext@npm:^0.10.53, es5-ext@npm:^0.10.62, es5-ext@npm:~0.10.14, es5-ext@npm:~0.10.2, es5-ext@npm:~0.10.46": + version: 0.10.63 + resolution: "es5-ext@npm:0.10.63" dependencies: - es6-iterator: ~2.0.3 - es6-symbol: ~3.1.3 - next-tick: ~1.0.0 - checksum: 24ec22369260cf98605cb2f51eae9d7df5dc621bc5d3b311f6f5c3d0fcdb7bafae888270f3083ee6e9af27350a5ea49f1fe2dd6406a9017247ca40f091f529b2 + es6-iterator: ^2.0.3 + es6-symbol: ^3.1.3 + esniff: ^2.0.1 + next-tick: ^1.1.0 + checksum: 3bf04d9bac12a14e716a0a00b1706f538a3211da82703babd3e907deaeadaa30eab71202785027058d44d2a7c0e92e34631fb03fa63ef1097191e88de5223fda languageName: node linkType: hard -"es6-iterator@npm:^2.0.3, es6-iterator@npm:~2.0.3": +"es6-iterator@npm:^2.0.3": version: 2.0.3 resolution: "es6-iterator@npm:2.0.3" dependencies: @@ -3881,7 +3882,7 @@ __metadata: languageName: node linkType: hard -"es6-symbol@npm:^3.1.1, es6-symbol@npm:~3.1.3": +"es6-symbol@npm:^3.1.1, es6-symbol@npm:^3.1.3": version: 3.1.3 resolution: "es6-symbol@npm:3.1.3" dependencies: @@ -4111,6 +4112,18 @@ __metadata: languageName: node linkType: hard +"esniff@npm:^2.0.1": + version: 2.0.1 + resolution: "esniff@npm:2.0.1" + dependencies: + d: ^1.0.1 + es5-ext: ^0.10.62 + event-emitter: ^0.3.5 + type: ^2.7.2 + checksum: d814c0e5c39bce9925b2e65b6d8767af72c9b54f35a65f9f3d6e8c606dce9aebe35a9599d30f15b0807743f88689f445163cfb577a425de4fb8c3c5bc16710cc + languageName: node + linkType: hard + "espree@npm:^7.3.0, espree@npm:^7.3.1": version: 7.3.1 resolution: "espree@npm:7.3.1" @@ -6668,13 +6681,6 @@ __metadata: languageName: node linkType: hard -"next-tick@npm:~1.0.0": - version: 1.0.0 - resolution: "next-tick@npm:1.0.0" - checksum: 83fcb3d4f8d9380210b1c2b8a610463602d80283f0c0c8571c1688e1ad6cbf3a16b345f5bb7212617d4898bedcfa10dff327dc09ec20a112a5bf43a0271375fb - languageName: node - linkType: hard - "no-case@npm:^3.0.4": version: 3.0.4 resolution: "no-case@npm:3.0.4" @@ -8912,6 +8918,13 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard +"type@npm:^2.7.2": + version: 2.7.2 + resolution: "type@npm:2.7.2" + checksum: 0f42379a8adb67fe529add238a3e3d16699d95b42d01adfe7b9a7c5da297f5c1ba93de39265ba30ffeb37dfd0afb3fb66ae09f58d6515da442219c086219f6f4 + languageName: node + linkType: hard + "typedarray-to-buffer@npm:^3.1.5": version: 3.1.5 resolution: "typedarray-to-buffer@npm:3.1.5" From 2a5ffd4f89fdc309a7c50cecfb03d9a55ffc1352 Mon Sep 17 00:00:00 2001 From: meem <75212565+meemofcourse@users.noreply.github.com> Date: Mon, 4 Mar 2024 03:40:55 -0300 Subject: [PATCH 09/30] Emergency Response Team Housekeeping (#2744) ## About The Pull Request This PR introduces a system to limit special roles picked in ERTs, which can be toggled in the settings screen, and sorts out the antagonist datums into factional files. ## Why It's Good For The Game ![imagen](https://github.com/shiptest-ss13/Shiptest/assets/75212565/e3e18d92-6dfc-4be6-8d0f-7bf1bc366b3a) This could happen to you. ## Changelog :cl: code: ERT antag datums are now sorted into factional files admin: ERTs can have limited special roles /:cl: --------- Signed-off-by: meem <75212565+meemofcourse@users.noreply.github.com> Co-authored-by: Mark Suckerberg --- code/datums/ert.dm | 10 +- code/modules/admin/verbs/one_click_antag.dm | 22 +- code/modules/antagonists/ert/ert.dm | 487 ------------------- code/modules/antagonists/ert/frontiersmen.dm | 37 ++ code/modules/antagonists/ert/indie.dm | 44 ++ code/modules/antagonists/ert/inteq.dm | 24 + code/modules/antagonists/ert/minutemen.dm | 72 +++ code/modules/antagonists/ert/nanotrasen.dm | 152 ++++++ code/modules/antagonists/ert/solgov.dm | 20 + code/modules/antagonists/ert/syndicate.dm | 122 +++++ shiptest.dme | 7 + 11 files changed, 505 insertions(+), 492 deletions(-) create mode 100644 code/modules/antagonists/ert/frontiersmen.dm create mode 100644 code/modules/antagonists/ert/indie.dm create mode 100644 code/modules/antagonists/ert/inteq.dm create mode 100644 code/modules/antagonists/ert/minutemen.dm create mode 100644 code/modules/antagonists/ert/nanotrasen.dm create mode 100644 code/modules/antagonists/ert/solgov.dm create mode 100644 code/modules/antagonists/ert/syndicate.dm diff --git a/code/datums/ert.dm b/code/datums/ert.dm index 2b02a2be0198..43af3bc2b3ec 100644 --- a/code/datums/ert.dm +++ b/code/datums/ert.dm @@ -12,7 +12,9 @@ var/polldesc /// If TRUE, gives the team members "[role] [random last name]" style names var/random_names = FALSE - /// If TRUE, the admin who created the response team will be spawned in the briefing room in their preferred briefing outfit (assuming they're a ghost) + /// If TRUE, special slots (that are not the leader) will use a predefined limit + var/limit_slots = FALSE + /// If TRUE, the admin who created the response team will be spawned in the briefing room (or in the shuttle) in their preferred briefing outfit (assuming they're a ghost) var/spawn_admin = FALSE /// If TRUE, we try and pick one of the most experienced players who volunteered to fill the leader slot var/leader_experience = TRUE @@ -51,7 +53,7 @@ /datum/ert/marine leader_role = /datum/antagonist/ert/marine - roles = list(/datum/antagonist/ert/marine/security, /datum/antagonist/ert/marine/engineer, /datum/antagonist/ert/marine/medic) + roles = list(/datum/antagonist/ert/marine/security, /datum/antagonist/ert/marine/engineer = 1, /datum/antagonist/ert/marine/medic = 1) rename_team = "Marine Squad" polldesc = "an 'elite' Nanotrasen Strike Team" opendoors = FALSE @@ -102,7 +104,7 @@ teamsize = 4 opendoors = FALSE leader_role = /datum/antagonist/ert/lp/lieutenant - roles = list(/datum/antagonist/ert/lp, /datum/antagonist/ert/lp/medic, /datum/antagonist/ert/lp/engineer) + roles = list(/datum/antagonist/ert/lp, /datum/antagonist/ert/lp/medic = 1, /datum/antagonist/ert/lp/engineer = 1) rename_team = "Loss Prevention Team" polldesc = "a Nanotrasen loss prevention team" @@ -195,7 +197,7 @@ /datum/ert/syndicate/gorlex leader_role = /datum/antagonist/ert/syndicate/gorlex/leader - roles = list(/datum/antagonist/ert/syndicate/gorlex, /datum/antagonist/ert/syndicate/gorlex/pointman, /datum/antagonist/ert/syndicate/gorlex/medic, /datum/antagonist/ert/syndicate/gorlex/sniper) + roles = list(/datum/antagonist/ert/syndicate/gorlex, /datum/antagonist/ert/syndicate/gorlex/pointman = 1, /datum/antagonist/ert/syndicate/gorlex/medic = 1, /datum/antagonist/ert/syndicate/gorlex/sniper = 1) mission = "Serve the interests of the 2nd Battlegroup." rename_team = "2nd Battlegroup Squad" polldesc = "a loyalist Gorlex squad" diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index e1f88a2626b2..ac05c3afdd4f 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -223,6 +223,7 @@ .["mainsettings"]["open_armory"]["value"] = newtemplate.opendoors ? "Yes" : "No" .["mainsettings"]["leader_experience"]["value"] = newtemplate.leader_experience ? "Yes" : "No" .["mainsettings"]["random_names"]["value"] = newtemplate.random_names ? "Yes" : "No" + .["mainsettings"]["limit_slots"]["value"] = newtemplate.limit_slots ? "Yes" : "No" .["mainsettings"]["spawn_admin"]["value"] = newtemplate.spawn_admin ? "Yes" : "No" .["mainsettings"]["use_custom_shuttle"]["value"] = newtemplate.use_custom_shuttle ? "Yes" : "No" .["mainsettings"]["spawn_at_outpost"]["value"] = newtemplate.spawn_at_outpost ? "Yes" : "No" @@ -293,6 +294,7 @@ "open_armory" = list("desc" = "Open armory doors", "type" = "boolean", "value" = "[(ertemplate.opendoors ? "Yes" : "No")]"), "leader_experience" = list("desc" = "Pick an experienced leader", "type" = "boolean", "value" = "[(ertemplate.leader_experience ? "Yes" : "No")]"), "random_names" = list("desc" = "Randomize names", "type" = "boolean", "value" = "[(ertemplate.random_names ? "Yes" : "No")]"), + "limit_slots" = list("desc" = "Limit special roles", "type" = "boolean", "value" = "[(ertemplate.limit_slots ? "Yes" : "No")]"), "spawn_admin" = list("desc" = "Spawn yourself as briefing officer", "type" = "boolean", "value" = "[(ertemplate.spawn_admin ? "Yes" : "No")]"), "use_custom_shuttle" = list("desc" = "Use the ERT's custom shuttle (if it has one)", "type" = "boolean", "value" = "[(ertemplate.use_custom_shuttle ? "Yes" : "No")]"), "spawn_at_outpost" = list("desc" = "Spawn the ERT/Dock the ERT at the Outpost", "type" = "boolean", "value" = "[(ertemplate.spawn_at_outpost ? "Yes" : "No")]"), @@ -317,10 +319,11 @@ ertemplate.teamsize = prefs["teamsize"]["value"] ertemplate.mission = prefs["mission"]["value"] ertemplate.polldesc = prefs["polldesc"]["value"] - ertemplate.enforce_human = prefs["enforce_human"]["value"] == "Yes" // these next 7 are effectively toggles + ertemplate.enforce_human = prefs["enforce_human"]["value"] == "Yes" // these next 8 are effectively toggles ertemplate.opendoors = prefs["open_armory"]["value"] == "Yes" ertemplate.leader_experience = prefs["leader_experience"]["value"] == "Yes" ertemplate.random_names = prefs["random_names"]["value"] == "Yes" + ertemplate.limit_slots = prefs["limit_slots"]["value"] == "Yes" ertemplate.spawn_admin = prefs["spawn_admin"]["value"] == "Yes" ertemplate.use_custom_shuttle = prefs["use_custom_shuttle"]["value"] == "Yes" ertemplate.spawn_at_outpost = prefs["spawn_at_outpost"]["value"] == "Yes" @@ -459,6 +462,23 @@ ert_antag = new ertemplate.leader_role () earmarked_leader = null leader_spawned = TRUE + else if(ertemplate.limit_slots) + // pick a role from the role list + var/rolepick + rolepick = pick(ertemplate.roles) + var/count = ertemplate.roles[rolepick] + // is it a special role (does it have a number value)? if not, tough luck, spawn + if(!isnum(count)) + ert_antag = rolepick + ert_antag = new ert_antag + // pick another if the count is 0 + else if(!count) + continue + // pick it and decrease the count by one + else + count =- 1 + ert_antag = rolepick + ert_antag = new ert_antag else ert_antag = ertemplate.roles[WRAP(numagents,1,length(ertemplate.roles) + 1)] ert_antag = new ert_antag diff --git a/code/modules/antagonists/ert/ert.dm b/code/modules/antagonists/ert/ert.dm index d731343d33f0..25b0b4e1f8cc 100644 --- a/code/modules/antagonists/ert/ert.dm +++ b/code/modules/antagonists/ert/ert.dm @@ -68,490 +68,3 @@ missiondesc += "
Your Mission: [ert_team.mission.explanation_text]" to_chat(owner,missiondesc) - -// ******************************************************************** -// ** Nanotrasen ** -// ******************************************************************** - -// Official -/datum/antagonist/ert/official - name = "CentCom Official" - show_name_in_check_antagonists = TRUE - var/datum/objective/mission - role = "Inspector" - random_names = FALSE - outfit = /datum/outfit/centcom/centcom_official - -/datum/antagonist/ert/official/greet() - to_chat(owner, "You are a CentCom Official.") - if (ert_team) - to_chat(owner, "Central Command is sending you to [station_name()] with the task: [ert_team.mission.explanation_text]") - else - to_chat(owner, "Central Command is sending you to [station_name()] with the task: [mission.explanation_text]") - -/datum/antagonist/ert/official/forge_objectives() - if (ert_team) - return ..() - if(mission) - return - var/datum/objective/missionobj = new () - missionobj.owner = owner - missionobj.explanation_text = "Conduct a routine performance review of [station_name()]'s vessels." - missionobj.completed = TRUE - mission = missionobj - objectives |= mission - -// Standard ERT - -/datum/antagonist/ert/security // kinda handled by the base template but here for completion - -/datum/antagonist/ert/security/red - outfit = /datum/outfit/centcom/ert/security/alert - -/datum/antagonist/ert/engineer - role = "Engineer" - outfit = /datum/outfit/centcom/ert/engineer - -/datum/antagonist/ert/engineer/red - outfit = /datum/outfit/centcom/ert/engineer/alert - -/datum/antagonist/ert/medic - role = "Medical Officer" - outfit = /datum/outfit/centcom/ert/medic - -/datum/antagonist/ert/medic/red - outfit = /datum/outfit/centcom/ert/medic/alert - -/datum/antagonist/ert/commander - role = "Commander" - outfit = /datum/outfit/centcom/ert/commander - -/datum/antagonist/ert/commander/red - outfit = /datum/outfit/centcom/ert/commander/alert - -// Deathsquad - -/datum/antagonist/ert/deathsquad - name = "Deathsquad Trooper" - outfit = /datum/outfit/centcom/death_commando - role = "Trooper" - deathsquad = TRUE - -/datum/antagonist/ert/deathsquad/leader - name = "Deathsquad Officer" - outfit = /datum/outfit/centcom/death_commando - role = "Officer" - -/datum/antagonist/ert/deathsquad/New() - . = ..() - name_source = GLOB.commando_names - -/datum/antagonist/ert/deathsquad/apply_innate_effects(mob/living/mob_override) - ADD_TRAIT(owner, TRAIT_DISK_VERIFIER, DEATHSQUAD_TRAIT) - -/datum/antagonist/ert/deathsquad/remove_innate_effects(mob/living/mob_override) - REMOVE_TRAIT(owner, TRAIT_DISK_VERIFIER, DEATHSQUAD_TRAIT) - -// Janitor - -/datum/antagonist/ert/janitor - role = "Janitor" - outfit = /datum/outfit/centcom/ert/janitor - -/datum/antagonist/ert/janitor/heavy - role = "Heavy Duty Janitor" - outfit = /datum/outfit/centcom/ert/janitor/heavy - -// Intern - -/datum/antagonist/ert/intern - name = "CentCom Intern" - outfit = /datum/outfit/centcom/centcom_intern - random_names = FALSE - role = "Intern" - -/datum/antagonist/ert/intern/leader - name = "CentCom Head Intern" - outfit = /datum/outfit/centcom/centcom_intern/leader - role = "Head Intern" - -/datum/antagonist/ert/intern/unarmed - outfit = /datum/outfit/centcom/centcom_intern/unarmed - -/datum/antagonist/ert/intern/leader/unarmed - outfit = /datum/outfit/centcom/centcom_intern/leader/unarmed - -// Marine - -/datum/antagonist/ert/marine - name = "Marine Commander" - outfit = /datum/outfit/centcom/ert/marine - role = "Commander" - -/datum/antagonist/ert/marine/security - name = "Marine Heavy" - outfit = /datum/outfit/centcom/ert/marine/security - role = "Trooper" - -/datum/antagonist/ert/marine/engineer - name = "Marine Engineer" - outfit = /datum/outfit/centcom/ert/marine/engineer - role = "Engineer" - -/datum/antagonist/ert/marine/medic - name = "Marine Medic" - outfit = /datum/outfit/centcom/ert/marine/medic - role = "Medical Officer" - -// Loss Prevention - -/datum/antagonist/ert/lp - name = "Loss Prevention Security Specialist" - outfit = /datum/outfit/job/nanotrasen/security/ert/lp - role = "Security Specialist" - -/datum/antagonist/ert/lp/medic - name = "Loss Prevention Medical Specialist" - outfit = /datum/outfit/job/nanotrasen/security/ert/lp/medic - role = "Medical Specialist" - -/datum/antagonist/ert/lp/engineer - name = "Loss Prevention Engineering Specialist" - outfit = /datum/outfit/job/nanotrasen/security/ert/lp/engineer - role = "Engineering Specialist" - -/datum/antagonist/ert/lp/lieutenant - name = "Loss Prevention Lieutenant" - leader = TRUE - outfit = /datum/outfit/job/nanotrasen/security/ert/lp/lieutenant - role = "Lieutenant" - -// ******************************************************************** -// ** Inteq ** -// ******************************************************************** - -/datum/antagonist/ert/inteq - name = "Inteq Mercenary" - outfit = /datum/outfit/job/inteq/security - random_names = TRUE - role = "Enforcer" - - -/datum/antagonist/ert/inteq/greet() - to_chat(owner, "You are the [name].") - var/missiondesc = "You're one of the many mercenaries under the Inteq Risk Management Group sent to [station_name()].
" - if(leader) //If Squad Leader - missiondesc += "Lead your squadron to ensure the completion of your contract." - else - missiondesc += "Follow orders given to you by your Vanguard." - if(deathsquad) - missiondesc += "Leave no witnesses." - - missiondesc += "
Contract Terms: [ert_team.mission.explanation_text]" - to_chat(owner,missiondesc) - -/datum/antagonist/ert/inteq/leader - name = "Inteq Mercenary Leader" - outfit = /datum/outfit/job/inteq/captain - role = "Vanguard" - -// ******************************************************************** -// ** SolGov ** -// ******************************************************************** -/datum/antagonist/ert/solgov - name = "SolGov Sonnensöldner" - outfit = /datum/outfit/job/solgov/ert - random_names = FALSE - role = "Sonnensöldner" - -/datum/antagonist/ert/official/solgov - name = "SolGov Inspector" - outfit = /datum/outfit/job/solgov/ert/inspector - role = "Solarian Inspector" - -/datum/antagonist/ert/official/solgov/greet() - to_chat(owner, "You are a Solarian Inspector.") - if (ert_team) - to_chat(owner, "The Department of Administrative Affairs is sending you to [station_name()] with the task: [ert_team.mission.explanation_text]") - else - to_chat(owner, "The Department of Administrative Affairs is sending you to [station_name()] with the task: [mission.explanation_text]") - - -// ******************************************************************** -// ** Minutemen ** -// ******************************************************************** - -/datum/antagonist/ert/minutemen - name = "Minutemen Infantry" - outfit = /datum/outfit/job/minutemen/ert - role = "Minuteman" - -/datum/antagonist/ert/minutemen/greet() - to_chat(owner, "You are the [name].") - var/missiondesc = "You stand shoulder to shoulder with your fellow colonists in the Colonial Minutemen within [station_name()].
" - if(leader) //If Squad Leader - missiondesc += "Lead your team to ensure the completion of your objectives." - else - missiondesc += "Follow orders given to you by your Sergent." - if(deathsquad) - missiondesc += "Leave no witnesses." - - missiondesc += "
Your Mission: [ert_team.mission.explanation_text]" - to_chat(owner,missiondesc) - -/datum/antagonist/ert/minutemen/leader - name = "Minutemen Leader" - leader = TRUE - outfit = /datum/outfit/job/minutemen/ert/leader - role = "Sergeant" - -/datum/antagonist/ert/minutemen/bard - name = "BARD Infantry" - outfit = /datum/outfit/job/minutemen/ert/bard - role = "Minuteman" - -/datum/antagonist/ert/minutemen/bard/leader - name = "BARD Sergeant" - leader = TRUE - outfit = /datum/outfit/job/minutemen/ert/bard/leader - role = "Sergeant" - -/datum/antagonist/ert/minutemen/riot - name = "Riot Officer" - outfit = /datum/outfit/job/minutemen/ert/riot - role = "Minuteman" - -/datum/antagonist/ert/minutemen/riot/leader - name = "Riot Sergeant" - leader = TRUE - outfit = /datum/outfit/job/minutemen/ert/riot/leader - role = "Sergeant" - -/datum/antagonist/ert/official/minutemen - name = "GOLD Inspector" - outfit = /datum/outfit/job/minutemen/ert/inspector - role = "Lieutenant" - -/datum/antagonist/ert/official/minutemen/greet() - to_chat(owner, "You are the GOLD Inspector.") - if (ert_team) - to_chat(owner, "You are part of The Galactic Optimum Labor Division, a division of the Colonial League. Your task: [ert_team.mission.explanation_text]") - else - to_chat(owner, "You are part of The Galactic Optimum Labor Division, a division of the Colonial League. Your task: [ert_team.mission.explanation_text]") - -/datum/antagonist/ert/minutemen/piratehunters - name = "Pirate Hunter" - outfit = /datum/outfit/job/minutemen/ert/pirate_hunter - role = "Minuteman" - -/datum/antagonist/ert/minutemen/piratehunters/leader - name = "Pirate Hunter Leader" - leader = TRUE - outfit = /datum/outfit/job/minutemen/ert/pirate_hunter/leader - role = "Sergeant" - -// ******************************************************************** -// ** Syndicate ** -// ******************************************************************** - -/datum/antagonist/ert/syndicate - name = "Syndicate Infantry" - outfit = /datum/outfit/job/syndicate/ert - role = "Squaddie" - -/datum/antagonist/ert/syndicate/greet() - to_chat(owner, "You are the [name].") - var/missiondesc = "You are but another member of the Syndicate sent to [station_name()].
" - if(leader) //If Squad Leader - missiondesc += "Lead your team to ensure the completion of your objectives." - else - missiondesc += "Follow orders given to you by your Sergeant." - if(deathsquad) - missiondesc += "Leave no witnesses." - - missiondesc += "
Your Mission: [ert_team.mission.explanation_text]" - to_chat(owner,missiondesc) - -/datum/antagonist/ert/syndicate/leader - name = "Syndicate Sergeant" - leader = TRUE - outfit = /datum/outfit/job/syndicate/ert/leader - role = "Sergeant" - -/datum/antagonist/ert/syndicate/gorlex - name = "2nd Battlegroup Trooper" - outfit = /datum/outfit/job/syndicate/ert/gorlex - role = "Trooper" - -/datum/antagonist/ert/syndicate/gorlex/greet() - to_chat(owner, "You are the [name].") - var/missiondesc = "You're a soldier of the 2nd Battlegroup, sometimes known as Gorlex Loyalists, sent to [station_name()].
" - if(leader) //If Squad Leader - missiondesc += "Lead your team to ensure the completion of your objectives." - else - missiondesc += "Follow orders given to you by your Sergeant." - - missiondesc += "
Your Mission: [ert_team.mission.explanation_text]" - to_chat(owner,missiondesc) - -/datum/antagonist/ert/syndicate/gorlex/pointman - name = "2nd Battlegroup Shotgunner" - outfit = /datum/outfit/job/syndicate/ert/gorlex/pointman - role = "Pointman" - -/datum/antagonist/ert/syndicate/gorlex/medic - name = "2nd Battlegroup Medic" - outfit = /datum/outfit/job/syndicate/ert/gorlex/medic - role = "Medic" - -/datum/antagonist/ert/syndicate/gorlex/sniper - name = "2nd Battlegroup Sniper" - outfit = /datum/outfit/job/syndicate/ert/gorlex/sniper - role = "Marksman" - -/datum/antagonist/ert/syndicate/gorlex/leader - name = "2nd Battlegroup Sergeant" - leader = TRUE - outfit = /datum/outfit/job/syndicate/ert/gorlex/leader - role = "Sergeant" - -/datum/antagonist/ert/syndicate/cybersun - name = "Cybersun Commando" - outfit = /datum/outfit/job/syndicate/ert/cybersun - role = "Operative" - -/datum/antagonist/ert/syndicate/cybersun/greet() - to_chat(owner, "You are the [name].") - var/missiondesc = "You are one of the commandos enlisted in Cybersun Industries, deployed to [station_name()].
" - if(leader) //If Squad Leader - missiondesc += "Lead your team to ensure the completion of your objectives." - else - missiondesc += "Follow orders given to you by your Sergeant." - if(prob(50) && !leader) - missiondesc += "
In addition to your contract with Cybersun, you are also a Gorlex Hardliner. You do not like Cybersun, but you work with them regardless." - - missiondesc += "
Your Mission: [ert_team.mission.explanation_text]" - to_chat(owner,missiondesc) - -/datum/antagonist/ert/syndicate/cybersun/leader - name = "Cybersun Commando Leader" - leader = TRUE - outfit = /datum/outfit/job/syndicate/ert/cybersun/leader - role = "Lead Operative" - -/datum/antagonist/ert/syndicate/cybersun/medic - name = "Cybersun Paramedic" - outfit = /datum/outfit/job/syndicate/ert/cybersun/medic - role = "Medical Technician" - -/datum/antagonist/ert/syndicate/cybersun/medic/greet() - to_chat(owner, "You are the [name].") - var/missiondesc = "You are one of the many trained paramedics of Cybersun's Medical Intervention program, sent with your team to [station_name()] to aid Cybersun clients in distress.
" - if(leader) //If Squad Leader - missiondesc += "Lead your team to ensure the safety of Cybersun's clientele.
" - else - missiondesc += "Follow orders given to you by your Lead Technician. Assist Cybersun clients.
" - - missiondesc += "
Your Mission: [ert_team.mission.explanation_text]" - to_chat(owner,missiondesc) - -/datum/antagonist/ert/syndicate/cybersun/medic/leader - name = "Cybersun Lead Paramedic" - leader = TRUE - outfit = /datum/outfit/job/syndicate/ert/cybersun/medic/leader - role = "Lead Medical Technician" - -/datum/antagonist/ert/official/syndicate - name = "Syndicate Inspector" - outfit = /datum/outfit/job/syndicate/ert/inspector - role = "Syndicate Inspector" - -/datum/antagonist/ert/official/solgov/greet() - to_chat(owner, "You are a Syndicate Inspector.") - if (ert_team) - to_chat(owner, "The Syndicate Coalition is sending you to [station_name()] with the task: [ert_team.mission.explanation_text]") - else - to_chat(owner, "The Syndicate Coalition is sending you to [station_name()] with the task: [mission.explanation_text]") - -// ******************************************************************** -// ** Frontiersmen ** -// ******************************************************************** - -/datum/antagonist/ert/frontier - name = "Frontiersmen Pirate" - outfit = /datum/outfit/job/frontiersmen/ert - role = "Grunt" - -/datum/antagonist/ert/frontier/greet() - to_chat(owner, "You are the [name].") - var/missiondesc = "You are one of the ruthless, sadistic pirates in the Frontiersmen pirate fleet, stationed in [station_name()].
" - if(leader) //If Squad Leader - missiondesc += "Lead your team to complete your objectives." - else - missiondesc += "Follow orders given to you by your Officer." - - missiondesc += "
Your Mission: [ert_team.mission.explanation_text]" - to_chat(owner,missiondesc) - -/datum/antagonist/ert/frontier/random - outfit = /datum/outfit/job/frontiersmen/ert/random - -/datum/antagonist/ert/frontier/leader - name = "Frontiersmen Officer" - outfit = /datum/outfit/job/frontiersmen/ert/leader - role = "Officer" - -/datum/antagonist/ert/frontier/medic - name = "Frontiersmen Medic" - outfit = /datum/outfit/job/frontiersmen/ert/medic - role = "Stretcher-Bearer" - -/datum/antagonist/ert/frontier/engineer - name = "Frontiersmen Engineer" - outfit = /datum/outfit/job/frontiersmen/ert/engineer - role = "Sapper" - -// ******************************************************************** -// ** independent ** -// ******************************************************************** - -/datum/antagonist/ert/independent - name = "Independent Security Officer" - outfit = /datum/outfit/job/independent/ert - role = "Security Officer" - -/datum/antagonist/ert/independent/greet() - to_chat(owner, "You are the [name].") - var/missiondesc = "You are one of the many Independent contractors, workers and students on [station_name()].
" - if(leader) //If Squad Leader - missiondesc += "Lead your team to complete your objectives." - else - missiondesc += "Follow orders given to you by your leader." - - missiondesc += "
Your Mission: [ert_team.mission.explanation_text]" - to_chat(owner,missiondesc) - -/datum/antagonist/ert/independent/emt - name = "Independent Medical Technician" - outfit = /datum/outfit/job/independent/ert/emt - role = "Paramedic" - -/datum/antagonist/ert/independent/firefighter - name = "Independent Firefighter" - outfit = /datum/outfit/job/independent/ert/firefighter - role = "Firefighter" - -/datum/antagonist/ert/independent/firefighter/medic - name = "Independent Firefighter Paramedic" - outfit = /datum/outfit/job/independent/ert/firefighter/medic - role = "Paramedic" - -/datum/antagonist/ert/independent/firefighter/leader - name = "Independent Firefighter Group Captain" - outfit = /datum/outfit/job/independent/ert/firefighter/leader - role = "Group Captain" - -/datum/antagonist/ert/independent/technician - name = "Independent Technician" - outfit = /datum/outfit/job/independent/ert/technician - role = "Technician" diff --git a/code/modules/antagonists/ert/frontiersmen.dm b/code/modules/antagonists/ert/frontiersmen.dm new file mode 100644 index 000000000000..3c76dcebed9c --- /dev/null +++ b/code/modules/antagonists/ert/frontiersmen.dm @@ -0,0 +1,37 @@ +// ******************************************************************** +// ** Frontiersmen ** +// ******************************************************************** + +/datum/antagonist/ert/frontier + name = "Frontiersmen Pirate" + outfit = /datum/outfit/job/frontiersmen/ert + role = "Grunt" + +/datum/antagonist/ert/frontier/greet() + to_chat(owner, "You are the [name].") + var/missiondesc = "You are one of the ruthless, sadistic pirates in the Frontiersmen pirate fleet, stationed in [station_name()].
" + if(leader) //If Squad Leader + missiondesc += "Lead your team to complete your objectives." + else + missiondesc += "Follow orders given to you by your Officer." + + missiondesc += "
Your Mission: [ert_team.mission.explanation_text]" + to_chat(owner,missiondesc) + +/datum/antagonist/ert/frontier/random + outfit = /datum/outfit/job/frontiersmen/ert/random + +/datum/antagonist/ert/frontier/leader + name = "Frontiersmen Officer" + outfit = /datum/outfit/job/frontiersmen/ert/leader + role = "Officer" + +/datum/antagonist/ert/frontier/medic + name = "Frontiersmen Medic" + outfit = /datum/outfit/job/frontiersmen/ert/medic + role = "Stretcher-Bearer" + +/datum/antagonist/ert/frontier/engineer + name = "Frontiersmen Engineer" + outfit = /datum/outfit/job/frontiersmen/ert/engineer + role = "Sapper" diff --git a/code/modules/antagonists/ert/indie.dm b/code/modules/antagonists/ert/indie.dm new file mode 100644 index 000000000000..265af27bd2d4 --- /dev/null +++ b/code/modules/antagonists/ert/indie.dm @@ -0,0 +1,44 @@ +// ******************************************************************** +// ** independent ** +// ******************************************************************** + +/datum/antagonist/ert/independent + name = "Independent Security Officer" + outfit = /datum/outfit/job/independent/ert + role = "Security Officer" + +/datum/antagonist/ert/independent/greet() + to_chat(owner, "You are the [name].") + var/missiondesc = "You are one of the many Independent contractors, workers and students on [station_name()].
" + if(leader) //If Squad Leader + missiondesc += "Lead your team to complete your objectives." + else + missiondesc += "Follow orders given to you by your leader." + + missiondesc += "
Your Mission: [ert_team.mission.explanation_text]" + to_chat(owner,missiondesc) + +/datum/antagonist/ert/independent/emt + name = "Independent Medical Technician" + outfit = /datum/outfit/job/independent/ert/emt + role = "Paramedic" + +/datum/antagonist/ert/independent/firefighter + name = "Independent Firefighter" + outfit = /datum/outfit/job/independent/ert/firefighter + role = "Firefighter" + +/datum/antagonist/ert/independent/firefighter/medic + name = "Independent Firefighter Paramedic" + outfit = /datum/outfit/job/independent/ert/firefighter/medic + role = "Paramedic" + +/datum/antagonist/ert/independent/firefighter/leader + name = "Independent Firefighter Group Captain" + outfit = /datum/outfit/job/independent/ert/firefighter/leader + role = "Group Captain" + +/datum/antagonist/ert/independent/technician + name = "Independent Technician" + outfit = /datum/outfit/job/independent/ert/technician + role = "Technician" diff --git a/code/modules/antagonists/ert/inteq.dm b/code/modules/antagonists/ert/inteq.dm new file mode 100644 index 000000000000..591ad684cc1d --- /dev/null +++ b/code/modules/antagonists/ert/inteq.dm @@ -0,0 +1,24 @@ +/datum/antagonist/ert/inteq + name = "Inteq Mercenary" + outfit = /datum/outfit/job/inteq/security + random_names = TRUE + role = "Enforcer" + + +/datum/antagonist/ert/inteq/greet() + to_chat(owner, "You are the [name].") + var/missiondesc = "You're one of the many mercenaries under the Inteq Risk Management Group sent to [station_name()].
" + if(leader) //If Squad Leader + missiondesc += "Lead your squadron to ensure the completion of your contract." + else + missiondesc += "Follow orders given to you by your Vanguard." + if(deathsquad) + missiondesc += "Leave no witnesses." + + missiondesc += "
Contract Terms: [ert_team.mission.explanation_text]" + to_chat(owner,missiondesc) + +/datum/antagonist/ert/inteq/leader + name = "Inteq Mercenary Leader" + outfit = /datum/outfit/job/inteq/captain + role = "Vanguard" diff --git a/code/modules/antagonists/ert/minutemen.dm b/code/modules/antagonists/ert/minutemen.dm new file mode 100644 index 000000000000..3799e36bff28 --- /dev/null +++ b/code/modules/antagonists/ert/minutemen.dm @@ -0,0 +1,72 @@ +// ******************************************************************** +// ** Minutemen ** +// ******************************************************************** + +/datum/antagonist/ert/minutemen + name = "Minutemen Infantry" + outfit = /datum/outfit/job/minutemen/ert + role = "Minuteman" + +/datum/antagonist/ert/minutemen/greet() + to_chat(owner, "You are the [name].") + var/missiondesc = "You stand shoulder to shoulder with your fellow colonists in the Colonial Minutemen within [station_name()].
" + if(leader) //If Squad Leader + missiondesc += "Lead your team to ensure the completion of your objectives." + else + missiondesc += "Follow orders given to you by your Sergent." + if(deathsquad) + missiondesc += "Leave no witnesses." + + missiondesc += "
Your Mission: [ert_team.mission.explanation_text]" + to_chat(owner,missiondesc) + +/datum/antagonist/ert/minutemen/leader + name = "Minutemen Leader" + leader = TRUE + outfit = /datum/outfit/job/minutemen/ert/leader + role = "Sergeant" + +/datum/antagonist/ert/minutemen/bard + name = "BARD Infantry" + outfit = /datum/outfit/job/minutemen/ert/bard + role = "Minuteman" + +/datum/antagonist/ert/minutemen/bard/leader + name = "BARD Sergeant" + leader = TRUE + outfit = /datum/outfit/job/minutemen/ert/bard/leader + role = "Sergeant" + +/datum/antagonist/ert/minutemen/riot + name = "Riot Officer" + outfit = /datum/outfit/job/minutemen/ert/riot + role = "Minuteman" + +/datum/antagonist/ert/minutemen/riot/leader + name = "Riot Sergeant" + leader = TRUE + outfit = /datum/outfit/job/minutemen/ert/riot/leader + role = "Sergeant" + +/datum/antagonist/ert/official/minutemen + name = "GOLD Inspector" + outfit = /datum/outfit/job/minutemen/ert/inspector + role = "Lieutenant" + +/datum/antagonist/ert/official/minutemen/greet() + to_chat(owner, "You are the GOLD Inspector.") + if (ert_team) + to_chat(owner, "You are part of The Galactic Optimum Labor Division, a division of the Colonial League. Your task: [ert_team.mission.explanation_text]") + else + to_chat(owner, "You are part of The Galactic Optimum Labor Division, a division of the Colonial League. Your task: [ert_team.mission.explanation_text]") + +/datum/antagonist/ert/minutemen/piratehunters + name = "Pirate Hunter" + outfit = /datum/outfit/job/minutemen/ert/pirate_hunter + role = "Minuteman" + +/datum/antagonist/ert/minutemen/piratehunters/leader + name = "Pirate Hunter Leader" + leader = TRUE + outfit = /datum/outfit/job/minutemen/ert/pirate_hunter/leader + role = "Sergeant" diff --git a/code/modules/antagonists/ert/nanotrasen.dm b/code/modules/antagonists/ert/nanotrasen.dm new file mode 100644 index 000000000000..11537e4bcea9 --- /dev/null +++ b/code/modules/antagonists/ert/nanotrasen.dm @@ -0,0 +1,152 @@ +// Official +/datum/antagonist/ert/official + name = "CentCom Official" + show_name_in_check_antagonists = TRUE + var/datum/objective/mission + role = "Inspector" + random_names = FALSE + outfit = /datum/outfit/centcom/centcom_official + +/datum/antagonist/ert/official/greet() + to_chat(owner, "You are a CentCom Official.") + if (ert_team) + to_chat(owner, "Central Command is sending you to [station_name()] with the task: [ert_team.mission.explanation_text]") + else + to_chat(owner, "Central Command is sending you to [station_name()] with the task: [mission.explanation_text]") + +/datum/antagonist/ert/official/forge_objectives() + if (ert_team) + return ..() + if(mission) + return + var/datum/objective/missionobj = new () + missionobj.owner = owner + missionobj.explanation_text = "Conduct a routine performance review of [station_name()]'s vessels." + missionobj.completed = TRUE + mission = missionobj + objectives |= mission + +// Standard ERT + +/datum/antagonist/ert/security // kinda handled by the base template but here for completion + +/datum/antagonist/ert/security/red + outfit = /datum/outfit/centcom/ert/security/alert + +/datum/antagonist/ert/engineer + role = "Engineer" + outfit = /datum/outfit/centcom/ert/engineer + +/datum/antagonist/ert/engineer/red + outfit = /datum/outfit/centcom/ert/engineer/alert + +/datum/antagonist/ert/medic + role = "Medical Officer" + outfit = /datum/outfit/centcom/ert/medic + +/datum/antagonist/ert/medic/red + outfit = /datum/outfit/centcom/ert/medic/alert + +/datum/antagonist/ert/commander + role = "Commander" + outfit = /datum/outfit/centcom/ert/commander + +/datum/antagonist/ert/commander/red + outfit = /datum/outfit/centcom/ert/commander/alert + +// Deathsquad + +/datum/antagonist/ert/deathsquad + name = "Deathsquad Trooper" + outfit = /datum/outfit/centcom/death_commando + role = "Trooper" + deathsquad = TRUE + +/datum/antagonist/ert/deathsquad/leader + name = "Deathsquad Officer" + outfit = /datum/outfit/centcom/death_commando + role = "Officer" + +/datum/antagonist/ert/deathsquad/New() + . = ..() + name_source = GLOB.commando_names + +/datum/antagonist/ert/deathsquad/apply_innate_effects(mob/living/mob_override) + ADD_TRAIT(owner, TRAIT_DISK_VERIFIER, DEATHSQUAD_TRAIT) + +/datum/antagonist/ert/deathsquad/remove_innate_effects(mob/living/mob_override) + REMOVE_TRAIT(owner, TRAIT_DISK_VERIFIER, DEATHSQUAD_TRAIT) + +// Janitor + +/datum/antagonist/ert/janitor + role = "Janitor" + outfit = /datum/outfit/centcom/ert/janitor + +/datum/antagonist/ert/janitor/heavy + role = "Heavy Duty Janitor" + outfit = /datum/outfit/centcom/ert/janitor/heavy + +// Intern + +/datum/antagonist/ert/intern + name = "CentCom Intern" + outfit = /datum/outfit/centcom/centcom_intern + random_names = FALSE + role = "Intern" + +/datum/antagonist/ert/intern/leader + name = "CentCom Head Intern" + outfit = /datum/outfit/centcom/centcom_intern/leader + role = "Head Intern" + +/datum/antagonist/ert/intern/unarmed + outfit = /datum/outfit/centcom/centcom_intern/unarmed + +/datum/antagonist/ert/intern/leader/unarmed + outfit = /datum/outfit/centcom/centcom_intern/leader/unarmed + +// Marine + +/datum/antagonist/ert/marine + name = "Marine Commander" + outfit = /datum/outfit/centcom/ert/marine + role = "Commander" + +/datum/antagonist/ert/marine/security + name = "Marine Heavy" + outfit = /datum/outfit/centcom/ert/marine/security + role = "Trooper" + +/datum/antagonist/ert/marine/engineer + name = "Marine Engineer" + outfit = /datum/outfit/centcom/ert/marine/engineer + role = "Engineer" + +/datum/antagonist/ert/marine/medic + name = "Marine Medic" + outfit = /datum/outfit/centcom/ert/marine/medic + role = "Medical Officer" + +// Loss Prevention + +/datum/antagonist/ert/lp + name = "Loss Prevention Security Specialist" + outfit = /datum/outfit/job/nanotrasen/security/ert/lp + role = "Security Specialist" + +/datum/antagonist/ert/lp/medic + name = "Loss Prevention Medical Specialist" + outfit = /datum/outfit/job/nanotrasen/security/ert/lp/medic + role = "Medical Specialist" + +/datum/antagonist/ert/lp/engineer + name = "Loss Prevention Engineering Specialist" + outfit = /datum/outfit/job/nanotrasen/security/ert/lp/engineer + role = "Engineering Specialist" + +/datum/antagonist/ert/lp/lieutenant + name = "Loss Prevention Lieutenant" + leader = TRUE + outfit = /datum/outfit/job/nanotrasen/security/ert/lp/lieutenant + role = "Lieutenant" diff --git a/code/modules/antagonists/ert/solgov.dm b/code/modules/antagonists/ert/solgov.dm new file mode 100644 index 000000000000..6868fe9eb9bf --- /dev/null +++ b/code/modules/antagonists/ert/solgov.dm @@ -0,0 +1,20 @@ +// ******************************************************************** +// ** SolGov ** +// ******************************************************************** +/datum/antagonist/ert/solgov + name = "SolGov Sonnensöldner" + outfit = /datum/outfit/job/solgov/ert + random_names = FALSE + role = "Sonnensöldner" + +/datum/antagonist/ert/official/solgov + name = "SolGov Inspector" + outfit = /datum/outfit/job/solgov/ert/inspector + role = "Solarian Inspector" + +/datum/antagonist/ert/official/solgov/greet() + to_chat(owner, "You are a Solarian Inspector.") + if (ert_team) + to_chat(owner, "The Department of Administrative Affairs is sending you to [station_name()] with the task: [ert_team.mission.explanation_text]") + else + to_chat(owner, "The Department of Administrative Affairs is sending you to [station_name()] with the task: [mission.explanation_text]") diff --git a/code/modules/antagonists/ert/syndicate.dm b/code/modules/antagonists/ert/syndicate.dm new file mode 100644 index 000000000000..ab8fa4abc5f7 --- /dev/null +++ b/code/modules/antagonists/ert/syndicate.dm @@ -0,0 +1,122 @@ +/datum/antagonist/ert/syndicate + name = "Syndicate Infantry" + outfit = /datum/outfit/job/syndicate/ert + role = "Squaddie" + +/datum/antagonist/ert/syndicate/greet() + to_chat(owner, "You are the [name].") + var/missiondesc = "You are but another member of the Syndicate sent to [station_name()].
" + if(leader) //If Squad Leader + missiondesc += "Lead your team to ensure the completion of your objectives." + else + missiondesc += "Follow orders given to you by your Sergeant." + if(deathsquad) + missiondesc += "Leave no witnesses." + + missiondesc += "
Your Mission: [ert_team.mission.explanation_text]" + to_chat(owner,missiondesc) + +/datum/antagonist/ert/syndicate/leader + name = "Syndicate Sergeant" + leader = TRUE + outfit = /datum/outfit/job/syndicate/ert/leader + role = "Sergeant" + +/datum/antagonist/ert/syndicate/gorlex + name = "2nd Battlegroup Trooper" + outfit = /datum/outfit/job/syndicate/ert/gorlex + role = "Trooper" + +/datum/antagonist/ert/syndicate/gorlex/greet() + to_chat(owner, "You are the [name].") + var/missiondesc = "You're a soldier of the New Gorlex Republic sent to [station_name()].
" + if(leader) //If Squad Leader + missiondesc += "Lead your team to ensure the completion of your objectives." + else + missiondesc += "Follow orders given to you by your Sergeant." + + missiondesc += "
Your Mission: [ert_team.mission.explanation_text]" + to_chat(owner,missiondesc) + +/datum/antagonist/ert/syndicate/gorlex/pointman + name = "Gorlex Republic Shotgunner" + outfit = /datum/outfit/job/syndicate/ert/gorlex/pointman + role = "Pointman" + +/datum/antagonist/ert/syndicate/gorlex/medic + name = "Gorlex Republic Medic" + outfit = /datum/outfit/job/syndicate/ert/gorlex/medic + role = "Medic" + +/datum/antagonist/ert/syndicate/gorlex/sniper + name = "Gorlex Republic Sniper" + outfit = /datum/outfit/job/syndicate/ert/gorlex/sniper + role = "Marksman" + +/datum/antagonist/ert/syndicate/gorlex/leader + name = "Gorlex Republic Sergeant" + leader = TRUE + outfit = /datum/outfit/job/syndicate/ert/gorlex/leader + role = "Sergeant" + +// cybersun + +/datum/antagonist/ert/syndicate/cybersun + name = "Cybersun Commando" + outfit = /datum/outfit/job/syndicate/ert/cybersun + role = "Operative" + +/datum/antagonist/ert/syndicate/cybersun/greet() + to_chat(owner, "You are the [name].") + var/missiondesc = "You are one of the commandos enlisted in Cybersun Industries, deployed to [station_name()].
" + if(leader) //If Squad Leader + missiondesc += "Lead your team to ensure the completion of your objectives." + else + missiondesc += "Follow orders given to you by your Sergeant." + if(prob(50) && !leader) + missiondesc += "
In addition to your contract with Cybersun, you are also a Gorlex Hardliner. You do not like Cybersun, but you work with them regardless." + + missiondesc += "
Your Mission: [ert_team.mission.explanation_text]" + to_chat(owner,missiondesc) + +/datum/antagonist/ert/syndicate/cybersun/leader + name = "Cybersun Commando Leader" + leader = TRUE + outfit = /datum/outfit/job/syndicate/ert/cybersun/leader + role = "Lead Operative" + +/datum/antagonist/ert/syndicate/cybersun/medic + name = "Cybersun Paramedic" + outfit = /datum/outfit/job/syndicate/ert/cybersun/medic + role = "Medical Technician" + +/datum/antagonist/ert/syndicate/cybersun/medic/greet() + to_chat(owner, "You are the [name].") + var/missiondesc = "You are one of the many trained paramedics of Cybersun's Medical Intervention program, sent with your team to [station_name()] to aid Cybersun clients in distress.
" + if(leader) //If Squad Leader + missiondesc += "Lead your team to ensure the safety of Cybersun's clientele.
" + else + missiondesc += "Follow orders given to you by your Lead Technician. Assist Cybersun clients.
" + + missiondesc += "
Your Mission: [ert_team.mission.explanation_text]" + to_chat(owner,missiondesc) + +/datum/antagonist/ert/syndicate/cybersun/medic/leader + name = "Cybersun Lead Paramedic" + leader = TRUE + outfit = /datum/outfit/job/syndicate/ert/cybersun/medic/leader + role = "Lead Medical Technician" + +// inspector + +/datum/antagonist/ert/official/syndicate + name = "Syndicate Inspector" + outfit = /datum/outfit/job/syndicate/ert/inspector + role = "Syndicate Inspector" + +/datum/antagonist/ert/official/syndicate/greet() + to_chat(owner, "You are a Syndicate Inspector.") + if (ert_team) + to_chat(owner, "The Syndicate Coalition is sending you to [station_name()] with the task: [ert_team.mission.explanation_text]") + else + to_chat(owner, "The Syndicate Coalition is sending you to [station_name()] with the task: [mission.explanation_text]") diff --git a/shiptest.dme b/shiptest.dme index 7b712252299e..c54f2b411a37 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -1675,6 +1675,13 @@ #include "code\modules\antagonists\disease\disease_event.dm" #include "code\modules\antagonists\disease\disease_mob.dm" #include "code\modules\antagonists\ert\ert.dm" +#include "code\modules\antagonists\ert\frontiersmen.dm" +#include "code\modules\antagonists\ert\indie.dm" +#include "code\modules\antagonists\ert\inteq.dm" +#include "code\modules\antagonists\ert\minutemen.dm" +#include "code\modules\antagonists\ert\nanotrasen.dm" +#include "code\modules\antagonists\ert\solgov.dm" +#include "code\modules\antagonists\ert\syndicate.dm" #include "code\modules\antagonists\fugitive\fugitive_outfits.dm" #include "code\modules\antagonists\gang\outfits.dm" #include "code\modules\antagonists\greentext\greentext.dm" From 200d2b327c784ec8d1d36b6144ce8fd814116041 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Mon, 4 Mar 2024 01:54:04 -0600 Subject: [PATCH 10/30] Automatic changelog generation for PR #2744 [ci skip] --- html/changelogs/AutoChangeLog-pr-2744.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2744.yml diff --git a/html/changelogs/AutoChangeLog-pr-2744.yml b/html/changelogs/AutoChangeLog-pr-2744.yml new file mode 100644 index 000000000000..dda34f8111b8 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2744.yml @@ -0,0 +1,5 @@ +author: meemofcourse +changes: + - {code_imp: ERT antag datums are now sorted into factional files} + - {admin: ERTs can have limited special roles} +delete-after: true From a11ba58db7058fb6bbcdb7e021c8d553c2f748fc Mon Sep 17 00:00:00 2001 From: thgvr <81882910+thgvr@users.noreply.github.com> Date: Sun, 3 Mar 2024 22:41:42 -0800 Subject: [PATCH 11/30] maybe fixes fishing (#2739) ## About The Pull Request This might fix fishing it worked locally ## Changelog :cl: fix: Fishing shouldn't fail constantly anymore fix: Fish on the floor will die again /:cl: --- code/modules/fishing/fish/_fish.dm | 12 ++++++------ code/modules/fishing/fishing_minigame.dm | 7 ++++++- code/modules/fishing/fishing_rod.dm | 4 ++-- tgui/packages/tgui/interfaces/Fishing.tsx | 4 +--- 4 files changed, 15 insertions(+), 12 deletions(-) diff --git a/code/modules/fishing/fish/_fish.dm b/code/modules/fishing/fish/_fish.dm index 48219cf98f2f..82edb0698208 100644 --- a/code/modules/fishing/fish/_fish.dm +++ b/code/modules/fishing/fish/_fish.dm @@ -33,7 +33,7 @@ /// What type of reagent this fish needs to be fed. var/food = /datum/reagent/consumable/nutriment /// How often the fish needs to be fed - var/feeding_frequency = 20 MINUTES + var/feeding_frequency = 30 MINUTES /// Time of last feedeing var/last_feeding @@ -263,12 +263,14 @@ /obj/item/fish/proc/process_health(delta_time) var/health_change_per_second = 0 + if(!proper_environment()) health_change_per_second -= 3 //Dying here - if(world.time - last_feeding <= feeding_frequency) - health_change_per_second += 0.5 //Slowly healing + if(world.time - last_feeding >= feeding_frequency) + health_change_per_second -= 0.5 //Starving else - return + health_change_per_second += 0.5 //Slowly healing + adjust_health(health + health_change_per_second) /obj/item/fish/proc/adjust_health(amt) @@ -291,8 +293,6 @@ return if(length(aquarium.tracked_fish) >= AQUARIUM_MAX_BREEDING_POPULATION) //so aquariums full of fish don't need to do these expensive checks return - if(world.time - last_feeding >= feeding_frequency) - return var/list/other_fish_of_same_type = list() for(var/obj/item/fish/fish_in_aquarium in aquarium) if(fish_in_aquarium == src || fish_in_aquarium.type != type) diff --git a/code/modules/fishing/fishing_minigame.dm b/code/modules/fishing/fishing_minigame.dm index 18db513aa6ee..eeb0696315ed 100644 --- a/code/modules/fishing/fishing_minigame.dm +++ b/code/modules/fishing/fishing_minigame.dm @@ -71,6 +71,9 @@ QDEL_NULL(fishing_line) if(lure) QDEL_NULL(lure) + SStgui.close_uis(src) + user = null + used_rod = null . = ..() /datum/fishing_challenge/proc/start(mob/user) @@ -105,6 +108,8 @@ complete(FALSE) /datum/fishing_challenge/proc/complete(win = FALSE, perfect_win = FALSE) + if(completed) + return deltimer(next_phase_timer) completed = TRUE if(user) @@ -125,7 +130,7 @@ if(reward_path != FISHING_DUD) playsound(lure, 'sound/effects/bigsplash.ogg', 100) else - user.balloon_alert(user, "it got away") + user.balloon_alert(user, "it got away!") SEND_SIGNAL(src, COMSIG_FISHING_CHALLENGE_COMPLETED, user, win, perfect_win) qdel(src) diff --git a/code/modules/fishing/fishing_rod.dm b/code/modules/fishing/fishing_rod.dm index aa6841f7f355..cfcf3d9e6126 100644 --- a/code/modules/fishing/fishing_rod.dm +++ b/code/modules/fishing/fishing_rod.dm @@ -51,7 +51,7 @@ /obj/item/fishing_rod/proc/fish_bonus(fish_type) return 0 -/obj/item/fishing_rod/proc/consume_bait() +/obj/item/fishing_rod/proc/consume_bait(atom/movable/reward) if(bait) QDEL_NULL(bait) update_appearance() @@ -137,7 +137,7 @@ SIGNAL_HANDLER . = NONE - if(!CheckToolReach(src, source.target, cast_range)) + if(!isturf(source.origin) || !isturf(source.target) || !CheckToolReach(src, source.target, cast_range)) SEND_SIGNAL(source, COMSIG_FISHING_LINE_SNAPPED) //Stepped out of range or los interrupted return BEAM_CANCEL_DRAW diff --git a/tgui/packages/tgui/interfaces/Fishing.tsx b/tgui/packages/tgui/interfaces/Fishing.tsx index 2bd9e0426733..22215bf47492 100644 --- a/tgui/packages/tgui/interfaces/Fishing.tsx +++ b/tgui/packages/tgui/interfaces/Fishing.tsx @@ -8,7 +8,7 @@ import { import { useDispatch } from 'common/redux'; import { Component } from 'inferno'; import { resolveAsset } from '../assets'; -import { backendSuspendStart, useBackend } from '../backend'; +import { useBackend } from '../backend'; import { Icon } from '../components'; import { globalEvents } from '../events'; import { Window } from '../layouts'; @@ -360,10 +360,8 @@ class FishingMinigame extends Component< if (newCompletion <= 0) { this.props.lose(); - dispatch(backendSuspendStart()); } else if (newCompletion >= 100) { this.props.win(this.perfect); - dispatch(backendSuspendStart()); } return newState; From 123d9242278edb23b32acc3647656e8adb5907d5 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Mon, 4 Mar 2024 02:11:33 -0600 Subject: [PATCH 12/30] Automatic changelog generation for PR #2739 [ci skip] --- html/changelogs/AutoChangeLog-pr-2739.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2739.yml diff --git a/html/changelogs/AutoChangeLog-pr-2739.yml b/html/changelogs/AutoChangeLog-pr-2739.yml new file mode 100644 index 000000000000..471bb5250de2 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2739.yml @@ -0,0 +1,5 @@ +author: thgvr +changes: + - {bugfix: Fishing shouldn't fail constantly anymore} + - {bugfix: Fish on the floor will die again} +delete-after: true From 9ecda6f0310acd203b1f6f1859bfde20d35a47fc Mon Sep 17 00:00:00 2001 From: meem <75212565+meemofcourse@users.noreply.github.com> Date: Mon, 4 Mar 2024 03:42:55 -0300 Subject: [PATCH 13/30] mitigates paper fields lagging out a lot (#2738) ## About The Pull Request Finishes porting https://github.com/tgstation/tgstation/pull/73628 ## Why It's Good For The Game paperlag bad ## Changelog :cl: Timberpoes fix: Papercode has been significantly improved and trivially filled paper forms should no longer lag or crash players' game clients. /:cl: --- tgui/packages/tgui/interfaces/PaperSheet.tsx | 112 +++++++++++++++++-- 1 file changed, 101 insertions(+), 11 deletions(-) diff --git a/tgui/packages/tgui/interfaces/PaperSheet.tsx b/tgui/packages/tgui/interfaces/PaperSheet.tsx index 1151c7ce9a59..beda23bd4a0a 100644 --- a/tgui/packages/tgui/interfaces/PaperSheet.tsx +++ b/tgui/packages/tgui/interfaces/PaperSheet.tsx @@ -430,10 +430,83 @@ export class PreviewView extends Component { // Array containing cache of HTMLInputElements that are enabled. enabledInputFieldCache: { [key: string]: HTMLInputElement } = {}; + // State checking variables. Used to determine whether or not to use cache. + lastReadOnly: boolean = true; + lastDMInputCount: number = 0; + lastFieldCount: number = 0; + lastFieldInputCount: number = 0; + + // Cache variables for fully parsed text. Workaround for marked.js not being + // super fast on the BYOND/IE js engine. + parsedDMCache: string = ''; + parsedTextBoxCache: string = ''; + constructor(props, context) { super(props, context); + this.configureMarked(); } + configureMarked = (): void => { + // This is an extension for marked defining a complete custom tokenizer. + // This tokenizer should run before the the non-custom ones, and gives us + // the ability to handle [_____] fields before the em/strong tokenizers + // mangle them, since underscores are used for italic/bold. + // This massively improves the order of operations, allowing us to run + // marked, THEN sanitise the output (much safer) and finally insert fields + // manually afterwards. + const inputField = { + name: 'inputField', + level: 'inline', + + start(src) { + return src.match(/\[/)?.index; + }, + + tokenizer(src: string) { + const rule = /^\[_+\]/; + const match = src.match(rule); + if (match) { + const token = { + type: 'inputField', + raw: match[0], + }; + return token; + } + }, + + renderer(token) { + return `${token.raw}`; + }, + }; + + // Override function, any links and images should + // kill any other marked tokens we don't want here + const walkTokens = (token) => { + switch (token.type) { + case 'url': + case 'autolink': + case 'reflink': + case 'link': + case 'image': + token.type = 'text'; + // Once asset system is up change to some default image + // or rewrite for icon images + token.href = ''; + break; + } + }; + + marked.use({ + extensions: [inputField], + breaks: true, + gfm: true, + smartypants: true, + walkTokens: walkTokens, + // Once assets are fixed might need to change this for them + baseUrl: 'thisshouldbreakhttp', + }); + }; + // Extracts the paper field "counter" from a full ID. getHeaderID = (header: string): string => { return header.replace('paperfield_', ''); @@ -457,6 +530,7 @@ export class PreviewView extends Component { // Skip text area input. if (input.nodeName !== 'INPUT') { + this.parsedTextBoxCache = ''; return; } @@ -494,6 +568,7 @@ export class PreviewView extends Component { createPreviewFromDM = (): { text: string; newFieldCount: number } => { const { data } = useBackend(this.context); const { + raw_field_input, raw_text_input, default_pen_font, default_pen_color, @@ -506,6 +581,19 @@ export class PreviewView extends Component { const readOnly = !canEdit(held_item_details); + // If readonly is the same (input field writiability state hasn't changed) + // And the input stats are the same (no new text inputs since last time) + // Then use any cached values. + if ( + this.lastReadOnly === readOnly && + this.lastDMInputCount === raw_text_input?.length && + this.lastFieldInputCount === raw_field_input?.length + ) { + return { text: this.parsedDMCache, newFieldCount: this.lastFieldCount }; + } + + this.lastReadOnly = readOnly; + raw_text_input?.forEach((value) => { let rawText = value.raw_text.trim(); if (!rawText.length) { @@ -533,6 +621,11 @@ export class PreviewView extends Component { fieldCount = processingOutput.nextCounter; }); + this.lastDMInputCount = raw_text_input?.length || 0; + this.lastFieldInputCount = raw_field_input?.length || 0; + this.lastFieldCount = fieldCount; + this.parsedDMCache = output; + return { text: output, newFieldCount: fieldCount }; }; @@ -548,6 +641,11 @@ export class PreviewView extends Component { } = data; const { textArea } = this.props; + // Use the cache if one exists. + if (this.parsedTextBoxCache) { + return this.parsedTextBoxCache; + } + const readOnly = true; const fontColor = held_item_details?.color || default_pen_color; @@ -564,6 +662,8 @@ export class PreviewView extends Component { readOnly ); + this.parsedTextBoxCache = processingOutput.text; + return processingOutput.text; }; @@ -630,17 +730,7 @@ export class PreviewView extends Component { }, }; - // marked.use({ tokenizer }); - marked.use({ extensions: [inputField] }); - - return marked.parse(rawText, { - breaks: true, - smartypants: true, - smartLists: true, - walkTokens, - // Once assets are fixed might need to change this for them - baseUrl: 'thisshouldbreakhttp', - }); + return marked.parse(rawText); }; // Fully formats, sanitises and parses the provided raw text and wraps it From ade4ae9162c722cdc04db1f5d2005de1304f39c7 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Mon, 4 Mar 2024 02:29:37 -0600 Subject: [PATCH 14/30] Automatic changelog generation for PR #2738 [ci skip] --- html/changelogs/AutoChangeLog-pr-2738.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2738.yml diff --git a/html/changelogs/AutoChangeLog-pr-2738.yml b/html/changelogs/AutoChangeLog-pr-2738.yml new file mode 100644 index 000000000000..b61da0a455ae --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2738.yml @@ -0,0 +1,5 @@ +author: Timberpoes +changes: + - {bugfix: Papercode has been significantly improved and trivially filled paper + forms should no longer lag or crash players' game clients.} +delete-after: true From 71259a278e06f5e72f2fcec01cc71572f4e5dfe4 Mon Sep 17 00:00:00 2001 From: Mark Suckerberg Date: Mon, 4 Mar 2024 00:43:15 -0600 Subject: [PATCH 15/30] Multiple runtime error fixes (#2720) ## About The Pull Request Basically just goes down the list for most frequent runtimes and tries to fix them one way or another. ## Why It's Good For The Game Runtime errors shouldn't happen ## Changelog :cl: fix: Headpikes actually work again fix: Reinforced floors now don't spawn metal when decompression is experienced /:cl: --------- Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> Co-authored-by: Ghommie <425422238+Ghommie@users.noreply.github.com> Co-authored-by: ShizCalev --- code/__DEFINES/dcs/signals.dm | 4 +- .../__DEFINES/important_recursive_contents.dm | 2 + code/__DEFINES/traits.dm | 10 ++ code/__HELPERS/unsorted.dm | 11 ++ code/datums/components/beauty.dm | 38 ------ code/datums/components/fantasy/prefixes.dm | 26 ++++ code/datums/components/mood.dm | 4 + code/datums/components/pellet_cloud.dm | 6 +- code/datums/components/weatherannouncer.dm | 2 +- code/datums/elements/beauty.dm | 76 ++++++++++++ code/datums/materials/_material.dm | 7 +- code/datums/materials/basemats.dm | 4 +- code/datums/materials/meat.dm | 2 +- code/datums/materials/pizza.dm | 2 +- code/game/area/areas.dm | 22 ++-- code/game/atoms.dm | 2 +- code/game/atoms_movable.dm | 116 ++++++++++-------- code/game/machinery/_machinery.dm | 2 + code/game/objects/effects/contraband.dm | 2 +- code/game/objects/effects/decals/cleanable.dm | 3 +- .../game/objects/items/stacks/sheets/glass.dm | 14 +-- code/game/objects/items/weaponry.dm | 2 +- code/game/objects/objs.dm | 3 + code/game/objects/structures/flora.dm | 2 +- code/game/objects/structures/girders.dm | 14 ++- code/game/objects/structures/grille.dm | 6 +- code/game/objects/structures/headpike.dm | 54 +++++--- code/game/objects/structures/statues.dm | 2 +- code/game/turfs/change_turf.dm | 4 - code/game/turfs/open/floor/reinf_floor.dm | 3 + .../environmental/LINDA_turf_tile.dm | 1 + .../awaymissions/mission_code/snowdin.dm | 3 +- code/modules/cargo/centcom_podlauncher.dm | 4 +- code/modules/cargo/supplypod.dm | 8 +- code/modules/events/spacevine.dm | 9 +- .../mining/lavaland/necropolis_chests.dm | 2 +- code/modules/mob/dead/observer/observer.dm | 7 +- code/modules/mob/living/carbon/human/human.dm | 19 +-- .../living/carbon/human/species_types/vox.dm | 22 ++-- .../mob/living/carbon/human/update_icons.dm | 4 +- code/modules/research/rdconsole.dm | 8 +- code/modules/screen_alerts/_screen_alerts.dm | 2 + code/modules/shuttle/special.dm | 9 +- shiptest.dme | 2 +- 44 files changed, 362 insertions(+), 183 deletions(-) delete mode 100644 code/datums/components/beauty.dm create mode 100644 code/datums/elements/beauty.dm diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index 2048d0a178a7..ea2585df835d 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -225,8 +225,8 @@ ///////////////// -#define COMSIG_ENTER_AREA "enter_area" //from base of area/Entered(): (/area) -#define COMSIG_EXIT_AREA "exit_area" //from base of area/Exited(): (/area) +#define COMSIG_ENTER_AREA "enter_area" //from base of area/Entered(): (/area). Sent to "area-sensitive" movables, see __DEFINES/traits.dm for info. +#define COMSIG_EXIT_AREA "exit_area" //from base of area/Exited(): (/area). Sent to "area-sensitive" movables, see __DEFINES/traits.dm for info. #define COMSIG_CLICK "atom_click" //from base of atom/Click(): (location, control, params, mob/user) #define COMSIG_CLICK_SHIFT "shift_click" //from base of atom/ShiftClick(): (/mob) diff --git a/code/__DEFINES/important_recursive_contents.dm b/code/__DEFINES/important_recursive_contents.dm index 62be5b38e539..f1dc0bd3ea18 100644 --- a/code/__DEFINES/important_recursive_contents.dm +++ b/code/__DEFINES/important_recursive_contents.dm @@ -1,2 +1,4 @@ +///the area channel of the important_recursive_contents list, everything in here will be sent a signal when their last holding object changes areas +#define RECURSIVE_CONTENTS_AREA_SENSITIVE "recursive_contents_area_sensitive" ///the hearing channel of the important_recursive_contents list, everything in here will count as a hearing atom #define RECURSIVE_CONTENTS_HEARING_SENSITIVE "recursive_contents_hearing_sensitive" diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 69de29d4cd70..f1289d15bdbc 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -272,6 +272,13 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_HEARING_SENSITIVE "hearing_sensitive" +/* + * Used for movables that need to be updated, via COMSIG_ENTER_AREA and COMSIG_EXIT_AREA, when transitioning areas. + * Use [/atom/movable/proc/become_area_sensitive(trait_source)] to properly enable it. How you remove it isn't as important. + */ +#define TRAIT_AREA_SENSITIVE "area-sensitive" + +///Used for managing KEEP_TOGETHER in [/atom/var/appearance_flags] #define TRAIT_KEEP_TOGETHER "keep-together" // item traits @@ -426,6 +433,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_FISH_CASE_COMPATIBILE "fish_case_compatibile" /// Granted by prismwine #define TRAIT_REFLECTIVE "reflective" +/// Self-explainatory. +#define BEAUTY_ELEMENT_TRAIT "beauty_element" +#define MOOD_COMPONENT_TRAIT "mood_component" /// Trait granted by [mob/living/silicon/ai] /// Applied when the ai anchors itself diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 94039f138721..8e9a1dbc9979 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -1558,3 +1558,14 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) return call(source, proctype)(arglist(arguments)) #define TURF_FROM_COORDS_LIST(List) (locate(List[1], List[2], List[3])) + +/proc/normalize_dir_to_cardinals(dir) + if(dir & NORTH) + return NORTH + if(dir & SOUTH) + return SOUTH + if(dir & EAST) + return EAST + if(dir & WEST) + return WEST + return 0 diff --git a/code/datums/components/beauty.dm b/code/datums/components/beauty.dm deleted file mode 100644 index fe3c06e3ad5a..000000000000 --- a/code/datums/components/beauty.dm +++ /dev/null @@ -1,38 +0,0 @@ -/datum/component/beauty - var/beauty = 0 - -/datum/component/beauty/Initialize(beautyamount) - if(!isatom(parent) || isarea(parent)) - return COMPONENT_INCOMPATIBLE - - beauty = beautyamount - - if(ismovable(parent)) - RegisterSignal(parent, COMSIG_ENTER_AREA, PROC_REF(enter_area)) - RegisterSignal(parent, COMSIG_EXIT_AREA, PROC_REF(exit_area)) - - var/area/A = get_area(parent) - if(A) - enter_area(null, A) - -/datum/component/beauty/proc/enter_area(datum/source, area/A) - SIGNAL_HANDLER - - if(A.outdoors) - return - A.totalbeauty += beauty - A.update_beauty() - -/datum/component/beauty/proc/exit_area(datum/source, area/A) - SIGNAL_HANDLER - - if(A.outdoors) - return - A.totalbeauty -= beauty - A.update_beauty() - -/datum/component/beauty/Destroy() - . = ..() - var/area/A = get_area(parent) - if(A) - exit_area(null, A) diff --git a/code/datums/components/fantasy/prefixes.dm b/code/datums/components/fantasy/prefixes.dm index 7445ab582bf5..bff1c6ec3dd0 100644 --- a/code/datums/components/fantasy/prefixes.dm +++ b/code/datums/components/fantasy/prefixes.dm @@ -66,3 +66,29 @@ var/obj/item/master = comp.parent comp.appliedComponents += master.AddComponent(/datum/component/lifesteal, comp.quality) return "vampiric [newName]" + +/datum/fantasy_affix/beautiful + placement = AFFIX_PREFIX + alignment = AFFIX_GOOD + +/datum/fantasy_affix/beautiful/apply(datum/component/fantasy/comp, newName) + var/obj/item/master = comp.parent + master.AddElement(/datum/element/beauty, max(comp.quality, 1) * 250) + return "[pick("aesthetic", "beautiful", "gorgeous", "pretty")] [newName]" + +/datum/fantasy_affix/beautiful/remove(datum/component/fantasy/comp) + var/obj/item/master = comp.parent + master.RemoveElement(/datum/element/beauty, max(comp.quality, 1) * 250) + +/datum/fantasy_affix/ugly + placement = AFFIX_PREFIX + alignment = AFFIX_EVIL + +/datum/fantasy_affix/ugly/apply(datum/component/fantasy/comp, newName) + var/obj/item/master = comp.parent + master.AddElement(/datum/element/beauty, min(comp.quality, -1) * 250) + return "[pick("fugly", "ugly", "grotesque", "hideous")] [newName]" + +/datum/fantasy_affix/ugly/remove(datum/component/fantasy/comp) + var/obj/item/master = comp.parent + master.RemoveElement(/datum/element/beauty, min(comp.quality, -1) * 250) diff --git a/code/datums/components/mood.dm b/code/datums/components/mood.dm index 64fc96146527..de334598f141 100644 --- a/code/datums/components/mood.dm +++ b/code/datums/components/mood.dm @@ -27,6 +27,7 @@ RegisterSignal(parent, COMSIG_JOB_RECEIVED, PROC_REF(register_job_signals)) var/mob/living/owner = parent + owner.become_area_sensitive(MOOD_COMPONENT_TRAIT) if(owner.hud_used) modify_hud() var/datum/hud/hud = owner.hud_used @@ -35,6 +36,9 @@ /datum/component/mood/Destroy() STOP_PROCESSING(SSmood, src) unmodify_hud() + + var/mob/living/owner = parent + owner.lose_area_sensitivity(MOOD_COMPONENT_TRAIT) return ..() /datum/component/mood/proc/register_job_signals(datum/source, job) diff --git a/code/datums/components/pellet_cloud.dm b/code/datums/components/pellet_cloud.dm index ae90dae17c55..e7f5174c9102 100644 --- a/code/datums/components/pellet_cloud.dm +++ b/code/datums/components/pellet_cloud.dm @@ -29,7 +29,7 @@ var/list/pellets = list() /// An associated list with the atom hit as the key and how many pellets they've eaten for the value, for printing aggregate messages var/list/targets_hit = list() - /// For grenades, any /mob/living's the grenade is moved onto, see [/datum/component/pellet_cloud/proc/handle_martyrs()] + /// LAZY LIST. For grenades, any /mob/living's the grenade is moved onto, see [/datum/component/pellet_cloud/proc/handle_martyrs()] var/list/bodies /// For grenades, tracking people who die covering a grenade for achievement purposes, see [/datum/component/pellet_cloud/proc/handle_martyrs()] var/list/purple_hearts @@ -65,7 +65,7 @@ purple_hearts = null pellets = null targets_hit = null - bodies = null + LAZYNULL(bodies) return ..() /datum/component/pellet_cloud/RegisterWithParent() @@ -288,5 +288,5 @@ /datum/component/pellet_cloud/proc/on_target_qdel(atom/target) UnregisterSignal(target, COMSIG_PARENT_QDELETING) targets_hit -= target - LAZYREMOVE(target, bodies) + LAZYREMOVE(bodies, target) purple_hearts -= target diff --git a/code/datums/components/weatherannouncer.dm b/code/datums/components/weatherannouncer.dm index 3821f9a1b559..a5e622d8669e 100644 --- a/code/datums/components/weatherannouncer.dm +++ b/code/datums/components/weatherannouncer.dm @@ -110,7 +110,7 @@ /datum/component/weather_announcer/proc/time_till_storm() var/datum/weather_controller/local_weather_controller = SSmapping.get_map_zone_weather_controller(parent) - if(!local_weather_controller.next_weather) + if(!local_weather_controller?.next_weather) return null for(var/type_index in local_weather_controller.current_weathers) var/datum/weather/check_weather = local_weather_controller.current_weathers[type_index] diff --git a/code/datums/elements/beauty.dm b/code/datums/elements/beauty.dm new file mode 100644 index 000000000000..88cd6eb3adea --- /dev/null +++ b/code/datums/elements/beauty.dm @@ -0,0 +1,76 @@ +/** + * Beauty element. It makes the indoor area the parent is in prettier or uglier depending on the beauty var value. + * Clean and well decorated areas lead to positive moodlets for passerbies; + * Shabbier, dirtier ones lead to negative moodlets EXCLUSIVE to characters with the snob quirk. + */ +/datum/element/beauty + element_flags = ELEMENT_BESPOKE|ELEMENT_DETACH + id_arg_index = 2 + var/beauty = 0 + /** + * Assoc list of atoms as keys and number of time the same element instance has been attached to them as assoc value. + * So things don't get odd with same-valued yet dissimilar beauty modifiers being added to the same atom. + */ + var/beauty_counter = list() + +/datum/element/beauty/Attach(datum/target, beauty) + . = ..() + if(!isatom(target) || isarea(target)) + return ELEMENT_INCOMPATIBLE + + src.beauty = beauty + + if(!beauty_counter[target] && ismovable(target)) + var/atom/movable/mov_target = target + mov_target.become_area_sensitive(BEAUTY_ELEMENT_TRAIT) + RegisterSignal(mov_target, COMSIG_ENTER_AREA, PROC_REF(enter_area)) + RegisterSignal(mov_target, COMSIG_EXIT_AREA, PROC_REF(exit_area)) + + beauty_counter[target]++ + + var/area/current_area = get_area(target) + if(current_area && !current_area.outdoors) + current_area.totalbeauty += beauty + current_area.update_beauty() + +/datum/element/beauty/proc/enter_area(datum/source, area/new_area) + SIGNAL_HANDLER + + if(new_area.outdoors) + return + new_area.totalbeauty += beauty * beauty_counter[source] + new_area.update_beauty() + +/datum/element/beauty/proc/exit_area(datum/source, area/old_area) + SIGNAL_HANDLER + + if(old_area.outdoors) + return + old_area.totalbeauty -= beauty * beauty_counter[source] + old_area.update_beauty() + +/datum/element/beauty/Detach(datum/source) + if(!beauty_counter[source]) + return ..() + var/area/current_area = get_area(source) + if(QDELETED(source)) + . = ..() + UnregisterSignal(source, list(COMSIG_ENTER_AREA, COMSIG_EXIT_AREA)) + if(current_area) + exit_area(source, current_area) + beauty_counter -= source + var/atom/movable/movable_source = source + if(istype(movable_source)) + movable_source.lose_area_sensitivity(BEAUTY_ELEMENT_TRAIT) + else //lower the 'counter' down by one, update the area, and call parent if it's reached zero. + beauty_counter[source]-- + if(current_area && !current_area.outdoors) + current_area.totalbeauty -= beauty + current_area.update_beauty() + if(!beauty_counter[source]) + . = ..() + UnregisterSignal(source, list(COMSIG_ENTER_AREA, COMSIG_EXIT_AREA)) + beauty_counter -= source + var/atom/movable/movable_source = source + if(istype(movable_source)) + movable_source.lose_area_sensitivity(BEAUTY_ELEMENT_TRAIT) diff --git a/code/datums/materials/_material.dm b/code/datums/materials/_material.dm index 79d3a5e68a89..4f505cb2a3e7 100644 --- a/code/datums/materials/_material.dm +++ b/code/datums/materials/_material.dm @@ -65,7 +65,7 @@ Simple datum which is instanced once per type and is used for every object of sa source.name = "[name] [source.name]" if(beauty_modifier) - addtimer(CALLBACK(source, TYPE_PROC_REF(/datum, _AddComponent), list(/datum/component/beauty, beauty_modifier * amount)), 0) + source.AddElement(/datum/element/beauty, beauty_modifier * amount) if(istype(source, /obj)) //objs on_applied_obj(source, amount, material_flags) @@ -121,7 +121,7 @@ Simple datum which is instanced once per type and is used for every object of sa return ///This proc is called when the material is removed from an object. -/datum/material/proc/on_removed(atom/source, material_flags) +/datum/material/proc/on_removed(atom/source, amount, material_flags) if(material_flags & MATERIAL_COLOR) //Prevent changing things with pre-set colors, to keep colored toolboxes their looks for example if(color) source.remove_atom_colour(FIXED_COLOUR_PRIORITY, color) @@ -133,6 +133,9 @@ Simple datum which is instanced once per type and is used for every object of sa if(material_flags & MATERIAL_ADD_PREFIX) source.name = initial(source.name) + if(beauty_modifier) + source.RemoveElement(/datum/element/beauty, beauty_modifier * amount) + if(istype(source, /obj)) //objs on_removed_obj(source, material_flags) diff --git a/code/datums/materials/basemats.dm b/code/datums/materials/basemats.dm index bf540f08459f..98db1541c953 100644 --- a/code/datums/materials/basemats.dm +++ b/code/datums/materials/basemats.dm @@ -86,7 +86,7 @@ Unless you know what you're doing, only use the first three numbers. They're in . = ..() source.AddComponent(/datum/component/radioactive, amount / 20, source, 0) //half-life of 0 because we keep on going. -/datum/material/uranium/on_removed(atom/source, material_flags) +/datum/material/uranium/on_removed(atom/source, amount, material_flags) . = ..() qdel(source.GetComponent(/datum/component/radioactive)) @@ -109,7 +109,7 @@ Unless you know what you're doing, only use the first three numbers. They're in source.AddElement(/datum/element/firestacker, amount=1) source.AddComponent(/datum/component/explodable, 0, 0, amount / 2500, amount / 1250) -/datum/material/plasma/on_removed(atom/source, material_flags) +/datum/material/plasma/on_removed(atom/source, amount, material_flags) . = ..() source.RemoveElement(/datum/element/firestacker, amount=1) qdel(source.GetComponent(/datum/component/explodable)) diff --git a/code/datums/materials/meat.dm b/code/datums/materials/meat.dm index d8a9fb5cc01c..9539b2847774 100644 --- a/code/datums/materials/meat.dm +++ b/code/datums/materials/meat.dm @@ -14,7 +14,7 @@ turf_sound_override = FOOTSTEP_MEAT texture_layer_icon_state = "meat" -/datum/material/meat/on_removed(atom/source, material_flags) +/datum/material/meat/on_removed(atom/source, amount, material_flags) . = ..() qdel(source.GetComponent(/datum/component/edible)) diff --git a/code/datums/materials/pizza.dm b/code/datums/materials/pizza.dm index 6ab79e3a2065..aed6577a5af9 100644 --- a/code/datums/materials/pizza.dm +++ b/code/datums/materials/pizza.dm @@ -13,7 +13,7 @@ turf_sound_override = FOOTSTEP_MEAT texture_layer_icon_state = "pizza" -/datum/material/pizza/on_removed(atom/source, material_flags) +/datum/material/pizza/on_removed(atom/source, amount, material_flags) . = ..() qdel(source.GetComponent(/datum/component/edible)) diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 35712cb768ae..e8bdb66c1898 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -575,18 +575,21 @@ GLOBAL_LIST_EMPTY(teleportlocs) /** * Call back when an atom enters an area * - * Sends signals COMSIG_AREA_ENTERED and COMSIG_ENTER_AREA (to the atom) + * Sends signals COMSIG_AREA_ENTERED and COMSIG_ENTER_AREA (to a list of atoms) * * If the area has ambience, then it plays some ambience music to the ambience channel */ -/area/Entered(atom/movable/M, area/old_area) +/area/Entered(atom/movable/arrived, area/old_area) set waitfor = FALSE - SEND_SIGNAL(src, COMSIG_AREA_ENTERED, M, old_area) - SEND_SIGNAL(M, COMSIG_ENTER_AREA, src) //The atom that enters the area - if(!isliving(M)) + SEND_SIGNAL(src, COMSIG_AREA_ENTERED, arrived, old_area) + if(!LAZYACCESS(arrived.important_recursive_contents, RECURSIVE_CONTENTS_AREA_SENSITIVE)) + return + for(var/atom/movable/recipient as anything in arrived.important_recursive_contents[RECURSIVE_CONTENTS_AREA_SENSITIVE]) + SEND_SIGNAL(recipient, COMSIG_ENTER_AREA, src) + if(!isliving(arrived)) return - var/mob/living/L = M + var/mob/living/L = arrived if(!L.ckey) return @@ -608,11 +611,14 @@ GLOBAL_LIST_EMPTY(teleportlocs) /** * Called when an atom exits an area * - * Sends signals COMSIG_AREA_EXITED and COMSIG_EXIT_AREA (to the atom) + * Sends signals COMSIG_AREA_EXITED and COMSIG_EXIT_AREA (to a list of atoms) */ /area/Exited(atom/movable/gone, direction) SEND_SIGNAL(src, COMSIG_AREA_EXITED, gone, direction) - SEND_SIGNAL(gone, COMSIG_EXIT_AREA, src) //The atom that exits the area + if(!LAZYACCESS(gone.important_recursive_contents, RECURSIVE_CONTENTS_AREA_SENSITIVE)) + return + for(var/atom/movable/recipient as anything in gone.important_recursive_contents[RECURSIVE_CONTENTS_AREA_SENSITIVE]) + SEND_SIGNAL(recipient, COMSIG_EXIT_AREA, src) /** diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 350b80907f70..6c6849724bde 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -1525,7 +1525,7 @@ if(custom_materials) //Only runs if custom materials existed at first. Should usually be the case but check anyways for(var/i in custom_materials) var/datum/material/custom_material = SSmaterials.GetMaterialRef(i) - custom_material.on_removed(src, material_flags) //Remove the current materials + custom_material.on_removed(src, custom_materials[i] * material_modifier, material_flags) //Remove the current materials if(!length(materials)) return diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 7120bfb2f785..7dd3d612ae81 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -630,6 +630,71 @@ return A.Bumped(src) +/atom/movable/Exited(atom/movable/gone, direction) + . = ..() + + if(!LAZYLEN(gone.important_recursive_contents)) + return + + var/list/nested_locs = get_nested_locs(src) + src + for(var/channel in gone.important_recursive_contents) + for(var/atom/movable/location as anything in nested_locs) + var/list/recursive_contents = location.important_recursive_contents // blue hedgehog velocity + recursive_contents[channel] -= gone.important_recursive_contents[channel] + ASSOC_UNSETEMPTY(recursive_contents, channel) + UNSETEMPTY(location.important_recursive_contents) + +/atom/movable/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs) + . = ..() + + if(!LAZYLEN(arrived.important_recursive_contents)) + return + + var/list/nested_locs = get_nested_locs(src) + src + for(var/channel in arrived.important_recursive_contents) + for(var/atom/movable/location as anything in nested_locs) + LAZYINITLIST(location.important_recursive_contents) + var/list/recursive_contents = location.important_recursive_contents // blue hedgehog velocity + LAZYINITLIST(recursive_contents[channel]) + recursive_contents[channel] |= arrived.important_recursive_contents[channel] + +/// See traits.dm. Use this in place of ADD_TRAIT. +/atom/movable/proc/become_area_sensitive(trait_source = TRAIT_GENERIC) + if(!HAS_TRAIT(src, TRAIT_AREA_SENSITIVE)) + for(var/atom/movable/location as anything in get_nested_locs(src) + src) + LAZYADDASSOCLIST(location.important_recursive_contents, RECURSIVE_CONTENTS_AREA_SENSITIVE, src) + ADD_TRAIT(src, TRAIT_AREA_SENSITIVE, trait_source) + +/atom/movable/proc/lose_area_sensitivity(trait_source = TRAIT_GENERIC) + if(!HAS_TRAIT(src, TRAIT_AREA_SENSITIVE)) + return + REMOVE_TRAIT(src, TRAIT_AREA_SENSITIVE, trait_source) + if(HAS_TRAIT(src, TRAIT_AREA_SENSITIVE)) + return + +///allows this movable to hear and adds itself to the important_recursive_contents list of itself and every movable loc its in +/atom/movable/proc/become_hearing_sensitive(trait_source = TRAIT_GENERIC) + ADD_TRAIT(src, TRAIT_HEARING_SENSITIVE, trait_source) + if(!HAS_TRAIT(src, TRAIT_HEARING_SENSITIVE)) + return + + for(var/atom/movable/location as anything in get_nested_locs(src) + src) + LAZYINITLIST(location.important_recursive_contents) + var/list/recursive_contents = location.important_recursive_contents // blue hedgehog velocity + recursive_contents[RECURSIVE_CONTENTS_HEARING_SENSITIVE] += list(src) + +/atom/movable/proc/lose_hearing_sensitivity(trait_source = TRAIT_GENERIC) + if(!HAS_TRAIT(src, TRAIT_HEARING_SENSITIVE)) + return + REMOVE_TRAIT(src, TRAIT_HEARING_SENSITIVE, trait_source) + if(HAS_TRAIT(src, TRAIT_HEARING_SENSITIVE)) + return + for(var/atom/movable/location as anything in get_nested_locs(src) + src) + var/list/recursive_contents = location.important_recursive_contents // blue hedgehog velocity + recursive_contents[RECURSIVE_CONTENTS_HEARING_SENSITIVE] -= src + ASSOC_UNSETEMPTY(recursive_contents, RECURSIVE_CONTENTS_HEARING_SENSITIVE) + UNSETEMPTY(location.important_recursive_contents) + ///Sets the anchored var and returns if it was sucessfully changed or not. /atom/movable/proc/set_anchored(anchorvalue) SHOULD_CALL_PARENT(TRUE) @@ -1181,54 +1246,3 @@ animate(pickup_animation, alpha = 175, pixel_x = to_x, pixel_y = to_y, time = 3, transform = M, easing = CUBIC_EASING) sleep(1) animate(pickup_animation, alpha = 0, transform = matrix(), time = 1) - -/atom/movable/Exited(atom/movable/gone, direction) - . = ..() - - if(!LAZYLEN(gone.important_recursive_contents)) - return - - var/list/nested_locs = get_nested_locs(src) + src - for(var/channel in gone.important_recursive_contents) - for(var/atom/movable/location as anything in nested_locs) - var/list/recursive_contents = location.important_recursive_contents // blue hedgehog velocity - recursive_contents[channel] -= gone.important_recursive_contents[channel] - ASSOC_UNSETEMPTY(recursive_contents, channel) - UNSETEMPTY(location.important_recursive_contents) - -/atom/movable/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs) - . = ..() - - if(!LAZYLEN(arrived.important_recursive_contents)) - return - - var/list/nested_locs = get_nested_locs(src) + src - for(var/channel in arrived.important_recursive_contents) - for(var/atom/movable/location as anything in nested_locs) - LAZYINITLIST(location.important_recursive_contents) - var/list/recursive_contents = location.important_recursive_contents // blue hedgehog velocity - LAZYINITLIST(recursive_contents[channel]) - recursive_contents[channel] |= arrived.important_recursive_contents[channel] - -///allows this movable to hear and adds itself to the important_recursive_contents list of itself and every movable loc its in -/atom/movable/proc/become_hearing_sensitive(trait_source = TRAIT_GENERIC) - ADD_TRAIT(src, TRAIT_HEARING_SENSITIVE, trait_source) - if(!HAS_TRAIT(src, TRAIT_HEARING_SENSITIVE)) - return - - for(var/atom/movable/location as anything in get_nested_locs(src) + src) - LAZYINITLIST(location.important_recursive_contents) - var/list/recursive_contents = location.important_recursive_contents // blue hedgehog velocity - recursive_contents[RECURSIVE_CONTENTS_HEARING_SENSITIVE] += list(src) - -/atom/movable/proc/lose_hearing_sensitivity(trait_source = TRAIT_GENERIC) - if(!HAS_TRAIT(src, TRAIT_HEARING_SENSITIVE)) - return - REMOVE_TRAIT(src, TRAIT_HEARING_SENSITIVE, trait_source) - if(HAS_TRAIT(src, TRAIT_HEARING_SENSITIVE)) - return - for(var/atom/movable/location as anything in get_nested_locs(src) + src) - var/list/recursive_contents = location.important_recursive_contents // blue hedgehog velocity - recursive_contents[RECURSIVE_CONTENTS_HEARING_SENSITIVE] -= src - ASSOC_UNSETEMPTY(recursive_contents, RECURSIVE_CONTENTS_HEARING_SENSITIVE) - UNSETEMPTY(location.important_recursive_contents) diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index c81a58ad73b9..a17b9c705dc1 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -167,12 +167,14 @@ Class Procs: /obj/machinery/LateInitialize() . = ..() power_change() + become_area_sensitive(ROUNDSTART_TRAIT) RegisterSignal(src, COMSIG_ENTER_AREA, PROC_REF(power_change)) /obj/machinery/Destroy() GLOB.machines.Remove(src) end_processing() dropContents() + lose_area_sensitivity(ROUNDSTART_TRAIT) QDEL_NULL(circuit) QDEL_LIST(component_parts) return ..() diff --git a/code/game/objects/effects/contraband.dm b/code/game/objects/effects/contraband.dm index a6d2fff1571f..a86a74c2c3d4 100644 --- a/code/game/objects/effects/contraband.dm +++ b/code/game/objects/effects/contraband.dm @@ -97,7 +97,7 @@ name = "poster - [name]" desc = "A large piece of space-resistant printed paper. [desc]" - addtimer(CALLBACK(src, TYPE_PROC_REF(/datum, _AddComponent), list(/datum/component/beauty, 300)), 0) + AddElement(/datum/element/beauty, 300) /obj/structure/sign/poster/proc/randomise() var/obj/structure/sign/poster/selected diff --git a/code/game/objects/effects/decals/cleanable.dm b/code/game/objects/effects/decals/cleanable.dm index a0909bb0b994..4161403fefd9 100644 --- a/code/game/objects/effects/decals/cleanable.dm +++ b/code/game/objects/effects/decals/cleanable.dm @@ -30,8 +30,7 @@ COMSIG_ATOM_ENTERED = PROC_REF(on_entered), ) AddElement(/datum/element/connect_loc, loc_connections) - - addtimer(CALLBACK(src, TYPE_PROC_REF(/datum, _AddComponent), list(/datum/component/beauty, beauty)), 0) + AddElement(/datum/element/beauty, beauty) SSblackbox.record_feedback("tally", "station_mess_created", 1, name) diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index 1296e889181d..da08c87a5a35 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -66,13 +66,13 @@ GLOBAL_LIST_INIT(glass_recipes, list ( \ else if(istype(W, /obj/item/stack/rods)) var/obj/item/stack/rods/V = W if (V.get_amount() >= 1 && get_amount() >= 1) - var/obj/item/stack/sheet/rglass/RG = new (get_turf(user)) - RG.add_fingerprint(user) + var/obj/item/stack/sheet/rglass/reinforced = new(get_turf(user)) || locate(/obj/item/stack/sheet/rglass) in get_turf(user) // Get the stack it's merged into if it is + reinforced.add_fingerprint(user) var/replace = user.get_inactive_held_item()==src V.use(1) use(1) if(QDELETED(src) && replace) - user.put_in_hands(RG) + user.put_in_hands(reinforced) else to_chat(user, "You need one rod and one sheet of glass to make reinforced glass!") return @@ -119,13 +119,13 @@ GLOBAL_LIST_INIT(pglass_recipes, list ( \ if(istype(W, /obj/item/stack/rods)) var/obj/item/stack/rods/V = W if (V.get_amount() >= 1 && get_amount() >= 1) - var/obj/item/stack/sheet/plasmarglass/RG = new (get_turf(user)) - RG.add_fingerprint(user) - var/replace = user.get_inactive_held_item()==src + var/obj/item/stack/sheet/plasmarglass/reinforced = new(get_turf(user)) || locate(/obj/item/stack/sheet/plasmarglass) in get_turf(user) // Get the stack it's merged into if it is + reinforced.add_fingerprint(user) + var/replace = user.get_inactive_held_item() == src V.use(1) use(1) if(QDELETED(src) && replace) - user.put_in_hands(RG) + user.put_in_hands(reinforced) else to_chat(user, "You need one rod and one sheet of plasma glass to make reinforced plasma glass!") return diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index c019471e3cdd..9e8d1e3c17b9 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -515,7 +515,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 /obj/item/statuebust/Initialize() . = ..() AddComponent(/datum/component/art, impressiveness) - addtimer(CALLBACK(src, TYPE_PROC_REF(/datum, _AddComponent), list(/datum/component/beauty, 1000)), 0) + AddElement(/datum/element/beauty, 1000) /obj/item/statuebust/hippocratic name = "hippocrates bust" diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 46090aa86658..f295bfab8950 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -205,6 +205,7 @@ ui_interact(user) /mob/proc/unset_machine() + SIGNAL_HANDLER if(!machine) return UnregisterSignal(machine, COMSIG_PARENT_QDELETING) @@ -216,6 +217,8 @@ return /mob/proc/set_machine(obj/O) + if(QDELETED(src) || QDELETED(O)) + return if(machine) unset_machine() machine = O diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm index 50b578a3aee2..8ba938dae8ee 100644 --- a/code/game/objects/structures/flora.dm +++ b/code/game/objects/structures/flora.dm @@ -368,8 +368,8 @@ /obj/item/kirbyplants/ComponentInitialize() . = ..() AddComponent(/datum/component/tactical) - addtimer(CALLBACK(src, TYPE_PROC_REF(/datum, _AddComponent), list(/datum/component/beauty, 500)), 0) AddComponent(/datum/component/two_handed, require_twohands=TRUE, force_unwielded=10, force_wielded=10) + AddElement(/datum/element/beauty, 500) /obj/item/kirbyplants/random icon = 'icons/obj/flora/_flora.dmi' diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index 7a8aec8a97f2..25822d69ff00 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -44,12 +44,16 @@ M.add_fingerprint(user) qdel(src) + return + else if(istype(W, /obj/item/pickaxe/drill/jackhammer)) to_chat(user, "You smash through the girder!") new /obj/item/stack/sheet/metal(get_turf(src)) W.play_tool_sound(src) qdel(src) + return + else if(istype(W, /obj/item/stack)) if(iswallturf(loc)) @@ -77,6 +81,8 @@ var/obj/structure/falsewall/iron/FW = new (loc) transfer_fingerprints_to(FW) qdel(src) + + return else if(S.get_amount() < 5) to_chat(user, "You need at least five rods to add plating!") @@ -111,6 +117,8 @@ var/obj/structure/falsewall/F = new (loc) transfer_fingerprints_to(F) qdel(src) + + return else if(S.get_amount() < 2) to_chat(user, "You need two sheets of metal to finish a wall!") @@ -141,6 +149,8 @@ var/obj/structure/falsewall/reinforced/FW = new (loc) transfer_fingerprints_to(FW) qdel(src) + + return else if(state == GIRDER_REINF) if(S.get_amount() < 1) @@ -185,6 +195,8 @@ var/obj/structure/FW = new F (loc) transfer_fingerprints_to(FW) qdel(src) + + return else if(S.get_amount() < 2) to_chat(user, "You need at least two sheets to add plating!") @@ -210,8 +222,6 @@ qdel(src) return - add_hiddenprint(user) - else if(istype(W, /obj/item/pipe)) var/obj/item/pipe/P = W if (P.pipe_type in list(0, 1, 5)) //simple pipes, simple bends, and simple manifolds. diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 56f50eb1768e..5bca53e84dd6 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -221,8 +221,8 @@ /obj/structure/grille/deconstruct(disassembled = TRUE) if(!loc) //if already qdel'd somehow, we do nothing return - if(!(flags_1&NODECONSTRUCT_1)) - var/obj/R = new rods_type(drop_location(), rods_amount) + if(!(flags_1 & NODECONSTRUCT_1)) + var/obj/R = new rods_type(drop_location(), rods_amount) || locate(rods_type) in drop_location() // if the rods get merged, find the stack transfer_fingerprints_to(R) qdel(src) ..() @@ -230,7 +230,7 @@ /obj/structure/grille/obj_break() if(!broken && !(flags_1 & NODECONSTRUCT_1)) new broken_type(src.loc) - var/obj/R = new rods_type(drop_location(), rods_broken) + var/obj/R = new rods_type(drop_location(), rods_broken) || locate(rods_type) in drop_location() // see above transfer_fingerprints_to(R) qdel(src) diff --git a/code/game/objects/structures/headpike.dm b/code/game/objects/structures/headpike.dm index aff870c6eedf..c42983a5e0e5 100644 --- a/code/game/objects/structures/headpike.dm +++ b/code/game/objects/structures/headpike.dm @@ -13,24 +13,53 @@ icon_state = "headpike-bone" bonespear = TRUE +/obj/structure/headpike/Initialize(mapload) + . = ..() + if(mapload) + CheckParts() + /obj/structure/headpike/CheckParts(list/parts_list) - ..() victim = locate(/obj/item/bodypart/head) in parts_list - update_appearance() - if(bonespear) - spear = locate(/obj/item/spear/bonespear) in parts_list - else - spear = locate(/obj/item/spear) in parts_list + if(!victim) //likely a mapspawned one + victim = new(src) + victim.real_name = random_unique_name(prob(50)) -/obj/structure/headpike/Initialize() - . = ..() - pixel_x = rand(-8, 8) + spear = locate(bonespear ? /obj/item/spear/bonespear : /obj/item/spear) in parts_list + if(!spear) + spear = bonespear ? new/obj/item/spear/bonespear(src) : new/obj/item/spear(src) + + update_appearance() + return ..() /obj/structure/headpike/Destroy() QDEL_NULL(victim) QDEL_NULL(spear) return ..() +/obj/structure/headpike/handle_atom_del(atom/A) + if(A == victim) + victim = null + if(A == spear) + spear = null + if(!QDELETED(src)) + deconstruct(TRUE) + return ..() + +/obj/structure/headpike/deconstruct(disassembled) + if(!disassembled) + return ..() + if(victim) + victim.forceMove(drop_location()) + victim = null + if(spear) + spear.forceMove(drop_location()) + spear = null + return ..() + +/obj/structure/headpike/Initialize() + . = ..() + pixel_x = rand(-8, 8) + /obj/structure/headpike/update_overlays() . = ..() var/obj/item/bodypart/head/H = locate() in contents @@ -45,12 +74,7 @@ if(.) return to_chat(user, "You take down [src].") - if(victim) - victim.forceMove(drop_location()) - victim = null - spear.forceMove(drop_location()) - spear = null - qdel(src) + deconstruct(TRUE) /obj/structure/headpike/update_name() name = "[victim.real_name] on a [spear]" diff --git a/code/game/objects/structures/statues.dm b/code/game/objects/structures/statues.dm index a4155003dcdb..642c2c2efdd4 100644 --- a/code/game/objects/structures/statues.dm +++ b/code/game/objects/structures/statues.dm @@ -15,7 +15,7 @@ /obj/structure/statue/Initialize() . = ..() AddComponent(art_type, impressiveness) - addtimer(CALLBACK(src, TYPE_PROC_REF(/datum, _AddComponent), list(/datum/component/beauty, impressiveness * 75)), 0) + AddElement(/datum/element/beauty, impressiveness * 75) /obj/structure/statue/attackby(obj/item/W, mob/living/user, params) add_fingerprint(user) diff --git a/code/game/turfs/change_turf.dm b/code/game/turfs/change_turf.dm index 07976f05631f..13e8ae7877c7 100644 --- a/code/game/turfs/change_turf.dm +++ b/code/game/turfs/change_turf.dm @@ -39,10 +39,6 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list( /turf/open/copyTurf(turf/T, copy_air = FALSE) . = ..() if(isopenturf(T)) - var/datum/component/wet_floor/slip = GetComponent(/datum/component/wet_floor) - if(slip) - var/datum/component/wet_floor/WF = T.AddComponent(/datum/component/wet_floor) - WF.InheritComponent(slip) if(copy_air) var/turf/open/openTurf = T openTurf.air.copy_from(air) diff --git a/code/game/turfs/open/floor/reinf_floor.dm b/code/game/turfs/open/floor/reinf_floor.dm index 68a96846adbb..a164b159d6f6 100644 --- a/code/game/turfs/open/floor/reinf_floor.dm +++ b/code/game/turfs/open/floor/reinf_floor.dm @@ -40,6 +40,9 @@ /turf/open/floor/engine/crowbar_act(mob/living/user, obj/item/I) return +/turf/open/floor/engine/handle_decompression_floor_rip(sum) + return + /turf/open/floor/engine/wrench_act(mob/living/user, obj/item/I) ..() to_chat(user, "You begin removing the sheet...") diff --git a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm index f28a9a898588..715139dfd6ba 100644 --- a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm +++ b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm @@ -197,6 +197,7 @@ FD.emergency_pressure_stop() /turf/proc/handle_decompression_floor_rip() + /turf/open/floor/handle_decompression_floor_rip(sum) if(sum > 20 && prob(clamp(sum / 10, 0, 30)) && !blocks_air) remove_tile() diff --git a/code/modules/awaymissions/mission_code/snowdin.dm b/code/modules/awaymissions/mission_code/snowdin.dm index f5cfc93c6eee..dec456b8ef2f 100644 --- a/code/modules/awaymissions/mission_code/snowdin.dm +++ b/code/modules/awaymissions/mission_code/snowdin.dm @@ -225,7 +225,8 @@ if(plasma_parts.len) var/obj/item/bodypart/NB = pick(plasma_parts) //using the above-mentioned list to get a choice of limbs for dismember() to use PP.emote("scream") - NB.limb_id = "plasmaman"//change the species_id of the limb to that of a plasmaman + NB.limb_id = "plasmaman" //change the species_id of the limb to that of a plasmaman + NB.static_icon = 'icons/mob/species/plasmaman/bodyparts.dmi' NB.no_update = TRUE NB.change_bodypart_status() PP.visible_message( diff --git a/code/modules/cargo/centcom_podlauncher.dm b/code/modules/cargo/centcom_podlauncher.dm index c0c316a1354a..61e416e9d4f1 100644 --- a/code/modules/cargo/centcom_podlauncher.dm +++ b/code/modules/cargo/centcom_podlauncher.dm @@ -684,8 +684,8 @@ return var/obj/structure/closet/supplypod/centcompod/toLaunch = DuplicateObject(temp_pod) //Duplicate the temp_pod (which we have been varediting or configuring with the UI) and store the result toLaunch.update_appearance()//we update_appearance() here so that the door doesnt "flicker on" right after it lands - var/shippingLane = GLOB.areas_by_type[/area/centcom/supplypod/supplypod_temp_holding] - toLaunch.forceMove(shippingLane) + var/area/shipping_lane = GLOB.areas_by_type[/area/centcom/supplypod/supplypod_temp_holding] + toLaunch.forceMove(pick(shipping_lane.contents)) if (launchClone) //We arent launching the actual items from the bay, rather we are creating clones and launching those if(launchRandomItem) var/launch_candidate = pick_n_take(launchList) diff --git a/code/modules/cargo/supplypod.dm b/code/modules/cargo/supplypod.dm index 16b43704df58..3ff822a4f943 100644 --- a/code/modules/cargo/supplypod.dm +++ b/code/modules/cargo/supplypod.dm @@ -81,8 +81,8 @@ /obj/structure/closet/supplypod/Initialize(mapload, customStyle = FALSE) . = ..() if (!loc) - var/shippingLane = GLOB.areas_by_type[/area/centcom/supplypod/supplypod_temp_holding] //temporary holder for supplypods mid-transit - forceMove(shippingLane) + var/area/shipping_lane = GLOB.areas_by_type[/area/centcom/supplypod/supplypod_temp_holding] //temporary holder for supplypods mid-transit + forceMove(pick(shipping_lane.contents)) if (customStyle) style = customStyle setStyle(style) //Upon initialization, give the supplypod an iconstate, name, and description based on the "style" variable. This system is important for the centcom_podlauncher to function correctly @@ -200,8 +200,8 @@ stay_after_drop = FALSE holder.pixel_z = initial(holder.pixel_z) holder.alpha = initial(holder.alpha) - var/shippingLane = GLOB.areas_by_type[/area/centcom/supplypod/supplypod_temp_holding] - forceMove(shippingLane) //Move to the centcom-z-level until the pod_landingzone says we can drop back down again + var/area/shipping_lane = GLOB.areas_by_type[/area/centcom/supplypod/supplypod_temp_holding] + forceMove(pick(shipping_lane.contents)) //Move to the centcom-z-level until the pod_landingzone says we can drop back down again if (!reverse_dropoff_coords) //If we're centcom-launched, the reverse dropoff turf will be a centcom loading bay. If we're an extraction pod, it should be the ninja jail. Thus, this shouldn't ever really happen. var/obj/error_landmark = locate(/obj/effect/landmark/error) in GLOB.landmarks_list var/turf/error_landmark_turf = get_turf(error_landmark) diff --git a/code/modules/events/spacevine.dm b/code/modules/events/spacevine.dm index ede24c643c43..b1c01d16c636 100644 --- a/code/modules/events/spacevine.dm +++ b/code/modules/events/spacevine.dm @@ -368,13 +368,16 @@ /obj/structure/spacevine/attack_hand(mob/user) for(var/datum/spacevine_mutation/SM in mutations) SM.on_hit(src, user) - user_unbuckle_mob(user, user) - . = ..() + if(user.buckled == src) + user_unbuckle_mob(user, user) + return ..() /obj/structure/spacevine/attack_paw(mob/living/user) for(var/datum/spacevine_mutation/SM in mutations) SM.on_hit(src, user) - user_unbuckle_mob(user,user) + if(user.buckled == src) + user_unbuckle_mob(user, user) + return ..() /obj/structure/spacevine/attack_alien(mob/living/user) eat(user) diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index fe446513c521..96954cd59b4d 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -861,7 +861,7 @@ /obj/item/freeze_cube/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) icon_state = initial(icon_state) var/caught = hit_atom.hitby(src, FALSE, FALSE, throwingdatum=throwingdatum) - var/mob/thrown_by = thrownby + var/mob/thrown_by = thrownby.resolve() if(ismovable(hit_atom) && !caught && (!thrown_by || thrown_by && COOLDOWN_FINISHED(src, freeze_cooldown))) freeze(hit_atom) if(thrown_by && !caught) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 5d8c44bbc188..6fffc48e76a1 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -435,7 +435,12 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(!thearea) return - usr.abstract_move(pick(get_area_turfs(thearea))) + var/list/area_turfs = get_area_turfs(thearea) + + if(!length(area_turfs)) + return + + usr.abstract_move(pick(area_turfs)) update_parallax_contents() /mob/dead/observer/verb/follow() diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index cd80b13bcda6..93276a6710a6 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -781,6 +781,16 @@ * Called when this human should be washed */ /mob/living/carbon/human/wash(clean_types) + // Check and wash stuff that can be covered + var/list/obscured = check_obscured_slots() + + // Wash hands if exposed + // This runs before the parent call since blood_in_hands should be cleared before the blood DNA is removed + if(!gloves && (clean_types & CLEAN_TYPE_BLOOD) && blood_in_hands > 0 && !(ITEM_SLOT_GLOVES in obscured)) + blood_in_hands = 0 + update_inv_gloves() + . = TRUE + . = ..() // Wash equipped stuff that cannot be covered @@ -792,9 +802,6 @@ update_inv_belt() . = TRUE - // Check and wash stuff that can be covered - var/list/obscured = check_obscured_slots() - if(w_uniform && !(ITEM_SLOT_ICLOTHING in obscured) && w_uniform.wash(clean_types)) update_inv_w_uniform() . = TRUE @@ -802,12 +809,6 @@ if(!is_mouth_covered() && clean_lips()) . = TRUE - // Wash hands if exposed - if(!gloves && (clean_types & CLEAN_TYPE_BLOOD) && blood_in_hands > 0 && !(ITEM_SLOT_GLOVES in obscured)) - blood_in_hands = 0 - update_inv_gloves() - . = TRUE - //Turns a mob black, flashes a skeleton overlay //Just like a cartoon! /mob/living/carbon/human/proc/electrocution_animation(anim_duration) diff --git a/code/modules/mob/living/carbon/human/species_types/vox.dm b/code/modules/mob/living/carbon/human/species_types/vox.dm index 1f3a00e8641b..fd03e184b9ba 100644 --- a/code/modules/mob/living/carbon/human/species_types/vox.dm +++ b/code/modules/mob/living/carbon/human/species_types/vox.dm @@ -104,16 +104,15 @@ return ..() /datum/species/vox/get_item_offsets_for_dir(dir, hand) - ////LEFT/RIGHT - switch(dir) - if(SOUTH) - return list(list("x" = 10, "y" = -1), list("x" = 8, "y" = -1)) - if(NORTH) - return list(list("x" = 9, "y" = 0), list("x" = 9, "y" = 0)) - if(EAST) - return list(list("x" = 18, "y" = 2), list("x" = 21, "y" = -1)) - if(WEST) - return list(list("x" = -5, "y" = -1), list("x" = -1, "y" = 2)) + //LEFT/RIGHT + if(dir & NORTH) + return list(list("x" = 9, "y" = 0), list("x" = 9, "y" = 0)) + if(dir & SOUTH) + return list(list("x" = 10, "y" = -1), list("x" = 8, "y" = -1)) + if(dir & EAST) + return list(list("x" = 18, "y" = 2), list("x" = 21, "y" = -1)) + if(dir & WEST) + return list(list("x" = -5, "y" = -1), list("x" = -1, "y" = 2)) /datum/action/innate/tail_hold name = "Tail Hold" @@ -174,11 +173,14 @@ owner.cut_overlay(held_item_overlay) held_item_overlay = null return + if(olddir == newdir && !force) return newdir ||= owner.dir + newdir = normalize_dir_to_cardinals(newdir) + owner.cut_overlay(held_item_overlay) var/dirtext = dir2text(newdir) var/icon_file = held_item.lefthand_file diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index a0e409c2053d..09445cef4c4e 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -191,7 +191,9 @@ There are several things that need to be remembered: bloody_overlay.icon_state = "bloodyhands_left" else if(has_right_hand(FALSE)) bloody_overlay.icon_state = "bloodyhands_right" - bloody_overlay.color = get_blood_dna_color(return_blood_DNA()) + var/list/blood_dna = return_blood_DNA() + if(length(blood_dna)) + bloody_overlay.color = get_blood_dna_color(return_blood_DNA()) overlays_standing[GLOVES_LAYER] = bloody_overlay //Bloody hands end diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 2115a3c6aba4..8b6acd39ae34 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -1023,13 +1023,17 @@ Nothing else in the console has ID requirements. linked_imprinter.linked_console = null linked_imprinter = null if(ls["eject_design"]) //Eject the design disk. + if(QDELETED(d_disk)) + say("No Design Disk Inserted!") + return eject_disk("design",usr) screen = RDSCREEN_MENU - say("Ejecting [d_disk.name]") if(ls["eject_tech"]) //Eject the technology disk. + if(QDELETED(t_disk)) + say("No Technology Disk Inserted!") + return eject_disk("tech", usr) screen = RDSCREEN_MENU - say("Ejecting [t_disk.name]") if(ls["deconstruct"]) if(QDELETED(linked_destroy)) say("No Destructive Analyzer Linked!") diff --git a/code/modules/screen_alerts/_screen_alerts.dm b/code/modules/screen_alerts/_screen_alerts.dm index 08a21635ea93..e9d93a59735b 100644 --- a/code/modules/screen_alerts/_screen_alerts.dm +++ b/code/modules/screen_alerts/_screen_alerts.dm @@ -79,6 +79,8 @@ continue maptext = "[style_open][copytext_char(text_to_play, 1, letter)][style_close]" sleep(play_delay) + if(QDELETED(user)) + return addtimer(CALLBACK(src, PROC_REF(after_play), user), fade_out_delay) ///handles post-play effects like fade out after the fade out delay diff --git a/code/modules/shuttle/special.dm b/code/modules/shuttle/special.dm index fd18f0c5a1ee..c00a62546b3f 100644 --- a/code/modules/shuttle/special.dm +++ b/code/modules/shuttle/special.dm @@ -145,9 +145,14 @@ /mob/living/simple_animal/drone/snowflake/bardrone/Initialize() . = ..() access_card.access |= ACCESS_CENT_BAR + become_area_sensitive(ROUNDSTART_TRAIT) RegisterSignal(src, COMSIG_ENTER_AREA, PROC_REF(check_barstaff_godmode)) check_barstaff_godmode() +/mob/living/simple_animal/drone/snowflake/bardrone/Destroy() + lose_area_sensitivity(ROUNDSTART_TRAIT) + return ..() + /mob/living/simple_animal/hostile/alien/maid/barmaid gold_core_spawnable = NO_SPAWN name = "Barmaid" @@ -165,12 +170,14 @@ access_card.access = C.get_access() access_card.access |= ACCESS_CENT_BAR ADD_TRAIT(access_card, TRAIT_NODROP, ABSTRACT_ITEM_TRAIT) + become_area_sensitive(ROUNDSTART_TRAIT) RegisterSignal(src, COMSIG_ENTER_AREA, PROC_REF(check_barstaff_godmode)) check_barstaff_godmode() /mob/living/simple_animal/hostile/alien/maid/barmaid/Destroy() qdel(access_card) - . = ..() + lose_area_sensitivity(ROUNDSTART_TRAIT) + return ..() /mob/living/simple_animal/proc/check_barstaff_godmode() SIGNAL_HANDLER diff --git a/shiptest.dme b/shiptest.dme index c54f2b411a37..b6f92e70dbd1 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -452,7 +452,6 @@ #include "code\datums\components\armor_plate.dm" #include "code\datums\components\art.dm" #include "code\datums\components\bane.dm" -#include "code\datums\components\beauty.dm" #include "code\datums\components\beetlejuice.dm" #include "code\datums\components\bloodysoles.dm" #include "code\datums\components\butchering.dm" @@ -618,6 +617,7 @@ #include "code\datums\diseases\advance\symptoms\weight.dm" #include "code\datums\diseases\advance\symptoms\youth.dm" #include "code\datums\elements\_element.dm" +#include "code\datums\elements\beauty.dm" #include "code\datums\elements\bed_tucking.dm" #include "code\datums\elements\bsa_blocker.dm" #include "code\datums\elements\cleaning.dm" From 8c452861cb3ad611fd48ea1bacfe548f37fbfeab Mon Sep 17 00:00:00 2001 From: Changelogs Date: Mon, 4 Mar 2024 02:48:02 -0600 Subject: [PATCH 16/30] Automatic changelog generation for PR #2720 [ci skip] --- html/changelogs/AutoChangeLog-pr-2720.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2720.yml diff --git a/html/changelogs/AutoChangeLog-pr-2720.yml b/html/changelogs/AutoChangeLog-pr-2720.yml new file mode 100644 index 000000000000..fc6d843ff297 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2720.yml @@ -0,0 +1,5 @@ +author: MarkSuckerberg +changes: + - {bugfix: Headpikes actually work again} + - {bugfix: Reinforced floors now don't spawn metal when decompression is experienced} +delete-after: true From 071d4ce10b9daa4e61c9d8556f321345734b42d3 Mon Sep 17 00:00:00 2001 From: Apogee-dev <60533805+Apogee-dev@users.noreply.github.com> Date: Mon, 4 Mar 2024 09:49:27 -0800 Subject: [PATCH 17/30] Tweaks 38 damage and adds .38 Surplus (#2775) ## About The Pull Request Reduces .38 damage (Detective Special, Flaming Arrow) back down to 20 per shot at -20 AP, identical to 9mm, making it not just .45 Except You Can Print The Normal Version On A Lathe, and adds a surplus variant that is printed on the lathe. Yes, I'm well aware this is a pretty substantial nerf; if you're using .38 Surplus, as many ships will end up doing, you're doing 10 less damage per shot than before this PR, at a slower rate of fire and with smaller magazine sizes than 9mm guns. Outpost resupply for .38 should be quite cheap to compensate. Would be nice to make the .38 ammo variants a little more obtainable, too. Future PR material. ## Why It's Good For The Game I'm not sure why this was buffed since it just counterintuitively made .38 a clone of .45 (at least making it a clone of 9mm makes more sense with the cartridge's irl properties), and surplus .38 SPC ammo has been needed for a long time. ## Changelog :cl: add: .38 Special Surplus ammo is now in the autolathe. balance: Nerfed .38's damage back down to 20 /:cl: --- .../ammunition/ballistic/revolver.dm | 10 ++++++++-- .../projectiles/boxes_magazines/ammo_boxes.dm | 8 +++++++- .../projectile/bullets/revolver.dm | 5 ++++- .../research/designs/autolathe_designs.dm | 4 ++-- .../research/designs/weapon_designs.dm | 9 +++++++++ icons/obj/ammo.dmi | Bin 36179 -> 36015 bytes shiptest.dme | 2 +- 7 files changed, 31 insertions(+), 7 deletions(-) diff --git a/code/modules/projectiles/ammunition/ballistic/revolver.dm b/code/modules/projectiles/ammunition/ballistic/revolver.dm index a15eac049667..d5684e834e3d 100644 --- a/code/modules/projectiles/ammunition/ballistic/revolver.dm +++ b/code/modules/projectiles/ammunition/ballistic/revolver.dm @@ -49,11 +49,17 @@ // .38 Special (Colt Detective Special & Winchester) /obj/item/ammo_casing/c38 - name = ".38 special bullet casing" - desc = "A .38 special bullet casing." + name = ".38 Special bullet casing" + desc = "A .38 Special bullet casing." caliber = ".38" projectile_type = /obj/projectile/bullet/c38 +/obj/item/ammo_casing/c38/surplus + name = ".38 surplus bullet casing" + desc = "A .38 surplus bullet casing." + projectile_type = /obj/projectile/bullet/c38/surplus + + /obj/item/ammo_casing/c38/trac name = ".38 TRAC bullet casing" desc = "A .38 \"TRAC\" bullet casing." diff --git a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm index a1bfd5e38fec..0ca9796eefcb 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm @@ -156,11 +156,17 @@ /obj/item/ammo_box/c38_box name = "ammo box (.38)" - desc = "A box of standard .38 special ammo." + desc = "A box of standard .38 Special ammo." icon_state = "38box" ammo_type = /obj/item/ammo_casing/c38 max_ammo = 50 +/obj/item/ammo_box/c38_box/surplus + name = "ammo box (.38 surplus)" + desc = "A box of low-quality .38 Special ammo." + icon_state = "38box-surplus" + ammo_type = /obj/item/ammo_casing/c38/surplus + /obj/item/ammo_box/a12g name = "ammo box (12g buckshot)" desc = "A box of 12-gauge buckshot shells, devastating at close range." diff --git a/code/modules/projectiles/projectile/bullets/revolver.dm b/code/modules/projectiles/projectile/bullets/revolver.dm index ec210c410dc4..7ec48a74b970 100644 --- a/code/modules/projectiles/projectile/bullets/revolver.dm +++ b/code/modules/projectiles/projectile/bullets/revolver.dm @@ -13,9 +13,12 @@ /obj/projectile/bullet/c38 name = ".38 bullet" - damage = 25 + damage = 20 armour_penetration = -20 +/obj/projectile/bullet/c38/surplus + damage = 15 + /obj/projectile/bullet/c38/match name = ".38 match bullet" speed = 0.3 diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index 3aa9cc7d7767..71d1ae74c0be 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -799,11 +799,11 @@ category = list("hacked", "Security") /datum/design/c38 - name = "Ammo Box (.38)" + name = "Ammo Box (.38 surplus)" id = "c38" build_type = AUTOLATHE | PROTOLATHE materials = list(/datum/material/iron = 15000) - build_path = /obj/item/ammo_box/c38_box + build_path = /obj/item/ammo_box/c38_box/surplus category = list("initial", "Security", "Ammo") /datum/design/beanbag_slug diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index c0b4757e2548..930cc96be9c8 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -329,6 +329,15 @@ category = list("Ammo") departmental_flags = DEPARTMENTAL_FLAG_SECURITY +/datum/design/c38 + name = "Ammo Box (.38 Special)" + id = "c38" + build_type = PROTOLATHE + materials = list(/datum/material/iron = 15000) + build_path = /obj/item/ammo_box/c38_box + category = list("Ammo") + departmental_flags = DEPARTMENTAL_FLAG_SECURITY + /datum/design/c9mm name = "Ammo Box (9mm)" id = "c9mm" diff --git a/icons/obj/ammo.dmi b/icons/obj/ammo.dmi index 5eabb260e6f0529f766ab08ca72072c07094054c..022be8bcedd3bb0ba154c1ea054e2e4475515908 100644 GIT binary patch literal 36015 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�# zNm22bJacEHj5W|kH=8PBr2DZpV_@&BHs6{m9;gRRRhM+-pBDADskp(1x5@ZC=nb@i zhi#t*t4?6Lz^LN;G5cK74G^mf$WO$ipHEp4dN5LT>I_|L_j*eAmy*=A+=Z}&U{|;S zRmG_tm=W#h`V2ppkMUElE%URkYA&p64I!z>GHJxu2)O*1E)O zgpJpgAAf(I$HQ~+u~yAfuT8P;$WP$ovnjdxAt+j*Er;2Fnjp&|nmZBs+_8L%sa~0Y z9pbdR5mo212!J6cVNO*V(?MHfPrVOsO(VCk_k4JdXJlI%j`wpB*xNWG+gtH{5M`%jGVq<|onWDQiJ<{?NZRStRr(@Xeez`;qJK z&_pPts~AG2m*{Rb%%K*))DM=Q>I!5APt}4PoaWty)_P%A3s{fkZ3zG1^tk|G=Q(F~ zZ{MO;8XP(8WSR+k23y6w3VmT{H%_&8=vkjof|$afBpT}*IhV|(hO>pXdSQLaBCh5< z*SN!X7iVF;{?(Jfo?fdECYRge2S!Ny3b#=stp|JLU}WwXPE=VQb!Wy6U>lyvTD6GE zYFE(H(Eo*z13ZZJ8cDE0oSszg6d_?sCahsjfbD6^u3okylZ3z@9Zg-05;d!k{|5XL BELi{m literal 36179 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 diff --git a/shiptest.dme b/shiptest.dme index b6f92e70dbd1..2fecb99dba45 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -745,8 +745,8 @@ #include "code\datums\votes\_vote_datum.dm" #include "code\datums\votes\custom_vote.dm" #include "code\datums\votes\restart_vote.dm" -#include "code\datums\weather\weather.dm" #include "code\datums\votes\transfer_vote.dm" +#include "code\datums\weather\weather.dm" #include "code\datums\weather\weather_controller.dm" #include "code\datums\weather\weather_types\acid_rain.dm" #include "code\datums\weather\weather_types\ash_storm.dm" From 6f6cadea0ad93c6397e4ba6dce2fdede23d823b3 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Mon, 4 Mar 2024 12:04:42 -0600 Subject: [PATCH 18/30] Automatic changelog generation for PR #2775 [ci skip] --- html/changelogs/AutoChangeLog-pr-2775.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2775.yml diff --git a/html/changelogs/AutoChangeLog-pr-2775.yml b/html/changelogs/AutoChangeLog-pr-2775.yml new file mode 100644 index 000000000000..28adef48a427 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2775.yml @@ -0,0 +1,4 @@ +author: Apogee-dev +changes: + - {balance: Nerfed .38's damage back down to 20} +delete-after: true From 4de9e587e5d2beaabf7da496518d8eaea5ad3580 Mon Sep 17 00:00:00 2001 From: Skies-Of-Blue <86762641+Skies-Of-Blue@users.noreply.github.com> Date: Mon, 4 Mar 2024 12:56:56 -0800 Subject: [PATCH 19/30] Craftable Towels (#2798) ## About The Pull Request ![image](https://github.com/shiptest-ss13/Shiptest/assets/86762641/41710da6-0179-4c67-971c-670f0907e641) ## Why It's Good For The Game Crew shouldn't have to buy a sauna kit just for some towels. Players are now enabled to have a spontaneous beach episode, any time, anywhere! ## Changelog :cl: tweak: towels can now be crafted using two cloth /:cl: --- code/game/objects/items/stacks/sheets/sheet_types.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 00d793b6e1fb..4367861c7f79 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -348,6 +348,7 @@ GLOBAL_LIST_INIT(cloth_recipes, list ( \ null, \ new/datum/stack_recipe("improvised gauze", /obj/item/stack/medical/gauze/improvised, 1, 2, 6), \ new/datum/stack_recipe("rag", /obj/item/reagent_containers/glass/rag, 1), \ + new/datum/stack_recipe("towel", /obj/item/towel, 2), \ new/datum/stack_recipe("bedsheet", /obj/item/bedsheet, 3), \ new/datum/stack_recipe("empty sandbag", /obj/item/emptysandbag, 4), \ null, \ From 2acf687f53b4420d6be6774cc616fa76acddf9e3 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Mon, 4 Mar 2024 15:12:17 -0600 Subject: [PATCH 20/30] Automatic changelog generation for PR #2798 [ci skip] --- html/changelogs/AutoChangeLog-pr-2798.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2798.yml diff --git a/html/changelogs/AutoChangeLog-pr-2798.yml b/html/changelogs/AutoChangeLog-pr-2798.yml new file mode 100644 index 000000000000..c5b5c9783566 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2798.yml @@ -0,0 +1,4 @@ +author: Skies-Of-Blue +changes: + - {tweak: towels can now be crafted using two cloth} +delete-after: true From 3ace2ed0401001bafb594c7f060e7bb6526ce744 Mon Sep 17 00:00:00 2001 From: Sadhorizon <108196626+Sadhorizon@users.noreply.github.com> Date: Mon, 4 Mar 2024 21:58:15 +0100 Subject: [PATCH 21/30] Syndicate engineers now have GEC suits set as their alternate jumpsuit. (#2767) ## About The Pull Request Cybersun (Kansatu), SUNS (Aegis) and NGR (Hyena) engineers/mechanics now start with GEC jumpsuits, **if** you have the "alternate jumpsuit" option selected in the loadout. ![obraz](https://github.com/shiptest-ss13/Shiptest/assets/108196626/2feb8053-bf94-4720-a76a-ddca3166341c) ![obraz](https://github.com/shiptest-ss13/Shiptest/assets/108196626/71051874-7733-4846-b7da-71b2c3aceb3d) ![obraz](https://github.com/shiptest-ss13/Shiptest/assets/108196626/301a2327-a291-4c6d-8843-1e290a3fcf38) Also, this change does not apply to the Hardliners, as I'm not sure if they would hire GEC engis. Correct me on that if I'm wrong. ## Why It's Good For The Game It is said in lore that those factions tend to hire GEC workers, but there wasn't really anything to back it up in game. It's also a treat for all the GEC characters. The ability to show their true colors on board of other faction's ships. ## Changelog :cl: tweak: Alternate jumpsuits for Cybersun, SUNS and NGR engineers/mechanics are now GEC uniforms. /:cl: --- code/modules/clothing/outfits/factions/syndicate.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/modules/clothing/outfits/factions/syndicate.dm b/code/modules/clothing/outfits/factions/syndicate.dm index d1f56e61b6fd..5eb0b9e5bac8 100644 --- a/code/modules/clothing/outfits/factions/syndicate.dm +++ b/code/modules/clothing/outfits/factions/syndicate.dm @@ -954,6 +954,7 @@ id = /obj/item/card/id/syndicate_command/crew_id uniform = /obj/item/clothing/under/syndicate/ngr + alt_uniform = /obj/item/clothing/under/syndicate/gec accessory = /obj/item/clothing/accessory/armband/engine glasses = /obj/item/clothing/glasses/sunglasses shoes = /obj/item/clothing/shoes/jackboots @@ -970,6 +971,7 @@ name = "Syndicate - Ship Engineer (GEC)" uniform = /obj/item/clothing/under/syndicate/gec + alt_uniform = null suit = /obj/item/clothing/suit/toggle/hazard head = /obj/item/clothing/head/hardhat id = /obj/item/card/id/syndicate_command/crew_id @@ -979,13 +981,13 @@ uniform = /obj/item/clothing/under/syndicate/gorlex shoes = /obj/item/clothing/shoes/workboots - alt_uniform = null glasses = null /datum/outfit/job/syndicate/engineer/twink name = "Syndicate - Ship Engineer (Twinkleshine, GEC)" uniform = /obj/item/clothing/under/syndicate/gec + alt_uniform = null id = /obj/item/card/id/syndicate_command/crew_id/engi mask = /obj/item/clothing/mask/gas/syndicate/voicechanger ears = null From 03153bb244dc7058e63d68bde81534c470bf685e Mon Sep 17 00:00:00 2001 From: Changelogs Date: Mon, 4 Mar 2024 15:30:55 -0600 Subject: [PATCH 22/30] Automatic changelog generation for PR #2767 [ci skip] --- html/changelogs/AutoChangeLog-pr-2767.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2767.yml diff --git a/html/changelogs/AutoChangeLog-pr-2767.yml b/html/changelogs/AutoChangeLog-pr-2767.yml new file mode 100644 index 000000000000..190cc01e8890 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2767.yml @@ -0,0 +1,5 @@ +author: Sadhorizon +changes: + - {tweak: 'Alternate jumpsuits for Cybersun, SUNS and NGR engineers/mechanics are + now GEC uniforms.'} +delete-after: true From cf5f87b5921eacc565ff8f8b8e18545b0c9124d1 Mon Sep 17 00:00:00 2001 From: Martinpachu <86135885+Martinpachu@users.noreply.github.com> Date: Mon, 4 Mar 2024 20:32:27 -0300 Subject: [PATCH 23/30] Adds new ammo boxes, adds them to cargo and granularizes ammo box cargo prices. (#2795) ## About The Pull Request As the name says. ## Why It's Good For The Game More ammo boxes are good i think. Makes more types of ammo less incredibly expensive to use. Guns have already been granularized and as such i think doing the same for ammo boxes is appropriate. ## Changelog :cl: add: Ammo boxes for 4.6, 8x50, Ferromagnetic slugs, pellets, lances and 8x50 Hollow Points! balance: Granularized ammo boxes in cargo in a similar way to guns. /:cl: --- code/modules/cargo/packs/ammo.dm | 284 +++++++++--------- .../projectiles/ammunition/ballistic/rifle.dm | 8 + .../projectiles/boxes_magazines/ammo_boxes.dm | 42 +++ .../projectiles/projectile/bullets/rifle.dm | 6 + icons/obj/ammo.dmi | Bin 36015 -> 36598 bytes 5 files changed, 194 insertions(+), 146 deletions(-) diff --git a/code/modules/cargo/packs/ammo.dm b/code/modules/cargo/packs/ammo.dm index ce69eb3d4b0d..9138e47035e0 100644 --- a/code/modules/cargo/packs/ammo.dm +++ b/code/modules/cargo/packs/ammo.dm @@ -8,66 +8,52 @@ /datum/supply_pack/ammo/co9mm_mag name = "9mm Commander Magazine Crate" - desc = "Contains three 9mm magazines for the standard-issue Commander pistol, each containing ten rounds." - contains = list(/obj/item/ammo_box/magazine/co9mm, - /obj/item/ammo_box/magazine/co9mm, - /obj/item/ammo_box/magazine/co9mm) - cost = 1500 + desc = "Contains a 9mm magazine for the standard-issue Commander pistol, containing ten rounds." + contains = list(/obj/item/ammo_box/magazine/co9mm,) + cost = 500 /datum/supply_pack/ammo/m45_mag name = ".45 ACP Candor Magazine Crate" - desc = "Contains three .45 ACP magazines for the Candor pistol, each containing eight rounds." - contains = list(/obj/item/ammo_box/magazine/m45, - /obj/item/ammo_box/magazine/m45, - /obj/item/ammo_box/magazine/m45) - cost = 1500 + desc = "Contains a .45 ACP magazine for the Candor pistol, containing eight rounds." + contains = list(/obj/item/ammo_box/magazine/m45) + cost = 500 /datum/supply_pack/ammo/m45_speedloader name = ".45 ACP Speedloader Crate" - desc = "Contains four .45 ACP speedloaders for revolvers, each containing six rounds." - contains = list(/obj/item/ammo_box/c45_speedloader, - /obj/item/ammo_box/c45_speedloader, - /obj/item/ammo_box/c45_speedloader, - /obj/item/ammo_box/c45_speedloader) - cost = 1500 + desc = "Contains a .45 ACP speedloader for revolvers, containing six rounds." + contains = list(/obj/item/ammo_box/c45_speedloader) + cost = 400 /datum/supply_pack/ammo/c38_mag name = ".38 Speedloader Crate" - desc = "Contains four .38 speedloaders for revolvers, each containing six rounds." - contains = list(/obj/item/ammo_box/c38, - /obj/item/ammo_box/c38, - /obj/item/ammo_box/c38, - /obj/item/ammo_box/c38) - cost = 1500 + desc = "Contains a .38 speedloader for revolvers, containing six rounds." + contains = list(/obj/item/ammo_box/c38) + cost = 350 /datum/supply_pack/ammo/m10mm_mag name = "10mm Stechkin Magazine Crate" - desc = "Contains three 10mm magazines for the stechkin pistol, each containing eight rounds." - contains = list(/obj/item/ammo_box/magazine/m10mm, - /obj/item/ammo_box/magazine/m10mm, - /obj/item/ammo_box/magazine/m10mm) - cost = 1500 + desc = "Contains a 10mm magazine for the stechkin pistol, containing eight rounds." + contains = list(/obj/item/ammo_box/magazine/m10mm) + cost = 500 /datum/supply_pack/ammo/a357_mag name = ".357 Speedloader Crate" - desc = "Contains two .357 speedloaders for revolvers, each containing seven rounds." + desc = "Contains a .357 speedloader for revolvers, containing seven rounds." contains = list(/obj/item/ammo_box/a357, /obj/item/ammo_box/a357) cost = 1500 /datum/supply_pack/ammo/mag_556mm name = "5.56 Pistole C Magazine Crate" - desc = "Contains two 5.56mm magazines for the Pistole C, each containing twelve rounds." - contains = list(/obj/item/ammo_box/magazine/pistol556mm, - /obj/item/ammo_box/magazine/pistol556mm) - cost = 1500 + desc = "Contains a 5.56mm magazine for the Pistole C, containing twelve rounds." + contains = list(/obj/item/ammo_box/magazine/pistol556mm) + cost = 750 /datum/supply_pack/ammo/fms_mag name = "Ferromagnetic Slug Magazine Crate" - desc = "Contains two ferromagnetic slug magazines for the Model H pistol, each containing ten rounds." - contains = list(/obj/item/ammo_box/magazine/modelh, - /obj/item/ammo_box/magazine/modelh) - cost = 1500 + desc = "Contains a ferromagnetic slug magazine for the Model H pistol, containing ten rounds." + contains = list(/obj/item/ammo_box/magazine/modelh) + cost = 750 /* Shotgun ammo @@ -91,7 +77,7 @@ /datum/supply_pack/ammo/winchester_ammo name = "Flaming Arrow and Detective Special .38 Ammo Boxes" - desc = "Contains two 30 round ammo boxes for refilling .38 weapons." + desc = "Contains a 30 round ammo boxes for refilling .38 weapons." cost = 500 contains = list(/obj/item/ammo_box/c38_box, /obj/item/ammo_box/c38_box) @@ -119,11 +105,9 @@ /datum/supply_pack/ammo/wt550_ammo name = "WT-550 Auto Rifle Ammo Crate" - desc = "Contains three 20-round magazine for the WT-550 Auto Rifle. Each magazine is designed to facilitate rapid tactical reloads." - cost = 2250 - contains = list(/obj/item/ammo_box/magazine/wt550m9, - /obj/item/ammo_box/magazine/wt550m9, - /obj/item/ammo_box/magazine/wt550m9) + desc = "Contains a 20-round magazine for the WT-550 Auto Rifle. Each magazine is designed to facilitate rapid tactical reloads." + cost = 750 + contains = list(/obj/item/ammo_box/magazine/wt550m9) /datum/supply_pack/ammo/cool_wt550_ammo name = "WT-550 Auto Rifle Exotic Ammo Crate" @@ -134,10 +118,9 @@ /datum/supply_pack/ammo/smgm45ammo name = ".45 Cobra Ammo Crate" - desc = "Contains two .45 magazines for the Cobra-20, each containing 24 rounds." - cost = 1500 - contains = list(/obj/item/ammo_box/magazine/smgm45, - /obj/item/ammo_box/magazine/smgm45) + desc = "Contains a .45 magazine for the Cobra-20, containing 24 rounds." + cost = 750 + contains = list(/obj/item/ammo_box/magazine/smgm45) /* Rifle ammo @@ -145,54 +128,45 @@ /datum/supply_pack/ammo/gal308_ammo name = "CM-GAL .308 Magazine Crate" - desc = "Contains two .308 CM-GAL magazines for the CM-GAL rifle, each containing ten rounds." - contains = list(/obj/item/ammo_box/magazine/gal, - /obj/item/ammo_box/magazine/gal) - cost = 2000 + desc = "Contains a .308 CM-GAL magazine for the CM-GAL rifle, containing ten rounds." + contains = list(/obj/item/ammo_box/magazine/gal) + cost = 1000 /datum/supply_pack/ammo/gar_ammo name = "GAR Ferromagnetic Lance Magazine Crate" - desc = "Contains two ferromagnetic lance magazines for the GAR rifle, each containing thirty two rounds." - contains = list(/obj/item/ammo_box/magazine/gar, - /obj/item/ammo_box/magazine/gar) - cost = 2000 + desc = "Contains a ferromagnetic lance magazine for the GAR rifle, containing thirty two rounds." + contains = list(/obj/item/ammo_box/magazine/gar) + cost = 1000 /datum/supply_pack/ammo/claris_ammo name = "Claris Ferromagnetic Pellet Speedloader Crate" - desc = "Contains two ferromagnetic pellet speedloaders for the Claris rifle, each containing twenty two rounds." - contains = list(/obj/item/ammo_box/amagpellet_claris, - /obj/item/ammo_box/amagpellet_claris) - cost = 2000 + desc = "Contains a ferromagnetic pellet speedloader for the Claris rifle, containing twenty two rounds." + contains = list(/obj/item/ammo_box/amagpellet_claris) + cost = 1000 /datum/supply_pack/ammo/ebr_ammo name = "M514 EBR .308 Magazine Crate" - desc = "Contains two .308 magazines for the M514 EBR rifle, each containing ten rounds." - contains = list(/obj/item/ammo_box/magazine/ebr, - /obj/item/ammo_box/magazine/ebr) - cost = 2000 + desc = "Contains a .308 magazine for the M514 EBR rifle, containing ten rounds." + contains = list(/obj/item/ammo_box/magazine/ebr) + cost = 1000 /datum/supply_pack/ammo/skm_ammo name = "SKM 7.62x40mm CLIP Magazine Crate" - desc = "Contains two 7.62x40mm magazines for the SKM rifles, each containing twenty rounds." - contains = list(/obj/item/ammo_box/magazine/skm_762_40, - /obj/item/ammo_box/magazine/skm_762_40) - cost = 2000 + desc = "Contains a 7.62x40mm magazine for the SKM rifles, containing twenty rounds." + contains = list(/obj/item/ammo_box/magazine/skm_762_40) + cost = 1000 /datum/supply_pack/ammo/p16_ammo name = "P-16 5.56mm Magazine Crate" - desc = "Contains two 5.56mm magazines for the P-16 rifle, each containing thirty rounds." - contains = list(/obj/item/ammo_box/magazine/p16, - /obj/item/ammo_box/magazine/p16) - cost = 2000 + desc = "Contains a 5.56mm magazine for the P-16 rifle, containing thirty rounds." + contains = list(/obj/item/ammo_box/magazine/p16) + cost = 1000 /datum/supply_pack/ammo/a850r_ammo name = "8x50mmR En Bloc Clip Crate" - desc = "Contains four 8x50mmR en bloc clips for rifles like the illestren rifle, each containing five rounds." - contains = list(/obj/item/ammo_box/magazine/illestren_a850r, - /obj/item/ammo_box/magazine/illestren_a850r, - /obj/item/ammo_box/magazine/illestren_a850r, - /obj/item/ammo_box/magazine/illestren_a850r) - cost = 1000 + desc = "Contains a 8x50mmR en bloc clips for rifles like the illestren rifle, containing five rounds." + contains = list(/obj/item/ammo_box/magazine/illestren_a850r) + cost = 250 /datum/supply_pack/ammo/a762_ammo_box name = "7.62x40mm CLIP Ammo Box Crate" @@ -202,126 +176,144 @@ /datum/supply_pack/ammo/c556mmHITP_ammo_box name = "5.56 Caseless Ammo Box Crate" - desc = "Contains two fifty-round 5.56mm caseless boxes for SolGov sidearms like the Pistole C, for a total of 100 rounds." - contains = list(/obj/item/ammo_box/c556mmHITP, - /obj/item/ammo_box/c556mmHITP) - cost = 500 + desc = "Contains a fifty-round 5.56mm caseless box for SolGov sidearms like the Pistole C." + contains = list(/obj/item/ammo_box/c556mmHITP) + cost = 250 /datum/supply_pack/ammo/c45_ammo_box name = ".45 Ammo Box Crate" - desc = "Contains two fifty-round .45 boxes for pistols and SMGs like the M1911 or the C-20r, for a total of 100 rounds." - contains = list(/obj/item/ammo_box/c45, - /obj/item/ammo_box/c45) - cost = 500 + desc = "Contains a fifty-round .45 box for pistols and SMGs like the M1911 or the C-20r." + contains = list(/obj/item/ammo_box/c45) + cost = 250 /datum/supply_pack/ammo/c10mm_ammo_box name = "10mm Ammo Box Crate" - desc = "Contains two fifty-round 10mm boxes for pistols and SMGs like the Stechkin or the SkM-44(k), for a total of 100 rounds." - contains = list(/obj/item/ammo_box/c10mm, - /obj/item/ammo_box/c10mm) - cost = 500 + desc = "Contains a fifty-round 10mm box for pistols and SMGs like the Stechkin or the SkM-44(k)." + contains = list(/obj/item/ammo_box/c10mm) + cost = 250 /datum/supply_pack/ammo/c9mm_ammo_box name = "9mm Ammo Box Crate" - desc = "Contains two fifty-round 9mm boxes for pistols and SMGs such as the Commander or Saber, for a total of 100 rounds." - contains = list(/obj/item/ammo_box/c9mm, - /obj/item/ammo_box/c9mm) - cost = 500 + desc = "Contains a fifty-round 9mm box for pistols and SMGs such as the Commander or Saber." + contains = list(/obj/item/ammo_box/c9mm) + cost = 250 /datum/supply_pack/ammo/a308_ammo_box name = "308 Ammo Box Crate" - desc = "Contains one thirty-round .308 box for DMRs such as the SsG-04 and CM-GAL-S." + desc = "Contains a thirty-round .308 box for DMRs such as the SsG-04 and CM-GAL-S." contains = list(/obj/item/ammo_box/a308) cost = 500 /datum/supply_pack/ammo/c9mmap_ammo_box name = "9mm AP Ammo Box Crate" - desc = "Contains two fifty-round 9mm boxes loaded with armor piercing ammo, for a total of 100 rounds." - contains = list(/obj/item/ammo_box/c9mm/ap, - /obj/item/ammo_box/c9mm/ap) - cost = 1000 + desc = "Contains a fifty-round 9mm box loaded with armor piercing ammo." + contains = list(/obj/item/ammo_box/c9mm/ap) + cost = 500 /datum/supply_pack/ammo/c556mmHITPap_ammo_box name = "5.56 caseless AP Ammo Box Crate" - desc = "Contains two fifty-round 5.56mm caseless boxes loaded with armor piercing ammo, for a total of 100 rounds." - contains = list(/obj/item/ammo_box/c556mmHITP/ap, - /obj/item/ammo_box/c556mmHITP/ap) - cost = 1000 + desc = "Contains a fifty-round 5.56mm caseless boxloaded with armor piercing ammo." + contains = list(/obj/item/ammo_box/c556mmHITP/ap) + cost = 500 /datum/supply_pack/ammo/c45ap_ammo_box name = ".45 AP Ammo Box Crate" - desc = "Contains two fifty-round .45 boxes loaded with armor piercing ammo, for a total of 100 rounds." - contains = list(/obj/item/ammo_box/c45/ap, - /obj/item/ammo_box/c45/ap) - cost = 1000 + desc = "Contains a fifty-round .45 box loaded with armor piercing ammo." + contains = list(/obj/item/ammo_box/c45/ap) + cost = 500 /datum/supply_pack/ammo/c10mmap_ammo_box name = "10mm AP Ammo Box Crate" - desc = "Contains two fifty-round 10mm boxes loaded with armor piercing ammo, for a total of 100 rounds." - contains = list(/obj/item/ammo_box/c10mm/ap, - /obj/item/ammo_box/c10mm/ap) - cost = 1000 + desc = "Contains a fifty-round 10mm box loaded with armor piercing ammo." + contains = list(/obj/item/ammo_box/c10mm/ap) + cost = 500 /datum/supply_pack/ammo/c9mmhp_ammo_box name = "9mm HP Ammo Box Crate" - desc = "Contains two fifty-round 9mm boxes loaded with hollow point ammo, great against unarmored targets, for a total of 100 rounds." - contains = list(/obj/item/ammo_box/c9mm/hp, - /obj/item/ammo_box/c9mm/hp) - cost = 1000 + desc = "Contains a fifty-round 9mm box loaded with hollow point ammo, great against unarmored targets." + contains = list(/obj/item/ammo_box/c9mm/hp) + cost = 500 /datum/supply_pack/ammo/c10mmhp_ammo_box name = "10mm HP Ammo Box Crate" - desc = "Contains two fifty-round 10mm boxes loaded with hollow point ammo, great against unarmored targets, for a total of 100 rounds." - contains = list(/obj/item/ammo_box/c10mm/hp, - /obj/item/ammo_box/c10mm/hp) - cost = 1000 + desc = "Contains a fifty-round 10mm box loaded with hollow point ammo, great against unarmored targets." + contains = list(/obj/item/ammo_box/c10mm/hp) + cost = 500 /datum/supply_pack/ammo/c45hp_ammo_box name = ".45 HP Ammo Box Crate" - desc = "Contains two fifty-round 10mm boxes loaded with hollow point ammo, great against unarmored targets, for a total of 100 rounds." - contains = list(/obj/item/ammo_box/c45/hp, - /obj/item/ammo_box/c45/hp) - cost = 1000 + desc = "Contains a fifty-round 10mm box loaded with hollow point ammo, great against unarmored targets." + contains = list(/obj/item/ammo_box/c45/hp) + cost = 500 /datum/supply_pack/ammo/c556mmhitphp_ammo_box name = "5.56 Caseless HP Ammo Box Crate" - desc = "Contains two fifty-round 5.56mm caseless boxes loaded with hollow point ammo, great against unarmored targets, for a total of 100 rounds." - contains = list(/obj/item/ammo_box/c556mmHITP/hp, - /obj/item/ammo_box/c556mmHITP/hp) - cost = 1000 + desc = "Contains a fifty-round 5.56mm caseless box loaded with hollow point ammo, great against unarmored targets." + contains = list(/obj/item/ammo_box/c556mmHITP/hp) + cost = 500 /datum/supply_pack/ammo/c9mmrubber_ammo_box name = "9mm Rubber Ammo Box Crate" - desc = "Contains two fifty-round 9mm boxes loaded with less-than-lethal rubber rounds for a total of 100 rounds." - contains = list(/obj/item/ammo_box/c9mm/rubbershot, - /obj/item/ammo_box/c9mm/rubbershot) - cost = 500 + desc = "Contains a fifty-round 9mm box loaded with less-than-lethal rubber rounds." + contains = list(/obj/item/ammo_box/c9mm/rubbershot) + cost = 250 /datum/supply_pack/ammo/c10mmrubber_ammo_box name = "10mm Rubber Ammo Box Crate" - desc = "Contains two fifty-round 10mm boxes loaded with less-than-lethal rubber rounds for a total of 100 rounds." - contains = list(/obj/item/ammo_box/c10mm/rubbershot, - /obj/item/ammo_box/c10mm/rubbershot) - cost = 500 + desc = "Contains a fifty-round 10mm box loaded with less-than-lethal rubber rounds." + contains = list(/obj/item/ammo_box/c10mm/rubbershot) + cost = 250 /datum/supply_pack/ammo/c45mmrubber_ammo_box name = ".45 Rubber Ammo Box Crate" - desc = "Contains two fifty-round .45 boxes loaded with less-than-lethal rubber rounds for a total of 100 rounds." - contains = list(/obj/item/ammo_box/c45/rubbershot, - /obj/item/ammo_box/c45/rubbershot) - cost = 500 + desc = "Contains a fifty-round .45 box loaded with less-than-lethal rubber rounds." + contains = list(/obj/item/ammo_box/c45/rubbershot) + cost = 250 /datum/supply_pack/ammo/c556HITPrubber_ammo_box name = "5.56 Caseless Rubber Ammo Box Crate" - desc = "Contains two fifty-round 5.56 caseless boxes loaded with less-than-lethal rubber rounds for a total of 100 rounds." - contains = list(/obj/item/ammo_box/c556mmHITP/rubbershot, - /obj/item/ammo_box/c556mmHITP/rubbershot) - cost = 500 + desc = "Contains a fifty-round 5.56 caseless box loaded with less-than-lethal rubber rounds." + contains = list(/obj/item/ammo_box/c556mmHITP/rubbershot) + cost = 250 /datum/supply_pack/ammo/guncell name = "Weapon Cell Crate" - desc = "Contains three weapon cells, compatible with laser guns." - contains = list(/obj/item/stock_parts/cell/gun, - /obj/item/stock_parts/cell/gun, - /obj/item/stock_parts/cell/gun) - cost = 1500 + desc = "Contains a weapon cell, compatible with laser guns." + contains = list(/obj/item/stock_parts/cell/gun) + cost = 500 + +/datum/supply_pack/ammo/c46x30mm_boxcrate + name = "4.6x30mm Ammo Box Crate" + desc = "Contains a fifty-round 4.6x30mm box for PDWs such as the WT-550." + contains = list(/obj/item/ammo_box/c46x30mm_box) + cost = 250 + +/datum/supply_pack/ammo/c8x50mm_boxcrate + name = "8x50mm Ammo Box Crate" + desc = "Contains a twenty-round 8x50mm ammo box for rifles such as the Illestren." + contains = list(/obj/item/ammo_box/c8x50mm_box) + cost = 250 + +/datum/supply_pack/ammo/c8x50mm_boxhp_boxcrate + name = "8x50mm Hollow Point Crate" + desc = "Contains a twenty-round 8x50mm ammo box loaded with hollow point ammo, great against unarmored targets." + contains = list(/obj/item/ammo_box/c8x50mmhp_box) + cost = 500 + +/datum/supply_pack/ammo/ferropelletboxcrate + name = "Ferromagnetic Pellet Box Crate" + desc = "Contains a fifty-round ferromagnetic pellet ammo box for gauss guns such as the Claris." + contains = list(/obj/item/ammo_box/ferropelletbox) + cost = 250 + +/datum/supply_pack/ammo/ferroslugboxcrate + name = "Ferromagnetic Slug Box Crate" + desc = "Contains a twenty-round ferromagnetic slug for gauss guns such as the Model-H." + contains = list(/obj/item/ammo_box/ferroslugbox) + cost = 250 + +/datum/supply_pack/ammo/ferrolanceboxcrate + name = "Ferromagnetic Lance Box Crate" + desc = "Contains a fifty-round box for high-powered gauss guns such as the GAR assault rifle." + contains = list(/obj/item/ammo_box/ferrolancebox) + cost = 250 diff --git a/code/modules/projectiles/ammunition/ballistic/rifle.dm b/code/modules/projectiles/ammunition/ballistic/rifle.dm index 685458406584..5b93bfaa2463 100644 --- a/code/modules/projectiles/ammunition/ballistic/rifle.dm +++ b/code/modules/projectiles/ammunition/ballistic/rifle.dm @@ -7,6 +7,14 @@ caliber = "8x50mmR" projectile_type = /obj/projectile/bullet/a8_50r +/obj/item/ammo_casing/a8_50rhp + name = "8x50mmR hollow point bullet casing" + desc = "A 8x50mmR hollow point bullet casing." + icon_state = "rifle-brass-hollow" + caliber = "8x50mmR" + projectile_type = /obj/projectile/bullet/a8_50rhp + + // 8x58mm Caseless (SSG-669C) /obj/item/ammo_casing/caseless/a858 diff --git a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm index 0ca9796eefcb..c58035ef95fc 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm @@ -391,3 +391,45 @@ custom_materials = list(/datum/material/iron = 15000) w_class = WEIGHT_CLASS_TINY instant_load = TRUE + +/obj/item/ammo_box/c46x30mm_box + name = "ammo box (4.6x30mm)" + desc = "A box of standard 4.6x30mm ammo." + icon_state = "4.6x30mmbox" + ammo_type = /obj/item/ammo_casing/c46x30mm + max_ammo = 50 + +/obj/item/ammo_box/c8x50mm_box + name = "ammo box (8x50mm)" + desc = "A box of standard 8x50mm ammo." + icon_state = "8x50mm" + ammo_type = /obj/item/ammo_casing/a8_50r + max_ammo = 50 + +/obj/item/ammo_box/ferropelletbox + name = "ammo box (ferromagnetic pellets)" + desc = "A box of ferromagnetic pellets." + icon_state = "ferropelletsbox" + ammo_type = /obj/item/ammo_casing/caseless/gauss + max_ammo = 50 + +/obj/item/ammo_box/ferroslugbox + name = "ammo box (ferromagnetic slugs)" + desc = "A box of standard ferromagnetic slugs." + icon_state = "ferroslugsbox" + ammo_type = /obj/item/ammo_casing/caseless/gauss/slug + max_ammo = 20 + +/obj/item/ammo_box/ferrolancebox + name = "ammo box (ferromagnetic lances)" + desc = "A box of standard ferromagnetic lances." + icon_state = "ferrolancesbox" + ammo_type = /obj/item/ammo_casing/caseless/gauss/lance + max_ammo = 50 + +/obj/item/ammo_box/c8x50mmhp_box + name = "ammo box (8x50mm)" + desc = "A box of hollow point 8x50mm ammo, designed to cause massive damage at the cost of ." + icon_state = "8x50mm-hp" + ammo_type = /obj/item/ammo_casing/a8_50rhp + max_ammo = 20 diff --git a/code/modules/projectiles/projectile/bullets/rifle.dm b/code/modules/projectiles/projectile/bullets/rifle.dm index 8797fbdcde32..ddd3319122c7 100644 --- a/code/modules/projectiles/projectile/bullets/rifle.dm +++ b/code/modules/projectiles/projectile/bullets/rifle.dm @@ -13,6 +13,12 @@ damage = 35 armour_penetration = 40 +/obj/projectile/bullet/a8_50rhp + name = "8x50mmR bullet" + speed = 0.3 + damage = 55 + armour_penetration = 0 + // .300 Magnum (Smile Rifle) /obj/projectile/bullet/a300 diff --git a/icons/obj/ammo.dmi b/icons/obj/ammo.dmi index 022be8bcedd3bb0ba154c1ea054e2e4475515908..2078c7e25cd46418f630d46a76ee69c1b7a5cbf2 100644 GIT binary patch literal 36598 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 Bdfos4 literal 36015 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�# zNm22bJacEHj5W|kH=8PBr2DZpV_@&BHs6{m9;gRRRhM+-pBDADskp(1x5@ZC=nb@i zhi#t*t4?6Lz^LN;G5cK74G^mf$WO$ipHEp4dN5LT>I_|L_j*eAmy*=A+=Z}&U{|;S zRmG_tm=W#h`V2ppkMUElE%URkYA&p64I!z>GHJxu2)O*1E)O zgpJpgAAf(I$HQ~+u~yAfuT8P;$WP$ovnjdxAt+j*Er;2Fnjp&|nmZBs+_8L%sa~0Y z9pbdR5mo212!J6cVNO*V(?MHfPrVOsO(VCk_k4JdXJlI%j`wpB*xNWG+gtH{5M`%jGVq<|onWDQiJ<{?NZRStRr(@Xeez`;qJK z&_pPts~AG2m*{Rb%%K*))DM=Q>I!5APt}4PoaWty)_P%A3s{fkZ3zG1^tk|G=Q(F~ zZ{MO;8XP(8WSR+k23y6w3VmT{H%_&8=vkjof|$afBpT}*IhV|(hO>pXdSQLaBCh5< z*SN!X7iVF;{?(Jfo?fdECYRge2S!Ny3b#=stp|JLU}WwXPE=VQb!Wy6U>lyvTD6GE zYFE(H(Eo*z13ZZJ8cDE0oSszg6d_?sCahsjfbD6^u3okylZ3z@9Zg-05;d!k{|5XL BELi{m From 5854053549dd4849f883b96adac9cfb7d51c0220 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Mon, 4 Mar 2024 17:47:55 -0600 Subject: [PATCH 24/30] Automatic changelog generation for PR #2795 [ci skip] --- html/changelogs/AutoChangeLog-pr-2795.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2795.yml diff --git a/html/changelogs/AutoChangeLog-pr-2795.yml b/html/changelogs/AutoChangeLog-pr-2795.yml new file mode 100644 index 000000000000..6f68344d67f2 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2795.yml @@ -0,0 +1,6 @@ +author: Martinpachu +changes: + - {rscadd: 'Ammo boxes for 4.6, 8x50, Ferromagnetic slugs, pellets, lances and 8x50 + Hollow Points!'} + - {balance: Granularized ammo boxes in cargo in a similar way to guns.} +delete-after: true From 95db90e81807f9654093a8499dc78c381fff2b7f Mon Sep 17 00:00:00 2001 From: Changelogs Date: Tue, 5 Mar 2024 00:46:14 +0000 Subject: [PATCH 25/30] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-2720.yml | 5 ---- html/changelogs/AutoChangeLog-pr-2722.yml | 7 ----- html/changelogs/AutoChangeLog-pr-2738.yml | 5 ---- html/changelogs/AutoChangeLog-pr-2739.yml | 5 ---- html/changelogs/AutoChangeLog-pr-2744.yml | 5 ---- html/changelogs/AutoChangeLog-pr-2767.yml | 5 ---- html/changelogs/AutoChangeLog-pr-2775.yml | 4 --- html/changelogs/AutoChangeLog-pr-2795.yml | 6 ----- html/changelogs/AutoChangeLog-pr-2798.yml | 4 --- html/changelogs/AutoChangeLog-pr-2799.yml | 4 --- html/changelogs/AutoChangeLog-pr-2800.yml | 5 ---- html/changelogs/archive/2024-03.yml | 32 +++++++++++++++++++++++ 12 files changed, 32 insertions(+), 55 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-2720.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-2722.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-2738.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-2739.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-2744.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-2767.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-2775.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-2795.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-2798.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-2799.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-2800.yml diff --git a/html/changelogs/AutoChangeLog-pr-2720.yml b/html/changelogs/AutoChangeLog-pr-2720.yml deleted file mode 100644 index fc6d843ff297..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2720.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: MarkSuckerberg -changes: - - {bugfix: Headpikes actually work again} - - {bugfix: Reinforced floors now don't spawn metal when decompression is experienced} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-2722.yml b/html/changelogs/AutoChangeLog-pr-2722.yml deleted file mode 100644 index d57a53a24678..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2722.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: SomeguyManperson -changes: - - {rscadd: 'ancient goliaths, crystal fauna (aside from legion), elites and megafauna - now have boosted dissection outputs'} - - {rscdel: 'human corpses, podpeople, jellypeople and animal corpses can no longer - be dissected. What did you expect to find, an extra pair of lungs?'} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-2738.yml b/html/changelogs/AutoChangeLog-pr-2738.yml deleted file mode 100644 index b61da0a455ae..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2738.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: Timberpoes -changes: - - {bugfix: Papercode has been significantly improved and trivially filled paper - forms should no longer lag or crash players' game clients.} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-2739.yml b/html/changelogs/AutoChangeLog-pr-2739.yml deleted file mode 100644 index 471bb5250de2..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2739.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: thgvr -changes: - - {bugfix: Fishing shouldn't fail constantly anymore} - - {bugfix: Fish on the floor will die again} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-2744.yml b/html/changelogs/AutoChangeLog-pr-2744.yml deleted file mode 100644 index dda34f8111b8..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2744.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: meemofcourse -changes: - - {code_imp: ERT antag datums are now sorted into factional files} - - {admin: ERTs can have limited special roles} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-2767.yml b/html/changelogs/AutoChangeLog-pr-2767.yml deleted file mode 100644 index 190cc01e8890..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2767.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: Sadhorizon -changes: - - {tweak: 'Alternate jumpsuits for Cybersun, SUNS and NGR engineers/mechanics are - now GEC uniforms.'} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-2775.yml b/html/changelogs/AutoChangeLog-pr-2775.yml deleted file mode 100644 index 28adef48a427..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2775.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Apogee-dev -changes: - - {balance: Nerfed .38's damage back down to 20} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-2795.yml b/html/changelogs/AutoChangeLog-pr-2795.yml deleted file mode 100644 index 6f68344d67f2..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2795.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: Martinpachu -changes: - - {rscadd: 'Ammo boxes for 4.6, 8x50, Ferromagnetic slugs, pellets, lances and 8x50 - Hollow Points!'} - - {balance: Granularized ammo boxes in cargo in a similar way to guns.} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-2798.yml b/html/changelogs/AutoChangeLog-pr-2798.yml deleted file mode 100644 index c5b5c9783566..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2798.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Skies-Of-Blue -changes: - - {tweak: towels can now be crafted using two cloth} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-2799.yml b/html/changelogs/AutoChangeLog-pr-2799.yml deleted file mode 100644 index 6975bd008640..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2799.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Skies-Of-Blue -changes: - - {bugfix: 'resolves a typo, making the server less passive when it speaks'} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-2800.yml b/html/changelogs/AutoChangeLog-pr-2800.yml deleted file mode 100644 index b4ce32b6ec51..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2800.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: Skies-Of-Blue -changes: - - {tweak: 'you can now buckle to stools, just as the founding members of the SUNS - intended'} -delete-after: true diff --git a/html/changelogs/archive/2024-03.yml b/html/changelogs/archive/2024-03.yml index 04f45a4cfc1d..ce0b7bf82209 100644 --- a/html/changelogs/archive/2024-03.yml +++ b/html/changelogs/archive/2024-03.yml @@ -20,3 +20,35 @@ maps thgvr: - bugfix: Cryo wakeup message grammar fix +2024-03-05: + Apogee-dev: + - balance: Nerfed .38's damage back down to 20 + MarkSuckerberg: + - bugfix: Headpikes actually work again + - bugfix: Reinforced floors now don't spawn metal when decompression is experienced + Martinpachu: + - rscadd: Ammo boxes for 4.6, 8x50, Ferromagnetic slugs, pellets, lances and 8x50 + Hollow Points! + - balance: Granularized ammo boxes in cargo in a similar way to guns. + Sadhorizon: + - tweak: Alternate jumpsuits for Cybersun, SUNS and NGR engineers/mechanics are + now GEC uniforms. + Skies-Of-Blue: + - bugfix: resolves a typo, making the server less passive when it speaks + - tweak: towels can now be crafted using two cloth + - tweak: you can now buckle to stools, just as the founding members of the SUNS + intended + SomeguyManperson: + - rscadd: ancient goliaths, crystal fauna (aside from legion), elites and megafauna + now have boosted dissection outputs + - rscdel: human corpses, podpeople, jellypeople and animal corpses can no longer + be dissected. What did you expect to find, an extra pair of lungs? + Timberpoes: + - bugfix: Papercode has been significantly improved and trivially filled paper forms + should no longer lag or crash players' game clients. + meemofcourse: + - code_imp: ERT antag datums are now sorted into factional files + - admin: ERTs can have limited special roles + thgvr: + - bugfix: Fishing shouldn't fail constantly anymore + - bugfix: Fish on the floor will die again From fe8f5ff1f5318551942e3337d15bf499fae7b6fe Mon Sep 17 00:00:00 2001 From: Apogee-dev <60533805+Apogee-dev@users.noreply.github.com> Date: Tue, 5 Mar 2024 05:31:58 -0800 Subject: [PATCH 26/30] Removes the Caravan (#2782) ## About The Pull Request Removes the Caravan ## Why It's Good For The Game Removes the Caravan ## Changelog :cl: del: Removed the Caravan /:cl: --- _maps/configs/independent_caravan.json | 47 - .../independent/independent_caravan.dmm | 3566 ----------------- 2 files changed, 3613 deletions(-) delete mode 100644 _maps/configs/independent_caravan.json delete mode 100644 _maps/shuttles/independent/independent_caravan.dmm diff --git a/_maps/configs/independent_caravan.json b/_maps/configs/independent_caravan.json deleted file mode 100644 index ecadbea36c51..000000000000 --- a/_maps/configs/independent_caravan.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", - "map_name": "Caravan-class Modular ship", - "map_short_name": "Caravan-class", - "map_path": "_maps/shuttles/independent/independent_caravan.dmm", - "prefix": "ISV", - "description": "The Caravan is a relatively new freighter pattern, designed around a modular pod system that enables the ship to serve in a variety of roles beyond simple transportation. These pods are designed around a quick-release mechanism that allows the main hull to bluespace jump in, detach the pods, and load a new set of empty Caravan-type pods in a matter of minutes. While impressive in theory, the lack of empty compatible cargo pods in Frontier space renders the quick-detach system useless. Additionally, the modular attachment system is prone to wear and tear, necessitating more frequent and costly maintenance than other freighters. Despite these shortcomings, the Caravan has still earned a reputation as a versatile platform for a variety of missions. The main hull features a robust power pack and respectable crew accommodations, and most examples on the Frontier carry pods loaded for mining and survey duties.", - "tags": [ - "Generalist", - "Engineering" - ], - "namelists": [ - "GENERAL", - "SPACE", - "MYTHOLOGICAL", - "NATURAL" - ], - "roundstart": true, - "job_slots": { - "Captain": { - "outfit": "/datum/outfit/job/independent/captain/western", - "officer": true, - "slots": 1 - }, - "Ship's Doctor": { - "outfit": "/datum/outfit/job/independent/doctor", - "slots": 1 - }, - "Engine Technician": { - "outfit": "/datum/outfit/job/independent/atmos", - "slots": 1 - }, - "Asteroid Miner": { - "outfit": "/datum/outfit/job/independent/miner", - "slots": 1 - }, - "Fauna Researcher": { - "outfit": "/datum/outfit/job/independent/scientist", - "slots": 1 - }, - "Assistant": { - "outfit": "/datum/outfit/job/independent/assistant", - "slots": 1 - } - }, - "enabled": true -} diff --git a/_maps/shuttles/independent/independent_caravan.dmm b/_maps/shuttles/independent/independent_caravan.dmm deleted file mode 100644 index 344b2c171e3e..000000000000 --- a/_maps/shuttles/independent/independent_caravan.dmm +++ /dev/null @@ -1,3566 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"ah" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 8 - }, -/turf/open/floor/plasteel/tech, -/area/ship/cargo) -"ai" = ( -/obj/machinery/atmospherics/components/binary/pump/on/layer2{ - dir = 1; - name = "Air to Distro" - }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/structure/fireaxecabinet{ - dir = 8; - pixel_x = 32 - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"ap" = ( -/obj/machinery/computer/monitor{ - dir = 8 - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/bridge) -"aC" = ( -/obj/machinery/power/shuttle/engine/electric{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "0-4" - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"aE" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer4{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/cable{ - icon_state = "1-4" - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"bq" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 1 - }, -/turf/open/floor/wood, -/area/ship/crew) -"bI" = ( -/turf/closed/wall/mineral/titanium/survival/nodiagonal, -/area/ship/cargo) -"bJ" = ( -/obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "modwindows" - }, -/obj/machinery/atmospherics/pipe/layer_manifold, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"bT" = ( -/obj/machinery/atmospherics/pipe/simple/purple/visible{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer4, -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/obj/machinery/computer/atmos_control/incinerator{ - dir = 4; - sensors = list("nemo_incinerator_sensor"="Incinerator Chamber") - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"bW" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/light/directional/east, -/obj/machinery/light_switch{ - pixel_x = 25; - pixel_y = -25 - }, -/obj/machinery/computer/monitor{ - dir = 8 - }, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"bZ" = ( -/turf/template_noop, -/area/template_noop) -"cb" = ( -/obj/machinery/atmospherics/pipe/simple/violet/visible{ - dir = 10 - }, -/obj/structure/cable/yellow{ - icon_state = "0-8" - }, -/obj/machinery/power/terminal{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"cd" = ( -/obj/machinery/atmospherics/pipe/simple/violet/visible, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"cG" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/door/airlock/hatch{ - dir = 4; - name = "External Airlock" - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering/atmospherics) -"cT" = ( -/obj/item/kirbyplants/random, -/turf/open/floor/plasteel/white, -/area/ship/science) -"da" = ( -/obj/effect/spawner/structure/window/shuttle, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 4; - id = "modbridge" - }, -/turf/open/floor/plasteel/tech, -/area/ship/bridge) -"dh" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"dy" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/bridge) -"dG" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/railing/corner{ - dir = 8 - }, -/obj/structure/railing/corner, -/obj/structure/railing/corner{ - dir = 1 - }, -/obj/structure/railing/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 1 - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/hallway/central) -"dI" = ( -/obj/effect/turf_decal/borderfloor{ - dir = 8 - }, -/obj/effect/turf_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/firealarm/directional/west, -/obj/structure/cable{ - icon_state = "1-4" - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/cargo) -"dN" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 9 - }, -/obj/structure/table/reinforced, -/obj/item/storage/box/drinkingglasses{ - pixel_x = 5 - }, -/obj/item/reagent_containers/food/condiment/saltshaker{ - pixel_x = -8; - pixel_y = 5 - }, -/obj/item/reagent_containers/food/condiment/peppermill{ - pixel_x = -8 - }, -/obj/machinery/light_switch{ - pixel_x = 22; - pixel_y = 25 - }, -/obj/structure/sign/poster/contraband/random{ - pixel_y = 32 - }, -/turf/open/floor/wood, -/area/ship/crew) -"dQ" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/oil, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"dT" = ( -/obj/structure/window/reinforced/tinted/frosted{ - dir = 4 - }, -/obj/structure/dresser, -/turf/open/floor/carpet/red_gold, -/area/ship/bridge) -"ec" = ( -/obj/effect/turf_decal/trimline/opaque/brown/filled/warning{ - dir = 8 - }, -/obj/machinery/light/directional/south, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/cargo) -"eg" = ( -/obj/structure/window/plasma/reinforced/spawner{ - dir = 4 - }, -/obj/structure/window/plasma/reinforced/spawner{ - dir = 1 - }, -/obj/machinery/air_sensor/atmos/oxygen_tank{ - id_tag = "nemo_o2_sensor" - }, -/turf/open/floor/engine/o2, -/area/ship/engineering/atmospherics) -"eI" = ( -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/cargo) -"eS" = ( -/obj/effect/turf_decal/corner/opaque/blue/border{ - dir = 4 - }, -/obj/structure/extinguisher_cabinet/directional/east, -/turf/open/floor/plasteel/white, -/area/ship/science) -"eX" = ( -/obj/machinery/atmospherics/pipe/manifold/purple/visible{ - dir = 1 - }, -/obj/effect/turf_decal/number/zero{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"fe" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/machinery/button/door{ - id = "ModShip_thruster_port"; - name = "thruster doors"; - pixel_y = 25 - }, -/obj/machinery/portable_atmospherics/scrubber, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"fi" = ( -/obj/machinery/power/generator{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 8 - }, -/obj/structure/cable/yellow{ - icon_state = "0-4" - }, -/turf/open/floor/engine, -/area/ship/engineering/atmospherics) -"fv" = ( -/obj/machinery/door/window/northleft, -/obj/structure/closet/wall{ - dir = 4; - pixel_x = -29 - }, -/obj/item/clothing/shoes/galoshes, -/obj/item/reagent_containers/spray/cleaner, -/obj/item/reagent_containers/spray/cleaner, -/obj/item/clothing/glasses/science, -/obj/item/clothing/gloves/color/black, -/obj/item/storage/backpack, -/obj/item/clothing/head/soft/purple, -/obj/item/storage/belt/janitor, -/obj/item/storage/bag/trash{ - pixel_x = 5 - }, -/obj/item/storage/box/lights/mixed, -/obj/item/storage/box/lights/mixed, -/turf/open/floor/plasteel/dark, -/area/ship/crew/janitor) -"fw" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible/layer4, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"fF" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 4 - }, -/obj/machinery/newscaster/security_unit/directional/west, -/turf/open/floor/carpet/red_gold, -/area/ship/bridge) -"fT" = ( -/obj/structure/sink{ - dir = 8; - pixel_x = 12 - }, -/obj/machinery/shower{ - pixel_y = 15 - }, -/obj/structure/toilet{ - dir = 4 - }, -/obj/item/soap, -/obj/structure/curtain, -/turf/open/floor/plasteel/dark, -/area/ship/crew/toilet) -"gk" = ( -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/item/kirbyplants/random, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/bridge) -"gn" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible/layer4{ - dir = 8 - }, -/obj/item/radio/intercom/directional/south, -/obj/machinery/computer/atmos_control/tank/nitrogen_tank{ - dir = 1; - sensors = list("nemo_n2_sensor"="Nitrogen Tank") - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"go" = ( -/obj/machinery/power/smes/engineering, -/obj/structure/cable, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"gy" = ( -/obj/structure/chair/comfy/black{ - dir = 4 - }, -/turf/open/floor/carpet/red_gold, -/area/ship/bridge) -"gP" = ( -/obj/machinery/atmospherics/components/trinary/mixer{ - dir = 8 - }, -/obj/item/paper/crumpled{ - default_raw_text = "A mix of 67/33 ratio of oxygen (node 1) and plasma (node 2) works very well, even at 500 kPa." - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"hd" = ( -/obj/machinery/cryopod{ - dir = 1 - }, -/obj/machinery/computer/cryopod/directional/south, -/turf/open/floor/carpet/royalblue, -/area/ship/crew) -"hG" = ( -/obj/effect/turf_decal/borderfloor{ - dir = 4 - }, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/structure/tank_dispenser, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/cargo) -"ia" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible/layer4, -/obj/machinery/atmospherics/components/binary/pump{ - dir = 1 - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"iw" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 4 - }, -/turf/open/floor/carpet/royalblue, -/area/ship/crew) -"iz" = ( -/obj/structure/window/plasma/reinforced/spawner{ - dir = 1 - }, -/obj/structure/window/plasma/reinforced/spawner{ - dir = 8 - }, -/obj/effect/turf_decal/atmos/nitrogen, -/turf/open/floor/engine/n2, -/area/ship/engineering/atmospherics) -"iA" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/borderfloor{ - dir = 8 - }, -/obj/effect/turf_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/fore) -"iG" = ( -/obj/structure/railing{ - dir = 4 - }, -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 8 - }, -/turf/open/floor/plating, -/area/ship/hallway/central) -"iP" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/door/airlock/hatch{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/fore) -"jw" = ( -/obj/machinery/light/directional/north, -/obj/structure/closet/radiation, -/obj/item/reagent_containers/hypospray/medipen/penacid, -/obj/item/reagent_containers/food/drinks/bottle/vodka, -/obj/item/storage/pill_bottle/potassiodide, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"jA" = ( -/obj/machinery/atmospherics/pipe/simple/violet/visible, -/obj/structure/cable/yellow{ - icon_state = "0-8" - }, -/obj/machinery/power/terminal{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"jG" = ( -/obj/machinery/atmospherics/pipe/simple/violet/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/components/trinary/filter/on/layer4{ - dir = 4; - filter_type = "plasma" - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"jO" = ( -/obj/machinery/atmospherics/components/binary/circulator/cold{ - dir = 1 - }, -/turf/open/floor/engine, -/area/ship/engineering/atmospherics) -"jP" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/effect/landmark/observer_start, -/turf/open/floor/carpet/royalblue, -/area/ship/crew) -"ka" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 9 - }, -/obj/effect/landmark/start/scientist, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 5 - }, -/turf/open/floor/plasteel/white, -/area/ship/science) -"kb" = ( -/obj/machinery/atmospherics/components/trinary/filter/flipped/on/layer4{ - dir = 4; - filter_type = "n2" - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"kq" = ( -/obj/structure/chair/comfy/shuttle, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/bridge) -"kv" = ( -/obj/effect/turf_decal/corner/opaque/purple/border, -/obj/structure/extinguisher_cabinet/directional/south, -/turf/open/floor/plasteel/white, -/area/ship/science) -"kx" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber{ - dir = 4 - }, -/obj/structure/lattice/catwalk, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"kA" = ( -/turf/closed/wall/mineral/titanium, -/area/ship/hallway/fore) -"kC" = ( -/obj/docking_port/stationary{ - width = 27; - height = 15; - dwidth = 8 - }, -/turf/template_noop, -/area/template_noop) -"kO" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/effect/spawner/lootdrop/maintenance, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"kY" = ( -/obj/effect/turf_decal/box/corners{ - dir = 4 - }, -/obj/structure/closet/crate, -/obj/effect/spawner/lootdrop/maintenance/three, -/turf/open/floor/plasteel/tech, -/area/ship/cargo) -"ll" = ( -/obj/machinery/power/apc/auto_name/directional/south, -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/structure/closet/cabinet, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/item/storage/backpack/satchel/leather, -/obj/item/storage/backpack/satchel/leather/withwallet, -/obj/item/radio/off, -/obj/item/radio/off, -/obj/item/radio/off, -/obj/item/clothing/under/utility, -/obj/item/clothing/under/utility, -/obj/item/clothing/under/utility/skirt, -/obj/item/clothing/under/utility/skirt, -/obj/item/bedsheet/dorms, -/obj/item/bedsheet/dorms, -/obj/item/clothing/suit/jacket/leather/duster, -/obj/item/clothing/suit/jacket/leather/duster, -/obj/item/clothing/suit/jacket/leather/duster, -/obj/item/clothing/shoes/cowboy, -/obj/item/clothing/shoes/cowboy, -/obj/item/clothing/shoes/cowboy, -/obj/item/clothing/head/cowboy, -/obj/item/clothing/head/cowboy, -/obj/item/clothing/head/cowboy, -/obj/item/reagent_containers/food/drinks/flask, -/obj/item/reagent_containers/food/drinks/flask, -/obj/item/reagent_containers/food/drinks/flask, -/turf/open/floor/carpet/royalblue, -/area/ship/crew) -"lA" = ( -/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer4, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/fore) -"lI" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/bridge) -"mk" = ( -/obj/machinery/light/directional/south, -/obj/machinery/autolathe, -/turf/open/floor/plasteel/tech, -/area/ship/cargo) -"mL" = ( -/obj/machinery/light/directional/north, -/obj/machinery/modular_computer/console/preset/command{ - dir = 8 - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/bridge) -"mN" = ( -/obj/effect/turf_decal/corner/opaque/purple/border{ - dir = 4 - }, -/turf/open/floor/plasteel/white, -/area/ship/science) -"mO" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/toxin_output{ - dir = 4 - }, -/obj/structure/window/plasma/reinforced{ - dir = 4 - }, -/obj/structure/window/plasma/reinforced, -/turf/open/floor/engine/plasma, -/area/ship/engineering/atmospherics) -"mQ" = ( -/obj/effect/turf_decal/box/corners{ - dir = 8 - }, -/turf/open/floor/plasteel/tech, -/area/ship/cargo) -"mR" = ( -/obj/machinery/power/smes/shuttle/precharged{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/structure/window/plasma/reinforced/spawner{ - dir = 8 - }, -/obj/machinery/door/window/eastleft{ - name = "Engine Access" - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/machinery/door/poddoor{ - dir = 4; - id = "ModShip_thruster_starboard"; - name = "Thruster Blast Door" - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"mX" = ( -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable{ - icon_state = "0-2" - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/railing{ - dir = 9 - }, -/obj/machinery/light_switch{ - dir = 8; - pixel_x = 20; - pixel_y = -12 - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/hallway/central) -"nm" = ( -/obj/structure/bed, -/obj/item/bedsheet/dorms, -/obj/structure/curtain/bounty, -/turf/open/floor/carpet/royalblue, -/area/ship/crew) -"nB" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber{ - dir = 8; - name = "tank 4 output" - }, -/obj/structure/lattice/catwalk, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"nK" = ( -/obj/effect/turf_decal/corner/opaque/purple/border{ - dir = 8 - }, -/obj/machinery/firealarm/directional/west, -/turf/open/floor/plasteel/white, -/area/ship/science) -"nR" = ( -/obj/effect/spawner/structure/window/shuttle, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "modwindows" - }, -/turf/open/floor/plating, -/area/ship/bridge) -"od" = ( -/obj/effect/turf_decal/techfloor/orange{ - dir = 1 - }, -/obj/effect/turf_decal/techfloor/orange, -/obj/machinery/door/firedoor/heavy, -/obj/machinery/door/poddoor{ - id = "cargoblastdoors"; - name = "Cargo Bay Blast Door" - }, -/obj/structure/cable{ - icon_state = "0-2" - }, -/obj/machinery/power/shieldwallgen/atmos/roundstart{ - dir = 8; - id = "caravanbay" - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/cargo) -"og" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/turf/open/floor/wood, -/area/ship/crew) -"oi" = ( -/obj/machinery/power/smes/shuttle/precharged{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/structure/window/plasma/reinforced/spawner{ - dir = 8 - }, -/obj/machinery/door/window/eastleft{ - name = "Engine Access" - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/machinery/door/poddoor{ - dir = 4; - id = "ModShip_thruster_port"; - name = "Thruster Blast Door" - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"ow" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer2{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/obj/effect/landmark/start/atmospheric_technician, -/obj/effect/decal/cleanable/oil, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"oz" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/crew) -"oA" = ( -/obj/structure/table/reinforced, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/item/kitchen/knife, -/obj/item/kitchen/rollingpin, -/turf/open/floor/carpet/royalblue, -/area/ship/crew) -"oH" = ( -/obj/machinery/atmospherics/pipe/simple/purple/visible, -/obj/machinery/atmospherics/pipe/simple/green/visible/layer4, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"oI" = ( -/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer4, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/structure/railing/corner{ - dir = 8 - }, -/obj/structure/railing/corner, -/obj/structure/railing/corner{ - dir = 1 - }, -/obj/structure/railing/corner{ - dir = 4 - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/hallway/central) -"oR" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/airalarm/directional/east, -/obj/effect/decal/cleanable/robot_debris, -/obj/structure/reagent_dispensers/fueltank, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"oY" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/turf_decal/corner/transparent/neutral/border, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/fore) -"pa" = ( -/obj/structure/curtain/cloth/fancy, -/obj/structure/bed, -/obj/item/bedsheet/dorms, -/obj/item/radio/intercom/directional/south, -/turf/open/floor/carpet/red_gold, -/area/ship/bridge) -"px" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"pS" = ( -/obj/machinery/airalarm/directional/east, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced, -/obj/structure/railing{ - dir = 10 - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/hallway/central) -"qj" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, -/obj/effect/turf_decal/corner/transparent/neutral/border{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/fore) -"ql" = ( -/obj/effect/turf_decal/corner/transparent/neutral/border{ - dir = 9 - }, -/obj/machinery/light/directional/north, -/obj/item/kirbyplants/random, -/obj/structure/extinguisher_cabinet/directional/west, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/fore) -"qB" = ( -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/hallway/fore) -"qM" = ( -/obj/structure/table/reinforced, -/obj/machinery/newscaster/directional/south, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/bridge) -"qN" = ( -/obj/structure/table/reinforced, -/obj/machinery/microwave, -/turf/open/floor/carpet/royalblue, -/area/ship/crew) -"qP" = ( -/obj/effect/spawner/structure/window/plasma/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 8 - }, -/turf/open/floor/engine, -/area/ship/engineering/atmospherics) -"rd" = ( -/obj/structure/chair/sofa{ - dir = 8 - }, -/turf/open/floor/wood, -/area/ship/crew) -"re" = ( -/turf/closed/wall/mineral/titanium, -/area/ship/crew) -"ri" = ( -/obj/structure/dresser, -/turf/open/floor/carpet/royalblue, -/area/ship/crew) -"rj" = ( -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/item/kirbyplants/random, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/bridge) -"rl" = ( -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/bridge) -"rC" = ( -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/effect/decal/cleanable/robot_debris, -/obj/machinery/power/port_gen/pacman, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"rN" = ( -/obj/structure/window/plasma/reinforced/spawner{ - dir = 8 - }, -/obj/structure/window/plasma/reinforced/spawner{ - dir = 1 - }, -/obj/effect/turf_decal/atmos/oxygen, -/turf/open/floor/engine/o2, -/area/ship/engineering/atmospherics) -"rV" = ( -/obj/machinery/airalarm/directional/south, -/obj/structure/frame/machine, -/turf/open/floor/plasteel/tech, -/area/ship/cargo) -"sb" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/door/airlock/public/glass, -/turf/open/floor/plasteel/dark, -/area/ship/crew) -"sD" = ( -/obj/machinery/atmospherics/pipe/simple/violet/visible, -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/engineering/atmospherics) -"sQ" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer4, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"td" = ( -/obj/machinery/atmospherics/pipe/simple/violet/visible{ - dir = 6 - }, -/obj/machinery/power/smes/shuttle/precharged{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/structure/window/plasma/reinforced/spawner{ - dir = 8 - }, -/obj/machinery/door/window/eastleft{ - name = "Engine Access" - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/machinery/door/poddoor{ - dir = 4; - id = "ModShip_thruster_port"; - name = "Thruster Blast Door" - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"tk" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/railing, -/obj/structure/railing{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/hallway/central) -"tl" = ( -/turf/open/floor/wood, -/area/ship/crew) -"tI" = ( -/obj/effect/turf_decal/corner/transparent/neutral/border{ - dir = 8 - }, -/obj/machinery/firealarm/directional/west, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/fore) -"tQ" = ( -/obj/effect/spawner/lootdrop/maintenance, -/obj/effect/decal/cleanable/oil, -/obj/effect/turf_decal/number/five{ - dir = 8 - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"uw" = ( -/obj/machinery/mineral/ore_redemption{ - dir = 4; - input_dir = 8; - output_dir = 4 - }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/machinery/button/shieldwallgen{ - id = "caravanbay"; - pixel_x = 6; - pixel_y = 23 - }, -/turf/open/floor/plasteel/tech, -/area/ship/cargo) -"uJ" = ( -/obj/effect/turf_decal/corner/opaque/blue/border{ - dir = 9 - }, -/obj/machinery/airalarm/directional/north, -/obj/structure/table/glass, -/obj/item/reagent_containers/spray/cleaner, -/obj/item/storage/backpack/duffelbag/med/surgery, -/turf/open/floor/plasteel/white, -/area/ship/science) -"uZ" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/item/reagent_containers/glass/bucket{ - pixel_x = -3; - pixel_y = 8 - }, -/obj/item/mop, -/obj/machinery/light/directional/south, -/turf/open/floor/plasteel/dark, -/area/ship/crew/janitor) -"vy" = ( -/obj/machinery/atmospherics/pipe/layer_manifold{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer4, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"vB" = ( -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"vE" = ( -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/machinery/igniter/incinerator_atmos, -/turf/open/floor/engine/airless, -/area/ship/engineering/atmospherics) -"vG" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/plasteel/white, -/area/ship/science) -"vJ" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible/layer4, -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/engineering/atmospherics) -"vM" = ( -/obj/structure/window/plasma/reinforced/spawner, -/obj/structure/window/plasma/reinforced/spawner{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/oxygen_output{ - dir = 4 - }, -/turf/open/floor/engine/o2, -/area/ship/engineering/atmospherics) -"vV" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer4{ - dir = 9 - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"wk" = ( -/obj/structure/table/reinforced, -/obj/machinery/button/door{ - id = "modwindows"; - name = "Full Lockdown"; - pixel_x = 2; - pixel_y = 25 - }, -/obj/machinery/button/door{ - id = "modbridge"; - name = "Bridge Lockdown"; - pixel_x = 2; - pixel_y = 34 - }, -/obj/item/radio/intercom/wideband/table{ - dir = 1 - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/bridge) -"wt" = ( -/obj/effect/turf_decal/corner/opaque/purple/border{ - dir = 8 - }, -/obj/item/radio/intercom/directional/west, -/turf/open/floor/plasteel/white, -/area/ship/science) -"wL" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible/layer4{ - dir = 8 - }, -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/item/clothing/head/hardhat/atmos, -/obj/item/clothing/mask/gas/atmos, -/obj/item/clothing/suit/fire/atmos, -/obj/item/clothing/gloves/color/black, -/obj/item/extinguisher/advanced, -/obj/item/clothing/suit/hooded/wintercoat/engineering/atmos, -/obj/item/analyzer, -/obj/item/holosign_creator/atmos, -/obj/item/storage/belt/utility/atmostech, -/obj/item/radio/off, -/obj/item/clothing/glasses/meson/engine/tray, -/obj/item/pipe_dispenser, -/obj/item/multitool, -/obj/structure/closet/wall/orange{ - pixel_y = 32 - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"xg" = ( -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/bridge) -"xr" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/bridge) -"xF" = ( -/obj/machinery/atmospherics/pipe/simple/violet/visible, -/obj/effect/spawner/lootdrop/maintenance, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"xI" = ( -/obj/machinery/atmospherics/pipe/simple/purple/visible, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer4{ - dir = 8 - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"yo" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/tech, -/area/ship/cargo) -"ys" = ( -/obj/effect/turf_decal/corner/opaque/purple/border{ - dir = 10 - }, -/obj/structure/closet/crate/science, -/obj/item/circuitboard/machine/circuit_imprinter, -/obj/item/circuitboard/machine/rdserver, -/obj/item/disk/nanite_program, -/obj/item/nanite_scanner, -/obj/item/reagent_scanner, -/obj/item/clothing/glasses/hud/diagnostic, -/obj/item/clothing/glasses/science, -/obj/item/clothing/glasses/science/prescription, -/obj/item/circuitboard/machine/experimentor, -/obj/item/circuitboard/machine/protolathe/department/cargo, -/turf/open/floor/plasteel/white, -/area/ship/science) -"yw" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/railing{ - dir = 4 - }, -/obj/structure/railing{ - dir = 8 - }, -/obj/machinery/light/directional/south, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 1 - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/hallway/central) -"yD" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 8 - }, -/obj/machinery/computer/helm{ - dir = 8 - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/bridge) -"yI" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/tech, -/area/ship/cargo) -"zk" = ( -/obj/machinery/atmospherics/pipe/simple/purple/visible{ - dir = 10 - }, -/obj/machinery/atmospherics/components/binary/pump/on/layer4, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"zB" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer4, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/computer/atmos_control/tank/oxygen_tank{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"zJ" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/obj/machinery/computer/atmos_control/tank/toxin_tank{ - dir = 4; - sensors = list("nemo_tox_sensor"="Plasma Tank") - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible/layer4{ - dir = 8 - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"zO" = ( -/obj/machinery/atmospherics/pipe/simple/violet/visible{ - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer4{ - dir = 10 - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"zW" = ( -/obj/effect/turf_decal/corner/opaque/purple/border{ - dir = 9 - }, -/obj/structure/frame/machine, -/turf/open/floor/plasteel/white, -/area/ship/science) -"Ad" = ( -/obj/effect/turf_decal/corner/transparent/neutral/border{ - dir = 10 - }, -/obj/machinery/light/directional/south, -/obj/item/kirbyplants/random, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/fore) -"Ah" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/door/airlock/survival_pod, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/cargo) -"Ak" = ( -/obj/item/radio/intercom/directional/east, -/turf/open/floor/plasteel/tech, -/area/ship/cargo) -"AS" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/incinerator_input{ - dir = 4 - }, -/turf/open/floor/engine/airless, -/area/ship/engineering/atmospherics) -"AV" = ( -/obj/structure/closet/radiation, -/obj/item/reagent_containers/hypospray/medipen/penacid, -/obj/item/reagent_containers/food/drinks/bottle/vodka, -/obj/item/storage/pill_bottle/potassiodide, -/obj/machinery/airalarm/directional/north, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"Ba" = ( -/turf/closed/wall/mineral/titanium/survival/pod, -/area/ship/cargo) -"Be" = ( -/obj/effect/turf_decal/techfloor/orange{ - dir = 1 - }, -/obj/effect/turf_decal/techfloor/orange, -/obj/machinery/door/firedoor/heavy, -/obj/machinery/door/poddoor{ - id = "cargoblastdoors"; - name = "Cargo Bay Blast Door" - }, -/obj/structure/cable{ - icon_state = "0-2" - }, -/obj/machinery/power/shieldwallgen/atmos/roundstart{ - dir = 4; - id = "caravanbay" - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/cargo) -"Bf" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/effect/turf_decal/siding/wood{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/wood, -/area/ship/crew) -"Bi" = ( -/turf/open/floor/carpet/royalblue, -/area/ship/crew) -"Bn" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 4; - name = "Waste to Environment" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer4, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"Bs" = ( -/obj/effect/turf_decal/corner/opaque/blue/border{ - dir = 10 - }, -/obj/structure/closet/crate/freezer/blood, -/turf/open/floor/plasteel/white, -/area/ship/science) -"Bt" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "0-4" - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"Bv" = ( -/obj/effect/turf_decal/trimline/opaque/brown/filled/warning{ - dir = 8 - }, -/obj/effect/landmark/start/shaft_miner, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/cargo) -"BT" = ( -/turf/closed/wall/mineral/titanium, -/area/ship/bridge) -"BV" = ( -/obj/structure/closet/crate, -/obj/effect/spawner/lootdrop/maintenance/three, -/turf/open/floor/plasteel/tech, -/area/ship/cargo) -"Ca" = ( -/obj/effect/turf_decal/box/corners{ - dir = 1 - }, -/obj/structure/extinguisher_cabinet/directional/north, -/turf/open/floor/plasteel/tech, -/area/ship/cargo) -"Ch" = ( -/obj/effect/turf_decal/corner/transparent/neutral/border{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/fore) -"Cr" = ( -/obj/effect/turf_decal/corner/transparent/neutral/border{ - dir = 6 - }, -/obj/machinery/light/directional/south, -/obj/structure/sign/poster/contraband/random{ - pixel_x = 32 - }, -/obj/machinery/vending/coffee, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/fore) -"Cs" = ( -/obj/structure/table, -/obj/item/storage/toolbox/mechanical{ - pixel_y = 10 - }, -/obj/item/storage/toolbox/electrical, -/obj/item/storage/belt/utility/full, -/obj/item/clothing/gloves/color/yellow, -/obj/item/clothing/glasses/meson/engine, -/obj/item/clothing/glasses/meson/prescription, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"CF" = ( -/obj/structure/window/plasma/reinforced/spawner{ - dir = 8 - }, -/obj/structure/window/plasma/reinforced/spawner{ - dir = 4 - }, -/obj/structure/window/plasma/reinforced/spawner, -/obj/machinery/air_sensor/atmos/air_tank{ - id_tag = "nemo_air_sensor" - }, -/obj/effect/turf_decal/atmos/air, -/turf/open/floor/engine/air, -/area/ship/engineering/atmospherics) -"CO" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/components/trinary/mixer/airmix/inverse{ - dir = 4; - target_pressure = 101.325 - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"Di" = ( -/obj/effect/turf_decal/corner/opaque/blue/border, -/obj/structure/table/glass, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/door/window{ - dir = 1 - }, -/obj/item/storage/firstaid/fire{ - pixel_y = 6 - }, -/obj/item/storage/firstaid/regular, -/obj/item/storage/firstaid/brute{ - pixel_y = -8 - }, -/turf/open/floor/plasteel/white, -/area/ship/science) -"DC" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/carpet/royalblue, -/area/ship/crew) -"DD" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer4, -/obj/machinery/portable_atmospherics/pump, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"DI" = ( -/obj/machinery/atmospherics/pipe/simple/violet/visible{ - dir = 4 - }, -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/structure/extinguisher_cabinet/directional/south, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"Em" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible/layer4{ - dir = 5 - }, -/obj/machinery/power/smes/shuttle/precharged{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/structure/window/plasma/reinforced/spawner{ - dir = 8 - }, -/obj/machinery/door/window/eastleft{ - name = "Engine Access" - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/machinery/door/poddoor{ - dir = 4; - id = "ModShip_thruster_starboard"; - name = "Thruster Blast Door" - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"EB" = ( -/obj/structure/table/reinforced, -/obj/item/radio/intercom/directional/south, -/obj/item/areaeditor/shuttle, -/obj/item/megaphone/command, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/bridge) -"EI" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer4, -/obj/machinery/button/ignition/incinerator/atmos{ - dir = 4; - pixel_x = -26; - pixel_y = -8 - }, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/structure/table, -/obj/item/weldingtool, -/obj/item/weldingtool, -/obj/item/weldingtool, -/obj/item/weldingtool, -/obj/item/paper{ - default_raw_text = "The igniter in the chamber does not work very well. I suggest throwing lit welders down the disposal chute over there to ignite the chamber."; - pixel_x = -6 - }, -/obj/machinery/button/door/incinerator_vent_atmos_aux{ - dir = 4; - pixel_x = -28; - pixel_y = 8 - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"EU" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/door/window{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/carpet/red_gold, -/area/ship/bridge) -"Fb" = ( -/obj/machinery/atmospherics/pipe/simple/purple/visible{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/green/visible/layer4, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"Fc" = ( -/obj/machinery/atmospherics/pipe/simple{ - dir = 8 - }, -/obj/effect/spawner/structure/window/plasma/reinforced, -/turf/open/floor/engine, -/area/ship/engineering/atmospherics) -"Ff" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/machinery/suit_storage_unit/atmos, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"Fl" = ( -/obj/machinery/door/poddoor/shutters/preopen{ - id = "modwindows" - }, -/obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"Fn" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/railing/corner{ - dir = 8 - }, -/obj/structure/railing/corner, -/obj/structure/railing/corner{ - dir = 4 - }, -/obj/structure/railing/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 1 - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/hallway/central) -"Fq" = ( -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/turf/open/floor/carpet/royalblue, -/area/ship/crew) -"FK" = ( -/obj/effect/turf_decal/borderfloor{ - dir = 8 - }, -/obj/structure/closet/wall{ - dir = 4; - pixel_x = -32 - }, -/obj/item/kinetic_crusher, -/obj/item/storage/bag/ore, -/obj/item/mining_scanner, -/obj/item/gps/mining, -/obj/item/clothing/glasses/meson, -/obj/item/clothing/glasses/meson/prescription, -/obj/item/pickaxe, -/obj/item/pickaxe, -/obj/item/pickaxe, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/cargo) -"FL" = ( -/turf/open/floor/plasteel/white, -/area/ship/science) -"FV" = ( -/turf/closed/wall/mineral/titanium, -/area/ship/science) -"Gf" = ( -/obj/effect/turf_decal/borderfloor{ - dir = 8 - }, -/obj/effect/turf_decal/industrial/outline/yellow, -/obj/machinery/suit_storage_unit/independent/mining/eva, -/obj/item/radio/intercom/directional/west, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/cargo) -"GE" = ( -/obj/machinery/atmospherics/components/trinary/filter/on/layer4{ - dir = 8; - filter_type = "o2" - }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"GG" = ( -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/science) -"GS" = ( -/obj/structure/window/plasma/reinforced/spawner{ - dir = 4 - }, -/obj/structure/window/plasma/reinforced/spawner, -/obj/machinery/air_sensor/atmos/nitrogen_tank{ - id_tag = "nemo_n2_sensor" - }, -/turf/open/floor/engine/n2, -/area/ship/engineering/atmospherics) -"Hd" = ( -/obj/machinery/airalarm/directional/south, -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/wood, -/area/ship/crew) -"Hf" = ( -/obj/effect/turf_decal/borderfloor{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 4 - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/cargo) -"Hm" = ( -/obj/item/storage/cans/sixbeer, -/obj/structure/closet/secure_closet/freezer/meat/open, -/obj/machinery/light/directional/north, -/turf/open/floor/carpet/royalblue, -/area/ship/crew) -"HD" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high/plus, -/obj/item/stock_parts/cell/high/plus, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"HE" = ( -/obj/structure/window/plasma/reinforced/spawner{ - dir = 8 - }, -/obj/structure/window/plasma/reinforced/spawner, -/obj/machinery/atmospherics/components/unary/outlet_injector/on/layer4{ - dir = 8 - }, -/turf/open/floor/engine/n2, -/area/ship/engineering/atmospherics) -"HF" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/door/airlock/external/glass{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/fore) -"HH" = ( -/obj/effect/turf_decal/corner/opaque/blue/border{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 8 - }, -/turf/open/floor/plasteel/white, -/area/ship/science) -"Iq" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/fore) -"Ix" = ( -/obj/effect/turf_decal/atmos/plasma, -/obj/structure/window/plasma/reinforced, -/obj/structure/window/plasma/reinforced{ - dir = 8 - }, -/turf/open/floor/engine/plasma, -/area/ship/engineering/atmospherics) -"IJ" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/structure/chair/sofa/right, -/obj/structure/extinguisher_cabinet/directional/north, -/turf/open/floor/wood, -/area/ship/crew) -"IO" = ( -/obj/machinery/door/airlock{ - name = "Restroom" - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/ship/crew/toilet) -"IZ" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/green/visible/layer4{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"Jb" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/layer4, -/turf/open/floor/engine, -/area/ship/engineering/atmospherics) -"Jn" = ( -/obj/effect/turf_decal/borderfloor{ - dir = 4 - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/cargo) -"Jr" = ( -/obj/effect/turf_decal/corner/opaque/purple/border{ - dir = 6 - }, -/turf/open/floor/plasteel/white, -/area/ship/science) -"Jy" = ( -/obj/structure/table/reinforced, -/obj/machinery/chem_dispenser/drinks, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/turf/open/floor/carpet/royalblue, -/area/ship/crew) -"JM" = ( -/obj/effect/turf_decal/corner/opaque/purple/border{ - dir = 5 - }, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/structure/frame/machine, -/obj/machinery/light_switch{ - pixel_x = 11; - pixel_y = 23 - }, -/turf/open/floor/plasteel/white, -/area/ship/science) -"JN" = ( -/obj/structure/lattice/catwalk, -/turf/open/floor/plating, -/area/ship/external) -"JR" = ( -/obj/structure/closet/secure_closet/wall{ - dir = 4; - name = "kitchen freezer"; - pixel_x = -28 - }, -/obj/item/storage/fancy/egg_box, -/obj/item/storage/fancy/egg_box, -/obj/item/reagent_containers/food/condiment/enzyme{ - pixel_y = 5 - }, -/obj/item/reagent_containers/food/condiment/milk, -/obj/item/reagent_containers/food/condiment/milk, -/obj/item/reagent_containers/food/condiment/rice, -/obj/item/reagent_containers/food/condiment/rice, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/sugar, -/obj/item/reagent_containers/food/condiment/sugar, -/turf/open/floor/carpet/royalblue, -/area/ship/crew) -"JV" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/turf_decal/industrial/warning, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/railing{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/railing{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/hallway/central) -"Kh" = ( -/obj/effect/turf_decal/corner/opaque/blue/border{ - dir = 5 - }, -/obj/structure/table/optable, -/turf/open/floor/plasteel/white, -/area/ship/science) -"Ko" = ( -/obj/effect/turf_decal/box/corners, -/obj/structure/closet/cardboard, -/obj/effect/spawner/lootdrop/maintenance/three, -/turf/open/floor/plasteel/tech, -/area/ship/cargo) -"Kx" = ( -/obj/machinery/atmospherics/pipe/layer_manifold, -/obj/machinery/light/directional/east, -/obj/machinery/computer/atmos_control/tank/air_tank{ - dir = 8; - sensors = list("nemo_air_sensor"="Air Mix Tank") - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"KL" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 1 - }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"KN" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/turf_decal/corner/transparent/neutral/border{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/fore) -"Lh" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/railing{ - dir = 4 - }, -/obj/structure/railing{ - dir = 8 - }, -/obj/machinery/light/directional/south, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 1 - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/hallway/central) -"Ls" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 6 - }, -/obj/structure/chair/sofa/corner{ - dir = 8 - }, -/obj/machinery/newscaster/directional/south, -/turf/open/floor/wood, -/area/ship/crew) -"Lv" = ( -/turf/open/floor/carpet/red_gold, -/area/ship/bridge) -"Lz" = ( -/obj/machinery/airalarm/directional/north, -/obj/machinery/light_switch{ - pixel_x = 25; - pixel_y = 25 - }, -/obj/structure/table/reinforced, -/obj/item/paper_bin{ - pixel_x = 10 - }, -/obj/item/folder/blue{ - pixel_x = -6; - pixel_y = -1 - }, -/obj/item/stamp/captain{ - pixel_x = -7; - pixel_y = 8 - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/bridge) -"LH" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"LR" = ( -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/crew) -"Mi" = ( -/obj/effect/spawner/structure/window/shuttle, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "modwindows" - }, -/turf/open/floor/plasteel/tech, -/area/ship/science) -"Mq" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/atmos{ - dir = 1 - }, -/turf/open/floor/engine, -/area/ship/engineering/atmospherics) -"MO" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 4; - name = "Waste to Environment" - }, -/obj/machinery/atmospherics/pipe/simple/purple/visible, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"MP" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 6 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/tech, -/area/ship/cargo) -"Nt" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/effect/turf_decal/industrial/warning{ - dir = 8 - }, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/railing, -/obj/structure/railing{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/hallway/central) -"Nx" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/purple/visible{ - dir = 5 - }, -/obj/effect/turf_decal/number/three{ - dir = 8 - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"NB" = ( -/obj/structure/girder, -/turf/open/floor/plating, -/area/ship/external) -"NS" = ( -/obj/effect/turf_decal/corner/opaque/blue/border{ - dir = 1 - }, -/obj/machinery/light/directional/north, -/obj/machinery/computer/operating, -/turf/open/floor/plasteel/white, -/area/ship/science) -"Ok" = ( -/obj/machinery/light_switch{ - pixel_x = 25; - pixel_y = 25 - }, -/obj/machinery/firealarm/directional/north, -/mob/living/simple_animal/pet/cat/space{ - name = "Félicette" - }, -/obj/structure/bed/dogbed/runtime{ - name = "Félicette's bed" - }, -/turf/open/floor/carpet/red_gold, -/area/ship/bridge) -"Op" = ( -/obj/effect/spawner/structure/window/shuttle, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 4; - id = "modbridge" - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/bridge) -"OB" = ( -/obj/machinery/atmospherics/pipe/simple/violet/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer4, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"OD" = ( -/obj/effect/turf_decal/corner/transparent/neutral/border{ - dir = 5 - }, -/obj/machinery/light/directional/north, -/obj/item/radio/intercom/directional/east, -/obj/machinery/vending/cigarette, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/fore) -"OO" = ( -/obj/effect/turf_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/cargo) -"OU" = ( -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/engineering/atmospherics) -"OW" = ( -/obj/machinery/holopad/emergency/command, -/obj/structure/extinguisher_cabinet/directional/south, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/bridge) -"Ps" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 5 - }, -/obj/structure/chair/sofa/corner, -/obj/machinery/light/directional/north, -/turf/open/floor/wood, -/area/ship/crew) -"Pw" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/turf_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/railing{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/railing{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/hallway/central) -"Qm" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 8 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/structure/chair/sofa{ - dir = 8 - }, -/turf/open/floor/wood, -/area/ship/crew) -"Qv" = ( -/obj/structure/window/plasma/reinforced/spawner{ - dir = 8 - }, -/obj/structure/window/plasma/reinforced/spawner{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/air_input{ - dir = 8 - }, -/turf/open/floor/engine/air, -/area/ship/engineering/atmospherics) -"Qy" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/item/kirbyplants/random, -/obj/machinery/firealarm/directional/north, -/turf/open/floor/wood, -/area/ship/crew) -"QA" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/door/airlock/command, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/plasteel/dark, -/area/ship/bridge) -"QD" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer4, -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/machinery/airalarm/directional/west, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"QF" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/fore) -"QL" = ( -/obj/machinery/atmospherics/pipe/simple/purple/visible, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"QR" = ( -/obj/machinery/atmospherics/components/binary/dp_vent_pump/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/machinery/advanced_airlock_controller{ - pixel_y = 25 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/fore) -"Ri" = ( -/obj/machinery/air_sensor/atmos/toxin_tank{ - id_tag = "nemo_tox_sensor" - }, -/obj/structure/window/plasma/reinforced{ - dir = 1 - }, -/obj/structure/window/plasma/reinforced{ - dir = 8 - }, -/turf/open/floor/engine/plasma, -/area/ship/engineering/atmospherics) -"Rx" = ( -/obj/structure/table/wood, -/turf/open/floor/wood, -/area/ship/crew) -"Ry" = ( -/obj/structure/sign/poster/contraband/atmosia_independence, -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/engineering/atmospherics) -"RH" = ( -/obj/machinery/atmospherics/pipe/simple/violet/visible{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer4{ - dir = 5 - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"RP" = ( -/obj/effect/turf_decal/corner/opaque/blue/border{ - dir = 6 - }, -/obj/structure/table/glass, -/obj/machinery/door/window{ - dir = 1 - }, -/obj/item/healthanalyzer, -/obj/item/healthanalyzer, -/obj/item/clothing/gloves/color/latex/nitrile, -/obj/item/clothing/glasses/hud/health, -/obj/item/defibrillator/loaded, -/obj/item/clothing/glasses/hud/health/prescription, -/turf/open/floor/plasteel/white, -/area/ship/science) -"RR" = ( -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/bridge) -"Sh" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 4 - }, -/turf/open/floor/carpet/red_gold, -/area/ship/bridge) -"Sp" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/railing{ - dir = 4 - }, -/obj/structure/railing{ - dir = 8 - }, -/obj/machinery/light/directional/north, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/hallway/central) -"Sv" = ( -/obj/effect/turf_decal/corner/opaque/purple/border{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 4 - }, -/turf/open/floor/plasteel/white, -/area/ship/science) -"SA" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/bridge) -"SB" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/effect/turf_decal/kfp_small/left{ - dir = 8 - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"SE" = ( -/obj/machinery/atmospherics/pipe/simple/violet/visible{ - dir = 9 - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"Tg" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/wood, -/area/ship/crew) -"Tj" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{ - dir = 1 - }, -/obj/structure/lattice/catwalk, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"TI" = ( -/obj/machinery/atmospherics/pipe/simple/purple/visible{ - dir = 10 - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"TN" = ( -/obj/structure/window/plasma/reinforced/spawner{ - dir = 8 - }, -/obj/structure/window/plasma/reinforced/spawner, -/obj/machinery/atmospherics/components/unary/outlet_injector/on/layer4, -/turf/open/floor/engine/o2, -/area/ship/engineering/atmospherics) -"Uc" = ( -/obj/effect/spawner/structure/window/shuttle, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 4; - id = "modwindows" - }, -/turf/open/floor/plasteel/tech, -/area/ship/crew) -"Ur" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/structure/railing/corner{ - dir = 1 - }, -/obj/structure/railing/corner{ - dir = 8 - }, -/obj/effect/turf_decal/borderfloor{ - dir = 4 - }, -/obj/effect/turf_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/hallway/central) -"Us" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable, -/obj/structure/reagent_dispensers/watertank, -/obj/machinery/light_switch{ - pixel_y = 11; - dir = 8; - pixel_x = 20 - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"Ux" = ( -/obj/machinery/firealarm/directional/south, -/obj/machinery/light_switch{ - dir = 1; - pixel_x = 11; - pixel_y = -18 - }, -/turf/open/floor/plasteel/tech, -/area/ship/cargo) -"UB" = ( -/obj/structure/railing{ - dir = 8 - }, -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ship/hallway/central) -"UY" = ( -/obj/effect/turf_decal/corner/opaque/blue/border{ - dir = 4 - }, -/obj/machinery/iv_drip, -/obj/item/radio/intercom/directional/east, -/turf/open/floor/plasteel/white, -/area/ship/science) -"Vc" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/door/airlock/shuttle, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/science) -"Vf" = ( -/obj/structure/window/reinforced/tinted/frosted{ - dir = 4 - }, -/obj/machinery/modular_computer/console/preset/command{ - dir = 8 - }, -/turf/open/floor/carpet/red_gold, -/area/ship/bridge) -"Vk" = ( -/obj/effect/turf_decal/borderfloor{ - dir = 10 - }, -/obj/effect/turf_decal/industrial/outline/yellow, -/obj/machinery/suit_storage_unit/mining, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/cargo) -"Vq" = ( -/turf/open/floor/plasteel/tech, -/area/ship/cargo) -"Vz" = ( -/obj/structure/mirror, -/turf/closed/wall/mineral/titanium, -/area/ship/crew) -"VF" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/effect/turf_decal/corner/transparent/neutral/border{ - dir = 4 - }, -/obj/machinery/light_switch{ - pixel_x = 25; - pixel_y = 25 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/fore) -"VH" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 8 - }, -/obj/structure/table/wood, -/turf/open/floor/wood, -/area/ship/crew) -"VR" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 4 - }, -/obj/structure/bed, -/obj/structure/curtain/bounty, -/obj/item/bedsheet/dorms, -/turf/open/floor/carpet/royalblue, -/area/ship/crew) -"VT" = ( -/obj/machinery/atmospherics/pipe/layer_manifold{ - dir = 4 - }, -/obj/machinery/door/airlock/external/glass{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/obj/docking_port/mobile{ - dir = 8; - launch_status = 0; - name = "Modular ship"; - preferred_direction = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/fore) -"WK" = ( -/turf/template_noop, -/area/ship/external) -"WX" = ( -/obj/machinery/atmospherics/components/binary/circulator, -/turf/open/floor/engine, -/area/ship/engineering/atmospherics) -"Xe" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 1 - }, -/obj/effect/turf_decal/corner/transparent/neutral/border{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/fore) -"Xm" = ( -/obj/machinery/door/poddoor/incinerator_atmos_aux{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"XQ" = ( -/obj/effect/turf_decal/siding/wood, -/obj/item/radio/intercom/directional/south, -/obj/structure/chair/sofa/left{ - dir = 1 - }, -/turf/open/floor/wood, -/area/ship/crew) -"XS" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 8 - }, -/obj/structure/chair/comfy/shuttle{ - dir = 4; - name = "Helm" - }, -/obj/effect/landmark/start/captain, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/bridge) -"XX" = ( -/obj/effect/spawner/structure/window/shuttle, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "modwindows" - }, -/turf/open/floor/plating, -/area/ship/crew) -"XZ" = ( -/obj/effect/turf_decal/corner/opaque/blue/border{ - dir = 8 - }, -/turf/open/floor/plasteel/white, -/area/ship/science) -"Yp" = ( -/obj/structure/window/reinforced/tinted/frosted{ - dir = 4 - }, -/obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/whiskey{ - pixel_x = 6; - pixel_y = 12 - }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ - pixel_x = 5; - pixel_y = 4 - }, -/turf/open/floor/carpet/red_gold, -/area/ship/bridge) -"Yq" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/effect/turf_decal/corner/transparent/neutral/border{ - dir = 8 - }, -/obj/machinery/light_switch{ - pixel_x = -25; - pixel_y = 25 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/fore) -"Yr" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{ - dir = 4 - }, -/obj/machinery/air_sensor/atmos/incinerator_tank{ - id_tag = "nemo_incinerator_sensor" - }, -/turf/open/floor/engine/airless, -/area/ship/engineering/atmospherics) -"Ys" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/machinery/button/door{ - dir = 1; - id = "ModShip_thruster_starboard"; - name = "thruster doors"; - pixel_x = -9; - pixel_y = -25 - }, -/obj/structure/closet/crate/radiation, -/obj/item/stack/sheet/mineral/plasma/five, -/obj/item/stack/sheet/mineral/plasma/five, -/obj/structure/extinguisher_cabinet/directional/south{ - pixel_x = 8 - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"YB" = ( -/obj/structure/window/plasma/reinforced/spawner{ - dir = 4 - }, -/obj/structure/window/plasma/reinforced/spawner{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/nitrogen_output{ - dir = 1 - }, -/turf/open/floor/engine/n2, -/area/ship/engineering/atmospherics) -"YE" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/tank_dispenser/oxygen, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"YL" = ( -/obj/machinery/firealarm/directional/south, -/obj/machinery/computer/cargo/express{ - dir = 1 - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/bridge) -"Zj" = ( -/obj/structure/window/plasma/reinforced/spawner{ - dir = 8 - }, -/obj/structure/window/plasma/reinforced/spawner{ - dir = 4 - }, -/obj/structure/window/plasma/reinforced/spawner{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/on/layer2{ - dir = 1 - }, -/turf/open/floor/engine/air, -/area/ship/engineering/atmospherics) -"Zs" = ( -/obj/effect/turf_decal/techfloor/orange{ - dir = 1 - }, -/obj/effect/turf_decal/techfloor/orange, -/obj/machinery/door/firedoor/heavy, -/obj/machinery/door/poddoor{ - id = "cargoblastdoors"; - name = "Cargo Bay Blast Door" - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/cargo) -"Zy" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/on/layer4{ - dir = 1 - }, -/obj/structure/window/plasma/reinforced{ - dir = 1 - }, -/obj/structure/window/plasma/reinforced{ - dir = 4 - }, -/turf/open/floor/engine/plasma, -/area/ship/engineering/atmospherics) -"Zz" = ( -/obj/machinery/light/directional/north, -/obj/structure/closet/secure_closet{ - icon_state = "cap"; - name = "\proper captain's locker"; - req_access_txt = "20" - }, -/obj/item/storage/belt/sabre, -/obj/item/clothing/under/rank/command/captain/skirt, -/obj/item/clothing/suit/armor/vest/capcarapace/duster, -/obj/item/clothing/head/caphat/cowboy, -/obj/item/clothing/glasses/sunglasses, -/obj/item/clothing/shoes/cowboy/white, -/obj/item/storage/backpack/captain, -/obj/item/storage/backpack/duffelbag/captain, -/obj/item/storage/backpack/messenger/com, -/obj/item/storage/backpack/satchel/cap, -/obj/item/pen/survival, -/obj/item/radio/off, -/obj/item/clothing/shoes/laceup, -/obj/item/clothing/shoes/workboots/mining, -/obj/item/reagent_containers/food/drinks/flask/gold, -/obj/item/gun/ballistic/revolver/detective, -/obj/item/gun/ballistic/derringer, -/obj/item/ammo_box/c38, -/obj/item/ammo_box/c38, -/turf/open/floor/carpet/red_gold, -/area/ship/bridge) -"ZM" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible/layer4{ - dir = 5 - }, -/obj/machinery/light/directional/south, -/obj/structure/table, -/obj/item/stack/sheet/glass/fifty, -/obj/item/stack/sheet/metal/fifty, -/obj/item/circuitboard/machine/thermomachine, -/obj/item/circuitboard/machine/thermomachine, -/obj/item/storage/box/stockparts/basic, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"ZN" = ( -/obj/effect/turf_decal/corner/opaque/purple/border{ - dir = 1 - }, -/obj/machinery/light/directional/north, -/obj/machinery/computer/rdconsole, -/turf/open/floor/plasteel/white, -/area/ship/science) -"ZV" = ( -/obj/effect/turf_decal/borderfloor{ - dir = 4 - }, -/obj/effect/turf_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/button/door{ - id = "cargoblastdoors"; - name = "Blast Door Control"; - pixel_x = 25; - pixel_y = 25 - }, -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/cargo) -"ZW" = ( -/obj/machinery/atmospherics/pipe/simple/violet/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer4{ - dir = 8 - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) - -(1,1,1) = {" -bZ -OU -aC -aC -aC -OU -bZ -bZ -bZ -bZ -bZ -bZ -bZ -OU -aC -aC -aC -OU -"} -(2,1,1) = {" -bZ -OU -oi -oi -td -sD -Mq -OU -OU -Xm -OU -OU -Jb -vJ -Em -mR -mR -OU -"} -(3,1,1) = {" -kx -OU -fe -Bt -DI -OU -OU -OU -Yr -vE -AS -OU -OU -OU -wL -Bt -Ys -OU -"} -(4,1,1) = {" -Tj -bJ -DD -sQ -RH -Ri -Ix -OU -Fc -qP -Fc -OU -rN -TN -GE -vB -rC -Fl -"} -(5,1,1) = {" -nB -OU -jw -kO -jG -Zy -mO -OU -WX -fi -jO -OU -eg -vM -kb -fw -ZM -OU -"} -(6,1,1) = {" -bZ -OU -AV -px -ZW -zJ -Bn -EI -OB -ow -bT -QD -zB -vy -IZ -KL -gn -OU -"} -(7,1,1) = {" -bZ -OU -Cs -dQ -zO -vV -TI -QL -MO -xI -gP -SB -tQ -eX -Nx -iz -HE -OU -"} -(8,1,1) = {" -bZ -OU -HD -LH -cb -jA -xF -cd -SE -dh -zk -oH -ia -Fb -CO -YB -GS -OU -"} -(9,1,1) = {" -bZ -OU -OU -Ff -go -go -bW -YE -oR -aE -Us -ai -Kx -Zj -Qv -CF -OU -OU -"} -(10,1,1) = {" -bZ -bZ -OU -OU -OU -Ry -OU -OU -OU -cG -OU -OU -OU -OU -OU -OU -OU -bZ -"} -(11,1,1) = {" -bZ -bZ -NB -WK -WK -WK -NB -WK -WK -Nt -WK -WK -NB -WK -WK -WK -NB -bZ -"} -(12,1,1) = {" -bZ -NB -bI -Ba -Ba -Ba -Ba -bI -Sp -Fn -yw -GG -FV -FV -FV -FV -GG -bZ -"} -(13,1,1) = {" -bZ -bZ -Be -dI -FK -Gf -Vk -Ba -WK -tk -WK -FV -zW -wt -nK -ys -FV -bZ -"} -(14,1,1) = {" -kC -bZ -Zs -OO -eI -Bv -ec -Ba -WK -tk -WK -FV -ZN -FL -FL -kv -FV -bZ -"} -(15,1,1) = {" -bZ -bZ -od -ZV -Jn -Hf -hG -Ba -UB -tk -UB -FV -JM -Sv -mN -Jr -Mi -bZ -"} -(16,1,1) = {" -bZ -NB -Ba -uw -yI -MP -yo -Ah -Pw -oI -JV -Vc -vG -ka -FL -cT -Mi -bZ -"} -(17,1,1) = {" -bZ -bZ -Ba -Ca -mQ -ah -rV -Ba -iG -tk -iG -FV -uJ -HH -XZ -Bs -Mi -bZ -"} -(18,1,1) = {" -bZ -bZ -Ba -BV -Vq -Vq -mk -Ba -WK -tk -WK -FV -NS -FL -FL -Di -FV -bZ -"} -(19,1,1) = {" -bZ -bZ -Ba -kY -Ko -Ak -Ux -Ba -WK -tk -WK -FV -Kh -UY -eS -RP -FV -bZ -"} -(20,1,1) = {" -bZ -NB -bI -Ba -Ba -Ba -Ba -bI -Sp -dG -Lh -GG -FV -FV -FV -FV -GG -bZ -"} -(21,1,1) = {" -bZ -bZ -NB -WK -WK -WK -NB -WK -WK -tk -WK -WK -NB -WK -WK -WK -NB -bZ -"} -(22,1,1) = {" -bZ -LR -re -re -re -re -oz -WK -mX -Ur -pS -WK -rl -BT -BT -BT -BT -rl -"} -(23,1,1) = {" -bZ -re -Hm -JR -VR -nm -re -kA -kA -iP -kA -kA -BT -Zz -fF -Lv -pa -BT -"} -(24,1,1) = {" -bZ -XX -qN -Bi -iw -ri -Vz -fT -IO -iA -fv -uZ -BT -Ok -Sh -Lv -gy -nR -"} -(25,1,1) = {" -bZ -XX -oA -Bi -jP -hd -re -kA -qB -QF -kA -kA -BT -dT -EU -Vf -Yp -nR -"} -(26,1,1) = {" -bZ -re -Jy -Fq -DC -ll -re -ql -Ch -Yq -tI -Ad -BT -rj -lI -RR -gk -BT -"} -(27,1,1) = {" -bZ -re -dN -og -bq -Bf -sb -KN -Iq -lA -Iq -oY -QA -xr -SA -xg -OW -BT -"} -(28,1,1) = {" -bZ -re -Qy -tl -Tg -Hd -re -OD -qj -VF -Xe -Cr -BT -Lz -dy -kq -YL -BT -"} -(29,1,1) = {" -bZ -re -IJ -Rx -VH -XQ -re -kA -qB -HF -qB -kA -BT -wk -XS -xg -EB -BT -"} -(30,1,1) = {" -bZ -re -Ps -rd -Qm -Ls -re -JN -kA -QR -kA -JN -BT -mL -yD -ap -qM -BT -"} -(31,1,1) = {" -bZ -re -Uc -Uc -Uc -Uc -re -bZ -qB -VT -qB -bZ -BT -da -da -Op -da -BT -"} From 4936875adf8f25bceecddc2bc33ca57425ff2b93 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Tue, 5 Mar 2024 07:46:44 -0600 Subject: [PATCH 27/30] Automatic changelog generation for PR #2782 [ci skip] --- html/changelogs/AutoChangeLog-pr-2782.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2782.yml diff --git a/html/changelogs/AutoChangeLog-pr-2782.yml b/html/changelogs/AutoChangeLog-pr-2782.yml new file mode 100644 index 000000000000..0aede9a92ee0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2782.yml @@ -0,0 +1,4 @@ +author: Apogee-dev +changes: + - {rscdel: Removed the Caravan} +delete-after: true From 272ca42628939948079cefc68a6859bc5153c154 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Wed, 6 Mar 2024 00:46:38 +0000 Subject: [PATCH 28/30] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-2782.yml | 4 ---- html/changelogs/archive/2024-03.yml | 3 +++ 2 files changed, 3 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-2782.yml diff --git a/html/changelogs/AutoChangeLog-pr-2782.yml b/html/changelogs/AutoChangeLog-pr-2782.yml deleted file mode 100644 index 0aede9a92ee0..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2782.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Apogee-dev -changes: - - {rscdel: Removed the Caravan} -delete-after: true diff --git a/html/changelogs/archive/2024-03.yml b/html/changelogs/archive/2024-03.yml index ce0b7bf82209..7f36ac1e5eff 100644 --- a/html/changelogs/archive/2024-03.yml +++ b/html/changelogs/archive/2024-03.yml @@ -52,3 +52,6 @@ thgvr: - bugfix: Fishing shouldn't fail constantly anymore - bugfix: Fish on the floor will die again +2024-03-06: + Apogee-dev: + - rscdel: Removed the Caravan From a3b2f846859cd551406d8e17603455958ea0b5e0 Mon Sep 17 00:00:00 2001 From: Imaginos16 <77556824+Imaginos16@users.noreply.github.com> Date: Tue, 5 Mar 2024 23:27:19 -0700 Subject: [PATCH 29/30] The Tablening (#2803) ## About The Pull Request This PR resprites a majority of tables to make them look less grungy and more aesthetically pleasing as we move forward to make the server look fancier and cleaner! ![image](https://github.com/shiptest-ss13/Shiptest/assets/77556824/417314cc-4fed-4ac2-8698-43c6a89ad778) ## Why It's Good For The Game It looks nice :) ## Changelog :cl: PositiveEntropy imageadd: Tables have been completely cleaned up and polished into new iterations! /:cl: --- icons/obj/smooth_structures/glass_table.dmi | Bin 4579 -> 11024 bytes icons/obj/smooth_structures/poker_table.dmi | Bin 1513 -> 5323 bytes .../smooth_structures/reinforced_table.dmi | Bin 5753 -> 4632 bytes .../reinforced_wood_table.dmi | Bin 1453 -> 4809 bytes icons/obj/smooth_structures/table.dmi | Bin 1142 -> 4114 bytes icons/obj/smooth_structures/table_chem.dmi | Bin 1930 -> 2379 bytes .../obj/smooth_structures/table_greyscale.dmi | Bin 1265 -> 4077 bytes icons/obj/smooth_structures/wood_table.dmi | Bin 1215 -> 4180 bytes 8 files changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/smooth_structures/glass_table.dmi b/icons/obj/smooth_structures/glass_table.dmi index bbe91b1135a8b995aa6db3b79ccd5ce9fb1bfcff..5904bfa72964c58ba265b31c6df2c1ea14c9cbee 100644 GIT binary patch literal 11024 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 Z*ecMwWF5tBgGXFBtSoF#R{Y`_{U5*`(r^F( literal 4579 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 TY9svDh6iJ2bNVIv@`L{Zljeo3 diff --git a/icons/obj/smooth_structures/poker_table.dmi b/icons/obj/smooth_structures/poker_table.dmi index d3c255d3941e8b00609fd9a816e5f7d2f48aed82..6a10369d8259dd2d3e922c39071c4ecf9ec8a6b1 100644 GIT binary patch literal 5323 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 BbXKdfvc*p(|;i+wE literal 5753 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 delta 1447 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 delta 1103 zcmV-V1hD&(Aod857&HU}0002!19#E@000tDOjJbx001*JHnzgRR9jqvkB;u{?j=ob zGXMYp0d!JMQvg8b*k+L-B7cN-t#p#q*o7Nu5f}Oo6{8LKfHvswTXZJ~$6Znm%=F&5 zlR~fC&33Pw-BvxqFvj~$ue6(&DtpFb>Zgk}D(gc$_vv#PQ==h} z`XVYj4c#?-&R?8B&OpvW&Oxq%+yZhQa!bh7RA+1mbwsEoLOl^`ihod73?47qqoIOZ zTG~>pEiLWnFgiMo6^;Sb(NnKIE$yj}p6XcB((*^Tc)X}NVmXP|g~NS19PbMES>ZnM zcu0+RL5Y_^N&m?31%o{@zf)Q0cHg{T?-#wnAbj{vp8x;=0})9?K~#90?VC|QFpn(P&XrO_s0DfHuYS}Abh`(ORhxqnXRl9DW z3ws3&@m)tg#&>)wQ>Qfacq*Gb#qIl3+vfd#WZc&56>u1T6My;`f9?Y=_xw_!0(ts^qkVmefxiR7`@&hq!c`-^r6r22B-(YBVGdQ2tZFjB?ZjR zmkZ23{#@WOz9#xNP4f{ak_#P#WIAGNQ_Jj*}>4K&a|0}Wguusy}5VsY2khkxYZ6h>YMfqZI14*>E)BgMu*TR55b{tW==wWd@O=({rl3z5X zJ4oqn{**?-$TQpk0DT#7r1qN|n2%2bQw#pXr!D%_^=zQ5=fr|Bo;`h;ItVFXdcJ`M z8fc(_1{$~qV65-j6MEGT#QKlsBM^#_4!!CJl5jo(p??@@(5rqR3FjjaijgyV-4BeS z`RSC3e&GBm75%^kQmXoa$&^C5RioGaz$luZ2j=>L5}2;{vf~n%T|kv*wElB}*gw?u zBGrdM++P%56Ir=<{@Q4ufd(3Apn(Ri5*X_{_9{LN?1WeGX<#F~icbUIgjextpi??~ zN;kr*_ngcmhrh&o2WFG|)f;4K#3-!1k2$T6jMd&y8Kq zYsF63g@8@YYvEUZ1fFwVE1Y3(cO7BDWmCFi;Ib+GWZ<$X9ob=>^GV>yGh7z9VPNr1 z^-17O%K|z6)quxl+ADE<@iWTGKm!dl&_DwXTz>^n{XdBJMb)_MKgyro;<&v0D4S*S zXSX;mFF(p=nflp{E;ovC*(`HPXHTj6osX_>igDQvd^m9N`=scj&6Z~)<(Sfo0aZOX zQva0!^D@vt0}V9LKm!ewz*bvu2NvS+2xeJTuRgJy#EfEeiJF)FX>WZ VeGm|`g~k8?002ovPDHLkV1mEO6czvg diff --git a/icons/obj/smooth_structures/table_chem.dmi b/icons/obj/smooth_structures/table_chem.dmi index 66daabea5843f358e58b31de1c685c8d08563255..b673fd963630c8eed0ba0e45cc4a2cb08f7644fd 100644 GIT binary patch literal 2379 zcmb`Jdpy(oAIFEGS!+(lTn>wK!Y?OOE;&DZEhdUcLd7JxowSjaxox&{jwOk7b8RkN zsEOp{wi2rdKTPG4xfGciwhU{tan|YK{LcCB{2q_rAK%aW{eHcluh-}C`26)v_ujV~ zrlzX~0)b%eZZ1CZI{xJYE6LAkrT9L1G4S^A#mK9^zHwk6*2cyO3PtK@m~GN`vb762 z5SqFHg4|Q79xW#n2tNA`fSjfV!{x*0MBe~{OITd!si+u26dnfx5eu(ey}yBKiNHii zG-2Jk*dvVf<|?7zP9oRu(cH)e>&jBn@BLU7!2C{Upxf z;U>(j9RGo*XBq>_a%>0#HYAHsMriJZD27*EjD1}RJ)&YyK2G~~Piao4x9DxsiZYY} zqim(Il~>r8%)hdFEjxC&Vkkz{`6 z*B0)x7lD}AZZLKWU#MXZu!T1_K@zK|fde_$^xVCJlwnAUmV+aVLTD{-|Ty^V2 zCN0&tU8Hitew4T_lA4UKe$L9oIB85)v}}RfYAJYT-&VO>h&!&BzbOmWZ#U8own7`| zG2&vo&&|wfXy{V5>GIc3 zjpn_Ct~P`Xs0!_ngO&x7;mpDQvA)zEKEH}jfCU4&Jz_Pht^}FL-z%CoY*ox#emJ{~ z`z&cm?)EPZ>6VWs4;MpO!Og=<1N<*~V7MX|pOX=_b3jDCm3H-{Y)~M)dlG1Fe9Kdf z%Y!g|yY{B6I#}06^K6rEgc%DS9rHs~RHF1oakB!MRkG};`3}mCQT;S>Em`1mNX)Kp1ke3=pxWX z4mVy!h9;xL&In)4ZMPt$fD3vEianOUN#cyCWsX}KM*C~vhOW+q@>j2%LIeiQn~ zZh_d6;i2I|K1-cKGCQo$3pCS6Qp?@1(wqe`FN!)1-`^`!w%FmRE;Cfi#|nOY31*{8 zi$5q=?Wi&p|Jy7w8J+qybONf_WwvLfTTK_M9)jIJAMe*Ipso|1%V~Z6|8lRzz;vZfgd}TsD zd!AG^yBl7Ut24PlYFJajr&V2L^I@<{l}Dt8r&L$e?e3yvhTA2NNI#;0xQ?x#d8~`CMZHMQj zEEZavlX@>dT1@OlVo2q((L@Jsh7oXl>2=&=(|PAvQ9sWv7$GiMO5**2W)J!I{KfhI z9^YM(dW)Yea?i9@7{*XmX14^q9){Q|Z=a-H>-4O?Q>TGbn^cq?F_Fufo-hh@0bg|V zAl|?BU)gIdL27OtSWM=D?0w8K}mjyIJ~xGJ(pz%--IOj;Xa z{y7~*=pWX^5lE&|x?C&lj}g+-gLYbTB=Iq*eK2@YaTM_>SeQohu*4JF!4J~fJYqh3 z#!Z9A3}Ep5@%L;&F~m{Vz`A8OtIT+(t$j2#j>R%2;)xtEAC^@x{z~u!B9AE?9~87h zF2Kk{>TeBw!B7F-AH{?8E%}(0H;4ngv_-c|$tO}6{_1ND!uG&d1@Wh{)?9X!yMB_x z@>LF5cptmJ1Ica{2Y6=lUIByAGw0 zEIa0eKkq+7N1d-(mL9$QzasdZK>d{Hxo(^yZW3;qIv|-)3X?UG=^1AcO zEKitdfmWbvt~jw0vzHYldwVr4?@Lr~Ofb2=B*ffu4t|2%`E8n2 zJq_O0iuSj&H^4}3$R4(K^mv(1t^~Q{` V7!&B+F8|E|xnuUZ+}m}O`a6+RyI24K delta 1655 zcmV--28j8~5{eIy7=H)@0000j^P1BD004DROjJbx0015y9x^gAOiWB!Sy?VFE&u=k zG&xgeZIMt`dP`DwKSgH6#m65YB`ko5Hfn)Cafc)(E;gN~_vZ&RF%Up;h%7HVIi9G7 zh)GI_NkKwHUteER1Y*|AF# z0e=O*Nkl4O^Q^5QQ-+l9JR?C{^3q-rRfp|9@gxFdvXGXX)(l5znzUnv>m` zSE5fI4!emWsGC)o$Ire&HQm8NI(J- zkbndP4H6Le1SFuHzak(3-vi+7U9WB<4}V_^D9m38`@;P9&X3~$6B=>k;cEef`Rj8k z$d~4?&&kAsA`f2;C<^=1{7r`s$-36t&EbpWA*%K8A+5C8Y^wi1B-`!wWApjuYXQ&d zCuvpW@p0>vU|*U)O_~B}t+$)Q7YD%gi4w=we1rpR*RKISeL4XYeLp~Vc#^caO@H^_ zUp#_Y_Sq@RvXFpH{X8#4Eu;L#rjxbD%VBY5uX0sH26!oD!dp;6N7UmvDY~l`^~A2uH32nbHA30?`l6yWdP*2qCuBVw130G1o;rK z6$Chd?~V3=9sf)H(ZqK_0NZg;`^yVAdH0@yM=;B>AC30;V8?&Tp0n4iiSNPzZjwz0 z@bsRO?~0=6+%xb9y2R?I(;+_V_)q0?`C690DwPue=0!dfuziHeQ(ZWMdn+)Y|5Nnr z9snpMb4@;oee_4f=a0^b$(}E-?G6~h-=N@wP^1g z(BtJ?|Liy5S}~6X#rZvam_Ul7J){LRuWw#}fX4OB3lPw_zIg!x8rL^3KtSXA<^>37 zT;IF^0gdaM7a*WNzT*NmbdR1p;NdAc1n@L*GceoxI={0XuLiVkK%4);{@*pA{cA;WJZu49>jrd`~~WTs+cmXEJLMaOoo8(nY|fi-1cP0hcZUE?op%x(K** z5%B)*&eRVeap~bL0@Q|ssuL=H63_O;5HOBS{Q!cyi^>hAiK!nzXn)hi1GbhqUD)4r z@qlQ5)5Qa}kAL8Pf75>|mDd4yd4E%H!1dbH40*=&&nFu&iA7&!pNPU=zfFt!`CIXJs zhnWaCQXgizen9>E|DpX!wd0lR7tx+b0j{|=y=EKv0e{~APa3b^KUBSbaoGF+?RL9? z`+s&HJ#_z2_1dXnZ?3lccQfirQ8jnY-_BUO5tY6f>|DQNsy?>~F{o>;H4+XyHTE}BP@t0Pr2Cg4ang99Z zdy@i=AYcL#P!a*{ML+^dBA~qpNI*#hv=;#hD2agfBA_YY2H*AGq% zXuo!efCLm9B;d6J+OHp+7|?$G;M9QTFZHy1e*ny9$;O@|82tbM002ovPDHLkV1nL! BC?@~_ diff --git a/icons/obj/smooth_structures/table_greyscale.dmi b/icons/obj/smooth_structures/table_greyscale.dmi index 40627ded321f62aed16b32d27326b0fa01dec624..02a85082c7c4d5193521b78c510d55f54e406e88 100644 GIT binary patch literal 4077 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 delta 1227 zcmV;+1T_2YAMpv07&-(40002!19#E@000eQ=Ofi*Voto|NpqSxOjMY zz`($*udopS0004WQchCM0oBn{uRSg8sg9oNSkuz-N4j{ts5xReiPwe0eL5WP z3inyzKJj=+jdwwbmqAJY$nXV&Ju<&jS?G4(ykGAZy}=-S_)eby000AqNklz!S1=BL7WN8%Smob^KIVUK z3H3iL>?LpwA|La&hvrg$;tP8Tgfl}Q^S3j+)SvjmUIO9F(DNBq_5XQcFM-fMppW_6 z`3}_?4?A7~hxm+;C!mr7X4lIN9v(j!h~E=sgax_yCVEQYyDsWf<~eSdi{BLYr~h7} zrqbtG1{!Fffd(3A;PJqJD`+b0BY=HdqNc$bW!kA>(6=S3Hg5N*N>f!E)q&K%{nx!e z1pfs9^jgrrMJzleK7EE_9+*BuXtz%2^*k_&)~A8Vd7uQQ`@L*j0<#;a_KfyF7?^(Qs6T`| z3%unJcWwH+k^94cT0CDA*O#nZK3{JdXrO@x8fc(_?*NSb9eb6Z2Fg2Zk)H<2TY3>s z1HXh<`Dx%Pyv)x6XW>Cep9^(yy>|>&VM^#=Tpl00@(Xq z%K6<7MOFqHXrO@x8ff4VK>ho{INK z>D_>$AKdBx`hcn*-0A=NfO#2cpn(P&XrO_g2h7h8JAwH-?@nO;R=*dRo*(uC*S3E= pFg-u~xHC+T^F9uk{w7kqAL17}V_?N~XaE2J07*p#PDHLkV1lrxSeXC- diff --git a/icons/obj/smooth_structures/wood_table.dmi b/icons/obj/smooth_structures/wood_table.dmi index 7e6795032d6263730f03855c159f538c470ce5ab..6ff3d6731f32cbd4998c95a8df5711db61fc2432 100644 GIT binary patch literal 4180 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 Date: Wed, 6 Mar 2024 00:42:04 -0600 Subject: [PATCH 30/30] Automatic changelog generation for PR #2803 [ci skip] --- html/changelogs/AutoChangeLog-pr-2803.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2803.yml diff --git a/html/changelogs/AutoChangeLog-pr-2803.yml b/html/changelogs/AutoChangeLog-pr-2803.yml new file mode 100644 index 000000000000..4acc40b05211 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2803.yml @@ -0,0 +1,4 @@ +author: PositiveEntropy +changes: + - {imageadd: Tables have been completely cleaned up and polished into new iterations!} +delete-after: true