whole lotta stuff
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user