config based

This commit is contained in:
silicons
2020-09-21 17:36:30 -07:00
parent 9fef16964c
commit 7249fe058f
8 changed files with 65 additions and 42 deletions
+2
View File
@@ -8,6 +8,8 @@
for(var/datum/atom_hud/data/diagnostic/diag_hud in GLOB.huds)
diag_hud.add_to_hud(src)
faction += "[REF(src)]"
stamina_buffer = INFINITY
UpdateStaminaBuffer()
GLOB.mob_living_list += src
/mob/living/prepare_huds()
+1 -7
View File
@@ -159,15 +159,9 @@
//---End
// Stamina Buffer---
/// Our maximum stamina buffer
var/stamina_buffer_max = STAMINA_BUFFER_CAPACITY
/// Our stamina buffer
var/stamina_buffer = STAMINA_BUFFER_CAPACITY
var/stamina_buffer
/// Stamina buffer regen modifier
var/stamina_buffer_regen_mod = 1
/// Standard stamina buffer regen per second
var/stamina_buffer_regen = STAMINA_BUFFER_REGEN_PER_SECOND
/// Standard stamina buffer regen per second with combat mode
var/stamina_buffer_regen_combat = STAMINA_BUFFER_REGEN_PER_SECOND_COMBAT
/// Last time stamina buffer regen was done
var/stamina_buffer_regen_last = 0
+23 -15
View File
@@ -20,18 +20,28 @@
* Updates our stamina buffer amount.
*/
/mob/living/proc/UpdateStaminaBuffer(updating_hud = TRUE)
var/time = world.time - stamina_buffer_regen_last
var/missing_stamina_percent = getStaminaLoss() / STAMINA_CRIT
var/stamina_buffer_max = src.stamina_buffer_max * (1 - (missing_stamina_percent * STAMINA_BUFFER_STAMCRIT_CAPACITY_PERCENT_PENALTY))
stamina_buffer_regen_last = world.time
if(stamina_buffer > stamina_buffer_max)
stamina_buffer = stamina_buffer_max
if(!(combat_flags & COMBAT_FLAG_STAMINA_BUFFER))
return
var/combat_mode = !SEND_SIGNAL(src, COMSIG_COMBAT_MODE_CHECK, COMBAT_MODE_INACTIVE)
var/action_penalty = (((world.time - last_action) <= STAMINA_BUFFER_REGEN_ACTION_PENALTY_TIME) && STAMINA_BUFFER_REGEN_ACTION_PENALTY_FACTOR) || 1
var/stamina_penalty = 1 - (missing_stamina_percent * STAMINA_BUFFER_STAMCRIT_REGEN_PERCENT_PENALTY)
var/regen = time * 0.1 * ((combat_mode? stamina_buffer_regen_combat : stamina_buffer_regen) * stamina_buffer_regen_mod)
stamina_buffer += min((stamina_buffer_max - stamina_buffer), action_penalty * stamina_penalty * regen)
var/time = world.time - stamina_buffer_regen_last
CONFIG_CACHE_ENTRY_AND_FETCH_VALUE(number/stamina_combat/buffer_max, buffer_max)
stamina_buffer_regen_last = world.time
if(stamina_buffer >= buffer_max)
stamina_buffer = buffer_max
return
else if(!time)
return
CONFIG_CACHE_ENTRY_AND_FETCH_VALUE(number/stamina_combat/out_of_combat_timer, out_of_combat_timer)
CONFIG_CACHE_ENTRY_AND_FETCH_VALUE(number/stamina_combat/base_regeneration, base_regeneration)
CONFIG_CACHE_ENTRY_AND_FETCH_VALUE(number/stamina_combat/combat_regeneration, combat_regeneration)
CONFIG_CACHE_ENTRY_AND_FETCH_VALUE(number/stamina_combat/missing_percent_regeneration_out_of_combat, missing_percent_regeneration_out_of_combat)
CONFIG_CACHE_ENTRY_AND_FETCH_VALUE(number/stamina_combat/post_action_penalty_delay, post_action_penalty_delay)
CONFIG_CACHE_ENTRY_AND_FETCH_VALUE(number/stamina_combat/post_action_penalty_factor, post_action_penalty_factor)
var/base_regen = (SEND_SIGNAL(src, COMSIG_COMBAT_MODE_CHECK, COMBAT_MODE_INACTIVE))? base_regeneration : combat_regeneration
var/time_since_last_action = world.time - last_action
var/action_penalty = (((time_since_last_action) < (post_action_penalty_delay * 10)) && post_action_penalty_factor) || 1
var/out_of_combat_bonus = (time_since_last_action < (out_of_combat_timer * 10))? ((buffer_max - stamina_buffer) * (missing_percent_regeneration_out_of_combat * 0.01)) : 0
var/regen = ((base_regen * action_penalty) + out_of_combat_bonus) * time * 0.1 * stamina_buffer_regen_mod
stamina_buffer += min((buffer_max - stamina_buffer), regen)
if(updating_hud)
hud_used?.staminabuffer?.mark_dirty()
@@ -39,7 +49,5 @@
* Boosts our stamina buffer by this much.
*/
/mob/living/proc/RechargeStaminaBuffer(amount)
var/missing_stamina_percent = getStaminaLoss() / STAMINA_CRIT
var/stamina_buffer_max = src.stamina_buffer_max * (1 - (missing_stamina_percent * STAMINA_BUFFER_STAMCRIT_CAPACITY_PERCENT_PENALTY))
stamina_buffer += min(amount, stamina_buffer_max - stamina_buffer)
hud_used?.staminabuffer?.mark_dirty()
stamina_buffer += abs(amount)
UpdateStaminaBuffer()