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