Skip to content
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
6 changes: 6 additions & 0 deletions code/__DEFINES/sex.dm
Original file line number Diff line number Diff line change
Expand Up @@ -241,3 +241,9 @@ GLOBAL_LIST_EMPTY(locked_sex_objects)
#define KNOTTED_NULL 0
#define KNOTTED_AS_TOP 1
#define KNOTTED_AS_BTM 2

//Caustic edit
#define IMPREG_PROB_DEFAULT 25
#define IMPREG_PROB_INCREMENT 10
#define IMPREG_PROB_MAX 95
//Caustic edit end
3 changes: 3 additions & 0 deletions code/__DEFINES/traits.dm
Original file line number Diff line number Diff line change
Expand Up @@ -222,6 +222,9 @@
// ARMOR / CLOTHING GIVEN TRAITS (GIVEN BY WEARING CLOTHES/ARMOR PIECES)
#define TRAIT_MONK_ROBE "Holy Vestatures"
#define TRAIT_RACISMISBAD "Heritage Vision"
//Caustic edit
#define TRAIT_BAOTHA_FERTILITY_BOON "Marked and shaped by Baotha"
//Caustic edit end

//Caustic edit
#define TRAIT_NECRAS_ABATEMENT "Necra's Abatement" //keeps deadites from doing much of anything in town
Expand Down
8 changes: 8 additions & 0 deletions code/datums/mind.dm
Original file line number Diff line number Diff line change
Expand Up @@ -787,6 +787,14 @@ GLOBAL_LIST_EMPTY(personal_objective_minds)
for(var/obj/effect/proc_holder/S in spell_list)
RemoveSpell(S)

//Caustic edit
//removes spells that have miracle = true on them
/datum/mind/proc/RemoveAllMiracles()
for(var/obj/effect/proc_holder/spell/spell in spell_list)
if(spell.miracle)
RemoveSpell(spell)
//Caustic edit end

/datum/mind/proc/transfer_martial_arts(mob/living/new_character)
if(!ishuman(new_character))
return
Expand Down
4 changes: 4 additions & 0 deletions code/datums/sexcon2/actions/sex/anal.dm
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,10 @@
/datum/sex_action/sex/anal/handle_climax_message(mob/living/carbon/human/user, mob/living/carbon/human/target)
user.visible_message(span_love("[user] cums into [target]'s butt!"))
user.virginity = FALSE
//Caustic edit
if(HAS_TRAIT(target, TRAIT_BAOTHA_FERTILITY_BOON) && !target.getorganslot(ORGAN_SLOT_VAGINA))
user.try_impregnate(target)
//Caustic edit end
return "into"


Expand Down
4 changes: 4 additions & 0 deletions code/datums/sexcon2/actions/sex/slit.dm
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,10 @@
/datum/sex_action/sex/slit/handle_climax_message(mob/living/carbon/human/user, mob/living/carbon/human/target)
user.visible_message(span_love("[user] cums into [target]'s slit!"))
user.virginity = FALSE
//Caustic edit
if(HAS_TRAIT(target, TRAIT_BAOTHA_FERTILITY_BOON) && !target.getorganslot(ORGAN_SLOT_VAGINA))
user.try_impregnate(target)
//Caustic edit end
return "into"

/datum/sex_action/sex/slit/get_finish_message(mob/living/carbon/human/user, mob/living/carbon/human/target)
Expand Down
31 changes: 28 additions & 3 deletions code/datums/sexcon2/sex_procs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -53,10 +53,35 @@
if(!testes)
return
var/obj/item/organ/vagina/vag = wife.getorganslot(ORGAN_SLOT_VAGINA)
if(!vag)
//Caustic edit
if(!vag && !HAS_TRAIT(wife, TRAIT_BAOTHA_FERTILITY_BOON))
return
if(prob(25) && wife.is_fertile() && is_virile())
vag.be_impregnated(src)
if(!is_virile())
return
if(vag)
if(!wife.is_fertile())
return
var/prob_for_impreg = vag.impregnation_probability
if(wife.has_status_effect(/datum/status_effect/knotted))
prob_for_impreg = min(prob_for_impreg & 2, IMPREG_PROB_MAX)
if(prob(prob_for_impreg))
vag.be_impregnated(src)
vag.impregnation_probability = IMPREG_PROB_DEFAULT
else
vag.impregnation_probability = min(prob_for_impreg + IMPREG_PROB_INCREMENT, IMPREG_PROB_MAX)
else
var/prob_for_impreg = wife.mpreg_chance
if(wife.has_status_effect(/datum/status_effect/knotted))
prob_for_impreg = min(prob_for_impreg * 2, IMPREG_PROB_MAX)
if(prob(prob_for_impreg))
if(wife.mpreg)
to_chat(wife, span_love("I feel a surge of warmth inside me again..."))
return
to_chat(wife, span_love("I feel a strange surge of warmth inside me... Am I pregnant?.."))
wife.mpreg = TRUE
else
wife.mpreg_chance = min(prob_for_impreg + IMPREG_PROB_INCREMENT, IMPREG_PROB_MAX)
//Caustic edit end

/mob/living/proc/can_do_sex()
return TRUE
Expand Down
8 changes: 8 additions & 0 deletions code/modules/mob/living/carbon/human/human_defines.dm
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,10 @@
/// Ref to orison-like sunder object
var/sunder_light_obj = null

//Caustic edit
var/already_converted_once = FALSE
//Caustic edit end

/// Assoc list of culinary preferences of the mob
var/list/culinary_preferences = list()

Expand Down Expand Up @@ -175,5 +179,9 @@
var/virginity = FALSE
// Used to prevent certain antag from having sex
var/can_do_sex = TRUE
//Caustic edit
var/mpreg = FALSE
var/mpreg_chance = IMPREG_PROB_DEFAULT
//Caustic edit end

fovangle = FOV_DEFAULT
3 changes: 3 additions & 0 deletions code/modules/sexcon/sex_organs/vagina.dm
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@
accessory_type = /datum/sprite_accessory/vagina/human
var/pregnant = FALSE
var/fertility = TRUE
//Caustic edit
var/impregnation_probability = IMPREG_PROB_DEFAULT
//Caustic edit end

/obj/item/organ/vagina/proc/be_impregnated(mob/living/carbon/human/father)
if(pregnant)
Expand Down
Binary file added icons/roguetown/misc/baotha_marking.dmi
Binary file not shown.
161 changes: 159 additions & 2 deletions modular_azurepeak/code/game/objects/items/ritualcircles.dm
Original file line number Diff line number Diff line change
Expand Up @@ -1514,12 +1514,74 @@
cloak = /obj/item/clothing/cloak/graggar
r_hand = /obj/item/rogueweapon/greataxe/steel/doublehead/graggar

//Caustic edit
/obj/effect/decal/cleanable/roguerune/god/baotha
name = "Rune of Hedonism"
desc = "A Holy Rune of Baotha. Relief for the broken hearted."
icon_state = "baotha_chalky"
rituals = list(/datum/runeritual/joybringer::name = /datum/runeritual/joybringer)
allowed_patron = /datum/patron/inhumen/baotha
var/baotharites = list("Conversion", "Mark of Baotha", /datum/runeritual/joybringer::name = /datum/runeritual/joybringer)

/obj/effect/decal/cleanable/roguerune/god/baotha/attack_hand(mob/living/user)
if((user.patron?.type) != /datum/patron/inhumen/baotha)
to_chat(user,span_smallred("I don't know the proper rites for this..."))
return
if(!HAS_TRAIT(user, TRAIT_RITUALIST))
to_chat(user,span_smallred("I don't know the proper rites for this..."))
return
if(user.has_status_effect(/datum/status_effect/debuff/ritesexpended))
to_chat(user,span_smallred("I have performed enough rituals for the day... I must rest before communing more."))
return
if(!Adjacent(user))
to_chat(user, "You must stand close to the rune to receive Baotha's blessing.")
return
var/riteselection = input(user, "Rituals of Desire", src) as null|anything in baotharites
switch(riteselection) // put ur rite selection here
if("Conversion")
var/list/valids_on_rune = list()
for(var/mob/living/carbon/human/peep in range(0, loc))
if(HAS_TRAIT(peep, TRAIT_DEPRAVED))
continue
valids_on_rune += peep
if(!valids_on_rune.len)
to_chat(user, "No valid targets on the rune!")
return
var/mob/living/carbon/human/target = input(user, "Choose a host") as null|anything in valids_on_rune
if(!target || QDELETED(target) || target.loc != loc)
return
if(do_after(user, 50))
user.say("#Lady of Lust, grant this one succor...")
if(do_after(user, 20))
user.say("#Bless them with thy carnal delight...")
if(do_after(user, 20))
user.say("#Show them the pleasures of the flesh!")
if(do_after(user, 50))
user.say("Praise Baotha!")
icon_state = "baotha_active"
baothaconversion(target)
spawn(120)
icon_state = "baotha_chalky"
if("Mark of Baotha")
var/list/valids_on_rune = list()
for(var/mob/living/carbon/human/peep in range(0, loc))
valids_on_rune += peep
if(!valids_on_rune.len)
to_chat(user, "No valid targets on the rune!")
return
var/mob/living/carbon/human/target = input(user, "Choose a host") as null|anything in valids_on_rune
if(!target || QDELETED(target) || target.loc != loc)
return
if(do_after(user, 50))
user.say("#Lady of Lust, hear my words...")
if(do_after(user, 50))
user.say("#I offer to you this mortal vessel...")
if(do_after(user, 50))
user.say("#Accept this offering, and bless their flesh with thy sigil!")
if(do_after(user, 50))
user.say("Praise Baotha!")
icon_state = "baotha_active"
baothablessing(target)
spawn(120)
icon_state = "baotha_chalky"

/datum/runeritual/joybringer
name = "Rite of Joy"
Expand Down Expand Up @@ -1552,6 +1614,101 @@

return TRUE

/obj/effect/decal/cleanable/roguerune/god/baotha/proc/baothaconversion(mob/living/carbon/human/target)
if(!target || QDELETED(target) || target.loc != loc)
to_chat(usr, "Selected target is not on the rune! [target.p_they(TRUE)] must be directly on top of the rune to receive Baotha's blessing.")
return
if(HAS_TRAIT(target, TRAIT_DEPRAVED))
loc.visible_message(span_cult("THE RITE REJECTS ONE ALREADY DEPRAVED ENOUGH!!"))
return
if(target.already_converted_once)
loc.visible_message(span_cult("BLOODY NIMROD!!"))
target.apply_damage(150, BRUTE, BODY_ZONE_HEAD)
return
var/prompt = alert(target, "Sickly-sweet pleasure drips down your spine. You can feel a narcotic haze tugging at your mind...",, "INDULGE", "RESIST")
if(prompt == "INDULGE")
to_chat(target, span_love("A hot sensation gushes through your veins. Your body throbs with pleasure."))
target.Stun(60)
target.Knockdown(60)
to_chat(target, span_userdanger("I can't hold back!"))
target.GetComponent(/datum/component/arousal)?.set_arousal(target, 300)
loc.visible_message(span_cult("[target] writhes and moans as they lose control of their body!"))
spawn(20)
playsound(target, 'sound/health/fastbeat.ogg', 60)
playsound(loc, 'sound/ambience/creepywind.ogg', 80)
target.adjust_skillrank(/datum/skill/misc/athletics, 1, TRUE)
target.adjust_skillrank(/datum/skill/misc/music, 1, TRUE)
target.adjust_skillrank(/datum/skill/misc/riding, 1, TRUE) // haha get it?
spawn(20)
to_chat(target, span_purple("You can't stop craving more..."))
if(target.devotion == null)
target.set_patron(new /datum/patron/inhumen/baotha)
return
else
var/previous_level = target.devotion.level //now you might ask why we get previous_level variable before switching le patron. reason is when swapping patrons it completely fucks up devotion data for people
target.set_patron(new /datum/patron/inhumen/baotha)
var/datum/devotion/C = new /datum/devotion(target, target.patron)
if(previous_level == 4)
target.mind?.RemoveAllMiracles()
C.grant_miracles(target, cleric_tier = CLERIC_T4, passive_gain = CLERIC_REGEN_MAJOR, start_maxed = TRUE) // gotta change?
if(previous_level == 3)
target.mind?.RemoveAllMiracles()
C.grant_miracles(target, cleric_tier = CLERIC_T3, passive_gain = CLERIC_REGEN_MAJOR, devotion_limit = CLERIC_REQ_3) // gotta change?
if(previous_level == 2)
target.mind?.RemoveAllMiracles()
C.grant_miracles(target, cleric_tier = CLERIC_T2, passive_gain = CLERIC_REGEN_MINOR, devotion_limit = CLERIC_REQ_2)
if(previous_level == 1)
target.mind?.RemoveAllMiracles()
C.grant_miracles(target, cleric_tier = CLERIC_T1, passive_gain = CLERIC_REGEN_DEVOTEE, devotion_limit = CLERIC_REQ_1)
if(prompt == "RESIST")
to_chat(target, span_warning("Your body seizes in pain!"))
target.Stun(60)
target.Knockdown(60)
to_chat(target, span_userdanger("YOUR FLESH BURNS!"))
target.emote("Agony")
target.apply_damage(60, BURN, BODY_ZONE_CHEST)
loc.visible_message(span_cult("[target] violently writhes and thrashes atop the rune as they dare to defy Baotha!"))

/obj/effect/decal/cleanable/roguerune/god/baotha/proc/baothablessing(mob/living/carbon/human/target)
if(!target || QDELETED(target) || target.loc != loc)
to_chat(usr, "Selected target is not on the rune! [target.p_they(TRUE)] must be directly on top of the rune to receive Baotha's mark.")
return
if(HAS_TRAIT(target, TRAIT_BAOTHA_FERTILITY_BOON))
loc.visible_message(span_cult("They have already been blessed!"))
return
var/prompt = alert(target, "Your hair stands on end. Shivers run down your spine. Something feels wrong...",, "SURRENDER", "RESIST")
if(prompt == "SURRENDER")
to_chat(target, span_love("A strange feeling of warmth blooms within your stomach."))
target.reagents.add_reagent(/datum/reagent/fermented_crab, 5)
spawn(20)
to_chat(target, span_warning("You fall to your feet, your legs suddenly going limp."))
target.Stun(60)
target.Knockdown(60)
spawn(20)
loc.visible_message(span_cult("[target] shuddders and moans as purple flames lick at their abdomen, burning a glowing pink symbol into their pelvis."))
var/mutable_appearance/marking_overlay = mutable_appearance('icons/roguetown/misc/baotha_marking.dmi', "marking_[target.gender == "male" ? "m" : "f"]", -BODY_LAYER)
target.add_overlay(marking_overlay)
target.update_body_parts()
playsound(target, 'sound/health/fastbeat.ogg', 60)
target.adjust_skillrank(/datum/skill/misc/riding, 1, TRUE) // hue hue hue
spawn(40)
to_chat(target, span_purple("You have been marked by Baotha!"))
ADD_TRAIT(target, TRAIT_BAOTHA_FERTILITY_BOON, TRAIT_GENERIC)
if(!istype(target.charflaw, /datum/charflaw/addiction/lovefiend))
target.charflaw = new /datum/charflaw/addiction/lovefiend(target)
var/obj/item/organ/vagina/vagina = target.getorganslot(ORGAN_SLOT_VAGINA)
if(vagina && !vagina.fertility)
vagina.fertility = TRUE
if(prompt == "RESIST")
to_chat(target, span_warning("White-hot flames sear your abdomen!"))
target.Stun(60)
target.Knockdown(60)
to_chat(target, span_userdanger("IT BURNS! MAKE IT STOP!"))
target.emote("Agony")
target.apply_damage(60, BURN, BODY_ZONE_CHEST)
loc.visible_message(span_cult("[target] violently writhes and thrashes atop the rune as their flesh is scorched by Baotha's wrath!"))
//Caustic edit end

/obj/effect/decal/cleanable/roguerune/god/psydon
name = "Rune of Enduring"
desc = "A Holy Rune of Psydon. It depicts His holy symbol, yet nothing stirs within you."
Expand Down
14 changes: 7 additions & 7 deletions roguetown.dme
Original file line number Diff line number Diff line change
Expand Up @@ -2880,6 +2880,7 @@
#include "modular_causticcove\code\datums\combat_music.dm"
#include "modular_causticcove\code\datums\loadout.dm"
#include "modular_causticcove\code\game\objects\effects\landmarks.dm"
#include "modular_causticcove\code\game\objects\effects\spawners\loot_magical.dm"
#include "modular_causticcove\code\game\objects\items\clothes\stockings.dm"
#include "modular_causticcove\code\game\objects\items\rogueitems\leash.dm"
#include "modular_causticcove\code\game\objects\items\rogueitems\util.dm"
Expand Down Expand Up @@ -2941,6 +2942,7 @@
#include "modular_causticcove\code\modules\classes\shrine_priest\shrine_guardian.dm"
#include "modular_causticcove\code\modules\classes\shrine_priest\shrine_priest.dm"
#include "modular_causticcove\code\modules\client\customizers\organ\genitals.dm"
#include "modular_causticcove\code\modules\clothing\npc\hobgoblin_armor.dm"
#include "modular_causticcove\code\modules\dcbot\config.dm"
#include "modular_causticcove\code\modules\dcbot\internaltools\ahelprelay.dm"
#include "modular_causticcove\code\modules\dcbot\internaltools\whitelost.dm"
Expand All @@ -2949,6 +2951,8 @@
#include "modular_causticcove\code\modules\dcbot\topichandlers\fetchmanifest.dm"
#include "modular_causticcove\code\modules\dcbot\topichandlers\fetchplayers.dm"
#include "modular_causticcove\code\modules\deadite_pac\deadite_pac.dm"
#include "modular_causticcove\code\modules\events\adventure\random_bosses\random_boss.dm"
#include "modular_causticcove\code\modules\events\adventure\random_patrols\random_patrols.dm"
#include "modular_causticcove\code\modules\extra_virtue\prefs.dm"
#include "modular_causticcove\code\modules\grazer\stomach.dm"
#include "modular_causticcove\code\modules\grazer\virtue.dm"
Expand All @@ -2973,10 +2977,9 @@
#include "modular_causticcove\code\modules\mob\dead\new_player\sprite_accessory\horns.dm"
#include "modular_causticcove\code\modules\mob\dead\new_player\sprite_accessory\snout.dm"
#include "modular_causticcove\code\modules\mob\living\carbon\hobgoblin\hobgoblin.dm"
#include "modular_causticcove\code\modules\mob\living\carbon\hobgoblin\ambush_config\ambush_hobgoblin.dm"
#include "modular_causticcove\code\modules\mob\living\carbon\hobgoblin\npc\hobgoblin_npc.dm"
#include "modular_causticcove\code\modules\mob\living\carbon\hobgoblin\species\hobgoblin_species.dm"
#include "modular_causticcove\code\modules\clothing\npc\hobgoblin_armor.dm"
#include "modular_causticcove\code\modules\mob\living\carbon\hobgoblin\ambush_config\ambush_hobgoblin.dm"
#include "modular_causticcove\code\modules\nat_armor\nat_armor.dm"
#include "modular_causticcove\code\modules\nat_armor\virtue.dm"
#include "modular_causticcove\code\modules\persistance\serialize.dm"
Expand All @@ -2994,9 +2997,9 @@
#include "modular_causticcove\code\modules\spells\animagus\animagus_transformation.dm"
#include "modular_causticcove\code\modules\spells\animagus\cat.dm"
#include "modular_causticcove\code\modules\spells\animagus\zad.dm"
#include "modular_causticcove\code\modules\standardized_sprite\standardized_sprite_verb.dm"
#include "modular_causticcove\code\modules\spells\invoked_single_target\temperitem.dm"
#include "modular_causticcove\code\modules\spells\components\temper_clothing.dm"
#include "modular_causticcove\code\modules\spells\invoked_single_target\temperitem.dm"
#include "modular_causticcove\code\modules\standardized_sprite\standardized_sprite_verb.dm"
#include "modular_causticcove\code\modules\taurs\taur_bodyparts.dm"
#include "modular_causticcove\code\modules\taurs\taur_markings.dm"
#include "modular_causticcove\code\modules\vices\mind_broken.dm"
Expand All @@ -3015,7 +3018,4 @@
#include "modular_hearthstone\code\modules\mob\living\simple_animal\rogue\orc.dm"
#include "modular_hearthstone\code\modules\mob\living\simple_animal\rogue\rogue_corpse.dm"
#include "modular_hearthstone\code\modules\reagents\reagent_containers\lux.dm"
#include "modular_causticcove\code\game\objects\effects\spawners\loot_magical.dm"
#include "modular_causticcove\code\modules\events\adventure\random_patrols\random_patrols.dm"
#include "modular_causticcove\code\modules\events\adventure\random_bosses\random_boss.dm"
// END_INCLUDE
Loading