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"