From 20df2e6eebfee65dbb0363f360f2cc5e83cfd6f3 Mon Sep 17 00:00:00 2001 From: Darius <5933805+LeDrascol@users.noreply.github.com> Date: Sat, 24 Dec 2022 18:17:14 -0500 Subject: [PATCH 001/129] Prevent holodeck griefing Replaces plasma flood, holo-carp, and killer bees. The modules will now create harmless air, corgis, and foxes. --- code/__SPLURTCODE/DEFINES/atmospherics.dm | 4 ++++ modular_splurt/code/game/area/areas/holodeck.dm | 11 +++++++++++ modular_splurt/code/modules/holodeck/holo_effect.dm | 7 +++++++ tgstation.dme | 2 ++ 4 files changed, 24 insertions(+) create mode 100644 modular_splurt/code/game/area/areas/holodeck.dm create mode 100644 modular_splurt/code/modules/holodeck/holo_effect.dm diff --git a/code/__SPLURTCODE/DEFINES/atmospherics.dm b/code/__SPLURTCODE/DEFINES/atmospherics.dm index 3aeb99ee08..f73f8d8ceb 100644 --- a/code/__SPLURTCODE/DEFINES/atmospherics.dm +++ b/code/__SPLURTCODE/DEFINES/atmospherics.dm @@ -1,2 +1,6 @@ // Gas defines here because somebody hates typepaths #define GAS_COPIUM "copium" + +// Prevent holodeck plasma +#undef BURNMIX_ATMOS +#define BURNMIX_ATMOS OPENTURF_DEFAULT_ATMOS diff --git a/modular_splurt/code/game/area/areas/holodeck.dm b/modular_splurt/code/game/area/areas/holodeck.dm new file mode 100644 index 0000000000..0403c86a39 --- /dev/null +++ b/modular_splurt/code/game/area/areas/holodeck.dm @@ -0,0 +1,11 @@ +// Replacement for holodeck plasma module +/area/holodeck/rec_center/burn + name = "Holodeck - Atmospheric Test" + +// Replacement for holodeck carp module +/area/holodeck/rec_center/wildlife + name = "Holodeck - Good Boy Simulation" + +// Replacement for holodeck bee module +/area/holodeck/rec_center/anthophila + name = "Holodeck - Gekkerphila" diff --git a/modular_splurt/code/modules/holodeck/holo_effect.dm b/modular_splurt/code/modules/holodeck/holo_effect.dm new file mode 100644 index 0000000000..6d362bc9fb --- /dev/null +++ b/modular_splurt/code/modules/holodeck/holo_effect.dm @@ -0,0 +1,7 @@ +// Replace carp with corgis +/obj/effect/holodeck_effect/mobspawner + mobtype = /mob/living/simple_animal/pet/dog/corgi + +// Replace bees with foxes +/obj/effect/holodeck_effect/mobspawner/bee + mobtype = /mob/living/simple_animal/pet/fox diff --git a/tgstation.dme b/tgstation.dme index a4a2548fee..b58a6bd6e1 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -4338,6 +4338,7 @@ #include "modular_splurt\code\game\say.dm" #include "modular_splurt\code\game\area\areas\centcom.dm" #include "modular_splurt\code\game\area\areas\commons.dm" +#include "modular_splurt\code\game\area\areas\holodeck.dm" #include "modular_splurt\code\game\area\areas\layenia.dm" #include "modular_splurt\code\game\area\areas\maintenance.dm" #include "modular_splurt\code\game\area\areas\shuttles.dm" @@ -4595,6 +4596,7 @@ #include "modular_splurt\code\modules\food_and_drinks\recipes\tablecraft\recipes_burger.dm" #include "modular_splurt\code\modules\food_and_drinks\recipes\tablecraft\recipes_donut.dm" #include "modular_splurt\code\modules\holiday\holidays.dm" +#include "modular_splurt\code\modules\holodeck\holo_effect.dm" #include "modular_splurt\code\modules\hydroponics\grown\towercap.dm" #include "modular_splurt\code\modules\jobs\job_types\_job_alt_titles.dm" #include "modular_splurt\code\modules\jobs\job_types\atmospheric_technician.dm" From 4bceca24b1db60c527d0608c2569085d1dc947bc Mon Sep 17 00:00:00 2001 From: Darius <5933805+LeDrascol@users.noreply.github.com> Date: Sat, 31 Dec 2022 01:44:32 -0500 Subject: [PATCH 002/129] Improved holodeck anti-grief Reverts original holodeck anti-grief. Carp are replaced with funclaws. Bees are replaced with friendly bees. Burn floor is replaced with binary floor. --- _maps/map_files/generic/CentCom.dmm | 67 ++++++++++--------- code/__SPLURTCODE/DEFINES/atmospherics.dm | 4 -- .../code/game/area/areas/holodeck.dm | 8 +-- .../code/modules/holodeck/holo_effect.dm | 12 ++-- 4 files changed, 43 insertions(+), 48 deletions(-) diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index da1b941bae..53de44a385 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -91,13 +91,13 @@ }, /area/holodeck/rec_center/lounge) "ap" = ( -/turf/open/floor/holofloor/plating, +/turf/open/floor/holofloor/basalt, /area/holodeck/rec_center/wildlife) "aq" = ( /turf/open/floor/holofloor/plating, /area/holodeck/rec_center/offline) "ar" = ( -/turf/open/floor/holofloor/plating/burnmix, +/turf/open/indestructible/binary, /area/holodeck/rec_center/burn) "as" = ( /obj/effect/turf_decal/tile/red{ @@ -178,12 +178,12 @@ }, /area/holodeck/rec_center/lounge) "aB" = ( -/obj/effect/holodeck_effect/mobspawner, -/turf/open/floor/holofloor/plating, +/obj/effect/holodeck_effect/mobspawner/funclaw, +/turf/open/floor/holofloor/basalt, /area/holodeck/rec_center/wildlife) "aC" = ( /obj/effect/holodeck_effect/sparks, -/turf/open/floor/holofloor/plating/burnmix, +/turf/open/indestructible/binary, /area/holodeck/rec_center/burn) "aD" = ( /obj/effect/turf_decal/tile/red{ @@ -413,7 +413,7 @@ /turf/closed/indestructible/riveted, /area/space) "bk" = ( -/obj/effect/holodeck_effect/mobspawner/bee, +/obj/effect/holodeck_effect/mobspawner/bumbles, /turf/open/floor/holofloor/asteroid, /area/holodeck/rec_center/anthophila) "bl" = ( @@ -752,7 +752,7 @@ }, /area/holodeck/rec_center/medical) "ce" = ( -/obj/effect/holodeck_effect/mobspawner/bee, +/obj/effect/holodeck_effect/mobspawner/bumbles, /obj/item/clothing/head/beekeeper_head, /turf/open/floor/holofloor/asteroid, /area/holodeck/rec_center/anthophila) @@ -856,13 +856,13 @@ /turf/open/floor/holofloor, /area/holodeck/rec_center/dodgeball) "cq" = ( -/obj/effect/holodeck_effect/mobspawner/bee, +/obj/effect/holodeck_effect/mobspawner/bumbles, /obj/effect/decal/remains/human, /obj/item/clothing/suit/beekeeper_suit, /turf/open/floor/holofloor/asteroid, /area/holodeck/rec_center/anthophila) "cr" = ( -/obj/effect/holodeck_effect/mobspawner/bee, +/obj/effect/holodeck_effect/mobspawner/bumbles, /obj/item/melee/flyswatter, /turf/open/floor/holofloor/asteroid, /area/holodeck/rec_center/anthophila) @@ -20270,6 +20270,9 @@ }, /turf/open/space, /area/space) +"Vy" = ( +/turf/open/chasm/lavaland, +/area/holodeck/rec_center/wildlife) "Vz" = ( /obj/machinery/vending/wallmed{ name = "Emergency NanoMed"; @@ -80911,16 +80914,16 @@ aa "} (232,1,1) = {" ac +Vy +Vy +Vy ap ap ap ap -ap -ap -ap -ap -ap -ap +Vy +Vy +Vy bj bt bI @@ -81168,7 +81171,7 @@ aa "} (233,1,1) = {" ac -ap +Vy aB ap ap @@ -81177,7 +81180,7 @@ ap ap ap aB -ap +Vy bj Xg TF @@ -81425,7 +81428,7 @@ aa "} (234,1,1) = {" ac -ap +Vy ap ap ap @@ -81434,7 +81437,7 @@ aB ap ap ap -ap +Vy bj bu bJ @@ -81682,16 +81685,16 @@ aa "} (235,1,1) = {" ac -ap -aB +Vy ap ap ap ap ap ap -aB ap +ap +Vy bj bv bK @@ -81939,16 +81942,16 @@ aa "} (236,1,1) = {" ac -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +Vy +Vy +Vy +Vy +Vy +Vy +Vy +Vy +Vy +Vy bj RD Va diff --git a/code/__SPLURTCODE/DEFINES/atmospherics.dm b/code/__SPLURTCODE/DEFINES/atmospherics.dm index f73f8d8ceb..3aeb99ee08 100644 --- a/code/__SPLURTCODE/DEFINES/atmospherics.dm +++ b/code/__SPLURTCODE/DEFINES/atmospherics.dm @@ -1,6 +1,2 @@ // Gas defines here because somebody hates typepaths #define GAS_COPIUM "copium" - -// Prevent holodeck plasma -#undef BURNMIX_ATMOS -#define BURNMIX_ATMOS OPENTURF_DEFAULT_ATMOS diff --git a/modular_splurt/code/game/area/areas/holodeck.dm b/modular_splurt/code/game/area/areas/holodeck.dm index 0403c86a39..2e60a0e247 100644 --- a/modular_splurt/code/game/area/areas/holodeck.dm +++ b/modular_splurt/code/game/area/areas/holodeck.dm @@ -1,11 +1,7 @@ // Replacement for holodeck plasma module /area/holodeck/rec_center/burn - name = "Holodeck - Atmospheric Test" + name = "Holodeck - CRITICAL ERROR" // Replacement for holodeck carp module /area/holodeck/rec_center/wildlife - name = "Holodeck - Good Boy Simulation" - -// Replacement for holodeck bee module -/area/holodeck/rec_center/anthophila - name = "Holodeck - Gekkerphila" + name = "Holodeck - Wasteland Simulation" diff --git a/modular_splurt/code/modules/holodeck/holo_effect.dm b/modular_splurt/code/modules/holodeck/holo_effect.dm index 6d362bc9fb..349ca781f1 100644 --- a/modular_splurt/code/modules/holodeck/holo_effect.dm +++ b/modular_splurt/code/modules/holodeck/holo_effect.dm @@ -1,7 +1,7 @@ -// Replace carp with corgis -/obj/effect/holodeck_effect/mobspawner - mobtype = /mob/living/simple_animal/pet/dog/corgi +// Holodeck mob: Funclaw +/obj/effect/holodeck_effect/mobspawner/funclaw + mobtype = /mob/living/simple_animal/hostile/deathclaw/funclaw/gentle -// Replace bees with foxes -/obj/effect/holodeck_effect/mobspawner/bee - mobtype = /mob/living/simple_animal/pet/fox +// Holodeck mob: Friendly Bee +/obj/effect/holodeck_effect/mobspawner/bumbles + mobtype = /mob/living/simple_animal/pet/bumbles From ca3e4f6d146cdb4deae55afef9af2964c848fc3b Mon Sep 17 00:00:00 2001 From: Darius <5933805+LeDrascol@users.noreply.github.com> Date: Sun, 1 Jan 2023 08:48:53 -0500 Subject: [PATCH 003/129] Update drinks with new TG sprites Port of all tgstation drink sprites. Not all sprites are used in the main branch. --- icons/obj/drinks.dmi | Bin 120833 -> 163902 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/drinks.dmi b/icons/obj/drinks.dmi index 0f49bc6d5fa1d50e40417c14bc6033ea45ba4336..09a9213f2a4ba6439033d528d0856d304a5885c5 100644 GIT binary patch literal 163902 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 Fps64Lo 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 z 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 j$s_zW%9Al#epL5jCi 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


+ Implant Details:
+ Function: Allows the user to launch covering clothing items from the body.
+ Special Features: Allows the express removal of embarrassing maid outfits.
+ Integrity: Implant will last so long as it is inside the host. + "} + + // Return text + return dat + +// Only allow use on "human" targets +/obj/item/implant/disrobe/can_be_implanted_in(mob/living/target) + if(!ishuman(target)) + return FALSE + . = ..() + +// Runs on toggling the implant +/obj/item/implant/disrobe/activate() + . = ..() + + // Get worn items + var/items = imp_in.get_contents() + + // Did the action succeed? + var/user_disrobed = FALSE + + // Iterate over worn items + for(var/obj/item/item_worn in items) + // Ignore non-mob (storage) + if(!ismob(item_worn.loc)) + continue + + // Ignore held items + if(imp_in.is_holding(item_worn)) + continue + + // Check for anything covering CHEST or GROIN + // These are the regions used by the nudist quirk + if((item_worn.body_parts_covered & CHEST) || (item_worn.body_parts_covered & GROIN)) + // Drop the target item + imp_in.dropItemToGround(item_worn, TRUE) + + // Throw item to a random spot + item_worn.throw_at(pick(oview(7,get_turf(src))),10,1) + + // Play the poster rip sound + playsound(imp_in.loc, 'sound/items/poster_ripped.ogg', 50, 1) + + // Set the activation variable + user_disrobed = TRUE + + // Display a chat message on success + if(user_disrobed) + imp_in.visible_message(span_notice("[imp_in] bursts out of [imp_in.p_their()] clothes!"), span_notice("You burst out of your clothes!")) + + // Alert the user on failure + else + to_chat(imp_in, span_notice("You have nothing to disrobe!")) + +/* + * Action datums +*/ + +// Action for rapid wardrobe removal +/datum/action/item_action/disrobe + name = "Rapid Disrobe" + desc = "Eject all torso-covering clothing from your body." + icon_icon = 'modular_splurt/icons/mob/actions/misc_actions.dmi' + button_icon_state = "no_uniform" + background_icon_state = "bg_tech" + +/* + * Implant items +*/ + +// Implanter item +/obj/item/implanter/disrobe + name = "implanter (rapid disrobe)" + imp_type = /obj/item/implant/disrobe + +// Implant case item +/obj/item/implantcase/disrobe + name = "implant case - 'rapid disrobe'" + desc = "A glass case containing a rapid disrobe implant." + imp_type = /obj/item/implant/disrobe diff --git a/modular_splurt/code/game/objects/items/storage/boxes.dm b/modular_splurt/code/game/objects/items/storage/boxes.dm index 08e2b03e48..612a4591e0 100644 --- a/modular_splurt/code/game/objects/items/storage/boxes.dm +++ b/modular_splurt/code/game/objects/items/storage/boxes.dm @@ -14,3 +14,19 @@ new /obj/item/reagent_containers/hypospray/medipen/bellygrowth(src) new /obj/item/reagent_containers/hypospray/medipen/prospacillin(src) new /obj/item/reagent_containers/hypospray/medipen/lewdbomb(src) + +// Kinkmate listing for the rapid disrobe implant +/obj/item/storage/box/implant_disrobe + name = "rapid disrobe implant box" + desc = "Comes with an implanter and an implant case for quick application!" + icon = 'modular_sand/icons/obj/fleshlight.dmi' + icon_state = "box" + +/obj/item/storage/box/implant_disrobe/ComponentInitialize() + . = ..() + var/datum/component/storage/str = GetComponent(/datum/component/storage) + str.max_items = 2 + +/obj/item/storage/box/implant_disrobe/PopulateContents() + new /obj/item/implanter(src) + new /obj/item/implantcase/disrobe(src) diff --git a/modular_splurt/code/modules/vending/kinkmate.dm b/modular_splurt/code/modules/vending/kinkmate.dm index 69c67b15cc..c8a626b0c5 100644 --- a/modular_splurt/code/modules/vending/kinkmate.dm +++ b/modular_splurt/code/modules/vending/kinkmate.dm @@ -40,7 +40,8 @@ /obj/item/mesmetron = 3, /obj/item/dildo/flared/huge = 3, /obj/item/clothing/neck/petcollar/locked/holo = 2, - /obj/item/storage/box/aphrodisiac_pump/plus = 3 + /obj/item/storage/box/aphrodisiac_pump/plus = 3, + /obj/item/storage/box/implant_disrobe = 3 ) var/list/extra_premium = list( /obj/item/clothing/mask/muzzle/ballgag = 3 diff --git a/modular_splurt/icons/mob/actions/misc_actions.dmi b/modular_splurt/icons/mob/actions/misc_actions.dmi index 17b53a319a7bf54e3284553e5fe2089106fd545c..dc254301e736dec78c4cf2c25c1ef8099bf7f67d 100644 GIT binary patch delta 484 zcmVSQ>v`s z>gNJ>1pvTfD4`>0%aH&80VhdBK~zYI?Ud_o!ypVs>97e+M!Poe|E~3CqD^3vq5WO0 ziqI(MV9X_i{}GqzmjnL8`PjaUKVACW;PbI|dfxfmQAYg{p@}dNjRC`hZi0x~Jb-XY z%d(`z&iFF2M6Q2BT8TennJq|$O?2B9@02d2<=W3+MWk&gvYZy<*{5lyza!PsSgA?G$-~pa?lej zaLz*kcr1W4z9H1}mxZNZ3jk=Z8Sp+fp!vQSdVc)34ZD1E7s^>oU1?`Acd4FbF#Yl! ae~K5jtqP9qM)_s{0000x3`su@q@)9ULR=3VIH0MiDI_Gs z!NKt#2+kOvF*XKL{~3&1)4eT#${0(6{DK)Ap4~_Ta&jkDrPOO{@A$Q|p_h$ePo?zn z!uG5yK#9qoE{-7@6OT@~$a`3U$0ax706VvUnL|xUgW4;mh0-Cf>UZz&;_}P*w^~N% zlI_nkoQvu^_m|&jymB~ghQKlnwiGA+1)9g~1RCcQH)SM!s@yp}yKT`+qv_9+_bz>Q z^Vjzv$C>e$JZ>>W9g?+W-2ATL+NJP_?r(B_j`>n^s+cQ2aB!IQE?AUcIqA)UIzHjc e{e0g_Y8fW{l Date: Tue, 10 Jan 2023 03:36:39 -0500 Subject: [PATCH 022/129] the glooby update very slimy! --- code/_globalvars/lists/flavor_misc.dm | 5 +++-- icons/mob/eyes.dmi | Bin 1627 -> 2081 bytes .../game/objects/items/storage/backpack.dm | 8 ++++++++ .../code/modules/client/loadout/backpack.dm | 2 +- .../sprite_accesories/body_markings.dm | 6 ++++++ .../new_player/sprite_accesories/horns.dm | 9 +++++++++ .../sprite_accesories/legs_and_taurs.dm | 8 ++++++++ .../new_player/sprite_accesories/snouts.dm | 11 +++++++++++ .../icons/mob/64_mutant_bodyparts.dmi | Bin 0 -> 386 bytes modular_splurt/icons/mob/clothing/64_back.dmi | Bin 0 -> 729 bytes modular_splurt/icons/mob/mam_markings.dmi | Bin 34076 -> 34357 bytes modular_splurt/icons/mob/mam_snouts.dmi | Bin 9170 -> 9787 bytes modular_splurt/icons/mob/mam_taur.dmi | Bin 9425 -> 10097 bytes modular_splurt/icons/obj/storage.dmi | Bin 550 -> 3685 bytes 14 files changed, 46 insertions(+), 3 deletions(-) create mode 100644 modular_splurt/icons/mob/64_mutant_bodyparts.dmi create mode 100644 modular_splurt/icons/mob/clothing/64_back.dmi diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm index 2ca3a0a15b..8e00b1e0fa 100644 --- a/code/_globalvars/lists/flavor_misc.dm +++ b/code/_globalvars/lists/flavor_misc.dm @@ -209,7 +209,8 @@ GLOBAL_LIST_INIT(backbaglist, list(DBACKPACK, DSATCHEL, DDUFFELBAG, //everything "Grey Satchel" = /obj/item/storage/backpack/satchel, "Grey Duffel Bag" = /obj/item/storage/backpack/duffelbag, "Leather Satchel" = /obj/item/storage/backpack/satchel/leather, - "Snail Shell" = /obj/item/storage/backpack/snail)) + "Snail Shell" = /obj/item/storage/backpack/snail, + "Sloog Shell" = /obj/item/storage/backpack/sloogshell)) //Suit/Skirt #define PREF_SUIT "Jumpsuit" @@ -378,7 +379,7 @@ GLOBAL_LIST_INIT(job_heirlooms, list( GLOBAL_LIST_INIT(nongendered_limb_types, list("fly", "zombie" ,"synth", "shadow", "cultgolem", "agent", "plasmaman", "clockgolem", "clothgolem")) //list of eye types, corresponding to a respective left and right icon state for the set of eyes -GLOBAL_LIST_INIT(eye_types, list("normal", "insect", "moth", "double", "double2", "double3", "spider", "cyclops", "third", "spectre", "shadekin")) +GLOBAL_LIST_INIT(eye_types, list("normal", "insect", "moth", "double", "double2", "double3", "spider", "cyclops", "third", "spectre", "shadekin", "none")) //list linking bodypart bitflags to their actual names GLOBAL_LIST_INIT(bodypart_names, list(num2text(HEAD) = "Head", num2text(CHEST) = "Chest", num2text(LEG_LEFT) = "Left Leg", num2text(LEG_RIGHT) = "Right Leg", num2text(ARM_LEFT) = "Left Arm", num2text(ARM_RIGHT) = "Right Arm")) diff --git a/icons/mob/eyes.dmi b/icons/mob/eyes.dmi index 4bc2136cd1e329546a4958df53775cce9b2eff19..c8f0b8f6346cd8de68440801afbf9f35911de62e 100644 GIT binary patch literal 2081 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 literal 0 HcmV?d00001 diff --git a/modular_splurt/icons/mob/clothing/64_back.dmi b/modular_splurt/icons/mob/clothing/64_back.dmi new file mode 100644 index 0000000000000000000000000000000000000000..89f7890040c3e2b6290ca6d12092eba9d8555382 GIT binary patch literal 729 zcmV;~0w(>5P)Xh5!Hn0d!JMQvg8b*k%9#0Caj(Sad{Xb7OL8aCB*J zZU6vyoKseCa&`CgQ*iP1i#7KR-P_DKR;_0Em^iI8!okVjiquF1*}tD%mEm&H`%L;v|5U39ff zrXC354ReKg7*}x^haIF}CD;!C`B>c4sQn!NZX`j%{kYFZYW3sSM1rI>d&VvOV%*iP z_RpE|Vz3c3h{D^|u>cYg1k?4Y0@Rt0C1?c{LsJ_BHQPxQT#!l`&~*KJ z6#$hqpKn?XW$}V+AqXhB(2?Ak%4gaU#_#nr1-xX^ZL9_$)5d5#w#YUD!W#cDJSSaG zus|e2Zatg25Gb$Joe^D6;C28tixeJBbKo#9MW_W>_H}epRk|rr1(Q#hgTE>eEm>6! zPoBM2bSJ0;({G?Yp%S1hwR5)zAoIdSU@H8Jjo>{mnVOO$?|LMIfP|EjDP9@aGcq>N z{e`k1FF}mwiO!ug@6vRip*?^L=9g$_767+r@ctYcF}vs0{uBEETrpZT@4x|I00000 LNkvXXu0mjfRmM7E literal 0 HcmV?d00001 diff --git a/modular_splurt/icons/mob/mam_markings.dmi b/modular_splurt/icons/mob/mam_markings.dmi index 0ce5f4c4257a152b27380a7897cd2385b76004d3..d2b389c66e4c52c91788018d9041bde4dbc36beb 100644 GIT binary patch delta 12752 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 Q0$~Vs-G>aN4{Rg;56X}aJpcdz diff --git a/modular_splurt/icons/mob/mam_snouts.dmi b/modular_splurt/icons/mob/mam_snouts.dmi index 3b4850f4cab827202f5c84c0818928186ffe1e05..27bab79b2d2b98c1d5e7734765d2246ce13153e3 100644 GIT binary patch delta 8241 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 delta 7594 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 CRCUz= diff --git a/modular_splurt/icons/mob/mam_taur.dmi b/modular_splurt/icons/mob/mam_taur.dmi index ba18519f8dbc3eaf06493ada8f7ffe4d4186cdb8..009148695d4979951ac5e959b71da3a8645dccb6 100644 GIT binary patch delta 9985 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 literal 9425 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 Aq5uE@ diff --git a/modular_splurt/icons/obj/storage.dmi b/modular_splurt/icons/obj/storage.dmi index 35d61848a9e8a141eb4b21ed15ea1c8089bc29c4..69e728cc2251494771350ba053be784493a8eeb5 100644 GIT binary patch literal 3685 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 literal 550 zcmV+>0@?kEP) zSy_&UhkA5$t)!$(NJwyMYOkZCx3{<1+1dYQ|Nj90%mA7H00930nKLjjz`(#+Sy_;f zka~K0JUl#SXJ;)Jwd?=@00DGTPE!Ct=GbNc004`6R9JLGWpiV4X>fFDZ*Bkpc$`yK zaB_9`^iy#0_2eo`Eh^5;&r`5fFwryM;w;ZhDainGjE%TBGg33tGfE(w;*!LYR3K9+ zDZfIAi!&v&s2IpIe7eb>^5)T0Nr*px{Z)gG&8~_BD1Arh_K7`bDmZI-%{;o@aAf>%~ zN|<06t}DZU3F50>4G|Mu-+UL`!e~?o#=9|16Byz4c>J88a*4AZ??as3f-oQO*EbrC zKR^|=i+x;Y;J_p`{dE9XplE;H0Vc58oU``FCy*ebKM7#4$+!L@=n`a2q5Xj~knUe3 zGqX*=P=*}xVpk+06|l=d`f-U@u=cn7AAv7}PN4CZ9TPa$sQH;g8Nnx@EVjCR0P;UZ ou@oi#Gurd3DBl!skn#r36Wj|IRjs8>5dZ)H07*qoM6N<$g7qWus{jB1 From 186a9749eaeb54ddd05d76759a4a70e2e0cf6f47 Mon Sep 17 00:00:00 2001 From: SPLURT Bot <97993072+SPLURT-Station-Bot@users.noreply.github.com> Date: Tue, 10 Jan 2023 08:49:59 +0000 Subject: [PATCH 023/129] Automatic changelog generation for PR #674 [ci skip] --- html/changelogs/AutoChangeLog-pr-674.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-674.yml diff --git a/html/changelogs/AutoChangeLog-pr-674.yml b/html/changelogs/AutoChangeLog-pr-674.yml new file mode 100644 index 0000000000..46cad05d2a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-674.yml @@ -0,0 +1,6 @@ +author: BongaTheProto +delete-after: true +changes: + - rscadd: New sloog sprites for character creation and backpack + - rscadd: New type of eyes, none + - bugfix: Fixes misclassing of sec badge From fce830dbe34d92f6f1ea1270c8758bcda5bf722c Mon Sep 17 00:00:00 2001 From: Changelogs Date: Tue, 10 Jan 2023 08:52:02 +0000 Subject: [PATCH 024/129] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-674.yml | 6 ------ html/changelogs/archive/2023-01.yml | 5 +++++ 2 files changed, 5 insertions(+), 6 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-674.yml diff --git a/html/changelogs/AutoChangeLog-pr-674.yml b/html/changelogs/AutoChangeLog-pr-674.yml deleted file mode 100644 index 46cad05d2a..0000000000 --- a/html/changelogs/AutoChangeLog-pr-674.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: BongaTheProto -delete-after: true -changes: - - rscadd: New sloog sprites for character creation and backpack - - rscadd: New type of eyes, none - - bugfix: Fixes misclassing of sec badge diff --git a/html/changelogs/archive/2023-01.yml b/html/changelogs/archive/2023-01.yml index 91878e8afa..30464a1e4c 100644 --- a/html/changelogs/archive/2023-01.yml +++ b/html/changelogs/archive/2023-01.yml @@ -30,3 +30,8 @@ SandPoot: - rscadd: Added a fancy reskin for the mining hardsuit, modify it using Alt-Click! - imageadd: Special sprites made by Dexxiol#3462! +2023-01-10: + BongaTheProto: + - rscadd: New sloog sprites for character creation and backpack + - rscadd: New type of eyes, none + - bugfix: Fixes misclassing of sec badge From 7fdaa586898d9b5e83e8b1bb403cf30ffe909c72 Mon Sep 17 00:00:00 2001 From: Darius <5933805+LeDrascol@users.noreply.github.com> Date: Tue, 10 Jan 2023 11:23:38 +0000 Subject: [PATCH 025/129] Fix latejoin panel slot displays (#281) Fixes a redundant display of job slots on the latejoin panel, caused by non-modular edits. --- code/modules/mob/dead/new_player/new_player.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index f777540307..90d1c027cb 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -594,7 +594,7 @@ if(job in GLOB.command_positions) command_bold = " command" //Sandstorm changes - var/jobline = "[job_datum.title] ([job_datum.current_positions])" + var/jobline = "[job_datum.title]" if(job_datum in SSjob.prioritized_jobs) jobline = "[jobline]" if(client && client.prefs && client.prefs.alt_titles_preferences[job_datum.title]) From 334759ea7afa7fd92b889b286b0d1797ced9485e Mon Sep 17 00:00:00 2001 From: Sandstorm Bot <85452301+Sandstorm-Bot@users.noreply.github.com> Date: Tue, 10 Jan 2023 11:24:32 +0000 Subject: [PATCH 026/129] Automatic changelog generation for PR #281 [ci skip] --- html/changelogs/AutoChangeLog-pr-281.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-281.yml diff --git a/html/changelogs/AutoChangeLog-pr-281.yml b/html/changelogs/AutoChangeLog-pr-281.yml new file mode 100644 index 0000000000..3badc16d99 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-281.yml @@ -0,0 +1,4 @@ +author: LeDrascol +delete-after: true +changes: + - bugfix: Fixed the late-join panel showing job slots twice From acd0187f68dda4c7f9b3f0bf04c28fcc35f7f6aa Mon Sep 17 00:00:00 2001 From: Sandstorm Bot <85452301+Sandstorm-Bot@users.noreply.github.com> Date: Tue, 10 Jan 2023 13:00:18 +0000 Subject: [PATCH 027/129] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-281.yml | 4 ---- html/changelogs/archive/2023-01.yml | 3 +++ 2 files changed, 3 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-281.yml diff --git a/html/changelogs/AutoChangeLog-pr-281.yml b/html/changelogs/AutoChangeLog-pr-281.yml deleted file mode 100644 index 3badc16d99..0000000000 --- a/html/changelogs/AutoChangeLog-pr-281.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: LeDrascol -delete-after: true -changes: - - bugfix: Fixed the late-join panel showing job slots twice diff --git a/html/changelogs/archive/2023-01.yml b/html/changelogs/archive/2023-01.yml index 83e3be9ec6..fd8c477ecc 100644 --- a/html/changelogs/archive/2023-01.yml +++ b/html/changelogs/archive/2023-01.yml @@ -8,3 +8,6 @@ SandPoot: - rscadd: Added a fancy reskin for the mining hardsuit, modify it using Alt-Click! - imageadd: Special sprites made by Dexxiol#3462! +2023-01-10: + LeDrascol: + - bugfix: Fixed the late-join panel showing job slots twice From 96bd348f1b2d725dbd4ef252078f7a7902488795 Mon Sep 17 00:00:00 2001 From: Darius <5933805+LeDrascol@users.noreply.github.com> Date: Tue, 10 Jan 2023 13:15:30 -0500 Subject: [PATCH 028/129] Update LPD drink effects - Ignores held items - Only plays rip noise once - Displays a different chat message for the target user - Items are thrown, instead of dropped - Moves functional code from alcohol_reagents to a mob proc - - This change is made so other items can use the effect --- .../code/modules/mob/living/carbon/carbon.dm | 37 +++++++++++++++++++ .../chemistry/reagents/alcohol_reagents.dm | 17 +++------ 2 files changed, 43 insertions(+), 11 deletions(-) diff --git a/modular_splurt/code/modules/mob/living/carbon/carbon.dm b/modular_splurt/code/modules/mob/living/carbon/carbon.dm index d2a7d7a875..a81da1e44b 100644 --- a/modular_splurt/code/modules/mob/living/carbon/carbon.dm +++ b/modular_splurt/code/modules/mob/living/carbon/carbon.dm @@ -22,3 +22,40 @@ new_rope.forceMove(src.loc) return . = ..() + +// Liquid Panty Dropper effect +/mob/living/carbon/proc/clothing_burst(mob/living/carbon/target_user) + // Variable for if the action succeeded + var/user_disrobed = FALSE + + // Get worn items + var/items = target_user.get_contents() + + // Iterate over worn items + for(var/obj/item/item_worn in items) + // Ignore non-mob (storage) + if(!ismob(item_worn.loc)) + continue + + // Ignore held items + if(target_user.is_holding(item_worn)) + continue + + // Check for anything covering a body part + if(item_worn.body_parts_covered) + // Set the success variable + user_disrobed = TRUE + + // Drop the target item + target_user.dropItemToGround(item_worn, TRUE) + + // Throw item to a random spot + item_worn.throw_at(pick(oview(7,get_turf(src))),10,1) + + // When successfully disrobing a target + if(user_disrobed) + // Display a chat message + target_user.visible_message("[target_user] suddenly bursts out of [target_user.p_their()] clothes!", "You suddenly burst out of your clothes!") + + // Play the ripped poster sound + playsound(target_user.loc, 'sound/items/poster_ripped.ogg', 50, 1) diff --git a/modular_splurt/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/modular_splurt/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm index 024b95a7d1..ca488e2741 100644 --- a/modular_splurt/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm +++ b/modular_splurt/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm @@ -11,18 +11,13 @@ glass_desc = "You feel it's not named like that for no reason." value = 6 +// Liquid Panty Dropper drink effect /datum/reagent/consumable/ethanol/panty_dropper/on_mob_life(mob/living/carbon/C) - var/mob/living/carbon/human/M = C - var/anyclothes = FALSE - var/items = M.get_contents() - for(var/obj/item/W in items) - if(W.body_parts_covered && ismob(W.loc)) - anyclothes = TRUE - M.dropItemToGround(W, TRUE) - playsound(M.loc, 'sound/items/poster_ripped.ogg', 50, 1) - if(anyclothes) - M.visible_message("[M] suddenly bursts out of [M.p_their()] clothes!") - return ..() + // Praise the funny BYOND dots + . = ..() + + // Perform drink effect + C.clothing_burst(C) /datum/reagent/consumable/ethanol/lean name = "Lean" From c8acb8c218e03df3a9204f3c4936c0ffda846afb Mon Sep 17 00:00:00 2001 From: Darius <5933805+LeDrascol@users.noreply.github.com> Date: Tue, 10 Jan 2023 14:28:51 -0500 Subject: [PATCH 029/129] Adds a Plushmium Crate to cargo Adds the new Plushmium Crate, which contains a bottle of Plushmium and a plushie choice box. Also adds an item for the Plushmium Bottle, so it can be in the crate. --- modular_splurt/code/modules/cargo/packs/misc.dm | 9 +++++++++ .../code/modules/reagents/reagent_containers/bottle.dm | 6 ++++++ 2 files changed, 15 insertions(+) diff --git a/modular_splurt/code/modules/cargo/packs/misc.dm b/modular_splurt/code/modules/cargo/packs/misc.dm index 3211d7e085..f80de923b2 100644 --- a/modular_splurt/code/modules/cargo/packs/misc.dm +++ b/modular_splurt/code/modules/cargo/packs/misc.dm @@ -215,6 +215,15 @@ cost = 100000 contains = list(/obj/item/reagent_containers/food/drinks/diminicillin) +/datum/supply_pack/misc/plushmium + name = "Plushmium Crate" + desc = "Contains a small sample of an experimental chemical known as Plushmium, and a plushie to use it on." + cost = 5000 // Cost of an expensive animal + contains = list( + /obj/item/reagent_containers/glass/bottle/plushmium, + /obj/item/choice_beacon/box/plushie + ) + /datum/supply_pack/misc/microbricks name = "Microbricks Crate" desc = "Extremely bored? Recreate a downscale city and get upset when it all comes crumbling down!" diff --git a/modular_splurt/code/modules/reagents/reagent_containers/bottle.dm b/modular_splurt/code/modules/reagents/reagent_containers/bottle.dm index 957cdb52e0..bf363ef31a 100644 --- a/modular_splurt/code/modules/reagents/reagent_containers/bottle.dm +++ b/modular_splurt/code/modules/reagents/reagent_containers/bottle.dm @@ -3,3 +3,9 @@ desc = "A small bottle of Mute Toxin. It stops the user from speaking." icon_state = "bottle20" list_reagents = list(/datum/reagent/toxin/mutetoxin = 30) + +/obj/item/reagent_containers/glass/bottle/plushmium + name = "\improper Plushmium Bottle" + desc = "A small bottle of Plushmium. Seems almost fluffy, if not for it being a liquid." + icon_state = "bottle20" + list_reagents = list(/datum/reagent/fermi/plushmium = 30) From 1196e59f9bdb5ebb08ce47b04641148a3d5e1194 Mon Sep 17 00:00:00 2001 From: SPLURT Bot <97993072+SPLURT-Station-Bot@users.noreply.github.com> Date: Tue, 10 Jan 2023 20:32:45 +0000 Subject: [PATCH 030/129] Automatic changelog generation for PR #675 [ci skip] --- html/changelogs/AutoChangeLog-pr-675.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-675.yml diff --git a/html/changelogs/AutoChangeLog-pr-675.yml b/html/changelogs/AutoChangeLog-pr-675.yml new file mode 100644 index 0000000000..cd02500cb4 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-675.yml @@ -0,0 +1,6 @@ +author: LeDrascol +delete-after: true +changes: + - tweak: Liquid Panty Dropper now launches clothing + - tweak: Liquid Panty Dropper no longer interferes with held items + - code_imp: LPD's clothing burst is now a mob proc From 206f602eddb3935dc175d90888550c2c5ff88f75 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Tue, 10 Jan 2023 20:34:44 +0000 Subject: [PATCH 031/129] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-675.yml | 6 ------ html/changelogs/archive/2023-01.yml | 4 ++++ 2 files changed, 4 insertions(+), 6 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-675.yml diff --git a/html/changelogs/AutoChangeLog-pr-675.yml b/html/changelogs/AutoChangeLog-pr-675.yml deleted file mode 100644 index cd02500cb4..0000000000 --- a/html/changelogs/AutoChangeLog-pr-675.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: LeDrascol -delete-after: true -changes: - - tweak: Liquid Panty Dropper now launches clothing - - tweak: Liquid Panty Dropper no longer interferes with held items - - code_imp: LPD's clothing burst is now a mob proc diff --git a/html/changelogs/archive/2023-01.yml b/html/changelogs/archive/2023-01.yml index 30464a1e4c..7f2d9fb7cd 100644 --- a/html/changelogs/archive/2023-01.yml +++ b/html/changelogs/archive/2023-01.yml @@ -35,3 +35,7 @@ - rscadd: New sloog sprites for character creation and backpack - rscadd: New type of eyes, none - bugfix: Fixes misclassing of sec badge + LeDrascol: + - tweak: Liquid Panty Dropper now launches clothing + - tweak: Liquid Panty Dropper no longer interferes with held items + - code_imp: LPD's clothing burst is now a mob proc From 6bbd44afe7be4a917de32b80ce906c66cd10b2c8 Mon Sep 17 00:00:00 2001 From: SandPoot Date: Tue, 10 Jan 2023 18:08:17 -0300 Subject: [PATCH 032/129] element time --- code/datums/elements/object_reskinning.dm | 68 +++++++++++++++++++++++ code/game/objects/objs.dm | 57 +++---------------- tgstation.dme | 1 + 3 files changed, 76 insertions(+), 50 deletions(-) create mode 100644 code/datums/elements/object_reskinning.dm diff --git a/code/datums/elements/object_reskinning.dm b/code/datums/elements/object_reskinning.dm new file mode 100644 index 0000000000..eeb2a0601b --- /dev/null +++ b/code/datums/elements/object_reskinning.dm @@ -0,0 +1,68 @@ +/datum/element/object_reskinning + element_flags = ELEMENT_DETACH + +/datum/element/object_reskinning/Attach(datum/target) + . = ..() + var/obj/the_obj = target + if(!istype(the_obj)) + return ELEMENT_INCOMPATIBLE + if(!islist(the_obj.unique_reskin) || !length(the_obj.unique_reskin)) + message_admins("[src] was given to an object without any unique reskins, if you really need to, give it a couple skins first.") + return ELEMENT_INCOMPATIBLE + + RegisterSignal(the_obj, COMSIG_PARENT_EXAMINE, .proc/on_examine) + RegisterSignal(the_obj, COMSIG_CLICK_ALT, .proc/reskin) + +/datum/element/object_reskinning/Detach(datum/source, force) + UnregisterSignal(source, list(COMSIG_PARENT_EXAMINE, COMSIG_CLICK_ALT)) + return ..() + +/datum/element/object_reskinning/proc/on_examine(obj/obj, mob/user, list/examine_list) + examine_list += span_notice("Alt-click to reskin it ([length(obj.unique_reskin)] possible styles).") + if(obj.always_reskinnable) + examine_list += span_notice("It has no limit to reskinning.") + +/// Reskins an object according to user's choice, modified to be overridable and supports different icons +/datum/element/object_reskinning/proc/reskin(obj/to_reskin, mob/user) + // Just stop early + if(!(LAZYLEN(to_reskin.unique_reskin) && user.canUseTopic(to_reskin, BE_CLOSE, NO_DEXTERY))) + message_admins("[ADMIN_LOOKUPFLW(user)] attempted to reskin an object that has no skins!") + Detach(to_reskin) + return FALSE + + var/list/items = list() + for(var/reskin_option in to_reskin.unique_reskin) + var/image/item_image = image( + icon = to_reskin.unique_reskin[reskin_option]["icon"] ? to_reskin.unique_reskin[reskin_option]["icon"] : to_reskin.icon, + icon_state = to_reskin.unique_reskin[reskin_option]["icon_state"] ? to_reskin.unique_reskin[reskin_option]["icon_state"] : to_reskin.icon_state) + items += list("[reskin_option]" = item_image) + sortList(items) + + var/pick = show_radial_menu(user, to_reskin, items, custom_check = CALLBACK(src, .proc/check_reskin_menu, user, to_reskin), radius = 38, require_near = TRUE) + if(!pick) + return FALSE + to_reskin.current_skin = pick + for(var/reskin_var in to_reskin.unique_reskin[pick]) + to_reskin.vars[reskin_var] = to_reskin.unique_reskin[pick][reskin_var] + to_chat(user, "[to_reskin] is now skinned as '[pick].'") + to_reskin.reskin_obj(user) + if(!to_reskin.always_reskinnable) + Detach(to_reskin) + return TRUE + +/** + * Checks if we are allowed to interact with a radial menu for reskins + * + * Arguments: + * * user The mob interacting with the menu + */ +/datum/element/object_reskinning/proc/check_reskin_menu(mob/user, obj/obj) + if(QDELETED(obj)) + return FALSE + if(obj.current_skin) + return FALSE + if(!istype(user)) + return FALSE + if(user.incapacitated()) + return FALSE + return TRUE diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 59fe688b69..3575699c55 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -76,6 +76,10 @@ var/turf/T = loc T.add_blueprints_preround(src) +/obj/ComponentInitialize() + . = ..() + if(islist(unique_reskin) && length(unique_reskin)) + AddElement(/datum/element/object_reskinning) /obj/Destroy(force=FALSE) if(!ismachinery(src)) @@ -340,57 +344,10 @@ . = ..() if(obj_flags & UNIQUE_RENAME) . += "Use a pen on it to rename it or change its description." - if(unique_reskin && (!current_skin || always_reskinnable)) - . += "Alt-click it to reskin it." -/obj/AltClick(mob/user) - . = ..() - if(unique_reskin && (!current_skin || always_reskinnable) && user.canUseTopic(src, BE_CLOSE, NO_DEXTERY)) - reskin_obj(user) - return TRUE - -/// Reskins an object according to M's choice, modified to be overridable and supports different icons -/obj/proc/reskin_obj(mob/M) - if(!LAZYLEN(unique_reskin)) - return FALSE - - var/list/items = list() - for(var/reskin_option in unique_reskin) - var/image/item_image = image( - icon = unique_reskin[reskin_option]["icon"] ? unique_reskin[reskin_option]["icon"] : icon, - icon_state = unique_reskin[reskin_option]["icon_state"]) - items += list("[reskin_option]" = item_image) - sortList(items) - - var/pick = show_radial_menu(M, src, items, custom_check = CALLBACK(src, .proc/check_reskin_menu, M), radius = 38, require_near = TRUE) - if(!pick) - return FALSE - if(!unique_reskin[pick]["icon_state"]) - return FALSE - current_skin = pick - var/has_icon = unique_reskin[pick]["icon"] - if(has_icon) - icon = has_icon - icon_state = unique_reskin[pick]["icon_state"] - to_chat(M, "[src] is now skinned as '[pick].'") - return TRUE - -/** - * Checks if we are allowed to interact with a radial menu for reskins - * - * Arguments: - * * user The mob interacting with the menu - */ -/obj/proc/check_reskin_menu(mob/user) - if(QDELETED(src)) - return FALSE - if(current_skin) - return FALSE - if(!istype(user)) - return FALSE - if(user.incapacitated()) - return FALSE - return TRUE +/// Do you want to make overrides, of course you do! Will be called if an object was reskinned successfully +/obj/proc/reskin_obj(mob/user) + return /obj/update_overlays() . = ..() diff --git a/tgstation.dme b/tgstation.dme index 43bab0253b..8891cf3e14 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -702,6 +702,7 @@ #include "code\datums\elements\forced_gravity.dm" #include "code\datums\elements\ghost_role_eligibility.dm" #include "code\datums\elements\mob_holder.dm" +#include "code\datums\elements\object_reskinning.dm" #include "code\datums\elements\photosynthesis.dm" #include "code\datums\elements\polychromic.dm" #include "code\datums\elements\scavenging.dm" From cf51a4dce9d750d9cb6013bf50210205a90d73ab Mon Sep 17 00:00:00 2001 From: SandPoot Date: Tue, 10 Jan 2023 18:32:49 -0300 Subject: [PATCH 033/129] dusting off --- code/datums/elements/object_reskinning.dm | 33 ++++++++++++++++++- code/game/objects/items/devices/PDA/PDA.dm | 5 +++ code/game/objects/items/melee/energy.dm | 2 -- code/modules/clothing/gloves/miscellaneous.dm | 2 -- code/modules/clothing/under/accessories.dm | 2 -- code/modules/paperwork/pen.dm | 2 -- 6 files changed, 37 insertions(+), 9 deletions(-) diff --git a/code/datums/elements/object_reskinning.dm b/code/datums/elements/object_reskinning.dm index eeb2a0601b..d6920e9665 100644 --- a/code/datums/elements/object_reskinning.dm +++ b/code/datums/elements/object_reskinning.dm @@ -1,3 +1,20 @@ +/* + * # Element: Object Reskinning + * + * Allows players to modify the appearance of their object (and other attributes if possible) + * PLEASE DO NOT HAVE INVALID VALUES IN unique_reskin I DON'T EVEN WANT TO KNOW WHAT HAPPENS. + * USAGE: + * unique_reskins = list( + * "skin 1" = list( + * "desc" = "very cool description", + * "icon" = 'very_cool_icon.dmi' + * ), + * "skin 2" = list( + * "desc" = "not as cool description", + * "icon" = 'the_boring_skin.dmi' + * ) + * ) +*/ /datum/element/object_reskinning element_flags = ELEMENT_DETACH @@ -22,7 +39,14 @@ if(obj.always_reskinnable) examine_list += span_notice("It has no limit to reskinning.") -/// Reskins an object according to user's choice, modified to be overridable and supports different icons +/* + * Reskins an object according to user's choice. + * Will detach itself if there's no skins or if done successfully but not always reskinnable. + * + * Arguments: + * * to_reskin The object we will be reskinning + * * user The user who wants to choose a skin for the object +*/ /datum/element/object_reskinning/proc/reskin(obj/to_reskin, mob/user) // Just stop early if(!(LAZYLEN(to_reskin.unique_reskin) && user.canUseTopic(to_reskin, BE_CLOSE, NO_DEXTERY))) @@ -30,6 +54,7 @@ Detach(to_reskin) return FALSE + // Get our choices var/list/items = list() for(var/reskin_option in to_reskin.unique_reskin) var/image/item_image = image( @@ -38,14 +63,19 @@ items += list("[reskin_option]" = item_image) sortList(items) + // Display to the user var/pick = show_radial_menu(user, to_reskin, items, custom_check = CALLBACK(src, .proc/check_reskin_menu, user, to_reskin), radius = 38, require_near = TRUE) if(!pick) return FALSE + + // Finish the work to_reskin.current_skin = pick for(var/reskin_var in to_reskin.unique_reskin[pick]) to_reskin.vars[reskin_var] = to_reskin.unique_reskin[pick][reskin_var] to_chat(user, "[to_reskin] is now skinned as '[pick].'") to_reskin.reskin_obj(user) + + // Only once or always? if(!to_reskin.always_reskinnable) Detach(to_reskin) return TRUE @@ -55,6 +85,7 @@ * * Arguments: * * user The mob interacting with the menu + * * obj The obj to be checking against */ /datum/element/object_reskinning/proc/check_reskin_menu(mob/user, obj/obj) if(QDELETED(obj)) diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 5ff7bbc714..0604508997 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -130,6 +130,11 @@ GLOBAL_LIST_EMPTY(PDAs) new_overlays = TRUE update_icon() +/// This is a mess i probably shouldn't touch. +/obj/item/pda/ComponentInitialize() + . = ..() + RemoveElement(/datum/element/object_reskinning) + /obj/item/pda/CtrlShiftClick(mob/living/user) . = ..() if(GLOB.pda_reskins && user.canUseTopic(src, BE_CLOSE, NO_DEXTERY)) diff --git a/code/game/objects/items/melee/energy.dm b/code/game/objects/items/melee/energy.dm index ca2fdbaeff..b389efe542 100644 --- a/code/game/objects/items/melee/energy.dm +++ b/code/game/objects/items/melee/energy.dm @@ -211,8 +211,6 @@ /obj/item/melee/transforming/energy/sword/saber/reskin_obj(mob/M) . = ..() - if(!.) - return switch(current_skin) if("Sword") icon_state = "sword[active ? sword_color : "0"]" diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index 66cc5484e4..efa00ef888 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -86,8 +86,6 @@ /obj/item/clothing/gloves/fingerless/pugilist/crafted/reskin_obj(mob/M) . = ..() - if(!.) - return switch(current_skin) if("Short") item_state = "armwraps" diff --git a/code/modules/clothing/under/accessories.dm b/code/modules/clothing/under/accessories.dm index adacf45218..f481d83009 100644 --- a/code/modules/clothing/under/accessories.dm +++ b/code/modules/clothing/under/accessories.dm @@ -576,6 +576,4 @@ /obj/item/clothing/accessory/pride/reskin_obj(mob/M) . = ..() - if(!.) - return name = "[current_skin] pin" diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index 234c67fd37..b65c14fa26 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -120,8 +120,6 @@ /obj/item/pen/fountain/captain/reskin_obj(mob/M) . = ..() - if(!.) - return desc = "It's an expensive [current_skin] fountain pen. The nib is quite sharp." /obj/item/pen/attack_self(mob/living/carbon/user) From a1a35ad4ef8260b9da83a72aeba47e43842bcbde Mon Sep 17 00:00:00 2001 From: Darius <5933805+LeDrascol@users.noreply.github.com> Date: Tue, 10 Jan 2023 17:59:13 -0500 Subject: [PATCH 034/129] Convert disrobe implant to use LPD Updates the Rapid Disrobe implant to use the LPD clothing burst effect, and slightly updates the flavor text. --- .../objects/items/implants/implant_disrobe.dm | 47 +++---------------- 1 file changed, 7 insertions(+), 40 deletions(-) diff --git a/modular_splurt/code/game/objects/items/implants/implant_disrobe.dm b/modular_splurt/code/game/objects/items/implants/implant_disrobe.dm index b329a856d0..e8656ab155 100644 --- a/modular_splurt/code/game/objects/items/implants/implant_disrobe.dm +++ b/modular_splurt/code/game/objects/items/implants/implant_disrobe.dm @@ -15,8 +15,8 @@ Important Notes: Nanotransen requires employees to follow workplace safety standards, including protective clothing.

Implant Details:
- Function: Allows the user to launch covering clothing items from the body.
- Special Features: Allows the express removal of embarrassing maid outfits.
+ Function: Lines the subject's epidermis with high power static charge nodes, allowing the rapid removal of worn clothing.
+ Special Features: Will not cause drunkenness in most subjects.
Integrity: Implant will last so long as it is inside the host. "} @@ -33,44 +33,11 @@ /obj/item/implant/disrobe/activate() . = ..() - // Get worn items - var/items = imp_in.get_contents() + // Define target + var/mob/living/carbon/target_user = imp_in - // Did the action succeed? - var/user_disrobed = FALSE - - // Iterate over worn items - for(var/obj/item/item_worn in items) - // Ignore non-mob (storage) - if(!ismob(item_worn.loc)) - continue - - // Ignore held items - if(imp_in.is_holding(item_worn)) - continue - - // Check for anything covering CHEST or GROIN - // These are the regions used by the nudist quirk - if((item_worn.body_parts_covered & CHEST) || (item_worn.body_parts_covered & GROIN)) - // Drop the target item - imp_in.dropItemToGround(item_worn, TRUE) - - // Throw item to a random spot - item_worn.throw_at(pick(oview(7,get_turf(src))),10,1) - - // Play the poster rip sound - playsound(imp_in.loc, 'sound/items/poster_ripped.ogg', 50, 1) - - // Set the activation variable - user_disrobed = TRUE - - // Display a chat message on success - if(user_disrobed) - imp_in.visible_message(span_notice("[imp_in] bursts out of [imp_in.p_their()] clothes!"), span_notice("You burst out of your clothes!")) - - // Alert the user on failure - else - to_chat(imp_in, span_notice("You have nothing to disrobe!")) + // Perform LPD effect + target_user.clothing_burst(target_user) /* * Action datums @@ -79,7 +46,7 @@ // Action for rapid wardrobe removal /datum/action/item_action/disrobe name = "Rapid Disrobe" - desc = "Eject all torso-covering clothing from your body." + desc = "Instantly eject all covering clothing from your body." icon_icon = 'modular_splurt/icons/mob/actions/misc_actions.dmi' button_icon_state = "no_uniform" background_icon_state = "bg_tech" From 3b8d102face9af0fabb224bbb33ad0811a4148c7 Mon Sep 17 00:00:00 2001 From: SandPoot Date: Tue, 10 Jan 2023 20:02:12 -0300 Subject: [PATCH 035/129] puts pda in the system to remove shitcode --- code/__DEFINES/misc.dm | 10 +++++-- code/_onclick/click.dm | 2 +- code/datums/elements/object_reskinning.dm | 15 ++++++---- code/game/objects/items/devices/PDA/PDA.dm | 34 +++++----------------- code/game/objects/objs.dm | 12 ++++++-- 5 files changed, 35 insertions(+), 38 deletions(-) diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 6607b91695..603d01b011 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -272,9 +272,13 @@ GLOBAL_LIST_INIT(pda_styles, list(MONO, VT, ORBITRON, SHARE)) #define PDA_SKIN_MODERN "Modern" #define PDA_SKIN_MINIMAL "Minimal" -GLOBAL_LIST_INIT(pda_reskins, list(PDA_SKIN_CLASSIC = 'icons/obj/pda.dmi', PDA_SKIN_ALT = 'icons/obj/pda_alt.dmi', - PDA_SKIN_RUGGED = 'icons/obj/pda_rugged.dmi', PDA_SKIN_MODERN = 'icons/obj/pda_modern.dmi', - PDA_SKIN_MINIMAL = 'icons/obj/pda_minimal.dmi')) +GLOBAL_LIST_INIT(pda_reskins, list( + PDA_SKIN_CLASSIC = list("icon" = 'icons/obj/pda.dmi'), + PDA_SKIN_ALT = list("icon" = 'icons/obj/pda_alt.dmi'), + PDA_SKIN_RUGGED = list("icon" = 'icons/obj/pda_rugged.dmi'), + PDA_SKIN_MODERN = list("icon" = 'icons/obj/pda_modern.dmi'), + PDA_SKIN_MINIMAL = list("icon" = 'icons/obj/pda_minimal.dmi') + )) ///////////////////////////////////// // atom.appearence_flags shortcuts // diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index c9e20bc01a..6e8d1de955 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -405,7 +405,7 @@ return /atom/proc/CtrlShiftClick(mob/user) - SEND_SIGNAL(src, COMSIG_CLICK_CTRL_SHIFT) + SEND_SIGNAL(src, COMSIG_CLICK_CTRL_SHIFT, user) return /* diff --git a/code/datums/elements/object_reskinning.dm b/code/datums/elements/object_reskinning.dm index d6920e9665..8b5d905e72 100644 --- a/code/datums/elements/object_reskinning.dm +++ b/code/datums/elements/object_reskinning.dm @@ -28,14 +28,15 @@ return ELEMENT_INCOMPATIBLE RegisterSignal(the_obj, COMSIG_PARENT_EXAMINE, .proc/on_examine) - RegisterSignal(the_obj, COMSIG_CLICK_ALT, .proc/reskin) + RegisterSignal(the_obj, the_obj.reskin_binding, .proc/reskin) /datum/element/object_reskinning/Detach(datum/source, force) - UnregisterSignal(source, list(COMSIG_PARENT_EXAMINE, COMSIG_CLICK_ALT)) + var/obj/being_deleted = source + UnregisterSignal(source, list(COMSIG_PARENT_EXAMINE, being_deleted.reskin_binding)) return ..() /datum/element/object_reskinning/proc/on_examine(obj/obj, mob/user, list/examine_list) - examine_list += span_notice("Alt-click to reskin it ([length(obj.unique_reskin)] possible styles).") + examine_list += span_notice("[capitalize(replacetext(obj.reskin_binding, "_", "-"))] to reskin it ([length(obj.unique_reskin)] possible styles).") if(obj.always_reskinnable) examine_list += span_notice("It has no limit to reskinning.") @@ -49,11 +50,15 @@ */ /datum/element/object_reskinning/proc/reskin(obj/to_reskin, mob/user) // Just stop early - if(!(LAZYLEN(to_reskin.unique_reskin) && user.canUseTopic(to_reskin, BE_CLOSE, NO_DEXTERY))) + if(!LAZYLEN(to_reskin.unique_reskin)) message_admins("[ADMIN_LOOKUPFLW(user)] attempted to reskin an object that has no skins!") Detach(to_reskin) return FALSE + // Can't use + if(!user.canUseTopic(to_reskin, BE_CLOSE, NO_DEXTERY, NO_TK)) + return FALSE + // Get our choices var/list/items = list() for(var/reskin_option in to_reskin.unique_reskin) @@ -90,7 +95,7 @@ /datum/element/object_reskinning/proc/check_reskin_menu(mob/user, obj/obj) if(QDELETED(obj)) return FALSE - if(obj.current_skin) + if(!obj.always_reskinnable && obj.current_skin) return FALSE if(!istype(user)) return FALSE diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 0604508997..b3eb8ab439 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -32,6 +32,9 @@ GLOBAL_LIST_EMPTY(PDAs) armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 100) resistance_flags = FIRE_PROOF | ACID_PROOF + always_reskinnable = TRUE + reskin_binding = COMSIG_CLICK_CTRL_SHIFT + //Main variables var/owner = null // String name of owner var/default_cartridge = 0 // Access level defined by cartridge @@ -112,10 +115,10 @@ GLOBAL_LIST_EMPTY(PDAs) . += id ? "Alt-click to remove the id." : "" if(inserted_item && (!isturf(loc))) . += "Ctrl-click to remove [inserted_item]." - if(LAZYLEN(GLOB.pda_reskins)) - . += "Ctrl-shift-click it to reskin it." /obj/item/pda/Initialize(mapload) + if(GLOB.pda_reskins) + unique_reskin = GLOB.pda_reskins . = ..() if(fon) set_light(f_lum, f_pow, f_col) @@ -130,33 +133,10 @@ GLOBAL_LIST_EMPTY(PDAs) new_overlays = TRUE update_icon() -/// This is a mess i probably shouldn't touch. -/obj/item/pda/ComponentInitialize() - . = ..() - RemoveElement(/datum/element/object_reskinning) - -/obj/item/pda/CtrlShiftClick(mob/living/user) - . = ..() - if(GLOB.pda_reskins && user.canUseTopic(src, BE_CLOSE, NO_DEXTERY)) - reskin_obj(user) - /obj/item/pda/reskin_obj(mob/M) - if(!LAZYLEN(GLOB.pda_reskins)) - return - var/dat = "Reskin options for [name]:" - for(var/V in GLOB.pda_reskins) - var/output = icon2html(GLOB.pda_reskins[V], M, icon_state) - dat += "\n[V]: [output]" - to_chat(M, dat) - - var/choice = input(M, "Choose the a reskin for [src]","Reskin Object") as null|anything in GLOB.pda_reskins - var/new_icon = GLOB.pda_reskins[choice] - if(QDELETED(src) || isnull(new_icon) || new_icon == icon || !M.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) - return - icon = new_icon + . = ..() new_overlays = TRUE update_icon() - to_chat(M, "[src] is now skinned as '[choice]'.") /obj/item/pda/proc/set_new_overlays() if(!overlays_offsets || !(icon in overlays_offsets)) @@ -196,7 +176,7 @@ GLOBAL_LIST_EMPTY(PDAs) else font_index = MODE_MONO font_mode = FONT_MONO - var/pref_skin = GLOB.pda_reskins[C.prefs.pda_skin] + var/pref_skin = GLOB.pda_reskins[C.prefs.pda_skin]["icon"] if(icon != pref_skin) icon = pref_skin new_overlays = TRUE diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 3575699c55..cfe1afad5a 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -28,9 +28,17 @@ var/resistance_flags = NONE // INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ON_FIRE | UNACIDABLE | ACID_PROOF var/persistence_replacement //have something WAY too amazing to live to the next round? Set a new path here. Overuse of this var will make me upset. - var/current_skin //the item reskin - var/list/unique_reskin //List of options to reskin. + + //Reskin variables + /// The item reskin + var/current_skin + /// List of options to reskin. + var/list/unique_reskin + /// Can always be modified var/always_reskinnable = FALSE + /// How to bring up the reskinning menu + var/reskin_binding = COMSIG_CLICK_ALT + // // Access levels, used in modules\jobs\access.dm var/list/req_access From d6ddb68c6f3a02c0cfc87983607ee9f27f89a021 Mon Sep 17 00:00:00 2001 From: Darius <5933805+LeDrascol@users.noreply.github.com> Date: Wed, 11 Jan 2023 13:39:00 -0500 Subject: [PATCH 036/129] Minor updates to High Luminosity Eyes flavor text This commit does the following: - Fixes minor typos - Increases the amount of information presented - Adjusts flavor text to be more specific --- code/datums/traits/good.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/datums/traits/good.dm b/code/datums/traits/good.dm index e2de71d006..7a62b9e8ff 100644 --- a/code/datums/traits/good.dm +++ b/code/datums/traits/good.dm @@ -181,10 +181,10 @@ /datum/quirk/trandening name = "High Luminosity Eyes" - desc = "When the next big fancy implant came out you had to buy one on impluse!" + desc = "When the next big fancy implant came out you had to buy one on impulse! You start the shift with emissive cybernetic eyes that can emit colored beams of light." value = 1 - gain_text = "You have to keep up with the next big thing!." - lose_text = "High-tech gizmos are a scam..." + gain_text = "You've been keeping up with the latest cybernetic trends!" + lose_text = "High powered eye lasers? What were you thinking..." /datum/quirk/trandening/on_spawn() // Get targets From 045eb4a8c9ab1386404cc677937ad02655e29792 Mon Sep 17 00:00:00 2001 From: Darius <5933805+LeDrascol@users.noreply.github.com> Date: Wed, 11 Jan 2023 13:41:21 -0500 Subject: [PATCH 037/129] Add quirk removal code for High Luminosity Eyes Restores the character's default eyes when removing the High Luminosity Eyes quirk. Ensures that the character has eyes, and that those eyes are luminescent. --- code/datums/traits/good.dm | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/code/datums/traits/good.dm b/code/datums/traits/good.dm index 7a62b9e8ff..5b00d2e71e 100644 --- a/code/datums/traits/good.dm +++ b/code/datums/traits/good.dm @@ -195,6 +195,34 @@ qdel(old_eyes) new_eyes.Insert(quirk_holder) +/datum/quirk/trandening/remove() + // Get targets + var/obj/item/organ/eyes/old_eyes = quirk_holder.getorganslot(ORGAN_SLOT_EYES) + var/mob/living/carbon/human/qurk_mob = quirk_holder + + // Check for eyes existing + if(!old_eyes) + return + + // Check for quirk eyes + if(!istype(old_eyes, /obj/item/organ/eyes/robotic/glow)) + return + + // Define new eyes + var/species_eyes = /obj/item/organ/eyes + + // Check for mutant eyes + if(qurk_mob.dna.species && qurk_mob.dna.species.mutanteyes) + // Set eyes to mutant type + species_eyes = qurk_mob.dna.species.mutanteyes + + // Create new eyes item + var/obj/item/organ/eyes/new_eyes = new species_eyes() + + // Replace eyes + qdel(old_eyes) + new_eyes.Insert(quirk_holder) + /datum/quirk/bloodpressure name = "Polycythemia vera" desc = "You've a treated form of Polycythemia vera that increases the total blood volume inside of you as well as the rate of replenishment!" From d972b715e256d606d7b3d018bc9fe34952138586 Mon Sep 17 00:00:00 2001 From: BongaTheProto <93835010+BongaTheProto@users.noreply.github.com> Date: Wed, 11 Jan 2023 13:44:42 -0500 Subject: [PATCH 038/129] fixes our reskins btw cit's prs aren't making any changelogs for some reason just fyi --- html/changelogs/bonger.yml | 64 +++++++++++++++++++ .../projectiles/guns/ballistic/pistol.dm | 35 +++++----- .../projectiles/guns/ballistic/revolver.dm | 21 +++--- .../projectiles/guns/ballistic/shotgun.dm | 15 +++-- 4 files changed, 102 insertions(+), 33 deletions(-) create mode 100644 html/changelogs/bonger.yml diff --git a/html/changelogs/bonger.yml b/html/changelogs/bonger.yml new file mode 100644 index 0000000000..d70afa0cc1 --- /dev/null +++ b/html/changelogs/bonger.yml @@ -0,0 +1,64 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# - (fixes bugs) +# wip +# - (work in progress) +# tweak +# - (tweaks something) +# soundadd +# - (adds a sound) +# sounddel +# - (removes a sound) +# rscdel +# - (removes a feature) +# rscadd +# - (adds a feature) +# imageadd +# - (adds an image or sprite) +# imagedel +# - (removes an image or sprite) +# spellcheck +# - (fixes spelling or grammar) +# experiment +# - (experimental change) +# tgs +# - (messing around with tgs) +# balance +# - (balance changes) +# code_imp +# - (misc internal code change) +# refactor +# - (refactors code) +# config +# - (makes a change to the config files) +# admin +# - (makes changes to administrator tools) +# server +# - (miscellaneous changes to server) +# expansion +# - (expands something) +# qol +# - (quality of life) +################################# + +# Your name. +author: "BongaTheProto" + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. +# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. +changes: + - bugfix: "Fixes gun reskins broken by the new reskin system" diff --git a/modular_splurt/code/modules/projectiles/guns/ballistic/pistol.dm b/modular_splurt/code/modules/projectiles/guns/ballistic/pistol.dm index 7f1b75d548..dbfdae1d65 100644 --- a/modular_splurt/code/modules/projectiles/guns/ballistic/pistol.dm +++ b/modular_splurt/code/modules/projectiles/guns/ballistic/pistol.dm @@ -21,16 +21,17 @@ flight_y_offset = 14 obj_flags = UNIQUE_RENAME - unique_reskin = list("Default" = "enforcer_black", - "M2611 Enforcer" = "cde", - "M1911 Enforcer" = "m1911", - "VP78 Enforcer" = "vp78", - "USP Enforcer" = "usp-m" - ) + unique_reskin = list( + "Default" = list("icon_state" = "enforcer_black"), + "M2611 Enforcer" = list("icon_state" = "cde"), + "M1911 Enforcer" = list("icon_state" = "m1911"), + "VP78 Enforcer" = list("icon_state" = "vp78"), + "USP Enforcer" = list("icon_state" = "usp-m") + ) /obj/item/gun/ballistic/automatic/pistol/enforcer/update_icon_state() if(current_skin) - icon_state = "[unique_reskin[current_skin]][chambered ? "" : "-e"]" + icon_state = "[unique_reskin[current_skin]["icon_state"]][chambered ? "" : "-e"]" else icon_state = "[initial(icon_state)][chambered ? "" : "-e"]" @@ -77,13 +78,14 @@ mag_type = /obj/item/ammo_box/magazine/m9 can_suppress = FALSE obj_flags = UNIQUE_RENAME - unique_reskin = list("Default" = "ninemil", - "Maria" = "maria" - ) + unique_reskin = list( + "Default" = list("icon_state" = "ninemil"), + "Maria" = list("icon_state" = "maria") + ) /obj/item/gun/ballistic/automatic/pistol/m9mmpistol/update_icon_state() if(current_skin) - icon_state = "[unique_reskin[current_skin]][chambered ? "" : "-e"]" + icon_state = "[unique_reskin[current_skin]["icon_state"]][chambered ? "" : "-e"]" else icon_state = "[initial(icon_state)][chambered ? "" : "-e"]" @@ -117,10 +119,11 @@ automatic_burst_overlay = FALSE obj_flags = UNIQUE_RENAME - unique_reskin = list("Default" = "deagle", - "Desert Eagle Gold" = "deagleg", - "Desert Eagle Camo" = "deaglecamo" - ) + unique_reskin = list( + "Default" = list("icon_state" = "deagle"), + "Desert Eagle Gold" = list("icon_state" = "deagleg"), + "Desert Eagle Camo" = list("icon_state" = "deaglecamo") + ) /obj/item/gun/ballistic/automatic/pistol/deagle2/update_overlays() . = ..() @@ -129,7 +132,7 @@ /obj/item/gun/ballistic/automatic/pistol/deagle2/update_icon_state() if(current_skin) - icon_state = "[unique_reskin[current_skin]][chambered ? "" : "-e"]" + icon_state = "[unique_reskin[current_skin]["icon_state"]][chambered ? "" : "-e"]" else icon_state = "[initial(icon_state)][chambered ? "" : "-e"]" diff --git a/modular_splurt/code/modules/projectiles/guns/ballistic/revolver.dm b/modular_splurt/code/modules/projectiles/guns/ballistic/revolver.dm index 26f5fa16fa..72e43741f7 100644 --- a/modular_splurt/code/modules/projectiles/guns/ballistic/revolver.dm +++ b/modular_splurt/code/modules/projectiles/guns/ballistic/revolver.dm @@ -6,12 +6,12 @@ /obj/item/gun/ballistic/revolver/detective/Initialize() var/list/extra_reskin = list( - "Fitz Special" = "detective_fitz", - "Police Positive Special" = "detective_police", - "Blued Steel" = "detective_blued", - "Stainless Steel" = "detective_stainless", - "Deckard Revolver" = "detective_bladerunner" - ) + "Fitz Special" = list("icon_state" = "detective_fitz"), + "Police Positive Special" = list("icon_state" = "detective_police"), + "Blued Steel" = list("icon_state" = "detective_blued"), + "Stainless Steel" = list("icon_state" = "detective_stainless"), + "Deckard Revolver" = list("icon_state" = "detective_bladerunner") + ) LAZYADD(unique_reskin, extra_reskin) . = ..() @@ -30,10 +30,11 @@ mag_type = /obj/item/ammo_box/magazine/internal/cylinder/rev45l obj_flags = UNIQUE_RENAME - unique_reskin = list("Default" = "45revolver", - "Cowboy" = "357colt", - "Lucky" = "lucky" //Well do ya? - ) + unique_reskin = list( + "Default" = list("icon_state" = "45revolver"), + "Cowboy" = list("icon_state" = "357colt"), + "Lucky" = list("icon_state" = "lucky") //Well do ya? + ) /obj/item/gunpart/revolver22frame name = ".22 revolver frame" diff --git a/modular_splurt/code/modules/projectiles/guns/ballistic/shotgun.dm b/modular_splurt/code/modules/projectiles/guns/ballistic/shotgun.dm index 7a80a74759..fe51069541 100644 --- a/modular_splurt/code/modules/projectiles/guns/ballistic/shotgun.dm +++ b/modular_splurt/code/modules/projectiles/guns/ballistic/shotgun.dm @@ -24,13 +24,14 @@ slot_flags = ITEM_SLOT_BELT mag_type = /obj/item/ammo_box/magazine/internal/shot/dual obj_flags = UNIQUE_RENAME - unique_reskin = list("Default" = "sawnshotgun", - "Dark Red Finish" = "sawnshotgun-d", - "Ash" = "sawnshotgun-f", - "Faded Grey" = "sawnshotgun-g", - "Maple" = "sawnshotgun-l", - "Rosewood" = "sawnshotgun-p" - ) + unique_reskin = list( + "Default" = list("icon_state" = "sawnshotgun"), + "Dark Red Finish" = list("icon_state" = "sawnshotgun-d"), + "Ash" = list("icon_state" = "sawnshotgun-f"), + "Faded Grey" = list("icon_state" = "sawnshotgun-g"), + "Maple" = list("icon_state" = "sawnshotgun-l"), + "Rosewood" = list("icon_state" = "sawnshotgun-p") + ) // Rifles From 9ec7b90b6ea5cc368be229d18292ea6b544ba7e1 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Wed, 11 Jan 2023 18:47:41 +0000 Subject: [PATCH 039/129] Automatic changelog compile [ci skip] --- html/changelogs/archive/2023-01.yml | 3 ++ html/changelogs/bonger.yml | 64 ----------------------------- 2 files changed, 3 insertions(+), 64 deletions(-) delete mode 100644 html/changelogs/bonger.yml diff --git a/html/changelogs/archive/2023-01.yml b/html/changelogs/archive/2023-01.yml index 0d9c2ad7a7..e13db8a304 100644 --- a/html/changelogs/archive/2023-01.yml +++ b/html/changelogs/archive/2023-01.yml @@ -40,3 +40,6 @@ - tweak: Liquid Panty Dropper no longer interferes with held items - code_imp: LPD's clothing burst is now a mob proc - bugfix: Fixed the late-join panel showing job slots twice +2023-01-11: + BongaTheProto: + - bugfix: Fixes gun reskins broken by the new reskin system diff --git a/html/changelogs/bonger.yml b/html/changelogs/bonger.yml deleted file mode 100644 index d70afa0cc1..0000000000 --- a/html/changelogs/bonger.yml +++ /dev/null @@ -1,64 +0,0 @@ -################################ -# Example Changelog File -# -# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. -# -# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) -# When it is, any changes listed below will disappear. -# -# Valid Prefixes: -# bugfix -# - (fixes bugs) -# wip -# - (work in progress) -# tweak -# - (tweaks something) -# soundadd -# - (adds a sound) -# sounddel -# - (removes a sound) -# rscdel -# - (removes a feature) -# rscadd -# - (adds a feature) -# imageadd -# - (adds an image or sprite) -# imagedel -# - (removes an image or sprite) -# spellcheck -# - (fixes spelling or grammar) -# experiment -# - (experimental change) -# tgs -# - (messing around with tgs) -# balance -# - (balance changes) -# code_imp -# - (misc internal code change) -# refactor -# - (refactors code) -# config -# - (makes a change to the config files) -# admin -# - (makes changes to administrator tools) -# server -# - (miscellaneous changes to server) -# expansion -# - (expands something) -# qol -# - (quality of life) -################################# - -# Your name. -author: "BongaTheProto" - -# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. -delete-after: True - -# Any changes you've made. See valid prefix list above. -# INDENT WITH TWO SPACES. NOT TABS. SPACES. -# SCREW THIS UP AND IT WON'T WORK. -# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. -# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. -changes: - - bugfix: "Fixes gun reskins broken by the new reskin system" From aa1b82f0b1760e36826d2785d1d899dfb7d97387 Mon Sep 17 00:00:00 2001 From: Darius <5933805+LeDrascol@users.noreply.github.com> Date: Wed, 11 Jan 2023 14:23:14 -0500 Subject: [PATCH 040/129] Convert Colorist from quirk to loadout item Removes the Colorist quirk, and adds Hair Dye Spray to the loadout under backpack items. --- code/datums/traits/neutral.dm | 17 +---------------- .../code/modules/client/loadout/backpack.dm | 5 +++++ 2 files changed, 6 insertions(+), 16 deletions(-) diff --git a/code/datums/traits/neutral.dm b/code/datums/traits/neutral.dm index 8f7043c715..eb5293c07d 100644 --- a/code/datums/traits/neutral.dm +++ b/code/datums/traits/neutral.dm @@ -163,22 +163,7 @@ lose_text = "You no longer feel like you should be eating trash." mob_trait = TRAIT_TRASHCAN -/datum/quirk/colorist - name = "Colorist" - desc = "You like carrying around a hair dye spray to quickly apply color patterns to your hair." - value = 0 - medical_record_text = "Patient enjoys dyeing their hair with pretty colors." - -/datum/quirk/colorist/on_spawn() - var/mob/living/carbon/human/H = quirk_holder - var/obj/item/dyespray/spraycan = new(get_turf(quirk_holder)) - H.equip_to_slot(spraycan, ITEM_SLOT_BACKPACK) - H.regenerate_icons() - -/datum/quirk/colorist/post_add() - var/mob/living/carbon/human/H = quirk_holder - SEND_SIGNAL(H.back, COMSIG_TRY_STORAGE_SHOW, H) - to_chat(quirk_holder, "You brought some extra dye with you! It's in your bag if you forgot.") +// Moved Colorist quirk to a loadout item /datum/quirk/salt_sensitive name = "Sodium Sensitivity" diff --git a/modular_citadel/code/modules/client/loadout/backpack.dm b/modular_citadel/code/modules/client/loadout/backpack.dm index 5879426041..a0be000b31 100644 --- a/modular_citadel/code/modules/client/loadout/backpack.dm +++ b/modular_citadel/code/modules/client/loadout/backpack.dm @@ -190,3 +190,8 @@ loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION subcategory = LOADOUT_SUBCATEGORY_BACKPACK_ACCESSORIES cost = 0 + +// Moved here from quirks +/datum/gear/backpack/dyespray + name = "Hair dye spray" + path = /obj/item/dyespray From b711ac3b2f57dc653b8f876320f00e29934c7afd Mon Sep 17 00:00:00 2001 From: SPLURT Bot <97993072+SPLURT-Station-Bot@users.noreply.github.com> Date: Wed, 11 Jan 2023 21:05:29 +0000 Subject: [PATCH 041/129] Automatic changelog generation for PR #664 [ci skip] --- html/changelogs/AutoChangeLog-pr-664.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-664.yml diff --git a/html/changelogs/AutoChangeLog-pr-664.yml b/html/changelogs/AutoChangeLog-pr-664.yml new file mode 100644 index 0000000000..dac7817088 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-664.yml @@ -0,0 +1,5 @@ +author: Seris02 +delete-after: true +changes: + - bugfix: fixed gargoyles having sprites that are odd, along with sanity checks + and making the transition between living and statue seamless From 5a49ad7fafd591b56f460520eb71d58561c3fe00 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Wed, 11 Jan 2023 21:07:06 +0000 Subject: [PATCH 042/129] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-664.yml | 5 ----- html/changelogs/archive/2023-01.yml | 3 +++ 2 files changed, 3 insertions(+), 5 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-664.yml diff --git a/html/changelogs/AutoChangeLog-pr-664.yml b/html/changelogs/AutoChangeLog-pr-664.yml deleted file mode 100644 index dac7817088..0000000000 --- a/html/changelogs/AutoChangeLog-pr-664.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: Seris02 -delete-after: true -changes: - - bugfix: fixed gargoyles having sprites that are odd, along with sanity checks - and making the transition between living and statue seamless diff --git a/html/changelogs/archive/2023-01.yml b/html/changelogs/archive/2023-01.yml index e13db8a304..16d2251946 100644 --- a/html/changelogs/archive/2023-01.yml +++ b/html/changelogs/archive/2023-01.yml @@ -43,3 +43,6 @@ 2023-01-11: BongaTheProto: - bugfix: Fixes gun reskins broken by the new reskin system + Seris02: + - bugfix: fixed gargoyles having sprites that are odd, along with sanity checks + and making the transition between living and statue seamless From e2b476ffa839902f1de9a030b188be999d194a73 Mon Sep 17 00:00:00 2001 From: Hatterhat Date: Wed, 11 Jan 2023 18:33:34 -0600 Subject: [PATCH 043/129] guess i forgot this --- code/modules/clothing/glasses/prescription_kit.dm | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/code/modules/clothing/glasses/prescription_kit.dm b/code/modules/clothing/glasses/prescription_kit.dm index 0ad6419622..8c6d2274bb 100644 --- a/code/modules/clothing/glasses/prescription_kit.dm +++ b/code/modules/clothing/glasses/prescription_kit.dm @@ -2,16 +2,14 @@ /obj/item/prescription_kit name = "prescription lens kit" - desc = "A disposable kit containing all the needed tools and parts to develop and apply a self-modifying prescription lens overlay device to any eyewear." + desc = "A disposable kit containing all the needed tools and parts to develop and apply a self-modifying prescription lens overlay device to any eyewear. \ + Insert eyewear, receive vision-correcting lenses." icon = 'icons/obj/device.dmi' icon_state = "modkit" -/obj/item/prescription_kit/attack_obj(obj/O, mob/living/user) - if(!istype(O, /obj/item/clothing/glasses)) - return ..() - - if(istype(O, /obj/item/clothing/glasses)) - var/obj/item/clothing/glasses/target_glasses = O +/obj/item/prescription_kit/attackby(obj/item/I, mob/living/user, params) + if(istype(I, /obj/item/clothing/glasses) && I.Adjacent(user)) + var/obj/item/clothing/glasses/target_glasses = I if(target_glasses.vision_correction) to_chat(user, span_notice("These are already fitted with prescription lenses or otherwise already correct vision!")) return @@ -20,3 +18,5 @@ target_glasses.prescribe() target_glasses.balloon_alert(user, "prescription fitted!") qdel(src) + else + return ..() From dc138b1fadd9b88b99a6e772370b89eb2c032272 Mon Sep 17 00:00:00 2001 From: Darius <5933805+LeDrascol@users.noreply.github.com> Date: Wed, 11 Jan 2023 19:48:13 -0500 Subject: [PATCH 044/129] Move quirk actions to separate file Moves all quirk action datums to a separate file, to reduce bloat in the main trait files. --- modular_splurt/code/datums/traits/neutral.dm | 335 ----------------- .../code/datums/traits/trait_actions.dm | 343 ++++++++++++++++++ tgstation.dme | 1 + 3 files changed, 344 insertions(+), 335 deletions(-) create mode 100644 modular_splurt/code/datums/traits/trait_actions.dm diff --git a/modular_splurt/code/datums/traits/neutral.dm b/modular_splurt/code/datums/traits/neutral.dm index 733adf949c..fe01660fca 100644 --- a/modular_splurt/code/datums/traits/neutral.dm +++ b/modular_splurt/code/datums/traits/neutral.dm @@ -84,76 +84,6 @@ spell.Grant(Hypno_eyes) spell.owner = Hypno_eyes -/datum/action/innate/Hypnotize - name = "Hypnotize" - desc = "Stare deeply into someone's eyes, drawing them into a hypnotic slumber." - button_icon_state = "Hypno_eye" - icon_icon = 'modular_splurt/icons/mob/actions/lewd_actions/lewd_icons.dmi' - background_icon_state = "bg_alien" - var/mob/living/carbon/T //hypnosis target - var/mob/living/carbon/human/H //Person with the quirk - -/datum/action/innate/Hypnotize/Activate() - var/mob/living/carbon/human/H = owner - - if(!H.pulling || !isliving(H.pulling) || H.grab_state < GRAB_AGGRESSIVE) - to_chat(H, "You need to aggressively grab someone to hypnotize them!") - return - - var/mob/living/carbon/T = H.pulling - - if(T.IsSleeping()) - to_chat(H, "You can't hypnotize [T] whilst they're asleep!") - return - - to_chat(H, "You stare deeply into [T]'s eyes...") - to_chat(T, "[H] stares intensely into your eyes...") - if(!do_mob(H, T, 12 SECONDS)) - return - - if(H.pulling !=T || H.grab_state < GRAB_AGGRESSIVE) - return - - if(!(H in view(1, H.loc))) - return - - if(!(T.client?.prefs.cit_toggles & HYPNO)) - return - - var/response = alert(T, "Do you wish to fall into a hypnotic sleep?(This will allow [H] to issue hypnotic suggestions)", "Hypnosis", "Yes", "No") - - if(response == "Yes") - T.visible_message("Your eyelids gently shut as you fall into a deep slumber. All you can hear is [H]'s voice as you commit to following all of their suggestions.") - - T.SetSleeping(1200) - T.drowsyness = max(T.drowsyness, 40) - T = H.pulling - var/response2 = alert(H, "Would you like to release your subject or give them a suggestion?", "Hypnosis", "Suggestion", "Release") - - if(response2 == "Suggestion") - if(get_dist(H, T) > 1) - to_chat(H, "You must stand in whisper range of [T].") - return - - var/text = input("What would you like to suggest?", "Hypnotic suggestion", null, null) - text = sanitize(text) - if(!text) - return - - to_chat(H, "You whisper your suggestion in a smooth calming voice to [T]") - to_chat(T, "...[text]...") - - T.visible_message("[T] wakes up from their deep slumber!", "Your eyelids gently open as you see [H]'s face staring back at you.") - T.SetSleeping(0) - T = null - return - - if(response2 == "Release") - T.SetSleeping(0) - return - else - T.visible_message("[T]'s attention breaks, despite the attempt to hypnotize them! They clearly don't want this!", "Your concentration breaks as you realise you have no interest in following [H]'s words!") - return /datum/quirk/heat name = "Estrus Detection" desc = "You have a animalistic sense of detecting if someone is in heat." @@ -337,33 +267,6 @@ resetspell.owner = hydra hydra.name_archive = hydra.real_name - -/datum/action/innate/hydra - name = "Switch head" - desc = "Switch between each of the heads on your body." - icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' - button_icon_state = "art_summon" - -/datum/action/innate/hydrareset - name = "Reset speech" - desc = "Go back to speaking as a whole." - icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' - button_icon_state = "art_summon" - -/datum/action/innate/hydrareset/Activate() - var/mob/living/carbon/human/hydra = owner - hydra.real_name = hydra.name_archive - hydra.visible_message("[hydra.name] pushes all three heads forwards; they seem to be talking as a collective.", \ - "You are now talking as [hydra.name_archive]!", ignored_mobs=owner) - -/datum/action/innate/hydra/Activate() //I hate this but its needed - var/mob/living/carbon/human/hydra = owner - var/list/names = splittext(hydra.name_archive,"-") - var/selhead = input("Who would you like to speak as?","Heads:") in names - hydra.real_name = selhead - hydra.visible_message("[hydra.name] pulls the rest of their heads back; and puts [selhead]'s forward.", \ - "You are now talking as [selhead]!", ignored_mobs=owner) - //Own traits /datum/quirk/cum_sniff name = "Genital Taster" @@ -684,241 +587,3 @@ var/obj/item/clothing/mask/gas/cosmetic/gasmask = new(get_turf(quirk_holder)) // Uses a custom gas mask H.equip_to_slot(gasmask, ITEM_SLOT_MASK) H.regenerate_icons() - -/// quirk actions /// - -//vampire bite - -#define BLOOD_DRAIN_NUM 50 - -/datum/action/vbite - name = "Bite" - button_icon_state = "power_feed" - icon_icon = 'icons/mob/actions/bloodsucker.dmi' - desc = "Sink your vampiric fangs into the person you are grabbing." - var/drain_cooldown = 0 - -/datum/action/vbite/Trigger() - . = ..() - if(iscarbon(owner)) - var/mob/living/carbon/H = owner - if(H.nutrition >= 500) - to_chat(H, "You are too full to drain any more.") - return - if(drain_cooldown >= world.time) - to_chat(H, "You just drained blood, wait a few seconds.") - return - if(!H.pulling || !iscarbon(H.pulling)) - if(H.getStaminaLoss() >= 80 && H.nutrition > 20)//prevents being stunlocked in the chapel - to_chat(H,("you use some of your power to energize")) - H.adjustStaminaLoss(-20) - H.adjust_nutrition(-20) - H.resting = TRUE - if(H.pulling && (iscarbon(H.pulling) || (istype(H.pulling,/obj/structure/arachnid/cocoon) && locate(/mob/living/carbon) in H.pulling.contents))) - var/mob/living/carbon/victim - if(iscarbon(H.pulling)) - victim = H.pulling - else if(istype(H.pulling,/obj/structure/arachnid/cocoon)) - victim = locate(/mob/living/carbon) in H.pulling.contents - drain_cooldown = world.time + 25 - if(victim.anti_magic_check(FALSE, TRUE, FALSE, 0)) - to_chat(victim, "[H] tries to bite you, but stops before touching you!") - to_chat(H, "[victim] is blessed! You stop just in time to avoid catching fire.") - return - //Here we check now for both the garlic cloves on the neck and for blood in the victims bloodstream. - if(!blood_sucking_checks(victim, TRUE, TRUE)) - return - H.visible_message("[H] bites down on [victim]'s neck!") - victim.add_splatter_floor(get_turf(victim), TRUE) - to_chat(victim, "[H] is draining your blood!") - if(!do_after(H, 30, target = victim)) - return - var/blood_volume_difference = BLOOD_VOLUME_MAXIMUM - H.blood_volume //How much capacity we have left to absorb blood - var/drained_blood = min(victim.blood_volume, BLOOD_DRAIN_NUM, blood_volume_difference) - H.reagents.add_reagent(/datum/reagent/blood/, drained_blood) - to_chat(victim, "[H] has taken some of your blood!") - to_chat(H, "You drain some blood!") - playsound(H, 'sound/items/drink.ogg', 30, 1, -2) - victim.blood_volume = clamp(victim.blood_volume - drained_blood, 0, BLOOD_VOLUME_MAXIMUM) - log_combat(H,victim,"vampire bit")//logs the biting action for admins - if(!victim.blood_volume) - to_chat(H, "You finish off [victim]'s blood supply!") - - -/datum/action/vrevive - name = "Resurrect" - button_icon_state = "power_strength" - icon_icon = 'icons/mob/actions/bloodsucker.dmi' - desc = "Use all your energy to come back to life!" - -/datum/action/vrevive/Trigger() - . = ..() - var/mob/living/carbon/C = owner - var/mob/living/carbon/human/H = owner - if(H.stat == DEAD && istype(C.loc, /obj/structure/closet/crate/coffin)) - H.revive(TRUE, FALSE) - H.set_nutrition(0) - H.Daze(20) - H.drunkenness = 70 - else - to_chat(H,"You need to be dead and in a coffin to revive!") - -//splurt change end -//put next quirk action here - -//werewolf tf - -/datum/action/werewolf - name = "Transform" - desc = "Transform into your wolf form." - icon_icon = 'modular_splurt/icons/mob/actions/misc_actions.dmi' - button_icon_state = "Transform" - var/transformed = FALSE - var/list/old_features = list("species" = SPECIES_HUMAN, "legs" = "Plantigrade", "size" = 1, "bark") - -/datum/action/werewolf/Trigger() - . = ..() - var/mob/living/carbon/human/H = owner - var/obj/item/organ/genital/penis/P = H.getorganslot(ORGAN_SLOT_PENIS) - var/obj/item/organ/genital/breasts/B = H.getorganslot(ORGAN_SLOT_BREASTS) - var/obj/item/organ/genital/vagina/V = H.getorganslot(ORGAN_SLOT_VAGINA) - H.shake_animation(2) - if(!transformed) // transform them - H.visible_message(span_danger("[H] shivers, their flesh bursting with a sudden growth of thick fur and their features contorting to that of a beast's, fully transforming them into a werewolf!")) - H.set_species(/datum/species/mammal, 1) - H.dna.species.mutant_bodyparts["mam_tail"] = "Wolf" - H.dna.species.mutant_bodyparts["legs"] = "Digitigrade" - H.Digitigrade_Leg_Swap(FALSE) - H.dna.species.mutant_bodyparts["mam_snouts"] = "Mammal, Thick" - H.dna.features["mam_ears"] = "Wolf" - H.dna.features["mam_tail"] = "Wolf" - H.dna.features["mam_snouts"] = "Mammal, Thick" - H.dna.features["legs"] = "Digitigrade" - H.update_size(get_size(H) + 0.5) - H.set_bark("bark") - H.custom_species = "Werewolf" - if(!(H.dna.species.species_traits.Find(DIGITIGRADE))) - H.dna.species.species_traits += DIGITIGRADE - H.update_body() - H.update_body_parts() - if(B) - B.color = "#[H.dna.features["mcolor"]]" - B.update() - if(P) - P.shape = "Knotted" - P.color = "#ff7c80" - P.update() - P.modify_size(6) - if(V) - V.shape = "Furred" - V.color = "#[H.dna.features["mcolor"]]" - V.update() - else // untransform them - H.visible_message(span_danger("[H] shrinks, their wolfish features quickly receding.")) - H.set_species(old_features["species"], TRUE) - H.set_bark(old_features["bark"]) - H.dna.features["mam_ears"] = old_features["mam_ears"] - H.dna.features["mam_snouts"] = old_features["mam_snouts"] - H.dna.features["mam_tail"] = old_features["mam_tail"] - H.dna.features["legs"] = old_features["legs"] //i hate legs i hate legs i hate legs i hate legs i hate legs i hate legs i hate legs - if(old_features["legs"] == "Plantigrade") - H.dna.species.species_traits -= DIGITIGRADE - H.Digitigrade_Leg_Swap(TRUE) - H.dna.species.mutant_bodyparts["legs"] = old_features["legs"] - H.update_body() - H.update_body_parts() - H.update_size(get_size(H) - 0.5) - if(B) - B.color = "#[old_features["breasts_color"]]" - B.update() - if(H.has_penis()) - P.shape = old_features["cock_shape"] - P.color = "#[old_features["cock_color"]]" - P.update() - P.modify_size(-6) - if(H.has_vagina()) - V.shape = old_features["vag_shape"] - V.color = "#[old_features["vag_color"]]" - V.update() - V.update_size() - transformed = !transformed - -/datum/action/werewolf/Grant()// on grant sets some variables - . = ..() - var/mob/living/carbon/human/H = owner - old_features = H.dna.features.Copy() - old_features["species"] = H.dna.species.type - old_features["size"] = get_size(H) - old_features["bark"] = H.vocal_bark_id - -/datum/action/gargoyle/transform - name = "Transform" - desc = "Transform into a statue, regaining energy in the process. Additionally, you will slowly heal while in statue form." - icon_icon = 'icons/mob/actions/actions_changeling.dmi' - button_icon_state = "ling_camouflage" - - -/datum/action/gargoyle/transform/Trigger() - .=..() - var/mob/living/carbon/human/H = owner - var/datum/quirk/gargoyle/T = locate() in H.roundstart_quirks - if (!T) - return 0 - if(!T.cooldown) - if(!T.transformed) - if(!isturf(H.loc)) - return 0 - var/obj/structure/statue/gargoyle/S = new(H.loc, H) - S.name = "statue of [H.name]" - H.bleedsuppress = 1 - S.copy_overlays(H) - var/newcolor = list(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0)) - S.add_atom_colour(newcolor, FIXED_COLOUR_PRIORITY) - T.current = S - T.transformed = 1 - T.cooldown = 30 - T.paused = 0 - return 1 - else - if (T.current) - qdel(T.current) - T.transformed = 0 - T.cooldown = 30 - T.paused = 0 - H.visible_message("[H]'s skin rapidly softens, returning them to normal!", "Your skin softens, freeing your movement once more!") - else - to_chat(H, "You have transformed too recently; you cannot yet transform again! Try again in [T.cooldown] seconds.") - return 0 - -/datum/action/gargoyle/check - name = "Check" - desc = "Check your current energy levels." - icon_icon = 'icons/mob/actions/actions_clockcult.dmi' - button_icon_state = "Linked Vanguard" - -/datum/action/gargoyle/check/Trigger() - .=..() - var/mob/living/carbon/human/H = owner - var/datum/quirk/gargoyle/T = locate() in H.roundstart_quirks - if (T) - to_chat(H, "You have [round(T.energy,0.01)]/100 energy remaining!") - -/datum/action/gargoyle/pause - name = "Preserve" - desc = "Become near-motionless, thusly conserving your energy until you move from your current tile. Note, you will lose a chunk of energy when you inevitably move from your current position, so you cannot abuse this!" - icon_icon = 'icons/mob/actions/actions_flightsuit.dmi' - button_icon_state = "flightsuit_lock" - -datum/action/gargoyle/pause/Trigger() - .=..() - var/mob/living/carbon/human/H = owner - var/datum/quirk/gargoyle/T = locate() in H.roundstart_quirks - if (!T || T.transformed) - return - if(!T.paused) - T.paused = 1 - T.position = H.loc - to_chat(H, "You are now conserving your energy; this effect will end the moment you move from your current position!") - return - else - to_chat(H, "You are already conserving your energy!") diff --git a/modular_splurt/code/datums/traits/trait_actions.dm b/modular_splurt/code/datums/traits/trait_actions.dm new file mode 100644 index 0000000000..94967181bd --- /dev/null +++ b/modular_splurt/code/datums/traits/trait_actions.dm @@ -0,0 +1,343 @@ +#define BLOOD_DRAIN_NUM 50 + +// +// Quirk: Hypnotic Gaze +// + +/datum/action/innate/Hypnotize + name = "Hypnotize" + desc = "Stare deeply into someone's eyes, drawing them into a hypnotic slumber." + button_icon_state = "Hypno_eye" + icon_icon = 'modular_splurt/icons/mob/actions/lewd_actions/lewd_icons.dmi' + background_icon_state = "bg_alien" + var/mob/living/carbon/T //hypnosis target + var/mob/living/carbon/human/H //Person with the quirk + +/datum/action/innate/Hypnotize/Activate() + var/mob/living/carbon/human/H = owner + + if(!H.pulling || !isliving(H.pulling) || H.grab_state < GRAB_AGGRESSIVE) + to_chat(H, "You need to aggressively grab someone to hypnotize them!") + return + + var/mob/living/carbon/T = H.pulling + + if(T.IsSleeping()) + to_chat(H, "You can't hypnotize [T] whilst they're asleep!") + return + + to_chat(H, "You stare deeply into [T]'s eyes...") + to_chat(T, "[H] stares intensely into your eyes...") + if(!do_mob(H, T, 12 SECONDS)) + return + + if(H.pulling !=T || H.grab_state < GRAB_AGGRESSIVE) + return + + if(!(H in view(1, H.loc))) + return + + if(!(T.client?.prefs.cit_toggles & HYPNO)) + return + + var/response = alert(T, "Do you wish to fall into a hypnotic sleep?(This will allow [H] to issue hypnotic suggestions)", "Hypnosis", "Yes", "No") + + if(response == "Yes") + T.visible_message("Your eyelids gently shut as you fall into a deep slumber. All you can hear is [H]'s voice as you commit to following all of their suggestions.") + + T.SetSleeping(1200) + T.drowsyness = max(T.drowsyness, 40) + T = H.pulling + var/response2 = alert(H, "Would you like to release your subject or give them a suggestion?", "Hypnosis", "Suggestion", "Release") + + if(response2 == "Suggestion") + if(get_dist(H, T) > 1) + to_chat(H, "You must stand in whisper range of [T].") + return + + var/text = input("What would you like to suggest?", "Hypnotic suggestion", null, null) + text = sanitize(text) + if(!text) + return + + to_chat(H, "You whisper your suggestion in a smooth calming voice to [T]") + to_chat(T, "...[text]...") + + T.visible_message("[T] wakes up from their deep slumber!", "Your eyelids gently open as you see [H]'s face staring back at you.") + T.SetSleeping(0) + T = null + return + + if(response2 == "Release") + T.SetSleeping(0) + return + else + T.visible_message("[T]'s attention breaks, despite the attempt to hypnotize them! They clearly don't want this!", "Your concentration breaks as you realise you have no interest in following [H]'s words!") + return + +// +// Quirk: Hydra Heads +// + +/datum/action/innate/hydra + name = "Switch head" + desc = "Switch between each of the heads on your body." + icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' + button_icon_state = "art_summon" + +/datum/action/innate/hydrareset + name = "Reset speech" + desc = "Go back to speaking as a whole." + icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' + button_icon_state = "art_summon" + +/datum/action/innate/hydrareset/Activate() + var/mob/living/carbon/human/hydra = owner + hydra.real_name = hydra.name_archive + hydra.visible_message("[hydra.name] pushes all three heads forwards; they seem to be talking as a collective.", \ + "You are now talking as [hydra.name_archive]!", ignored_mobs=owner) + +/datum/action/innate/hydra/Activate() //I hate this but its needed + var/mob/living/carbon/human/hydra = owner + var/list/names = splittext(hydra.name_archive,"-") + var/selhead = input("Who would you like to speak as?","Heads:") in names + hydra.real_name = selhead + hydra.visible_message("[hydra.name] pulls the rest of their heads back; and puts [selhead]'s forward.", \ + "You are now talking as [selhead]!", ignored_mobs=owner) + +// +// Quirk: Bloodsucker Fledgling / Vampire +// + +/datum/action/vbite + name = "Bite" + button_icon_state = "power_feed" + icon_icon = 'icons/mob/actions/bloodsucker.dmi' + desc = "Sink your vampiric fangs into the person you are grabbing." + var/drain_cooldown = 0 + +/datum/action/vbite/Trigger() + . = ..() + if(iscarbon(owner)) + var/mob/living/carbon/H = owner + if(H.nutrition >= 500) + to_chat(H, "You are too full to drain any more.") + return + if(drain_cooldown >= world.time) + to_chat(H, "You just drained blood, wait a few seconds.") + return + if(!H.pulling || !iscarbon(H.pulling)) + if(H.getStaminaLoss() >= 80 && H.nutrition > 20)//prevents being stunlocked in the chapel + to_chat(H,("you use some of your power to energize")) + H.adjustStaminaLoss(-20) + H.adjust_nutrition(-20) + H.resting = TRUE + if(H.pulling && (iscarbon(H.pulling) || (istype(H.pulling,/obj/structure/arachnid/cocoon) && locate(/mob/living/carbon) in H.pulling.contents))) + var/mob/living/carbon/victim + if(iscarbon(H.pulling)) + victim = H.pulling + else if(istype(H.pulling,/obj/structure/arachnid/cocoon)) + victim = locate(/mob/living/carbon) in H.pulling.contents + drain_cooldown = world.time + 25 + if(victim.anti_magic_check(FALSE, TRUE, FALSE, 0)) + to_chat(victim, "[H] tries to bite you, but stops before touching you!") + to_chat(H, "[victim] is blessed! You stop just in time to avoid catching fire.") + return + //Here we check now for both the garlic cloves on the neck and for blood in the victims bloodstream. + if(!blood_sucking_checks(victim, TRUE, TRUE)) + return + H.visible_message("[H] bites down on [victim]'s neck!") + victim.add_splatter_floor(get_turf(victim), TRUE) + to_chat(victim, "[H] is draining your blood!") + if(!do_after(H, 30, target = victim)) + return + var/blood_volume_difference = BLOOD_VOLUME_MAXIMUM - H.blood_volume //How much capacity we have left to absorb blood + var/drained_blood = min(victim.blood_volume, BLOOD_DRAIN_NUM, blood_volume_difference) + H.reagents.add_reagent(/datum/reagent/blood/, drained_blood) + to_chat(victim, "[H] has taken some of your blood!") + to_chat(H, "You drain some blood!") + playsound(H, 'sound/items/drink.ogg', 30, 1, -2) + victim.blood_volume = clamp(victim.blood_volume - drained_blood, 0, BLOOD_VOLUME_MAXIMUM) + log_combat(H,victim,"vampire bit")//logs the biting action for admins + if(!victim.blood_volume) + to_chat(H, "You finish off [victim]'s blood supply!") + + +/datum/action/vrevive + name = "Resurrect" + button_icon_state = "power_strength" + icon_icon = 'icons/mob/actions/bloodsucker.dmi' + desc = "Use all your energy to come back to life!" + +/datum/action/vrevive/Trigger() + . = ..() + var/mob/living/carbon/C = owner + var/mob/living/carbon/human/H = owner + if(H.stat == DEAD && istype(C.loc, /obj/structure/closet/crate/coffin)) + H.revive(TRUE, FALSE) + H.set_nutrition(0) + H.Daze(20) + H.drunkenness = 70 + else + to_chat(H,"You need to be dead and in a coffin to revive!") + +// +// Quirk: Werewolf +// + +/datum/action/werewolf + name = "Transform" + desc = "Transform into your wolf form." + icon_icon = 'modular_splurt/icons/mob/actions/misc_actions.dmi' + button_icon_state = "Transform" + var/transformed = FALSE + var/list/old_features = list("species" = SPECIES_HUMAN, "legs" = "Plantigrade", "size" = 1, "bark") + +/datum/action/werewolf/Trigger() + . = ..() + var/mob/living/carbon/human/H = owner + var/obj/item/organ/genital/penis/P = H.getorganslot(ORGAN_SLOT_PENIS) + var/obj/item/organ/genital/breasts/B = H.getorganslot(ORGAN_SLOT_BREASTS) + var/obj/item/organ/genital/vagina/V = H.getorganslot(ORGAN_SLOT_VAGINA) + H.shake_animation(2) + if(!transformed) // transform them + H.visible_message(span_danger("[H] shivers, their flesh bursting with a sudden growth of thick fur and their features contorting to that of a beast's, fully transforming them into a werewolf!")) + H.set_species(/datum/species/mammal, 1) + H.dna.species.mutant_bodyparts["mam_tail"] = "Wolf" + H.dna.species.mutant_bodyparts["legs"] = "Digitigrade" + H.Digitigrade_Leg_Swap(FALSE) + H.dna.species.mutant_bodyparts["mam_snouts"] = "Mammal, Thick" + H.dna.features["mam_ears"] = "Wolf" + H.dna.features["mam_tail"] = "Wolf" + H.dna.features["mam_snouts"] = "Mammal, Thick" + H.dna.features["legs"] = "Digitigrade" + H.update_size(get_size(H) + 0.5) + H.set_bark("bark") + H.custom_species = "Werewolf" + if(!(H.dna.species.species_traits.Find(DIGITIGRADE))) + H.dna.species.species_traits += DIGITIGRADE + H.update_body() + H.update_body_parts() + if(B) + B.color = "#[H.dna.features["mcolor"]]" + B.update() + if(P) + P.shape = "Knotted" + P.color = "#ff7c80" + P.update() + P.modify_size(6) + if(V) + V.shape = "Furred" + V.color = "#[H.dna.features["mcolor"]]" + V.update() + else // untransform them + H.visible_message(span_danger("[H] shrinks, their wolfish features quickly receding.")) + H.set_species(old_features["species"], TRUE) + H.set_bark(old_features["bark"]) + H.dna.features["mam_ears"] = old_features["mam_ears"] + H.dna.features["mam_snouts"] = old_features["mam_snouts"] + H.dna.features["mam_tail"] = old_features["mam_tail"] + H.dna.features["legs"] = old_features["legs"] //i hate legs i hate legs i hate legs i hate legs i hate legs i hate legs i hate legs + if(old_features["legs"] == "Plantigrade") + H.dna.species.species_traits -= DIGITIGRADE + H.Digitigrade_Leg_Swap(TRUE) + H.dna.species.mutant_bodyparts["legs"] = old_features["legs"] + H.update_body() + H.update_body_parts() + H.update_size(get_size(H) - 0.5) + if(B) + B.color = "#[old_features["breasts_color"]]" + B.update() + if(H.has_penis()) + P.shape = old_features["cock_shape"] + P.color = "#[old_features["cock_color"]]" + P.update() + P.modify_size(-6) + if(H.has_vagina()) + V.shape = old_features["vag_shape"] + V.color = "#[old_features["vag_color"]]" + V.update() + V.update_size() + transformed = !transformed + +/datum/action/werewolf/Grant()// on grant sets some variables + . = ..() + var/mob/living/carbon/human/H = owner + old_features = H.dna.features.Copy() + old_features["species"] = H.dna.species.type + old_features["size"] = get_size(H) + old_features["bark"] = H.vocal_bark_id + + +/datum/action/gargoyle/transform + name = "Transform" + desc = "Transform into a statue, regaining energy in the process. Additionally, you will slowly heal while in statue form." + icon_icon = 'icons/mob/actions/actions_changeling.dmi' + button_icon_state = "ling_camouflage" + var/obj/structure/statue/gargoyle/current = null + + +/datum/action/gargoyle/transform/Trigger() + .=..() + var/mob/living/carbon/human/H = owner + var/datum/quirk/gargoyle/T = locate() in H.roundstart_quirks + if(!T.cooldown) + if(!T.transformed) + if(!isturf(H.loc)) + return 0 + var/obj/structure/statue/gargoyle/S = new(H.loc, H) + S.name = "statue of [H.name]" + H.bleedsuppress = 1 + S.copy_overlays(H) + var/newcolor = list(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0)) + S.add_atom_colour(newcolor, FIXED_COLOUR_PRIORITY) + current = S + T.transformed = 1 + T.cooldown = 30 + T.paused = 0 + S.dir = H.dir + return 1 + else + qdel(current) + T.transformed = 0 + T.cooldown = 30 + T.paused = 0 + H.visible_message("[H]'s skin rapidly softens, returning them to normal!", "Your skin softens, freeing your movement once more!") + else + to_chat(H, "You have transformed too recently; you cannot yet transform again!") + return 0 + +// +// Quirk: Gargoyle +// + +/datum/action/gargoyle/check + name = "Check" + desc = "Check your current energy levels." + icon_icon = 'icons/mob/actions/actions_clockcult.dmi' + button_icon_state = "Linked Vanguard" + +/datum/action/gargoyle/check/Trigger() + .=..() + var/mob/living/carbon/human/H = owner + var/datum/quirk/gargoyle/T = locate() in H.roundstart_quirks + to_chat(H, "You have [T.energy]/100 energy remaining!") + +/datum/action/gargoyle/pause + name = "Preserve" + desc = "Become near-motionless, thusly conserving your energy until you move from your current tile. Note, you will lose a chunk of energy when you inevitably move from your current position, so you cannot abuse this!" + icon_icon = 'icons/mob/actions/actions_flightsuit.dmi' + button_icon_state = "flightsuit_lock" + +datum/action/gargoyle/pause/Trigger() + .=..() + var/mob/living/carbon/human/H = owner + var/datum/quirk/gargoyle/T = locate() in H.roundstart_quirks + + if(!T.paused) + T.paused = 1 + T.position = H.loc + to_chat(H, "You are now conserving your energy; this effect will end the moment you move from your current position!") + return + else + to_chat(H, "You are already conserving your energy!") diff --git a/tgstation.dme b/tgstation.dme index 39ee4abb73..9fd1e9e362 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -4336,6 +4336,7 @@ #include "modular_splurt\code\datums\traits\good.dm" #include "modular_splurt\code\datums\traits\negative.dm" #include "modular_splurt\code\datums\traits\neutral.dm" +#include "modular_splurt\code\datums\traits\trait_actions.dm" #include "modular_splurt\code\game\atoms.dm" #include "modular_splurt\code\game\atoms_movable.dm" #include "modular_splurt\code\game\data_huds.dm" From e9ff5e00e024e496ae81e1ab2ce06261b37ea40a Mon Sep 17 00:00:00 2001 From: Hatterhat Date: Wed, 11 Jan 2023 20:49:26 -0600 Subject: [PATCH 045/129] works on my machine --- .../clothing/glasses/prescription_kit.dm | 26 +++++++++++++------ 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/code/modules/clothing/glasses/prescription_kit.dm b/code/modules/clothing/glasses/prescription_kit.dm index 8c6d2274bb..9e324d34f0 100644 --- a/code/modules/clothing/glasses/prescription_kit.dm +++ b/code/modules/clothing/glasses/prescription_kit.dm @@ -10,13 +10,23 @@ /obj/item/prescription_kit/attackby(obj/item/I, mob/living/user, params) if(istype(I, /obj/item/clothing/glasses) && I.Adjacent(user)) var/obj/item/clothing/glasses/target_glasses = I - if(target_glasses.vision_correction) - to_chat(user, span_notice("These are already fitted with prescription lenses or otherwise already correct vision!")) - return - playsound(src, 'sound/items/screwdriver.ogg', 50, 1) - user.visible_message(span_notice("[user] fits \the [target_glasses] with a prescription overlay device."), span_notice("You fit \the [target_glasses] with a prescription overlay device.")) - target_glasses.prescribe() - target_glasses.balloon_alert(user, "prescription fitted!") - qdel(src) + prescribe(target_glasses, user) else return ..() + +/obj/item/prescription_kit/afterattack(atom/target, mob/user, proximity_flag, click_parameters) + if(istype(target, /obj/item/clothing/glasses) && target.Adjacent(user)) + var/obj/item/clothing/glasses/target_glasses = target + prescribe(target_glasses, user) + else + . = ..() + +/obj/item/prescription_kit/proc/prescribe(obj/item/clothing/glasses/target_glasses, mob/user) + if(target_glasses.vision_correction) + to_chat(user, span_notice("These are already fitted with prescription lenses or otherwise already correct vision!")) + return + playsound(src, 'sound/items/screwdriver.ogg', 50, 1) + user.visible_message(span_notice("[user] fits \the [target_glasses] with a prescription overlay device."), span_notice("You fit \the [target_glasses] with a prescription overlay device.")) + target_glasses.prescribe() + target_glasses.balloon_alert(user, "prescription fitted!") + qdel(src) From b25248d7aea0204a35af15f711a7d70752818cb9 Mon Sep 17 00:00:00 2001 From: Darius <5933805+LeDrascol@users.noreply.github.com> Date: Thu, 12 Jan 2023 00:13:42 -0500 Subject: [PATCH 046/129] Add all job cartridges to PTech Adds all remaining unavailable job cartridges to the Head of Personnel's PTech vending machine. Carts are sorted by standard job, virus, then command. --- code/modules/vending/cartridge.dm | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/code/modules/vending/cartridge.dm b/code/modules/vending/cartridge.dm index c4b35496c2..d80d8e958e 100644 --- a/code/modules/vending/cartridge.dm +++ b/code/modules/vending/cartridge.dm @@ -5,15 +5,34 @@ product_slogans = "Carts to go!" icon_state = "cart" icon_deny = "cart-deny" - products = list(/obj/item/cartridge/medical = 10, + products = list(/obj/item/pda/heads = 10, // PDA + // Normal staff cards + /obj/item/cartridge/medical = 10, /obj/item/cartridge/engineering = 10, /obj/item/cartridge/security = 10, /obj/item/cartridge/janitor = 10, /obj/item/cartridge/signal/toxins = 10, /obj/item/cartridge/roboticist = 10, - /obj/item/pda/heads = 10, + /obj/item/cartridge/atmos = 10, + /obj/item/cartridge/chemistry = 10, + /obj/item/cartridge/detective = 10, + /obj/item/cartridge/lawyer = 10, + /obj/item/cartridge/curator = 10, + /obj/item/cartridge/bartender = 10, + + // Virus cards + /obj/item/cartridge/virus/clown = 3, + /obj/item/cartridge/virus/mime = 3, + + // Command staff cards /obj/item/cartridge/captain = 3, - /obj/item/cartridge/quartermaster = 10) + /obj/item/cartridge/quartermaster = 10, + /obj/item/cartridge/head = 10, + /obj/item/cartridge/hos = 10, + /obj/item/cartridge/ce = 10, + /obj/item/cartridge/cmo = 10, + /obj/item/cartridge/rd = 10) + armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 50) refill_canister = /obj/item/vending_refill/cart resistance_flags = FIRE_PROOF From 8710e7ed06ec5c12103f784f91281989a812d3ed Mon Sep 17 00:00:00 2001 From: Darius <5933805+LeDrascol@users.noreply.github.com> Date: Thu, 12 Jan 2023 07:25:14 +0000 Subject: [PATCH 047/129] Fixes a typo for gargoyle quirk Adds a missing slash to the gargoyle quirk's pause action Co-authored-by: BongaTheProto <93835010+BongaTheProto@users.noreply.github.com> --- modular_splurt/code/datums/traits/trait_actions.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modular_splurt/code/datums/traits/trait_actions.dm b/modular_splurt/code/datums/traits/trait_actions.dm index 94967181bd..2c8cdf79ca 100644 --- a/modular_splurt/code/datums/traits/trait_actions.dm +++ b/modular_splurt/code/datums/traits/trait_actions.dm @@ -329,7 +329,7 @@ icon_icon = 'icons/mob/actions/actions_flightsuit.dmi' button_icon_state = "flightsuit_lock" -datum/action/gargoyle/pause/Trigger() +/datum/action/gargoyle/pause/Trigger() .=..() var/mob/living/carbon/human/H = owner var/datum/quirk/gargoyle/T = locate() in H.roundstart_quirks From c6be329a273e690f44ef4801c11d9bdc89b712fc Mon Sep 17 00:00:00 2001 From: SPLURT Bot <97993072+SPLURT-Station-Bot@users.noreply.github.com> Date: Thu, 12 Jan 2023 18:15:15 +0000 Subject: [PATCH 048/129] Automatic changelog generation for PR #679 [ci skip] --- html/changelogs/AutoChangeLog-pr-679.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-679.yml diff --git a/html/changelogs/AutoChangeLog-pr-679.yml b/html/changelogs/AutoChangeLog-pr-679.yml new file mode 100644 index 0000000000..1f6181b2f9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-679.yml @@ -0,0 +1,4 @@ +author: LeDrascol +delete-after: true +changes: + - refactor: Moved quirk action datums to a new file From db6360dd161f6e8488fbdcfdc3e34205b88130f2 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Thu, 12 Jan 2023 18:17:10 +0000 Subject: [PATCH 049/129] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-679.yml | 4 ---- html/changelogs/archive/2023-01.yml | 3 +++ 2 files changed, 3 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-679.yml diff --git a/html/changelogs/AutoChangeLog-pr-679.yml b/html/changelogs/AutoChangeLog-pr-679.yml deleted file mode 100644 index 1f6181b2f9..0000000000 --- a/html/changelogs/AutoChangeLog-pr-679.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: LeDrascol -delete-after: true -changes: - - refactor: Moved quirk action datums to a new file diff --git a/html/changelogs/archive/2023-01.yml b/html/changelogs/archive/2023-01.yml index 16d2251946..69a8c41418 100644 --- a/html/changelogs/archive/2023-01.yml +++ b/html/changelogs/archive/2023-01.yml @@ -46,3 +46,6 @@ Seris02: - bugfix: fixed gargoyles having sprites that are odd, along with sanity checks and making the transition between living and statue seamless +2023-01-12: + LeDrascol: + - refactor: Moved quirk action datums to a new file From 25ce3ddb095e21bf74a0866456ca5855216a71da Mon Sep 17 00:00:00 2001 From: SPLURT Bot <97993072+SPLURT-Station-Bot@users.noreply.github.com> Date: Thu, 12 Jan 2023 18:26:59 +0000 Subject: [PATCH 050/129] Automatic changelog generation for PR #676 [ci skip] --- html/changelogs/AutoChangeLog-pr-676.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-676.yml diff --git a/html/changelogs/AutoChangeLog-pr-676.yml b/html/changelogs/AutoChangeLog-pr-676.yml new file mode 100644 index 0000000000..13f6ec5e35 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-676.yml @@ -0,0 +1,4 @@ +author: LeDrascol +delete-after: true +changes: + - rscadd: Added a Plushmium Crate to cargo From 3c5834f3cdea0b259bb6e968664893e3834b177f Mon Sep 17 00:00:00 2001 From: Changelogs Date: Thu, 12 Jan 2023 18:28:41 +0000 Subject: [PATCH 051/129] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-676.yml | 4 ---- html/changelogs/archive/2023-01.yml | 1 + 2 files changed, 1 insertion(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-676.yml diff --git a/html/changelogs/AutoChangeLog-pr-676.yml b/html/changelogs/AutoChangeLog-pr-676.yml deleted file mode 100644 index 13f6ec5e35..0000000000 --- a/html/changelogs/AutoChangeLog-pr-676.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: LeDrascol -delete-after: true -changes: - - rscadd: Added a Plushmium Crate to cargo diff --git a/html/changelogs/archive/2023-01.yml b/html/changelogs/archive/2023-01.yml index 69a8c41418..878e6f0e6e 100644 --- a/html/changelogs/archive/2023-01.yml +++ b/html/changelogs/archive/2023-01.yml @@ -49,3 +49,4 @@ 2023-01-12: LeDrascol: - refactor: Moved quirk action datums to a new file + - rscadd: Added a Plushmium Crate to cargo From 106e02a5e3ebd9b4b57756b26f06982859dbacc0 Mon Sep 17 00:00:00 2001 From: SPLURT Bot <97993072+SPLURT-Station-Bot@users.noreply.github.com> Date: Fri, 13 Jan 2023 23:24:37 +0000 Subject: [PATCH 052/129] Automatic changelog generation for PR #668 [ci skip] --- html/changelogs/AutoChangeLog-pr-668.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-668.yml diff --git a/html/changelogs/AutoChangeLog-pr-668.yml b/html/changelogs/AutoChangeLog-pr-668.yml new file mode 100644 index 0000000000..c599652498 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-668.yml @@ -0,0 +1,4 @@ +author: Guatolipo +delete-after: true +changes: + - rscadd: Added CART_CHEMISTRY access to cart-cmo From d94eb9334aaab97f584eadbe97fbaa1d29d9707b Mon Sep 17 00:00:00 2001 From: Changelogs Date: Fri, 13 Jan 2023 23:26:09 +0000 Subject: [PATCH 053/129] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-668.yml | 4 ---- html/changelogs/archive/2023-01.yml | 3 +++ 2 files changed, 3 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-668.yml diff --git a/html/changelogs/AutoChangeLog-pr-668.yml b/html/changelogs/AutoChangeLog-pr-668.yml deleted file mode 100644 index c599652498..0000000000 --- a/html/changelogs/AutoChangeLog-pr-668.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Guatolipo -delete-after: true -changes: - - rscadd: Added CART_CHEMISTRY access to cart-cmo diff --git a/html/changelogs/archive/2023-01.yml b/html/changelogs/archive/2023-01.yml index 878e6f0e6e..d73be1282f 100644 --- a/html/changelogs/archive/2023-01.yml +++ b/html/changelogs/archive/2023-01.yml @@ -50,3 +50,6 @@ LeDrascol: - refactor: Moved quirk action datums to a new file - rscadd: Added a Plushmium Crate to cargo +2023-01-13: + Guatolipo: + - rscadd: Added CART_CHEMISTRY access to cart-cmo From 978dce3f48c7a27b642da9c908d282318b30bcce Mon Sep 17 00:00:00 2001 From: SPLURT Bot <97993072+SPLURT-Station-Bot@users.noreply.github.com> Date: Fri, 13 Jan 2023 23:42:04 +0000 Subject: [PATCH 054/129] Automatic changelog generation for PR #652 [ci skip] --- html/changelogs/AutoChangeLog-pr-652.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-652.yml diff --git a/html/changelogs/AutoChangeLog-pr-652.yml b/html/changelogs/AutoChangeLog-pr-652.yml new file mode 100644 index 0000000000..6c0e6c9e30 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-652.yml @@ -0,0 +1,4 @@ +author: LeDrascol +delete-after: true +changes: + - tweak: Replaced three dangerous holodeck modes with harmless alternatives From 92dc1fb1a33d1139fdb937181663d742915e25f6 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Fri, 13 Jan 2023 23:43:32 +0000 Subject: [PATCH 055/129] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-652.yml | 4 ---- html/changelogs/archive/2023-01.yml | 2 ++ 2 files changed, 2 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-652.yml diff --git a/html/changelogs/AutoChangeLog-pr-652.yml b/html/changelogs/AutoChangeLog-pr-652.yml deleted file mode 100644 index 6c0e6c9e30..0000000000 --- a/html/changelogs/AutoChangeLog-pr-652.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: LeDrascol -delete-after: true -changes: - - tweak: Replaced three dangerous holodeck modes with harmless alternatives diff --git a/html/changelogs/archive/2023-01.yml b/html/changelogs/archive/2023-01.yml index d73be1282f..585e74fd71 100644 --- a/html/changelogs/archive/2023-01.yml +++ b/html/changelogs/archive/2023-01.yml @@ -53,3 +53,5 @@ 2023-01-13: Guatolipo: - rscadd: Added CART_CHEMISTRY access to cart-cmo + LeDrascol: + - tweak: Replaced three dangerous holodeck modes with harmless alternatives From 5251c14f65e684288e1ecbe0be10e281ffb05ce9 Mon Sep 17 00:00:00 2001 From: dapnee <33661984+dapnee@users.noreply.github.com> Date: Fri, 13 Jan 2023 16:59:27 -0700 Subject: [PATCH 056/129] Letting that sink in idk why this was never fixed --- .../Mining_Station/Mining_Station_Public_01.dmm | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/_maps/RandomRuins/StationRuins/Lavaland/Mining_Station/Mining_Station_Public_01.dmm b/_maps/RandomRuins/StationRuins/Lavaland/Mining_Station/Mining_Station_Public_01.dmm index 79d49dc6cf..f7be60c4b3 100644 --- a/_maps/RandomRuins/StationRuins/Lavaland/Mining_Station/Mining_Station_Public_01.dmm +++ b/_maps/RandomRuins/StationRuins/Lavaland/Mining_Station/Mining_Station_Public_01.dmm @@ -994,14 +994,14 @@ /turf/open/floor/plasteel/freezer, /area/mine/living_quarters) "qh" = ( -/obj/structure/sink{ - dir = 8; - pixel_x = 11 - }, /obj/effect/turf_decal/tile/bar, /obj/effect/turf_decal/tile/bar{ dir = 1 }, +/obj/structure/sink{ + dir = 4; + pixel_x = 12 + }, /turf/open/floor/plasteel, /area/mine/living_quarters) "qm" = ( @@ -2498,13 +2498,13 @@ /turf/open/floor/plasteel/white, /area/mine/laborcamp) "Mj" = ( -/obj/structure/sink{ - dir = 4; - pixel_x = -12 - }, /obj/structure/mirror{ pixel_x = -28 }, +/obj/structure/sink{ + dir = 8; + pixel_x = -12 + }, /turf/open/floor/plasteel/freezer, /area/mine/living_quarters) "Mk" = ( From 64ef8148c8e6ee38e971173ba3d218298c5f8fd5 Mon Sep 17 00:00:00 2001 From: Darius <5933805+LeDrascol@users.noreply.github.com> Date: Fri, 13 Jan 2023 21:40:21 -0500 Subject: [PATCH 057/129] Plushmium crate updates - Reduces the amount from 30 to 5 - - Allows converting only one plushie per shipment - Adds a spray bottle variant - Prevents using the spray bottle on non-plushies - Adds a boxed set for the items - Adds a lore note explaining how to use it - Updates shipment information --- .../code/game/objects/items/storage/boxes.dm | 21 +++++++++++++++++ .../code/modules/cargo/packs/misc.dm | 4 ++-- .../reagents/reagent_containers/bottle.dm | 4 +++- .../reagents/reagent_containers/spray.dm | 23 +++++++++++++++++++ 4 files changed, 49 insertions(+), 3 deletions(-) diff --git a/modular_splurt/code/game/objects/items/storage/boxes.dm b/modular_splurt/code/game/objects/items/storage/boxes.dm index 08e2b03e48..1f41246d45 100644 --- a/modular_splurt/code/game/objects/items/storage/boxes.dm +++ b/modular_splurt/code/game/objects/items/storage/boxes.dm @@ -14,3 +14,24 @@ new /obj/item/reagent_containers/hypospray/medipen/bellygrowth(src) new /obj/item/reagent_containers/hypospray/medipen/prospacillin(src) new /obj/item/reagent_containers/hypospray/medipen/lewdbomb(src) + +// Shipment box for Plushmium +/obj/item/storage/box/shipment_plushmium + name = "plushmium backer rewards box" + desc = "Comes with a spray bottle quick application!" + icon = 'modular_sand/icons/obj/fleshlight.dmi' + icon_state = "box" + +/obj/item/storage/box/shipment_plushmium/ComponentInitialize() + . = ..() + var/datum/component/storage/str = GetComponent(/datum/component/storage) + str.max_items = 2 + +/obj/item/storage/box/shipment_plushmium/PopulateContents() + new /obj/item/reagent_containers/spray/plushmium(src) + new /obj/item/paper/fluff/shipment_plushmium(src) + +// Plushmium box's note +/obj/item/paper/fluff/shipment_plushmium + name = "plushmium backer note" + info = "

Plushmium Instructions

Dear esteemed customer,

Thank for backing the Stuffing For Spessmen© crowd funding initiative. We at Donk Co. pride ourselves on making a wide variety of engaging toys for our loyal customers to enjoy. Now, we're bringing the toy making process directly to your home or workplace! Included in this box is:
  • A spray bottle of Love to Life™ solution
  • A carefully packaged plushie
To begin enjoying your new friend, start by unpacking the included plushie. Our selection process goes through rigorous quality testing to ensure you'll always get the best toy for the job. With so many choices, you'll want to get the whole family in on the action.

Once you have everything ready, it's time to make the patented Donk Co. magic happen! Spray your new best friend with Love to Life™ solution, included in the complimentary spray bottle, and watch the stunning transformation!

But don't leave your new best friend hanging! Give them a big warm hug to celebrate the long and intimate friendship you'll be sharing.


Donk Co. is not responsible for any injury or loss of life that may occur while using the Love to Life™ solution. Do not allow access to children or adults without supervision by a chemist.

Do not drink, splash, inject, or otherwise handle the solution. Do not come into direct physical contact with the solution, or any object the solution has been applied to, under any circumstances." diff --git a/modular_splurt/code/modules/cargo/packs/misc.dm b/modular_splurt/code/modules/cargo/packs/misc.dm index f80de923b2..bf5eec556d 100644 --- a/modular_splurt/code/modules/cargo/packs/misc.dm +++ b/modular_splurt/code/modules/cargo/packs/misc.dm @@ -217,10 +217,10 @@ /datum/supply_pack/misc/plushmium name = "Plushmium Crate" - desc = "Contains a small sample of an experimental chemical known as Plushmium, and a plushie to use it on." + desc = "Surplus shipment of Stuffing For Spessmen backer rewards. Contains a pre-packaged spray bottle of Plushmium, and toy to use it on." cost = 5000 // Cost of an expensive animal contains = list( - /obj/item/reagent_containers/glass/bottle/plushmium, + /obj/item/storage/box/shipment_plushmium, /obj/item/choice_beacon/box/plushie ) diff --git a/modular_splurt/code/modules/reagents/reagent_containers/bottle.dm b/modular_splurt/code/modules/reagents/reagent_containers/bottle.dm index bf363ef31a..0aab11e5ec 100644 --- a/modular_splurt/code/modules/reagents/reagent_containers/bottle.dm +++ b/modular_splurt/code/modules/reagents/reagent_containers/bottle.dm @@ -8,4 +8,6 @@ name = "\improper Plushmium Bottle" desc = "A small bottle of Plushmium. Seems almost fluffy, if not for it being a liquid." icon_state = "bottle20" - list_reagents = list(/datum/reagent/fermi/plushmium = 30) + list_reagents = list(/datum/reagent/fermi/plushmium = 5) + possible_transfer_amounts = list(5) + volume = 5 diff --git a/modular_splurt/code/modules/reagents/reagent_containers/spray.dm b/modular_splurt/code/modules/reagents/reagent_containers/spray.dm index df8895c430..e416ca2eb9 100644 --- a/modular_splurt/code/modules/reagents/reagent_containers/spray.dm +++ b/modular_splurt/code/modules/reagents/reagent_containers/spray.dm @@ -1,2 +1,25 @@ /obj/item/reagent_containers/spray/chemsprayer/sleeper list_reagents = list(/datum/reagent/toxin/sodium_thiopental = 100, /datum/reagent/consumable/condensedcapsaicin = 100, /datum/reagent/toxin/chloralhydrate = 100) + +/obj/item/reagent_containers/spray/plushmium + name = "\improper Love to Life spray bottle" + desc = "A toy spray bottle marked with the Donk Co. Stuffing For Spessmen branding. Must be applied directly to a plush, and only contains enough for one." + icon_state = "cleaner_drying" + // Single use item! + volume = 5 + spray_range = 1 + can_fill_from_container = FALSE + amount_per_transfer_from_this = 5 + possible_transfer_amounts = list(5) + list_reagents = list(/datum/reagent/fermi/plushmium = 5) + +// Custom interaction to prevent wasting the item +/obj/item/reagent_containers/spray/plushmium/afterattack(atom/target, mob/user) + // Check for plush toy + if(!istype(target, /obj/item/toy/plush)) + // Alert user and return + to_chat(user, "You don't want to waste the solution on a non-plushie.") + return + + // Return normally + . = ..() From 0aaa165dec5c8fbf6281dbb01cc62b7c1e533e85 Mon Sep 17 00:00:00 2001 From: Darius <5933805+LeDrascol@users.noreply.github.com> Date: Fri, 13 Jan 2023 22:47:06 -0500 Subject: [PATCH 058/129] Interaction spelling fixes Fixes simple spelling errors in the player interactions list. Requested by another user. --- .../code/datums/interactions/lewd/_lewd.dm | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/modular_splurt/code/datums/interactions/lewd/_lewd.dm b/modular_splurt/code/datums/interactions/lewd/_lewd.dm index b63256db39..da20b3be59 100644 --- a/modular_splurt/code/datums/interactions/lewd/_lewd.dm +++ b/modular_splurt/code/datums/interactions/lewd/_lewd.dm @@ -74,7 +74,7 @@ if(CUM_TARGET_NIPPLE) cumin = TRUE if(partner.has_breasts()) - message = "cums iside \the [partner]'s nipple!." + message = "cums inside \the [partner]'s nipple!." target_gen = partner.getorganslot(ORGAN_SLOT_BREASTS) else message = "cums on \the [partner]'s chest and neck." @@ -136,7 +136,7 @@ if(CUM_TARGET_NIPPLE) cumin = TRUE if(partner.has_breasts()) - message = "cums iside \the [partner]'s nipple!." + message = "cums inside \the [partner]'s nipple!." target_gen = partner.getorganslot(ORGAN_SLOT_BREASTS) else message = "cums on \the [partner]'s chest and neck." @@ -411,7 +411,7 @@ var/u_His = p_their() var/list/belly_names = list("stomach", "belly", "gut", "midsection", "rolls") var/list/nuzzles = list( - "rubs [u_His] face all accross [target]'s [pick(belly_names)]", + "rubs [u_His] face all across [target]'s [pick(belly_names)]", "nuzzles [target]'s [pick(belly_names)][pick(list(" lovingly", ""))]", "shoves [u_His] face into [target]'s [pick(belly_names)] and gives it kisses all over", "licks right into [target]'s [pick(list("belly button", "navel"))]" @@ -439,7 +439,7 @@ visible_message(message = "\The [src] [message]", ignored_mobs = get_unconsenting()) if(can_penetrating_genital_cum()) handle_post_sex(NORMAL_LUST, CUM_TARGET_BELLY, partner) - //partner.handle_post_sex(NORMAL_LUST, null, src) //don't think we need it fo dis one + //partner.handle_post_sex(NORMAL_LUST, null, src) //don't think we need it for this one /mob/living/proc/do_breastsmother(mob/living/target) var/message @@ -547,7 +547,7 @@ lines = list( "squeezes [u_His] armpit right into \the [target]'s throbbing [genital_name], massaging its length using [u_His] [pick(musk)]armpit!", "presses [u_His] arm down all over \the [target]'s leaking [genital_name], milking it with [u_His] [pick(musk)] pit!", - "rubs and grinds [u_His] [pick(musk)] arpit back and forth through \the [target]'s [genital_name], deeply squeezing it to the base!" + "rubs and grinds [u_His] [pick(musk)] armpit back and forth through \the [target]'s [genital_name], deeply squeezing it to the base!" ) else if(target.is_topless()) @@ -556,7 +556,7 @@ ) else // https://cdn.discordapp.com/attachments/802990353883070474/962478553117622322/NoName-480p.mp4 lines = list( - "softly tears a hole in the cloth on the back of [u_His] armpit, suffing \the [target]'s whole rod right into it with a [pick(musk)] embrace!" + "softly tears a hole in the cloth on the back of [u_His] armpit, stuffing \the [target]'s whole rod right into it with a [pick(musk)] embrace!" ) target.set_is_fucking(src, CUM_TARGET_ARMPIT, target.getorganslot(ORGAN_SLOT_PENIS)) @@ -577,7 +577,7 @@ if(target.is_fucking(src, CUM_TARGET_BREASTS)) lines = list( "slides [u_His] [pick(GLOB.breast_nouns)], up and down through \the [target]'s throbbing [genital_name]", - "squeezes [u_His] [pick(GLOB.breast_nouns)] through all of \the [target]'s lenght", + "squeezes [u_His] [pick(GLOB.breast_nouns)] through all of \the [target]'s length", "jerks \the [target] off lustfully with [u_His] supple [pick(GLOB.breast_nouns)]" ) else @@ -640,7 +640,7 @@ if(is_fucking(target, CUM_TARGET_URETHRA)) lines = list( - "humps right into \the [target]'s [t_genital_name], stretiching it as their balls slam together", + "humps right into \the [target]'s [t_genital_name], stretching it as their balls slam together", "slides [u_His] [u_genital_name] all the way down \the [target]'s own throbbing [t_genital_name], [t_His] urethra is so tight!", "rams [u_His] [u_genital_name] back and forth through \the [target]'s urethra, giving it a very nice fucking" ) @@ -674,7 +674,7 @@ ) else if(target.has_breasts(REQUIRE_EXPOSED)) lines = list( - "presses [u_His] throbbing tip against \the [target]'s puffy nipple, forcing the whole lenght all the way in with a wet smack", + "presses [u_His] throbbing tip against \the [target]'s puffy nipple, forcing the whole length all the way in with a wet smack", "stretches \the [target]'s nipple with his fingers, before forcing it open with the whole girth of [u_His] twitching [genital_name]" ) else @@ -711,7 +711,7 @@ ) else lines = list( - "presses [u_His] tip against \the [target]'s [pick("pudgy ", "soft ", "")] thighs, soon shoving [u_His] whole lenght right in between them", + "presses [u_His] tip against \the [target]'s [pick("pudgy ", "soft ", "")] thighs, soon shoving [u_His] whole length right in between them", "presents [u_His] [genital_name] to \the [target]'s legs, ramming its full size right into [t_His] thigh lock", "smooches \the [target]'s crotch with [u_His] throbbing tip, right before piercing between [t_His] thighs with [u_His] full [genital_name]" ) @@ -779,7 +779,7 @@ ) var/list/hell = list( "'s asshole squints as she shoves \the [target]'s face in between [u_His] sweaty [pick(asscheeks)], letting hell go loose!", - " pushes [u_His] [pick(ass)] into \the [target]'s face, [pick(list("[t_His] nose shoved deep in [src]'s musky butthole", "[u_His] asshole sqints"))] as [u_He] [pick(braps)][pick(list("", ", [jiggle]"))]", + " pushes [u_His] [pick(ass)] into \the [target]'s face, [pick(list("[t_His] nose shoved deep in [src]'s musky butthole", "[u_His] asshole squints"))] as [u_He] [pick(braps)][pick(list("", ", [jiggle]"))]", " smothers \the [target]'s whole head in between [u_His][pick(list(" sweaty", "", " musky"))] [pick(asscheeks)], pushing out gallons of pure braps. [pick(list("", "[jiggle]"))]", "'s [pick(ass)] claps against \the [target]'s nose, right before [u_He] [pick(braps)]" ) @@ -985,7 +985,7 @@ else hell = list( "can already smell the stench as [u_He] works [u_His] [genital_name] into \the [target]'s dung hole, being received by warm, wet and nasty feeling all over it.", - "grabs the base of [u_His] twitching [genital_name] and presses the tip into \the [target]'s asshole, immediately shoving it right into a fat and moisty log", + "grabs the base of [u_His] twitching [genital_name] and presses the tip into \the [target]'s asshole, immediately shoving it right into a fat and moist log", "shoves [genital_name] deep inside of \the [target]'s [pick(ass)], [t_He] releases a massive amount of mush to greet the rod[pick("", ". [jiggle]")]") set_is_fucking(target, CUM_TARGET_ANUS, getorganslot(ORGAN_SLOT_PENIS)) From 791f89a1799d13536918ffe853e69b329718bca0 Mon Sep 17 00:00:00 2001 From: Darius <5933805+LeDrascol@users.noreply.github.com> Date: Sat, 14 Jan 2023 03:51:42 +0000 Subject: [PATCH 059/129] Prevent nutriment pump with no process food trait (#15941) Prevents the nutriment pump implant from functioning on mobs with TRAIT_NO_PROCESS_FOOD., as this behavior appears to be unintended. --- code/modules/surgery/organs/augments_chest.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/code/modules/surgery/organs/augments_chest.dm b/code/modules/surgery/organs/augments_chest.dm index e1b198ade2..420810d7d2 100644 --- a/code/modules/surgery/organs/augments_chest.dm +++ b/code/modules/surgery/organs/augments_chest.dm @@ -20,6 +20,10 @@ if(!. || synthesizing) return + // Check if this user can process nutriment + if(HAS_TRAIT(owner, TRAIT_NO_PROCESS_FOOD)) + return + if(owner.nutrition <= hunger_threshold) synthesizing = TRUE to_chat(owner, "You feel less hungry...") From 7ca55c7e37365bbacd1348bd51e9c5eb89492391 Mon Sep 17 00:00:00 2001 From: Darius <5933805+LeDrascol@users.noreply.github.com> Date: Sat, 14 Jan 2023 06:19:54 -0500 Subject: [PATCH 060/129] Adds the Wallet of Holding Functions like a normal wallet, but with 3x more space. Included in Bluespace Pockets, and available from a science protolathe. --- .../game/objects/items/storage/wallets.dm | 20 ++++++++++++++++++ .../research/designs/bluespace_designs.dm | 9 ++++++++ .../research/techweb/nodes/bluespace_nodes.dm | 13 ++++++++++++ modular_splurt/icons/obj/storage.dmi | Bin 3685 -> 4731 bytes tgstation.dme | 2 ++ 5 files changed, 44 insertions(+) create mode 100644 modular_splurt/code/game/objects/items/storage/wallets.dm create mode 100644 modular_splurt/code/modules/research/designs/bluespace_designs.dm diff --git a/modular_splurt/code/game/objects/items/storage/wallets.dm b/modular_splurt/code/game/objects/items/storage/wallets.dm new file mode 100644 index 0000000000..8e08e7b456 --- /dev/null +++ b/modular_splurt/code/game/objects/items/storage/wallets.dm @@ -0,0 +1,20 @@ +// Bluespace wallet +/obj/item/storage/wallet/bluespace + name = "\improper wallet of holding" + desc = "A testament to science's hubris. It holds thrice as many stolen ID cards." + icon = 'modular_splurt/icons/obj/storage.dmi' + icon_state = "wallet_bluespace" + + // Copied from bag of holding + resistance_flags = FIRE_PROOF + item_flags = NO_MAT_REDEMPTION + rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE + +/obj/item/storage/wallet/bluespace/ComponentInitialize() + . = ..() + var/datum/component/storage/STR = GetComponent(/datum/component/storage) + STR.max_items = 12 + +/obj/item/storage/wallet/bluespace/update_icon_state() + // Don't update icons + return diff --git a/modular_splurt/code/modules/research/designs/bluespace_designs.dm b/modular_splurt/code/modules/research/designs/bluespace_designs.dm new file mode 100644 index 0000000000..e44e566a18 --- /dev/null +++ b/modular_splurt/code/modules/research/designs/bluespace_designs.dm @@ -0,0 +1,9 @@ +/datum/design/wallet_holding + name = "Wallet of Holding" + desc = "A wallet that opens into a tiny bluespace pocket." + id = "wallet_holding" + build_type = PROTOLATHE + materials = list(/datum/material/gold = 300, /datum/material/diamond = 100, /datum/material/bluespace = 200) + build_path = /obj/item/storage/wallet/bluespace + category = list("Bluespace Designs") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE diff --git a/modular_splurt/code/modules/research/techweb/nodes/bluespace_nodes.dm b/modular_splurt/code/modules/research/techweb/nodes/bluespace_nodes.dm index f623c07465..e31c788453 100644 --- a/modular_splurt/code/modules/research/techweb/nodes/bluespace_nodes.dm +++ b/modular_splurt/code/modules/research/techweb/nodes/bluespace_nodes.dm @@ -6,3 +6,16 @@ prereq_ids = list("adv_power", "adv_bluespace","bluespace_power") design_ids = list("bluespace_cell_reactor") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) + +// Bags of holding node +/datum/techweb_node/bluespace_holding/New() + // Define extra designs + var/list/added_designs = list( + "wallet_holding" + ) + + // Add designs to the list + LAZYADD(design_ids, added_designs) + + // Return + . = ..() diff --git a/modular_splurt/icons/obj/storage.dmi b/modular_splurt/icons/obj/storage.dmi index 69e728cc2251494771350ba053be784493a8eeb5..6ff028b18c01a37fcba91e88e3970e268c9a82af 100644 GIT binary patch literal 4731 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
OX3K-O5n${{!UzDvE;t_`=~2VLku|W^0eH zpwjKL_-1nW#ejLNEi@taacp5OiE1(l&qkMjIl}ek7jnfe^H`mPT;Q{o`;!s=S8cg9 z$HuLcj6o-r;`YL`^qN%HipMQ|(W%!!1DiV?TK>5Ad@XJ6&LxtG72Qiuews`)8SZ~8 z69k#^=(2`qvE!JE`}GMIU{$rf_-N9(vtUM{qH46l zL-XQ1=ilsIAGav!Ky&7$#At%!Iz2Ox+M(} zv2o^gvv^6Im_~<4vnSd&&ABiOJEdAN6L4i=zcoS{4MY_^!GWs$B1f5250c0Jgzo=|Ak?TDkU@n zSjYG_rekAldaVRz(rfVNL7@WDER1-@FgERMHX~OLJkjspyT@CWe?6Va5|?AQWVyTl zSt<2mXV1r0l#hr&@;fg3S`;t+GbG5;CUq1XKtrt(9nsWw%+)`(&!ep>H}^$gY*i%= z6c8HK8z~?y{TxTKRTV-soO+kVNf>@`6YE<`hk1+!^&Lr=0gEae`o-ZRM&CecC6Krv z^Nfx9Ze2%hEoclZ1}1>I!(yl@a}*iB&RcDm)LiKyCjNG1C3ebPotMbc`z#dmvu-R& z!Re^h4a5H;OMqiYQU-w>$~ra^jN^jKgRo`N{XU8u%-h;}&Zr-ncIJQ7Xz&IVSxfk_ z=QH51w;I^(KE|v$g8gpB3enf_uus-FZrhCDxqs{JqF|36evo^{!m0#MKZDj~hsYXK z=~Fd0%Cnh?`t;bNsfoLJQ_2=lni6cS3nfo%_d4<$3$lyBFIQvY1Hpgh8 zrWnyjvexXwmIiTF14JjJ^__D&Q~a+F=$M{^dUX_7olv97C(E>dS++Vr5M!v|ym%a1 zjA-KESXqPL?ccq28qBYIDe9&F%Z8mAm_7ZK%5v1P&;os%u#jFFKfs5w;e=D&{O{A| zruDQNT)8f?QO9hD)rtOw{2u>Wbd|-jU45`hV*W<$@a zzjjiYS}!W(#UqV+>t+R%#9VEl*2S4PbfE57TqM~T!H1xjUnP_i{G?8rqlK{Q)@)FU zEWRVJC@6Bc3@&g(;;N}0;wDr7^ii*rg562#OdkbaONCVeD-XM_KL9ducCRv=K4(3X p5oFC$976C`?|;3_|B~mNd&xq4uk@nP5$qcQsK!(EYBj5{{{hfVA?5%8 diff --git a/tgstation.dme b/tgstation.dme index 1344c87fa1..cc35b0dabb 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -4416,6 +4416,7 @@ #include "modular_splurt\code\game\objects\items\storage\boxes.dm" #include "modular_splurt\code\game\objects\items\storage\firstaid.dm" #include "modular_splurt\code\game\objects\items\storage\secure.dm" +#include "modular_splurt\code\game\objects\items\storage\wallets.dm" #include "modular_splurt\code\game\objects\items\weaponry\armyknife.dm" #include "modular_splurt\code\game\objects\items\weaponry\melee.dm" #include "modular_splurt\code\game\objects\structures\barricades.dm" @@ -4734,6 +4735,7 @@ #include "modular_splurt\code\modules\research\designs\AI_module_designs.dm" #include "modular_splurt\code\modules\research\designs\autoylathe_designs.dm" #include "modular_splurt\code\modules\research\designs\biogenerator_designs.dm" +#include "modular_splurt\code\modules\research\designs\bluespace_designs.dm" #include "modular_splurt\code\modules\research\designs\limbgrower_designs.dm" #include "modular_splurt\code\modules\research\designs\mecha_designs.dm" #include "modular_splurt\code\modules\research\designs\mechfabricator_designs.dm" From 0e1ef3872d9ae37949fcf807f0537479a7116e0b Mon Sep 17 00:00:00 2001 From: SPLURT Bot <97993072+SPLURT-Station-Bot@users.noreply.github.com> Date: Sat, 14 Jan 2023 20:25:10 +0000 Subject: [PATCH 061/129] Automatic changelog generation for PR #683 [ci skip] --- html/changelogs/AutoChangeLog-pr-683.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-683.yml diff --git a/html/changelogs/AutoChangeLog-pr-683.yml b/html/changelogs/AutoChangeLog-pr-683.yml new file mode 100644 index 0000000000..14126bd7fb --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-683.yml @@ -0,0 +1,4 @@ +author: LeDrascol +delete-after: true +changes: + - bugfix: Fixed spelling mistakes in the interaction system From 94cc9c8a2635dc48883e9e5b1b1b69514eb63810 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sat, 14 Jan 2023 20:26:30 +0000 Subject: [PATCH 062/129] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-683.yml | 4 ---- html/changelogs/archive/2023-01.yml | 3 +++ 2 files changed, 3 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-683.yml diff --git a/html/changelogs/AutoChangeLog-pr-683.yml b/html/changelogs/AutoChangeLog-pr-683.yml deleted file mode 100644 index 14126bd7fb..0000000000 --- a/html/changelogs/AutoChangeLog-pr-683.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: LeDrascol -delete-after: true -changes: - - bugfix: Fixed spelling mistakes in the interaction system diff --git a/html/changelogs/archive/2023-01.yml b/html/changelogs/archive/2023-01.yml index 585e74fd71..f80ec10d91 100644 --- a/html/changelogs/archive/2023-01.yml +++ b/html/changelogs/archive/2023-01.yml @@ -55,3 +55,6 @@ - rscadd: Added CART_CHEMISTRY access to cart-cmo LeDrascol: - tweak: Replaced three dangerous holodeck modes with harmless alternatives +2023-01-14: + LeDrascol: + - bugfix: Fixed spelling mistakes in the interaction system From 6bf43c94edc2f019a56481f30f03b48e0b1825ea Mon Sep 17 00:00:00 2001 From: SPLURT Bot <97993072+SPLURT-Station-Bot@users.noreply.github.com> Date: Sat, 14 Jan 2023 20:45:41 +0000 Subject: [PATCH 063/129] Automatic changelog generation for PR #682 [ci skip] --- html/changelogs/AutoChangeLog-pr-682.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-682.yml diff --git a/html/changelogs/AutoChangeLog-pr-682.yml b/html/changelogs/AutoChangeLog-pr-682.yml new file mode 100644 index 0000000000..b91425a3f9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-682.yml @@ -0,0 +1,5 @@ +author: LeDrascol +delete-after: true +changes: + - rscadd: Added the Love to Life spray bottle + - tweak: Updated Plushmium Crate contents From f2c0c5b7890a9ccbd63c8d6d86cba7421da2a3e7 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sat, 14 Jan 2023 20:47:10 +0000 Subject: [PATCH 064/129] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-682.yml | 5 ----- html/changelogs/archive/2023-01.yml | 2 ++ 2 files changed, 2 insertions(+), 5 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-682.yml diff --git a/html/changelogs/AutoChangeLog-pr-682.yml b/html/changelogs/AutoChangeLog-pr-682.yml deleted file mode 100644 index b91425a3f9..0000000000 --- a/html/changelogs/AutoChangeLog-pr-682.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: LeDrascol -delete-after: true -changes: - - rscadd: Added the Love to Life spray bottle - - tweak: Updated Plushmium Crate contents diff --git a/html/changelogs/archive/2023-01.yml b/html/changelogs/archive/2023-01.yml index f80ec10d91..3a4bece49f 100644 --- a/html/changelogs/archive/2023-01.yml +++ b/html/changelogs/archive/2023-01.yml @@ -58,3 +58,5 @@ 2023-01-14: LeDrascol: - bugfix: Fixed spelling mistakes in the interaction system + - rscadd: Added the Love to Life spray bottle + - tweak: Updated Plushmium Crate contents From f6b0624d81f4456cd9ed153137e6d67db446e3f7 Mon Sep 17 00:00:00 2001 From: SPLURT Bot <97993072+SPLURT-Station-Bot@users.noreply.github.com> Date: Sat, 14 Jan 2023 21:09:03 +0000 Subject: [PATCH 065/129] Automatic changelog generation for PR #673 [ci skip] --- html/changelogs/AutoChangeLog-pr-673.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-673.yml diff --git a/html/changelogs/AutoChangeLog-pr-673.yml b/html/changelogs/AutoChangeLog-pr-673.yml new file mode 100644 index 0000000000..19a58ddb22 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-673.yml @@ -0,0 +1,5 @@ +author: LeDrascol +delete-after: true +changes: + - rscadd: 'Added implant: Rapid Disrobe' + - tweak: Nudists now start with a Rapid Disrobe implant From 9b00c2efff56bd37ac6a8ef80d81f58acbf2e704 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sat, 14 Jan 2023 21:10:32 +0000 Subject: [PATCH 066/129] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-673.yml | 5 ----- html/changelogs/archive/2023-01.yml | 2 ++ 2 files changed, 2 insertions(+), 5 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-673.yml diff --git a/html/changelogs/AutoChangeLog-pr-673.yml b/html/changelogs/AutoChangeLog-pr-673.yml deleted file mode 100644 index 19a58ddb22..0000000000 --- a/html/changelogs/AutoChangeLog-pr-673.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: LeDrascol -delete-after: true -changes: - - rscadd: 'Added implant: Rapid Disrobe' - - tweak: Nudists now start with a Rapid Disrobe implant diff --git a/html/changelogs/archive/2023-01.yml b/html/changelogs/archive/2023-01.yml index 3a4bece49f..fb8a582dc6 100644 --- a/html/changelogs/archive/2023-01.yml +++ b/html/changelogs/archive/2023-01.yml @@ -60,3 +60,5 @@ - bugfix: Fixed spelling mistakes in the interaction system - rscadd: Added the Love to Life spray bottle - tweak: Updated Plushmium Crate contents + - rscadd: 'Added implant: Rapid Disrobe' + - tweak: Nudists now start with a Rapid Disrobe implant From fc95f2f639d75cb455f2af557eed7e12f405fcf1 Mon Sep 17 00:00:00 2001 From: SPLURT Bot <97993072+SPLURT-Station-Bot@users.noreply.github.com> Date: Sat, 14 Jan 2023 21:31:28 +0000 Subject: [PATCH 067/129] Automatic changelog generation for PR #684 [ci skip] --- html/changelogs/AutoChangeLog-pr-684.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-684.yml diff --git a/html/changelogs/AutoChangeLog-pr-684.yml b/html/changelogs/AutoChangeLog-pr-684.yml new file mode 100644 index 0000000000..832f0cf27a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-684.yml @@ -0,0 +1,4 @@ +author: LeDrascol +delete-after: true +changes: + - rscadd: Added the Wallet of Holding From 2ecf7406ba4f95dfd7a0567d495fdf8587b7fd2d Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sat, 14 Jan 2023 21:32:50 +0000 Subject: [PATCH 068/129] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-684.yml | 4 ---- html/changelogs/archive/2023-01.yml | 1 + 2 files changed, 1 insertion(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-684.yml diff --git a/html/changelogs/AutoChangeLog-pr-684.yml b/html/changelogs/AutoChangeLog-pr-684.yml deleted file mode 100644 index 832f0cf27a..0000000000 --- a/html/changelogs/AutoChangeLog-pr-684.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: LeDrascol -delete-after: true -changes: - - rscadd: Added the Wallet of Holding diff --git a/html/changelogs/archive/2023-01.yml b/html/changelogs/archive/2023-01.yml index fb8a582dc6..90b1c0eea8 100644 --- a/html/changelogs/archive/2023-01.yml +++ b/html/changelogs/archive/2023-01.yml @@ -62,3 +62,4 @@ - tweak: Updated Plushmium Crate contents - rscadd: 'Added implant: Rapid Disrobe' - tweak: Nudists now start with a Rapid Disrobe implant + - rscadd: Added the Wallet of Holding From 0507960150a6b95d0279e26573726387e57ebf40 Mon Sep 17 00:00:00 2001 From: SandPoot <43283559+SandPoot@users.noreply.github.com> Date: Sat, 14 Jan 2023 19:09:20 -0300 Subject: [PATCH 069/129] Does some skirt peeking optimization (#282) --- .../code/modules/clothing/under/_under.dm | 8 +++ .../code/modules/clothing/under/jobs/cargo.dm | 5 -- .../modules/clothing/under/jobs/civilian.dm | 47 ------------- .../modules/clothing/under/jobs/command.dm | 5 -- .../modules/clothing/under/jobs/curator.dm | 2 - .../clothing/under/jobs/engineering.dm | 8 --- .../modules/clothing/under/jobs/medical.dm | 17 ----- .../modules/clothing/under/jobs/research.dm | 14 ---- .../modules/clothing/under/jobs/security.dm | 29 -------- .../modules/clothing/under/jobs/theater.dm | 2 - .../mob/living/carbon/human/examine.dm | 69 ++++++++++--------- tgstation.dme | 10 +-- 12 files changed, 47 insertions(+), 169 deletions(-) create mode 100644 modular_sand/code/modules/clothing/under/_under.dm delete mode 100644 modular_sand/code/modules/clothing/under/jobs/cargo.dm delete mode 100644 modular_sand/code/modules/clothing/under/jobs/civilian.dm delete mode 100644 modular_sand/code/modules/clothing/under/jobs/command.dm delete mode 100644 modular_sand/code/modules/clothing/under/jobs/curator.dm delete mode 100644 modular_sand/code/modules/clothing/under/jobs/engineering.dm delete mode 100644 modular_sand/code/modules/clothing/under/jobs/medical.dm delete mode 100644 modular_sand/code/modules/clothing/under/jobs/research.dm delete mode 100644 modular_sand/code/modules/clothing/under/jobs/security.dm delete mode 100644 modular_sand/code/modules/clothing/under/jobs/theater.dm diff --git a/modular_sand/code/modules/clothing/under/_under.dm b/modular_sand/code/modules/clothing/under/_under.dm new file mode 100644 index 0000000000..fe6dcc8fba --- /dev/null +++ b/modular_sand/code/modules/clothing/under/_under.dm @@ -0,0 +1,8 @@ +GLOBAL_LIST_INIT(skirt_peekable, list( + /obj/item/clothing/under/rank/civilian/janitor/maid = TRUE /* This one hangs about because no skirt in path */ + )) + +/obj/item/clothing/under/Initialize(mapload) + . = ..() + if(!is_type_in_typecache(type, GLOB.skirt_peekable) && findlasttext("[type]", "skirt")) + LAZYSET(GLOB.skirt_peekable, type, TRUE) diff --git a/modular_sand/code/modules/clothing/under/jobs/cargo.dm b/modular_sand/code/modules/clothing/under/jobs/cargo.dm deleted file mode 100644 index e0ad328399..0000000000 --- a/modular_sand/code/modules/clothing/under/jobs/cargo.dm +++ /dev/null @@ -1,5 +0,0 @@ -/obj/item/clothing/under/rank/cargo/qm/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/cargo/tech/skirt - is_skirt = TRUE diff --git a/modular_sand/code/modules/clothing/under/jobs/civilian.dm b/modular_sand/code/modules/clothing/under/jobs/civilian.dm deleted file mode 100644 index 12917d8a2f..0000000000 --- a/modular_sand/code/modules/clothing/under/jobs/civilian.dm +++ /dev/null @@ -1,47 +0,0 @@ -/obj/item/clothing/under/rank/civilian/bartender/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/civilian/chaplain/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/civilian/chef/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/civilian/head_of_personnel/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/civilian/head_of_personnel/suit/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/civilian/hydroponics/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/civilian/janitor/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/civilian/janitor/maid //i believe this one is a dress, not gonna check - is_skirt = TRUE - -/obj/item/clothing/under/rank/civilian/lawyer/black/alt/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/civilian/lawyer/really_black/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/civilian/lawyer/black/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/civilian/lawyer/female/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/civilian/lawyer/red/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/civilian/lawyer/blue/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/civilian/lawyer/bluesuit/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/civilian/lawyer/purpsuit/skirt - is_skirt = TRUE diff --git a/modular_sand/code/modules/clothing/under/jobs/command.dm b/modular_sand/code/modules/clothing/under/jobs/command.dm deleted file mode 100644 index cff9bd3339..0000000000 --- a/modular_sand/code/modules/clothing/under/jobs/command.dm +++ /dev/null @@ -1,5 +0,0 @@ -/obj/item/clothing/under/rank/captain/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/captain/suit/skirt - is_skirt = TRUE diff --git a/modular_sand/code/modules/clothing/under/jobs/curator.dm b/modular_sand/code/modules/clothing/under/jobs/curator.dm deleted file mode 100644 index 85966ab452..0000000000 --- a/modular_sand/code/modules/clothing/under/jobs/curator.dm +++ /dev/null @@ -1,2 +0,0 @@ -/obj/item/clothing/under/rank/civilian/curator/skirt - is_skirt = TRUE diff --git a/modular_sand/code/modules/clothing/under/jobs/engineering.dm b/modular_sand/code/modules/clothing/under/jobs/engineering.dm deleted file mode 100644 index 56e4263ae7..0000000000 --- a/modular_sand/code/modules/clothing/under/jobs/engineering.dm +++ /dev/null @@ -1,8 +0,0 @@ -/obj/item/clothing/under/rank/engineering/chief_engineer/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/engineering/atmospheric_technician/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/engineering/engineer/skirt - is_skirt = TRUE diff --git a/modular_sand/code/modules/clothing/under/jobs/medical.dm b/modular_sand/code/modules/clothing/under/jobs/medical.dm deleted file mode 100644 index 03c124449c..0000000000 --- a/modular_sand/code/modules/clothing/under/jobs/medical.dm +++ /dev/null @@ -1,17 +0,0 @@ -/obj/item/clothing/under/rank/medical/chief_medical_officer/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/medical/geneticist/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/medical/virologist/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/medical/chemist/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/medical/paramedic/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/medical/doctor/skirt - is_skirt = TRUE diff --git a/modular_sand/code/modules/clothing/under/jobs/research.dm b/modular_sand/code/modules/clothing/under/jobs/research.dm deleted file mode 100644 index 1243dfb9ee..0000000000 --- a/modular_sand/code/modules/clothing/under/jobs/research.dm +++ /dev/null @@ -1,14 +0,0 @@ -/obj/item/clothing/under/rank/rnd/research_director/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/rnd/research_director/alt/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/rnd/research_director/turtleneck/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/rnd/scientist/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/rnd/roboticist/skirt - is_skirt = TRUE diff --git a/modular_sand/code/modules/clothing/under/jobs/security.dm b/modular_sand/code/modules/clothing/under/jobs/security.dm deleted file mode 100644 index ee8331c5b6..0000000000 --- a/modular_sand/code/modules/clothing/under/jobs/security.dm +++ /dev/null @@ -1,29 +0,0 @@ -/obj/item/clothing/under/rank/security/officer/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/security/warden/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/security/detective/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/security/detective/grey/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/security/head_of_security/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/security/head_of_security/alt/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/brigdoc/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/blueshield/formal/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/blueshield/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/bridgeofficer/skirt - is_skirt = TRUE diff --git a/modular_sand/code/modules/clothing/under/jobs/theater.dm b/modular_sand/code/modules/clothing/under/jobs/theater.dm deleted file mode 100644 index 1de3d44407..0000000000 --- a/modular_sand/code/modules/clothing/under/jobs/theater.dm +++ /dev/null @@ -1,2 +0,0 @@ -/obj/item/clothing/under/rank/civilian/mime/skirt - is_skirt = TRUE diff --git a/modular_sand/code/modules/mob/living/carbon/human/examine.dm b/modular_sand/code/modules/mob/living/carbon/human/examine.dm index 7b8afabc9d..83c57453b1 100644 --- a/modular_sand/code/modules/mob/living/carbon/human/examine.dm +++ b/modular_sand/code/modules/mob/living/carbon/human/examine.dm @@ -1,23 +1,30 @@ -#define PAIRLESS_PANTIES list(\ - /obj/item/clothing/underwear/briefs/jockstrap,\ - /obj/item/clothing/underwear/briefs/panties/thong,\ - /obj/item/clothing/underwear/briefs/panties/thong/babydoll,\ - /obj/item/clothing/underwear/briefs/mankini\ -) +GLOBAL_LIST_INIT(pairless_panties, list( + /obj/item/clothing/underwear/briefs/jockstrap = TRUE, + /obj/item/clothing/underwear/briefs/panties/thong = TRUE, + /obj/item/clothing/underwear/briefs/panties/thong/babydoll = TRUE, + /obj/item/clothing/underwear/briefs/mankini = TRUE +)) /mob/living/carbon/human/examine(mob/user) . = ..() - if(!isliving(user)) - return - var/mob/living/living = user - var/obj/item/clothing/under/worn_uniform = w_uniform - if((user != src) && !(living.mobility_flags & MOBILITY_STAND) && (mobility_flags & MOBILITY_STAND) && (src.loc == living.loc) && (istype(worn_uniform)) && worn_uniform.is_skirt) - var/string = "Peeking under [src]'s [w_uniform], you can see " - var/obj/item/clothing/underwear/worn_underwear = src.w_underwear + var/obj/item/clothing/under/worn_uniform = get_item_by_slot(ITEM_SLOT_ICLOTHING) + if(worn_uniform && is_type_in_typecache(worn_uniform.type, GLOB.skirt_peekable) && (isobserver(user) || (isliving(user) && (user != src) && !(living.mobility_flags & MOBILITY_STAND) && (mobility_flags & MOBILITY_STAND) && (loc == living.loc) && (istype(worn_uniform))))) + . += span_purple("[p_theyre(TRUE)] wearing a skirt! I can probably give it a little peek looking closer.") + +/mob/living/carbon/human/Initialize(mapload) + . = ..() + RegisterSignal(src, COMSIG_PARENT_EXAMINE_MORE, .proc/peek_skirt) + +/mob/living/carbon/human/proc/peek_skirt(mob/examined, mob/examiner, list/examine_content) + var/mob/living/living = examiner + var/obj/item/clothing/under/worn_uniform = get_item_by_slot(ITEM_SLOT_ICLOTHING) + if(worn_uniform && is_type_in_typecache(worn_uniform.type, GLOB.skirt_peekable) && (isobserver(examiner) || (isliving(examiner) && (examiner != src) && !(living.mobility_flags & MOBILITY_STAND) && (mobility_flags & MOBILITY_STAND) && (loc == living.loc) && (istype(worn_uniform))))) + var/string = "Peeking under [src]'s [worn_uniform.name], you can see " + var/obj/item/clothing/underwear/worn_underwear = get_item_by_slot(ITEM_SLOT_UNDERWEAR) if(worn_underwear) string += "a " - if(!(worn_underwear.type in PAIRLESS_PANTIES)) //a pair of thong + if(!is_type_in_typecache(worn_underwear.type, GLOB.pairless_panties)) //a pair of thong string += "pair of " if(worn_underwear.color) string += "[worn_underwear.name]." @@ -27,12 +34,12 @@ var/obj/item/organ/genital/penis/penis = getorganslot(ORGAN_SLOT_PENIS) var/obj/item/organ/genital/vagina/vagina = getorganslot(ORGAN_SLOT_VAGINA) if(penis?.aroused_state) - string += span_love(" There's a visible bulge on it's front.") + string += span_love(" There's a visible bulge on [p_their()] front.") else if(vagina?.aroused_state) - string += span_love(" They're wet with arousal.") + string += span_love(" [p_theyre(TRUE)] wet with arousal.") else - string += "[p_theyre()] not wearing anything! - [p_their()] " + string += "[p_theyre()] not wearing anything!\n[p_their(TRUE)]" var/list/genitals = list() for(var/obj/item/organ/genital/genital in internal_organs) if(genital.genital_flags & (GENITAL_INTERNAL|GENITAL_HIDDEN)) @@ -42,29 +49,29 @@ switch(genital.type) if(/obj/item/organ/genital/vagina) if(genital.aroused_state) - appended += "wet " + appended += " wet" if(lowertext(genital.shape) != "human") - appended += lowertext(genital.shape) - if(lowertext(genital.shape) != "cloaca") //their wet cloaca pussy - appended += " pussy" + appended += " [lowertext(genital.shape)]" + if(lowertext(genital.shape) != "cloaca") //their wet cloaca vagina + appended += " [lowertext(genital.name)]" // goodbye pussy if(/obj/item/organ/genital/testicles) - appended += "nuts" + var/obj/item/organ/genital/testicles/nuts = genital + appended += " [lowertext(nuts.size_name)] [lowertext(nuts.name)]" if(/obj/item/organ/genital/penis) if(genital.aroused_state) - appended += "fully erect" + appended += " fully erect" if(lowertext(genital.shape) != "human") - appended += ", [lowertext(genital.shape)]" - if(appended) - appended += " " //double spaces - appended += "penis" + appended += " [lowertext(genital.shape)]" + appended += " [lowertext(genital.name)]" // Name it something funny, i dare you. + if(/obj/item/organ/genital/butt) + var/obj/item/organ/genital/butt/booty = genital + appended += " [booty.size_name] [lowertext(booty.name)]" // Maybe " average butt pair" isn't the best for now else continue genitals += appended - string += english_list(genitals, "featureless groin") + string += english_list(genitals, "featureless groin", " and", ",") string += " on full display." - . += span_purple(string) - -#undef PAIRLESS_PANTIES + examine_content += span_purple(string) diff --git a/tgstation.dme b/tgstation.dme index ff4629b3e9..da019f0c01 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -4070,6 +4070,7 @@ #include "modular_sand\code\modules\clothing\spacesuits\chronosuit.dm" #include "modular_sand\code\modules\clothing\spacesuits\hardsuit.dm" #include "modular_sand\code\modules\clothing\suits\miscellaneous.dm" +#include "modular_sand\code\modules\clothing\under\_under.dm" #include "modular_sand\code\modules\clothing\under\color.dm" #include "modular_sand\code\modules\clothing\under\costumes.dm" #include "modular_sand\code\modules\clothing\under\misc.dm" @@ -4077,15 +4078,6 @@ #include "modular_sand\code\modules\clothing\under\suits.dm" #include "modular_sand\code\modules\clothing\under\syndicate.dm" #include "modular_sand\code\modules\clothing\under\uniform.dm" -#include "modular_sand\code\modules\clothing\under\jobs\cargo.dm" -#include "modular_sand\code\modules\clothing\under\jobs\civilian.dm" -#include "modular_sand\code\modules\clothing\under\jobs\command.dm" -#include "modular_sand\code\modules\clothing\under\jobs\curator.dm" -#include "modular_sand\code\modules\clothing\under\jobs\engineering.dm" -#include "modular_sand\code\modules\clothing\under\jobs\medical.dm" -#include "modular_sand\code\modules\clothing\under\jobs\research.dm" -#include "modular_sand\code\modules\clothing\under\jobs\security.dm" -#include "modular_sand\code\modules\clothing\under\jobs\theater.dm" #include "modular_sand\code\modules\clothing\underwear\_underwear.dm" #include "modular_sand\code\modules\clothing\underwear\boxers.dm" #include "modular_sand\code\modules\clothing\underwear\shirts.dm" From 0b9da8e160e6481bac8d9cb1952bc89b4280d9c9 Mon Sep 17 00:00:00 2001 From: Sandstorm Bot <85452301+Sandstorm-Bot@users.noreply.github.com> Date: Sat, 14 Jan 2023 22:10:15 +0000 Subject: [PATCH 070/129] Automatic changelog generation for PR #282 [ci skip] --- html/changelogs/AutoChangeLog-pr-282.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-282.yml diff --git a/html/changelogs/AutoChangeLog-pr-282.yml b/html/changelogs/AutoChangeLog-pr-282.yml new file mode 100644 index 0000000000..8a151ac153 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-282.yml @@ -0,0 +1,6 @@ +author: SandPoot +delete-after: true +changes: + - spellcheck: fixed a few typos. + - refactor: refactored skirt peeking. + - tweak: examine someone twice to actually peek their panties. From 27e999b7e2ec7d66f08463de04e86d08e1d7215f Mon Sep 17 00:00:00 2001 From: Sandstorm Bot <85452301+Sandstorm-Bot@users.noreply.github.com> Date: Sat, 14 Jan 2023 22:11:17 +0000 Subject: [PATCH 071/129] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-282.yml | 6 ------ html/changelogs/archive/2023-01.yml | 5 +++++ 2 files changed, 5 insertions(+), 6 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-282.yml diff --git a/html/changelogs/AutoChangeLog-pr-282.yml b/html/changelogs/AutoChangeLog-pr-282.yml deleted file mode 100644 index 8a151ac153..0000000000 --- a/html/changelogs/AutoChangeLog-pr-282.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: SandPoot -delete-after: true -changes: - - spellcheck: fixed a few typos. - - refactor: refactored skirt peeking. - - tweak: examine someone twice to actually peek their panties. diff --git a/html/changelogs/archive/2023-01.yml b/html/changelogs/archive/2023-01.yml index fd8c477ecc..17cb5887cf 100644 --- a/html/changelogs/archive/2023-01.yml +++ b/html/changelogs/archive/2023-01.yml @@ -11,3 +11,8 @@ 2023-01-10: LeDrascol: - bugfix: Fixed the late-join panel showing job slots twice +2023-01-14: + SandPoot: + - spellcheck: fixed a few typos. + - refactor: refactored skirt peeking. + - tweak: examine someone twice to actually peek their panties. From ae399d1d7c6d7d436ed318420785b14d3e4fbbfb Mon Sep 17 00:00:00 2001 From: Casper Date: Sat, 14 Jan 2023 22:13:00 +0000 Subject: [PATCH 072/129] Fixes e-chair and shockkit runtimes. --- code/game/objects/structures/electricchair.dm | 16 +++++++++++++--- code/modules/assembly/shock_kit.dm | 6 ++++-- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/code/game/objects/structures/electricchair.dm b/code/game/objects/structures/electricchair.dm index c5802b5086..e2dcc80d03 100644 --- a/code/game/objects/structures/electricchair.dm +++ b/code/game/objects/structures/electricchair.dm @@ -15,9 +15,12 @@ var/obj/structure/chair/C = new /obj/structure/chair(loc) W.play_tool_sound(src) C.setDir(dir) - part.forceMove(loc) - part.master = null - part = null + + if (part) + part.forceMove(loc) + part.master = null + part = null + qdel(src) /obj/structure/chair/e_chair/proc/shock() @@ -44,3 +47,10 @@ to_chat(buckled_mob, "You feel a deep shock course through your body!") addtimer(CALLBACK(buckled_mob, /mob/living.proc/electrocute_act, 85, src, 1), 1) visible_message("The electric chair went off!", "You hear a deep sharp shock!") + +/obj/structure/chair/e_chair/Destroy() + if(part) + qdel(part) + part = null + + return ..() diff --git a/code/modules/assembly/shock_kit.dm b/code/modules/assembly/shock_kit.dm index e18909c9a2..d9bc80761b 100644 --- a/code/modules/assembly/shock_kit.dm +++ b/code/modules/assembly/shock_kit.dm @@ -27,8 +27,10 @@ return TRUE /obj/item/assembly/shock_kit/attack_self(mob/user) - part1.attack_self(user) - part2.attack_self(user) + if (part1) + part1.attack_self(user) + if (part2) + part2.attack_self(user) add_fingerprint(user) return From e676baff0e20aef0f8059061e477ee92a005406d Mon Sep 17 00:00:00 2001 From: Casper Date: Sat, 14 Jan 2023 22:37:52 +0000 Subject: [PATCH 073/129] Stops TK users from teleport to a pole. --- modular_splurt/code/game/objects/structures/pole.dm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/modular_splurt/code/game/objects/structures/pole.dm b/modular_splurt/code/game/objects/structures/pole.dm index 9d8a96456f..fdd2bf46bf 100644 --- a/modular_splurt/code/game/objects/structures/pole.dm +++ b/modular_splurt/code/game/objects/structures/pole.dm @@ -16,6 +16,11 @@ . = ..() if(.) return + + // Don't teleport telekinetic users to the pole. + if (get_dist(src,user) > 1) + return + if(obj_flags & IN_USE) to_chat(user, "It's already in use - wait a bit.") return From 56a224a1f8ac6e7f1ff0d3fb35145246788d86de Mon Sep 17 00:00:00 2001 From: SPLURT Bot <97993072+SPLURT-Station-Bot@users.noreply.github.com> Date: Sun, 15 Jan 2023 01:42:17 +0000 Subject: [PATCH 074/129] Automatic changelog generation for PR #686 [ci skip] --- html/changelogs/AutoChangeLog-pr-686.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-686.yml diff --git a/html/changelogs/AutoChangeLog-pr-686.yml b/html/changelogs/AutoChangeLog-pr-686.yml new file mode 100644 index 0000000000..29c7b8f048 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-686.yml @@ -0,0 +1,4 @@ +author: Casper +delete-after: true +changes: + - bugfix: fixes telekinetic users from teleporting to stripper poles From 970a2d64d1e08575478b68a7bb41f68bdfb5d4bb Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sun, 15 Jan 2023 01:43:46 +0000 Subject: [PATCH 075/129] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-686.yml | 4 ---- html/changelogs/archive/2023-01.yml | 3 +++ 2 files changed, 3 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-686.yml diff --git a/html/changelogs/AutoChangeLog-pr-686.yml b/html/changelogs/AutoChangeLog-pr-686.yml deleted file mode 100644 index 29c7b8f048..0000000000 --- a/html/changelogs/AutoChangeLog-pr-686.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Casper -delete-after: true -changes: - - bugfix: fixes telekinetic users from teleporting to stripper poles diff --git a/html/changelogs/archive/2023-01.yml b/html/changelogs/archive/2023-01.yml index 90b1c0eea8..5d69ee3d0c 100644 --- a/html/changelogs/archive/2023-01.yml +++ b/html/changelogs/archive/2023-01.yml @@ -63,3 +63,6 @@ - rscadd: 'Added implant: Rapid Disrobe' - tweak: Nudists now start with a Rapid Disrobe implant - rscadd: Added the Wallet of Holding +2023-01-15: + Casper: + - bugfix: fixes telekinetic users from teleporting to stripper poles From 34507c49b69463a75930a8f077cf4d3a641439e5 Mon Sep 17 00:00:00 2001 From: BongaTheProto <93835010+BongaTheProto@users.noreply.github.com> Date: Sat, 14 Jan 2023 21:18:48 -0500 Subject: [PATCH 076/129] Update _under.dm don't let the traditions die --- modular_splurt/code/modules/clothing/under/_under.dm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/modular_splurt/code/modules/clothing/under/_under.dm b/modular_splurt/code/modules/clothing/under/_under.dm index 5dedecd802..847ba40c3c 100644 --- a/modular_splurt/code/modules/clothing/under/_under.dm +++ b/modular_splurt/code/modules/clothing/under/_under.dm @@ -1,3 +1,8 @@ +/obj/item/clothing/under/Initialize(mapload) + . = ..() + if(!is_type_in_typecache(type, GLOB.skirt_peekable)) + LAZYSET(GLOB.skirt_peekable, type, TRUE) + /obj/item/clothing/under/Destroy() QDEL_LIST(attached_accessories) return ..() From 32159792ad71117d40fbab4eb4d2051e57be6cfa Mon Sep 17 00:00:00 2001 From: SandPoot <43283559+SandPoot@users.noreply.github.com> Date: Sat, 14 Jan 2023 23:47:25 -0300 Subject: [PATCH 077/129] Adds a button to toggle the capability of interacting through clothes (#283) * here it is * damn typo --- .../interactions/interaction_interface.dm | 11 +++++++++++ .../datums/interactions/lewd_definitions.dm | 14 ++++++++++---- modular_sand/code/modules/arousal/genitals.dm | 7 +++++++ tgstation.dme | 1 + .../packages/tgui/interfaces/MobInteraction.tsx | 17 +++++++++++++++-- 5 files changed, 44 insertions(+), 6 deletions(-) create mode 100644 modular_sand/code/modules/arousal/genitals.dm diff --git a/modular_sand/code/datums/interactions/interaction_interface.dm b/modular_sand/code/datums/interactions/interaction_interface.dm index 99c24c4420..ce2ecbaec8 100644 --- a/modular_sand/code/datums/interactions/interaction_interface.dm +++ b/modular_sand/code/datums/interactions/interaction_interface.dm @@ -124,6 +124,7 @@ && !(HAS_TRAIT(get_genitals, TRAIT_PERMABONER) \ || HAS_TRAIT(get_genitals, TRAIT_NEVERBONER))) genital_entry["arousal_state"] = genital.aroused_state + genital_entry["always_accessible"] = genital.always_accessible genitals += list(genital_entry) if(iscarbon(self)) var/simulated_ass = list() @@ -139,6 +140,7 @@ visibility = "Always hidden" simulated_ass["visibility"] = visibility simulated_ass["possible_choices"] = GLOB.genitals_visibility_toggles - GEN_VISIBLE_NO_CLOTHES + simulated_ass["always_accessible"] = self.anus_always_accessible genitals += list(simulated_ass) .["genitals"] = genitals @@ -222,6 +224,15 @@ var/mob/living/carbon/human/human = self human.update_genitals() return + if("set_accessibility" in params) + if(params["genital"] == "anus") + self.toggle_anus_always_accessible() + return TRUE + var/obj/item/organ/genital/genital = locate(params["genital"], self.internal_organs) + if(!genital) + return FALSE + genital.toggle_accessibility() + return TRUE else return FALSE if("char_pref") diff --git a/modular_sand/code/datums/interactions/lewd_definitions.dm b/modular_sand/code/datums/interactions/lewd_definitions.dm index 01b529cefb..0ea0a87ca8 100644 --- a/modular_sand/code/datums/interactions/lewd_definitions.dm +++ b/modular_sand/code/datums/interactions/lewd_definitions.dm @@ -20,6 +20,7 @@ var/has_penis = FALSE var/has_vagina = FALSE var/has_anus = TRUE + var/anus_always_accessible = FALSE var/has_breasts = FALSE var/anus_exposed = FALSE var/last_partner @@ -83,6 +84,9 @@ lust = num lastlusttime = world.time +/mob/living/proc/toggle_anus_always_accessible() + anus_always_accessible = !anus_always_accessible + /mob/living/proc/has_penis(visibility = REQUIRE_ANY) var/mob/living/carbon/C = src if(has_penis && !istype(C)) @@ -94,7 +98,7 @@ if(REQUIRE_ANY) return TRUE if(REQUIRE_EXPOSED) - if(peepee.is_exposed()) + if(peepee.is_exposed() || peepee.always_accessible) return TRUE else return FALSE @@ -116,7 +120,7 @@ if(REQUIRE_ANY) return TRUE if(REQUIRE_EXPOSED) - if(peepee.is_exposed()) + if(peepee.is_exposed() || peepee.always_accessible) return TRUE else return FALSE @@ -140,7 +144,7 @@ if(REQUIRE_ANY) return TRUE if(REQUIRE_EXPOSED) - if(peepee.is_exposed()) + if(peepee.is_exposed() || peepee.always_accessible) return TRUE else return FALSE @@ -164,7 +168,7 @@ if(REQUIRE_ANY) return TRUE if(REQUIRE_EXPOSED) - if(peepee.is_exposed()) + if(peepee.is_exposed() || peepee.always_accessible) return TRUE else return FALSE @@ -184,6 +188,8 @@ if(REQUIRE_ANY) return TRUE if(REQUIRE_EXPOSED) + if (has_anus && anus_always_accessible) + return TRUE switch(anus_exposed) if(-1) return FALSE diff --git a/modular_sand/code/modules/arousal/genitals.dm b/modular_sand/code/modules/arousal/genitals.dm new file mode 100644 index 0000000000..78eb513a88 --- /dev/null +++ b/modular_sand/code/modules/arousal/genitals.dm @@ -0,0 +1,7 @@ +/obj/item/organ/genital + /// Controls whenever a genital is always accessible + var/always_accessible = FALSE + +/// Toggles whether such genital can always be accessed +/obj/item/organ/genital/proc/toggle_accessibility() + always_accessible = !always_accessible diff --git a/tgstation.dme b/tgstation.dme index da019f0c01..110012f0c5 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -4032,6 +4032,7 @@ #include "modular_sand\code\modules\arousal\arousal.dm" #include "modular_sand\code\modules\arousal\creampie.dm" #include "modular_sand\code\modules\arousal\genital_sprite_accessories.dm" +#include "modular_sand\code\modules\arousal\genitals.dm" #include "modular_sand\code\modules\arousal\organs\breasts.dm" #include "modular_sand\code\modules\arousal\organs\womb.dm" #include "modular_sand\code\modules\atmospherics\machinery\pipes\bluespace.dm" diff --git a/tgui/packages/tgui/interfaces/MobInteraction.tsx b/tgui/packages/tgui/interfaces/MobInteraction.tsx index c53162bb0a..f26a8380d0 100644 --- a/tgui/packages/tgui/interfaces/MobInteraction.tsx +++ b/tgui/packages/tgui/interfaces/MobInteraction.tsx @@ -34,6 +34,7 @@ type GenitalData = { possible_choices: string[], can_arouse: boolean, arousal_state: boolean, + always_accessible: boolean, } type CharacterPrefsInfo = { @@ -254,17 +255,29 @@ const GenitalTab = (props, context) => { Actions

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%0AUd}pk zFcP8PC*5nK%D_$Y@Ap7d4F@=bKp+pOl9qK+RVs^|C^h?0fdRw1F1?<8{k&f3OR*+> ztkiD97P8H{_4y-Mb^V6ex(lA{7 zUX)~`gDAQv2~xU`%U(~AKEDTL;u(J;iYGw;#-=sUZ66*fAZ|}w+dx3o7%Z({d|jPg z%pR}Of7bwT8xEWUCz!1Wj?Me-0pmLN+oGcSL*lmlRf()9X#pw#{bNge^jRq7eT=TV z9Tol5Lh?1#hN{y5$m@^yU9akw455j_LhrZRD z3Zd}62L;V-kO-~Ml)h>h1Nw#9;%V>SH~!v^INe<&kdl+QY>p>&lK3>AgC`rFv&oW0 zasgT_XTXa>MG;ltdp`J-t2EDlY$x;@Q4Lt-X7UaJ&qhulYC5j zUENn&rJ2M5FDV12#cTHPcoh02AmE-lC3ZwPPg}AvbkBe$Kqc#82bh|#M9A^A49wA# zj5#5z_SqA$5mhi{4fGDiuy^ZfuZs~)dx$)7iJoA2DdGYkXN+I$e40@IGCK>NLkpHU z&E{UTn!x7lI)bM1!ri~rhD%Lm>0iW}vHC8qe?vsP;{@|yQ#ee95vp_8NFT71oy3yaB1~*_`nYkRpL*C;`&?*Oh z_l70`;7eR9@nb&ca{%#=CsClm$oCPpd&=`6d;+~#CWdXNXF#Oy0iekJn* zXkO`>Z{Rv!BrdZ05M(NRoP-Gq3Ic%NhENMK-KV=Xxf1k(YDu$>RvF=@oJc1{&e5mq}IRU5?Xn$w3 z254!#>0f|85Bl?|So2v%WU0a-E6@aPGe&VgPvGnEQ2zr_0=JoJr;!Ua(9w-ZfDN43 zZmCfBAM9qNUOid~bFBYjYng~2-rk)2N&WRkwfvq%>+u9qUivkSuLs`s?|g`S>_#3i z;u|ZNZ$jCm_uwbT8Ob-H1&=TsKM>^!|GlsH$(k<0UbO2fp9{Xb;V~DsSVoKdIX&aY zOz^~a-)&*nk1(5$YMnm%dGGPc`<`{9^}74 z$B&;XNvh)LJZ004ehP#!ch1dbw27^&zC5i{;Q(MOzZL*lHkyb?S|Q}-3PX{vOm; zoVsaVqcEeWNRKx=de!nt{VzT~p8Fe^=a29W??ConIF&@o-3AfP!Ol=SWzsBs@64=C zH0C*Hs_J)PyLF*q;r;dHZ%W@2U!=hYIPB*32cF246uuj5@HyL4d+0M4m8+6IS%7VN zeZ`i~GkD7JH@6V+&_l-}s&$_tYm5KcEysr{77$BgJ|^z((b3!5$ecDy^+frP1F}2F zj{TIBk%Dc2%vw4LcC@9&$nSC9RI;;C&KJqZy7u#&Z6(<62QzU~RDZHpKhhyH6)<`I zrso%y4PX24TQ^DxyM+_3vsWB_*|Q-o|z|xwidf29i>z0yaLl7xHlnT11%9 zL(&mTm`XHPV5S_%M+BlSMWVn>7}k0;{t%)b925Ohkitkbt6C&a-KW~2E-ov>+s;I_ z@yW)*>b4)SaEy?aH_wP849GMy3p6u>EOfmrBslKoSFcaNYi4$8Dl`Z7y0ylGumg>T zn;YN#_dfn9BY?LOx}R()rR$YPNdw5!>{-UvR$pL58YnD8RF14)d=AqX%_MU_^Yh3* zN%G_51@D>@%U%1|BClW#FM&{UCTj-WQ_-f*8hX?AKWH+#InmS#kD=9VG!x}n&9;_r z{$I1g3NA?)S#7fvbLUL;1T9-;jw}(T*syOV$842XNlq@PN5BCT5Yf(z4@A%HvI&}Z zbpq0HwwMXSEhr=0uj)Izfr}<=NciqUU(vb5itq8<#7MhLrB|K|CdOwrvDgujqf@Pw zX;Gqpo3gu{1mj~+!!4JqXn6Osb#y>X&0X-Rf=+~8iO$%Idyz6#iVD5&O( zZ`{esRl3%ySI|kg`9NvOb!?8_J~8o}mWJkh_Mk}3$yE+i2Ot8?+J?#hl%MTl{Ih6` zJGI7Qs}q-{nQ`{abC`lA_$Mo%u?_oeE^%Z6%s=y9u-8f#WkNcT09{-d=CKrE zBCAOn(*#0}o7R+w14noSB;@0Q;S2%PlOd&FnzFVnDRSHg|7|lhbHuQLkKTc9#U0m_ zO7urzyppxD5uH6f2xui)y$wBnhLw?qupxl=Od$ZUXM_k%*5hYC>b@6qgWhcVvQJ&R zghfE!ds%(zovja|!S)DPa@Ael$-Ij5Sh`Sqq1to7k$qB81Vs53p1fFO@Kkn^vvpe(| zpKtc0#V=~}>G}gv)gg8_yW58-*;k#352sMNzsjqP$gUp5zkHOQTI`Z~`-1sL<)1>O zxum-Od8tiH4c+?+e~QB3pw6LRPj`%S4IayMDdQxcFV=We@8YcK;!+Qy2cu-YD44}% zXSuk0`*pn_6{+&x8gBb!^=LJ%y;U+h_pZ?UV*Ke~7=G6SE^9oXK2i$B#oM^FfsZ78 zD}i%c91NVTIAvEL!f@}H?a;qAo{js8Ua{OL-fNut9)l!vD34`7LOYb8-EYuSCO91g zFy^@1DXqo6td30#kr1od@HvtsAth0F-e*<4YS-LenBT>(ehsxDV5gI{eYI`V_eqaM zE!@hluwZj@=S*;Z+Aqs<)G4y=lZ`fC2zoEHk881bM;zB0j;)pLUZshwe6XsU1o;xw zTf0Y)G5|9^m&DUgORm*cd+>xeS&6tQvs1;lH<9uBuYSHLQyZ?8*Yku?FWzOW#i>Ol z+R3eEAa4W=EBLM%V#X=Ohs{d#W7>pZvx!Jy6mJ#>Ab@i*G~RGoK{MkN2_nI zptFZnNFEtqvmJuSmiKxnfmI%pQMG*1uRH~vvQ|aOu`jXtZbo8#G^UkT_pZKO7~{Wg z5gzl;GyHn-a&}3OYttiSXdQY{pD_mO%}L|k&Q-X|n)f=eRA+(35;vXRGeZr}SA$eZSZ!f*W47U|x;)dl6)x2cnxMgVDlDCcU*6r_!LBTQ1=~yp0xbGZrx?O6%}J*0 zlaqt(TwGW!&G^nf&!(N*xZE@I@E3?hao2r!vO_D6%a~Z6B&PnBY1N^+?~nE$sr=%Z zs*_fs$9+&IPmV}Bp`U4K81lDb-%x=g3UnPRw)kTdA0X<|BDOBLRe(x<#-6jUCA9HY}=Qp!U1#2CkGC{U)Wx! z{Mtb%-PrhC;z+{Rcj8weRZjUW*zSB6;uj$>y|(tM#+=xW6gXpaDI)5;nnHY&`5a2s z%wG*@qD3%sFFe1((Lr%Db!#yp>Mkf#nJ$QXF7)U=)U#E5wZdgUaf8EcUU?jvg!UXp z#S=7JkHKUmpgQQKeNz>*4o1^hES?f5L0L{X%qV7No3xa{ivsK1TAd6}ho6AgL0{`O zM0L^LVh?JPBYhxZNN$pLKT6f$iW56Un!x0HEE+4r1h=r2U;_bz=T(ZBhHT{MmJ@&E zq#Vb&T6ttoC#H`5(W9tDLu8n$tJL@%P*X|~y$8-)i#?c2r*r)BJpRZrIIz4!<~{t7 zY5(N{u<%?hhEkFFb~V-`cVCgdcCTj}tE(xAooOAV%|nh)MSs^#-Bp#9HUx9{vJ(GOm+jDHcl5?R^!ci6r$A|BGD~r69eq>PH&&G1 zCm^N}a4m^KaV&tQ+1cf#Dl0W7B&A5?F~$yTiVkWtzo@1whpJ`lE}@b*`rXi~1ki!hUvGux()6 z*8^Q_eNhg6qIX5Hg9iJ$&!ZEY|3Svj->lQ@NsxLeo4Pa*a}gVgzImk#Biz=!8h!4+ z@(WfWEvBN5%B(9#6f0fQcaJBN59`cOqKn5uToflIfu1kIr%D zrZL*0Sux>#WJQaBGwOrvv*Pi)92|IEcye-bJCP85o>jeUky~Gz7%xjvDAe<)#g^xq z;DXF8_jdNuWy~PMp}C(@+XOqf_jkxt(rW+#bWYB% z?PTC?TuyLhrb>rK(GkQ;$M`@>L(|RII7}-Y` z6{OE{SXY;W2EbcAKk3Yl98NO?7Qgzj6h}w*83@l+Q41y+U%o1{q!zZEJYRex{c3#a z#_O|al8S$}xzD2`UF)GgFYk*PUbPc}p+D~Pc*i!xnUhtd&5`YIo$zG9-VQEg8Gk#` z-`q72zdrN%O3bpms_v**><~ZARzTYw`$=ef2cv(6d9mJUrgC3GrZzrOMsFGYS>pmd zPAKzv0Q%~ZRm$nC!|j98Y11fe81=}=98r`9H`7IwdWw`QuDU42Wx_!F0-SUy}CP~O%rXyro9%u%&dJuv9utwt4bUyV+ucih=*B^h{bl1On=yh z+GBRzLpa#0^Pq*Kbz(goYG2-;p2l0+H#$9vR+?8mO}JbTW4*_FNN#bNzzGSEqV~Lu z*JcIE7of854}Mc3{wO|uigMNl2@1WPCZw3nhBSyX_Zc|8aU@pH!YKYug~7BJEdvKH z-?I5@)_}Y7&G)wv;7f(=`B(9EsGZEhB+9aHQl4;7ET8R`NEIR0Dkt)G?h7qsR@Mgd zDCNB~P#%DE(eJvu&wf@KP~kH>m#PUMlKsF_Jsa521Pk4!2lNG^=R)bhPWs2cM8M+4}ho;>HfVxY|rKZ(s{ra)q z7xTs0;j{n%I!9pM^6zyh0)XoD!8ZUnH38D=^<-7sTG__T?OR8}oq!!kq-RAmm~%ym zJ8zJtcBhM;f%-8Kpg#PD>MeHcb{#W!q305G)~V3!tGmN-j~`|fgWgVtMhrleHCu$x zO<|$zzq4kYE}z{GN_wpLyvK1xzi4Tx^k>AP%%%VA$LbI$*P%@KHRxj6tgSe@5o(vn@ONkTBX!?gn(2t2cysQhwkO~C zWx?0S=P7gBjPZpjH8rQ7$rYbH11UFUEz-BS^8b8zZiRfZi9WYRf%DVi$bqG-V9I~7 z!Wt#tX=QOzfI@-7oY6IfQEtS$~ye2B+E~g&>X-lsZBezsktmnWjV{AF=KA2#L(+ z?qq9k%Wxa1)Z^`Jr`B2T;_U=RfpdrKD^=XquNPD+j}OXhXHT}y@mG+fJ*v8${PoW$ z5CN}Gia$cndv66n!QPhG+a4qsFE;9!-ARsc!i0DnIj)}HzMdW6z|pWS7mK(~yBA*j z3bd@Ip?2$-1~iTM$)K4B_SMcFe3M}SyOB5>!DPy|&d)rY7siS;@h5hGRTz&2_P@Ps#!GxBsZdP=QHA??>fAjy1KQ|~oh$Zgsn8!je2^_3Uk0h|5q|%y0nSgnzm;C6JJebOwumSpsIJQ%%Yt18s6H_Sf?o|l0ZmWKcGNwL2Pe&k7 zb(133<3U{MBsj8|4SZ<@YXk&r>+$J{#$AtutvfoZcm0K=MI_7a%T zBNRUfGi3OBc=B9rfv%b8-DtSAO->z1BWyxb6~h0e`iSuGD`K|h>LRopF+zK|mG zBxGV}u_+WGMG|Qlqjp56a#BHSc=Zq&LLEs8sveYYH zhtTOm8;04ol%xjR>_DgeXn)Z9jCWmcXqE2q&Cu4P>$hVm8V6{z54CUv8D`2Cvn=pK zcV0$MK@uzM@otm}okgk#iQ%X0K02icy%hhQu>ewof^zA#6M_1xQFm3MB?QclgEFRg z<8Gt+L^F$6mom5eFES2)mgw)?Uvk~%^l$nx;;@GdRqES_@Oxe^|Eek@G#8IW6ps65e| zEaW$%nuFUEWe zg3&z>zOD9+djmX~Y?%B9_L6^l{eL4^pN{aG8&rf|_xAOmy@34RJBy0{NuGBN51W7? zuL=!W+hYj-AMT7`>q&t6r!Pm9sKI+WCWHa(TMs$I8e|lA1*z~fsss{W(Uniynx9~v zW(%!y>zqIid~-}}4wuY3KBFmpI_&aSif+Ru8{vs$3Q(z|ZBH@>_o3B-NGP(Mh|G68e6t+LAQ z0G^z0Iyws2JTT@L6PQ@W_`0h?o8tpUHzq>ulzgyMR*kaKLw*m#4%)j@BhLg) z-r83Xrt`Y^Fs8BFa;?yVcE4?5)d>~;|RtL!fdAdTfB|IUUr$!7dtF}Sp62lFec z310QK>j6(%P`|XItjE9vIuH0vRg``8{v{6Z#d|yzkqy)-;Ana1Ko`{R>V0fOkLqXq zFpM+b_bcnNPHPG&>0WpYadOzB{iD*x=(y{$SGll5NJ@VVOd|C{facf5$8JEgGTvAE{FlZ*eJwrw#8E+$OE@b z@xR>pT*B7QZO(be)guoedbS#4s5#M2Qi6C_sOY4UY+)aP?1xc>yoFM<8Arx8kFez0Y z7ktN{K0=@kXB6<4(Lx&wgh)zOL4~ogO+v^tr7*Kv@nkQBHH!~hkGybzrCH#z^IF=I zRdsKvcGufiAds%U`Z}hR6ib$};rCA|L=TO#OUNvrAmb-EO?eP;`RtO_2}`(&zIkQX z?swm4ZqgZ0U~=at7ax%4@>Uj0>n;oZap?u4@wtx1vtGK3`dXNqCJ^9f%N6^xsjr^5 z_v{3!JVy8v%h1X>x?rm$2xn2J;EugisGi*6G2r-6Meg1?F0vyBzU@g@d60C0{?;Ta zl+5x&z|Hrfh%w%6doJAiq(kiuTRZWcdif_r33$ddt3qm3oc~3U9zx+y#MF|ZZaQwP z0kde`^OHr=NKy4o(mL9Q70EV^IaikoG&`Wn82joO3I1yV^^|fV{bvLg(6`4$XJl$& zL7Sz$l0=7E(jli$W4@M8JrJ;pD(Z947DttzE+oS;H(6}O&SzG7ri$_8DlZXt65W(` z)F*<1(i89L2;(}-J|X;4|Lm3duueP>+dAG|!bbgVvZ=!hFBzNEOiNZvp5=VWdAaDI zP6jpCT|({MnQjx>2j(xXBl5Gz9ipr>{jYa zhW{eLvrH|?kfx+>?|pms+KW#74%Sa_=Avy=nxYPt>c{}g&A$7aJ9pb3cJpC1jRDYZ zmVDdRR^%U^l47g$^6ppNQUWVlmQC<;2I|W19S8W@@hwx7`gsN8fhSI5QJ>zXaaSCG z6ODfh%+{&z%3q$gvSILCm&5J z9-vZalyhi0N1{jYRvkMM^(PLAa}aJ2UF!5znt2ugSfMeoK?HEa-OE~jX^A7W9SZm!wErI9 z89Tx6++x)R5v;66*SV$obyb9RTaIBXR-I(7N130eDHz z4QQFVJ+>IqwOpA?3Ld5dE(mUJU|S}tR-K|BlL-iv{66EM*&1;uxvpd91|Iv8Gt9Wm z9Rdy-0`^xGeYS<|N&YD`NFo$y%t&#WuM!yH)f;6|uvcuMMoJsC?X2a(a?!XqubvQa zQwy|9#Y=s(fZ{r;vqIcI%I8|{&D5J;uHX@6l!tC4T-vtADz4@Ax%A|4M$9p#H|uJ* z(t-1bFO!Ix5-wSrOJrBqMhk?5{{aiiZeNG$KR;xJq7HvB2Ev`S;_TqnE0J{Y`jyBa zEh@vs+Z4c1&bHk=!v=I)^S(&~-#q}yI+msU1AD*Yj<=Rl-tb7naF#scB=~EKLEGY6 za*nJ?@OS(5&ziL7NQq6FZs|(zId7AP-M(8Ek{REu0(tj|DMvRpb{?<76j6*nA-sO? z6rQCJ-N)u`(Ns@g!5;#9DHzZ?{1pXbv0pLEc{0?Kb$8h!kNyJLtmcw-{=?9)9SAV{ zjTWi(Jlx#3G_ehqio`PA>OB3$Yq3@r){Le@C z5R#@DprS$}xSK`n?%4g&zYcqUJ?VHLdARPHB{m;oV_RH#4{l~&K{CeY2TkFu|Lo9k zQ8tIB5Ep5HdS+>Wp{ZuDTysE@$1d^)3_b~gMF+GD3t4rlVGz5C=2{{ zlm2df^3hAm{!p0%N=Gb?=Wc_=a=fA|^!p1k_SAe4LuJ7e%cz(D=*)^QH(^eX=cgvH zfX-bE?g>_|e;jIVv_Hw+lZ_x9#LCqh!E!P|i=Riu|flt97mH;AV`=-o3;1nooqLYOd! zDxa5YU#Pk%0)9o2;7&q=+S*sI7Nr3XuPWs%CU3e2?CDLEJ^?G$i)}AF#{|-l-A_jD zb^ozo1h9X*g(Rw(z@-bkUH4iUsDcj|USawT^m&+DEOht?usTz*6^JjZ#!E?;7rNeL z{AW&qdnH3xy`*HmfNTG;u5iWK|0AVBbqn!jGzEET+Md1&=l-8Y=_z#qeEq*|)&IYT zf4}Iwzc3W+BnqTAqB8 z89u^8XJ>sfee`#Q9-UgO>$sWLun%>6nF@2m*(b_Q$t=zJbUJkw%SklgbCX-hpKhYy z33hVWVfP!*I=-;^H7sl?Ncr@uhn+IQryV(V|8JuDl@01Rxp&y~im>h)$&VM2?7HY; zeTll_Jo~SsLHV2%^Tc*RV_mQfnJfN4;#wKc#$vwdlpdezQNwD9a&mIq)>G}z0rSdT z^2n9g&Yzjxf@Y!foP>>$4%_t~8K?DKki!@!#9B+NVSX0>QcZ$$&myauj7Je5d0g7w zo=3*fGi0lJEcCY->15?t1v2hiIlP>x2@pIs^@2bv?YGD0c^hUOVepP+IWQ-~G~p0c zKFUy^D-5Awd1D7u07fIX#V6|mmORyj+6B;aKZR~wNF7z9A5SWthmqz?J%3-1R(pb- zGXau_s}<`%&EAajRYWu0N$aOMgO+KWzN9eNh+fbR!-OTfg1q zU>)HR_}tn-JlCS|EaCX?K-;6A*X}LU3<_#KduT%&4njMOP&cK_Vhuw&t<+B$S##)f z%-D(i^ob6VR-)n%Z?QdHBC*y1n>&VtS-yDJ!hp5^sfPcr)m$Ihh(a+UJXi>df(pl# z$Ebx?q1g<*NkzeKE({7ZHz&u`3?n^)^G^-1X{b++a6#CNs#L&7a0p#|}@B9Q^g6!&Rs59xPtmRRi z-6aUWuOeaZb>!=;tRABf-q5ZXQVD*}^c9PEiX!i}W`U}gx(==HZ3;XMp#=!Qxy-M6UAi%>@!T%Xq;?WqcW?qWxCSdx+<|kCu_iE`}9n1b~W03FC!xEe` zW#z@Zif=2d%8yS7to%yYN{lgaP}t@XO5*n%hPZ79%NI}&C`q;iPV0%W_FzF43j(y2 z6MYT#@}u?C-zhfE;=yz<&7mBhiv`(eYlDT;zs+4|jf?E|oI!2~vR(2Sp1)-(kVg=(}@gm!$`hxwp{D9<} z4)fh$YVzQwhY8XxhrX^mVtfE@k_B=Qkqz0_%^kgux`lEOZS(bS0vbB5YiJ@xbe zYnC9W8Be-3b4EO}0S!Z5=SWJ+(s(@VA~#;Qe3Bf|$di4vk@2ua9$R#S)U30WO;nw| zji@HNXCWYFc21BxXFq`pm47F!kt)xR3nlSxWW<`&So_MH89kl7v;qh>noB@Hh$`MF zx1;Lw+LNZD)nvd zY52gmujnz1zyi0gGvxLK~|`SS}Dl70w?~)-H>EJW7NbY3rA$> zek1oyJ7dGeCZ1f1Mo3%z#rYp8@R1!`P_o?E9)GqjcLIVMD#UoPZdW0LY<_y!n{&22 zgM6!noYi$G^l@($s-L|Bbuyy>5!GlgM=C}a4>4^)v0)iIDnJfEgEyqa5&&-2K{uVX z5;0TUy{Q4&tn`mw&FX|FpyIA-zvhlmgnA-_D9Ru83txW&2;VavG2pn?c3w-X>8hOE zx31I}EH+3~su`S8B~CY!3&Iy2-cXfigs%1eXUky<=P{z&Ko>{MUFT?($3ER_Fx0i7 znfrIRd#SB+=REzbDw6aYHqfI95ve0%@4axfjg6I{B7&KK4)hB)3 z5o}cqv{-Y&(930p7@5Nh0*0}~&(|t;KaL7_%O3Yo{Z2Q(L!B2R3I)a8|2obggxpyS7JXR1j z_R%SJf?v!Ewsx6MY03S}qcGN?jilp6*E5^t&CmYQl*B&CbBd+DluB{wz_bPGB!u^x zZQ%K=)7w4V)!Cn?pjAeTpljA5EbJ;-r?aBi6xP3`<^~ndX)(nR+_9PBuD$C3lwV_<9{`hu8xvYeD4e-6!?t19Gy*Fu%+Yu6DpgIsv$mt5-Z=_g_|B2FIwTJ4qRO{N_COVo^yTS>5NQ2~5%g1t zdc(WL%x>jn4KggGdhUrAI8Y*{=xAk%SHSDmL5k@gt5;UJ3I0d{G z0}CvLlD8fZ0j)*qk9x-S1*p5?^rU#U2=cDbSBi~YGR1tY)O3y8Bzi;c&o@#&9+T@F zk9q3n_-&L7+n)8NBHB}KdT{hf&K4#M=H@g;x7x4&QNPtKbcS>P_4vP^Q4lk1#C6q%P4EihxcQ1z* zJKd%;9`Tk~3$&*3+AD642=B-)>2yT8Rh$F@T z=)~a;#Dn>oPB&l0t7S!!U80bq;wN9YzzlVE<*(-uii|E1H_qGuitM(Begt|&-UNpA zrx{G)JLvjdQGVcQoB##v>+EAjiEeb6-V)ngl}1kR`dr5{>Bpb9TGz6HycaMP@{-$P zS-|NQB+Ab7_XwsNuh=R<3x*}!qhZzGD|L9mOlH6Bx!Fv9CUOqk%HE?#ignxq3EcI@d-D3kcqlJ^E~O;6W7%WC~ZaUEt$(K-pU+`AB)8v~qrBB*rY z3O(s!I9kMTGpsEZ=W*bt)HjE2?+E|1X%uO(WGlJft&ZDB0D*(#bsQVM-3Xa=Snyvu zJD3-U?mHXre>RmmLG1r4`VhtQ-*i6UP5!?ezO_Nsd_QCU=-z+I1%7K-su1*({Kw7m zBhLL2aB5K-d9?;8wO;^_uJiS2;U#6Jf5Vhz|HR#@{ue;Hkv6wTwh=kYLNSaQ?>tEoOzWbX%+doD8He{vR z8A1-2^u~t&W&)+82KM#;c~_39U}mgUHj>gIj1T_sF$_R|4zB+Ocjs{@dM2y4=5v{yjNDmR6>j}yNmESYjfg&`!r>P%NMjh zl+iqQ^RVC~Wb?R?R#;B%*3d@-*2IL3*~W%~ZN5rp;@JG%mhGMyIg4>=b>Mw0OzhAV<1*rX@9Lf?j$caMarDwwZ(ujcwah$({a z6eFHSZyArG4xS!7$FbujJOi!CgF^#iS6}ZjN54O*EJhXRA&oh~X7Zd*OiXmsqIGIJ zIShTvI90y2DaEt}GF9Mx+o^=efq|X~P+Dy+lNc4qITU;bS^T6%Vv)?Z^JN|CACT`( z`X14M))Swmh8gRCRV#je_wYD~qg+fAkeo=X$QDvTvr8-bNS*vlG{|LXmICyiQN5>Y zP7*}I%-P^}jRLIt2G)lGr$er|rIj)Gxm%hh15_j=~Y&3k)e^iZ8) zEzi$yT|QB5uFz}vZ^b?O4y!J zJCWf84;ZFwTlafGoRYWQ{su;8a3UdvY7k!Jc}^t#2Wj&y^iTn+gtSgG=cT`$Ix=Uz z0h5UVj9$}dQMB&g-1)VC!O=AN@%j78mG!M5;#*K>`CX8&3HnXqNt~iX9Wy;EJa-O` z*B&Sp6fLKnXCaMf3lNHR+(%+%qt}*2CBj7^Ll>PQ%rj#6kRc4kCu5l++V?(5?DqZY>lYB^)ATjmNfC$g@9mNb4wWD8=>_lOlaXcz({>rYbVooN*S z9&OYP`T?IBSzo~DOa}4VegNHv`9X8eq;*iQ=zHcuY;fqFrbXLw5ods>x4UJM`bFY0eXnMdkN(pC7^}38Mk98L{uusc`+0RO z>7=~{#RvDnl*PaV2om!=Hg(=2X|kf>w3}aNb+vzZ&+9G|=w~;?=vwhkDM;@JmGxbb zpk!Z9M@L7Ro#eKR?1QU(uhY{DgF(dUKGC2~wfg}WM&fd2yL}_?*z?!?-O1t?`)earx)^I3ed!RW#LiT5}- zID!-@VP1O;4ZJB5vj=N)H%ni#olYcPb@0SzK(BzQBz4{w&p6hXXc#)G^XDRXO+fnx z%Xh8Ibb4J0!NYSxO(c@ZsE!!wJ6vwo2He-(i*oX#&fqp>79W)3e2p?aX)n~=p2;Mr zYdxFgRcGF|M_=rCb2?QaEbmNEVy1)M-V72LP@mn>0IXWbE0UQX2f-mOhXbH{RR=y^8D{Abe*7;s=5gUw2pcVV z8|(RXVy!3{L^n;WmT1n*boIu>ED~-6H`N&peLii0aju7*Wu>rJlaTV-Q$m4ziyXgc`VoyAvQrGWec!Cg@KDsk2thJq%}xJ%tX{Ns6-!Q1or6ZLPzZQxbeTJ@_?+l|5?@lg37|l(f=Fo zhB^PgLf>>Uty}VW|Lh8o)sUvzwA7an&HlZQ@Pb<(!v;p{{bw;>Ki82)c;_`+L!D9k z7y@AZTR^&-qi*s)gCUBahKbkd{aEqwNk+d+QQ7s-oyS2TMEV^aI@0O+;Sb;fmmq?= zr$XaVjHl;jnR+ey8R1lKiz# z_EqwVws)7xR0ol_=|b_>534V;Q#I^MMAwexVx&*6n0goZ21eV4+S&2JbChSlZM`2u zS$Rq~gBQeQ;@Tg6KJEZXa%XZQ&2OVhG=a}&<%$9tf*L?-O)$G%SpmVz`ei{*P;06U zn4~fw)Z+c9y!*I$HzRp!c`wY}_$IOX5izX|mMI?;0WzxBlv3}kSW|eFLFdEL|2#0A z<`kwP1O3G4<)FWZWvYr1+@%X&%so!G8i131j!Y>G44?gz z@r5svUMDDQ*E)pGe6z~Zl>GDmX)KwLaX}5R7oArll{3>U7IZGZcoVMguq(#x{`h5S z(W@>RJqFiq?kY{?2w9zIsQAi@sl`~bZEnHCfB(h@19Xfb zOlJt3?!v^^*58+JsrA|#AqEseP!Dj<1%t6-Z(YTmL59%TOyqCMc`K+-dCw1C|4e2D!>h;#YeR9b zUOm-dVP;O*_)7oIR_joXl)`17-f>|%!JayI$RbwlXwyt9gTwBflY<$(S}{|ldwco z6F_HMx4JdVmjV7VXW}h8radwS>}jXTlk7W%)jjcBk5~^JlGx;5*25mIrTKd4b63vN zYV(Cs_xod;KWkd!=Vz zr^Z@9Dk9LI9<)pA-#+G@)$JqfpAOR%{XoS}ODkq}U{8-!rb^{f0U4V;BT&~fvc$Ps z-%(FeOP;U>of9ikGdQ?z=#w1aWJrc%eTg(b@Uyf%y%5Gz%nsZD*v?jLLFHC^n0gXz z80H0mPgC~_bdIbrr-pNW!AG+=O~2kA05Gh5bbi?@nrD4y;@jSs5TNGo-sk4#)-neL zzI@sF_~{eXn8G0FRc4VJevU{m#$fy3rwY}ISGL9_!*7K>2IOb9yw37b08X}Af!)kU zU{gDOl;>tbLU?l)tKJB+=(^sQoGwlYY}xYwg} zh;$51=ku%BGlCvf0u)vOkp9g490CJw)$1GPY^113&h4Yn&buX9&|`bYt&2_|t7g!; z3?(pjsD&s9!<*XKu;CUf+ z`^FFE-`$iE5#?estdD8*RgdyN3+neE;Xybrncb2%05?351G$F|K}2uq0@C@Q0Z*?Q ziP=M|e{T&CfxO;JeM~+*uuesm1cL$dyD2q*62ekgU@WH1fWXdo(<#!73O-%)2YcE~ z!JzbLUCz7b`)Q>MUSwsx*Q2qY9K=B5O~VNd81(NiB(|=L?FC+E;LLdwkb>Y!IVyHQ zC=!v4DP94Ytdgy4!anDlzaPRdVos^9&fDiBRnW(C*iYg98z?jaoJP2JLCcrjN%Kgk zyjFH60qTkPzziv=PY4@$?imRKCqteH#BR;I(`24Y^b)IOca-VNSrs5r@5OrYkM zx$OwAeDAc-t9MMZPvR+&9R^y_XtWc2_D3*)M3IR*%v$KQy;(%+o)F?d+A;me_ZI>R zd-RZdGV0Na)XJZhnNOJlEd~82cLk%A3=xcXHX*xLP-iaLlN{bZ?M9vPF#~QyJqHKE z(e>W%jUcc3_ct>-Lv{c4C@``ii6&%! z7BN4{;C*MidfL8b3F^&9z1bnh9L9F_JUy`dIk8X)=LTB`W32Vy^fD6Zg54FXVbg z)JL}#2ZHeKv1A>ifLS{@nu-r|6zyo9_P#qS?PV+nz4xU%)535=ZMEl>79hLUP;heD zGA3S=9E-tt=Rft2i5h#b=OY(c4j(e(J&9FmOPdQzOl~vStu;dY>PCb-U-R_=m!aLS z6{E)%O~dA0X?&hF=k=a{{hc&eTsgmi;f~=!Ot*VVK0LSUM)6Q&rnbS~uY`3^Pw(hu zw}=C^;qy_%H|TrM4`plwiGdTDBgSGteBwmrvt_YW!qlhz#n+X+FI)|p0CT~Tit}#S zBb}_;a!~YL1Yk4c^EeWN!k%#&$8Q<0ZEbdWSvO(tY;`;Gp9W@5L3g}Xu3+7WL~uwp z3lefwb~6`i+>V`}K09K8!|?1N8UilU!HWYVWmdZiK~67d$jI!v(AZ%UNms^S&vh2y zbbJ9n)AIg(&{HpY!I{ig{hx2{S{!^#S8k57l4?yqLHwPi-KR-s6X1LC=I7RBqv-_j z3^^|(J@o0$?Z=4f5a37SGE8mm{ic@Xh;A_ZNuD;KefQLnE7>sj^RAlf6G&dw)k2## z2>M1a7^cMv#A>EBwz2|JKS@d}pu^h((_9n`ZB7Av5pl zGnY@pzA%yfK6dCJ+z~kLoZWw_lx)>9er2iBefCW4HY)k_U}y_nNwZp&d;4r|WiP|E zI!vx@tQGqvv9uSJMOwP8-Lv#U4=LzD4cMseyJ?R|*UAUX_Lh2=omm|XjY@jG3IS%m zYoh5$5cKq_>Bl$e-elUyQbASgILGX#*n``OTAYiG zd30V_Qg8BO80SHGLIf_ARVy@XHJCJ7ubp28&Ev)eQv*mCi$Gf&@tKO|gPR~Ji?H+c zb4@|!eZ9AJBFsvZl#~;Au^K8C6}+BU%{8>q5lLXcFMor)lCT_rpyEf#62x$K+P69j zkm=Itk^%~}oz;88sh1q^_x7t_+6-39Jjl_Y`&?<(T{l#7fe)sdI4z|1A(TZskV!W% z3-$CYfS!sc3P)X7WjJ>XDq0JCONAOR`8B%t*q0~SV@L05UA@S=Dt%Y~;X_$K7;hzg zUTrqEdu&kF3zErIXM@u;1&Ypv;t$GB(%sExmKOi~o~bx#ud@j+>?6eGe|g&!QpCD( z5&d-9S|Ylm(whNL)4<$BT(8(3k7`Uswt1<_gpcF@ygJ87`y~fiz76L@Z@To`14uCC zg$97Rd#RXG@gj6nkM_nET=0^H*lg+LCIRygt^T@;;8Qex&Opk~B_v{bFm0*!!V_Z7 ztOqYLf&u?Z|H3bje$VCB)Et+mV`ylIUcSq6d-?>r_9=usx$VIoR;qlPeBjszQ1_C) z@Wxi3n>Ya@Hn#NOyf~pwa=`MD%jujrl;gLaPUL+XOd$v!yyRp?7u8XkLz(oL{+2T@ zh-1j`MU9dfse}Jw3I<|6l_}fUkk3s&nqmjo25T-{(q7*?D^72T-S|TVr(+7q~mmHoQ@H&cL)`stDwi6aj1%IVwPf-G* zIgN26iU%Miq3|5CI2&o$Eh3#LOBLsjVFflUyjfvqHxG~%sfF}xZOOF!bKSbs5I~(;jK%r zbT~y9dHaL+qB_CBD-F~LWy<2(3pO>W2UiOcbdH|4feC5U+GaTr?}b@4B|^fPmbmbK zI;3_DzyQNK-q+B6Pw3g4T!qj+sy+Tv%irnGyl!Q71818HP1Wf1B8IopoXrf)g=c5o z^uZ-4RZx=#ppy{)wRbxfljumvwVSA#>YjTLGO9IQ04_o%-=EUJuHQjW$R7f~@3M@x zB@4>ZEZqO4Nq8Xctzpd}GM<>N)ce7z7?qn#^uTvR@Iq+tIdAT({l#cELMK9psPT!> z=|pD|{M%qGWqaw?JDAngRhNw<2W?cUc1GA#OC+s>V1xf}X{IUF^yg56s*^l*az@YN zpo(_$38II5Eo7$J^2Bx&#w3AiPzA{E@LOF{W%rg-pPD4B-817z?a4+K<@8aBdO?+( zE3%B5qa$97K{nV5dkB@^o12J%vgHVur!ip^81`aKthGB`|NF#y^JTY{w%LRHj|8@- za+P*DwP4|9zclHA^ol3Uvtb1KA1AAB>0+?5-kdh#$&jevTv$A1V#=TP*$QfPq330< zbDse=X_4&4v?TxM)^2_CD?P#4hzAGWKr;`&k_(AI{h~JF7wBs3li?4ljxYn!60u}A zFo07fa9jA`nI`!9Z{&-K@|AtAbTE!8OWkGwRf88bQG;!R5z^EF6}x6?(59{vFl_p} zjac!~cq~kFaVc#S#)5jv0uGtEQUa=;Q+D4?g(I@!TjASi7YEI`Hwg^SqXc?9XN&lq zSWjfmEWOurVvC_tZfCE*?w?HWOpOgd;9NwoiD4_OFAjk-JVnZzf5#fd`)}f*Pap9y z0N8sA_p`O!e(0!g*a(d0Jc%tAX;1s?pe11T>W=;-`@kB=6b(}BSl%?pc^xUU=CGjti5ng_52F6Dp_*ssT zjfm#$gwl1H+PU)Msg!InvviGpx79HFK?y`Jg~(qXTC%#An}j@j-EPYM>CE2R+Ipo2 z0tVf2e$l=UeXw0|$y{p4I=4~Xdv%jx7SB+BQ1F5 zdVk#a@X1D&*-aj^xReCdxs$*2O!)fDsY~k1M~QSrDy!POq>ssSUr2fZBA}SSk%-|o zVeo{p4Y5>&Vk6uLp&C99&OG-P`?!GwIkEw8H9{W2$*p(M?T2p$Epoad1!>%61z0Sc zcRJ;&PUO7h#uCK)MzluZ+V$Ef`QZf3r9Ep8bk*dIo6kU4!mb6eIcyd@5AS$^3UX!J zj+ZK55*xm#soALO^e!`VBS?BW5h}~;AwMQZkJQ{fZRD>r%AHy?bGOOZ#S7&D)1sn! zNg9XU{-g~%j7;7U`Rq%PHU zvFxLd@CNh9J^S^mwL_tKKPDbEHRep47d{rd2qKyH?@CG8n%8iLf%B_xH-%}VW8(Dm z-5;crjS7X}3fl@$j#tO?mUj8%>?(2&W?a1S#&?(jsX>`<|{7)j-n!tqcEyE`E~wzd#_J zuIm4R9fBDE{|hf-&OhW52H&?zfPqo&JmH|27uWyc3#2m!K&Uj3YB{v6<6s^q9sd@` znMqn2*o*oHJ&vDBZN-6E(HePt2x$1GiE4az+7t2Z0;(wRzJ-1L0?22&r+j-I{jAn{SN~I`+jxw{!#80|XGJzaPZ!)f| zPO)E$H(DjfZ5d=PZ0^!MoNW412iy8rCJ-|Q5kcksmvZ2x9KQ;0ZlJ1{; zks@R2whS^vAi!~L*D3^k{Is$A*{`*tITy4zO8T%xPr);t=q5Fb>v{pzT!>VXB4T>2 zt+>@bBnXqVQl|gV0$8QN2F;x7tjXysk0(DRhE|m=Z!`o_^pOHSGu}v(7&g^D#brMz z{eASb?&q9C^twfrAczkF@zJ^3UZxqP!R-$b2P`R~?4|fcb&Z zHJv*%OC10}9YhcG^WT`J!5KMmCTm=6qX80-Lxb1&~PM2Z>rAW$`9cTb7RkfeSF}-_inSChB z-KNWFli?t@7;su9#7bn%b^5^{B|*xy@9Aj&`hbNz@9gaCdtQ6Ikq71h!J_FM4JqC* zQ1~uVyu5RkbMWNX<)#@!KzqHkk^iGR9*km?NTX`JkTmzBuW~23UjYq9>ws~{<5{kY zwwEC8A0ANXo)*0N{Um+!8jew*1-6tmrrNA^@cG^BoKMe*4AkYwr7Q;eMLSb#?EY2m zGxzx@DfPa2je(Mr%`G3nH!&4>#jw`4DPgItD>N*E@et7qD;ZK17a`!SkNMGsfz9u% z&*4KOCg10c+%TQ8WofZd^%?AxesDB7TJrju{d7WVf9PN9d<`Qf;T5z zCT{zQDsCOO%`+GQjMJAy?oGy11#HdyPPrsf5!7zfOu&*1I~#ZJS(X{8y~Dl75N|}} z&?5iX;wmmdl=mnHW7-cMRx9Gh1DhbE;B#t$brt?o?C|k^M`r0x;jXj&VlT{$G_U2# zfw(-=9gnm9L;E}!Rtm#|L`438Qc3QE0l zu=-Ey5wc*d<023tx=E=4Tn^hp5fKprJ&N{{B`Z{PQl!?#r|KS(khiy|ewM)J8-`qD zy$0M@6e5+u5GGLL>+9&(@AP{9Dx(#vH|KX>^p8v&>mTW(SkyX_g!Su8b+5VB6DVba z`Y%s(gIXTGDe=c?7FwQ$q-%Es2rp{`|4z>re4R?TJh*?^Nc%`)jRrY;i+BeXP$iuV z&OZ@_sw3-=@waKTRMgI(^}Hz_0vD^GrJ>;MZxC}NP2C_g?1VL!ME^>G%3ZNzM`_ak zHe_Y`yWFr5DkxfY&8A%t$vnP1CE+oKYq)%w;j*);h>bSy-p4cZI@YWyngl995K#z_ zNe}&U5hna_I$&^ba`@T!bBR#?HFi$H80#_Ox=(SFrc(;yUWE#p+lKwSTFAO#h*>lF zzOt1=f{Rqh?4}R#VWr0(WnZlG8P+}*|LY)ctNu@5HfQ?!d4?b4E1pBTtdH{=TN^`^ z$d5K^&V1H{3{qX=FJz_gZrrD2FG&6y{rB8RA~f_bvgj+?|2@;G4`{2a306&VTVclSuDsqEGm!)znK$DTR=$N(9u~->ru?kX|yN$`}eUAD&n4YVcBF z;Vd;7WRERo*Gc`>AaervBq94*SE|nlw8{hL`OJqBm9-NeoMWr@th5%$vHpOQ! z9G8U}=s1FSkVAf}xye82o$R{Eekvt)*DMi~2J2jO(ahgxANtnYESIKE`|26p(Jp%4 zHzdE#ST~`1GuRLN9G_9cPw%9@!BI%t;WM^jcow9VF>D&qQ5?iVe)LU#WyV1NOx_ae z(gvT_;RKLf0-_V+2hV5lKF;+L5CkB)oq$keVy)=z!jRHJwgU(@MHb z1uIm3gaW!KN#wa%BCTTZoDYD2QZTcNN9n34D2qkzCtAiC6t@p4%vhxu2eP=2e4X@D zujj8JWqFny*d?R0)gSLNjD7LEzEd=lyz%5!`TEwN^Q9}EZ0l;>O9r*_jFsil7ca_b z;TJpKYP8&;(|}Uoevn>k;NJ9&?ML;k;zOI}3ii{fpGSNnqz~^^Keph4yuPv>h=2g) zNWCr<)+@S$f$nd#%FZUV-ShEi{-q;h|Bn3k(+L@pCoJ>v)3<7aH}NRJ#N&kVT-COf z{sJdY$J}Yi7jiC}?oX~!K>%M!S!UPMKkH9sz4K?DFmHuAK8~ZBQ`34~}FRuN={5sNRJ(k0HqKf%Ml1nnP z#gzg(OmVLdQ`25IAP7Skm zx21cSP0zxs;MgAgAJP$T8I^vWE{$OJWWUT@$5G#CG0*xyYj;ZTf^|Eo=d4ofGisOp z``MJ2$Wd(Po65}~MM13~R6qF8Nft&05OAG}g>q`RJ-ordMK_ zOlzt-U{(5BLu+U1+sE%2{QET1f~+=x??tkPb9bTuSni7t8uAQ;*UE&9d#I5-gPvPJ zQu?24wF?3lQcN4btc1QCccEz->3tos@22l>51YMGiF^sP_*2bru(Mm+XtbbAsAZd& zFCXq_%r}qsJiWD0ahx?oViIS7=+cQqnK;-`Yv1*h6db*HVe9o7Kzr<1i2|_TrO8;j zNN@|{Rc>g9B1qi}xwsZq*Ldh`?Sj6)XrjAz?-Hu(Y*4fH=o_8Hw1pc%FGQBeYZ7(f1bD^e2BAbLpE8e=~# zH^o*xcmCOV2_M=DC24-?bcnjj^2~PencjFYS)++74j~AL%zqd`=+eE`2a6m1?Zp>0 zEMKvasqXPtt%p~Q0HiwXm6OlP`2*rUtWeg<=%~$Z4QtGg__QE3H;`nJgF|d6s3*~k zmt2|tZL|mTl5=P+BJ5ycx$EhXkxe7ywBEVqQn&VOT1us(9sVY@)iqBZPpj>Os6Rz7 z9)Bgp@<^^+Yy%A-E#5^LifdQRjuj0WOBEkmxIk!y9Yj7oW#=gMPGG$h#ikpl(fR~Z z(J);%GRC@C%~}rY`>HLp_4ntKSjvD}g9CcFE#a-T^t}z2L`tBy%Ate1gTZ#e;A6rQ zYx6$D%QcQB1o767$Qwc5o_2(}gtJYoUDe#5P?zZ2sUOE}@|(5e-yi^OM~4Tm%7o*p zZ7o%*SKG*?FL}zyLTEd8$C}6MWscJ)&9}7z=X$1`OhN6>t`ojl zjRDkCf-tFI!o%C?Y&KTCwiR?JXYGkByqt3mDy)}jkTc5rG|@YjGEYWMe#OCX*lW7%@?7`C$ThbL z7774yjaWzUX*%!B0=DL7kxdG;wymmP&D!y1YVBO>^Y}~%(2mlKU7QPJq0K?)>{&KZ zx-Oge-)3pR5BuDCGN15K5*os{9NpK=0kt?=5^L)h@a`glY)w27nV{(gUUF7sOUB-JkLtvf#x0Fa2`oZ{j=E4%18F;jT^}~qNs$S&gxl?bvHc>wNS&6kp*KLOX4 zI46XDLnd5$Ns|Fx&&);LA3%O7wjMa&jA@auI9HuMN*Bc~{ZvnMjp z23H=i%$Tzo-|&_S+6i^}P4@7}wd3P5T2En>fmuKM*9C6I)Bqr$`OIVh7GV4f?9_S1 z`jlmIknSxT5=FgiO;giDK1uS(Aq)R7Ntm@j*!ZuQVVM6_*Gm<}>bd*5`v!rGJ0s?>h^@lwlb;5aM>o z1g~B8D9MHe{%B`WH&cz0i zY6)>NNmacX3i%-zdH_Ajp<=j=Ol7Pv3BP>5rsm*uxD3SDAs-|?a0~5c*laCx%L0(3 zrks28{@-$$dTJqGuTW_8Woxm!n@oGvaP4S*)pw3i2-L}b$8lZP@aIQvVO_(j4-`m~ zu6l)PN#qfI%<_|2JKavG$bJ1h3M3oH*Fx$z6NXDi|3+qIBsTHp=?nx;>enQ%0N^k1 d{qyr=TJetoeGM5}z5w{o=(_2(QeCHr{|l(RmC^tJ From 6fc2fb60f723f78475675166ccc13f39d0140d6a Mon Sep 17 00:00:00 2001 From: Seris02 Date: Mon, 2 Jan 2023 11:19:02 +0800 Subject: [PATCH 004/129] better gargoyles --- icons/obj/statue.dmi | Bin 25765 -> 25772 bytes modular_splurt/code/datums/traits/neutral.dm | 42 ++++++++++++------ .../code/game/objects/structures/statues.dm | 4 +- 3 files changed, 31 insertions(+), 15 deletions(-) diff --git a/icons/obj/statue.dmi b/icons/obj/statue.dmi index 48368dda28d876366614fef260e73a0daf5f2f72..d1636a3c14ce53ae64ca9080c71071769068f2ed 100644 GIT binary patch delta 6675 zcmV+u8tmnz$pNg%0gxnrCVEs@bVOxyV{&P5bZKvH004NLmDIs*!Y~X5;B)g77F^M^ z7OuTapos�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 delta 6630 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 k 0) cooldown-- - if(!transformed && energy > 0 && !paused) + if(!transformed && !paused && energy > 0) energy -= 0.05 if(transformed) - if(energy < 99.7) - energy += 0.3 + energy = min(energy, 100) H.heal_overall_damage(0.5,0.5) H.adjustCloneLoss(-0.5) H.adjustBruteLoss(-0.5) H.adjustFireLoss(-0.5) - if(energy <= 0 && !transformed) + if(!transformed && energy <= 0) + var/datum/action/gargoyle/transform/T = locate() in H.actions + if (!T) + T = new + T.Grant(H) cooldown = 0 - T.Trigger() + T?.Trigger() /datum/quirk/gargoyle/remove() var/mob/living/carbon/human/H = quirk_holder + if (!H) + return ..() var/datum/action/gargoyle/transform/T = locate() in H.actions var/datum/action/gargoyle/check/C = locate() in H.actions var/datum/action/gargoyle/pause/P = locate() in H.actions - T.Remove(H) - C.Remove(H) - P.Remove(H) + T?.Remove(H) + C?.Remove(H) + P?.Remove(H) . = ..() /datum/quirk/nudist @@ -817,12 +826,17 @@ .=..() var/mob/living/carbon/human/H = owner var/datum/quirk/gargoyle/T = locate() in H.roundstart_quirks + if (!T) + return 0 if(!T.cooldown) if(!T.transformed) if(!isturf(H.loc)) return 0 var/obj/structure/statue/gargoyle/S = new(H.loc, H) S.name = "statue of [H.name]" + S.transform = H.transform + S.pixel_x = H.pixel_x + S.pixel_y = H.pixel_y H.bleedsuppress = 1 S.copy_overlays(H) var/newcolor = list(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0)) @@ -838,9 +852,9 @@ T.transformed = 0 T.cooldown = 30 T.paused = 0 - H.visible_message("[H]'s skin rapidly softens, returning them to normal!", "Your skin softens, freeing your movement once more!") + H.visible_message("[H]'s skin rapidly softens, returning them to normal!", "Your skin softens, freeing your movement once more!") else - to_chat(H, "You have transformed too recently; you cannot yet transform again!") + to_chat(H, "You have transformed too recently; you cannot yet transform again! Try again in [T.cooldown] seconds.") return 0 /datum/action/gargoyle/check @@ -853,7 +867,8 @@ .=..() var/mob/living/carbon/human/H = owner var/datum/quirk/gargoyle/T = locate() in H.roundstart_quirks - to_chat(H, "You have [T.energy]/100 energy remaining!") + if (T) + to_chat(H, "You have [T.energy]/100 energy remaining!") /datum/action/gargoyle/pause name = "Preserve" @@ -865,7 +880,8 @@ datum/action/gargoyle/pause/Trigger() .=..() var/mob/living/carbon/human/H = owner var/datum/quirk/gargoyle/T = locate() in H.roundstart_quirks - + if (!T) + return if(!T.paused) T.paused = 1 T.position = H.loc diff --git a/modular_splurt/code/game/objects/structures/statues.dm b/modular_splurt/code/game/objects/structures/statues.dm index 7eb3fbbb2b..3518c44e2c 100644 --- a/modular_splurt/code/game/objects/structures/statues.dm +++ b/modular_splurt/code/game/objects/structures/statues.dm @@ -16,7 +16,7 @@ /obj/structure/statue/gargoyle name = "statue" desc = "An incredibly intricate statue, which... almost seems alive!" - icon_state = "human_male" + icon_state = "gargoyle" //empty sprite because it's supposed to copy over the overlays anyway, and otherwise, you end up with a white human male underlay beneath the statue. density = TRUE anchored = TRUE flags_1 = PREVENT_CONTENTS_EXPLOSION_1 @@ -29,7 +29,7 @@ petrified_mob = L if(L.buckled) L.buckled.unbuckle_mob(L,force=1) - L.visible_message("[L]'s skin rapidly turns to stone!", "Your skin abruptly hardens as you turn to stone once more!") + L.visible_message("[L]'s skin rapidly turns to stone!", "Your skin abruptly hardens as you turn to stone once more!") L.forceMove(src) ADD_TRAIT(L, TRAIT_MUTE, STATUE_TRAIT) ADD_TRAIT(L, TRAIT_MOBILITY_NOMOVE, STATUE_TRAIT) From af06447f4eb4b259d1257736efc9391066aad287 Mon Sep 17 00:00:00 2001 From: Seris02 Date: Mon, 2 Jan 2023 11:47:51 +0800 Subject: [PATCH 005/129] gargoyle fix - almost a terrible mistake --- modular_splurt/code/datums/traits/neutral.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modular_splurt/code/datums/traits/neutral.dm b/modular_splurt/code/datums/traits/neutral.dm index 559d7f965e..9618c5d7fe 100644 --- a/modular_splurt/code/datums/traits/neutral.dm +++ b/modular_splurt/code/datums/traits/neutral.dm @@ -575,7 +575,7 @@ energy -= 0.05 if(transformed) - energy = min(energy, 100) + energy = min(energy + 0.03, 100) H.heal_overall_damage(0.5,0.5) H.adjustCloneLoss(-0.5) H.adjustBruteLoss(-0.5) From 13809c0cea0f926b0863df14a58da8745b4571fe Mon Sep 17 00:00:00 2001 From: Seris02 Date: Mon, 2 Jan 2023 15:45:04 +0800 Subject: [PATCH 006/129] more fixes for gargoyles --- modular_splurt/code/datums/traits/neutral.dm | 3 ++- .../code/game/objects/structures/statues.dm | 14 +++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/modular_splurt/code/datums/traits/neutral.dm b/modular_splurt/code/datums/traits/neutral.dm index 9618c5d7fe..3a5321a2a8 100644 --- a/modular_splurt/code/datums/traits/neutral.dm +++ b/modular_splurt/code/datums/traits/neutral.dm @@ -837,6 +837,7 @@ S.transform = H.transform S.pixel_x = H.pixel_x S.pixel_y = H.pixel_y + S.layer = H.layer H.bleedsuppress = 1 S.copy_overlays(H) var/newcolor = list(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0)) @@ -880,7 +881,7 @@ datum/action/gargoyle/pause/Trigger() .=..() var/mob/living/carbon/human/H = owner var/datum/quirk/gargoyle/T = locate() in H.roundstart_quirks - if (!T) + if (!T || T.transformed) return if(!T.paused) T.paused = 1 diff --git a/modular_splurt/code/game/objects/structures/statues.dm b/modular_splurt/code/game/objects/structures/statues.dm index 3518c44e2c..c901cc632f 100644 --- a/modular_splurt/code/game/objects/structures/statues.dm +++ b/modular_splurt/code/game/objects/structures/statues.dm @@ -22,6 +22,7 @@ flags_1 = PREVENT_CONTENTS_EXPLOSION_1 max_integrity = 200 var/mob/living/petrified_mob + var/old_max_health /obj/structure/statue/gargoyle/Initialize(mapload, mob/living/L) . = ..() @@ -35,11 +36,20 @@ ADD_TRAIT(L, TRAIT_MOBILITY_NOMOVE, STATUE_TRAIT) ADD_TRAIT(L, TRAIT_MOBILITY_NOPICKUP, STATUE_TRAIT) ADD_TRAIT(L, TRAIT_MOBILITY_NOUSE, STATUE_TRAIT) + L.click_intercept = src L.faction += "mimic" //Stops mimics from instaqdeling people in statues L.status_flags |= GODMODE + old_max_health = L.maxHealth obj_integrity = L.health + 100 //stoning damaged mobs will result in easier to shatter statues max_integrity = obj_integrity +/obj/structure/statue/gargoyle/proc/InterceptClickOn(mob/living/caller, params, atom/A) //technically could be bypassed by doing something that also uses click intercept but shrug + var/atom/movable/screen/movable/action_button/ab = A + if (istype(ab)) + if (istype(ab.linked_action, /datum/action/gargoyle)) + return FALSE + return TRUE + /obj/structure/statue/gargoyle/handle_atom_del(atom/A) if(A == petrified_mob) petrified_mob = null @@ -52,7 +62,9 @@ REMOVE_TRAIT(petrified_mob, TRAIT_MOBILITY_NOMOVE, STATUE_TRAIT) REMOVE_TRAIT(petrified_mob, TRAIT_MOBILITY_NOPICKUP, STATUE_TRAIT) REMOVE_TRAIT(petrified_mob, TRAIT_MOBILITY_NOUSE, STATUE_TRAIT) - petrified_mob.take_overall_damage((petrified_mob.health - obj_integrity + 100)) //any new damage the statue incurred is transfered to the mob + petrified_mob.click_intercept = null + var/ratio = old_max_health/petrified_mob.maxHealth + petrified_mob.take_overall_damage((petrified_mob.health*ratio - obj_integrity + 100)) //any new damage the statue incurred is transfered to the mob petrified_mob.faction -= "mimic" petrified_mob = null return ..() From 1727d3556d1274de154c65b42373a23b08ea70b7 Mon Sep 17 00:00:00 2001 From: Seris02 Date: Mon, 2 Jan 2023 18:37:15 +0800 Subject: [PATCH 007/129] even better code for gargoyles + examine --- modular_splurt/code/datums/traits/neutral.dm | 7 +- .../code/game/objects/structures/statues.dm | 64 +++++++++++++++++-- 2 files changed, 58 insertions(+), 13 deletions(-) diff --git a/modular_splurt/code/datums/traits/neutral.dm b/modular_splurt/code/datums/traits/neutral.dm index 3a5321a2a8..8008b9ee32 100644 --- a/modular_splurt/code/datums/traits/neutral.dm +++ b/modular_splurt/code/datums/traits/neutral.dm @@ -834,10 +834,6 @@ return 0 var/obj/structure/statue/gargoyle/S = new(H.loc, H) S.name = "statue of [H.name]" - S.transform = H.transform - S.pixel_x = H.pixel_x - S.pixel_y = H.pixel_y - S.layer = H.layer H.bleedsuppress = 1 S.copy_overlays(H) var/newcolor = list(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0)) @@ -846,7 +842,6 @@ T.transformed = 1 T.cooldown = 30 T.paused = 0 - S.dir = H.dir return 1 else qdel(current) @@ -869,7 +864,7 @@ var/mob/living/carbon/human/H = owner var/datum/quirk/gargoyle/T = locate() in H.roundstart_quirks if (T) - to_chat(H, "You have [T.energy]/100 energy remaining!") + to_chat(H, "You have [round(T.energy,0.01)]/100 energy remaining!") /datum/action/gargoyle/pause name = "Preserve" diff --git a/modular_splurt/code/game/objects/structures/statues.dm b/modular_splurt/code/game/objects/structures/statues.dm index c901cc632f..dbd751bfec 100644 --- a/modular_splurt/code/game/objects/structures/statues.dm +++ b/modular_splurt/code/game/objects/structures/statues.dm @@ -23,6 +23,10 @@ max_integrity = 200 var/mob/living/petrified_mob var/old_max_health + var/old_size + var/was_shifted + var/was_tilted + var/deconstructed = FALSE /obj/structure/statue/gargoyle/Initialize(mapload, mob/living/L) . = ..() @@ -31,6 +35,13 @@ if(L.buckled) L.buckled.unbuckle_mob(L,force=1) L.visible_message("[L]'s skin rapidly turns to stone!", "Your skin abruptly hardens as you turn to stone once more!") + dir = L.dir + transform = L.transform + pixel_x = L.pixel_x + pixel_y = L.pixel_y + layer = L.layer + was_shifted = L.is_shifted + was_tilted = L.is_tilted L.forceMove(src) ADD_TRAIT(L, TRAIT_MUTE, STATUE_TRAIT) ADD_TRAIT(L, TRAIT_MOBILITY_NOMOVE, STATUE_TRAIT) @@ -40,6 +51,7 @@ L.faction += "mimic" //Stops mimics from instaqdeling people in statues L.status_flags |= GODMODE old_max_health = L.maxHealth + old_size = get_size(L) obj_integrity = L.health + 100 //stoning damaged mobs will result in easier to shatter statues max_integrity = obj_integrity @@ -50,6 +62,12 @@ return FALSE return TRUE +/obj/structure/statue/gargoyle/examine_more(mob/user) //something about the funny signals doesn't work here no matter how much I fucked around with it (ie registering to COMSIG_PARENT_EXAMINE_MORE doesn't do anything), so we have to overwrite the proc + . = ..() + if (petrified_mob) + SEND_SIGNAL(petrified_mob, COMSIG_PARENT_EXAMINE, user, .) + . -= "You examine [src] closer, but find nothing of interest..." + /obj/structure/statue/gargoyle/handle_atom_del(atom/A) if(A == petrified_mob) petrified_mob = null @@ -62,16 +80,48 @@ REMOVE_TRAIT(petrified_mob, TRAIT_MOBILITY_NOMOVE, STATUE_TRAIT) REMOVE_TRAIT(petrified_mob, TRAIT_MOBILITY_NOPICKUP, STATUE_TRAIT) REMOVE_TRAIT(petrified_mob, TRAIT_MOBILITY_NOUSE, STATUE_TRAIT) - petrified_mob.click_intercept = null - var/ratio = old_max_health/petrified_mob.maxHealth - petrified_mob.take_overall_damage((petrified_mob.health*ratio - obj_integrity + 100)) //any new damage the statue incurred is transfered to the mob petrified_mob.faction -= "mimic" + petrified_mob.click_intercept = null + petrified_mob.dir = dir + petrified_mob.update_size(old_size) + var/damage = deconstructed ? petrified_mob.health : petrified_mob.health*(old_max_health/petrified_mob.maxHealth) - obj_integrity + 100 + petrified_mob.take_overall_damage(damage) //any new damage the statue incurred is transfered to the mob + petrified_mob.transform = transform + petrified_mob.pixel_x = pixel_x + petrified_mob.pixel_y = pixel_y + petrified_mob.layer = layer + petrified_mob.is_shifted = was_shifted + petrified_mob.is_tilted = was_tilted + var/datum/quirk/gargoyle/T = locate() in petrified_mob.roundstart_quirks + if (T) + T.transformed = 0 petrified_mob = null return ..() /obj/structure/statue/gargoyle/deconstruct(disassembled = TRUE) - if(!disassembled) - if(petrified_mob) - petrified_mob.dust() - visible_message("[src] shatters!.") + deconstructed = TRUE + visible_message("[src] shatters!") qdel(src) + +/obj/structure/statue/gargoyle/attackby(obj/item/W, mob/living/user, params) + add_fingerprint(user) + if(!(flags_1 & NODECONSTRUCT_1)) + if(default_unfasten_wrench(user, W)) + return + if(W.tool_behaviour == TOOL_WELDER) + if(!W.tool_start_check(user, amount=0)) + return FALSE + + if (petrified_mob && alert(user, "You are slicing apart a gargoyle! Are you sure you want to continue? This will severely harm them, if not outright kill them.",, "Continue", "Cancel") == "Cancel") + return + + user.visible_message(span_notice("[user] is slicing apart the [name]."), \ + span_notice("You are slicing apart the [name]...")) + if (petrified_mob) + to_chat(petrified_mob, "You are being sliced apart by [user]!") + if(W.use_tool(src, user, 40, volume=50)) + user.visible_message(span_notice("[user] slices apart the [name]."), \ + span_notice("You slice apart the [name]!")) + deconstruct(TRUE) + return + return ..() \ No newline at end of file From 3cdef0eb62c18bfa646a1c9284fc1a0f6999f8b8 Mon Sep 17 00:00:00 2001 From: Seris02 Date: Mon, 2 Jan 2023 23:26:46 +0800 Subject: [PATCH 008/129] changes gargoyle healing a bit --- modular_splurt/code/datums/traits/neutral.dm | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/modular_splurt/code/datums/traits/neutral.dm b/modular_splurt/code/datums/traits/neutral.dm index 8008b9ee32..4ffd679e8d 100644 --- a/modular_splurt/code/datums/traits/neutral.dm +++ b/modular_splurt/code/datums/traits/neutral.dm @@ -542,6 +542,7 @@ var/cooldown = 0 var/paused = 0 var/turf/position + var/obj/structure/statue/gargoyle/current = null /datum/quirk/gargoyle/add() .=..() @@ -576,10 +577,16 @@ if(transformed) energy = min(energy + 0.03, 100) - H.heal_overall_damage(0.5,0.5) - H.adjustCloneLoss(-0.5) - H.adjustBruteLoss(-0.5) - H.adjustFireLoss(-0.5) + if (H.getBruteLoss() > 0 || H.getFireLoss() > 0) + H.adjustBruteLoss(-0.5) + H.adjustFireLoss(-0.5) + else if (H.getOxyLoss() > 0 || H.getToxLoss() > 0) + H.adjustToxLoss(-0.3) + H.adjustOxyLoss(-0.5) //oxyloss heals by itself, doesn't need a nerfed heal + else if (H.getCloneLoss() > 0) + H.adjustCloneLoss(-0.3) + else if (current && current.obj_integrity < current.max_integrity) //health == maxHealth is true since we checked all damages above + current.obj_integrity = min(current.obj_integrity + 0.1, current.max_integrity) if(!transformed && energy <= 0) var/datum/action/gargoyle/transform/T = locate() in H.actions @@ -819,7 +826,6 @@ desc = "Transform into a statue, regaining energy in the process. Additionally, you will slowly heal while in statue form." icon_icon = 'icons/mob/actions/actions_changeling.dmi' button_icon_state = "ling_camouflage" - var/obj/structure/statue/gargoyle/current = null /datum/action/gargoyle/transform/Trigger() @@ -838,13 +844,13 @@ S.copy_overlays(H) var/newcolor = list(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0)) S.add_atom_colour(newcolor, FIXED_COLOUR_PRIORITY) - current = S + T.current = S T.transformed = 1 T.cooldown = 30 T.paused = 0 return 1 else - qdel(current) + qdel(T.current) T.transformed = 0 T.cooldown = 30 T.paused = 0 From 4fe69929a1a3a93112c430386604fd40c1a24329 Mon Sep 17 00:00:00 2001 From: Seris02 Date: Tue, 3 Jan 2023 09:17:47 +0800 Subject: [PATCH 009/129] trailing newline --- modular_splurt/code/game/objects/structures/statues.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modular_splurt/code/game/objects/structures/statues.dm b/modular_splurt/code/game/objects/structures/statues.dm index dbd751bfec..25bacb82cd 100644 --- a/modular_splurt/code/game/objects/structures/statues.dm +++ b/modular_splurt/code/game/objects/structures/statues.dm @@ -124,4 +124,4 @@ span_notice("You slice apart the [name]!")) deconstruct(TRUE) return - return ..() \ No newline at end of file + return ..() From d90fa375e1aee2fc4d0fef795f9074f94258c2e6 Mon Sep 17 00:00:00 2001 From: Darius <5933805+LeDrascol@users.noreply.github.com> Date: Wed, 4 Jan 2023 13:57:54 -0500 Subject: [PATCH 010/129] Move heirloom lists to relevant files Port of the current TG heirloom system. Heirlooms are now stored in job_types and species_types instead of a global list. Items used as heirlooms match their modern TG counterparts when possible. Also fixes the ancient first aid kit, which is used for a heirloom. --- code/_globalvars/lists/flavor_misc.dm | 35 ------------- code/datums/traits/negative.dm | 49 +++++++++++++----- code/game/objects/items/storage/firstaid.dm | 9 +++- code/modules/jobs/job_types/_job.dm | 3 ++ code/modules/jobs/job_types/assistant.dm | 5 ++ .../jobs/job_types/atmospheric_technician.dm | 6 +++ code/modules/jobs/job_types/bartender.dm | 6 +++ code/modules/jobs/job_types/botanist.dm | 6 +++ code/modules/jobs/job_types/captain.dm | 5 ++ .../jobs/job_types/cargo_technician.dm | 4 ++ code/modules/jobs/job_types/chaplain.dm | 5 ++ code/modules/jobs/job_types/chemist.dm | 5 ++ code/modules/jobs/job_types/chief_engineer.dm | 9 ++++ .../jobs/job_types/chief_medical_officer.dm | 9 ++++ code/modules/jobs/job_types/clown.dm | 4 ++ code/modules/jobs/job_types/cook.dm | 6 +++ code/modules/jobs/job_types/curator.dm | 5 ++ code/modules/jobs/job_types/detective.dm | 4 ++ code/modules/jobs/job_types/geneticist.dm | 4 ++ .../jobs/job_types/head_of_personnel.dm | 4 ++ .../jobs/job_types/head_of_security.dm | 4 ++ code/modules/jobs/job_types/janitor.dm | 7 +++ code/modules/jobs/job_types/lawyer.dm | 5 ++ code/modules/jobs/job_types/medical_doctor.dm | 9 ++++ code/modules/jobs/job_types/mime.dm | 4 ++ code/modules/jobs/job_types/paramedic.dm | 4 ++ code/modules/jobs/job_types/prisoner.dm | 4 ++ code/modules/jobs/job_types/quartermaster.dm | 5 ++ .../jobs/job_types/research_director.dm | 4 ++ code/modules/jobs/job_types/roboticist.dm | 4 ++ code/modules/jobs/job_types/scientist.dm | 4 ++ .../jobs/job_types/security_officer.dm | 5 ++ code/modules/jobs/job_types/shaft_miner.dm | 5 ++ .../jobs/job_types/station_engineer.dm | 9 ++++ code/modules/jobs/job_types/virologist.dm | 4 ++ code/modules/jobs/job_types/warden.dm | 4 ++ .../mob/living/carbon/human/species.dm | 3 ++ .../carbon/human/species_types/bugmen.dm | 4 ++ .../carbon/human/species_types/dwarves.dm | 5 ++ .../carbon/human/species_types/felinid.dm | 1 + .../living/carbon/human/species_types/ipc.dm | 5 ++ .../carbon/human/species_types/jellypeople.dm | 4 ++ .../human/species_types/lizardpeople.dm | 4 ++ .../carbon/human/species_types/synthliz.dm | 5 ++ icons/obj/storage.dmi | Bin 73695 -> 74107 bytes 45 files changed, 245 insertions(+), 50 deletions(-) diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm index 162eeffe78..fa239e0ea4 100644 --- a/code/_globalvars/lists/flavor_misc.dm +++ b/code/_globalvars/lists/flavor_misc.dm @@ -350,41 +350,6 @@ GLOBAL_LIST_INIT(greyscale_limb_types, list("human","moth","lizard","pod","plant //body ids that have prosthetic sprites GLOBAL_LIST_INIT(prosthetic_limb_types, list("xion","bishop","cybersolutions","grayson","hephaestus","nanotrasen","talon")) -//FAMILY HEIRLOOM LIST -//this works by using the first number for the species as a probability to choose one of the items in the following list for their family heirloom -//if the probability fails, or the species simply isn't in the list, then it defaults to the next global list, which has its own list of items for each job -//the first item in the list is for if your job isn't in that list - -//species-heirloom list (we categorise them by the species id var) -GLOBAL_LIST_INIT(species_heirlooms, list( - "dwarf" = list(25, list(/obj/item/reagent_containers/food/drinks/dwarf_mug)), //example: 25% chance for dwarves to get a dwarf mug as their heirloom (normal container but has manly dorf icon) - "insect" = list(25, list(/obj/item/flashlight/lantern/heirloom_moth)), - "ipc" = list(25, list(/obj/item/stock_parts/cell/family)), //gives a broken powercell for flavor text! - "synthliz" = list(25, list(/obj/item/stock_parts/cell/family)), //they're also robots - "slimeperson" = list(25, list(/obj/item/toy/plush/slimeplushie)), - "lizard" = list(25, list(/obj/item/toy/plush/lizardplushie)), - )) - -//job-heirloom list -GLOBAL_LIST_INIT(job_heirlooms, list( - "NO_JOB" = list(/obj/item/toy/cards/deck, /obj/item/lighter, /obj/item/dice/d20), - "Clown" = list(/obj/item/paint/anycolor, /obj/item/bikehorn/golden), - "Mime" = list(/obj/item/paint/anycolor, /obj/item/toy/dummy), - "Cook" = list(/obj/item/kitchen/knife/scimitar), - "Botanist" = list(/obj/item/cultivator, /obj/item/reagent_containers/glass/bucket, /obj/item/storage/bag/plants, /obj/item/toy/plush/beeplushie), - "Medical Doctor" = list(/obj/item/healthanalyzer), - "Paramedic" = list(/obj/item/lighter), //..why? - "Station Engineer" = list(/obj/item/wirecutters/brass/family, /obj/item/crowbar/brass/family, /obj/item/screwdriver/brass/family, /obj/item/wrench/brass/family), //brass tools but without the tool speed modifier - "Atmospheric Technician" = list(/obj/item/extinguisher/mini/family), - "Lawyer" = list(/obj/item/storage/briefcase/lawyer/family), - "Janitor" = list(/obj/item/mop), - "Scientist" = list(/obj/item/toy/plush/slimeplushie), - "Assistant" = list(/obj/item/clothing/gloves/cut/family), - "Prisoner" = list (/obj/item/pen/blue), - "Chaplain" = list(/obj/item/camera/spooky/family), - "Head of Personnel" = list(/obj/item/pinpointer/ian) - )) - //body ids that have non-gendered bodyparts GLOBAL_LIST_INIT(nongendered_limb_types, list("fly", "zombie" ,"synth", "shadow", "cultgolem", "agent", "plasmaman", "clockgolem", "clothgolem")) diff --git a/code/datums/traits/negative.dm b/code/datums/traits/negative.dm index 8d3acf0f6d..a30e27c8f8 100644 --- a/code/datums/traits/negative.dm +++ b/code/datums/traits/negative.dm @@ -43,27 +43,38 @@ GLOBAL_LIST_EMPTY(family_heirlooms) -/datum/quirk/family_heirloom/on_spawn() - var/mob/living/carbon/human/H = quirk_holder +/datum/quirk/family_heirloom/on_spawn() + // Define holder and type + var/mob/living/carbon/human/human_holder = quirk_holder var/obj/item/heirloom_type - var/species_heirloom_entry = GLOB.species_heirlooms[H.dna.species.id] - if(species_heirloom_entry) - if(prob(species_heirloom_entry[1])) - heirloom_type = pick(species_heirloom_entry[2]) + + // The quirk holder's species - we have a 50% chance, if we have a species with a set heirloom, to choose a species heirloom. + var/datum/species/holder_species = human_holder.dna?.species + if(holder_species && LAZYLEN(holder_species.family_heirlooms) && prob(50)) + heirloom_type = pick(holder_species.family_heirlooms) + else + // Our quirk holder's job + var/datum/job/holder_job = SSjob.GetJob(human_holder.last_mind?.assigned_role) + if(holder_job && LAZYLEN(holder_job.family_heirlooms)) + heirloom_type = pick(holder_job.family_heirlooms) + + // If we didn't find an heirloom somehow, throw them a generic one if(!heirloom_type) - var/job_heirloom_entry = GLOB.job_heirlooms[quirk_holder.mind.assigned_role] - if(!job_heirloom_entry) - heirloom_type = pick(GLOB.job_heirlooms["NO_JOB"]) //consider: should this be a define? - else - heirloom_type = pick(job_heirloom_entry) + heirloom_type = pick(/obj/item/toy/cards/deck, /obj/item/lighter, /obj/item/dice/d20) + + // Create the heirloom item heirloom = new heirloom_type(get_turf(quirk_holder)) + + // Add to global list GLOB.family_heirlooms += heirloom + + // Determine and assign item location var/list/slots = list( "in your left pocket" = ITEM_SLOT_LPOCKET, "in your right pocket" = ITEM_SLOT_RPOCKET, "in your backpack" = ITEM_SLOT_BACKPACK ) - where = H.equip_in_one_of_slots(heirloom, slots, FALSE) || "at your feet" + where = human_holder.equip_in_one_of_slots(heirloom, slots, FALSE) || "at your feet" /datum/quirk/family_heirloom/post_add() if(where == "in your backpack") @@ -75,13 +86,25 @@ GLOBAL_LIST_EMPTY(family_heirlooms) heirloom.name = "\improper [family_name[family_name.len]] family [heirloom.name]" /datum/quirk/family_heirloom/on_process() - if(heirloom in quirk_holder.GetAllContents()) + // Ignore for dead holder + if(quirk_holder.stat == DEAD) + return + + // When held: Positive mood + if(heirloom && (heirloom in quirk_holder.GetAllContents())) SEND_SIGNAL(quirk_holder, COMSIG_CLEAR_MOOD_EVENT, "family_heirloom_missing") SEND_SIGNAL(quirk_holder, COMSIG_ADD_MOOD_EVENT, "family_heirloom", /datum/mood_event/family_heirloom) + + // When not held: Negative mood else SEND_SIGNAL(quirk_holder, COMSIG_CLEAR_MOOD_EVENT, "family_heirloom") SEND_SIGNAL(quirk_holder, COMSIG_ADD_MOOD_EVENT, "family_heirloom_missing", /datum/mood_event/family_heirloom_missing) +/datum/quirk/item_quirk/family_heirloom/remove() + // Clear mood events when removing this quirk + SEND_SIGNAL(quirk_holder, COMSIG_CLEAR_MOOD_EVENT, "family_heirloom") + SEND_SIGNAL(quirk_holder, COMSIG_CLEAR_MOOD_EVENT, "family_heirloom_missing") + /datum/quirk/family_heirloom/clone_data() return heirloom diff --git a/code/game/objects/items/storage/firstaid.dm b/code/game/objects/items/storage/firstaid.dm index bcfcbe20f8..0381779531 100644 --- a/code/game/objects/items/storage/firstaid.dm +++ b/code/game/objects/items/storage/firstaid.dm @@ -55,8 +55,9 @@ generate_items_inside(items_inside,src) /obj/item/storage/firstaid/ancient - icon_state = "firstaid" - desc = "A first aid kit with the ability to heal common types of injuries." + name = "ancient first-aid kit" + icon_state = "oldfirstaid" + desc = "A first aid kit with the ability to heal common types of injuries. You start thinking of the good old days just by looking at it." /obj/item/storage/firstaid/ancient/PopulateContents() if(empty) @@ -69,6 +70,10 @@ new /obj/item/stack/medical/mesh(src) new /obj/item/stack/medical/mesh(src) +/obj/item/storage/firstaid/ancient/heirloom + // Long since been ransacked by hungry powergaming assistants breaking into med storage + empty = TRUE + /obj/item/storage/firstaid/brute name = "trauma treatment kit" desc = "A first aid kit for when you get toolboxed." diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm index e297df8238..9a05f97cc7 100644 --- a/code/modules/jobs/job_types/_job.dm +++ b/code/modules/jobs/job_types/_job.dm @@ -69,6 +69,9 @@ ///Is this job affected by weird spawns like the ones from station traits var/random_spawns_possible = TRUE + /// List of family heirlooms this job can get with the family heirloom quirk. List of types. + var/list/family_heirlooms + var/display_order = JOB_DISPLAY_ORDER_DEFAULT var/bounty_types = CIV_JOB_BASIC diff --git a/code/modules/jobs/job_types/assistant.dm b/code/modules/jobs/job_types/assistant.dm index db5390f323..7ce29db178 100644 --- a/code/modules/jobs/job_types/assistant.dm +++ b/code/modules/jobs/job_types/assistant.dm @@ -20,6 +20,11 @@ Assistant dresscodecompliant = FALSE always_can_respawn_as = TRUE threat = 0.2 + + family_heirlooms = list( + /obj/item/storage/toolbox/mechanical/old/heirloom, + /obj/item/clothing/gloves/cut/family + ) /datum/job/assistant/get_access() if(CONFIG_GET(flag/assistants_have_maint_access) || !CONFIG_GET(flag/jobs_have_minimal_access)) //Config has assistant maint access set diff --git a/code/modules/jobs/job_types/atmospheric_technician.dm b/code/modules/jobs/job_types/atmospheric_technician.dm index 9aa8ea07c4..551ac63d00 100644 --- a/code/modules/jobs/job_types/atmospheric_technician.dm +++ b/code/modules/jobs/job_types/atmospheric_technician.dm @@ -26,6 +26,12 @@ display_order = JOB_DISPLAY_ORDER_ATMOSPHERIC_TECHNICIAN threat = 0.5 + + family_heirlooms = list( + /obj/item/lighter, + /obj/item/lighter/greyscale, + /obj/item/storage/box/matches + ) /datum/outfit/job/atmos name = "Atmospheric Technician" diff --git a/code/modules/jobs/job_types/bartender.dm b/code/modules/jobs/job_types/bartender.dm index 70ca762f39..40a1b20cb1 100644 --- a/code/modules/jobs/job_types/bartender.dm +++ b/code/modules/jobs/job_types/bartender.dm @@ -20,6 +20,12 @@ bounty_types = CIV_JOB_DRINK display_order = JOB_DISPLAY_ORDER_BARTENDER threat = 0.5 + + family_heirlooms = list( + /obj/item/reagent_containers/rag, + /obj/item/clothing/head/that, + /obj/item/reagent_containers/food/drinks/shaker + ) /datum/outfit/job/bartender name = "Bartender" diff --git a/code/modules/jobs/job_types/botanist.dm b/code/modules/jobs/job_types/botanist.dm index 53502ee30e..7a43837cf4 100644 --- a/code/modules/jobs/job_types/botanist.dm +++ b/code/modules/jobs/job_types/botanist.dm @@ -20,6 +20,12 @@ display_order = JOB_DISPLAY_ORDER_BOTANIST threat = 1.5 // lol powergame + family_heirlooms = list( + /obj/item/cultivator, + /obj/item/reagent_containers/glass/bucket, // Watering cans don't exist yet + /obj/item/toy/plush/beeplushie, + ) + /datum/outfit/job/botanist name = "Botanist" jobtype = /datum/job/hydro diff --git a/code/modules/jobs/job_types/captain.dm b/code/modules/jobs/job_types/captain.dm index c3765260cc..65811d40a0 100644 --- a/code/modules/jobs/job_types/captain.dm +++ b/code/modules/jobs/job_types/captain.dm @@ -32,6 +32,11 @@ blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/insanity) threat = 5 + + family_heirlooms = list( + /obj/item/reagent_containers/food/drinks/flask/gold, + /obj/item/toy/figure/captain + ) /datum/job/captain/get_access() return get_all_accesses() diff --git a/code/modules/jobs/job_types/cargo_technician.dm b/code/modules/jobs/job_types/cargo_technician.dm index f8e2f74d80..1188669db5 100644 --- a/code/modules/jobs/job_types/cargo_technician.dm +++ b/code/modules/jobs/job_types/cargo_technician.dm @@ -21,6 +21,10 @@ display_order = JOB_DISPLAY_ORDER_CARGO_TECHNICIAN bounty_types = CIV_JOB_RANDOM threat = 0.2 + + family_heirlooms = list( + /obj/item/clipboard + ) /datum/outfit/job/cargo_tech name = "Cargo Technician" diff --git a/code/modules/jobs/job_types/chaplain.dm b/code/modules/jobs/job_types/chaplain.dm index ef4f20765c..e7d602bd22 100644 --- a/code/modules/jobs/job_types/chaplain.dm +++ b/code/modules/jobs/job_types/chaplain.dm @@ -19,6 +19,11 @@ display_order = JOB_DISPLAY_ORDER_CHAPLAIN threat = 0.5 + + family_heirlooms = list( + /obj/item/toy/windupToolbox, + /obj/item/reagent_containers/food/drinks/bottle/holywater + ) /datum/job/chaplain/after_spawn(mob/living/H, client/C) diff --git a/code/modules/jobs/job_types/chemist.dm b/code/modules/jobs/job_types/chemist.dm index 209b3f82d0..9f830ba43c 100644 --- a/code/modules/jobs/job_types/chemist.dm +++ b/code/modules/jobs/job_types/chemist.dm @@ -24,6 +24,11 @@ threat = 1.5 starting_modifiers = list(/datum/skill_modifier/job/surgery, /datum/skill_modifier/job/affinity/surgery) + + family_heirlooms = list( + /obj/item/book/manual/wiki/chemistry, + /obj/item/fermichem/pHbooklet + ) /datum/outfit/job/chemist name = "Chemist" diff --git a/code/modules/jobs/job_types/chief_engineer.dm b/code/modules/jobs/job_types/chief_engineer.dm index 60b963d7ec..2949758d8a 100644 --- a/code/modules/jobs/job_types/chief_engineer.dm +++ b/code/modules/jobs/job_types/chief_engineer.dm @@ -37,6 +37,15 @@ display_order = JOB_DISPLAY_ORDER_CHIEF_ENGINEER blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/paraplegic, /datum/quirk/insanity) threat = 2 + + family_heirlooms = list( + /obj/item/clothing/head/hardhat, + /obj/item/screwdriver/brass/family, + /obj/item/wrench/brass/family, + /obj/item/weldingtool/mini, // No brass family variant + /obj/item/crowbar/brass/family, + /obj/item/wirecutters/brass/family + ) /datum/outfit/job/ce name = "Chief Engineer" diff --git a/code/modules/jobs/job_types/chief_medical_officer.dm b/code/modules/jobs/job_types/chief_medical_officer.dm index 401b503110..f5170fc745 100644 --- a/code/modules/jobs/job_types/chief_medical_officer.dm +++ b/code/modules/jobs/job_types/chief_medical_officer.dm @@ -35,6 +35,15 @@ threat = 2 starting_modifiers = list(/datum/skill_modifier/job/surgery, /datum/skill_modifier/job/affinity/surgery) + + family_heirlooms = list( + /obj/item/storage/firstaid/ancient/heirloom, + /obj/item/scalpel, + /obj/item/hemostat, + /obj/item/circular_saw, + /obj/item/retractor, + /obj/item/cautery + ) /datum/outfit/job/cmo name = "Chief Medical Officer" diff --git a/code/modules/jobs/job_types/clown.dm b/code/modules/jobs/job_types/clown.dm index 380215a93b..5631ce4624 100644 --- a/code/modules/jobs/job_types/clown.dm +++ b/code/modules/jobs/job_types/clown.dm @@ -21,6 +21,10 @@ display_order = JOB_DISPLAY_ORDER_CLOWN threat = 0 // honk + + family_heirlooms = list( + /obj/item/bikehorn/golden + ) /datum/outfit/job/clown name = "Clown" diff --git a/code/modules/jobs/job_types/cook.dm b/code/modules/jobs/job_types/cook.dm index 2a021e6575..9947c27ba9 100644 --- a/code/modules/jobs/job_types/cook.dm +++ b/code/modules/jobs/job_types/cook.dm @@ -22,6 +22,12 @@ display_order = JOB_DISPLAY_ORDER_COOK threat = 0.2 + family_heirlooms = list( + /obj/item/reagent_containers/food/condiment/saltshaker, + /obj/item/kitchen/rollingpin, + /obj/item/clothing/head/chefhat + ) + /datum/outfit/job/cook name = "Cook" jobtype = /datum/job/cook diff --git a/code/modules/jobs/job_types/curator.dm b/code/modules/jobs/job_types/curator.dm index 254fc15bd4..e6e9394109 100644 --- a/code/modules/jobs/job_types/curator.dm +++ b/code/modules/jobs/job_types/curator.dm @@ -19,6 +19,11 @@ display_order = JOB_DISPLAY_ORDER_CURATOR threat = 0.3 + + family_heirlooms = list( + /obj/item/pen/fountain, + /obj/item/storage/dice + ) /datum/outfit/job/curator name = "Curator" diff --git a/code/modules/jobs/job_types/detective.dm b/code/modules/jobs/job_types/detective.dm index b56ebed191..2330e93147 100644 --- a/code/modules/jobs/job_types/detective.dm +++ b/code/modules/jobs/job_types/detective.dm @@ -27,6 +27,10 @@ display_order = JOB_DISPLAY_ORDER_DETECTIVE blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/nonviolent, /datum/quirk/paraplegic, /datum/quirk/monophobia) threat = 1 + + family_heirlooms = list( + /obj/item/reagent_containers/food/drinks/flask/det + ) /datum/outfit/job/detective name = "Detective" diff --git a/code/modules/jobs/job_types/geneticist.dm b/code/modules/jobs/job_types/geneticist.dm index 611c3f99cd..2529eaa024 100644 --- a/code/modules/jobs/job_types/geneticist.dm +++ b/code/modules/jobs/job_types/geneticist.dm @@ -24,6 +24,10 @@ threat = 1.5 starting_modifiers = list(/datum/skill_modifier/job/surgery, /datum/skill_modifier/job/affinity/surgery) + + family_heirlooms = list( + /obj/item/clothing/under/shorts/purple + ) /datum/outfit/job/geneticist name = "Geneticist" diff --git a/code/modules/jobs/job_types/head_of_personnel.dm b/code/modules/jobs/job_types/head_of_personnel.dm index 4c38fc4cf2..6371aaaa9f 100644 --- a/code/modules/jobs/job_types/head_of_personnel.dm +++ b/code/modules/jobs/job_types/head_of_personnel.dm @@ -39,6 +39,10 @@ blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/prosopagnosia, /datum/quirk/insanity) threat = 2 + + family_heirlooms = list( + /obj/item/reagent_containers/food/drinks/trophy/silver_cup + ) /datum/outfit/job/hop diff --git a/code/modules/jobs/job_types/head_of_security.dm b/code/modules/jobs/job_types/head_of_security.dm index 5339b5927c..cfe1057f8d 100644 --- a/code/modules/jobs/job_types/head_of_security.dm +++ b/code/modules/jobs/job_types/head_of_security.dm @@ -38,6 +38,10 @@ display_order = JOB_DISPLAY_ORDER_HEAD_OF_SECURITY blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/nonviolent, /datum/quirk/paraplegic, /datum/quirk/blindness, /datum/quirk/monophobia, /datum/quirk/insanity) threat = 3 + + family_heirlooms = list( + /obj/item/book/manual/wiki/security_space_law + ) /datum/outfit/job/hos name = "Head of Security" diff --git a/code/modules/jobs/job_types/janitor.dm b/code/modules/jobs/job_types/janitor.dm index c62c2e5b26..59c6997398 100644 --- a/code/modules/jobs/job_types/janitor.dm +++ b/code/modules/jobs/job_types/janitor.dm @@ -19,6 +19,13 @@ display_order = JOB_DISPLAY_ORDER_JANITOR threat = 0.2 + + family_heirlooms = list( + /obj/item/mop, + /obj/item/clothing/suit/caution, + /obj/item/reagent_containers/glass/bucket, + /obj/item/soap + ) /datum/outfit/job/janitor name = "Janitor" diff --git a/code/modules/jobs/job_types/lawyer.dm b/code/modules/jobs/job_types/lawyer.dm index 17c376a5de..4105bd4e6e 100644 --- a/code/modules/jobs/job_types/lawyer.dm +++ b/code/modules/jobs/job_types/lawyer.dm @@ -22,6 +22,11 @@ display_order = JOB_DISPLAY_ORDER_LAWYER threat = 0.3 + + family_heirlooms = list( + /obj/item/gavelhammer, + /obj/item/book/manual/wiki/security_space_law + ) /datum/outfit/job/lawyer name = "Lawyer" diff --git a/code/modules/jobs/job_types/medical_doctor.dm b/code/modules/jobs/job_types/medical_doctor.dm index 75a85c88d1..b0a0375517 100644 --- a/code/modules/jobs/job_types/medical_doctor.dm +++ b/code/modules/jobs/job_types/medical_doctor.dm @@ -22,6 +22,15 @@ threat = 0.5 starting_modifiers = list(/datum/skill_modifier/job/surgery, /datum/skill_modifier/job/affinity/surgery) + + family_heirlooms = list( + /obj/item/storage/firstaid/ancient/heirloom, + /obj/item/scalpel, + /obj/item/hemostat, + /obj/item/circular_saw, + /obj/item/retractor, + /obj/item/cautery + ) /datum/outfit/job/doctor name = "Medical Doctor" diff --git a/code/modules/jobs/job_types/mime.dm b/code/modules/jobs/job_types/mime.dm index 171e0cef8a..84d6bcb1a7 100644 --- a/code/modules/jobs/job_types/mime.dm +++ b/code/modules/jobs/job_types/mime.dm @@ -20,6 +20,10 @@ display_order = JOB_DISPLAY_ORDER_MIME threat = 0 + + family_heirlooms = list( + /obj/item/reagent_containers/food/snacks/baguette + ) /datum/job/mime/after_spawn(mob/living/carbon/human/H, client/C) . = ..() diff --git a/code/modules/jobs/job_types/paramedic.dm b/code/modules/jobs/job_types/paramedic.dm index 2b374921be..73f6c5da5e 100644 --- a/code/modules/jobs/job_types/paramedic.dm +++ b/code/modules/jobs/job_types/paramedic.dm @@ -23,6 +23,10 @@ threat = 0.5 starting_modifiers = list(/datum/skill_modifier/job/surgery, /datum/skill_modifier/job/affinity/surgery) + + family_heirlooms = list( + /obj/item/storage/firstaid/ancient/heirloom + ) /datum/outfit/job/paramedic name = "Paramedic" diff --git a/code/modules/jobs/job_types/prisoner.dm b/code/modules/jobs/job_types/prisoner.dm index 06eafe649b..20a2f463f5 100644 --- a/code/modules/jobs/job_types/prisoner.dm +++ b/code/modules/jobs/job_types/prisoner.dm @@ -13,6 +13,10 @@ plasma_outfit = /datum/outfit/plasmaman/prisoner display_order = JOB_DISPLAY_ORDER_PRISONER + + family_heirlooms = list( + /obj/item/pen/blue + ) /datum/job/prisoner/get_latejoin_spawn_point() return get_roundstart_spawn_point() diff --git a/code/modules/jobs/job_types/quartermaster.dm b/code/modules/jobs/job_types/quartermaster.dm index 8ea7579127..dd79768282 100644 --- a/code/modules/jobs/job_types/quartermaster.dm +++ b/code/modules/jobs/job_types/quartermaster.dm @@ -32,6 +32,11 @@ display_order = JOB_DISPLAY_ORDER_QUARTERMASTER blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/insanity) threat = 0.5 + + family_heirlooms = list( + /obj/item/stamp, + /obj/item/stamp/denied + ) /datum/outfit/job/quartermaster name = "Quartermaster" diff --git a/code/modules/jobs/job_types/research_director.dm b/code/modules/jobs/job_types/research_director.dm index 178bcc3188..606c34af5e 100644 --- a/code/modules/jobs/job_types/research_director.dm +++ b/code/modules/jobs/job_types/research_director.dm @@ -38,6 +38,10 @@ starting_modifiers = list(/datum/skill_modifier/job/level/wiring) blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/insanity) threat = 5 + + family_heirlooms = list( + /obj/item/toy/plush/slimeplushie + ) /datum/outfit/job/rd name = "Research Director" diff --git a/code/modules/jobs/job_types/roboticist.dm b/code/modules/jobs/job_types/roboticist.dm index 6f7b91571b..0e48467d91 100644 --- a/code/modules/jobs/job_types/roboticist.dm +++ b/code/modules/jobs/job_types/roboticist.dm @@ -24,6 +24,10 @@ display_order = JOB_DISPLAY_ORDER_ROBOTICIST threat = 1 + + family_heirlooms = list( + /obj/item/toy/figure/borg + ) /datum/outfit/job/roboticist name = "Roboticist" diff --git a/code/modules/jobs/job_types/scientist.dm b/code/modules/jobs/job_types/scientist.dm index 10e3f58594..4bdbe6833b 100644 --- a/code/modules/jobs/job_types/scientist.dm +++ b/code/modules/jobs/job_types/scientist.dm @@ -22,6 +22,10 @@ starting_modifiers = list(/datum/skill_modifier/job/level/wiring/basic) display_order = JOB_DISPLAY_ORDER_SCIENTIST threat = 1.2 + + family_heirlooms = list( + /obj/item/toy/plush/slimeplushie + ) /datum/outfit/job/scientist name = "Scientist" diff --git a/code/modules/jobs/job_types/security_officer.dm b/code/modules/jobs/job_types/security_officer.dm index 1b06d050b7..b1f7475da5 100644 --- a/code/modules/jobs/job_types/security_officer.dm +++ b/code/modules/jobs/job_types/security_officer.dm @@ -28,6 +28,11 @@ display_order = JOB_DISPLAY_ORDER_SECURITY_OFFICER blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/nonviolent, /datum/quirk/paraplegic, /datum/quirk/blindness, /datum/quirk/monophobia) threat = 2 + + family_heirlooms = list( + /obj/item/book/manual/wiki/security_space_law, + /obj/item/clothing/head/beret/sec + ) /datum/job/officer/get_access() var/list/L = list() diff --git a/code/modules/jobs/job_types/shaft_miner.dm b/code/modules/jobs/job_types/shaft_miner.dm index e693335779..c6192280c7 100644 --- a/code/modules/jobs/job_types/shaft_miner.dm +++ b/code/modules/jobs/job_types/shaft_miner.dm @@ -24,6 +24,11 @@ display_order = JOB_DISPLAY_ORDER_SHAFT_MINER threat = 1.5 + + family_heirlooms = list( + /obj/item/pickaxe/mini, + /obj/item/shovel + ) /datum/outfit/job/miner name = "Shaft Miner (Lavaland)" diff --git a/code/modules/jobs/job_types/station_engineer.dm b/code/modules/jobs/job_types/station_engineer.dm index e2248362d0..58822dc4c5 100644 --- a/code/modules/jobs/job_types/station_engineer.dm +++ b/code/modules/jobs/job_types/station_engineer.dm @@ -27,6 +27,15 @@ display_order = JOB_DISPLAY_ORDER_STATION_ENGINEER threat = 1 + + family_heirlooms = list( + /obj/item/clothing/head/hardhat, + /obj/item/screwdriver/brass/family, + /obj/item/wrench/brass/family, + /obj/item/weldingtool/mini, // No brass family variant + /obj/item/crowbar/brass/family, + /obj/item/wirecutters/brass/family + ) /datum/outfit/job/engineer name = "Station Engineer" diff --git a/code/modules/jobs/job_types/virologist.dm b/code/modules/jobs/job_types/virologist.dm index be844be529..423a65048f 100644 --- a/code/modules/jobs/job_types/virologist.dm +++ b/code/modules/jobs/job_types/virologist.dm @@ -25,6 +25,10 @@ threat = 1.5 starting_modifiers = list(/datum/skill_modifier/job/surgery, /datum/skill_modifier/job/affinity/surgery) + + family_heirlooms = list( + /obj/item/reagent_containers/syringe + ) /datum/outfit/job/virologist name = "Virologist" diff --git a/code/modules/jobs/job_types/warden.dm b/code/modules/jobs/job_types/warden.dm index 8e3ef5a253..714c599024 100644 --- a/code/modules/jobs/job_types/warden.dm +++ b/code/modules/jobs/job_types/warden.dm @@ -29,6 +29,10 @@ display_order = JOB_DISPLAY_ORDER_WARDEN blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/nonviolent, /datum/quirk/paraplegic, /datum/quirk/blindness, /datum/quirk/monophobia) threat = 2 + + family_heirlooms = list( + /obj/item/book/manual/wiki/security_space_law + ) /datum/job/warden/get_access() var/list/L = list() diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 94e0685e62..10f064423c 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -231,6 +231,9 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) ///For custom overrides for species ass images var/icon/ass_image + /// List of family heirlooms this species can get with the family heirloom quirk. List of types. + var/list/family_heirlooms + /////////// // PROCS // /////////// diff --git a/code/modules/mob/living/carbon/human/species_types/bugmen.dm b/code/modules/mob/living/carbon/human/species_types/bugmen.dm index bddb0cdc56..1e58e995c2 100644 --- a/code/modules/mob/living/carbon/human/species_types/bugmen.dm +++ b/code/modules/mob/living/carbon/human/species_types/bugmen.dm @@ -24,3 +24,7 @@ allowed_limb_ids = list("insect","apid","moth","moth_not_greyscale") eye_type = "insect" + + family_heirlooms = list( + /obj/item/flashlight/lantern/heirloom_moth + ) diff --git a/code/modules/mob/living/carbon/human/species_types/dwarves.dm b/code/modules/mob/living/carbon/human/species_types/dwarves.dm index e0a9bcaa36..2820726313 100644 --- a/code/modules/mob/living/carbon/human/species_types/dwarves.dm +++ b/code/modules/mob/living/carbon/human/species_types/dwarves.dm @@ -20,6 +20,11 @@ GLOBAL_LIST_INIT(dwarf_last, world.file2list("strings/names/dwarf_last.txt")) // species_language_holder = /datum/language_holder/dwarf species_category = SPECIES_CATEGORY_BASIC //a kind of human + family_heirlooms = list( + // Dwarves get a dwarf mug as their heirloom (normal container but has manly dorf icon) + /obj/item/reagent_containers/food/drinks/dwarf_mug + ) + /mob/living/carbon/human/species/dwarf //species admin spawn path race = /datum/species/dwarf //and the race the path is set to. diff --git a/code/modules/mob/living/carbon/human/species_types/felinid.dm b/code/modules/mob/living/carbon/human/species_types/felinid.dm index eee5757b46..beebbb1dfd 100644 --- a/code/modules/mob/living/carbon/human/species_types/felinid.dm +++ b/code/modules/mob/living/carbon/human/species_types/felinid.dm @@ -13,6 +13,7 @@ wagging_type = "mam_waggingtail" species_category = SPECIES_CATEGORY_FURRY ass_image = 'icons/ass/asscat.png' + family_heirlooms = list(/obj/item/toy/cattoy) /datum/species/human/felinid/on_species_gain(mob/living/carbon/C, datum/species/old_species, pref_load) if(ishuman(C)) diff --git a/code/modules/mob/living/carbon/human/species_types/ipc.dm b/code/modules/mob/living/carbon/human/species_types/ipc.dm index 8c9e6bcd4f..f6749dde06 100644 --- a/code/modules/mob/living/carbon/human/species_types/ipc.dm +++ b/code/modules/mob/living/carbon/human/species_types/ipc.dm @@ -37,6 +37,11 @@ species_category = SPECIES_CATEGORY_ROBOT wings_icons = SPECIES_WINGS_ROBOT + family_heirlooms = list( + // Gives a broken powercell for flavor text! + /obj/item/stock_parts/cell/family + ) + var/datum/action/innate/monitor_change/screen /datum/species/ipc/on_species_gain(mob/living/carbon/human/C) diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index 9ecf25a3a6..6f48d9022d 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -34,6 +34,10 @@ ass_image = 'icons/ass/assslime.png' blacklisted_quirks = list(/datum/quirk/glass_bones) + family_heirlooms = list( + /obj/item/toy/plush/slimeplushie + ) + /datum/species/jelly/on_species_loss(mob/living/carbon/C) C.faction -= "slime" if(ishuman(C)) diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm index c334e6ef3e..ffdc23a5a7 100644 --- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm @@ -33,6 +33,10 @@ ass_image = 'icons/ass/asslizard.png' + family_heirlooms = list( + /obj/item/toy/plush/lizardplushie + ) + /datum/species/lizard/random_name(gender,unique,lastname) if(unique) return random_unique_lizard_name(gender) diff --git a/code/modules/mob/living/carbon/human/species_types/synthliz.dm b/code/modules/mob/living/carbon/human/species_types/synthliz.dm index aa853ee551..a209da270f 100644 --- a/code/modules/mob/living/carbon/human/species_types/synthliz.dm +++ b/code/modules/mob/living/carbon/human/species_types/synthliz.dm @@ -36,3 +36,8 @@ wagging_type = "mam_waggingtail" species_category = SPECIES_CATEGORY_ROBOT wings_icons = SPECIES_WINGS_ROBOT + + family_heirlooms = list( + // They're also robots + /obj/item/stock_parts/cell/family + ) diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi index 27ad84b1a43e76c4bdcff3b802f2d8084c45683f..3204b36cc5b5d12ccc45a32298a6053ce8695997 100644 GIT binary patch delta 12807 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 delta 12331 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 X!rSmFUol${@}u_hjZ%$*Md<$lK7BNQ From 0cfd6166b409d9033b649d714c6b043bc3d1e917 Mon Sep 17 00:00:00 2001 From: Guatolipo <122039912+Guatolipo@users.noreply.github.com> Date: Thu, 5 Jan 2023 13:31:14 -0500 Subject: [PATCH 011/129] chemistry access added to Med-U DELUXE cartridge --- code/game/objects/items/devices/PDA/cart.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm index 34f8202898..3f35ed5f12 100644 --- a/code/game/objects/items/devices/PDA/cart.dm +++ b/code/game/objects/items/devices/PDA/cart.dm @@ -171,7 +171,7 @@ /obj/item/cartridge/cmo name = "\improper Med-U DELUXE cartridge" icon_state = "cart-cmo" - access = CART_MANIFEST | CART_STATUS_DISPLAY | CART_REAGENT_SCANNER | CART_MEDICAL + access = CART_MANIFEST | CART_STATUS_DISPLAY | CART_REAGENT_SCANNER | CART_MEDICAL | CART_CHEMISTRY bot_access_flags = MED_BOT /obj/item/cartridge/rd From 07b4d658efe06c7e6555b0058830f1e6d015aaad Mon Sep 17 00:00:00 2001 From: Kush1Push1 Date: Fri, 6 Jan 2023 16:29:49 +0700 Subject: [PATCH 012/129] initial --- .../code/modules/keybindings/keybind/human.dm | 32 +++++++ .../mob/living/carbon/human/inventory.dm | 92 +++++++++++++++++++ tgstation.dme | 2 + 3 files changed, 126 insertions(+) create mode 100644 modular_splurt/code/modules/keybindings/keybind/human.dm create mode 100644 modular_splurt/code/modules/mob/living/carbon/human/inventory.dm diff --git a/modular_splurt/code/modules/keybindings/keybind/human.dm b/modular_splurt/code/modules/keybindings/keybind/human.dm new file mode 100644 index 0000000000..951ce686e2 --- /dev/null +++ b/modular_splurt/code/modules/keybindings/keybind/human.dm @@ -0,0 +1,32 @@ +/datum/keybinding/human/quick_equip_suitstorage + hotkey_keys = list("ShiftQ") + name = "quick_equipsuitstorage" + full_name = "Quick suit storage" + description = "Put held thing in suit storage or take the item from it" + +/datum/keybinding/human/quick_equip_suitstorage/down(client/user) + var/mob/living/carbon/human/H = user.mob + H.smart_equip_suitstorage() + return TRUE + +/datum/keybinding/human/quick_equip_lpocket + hotkey_keys = list("Unbound") + name = "quick_equip_lpocket" + full_name = "Quick left pocket" + description = "Put held thing in left pocket or take the item from it" + +/datum/keybinding/human/quick_equip_lpocket/down(client/user) + var/mob/living/carbon/human/H = user.mob + H.smart_equip_lpocket() + return TRUE + +/datum/keybinding/human/quick_equip_rpocket + hotkey_keys = list("Unbound") + name = "quick_equip_rpocket" + full_name = "Quick right pocket" + description = "Put held thing in right pocket or take the item from it" + +/datum/keybinding/human/quick_equip_rpocket/down(client/user) + var/mob/living/carbon/human/H = user.mob + H.smart_equip_rpocket() + return TRUE diff --git a/modular_splurt/code/modules/mob/living/carbon/human/inventory.dm b/modular_splurt/code/modules/mob/living/carbon/human/inventory.dm new file mode 100644 index 0000000000..ffc8a50b73 --- /dev/null +++ b/modular_splurt/code/modules/mob/living/carbon/human/inventory.dm @@ -0,0 +1,92 @@ +/mob/living/carbon/human/proc/smart_equip_suitstorage() // put held thing in suit storage or take the item from it + if(incapacitated()) + return + var/obj/item/thing = get_active_held_item() + var/obj/item/equipped_suitstorage = get_item_by_slot(ITEM_SLOT_SUITSTORE) + if(!equipped_suitstorage) // We also let you equip another storage like this + if(!thing) + to_chat(src, "You haven't anything on your suit!") + return + if(equip_to_slot_if_possible(thing, ITEM_SLOT_SUITSTORE)) + update_inv_hands() + return + if(!SEND_SIGNAL(equipped_suitstorage, COMSIG_CONTAINS_STORAGE)) // not a storage item + if(!thing) + equipped_suitstorage.attack_hand(src) + else + to_chat(src, "You can't fit anything in!") + return + if(thing) // put thing in suit storage + if(!SEND_SIGNAL(equipped_suitstorage, COMSIG_TRY_STORAGE_INSERT, thing, src)) + to_chat(src, "You can't fit anything in!") + return + if(!equipped_suitstorage.contents.len) // nothing to take out + to_chat(src, "There's nothing in your belt to take out!") + return + var/obj/item/stored = equipped_suitstorage.contents[equipped_suitstorage.contents.len] + if(!stored || stored.on_found(src)) + return + stored.attack_hand(src) // take out thing from suit storage + return + +/mob/living/carbon/human/proc/smart_equip_rpocket() // put held thing in right pocket or take the item from it + if(incapacitated()) + return + var/obj/item/thing = get_active_held_item() + var/obj/item/equipped_rpocket = get_item_by_slot(ITEM_SLOT_RPOCKET) + if(!equipped_rpocket) // We also let you equip another storage like this + if(!thing) + to_chat(src, "You haven't anything on your suit!") + return + if(equip_to_slot_if_possible(thing, ITEM_SLOT_RPOCKET)) + update_inv_hands() + return + if(!SEND_SIGNAL(equipped_rpocket, COMSIG_CONTAINS_STORAGE)) // not a storage item + if(!thing) + equipped_rpocket.attack_hand(src) + else + to_chat(src, "You can't fit anything in!") + return + if(thing) // put thing in suit storage + if(!SEND_SIGNAL(equipped_rpocket, COMSIG_TRY_STORAGE_INSERT, thing, src)) + to_chat(src, "You can't fit anything in!") + return + if(!equipped_rpocket.contents.len) // nothing to take out + to_chat(src, "There's nothing in your belt to take out!") + return + var/obj/item/stored = equipped_rpocket.contents[equipped_rpocket.contents.len] + if(!stored || stored.on_found(src)) + return + stored.attack_hand(src) // take out thing from right pocket + return + +/mob/living/carbon/human/proc/smart_equip_lpocket() // put held thing in left pocket or take the item from it + if(incapacitated()) + return + var/obj/item/thing = get_active_held_item() + var/obj/item/equipped_lpocket = get_item_by_slot(ITEM_SLOT_LPOCKET) + if(!equipped_lpocket) // We also let you equip another storage like this + if(!thing) + to_chat(src, "You haven't anything on your suit!") + return + if(equip_to_slot_if_possible(thing, ITEM_SLOT_LPOCKET)) + update_inv_hands() + return + if(!SEND_SIGNAL(equipped_lpocket, COMSIG_CONTAINS_STORAGE)) // not a storage item + if(!thing) + equipped_lpocket.attack_hand(src) + else + to_chat(src, "You can't fit anything in!") + return + if(thing) // put thing in + if(!SEND_SIGNAL(equipped_lpocket, COMSIG_TRY_STORAGE_INSERT, thing, src)) + to_chat(src, "You can't fit anything in!") + return + if(!equipped_lpocket.contents.len) // nothing to take out + to_chat(src, "There's nothing in your belt to take out!") + return + var/obj/item/stored = equipped_lpocket.contents[equipped_lpocket.contents.len] + if(!stored || stored.on_found(src)) + return + stored.attack_hand(src) // take out thing from left pocket + return diff --git a/tgstation.dme b/tgstation.dme index df80e41845..7453bb0f1e 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -4618,6 +4618,7 @@ #include "modular_splurt\code\modules\jobs\job_types\security_officer.dm" #include "modular_splurt\code\modules\jobs\job_types\service.dm" #include "modular_splurt\code\modules\jobs\job_types\station_engineer.dm" +#include "modular_splurt\code\modules\keybindings\keybind\human.dm" #include "modular_splurt\code\modules\keybindings\keybind\movement.dm" #include "modular_splurt\code\modules\language\xenocommon.dm" #include "modular_splurt\code\modules\mapping\mapping_helpers\baseturf.dm" @@ -4657,6 +4658,7 @@ #include "modular_splurt\code\modules\mob\living\carbon\carbon.dm" #include "modular_splurt\code\modules\mob\living\carbon\human\human.dm" #include "modular_splurt\code\modules\mob\living\carbon\human\human_defines.dm" +#include "modular_splurt\code\modules\mob\living\carbon\human\inventory.dm" #include "modular_splurt\code\modules\mob\living\carbon\human\physiology.dm" #include "modular_splurt\code\modules\mob\living\carbon\human\species.dm" #include "modular_splurt\code\modules\mob\living\carbon\human\simple_animal\hostile\deathclaw\deathclaw.dm" From 67dd4a7925131ab22afc7b74c19285b1581e30a5 Mon Sep 17 00:00:00 2001 From: Seris02 Date: Sat, 7 Jan 2023 17:35:29 +0800 Subject: [PATCH 013/129] fix regen + pulling + shifting --- modular_splurt/code/datums/traits/neutral.dm | 13 +++++++------ .../code/game/objects/structures/statues.dm | 12 +++++++++++- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/modular_splurt/code/datums/traits/neutral.dm b/modular_splurt/code/datums/traits/neutral.dm index 4ffd679e8d..154b434414 100644 --- a/modular_splurt/code/datums/traits/neutral.dm +++ b/modular_splurt/code/datums/traits/neutral.dm @@ -578,13 +578,13 @@ if(transformed) energy = min(energy + 0.03, 100) if (H.getBruteLoss() > 0 || H.getFireLoss() > 0) - H.adjustBruteLoss(-0.5) - H.adjustFireLoss(-0.5) + H.adjustBruteLoss(-0.5, forced = TRUE) + H.adjustFireLoss(-0.5, forced = TRUE) else if (H.getOxyLoss() > 0 || H.getToxLoss() > 0) - H.adjustToxLoss(-0.3) - H.adjustOxyLoss(-0.5) //oxyloss heals by itself, doesn't need a nerfed heal + H.adjustToxLoss(-0.3, forced = TRUE) + H.adjustOxyLoss(-0.5, forced = TRUE) //oxyloss heals by itself, doesn't need a nerfed heal else if (H.getCloneLoss() > 0) - H.adjustCloneLoss(-0.3) + H.adjustCloneLoss(-0.3, forced = TRUE) else if (current && current.obj_integrity < current.max_integrity) //health == maxHealth is true since we checked all damages above current.obj_integrity = min(current.obj_integrity + 0.1, current.max_integrity) @@ -850,7 +850,8 @@ T.paused = 0 return 1 else - qdel(T.current) + if (T.current) + qdel(T.current) T.transformed = 0 T.cooldown = 30 T.paused = 0 diff --git a/modular_splurt/code/game/objects/structures/statues.dm b/modular_splurt/code/game/objects/structures/statues.dm index 25bacb82cd..16325fcdd2 100644 --- a/modular_splurt/code/game/objects/structures/statues.dm +++ b/modular_splurt/code/game/objects/structures/statues.dm @@ -47,6 +47,10 @@ ADD_TRAIT(L, TRAIT_MOBILITY_NOMOVE, STATUE_TRAIT) ADD_TRAIT(L, TRAIT_MOBILITY_NOPICKUP, STATUE_TRAIT) ADD_TRAIT(L, TRAIT_MOBILITY_NOUSE, STATUE_TRAIT) + ADD_TRAIT(L, TRAIT_NOBREATH, STATUE_TRAIT) + ADD_TRAIT(L, TRAIT_NOHUNGER, STATUE_TRAIT) + ADD_TRAIT(L, TRAIT_NOTHIRST, STATUE_TRAIT) + ADD_TRAIT(L, TRAIT_NOFIRE, STATUE_TRAIT) //OH GOD HELP I'M ON FIRE INSIDE THE STATUE I CAN'T MOVE AND I CAN'T STOP IT HAAAAALP - person who experienced this L.click_intercept = src L.faction += "mimic" //Stops mimics from instaqdeling people in statues L.status_flags |= GODMODE @@ -80,6 +84,10 @@ REMOVE_TRAIT(petrified_mob, TRAIT_MOBILITY_NOMOVE, STATUE_TRAIT) REMOVE_TRAIT(petrified_mob, TRAIT_MOBILITY_NOPICKUP, STATUE_TRAIT) REMOVE_TRAIT(petrified_mob, TRAIT_MOBILITY_NOUSE, STATUE_TRAIT) + REMOVE_TRAIT(petrified_mob, TRAIT_NOBREATH, STATUE_TRAIT) + REMOVE_TRAIT(petrified_mob, TRAIT_NOHUNGER, STATUE_TRAIT) + REMOVE_TRAIT(petrified_mob, TRAIT_NOTHIRST, STATUE_TRAIT) + REMOVE_TRAIT(petrified_mob, TRAIT_NOFIRE, STATUE_TRAIT) petrified_mob.faction -= "mimic" petrified_mob.click_intercept = null petrified_mob.dir = dir @@ -90,8 +98,10 @@ petrified_mob.pixel_x = pixel_x petrified_mob.pixel_y = pixel_y petrified_mob.layer = layer - petrified_mob.is_shifted = was_shifted + petrified_mob.is_shifted = TRUE //just prevents bad things tbh petrified_mob.is_tilted = was_tilted + if (pulledby && pulledby.pulling == src) //gotta checked just in case + pulledby.start_pulling(petrified_mob, supress_message = TRUE) var/datum/quirk/gargoyle/T = locate() in petrified_mob.roundstart_quirks if (T) T.transformed = 0 From f2a49bc3193bee87a01a810a29c805dc7c73f7e8 Mon Sep 17 00:00:00 2001 From: SandPoot Date: Sun, 8 Jan 2023 21:36:57 -0300 Subject: [PATCH 014/129] first commit with everything --- code/game/objects/items/melee/energy.dm | 33 ++++++------ code/game/objects/objs.dm | 19 ++++--- code/modules/clothing/gloves/miscellaneous.dm | 16 +++--- code/modules/clothing/shoes/miscellaneous.dm | 6 ++- code/modules/clothing/suits/armor.dm | 7 +-- code/modules/clothing/under/accessories.dm | 15 +++--- .../mining/equipment/kinetic_crusher.dm | 6 ++- code/modules/paperwork/pen.dm | 20 ++++---- code/modules/projectiles/guns/ballistic.dm | 2 +- .../projectiles/guns/ballistic/pistol.dm | 23 +++++---- .../projectiles/guns/ballistic/revolver.dm | 51 ++++++++++--------- .../projectiles/guns/ballistic/shotgun.dm | 18 ++++--- .../reagents/reagent_containers/hypovial.dm | 36 ++++++------- .../modules/custom_loadout/custom_items.dm | 5 +- 14 files changed, 144 insertions(+), 113 deletions(-) diff --git a/code/game/objects/items/melee/energy.dm b/code/game/objects/items/melee/energy.dm index 4930f39b31..80fd9a8350 100644 --- a/code/game/objects/items/melee/energy.dm +++ b/code/game/objects/items/melee/energy.dm @@ -193,7 +193,10 @@ /obj/item/melee/transforming/energy/sword/saber possible_colors = list("red" = LIGHT_COLOR_RED, "blue" = LIGHT_COLOR_LIGHT_CYAN, "green" = LIGHT_COLOR_GREEN, "purple" = LIGHT_COLOR_LAVENDER) - unique_reskin = list("Sword" = "sword0", "Saber" = "esaber0") + unique_reskin = list( + "Sword" = list("icon_state" = "sword0"), + "Saber" = list("icon_state" = "esaber0") + ) var/hacked = FALSE var/saber = FALSE @@ -201,26 +204,22 @@ . = ..() if(.) if(active) - if(sword_color) - if(saber) - icon_state = "esaber[sword_color]" - else - icon_state = "sword[sword_color]" - else - if(saber) - icon_state = "esaber0" - else - icon_state = "sword0" + switch(current_skin) + if("Sword") + icon_state = "sword[sword_color ? sword_color : "0"]" + if("Saber") + icon_state = "esaber[sword_color ? sword_color : "0"]" /obj/item/melee/transforming/energy/sword/saber/reskin_obj(mob/M) . = ..() - if(icon_state == "esaber0") - saber = TRUE + if(!.) + return if(active) - if(saber) - icon_state = "esaber[sword_color]" - else - icon_state = "sword[sword_color]" + switch(current_skin) + if("Sword") + icon_state = "sword[sword_color]" + if("Saber") + icon_state = "esaber[sword_color]" /obj/item/melee/transforming/energy/sword/saber/set_sword_color(var/color_forced) if(color_forced) // wow i really do not like this at fucking all holy SHIT diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 4ea25bec96..59fe688b69 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -349,24 +349,31 @@ reskin_obj(user) return TRUE +/// Reskins an object according to M's choice, modified to be overridable and supports different icons /obj/proc/reskin_obj(mob/M) if(!LAZYLEN(unique_reskin)) - return + return FALSE var/list/items = list() for(var/reskin_option in unique_reskin) - var/image/item_image = image(icon = src.icon, icon_state = unique_reskin[reskin_option]) + var/image/item_image = image( + icon = unique_reskin[reskin_option]["icon"] ? unique_reskin[reskin_option]["icon"] : icon, + icon_state = unique_reskin[reskin_option]["icon_state"]) items += list("[reskin_option]" = item_image) sortList(items) var/pick = show_radial_menu(M, src, items, custom_check = CALLBACK(src, .proc/check_reskin_menu, M), radius = 38, require_near = TRUE) if(!pick) - return - if(!unique_reskin[pick]) - return + return FALSE + if(!unique_reskin[pick]["icon_state"]) + return FALSE current_skin = pick - icon_state = unique_reskin[pick] + var/has_icon = unique_reskin[pick]["icon"] + if(has_icon) + icon = has_icon + icon_state = unique_reskin[pick]["icon_state"] to_chat(M, "[src] is now skinned as '[pick].'") + return TRUE /** * Checks if we are allowed to interact with a radial menu for reskins diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index d3ad2ca4c7..66cc5484e4 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -79,16 +79,20 @@ to_chat(user, "With [src] off of your arms, you feel less ready to punch things.") /obj/item/clothing/gloves/fingerless/pugilist/crafted - unique_reskin = list("Short" = "armwraps", - "Extended" = "armwraps_extended" - ) + unique_reskin = list( + "Short" = list("icon_state" = "armwraps"), + "Extended" = list("icon_state" = "armwraps_extended") + ) /obj/item/clothing/gloves/fingerless/pugilist/crafted/reskin_obj(mob/M) . = ..() - if(icon_state == "armwraps_extended") - item_state = "armwraps_extended" - else + if(!.) return + switch(current_skin) + if("Short") + item_state = "armwraps" + if("Extended") + item_state = "armwraps_extended" /obj/item/clothing/gloves/fingerless/pugilist/chaplain name = "armwraps of unyielding resolve" diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index cdf5512fc6..7c1fc6fe3d 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -275,8 +275,10 @@ pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes actions_types = list(/datum/action/item_action/bhop) permeability_coefficient = 0.05 - unique_reskin = list("Explorer" = "miningjet", - "Jackboot" = "jetboots") + unique_reskin = list( + "Explorer" = list("icon_state" = "miningjet"), + "Jackboot" = list("icon_state" = "jetboots") + ) var/jumpdistance = 5 //-1 from to see the actual distance, e.g 4 goes over 3 tiles var/jumpspeed = 3 var/recharging_rate = 60 //default 6 seconds between each dash diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index c13a8bfa66..36795d53b8 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -80,9 +80,10 @@ item_state = "hostrench" flags_inv = 0 strip_delay = 80 - unique_reskin = list("Coat" = "hostrench", - "Cloak" = "trenchcloak" - ) + unique_reskin = list( + "Coat" = list("icon_state" = "hostrench"), + "Cloak" = list("icon_state" = "trenchcloak") + ) /obj/item/clothing/suit/armor/hos/platecarrier name = "plate carrier" diff --git a/code/modules/clothing/under/accessories.dm b/code/modules/clothing/under/accessories.dm index 6d477a0590..1e7236696e 100644 --- a/code/modules/clothing/under/accessories.dm +++ b/code/modules/clothing/under/accessories.dm @@ -565,10 +565,11 @@ icon_state = "pride" above_suit = TRUE obj_flags = UNIQUE_RENAME - unique_reskin = list("Rainbow Pride" = "pride", - "Bisexual Pride" = "pride_bi", - "Pansexual Pride" = "pride_pan", - "Asexual Pride" = "pride_ace", - "Non-binary Pride" = "pride_enby", - "Transgender Pride" = "pride_trans", - ) + unique_reskin = list( + "Rainbow Pride" = list("icon_state" = "pride"), + "Bisexual Pride" = list("icon_state" = "pride_bi"), + "Pansexual Pride" = list("icon_state" = "pride_pan"), + "Asexual Pride" = list("icon_state" = "pride_ace"), + "Non-binary Pride" = list("icon_state" = "pride_enby"), + "Transgender Pride" = list("icon_state" = "pride_trans") + ) diff --git a/code/modules/mining/equipment/kinetic_crusher.dm b/code/modules/mining/equipment/kinetic_crusher.dm index 3c2a4541b2..68ca1c979d 100644 --- a/code/modules/mining/equipment/kinetic_crusher.dm +++ b/code/modules/mining/equipment/kinetic_crusher.dm @@ -253,8 +253,10 @@ sharpness = SHARP_NONE // use your survival dagger or smth icon_state = "crusher-hands" item_state = "crusher0-fist" - unique_reskin = list("Gauntlets" = "crusher-hands", - "Fingerless" = "crusher-hands-bare") + unique_reskin = list( + "Gauntlets" = list("icon_state" = "crusher-hands"), + "Fingerless" = list("icon_state" = "crusher-hands-bare") + ) detonation_damage = 45 // 60 on wield, compared to normal crusher's 70 backstab_bonus = 70 // 130 on backstab though var/combo_on_anything = FALSE // @admins if you're varediting this you don't get to whine at me diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index cb9570e02f..234c67fd37 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -105,12 +105,13 @@ custom_materials = list(/datum/material/gold = 750) sharpness = SHARP_EDGED resistance_flags = FIRE_PROOF - unique_reskin = list("Oak" = "pen-fountain-o", - "Gold" = "pen-fountain-g", - "Rosewood" = "pen-fountain-r", - "Black and Silver" = "pen-fountain-b", - "Command Blue" = "pen-fountain-cb" - ) + unique_reskin = list( + "Oak" = list("icon_state" = "pen-fountain-o"), + "Gold" = list("icon_state" = "pen-fountain-g"), + "Rosewood" = list("icon_state" = "pen-fountain-r"), + "Black and Silver" = list("icon_state" = "pen-fountain-b"), + "Command Blue" = list("icon_state" = "pen-fountain-cb") + ) embedding = list("embed_chance" = 75) /obj/item/pen/fountain/captain/Initialize(mapload) @@ -118,9 +119,10 @@ AddComponent(/datum/component/butchering, 200, 115) //the pen is mightier than the sword /obj/item/pen/fountain/captain/reskin_obj(mob/M) - ..() - if(current_skin) - desc = "It's an expensive [current_skin] fountain pen. The nib is quite sharp." + . = ..() + if(!.) + return + desc = "It's an expensive [current_skin] fountain pen. The nib is quite sharp." /obj/item/pen/attack_self(mob/living/carbon/user) var/deg = input(user, "What angle would you like to rotate the pen head to? (1-360)", "Rotate Pen Head") as null|num diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm index 3f2f4d3e65..5c6aff5564 100644 --- a/code/modules/projectiles/guns/ballistic.dm +++ b/code/modules/projectiles/guns/ballistic.dm @@ -23,7 +23,7 @@ /obj/item/gun/ballistic/update_icon_state() if(current_skin) - icon_state = "[unique_reskin[current_skin]][suppressed ? "-suppressed" : ""][sawn_off ? "-sawn" : ""]" + icon_state = "[unique_reskin[current_skin]["icon_state"]][suppressed ? "-suppressed" : ""][sawn_off ? "-sawn" : ""]" else icon_state = "[initial(icon_state)][suppressed ? "-suppressed" : ""][sawn_off ? "-sawn" : ""]" diff --git a/code/modules/projectiles/guns/ballistic/pistol.dm b/code/modules/projectiles/guns/ballistic/pistol.dm index bd6f203882..53ba6d6a92 100644 --- a/code/modules/projectiles/guns/ballistic/pistol.dm +++ b/code/modules/projectiles/guns/ballistic/pistol.dm @@ -30,27 +30,28 @@ can_unsuppress = TRUE automatic_burst_overlay = FALSE obj_flags = UNIQUE_RENAME - unique_reskin = list("Default" = "cde", - "N-99" = "n99", - "Stealth" = "stealthpistol", - "HKVP-78" = "vp78", - "Luger" = "p08b", - "Mk.58" = "secguncomp", - "PX4 Storm" = "px4" - ) + unique_reskin = list( + "Default" = list("icon_state" = "cde"), + "N-99" = list("icon_state" = "n99"), + "Stealth" = list("icon_state" = "stealthpistol"), + "HKVP-78" = list("icon_state" = "vp78"), + "Luger" = list("icon_state" = "p08b"), + "Mk.58" = list("icon_state" = "secguncomp"), + "PX4 Storm" = list("icon_state" = "px4") + ) /obj/item/gun/ballistic/automatic/pistol/modular/update_icon_state() if(current_skin) - icon_state = "[unique_reskin[current_skin]][chambered ? "" : "-e"][suppressed ? "-suppressed" : ""]" + icon_state = "[unique_reskin[current_skin]["icon_state"]][chambered ? "" : "-e"][suppressed ? "-suppressed" : ""]" else icon_state = "[initial(icon_state)][chambered ? "" : "-e"][suppressed ? "-suppressed" : ""]" /obj/item/gun/ballistic/automatic/pistol/modular/update_overlays() . = ..() if(magazine && suppressed) - . += "[unique_reskin[current_skin]]-magazine-sup" //Yes, this means the default iconstate can't have a magazine overlay + . += "[unique_reskin[current_skin]["icon_state"]]-magazine-sup" //Yes, this means the default iconstate can't have a magazine overlay else if (magazine) - . += "[unique_reskin[current_skin]]-magazine" + . += "[unique_reskin[current_skin]["icon_state"]]-magazine" /obj/item/gun/ballistic/automatic/pistol/m1911 name = "\improper M1911" diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm index f3b07aa7a4..28f81e13ae 100644 --- a/code/modules/projectiles/guns/ballistic/revolver.dm +++ b/code/modules/projectiles/guns/ballistic/revolver.dm @@ -88,13 +88,15 @@ /obj/item/gun/ballistic/revolver/syndicate obj_flags = UNIQUE_RENAME - unique_reskin = list("Default" = "revolver", - "Silver" = "russianrevolver", - "Robust" = "revolvercit", - "Bulky" = "revolverhakita", - "Polished" = "revolvertoriate", - "Soulless" = "revolveroldflip", - "Soul" = "revolverold") + unique_reskin = list( + "Default" = list("icon_state" = "revolver"), + "Silver" = list("icon_state" = "russianrevolver"), + "Robust" = list("icon_state" = "revolvercit"), + "Bulky" = list("icon_state" = "revolverhakita"), + "Polished" = list("icon_state" = "revolvertoriate"), + "Soulless" = list("icon_state" = "revolveroldflip"), + "Soul" = list("icon_state" = "revolverold") + ) /obj/item/gun/ballistic/revolver/detective name = "\improper .38 Mars Special" @@ -102,12 +104,13 @@ icon_state = "detective" mag_type = /obj/item/ammo_box/magazine/internal/cylinder/rev38 obj_flags = UNIQUE_RENAME - unique_reskin = list("Default" = "detective", - "Leopard Spots" = "detective_leopard", - "Black Panther" = "detective_panther", - "Gold Trim" = "detective_gold", - "The Peacemaker" = "detective_peacemaker" - ) + unique_reskin = list( + "Default" = list("icon_state" = "detective"), + "Leopard Spots" = list("icon_state" = "detective_leopard"), + "Black Panther" = list("icon_state" = "detective_panther"), + "Gold Trim" = list("icon_state" = "detective_gold"), + "The Peacemaker" = list("icon_state" = "detective_peacemaker") + ) var/list/safe_calibers /obj/item/gun/ballistic/revolver/detective/Initialize(mapload) @@ -294,13 +297,14 @@ mag_type = /obj/item/ammo_box/magazine/internal/shot/dual sawn_desc = "Omar's coming!" obj_flags = UNIQUE_RENAME - unique_reskin = list("Default" = "dshotgun", - "Dark Red Finish" = "dshotgun-d", - "Ash" = "dshotgun-f", - "Faded Grey" = "dshotgun-g", - "Maple" = "dshotgun-l", - "Rosewood" = "dshotgun-p" - ) + unique_reskin = list( + "Default" = list("icon_state" = "dshotgun"), + "Dark Red Finish" = list("icon_state" = "dshotgun-d"), + "Ash" = list("icon_state" = "dshotgun-f"), + "Faded Grey" = list("icon_state" = "dshotgun-g"), + "Maple" = list("icon_state" = "dshotgun-l"), + "Rosewood" = list("icon_state" = "dshotgun-p") + ) /obj/item/gun/ballistic/revolver/doublebarrel/attackby(obj/item/A, mob/user, params) ..() @@ -342,9 +346,10 @@ slot_flags = null mag_type = /obj/item/ammo_box/magazine/internal/shot/improvised sawn_desc = "I'm just here for the gasoline." - unique_reskin = list("Default" = "ishotgun", - "Cobbled" = "old_ishotgun" - ) + unique_reskin = list( + "Default" = list("icon_state" = "ishotgun"), + "Cobbled" = list("icon_state" = "old_ishotgun") + ) var/slung = FALSE /obj/item/gun/ballistic/revolver/doublebarrel/improvised/attackby(obj/item/A, mob/user, params) diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm index b52620e7e0..0b92e63ca6 100644 --- a/code/modules/projectiles/guns/ballistic/shotgun.dm +++ b/code/modules/projectiles/guns/ballistic/shotgun.dm @@ -98,9 +98,10 @@ fire_delay = 7 mag_type = /obj/item/ammo_box/magazine/internal/shot/riot sawn_desc = "Come with me if you want to live." - unique_reskin = list("Tactical" = "riotshotgun", - "Wood Stock" = "wood_riotshotgun" - ) + unique_reskin = list( + "Tactical" = list("icon_state" = "riotshotgun"), + "Wood Stock" = list("icon_state" = "wood_riotshotgun") + ) /obj/item/gun/ballistic/shotgun/riot/attackby(obj/item/A, mob/user, params) ..() @@ -238,9 +239,10 @@ fire_delay = 5 mag_type = /obj/item/ammo_box/magazine/internal/shot/com w_class = WEIGHT_CLASS_HUGE - unique_reskin = list("Tactical" = "cshotgun", - "Slick" = "cshotgun_slick" - ) + unique_reskin = list( + "Tactical" = list("icon_state" = "cshotgun"), + "Slick" = list("icon_state" = "cshotgun_slick") + ) /obj/item/gun/ballistic/shotgun/automatic/combat/compact name = "warden's combat shotgun" @@ -279,7 +281,7 @@ update_icon() /obj/item/gun/ballistic/shotgun/automatic/combat/compact/update_icon_state() - icon_state = "[current_skin ? unique_reskin[current_skin] : "cshotgun"][stock ? "" : "c"]" + icon_state = "[current_skin ? unique_reskin[current_skin]["icon_state"] : "cshotgun"][stock ? "" : "c"]" /obj/item/gun/ballistic/shotgun/automatic/combat/compact/afterattack(atom/target, mob/living/user, flag, params) if(!stock) @@ -381,7 +383,7 @@ /obj/item/gun/ballistic/shotgun/leveraction/update_icon_state() if(current_skin) - icon_state = "[unique_reskin[current_skin]][sawn_off ? "-sawn" : ""][chambered ? "" : "-e"]" + icon_state = "[unique_reskin[current_skin]["icon_state"]][sawn_off ? "-sawn" : ""][chambered ? "" : "-e"]" else icon_state = "[initial(icon_state)][sawn_off ? "-sawn" : ""][chambered ? "" : "-e"]" diff --git a/code/modules/reagents/reagent_containers/hypovial.dm b/code/modules/reagents/reagent_containers/hypovial.dm index 43f9f88976..0f9ffd6514 100644 --- a/code/modules/reagents/reagent_containers/hypovial.dm +++ b/code/modules/reagents/reagent_containers/hypovial.dm @@ -9,15 +9,16 @@ possible_transfer_amounts = list(1,2,5,10) container_flags = APTFT_VERB obj_flags = UNIQUE_RENAME - unique_reskin = list("hypovial" = "hypovial", - "red hypovial" = "hypovial-b", - "blue hypovial" = "hypovial-d", - "green hypovial" = "hypovial-a", - "orange hypovial" = "hypovial-k", - "purple hypovial" = "hypovial-p", - "black hypovial" = "hypovial-t", - "pink hypovial" = "hypovial-pink" - ) + unique_reskin = list( + "hypovial" = list("icon_state" = "hypovial"), + "red hypovial" = list("icon_state" = "hypovial-b"), + "blue hypovial" = list("icon_state" = "hypovial-d"), + "green hypovial" = list("icon_state" = "hypovial-a"), + "orange hypovial" = list("icon_state" = "hypovial-k"), + "purple hypovial" = list("icon_state" = "hypovial-p"), + "black hypovial" = list("icon_state" = "hypovial-t"), + "pink hypovial" = list("icon_state" = "hypovial-pink") + ) always_reskinnable = TRUE cached_icon = "hypovial" @@ -50,14 +51,15 @@ icon_state = "hypoviallarge" volume = 120 possible_transfer_amounts = list(1,2,5,10,20) - unique_reskin = list("large hypovial" = "hypoviallarge", - "large red hypovial" = "hypoviallarge-b", - "large blue hypovial" = "hypoviallarge-d", - "large green hypovial" = "hypoviallarge-a", - "large orange hypovial" = "hypoviallarge-k", - "large purple hypovial" = "hypoviallarge-p", - "large black hypovial" = "hypoviallarge-t" - ) + unique_reskin = list( + "large hypovial" = list("icon_state" = "hypoviallarge"), + "large red hypovial" = list("icon_state" = "hypoviallarge-b"), + "large blue hypovial" = list("icon_state" = "hypoviallarge-d"), + "large green hypovial" = list("icon_state" = "hypoviallarge-a"), + "large orange hypovial" = list("icon_state" = "hypoviallarge-k"), + "large purple hypovial" = list("icon_state" = "hypoviallarge-p"), + "large black hypovial" = list("icon_state" = "hypoviallarge-t") + ) cached_icon = "hypoviallarge" /obj/item/reagent_containers/glass/bottle/vial/large/bluespace diff --git a/modular_citadel/code/modules/custom_loadout/custom_items.dm b/modular_citadel/code/modules/custom_loadout/custom_items.dm index 500db4453f..ec97d0659f 100644 --- a/modular_citadel/code/modules/custom_loadout/custom_items.dm +++ b/modular_citadel/code/modules/custom_loadout/custom_items.dm @@ -550,7 +550,10 @@ item_state = "fritz" attack_verb = list("barked", "boofed", "shotgun'd") obj_flags = UNIQUE_RENAME - unique_reskin = list("Goodboye" = "fritz", "Badboye" = "fritz_bad") + unique_reskin = list( + "Goodboye" = list("icon_state" = "fritz"), + "Badboye" = list("icon_state" = "fritz_bad") + ) mutantrace_variation = NONE /obj/item/clothing/neck/cloak/polychromic/polyce From c94aa43432198d3c4b12a9f6be67d4df8fb66cf2 Mon Sep 17 00:00:00 2001 From: SandPoot Date: Sun, 8 Jan 2023 22:02:30 -0300 Subject: [PATCH 015/129] quick fix and little extra usage! --- code/game/objects/items/melee/energy.dm | 23 ++++++++++------------ code/modules/clothing/under/accessories.dm | 6 ++++++ 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/code/game/objects/items/melee/energy.dm b/code/game/objects/items/melee/energy.dm index 80fd9a8350..fc419375d9 100644 --- a/code/game/objects/items/melee/energy.dm +++ b/code/game/objects/items/melee/energy.dm @@ -198,28 +198,25 @@ "Saber" = list("icon_state" = "esaber0") ) var/hacked = FALSE - var/saber = FALSE /obj/item/melee/transforming/energy/sword/saber/transform_weapon(mob/living/user, supress_message_text) . = ..() if(.) - if(active) - switch(current_skin) - if("Sword") - icon_state = "sword[sword_color ? sword_color : "0"]" - if("Saber") - icon_state = "esaber[sword_color ? sword_color : "0"]" + switch(current_skin) + if("Sword") + icon_state = "sword[active ? sword_color : "0"]" + if("Saber") + icon_state = "esaber[active ? sword_color : "0"]" /obj/item/melee/transforming/energy/sword/saber/reskin_obj(mob/M) . = ..() if(!.) return - if(active) - switch(current_skin) - if("Sword") - icon_state = "sword[sword_color]" - if("Saber") - icon_state = "esaber[sword_color]" + switch(current_skin) + if("Sword") + icon_state = "sword[active ? sword_color : "0"]" + if("Saber") + icon_state = "esaber[active ? sword_color : "0"]" /obj/item/melee/transforming/energy/sword/saber/set_sword_color(var/color_forced) if(color_forced) // wow i really do not like this at fucking all holy SHIT diff --git a/code/modules/clothing/under/accessories.dm b/code/modules/clothing/under/accessories.dm index 1e7236696e..adacf45218 100644 --- a/code/modules/clothing/under/accessories.dm +++ b/code/modules/clothing/under/accessories.dm @@ -573,3 +573,9 @@ "Non-binary Pride" = list("icon_state" = "pride_enby"), "Transgender Pride" = list("icon_state" = "pride_trans") ) + +/obj/item/clothing/accessory/pride/reskin_obj(mob/M) + . = ..() + if(!.) + return + name = "[current_skin] pin" From 14fa2dda4d73ffc86cb9d113309f8eee56242181 Mon Sep 17 00:00:00 2001 From: Seris02 <49109742+Seris02@users.noreply.github.com> Date: Mon, 9 Jan 2023 11:26:43 +0800 Subject: [PATCH 016/129] *huh* dunno how I changed that so that's why I felt like energy regen was weird... Co-authored-by: BongaTheProto <93835010+BongaTheProto@users.noreply.github.com> --- modular_splurt/code/datums/traits/neutral.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modular_splurt/code/datums/traits/neutral.dm b/modular_splurt/code/datums/traits/neutral.dm index 154b434414..66cc082122 100644 --- a/modular_splurt/code/datums/traits/neutral.dm +++ b/modular_splurt/code/datums/traits/neutral.dm @@ -576,7 +576,7 @@ energy -= 0.05 if(transformed) - energy = min(energy + 0.03, 100) + energy = min(energy + 0.3, 100) if (H.getBruteLoss() > 0 || H.getFireLoss() > 0) H.adjustBruteLoss(-0.5, forced = TRUE) H.adjustFireLoss(-0.5, forced = TRUE) From 43246f4cb3f3d91ec63c3811b8601df50c8d4ac8 Mon Sep 17 00:00:00 2001 From: Seris02 Date: Mon, 9 Jan 2023 12:37:34 +0800 Subject: [PATCH 017/129] examining + resting fix --- .../code/game/objects/structures/statues.dm | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/modular_splurt/code/game/objects/structures/statues.dm b/modular_splurt/code/game/objects/structures/statues.dm index 16325fcdd2..4fb2cc3812 100644 --- a/modular_splurt/code/game/objects/structures/statues.dm +++ b/modular_splurt/code/game/objects/structures/statues.dm @@ -24,8 +24,9 @@ var/mob/living/petrified_mob var/old_max_health var/old_size - var/was_shifted var/was_tilted + var/was_lying + var/was_lying_prev var/deconstructed = FALSE /obj/structure/statue/gargoyle/Initialize(mapload, mob/living/L) @@ -40,8 +41,9 @@ pixel_x = L.pixel_x pixel_y = L.pixel_y layer = L.layer - was_shifted = L.is_shifted was_tilted = L.is_tilted + was_lying = L.lying + was_lying_prev = L.lying_prev L.forceMove(src) ADD_TRAIT(L, TRAIT_MUTE, STATUE_TRAIT) ADD_TRAIT(L, TRAIT_MOBILITY_NOMOVE, STATUE_TRAIT) @@ -64,6 +66,9 @@ if (istype(ab)) if (istype(ab.linked_action, /datum/action/gargoyle)) return FALSE + var/list/modifiers = params2list(params) + if (modifiers["shift"] && !modifiers["ctrl"] && !modifiers["middle"]) + return FALSE return TRUE /obj/structure/statue/gargoyle/examine_more(mob/user) //something about the funny signals doesn't work here no matter how much I fucked around with it (ie registering to COMSIG_PARENT_EXAMINE_MORE doesn't do anything), so we have to overwrite the proc @@ -95,6 +100,9 @@ var/damage = deconstructed ? petrified_mob.health : petrified_mob.health*(old_max_health/petrified_mob.maxHealth) - obj_integrity + 100 petrified_mob.take_overall_damage(damage) //any new damage the statue incurred is transfered to the mob petrified_mob.transform = transform + petrified_mob.lying = was_lying + petrified_mob.lying_prev = was_lying_prev + petrified_mob.update_mobility() petrified_mob.pixel_x = pixel_x petrified_mob.pixel_y = pixel_y petrified_mob.layer = layer From 0cebd5ae15e01f433d2308f9541910ed8ad1542d Mon Sep 17 00:00:00 2001 From: Seris02 Date: Mon, 9 Jan 2023 13:03:37 +0800 Subject: [PATCH 018/129] moved icon to modular_splurt --- icons/obj/statue.dmi | Bin 25772 -> 25765 bytes .../code/game/objects/structures/statues.dm | 1 + .../icons/obj/structures/statue.dmi | Bin 847 -> 874 bytes 3 files changed, 1 insertion(+) diff --git a/icons/obj/statue.dmi b/icons/obj/statue.dmi index d1636a3c14ce53ae64ca9080c71071769068f2ed..48368dda28d876366614fef260e73a0daf5f2f72 100644 GIT binary patch delta 6630 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 kUm7a0=H;$Zo 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 diff --git a/modular_splurt/code/game/objects/structures/statues.dm b/modular_splurt/code/game/objects/structures/statues.dm index 4fb2cc3812..21551ea3b0 100644 --- a/modular_splurt/code/game/objects/structures/statues.dm +++ b/modular_splurt/code/game/objects/structures/statues.dm @@ -16,6 +16,7 @@ /obj/structure/statue/gargoyle name = "statue" desc = "An incredibly intricate statue, which... almost seems alive!" + icon = 'modular_splurt/icons/obj/structures/statue.dmi' icon_state = "gargoyle" //empty sprite because it's supposed to copy over the overlays anyway, and otherwise, you end up with a white human male underlay beneath the statue. density = TRUE anchored = TRUE diff --git a/modular_splurt/icons/obj/structures/statue.dmi b/modular_splurt/icons/obj/structures/statue.dmi index d933259adc538058fbaea45325ed85e5a3eab555..358c6c21edf9b72a45d1f420538454eae6d91205 100644 GIT binary patch delta 663 zcmV;I0%-lu2I>Zo7Y;xO0{{R3owtGP0001KktJ#vz`(#hCx_Gk0004WQchC%)zNpS;5uM1?)%w>B2Bib5%k}0006iNklC%eMbQ`?Z~OW(W%!;H|f2%%Kfk3m0Q`bz|dLz-}5foK;= zv#o$5am9>&I^_v!coPx6bymQ!VK&AvpYjri90l)4pqIc;{Gq^F8%h+az&R&H z3cbS+G!A(NHm!j`y~(nF>Ny7FK%?Fz2Kd{g0OKX+?~(#%%+_9M{F8zp7oQZ%YTjTT{nk-fETe*ffX-w+X|?7Qs5XVxwa>Qq~Izsj0ai~ zd?~o{HjL8|RKd{qaw8eqra2ynW&#}HO99_D1cN~OFu-}}y$6x_wr%JzFJL&fZc=b} zvLxu?h%1mDzTQ9Xc$NW2I4@!VAHF{x`a@ZNSUw1kEJq%{NEpYz;}|g05H!muA_fxe zqJ?Q4f*6KC9Ts$P`wSo=+KcZQxfr^!3+1<91a>LC1toaxy6*J}!5i#v&j`eJTG)yN z>^d#1h1ZB`5DSXU$ADQg0C3qD2ugA+NBZgW0%AGJ*CeUq-D7X7I#8Fk`y=?++p3OY zwS96&DGRZv1`WeNR&e!m0ox4#<Rbf*_e3y zb?^U@*MqFLDx~($K@h8kZkuM9G|i72{e0P8 z5#iYu1spqOV+`}DEJ4~<$fD~@A>Q|AHVz#Oe>DL_ztE{H;oN&R0llUG43V_O@)nx2 z7o$z8CW=HM3@Mt}44#DzSMiynf=&c_2>b*O1=iYFqfiCTIjK_U8OEqSlo{Cc1_JdY z>-aoM49I~_(KQC(ZB~H!Qo_5ez!|fTH|l>@5ar?v1T0yBa3PK)6tPKxm5aS@H-RK% zf1VXMzPRgd6A;g>HKR4bKW3BPF--Opp~^CE0kO4Z)X!EAMTbx1b8fVUQci z*mvFWK(r8G3ttNOwj&q?(#H|taqu2Q;`_d%!?J(@?A@&3?qp3c0Ei=y0a))JcU;Se zEu2>#0K@mkLw_g>>kHwL<;dd~iPQ9Zf0`oR)Pip9B0P{37cER%3z7|y0v3ey`9gz; z6tCWAp?z4COt(Cj!j48Q;;G$BsYbBN1TcZ*f`LCwhy2C7o$m!Atvtj(D2?#s30& W{2J=mQ6JF&0000 Date: Mon, 9 Jan 2023 08:05:48 -0300 Subject: [PATCH 019/129] previous could break --- code/game/objects/items/melee/energy.dm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/melee/energy.dm b/code/game/objects/items/melee/energy.dm index fc419375d9..ca2fdbaeff 100644 --- a/code/game/objects/items/melee/energy.dm +++ b/code/game/objects/items/melee/energy.dm @@ -203,10 +203,11 @@ . = ..() if(.) switch(current_skin) - if("Sword") - icon_state = "sword[active ? sword_color : "0"]" if("Saber") icon_state = "esaber[active ? sword_color : "0"]" + // No skin + else + icon_state = "sword[active ? sword_color : "0"]" /obj/item/melee/transforming/energy/sword/saber/reskin_obj(mob/M) . = ..() From c922dd620745a35e1e1d56a3bd9e297f5dc4f581 Mon Sep 17 00:00:00 2001 From: BongaTheProto <93835010+BongaTheProto@users.noreply.github.com> Date: Mon, 9 Jan 2023 16:16:58 -0500 Subject: [PATCH 020/129] modularize --- code/game/objects/items/devices/PDA/cart.dm | 2 +- modular_splurt/code/game/objects/items/devices/PDA/radio.dm | 4 ++++ tgstation.dme | 1 + 3 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 modular_splurt/code/game/objects/items/devices/PDA/radio.dm diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm index 3f35ed5f12..34f8202898 100644 --- a/code/game/objects/items/devices/PDA/cart.dm +++ b/code/game/objects/items/devices/PDA/cart.dm @@ -171,7 +171,7 @@ /obj/item/cartridge/cmo name = "\improper Med-U DELUXE cartridge" icon_state = "cart-cmo" - access = CART_MANIFEST | CART_STATUS_DISPLAY | CART_REAGENT_SCANNER | CART_MEDICAL | CART_CHEMISTRY + access = CART_MANIFEST | CART_STATUS_DISPLAY | CART_REAGENT_SCANNER | CART_MEDICAL bot_access_flags = MED_BOT /obj/item/cartridge/rd diff --git a/modular_splurt/code/game/objects/items/devices/PDA/radio.dm b/modular_splurt/code/game/objects/items/devices/PDA/radio.dm new file mode 100644 index 0000000000..016d1f10ef --- /dev/null +++ b/modular_splurt/code/game/objects/items/devices/PDA/radio.dm @@ -0,0 +1,4 @@ +/obj/item/cartridge/cmo/Initialize(mapload) + //adds chemistry access + access |= CART_CHEMISTRY + . = ..() diff --git a/tgstation.dme b/tgstation.dme index df80e41845..ee471c8897 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -4381,6 +4381,7 @@ #include "modular_splurt\code\game\objects\items\circuitboards\computer_circuitboards.dm" #include "modular_splurt\code\game\objects\items\circuitboards\machine_circuitboards.dm" #include "modular_splurt\code\game\objects\items\circuitboards\miner_circuitboards.dm" +#include "modular_splurt\code\game\objects\items\devices\PDA\radio.dm" #include "modular_splurt\code\game\objects\items\devices\radio\electropack.dm" #include "modular_splurt\code\game\objects\items\devices\radio\headset.dm" #include "modular_splurt\code\game\objects\items\implants\implant_aphropumps.dm" From f979781b8f6a538c24536fc3af10dc9acfd1e1f7 Mon Sep 17 00:00:00 2001 From: Darius <5933805+LeDrascol@users.noreply.github.com> Date: Mon, 9 Jan 2023 20:51:09 -0500 Subject: [PATCH 021/129] Adds the Rapid Disrobe Implant Adds a new implant for nudist quirk users that launches away clothing item that would cause a negative mood reaction. Quirk holders automatically gain this implant. Other crew members can buy it from a hacked kinkmate vending machine. --- modular_splurt/code/datums/traits/neutral.dm | 8 ++ .../objects/items/implants/implant_disrobe.dm | 100 ++++++++++++++++++ .../code/game/objects/items/storage/boxes.dm | 16 +++ .../code/modules/vending/kinkmate.dm | 3 +- .../icons/mob/actions/misc_actions.dmi | Bin 377 -> 568 bytes tgstation.dme | 1 + 6 files changed, 127 insertions(+), 1 deletion(-) create mode 100644 modular_splurt/code/game/objects/items/implants/implant_disrobe.dm diff --git a/modular_splurt/code/datums/traits/neutral.dm b/modular_splurt/code/datums/traits/neutral.dm index 4bc47c056d..dc01a36a13 100644 --- a/modular_splurt/code/datums/traits/neutral.dm +++ b/modular_splurt/code/datums/traits/neutral.dm @@ -643,6 +643,14 @@ else SEND_SIGNAL(quirk_holder, COMSIG_ADD_MOOD_EVENT, mood_category, /datum/mood_event/nudist_negative) +/datum/quirk/nudist/on_spawn() + . = ..() + // Spawn a Rapid Disrobe Implant + var/obj/item/implant/disrobe/quirk_implant = new + + // Implant into quirk holder + quirk_implant.implant(quirk_holder, null, TRUE, TRUE) + /datum/quirk/masked_mook name = "Bane Syndrome" desc = "For some reason you don't feel... right without wearing some kind of gas mask." diff --git a/modular_splurt/code/game/objects/items/implants/implant_disrobe.dm b/modular_splurt/code/game/objects/items/implants/implant_disrobe.dm new file mode 100644 index 0000000000..b329a856d0 --- /dev/null +++ b/modular_splurt/code/game/objects/items/implants/implant_disrobe.dm @@ -0,0 +1,100 @@ +/obj/item/implant/disrobe + name = "rapid disrobe implant" + icon = 'icons/obj/clothing/uniforms.dmi' + icon_state = "grey" + + // Custom action for extra customization + actions_types = list(/datum/action/item_action/disrobe) + +// Implant flavor text +/obj/item/implant/disrobe_ultra/get_data() + // Define text variable + var/dat = {" + Implant Specifications:
+ Name: Rapid Disrobe Implant
+ Important Notes: Nanotransen requires employees to follow workplace safety standards, including protective clothing.
+