From ccdff044cf706edc707e16d6b399713dc8f6600a Mon Sep 17 00:00:00 2001 From: synthtwo <127706731+SynthTwo@users.noreply.github.com> Date: Fri, 8 Nov 2024 21:53:59 +0000 Subject: [PATCH] Upstream merge --- _maps/map_files/Ouroboros/Ouroboros.dmm | 178 +++++++----------- .../effects/spawners/random/engineering.dm | 4 +- code/modules/surgery/surgery_step.dm | 18 +- html/changelogs/archive/2024-11.yml | 22 +++ .../carbon/human/species_type/ethereal.dm | 11 ++ .../master_files/icons/obj/devices/tools.dmi | Bin 1743 -> 4851 bytes .../code/chemicals/twitch.dm | 6 +- .../icons/implanted_blade_lefthand.dmi | Bin 980 -> 1106 bytes .../icons/implanted_blade_righthand.dmi | Bin 973 -> 1091 bytes .../code/soulcatcher/handheld_soulcatcher.dm | 2 +- .../modules/species_synthesizer/README.md | 22 +++ .../modules/species_synthesizer/sing_tones.dm | 48 +++++ .../modules/synths/code/species/synthetic.dm | 25 +++ tgstation.dme | 1 + 14 files changed, 216 insertions(+), 121 deletions(-) create mode 100644 modular_nova/modules/species_synthesizer/README.md create mode 100644 modular_nova/modules/species_synthesizer/sing_tones.dm diff --git a/_maps/map_files/Ouroboros/Ouroboros.dmm b/_maps/map_files/Ouroboros/Ouroboros.dmm index d89cc88723cd..e7f7777e53f7 100644 --- a/_maps/map_files/Ouroboros/Ouroboros.dmm +++ b/_maps/map_files/Ouroboros/Ouroboros.dmm @@ -1188,12 +1188,6 @@ /obj/structure/table, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"asJ" = ( -/obj/structure/railing{ - dir = 8 - }, -/turf/closed/wall, -/area/station/medical/paramedic) "asP" = ( /obj/machinery/computer/atmos_control/plasma_tank, /obj/effect/turf_decal/box, @@ -1941,6 +1935,9 @@ network = list("ss13","medbay") }, /obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 4 + }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "aDU" = ( @@ -2601,9 +2598,8 @@ dir = 1 }, /obj/machinery/door/firedoor/border_only, -/turf/open/floor/iron/stairs{ - dir = 8 - }, +/obj/structure/stairs/west, +/turf/open/floor/iron/white, /area/station/medical/storage) "aPb" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer2{ @@ -4115,12 +4111,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/grimy, /area/station/security/detectives_office) -"bkT" = ( -/obj/effect/turf_decal/bot_white, -/obj/machinery/light/warm/directional/west, -/obj/structure/bed/medical/emergency, -/turf/open/floor/iron/dark, -/area/station/medical/medbay/central) "bla" = ( /obj/effect/turf_decal/bot, /obj/item/stack/sheet/glass/fifty{ @@ -4702,10 +4692,10 @@ /obj/effect/turf_decal/tile/blue, /obj/machinery/light/cold/directional/east, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/structure/railing/corner{ - dir = 1 - }, /obj/machinery/door/firedoor/border_only, +/obj/structure/railing/corner/end{ + dir = 8 + }, /turf/open/floor/iron/white/side{ dir = 4 }, @@ -12060,11 +12050,11 @@ /turf/open/floor/plating, /area/station/maintenance/aft/greater) "dBb" = ( -/obj/structure/railing/corner{ - dir = 1 - }, /obj/effect/turf_decal/tile/red/real_red, /obj/machinery/light/directional/south, +/obj/structure/railing/corner/end{ + dir = 8 + }, /turf/open/floor/iron/edge{ dir = 8 }, @@ -22019,9 +22009,9 @@ /turf/open/floor/plating, /area/station/engineering/supermatter/room) "gvp" = ( -/obj/machinery/light/warm/directional/east, /obj/machinery/recharge_station, /obj/effect/turf_decal/bot_white, +/obj/machinery/light/warm/directional/north, /turf/open/floor/iron/dark, /area/station/medical/medbay/central) "gwj" = ( @@ -24218,6 +24208,9 @@ /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat/foyer) "hea" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, /turf/open/floor/wood/tile, /area/station/medical/psychology) "hed" = ( @@ -24462,6 +24455,9 @@ /obj/effect/turf_decal/tile/blue{ dir = 8 }, +/obj/structure/railing/corner/end{ + dir = 8 + }, /turf/open/floor/iron/white, /area/station/medical/storage) "hgG" = ( @@ -33364,12 +33360,6 @@ dir = 1 }, /area/station/service/kitchen/diner) -"jIs" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/turf/closed/wall, -/area/station/medical/storage) "jIw" = ( /obj/effect/turf_decal/tile/purple/opposingcorners, /obj/effect/turf_decal/siding/thinplating_new/light{ @@ -33544,12 +33534,6 @@ /obj/effect/landmark/start/detective, /turf/open/floor/wood/tile, /area/station/security/detectives_office) -"jMg" = ( -/obj/structure/railing/corner{ - dir = 8 - }, -/turf/closed/wall, -/area/station/medical/paramedic) "jMo" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 1 @@ -34159,10 +34143,6 @@ }, /obj/effect/turf_decal/trimline/neutral/warning, /obj/effect/turf_decal/bot_white, -/obj/machinery/camera/directional/south{ - c_tag = "Medbay - Morgue"; - network = list("ss13","medbay") - }, /obj/machinery/light/small/blacklight/directional/east, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/smooth_large, @@ -34466,12 +34446,6 @@ }, /turf/open/floor/carpet/cyan, /area/station/command/heads_quarters/blueshield) -"jYP" = ( -/obj/effect/turf_decal/tile/blue/opposingcorners{ - dir = 1 - }, -/turf/closed/wall/r_wall, -/area/station/medical/chemistry) "jZl" = ( /obj/effect/turf_decal/tile/yellow/opposingcorners{ dir = 1 @@ -40141,7 +40115,7 @@ dir = 1 }, /obj/machinery/button/door/directional/south{ - id = "main_surgery"; + id = "surg_privacy"; name = "privacy shutters control" }, /obj/effect/turf_decal/box/white, @@ -41555,9 +41529,6 @@ /obj/item/toy/plush/shark{ name = "Sharkmund F." }, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 4 - }, /obj/machinery/firealarm/directional/south, /obj/machinery/camera/directional/south{ c_tag = "Medbay - Private Psychology Office"; @@ -49785,6 +49756,9 @@ }, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/blue/filled/mid_joiner{ + dir = 8 + }, /turf/open/floor/iron/dark/smooth_large, /area/station/medical/treatment_center) "ooR" = ( @@ -51849,16 +51823,13 @@ /turf/open/floor/plating, /area/station/maintenance/fore/lesser) "oYn" = ( -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/yellow/filled/warning, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 4 - }, /obj/machinery/plumbing/sender, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/stripes/box, +/obj/effect/turf_decal/stripes/white/box{ + color = "#EFB341" + }, /turf/open/floor/plating, /area/station/medical/chemistry) "oYo" = ( @@ -52145,10 +52116,16 @@ /turf/open/floor/wood, /area/station/command/heads_quarters/nt_rep) "pcI" = ( -/obj/effect/turf_decal/tile/green/opposingcorners, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/medical/virology) +/obj/structure/bodycontainer/morgue{ + dir = 8 + }, +/obj/effect/turf_decal/bot_white, +/obj/machinery/camera/directional/east{ + c_tag = "Medbay - Morgue"; + network = list("ss13","medbay") + }, +/turf/open/floor/iron/dark/smooth_large, +/area/station/medical/morgue) "pcU" = ( /obj/structure/railing/corner/end/flip{ dir = 8 @@ -53618,6 +53595,9 @@ /area/station/science/xenobiology) "pzi" = ( /obj/machinery/door/firedoor/border_only, +/obj/structure/railing{ + dir = 1 + }, /turf/open/floor/iron/white/side, /area/station/medical/paramedic) "pzk" = ( @@ -56004,14 +55984,14 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "qhL" = ( -/obj/structure/railing/corner{ - dir = 1 - }, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=lowhall2"; location = "lowhall1" }, /obj/effect/turf_decal/vg_decals/numbers/one, +/obj/structure/railing/corner/end{ + dir = 8 + }, /turf/open/floor/iron/edge{ dir = 8 }, @@ -57049,19 +57029,13 @@ /turf/open/floor/engine, /area/station/engineering/atmos) "qxE" = ( -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/yellow/filled/warning, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 4 - }, /obj/machinery/plumbing/sender{ dir = 1 }, +/obj/effect/turf_decal/stripes/box, +/obj/effect/turf_decal/stripes/white/box{ + color = "#EFB341" + }, /turf/open/floor/plating, /area/station/medical/chemistry) "qxI" = ( @@ -60102,7 +60076,7 @@ dir = 1 }, /obj/machinery/button/door/directional/south{ - id = "main_surgery"; + id = "surg_a_privacy"; name = "privacy shutters control" }, /obj/effect/turf_decal/box/white, @@ -62512,15 +62486,9 @@ /area/station/hallway/secondary/command) "sgF" = ( /obj/machinery/plumbing/receiver, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/yellow/filled/warning, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 4 +/obj/effect/turf_decal/stripes/box, +/obj/effect/turf_decal/stripes/white/box{ + color = "#EFB341" }, /turf/open/floor/plating, /area/station/medical/chemistry) @@ -64553,9 +64521,6 @@ /obj/machinery/door/firedoor/border_only{ dir = 8 }, -/obj/structure/railing/corner/end{ - dir = 4 - }, /turf/open/floor/iron/white/side{ dir = 8 }, @@ -66440,15 +66405,9 @@ /obj/machinery/plumbing/receiver{ dir = 1 }, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/yellow/filled/warning, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 4 +/obj/effect/turf_decal/stripes/box, +/obj/effect/turf_decal/stripes/white/box{ + color = "#EFB341" }, /turf/open/floor/plating, /area/station/medical/chemistry) @@ -77005,6 +76964,9 @@ /obj/machinery/door/firedoor/border_only{ dir = 8 }, +/obj/structure/railing/corner/end/flip{ + dir = 4 + }, /turf/open/floor/iron/white/side{ dir = 10 }, @@ -78131,6 +78093,9 @@ /obj/structure/railing{ dir = 8 }, +/obj/effect/turf_decal/trimline/blue/filled/mid_joiner{ + dir = 1 + }, /turf/open/floor/iron/white/smooth_edge{ dir = 1 }, @@ -80527,6 +80492,9 @@ dir = 8 }, /obj/structure/cable, +/obj/effect/turf_decal/trimline/blue/filled/mid_joiner{ + dir = 4 + }, /turf/open/floor/iron/dark/smooth_large, /area/station/medical/treatment_center) "xmp" = ( @@ -114420,8 +114388,8 @@ ooZ uMX xkw aBk -dYf mPl +dYf wwh nYA cfC @@ -114934,8 +114902,8 @@ ooZ viw gpa aBk -dYf mPl +dYf ucY vaC cfC @@ -120340,7 +120308,7 @@ qlP qlP dqe amw -jIs +bhd bhd glB bhd @@ -121894,7 +121862,7 @@ rGm mfG iIq bKk -bKk +pcI jUX nMP cDG @@ -122915,7 +122883,7 @@ xoA lQP vJN xoA -bkT +aMJ qHT wiV tRL @@ -124718,10 +124686,10 @@ jKr qbd qsn uov -jYP -jYP +uov +uov jBL -jYP +uov uov uov iiJ @@ -125245,7 +125213,7 @@ kTx aBj fsz aVQ -pcI +eCN kTx fWM dex @@ -186390,8 +186358,8 @@ gzO vxo vxo qlP -jMg -asJ +foq +foq foq dha dha diff --git a/code/game/objects/effects/spawners/random/engineering.dm b/code/game/objects/effects/spawners/random/engineering.dm index 8075b5fc8af3..724b398e9809 100644 --- a/code/game/objects/effects/spawners/random/engineering.dm +++ b/code/game/objects/effects/spawners/random/engineering.dm @@ -68,13 +68,13 @@ icon_state = "diamond" spawn_loot_count = 3 loot = list( // Space loot spawner. Random selecton of a few rarer materials. - /obj/item/stack/sheet/runed_metal/ten = 20, + //obj/item/stack/sheet/runed_metal/ten = 20, // NOVA EDIT REMOVAL - No more Runed Metal /obj/item/stack/sheet/mineral/diamond{amount = 15} = 15, /obj/item/stack/sheet/mineral/uranium{amount = 15} = 15, /obj/item/stack/sheet/mineral/plasma{amount = 15} = 15, /obj/item/stack/sheet/mineral/gold{amount = 15} = 15, /obj/item/stack/sheet/plastic/fifty = 5, - /obj/item/stack/sheet/runed_metal/fifty = 5, + //obj/item/stack/sheet/runed_metal/fifty = 5, // NOVA EDIT REMOVAL - No more Runed Metal ) /obj/effect/spawner/random/engineering/toolbox diff --git a/code/modules/surgery/surgery_step.dm b/code/modules/surgery/surgery_step.dm index a957c888c478..de566cf9a192 100644 --- a/code/modules/surgery/surgery_step.dm +++ b/code/modules/surgery/surgery_step.dm @@ -79,7 +79,6 @@ return FALSE -#define SURGERY_SPEEDUP_AREA 0.5 // NOVA EDIT Addition - reward for doing surgery in surgery #define SURGERY_SLOWDOWN_CAP_MULTIPLIER 2.5 //increase to make surgery slower but fail less, and decrease to make surgery faster but fail more ///Modifier given to surgery speed for dissected bodies. #define SURGERY_SPEED_DISSECTION_MODIFIER 0.8 @@ -87,6 +86,7 @@ #define SURGERY_SPEED_MORBID_CURIOSITY 0.7 ///Modifier given to patients with TRAIT_ANALGESIA #define SURGERY_SPEED_TRAIT_ANALGESIA 0.8 +#define SURGERY_SPEED_CALM_ENVIRONMENT 0.8 // NOVA EDIT ADDITION - Modifier given to surgery when done in calm areas (no other humans around) /datum/surgery_step/proc/initiate(mob/living/user, mob/living/target, target_zone, obj/item/tool, datum/surgery/surgery, try_to_fail = FALSE) // Only followers of Asclepius have the ability to use Healing Touch and perform miracle feats of surgery. @@ -122,6 +122,7 @@ if(HAS_TRAIT(target, TRAIT_ANALGESIA)) speed_mod *= SURGERY_SPEED_TRAIT_ANALGESIA + to_chat(user, span_notice("You are able to work faster due to the patient's calm attitude!")) // NOVA EDIT ADDITION - Better feedback for the use of analgesia var/implement_speed_mod = 1 if(implement_type) //this means it isn't a require hand or any item step. @@ -141,17 +142,14 @@ var/was_sleeping = (target.stat != DEAD && target.IsSleeping()) - // NOVA EDIT ADDITION START - reward for doing surgery on calm patients, and for using surgery rooms(ie. surgerying alone) - if(was_sleeping || HAS_TRAIT(target, TRAIT_ANALGESIA) || target.stat == DEAD) - modded_time *= SURGERY_SPEEDUP_AREA - to_chat(user, span_notice("You are able to work faster due to the patient's calm attitude!")) - var/quiet_enviromnent = TRUE + // NOVA EDIT ADDITION START - reward for doing surgery on a calm environment (no other humans around) + var/quiet_environment = TRUE for(var/mob/living/carbon/human/loud_people in view(3, target)) if(loud_people != user && loud_people != target) - quiet_enviromnent = FALSE + quiet_environment = FALSE break - if(quiet_enviromnent) - modded_time *= SURGERY_SPEEDUP_AREA + if(quiet_environment) + modded_time *= SURGERY_SPEED_CALM_ENVIRONMENT to_chat(user, span_notice("You are able to work faster due to the quiet environment!")) // NOVA EDIT ADDITION END if(do_after(user, modded_time, target = target, interaction_key = user.has_status_effect(/datum/status_effect/hippocratic_oath) ? target : DOAFTER_SOURCE_SURGERY)) //If we have the hippocratic oath, we can perform one surgery on each target, otherwise we can only do one surgery in total. @@ -179,7 +177,7 @@ surgery.step_in_progress = FALSE return advance -#undef SURGERY_SPEEDUP_AREA // NOVA EDIT ADDITION +#undef SURGERY_SPEED_CALM_ENVIRONMENT // NOVA EDIT ADDITION /** * Handles updating the mob's mood depending on the surgery states. diff --git a/html/changelogs/archive/2024-11.yml b/html/changelogs/archive/2024-11.yml index 36cbcfd06eee..64e5bb99cbe4 100644 --- a/html/changelogs/archive/2024-11.yml +++ b/html/changelogs/archive/2024-11.yml @@ -45,3 +45,25 @@ Curls' Jinshee: - rscadd: New gecko tail! +2024-11-06: + A.C.M.O.: + - rscadd: Added a music synthesizer action to Ethereal and Synthetic species. + - rscadd: Added the personal holosign projector. Use it to mark areas as explicitly + lewd or private. Right-click to toggle modes. + Hardly: + - balance: Removes the 50% speedup surgery speed bonus from being in a calm environments + and numb/dead patients + - balance: Calm environment instead now boosts surgery speed by 20% + MajManatee: + - rscdel: Runed metal no longer spawns as a "Rare Material" + OrbisAnima: + - bugfix: fixed an exploit with Twitch. + RatFromTheJungle: + - image: The mantis blade's sprite is now bigger and more obvious. + dwasint: + - bugfix: Evoker-type RSD now properly respect if you are trying to put a soul into + a body that was previously occupied. + norsvenska: + - map: cleaned up the ouroboros medical department's floor decals and lights + - bugfix: ouroboros surgery shutters are now linked to their buttons + - bugfix: you can now climb the staircase to the paramedic dispatch room on ouroboros diff --git a/modular_nova/master_files/code/modules/mob/living/carbon/human/species_type/ethereal.dm b/modular_nova/master_files/code/modules/mob/living/carbon/human/species_type/ethereal.dm index 731ab6605511..8d8d5e7edeb9 100644 --- a/modular_nova/master_files/code/modules/mob/living/carbon/human/species_type/ethereal.dm +++ b/modular_nova/master_files/code/modules/mob/living/carbon/human/species_type/ethereal.dm @@ -1,3 +1,8 @@ +/datum/species/ethereal/on_species_gain(mob/living/carbon/human/new_ethereal, datum/species/old_species, pref_load) + . = ..() + var/datum/action/sing_tones/sing_action = new + sing_action.Grant(new_ethereal) + /datum/species/ethereal/create_pref_unique_perks() var/list/to_add = list() @@ -14,6 +19,12 @@ SPECIES_PERK_NAME = "Disco Ball", SPECIES_PERK_DESC = "Ethereals passively generate their own light.", ), + list( + SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK, + SPECIES_PERK_ICON = "music", + SPECIES_PERK_NAME = "Musical Discharger", + SPECIES_PERK_DESC = "Ethereals can sing musical tones using their electric discharger.", + ), list( SPECIES_PERK_TYPE = SPECIES_NEUTRAL_PERK, SPECIES_PERK_ICON = "gem", diff --git a/modular_nova/master_files/icons/obj/devices/tools.dmi b/modular_nova/master_files/icons/obj/devices/tools.dmi index d30441bd74f3aa8c99d0c6d44ce88a062bdb7aa2..54aed5edd184837383cfb9d11162fb36fa40599e 100644 GIT binary patch literal 4851 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 A+W-In literal 1743 zcmY+EeK^zWAIIlmt#%BB$U|GdQjV5%L^{mOnWM#7LQk@A9L-ZRCWcHb6OM-vVr+7W z#MIBPgM%~GYSmVgUy87)WK%{=p0@d(Ip^xS&bhApzTcnE=f3XG`}6we&hf>2!Jy_) z5C{ar9m4u)bWF2**Xw9b+hEoQjlA{s3GnRg?IjR?aXjGGamil%8!Fz@7Oe&QI81jr z6puh4ib^Unp_`LOct|ADt2FXhO9&E=`Od-L)YNpBt(`6bJzZe8t=?`$;PxNHe%J5u z^j|AT6iQo1o9~HJAE#tsg4g;C|8Far_r^DeIGcUb5MnimL-H!O0w*o8Eq8AsU_b!bRs7%Gd8Ov#**juNb~ct+yh{ZD08w0~0+y`4lp%6T5Y*gl z*@Y{>7welz@TjcaZ&Ixj%eEJ1TUKRSHDz1m)67%S%qx?(5R)`?38LyW4XjpzAKoA2 zJ~4P!lkidkP9|W(DPi%E*t)c*v&jO=BoUkvl! z?*)Oo{!ll$bWWQ6YIumYGzS=#SNBuO+Qy4tKxFy@`BtZ%}RpJ;49~|A@Q3;GOtdOUxv= ziayIneV(5UJwI{n+0ny>x|ow@cdbPykUAGcpLpL%o5T?>bspGA6lZ$|pb>_!)6Xy5 z6*sjz1V)ET!X*?F&boZ|=p?88^j%-pqA)qOE?RitRqCVeEsRI5dR1kg&UZo&v}ui! z+D98(kf9uptF7){T^^odd4-}N5v=IG6^sc#lhGB_b^mGi{f8I#tUzNOkN;L~&$YPy zV%S!amD?RANR@ZS2WnBodie)iZtpx%73zej+lUO~9Ix7sP&y3Rz{gVY+cQ(h0>6o< zl6B4dqmM+n)OR&6cKYpSZ|0x~!+SV7B7A zJDXJp@h)`Ek(HDZ@}4`eX?D3r-Wh{IwQ5TfceK$P?Ufvkdjw}%efs}X(!`{s{Nx+0 zPv^QXQtizwc`Mp2%SHAdL^*RosF&PuBj!WVQLQ>EnVOJ5H7tDk4HFG7C@kbZ=nooI zI;x?zg0*#HcI>hlFA@iqtv!-YO$o=PbK3g)M+)>|U~S453HO>h$PM#D&5_#|On)+J zx;V{}L9r81x%4{C_@`pGa}-=)Aj0`X1iBn(*jLLvR;jF0bbB*anw$}WChi7RKX~Gl;UAVU zXol6r$)4M=}HVK9kNItS=FD0#HxoMW({!(XQEWYKdaz&dsXHG ztY;ycf#X4}4Tm3mq0bHsn8_fpwG-0SxgAbRJ+E~i8@LI%Fo~rB zY*`^Ndapxup)Jx>7*=}s^8E5d-U}eDdceT$k;sG_nzkxeE=K#WzL$!EZ>Sbo=yc-z z-$Q676dS}VT{__73rS@3E?0!H}(J>6)AQp|F~-wT8b9gfjqE>AAFwB5^y+(6ZZK zO{Nver12E)fB#eY(z)Fj2eicO16p^K7EP}@038CpC^FE z+fD*}oQWDZnV~#L8lx3hta(hJSVR<;4_i^Qrq~kTiT+v;&<7Nj+pYk!ei#6Krb!0y zp(CQ|y-odFZr&Hgy-x$s7UD&q?d`vURZV3Z4NopepG-vY?c%R+H2*XR=ZVL1JVG-6 E1bn4@%K!iX diff --git a/modular_nova/modules/deforest_medical_items/code/chemicals/twitch.dm b/modular_nova/modules/deforest_medical_items/code/chemicals/twitch.dm index 8d6b2ca392c6..352b1d8939b2 100644 --- a/modular_nova/modules/deforest_medical_items/code/chemicals/twitch.dm +++ b/modular_nova/modules/deforest_medical_items/code/chemicals/twitch.dm @@ -46,7 +46,7 @@ . = ..() our_guy.add_movespeed_modifier(/datum/movespeed_modifier/reagent/twitch) - our_guy.next_move_modifier -= 0.3 // For the duration of this you move and attack faster + our_guy.next_move_modifier *= 0.7 // For the duration of this you move and attack faster our_guy.sound_environment_override = SOUND_ENVIRONMENT_DIZZY @@ -76,7 +76,7 @@ . = ..() our_guy.remove_movespeed_modifier(/datum/movespeed_modifier/reagent/twitch) - our_guy.next_move_modifier += (overdosed ? 0.5 : 0.3) + our_guy.next_move_modifier /= (overdosed ? 0.49 : 0.7) our_guy.sound_environment_override = NONE @@ -174,7 +174,7 @@ RegisterSignal(our_guy, COMSIG_ATOM_PRE_BULLET_ACT, PROC_REF(dodge_bullets)) - our_guy.next_move_modifier -= 0.2 // Overdosing makes you a liiitle faster but you know has some really bad consequences + our_guy.next_move_modifier *= 0.7 // Overdosing makes you a liiitle faster but you know has some really bad consequences if(!our_guy.hud_used) return diff --git a/modular_nova/modules/implants/icons/implanted_blade_lefthand.dmi b/modular_nova/modules/implants/icons/implanted_blade_lefthand.dmi index c7d006ff9471780936496524614859886a721f3f..8b29cc430e455fbae52a5f3ff2772e20c0352a88 100644 GIT binary patch delta 973 zcmV;;12X*72hs?TB!7^4R9JLGWpiV4X>fFDZ*Bkpc$|gHy$ZrG6o%nB=PEwhRf_#t z9L^#slA*nY63MX%v=Ne^^zI!T935YH-Wu2OW@hNg&`VMd&j`lQoJqZdD;|u#BjqKm zzI-DWTLg@1x3Pr0+&Al_BIQELU<{-l$?lTDXn$Cur1e<-KYtx5C!0OM=ud5Pp&H|? zp(jHh;SVtNZi&~p000AhNkl9f9h$3<4&KLbQjBnwL;QK?j95Cjt? zh~rpSDiv8+8u8|*;3_Mb*FS{@L7)#04^s=ZJxAPR#cu)N`N8DtU%eR0+w|jirYKcO(d+g#IahH{M0SevjaWxG0rn#mXhI^F2j;vYb z_8#D|-9AZrz5PjNl3s8BvE4q&tEPFzRaSfv1ddk$W@-NhjsbhJWR*(?uxbAWMUDY` zTx7)&08Vjtch}1wHtm0!r{AFK_2EmWvr-Miy_ZgBMc3;?FGVf@S+n}#t1uy^YyJQ7 zr@gr@X(7py6&FN+!_Sj30vVGm0Th3s0N`*xz=FX20KjlR04UrK01Wp7konmUu-a_u z(^gBYHk%VWfbBWrE-UW>tTvl^c`%sjn&rWO5?GQotK8lLyfzv__4^asmFoB9Yon1@ zNpp>>toR}b9Ipb*(*6w`1NLOeDwhsm)BX({1NOMciX#9VZvvS1Kh4u`FlI4x45X7a vE3f+jX1VzW)$dEuXz=D+kR>bb2LR^-q_Z=8Xn6`h00000NkvXXu0mjfJh;q+ delta 860 zcmV-i1Ec)X2-F9VB!7*1R9JLGWpiV4X>fFDZ*Bkpc$|gHu?oU46h`4W_bGnbRm9Y; zcaapy(7r;6JBjUNmGkqGBBg1 z4}T>vj83n|UjP6D0!c(cRCt{2oIPsmKoo@~MRcqImbTBk7>BUJ{8Fc2Kl z3A~IzO0Oa-2)GbTlQe2FuX$=-VUILFwsg){kId!h(;aCrH#{DX0l_7@b^+wNPylc! z05}u?90~vq1(Tiv6O)<(3x9DcfDl4m^LiwPX5~}>Ddph8gb+$fX}hFJVv?0p0jjDB zrIf*Q`L3F#(GsC)8ueVhD=B4ARaNM+zOiE?E9dV3RaJ%2{b!IQNqDIn2q9FGBw=*_ z$(w%xTUmv^{uC;NQ0w*jVxhY0h@GtX6#$MG0fZ2$J)N}Hwx<){{#rG$k(IX&kiWcW zwJP0p#7E)Dz>sfLlk)>KOtbRR0s4NX@DorU)2y6-2F7u$+P3Xo;UBUla2x-lbQk!e{ep)MBsb?U^pKD6wU_# zhVuc)c;*8{MX`U|Y=WpL_BPfLds#UbAS#OeyewCJu9=tRiW2Bynw7V6fUoWL^>?>> zI=AL`w|n~9ZeM-XG-hmN#e*PloC+|c{daI1(8nYzFC9Rq{daI1(8oqr+ycP4TP~MQ zezP}D|M}P6Y?m}iOtSKJ z5=d?nz5|nr0w;e801gEJhXR1Z`2Z7v^8tY2d;m~59{?E62O#5_4=~Fz^|sjrvn)H? z0d&_9ds#UbV3uX-;c)16&BNh92{bXy%G)`>Pnrg@uFtkBS=ZrDn))hf)Y!_32SMOC z6<|pF@8C9|k4aWuI)G05@8C9|kBzLj1%TsBfUf=bdHOUvI0000>O|#&sb)?d9-@<6 zw*|go`pK$vqa$f*ykLNU&K52n!5p2EbvwUq%KLWd&6ziEe%s|fNZofceP3kQ&nG2T zqAb%Vy=I-v$EaKXb3H?%L{>DnVdKiLzxU~%Ucx2NwlK`=W{meUjio&{I>9^jJU9&I zpZ|LDMU?hZ7Xg+_M;C2U;$T`iMM!;dw(b1$#?=YSied$X6?mLuS6@xZOn&zFa6diDl+8FTx@`~MyYKz=aQ2Fts``shy+ZZHxTn81 zJeIUk0LZbo+nZ7q<@@y3BkzW1WwBg}F3IWPU#e{NyFC|QfBo{Vc`Wk zW2f_fH#U^v+nbktUy`r=(?hSiX+LdqwXUma?`N5&9a>vhnOd#uwqwU0qarV$8`KmX zig)YT--~~G_U+sox9vadIOH7wka@bR;WJ~=v}|dhMCLl(B-sU5-p`*`ZnX$V?TVVf>2o!- zQlwkhA8KEL_kME#xH9<(bI z1hHxyGClBZ|GX9k*F9`E{#|}3%5ct$agl=FgU_Y{TVJm6U%4_S{Ex@)hwE9)u1~Ve z`TP1|14qFRzRCJbia>|**FR@|qH&#d4*!J3G2#Vw4t+(j2YxbGp5Dp}lrXt2wvlhc z)x6iA{oHf5-o7Wbmn*nbG;x2}K9)Q`wK(yuXTo-`HCGqTF9HUvL+|lVYp)h<6uu-oGn|vZYou4+azN6X0SG)@ L{an^LB{Ts55-)OT delta 681 zcmV;a0#^OQ2+aqOyi@}FNklgR^=kr+*Tw>P=5VwNHKG`0msD!|$l7DvIwuMVhA3l25IvxVDM@ z{wY*Sskhs05QpE#)Vh4%FTMqUGZ3J?T!Lh|;B-hSb$hvZ6W1mK0iIu9y)9?AFtsk< z_lqq6oKXQnde1fWJtKtgBtlFG5XviHhpF|1uup^6z>XwIblbMxFVNIFLfN0mJ3!mE zQIaHHw*emhJU1_azAw^L{=V-^AHD^XE&&^ppaK_v;e3D<#dQJa1FR^n3pgKOMR8rg z`2Z`6Ya7l7SZQ2aTvdR$D30&DorsI#=qe!-m|9l|`!#wAd??FDpBL39E{fwrSw8v_ z*EUxI{2UHXU;F)=t7J^_wco$}91c&u#I*%K1c5UtKnQJs<$s=m03o&kmj7wk0>Bv+ zpsNBOKDU9cOfUVEnu_a+e^WpFN?@y#Y?rRxVGSjAaEuH2%!zI{LeEGAjCGn z@;?n*063!pbXCCTHqezY>7}1iQ*m7}IUhjPbtJOP%fs(r>7R%50l@hWN23?e7yhbt P00000NkvXXu0mjf^1(io diff --git a/modular_nova/modules/modular_implants/code/soulcatcher/handheld_soulcatcher.dm b/modular_nova/modules/modular_implants/code/soulcatcher/handheld_soulcatcher.dm index 094ebc172903..2dc1408eca44 100644 --- a/modular_nova/modules/modular_implants/code/soulcatcher/handheld_soulcatcher.dm +++ b/modular_nova/modules/modular_implants/code/soulcatcher/handheld_soulcatcher.dm @@ -124,7 +124,7 @@ to_chat(user, span_warning("[target_mob]'s brain isn't compatible.")) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN - if(target_mob.mind || target_mob.ckey || GetComponent(/datum/component/previous_body)) + if(target_mob.mind || target_mob.ckey || target_mob.GetComponent(/datum/component/previous_body)) to_chat(user, span_warning("[target_mob] is not able to receive a soul")) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN diff --git a/modular_nova/modules/species_synthesizer/README.md b/modular_nova/modules/species_synthesizer/README.md new file mode 100644 index 000000000000..2de304bec9d6 --- /dev/null +++ b/modular_nova/modules/species_synthesizer/README.md @@ -0,0 +1,22 @@ +https://github.com/NovaSector/NovaSector/pull/4531 + +## Title: All the emotes. + +MODULE ID: species_synthesizer + +### Description: + +Adds an action to Synthetic and Ethereal species that allows them to synthesize music. + +- Added to `modular_nova/modules/synths/code/species/synthetic.dm`: + - Edited `/datum/species/synthetic/on_species_gain()` to add the action to the mob. + - Added to `/datum/species/ethereal/create_pref_unique_perks()` to add the "Musical Discharger" species perk. + +### Master File Additions + +- Added to `modular_nova/master_files/code/modules/mob/living/carbon/human/species_type/ethereal.dm`: + - Overrode `/datum/species/ethereal/on_species_gain()` to add the action to the mob. + - Added to `/datum/species/synthetic/create_pref_unique_perks()` to add the "Tone Synthesizer" species perk. + +### Credits: +- [@Floofies](https://github.com/Floofies) diff --git a/modular_nova/modules/species_synthesizer/sing_tones.dm b/modular_nova/modules/species_synthesizer/sing_tones.dm new file mode 100644 index 000000000000..c3e57e5d5f8b --- /dev/null +++ b/modular_nova/modules/species_synthesizer/sing_tones.dm @@ -0,0 +1,48 @@ +/datum/action/sing_tones + name = "Sing Tones" + desc = "Use your internal synthesizer to sing!" + button_icon = 'icons/obj/art/musician.dmi' + button_icon_state = "xylophone" + var/datum/song/song + /// What instruments can be used. + var/allowed_instrument_ids = list("spaceman", "meowsynth", "square", "sine", "saw") + /// Instruments added after being emagged. + var/emag_instrument_ids = list("honk") + /// Set to TRUE if already emagged. + var/emagged = FALSE + +/datum/action/sing_tones/Grant(mob/grant_to) + ..() + RegisterSignal(grant_to, COMSIG_SPECIES_LOSS, PROC_REF(on_species_loss)) + RegisterSignal(grant_to, COMSIG_ATOM_EMAG_ACT, PROC_REF(on_emag_act)) + song = new(grant_to, allowed_instrument_ids, 15) + if(isethereal(grant_to)) + desc = "Use your electric discharger to sing!" + +/datum/action/sing_tones/Remove(mob/remove_from) + ..() + QDEL_NULL(song) + UnregisterSignal(remove_from, list( + COMSIG_SPECIES_LOSS, + COMSIG_ATOM_EMAG_ACT, + )) + +/datum/action/sing_tones/proc/on_species_loss(mob/living/carbon/human/human) + SIGNAL_HANDLER + + qdel(src) + +/datum/action/sing_tones/proc/on_emag_act(mob/living/carbon/human/source, mob/user) + SIGNAL_HANDLER + + if(emagged) + return + emagged = TRUE + song.allowed_instrument_ids += emag_instrument_ids + song.set_instrument("honk") + +/datum/action/sing_tones/Trigger(trigger_flags) + . = ..() + if(!.) + return + song.ui_interact(owner) diff --git a/modular_nova/modules/synths/code/species/synthetic.dm b/modular_nova/modules/synths/code/species/synthetic.dm index f2c1fd33d0ac..b3328ee40add 100644 --- a/modular_nova/modules/synths/code/species/synthetic.dm +++ b/modular_nova/modules/synths/code/species/synthetic.dm @@ -52,6 +52,8 @@ var/datum/action/innate/monitor_change/screen /// This is the screen that is given to the user after they get revived. On death, their screen is temporarily set to BSOD before it turns off, hence the need for this var. var/saved_screen = "Blank" + /// Set to TRUE if the species was emagged before + var/emag_effect = FALSE /datum/species/synthetic/allows_food_preferences() return FALSE @@ -87,6 +89,11 @@ /datum/species/synthetic/on_species_gain(mob/living/carbon/human/transformer) . = ..() + RegisterSignal(transformer, COMSIG_ATOM_EMAG_ACT, PROC_REF(on_emag_act)) + + var/datum/action/sing_tones/sing_action = new + sing_action.Grant(transformer) + var/screen_mutant_bodypart = transformer.dna.mutant_bodyparts[MUTANT_SYNTH_SCREEN] var/obj/item/organ/internal/eyes/eyes = transformer.get_organ_slot(ORGAN_SLOT_EYES) @@ -142,6 +149,8 @@ /datum/species/synthetic/on_species_loss(mob/living/carbon/human/human) . = ..() + UnregisterSignal(human, COMSIG_ATOM_EMAG_ACT) + var/obj/item/organ/internal/eyes/eyes = human.get_organ_slot(ORGAN_SLOT_EYES) if(eyes) @@ -166,6 +175,15 @@ old_stomach.moveToNullspace() STOP_PROCESSING(SSobj, old_stomach) +/datum/species/synthetic/proc/on_emag_act(mob/living/carbon/human/source, mob/user) + SIGNAL_HANDLER + + if(emag_effect) + return + emag_effect = TRUE + playsound(source.loc, 'sound/misc/interference.ogg', 50) + to_chat(source, span_warning("Alert: Security breach detected in central processing unit. Error Code: 540-EXO")) + /** * Makes the IPC screen switch to BSOD followed by a blank screen * @@ -219,6 +237,13 @@ SPECIES_PERK_DESC = "[plural_form] can't be husked, disappointing changelings galaxy-wide.", )) + perk_descriptions += list(list( + SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK, + SPECIES_PERK_ICON = "music", + SPECIES_PERK_NAME = "Tone Synthesizer", + SPECIES_PERK_DESC = "[plural_form] can sing musical tones using an internal synthesizer.", + )) + perk_descriptions += list(list( SPECIES_PERK_TYPE = SPECIES_NEUTRAL_PERK, SPECIES_PERK_ICON = "robot", diff --git a/tgstation.dme b/tgstation.dme index 8883ca151a16..7cbfb0a5b318 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -8467,6 +8467,7 @@ #include "modular_nova\modules\specialist_armor\code\hardened.dm" #include "modular_nova\modules\specialist_armor\code\peacekeeper.dm" #include "modular_nova\modules\specialist_armor\code\sacrificial.dm" +#include "modular_nova\modules\species_synthesizer\sing_tones.dm" #include "modular_nova\modules\stasisrework\code\all_nodes.dm" #include "modular_nova\modules\stasisrework\code\bodybag.dm" #include "modular_nova\modules\stasisrework\code\bodybag_structure.dm"