From 5d40d4b9a2b357e2ca4ce4527912aa7576465dcd Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Wed, 22 May 2019 12:18:47 -0700 Subject: [PATCH] sprint stamina stuff --- code/_onclick/hud/human.dm | 3 ++ .../code/_onclick/hud/screen_objects.dm | 22 ----------- modular_citadel/code/_onclick/hud/sprint.dm | 38 +++++++++++++++++++ .../modules/mob/living/carbon/damage_procs.dm | 18 +++++++++ .../mob/living/carbon/human/human_movement.dm | 2 +- .../code/modules/mob/living/carbon/life.dm | 2 + .../code/modules/mob/living/damage_procs.dm | 3 ++ .../code/modules/mob/living/living.dm | 12 ++++++ tgstation.dme | 4 +- 9 files changed, 80 insertions(+), 24 deletions(-) create mode 100644 modular_citadel/code/_onclick/hud/sprint.dm create mode 100644 modular_citadel/code/modules/mob/living/carbon/life.dm diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index 01e118aaed..0ba7ccbefd 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -319,6 +319,9 @@ staminas = new /obj/screen/staminas() infodisplay += staminas + sprint_buffer = new + infodisplay += sprint_buffer + if(!CONFIG_GET(flag/disable_stambuffer)) staminabuffer = new /obj/screen/staminabuffer() infodisplay += staminabuffer diff --git a/modular_citadel/code/_onclick/hud/screen_objects.dm b/modular_citadel/code/_onclick/hud/screen_objects.dm index 511627b81f..3a0eb364cb 100644 --- a/modular_citadel/code/_onclick/hud/screen_objects.dm +++ b/modular_citadel/code/_onclick/hud/screen_objects.dm @@ -1,25 +1,3 @@ -/obj/screen/mov_intent - icon = 'modular_citadel/icons/ui/screen_midnight.dmi' - -/obj/screen/sprintbutton - name = "toggle sprint" - icon = 'modular_citadel/icons/ui/screen_midnight.dmi' - icon_state = "act_sprint" - layer = ABOVE_HUD_LAYER - 0.1 - -/obj/screen/sprintbutton/Click() - if(ishuman(usr)) - var/mob/living/carbon/human/H = usr - H.togglesprint() - -/obj/screen/sprintbutton/proc/insert_witty_toggle_joke_here(mob/living/carbon/human/H) - if(!H) - return - if(H.sprinting) - icon_state = "act_sprint_on" - else - icon_state = "act_sprint" - /obj/screen/restbutton name = "rest" icon = 'modular_citadel/icons/ui/screen_midnight.dmi' diff --git a/modular_citadel/code/_onclick/hud/sprint.dm b/modular_citadel/code/_onclick/hud/sprint.dm new file mode 100644 index 0000000000..6de63ad55a --- /dev/null +++ b/modular_citadel/code/_onclick/hud/sprint.dm @@ -0,0 +1,38 @@ +/obj/screen/mov_intent + icon = 'modular_citadel/icons/ui/screen_midnight.dmi' + +/obj/screen/sprintbutton + name = "toggle sprint" + icon = 'modular_citadel/icons/ui/screen_midnight.dmi' + icon_state = "act_sprint" + layer = ABOVE_HUD_LAYER - 0.1 + +/obj/screen/sprintbutton/Click() + if(ishuman(usr)) + var/mob/living/carbon/human/H = usr + H.togglesprint() + +/obj/screen/sprintbutton/proc/insert_witty_toggle_joke_here(mob/living/carbon/human/H) + if(!H) + return + if(H.sprinting) + icon_state = "act_sprint_on" + else + icon_state = "act_sprint" + +//Sprint buffer onscreen code. +/datum/hud/var/obj/screen/sprint_buffer/sprint_buffer + +/obj/screen/sprint_buffer + name = "sprint ubffer" + icon = 'icons/effects/progressbar.dmi' + icon_state = "prog_bar_100" + +/obj/screen/sprint_buffer/Click() + if(isliving(usr)) + var/mob/living/L = usr + to_chat(L, "Your sprint buffer's maximum capacity is [L.sprint_buffer_max]. It is currently at [L.sprint_buffer], regenerating at [L.sprint_buffer_regen_ds * 10] per second. \ + Sprinting while this is empty will incur a [L.sprint_stamina_cost] stamina cost per tile.") + +/obj/screen/sprint_buffer/proc/update_to_mob(mob/living/L) + icon_state = "prog_bar_[round(min((L.sprint_buffer / L.sprint_buffer_max) * 100, 100), 5)]" diff --git a/modular_citadel/code/modules/mob/living/carbon/damage_procs.dm b/modular_citadel/code/modules/mob/living/carbon/damage_procs.dm index c2c581d282..298a3cc4f1 100644 --- a/modular_citadel/code/modules/mob/living/carbon/damage_procs.dm +++ b/modular_citadel/code/modules/mob/living/carbon/damage_procs.dm @@ -18,3 +18,21 @@ if(recoveringstam && amount > 20) incomingstammult = max(0.01, incomingstammult/(amount*0.05)) return amount + +/mob/living/carbon/doSprintLossTiles(tiles) + doSprintBufferRegen(FALSE) //first regen. + if(sprint_buffer >= 1) + var/use = min(tiles, sprint_buffer) + sprint_buffer -= use + tiles -= use + if(!tiles) //we had enough, we're done! + return + adjustStaminaLoss(tiles * sprint_stamina_cost) //use stamina to cover deficit. + update_hud_sprint_bar() + +/mob/living/carbon/proc/doSprintBufferRegen(updating = TRUE) + var/diff = world.time - sprint_buffer_regen_last + sprint_buffer_regen_last = world.time + sprint_buffer = min(sprint_buffer_max, sprint_buffer + sprint_buffer_regen_ds * diff) + if(updating) + update_hud_sprint_bar() diff --git a/modular_citadel/code/modules/mob/living/carbon/human/human_movement.dm b/modular_citadel/code/modules/mob/living/carbon/human/human_movement.dm index 2a1c790b2a..409864c900 100644 --- a/modular_citadel/code/modules/mob/living/carbon/human/human_movement.dm +++ b/modular_citadel/code/modules/mob/living/carbon/human/human_movement.dm @@ -5,7 +5,7 @@ var/oldpseudoheight = pseudo_z_axis . = ..() if(. && sprinting && !(movement_type & FLYING) && canmove && !resting && m_intent == MOVE_INTENT_RUN && has_gravity(loc) && !pulledby) - adjustStaminaLossBuffered(0.3) + doSprintLossTiles(1) if((oldpseudoheight - pseudo_z_axis) >= 8) to_chat(src, "You trip off of the elevated surface!") for(var/obj/item/I in held_items) diff --git a/modular_citadel/code/modules/mob/living/carbon/life.dm b/modular_citadel/code/modules/mob/living/carbon/life.dm new file mode 100644 index 0000000000..2c390edb9c --- /dev/null +++ b/modular_citadel/code/modules/mob/living/carbon/life.dm @@ -0,0 +1,2 @@ +/mob/living/carbon/Life() + doSprintBufferRegen() diff --git a/modular_citadel/code/modules/mob/living/damage_procs.dm b/modular_citadel/code/modules/mob/living/damage_procs.dm index 8323386eff..ce81c7aae7 100644 --- a/modular_citadel/code/modules/mob/living/damage_procs.dm +++ b/modular_citadel/code/modules/mob/living/damage_procs.dm @@ -1,2 +1,5 @@ /mob/living/proc/adjustStaminaLossBuffered(amount, updating_stamina = TRUE, forced = FALSE) return + +/mob/living/proc/doSprintLossTiles(amount) + return diff --git a/modular_citadel/code/modules/mob/living/living.dm b/modular_citadel/code/modules/mob/living/living.dm index b07b8ed64b..7d2d686ee8 100644 --- a/modular_citadel/code/modules/mob/living/living.dm +++ b/modular_citadel/code/modules/mob/living/living.dm @@ -8,6 +8,14 @@ var/intentionalresting = FALSE var/attemptingcrawl = FALSE + //Sprint buffer--- + var/sprint_buffer = 35 //Tiles + var/sprint_buffer_max + var/sprint_buffer_regen_ds = 0.2 //Tiles per world.time decisecond + var/sprint_buffer_regen_last = 0 //last world.time this was regen'd for math. + var/sprint_stamina_cost = 0.3 //stamina loss per tile while insufficient sprint buffer. + //---End + /mob/living/movement_delay(ignorewalk = 0) . = ..() if(resting) @@ -118,3 +126,7 @@ filters -= CIT_FILTER_STAMINACRIT update_canmove() update_health_hud() + +/mob/living/proc/update_hud_sprint_bar() + if(hud_used && hud_used.sprint_buffer) + hud_used.sprint_buffer.update_to_mob(src) diff --git a/tgstation.dme b/tgstation.dme index ec265f1aea..dda85a331e 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -1226,13 +1226,13 @@ #include "code\modules\antagonists\clockcult\clock_scriptures\scripture_scripts.dm" #include "code\modules\antagonists\clockcult\clock_structures\_trap_object.dm" #include "code\modules\antagonists\clockcult\clock_structures\ark_of_the_clockwork_justicar.dm" -#include "code\modules\antagonists\clockcult\clock_structures\stargazer.dm" #include "code\modules\antagonists\clockcult\clock_structures\clockwork_obelisk.dm" #include "code\modules\antagonists\clockcult\clock_structures\eminence_spire.dm" #include "code\modules\antagonists\clockcult\clock_structures\heralds_beacon.dm" #include "code\modules\antagonists\clockcult\clock_structures\mania_motor.dm" #include "code\modules\antagonists\clockcult\clock_structures\ocular_warden.dm" #include "code\modules\antagonists\clockcult\clock_structures\ratvar_the_clockwork_justicar.dm" +#include "code\modules\antagonists\clockcult\clock_structures\stargazer.dm" #include "code\modules\antagonists\clockcult\clock_structures\taunting_trail.dm" #include "code\modules\antagonists\clockcult\clock_structures\wall_gear.dm" #include "code\modules\antagonists\clockcult\clock_structures\trap_triggers\lever.dm" @@ -2795,6 +2795,7 @@ #include "modular_citadel\code\_onclick\item_attack.dm" #include "modular_citadel\code\_onclick\other_mobs.dm" #include "modular_citadel\code\_onclick\hud\screen_objects.dm" +#include "modular_citadel\code\_onclick\hud\sprint.dm" #include "modular_citadel\code\_onclick\hud\stamina.dm" #include "modular_citadel\code\controllers\configuration\entries\general.dm" #include "modular_citadel\code\controllers\subsystem\job.dm" @@ -2948,6 +2949,7 @@ #include "modular_citadel\code\modules\mob\living\status_procs.dm" #include "modular_citadel\code\modules\mob\living\carbon\carbon.dm" #include "modular_citadel\code\modules\mob\living\carbon\damage_procs.dm" +#include "modular_citadel\code\modules\mob\living\carbon\life.dm" #include "modular_citadel\code\modules\mob\living\carbon\reindex_screams.dm" #include "modular_citadel\code\modules\mob\living\carbon\human\human.dm" #include "modular_citadel\code\modules\mob\living\carbon\human\human_defense.dm"