Merge branch 'master' of https://github.com/PolarisSS13/Polaris into 11/19/2017_submap_validation
# Conflicts resolved: # code/unit_tests/map_tests.dm
@@ -23,6 +23,7 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E
|
||||
var/recursive_enhancement = 0 //Used to power up other abilities from the ling power with the same name.
|
||||
var/list/purchased_powers_history = list() //Used for round-end report, includes respec uses too.
|
||||
var/last_shriek = null // world.time when the ling last used a shriek.
|
||||
var/next_escape = 0 // world.time when the ling can next use Escape Restraints
|
||||
|
||||
/datum/changeling/New(var/gender=FEMALE)
|
||||
..()
|
||||
|
||||
63
code/game/gamemodes/changeling/powers/escape_restraints.dm
Normal file
@@ -0,0 +1,63 @@
|
||||
/datum/power/changeling/escape_restraints
|
||||
name = "Escape Restraints"
|
||||
desc = "We evolve more complex joints"
|
||||
helptext = "We can instantly escape from most restraints and bindings, but we cannot do it often."
|
||||
enhancedtext = "More frequent escapes."
|
||||
ability_icon_state = "ling_escape_restraints"
|
||||
genomecost = 2
|
||||
verbpath = /mob/proc/changeling_escape_restraints
|
||||
|
||||
//Escape Cuffs. By design this does not escape from straight jackets
|
||||
/mob/proc/changeling_escape_restraints()
|
||||
set category = "Changeling"
|
||||
set name = "Escape Restraints (40)"
|
||||
set desc = "Removes handcuffs and legcuffs instantly."
|
||||
|
||||
var/escape_cooldown = 5 MINUTES //This is used later to prevent spamming
|
||||
var/mob/living/carbon/human/C = src
|
||||
var/datum/changeling/changeling = changeling_power(40,0,100,CONSCIOUS)
|
||||
if(!changeling)
|
||||
return 0
|
||||
if(world.time < changeling.next_escape)
|
||||
to_chat(src, "<span class='warning'>We are still recovering from our last escape...</span>")
|
||||
return 0
|
||||
if(!(C.handcuffed || C.legcuffed)) // No need to waste chems if there's nothing to break out of
|
||||
to_chat(C, "<span class='warning'>We are are not restrained in a way we can escape...</span>")
|
||||
return 0
|
||||
|
||||
changeling.chem_charges -= 40
|
||||
|
||||
to_chat(C,"<span class='notice'>We contort our extremities and slip our cuffs.</span>")
|
||||
playsound(src, 'sound/effects/blobattack.ogg', 30, 1)
|
||||
if(C.handcuffed)
|
||||
var/obj/item/weapon/W = C.handcuffed
|
||||
C.handcuffed = null
|
||||
if(C.buckled && C.buckled.buckle_require_restraints)
|
||||
C.buckled.unbuckle_mob()
|
||||
C.update_inv_handcuffed()
|
||||
if (C.client)
|
||||
C.client.screen -= W
|
||||
if(W)
|
||||
W.loc = C.loc
|
||||
W.dropped(C)
|
||||
if(W)
|
||||
W.layer = initial(W.layer)
|
||||
if(C.legcuffed)
|
||||
var/obj/item/weapon/W = C.legcuffed
|
||||
C.legcuffed = null
|
||||
C.update_inv_legcuffed()
|
||||
if(C.client)
|
||||
C.client.screen -= W
|
||||
if(W)
|
||||
W.loc = C.loc
|
||||
W.dropped(C)
|
||||
if(W)
|
||||
W.layer = initial(W.layer)
|
||||
|
||||
if(src.mind.changeling.recursive_enhancement)
|
||||
escape_cooldown *= 0.5
|
||||
|
||||
changeling.next_escape = world.time + escape_cooldown //And now we set the timer
|
||||
|
||||
feedback_add_details("changeling_powers","ESR")
|
||||
return 1
|
||||
@@ -74,7 +74,7 @@ var/global/datum/controller/occupations/job_master
|
||||
|
||||
proc/FreeRole(var/rank) //making additional slot on the fly
|
||||
var/datum/job/job = GetJob(rank)
|
||||
if(job && job.current_positions >= job.total_positions && job.total_positions != -1)
|
||||
if(job && job.total_positions != -1)
|
||||
job.total_positions++
|
||||
return 1
|
||||
return 0
|
||||
|
||||
@@ -127,6 +127,36 @@
|
||||
icon = 'icons/obj/doors/Doormaint.dmi'
|
||||
assembly_type = /obj/structure/door_assembly/door_assembly_mai
|
||||
|
||||
/obj/machinery/door/airlock/maintenance/cargo
|
||||
icon = 'icons/obj/doors/Doormaint_cargo.dmi'
|
||||
req_one_access = list(access_cargo)
|
||||
|
||||
/obj/machinery/door/airlock/maintenance/command
|
||||
icon = 'icons/obj/doors/Doormaint_command.dmi'
|
||||
req_one_access = list(access_heads)
|
||||
|
||||
/obj/machinery/door/airlock/maintenance/common
|
||||
icon = 'icons/obj/doors/Doormaint_common.dmi'
|
||||
|
||||
/obj/machinery/door/airlock/maintenance/engi
|
||||
icon = 'icons/obj/doors/Doormaint_engi.dmi'
|
||||
req_one_access = list(access_engine)
|
||||
|
||||
/obj/machinery/door/airlock/maintenance/int
|
||||
icon = 'icons/obj/doors/Doormaint_int.dmi'
|
||||
|
||||
/obj/machinery/door/airlock/maintenance/medical
|
||||
icon = 'icons/obj/doors/Doormaint_med.dmi'
|
||||
req_one_access = list(access_medical)
|
||||
|
||||
/obj/machinery/door/airlock/maintenance/rnd
|
||||
icon = 'icons/obj/doors/Doormaint_rnd.dmi'
|
||||
req_one_access = list(access_research)
|
||||
|
||||
/obj/machinery/door/airlock/maintenance/sec
|
||||
icon = 'icons/obj/doors/Doormaint_sec.dmi'
|
||||
req_one_access = list(access_security)
|
||||
|
||||
/obj/machinery/door/airlock/external
|
||||
name = "External Airlock"
|
||||
icon = 'icons/obj/doors/Doorext.dmi'
|
||||
|
||||
@@ -2,15 +2,44 @@
|
||||
/obj/machinery/door/airlock/multi_tile
|
||||
width = 2
|
||||
appearance_flags = 0
|
||||
var/obj/machinery/filler_object/filler1
|
||||
var/obj/machinery/filler_object/filler2
|
||||
|
||||
/obj/machinery/door/airlock/multi_tile/New()
|
||||
..()
|
||||
SetBounds()
|
||||
if(opacity)
|
||||
create_fillers()
|
||||
|
||||
/obj/machinery/door/airlock/multi_tile/Destroy()
|
||||
qdel_null(filler1)
|
||||
qdel_null(filler2)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/door/airlock/multi_tile/Move()
|
||||
. = ..()
|
||||
SetBounds()
|
||||
|
||||
/obj/machinery/door/airlock/multi_tile/open()
|
||||
. = ..()
|
||||
|
||||
if(filler1)
|
||||
filler1.set_opacity(opacity)
|
||||
if(filler2)
|
||||
filler2.set_opacity(opacity)
|
||||
|
||||
return .
|
||||
|
||||
/obj/machinery/door/airlock/multi_tile/close()
|
||||
. = ..()
|
||||
|
||||
if(filler1)
|
||||
filler1.set_opacity(opacity)
|
||||
if(filler2)
|
||||
filler2.set_opacity(opacity)
|
||||
|
||||
return .
|
||||
|
||||
/obj/machinery/door/airlock/multi_tile/proc/SetBounds()
|
||||
if(dir in list(EAST, WEST))
|
||||
bound_width = width * world.icon_size
|
||||
@@ -19,9 +48,35 @@
|
||||
bound_width = world.icon_size
|
||||
bound_height = width * world.icon_size
|
||||
|
||||
/obj/machinery/door/airlock/multi_tile/proc/create_fillers()
|
||||
if(src.dir > 3)
|
||||
filler1 = new/obj/machinery/filler_object (src.loc)
|
||||
filler2 = new/obj/machinery/filler_object (get_step(src,EAST))
|
||||
else
|
||||
filler1 = new/obj/machinery/filler_object (src.loc)
|
||||
filler2 = new/obj/machinery/filler_object (get_step(src,NORTH))
|
||||
filler1.density = 0
|
||||
filler2.density = 0
|
||||
filler1.set_opacity(opacity)
|
||||
filler2.set_opacity(opacity)
|
||||
|
||||
/obj/machinery/door/airlock/multi_tile/glass
|
||||
name = "Glass Airlock"
|
||||
icon = 'icons/obj/doors/Door2x1glass.dmi'
|
||||
opacity = 0
|
||||
glass = 1
|
||||
assembly_type = /obj/structure/door_assembly/multi_tile
|
||||
|
||||
/obj/machinery/door/airlock/multi_tile/metal
|
||||
name = "Airlock"
|
||||
icon = 'icons/obj/doors/Door2x1metal.dmi'
|
||||
assembly_type = /obj/structure/door_assembly/multi_tile
|
||||
|
||||
/obj/machinery/filler_object
|
||||
name = ""
|
||||
icon = 'icons/obj/doors/rapid_pdoor.dmi'
|
||||
icon_state = ""
|
||||
density = 0
|
||||
|
||||
/obj/machinery/door/airlock/multi_tile/metal/mait
|
||||
icon = 'icons/obj/doors/Door2x1_Maint.dmi'
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
/obj/machinery/power/supply_beacon/attackby(var/obj/item/weapon/W, var/mob/user)
|
||||
if(!use_power && istype(W, /obj/item/weapon/wrench))
|
||||
if(!anchored && !connect_to_network())
|
||||
user << "<span class='warning'>This device must be placed over an exposed cable.</span>"
|
||||
to_chat(user, "<span class='warning'>This device must be placed over an exposed cable.</span>")
|
||||
return
|
||||
anchored = !anchored
|
||||
user.visible_message("<span class='notice'>\The [user] [anchored ? "secures" : "unsecures"] \the [src].</span>")
|
||||
@@ -59,13 +59,13 @@
|
||||
|
||||
if(expended)
|
||||
use_power = 0
|
||||
user << "<span class='warning'>\The [src] has used up its charge.</span>"
|
||||
to_chat (user, "<span class='warning'>\The [src] has used up its charge.</span>")
|
||||
return
|
||||
|
||||
if(anchored)
|
||||
return use_power ? deactivate(user) : activate(user)
|
||||
else
|
||||
user << "<span class='warning'>You need to secure the beacon with a wrench first!</span>"
|
||||
to_chat(user, "<span class='warning'>You need to secure the beacon with a wrench first!</span>")
|
||||
return
|
||||
|
||||
/obj/machinery/power/supply_beacon/attack_ai(var/mob/user)
|
||||
@@ -76,12 +76,12 @@
|
||||
if(expended)
|
||||
return
|
||||
if(surplus() < 500)
|
||||
if(user) user << "<span class='notice'>The connected wire doesn't have enough current.</span>"
|
||||
if(user) to_chat(user, "<span class='notice'>The connected wire doesn't have enough current.</span>")
|
||||
return
|
||||
set_light(3, 3, "#00CCAA")
|
||||
icon_state = "beacon_active"
|
||||
use_power = 1
|
||||
if(user) user << "<span class='notice'>You activate the beacon. The supply drop will be dispatched soon.</span>"
|
||||
if(user) to_chat(user, "<span class='notice'>You activate the beacon. The supply drop will be dispatched soon.</span>")
|
||||
|
||||
/obj/machinery/power/supply_beacon/proc/deactivate(var/mob/user, var/permanent)
|
||||
if(permanent)
|
||||
@@ -92,7 +92,7 @@
|
||||
set_light(0)
|
||||
use_power = 0
|
||||
target_drop_time = null
|
||||
if(user) user << "<span class='notice'>You deactivate the beacon.</span>"
|
||||
if(user) to_chat(user, "<span class='notice'>You deactivate the beacon.</span>")
|
||||
|
||||
/obj/machinery/power/supply_beacon/Destroy()
|
||||
if(use_power)
|
||||
|
||||
@@ -374,7 +374,10 @@
|
||||
// This proc is used so that we can return out of the revive process while ensuring that busy and update_icon() are handled
|
||||
/obj/item/weapon/shockpaddles/proc/do_revive(mob/living/carbon/human/H, mob/user)
|
||||
if(!H.client && !H.teleop)
|
||||
to_chat(find_dead_player(H.ckey, 1), "Someone is attempting to resuscitate you. Re-enter your body if you want to be revived!")
|
||||
for(var/mob/observer/dead/ghost in player_list)
|
||||
if(ghost.mind == H.mind)
|
||||
to_chat(ghost, "<b><font color = #330033><font size = 3>Someone is attempting to resuscitate you. Re-enter your body if you want to be revived!</b> (Verbs -> Ghost -> Re-enter corpse)</font></font>")
|
||||
break
|
||||
|
||||
//beginning to place the paddles on patient's chest to allow some time for people to move away to stop the process
|
||||
user.visible_message("<span class='warning'>\The [user] begins to place [src] on [H]'s chest.</span>", "<span class='warning'>You begin to place [src] on [H]'s chest...</span>")
|
||||
|
||||
@@ -290,6 +290,7 @@
|
||||
name = "desk lamp"
|
||||
desc = "A desk lamp with an adjustable mount."
|
||||
icon_state = "lamp"
|
||||
force = 10
|
||||
brightness_on = 5
|
||||
w_class = ITEMSIZE_LARGE
|
||||
flags = CONDUCT
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
|
||||
name = "light replacer"
|
||||
desc = "A device to automatically replace lights. Refill with working lightbulbs or sheets of glass."
|
||||
|
||||
force = 8
|
||||
icon = 'icons/obj/janitor.dmi'
|
||||
icon_state = "lightreplacer0"
|
||||
flags = CONDUCT
|
||||
@@ -61,32 +61,32 @@
|
||||
|
||||
/obj/item/device/lightreplacer/examine(mob/user)
|
||||
if(..(user, 2))
|
||||
user << "It has [uses] lights remaining."
|
||||
to_chat(user, "It has [uses] lights remaining.")
|
||||
|
||||
/obj/item/device/lightreplacer/attackby(obj/item/W, mob/user)
|
||||
if(istype(W, /obj/item/stack/material) && W.get_material_name() == "glass")
|
||||
var/obj/item/stack/G = W
|
||||
if(uses >= max_uses)
|
||||
user << "<span class='warning'>[src.name] is full.</span>"
|
||||
to_chat(user, "<span class='warning'>[src.name] is full.</span>")
|
||||
return
|
||||
else if(G.use(1))
|
||||
AddUses(16) //Autolathe converts 1 sheet into 16 lights.
|
||||
user << "<span class='notice'>You insert a piece of glass into \the [src.name]. You have [uses] light\s remaining.</span>"
|
||||
add_uses(16) //Autolathe converts 1 sheet into 16 lights.
|
||||
to_chat(user, "<span class='notice'>You insert a piece of glass into \the [src.name]. You have [uses] light\s remaining.</span>")
|
||||
return
|
||||
else
|
||||
user << "<span class='warning'>You need one sheet of glass to replace lights.</span>"
|
||||
to_chat(user, "<span class='warning'>You need one sheet of glass to replace lights.</span>")
|
||||
|
||||
if(istype(W, /obj/item/weapon/light))
|
||||
var/obj/item/weapon/light/L = W
|
||||
if(L.status == 0) // LIGHT OKAY
|
||||
if(uses < max_uses)
|
||||
AddUses(1)
|
||||
user << "You insert \the [L.name] into \the [src.name]. You have [uses] light\s remaining."
|
||||
add_uses(1)
|
||||
to_chat(user, "You insert \the [L.name] into \the [src.name]. You have [uses] light\s remaining.")
|
||||
user.drop_item()
|
||||
qdel(L)
|
||||
return
|
||||
else
|
||||
user << "You need a working light."
|
||||
to_chat(user, "You need a working light.")
|
||||
return
|
||||
|
||||
/obj/item/device/lightreplacer/attack_self(mob/user)
|
||||
@@ -95,10 +95,10 @@
|
||||
var/mob/living/silicon/robot/R = user
|
||||
if(R.emagged)
|
||||
src.Emag()
|
||||
usr << "You shortcircuit the [src]."
|
||||
to_chat(usr, You short circuit the [src].")
|
||||
return
|
||||
*/
|
||||
usr << "It has [uses] lights remaining."
|
||||
to_chat(usr, "It has [uses] lights remaining.")
|
||||
|
||||
/obj/item/device/lightreplacer/update_icon()
|
||||
icon_state = "lightreplacer[emagged]"
|
||||
@@ -107,17 +107,17 @@
|
||||
/obj/item/device/lightreplacer/proc/Use(var/mob/user)
|
||||
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
|
||||
AddUses(-1)
|
||||
add_uses(-1)
|
||||
return 1
|
||||
|
||||
// Negative numbers will subtract
|
||||
/obj/item/device/lightreplacer/proc/AddUses(var/amount = 1)
|
||||
/obj/item/device/lightreplacer/proc/add_uses(var/amount = 1)
|
||||
uses = min(max(uses + amount, 0), max_uses)
|
||||
|
||||
/obj/item/device/lightreplacer/proc/Charge(var/mob/user, var/amount = 1)
|
||||
charge += amount
|
||||
if(charge > 6)
|
||||
AddUses(1)
|
||||
add_uses(1)
|
||||
charge = 0
|
||||
|
||||
/obj/item/device/lightreplacer/proc/ReplaceLight(var/obj/machinery/light/target, var/mob/living/U)
|
||||
|
||||
@@ -426,12 +426,12 @@
|
||||
for(var/obj/item/weapon/light/L in src.contents)
|
||||
if(L.status == 0)
|
||||
if(LP.uses < LP.max_uses)
|
||||
LP.AddUses(1)
|
||||
LP.add_uses(1)
|
||||
amt_inserted++
|
||||
remove_from_storage(L, T)
|
||||
qdel(L)
|
||||
if(amt_inserted)
|
||||
user << "You inserted [amt_inserted] light\s into \the [LP.name]. You have [LP.uses] light\s remaining."
|
||||
to_chat(user, "You inserted [amt_inserted] light\s into \the [LP.name]. You have [LP.uses] light\s remaining.")
|
||||
return
|
||||
|
||||
if(!can_be_inserted(W))
|
||||
@@ -441,14 +441,14 @@
|
||||
var/obj/item/weapon/tray/T = W
|
||||
if(T.calc_carry() > 0)
|
||||
if(prob(85))
|
||||
user << "<span class='warning'>The tray won't fit in [src].</span>"
|
||||
to_chat(user, "<span class='warning'>The tray won't fit in [src].</span>")
|
||||
return
|
||||
else
|
||||
W.forceMove(get_turf(user))
|
||||
if ((user.client && user.s_active != src))
|
||||
user.client.screen -= W
|
||||
W.dropped(user)
|
||||
user << "<span class='warning'>God damnit!</span>"
|
||||
to_chat(user, "<span class='warning'>God damn it!</span>")
|
||||
|
||||
W.add_fingerprint(user)
|
||||
return handle_item_insertion(W)
|
||||
@@ -506,9 +506,9 @@
|
||||
collection_mode = !collection_mode
|
||||
switch (collection_mode)
|
||||
if(1)
|
||||
usr << "[src] now picks up all items in a tile at once."
|
||||
to_chat(usr, "[src] now picks up all items on a tile at once.")
|
||||
if(0)
|
||||
usr << "[src] now picks up one item at a time."
|
||||
to_chat(usr, "[src] now picks up one item at a time.")
|
||||
|
||||
|
||||
/obj/item/weapon/storage/verb/quick_empty()
|
||||
@@ -539,7 +539,7 @@
|
||||
var/total_storage_space = 0
|
||||
for(var/obj/item/I in contents)
|
||||
total_storage_space += I.get_storage_cost()
|
||||
max_storage_space = max(total_storage_space,max_storage_space) //prevents spawned containers from being too small for their contents
|
||||
max_storage_space = max(total_storage_space,max_storage_space) //Prevents spawned containers from being too small for their contents.
|
||||
|
||||
src.boxes = new /obj/screen/storage( )
|
||||
src.boxes.name = "storage"
|
||||
|
||||
@@ -1060,4 +1060,22 @@ var/list/multi_point_spawns
|
||||
/obj/item/clothing/suit/space/void/security/riot,
|
||||
/obj/item/clothing/head/helmet/space/void/security/riot
|
||||
)
|
||||
)
|
||||
|
||||
/obj/random/multiple/voidsuit/mining
|
||||
name = "Random Mining Voidsuit"
|
||||
desc = "This is a random mining voidsuit."
|
||||
icon = 'icons/obj/clothing/suits.dmi'
|
||||
icon_state = "rig-mining"
|
||||
|
||||
/obj/random/multiple/voidsuit/mining/item_to_spawn()
|
||||
return pick(
|
||||
prob(5);list(
|
||||
/obj/item/clothing/suit/space/void/mining,
|
||||
/obj/item/clothing/head/helmet/space/void/mining
|
||||
),
|
||||
prob(1);list(
|
||||
/obj/item/clothing/suit/space/void/mining/alt,
|
||||
/obj/item/clothing/head/helmet/space/void/mining/alt
|
||||
)
|
||||
)
|
||||
@@ -77,6 +77,9 @@
|
||||
return
|
||||
return
|
||||
|
||||
/obj/structure/morgue/attack_robot(mob/user)
|
||||
if(Adjacent(user))
|
||||
attack_hand(user)
|
||||
|
||||
/obj/structure/morgue/attack_hand(mob/user as mob)
|
||||
if (src.connected)
|
||||
@@ -156,6 +159,10 @@
|
||||
connected = null
|
||||
return ..()
|
||||
|
||||
/obj/structure/m_tray/attack_robot(mob/user)
|
||||
if(Adjacent(user))
|
||||
attack_hand(user)
|
||||
|
||||
/obj/structure/m_tray/attack_hand(mob/user as mob)
|
||||
if (src.connected)
|
||||
for(var/atom/movable/A as mob|obj in src.loc)
|
||||
@@ -181,7 +188,7 @@
|
||||
if (user != O)
|
||||
for(var/mob/B in viewers(user, 3))
|
||||
if ((B.client && !( B.blinded )))
|
||||
B << "<span class='warning'>\The [user] stuffs [O] into [src]!</span>"
|
||||
to_chat(B, "<span class='warning'>\The [user] stuffs [O] into [src]!</span>")
|
||||
return
|
||||
|
||||
|
||||
@@ -189,25 +196,16 @@
|
||||
* Crematorium
|
||||
*/
|
||||
|
||||
/obj/structure/crematorium
|
||||
/obj/structure/morgue/crematorium
|
||||
name = "crematorium"
|
||||
desc = "A human incinerator. Works well on barbeque nights."
|
||||
icon = 'icons/obj/stationobjs.dmi'
|
||||
icon_state = "crema1"
|
||||
density = 1
|
||||
var/obj/structure/c_tray/connected = null
|
||||
anchored = 1.0
|
||||
var/cremating = 0
|
||||
var/id = 1
|
||||
var/locked = 0
|
||||
|
||||
/obj/structure/crematorium/Destroy()
|
||||
if(connected)
|
||||
qdel(connected)
|
||||
connected = null
|
||||
return ..()
|
||||
|
||||
/obj/structure/crematorium/proc/update()
|
||||
/obj/structure/morgue/crematorium/update()
|
||||
if (src.connected)
|
||||
src.icon_state = "crema0"
|
||||
else
|
||||
@@ -217,37 +215,7 @@
|
||||
src.icon_state = "crema1"
|
||||
return
|
||||
|
||||
/obj/structure/crematorium/ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
for(var/atom/movable/A as mob|obj in src)
|
||||
A.forceMove(src.loc)
|
||||
ex_act(severity)
|
||||
qdel(src)
|
||||
return
|
||||
if(2.0)
|
||||
if (prob(50))
|
||||
for(var/atom/movable/A as mob|obj in src)
|
||||
A.forceMove(src.loc)
|
||||
ex_act(severity)
|
||||
qdel(src)
|
||||
return
|
||||
if(3.0)
|
||||
if (prob(5))
|
||||
for(var/atom/movable/A as mob|obj in src)
|
||||
A.forceMove(src.loc)
|
||||
ex_act(severity)
|
||||
qdel(src)
|
||||
return
|
||||
return
|
||||
|
||||
/obj/structure/crematorium/attack_hand(mob/user as mob)
|
||||
// if (cremating) AWW MAN! THIS WOULD BE SO MUCH MORE FUN ... TO WATCH
|
||||
// user.show_message("<span class='warning'>Uh-oh, that was a bad idea.</span>", 1)
|
||||
// //usr << "Uh-oh, that was a bad idea."
|
||||
// src:loc:poison += 20000000
|
||||
// src:loc:firelevel = src:loc:poison
|
||||
// return
|
||||
/obj/structure/morgue/crematorium/attack_hand(mob/user as mob)
|
||||
if (cremating)
|
||||
usr << "<span class='warning'>It's locked.</span>"
|
||||
return
|
||||
@@ -260,10 +228,10 @@
|
||||
qdel(src.connected)
|
||||
else if (src.locked == 0)
|
||||
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
src.connected = new /obj/structure/c_tray( src.loc )
|
||||
step(src.connected, SOUTH)
|
||||
src.connected = new /obj/structure/m_tray/c_tray( src.loc )
|
||||
step(src.connected, EAST)
|
||||
src.connected.layer = OBJ_LAYER
|
||||
var/turf/T = get_step(src, SOUTH)
|
||||
var/turf/T = get_step(src, EAST)
|
||||
if (T.contents.Find(src.connected))
|
||||
src.connected.connected = src
|
||||
src.icon_state = "crema0"
|
||||
@@ -276,7 +244,7 @@
|
||||
src.add_fingerprint(user)
|
||||
update()
|
||||
|
||||
/obj/structure/crematorium/attackby(P as obj, mob/user as mob)
|
||||
/obj/structure/morgue/crematorium/attackby(P as obj, mob/user as mob)
|
||||
if (istype(P, /obj/item/weapon/pen))
|
||||
var/t = input(user, "What would you like the label to be?", text("[]", src.name), null) as text
|
||||
if (user.get_active_hand() != P)
|
||||
@@ -291,13 +259,13 @@
|
||||
src.add_fingerprint(user)
|
||||
return
|
||||
|
||||
/obj/structure/crematorium/relaymove(mob/user as mob)
|
||||
/obj/structure/morgue/crematorium/relaymove(mob/user as mob)
|
||||
if (user.stat || locked)
|
||||
return
|
||||
src.connected = new /obj/structure/c_tray( src.loc )
|
||||
step(src.connected, SOUTH)
|
||||
src.connected = new /obj/structure/m_tray/c_tray( src.loc )
|
||||
step(src.connected, EAST)
|
||||
src.connected.layer = OBJ_LAYER
|
||||
var/turf/T = get_step(src, SOUTH)
|
||||
var/turf/T = get_step(src, EAST)
|
||||
if (T.contents.Find(src.connected))
|
||||
src.connected.connected = src
|
||||
src.icon_state = "crema0"
|
||||
@@ -309,25 +277,22 @@
|
||||
src.connected = null
|
||||
return
|
||||
|
||||
/obj/structure/crematorium/proc/cremate(atom/A, mob/user as mob)
|
||||
// for(var/obj/machinery/crema_switch/O in src) //trying to figure a way to call the switch, too drunk to sort it out atm
|
||||
// if(var/on == 1)
|
||||
// return
|
||||
/obj/structure/morgue/crematorium/proc/cremate(atom/A, mob/user as mob)
|
||||
if(cremating)
|
||||
return //don't let you cremate something twice or w/e
|
||||
|
||||
if(contents.len <= 0)
|
||||
for (var/mob/M in viewers(src))
|
||||
M.show_message("<span class='warning'>You hear a hollow crackle.</span>", 1)
|
||||
to_chat(M,"<span class='warning'>You hear a hollow crackle.</span>")
|
||||
return
|
||||
|
||||
else
|
||||
if(!isemptylist(src.search_contents_for(/obj/item/weapon/disk/nuclear)))
|
||||
usr << "You get the feeling that you shouldn't cremate one of the items in the cremator."
|
||||
to_chat(user,"You get the feeling that you shouldn't cremate one of the items in the cremator.")
|
||||
return
|
||||
|
||||
for (var/mob/M in viewers(src))
|
||||
M.show_message("<span class='warning'>You hear a roar as the crematorium activates.</span>", 1)
|
||||
to_chat(M,"<span class='warning'>You hear a roar as the crematorium activates.</span>")
|
||||
|
||||
cremating = 1
|
||||
locked = 1
|
||||
@@ -363,51 +328,11 @@
|
||||
/*
|
||||
* Crematorium tray
|
||||
*/
|
||||
/obj/structure/c_tray
|
||||
/obj/structure/m_tray/c_tray
|
||||
name = "crematorium tray"
|
||||
desc = "Apply body before burning."
|
||||
icon = 'icons/obj/stationobjs.dmi'
|
||||
icon_state = "cremat"
|
||||
density = 1
|
||||
layer = 2.0
|
||||
var/obj/structure/crematorium/connected = null
|
||||
anchored = 1
|
||||
throwpass = 1
|
||||
|
||||
/obj/structure/c_tray/Destroy()
|
||||
if(connected && connected.connected == src)
|
||||
connected.connected = null
|
||||
connected = null
|
||||
return ..()
|
||||
|
||||
/obj/structure/c_tray/attack_hand(mob/user as mob)
|
||||
if (src.connected)
|
||||
for(var/atom/movable/A as mob|obj in src.loc)
|
||||
if (!( A.anchored ))
|
||||
A.forceMove(src.connected)
|
||||
//Foreach goto(26)
|
||||
src.connected.connected = null
|
||||
src.connected.update()
|
||||
add_fingerprint(user)
|
||||
//SN src = null
|
||||
qdel(src)
|
||||
return
|
||||
return
|
||||
|
||||
/obj/structure/c_tray/MouseDrop_T(atom/movable/O as mob|obj, mob/user as mob)
|
||||
if ((!( istype(O, /atom/movable) ) || O.anchored || get_dist(user, src) > 1 || get_dist(user, O) > 1 || user.contents.Find(src) || user.contents.Find(O)))
|
||||
return
|
||||
if (!ismob(O) && !istype(O, /obj/structure/closet/body_bag))
|
||||
return
|
||||
if (!ismob(user) || user.stat || user.lying || user.stunned)
|
||||
return
|
||||
O.forceMove(src.loc)
|
||||
if (user != O)
|
||||
for(var/mob/B in viewers(user, 3))
|
||||
if ((B.client && !( B.blinded )))
|
||||
B << text("<span class='warning'>[] stuffs [] into []!</span>", user, O, src)
|
||||
//Foreach goto(99)
|
||||
return
|
||||
|
||||
/obj/machinery/button/crematorium
|
||||
name = "crematorium igniter"
|
||||
@@ -421,9 +346,9 @@
|
||||
if(..())
|
||||
return
|
||||
if(src.allowed(user))
|
||||
for (var/obj/structure/crematorium/C in world)
|
||||
for (var/obj/structure/morgue/crematorium/C in world)
|
||||
if (C.id == id)
|
||||
if (!C.cremating)
|
||||
C.cremate(user)
|
||||
else
|
||||
usr << "<span class='warning'>Access denied.</span>"
|
||||
to_chat(user,"<span class='warning'>Access denied.</span>")
|
||||
|
||||
@@ -428,7 +428,7 @@
|
||||
var/list/dirs = list()
|
||||
if(anchored)
|
||||
for(var/obj/structure/window/W in orange(src,1))
|
||||
if(W.anchored && W.density && W.type == src.type && W.is_fulltile()) //Only counts anchored, not-destroyed fill-tile windows.
|
||||
if(W.anchored && W.density && W.glasstype == src.glasstype && W.is_fulltile()) //Only counts anchored, not-destroyed fill-tile windows.
|
||||
dirs += get_dir(src, W)
|
||||
|
||||
var/list/connections = dirs_to_corner_states(dirs)
|
||||
|
||||
@@ -1467,7 +1467,7 @@ datum/admins/var/obj/item/weapon/paper/admin/faxreply // var to hold fax replies
|
||||
|
||||
|
||||
|
||||
if(destination.recievefax(P))
|
||||
if(destination.receivefax(P))
|
||||
src.owner << "<span class='notice'>Message reply to transmitted successfully.</span>"
|
||||
if(P.sender) // sent as a reply
|
||||
log_admin("[key_name(src.owner)] replied to a fax message from [key_name(P.sender)]")
|
||||
|
||||
@@ -112,6 +112,8 @@ list[](
|
||||
|
||||
/datum/integrated_io/proc/write_data_to_pin(var/new_data)
|
||||
if(isnull(new_data) || isnum(new_data) || istext(new_data) || isweakref(new_data)) // Anything else is a type we don't want.
|
||||
if(istext(new_data))
|
||||
new_data = sanitizeSafe(new_data, MAX_MESSAGE_LEN, 0, 0)
|
||||
data = new_data
|
||||
holder.on_data_written()
|
||||
|
||||
|
||||
@@ -4,11 +4,14 @@
|
||||
|
||||
/datum/integrated_io/string/ask_for_pin_data(mob/user)
|
||||
var/new_data = input("Please type in a string.","[src] string writing") as null|text
|
||||
if(holder.check_interactivity(user) )
|
||||
new_data = sanitizeSafe(new_data, MAX_MESSAGE_LEN, 0, 0)
|
||||
|
||||
if(new_data && holder.check_interactivity(user) )
|
||||
to_chat(user, "<span class='notice'>You input [new_data ? "new_data" : "NULL"] into the pin.</span>")
|
||||
write_data_to_pin(new_data)
|
||||
|
||||
/datum/integrated_io/string/write_data_to_pin(var/new_data)
|
||||
new_data = sanitizeSafe(new_data, MAX_MESSAGE_LEN, 0, 0)
|
||||
if(isnull(new_data) || istext(new_data))
|
||||
data = new_data
|
||||
holder.on_data_written()
|
||||
|
||||
@@ -125,6 +125,7 @@
|
||||
if("string")
|
||||
accepting_refs = 0
|
||||
new_data = input("Now type in a string.","[src] string writing") as null|text
|
||||
new_data = sanitizeSafe(new_data, MAX_MESSAGE_LEN, 0, 0)
|
||||
if(istext(new_data) && CanInteract(user, physical_state))
|
||||
data_to_write = new_data
|
||||
to_chat(user, "<span class='notice'>You set \the [src]'s memory to \"[new_data]\".</span>")
|
||||
|
||||
@@ -85,7 +85,7 @@ var/datum/species/shapeshifter/promethean/prometheans
|
||||
/mob/living/carbon/human/proc/regenerate
|
||||
)
|
||||
|
||||
valid_transform_species = list("Human", "Unathi", "Tajara", "Skrell", "Diona", "Teshari", "Monkey")
|
||||
valid_transform_species = list("Human", "Vatborn", "Unathi", "Tajara", "Skrell", "Diona", "Teshari", "Monkey")
|
||||
monochromatic = 1
|
||||
|
||||
var/heal_rate = 0.5 // Temp. Regen per tick.
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
shuttle.area_offsite = shuttle.area_station
|
||||
shuttle_controller.shuttles[shuttle_tag] = shuttle
|
||||
shuttle_controller.process_shuttles += shuttle
|
||||
testing("Exploration shuttle '[shuttle_tag]' at zlevel [z] successfully added.")
|
||||
testing("Exploration shuttle '[shuttle_tag]' at z-level [z] successfully added.")
|
||||
|
||||
//Sets destination to new sector. Can be null.
|
||||
/obj/machinery/computer/shuttle_control/explore/proc/update_destination(var/obj/effect/map/D)
|
||||
@@ -84,7 +84,7 @@
|
||||
else
|
||||
shuttle_status = "Standing-by at offsite location."
|
||||
if(WAIT_LAUNCH, FORCE_LAUNCH)
|
||||
shuttle_status = "Shuttle has recieved command and will depart shortly."
|
||||
shuttle_status = "Shuttle has received command and will depart shortly."
|
||||
if(WAIT_ARRIVE)
|
||||
shuttle_status = "Proceeding to destination."
|
||||
if(WAIT_FINISH)
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
|
||||
text = "<hr><font size= \"1\">"
|
||||
text += "This transmission is intended only for the addressee and may contain confidential information. Any unauthorized disclosure is strictly prohibited. <br><br>"
|
||||
text += "If this transmission is recieved in error, please notify both the sender and the office of [using_map.boss_name] Internal Affairs immediately so that corrective action may be taken."
|
||||
text += "If this transmission is received in error, please notify both the sender and the office of [using_map.boss_name] Internal Affairs immediately so that corrective action may be taken."
|
||||
text += "Failure to comply is a breach of regulation and may be prosecuted to the fullest extent of the law, where applicable."
|
||||
text += "</font>"
|
||||
|
||||
|
||||
@@ -80,7 +80,7 @@ var/list/adminfaxes = list() //cache for faxes that have been sent to admins
|
||||
if(copyitem)
|
||||
copyitem.loc = usr.loc
|
||||
usr.put_in_hands(copyitem)
|
||||
usr << "<span class='notice'>You take \the [copyitem] out of \the [src].</span>"
|
||||
to_chat(usr, "<span class='notice'>You take \the [copyitem] out of \the [src].</span>")
|
||||
copyitem = null
|
||||
|
||||
if(href_list["scan"])
|
||||
@@ -124,7 +124,7 @@ var/list/adminfaxes = list() //cache for faxes that have been sent to admins
|
||||
var/success = 0
|
||||
for(var/obj/machinery/photocopier/faxmachine/F in allfaxes)
|
||||
if( F.department == destination )
|
||||
success = F.recievefax(copyitem)
|
||||
success = F.receivefax(copyitem)
|
||||
|
||||
if (success)
|
||||
visible_message("[src] beeps, \"Message transmitted successfully.\"")
|
||||
@@ -132,7 +132,7 @@ var/list/adminfaxes = list() //cache for faxes that have been sent to admins
|
||||
else
|
||||
visible_message("[src] beeps, \"Error transmitting message.\"")
|
||||
|
||||
/obj/machinery/photocopier/faxmachine/proc/recievefax(var/obj/item/incoming)
|
||||
/obj/machinery/photocopier/faxmachine/proc/receivefax(var/obj/item/incoming)
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return 0
|
||||
|
||||
@@ -164,7 +164,7 @@ var/list/adminfaxes = list() //cache for faxes that have been sent to admins
|
||||
|
||||
use_power(200)
|
||||
|
||||
//recieved copies should not use toner since it's being used by admins only.
|
||||
//received copies should not use toner since it's being used by admins only.
|
||||
var/obj/item/rcvdcopy
|
||||
if (istype(copyitem, /obj/item/weapon/paper))
|
||||
rcvdcopy = copy(copyitem, 0)
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
/obj/item/projectile/beam/darkmatter
|
||||
name = "dark matter bolt"
|
||||
icon_state = "darkb"
|
||||
damage = 60
|
||||
damage = 35
|
||||
armor_penetration = 35
|
||||
damage_type = BRUTE
|
||||
check_armour = "energy"
|
||||
|
||||
@@ -50,8 +50,8 @@
|
||||
if (istype(user, /obj/machinery/computer/shuttle_control/emergency))
|
||||
var/obj/machinery/computer/shuttle_control/emergency/C = user
|
||||
|
||||
//initiating or cancelling a launch ALWAYS requires authorization, but if we are already set to launch anyways than forcing does not.
|
||||
//this is so that people can force launch if the docking controller cannot safely undock without needing X heads to swipe.
|
||||
//Initiating or cancelling a launch ALWAYS requires authorization, but if we are already set to launch anyways than forcing does not.
|
||||
//This is so that people can force launch if the docking controller cannot safely undock without needing X heads to swipe.
|
||||
if (!(process_state == WAIT_LAUNCH || C.has_authorization()))
|
||||
return 0
|
||||
return ..()
|
||||
@@ -69,11 +69,11 @@
|
||||
if (istype(user, /obj/machinery/computer/shuttle_control/emergency)) //if we were given a command by an emergency shuttle console
|
||||
if (emergency_shuttle.autopilot)
|
||||
emergency_shuttle.autopilot = 0
|
||||
world << "<span class='notice'><b>Alert: The shuttle autopilot has been overridden. Launch sequence initiated!</b></span>"
|
||||
to_chat(world, "<span class='notice'><b>Alert: The shuttle autopilot has been overridden. Launch sequence initiated!</b></span>")
|
||||
|
||||
if(usr)
|
||||
log_admin("[key_name(usr)] has overridden the shuttle autopilot and activated launch sequence")
|
||||
message_admins("[key_name_admin(usr)] has overridden the shuttle autopilot and activated launch sequence")
|
||||
log_admin("[key_name(usr)] has overridden the departure shuttle's autopilot and activated the launch sequence.")
|
||||
message_admins("[key_name_admin(usr)] has overridden the departure shuttle's autopilot and activated the launch sequence.")
|
||||
|
||||
..(user)
|
||||
|
||||
@@ -83,11 +83,11 @@
|
||||
if (istype(user, /obj/machinery/computer/shuttle_control/emergency)) //if we were given a command by an emergency shuttle console
|
||||
if (emergency_shuttle.autopilot)
|
||||
emergency_shuttle.autopilot = 0
|
||||
world << "<span class='notice'><b>Alert: The shuttle autopilot has been overridden. Bluespace drive engaged!</b></span>"
|
||||
to_chat(world, "<span class='notice'><b>Alert: The shuttle autopilot has been overridden. Bluespace drive engaged!</b></span>")
|
||||
|
||||
if(usr)
|
||||
log_admin("[key_name(usr)] has overridden the shuttle autopilot and forced immediate launch")
|
||||
message_admins("[key_name_admin(usr)] has overridden the shuttle autopilot and forced immediate launch")
|
||||
log_admin("[key_name(usr)] has overridden the departure shuttle's autopilot and forced immediate launch.")
|
||||
message_admins("[key_name_admin(usr)] has overridden the departure shuttle's autopilot and forced immediate launch.")
|
||||
|
||||
..(user)
|
||||
|
||||
@@ -97,11 +97,11 @@
|
||||
if (istype(user, /obj/machinery/computer/shuttle_control/emergency)) //if we were given a command by an emergency shuttle console
|
||||
if (emergency_shuttle.autopilot)
|
||||
emergency_shuttle.autopilot = 0
|
||||
world << "<span class='notice'><b>Alert: The shuttle autopilot has been overridden. Launch sequence aborted!</b></span>"
|
||||
to_chat(world, "<span class='notice'><b>Alert: The shuttle autopilot has been overridden. Launch sequence aborted!</b></span>")
|
||||
|
||||
if(usr)
|
||||
log_admin("[key_name(usr)] has overridden the shuttle autopilot and cancelled launch sequence")
|
||||
message_admins("[key_name_admin(usr)] has overridden the shuttle autopilot and cancelled launch sequence")
|
||||
log_admin("[key_name(usr)] has overridden the departure shuttle's autopilot and cancelled the launch sequence.")
|
||||
message_admins("[key_name_admin(usr)] has overridden the departure shuttle's autopilot and cancelled the launch sequence.")
|
||||
|
||||
..(user)
|
||||
|
||||
@@ -117,7 +117,7 @@
|
||||
return (authorized.len >= req_authorizations || emagged)
|
||||
|
||||
/obj/machinery/computer/shuttle_control/emergency/proc/reset_authorization()
|
||||
//no need to reset emagged status. If they really want to go back to the station they can.
|
||||
//No need to reset emagged status. If they really want to go back to the station they can.
|
||||
authorized = initial(authorized)
|
||||
|
||||
//returns 1 if the ID was accepted and a new authorization was added, 0 otherwise
|
||||
@@ -145,16 +145,19 @@
|
||||
|
||||
if (dna_hash in authorized)
|
||||
src.visible_message("\The [src] buzzes. That ID has already been scanned.")
|
||||
playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 0)
|
||||
return 0
|
||||
|
||||
if (!(access_heads in access))
|
||||
src.visible_message("\The [src] buzzes, rejecting [ident].")
|
||||
playsound(src.loc, 'sound/machines/deniedbeep.ogg', 50, 0)
|
||||
return 0
|
||||
|
||||
src.visible_message("\The [src] beeps as it scans [ident].")
|
||||
playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 0)
|
||||
authorized[dna_hash] = auth_name
|
||||
if (req_authorizations - authorized.len)
|
||||
world << "<span class='notice'><b>Alert: [req_authorizations - authorized.len] authorization\s needed to override the shuttle autopilot.</b></span>"
|
||||
to_chat(world, "<span class='notice'><b>Alert: [req_authorizations - authorized.len] authorization\s needed to override the shuttle autopilot.</b></span>") //TODO- Belsima, make this an announcement instead of magic.
|
||||
|
||||
if(usr)
|
||||
log_admin("[key_name(usr)] has inserted [ID] into the shuttle control computer - [req_authorizations - authorized.len] authorisation\s needed")
|
||||
@@ -164,7 +167,7 @@
|
||||
|
||||
/obj/machinery/computer/shuttle_control/emergency/emag_act(var/remaining_charges, var/mob/user)
|
||||
if (!emagged)
|
||||
user << "<span class='notice'>You short out \the [src]'s authorization protocols.</span>"
|
||||
to_chat(user, "<span class='notice'>You short out \the [src]'s authorization protocols.</span>")
|
||||
emagged = 1
|
||||
return 1
|
||||
|
||||
@@ -190,11 +193,11 @@
|
||||
if (shuttle.in_use)
|
||||
shuttle_status = "Busy."
|
||||
else if (!shuttle.location)
|
||||
shuttle_status = "Standing-by at [station_name()]."
|
||||
shuttle_status = "Standing by at [station_name()]."
|
||||
else
|
||||
shuttle_status = "Standing-by at [using_map.dock_name]."
|
||||
shuttle_status = "Standing by at [using_map.dock_name]."
|
||||
if(WAIT_LAUNCH, FORCE_LAUNCH)
|
||||
shuttle_status = "Shuttle has recieved command and will depart shortly."
|
||||
shuttle_status = "Shuttle has received command and will depart shortly."
|
||||
if(WAIT_ARRIVE)
|
||||
shuttle_status = "Proceeding to destination."
|
||||
if(WAIT_FINISH)
|
||||
|
||||
@@ -174,7 +174,7 @@
|
||||
return
|
||||
|
||||
if (MS.moving_status != SHUTTLE_IDLE)
|
||||
usr << "<font color='blue'>[shuttle_tag] vessel is moving.</font>"
|
||||
to_chat(usr, "<font color='blue'>[shuttle_tag] vessel is moving.</font>")
|
||||
return
|
||||
|
||||
if(href_list["dock_command"])
|
||||
@@ -187,11 +187,11 @@
|
||||
|
||||
if(href_list["start"])
|
||||
if(MS.at_origin)
|
||||
usr << "<font color='red'>You are already at your home base.</font>"
|
||||
to_chat(usr, "<font color='red'>You are already at the home base.</font>")
|
||||
return
|
||||
|
||||
if((MS.last_move + MS.cooldown*10) > world.time)
|
||||
usr << "<font color='red'>The ship's drive is inoperable while the engines are charging.</font>"
|
||||
to_chat(usr, "<font color='red'>The ship's drive is inoperable while the engines are charging.</font>")
|
||||
return
|
||||
|
||||
if(!check_docking(MS))
|
||||
@@ -214,11 +214,11 @@
|
||||
if(!MS.can_cloak)
|
||||
return
|
||||
MS.cloaked = !MS.cloaked
|
||||
usr << "<font color='red'>Ship stealth systems have been [(MS.cloaked ? "activated. The station will not" : "deactivated. The station will")] be warned of our arrival.</font>"
|
||||
to_chat(usr, "<font color='red'>Ship stealth systems have been [(MS.cloaked ? "activated. The station will not" : "deactivated. The station will")] be warned of our arrival.</font>")
|
||||
|
||||
if(href_list["move_multi"])
|
||||
if((MS.last_move + MS.cooldown*10) > world.time)
|
||||
usr << "<font color='red'>The ship's drive is inoperable while the engines are charging.</font>"
|
||||
to_chat(usr, "<font color='red'>The ship's drive is inoperable while the engines are charging.</font>")
|
||||
return
|
||||
|
||||
if(!check_docking(MS))
|
||||
@@ -228,7 +228,7 @@
|
||||
var/choice = input("Select a destination.") as null|anything in MS.destinations
|
||||
if(!choice) return
|
||||
|
||||
usr << "<font color='blue'>[shuttle_tag] main computer recieved message.</font>"
|
||||
to_chat(usr, "<font color='blue'>[shuttle_tag] main computer received message.</font>")
|
||||
|
||||
if(MS.at_origin)
|
||||
MS.announce_arrival()
|
||||
|
||||
@@ -13,8 +13,8 @@
|
||||
/area/supply/station,
|
||||
/area/mine,
|
||||
/area/vacant/vacant_shop,
|
||||
/area/submap
|
||||
)
|
||||
/area/turbolift,
|
||||
/area/submap )
|
||||
|
||||
var/list/exempt_from_atmos = typesof(/area/maintenance,
|
||||
/area/storage,
|
||||
@@ -34,6 +34,11 @@
|
||||
/area/vacant/vacant_shop
|
||||
)
|
||||
|
||||
// Some maps have areas specific to the map, so include those.
|
||||
exempt_areas += using_map.unit_test_exempt_areas
|
||||
exempt_from_atmos += using_map.unit_test_exempt_from_atmos
|
||||
exempt_from_apc += using_map.unit_test_exempt_from_apc
|
||||
|
||||
for(var/area/A in world)
|
||||
if(A.z == 1 && !(A.type in exempt_areas))
|
||||
area_test_count++
|
||||
|
||||
|
Before Width: | Height: | Size: 86 KiB After Width: | Height: | Size: 87 KiB |
|
Before Width: | Height: | Size: 133 KiB After Width: | Height: | Size: 136 KiB |
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 8.4 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB |
BIN
icons/obj/doors/Door2x1_Maint.dmi
Normal file
|
After Width: | Height: | Size: 43 KiB |
|
Before Width: | Height: | Size: 321 KiB After Width: | Height: | Size: 89 KiB |
BIN
icons/obj/doors/Door2x1glass_old.dmi
Normal file
|
After Width: | Height: | Size: 321 KiB |
BIN
icons/obj/doors/Door2x1metal.dmi
Normal file
|
After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
BIN
icons/obj/doors/Dooratmo_old.dmi
Normal file
|
After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 19 KiB |
BIN
icons/obj/doors/Dooratmoglass_old.dmi
Normal file
|
After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 5.3 KiB |
BIN
icons/obj/doors/Doorbananium_old.dmi
Normal file
|
After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 5.4 KiB |
BIN
icons/obj/doors/Doorcom_old.dmi
Normal file
|
After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 18 KiB |
BIN
icons/obj/doors/Doorcomglass_old.dmi
Normal file
|
After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 5.3 KiB |
BIN
icons/obj/doors/Doordiamond_old.dmi
Normal file
|
After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 5.4 KiB |
BIN
icons/obj/doors/Dooreng_old.dmi
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 18 KiB |
BIN
icons/obj/doors/Doorengatmoglass_old.dmi
Normal file
|
After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 18 KiB |
BIN
icons/obj/doors/Doorengatmos_old.dmi
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 18 KiB |
BIN
icons/obj/doors/Doorengglass_old.dmi
Normal file
|
After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 5.6 KiB |
BIN
icons/obj/doors/Doorfreezer_old.dmi
Normal file
|
After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 17 KiB |
BIN
icons/obj/doors/Doorglass_old.dmi
Normal file
|
After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 5.3 KiB |
BIN
icons/obj/doors/Doorgold_old.dmi
Normal file
|
After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 5.5 KiB |
BIN
icons/obj/doors/Doormaint_cargo.dmi
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
icons/obj/doors/Doormaint_command.dmi
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
icons/obj/doors/Doormaint_common.dmi
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
icons/obj/doors/Doormaint_engi.dmi
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
icons/obj/doors/Doormaint_int.dmi
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
icons/obj/doors/Doormaint_med.dmi
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
icons/obj/doors/Doormaint_old.dmi
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
icons/obj/doors/Doormaint_rnd.dmi
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
icons/obj/doors/Doormaint_sec.dmi
Normal file
|
After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 5.4 KiB |
BIN
icons/obj/doors/Doormining_old.dmi
Normal file
|
After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 17 KiB |
BIN
icons/obj/doors/Doorminingglass_old.dmi
Normal file
|
After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 4.2 KiB |
BIN
icons/obj/doors/Doorphoron_old.dmi
Normal file
|
After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 5.3 KiB |
BIN
icons/obj/doors/Doorsand_old.dmi
Normal file
|
After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 18 KiB |
BIN
icons/obj/doors/Doorsec_old.dmi
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 18 KiB |
BIN
icons/obj/doors/Doorsecglass_old.dmi
Normal file
|
After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 4.2 KiB |
BIN
icons/obj/doors/Doorsilver_old.dmi
Normal file
|
After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 5.4 KiB |
BIN
icons/obj/doors/Dooruranium_old.dmi
Normal file
|
After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 29 KiB |
BIN
icons/obj/doors/door_assembly2x1_old.dmi
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
icons/obj/doors/door_assembly_old.dmi
Normal file
|
After Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 12 KiB |
BIN
icons/obj/doors/doorint_old.dmi
Normal file
|
After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 5.3 KiB |
BIN
icons/obj/doors/doormed_old.dmi
Normal file
|
After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 17 KiB |
BIN
icons/obj/doors/doormedglass_old.dmi
Normal file
|
After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 5.5 KiB |
BIN
icons/obj/doors/doorresearch_old.dmi
Normal file
|
After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 18 KiB |