mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-23 13:10:02 +01:00
Remove spawn in favour of timers (#50562)
* Remove spawn in favour of timers * aaaaaa * Qdels Co-Authored-By: Rohesie <rohesie@gmail.com> Co-authored-by: Rohesie <rohesie@gmail.com>
This commit is contained in:
@@ -90,16 +90,18 @@
|
||||
say("Processing hub calibration to target...")
|
||||
calibrating = TRUE
|
||||
power_station.update_icon()
|
||||
spawn(50 * (3 - power_station.teleporter_hub.accuracy)) //Better parts mean faster calibration
|
||||
calibrating = FALSE
|
||||
if(check_hub_connection())
|
||||
power_station.teleporter_hub.calibrated = TRUE
|
||||
say("Calibration complete.")
|
||||
else
|
||||
say("Error: Unable to detect hub.")
|
||||
power_station.update_icon()
|
||||
addtimer(CALLBACK(src, .proc/finish_calibration), 50 * (3 - power_station.teleporter_hub.accuracy)) //Better parts mean faster calibration
|
||||
. = TRUE
|
||||
|
||||
/obj/machinery/computer/teleporter/proc/finish_calibration()
|
||||
calibrating = FALSE
|
||||
if(check_hub_connection())
|
||||
power_station.teleporter_hub.calibrated = TRUE
|
||||
say("Calibration complete.")
|
||||
else
|
||||
say("Error: Unable to detect hub.")
|
||||
power_station.update_icon()
|
||||
|
||||
/obj/machinery/computer/teleporter/proc/check_hub_connection()
|
||||
if(!power_station)
|
||||
return FALSE
|
||||
|
||||
@@ -348,9 +348,8 @@
|
||||
hacking = TRUE
|
||||
screen = MSG_MON_SCREEN_HACKED
|
||||
//Time it takes to bruteforce is dependant on the password length.
|
||||
spawn(100*length(linkedServer.decryptkey))
|
||||
if(src && linkedServer && usr)
|
||||
BruteForce(usr)
|
||||
addtimer(CALLBACK(src, .proc/finish_bruteforce, usr), 100*length(linkedServer.decryptkey))
|
||||
|
||||
//Delete the log.
|
||||
if (href_list["delete_logs"])
|
||||
//Are they on the view logs screen?
|
||||
@@ -444,6 +443,13 @@
|
||||
|
||||
return attack_hand(usr)
|
||||
|
||||
/obj/machinery/computer/message_monitor/proc/finish_bruteforce(mob/user)
|
||||
if(!QDELETED(user))
|
||||
BruteForce(user)
|
||||
return
|
||||
hacking = FALSE
|
||||
screen = MSG_MON_SCREEN_MAIN
|
||||
|
||||
#undef MSG_MON_SCREEN_MAIN
|
||||
#undef MSG_MON_SCREEN_LOGS
|
||||
#undef MSG_MON_SCREEN_HACKED
|
||||
|
||||
@@ -148,6 +148,36 @@
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/structure/spider/spiderling/proc/cancel_vent_move()
|
||||
forceMove(entry_vent)
|
||||
entry_vent = null
|
||||
|
||||
/obj/structure/spider/spiderling/proc/vent_move(obj/machinery/atmospherics/components/unary/vent_pump/exit_vent)
|
||||
if(QDELETED(exit_vent) || exit_vent.welded)
|
||||
cancel_vent_move()
|
||||
return
|
||||
|
||||
forceMove(exit_vent)
|
||||
var/travel_time = round(get_dist(loc, exit_vent.loc) / 2)
|
||||
addtimer(CALLBACK(src, .proc/do_vent_move, exit_vent, travel_time), travel_time)
|
||||
|
||||
/obj/structure/spider/spiderling/proc/do_vent_move(obj/machinery/atmospherics/components/unary/vent_pump/exit_vent, travel_time)
|
||||
if(QDELETED(exit_vent) || exit_vent.welded)
|
||||
cancel_vent_move()
|
||||
return
|
||||
|
||||
if(prob(50))
|
||||
audible_message("<span class='hear'>You hear something scampering through the ventilation ducts.</span>")
|
||||
|
||||
addtimer(CALLBACK(src, .proc/finish_vent_move, exit_vent), travel_time)
|
||||
|
||||
/obj/structure/spider/spiderling/proc/finish_vent_move(obj/machinery/atmospherics/components/unary/vent_pump/exit_vent)
|
||||
if(QDELETED(exit_vent) || exit_vent.welded)
|
||||
cancel_vent_move()
|
||||
return
|
||||
forceMove(exit_vent.loc)
|
||||
entry_vent = null
|
||||
|
||||
/obj/structure/spider/spiderling/process()
|
||||
if(travelling_in_vent)
|
||||
if(isturf(loc))
|
||||
@@ -167,34 +197,8 @@
|
||||
visible_message("<B>[src] scrambles into the ventilation ducts!</B>", \
|
||||
"<span class='hear'>You hear something scampering through the ventilation ducts.</span>")
|
||||
|
||||
spawn(rand(20,60))
|
||||
if(!exit_vent || exit_vent.welded)
|
||||
forceMove(entry_vent)
|
||||
entry_vent = null
|
||||
return
|
||||
addtimer(CALLBACK(src, .proc/vent_move, exit_vent), rand(20,60))
|
||||
|
||||
forceMove(exit_vent)
|
||||
var/travel_time = round(get_dist(loc, exit_vent.loc) / 2)
|
||||
spawn(travel_time)
|
||||
|
||||
if(!exit_vent || exit_vent.welded)
|
||||
forceMove(entry_vent)
|
||||
entry_vent = null
|
||||
return
|
||||
|
||||
if(prob(50))
|
||||
audible_message("<span class='hear'>You hear something scampering through the ventilation ducts.</span>")
|
||||
sleep(travel_time)
|
||||
|
||||
if(!exit_vent || exit_vent.welded)
|
||||
forceMove(entry_vent)
|
||||
entry_vent = null
|
||||
return
|
||||
forceMove(exit_vent.loc)
|
||||
entry_vent = null
|
||||
var/area/new_area = get_area(loc)
|
||||
if(new_area)
|
||||
new_area.Entered(src)
|
||||
//=================
|
||||
|
||||
else if(prob(33))
|
||||
|
||||
@@ -1081,9 +1081,11 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
for(var/atom/A in src)
|
||||
A.emp_act(severity)
|
||||
if (!(. & EMP_PROTECT_SELF))
|
||||
emped += 1
|
||||
spawn(200 * severity)
|
||||
emped -= 1
|
||||
emped++
|
||||
addtimer(CALLBACK(src, .proc/emp_end), 200 * severity)
|
||||
|
||||
/obj/item/pda/proc/emp_end()
|
||||
emped--
|
||||
|
||||
/proc/get_viewable_pdas(sort_by_job = FALSE)
|
||||
. = list()
|
||||
|
||||
@@ -88,20 +88,19 @@ effective or pretty fucking useless.
|
||||
var/cooldown = get_cooldown()
|
||||
used = TRUE
|
||||
icon_state = "health1"
|
||||
handle_cooldown(cooldown) // splits off to handle the cooldown while handling wavelength
|
||||
addtimer(VARSET_CALLBACK(src, used, FALSE), cooldown)
|
||||
addtimer(VARSET_CALLBACK(src, icon_state, "health"), cooldown)
|
||||
to_chat(user, "<span class='warning'>Successfully irradiated [M].</span>")
|
||||
spawn((wavelength+(intensity*4))*5)
|
||||
if(M)
|
||||
if(intensity >= 5)
|
||||
M.apply_effect(round(intensity/0.075), EFFECT_UNCONSCIOUS)
|
||||
M.rad_act(intensity*10)
|
||||
addtimer(CALLBACK(src, .proc/radiation_aftereffect, M), (wavelength+(intensity*4))*5)
|
||||
else
|
||||
to_chat(user, "<span class='warning'>The radioactive microlaser is still recharging.</span>")
|
||||
|
||||
/obj/item/healthanalyzer/rad_laser/proc/handle_cooldown(cooldown)
|
||||
spawn(cooldown)
|
||||
used = FALSE
|
||||
icon_state = "health"
|
||||
/obj/item/healthanalyzer/rad_laser/proc/radiation_aftereffect(mob/living/M)
|
||||
if(QDELETED(M))
|
||||
return
|
||||
if(intensity >= 5)
|
||||
M.apply_effect(round(intensity/0.075), EFFECT_UNCONSCIOUS)
|
||||
M.rad_act(intensity*10)
|
||||
|
||||
/obj/item/healthanalyzer/rad_laser/proc/get_cooldown()
|
||||
return round(max(10, (stealth*30 + intensity*5 - wavelength/4)))
|
||||
|
||||
@@ -109,21 +109,22 @@
|
||||
if(open_status == STATION_TUBE_CLOSED)
|
||||
icon_state = "opening_[base_icon]"
|
||||
open_status = STATION_TUBE_OPENING
|
||||
spawn(OPEN_DURATION)
|
||||
if(open_status == STATION_TUBE_OPENING)
|
||||
icon_state = "open_[base_icon]"
|
||||
open_status = STATION_TUBE_OPEN
|
||||
addtimer(CALLBACK(src, .proc/finish_animation), OPEN_DURATION)
|
||||
|
||||
/obj/structure/transit_tube/station/proc/finish_animation()
|
||||
switch(open_status)
|
||||
if(STATION_TUBE_OPENING)
|
||||
icon_state = "open_[base_icon]"
|
||||
open_status = STATION_TUBE_OPEN
|
||||
if(STATION_TUBE_CLOSING)
|
||||
icon_state = "closed_[base_icon]"
|
||||
open_status = STATION_TUBE_CLOSED
|
||||
|
||||
/obj/structure/transit_tube/station/proc/close_animation()
|
||||
if(open_status == STATION_TUBE_OPEN)
|
||||
icon_state = "closing_[base_icon]"
|
||||
open_status = STATION_TUBE_CLOSING
|
||||
spawn(CLOSE_DURATION)
|
||||
if(open_status == STATION_TUBE_CLOSING)
|
||||
icon_state = "closed_[base_icon]"
|
||||
open_status = STATION_TUBE_CLOSED
|
||||
|
||||
addtimer(CALLBACK(src, .proc/finish_animation), CLOSE_DURATION)
|
||||
|
||||
/obj/structure/transit_tube/station/proc/launch_pod()
|
||||
if(launch_cooldown >= world.time)
|
||||
@@ -145,19 +146,25 @@
|
||||
|
||||
/obj/structure/transit_tube/station/pod_stopped(obj/structure/transit_tube_pod/pod, from_dir)
|
||||
pod_moving = TRUE
|
||||
spawn(5)
|
||||
if(reverse_launch)
|
||||
pod.setDir(tube_dirs[1]) //turning the pod around for next launch.
|
||||
launch_cooldown = world.time + cooldown_delay
|
||||
open_animation()
|
||||
sleep(OPEN_DURATION + 2)
|
||||
pod_moving = FALSE
|
||||
if(!QDELETED(pod))
|
||||
var/datum/gas_mixture/floor_mixture = loc.return_air()
|
||||
floor_mixture.archive()
|
||||
pod.air_contents.archive()
|
||||
pod.air_contents.share(floor_mixture, 1) //mix the pod's gas mixture with the tile it's on
|
||||
air_update_turf()
|
||||
addtimer(CALLBACK(src, .proc/start_stopped, pod), 5)
|
||||
|
||||
/obj/structure/transit_tube/station/proc/start_stopped(obj/structure/transit_tube_pod/pod)
|
||||
if(QDELETED(pod))
|
||||
return
|
||||
if(reverse_launch)
|
||||
pod.setDir(tube_dirs[1]) //turning the pod around for next launch.
|
||||
launch_cooldown = world.time + cooldown_delay
|
||||
open_animation()
|
||||
addtimer(CALLBACK(src, .proc/finish_stopped, pod), OPEN_DURATION + 2)
|
||||
|
||||
/obj/structure/transit_tube/station/proc/finish_stopped(obj/structure/transit_tube_pod/pod)
|
||||
pod_moving = FALSE
|
||||
if(!QDELETED(pod))
|
||||
var/datum/gas_mixture/floor_mixture = loc.return_air()
|
||||
floor_mixture.archive()
|
||||
pod.air_contents.archive()
|
||||
pod.air_contents.share(floor_mixture, 1) //mix the pod's gas mixture with the tile it's on
|
||||
air_update_turf()
|
||||
|
||||
/obj/structure/transit_tube/station/init_tube_dirs()
|
||||
switch(dir)
|
||||
|
||||
@@ -340,9 +340,7 @@
|
||||
if(BODY_ZONE_PRECISE_EYES)
|
||||
user.set_machine(src)
|
||||
user.reset_perspective(target)
|
||||
spawn(100)
|
||||
user.reset_perspective(null)
|
||||
user.unset_machine()
|
||||
addtimer(CALLBACK(src, .proc/reset, user), 10 SECONDS)
|
||||
if(BODY_ZONE_R_LEG,BODY_ZONE_L_LEG)
|
||||
to_chat(user, "<span class='notice'>You move the doll's legs around.</span>")
|
||||
var/turf/T = get_step(target,pick(GLOB.cardinals))
|
||||
@@ -357,6 +355,12 @@
|
||||
GiveHint(target,user)
|
||||
cooldown = world.time + cooldown_time
|
||||
|
||||
/obj/item/voodoo/proc/reset(mob/user)
|
||||
if(QDELETED(user))
|
||||
return
|
||||
user.reset_perspective(null)
|
||||
user.unset_machine()
|
||||
|
||||
/obj/item/voodoo/proc/update_targets()
|
||||
possible = list()
|
||||
if(!voodoo_link)
|
||||
|
||||
@@ -128,7 +128,7 @@
|
||||
on = !on
|
||||
|
||||
if("inject" in signal.data)
|
||||
spawn inject()
|
||||
INVOKE_ASYNC(src, .proc/inject)
|
||||
return
|
||||
|
||||
if("set_volume_rate" in signal.data)
|
||||
|
||||
@@ -90,69 +90,72 @@
|
||||
alarms_to_clear += message
|
||||
alarm_types_clear[type] += 1
|
||||
|
||||
if(!in_cooldown)
|
||||
spawn(3 * 10) // 3 seconds
|
||||
if(in_cooldown)
|
||||
return
|
||||
|
||||
if(alarms_to_show.len < 5)
|
||||
for(var/msg in alarms_to_show)
|
||||
to_chat(src, msg)
|
||||
else if(alarms_to_show.len)
|
||||
addtimer(CALLBACK(src, .proc/show_alarms), 3 SECONDS)
|
||||
|
||||
var/msg = "--- "
|
||||
/mob/living/silicon/proc/show_alarms()
|
||||
if(alarms_to_show.len < 5)
|
||||
for(var/msg in alarms_to_show)
|
||||
to_chat(src, msg)
|
||||
else if(alarms_to_show.len)
|
||||
|
||||
if(alarm_types_show["Burglar"])
|
||||
msg += "BURGLAR: [alarm_types_show["Burglar"]] alarms detected. - "
|
||||
var/msg = "--- "
|
||||
|
||||
if(alarm_types_show["Motion"])
|
||||
msg += "MOTION: [alarm_types_show["Motion"]] alarms detected. - "
|
||||
if(alarm_types_show["Burglar"])
|
||||
msg += "BURGLAR: [alarm_types_show["Burglar"]] alarms detected. - "
|
||||
|
||||
if(alarm_types_show["Fire"])
|
||||
msg += "FIRE: [alarm_types_show["Fire"]] alarms detected. - "
|
||||
if(alarm_types_show["Motion"])
|
||||
msg += "MOTION: [alarm_types_show["Motion"]] alarms detected. - "
|
||||
|
||||
if(alarm_types_show["Atmosphere"])
|
||||
msg += "ATMOSPHERE: [alarm_types_show["Atmosphere"]] alarms detected. - "
|
||||
if(alarm_types_show["Fire"])
|
||||
msg += "FIRE: [alarm_types_show["Fire"]] alarms detected. - "
|
||||
|
||||
if(alarm_types_show["Power"])
|
||||
msg += "POWER: [alarm_types_show["Power"]] alarms detected. - "
|
||||
if(alarm_types_show["Atmosphere"])
|
||||
msg += "ATMOSPHERE: [alarm_types_show["Atmosphere"]] alarms detected. - "
|
||||
|
||||
if(alarm_types_show["Camera"])
|
||||
msg += "CAMERA: [alarm_types_show["Camera"]] alarms detected. - "
|
||||
if(alarm_types_show["Power"])
|
||||
msg += "POWER: [alarm_types_show["Power"]] alarms detected. - "
|
||||
|
||||
msg += "<A href=?src=[REF(src)];showalerts=1'>\[Show Alerts\]</a>"
|
||||
to_chat(src, msg)
|
||||
if(alarm_types_show["Camera"])
|
||||
msg += "CAMERA: [alarm_types_show["Camera"]] alarms detected. - "
|
||||
|
||||
if(alarms_to_clear.len < 3)
|
||||
for(var/msg in alarms_to_clear)
|
||||
to_chat(src, msg)
|
||||
msg += "<A href=?src=[REF(src)];showalerts=1'>\[Show Alerts\]</a>"
|
||||
to_chat(src, msg)
|
||||
|
||||
else if(alarms_to_clear.len)
|
||||
var/msg = "--- "
|
||||
if(alarms_to_clear.len < 3)
|
||||
for(var/msg in alarms_to_clear)
|
||||
to_chat(src, msg)
|
||||
|
||||
if(alarm_types_clear["Motion"])
|
||||
msg += "MOTION: [alarm_types_clear["Motion"]] alarms cleared. - "
|
||||
else if(alarms_to_clear.len)
|
||||
var/msg = "--- "
|
||||
|
||||
if(alarm_types_clear["Fire"])
|
||||
msg += "FIRE: [alarm_types_clear["Fire"]] alarms cleared. - "
|
||||
if(alarm_types_clear["Motion"])
|
||||
msg += "MOTION: [alarm_types_clear["Motion"]] alarms cleared. - "
|
||||
|
||||
if(alarm_types_clear["Atmosphere"])
|
||||
msg += "ATMOSPHERE: [alarm_types_clear["Atmosphere"]] alarms cleared. - "
|
||||
if(alarm_types_clear["Fire"])
|
||||
msg += "FIRE: [alarm_types_clear["Fire"]] alarms cleared. - "
|
||||
|
||||
if(alarm_types_clear["Power"])
|
||||
msg += "POWER: [alarm_types_clear["Power"]] alarms cleared. - "
|
||||
if(alarm_types_clear["Atmosphere"])
|
||||
msg += "ATMOSPHERE: [alarm_types_clear["Atmosphere"]] alarms cleared. - "
|
||||
|
||||
if(alarm_types_show["Camera"])
|
||||
msg += "CAMERA: [alarm_types_clear["Camera"]] alarms cleared. - "
|
||||
if(alarm_types_clear["Power"])
|
||||
msg += "POWER: [alarm_types_clear["Power"]] alarms cleared. - "
|
||||
|
||||
msg += "<A href=?src=[REF(src)];showalerts=1'>\[Show Alerts\]</a>"
|
||||
to_chat(src, msg)
|
||||
if(alarm_types_show["Camera"])
|
||||
msg += "CAMERA: [alarm_types_clear["Camera"]] alarms cleared. - "
|
||||
|
||||
msg += "<A href=?src=[REF(src)];showalerts=1'>\[Show Alerts\]</a>"
|
||||
to_chat(src, msg)
|
||||
|
||||
|
||||
alarms_to_show = list()
|
||||
alarms_to_clear = list()
|
||||
for(var/key in alarm_types_show)
|
||||
alarm_types_show[key] = 0
|
||||
for(var/key in alarm_types_clear)
|
||||
alarm_types_clear[key] = 0
|
||||
alarms_to_show.Cut()
|
||||
alarms_to_clear.Cut()
|
||||
for(var/key in alarm_types_show)
|
||||
alarm_types_show[key] = 0
|
||||
for(var/key in alarm_types_clear)
|
||||
alarm_types_clear[key] = 0
|
||||
|
||||
/mob/living/silicon/can_inject(mob/user, error_msg)
|
||||
if(error_msg)
|
||||
|
||||
@@ -357,10 +357,12 @@
|
||||
ejectpai(0)
|
||||
if(on)
|
||||
turn_off()
|
||||
spawn(severity*300)
|
||||
stat &= ~EMPED
|
||||
if(was_on)
|
||||
turn_on()
|
||||
addtimer(CALLBACK(src, .proc/emp_reset, was_on), severity*30 SECONDS)
|
||||
|
||||
/mob/living/simple_animal/bot/proc/emp_reset(was_on)
|
||||
stat &= ~EMPED
|
||||
if(was_on)
|
||||
turn_on()
|
||||
|
||||
/mob/living/simple_animal/bot/proc/set_custom_texts() //Superclass for setting hack texts. Appears only if a set is not given to a bot locally.
|
||||
text_hack = "You hack [name]."
|
||||
@@ -595,10 +597,11 @@ Pass a positive integer as an argument to override a bot's default speed.
|
||||
|
||||
/mob/living/simple_animal/bot/proc/bot_patrol()
|
||||
patrol_step()
|
||||
spawn(5)
|
||||
if(mode == BOT_PATROL)
|
||||
patrol_step()
|
||||
return
|
||||
addtimer(CALLBACK(src, .proc/do_patrol), 5)
|
||||
|
||||
/mob/living/simple_animal/bot/proc/do_patrol()
|
||||
if(mode == BOT_PATROL)
|
||||
patrol_step()
|
||||
|
||||
/mob/living/simple_animal/bot/proc/start_patrol()
|
||||
|
||||
@@ -648,15 +651,17 @@ Pass a positive integer as an argument to override a bot's default speed.
|
||||
|
||||
var/moved = bot_move(patrol_target)//step_towards(src, next) // attempt to move
|
||||
if(!moved) //Couldn't proceed the next step of the path BOT_STEP_MAX_RETRIES times
|
||||
spawn(2)
|
||||
calc_path()
|
||||
if(path.len == 0)
|
||||
find_patrol_target()
|
||||
tries = 0
|
||||
addtimer(CALLBACK(src, .proc/patrol_step_not_moved), 2)
|
||||
|
||||
else // no path, so calculate new one
|
||||
mode = BOT_START_PATROL
|
||||
|
||||
/mob/living/simple_animal/bot/proc/patrol_step_not_moved()
|
||||
calc_path()
|
||||
if(!length(path))
|
||||
find_patrol_target()
|
||||
tries = 0
|
||||
|
||||
// finds the nearest beacon to self
|
||||
/mob/living/simple_animal/bot/proc/find_patrol_target()
|
||||
nearest_beacon = null
|
||||
@@ -757,11 +762,13 @@ Pass a positive integer as an argument to override a bot's default speed.
|
||||
|
||||
/mob/living/simple_animal/bot/proc/calc_summon_path(turf/avoid)
|
||||
check_bot_access()
|
||||
spawn()
|
||||
set_path(get_path_to(src, summon_target, /turf/proc/Distance_cardinal, 0, 150, id=access_card, exclude=avoid))
|
||||
if(!path.len) //Cannot reach target. Give up and announce the issue.
|
||||
speak("Summon command failed, destination unreachable.",radio_channel)
|
||||
bot_reset()
|
||||
INVOKE_ASYNC(src, .proc/do_calc_summon_path, avoid)
|
||||
|
||||
/mob/living/simple_animal/bot/proc/do_calc_summon_path(turf/avoid)
|
||||
set_path(get_path_to(src, summon_target, /turf/proc/Distance_cardinal, 0, 150, id=access_card, exclude=avoid))
|
||||
if(!length(path)) //Cannot reach target. Give up and announce the issue.
|
||||
speak("Summon command failed, destination unreachable.",radio_channel)
|
||||
bot_reset()
|
||||
|
||||
/mob/living/simple_animal/bot/proc/summon_step()
|
||||
|
||||
@@ -779,13 +786,15 @@ Pass a positive integer as an argument to override a bot's default speed.
|
||||
|
||||
var/moved = bot_move(summon_target, 3) // Move attempt
|
||||
if(!moved)
|
||||
spawn(2)
|
||||
calc_summon_path()
|
||||
tries = 0
|
||||
addtimer(CALLBACK(src, .proc/summon_step_not_moved), 2)
|
||||
|
||||
else // no path, so calculate new one
|
||||
calc_summon_path()
|
||||
|
||||
/mob/living/simple_animal/bot/proc/summon_step_not_moved()
|
||||
calc_summon_path()
|
||||
tries = 0
|
||||
|
||||
/mob/living/simple_animal/bot/Bump(atom/A) //Leave no door unopened!
|
||||
. = ..()
|
||||
if((istype(A, /obj/machinery/door/airlock) || istype(A, /obj/machinery/door/window)) && (!isnull(access_card)))
|
||||
|
||||
@@ -184,25 +184,28 @@
|
||||
to_chat(src, "<span class='userdanger'>You are tipped over by [M]!</span>")
|
||||
Paralyze(60, ignore_canstun = TRUE)
|
||||
icon_state = icon_dead
|
||||
spawn(rand(20,50))
|
||||
if(!stat && M)
|
||||
icon_state = icon_living
|
||||
var/external
|
||||
var/internal
|
||||
switch(pick(1,2,3,4))
|
||||
if(1,2,3)
|
||||
var/text = pick("imploringly.", "pleadingly.",
|
||||
"with a resigned expression.")
|
||||
external = "[src] looks at [M] [text]"
|
||||
internal = "You look at [M] [text]"
|
||||
if(4)
|
||||
external = "[src] seems resigned to its fate."
|
||||
internal = "You resign yourself to your fate."
|
||||
visible_message("<span class='notice'>[external]</span>",
|
||||
"<span class='revennotice'>[internal]</span>")
|
||||
addtimer(CALLBACK(src, .proc/cow_tipped, M), rand(20,50))
|
||||
|
||||
else
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/cow/proc/cow_tipped(mob/living/carbon/M)
|
||||
if(QDELETED(M) || stat)
|
||||
return
|
||||
icon_state = icon_living
|
||||
var/external
|
||||
var/internal
|
||||
if(prob(75))
|
||||
var/text = pick("imploringly.", "pleadingly.",
|
||||
"with a resigned expression.")
|
||||
external = "[src] looks at [M] [text]"
|
||||
internal = "You look at [M] [text]"
|
||||
else
|
||||
external = "[src] seems resigned to its fate."
|
||||
internal = "You resign yourself to your fate."
|
||||
visible_message("<span class='notice'>[external]</span>",
|
||||
"<span class='revennotice'>[internal]</span>")
|
||||
|
||||
///Wisdom cow, gives XP to a random skill and speaks wisdoms
|
||||
/mob/living/simple_animal/cow/wisdom
|
||||
name = "wisdom cow"
|
||||
|
||||
Reference in New Issue
Block a user