mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-13 11:43:31 +00:00
Merge branch 'dev' of https://github.com/Baystation12/Baystation12 into dev
This commit is contained in:
@@ -75,3 +75,25 @@ proc/age2agedescription(age)
|
|||||||
if(60 to 70) return "aging"
|
if(60 to 70) return "aging"
|
||||||
if(70 to INFINITY) return "elderly"
|
if(70 to INFINITY) return "elderly"
|
||||||
else return "unknown"
|
else return "unknown"
|
||||||
|
|
||||||
|
proc/RoundHealth(health)
|
||||||
|
switch(health)
|
||||||
|
if(100 to INFINITY)
|
||||||
|
return "health100"
|
||||||
|
if(70 to 100)
|
||||||
|
return "health80"
|
||||||
|
if(50 to 70)
|
||||||
|
return "health60"
|
||||||
|
if(30 to 50)
|
||||||
|
return "health40"
|
||||||
|
if(18 to 30)
|
||||||
|
return "health25"
|
||||||
|
if(5 to 18)
|
||||||
|
return "health10"
|
||||||
|
if(1 to 5)
|
||||||
|
return "health1"
|
||||||
|
if(-99 to 0)
|
||||||
|
return "health0"
|
||||||
|
else
|
||||||
|
return "health-100"
|
||||||
|
return "0"
|
||||||
|
|||||||
@@ -255,11 +255,28 @@ datum/controller/game_controller/proc/process_machines()
|
|||||||
last_thing_processed = Machine.type
|
last_thing_processed = Machine.type
|
||||||
if(Machine.process() != PROCESS_KILL)
|
if(Machine.process() != PROCESS_KILL)
|
||||||
if(Machine)
|
if(Machine)
|
||||||
if(Machine.use_power)
|
|
||||||
Machine.auto_use_power()
|
// if(Machine.use_power)
|
||||||
|
// Machine.auto_use_power()
|
||||||
|
|
||||||
i++
|
i++
|
||||||
continue
|
continue
|
||||||
machines.Cut(i,i+1)
|
machines.Cut(i,i+1)
|
||||||
|
i=1
|
||||||
|
while(i<=active_areas.len)
|
||||||
|
var/area/A = active_areas[i]
|
||||||
|
if(A.powerupdate)
|
||||||
|
A.powerupdate -= 1
|
||||||
|
for(var/obj/machinery/M in A)
|
||||||
|
if(M)
|
||||||
|
if(M.use_power)
|
||||||
|
M.auto_use_power()
|
||||||
|
|
||||||
|
if(A.apc.len)
|
||||||
|
i++
|
||||||
|
continue
|
||||||
|
active_areas.Cut(i,i+1)
|
||||||
|
|
||||||
|
|
||||||
datum/controller/game_controller/proc/process_objects()
|
datum/controller/game_controller/proc/process_objects()
|
||||||
var/i = 1
|
var/i = 1
|
||||||
|
|||||||
@@ -499,6 +499,9 @@ datum/mind
|
|||||||
|
|
||||||
else if(href_list["implant"])
|
else if(href_list["implant"])
|
||||||
var/mob/living/carbon/human/H = current
|
var/mob/living/carbon/human/H = current
|
||||||
|
|
||||||
|
H.hud_updateflag |= (1 << IMPLOYAL_HUD) // updates that players HUD images so secHUD's pick up they are implanted or not.
|
||||||
|
|
||||||
switch(href_list["implant"])
|
switch(href_list["implant"])
|
||||||
if("remove")
|
if("remove")
|
||||||
for(var/obj/item/weapon/implant/loyalty/I in H.contents)
|
for(var/obj/item/weapon/implant/loyalty/I in H.contents)
|
||||||
@@ -540,6 +543,8 @@ datum/mind
|
|||||||
log_admin("[key_name_admin(usr)] has de-traitor'ed [current].")
|
log_admin("[key_name_admin(usr)] has de-traitor'ed [current].")
|
||||||
|
|
||||||
else if (href_list["revolution"])
|
else if (href_list["revolution"])
|
||||||
|
current.hud_updateflag |= (1 << SPECIALROLE_HUD)
|
||||||
|
|
||||||
switch(href_list["revolution"])
|
switch(href_list["revolution"])
|
||||||
if("clear")
|
if("clear")
|
||||||
if(src in ticker.mode.revolutionaries)
|
if(src in ticker.mode.revolutionaries)
|
||||||
@@ -633,6 +638,7 @@ datum/mind
|
|||||||
usr << "\red Reequipping revolutionary goes wrong!"
|
usr << "\red Reequipping revolutionary goes wrong!"
|
||||||
|
|
||||||
else if (href_list["cult"])
|
else if (href_list["cult"])
|
||||||
|
current.hud_updateflag |= (1 << SPECIALROLE_HUD)
|
||||||
switch(href_list["cult"])
|
switch(href_list["cult"])
|
||||||
if("clear")
|
if("clear")
|
||||||
if(src in ticker.mode.cult)
|
if(src in ticker.mode.cult)
|
||||||
@@ -682,6 +688,8 @@ datum/mind
|
|||||||
usr << "\red Spawning amulet failed!"
|
usr << "\red Spawning amulet failed!"
|
||||||
|
|
||||||
else if (href_list["wizard"])
|
else if (href_list["wizard"])
|
||||||
|
current.hud_updateflag |= (1 << SPECIALROLE_HUD)
|
||||||
|
|
||||||
switch(href_list["wizard"])
|
switch(href_list["wizard"])
|
||||||
if("clear")
|
if("clear")
|
||||||
if(src in ticker.mode.wizards)
|
if(src in ticker.mode.wizards)
|
||||||
@@ -710,6 +718,7 @@ datum/mind
|
|||||||
usr << "\blue The objectives for wizard [key] have been generated. You can edit them and anounce manually."
|
usr << "\blue The objectives for wizard [key] have been generated. You can edit them and anounce manually."
|
||||||
|
|
||||||
else if (href_list["changeling"])
|
else if (href_list["changeling"])
|
||||||
|
current.hud_updateflag |= (1 << SPECIALROLE_HUD)
|
||||||
switch(href_list["changeling"])
|
switch(href_list["changeling"])
|
||||||
if("clear")
|
if("clear")
|
||||||
if(src in ticker.mode.changelings)
|
if(src in ticker.mode.changelings)
|
||||||
@@ -744,6 +753,10 @@ datum/mind
|
|||||||
domutcheck(current, null)
|
domutcheck(current, null)
|
||||||
|
|
||||||
else if (href_list["nuclear"])
|
else if (href_list["nuclear"])
|
||||||
|
var/mob/living/carbon/human/H = current
|
||||||
|
|
||||||
|
current.hud_updateflag |= (1 << SPECIALROLE_HUD)
|
||||||
|
|
||||||
switch(href_list["nuclear"])
|
switch(href_list["nuclear"])
|
||||||
if("clear")
|
if("clear")
|
||||||
if(src in ticker.mode.syndicates)
|
if(src in ticker.mode.syndicates)
|
||||||
@@ -773,7 +786,6 @@ datum/mind
|
|||||||
if("lair")
|
if("lair")
|
||||||
current.loc = get_turf(locate("landmark*Syndicate-Spawn"))
|
current.loc = get_turf(locate("landmark*Syndicate-Spawn"))
|
||||||
if("dressup")
|
if("dressup")
|
||||||
var/mob/living/carbon/human/H = current
|
|
||||||
del(H.belt)
|
del(H.belt)
|
||||||
del(H.back)
|
del(H.back)
|
||||||
del(H.l_ear)
|
del(H.l_ear)
|
||||||
@@ -800,6 +812,7 @@ datum/mind
|
|||||||
usr << "\red No valid nuke found!"
|
usr << "\red No valid nuke found!"
|
||||||
|
|
||||||
else if (href_list["traitor"])
|
else if (href_list["traitor"])
|
||||||
|
current.hud_updateflag |= (1 << SPECIALROLE_HUD)
|
||||||
switch(href_list["traitor"])
|
switch(href_list["traitor"])
|
||||||
if("clear")
|
if("clear")
|
||||||
if(src in ticker.mode.traitors)
|
if(src in ticker.mode.traitors)
|
||||||
@@ -882,6 +895,7 @@ datum/mind
|
|||||||
current.radiation -= 50
|
current.radiation -= 50
|
||||||
|
|
||||||
else if (href_list["silicon"])
|
else if (href_list["silicon"])
|
||||||
|
current.hud_updateflag |= (1 << SPECIALROLE_HUD)
|
||||||
switch(href_list["silicon"])
|
switch(href_list["silicon"])
|
||||||
if("unmalf")
|
if("unmalf")
|
||||||
if(src in ticker.mode.malf_ai)
|
if(src in ticker.mode.malf_ai)
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/area
|
/area
|
||||||
var/fire = null
|
var/fire = null
|
||||||
var/atmos = 1
|
var/atmos = 1
|
||||||
@@ -31,6 +32,8 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
|
|||||||
|
|
||||||
var/eject = null
|
var/eject = null
|
||||||
|
|
||||||
|
var/debug = 0
|
||||||
|
var/powerupdate = 10 //We give everything 10 ticks to settle out it's power usage.
|
||||||
var/requires_power = 1
|
var/requires_power = 1
|
||||||
var/always_unpowered = 0 //this gets overriden to 1 for space in area/New()
|
var/always_unpowered = 0 //this gets overriden to 1 for space in area/New()
|
||||||
|
|
||||||
@@ -43,7 +46,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
|
|||||||
var/used_environ = 0
|
var/used_environ = 0
|
||||||
|
|
||||||
var/has_gravity = 1
|
var/has_gravity = 1
|
||||||
|
var/list/apc = list()
|
||||||
var/no_air = null
|
var/no_air = null
|
||||||
var/area/master // master area used for power calcluations
|
var/area/master // master area used for power calcluations
|
||||||
// (original area before splitting due to sd_DAL)
|
// (original area before splitting due to sd_DAL)
|
||||||
|
|||||||
@@ -13,6 +13,8 @@
|
|||||||
master = src //moved outside the spawn(1) to avoid runtimes in lighting.dm when it references loc.loc.master ~Carn
|
master = src //moved outside the spawn(1) to avoid runtimes in lighting.dm when it references loc.loc.master ~Carn
|
||||||
uid = ++global_uid
|
uid = ++global_uid
|
||||||
related = list(src)
|
related = list(src)
|
||||||
|
active_areas += src
|
||||||
|
all_areas += src
|
||||||
|
|
||||||
if(type == /area) // override defaults for space. TODO: make space areas of type /area/space rather than /area
|
if(type == /area) // override defaults for space. TODO: make space areas of type /area/space rather than /area
|
||||||
requires_power = 1
|
requires_power = 1
|
||||||
@@ -216,6 +218,7 @@
|
|||||||
// called when power status changes
|
// called when power status changes
|
||||||
|
|
||||||
/area/proc/power_change()
|
/area/proc/power_change()
|
||||||
|
master.powerupdate = 2
|
||||||
for(var/area/RA in related)
|
for(var/area/RA in related)
|
||||||
for(var/obj/machinery/M in RA) // for each machine in the area
|
for(var/obj/machinery/M in RA) // for each machine in the area
|
||||||
M.power_change() // reverify power status (to update icons etc.)
|
M.power_change() // reverify power status (to update icons etc.)
|
||||||
|
|||||||
@@ -135,6 +135,7 @@
|
|||||||
newtraitor << "\red <B>ATTENTION:</B> \black It is time to pay your debt to the Syndicate..."
|
newtraitor << "\red <B>ATTENTION:</B> \black It is time to pay your debt to the Syndicate..."
|
||||||
newtraitor << "<B>You are now a traitor.</B>"
|
newtraitor << "<B>You are now a traitor.</B>"
|
||||||
newtraitor.mind.special_role = "traitor"
|
newtraitor.mind.special_role = "traitor"
|
||||||
|
newtraitor.hud_updateflag |= 1 << SPECIALROLE_HUD
|
||||||
var/obj_count = 1
|
var/obj_count = 1
|
||||||
newtraitor << "\blue Your current objectives:"
|
newtraitor << "\blue Your current objectives:"
|
||||||
if(!config.objectives_disabled)
|
if(!config.objectives_disabled)
|
||||||
|
|||||||
@@ -208,6 +208,7 @@
|
|||||||
if(rev_mind in revolutionaries)
|
if(rev_mind in revolutionaries)
|
||||||
revolutionaries -= rev_mind
|
revolutionaries -= rev_mind
|
||||||
rev_mind.special_role = null
|
rev_mind.special_role = null
|
||||||
|
rev_mind.current.hud_updateflag |= 1 << SPECIALROLE_HUD
|
||||||
|
|
||||||
if(beingborged)
|
if(beingborged)
|
||||||
rev_mind.current << "\red <FONT size = 3><B>The frame's firmware detects and deletes your neural reprogramming! You remember nothing from the moment you were flashed until now.</B></FONT>"
|
rev_mind.current << "\red <FONT size = 3><B>The frame's firmware detects and deletes your neural reprogramming! You remember nothing from the moment you were flashed until now.</B></FONT>"
|
||||||
|
|||||||
@@ -116,6 +116,7 @@
|
|||||||
if(config.objectives_disabled)
|
if(config.objectives_disabled)
|
||||||
rev_mind.current << "<font color=blue>Within the rules,</font> try to act as an opposing force to the crew. Further RP and try to make sure other players have </i>fun<i>! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! <b>Please remember all rules aside from those without explicit exceptions apply to antagonists.</i></b>"
|
rev_mind.current << "<font color=blue>Within the rules,</font> try to act as an opposing force to the crew. Further RP and try to make sure other players have </i>fun<i>! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! <b>Please remember all rules aside from those without explicit exceptions apply to antagonists.</i></b>"
|
||||||
update_rev_icons_added(rev_mind)
|
update_rev_icons_added(rev_mind)
|
||||||
|
H.hud_updateflag |= 1 << SPECIALROLE_HUD
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
/////////////////////////////
|
/////////////////////////////
|
||||||
|
|||||||
@@ -439,6 +439,10 @@ var/global/datum/controller/occupations/job_master
|
|||||||
var/obj/item/clothing/glasses/G = H.glasses
|
var/obj/item/clothing/glasses/G = H.glasses
|
||||||
G.prescription = 1
|
G.prescription = 1
|
||||||
// H.update_icons()
|
// H.update_icons()
|
||||||
|
|
||||||
|
H.hud_updateflag |= (1 << ID_HUD)
|
||||||
|
H.hud_updateflag |= (1 << IMPLOYAL_HUD)
|
||||||
|
H.hud_updateflag |= (1 << SPECIALROLE_HUD)
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -181,10 +181,12 @@
|
|||||||
return
|
return
|
||||||
return
|
return
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
/obj/machinery/body_scanconsole/process() //not really used right now
|
/obj/machinery/body_scanconsole/process() //not really used right now
|
||||||
if(stat & (NOPOWER|BROKEN))
|
if(stat & (NOPOWER|BROKEN))
|
||||||
return
|
return
|
||||||
use_power(250) // power stuff
|
//use_power(250) // power stuff
|
||||||
|
|
||||||
// var/mob/M //occupant
|
// var/mob/M //occupant
|
||||||
// if (!( src.status )) //remove this
|
// if (!( src.status )) //remove this
|
||||||
@@ -200,6 +202,8 @@
|
|||||||
// src.updateDialog()
|
// src.updateDialog()
|
||||||
// return
|
// return
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/body_scanconsole/attack_paw(user as mob)
|
/obj/machinery/body_scanconsole/attack_paw(user as mob)
|
||||||
return src.attack_hand(user)
|
return src.attack_hand(user)
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
var/id
|
var/id
|
||||||
use_power = 1
|
use_power = 1
|
||||||
idle_power_usage = 2
|
idle_power_usage = 2
|
||||||
active_power_usage = 4
|
active_power_usage = 5
|
||||||
|
|
||||||
/obj/machinery/meter/New()
|
/obj/machinery/meter/New()
|
||||||
..()
|
..()
|
||||||
@@ -30,7 +30,7 @@
|
|||||||
icon_state = "meter0"
|
icon_state = "meter0"
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
use_power(5)
|
//use_power(5)
|
||||||
|
|
||||||
var/datum/gas_mixture/environment = target.return_air()
|
var/datum/gas_mixture/environment = target.return_air()
|
||||||
if(!environment)
|
if(!environment)
|
||||||
|
|||||||
@@ -273,7 +273,7 @@
|
|||||||
src.locked = 0
|
src.locked = 0
|
||||||
if (!src.mess)
|
if (!src.mess)
|
||||||
icon_state = "pod_0"
|
icon_state = "pod_0"
|
||||||
use_power(200)
|
//use_power(200)
|
||||||
return
|
return
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -525,6 +525,8 @@ What a mess.*/
|
|||||||
|
|
||||||
if ("Change Criminal Status")
|
if ("Change Criminal Status")
|
||||||
if (active2)
|
if (active2)
|
||||||
|
for(var/mob/living/carbon/human/H in player_list)
|
||||||
|
H.hud_updateflag |= 1 << WANTED_HUD
|
||||||
switch(href_list["criminal2"])
|
switch(href_list["criminal2"])
|
||||||
if("none")
|
if("none")
|
||||||
active2.fields["criminal"] = "None"
|
active2.fields["criminal"] = "None"
|
||||||
|
|||||||
@@ -14,16 +14,25 @@
|
|||||||
var/global/max_n_of_items = 999 // Sorry but the BYOND infinite loop detector doesn't look things over 1000.
|
var/global/max_n_of_items = 999 // Sorry but the BYOND infinite loop detector doesn't look things over 1000.
|
||||||
var/icon_on = "smartfridge"
|
var/icon_on = "smartfridge"
|
||||||
var/icon_off = "smartfridge-off"
|
var/icon_off = "smartfridge-off"
|
||||||
|
var/icon_panel = "smartfridge-panel"
|
||||||
var/item_quants = list()
|
var/item_quants = list()
|
||||||
var/ispowered = 1 //starts powered
|
var/ispowered = 1 //starts powered
|
||||||
var/isbroken = 0
|
var/isbroken = 0
|
||||||
|
var/seconds_electrified = 0;
|
||||||
|
var/shoot_inventory = 0
|
||||||
|
var/locked = 0
|
||||||
|
var/panel_open = 0 //Hacking a smartfridge
|
||||||
|
var/wires = 7
|
||||||
|
var/const/WIRE_SHOCK = 1
|
||||||
|
var/const/WIRE_SHOOTINV = 2
|
||||||
|
var/const/WIRE_SCANID = 3 //Only used by the secure smartfridge, but required by the cut, mend and pulse procs.
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/smartfridge/proc/accept_check(var/obj/item/O as obj)
|
/obj/machinery/smartfridge/proc/accept_check(var/obj/item/O as obj)
|
||||||
if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/grown/) || istype(O,/obj/item/seeds/))
|
if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/grown/) || istype(O,/obj/item/seeds/))
|
||||||
return 1
|
return 1
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/smartfridge/seeds
|
/obj/machinery/smartfridge/seeds
|
||||||
name = "\improper MegaSeed Servitor"
|
name = "\improper MegaSeed Servitor"
|
||||||
desc = "When you need seeds fast!"
|
desc = "When you need seeds fast!"
|
||||||
@@ -37,16 +46,46 @@
|
|||||||
return 1
|
return 1
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
/obj/machinery/smartfridge/secure/extract
|
||||||
/obj/machinery/smartfridge/extract
|
|
||||||
name = "\improper Slime Extract Storage"
|
name = "\improper Slime Extract Storage"
|
||||||
desc = "A refrigerated storage unit for slime extracts"
|
desc = "A refrigerated storage unit for slime extracts"
|
||||||
|
req_access_txt = "47"
|
||||||
|
|
||||||
/obj/machinery/smartfridge/extract/accept_check(var/obj/item/O as obj)
|
/obj/machinery/smartfridge/secure/extract/accept_check(var/obj/item/O as obj)
|
||||||
if(istype(O,/obj/item/slime_extract))
|
if(istype(O,/obj/item/slime_extract))
|
||||||
return 1
|
return 1
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
/obj/machinery/smartfridge/secure/medbay
|
||||||
|
name = "\improper Refrigerated Medicine Storage"
|
||||||
|
desc = "A refrigerated storage unit for storing medicine and chemicals."
|
||||||
|
icon_state = "smartfridge" //To fix the icon in the map editor.
|
||||||
|
icon_on = "smartfridge_chem"
|
||||||
|
req_one_access_txt = "5;33"
|
||||||
|
|
||||||
|
/obj/machinery/smartfridge/secure/medbay/accept_check(var/obj/item/O as obj)
|
||||||
|
if(istype(O,/obj/item/weapon/reagent_containers/glass/))
|
||||||
|
return 1
|
||||||
|
if(istype(O,/obj/item/weapon/storage/pill_bottle/))
|
||||||
|
return 1
|
||||||
|
if(istype(O,/obj/item/weapon/reagent_containers/pill/))
|
||||||
|
return 1
|
||||||
|
return 0
|
||||||
|
|
||||||
|
/obj/machinery/smartfridge/secure/virology
|
||||||
|
name = "\improper Refrigerated Virus Storage"
|
||||||
|
desc = "A refrigerated storage unit for storing viral material."
|
||||||
|
req_access_txt = "39"
|
||||||
|
icon_state = "smartfridge_virology"
|
||||||
|
icon_on = "smartfridge_virology"
|
||||||
|
icon_off = "smartfridge_virology-off"
|
||||||
|
|
||||||
|
/obj/machinery/smartfridge/secure/virology/accept_check(var/obj/item/O as obj)
|
||||||
|
if(istype(O,/obj/item/weapon/reagent_containers/glass/beaker/vial/))
|
||||||
|
return 1
|
||||||
|
if(istype(O,/obj/item/weapon/virusdish/))
|
||||||
|
return 1
|
||||||
|
return 0
|
||||||
|
|
||||||
/obj/machinery/smartfridge/chemistry
|
/obj/machinery/smartfridge/chemistry
|
||||||
name = "\improper Smart Chemical Storage"
|
name = "\improper Smart Chemical Storage"
|
||||||
@@ -70,6 +109,13 @@
|
|||||||
if(istype(O,/obj/item/weapon/reagent_containers/glass) || istype(O,/obj/item/weapon/reagent_containers/food/drinks) || istype(O,/obj/item/weapon/reagent_containers/food/condiment))
|
if(istype(O,/obj/item/weapon/reagent_containers/glass) || istype(O,/obj/item/weapon/reagent_containers/food/drinks) || istype(O,/obj/item/weapon/reagent_containers/food/condiment))
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
/obj/machinery/smartfridge/process()
|
||||||
|
if(!src.ispowered)
|
||||||
|
return
|
||||||
|
if(src.seconds_electrified > 0)
|
||||||
|
src.seconds_electrified--
|
||||||
|
if(src.shoot_inventory && prob(2))
|
||||||
|
src.throw_item()
|
||||||
|
|
||||||
/obj/machinery/smartfridge/power_change()
|
/obj/machinery/smartfridge/power_change()
|
||||||
if( powered() )
|
if( powered() )
|
||||||
@@ -136,6 +182,26 @@
|
|||||||
|
|
||||||
updateUsrDialog()
|
updateUsrDialog()
|
||||||
|
|
||||||
|
/obj/machinery/smartfridge/secure/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||||
|
if (istype(O, /obj/item/weapon/card/emag))
|
||||||
|
src.emagged = 1
|
||||||
|
user << "You short out the product lock on [src]"
|
||||||
|
return
|
||||||
|
else if(istype(O, /obj/item/weapon/screwdriver))
|
||||||
|
src.panel_open = !src.panel_open
|
||||||
|
user << "You [src.panel_open ? "open" : "close"] the maintenance panel."
|
||||||
|
src.overlays.Cut()
|
||||||
|
if(src.panel_open)
|
||||||
|
src.overlays += image(src.icon, src.icon_panel)
|
||||||
|
src.updateUsrDialog()
|
||||||
|
return
|
||||||
|
else if(istype(O, /obj/item/device/multitool)||istype(O, /obj/item/weapon/wirecutters))
|
||||||
|
if(src.panel_open)
|
||||||
|
attack_hand(user)
|
||||||
|
return
|
||||||
|
..()
|
||||||
|
return
|
||||||
|
|
||||||
/obj/machinery/smartfridge/attack_paw(mob/user as mob)
|
/obj/machinery/smartfridge/attack_paw(mob/user as mob)
|
||||||
return src.attack_hand(user)
|
return src.attack_hand(user)
|
||||||
|
|
||||||
@@ -144,6 +210,9 @@
|
|||||||
|
|
||||||
/obj/machinery/smartfridge/attack_hand(mob/user as mob)
|
/obj/machinery/smartfridge/attack_hand(mob/user as mob)
|
||||||
user.set_machine(src)
|
user.set_machine(src)
|
||||||
|
if(src.seconds_electrified != 0)
|
||||||
|
if(src.shock(user, 100))
|
||||||
|
return
|
||||||
interact(user)
|
interact(user)
|
||||||
|
|
||||||
/*******************
|
/*******************
|
||||||
@@ -176,8 +245,28 @@
|
|||||||
dat += "<br>"
|
dat += "<br>"
|
||||||
|
|
||||||
dat += "</TT>"
|
dat += "</TT>"
|
||||||
|
if(panel_open)
|
||||||
|
//One of the wires does absolutely nothing.
|
||||||
|
var/list/vendwires = list(
|
||||||
|
"Blue" = 1,
|
||||||
|
"Red" = 2,
|
||||||
|
"Black" = 3
|
||||||
|
)
|
||||||
|
dat += "<br><hr><br><B>Access Panel</B><br>"
|
||||||
|
for(var/wiredesc in vendwires)
|
||||||
|
var/is_uncut = src.wires & APCWireColorToFlag[vendwires[wiredesc]]
|
||||||
|
dat += "[wiredesc] wire: "
|
||||||
|
if(!is_uncut)
|
||||||
|
dat += "<a href='?src=\ref[src];cutwire=[vendwires[wiredesc]]'>Mend</a>"
|
||||||
|
else
|
||||||
|
dat += "<a href='?src=\ref[src];cutwire=[vendwires[wiredesc]]'>Cut</a> "
|
||||||
|
dat += "<a href='?src=\ref[src];pulsewire=[vendwires[wiredesc]]'>Pulse</a> "
|
||||||
|
dat += "<br>"
|
||||||
|
|
||||||
|
dat += "<br>"
|
||||||
|
dat += "The orange light is [(src.seconds_electrified == 0) ? "off" : "on"].<BR>"
|
||||||
|
dat += "The red light is [src.shoot_inventory ? "off" : "blinking"].<BR>"
|
||||||
user << browse("<HEAD><TITLE>[src] Supplies</TITLE></HEAD><TT>[dat]</TT>", "window=smartfridge")
|
user << browse("<HEAD><TITLE>[src] Supplies</TITLE></HEAD><TT>[dat]</TT>", "window=smartfridge")
|
||||||
onclose(user, "smartfridge")
|
|
||||||
return
|
return
|
||||||
|
|
||||||
/obj/machinery/smartfridge/Topic(href, href_list)
|
/obj/machinery/smartfridge/Topic(href, href_list)
|
||||||
@@ -185,21 +274,191 @@
|
|||||||
return
|
return
|
||||||
usr.set_machine(src)
|
usr.set_machine(src)
|
||||||
|
|
||||||
var/N = href_list["vend"]
|
if ((href_list["cutwire"]) && (src.panel_open))
|
||||||
var/amount = text2num(href_list["amount"])
|
var/twire = text2num(href_list["cutwire"])
|
||||||
|
if (!( istype(usr.get_active_hand(), /obj/item/weapon/wirecutters) ))
|
||||||
|
usr << "You need wirecutters!"
|
||||||
|
return
|
||||||
|
if (src.isWireColorCut(twire))
|
||||||
|
src.mend(twire)
|
||||||
|
else
|
||||||
|
src.cut(twire)
|
||||||
|
else if ((href_list["pulsewire"]) && (src.panel_open))
|
||||||
|
var/twire = text2num(href_list["pulsewire"])
|
||||||
|
if (!istype(usr.get_active_hand(), /obj/item/device/multitool))
|
||||||
|
usr << "You need a multitool!"
|
||||||
|
return
|
||||||
|
if (src.isWireColorCut(twire))
|
||||||
|
usr << "You can't pulse a cut wire."
|
||||||
|
return
|
||||||
|
else
|
||||||
|
src.pulse(twire)
|
||||||
|
else if (href_list["vend"])
|
||||||
|
var/N = href_list["vend"]
|
||||||
|
var/amount = text2num(href_list["amount"])
|
||||||
|
|
||||||
if(item_quants[N] <= 0) // Sanity check, there are probably ways to press the button when it shouldn't be possible.
|
if(item_quants[N] <= 0) // Sanity check, there are probably ways to press the button when it shouldn't be possible.
|
||||||
return
|
return
|
||||||
|
|
||||||
item_quants[N] = max(item_quants[N] - amount, 0)
|
item_quants[N] = max(item_quants[N] - amount, 0)
|
||||||
|
|
||||||
var/i = amount
|
|
||||||
for(var/obj/O in contents)
|
|
||||||
if(O.name == N)
|
|
||||||
O.loc = src.loc
|
|
||||||
i--
|
|
||||||
if(i <= 0)
|
|
||||||
break
|
|
||||||
|
|
||||||
|
var/i = amount
|
||||||
|
for(var/obj/O in contents)
|
||||||
|
if(O.name == N)
|
||||||
|
O.loc = src.loc
|
||||||
|
i--
|
||||||
|
if(i <= 0)
|
||||||
|
break
|
||||||
|
src.add_fingerprint(usr)
|
||||||
src.updateUsrDialog()
|
src.updateUsrDialog()
|
||||||
return
|
return
|
||||||
|
|
||||||
|
/*************
|
||||||
|
* Hacking
|
||||||
|
**************/
|
||||||
|
|
||||||
|
/obj/machinery/smartfridge/proc/cut(var/wireColor)
|
||||||
|
var/wireFlag = APCWireColorToFlag[wireColor]
|
||||||
|
var/wireIndex = APCWireColorToIndex[wireColor]
|
||||||
|
src.wires &= ~wireFlag
|
||||||
|
switch(wireIndex)
|
||||||
|
if(WIRE_SHOCK)
|
||||||
|
src.seconds_electrified = -1
|
||||||
|
if (WIRE_SHOOTINV)
|
||||||
|
if(!src.shoot_inventory)
|
||||||
|
src.shoot_inventory = 1
|
||||||
|
if(WIRE_SCANID)
|
||||||
|
src.locked = 1
|
||||||
|
|
||||||
|
/obj/machinery/smartfridge/proc/mend(var/wireColor)
|
||||||
|
var/wireFlag = APCWireColorToFlag[wireColor]
|
||||||
|
var/wireIndex = APCWireColorToIndex[wireColor] //not used in this function
|
||||||
|
src.wires |= wireFlag
|
||||||
|
switch(wireIndex)
|
||||||
|
if(WIRE_SHOCK)
|
||||||
|
src.seconds_electrified = 0
|
||||||
|
if (WIRE_SHOOTINV)
|
||||||
|
src.shoot_inventory = 0
|
||||||
|
if(WIRE_SCANID)
|
||||||
|
src.locked = 0
|
||||||
|
|
||||||
|
/obj/machinery/smartfridge/proc/pulse(var/wireColor)
|
||||||
|
var/wireIndex = APCWireColorToIndex[wireColor]
|
||||||
|
switch(wireIndex)
|
||||||
|
if(WIRE_SHOCK)
|
||||||
|
src.seconds_electrified = 30
|
||||||
|
if (WIRE_SHOOTINV)
|
||||||
|
src.shoot_inventory = !src.shoot_inventory
|
||||||
|
if(WIRE_SCANID)
|
||||||
|
src.locked = -1
|
||||||
|
|
||||||
|
/obj/machinery/smartfridge/proc/isWireColorCut(var/wireColor)
|
||||||
|
var/wireFlag = APCWireColorToFlag[wireColor]
|
||||||
|
return ((src.wires & wireFlag) == 0)
|
||||||
|
|
||||||
|
/obj/machinery/smartfridge/proc/isWireCut(var/wireIndex)
|
||||||
|
var/wireFlag = APCIndexToFlag[wireIndex]
|
||||||
|
return ((src.wires & wireFlag) == 0)
|
||||||
|
|
||||||
|
/obj/machinery/smartfridge/proc/throw_item()
|
||||||
|
var/obj/throw_item = null
|
||||||
|
var/mob/living/target = locate() in view(7,src)
|
||||||
|
if(!target)
|
||||||
|
return 0
|
||||||
|
|
||||||
|
for (var/O in item_quants)
|
||||||
|
if(item_quants[O] <= 0) //Try to use a record that actually has something to dump.
|
||||||
|
continue
|
||||||
|
|
||||||
|
item_quants[O]--
|
||||||
|
for(var/obj/T in contents)
|
||||||
|
if(T.name == O)
|
||||||
|
T.loc = src.loc
|
||||||
|
throw_item = T
|
||||||
|
break
|
||||||
|
break
|
||||||
|
if(!throw_item)
|
||||||
|
return 0
|
||||||
|
spawn(0)
|
||||||
|
throw_item.throw_at(target,16,3)
|
||||||
|
src.visible_message("\red <b>[src] launches [throw_item.name] at [target.name]!</b>")
|
||||||
|
return 1
|
||||||
|
|
||||||
|
/obj/machinery/smartfridge/proc/shock(mob/user, prb)
|
||||||
|
if(!src.ispowered) // unpowered, no shock
|
||||||
|
return 0
|
||||||
|
if(!prob(prb))
|
||||||
|
return 0
|
||||||
|
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||||
|
s.set_up(5, 1, src)
|
||||||
|
s.start()
|
||||||
|
if (electrocute_mob(user, get_area(src), src, 0.7))
|
||||||
|
return 1
|
||||||
|
else
|
||||||
|
return 0
|
||||||
|
|
||||||
|
/************************
|
||||||
|
* Secure SmartFridges
|
||||||
|
*************************/
|
||||||
|
|
||||||
|
/obj/machinery/smartfridge/secure/Topic(href, href_list)
|
||||||
|
usr.set_machine(src)
|
||||||
|
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))))
|
||||||
|
if ((!src.allowed(usr)) && (!src.emagged) && (src.locked != -1) && href_list["vend"]) //For SECURE VENDING MACHINES YEAH
|
||||||
|
usr << "\red Access denied." //Unless emagged of course
|
||||||
|
return
|
||||||
|
..()
|
||||||
|
return
|
||||||
|
|
||||||
|
/obj/machinery/smartfridge/secure/interact(mob/user as mob)
|
||||||
|
|
||||||
|
if(!src.ispowered)
|
||||||
|
return
|
||||||
|
|
||||||
|
var/dat = "<TT><b>Select an item:</b><br>"
|
||||||
|
|
||||||
|
if (contents.len == 0)
|
||||||
|
dat += "<font color = 'red'>No product loaded!</font>"
|
||||||
|
else
|
||||||
|
for (var/O in item_quants)
|
||||||
|
if(item_quants[O] > 0)
|
||||||
|
var/N = item_quants[O]
|
||||||
|
dat += "<FONT color = 'blue'><B>[capitalize(O)]</B>:"
|
||||||
|
dat += " [N] </font>"
|
||||||
|
dat += "<a href='byond://?src=\ref[src];vend=[O];amount=1'>Vend</A> "
|
||||||
|
if(N > 5)
|
||||||
|
dat += "(<a href='byond://?src=\ref[src];vend=[O];amount=5'>x5</A>)"
|
||||||
|
if(N > 10)
|
||||||
|
dat += "(<a href='byond://?src=\ref[src];vend=[O];amount=10'>x10</A>)"
|
||||||
|
if(N > 25)
|
||||||
|
dat += "(<a href='byond://?src=\ref[src];vend=[O];amount=25'>x25</A>)"
|
||||||
|
if(N > 1)
|
||||||
|
dat += "(<a href='?src=\ref[src];vend=[O];amount=[N]'>All</A>)"
|
||||||
|
dat += "<br>"
|
||||||
|
|
||||||
|
dat += "</TT>"
|
||||||
|
if(panel_open)
|
||||||
|
var/list/vendwires = list(
|
||||||
|
"Violet" = 1,
|
||||||
|
"Orange" = 2,
|
||||||
|
"Green" = 3
|
||||||
|
)
|
||||||
|
dat += "<br><hr><br><B>Access Panel</B><br>"
|
||||||
|
for(var/wiredesc in vendwires)
|
||||||
|
var/is_uncut = src.wires & APCWireColorToFlag[vendwires[wiredesc]]
|
||||||
|
dat += "[wiredesc] wire: "
|
||||||
|
if(!is_uncut)
|
||||||
|
dat += "<a href='?src=\ref[src];cutwire=[vendwires[wiredesc]]'>Mend</a>"
|
||||||
|
else
|
||||||
|
dat += "<a href='?src=\ref[src];cutwire=[vendwires[wiredesc]]'>Cut</a> "
|
||||||
|
dat += "<a href='?src=\ref[src];pulsewire=[vendwires[wiredesc]]'>Pulse</a> "
|
||||||
|
dat += "<br>"
|
||||||
|
|
||||||
|
dat += "<br>"
|
||||||
|
dat += "The orange light is [(src.seconds_electrified == 0) ? "off" : "on"].<BR>"
|
||||||
|
//dat += "The red light is [src.shoot_inventory ? "off" : "blinking"].<BR>"
|
||||||
|
dat += "The green light is [src.locked == 1 ? "off" : "[src.locked == -1 ? "blinking" : "on"]"].<BR>"
|
||||||
|
user << browse("<HEAD><TITLE>[src] Supplies</TITLE></HEAD><TT>[dat]</TT>", "window=smartfridge")
|
||||||
|
return
|
||||||
|
|
||||||
|
//TODO: Make smartfridges hackable. - JoeyJo0
|
||||||
|
|||||||
@@ -67,8 +67,10 @@ Class Procs:
|
|||||||
Checks to see if area that contains the object has power available for power
|
Checks to see if area that contains the object has power available for power
|
||||||
channel given in 'chan'.
|
channel given in 'chan'.
|
||||||
|
|
||||||
use_power(amount, chan=EQUIP) 'modules/power/power.dm'
|
use_power(amount, chan=EQUIP, autocalled) 'modules/power/power.dm'
|
||||||
Deducts 'amount' from the power channel 'chan' of the area that contains the object.
|
Deducts 'amount' from the power channel 'chan' of the area that contains the object.
|
||||||
|
If it's autocalled then everything is normal, if something else calls use_power we are going to
|
||||||
|
need to recalculate the power two ticks in a row.
|
||||||
|
|
||||||
power_change() 'modules/power/power.dm'
|
power_change() 'modules/power/power.dm'
|
||||||
Called by the area that contains the object when ever that area under goes a
|
Called by the area that contains the object when ever that area under goes a
|
||||||
@@ -159,9 +161,9 @@ Class Procs:
|
|||||||
if(!powered(power_channel))
|
if(!powered(power_channel))
|
||||||
return 0
|
return 0
|
||||||
if(src.use_power == 1)
|
if(src.use_power == 1)
|
||||||
use_power(idle_power_usage,power_channel)
|
use_power(idle_power_usage,power_channel, 1)
|
||||||
else if(src.use_power >= 2)
|
else if(src.use_power >= 2)
|
||||||
use_power(active_power_usage,power_channel)
|
use_power(active_power_usage,power_channel, 1)
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
/obj/machinery/Topic(href, href_list)
|
/obj/machinery/Topic(href, href_list)
|
||||||
@@ -189,6 +191,10 @@ Class Procs:
|
|||||||
return 1
|
return 1
|
||||||
|
|
||||||
src.add_fingerprint(usr)
|
src.add_fingerprint(usr)
|
||||||
|
|
||||||
|
var/area/A = get_area(src)
|
||||||
|
A.powerupdate = 1
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
/obj/machinery/attack_ai(mob/user as mob)
|
/obj/machinery/attack_ai(mob/user as mob)
|
||||||
@@ -228,6 +234,10 @@ Class Procs:
|
|||||||
return 1
|
return 1
|
||||||
|
|
||||||
src.add_fingerprint(user)
|
src.add_fingerprint(user)
|
||||||
|
|
||||||
|
var/area/A = get_area(src)
|
||||||
|
A.powerupdate = 1
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
/obj/machinery/proc/RefreshParts() //Placeholder proc for machines that are built using frames.
|
/obj/machinery/proc/RefreshParts() //Placeholder proc for machines that are built using frames.
|
||||||
|
|||||||
@@ -47,8 +47,11 @@
|
|||||||
affected.implants += src.imp
|
affected.implants += src.imp
|
||||||
imp.part = affected
|
imp.part = affected
|
||||||
|
|
||||||
|
H.hud_updateflag |= 1 << IMPLOYAL_HUD
|
||||||
|
|
||||||
src.imp = null
|
src.imp = null
|
||||||
update()
|
update()
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ var/global/obj/effect/overlay/plmaster = null
|
|||||||
var/global/obj/effect/overlay/slmaster = null
|
var/global/obj/effect/overlay/slmaster = null
|
||||||
|
|
||||||
|
|
||||||
|
var/global/list/active_areas = list()
|
||||||
|
var/global/list/all_areas = list()
|
||||||
var/global/list/machines = list()
|
var/global/list/machines = list()
|
||||||
var/global/list/processing_objects = list()
|
var/global/list/processing_objects = list()
|
||||||
var/global/list/active_diseases = list()
|
var/global/list/active_diseases = list()
|
||||||
@@ -114,7 +116,7 @@ var/list/reg_dna = list( )
|
|||||||
var/mouse_respawn_time = 5 //Amount of time that must pass between a player dying as a mouse and repawning as a mouse. In minutes.
|
var/mouse_respawn_time = 5 //Amount of time that must pass between a player dying as a mouse and repawning as a mouse. In minutes.
|
||||||
|
|
||||||
var/CELLRATE = 0.002 // multiplier for watts per tick <> cell storage (eg: .002 means if there is a load of 1000 watts, 20 units will be taken from a cell per second)
|
var/CELLRATE = 0.002 // multiplier for watts per tick <> cell storage (eg: .002 means if there is a load of 1000 watts, 20 units will be taken from a cell per second)
|
||||||
var/CHARGELEVEL = 0.001 // Cap for how fast cells charge, as a percentage-per-tick (.001 means cellcharge is capped to 1% per second)
|
var/CHARGELEVEL = 0.0005 // Cap for how fast cells charge, as a percentage-per-tick (.001 means cellcharge is capped to 1% per second)
|
||||||
|
|
||||||
var/shuttle_z = 2 //default
|
var/shuttle_z = 2 //default
|
||||||
var/airtunnel_start = 68 // default
|
var/airtunnel_start = 68 // default
|
||||||
|
|||||||
@@ -14,80 +14,25 @@
|
|||||||
name = "Health Scanner HUD"
|
name = "Health Scanner HUD"
|
||||||
desc = "A heads-up display that scans the humans in view and provides accurate data about their health status."
|
desc = "A heads-up display that scans the humans in view and provides accurate data about their health status."
|
||||||
icon_state = "healthhud"
|
icon_state = "healthhud"
|
||||||
proc
|
|
||||||
RoundHealth(health)
|
|
||||||
|
|
||||||
|
|
||||||
RoundHealth(health)
|
|
||||||
switch(health)
|
|
||||||
if(100 to INFINITY)
|
|
||||||
return "health100"
|
|
||||||
if(70 to 100)
|
|
||||||
return "health80"
|
|
||||||
if(50 to 70)
|
|
||||||
return "health60"
|
|
||||||
if(30 to 50)
|
|
||||||
return "health40"
|
|
||||||
if(18 to 30)
|
|
||||||
return "health25"
|
|
||||||
if(5 to 18)
|
|
||||||
return "health10"
|
|
||||||
if(1 to 5)
|
|
||||||
return "health1"
|
|
||||||
if(-99 to 0)
|
|
||||||
return "health0"
|
|
||||||
else
|
|
||||||
return "health-100"
|
|
||||||
return "0"
|
|
||||||
|
|
||||||
|
/obj/item/clothing/glasses/hud/health/process_hud(var/mob/M)
|
||||||
process_hud(var/mob/M)
|
if(!M) return
|
||||||
if(!M) return
|
if(!M.client) return
|
||||||
if(!M.client) return
|
var/client/C = M.client
|
||||||
var/client/C = M.client
|
for(var/mob/living/carbon/human/patient in view(get_turf(M)))
|
||||||
var/image/holder
|
if(M.see_invisible < patient.invisibility)
|
||||||
for(var/mob/living/carbon/human/patient in view(get_turf(M)))
|
continue
|
||||||
if(M.see_invisible < patient.invisibility)
|
C.images += patient.hud_list[HEALTH_HUD]
|
||||||
continue
|
C.images += patient.hud_list[STATUS_HUD]
|
||||||
var/foundVirus = 0
|
|
||||||
for(var/datum/disease/D in patient.viruses)
|
|
||||||
if(!D.hidden[SCANNER])
|
|
||||||
foundVirus++
|
|
||||||
for (var/ID in patient.virus2)
|
|
||||||
if (ID in virusDB)
|
|
||||||
foundVirus = 1
|
|
||||||
break
|
|
||||||
if(!C) continue
|
|
||||||
|
|
||||||
holder = patient.hud_list[HEALTH_HUD]
|
|
||||||
if(patient.stat == 2)
|
|
||||||
holder.icon_state = "hudhealth-100"
|
|
||||||
else
|
|
||||||
holder.icon_state = "hud[RoundHealth(patient.health)]"
|
|
||||||
C.images += holder
|
|
||||||
|
|
||||||
holder = patient.hud_list[STATUS_HUD]
|
|
||||||
if(patient.stat == 2)
|
|
||||||
holder.icon_state = "huddead"
|
|
||||||
else if(patient.status_flags & XENO_HOST)
|
|
||||||
holder.icon_state = "hudxeno"
|
|
||||||
else if(foundVirus)
|
|
||||||
holder.icon_state = "hudill"
|
|
||||||
else if(patient.has_brain_worms())
|
|
||||||
var/mob/living/simple_animal/borer/B = patient.has_brain_worms()
|
|
||||||
if(B.controlling)
|
|
||||||
holder.icon_state = "hudbrainworm"
|
|
||||||
else
|
|
||||||
holder.icon_state = "hudhealthy"
|
|
||||||
else
|
|
||||||
holder.icon_state = "hudhealthy"
|
|
||||||
C.images += holder
|
|
||||||
|
|
||||||
|
|
||||||
/obj/item/clothing/glasses/hud/security
|
/obj/item/clothing/glasses/hud/security
|
||||||
name = "Security HUD"
|
name = "Security HUD"
|
||||||
desc = "A heads-up display that scans the humans in view and provides accurate data about their ID status and security records."
|
desc = "A heads-up display that scans the humans in view and provides accurate data about their ID status and security records."
|
||||||
icon_state = "securityhud"
|
icon_state = "securityhud"
|
||||||
|
var/global/list/jobs[0]
|
||||||
|
|
||||||
/obj/item/clothing/glasses/hud/security/jensenshades
|
/obj/item/clothing/glasses/hud/security/jensenshades
|
||||||
name = "Augmented shades"
|
name = "Augmented shades"
|
||||||
@@ -98,62 +43,16 @@
|
|||||||
invisa_view = 2
|
invisa_view = 2
|
||||||
|
|
||||||
/obj/item/clothing/glasses/hud/security/process_hud(var/mob/M)
|
/obj/item/clothing/glasses/hud/security/process_hud(var/mob/M)
|
||||||
|
|
||||||
if(!M) return
|
if(!M) return
|
||||||
if(!M.client) return
|
if(!M.client) return
|
||||||
var/client/C = M.client
|
var/client/C = M.client
|
||||||
var/image/holder
|
|
||||||
for(var/mob/living/carbon/human/perp in view(get_turf(M)))
|
for(var/mob/living/carbon/human/perp in view(get_turf(M)))
|
||||||
if(M.see_invisible < perp.invisibility)
|
if(M.see_invisible < perp.invisibility)
|
||||||
continue
|
continue
|
||||||
if(!C) continue
|
if(!C) continue
|
||||||
var/perpname = perp.name
|
C.images += perp.hud_list[ID_HUD]
|
||||||
holder = perp.hud_list[ID_HUD]
|
C.images += perp.hud_list[WANTED_HUD]
|
||||||
if(perp.wear_id)
|
C.images += perp.hud_list[IMPTRACK_HUD]
|
||||||
var/obj/item/weapon/card/id/I = perp.wear_id.GetID()
|
C.images += perp.hud_list[IMPLOYAL_HUD]
|
||||||
if(I)
|
C.images += perp.hud_list[IMPCHEM_HUD]
|
||||||
perpname = I.registered_name
|
|
||||||
holder.icon_state = "hud[ckey(I.GetJobName())]"
|
|
||||||
C.images += holder
|
|
||||||
else
|
|
||||||
perpname = perp.name
|
|
||||||
holder.icon_state = "hudunknown"
|
|
||||||
C.images += holder
|
|
||||||
else
|
|
||||||
perpname = perp.name
|
|
||||||
holder.icon_state = "hudunknown"
|
|
||||||
C.images += holder
|
|
||||||
|
|
||||||
for(var/datum/data/record/E in data_core.general)
|
|
||||||
if(E.fields["name"] == perpname)
|
|
||||||
holder = perp.hud_list[WANTED_HUD]
|
|
||||||
for (var/datum/data/record/R in data_core.security)
|
|
||||||
if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "*Arrest*"))
|
|
||||||
holder.icon_state = "hudwanted"
|
|
||||||
C.images += holder
|
|
||||||
break
|
|
||||||
else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Incarcerated"))
|
|
||||||
holder.icon_state = "hudprisoner"
|
|
||||||
C.images += holder
|
|
||||||
break
|
|
||||||
else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Parolled"))
|
|
||||||
holder.icon_state = "hudparolled"
|
|
||||||
C.images += holder
|
|
||||||
break
|
|
||||||
else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Released"))
|
|
||||||
holder.icon_state = "hudreleased"
|
|
||||||
C.images += holder
|
|
||||||
break
|
|
||||||
for(var/obj/item/weapon/implant/I in perp)
|
|
||||||
if(I.implanted)
|
|
||||||
if(istype(I,/obj/item/weapon/implant/tracking))
|
|
||||||
holder = perp.hud_list[IMPTRACK_HUD]
|
|
||||||
holder.icon_state = "hud_imp_tracking"
|
|
||||||
C.images += holder
|
|
||||||
if(istype(I,/obj/item/weapon/implant/loyalty))
|
|
||||||
holder = perp.hud_list[IMPLOYAL_HUD]
|
|
||||||
holder.icon_state = "hud_imp_loyal"
|
|
||||||
C.images += holder
|
|
||||||
if(istype(I,/obj/item/weapon/implant/chem))
|
|
||||||
holder = perp.hud_list[IMPCHEM_HUD]
|
|
||||||
holder.icon_state = "hud_imp_chem"
|
|
||||||
C.images += holder
|
|
||||||
|
|||||||
@@ -102,10 +102,11 @@ Works together with spawning an observer, noted above.
|
|||||||
for(var/image/hud in client.images)
|
for(var/image/hud in client.images)
|
||||||
if(copytext(hud.icon_state,1,4) == "hud")
|
if(copytext(hud.icon_state,1,4) == "hud")
|
||||||
client.images.Remove(hud)
|
client.images.Remove(hud)
|
||||||
|
|
||||||
if(antagHUD)
|
if(antagHUD)
|
||||||
var/list/target_list = list()
|
var/list/target_list = list()
|
||||||
for(var/mob/living/target in oview(src))
|
for(var/mob/living/target in oview(src, 14))
|
||||||
if( target.mind&&(target.mind.special_role||issilicon(target)) )
|
if(target.mind&&(target.mind.special_role||issilicon(target)) )
|
||||||
target_list += target
|
target_list += target
|
||||||
if(target_list.len)
|
if(target_list.len)
|
||||||
assess_targets(target_list, src)
|
assess_targets(target_list, src)
|
||||||
@@ -113,91 +114,19 @@ Works together with spawning an observer, noted above.
|
|||||||
process_medHUD(src)
|
process_medHUD(src)
|
||||||
|
|
||||||
|
|
||||||
// Direct copied from medical HUD glasses proc, used to determine what health bar to put over the targets head.
|
|
||||||
/mob/dead/proc/RoundHealth(var/health)
|
|
||||||
switch(health)
|
|
||||||
if(100 to INFINITY)
|
|
||||||
return "health100"
|
|
||||||
if(70 to 100)
|
|
||||||
return "health80"
|
|
||||||
if(50 to 70)
|
|
||||||
return "health60"
|
|
||||||
if(30 to 50)
|
|
||||||
return "health40"
|
|
||||||
if(18 to 30)
|
|
||||||
return "health25"
|
|
||||||
if(5 to 18)
|
|
||||||
return "health10"
|
|
||||||
if(1 to 5)
|
|
||||||
return "health1"
|
|
||||||
if(-99 to 0)
|
|
||||||
return "health0"
|
|
||||||
else
|
|
||||||
return "health-100"
|
|
||||||
return "0"
|
|
||||||
|
|
||||||
|
|
||||||
// Pretty much a direct copy of Medical HUD stuff, except will show ill if they are ill instead of also checking for known illnesses.
|
|
||||||
|
|
||||||
/mob/dead/proc/process_medHUD(var/mob/M)
|
/mob/dead/proc/process_medHUD(var/mob/M)
|
||||||
var/client/C = M.client
|
var/client/C = M.client
|
||||||
var/image/holder
|
for(var/mob/living/carbon/human/patient in oview(M, 14))
|
||||||
for(var/mob/living/carbon/human/patient in oview(M))
|
C.images += patient.hud_list[HEALTH_HUD]
|
||||||
var/foundVirus = 0
|
C.images += patient.hud_list[STATUS_HUD_OOC]
|
||||||
if(patient.virus2.len)
|
|
||||||
foundVirus = 1
|
|
||||||
if(!C) return
|
|
||||||
holder = patient.hud_list[HEALTH_HUD]
|
|
||||||
if(patient.stat == 2)
|
|
||||||
holder.icon_state = "hudhealth-100"
|
|
||||||
else
|
|
||||||
holder.icon_state = "hud[RoundHealth(patient.health)]"
|
|
||||||
C.images += holder
|
|
||||||
|
|
||||||
holder = patient.hud_list[STATUS_HUD]
|
|
||||||
if(patient.stat == 2)
|
|
||||||
holder.icon_state = "huddead"
|
|
||||||
else if(patient.status_flags & XENO_HOST)
|
|
||||||
holder.icon_state = "hudxeno"
|
|
||||||
else if(foundVirus)
|
|
||||||
holder.icon_state = "hudill"
|
|
||||||
else if(patient.has_brain_worms())
|
|
||||||
var/mob/living/simple_animal/borer/B = patient.has_brain_worms()
|
|
||||||
if(B.controlling)
|
|
||||||
holder.icon_state = "hudbrainworm"
|
|
||||||
else
|
|
||||||
holder.icon_state = "hudhealthy"
|
|
||||||
else
|
|
||||||
holder.icon_state = "hudhealthy"
|
|
||||||
|
|
||||||
C.images += holder
|
|
||||||
|
|
||||||
|
|
||||||
/mob/dead/proc/assess_targets(list/target_list, mob/dead/observer/U)
|
/mob/dead/proc/assess_targets(list/target_list, mob/dead/observer/U)
|
||||||
var/icon/tempHud = 'icons/mob/hud.dmi'
|
var/client/C = U.client
|
||||||
for(var/mob/living/target in target_list)
|
for(var/mob/living/carbon/human/target in target_list)
|
||||||
if(iscarbon(target))
|
C.images += target.hud_list[SPECIALROLE_HUD]
|
||||||
switch(target.mind.special_role)
|
|
||||||
if("traitor","Syndicate")
|
|
||||||
U.client.images += image(tempHud,target,"hudsyndicate")
|
/*
|
||||||
if("Revolutionary")
|
|
||||||
U.client.images += image(tempHud,target,"hudrevolutionary")
|
|
||||||
if("Head Revolutionary")
|
|
||||||
U.client.images += image(tempHud,target,"hudheadrevolutionary")
|
|
||||||
if("Cultist")
|
|
||||||
U.client.images += image(tempHud,target,"hudcultist")
|
|
||||||
if("Changeling")
|
|
||||||
U.client.images += image(tempHud,target,"hudchangeling")
|
|
||||||
if("Wizard","Fake Wizard")
|
|
||||||
U.client.images += image(tempHud,target,"hudwizard")
|
|
||||||
if("Hunter","Sentinel","Drone","Queen")
|
|
||||||
U.client.images += image(tempHud,target,"hudalien")
|
|
||||||
if("Death Commando")
|
|
||||||
U.client.images += image(tempHud,target,"huddeathsquad")
|
|
||||||
if("Ninja")
|
|
||||||
U.client.images += image(tempHud,target,"hudninja")
|
|
||||||
else//If we don't know what role they have but they have one.
|
|
||||||
U.client.images += image(tempHud,target,"hudunknown1")
|
|
||||||
else//If the silicon mob has no law datum, no inherent laws, or a law zero, add them to the hud.
|
else//If the silicon mob has no law datum, no inherent laws, or a law zero, add them to the hud.
|
||||||
var/mob/living/silicon/silicon_target = target
|
var/mob/living/silicon/silicon_target = target
|
||||||
if(!silicon_target.laws||(silicon_target.laws&&(silicon_target.laws.zeroth||!silicon_target.laws.inherent.len))||silicon_target.mind.special_role=="traitor")
|
if(!silicon_target.laws||(silicon_target.laws&&(silicon_target.laws.zeroth||!silicon_target.laws.inherent.len))||silicon_target.mind.special_role=="traitor")
|
||||||
@@ -205,6 +134,7 @@ Works together with spawning an observer, noted above.
|
|||||||
U.client.images += image(tempHud,silicon_target,"hudmalborg")
|
U.client.images += image(tempHud,silicon_target,"hudmalborg")
|
||||||
else
|
else
|
||||||
U.client.images += image(tempHud,silicon_target,"hudmalai")
|
U.client.images += image(tempHud,silicon_target,"hudmalai")
|
||||||
|
*/
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
/mob/proc/ghostize(var/can_reenter_corpse = 1)
|
/mob/proc/ghostize(var/can_reenter_corpse = 1)
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
voice_name = "unknown"
|
voice_name = "unknown"
|
||||||
icon = 'icons/mob/human.dmi'
|
icon = 'icons/mob/human.dmi'
|
||||||
icon_state = "body_m_s"
|
icon_state = "body_m_s"
|
||||||
var/list/hud_list = list()
|
var/list/hud_list[9]
|
||||||
var/datum/species/species //Contains icon generation and language information, set during New().
|
var/datum/species/species //Contains icon generation and language information, set during New().
|
||||||
var/embedded_flag //To check if we've need to roll for damage on movement while an item is imbedded in us.
|
var/embedded_flag //To check if we've need to roll for damage on movement while an item is imbedded in us.
|
||||||
|
|
||||||
@@ -54,8 +54,16 @@
|
|||||||
dna = new /datum/dna(null)
|
dna = new /datum/dna(null)
|
||||||
dna.species=species.name
|
dna.species=species.name
|
||||||
|
|
||||||
for(var/i=0;i<7;i++) // 2 for medHUDs and 5 for secHUDs
|
hud_list[HEALTH_HUD] = image('icons/mob/hud.dmi', src, "hudhealth100")
|
||||||
hud_list += image('icons/mob/hud.dmi', src, "hudunknown")
|
hud_list[STATUS_HUD] = image('icons/mob/hud.dmi', src, "hudhealthy")
|
||||||
|
hud_list[ID_HUD] = image('icons/mob/hud.dmi', src, "hudunknown")
|
||||||
|
hud_list[WANTED_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
|
||||||
|
hud_list[IMPLOYAL_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
|
||||||
|
hud_list[IMPCHEM_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
|
||||||
|
hud_list[IMPTRACK_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
|
||||||
|
hud_list[SPECIALROLE_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
|
||||||
|
hud_list[STATUS_HUD_OOC] = image('icons/mob/hud.dmi', src, "hudhealthy")
|
||||||
|
|
||||||
|
|
||||||
..()
|
..()
|
||||||
|
|
||||||
@@ -553,6 +561,7 @@
|
|||||||
modified = 1
|
modified = 1
|
||||||
|
|
||||||
spawn()
|
spawn()
|
||||||
|
hud_updateflag |= 1 << WANTED_HUD
|
||||||
if(istype(usr,/mob/living/carbon/human))
|
if(istype(usr,/mob/living/carbon/human))
|
||||||
var/mob/living/carbon/human/U = usr
|
var/mob/living/carbon/human/U = usr
|
||||||
U.handle_regular_hud_updates()
|
U.handle_regular_hud_updates()
|
||||||
|
|||||||
@@ -47,6 +47,7 @@
|
|||||||
take_overall_damage(amount, 0)
|
take_overall_damage(amount, 0)
|
||||||
else
|
else
|
||||||
heal_overall_damage(-amount, 0)
|
heal_overall_damage(-amount, 0)
|
||||||
|
hud_updateflag |= 1 << HEALTH_HUD
|
||||||
|
|
||||||
/mob/living/carbon/human/adjustFireLoss(var/amount)
|
/mob/living/carbon/human/adjustFireLoss(var/amount)
|
||||||
if(species && species.burn_mod)
|
if(species && species.burn_mod)
|
||||||
@@ -56,6 +57,7 @@
|
|||||||
take_overall_damage(0, amount)
|
take_overall_damage(0, amount)
|
||||||
else
|
else
|
||||||
heal_overall_damage(0, -amount)
|
heal_overall_damage(0, -amount)
|
||||||
|
hud_updateflag |= 1 << HEALTH_HUD
|
||||||
|
|
||||||
/mob/living/carbon/human/Stun(amount)
|
/mob/living/carbon/human/Stun(amount)
|
||||||
if(HULK in mutations) return
|
if(HULK in mutations) return
|
||||||
@@ -97,6 +99,8 @@
|
|||||||
if (O.status & ORGAN_MUTATED)
|
if (O.status & ORGAN_MUTATED)
|
||||||
O.unmutate()
|
O.unmutate()
|
||||||
src << "<span class = 'notice'>Your [O.display_name] is shaped normally again.</span>"
|
src << "<span class = 'notice'>Your [O.display_name] is shaped normally again.</span>"
|
||||||
|
hud_updateflag |= 1 << HEALTH_HUD
|
||||||
|
|
||||||
////////////////////////////////////////////
|
////////////////////////////////////////////
|
||||||
|
|
||||||
//Returns a list of damaged organs
|
//Returns a list of damaged organs
|
||||||
@@ -124,6 +128,7 @@
|
|||||||
var/datum/organ/external/picked = pick(parts)
|
var/datum/organ/external/picked = pick(parts)
|
||||||
if(picked.heal_damage(brute,burn))
|
if(picked.heal_damage(brute,burn))
|
||||||
UpdateDamageIcon()
|
UpdateDamageIcon()
|
||||||
|
hud_updateflag |= 1 << HEALTH_HUD
|
||||||
updatehealth()
|
updatehealth()
|
||||||
|
|
||||||
//Damages ONE external organ, organ gets randomly selected from damagable ones.
|
//Damages ONE external organ, organ gets randomly selected from damagable ones.
|
||||||
@@ -135,6 +140,7 @@
|
|||||||
var/datum/organ/external/picked = pick(parts)
|
var/datum/organ/external/picked = pick(parts)
|
||||||
if(picked.take_damage(brute,burn,sharp))
|
if(picked.take_damage(brute,burn,sharp))
|
||||||
UpdateDamageIcon()
|
UpdateDamageIcon()
|
||||||
|
hud_updateflag |= 1 << HEALTH_HUD
|
||||||
updatehealth()
|
updatehealth()
|
||||||
|
|
||||||
|
|
||||||
@@ -156,6 +162,7 @@
|
|||||||
|
|
||||||
parts -= picked
|
parts -= picked
|
||||||
updatehealth()
|
updatehealth()
|
||||||
|
hud_updateflag |= 1 << HEALTH_HUD
|
||||||
if(update) UpdateDamageIcon()
|
if(update) UpdateDamageIcon()
|
||||||
|
|
||||||
// damage MANY external organs, in random order
|
// damage MANY external organs, in random order
|
||||||
@@ -175,6 +182,7 @@
|
|||||||
|
|
||||||
parts -= picked
|
parts -= picked
|
||||||
updatehealth()
|
updatehealth()
|
||||||
|
hud_updateflag |= 1 << HEALTH_HUD
|
||||||
if(update) UpdateDamageIcon()
|
if(update) UpdateDamageIcon()
|
||||||
|
|
||||||
|
|
||||||
@@ -200,6 +208,7 @@ This function restores all organs.
|
|||||||
if(istype(E, /datum/organ/external))
|
if(istype(E, /datum/organ/external))
|
||||||
if (E.heal_damage(brute, burn))
|
if (E.heal_damage(brute, burn))
|
||||||
UpdateDamageIcon()
|
UpdateDamageIcon()
|
||||||
|
hud_updateflag |= 1 << HEALTH_HUD
|
||||||
else
|
else
|
||||||
return 0
|
return 0
|
||||||
return
|
return
|
||||||
@@ -243,6 +252,7 @@ This function restores all organs.
|
|||||||
|
|
||||||
// Will set our damageoverlay icon to the next level, which will then be set back to the normal level the next mob.Life().
|
// Will set our damageoverlay icon to the next level, which will then be set back to the normal level the next mob.Life().
|
||||||
updatehealth()
|
updatehealth()
|
||||||
|
hud_updateflag |= 1 << HEALTH_HUD
|
||||||
|
|
||||||
//Embedded projectile code.
|
//Embedded projectile code.
|
||||||
if(!organ) return
|
if(!organ) return
|
||||||
|
|||||||
@@ -63,6 +63,9 @@
|
|||||||
in_stasis = istype(loc, /obj/structure/closet/body_bag/cryobag) && loc:opened == 0
|
in_stasis = istype(loc, /obj/structure/closet/body_bag/cryobag) && loc:opened == 0
|
||||||
if(in_stasis) loc:used++
|
if(in_stasis) loc:used++
|
||||||
|
|
||||||
|
if(life_tick%30==15)
|
||||||
|
hud_updateflag = 1022
|
||||||
|
|
||||||
//No need to update all of these procs if the guy is dead.
|
//No need to update all of these procs if the guy is dead.
|
||||||
if(stat != DEAD && !in_stasis)
|
if(stat != DEAD && !in_stasis)
|
||||||
if(air_master.current_cycle%4==2 || failed_last_breath) //First, resolve location and get a breath
|
if(air_master.current_cycle%4==2 || failed_last_breath) //First, resolve location and get a breath
|
||||||
@@ -1125,6 +1128,10 @@
|
|||||||
proc/handle_regular_hud_updates()
|
proc/handle_regular_hud_updates()
|
||||||
if(!client) return 0
|
if(!client) return 0
|
||||||
|
|
||||||
|
if(hud_updateflag)
|
||||||
|
handle_hud_list()
|
||||||
|
|
||||||
|
|
||||||
for(var/image/hud in client.images)
|
for(var/image/hud in client.images)
|
||||||
if(copytext(hud.icon_state,1,4) == "hud") //ugly, but icon comparison is worse, I believe
|
if(copytext(hud.icon_state,1,4) == "hud") //ugly, but icon comparison is worse, I believe
|
||||||
client.images.Remove(hud)
|
client.images.Remove(hud)
|
||||||
@@ -1544,6 +1551,148 @@
|
|||||||
|
|
||||||
return temp
|
return temp
|
||||||
|
|
||||||
|
/*
|
||||||
|
Called by life(), instead of having the individual hud items update icons each tick and check for status changes
|
||||||
|
we only set those statuses and icons upon changes. Then those HUD items will simply add those pre-made images.
|
||||||
|
This proc below is only called when those HUD elements need to change as determined by the mobs hud_updateflag.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/mob/living/carbon/human/proc/handle_hud_list()
|
||||||
|
|
||||||
|
if(hud_updateflag & 1 << HEALTH_HUD)
|
||||||
|
var/image/holder = hud_list[HEALTH_HUD]
|
||||||
|
if(stat == 2)
|
||||||
|
holder.icon_state = "hudhealth-100" // X_X
|
||||||
|
else
|
||||||
|
holder.icon_state = "hud[RoundHealth(health)]"
|
||||||
|
|
||||||
|
hud_list[HEALTH_HUD] = holder
|
||||||
|
|
||||||
|
if(hud_updateflag & 1 << STATUS_HUD)
|
||||||
|
var/foundVirus = 0
|
||||||
|
for(var/datum/disease/D in viruses)
|
||||||
|
if(!D.hidden[SCANNER])
|
||||||
|
foundVirus++
|
||||||
|
for (var/ID in virus2)
|
||||||
|
if (ID in virusDB)
|
||||||
|
foundVirus = 1
|
||||||
|
break
|
||||||
|
|
||||||
|
var/image/holder = hud_list[STATUS_HUD]
|
||||||
|
var/image/holder2 = hud_list[STATUS_HUD_OOC]
|
||||||
|
if(stat == 2)
|
||||||
|
holder.icon_state = "huddead"
|
||||||
|
holder2.icon_state = "huddead"
|
||||||
|
else if(status_flags & XENO_HOST)
|
||||||
|
holder.icon_state = "hudxeno"
|
||||||
|
holder2.icon_state = "hudxeno"
|
||||||
|
else if(foundVirus)
|
||||||
|
holder.icon_state = "hudill"
|
||||||
|
else if(has_brain_worms())
|
||||||
|
var/mob/living/simple_animal/borer/B = has_brain_worms()
|
||||||
|
if(B.controlling)
|
||||||
|
holder.icon_state = "hudbrainworm"
|
||||||
|
else
|
||||||
|
holder.icon_state = "hudhealthy"
|
||||||
|
holder2.icon_state = "hudbrainworm"
|
||||||
|
else
|
||||||
|
holder.icon_state = "hudhealthy"
|
||||||
|
if(virus2.len)
|
||||||
|
holder2.icon_state = "hudill"
|
||||||
|
else
|
||||||
|
holder2.icon_state = "hudhealthy"
|
||||||
|
|
||||||
|
hud_list[STATUS_HUD] = holder
|
||||||
|
hud_list[STATUS_HUD_OOC] = holder2
|
||||||
|
|
||||||
|
if(hud_updateflag & 1 << ID_HUD)
|
||||||
|
var/image/holder = hud_list[ID_HUD]
|
||||||
|
if(wear_id)
|
||||||
|
var/obj/item/weapon/card/id/I = wear_id.GetID()
|
||||||
|
if(I)
|
||||||
|
holder.icon_state = "hud[ckey(I.GetJobName())]"
|
||||||
|
else
|
||||||
|
holder.icon_state = "hudunknown"
|
||||||
|
else
|
||||||
|
holder.icon_state = "hudunknown"
|
||||||
|
|
||||||
|
|
||||||
|
hud_list[ID_HUD] = holder
|
||||||
|
|
||||||
|
if(hud_updateflag & 1 << WANTED_HUD)
|
||||||
|
var/image/holder = hud_list[WANTED_HUD]
|
||||||
|
holder.icon_state = "hudblank"
|
||||||
|
var/perpname = name
|
||||||
|
if(wear_id)
|
||||||
|
var/obj/item/weapon/card/id/I = wear_id.GetID()
|
||||||
|
if(I)
|
||||||
|
perpname = I.registered_name
|
||||||
|
|
||||||
|
for(var/datum/data/record/E in data_core.general)
|
||||||
|
if(E.fields["name"] == perpname)
|
||||||
|
for (var/datum/data/record/R in data_core.security)
|
||||||
|
if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "*Arrest*"))
|
||||||
|
holder.icon_state = "hudwanted"
|
||||||
|
break
|
||||||
|
else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Incarcerated"))
|
||||||
|
holder.icon_state = "hudprisoner"
|
||||||
|
break
|
||||||
|
else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Parolled"))
|
||||||
|
holder.icon_state = "hudparolled"
|
||||||
|
break
|
||||||
|
else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Released"))
|
||||||
|
holder.icon_state = "hudreleased"
|
||||||
|
break
|
||||||
|
hud_list[WANTED_HUD] = holder
|
||||||
|
|
||||||
|
if(hud_updateflag & 1 << IMPLOYAL_HUD || hud_updateflag & 1 << IMPCHEM_HUD || hud_updateflag & 1 << IMPTRACK_HUD)
|
||||||
|
var/image/holder1 = hud_list[IMPTRACK_HUD]
|
||||||
|
var/image/holder2 = hud_list[IMPLOYAL_HUD]
|
||||||
|
var/image/holder3 = hud_list[IMPCHEM_HUD]
|
||||||
|
|
||||||
|
holder1.icon_state = "hudblank"
|
||||||
|
holder2.icon_state = "hudblank"
|
||||||
|
holder3.icon_state = "hudblank"
|
||||||
|
|
||||||
|
for(var/obj/item/weapon/implant/I in src)
|
||||||
|
if(I.implanted)
|
||||||
|
if(istype(I,/obj/item/weapon/implant/tracking))
|
||||||
|
holder1.icon_state = "hud_imp_tracking"
|
||||||
|
if(istype(I,/obj/item/weapon/implant/loyalty))
|
||||||
|
holder2.icon_state = "hud_imp_loyal"
|
||||||
|
if(istype(I,/obj/item/weapon/implant/chem))
|
||||||
|
holder3.icon_state = "hud_imp_chem"
|
||||||
|
|
||||||
|
hud_list[IMPTRACK_HUD] = holder1
|
||||||
|
hud_list[IMPLOYAL_HUD] = holder2
|
||||||
|
hud_list[IMPCHEM_HUD] = holder3
|
||||||
|
|
||||||
|
if(hud_updateflag & 1 << SPECIALROLE_HUD)
|
||||||
|
var/image/holder = hud_list[SPECIALROLE_HUD]
|
||||||
|
holder.icon_state = "hudblank"
|
||||||
|
switch(mind.special_role)
|
||||||
|
if("traitor","Syndicate")
|
||||||
|
holder.icon_state = "hudsyndicate"
|
||||||
|
if("Revolutionary")
|
||||||
|
holder.icon_state = "hudrevolutionary"
|
||||||
|
if("Head Revolutionary")
|
||||||
|
holder.icon_state = "hudheadrevolutionary"
|
||||||
|
if("Cultist")
|
||||||
|
holder.icon_state = "hudcultist"
|
||||||
|
if("Changeling")
|
||||||
|
holder.icon_state = "hudchangeling"
|
||||||
|
if("Wizard","Fake Wizard")
|
||||||
|
holder.icon_state = "hudwizard"
|
||||||
|
if("Death Commando")
|
||||||
|
holder.icon_state = "huddeathsquad"
|
||||||
|
if("Ninja")
|
||||||
|
holder.icon_state = "hudninja"
|
||||||
|
|
||||||
|
hud_list[SPECIALROLE_HUD] = holder
|
||||||
|
|
||||||
|
hud_updateflag = 0
|
||||||
|
|
||||||
|
|
||||||
#undef HUMAN_MAX_OXYLOSS
|
#undef HUMAN_MAX_OXYLOSS
|
||||||
#undef HUMAN_CRIT_MAX_OXYLOSS
|
#undef HUMAN_CRIT_MAX_OXYLOSS
|
||||||
|
|||||||
@@ -516,6 +516,10 @@ proc/get_damage_icon_part(damage_state, body_part)
|
|||||||
overlays_standing[ID_LAYER] = null
|
overlays_standing[ID_LAYER] = null
|
||||||
else
|
else
|
||||||
overlays_standing[ID_LAYER] = null
|
overlays_standing[ID_LAYER] = null
|
||||||
|
|
||||||
|
hud_updateflag |= 1 << ID_HUD
|
||||||
|
hud_updateflag |= 1 << WANTED_HUD
|
||||||
|
|
||||||
if(update_icons) update_icons()
|
if(update_icons) update_icons()
|
||||||
|
|
||||||
/mob/living/carbon/human/update_inv_gloves(var/update_icons=1)
|
/mob/living/carbon/human/update_inv_gloves(var/update_icons=1)
|
||||||
|
|||||||
@@ -264,6 +264,8 @@
|
|||||||
if (C.legcuffed && !initial(C.legcuffed))
|
if (C.legcuffed && !initial(C.legcuffed))
|
||||||
C.drop_from_inventory(C.legcuffed)
|
C.drop_from_inventory(C.legcuffed)
|
||||||
C.legcuffed = initial(C.legcuffed)
|
C.legcuffed = initial(C.legcuffed)
|
||||||
|
hud_updateflag |= 1 << HEALTH_HUD
|
||||||
|
hud_updateflag |= 1 << STATUS_HUD
|
||||||
|
|
||||||
/mob/living/proc/rejuvenate()
|
/mob/living/proc/rejuvenate()
|
||||||
|
|
||||||
@@ -311,6 +313,8 @@
|
|||||||
// make the icons look correct
|
// make the icons look correct
|
||||||
regenerate_icons()
|
regenerate_icons()
|
||||||
|
|
||||||
|
hud_updateflag |= 1 << HEALTH_HUD
|
||||||
|
hud_updateflag |= 1 << STATUS_HUD
|
||||||
return
|
return
|
||||||
|
|
||||||
/mob/living/proc/UpdateDamageIcon()
|
/mob/living/proc/UpdateDamageIcon()
|
||||||
|
|||||||
@@ -5,6 +5,8 @@
|
|||||||
var/maxHealth = 100 //Maximum health that should be possible.
|
var/maxHealth = 100 //Maximum health that should be possible.
|
||||||
var/health = 100 //A mob's health
|
var/health = 100 //A mob's health
|
||||||
|
|
||||||
|
var/hud_updateflag = 0
|
||||||
|
|
||||||
//Damage related vars, NOTE: THESE SHOULD ONLY BE MODIFIED BY PROCS
|
//Damage related vars, NOTE: THESE SHOULD ONLY BE MODIFIED BY PROCS
|
||||||
var/bruteloss = 0.0 //Brutal damage caused by brute force (punching, being clubbed by a toolbox ect... this also accounts for pressure damage)
|
var/bruteloss = 0.0 //Brutal damage caused by brute force (punching, being clubbed by a toolbox ect... this also accounts for pressure damage)
|
||||||
var/oxyloss = 0.0 //Oxygen depravation damage (no air in lungs)
|
var/oxyloss = 0.0 //Oxygen depravation damage (no air in lungs)
|
||||||
|
|||||||
@@ -115,6 +115,17 @@ var/list/ai_list = list()
|
|||||||
src << "<b>These laws may be changed by other players, or by you being the traitor.</b>"
|
src << "<b>These laws may be changed by other players, or by you being the traitor.</b>"
|
||||||
|
|
||||||
job = "AI"
|
job = "AI"
|
||||||
|
|
||||||
|
hud_list[HEALTH_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
|
||||||
|
hud_list[STATUS_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
|
||||||
|
hud_list[ID_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
|
||||||
|
hud_list[WANTED_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
|
||||||
|
hud_list[IMPLOYAL_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
|
||||||
|
hud_list[IMPCHEM_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
|
||||||
|
hud_list[IMPTRACK_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
|
||||||
|
hud_list[SPECIALROLE_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
|
||||||
|
|
||||||
|
|
||||||
ai_list += src
|
ai_list += src
|
||||||
..()
|
..()
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -127,6 +127,18 @@
|
|||||||
cell_component.wrapped = cell
|
cell_component.wrapped = cell
|
||||||
cell_component.installed = 1
|
cell_component.installed = 1
|
||||||
|
|
||||||
|
hud_list[HEALTH_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
|
||||||
|
hud_list[STATUS_HUD] = image('icons/mob/hud.dmi', src, "hudhealth100")
|
||||||
|
hud_list[ID_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
|
||||||
|
hud_list[WANTED_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
|
||||||
|
hud_list[IMPLOYAL_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
|
||||||
|
hud_list[IMPCHEM_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
|
||||||
|
hud_list[IMPTRACK_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
|
||||||
|
hud_list[SPECIALROLE_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
playsound(loc, 'sound/voice/liveagain.ogg', 75, 1)
|
playsound(loc, 'sound/voice/liveagain.ogg', 75, 1)
|
||||||
|
|
||||||
// setup the PDA and its name
|
// setup the PDA and its name
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
var/list/alarms_to_show = list()
|
var/list/alarms_to_show = list()
|
||||||
var/list/alarms_to_clear = list()
|
var/list/alarms_to_clear = list()
|
||||||
immune_to_ssd = 1
|
immune_to_ssd = 1
|
||||||
|
var/list/hud_list[9]
|
||||||
var/list/alarm_types_show = list("Motion" = 0, "Fire" = 0, "Atmosphere" = 0, "Power" = 0, "Camera" = 0)
|
var/list/alarm_types_show = list("Motion" = 0, "Fire" = 0, "Atmosphere" = 0, "Power" = 0, "Camera" = 0)
|
||||||
var/list/alarm_types_clear = list("Motion" = 0, "Fire" = 0, "Atmosphere" = 0, "Power" = 0, "Camera" = 0)
|
var/list/alarm_types_clear = list("Motion" = 0, "Fire" = 0, "Atmosphere" = 0, "Power" = 0, "Camera" = 0)
|
||||||
|
|
||||||
|
|||||||
@@ -53,7 +53,7 @@
|
|||||||
var/areastring = null
|
var/areastring = null
|
||||||
var/obj/item/weapon/cell/cell
|
var/obj/item/weapon/cell/cell
|
||||||
var/start_charge = 90 // initial cell charge %
|
var/start_charge = 90 // initial cell charge %
|
||||||
var/cell_type = 2500 // 0=no cell, 1=regular, 2=high-cap (x5) <- old, now it's just 0=no cell, otherwise dictate cellcapacity by changing this value. 1 used to be 1000, 2 was 2500
|
var/cell_type = 5000 // 0=no cell, 1=regular, 2=high-cap (x5) <- old, now it's just 0=no cell, otherwise dictate cellcapacity by changing this value. 1 used to be 1000, 2 was 2500
|
||||||
var/opened = 0 //0=closed, 1=opened, 2=cover removed
|
var/opened = 0 //0=closed, 1=opened, 2=cover removed
|
||||||
var/shorted = 0
|
var/shorted = 0
|
||||||
var/lighting = 3
|
var/lighting = 3
|
||||||
@@ -78,6 +78,8 @@
|
|||||||
powernet = 0 // set so that APCs aren't found as powernet nodes //Hackish, Horrible, was like this before I changed it :(
|
powernet = 0 // set so that APCs aren't found as powernet nodes //Hackish, Horrible, was like this before I changed it :(
|
||||||
var/malfhack = 0 //New var for my changes to AI malf. --NeoFite
|
var/malfhack = 0 //New var for my changes to AI malf. --NeoFite
|
||||||
var/mob/living/silicon/ai/malfai = null //See above --NeoFite
|
var/mob/living/silicon/ai/malfai = null //See above --NeoFite
|
||||||
|
var/debug= 0
|
||||||
|
var/autoflag= 0 // 0 = off, 1= eqp and lights off, 2 = eqp off, 3 = all on.
|
||||||
// luminosity = 1
|
// luminosity = 1
|
||||||
var/has_electronics = 0 // 0 - none, 1 - plugged in, 2 - secured by screwdriver
|
var/has_electronics = 0 // 0 - none, 1 - plugged in, 2 - secured by screwdriver
|
||||||
var/overload = 1 //used for the Blackout malf module
|
var/overload = 1 //used for the Blackout malf module
|
||||||
@@ -142,6 +144,7 @@
|
|||||||
init()
|
init()
|
||||||
else
|
else
|
||||||
area = src.loc.loc:master
|
area = src.loc.loc:master
|
||||||
|
area.apc |= src
|
||||||
opened = 1
|
opened = 1
|
||||||
operating = 0
|
operating = 0
|
||||||
name = "[area.name] APC"
|
name = "[area.name] APC"
|
||||||
@@ -169,6 +172,7 @@
|
|||||||
|
|
||||||
var/area/A = src.loc.loc
|
var/area/A = src.loc.loc
|
||||||
|
|
||||||
|
|
||||||
//if area isn't specified use current
|
//if area isn't specified use current
|
||||||
if(isarea(A) && src.areastring == null)
|
if(isarea(A) && src.areastring == null)
|
||||||
src.area = A
|
src.area = A
|
||||||
@@ -176,6 +180,7 @@
|
|||||||
else
|
else
|
||||||
src.area = get_area_name(areastring)
|
src.area = get_area_name(areastring)
|
||||||
name = "\improper [area.name] APC"
|
name = "\improper [area.name] APC"
|
||||||
|
area.apc |= src
|
||||||
update_icon()
|
update_icon()
|
||||||
|
|
||||||
make_terminal()
|
make_terminal()
|
||||||
@@ -918,6 +923,7 @@
|
|||||||
if(user.lying)
|
if(user.lying)
|
||||||
user << "\red You must stand to use this [src]!"
|
user << "\red You must stand to use this [src]!"
|
||||||
return 0
|
return 0
|
||||||
|
autoflag = 5
|
||||||
if (istype(user, /mob/living/silicon))
|
if (istype(user, /mob/living/silicon))
|
||||||
var/mob/living/silicon/ai/AI = user
|
var/mob/living/silicon/ai/AI = user
|
||||||
var/mob/living/silicon/robot/robot = user
|
var/mob/living/silicon/robot/robot = user
|
||||||
@@ -1153,20 +1159,11 @@
|
|||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
if (equipment > 1) // off=0, off auto=1, on=2, on auto=3
|
|
||||||
use_power(src.equip_consumption, EQUIP)
|
|
||||||
if (lighting > 1) // off=0, off auto=1, on=2, on auto=3
|
|
||||||
use_power(src.light_consumption, LIGHT)
|
|
||||||
if (environ > 1) // off=0, off auto=1, on=2, on auto=3
|
|
||||||
use_power(src.environ_consumption, ENVIRON)
|
|
||||||
|
|
||||||
area.calc_lighting() */
|
|
||||||
|
|
||||||
lastused_light = area.usage(LIGHT)
|
lastused_light = area.usage(LIGHT)
|
||||||
lastused_equip = area.usage(EQUIP)
|
lastused_equip = area.usage(EQUIP)
|
||||||
lastused_environ = area.usage(ENVIRON)
|
lastused_environ = area.usage(ENVIRON)
|
||||||
area.clear_usage()
|
if(area.powerupdate)
|
||||||
|
area.clear_usage()
|
||||||
|
|
||||||
lastused_total = lastused_light + lastused_equip + lastused_environ
|
lastused_total = lastused_light + lastused_equip + lastused_environ
|
||||||
|
|
||||||
@@ -1190,13 +1187,15 @@
|
|||||||
perapc = terminal.powernet.perapc
|
perapc = terminal.powernet.perapc
|
||||||
|
|
||||||
//if(debug)
|
//if(debug)
|
||||||
// world.log << "Status: [main_status] - Excess: [excess] - Last Equip: [lastused_equip] - Last Light: [lastused_light] - Longterm: [longtermpower]"
|
//world << "Status: [main_status] - Excess: [excess] - Last Equip: [lastused_equip] - Last Light: [lastused_light]"
|
||||||
|
|
||||||
if(cell && !shorted)
|
if(cell && !shorted)
|
||||||
|
var/cell_charge = cell.charge
|
||||||
|
var/cell_maxcharge = cell.maxcharge
|
||||||
|
|
||||||
// draw power from cell as before
|
// draw power from cell as before
|
||||||
|
|
||||||
var/cellused = min(cell.charge, CELLRATE * lastused_total) // clamp deduction to a max, amount left in cell
|
var/cellused = min(cell_charge, CELLRATE * lastused_total) // clamp deduction to a max, amount left in cell
|
||||||
cell.use(cellused)
|
cell.use(cellused)
|
||||||
|
|
||||||
if(excess > 0 || perapc > lastused_total) // if power excess, or enough anyway, recharge the cell
|
if(excess > 0 || perapc > lastused_total) // if power excess, or enough anyway, recharge the cell
|
||||||
@@ -1207,19 +1206,21 @@
|
|||||||
|
|
||||||
else // no excess, and not enough per-apc
|
else // no excess, and not enough per-apc
|
||||||
|
|
||||||
if( (cell.charge/CELLRATE+perapc) >= lastused_total) // can we draw enough from cell+grid to cover last usage?
|
if( (cell_charge/CELLRATE+perapc) >= lastused_total) // can we draw enough from cell+grid to cover last usage?
|
||||||
|
|
||||||
cell.charge = min(cell.maxcharge, cell.charge + CELLRATE * perapc) //recharge with what we can
|
cell_charge = min(cell_maxcharge, cell_charge + CELLRATE * perapc) //recharge with what we can
|
||||||
|
cell.charge = cell_charge
|
||||||
add_load(perapc) // so draw what we can from the grid
|
add_load(perapc) // so draw what we can from the grid
|
||||||
charging = 0
|
charging = 0
|
||||||
|
|
||||||
else // not enough power available to run the last tick!
|
else if (autoflag != 0) // not enough power available to run the last tick!
|
||||||
charging = 0
|
charging = 0
|
||||||
chargecount = 0
|
chargecount = 0
|
||||||
// This turns everything off in the case that there is still a charge left on the battery, just not enough to run the room.
|
// This turns everything off in the case that there is still a charge left on the battery, just not enough to run the room.
|
||||||
equipment = autoset(equipment, 0)
|
equipment = autoset(equipment, 0)
|
||||||
lighting = autoset(lighting, 0)
|
lighting = autoset(lighting, 0)
|
||||||
environ = autoset(environ, 0)
|
environ = autoset(environ, 0)
|
||||||
|
autoflag = 0
|
||||||
|
|
||||||
|
|
||||||
// set channels depending on how much charge we have left
|
// set channels depending on how much charge we have left
|
||||||
@@ -1230,39 +1231,44 @@
|
|||||||
else if(longtermpower > -10)
|
else if(longtermpower > -10)
|
||||||
longtermpower -= 2
|
longtermpower -= 2
|
||||||
|
|
||||||
if(cell.charge <= 0) // zero charge, turn all off
|
|
||||||
equipment = autoset(equipment, 0)
|
if(cell_charge >= 1250 || longtermpower > 0) // Put most likely at the top so we don't check it last, effeciency 101
|
||||||
lighting = autoset(lighting, 0)
|
if(autoflag != 3)
|
||||||
environ = autoset(environ, 0)
|
equipment = autoset(equipment, 1)
|
||||||
area.poweralert(0, src)
|
lighting = autoset(lighting, 1)
|
||||||
else if(cell.percent() < 15 && longtermpower < 0) // <15%, turn off lighting & equipment
|
environ = autoset(environ, 1)
|
||||||
equipment = autoset(equipment, 2)
|
autoflag = 3
|
||||||
lighting = autoset(lighting, 2)
|
|
||||||
environ = autoset(environ, 1)
|
|
||||||
area.poweralert(0, src)
|
|
||||||
else if(cell.percent() < 30 && longtermpower < 0) // <30%, turn off equipment
|
|
||||||
equipment = autoset(equipment, 2)
|
|
||||||
lighting = autoset(lighting, 1)
|
|
||||||
environ = autoset(environ, 1)
|
|
||||||
area.poweralert(0, src)
|
|
||||||
else // otherwise all can be on
|
|
||||||
equipment = autoset(equipment, 1)
|
|
||||||
lighting = autoset(lighting, 1)
|
|
||||||
environ = autoset(environ, 1)
|
|
||||||
area.poweralert(1, src)
|
|
||||||
if(cell.percent() > 75)
|
|
||||||
area.poweralert(1, src)
|
area.poweralert(1, src)
|
||||||
|
if(cell_charge >= 4000)
|
||||||
|
area.poweralert(1, src)
|
||||||
|
else if(cell_charge < 1250 && longtermpower < 0) // <30%, turn off equipment
|
||||||
|
if(autoflag != 2)
|
||||||
|
equipment = autoset(equipment, 2)
|
||||||
|
lighting = autoset(lighting, 1)
|
||||||
|
environ = autoset(environ, 1)
|
||||||
|
area.poweralert(0, src)
|
||||||
|
autoflag = 2
|
||||||
|
else if(cell_charge < 750 && longtermpower < 0) // <15%, turn off lighting & equipment
|
||||||
|
if(autoflag != 1)
|
||||||
|
equipment = autoset(equipment, 2)
|
||||||
|
lighting = autoset(lighting, 2)
|
||||||
|
environ = autoset(environ, 1)
|
||||||
|
area.poweralert(0, src)
|
||||||
|
autoflag = 1
|
||||||
|
else if(cell_charge <= 0) // zero charge, turn all off
|
||||||
|
if(autoflag != 0)
|
||||||
|
equipment = autoset(equipment, 0)
|
||||||
|
lighting = autoset(lighting, 0)
|
||||||
|
environ = autoset(environ, 0)
|
||||||
|
area.poweralert(0, src)
|
||||||
|
autoflag = 0
|
||||||
|
|
||||||
// now trickle-charge the cell
|
// now trickle-charge the cell
|
||||||
|
|
||||||
if(chargemode && charging == 1 && operating)
|
if(chargemode && charging == 1 && operating)
|
||||||
if(excess > 0) // check to make sure we have enough to charge
|
if(excess > 0) // check to make sure we have enough to charge
|
||||||
// Max charge is perapc share, capped to cell capacity, or % per second constant (Whichever is smallest)
|
// Max charge is perapc share, capped to cell capacity, or % per second constant (Whichever is smallest)
|
||||||
/* var/ch = min(perapc, (cell.maxcharge - cell.charge), (cell.maxcharge*CHARGELEVEL))
|
var/ch = min(perapc*CELLRATE, (cell_maxcharge - cell_charge), (cell_maxcharge*CHARGELEVEL))
|
||||||
add_load(ch) // Removes the power we're taking from the grid
|
|
||||||
cell.give(ch) // actually recharge the cell
|
|
||||||
*/
|
|
||||||
var/ch = min(perapc*CELLRATE, (cell.maxcharge - cell.charge), (cell.maxcharge*CHARGELEVEL))
|
|
||||||
add_load(ch/CELLRATE) // Removes the power we're taking from the grid
|
add_load(ch/CELLRATE) // Removes the power we're taking from the grid
|
||||||
cell.give(ch) // actually recharge the cell
|
cell.give(ch) // actually recharge the cell
|
||||||
|
|
||||||
@@ -1272,12 +1278,12 @@
|
|||||||
|
|
||||||
// show cell as fully charged if so
|
// show cell as fully charged if so
|
||||||
|
|
||||||
if(cell.charge >= cell.maxcharge)
|
if(cell.charge >= cell_maxcharge)
|
||||||
charging = 2
|
charging = 2
|
||||||
|
|
||||||
if(chargemode)
|
if(chargemode)
|
||||||
if(!charging)
|
if(!charging)
|
||||||
if(excess > cell.maxcharge*CHARGELEVEL)
|
if(excess > cell_maxcharge*CHARGELEVEL)
|
||||||
chargecount++
|
chargecount++
|
||||||
else
|
else
|
||||||
chargecount = 0
|
chargecount = 0
|
||||||
@@ -1299,6 +1305,8 @@
|
|||||||
lighting = autoset(lighting, 0)
|
lighting = autoset(lighting, 0)
|
||||||
environ = autoset(environ, 0)
|
environ = autoset(environ, 0)
|
||||||
area.poweralert(0, src)
|
area.poweralert(0, src)
|
||||||
|
autoflag = 0
|
||||||
|
|
||||||
|
|
||||||
// update icon & area power if anything changed
|
// update icon & area power if anything changed
|
||||||
|
|
||||||
|
|||||||
@@ -603,9 +603,11 @@
|
|||||||
|
|
||||||
#define LIGHTING_POWER_FACTOR 20 //20W per unit luminosity
|
#define LIGHTING_POWER_FACTOR 20 //20W per unit luminosity
|
||||||
|
|
||||||
|
/*
|
||||||
/obj/machinery/light/process()//TODO: remove/add this from machines to save on processing as needed ~Carn PRIORITY
|
/obj/machinery/light/process()//TODO: remove/add this from machines to save on processing as needed ~Carn PRIORITY
|
||||||
if(on)
|
if(on)
|
||||||
use_power(luminosity * LIGHTING_POWER_FACTOR, LIGHT)
|
use_power(luminosity * LIGHTING_POWER_FACTOR, LIGHT)
|
||||||
|
*/
|
||||||
|
|
||||||
// called when area power state changes
|
// called when area power state changes
|
||||||
/obj/machinery/light/power_change()
|
/obj/machinery/light/power_change()
|
||||||
|
|||||||
@@ -54,13 +54,15 @@
|
|||||||
|
|
||||||
// increment the power usage stats for an area
|
// increment the power usage stats for an area
|
||||||
|
|
||||||
/obj/machinery/proc/use_power(var/amount, var/chan = -1) // defaults to power_channel
|
/obj/machinery/proc/use_power(var/amount, var/chan = -1, var/autocalled = 0) // defaults to power_channel
|
||||||
var/area/A = src.loc.loc // make sure it's in an area
|
var/area/A = src.loc.loc // make sure it's in an area
|
||||||
if(!A || !isarea(A) || !A.master)
|
if(!A || !isarea(A) || !A.master)
|
||||||
return
|
return
|
||||||
if(chan == -1)
|
if(chan == -1)
|
||||||
chan = power_channel
|
chan = power_channel
|
||||||
A.master.use_power(amount, chan)
|
A.master.use_power(amount, chan)
|
||||||
|
if(!autocalled)
|
||||||
|
A.master.powerupdate = 2 // Decremented by 2 each GC tick, since it's not auto power change we're going to update power twice.
|
||||||
|
|
||||||
/obj/machinery/proc/power_change() // called whenever the power settings of the containing area change
|
/obj/machinery/proc/power_change() // called whenever the power settings of the containing area change
|
||||||
// by default, check equipment channel & set flag
|
// by default, check equipment channel & set flag
|
||||||
|
|||||||
@@ -370,7 +370,7 @@ var/list/solars_list = list()
|
|||||||
if(stat & (NOPOWER | BROKEN))
|
if(stat & (NOPOWER | BROKEN))
|
||||||
return
|
return
|
||||||
|
|
||||||
use_power(250)
|
//use_power(250)
|
||||||
if(track==1 && nexttime < world.time && trackdir*trackrate)
|
if(track==1 && nexttime < world.time && trackdir*trackrate)
|
||||||
// Increments nexttime using itself and not world.time to prevent drift
|
// Increments nexttime using itself and not world.time to prevent drift
|
||||||
nexttime = nexttime + 6000/trackrate
|
nexttime = nexttime + 6000/trackrate
|
||||||
|
|||||||
@@ -37,7 +37,8 @@
|
|||||||
/mob/living/simple_animal/cow,
|
/mob/living/simple_animal/cow,
|
||||||
/mob/living/simple_animal/hostile/retaliate/goat,
|
/mob/living/simple_animal/hostile/retaliate/goat,
|
||||||
/obj/machinery/computer/centrifuge,
|
/obj/machinery/computer/centrifuge,
|
||||||
/obj/machinery/sleeper )
|
/obj/machinery/sleeper,
|
||||||
|
/obj/machinery/smartfridge/ )
|
||||||
|
|
||||||
New()
|
New()
|
||||||
..()
|
..()
|
||||||
|
|||||||
@@ -22,6 +22,8 @@
|
|||||||
var/flush_every_ticks = 30 //Every 30 ticks it will look whether it is ready to flush
|
var/flush_every_ticks = 30 //Every 30 ticks it will look whether it is ready to flush
|
||||||
var/flush_count = 0 //this var adds 1 once per tick. When it reaches flush_every_ticks it resets and tries to flush.
|
var/flush_count = 0 //this var adds 1 once per tick. When it reaches flush_every_ticks it resets and tries to flush.
|
||||||
var/last_sound = 0
|
var/last_sound = 0
|
||||||
|
active_power_usage = 600
|
||||||
|
idle_power_usage = 100
|
||||||
|
|
||||||
// create a new disposal
|
// create a new disposal
|
||||||
// find the attached trunk (if present) and init gas resvr.
|
// find the attached trunk (if present) and init gas resvr.
|
||||||
@@ -340,6 +342,7 @@
|
|||||||
// timed process
|
// timed process
|
||||||
// charge the gas reservoir and perform flush if ready
|
// charge the gas reservoir and perform flush if ready
|
||||||
process()
|
process()
|
||||||
|
use_power = 0
|
||||||
if(stat & BROKEN) // nothing can happen if broken
|
if(stat & BROKEN) // nothing can happen if broken
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -363,13 +366,13 @@
|
|||||||
if(stat & NOPOWER) // won't charge if no power
|
if(stat & NOPOWER) // won't charge if no power
|
||||||
return
|
return
|
||||||
|
|
||||||
use_power(100) // base power usage
|
use_power = 1
|
||||||
|
|
||||||
if(mode != 1) // if off or ready, no need to charge
|
if(mode != 1) // if off or ready, no need to charge
|
||||||
return
|
return
|
||||||
|
|
||||||
// otherwise charge
|
// otherwise charge
|
||||||
use_power(500) // charging power usage
|
use_power = 2
|
||||||
|
|
||||||
var/atom/L = loc // recharging from loc turf
|
var/atom/L = loc // recharging from loc turf
|
||||||
|
|
||||||
|
|||||||
@@ -182,6 +182,8 @@
|
|||||||
"\blue You take [obj] out of incision on [target]'s [affected.display_name]s with \the [tool]." )
|
"\blue You take [obj] out of incision on [target]'s [affected.display_name]s with \the [tool]." )
|
||||||
affected.implants -= obj
|
affected.implants -= obj
|
||||||
|
|
||||||
|
target.hud_updateflag |= 1 << IMPLOYAL_HUD
|
||||||
|
|
||||||
//Handle possessive brain borers.
|
//Handle possessive brain borers.
|
||||||
if(istype(obj,/mob/living/simple_animal/borer))
|
if(istype(obj,/mob/living/simple_animal/borer))
|
||||||
var/mob/living/simple_animal/borer/worm = obj
|
var/mob/living/simple_animal/borer/worm = obj
|
||||||
|
|||||||
@@ -28,7 +28,8 @@
|
|||||||
/obj/machinery/disease2/diseaseanalyser/process()
|
/obj/machinery/disease2/diseaseanalyser/process()
|
||||||
if(stat & (NOPOWER|BROKEN))
|
if(stat & (NOPOWER|BROKEN))
|
||||||
return
|
return
|
||||||
use_power(500)
|
|
||||||
|
//use_power(500)
|
||||||
|
|
||||||
if(scanning)
|
if(scanning)
|
||||||
scanning -= 1
|
scanning -= 1
|
||||||
|
|||||||
@@ -72,7 +72,7 @@
|
|||||||
|
|
||||||
if(stat & (NOPOWER|BROKEN))
|
if(stat & (NOPOWER|BROKEN))
|
||||||
return
|
return
|
||||||
use_power(500)
|
//use_power(500)
|
||||||
|
|
||||||
if(curing)
|
if(curing)
|
||||||
curing -= 1
|
curing -= 1
|
||||||
|
|||||||
@@ -79,6 +79,7 @@
|
|||||||
for(var/datum/disease2/effectholder/e in effects)
|
for(var/datum/disease2/effectholder/e in effects)
|
||||||
e.effect.deactivate(mob)
|
e.effect.deactivate(mob)
|
||||||
mob.virus2.Remove("[uniqueID]")
|
mob.virus2.Remove("[uniqueID]")
|
||||||
|
mob.hud_updateflag |= 1 << STATUS_HUD
|
||||||
|
|
||||||
/datum/disease2/disease/proc/minormutate()
|
/datum/disease2/disease/proc/minormutate()
|
||||||
//uniqueID = rand(0,10000)
|
//uniqueID = rand(0,10000)
|
||||||
@@ -175,6 +176,7 @@ proc/virus2_lesser_infection()
|
|||||||
for(var/mob/living/carbon/human/G in player_list)
|
for(var/mob/living/carbon/human/G in player_list)
|
||||||
if(G.client && G.stat != DEAD)
|
if(G.client && G.stat != DEAD)
|
||||||
candidates += G
|
candidates += G
|
||||||
|
|
||||||
if(!candidates.len) return
|
if(!candidates.len) return
|
||||||
|
|
||||||
candidates = shuffle(candidates)
|
candidates = shuffle(candidates)
|
||||||
|
|||||||
@@ -90,7 +90,7 @@
|
|||||||
/obj/machinery/computer/diseasesplicer/process()
|
/obj/machinery/computer/diseasesplicer/process()
|
||||||
if(stat & (NOPOWER|BROKEN))
|
if(stat & (NOPOWER|BROKEN))
|
||||||
return
|
return
|
||||||
use_power(500)
|
//use_power(500)
|
||||||
|
|
||||||
if(scanning)
|
if(scanning)
|
||||||
scanning -= 1
|
scanning -= 1
|
||||||
|
|||||||
@@ -80,6 +80,7 @@ proc/airborne_can_reach(turf/source, turf/target)
|
|||||||
D.minormutate()
|
D.minormutate()
|
||||||
// log_debug("Adding virus")
|
// log_debug("Adding virus")
|
||||||
M.virus2["[D.uniqueID]"] = D
|
M.virus2["[D.uniqueID]"] = D
|
||||||
|
M.hud_updateflag |= 1 << STATUS_HUD
|
||||||
|
|
||||||
//Infects mob M with random lesser disease, if he doesn't have one
|
//Infects mob M with random lesser disease, if he doesn't have one
|
||||||
/proc/infect_mob_random_lesser(var/mob/living/carbon/M)
|
/proc/infect_mob_random_lesser(var/mob/living/carbon/M)
|
||||||
@@ -87,12 +88,14 @@ proc/airborne_can_reach(turf/source, turf/target)
|
|||||||
D.makerandom()
|
D.makerandom()
|
||||||
D.infectionchance = 1
|
D.infectionchance = 1
|
||||||
M.virus2["[D.uniqueID]"] = D
|
M.virus2["[D.uniqueID]"] = D
|
||||||
|
M.hud_updateflag |= 1 << STATUS_HUD
|
||||||
|
|
||||||
//Infects mob M with random greated disease, if he doesn't have one
|
//Infects mob M with random greated disease, if he doesn't have one
|
||||||
/proc/infect_mob_random_greater(var/mob/living/carbon/M)
|
/proc/infect_mob_random_greater(var/mob/living/carbon/M)
|
||||||
var/datum/disease2/disease/D = new /datum/disease2/disease
|
var/datum/disease2/disease/D = new /datum/disease2/disease
|
||||||
D.makerandom(1)
|
D.makerandom(1)
|
||||||
M.virus2["[D.uniqueID]"] = D
|
M.virus2["[D.uniqueID]"] = D
|
||||||
|
M.hud_updateflag |= 1 << STATUS_HUD
|
||||||
|
|
||||||
//Fancy prob() function.
|
//Fancy prob() function.
|
||||||
/proc/dprob(var/p)
|
/proc/dprob(var/p)
|
||||||
|
|||||||
@@ -691,13 +691,15 @@ var/list/be_special_flags = list(
|
|||||||
#define RIGHT 2
|
#define RIGHT 2
|
||||||
|
|
||||||
// for secHUDs and medHUDs and variants. The number is the location of the image on the list hud_list of humans.
|
// for secHUDs and medHUDs and variants. The number is the location of the image on the list hud_list of humans.
|
||||||
#define HEALTH_HUD 1 // dead, alive, sick, health status
|
#define HEALTH_HUD 1 // a simple line rounding the mob's number health
|
||||||
#define STATUS_HUD 2 // a simple line rounding the mob's number health
|
#define STATUS_HUD 2 // alive, dead, diseased, etc.
|
||||||
#define ID_HUD 3 // the job asigned to your ID
|
#define ID_HUD 3 // the job asigned to your ID
|
||||||
#define WANTED_HUD 4 // wanted, released, parroled, security status
|
#define WANTED_HUD 4 // wanted, released, parroled, security status
|
||||||
#define IMPLOYAL_HUD 5 // loyality implant
|
#define IMPLOYAL_HUD 5 // loyality implant
|
||||||
#define IMPCHEM_HUD 6 // chemical implant
|
#define IMPCHEM_HUD 6 // chemical implant
|
||||||
#define IMPTRACK_HUD 7 // tracking implant
|
#define IMPTRACK_HUD 7 // tracking implant
|
||||||
|
#define SPECIALROLE_HUD 8 // AntagHUD image
|
||||||
|
#define STATUS_HUD_OOC 9 // STATUS_HUD without virus db check for someone being ill.
|
||||||
|
|
||||||
//Pulse levels, very simplified
|
//Pulse levels, very simplified
|
||||||
#define PULSE_NONE 0 //so !M.pulse checks would be possible
|
#define PULSE_NONE 0 //so !M.pulse checks would be possible
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 68 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 298 KiB After Width: | Height: | Size: 310 KiB |
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user