diff --git a/code/WorkInProgress/ZomgPonies/mobs/pony.dm b/code/WorkInProgress/ZomgPonies/mobs/pony.dm
index c1ca84543d5..7680e8ee42a 100644
--- a/code/WorkInProgress/ZomgPonies/mobs/pony.dm
+++ b/code/WorkInProgress/ZomgPonies/mobs/pony.dm
@@ -43,7 +43,7 @@
else
if(O.force)
var/damage = O.force
- if (O.damtype == HALLOSS)
+ if (O.damtype == STAMINA)
damage = 0
health -= damage
for(var/mob/M in viewers(src, null))
diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm
index 7400a695d27..74e09dc1211 100644
--- a/code/controllers/configuration.dm
+++ b/code/controllers/configuration.dm
@@ -96,6 +96,7 @@
//game_options.txt configs
+ var/health_threshold_softcrit = 0
var/health_threshold_crit = 0
var/health_threshold_dead = -100
diff --git a/code/game/machinery/computer/HolodeckControl.dm b/code/game/machinery/computer/HolodeckControl.dm
index 094619a5a53..cd78210b41f 100644
--- a/code/game/machinery/computer/HolodeckControl.dm
+++ b/code/game/machinery/computer/HolodeckControl.dm
@@ -479,7 +479,7 @@
..()
/obj/item/weapon/holo
- damtype = HALLOSS
+ damtype = STAMINA
/obj/item/weapon/holo/esword
desc = "May the force be within you. Sorta"
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index 2be60ed6b4a..ab50be7e866 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -334,8 +334,8 @@ About the new airlock wires panel:
return
else if(user.hallucination > 50 && prob(10) && src.operating == 0)
user << "\red You feel a powerful shock course through your body!"
- user.halloss += 10
- user.stunned += 10
+ user.staminaloss += 50
+ user.stunned += 5
return
..(user)
diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm
index 121f4d9e098..30bd2379fa6 100644
--- a/code/game/objects/items/devices/scanners.dm
+++ b/code/game/objects/items/devices/scanners.dm
@@ -188,8 +188,10 @@ REAGENT SCANNER
var/datum/data/record/V = virusDB[ID]
user.show_message(text("\red Warning: Pathogen [V.fields["name"]] detected in subject's blood. Known antigen : [V.fields["antigen"]]"))
// user.show_message(text("\red Warning: Unknown pathogen detected in subject's blood."))
+ if(M.getStaminaLoss())
+ user.show_message("Subject appears to be suffering from fatigue.")
if (M.getCloneLoss())
- user.show_message("\red Subject appears to have been imperfectly cloned.")
+ user.show_message("Subject appears to have [M.getCloneLoss() > 30 ? "severe" : "minor"] cellular damage.")
// if (M.reagents && M.reagents.get_reagent_amount("inaprovaline"))
// user.show_message("\blue Bloodstream Analysis located [M.reagents:get_reagent_amount("inaprovaline")] units of rejuvenation chemicals.")
if (M.has_brain_worms())
diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm
index 68e7f0e0efb..efda3d2e00e 100644
--- a/code/game/objects/structures/grille.dm
+++ b/code/game/objects/structures/grille.dm
@@ -110,7 +110,7 @@
health -= M.melee_damage_upper
healthcheck()
return
-
+
/obj/structure/grille/mech_melee_attack(obj/mecha/M)
if(..())
playsound(loc, 'sound/effects/grillehit.ogg', 80, 1)
@@ -132,7 +132,7 @@
if(!Proj) return
//Tasers and the like should not damage grilles.
- if(Proj.damage_type == HALLOSS)
+ if(Proj.damage_type == STAMINA)
return
src.health -= Proj.damage*0.2
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index 79f88435912..5d04a7a726b 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -2,47 +2,38 @@
var/global/wcBar
var/global/wcBrig
var/global/wcCommon
-var/global/wcXeno
var/global/wcColored
/proc/color_windows_init()
var/list/bar = list("#0d8395", "#58b5c3", "#58c366", "#90d79a", "#ffffff")
var/list/brig = list("#aa0808", "#7f0606", "#ff0000")
var/list/common = list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8fcf44", "#ffffff")
- var/list/xeno = list("#73248B")
- wcBar = pick(bar)
+ wcBar = pick(bar)
wcBrig = pick(brig)
wcCommon = pick(common)
- wcXeno = pick(xeno)
-
+
/obj/proc/color_windows(var/obj/W as obj)
if(!wcColored)
sleep(50) // Sleeping to make sure the glass has initialized on the map
wcColored = 1
-
+
var/list/wcBarAreas = list(/area/crew_quarters/bar)
var/list/wcBrigAreas = list(/area/security,/area/security/main,/area/security/lobby,/area/security/brig,/area/security/permabrig,/area/security/prison,/area/security/prison/cell_block/A,/area/security/prison/cell_block/B,/area/security/prison/cell_block/C,/area/security/execution,/area/security/processing,/area/security/interrogation,/area/security/interrogationobs,/area/security/evidence,/area/security/prisonlockers,/area/security/medbay,/area/security/processing,/area/security/warden,/area/security/armoury,/area/security/securearmoury,/area/security/armoury/gamma,/area/security/securehallway,/area/security/hos,/area/security/podbay,/area/security/detectives_office,/area/security/range,/area/security/nuke_storage,/area/security/checkpoint,/area/security/checkpoint2,/area/security/checkpoint2,/area/security/checkpoint/supply,/area/security/checkpoint/engineering,/area/security/checkpoint/medical,/area/security/checkpoint/science,/area/security/vacantoffice,/area/security/vacantoffice2,/area/prison,/area/prison/arrival_airlock,/area/prison/control,/area/prison/crew_quarters,/area/prison/rec_room,/area/prison/closet,/area/prison/hallway/fore,/area/prison/hallway/aft,/area/prison/hallway/port,/area/prison/hallway/starboard,/area/prison/morgue,/area/prison/medical_research,/area/prison/medical,/area/prison/solar,/area/prison/podbay,/area/prison/solar_control,/area/prison/solitary,/area/prison/cell_block,/area/prison/cell_block/A,/area/prison/cell_block/B,/area/prison/cell_block/C,/area/shuttle/gamma/space,/area/shuttle/gamma/station)
- var/list/wcXenoAreas = list(/area/xenos_station/start)
-
+
var/newcolor
for(var/A in wcBarAreas)
if(W.areaMaster == locate(A))
newcolor = wcBar
break
-
+
for(var/A in wcBrigAreas)
if(W.areaMaster == locate(A))
newcolor = wcBrig
break
-
- for(var/A in wcXenoAreas)
- if(W.areaMaster == locate(A))
- newcolor = wcXeno
- break
-
- if(!newcolor)
+
+ if(!newcolor)
newcolor = wcCommon
-
+
return newcolor
/obj/structure/window
@@ -65,10 +56,10 @@ var/global/wcColored
var/sheets = 1 // Number of sheets needed to build this window (determines how much shit is spawned by destroy())
// var/silicate = 0 // number of units of silicate
// var/icon/silicateIcon = null // the silicated icon
-
+
/obj/structure/window/bullet_act(var/obj/item/projectile/Proj)
//Tasers and the like should not damage windows.
- if(Proj.damage_type == HALLOSS)
+ if(Proj.damage_type == STAMINA)
return
health -= Proj.damage
@@ -290,7 +281,7 @@ var/global/wcColored
if(G.amount>=G.max_amount)
continue
G.attackby(NG, user)
-
+
if (reinf)
var/obj/item/stack/rods/NR = new (src.loc)
for (var/obj/item/stack/rods/R in src.loc)
@@ -298,7 +289,7 @@ var/global/wcColored
continue
if(R.amount>=R.max_amount)
continue
- R.attackby(NR, user)
+ R.attackby(NR, user)
user << "You have disassembled the window."
disassembled = 1
@@ -325,8 +316,8 @@ var/global/wcColored
/obj/structure/window/mech_melee_attack(obj/mecha/M)
if(..())
- hit(M.force, 1)
-
+ hit(M.force, 1)
+
/obj/structure/window/proc/hit(var/damage, var/sound_effect = 1)
if(reinf) damage *= 0.5
health = max(0, health - damage)
diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm
index 1eb129ae428..aa667436c46 100644
--- a/code/modules/clothing/shoes/magboots.dm
+++ b/code/modules/clothing/shoes/magboots.dm
@@ -7,6 +7,7 @@
var/slowdown_active = 2
action_button_name = "Toggle Magboots"
icon_action_button = "action_magboots"
+ species_restricted = null
/obj/item/clothing/shoes/magboots/attack_self(mob/user)
if(src.magpulse)
diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm
index 32b72f045fc..d1dfd17227b 100644
--- a/code/modules/flufftext/Hallucination.dm
+++ b/code/modules/flufftext/Hallucination.dm
@@ -303,7 +303,7 @@ proc/check_panel(mob/M)
if(weapon_name)
my_target << sound(pick('sound/weapons/genhit1.ogg', 'sound/weapons/genhit2.ogg', 'sound/weapons/genhit3.ogg'))
my_target.show_message("\red [my_target] has been attacked with [weapon_name] by [src.name] ", 1)
- my_target.halloss += 8
+ my_target.staminaloss += 30
if(prob(20)) my_target.eye_blurry += 3
if(prob(33))
if(!locate(/obj/effect/overlay) in my_target.loc)
@@ -311,7 +311,7 @@ proc/check_panel(mob/M)
else
my_target << sound(pick('sound/weapons/punch1.ogg','sound/weapons/punch2.ogg','sound/weapons/punch3.ogg','sound/weapons/punch4.ogg'))
my_target.show_message("\red [src.name] has punched [my_target]!", 1)
- my_target.halloss += 4
+ my_target.staminaloss += 30
if(prob(33))
if(!locate(/obj/effect/overlay) in my_target.loc)
fake_blood(my_target)
diff --git a/code/modules/mob/abilities.dm b/code/modules/mob/abilities.dm
index ca992d86061..83aa4362f29 100644
--- a/code/modules/mob/abilities.dm
+++ b/code/modules/mob/abilities.dm
@@ -4,8 +4,8 @@ Creature-level abilities.
/var/global/list/ability_verbs = list( )
-
-/mob/living/carbon/human/slime/proc/slimepeople_ventcrawl()
+/*
+/mob/living/carbon/human/slime/proc/slimepeople_ventcrawl() // Slime people ventcrawling commented out
set category = "Abilities"
set name = "Ventcrawl (Slime People)"
@@ -34,4 +34,5 @@ Creature-level abilities.
M.handle_ventcrawl()
else
- src << "This should not be happening. At all."
\ No newline at end of file
+ src << "This should not be happening. At all."
+*/
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 7d307c92aac..b901147295a 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -187,6 +187,11 @@
if(status == "")
status = "OK"
src.show_message(text("\t []My [] is [].",status=="OK"?"\blue ":"\red ",org.display_name,status),1)
+ if(staminaloss)
+ if(staminaloss > 30)
+ src << "You're completely exhausted."
+ else
+ src << "You feel fatigued."
if((SKELETON in H.mutations) && (!H.w_uniform) && (!H.wear_suit))
H.play_xylophone()
else if(lying) // /vg/: For hugs. This is how update_icon figgers it out, anyway. - N3X15
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 904cc91cdc9..6d74e0c411e 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -46,7 +46,6 @@
/mob/living/carbon/human/slime/New(var/new_loc)
..(new_loc, "Slime People")
- verbs += /mob/living/carbon/human/slime/proc/slimepeople_ventcrawl
/mob/living/carbon/human/grey/New(var/new_loc)
..(new_loc, "Grey")
@@ -391,7 +390,7 @@
var/dam_zone = pick("chest", "l_hand", "r_hand", "l_leg", "r_leg")
var/datum/organ/external/affecting = get_organ(ran_zone(dam_zone))
var/armor = run_armor_check(affecting, "melee")
-
+
var/datum/organ/external/affected = src.get_organ(dam_zone)
affected.add_autopsy_data(M.name, damage) // Add the mob's name to the autopsy data
apply_damage(damage, BRUTE, affecting, armor, M.name)
diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm
index a4600443825..9258953388d 100644
--- a/code/modules/mob/living/carbon/human/human_attackhand.dm
+++ b/code/modules/mob/living/carbon/human/human_attackhand.dm
@@ -33,7 +33,7 @@
visible_message("\red [M] has punched [src]!")
- apply_damage(damage, HALLOSS, affecting, armor_block)
+ apply_damage(damage, STAMINA, affecting, armor_block)
if(damage >= 9)
visible_message("\red [M] has weakened [src]!")
apply_effect(4, WEAKEN, armor_block)
diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm
index dccfc9a6691..0f7e7ee1ce2 100644
--- a/code/modules/mob/living/carbon/human/human_movement.dm
+++ b/code/modules/mob/living/carbon/human/human_movement.dm
@@ -1,5 +1,7 @@
/mob/living/carbon/human/movement_delay()
var/tally = 0
+ if(status_flags & GOTTAGOFAST)
+ tally -= 1
if(species && species.flags & IS_SLOW)
tally = 5
@@ -9,13 +11,9 @@
if(embedded_flag)
handle_embedded_objects() //Moving with objects stuck in you can cause bad times.
- if(reagents.has_reagent("hyperzine")) return -1
-
- if(reagents.has_reagent("nuka_cola")) return -1
-
if((M_RUN in mutations)) return -1
- var/health_deficiency = (100 - health)
+ var/health_deficiency = (100 - health + staminaloss)
if(health_deficiency >= 40) tally += (health_deficiency / 25)
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 16ee6367371..c016f2204e8 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -1049,6 +1049,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
adjustHalLoss(-3)
else if(sleeping)
handle_dreams()
+ adjustStaminaLoss(-10)
adjustHalLoss(-3)
if (mind)
if((mind.active && client != null) || immune_to_ssd) //This also checks whether a client is connected, if not, sleep is not reduced.
@@ -1154,6 +1155,8 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
if(gloves && germ_level > gloves.germ_level && prob(10))
gloves.germ_level += 1
+ CheckStamina()
+
return 1
proc/handle_regular_hud_updates()
@@ -1345,7 +1348,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
if(2) healths.icon_state = "health7"
else
//switch(health - halloss)
- switch(100 - ((species && species.flags & NO_PAIN) ? 0 : traumatic_shock))
+ switch(100 - ((species && species.flags & NO_PAIN) ? 0 : traumatic_shock) - staminaloss)
if(100 to INFINITY) healths.icon_state = "health0"
if(80 to 100) healths.icon_state = "health1"
if(60 to 80) healths.icon_state = "health2"
diff --git a/code/modules/mob/living/carbon/monkey/life.dm b/code/modules/mob/living/carbon/monkey/life.dm
index e0bb6c8e5e3..01a5ca76e6d 100644
--- a/code/modules/mob/living/carbon/monkey/life.dm
+++ b/code/modules/mob/living/carbon/monkey/life.dm
@@ -553,6 +553,9 @@
//Other
handle_statuses()
+
+ CheckStamina()
+
return 1
diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm
index 5c8345f6c5f..c3f4c035292 100644
--- a/code/modules/mob/living/carbon/monkey/monkey.dm
+++ b/code/modules/mob/living/carbon/monkey/monkey.dm
@@ -113,10 +113,8 @@
/mob/living/carbon/monkey/movement_delay()
var/tally = 0
- if(reagents)
- if(reagents.has_reagent("hyperzine")) return -1
-
- if(reagents.has_reagent("nuka_cola")) return -1
+ if(status_flags & GOTTAGOFAST)
+ tally -= 1
var/health_deficiency = (100 - health)
if(health_deficiency >= 45) tally += (health_deficiency / 25)
diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm
index 1887b052ad0..daca2f68de5 100644
--- a/code/modules/mob/living/damage_procs.dm
+++ b/code/modules/mob/living/damage_procs.dm
@@ -24,11 +24,13 @@
adjustCloneLoss(damage/(blocked+1))
if(HALLOSS)
adjustHalLoss(damage/(blocked+1))
+ if(STAMINA)
+ adjustStaminaLoss(damage/(blocked+1))
updatehealth()
return 1
-/mob/living/proc/apply_damages(var/brute = 0, var/burn = 0, var/tox = 0, var/oxy = 0, var/clone = 0, var/halloss = 0, var/def_zone = null, var/blocked = 0)
+/mob/living/proc/apply_damages(var/brute = 0, var/burn = 0, var/tox = 0, var/oxy = 0, var/clone = 0, var/halloss = 0, var/def_zone = null, var/blocked = 0, var/stamina = 0)
if(blocked >= 2) return 0
if(brute) apply_damage(brute, BRUTE, def_zone, blocked)
if(burn) apply_damage(burn, BURN, def_zone, blocked)
@@ -36,6 +38,7 @@
if(oxy) apply_damage(oxy, OXY, def_zone, blocked)
if(clone) apply_damage(clone, CLONE, def_zone, blocked)
if(halloss) apply_damage(halloss, HALLOSS, def_zone, blocked)
+ if(stamina) apply_damage(stamina, STAMINA, def_zone, blocked)
return 1
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index f92158764f3..6c5de2f4b9b 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -153,6 +153,17 @@
if(status_flags & GODMODE) return 0 //godmode
brainloss = amount
+/mob/living/proc/getStaminaLoss()
+ return staminaloss
+
+/mob/living/proc/adjustStaminaLoss(var/amount)
+ if(status_flags & GODMODE) return 0
+ staminaloss = min(max(staminaloss + amount, 0),(maxHealth*2))
+
+/mob/living/proc/setStaminaLoss(var/amount)
+ if(status_flags & GODMODE) return 0
+ staminaloss = amount
+
/mob/living/proc/getHalLoss()
return halloss
@@ -291,6 +302,8 @@
setOxyLoss(0)
setCloneLoss(0)
setBrainLoss(0)
+ setStaminaLoss(0)
+ setHalLoss(0)
SetParalysis(0)
SetStunned(0)
SetWeakened(0)
@@ -611,9 +624,11 @@
var/mob/living/carbon/CM = L
if(CM.on_fire && CM.canmove)
CM.fire_stacks -= 5
- CM.weakened = 5
+ CM.Weaken(3)
+ CM.spin(32,2)
CM.visible_message("[CM] rolls on the floor, trying to put themselves out!", \
"You stop, drop, and roll!")
+ sleep(30)
if(fire_stacks <= 0)
CM.visible_message("[CM] has successfully extinguished themselves!", \
"You extinguish yourself.")
@@ -695,6 +710,37 @@
CM.legcuffed = null
CM.update_inv_legcuffed()
+/mob/living/carbon/proc/spin(spintime, speed)
+ spawn()
+ var/D = dir
+ while(spintime >= speed)
+ sleep(speed)
+ switch(D)
+ if(NORTH)
+ D = EAST
+ if(SOUTH)
+ D = WEST
+ if(EAST)
+ D = SOUTH
+ if(WEST)
+ D = NORTH
+ dir = D
+ spintime -= speed
+ return
+
+/mob/living/proc/CheckStamina()
+ if(staminaloss)
+ var/total_health = (health - staminaloss)
+ if(total_health <= config.health_threshold_softcrit && !stat)
+ Exhaust()
+ setStaminaLoss(health - 2)
+ return
+ setStaminaLoss(max((staminaloss - 2), 0))
+
+/mob/living/proc/Exhaust()
+ src << "You're too exhausted to keep going..."
+ Weaken(5)
+
/mob/living/update_gravity(has_gravity)
if(!ticker)
return
diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm
index c504d37b643..5bda59435af 100644
--- a/code/modules/mob/living/living_defines.dm
+++ b/code/modules/mob/living/living_defines.dm
@@ -14,8 +14,8 @@
var/fireloss = 0.0 //Burn damage caused by being way too hot, too cold or burnt.
var/cloneloss = 0 //Damage caused by being cloned or ejected from the cloner early. slimes also deal cloneloss damage to victims
var/brainloss = 0 //'Retardation' damage caused by someone hitting you in the head with a bible or being infected with brainrot.
- var/halloss = 0 //Hallucination damage. 'Fake' damage obtained through hallucinating or the holodeck. Sleeping should cause it to wear off.
-
+ var/halloss = 0 //Hallucination damage; utilize this largely for fake "pain" based damage. Sleeping should cause it to wear of
+ var/staminaloss = 0 //Stamina damage, or exhaustion. You recover it slowly naturally, and are stunned if it gets too high. Holodeck and hallucinations deal this.
var/hallucination = 0 //Directly affects how long a mob will hallucinate for
var/list/atom/hallucinations = list() //A list of hallucinated people that try to attack the mob. See /obj/effect/fake_attacker in hallucinations.dm
diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm
index ab04798293b..a91e48b0fdd 100644
--- a/code/modules/mob/living/silicon/pai/pai.dm
+++ b/code/modules/mob/living/silicon/pai/pai.dm
@@ -23,7 +23,8 @@
"Drone" = "repairbot",
"Cat" = "cat",
"Mouse" = "mouse",
- "Monkey" = "monkey"
+ "Monkey" = "monkey",
+ "Fox" = "fox"
)
var/global/list/possible_say_verbs = list(
@@ -31,7 +32,8 @@
"Natural" = list("says","yells","asks"),
"Beep" = list("beeps","beeps loudly","boops"),
"Chirp" = list("chirps","chirrups","cheeps"),
- "Feline" = list("purrs","yowls","meows")
+ "Feline" = list("purrs","yowls","meows"),
+ "Canine" = list("yaps","barks","growls")
)
diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm
index e760a0f2f43..39505b7ee40 100644
--- a/code/modules/mob/living/simple_animal/constructs.dm
+++ b/code/modules/mob/living/simple_animal/constructs.dm
@@ -112,7 +112,7 @@
/mob/living/simple_animal/construct/attackby(var/obj/item/O as obj, var/mob/user as mob)
if(O.force)
var/damage = O.force
- if (O.damtype == HALLOSS)
+ if (O.damtype == STAMINA)
damage = 0
adjustBruteLoss(damage)
for(var/mob/M in viewers(src, null))
@@ -154,7 +154,7 @@
if(O.force)
if(O.force >= 11)
var/damage = O.force
- if (O.damtype == HALLOSS)
+ if (O.damtype == STAMINA)
damage = 0
adjustBruteLoss(damage)
for(var/mob/M in viewers(src, null))
@@ -282,7 +282,7 @@
if(O.force)
if(O.force >= 11)
var/damage = O.force
- if (O.damtype == HALLOSS)
+ if (O.damtype == STAMINA)
damage = 0
adjustBruteLoss(damage)
for(var/mob/M in viewers(src, null))
diff --git a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm
index 2c5be5520be..e0fa382af85 100644
--- a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm
+++ b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm
@@ -141,7 +141,7 @@
else
if(O.force)
var/damage = O.force
- if (O.damtype == HALLOSS)
+ if (O.damtype == STAMINA)
damage = 0
adjustBruteLoss(damage)
for(var/mob/M in viewers(src, null))
diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm
index b6949cfa81f..78faa4294c0 100644
--- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm
+++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm
@@ -61,7 +61,7 @@
if(O.force)
if(prob(80))
var/damage = O.force
- if (O.damtype == HALLOSS)
+ if (O.damtype == STAMINA)
damage = 0
health -= damage
visible_message("\red \b [src] has been attacked with the [O] by [user]. ")
diff --git a/code/modules/mob/living/simple_animal/shade.dm b/code/modules/mob/living/simple_animal/shade.dm
index 277a38132d9..779692028ec 100644
--- a/code/modules/mob/living/simple_animal/shade.dm
+++ b/code/modules/mob/living/simple_animal/shade.dm
@@ -46,7 +46,7 @@
else
if(O.force)
var/damage = O.force
- if (O.damtype == HALLOSS)
+ if (O.damtype == STAMINA)
damage = 0
health -= damage
for(var/mob/M in viewers(src, null))
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index b2a319b6f64..a406d180b7b 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -161,7 +161,7 @@
if( abs(Environment.temperature - bodytemperature) > 40 )
bodytemperature += ((Environment.temperature - bodytemperature) / 5)
-
+
if(min_oxy)
if(Environment.oxygen < min_oxy)
atmos_suitable = 0
@@ -188,7 +188,7 @@
atmos_suitable = 0
if(flags & NO_BREATHE || flags & IS_SYNTHETIC)
atmos_suitable = 1
-
+
//Atmos effect
if(bodytemperature < minbodytemp)
adjustBruteLoss(cold_damage_per_tick)
@@ -398,7 +398,7 @@
else
if(O.force)
var/damage = O.force
- if (O.damtype == HALLOSS)
+ if (O.damtype == STAMINA)
damage = 0
adjustBruteLoss(damage)
for(var/mob/M in viewers(src, null))
diff --git a/code/modules/mob/living/simple_animal/vox.dm b/code/modules/mob/living/simple_animal/vox.dm
index 58491911e79..d412b6f8f0a 100644
--- a/code/modules/mob/living/simple_animal/vox.dm
+++ b/code/modules/mob/living/simple_animal/vox.dm
@@ -36,7 +36,7 @@
if(O.force)
if(O.force >= 25)
var/damage = O.force
- if (O.damtype == HALLOSS)
+ if (O.damtype == STAMINA)
damage = 0
health -= damage
for(var/mob/M in viewers(src, null))
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index 29278592c26..8a86652764f 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -245,7 +245,7 @@
mouthshoot = 0
return
in_chamber.on_hit(M)
- if (in_chamber.damage_type != HALLOSS)
+ if (in_chamber.damage_type != STAMINA)
user.apply_damage(in_chamber.damage*2.5, in_chamber.damage_type, "head", used_weapon = "Point blank shot in the mouth with \a [in_chamber]", sharp=1)
user.death()
else
diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm
index cb8997c3b56..096cb536dcb 100644
--- a/code/modules/projectiles/projectile/beams.dm
+++ b/code/modules/projectiles/projectile/beams.dm
@@ -67,6 +67,7 @@
icon_state = "omnilaser"
hitsound = null
damage = 0
+ damage_type = STAMINA
flag = "laser"
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
var/suit_types = list(/obj/item/clothing/suit/redtag, /obj/item/clothing/suit/bluetag)
@@ -76,7 +77,7 @@
var/mob/living/carbon/human/M = target
if(istype(M.wear_suit))
if(M.wear_suit.type in suit_types)
- M.adjustHalLoss(34)
+ M.adjustStaminaLoss(34)
return 1
/obj/item/projectile/lasertag/omni
diff --git a/code/modules/projectiles/projectile/energy.dm b/code/modules/projectiles/projectile/energy.dm
index c5be6dcd6fa..b7554461f2e 100644
--- a/code/modules/projectiles/projectile/energy.dm
+++ b/code/modules/projectiles/projectile/energy.dm
@@ -75,7 +75,7 @@
name = "disabler beam"
icon_state = "omnilaser"
damage = 34
- damage_type = HALLOSS
+ damage_type = STAMINA
var/range = 8
/obj/item/projectile/energy/disabler/Range()
diff --git a/code/modules/reagents/Chemistry-Holder.dm b/code/modules/reagents/Chemistry-Holder.dm
index 68e7d4293c2..fb9c5ebf6bf 100644
--- a/code/modules/reagents/Chemistry-Holder.dm
+++ b/code/modules/reagents/Chemistry-Holder.dm
@@ -391,11 +391,19 @@ datum
del(A)
update_total()
my_atom.on_reagent_change()
+ check_gofast(my_atom)
return 0
return 1
+ check_gofast(var/mob/M)
+ if(istype(M, /mob))
+ if(M.reagents.has_reagent("hyperzine")||M.reagents.has_reagent("nuka_cola"))
+ return 1
+ else
+ M.status_flags &= ~GOTTAGOFAST
+
update_total()
total_volume = 0
for(var/datum/reagent/R in reagent_list)
diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm
index d27839e3290..7bf22969fd0 100644
--- a/code/modules/reagents/Chemistry-Reagents.dm
+++ b/code/modules/reagents/Chemistry-Reagents.dm
@@ -1948,7 +1948,9 @@ datum
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(prob(5)) M.emote(pick("twitch","blink_r","shiver"))
- ..()
+ M.status_flags |= GOTTAGOFAST
+ holder.remove_reagent(src.id, 0.5 * REAGENTS_METABOLISM)
+ // ..()
return
cryoxadone
@@ -2088,7 +2090,7 @@ datum
data = 13
on_mob_life(var/mob/living/M)
- M.adjustHalLoss(REM * data)
+ M.adjustStaminaLoss(REM * data)
data = max(data - 1, 3)
..()
@@ -3219,6 +3221,7 @@ datum
M.druggy = max(M.druggy, 30)
M.dizziness +=5
M.drowsyness = 0
+ M.status_flags |= GOTTAGOFAST
..()
return
diff --git a/code/setup.dm b/code/setup.dm
index 89eabf6cec2..6fa44e39477 100644
--- a/code/setup.dm
+++ b/code/setup.dm
@@ -474,6 +474,7 @@ var/list/global_mutations = list() // list of hidden mutation things
#define OXY "oxy"
#define CLONE "clone"
#define HALLOSS "halloss"
+#define STAMINA "stamina"
#define STUN "stun"
#define WEAKEN "weaken"
@@ -497,6 +498,7 @@ var/list/global_mutations = list() // list of hidden mutation things
#define CANPUSH 8
#define LEAPING 16
#define PASSEMOTES 32 //Mob has a cortical borer or holders inside of it that need to see emotes.
+#define GOTTAGOFAST 64
#define GODMODE 4096
#define FAKEDEATH 8192 //Replaces stuff like changeling.changeling_fakedeath
#define DISFIGURED 16384 //I'll probably move this elsewhere if I ever get wround to writing a bitflag mob-damage system
@@ -633,6 +635,7 @@ var/list/TAGGERLOCATIONS = list("Disposals",
#define OXY "oxy"
#define CLONE "clone"
#define HALLOSS "halloss"
+#define STAMINA "stamina"
#define STUN "stun"
#define WEAKEN "weaken"
diff --git a/icons/mob/pai.dmi b/icons/mob/pai.dmi
index f286389bffc..30c8d03cb39 100644
Binary files a/icons/mob/pai.dmi and b/icons/mob/pai.dmi differ