mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-05-19 05:09:49 +01:00
d5849910e5
* Begin clickcode attack_self fix Begins the work to make everything call back to parent for attack_self so that signals are sacred. * Makes MORE things call the attack_self() parent Yes, I could make special_handling a var on obj/item HOWEVER i want it to be specific so it can be tracked down later and ONLY the objects that use it can be refactored instead of sitting there literally forever and it just becoming 'a thing'. * Finishes making the rest of attack_self call parent. As mentioned, things such as 'specialty_goggles' 'special_handling' and the such are only there to help with attack_self until the attack_self is recoded for those items. * begone foul demon * some more cleanup * These * GOD this was annoying * yeh * Fix this * fLARES * Thesee too * toys! * Even more! * More fixes * Even more * rest of em * these too * Update syndie.dm * hardref clear * Update code/game/gamemodes/nuclear/pinpointer.dm * Update code/game/objects/effects/mines.dm * Update code/game/objects/items/blueprints_vr.dm * Update code/game/objects/items/blueprints_vr.dm * Update code/game/objects/items/contraband_vr.dm * Update code/game/objects/items/crayons.dm * Update code/game/objects/items/crayons.dm * Update code/game/objects/items/gunbox.dm * Update code/game/objects/items/gunbox.dm * Update code/game/objects/items/gunbox_vr.dm * Update code/game/objects/items/gunbox_vr.dm * Update code/game/objects/items/weapons/gift_wrappaper.dm * Update code/game/objects/items/crayons.dm * Update code/game/objects/items/crayons.dm * Update code/game/objects/items/gunbox.dm * these too * Update maintpanel_stack.dm * angry warning * Fixes packaged snacks. Fixes improper var default. * Special handling for these * proper poly types * Fixes magclaws Makes the 'features' it had just part of base magboots that can be adjusted via varswap. * Fixes jackets Fixes https://github.com/VOREStation/VOREStation/issues/18941 * Small bugfix Makes p_Theyre properly capitialize Makes examine show proper wording * Update gift_wrappaper.dm
669 lines
24 KiB
Plaintext
669 lines
24 KiB
Plaintext
GLOBAL_LIST_EMPTY(unique_deployable)
|
|
/*****************************Survival Pod********************************/
|
|
/area/survivalpod
|
|
name = "\improper Emergency Shelter"
|
|
icon_state = "away"
|
|
dynamic_lighting = TRUE
|
|
requires_power = FALSE
|
|
has_gravity = TRUE
|
|
flags = AREA_ALWAYS_HAS_GRAVITY
|
|
|
|
/area/survivalpod/dorms
|
|
name = "\improper Emergency Shelter Dorm"
|
|
icon_state = "away1"
|
|
flags = RAD_SHIELDED | BLUE_SHIELDED | AREA_FLAG_IS_NOT_PERSISTENT | AREA_FORBID_EVENTS | AREA_FORBID_SINGULO | AREA_SOUNDPROOF | AREA_ALLOW_LARGE_SIZE | AREA_BLOCK_SUIT_SENSORS | AREA_BLOCK_TRACKING | AREA_ALWAYS_HAS_GRAVITY
|
|
|
|
/area/survivalpod/dorms/bathroom
|
|
name = "\improper Emergency Shelter Bathroom"
|
|
icon_state = "away2"
|
|
|
|
/area/survivalpod/redspace
|
|
name = "\improper Redspace Capsule Shelter"
|
|
icon_state = "darkred"
|
|
|
|
|
|
//Custom survival pod areas
|
|
|
|
/area/survivalpod/holly
|
|
name = "\improper Holly's Emergency Shelter"
|
|
|
|
/area/survivalpod/dorms/holly
|
|
name = "\improper Holly's Emergency Shelter Dorm"
|
|
|
|
//Survival Capsule
|
|
/obj/item/survivalcapsule
|
|
name = "surfluid shelter capsule"
|
|
desc = "An emergency shelter programmed into construction nanomachines. It has a license for use printed on the bottom."
|
|
icon_state = "houseball"
|
|
icon = 'icons/obj/device_alt.dmi'
|
|
w_class = ITEMSIZE_TINY
|
|
var/template_id = "shelter_alpha"
|
|
var/datum/map_template/shelter/template
|
|
var/used = FALSE
|
|
var/is_ship = FALSE
|
|
var/unique_id = null
|
|
var/admin_log_verb = "activated a bluespace capsule" // Just to make the blue/redspace ones distinct for admin logs
|
|
|
|
/obj/item/survivalcapsule/proc/get_template()
|
|
if(template)
|
|
return
|
|
template = SSmapping.shelter_templates[get_template_id()]
|
|
if(!template)
|
|
throw EXCEPTION("Shelter template ([template_id]) not found!")
|
|
qdel(src)
|
|
|
|
/obj/item/survivalcapsule/proc/get_template_id()
|
|
return template_id
|
|
|
|
/obj/item/survivalcapsule/proc/get_template_info()
|
|
var/ret = ""
|
|
if(!template)
|
|
get_template()
|
|
if(template)
|
|
ret += "This capsule has the [template.name] stored:\n"
|
|
ret += template.description
|
|
else
|
|
ret += "This capsule has an unknown template stored."
|
|
return ret
|
|
|
|
/// Creates and shows to the user a preview of the pod's shape, like the admin load template verb does. However, this one shows valid deploy turfs in blue, and invalid turfs in red.
|
|
/obj/item/survivalcapsule/proc/preview_template(var/mob/user, var/turf/deploy_turf, var/show_doors = FALSE)
|
|
if(!deploy_turf)
|
|
return
|
|
var/preview_render = list()
|
|
template.preload_size(template.mappath)
|
|
// Get origin (bottom-left) of shelter template relative to where we are on the map
|
|
var/turf/origin = locate(user.x - round((template.width)/2) , user.y - round((template.height)/2) , user.z)
|
|
var/turf/topright = locate(user.x + round((template.width)/2) , user.y + round((template.height)/2) , user.z)
|
|
if(!origin || !topright)
|
|
return
|
|
for(var/turf/S in template.get_affected_turfs(deploy_turf, centered = TRUE))
|
|
if(template.get_turf_deployability(S, is_ship) != SHELTER_DEPLOY_ALLOWED)
|
|
preview_render += image('icons/misc/debug_group.dmi',S ,"red")
|
|
else if(show_doors)
|
|
var/is_door_here = FALSE
|
|
for(var/list/door_coord in template.door_locations)
|
|
// If we're at a spot where a door is going to appear, display a green spot!
|
|
var/dX = origin.x + door_coord[1] - 1
|
|
var/dY = origin.y + door_coord[2] - 1
|
|
if(S.x == dX && S.y == dY)
|
|
preview_render += image('icons/misc/debug_group.dmi',S ,"green")
|
|
is_door_here = TRUE
|
|
break
|
|
if(!is_door_here)
|
|
preview_render += image('icons/misc/debug_group.dmi',S ,"blue")
|
|
else
|
|
preview_render += image('icons/misc/debug_group.dmi',S ,"blue")
|
|
user.client.images += preview_render
|
|
return preview_render
|
|
|
|
/obj/item/survivalcapsule/proc/remove_preview(var/mob/user, var/list/preview_render, var/fade_time = 1 SECOND)
|
|
if(fade_time > 0)
|
|
for(var/image/I in preview_render)
|
|
animate(I, alpha = 0, fade_time)
|
|
addtimer(CALLBACK(src, PROC_REF(delete_preview_render), user, preview_render), fade_time, TIMER_DELETE_ME)
|
|
else
|
|
delete_preview_render(user, preview_render)
|
|
|
|
/obj/item/survivalcapsule/proc/delete_preview_render(var/mob/user, var/list/preview_render)
|
|
user.client.images -= preview_render
|
|
|
|
/obj/item/survivalcapsule/proc/can_deploy(var/turf/deploy_location, var/turf/above_location)
|
|
var/status = template.check_deploy(deploy_location, is_ship)
|
|
switch(status)
|
|
//Not allowed due to /area technical reasons
|
|
if(SHELTER_DEPLOY_BAD_AREA)
|
|
src.loc.visible_message(span_warning("\The [src]'s safety mechanisms prevent it from activating in this area. You'll need to find an area that would be less disruptive to activate it!"))
|
|
|
|
//Anchored objects or no space
|
|
if(SHELTER_DEPLOY_BAD_TURFS, SHELTER_DEPLOY_ANCHORED_OBJECTS)
|
|
var/width = template.width
|
|
var/height = template.height
|
|
src.loc.visible_message(span_warning("\The [src] can be activated here, but doesn't have room to deploy! You need to clear a [width]x[height] area!"))
|
|
|
|
if(SHELTER_DEPLOY_SHIP_SPACE)
|
|
src.loc.visible_message(span_warning("\The [src] can only be deployed in space."))
|
|
|
|
if(status != SHELTER_DEPLOY_ALLOWED)
|
|
return FALSE
|
|
|
|
return TRUE
|
|
|
|
// First step: Warn and cancel deployment if necessary conditions aren't met. Otherwise generate smoke and wait a moment.
|
|
/obj/item/survivalcapsule/proc/deploy_step_one(var/mob/user)
|
|
var/turf/deploy_location = get_turf(src)
|
|
// We might have moved since the last check, so we check again!
|
|
if(!can_deploy(deploy_location, GetAbove(deploy_location)))
|
|
used = FALSE
|
|
return
|
|
|
|
var/datum/effect/effect/system/smoke_spread/smoke = new /datum/effect/effect/system/smoke_spread()
|
|
smoke.attach(deploy_location)
|
|
smoke.set_up(10, 0, deploy_location)
|
|
smoke.start()
|
|
|
|
addtimer(CALLBACK(src, PROC_REF(deploy_step_two), user), 4 SECONDS, TIMER_DELETE_ME)
|
|
|
|
// Second step: Load shelter template at location
|
|
/obj/item/survivalcapsule/proc/deploy_step_two(var/mob/user)
|
|
var/turf/deploy_location = get_turf(src)
|
|
var/turf/above_location = GetAbove(deploy_location)
|
|
// We might have moved since the last check, so we check again!
|
|
if(!can_deploy(deploy_location, above_location))
|
|
used = FALSE
|
|
return
|
|
|
|
if(unique_id)
|
|
GLOB.unique_deployable += unique_id
|
|
|
|
log_and_message_admins("[admin_log_verb] at [get_area(deploy_location)]!", user)
|
|
|
|
playsound(src, 'sound/effects/phasein.ogg', 100, 1)
|
|
|
|
// Load shelter template
|
|
if(above_location)
|
|
template.add_roof(above_location)
|
|
template.annihilate_plants(deploy_location)
|
|
template.load(deploy_location, centered = TRUE)
|
|
template.update_lighting(deploy_location)
|
|
qdel(src)
|
|
|
|
/obj/item/survivalcapsule/Destroy()
|
|
template = null // without this, capsules would be one use. per round.
|
|
. = ..()
|
|
|
|
/obj/item/survivalcapsule/examine(mob/user)
|
|
. = ..()
|
|
var/temp_info = get_template_info()
|
|
if(length(temp_info))
|
|
. += temp_info
|
|
|
|
/obj/item/survivalcapsule/attack_self(mob/user)
|
|
. = ..(user)
|
|
if(.)
|
|
return TRUE
|
|
//Can't grab when capsule is New() because templates aren't loaded then
|
|
get_template()
|
|
if(!used)
|
|
if(unique_id && (unique_id in GLOB.unique_deployable))
|
|
loc.visible_message(span_warning("There can only be one [src] deployed at a time."))
|
|
return
|
|
var/turf/deploy_location = get_turf(src)
|
|
// Warn the user in advance if the capsule can't work from where they're standing.
|
|
var/preview_render = preview_template(user, deploy_location)
|
|
// If there's no preview render, that means it couldn't get the bottom-left or top-right corner of the shelter template area
|
|
// So this is prooooobably somewhere outside the map bounds!
|
|
if(!preview_render)
|
|
loc.visible_message(span_warning("\The [src] is too close to the edge of this map to deploy!"))
|
|
return
|
|
if(!can_deploy(get_turf(src), GetAbove(deploy_location)))
|
|
addtimer(CALLBACK(src, PROC_REF(remove_preview), user, preview_render), 1 SECONDS, TIMER_DELETE_ME)
|
|
return
|
|
// We only show where the doors will be on a successful deploy check to avoid player confusion.
|
|
remove_preview(user, preview_render, 0)
|
|
preview_render = preview_template(user, deploy_location, show_doors = TRUE)
|
|
if(tgui_alert(usr,"Confirm location. (The shelter's exterior doors are highlighted in green!)", "Shelter Deploy Confirm",list("No","Yes")) == "Yes")
|
|
// We might have moved since the last check, so we check again!
|
|
if(!can_deploy(deploy_location, GetAbove(deploy_location)))
|
|
used = FALSE
|
|
return
|
|
loc.visible_message(span_warning("\The [src] begins to shake. Stand back!"))
|
|
user.drop_from_inventory(src)
|
|
used = TRUE
|
|
|
|
addtimer(CALLBACK(src, PROC_REF(deploy_step_one), user), 5 SECONDS, TIMER_DELETE_ME)
|
|
remove_preview(user, preview_render, 0)
|
|
|
|
/obj/item/survivalcapsule/luxury
|
|
name = "luxury surfluid shelter capsule"
|
|
desc = "An exorbitantly expensive luxury suite programmed into construction nanomachines. There's a license for use printed on the bottom."
|
|
template_id = "shelter_beta"
|
|
|
|
/obj/item/survivalcapsule/luxuryalt
|
|
name = "luxury alt surfluid shelter capsule"
|
|
desc = "An exorbitantly expensive luxury suite programmed into construction nanomachines. There's a license for use printed on the bottom."
|
|
template_id = "shelter_luxury_alt"
|
|
|
|
/obj/item/survivalcapsule/pocketdorm
|
|
name = "pocket dorm surfluid shelter capsule"
|
|
desc = "A little dorm programmed into construction nanomachines. There's a license for use printed on the bottom."
|
|
template_id = "shelter_pocket_dorm"
|
|
|
|
/obj/item/survivalcapsule/kitchen
|
|
name = "pocket dorm surfluid shelter capsule"
|
|
desc = "A kitchen programmed into construction nanomachines. There's a license for use printed on the bottom."
|
|
template_id = "shelter_kitchen"
|
|
|
|
/obj/item/survivalcapsule/luxurybar
|
|
name = "luxury surfluid bar capsule"
|
|
desc = "A luxury bar in a capsule. " + JOB_BARTENDER + " required and not included. There's a license for use printed on the bottom."
|
|
template_id = "shelter_gamma"
|
|
|
|
/obj/item/survivalcapsule/luxurycabin
|
|
name = "luxury surfluid cabin capsule"
|
|
desc = "A luxury cabin and kitchen in a capsule. There's a license for use printed on the bottom."
|
|
template_id = "shelter_cab_deluxe"
|
|
|
|
/obj/item/survivalcapsule/luxurycafe
|
|
name = "luxury surfluid cafe capsule"
|
|
desc = "A luxury cafe in a capsule. There's a license for use printed on the bottom."
|
|
template_id = "shelter_cafe"
|
|
|
|
/obj/item/survivalcapsule/luxuryrecroom
|
|
name = "luxury rec room cafe capsule"
|
|
desc = "A luxury rec room in a capsule. There's a license for use printed on the bottom."
|
|
template_id = "shelter_luxury_recroom"
|
|
|
|
/obj/item/survivalcapsule/military
|
|
name = "military surfluid shelter capsule"
|
|
desc = "A prefabricated firebase in a capsule. Contains basic weapons, building materials, and combat suits. There's a license for use printed on the bottom."
|
|
template_id = "shelter_delta"
|
|
|
|
/obj/item/survivalcapsule/escapepod
|
|
name = "escape surfluid shelter capsule"
|
|
desc = "A prefabricated escape pod in a capsule. Contains a basic escape pod for survival purposes. There's a license for use printed on the bottom."
|
|
template_id = "shelter_epsilon"
|
|
unique_id = "shelter_5"
|
|
is_ship = TRUE
|
|
|
|
/obj/item/survivalcapsule/popcabin
|
|
name = "pop-out cabin shelter capsule"
|
|
desc = "A cozy cabin; crammed into a survival capsule."
|
|
template_id = "shelter_cab"
|
|
|
|
/obj/item/survivalcapsule/recroom
|
|
name = "pop-out rec room shelter capsule"
|
|
desc = "A recreational room stuffed into a survival capsule."
|
|
template_id = "shelter_recroom"
|
|
|
|
/obj/item/survivalcapsule/sauna
|
|
name = "pop-out sauna shelter capsule"
|
|
desc = "A cozy sauna room stuffed into a survival capsule."
|
|
template_id = "shelter_sauna"
|
|
|
|
/obj/item/survivalcapsule/cafe
|
|
name = "pop-out cafe shelter capsule"
|
|
desc = "A cozy cafe stuffed into a survival capsule."
|
|
template_id = "shelter_cafe"
|
|
|
|
//Custom Shelter Capsules
|
|
/obj/item/survivalcapsule/tabiranth
|
|
name = "silver-trimmed surfluid shelter capsule"
|
|
desc = "An exorbitantly expensive luxury suite programmed into construction nanomachines. This one is a particularly rare and expensive model. There's a license for use printed on the bottom."
|
|
template_id = "shelter_phi"
|
|
unique_id = "shelter_a"
|
|
|
|
/obj/item/survivalcapsule/holly
|
|
name = "vaguely festive surfluid shelter capsule"
|
|
desc = "A \"homemade\" luxury suite crammed into a capsule. There's a license for use printed on the bottom. For some reason, the license's text is written in festive colors."
|
|
template_id = "shelter_chi"
|
|
unique_id = "shelter_h"
|
|
|
|
//Stupid
|
|
/obj/item/survivalcapsule/loss_1
|
|
name = "clinical surfluid shelter capsule"
|
|
desc = "A strange-looking shelter capsule. It looks rather crudely thrown together..."
|
|
template_id = "shelter_loss1"
|
|
|
|
/obj/item/survivalcapsule/loss_2
|
|
name = "clinical surfluid shelter capsule"
|
|
desc = "A strange-looking shelter capsule. It looks rather crudely thrown together..."
|
|
template_id = "shelter_loss2"
|
|
|
|
/obj/item/survivalcapsule/loss_3
|
|
name = "clinical surfluid shelter capsule"
|
|
desc = "A strange-looking shelter capsule. It looks rather crudely thrown together..."
|
|
template_id = "shelter_loss3"
|
|
|
|
/obj/item/survivalcapsule/loss_4
|
|
name = "clinical surfluid shelter capsule"
|
|
desc = "A strange-looking shelter capsule. It looks rather crudely thrown together..."
|
|
template_id = "shelter_loss4"
|
|
|
|
//Redspace Capsule
|
|
//Spawns a randomized shelter from a curated selection of possibilities
|
|
/obj/item/survivalcapsule/randomized
|
|
name = "redspace shelter capsule"
|
|
desc = "A strange-looking shelter capsule. Should the surfluid inside it be bubbling like that? There's a license for use printed on the bottom, as well as a warning about the unpredictable nature of redspace."
|
|
template_id = "placeholder_id_do_not_change"
|
|
admin_log_verb = "activated a redspace capsule"
|
|
var/possible_shelter_ids = list(
|
|
// "Normal" map table - Most common table.
|
|
// Meant to be actually inhabitable spots with neat things in them.
|
|
list(
|
|
"shelter_pizza_kitchen",
|
|
"shelter_nerd_dungeon_good",
|
|
"shelter_gallery",
|
|
"shelter_garden",
|
|
"shelter_off_color",
|
|
"shelter_living_room",
|
|
"shelter_candlelit_dinner",
|
|
) = 65, // 65% chance
|
|
|
|
// "Weird" map table - Less common.
|
|
// Here, we get a little silly with it. Not dangerous, but weird, kinda like redgates.
|
|
list(
|
|
"shelter_nerd_dungeon_evil",
|
|
"shelter_tiny_space",
|
|
"shelter_christmas",
|
|
"shelter_blacksmith",
|
|
) = 30, // 30% chance
|
|
|
|
// "Dangerous" map table - Least common by far, and for good reason.
|
|
// Places that have dangerous/illegal stuff in them.
|
|
list(
|
|
"shelter_dangerous_pool",
|
|
"shelter_methlab",
|
|
"shelter_mimic_hell",
|
|
) = 5, // 5% chance
|
|
)
|
|
|
|
/obj/item/survivalcapsule/randomized/get_template_id()
|
|
// Choose which table of maps we're gonna be choosing from, then pick a map in those
|
|
return pick(pickweight(possible_shelter_ids))
|
|
|
|
/obj/item/survivalcapsule/randomized/get_template_info()
|
|
var/ret = "It has a chaotic redspace bubble inside. The label reads:\n"
|
|
ret += "(7x7) This capsule utilizes experimental technology to replicate copies of redspace pockets within realspace. " + span_underline("The contents of this capsule are prone to change upon activation") + ", and are highly unlikely to remain the same as when previously used. Efforts have been made to ensure *likely* safety when using these capsules. However, due to the unpredictable nature of redspace, that safety cannot be fully guaranteed. " + span_underline("Use at your own risk!")
|
|
return ret
|
|
|
|
// TERRIBLE AWFUL CAPSULE DO NOT MAKE THIS PLAYER ACCESSIBLE, I made this for a BIT -Ryumi
|
|
/obj/item/survivalcapsule/tesla
|
|
name = "tesla in a shelter capsule"
|
|
desc = "This is a terrible, terrible idea."
|
|
template_id = "shelter_tesla"
|
|
admin_log_verb = "activated a TESLA capsule"
|
|
|
|
/obj/item/survivalcapsule/tesla/get_template_info()
|
|
var/ret = ..()
|
|
ret += ("\n" + span_boldwarning("Do not."))
|
|
return ret
|
|
|
|
//Pod objects
|
|
//Walls
|
|
/turf/simulated/shuttle/wall/voidcraft/survival
|
|
name = "survival shelter"
|
|
stripe_color = "#efbc3b"
|
|
|
|
/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner
|
|
hard_corner = 1
|
|
icon_state = "void-hc"
|
|
|
|
//Doors
|
|
/obj/machinery/door/airlock/voidcraft/survival_pod
|
|
name = "survival airlock"
|
|
block_air_zones = 1
|
|
|
|
/obj/machinery/door/airlock/voidcraft/survival_pod/vertical
|
|
icon = 'icons/obj/doors/shuttledoors_vertical.dmi'
|
|
|
|
//Door access setter button
|
|
/obj/machinery/button/remote/airlock/survival_pod
|
|
name = "shelter privacy control"
|
|
desc = "You can secure yourself inside the shelter here."
|
|
specialfunctions = 4 // 4 is bolts
|
|
id = "placeholder_id_do_not_use" //This has to be this way, otherwise it will control ALL doors if left blank.
|
|
var/obj/machinery/door/airlock/voidcraft/survival_pod/door
|
|
|
|
/obj/machinery/button/remote/airlock/survival_pod/attack_hand(obj/item/W, mob/user as mob)
|
|
if(..()) return 1 //1 is failure on machines (for whatever reason)
|
|
if(!door)
|
|
var/turf/dT = get_step(src,dir)
|
|
door = locate() in dT
|
|
if(door)
|
|
door.glass = !door.glass
|
|
door.opacity = !door.opacity
|
|
|
|
//Subtype that actually bolts doors!
|
|
/obj/machinery/button/remote/airlock/survival_pod/bolts
|
|
name = "shelter privacy control"
|
|
desc = "You can ensure some privacy with this."
|
|
|
|
/obj/machinery/button/remote/airlock/survival_pod/bolts/attack_hand(obj/item/W, mob/user as mob)
|
|
if(..()) return 1 //1 is failure on machines (for whatever reason)
|
|
if(door)
|
|
if(door.locked)
|
|
door.unlock()
|
|
door.RemoveElement(/datum/element/light_blocking)
|
|
else
|
|
door.lock()
|
|
// Block light when bolted, since the door is effectively functioning like polarized glass
|
|
door.AddElement(/datum/element/light_blocking)
|
|
|
|
// Capsule-specific light switch
|
|
// Turns off only one light in a given direction from its source turf.
|
|
/obj/machinery/light_switch/survival_pod
|
|
name = "shelter light switch"
|
|
var/obj/machinery/light/target_light
|
|
|
|
|
|
// Deliberately override base light switch behavior because we don't want to toggle ALL lights in the area - just one!
|
|
/obj/machinery/light_switch/survival_pod/attack_hand(obj/item/W, mob/user as mob)
|
|
on = !on
|
|
playsound(src, 'sound/machines/button.ogg', 100, 1, 0)
|
|
if(!target_light)
|
|
var/turf/dT = get_step(src, dir)
|
|
target_light = locate() in dT
|
|
if(target_light)
|
|
target_light.on = on
|
|
target_light.update()
|
|
// I'm so sorry but for some ungodly reason calling update() simply isn't
|
|
// enough to make the light actually set its lighting.
|
|
// So I guess we're doing this manually! :')
|
|
if(target_light.on)
|
|
target_light.set_light(target_light.brightness_range, target_light.brightness_power, target_light.brightness_color)
|
|
target_light.overlay_color = target_light.brightness_color
|
|
else
|
|
target_light.set_light(0)
|
|
update_icon()
|
|
|
|
GLOB.lights_switched_on_roundstat++
|
|
|
|
//Windows
|
|
/obj/structure/window/reinforced/survival_pod
|
|
name = "pod window"
|
|
icon = 'icons/obj/survival_pod.dmi'
|
|
icon_state = "pwindow"
|
|
basestate = "pwindow"
|
|
|
|
//The windows have diagonal versions, and will never be a full window
|
|
/obj/structure/window/reinforced/survival_pod/is_fulltile()
|
|
return FALSE
|
|
|
|
/obj/structure/window/reinforced/survival_pod/update_icon()
|
|
icon_state = basestate
|
|
|
|
//Polarized windows
|
|
/obj/structure/window/reinforced/polarized/survival_pod
|
|
name = "polarized pod window"
|
|
icon = 'icons/obj/survival_pod.dmi'
|
|
icon_state = "pwindow"
|
|
basestate = "pwindow"
|
|
|
|
//The windows have diagonal versions, and will never be a full window
|
|
/obj/structure/window/reinforced/polarized/survival_pod/is_fulltile()
|
|
return FALSE
|
|
|
|
//Windoor
|
|
/obj/machinery/door/window/survival_pod
|
|
icon = 'icons/obj/survival_pod.dmi'
|
|
icon_state = "windoor"
|
|
base_state = "windoor"
|
|
|
|
//Table
|
|
/obj/structure/table/survival_pod
|
|
name = "table"
|
|
icon = 'icons/obj/survival_pod.dmi'
|
|
icon_state = "table"
|
|
can_reinforce = FALSE
|
|
can_plate = FALSE
|
|
|
|
/obj/structure/table/survival_pod/update_icon()
|
|
icon_state = "table"
|
|
|
|
/obj/structure/table/survival_pod/Initialize(mapload)
|
|
material = get_material_by_name(MAT_STEEL)
|
|
. = ..()
|
|
verbs -= /obj/structure/table/verb/do_flip
|
|
verbs -= /obj/structure/table/proc/do_put
|
|
|
|
/obj/structure/table/survival_pod/dismantle(obj/item/tool/wrench/W, mob/user)
|
|
to_chat(user, span_warning("You cannot dismantle \the [src]."))
|
|
return
|
|
|
|
//Sleeper
|
|
/obj/machinery/sleeper/survival_pod
|
|
desc = "A limited functionality sleeper, all it can do is put patients into stasis. It lacks the medication and configuration of the larger units."
|
|
icon = 'icons/obj/survival_pod.dmi'
|
|
icon_state = "sleeper"
|
|
stasis_level = 100 //Just one setting
|
|
|
|
/obj/machinery/sleeper/survival_pod/update_icon()
|
|
if(occupant)
|
|
add_overlay("sleeper_cover")
|
|
else
|
|
cut_overlays()
|
|
|
|
//Computer
|
|
/obj/item/gps/computer
|
|
name = "pod computer"
|
|
icon_state = "pod_computer"
|
|
icon = 'icons/obj/survival_pod_comp.dmi'
|
|
anchored = TRUE
|
|
density = TRUE
|
|
pixel_y = -32
|
|
|
|
/obj/item/gps/computer/attackby(obj/item/I, mob/living/user)
|
|
if(I.has_tool_quality(TOOL_WRENCH))
|
|
user.visible_message(span_warning("[user] disassembles [src]."),
|
|
span_notice("You start to disassemble [src]..."), "You hear clanking and banging noises.")
|
|
if(do_after(user, 4 SECONDS, target = src))
|
|
new /obj/item/gps(loc)
|
|
qdel(src)
|
|
return TRUE
|
|
|
|
return FALSE
|
|
|
|
/obj/item/gps/computer/attack_hand(mob/user)
|
|
attack_self(user)
|
|
|
|
//Bed
|
|
/obj/structure/bed/pod
|
|
icon = 'icons/obj/survival_pod.dmi'
|
|
icon_state = "bed"
|
|
|
|
/obj/structure/bed/pod/Initialize(mapload)
|
|
. = ..(mapload, MAT_STEEL, MAT_CLOTH)
|
|
|
|
//Survival Storage Unit
|
|
/obj/machinery/smartfridge/survival_pod
|
|
name = "survival pod storage"
|
|
desc = "A heated storage unit."
|
|
icon_state = "donkvendor"
|
|
icon_base = "donkvendor"
|
|
icon_contents = null
|
|
icon = 'icons/obj/survival_pod_vend.dmi'
|
|
light_range = 5
|
|
light_power = 1.2
|
|
light_color = "#DDFFD3"
|
|
light_on = TRUE
|
|
pixel_y = -4
|
|
max_n_of_items = 100
|
|
|
|
/obj/machinery/smartfridge/survival_pod/Initialize(mapload)
|
|
. = ..()
|
|
for(var/obj/item/O in loc)
|
|
if(accept_check(O))
|
|
stock(O)
|
|
|
|
/obj/machinery/smartfridge/survival_pod/accept_check(obj/item/O)
|
|
return isitem(O)
|
|
|
|
/obj/machinery/smartfridge/survival_pod/empty
|
|
name = "dusty survival pod storage"
|
|
desc = "A heated storage unit. This one's seen better days."
|
|
|
|
//Fans
|
|
/obj/structure/fans
|
|
icon = 'icons/obj/survival_pod.dmi'
|
|
icon_state = "fans"
|
|
name = "environmental regulation system"
|
|
desc = "A large machine releasing a constant gust of air."
|
|
anchored = TRUE
|
|
density = TRUE
|
|
can_atmos_pass = ATMOS_PASS_NO
|
|
var/buildstacktype = /obj/item/stack/material/steel
|
|
var/buildstackamount = 5
|
|
|
|
/obj/structure/fans/proc/deconstruct()
|
|
new buildstacktype(loc,buildstackamount)
|
|
qdel(src)
|
|
|
|
/obj/structure/fans/attackby(obj/item/I, mob/living/user)
|
|
if(I.has_tool_quality(TOOL_WRENCH))
|
|
user.visible_message(span_warning("[user] disassembles [src]."),
|
|
span_notice("You start to disassemble [src]..."), "You hear clanking and banging noises.")
|
|
if(do_after(user, 4 SECONDS, target = src))
|
|
deconstruct()
|
|
return TRUE
|
|
|
|
return TRUE
|
|
|
|
/obj/structure/fans/tiny
|
|
name = "tiny fan"
|
|
desc = "A tiny fan, releasing a thin gust of air."
|
|
plane = TURF_PLANE
|
|
layer = ABOVE_TURF_LAYER
|
|
density = FALSE
|
|
icon_state = "fan_tiny"
|
|
buildstackamount = 2
|
|
|
|
/obj/structure/fans/hardlight
|
|
name = "hardlight shield"
|
|
desc = "Retains air, allows passage."
|
|
plane = TURF_PLANE
|
|
layer = ABOVE_TURF_LAYER
|
|
density = FALSE
|
|
icon = 'icons/effects/effects_vr.dmi'
|
|
icon_state = "hardlight"
|
|
buildstackamount = 2
|
|
|
|
light_range = 3
|
|
light_power = 1
|
|
light_color = "#FFFFFF"
|
|
light_on = TRUE
|
|
|
|
/obj/structure/fans/hardlight/ex_act()
|
|
return
|
|
|
|
/obj/structure/fans/hardlight/colorable
|
|
name = "hardlight shield"
|
|
icon_state = "hardlight_colorable"
|
|
|
|
/obj/structure/fans/hardlight/colorable/abductor
|
|
name = "hardlight shield"
|
|
icon_state = "hardlight_colorable"
|
|
color = "#ff0099"
|
|
|
|
//Signs
|
|
/obj/structure/sign/mining
|
|
name = "nanotrasen mining corps sign"
|
|
desc = "A sign of relief for weary miners, and a warning for would-be competitors to Nanotrasen's mining claims."
|
|
icon = 'icons/obj/survival_pod.dmi'
|
|
icon_state = "ntpod"
|
|
|
|
/obj/structure/sign/mining/survival
|
|
name = "shelter sign"
|
|
desc = "A high visibility sign designating a safe shelter."
|
|
icon = 'icons/obj/survival_pod.dmi'
|
|
icon_state = "survival"
|
|
|
|
//Fluff
|
|
/obj/structure/tubes
|
|
icon_state = "tubes"
|
|
icon = 'icons/obj/survival_pod.dmi'
|
|
name = "tubes"
|
|
anchored = TRUE
|
|
layer = BELOW_MOB_LAYER
|
|
density = FALSE
|