Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sex spells #1057

Open
wants to merge 12 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
85 changes: 43 additions & 42 deletions code/__DEFINES/misc.dm
Original file line number Diff line number Diff line change
Expand Up @@ -33,48 +33,49 @@ Will print: "/mob/living/carbon/human/death" (you can optionally embed it in a s

//Human Overlays Indexes/////////
//LOTS OF CIT CHANGES HERE. BE CAREFUL WHEN UPSTREAM ADDS MORE LAYERS
#define MUTATIONS_LAYER 41 //mutations. Tk headglows, cold resistance glow, etc
#define ANTAG_LAYER 40 //stuff for things like cultism indicators (clock cult glow, cultist red halos, whatever else new that comes up)
#define GENITALS_BEHIND_LAYER 39 //Some genitalia needs to be behind everything, such as with taurs (Taurs use body_behind_layer
#define BODY_BEHIND_LAYER 38 //certain mutantrace features (tail when looking south) that must appear behind the body parts
#define BODYPARTS_LAYER 37 //Initially "AUGMENTS", this was repurposed to be a catch-all bodyparts flag
#define MARKING_LAYER 36 //Matrixed body markings because clashing with snouts?
#define BODY_ADJ_LAYER 35 //certain mutantrace features (snout, body markings) that must appear above the body parts
#define GENITALS_FRONT_LAYER 34 //Draws some genitalia above clothes and the TAUR body if need be.
#define BODY_LAYER 33 //underwear, undershirts, socks, eyes, lips(makeup)
#define BODY_ADJ_UPPER_LAYER 32
#define FRONT_MUTATIONS_LAYER 31 //mutations that should appear above body, body_adj and bodyparts layer (e.g. laser eyes)
#define UNDERWEAR_LAYER 30
#define SOCKS_LAYER 29
#define SHIRT_LAYER 28
#define UNIFORM_LAYER 27
#define ID_LAYER 26
#define HANDS_PART_LAYER 25
#define DAMAGE_LAYER 24 //damage indicators (cuts and burns)
#define LOWER_MEDICINE_LAYER 23 //Medicine, like gauze and tourniquets
#define MEDICINE_LAYER 22 //Medicine, like gauze and tourniquets
#define SHOES_LAYER 21
#define GLOVES_LAYER 20
#define WRISTS_LAYER 19
#define EAR_RIGHT_LAYER 18
#define EAR_LEFT_LAYER 17
#define SUIT_LAYER 16
#define GENITALS_EXPOSED_LAYER 15
#define GLASSES_LAYER 14
#define BELT_LAYER 13 //Possible make this an overlay of somethign required to wear a belt?
#define SUIT_STORE_LAYER 12
#define NECK_LAYER 11
#define BACK_LAYER 10
#define HAIR_LAYER 9 //TODO: make part of head layer?
#define HORNS_LAYER 8
#define FACEMASK_LAYER 7
#define HEAD_LAYER 6
#define HANDCUFF_LAYER 5
#define LEGCUFF_LAYER 4
#define HANDS_LAYER 3
#define BODY_FRONT_LAYER 2
#define FIRE_LAYER 1 //If you're on fire
#define TOTAL_LAYERS 41 //KEEP THIS UP-TO-DATE OR SHIT WILL BREAK ;_;
#define MUTATIONS_LAYER 42 //mutations. Tk headglows, cold resistance glow, etc
#define ANTAG_LAYER 41 //stuff for things like cultism indicators (clock cult glow, cultist red halos, whatever else new that comes up)
#define GENITALS_BEHIND_LAYER 40 //Some genitalia needs to be behind everything, such as with taurs (Taurs use body_behind_layer
#define BODY_BEHIND_LAYER 39 //certain mutantrace features (tail when looking south) that must appear behind the body parts
#define BODYPARTS_LAYER 38 //Initially "AUGMENTS", this was repurposed to be a catch-all bodyparts flag
#define MARKING_LAYER 37 //Matrixed body markings because clashing with snouts?
#define BODY_ADJ_LAYER 36 //certain mutantrace features (snout, body markings) that must appear above the body parts
#define GENITALS_FRONT_LAYER 35 //Draws some genitalia above clothes and the TAUR body if need be.
#define BODY_LAYER 34 //underwear, undershirts, socks, eyes, lips(makeup)
#define BODY_ADJ_UPPER_LAYER 33
#define FRONT_MUTATIONS_LAYER 32 //mutations that should appear above body, body_adj and bodyparts layer (e.g. laser eyes)
#define UNDERWEAR_LAYER 31
#define SOCKS_LAYER 30
#define SHIRT_LAYER 29
#define UNIFORM_LAYER 28
#define ID_LAYER 27
#define HANDS_PART_LAYER 26
#define DAMAGE_LAYER 25 //damage indicators (cuts and burns)
#define LOWER_MEDICINE_LAYER 24 //Medicine, like gauze and tourniquets
#define MEDICINE_LAYER 23 //Medicine, like gauze and tourniquets
#define SHOES_LAYER 22
#define GLOVES_LAYER 21
#define WRISTS_LAYER 20
#define EAR_RIGHT_LAYER 19
#define EAR_LEFT_LAYER 18
#define SUIT_LAYER 17
#define GENITALS_EXPOSED_LAYER 16
#define GLASSES_LAYER 15
#define BELT_LAYER 14 //Possible make this an overlay of somethign required to wear a belt?
#define SUIT_STORE_LAYER 13
#define NECK_LAYER 12
#define BACK_LAYER 11
#define HAIR_LAYER 10 //TODO: make part of head layer?
#define HORNS_LAYER 9
#define FACEMASK_LAYER 8
#define HEAD_LAYER 7
#define HANDCUFF_LAYER 6
#define LEGCUFF_LAYER 5
#define HANDS_LAYER 4
#define BODY_FRONT_LAYER 3
#define FIRE_LAYER 2 //If you're on fire
#define GROPING_LAYER 1
#define TOTAL_LAYERS 42 //KEEP THIS UP-TO-DATE OR SHIT WILL BREAK ;_;

//Human Overlay Index Shortcuts for alternate_worn_layer, layers
//Because I *KNOW* somebody will think layer+1 means "above"
Expand Down
2 changes: 2 additions & 0 deletions code/__DEFINES/rendering/atom_hud.dm
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
//for antag huds. these are used at the /mob level
#define ANTAG_HUD "24"
#define ANTAGTARGET_HUD "25" // Which players consent via their game settings to be a target for antagonists
#define AROUSAL_HUD "26"

//by default everything in the hud_list of an atom is an image
//a value in hud_list with one of these will change that behavior
Expand Down Expand Up @@ -69,5 +70,6 @@

// Which players consent via their game settings to be a target for antagonists
#define DATA_HUD_ANTAGTARGET 30
#define DATA_HUD_AROUSAL 31

#define ADD_HUD_TO_COOLDOWN 20 //cooldown for being shown the images for any particular data hud
1 change: 1 addition & 0 deletions code/__DEFINES/traits.dm
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,7 @@
#define TRAIT_TAGGER "tagger"
#define TRAIT_PHOTOGRAPHER "photographer"
#define TRAIT_MUSICIAN "musician"
#define TRAIT_SEXSPELLS "sexspells"
#define TRAIT_PERMABONER "permanent_arousal"
#define TRAIT_NEVERBONER "never_aroused"
#define TRAIT_NYMPHO "nymphomaniac"
Expand Down
1 change: 1 addition & 0 deletions code/_globalvars/traits.dm
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_TAGGER" = TRAIT_TAGGER,
"TRAIT_PHOTOGRAPHER" = TRAIT_PHOTOGRAPHER,
"TRAIT_MUSICIAN" = TRAIT_MUSICIAN,
"TRAIT_SEXSPELLS" = TRAIT_SEXSPELLS,
"TRAIT_MASO" = TRAIT_MASO,
"TRAIT_HIGH_BLOOD" = TRAIT_HIGH_BLOOD,
"TRAIT_EMPATH" = TRAIT_EMPATH,
Expand Down
1 change: 1 addition & 0 deletions code/_rendering/atom_huds/atom_hud.dm
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ GLOBAL_LIST_INIT(huds, list(
ANTAG_HUD_GANGSTER = new/datum/atom_hud/antag/hidden(),
ANTAG_HUD_SLAVER = new/datum/atom_hud/antag(),
DATA_HUD_ANTAGTARGET = new/datum/atom_hud/data/human/antagtarget(),
DATA_HUD_AROUSAL = new/datum/atom_hud/data/human/arousal(),

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

extra layer being created and used for literally one effect. Move this to cult/magic layers.

))

/datum/atom_hud
Expand Down
7 changes: 7 additions & 0 deletions code/modules/client/preferences.dm
Original file line number Diff line number Diff line change
Expand Up @@ -1611,6 +1611,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "<b>Receive Cum Covering :</b> <a href='?_src_=prefs;preference=cumontopref'>[(cit_toggles & CUM_ONTO) ? "Allowed" : "Disallowed"]</a><br>"
dat += "<span style='border-radius: 2px;border:1px dotted white;cursor:help;' title='Enables verbs involving farts, shit and piss.'>?</span> "
dat += "<b>Unholy ERP verbs :</b> <a href='?_src_=prefs;preference=unholypref'>[unholypref]</a><br>" //https://www.youtube.com/watch?v=OHKARc-GObU
dat += "<b>Magical ERP :</b> <a href='?_src_=prefs;preference=magicalpref'>[magicalpref]</a><br>" //https://www.youtube.com/watch?v=OHKARc-GObU
dat += "<span style='border-radius: 2px;border:1px dotted white;cursor:help;' title='Enables macro / micro stepping and stomping interactions.'>?</span> "
dat += "<b>Stomping Interactions :</b> <a href='?_src_=prefs;preference=stomppref'>[stomppref ? "Yes" : "No"]</a><br>"
//END OF SPLURT EDIT
Expand Down Expand Up @@ -3625,6 +3626,12 @@ GLOBAL_LIST_EMPTY(preferences_datums)
unholypref = "No"
if("No")
unholypref = "Yes"
if("magicalpref")
switch(magicalpref)
if("Yes")
magicalpref = "No"
if("No")
magicalpref = "Yes"
if("stomppref") // What the fuck is this?
stomppref = !stomppref
//Skyrat edit - *someone* offered me actual money for this shit
Expand Down
2 changes: 1 addition & 1 deletion code/modules/mob/living/carbon/human/human_defines.dm
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/mob/living/carbon/human
hud_possible = list(HEALTH_HUD,STATUS_HUD,ID_HUD,WANTED_HUD,IMPLOYAL_HUD,IMPCHEM_HUD,IMPTRACK_HUD, NANITE_HUD, DIAG_NANITE_FULL_HUD,ANTAG_HUD,GLAND_HUD,SENTIENT_DISEASE_HUD,RAD_HUD)
hud_possible = list(HEALTH_HUD,STATUS_HUD,ID_HUD,WANTED_HUD,IMPLOYAL_HUD,IMPCHEM_HUD,IMPTRACK_HUD, NANITE_HUD, DIAG_NANITE_FULL_HUD,ANTAG_HUD,GLAND_HUD,SENTIENT_DISEASE_HUD,RAD_HUD,AROUSAL_HUD)
hud_type = /datum/hud/human
possible_a_intents = list(INTENT_HELP, INTENT_DISARM, INTENT_GRAB, INTENT_HARM)
pressure_resistance = 25
Expand Down
6 changes: 6 additions & 0 deletions code/modules/mob/living/carbon/human/species.dm
Original file line number Diff line number Diff line change
Expand Up @@ -1297,6 +1297,12 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
return

/datum/species/proc/can_equip(obj/item/I, slot, disable_warning, mob/living/carbon/human/H, bypass_equip_delay_self = FALSE, clothing_check = FALSE, list/return_warning)

if(H.uncovered)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nonmodular lol

if(return_warning)
return_warning[1] = "<span class='warning'>I've been wicked!</span>"

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what the hell

return FALSE

if(slot in no_equip)
if(!I.species_exception || !is_type_in_list(src, I.species_exception))
return FALSE
Expand Down
Binary file modified icons/mob/hud.dmi
Binary file not shown.
8 changes: 5 additions & 3 deletions modular_sand/code/datums/interactions/_interaction.dm
Original file line number Diff line number Diff line change
Expand Up @@ -106,15 +106,17 @@
return TRUE

/// Actually doing the action, has a few checks to see if it's valid, usually overwritten to be make things actually happen and what-not
/datum/interaction/proc/do_action(mob/living/user, mob/living/target)

/datum/interaction/proc/do_action(mob/living/user, mob/living/target, var/ignore_distance=0) //ignore distance for magic
if(!(interaction_flags & INTERACTION_FLAG_USER_IS_TARGET))
if(user == target) //tactical href fix
to_chat(user, span_warning("You cannot target yourself."))
return
if(get_dist(user, target) > max_distance)
if(get_dist(user, target) > max_distance && !ignore_distance)
to_chat(user, span_warning("They are too far away."))
return
if(interaction_flags & INTERACTION_FLAG_ADJACENT && !(user.Adjacent(target) && target.Adjacent(user)))

if(interaction_flags & INTERACTION_FLAG_ADJACENT && !(user.Adjacent(target) && target.Adjacent(user)) && !ignore_distance)
to_chat(user, span_warning("You cannot get to them."))
return
if(!evaluate_user(user, silent = FALSE))
Expand Down
1 change: 1 addition & 0 deletions modular_splurt/code/modules/client/preferences.dm
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
/datum/preferences
max_save_slots = DEFAULT_SAVE_SLOTS
var/unholypref = "No" //Goin 2 hell fo dis one
var/magicalpref = "No" //Goin 2 hell fo dis one
Copy link

@Yawet330 Yawet330 Feb 18, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

var/magicalpref = FALSE

var/stomppref = TRUE // Please step on me.
var/list/gfluid_blacklist = list() //Stuff you don't want people to cum into you
var/new_character_creator = TRUE // old/new character creator
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,6 @@

/mob/living/carbon/human/Initialize()
LAZYADD(hud_possible, ANTAGTARGET_HUD)
LAZYADD(hud_possible, AROUSAL_HUD)
. = ..()
RegisterSignal(src, COMSIG_MOB_CLIMAX, .proc/check_orgasm)
8 changes: 7 additions & 1 deletion modular_splurt/code/modules/mob/living/living.dm
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
if("Toggle Penis")
has_penis = !has_penis
if("Toggle Pussy")
has_vagina = !has_vagina
has_vagina = !has_vagina
if("Toggle Balls")
has_balls = !has_balls

Expand Down Expand Up @@ -89,3 +89,9 @@
set desc = "Switch sharp/fuzzy scaling for current mob."
appearance_flags ^= PIXEL_SCALE
fuzzy = !fuzzy

/mob/living/Initialize(mapload)
. = ..()
for(var/datum/atom_hud/data/human/arousal/arousal_hud in GLOB.huds)
arousal_hud.add_to_hud(src)

18 changes: 18 additions & 0 deletions modular_splurt/code/modules/spell/spell_types/aoe_lust.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
/obj/effect/proc_holder/spell/self/aoe_lust
name = "Area Lust"
desc = "Make the people nearby horny."
charge_max = 600 //variable
cooldown_min = 0
clothes_req = NONE
antimagic_allowed = TRUE
action_icon_state = "aoe_lust"
action_icon = 'modular_splurt/icons/effects/sex_spells.dmi'
var/activated = 0
clothes_req = NONE

/obj/effect/proc_holder/spell/self/aoe_lust/cast(mob/living/carbon/human/user)
for(var/mob/living/carbon/human/HH in view(5, user))
if(HH?.client?.prefs?.magicalpref == "No")

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if(!HH?.client?.prefs?.magicalpref)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(have magicalpref be TRUE OR FALSE and FALSE BY DEFAULT

this makes it sure that all statements using the above code will return TRUE if MAGICALPREF is FALSE.

Neater way of doing what you're doing.

Also just better coder practice as you're no longer doing an is equals but rather is true or false

continue
HH.add_lust(50)

55 changes: 55 additions & 0 deletions modular_splurt/code/modules/spell/spell_types/eyes_of_lust.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
/datum/atom_hud/data/human/arousal
hud_icons = list(AROUSAL_HUD)

/mob/living/carbon/human/proc/add_arousal_hud()
var/datum/atom_hud/data/human/arousal/hud = GLOB.huds[DATA_HUD_AROUSAL]
hud.add_hud_to(src)
arousal_hud_update()
for(var/mob/living/carbon/human/H in view(7, src))

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

time to crash the server

dont do this

hud.add_to_hud(H)

/mob/living/carbon/human/proc/remove_arousal_hud()
var/datum/atom_hud/data/human/arousal/hud = GLOB.huds[DATA_HUD_AROUSAL]
hud.remove_hud_from(src)

/mob/living/carbon/human/Life()
. = ..()
arousal_hud_update()

/mob/living/carbon/human/proc/arousal_hud_update()
var/image/holder = hud_list[AROUSAL_HUD]
var/icon/I = icon(icon, icon_state, dir)
holder.pixel_y = I.Height() - world.icon_size
var/arousal = getPercentAroused()
switch(arousal)
if(0 to 25)
holder.icon_state = "hudarousal1"
if(25 to 50)
holder.icon_state = "hudarousal2"
if(50 to 75)
holder.icon_state = "hudarousal3"
if(75 to INFINITY)
holder.icon_state = "hudarousal4"

/obj/effect/proc_holder/spell/self/eyes_of_lust
name = "Eyes of Lust"
desc = "Watch the lust."
charge_max = 1200 //variable
cooldown_min = 0
clothes_req = NONE
antimagic_allowed = TRUE
action_icon_state = "eyes_of_lust"
action_icon = 'modular_splurt/icons/effects/sex_spells.dmi'
var/activated = 0
clothes_req = NONE

/obj/effect/proc_holder/spell/self/eyes_of_lust/cast(mob/living/carbon/human/user)

if(!activated)
user.add_arousal_hud()
activated = 1
else
user.remove_arousal_hud()
activated = 0


94 changes: 94 additions & 0 deletions modular_splurt/code/modules/spell/spell_types/groping.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@


/obj/effect/proc_holder/spell/grope
name = "Grope"
desc = "Spawns magical hands of groping."
charge_max = 1200 //variable
cooldown_min = 0
level_max = 1
clothes_req = NONE
antimagic_allowed = TRUE
action_icon_state = "grope"
action_icon = 'modular_splurt/icons/effects/sex_spells.dmi'
var/mob/living/carbon/human/victim
clothes_req = NONE

/obj/effect/proc_holder/spell/grope/choose_targets(mob/user = usr)
perform(user=user)

/obj/effect/proc_holder/spell/grope/perform(list/targets, recharge = 1, mob/user = usr)
var/list/possible = list()
for(var/mob/living/carbon/human/H in view(7, user))
if(H?.client?.prefs?.magicalpref == "No")
continue
possible.Add(H)
victim = input(user, "Choose the one to be groped", "Command") in possible
if(QDELETED(src) || QDELETED(user))
return
if(!victim)
revert_cast(user)
return
..()

/obj/effect/proc_holder/spell/grope/cast(list/targets, mob/user = usr)
victim.be_groped(user)

/mob/living/carbon/human
var/is_being_groped = 0

/mob/living/carbon/human/proc/be_groped(var/mob/living/carbon/human/H)
is_being_groped = H
update_groped_icon()

/mob/living/carbon/human/proc/update_groped_icon()
if(is_being_groped)
var/mutable_appearance/new_groping_overlay = mutable_appearance('modular_splurt/icons/effects/sex_spells.dmi', "grope overlay", -GROPING_LAYER)
overlays_standing[GROPING_LAYER] = new_groping_overlay
apply_overlay(GROPING_LAYER)
else
overlays_standing[GROPING_LAYER] = null
return 0

/mob/living/carbon/human/Life()
. = ..()
if(is_being_groped)
var/datum/interaction/I
if(prob(50))
I = SSinteractions.interactions["/datum/interaction/lewd/titgrope_self"]
I.do_action(is_being_groped, src, TRUE)
else
I = SSinteractions.interactions["/datum/interaction/lewd/fingerass_self"]
I.do_action(is_being_groped, src, TRUE)


/datum/quirk/sex_magician
name = "Sex Magician"
desc = "You can cast sexual spells into others."
value = 1
mob_trait = TRAIT_SEXSPELLS
gain_text = "<span class='notice'>You can cast sexual spells.</span>"
lose_text = "<span class='danger'>You forget how to cast sexual spells.</span>"
medical_record_text = "Patient brain scans show a highly-developed into sexual spells."

/datum/quirk/sex_magician/on_spawn()
var/mob/living/carbon/human/H = quirk_holder
var/obj/effect/proc_holder/spell/grope/S = new /obj/effect/proc_holder/spell/grope
var/obj/effect/proc_holder/spell/targeted/touch/penis_max/P = new /obj/effect/proc_holder/spell/targeted/touch/penis_max
var/obj/effect/proc_holder/spell/targeted/touch/penis/PP = new /obj/effect/proc_holder/spell/targeted/touch/penis
var/obj/effect/proc_holder/spell/self/eyes_of_lust/eol = new /obj/effect/proc_holder/spell/self/eyes_of_lust
var/obj/effect/proc_holder/spell/hypno/hyp = new /obj/effect/proc_holder/spell/hypno
var/obj/effect/proc_holder/spell/self/aoe_lust/aoe = new /obj/effect/proc_holder/spell/self/aoe_lust
var/obj/effect/proc_holder/spell/targeted/touch/uncover/unc = new /obj/effect/proc_holder/spell/targeted/touch/uncover
H.mind.AddSpell(S)
H.mind.AddSpell(P)
H.mind.AddSpell(PP)
H.mind.AddSpell(eol)
H.mind.AddSpell(hyp)
H.mind.AddSpell(aoe)
H.mind.AddSpell(unc)
//H.add_arousal_hud()





Loading