Files
Paradise/code/modules/mining/mine_items.dm
uraniummeltdown 75bded82cf added defines for window construction states and full window diagonal dir
added a proc to check for valid window location, added var/fulltile to windows instead of using a proc
added clockwork windoors and windows to brass recipes
added titanium glass and plastitanium glass, made glass types use recipes like other stacks, you can smelt the new glasses in the ORM
removed force from RCD and added NOBLUDGEON flag, fixing a bug where you couldn't deconstruct airlocks with an RCD
slight nerf to wielded fireaxe, does high damage to windows and grilles instead of insta-deleting them
deleted fullwindow.dm and moved windows to window.dm
added some feedback to placing glass on grilles
examining windoor assembly shows you can rotate it, examining windows show deconstruction hints and rotation
added cracks to windows, you can repair windows using a welding tool on help intent, slight buff to window health
added var/cancolor to windows and blacklists some windows from being auto-colored, window shards also get colored on narsie_act()
full windows now use icon smoothing system, windows now use the obj_integrity damage system
added is_glass_sheet() helper
2018-06-03 13:11:37 +04:00

597 lines
19 KiB
Plaintext

/**********************Light************************/
//this item is intended to give the effect of entering the mine, so that light gradually fades
/obj/effect/light_emitter
name = "Light emtter"
anchored = 1
invisibility = 101
unacidable = 1
light_range = 8
light_power = 0
/**********************Miner Lockers**************************/
/obj/structure/closet/wardrobe/miner
name = "mining wardrobe"
icon_state = "mixed"
icon_closed = "mixed"
/obj/structure/closet/wardrobe/miner/New()
..()
contents = list()
new /obj/item/storage/backpack/duffel(src)
new /obj/item/storage/backpack/industrial(src)
new /obj/item/storage/backpack/satchel_eng(src)
new /obj/item/clothing/under/rank/miner(src)
new /obj/item/clothing/under/rank/miner(src)
new /obj/item/clothing/under/rank/miner(src)
new /obj/item/clothing/shoes/workboots(src)
new /obj/item/clothing/shoes/workboots(src)
new /obj/item/clothing/shoes/workboots(src)
new /obj/item/clothing/gloves/fingerless(src)
new /obj/item/clothing/gloves/fingerless(src)
new /obj/item/clothing/gloves/fingerless(src)
/obj/structure/closet/secure_closet/miner
name = "miner's equipment"
icon_state = "miningsec1"
icon_closed = "miningsec"
icon_locked = "miningsec1"
icon_opened = "miningsecopen"
icon_broken = "miningsecbroken"
icon_off = "miningsecoff"
req_access = list(access_mining)
/obj/structure/closet/secure_closet/miner/New()
..()
new /obj/item/shovel(src)
new /obj/item/pickaxe(src)
new /obj/item/radio/headset/headset_cargo/mining(src)
new /obj/item/t_scanner/adv_mining_scanner/lesser(src)
new /obj/item/storage/bag/ore(src)
new /obj/item/clothing/glasses/meson(src)
/**********************Shuttle Computer**************************/
/obj/machinery/computer/shuttle/mining
name = "Mining Shuttle Console"
desc = "Used to call and send the mining shuttle."
circuit = /obj/item/circuitboard/mining_shuttle
shuttleId = "mining"
possible_destinations = "mining_home;mining_away"
/******************************Lantern*******************************/
/obj/item/flashlight/lantern
name = "lantern"
icon_state = "lantern"
desc = "A mining lantern."
brightness_on = 6 // luminosity when on
/*****************************Pickaxe********************************/
/obj/item/pickaxe
name = "pickaxe"
icon = 'icons/obj/items.dmi'
icon_state = "pickaxe"
flags = CONDUCT
slot_flags = SLOT_BELT
force = 15.0
throwforce = 10.0
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')
var/drill_verb = "picking"
sharp = 1
var/excavation_amount = 100
usesound = 'sound/effects/picaxe1.ogg'
toolspeed = 1
/obj/item/pickaxe/proc/playDigSound()
playsound(src, pick(digsound),20,1)
/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
/obj/item/pickaxe/gold
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
/obj/item/pickaxe/diamond
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
/obj/item/pickaxe/drill
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'
origin_tech = "materials=2;powerstorage=2;engineering=3"
desc = "An electric mining drill for the especially scrawny."
toolspeed = 0.5
/obj/item/pickaxe/drill/cyborg
name = "cyborg mining drill"
desc = "An integrated electric mining drill."
flags = NODROP
/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
/obj/item/pickaxe/diamonddrill/traitor //Pocket-sized traitor diamond drill.
name = "supermatter drill"
icon_state = "smdrill"
origin_tech = "materials=6;powerstorage=4;engineering=4;syndicate=3"
desc = "Microscopic supermatter crystals cover the head of this tiny drill."
w_class = WEIGHT_CLASS_SMALL
/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'
usesound = 'sound/weapons/sonic_jackhammer.ogg'
desc = "Cracks rocks with sonic blasts, and doubles as a demolition power tool for smashing walls."
toolspeed = 0.1
/*****************************Shovel********************************/
/obj/item/shovel
name = "shovel"
desc = "A large tool for digging and moving dirt."
icon = 'icons/obj/items.dmi'
icon_state = "shovel"
flags = CONDUCT
slot_flags = SLOT_BELT
force = 8.0
throwforce = 4.0
item_state = "shovel"
w_class = WEIGHT_CLASS_NORMAL
materials = list(MAT_METAL=50)
origin_tech = "materials=2;engineering=2"
attack_verb = list("bashed", "bludgeoned", "thrashed", "whacked")
usesound = 'sound/effects/shovel_dig.ogg'
toolspeed = 1
/obj/item/shovel/spade
name = "spade"
desc = "A small tool for digging and moving dirt."
icon_state = "spade"
item_state = "spade"
force = 5.0
throwforce = 7.0
w_class = WEIGHT_CLASS_SMALL
toolspeed = 2
/**********************Mining car (Crate like thing, not the rail car)**************************/
/obj/structure/closet/crate/miningcar
desc = "A mining car. This one doesn't work on rails, but has to be dragged."
name = "mining car (not for rails)"
icon_state = "miningcar"
density = 1
icon_opened = "miningcaropen"
icon_closed = "miningcar"
/*********************Mob Capsule*************************/
/obj/item/mobcapsule
name = "lazarus capsule"
desc = "It allows you to store and deploy lazarus-injected creatures easier."
icon = 'icons/obj/mobcap.dmi'
icon_state = "mobcap0"
w_class = WEIGHT_CLASS_TINY
throw_range = 20
var/mob/living/simple_animal/captured = null
var/colorindex = 0
/obj/item/mobcapsule/Destroy()
if(captured)
captured.ghostize()
QDEL_NULL(captured)
return ..()
/obj/item/mobcapsule/attack(var/atom/A, mob/user, prox_flag)
if(!istype(A, /mob/living/simple_animal) || isbot(A))
return ..()
capture(A, user)
return 1
/obj/item/mobcapsule/proc/capture(var/mob/target, var/mob/U as mob)
var/mob/living/simple_animal/T = target
if(captured)
to_chat(U, "<span class='notice'>Capture failed!</span>: The capsule already has a mob registered to it!")
else
if(istype(T) && "neutral" in T.faction)
T.forceMove(src)
T.name = "[U.name]'s [initial(T.name)]"
T.cancel_camera()
name = "Lazarus Capsule: [initial(T.name)]"
to_chat(U, "<span class='notice'>You placed a [T.name] inside the Lazarus Capsule!</span>")
captured = T
else
to_chat(U, "You can't capture that mob!")
/obj/item/mobcapsule/throw_impact(atom/A, mob/user)
..()
if(captured)
dump_contents(user)
/obj/item/mobcapsule/proc/dump_contents(mob/user)
if(captured)
captured.forceMove(get_turf(src))
captured = null
/obj/item/mobcapsule/attack_self(mob/user)
colorindex += 1
if(colorindex >= 6)
colorindex = 0
icon_state = "mobcap[colorindex]"
update_icon()
/*****************************Survival Pod********************************/
/area/survivalpod
name = "\improper Emergency Shelter"
icon_state = "away"
requires_power = 0
has_gravity = 1
/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)] (<A HREF='?_src_=holder;adminmoreinfo=\ref[usr]'>?</A>) (<A HREF='?_src_=holder;adminplayerobservefollow=\ref[usr]'>FLW</A>) 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/stool/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/New(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)