diff --git a/_maps/map_files/Ouroboros/Ouroboros.dmm b/_maps/map_files/Ouroboros/Ouroboros.dmm index 2e5b4b8a8af4..01a03c38a443 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{ @@ -4118,12 +4114,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{ @@ -4705,10 +4695,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 }, @@ -12065,11 +12055,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 }, @@ -22025,9 +22015,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" = ( @@ -24224,6 +24214,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" = ( @@ -24468,6 +24461,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" = ( @@ -33370,12 +33366,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{ @@ -33550,12 +33540,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 @@ -34165,10 +34149,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, @@ -34472,12 +34452,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 @@ -40147,7 +40121,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, @@ -41562,9 +41536,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"; @@ -49793,6 +49764,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" = ( @@ -51857,16 +51831,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" = ( @@ -52153,10 +52124,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 @@ -53626,6 +53603,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" = ( @@ -56012,14 +55992,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 }, @@ -57057,19 +57037,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" = ( @@ -60110,7 +60084,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, @@ -62520,15 +62494,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) @@ -64561,9 +64529,6 @@ /obj/machinery/door/firedoor/border_only{ dir = 8 }, -/obj/structure/railing/corner/end{ - dir = 4 - }, /turf/open/floor/iron/white/side{ dir = 8 }, @@ -66448,15 +66413,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) @@ -77012,6 +76971,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 }, @@ -78138,6 +78100,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 }, @@ -80534,6 +80499,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" = ( @@ -114427,8 +114395,8 @@ ooZ uMX xkw aBk -dYf mPl +dYf wwh nYA cfC @@ -114941,8 +114909,8 @@ ooZ viw gpa aBk -dYf mPl +dYf ucY vaC cfC @@ -120347,7 +120315,7 @@ qlP qlP dqe amw -jIs +bhd bhd glB bhd @@ -121901,7 +121869,7 @@ rGm mfG iIq bKk -bKk +pcI jUX nMP cDG @@ -122922,7 +122890,7 @@ xoA lQP vJN xoA -bkT +aMJ qHT wiV tRL @@ -124725,10 +124693,10 @@ jKr qbd qsn uov -jYP -jYP +uov +uov jBL -jYP +uov uov uov iiJ @@ -125252,7 +125220,7 @@ kTx aBj fsz aVQ -pcI +eCN kTx fWM dex @@ -186397,8 +186365,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/AutoChangeLog-pr-4552.yml b/html/changelogs/AutoChangeLog-pr-4552.yml deleted file mode 100644 index 1b2be78c3155..000000000000 --- a/html/changelogs/AutoChangeLog-pr-4552.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "GoldenAlpharex" -delete-after: True -changes: - - bugfix: "Fixes a donator's item not being available to them in the loadout menu." \ No newline at end of file diff --git a/html/changelogs/archive/2024-11.yml b/html/changelogs/archive/2024-11.yml index c9731b374ec4..64e5bb99cbe4 100644 --- a/html/changelogs/archive/2024-11.yml +++ b/html/changelogs/archive/2024-11.yml @@ -36,3 +36,34 @@ - map: Added Interdrobe to the ghost cafe - map: Removed the vine on redsec's vendor in ghost cafe - bugfix: Icebox Interdyne's library is now connected with the powernet +2024-11-04: + GoldenAlpharex: + - bugfix: Fixes a donator's item not being available to them in the loadout menu. +2024-11-05: + Draggeru: + - rscadd: 'Adds four new hairstyles: Mermaid, Thick Ponytail, Elegant Bun, and Royal + 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/effects/holosigns.dmi b/modular_nova/master_files/icons/effects/holosigns.dmi new file mode 100644 index 000000000000..9b8f92531407 Binary files /dev/null and b/modular_nova/master_files/icons/effects/holosigns.dmi differ diff --git a/modular_nova/master_files/icons/mob/sprite_accessory/hair.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/hair.dmi index 0c78e4d53f0d..0a741570387b 100644 Binary files a/modular_nova/master_files/icons/mob/sprite_accessory/hair.dmi and b/modular_nova/master_files/icons/mob/sprite_accessory/hair.dmi differ diff --git a/modular_nova/master_files/icons/mob/sprite_accessory/tails.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/tails.dmi index 86f753d12104..96a90eef11c8 100644 Binary files a/modular_nova/master_files/icons/mob/sprite_accessory/tails.dmi and b/modular_nova/master_files/icons/mob/sprite_accessory/tails.dmi differ diff --git a/modular_nova/master_files/icons/obj/devices/tools.dmi b/modular_nova/master_files/icons/obj/devices/tools.dmi index d30441bd74f3..54aed5edd184 100644 Binary files a/modular_nova/master_files/icons/obj/devices/tools.dmi and b/modular_nova/master_files/icons/obj/devices/tools.dmi differ diff --git a/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/hair.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/hair.dm index c4f261e7bd69..79f05c510f68 100644 --- a/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/hair.dm +++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/hair.dm @@ -131,6 +131,10 @@ name = "Bun Head 4" icon_state = "hair_bunhead4" +/datum/sprite_accessory/hair/nova/elegantbun + name = "Elegant Bun" + icon_state = "hair_elegantbun" + /datum/sprite_accessory/hair/nova/rows1 name = "Rows 1" icon_state = "hair_rows1" @@ -139,6 +143,10 @@ name = "Rows 2" icon_state = "hair_rows2" +/datum/sprite_accessory/hair/nova/royalcurls + name = "Royal Curls" + icon_state = "hair_royalcurls" + /datum/sprite_accessory/hair/nova/toriyama name = "Toriyama" icon_state = "hair_toriyama" @@ -163,6 +171,10 @@ name = "Wife" icon_state = "hair_wife" +/datum/sprite_accessory/hair/nova/mermaid + name = "Mermaid" + icon_state = "hair_mermaid" + /datum/sprite_accessory/hair/nova/nia name = "Nia" icon_state = "hair_nia" @@ -175,6 +187,10 @@ name = "Short Over Eye ALT" icon_state = "hair_shortovereyealt" +/datum/sprite_accessory/hair/nova/thickponytail + name = "Thick Ponytail" + icon_state = "hair_thickponytail" + /datum/sprite_accessory/hair/nova/twintail_floor name = "Twintail Floor" icon_state = "hair_twintail_floor" diff --git a/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/tails.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/tails.dm index 3ff9e7c00b99..55d5d346879e 100644 --- a/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/tails.dm +++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/tails.dm @@ -450,3 +450,7 @@ /datum/sprite_accessory/tails/mammal/black_jackal name = "Black-backed Jackal" icon_state = "blackjackal" + +/datum/sprite_accessory/tails/mammal/wagging/gecko + name = "Gecko" + icon_state = "gecko" 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 c7d006ff9471..8b29cc430e45 100644 Binary files a/modular_nova/modules/implants/icons/implanted_blade_lefthand.dmi and b/modular_nova/modules/implants/icons/implanted_blade_lefthand.dmi differ diff --git a/modular_nova/modules/implants/icons/implanted_blade_righthand.dmi b/modular_nova/modules/implants/icons/implanted_blade_righthand.dmi index bd1ee33ebf07..786426f81aa5 100644 Binary files a/modular_nova/modules/implants/icons/implanted_blade_righthand.dmi and b/modular_nova/modules/implants/icons/implanted_blade_righthand.dmi differ diff --git a/modular_nova/modules/loadouts/loadout_items/loadout_datum_erp.dm b/modular_nova/modules/loadouts/loadout_items/loadout_datum_erp.dm index 2c1f3cb7ea5a..d04c74709a87 100644 --- a/modular_nova/modules/loadouts/loadout_items/loadout_datum_erp.dm +++ b/modular_nova/modules/loadouts/loadout_items/loadout_datum_erp.dm @@ -123,6 +123,10 @@ name = "Borg Dominatrix Module" item_path = /obj/item/borg/upgrade/dominatrixmodule +/datum/loadout_item/erp/holosign + name = "Personal Holosign Projector" + item_path = /obj/item/holosign_creator/privacy + /* * RESTRAINTS */ @@ -209,7 +213,7 @@ /datum/loadout_item/erp/shackles name = "Shackles" - item_path = /obj/item/clothing/suit/straight_jacket/shackles + item_path = /obj/item/clothing/suit/straight_jacket/shackles /datum/loadout_item/erp/kinky_sleepbag name = "Latex Sleeping Bag" diff --git a/modular_nova/modules/modular_implants/code/nifsofts/dorms.dm b/modular_nova/modules/modular_implants/code/nifsofts/dorms.dm index d41bc1d94cf8..9a883a20efbc 100644 --- a/modular_nova/modules/modular_implants/code/nifsofts/dorms.dm +++ b/modular_nova/modules/modular_implants/code/nifsofts/dorms.dm @@ -29,6 +29,7 @@ /obj/item/spanking_pad, /obj/item/clothing/sextoy/vibrator, /obj/item/restraints/handcuffs/lewd, + /obj/item/holosign_creator/privacy, // Head / Mask /Neck Items /obj/item/clothing/mask/ballgag, 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/modular_items/lewd_items/code/holosign.dm b/modular_nova/modules/modular_items/lewd_items/code/holosign.dm new file mode 100644 index 000000000000..29b9e08413e0 --- /dev/null +++ b/modular_nova/modules/modular_items/lewd_items/code/holosign.dm @@ -0,0 +1,49 @@ +/obj/item/holosign_creator/privacy + name = "personal holosign projector" + desc = "A holographic projector which creates privacy barriers to inform people that you are looking for privacy. Right-click to switch between pink (lewd advisory) and grey (privacy)." + icon = 'modular_nova/master_files/icons/obj/devices/tools.dmi' + icon_state = "signmaker_erp" + holosign_type = /obj/structure/holosign/privacy + creation_time = 0 + max_signs = 8 + /// Used to toggle the holosign type between normal privacy and lewd. + var/erp_mode = FALSE + +/obj/item/holosign_creator/privacy/Initialize(mapload) + . = ..() + register_context() + +/obj/item/holosign_creator/privacy/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = ..() + context[SCREENTIP_CONTEXT_RMB] = "[erp_mode ? "Turn off" : "Turn on"] Lewd Advisory Mode" + return CONTEXTUAL_SCREENTIP_SET + +/obj/item/holosign_creator/privacy/attack_self_secondary(mob/user, modifiers) + if(erp_mode) + erp_mode = FALSE + holosign_type = /obj/structure/holosign/privacy + balloon_alert(user, "turned off Lewd Advisory Mode") + else + erp_mode = TRUE + holosign_type = /obj/structure/holosign/privacy/erp + balloon_alert(user, "turned on Lewd Advisory Mode") + return ..() + +/obj/structure/holosign/privacy + name = "privacy holosign" + desc = "A holographic sign which flickers with the word \"Private\". It would be polite to proceed no further if you aren't invited, even if the door isn't locked." + icon = 'modular_nova/master_files/icons/effects/holosigns.dmi' + icon_state = "holosign_privacy" + base_icon_state = "holosign_privacy" + +/obj/structure/holosign/privacy/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + . = ..() + if(tool != projector) + return + qdel(src) + +/obj/structure/holosign/privacy/erp + name = "lewd advisory holosign" + desc = "A holographic sign which flickers with the word \"Lewd\". If you choose to proceed, you can expect sexual activity." + icon_state = "holosign_erp" + base_icon_state = "holosign_erp" diff --git a/modular_nova/modules/modular_items/lewd_items/code/lewd_machinery/lustwish.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_machinery/lustwish.dm index 2a5a4df4613a..255f762b3462 100644 --- a/modular_nova/modules/modular_items/lewd_items/code/lewd_machinery/lustwish.dm +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_machinery/lustwish.dm @@ -147,6 +147,7 @@ /obj/item/storage/box/shibari_stand = 4, /obj/item/storage/box/strippole_kit = 4, /obj/item/storage/box/xstand_kit = 4, + /obj/item/holosign_creator/privacy = 4, ), ), ) 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 23eb559b8987..73a49bb4638a 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -8082,6 +8082,7 @@ #include "modular_nova\modules\modular_items\lewd_items\code\clothing_pref_check.dm" #include "modular_nova\modules\modular_items\lewd_items\code\decals.dm" #include "modular_nova\modules\modular_items\lewd_items\code\emote.dm" +#include "modular_nova\modules\modular_items\lewd_items\code\holosign.dm" #include "modular_nova\modules\modular_items\lewd_items\code\lewd_quirks.dm" #include "modular_nova\modules\modular_items\lewd_items\code\screen_icons.dm" #include "modular_nova\modules\modular_items\lewd_items\code\verbs.dm" @@ -8544,6 +8545,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"