From 1aff490e42578481dbf1cc17cc02c86f60bf1d30 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Tue, 9 Dec 2014 22:11:18 -0500 Subject: [PATCH 1/5] Magboots Fix --- code/modules/clothing/shoes/magboots.dm | 1 + 1 file changed, 1 insertion(+) 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) From c1921ad1505e08c9a38631428a8366853a2b70a2 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Tue, 9 Dec 2014 22:45:05 -0500 Subject: [PATCH 2/5] PAI Changes --- code/modules/mob/living/silicon/pai/pai.dm | 6 ++++-- icons/mob/pai.dmi | Bin 9739 -> 22708 bytes 2 files changed, 4 insertions(+), 2 deletions(-) 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/icons/mob/pai.dmi b/icons/mob/pai.dmi index f286389bffc1f05454d7370cb0c2f7a04b5ff831..30c8d03cb3913dbefed3f58c4d8732580bfb92ab 100644 GIT binary patch literal 22708 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%0DDP>#zPx(RgQxeIIdI=)p zSM<3V@Nqv!N23;R-r6~Zop(5dL#VfrU#~iDZRx&1Y@bB#L28O-urc<0?tJ-Hfp;IK zzCQ8*xuQsIb66iRJ*}jLCjnsHxo?CP+D+^2N)cHznoya{#*b6q^O?N;B->(8W?Pr_ z7_}ahJ(`AR3F}+^E@#79Ow_5a)w_c-XH2q~jR**{y_khmu_U2Ckc=@~G*c+jg0Tta z^^62BgZ8pi^f!k*1TyJb&;MsZ^nZzZz0|6)tb7;m(zLe?T4f+R2pDW@@+IB3XY)IO zMq)jJ<;k9s6nKU@>>&cgZpCeb@}Sy>-(L##StxMk7rU;VNq}^p^%p?m3d_r{%gx-r zzy#H1V5<{5y?y^V#stA!ZsR%hGvW}13;mdE9XawI298XPQ0CE-(W;)k)0GSRSpqx< zC{emDH+pXHEPIe$%2*QX$nJ#31gZ6nf)+B%2|TYgeo{O+cQ8c>>53`#*8P4k2)6@+ zGc%&9sw#5MvPOW8$N3JHywzACokM3Y#z7V(u#f|H+4~$7S1zIIyO6N&lP(PVl-{q zuQ{^Z+S$R8Y-7GQx|Y9pW*@CCR<|#gE>=IniAzdyV+V(c;lyU2yt9bTi^@qndp4ux z#`%5xbf4r}#f|dvTUs65ezUxpAu%n%W$=jm_c!Cd!LYj^~y7-+_m8je60%)z} zYZEx(mG{@oq2-c3>W8$u^H(ss@I$p+rxl+O^*b&BS=S_k$%(CWuD1Dy{gf#&wbb69 zeva`FVP0j*nk9HhWqs3;`b#bmP_Oyvb5+0&Tv|Ntv6#jc<`$F%c`Ii|S@6KE?zQmg zLHlk+bdDVS5dV&7SNh@vD9a>O)r!xyrb7>*J)TzfR$BPYmu+21nfutg zSn`VP^ZDD8K7)!2Hy{mtInIH!&jS0Y)aN&uuX}ZV{_FncyM_WP34K`>AN1L)(e`2J z?t`432r8b+$CY0kG9mXN1tB1RkOPBR_?|BLP%P=<(OiVK{HeCjbNU@L!Z{Rbr?OK% zg#tq{@$Gtg7Cs#V5(xkj$=^>Ph~q>5?ukh9S@!Lti^%DiJK=|Ls@|hzj9jPv@h)|T zwn4(Eqsu{;%CHRSAk}#ilkN7hfO^T)9j?f9wM6=`(aQdLI!bwy>B8LM9z#+(VMykB zPyfl@z3CawW5QqK`Kn3T*yG}u#Zxe{^crRvUYYz;O^nC%XKffze>{#M)Fi~iK}f9q z=2sy6tL0|Wnb@}mJ2{d&)9(dLPEu3yu*Q<&;HUnOU?5e3%r%hw_c!um^I$Mo1zc!4 zXw8^ag0w7TP~yP7fh-q!m1K(Qy?CjKBLe;~X@T?3sgJ{{g@#0BqN4w6Pa?;m4UqW! z9l_?e_4Y>6iSo#-#w8G$*iDYn)fMmT!G7#SALWVYg&6zp{_FE zL~s@$Q^8^pMb`l73jt{j)Y5{&A78ilGs8b7)wiN+Q4hY zm$|+#Di+QTRHh2I@lXRVf@4k*VqPx+g3AF`0x=%aHCxUdZEi522dq_ z>i7hqXV3CwFStO0XQs+5>STKsa0yphH~hllSZ4CMU9G6tYs5#LU;sE&k>=CGNZ!F#+I ztd9kT5@;_aZ59zgxR~;*lzpu}f}1pO8awfUrd(H8&|T2FzJkTPHjZ?5cu>gS}y*i3>iSSDW%8X5v;vgEWlG}OEq?-*T>GGA!Hamz-iO z)4eGC(z)}?X1#c}mHU0Xhn$}=sp-=aFV$@Q7>m=VzW`WsU{0e?e{}v{I5R6tWr&6k z$R@dN6Ofz-{{gd=w^OBV1N##MZ+sHn3Vxc6LLQwfJ@4%7G@quAAFxqEc7k@x&74Dz zhG~O8Il{b&gV%y-GBZE<$D1_46K~ce>T}rVuLtuS&{o|DbZ)uMlD&*o%OtAI%7`h| z4O7xk93YUB(vsu%$XyZmLP*G-!9876TwF}>ub{Ei=A%cM21blxU|@$MEoG(HXR^F0 zDrYLWf@}b`Yk{e2E14}z)FFq1ylkV6WQ628TsG@G>*(U!%0DTWBp(X{~(P}E7f#7L(#0Bpa?3P*?iC{%fJ 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%0ARUlb`zTN%W+)R15+}0 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 Date: Wed, 10 Dec 2014 21:45:05 -0500 Subject: [PATCH 3/5] Properly Removes Slime Person Ventcrawl Commit #535 on https://github.com/ZomgPonies/Paradise had not properly removed the addition of the ventcrawl verb to Slime People, this is fixed. --- code/modules/mob/abilities.dm | 7 ++++--- code/modules/mob/living/carbon/human/human.dm | 3 +-- 2 files changed, 5 insertions(+), 5 deletions(-) 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/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) From e76c8f26f35a3df454342c68bb4d6abc110ace38 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Fri, 12 Dec 2014 06:52:20 -0500 Subject: [PATCH 4/5] Stamina --- code/WorkInProgress/ZomgPonies/mobs/pony.dm | 2 +- code/controllers/configuration.dm | 1 + .../machinery/computer/HolodeckControl.dm | 2 +- code/game/machinery/doors/airlock.dm | 4 +- code/game/objects/items/devices/scanners.dm | 4 +- code/game/objects/structures/grille.dm | 4 +- code/game/objects/structures/window.dm | 28 +++++------ code/modules/flufftext/Hallucination.dm | 4 +- code/modules/mob/living/carbon/carbon.dm | 5 ++ .../living/carbon/human/human_attackhand.dm | 2 +- .../mob/living/carbon/human/human_movement.dm | 2 +- code/modules/mob/living/carbon/human/life.dm | 5 +- code/modules/mob/living/carbon/monkey/life.dm | 3 ++ code/modules/mob/living/damage_procs.dm | 5 +- code/modules/mob/living/living.dm | 48 ++++++++++++++++++- code/modules/mob/living/living_defines.dm | 4 +- .../mob/living/simple_animal/constructs.dm | 6 +-- .../simple_animal/friendly/spiderbot.dm | 2 +- .../living/simple_animal/hostile/syndicate.dm | 2 +- .../modules/mob/living/simple_animal/shade.dm | 2 +- .../mob/living/simple_animal/simple_animal.dm | 6 +-- code/modules/mob/living/simple_animal/vox.dm | 2 +- code/modules/projectiles/gun.dm | 2 +- code/modules/projectiles/projectile/beams.dm | 3 +- code/modules/projectiles/projectile/energy.dm | 2 +- code/modules/reagents/Chemistry-Reagents.dm | 2 +- code/setup.dm | 2 + 27 files changed, 110 insertions(+), 44 deletions(-) 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 a198028a7ff..de07746d343 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -314,8 +314,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 646e84785e1..5d04a7a726b 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -8,32 +8,32 @@ var/global/wcColored var/list/brig = list("#aa0808", "#7f0606", "#ff0000") var/list/common = list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8fcf44", "#ffffff") - wcBar = pick(bar) + wcBar = pick(bar) wcBrig = pick(brig) wcCommon = pick(common) - + /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/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 - - if(!newcolor) + + if(!newcolor) newcolor = wcCommon - + return newcolor /obj/structure/window @@ -56,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 @@ -281,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) @@ -289,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 @@ -316,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/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/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_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..2454b72fc34 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -15,7 +15,7 @@ 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 3353b07b6dd..24f8d9bb3ef 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -1062,6 +1062,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. @@ -1167,6 +1168,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() @@ -1356,7 +1359,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 6b61a89946f..cbacfde582d 100644 --- a/code/modules/mob/living/carbon/monkey/life.dm +++ b/code/modules/mob/living/carbon/monkey/life.dm @@ -569,6 +569,9 @@ //Other handle_statuses() + + CheckStamina() + return 1 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 5d5e12c35f7..296442105f5 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/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 b83ab6ee73f..d436e676667 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -66,6 +66,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) @@ -75,7 +76,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-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index d27839e3290..b71fce2f07a 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -2088,7 +2088,7 @@ datum data = 13 on_mob_life(var/mob/living/M) - M.adjustHalLoss(REM * data) + M.adjustStaminaLoss(REM * data) data = max(data - 1, 3) ..() diff --git a/code/setup.dm b/code/setup.dm index 227480126f7..494a5ef03f0 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" @@ -633,6 +634,7 @@ var/list/TAGGERLOCATIONS = list("Disposals", #define OXY "oxy" #define CLONE "clone" #define HALLOSS "halloss" +#define STAMINA "stamina" #define STUN "stun" #define WEAKEN "weaken" From fb14d3831e74cc0e3573203e3fb565809c726bc9 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Fri, 12 Dec 2014 10:17:53 -0500 Subject: [PATCH 5/5] Movement Speed Refactor --- code/modules/mob/living/carbon/human/human_movement.dm | 6 ++---- code/modules/mob/living/carbon/monkey/monkey.dm | 6 ++---- code/modules/reagents/Chemistry-Holder.dm | 8 ++++++++ code/modules/reagents/Chemistry-Reagents.dm | 5 ++++- code/setup.dm | 1 + 5 files changed, 17 insertions(+), 9 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 2454b72fc34..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,10 +11,6 @@ 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 + staminaloss) 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/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 b71fce2f07a..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 @@ -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 494a5ef03f0..418609d75c3 100644 --- a/code/setup.dm +++ b/code/setup.dm @@ -498,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