diff --git a/code/_globalvars/misc.dm b/code/_globalvars/misc.dm
index 49c22bce0127..e1cb708717cc 100644
--- a/code/_globalvars/misc.dm
+++ b/code/_globalvars/misc.dm
@@ -29,7 +29,6 @@ GLOBAL_VAR(deity)
GLOBAL_VAR(bible_name)
GLOBAL_VAR(bible_icon_state)
GLOBAL_VAR(bible_item_state)
-GLOBAL_VAR(holy_weapon_type)
-GLOBAL_VAR(holy_armor_type)
+
GLOBAL_VAR_INIT(internal_tick_usage, 0.2 * world.tick_lag)
diff --git a/code/datums/components/riding.dm b/code/datums/components/riding.dm
index a074fe6f5f44..49b8f7f7f091 100644
--- a/code/datums/components/riding.dm
+++ b/code/datums/components/riding.dm
@@ -392,3 +392,12 @@
if(rider in AM.buckled_mobs)
AM.unbuckle_mob(rider)
. = ..()
+
+/obj/item/riding_offhand/on_thrown(mob/living/carbon/user, atom/target)
+ if(rider == user)
+ return //Piggyback user.
+ user.unbuckle_mob(rider)
+ if(HAS_TRAIT(user, TRAIT_PACIFISM))
+ to_chat(user, span_notice("You gently let go of [rider]."))
+ return
+ return rider
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index e70fb5a50992..53eb0ba62d40 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -1287,3 +1287,13 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
/// Special stuff you want to do when an outfit equips this item.
/obj/item/proc/on_outfit_equip(mob/living/carbon/human/outfit_wearer, visuals_only, item_slot)
return
+
+///Called by the carbon throw_item() proc. Returns null if the item negates the throw, or a reference to the thing to suffer the throw else.
+/obj/item/proc/on_thrown(mob/living/carbon/user, atom/target)
+ if((item_flags & ABSTRACT) || HAS_TRAIT(src, TRAIT_NODROP))
+ return
+ user.dropItemToGround(src)
+ if(throwforce && HAS_TRAIT(user, TRAIT_PACIFISM))
+ to_chat(user, span_notice("You set [src] down gently on the ground."))
+ return
+ return src
diff --git a/code/game/objects/items/holy_weapons.dm b/code/game/objects/items/holy_weapons.dm
index d21ddbd80e1b..bec664119600 100644
--- a/code/game/objects/items/holy_weapons.dm
+++ b/code/game/objects/items/holy_weapons.dm
@@ -73,14 +73,9 @@
return holy_item_list
/obj/item/choice_beacon/holy/spawn_option(obj/choice,mob/living/M)
- if(!GLOB.holy_armor_type)
- ..()
- playsound(src, 'sound/effects/pray_chaplain.ogg', 40, 1)
- SSblackbox.record_feedback("tally", "chaplain_armor", 1, "[choice]")
- GLOB.holy_armor_type = choice
- else
- to_chat(M, "A selection has already been made. Self-Destructing...")
- return
+ ..()
+ playsound(src, 'sound/effects/pray_chaplain.ogg', 40, 1)
+ SSblackbox.record_feedback("tally", "chaplain_armor", 1, "[choice]")
/obj/item/storage/box/holy
name = "Templar Kit"
@@ -248,8 +243,6 @@
* * M The mob choosing a nullrod reskin
*/
/obj/item/nullrod/proc/reskin_holy_weapon(mob/living/L)
- if(GLOB.holy_weapon_type)
- return
var/obj/item/holy_weapon
var/list/holy_weapons_list = subtypesof(/obj/item/nullrod) + list(HOLY_WEAPONS)
var/list/display_names = list()
@@ -269,8 +262,6 @@
var/A = display_names[choice] // This needs to be on a separate var as list member access is not allowed for new
holy_weapon = new A
- GLOB.holy_weapon_type = holy_weapon.type
-
SSblackbox.record_feedback("tally", "chaplain_weapon", 1, "[choice]")
if(holy_weapon)
diff --git a/code/game/objects/items/miscellaneous.dm b/code/game/objects/items/miscellaneous.dm
index 590bd37d8c40..be507fce0f57 100644
--- a/code/game/objects/items/miscellaneous.dm
+++ b/code/game/objects/items/miscellaneous.dm
@@ -272,3 +272,4 @@
icon_state = "skub"
w_class = WEIGHT_CLASS_BULKY
attack_verb = list("skubbed")
+
diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm
index fcd0da386408..a40d319002cc 100644
--- a/code/game/objects/items/toys.dm
+++ b/code/game/objects/items/toys.dm
@@ -788,29 +788,15 @@
. = ..()
populate_deck()
+///Generates all the cards within the deck.
/obj/item/toy/cards/deck/proc/populate_deck()
icon_state = "deck_[deckstyle]_full"
- for(var/i in 2 to 10)
- cards += "[i] of Hearts"
- cards += "[i] of Spades"
- cards += "[i] of Clubs"
- cards += "[i] of Diamonds"
- cards += "King of Hearts"
- cards += "King of Spades"
- cards += "King of Clubs"
- cards += "King of Diamonds"
- cards += "Queen of Hearts"
- cards += "Queen of Spades"
- cards += "Queen of Clubs"
- cards += "Queen of Diamonds"
- cards += "Jack of Hearts"
- cards += "Jack of Spades"
- cards += "Jack of Clubs"
- cards += "Jack of Diamonds"
- cards += "Ace of Hearts"
- cards += "Ace of Spades"
- cards += "Ace of Clubs"
- cards += "Ace of Diamonds"
+ for(var/suit in list("Hearts", "Spades", "Clubs", "Diamonds"))
+ cards += "Ace of [suit]"
+ for(var/i in 2 to 10)
+ cards += "[i] of [suit]"
+ for(var/person in list("Jack", "Queen", "King"))
+ cards += "[person] of [suit]"
//ATTACK HAND NOT CALLING PARENT
/obj/item/toy/cards/deck/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags)
@@ -1001,7 +987,7 @@
/obj/item/toy/cards/singlecard
name = "card"
- desc = "a card"
+ desc = "A card."
icon = 'icons/obj/toy.dmi'
icon_state = "singlecard_down_nanotrasen"
w_class = WEIGHT_CLASS_TINY
diff --git a/code/game/objects/structures/spirit_board.dm b/code/game/objects/structures/spirit_board.dm
index 1b3093e4e796..fe6da66792bf 100644
--- a/code/game/objects/structures/spirit_board.dm
+++ b/code/game/objects/structures/spirit_board.dm
@@ -31,7 +31,7 @@
virgin = 0
notify_ghosts("Someone has begun playing with a [src.name] in [get_area(src)]!", source = src)
- planchette = input("Choose the letter.", "Seance!") as null|anything in list("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z")
+ planchette = input("Choose the letter.", "Seance!") as null|anything in list("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z", "YES", "NO" ,"GOOD BYE")
if(!planchette || !Adjacent(M) || next_use > world.time)
return
M.log_message("picked a letter on [src], which was \"[planchette]\".")
@@ -56,8 +56,8 @@
light_amount = T.get_lumcount()
- if(light_amount > 0.2)
- to_chat(M, "It's too bright here to use [src.name]!")
+ if(light_amount > 0.3) // Splurt edit, from 0.2 to 0.3
+ to_chat(M, "It's too bright here to use the [src.name]!")
return 0
//mobs in range check
@@ -69,7 +69,7 @@
else
users_in_range++
- if(users_in_range < 2)
+ if(users_in_range < 1) // SPLURT EDIT: 1 is the minimum number of people in range
to_chat(M, "There aren't enough people to use the [src.name]!")
return 0
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 60aa3bc3b80f..41f9a4706924 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -688,7 +688,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "
Body
"
dat += "Gender:[gender == MALE ? "Male" : (gender == FEMALE ? "Female" : (gender == PLURAL ? "Non-binary" : "Object"))]
"
- if(gender != NEUTER && pref_species.sexes)
+ if(pref_species.sexes)
dat += "Body Model:[features["body_model"] == MALE ? "Masculine" : "Feminine"]
"
dat += "Limb Modification:
"
dat += "Modify Limbs
"
@@ -1286,6 +1286,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
loadout_color_non_poly = loadout_item[LOADOUT_COLOR][1]
extra_loadout_data += "
Color"
extra_loadout_data += "[loadout_color_non_poly]"
+ extra_loadout_data += "
HSV Color" // SPLURT EDIT
if(gear.loadout_flags & LOADOUT_CAN_NAME)
extra_loadout_data += "
Name [loadout_item[LOADOUT_CUSTOM_NAME] ? loadout_item[LOADOUT_CUSTOM_NAME] : "N/A"]"
if(gear.loadout_flags & LOADOUT_CAN_DESCRIPTION)
@@ -4100,7 +4101,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
sanitize_current_slot.Remove(list(entry))
break
- if(href_list["loadout_color"] || href_list["loadout_color_polychromic"] || href_list["loadout_rename"] || href_list["loadout_redescribe"])
+ if(href_list["loadout_color"] || href_list["loadout_color_polychromic"] || href_list["loadout_color_HSV"] || href_list["loadout_rename"] || href_list["loadout_redescribe"])
//if the gear doesn't exist, or they don't have it, ignore the request
var/name = html_decode(href_list["loadout_gear_name"])
var/datum/gear/G = GLOB.loadout_items[gear_category][gear_subcategory][name]
@@ -4121,6 +4122,17 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/new_color = input(user, "Polychromic options", "Choose Color", current_color) as color|null
user_gear[LOADOUT_COLOR][1] = sanitize_hexcolor(new_color, 6, TRUE, current_color)
+ // HSV Coloring (SPLURT EDIT)
+ if(href_list["loadout_color_HSV"] && !(G.loadout_flags & LOADOUT_CAN_COLOR_POLYCHROMIC))
+ var/hue = input(user, "Enter Hue (0-360)", "HSV options") as num|null
+ var/saturation = input(user, "Enter Saturation (-10 to 10)", "HSV options") as num|null
+ var/value = input(user, "Enter Value (-10 to 10)", "HSV options") as num|null
+ if(hue && saturation && value)
+ saturation = clamp(saturation, -10, 10)
+ value = clamp(value, -10, 10)
+ var/color_to_use = color_matrix_hsv(hue, saturation, value)
+ user_gear[LOADOUT_COLOR][1] = color_to_use
+
//poly coloring can only be done by poly items
if(href_list["loadout_color_polychromic"] && (G.loadout_flags & LOADOUT_CAN_COLOR_POLYCHROMIC))
var/list/color_options = list()
diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm
index 2071dd69302a..559d2f0c9f93 100644
--- a/code/modules/clothing/under/miscellaneous.dm
+++ b/code/modules/clothing/under/miscellaneous.dm
@@ -225,7 +225,7 @@
name = "pink stripper outfit"
icon_state = "stripper_p"
item_state = "stripper_p"
- body_parts_covered = CHEST|GROIN
+ body_parts_covered = CHEST
can_adjust = FALSE
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON
diff --git a/code/modules/jobs/job_types/chaplain.dm b/code/modules/jobs/job_types/chaplain.dm
index e7d602bd2293..413e40c4d980 100644
--- a/code/modules/jobs/job_types/chaplain.dm
+++ b/code/modules/jobs/job_types/chaplain.dm
@@ -40,9 +40,6 @@
B.item_state = GLOB.bible_item_state
to_chat(H, "There is already an established religion onboard the station. You are an acolyte of [GLOB.deity]. Defer to the Chaplain.")
H.equip_to_slot_or_del(B, ITEM_SLOT_BACKPACK)
- var/nrt = GLOB.holy_weapon_type || /obj/item/nullrod
- var/obj/item/nullrod/N = new nrt(H)
- H.put_in_hands(N)
return
var/new_religion = DEFAULT_RELIGION
@@ -125,6 +122,10 @@
belt = /obj/item/pda/chaplain
ears = /obj/item/radio/headset/headset_srv
uniform = /obj/item/clothing/under/rank/civilian/chaplain
- backpack_contents = list(/obj/item/camera/spooky = 1)
+ backpack_contents = list(
+ /obj/item/nullrod = 1,
+ /obj/item/choice_beacon/holy = 1,
+ /obj/item/camera/spooky = 1
+ )
backpack = /obj/item/storage/backpack/cultpack
satchel = /obj/item/storage/backpack/cultpack
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 2f4033c3168a..998544688e60 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -200,6 +200,15 @@
if(start_T && end_T)
log_combat(src, throwable_mob, "thrown", addition="grab from tile in [AREACOORD(start_T)] towards tile at [AREACOORD(end_T)]")
+ else
+ thrown_thing = I.on_thrown(src, target)
+
+ if(isliving(thrown_thing))
+ var/turf/start_T = get_turf(loc)
+ var/turf/end_T = get_turf(target)
+ if(start_T && end_T)
+ log_combat(src, thrown_thing, "thrown", addition="grab from tile in [AREACOORD(start_T)] towards tile at [AREACOORD(end_T)]")
+
else if(!(I.item_flags & ABSTRACT) && !HAS_TRAIT(I, TRAIT_NODROP))
thrown_thing = I
dropItemToGround(I)
diff --git a/code/modules/reagents/chemistry/reagents/drink_reagents.dm b/code/modules/reagents/chemistry/reagents/drink_reagents.dm
index 348556c33735..347547384504 100644
--- a/code/modules/reagents/chemistry/reagents/drink_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/drink_reagents.dm
@@ -213,6 +213,7 @@
glass_desc = "White and nutritious goodness!"
pH = 6.5
value = REAGENT_VALUE_VERY_COMMON
+ var/decal_path = /obj/effect/decal/cleanable/milk
// Milk is good for humans, but bad for plants. The sugars cannot be used by plants, and the milk fat harms growth. Not shrooms though. I can't deal with this now...
/datum/reagent/consumable/milk/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user)
diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm
index 71339567d249..500445042e19 100644
--- a/code/modules/reagents/chemistry/reagents/food_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm
@@ -159,7 +159,7 @@
color = "#FFFFFF" // rgb: 255, 255, 255
taste_mult = 1.5 // stop sugar drowning out other flavours
nutriment_factor = 3 * REAGENTS_METABOLISM
- metabolization_rate = 2 * REAGENTS_METABOLISM
+ metabolization_rate = 5 * REAGENTS_METABOLISM
overdose_threshold = 200 // Hyperglycaemic shock
taste_description = "sweetness"
value = REAGENT_VALUE_NONE
@@ -173,7 +173,7 @@
/datum/reagent/consumable/sugar/overdose_start(mob/living/M)
to_chat(M, "You go into hyperglycaemic shock! Lay off the twinkies!")
- M.AdjustSleeping(600, FALSE)
+ M.AdjustSleeping(20 SECONDS, FALSE)
. = 1
/datum/reagent/consumable/sugar/overdose_process(mob/living/M)
diff --git a/modular_citadel/code/modules/client/loadout/uniform.dm b/modular_citadel/code/modules/client/loadout/uniform.dm
index 280f6a248510..4ed723a1414a 100644
--- a/modular_citadel/code/modules/client/loadout/uniform.dm
+++ b/modular_citadel/code/modules/client/loadout/uniform.dm
@@ -658,13 +658,11 @@
name = "Green Feminine Christmas Suit"
category = ITEM_SLOT_ICLOTHING
path = /obj/item/clothing/under/costume/christmas/croptop/green
-
+*/
/datum/gear/uniform/pinkstripper
name = "Pink stripper outfit"
- category = ITEM_SLOT_ICLOTHING
path = /obj/item/clothing/under/misc/stripper
cost = 3
-*/
/datum/gear/uniform/greenstripper
name = "Green stripper outfit"
diff --git a/modular_sand/code/game/objects/effects/decals/cleanable/lewd_decals.dm b/modular_sand/code/game/objects/effects/decals/cleanable/lewd_decals.dm
index e52c7a8bd7ea..d975353e4d53 100644
--- a/modular_sand/code/game/objects/effects/decals/cleanable/lewd_decals.dm
+++ b/modular_sand/code/game/objects/effects/decals/cleanable/lewd_decals.dm
@@ -29,3 +29,4 @@
/obj/effect/decal/cleanable/semendrip/update_icon()
. = ..()
add_atom_colour(mix_color_from_reagents(reagents.reagent_list), FIXED_COLOUR_PRIORITY)
+
diff --git a/modular_splurt/code/datums/interactions/lewd/_lewd.dm b/modular_splurt/code/datums/interactions/lewd/_lewd.dm
index 3e4948ff856e..b19805d668e5 100644
--- a/modular_splurt/code/datums/interactions/lewd/_lewd.dm
+++ b/modular_splurt/code/datums/interactions/lewd/_lewd.dm
@@ -669,7 +669,7 @@
else
lines = list(
"'s tip gently smooches \the [target]'s, right before forcing its way right down [t_His] dickhole.",
- "grinds [u_His] tip against \the [target]'s [t_genital_name], only to slide [u_His] whole [ui_ai_alerts] all the way down to [t_His] base.",
+ "grinds [u_His] tip against \the [target]'s [t_genital_name], only to slide [u_His] whole [u_genital_name] all the way down to [t_His] base.",
"makes \the [target]'s fat [t_genital_name] stretch and throb as the size of [u_His] [u_genital_name] makes its way right in."
)
set_is_fucking(target, CUM_TARGET_URETHRA, getorganslot(ORGAN_SLOT_PENIS))
@@ -758,9 +758,9 @@
if(target.is_fucking(src, CUM_TARGET_THIGHS))
lines = list(
- "grinds and presses [u_His] thighs [pick("deeply ", "")] against \the [target]'s [genital_name], massaging it all over with [u_His] thighs.",
- "squeezes \the [target]'s [genital_name] between [u_His] supple thighs, smothering it deep under [u_His] crotch.",
- "rides \the [target]'s [genital_name] with [u_His] [pick("pudgy ", "soft ", "")]thighs, [t_He] can feel [u_His] flesh smothering it down."
+ "grinds and presses [u_His] thighs [pick("deeply ", "")] against \the [target]'s [genital_name], massaging it all over with [u_His] thighs",
+ "squeezes \the [target]'s [genital_name] between [u_His] supple thighs, smothering it deep under [u_His] crotch",
+ "rides \the [target]'s [genital_name] with [u_His] [pick("pudgy ", "soft ", "")]thighs, [t_He] can feel [u_His] flesh smothering it down"
)
else
lines = list(
diff --git a/modular_splurt/code/datums/interactions/lewd/lewd_datums.dm b/modular_splurt/code/datums/interactions/lewd/lewd_datums.dm
index cb9c0b4ea410..951be296c288 100644
--- a/modular_splurt/code/datums/interactions/lewd/lewd_datums.dm
+++ b/modular_splurt/code/datums/interactions/lewd/lewd_datums.dm
@@ -102,7 +102,7 @@
var/stat_before = target.stat
target.adjustOxyLoss(3)
if(target.stat == UNCONSCIOUS && stat_before != UNCONSCIOUS)
- target.visible_message(message = "\The [target] passes out on \The [src]'s cock.", ignored_mobs = user.get_unconsenting())
+ target.visible_message(message = "\The [target] passes out on \The [user]'s cock.", ignored_mobs = user.get_unconsenting())
if(!isclownjob(user))
return
diff --git a/modular_splurt/code/game/objects/effects/decals/cleanable/lewd_decals.dm b/modular_splurt/code/game/objects/effects/decals/cleanable/lewd_decals.dm
new file mode 100644
index 000000000000..c3441889c411
--- /dev/null
+++ b/modular_splurt/code/game/objects/effects/decals/cleanable/lewd_decals.dm
@@ -0,0 +1,29 @@
+/datum/reagent/consumable/milk/reaction_turf(turf/T, reac_volume)
+ if(!istype(T))
+ return
+ if(reac_volume < 3)
+ return
+
+ var/obj/effect/decal/cleanable/milk/S = locate() in T
+ if(!S)
+ S = new(T)
+
+/obj/effect/decal/cleanable/milk
+ name = "milk"
+ desc = null
+ gender = PLURAL
+ density = 0
+ layer = ABOVE_NORMAL_TURF_LAYER
+ icon = 'icons/obj/genitals/effects.dmi'
+ icon_state = "milk1"
+ random_icon_states = list("milk1", "milk2", "milk3", "milk4")
+
+/obj/effect/decal/cleanable/milk/New()
+ . = ..()
+ dir = pick(1,2,4,8)
+ add_blood_DNA(list("Non-human DNA" = "A+"))
+
+/obj/effect/decal/cleanable/milk/replace_decal(obj/effect/decal/cleanable/milk/S)
+ if(S.blood_DNA)
+ blood_DNA |= S.blood_DNA
+ return ..()
diff --git a/modular_splurt/code/game/objects/items/lewd_items/chastity_hypno/chastity_hypno_magazine.dm b/modular_splurt/code/game/objects/items/lewd_items/chastity_hypno/chastity_hypno_magazine.dm
index 23573db54244..fdc6e990f86f 100644
--- a/modular_splurt/code/game/objects/items/lewd_items/chastity_hypno/chastity_hypno_magazine.dm
+++ b/modular_splurt/code/game/objects/items/lewd_items/chastity_hypno/chastity_hypno_magazine.dm
@@ -1,6 +1,7 @@
/obj/item/chastity_hypno/magazine
name = "Hypnotic Chastity Magazine"
+ desc = "A fascinating magazine filled with mesmerizing patterns and articles on the art of hypnotic chastity..."
icon = 'icons/obj/bureaucracy.dmi'
icon_state = "pamphlet"
color = COLOR_STRONG_MAGENTA
diff --git a/modular_splurt/code/game/objects/items/lewd_items/chastity_hypno/chastity_hypno_watch.dm b/modular_splurt/code/game/objects/items/lewd_items/chastity_hypno/chastity_hypno_watch.dm
index a280691f4047..e1bd3cf57758 100644
--- a/modular_splurt/code/game/objects/items/lewd_items/chastity_hypno/chastity_hypno_watch.dm
+++ b/modular_splurt/code/game/objects/items/lewd_items/chastity_hypno/chastity_hypno_watch.dm
@@ -69,7 +69,7 @@
if(icon_state == "pocketwatch")
icon_state = "pocketwatch_closed"
item_state = "pocketwatch_closed"
- desc = "An elaborate pocketwatch, with a captivating silver etching. It's closed however and you can't see it's face"
+ desc = "An elaborate pocketwatch, with a captivating silver etching. It's closed, however, and you can't see it's face..."
closed = TRUE
return
diff --git a/modular_splurt/code/game/objects/items/miscellaneous.dm b/modular_splurt/code/game/objects/items/miscellaneous.dm
index 5571c7bfc45f..92647b01f99b 100644
--- a/modular_splurt/code/game/objects/items/miscellaneous.dm
+++ b/modular_splurt/code/game/objects/items/miscellaneous.dm
@@ -266,3 +266,17 @@
replace.uses = uses - 1
M.put_in_hands(replace)
. = ..()
+
+/obj/item/choice_beacon/ouija
+ name = "spirit board delivery beacon"
+ desc = "Ghost communication on demand! It is unclear how this thing is still operational."
+
+/obj/item/choice_beacon/ouija/generate_display_names()
+ var/static/list/ouija_spaghetti_list
+ if(!ouija_spaghetti_list)
+ ouija_spaghetti_list = list()
+ var/list/templist = list(/obj/structure/spirit_board)
+ for(var/V in templist)
+ var/atom/A = V
+ ouija_spaghetti_list[initial(A.name)] = A
+ return ouija_spaghetti_list
diff --git a/modular_splurt/code/modules/arousal/arousal.dm b/modular_splurt/code/modules/arousal/arousal.dm
index 714e7a3d8434..593bb9c2e09b 100644
--- a/modular_splurt/code/modules/arousal/arousal.dm
+++ b/modular_splurt/code/modules/arousal/arousal.dm
@@ -84,7 +84,7 @@
var/datum/reagents/fluid_source = G.climaxable(src)
if(!fluid_source)
return
- var/main_fluid = lowertext(fluid_source.get_master_reagent_name())
+ var/main_fluid = lowertext(G.get_fluid_name())
if(mb_time)
visible_message(span_love("You hear a strong suction sound coming from the [M.name] on [src]'s [G.name]."), \
span_userlove("The [M.name] pumps faster, trying to get you over the edge."), \
diff --git a/modular_splurt/code/modules/client/loadout/backpack.dm b/modular_splurt/code/modules/client/loadout/backpack.dm
index 05ea0cc25fb4..24776dd4f09d 100644
--- a/modular_splurt/code/modules/client/loadout/backpack.dm
+++ b/modular_splurt/code/modules/client/loadout/backpack.dm
@@ -7,7 +7,6 @@
/datum/gear/backpack/condom_box
name = "Box of Condoms"
path = /obj/item/storage/box/bulk_condoms
- cost = 2
/datum/gear/backpack/sounding
name = "Sounding rod"
@@ -112,14 +111,56 @@
/datum/gear/backpack/metal_chastity_box
name = "Metal Chastity Box"
path = /obj/item/storage/box/chastity_cage/metal
- cost = 2
/datum/gear/backpack/belt_chastity_box
name = "Chastity Belt Box"
path = /obj/item/storage/box/chastity_cage/belt
- cost = 3
/datum/gear/backpack/estim_chastity_box
name = "E-Stim Chastity Box"
path = /obj/item/storage/box/chastity_cage/estim
+
+/datum/gear/backpack/chastity_hypno/magazine
+ name = "Hypnotic Chastity Magazine"
+ path = /obj/item/chastity_hypno/magazine
+
+/datum/gear/backpack/chastity_hypno/watch
+ name = "Hypnotic Chastity Watch"
+ path = /obj/item/chastity_hypno/watch
+
+/datum/gear/backpack/electropack/vibrator
+ name = "Remote Vibrator"
+ path = /obj/item/electropack/vibrator
+
+/datum/gear/backpack/electropack/vibrator/small
+ name = "Small Remote Vibrator"
+ path = /obj/item/electropack/vibrator/small
+
+/datum/gear/backpack/strapon_strap
+ name = "Strapon Strap"
+ path = /obj/item/strapon_strap
+
+//MODIFIED COSTS - MODULAR SPLURT
+/datum/gear/backpack/tennis/tri
+ cost = 1
+
+/datum/gear/backpack/tennis/tri/squeak
+ cost = 1
+
+/datum/gear/backpack/bone/squeak
+ cost = 1
+
+/datum/gear/backpack/toykatana
+ cost = 1
+
+/datum/gear/backpack/modular_tablet
+ cost = 3
+
+/datum/gear/backpack/modular_laptop
+ cost = 3
+
+/datum/gear/backpack/ringbox_gold
+ cost = 2
+
+/datum/gear/backpack/ringbox_diamond
cost = 4
diff --git a/modular_splurt/code/modules/client/loadout/gloves.dm b/modular_splurt/code/modules/client/loadout/gloves.dm
index 7533c7054c12..c6971d42398e 100644
--- a/modular_splurt/code/modules/client/loadout/gloves.dm
+++ b/modular_splurt/code/modules/client/loadout/gloves.dm
@@ -2,7 +2,6 @@
/datum/gear/gloves/latexsleeves
name = "Latex sleeves"
path = /obj/item/clothing/gloves/latexsleeves
- cost = 1
/datum/gear/gloves/latex
name = "Latex Gloves"
diff --git a/modular_splurt/code/modules/client/loadout/hands.dm b/modular_splurt/code/modules/client/loadout/hands.dm
index e5dcf4ae6415..bd9f3d501eb8 100644
--- a/modular_splurt/code/modules/client/loadout/hands.dm
+++ b/modular_splurt/code/modules/client/loadout/hands.dm
@@ -2,10 +2,23 @@
name = "pAI device"
description = "A personal AI device for checking and downloading various personalities."
path = /obj/item/paicard
- cost = 3
/datum/gear/hands/tailbag
name = "Tailbag"
description = "A bag for holding small personal items, which fastens around the base of the tail."
path = /obj/item/storage/tailbag
+
+/datum/gear/hands/tarotdeck
+ name = "Tarot Deck"
+ description = "A full 78 card deck of Tarot Cards, no refunds on false predicitons."
+ path = /obj/item/toy/cards/deck/tarot
+
+//MODIFIED COSTS - MODULAR SPLURT
+/datum/gear/hands/straightrazor
+ cost = 6
+
+/datum/gear/hands/flask
cost = 1
+
+/datum/gear/hands/cigar
+ cost = 2
diff --git a/modular_splurt/code/modules/client/loadout/uniform.dm b/modular_splurt/code/modules/client/loadout/uniform.dm
index 21c536040df5..18402eb2c7ce 100644
--- a/modular_splurt/code/modules/client/loadout/uniform.dm
+++ b/modular_splurt/code/modules/client/loadout/uniform.dm
@@ -40,10 +40,22 @@
name = "Performers one piece"
path = /obj/item/clothing/under/performer
+/datum/gear/uniform/lewdmaid
+ name = "Lewd maid uniform"
+ path = /obj/item/clothing/under/lewdmaid
+
/datum/gear/uniform/blutigen_undergarment
name = "Blutigen Undergarments"
path = /obj/item/clothing/under/blutigen_undergarment
+/datum/gear/uniform/blackstripper
+ name = "Black stripper outfit"
+ path = /obj/item/clothing/under/misc/stripper/black
+
+/datum/gear/uniform/whitestripper
+ name = "White stripper outfit"
+ path = /obj/item/clothing/under/misc/stripper/white
+
// Suggestion #151
/datum/gear/uniform/waiter
name = "waiter's outfit"
diff --git a/modular_splurt/code/modules/client/preferences.dm b/modular_splurt/code/modules/client/preferences.dm
index 4d58cfdec9eb..5bdb6b6cd26b 100644
--- a/modular_splurt/code/modules/client/preferences.dm
+++ b/modular_splurt/code/modules/client/preferences.dm
@@ -220,7 +220,7 @@
dat += "Body
"
dat += "Gender:[gender == MALE ? "Male" : (gender == FEMALE ? "Female" : (gender == PLURAL ? "Non-binary" : "Object"))]
"
- if(gender != NEUTER && pref_species.sexes)
+ if(pref_species.sexes)
dat += "Body Model:[features["body_model"] == MALE ? "Masculine" : "Feminine"]
"
dat += "Limb Modification:
"
dat += "Modify Limbs
"
diff --git a/modular_splurt/code/modules/clothing/under/miscellaneous.dm b/modular_splurt/code/modules/clothing/under/miscellaneous.dm
index 82c53a84e05f..1a48a5cc1fe6 100644
--- a/modular_splurt/code/modules/clothing/under/miscellaneous.dm
+++ b/modular_splurt/code/modules/clothing/under/miscellaneous.dm
@@ -50,7 +50,7 @@
icon = 'modular_splurt/icons/obj/clothing/uniforms.dmi'
mob_overlay_icon = 'modular_splurt/icons/mob/clothing/uniform.dmi'
icon_state = "bunnysuit"
- can_adjust = FALSE
+ can_adjust = TRUE
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON
body_parts_covered = CHEST|GROIN
@@ -106,6 +106,16 @@
icon_state = "whitebunnysuit"
body_parts_covered = CHEST|GROIN|ARMS
+/obj/item/clothing/under/lewdmaid
+ name = "lewd maid outfit"
+ desc = "For all your lewd maid needs."
+ icon = 'modular_splurt/icons/mob/clothing/lewd_clothing/uniform/lewd_uniform.dmi'
+ mob_overlay_icon = 'modular_splurt/icons/mob/clothing/lewd_clothing/uniform/lewd_uniform.dmi'
+ icon_state = "lewdmaid"
+ item_state = "lewdmaid_obj"
+ can_adjust = FALSE
+ body_parts_covered = CHEST
+
/obj/item/clothing/under/rank/security/skirt/slut
name = "slutty security jumpskirt"
desc = "A \"\"\"tactical\"\"\" security jumpsuit with the legs replaced by a skirt. No matter how you adjust it, it always feels a little too small."
@@ -353,6 +363,24 @@
mob_overlay_icon = 'modular_splurt/icons/mob/clothing/uniform.dmi'
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON
+/obj/item/clothing/under/misc/stripper/black
+ name = "black stripper outfit"
+ icon = 'modular_splurt/icons/obj/clothing/uniforms.dmi'
+ mob_overlay_icon= 'modular_splurt/icons/mob/clothing/uniform.dmi'
+ icon_state = "syclothing"
+ item_state = "syclothing"
+ can_adjust = FALSE
+ body_parts_covered = CHEST
+
+/obj/item/clothing/under/misc/stripper/white
+ name = "white stripper outfit"
+ icon = 'modular_splurt/icons/mob/clothing/lewd_clothing/uniform/lewd_uniform.dmi'
+ mob_overlay_icon = 'modular_splurt/icons/mob/clothing/lewd_clothing/uniform/lewd_uniform.dmi'
+ icon_state = "stripper_white"
+ item_state = "stripper_white_obj"
+ can_adjust = FALSE
+ body_parts_covered = CHEST
+
// Prison Jumpsuit/Jumpskirt override to allow reskins
/obj/item/clothing/under/rank/prisoner
reskin_binding = COMSIG_CLICK_CTRL
diff --git a/modular_splurt/code/modules/games/tarot.dm b/modular_splurt/code/modules/games/tarot.dm
new file mode 100644
index 000000000000..8c58d021accb
--- /dev/null
+++ b/modular_splurt/code/modules/games/tarot.dm
@@ -0,0 +1,27 @@
+//Some silly tarot cards for predicting when the Clown will die. Ported from TG. https://github.com/tgstation/tgstation/pull/51318/
+/obj/item/toy/cards/deck/tarot
+ name = "Tarot Card Deck"
+ desc = "A full 78 card deck of Tarot Cards, no refunds on false predicitons."
+ icon = 'modular_splurt/icons/obj/toy.dmi'
+ icon_state = "deck_tarot_full"
+ deckstyle = "tarot"
+
+/obj/item/toy/cards/deck/tarot/populate_deck()
+ for(var/suit in list("Cups", "Wands", "Swords", "Coins"))
+ for(var/i in 1 to 10)
+ cards += "[i] of [suit]"
+ for(var/person in list("Page", "Champion", "Queen", "King"))
+ cards += "[person] of [suit]"
+ for(var/trump in list("The Magician", "The High Priestess", "The Empress", "The Emperor", "The Hierophant", "The Lover", "The Chariot", "Justice", "The Hermit", "The Wheel of Fortune", "Strength", "The Hanged Man", "Death", "Temperance", "The Devil", "The Tower", "The Star", "The Moon", "The Sun", "Judgement", "The World", "The Fool"))
+ cards += "[trump]"
+
+/obj/item/toy/cards/deck/tarot/draw_card(mob/user)
+ . = ..()
+ if(prob(50))
+ var/obj/item/toy/cards/singlecard/C = .
+ if(!C)
+ return FALSE
+
+ var/matrix/M = matrix()
+ M.Turn(180)
+ C.transform = M
diff --git a/modular_splurt/code/modules/vending/clothesmate.dm b/modular_splurt/code/modules/vending/clothesmate.dm
index 03df346b9c65..7b1c0eb1ad55 100644
--- a/modular_splurt/code/modules/vending/clothesmate.dm
+++ b/modular_splurt/code/modules/vending/clothesmate.dm
@@ -34,6 +34,7 @@
/obj/item/clothing/under/suit/helltaker/skirt = 3,
/obj/item/clothing/suit/invisijacket = 3,
/obj/item/clothing/head/invisihat = 3,
+ /obj/item/clothing/under/pentatop = 3,
/obj/item/clothing/wrists/armwarmer = 3,
/obj/item/clothing/wrists/armwarmer/long = 3,
/obj/item/clothing/wrists/armwarmer_striped = 3,
diff --git a/modular_splurt/code/modules/vending/games.dm b/modular_splurt/code/modules/vending/games.dm
new file mode 100644
index 000000000000..b42b63be7d9c
--- /dev/null
+++ b/modular_splurt/code/modules/vending/games.dm
@@ -0,0 +1,6 @@
+/obj/machinery/vending/games/Initialize(mapload)
+ var/list/extra_products = list(
+ /obj/item/toy/cards/deck/tarot = 3
+ )
+ LAZYADD(products, extra_products)
+ . = ..()
diff --git a/modular_splurt/code/modules/vending/kinkmate.dm b/modular_splurt/code/modules/vending/kinkmate.dm
index 48a8199858d3..e0c5afde4480 100644
--- a/modular_splurt/code/modules/vending/kinkmate.dm
+++ b/modular_splurt/code/modules/vending/kinkmate.dm
@@ -29,12 +29,17 @@
/obj/item/restraints/bondage_rope = 5,
/obj/item/clothing/under/domina = 5,
/obj/item/clothing/under/performer = 3,
+ /obj/item/clothing/under/bunnysuit = 3,
+ /obj/item/clothing/under/bunnysuit/white = 3,
/obj/item/storage/box/chastity_cage = 6,
/obj/item/storage/box/chastity_cage/metal = 3,
/obj/item/storage/box/chastity_cage/belt = 2,
/obj/item/clothing/shoes/invisiboots = 10, // Added here to go with the Gear Harness
/obj/item/clothing/shoes/highheel_sandals = 3,
- /obj/item/clothing/neck/petcollar/poly = 5
+ /obj/item/clothing/neck/petcollar/poly = 5,
+ /obj/item/clothing/under/misc/stripper/black = 3,
+ /obj/item/clothing/under/misc/stripper/white = 3,
+ /obj/item/clothing/under/lewdmaid = 5,
)
var/list/extra_contraband = list(
//Lewd-Clothes
diff --git a/modular_splurt/code/modules/vending/wardrobes.dm b/modular_splurt/code/modules/vending/wardrobes.dm
index 378abf496793..21ca35fac647 100644
--- a/modular_splurt/code/modules/vending/wardrobes.dm
+++ b/modular_splurt/code/modules/vending/wardrobes.dm
@@ -149,3 +149,10 @@
/obj/item/vending_refill/wardrobe/hos_wardrobe
machine_name = "HOSDrobe"
+
+/obj/machinery/vending/wardrobe/chap_wardrobe/Initialize(mapload)
+ var/list/extra_premium = list(
+ /obj/item/choice_beacon/ouija = 1
+ )
+ LAZYADD(products, extra_premium)
+ . = ..()
diff --git a/modular_splurt/icons/mob/clothing/lewd_clothing/uniform/lewd_uniform.dmi b/modular_splurt/icons/mob/clothing/lewd_clothing/uniform/lewd_uniform.dmi
index 1f4cda1ee504..f4a9e610250a 100644
Binary files a/modular_splurt/icons/mob/clothing/lewd_clothing/uniform/lewd_uniform.dmi and b/modular_splurt/icons/mob/clothing/lewd_clothing/uniform/lewd_uniform.dmi differ
diff --git a/modular_splurt/icons/mob/clothing/uniform.dmi b/modular_splurt/icons/mob/clothing/uniform.dmi
index d8ec6c094b8c..3ef925bb57e2 100644
Binary files a/modular_splurt/icons/mob/clothing/uniform.dmi and b/modular_splurt/icons/mob/clothing/uniform.dmi differ
diff --git a/modular_splurt/icons/obj/clothing/uniforms.dmi b/modular_splurt/icons/obj/clothing/uniforms.dmi
index f107fc91f933..da4d4f386a29 100644
Binary files a/modular_splurt/icons/obj/clothing/uniforms.dmi and b/modular_splurt/icons/obj/clothing/uniforms.dmi differ
diff --git a/modular_splurt/icons/obj/toy.dmi b/modular_splurt/icons/obj/toy.dmi
index b2c7b570f0b6..26c93f600828 100644
Binary files a/modular_splurt/icons/obj/toy.dmi and b/modular_splurt/icons/obj/toy.dmi differ
diff --git a/tgstation.dme b/tgstation.dme
index f82c6466ec8b..c88425a57d11 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -4500,6 +4500,7 @@
#include "modular_splurt\code\game\machinery\porta_turret\portable_turret.dm"
#include "modular_splurt\code\game\mecha\combat\gygax.dm"
#include "modular_splurt\code\game\objects\effects\landmarks.dm"
+#include "modular_splurt\code\game\objects\effects\decals\cleanable\lewd_decals.dm"
#include "modular_splurt\code\game\objects\effects\decals\turfdecal\markings.dm"
#include "modular_splurt\code\game\objects\effects\effect_system\effects_smoke.dm"
#include "modular_splurt\code\game\objects\effects\spawners\lootdrop.dm"
@@ -4792,6 +4793,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\food_and_drinks\recipes\tablecraft\recipes_seafood.dm"
+#include "modular_splurt\code\modules\games\tarot.dm"
#include "modular_splurt\code\modules\ghostcafe\ghostvr.dm"
#include "modular_splurt\code\modules\holiday\holidays.dm"
#include "modular_splurt\code\modules\holodeck\holo_effect.dm"
@@ -5043,6 +5045,7 @@
#include "modular_splurt\code\modules\vending\boozeomat.dm"
#include "modular_splurt\code\modules\vending\clothesmate.dm"
#include "modular_splurt\code\modules\vending\engineering.dm"
+#include "modular_splurt\code\modules\vending\games.dm"
#include "modular_splurt\code\modules\vending\kinkmate.dm"
#include "modular_splurt\code\modules\vending\modularpc.dm"
#include "modular_splurt\code\modules\vending\security.dm"