diff --git a/.github/workflows/ci_suite.yml b/.github/workflows/ci_suite.yml index aeaecd72df209..79ddf2c65f72b 100644 --- a/.github/workflows/ci_suite.yml +++ b/.github/workflows/ci_suite.yml @@ -213,40 +213,40 @@ jobs: steps: - run: echo Alternate tests passed. - # compare_screenshots: - # if: "!contains(github.event.head_commit.message, '[ci skip]') && always()" - # needs: [run_all_tests, run_alternate_tests] - # name: Compare Screenshot Tests - # runs-on: ubuntu-20.04 - # steps: - # - uses: actions/checkout@v3 - # # If we ever add more artifacts, this is going to break, but it'll be obvious. - # - name: Download screenshot tests - # uses: actions/download-artifact@v3 - # with: - # path: artifacts - # - name: ls -R - # run: ls -R artifacts - # - name: Setup screenshot comparison - # run: npm i - # working-directory: tools/screenshot-test-comparison - # - name: Run screenshot comparison - # run: node tools/screenshot-test-comparison/index.js artifacts code/modules/unit_tests/screenshots artifacts/screenshot_comparisons - # # workflow_run does not give you the PR it ran on, - # # even through the thing literally named "matching pull requests". - # # However, in GraphQL, you can check if the check suite was ran - # # by a specific PR, so trusting the (user controlled) action here is okay, - # # as long as we check it later in show_screenshot_test_results - # - name: Save PR ID - # if: failure() && github.event.pull_request - # run: | - # echo ${{ github.event.pull_request.number }} > artifacts/screenshot_comparisons/pull_request_number.txt - # - name: Upload bad screenshots - # if: failure() - # uses: actions/upload-artifact@v3 - # with: - # name: bad-screenshots - # path: artifacts/screenshot_comparisons + compare_screenshots: + if: "!contains(github.event.head_commit.message, '[ci skip]') && always()" + needs: [run_all_tests, run_alternate_tests] + name: Compare Screenshot Tests + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@v3 + # If we ever add more artifacts, this is going to break, but it'll be obvious. + - name: Download screenshot tests + uses: actions/download-artifact@v3 + with: + path: artifacts + - name: ls -R + run: ls -R artifacts + - name: Setup screenshot comparison + run: npm i + working-directory: tools/screenshot-test-comparison + - name: Run screenshot comparison + run: node tools/screenshot-test-comparison/index.js artifacts code/modules/unit_tests/screenshots artifacts/screenshot_comparisons + # workflow_run does not give you the PR it ran on, + # even through the thing literally named "matching pull requests". + # However, in GraphQL, you can check if the check suite was ran + # by a specific PR, so trusting the (user controlled) action here is okay, + # as long as we check it later in show_screenshot_test_results + - name: Save PR ID + if: failure() && github.event.pull_request + run: | + echo ${{ github.event.pull_request.number }} > artifacts/screenshot_comparisons/pull_request_number.txt + - name: Upload bad screenshots + if: failure() + uses: actions/upload-artifact@v3 + with: + name: bad-screenshots + path: artifacts/screenshot_comparisons test_windows: if: ( !contains(github.event.head_commit.message, '[ci skip]') ) diff --git a/code/__DEFINES/~~bubber_defines/economy.dm b/code/__DEFINES/~~bubber_defines/economy.dm index 8a47b4c8a4a06..bdf8d4201be93 100644 --- a/code/__DEFINES/~~bubber_defines/economy.dm +++ b/code/__DEFINES/~~bubber_defines/economy.dm @@ -1,2 +1,3 @@ //Defines that set what kind of civilian bounties should be applied mid-round. #define CIV_JOB_SMITH 21 //By making this higher we avoid having to maintain this value if more bounties are added upstream +#define CIV_JOB_PRISONER 22 //Basically restricted assistant bounties diff --git a/code/modules/antagonists/malf_ai/malf_ai_modules.dm b/code/modules/antagonists/malf_ai/malf_ai_modules.dm index 2dae5af186b09..fc17b6924df5b 100644 --- a/code/modules/antagonists/malf_ai/malf_ai_modules.dm +++ b/code/modules/antagonists/malf_ai/malf_ai_modules.dm @@ -49,7 +49,7 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list( /obj/machinery/portable_atmospherics/canister, ))) -GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module) - /datum/ai_module/destructive/nuke_station) //BUBBERSTATION CHANGE: REMOVES NUKE STATION ROUNDSTART MODULE +GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module)) /// The malf AI action subtype. All malf actions are subtypes of this. /datum/action/innate/ai diff --git a/code/modules/asset_cache/assets/paper.dm b/code/modules/asset_cache/assets/paper.dm index 32601e587fbf9..9e78877549abe 100644 --- a/code/modules/asset_cache/assets/paper.dm +++ b/code/modules/asset_cache/assets/paper.dm @@ -21,6 +21,7 @@ //BUBBERSTATION ADDITION: START - Bubberstation Stamp Icons "stamp-merged" = 'icons/stamp_icons/large_stamp-merged.png', "stamp-closed" = 'icons/stamp_icons/large_stamp-closed.png', + "stamp-crow" = 'icons/stamp_icons/crow-stamp.png', //BUBBERSTATION ADDITION: END - Bubberstation Stamp Icons "stamp-clown" = 'icons/stamp_icons/large_stamp-clown.png', diff --git a/code/modules/cargo/bounty.dm b/code/modules/cargo/bounty.dm index f0843cb3ec2f5..4a9f313af4a44 100644 --- a/code/modules/cargo/bounty.dm +++ b/code/modules/cargo/bounty.dm @@ -80,6 +80,8 @@ //BUBBER EDIT START if(CIV_JOB_SMITH) chosen_type = pick(subtypesof(/datum/bounty/item/blacksmith)) + if(CIV_JOB_PRISONER) + chosen_type = pick(subtypesof(/datum/bounty/item/prisoner)) //BUBBER EDIT END bounty_ref = new chosen_type if(bounty_ref.can_get()) diff --git a/code/modules/jobs/job_types/prisoner.dm b/code/modules/jobs/job_types/prisoner.dm index 4e49507864a74..68fa354c47a32 100644 --- a/code/modules/jobs/job_types/prisoner.dm +++ b/code/modules/jobs/job_types/prisoner.dm @@ -7,6 +7,7 @@ spawn_positions = 2 supervisors = "the security team" exp_granted_type = EXP_TYPE_CREW + bounty_types = CIV_JOB_PRISONER paycheck = PAYCHECK_LOWER config_tag = "PRISONER" diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 8007614fb92f5..7923d0de7a4e5 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -490,13 +490,23 @@ if(stat == DEAD) if(reagents && (reagents.has_reagent(/datum/reagent/toxin/formaldehyde, 1) || reagents.has_reagent(/datum/reagent/cryostylane))) // No organ decay if the body contains formaldehyde. return + var/rot_count = 0 //BUBBERSTATION CHANGE: MIASMA ORGAN ROT for(var/obj/item/organ/internal/organ in organs) // On-death is where organ decay is handled if(organ?.owner) // organ + owner can be null due to reagent metabolization causing organ shuffling - organ.on_death(seconds_per_tick, times_fired) + rot_count += organ.on_death(seconds_per_tick, times_fired) //BUBBERSTATION ADDITION: MIASMA_COUNT. NOTE THIS ISN'T CALLED ON ROBOTIC ORGANS. // We need to re-check the stat every organ, as one of our others may have revived us if(stat != DEAD) break + //BUBBERSTATION CHANGE START: MIASMA ORGAN ROT + if(rot_count > 0) //This is going to be weird if there are mechanics that cause an organ to heal if you're dead, but at least this saves performance. + var/turf/organ_turf = get_turf(src) //We don't check the loc because of lockers. Stasis bodybags would prevent this from running anyways. + if(isopenturf(organ_turf) && !isspaceturf(organ_turf)) //Only spawn miasma on floor turfs and not in space turfs. + var/turf/open/open_turf = organ_turf + if(!open_turf.planetary_atmos) //Don't spawn miasma when there is open air to the sky. + var/miasma_to_spawn = (rot_count/(6*100))*30 //There are about 6 rottable organs in each mob, all with 100 health. If a person is 100% rotted, they should spawn 30 moles of miasma. (A 1x1 tile has 104 moles of oxygen+nitrogen). + open_turf.atmos_spawn_air("[GAS_MIASMA]=[miasma_to_spawn];[TURF_TEMPERATURE(src.bodytemperature)]") + //BUBBERSTATION CHANGE END: MIASMA return // NOTE: organs_slot is sorted by GLOB.organ_process_order on insertion diff --git a/code/modules/surgery/organs/internal/_internal_organ.dm b/code/modules/surgery/organs/internal/_internal_organ.dm index 9f67fb3d89914..173c2f4c9f5e1 100644 --- a/code/modules/surgery/organs/internal/_internal_organ.dm +++ b/code/modules/surgery/organs/internal/_internal_organ.dm @@ -34,12 +34,13 @@ if(owner) if(owner.bodytemperature > T0C) var/air_temperature_factor = min((owner.bodytemperature - T0C) / 20, 1) - apply_organ_damage(decay_factor * maxHealth * seconds_per_tick * air_temperature_factor) + return -apply_organ_damage(decay_factor * maxHealth * seconds_per_tick * air_temperature_factor) else var/datum/gas_mixture/exposed_air = return_air() if(exposed_air && exposed_air.temperature > T0C) var/air_temperature_factor = min((exposed_air.temperature - T0C) / 20, 1) - apply_organ_damage(decay_factor * maxHealth * seconds_per_tick * air_temperature_factor) + return -apply_organ_damage(decay_factor * maxHealth * seconds_per_tick * air_temperature_factor) + /// Called once every life tick on every organ in a carbon's body /// NOTE: THIS IS VERY HOT. Be careful what you put in here diff --git a/code/modules/unit_tests/screenshots/screenshot_antag_icons_bloodbrother.png b/code/modules/unit_tests/screenshots/screenshot_antag_icons_bloodbrother.png index e53e0a8669770..8e5cb6076eafb 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_antag_icons_bloodbrother.png and b/code/modules/unit_tests/screenshots/screenshot_antag_icons_bloodbrother.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_abductor_lesser.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_abductor_lesser.png new file mode 100644 index 0000000000000..1ad767d2b642f Binary files /dev/null and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_abductor_lesser.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_hemophage.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_hemophage.png index e487c3a80bdfd..da1219f9949f6 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_hemophage.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_hemophage.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_jelly.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_jelly.png index 8ebd5b8eea2db..b9ef0c30658a3 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_jelly.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_jelly.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_jelly_stargazer.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_jelly_stargazer.png index 8ebd5b8eea2db..b9ef0c30658a3 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_jelly_stargazer.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_jelly_stargazer.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_lizard_silverscale.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_lizard_silverscale.png index f2aa05b5a1bcf..78c2cd7d1dc5e 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_lizard_silverscale.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_lizard_silverscale.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_mammal_shadekin.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_mammal_shadekin.png deleted file mode 100644 index f12eed7031f21..0000000000000 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_mammal_shadekin.png and /dev/null differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_moth.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_moth.png index 0ffa32ed58b0c..986a5b8cbe8c1 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_moth.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_moth.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_shadekin.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_shadekin.png index cc3adf85bc329..2224c3bdab9bc 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_shadekin.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_shadekin.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_skrell.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_skrell.png index 4e90a6e43cacb..5126b1453700f 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_skrell.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_skrell.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_tajaran.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_tajaran.png index f42abc57a45e8..5e8c641691882 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_tajaran.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_tajaran.png differ diff --git a/html/changelogs/AutoChangeLog-pr-1036.yml b/html/changelogs/AutoChangeLog-pr-1036.yml new file mode 100644 index 0000000000000..9c04ec2025910 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1036.yml @@ -0,0 +1,4 @@ +author: "xXPawnStarrXx" +delete-after: True +changes: + - rscadd: "Added new bounties for inmates." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-1041.yml b/html/changelogs/AutoChangeLog-pr-1041.yml new file mode 100644 index 0000000000000..a20ab2ff88635 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1041.yml @@ -0,0 +1,4 @@ +author: "theselfish" +delete-after: True +changes: + - rscadd: "Donator item." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-1043.yml b/html/changelogs/AutoChangeLog-pr-1043.yml new file mode 100644 index 0000000000000..78ead36cc04bc --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1043.yml @@ -0,0 +1,5 @@ +author: "BurgerBB" +delete-after: True +changes: + - rscdel: " Removes the ability for Seedlings to have multiple harvests." + - balance: "Sets Evil Seedling TC cost to 2 (From 8)," \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-1044.yml b/html/changelogs/AutoChangeLog-pr-1044.yml new file mode 100644 index 0000000000000..4fb4f164b45ae --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1044.yml @@ -0,0 +1,4 @@ +author: "theselfish" +delete-after: True +changes: + - rscadd: "Donator stamp." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-1054.yml b/html/changelogs/AutoChangeLog-pr-1054.yml new file mode 100644 index 0000000000000..f90a48852b9a6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1054.yml @@ -0,0 +1,7 @@ +author: "pixelkitty286" +delete-after: True +changes: + - rscadd: "Door sounds from Citrp" + - qol: "Better door sounds" + - sound: "added door sound files in modular sounds folder" + - code_imp: "Disabled skyrat's door sound over rides in airlock.dm" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-1085.yml b/html/changelogs/AutoChangeLog-pr-1085.yml new file mode 100644 index 0000000000000..180b2e428e542 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1085.yml @@ -0,0 +1,4 @@ +author: "nikothedude" +delete-after: True +changes: + - spellcheck: "The nobility dresscoat has been reflavored to not be nobility" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-1096.yml b/html/changelogs/AutoChangeLog-pr-1096.yml new file mode 100644 index 0000000000000..958ee2a856fc4 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1096.yml @@ -0,0 +1,4 @@ +author: "ReturnToZender" +delete-after: True +changes: + - server: "cleans up some relay names" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-1099.yml b/html/changelogs/AutoChangeLog-pr-1099.yml new file mode 100644 index 0000000000000..9b442e9a8dbd4 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1099.yml @@ -0,0 +1,4 @@ +author: "NithaIsTired" +delete-after: True +changes: + - rscadd: "Synths now scream in agony when they die." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-1101.yml b/html/changelogs/AutoChangeLog-pr-1101.yml new file mode 100644 index 0000000000000..2b0bb3807c558 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1101.yml @@ -0,0 +1,7 @@ +author: "Swiftfeather" +delete-after: True +changes: + - rscdel: "Door sounds from Citrp" + - qol: "better door sounds" + - sound: "changed sound back to better original airlock sound" + - code_imp: "re enables skyrat's door sound override" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-860.yml b/html/changelogs/AutoChangeLog-pr-860.yml new file mode 100644 index 0000000000000..617334362b949 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-860.yml @@ -0,0 +1,4 @@ +author: "BurgerBB" +delete-after: True +changes: + - rscadd: "Organs that rot now create miasma. Note that miasma emissions will stop once the organ is fully decayed." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-865.yml b/html/changelogs/AutoChangeLog-pr-865.yml new file mode 100644 index 0000000000000..e99d23ad8bca9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-865.yml @@ -0,0 +1,4 @@ +author: "BurgerBB" +delete-after: True +changes: + - balance: "The Crab17 uplink item cannot spawn in surplus crates, nor can it be discounted." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-988.yml b/html/changelogs/AutoChangeLog-pr-988.yml new file mode 100644 index 0000000000000..beb9a3192fc49 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-988.yml @@ -0,0 +1,6 @@ +author: "Majkl-J" +delete-after: True +changes: + - rscadd: "Secmed huds are now available for security medics" + - rscadd: "Secmed headset upgraded into a bowman" + - image: "Icons for secmed huds and secmed headset" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-993.yml b/html/changelogs/AutoChangeLog-pr-993.yml new file mode 100644 index 0000000000000..bae88e4fe463f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-993.yml @@ -0,0 +1,4 @@ +author: "nevimer" +delete-after: True +changes: + - rscadd: "Malf AI Doomsday now makes a tidal wave of explosions from APC's." \ No newline at end of file diff --git a/icons/stamp_icons/crow-stamp.png b/icons/stamp_icons/crow-stamp.png new file mode 100644 index 0000000000000..a5956759d23ef Binary files /dev/null and b/icons/stamp_icons/crow-stamp.png differ diff --git a/modular_zubbers/code/__DEFINES/send2relay.dm b/modular_zubbers/code/__DEFINES/send2relay.dm index 55190a6c92ad6..45c582c5d8458 100644 --- a/modular_zubbers/code/__DEFINES/send2relay.dm +++ b/modular_zubbers/code/__DEFINES/send2relay.dm @@ -3,18 +3,18 @@ #define SYDNEY_RELAY "byond://sydney.bubberstation.org:3000" #define SINGAPORE_RELAY "byond://singapore.bubberstation.org:3000" #define EU_RELAY "byond://germany.bubberstation.org:3000" -#define NO_RELAY "byond://game.bubberstation.org:3000" +#define NO_RELAY "byond://direct.bubberstation.org:3000" /client/verb/go2relay() var/list/static/relays = list( - US_EAST_RELAY = "Connect to US-East (Virginia)", - US_WEST_RELAY = "Connect to US-West (Oregon)", - SYDNEY_RELAY = "Connect to Sydney, Australia", - SINGAPORE_RELAY = "Connect to Singapore, Singapore", - EU_RELAY = "Connect to Europe (Germany, Alternative)", - NO_RELAY = "No Relay", + US_EAST_RELAY = "Connect to Eastern US (Virginia)", + US_WEST_RELAY = "Connect to Western US (Oregon)", + SYDNEY_RELAY = "Connect to Australia (Sydney)", + SINGAPORE_RELAY = "Connect to Singapore (Singapore)", + EU_RELAY = "Connect to Germany (Frankfurt)", + NO_RELAY = "No Relay (Direct Connect)", ) - var/choice = tgui_input_list(usr, "Which relay do you wish to use?", "Relay choice", relays) + var/choice = tgui_input_list(usr, "Which relay do you wish to use?", "Relay Select", relays) if(choice) usr << link(choice) sleep(1 SECONDS) diff --git a/modular_zubbers/code/modules/antagonists/malf/doomsday.dm b/modular_zubbers/code/modules/antagonists/malf/doomsday.dm new file mode 100644 index 0000000000000..3755cb56c3734 --- /dev/null +++ b/modular_zubbers/code/modules/antagonists/malf/doomsday.dm @@ -0,0 +1,12 @@ +/obj/machinery/doomsday_device/trigger_doomsday() + var/list/bombable = SSmapping.levels_by_trait(ZTRAIT_STATION) + for(var/obj/machinery/power/apc/power in world) + if(power.z == locate(power.z) in bombable) + explosion(power, light_impact_range = 15, explosion_cause = src, adminlog = TRUE) + sleep(1) + to_chat(world, span_bold("You hear a series of explosions!")) + SSticker.force_ending = FORCE_END_ROUND + +/proc/test_doomsday() + var/obj/machinery/doomsday_device/device = new() + device.trigger_doomsday() diff --git a/modular_zubbers/code/modules/cargo/bounties/prisoner.dm b/modular_zubbers/code/modules/cargo/bounties/prisoner.dm new file mode 100644 index 0000000000000..a4b60536e08ae --- /dev/null +++ b/modular_zubbers/code/modules/cargo/bounties/prisoner.dm @@ -0,0 +1,105 @@ +/datum/bounty/item/prisoner/soap + name = "Soap" + description = "One of the janitors lost theirs, send them some." + reward = CARGO_CRATE_VALUE * 4 + required_count = 2 + wanted_types = list(/obj/item/soap = TRUE) + +/datum/bounty/item/prisoner/baseball_bat + name = "Baseball Bat" + description = "Baseball fever is going on at CentCom! Be a dear and ship them some baseball bats, so that management can live out their childhood dream." + reward = CARGO_CRATE_VALUE * 4 + required_count = 5 + wanted_types = list(/obj/item/melee/baseball_bat = TRUE) + +/datum/bounty/item/prisoner/monkey_hide + name = "Monkey Hide" + description = "One of the scientists at CentCom is interested in testing products on monkey skin. Your mission is to acquire monkey's hide and ship it." + reward = CARGO_CRATE_VALUE * 3 + wanted_types = list(/obj/item/stack/sheet/animalhide/monkey = TRUE) + +/datum/bounty/item/prisoner/poppy + name = "Poppies" + description = "Stop asking questions, send the flowers, get paid. INMATE!" + reward = CARGO_CRATE_VALUE * 2 + required_count = 3 + wanted_types = list(/obj/item/food/grown/poppy = TRUE) + include_subtypes = FALSE + +/datum/bounty/item/prisoner/lilly + name = "Lillies" + description = "Stop asking questions, send the flowers, get paid. INMATE!" + reward = CARGO_CRATE_VALUE * 3 + required_count = 3 + wanted_types = list(/obj/item/food/grown/poppy/lily = TRUE) + include_subtypes = FALSE + +/datum/bounty/item/prisoner/geranium + name = "Geraniums" + description = "Stop asking questions, send the flowers, get paid. INMATE!" + reward = CARGO_CRATE_VALUE * 3 + required_count = 3 + wanted_types = list(/obj/item/food/grown/poppy/geranium = TRUE) + include_subtypes = FALSE + +/datum/bounty/item/prisoner/tomatoes + name = "Tomatoes" + description = "Stop asking questions, send the fruits, get paid. INMATE!" + reward = CARGO_CRATE_VALUE * 3 + required_count = 5 + wanted_types = list(/obj/item/food/grown/tomato = TRUE) + include_subtypes = FALSE + +/datum/bounty/item/prisoner/carrots + name = "Carrots" + description = "Stop asking questions, send the fruits, get paid. INMATE!" + reward = CARGO_CRATE_VALUE * 3 + required_count = 5 + wanted_types = list(/obj/item/food/grown/carrot = TRUE) + include_subtypes = FALSE + +/datum/bounty/item/prisoner/onion + name = "Onions" + description = "Stop asking questions, send the fruits, get paid. INMATE!" + reward = CARGO_CRATE_VALUE * 3 + required_count = 5 + wanted_types = list(/obj/item/food/grown/onion = TRUE) + include_subtypes = FALSE + +/datum/bounty/item/prisoner/apples + name = "Apples" + description = "Stop asking questions, send the fruits, get paid. INMATE!" + reward = CARGO_CRATE_VALUE * 3 + required_count = 5 + wanted_types = list(/obj/item/food/grown/apple = TRUE) + include_subtypes = FALSE + +/datum/bounty/item/prisoner/grapes + name = "Grapes" + description = "Stop asking questions, send the fruits, get paid. INMATE!" + reward = CARGO_CRATE_VALUE * 3 + required_count = 5 + wanted_types = list(/obj/item/food/grown/grapes = TRUE) + include_subtypes = FALSE + +/datum/bounty/item/prisoner/corn + name = "Ears of Corn" + description = "Stop asking questions, send the fruits, get paid. INMATE!" + reward = CARGO_CRATE_VALUE * 3 + required_count = 5 + wanted_types = list(/obj/item/food/grown/corn = TRUE) + include_subtypes = FALSE + +/datum/bounty/item/prisoner/monkey_cubes + name = "Monkey Cubes" + description = "Due to a recent genetics accident, Central Command is in serious need of monkeys. Your mission is to ship monkey cubes." + reward = CARGO_CRATE_VALUE * 4 + required_count = 3 + wanted_types = list(/obj/item/food/monkeycube = TRUE) + +/datum/bounty/item/prisoner/paper_bin + name = "Paper Bins" + description = "Our accounting division is all out of paper. We need a new shipment immediately." + reward = CARGO_CRATE_VALUE * 5 + required_count = 5 + wanted_types = list(/obj/item/paper_bin = TRUE) diff --git a/modular_zubbers/code/modules/hydroponics/plant_genes.dm b/modular_zubbers/code/modules/hydroponics/plant_genes.dm index ab567776505da..67584d3e4e0ba 100644 --- a/modular_zubbers/code/modules/hydroponics/plant_genes.dm +++ b/modular_zubbers/code/modules/hydroponics/plant_genes.dm @@ -7,6 +7,12 @@ /datum/plant_gene/trait/backfire mutability_flags = PLANT_GENE_GRAFTABLE //Making this mutatable causes bugs and linters to fail. +/datum/plant_gene/trait/repeated_harvest/New(...) + seed_blacklist += /obj/item/seeds/seedling + seed_blacklist += /obj/item/seeds/seedling/evil + . = ..() + + /* * Returns the formatted name of the plant gene. * diff --git a/modular_zubbers/code/modules/loadouts/loadout_items/loadout_datum_pocket.dm b/modular_zubbers/code/modules/loadouts/loadout_items/loadout_datum_pocket.dm index 762489389e72e..e6488dcf46249 100644 --- a/modular_zubbers/code/modules/loadouts/loadout_items/loadout_datum_pocket.dm +++ b/modular_zubbers/code/modules/loadouts/loadout_items/loadout_datum_pocket.dm @@ -6,3 +6,8 @@ name = "starwire wine bottle" item_path = /obj/item/reagent_containers/cup/glass/bottle/beer/starwine ckeywhitelist = list("catmanpop") //donator item for Catmanpop + +/datum/loadout_item/pocket_items/stamp/donator/crow + name = "Mitchell Inc. Stamp" + item_path = /obj/item/stamp/donator/crow + ckeywhitelist = list("slippyjoe") //donator item for SlippyJoe, who woulda guessed. diff --git a/modular_zubbers/code/modules/loadouts/loadout_items/loadout_datum_toys.dm b/modular_zubbers/code/modules/loadouts/loadout_items/loadout_datum_toys.dm index 4c56105db4d4a..bc4d1a3e7a4c7 100644 --- a/modular_zubbers/code/modules/loadouts/loadout_items/loadout_datum_toys.dm +++ b/modular_zubbers/code/modules/loadouts/loadout_items/loadout_datum_toys.dm @@ -43,3 +43,8 @@ /datum/loadout_item/toys/xenomaidplush name = "Xenomorph Maid Plushie" item_path = /obj/item/toy/plush/xenoplush/xenomaidplush + +/datum/loadout_item/toys/carrotbag + name = "Carrot Bag" + item_path = /obj/item/sbeacondrop/carrot + ckeywhitelist = list("slippyjoe") diff --git a/modular_zubbers/code/modules/paperwork/stamps.dm b/modular_zubbers/code/modules/paperwork/stamps.dm index e7649726bc92c..34e3662136e68 100644 --- a/modular_zubbers/code/modules/paperwork/stamps.dm +++ b/modular_zubbers/code/modules/paperwork/stamps.dm @@ -12,3 +12,15 @@ name = "closed rubber stamp" icon_state = "stamp-closed" dye_color = DYE_RED + +/obj/item/stamp/donator + name = "donator stamps" + icon = 'modular_zubbers/icons/obj/service/bureaucracy.dmi' + icon_state = null + desc = "If you're seeing this and you're not an admin dicking around, scream at a coder." + +/obj/item/stamp/donator/crow + name = "mitchell incorporated stamp" + icon_state = "stamp-crow" + desc = "A rubber stamp for stamping vaguely legal contracts." + dye_color = DYE_BLACK diff --git a/modular_zubbers/code/modules/surgery/organs/internal/lungs/_brain.dm b/modular_zubbers/code/modules/surgery/organs/internal/lungs/_brain.dm new file mode 100644 index 0000000000000..06c3eb83fdace --- /dev/null +++ b/modular_zubbers/code/modules/surgery/organs/internal/lungs/_brain.dm @@ -0,0 +1,2 @@ +/obj/item/organ/internal/brain + resistance_flags = INDESTRUCTIBLE diff --git a/modular_zubbers/code/modules/uplink/uplink_items/device_tools.dm b/modular_zubbers/code/modules/uplink/uplink_items/device_tools.dm new file mode 100644 index 0000000000000..79a5899aa8d65 --- /dev/null +++ b/modular_zubbers/code/modules/uplink/uplink_items/device_tools.dm @@ -0,0 +1,3 @@ +/datum/uplink_item/device_tools/suspiciousphone + surplus = 0 + cant_discount = TRUE diff --git a/modular_zubbers/code/modules/uplink/uplink_items/job.dm b/modular_zubbers/code/modules/uplink/uplink_items/job.dm new file mode 100644 index 0000000000000..c7ae3bf4ae101 --- /dev/null +++ b/modular_zubbers/code/modules/uplink/uplink_items/job.dm @@ -0,0 +1,3 @@ +/datum/uplink_item/role_restricted/evil_seedling + desc = "A rare seed we have recovered that grows into a dangerous species that will aid you with your tasks! Note that this cannot be used with the Perennial Growth trait!" + cost = 2 diff --git a/modular_zubbers/code/modules/~donator/choicebeacon.dm b/modular_zubbers/code/modules/~donator/choicebeacon.dm new file mode 100644 index 0000000000000..f60925e082b97 --- /dev/null +++ b/modular_zubbers/code/modules/~donator/choicebeacon.dm @@ -0,0 +1,15 @@ +/obj/item/sbeacondrop/carrot + name = "carrot phone" + icon = 'icons/obj/antags/syndicate_tools.dmi' + icon_state = "suspiciousphone" + desc = "A cell phone with an in-coming call from someone simply labelled 'Lady Jab'. A small sticker on the back notes that any calls to French overlords will incur a 5 credit service charge." + w_class = WEIGHT_CLASS_SMALL + droptype = /obj/item/storage/backpack/satchel/bunnysatchel + +/obj/item/sbeacondrop/carrot/attack_self(mob/user) + if(user) + to_chat(user, span_notice("Thank you for choosing the Jab TM for your clothing purchase!")) + new droptype( user.loc ) + playsound(src, 'sound/creatures/mousesqueek.ogg', 100, TRUE, TRUE) + qdel(src) + return diff --git a/modular_zubbers/icons/obj/service/bureaucracy.dmi b/modular_zubbers/icons/obj/service/bureaucracy.dmi index 25aa8fab52565..56a7df27b6d50 100644 Binary files a/modular_zubbers/icons/obj/service/bureaucracy.dmi and b/modular_zubbers/icons/obj/service/bureaucracy.dmi differ diff --git a/modular_zubbers/modules/clothing/code/donator_clothing.dm b/modular_zubbers/modules/clothing/code/donator_clothing.dm new file mode 100644 index 0000000000000..a178710420b4f --- /dev/null +++ b/modular_zubbers/modules/clothing/code/donator_clothing.dm @@ -0,0 +1,4 @@ +/obj/item/clothing/suit/toggle/labcoat/vic_dresscoat_donator // modified on request of nikotheguydude, the person who donated for this upstream + name = "elaborate dresscoat" + special_desc = "On a closer inspection, it would appear the interior is modified with protective material and mounting points \ + most often found on medical labcoats." diff --git a/modular_zubbers/modules/security/secmed/icons/secmed_equipment.dmi b/modular_zubbers/modules/security/secmed/icons/secmed_equipment.dmi new file mode 100644 index 0000000000000..91c915e5fd658 Binary files /dev/null and b/modular_zubbers/modules/security/secmed/icons/secmed_equipment.dmi differ diff --git a/modular_zubbers/code/modules/sec_haul/code/security_medic/secmed_clothes.dm b/modular_zubbers/modules/security/secmed/secmed_clothes.dm similarity index 100% rename from modular_zubbers/code/modules/sec_haul/code/security_medic/secmed_clothes.dm rename to modular_zubbers/modules/security/secmed/secmed_clothes.dm diff --git a/modular_zubbers/code/modules/sec_haul/code/security_medic/security_medic.dm b/modular_zubbers/modules/security/secmed/security_medic.dm similarity index 69% rename from modular_zubbers/code/modules/sec_haul/code/security_medic/security_medic.dm rename to modular_zubbers/modules/security/secmed/security_medic.dm index c12e2cac8df9a..a1f43d322ac37 100644 --- a/modular_zubbers/code/modules/sec_haul/code/security_medic/security_medic.dm +++ b/modular_zubbers/modules/security/secmed/security_medic.dm @@ -52,7 +52,7 @@ uniform = /obj/item/clothing/under/rank/security/peacekeeper/security_medic gloves = /obj/item/clothing/gloves/latex/nitrile shoes = /obj/item/clothing/shoes/jackboots/sec - glasses = /obj/item/clothing/glasses/hud/health/sunglasses + glasses = /obj/item/clothing/glasses/hud/secmed suit = /obj/item/clothing/suit/armor/vest/peacekeeper/security_medic l_hand = /obj/item/storage/medkit/brute head = /obj/item/clothing/head/beret/sec/peacekeeper/security_medic @@ -84,32 +84,75 @@ channels = list(RADIO_CHANNEL_MEDICAL = 1, RADIO_CHANNEL_SECURITY = 1) /obj/item/radio/headset/headset_medsec - name = "medical-security radio headset" - desc = "Used to hear how many security officers need to be stiched back together." - icon_state = "sec_headset" + name = "security medic's bowman headset" + desc = "Used to hear how many security officers need to be stitched back together." + icon = 'modular_zubbers/modules/security/secmed/icons/secmed_equipment.dmi' + icon_state = "headset" keyslot = new /obj/item/encryptionkey/headset_medsec +/obj/item/radio/headset/headset_medsec/Initialize(mapload) + . = ..() + AddComponent(/datum/component/wearertargeting/earprotection, list(ITEM_SLOT_EARS)) + +/obj/item/clothing/glasses/hud/secmed + name = "security-medical HUD" + desc = "The choice for security medics all across the sector, provides advanced medical and simplified security readings." + icon = 'modular_zubbers/modules/security/secmed/icons/secmed_equipment.dmi' + icon_state = "hud" + worn_icon_state = "healthhud" + hud_type = DATA_HUD_MEDICAL_ADVANCED + clothing_traits = list(TRAIT_MEDICAL_HUD) + +/obj/item/clothing/glasses/hud/secmed/equipped(mob/living/carbon/human/user, slot) + . = ..() + if(!(slot & ITEM_SLOT_EYES)) + return + // Extra hud because the bloody code doesn't support multihuds yet. I'll probably add multihud support soon enough. If you see this I didn't. ~Waterpig + var/datum/atom_hud/extra_hud = GLOB.huds[DATA_HUD_SECURITY_BASIC] + extra_hud.show_to(user) + +/obj/item/clothing/glasses/hud/secmed/dropped(mob/living/carbon/human/user) + . = ..() + if(!istype(user) || user.glasses != src) + return + var/datum/atom_hud/extra_hud = GLOB.huds[DATA_HUD_SECURITY_BASIC] + extra_hud.hide_from(user) + +/obj/item/clothing/glasses/hud/secmed/sunglasses + name = "security-medical HUD sunglasses" + icon_state = "hud_protected" + worn_icon_state = "sunhudsec" + flash_protect = FLASH_PROTECTION_SENSITIVE + flags_cover = GLASSESCOVERSEYES + +/obj/item/storage/bag/garment/secmed + name = "Security medic's garment bag" + desc = "A bag containing extra clothing for the security medic" + +/obj/item/storage/bag/garment/secmed/PopulateContents() + . = ..() + new /obj/item/clothing/suit/toggle/labcoat/skyrat/security_medic(src) + new /obj/item/clothing/suit/hazardvest/security_medic(src) + new /obj/item/clothing/suit/toggle/labcoat/skyrat/security_medic/blue(src) + new /obj/item/clothing/suit/hazardvest/security_medic/blue(src) + new /obj/item/clothing/head/helmet/sec/peacekeeper/security_medic(src) + new /obj/item/clothing/under/rank/medical/scrubs/skyrat/red/sec(src) + new /obj/item/clothing/under/rank/security/peacekeeper/security_medic/alternate(src) + new /obj/item/clothing/under/rank/security/peacekeeper/security_medic(src) + new /obj/item/clothing/under/rank/security/peacekeeper/security_medic/skirt(src) + /obj/structure/closet/secure_closet/security_medic name = "security medic's locker" req_access = list(ACCESS_BRIG) icon = 'modular_zubbers/icons/obj/closets/secmed_closet.dmi' icon_state = "secmed" - - /obj/structure/closet/secure_closet/security_medic/PopulateContents() ..() - new /obj/item/clothing/suit/toggle/labcoat/skyrat/security_medic(src) - new /obj/item/clothing/suit/hazardvest/security_medic(src) - new /obj/item/clothing/suit/toggle/labcoat/skyrat/security_medic/blue(src) - new /obj/item/clothing/suit/hazardvest/security_medic/blue(src) - new /obj/item/clothing/head/helmet/sec/peacekeeper/security_medic(src) new /obj/item/radio/headset/headset_medsec(src) + new /obj/item/clothing/glasses/hud/secmed/sunglasses(src) new /obj/item/storage/medkit/emergency(src) new /obj/item/clothing/suit/jacket/straight_jacket(src) new /obj/item/storage/belt/medical(src) new /obj/item/storage/belt/security/medic/full(src) - new /obj/item/clothing/under/rank/medical/scrubs/skyrat/red/sec(src) - new /obj/item/clothing/under/rank/security/peacekeeper/security_medic/alternate(src) - new /obj/item/clothing/under/rank/security/peacekeeper/security_medic(src) - new /obj/item/clothing/under/rank/security/peacekeeper/security_medic/skirt(src) + new /obj/item/storage/bag/garment/secmed(src) diff --git a/tgstation.dme b/tgstation.dme index 0165eeaaccfae..8a031dcdbb6c1 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -8213,6 +8213,7 @@ #include "modular_zubbers\code\modules\antagonists\bloodsucker\vassal\vassal_types\ex_vassal.dm" #include "modular_zubbers\code\modules\antagonists\bloodsucker\vassal\vassal_types\favorite_vassal.dm" #include "modular_zubbers\code\modules\antagonists\bloodsucker\vassal\vassal_types\revenge_vassal.dm" +#include "modular_zubbers\code\modules\antagonists\malf\doomsday.dm" #include "modular_zubbers\code\modules\antagonists\wizard\events_removal.dm" #include "modular_zubbers\code\modules\antagonists\wizard\events_rework.dm" #include "modular_zubbers\code\modules\antagonists\wizard\grand_finale_removal.dm" @@ -8224,6 +8225,7 @@ #include "modular_zubbers\code\modules\borer_hud\borer.dm" #include "modular_zubbers\code\modules\bsrpd\code\bsrpd.dm" #include "modular_zubbers\code\modules\cargo\bounties\blacksmith.dm" +#include "modular_zubbers\code\modules\cargo\bounties\prisoner.dm" #include "modular_zubbers\code\modules\cargo\exports\weapons.dm" #include "modular_zubbers\code\modules\cargo\packs\contraband.dm" #include "modular_zubbers\code\modules\cargo\packs\goodies.dm" @@ -8362,8 +8364,6 @@ #include "modular_zubbers\code\modules\research\designs\medical_designs.dm" #include "modular_zubbers\code\modules\research\designs\misc_designs.dm" #include "modular_zubbers\code\modules\research\techweb\all_nodes.dm" -#include "modular_zubbers\code\modules\sec_haul\code\security_medic\secmed_clothes.dm" -#include "modular_zubbers\code\modules\sec_haul\code\security_medic\security_medic.dm" #include "modular_zubbers\code\modules\security_levels\security_level_datums.dm" #include "modular_zubbers\code\modules\spells\spell_types\disabled_spells.dm" #include "modular_zubbers\code\modules\spells\spell_types\nerfed_spells.dm" @@ -8373,13 +8373,17 @@ #include "modular_zubbers\code\modules\surgery\tools.dm" #include "modular_zubbers\code\modules\surgery\bodyparts\species_parts\misc_bodyparts.dm" #include "modular_zubbers\code\modules\surgery\organs\internal\eyes\_eyes.dm" +#include "modular_zubbers\code\modules\surgery\organs\internal\lungs\_brain.dm" #include "modular_zubbers\code\modules\surgery\organs\internal\lungs\_lungs.dm" #include "modular_zubbers\code\modules\synths\code\synth_prefab.dm" #include "modular_zubbers\code\modules\synths\code\bodyparts\internal_computer\internal_computer.dm" #include "modular_zubbers\code\modules\synths\code\designs\exofab_designs.dm" #include "modular_zubbers\code\modules\traitor\goal_overrides.dm" +#include "modular_zubbers\code\modules\uplink\uplink_items\device_tools.dm" +#include "modular_zubbers\code\modules\uplink\uplink_items\job.dm" #include "modular_zubbers\code\modules\vending\halloween_chocolate.dm" #include "modular_zubbers\code\modules\vending\megaseed.dm" +#include "modular_zubbers\code\modules\~donator\choicebeacon.dm" #include "modular_zubbers\maps\biodome\area.dm" #include "modular_zubbers\maps\biodome\beach.dm" #include "modular_zubbers\maps\biodome\decoration.dm" @@ -8434,6 +8438,7 @@ #include "modular_zubbers\modules\client\code\preferences.dm" #include "modular_zubbers\modules\client\flavor_text\flavor_text.dm" #include "modular_zubbers\modules\clothing\armor_overrides\hos_armor.dm" +#include "modular_zubbers\modules\clothing\code\donator_clothing.dm" #include "modular_zubbers\modules\clothing\code\head\helmet.dm" #include "modular_zubbers\modules\clothing\code\sprite_accessories\sprite_accessories.dm" #include "modular_zubbers\modules\customization\modules\language\_language_holder.dm" @@ -8478,6 +8483,8 @@ #include "modular_zubbers\modules\quirks\code\negative_quirks\sensitive_snout.dm" #include "modular_zubbers\modules\quirks\code\neutral_quirks\hungry.dm" #include "modular_zubbers\modules\quirks\code\neutral_quirks\waddle.dm" +#include "modular_zubbers\modules\security\secmed\secmed_clothes.dm" +#include "modular_zubbers\modules\security\secmed\security_medic.dm" #include "modular_zubbers\modules\space_background\parallax.dm" #include "modular_zubbers\modules\space_background\turf_space.dm" #include "modular_zubbers\modules\synths\death_sound.dm"