Merge branch 'release' of https://github.com/VOREStation/VOREStation into izac-voreupdate

All conflicts resolved

Signed-off-by: izac112 <izac10@live.com>
This commit is contained in:
izac112
2020-05-06 21:51:07 +02:00
1099 changed files with 63850 additions and 118586 deletions

View File

@@ -122,7 +122,7 @@
new/obj/item/weapon/bikehorn(src)
//new/obj/item/weapon/stamp/clown(src) I'd add it, but only clowns can use it
new/obj/item/weapon/pen/crayon/rainbow(src)
new/obj/item/toy/waterflower(src)
new/obj/item/weapon/reagent_containers/spray/waterflower(src)
if(95)
new/obj/item/clothing/under/mime(src)
new/obj/item/clothing/shoes/black(src)

View File

@@ -0,0 +1,29 @@
/datum/alloy/plastitanium
metaltag = MAT_PLASTITANIUM
requires = list(
"rutile" = 1,
"platinum" = 1,
"carbon" = 2,
)
product_mod = 0.3
product = /obj/item/stack/material/plastitanium
/datum/alloy/tiglass
metaltag = MAT_TITANIUMGLASS
requires = list(
"rutile" = 1,
"sand" = 2
)
product_mod = 1
product = /obj/item/stack/material/glass/titanium
/datum/alloy/plastiglass
metaltag = MAT_PLASTANIUMGLASS
requires = list(
"rutile" = 1,
"sand" = 2,
"platinum" = 1,
"carbon" = 2,
)
product_mod = 1
product = /obj/item/stack/material/glass/plastitanium

View File

@@ -21,6 +21,7 @@
var/list/metals = list(
"surface minerals" = 0,
"precious metals" = 0,
"precious gems" = 0,
"nuclear fuel" = 0,
"exotic matter" = 0,
"anomalous matter" = 0
@@ -38,7 +39,8 @@
switch(metal)
if("silicates", "carbon", "hematite", "marble") ore_type = "surface minerals"
if("gold", "silver", "diamond", "lead") ore_type = "precious metals"
if("gold", "silver", "lead") ore_type = "precious metals"
if("diamond") ore_type = "precious gems"
if("uranium") ore_type = "nuclear fuel"
if("phoron", "osmium", "hydrogen") ore_type = "exotic matter"
if("verdantium") ore_type = "anomalous matter"

View File

@@ -14,7 +14,7 @@ var/global/list/total_extraction_beacons = list()
/obj/item/extraction_pack/examine()
. = ..()
usr.show_message("It has [uses_left] use\s remaining.", 1)
. += "It has [uses_left] use\s remaining."
/obj/item/extraction_pack/attack_self(mob/user)
var/list/possible_beacons = list()

View File

@@ -177,7 +177,8 @@
"platinum" = 40,
"lead" = 40,
"mhydrogen" = 40,
"verdantium" = 60)
"verdantium" = 60,
"rutile" = 40) //VOREStation Add
/obj/machinery/mineral/processing_unit/New()
..()

View File

@@ -62,7 +62,8 @@ var/list/mining_overlay_cache = list()
"carbon" = /obj/item/weapon/ore/coal,
"verdantium" = /obj/item/weapon/ore/verdantium,
"marble" = /obj/item/weapon/ore/marble,
"lead" = /obj/item/weapon/ore/lead
"lead" = /obj/item/weapon/ore/lead,
"rutile" = /obj/item/weapon/ore/rutile //VOREStation Add
)
has_resources = 1
@@ -647,10 +648,10 @@ turf/simulated/mineral/floor/light_corner
var/mineral_name
if(rare_ore)
mineral_name = pickweight(list("marble" = 5, "uranium" = 10, "platinum" = 10, "hematite" = 20, "carbon" = 20, "diamond" = 2, "gold" = 10, "silver" = 10, "phoron" = 20, "lead" = 5, "verdantium" = 1))
mineral_name = pickweight(list("marble" = 5, "uranium" = 10, "platinum" = 10, "hematite" = 20, "carbon" = 20, "diamond" = 2, "gold" = 10, "silver" = 10, "phoron" = 20, "lead" = 5, "verdantium" = 1, "rutile" = 4)) //VOREStation Edit
else
mineral_name = pickweight(list("marble" = 3, "uranium" = 10, "platinum" = 10, "hematite" = 70, "carbon" = 70, "diamond" = 2, "gold" = 10, "silver" = 10, "phoron" = 20, "lead" = 2, "verdantium" = 1))
mineral_name = pickweight(list("marble" = 3, "uranium" = 10, "platinum" = 10, "hematite" = 70, "carbon" = 70, "diamond" = 2, "gold" = 10, "silver" = 10, "phoron" = 20, "lead" = 2, "verdantium" = 1, "rutile" = 4)) //VOREStation Edit
if(mineral_name && (mineral_name in ore_data))
mineral = ore_data[mineral_name]

View File

@@ -1,6 +1,6 @@
/obj/effect/mineral
name = "mineral vein"
icon = 'icons/obj/mining.dmi'
icon = 'icons/obj/mining_vr.dmi' //VOREStation Edit
desc = "Shiny."
mouse_opacity = 0
density = 0

View File

@@ -44,26 +44,24 @@
stored_ore[O.name] = 1
/obj/structure/ore_box/examine(mob/user)
to_chat(user, "That's an [src].")
to_chat(user, desc)
. = ..()
if(!Adjacent(user)) //Can only check the contents of ore boxes if you can physically reach them.
return
return .
add_fingerprint(user)
if(!contents.len)
to_chat(user, "It is empty.")
return
. += "It is empty."
return .
if(world.time > last_update + 10)
update_ore_count()
last_update = world.time
to_chat(user, "It holds:")
. += "It holds:"
for(var/ore in stored_ore)
to_chat(user, "- [stored_ore[ore]] [ore]")
return
. += "- [stored_ore[ore]] [ore]"
/obj/structure/ore_box/verb/empty_box()
set name = "Empty Ore Box"

View File

@@ -0,0 +1,9 @@
/ore/rutile
name = "rutile"
display_name = "rutile"
smelts_to = "titanium"
alloy = 1
result_amount = 5
spread_chance = 10
ore = /obj/item/weapon/ore/rutile
scan_icon = "mineral_rare"

View File

@@ -30,7 +30,10 @@
// TODO new /datum/data/mining_equipment("Explorer's Webbing", /obj/item/storage/belt/mining, 500),
new /datum/data/mining_equipment("Umbrella", /obj/item/weapon/melee/umbrella/random, 200),
new /datum/data/mining_equipment("Point Transfer Card", /obj/item/weapon/card/mining_point_card, 500),
new /datum/data/mining_equipment("Survival Medipen", /obj/item/weapon/reagent_containers/hypospray/autoinjector/miner, 500),
new /datum/data/mining_equipment("Trauma Medipen", /obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, 250),
new /datum/data/mining_equipment("Burn Medipen", /obj/item/weapon/reagent_containers/hypospray/autoinjector/burn, 250),
new /datum/data/mining_equipment("Oxy Medipen", /obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, 250),
new /datum/data/mining_equipment("Detox Medipen", /obj/item/weapon/reagent_containers/hypospray/autoinjector/detox, 250),
new /datum/data/mining_equipment("Mini-Translocator", /obj/item/device/perfect_tele/one_beacon, 1200),
// new /datum/data/mining_equipment("Kinetic Crusher", /obj/item/twohanded/required/kinetic_crusher, 750),
new /datum/data/mining_equipment("Kinetic Accelerator", /obj/item/weapon/gun/energy/kinetic_accelerator, 900),
@@ -38,7 +41,7 @@
new /datum/data/mining_equipment("Fulton Pack", /obj/item/extraction_pack, 1200),
new /datum/data/mining_equipment("Silver Pickaxe", /obj/item/weapon/pickaxe/silver, 1200),
// new /datum/data/mining_equipment("Mining Conscription Kit", /obj/item/storage/backpack/duffelbag/mining_conscript, 1000),
new /datum/data/mining_equipment("Space Cash", /obj/item/weapon/spacecash/c100, 1000),
new /datum/data/mining_equipment("Thalers - 100", /obj/item/weapon/spacecash/c100, 1000),
new /datum/data/mining_equipment("Hardsuit - Control Module", /obj/item/weapon/rig/industrial/vendor, 2000),
new /datum/data/mining_equipment("Hardsuit - Plasma Cutter", /obj/item/rig_module/device/plasmacutter, 800),
new /datum/data/mining_equipment("Hardsuit - Drill", /obj/item/rig_module/device/drill, 5000),
@@ -55,6 +58,7 @@
new /datum/data/mining_equipment("Super Resonator", /obj/item/resonator/upgraded, 2500),
new /datum/data/mining_equipment("Jump Boots", /obj/item/clothing/shoes/bhop, 2500),
new /datum/data/mining_equipment("Luxury Shelter Capsule", /obj/item/device/survivalcapsule/luxury, 3100),
new /datum/data/mining_equipment("Bar Shelter Capsule", /obj/item/device/survivalcapsule/luxurybar, 10000),
new /datum/data/mining_equipment("KA White Tracer Rounds", /obj/item/borg/upgrade/modkit/tracer, 125),
new /datum/data/mining_equipment("KA Adjustable Tracer Rounds", /obj/item/borg/upgrade/modkit/tracer/adjustable, 175),
new /datum/data/mining_equipment("KA Super Chassis", /obj/item/borg/upgrade/modkit/chassis_mod, 250),
@@ -79,7 +83,7 @@
new /datum/data/mining_equipment("Fishing Net", /obj/item/weapon/material/fishing_net, 500),
new /datum/data/mining_equipment("Titanium Fishing Rod", /obj/item/weapon/material/fishing_rod/modern, 1000),
new /datum/data/mining_equipment("Durasteel Fishing Rod", /obj/item/weapon/material/fishing_rod/modern/strong, 7500),
new /datum/data/mining_equipment("Bar Shelter Capsule", /obj/item/device/survivalcapsule/luxurybar, 10000)
new /datum/data/mining_equipment("Survival Equipment - Insulated Poncho", /obj/random/thermalponcho, 750)
)
//VOREStation Edit End

View File

@@ -38,9 +38,9 @@
..()
/obj/item/weapon/card/mining_point_card/examine(mob/user)
..(user)
to_chat(user, "There's [mine_points] excavation points on the card.")
to_chat(user, "There's [survey_points] survey points on the card.")
. = ..()
. += "There's [mine_points] excavation points on the card."
. += "There's [survey_points] survey points on the card."
/obj/item/weapon/card/mining_point_card/survey
mine_points = 0

View File

@@ -10,34 +10,39 @@
icon_vend = "exploration-vend" //VOREStation Add
//VOREStation Edit Start - Heavily modified list
prize_list = list(
new /datum/data/mining_equipment("1 Marker Beacon", /obj/item/stack/marker_beacon, 1),
new /datum/data/mining_equipment("1 Marker Beacon", /obj/item/stack/marker_beacon, 1),
new /datum/data/mining_equipment("10 Marker Beacons", /obj/item/stack/marker_beacon/ten, 10),
new /datum/data/mining_equipment("30 Marker Beacons", /obj/item/stack/marker_beacon/thirty, 30),
new /datum/data/mining_equipment("GPS Device", /obj/item/device/gps/explorer, 10),
new /datum/data/mining_equipment("Whiskey", /obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey, 10),
new /datum/data/mining_equipment("Whiskey", /obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey, 10),
new /datum/data/mining_equipment("Absinthe", /obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe, 10),
new /datum/data/mining_equipment("Cigar", /obj/item/clothing/mask/smokable/cigarette/cigar/havana, 15),
new /datum/data/mining_equipment("Soap", /obj/item/weapon/soap/nanotrasen, 20),
new /datum/data/mining_equipment("Laser Pointer", /obj/item/device/laser_pointer, 90),
new /datum/data/mining_equipment("Geiger Counter", /obj/item/device/geiger, 75),
new /datum/data/mining_equipment("Plush Toy", /obj/random/plushie, 30),
new /datum/data/mining_equipment("Extraction Equipment - Fulton Beacon", /obj/item/fulton_core, 300),
new /datum/data/mining_equipment("Extraction Equipment - Fulton Pack", /obj/item/extraction_pack, 125),
new /datum/data/mining_equipment("Extraction Equipment - Fulton Beacon",/obj/item/fulton_core, 300),
new /datum/data/mining_equipment("Extraction Equipment - Fulton Pack",/obj/item/extraction_pack, 125),
new /datum/data/mining_equipment("Umbrella", /obj/item/weapon/melee/umbrella/random, 20),
new /datum/data/mining_equipment("Shelter Capsule", /obj/item/device/survivalcapsule, 50),
new /datum/data/mining_equipment("Shelter Capsule", /obj/item/device/survivalcapsule, 50),
new /datum/data/mining_equipment("Point Transfer Card", /obj/item/weapon/card/mining_point_card/survey, 50),
new /datum/data/mining_equipment("Survival Medipen", /obj/item/weapon/reagent_containers/hypospray/autoinjector/miner, 50),
new /datum/data/mining_equipment("Injector (L) - Glucose",/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, 50),
new /datum/data/mining_equipment("Injector (L) - Panacea",/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/purity, 50),
new /datum/data/mining_equipment("Injector (L) - Trauma",/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/brute, 50),
new /datum/data/mining_equipment("Trauma Medipen", /obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, 25),
new /datum/data/mining_equipment("Burn Medipen", /obj/item/weapon/reagent_containers/hypospray/autoinjector/burn, 25),
new /datum/data/mining_equipment("Oxy Medipen", /obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, 25),
new /datum/data/mining_equipment("Detox Medipen", /obj/item/weapon/reagent_containers/hypospray/autoinjector/detox, 25),
new /datum/data/mining_equipment("Injector (L) - Glucose", /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose,50),
new /datum/data/mining_equipment("Injector (L) - Panacea", /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/purity,50),
new /datum/data/mining_equipment("Injector (L) - Trauma", /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/brute,50),
new /datum/data/mining_equipment("Digital Tablet - Standard", /obj/item/modular_computer/tablet/preset/custom_loadout/standard, 50),
new /datum/data/mining_equipment("Digital Tablet - Advanced", /obj/item/modular_computer/tablet/preset/custom_loadout/advanced, 100),
new /datum/data/mining_equipment("Nanopaste Tube", /obj/item/stack/nanopaste, 100),
new /datum/data/mining_equipment("Mini-Translocator", /obj/item/device/perfect_tele/one_beacon, 120),
new /datum/data/mining_equipment("Space Cash", /obj/item/weapon/spacecash/c100, 100),
new /datum/data/mining_equipment("UAV - Recon Skimmer", /obj/item/device/uav, 400),
new /datum/data/mining_equipment("Thalers - 100", /obj/item/weapon/spacecash/c100, 100),
new /datum/data/mining_equipment("Jump Boots", /obj/item/clothing/shoes/bhop, 250),
new /datum/data/mining_equipment("Luxury Shelter Capsule", /obj/item/device/survivalcapsule/luxury, 310),
new /datum/data/mining_equipment("Industrial Equipment - Phoron Bore", /obj/item/weapon/gun/magnetic/matfed, 300),
new /datum/data/mining_equipment("Bar Shelter Capsule", /obj/item/device/survivalcapsule/luxurybar, 1000),
new /datum/data/mining_equipment("Industrial Equipment - Phoron Bore",/obj/item/weapon/gun/magnetic/matfed, 300),
new /datum/data/mining_equipment("Survey Tools - Shovel", /obj/item/weapon/shovel, 40),
new /datum/data/mining_equipment("Survey Tools - Mechanical Trap", /obj/item/weapon/beartrap, 50),
new /datum/data/mining_equipment("Defense Equipment - Smoke Bomb",/obj/item/weapon/grenade/smokebomb, 10),
@@ -47,7 +52,7 @@
new /datum/data/mining_equipment("Fishing Net", /obj/item/weapon/material/fishing_net, 50),
new /datum/data/mining_equipment("Titanium Fishing Rod", /obj/item/weapon/material/fishing_rod/modern, 100),
new /datum/data/mining_equipment("Durasteel Fishing Rod", /obj/item/weapon/material/fishing_rod/modern/strong, 750),
new /datum/data/mining_equipment("Bar Shelter Capsule", /obj/item/device/survivalcapsule/luxurybar, 1000)
new /datum/data/mining_equipment("Survival Equipment - Insulated Poncho", /obj/random/thermalponcho, 75)
)
//VOREStation Edit End

View File

@@ -0,0 +1,6 @@
/obj/item/weapon/ore/rutile
name = "rutile"
icon = 'icons/obj/mining_vr.dmi'
icon_state = "ore_rutile"
origin_tech = list(TECH_MATERIAL = 2)
material = "rutile"

View File

@@ -1,302 +0,0 @@
/*****************************Survival Pod********************************/
/area/survivalpod
name = "\improper Emergency Shelter"
icon_state = "away"
dynamic_lighting = TRUE
requires_power = FALSE
has_gravity = TRUE
//Survival Capsule
/obj/item/device/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
/obj/item/device/survivalcapsule/proc/get_template()
if(template)
return
template = SSmapping.shelter_templates[template_id]
if(!template)
throw EXCEPTION("Shelter template ([template_id]) not found!")
qdel(src)
/obj/item/device/survivalcapsule/Destroy()
template = null // without this, capsules would be one use. per round.
. = ..()
/obj/item/device/survivalcapsule/examine(mob/user)
. = ..()
get_template()
to_chat(user, "This capsule has the [template.name] stored.")
to_chat(user, template.description)
/obj/item/device/survivalcapsule/attack_self()
//Can't grab when capsule is New() because templates aren't loaded then
get_template()
if(!used)
loc.visible_message("<span class='warning'>\The [src] begins to shake. Stand back!</span>")
used = TRUE
sleep(5 SECONDS)
var/turf/deploy_location = get_turf(src)
var/status = template.check_deploy(deploy_location)
var/turf/above_location = GetAbove(deploy_location)
switch(status)
//Not allowed due to /area technical reasons
if(SHELTER_DEPLOY_BAD_AREA)
src.loc.visible_message("<span class='warning'>\The [src] will not function in this area.</span>")
//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 class='warning'>\The [src] doesn't have room to deploy! You need to clear a [width]x[height] area!</span>")
if(status != SHELTER_DEPLOY_ALLOWED)
used = FALSE
return
var/turf/T = deploy_location
var/datum/effect/effect/system/smoke_spread/smoke = new /datum/effect/effect/system/smoke_spread()
smoke.attach(T)
smoke.set_up(10, 0, T)
smoke.start()
sleep(4 SECONDS)
playsound(get_turf(src), 'sound/effects/phasein.ogg', 100, 1)
log_and_message_admins("[key_name_admin(usr)] activated a bluespace capsule at [get_area(T)]!")
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/device/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/device/survivalcapsule/luxurybar
name = "luxury surfluid bar capsule"
desc = "A luxury bar in a capsule. Bartender required and not included. There's a license for use printed on the bottom."
template_id = "shelter_gamma"
/obj/item/device/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"
//Custom Shelter Capsules
/obj/item/device/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"
//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
//Doors
/obj/machinery/door/airlock/voidcraft/survival_pod
name = "survival airlock"
block_air_zones = 1
//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/weapon/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
//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
//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/New()
material = get_material_by_name(DEFAULT_WALL_MATERIAL)
verbs -= /obj/structure/table/verb/do_flip
verbs -= /obj/structure/table/proc/do_put
..()
/obj/structure/table/survival_pod/dismantle(obj/item/weapon/wrench/W, mob/user)
to_chat(user, "<span class='warning'>You cannot dismantle \the [src].</span>")
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/device/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/device/gps/computer/attackby(obj/item/I, mob/living/user)
if(I.is_wrench())
user.visible_message("<span class='warning'>[user] disassembles [src].</span>",
"<span class='notice'>You start to disassemble [src]...</span>", "You hear clanking and banging noises.")
if(do_after(user,4 SECONDS,src))
new /obj/item/device/gps(loc)
qdel(src)
return TRUE
return FALSE
/obj/item/device/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/New(var/newloc)
..(newloc,DEFAULT_WALL_MATERIAL,"cotton")
//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"
pixel_y = -4
max_n_of_items = 100
/obj/machinery/smartfridge/survival_pod/Initialize()
. = ..()
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.is_wrench())
user.visible_message("<span class='warning'>[user] disassembles [src].</span>",
"<span class='notice'>You start to disassemble [src]...</span>", "You hear clanking and banging noises.")
if(do_after(user,4 SECONDS,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
//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

View File

@@ -1,3 +1,317 @@
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
//Survival Capsule
/obj/item/device/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
/obj/item/device/survivalcapsule/proc/get_template()
if(template)
return
template = SSmapping.shelter_templates[template_id]
if(!template)
throw EXCEPTION("Shelter template ([template_id]) not found!")
qdel(src)
/obj/item/device/survivalcapsule/Destroy()
template = null // without this, capsules would be one use. per round.
. = ..()
/obj/item/device/survivalcapsule/examine(mob/user)
. = ..()
if(!template)
get_template()
if(template)
. += "This capsule has the [template.name] stored:"
. += template.description
else
. += "This capsule has an unknown template stored."
/obj/item/device/survivalcapsule/attack_self()
//Can't grab when capsule is New() because templates aren't loaded then
get_template()
if(!used)
loc.visible_message("<span class='warning'>\The [src] begins to shake. Stand back!</span>")
used = TRUE
sleep(5 SECONDS)
var/turf/deploy_location = get_turf(src)
var/status = template.check_deploy(deploy_location, is_ship)
var/turf/above_location = GetAbove(deploy_location)
switch(status)
//Not allowed due to /area technical reasons
if(SHELTER_DEPLOY_BAD_AREA)
src.loc.visible_message("<span class='warning'>\The [src] will not function in this area.</span>")
//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 class='warning'>\The [src] doesn't have room to deploy! You need to clear a [width]x[height] area!</span>")
if(SHELTER_DEPLOY_SHIP_SPACE)
src.loc.visible_message("<span class='warning'>\The [src] can only be deployed in space.</span>")
if(status != SHELTER_DEPLOY_ALLOWED)
used = FALSE
return
if(unique_id)
if(unique_id in GLOB.unique_deployable)
loc.visible_message("<span class='warning'>There can only be one [src] deployed at a time.</span>")
used = FALSE
return
GLOB.unique_deployable += unique_id
var/turf/T = deploy_location
var/datum/effect/effect/system/smoke_spread/smoke = new /datum/effect/effect/system/smoke_spread()
smoke.attach(T)
smoke.set_up(10, 0, T)
smoke.start()
sleep(4 SECONDS)
playsound(get_turf(src), 'sound/effects/phasein.ogg', 100, 1)
log_and_message_admins("[key_name_admin(usr)] activated a bluespace capsule at [get_area(T)]!")
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/device/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/device/survivalcapsule/luxurybar
name = "luxury surfluid bar capsule"
desc = "A luxury bar in a capsule. Bartender required and not included. There's a license for use printed on the bottom."
template_id = "shelter_gamma"
/obj/item/device/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/device/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/device/survivalcapsule/dropship
name = "dropship surfluid shelter capsule"
desc = "A military dropship in a capsule. Contains everything an assault squad would need, minus the squad itself. This capsule is significantly larger than most. There's a license for use printed on the bottom."
template_id = "shelter_zeta"
unique_id = "shelter_6"
is_ship = TRUE
w_class = ITEMSIZE_SMALL
//Custom Shelter Capsules
/obj/item/device/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"
//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
//Doors
/obj/machinery/door/airlock/voidcraft/survival_pod
name = "survival airlock"
block_air_zones = 1
//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/weapon/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
//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
//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/New()
material = get_material_by_name(DEFAULT_WALL_MATERIAL)
verbs -= /obj/structure/table/verb/do_flip
verbs -= /obj/structure/table/proc/do_put
..()
/obj/structure/table/survival_pod/dismantle(obj/item/weapon/wrench/W, mob/user)
to_chat(user, "<span class='warning'>You cannot dismantle \the [src].</span>")
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/device/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/device/gps/computer/attackby(obj/item/I, mob/living/user)
if(I.is_wrench())
user.visible_message("<span class='warning'>[user] disassembles [src].</span>",
"<span class='notice'>You start to disassemble [src]...</span>", "You hear clanking and banging noises.")
if(do_after(user,4 SECONDS,src))
new /obj/item/device/gps(loc)
qdel(src)
return TRUE
return FALSE
/obj/item/device/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/New(var/newloc)
..(newloc,DEFAULT_WALL_MATERIAL,"cotton")
//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"
pixel_y = -4
max_n_of_items = 100
/obj/machinery/smartfridge/survival_pod/Initialize()
. = ..()
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.is_wrench())
user.visible_message("<span class='warning'>[user] disassembles [src].</span>",
"<span class='notice'>You start to disassemble [src]...</span>", "You hear clanking and banging noises.")
if(do_after(user,4 SECONDS,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."
@@ -10,4 +324,26 @@
light_range = 3
light_power = 1
light_color = "#FFFFFF"
light_color = "#FFFFFF"
//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

View File

@@ -11,7 +11,7 @@
banned_areas = typecacheof(/area/shuttle)
banned_objects = list()
/datum/map_template/shelter/proc/check_deploy(turf/deploy_location)
/datum/map_template/shelter/proc/check_deploy(turf/deploy_location, var/is_ship)
var/affected = get_affected_turfs(deploy_location, centered=TRUE)
for(var/turf/T in affected)
var/area/A = get_area(T)
@@ -21,6 +21,9 @@
var/banned = is_type_in_typecache(T, blacklisted_turfs)
if(banned || T.density)
return SHELTER_DEPLOY_BAD_TURFS
//Ships can only deploy in space (bacause their base turf is always turf/space)
if(is_ship && !is_type_in_typecache(T, typecacheof(/turf/space)))
return SHELTER_DEPLOY_SHIP_SPACE
for(var/obj/O in T)
if((O.density && O.anchored) || is_type_in_typecache(O, banned_objects))
@@ -86,6 +89,23 @@
possible."
mappath = "maps/submaps/shelters/shelter_4.dmm"
/datum/map_template/shelter/epsilon
name = "Shelter Epsilon"
shelter_id = "shelter_epsilon"
description = "An escape pod, with a mediocre amount of supplies \
for escaping a dying ship as soon as possible."
mappath = "maps/tether/submaps/om_ships/shelter_5.dmm"
/datum/map_template/shelter/zeta
name = "Shelter Zeta"
shelter_id = "shelter_zeta"
description = "An small dropship with a massive number of equipment, \
weapons, and supplies. Contains exterior weapons, point defense, \
a shield generator, and extremely advanced technology. It is \
unknown who manufactued a vessel like this, as it is beyond the \
technology level of most contemporary powers."
mappath = "maps/tether/submaps/om_ships/shelter_6.dmm"
/datum/map_template/shelter/phi
name = "Shelter Phi"
shelter_id = "shelter_phi"