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 01/52] 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 02/52] 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 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 03/52] 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 04/52] 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 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 05/52] 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 06/52] 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.
+
+ 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 17:59:13 -0500 Subject: [PATCH 07/52] 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 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 08/52] 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 09/52] 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 10/52] 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 11/52] 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 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 12/52] 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 13/52] 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 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 14/52] 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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 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 15/52] 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 16/52] 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 17/52] 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 18/52] 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 19/52] 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 20/52] 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 21/52] 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 22/52] 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 23/52] 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 24/52] 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 25/52] 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 26/52] 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 27/52] 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 28/52] 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 29/52] 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 30/52] 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 31/52] 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