Merge remote-tracking branch 'tgstation/master' into upstream-2025-11-29

# Conflicts:
#	_maps/RandomRuins/SpaceRuins/derelict_sulaco.dmm
#	_maps/RandomRuins/SpaceRuins/garbagetruck2.dmm
#	_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm
#	_maps/map_files/tramstation/tramstation.dmm
#	code/_onclick/hud/new_player.dm
#	code/datums/components/squashable.dm
#	code/datums/diseases/advance/symptoms/heal.dm
#	code/datums/diseases/chronic_illness.dm
#	code/datums/status_effects/buffs.dm
#	code/datums/status_effects/debuffs/drunk.dm
#	code/datums/status_effects/debuffs/stamcrit.dm
#	code/game/machinery/computer/crew.dm
#	code/game/objects/items/devices/scanners/health_analyzer.dm
#	code/game/objects/items/wall_mounted.dm
#	code/game/turfs/closed/indestructible.dm
#	code/modules/admin/view_variables/filterrific.dm
#	code/modules/antagonists/heretic/influences.dm
#	code/modules/cargo/orderconsole.dm
#	code/modules/client/preferences.dm
#	code/modules/events/space_vines/vine_mutations.dm
#	code/modules/mob/dead/new_player/new_player.dm
#	code/modules/mob/living/carbon/human/death.dm
#	code/modules/mob/living/carbon/human/species_types/jellypeople.dm
#	code/modules/mob/living/damage_procs.dm
#	code/modules/mob/living/living.dm
#	code/modules/mob_spawn/ghost_roles/mining_roles.dm
#	code/modules/mob_spawn/mob_spawn.dm
#	code/modules/projectiles/ammunition/energy/laser.dm
#	code/modules/projectiles/guns/ballistic/launchers.dm
#	code/modules/projectiles/guns/energy/laser.dm
#	code/modules/reagents/chemistry/machinery/chem_dispenser.dm
#	code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm
#	code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm
#	code/modules/reagents/chemistry/reagents/medicine_reagents.dm
#	code/modules/surgery/healing.dm
#	code/modules/unit_tests/designs.dm
#	icons/mob/inhands/items_lefthand.dmi
#	icons/mob/inhands/items_righthand.dmi
#	tgui/packages/tgui/interfaces/ChemDispenser.tsx
This commit is contained in:
nevimer
2025-11-29 22:49:21 -05:00
1185 changed files with 39068 additions and 32028 deletions
@@ -160,7 +160,7 @@
to_chat(loc, span_warning("Combat injection is still recharging."))
return
var/mob/living/carbon/human/wearer = loc
wearer.adjustStaminaLoss(-75)
wearer.adjust_stamina_loss(-75)
wearer.SetUnconscious(0)
wearer.SetStun(0)
wearer.SetKnockdown(0)
@@ -262,7 +262,7 @@
inhand_icon_state = "shrink_ray"
icon_state = "shrink_ray"
automatic_charge_overlays = FALSE
fire_delay = 30
fire_delay = 3 SECONDS
selfcharge = 1//shot costs 200 energy, has a max capacity of 1000 for 5 shots. self charge returns 25 energy every couple ticks, so about 1 shot charged every 12~ seconds
trigger_guard = TRIGGER_GUARD_ALLOW_ALL// variable-size trigger, get it? (abductors need this to be set so the gun is usable for them)
@@ -16,5 +16,5 @@
/obj/item/organ/heart/gland/chem/activate()
var/chem_to_add = pick(possible_reagents)
owner.reagents.add_reagent(chem_to_add, 2)
owner.adjustToxLoss(-5, forced = TRUE)
owner.adjust_tox_loss(-5, forced = TRUE)
..()
@@ -59,7 +59,7 @@
replace_limb(zone, limb)
return
if(owner.getToxLoss() > 40)
if(owner.get_tox_loss() > 40)
replace_blood()
return
var/tox_amount = 0
@@ -68,8 +68,8 @@
if(tox_amount > 10)
replace_blood()
return
if(owner.blood_volume < BLOOD_VOLUME_OKAY)
owner.blood_volume = BLOOD_VOLUME_NORMAL
if(owner.get_blood_volume() < BLOOD_VOLUME_OKAY)
owner.set_blood_volume(BLOOD_VOLUME_NORMAL)
to_chat(owner, span_warning("You feel your blood pulsing within you."))
return
@@ -194,13 +194,13 @@
var/keep_going = FALSE
owner.vomit(vomit_flags = (MOB_VOMIT_BLOOD | MOB_VOMIT_FORCE), lost_nutrition = 0, distance = 3)
owner.Stun(15)
owner.adjustToxLoss(-15, forced = TRUE)
owner.adjust_tox_loss(-15, forced = TRUE)
owner.blood_volume = min(BLOOD_VOLUME_NORMAL, owner.blood_volume + 20)
if(owner.blood_volume < BLOOD_VOLUME_NORMAL)
owner.adjust_blood_volume(20, maximum = BLOOD_VOLUME_NORMAL)
if(owner.get_blood_volume() < BLOOD_VOLUME_NORMAL)
keep_going = TRUE
if(owner.getToxLoss())
if(owner.get_tox_loss())
keep_going = TRUE
for(var/datum/reagent/toxin/R in owner.reagents.reagent_list)
owner.reagents.remove_reagent(R.type, 4)
@@ -26,7 +26,7 @@
if(2)
to_chat(target, span_warning("You hear an annoying buzz in your head."))
target.adjust_confusion(15 SECONDS)
target.adjustOrganLoss(ORGAN_SLOT_BRAIN, 10, 160)
target.adjust_organ_loss(ORGAN_SLOT_BRAIN, 10, 160)
if(3)
target.adjust_hallucinations(150 SECONDS)
@@ -28,8 +28,8 @@
/datum/reagent/blob/cryogenic_poison/on_mob_life(mob/living/carbon/exposed_mob, seconds_per_tick, times_fired)
. = ..()
var/need_mob_update
need_mob_update = exposed_mob.adjustBruteLoss(0.5 * REM * seconds_per_tick, updating_health = FALSE)
need_mob_update += exposed_mob.adjustFireLoss(0.5 * REM * seconds_per_tick, updating_health = FALSE)
need_mob_update += exposed_mob.adjustToxLoss(0.5 * REM * seconds_per_tick, updating_health = FALSE)
need_mob_update = exposed_mob.adjust_brute_loss(0.5 * REM * seconds_per_tick, updating_health = FALSE)
need_mob_update += exposed_mob.adjust_fire_loss(0.5 * REM * seconds_per_tick, updating_health = FALSE)
need_mob_update += exposed_mob.adjust_tox_loss(0.5 * REM * seconds_per_tick, updating_health = FALSE)
if(need_mob_update)
. = UPDATE_MOB_HEALTH
@@ -30,6 +30,6 @@
. = ..()
reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind)
exposed_mob.losebreath += round(0.2*reac_volume)
exposed_mob.adjustStaminaLoss(reac_volume * 1.2)
exposed_mob.adjust_stamina_loss(reac_volume * 1.2)
if(exposed_mob)
exposed_mob.apply_damage(0.6*reac_volume, OXY)
@@ -48,5 +48,5 @@
exposed_mob.adjust_wet_stacks(reac_volume / 10)
exposed_mob.apply_damage(0.4*reac_volume, BRUTE, wound_bonus=CANT_WOUND)
if(exposed_mob)
exposed_mob.adjustStaminaLoss(reac_volume, FALSE)
exposed_mob.adjust_stamina_loss(reac_volume, FALSE)
exposed_mob.apply_damage(0.4 * reac_volume, OXY)
@@ -42,4 +42,4 @@
/datum/reagent/blob/reactive_spines/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/eye/blob/overmind)
. = ..()
reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind)
exposed_mob.adjustBruteLoss(reac_volume)
exposed_mob.adjust_brute_loss(reac_volume)
@@ -28,7 +28,7 @@
/datum/reagent/blob/regenerative_materia/on_mob_life(mob/living/carbon/metabolizer, seconds_per_tick, times_fired)
. = ..()
if(metabolizer.adjustToxLoss(1 * REM * seconds_per_tick, updating_health = FALSE))
if(metabolizer.adjust_tox_loss(1 * REM * seconds_per_tick, updating_health = FALSE))
return UPDATE_MOB_HEALTH
/datum/reagent/blob/regenerative_materia/on_mob_metabolize(mob/living/metabolizer)
+1 -1
View File
@@ -198,7 +198,7 @@ GLOBAL_LIST_EMPTY(blob_nodes)
/// Create a blob spore and link it to us
/mob/eye/blob/proc/create_spore(turf/spore_turf, spore_type = /mob/living/basic/blob_minion/spore/minion)
var/mob/living/basic/blob_minion/spore/spore = new spore_type(spore_turf)
var/mob/living/basic/blob_minion/spore/spore = new spore_type(spore_turf, blob_borne = TRUE)
spore.AddComponent(/datum/component/blob_minion, src)
return spore
+2 -1
View File
@@ -216,7 +216,8 @@
factory.assign_blobbernaut(null)
return FALSE
var/mob/living/basic/blob_minion/blobbernaut/minion/blobber = new(get_turf(factory))
var/mob_type = /mob/living/basic/blob_minion/blobbernaut/minion
var/mob/living/basic/blob_minion/blobbernaut/minion/blobber = new mob_type(get_turf(factory), blob_borne = TRUE)
blobber.AddComponent(/datum/component/blob_minion, new_overmind = src, new_death_cloud_size = blobber.death_cloud_size)
factory.assign_blobbernaut(blobber)
blobber.assign_key(ghost.key, blobstrain)
@@ -15,7 +15,7 @@
// Get us standing up.
user.SetAllImmobility(0)
user.setStaminaLoss(0)
user.set_stamina_loss(0)
user.set_resting(FALSE, instant = TRUE)
user.reagents.add_reagent(/datum/reagent/medicine/changelingadrenaline, 4) //Tank 5 consecutive baton hits
@@ -297,7 +297,7 @@
fire_sound = 'sound/effects/splat.ogg'
force = 0
max_charges = 1
fire_delay = 1
fire_delay = 1 DECISECONDS
throwforce = 0 //Just to be on the safe side
throw_range = 0
throw_speed = 0
@@ -49,7 +49,7 @@
stacks++
user.adjustStaminaLoss(stacks * 1.3) //At first the changeling may regenerate stamina fast enough to nullify fatigue, but it will stack
user.adjust_stamina_loss(stacks * 1.3) //At first the changeling may regenerate stamina fast enough to nullify fatigue, but it will stack
if(stacks == 11) //Warning message that the stacks are getting too high
to_chat(user, span_warning("Our legs are really starting to hurt..."))
+13 -12
View File
@@ -761,7 +761,7 @@
if(!ishuman(target))
return
var/mob/living/carbon/human/human_bloodbag = target
if(HAS_TRAIT(human_bloodbag, TRAIT_NOBLOOD))
if(!CAN_HAVE_BLOOD(human_bloodbag))
human_bloodbag.balloon_alert(user, "no blood!")
return
if(human_bloodbag.stat == DEAD)
@@ -814,21 +814,22 @@
/// used to ensure the proc returns TRUE if we completely restore an undamaged persons blood
var/blood_donor = FALSE
if(human_bloodbag.blood_volume < BLOOD_VOLUME_SAFE)
var/blood_needed = BLOOD_VOLUME_SAFE - human_bloodbag.blood_volume
var/cached_blood_volume = human_bloodbag.get_blood_volume()
if(cached_blood_volume < BLOOD_VOLUME_SAFE)
var/blood_needed = BLOOD_VOLUME_SAFE - cached_blood_volume
/// how much blood we are capable of restoring, based on spell charges
var/blood_bank = USES_TO_BLOOD * uses
if(blood_bank < blood_needed)
human_bloodbag.blood_volume += blood_bank
human_bloodbag.adjust_blood_volume(blood_bank)
to_chat(user,span_danger("You use the last of your blood rites to restore what blood you could!"))
uses = 0
return TRUE
blood_donor = TRUE
human_bloodbag.blood_volume = BLOOD_VOLUME_SAFE
human_bloodbag.set_blood_volume(BLOOD_VOLUME_SAFE)
uses -= round(blood_needed / USES_TO_BLOOD)
to_chat(user,span_warning("Your blood rites have restored [human_bloodbag == user ? "your" : "[human_bloodbag.p_their()]"] blood to safe levels!"))
var/overall_damage = human_bloodbag.getBruteLoss() + human_bloodbag.getFireLoss() + human_bloodbag.getToxLoss() + human_bloodbag.getOxyLoss()
var/overall_damage = human_bloodbag.get_brute_loss() + human_bloodbag.get_fire_loss() + human_bloodbag.get_tox_loss() + human_bloodbag.get_oxy_loss()
if(overall_damage == 0)
if(blood_donor)
return TRUE
@@ -846,10 +847,10 @@
human_bloodbag.visible_message(span_warning("[human_bloodbag] is [uses == 0 ? "partially healed":"fully healed"] by [human_bloodbag == user ? "[human_bloodbag.p_their()]":"[human_bloodbag]'s"] blood magic!"))
var/need_mob_update = FALSE
need_mob_update += human_bloodbag.adjustOxyLoss(damage_healed * (human_bloodbag.getOxyLoss() / overall_damage), updating_health = FALSE)
need_mob_update += human_bloodbag.adjustToxLoss(damage_healed * (human_bloodbag.getToxLoss() / overall_damage), updating_health = FALSE)
need_mob_update += human_bloodbag.adjustFireLoss(damage_healed * (human_bloodbag.getFireLoss() / overall_damage), updating_health = FALSE)
need_mob_update += human_bloodbag.adjustBruteLoss(damage_healed * (human_bloodbag.getBruteLoss() / overall_damage), updating_health = FALSE)
need_mob_update += human_bloodbag.adjust_oxy_loss(damage_healed * (human_bloodbag.get_oxy_loss() / overall_damage), updating_health = FALSE)
need_mob_update += human_bloodbag.adjust_tox_loss(damage_healed * (human_bloodbag.get_tox_loss() / overall_damage), updating_health = FALSE)
need_mob_update += human_bloodbag.adjust_fire_loss(damage_healed * (human_bloodbag.get_fire_loss() / overall_damage), updating_health = FALSE)
need_mob_update += human_bloodbag.adjust_brute_loss(damage_healed * (human_bloodbag.get_brute_loss() / overall_damage), updating_health = FALSE)
if(need_mob_update)
human_bloodbag.updatehealth()
playsound(get_turf(human_bloodbag), 'sound/effects/magic/staff_healing.ogg', 25)
@@ -867,10 +868,10 @@
if(human_bloodbag.has_status_effect(/datum/status_effect/speech/slurring/cult))
to_chat(user,span_danger("[human_bloodbag.p_Their()] blood has been tainted by an even stronger form of blood magic, it's no use to us like this!"))
return FALSE
if(human_bloodbag.blood_volume <= BLOOD_VOLUME_SAFE)
if(human_bloodbag.get_blood_volume() <= BLOOD_VOLUME_SAFE)
to_chat(user,span_warning("[human_bloodbag.p_Theyre()] missing too much blood - you cannot drain [human_bloodbag.p_them()] further!"))
return FALSE
human_bloodbag.blood_volume -= BLOOD_DRAIN_GAIN * USES_TO_BLOOD
human_bloodbag.adjust_blood_volume(-BLOOD_DRAIN_GAIN * USES_TO_BLOOD)
uses += BLOOD_DRAIN_GAIN
user.Beam(human_bloodbag, icon_state="drainbeam", time = 1 SECONDS)
playsound(get_turf(human_bloodbag), 'sound/effects/magic/enter_blood.ogg', 50)
+39 -40
View File
@@ -143,7 +143,7 @@ Striking a noncultist, however, will tear their flesh."}
var/mob/living/carbon/human/miscreant = user
miscreant.apply_damage(rand(force/2, force), BRUTE, pick(GLOB.arm_zones))
else
user.adjustBruteLoss(rand(force/2,force))
user.adjust_brute_loss(rand(force/2,force))
return
..()
@@ -686,7 +686,7 @@ Striking a noncultist, however, will tear their flesh."}
. = ..()
if(!IS_CULTIST(user) && isliving(user))
var/mob/living/living_user = user
living_user.adjustOrganLoss(ORGAN_SLOT_BRAIN, 5)
living_user.adjust_organ_loss(ORGAN_SLOT_BRAIN, 5)
. += span_danger("It hurts just to look at it. Better keep away.")
else
. += span_cult("It can be used to create a gateway to Nar'Sie's domain, which will summon weak, sentient constructs over time.")
@@ -1069,7 +1069,7 @@ Striking a noncultist, however, will tear their flesh."}
var/mob/living/L = target
if(L.density)
L.Paralyze(20)
L.adjustBruteLoss(45)
L.adjust_brute_loss(45)
playsound(L, 'sound/effects/hallucinations/wail.ogg', 50, TRUE)
L.emote("scream")
user.Beam(temp_target, icon_state="blood_beam", time = 7, beam_type = /obj/effect/ebeam/blood)
@@ -1098,46 +1098,45 @@ Striking a noncultist, however, will tear their flesh."}
var/illusions = 2
/obj/item/shield/mirror/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK, damage_type = BRUTE)
if(IS_CULTIST(owner))
if(attack_type == PROJECTILE_ATTACK)
if(damage_type == BRUTE || damage_type == BURN)
if(damage >= 30)
var/turf/T = get_turf(owner)
T.visible_message(span_warning("The sheer force from [hitby] shatters the mirror shield!"))
new /obj/effect/temp_visual/cult/sparks(T)
playsound(T, 'sound/effects/glass/glassbr3.ogg', 100)
owner.Paralyze(25)
qdel(src)
return FALSE
var/obj/projectile/projectile = hitby
if(projectile.reflectable)
return FALSE //To avoid reflection chance double-dipping with block chance
. = ..()
if(.)
if(illusions > 0)
illusions--
addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/item/shield/mirror, readd)), 45 SECONDS)
if(prob(60))
var/mob/living/simple_animal/hostile/illusion/M = new(owner.loc)
M.faction = list(FACTION_CULT)
M.Copy_Parent(owner, 70, 10, 5)
M.move_to_delay = owner.cached_multiplicative_slowdown
else
var/mob/living/simple_animal/hostile/illusion/escape/E = new(owner.loc)
E.Copy_Parent(owner, 70, 10)
E.GiveTarget(owner)
E.Goto(owner, owner.cached_multiplicative_slowdown, E.minimum_distance)
return TRUE
else
if(!IS_CULTIST(owner))
if(prob(50))
var/mob/living/simple_animal/hostile/illusion/H = new(owner.loc)
H.Copy_Parent(owner, 100, 20, 5)
H.faction = list(FACTION_CULT)
H.GiveTarget(owner)
H.move_to_delay = owner.cached_multiplicative_slowdown
to_chat(owner, span_danger("<b>[src] betrays you!</b>"))
var/mob/living/basic/illusion/bizarro = new(owner.loc)
bizarro.full_setup(owner, target_mob = owner, faction = list(FACTION_CULT), life = 10 SECONDS, damage = 20, replicate = 5)
to_chat(owner, span_bolddanger("You're betrayed by \"yourself\"!"))
return FALSE
if(attack_type == PROJECTILE_ATTACK)
if(damage_type == BRUTE || damage_type == BURN)
if(damage >= 30)
var/turf/T = get_turf(owner)
T.visible_message(span_warning("The sheer force from [hitby] shatters the mirror shield!"))
new /obj/effect/temp_visual/cult/sparks(T)
playsound(T, 'sound/effects/glass/glassbr3.ogg', 100)
owner.Paralyze(25)
qdel(src)
return FALSE
var/obj/projectile/projectile = hitby
if(projectile.reflectable)
return FALSE //To avoid reflection chance double-dipping with block chance
. = ..()
if(!.)
return FALSE
if(illusions > 0)
illusions--
addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/item/shield/mirror, readd)), 45 SECONDS)
if(prob(60)) // make a potentially slower, but replicable apparation
var/mob/living/basic/illusion/apparation = new(owner.loc)
apparation.full_setup(owner, target_mob = null, faction = list(FACTION_CULT), life = 7 SECONDS, damage = 10, replicate = 5)
apparation.cached_multiplicative_slowdown = owner.cached_multiplicative_slowdown
else // normal apparation designed to escape
var/mob/living/basic/illusion/escape/decoy = new(owner.loc)
decoy.full_setup(owner, target_mob = owner, faction = list(FACTION_CULT), life = 7 SECONDS, damage = 10) // Damage for retaliation
return TRUE
/obj/item/shield/mirror/proc/readd()
illusions++
if(illusions == initial(illusions) && isliving(loc))
+6 -6
View File
@@ -289,11 +289,11 @@ structure_check() searches for nearby cultist structures required for the invoca
to_chat(invoker, span_warning("Something is shielding [convertee]'s mind!"))
return FALSE
var/brutedamage = convertee.getBruteLoss()
var/burndamage = convertee.getFireLoss()
var/brutedamage = convertee.get_brute_loss()
var/burndamage = convertee.get_fire_loss()
if(brutedamage || burndamage)
convertee.adjustBruteLoss(-(brutedamage * 0.75))
convertee.adjustFireLoss(-(burndamage * 0.75))
convertee.adjust_brute_loss(-(brutedamage * 0.75))
convertee.adjust_fire_loss(-(burndamage * 0.75))
convertee.visible_message(
span_warning("[convertee] writhes in pain [(brutedamage || burndamage) \
@@ -952,7 +952,7 @@ GLOBAL_VAR_INIT(narsie_summon_count, 0)
color = "#FC9B54"
set_light(6, 1, color)
for(var/mob/living/target in viewers(T))
if(!IS_CULTIST(target) && target.blood_volume)
if(!IS_CULTIST(target) && CAN_HAVE_BLOOD(target))
if(target.can_block_magic(charge_cost = 0))
continue
to_chat(target, span_cult_large("Your blood boils in your veins!"))
@@ -977,7 +977,7 @@ GLOBAL_VAR_INIT(narsie_summon_count, 0)
/obj/effect/rune/blood_boil/proc/do_area_burn(turf/T, multiplier)
set_light(6, 1, color)
for(var/mob/living/target in viewers(T))
if(!IS_CULTIST(target) && target.blood_volume)
if(!IS_CULTIST(target) && target.get_blood_volume())
if(target.can_block_magic(charge_cost = 0))
continue
target.take_overall_damage(tick_damage*multiplier, tick_damage*multiplier)
@@ -161,8 +161,8 @@
return
. += span_userdanger("Your mind burns as you stare at the tear!")
user.adjustOrganLoss(ORGAN_SLOT_BRAIN, 10, 190)
//user.add_mood_event("gates_of_mansus", /datum/mood_event/gates_of_mansus) // BUBBER EDIT - Hugboxes
user.adjust_organ_loss(ORGAN_SLOT_BRAIN, 10, 190)
user.add_mood_event("gates_of_mansus", /datum/mood_event/gates_of_mansus)
/obj/effect/heretic_influence
name = "reality smash"
@@ -123,7 +123,7 @@
// Gives them some nutrition
examiner.adjust_nutrition(50)
to_chat(examiner, span_warning("You feel a searing pain in your stomach!"))
examiner.adjustOrganLoss(ORGAN_SLOT_STOMACH, 5)
examiner.adjust_organ_loss(ORGAN_SLOT_STOMACH, 5)
to_chat(examiner, span_notice("You feel less hungry."))
to_chat(examiner, span_warning("You should stockpile raw meat and organs, before you get hungry again."))
examiner.add_mood_event("respite_eldritch_hunger", /datum/mood_event/eldritch_painting/desire_examine)
@@ -94,7 +94,7 @@
return
var/mob/living/carbon/human/human_user = user
to_chat(human_user, span_userdanger("Your mind burns as you stare at the pages!"))
human_user.adjustOrganLoss(ORGAN_SLOT_BRAIN, 10, 190)
human_user.adjust_organ_loss(ORGAN_SLOT_BRAIN, 10, 190)
human_user.add_mood_event("gates_of_mansus", /datum/mood_event/gates_of_mansus)
/obj/item/codex_cicatrix/morbus/examine_more(mob/user)
@@ -637,7 +637,7 @@
return COMPONENT_IGNORE_CHANGE
/obj/item/clothing/suit/hooded/cultrobes/eldritch/moon/proc/handle_damage(mob/living/user, damage)
user.adjustOrganLoss(ORGAN_SLOT_BRAIN, damage * damage_modifier)
user.adjust_organ_loss(ORGAN_SLOT_BRAIN, damage * damage_modifier)
check_braindeath(user)
/// Gives the health HUD to the wearer
@@ -726,7 +726,7 @@
if(!istype(wearer) || wearer.wear_suit != src || wearer.stat == DEAD)
return ..()
if(!IS_HERETIC_OR_MONSTER(wearer))
wearer.adjustOrganLoss(ORGAN_SLOT_BRAIN, 20)
wearer.adjust_organ_loss(ORGAN_SLOT_BRAIN, 20)
var/brain_damage = wearer.get_organ_loss(ORGAN_SLOT_BRAIN)
var/emote_rng = 0
var/list/emote_list = list()
@@ -762,7 +762,7 @@
return
braindead = TRUE
wearer.setOrganLoss(ORGAN_SLOT_BRAIN, INFINITY)
wearer.set_organ_loss(ORGAN_SLOT_BRAIN, INFINITY)
playsound(wearer, 'sound/effects/pope_entry.ogg', 50)
to_chat(wearer, span_bold(span_hypnophrase("A terrible fate has befallen you.")))
addtimer(CALLBACK(src, PROC_REF(kill_wearer), wearer), 5 SECONDS)
@@ -279,7 +279,7 @@
else if(prob(15))
to_chat(user, span_big(span_hypnophrase("LW'NAFH'NAHOR UH'ENAH'YMG EPGOKA AH NAFL MGEMPGAH'EHYE")))
to_chat(user, span_danger("Horrible, unintelligible utterances flood your mind!"))
user.adjustOrganLoss(ORGAN_SLOT_BRAIN, 15) // This can kill you if you ignore it
user.adjust_organ_loss(ORGAN_SLOT_BRAIN, 15) // This can kill you if you ignore it
return TRUE
/obj/item/melee/sickly_blade/cursed/equipped(mob/user, slot)
@@ -72,7 +72,7 @@
. = ..()
if(!ishuman(exposed_mob))
if(issilicon(exposed_mob) || ismecha(exposed_mob) || isbot(exposed_mob))
exposed_mob.adjustBruteLoss(500)
exposed_mob.adjust_brute_loss(500)
return
if(IS_HERETIC(exposed_mob))
return
@@ -82,8 +82,8 @@
return
to_chat(user, span_danger("[src] explodes into a shower of gore and blood, drenching your arm. You can feel the blood seeping into your skin. You inmediately feel better, but soon, the feeling turns hollow as your veins itch."))
new /obj/effect/gibspawner/generic(get_turf(src))
var/heal_amt = user.adjustBruteLoss(-50)
user.adjustFireLoss( -(50 - abs(heal_amt)) ) // no double dipping
var/heal_amt = user.adjust_brute_loss(-50)
user.adjust_fire_loss( -(50 - abs(heal_amt)) ) // no double dipping
// I want it to poison the user but I also think it'd be neat if they got their juice as well. But that cancels most of the damage out. So I dunno.
user.reagents?.add_reagent(/datum/reagent/fuel/unholywater, rand(6, 10))
@@ -232,7 +232,7 @@
var/mob/living/living_target = target
if(!ishuman(target))
living_target.adjustFireLoss(30)
living_target.adjust_fire_loss(30)
return TRUE
var/mob/living/carbon/human/human_target = target
if(IS_HERETIC_OR_MONSTER(human_target))
@@ -240,7 +240,7 @@
return FALSE
if(human_target.has_status_effect(/datum/status_effect/moon_slept) || human_target.has_status_effect(/datum/status_effect/moon_converted))
human_target.balloon_alert(living_user, "causing damage!")
human_target.adjustOrganLoss(ORGAN_SLOT_BRAIN, 25)
human_target.adjust_organ_loss(ORGAN_SLOT_BRAIN, 25)
return FALSE
if(human_target.can_block_magic(MAGIC_RESISTANCE_MOON))
return FALSE
@@ -62,7 +62,7 @@
if(ishuman(user))
var/mob/living/carbon/human/human_user = user
to_chat(human_user, span_userdanger("Your mind burns as you stare deep into the book, a headache setting in like your brain is on fire!"))
human_user.adjustOrganLoss(ORGAN_SLOT_BRAIN, 30, 190)
human_user.adjust_organ_loss(ORGAN_SLOT_BRAIN, 30, 190)
human_user.add_mood_event("gates_of_mansus", /datum/mood_event/gates_of_mansus)
human_user.dropItemToGround(src)
return ITEM_INTERACT_BLOCKING
@@ -68,9 +68,9 @@
if(SPT_PROB(40, seconds_per_tick))
human_in_range.set_jitter_if_lower(10 SECONDS)
if(human_in_range.getStaminaLoss() <= 85 && SPT_PROB(30, seconds_per_tick))
if(human_in_range.get_stamina_loss() <= 85 && SPT_PROB(30, seconds_per_tick))
human_in_range.emote(pick("giggle", "laugh"))
human_in_range.adjustStaminaLoss(10)
human_in_range.adjust_stamina_loss(10)
if(SPT_PROB(25, seconds_per_tick))
human_in_range.set_dizzy_if_lower(10 SECONDS)
@@ -65,7 +65,7 @@
return
to_chat(wearer, span_warning("Laughter echoes in your mind...."))
wearer.adjustOrganLoss(ORGAN_SLOT_BRAIN, 40)
wearer.adjust_organ_loss(ORGAN_SLOT_BRAIN, 40)
wearer.dropItemToGround(src, TRUE)
wearer.gain_trauma(pick(brain_traumas), TRAUMA_RESILIENCE_MAGIC)
@@ -74,7 +74,7 @@
if(IS_HERETIC(user))
return
user.adjustOrganLoss(ORGAN_SLOT_BRAIN, 10, 160)
user.adjust_organ_loss(ORGAN_SLOT_BRAIN, 10, 160)
user.adjust_temp_blindness(5 SECONDS)
. += span_notice("It. It looked. IT WRAPS ITSELF AROUND ME.")
@@ -73,7 +73,7 @@
return
to_chat(target, span_danger("A bright green light burns your eyes horrifically!"))
target.adjustOrganLoss(ORGAN_SLOT_EYES, 15)
target.adjust_organ_loss(ORGAN_SLOT_EYES, 15)
target.set_eye_blur_if_lower(20 SECONDS)
/datum/heretic_knowledge/limited_amount/starting/base_ash/trigger_mark(mob/living/source, mob/living/target)
@@ -161,7 +161,7 @@
var/mob/living/second_target_resolved = second_target?.resolve()
var/mob/living/third_target_resolved = third_target?.resolve()
var/need_mob_update = FALSE
need_mob_update += target.adjustFireLoss(5, updating_health = FALSE)
need_mob_update += target.adjust_fire_loss(5, updating_health = FALSE)
if(need_mob_update)
target.updatehealth()
if(target == second_target_resolved || target == third_target_resolved)
@@ -173,14 +173,14 @@
new /obj/effect/temp_visual/cosmic_explosion(get_turf(second_target_resolved))
playsound(get_turf(second_target_resolved), 'sound/effects/magic/cosmic_energy.ogg', 25, FALSE)
need_mob_update = FALSE
need_mob_update += second_target_resolved.adjustFireLoss(14, updating_health = FALSE)
need_mob_update += second_target_resolved.adjust_fire_loss(14, updating_health = FALSE)
if(need_mob_update)
second_target_resolved.updatehealth()
if(third_target_resolved)
new /obj/effect/temp_visual/cosmic_domain(get_turf(third_target_resolved))
playsound(get_turf(third_target_resolved), 'sound/effects/magic/cosmic_energy.ogg', 50, FALSE)
need_mob_update = FALSE
need_mob_update += third_target_resolved.adjustFireLoss(28, updating_health = FALSE)
need_mob_update += third_target_resolved.adjust_fire_loss(28, updating_health = FALSE)
if(need_mob_update)
third_target_resolved.updatehealth()
if(combo_counter == 3)
@@ -164,9 +164,9 @@
target.emote(pick("giggle", "laugh"))
target.mob_mood?.adjust_sanity(-10)
if(target.stat == CONSCIOUS && target.mob_mood?.sanity >= SANITY_NEUTRAL)
target.adjustOrganLoss(ORGAN_SLOT_BRAIN, 10)
target.adjust_organ_loss(ORGAN_SLOT_BRAIN, 10)
return
target.adjustOrganLoss(ORGAN_SLOT_BRAIN, 25)
target.adjust_organ_loss(ORGAN_SLOT_BRAIN, 25)
/datum/heretic_knowledge/spell/moon_ringleader
name = "Ringleaders Rise"
@@ -302,12 +302,13 @@
var/need_mob_update = FALSE
var/base_heal_amt = 1 * DELTA_WORLD_TIME(SSmobs)
need_mob_update += source.adjustBruteLoss(-base_heal_amt, updating_health = FALSE)
need_mob_update += source.adjustFireLoss(-base_heal_amt, updating_health = FALSE)
need_mob_update += source.adjustToxLoss(-base_heal_amt, updating_health = FALSE, forced = TRUE)
need_mob_update += source.adjustOxyLoss(-base_heal_amt, updating_health = FALSE)
need_mob_update += source.adjustStaminaLoss(-base_heal_amt * 4, updating_stamina = FALSE)
if(source.blood_volume < BLOOD_VOLUME_NORMAL)
source.blood_volume += base_heal_amt
need_mob_update += source.adjust_brute_loss(-base_heal_amt, updating_health = FALSE)
need_mob_update += source.adjust_fire_loss(-base_heal_amt, updating_health = FALSE)
need_mob_update += source.adjust_tox_loss(-base_heal_amt, updating_health = FALSE, forced = TRUE)
need_mob_update += source.adjust_oxy_loss(-base_heal_amt, updating_health = FALSE)
need_mob_update += source.adjust_stamina_loss(-base_heal_amt * 4, updating_stamina = FALSE)
source.adjust_blood_volume(base_heal_amt, maximum = BLOOD_VOLUME_NORMAL)
if(need_mob_update)
source.updatehealth()
@@ -23,8 +23,8 @@
/datum/status_effect/unholy_determination/on_apply()
owner.add_traits(list(TRAIT_COAGULATING, TRAIT_NOCRITDAMAGE, TRAIT_NOSOFTCRIT), TRAIT_STATUS_EFFECT(id))
if(owner.blood_volume < BLOOD_VOLUME_OKAY)
owner.blood_volume = BLOOD_VOLUME_OKAY
if(owner.get_blood_volume() < BLOOD_VOLUME_OKAY)
owner.set_blood_volume(BLOOD_VOLUME_OKAY)
return TRUE
/datum/status_effect/unholy_determination/on_remove()
@@ -66,10 +66,10 @@
owner.losebreath = max(owner.losebreath - (0.5 * seconds_between_ticks), 0)
var/damage_healed = 0
damage_healed += owner.adjustToxLoss(-amount, updating_health = FALSE, forced = TRUE)
damage_healed += owner.adjustOxyLoss(-amount, updating_health = FALSE)
damage_healed += owner.adjustBruteLoss(-amount, updating_health = FALSE)
damage_healed += owner.adjustFireLoss(-amount, updating_health = FALSE)
damage_healed += owner.adjust_tox_loss(-amount, updating_health = FALSE, forced = TRUE)
damage_healed += owner.adjust_oxy_loss(-amount, updating_health = FALSE)
damage_healed += owner.adjust_brute_loss(-amount, updating_health = FALSE)
damage_healed += owner.adjust_fire_loss(-amount, updating_health = FALSE)
if(damage_healed > 0)
owner.updatehealth()
@@ -94,11 +94,10 @@
* Slow and stop any blood loss the owner's experiencing.
*/
/datum/status_effect/unholy_determination/proc/adjust_bleed_wounds(seconds_between_ticks)
if(!iscarbon(owner) || !owner.blood_volume)
if(!iscarbon(owner) || !CAN_HAVE_BLOOD(owner))
return
if(owner.blood_volume < BLOOD_VOLUME_NORMAL)
owner.blood_volume = owner.blood_volume + (2 * seconds_between_ticks)
owner.adjust_blood_volume(2 * seconds_between_ticks, maximum = BLOOD_VOLUME_NORMAL)
var/mob/living/carbon/carbon_owner = owner
var/datum/wound/bloodiest_wound
@@ -352,7 +352,7 @@
sac_target.equip_to_slot_or_del(new /obj/item/restraints/handcuffs/cult, ITEM_SLOT_HANDCUFFED, indirect_action = TRUE)
sac_target.dropItemToGround(sac_target.legcuffed, TRUE)
sac_target.adjustOrganLoss(ORGAN_SLOT_BRAIN, 85, 150)
sac_target.adjust_organ_loss(ORGAN_SLOT_BRAIN, 85, 150)
sac_target.do_jitter_animation()
log_combat(heretic_mind.current, sac_target, "sacrificed")
@@ -361,7 +361,7 @@
// If our target is dead, try to revive them
// and if we fail to revive them, don't proceede the chain
sac_target.adjustOxyLoss(-100, FALSE)
sac_target.adjust_oxy_loss(-100, FALSE)
if(!sac_target.heal_and_revive(50, span_danger("[sac_target]'s heart begins to beat with an unholy force as they return from death!")))
return
@@ -406,7 +406,7 @@
// If our target died during the (short) wait timer,
// and we fail to revive them (using a lower number than before),
// just disembowel them and stop the chain
sac_target.adjustOxyLoss(-100, FALSE)
sac_target.adjust_oxy_loss(-100, FALSE)
if(!sac_target.heal_and_revive(60, span_danger("[sac_target]'s heart begins to beat with an unholy force as they return from death!")))
disembowel_target(sac_target)
return
@@ -597,7 +597,7 @@
sac_target.set_eye_blur_if_lower(100 SECONDS)
sac_target.set_dizzy_if_lower(1 MINUTES)
sac_target.AdjustKnockdown(80)
sac_target.adjustStaminaLoss(120)
sac_target.adjust_stamina_loss(120)
// Glad i'm outta there, though!
sac_target.add_mood_event("shadow_realm_survived", /datum/mood_event/shadow_realm_live)
@@ -38,28 +38,6 @@ GLOBAL_LIST_EMPTY(heretic_sacrifice_landmarks)
name = "lock heretic sacrifice landmark"
for_heretic_path = PATH_LOCK
// A fluff signpost object that doesn't teleport you somewhere when you touch it.
/obj/structure/no_effect_signpost
name = "signpost"
desc = "Won't somebody give me a sign?"
icon = 'icons/obj/fluff/general.dmi'
icon_state = "signpost"
anchored = TRUE
density = TRUE
/obj/structure/no_effect_signpost/void
name = "signpost at the edge of the universe"
desc = "A direction in the directionless void."
density = FALSE
/// Brightness of the signpost.
var/range = 2
/// Light power of the signpost.
var/power = 0.8
/obj/structure/no_effect_signpost/void/Initialize(mapload)
. = ..()
set_light(range, power)
// Some VERY dim lights, used for the void sacrifice realm.
/obj/machinery/light/very_dim
nightshift_allowed = FALSE
@@ -87,7 +65,7 @@ GLOBAL_LIST_EMPTY(heretic_sacrifice_landmarks)
default_gravity = STANDARD_GRAVITY
ambience_index = AMBIENCE_SPOOKY
sound_environment = SOUND_ENVIRONMENT_CAVE
area_flags = UNIQUE_AREA | NOTELEPORT | HIDDEN_AREA | BLOCK_SUICIDE | NO_BOH
area_flags = NOTELEPORT | HIDDEN_AREA | BLOCK_SUICIDE | NO_BOH
/area/centcom/heretic_sacrifice/Initialize(mapload)
if(!ambientsounds)
@@ -15,10 +15,9 @@
/datum/heretic_knowledge/unfathomable_curio
name = "Unfathomable Curio"
desc = "Allows you to transmute 3 rods, lungs and any belt into an Unfathomable Curio, \
a belt that can hold blades and items for rituals. Whilst worn it will also \
veil you, allowing you to take 5 hits without suffering damage, this veil will recharge very slowly \
outside of combat."
desc = "Allows you to transmute 3 rods, lungs, and any belt into an Unfathomable Curio - \
a belt that can hold blades and items for rituals. Whilst worn it will veil you, \
blocking one blow of incoming damage, at the cost of the veil. The veil will recharge itself out of combat."
gain_text = "The mansus holds many a curio, some are not meant for the mortal eye."
required_atoms = list(
@@ -27,7 +27,7 @@
if(IS_HERETIC_OR_MONSTER(cast_on))
return FALSE
if(!cast_on.blood_volume)
if(!CAN_HAVE_BLOOD(cast_on))
return FALSE
if(cast_on.can_block_magic(antimagic_flags))
@@ -154,7 +154,7 @@
if((L in hit_list) || L == source)
continue
hit_list += L
L.adjustFireLoss(20)
L.adjust_fire_loss(20)
to_chat(L, span_userdanger("You're hit by [source]'s eldritch flames!"))
new /obj/effect/hotspot(T)
@@ -60,7 +60,7 @@
return ..()
empowered_cast = TRUE
human_owner.setStaminaLoss(0)
human_owner.set_stamina_loss(0)
human_owner.SetAllImmobility(0)
var/mob/living/carbon/carbon_owner = owner
carbon_owner.uncuff()
@@ -36,7 +36,7 @@
)
continue
if(!victim.blood_volume)
if(!CAN_HAVE_BLOOD(victim))
continue
victim.visible_message(
@@ -40,15 +40,10 @@
)
var/mob/living/living_owner = owner
cast_on.adjustBruteLoss(20)
living_owner.adjustBruteLoss(-20)
cast_on.adjust_brute_loss(20)
living_owner.adjust_brute_loss(-20)
if(!cast_on.blood_volume || !living_owner.blood_volume)
return TRUE
cast_on.blood_volume -= 20
if(living_owner.blood_volume < BLOOD_VOLUME_MAXIMUM) // we dont want to explode from casting
living_owner.blood_volume += 20
cast_on.transfer_blood_to(living_owner, 20, ignore_low_blood = TRUE, ignore_incompatibility = TRUE, transfer_viruses = FALSE)
if(!iscarbon(cast_on) || !iscarbon(owner))
return TRUE
@@ -53,12 +53,9 @@
)
victim.apply_damage(15, BRUTE, wound_bonus = CANT_WOUND)
living_owner.adjustBruteLoss(-15)
living_owner.adjust_brute_loss(-15)
if(victim.blood_volume)
victim.blood_volume -= 15
if(living_owner.blood_volume && living_owner.blood_volume < (BLOOD_VOLUME_MAXIMUM - 50))
living_owner.blood_volume += 15
victim.transfer_blood_to(living_owner, 15, ignore_low_blood = TRUE, ignore_incompatibility = TRUE, transfer_viruses = FALSE)
new /obj/effect/temp_visual/cleave(get_turf(victim))
@@ -178,8 +178,8 @@
return TRUE
/datum/status_effect/fire_blasted/tick(seconds_between_ticks)
owner.adjustFireLoss(tick_damage * seconds_between_ticks)
owner.adjustStaminaLoss(2 * tick_damage * seconds_between_ticks)
owner.adjust_fire_loss(tick_damage * seconds_between_ticks)
owner.adjust_stamina_loss(2 * tick_damage * seconds_between_ticks)
// The beam fireblast spits out, causes people to walk through it to be on fire
/obj/effect/ebeam/reacting/fire
@@ -65,7 +65,7 @@
carbon_hit.adjust_timed_status_effect(4 SECONDS, /datum/status_effect/speech/slurring/heretic)
carbon_hit.AdjustKnockdown(5 SECONDS, daze_amount = 3 SECONDS)
carbon_hit.adjustStaminaLoss(80)
carbon_hit.adjust_stamina_loss(80)
return TRUE
@@ -127,7 +127,7 @@
return FIRELOSS
if(prob(70))
carbon_user.adjustFireLoss(20)
carbon_user.adjust_fire_loss(20)
playsound(carbon_user, 'sound/effects/wounds/sizzle1.ogg', 70, vary = TRUE)
if(prob(50))
carbon_user.emote("scream")
@@ -34,13 +34,13 @@
return FALSE
var/mob/living/living_owner = owner
living_owner.adjustOrganLoss(ORGAN_SLOT_BRAIN, 20, 140)
living_owner.adjust_organ_loss(ORGAN_SLOT_BRAIN, 20, 140)
cast_on.adjust_confusion(10 SECONDS)
cast_on.adjustOxyLoss(30)
cast_on.adjust_oxy_loss(30)
cast_on.cause_hallucination(get_random_valid_hallucination_subtype(/datum/hallucination/body), "Mind gate, cast by [owner]")
cast_on.cause_hallucination(/datum/hallucination/delusion/preset/heretic/gate, "Caused by mindgate")
cast_on.adjustOrganLoss(ORGAN_SLOT_BRAIN, 30)
cast_on.adjust_organ_loss(ORGAN_SLOT_BRAIN, 30)
/// The duration of these effects are based on sanity, mainly for flavor but also to make it a weaker alpha strike
var/maximum_duration = 15 SECONDS
@@ -42,12 +42,18 @@
return stuff
/datum/action/cooldown/spell/aoe/moon_ringleader/cast_on_thing_in_aoe(mob/living/carbon/victim, mob/living/caster)
var/mob/living/simple_animal/hostile/illusion/fake_clone = new(pick(RANGE_TURFS(2, victim)))
fake_clone.faction = caster.faction.Copy()
fake_clone.Copy_Parent(caster, 30 SECONDS, caster.health, 1, 0, "shove_mode")
fake_clone.GiveTarget(victim)
fake_clone.AddElement(/datum/element/relay_attackers)
RegisterSignal(fake_clone, COMSIG_ATOM_WAS_ATTACKED, PROC_REF(on_attacked))
var/mob/living/basic/illusion/shover/shove_clone = new(pick(RANGE_TURFS(2, victim)))
shove_clone.full_setup(
caster,
target_mob = victim,
faction = caster.faction,
life = 30 SECONDS,
hp = caster.health,
damage = 1,
replicate = 0,
)
shove_clone.AddElement(/datum/element/relay_attackers)
RegisterSignal(shove_clone, COMSIG_ATOM_WAS_ATTACKED, PROC_REF(on_attacked))
/// Used by Ringleaders Rise, illusions created by this spell will explode when they are interacted with
/datum/action/cooldown/spell/aoe/moon_ringleader/proc/on_attacked(mob/victim, atom/attacker)
@@ -66,7 +72,7 @@
continue
//If our moon heretic has their level 3 passive, we channel the amulet effect
var/mob/living/simple_animal/hostile/illusion/fake_clone = victim
var/mob/living/basic/illusion/fake_clone = victim
var/mob/living/living_owner = fake_clone.parent_mob_ref.resolve()
if(!living_owner)
continue
@@ -76,7 +82,7 @@
mob.AdjustStun(1 SECONDS)
mob.AdjustKnockdown(1 SECONDS)
mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 50, 150)
mob.adjust_organ_loss(ORGAN_SLOT_BRAIN, 50, 150)
mob.mob_mood?.adjust_sanity(-50)
qdel(victim)
@@ -58,11 +58,11 @@
// Heal the caster for every victim damaged
var/need_mob_update = FALSE
need_mob_update += caster.adjustBruteLoss(-10, updating_health = FALSE)
need_mob_update += caster.adjustFireLoss(-10, updating_health = FALSE)
need_mob_update += caster.adjustToxLoss(-10, updating_health = FALSE, forced = TRUE)
need_mob_update += caster.adjustOxyLoss(-10, updating_health = FALSE)
need_mob_update += caster.adjustStaminaLoss(-10, updating_stamina = FALSE)
need_mob_update += caster.adjust_brute_loss(-10, updating_health = FALSE)
need_mob_update += caster.adjust_fire_loss(-10, updating_health = FALSE)
need_mob_update += caster.adjust_tox_loss(-10, updating_health = FALSE, forced = TRUE)
need_mob_update += caster.adjust_oxy_loss(-10, updating_health = FALSE)
need_mob_update += caster.adjust_stamina_loss(-10, updating_stamina = FALSE)
if(need_mob_update)
caster.updatehealth()
@@ -73,7 +73,7 @@
owner.remove_filter(id)
/datum/status_effect/realignment/tick(seconds_between_ticks)
owner.adjustStaminaLoss(-10)
owner.adjust_stamina_loss(-10)
owner.AdjustAllImmobility(-1 SECONDS)
/atom/movable/screen/alert/status_effect/realignment
@@ -100,8 +100,8 @@
return
var/mob/living/carbon/carbie = owner
carbie.adjustBruteLoss(-0.5 * seconds_between_ticks, updating_health = FALSE)
carbie.adjustFireLoss(-0.5 * seconds_between_ticks, updating_health = FALSE)
carbie.adjust_brute_loss(-0.5 * seconds_between_ticks, updating_health = FALSE)
carbie.adjust_fire_loss(-0.5 * seconds_between_ticks, updating_health = FALSE)
for(var/BP in carbie.bodyparts)
var/obj/item/bodypart/part = BP
for(var/W in part.wounds)
@@ -117,10 +117,10 @@
heal_amt = 6
var/datum/wound_pregen_data/pregen_data = GLOB.all_wound_pregen_data[wound.type]
if (pregen_data.wounding_types_valid(WOUND_BURN))
carbie.adjustFireLoss(-heal_amt)
carbie.adjust_fire_loss(-heal_amt)
else
carbie.adjustBruteLoss(-heal_amt)
carbie.blood_volume += carbie.blood_volume >= BLOOD_VOLUME_NORMAL ? 0 : heal_amt*3
carbie.adjust_brute_loss(-heal_amt)
carbie.adjust_blood_volume(heal_amt * 3, maximum = BLOOD_VOLUME_NORMAL)
/atom/movable/screen/alert/status_effect/crucible_soul
@@ -80,25 +80,25 @@
human_owner.set_timed_status_effect(100 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
if(30 to 40)
// Don't fully kill liver that's important
human_owner.adjustOrganLoss(ORGAN_SLOT_LIVER, 10, 90)
human_owner.adjust_organ_loss(ORGAN_SLOT_LIVER, 10, 90)
if(40 to 50)
// Don't fully kill heart that's important
human_owner.adjustOrganLoss(ORGAN_SLOT_HEART, 10, 90)
human_owner.adjust_organ_loss(ORGAN_SLOT_HEART, 10, 90)
if(50 to 60)
// You can fully kill the stomach that's not crucial
human_owner.adjustOrganLoss(ORGAN_SLOT_STOMACH, 10)
human_owner.adjust_organ_loss(ORGAN_SLOT_STOMACH, 10)
if(60 to 70)
// Same with eyes
human_owner.adjustOrganLoss(ORGAN_SLOT_EYES, 5)
human_owner.adjust_organ_loss(ORGAN_SLOT_EYES, 5)
if(70 to 80)
// And same with ears
human_owner.adjustOrganLoss(ORGAN_SLOT_EARS, 10)
human_owner.adjust_organ_loss(ORGAN_SLOT_EARS, 10)
if(80 to 90)
// But don't fully kill lungs that's usually important
human_owner.adjustOrganLoss(ORGAN_SLOT_LUNGS, 10, 90)
human_owner.adjust_organ_loss(ORGAN_SLOT_LUNGS, 10, 90)
if(90 to 95)
// And definitely don't fully kil brains
human_owner.adjustOrganLoss(ORGAN_SLOT_BRAIN, 20, 190)
human_owner.adjust_organ_loss(ORGAN_SLOT_BRAIN, 20, 190)
if(95 to 100)
human_owner.adjust_confusion_up_to(12 SECONDS, 24 SECONDS)
@@ -191,8 +191,8 @@
/datum/status_effect/moon_converted/on_apply()
RegisterSignal(owner, COMSIG_MOB_APPLY_DAMAGE, PROC_REF(on_damaged))
// Heals them so people who are in crit can have this affect applied on them and still be of some use for the heretic
owner.adjustBruteLoss(-150 + owner.mob_mood.sanity)
owner.adjustFireLoss(-150 + owner.mob_mood.sanity)
owner.adjust_brute_loss(-150 + owner.mob_mood.sanity)
owner.adjust_fire_loss(-150 + owner.mob_mood.sanity)
to_chat(owner, span_hypnophrase(("THE MOON SHOWS YOU THE TRUTH AND THE LIARS WISH TO COVER IT, SLAY THEM ALL!!!</span>")))
owner.balloon_alert(owner, "they lie..THEY ALL LIE!!!")
@@ -226,7 +226,7 @@
. = ..()
if(locate(/obj/effect/forcefield/cosmic_field) in get_turf(owner))
var/delta_time = DELTA_WORLD_TIME(SSmobs) * 0.5 // SSmobs.wait is 2 secs, so this should be halved.
owner.adjustStaminaLoss(-15 * delta_time, updating_stamina = FALSE)
owner.adjust_stamina_loss(-15 * delta_time, updating_stamina = FALSE)
/**
* Creates a cosmic field at a given loc
@@ -301,10 +301,9 @@
/datum/status_effect/heretic_passive/flesh/proc/heal_glutton()
var/healed_amount = owner.heal_overall_damage(2, 2, updating_health = FALSE)
healed_amount += owner.adjustOxyLoss(-2, FALSE)
healed_amount += owner.adjustToxLoss(-2, FALSE, TRUE)
if(!HAS_TRAIT(owner, TRAIT_NOBLOOD))
owner.blood_volume += 2.5
healed_amount += owner.adjust_oxy_loss(-2, FALSE)
healed_amount += owner.adjust_tox_loss(-2, FALSE, TRUE)
owner.adjust_blood_volume(2.5)
if(!iscarbon(owner))
return
var/mob/living/carbon/carbon_eater = owner
@@ -433,7 +432,7 @@
healing_amount = -15 * seconds_between_ticks
if(!amulet_equipped)
healing_amount *= 0.5 // Half healing if you dont have the moon amulet
owner.adjustOrganLoss(ORGAN_SLOT_BRAIN, healing_amount)
owner.adjust_organ_loss(ORGAN_SLOT_BRAIN, healing_amount)
var/obj/item/organ/brain/our_brain = owner.get_organ_slot(ORGAN_SLOT_BRAIN)
if(!our_brain)
@@ -526,9 +525,9 @@
var/main_healing = 1 + 1 * passive_level * delta_time
var/stam_healing = 5 + 5 * passive_level * delta_time
need_mob_update += source.heal_overall_damage(-main_healing, -main_healing, updating_health = FALSE)
need_mob_update += source.adjustStaminaLoss(-stam_healing, updating_stamina = FALSE)
need_mob_update += source.adjustToxLoss(-main_healing, updating_health = FALSE, forced = TRUE) // Slimes are people too
need_mob_update += source.adjustOxyLoss(-main_healing, updating_health = FALSE)
need_mob_update += source.adjust_stamina_loss(-stam_healing, updating_stamina = FALSE)
need_mob_update += source.adjust_tox_loss(-main_healing, updating_health = FALSE, forced = TRUE) // Slimes are people too
need_mob_update += source.adjust_oxy_loss(-main_healing, updating_health = FALSE)
if(need_mob_update)
source.updatehealth()
new /obj/effect/temp_visual/heal(get_turf(owner), COLOR_BROWN)
@@ -536,8 +535,7 @@
var/stun_reduction = 0.5 * passive_level * delta_time
source.AdjustAllImmobility(-stun_reduction)
// Heals blood loss
if(source.blood_volume < BLOOD_VOLUME_NORMAL)
source.blood_volume += 2.5 * delta_time
source.adjust_blood_volume(2.5 * delta_time, maximum = BLOOD_VOLUME_NORMAL)
for(var/datum/reagent/reagent as anything in source.reagents.reagent_list)
source.reagents.remove_reagent(reagent.type, 2 * reagent.purge_multiplier * REM * seconds_per_tick)
@@ -83,8 +83,8 @@
/datum/status_effect/eldritch/ash/on_effect()
if(iscarbon(owner))
var/mob/living/carbon/carbon_owner = owner
carbon_owner.adjustStaminaLoss(6 * repetitions) // first one = 30 stam
carbon_owner.adjustFireLoss(3 * repetitions) // first one = 15 burn
carbon_owner.adjust_stamina_loss(6 * repetitions) // first one = 30 stam
carbon_owner.adjust_fire_loss(3 * repetitions) // first one = 15 burn
for(var/mob/living/carbon/victim in shuffle(range(1, carbon_owner)))
if(IS_HERETIC(victim) || victim == carbon_owner)
continue
@@ -285,7 +285,7 @@
/datum/status_effect/eldritch/moon/on_effect()
owner.adjust_confusion(30 SECONDS)
owner.adjustOrganLoss(ORGAN_SLOT_BRAIN, 25, 160)
owner.adjust_organ_loss(ORGAN_SLOT_BRAIN, 25, 160)
owner.emote(pick("giggle", "laugh"))
owner.add_mood_event("Moon Insanity", /datum/mood_event/moon_insanity)
return ..()
@@ -239,7 +239,7 @@
if(!iscarbon(victim))
return
var/mob/living/carbon/carbon_victim = victim
carbon_victim.adjustStaminaLoss(80)
carbon_victim.adjust_stamina_loss(80)
carbon_victim.adjust_silence(20 SECONDS)
carbon_victim.adjust_stutter(1 MINUTES)
carbon_victim.adjust_confusion(5 SECONDS)
@@ -112,7 +112,7 @@
/obj/item/disk/nuclear/proc/manual_suicide(mob/living/user)
user.remove_atom_colour(ADMIN_COLOUR_PRIORITY)
user.visible_message(span_suicide("[user] is destroyed by the nuclear blast!"))
user.adjustOxyLoss(200)
user.adjust_oxy_loss(200)
user.death(FALSE)
/obj/item/disk/nuclear/fake
@@ -14,6 +14,7 @@
you_are_text = "You are a space pirate."
flavour_text = "The station refused to pay for your protection. Protect the ship, siphon the credits from the station, and raid it for even more loot."
spawner_job_path = /datum/job/space_pirate
allow_custom_character = GHOSTROLE_TAKE_PREFS_APPEARANCE
///Rank of the pirate on the ship, it's used in generating pirate names!
var/rank = "Deserter"
///Path of the structure we spawn after creating a pirate.
@@ -25,7 +26,7 @@
///json key to pirate names, the last part ("fish" in "Cometfish")
var/name_endings = "generic_endings"
/obj/effect/mob_spawn/ghost_role/human/pirate/special(mob/living/spawned_mob, mob/mob_possessor)
/obj/effect/mob_spawn/ghost_role/human/pirate/special(mob/living/spawned_mob, mob/mob_possessor, apply_prefs)
. = ..()
spawned_mob.fully_replace_character_name(spawned_mob.real_name, generate_pirate_name(spawned_mob.gender))
spawned_mob.mind.add_antag_datum(/datum/antagonist/pirate)
@@ -35,7 +36,7 @@
var/endings = strings(PIRATE_NAMES_FILE, name_endings)
return "[rank ? rank + " " : ""][pick(beggings)][pick(endings)]"
/obj/effect/mob_spawn/ghost_role/human/pirate/create(mob/mob_possessor, newname)
/obj/effect/mob_spawn/ghost_role/human/pirate/create(mob/mob_possessor, newname, apply_prefs)
if(fluff_spawn)
new fluff_spawn(drop_location())
return ..()
@@ -58,6 +59,7 @@
outfit = /datum/outfit/pirate
rank = "Mate"
fluff_spawn = null
allow_custom_character = NONE
/obj/effect/mob_spawn/ghost_role/human/pirate/skeleton/captain
rank = "Captain"
@@ -75,6 +77,7 @@
mob_species = /datum/species/lizard/silverscale
outfit = /datum/outfit/pirate/silverscale
rank = "High-born"
allow_custom_character = NONE
/obj/effect/mob_spawn/ghost_role/human/pirate/silverscale/generate_pirate_name(spawn_gender)
var/first_name
@@ -184,6 +187,7 @@
mob_species = /datum/species/ethereal/lustrous
outfit = /datum/outfit/pirate/lustrous
rank = "Scintillant"
allow_custom_character = NONE
/obj/effect/mob_spawn/ghost_role/human/pirate/lustrous/captain
rank = "Radiant"
@@ -205,7 +209,7 @@
outfit = /datum/outfit/pirate/medieval
rank = "Footsoldier"
/obj/effect/mob_spawn/ghost_role/human/pirate/medieval/special(mob/living/carbon/spawned_mob, mob/mob_possessor)
/obj/effect/mob_spawn/ghost_role/human/pirate/medieval/special(mob/living/carbon/spawned_mob, mob/mob_possessor, apply_prefs)
. = ..()
if(rank == "Footsoldier")
spawned_mob.add_traits(list(TRAIT_NOGUNS, TRAIT_TOSS_GUN_HARD), INNATE_TRAIT)
@@ -217,7 +221,7 @@
rank = "Warlord"
outfit = /datum/outfit/pirate/medieval/warlord
/obj/effect/mob_spawn/ghost_role/human/pirate/medieval/warlord/special(mob/living/carbon/spawned_mob, mob/mob_possessor)
/obj/effect/mob_spawn/ghost_role/human/pirate/medieval/warlord/special(mob/living/carbon/spawned_mob, mob/mob_possessor, apply_prefs)
. = ..()
spawned_mob.dna.add_mutation(/datum/mutation/hulk/superhuman, MUTATION_SOURCE_GHOST_ROLE)
spawned_mob.dna.add_mutation(/datum/mutation/gigantism, MUTATION_SOURCE_GHOST_ROLE)
@@ -37,14 +37,14 @@
if(SPT_PROB(1.5 * stage, seconds_per_tick))
to_chat(affected_mob, span_revennotice("You suddenly feel [pick("sick and tired", "disoriented", "tired and confused", "nauseated", "faint", "dizzy")]..."))
affected_mob.adjust_confusion(8 SECONDS)
need_mob_update += affected_mob.adjustStaminaLoss(20, updating_stamina = FALSE)
need_mob_update += affected_mob.adjust_stamina_loss(20, updating_stamina = FALSE)
new /obj/effect/temp_visual/revenant(affected_mob.loc)
if(stagedamage < stage)
stagedamage++
need_mob_update += affected_mob.adjustToxLoss(1 * stage * seconds_per_tick, updating_health = FALSE) //should, normally, do about 30 toxin damage.
need_mob_update += affected_mob.adjust_tox_loss(1 * stage * seconds_per_tick, updating_health = FALSE) //should, normally, do about 30 toxin damage.
new /obj/effect/temp_visual/revenant(affected_mob.loc)
if(SPT_PROB(25, seconds_per_tick))
need_mob_update += affected_mob.adjustStaminaLoss(stage, updating_stamina = FALSE)
need_mob_update += affected_mob.adjust_stamina_loss(stage, updating_stamina = FALSE)
if(need_mob_update)
affected_mob.updatehealth()
@@ -62,7 +62,7 @@
if(!finalstage)
finalstage = TRUE
to_chat(affected_mob, span_revenbignotice("You feel like [pick("nothing's worth it anymore", "nobody ever needed your help", "nothing you did mattered", "everything you tried to do was worthless")]."))
affected_mob.adjustStaminaLoss(22.5 * seconds_per_tick, updating_stamina = FALSE)
affected_mob.adjust_stamina_loss(22.5 * seconds_per_tick, updating_stamina = FALSE)
new /obj/effect/temp_visual/revenant(affected_mob.loc)
if(affected_mob.dna && affected_mob.dna.species)
affected_mob.set_haircolor("#1d2953", override = TRUE)
@@ -61,7 +61,7 @@
/datum/action/cooldown/spell/pointed/unsettle/proc/spookify(mob/living/carbon/human/target)
target.Paralyze(stun_time)
target.adjustStaminaLoss(stamina_damage)
target.adjust_stamina_loss(stamina_damage)
target.apply_status_effect(/datum/status_effect/speech/slurring/generic)
target.emote("scream")
@@ -21,7 +21,7 @@ GLOBAL_LIST_EMPTY(voidwalker_void)
default_gravity = STANDARD_GRAVITY
ambience_index = AMBIENCE_SPOOKY
sound_environment = SOUND_ENVIRONMENT_CAVE
area_flags = UNIQUE_AREA | NOTELEPORT | HIDDEN_AREA | BLOCK_SUICIDE
area_flags = NOTELEPORT | HIDDEN_AREA | BLOCK_SUICIDE
/// Mini car where people drive around in in their mangled corpse to heal a bit before they get dumped back on station
/obj/effect/wisp_mobile
@@ -83,6 +83,7 @@
ADD_TRAIT(src, TRAIT_FREE_HYPERSPACE_MOVEMENT, INNATE_TRAIT) //Need to set before init cause if we init in hyperspace we get dragged before the trait can be added
. = ..()
status_flags &= ~CANSTUN
AddElement(/datum/element/simple_flying)
AddElement(/datum/element/glass_pacifist)
@@ -262,7 +263,7 @@
CRASH("[victim] was instantly dumped after being voidwalker kidnapped due to a missing landmark!")
else
victim.heal_and_revive(90)
victim.adjustOxyLoss(-100, FALSE)
victim.adjust_oxy_loss(-100, FALSE)
conversions_remaining++
@@ -8,7 +8,7 @@
alert_type = /atom/movable/screen/alert/status_effect/veryhighgravity
/datum/status_effect/planet_allergy/tick()
owner.adjustBruteLoss(1)
owner.adjust_brute_loss(1)
/atom/movable/screen/alert/status_effect/veryhighgravity
name = "Crushing Gravity"
@@ -37,7 +37,7 @@
<b>[invoker] must die.</b>"))
var/datum/brain_trauma/mild/hallucinations/added_trauma = new()
added_trauma.resilience = TRAUMA_RESILIENCE_ABSOLUTE
crewmate.adjustOrganLoss(ORGAN_SLOT_BRAIN, BRAIN_DAMAGE_DEATH - 25, BRAIN_DAMAGE_DEATH - 25) //you'd better hope chap didn't pick a hypertool
crewmate.adjust_organ_loss(ORGAN_SLOT_BRAIN, BRAIN_DAMAGE_DEATH - 25, BRAIN_DAMAGE_DEATH - 25) //you'd better hope chap didn't pick a hypertool
crewmate.gain_trauma(added_trauma)
crewmate.add_mood_event("wizard_ritual_finale", /datum/mood_event/madness_despair)
@@ -353,10 +353,10 @@
/// Typepaths of mobs to create
var/static/list/permitted_mobs = list(
/mob/living/basic/carp,
/mob/living/basic/illusion,
/mob/living/basic/killer_tomato,
/mob/living/basic/skeleton,
/mob/living/basic/wumborian_fugu,
/mob/living/simple_animal/hostile/illusion,
/mob/living/simple_animal/hostile/ooze,
)