mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-19 06:03:14 +00:00
* Renames delta time to be a more obvious name * updates to our code --------- Co-authored-by: oranges <email@oranges.net.nz> Co-authored-by: Gandalf <9026500+Gandalf2k15@users.noreply.github.com>
121 lines
3.3 KiB
Plaintext
121 lines
3.3 KiB
Plaintext
#define RAISE_FIRE_COUNT 3
|
|
#define RAISE_FIRE_TIME 3
|
|
|
|
/datum/hallucination/fire
|
|
random_hallucination_weight = 3
|
|
|
|
/// Are we currently burning our mob?
|
|
var/active = TRUE
|
|
/// What stare of fire are we in?
|
|
var/stage = 0
|
|
|
|
/// What icon file to use for our hallucinator
|
|
var/fire_icon = 'icons/mob/effects/onfire.dmi'
|
|
/// What icon state to use for our hallucinator
|
|
var/fire_icon_state = "human_big_fire"
|
|
/// Our fire overlay we generate
|
|
var/image/fire_overlay
|
|
|
|
/// When should we do our next action of the hallucination?
|
|
var/next_action = 0
|
|
/// How may times do we apply stamina damage to our mob?
|
|
var/times_to_lower_stamina
|
|
/// Are we currently fake-clearing our hallucinated fire?
|
|
var/fire_clearing = FALSE
|
|
/// Are the stages going up or down?
|
|
var/increasing_stages = TRUE
|
|
/// How long have we spent on fire?
|
|
var/time_spent = 0
|
|
|
|
/datum/hallucination/fire/New(mob/living/hallucinator)
|
|
if(ismonkey(hallucinator))
|
|
fire_icon_state = "monkey_big_fire"
|
|
|
|
else if(!ishuman(hallucinator))
|
|
fire_icon_state = "generic_fire"
|
|
|
|
return ..()
|
|
|
|
/datum/hallucination/fire/start()
|
|
hallucinator.set_fire_stacks(max(hallucinator.fire_stacks, 0.1)) //Placebo flammability
|
|
fire_overlay = image(fire_icon, hallucinator, fire_icon_state, ABOVE_MOB_LAYER)
|
|
hallucinator.client?.images |= fire_overlay
|
|
to_chat(hallucinator, span_userdanger("You're set on fire!"))
|
|
hallucinator.throw_alert(ALERT_FIRE, /atom/movable/screen/alert/fire, override = TRUE)
|
|
times_to_lower_stamina = rand(5, 10)
|
|
addtimer(CALLBACK(src, PROC_REF(start_expanding)), 2 SECONDS)
|
|
return TRUE
|
|
|
|
/datum/hallucination/fire/Destroy()
|
|
hallucinator.adjust_fire_stacks(-0.1)
|
|
hallucinator.clear_alert(ALERT_FIRE, clear_override = TRUE)
|
|
hallucinator.clear_alert(ALERT_TEMPERATURE, clear_override = TRUE)
|
|
if(fire_overlay)
|
|
hallucinator.client?.images -= fire_overlay
|
|
fire_overlay = null
|
|
|
|
STOP_PROCESSING(SSfastprocess, src)
|
|
return ..()
|
|
|
|
/datum/hallucination/fire/proc/start_expanding()
|
|
if(QDELETED(src))
|
|
return
|
|
|
|
START_PROCESSING(SSfastprocess, src)
|
|
|
|
/datum/hallucination/fire/process(seconds_per_tick)
|
|
if(QDELETED(src))
|
|
return
|
|
|
|
if(hallucinator.fire_stacks <= 0)
|
|
clear_fire()
|
|
|
|
time_spent += seconds_per_tick
|
|
|
|
if(fire_clearing)
|
|
next_action -= seconds_per_tick
|
|
if(next_action < 0)
|
|
stage -= 1
|
|
update_temp()
|
|
next_action += 3
|
|
|
|
else if(increasing_stages)
|
|
var/new_stage = min(round(time_spent / RAISE_FIRE_TIME), RAISE_FIRE_COUNT)
|
|
if(stage != new_stage)
|
|
stage = new_stage
|
|
update_temp()
|
|
|
|
if(stage == RAISE_FIRE_COUNT)
|
|
increasing_stages = FALSE
|
|
|
|
else if(times_to_lower_stamina)
|
|
next_action -= seconds_per_tick
|
|
if(next_action < 0)
|
|
hallucinator.adjustStaminaLoss(15)
|
|
next_action += 2
|
|
times_to_lower_stamina -= 1
|
|
|
|
else
|
|
clear_fire()
|
|
|
|
/datum/hallucination/fire/proc/update_temp()
|
|
if(stage <= 0)
|
|
hallucinator.clear_alert(ALERT_TEMPERATURE, clear_override = TRUE)
|
|
else
|
|
hallucinator.clear_alert(ALERT_TEMPERATURE, clear_override = TRUE)
|
|
hallucinator.throw_alert(ALERT_TEMPERATURE, /atom/movable/screen/alert/hot, stage, override = TRUE)
|
|
|
|
/datum/hallucination/fire/proc/clear_fire()
|
|
if(!active)
|
|
return
|
|
|
|
active = FALSE
|
|
hallucinator.clear_alert(ALERT_FIRE, clear_override = TRUE)
|
|
hallucinator.client?.images -= fire_overlay
|
|
fire_overlay = null
|
|
fire_clearing = TRUE
|
|
next_action = 0
|
|
|
|
#undef RAISE_FIRE_COUNT
|
|
#undef RAISE_FIRE_TIME
|