mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-22 03:27:05 +01:00
Merge remote-tracking branch 'upstream/master' into diagonal-movement
This commit is contained in:
@@ -0,0 +1,138 @@
|
||||
/*****************Marker Beacons**************************/
|
||||
GLOBAL_LIST_INIT(marker_beacon_colors, list(
|
||||
"Random" = FALSE, //not a true color, will pick a random color
|
||||
"Burgundy" = LIGHT_COLOR_FLARE,
|
||||
"Bronze" = LIGHT_COLOR_ORANGE,
|
||||
"Yellow" = LIGHT_COLOR_YELLOW,
|
||||
"Lime" = LIGHT_COLOR_SLIME_LAMP,
|
||||
"Olive" = LIGHT_COLOR_GREEN,
|
||||
"Jade" = LIGHT_COLOR_BLUEGREEN,
|
||||
"Teal" = LIGHT_COLOR_LIGHT_CYAN,
|
||||
"Cerulean" = LIGHT_COLOR_BLUE,
|
||||
"Indigo" = LIGHT_COLOR_DARK_BLUE,
|
||||
"Purple" = LIGHT_COLOR_PURPLE,
|
||||
"Violet" = LIGHT_COLOR_LAVENDER,
|
||||
"Fuchsia" = LIGHT_COLOR_PINK))
|
||||
|
||||
/obj/item/stack/marker_beacon
|
||||
name = "marker beacon"
|
||||
singular_name = "marker beacon"
|
||||
desc = "Prism-brand path illumination devices. Used by miners to mark paths and warn of danger."
|
||||
icon = 'icons/obj/lighting.dmi'
|
||||
icon_state = "marker"
|
||||
merge_type = /obj/item/stack/marker_beacon
|
||||
max_amount = 100
|
||||
var/picked_color = "random"
|
||||
|
||||
/obj/item/stack/marker_beacon/ten //miners start with 10 of these
|
||||
amount = 10
|
||||
|
||||
/obj/item/stack/marker_beacon/thirty //and they're bought in stacks of 1, 10, or 30
|
||||
amount = 30
|
||||
|
||||
/obj/item/stack/marker_beacon/Initialize(mapload)
|
||||
. = ..()
|
||||
update_icon()
|
||||
|
||||
/obj/item/stack/marker_beacon/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "<span class='notice'>Use in-hand to place a [singular_name].</span>")
|
||||
to_chat(user, "<span class='notice'>Alt-click to select a color. Current color is [picked_color].</span>")
|
||||
|
||||
/obj/item/stack/marker_beacon/update_icon()
|
||||
icon_state = "[initial(icon_state)][lowertext(picked_color)]"
|
||||
|
||||
/obj/item/stack/marker_beacon/attack_self(mob/user)
|
||||
if(!isturf(user.loc))
|
||||
to_chat(user, "<span class='warning'>You need more space to place a [singular_name] here.</span>")
|
||||
return
|
||||
if(locate(/obj/structure/marker_beacon) in user.loc)
|
||||
to_chat(user, "<span class='warning'>There is already a [singular_name] here.</span>")
|
||||
return
|
||||
if(use(1))
|
||||
to_chat(user, "<span class='notice'>You activate and anchor [amount ? "a":"the"] [singular_name] in place.</span>")
|
||||
playsound(user, 'sound/machines/click.ogg', 50, 1)
|
||||
var/obj/structure/marker_beacon/M = new(user.loc, picked_color)
|
||||
transfer_fingerprints_to(M)
|
||||
|
||||
/obj/item/stack/marker_beacon/AltClick(mob/living/user)
|
||||
if(!istype(user) || CanUseTopic(user, physical_state) != STATUS_INTERACTIVE)
|
||||
return
|
||||
var/input_color = input(user, "Choose a color.", "Beacon Color") as null|anything in GLOB.marker_beacon_colors
|
||||
if(!istype(user) || CanUseTopic(user, physical_state) != STATUS_INTERACTIVE)
|
||||
return
|
||||
if(input_color)
|
||||
picked_color = input_color
|
||||
update_icon()
|
||||
|
||||
/obj/structure/marker_beacon
|
||||
name = "marker beacon"
|
||||
desc = "A Prism-brand path illumination device. It is anchored in place and glowing steadily."
|
||||
icon = 'icons/obj/lighting.dmi'
|
||||
icon_state = "marker"
|
||||
layer = BELOW_OPEN_DOOR_LAYER
|
||||
armor = list("melee" = 50, "bullet" = 75, "laser" = 75, "energy" = 75, "bomb" = 25, "bio" = 100, "rad" = 100, "fire" = 25, "acid" = 0)
|
||||
max_integrity = 50
|
||||
anchored = TRUE
|
||||
light_range = 2
|
||||
light_power = 3
|
||||
var/remove_speed = 15
|
||||
var/picked_color
|
||||
|
||||
/obj/structure/marker_beacon/Initialize(mapload, set_color)
|
||||
. = ..()
|
||||
picked_color = set_color
|
||||
update_icon()
|
||||
|
||||
/obj/structure/marker_beacon/deconstruct(disassembled = TRUE)
|
||||
if(can_deconstruct)
|
||||
var/obj/item/stack/marker_beacon/M = new(loc)
|
||||
M.picked_color = picked_color
|
||||
M.update_icon()
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/marker_beacon/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "<span class='notice'>Alt-click to select a color. Current color is [picked_color].</span>")
|
||||
|
||||
/obj/structure/marker_beacon/update_icon()
|
||||
while(!picked_color || !GLOB.marker_beacon_colors[picked_color])
|
||||
picked_color = pick(GLOB.marker_beacon_colors)
|
||||
icon_state = "[initial(icon_state)][lowertext(picked_color)]-on"
|
||||
set_light(light_range, light_power, GLOB.marker_beacon_colors[picked_color])
|
||||
|
||||
/obj/structure/marker_beacon/attack_hand(mob/living/user)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You start picking [src] up...</span>")
|
||||
if(do_after(user, remove_speed, target = src))
|
||||
var/obj/item/stack/marker_beacon/M = new(loc)
|
||||
M.picked_color = picked_color
|
||||
M.update_icon()
|
||||
transfer_fingerprints_to(M)
|
||||
if(user.put_in_hands(M, TRUE)) //delete the beacon if it fails
|
||||
playsound(src, 'sound/items/deconstruct.ogg', 50, 1)
|
||||
qdel(src) //otherwise delete us
|
||||
|
||||
/obj/structure/marker_beacon/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/stack/marker_beacon))
|
||||
var/obj/item/stack/marker_beacon/M = I
|
||||
to_chat(user, "<span class='notice'>You start picking [src] up...</span>")
|
||||
if(do_after(user, remove_speed, target = src) && M.amount + 1 <= M.max_amount)
|
||||
M.add(1)
|
||||
playsound(src, 'sound/items/deconstruct.ogg', 50, 1)
|
||||
qdel(src)
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/structure/marker_beacon/AltClick(mob/living/user)
|
||||
..()
|
||||
if(!istype(user) || CanUseTopic(user, physical_state) != STATUS_INTERACTIVE)
|
||||
return
|
||||
var/input_color = input(user, "Choose a color.", "Beacon Color") as null|anything in GLOB.marker_beacon_colors
|
||||
if(!istype(user) || CanUseTopic(user, physical_state) != STATUS_INTERACTIVE)
|
||||
return
|
||||
if(input_color)
|
||||
picked_color = input_color
|
||||
update_icon()
|
||||
@@ -0,0 +1,357 @@
|
||||
/area/survivalpod
|
||||
name = "\improper Emergency Shelter"
|
||||
icon_state = "away"
|
||||
requires_power = FALSE
|
||||
has_gravity = TRUE
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_FORCED
|
||||
|
||||
/obj/item/survivalcapsule
|
||||
name = "bluespace shelter capsule"
|
||||
desc = "An emergency shelter stored within a pocket of bluespace."
|
||||
icon_state = "capsule"
|
||||
icon = 'icons/obj/mining.dmi'
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
origin_tech = "engineering=3;bluespace=3"
|
||||
var/template_id = "shelter_alpha"
|
||||
var/datum/map_template/shelter/template
|
||||
var/used = FALSE
|
||||
|
||||
/obj/item/survivalcapsule/proc/get_template()
|
||||
if(template)
|
||||
return
|
||||
template = shelter_templates[template_id]
|
||||
if(!template)
|
||||
log_runtime("Shelter template ([template_id]) not found!", src)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/survivalcapsule/examine(mob/user)
|
||||
. = ..()
|
||||
get_template()
|
||||
to_chat(user, "This capsule has the [template.name] stored.")
|
||||
to_chat(user, template.description)
|
||||
|
||||
/obj/item/survivalcapsule/attack_self()
|
||||
// Can't grab when capsule is New() because templates aren't loaded then
|
||||
get_template()
|
||||
if(used == FALSE)
|
||||
loc.visible_message("<span class='warning'>[src] begins to shake. Stand back!</span>")
|
||||
used = TRUE
|
||||
sleep(50)
|
||||
var/turf/deploy_location = get_turf(src)
|
||||
var/status = template.check_deploy(deploy_location)
|
||||
switch(status)
|
||||
if(SHELTER_DEPLOY_BAD_AREA)
|
||||
loc.visible_message("<span class='warning'>[src] will not function in this area.</span>")
|
||||
if(SHELTER_DEPLOY_BAD_TURFS, SHELTER_DEPLOY_ANCHORED_OBJECTS)
|
||||
var/width = template.width
|
||||
var/height = template.height
|
||||
loc.visible_message("<span class='warning'>[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
|
||||
|
||||
playsound(get_turf(src), 'sound/effects/phasein.ogg', 100, 1)
|
||||
|
||||
var/turf/T = deploy_location
|
||||
if(!is_mining_level(T.z))//only report capsules away from the mining/lavaland level
|
||||
message_admins("[key_name_admin(usr)] ([ADMIN_QUE(usr,"?")]) ([ADMIN_FLW(usr,"FLW")]) activated a bluespace capsule away from the mining level! (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[T.x];Y=[T.y];Z=[T.z]'>JMP</a>)")
|
||||
log_admin("[key_name(usr)] activated a bluespace capsule away from the mining level at [T.x], [T.y], [T.z]")
|
||||
template.load(deploy_location, centered = TRUE)
|
||||
new /obj/effect/particle_effect/smoke(get_turf(src))
|
||||
qdel(src)
|
||||
|
||||
/obj/item/survivalcapsule/luxury
|
||||
name = "luxury bluespace shelter capsule"
|
||||
desc = "An exorbitantly expensive luxury suite stored within a pocket of bluespace."
|
||||
origin_tech = "engineering=3;bluespace=4"
|
||||
template_id = "shelter_beta"
|
||||
|
||||
//Pod turfs and objects
|
||||
|
||||
//Window
|
||||
/obj/structure/window/shuttle/survival_pod
|
||||
name = "pod window"
|
||||
icon = 'icons/obj/smooth_structures/pod_window.dmi'
|
||||
icon_state = "smooth"
|
||||
dir = FULLTILE_WINDOW_DIR
|
||||
max_integrity = 100
|
||||
fulltile = TRUE
|
||||
reinf = TRUE
|
||||
heat_resistance = 1600
|
||||
armor = list("melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 50, "bio" = 100, "rad" = 100)
|
||||
smooth = SMOOTH_MORE
|
||||
canSmoothWith = list(/turf/simulated/wall/mineral/titanium/survival, /obj/machinery/door/airlock/survival_pod, /obj/structure/window/shuttle/survival_pod)
|
||||
explosion_block = 3
|
||||
level = 3
|
||||
glass_type = /obj/item/stack/sheet/titaniumglass
|
||||
glass_amount = 2
|
||||
|
||||
/obj/structure/window/reinforced/survival_pod
|
||||
name = "pod window"
|
||||
icon = 'icons/obj/lavaland/survival_pod.dmi'
|
||||
icon_state = "pwindow"
|
||||
|
||||
//Floors
|
||||
/turf/simulated/floor/pod
|
||||
name = "pod floor"
|
||||
icon_state = "podfloor"
|
||||
icon_regular_floor = "podfloor"
|
||||
floor_tile = /obj/item/stack/tile/pod
|
||||
|
||||
/turf/simulated/floor/pod/light
|
||||
icon_state = "podfloor_light"
|
||||
icon_regular_floor = "podfloor_light"
|
||||
floor_tile = /obj/item/stack/tile/pod/light
|
||||
|
||||
/turf/simulated/floor/pod/dark
|
||||
icon_state = "podfloor_dark"
|
||||
icon_regular_floor = "podfloor_dark"
|
||||
floor_tile = /obj/item/stack/tile/pod/dark
|
||||
|
||||
//Door
|
||||
/obj/machinery/door/airlock/survival_pod
|
||||
icon = 'icons/obj/doors/airlocks/survival/survival.dmi'
|
||||
overlays_file = 'icons/obj/doors/airlocks/survival/survival_overlays.dmi'
|
||||
assemblytype = /obj/structure/door_assembly/door_assembly_pod
|
||||
|
||||
/obj/machinery/door/airlock/survival_pod/glass
|
||||
opacity = FALSE
|
||||
glass = TRUE
|
||||
|
||||
/obj/structure/door_assembly/door_assembly_pod
|
||||
name = "pod airlock assembly"
|
||||
icon = 'icons/obj/doors/airlocks/survival/survival.dmi'
|
||||
base_name = "pod airlock"
|
||||
overlays_file = 'icons/obj/doors/airlocks/survival/survival_overlays.dmi'
|
||||
airlock_type = /obj/machinery/door/airlock/survival_pod
|
||||
glass_type = /obj/machinery/door/airlock/survival_pod/glass
|
||||
|
||||
//Windoor
|
||||
/obj/machinery/door/window/survival_pod
|
||||
icon = 'icons/obj/lavaland/survival_pod.dmi'
|
||||
icon_state = "windoor"
|
||||
base_state = "windoor"
|
||||
|
||||
//Table
|
||||
/obj/structure/table/survival_pod
|
||||
icon = 'icons/obj/lavaland/survival_pod.dmi'
|
||||
icon_state = "table"
|
||||
smooth = SMOOTH_FALSE
|
||||
|
||||
//Sleeper
|
||||
/obj/machinery/sleeper/survival_pod
|
||||
icon = 'icons/obj/lavaland/survival_pod.dmi'
|
||||
icon_state = "sleeper-open"
|
||||
density = FALSE
|
||||
|
||||
/obj/machinery/sleeper/survival_pod/New()
|
||||
..()
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/circuitboard/sleeper/survival(null)
|
||||
var/obj/item/stock_parts/matter_bin/B = new(null)
|
||||
B.rating = initial_bin_rating
|
||||
component_parts += B
|
||||
component_parts += new /obj/item/stock_parts/manipulator(null)
|
||||
component_parts += new /obj/item/stock_parts/console_screen(null)
|
||||
component_parts += new /obj/item/stock_parts/console_screen(null)
|
||||
component_parts += new /obj/item/stack/cable_coil(null, 1)
|
||||
RefreshParts()
|
||||
|
||||
//NanoMed
|
||||
/obj/machinery/vending/wallmed1/survival_pod
|
||||
name = "survival pod medical supply"
|
||||
desc = "Wall-mounted Medical Equipment dispenser. This one seems just a tiny bit smaller."
|
||||
req_access = list()
|
||||
refill_canister = null
|
||||
|
||||
products = list(/obj/item/reagent_containers/food/pill/patch/styptic = 5,
|
||||
/obj/item/reagent_containers/food/pill/patch/silver_sulf = 5,
|
||||
/obj/item/reagent_containers/food/pill/charcoal = 2,
|
||||
/obj/item/stack/medical/bruise_pack/advanced = 1,
|
||||
/obj/item/stack/medical/ointment/advanced = 1,
|
||||
/obj/item/reagent_containers/hypospray/autoinjector = 2,
|
||||
/obj/item/stack/medical/splint = 1)
|
||||
contraband = list(/obj/item/reagent_containers/food/pill/tox = 2,
|
||||
/obj/item/reagent_containers/food/pill/morphine = 2)
|
||||
|
||||
//Computer
|
||||
/obj/item/gps/computer
|
||||
name = "pod computer"
|
||||
icon_state = "pod_computer"
|
||||
icon = 'icons/obj/lavaland/pod_computer.dmi'
|
||||
anchored = 1
|
||||
density = 1
|
||||
pixel_y = -32
|
||||
|
||||
/obj/item/gps/computer/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/wrench))
|
||||
playsound(loc, W.usesound, 50, 1)
|
||||
user.visible_message("<span class='warning'>[user] disassembles the gps.</span>", \
|
||||
"<span class='notice'>You start to disassemble the gps...</span>", "You hear clanking and banging noises.")
|
||||
if(do_after(user, 20 * W.toolspeed, target = src))
|
||||
new /obj/item/gps(loc)
|
||||
qdel(src)
|
||||
return ..()
|
||||
|
||||
/obj/item/gps/computer/attack_hand(mob/user)
|
||||
attack_self(user)
|
||||
|
||||
//Bed
|
||||
/obj/structure/bed/pod
|
||||
icon = 'icons/obj/lavaland/survival_pod.dmi'
|
||||
icon_state = "bed"
|
||||
|
||||
//Survival Storage Unit
|
||||
/obj/machinery/smartfridge/survival_pod
|
||||
name = "survival pod storage"
|
||||
desc = "A heated storage unit."
|
||||
icon_state = "donkvendor"
|
||||
icon = 'icons/obj/lavaland/donkvendor.dmi'
|
||||
light_range = 8
|
||||
light_power = 1.2
|
||||
light_color = "#DDFFD3"
|
||||
max_n_of_items = 10
|
||||
pixel_y = -4
|
||||
can_deconstruct = FALSE
|
||||
var/empty = FALSE
|
||||
|
||||
/obj/machinery/smartfridge/survival_pod/Initialize(mapload)
|
||||
. = ..()
|
||||
|
||||
if(empty)
|
||||
return
|
||||
|
||||
for(var/i in 1 to 5)
|
||||
var/obj/item/reagent_containers/food/snacks/warmdonkpocket_weak/W = new(src)
|
||||
load(W)
|
||||
if(prob(50))
|
||||
var/obj/item/storage/pill_bottle/dice/D = new(src)
|
||||
load(D)
|
||||
else
|
||||
var/obj/item/instrument/guitar/G = new(src)
|
||||
load(G)
|
||||
|
||||
/obj/machinery/smartfridge/survival_pod/update_icon()
|
||||
return
|
||||
|
||||
/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."
|
||||
empty = TRUE
|
||||
|
||||
//Fans
|
||||
/obj/structure/fans
|
||||
icon = 'icons/obj/lavaland/survival_pod.dmi'
|
||||
icon_state = "fans"
|
||||
name = "environmental regulation system"
|
||||
desc = "A large machine releasing a constant gust of air."
|
||||
anchored = 1
|
||||
density = 1
|
||||
var/arbitraryatmosblockingvar = 1
|
||||
var/buildstacktype = /obj/item/stack/sheet/metal
|
||||
var/buildstackamount = 5
|
||||
|
||||
/obj/structure/fans/Initialize(loc)
|
||||
..()
|
||||
air_update_turf(1)
|
||||
|
||||
/obj/structure/fans/Destroy()
|
||||
arbitraryatmosblockingvar = 0
|
||||
air_update_turf(1)
|
||||
return ..()
|
||||
|
||||
/obj/structure/fans/CanAtmosPass(turf/T)
|
||||
return !arbitraryatmosblockingvar
|
||||
|
||||
/obj/structure/fans/deconstruct()
|
||||
if(buildstacktype)
|
||||
new buildstacktype(loc, buildstackamount)
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/fans/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/wrench))
|
||||
playsound(loc, W.usesound, 50, 1)
|
||||
user.visible_message("<span class='warning'>[user] disassembles the fan.</span>", \
|
||||
"<span class='notice'>You start to disassemble the fan...</span>", "You hear clanking and banging noises.")
|
||||
if(do_after(user, 20 * W.toolspeed, target = src))
|
||||
deconstruct()
|
||||
return ..()
|
||||
|
||||
/obj/structure/fans/tiny
|
||||
name = "tiny fan"
|
||||
desc = "A tiny fan, releasing a thin gust of air."
|
||||
layer = TURF_LAYER+0.1
|
||||
density = 0
|
||||
icon_state = "fan_tiny"
|
||||
buildstackamount = 2
|
||||
|
||||
/obj/structure/fans/tiny/invisible
|
||||
name = "air flow blocker"
|
||||
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF
|
||||
unacidable = TRUE
|
||||
invisibility = INVISIBILITY_ABSTRACT
|
||||
|
||||
//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/turf/walls/survival_pod_walls.dmi'
|
||||
icon_state = "ntpod"
|
||||
|
||||
/obj/structure/sign/mining/survival
|
||||
name = "shelter sign"
|
||||
desc = "A high visibility sign designating a safe shelter."
|
||||
icon = 'icons/turf/walls/survival_pod_walls.dmi'
|
||||
icon_state = "survival"
|
||||
|
||||
//Fluff
|
||||
/obj/structure/tubes
|
||||
icon_state = "tubes"
|
||||
icon = 'icons/obj/lavaland/survival_pod.dmi'
|
||||
name = "tubes"
|
||||
anchored = 1
|
||||
layer = MOB_LAYER - 0.2
|
||||
density = 0
|
||||
|
||||
/obj/structure/tubes/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/wrench))
|
||||
playsound(loc, W.usesound, 50, 1)
|
||||
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, 20 * W.toolspeed, target = src))
|
||||
new /obj/item/stack/rods(loc)
|
||||
qdel(src)
|
||||
return ..()
|
||||
|
||||
/obj/item/fakeartefact
|
||||
name = "expensive forgery"
|
||||
icon = 'icons/mob/screen_gen.dmi'
|
||||
icon_state = "x2"
|
||||
var/possible = list(/obj/item/ship_in_a_bottle,
|
||||
/obj/item/gun/energy/pulse,
|
||||
/obj/item/sleeping_carp_scroll,
|
||||
/obj/item/shield/changeling,
|
||||
/obj/item/lava_staff,
|
||||
/obj/item/katana/energy,
|
||||
/obj/item/hierophant_staff,
|
||||
/obj/item/storage/toolbox/green/memetic,
|
||||
/obj/item/gun/projectile/automatic/l6_saw,
|
||||
/obj/item/gun/magic/staff/chaos,
|
||||
/obj/item/gun/magic/staff/spellblade,
|
||||
/obj/item/gun/magic/wand/death,
|
||||
/obj/item/gun/magic/wand/fireball,
|
||||
/obj/item/stack/telecrystal/twenty,
|
||||
/obj/item/banhammer)
|
||||
|
||||
/obj/item/fakeartefact/New()
|
||||
. = ..()
|
||||
var/obj/item/I = pick(possible)
|
||||
name = initial(I.name)
|
||||
icon = initial(I.icon)
|
||||
desc = initial(I.desc)
|
||||
icon_state = initial(I.icon_state)
|
||||
item_state = initial(I.item_state)
|
||||
@@ -401,44 +401,53 @@
|
||||
anchored = 1.0
|
||||
var/obj/item/card/id/inserted_id
|
||||
var/list/prize_list = list(
|
||||
new /datum/data/mining_equipment("Stimpack", /obj/item/reagent_containers/hypospray/autoinjector/stimpack, 50),
|
||||
new /datum/data/mining_equipment("Teporone MediPen", /obj/item/reagent_containers/hypospray/autoinjector/teporone, 50),
|
||||
new /datum/data/mining_equipment("MediPen Bundle", /obj/item/storage/box/autoinjector/utility, 200),
|
||||
new /datum/data/mining_equipment("Whiskey", /obj/item/reagent_containers/food/drinks/bottle/whiskey, 100),
|
||||
new /datum/data/mining_equipment("Cigar", /obj/item/clothing/mask/cigarette/cigar/havana, 150),
|
||||
new /datum/data/mining_equipment("Soap", /obj/item/soap/nanotrasen, 200),
|
||||
new /datum/data/mining_equipment("Laser Pointer", /obj/item/laser_pointer, 300),
|
||||
new /datum/data/mining_equipment("Alien Toy", /obj/item/clothing/mask/facehugger/toy, 300),
|
||||
new /datum/data/mining_equipment("Advanced Scanner", /obj/item/t_scanner/adv_mining_scanner, 400),
|
||||
new /datum/data/mining_equipment("Hivelord Stabilizer", /obj/item/hivelordstabilizer, 400),
|
||||
new /datum/data/mining_equipment("Mining Drone", /obj/item/mining_drone_cube, 500),
|
||||
new /datum/data/mining_equipment("Drone Melee Upgrade", /obj/item/mine_bot_upgrade, 400),
|
||||
new /datum/data/mining_equipment("Drone Health Upgrade",/obj/item/mine_bot_upgrade/health, 400),
|
||||
new /datum/data/mining_equipment("Drone Ranged Upgrade",/obj/item/mine_bot_upgrade/cooldown, 600),
|
||||
new /datum/data/mining_equipment("Kinetic Crusher", /obj/item/twohanded/required/mining_hammer, 750),
|
||||
new /datum/data/mining_equipment("Drone AI Upgrade", /obj/item/slimepotion/sentience/mining, 1000),
|
||||
new /datum/data/mining_equipment("GAR mesons", /obj/item/clothing/glasses/meson/gar, 500),
|
||||
new /datum/data/mining_equipment("Brute First-Aid Kit", /obj/item/storage/firstaid/brute, 600),
|
||||
new /datum/data/mining_equipment("Jaunter", /obj/item/wormhole_jaunter, 600),
|
||||
new /datum/data/mining_equipment("Kinetic Accelerator", /obj/item/gun/energy/kinetic_accelerator, 750),
|
||||
new /datum/data/mining_equipment("Resonator", /obj/item/resonator, 800),
|
||||
new /datum/data/mining_equipment("Lazarus Injector", /obj/item/lazarus_injector, 1000),
|
||||
new /datum/data/mining_equipment("Silver Pickaxe", /obj/item/pickaxe/silver, 1000),
|
||||
new /datum/data/mining_equipment("Lazarus Capsule", /obj/item/mobcapsule, 800),
|
||||
new /datum/data/mining_equipment("Lazarus Capsule belt",/obj/item/storage/belt/lazarus, 200),
|
||||
new /datum/data/mining_equipment("Jetpack", /obj/item/tank/jetpack/carbondioxide/mining, 2000),
|
||||
new /datum/data/mining_equipment("Space Cash", /obj/item/stack/spacecash/c1000, 2000),
|
||||
new /datum/data/mining_equipment("Diamond Pickaxe", /obj/item/pickaxe/diamond, 2000),
|
||||
new /datum/data/mining_equipment("Super Resonator", /obj/item/resonator/upgraded, 2500),
|
||||
new /datum/data/mining_equipment("KA White Tracer Rounds", /obj/item/borg/upgrade/modkit/tracer, 100),
|
||||
new /datum/data/mining_equipment("Stimpack", /obj/item/reagent_containers/hypospray/autoinjector/stimpack, 50),
|
||||
new /datum/data/mining_equipment("Teporone MediPen", /obj/item/reagent_containers/hypospray/autoinjector/teporone, 50),
|
||||
new /datum/data/mining_equipment("MediPen Bundle", /obj/item/storage/box/autoinjector/utility, 200),
|
||||
new /datum/data/mining_equipment("Whiskey", /obj/item/reagent_containers/food/drinks/bottle/whiskey, 100),
|
||||
new /datum/data/mining_equipment("Cigar", /obj/item/clothing/mask/cigarette/cigar/havana, 150),
|
||||
new /datum/data/mining_equipment("Soap", /obj/item/soap/nanotrasen, 200),
|
||||
new /datum/data/mining_equipment("Laser Pointer", /obj/item/laser_pointer, 300),
|
||||
new /datum/data/mining_equipment("Alien Toy", /obj/item/clothing/mask/facehugger/toy, 300),
|
||||
new /datum/data/mining_equipment("Advanced Scanner", /obj/item/t_scanner/adv_mining_scanner, 400),
|
||||
new /datum/data/mining_equipment("Hivelord Stabilizer", /obj/item/hivelordstabilizer, 400),
|
||||
new /datum/data/mining_equipment("Mining Drone", /obj/item/mining_drone_cube, 500),
|
||||
new /datum/data/mining_equipment("Drone Melee Upgrade", /obj/item/mine_bot_upgrade, 400),
|
||||
new /datum/data/mining_equipment("Drone Health Upgrade", /obj/item/mine_bot_upgrade/health, 400),
|
||||
new /datum/data/mining_equipment("Drone Ranged Upgrade", /obj/item/mine_bot_upgrade/cooldown, 600),
|
||||
new /datum/data/mining_equipment("Kinetic Crusher", /obj/item/twohanded/required/kinetic_crusher, 750),
|
||||
new /datum/data/mining_equipment("Shelter Capsule", /obj/item/survivalcapsule, 400),
|
||||
new /datum/data/mining_equipment("Luxury Shelter Capsule", /obj/item/survivalcapsule/luxury, 3000),
|
||||
new /datum/data/mining_equipment("Explorer\'s Webbing", /obj/item/storage/belt/mining, 500),
|
||||
new /datum/data/mining_equipment("Drone AI Upgrade", /obj/item/slimepotion/sentience/mining, 1000),
|
||||
new /datum/data/mining_equipment("GAR mesons", /obj/item/clothing/glasses/meson/gar, 500),
|
||||
new /datum/data/mining_equipment("Brute First-Aid Kit", /obj/item/storage/firstaid/brute, 600),
|
||||
new /datum/data/mining_equipment("Jaunter", /obj/item/wormhole_jaunter, 600),
|
||||
new /datum/data/mining_equipment("Kinetic Accelerator", /obj/item/gun/energy/kinetic_accelerator, 750),
|
||||
new /datum/data/mining_equipment("Resonator", /obj/item/resonator, 800),
|
||||
new /datum/data/mining_equipment("Lazarus Injector", /obj/item/lazarus_injector, 1000),
|
||||
new /datum/data/mining_equipment("Silver Pickaxe", /obj/item/pickaxe/silver, 1000),
|
||||
new /datum/data/mining_equipment("Lazarus Capsule", /obj/item/mobcapsule, 800),
|
||||
new /datum/data/mining_equipment("Lazarus Capsule belt", /obj/item/storage/belt/lazarus, 200),
|
||||
new /datum/data/mining_equipment("Jetpack", /obj/item/tank/jetpack/carbondioxide/mining, 2000),
|
||||
new /datum/data/mining_equipment("Space Cash", /obj/item/stack/spacecash/c1000, 2000),
|
||||
new /datum/data/mining_equipment("Diamond Pickaxe", /obj/item/pickaxe/diamond, 2000),
|
||||
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("Mining Hardsuit", /obj/item/storage/box/mininghardsuit, 2000),
|
||||
new /datum/data/mining_equipment("1 Marker Beacon", /obj/item/stack/marker_beacon, 10),
|
||||
new /datum/data/mining_equipment("10 Marker Beacons", /obj/item/stack/marker_beacon/ten, 100),
|
||||
new /datum/data/mining_equipment("30 Marker Beacons", /obj/item/stack/marker_beacon/thirty, 300),
|
||||
new /datum/data/mining_equipment("KA White Tracer Rounds", /obj/item/borg/upgrade/modkit/tracer, 100),
|
||||
new /datum/data/mining_equipment("KA Adjustable Tracer Rounds", /obj/item/borg/upgrade/modkit/tracer/adjustable, 150),
|
||||
new /datum/data/mining_equipment("KA Super Chassis", /obj/item/borg/upgrade/modkit/chassis_mod, 250),
|
||||
new /datum/data/mining_equipment("KA Hyper Chassis", /obj/item/borg/upgrade/modkit/chassis_mod/orange, 300),
|
||||
new /datum/data/mining_equipment("KA Range Increase", /obj/item/borg/upgrade/modkit/range, 1000),
|
||||
new /datum/data/mining_equipment("KA Damage Increase", /obj/item/borg/upgrade/modkit/damage, 1000),
|
||||
new /datum/data/mining_equipment("KA Cooldown Decrease",/obj/item/borg/upgrade/modkit/cooldown, 1000),
|
||||
new /datum/data/mining_equipment("KA AoE Damage", /obj/item/borg/upgrade/modkit/aoe/mobs, 2000),
|
||||
new /datum/data/mining_equipment("Point Transfer Card", /obj/item/card/mining_point_card, 500),
|
||||
new /datum/data/mining_equipment("KA Super Chassis", /obj/item/borg/upgrade/modkit/chassis_mod, 250),
|
||||
new /datum/data/mining_equipment("KA Hyper Chassis", /obj/item/borg/upgrade/modkit/chassis_mod/orange, 300),
|
||||
new /datum/data/mining_equipment("KA Range Increase", /obj/item/borg/upgrade/modkit/range, 1000),
|
||||
new /datum/data/mining_equipment("KA Damage Increase", /obj/item/borg/upgrade/modkit/damage, 1000),
|
||||
new /datum/data/mining_equipment("KA Cooldown Decrease", /obj/item/borg/upgrade/modkit/cooldown, 1000),
|
||||
new /datum/data/mining_equipment("KA AoE Damage", /obj/item/borg/upgrade/modkit/aoe/mobs, 2000),
|
||||
new /datum/data/mining_equipment("Point Transfer Card", /obj/item/card/mining_point_card, 500),
|
||||
new /datum/data/mining_equipment("Mining Conscription Kit", /obj/item/storage/backpack/duffel/mining_conscript, 1000),
|
||||
)
|
||||
|
||||
/obj/machinery/mineral/equipment_vendor/golem
|
||||
@@ -468,15 +477,15 @@
|
||||
new /datum/data/mining_equipment("The Liberator's Legacy", /obj/item/storage/box/rndboards, 2000)
|
||||
)
|
||||
|
||||
/datum/data/mining_equipment/
|
||||
/datum/data/mining_equipment
|
||||
var/equipment_name = "generic"
|
||||
var/equipment_path = null
|
||||
var/cost = 0
|
||||
|
||||
/datum/data/mining_equipment/New(name, path, cost)
|
||||
src.equipment_name = name
|
||||
src.equipment_path = path
|
||||
src.cost = cost
|
||||
/datum/data/mining_equipment/New(name, path, equipment_cost)
|
||||
equipment_name = name
|
||||
equipment_path = path
|
||||
cost = equipment_cost
|
||||
|
||||
/obj/machinery/mineral/equipment_vendor/New()
|
||||
..()
|
||||
@@ -588,20 +597,33 @@
|
||||
..()
|
||||
|
||||
/obj/machinery/mineral/equipment_vendor/proc/RedeemVoucher(obj/item/mining_voucher/voucher, mob/redeemer)
|
||||
var/selection = input(redeemer, "Pick your equipment", "Mining Voucher Redemption") as null|anything in list("Kinetic Accelerator", "Resonator", "Mining Drone", "Advanced Scanner", "Crusher")
|
||||
if(!selection || !Adjacent(redeemer) || voucher.loc != redeemer)
|
||||
var/items = list("Kinetic Accelerator", "Survival Capsule and Explorer's Webbing", "Resonator Kit", "Minebot Kit", "Crusher Kit", "Mining Conscription Kit", "Advanced Scanner")
|
||||
|
||||
var/selection = input(redeemer, "Pick your equipment", "Mining Voucher Redemption") as null|anything in items
|
||||
if(!selection || !Adjacent(redeemer) || QDELETED(voucher) || voucher.loc != redeemer)
|
||||
return
|
||||
|
||||
var/drop_location = loc
|
||||
switch(selection)
|
||||
if("Kinetic Accelerator")
|
||||
new /obj/item/gun/energy/kinetic_accelerator(src.loc)
|
||||
if("Resonator")
|
||||
new /obj/item/resonator(src.loc)
|
||||
if("Mining Drone")
|
||||
new /obj/item/storage/box/drone_kit(src.loc)
|
||||
new /obj/item/gun/energy/kinetic_accelerator(drop_location)
|
||||
if("Survival Capsule and Explorer's Webbing")
|
||||
new /obj/item/storage/belt/mining(drop_location)
|
||||
if("Resonator Kit")
|
||||
new /obj/item/extinguisher/mini(drop_location)
|
||||
new /obj/item/resonator(drop_location)
|
||||
if("Minebot Kit")
|
||||
new /obj/item/mining_drone_cube(drop_location)
|
||||
new /obj/item/weldingtool/hugetank(drop_location)
|
||||
new /obj/item/clothing/head/welding(drop_location)
|
||||
if("Crusher Kit")
|
||||
new /obj/item/extinguisher/mini(drop_location)
|
||||
new /obj/item/twohanded/required/kinetic_crusher(drop_location)
|
||||
if("Mining Conscription Kit")
|
||||
new /obj/item/storage/backpack/duffel/mining_conscript(drop_location)
|
||||
if("Advanced Scanner")
|
||||
new /obj/item/t_scanner/adv_mining_scanner(src.loc)
|
||||
if("Crusher")
|
||||
new /obj/item/twohanded/required/mining_hammer(loc)
|
||||
new /obj/item/t_scanner/adv_mining_scanner(drop_location)
|
||||
|
||||
qdel(voucher)
|
||||
|
||||
/obj/machinery/mineral/equipment_vendor/ex_act(severity, target)
|
||||
@@ -643,6 +665,36 @@
|
||||
..(user)
|
||||
to_chat(user, "There's [points] points on the card.")
|
||||
|
||||
/**********************Conscription Kit**********************/
|
||||
|
||||
/obj/item/card/id/mining_access_card
|
||||
name = "mining access card"
|
||||
desc = "A small card, that when used on any ID, will add mining access."
|
||||
icon_state = "data_1"
|
||||
|
||||
/obj/item/card/id/mining_access_card/afterattack(atom/movable/AM, mob/user, proximity)
|
||||
. = ..()
|
||||
if(istype(AM, /obj/item/card/id) && proximity)
|
||||
var/obj/item/card/id/I = AM
|
||||
I.access |= list(access_mining, access_mining_station, access_mineral_storeroom, access_cargo)
|
||||
to_chat(user, "You upgrade [I] with mining access.")
|
||||
qdel(src)
|
||||
|
||||
/obj/item/storage/backpack/duffel/mining_conscript
|
||||
name = "mining conscription kit"
|
||||
desc = "A kit containing everything a crewmember needs to support a shaft miner in the field."
|
||||
|
||||
/obj/item/storage/backpack/duffel/mining_conscript/New()
|
||||
..()
|
||||
new /obj/item/pickaxe(src)
|
||||
new /obj/item/clothing/glasses/meson(src)
|
||||
new /obj/item/t_scanner/adv_mining_scanner/lesser(src)
|
||||
new /obj/item/storage/bag/ore(src)
|
||||
new /obj/item/clothing/under/rank/miner/lavaland(src)
|
||||
new /obj/item/encryptionkey/headset_cargo(src)
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
new /obj/item/card/id/mining_access_card(src)
|
||||
|
||||
/**********************Jaunter**********************/
|
||||
|
||||
/obj/item/wormhole_jaunter
|
||||
@@ -658,25 +710,47 @@
|
||||
origin_tech = "bluespace=2"
|
||||
|
||||
/obj/item/wormhole_jaunter/attack_self(mob/user)
|
||||
user.visible_message("<span class='notice'>[user.name] activates the [src.name]!</span>")
|
||||
activate(user, TRUE)
|
||||
|
||||
/obj/item/wormhole_jaunter/proc/turf_check(mob/user)
|
||||
var/turf/device_turf = get_turf(user)
|
||||
if(!device_turf || !is_teleport_allowed(device_turf.z))
|
||||
to_chat(user, "<span class='notice'>You're having difficulties getting the [src.name] to work.</span>")
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/obj/item/wormhole_jaunter/proc/get_destinations(mob/user)
|
||||
var/list/destinations = list()
|
||||
|
||||
for(var/obj/item/radio/beacon/B in world)
|
||||
var/turf/T = get_turf(B)
|
||||
if(is_station_level(T.z))
|
||||
destinations += B
|
||||
|
||||
return destinations
|
||||
|
||||
/obj/item/wormhole_jaunter/proc/activate(mob/user, adjacent)
|
||||
if(!turf_check(user))
|
||||
return
|
||||
else
|
||||
user.visible_message("<span class='notice'>[user.name] activates the [src.name]!</span>")
|
||||
var/list/L = list()
|
||||
for(var/obj/item/radio/beacon/B in world)
|
||||
var/turf/T = get_turf(B)
|
||||
if(is_station_level(T.z))
|
||||
L += B
|
||||
if(!L.len)
|
||||
to_chat(user, "<span class='notice'>The [src.name] failed to create a wormhole.</span>")
|
||||
return
|
||||
var/chosen_beacon = pick(L)
|
||||
var/obj/effect/portal/wormhole/jaunt_tunnel/J = new /obj/effect/portal/wormhole/jaunt_tunnel(get_turf(src), chosen_beacon, lifespan=100)
|
||||
|
||||
var/list/L = get_destinations(user)
|
||||
if(!L.len)
|
||||
to_chat(user, "<span class='notice'>The [src.name] found no beacons in the world to anchor a wormhole to.</span>")
|
||||
return
|
||||
var/chosen_beacon = pick(L)
|
||||
var/obj/effect/portal/wormhole/jaunt_tunnel/J = new (get_turf(src), src, 100, null, FALSE, get_turf(chosen_beacon))
|
||||
if(adjacent)
|
||||
try_move_adjacent(J)
|
||||
playsound(src,'sound/effects/sparks4.ogg',50,1)
|
||||
qdel(src)
|
||||
playsound(src,'sound/effects/sparks4.ogg',50,1)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/wormhole_jaunter/proc/chasm_react(mob/user)
|
||||
if(user.get_item_by_slot(SLOT_BELT) == src)
|
||||
to_chat(user, "Your [name] activates, saving you from the chasm!</span>")
|
||||
activate(user, FALSE)
|
||||
else
|
||||
to_chat(user, "[src] is not attached to your belt, preventing it from saving you from the chasm. RIP.</span>")
|
||||
|
||||
/obj/effect/portal/wormhole/jaunt_tunnel
|
||||
name = "jaunt tunnel"
|
||||
@@ -822,21 +896,6 @@
|
||||
new /mob/living/simple_animal/hostile/mining_drone(get_turf(src))
|
||||
qdel(src)
|
||||
|
||||
/**********************Mining drone kit**********************/
|
||||
|
||||
/obj/item/storage/box/drone_kit
|
||||
name = "Drone Kit"
|
||||
desc = "A boxed kit that includes one mining drone cube and a welding tool with an increased capacity."
|
||||
icon_state = "implant"
|
||||
max_w_class = WEIGHT_CLASS_NORMAL
|
||||
storage_slots = 2
|
||||
can_hold = list(/obj/item/mining_drone_cube, /obj/item/weldingtool/hugetank)
|
||||
|
||||
/obj/item/storage/box/drone_kit/New()
|
||||
..()
|
||||
new /obj/item/mining_drone_cube(src)
|
||||
new /obj/item/weldingtool/hugetank(src)
|
||||
|
||||
/**********************Lazarus Injector**********************/
|
||||
|
||||
/obj/item/lazarus_injector
|
||||
@@ -1057,7 +1116,7 @@
|
||||
qdel(src)
|
||||
|
||||
/*********************Mining Hammer****************/
|
||||
/obj/item/twohanded/required/mining_hammer
|
||||
/obj/item/twohanded/required/kinetic_crusher
|
||||
icon = 'icons/obj/mining.dmi'
|
||||
icon_state = "mining_hammer1"
|
||||
item_state = "mining_hammer1"
|
||||
@@ -1091,7 +1150,7 @@
|
||||
damage_type = BRUTE
|
||||
flag = "bomb"
|
||||
range = 6
|
||||
var/obj/item/twohanded/required/mining_hammer/hammer_synced = null
|
||||
var/obj/item/twohanded/required/kinetic_crusher/hammer_synced = null
|
||||
|
||||
/obj/item/projectile/destabilizer/on_hit(atom/target, blocked = 0, hit_zone)
|
||||
if(hammer_synced)
|
||||
@@ -1114,7 +1173,7 @@
|
||||
M.gets_drilled(firer)
|
||||
..()
|
||||
|
||||
/obj/item/twohanded/required/mining_hammer/afterattack(atom/target, mob/user, proximity_flag)
|
||||
/obj/item/twohanded/required/kinetic_crusher/afterattack(atom/target, mob/user, proximity_flag)
|
||||
if(!proximity_flag && charged)//Mark a target, or mine a tile.
|
||||
var/turf/proj_turf = get_turf(src)
|
||||
if(!istype(proj_turf, /turf))
|
||||
@@ -1149,7 +1208,7 @@
|
||||
else
|
||||
L.apply_damage(50, BRUTE, blocked = def_check)
|
||||
|
||||
/obj/item/twohanded/required/mining_hammer/proc/Recharge()
|
||||
/obj/item/twohanded/required/kinetic_crusher/proc/Recharge()
|
||||
if(!charged)
|
||||
charged = 1
|
||||
icon_state = "mining_hammer1"
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
/****************Explorer's Suit and Mask****************/
|
||||
/obj/item/clothing/suit/hooded/explorer
|
||||
name = "explorer suit"
|
||||
desc = "An armoured suit for exploring harsh environments."
|
||||
icon_state = "explorer"
|
||||
item_state = "explorer"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
|
||||
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
|
||||
cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
|
||||
max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT
|
||||
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
|
||||
hoodtype = /obj/item/clothing/head/hooded/explorer
|
||||
armor = list("melee" = 30, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 50, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 50)
|
||||
allowed = list(/obj/item/flashlight, /obj/item/tank, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe)
|
||||
resistance_flags = FIRE_PROOF
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/suit.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/suit.dmi',
|
||||
"Tajaran" = 'icons/mob/species/tajaran/suit.dmi',
|
||||
"Unathi" = 'icons/mob/species/unathi/suit.dmi',
|
||||
"Vulpkanin" = 'icons/mob/species/vulpkanin/suit.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/head/hooded/explorer
|
||||
name = "explorer hood"
|
||||
desc = "An armoured hood for exploring harsh environments."
|
||||
icon_state = "explorer"
|
||||
item_state = "explorer"
|
||||
body_parts_covered = HEAD
|
||||
flags = BLOCKHAIR | NODROP
|
||||
flags_cover = HEADCOVERSEYES
|
||||
min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
|
||||
max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT
|
||||
armor = list("melee" = 30, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 50, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 50)
|
||||
resistance_flags = FIRE_PROOF
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/head.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/head.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/head.dmi',
|
||||
"Skrell" = 'icons/mob/species/skrell/head.dmi'
|
||||
)
|
||||
@@ -1,6 +0,0 @@
|
||||
/turf/simulated/mineral/random/labormineral
|
||||
mineralSpawnChanceList = list("Uranium" = 1, "Iron" = 100, "Diamond" = 1, "Gold" = 1, "Silver" = 1, "Plasma" = 1)
|
||||
|
||||
/turf/simulated/mineral/random/labormineral/New()
|
||||
icon_state = "rock"
|
||||
..()
|
||||
@@ -26,6 +26,17 @@
|
||||
if(prob(15))
|
||||
harvest(null, TRUE)
|
||||
|
||||
/obj/structure/flora/ash/ex_act(severity, target)
|
||||
switch(severity)
|
||||
if(1)
|
||||
qdel(src)
|
||||
if(2)
|
||||
if(prob(80))
|
||||
qdel(src)
|
||||
if(3)
|
||||
if(prob(50))
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/flora/ash/proc/harvest(user, no_drop)
|
||||
if(harvested)
|
||||
return 0
|
||||
|
||||
@@ -161,9 +161,9 @@
|
||||
hitsound = 'sound/weapons/sear.ogg'
|
||||
burn_state = LAVA_PROOF | FIRE_PROOF
|
||||
unacidable = 1
|
||||
var/turf_type = /turf/unsimulated/floor/lava // /turf/simulated/floor/plating/lava/smooth once Lavaland turfs are added
|
||||
var/turf_type = /turf/simulated/floor/plating/lava/smooth
|
||||
var/transform_string = "lava"
|
||||
var/reset_turf_type = /turf/simulated/floor/plating/airless/asteroid // /turf/simulated/floor/plating/asteroid/basalt once Lavaland turfs are added
|
||||
var/reset_turf_type = /turf/simulated/floor/plating/asteroid/basalt
|
||||
var/reset_string = "basalt"
|
||||
var/create_cooldown = 100
|
||||
var/create_delay = 30
|
||||
@@ -198,7 +198,7 @@
|
||||
user.visible_message("<span class='danger'>[user] turns \the [T] into [transform_string]!</span>")
|
||||
message_admins("[key_name_admin(user)] fired the lava staff at [get_area(target)] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[T.x];Y=[T.y];Z=[T.z]'>JMP</a>).")
|
||||
log_game("[key_name(user)] fired the lava staff at [get_area(target)] ([T.x], [T.y], [T.z]).")
|
||||
T.ChangeTurf(turf_type)
|
||||
T.TerraformTurf(turf_type)
|
||||
timer = world.time + create_cooldown
|
||||
qdel(L)
|
||||
else
|
||||
@@ -207,7 +207,7 @@
|
||||
return
|
||||
else
|
||||
user.visible_message("<span class='danger'>[user] turns \the [T] into [reset_string]!</span>")
|
||||
T.ChangeTurf(reset_turf_type)
|
||||
T.TerraformTurf(reset_turf_type)
|
||||
timer = world.time + reset_cooldown
|
||||
playsound(T,'sound/magic/fireball.ogg', 200, 1)
|
||||
|
||||
|
||||
@@ -5,8 +5,6 @@
|
||||
desc = "A completely indestructible chunk of crystal, rumoured to predate the start of this universe. It looks like you could store things inside it."
|
||||
icon = 'icons/obj/lavaland/artefacts.dmi'
|
||||
icon_state = "blackbox"
|
||||
icon_on = "blackbox"
|
||||
icon_off = "blackbox"
|
||||
luminosity = 8
|
||||
max_n_of_items = INFINITY
|
||||
unacidable = 1
|
||||
@@ -189,7 +187,7 @@
|
||||
terrain_theme = pick("lavaland","winter","jungle","alien")
|
||||
switch(terrain_theme)
|
||||
if("lavaland")//Depressurizes the place... and free cult metal, I guess.
|
||||
NewTerrainFloors = /turf/simulated/floor/basalt // Needs to be updated after turf update
|
||||
NewTerrainFloors = /turf/simulated/floor/plating/asteroid/basalt // Needs to be updated after turf update
|
||||
NewTerrainWalls = /turf/simulated/wall/cult
|
||||
NewFlora = list(/mob/living/simple_animal/hostile/asteroid/goldgrub)
|
||||
florachance = 1
|
||||
|
||||
@@ -126,12 +126,13 @@
|
||||
icon = 'icons/obj/lavaland/dragonboat.dmi'
|
||||
keytype = /obj/item/oar
|
||||
burn_state = LAVA_PROOF | FIRE_PROOF
|
||||
resistance_flags = LAVA_PROOF | FIRE_PROOF
|
||||
|
||||
/obj/vehicle/lavaboat/relaymove(mob/user, direction)
|
||||
var/turf/next = get_step(src, direction)
|
||||
var/turf/current = get_turf(src)
|
||||
|
||||
if(istype(next, /turf/unsimulated/floor/lava) || istype(current, /turf/unsimulated/floor/lava)) //We can move from land to lava, or lava to land, but not from land to land
|
||||
if(istype(next, /turf/simulated/floor/plating/lava/smooth) || istype(current, /turf/simulated/floor/plating/lava/smooth)) //We can move from land to lava, or lava to land, but not from land to land
|
||||
..()
|
||||
else
|
||||
to_chat(user, "<span class='warning'>Boats don't go on land!</span>")
|
||||
@@ -168,6 +169,7 @@
|
||||
desc = "A tiny ship inside a bottle."
|
||||
icon = 'icons/obj/lavaland/artefacts.dmi'
|
||||
icon_state = "ship_bottle"
|
||||
resistance_flags = LAVA_PROOF | FIRE_PROOF
|
||||
|
||||
/obj/item/ship_in_a_bottle/attack_self(mob/user)
|
||||
to_chat(user, "You're not sure how they get the ships in these things, but you're pretty sure you know how to get it out.")
|
||||
|
||||
@@ -1,75 +0,0 @@
|
||||
/**********************Mine areas**************************/
|
||||
|
||||
/area/mine
|
||||
icon_state = "mining"
|
||||
|
||||
/area/mine/dangerous/explored
|
||||
name = "Mine"
|
||||
icon_state = "explored"
|
||||
music = null
|
||||
always_unpowered = 1
|
||||
requires_power = 1
|
||||
poweralm = 0
|
||||
power_environ = 0
|
||||
power_equip = 0
|
||||
power_light = 0
|
||||
outdoors = 1
|
||||
ambientsounds = list('sound/ambience/ambimine.ogg')
|
||||
|
||||
/area/mine/dangerous/explored/golem
|
||||
name = "Small Asteroid"
|
||||
|
||||
/area/mine/dangerous/unexplored
|
||||
name = "Mine"
|
||||
icon_state = "unexplored"
|
||||
music = null
|
||||
always_unpowered = 1
|
||||
requires_power = 1
|
||||
poweralm = 0
|
||||
power_environ = 0
|
||||
power_equip = 0
|
||||
power_light = 0
|
||||
outdoors = 1
|
||||
ambientsounds = list('sound/ambience/ambimine.ogg')
|
||||
|
||||
/area/mine/lobby
|
||||
name = "Mining Station"
|
||||
|
||||
/area/mine/storage
|
||||
name = "Mining Station Storage"
|
||||
|
||||
/area/mine/production
|
||||
name = "Mining Station Starboard Wing"
|
||||
icon_state = "mining_production"
|
||||
|
||||
/area/mine/abandoned
|
||||
name = "Abandoned Mining Station"
|
||||
|
||||
/area/mine/living_quarters
|
||||
name = "Mining Station Port Wing"
|
||||
icon_state = "mining_living"
|
||||
|
||||
/area/mine/eva
|
||||
name = "Mining Station EVA"
|
||||
icon_state = "mining_eva"
|
||||
|
||||
/area/mine/maintenance
|
||||
name = "Mining Station Communications"
|
||||
|
||||
/area/mine/cafeteria
|
||||
name = "Mining Station Cafeteria"
|
||||
|
||||
/area/mine/hydroponics
|
||||
name = "Mining Station Hydroponics"
|
||||
|
||||
/area/mine/sleeper
|
||||
name = "Mining Station Emergency Sleeper"
|
||||
|
||||
/area/mine/north_outpost
|
||||
name = "North Mining Outpost"
|
||||
|
||||
/area/mine/west_outpost
|
||||
name = "West Mining Outpost"
|
||||
|
||||
/area/mine/podbay
|
||||
name = "Mining Podbay"
|
||||
@@ -32,6 +32,21 @@
|
||||
new /obj/item/clothing/gloves/fingerless(src)
|
||||
new /obj/item/clothing/gloves/fingerless(src)
|
||||
|
||||
/obj/structure/closet/wardrobe/miner/lavaland
|
||||
|
||||
/obj/structure/closet/wardrobe/miner/lavaland/New()
|
||||
..()
|
||||
contents = list()
|
||||
new /obj/item/storage/backpack/duffel(src)
|
||||
new /obj/item/storage/backpack/explorer(src)
|
||||
new /obj/item/storage/backpack/explorer(src)
|
||||
new /obj/item/clothing/under/rank/miner/lavaland(src)
|
||||
new /obj/item/clothing/under/rank/miner/lavaland(src)
|
||||
new /obj/item/clothing/under/rank/miner/lavaland(src)
|
||||
new /obj/item/clothing/shoes/workboots/mining(src)
|
||||
new /obj/item/clothing/shoes/workboots/mining(src)
|
||||
new /obj/item/clothing/shoes/workboots/mining(src)
|
||||
|
||||
/obj/structure/closet/secure_closet/miner
|
||||
name = "miner's equipment"
|
||||
icon_state = "miningsec1"
|
||||
@@ -50,6 +65,8 @@
|
||||
new /obj/item/t_scanner/adv_mining_scanner/lesser(src)
|
||||
new /obj/item/storage/bag/ore(src)
|
||||
new /obj/item/clothing/glasses/meson(src)
|
||||
new /obj/item/survivalcapsule(src)
|
||||
new /obj/item/stack/marker_beacon/ten
|
||||
|
||||
/**********************Shuttle Computer**************************/
|
||||
|
||||
@@ -76,12 +93,11 @@
|
||||
icon_state = "pickaxe"
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
force = 15.0
|
||||
throwforce = 10.0
|
||||
force = 15
|
||||
throwforce = 10
|
||||
item_state = "pickaxe"
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
materials = list(MAT_METAL=2000) //one sheet, but where can you make them?
|
||||
var/digspeed = 40 //moving the delay to an item var so R&D can make improved picks. --NEO
|
||||
origin_tech = "materials=2;engineering=3"
|
||||
attack_verb = list("hit", "pierced", "sliced", "attacked")
|
||||
var/list/digsound = list('sound/effects/picaxe1.ogg','sound/effects/picaxe2.ogg','sound/effects/picaxe3.ogg')
|
||||
@@ -94,11 +110,21 @@
|
||||
/obj/item/pickaxe/proc/playDigSound()
|
||||
playsound(src, pick(digsound),20,1)
|
||||
|
||||
/obj/item/pickaxe/emergency
|
||||
name = "emergency disembarkation tool"
|
||||
desc = "For extracting yourself from rough landings."
|
||||
|
||||
/obj/item/pickaxe/safety
|
||||
name = "safety pickaxe"
|
||||
desc = "A pickaxe designed to be only effective at digging rock and ore, very ineffective as a weapon."
|
||||
force = 1
|
||||
throwforce = 1
|
||||
attack_verb = list("ineffectively hit")
|
||||
|
||||
/obj/item/pickaxe/silver
|
||||
name = "silver-plated pickaxe"
|
||||
icon_state = "spickaxe"
|
||||
item_state = "spickaxe"
|
||||
digspeed = 30 //mines faster than a normal pickaxe, bought from mining vendor
|
||||
origin_tech = "materials=3;engineering=4"
|
||||
desc = "A silver-plated pickaxe that mines slightly faster than standard-issue."
|
||||
toolspeed = 0.75
|
||||
@@ -107,7 +133,6 @@
|
||||
name = "golden pickaxe"
|
||||
icon_state = "gpickaxe"
|
||||
item_state = "gpickaxe"
|
||||
digspeed = 20
|
||||
origin_tech = "materials=4;engineering=4"
|
||||
desc = "A gold-plated pickaxe that mines faster than standard-issue."
|
||||
toolspeed = 0.6
|
||||
@@ -116,7 +141,6 @@
|
||||
name = "diamond-tipped pickaxe"
|
||||
icon_state = "dpickaxe"
|
||||
item_state = "dpickaxe"
|
||||
digspeed = 20 //mines twice as fast as a normal pickaxe, bought from mining vendor
|
||||
origin_tech = "materials=5;engineering=4"
|
||||
desc = "A pickaxe with a diamond pick head. Extremely robust at cracking rock walls and digging up dirt."
|
||||
toolspeed = 0.5
|
||||
@@ -125,7 +149,6 @@
|
||||
name = "mining drill"
|
||||
icon_state = "handdrill"
|
||||
item_state = "jackhammer"
|
||||
digspeed = 25 //available from roundstart, faster than a pickaxe.
|
||||
digsound = list('sound/weapons/drill.ogg')
|
||||
hitsound = 'sound/weapons/drill.ogg'
|
||||
usesound = 'sound/weapons/drill.ogg'
|
||||
@@ -141,7 +164,6 @@
|
||||
/obj/item/pickaxe/drill/diamonddrill
|
||||
name = "diamond-tipped mining drill"
|
||||
icon_state = "diamonddrill"
|
||||
digspeed = 10
|
||||
origin_tech = "materials=6;powerstorage=4;engineering=4"
|
||||
desc = "Yours is the drill that will pierce the heavens!"
|
||||
toolspeed = 0.25
|
||||
@@ -156,14 +178,12 @@
|
||||
/obj/item/pickaxe/drill/cyborg/diamond //This is the BORG version!
|
||||
name = "diamond-tipped cyborg mining drill" //To inherit the NODROP flag, and easier to change borg specific drill mechanics.
|
||||
icon_state = "diamonddrill"
|
||||
digspeed = 10
|
||||
toolspeed = 0.25
|
||||
|
||||
/obj/item/pickaxe/drill/jackhammer
|
||||
name = "sonic jackhammer"
|
||||
icon_state = "jackhammer"
|
||||
item_state = "jackhammer"
|
||||
digspeed = 5 //the epitome of powertools. extremely fast mining, laughs at puny walls
|
||||
origin_tech = "materials=6;powerstorage=4;engineering=5;magnets=4"
|
||||
digsound = list('sound/weapons/sonic_jackhammer.ogg')
|
||||
hitsound = 'sound/weapons/sonic_jackhammer.ogg'
|
||||
@@ -180,8 +200,8 @@
|
||||
icon_state = "shovel"
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
force = 8.0
|
||||
throwforce = 4.0
|
||||
force = 8
|
||||
throwforce = 4
|
||||
item_state = "shovel"
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
materials = list(MAT_METAL=50)
|
||||
@@ -195,11 +215,17 @@
|
||||
desc = "A small tool for digging and moving dirt."
|
||||
icon_state = "spade"
|
||||
item_state = "spade"
|
||||
force = 5.0
|
||||
throwforce = 7.0
|
||||
force = 5
|
||||
throwforce = 7
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
toolspeed = 2
|
||||
|
||||
/obj/item/shovel/safety
|
||||
name = "safety shovel"
|
||||
desc = "A large tool for digging and moving dirt. Was modified with extra safety, making it ineffective as a weapon."
|
||||
force = 1
|
||||
throwforce = 1
|
||||
attack_verb = list("ineffectively hit")
|
||||
|
||||
/**********************Mining car (Crate like thing, not the rail car)**************************/
|
||||
|
||||
@@ -266,332 +292,3 @@
|
||||
colorindex = 0
|
||||
icon_state = "mobcap[colorindex]"
|
||||
update_icon()
|
||||
|
||||
/*****************************Survival Pod********************************/
|
||||
|
||||
|
||||
/area/survivalpod
|
||||
name = "\improper Emergency Shelter"
|
||||
icon_state = "away"
|
||||
requires_power = FALSE
|
||||
has_gravity = TRUE
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_FORCED
|
||||
|
||||
/obj/item/survivalcapsule
|
||||
name = "bluespace shelter capsule"
|
||||
desc = "An emergency shelter stored within a pocket of bluespace."
|
||||
icon_state = "capsule"
|
||||
icon = 'icons/obj/mining.dmi'
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
origin_tech = "engineering=3;bluespace=3"
|
||||
var/template_id = "shelter_alpha"
|
||||
var/datum/map_template/shelter/template
|
||||
var/used = FALSE
|
||||
|
||||
/obj/item/survivalcapsule/proc/get_template()
|
||||
if(template)
|
||||
return
|
||||
template = shelter_templates[template_id]
|
||||
if(!template)
|
||||
log_runtime("Shelter template ([template_id]) not found!", src)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/survivalcapsule/examine(mob/user)
|
||||
. = ..()
|
||||
get_template()
|
||||
to_chat(user, "This capsule has the [template.name] stored.")
|
||||
to_chat(user, template.description)
|
||||
|
||||
/obj/item/survivalcapsule/attack_self()
|
||||
// Can't grab when capsule is New() because templates aren't loaded then
|
||||
get_template()
|
||||
if(used == FALSE)
|
||||
loc.visible_message("<span class='warning'>[src] begins to shake. Stand back!</span>")
|
||||
used = TRUE
|
||||
sleep(50)
|
||||
var/turf/deploy_location = get_turf(src)
|
||||
var/status = template.check_deploy(deploy_location)
|
||||
switch(status)
|
||||
if(SHELTER_DEPLOY_BAD_AREA)
|
||||
loc.visible_message("<span class='warning'>[src] will not function in this area.</span>")
|
||||
if(SHELTER_DEPLOY_BAD_TURFS, SHELTER_DEPLOY_ANCHORED_OBJECTS)
|
||||
var/width = template.width
|
||||
var/height = template.height
|
||||
loc.visible_message("<span class='warning'>[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
|
||||
|
||||
playsound(get_turf(src), 'sound/effects/phasein.ogg', 100, 1)
|
||||
|
||||
var/turf/T = deploy_location
|
||||
if(!is_mining_level(T.z))//only report capsules away from the mining/lavaland level
|
||||
message_admins("[key_name_admin(usr)] ([ADMIN_QUE(usr,"?")]) ([ADMIN_FLW(usr,"FLW")]) activated a bluespace capsule away from the mining level! (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[T.x];Y=[T.y];Z=[T.z]'>JMP</a>)")
|
||||
log_admin("[key_name(usr)] activated a bluespace capsule away from the mining level at [T.x], [T.y], [T.z]")
|
||||
template.load(deploy_location, centered = TRUE)
|
||||
new /obj/effect/particle_effect/smoke(get_turf(src))
|
||||
qdel(src)
|
||||
|
||||
/obj/item/survivalcapsule/luxury
|
||||
name = "luxury bluespace shelter capsule"
|
||||
desc = "An exorbitantly expensive luxury suite stored within a pocket of bluespace."
|
||||
origin_tech = "engineering=3;bluespace=4"
|
||||
template_id = "shelter_beta"
|
||||
|
||||
//Pod turfs and objects
|
||||
|
||||
//Window
|
||||
/obj/structure/window/shuttle/survival_pod
|
||||
name = "pod window"
|
||||
icon = 'icons/obj/smooth_structures/pod_window.dmi'
|
||||
icon_state = "smooth"
|
||||
dir = FULLTILE_WINDOW_DIR
|
||||
max_integrity = 100
|
||||
fulltile = TRUE
|
||||
reinf = TRUE
|
||||
heat_resistance = 1600
|
||||
armor = list("melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 50, "bio" = 100, "rad" = 100)
|
||||
smooth = SMOOTH_MORE
|
||||
canSmoothWith = list(/turf/simulated/wall/mineral/titanium/survival, /obj/machinery/door/airlock/survival_pod, /obj/structure/window/shuttle/survival_pod)
|
||||
explosion_block = 3
|
||||
level = 3
|
||||
glass_type = /obj/item/stack/sheet/titaniumglass
|
||||
glass_amount = 2
|
||||
|
||||
/obj/structure/window/reinforced/survival_pod
|
||||
name = "pod window"
|
||||
icon = 'icons/obj/lavaland/survival_pod.dmi'
|
||||
icon_state = "pwindow"
|
||||
|
||||
//Floors
|
||||
/turf/simulated/floor/pod
|
||||
name = "pod floor"
|
||||
icon_state = "podfloor"
|
||||
icon_regular_floor = "podfloor"
|
||||
floor_tile = /obj/item/stack/tile/pod
|
||||
|
||||
//Door
|
||||
/obj/machinery/door/airlock/survival_pod
|
||||
icon = 'icons/obj/doors/airlocks/survival/survival.dmi'
|
||||
overlays_file = 'icons/obj/doors/airlocks/survival/survival_overlays.dmi'
|
||||
assemblytype = /obj/structure/door_assembly/door_assembly_pod
|
||||
|
||||
/obj/machinery/door/airlock/survival_pod/glass
|
||||
opacity = FALSE
|
||||
glass = TRUE
|
||||
|
||||
/obj/structure/door_assembly/door_assembly_pod
|
||||
name = "pod airlock assembly"
|
||||
icon = 'icons/obj/doors/airlocks/survival/survival.dmi'
|
||||
base_name = "pod airlock"
|
||||
overlays_file = 'icons/obj/doors/airlocks/survival/survival_overlays.dmi'
|
||||
airlock_type = /obj/machinery/door/airlock/survival_pod
|
||||
glass_type = /obj/machinery/door/airlock/survival_pod/glass
|
||||
|
||||
//Windoor
|
||||
/obj/machinery/door/window/survival_pod
|
||||
icon = 'icons/obj/lavaland/survival_pod.dmi'
|
||||
icon_state = "windoor"
|
||||
base_state = "windoor"
|
||||
|
||||
//Table
|
||||
/obj/structure/table/survival_pod
|
||||
icon = 'icons/obj/lavaland/survival_pod.dmi'
|
||||
icon_state = "table"
|
||||
smooth = SMOOTH_FALSE
|
||||
|
||||
//Sleeper
|
||||
/obj/machinery/sleeper/survival_pod
|
||||
icon = 'icons/obj/lavaland/survival_pod.dmi'
|
||||
icon_state = "sleeper-open"
|
||||
density = 0
|
||||
|
||||
/obj/machinery/sleeper/survival_pod/New()
|
||||
..()
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/circuitboard/sleeper/survival(null)
|
||||
var/obj/item/stock_parts/matter_bin/B = new(null)
|
||||
B.rating = initial_bin_rating
|
||||
component_parts += B
|
||||
component_parts += new /obj/item/stock_parts/manipulator(null)
|
||||
component_parts += new /obj/item/stock_parts/console_screen(null)
|
||||
component_parts += new /obj/item/stock_parts/console_screen(null)
|
||||
component_parts += new /obj/item/stack/cable_coil(null, 1)
|
||||
RefreshParts()
|
||||
|
||||
//Computer
|
||||
/obj/item/gps/computer
|
||||
name = "pod computer"
|
||||
icon_state = "pod_computer"
|
||||
icon = 'icons/obj/lavaland/pod_computer.dmi'
|
||||
anchored = 1
|
||||
density = 1
|
||||
pixel_y = -32
|
||||
|
||||
/obj/item/gps/computer/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/wrench))
|
||||
playsound(loc, W.usesound, 50, 1)
|
||||
user.visible_message("<span class='warning'>[user] disassembles the gps.</span>", \
|
||||
"<span class='notice'>You start to disassemble the gps...</span>", "You hear clanking and banging noises.")
|
||||
if(do_after(user, 20 * W.toolspeed, target = src))
|
||||
new /obj/item/gps(loc)
|
||||
qdel(src)
|
||||
return ..()
|
||||
|
||||
/obj/item/gps/computer/attack_hand(mob/user)
|
||||
attack_self(user)
|
||||
|
||||
//Bed
|
||||
/obj/structure/bed/pod
|
||||
icon = 'icons/obj/lavaland/survival_pod.dmi'
|
||||
icon_state = "bed"
|
||||
|
||||
//Survival Storage Unit
|
||||
/obj/machinery/smartfridge/survival_pod
|
||||
name = "survival pod storage"
|
||||
desc = "A heated storage unit."
|
||||
icon_state = "donkvendor"
|
||||
icon = 'icons/obj/lavaland/donkvendor.dmi'
|
||||
icon_on = "donkvendor"
|
||||
icon_off = "donkvendor"
|
||||
light_range = 8
|
||||
max_n_of_items = 10
|
||||
pixel_y = -4
|
||||
|
||||
/obj/item/circuitboard/smartfridge/survival
|
||||
name = "circuit board (Smartfridge Survival)"
|
||||
build_path = /obj/machinery/smartfridge/survival_pod
|
||||
|
||||
/obj/item/circuitboard/smartfridge/attackby(obj/item/I, mob/user, params)
|
||||
return
|
||||
|
||||
/obj/machinery/smartfridge/survival_pod/accept_check(obj/item/O)
|
||||
if(istype(O, /obj/item))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/obj/machinery/smartfridge/survival_pod/New()
|
||||
..()
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/circuitboard/smartfridge/survival(null)
|
||||
component_parts += new /obj/item/stock_parts/matter_bin(null)
|
||||
RefreshParts()
|
||||
|
||||
/obj/machinery/smartfridge/survival_pod/loaded/New()
|
||||
..()
|
||||
for(var/i in 1 to 5)
|
||||
var/obj/item/reagent_containers/food/snacks/warmdonkpocket_weak/W = new(src)
|
||||
load(W)
|
||||
if(prob(50))
|
||||
var/obj/item/storage/pill_bottle/dice/D = new(src)
|
||||
load(D)
|
||||
else
|
||||
var/obj/item/instrument/guitar/G = new(src)
|
||||
load(G)
|
||||
|
||||
//Fans
|
||||
/obj/structure/fans
|
||||
icon = 'icons/obj/lavaland/survival_pod.dmi'
|
||||
icon_state = "fans"
|
||||
name = "environmental regulation system"
|
||||
desc = "A large machine releasing a constant gust of air."
|
||||
anchored = 1
|
||||
density = 1
|
||||
var/arbitraryatmosblockingvar = 1
|
||||
var/buildstacktype = /obj/item/stack/sheet/metal
|
||||
var/buildstackamount = 5
|
||||
|
||||
/obj/structure/fans/deconstruct()
|
||||
if(buildstacktype)
|
||||
new buildstacktype(loc, buildstackamount)
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/fans/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/wrench))
|
||||
playsound(loc, W.usesound, 50, 1)
|
||||
user.visible_message("<span class='warning'>[user] disassembles the fan.</span>", \
|
||||
"<span class='notice'>You start to disassemble the fan...</span>", "You hear clanking and banging noises.")
|
||||
if(do_after(user, 20 * W.toolspeed, target = src))
|
||||
deconstruct()
|
||||
return ..()
|
||||
|
||||
/obj/structure/fans/tiny
|
||||
name = "tiny fan"
|
||||
desc = "A tiny fan, releasing a thin gust of air."
|
||||
layer = TURF_LAYER+0.1
|
||||
density = 0
|
||||
icon_state = "fan_tiny"
|
||||
buildstackamount = 2
|
||||
|
||||
/obj/structure/fans/Initialize(loc)
|
||||
..()
|
||||
air_update_turf(1)
|
||||
|
||||
/obj/structure/fans/Destroy()
|
||||
arbitraryatmosblockingvar = 0
|
||||
air_update_turf(1)
|
||||
return ..()
|
||||
|
||||
/obj/structure/fans/CanAtmosPass(turf/T)
|
||||
return !arbitraryatmosblockingvar
|
||||
|
||||
//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/turf/walls/survival_pod_walls.dmi'
|
||||
icon_state = "ntpod"
|
||||
|
||||
/obj/structure/sign/mining/survival
|
||||
name = "shelter sign"
|
||||
desc = "A high visibility sign designating a safe shelter."
|
||||
icon = 'icons/turf/walls/survival_pod_walls.dmi'
|
||||
icon_state = "survival"
|
||||
|
||||
//Fluff
|
||||
/obj/structure/tubes
|
||||
icon_state = "tubes"
|
||||
icon = 'icons/obj/lavaland/survival_pod.dmi'
|
||||
name = "tubes"
|
||||
anchored = 1
|
||||
layer = MOB_LAYER - 0.2
|
||||
density = 0
|
||||
|
||||
/obj/structure/tubes/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/wrench))
|
||||
playsound(loc, W.usesound, 50, 1)
|
||||
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, 20 * W.toolspeed, target = src))
|
||||
new /obj/item/stack/rods(loc)
|
||||
qdel(src)
|
||||
return ..()
|
||||
|
||||
/obj/item/fakeartefact
|
||||
name = "expensive forgery"
|
||||
icon = 'icons/mob/screen_gen.dmi'
|
||||
icon_state = "x2"
|
||||
var/possible = list(/obj/item/ship_in_a_bottle,
|
||||
/obj/item/gun/energy/pulse,
|
||||
/obj/item/sleeping_carp_scroll,
|
||||
/obj/item/shield/changeling,
|
||||
/obj/item/lava_staff,
|
||||
/obj/item/katana/energy,
|
||||
/obj/item/storage/toolbox/green/memetic,
|
||||
/obj/item/gun/projectile/automatic/l6_saw,
|
||||
/obj/item/gun/magic/staff/chaos,
|
||||
/obj/item/gun/magic/staff/spellblade,
|
||||
/obj/item/gun/magic/wand/death,
|
||||
/obj/item/gun/magic/wand/fireball,
|
||||
/obj/item/stack/telecrystal,
|
||||
/obj/item/banhammer)
|
||||
|
||||
/obj/item/fakeartefact/New()
|
||||
. = ..()
|
||||
var/obj/item/I = pick(possible)
|
||||
name = initial(I.name)
|
||||
icon = initial(I.icon)
|
||||
desc = initial(I.desc)
|
||||
icon_state = initial(I.icon_state)
|
||||
item_state = initial(I.item_state)
|
||||
|
||||
@@ -1,672 +0,0 @@
|
||||
/**********************Mineral deposits**************************/
|
||||
|
||||
#define NORTH_EDGING "north"
|
||||
#define SOUTH_EDGING "south"
|
||||
#define EAST_EDGING "east"
|
||||
#define WEST_EDGING "west"
|
||||
|
||||
var/global/list/rockTurfEdgeCache = list(
|
||||
NORTH_EDGING = image('icons/turf/mining.dmi', "rock_side_n", layer = 6),
|
||||
SOUTH_EDGING = image('icons/turf/mining.dmi', "rock_side_s"),
|
||||
EAST_EDGING = image('icons/turf/mining.dmi', "rock_side_e", layer = 6),
|
||||
WEST_EDGING = image('icons/turf/mining.dmi', "rock_side_w", layer = 6))
|
||||
|
||||
/turf/simulated/mineral //wall piece
|
||||
name = "Rock"
|
||||
icon = 'icons/turf/mining.dmi'
|
||||
icon_state = "rock_nochance"
|
||||
oxygen = 0
|
||||
nitrogen = 0
|
||||
opacity = 1
|
||||
density = 1
|
||||
blocks_air = 1
|
||||
temperature = TCMB
|
||||
var/mineralType = null
|
||||
var/mineralAmt = 3
|
||||
var/mineralName = null
|
||||
var/spread = 0 //will the seam spread?
|
||||
var/spreadChance = 0 //the percentual chance of an ore spreading to the neighbouring tiles
|
||||
var/last_act = 0
|
||||
var/scan_state = null //Holder for the image we display when we're pinged by a mining scanner
|
||||
var/hidden = 1
|
||||
|
||||
//start xenoarch vars
|
||||
var/datum/geosample/geologic_data
|
||||
var/excavation_level = 0
|
||||
var/list/finds
|
||||
var/next_rock = 0
|
||||
var/archaeo_overlay = ""
|
||||
var/excav_overlay = ""
|
||||
var/obj/item/last_find
|
||||
var/datum/artifact_find/artifact_find
|
||||
//end xenaorch vars
|
||||
|
||||
/turf/simulated/mineral/ex_act(severity, target)
|
||||
..()
|
||||
switch(severity)
|
||||
if(3.0)
|
||||
if(prob(75))
|
||||
src.gets_drilled(null, 1)
|
||||
if(2.0)
|
||||
if(prob(90))
|
||||
src.gets_drilled(null, 1)
|
||||
if(1.0)
|
||||
src.gets_drilled(null, 1)
|
||||
return
|
||||
|
||||
/turf/simulated/mineral/New()
|
||||
..()
|
||||
GLOB.mineral_turfs += src
|
||||
|
||||
if(mineralType && mineralAmt && spread && spreadChance)
|
||||
for(var/dir in cardinal)
|
||||
if(prob(spreadChance))
|
||||
var/turf/T = get_step(src, dir)
|
||||
if(istype(T, /turf/simulated/mineral/random))
|
||||
Spread(T)
|
||||
|
||||
HideRock()
|
||||
|
||||
/turf/simulated/mineral/proc/HideRock()
|
||||
if(hidden)
|
||||
name = "rock"
|
||||
icon_state = "rock"
|
||||
return
|
||||
|
||||
/turf/simulated/mineral/proc/Spread(var/turf/T)
|
||||
new src.type(T)
|
||||
|
||||
/hook/startup/proc/add_mineral_edges()
|
||||
var/watch = start_watch()
|
||||
log_startup_progress("Reticulating splines...")
|
||||
for(var/turf/simulated/mineral/M in GLOB.mineral_turfs)
|
||||
M.add_edges()
|
||||
log_startup_progress(" Splines reticulated in [stop_watch(watch)]s.")
|
||||
return 1
|
||||
|
||||
/turf/simulated/mineral/proc/add_edges()
|
||||
var/turf/T
|
||||
if((istype(get_step(src, NORTH), /turf/simulated/floor)) || (istype(get_step(src, NORTH), /turf/space)))
|
||||
T = get_step(src, NORTH)
|
||||
if(T)
|
||||
T.overlays += rockTurfEdgeCache[SOUTH_EDGING]
|
||||
if((istype(get_step(src, SOUTH), /turf/simulated/floor)) || (istype(get_step(src, SOUTH), /turf/space)))
|
||||
T = get_step(src, SOUTH)
|
||||
if(T)
|
||||
T.overlays += rockTurfEdgeCache[NORTH_EDGING]
|
||||
if((istype(get_step(src, EAST), /turf/simulated/floor)) || (istype(get_step(src, EAST), /turf/space)))
|
||||
T = get_step(src, EAST)
|
||||
if(T)
|
||||
T.overlays += rockTurfEdgeCache[WEST_EDGING]
|
||||
if((istype(get_step(src, WEST), /turf/simulated/floor)) || (istype(get_step(src, WEST), /turf/space)))
|
||||
T = get_step(src, WEST)
|
||||
if(T)
|
||||
T.overlays += rockTurfEdgeCache[EAST_EDGING]
|
||||
|
||||
/turf/simulated/mineral/random
|
||||
name = "mineral deposit"
|
||||
icon_state = "rock"
|
||||
var/mineralSpawnChanceList = list(
|
||||
"Uranium" = 5, "Diamond" = 1, "Gold" = 10,
|
||||
"Silver" = 12, "Plasma" = 20, "Iron" = 40,
|
||||
"Gibtonite" = 4, "Cave" = 2, "BScrystal" = 1,
|
||||
"Titanium" = 11)
|
||||
var/mineralChance = 13
|
||||
|
||||
/turf/simulated/mineral/random/New()
|
||||
..()
|
||||
if(prob(mineralChance))
|
||||
var/mName = pickweight(mineralSpawnChanceList) //temp mineral name
|
||||
|
||||
if(mName)
|
||||
var/turf/simulated/mineral/M
|
||||
switch(mName)
|
||||
if("Uranium")
|
||||
M = new/turf/simulated/mineral/uranium(src)
|
||||
if("Iron")
|
||||
M = new/turf/simulated/mineral/iron(src)
|
||||
if("Diamond")
|
||||
M = new/turf/simulated/mineral/diamond(src)
|
||||
if("Gold")
|
||||
M = new/turf/simulated/mineral/gold(src)
|
||||
if("Silver")
|
||||
M = new/turf/simulated/mineral/silver(src)
|
||||
if("Plasma")
|
||||
M = new/turf/simulated/mineral/plasma(src)
|
||||
if("Cave")
|
||||
new/turf/simulated/floor/plating/airless/asteroid/cave(src)
|
||||
if("Gibtonite")
|
||||
M = new/turf/simulated/mineral/gibtonite(src)
|
||||
if("Bananium")
|
||||
M = new/turf/simulated/mineral/clown(src)
|
||||
if("Tranquillite")
|
||||
M = new/turf/simulated/mineral/mime(src)
|
||||
if("Titanium")
|
||||
M = new/turf/simulated/mineral/titanium(src)
|
||||
if("BScrystal")
|
||||
M = new/turf/simulated/mineral/bscrystal(src)
|
||||
if(M)
|
||||
M.mineralAmt = rand(1, 5)
|
||||
src = M
|
||||
M.levelupdate()
|
||||
return
|
||||
|
||||
|
||||
/turf/simulated/mineral/random/high_chance
|
||||
icon_state = "rock_highchance"
|
||||
mineralChance = 25
|
||||
mineralSpawnChanceList = list(
|
||||
"Uranium" = 35, "Diamond" = 30, "Gold" = 45,
|
||||
"Silver" = 50, "Plasma" = 50, "BScrystal" = 20,
|
||||
"Titanium" = 45)
|
||||
|
||||
|
||||
/turf/simulated/mineral/random/high_chance_clown
|
||||
mineralChance = 40
|
||||
mineralSpawnChanceList = list(
|
||||
"Uranium" = 35, "Diamond" = 2,
|
||||
"Gold" = 5, "Silver" = 5, "Plasma" = 25,
|
||||
"Iron" = 30, "Bananium" = 15, "Tranquillite" = 15, "BScrystal" = 10)
|
||||
|
||||
/turf/simulated/mineral/random/high_chance/New()
|
||||
icon_state = "rock"
|
||||
..()
|
||||
|
||||
/turf/simulated/mineral/random/low_chance
|
||||
icon_state = "rock_lowchance"
|
||||
mineralChance = 6
|
||||
mineralSpawnChanceList = list(
|
||||
"Uranium" = 2, "Diamond" = 1, "Gold" = 4,
|
||||
"Silver" = 6, "Plasma" = 15, "Iron" = 40,
|
||||
"Gibtonite" = 2, "BScrystal" = 1, "Titanium" = 4)
|
||||
|
||||
/turf/simulated/mineral/random/low_chance/New()
|
||||
icon_state = "rock"
|
||||
..()
|
||||
|
||||
/turf/simulated/mineral/iron
|
||||
name = "iron deposit"
|
||||
icon_state = "rock_Iron"
|
||||
mineralType = /obj/item/stack/ore/iron
|
||||
mineralName = "Iron"
|
||||
spreadChance = 20
|
||||
spread = 1
|
||||
hidden = 0
|
||||
|
||||
/turf/simulated/mineral/uranium
|
||||
name = "uranium deposit"
|
||||
mineralType = /obj/item/stack/ore/uranium
|
||||
mineralName = "Uranium"
|
||||
spreadChance = 5
|
||||
spread = 1
|
||||
hidden = 1
|
||||
scan_state = "rock_Uranium"
|
||||
|
||||
/turf/simulated/mineral/diamond
|
||||
name = "diamond deposit"
|
||||
mineralType = /obj/item/stack/ore/diamond
|
||||
mineralName = "Diamond"
|
||||
spreadChance = 0
|
||||
spread = 1
|
||||
hidden = 1
|
||||
scan_state = "rock_Diamond"
|
||||
|
||||
/turf/simulated/mineral/gold
|
||||
name = "gold deposit"
|
||||
mineralType = /obj/item/stack/ore/gold
|
||||
mineralName = "Gold"
|
||||
spreadChance = 5
|
||||
spread = 1
|
||||
hidden = 1
|
||||
scan_state = "rock_Gold"
|
||||
|
||||
/turf/simulated/mineral/silver
|
||||
name = "silver deposit"
|
||||
mineralType = /obj/item/stack/ore/silver
|
||||
mineralName = "Silver"
|
||||
spreadChance = 5
|
||||
spread = 1
|
||||
hidden = 1
|
||||
scan_state = "rock_Silver"
|
||||
|
||||
/turf/simulated/mineral/titanium
|
||||
name = "titanium deposit"
|
||||
mineralType = /obj/item/stack/ore/titanium
|
||||
spreadChance = 5
|
||||
spread = 1
|
||||
hidden = 1
|
||||
scan_state = "rock_Titanium"
|
||||
|
||||
/turf/simulated/mineral/plasma
|
||||
name = "plasma deposit"
|
||||
icon_state = "rock_Plasma"
|
||||
mineralType = /obj/item/stack/ore/plasma
|
||||
mineralName = "Plasma"
|
||||
spreadChance = 8
|
||||
spread = 1
|
||||
hidden = 1
|
||||
scan_state = "rock_Plasma"
|
||||
|
||||
/turf/simulated/mineral/clown
|
||||
name = "bananium deposit"
|
||||
icon_state = "rock_Clown"
|
||||
mineralType = /obj/item/stack/ore/bananium
|
||||
mineralName = "Bananium"
|
||||
mineralAmt = 3
|
||||
spreadChance = 0
|
||||
spread = 0
|
||||
hidden = 0
|
||||
|
||||
/turf/simulated/mineral/mime
|
||||
name = "tranquillite deposit"
|
||||
icon_state = "rock_Mime"
|
||||
mineralType = /obj/item/stack/ore/tranquillite
|
||||
mineralAmt = 3
|
||||
spreadChance = 0
|
||||
spread = 0
|
||||
hidden = 0
|
||||
|
||||
/turf/simulated/mineral/bscrystal
|
||||
name = "bluespace crystal deposit"
|
||||
icon_state = "rock_BScrystal"
|
||||
mineralType = /obj/item/stack/ore/bluespace_crystal
|
||||
mineralName = "Bluespace crystal"
|
||||
mineralAmt = 1
|
||||
spreadChance = 0
|
||||
spread = 0
|
||||
hidden = 1
|
||||
scan_state = "rock_BScrystal"
|
||||
|
||||
////////////////////////////////Gibtonite
|
||||
/turf/simulated/mineral/gibtonite
|
||||
name = "gibtonite deposit"
|
||||
icon_state = "rock_Gibtonite"
|
||||
mineralAmt = 1
|
||||
mineralName = "Gibtonite"
|
||||
spreadChance = 0
|
||||
spread = 0
|
||||
hidden = 1
|
||||
scan_state = "rock_Gibtonite"
|
||||
var/det_time = 8 //Countdown till explosion, but also rewards the player for how close you were to detonation when you defuse it
|
||||
var/stage = 0 //How far into the lifecycle of gibtonite we are, 0 is untouched, 1 is active and attempting to detonate, 2 is benign and ready for extraction
|
||||
var/activated_ckey = null //These are to track who triggered the gibtonite deposit for logging purposes
|
||||
var/activated_name = null
|
||||
|
||||
/turf/simulated/mineral/gibtonite/New()
|
||||
det_time = rand(8,10) //So you don't know exactly when the hot potato will explode
|
||||
..()
|
||||
|
||||
/turf/simulated/mineral/gibtonite/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/mining_scanner) || istype(I, /obj/item/t_scanner/adv_mining_scanner) && stage == 1)
|
||||
user.visible_message("<span class='notice'>You use [I] to locate where to cut off the chain reaction and attempt to stop it...</span>")
|
||||
defuse()
|
||||
..()
|
||||
|
||||
/turf/simulated/mineral/gibtonite/proc/explosive_reaction(var/mob/user = null, triggered_by_explosion = 0)
|
||||
if(stage == 0)
|
||||
icon_state = "rock_Gibtonite_active"
|
||||
name = "gibtonite deposit"
|
||||
desc = "An active gibtonite reserve. Run!"
|
||||
stage = 1
|
||||
visible_message("<span class='danger'>There was gibtonite inside! It's going to explode!</span>")
|
||||
var/turf/bombturf = get_turf(src)
|
||||
var/area/A = get_area(bombturf)
|
||||
|
||||
var/notify_admins = 0
|
||||
if(z != 5)
|
||||
notify_admins = 1
|
||||
if(!triggered_by_explosion)
|
||||
message_admins("[key_name_admin(user)] has triggered a gibtonite deposit reaction at <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[bombturf.x];Y=[bombturf.y];Z=[bombturf.z]'>[A.name] (JMP)</a>.")
|
||||
else
|
||||
message_admins("An explosion has triggered a gibtonite deposit reaction at <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[bombturf.x];Y=[bombturf.y];Z=[bombturf.z]'>[A.name] (JMP)</a>.")
|
||||
|
||||
if(!triggered_by_explosion)
|
||||
log_game("[key_name(user)] has triggered a gibtonite deposit reaction at [A.name] ([A.x], [A.y], [A.z]).")
|
||||
else
|
||||
log_game("An explosion has triggered a gibtonite deposit reaction at [A.name]([bombturf.x],[bombturf.y],[bombturf.z])")
|
||||
|
||||
countdown(notify_admins)
|
||||
|
||||
/turf/simulated/mineral/gibtonite/proc/countdown(notify_admins = 0)
|
||||
spawn(0)
|
||||
while(stage == 1 && det_time > 0 && mineralAmt >= 1)
|
||||
det_time--
|
||||
sleep(5)
|
||||
if(stage == 1 && det_time <= 0 && mineralAmt >= 1)
|
||||
var/turf/bombturf = get_turf(src)
|
||||
mineralAmt = 0
|
||||
explosion(bombturf,1,3,5, adminlog = notify_admins)
|
||||
if(stage == 0 || stage == 2)
|
||||
return
|
||||
|
||||
/turf/simulated/mineral/gibtonite/proc/defuse()
|
||||
if(stage == 1)
|
||||
icon_state = "rock_Gibtonite_inactive"
|
||||
desc = "An inactive gibtonite reserve. The ore can be extracted."
|
||||
stage = 2
|
||||
if(det_time < 0)
|
||||
det_time = 0
|
||||
visible_message("<span class='notice'>The chain reaction was stopped! The gibtonite had [src.det_time] reactions left till the explosion!</span>")
|
||||
|
||||
/turf/simulated/mineral/gibtonite/gets_drilled(var/mob/user, triggered_by_explosion = 0)
|
||||
if(stage == 0 && mineralAmt >= 1) //Gibtonite deposit is activated
|
||||
playsound(src,'sound/effects/hit_on_shattered_glass.ogg',50,1)
|
||||
explosive_reaction(user, triggered_by_explosion)
|
||||
return
|
||||
if(stage == 1 && mineralAmt >= 1) //Gibtonite deposit goes kaboom
|
||||
var/turf/bombturf = get_turf(src)
|
||||
mineralAmt = 0
|
||||
explosion(bombturf,1,2,5, adminlog = 0)
|
||||
if(stage == 2) //Gibtonite deposit is now benign and extractable. Depending on how close you were to it blowing up before defusing, you get better quality ore.
|
||||
var/obj/item/twohanded/required/gibtonite/G = new /obj/item/twohanded/required/gibtonite/(src)
|
||||
if(det_time <= 0)
|
||||
G.quality = 3
|
||||
G.icon_state = "Gibtonite ore 3"
|
||||
if(det_time >= 1 && det_time <= 2)
|
||||
G.quality = 2
|
||||
G.icon_state = "Gibtonite ore 2"
|
||||
var/turf/simulated/floor/plating/airless/asteroid/gibtonite_remains/G = ChangeTurf(/turf/simulated/floor/plating/airless/asteroid/gibtonite_remains)
|
||||
G.fullUpdateMineralOverlays()
|
||||
|
||||
/turf/simulated/floor/plating/airless/asteroid/gibtonite_remains
|
||||
var/det_time = 0
|
||||
var/stage = 0
|
||||
|
||||
////////////////////////////////End Gibtonite
|
||||
|
||||
/turf/simulated/mineral/attackby(var/obj/item/pickaxe/P as obj, mob/user as mob, params)
|
||||
|
||||
if(!user.IsAdvancedToolUser())
|
||||
to_chat(usr, "<span class='warning'>You don't have the dexterity to do this!</span>")
|
||||
return
|
||||
|
||||
if(istype(P, /obj/item/pickaxe))
|
||||
var/turf/T = user.loc
|
||||
if(!( istype(T, /turf) ))
|
||||
return
|
||||
|
||||
if(last_act+P.digspeed > world.time)//prevents message spam
|
||||
return
|
||||
last_act = world.time
|
||||
to_chat(user, "<span class='notice'>You start picking...</span>")
|
||||
P.playDigSound()
|
||||
|
||||
if(do_after(user, P.digspeed, target = src))
|
||||
if(istype(src, /turf/simulated/mineral)) //sanity check against turf being deleted during digspeed delay
|
||||
to_chat(user, "<span class='notice'>You finish cutting into the rock.</span>")
|
||||
P.update_icon()
|
||||
gets_drilled(user)
|
||||
feedback_add_details("pick_used_mining","[P.name]")
|
||||
else
|
||||
return attack_hand(user)
|
||||
return
|
||||
|
||||
/turf/simulated/mineral/proc/gets_drilled()
|
||||
if(mineralType && (src.mineralAmt > 0) && (src.mineralAmt < 11))
|
||||
var/i
|
||||
for(i=0;i<mineralAmt;i++)
|
||||
new mineralType(src)
|
||||
feedback_add_details("ore_mined","[mineralType]|[mineralAmt]")
|
||||
var/turf/simulated/floor/plating/airless/asteroid/N = ChangeTurf(/turf/simulated/floor/plating/airless/asteroid)
|
||||
playsound(src, 'sound/effects/break_stone.ogg', 50, 1) //beautiful destruction
|
||||
N.fullUpdateMineralOverlays()
|
||||
|
||||
if(rand(1,750) == 1)
|
||||
visible_message("<span class='notice'>An old dusty crate was buried within!</span>")
|
||||
new /obj/structure/closet/crate/secure/loot(src)
|
||||
|
||||
return
|
||||
|
||||
/turf/simulated/mineral/attack_animal(mob/living/simple_animal/user as mob)
|
||||
if((user.environment_smash & ENVIRONMENT_SMASH_WALLS) || (user.environment_smash & ENVIRONMENT_SMASH_RWALLS))
|
||||
gets_drilled()
|
||||
..()
|
||||
|
||||
/turf/simulated/mineral/attack_alien(var/mob/living/carbon/alien/M)
|
||||
to_chat(M, "<span class='notice'>You start digging into the rock...</span>")
|
||||
playsound(src, 'sound/effects/break_stone.ogg', 50, 1)
|
||||
if(do_after(M, 40, target = src))
|
||||
to_chat(M, "<span class='notice'>You tunnel into the rock.</span>")
|
||||
gets_drilled()
|
||||
|
||||
/turf/simulated/mineral/Bumped(AM as mob|obj)
|
||||
. = ..()
|
||||
if(istype(AM,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = AM
|
||||
if((istype(H.l_hand,/obj/item/pickaxe)) && (!H.hand))
|
||||
attackby(H.l_hand,H)
|
||||
else if((istype(H.r_hand,/obj/item/pickaxe)) && H.hand)
|
||||
attackby(H.r_hand,H)
|
||||
|
||||
else if(istype(AM,/mob/living/silicon/robot))
|
||||
var/mob/living/silicon/robot/R = AM
|
||||
if(istype(R.module_active,/obj/item/pickaxe))
|
||||
attackby(R.module_active,R)
|
||||
|
||||
else if(istype(AM,/obj/mecha))
|
||||
var/obj/mecha/M = AM
|
||||
if(istype(M.selected,/obj/item/mecha_parts/mecha_equipment/drill))
|
||||
M.selected.action(src)
|
||||
|
||||
|
||||
/**********************Asteroid**************************/
|
||||
|
||||
/turf/simulated/floor/plating/airless/asteroid
|
||||
name = "Asteroid"
|
||||
icon_state = "asteroid"
|
||||
icon_plating = "asteroid"
|
||||
var/dug = 0 //0 = has not yet been dug, 1 = has already been dug
|
||||
oxygen = 0.01
|
||||
nitrogen = 0.01
|
||||
temperature = TCMB
|
||||
|
||||
/turf/simulated/floor/plating/airless/asteroid/New()
|
||||
var/proper_name = name
|
||||
..()
|
||||
name = proper_name
|
||||
if(prob(20))
|
||||
icon_state = "asteroid[rand(0,12)]"
|
||||
|
||||
/turf/simulated/floor/plating/airless/asteroid/ex_act(severity, target)
|
||||
switch(severity)
|
||||
if(3.0)
|
||||
return
|
||||
if(2.0)
|
||||
if(prob(20))
|
||||
src.gets_dug()
|
||||
if(1.0)
|
||||
src.gets_dug()
|
||||
return
|
||||
|
||||
/turf/simulated/floor/plating/airless/asteroid/attackby(obj/item/W, mob/user, params)
|
||||
//note that this proc does not call ..()
|
||||
if(!W || !user)
|
||||
return 0
|
||||
|
||||
if((istype(W, /obj/item/shovel)))
|
||||
var/turf/T = get_turf(user)
|
||||
if(!istype(T))
|
||||
return
|
||||
|
||||
if(dug)
|
||||
to_chat(user, "<span class='warning'>This area has already been dug!</span>")
|
||||
return
|
||||
|
||||
to_chat(user, "<span class='notice'>You start digging...</span>")
|
||||
if(do_after(user, 20 * W.toolspeed, target = src))
|
||||
to_chat(user, "<span class='notice'>You dig a hole.</span>")
|
||||
gets_dug()
|
||||
return
|
||||
|
||||
if((istype(W, /obj/item/pickaxe)))
|
||||
var/obj/item/pickaxe/P = W
|
||||
var/turf/T = get_turf(user)
|
||||
if(!istype(T))
|
||||
return
|
||||
|
||||
if(dug)
|
||||
to_chat(user, "<span class='warning'>This area has already been dug!</span>")
|
||||
return
|
||||
|
||||
to_chat(user, "<span class='notice'>You start digging...</span>")
|
||||
|
||||
if(do_after(user, P.digspeed, target = src))
|
||||
to_chat(user, "<span class='notice'>You dig a hole.</span>")
|
||||
gets_dug()
|
||||
return
|
||||
|
||||
if(istype(W,/obj/item/storage/bag/ore))
|
||||
var/obj/item/storage/bag/ore/S = W
|
||||
if(S.collection_mode == 1)
|
||||
for(var/obj/item/stack/ore/O in src.contents)
|
||||
O.attackby(W,user)
|
||||
return
|
||||
|
||||
if(istype(W, /obj/item/stack/tile/plasteel) && isarea(loc))
|
||||
var/area/A = loc
|
||||
if(A.outdoors)
|
||||
to_chat(user, "<span class='warning'>You must define a room as part of the station using blueprints or an equivalent item first.</span>")
|
||||
return
|
||||
playsound(src, 'sound/weapons/genhit.ogg', 50, 1)
|
||||
make_plating()
|
||||
icon_plating = "plating"
|
||||
icon_state = "plating"
|
||||
update_icon()
|
||||
|
||||
/turf/simulated/floor/plating/airless/asteroid/gets_drilled()
|
||||
if(!dug)
|
||||
gets_dug()
|
||||
else
|
||||
..()
|
||||
|
||||
/turf/simulated/floor/plating/airless/asteroid/proc/gets_dug()
|
||||
if(dug)
|
||||
return
|
||||
new/obj/item/stack/ore/glass(src, 5)
|
||||
dug = 1
|
||||
playsound(src, 'sound/effects/shovel_dig.ogg', 50, 1) //FUCK YO RUSTLE I GOT'S THE DIGS SOUND HERE
|
||||
icon_plating = "asteroid_dug"
|
||||
icon_state = "asteroid_dug"
|
||||
return
|
||||
|
||||
/turf/proc/updateMineralOverlays()
|
||||
src.overlays.Cut()
|
||||
|
||||
if(istype(get_step(src, NORTH), /turf/simulated/mineral))
|
||||
src.overlays += rockTurfEdgeCache[NORTH_EDGING]
|
||||
if(istype(get_step(src, SOUTH), /turf/simulated/mineral))
|
||||
src.overlays += rockTurfEdgeCache[SOUTH_EDGING]
|
||||
if(istype(get_step(src, EAST), /turf/simulated/mineral))
|
||||
src.overlays += rockTurfEdgeCache[EAST_EDGING]
|
||||
if(istype(get_step(src, WEST), /turf/simulated/mineral))
|
||||
src.overlays += rockTurfEdgeCache[WEST_EDGING]
|
||||
|
||||
/turf/simulated/mineral/updateMineralOverlays()
|
||||
return
|
||||
|
||||
/turf/simulated/wall/updateMineralOverlays()
|
||||
return
|
||||
|
||||
/turf/proc/fullUpdateMineralOverlays()
|
||||
for(var/turf/t in range(1,src))
|
||||
t.updateMineralOverlays()
|
||||
|
||||
/turf/simulated/floor/plating/airless/asteroid/cave
|
||||
var/length = 100
|
||||
var/mob_spawn_list = list("Goldgrub" = 1, "Goliath" = 5, "Basilisk" = 4, "Hivelord" = 3)
|
||||
var/sanity = 1
|
||||
|
||||
/turf/simulated/floor/plating/airless/asteroid/cave/New(loc, var/length, var/go_backwards = 1, var/exclude_dir = -1)
|
||||
|
||||
// If length (arg2) isn't defined, get a random length; otherwise assign our length to the length arg.
|
||||
if(!length)
|
||||
src.length = rand(25, 50)
|
||||
else
|
||||
src.length = length
|
||||
|
||||
// Get our directiosn
|
||||
var/forward_cave_dir = pick(alldirs - exclude_dir)
|
||||
// Get the opposite direction of our facing direction
|
||||
var/backward_cave_dir = angle2dir(dir2angle(forward_cave_dir) + 180)
|
||||
|
||||
// Make our tunnels
|
||||
make_tunnel(forward_cave_dir)
|
||||
if(go_backwards)
|
||||
make_tunnel(backward_cave_dir)
|
||||
// Kill ourselves by replacing ourselves with a normal floor.
|
||||
SpawnFloor(src)
|
||||
..()
|
||||
|
||||
/turf/simulated/floor/plating/airless/asteroid/cave/proc/make_tunnel(var/dir)
|
||||
|
||||
var/turf/simulated/mineral/tunnel = src
|
||||
var/next_angle = pick(45, -45)
|
||||
|
||||
for(var/i = 0; i < length; i++)
|
||||
if(!sanity)
|
||||
break
|
||||
|
||||
var/list/L = list(45)
|
||||
if(IsOdd(dir2angle(dir))) // We're going at an angle and we want thick angled tunnels.
|
||||
L += -45
|
||||
|
||||
// Expand the edges of our tunnel
|
||||
for(var/edge_angle in L)
|
||||
var/turf/simulated/mineral/edge = get_step(tunnel, angle2dir(dir2angle(dir) + edge_angle))
|
||||
if(istype(edge))
|
||||
SpawnFloor(edge)
|
||||
|
||||
// Move our tunnel forward
|
||||
tunnel = get_step(tunnel, dir)
|
||||
|
||||
if(istype(tunnel))
|
||||
// Small chance to have forks in our tunnel; otherwise dig our tunnel.
|
||||
if(i > 3 && prob(20))
|
||||
new src.type(tunnel, rand(10, 15), 0, dir)
|
||||
else
|
||||
SpawnFloor(tunnel)
|
||||
else //if(!istype(tunnel, src.parent)) // We hit space/normal/wall, stop our tunnel.
|
||||
break
|
||||
|
||||
// Chance to change our direction left or right.
|
||||
if(i > 2 && prob(33))
|
||||
// We can't go a full loop though
|
||||
next_angle = -next_angle
|
||||
dir = angle2dir(dir2angle(dir) + next_angle)
|
||||
|
||||
/turf/simulated/floor/plating/airless/asteroid/cave/proc/SpawnFloor(var/turf/T)
|
||||
for(var/turf/S in range(2,T))
|
||||
if(istype(S, /turf/space) || istype(S.loc, /area/mine/dangerous/explored))
|
||||
sanity = 0
|
||||
break
|
||||
if(!sanity)
|
||||
return
|
||||
|
||||
SpawnMonster(T)
|
||||
var/turf/simulated/floor/t = new /turf/simulated/floor/plating/airless/asteroid(T)
|
||||
spawn(2)
|
||||
t.fullUpdateMineralOverlays()
|
||||
|
||||
/turf/simulated/floor/plating/airless/asteroid/cave/proc/SpawnMonster(var/turf/T)
|
||||
if(prob(30))
|
||||
if(istype(loc, /area/mine/dangerous/explored))
|
||||
return
|
||||
for(var/atom/A in range(15,T))//Lowers chance of mob clumps
|
||||
if(istype(A, /mob/living/simple_animal/hostile/asteroid))
|
||||
return
|
||||
var/randumb = pickweight(mob_spawn_list)
|
||||
switch(randumb)
|
||||
if("Goliath")
|
||||
new /mob/living/simple_animal/hostile/asteroid/goliath(T)
|
||||
if("Goldgrub")
|
||||
new /mob/living/simple_animal/hostile/asteroid/goldgrub(T)
|
||||
if("Basilisk")
|
||||
new /mob/living/simple_animal/hostile/asteroid/basilisk(T)
|
||||
if("Hivelord")
|
||||
new /mob/living/simple_animal/hostile/asteroid/hivelord(T)
|
||||
return
|
||||
|
||||
#undef NORTH_EDGING
|
||||
#undef SOUTH_EDGING
|
||||
#undef EAST_EDGING
|
||||
#undef WEST_EDGING
|
||||
@@ -19,7 +19,7 @@
|
||||
pixel_x = rand(0, 16) - 8
|
||||
pixel_y = rand(0, 8) - 8
|
||||
if(is_mining_level(z))
|
||||
score_oremined++ //When ore spawns, increment score. Only include ore spawned on mining asteroid (No Clown Planet)
|
||||
score_oremined++ //When ore spawns, increment score. Only include ore spawned on mining level (No Clown Planet)
|
||||
|
||||
/obj/item/stack/ore/attackby(obj/item/I, mob/user, params)
|
||||
..()
|
||||
@@ -48,7 +48,7 @@
|
||||
if(istype(thing, /obj/item/storage/bag/ore))
|
||||
OB = thing
|
||||
break
|
||||
if(OB && istype(F, /turf/simulated/floor/plating/airless/asteroid))
|
||||
if(OB && istype(F, /turf/simulated/floor/plating/asteroid))
|
||||
F.attackby(OB, AM)
|
||||
return ..()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user