whole lotta stuff

This commit is contained in:
Metis
2024-09-12 23:53:35 -04:00
parent f268e5655f
commit 8fd779ef02
232 changed files with 8793 additions and 0 deletions
@@ -0,0 +1,44 @@
/datum/component/fattening_door
var/fatten = FALSE // whether player will be fattened
var/fat_to_add = 2 // fatness per tick stunned
/datum/component/fattening_door/Initialize()
if(!istype(parent, /obj/structure/mineral_door)) // if the attached object isn't a door, return incompatible!
return COMPONENT_INCOMPATIBLE
RegisterSignal(parent, list(COMSIG_MOVABLE_CROSSED),PROC_REF(Fatten))
/datum/component/fattening_door/proc/Fatten() //GS13
var/stuck_delay = 0
var/turf/T = get_turf(parent)
for(var/mob/living/carbon/M in T)
var/vis_message_self = ""
var/vis_message_others = ""
// determine if mob should get stuck and be fattened
if(M.fatness >= FATNESS_LEVEL_FAT)
if(!M.AmountFatStunned())
fatten = TRUE
stuck_delay = 5
vis_message_self = "You feel your sides briefly brush against the doorway!"
vis_message_others = "[M]'s sides briefly brush against the doorway."
// Scales depending on this switch.
switch(M.fatness)
if(FATNESS_LEVEL_BARELYMOBILE to INFINITY)
stuck_delay = 120
vis_message_self = "You feel yourself get stuck in the doorway!"
vis_message_others = "[M] gets stuck in the doorway!"
if((FATNESS_LEVEL_FATTER+1) to FATNESS_LEVEL_MORBIDLY_OBESE)
stuck_delay = 50
vis_message_self ="You feel your sides barely squeeze through the doorway!"
vis_message_others = "[M] barely squeezes through the doorway!"
if((FATNESS_LEVEL_FAT+1) to FATNESS_LEVEL_FATTER)
stuck_delay = 15
vis_message_self = "You feel your sides smush against the doorway!."
vis_message_others = "[M]'s sides briefly smush against the doorway."
// Apply the fatstun
if(fatten)
M.visible_message("<span class='boldnotice'>[vis_message_others]</span>", "<span class='boldwarning'>[vis_message_self]</span>")
M.FatStun(stuck_delay, fatAmount = fat_to_add) // DOOR STUCK
@@ -0,0 +1,71 @@
/datum/symptom/berry
name = "Berrification"
desc = "The virus causes the host's biology to overflow with a blue substance. Infection ends if the substance is completely removed from their body, besides ordinary cures."
stealth = -5
resistance = -4
stage_speed = 1
transmittable = 6
level = 7
severity = 5
base_message_chance = 100
symptom_delay_min = 15
symptom_delay_max = 45
threshold_desc = list(
"Stage Speed" = "Increases the rate of liquid production.",
)
var/datum/reagent/infection_reagent = /datum/reagent/blueberry_juice
/datum/symptom/berry/Start(datum/disease/advance/A)
if(!..())
return
if(A.affected_mob?.client?.prefs?.blueberry_inflation)
A.affected_mob.reagents.add_reagent(infection_reagent, max(1, A.totalStageSpeed()) * 10)
..()
/datum/symptom/berry/Activate(datum/disease/advance/A)
if(!..())
return
var/mob/living/carbon/M = A.affected_mob
if(!(M?.client?.prefs?.blueberry_inflation))
return
if(M.reagents.get_reagent_amount(infection_reagent) <= 0)
A.remove_disease()
switch(A.stage)
if(1, 2, 3, 4)
if(prob(base_message_chance))
to_chat(M, "<span class='warning'>[pick("You feel oddly full...", "Your stomach churns...", "You hear a gurgle...", "You taste berries...")]</span>")
else
to_chat(M, "<span class='warning'><i>[pick("A deep slosh comes from inside you...", "Your mind feels light...", "You think blue really suits you...", "Your skin feels so tight...")]</i></span>")
M.reagents.add_reagent(infection_reagent, max(A.totalStageSpeed(), 1))
/obj/item/reagent_containers/glass/attack(mob/M, mob/user, obj/target)
if(M.reagents.get_reagent_amount(/datum/reagent/blueberry_juice) > 0 && (reagents.total_volume + min(amount_per_transfer_from_this, 10)) <= volume)
reagents.add_reagent(/datum/reagent/blueberry_juice, min(10, amount_per_transfer_from_this))
M.reagents.remove_reagent(/datum/reagent/blueberry_juice, min(10, amount_per_transfer_from_this))
if(M != user)
to_chat(user, "<span class='warning'>You juice [M.name]...</span>")
to_chat(M, "<span class='warning'>[user.name] juices you...</span>")
else
to_chat(user, "<span class='warning'>You get some juice out of you...</span>")
if(prob(5))
new /obj/effect/decal/cleanable/juice(M.loc)
playsound(M.loc, 'sound/effects/splat.ogg',rand(10,50), 1)
return
..()
/obj/effect/decal/cleanable/juice
name = "berry juice"
desc = "It's blue and smells enticingly sweet."
icon = 'GainStation13/icons/turf/berry_decal.dmi'
icon_state = "floor1"
random_icon_states = list("floor1", "floor2", "floor3", "floor4", "floor5", "floor6", "floor7")
blood_state = BLOOD_STATE_JUICE
bloodiness = BLOOD_AMOUNT_PER_DECAL
/obj/effect/decal/cleanable/juice/Initialize(mapload)
. = ..()
reagents.add_reagent(/datum/reagent/blueberry_juice = 5)
/obj/effect/decal/cleanable/juice/streak
random_icon_states = list("streak1", "streak2", "streak3", "streak4", "streak5")
@@ -0,0 +1,63 @@
/datum/mutation/human/fatfang
name = "The Nibble"
desc = "A rare mutation that grows a pair of fangs in the user's mouth that inject a chemical that develops the target's adipose tissue."
quality = POSITIVE
text_gain_indication = "<span class='notice'>You feel something growing in your mouth!</span>"
text_lose_indication = "<span class='notice'>You feel your fangs shrink away.</span>"
difficulty = 8
power = /obj/effect/proc_holder/spell/targeted/touch/fatfang
instability = 10
energy_coeff = 1
power_coeff = 1
///Which chem is added (lipo default) and how much?
var/chem_to_add = /datum/reagent/consumable/lipoifier
var/chem_amount = 5
/obj/effect/proc_holder/spell/targeted/touch/fatfang
name = "The Nibble"
desc = "Draw out fangs that inject fattening venom"
drawmessage = "You draw out your fangs."
dropmessage = "You retract your fangs."
hand_path = /obj/item/melee/touch_attack/fatfang
action_icon = 'icons/mob/actions/bloodsucker.dmi'
action_icon_state = "power_feed"
charge_max = 50
clothes_req = FALSE
/obj/item/melee/touch_attack/fatfang
name = "\improper fattening fangs"
desc = "Fangs armed with a venom most ample."
catchphrase = null
icon = 'icons/mob/actions/bloodsucker.dmi'
icon_state = "power_feed"
var/starttime = 0
/obj/item/melee/touch_attack/fatfang/afterattack(atom/target, mob/living/carbon/user, proximity)
if(!proximity || !iscarbon(target))
return FALSE
if(!target || !user.dna.get_mutation(FATFANG).chem_to_add || !user.dna.get_mutation(FATFANG).chem_amount)
return FALSE
target.visible_message("<span class='danger'>[user] nibbles [target]!</span>","<span class='userdanger'>[user] nibbles you!</span>")
if(target == user.pulling && ishuman(user.pulling))
starttime = world.time
user.dna.get_mutation(FATFANG).power.charge_max = 600 * GET_MUTATION_ENERGY(user.dna.get_mutation(FATFANG))
while(starttime + 300 > world.time && in_range(user, target))
if(do_mob(user, target, 10, 0, 1))
target.reagents.add_reagent(user.dna.get_mutation(FATFANG).chem_to_add, (user.dna.get_mutation(FATFANG).chem_amount * GET_MUTATION_POWER(user.dna.get_mutation(FATFANG))/2))
target.visible_message("<span class='danger'>[user] pumps some venom in [target]!</span>","<span class='userdanger'>[user] pumps some venom in you!</span>")
else
user.dna.get_mutation(FATFANG).power.charge_max = 50 * GET_MUTATION_ENERGY(user.dna.get_mutation(FATFANG))
target.reagents.add_reagent(user.dna.get_mutation(FATFANG).chem_to_add, user.dna.get_mutation(FATFANG).chem_amount * GET_MUTATION_POWER(user.dna.get_mutation(FATFANG)))
user.changeNext_move(50)
/obj/item/dnainjector/antifang
name = "\improper DNA injector (Anti-The Nibble)"
desc = "By the power of sugar, their fangs shall fall."
remove_mutations = list(FATFANG)
/obj/item/dnainjector/fatfang
name = "\improper DNA injector (The Nibble)"
desc = "Give 'em just a teeny tiny bite."
add_mutations = list(FATFANG)
@@ -0,0 +1,42 @@
/datum/mutation/human/radfat
name = "Radiotrophic Metabolism"
desc = "A mutation that causes the user to be immune to the adverse effects of radiations, but causes sudden cell multiplication with increased strength under irradiation."
quality = POSITIVE
text_gain_indication = "<span class='notice'>You crave the taste of... radiation?</span>"
text_lose_indication = "<span class='notice'>You no longer desire the taste of radiation...</span>"
difficulty = 14
instability = 30
power_coeff = 1
var/FATCAP = 100
/datum/mutation/human/radfat/on_life()
. = ..()
var/fat_add = 1
var/pwr = GET_MUTATION_POWER(src)
if(owner.radiation > 0)
fat_add += round(owner.radiation * (0.10 * pwr))
owner.radiation -= round(owner.radiation * 0.05) + 1
if(fat_add > (FATCAP * pwr))
fat_add = (FATCAP * pwr)
owner.adjust_fatness(fat_add, FATTENING_TYPE_RADIATIONS)
/datum/mutation/human/radfat/on_acquiring(mob/living/carbon/human/owner)
if(..())
return
ADD_TRAIT(owner, TRAIT_RADRESONANCE, src)
/datum/mutation/human/radfat/on_losing(mob/living/carbon/human/owner)
if(..())
return
REMOVE_TRAIT(owner, TRAIT_RADRESONANCE, src)
/obj/item/dnainjector/antiradfat
name = "\improper DNA injector (Anti-Radiotrophic Metabolism)"
desc = "The green kills."
remove_mutations = list(RADFAT)
/obj/item/dnainjector/radfat
name = "\improper DNA injector (Radiotrophic Metabolism)"
desc = "Nuclear fallout protection at an heavy price."
add_mutations = list(RADFAT)
@@ -0,0 +1,64 @@
// Cba making a define file just for status effects so all the helper stuff goes here!~
#define STATUS_EFFECT_FATSTUN /datum/status_effect/incapacitating/stun/fat //the affected is knocked down
////
// Makes it so player is stunned and while stunned, fatness level grows.
////
/datum/status_effect/incapacitating/stun/fat
var/fatAmount = 1
/datum/status_effect/incapacitating/stun/fat/on_creation(mob/living/new_owner, set_duration, updating_canmove, fatnessAmount)
fatAmount = fatnessAmount
..()
/datum/status_effect/incapacitating/stun/fat/tick()
var/mob/living/carbon/C = owner
if(C)
C.adjust_fatness(fatAmount, FATTENING_TYPE_ITEM) // simply adds/removes the fat overtime.
// to_chat(owner, "You feel larger...") // debugging to see if the stun works.
////
// Helpers so it applies to the mob. (I cannot be bothered making a new file for this AUGH)
////
/mob/proc/IsFatStunned() //non-living mobs shouldn't be stunned
return FALSE
/mob/living/IsFatStunned() //If we're knocked down
return has_status_effect(STATUS_EFFECT_FATSTUN)
/mob/living/proc/AmountFatStunned() //How many deciseconds remain in our knockdown
var/datum/status_effect/incapacitating/stun/fat/F = IsFatStunned()
if(F)
return F.duration - world.time
return FALSE
/mob/living/proc/FatStun(amount, updating = TRUE, ignore_canstun = FALSE, fatAmount)
if(((status_flags & CANSTUN) && !HAS_TRAIT(src, TRAIT_STUNIMMUNE)) || ignore_canstun)
var/datum/status_effect/incapacitating/stun/fat/F = IsFatStunned()
if(F)
F.duration = max(world.time + amount, F.duration)
else if(amount > 0)
F = apply_status_effect(STATUS_EFFECT_FATSTUN, amount, updating, fatAmount)
return F
/mob/living/proc/SetFatStun(amount, updating = TRUE, ignore_canstun = FALSE) //Sets remaining duration
if(((status_flags & CANSTUN) && !HAS_TRAIT(src, TRAIT_STUNIMMUNE)) || ignore_canstun)
var/datum/status_effect/incapacitating/stun/fat/F = IsFatStunned()
if(amount <= 0)
if(F)
qdel(F)
else
if(F)
F.duration = world.time + amount
else
F = apply_status_effect(STATUS_EFFECT_FATSTUN, amount, updating)
return F
/mob/living/proc/AdjustFatStun(amount, updating = TRUE, ignore_canstun = FALSE) //Adds to remaining duration
if(((status_flags & CANSTUN) && !HAS_TRAIT(src, TRAIT_STUNIMMUNE)) || ignore_canstun)
var/datum/status_effect/incapacitating/stun/fat/F = IsFatStunned()
if(F)
F.duration += amount
else if(amount > 0)
F = apply_status_effect(STATUS_EFFECT_FATSTUN, amount, updating)
return F