mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-12 19:22:56 +00:00
Merge remote-tracking branch 'upstream/dev' into power-net
Conflicts: code/ATMOSPHERICS/components/binary_devices/pump.dm code/ATMOSPHERICS/components/binary_devices/volume_pump.dm code/ATMOSPHERICS/components/unary/vent_pump.dm code/ATMOSPHERICS/pipes.dm
This commit is contained in:
@@ -17,4 +17,5 @@ install:
|
|||||||
- cd ..
|
- cd ..
|
||||||
|
|
||||||
script:
|
script:
|
||||||
|
- (! grep -q 'step_[xy]' maps/tgstation2.dmm)
|
||||||
- DreamMaker baystation12.dme
|
- DreamMaker baystation12.dme
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
// BEGIN_INTERNALS
|
// BEGIN_INTERNALS
|
||||||
/*
|
/*
|
||||||
MAP_ICON_TYPE: 0
|
MAP_ICON_TYPE: 0
|
||||||
|
LAST_COMPILE_VERSION: 506.1247
|
||||||
|
DIR: maps
|
||||||
|
LAST_COMPILE_TIME: 1405542427
|
||||||
AUTO_FILE_DIR: OFF
|
AUTO_FILE_DIR: OFF
|
||||||
*/
|
*/
|
||||||
// END_INTERNALS
|
// END_INTERNALS
|
||||||
|
|||||||
@@ -42,7 +42,6 @@ Thus, the two variables affect pump operation are set in New():
|
|||||||
on = 1
|
on = 1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/atmospherics/binary/pump/update_icon()
|
/obj/machinery/atmospherics/binary/pump/update_icon()
|
||||||
if(!powered())
|
if(!powered())
|
||||||
icon_state = "off"
|
icon_state = "off"
|
||||||
|
|||||||
@@ -85,6 +85,11 @@
|
|||||||
/obj/machinery/atmospherics/unary/vent_pump/update_icon(var/safety = 0)
|
/obj/machinery/atmospherics/unary/vent_pump/update_icon(var/safety = 0)
|
||||||
if(!check_icon_cache())
|
if(!check_icon_cache())
|
||||||
return
|
return
|
||||||
|
if (!node)
|
||||||
|
on = 0
|
||||||
|
//broadcast_status() // from now air alarm/control computer should request update purposely --rastaf0
|
||||||
|
if(!on)
|
||||||
|
return 0
|
||||||
|
|
||||||
overlays.Cut()
|
overlays.Cut()
|
||||||
|
|
||||||
|
|||||||
@@ -134,7 +134,7 @@
|
|||||||
|
|
||||||
/obj/machinery/atmospherics/pipe/simple
|
/obj/machinery/atmospherics/pipe/simple
|
||||||
icon = 'icons/atmos/pipes.dmi'
|
icon = 'icons/atmos/pipes.dmi'
|
||||||
icon_state = "intact"
|
icon_state = ""
|
||||||
name = "pipe"
|
name = "pipe"
|
||||||
desc = "A one meter section of regular pipe"
|
desc = "A one meter section of regular pipe"
|
||||||
|
|
||||||
@@ -306,6 +306,7 @@
|
|||||||
return null
|
return null
|
||||||
|
|
||||||
/obj/machinery/atmospherics/pipe/simple/visible
|
/obj/machinery/atmospherics/pipe/simple/visible
|
||||||
|
icon_state = "intact"
|
||||||
level = 2
|
level = 2
|
||||||
|
|
||||||
/obj/machinery/atmospherics/pipe/simple/visible/scrubbers
|
/obj/machinery/atmospherics/pipe/simple/visible/scrubbers
|
||||||
@@ -329,6 +330,7 @@
|
|||||||
color = PIPE_COLOR_PURPLE
|
color = PIPE_COLOR_PURPLE
|
||||||
|
|
||||||
/obj/machinery/atmospherics/pipe/simple/hidden
|
/obj/machinery/atmospherics/pipe/simple/hidden
|
||||||
|
icon_state = "intact"
|
||||||
level = 1
|
level = 1
|
||||||
alpha = 128 //set for the benefit of mapping - this is reset to opaque when the pipe is spawned in game
|
alpha = 128 //set for the benefit of mapping - this is reset to opaque when the pipe is spawned in game
|
||||||
|
|
||||||
@@ -367,7 +369,7 @@
|
|||||||
|
|
||||||
/obj/machinery/atmospherics/pipe/manifold
|
/obj/machinery/atmospherics/pipe/manifold
|
||||||
icon = 'icons/atmos/manifold.dmi'
|
icon = 'icons/atmos/manifold.dmi'
|
||||||
icon_state = "map"
|
icon_state = ""
|
||||||
name = "pipe manifold"
|
name = "pipe manifold"
|
||||||
desc = "A manifold composed of regular pipes"
|
desc = "A manifold composed of regular pipes"
|
||||||
|
|
||||||
@@ -527,6 +529,7 @@
|
|||||||
update_icon()
|
update_icon()
|
||||||
|
|
||||||
/obj/machinery/atmospherics/pipe/manifold/visible
|
/obj/machinery/atmospherics/pipe/manifold/visible
|
||||||
|
icon_state = "map"
|
||||||
level = 2
|
level = 2
|
||||||
|
|
||||||
/obj/machinery/atmospherics/pipe/manifold/visible/scrubbers
|
/obj/machinery/atmospherics/pipe/manifold/visible/scrubbers
|
||||||
@@ -550,6 +553,7 @@
|
|||||||
color = PIPE_COLOR_PURPLE
|
color = PIPE_COLOR_PURPLE
|
||||||
|
|
||||||
/obj/machinery/atmospherics/pipe/manifold/hidden
|
/obj/machinery/atmospherics/pipe/manifold/hidden
|
||||||
|
icon_state = "map"
|
||||||
level = 1
|
level = 1
|
||||||
alpha = 128 //set for the benefit of mapping - this is reset to opaque when the pipe is spawned in game
|
alpha = 128 //set for the benefit of mapping - this is reset to opaque when the pipe is spawned in game
|
||||||
|
|
||||||
@@ -575,7 +579,7 @@
|
|||||||
|
|
||||||
/obj/machinery/atmospherics/pipe/manifold4w
|
/obj/machinery/atmospherics/pipe/manifold4w
|
||||||
icon = 'icons/atmos/manifold.dmi'
|
icon = 'icons/atmos/manifold.dmi'
|
||||||
icon_state = "map_4way"
|
icon_state = ""
|
||||||
name = "4-way pipe manifold"
|
name = "4-way pipe manifold"
|
||||||
desc = "A manifold composed of regular pipes"
|
desc = "A manifold composed of regular pipes"
|
||||||
|
|
||||||
@@ -722,6 +726,7 @@
|
|||||||
update_icon()
|
update_icon()
|
||||||
|
|
||||||
/obj/machinery/atmospherics/pipe/manifold4w/visible
|
/obj/machinery/atmospherics/pipe/manifold4w/visible
|
||||||
|
icon_state = "map_4way"
|
||||||
level = 2
|
level = 2
|
||||||
|
|
||||||
/obj/machinery/atmospherics/pipe/manifold4w/visible/scrubbers
|
/obj/machinery/atmospherics/pipe/manifold4w/visible/scrubbers
|
||||||
@@ -745,6 +750,7 @@
|
|||||||
color = PIPE_COLOR_PURPLE
|
color = PIPE_COLOR_PURPLE
|
||||||
|
|
||||||
/obj/machinery/atmospherics/pipe/manifold4w/hidden
|
/obj/machinery/atmospherics/pipe/manifold4w/hidden
|
||||||
|
icon_state = "map_4way"
|
||||||
level = 1
|
level = 1
|
||||||
alpha = 128 //set for the benefit of mapping - this is reset to opaque when the pipe is spawned in game
|
alpha = 128 //set for the benefit of mapping - this is reset to opaque when the pipe is spawned in game
|
||||||
|
|
||||||
|
|||||||
@@ -52,9 +52,11 @@
|
|||||||
icon_state = "soapnt"
|
icon_state = "soapnt"
|
||||||
|
|
||||||
/obj/item/weapon/soap/deluxe
|
/obj/item/weapon/soap/deluxe
|
||||||
desc = "A deluxe Waffle Co. brand bar of soap. Smells of condoms."
|
|
||||||
icon_state = "soapdeluxe"
|
icon_state = "soapdeluxe"
|
||||||
|
|
||||||
|
/obj/item/weapon/soap/deluxe/New()
|
||||||
|
desc = "A deluxe Waffle Co. brand bar of soap. Smells of [pick("lavender", "vanilla", "strawberry", "chocolate" ,"space")]."
|
||||||
|
|
||||||
/obj/item/weapon/soap/syndie
|
/obj/item/weapon/soap/syndie
|
||||||
desc = "An untrustworthy bar of soap. Smells of fear."
|
desc = "An untrustworthy bar of soap. Smells of fear."
|
||||||
icon_state = "soapsyndie"
|
icon_state = "soapsyndie"
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
|
|||||||
var/debug = 0
|
var/debug = 0
|
||||||
var/powerupdate = 10 //We give everything 10 ticks to settle out it's power usage.
|
var/powerupdate = 10 //We give everything 10 ticks to settle out it's power usage.
|
||||||
var/requires_power = 1
|
var/requires_power = 1
|
||||||
|
var/unlimited_power = 0
|
||||||
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()
|
||||||
|
|
||||||
var/power_equip = 1
|
var/power_equip = 1
|
||||||
@@ -364,6 +365,7 @@ var/list/ghostteleportlocs = list()
|
|||||||
name = "\improper Syndicate Mothership"
|
name = "\improper Syndicate Mothership"
|
||||||
icon_state = "syndie-ship"
|
icon_state = "syndie-ship"
|
||||||
requires_power = 0
|
requires_power = 0
|
||||||
|
unlimited_power = 1
|
||||||
|
|
||||||
/area/syndicate_mothership/control
|
/area/syndicate_mothership/control
|
||||||
name = "\improper Syndicate Control Room"
|
name = "\improper Syndicate Control Room"
|
||||||
@@ -436,6 +438,7 @@ var/list/ghostteleportlocs = list()
|
|||||||
name = "\improper Syndicate Station"
|
name = "\improper Syndicate Station"
|
||||||
icon_state = "yellow"
|
icon_state = "yellow"
|
||||||
requires_power = 0
|
requires_power = 0
|
||||||
|
unlimited_power = 1
|
||||||
|
|
||||||
/area/syndicate_station/start
|
/area/syndicate_station/start
|
||||||
name = "\improper Syndicate Forward Operating Base"
|
name = "\improper Syndicate Forward Operating Base"
|
||||||
|
|||||||
@@ -124,7 +124,7 @@
|
|||||||
del(A)
|
del(A)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
var/obj/effect/landmark/uplinklocker = locate("landmark*Syndicate-Uplink") //i will be rewriting this shortly
|
var/obj/effect/landmark/uplinkdevice = locate("landmark*Syndicate-Uplink") //i will be rewriting this shortly
|
||||||
var/obj/effect/landmark/nuke_spawn = locate("landmark*Nuclear-Bomb")
|
var/obj/effect/landmark/nuke_spawn = locate("landmark*Nuclear-Bomb")
|
||||||
|
|
||||||
var/nuke_code = "[rand(10000, 99999)]"
|
var/nuke_code = "[rand(10000, 99999)]"
|
||||||
@@ -153,8 +153,9 @@
|
|||||||
|
|
||||||
update_all_synd_icons()
|
update_all_synd_icons()
|
||||||
|
|
||||||
if(uplinklocker)
|
if(uplinkdevice)
|
||||||
new /obj/structure/closet/syndicate/nuclear(uplinklocker.loc)
|
var/obj/item/device/radio/uplink/U = new(uplinkdevice.loc)
|
||||||
|
U.hidden_uplink.uses = 40
|
||||||
if(nuke_spawn && synd_spawn.len > 0)
|
if(nuke_spawn && synd_spawn.len > 0)
|
||||||
var/obj/machinery/nuclearbomb/the_bomb = new /obj/machinery/nuclearbomb(nuke_spawn.loc)
|
var/obj/machinery/nuclearbomb/the_bomb = new /obj/machinery/nuclearbomb(nuke_spawn.loc)
|
||||||
the_bomb.r_code = nuke_code
|
the_bomb.r_code = nuke_code
|
||||||
@@ -166,6 +167,7 @@
|
|||||||
|
|
||||||
|
|
||||||
/datum/game_mode/proc/prepare_syndicate_leader(var/datum/mind/synd_mind, var/nuke_code)
|
/datum/game_mode/proc/prepare_syndicate_leader(var/datum/mind/synd_mind, var/nuke_code)
|
||||||
|
var/obj/effect/landmark/code_spawn = locate("landmark*Nuclear-Code")
|
||||||
if (nuke_code)
|
if (nuke_code)
|
||||||
synd_mind.store_memory("<B>Syndicate Nuclear Bomb Code</B>: [nuke_code]", 0, 0)
|
synd_mind.store_memory("<B>Syndicate Nuclear Bomb Code</B>: [nuke_code]", 0, 0)
|
||||||
synd_mind.current << "The nuclear authorization code is: <B>[nuke_code]</B>"
|
synd_mind.current << "The nuclear authorization code is: <B>[nuke_code]</B>"
|
||||||
@@ -173,7 +175,7 @@
|
|||||||
P.info = "The nuclear authorization code is: <b>[nuke_code]</b>"
|
P.info = "The nuclear authorization code is: <b>[nuke_code]</b>"
|
||||||
P.name = "nuclear bomb code"
|
P.name = "nuclear bomb code"
|
||||||
if (ticker.mode.config_tag=="nuclear")
|
if (ticker.mode.config_tag=="nuclear")
|
||||||
P.loc = synd_mind.current.loc
|
P.loc = code_spawn.loc
|
||||||
else
|
else
|
||||||
var/mob/living/carbon/human/H = synd_mind.current
|
var/mob/living/carbon/human/H = synd_mind.current
|
||||||
P.loc = H.loc
|
P.loc = H.loc
|
||||||
@@ -230,6 +232,7 @@
|
|||||||
synd_mob.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/automatic/c20r(synd_mob), slot_belt)
|
synd_mob.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/automatic/c20r(synd_mob), slot_belt)
|
||||||
synd_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(synd_mob.back), slot_in_backpack)
|
synd_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(synd_mob.back), slot_in_backpack)
|
||||||
|
|
||||||
|
/* Commented; nukes now have a suit cycler for changing rig-suits, they don't need to spawn with them
|
||||||
var/obj/item/clothing/suit/space/rig/syndi/new_suit = new(synd_mob)
|
var/obj/item/clothing/suit/space/rig/syndi/new_suit = new(synd_mob)
|
||||||
var/obj/item/clothing/head/helmet/space/rig/syndi/new_helmet = new(synd_mob)
|
var/obj/item/clothing/head/helmet/space/rig/syndi/new_helmet = new(synd_mob)
|
||||||
|
|
||||||
@@ -245,8 +248,8 @@
|
|||||||
if("Skrell")
|
if("Skrell")
|
||||||
new_suit.species_restricted = list("Skrell")
|
new_suit.species_restricted = list("Skrell")
|
||||||
|
|
||||||
synd_mob.equip_to_slot_or_del(new_suit, slot_wear_suit)
|
synd_mob.equip_to_slot_or_del(new_suit, slot_in_backpack)
|
||||||
synd_mob.equip_to_slot_or_del(new_helmet, slot_head)
|
synd_mob.equip_to_slot_or_del(new_helmet, slot_in_backpack)*/
|
||||||
|
|
||||||
// var/obj/item/weapon/implant/explosive/E = new/obj/item/weapon/implant/explosive(synd_mob)
|
// var/obj/item/weapon/implant/explosive/E = new/obj/item/weapon/implant/explosive(synd_mob)
|
||||||
// E.imp_in = synd_mob
|
// E.imp_in = synd_mob
|
||||||
|
|||||||
@@ -309,10 +309,18 @@
|
|||||||
if(e.open)
|
if(e.open)
|
||||||
open = "Open:"
|
open = "Open:"
|
||||||
switch (e.germ_level)
|
switch (e.germ_level)
|
||||||
if (INFECTION_LEVEL_ONE + 50 to INFECTION_LEVEL_TWO)
|
if (INFECTION_LEVEL_ONE to INFECTION_LEVEL_ONE + 200)
|
||||||
infected = "Mild Infection:"
|
infected = "Mild Infection:"
|
||||||
if (INFECTION_LEVEL_TWO to INFECTION_LEVEL_THREE)
|
if (INFECTION_LEVEL_ONE + 200 to INFECTION_LEVEL_ONE + 300)
|
||||||
|
infected = "Mild Infection+:"
|
||||||
|
if (INFECTION_LEVEL_ONE + 300 to INFECTION_LEVEL_ONE + 400)
|
||||||
|
infected = "Mild Infection++:"
|
||||||
|
if (INFECTION_LEVEL_TWO to INFECTION_LEVEL_TWO + 200)
|
||||||
infected = "Acute Infection:"
|
infected = "Acute Infection:"
|
||||||
|
if (INFECTION_LEVEL_TWO + 200 to INFECTION_LEVEL_TWO + 300)
|
||||||
|
infected = "Acute Infection+:"
|
||||||
|
if (INFECTION_LEVEL_TWO + 300 to INFECTION_LEVEL_TWO + 400)
|
||||||
|
infected = "Acute Infection++:"
|
||||||
if (INFECTION_LEVEL_THREE to INFINITY)
|
if (INFECTION_LEVEL_THREE to INFINITY)
|
||||||
infected = "Septic:"
|
infected = "Septic:"
|
||||||
|
|
||||||
@@ -341,10 +349,18 @@
|
|||||||
|
|
||||||
var/infection = "None"
|
var/infection = "None"
|
||||||
switch (i.germ_level)
|
switch (i.germ_level)
|
||||||
if (1 to INFECTION_LEVEL_TWO)
|
if (1 to INFECTION_LEVEL_ONE + 200)
|
||||||
infection = "Mild Infection:"
|
infection = "Mild Infection:"
|
||||||
if (INFECTION_LEVEL_TWO to INFINITY)
|
if (INFECTION_LEVEL_ONE + 200 to INFECTION_LEVEL_ONE + 300)
|
||||||
|
infection = "Mild Infection+:"
|
||||||
|
if (INFECTION_LEVEL_ONE + 300 to INFECTION_LEVEL_ONE + 400)
|
||||||
|
infection = "Mild Infection++:"
|
||||||
|
if (INFECTION_LEVEL_TWO to INFECTION_LEVEL_TWO + 200)
|
||||||
infection = "Acute Infection:"
|
infection = "Acute Infection:"
|
||||||
|
if (INFECTION_LEVEL_TWO + 200 to INFECTION_LEVEL_TWO + 300)
|
||||||
|
infection = "Acute Infection+:"
|
||||||
|
if (INFECTION_LEVEL_TWO + 300 to INFINITY)
|
||||||
|
infection = "Acute Infection++:"
|
||||||
|
|
||||||
dat += "<tr>"
|
dat += "<tr>"
|
||||||
dat += "<td>[i.name]</td><td>N/A</td><td>[i.damage]</td><td>[infection]:[mech]</td><td></td>"
|
dat += "<td>[i.name]</td><td>N/A</td><td>[i.damage]</td><td>[infection]:[mech]</td><td></td>"
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
|
#define CONTROL_POD_DOORS 0
|
||||||
|
#define CONTROL_NORMAL_DOORS 1
|
||||||
|
#define CONTROL_EMITTERS 2
|
||||||
|
|
||||||
/obj/machinery/door_control
|
/obj/machinery/door_control
|
||||||
name = "remote door-control"
|
name = "remote door-control"
|
||||||
desc = "It controls doors, remotely."
|
desc = "It controls doors, remotely."
|
||||||
@@ -7,7 +11,7 @@
|
|||||||
power_channel = ENVIRON
|
power_channel = ENVIRON
|
||||||
var/id = null
|
var/id = null
|
||||||
var/range = 10
|
var/range = 10
|
||||||
var/normaldoorcontrol = 0
|
var/normaldoorcontrol = CONTROL_POD_DOORS
|
||||||
var/desiredstate = 0 // Zero is closed, 1 is open.
|
var/desiredstate = 0 // Zero is closed, 1 is open.
|
||||||
var/specialfunctions = 1
|
var/specialfunctions = 1
|
||||||
/*
|
/*
|
||||||
@@ -63,21 +67,7 @@
|
|||||||
playsound(src.loc, "sparks", 100, 1)
|
playsound(src.loc, "sparks", 100, 1)
|
||||||
return src.attack_hand(user)
|
return src.attack_hand(user)
|
||||||
|
|
||||||
/obj/machinery/door_control/attack_hand(mob/user as mob)
|
/obj/machinery/door_control/proc/handle_door()
|
||||||
src.add_fingerprint(usr)
|
|
||||||
if(stat & (NOPOWER|BROKEN))
|
|
||||||
return
|
|
||||||
|
|
||||||
if(!allowed(user) && (wires & 1))
|
|
||||||
user << "\red Access Denied"
|
|
||||||
flick("doorctrl-denied",src)
|
|
||||||
return
|
|
||||||
|
|
||||||
use_power(5)
|
|
||||||
icon_state = "doorctrl1"
|
|
||||||
add_fingerprint(user)
|
|
||||||
|
|
||||||
if(normaldoorcontrol)
|
|
||||||
for(var/obj/machinery/door/airlock/D in range(range))
|
for(var/obj/machinery/door/airlock/D in range(range))
|
||||||
if(D.id_tag == src.id)
|
if(D.id_tag == src.id)
|
||||||
if(specialfunctions & OPEN)
|
if(specialfunctions & OPEN)
|
||||||
@@ -109,18 +99,47 @@
|
|||||||
if(specialfunctions & SAFE)
|
if(specialfunctions & SAFE)
|
||||||
D.safe = 1
|
D.safe = 1
|
||||||
|
|
||||||
else
|
/obj/machinery/door_control/proc/handle_pod()
|
||||||
for(var/obj/machinery/door/poddoor/M in world)
|
for(var/obj/machinery/door/poddoor/M in world)
|
||||||
if (M.id == src.id)
|
if(M.id == src.id)
|
||||||
if (M.density)
|
if(M.density)
|
||||||
spawn( 0 )
|
spawn(0)
|
||||||
M.open()
|
M.open()
|
||||||
return
|
return
|
||||||
else
|
else
|
||||||
spawn( 0 )
|
spawn(0)
|
||||||
M.close()
|
M.close()
|
||||||
return
|
return
|
||||||
|
|
||||||
|
/obj/machinery/door_control/proc/handle_emitters(mob/user as mob)
|
||||||
|
for(var/obj/machinery/power/emitter/E in range(range))
|
||||||
|
if(E.id == src.id)
|
||||||
|
spawn(0)
|
||||||
|
E.activate(user)
|
||||||
|
return
|
||||||
|
|
||||||
|
/obj/machinery/door_control/attack_hand(mob/user as mob)
|
||||||
|
src.add_fingerprint(user)
|
||||||
|
if(stat & (NOPOWER|BROKEN))
|
||||||
|
return
|
||||||
|
|
||||||
|
if(!allowed(user) && (wires & 1))
|
||||||
|
user << "\red Access Denied"
|
||||||
|
flick("doorctrl-denied",src)
|
||||||
|
return
|
||||||
|
|
||||||
|
use_power(5)
|
||||||
|
icon_state = "doorctrl1"
|
||||||
|
add_fingerprint(user)
|
||||||
|
|
||||||
|
switch(normaldoorcontrol)
|
||||||
|
if(CONTROL_NORMAL_DOORS)
|
||||||
|
handle_door()
|
||||||
|
if(CONTROL_POD_DOORS)
|
||||||
|
handle_pod()
|
||||||
|
if(CONTROL_EMITTERS)
|
||||||
|
handle_emitters(user)
|
||||||
|
|
||||||
desiredstate = !desiredstate
|
desiredstate = !desiredstate
|
||||||
spawn(15)
|
spawn(15)
|
||||||
if(!(stat & NOPOWER))
|
if(!(stat & NOPOWER))
|
||||||
|
|||||||
@@ -108,7 +108,9 @@
|
|||||||
|
|
||||||
//are we ready for undocking?
|
//are we ready for undocking?
|
||||||
/datum/computer/file/embedded_program/docking/airlock/ready_for_undocking()
|
/datum/computer/file/embedded_program/docking/airlock/ready_for_undocking()
|
||||||
return airlock_program.check_doors_secured()
|
var/ext_closed = airlock_program.check_exterior_door_secured()
|
||||||
|
var/int_closed = airlock_program.check_interior_door_secured()
|
||||||
|
return (ext_closed || int_closed)
|
||||||
|
|
||||||
//An airlock controller to be used by the airlock-based docking port controller.
|
//An airlock controller to be used by the airlock-based docking port controller.
|
||||||
//Same as a regular airlock controller but allows disabling of the regular airlock functions when docking
|
//Same as a regular airlock controller but allows disabling of the regular airlock functions when docking
|
||||||
|
|||||||
@@ -35,10 +35,10 @@
|
|||||||
|
|
||||||
if (istype(M, /obj/machinery/embedded_controller/radio/airlock)) //if our controller is an airlock controller than we can auto-init our tags
|
if (istype(M, /obj/machinery/embedded_controller/radio/airlock)) //if our controller is an airlock controller than we can auto-init our tags
|
||||||
var/obj/machinery/embedded_controller/radio/airlock/controller = M
|
var/obj/machinery/embedded_controller/radio/airlock/controller = M
|
||||||
tag_exterior_door = controller.tag_exterior_door
|
tag_exterior_door = controller.tag_exterior_door? controller.tag_exterior_door : "[id_tag]_outer"
|
||||||
tag_interior_door = controller.tag_interior_door
|
tag_interior_door = controller.tag_interior_door? controller.tag_interior_door : "[id_tag]_inner"
|
||||||
tag_airpump = controller.tag_airpump
|
tag_airpump = controller.tag_airpump? controller.tag_airpump : "[id_tag]_pump"
|
||||||
tag_chamber_sensor = controller.tag_chamber_sensor
|
tag_chamber_sensor = controller.tag_chamber_sensor? controller.tag_chamber_sensor : "[id_tag]_sensor"
|
||||||
tag_exterior_sensor = controller.tag_exterior_sensor
|
tag_exterior_sensor = controller.tag_exterior_sensor
|
||||||
tag_interior_sensor = controller.tag_interior_sensor
|
tag_interior_sensor = controller.tag_interior_sensor
|
||||||
memory["secure"] = controller.tag_secure
|
memory["secure"] = controller.tag_secure
|
||||||
@@ -248,9 +248,15 @@
|
|||||||
return (state == STATE_WAIT && target_state == TARGET_NONE)
|
return (state == STATE_WAIT && target_state == TARGET_NONE)
|
||||||
|
|
||||||
//are the doors closed and locked?
|
//are the doors closed and locked?
|
||||||
|
/datum/computer/file/embedded_program/airlock/proc/check_exterior_door_secured()
|
||||||
|
return (memory["exterior_status"]["state"] == "closed" && memory["exterior_status"]["lock"] == "locked")
|
||||||
|
|
||||||
|
/datum/computer/file/embedded_program/airlock/proc/check_interior_door_secured()
|
||||||
|
return (memory["interior_status"]["state"] == "closed" && memory["interior_status"]["lock"] == "locked")
|
||||||
|
|
||||||
/datum/computer/file/embedded_program/airlock/proc/check_doors_secured()
|
/datum/computer/file/embedded_program/airlock/proc/check_doors_secured()
|
||||||
var/ext_closed = (memory["exterior_status"]["state"] == "closed" && memory["exterior_status"]["lock"] == "locked")
|
var/ext_closed = check_exterior_door_secured()
|
||||||
var/int_closed = (memory["interior_status"]["state"] == "closed" && memory["interior_status"]["lock"] == "locked")
|
var/int_closed = check_interior_door_secured()
|
||||||
return (ext_closed && int_closed)
|
return (ext_closed && int_closed)
|
||||||
|
|
||||||
/datum/computer/file/embedded_program/airlock/proc/signalDoor(var/tag, var/command)
|
/datum/computer/file/embedded_program/airlock/proc/signalDoor(var/tag, var/command)
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
//This controller goes on the escape pod itself
|
//This controller goes on the escape pod itself
|
||||||
/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod
|
/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod
|
||||||
|
name = "escape pod controller"
|
||||||
var/datum/shuttle/ferry/escape_pod/pod
|
var/datum/shuttle/ferry/escape_pod/pod
|
||||||
|
|
||||||
/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
|
/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
|
||||||
|
|||||||
@@ -58,7 +58,7 @@
|
|||||||
if (istype(M, /obj/machinery/embedded_controller/radio/simple_docking_controller))
|
if (istype(M, /obj/machinery/embedded_controller/radio/simple_docking_controller))
|
||||||
var/obj/machinery/embedded_controller/radio/simple_docking_controller/controller = M
|
var/obj/machinery/embedded_controller/radio/simple_docking_controller/controller = M
|
||||||
|
|
||||||
tag_door = controller.tag_door
|
tag_door = controller.tag_door? controller.tag_door : "[id_tag]_hatch"
|
||||||
|
|
||||||
spawn(10)
|
spawn(10)
|
||||||
signal_door("update") //signals connected doors to update their status
|
signal_door("update") //signals connected doors to update their status
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ obj/machinery/recharger/attackby(obj/item/weapon/G as obj, mob/user as mob)
|
|||||||
if(!isarea(a))
|
if(!isarea(a))
|
||||||
user << "\red The [name] blinks red as you try to insert the item!"
|
user << "\red The [name] blinks red as you try to insert the item!"
|
||||||
return
|
return
|
||||||
if(a.power_equip == 0)
|
if(a.power_equip == 0 && !a.unlimited_power)
|
||||||
user << "\red The [name] blinks red as you try to insert the item!"
|
user << "\red The [name] blinks red as you try to insert the item!"
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -59,7 +59,7 @@ obj/machinery/recharger/attack_hand(mob/user as mob)
|
|||||||
|
|
||||||
if(charging)
|
if(charging)
|
||||||
charging.update_icon()
|
charging.update_icon()
|
||||||
charging.loc = loc
|
user.put_in_hands(charging)
|
||||||
charging = null
|
charging = null
|
||||||
update_icon()
|
update_icon()
|
||||||
|
|
||||||
|
|||||||
@@ -21,6 +21,19 @@
|
|||||||
if(istype(P, /obj/item/device/multitool))
|
if(istype(P, /obj/item/device/multitool))
|
||||||
attack_hand(user)
|
attack_hand(user)
|
||||||
|
|
||||||
|
|
||||||
|
// REPAIRING: Use Nanopaste to repair 10-20 integrity points.
|
||||||
|
if(istype(P, /obj/item/stack/nanopaste))
|
||||||
|
var/obj/item/stack/nanopaste/T = P
|
||||||
|
if (integrity < 100) //Damaged, let's repair!
|
||||||
|
integrity = between(0, integrity + rand(10,20), 100)
|
||||||
|
T.use(1)
|
||||||
|
usr << "You apply the Nanopaste to [src], repairing some of the damage."
|
||||||
|
else
|
||||||
|
usr << "This machine is already in perfect condition."
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
switch(construct_op)
|
switch(construct_op)
|
||||||
if(0)
|
if(0)
|
||||||
if(istype(P, /obj/item/weapon/screwdriver))
|
if(istype(P, /obj/item/weapon/screwdriver))
|
||||||
|
|||||||
@@ -213,11 +213,20 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list()
|
|||||||
/obj/machinery/telecomms/proc/checkheat()
|
/obj/machinery/telecomms/proc/checkheat()
|
||||||
// Checks heat from the environment and applies any integrity damage
|
// Checks heat from the environment and applies any integrity damage
|
||||||
var/datum/gas_mixture/environment = loc.return_air()
|
var/datum/gas_mixture/environment = loc.return_air()
|
||||||
|
var/damage_chance = 0 // Percent based chance of applying 1 integrity damage this tick
|
||||||
switch(environment.temperature)
|
switch(environment.temperature)
|
||||||
if(T0C to (T20C + 20))
|
if((T0C + 40) to (T0C + 70)) // 40C-70C, minor overheat, 10% chance of taking damage
|
||||||
integrity = between(0, integrity, 100)
|
damage_chance = 10
|
||||||
if((T20C + 20) to (T0C + 70))
|
if((T0C + 70) to (T0C + 130)) // 70C-130C, major overheat, 25% chance of taking damage
|
||||||
integrity = max(0, integrity - 1)
|
damage_chance = 25
|
||||||
|
if((T0C + 130) to (T0C + 200)) // 130C-200C, dangerous overheat, 50% chance of taking damage
|
||||||
|
damage_chance = 50
|
||||||
|
if((T0C + 200) to INFINITY) // More than 200C, INFERNO. Takes damage every tick.
|
||||||
|
damage_chance = 100
|
||||||
|
if (damage_chance && prob(damage_chance))
|
||||||
|
integrity = between(0, integrity - 1, 100)
|
||||||
|
|
||||||
|
|
||||||
if(delay)
|
if(delay)
|
||||||
delay--
|
delay--
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -303,4 +303,3 @@
|
|||||||
for(var/mob/M in src)
|
for(var/mob/M in src)
|
||||||
M.emp_act(severity)
|
M.emp_act(severity)
|
||||||
..()
|
..()
|
||||||
|
|
||||||
|
|||||||
@@ -32,9 +32,9 @@
|
|||||||
/obj/item/weapon/kitchen/utensil/New()
|
/obj/item/weapon/kitchen/utensil/New()
|
||||||
if (prob(60))
|
if (prob(60))
|
||||||
src.pixel_y = rand(0, 4)
|
src.pixel_y = rand(0, 4)
|
||||||
return
|
|
||||||
|
|
||||||
create_reagents(5)
|
create_reagents(5)
|
||||||
|
return
|
||||||
|
|
||||||
/obj/item/weapon/kitchen/utensil/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
|
/obj/item/weapon/kitchen/utensil/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
|
||||||
if(!istype(M))
|
if(!istype(M))
|
||||||
|
|||||||
@@ -25,6 +25,19 @@
|
|||||||
new /obj/item/clothing/shoes/magboots(src)
|
new /obj/item/clothing/shoes/magboots(src)
|
||||||
|
|
||||||
|
|
||||||
|
/obj/structure/closet/syndicate/suit
|
||||||
|
desc = "It's a storage unit for rig suits."
|
||||||
|
|
||||||
|
/obj/structure/closet/syndicate/suit/New()
|
||||||
|
..()
|
||||||
|
sleep(2)
|
||||||
|
new /obj/item/weapon/tank/jetpack/oxygen(src)
|
||||||
|
new /obj/item/clothing/shoes/magboots(src)
|
||||||
|
new /obj/item/clothing/suit/space/rig/syndi(src)
|
||||||
|
new /obj/item/clothing/mask/gas/syndicate(src)
|
||||||
|
new /obj/item/clothing/head/helmet/space/rig/syndi(src)
|
||||||
|
|
||||||
|
|
||||||
/obj/structure/closet/syndicate/nuclear
|
/obj/structure/closet/syndicate/nuclear
|
||||||
desc = "It's a storage unit for nuclear-operative gear."
|
desc = "It's a storage unit for nuclear-operative gear."
|
||||||
|
|
||||||
|
|||||||
@@ -752,7 +752,7 @@
|
|||||||
name = "Robotics labcoat"
|
name = "Robotics labcoat"
|
||||||
desc = "A labcoat with a few markings denoting it as the labcoat of roboticist."
|
desc = "A labcoat with a few markings denoting it as the labcoat of roboticist."
|
||||||
icon = 'icons/obj/custom_items.dmi'
|
icon = 'icons/obj/custom_items.dmi'
|
||||||
icon_state = "aeneasrinil_open"
|
icon_state = "aeneasrinil"
|
||||||
|
|
||||||
/obj/item/clothing/suit/storage/labcoat/fluff/pink //spaceman96: Trenna Seber
|
/obj/item/clothing/suit/storage/labcoat/fluff/pink //spaceman96: Trenna Seber
|
||||||
name = "pink labcoat"
|
name = "pink labcoat"
|
||||||
|
|||||||
@@ -54,7 +54,7 @@
|
|||||||
speech_verb = "shrieks"
|
speech_verb = "shrieks"
|
||||||
colour = "vox"
|
colour = "vox"
|
||||||
key = "v"
|
key = "v"
|
||||||
flags = RESTRICTED
|
flags = RESTRICTED | UNTRANSLATABLE
|
||||||
|
|
||||||
/datum/language/diona
|
/datum/language/diona
|
||||||
name = "Rootspeak"
|
name = "Rootspeak"
|
||||||
@@ -62,7 +62,7 @@
|
|||||||
speech_verb = "creaks and rustles"
|
speech_verb = "creaks and rustles"
|
||||||
colour = "soghun"
|
colour = "soghun"
|
||||||
key = "q"
|
key = "q"
|
||||||
flags = RESTRICTED
|
flags = RESTRICTED | UNTRANSLATABLE
|
||||||
|
|
||||||
/datum/language/human
|
/datum/language/human
|
||||||
name = "Sol Common"
|
name = "Sol Common"
|
||||||
@@ -106,7 +106,7 @@
|
|||||||
// Can we speak this language, as opposed to just understanding it?
|
// Can we speak this language, as opposed to just understanding it?
|
||||||
/mob/proc/can_speak(datum/language/speaking)
|
/mob/proc/can_speak(datum/language/speaking)
|
||||||
|
|
||||||
return (universal_speak || speaking in src.languages)
|
return ((universal_speak && !(speaking.flags & UNTRANSLATABLE)) || speaking in src.languages)
|
||||||
|
|
||||||
//TBD
|
//TBD
|
||||||
/mob/verb/check_languages()
|
/mob/verb/check_languages()
|
||||||
|
|||||||
@@ -92,7 +92,7 @@ var/list/department_radio_keys = list(
|
|||||||
|
|
||||||
if (speaking.flags & SIGNLANG)
|
if (speaking.flags & SIGNLANG)
|
||||||
say_signlang(message, pick(speaking.signlang_verb), speaking)
|
say_signlang(message, pick(speaking.signlang_verb), speaking)
|
||||||
return
|
return 1
|
||||||
|
|
||||||
//speaking into radios
|
//speaking into radios
|
||||||
if(used_radios.len)
|
if(used_radios.len)
|
||||||
@@ -166,6 +166,7 @@ var/list/department_radio_keys = list(
|
|||||||
O.hear_talk(src, message, verb, speaking)
|
O.hear_talk(src, message, verb, speaking)
|
||||||
|
|
||||||
log_say("[name]/[key] : [message]")
|
log_say("[name]/[key] : [message]")
|
||||||
|
return 1
|
||||||
|
|
||||||
/mob/living/proc/say_signlang(var/message, var/verb="gestures", var/datum/language/language)
|
/mob/living/proc/say_signlang(var/message, var/verb="gestures", var/datum/language/language)
|
||||||
for (var/mob/O in viewers(src, null))
|
for (var/mob/O in viewers(src, null))
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ var/list/ai_list = list()
|
|||||||
var/viewalerts = 0
|
var/viewalerts = 0
|
||||||
var/lawcheck[1]
|
var/lawcheck[1]
|
||||||
var/ioncheck[1]
|
var/ioncheck[1]
|
||||||
|
var/lawchannel = "Common" // Default channel on which to state laws
|
||||||
var/icon/holo_icon//Default is assigned when AI is created.
|
var/icon/holo_icon//Default is assigned when AI is created.
|
||||||
var/obj/item/device/pda/ai/aiPDA = null
|
var/obj/item/device/pda/ai/aiPDA = null
|
||||||
var/obj/item/device/multitool/aiMulti = null
|
var/obj/item/device/multitool/aiMulti = null
|
||||||
@@ -103,7 +104,6 @@ var/list/ai_list = list()
|
|||||||
add_language("Siik'maas", 0)
|
add_language("Siik'maas", 0)
|
||||||
add_language("Siik'tajr", 0)
|
add_language("Siik'tajr", 0)
|
||||||
add_language("Skrellian", 0)
|
add_language("Skrellian", 0)
|
||||||
add_language("Rootspeak", 0)
|
|
||||||
add_language("Tradeband", 1)
|
add_language("Tradeband", 1)
|
||||||
add_language("Gutter", 0)
|
add_language("Gutter", 0)
|
||||||
|
|
||||||
@@ -390,6 +390,13 @@ var/list/ai_list = list()
|
|||||||
// src << text ("Switching Law [L]'s report status to []", lawcheck[L+1])
|
// src << text ("Switching Law [L]'s report status to []", lawcheck[L+1])
|
||||||
checklaws()
|
checklaws()
|
||||||
|
|
||||||
|
if (href_list["lawr"]) // Selects on which channel to state laws
|
||||||
|
var/setchannel = input(usr, "Specify channel.", "Channel selection") in list("State","Common","Science","Command","Medical","Engineering","Security","Supply","Binary","Holopad", "Cancel")
|
||||||
|
if(setchannel == "Cancel")
|
||||||
|
return
|
||||||
|
lawchannel = setchannel
|
||||||
|
checklaws()
|
||||||
|
|
||||||
//Uncomment this line of code if you are enabling the AI Vocal (VOX) announcements.
|
//Uncomment this line of code if you are enabling the AI Vocal (VOX) announcements.
|
||||||
/*
|
/*
|
||||||
if(href_list["say_word"])
|
if(href_list["say_word"])
|
||||||
|
|||||||
@@ -51,24 +51,33 @@
|
|||||||
src.laws_sanity_check()
|
src.laws_sanity_check()
|
||||||
src.laws.clear_supplied_laws()
|
src.laws.clear_supplied_laws()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/mob/living/silicon/ai/proc/statelaws() // -- TLE
|
/mob/living/silicon/ai/proc/statelaws() // -- TLE
|
||||||
// set category = "AI Commands"
|
// set category = "AI Commands"
|
||||||
// set name = "State Laws"
|
// set name = "State Laws"
|
||||||
src.say("Current Active Laws:")
|
/var/prefix = ""
|
||||||
|
switch(lawchannel)
|
||||||
|
if("Common") prefix = ";"
|
||||||
|
if("Science") prefix = ":n "
|
||||||
|
if("Command") prefix = ":c "
|
||||||
|
if("Medical") prefix = ":m "
|
||||||
|
if("Engineering") prefix = ":e "
|
||||||
|
if("Security") prefix = ":s "
|
||||||
|
if("Supply") prefix = ":u "
|
||||||
|
if("Binary") prefix = ":b "
|
||||||
|
if("Holopad") prefix = ":h "
|
||||||
|
else prefix = ""
|
||||||
|
|
||||||
|
if(src.say("[prefix]Current Active Laws:") != 1)
|
||||||
|
return
|
||||||
|
|
||||||
//src.laws_sanity_check()
|
//src.laws_sanity_check()
|
||||||
//src.laws.show_laws(world)
|
//src.laws.show_laws(world)
|
||||||
var/number = 1
|
var/number = 1
|
||||||
sleep(10)
|
sleep(10)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (src.laws.zeroth)
|
if (src.laws.zeroth)
|
||||||
if (src.lawcheck[1] == "Yes") //This line and the similar lines below make sure you don't state a law unless you want to. --NeoFite
|
if (src.lawcheck[1] == "Yes") //This line and the similar lines below make sure you don't state a law unless you want to. --NeoFite
|
||||||
src.say("0. [src.laws.zeroth]")
|
src.say("[prefix]0. [src.laws.zeroth]")
|
||||||
sleep(10)
|
sleep(10)
|
||||||
|
|
||||||
for (var/index = 1, index <= src.laws.ion.len, index++)
|
for (var/index = 1, index <= src.laws.ion.len, index++)
|
||||||
@@ -76,7 +85,7 @@
|
|||||||
var/num = ionnum()
|
var/num = ionnum()
|
||||||
if (length(law) > 0)
|
if (length(law) > 0)
|
||||||
if (src.ioncheck[index] == "Yes")
|
if (src.ioncheck[index] == "Yes")
|
||||||
src.say("[num]. [law]")
|
src.say("[prefix][num]. [law]")
|
||||||
sleep(10)
|
sleep(10)
|
||||||
|
|
||||||
for (var/index = 1, index <= src.laws.inherent.len, index++)
|
for (var/index = 1, index <= src.laws.inherent.len, index++)
|
||||||
@@ -84,22 +93,20 @@
|
|||||||
|
|
||||||
if (length(law) > 0)
|
if (length(law) > 0)
|
||||||
if (src.lawcheck[index+1] == "Yes")
|
if (src.lawcheck[index+1] == "Yes")
|
||||||
src.say("[number]. [law]")
|
src.say("[prefix][number]. [law]")
|
||||||
sleep(10)
|
sleep(10)
|
||||||
number++
|
number++
|
||||||
|
|
||||||
|
|
||||||
for (var/index = 1, index <= src.laws.supplied.len, index++)
|
for (var/index = 1, index <= src.laws.supplied.len, index++)
|
||||||
var/law = src.laws.supplied[index]
|
var/law = src.laws.supplied[index]
|
||||||
|
|
||||||
if (length(law) > 0)
|
if (length(law) > 0)
|
||||||
if(src.lawcheck.len >= number+1)
|
if(src.lawcheck.len >= number+1)
|
||||||
if (src.lawcheck[number+1] == "Yes")
|
if (src.lawcheck[number+1] == "Yes")
|
||||||
src.say("[number]. [law]")
|
src.say("[prefix][number]. [law]")
|
||||||
sleep(10)
|
sleep(10)
|
||||||
number++
|
number++
|
||||||
|
|
||||||
|
|
||||||
/mob/living/silicon/ai/verb/checklaws() //Gives you a link-driven interface for deciding what laws the statelaws() proc will share with the crew. --NeoFite
|
/mob/living/silicon/ai/verb/checklaws() //Gives you a link-driven interface for deciding what laws the statelaws() proc will share with the crew. --NeoFite
|
||||||
set category = "AI Commands"
|
set category = "AI Commands"
|
||||||
set name = "State Laws"
|
set name = "State Laws"
|
||||||
@@ -144,6 +151,8 @@
|
|||||||
src.lawcheck[number+1] = "Yes"
|
src.lawcheck[number+1] = "Yes"
|
||||||
list += {"<A href='byond://?src=\ref[src];lawc=[number]'>[src.lawcheck[number+1]] [number]:</A> [law]<BR>"}
|
list += {"<A href='byond://?src=\ref[src];lawc=[number]'>[src.lawcheck[number+1]] [number]:</A> [law]<BR>"}
|
||||||
number++
|
number++
|
||||||
list += {"<br><br><A href='byond://?src=\ref[src];laws=1'>State Laws</A>"}
|
|
||||||
|
list += {"<br><A href='byond://?src=\ref[src];lawr=1'>Channel: [src.lawchannel]</A><br>"}
|
||||||
|
list += {"<A href='byond://?src=\ref[src];laws=1'>State Laws</A>"}
|
||||||
|
|
||||||
usr << browse(list, "window=laws")
|
usr << browse(list, "window=laws")
|
||||||
@@ -1,9 +1,8 @@
|
|||||||
/mob/living/silicon/ai/say(var/message)
|
/mob/living/silicon/ai/say(var/message)
|
||||||
if(parent && istype(parent) && parent.stat != 2)
|
if(parent && istype(parent) && parent.stat != 2)
|
||||||
parent.say(message)
|
return parent.say(message)
|
||||||
return
|
|
||||||
//If there is a defined "parent" AI, it is actually an AI, and it is alive, anything the AI tries to say is said by the parent instead.
|
//If there is a defined "parent" AI, it is actually an AI, and it is alive, anything the AI tries to say is said by the parent instead.
|
||||||
..(message)
|
return ..(message)
|
||||||
|
|
||||||
// These Verbs are commented out since we've disabled the AI vocal (VOX) announcements.
|
// These Verbs are commented out since we've disabled the AI vocal (VOX) announcements.
|
||||||
// If you re-enable them there is 3 lines in ai.dm Topic() that you need to uncomment as well.
|
// If you re-enable them there is 3 lines in ai.dm Topic() that you need to uncomment as well.
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
/mob/living/silicon/pai
|
/mob/living/silicon/pai
|
||||||
name = "pAI"
|
name = "pAI"
|
||||||
icon = 'icons/mob/mob.dmi'//
|
icon = 'icons/mob/pai.dmi'
|
||||||
icon_state = "shadow"
|
icon_state = "repairbot"
|
||||||
|
|
||||||
robot_talk_understand = 0
|
robot_talk_understand = 0
|
||||||
emote_type = 2 // pAIs emotes are heard, not seen, so they can be seen through a container (eg. person)
|
emote_type = 2 // pAIs emotes are heard, not seen, so they can be seen through a container (eg. person)
|
||||||
|
small = 1
|
||||||
|
pass_flags = 1
|
||||||
|
|
||||||
var/network = "SS13"
|
var/network = "SS13"
|
||||||
var/obj/machinery/camera/current = null
|
var/obj/machinery/camera/current = null
|
||||||
@@ -15,10 +17,21 @@
|
|||||||
var/obj/item/device/paicard/card // The card we inhabit
|
var/obj/item/device/paicard/card // The card we inhabit
|
||||||
var/obj/item/device/radio/radio // Our primary radio
|
var/obj/item/device/radio/radio // Our primary radio
|
||||||
|
|
||||||
var/speakStatement = "states"
|
var/chassis = "repairbot" // A record of your chosen chassis.
|
||||||
var/speakExclamation = "declares"
|
var/global/list/possible_chassis = list(
|
||||||
var/speakQuery = "queries"
|
"Drone" = "repairbot",
|
||||||
|
"Cat" = "cat",
|
||||||
|
"Mouse" = "mouse",
|
||||||
|
"Monkey" = "monkey"
|
||||||
|
)
|
||||||
|
|
||||||
|
var/global/list/possible_say_verbs = list(
|
||||||
|
"Robotic" = list("states","declares","queries"),
|
||||||
|
"Natural" = list("says","yells","asks"),
|
||||||
|
"Beep" = list("beeps","beeps loudly","boops"),
|
||||||
|
"Chirp" = list("chirps","chirrups","cheeps"),
|
||||||
|
"Feline" = list("purrs","yowls","meows")
|
||||||
|
)
|
||||||
|
|
||||||
var/obj/item/weapon/pai_cable/cable // The cable we produce and use when door or camera jacking
|
var/obj/item/weapon/pai_cable/cable // The cable we produce and use when door or camera jacking
|
||||||
|
|
||||||
@@ -54,6 +67,7 @@
|
|||||||
|
|
||||||
|
|
||||||
/mob/living/silicon/pai/New(var/obj/item/device/paicard)
|
/mob/living/silicon/pai/New(var/obj/item/device/paicard)
|
||||||
|
|
||||||
canmove = 0
|
canmove = 0
|
||||||
src.loc = paicard
|
src.loc = paicard
|
||||||
card = paicard
|
card = paicard
|
||||||
@@ -68,6 +82,10 @@
|
|||||||
add_language("Tradeband", 1)
|
add_language("Tradeband", 1)
|
||||||
add_language("Gutter", 1)
|
add_language("Gutter", 1)
|
||||||
|
|
||||||
|
verbs += /mob/living/silicon/pai/proc/fold_out
|
||||||
|
verbs += /mob/living/silicon/pai/proc/choose_chassis
|
||||||
|
verbs += /mob/living/silicon/pai/proc/choose_verbs
|
||||||
|
|
||||||
//PDA
|
//PDA
|
||||||
pda = new(src)
|
pda = new(src)
|
||||||
spawn(5)
|
spawn(5)
|
||||||
@@ -113,7 +131,9 @@
|
|||||||
return 0
|
return 0
|
||||||
|
|
||||||
/mob/living/silicon/pai/restrained()
|
/mob/living/silicon/pai/restrained()
|
||||||
|
if(istype(src.loc,/obj/item/device/paicard))
|
||||||
return 0
|
return 0
|
||||||
|
..()
|
||||||
|
|
||||||
/mob/living/silicon/pai/emp_act(severity)
|
/mob/living/silicon/pai/emp_act(severity)
|
||||||
// Silence for 2 minutes
|
// Silence for 2 minutes
|
||||||
@@ -231,7 +251,6 @@
|
|||||||
src.reset_view(C)
|
src.reset_view(C)
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
|
||||||
/mob/living/silicon/pai/cancel_camera()
|
/mob/living/silicon/pai/cancel_camera()
|
||||||
set category = "pAI Commands"
|
set category = "pAI Commands"
|
||||||
set name = "Cancel Camera View"
|
set name = "Cancel Camera View"
|
||||||
@@ -275,3 +294,144 @@
|
|||||||
card.setPersonality(pai)
|
card.setPersonality(pai)
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// Procs/code after this point is used to convert the stationary pai item into a
|
||||||
|
// mobile pai mob. This also includes handling some of the general shit that can occur
|
||||||
|
// to it. Really this deserves its own file, but for the moment it can sit here. ~ Z
|
||||||
|
|
||||||
|
/mob/living/silicon/pai/proc/fold_out()
|
||||||
|
set category = "pAI Commands"
|
||||||
|
set name = "Unfold Chassis"
|
||||||
|
|
||||||
|
if(stat || sleeping || paralysis || weakened)
|
||||||
|
return
|
||||||
|
|
||||||
|
if(src.loc != card)
|
||||||
|
return
|
||||||
|
|
||||||
|
if(world.time <= last_special)
|
||||||
|
return
|
||||||
|
|
||||||
|
last_special = world.time + 100
|
||||||
|
verbs -= /mob/living/silicon/pai/proc/fold_out
|
||||||
|
verbs += /mob/living/silicon/pai/proc/fold_up
|
||||||
|
|
||||||
|
var/turf/T = get_turf(src)
|
||||||
|
if(istype(T)) T.visible_message("<b>[src]</b> folds outwards, expanding into a mobile form.")
|
||||||
|
canmove = 1
|
||||||
|
|
||||||
|
//I'm not sure how much of this is necessary, but I would rather avoid issues.
|
||||||
|
if(istype(card.loc,/mob))
|
||||||
|
var/mob/M = card.loc
|
||||||
|
M.drop_item(card)
|
||||||
|
|
||||||
|
src.client.perspective = EYE_PERSPECTIVE
|
||||||
|
src.client.eye = src
|
||||||
|
|
||||||
|
src.forceMove(get_turf(card))
|
||||||
|
card.forceMove(src)
|
||||||
|
|
||||||
|
/mob/living/silicon/pai/proc/fold_up()
|
||||||
|
set category = "pAI Commands"
|
||||||
|
set name = "Collapse Chassis"
|
||||||
|
|
||||||
|
if(stat || sleeping || paralysis || weakened)
|
||||||
|
return
|
||||||
|
|
||||||
|
if(src.loc == card)
|
||||||
|
return
|
||||||
|
|
||||||
|
if(world.time <= last_special)
|
||||||
|
return
|
||||||
|
|
||||||
|
close_up()
|
||||||
|
|
||||||
|
/mob/living/silicon/pai/proc/choose_chassis()
|
||||||
|
set category = "pAI Commands"
|
||||||
|
set name = "Choose Chassis"
|
||||||
|
|
||||||
|
var/choice
|
||||||
|
var/finalized = "No"
|
||||||
|
while(finalized == "No" && src.client)
|
||||||
|
|
||||||
|
choice = input(usr,"What would you like to use for your mobile chassis icon? This decision can only be made once.") as null|anything in possible_chassis
|
||||||
|
if(!choice) return
|
||||||
|
|
||||||
|
icon_state = possible_chassis[choice]
|
||||||
|
finalized = alert("Look at your sprite. Is this what you wish to use?",,"No","Yes")
|
||||||
|
|
||||||
|
chassis = possible_chassis[choice]
|
||||||
|
verbs -= /mob/living/silicon/pai/proc/choose_chassis
|
||||||
|
|
||||||
|
/mob/living/silicon/pai/proc/choose_verbs()
|
||||||
|
set category = "pAI Commands"
|
||||||
|
set name = "Choose Speech Verbs"
|
||||||
|
|
||||||
|
var/choice = input(usr,"What theme would you like to use for your speech verbs? This decision can only be made once.") as null|anything in possible_say_verbs
|
||||||
|
if(!choice) return
|
||||||
|
|
||||||
|
var/list/sayverbs = possible_say_verbs[choice]
|
||||||
|
speak_statement = sayverbs[1]
|
||||||
|
speak_exclamation = sayverbs[(sayverbs.len>1 ? 2 : sayverbs.len)]
|
||||||
|
speak_query = sayverbs[(sayverbs.len>2 ? 3 : sayverbs.len)]
|
||||||
|
|
||||||
|
verbs -= /mob/living/silicon/pai/proc/choose_verbs
|
||||||
|
|
||||||
|
/mob/living/silicon/pai/lay_down()
|
||||||
|
set name = "Rest"
|
||||||
|
set category = "IC"
|
||||||
|
|
||||||
|
if(istype(src.loc,/obj/item/device/paicard))
|
||||||
|
resting = 0
|
||||||
|
else
|
||||||
|
resting = !resting
|
||||||
|
icon_state = resting ? "[chassis]_rest" : "[chassis]"
|
||||||
|
src << "\blue You are now [resting ? "resting" : "getting up"]"
|
||||||
|
|
||||||
|
canmove = !resting
|
||||||
|
|
||||||
|
//Overriding this will stop a number of headaches down the track.
|
||||||
|
/mob/living/silicon/pai/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||||
|
if(W.force)
|
||||||
|
visible_message("<span class='danger'>[user.name] attacks [src] with [W]!</span>")
|
||||||
|
src.adjustBruteLoss(W.force)
|
||||||
|
src.updatehealth()
|
||||||
|
else
|
||||||
|
visible_message("<span class='warning'>[user.name] bonks [src] harmlessly with [W].</span>")
|
||||||
|
if(stat != 2) close_up()
|
||||||
|
return
|
||||||
|
|
||||||
|
/mob/living/silicon/pai/attack_hand(mob/user as mob)
|
||||||
|
visible_message("<span class='danger'>[user.name] boops [src] on the head.</span>")
|
||||||
|
close_up()
|
||||||
|
|
||||||
|
//I'm not sure how much of this is necessary, but I would rather avoid issues.
|
||||||
|
/mob/living/silicon/pai/proc/close_up()
|
||||||
|
|
||||||
|
last_special = world.time + 100
|
||||||
|
|
||||||
|
verbs -= /mob/living/silicon/pai/proc/fold_up
|
||||||
|
verbs += /mob/living/silicon/pai/proc/fold_out
|
||||||
|
|
||||||
|
var/turf/T = get_turf(src)
|
||||||
|
if(istype(T)) T.visible_message("<b>[src]</b> neatly folds inwards, compacting down to a rectangular card.")
|
||||||
|
|
||||||
|
src.stop_pulling()
|
||||||
|
src.client.perspective = EYE_PERSPECTIVE
|
||||||
|
src.client.eye = card
|
||||||
|
|
||||||
|
//This seems redundant but not including the forced loc setting messes the behavior up.
|
||||||
|
src.loc = card
|
||||||
|
card.loc = get_turf(card)
|
||||||
|
src.forceMove(card)
|
||||||
|
card.forceMove(card.loc)
|
||||||
|
canmove = 0
|
||||||
|
|
||||||
|
/mob/living/silicon/pai/start_pulling(var/atom/movable/AM)
|
||||||
|
|
||||||
|
if(istype(AM,/obj/item))
|
||||||
|
var/obj/item/O = AM
|
||||||
|
if(O.w_class == 1)
|
||||||
|
..()
|
||||||
|
else
|
||||||
|
src << "<span class='warning'>You are too small to pull that.</span>"
|
||||||
|
|||||||
@@ -528,14 +528,22 @@
|
|||||||
dat += {"<h2>Medical Analysis Suite</h2><hr>
|
dat += {"<h2>Medical Analysis Suite</h2><hr>
|
||||||
<h4>Host Bioscan</h4>
|
<h4>Host Bioscan</h4>
|
||||||
"}
|
"}
|
||||||
var/mob/living/M = src.loc
|
|
||||||
if(!istype(M, /mob/living))
|
var/mob/living/M
|
||||||
while (!istype(M, /mob/living))
|
//If we are not deployed, check the holder of the card.
|
||||||
M = M.loc
|
if(src.loc == card)
|
||||||
if(istype(M, /turf))
|
M = card.loc
|
||||||
|
|
||||||
|
//If we are deployed or the card is not held, check the first living mob in our turf.
|
||||||
|
if(!M || !istype(M))
|
||||||
|
var/turf/T = get_turf(src)
|
||||||
|
M = locate(/mob/living/) in T.contents
|
||||||
|
|
||||||
|
if(!M || !istype(M))
|
||||||
src.temp = "Error: No biological host found. <br>"
|
src.temp = "Error: No biological host found. <br>"
|
||||||
src.subscreen = 0
|
src.subscreen = 0
|
||||||
return dat
|
return dat
|
||||||
|
|
||||||
dat += {"<b>Bioscan Results for [M]</b>: <br>
|
dat += {"<b>Bioscan Results for [M]</b>: <br>
|
||||||
Overall Status: [M.stat > 1 ? "dead" : "[M.health]% healthy"] <br><br>
|
Overall Status: [M.stat > 1 ? "dead" : "[M.health]% healthy"] <br><br>
|
||||||
|
|
||||||
|
|||||||
@@ -317,10 +317,10 @@
|
|||||||
if (!yes || ( \
|
if (!yes || ( \
|
||||||
!istype(AM,/obj/machinery/door) && \
|
!istype(AM,/obj/machinery/door) && \
|
||||||
!istype(AM,/obj/machinery/recharge_station) && \
|
!istype(AM,/obj/machinery/recharge_station) && \
|
||||||
!istype(AM,/obj/machinery/disposal/deliveryChute && \
|
!istype(AM,/obj/machinery/disposal/deliveryChute) && \
|
||||||
!istype(AM,/obj/machinery/teleport/hub) && \
|
!istype(AM,/obj/machinery/teleport/hub) && \
|
||||||
!istype(AM,/obj/effect/portal)
|
!istype(AM,/obj/effect/portal)
|
||||||
))) return
|
)) return
|
||||||
..()
|
..()
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
@@ -56,8 +56,13 @@
|
|||||||
modules += O
|
modules += O
|
||||||
|
|
||||||
/obj/item/weapon/robot_module/proc/add_languages(var/mob/living/silicon/robot/R)
|
/obj/item/weapon/robot_module/proc/add_languages(var/mob/living/silicon/robot/R)
|
||||||
R.add_language("Tradeband", 1)
|
//full set of languages
|
||||||
R.add_language("Sol Common", 1)
|
R.add_language("Sol Common", 1)
|
||||||
|
R.add_language("Tradeband", 1)
|
||||||
|
R.add_language("Sinta'unathi", 0)
|
||||||
|
R.add_language("Siik'maas", 0)
|
||||||
|
R.add_language("Siik'tajr", 0)
|
||||||
|
R.add_language("Skrellian", 0)
|
||||||
R.add_language("Gutter", 0)
|
R.add_language("Gutter", 0)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -2,11 +2,11 @@
|
|||||||
var/ending = copytext(text, length(text))
|
var/ending = copytext(text, length(text))
|
||||||
|
|
||||||
if (ending == "?")
|
if (ending == "?")
|
||||||
return "queries"
|
return speak_query
|
||||||
else if (ending == "!")
|
else if (ending == "!")
|
||||||
return "declares"
|
return speak_exclamation
|
||||||
|
|
||||||
return "states"
|
return speak_statement
|
||||||
|
|
||||||
#define IS_AI 1
|
#define IS_AI 1
|
||||||
#define IS_ROBOT 2
|
#define IS_ROBOT 2
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
/mob/living/silicon/say_understands(var/other,var/datum/language/speaking = null)
|
/mob/living/silicon/say_understands(var/other,var/datum/language/speaking = null)
|
||||||
//These only pertain to common. Languages are handled by mob/say_understands()
|
//These only pertain to common. Languages are handled by mob/say_understands()
|
||||||
if (!speaking)
|
if (!speaking)
|
||||||
if (istype(other, /mob/living/carbon/human))
|
if (istype(other, /mob/living/carbon))
|
||||||
return 1
|
return 1
|
||||||
if (istype(other, /mob/living/silicon))
|
if (istype(other, /mob/living/silicon))
|
||||||
return 1
|
return 1
|
||||||
@@ -85,14 +85,14 @@
|
|||||||
if("department")
|
if("department")
|
||||||
switch(bot_type)
|
switch(bot_type)
|
||||||
if(IS_AI)
|
if(IS_AI)
|
||||||
AI.holopad_talk(message)
|
return AI.holopad_talk(message)
|
||||||
if(IS_ROBOT)
|
if(IS_ROBOT)
|
||||||
log_say("[key_name(src)] : [message]")
|
log_say("[key_name(src)] : [message]")
|
||||||
R.radio.talk_into(src,message,message_mode,verb,speaking)
|
R.radio.talk_into(src,message,message_mode,verb,speaking)
|
||||||
if(IS_PAI)
|
if(IS_PAI)
|
||||||
log_say("[key_name(src)] : [message]")
|
log_say("[key_name(src)] : [message]")
|
||||||
P.radio.talk_into(src,message,message_mode,verb,speaking)
|
P.radio.talk_into(src,message,message_mode,verb,speaking)
|
||||||
return
|
return 1
|
||||||
|
|
||||||
if("binary")
|
if("binary")
|
||||||
switch(bot_type)
|
switch(bot_type)
|
||||||
@@ -105,12 +105,13 @@
|
|||||||
return
|
return
|
||||||
|
|
||||||
robot_talk(message)
|
robot_talk(message)
|
||||||
return
|
return 1
|
||||||
if("general")
|
if("general")
|
||||||
switch(bot_type)
|
switch(bot_type)
|
||||||
if(IS_AI)
|
if(IS_AI)
|
||||||
if (AI.aiRadio.disabledAi)
|
if (AI.aiRadio.disabledAi)
|
||||||
src << "\red System Error - Transceiver Disabled"
|
src << "\red System Error - Transceiver Disabled"
|
||||||
|
return
|
||||||
else
|
else
|
||||||
log_say("[key_name(src)] : [message]")
|
log_say("[key_name(src)] : [message]")
|
||||||
AI.aiRadio.talk_into(src,message,null,verb,speaking)
|
AI.aiRadio.talk_into(src,message,null,verb,speaking)
|
||||||
@@ -120,7 +121,7 @@
|
|||||||
if(IS_PAI)
|
if(IS_PAI)
|
||||||
log_say("[key_name(src)] : [message]")
|
log_say("[key_name(src)] : [message]")
|
||||||
P.radio.talk_into(src,message,null,verb,speaking)
|
P.radio.talk_into(src,message,null,verb,speaking)
|
||||||
return
|
return 1
|
||||||
|
|
||||||
else
|
else
|
||||||
if(message_mode && message_mode in radiochannels)
|
if(message_mode && message_mode in radiochannels)
|
||||||
@@ -128,6 +129,7 @@
|
|||||||
if(IS_AI)
|
if(IS_AI)
|
||||||
if (AI.aiRadio.disabledAi)
|
if (AI.aiRadio.disabledAi)
|
||||||
src << "\red System Error - Transceiver Disabled"
|
src << "\red System Error - Transceiver Disabled"
|
||||||
|
return
|
||||||
else
|
else
|
||||||
log_say("[key_name(src)] : [message]")
|
log_say("[key_name(src)] : [message]")
|
||||||
AI.aiRadio.talk_into(src,message,message_mode,verb,speaking)
|
AI.aiRadio.talk_into(src,message,message_mode,verb,speaking)
|
||||||
@@ -137,7 +139,7 @@
|
|||||||
if(IS_PAI)
|
if(IS_PAI)
|
||||||
log_say("[key_name(src)] : [message]")
|
log_say("[key_name(src)] : [message]")
|
||||||
P.radio.talk_into(src,message,message_mode,verb,speaking)
|
P.radio.talk_into(src,message,message_mode,verb,speaking)
|
||||||
return
|
return 1
|
||||||
|
|
||||||
return ..(message,speaking,verb)
|
return ..(message,speaking,verb)
|
||||||
|
|
||||||
@@ -173,6 +175,7 @@
|
|||||||
else
|
else
|
||||||
src << "No holopad connected."
|
src << "No holopad connected."
|
||||||
return
|
return
|
||||||
|
return 1
|
||||||
|
|
||||||
/mob/living/proc/robot_talk(var/message)
|
/mob/living/proc/robot_talk(var/message)
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,11 @@
|
|||||||
var/list/hud_list[9]
|
var/list/hud_list[9]
|
||||||
var/list/speech_synthesizer_langs = list() //which languages can be vocalized by the speech synthesizer
|
var/list/speech_synthesizer_langs = list() //which languages can be vocalized by the speech synthesizer
|
||||||
|
|
||||||
|
//Used in say.dm.
|
||||||
|
var/speak_statement = "states"
|
||||||
|
var/speak_exclamation = "declares"
|
||||||
|
var/speak_query = "queries"
|
||||||
|
|
||||||
/mob/living/silicon/proc/show_laws()
|
/mob/living/silicon/proc/show_laws()
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
@@ -74,7 +74,7 @@
|
|||||||
return 1
|
return 1
|
||||||
|
|
||||||
//Universal speak makes everything understandable, for obvious reasons.
|
//Universal speak makes everything understandable, for obvious reasons.
|
||||||
else if(src.universal_speak || src.universal_understand)
|
else if((src.universal_speak || src.universal_understand) && !(speaking.flags & UNTRANSLATABLE))
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
//Languages are handled after.
|
//Languages are handled after.
|
||||||
|
|||||||
@@ -36,12 +36,11 @@ nanoui is used to open and update nano browser uis
|
|||||||
var/list/stylesheets = list()
|
var/list/stylesheets = list()
|
||||||
// the list of javascript scripts to use for this ui
|
// the list of javascript scripts to use for this ui
|
||||||
var/list/scripts = list()
|
var/list/scripts = list()
|
||||||
// the list of templates to use with this ui (usually just one)
|
// a list of templates which can be used with this ui
|
||||||
var/templates[0]
|
var/templates[0]
|
||||||
// the body content for this ui, do not change unless you know what you're doing
|
// the layout key for this ui (this is used on the frontend, leave it as "default" unless you know what you're doing)
|
||||||
// the #mainTemplate div will contain the compiled "main" template html
|
var/layout_key = "default"
|
||||||
var/content = "<div id='mainTemplate'></div>"
|
// the default state to use for this ui (this is used on the frontend, leave it as "default" unless you know what you're doing)
|
||||||
// the title of this ui
|
|
||||||
var/state_key = "default"
|
var/state_key = "default"
|
||||||
// initial data, containing the full data structure, must be sent to the ui (the data structure cannot be extended later on)
|
// initial data, containing the full data structure, must be sent to the ui (the data structure cannot be extended later on)
|
||||||
var/list/initial_data[0]
|
var/list/initial_data[0]
|
||||||
@@ -59,7 +58,7 @@ nanoui is used to open and update nano browser uis
|
|||||||
* @param nuser /mob The mob who has opened/owns this ui
|
* @param nuser /mob The mob who has opened/owns this ui
|
||||||
* @param nsrc_object /obj|/mob The obj or mob which this ui belongs to
|
* @param nsrc_object /obj|/mob The obj or mob which this ui belongs to
|
||||||
* @param nui_key string A string key to use for this ui. Allows for multiple unique uis on one src_oject
|
* @param nui_key string A string key to use for this ui. Allows for multiple unique uis on one src_oject
|
||||||
* @param ntemplate string The name of the template file from /nano/templates (e.g. "my_template.tmpl")
|
* @param ntemplate string The filename of the template file from /nano/templates (e.g. "my_template.tmpl")
|
||||||
* @param ntitle string The title of this ui
|
* @param ntitle string The title of this ui
|
||||||
* @param nwidth int the width of the ui window
|
* @param nwidth int the width of the ui window
|
||||||
* @param nheight int the height of the ui window
|
* @param nheight int the height of the ui window
|
||||||
@@ -67,14 +66,14 @@ nanoui is used to open and update nano browser uis
|
|||||||
*
|
*
|
||||||
* @return /nanoui new nanoui object
|
* @return /nanoui new nanoui object
|
||||||
*/
|
*/
|
||||||
/datum/nanoui/New(nuser, nsrc_object, nui_key, ntemplate, ntitle = 0, nwidth = 0, nheight = 0, var/atom/nref = null)
|
/datum/nanoui/New(nuser, nsrc_object, nui_key, ntemplate_filename, ntitle = 0, nwidth = 0, nheight = 0, var/atom/nref = null)
|
||||||
user = nuser
|
user = nuser
|
||||||
src_object = nsrc_object
|
src_object = nsrc_object
|
||||||
ui_key = nui_key
|
ui_key = nui_key
|
||||||
window_id = "[ui_key]\ref[src_object]"
|
window_id = "[ui_key]\ref[src_object]"
|
||||||
|
|
||||||
// Add the passed template as the 'main' template, this is required
|
// add the passed template filename as the "main" template, this is required
|
||||||
add_template("main", ntemplate)
|
add_template("main", ntemplate_filename)
|
||||||
|
|
||||||
if (ntitle)
|
if (ntitle)
|
||||||
title = ntitle
|
title = ntitle
|
||||||
@@ -99,8 +98,8 @@ nanoui is used to open and update nano browser uis
|
|||||||
add_script("nano_state_manager.js") // The NanoStateManager JS, it handles updates from the server and passes data to the current state
|
add_script("nano_state_manager.js") // The NanoStateManager JS, it handles updates from the server and passes data to the current state
|
||||||
add_script("nano_state.js") // The NanoState JS, this is the base state which all states must inherit from
|
add_script("nano_state.js") // The NanoState JS, this is the base state which all states must inherit from
|
||||||
add_script("nano_state_default.js") // The NanoStateDefault JS, this is the "default" state (used by all UIs by default), which inherits from NanoState
|
add_script("nano_state_default.js") // The NanoStateDefault JS, this is the "default" state (used by all UIs by default), which inherits from NanoState
|
||||||
add_script("nano_base_callbacks.js") // The NanoBaseCallbacks JS, this is used to set up (before and after update) callbacks which are common to all templates
|
add_script("nano_base_callbacks.js") // The NanoBaseCallbacks JS, this is used to set up (before and after update) callbacks which are common to all UIs
|
||||||
add_script("nano_base_helpers.js") // The NanoBaseHelpers JS, this is used to set up template helpers which are common to all templates
|
add_script("nano_base_helpers.js") // The NanoBaseHelpers JS, this is used to set up template helpers which are common to all UIs
|
||||||
add_stylesheet("shared.css") // this CSS sheet is common to all UIs
|
add_stylesheet("shared.css") // this CSS sheet is common to all UIs
|
||||||
add_stylesheet("icons.css") // this CSS sheet is common to all UIs
|
add_stylesheet("icons.css") // this CSS sheet is common to all UIs
|
||||||
|
|
||||||
@@ -224,6 +223,7 @@ nanoui is used to open and update nano browser uis
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a CSS stylesheet to this UI
|
* Add a CSS stylesheet to this UI
|
||||||
|
* These must be added before the UI has been opened, adding after that will have no effect
|
||||||
*
|
*
|
||||||
* @param file string The name of the CSS file from /nano/css (e.g. "my_style.css")
|
* @param file string The name of the CSS file from /nano/css (e.g. "my_style.css")
|
||||||
*
|
*
|
||||||
@@ -234,6 +234,7 @@ nanoui is used to open and update nano browser uis
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a JavsScript script to this UI
|
* Add a JavsScript script to this UI
|
||||||
|
* These must be added before the UI has been opened, adding after that will have no effect
|
||||||
*
|
*
|
||||||
* @param file string The name of the JavaScript file from /nano/js (e.g. "my_script.js")
|
* @param file string The name of the JavaScript file from /nano/js (e.g. "my_script.js")
|
||||||
*
|
*
|
||||||
@@ -243,35 +244,36 @@ nanoui is used to open and update nano browser uis
|
|||||||
scripts.Add(file)
|
scripts.Add(file)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a template to this UI
|
* Add a template for this UI
|
||||||
* Templates are combined with the data sent to the UI to create the rendered view
|
* Templates are combined with the data sent to the UI to create the rendered view
|
||||||
* Each template needs a div in ui.content to contain the rendered content.
|
* These must be added before the UI has been opened, adding after that will have no effect
|
||||||
* The div format is '<div id='<templateKey>Template'></div>' where <templateKey> is replaced with the templater's key.
|
|
||||||
* All UIs are set up by default to use a 'main' template, so only use this proc if you want to add advanced functionality.
|
|
||||||
*
|
*
|
||||||
* @param key string The key name for this template, used to identify the div to render this template into ('<div id='<templateKey>Template'></div>')
|
* @param key string The key which is used to reference this template in the frontend
|
||||||
* @param file string The name of the template file from /nano/templates (e.g. "my_template.tmpl")
|
* @param filename string The name of the template file from /nano/templates (e.g. "my_template.tmpl")
|
||||||
*
|
*
|
||||||
* @return nothing
|
* @return nothing
|
||||||
*/
|
*/
|
||||||
/datum/nanoui/proc/add_template(key, file)
|
/datum/nanoui/proc/add_template(key, filename)
|
||||||
templates[key] = file
|
templates[key] = filename
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the HTML content of the UI
|
* Set the layout key for use in the frontend Javascript
|
||||||
* This should only really be used to add more template divs (see the add_template() proc)
|
* The layout key is the basic layout key for the page
|
||||||
|
* Two files are loaded on the client based on the layout key varable:
|
||||||
|
* -> a template in /nano/templates with the filename "layout_<layout_key>.tmpl
|
||||||
|
* -> a CSS stylesheet in /nano/css with the filename "layout_<layout_key>.css
|
||||||
*
|
*
|
||||||
* @param ncontent string The new HTML content for this UI
|
* @param nlayout string The layout key to use
|
||||||
*
|
*
|
||||||
* @return nothing
|
* @return nothing
|
||||||
*/
|
*/
|
||||||
/datum/nanoui/proc/set_content(ncontent)
|
/datum/nanoui/proc/set_layout_key(nlayout_key)
|
||||||
content = ncontent
|
layout_key = lowertext(nlayout_key)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the state key for use in the frontend Javascript
|
* Set the state key for use in the frontend Javascript
|
||||||
*
|
*
|
||||||
* @param nstate_key string The new HTML content for this UI
|
* @param nstate_key string The key of the state to use
|
||||||
*
|
*
|
||||||
* @return nothing
|
* @return nothing
|
||||||
*/
|
*/
|
||||||
@@ -289,11 +291,16 @@ nanoui is used to open and update nano browser uis
|
|||||||
on_close_logic = state
|
on_close_logic = state
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the HTML header content for this UI
|
* Return the HTML for this UI
|
||||||
*
|
*
|
||||||
* @return string HTML header content
|
* @return string HTML for the UI
|
||||||
*/
|
*/
|
||||||
/datum/nanoui/proc/get_header()
|
/datum/nanoui/proc/get_html()
|
||||||
|
|
||||||
|
// before the UI opens, add the layout files based on the layout key
|
||||||
|
add_stylesheet("layout_[layout_key].css")
|
||||||
|
add_template("layout", "layout_[layout_key].tmpl")
|
||||||
|
|
||||||
var/head_content = ""
|
var/head_content = ""
|
||||||
|
|
||||||
for (var/filename in scripts)
|
for (var/filename in scripts)
|
||||||
@@ -302,20 +309,17 @@ nanoui is used to open and update nano browser uis
|
|||||||
for (var/filename in stylesheets)
|
for (var/filename in stylesheets)
|
||||||
head_content += "<link rel='stylesheet' type='text/css' href='[filename]'> "
|
head_content += "<link rel='stylesheet' type='text/css' href='[filename]'> "
|
||||||
|
|
||||||
var/templatel_data[0]
|
|
||||||
for (var/key in templates)
|
|
||||||
templatel_data[key] = templates[key];
|
|
||||||
|
|
||||||
var/template_data_json = "{}" // An empty JSON object
|
var/template_data_json = "{}" // An empty JSON object
|
||||||
if (templatel_data.len > 0)
|
if (templates.len > 0)
|
||||||
template_data_json = list2json(templatel_data)
|
template_data_json = list2json(templates)
|
||||||
|
|
||||||
var/list/send_data = get_send_data(initial_data)
|
var/list/send_data = get_send_data(initial_data)
|
||||||
var/initial_data_json = list2json(send_data)
|
var/initial_data_json = list2json(send_data)
|
||||||
|
|
||||||
var/url_parameters_json = list2json(list("src" = "\ref[src]"))
|
var/url_parameters_json = list2json(list("src" = "\ref[src]"))
|
||||||
|
|
||||||
return {"<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
return {"
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||||
<html>
|
<html>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
||||||
<head>
|
<head>
|
||||||
@@ -332,11 +336,9 @@ nanoui is used to open and update nano browser uis
|
|||||||
</script>
|
</script>
|
||||||
[head_content]
|
[head_content]
|
||||||
</head>
|
</head>
|
||||||
<body scroll=auto data-url-parameters='[url_parameters_json]' data-template-data='[template_data_json]' data-initial-data='[initial_data_json]'>
|
<body scroll=auto data-template-data='[template_data_json]' data-url-parameters='[url_parameters_json]' data-initial-data='[initial_data_json]'>
|
||||||
<div id='uiWrapper'>
|
<div id='uiLayout'>
|
||||||
[title ? "<div id='uiTitleWrapper'><div id='uiStatusIcon' class='icon24 uiStatusGood'></div><div id='uiTitle'>[title]</div><div id='uiTitleFluff'></div></div>" : ""]
|
</div>
|
||||||
<div id='uiContent'>
|
|
||||||
<div id='uiLoadingNotice'>Initiating...</div>
|
|
||||||
<noscript>
|
<noscript>
|
||||||
<div id='uiNoScript'>
|
<div id='uiNoScript'>
|
||||||
<h2>JAVASCRIPT REQUIRED</h2>
|
<h2>JAVASCRIPT REQUIRED</h2>
|
||||||
@@ -344,31 +346,8 @@ nanoui is used to open and update nano browser uis
|
|||||||
Enable Javascript and then open this UI again.</p>
|
Enable Javascript and then open this UI again.</p>
|
||||||
</div>
|
</div>
|
||||||
</noscript>
|
</noscript>
|
||||||
"}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the HTML footer content for this UI
|
|
||||||
*
|
|
||||||
* @return string HTML footer content
|
|
||||||
*/
|
|
||||||
/datum/nanoui/proc/get_footer()
|
|
||||||
|
|
||||||
return {"
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</body>
|
</body>
|
||||||
</html>"}
|
</html>
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the HTML for this UI
|
|
||||||
*
|
|
||||||
* @return string HTML for the UI
|
|
||||||
*/
|
|
||||||
/datum/nanoui/proc/get_html()
|
|
||||||
return {"
|
|
||||||
[get_header()]
|
|
||||||
[content]
|
|
||||||
[get_footer()]
|
|
||||||
"}
|
"}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -377,6 +356,7 @@ nanoui is used to open and update nano browser uis
|
|||||||
* @return nothing
|
* @return nothing
|
||||||
*/
|
*/
|
||||||
/datum/nanoui/proc/open()
|
/datum/nanoui/proc/open()
|
||||||
|
|
||||||
var/window_size = ""
|
var/window_size = ""
|
||||||
if (width && height)
|
if (width && height)
|
||||||
window_size = "size=[width]x[height];"
|
window_size = "size=[width]x[height];"
|
||||||
|
|||||||
@@ -394,7 +394,7 @@ Note that amputating the affected organ does in fact remove the infection from t
|
|||||||
|
|
||||||
if(germ_level >= INFECTION_LEVEL_ONE)
|
if(germ_level >= INFECTION_LEVEL_ONE)
|
||||||
//having an infection raises your body temperature
|
//having an infection raises your body temperature
|
||||||
var/fever_temperature = (owner.species.heat_level_1 - owner.species.body_temperature - 1)* min(germ_level/INFECTION_LEVEL_THREE, 1) + owner.species.body_temperature
|
var/fever_temperature = (owner.species.heat_level_1 - owner.species.body_temperature - 1)* min(germ_level/(INFECTION_LEVEL_ONE+300), 1) + owner.species.body_temperature
|
||||||
if (owner.bodytemperature < fever_temperature)
|
if (owner.bodytemperature < fever_temperature)
|
||||||
//world << "fever: [owner.bodytemperature] < [fever_temperature], raising temperature."
|
//world << "fever: [owner.bodytemperature] < [fever_temperature], raising temperature."
|
||||||
owner.bodytemperature++
|
owner.bodytemperature++
|
||||||
|
|||||||
@@ -308,7 +308,7 @@
|
|||||||
return
|
return
|
||||||
|
|
||||||
else
|
else
|
||||||
user << "<span class='notice'>You transfer [MAXCOIL - src.amount ] length\s of cable from one coil to the other.</span>"
|
user << "<span class='notice'>You transfer [MAXCOIL - C.amount ] length\s of cable from one coil to the other.</span>"
|
||||||
src.amount -= (MAXCOIL-C.amount)
|
src.amount -= (MAXCOIL-C.amount)
|
||||||
src.updateicon()
|
src.updateicon()
|
||||||
src.update_wclass()
|
src.update_wclass()
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
anchored = 0
|
anchored = 0
|
||||||
density = 1
|
density = 1
|
||||||
req_access = list(access_engine_equip)
|
req_access = list(access_engine_equip)
|
||||||
|
var/id = null
|
||||||
|
|
||||||
use_power = 0
|
use_power = 0
|
||||||
idle_power_usage = 10
|
idle_power_usage = 10
|
||||||
@@ -51,9 +52,11 @@
|
|||||||
else
|
else
|
||||||
icon_state = "emitter"
|
icon_state = "emitter"
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/power/emitter/attack_hand(mob/user as mob)
|
/obj/machinery/power/emitter/attack_hand(mob/user as mob)
|
||||||
src.add_fingerprint(user)
|
src.add_fingerprint(user)
|
||||||
|
activate(user)
|
||||||
|
|
||||||
|
/obj/machinery/power/emitter/proc/activate(mob/user as mob)
|
||||||
if(state == 2)
|
if(state == 2)
|
||||||
if(!powernet)
|
if(!powernet)
|
||||||
user << "The emitter isn't connected to a wire."
|
user << "The emitter isn't connected to a wire."
|
||||||
|
|||||||
@@ -424,6 +424,17 @@
|
|||||||
mode = SYRINGE_INJECT
|
mode = SYRINGE_INJECT
|
||||||
update_icon()
|
update_icon()
|
||||||
|
|
||||||
|
/obj/item/weapon/reagent_containers/syringe/drugs
|
||||||
|
name = "Syringe (drugs)"
|
||||||
|
desc = "Contains aggressive drugs meant for torture."
|
||||||
|
New()
|
||||||
|
..()
|
||||||
|
reagents.add_reagent("space_drugs", 5)
|
||||||
|
reagents.add_reagent("mindbreaker", 5)
|
||||||
|
reagents.add_reagent("cryptobiolin", 5)
|
||||||
|
mode = SYRINGE_INJECT
|
||||||
|
update_icon()
|
||||||
|
|
||||||
/obj/item/weapon/reagent_containers/ld50_syringe/choral
|
/obj/item/weapon/reagent_containers/ld50_syringe/choral
|
||||||
New()
|
New()
|
||||||
..()
|
..()
|
||||||
|
|||||||
@@ -85,6 +85,7 @@
|
|||||||
harvesting = 0
|
harvesting = 0
|
||||||
cur_artifact.anchored = 0
|
cur_artifact.anchored = 0
|
||||||
cur_artifact.being_used = 0
|
cur_artifact.being_used = 0
|
||||||
|
cur_artifact = null
|
||||||
src.visible_message("<b>[name]</b> states, \"Battery is full.\"")
|
src.visible_message("<b>[name]</b> states, \"Battery is full.\"")
|
||||||
icon_state = "incubator"
|
icon_state = "incubator"
|
||||||
|
|
||||||
@@ -140,27 +141,13 @@
|
|||||||
src.visible_message("<b>[src]</b> states, \"Cannot harvest. Source already being harvested.\"")
|
src.visible_message("<b>[src]</b> states, \"Cannot harvest. Source already being harvested.\"")
|
||||||
|
|
||||||
else
|
else
|
||||||
var/mundane = 0
|
if(articount > 1)
|
||||||
for(var/obj/O in get_turf(owned_scanner))
|
state("Cannot harvest. Too many artifacts on the pad.")
|
||||||
if(O.invisibility)
|
else if(analysed)
|
||||||
continue
|
|
||||||
if(!istype(O, /obj/machinery/artifact) && !istype(O, /obj/machinery/artifact_scanpad))
|
|
||||||
mundane++
|
|
||||||
break
|
|
||||||
for(var/mob/O in get_turf(owned_scanner))
|
|
||||||
if(O.invisibility)
|
|
||||||
continue
|
|
||||||
mundane++
|
|
||||||
break
|
|
||||||
|
|
||||||
if(articount > 1 || mundane)
|
|
||||||
var/message = "<b>[src]</b> states, \"Cannot harvest. Too many artifacts on the pad.\""
|
|
||||||
src.visible_message(message)
|
|
||||||
else
|
|
||||||
cur_artifact = analysed
|
cur_artifact = analysed
|
||||||
|
|
||||||
//if both effects are active, we can't harvest either
|
//if both effects are active, we can't harvest either
|
||||||
if(cur_artifact.my_effect.activated && cur_artifact.secondary_effect.activated)
|
if(cur_artifact.my_effect && cur_artifact.my_effect.activated && cur_artifact.secondary_effect.activated)
|
||||||
src.visible_message("<b>[src]</b> states, \"Cannot harvest. Source is emitting conflicting energy signatures.\"")
|
src.visible_message("<b>[src]</b> states, \"Cannot harvest. Source is emitting conflicting energy signatures.\"")
|
||||||
else if(!cur_artifact.my_effect.activated && !cur_artifact.secondary_effect.activated)
|
else if(!cur_artifact.my_effect.activated && !cur_artifact.secondary_effect.activated)
|
||||||
src.visible_message("<b>[src]</b> states, \"Cannot harvest. No energy emitting from source.\"")
|
src.visible_message("<b>[src]</b> states, \"Cannot harvest. No energy emitting from source.\"")
|
||||||
@@ -233,6 +220,7 @@
|
|||||||
harvesting = 0
|
harvesting = 0
|
||||||
cur_artifact.anchored = 0
|
cur_artifact.anchored = 0
|
||||||
cur_artifact.being_used = 0
|
cur_artifact.being_used = 0
|
||||||
|
cur_artifact = null
|
||||||
src.visible_message("<b>[name]</b> states, \"Energy harvesting interrupted.\"")
|
src.visible_message("<b>[name]</b> states, \"Energy harvesting interrupted.\"")
|
||||||
icon_state = "incubator"
|
icon_state = "incubator"
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,9 @@
|
|||||||
p = min(p, 100)
|
p = min(p, 100)
|
||||||
icon_state = "anobattery[round(p,25)]"
|
icon_state = "anobattery[round(p,25)]"
|
||||||
|
|
||||||
|
/obj/item/weapon/anobattery/proc/use_power(var/amount)
|
||||||
|
stored_charge = max(0, stored_charge - amount)
|
||||||
|
|
||||||
/obj/item/weapon/anodevice
|
/obj/item/weapon/anodevice
|
||||||
name = "Anomaly power utilizer"
|
name = "Anomaly power utilizer"
|
||||||
icon = 'icons/obj/xenoarchaeology.dmi'
|
icon = 'icons/obj/xenoarchaeology.dmi'
|
||||||
@@ -78,7 +81,7 @@
|
|||||||
|
|
||||||
/obj/item/weapon/anodevice/process()
|
/obj/item/weapon/anodevice/process()
|
||||||
if(activated)
|
if(activated)
|
||||||
if(inserted_battery && inserted_battery.battery_effect)
|
if(inserted_battery && inserted_battery.battery_effect && (inserted_battery.stored_charge > 0) )
|
||||||
//make sure the effect is active
|
//make sure the effect is active
|
||||||
if(!inserted_battery.battery_effect.activated)
|
if(!inserted_battery.battery_effect.activated)
|
||||||
inserted_battery.battery_effect.ToggleActivate(1)
|
inserted_battery.battery_effect.ToggleActivate(1)
|
||||||
@@ -106,20 +109,20 @@
|
|||||||
inserted_battery.battery_effect.DoEffectTouch(holder)
|
inserted_battery.battery_effect.DoEffectTouch(holder)
|
||||||
|
|
||||||
//consume power
|
//consume power
|
||||||
inserted_battery.stored_charge -= energy_consumed_on_touch
|
inserted_battery.use_power(energy_consumed_on_touch)
|
||||||
else
|
else
|
||||||
//consume power equal to time passed
|
//consume power equal to time passed
|
||||||
inserted_battery.stored_charge -= world.time - last_process
|
inserted_battery.use_power(world.time - last_process)
|
||||||
|
|
||||||
else if(inserted_battery.battery_effect.effect == EFFECT_PULSE)
|
else if(inserted_battery.battery_effect.effect == EFFECT_PULSE)
|
||||||
inserted_battery.battery_effect.chargelevel = inserted_battery.battery_effect.chargelevelmax
|
inserted_battery.battery_effect.chargelevel = inserted_battery.battery_effect.chargelevelmax
|
||||||
|
|
||||||
//consume power relative to the time the artifact takes to charge and the effect range
|
//consume power relative to the time the artifact takes to charge and the effect range
|
||||||
inserted_battery.stored_charge -= inserted_battery.battery_effect.effectrange * inserted_battery.battery_effect.effectrange * inserted_battery.battery_effect.chargelevelmax
|
inserted_battery.use_power(inserted_battery.battery_effect.effectrange * inserted_battery.battery_effect.effectrange * inserted_battery.battery_effect.chargelevelmax)
|
||||||
|
|
||||||
else
|
else
|
||||||
//consume power equal to time passed
|
//consume power equal to time passed
|
||||||
inserted_battery.stored_charge -= world.time - last_process
|
inserted_battery.use_power(world.time - last_process)
|
||||||
|
|
||||||
last_activation = world.time
|
last_activation = world.time
|
||||||
|
|
||||||
@@ -159,6 +162,7 @@
|
|||||||
//max 10 sec interval
|
//max 10 sec interval
|
||||||
interval = min(max(interval, 0), 100)
|
interval = min(max(interval, 0), 100)
|
||||||
if(href_list["startup"])
|
if(href_list["startup"])
|
||||||
|
if(inserted_battery && inserted_battery.battery_effect && (inserted_battery.stored_charge > 0) )
|
||||||
activated = 1
|
activated = 1
|
||||||
src.visible_message("\blue \icon[src] [src] whirrs.", "\icon[src]\blue You hear something whirr.")
|
src.visible_message("\blue \icon[src] [src] whirrs.", "\icon[src]\blue You hear something whirr.")
|
||||||
if(!inserted_battery.battery_effect.activated)
|
if(!inserted_battery.battery_effect.activated)
|
||||||
@@ -196,7 +200,7 @@
|
|||||||
|
|
||||||
if(activated && inserted_battery.battery_effect.effect == EFFECT_TOUCH && !isnull(inserted_battery))
|
if(activated && inserted_battery.battery_effect.effect == EFFECT_TOUCH && !isnull(inserted_battery))
|
||||||
inserted_battery.battery_effect.DoEffectTouch(M)
|
inserted_battery.battery_effect.DoEffectTouch(M)
|
||||||
inserted_battery.stored_charge -= energy_consumed_on_touch
|
inserted_battery.use_power(energy_consumed_on_touch)
|
||||||
user.visible_message("\blue [user] taps [M] with [src], and it shudders on contact.")
|
user.visible_message("\blue [user] taps [M] with [src], and it shudders on contact.")
|
||||||
else
|
else
|
||||||
user.visible_message("\blue [user] taps [M] with [src], but nothing happens.")
|
user.visible_message("\blue [user] taps [M] with [src], but nothing happens.")
|
||||||
|
|||||||
@@ -13,9 +13,7 @@
|
|||||||
var/last_scan_time = 0
|
var/last_scan_time = 0
|
||||||
var/scan_delay = 25
|
var/scan_delay = 25
|
||||||
|
|
||||||
/obj/item/device/ano_scanner/New()
|
/obj/item/device/ano_scanner/initialize()
|
||||||
..()
|
|
||||||
spawn(0)
|
|
||||||
scan()
|
scan()
|
||||||
|
|
||||||
/obj/item/device/ano_scanner/attack_self(var/mob/user as mob)
|
/obj/item/device/ano_scanner/attack_self(var/mob/user as mob)
|
||||||
@@ -23,12 +21,15 @@
|
|||||||
|
|
||||||
/obj/item/device/ano_scanner/interact(var/mob/user as mob)
|
/obj/item/device/ano_scanner/interact(var/mob/user as mob)
|
||||||
var/message = "Background radiation levels detected."
|
var/message = "Background radiation levels detected."
|
||||||
if(nearest_artifact_distance >= 0)
|
|
||||||
message = "Exotic energy detected on wavelength '[nearest_artifact_id]' in a radius of [nearest_artifact_distance]m"
|
|
||||||
user << "<span class='info'>[message]</span>"
|
|
||||||
if(world.time - last_scan_time >= scan_delay)
|
if(world.time - last_scan_time >= scan_delay)
|
||||||
spawn(0)
|
spawn(0)
|
||||||
scan()
|
scan()
|
||||||
|
if(nearest_artifact_distance >= 0)
|
||||||
|
message = "Exotic energy detected on wavelength '[nearest_artifact_id]' in a radius of [nearest_artifact_distance]m"
|
||||||
|
else
|
||||||
|
message = "Scanning array is recharging."
|
||||||
|
|
||||||
|
user << "<span class='info'>[message]</span>"
|
||||||
|
|
||||||
/obj/item/device/ano_scanner/proc/scan()
|
/obj/item/device/ano_scanner/proc/scan()
|
||||||
set background = 1
|
set background = 1
|
||||||
|
|||||||
@@ -753,6 +753,7 @@ var/list/RESTRICTED_CAMERA_NETWORKS = list( //Those networks can only be accesse
|
|||||||
#define RESTRICTED 2 // Language can only be accquired by spawning or an admin.
|
#define RESTRICTED 2 // Language can only be accquired by spawning or an admin.
|
||||||
#define NONVERBAL 4 // Language has a significant non-verbal component. Speech is garbled without line-of-sight
|
#define NONVERBAL 4 // Language has a significant non-verbal component. Speech is garbled without line-of-sight
|
||||||
#define SIGNLANG 8 // Language is completely non-verbal. Speech is displayed through emotes for those who can understand.
|
#define SIGNLANG 8 // Language is completely non-verbal. Speech is displayed through emotes for those who can understand.
|
||||||
|
#define UNTRANSLATABLE 16 // Language is not translated by universal_speak or universal_understand.
|
||||||
|
|
||||||
//Flags for zone sleeping
|
//Flags for zone sleeping
|
||||||
#define ZONE_ACTIVE 1
|
#define ZONE_ACTIVE 1
|
||||||
|
|||||||
BIN
icons/mob/pai.dmi
Normal file
BIN
icons/mob/pai.dmi
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 9.5 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 52 KiB |
1082
maps/tgstation2.dmm
1082
maps/tgstation2.dmm
File diff suppressed because it is too large
Load Diff
21
nano/css/layout_basic.css
Normal file
21
nano/css/layout_basic.css
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
body {
|
||||||
|
background: #272727 url(uiBasicBackground.png) 50% 0 repeat-x;
|
||||||
|
}
|
||||||
|
|
||||||
|
#uiContent {
|
||||||
|
clear: both;
|
||||||
|
padding: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#uiLoadingNotice {
|
||||||
|
position: relative;
|
||||||
|
background: url(uiNoticeBackground.jpg) 50% 50%;
|
||||||
|
color: #000000;
|
||||||
|
font-size: 14px;
|
||||||
|
font-style: italic;
|
||||||
|
font-weight: bold;
|
||||||
|
padding: 3px 4px 3px 4px;
|
||||||
|
margin: 4px 0 4px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
64
nano/css/layout_default.css
Normal file
64
nano/css/layout_default.css
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
body {
|
||||||
|
background: #272727 url(uiBackground.png) 50% 0 repeat-x;
|
||||||
|
}
|
||||||
|
|
||||||
|
#uiWrapper {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#uiTitleWrapper {
|
||||||
|
position: relative;
|
||||||
|
height: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#uiTitle {
|
||||||
|
position: absolute;
|
||||||
|
top: 6px;
|
||||||
|
left: 44px;
|
||||||
|
width: 66%;
|
||||||
|
overflow: hidden;
|
||||||
|
color: #E9C183;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#uiTitle.icon {
|
||||||
|
padding: 6px 8px 6px 42px;
|
||||||
|
background-position: 2px 50%;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
#uiTitleFluff {
|
||||||
|
position: absolute;
|
||||||
|
top: 4px;
|
||||||
|
right: 12px;
|
||||||
|
width: 42px;
|
||||||
|
height: 24px;
|
||||||
|
background: url(uiTitleFluff.png) 50% 50% no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
#uiStatusIcon {
|
||||||
|
position: absolute;
|
||||||
|
top: 4px;
|
||||||
|
left: 12px;
|
||||||
|
width: 24px;
|
||||||
|
height: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#uiContent {
|
||||||
|
clear: both;
|
||||||
|
padding: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#uiLoadingNotice {
|
||||||
|
position: relative;
|
||||||
|
background: url(uiNoticeBackground.jpg) 50% 50%;
|
||||||
|
color: #000000;
|
||||||
|
font-size: 14px;
|
||||||
|
font-style: italic;
|
||||||
|
font-weight: bold;
|
||||||
|
padding: 3px 4px 3px 4px;
|
||||||
|
margin: 4px 0 4px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -5,160 +5,9 @@ body {
|
|||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
line-height: 170%;
|
line-height: 170%;
|
||||||
font-family: Verdana, Geneva, sans-serif;
|
font-family: Verdana, Geneva, sans-serif;
|
||||||
background: #272727 url(uiBackground.png) 50% 0 repeat-x;
|
background: #272727;
|
||||||
}
|
|
||||||
hr {
|
|
||||||
background-color: #40628a;
|
|
||||||
height: 1px;
|
|
||||||
}
|
|
||||||
.link, .linkOn, .linkOff, .selected, .disabled {
|
|
||||||
float: left;
|
|
||||||
min-width: 15px;
|
|
||||||
height: 16px;
|
|
||||||
text-align: center;
|
|
||||||
color: #ffffff;
|
|
||||||
text-decoration: none;
|
|
||||||
background: #40628a;
|
|
||||||
border: 1px solid #161616;
|
|
||||||
padding: 0px 4px 4px 4px;
|
|
||||||
margin: 0 2px 2px 0;
|
|
||||||
cursor:default;
|
|
||||||
white-space: nowrap;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.hasIcon {
|
|
||||||
padding: 0px 4px 4px 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
a:hover, .linkActive:hover {
|
|
||||||
background: #507aac;
|
|
||||||
}
|
|
||||||
.linkPending, .linkPending:hover {
|
|
||||||
color: #ffffff;
|
|
||||||
background: #507aac;
|
|
||||||
}
|
|
||||||
a.white, a.white:link, a.white:visited, a.white:active {
|
|
||||||
color: #40628a;
|
|
||||||
text-decoration: none;
|
|
||||||
background: #ffffff;
|
|
||||||
border: 1px solid #161616;
|
|
||||||
padding: 1px 4px 1px 4px;
|
|
||||||
margin: 0 2px 0 0;
|
|
||||||
cursor:default;
|
|
||||||
}
|
|
||||||
a.white:hover {
|
|
||||||
color: #ffffff;
|
|
||||||
background: #40628a;
|
|
||||||
}
|
|
||||||
.linkOn, a.linkOn:link, a.linkOn:visited, a.linkOn:active, a.linkOn:hover, .selected, a.selected:link, a.selected:visited, a.selected:active, a.selected:hover {
|
|
||||||
color: #ffffff;
|
|
||||||
background: #2f943c;
|
|
||||||
}
|
|
||||||
.linkOff, a.linkOff:link, a.linkOff:visited, a.linkOff:active, a.linkOff:hover, .disabled, a.disabled:link, a.disabled:visited, a.disabled:active, a.disabled:hover {
|
|
||||||
color: #ffffff;
|
|
||||||
background: #999999;
|
|
||||||
border-color: #666666;
|
|
||||||
}
|
|
||||||
a.icon, .linkOn.icon, .linkOff.icon, .selected.icon, .disabled.icon {
|
|
||||||
position: relative;
|
|
||||||
padding: 1px 4px 2px 20px;
|
|
||||||
}
|
|
||||||
a.icon img, .linkOn.icon img, .linkOff.icon img, .selected.icon img, .disabled.icon img {
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
width: 18px;
|
|
||||||
height: 18px;
|
|
||||||
}
|
|
||||||
.linkDanger, a.linkDanger:link, a.linkDanger:visited, a.linkDanger:active {
|
|
||||||
color: #ffffff;
|
|
||||||
background-color: #ff0000;
|
|
||||||
border-color: #aa0000;
|
|
||||||
}
|
|
||||||
.linkDanger:hover {
|
|
||||||
background-color: #ff6666;
|
|
||||||
}
|
|
||||||
|
|
||||||
ul {
|
|
||||||
padding: 4px 0 0 10px;
|
|
||||||
margin: 0;
|
|
||||||
list-style-type: none;
|
|
||||||
}
|
|
||||||
li {
|
|
||||||
padding: 0 0 2px 0;
|
|
||||||
}
|
|
||||||
img, a img {
|
|
||||||
border-style:none;
|
|
||||||
}
|
|
||||||
h1, h2, h3, h4, h5, h6 {
|
|
||||||
margin: 0;
|
|
||||||
padding: 12px 0 6px 0;
|
|
||||||
color: #517087;
|
|
||||||
clear: both;
|
|
||||||
}
|
|
||||||
h1 {
|
|
||||||
font-size: 18px;
|
|
||||||
}
|
|
||||||
h2 {
|
|
||||||
font-size: 16px;
|
|
||||||
}
|
|
||||||
h3 {
|
|
||||||
font-size: 14px;
|
|
||||||
}
|
|
||||||
h4 {
|
|
||||||
font-size: 12px;
|
|
||||||
}
|
|
||||||
#uiWrapper {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
#uiTitleWrapper {
|
|
||||||
position: relative;
|
|
||||||
height: 30px;
|
|
||||||
}
|
|
||||||
#uiTitle {
|
|
||||||
position: absolute;
|
|
||||||
top: 6px;
|
|
||||||
left: 44px;
|
|
||||||
width: 66%;
|
|
||||||
overflow: hidden;
|
|
||||||
color: #E9C183;
|
|
||||||
font-size: 16px;
|
|
||||||
}
|
|
||||||
#uiTitle.icon {
|
|
||||||
padding: 6px 8px 6px 42px;
|
|
||||||
background-position: 2px 50%;
|
|
||||||
background-repeat: no-repeat;
|
|
||||||
}
|
|
||||||
#uiTitleFluff {
|
|
||||||
position: absolute;
|
|
||||||
top: 4px;
|
|
||||||
right: 12px;
|
|
||||||
width: 42px;
|
|
||||||
height: 24px;
|
|
||||||
background: url(uiTitleFluff.png) 50% 50% no-repeat;
|
|
||||||
}
|
|
||||||
#uiStatusIcon {
|
|
||||||
position: absolute;
|
|
||||||
top: 4px;
|
|
||||||
left: 12px;
|
|
||||||
width: 24px;
|
|
||||||
height: 24px;
|
|
||||||
}
|
|
||||||
#uiContent {
|
|
||||||
clear: both;
|
|
||||||
padding: 8px;
|
|
||||||
}
|
|
||||||
#uiLoadingNotice {
|
|
||||||
position: relative;
|
|
||||||
background: url(uiNoticeBackground.jpg) 50% 50%;
|
|
||||||
color: #000000;
|
|
||||||
font-size: 14px;
|
|
||||||
font-style: italic;
|
|
||||||
font-weight: bold;
|
|
||||||
padding: 3px 4px 3px 4px;
|
|
||||||
margin: 4px 0 4px 0;
|
|
||||||
}
|
|
||||||
#uiNoScript {
|
#uiNoScript {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
top: 50%;
|
top: 50%;
|
||||||
@@ -176,6 +25,125 @@ h4 {
|
|||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hr {
|
||||||
|
background-color: #40628a;
|
||||||
|
height: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.link, .linkOn, .linkOff, .selected, .disabled {
|
||||||
|
float: left;
|
||||||
|
min-width: 15px;
|
||||||
|
height: 16px;
|
||||||
|
text-align: center;
|
||||||
|
color: #ffffff;
|
||||||
|
text-decoration: none;
|
||||||
|
background: #40628a;
|
||||||
|
border: 1px solid #161616;
|
||||||
|
padding: 0px 4px 4px 4px;
|
||||||
|
margin: 0 2px 2px 0;
|
||||||
|
cursor: default;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hasIcon {
|
||||||
|
padding: 0px 4px 4px 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover, .linkActive:hover {
|
||||||
|
background: #507aac;
|
||||||
|
}
|
||||||
|
|
||||||
|
.linkPending, .linkPending:hover {
|
||||||
|
color: #ffffff;
|
||||||
|
background: #507aac;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.white, a.white:link, a.white:visited, a.white:active {
|
||||||
|
color: #40628a;
|
||||||
|
text-decoration: none;
|
||||||
|
background: #ffffff;
|
||||||
|
border: 1px solid #161616;
|
||||||
|
padding: 1px 4px 1px 4px;
|
||||||
|
margin: 0 2px 0 0;
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.white:hover {
|
||||||
|
color: #ffffff;
|
||||||
|
background: #40628a;
|
||||||
|
}
|
||||||
|
|
||||||
|
.linkOn, a.linkOn:link, a.linkOn:visited, a.linkOn:active, a.linkOn:hover, .selected, a.selected:link, a.selected:visited, a.selected:active, a.selected:hover {
|
||||||
|
color: #ffffff;
|
||||||
|
background: #2f943c;
|
||||||
|
}
|
||||||
|
|
||||||
|
.linkOff, a.linkOff:link, a.linkOff:visited, a.linkOff:active, a.linkOff:hover, .disabled, a.disabled:link, a.disabled:visited, a.disabled:active, a.disabled:hover {
|
||||||
|
color: #ffffff;
|
||||||
|
background: #999999;
|
||||||
|
border-color: #666666;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.icon, .linkOn.icon, .linkOff.icon, .selected.icon, .disabled.icon {
|
||||||
|
position: relative;
|
||||||
|
padding: 1px 4px 2px 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.icon img, .linkOn.icon img, .linkOff.icon img, .selected.icon img, .disabled.icon img {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 18px;
|
||||||
|
height: 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.linkDanger, a.linkDanger:link, a.linkDanger:visited, a.linkDanger:active {
|
||||||
|
color: #ffffff;
|
||||||
|
background-color: #ff0000;
|
||||||
|
border-color: #aa0000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.linkDanger:hover {
|
||||||
|
background-color: #ff6666;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul {
|
||||||
|
padding: 4px 0 0 10px;
|
||||||
|
margin: 0;
|
||||||
|
list-style-type: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
li {
|
||||||
|
padding: 0 0 2px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
img, a img {
|
||||||
|
border-style: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1, h2, h3, h4, h5, h6 {
|
||||||
|
margin: 0;
|
||||||
|
padding: 12px 0 6px 0;
|
||||||
|
color: #517087;
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h4 {
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
.white {
|
.white {
|
||||||
color: white;
|
color: white;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
@@ -185,10 +153,12 @@ h4 {
|
|||||||
color: #4f7529;
|
color: #4f7529;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
.average {
|
.average {
|
||||||
color: #cd6500;
|
color: #cd6500;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bad {
|
.bad {
|
||||||
color: #ee0000;
|
color: #ee0000;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
@@ -202,15 +172,19 @@ h4 {
|
|||||||
.redBackground {
|
.redBackground {
|
||||||
background: #ea0000;
|
background: #ea0000;
|
||||||
}
|
}
|
||||||
|
|
||||||
.yellowBackground {
|
.yellowBackground {
|
||||||
background: #cacc00;
|
background: #cacc00;
|
||||||
}
|
}
|
||||||
|
|
||||||
.highlight {
|
.highlight {
|
||||||
color: #8BA5C4;
|
color: #8BA5C4;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dark {
|
.dark {
|
||||||
color: #272727;
|
color: #272727;
|
||||||
}
|
}
|
||||||
|
|
||||||
.noticePlaceholder {
|
.noticePlaceholder {
|
||||||
position: relative;
|
position: relative;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
@@ -219,6 +193,7 @@ h4 {
|
|||||||
padding: 3px 4px 3px 4px;
|
padding: 3px 4px 3px 4px;
|
||||||
margin: 4px 0 4px 0;
|
margin: 4px 0 4px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.notice {
|
.notice {
|
||||||
position: relative;
|
position: relative;
|
||||||
background: url(uiNoticeBackground.jpg) 50% 50%;
|
background: url(uiNoticeBackground.jpg) 50% 50%;
|
||||||
@@ -229,9 +204,11 @@ h4 {
|
|||||||
padding: 3px 4px 3px 4px;
|
padding: 3px 4px 3px 4px;
|
||||||
margin: 4px 0 4px 0;
|
margin: 4px 0 4px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.notice.icon {
|
.notice.icon {
|
||||||
padding: 2px 4px 0 20px;
|
padding: 2px 4px 0 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.notice img {
|
.notice img {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
@@ -240,37 +217,40 @@ h4 {
|
|||||||
height: 16px;
|
height: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
div.notice {
|
div.notice {
|
||||||
clear: both;
|
clear: both;
|
||||||
}
|
}
|
||||||
|
|
||||||
.itemGroup {
|
.itemGroup {
|
||||||
border: 1px solid #e9c183;
|
border: 1px solid #e9c183;
|
||||||
background: #2c2c2c;
|
background: #2c2c2c;
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
clear: both;
|
clear: both;
|
||||||
}
|
}
|
||||||
|
|
||||||
.item {
|
.item {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
margin: 4px 0 0 0;
|
margin: 4px 0 0 0;
|
||||||
clear: both;
|
clear: both;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.itemLabel {
|
.itemLabel {
|
||||||
float: left;
|
float: left;
|
||||||
width: 30%;
|
width: 30%;
|
||||||
color: #e9c183;
|
color: #e9c183;
|
||||||
}
|
}
|
||||||
|
|
||||||
.itemContent {
|
.itemContent {
|
||||||
float: left;
|
float: left;
|
||||||
width: 69%;
|
width: 69%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.itemLabelNarrow {
|
.itemLabelNarrow {
|
||||||
float: left;
|
float: left;
|
||||||
width: 20%;
|
width: 20%;
|
||||||
color: #e9c183;
|
color: #e9c183;
|
||||||
}
|
}
|
||||||
|
|
||||||
.itemLabelWide {
|
.itemLabelWide {
|
||||||
float: left;
|
float: left;
|
||||||
width: 45%;
|
width: 45%;
|
||||||
@@ -281,10 +261,12 @@ div.notice {
|
|||||||
float: left;
|
float: left;
|
||||||
width: 79%;
|
width: 79%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.itemContentSmall {
|
.itemContentSmall {
|
||||||
float: left;
|
float: left;
|
||||||
width: 33%;
|
width: 33%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.itemContentMedium {
|
.itemContentMedium {
|
||||||
float: left;
|
float: left;
|
||||||
width: 55%;
|
width: 55%;
|
||||||
@@ -297,6 +279,7 @@ div.notice {
|
|||||||
padding: 4px;
|
padding: 4px;
|
||||||
margin: 3px 0;
|
margin: 3px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.statusDisplayRecords {
|
.statusDisplayRecords {
|
||||||
background: #000000;
|
background: #000000;
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
@@ -307,25 +290,28 @@ div.notice {
|
|||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.statusLabel {
|
.statusLabel {
|
||||||
width: 138px;
|
width: 138px;
|
||||||
float: left;
|
float: left;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
color: #98B0C3;
|
color: #98B0C3;
|
||||||
}
|
}
|
||||||
|
|
||||||
.statusValue {
|
.statusValue {
|
||||||
float: left;
|
float: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
.block {
|
.block {
|
||||||
padding: 8px;
|
padding: 8px;
|
||||||
margin: 10px 4px 4px 4px;
|
margin: 10px 4px 4px 4px;
|
||||||
border: 1px solid #40628a;
|
border: 1px solid #40628a;
|
||||||
background-color: #202020;
|
background-color: #202020;
|
||||||
}
|
}
|
||||||
|
|
||||||
.block h3 {
|
.block h3 {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.displayBar {
|
.displayBar {
|
||||||
position: relative;
|
position: relative;
|
||||||
width: 236px;
|
width: 236px;
|
||||||
@@ -336,6 +322,7 @@ div.notice {
|
|||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
background: #000000;
|
background: #000000;
|
||||||
}
|
}
|
||||||
|
|
||||||
.displayBarText {
|
.displayBarText {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: -2px;
|
top: -2px;
|
||||||
@@ -345,6 +332,7 @@ div.notice {
|
|||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
.displayBarFill {
|
.displayBarFill {
|
||||||
width: 0%;
|
width: 0%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
@@ -352,58 +340,70 @@ div.notice {
|
|||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
float: left;
|
float: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
.displayBarFill.alignRight {
|
.displayBarFill.alignRight {
|
||||||
float: right;
|
float: right;
|
||||||
}
|
}
|
||||||
|
|
||||||
.displayBarFill.good {
|
.displayBarFill.good {
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
background: #4f7529;
|
background: #4f7529;
|
||||||
}
|
}
|
||||||
|
|
||||||
.displayBarFill.average {
|
.displayBarFill.average {
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
background: #cd6500;
|
background: #cd6500;
|
||||||
}
|
}
|
||||||
|
|
||||||
.displayBarFill.bad {
|
.displayBarFill.bad {
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
background: #ee0000;
|
background: #ee0000;
|
||||||
}
|
}
|
||||||
|
|
||||||
.displayBarFill.highlight {
|
.displayBarFill.highlight {
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
background: #8BA5C4;
|
background: #8BA5C4;
|
||||||
}
|
}
|
||||||
|
|
||||||
.clearBoth {
|
.clearBoth {
|
||||||
clear: both;
|
clear: both;
|
||||||
}
|
}
|
||||||
|
|
||||||
.clearLeft {
|
.clearLeft {
|
||||||
clear: left;
|
clear: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
.clearRight {
|
.clearRight {
|
||||||
clear: right;
|
clear: right;
|
||||||
}
|
}
|
||||||
|
|
||||||
.line {
|
.line {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
clear: both;
|
clear: both;
|
||||||
}
|
}
|
||||||
.inactive, , a.inactive:link, a.inactive:visited, a.inactive:active, a.inactive:hover {
|
|
||||||
|
.inactive, a.inactive:link, a.inactive:visited, a.inactive:active, a.inactive:hover {
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
background: #999999;
|
background: #999999;
|
||||||
border-color: #666666;
|
border-color: #666666;
|
||||||
}
|
}
|
||||||
|
|
||||||
.fixedLeft {
|
.fixedLeft {
|
||||||
width: 110px;
|
width: 110px;
|
||||||
float: left;
|
float: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
.fixedLeftWide {
|
.fixedLeftWide {
|
||||||
width: 165px;
|
width: 165px;
|
||||||
float: left;
|
float: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
.fixedLeftWider{
|
.fixedLeftWider {
|
||||||
width: 220px;
|
width: 220px;
|
||||||
float: left;
|
float: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
.fixedLeftWidest{
|
.fixedLeftWidest {
|
||||||
width: 250px;
|
width: 250px;
|
||||||
float: left;
|
float: left;
|
||||||
}
|
}
|
||||||
@@ -414,33 +414,28 @@ div.notice {
|
|||||||
|
|
||||||
/* Used in PDA */
|
/* Used in PDA */
|
||||||
|
|
||||||
|
.wholeScreen {
|
||||||
.wholeScreen
|
position: absolute;
|
||||||
{
|
|
||||||
position: absolute
|
|
||||||
color: #517087;
|
color: #517087;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
text-align:center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.pdalink
|
.pdalink {
|
||||||
{
|
|
||||||
float: left;
|
float: left;
|
||||||
white-space:nowrap;
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* DNA Modifier UI (dna_modifier.tmpl) */
|
/* DNA Modifier UI (dna_modifier.tmpl) */
|
||||||
|
|
||||||
.dnaBlock
|
.dnaBlock {
|
||||||
{
|
|
||||||
float: left;
|
float: left;
|
||||||
width: 90px;
|
width: 90px;
|
||||||
padding: 0 0 5px 0;
|
padding: 0 0 5px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dnaBlockNumber
|
.dnaBlockNumber {
|
||||||
{
|
|
||||||
font-family: Fixed, monospace;
|
font-family: Fixed, monospace;
|
||||||
float: left;
|
float: left;
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
@@ -451,8 +446,7 @@ div.notice {
|
|||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dnaSubBlock
|
.dnaSubBlock {
|
||||||
{
|
|
||||||
font-family: Fixed, monospace;
|
font-family: Fixed, monospace;
|
||||||
float: left;
|
float: left;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
@@ -461,8 +455,7 @@ div.notice {
|
|||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mask
|
.mask {
|
||||||
{
|
|
||||||
position: fixed;
|
position: fixed;
|
||||||
left: 0;
|
left: 0;
|
||||||
top: 0;
|
top: 0;
|
||||||
@@ -471,8 +464,7 @@ div.notice {
|
|||||||
background: url(uiMaskBackground.png);
|
background: url(uiMaskBackground.png);
|
||||||
}
|
}
|
||||||
|
|
||||||
.maskContent
|
.maskContent {
|
||||||
{
|
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 200px;
|
height: 200px;
|
||||||
margin: 200px 0;
|
margin: 200px 0;
|
||||||
@@ -480,84 +472,73 @@ div.notice {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Table stuffs for power monitor */
|
/* Table stuffs for power monitor */
|
||||||
table.pmon
|
table.pmon {
|
||||||
{
|
border: 2px solid RoyalBlue;
|
||||||
border:2px solid RoyalBlue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
table.pmon td, table.pmon th
|
table.pmon td, table.pmon th {
|
||||||
{
|
border-bottom: 1px dotted black;
|
||||||
border-bottom:1px dotted black;
|
padding: 0px 5px 0px 5px;
|
||||||
padding:0px 5px 0px 5px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Table Stuffs for manifest*/
|
/* Table Stuffs for manifest*/
|
||||||
|
|
||||||
th.command
|
th.command {
|
||||||
{
|
|
||||||
background: #3333FF;
|
background: #3333FF;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
}
|
}
|
||||||
|
|
||||||
th.sec
|
th.sec {
|
||||||
{
|
|
||||||
background: #8e0000;
|
background: #8e0000;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
}
|
}
|
||||||
th.med
|
|
||||||
{
|
th.med {
|
||||||
background: #006600;
|
background: #006600;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
}
|
}
|
||||||
th.eng
|
|
||||||
{
|
th.eng {
|
||||||
background: #b27300;
|
background: #b27300;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
}
|
}
|
||||||
th.sci
|
|
||||||
{
|
th.sci {
|
||||||
background: #a65ba6;
|
background: #a65ba6;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
}
|
}
|
||||||
th.civ
|
|
||||||
{
|
th.civ {
|
||||||
background: #a32800;
|
background: #a32800;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
}
|
}
|
||||||
th.misc
|
|
||||||
{
|
th.misc {
|
||||||
background: #666666;
|
background: #666666;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Damage colors for crew monitoring computer */
|
/* Damage colors for crew monitoring computer */
|
||||||
|
|
||||||
.burn
|
.burn {
|
||||||
{
|
|
||||||
color: orange;
|
color: orange;
|
||||||
}
|
}
|
||||||
|
|
||||||
.brute
|
.brute {
|
||||||
{
|
|
||||||
color: red;
|
color: red;
|
||||||
}
|
}
|
||||||
|
|
||||||
.toxin
|
.toxin {
|
||||||
{
|
|
||||||
color: green;
|
color: green;
|
||||||
}
|
}
|
||||||
|
|
||||||
.oxyloss
|
.oxyloss {
|
||||||
{
|
|
||||||
color: blue;
|
color: blue;
|
||||||
}
|
}
|
||||||
BIN
nano/images/source/uiBasicBackground.xcf
Normal file
BIN
nano/images/source/uiBasicBackground.xcf
Normal file
Binary file not shown.
BIN
nano/images/uiBasicBackground.png
Normal file
BIN
nano/images/uiBasicBackground.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5.7 KiB |
@@ -45,7 +45,8 @@ NanoStateClass.prototype.onUpdate = function (data) {
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
$("#mainTemplate").html(NanoTemplate.parse('main', data)); // render the 'mail' template to the #mainTemplate div
|
$("#uiLayout").html(NanoTemplate.parse('layout', data)); // render the 'mail' template to the #mainTemplate div
|
||||||
|
$("#uiContent").html(NanoTemplate.parse('main', data)); // render the 'mail' template to the #mainTemplate div
|
||||||
}
|
}
|
||||||
catch(error)
|
catch(error)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -25,8 +25,6 @@ NanoStateManager = function ()
|
|||||||
// this function sets up the templates and base functionality
|
// this function sets up the templates and base functionality
|
||||||
var init = function ()
|
var init = function ()
|
||||||
{
|
{
|
||||||
$('#uiLoadingNotice').html('Loading...');
|
|
||||||
|
|
||||||
// We store initialData and templateData in the body tag, it's as good a place as any
|
// We store initialData and templateData in the body tag, it's as good a place as any
|
||||||
_data = $('body').data('initialData');
|
_data = $('body').data('initialData');
|
||||||
|
|
||||||
@@ -47,7 +45,6 @@ NanoStateManager = function ()
|
|||||||
doUpdate(_data);
|
doUpdate(_data);
|
||||||
|
|
||||||
_isInitialised = true;
|
_isInitialised = true;
|
||||||
$('#uiLoadingNotice').hide();
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1,76 +1,73 @@
|
|||||||
|
|
||||||
var NanoTemplate = function () {
|
var NanoTemplate = function () {
|
||||||
|
|
||||||
|
var _templateData = {};
|
||||||
|
|
||||||
var _templates = {};
|
var _templates = {};
|
||||||
var _compiledTemplates = {};
|
var _compiledTemplates = {};
|
||||||
|
|
||||||
var _helpers = {};
|
var _helpers = {};
|
||||||
|
|
||||||
var init = function () {
|
var init = function () {
|
||||||
// We store initialData and templateData in the body tag, it's as good a place as any
|
// We store templateData in the body tag, it's as good a place as any
|
||||||
var templateData = $('body').data('templateData');
|
_templateData = $('body').data('templateData');
|
||||||
|
|
||||||
if (templateData == null)
|
if (_templateData == null)
|
||||||
{
|
{
|
||||||
alert('Error: Template data did not load correctly.');
|
alert('Error: Template data did not load correctly.');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
loadNextTemplate();
|
||||||
|
};
|
||||||
|
|
||||||
|
var loadNextTemplate = function () {
|
||||||
// we count the number of templates for this ui so that we know when they've all been rendered
|
// we count the number of templates for this ui so that we know when they've all been rendered
|
||||||
var templateCount = 0;
|
var templateCount = Object.size(_templateData);
|
||||||
for (var key in templateData)
|
|
||||||
{
|
|
||||||
if (templateData.hasOwnProperty(key))
|
|
||||||
{
|
|
||||||
templateCount++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!templateCount)
|
if (!templateCount)
|
||||||
{
|
{
|
||||||
alert('ERROR: No templates listed!');
|
$(document).trigger('templatesLoaded');
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// load markup for each template and register it
|
// load markup for each template and register it
|
||||||
for (var key in templateData)
|
for (var key in _templateData)
|
||||||
{
|
{
|
||||||
if (!templateData.hasOwnProperty(key))
|
if (!_templateData.hasOwnProperty(key))
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
$.when($.ajax({
|
$.when($.ajax({
|
||||||
url: templateData[key],
|
url: _templateData[key],
|
||||||
cache: false,
|
cache: false,
|
||||||
dataType: 'text'
|
dataType: 'text'
|
||||||
}))
|
}))
|
||||||
.done(function(templateMarkup) {
|
.done(function(templateMarkup) {
|
||||||
|
|
||||||
//templateMarkup = templateMarkup.replace(/ +\) *\}\}/g, ')}}');
|
|
||||||
|
|
||||||
templateMarkup += '<div class="clearBoth"></div>';
|
templateMarkup += '<div class="clearBoth"></div>';
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
NanoTemplate.addTemplate(key, templateMarkup)
|
NanoTemplate.addTemplate(key, templateMarkup);
|
||||||
|
|
||||||
templateCount--;
|
|
||||||
|
|
||||||
if (templateCount <= 0)
|
|
||||||
{
|
|
||||||
$(document).trigger('templatesLoaded');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
catch(error)
|
catch(error)
|
||||||
{
|
{
|
||||||
alert('ERROR: An error occurred while loading the UI: ' + error.message);
|
alert('ERROR: An error occurred while loading the UI: ' + error.message);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
delete _templateData[key];
|
||||||
|
|
||||||
|
loadNextTemplate();
|
||||||
})
|
})
|
||||||
.fail(function () {
|
.fail(function () {
|
||||||
alert('ERROR: Loading template ' + key + '(' + templateData[key] + ') failed!');
|
alert('ERROR: Loading template ' + key + '(' + _templateData[key] + ') failed!');
|
||||||
});;
|
});
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
|
||||||
|
|
||||||
var compileTemplates = function () {
|
var compileTemplates = function () {
|
||||||
|
|
||||||
@@ -79,7 +76,7 @@ var NanoTemplate = function () {
|
|||||||
_compiledTemplates[key] = doT.template(_templates[key], null, _templates)
|
_compiledTemplates[key] = doT.template(_templates[key], null, _templates)
|
||||||
}
|
}
|
||||||
catch (error) {
|
catch (error) {
|
||||||
alert(error);
|
alert(error.message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -92,13 +89,18 @@ var NanoTemplate = function () {
|
|||||||
_templates[key] = templateString;
|
_templates[key] = templateString;
|
||||||
},
|
},
|
||||||
parse: function (templateKey, data) {
|
parse: function (templateKey, data) {
|
||||||
if (!_compiledTemplates.hasOwnProperty(templateKey)) {
|
if (!_compiledTemplates.hasOwnProperty(templateKey) || !_compiledTemplates[templateKey]) {
|
||||||
if (!_templates.hasOwnProperty(templateKey)) {
|
if (!_templates.hasOwnProperty(templateKey)) {
|
||||||
alert('ERROR: Template "' + templateKey + '" does not exist in _compiledTemplates!');
|
alert('ERROR: Template "' + templateKey + '" does not exist in _compiledTemplates!');
|
||||||
return;
|
return '<h2>Template error (does not exist)</h2>';
|
||||||
}
|
}
|
||||||
compileTemplates();
|
compileTemplates();
|
||||||
}
|
}
|
||||||
|
if (typeof _compiledTemplates[templateKey] != 'function') {
|
||||||
|
alert(_compiledTemplates[templateKey]);
|
||||||
|
alert('ERROR: Template "' + templateKey + '" failed to compile!');
|
||||||
|
return '<h2>Template error (failed to compile)</h2>';
|
||||||
|
}
|
||||||
return _compiledTemplates[templateKey].call(this, data['data'], data['config'], _helpers);
|
return _compiledTemplates[templateKey].call(this, data['data'], data['config'], _helpers);
|
||||||
},
|
},
|
||||||
addHelper: function (helperName, helperFunction) {
|
addHelper: function (helperName, helperFunction) {
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
Tank Label:
|
Tank Label:
|
||||||
</div>
|
</div>
|
||||||
<div class="itemContent">
|
<div class="itemContent">
|
||||||
<div style="float: left; width: 180px;">{{:data.name}}</div> {{:helper.link('Relabel', 'pencil', {'relabel' : 1}, (data.canLabel) ? null : 'disabled')}}
|
<div style="float: left; width: 180px;">{{:data.name}}</div> {{:helper.link('Relabel', 'pencil', {'relabel' : 1}, data.canLabel ? null : 'disabled')}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -91,6 +91,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="item" style="padding-top: 10px; width: 100%">
|
<div class="item" style="padding-top: 10px; width: 100%">
|
||||||
{{:helper.link('Abort', 'cancel', {'command' : 'abort'}, (data.processing && !airlock_disabled) ? null : 'disabled', (data.processing && !data.airlock_disabled) ? 'redBackground' : null)}}
|
{{:helper.link('Abort', 'cancel', {'command' : 'abort'}, (data.processing && !data.airlock_disabled) ? null : 'disabled', (data.processing && !data.airlock_disabled) ? 'redBackground' : null)}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -30,7 +30,7 @@
|
|||||||
{{:helper.link('Force exterior door', 'alert', {'command' : 'force_door'}, data.override_enabled ? null : 'disabled', null)}}
|
{{:helper.link('Force exterior door', 'alert', {'command' : 'force_door'}, data.override_enabled ? null : 'disabled', null)}}
|
||||||
{{:helper.link('Override', 'alert', {'command' : 'toggle_override'}, null, data.override_enabled ? 'redBackground' : null)}}
|
{{:helper.link('Override', 'alert', {'command' : 'toggle_override'}, null, data.override_enabled ? 'redBackground' : null)}}
|
||||||
{{else}}
|
{{else}}
|
||||||
{{:helper.link('Force exterior door', 'alert', {'command' : 'force_door'}, data.override_enabled ? null : 'disabled', data.override_enabled? 'redBackground' : null)}}
|
{{:helper.link('Force exterior door', 'alert', {'command' : 'force_door'}, data.override_enabled ? null : 'disabled', data.override_enabled ? 'redBackground' : null)}}
|
||||||
{{:helper.link('Override', 'alert', {'command' : 'toggle_override'}, null, data.override_enabled ? 'redBackground' : 'yellowBackground')}}
|
{{:helper.link('Override', 'alert', {'command' : 'toggle_override'}, null, data.override_enabled ? 'redBackground' : 'yellowBackground')}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{else}}
|
{{else}}
|
||||||
|
|||||||
@@ -79,7 +79,7 @@
|
|||||||
{{:helper.link('Force exterior door', 'alert', {'command' : 'force_door'}, data.override_enabled ? null : 'disabled', null)}}
|
{{:helper.link('Force exterior door', 'alert', {'command' : 'force_door'}, data.override_enabled ? null : 'disabled', null)}}
|
||||||
{{:helper.link('Override', 'alert', {'command' : 'toggle_override'}, null, data.override_enabled ? 'redBackground' : null)}}
|
{{:helper.link('Override', 'alert', {'command' : 'toggle_override'}, null, data.override_enabled ? 'redBackground' : null)}}
|
||||||
{{else}}
|
{{else}}
|
||||||
{{:helper.link('Force exterior door', 'alert', {'command' : 'force_door'}, data.override_enabled ? null : 'disabled', data.override_enabled? 'redBackground' : null)}}
|
{{:helper.link('Force exterior door', 'alert', {'command' : 'force_door'}, data.override_enabled ? null : 'disabled', data.override_enabled ? 'redBackground' : null)}}
|
||||||
{{:helper.link('Override', 'alert', {'command' : 'toggle_override'}, null, data.override_enabled ? 'redBackground' : 'yellowBackground')}}
|
{{:helper.link('Override', 'alert', {'command' : 'toggle_override'}, null, data.override_enabled ? 'redBackground' : 'yellowBackground')}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -72,9 +72,9 @@
|
|||||||
<div class="item" style="padding-top: 10px">
|
<div class="item" style="padding-top: 10px">
|
||||||
<div class="item">
|
<div class="item">
|
||||||
<div class="itemContent" style="padding-top: 2px; width: 100%">
|
<div class="itemContent" style="padding-top: 2px; width: 100%">
|
||||||
{{:helper.link('Launch Shuttle', 'arrowthickstop-1-e', {'move' : '1'}, data.can_launch? null : 'disabled' , null)}}
|
{{:helper.link('Launch Shuttle', 'arrowthickstop-1-e', {'move' : '1'}, data.can_launch ? null : 'disabled' , null)}}
|
||||||
{{:helper.link('Cancel Launch', 'cancel', {'cancel' : '1'}, data.can_cancel? null : 'disabled' , null)}}
|
{{:helper.link('Cancel Launch', 'cancel', {'cancel' : '1'}, data.can_cancel ? null : 'disabled' , null)}}
|
||||||
{{:helper.link('Force Launch', 'alert', {'force' : '1'}, data.can_force? null : 'disabled' , data.can_force? 'redBackground' : null)}}
|
{{:helper.link('Force Launch', 'alert', {'force' : '1'}, data.can_force ? null : 'disabled' , data.can_force ? 'redBackground' : null)}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -87,14 +87,14 @@ Used In File(s): \code\modules\research\xenoarchaeology\machinery\geosample_scan
|
|||||||
{{:data.maser_wavelength}} MHz
|
{{:data.maser_wavelength}} MHz
|
||||||
</div>
|
</div>
|
||||||
<div class="itemContent" style="text-align:left; width: 22%;">
|
<div class="itemContent" style="text-align:left; width: 22%;">
|
||||||
{{:helper.link('-2 KHz', null, {'maserWavelength' : -2}, null)}}
|
{{:helper.link('-2 GHz', null, {'maserWavelength' : -2}, null)}}
|
||||||
{{:helper.link('-1 KHz', null, {'maserWavelength' : -1}, null)}}
|
{{:helper.link('-1 GHz', null, {'maserWavelength' : -1}, null)}}
|
||||||
{{:helper.link('-0.5 KHz', null, {'maserWavelength' : -0.5}, null)}}
|
{{:helper.link('-0.5 GHz', null, {'maserWavelength' : -0.5}, null)}}
|
||||||
</div>
|
</div>
|
||||||
<div class="itemContent" style="text-align:right; width: 22%;">
|
<div class="itemContent" style="text-align:right; width: 22%;">
|
||||||
{{:helper.link('+0.5 KHz', null, {'maserWavelength' : 0.5}, null)}}
|
{{:helper.link('+0.5 GHz', null, {'maserWavelength' : 0.5}, null)}}
|
||||||
{{:helper.link('+1 KHz', null, {'maserWavelength' : 1}, null)}}
|
{{:helper.link('+1 GHz', null, {'maserWavelength' : 1}, null)}}
|
||||||
{{:helper.link('+2 KHz', null, {'maserWavelength' : 2}, null)}}
|
{{:helper.link('+2 GHz', null, {'maserWavelength' : 2}, null)}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
3
nano/templates/layout_basic.tmpl
Normal file
3
nano/templates/layout_basic.tmpl
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<div id='uiContent'>
|
||||||
|
<div id='uiLoadingNotice'>Initiating...</div>
|
||||||
|
</div>
|
||||||
4
nano/templates/layout_default.tmpl
Normal file
4
nano/templates/layout_default.tmpl
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
<div id='uiTitleWrapper'><div id='uiStatusIcon' class='icon24 uiStatusGood'></div><div id='uiTitle'>{{:config.title}}</div><div id='uiTitleFluff'></div></div>
|
||||||
|
<div id='uiContent'>
|
||||||
|
<div id='uiLoadingNotice'>Initiating...</div>
|
||||||
|
</div>
|
||||||
@@ -233,16 +233,16 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
|
|||||||
<H3>Current Conversations</H3>
|
<H3>Current Conversations</H3>
|
||||||
{{for data.convopdas}}
|
{{for data.convopdas}}
|
||||||
<div class="item">
|
<div class="item">
|
||||||
{{:helper.link(Name, 'circle-arrow-s', {'choice' : "Select Conversation", 'convo' : data.Reference } , null, fixedLeftWider)}}
|
{{:helper.link(value.Name, 'circle-arrow-s', {'choice' : "Select Conversation", 'convo' : value.Reference } , null, value.fixedLeftWider)}}
|
||||||
{{if data.cartridge}}
|
{{if value.cartridge}}
|
||||||
{{if data.cartridge.type == "/obj/item/weapon/cartridge/syndicate" && data.Detonate == 1}}
|
{{if value.cartridge.type == "/obj/item/weapon/cartridge/syndicate" && value.Detonate == 1}}
|
||||||
{{:helper.link('*Detonate*', 'radiation', {'choice' : "Detonate", 'target' : data.Reference}, null, 'fixedLeft')}}
|
{{:helper.link('*Detonate*', 'radiation', {'choice' : "Detonate", 'target' : value.Reference}, null, 'fixedLeft')}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{if data.cartridge.type == "/obj/item/weapon/cartridge/clown"}}
|
{{if value.cartridge.type == "/obj/item/weapon/cartridge/clown"}}
|
||||||
{{:helper.link('*Send Virus*', 'star', {'choice' : "Send Honk", 'target' : data.Reference}, null, 'fixedLeft')}}
|
{{:helper.link('*Send Virus*', 'star', {'choice' : "Send Honk", 'target' : value.Reference}, null, 'fixedLeft')}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{if data.cartridge.type == "/obj/item/weapon/cartridge/mime"}}
|
{{if value.cartridge.type == "/obj/item/weapon/cartridge/mime"}}
|
||||||
{{:helper.link('*Send Virus*', 'circle-arrow-s', {'choice' : "Send Silence", 'target' : data.Reference}, null, 'fixedLeft')}}
|
{{:helper.link('*Send Virus*', 'circle-arrow-s', {'choice' : "Send Silence", 'target' : value.Reference}, null, 'fixedLeft')}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</div>
|
</div>
|
||||||
@@ -250,7 +250,7 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
|
|||||||
<H3>Other PDAs</H3>
|
<H3>Other PDAs</H3>
|
||||||
{{for data.pdas}}
|
{{for data.pdas}}
|
||||||
<div class="item">
|
<div class="item">
|
||||||
{{:helper.link(Name, 'circle-arrow-s', {'choice' : "Message", 'target' : value.Reference}, null, fixedLeftWider)}}
|
{{:helper.link(value.Name, 'circle-arrow-s', {'choice' : "Message", 'target' : value.Reference}, null, value.fixedLeftWider)}}
|
||||||
{{if value.cartridge}}
|
{{if value.cartridge}}
|
||||||
{{if value.cartridge.type == "/obj/item/weapon/cartridge/syndicate" && value.Detonate == 1}} {{:helper.link('*Detonate*', 'radiation', {'choice' : "Detonate", 'target' : value.Reference}, null, 'fixedLeft')}} {{/if}}
|
{{if value.cartridge.type == "/obj/item/weapon/cartridge/syndicate" && value.Detonate == 1}} {{:helper.link('*Detonate*', 'radiation', {'choice' : "Detonate", 'target' : value.Reference}, null, 'fixedLeft')}} {{/if}}
|
||||||
{{if value.cartridge.type == "/obj/item/weapon/cartridge/clown"}} {{:helper.link('*Send Virus*', 'star', {'choice' : "Send Honk", 'target' : value.Reference}, null, 'fixedLeft')}} {{/if}}
|
{{if value.cartridge.type == "/obj/item/weapon/cartridge/clown"}} {{:helper.link('*Send Virus*', 'star', {'choice' : "Send Honk", 'target' : value.Reference}, null, 'fixedLeft')}} {{/if}}
|
||||||
|
|||||||
@@ -60,7 +60,7 @@
|
|||||||
<div class="itemContent" style="padding-top: 2px; width: 100%">
|
<div class="itemContent" style="padding-top: 2px; width: 100%">
|
||||||
{{:helper.link('Launch Shuttle', 'arrowthickstop-1-e', {'move' : '1'}, data.can_launch? null : 'disabled' , null)}}
|
{{:helper.link('Launch Shuttle', 'arrowthickstop-1-e', {'move' : '1'}, data.can_launch? null : 'disabled' , null)}}
|
||||||
{{:helper.link('Cancel Launch', 'cancel', {'cancel' : '1'}, data.can_cancel ? null : 'disabled' , null)}}
|
{{:helper.link('Cancel Launch', 'cancel', {'cancel' : '1'}, data.can_cancel ? null : 'disabled' , null)}}
|
||||||
{{:helper.link('Force Launch', 'alert', {'force' : '1'}, data.can_force? null : 'disabled' , can_force? 'redBackground' : null)}}
|
{{:helper.link('Force Launch', 'alert', {'force' : '1'}, data.can_force? null : 'disabled' , data.can_force ? 'redBackground' : null)}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -67,7 +67,7 @@
|
|||||||
<div class="itemContent" style="padding-top: 2px; width: 100%">
|
<div class="itemContent" style="padding-top: 2px; width: 100%">
|
||||||
{{:data.~link('Launch Shuttle', 'arrowthickstop-1-e', {'move' : '1'}, data.can_launch ? null : 'disabled' , null)}}
|
{{:data.~link('Launch Shuttle', 'arrowthickstop-1-e', {'move' : '1'}, data.can_launch ? null : 'disabled' , null)}}
|
||||||
{{:data.~link('Cancel Launch', 'cancel', {'cancel' : '1'}, data.can_cancel ? null : 'disabled' , null)}}
|
{{:data.~link('Cancel Launch', 'cancel', {'cancel' : '1'}, data.can_cancel ? null : 'disabled' , null)}}
|
||||||
{{:data.~link('Force Launch', 'alert', {'force' : '1'}, data.can_force ? null : 'disabled' , can_force? 'redBackground' : null)}}
|
{{:data.~link('Force Launch', 'alert', {'force' : '1'}, data.can_force ? null : 'disabled' , data.can_force ? 'redBackground' : null)}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -4,7 +4,7 @@
|
|||||||
Chamber Pressure:
|
Chamber Pressure:
|
||||||
</div>
|
</div>
|
||||||
<div class="itemContent">
|
<div class="itemContent">
|
||||||
{{:helper.displayBar(chamber_pressure, 0, 200, (chamber_pressure < 80) || (chamber_pressure > 120) ? 'bad' : (chamber_pressure < 95) || (chamber_pressure > 110) ? 'average' : 'good')}}
|
{{:helper.displayBar(data.chamber_pressure, 0, 200, (data.chamber_pressure < 80) || (data.chamber_pressure > 120) ? 'bad' : (data.chamber_pressure < 95) || (data.chamber_pressure > 110) ? 'average' : 'good')}}
|
||||||
<div class="statusValue">
|
<div class="statusValue">
|
||||||
{{:data.chamber_pressure}} kPa
|
{{:data.chamber_pressure}} kPa
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -94,7 +94,7 @@
|
|||||||
{{else}}
|
{{else}}
|
||||||
{{:helper.link('Force exterior door', 'alert', {'command' : 'force_door'}, data.override_enabled ? null : 'disabled', data.override_enabled ? 'redBackground' : null)}}
|
{{:helper.link('Force exterior door', 'alert', {'command' : 'force_door'}, data.override_enabled ? null : 'disabled', data.override_enabled ? 'redBackground' : null)}}
|
||||||
{{:helper.link('Override', 'alert', {'command' : 'toggle_override'}, null, data.override_enabled ? 'redBackground' : 'yellowBackground')}}
|
{{:helper.link('Override', 'alert', {'command' : 'toggle_override'}, null, data.override_enabled ? 'redBackground' : 'yellowBackground')}}
|
||||||
{{:helper.link('MANUAL EJECT', 'alert', {'command' : 'toggle_override'}, can_force ? null : 'disabled', can_force ? 'redBackground' : null)}}
|
{{:helper.link('MANUAL EJECT', 'alert', {'command' : 'toggle_override'}, data.can_force ? null : 'disabled', data.can_force ? 'redBackground' : null)}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
Tank Pressure:
|
Tank Pressure:
|
||||||
</div>
|
</div>
|
||||||
<div class="itemContent">
|
<div class="itemContent">
|
||||||
{{:helper.displayBar(data.tankPressure, 0, 1013, (data.tankPressure > 200) ? 'good' : (data.tankPressure > 100) ? 'average' : 'bad'))}}
|
{{:helper.displayBar(data.tankPressure, 0, 1013, (data.tankPressure > 200) ? 'good' : ((data.tankPressure > 100) ? 'average' : 'bad'))}}
|
||||||
<div class="statusValue">
|
<div class="statusValue">
|
||||||
{{:data.tankPressure}} kPa
|
{{:data.tankPressure}} kPa
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
0
tools/mapmerge/mapmerge.sh
Normal file → Executable file
0
tools/mapmerge/mapmerge.sh
Normal file → Executable file
Reference in New Issue
Block a user