mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-19 02:54:41 +01:00
Merge remote-tracking branch 'refs/remotes/ParadiseSS13/master'
This commit is contained in:
@@ -27,12 +27,6 @@
|
||||
#define SHUTTLE_TRANSIT_DURATION 300 // 5 minutes = 300 seconds - how long it takes for the shuttle to get to the station
|
||||
#define SHUTTLE_TRANSIT_DURATION_RETURN 120 // 2 minutes = 120 seconds - for some reason it takes less time to come back, go figure.
|
||||
|
||||
//Shuttle moving status
|
||||
#define SHUTTLE_IDLE 0
|
||||
#define SHUTTLE_WARMUP 1
|
||||
#define SHUTTLE_INTRANSIT 2
|
||||
#define SHUTTLE_STRANDED 3
|
||||
|
||||
//Ferry shuttle processing status
|
||||
#define IDLE_STATE 0
|
||||
#define WAIT_LAUNCH 1
|
||||
|
||||
@@ -120,7 +120,7 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
|
||||
|
||||
var/area/signal_origin = get_area(user)
|
||||
var/emergency_reason = "\nNature of emergency:\n\n[call_reason]"
|
||||
if(seclevel2num(get_security_level()) == SEC_LEVEL_RED) // There is a serious threat we gotta move no time to give them five minutes.
|
||||
if(seclevel2num(get_security_level()) >= SEC_LEVEL_RED) // There is a serious threat we gotta move no time to give them five minutes.
|
||||
emergency.request(null, 0.5, signal_origin, html_decode(emergency_reason), 1)
|
||||
else
|
||||
emergency.request(null, 1, signal_origin, html_decode(emergency_reason), 0)
|
||||
@@ -142,7 +142,7 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
|
||||
return
|
||||
if(ticker.mode.name == "meteor")
|
||||
return
|
||||
if(seclevel2num(get_security_level()) == SEC_LEVEL_RED)
|
||||
if(seclevel2num(get_security_level()) >= SEC_LEVEL_RED)
|
||||
if(emergency.timeLeft(1) < emergencyCallTime * 0.25)
|
||||
return
|
||||
else
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
var/feature_object_spell_system = 0 //spawns a spellbook which gives object-type spells instead of verb-type spells for the wizard
|
||||
var/traitor_scaling = 0 //if amount of traitors scales based on amount of players
|
||||
var/protect_roles_from_antagonist = 0// If security and such can be tratior/cult/other
|
||||
var/continous_rounds = 0 // Gamemodes which end instantly will instead keep on going until the round ends by escape shuttle or nuke.
|
||||
var/continuous_rounds = 0 // Gamemodes which end instantly will instead keep on going until the round ends by escape shuttle or nuke.
|
||||
var/allow_Metadata = 0 // Metadata is supported.
|
||||
var/popup_admin_pm = 0 //adminPMs to non-admins show in a pop-up 'reply' window when set to 1.
|
||||
var/Ticklag = 0.9
|
||||
@@ -449,7 +449,7 @@
|
||||
config.gateway_delay = text2num(value)
|
||||
|
||||
if("continuous_rounds")
|
||||
config.continous_rounds = 1
|
||||
config.continuous_rounds = 1
|
||||
|
||||
if("ghost_interaction")
|
||||
config.ghost_interaction = 1
|
||||
|
||||
@@ -65,7 +65,9 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
|
||||
caster.reset_view(0)
|
||||
return 0
|
||||
|
||||
if((user.z in config.admin_levels) && !centcom_cancast) //Certain spells are not allowed on the centcom zlevel
|
||||
if(user.z == ZLEVEL_CENTCOMM && !centcom_cancast) //Certain spells are not allowed on the centcom zlevel
|
||||
return 0
|
||||
if(user.z == ZLEVEL_CENTCOMM && ticker.mode.name == "ragin' mages")
|
||||
return 0
|
||||
|
||||
if(!skipcharge)
|
||||
|
||||
@@ -20,9 +20,9 @@
|
||||
action_icon_state = "skeleton"
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/lichdom/New()
|
||||
if(!config.continous_rounds)
|
||||
if(!config.continuous_rounds)
|
||||
existence_stops_round_end = 1
|
||||
config.continous_rounds = 1
|
||||
config.continuous_rounds = 1
|
||||
..()
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/lichdom/Destroy()
|
||||
@@ -31,7 +31,7 @@
|
||||
if(istype(S,/obj/effect/proc_holder/spell/targeted/lichdom) && S != src)
|
||||
return ..()
|
||||
if(existence_stops_round_end)
|
||||
config.continous_rounds = 0
|
||||
config.continuous_rounds = 0
|
||||
return ..()
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/lichdom/cast(list/targets,mob/user = usr)
|
||||
|
||||
@@ -7,7 +7,6 @@ var/round_start_time = 0
|
||||
|
||||
var/hide_mode = 0 // leave here at 0 ! setup() will take care of it when needed for Secret mode -walter0o
|
||||
var/datum/game_mode/mode = null
|
||||
var/post_game = 0
|
||||
var/event_time = null
|
||||
var/event = 0
|
||||
|
||||
@@ -386,16 +385,13 @@ var/round_start_time = 0
|
||||
|
||||
//emergency_shuttle.process() DONE THROUGH PROCESS SCHEDULER
|
||||
|
||||
var/game_finished = 0
|
||||
var/mode_finished = 0
|
||||
if (config.continous_rounds)
|
||||
game_finished = (mode.station_was_nuked)
|
||||
mode_finished = (!post_game && mode.check_finished())
|
||||
var/game_finished = shuttle_master.emergency.mode >= SHUTTLE_ENDGAME || mode.station_was_nuked
|
||||
if (config.continuous_rounds)
|
||||
mode.check_finished() // some modes contain var-changing code in here, so call even if we don't uses result
|
||||
else
|
||||
game_finished = (mode.check_finished())
|
||||
mode_finished = game_finished
|
||||
game_finished |= mode.check_finished()
|
||||
|
||||
if(!mode.explosion_in_progress && game_finished && (mode_finished || post_game))
|
||||
if(!mode.explosion_in_progress && game_finished)
|
||||
current_state = GAME_STATE_FINISHED
|
||||
auto_toggle_ooc(1) // Turn it on
|
||||
spawn
|
||||
@@ -409,18 +405,6 @@ var/round_start_time = 0
|
||||
else
|
||||
world.Reboot("Round ended.", "end_proper", "proper completion")
|
||||
|
||||
else if (mode_finished)
|
||||
post_game = 1
|
||||
|
||||
mode.cleanup()
|
||||
|
||||
//call a transfer shuttle vote
|
||||
spawn(50)
|
||||
if(!round_end_announced) // Spam Prevention. Now it should announce only once.
|
||||
world << "\red The round has ended!"
|
||||
round_end_announced = 1
|
||||
vote.autotransfer()
|
||||
|
||||
return 1
|
||||
|
||||
proc/getfactionbyname(var/name)
|
||||
|
||||
@@ -148,7 +148,7 @@
|
||||
if (station_captured && !to_nuke_or_not_to_nuke)
|
||||
return 1
|
||||
if (is_malf_ai_dead())
|
||||
if(config.continous_rounds)
|
||||
if(config.continuous_rounds)
|
||||
if(shuttle_master && shuttle_master.emergencyNoEscape)
|
||||
shuttle_master.emergencyNoEscape = 0
|
||||
malf_mode_declared = 0
|
||||
|
||||
@@ -111,10 +111,7 @@
|
||||
..()
|
||||
statpanel("Status")
|
||||
|
||||
if(shuttle_master.emergency.mode >= SHUTTLE_RECALL)
|
||||
var/timeleft = shuttle_master.emergency.timeLeft()
|
||||
if(timeleft > 0)
|
||||
stat(null, "[add_zero(num2text((timeleft / 60) % 60),2)]:[add_zero(num2text(timeleft % 60), 2)]")
|
||||
show_stat_emergency_shuttle_eta()
|
||||
|
||||
if (client.statpanel == "Status")
|
||||
stat("Chemicals", chemicals)
|
||||
|
||||
@@ -262,6 +262,9 @@
|
||||
/obj/machinery/porta_turret/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
|
||||
S << "<span class='warning'>Attempting to dismantle this machine would result in an immediate counterattack. Aborting.</span>"
|
||||
|
||||
/obj/spacepod/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
|
||||
S << "<span class='warning'>Destroying this vehicle would destroy us. Aborting.</span>"
|
||||
|
||||
/mob/living/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
|
||||
S.DisperseTarget(src)
|
||||
|
||||
|
||||
@@ -203,15 +203,11 @@
|
||||
//Checks if the round is over//
|
||||
///////////////////////////////
|
||||
/datum/game_mode/revolution/check_finished()
|
||||
if(config.continous_rounds)
|
||||
if(config.continuous_rounds)
|
||||
if(finished != 0)
|
||||
if(shuttle_master && shuttle_master.emergencyNoEscape)
|
||||
shuttle_master.emergencyNoEscape = 0
|
||||
return ..()
|
||||
if(finished != 0)
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
return finished != 0
|
||||
|
||||
///////////////////////////////////////////////////
|
||||
//Deals with converting players to the revolution//
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/datum/game_mode/wizard/raginmages
|
||||
name = "Ragin' Mages"
|
||||
name = "ragin' mages"
|
||||
config_tag = "raginmages"
|
||||
required_players = 1
|
||||
required_players_secret = 15
|
||||
|
||||
@@ -1,15 +1,19 @@
|
||||
|
||||
|
||||
/mob/proc/rightandwrong(var/summon_type) //0 = Summon Guns, 1 = Summon Magic
|
||||
var/list/gunslist = list("taser","egun","laser","revolver","detective","c20r","nuclear","deagle","gyrojet","pulse","silenced","cannon","doublebarrel","shotgun","combatshotgun","bulldog","mateba","sabr","crossbow","saw","car","boltaction","arg")
|
||||
var/list/magiclist = list("fireball","smoke","blind","mindswap","forcewall","knock","horsemask","charge", "summonitem", "wandnothing", "wanddeath", "wandresurrection", "wandpolymorph", "wandteleport", "wanddoor", "wandfireball", "staffhealing", "armor", "scrying", "staffdoor", "special","voodoo")
|
||||
var/list/gunslist = list("taser","egun","laser","revolver","detective","c20r","nuclear","deagle","gyrojet","pulse","suppressed","cannon","doublebarrel","shotgun","combatshotgun","bulldog","mateba","sabr","crossbow","saw","car","boltaction","arg","uzi","turret","pulsecarbine","decloner","mindflayer","hyperkinetic","advplasmacutter","wormhole","wt550","grenadelauncher","medibeam")
|
||||
var/list/magiclist = list("fireball","smoke","blind","mindswap","forcewall","knock","horsemask","charge", "summonitem", "wandnothing", "wanddeath", "wandresurrection", "wandpolymorph", "wandteleport", "wanddoor", "wandfireball", "staffhealing", "armor", "scrying", "staffdoor", "special","voodoo","special")
|
||||
var/list/magicspeciallist = list("staffchange","staffanimation", "wandbelt", "contract", "staffchaos","necromantic")
|
||||
|
||||
usr << "<B>You summoned [summon_type ? "magic" : "guns"]!</B>"
|
||||
message_admins("[key_name_admin(usr)] summoned [summon_type ? "magic" : "guns"]!")
|
||||
|
||||
for(var/mob/living/carbon/human/H in player_list)
|
||||
if(H.stat == 2 || !(H.client)) continue
|
||||
if(H.stat == 2 || !(H.client))
|
||||
continue
|
||||
if(H.mind)
|
||||
if(H.mind.special_role == "Wizard" || H.mind.special_role == "apprentice") continue
|
||||
if(H.mind.special_role == "Wizard" || H.mind.special_role == "apprentice")
|
||||
continue
|
||||
var/randomizeguns = pick(gunslist)
|
||||
var/randomizemagic = pick(magiclist)
|
||||
var/randomizemagicspecial = pick(magicspeciallist)
|
||||
@@ -25,43 +29,65 @@
|
||||
new /obj/item/weapon/gun/projectile/revolver(get_turf(H))
|
||||
if("detective")
|
||||
new /obj/item/weapon/gun/projectile/revolver/detective(get_turf(H))
|
||||
if("c20r")
|
||||
new /obj/item/weapon/gun/projectile/automatic/c20r(get_turf(H))
|
||||
if("nuclear")
|
||||
new /obj/item/weapon/gun/energy/gun/nuclear(get_turf(H))
|
||||
if("deagle")
|
||||
new /obj/item/weapon/gun/projectile/automatic/pistol/deagle/camo(get_turf(H))
|
||||
if("gyrojet")
|
||||
new /obj/item/weapon/gun/projectile/automatic/gyropistol(get_turf(H))
|
||||
if("pulse")
|
||||
new /obj/item/weapon/gun/energy/pulse_rifle(get_turf(H))
|
||||
if("silenced")
|
||||
if("suppressed")
|
||||
new /obj/item/weapon/gun/projectile/automatic/pistol(get_turf(H))
|
||||
new /obj/item/weapon/suppressor(get_turf(H))
|
||||
if("cannon")
|
||||
new /obj/item/weapon/gun/energy/lasercannon(get_turf(H))
|
||||
if("doublebarrel")
|
||||
new /obj/item/weapon/gun/projectile/revolver/doublebarrel(get_turf(H))
|
||||
if("shotgun")
|
||||
new /obj/item/weapon/gun/projectile/shotgun/(get_turf(H))
|
||||
new /obj/item/weapon/gun/projectile/shotgun(get_turf(H))
|
||||
if("combatshotgun")
|
||||
new /obj/item/weapon/gun/projectile/shotgun/automatic/combat(get_turf(H))
|
||||
if("bulldog")
|
||||
new /obj/item/weapon/gun/projectile/automatic/shotgun/bulldog(get_turf(H))
|
||||
if("arg")
|
||||
new /obj/item/weapon/gun/projectile/automatic/ar(get_turf(H))
|
||||
if("mateba")
|
||||
new /obj/item/weapon/gun/projectile/revolver/mateba(get_turf(H))
|
||||
if("boltaction")
|
||||
new /obj/item/weapon/gun/projectile/shotgun/boltaction(get_turf(H))
|
||||
if("uzi")
|
||||
new /obj/item/weapon/gun/projectile/automatic/mini_uzi(get_turf(H))
|
||||
if("cannon")
|
||||
new /obj/item/weapon/gun/energy/lasercannon(get_turf(H))
|
||||
if("crossbow")
|
||||
new /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow/large(get_turf(H))
|
||||
if("nuclear")
|
||||
new /obj/item/weapon/gun/energy/gun/nuclear(get_turf(H))
|
||||
if("sabr")
|
||||
new /obj/item/weapon/gun/projectile/automatic/proto(get_turf(H))
|
||||
if("crossbow")
|
||||
new /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow(get_turf(H))
|
||||
if("bulldog")
|
||||
new /obj/item/weapon/gun/projectile/automatic/shotgun/bulldog(get_turf(H))
|
||||
if("c20r")
|
||||
new /obj/item/weapon/gun/projectile/automatic/c20r(get_turf(H))
|
||||
if("saw")
|
||||
new /obj/item/weapon/gun/projectile/automatic/l6_saw(get_turf(H))
|
||||
if("car")
|
||||
new /obj/item/weapon/gun/projectile/automatic/m90(get_turf(H))
|
||||
if("boltaction")
|
||||
new /obj/item/weapon/gun/projectile/shotgun/boltaction(get_turf(H))
|
||||
if("turret")
|
||||
new /obj/item/weapon/gun/energy/gun/turret(get_turf(H))
|
||||
if("pulsecarbine")
|
||||
new /obj/item/weapon/gun/energy/pulse_rifle/carbine(get_turf(H))
|
||||
if("decloner")
|
||||
new /obj/item/weapon/gun/energy/decloner(get_turf(H))
|
||||
if("mindflayer")
|
||||
new /obj/item/weapon/gun/energy/mindflayer(get_turf(H))
|
||||
if("hyperkinetic")
|
||||
new /obj/item/weapon/gun/energy/kinetic_accelerator/hyper(get_turf(H))
|
||||
if("advplasmacutter")
|
||||
new /obj/item/weapon/gun/energy/plasmacutter/adv(get_turf(H))
|
||||
if("wormhole")
|
||||
new /obj/item/weapon/gun/energy/wormhole_projector(get_turf(H))
|
||||
if("wt550")
|
||||
new /obj/item/weapon/gun/projectile/automatic/wt550(get_turf(H))
|
||||
if("grenadelauncher")
|
||||
new /obj/item/weapon/gun/projectile/revolver/grenadelauncher(get_turf(H))
|
||||
if("medibeam")
|
||||
new /obj/item/weapon/gun/medbeam(get_turf(H))
|
||||
else
|
||||
switch (randomizemagic)
|
||||
if("fireball")
|
||||
@@ -80,6 +106,8 @@
|
||||
new /obj/item/weapon/spellbook/oneuse/horsemask(get_turf(H))
|
||||
if("charge")
|
||||
new /obj/item/weapon/spellbook/oneuse/charge(get_turf(H))
|
||||
if("summonitem")
|
||||
new /obj/item/weapon/spellbook/oneuse/summonitem(get_turf(H))
|
||||
if("wandnothing")
|
||||
new /obj/item/weapon/gun/magic/wand(get_turf(H))
|
||||
if("wanddeath")
|
||||
@@ -109,10 +137,8 @@
|
||||
H.see_in_dark = 8
|
||||
H.see_invisible = SEE_INVISIBLE_LEVEL_TWO
|
||||
H << "<span class='notice'>The walls suddenly disappear.</span>"
|
||||
|
||||
if("voodoo")
|
||||
new /obj/item/voodoo(get_turf(H))
|
||||
|
||||
if("special")
|
||||
magiclist -= "special" //only one super OP item per summoning max
|
||||
switch (randomizemagicspecial)
|
||||
|
||||
@@ -412,6 +412,12 @@
|
||||
cost = 0
|
||||
log_name = "SG"
|
||||
|
||||
/datum/spellbook_entry/summon/guns/IsAvailible()
|
||||
if(ticker.mode.name == "ragin' mages")
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
|
||||
/datum/spellbook_entry/summon/guns/Buy(var/mob/living/carbon/human/user,var/obj/item/weapon/spellbook/book)
|
||||
feedback_add_details("wizard_spell_learned",log_name)
|
||||
user.rightandwrong(0)
|
||||
@@ -427,6 +433,12 @@
|
||||
cost = 0
|
||||
log_name = "SU"
|
||||
|
||||
/datum/spellbook_entry/summon/magic/IsAvailible()
|
||||
if(ticker.mode.name == "ragin' mages")
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
|
||||
/datum/spellbook_entry/summon/magic/Buy(var/mob/living/carbon/human/user,var/obj/item/weapon/spellbook/book)
|
||||
feedback_add_details("wizard_spell_learned",log_name)
|
||||
user.rightandwrong(1)
|
||||
|
||||
@@ -203,10 +203,6 @@
|
||||
|
||||
|
||||
/datum/game_mode/wizard/check_finished()
|
||||
|
||||
if(config.continous_rounds)
|
||||
return ..()
|
||||
|
||||
var/wizards_alive = 0
|
||||
var/traitors_alive = 0
|
||||
for(var/datum/mind/wizard in wizards)
|
||||
|
||||
@@ -135,15 +135,7 @@
|
||||
return ..()
|
||||
|
||||
/datum/game_mode/xenos/check_finished()
|
||||
if(config.continous_rounds)
|
||||
if(result)
|
||||
return ..()
|
||||
if(shuttle_master && shuttle_master.emergency.mode >= SHUTTLE_ESCAPE)
|
||||
return ..()
|
||||
if(result || station_was_nuked)
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
return result != 0
|
||||
|
||||
/datum/game_mode/xenos/proc/xenos_alive()
|
||||
var/list/livingxenos = list()
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
|
||||
#define OP_COMPUTER_COOLDOWN 60
|
||||
|
||||
/obj/machinery/computer/operating
|
||||
name = "operating computer"
|
||||
@@ -7,10 +8,18 @@
|
||||
icon_keyboard = "med_key"
|
||||
icon_screen = "crew"
|
||||
circuit = /obj/item/weapon/circuitboard/operating
|
||||
var/mob/living/carbon/human/victim = null
|
||||
var/obj/machinery/optable/table = null
|
||||
|
||||
var/mob/living/carbon/human/victim = null
|
||||
light_color = LIGHT_COLOR_PURE_BLUE
|
||||
var/verbose = 1 //general speaker toggle
|
||||
var/patientName = null
|
||||
var/oxyAlarm = 30 //oxy damage at which the computer will beep
|
||||
var/choice = 0 //just for going into and out of the options menu
|
||||
var/healthAnnounce = 1 //healther announcer toggle
|
||||
var/crit = 1 //crit beeping toggle
|
||||
var/nextTick = OP_COMPUTER_COOLDOWN
|
||||
var/healthAlarm = 50
|
||||
var/oxy = 1 //oxygen beeping toggle
|
||||
|
||||
/obj/machinery/computer/operating/New()
|
||||
..()
|
||||
@@ -24,7 +33,7 @@
|
||||
add_fingerprint(user)
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
interact(user)
|
||||
ui_interact(user)
|
||||
|
||||
|
||||
/obj/machinery/computer/operating/attack_hand(mob/user)
|
||||
@@ -36,45 +45,119 @@
|
||||
|
||||
|
||||
add_fingerprint(user)
|
||||
interact(user)
|
||||
ui_interact(user)
|
||||
|
||||
|
||||
///obj/machinery/computer/operating/interact(mob/user)
|
||||
// if ( ((get_dist(src, user) > 1) && !isobserver(user)) || (stat & (BROKEN|NOPOWER)) )
|
||||
// if (!istype(user, /mob/living/silicon))
|
||||
// user.unset_machine()
|
||||
// user << browse(null, "window=op")
|
||||
// return
|
||||
//
|
||||
// user.set_machine(src)
|
||||
// var/dat = "<HEAD><TITLE>Operating Computer</TITLE><META HTTP-EQUIV='Refresh' CONTENT='10'></HEAD><BODY>\n"
|
||||
// dat += "<A HREF='?src=\ref[user];mach_close=op'>Close</A><br><br>" //| <A HREF='?src=\ref[user];update=1'>Update</A>"
|
||||
// if(src.table && (src.table.check_victim()))
|
||||
// src.victim = src.table.victim
|
||||
// dat += {"
|
||||
//<B>Patient Information:</B><BR>
|
||||
//<BR>
|
||||
//<B>Name:</B> [src.victim.real_name]<BR>
|
||||
//<B>Age:</B> [src.victim.age]<BR>
|
||||
//<B>Blood Type:</B> [src.victim.b_type]<BR>
|
||||
//<BR>
|
||||
//<B>Health:</B> [src.victim.health]<BR>
|
||||
//<B>Brute Damage:</B> [src.victim.getBruteLoss()]<BR>
|
||||
//<B>Toxins Damage:</B> [src.victim.getToxLoss()]<BR>
|
||||
//<B>Fire Damage:</B> [src.victim.getFireLoss()]<BR>
|
||||
//<B>Suffocation Damage:</B> [src.victim.getOxyLoss()]<BR>
|
||||
//<B>Patient Status:</B> [src.victim.stat ? "Non-Responsive" : "Awake"]<BR>
|
||||
//<B>Heartbeat rate:</B> [victim.get_pulse(GETPULSE_TOOL)]<BR>
|
||||
//"}
|
||||
// else
|
||||
// src.victim = null
|
||||
// dat += {"
|
||||
//<B>Patient Information:</B><BR>
|
||||
//<BR>
|
||||
//<B>No Patient Detected</B>
|
||||
//"}
|
||||
// user << browse(dat, "window=op")
|
||||
// onclose(user, "op")
|
||||
|
||||
/obj/machinery/computer/operating/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)//ui is mostly copy pasta from the sleeper ui
|
||||
var/data[0]
|
||||
var/mob/living/carbon/human/occupant = src.table.victim
|
||||
data["hasOccupant"] = occupant ? 1 : 0
|
||||
var/occupantData[0]
|
||||
|
||||
if (occupant)
|
||||
occupantData["name"] = occupant.name
|
||||
occupantData["stat"] = occupant.stat
|
||||
occupantData["health"] = occupant.health
|
||||
occupantData["maxHealth"] = occupant.maxHealth
|
||||
occupantData["minHealth"] = config.health_threshold_dead
|
||||
occupantData["bruteLoss"] = occupant.getBruteLoss()
|
||||
occupantData["oxyLoss"] = occupant.getOxyLoss()
|
||||
occupantData["toxLoss"] = occupant.getToxLoss()
|
||||
occupantData["fireLoss"] = occupant.getFireLoss()
|
||||
occupantData["paralysis"] = occupant.paralysis
|
||||
occupantData["hasBlood"] = 0
|
||||
occupantData["bodyTemperature"] = occupant.bodytemperature
|
||||
occupantData["maxTemp"] = 1000 // If you get a burning vox armalis into the sleeper, congratulations
|
||||
// Because we can put simple_animals in here, we need to do something tricky to get things working nice
|
||||
occupantData["temperatureSuitability"] = 0 // 0 is the baseline
|
||||
if (ishuman(occupant) && occupant.species)
|
||||
var/datum/species/sp = occupant.species
|
||||
if (occupant.bodytemperature < sp.cold_level_3)
|
||||
occupantData["temperatureSuitability"] = -3
|
||||
else if (occupant.bodytemperature < sp.cold_level_2)
|
||||
occupantData["temperatureSuitability"] = -2
|
||||
else if (occupant.bodytemperature < sp.cold_level_1)
|
||||
occupantData["temperatureSuitability"] = -1
|
||||
else if (occupant.bodytemperature > sp.heat_level_3)
|
||||
occupantData["temperatureSuitability"] = 3
|
||||
else if (occupant.bodytemperature > sp.heat_level_2)
|
||||
occupantData["temperatureSuitability"] = 2
|
||||
else if (occupant.bodytemperature > sp.heat_level_1)
|
||||
occupantData["temperatureSuitability"] = 1
|
||||
else if (istype(occupant, /mob/living/simple_animal))
|
||||
var/mob/living/simple_animal/silly = occupant
|
||||
if (silly.bodytemperature < silly.minbodytemp)
|
||||
occupantData["temperatureSuitability"] = -3
|
||||
else if (silly.bodytemperature > silly.maxbodytemp)
|
||||
occupantData["temperatureSuitability"] = 3
|
||||
// Blast you, imperial measurement system
|
||||
occupantData["btCelsius"] = occupant.bodytemperature - T0C
|
||||
occupantData["btFaren"] = ((occupant.bodytemperature - T0C) * (9.0/5.0))+ 32
|
||||
|
||||
if (ishuman(occupant) && occupant.vessel && !(occupant.species && occupant.species.flags & NO_BLOOD))
|
||||
occupantData["pulse"] = occupant.get_pulse(GETPULSE_TOOL)
|
||||
occupantData["hasBlood"] = 1
|
||||
occupantData["bloodLevel"] = round(occupant.vessel.get_reagent_amount("blood"))
|
||||
occupantData["bloodMax"] = occupant.max_blood
|
||||
occupantData["bloodPercent"] = round(100*(occupant.vessel.get_reagent_amount("blood")/occupant.max_blood), 0.01) //copy pasta ends here
|
||||
|
||||
occupantData["bloodType"]=occupant.b_type
|
||||
|
||||
data["occupant"] = occupantData
|
||||
data["verbose"]=verbose
|
||||
data["oxyAlarm"]=oxyAlarm
|
||||
data["choice"]=choice
|
||||
data["health"]=healthAnnounce
|
||||
data["crit"]=crit
|
||||
data["healthAlarm"]=healthAlarm
|
||||
data["oxy"]=oxy
|
||||
|
||||
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if (!ui)
|
||||
ui = new(user, src, ui_key, "op_computer.tmpl", "Patient Monitor", 650, 455)
|
||||
ui.set_initial_data(data)
|
||||
ui.open()
|
||||
ui.set_auto_update(1)
|
||||
|
||||
|
||||
/obj/machinery/computer/operating/interact(mob/user)
|
||||
if ( ((get_dist(src, user) > 1) && !isobserver(user)) || (stat & (BROKEN|NOPOWER)) )
|
||||
if (!istype(user, /mob/living/silicon))
|
||||
user.unset_machine()
|
||||
user << browse(null, "window=op")
|
||||
return
|
||||
|
||||
user.set_machine(src)
|
||||
var/dat = "<HEAD><TITLE>Operating Computer</TITLE><META HTTP-EQUIV='Refresh' CONTENT='10'></HEAD><BODY>\n"
|
||||
dat += "<A HREF='?src=\ref[user];mach_close=op'>Close</A><br><br>" //| <A HREF='?src=\ref[user];update=1'>Update</A>"
|
||||
if(src.table && (src.table.check_victim()))
|
||||
src.victim = src.table.victim
|
||||
dat += {"
|
||||
<B>Patient Information:</B><BR>
|
||||
<BR>
|
||||
<B>Name:</B> [src.victim.real_name]<BR>
|
||||
<B>Age:</B> [src.victim.age]<BR>
|
||||
<B>Blood Type:</B> [src.victim.b_type]<BR>
|
||||
<BR>
|
||||
<B>Health:</B> [src.victim.health]<BR>
|
||||
<B>Brute Damage:</B> [src.victim.getBruteLoss()]<BR>
|
||||
<B>Toxins Damage:</B> [src.victim.getToxLoss()]<BR>
|
||||
<B>Fire Damage:</B> [src.victim.getFireLoss()]<BR>
|
||||
<B>Suffocation Damage:</B> [src.victim.getOxyLoss()]<BR>
|
||||
<B>Patient Status:</B> [src.victim.stat ? "Non-Responsive" : "Stable"]<BR>
|
||||
<B>Heartbeat rate:</B> [victim.get_pulse(GETPULSE_TOOL)]<BR>
|
||||
"}
|
||||
else
|
||||
src.victim = null
|
||||
dat += {"
|
||||
<B>Patient Information:</B><BR>
|
||||
<BR>
|
||||
<B>No Patient Detected</B>
|
||||
"}
|
||||
user << browse(dat, "window=op")
|
||||
onclose(user, "op")
|
||||
|
||||
|
||||
/obj/machinery/computer/operating/Topic(href, href_list)
|
||||
@@ -82,9 +165,48 @@
|
||||
return 1
|
||||
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
|
||||
usr.set_machine(src)
|
||||
|
||||
if(href_list["verboseOn"])
|
||||
verbose=1
|
||||
if(href_list["verboseOff"])
|
||||
verbose=0
|
||||
if(href_list["healthOn"])
|
||||
healthAnnounce=1
|
||||
if(href_list["healthOff"])
|
||||
healthAnnounce=0
|
||||
if(href_list["critOn"])
|
||||
crit=1
|
||||
if(href_list["critOff"])
|
||||
crit=0
|
||||
if(href_list["oxyOn"])
|
||||
oxy=1
|
||||
if(href_list["oxyOff"])
|
||||
oxy=0
|
||||
if(href_list["oxy_adj"]!=0)
|
||||
oxyAlarm=oxyAlarm+text2num(href_list["oxy_adj"])
|
||||
if(href_list["choiceOn"])
|
||||
choice=1
|
||||
if(href_list["choiceOff"])
|
||||
choice=0
|
||||
if(href_list["health_adj"]!=0)
|
||||
healthAlarm=healthAlarm+text2num(href_list["health_adj"])
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/computer/operating/process()
|
||||
if(..())
|
||||
src.updateDialog()
|
||||
|
||||
if(table && table.check_victim())
|
||||
if(verbose)
|
||||
if(patientName!=table.victim.name)
|
||||
patientName=table.victim.name
|
||||
atom_say("New patient detected, loading stats")
|
||||
victim = table.victim
|
||||
atom_say("[victim.real_name], [victim.b_type] blood, [victim.stat ? "Non-Responsive" : "Awake"]")
|
||||
if(nextTick < world.time)
|
||||
nextTick=world.time + OP_COMPUTER_COOLDOWN
|
||||
if(crit && victim.health <= -50 )
|
||||
playsound(src.loc, 'sound/machines/defib_success.ogg', 50, 0)
|
||||
if(oxy && victim.getOxyLoss()>oxyAlarm)
|
||||
playsound(src.loc, 'sound/machines/defib_saftyOff.ogg', 50, 0)
|
||||
if(healthAnnounce && victim.health <= healthAlarm)
|
||||
atom_say("[round(victim.health)]")
|
||||
|
||||
@@ -437,7 +437,7 @@
|
||||
user << "Under directive 7-10, [station_name()] is quarantined until further notice."
|
||||
return
|
||||
|
||||
if(seclevel2num(get_security_level()) == SEC_LEVEL_RED) // There is a serious threat we gotta move no time to give them five minutes.
|
||||
if(seclevel2num(get_security_level()) >= SEC_LEVEL_RED) // There is a serious threat we gotta move no time to give them five minutes.
|
||||
shuttle_master.emergency.request(null, 0.5, null, " Automatic Crew Transfer", 1)
|
||||
else
|
||||
shuttle_master.emergency.request(null, 1, null, " Automatic Crew Transfer", 0)
|
||||
|
||||
@@ -882,8 +882,8 @@ About the new airlock wires panel:
|
||||
src.closeOther.close()
|
||||
return ..()
|
||||
|
||||
/obj/machinery/door/airlock/close(var/forced=0)
|
||||
if(operating || welded || locked)
|
||||
/obj/machinery/door/airlock/close(var/forced=0, var/override = 0)
|
||||
if((operating & !override) || welded || locked)
|
||||
return
|
||||
if(!forced)
|
||||
//despite the name, this wire is for general door control.
|
||||
@@ -918,11 +918,11 @@ About the new airlock wires panel:
|
||||
operating = 1
|
||||
do_animate("closing")
|
||||
src.layer = 3.1
|
||||
sleep(5)
|
||||
if (!override) sleep(5)
|
||||
src.density = 1
|
||||
if(!safe)
|
||||
crush()
|
||||
sleep(5)
|
||||
if(!override) sleep(5)
|
||||
update_icon()
|
||||
if(visible && !glass)
|
||||
set_opacity(1)
|
||||
|
||||
@@ -271,7 +271,7 @@
|
||||
singular_name = "glass sheet"
|
||||
icon_state = "sheet-plasmaglass"
|
||||
materials = list(MAT_GLASS=MINERAL_MATERIAL_AMOUNT*2)
|
||||
origin_tech = "materials=3;plasma=2"
|
||||
origin_tech = "materials=3;plasmatech=2"
|
||||
var/created_window = /obj/structure/window/plasmabasic
|
||||
var/full_window = /obj/structure/window/full/plasmabasic
|
||||
|
||||
@@ -360,7 +360,7 @@
|
||||
singular_name = "reinforced plasma glass sheet"
|
||||
icon_state = "sheet-plasmarglass"
|
||||
materials = list(MAT_METAL=MINERAL_MATERIAL_AMOUNT/2, MAT_GLASS=MINERAL_MATERIAL_AMOUNT*2)
|
||||
origin_tech = "materials=3;plasma=2"
|
||||
origin_tech = "materials=3;plasmatech=2"
|
||||
var/created_window = /obj/structure/window/plasmareinforced
|
||||
var/full_window = /obj/structure/window/full/plasmareinforced
|
||||
|
||||
|
||||
@@ -1753,4 +1753,33 @@ obj/item/toy/cards/deck/syndicate/black
|
||||
/obj/item/toy/figure/warden
|
||||
name = "Warden action figure"
|
||||
icon_state = "warden"
|
||||
toysay = "Execute him for breaking in!"
|
||||
toysay = "Execute him for breaking in!"
|
||||
|
||||
//////////////////////////////////////////////////////
|
||||
// Magic 8-Ball / Conch //
|
||||
//////////////////////////////////////////////////////
|
||||
|
||||
/obj/item/toy/eight_ball
|
||||
name = "Magic 8-Ball"
|
||||
desc = "Mystical! Magical! Ages 8+!"
|
||||
icon = 'icons/obj/toy.dmi'
|
||||
icon_state = "eight-ball"
|
||||
var/use_action = "shakes the ball"
|
||||
var/cooldown = 0
|
||||
var/list/possible_answers = list("Definitely", "All signs point to yes.", "Most likely.", "Yes.", "Ask again later.", "Better not tell you now.", "Future Unclear.", "Maybe.", "Doubtful.", "No.", "Don't count on it.", "Never.")
|
||||
|
||||
/obj/item/toy/eight_ball/attack_self(mob/user as mob)
|
||||
if(!cooldown)
|
||||
var/answer = pick(possible_answers)
|
||||
user.visible_message("<span class='notice'>[user] focuses on their question and [use_action]...</span>")
|
||||
user.visible_message("<span class='notice'>\icon[src] The [src] says \"[answer]\"</span>")
|
||||
spawn(30)
|
||||
cooldown = 0
|
||||
return
|
||||
|
||||
/obj/item/toy/eight_ball/conch
|
||||
name = "Magic Conch Shell"
|
||||
desc = "All hail the Magic Conch!"
|
||||
icon_state = "conch"
|
||||
use_action = "pulls the string"
|
||||
possible_answers = list("Yes.", "No.", "Try asking again.", "Nothing.", "I don't think so.", "Neither.", "Maybe someday.")
|
||||
@@ -461,7 +461,7 @@
|
||||
max_fuel = 40
|
||||
w_class = 3.0
|
||||
materials = list(MAT_METAL=70, MAT_GLASS=120)
|
||||
origin_tech = "engineering=4;plasma=3"
|
||||
origin_tech = "engineering=4;plasmatech=3"
|
||||
var/last_gen = 0
|
||||
change_icons = 0
|
||||
can_off_process = 1
|
||||
|
||||
+52
-48
@@ -1,5 +1,54 @@
|
||||
/mob/var/suiciding = 0
|
||||
|
||||
/mob/living/carbon/human/proc/do_suicide(damagetype, byitem)
|
||||
var/threshold = (config.health_threshold_crit + config.health_threshold_dead) / 2
|
||||
var/dmgamt = maxHealth - threshold
|
||||
|
||||
var/damage_mod = 1
|
||||
switch(damagetype) //Sorry about the magic numbers.
|
||||
//brute = 1, burn = 2, tox = 4, oxy = 8
|
||||
if(15) //4 damage types
|
||||
damage_mod = 4
|
||||
|
||||
if(6, 11, 13, 14) //3 damage types
|
||||
damage_mod = 3
|
||||
|
||||
if(3, 5, 7, 9, 10, 12) //2 damage types
|
||||
damage_mod = 2
|
||||
|
||||
if(1, 2, 4, 8) //1 damage type
|
||||
damage_mod = 1
|
||||
|
||||
else //This should not happen, but if it does, everything should still work
|
||||
damage_mod = 1
|
||||
|
||||
//Do dmgamt damage divided by the number of damage types applied.
|
||||
if(damagetype & BRUTELOSS)
|
||||
adjustBruteLoss(dmgamt / damage_mod)
|
||||
|
||||
if(damagetype & FIRELOSS)
|
||||
adjustFireLoss(dmgamt / damage_mod)
|
||||
|
||||
if(damagetype & TOXLOSS)
|
||||
adjustToxLoss(dmgamt / damage_mod)
|
||||
|
||||
if(damagetype & OXYLOSS)
|
||||
adjustOxyLoss(dmgamt / damage_mod)
|
||||
|
||||
// Failing that...
|
||||
if(!(damagetype & BRUTELOSS) && !(damagetype & FIRELOSS) && !(damagetype & TOXLOSS) && !(damagetype & OXYLOSS))
|
||||
if(species.flags & NO_BREATHE)
|
||||
// the ultimate fallback
|
||||
take_overall_damage(max(dmgamt - getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0), 0)
|
||||
else
|
||||
adjustOxyLoss(max(dmgamt - getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0))
|
||||
|
||||
var/obj/item/organ/external/affected = get_organ("head")
|
||||
if(affected)
|
||||
affected.add_autopsy_data(byitem ? "Suicide by [byitem]" : "Suicide", dmgamt)
|
||||
|
||||
updatehealth()
|
||||
|
||||
/mob/living/carbon/human/verb/suicide()
|
||||
set hidden = 1
|
||||
|
||||
@@ -24,56 +73,11 @@
|
||||
if(held_item)
|
||||
var/damagetype = held_item.suicide_act(src)
|
||||
if(damagetype)
|
||||
var/damage_mod = 1
|
||||
switch(damagetype) //Sorry about the magic numbers.
|
||||
//brute = 1, burn = 2, tox = 4, oxy = 8
|
||||
if(15) //4 damage types
|
||||
damage_mod = 4
|
||||
|
||||
if(6, 11, 13, 14) //3 damage types
|
||||
damage_mod = 3
|
||||
|
||||
if(3, 5, 7, 9, 10, 12) //2 damage types
|
||||
damage_mod = 2
|
||||
|
||||
if(1, 2, 4, 8) //1 damage type
|
||||
damage_mod = 1
|
||||
|
||||
else //This should not happen, but if it does, everything should still work
|
||||
damage_mod = 1
|
||||
|
||||
//Do 175 damage divided by the number of damage types applied.
|
||||
if(damagetype & BRUTELOSS)
|
||||
adjustBruteLoss(175/damage_mod)
|
||||
|
||||
if(damagetype & FIRELOSS)
|
||||
adjustFireLoss(175/damage_mod)
|
||||
|
||||
if(damagetype & TOXLOSS)
|
||||
adjustToxLoss(175/damage_mod)
|
||||
|
||||
if(damagetype & OXYLOSS)
|
||||
adjustOxyLoss(175/damage_mod)
|
||||
|
||||
//If something went wrong, just do normal oxyloss
|
||||
if(!(damagetype | BRUTELOSS) && !(damagetype | FIRELOSS) && !(damagetype | TOXLOSS) && !(damagetype | OXYLOSS))
|
||||
adjustOxyLoss(max(175 - getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0))
|
||||
|
||||
var/obj/item/organ/external/affected = get_organ("head")
|
||||
affected.add_autopsy_data("Suicide by [held_item]", 175)
|
||||
|
||||
updatehealth()
|
||||
do_suicide(damagetype, held_item)
|
||||
return
|
||||
|
||||
|
||||
viewers(src) << pick("\red <b>[src] is attempting to bite \his tongue off! It looks like \he's trying to commit suicide.</b>", \
|
||||
"\red <b>[src] is jamming \his thumbs into \his eye sockets! It looks like \he's trying to commit suicide.</b>", \
|
||||
"\red <b>[src] is twisting \his own neck! It looks like \he's trying to commit suicide.</b>", \
|
||||
"\red <b>[src] is holding \his breath! It looks like \he's trying to commit suicide.</b>")
|
||||
adjustOxyLoss(max(175 - getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0))
|
||||
|
||||
var/obj/item/organ/external/affected = get_organ("head")
|
||||
affected.add_autopsy_data("Suicide", 175)
|
||||
viewers(src) << "<span class=danger>[src] [pick(species.suicide_messages)] It looks like they're trying to commit suicide.</span>"
|
||||
do_suicide(0)
|
||||
|
||||
updatehealth()
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
playsound(src.loc, 'sound/items/bubblewrap.ogg', 30, 1, extrarange = -4, falloff = 10)
|
||||
icon_state = "prizeconfetti"
|
||||
src.color = pick(random_color_list)
|
||||
var/prize_inside = pick(/obj/random/carp_plushie, /obj/random/plushie, /obj/random/figure) //will add ticket bundles later
|
||||
var/prize_inside = pick(/obj/random/carp_plushie, /obj/random/plushie, /obj/random/figure, /obj/item/toy/eight_ball) //will add ticket bundles later
|
||||
spawn(10)
|
||||
user.unEquip(src)
|
||||
new prize_inside(user.loc)
|
||||
|
||||
@@ -57,13 +57,6 @@
|
||||
else
|
||||
integrated_ai.get_rig_stats = 0
|
||||
|
||||
/mob/living/Stat()
|
||||
. = ..()
|
||||
if(. && get_rig_stats)
|
||||
var/obj/item/weapon/rig/rig = get_rig()
|
||||
if(rig)
|
||||
SetupStat(rig)
|
||||
|
||||
/obj/item/rig_module/ai_container/proc/update_verb_holder()
|
||||
if(!verb_holder)
|
||||
verb_holder = new(src)
|
||||
|
||||
@@ -225,13 +225,6 @@
|
||||
/obj/item/rig_module/proc/accepts_item(var/obj/item/input_device)
|
||||
return 0
|
||||
|
||||
/mob/living/carbon/human/Stat()
|
||||
. = ..()
|
||||
|
||||
if(. && istype(back,/obj/item/weapon/rig))
|
||||
var/obj/item/weapon/rig/R = back
|
||||
SetupStat(R)
|
||||
|
||||
/mob/proc/SetupStat(var/obj/item/weapon/rig/R)
|
||||
if(R && (R.flags & NODROP) && R.installed_modules.len && statpanel("Hardsuit Modules"))
|
||||
var/cell_status = R.cell ? "[R.cell.charge]/[R.cell.maxcharge]" : "ERROR"
|
||||
|
||||
@@ -210,7 +210,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
||||
..()
|
||||
statpanel("Status")
|
||||
if (client.statpanel == "Status")
|
||||
stat(null, "Station Time: [worldtime2text()]")
|
||||
show_stat_station_time()
|
||||
if(ticker)
|
||||
if(ticker.mode)
|
||||
//world << "DEBUG: ticker not null"
|
||||
@@ -218,10 +218,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
||||
//world << "DEBUG: malf mode ticker test"
|
||||
if(ticker.mode:malf_mode_declared)
|
||||
stat(null, "Time left: [max(ticker.mode:AI_win_timeleft/(ticker.mode:apcs/3), 0)]")
|
||||
if(shuttle_master.emergency.mode >= SHUTTLE_RECALL)
|
||||
var/timeleft = shuttle_master.emergency.timeLeft()
|
||||
if(timeleft > 0)
|
||||
stat(null, "[add_zero(num2text((timeleft / 60) % 60),2)]:[add_zero(num2text(timeleft % 60), 2)]")
|
||||
show_stat_emergency_shuttle_eta()
|
||||
|
||||
/mob/dead/observer/verb/reenter_corpse()
|
||||
set category = "Ghost"
|
||||
|
||||
@@ -181,10 +181,7 @@
|
||||
if (client.statpanel == "Status")
|
||||
stat(null, "Plasma Stored: [getPlasma()]/[max_plasma]")
|
||||
|
||||
if(shuttle_master.emergency.mode >= SHUTTLE_RECALL)
|
||||
var/timeleft = shuttle_master.emergency.timeLeft()
|
||||
if(timeleft > 0)
|
||||
stat(null, "[add_zero(num2text((timeleft / 60) % 60),2)]:[add_zero(num2text(timeleft % 60), 2)]")
|
||||
show_stat_emergency_shuttle_eta()
|
||||
|
||||
/mob/living/carbon/alien/Stun(amount)
|
||||
if(status_flags & CANSTUN)
|
||||
|
||||
@@ -83,12 +83,8 @@ I'm using this for Stat to give it a more nifty interface to work with
|
||||
..()
|
||||
if(has_synthetic_assistance())
|
||||
statpanel("Status")
|
||||
stat(null, "Station Time: [worldtime2text()]")
|
||||
|
||||
if(shuttle_master.emergency.mode >= SHUTTLE_RECALL)
|
||||
var/timeleft = shuttle_master.emergency.timeLeft()
|
||||
if(timeleft > 0)
|
||||
stat(null, "[add_zero(num2text((timeleft / 60) % 60),2)]:[add_zero(num2text(timeleft % 60), 2)]")
|
||||
show_stat_station_time()
|
||||
show_stat_emergency_shuttle_eta()
|
||||
|
||||
if(client.statpanel == "Status")
|
||||
//Knowing how well-off your mech is doing is really important as an MMI
|
||||
|
||||
@@ -32,9 +32,19 @@
|
||||
else //Everyone else fails, skip the emote attempt
|
||||
return
|
||||
if("squish")
|
||||
var/found_slime_bodypart = 0
|
||||
|
||||
if(species.name == "Slime People") //Only Slime People can squish
|
||||
on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm
|
||||
else //Everyone else fails, skip the emote attempt
|
||||
on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm'
|
||||
found_slime_bodypart = 1
|
||||
else
|
||||
for(var/obj/item/organ/external/L in organs) // if your limbs are squishy you can squish too!
|
||||
if(L.dna.species in list("Slime People"))
|
||||
on_CD = handle_emote_CD()
|
||||
found_slime_bodypart = 1
|
||||
break
|
||||
|
||||
if(!found_slime_bodypart) //Everyone else fails, skip the emote attempt
|
||||
return
|
||||
if("scream", "fart", "flip", "snap")
|
||||
on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm
|
||||
|
||||
@@ -252,15 +252,13 @@
|
||||
stat(null, "Intent: [a_intent]")
|
||||
stat(null, "Move Mode: [m_intent]")
|
||||
|
||||
stat(null, "Station Time: [worldtime2text()]")
|
||||
show_stat_station_time()
|
||||
|
||||
if(ticker && ticker.mode && ticker.mode.name == "AI malfunction")
|
||||
if(ticker.mode:malf_mode_declared)
|
||||
stat(null, "Time left: [max(ticker.mode:AI_win_timeleft/(ticker.mode:apcs/3), 0)]")
|
||||
if(shuttle_master.emergency.mode >= SHUTTLE_RECALL)
|
||||
var/timeleft = shuttle_master.emergency.timeLeft()
|
||||
if(timeleft > 0)
|
||||
stat(null, "[add_zero(num2text((timeleft / 60) % 60),2)]:[add_zero(num2text(timeleft % 60), 2)]")
|
||||
|
||||
show_stat_emergency_shuttle_eta()
|
||||
|
||||
if(client.statpanel == "Status")
|
||||
if(locate(/obj/item/device/assembly/health) in src)
|
||||
|
||||
@@ -17,6 +17,9 @@
|
||||
has_organ = list(
|
||||
"brain" = /obj/item/organ/brain/golem
|
||||
)
|
||||
suicide_messages = list(
|
||||
"is crumbling into dust!",
|
||||
"is smashing their body apart!")
|
||||
|
||||
/datum/species/golem/handle_post_spawn(var/mob/living/carbon/human/H)
|
||||
if(H.mind)
|
||||
|
||||
@@ -20,6 +20,11 @@
|
||||
bodyflags = FEET_NOSLIP
|
||||
dietflags = DIET_OMNI //the mutation process allowed you to now digest all foods regardless of initial race
|
||||
reagent_tag = PROCESS_ORG
|
||||
suicide_messages = list(
|
||||
"is attempting to bite their tongue off!",
|
||||
"is jamming their claws into their eye sockets!",
|
||||
"is twisting their own neck!",
|
||||
"is staring into the closest light source!")
|
||||
|
||||
/datum/species/shadow/handle_death(var/mob/living/carbon/human/H)
|
||||
H.dust()
|
||||
@@ -30,4 +30,9 @@
|
||||
heat_level_1 = 999999999
|
||||
heat_level_2 = 999999999
|
||||
heat_level_3 = 999999999
|
||||
heat_level_3_breathe = 999999999
|
||||
heat_level_3_breathe = 999999999
|
||||
|
||||
suicide_messages = list(
|
||||
"is snapping their own bones!",
|
||||
"is collapsing into a pile!",
|
||||
"is twisting their skull off!")
|
||||
@@ -88,6 +88,11 @@
|
||||
|
||||
//Death vars.
|
||||
var/death_message = "seizes up and falls limp, their eyes dead and lifeless..."
|
||||
var/list/suicide_messages = list(
|
||||
"is attempting to bite their tongue off!",
|
||||
"is jamming their thumbs into their eye sockets!",
|
||||
"is twisting their own neck!",
|
||||
"is holding their breath!")
|
||||
|
||||
// Language/culture vars.
|
||||
var/default_language = "Galactic Common" // Default language is used when 'say' is used without modifiers.
|
||||
|
||||
@@ -55,6 +55,12 @@
|
||||
flesh_color = "#34AF10"
|
||||
reagent_tag = PROCESS_ORG
|
||||
base_color = "#066000"
|
||||
|
||||
suicide_messages = list(
|
||||
"is attempting to bite their tongue off!",
|
||||
"is jamming their claws into their eye sockets!",
|
||||
"is twisting their own neck!",
|
||||
"is holding their breath!")
|
||||
|
||||
/datum/species/unathi/handle_death(var/mob/living/carbon/human/H)
|
||||
H.stop_tail_wagging(1)
|
||||
@@ -100,6 +106,12 @@
|
||||
reagent_tag = PROCESS_ORG
|
||||
flesh_color = "#AFA59E"
|
||||
base_color = "#333333"
|
||||
|
||||
suicide_messages = list(
|
||||
"is attempting to bite their tongue off!",
|
||||
"is jamming their claws into their eye sockets!",
|
||||
"is twisting their own neck!",
|
||||
"is holding their breath!")
|
||||
|
||||
/datum/species/tajaran/handle_death(var/mob/living/carbon/human/H)
|
||||
H.stop_tail_wagging(1)
|
||||
@@ -135,6 +147,12 @@
|
||||
reagent_tag = PROCESS_ORG
|
||||
flesh_color = "#966464"
|
||||
base_color = "#B43214"
|
||||
|
||||
suicide_messages = list(
|
||||
"is attempting to bite their tongue off!",
|
||||
"is jamming their claws into their eye sockets!",
|
||||
"is twisting their own neck!",
|
||||
"is holding their breath!")
|
||||
|
||||
/datum/species/vulpkanin/handle_death(var/mob/living/carbon/human/H)
|
||||
H.stop_tail_wagging(1)
|
||||
@@ -206,6 +224,13 @@
|
||||
flesh_color = "#808D11"
|
||||
|
||||
reagent_tag = PROCESS_ORG
|
||||
|
||||
suicide_messages = list(
|
||||
"is attempting to bite their tongue off!",
|
||||
"is jamming their claws into their eye sockets!",
|
||||
"is twisting their own neck!",
|
||||
"is holding their breath!",
|
||||
"is deeply inhaling oxygen!")
|
||||
|
||||
/datum/species/vox/handle_death(var/mob/living/carbon/human/H)
|
||||
H.stop_tail_wagging(1)
|
||||
@@ -292,6 +317,13 @@
|
||||
"eyes" = /obj/item/organ/eyes,
|
||||
"stack" = /obj/item/organ/stack/vox
|
||||
)
|
||||
|
||||
suicide_messages = list(
|
||||
"is attempting to bite their tongue off!",
|
||||
"is jamming their claws into their eye sockets!",
|
||||
"is twisting their own neck!",
|
||||
"is holding their breath!",
|
||||
"is huffing oxygen!")
|
||||
|
||||
/datum/species/kidan
|
||||
name = "Kidan"
|
||||
@@ -311,6 +343,12 @@
|
||||
dietflags = DIET_HERB
|
||||
blood_color = "#FB9800"
|
||||
reagent_tag = PROCESS_ORG
|
||||
|
||||
suicide_messages = list(
|
||||
"is attempting to bite their antenna off!",
|
||||
"is jamming their claws into their eye sockets!",
|
||||
"is twisting their own neck!",
|
||||
"is holding their breath!")
|
||||
|
||||
/datum/species/slime
|
||||
name = "Slime People"
|
||||
@@ -333,6 +371,10 @@
|
||||
has_organ = list(
|
||||
"brain" = /obj/item/organ/brain/slime
|
||||
)
|
||||
|
||||
suicide_messages = list(
|
||||
"is melting into a puddle!",
|
||||
"is turning a dull, brown color and melting into a puddle!")
|
||||
|
||||
/datum/species/grey
|
||||
name = "Grey"
|
||||
@@ -433,6 +475,10 @@
|
||||
"l_foot" = list("path" = /obj/item/organ/external/diona/foot),
|
||||
"r_foot" = list("path" = /obj/item/organ/external/diona/foot/right)
|
||||
)
|
||||
|
||||
suicide_messages = list(
|
||||
"is losing branches!",
|
||||
"is pulling themselves apart!")
|
||||
|
||||
/datum/species/diona/can_understand(var/mob/other)
|
||||
var/mob/living/simple_animal/diona/D = other
|
||||
@@ -526,6 +572,12 @@
|
||||
"l_foot" = list("path" = /obj/item/organ/external/foot/ipc),
|
||||
"r_foot" = list("path" = /obj/item/organ/external/foot/right/ipc)
|
||||
)
|
||||
|
||||
suicide_messages = list(
|
||||
"is powering down!",
|
||||
"is smashing their own monitor!",
|
||||
"is twisting their own neck!",
|
||||
"is blocking their ventilation port!")
|
||||
|
||||
/datum/species/machine/handle_death(var/mob/living/carbon/human/H)
|
||||
H.h_style = ""
|
||||
|
||||
@@ -2,6 +2,13 @@
|
||||
/mob/living/Destroy()
|
||||
..()
|
||||
return QDEL_HINT_HARDDEL_NOW
|
||||
|
||||
/mob/living/Stat()
|
||||
. = ..()
|
||||
if(. && get_rig_stats)
|
||||
var/obj/item/weapon/rig/rig = get_rig()
|
||||
if(rig)
|
||||
SetupStat(rig)
|
||||
|
||||
//mob verbs are a lot faster than object verbs
|
||||
//for more info on why this is not atom/pull, see examinate() in mob.dm
|
||||
|
||||
@@ -142,25 +142,11 @@
|
||||
return 0
|
||||
|
||||
|
||||
// this function displays the station time in the status panel
|
||||
/mob/living/silicon/proc/show_station_time()
|
||||
stat(null, "Station Time: [worldtime2text()]")
|
||||
|
||||
|
||||
// this function displays the shuttles ETA in the status panel if the shuttle has been called
|
||||
/mob/living/silicon/proc/show_emergency_shuttle_eta()
|
||||
if(shuttle_master.emergency.mode >= SHUTTLE_RECALL)
|
||||
var/timeleft = shuttle_master.emergency.timeLeft()
|
||||
if(timeleft > 0)
|
||||
stat(null, "[add_zero(num2text((timeleft / 60) % 60),2)]:[add_zero(num2text(timeleft % 60), 2)]")
|
||||
|
||||
|
||||
|
||||
// This adds the basic clock, shuttle recall timer, and malf_ai info to all silicon lifeforms
|
||||
/mob/living/silicon/Stat()
|
||||
if(statpanel("Status"))
|
||||
show_station_time()
|
||||
show_emergency_shuttle_eta()
|
||||
show_stat_station_time()
|
||||
show_stat_emergency_shuttle_eta()
|
||||
show_system_integrity()
|
||||
show_malf_ai()
|
||||
..()
|
||||
|
||||
@@ -258,7 +258,7 @@
|
||||
if(spawnees & 128)
|
||||
C = new(src.loc)
|
||||
C.name = "Drone plasma overcharge counter"
|
||||
C.origin_tech = "plasma=[rand(3,6)]"
|
||||
C.origin_tech = "plasmatech=[rand(3,6)]"
|
||||
|
||||
if(spawnees & 256)
|
||||
C = new(src.loc)
|
||||
|
||||
@@ -990,6 +990,36 @@ var/list/slot_equipment_priority = list( \
|
||||
|
||||
statpanel("Status") // Switch to the Status panel again, for the sake of the lazy Stat procs
|
||||
|
||||
// this function displays the station time in the status panel
|
||||
/mob/proc/show_stat_station_time()
|
||||
stat(null, "Station Time: [worldtime2text()]")
|
||||
|
||||
// this function displays the shuttles ETA in the status panel if the shuttle has been called
|
||||
/mob/proc/show_stat_emergency_shuttle_eta()
|
||||
var/obj/docking_port/mobile/emergency/E = shuttle_master.emergency
|
||||
|
||||
if(E.mode >= SHUTTLE_RECALL)
|
||||
var/message = ""
|
||||
|
||||
var/timeleft = E.timeLeft()
|
||||
message = "[add_zero(num2text((timeleft / 60) % 60),2)]:[add_zero(num2text(timeleft % 60), 2)]"
|
||||
|
||||
switch(E.mode)
|
||||
if(SHUTTLE_RECALL, SHUTTLE_ESCAPE)
|
||||
message = "ETR-[message]"
|
||||
if(SHUTTLE_CALL)
|
||||
message = "ETA-[message]"
|
||||
if(SHUTTLE_DOCKED)
|
||||
if(timeleft < 5)
|
||||
message = "Departing..."
|
||||
else
|
||||
message = "ETD-[message]"
|
||||
if(SHUTTLE_STRANDED)
|
||||
message = "ETA-ERR"
|
||||
if(SHUTTLE_ENDGAME)
|
||||
return
|
||||
|
||||
stat(null, message)
|
||||
|
||||
/mob/proc/add_stings_to_statpanel(var/list/stings)
|
||||
for(var/obj/effect/proc_holder/changeling/S in stings)
|
||||
|
||||
@@ -30,21 +30,6 @@
|
||||
return STATUS_INTERACTIVE // interactive (green visibility)
|
||||
return STATUS_DISABLED // no updates, completely disabled (red visibility)
|
||||
|
||||
/mob/living/silicon/robot/syndicate/default_can_use_topic(var/src_object)
|
||||
. = ..()
|
||||
if(. != STATUS_INTERACTIVE)
|
||||
return
|
||||
|
||||
if(z in config.admin_levels) // Syndicate borgs can interact with everything on the admin level
|
||||
return STATUS_INTERACTIVE
|
||||
if(istype(get_area(src), /area/syndicate_station)) // If elsewhere, they can interact with everything on the syndicate shuttle
|
||||
return STATUS_INTERACTIVE
|
||||
if(istype(src_object, /obj/machinery)) // Otherwise they can only interact with emagged machinery
|
||||
var/obj/machinery/Machine = src_object
|
||||
if(Machine.emagged)
|
||||
return STATUS_INTERACTIVE
|
||||
return STATUS_UPDATE
|
||||
|
||||
/mob/living/silicon/ai/default_can_use_topic(var/src_object)
|
||||
. = shared_nano_interaction()
|
||||
if(. != STATUS_INTERACTIVE)
|
||||
|
||||
@@ -36,7 +36,8 @@
|
||||
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(H.species && (H.species.name == "Skrell" || H.species.name =="Neara")) //Skrell and Neara get very drunk very quickly.
|
||||
var/obj/item/organ/liver/L = H.internal_organs_by_name["liver"]
|
||||
if(!L || (istype(L) && L.dna.species in list("Skrell", "Neara")))
|
||||
d*=5
|
||||
|
||||
M.dizziness += dizzy_adj.
|
||||
|
||||
@@ -402,12 +402,14 @@
|
||||
var/obj/machinery/door/Door = O
|
||||
spawn(-1)
|
||||
if(Door)
|
||||
Door.close()
|
||||
if(istype(Door, /obj/machinery/door/airlock))
|
||||
var/obj/machinery/door/airlock/A = Door
|
||||
A.close(0,1)
|
||||
if(A.id_tag == "s_docking_airlock")
|
||||
A.lock()
|
||||
door_unlock_list += A
|
||||
else
|
||||
Door.close()
|
||||
else if (istype(AM,/mob))
|
||||
var/mob/M = AM
|
||||
if(!M.move_on_shuttle)
|
||||
|
||||
@@ -69,8 +69,7 @@ BOMBCAP 20
|
||||
|
||||
### ROUNDSTART SILICON LAWS ###
|
||||
## This controls what the AI's laws are at the start of the round.
|
||||
## Set to 0/commented for "off", silicons will just start with Asimov.
|
||||
## Set to 1 for "custom", silicons will start with the custom laws defined in silicon_laws.txt. (If silicon_laws.txt is empty, the AI will spawn with asimov and Custom boards will auto-delete.)
|
||||
## Set to 2 for "random", silicons will start with a random lawset picked from (at the time of writing): P.A.L.A.D.I.N., Corporate, Asimov. More can be added by changing the law datum paths in ai_laws.dm.
|
||||
## Set to 0/commented for "off", silicons will just start with Crewsimov.
|
||||
## Set to 1 for "random", silicons will start with a random lawset picked from (at the time of writing): Nanotrasen Default, P.A.L.A.D.I.N., Corporate, Robop and Crewsimov. More can be added by changing the law datum "default" variable in ai_laws.dm.
|
||||
|
||||
DEFAULT_LAWS 2
|
||||
DEFAULT_LAWS 1
|
||||
@@ -55,6 +55,34 @@
|
||||
|
||||
-->
|
||||
<div class="commit sansserif">
|
||||
<h2 class="date">31 January 2016</h2>
|
||||
<h3 class="author">Crazylemon64 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Syndicate borgs can now interact with station machinery</li>
|
||||
<li class="rscadd">People with slime people limbs can now *squish</li>
|
||||
<li class="tweak">Skrell's vulnerability to alcohol is checked on their liver, now - a liver transplant will let them take alcohol like a champ - lacking a liver will have the same effect as being a skrell, when drinking</li>
|
||||
</ul>
|
||||
<h3 class="author">FalseIncarnate updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Adds in the Magic Eight Ball toy, found in Claw Game prize orbs.</li>
|
||||
<li class="rscadd">Adds in the Magic Conch Shell, an admin-only shell of power.</li>
|
||||
</ul>
|
||||
<h3 class="author">Fox McCloud updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Updates Summon Guns and Magic to include many of the new guns</li>
|
||||
<li class="tweak">Summon Guns/Magic can no longer be used during Ragin' Mages</li>
|
||||
</ul>
|
||||
<h3 class="author">Tastyfish updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">The emergency shuttle status in the Status tab now has ETA/ETD/etc like before.</li>
|
||||
<li class="tweak">Code Gamma+ now has a 5 minute emergency shuttle call, like Red.</li>
|
||||
</ul>
|
||||
<h3 class="author">pinatacolada updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Adds NanoUI to the operating computer</li>
|
||||
<li class="rscadd">Adds health announcing, critical and oxygen damage aural alerts to the computer, with a menu to selectively turn them on and off</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">29 January 2016</h2>
|
||||
<h3 class="author">Crazylemon updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
|
||||
@@ -358,3 +358,24 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
|
||||
bullets to reach a state of what our scientists refer to as "enough dakka,"
|
||||
Syndicate High Command has decided to restore the Syndicate Strike Team arsenal
|
||||
to using standard-issue L6 SAW ammunition.
|
||||
2016-01-31:
|
||||
Crazylemon64:
|
||||
- bugfix: Syndicate borgs can now interact with station machinery
|
||||
- rscadd: People with slime people limbs can now *squish
|
||||
- tweak: Skrell's vulnerability to alcohol is checked on their liver, now - a liver
|
||||
transplant will let them take alcohol like a champ - lacking a liver will have
|
||||
the same effect as being a skrell, when drinking
|
||||
FalseIncarnate:
|
||||
- rscadd: Adds in the Magic Eight Ball toy, found in Claw Game prize orbs.
|
||||
- rscadd: Adds in the Magic Conch Shell, an admin-only shell of power.
|
||||
Fox McCloud:
|
||||
- rscadd: Updates Summon Guns and Magic to include many of the new guns
|
||||
- tweak: Summon Guns/Magic can no longer be used during Ragin' Mages
|
||||
Tastyfish:
|
||||
- rscadd: The emergency shuttle status in the Status tab now has ETA/ETD/etc like
|
||||
before.
|
||||
- tweak: Code Gamma+ now has a 5 minute emergency shuttle call, like Red.
|
||||
pinatacolada:
|
||||
- rscadd: Adds NanoUI to the operating computer
|
||||
- rscadd: Adds health announcing, critical and oxygen damage aural alerts to the
|
||||
computer, with a menu to selectively turn them on and off
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
author: Tastyfish
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "Species that don't breathe can kill themselves now!"
|
||||
- rscadd: "Suicide messages are now catered to your species."
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 69 KiB |
@@ -0,0 +1,208 @@
|
||||
<!--
|
||||
Title: Operating Computer UI
|
||||
Used In File(s): \code\game\machinery\computer\Operating.dm
|
||||
-->
|
||||
<h3>Patient Monitor</h3>
|
||||
|
||||
<div class="statusDisplay">
|
||||
{{if data.choice==0}}
|
||||
{{if !data.hasOccupant}}
|
||||
<div class="line">No Patient Detected</div>
|
||||
{{else}}
|
||||
<div class="line">
|
||||
{{:data.occupant.name}} =>
|
||||
{{if data.occupant.stat == 0}}
|
||||
<span class="good">Conscious</span>
|
||||
{{else data.occupant.stat == 1}}
|
||||
<span class="average">Unconscious</span>
|
||||
{{else}}
|
||||
<span class="bad">DEAD</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
<div class="line">
|
||||
<div class="statusLabel">Health:</div>
|
||||
{{if data.occupant.health >= data.occupant.maxHealth}}
|
||||
{{:helper.displayBar(data.occupant.health, 0, data.occupant.maxHealth, 'good')}}
|
||||
{{else data.occupant.health > 0}}
|
||||
{{:helper.displayBar(data.occupant.health, 0, data.occupant.maxHealth, 'average')}}
|
||||
{{else data.occupant.health >= data.minhealth}}
|
||||
{{:helper.displayBar(data.occupant.health, 0, data.occupant.minHealth, 'average alignRight')}}
|
||||
{{else}}
|
||||
{{:helper.displayBar(data.occupant.health, 0, data.occupant.minHealth, 'bad alignRight')}}
|
||||
{{/if}}
|
||||
<div class="statusValue">{{:helper.round(data.occupant.health)}}</div>
|
||||
</div>
|
||||
|
||||
<div class="line">
|
||||
<div class="statusLabel">Brute Damage:</div>
|
||||
{{:helper.displayBar(data.occupant.bruteLoss, 0, data.occupant.maxHealth, 'bad')}}
|
||||
<div class="statusValue">{{:helper.round(data.occupant.bruteLoss)}}</div>
|
||||
</div>
|
||||
|
||||
<div class="line">
|
||||
<div class="statusLabel">Resp. Damage:</div>
|
||||
{{:helper.displayBar(data.occupant.oxyLoss, 0, data.occupant.maxHealth, 'bad')}}
|
||||
<div class="statusValue">{{:helper.round(data.occupant.oxyLoss)}}</div>
|
||||
</div>
|
||||
|
||||
<div class="line">
|
||||
<div class="statusLabel">Toxin Damage:</div>
|
||||
{{:helper.displayBar(data.occupant.toxLoss, 0, data.occupant.maxHealth, 'bad')}}
|
||||
<div class="statusValue">{{:helper.round(data.occupant.toxLoss)}}</div>
|
||||
</div>
|
||||
|
||||
<div class="line">
|
||||
<div class="statusLabel">Burn Severity:</div>
|
||||
{{:helper.displayBar(data.occupant.fireLoss, 0, data.occupant.maxHealth, 'bad')}}
|
||||
<div class="statusValue">{{:helper.round(data.occupant.fireLoss)}}</div>
|
||||
</div>
|
||||
|
||||
<div class="line">
|
||||
<div class="statusLabel">Patient Temperature:</div>
|
||||
{{if data.occupant.temperatureSuitability == -3}}
|
||||
{{:helper.displayBar(data.occupant.bodyTemperature, 0, data.occupant.maxTemp, 'bad')}}
|
||||
<div class="statusValue bad">{{:helper.round(data.occupant.btCelsius)}}°C, {{:helper.round(data.occupant.btFaren)}}°F</div>
|
||||
{{else data.occupant.temperatureSuitability == -2}}
|
||||
{{:helper.displayBar(data.occupant.bodyTemperature, 0, data.occupant.maxTemp, 'average')}}
|
||||
<div class="statusValue bad">{{:helper.round(data.occupant.btCelsius)}}°C, {{:helper.round(data.occupant.btFaren)}}°F</div>
|
||||
{{else data.occupant.temperatureSuitability == -1}}
|
||||
{{:helper.displayBar(data.occupant.bodyTemperature, 0, data.occupant.maxTemp, 'average')}}
|
||||
<div class="statusValue">{{:helper.round(data.occupant.btCelsius)}}°C, {{:helper.round(data.occupant.btFaren)}}°F</div>
|
||||
{{else data.occupant.temperatureSuitability == 0}}
|
||||
{{:helper.displayBar(data.occupant.bodyTemperature, 0, data.occupant.maxTemp, 'good')}}
|
||||
<div class="statusValue">{{:helper.round(data.occupant.btCelsius)}}°C, {{:helper.round(data.occupant.btFaren)}}°F</div>
|
||||
{{else data.occupant.temperatureSuitability == 1}}
|
||||
{{:helper.displayBar(data.occupant.bodyTemperature, 0, data.occupant.maxTemp, 'average')}}
|
||||
<div class="statusValue">{{:helper.round(data.occupant.btCelsius)}}°C, {{:helper.round(data.occupant.btFaren)}}°F</div>
|
||||
{{else data.occupant.temperatureSuitability == 2}}
|
||||
{{:helper.displayBar(data.occupant.bodyTemperature, 0, data.occupant.maxTemp, 'average')}}
|
||||
<div class="statusValue bad">{{:helper.round(data.occupant.btCelsius)}}°C, {{:helper.round(data.occupant.btFaren)}}°F</div>
|
||||
{{else data.occupant.temperatureSuitability == 3}}
|
||||
{{:helper.displayBar(data.occupant.bodyTemperature, 0, data.occupant.maxTemp, 'bad')}}
|
||||
<div class="statusValue bad">{{:helper.round(data.occupant.btCelsius)}}°C, {{:helper.round(data.occupant.btFaren)}}°F</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{if data.occupant.hasBlood}}
|
||||
<br>
|
||||
<div class="line">
|
||||
<div class="statusLabel">Blood Level:</div>
|
||||
{{if data.occupant.bloodPercent <= 60}}
|
||||
{{:helper.displayBar(data.occupant.bloodLevel, 0, data.occupant.bloodMax, 'bad')}}
|
||||
<div class="statusValue">
|
||||
{{:data.occupant.bloodPercent}}%, {{:data.occupant.bloodLevel}}cl
|
||||
</div>
|
||||
{{else data.occupant.bloodPercent <= 90}}
|
||||
{{:helper.displayBar(data.occupant.bloodLevel, 0, data.occupant.bloodMax, 'average')}}
|
||||
<div class="statusValue">
|
||||
{{:data.occupant.bloodPercent}}%, {{:data.occupant.bloodLevel}}cl
|
||||
</div>
|
||||
{{else}}
|
||||
{{:helper.displayBar(data.occupant.bloodLevel, 0, data.occupant.bloodMax, 'good')}}
|
||||
<div class="statusValue">
|
||||
{{:data.occupant.bloodPercent}}%, {{:data.occupant.bloodLevel}}cl
|
||||
</div>
|
||||
{{/if}}
|
||||
<div class="line">
|
||||
<div class="statusLabel">Blood Type:</div> <div class="statusValue">{{:data.occupant.bloodType}}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="line">
|
||||
<div class="statusLabel">Pulse:</div> <div class="statusValue">{{:data.occupant.pulse}} bpm</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
<br>
|
||||
<br>
|
||||
{{/if}}
|
||||
<div class="item">
|
||||
<div class="itemLabelWide">
|
||||
{{:helper.link('Options', 'gear', {'choiceOn' : 1})}}
|
||||
</div>
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="item">
|
||||
<div class="statusLabel">
|
||||
Loudspeaker:
|
||||
</div>
|
||||
<div class="itemContentNarrow" style="float: left">
|
||||
{{:helper.link('On', 'power-off', {'verboseOn' : 1}, data.verbose ? 'selected' : null)}}
|
||||
{{:helper.link('Off', 'close', {'verboseOff' : 1}, data.verbose ? null : 'selected')}}
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="item">
|
||||
<div class="statusLabel">
|
||||
Health Announcer:
|
||||
</div>
|
||||
<div class="itemContentNarrow" style="float: left">
|
||||
{{:helper.link('On', 'power-off', {'healthOn' : 1}, data.health ? 'selected' : null)}}
|
||||
{{:helper.link('Off', 'close', {'healthOff' : 1}, data.health ? null : 'selected')}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="item">
|
||||
<div class="line">
|
||||
<div class="statusLabel">Health Announcer Threshold:</div>
|
||||
{{:helper.link('-', null, {'health_adj' : -100}, (data.healthAlarm >= 0) ? null : 'disabled')}}
|
||||
{{:helper.link('-', null, {'health_adj' : -10}, (data.healthAlarm >= -90) ? null : 'disabled')}}
|
||||
{{:helper.link('-', null, {'health_adj' : -1}, (data.healthAlarm > -100) ? null : 'disabled')}}
|
||||
|
||||
{{if data.healthAlarm >= 100}}
|
||||
{{:helper.displayBar(data.healthAlarm, 0, 100, 'good')}}
|
||||
{{else data.healthAlarm > 0}}
|
||||
{{:helper.displayBar(data.healthAlarm, 0, 100, 'average')}}
|
||||
{{else data.healthAlarm >= -100}}
|
||||
{{:helper.displayBar(data.healthAlarm, 0, -100, 'average alignRight')}}
|
||||
{{else}}
|
||||
{{:helper.displayBar(data.healthAlarm, 0, -100, 'bad alignRight')}}
|
||||
{{/if}}
|
||||
|
||||
{{:helper.link('+', null, {'health_adj' : 1}, (data.healthAlarm < 100) ? null : 'disabled')}}
|
||||
{{:helper.link('+', null, {'health_adj' : 10}, (data.healthAlarm <= 90) ? null : 'disabled')}}
|
||||
{{:helper.link('+', null, {'health_adj' : 100}, (data.healthAlarm <= 0) ? null : 'disabled')}}
|
||||
<div style="float: left; width: 80px; text-align: center;"> {{: data.healthAlarm }} </div>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="item">
|
||||
<div class="statusLabel">
|
||||
Oxygen Alarm:
|
||||
</div>
|
||||
<div class="itemContentNarrow" style="float: left">
|
||||
{{:helper.link('On', 'power-off', {'oxyOn' : 1}, data.oxy ? 'selected' : null)}}
|
||||
{{:helper.link('Off', 'close', {'oxyOff' : 1}, data.oxy ? null : 'selected')}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="item">
|
||||
<div class="line">
|
||||
<div class="statusLabel">Oxygen Alert Threshold:</div>
|
||||
{{:helper.link('-', null, {'oxy_adj' : -100}, (data.oxyAlarm >= 100) ? null : 'disabled')}}
|
||||
{{:helper.link('-', null, {'oxy_adj' : -10}, (data.oxyAlarm >= 10) ? null : 'disabled')}}
|
||||
{{:helper.link('-', null, {'oxy_adj' : -1}, (data.oxyAlarm >= 0) ? null : 'disabled')}}
|
||||
{{:helper.displayBar( data.oxyAlarm, 0, 200, 'good')}}
|
||||
{{:helper.link('+', null, {'oxy_adj' : 1}, (data.oxyAlarm < 200) ? null : 'disabled')}}
|
||||
{{:helper.link('+', null, {'oxy_adj' : 10}, (data.oxyAlarm <= 190) ? null : 'disabled')}}
|
||||
{{:helper.link('+', null, {'oxy_adj' : 100}, (data.oxyAlarm <= 100) ? null : 'disabled')}}
|
||||
<div style="float: left; width: 80px; text-align: center;"> {{: data.oxyAlarm }} </div>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="item">
|
||||
<div class="statusLabel">
|
||||
Critical Alert:
|
||||
</div>
|
||||
<div class="itemContentNarrow" style="float: left">
|
||||
{{:helper.link('On', 'power-off', {'critOn' : 1}, data.crit ? 'selected' : null)}}
|
||||
{{:helper.link('Off', 'close', {'critOff' : 1}, data.crit ? null : 'selected')}}
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="item">
|
||||
<div class="itemLabelWide">
|
||||
{{:helper.link('Return', 'arrow-left', {'choiceOff' : 1})}}
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
Reference in New Issue
Block a user