mirror of
https://github.com/CHOMPstation/CHOMPstation.git
synced 2026-08-28 22:46:22 +01:00
+12
-5
@@ -31,6 +31,7 @@
|
||||
#include "code\__defines\mobs.dm"
|
||||
#include "code\__defines\research.dm"
|
||||
#include "code\__defines\species_languages.dm"
|
||||
#include "code\__defines\turfs.dm"
|
||||
#include "code\_helpers\atmospherics.dm"
|
||||
#include "code\_helpers\datum_pool.dm"
|
||||
#include "code\_helpers\files.dm"
|
||||
@@ -372,6 +373,7 @@
|
||||
#include "code\game\machinery\doppler_array.dm"
|
||||
#include "code\game\machinery\flasher.dm"
|
||||
#include "code\game\machinery\floodlight.dm"
|
||||
#include "code\game\machinery\floor_light.dm"
|
||||
#include "code\game\machinery\floorlayer.dm"
|
||||
#include "code\game\machinery\hologram.dm"
|
||||
#include "code\game\machinery\holosign.dm"
|
||||
@@ -578,7 +580,6 @@
|
||||
#include "code\game\objects\effects\decals\posters\bs12.dm"
|
||||
#include "code\game\objects\effects\spawners\bombspawner.dm"
|
||||
#include "code\game\objects\effects\spawners\gibspawner.dm"
|
||||
#include "code\game\objects\effects\spawners\vaultspawner.dm"
|
||||
#include "code\game\objects\items\apc_frame.dm"
|
||||
#include "code\game\objects\items\blueprints.dm"
|
||||
#include "code\game\objects\items\bodybag.dm"
|
||||
@@ -636,9 +637,6 @@
|
||||
#include "code\game\objects\items\stacks\rods.dm"
|
||||
#include "code\game\objects\items\stacks\stack.dm"
|
||||
#include "code\game\objects\items\stacks\sheets\leather.dm"
|
||||
#include "code\game\objects\items\stacks\sheets\light.dm"
|
||||
#include "code\game\objects\items\stacks\tiles\light.dm"
|
||||
#include "code\game\objects\items\stacks\tiles\plasteel.dm"
|
||||
#include "code\game\objects\items\stacks\tiles\tile_types.dm"
|
||||
#include "code\game\objects\items\weapons\AI_modules.dm"
|
||||
#include "code\game\objects\items\weapons\autopsy.dm"
|
||||
@@ -690,6 +688,7 @@
|
||||
#include "code\game\objects\items\weapons\circuitboards\machinery\biogenerator.dm"
|
||||
#include "code\game\objects\items\weapons\circuitboards\machinery\cloning.dm"
|
||||
#include "code\game\objects\items\weapons\circuitboards\machinery\commsantenna.dm"
|
||||
#include "code\game\objects\items\weapons\circuitboards\machinery\mech_recharger.dm"
|
||||
#include "code\game\objects\items\weapons\circuitboards\machinery\mining_drill.dm"
|
||||
#include "code\game\objects\items\weapons\circuitboards\machinery\pacman.dm"
|
||||
#include "code\game\objects\items\weapons\circuitboards\machinery\power.dm"
|
||||
@@ -810,9 +809,18 @@
|
||||
#include "code\game\objects\structures\stool_bed_chair_nest\wheelchair.dm"
|
||||
#include "code\game\turfs\simulated.dm"
|
||||
#include "code\game\turfs\turf.dm"
|
||||
#include "code\game\turfs\turf_changing.dm"
|
||||
#include "code\game\turfs\turf_flick_animations.dm"
|
||||
#include "code\game\turfs\unsimulated.dm"
|
||||
#include "code\game\turfs\flooring\flooring.dm"
|
||||
#include "code\game\turfs\flooring\flooring_decals.dm"
|
||||
#include "code\game\turfs\flooring\flooring_premade.dm"
|
||||
#include "code\game\turfs\simulated\floor.dm"
|
||||
#include "code\game\turfs\simulated\floor_acts.dm"
|
||||
#include "code\game\turfs\simulated\floor_attackby.dm"
|
||||
#include "code\game\turfs\simulated\floor_damage.dm"
|
||||
#include "code\game\turfs\simulated\floor_icon.dm"
|
||||
#include "code\game\turfs\simulated\floor_static.dm"
|
||||
#include "code\game\turfs\simulated\floor_types.dm"
|
||||
#include "code\game\turfs\simulated\wall_attacks.dm"
|
||||
#include "code\game\turfs\simulated\wall_icon.dm"
|
||||
@@ -1429,7 +1437,6 @@
|
||||
#include "code\modules\power\cable.dm"
|
||||
#include "code\modules\power\cable_heavyduty.dm"
|
||||
#include "code\modules\power\cell.dm"
|
||||
#include "code\modules\power\engine.dm"
|
||||
#include "code\modules\power\fractal_reactor.dm"
|
||||
#include "code\modules\power\generator.dm"
|
||||
#include "code\modules\power\generator_type2.dm"
|
||||
|
||||
@@ -49,7 +49,7 @@ Pipelines + Other Objects -> Pipe network
|
||||
|
||||
/obj/machinery/atmospherics/proc/add_underlay(var/turf/T, var/obj/machinery/atmospherics/node, var/direction, var/icon_connect_type)
|
||||
if(node)
|
||||
if(T.intact && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe))
|
||||
if(!T.is_plating() && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe))
|
||||
//underlays += icon_manager.get_atmos_icon("underlay_down", direction, color_cache_name(node))
|
||||
underlays += icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "down" + icon_connect_type)
|
||||
else
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
if(!istype(T))
|
||||
return
|
||||
|
||||
if(T.intact && node1 && node2 && node1.level == 1 && node2.level == 1 && istype(node1, /obj/machinery/atmospherics/pipe) && istype(node2, /obj/machinery/atmospherics/pipe))
|
||||
if(!T.is_plating() && node1 && node2 && node1.level == 1 && node2.level == 1 && istype(node1, /obj/machinery/atmospherics/pipe) && istype(node2, /obj/machinery/atmospherics/pipe))
|
||||
vent_icon += "h"
|
||||
|
||||
if(!powered())
|
||||
@@ -85,7 +85,7 @@
|
||||
var/turf/T = get_turf(src)
|
||||
if(!istype(T))
|
||||
return
|
||||
if(T.intact && node1 && node2 && node1.level == 1 && node2.level == 1 && istype(node1, /obj/machinery/atmospherics/pipe) && istype(node2, /obj/machinery/atmospherics/pipe))
|
||||
if(!T.is_plating() && node1 && node2 && node1.level == 1 && node2.level == 1 && istype(node1, /obj/machinery/atmospherics/pipe) && istype(node2, /obj/machinery/atmospherics/pipe))
|
||||
return
|
||||
else
|
||||
if (node1)
|
||||
|
||||
@@ -189,7 +189,7 @@
|
||||
var/turf/T = get_turf(src)
|
||||
if(!istype(T))
|
||||
return
|
||||
if(T.intact && istype(P.node, /obj/machinery/atmospherics/pipe) && P.node.level == 1 )
|
||||
if(!T.is_plating() && istype(P.node, /obj/machinery/atmospherics/pipe) && P.node.level == 1 )
|
||||
//pipe_state = icon_manager.get_atmos_icon("underlay_down", P.dir, color_cache_name(P.node))
|
||||
pipe_state = icon_manager.get_atmos_icon("underlay", P.dir, color_cache_name(P.node), "down")
|
||||
else
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
if (!istype(W, /obj/item/weapon/wrench))
|
||||
return ..()
|
||||
var/turf/T = src.loc
|
||||
if (level==1 && isturf(T) && T.intact)
|
||||
if (level==1 && isturf(T) && !T.is_plating())
|
||||
user << "<span class='warning'>You must remove the plating first.</span>"
|
||||
return 1
|
||||
var/datum/gas_mixture/int_air = return_air()
|
||||
|
||||
@@ -118,7 +118,7 @@
|
||||
if(!istype(T))
|
||||
return
|
||||
|
||||
if(T.intact && node && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe))
|
||||
if(!T.is_plating() && node && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe))
|
||||
vent_icon += "h"
|
||||
|
||||
if(welded)
|
||||
@@ -136,7 +136,7 @@
|
||||
var/turf/T = get_turf(src)
|
||||
if(!istype(T))
|
||||
return
|
||||
if(T.intact && node && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe))
|
||||
if(!T.is_plating() && node && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe))
|
||||
return
|
||||
else
|
||||
if(node)
|
||||
@@ -399,7 +399,7 @@
|
||||
user << "<span class='warning'>You cannot unwrench \the [src], turn it off first.</span>"
|
||||
return 1
|
||||
var/turf/T = src.loc
|
||||
if (node && node.level==1 && isturf(T) && T.intact)
|
||||
if (node && node.level==1 && isturf(T) && !T.is_plating())
|
||||
user << "<span class='warning'>You must remove the plating first.</span>"
|
||||
return 1
|
||||
var/datum/gas_mixture/int_air = return_air()
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
var/turf/T = get_turf(src)
|
||||
if(!istype(T))
|
||||
return
|
||||
if(T.intact && node && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe))
|
||||
if(!T.is_plating() && node && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe))
|
||||
return
|
||||
else
|
||||
if(node)
|
||||
@@ -261,7 +261,7 @@
|
||||
user << "<span class='warning'>You cannot unwrench \the [src], turn it off first.</span>"
|
||||
return 1
|
||||
var/turf/T = src.loc
|
||||
if (node && node.level==1 && isturf(T) && T.intact)
|
||||
if (node && node.level==1 && isturf(T) && !T.is_plating())
|
||||
user << "<span class='warning'>You must remove the plating first.</span>"
|
||||
return 1
|
||||
var/datum/gas_mixture/int_air = return_air()
|
||||
|
||||
@@ -181,7 +181,7 @@ obj/machinery/atmospherics/mains_pipe/simple
|
||||
..() // initialize internal pipes
|
||||
|
||||
var/turf/T = src.loc // hide if turf is not intact
|
||||
hide(T.intact)
|
||||
if(level == 1 && !T.is_plating()) hide(1)
|
||||
update_icon()
|
||||
|
||||
hidden
|
||||
@@ -243,7 +243,7 @@ obj/machinery/atmospherics/mains_pipe/manifold
|
||||
..() // initialize internal pipes
|
||||
|
||||
var/turf/T = src.loc // hide if turf is not intact
|
||||
hide(T.intact)
|
||||
if(level == 1 && !T.is_plating()) hide(1)
|
||||
update_icon()
|
||||
|
||||
update_icon()
|
||||
@@ -293,7 +293,7 @@ obj/machinery/atmospherics/mains_pipe/manifold4w
|
||||
..() // initialize internal pipes
|
||||
|
||||
var/turf/T = src.loc // hide if turf is not intact
|
||||
hide(T.intact)
|
||||
if(level == 1 && !T.is_plating()) hide(1)
|
||||
update_icon()
|
||||
|
||||
update_icon()
|
||||
@@ -354,7 +354,7 @@ obj/machinery/atmospherics/mains_pipe/split
|
||||
N1.merge(N2)
|
||||
|
||||
var/turf/T = src.loc // hide if turf is not intact
|
||||
hide(T.intact)
|
||||
if(level == 1 && !T.is_plating()) hide(1)
|
||||
update_icon()
|
||||
|
||||
update_icon()
|
||||
@@ -475,7 +475,7 @@ obj/machinery/atmospherics/mains_pipe/split3
|
||||
N1.merge(N2)
|
||||
|
||||
var/turf/T = src.loc // hide if turf is not intact
|
||||
hide(T.intact)
|
||||
if(level == 1 && !T.is_plating()) hide(1)
|
||||
update_icon()
|
||||
|
||||
update_icon()
|
||||
@@ -525,7 +525,7 @@ obj/machinery/atmospherics/mains_pipe/cap
|
||||
..()
|
||||
|
||||
var/turf/T = src.loc // hide if turf is not intact
|
||||
hide(T.intact)
|
||||
if(level == 1 && !T.is_plating()) hide(1)
|
||||
update_icon()
|
||||
|
||||
hidden
|
||||
|
||||
+16
-18
@@ -1,8 +1,7 @@
|
||||
/obj/machinery/atmospherics/pipe
|
||||
|
||||
var/datum/gas_mixture/air_temporary //used when reconstructing a pipeline that broke
|
||||
var/datum/gas_mixture/air_temporary // used when reconstructing a pipeline that broke
|
||||
var/datum/pipeline/parent
|
||||
|
||||
var/volume = 0
|
||||
force = 20
|
||||
|
||||
@@ -20,10 +19,12 @@
|
||||
return -1
|
||||
|
||||
/obj/machinery/atmospherics/pipe/New()
|
||||
..()
|
||||
//so pipes under walls are hidden
|
||||
if(istype(get_turf(src), /turf/simulated/wall) || istype(get_turf(src), /turf/simulated/shuttle/wall) || istype(get_turf(src), /turf/unsimulated/wall))
|
||||
level = 1
|
||||
..()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/hides_under_flooring()
|
||||
return level != 2
|
||||
|
||||
/obj/machinery/atmospherics/pipe/proc/pipeline_expansion()
|
||||
return null
|
||||
@@ -81,7 +82,7 @@
|
||||
if (!istype(W, /obj/item/weapon/wrench))
|
||||
return ..()
|
||||
var/turf/T = src.loc
|
||||
if (level==1 && isturf(T) && T.intact)
|
||||
if (level==1 && isturf(T) && !T.is_plating())
|
||||
user << "<span class='warning'>You must remove the plating first.</span>"
|
||||
return 1
|
||||
var/datum/gas_mixture/int_air = return_air()
|
||||
@@ -188,7 +189,7 @@
|
||||
initialize_directions = SOUTH|WEST
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/hide(var/i)
|
||||
if(level == 1 && istype(loc, /turf/simulated))
|
||||
if(istype(loc, /turf/simulated))
|
||||
invisibility = i ? 101 : 0
|
||||
update_icon()
|
||||
|
||||
@@ -297,9 +298,8 @@
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
var/turf/T = get_turf(src)
|
||||
if(istype(T))
|
||||
hide(T.intact)
|
||||
var/turf/T = loc
|
||||
if(level == 1 && !T.is_plating()) hide(1)
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/disconnect(obj/machinery/atmospherics/reference)
|
||||
@@ -446,7 +446,7 @@
|
||||
initialize_directions = NORTH|EAST|SOUTH
|
||||
|
||||
/obj/machinery/atmospherics/pipe/manifold/hide(var/i)
|
||||
if(level == 1 && istype(loc, /turf/simulated))
|
||||
if(istype(loc, /turf/simulated))
|
||||
invisibility = i ? 101 : 0
|
||||
update_icon()
|
||||
|
||||
@@ -582,8 +582,7 @@
|
||||
return
|
||||
|
||||
var/turf/T = get_turf(src)
|
||||
if(istype(T))
|
||||
hide(T.intact)
|
||||
if(level == 1 && !T.is_plating()) hide(1)
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/manifold/visible
|
||||
@@ -806,7 +805,7 @@
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/manifold4w/hide(var/i)
|
||||
if(level == 1 && istype(loc, /turf/simulated))
|
||||
if(istype(loc, /turf/simulated))
|
||||
invisibility = i ? 101 : 0
|
||||
update_icon()
|
||||
|
||||
@@ -841,8 +840,7 @@
|
||||
return
|
||||
|
||||
var/turf/T = get_turf(src)
|
||||
if(istype(T))
|
||||
hide(T.intact)
|
||||
if(level == 1 && !T.is_plating()) hide(1)
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/manifold4w/visible
|
||||
@@ -946,7 +944,7 @@
|
||||
initialize_directions = dir
|
||||
|
||||
/obj/machinery/atmospherics/pipe/cap/hide(var/i)
|
||||
if(level == 1 && istype(loc, /turf/simulated))
|
||||
if(istype(loc, /turf/simulated))
|
||||
invisibility = i ? 101 : 0
|
||||
update_icon()
|
||||
|
||||
@@ -997,7 +995,7 @@
|
||||
break
|
||||
|
||||
var/turf/T = src.loc // hide if turf is not intact
|
||||
hide(T.intact)
|
||||
if(level == 1 && !T.is_plating()) hide(1)
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/cap/visible
|
||||
@@ -1386,7 +1384,7 @@
|
||||
|
||||
/obj/machinery/atmospherics/proc/add_underlay_adapter(var/turf/T, var/obj/machinery/atmospherics/node, var/direction, var/icon_connect_type) //modified from add_underlay, does not make exposed underlays
|
||||
if(node)
|
||||
if(T.intact && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe))
|
||||
if(!T.is_plating() && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe))
|
||||
underlays += icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "down" + icon_connect_type)
|
||||
else
|
||||
underlays += icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "intact" + icon_connect_type)
|
||||
|
||||
@@ -46,8 +46,8 @@ obj/machinery/atmospherics/pipe/zpipe/New()
|
||||
if(SOUTHWEST)
|
||||
initialize_directions = SOUTH
|
||||
|
||||
obj/machinery/atmospherics/pipe/zpipe/hide(var/i)
|
||||
if(level == 1 && istype(loc, /turf/simulated))
|
||||
/obj/machinery/atmospherics/pipe/zpipe/hide(var/i)
|
||||
if(istype(loc, /turf/simulated))
|
||||
invisibility = i ? 101 : 0
|
||||
update_icon()
|
||||
|
||||
@@ -149,7 +149,7 @@ obj/machinery/atmospherics/pipe/zpipe/up/initialize()
|
||||
|
||||
|
||||
var/turf/T = src.loc // hide if turf is not intact
|
||||
hide(T.intact)
|
||||
hide(!T.is_plating())
|
||||
|
||||
///////////////////////
|
||||
// and the down pipe //
|
||||
@@ -190,7 +190,7 @@ obj/machinery/atmospherics/pipe/zpipe/down/initialize()
|
||||
|
||||
|
||||
var/turf/T = src.loc // hide if turf is not intact
|
||||
hide(T.intact)
|
||||
hide(!T.is_plating())
|
||||
|
||||
///////////////////////
|
||||
// supply/scrubbers //
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
/turf/simulated/floor/open
|
||||
name = "open space"
|
||||
intact = 0
|
||||
density = 0
|
||||
icon_state = "black"
|
||||
pathweight = 100000 //Seriously, don't try and path over this one numbnuts
|
||||
@@ -81,8 +80,7 @@
|
||||
// override to make sure nothing is hidden
|
||||
/turf/simulated/floor/open/levelupdate()
|
||||
for(var/obj/O in src)
|
||||
if(O.level == 1)
|
||||
O.hide(0)
|
||||
O.hide(0)
|
||||
|
||||
//overwrite the attackby of space to transform it to openspace if necessary
|
||||
/turf/space/attackby(obj/item/C as obj, mob/user as mob)
|
||||
@@ -114,16 +112,16 @@
|
||||
ReplaceWithLattice()
|
||||
return
|
||||
|
||||
if (istype(C, /obj/item/stack/tile/steel))
|
||||
if (istype(C, /obj/item/stack/tile/floor))
|
||||
var/obj/structure/lattice/L = locate(/obj/structure/lattice, src)
|
||||
if(L)
|
||||
var/obj/item/stack/tile/steel/S = C
|
||||
var/obj/item/stack/tile/floor/S = C
|
||||
if (S.get_amount() < 1)
|
||||
return
|
||||
qdel(L)
|
||||
playsound(src.loc, 'sound/weapons/Genhit.ogg', 50, 1)
|
||||
S.build(src)
|
||||
S.use(1)
|
||||
ChangeTurf(/turf/simulated/floor/airless)
|
||||
return
|
||||
else
|
||||
user << "<span class='warning'>The plating is going to need some support.</span>"
|
||||
|
||||
@@ -8,6 +8,8 @@
|
||||
#define MOLES_PHORON_VISIBLE 0.7 // Moles in a standard cell after which phoron is visible.
|
||||
#define MOLES_O2STANDARD (MOLES_CELLSTANDARD * O2STANDARD) // O2 standard value (21%)
|
||||
#define MOLES_N2STANDARD (MOLES_CELLSTANDARD * N2STANDARD) // N2 standard value (79%)
|
||||
#define MOLES_O2ATMOS (MOLES_O2STANDARD*50)
|
||||
#define MOLES_N2ATMOS (MOLES_N2STANDARD*50)
|
||||
|
||||
// These are for when a mob breathes poisonous air.
|
||||
#define MIN_TOXIN_DAMAGE 1
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
#define ON_BORDER 64 // Item has priority to check when entering or leaving.
|
||||
#define NOBLOODY 512 // Used for items if they don't want to get a blood overlay.
|
||||
#define NODELAY 8192 // 1 second attack-by delay skipped (Can be used once every 0.2s). Most objects have a 1s attack-by delay, which doesn't require a flag.
|
||||
#define PROXMOVE 16384 // Does this object require proximity checking in Enter()?
|
||||
|
||||
//Use these flags to indicate if an item obscures the specified slots from view, whereas body_parts_covered seems to be used to indicate what body parts the item protects.
|
||||
#define GLASSESCOVERSEYES 256
|
||||
|
||||
+15
-7
@@ -63,15 +63,23 @@
|
||||
#define LIFE_HUD 10 // STATUS_HUD that only reports dead or alive
|
||||
|
||||
//some colors
|
||||
#define COLOR_RED "#FF0000"
|
||||
#define COLOR_GREEN "#00FF00"
|
||||
#define COLOR_BLUE "#0000FF"
|
||||
#define COLOR_CYAN "#00FFFF"
|
||||
#define COLOR_PINK "#FF00FF"
|
||||
#define COLOR_YELLOW "#FFFF00"
|
||||
#define COLOR_ORANGE "#FF9900"
|
||||
#define COLOR_WHITE "#FFFFFF"
|
||||
#define COLOR_SILVER "#C0C0C0"
|
||||
#define COLOR_GRAY "#808080"
|
||||
#define COLOR_BLACK "#000000"
|
||||
#define COLOR_RED "#FF0000"
|
||||
#define COLOR_MAROON "#800000"
|
||||
#define COLOR_YELLOW "#FFFF00"
|
||||
#define COLOR_OLIVE "#808000"
|
||||
#define COLOR_LIME "#00FF00"
|
||||
#define COLOR_GREEN "#008000"
|
||||
#define COLOR_CYAN "#00FFFF"
|
||||
#define COLOR_TEAL "#008080"
|
||||
#define COLOR_BLUE "#0000FF"
|
||||
#define COLOR_NAVY "#000080"
|
||||
#define COLOR_PINK "#FF00FF"
|
||||
#define COLOR_PURPLE "#800080"
|
||||
#define COLOR_ORANGE "#FF9900"
|
||||
|
||||
// Shuttles.
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#define SHEET_MATERIAL_AMOUNT 2000
|
||||
|
||||
#define TECH_MATERIAL "materials"
|
||||
#define TECH_ENGINERING "engineering"
|
||||
#define TECH_ENGINEERING "engineering"
|
||||
#define TECH_PHORON "phorontech"
|
||||
#define TECH_POWER "powerstorage"
|
||||
#define TECH_BLUESPACE "bluespace"
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
#define TURF_REMOVE_CROWBAR 1
|
||||
#define TURF_REMOVE_SCREWDRIVER 2
|
||||
#define TURF_REMOVE_SHOVEL 4
|
||||
#define TURF_REMOVE_WRENCH 8
|
||||
#define TURF_CAN_BREAK 16
|
||||
#define TURF_CAN_BURN 32
|
||||
#define TURF_HAS_EDGES 64
|
||||
#define TURF_HAS_CORNERS 128
|
||||
#define TURF_IS_FRAGILE 256
|
||||
#define TURF_ACID_IMMUNE 512
|
||||
@@ -27,8 +27,10 @@
|
||||
|
||||
/obj/effect/beam
|
||||
name = "beam"
|
||||
density = 0
|
||||
unacidable = 1//Just to be sure.
|
||||
var/def_zone
|
||||
flags = PROXMOVE
|
||||
pass_flags = PASSTABLE
|
||||
|
||||
|
||||
|
||||
@@ -599,4 +599,4 @@
|
||||
desc = "Instant research tool. For testing purposes only."
|
||||
icon = 'icons/obj/stock_parts.dmi'
|
||||
icon_state = "smes_coil"
|
||||
origin_tech = list(TECH_MATERIAL = 19, TECH_ENGINERING = 19, TECH_PHORON = 19, TECH_POWER = 19, TECH_BLUESPACE = 19, TECH_BIO = 19, TECH_COMBAT = 19, TECH_MAGNET = 19, TECH_DATA = 19, TECH_ILLEGAL = 19, TECH_ARCANE = 19)
|
||||
origin_tech = list(TECH_MATERIAL = 19, TECH_ENGINEERING = 19, TECH_PHORON = 19, TECH_POWER = 19, TECH_BLUESPACE = 19, TECH_BIO = 19, TECH_COMBAT = 19, TECH_MAGNET = 19, TECH_DATA = 19, TECH_ILLEGAL = 19, TECH_ARCANE = 19)
|
||||
|
||||
@@ -24,7 +24,7 @@ proc/spawn_room(var/atom/start_loc,var/x_size,var/y_size,var/wall,var/floor , va
|
||||
if(!wall)
|
||||
wall = pick(/turf/simulated/wall/r_wall,/turf/simulated/wall,/obj/effect/alien/resin)
|
||||
if(!floor)
|
||||
floor = pick(/turf/simulated/floor,/turf/simulated/floor/engine)
|
||||
floor = pick(/turf/simulated/floor,/turf/simulated/floor/tiled,/turf/simulated/floor/reinforced)
|
||||
|
||||
for(var/x = 0,x<x_size,x++)
|
||||
for(var/y = 0,y<y_size,y++)
|
||||
@@ -76,9 +76,9 @@ proc/admin_spawn_room_at_pos()
|
||||
wall=/obj/effect/alien/resin
|
||||
switch(alert("Floor type",null,"Regular floor","Reinforced floor"))
|
||||
if("Regular floor")
|
||||
floor=/turf/simulated/floor
|
||||
floor=/turf/simulated/floor/tiled
|
||||
if("Reinforced floor")
|
||||
floor=/turf/simulated/floor/engine
|
||||
floor=/turf/simulated/floor/reinforced
|
||||
if(x && y && z && wall && floor && x_len && y_len)
|
||||
spawn_room(locate(x,y,z),x_len,y_len,wall,floor,clean)
|
||||
return
|
||||
|
||||
+4
-2
@@ -35,7 +35,7 @@
|
||||
else
|
||||
return null
|
||||
|
||||
//return flags that should be added to the viewer's sight var.
|
||||
//return flags that should be added to the viewer's sight var.
|
||||
//Otherwise return a negative number to indicate that the view should be cancelled.
|
||||
/atom/proc/check_eye(user as mob)
|
||||
if (istype(user, /mob/living/silicon/ai)) // WHYYYY
|
||||
@@ -66,6 +66,8 @@
|
||||
/atom/proc/CheckExit()
|
||||
return 1
|
||||
|
||||
// If you want to use this, the atom must have the PROXMOVE flag, and the moving
|
||||
// atom must also have the PROXMOVE flag currently to help with lag. ~ ComicIronic
|
||||
/atom/proc/HasProximity(atom/movable/AM as mob|obj)
|
||||
return
|
||||
|
||||
@@ -213,7 +215,7 @@ its easier to just keep the beam vertical.
|
||||
|
||||
/atom/proc/ex_act()
|
||||
return
|
||||
|
||||
|
||||
/atom/proc/emag_act(var/remaining_charges, var/mob/user, var/emag_source)
|
||||
return -1
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// Returns the lowest turf available on a given Z-level, defaults to space.
|
||||
var/global/list/base_turf_by_z = list(
|
||||
"5" = /turf/simulated/floor/plating/airless/asteroid // Moonbase.
|
||||
"5" = /turf/simulated/floor/asteroid // Moonbase.
|
||||
)
|
||||
|
||||
proc/get_base_turf(var/z)
|
||||
|
||||
@@ -127,11 +127,6 @@
|
||||
T.ChangeTurf(/turf/simulated/wall/cult)
|
||||
..()
|
||||
|
||||
/obj/structure/stool/cultify()
|
||||
var/obj/structure/bed/chair/wood/wings/I = new(loc)
|
||||
I.dir = dir
|
||||
..()
|
||||
|
||||
/obj/structure/table/cultify()
|
||||
// Make it a wood-reinforced wooden table.
|
||||
// There are cult materials available, but it'd make the table non-deconstructable with how holotables work.
|
||||
|
||||
@@ -3,11 +3,9 @@
|
||||
return
|
||||
|
||||
/turf/simulated/floor/cultify()
|
||||
//todo: flooring datum cultify check
|
||||
cultify_floor()
|
||||
|
||||
/turf/simulated/floor/carpet/cultify()
|
||||
return
|
||||
|
||||
/turf/simulated/shuttle/floor/cultify()
|
||||
cultify_floor()
|
||||
|
||||
@@ -39,8 +37,6 @@
|
||||
if((icon_state != "cult")&&(icon_state != "cult-narsie"))
|
||||
name = "engraved floor"
|
||||
icon_state = "cult"
|
||||
turf_animation('icons/effects/effects.dmi',"cultfloor",0,0,MOB_LAYER-1)
|
||||
|
||||
/turf/proc/cultify_wall()
|
||||
ChangeTurf(/turf/unsimulated/wall/cult)
|
||||
turf_animation('icons/effects/effects.dmi',"cultwall",0,0,MOB_LAYER-1)
|
||||
|
||||
@@ -144,6 +144,7 @@ var/global/list/narsie_list = list()
|
||||
if(!(istype(T, /turf/simulated/wall/cult)||istype(T, /turf/space)))
|
||||
if(T.icon_state != "cult-narsie")
|
||||
T.desc = "something that goes beyond your understanding went this way"
|
||||
T.icon = 'icons/turf/flooring/cult.dmi'
|
||||
T.icon_state = "cult-narsie"
|
||||
T.set_light(1)
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
Beacon.invisibility = INVISIBILITY_MAXIMUM
|
||||
Beacon.loc = T
|
||||
|
||||
hide(T.intact)
|
||||
hide(!T.is_plating())
|
||||
|
||||
Destroy()
|
||||
if(Beacon)
|
||||
|
||||
@@ -85,10 +85,8 @@
|
||||
if(istype(new_turf, /turf/simulated/floor))
|
||||
var/turf/simulated/floor/T = new_turf
|
||||
if(!T.is_plating())
|
||||
if(!T.broken && !T.burnt)
|
||||
new T.floor_type(T)
|
||||
T.make_plating()
|
||||
return !new_turf.intact
|
||||
T.make_plating(!(T.broken || T.burnt))
|
||||
return new_turf.is_plating()
|
||||
|
||||
/obj/machinery/cablelayer/proc/layCable(var/turf/new_turf,var/M_Dir)
|
||||
if(!on)
|
||||
|
||||
@@ -37,6 +37,11 @@
|
||||
path = /obj/item/device/flashlight
|
||||
category = "General"
|
||||
|
||||
/datum/autolathe/recipe/floor_light
|
||||
name = "floor light"
|
||||
path = /obj/machinery/floor_light
|
||||
category = "General"
|
||||
|
||||
/datum/autolathe/recipe/extinguisher
|
||||
name = "extinguisher"
|
||||
path = /obj/item/weapon/extinguisher
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
/obj/machinery/camera
|
||||
|
||||
var/list/motionTargets = list()
|
||||
var/detectTime = 0
|
||||
var/area/ai_monitored/area_motion = null
|
||||
var/alarm_delay = 100 // Don't forget, there's another 10 seconds in queueAlarm()
|
||||
|
||||
flags = PROXMOVE
|
||||
|
||||
/obj/machinery/camera/process()
|
||||
// motion camera event loop
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
anchored = 1
|
||||
use_power = 1
|
||||
idle_power_usage = 2
|
||||
flags = PROXMOVE
|
||||
|
||||
/obj/machinery/flasher/portable //Portable version of the flasher. Only flashes when anchored
|
||||
name = "portable flasher"
|
||||
@@ -24,11 +25,6 @@
|
||||
base_state = "pflash"
|
||||
density = 1
|
||||
|
||||
/*
|
||||
/obj/machinery/flasher/New()
|
||||
sleep(4) //<--- What the fuck are you doing? D=
|
||||
src.sd_SetLuminosity(2)
|
||||
*/
|
||||
/obj/machinery/flasher/power_change()
|
||||
..()
|
||||
if ( !(stat & NOPOWER) )
|
||||
|
||||
@@ -0,0 +1,154 @@
|
||||
var/list/floor_light_cache = list()
|
||||
|
||||
/obj/machinery/floor_light
|
||||
name = "floor light"
|
||||
icon = 'icons/obj/machines/floor_light.dmi'
|
||||
icon_state = "base"
|
||||
desc = "A backlit floor panel."
|
||||
layer = TURF_LAYER+0.001
|
||||
anchored = 0
|
||||
use_power = 2
|
||||
idle_power_usage = 2
|
||||
active_power_usage = 20
|
||||
power_channel = LIGHT
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 2500, "glass" = 2750)
|
||||
|
||||
var/on
|
||||
var/damaged
|
||||
var/default_light_range = 4
|
||||
var/default_light_power = 2
|
||||
var/default_light_colour = "#FFFFFF"
|
||||
|
||||
/obj/machinery/floor_light/attackby(var/obj/item/W, var/mob/user)
|
||||
if(istype(W, /obj/item/weapon/screwdriver))
|
||||
anchored = !anchored
|
||||
visible_message("<span class='notice'>\The [user] has [anchored ? "attached" : "detached"] \the [src].</span>")
|
||||
else if(istype(W, /obj/item/weapon/weldingtool) && (damaged || (stat & BROKEN)))
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
if(!WT.remove_fuel(0, user))
|
||||
user << "<span class='warning'>\The [src] must be on to complete this task.</span>"
|
||||
return
|
||||
playsound(src.loc, 'sound/items/Welder.ogg', 50, 1)
|
||||
if(!do_after(user, 20))
|
||||
return
|
||||
if(!src || !WT.isOn())
|
||||
return
|
||||
visible_message("<span class='notice'>\The [user] has repaired \the [src].</span>")
|
||||
stat &= ~BROKEN
|
||||
damaged = null
|
||||
update_brightness()
|
||||
else if(W.force && user.a_intent == "hurt")
|
||||
attack_hand(user)
|
||||
return
|
||||
|
||||
/obj/machinery/floor_light/attack_hand(var/mob/user)
|
||||
|
||||
if(user.a_intent == "hurt" && !user.small)
|
||||
if(!isnull(damaged) && !(stat & BROKEN))
|
||||
visible_message("<span class='danger'>\The [user] smashes \the [src]!</span>")
|
||||
playsound(src, "shatter", 70, 1)
|
||||
stat |= BROKEN
|
||||
else
|
||||
visible_message("<span class='danger'>\The [user] attacks \the [src]!</span>")
|
||||
playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1)
|
||||
if(isnull(damaged)) damaged = 0
|
||||
update_brightness()
|
||||
return
|
||||
else
|
||||
|
||||
if(!anchored)
|
||||
user << "<span class='warning'>\The [src] must be screwed down first.</span>"
|
||||
return
|
||||
|
||||
if(stat & BROKEN)
|
||||
user << "<span class='warning'>\The [src] is too damaged to be functional.</span>"
|
||||
return
|
||||
|
||||
if(stat & NOPOWER)
|
||||
user << "<span class='warning'>\The [src] is unpowered.</span>"
|
||||
return
|
||||
|
||||
on = !on
|
||||
if(on) use_power = 2
|
||||
visible_message("<span class='notice'>\The [user] turns \the [src] [on ? "on" : "off"].</span>")
|
||||
update_brightness()
|
||||
return
|
||||
|
||||
/obj/machinery/floor_light/process()
|
||||
..()
|
||||
var/need_update
|
||||
if((!anchored || broken()) && on)
|
||||
use_power = 0
|
||||
on = 0
|
||||
need_update = 1
|
||||
else if(use_power && !on)
|
||||
use_power = 0
|
||||
need_update = 1
|
||||
if(need_update)
|
||||
update_brightness()
|
||||
|
||||
/obj/machinery/floor_light/proc/update_brightness()
|
||||
if(on && use_power == 2)
|
||||
if(light_range != default_light_range || light_power != default_light_power || light_color != default_light_colour)
|
||||
set_light(default_light_range, default_light_power, default_light_colour)
|
||||
else
|
||||
use_power = 0
|
||||
if(light_range || light_power)
|
||||
set_light(0)
|
||||
|
||||
active_power_usage = ((light_range + light_power) * 10)
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/floor_light/update_icon()
|
||||
overlays.Cut()
|
||||
if(use_power && !broken())
|
||||
if(isnull(damaged))
|
||||
var/cache_key = "floorlight-[default_light_colour]"
|
||||
if(!floor_light_cache[cache_key])
|
||||
var/image/I = image("on")
|
||||
I.color = default_light_colour
|
||||
I.layer = layer+0.001
|
||||
floor_light_cache[cache_key] = I
|
||||
overlays |= floor_light_cache[cache_key]
|
||||
else
|
||||
if(damaged == 0) //Needs init.
|
||||
damaged = rand(1,4)
|
||||
var/cache_key = "floorlight-broken[damaged]-[default_light_colour]"
|
||||
if(!floor_light_cache[cache_key])
|
||||
var/image/I = image("flicker[damaged]")
|
||||
I.color = default_light_colour
|
||||
I.layer = layer+0.001
|
||||
floor_light_cache[cache_key] = I
|
||||
overlays |= floor_light_cache[cache_key]
|
||||
|
||||
/obj/machinery/floor_light/proc/broken()
|
||||
return (stat & (BROKEN|NOPOWER))
|
||||
|
||||
/obj/machinery/floor_light/ex_act(severity)
|
||||
switch(severity)
|
||||
if(1)
|
||||
qdel(src)
|
||||
if(2)
|
||||
if (prob(50))
|
||||
qdel(src)
|
||||
else if(prob(20))
|
||||
stat |= BROKEN
|
||||
else
|
||||
if(isnull(damaged))
|
||||
damaged = 0
|
||||
if(3)
|
||||
if (prob(5))
|
||||
qdel(src)
|
||||
else if(isnull(damaged))
|
||||
damaged = 0
|
||||
return
|
||||
|
||||
/obj/machinery/floor_light/Destroy()
|
||||
var/area/A = get_area(src)
|
||||
if(A)
|
||||
on = 0
|
||||
..()
|
||||
|
||||
/obj/machinery/floor_light/cultify()
|
||||
default_light_colour = "#FF0000"
|
||||
update_brightness()
|
||||
@@ -10,7 +10,7 @@
|
||||
var/list/mode = list("dismantle"=0,"laying"=0,"collect"=0)
|
||||
|
||||
/obj/machinery/floorlayer/New()
|
||||
T = new/obj/item/stack/tile/steel(src)
|
||||
T = new/obj/item/stack/tile/floor(src)
|
||||
..()
|
||||
|
||||
/obj/machinery/floorlayer/Move(new_turf,M_Dir)
|
||||
@@ -80,10 +80,8 @@
|
||||
if(istype(new_turf, /turf/simulated/floor))
|
||||
var/turf/simulated/floor/T = new_turf
|
||||
if(!T.is_plating())
|
||||
if(!T.broken && !T.burnt)
|
||||
new T.floor_type(T)
|
||||
T.make_plating()
|
||||
return !new_turf.intact
|
||||
T.make_plating(!(T.broken || T.burnt))
|
||||
return new_turf.is_plating()
|
||||
|
||||
/obj/machinery/floorlayer/proc/TakeNewStack()
|
||||
for(var/obj/item/stack/tile/tile in contents)
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
New()
|
||||
..()
|
||||
var/turf/T = loc
|
||||
hide(T.intact)
|
||||
hide(!T.is_plating())
|
||||
center = T
|
||||
|
||||
spawn(10) // must wait for map loading to finish
|
||||
|
||||
@@ -29,14 +29,14 @@ var/global/list/navbeacons // no I don't like putting this in, but it will do
|
||||
set_codes()
|
||||
|
||||
var/turf/T = loc
|
||||
hide(T.intact)
|
||||
|
||||
hide(!T.is_plating())
|
||||
|
||||
// add beacon to MULE bot beacon list
|
||||
if(freq == 1400)
|
||||
if(!navbeacons)
|
||||
navbeacons = new()
|
||||
navbeacons += src
|
||||
|
||||
|
||||
|
||||
spawn(5) // must wait for map loading to finish
|
||||
if(radio_controller)
|
||||
@@ -111,7 +111,7 @@ var/global/list/navbeacons // no I don't like putting this in, but it will do
|
||||
|
||||
attackby(var/obj/item/I, var/mob/user)
|
||||
var/turf/T = loc
|
||||
if(T.intact)
|
||||
if(!T.is_plating())
|
||||
return // prevent intraction when T-scanner revealed
|
||||
|
||||
if(istype(I, /obj/item/weapon/screwdriver))
|
||||
@@ -145,7 +145,7 @@ var/global/list/navbeacons // no I don't like putting this in, but it will do
|
||||
|
||||
interact(var/mob/user, var/ai = 0)
|
||||
var/turf/T = loc
|
||||
if(T.intact)
|
||||
if(!T.is_plating())
|
||||
return // prevent intraction when T-scanner revealed
|
||||
|
||||
if(!open && !ai) // can't alter controls if not open, unless you're an AI
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
sense = 0
|
||||
colour = rgb(130,130,130)
|
||||
|
||||
if("/turf/simulated/floor/engine")
|
||||
if("/turf/simulated/floor/reinforced")
|
||||
colour = rgb(128,128,128)
|
||||
|
||||
if("/turf/simulated/wall")
|
||||
@@ -208,7 +208,7 @@
|
||||
colour = rgb(10,10,10)
|
||||
sense = 0
|
||||
|
||||
if("/turf/simulated/floor", "/turf/simulated/floor/engine")
|
||||
if("/turf/simulated/floor/tiled", "/turf/simulated/floor/reinforced")
|
||||
var/datum/gas_mixture/environment = T.return_air()
|
||||
var/turf_total = environment.total_moles
|
||||
var/t1 = turf_total / MOLES_CELLSTANDARD * 175
|
||||
|
||||
@@ -461,7 +461,7 @@ Buildable meters
|
||||
P.set_dir(src.dir)
|
||||
P.initialize_directions = pipe_dir
|
||||
var/turf/T = P.loc
|
||||
P.level = T.intact ? 2 : 1
|
||||
P.level = !T.is_plating() ? 2 : 1
|
||||
P.initialize()
|
||||
if (deleted(P))
|
||||
usr << pipefailtext
|
||||
@@ -480,7 +480,7 @@ Buildable meters
|
||||
P.set_dir(src.dir)
|
||||
P.initialize_directions = pipe_dir
|
||||
var/turf/T = P.loc
|
||||
P.level = T.intact ? 2 : 1
|
||||
P.level = !T.is_plating() ? 2 : 1
|
||||
P.initialize()
|
||||
if (deleted(P))
|
||||
usr << pipefailtext
|
||||
@@ -499,7 +499,7 @@ Buildable meters
|
||||
P.set_dir(src.dir)
|
||||
P.initialize_directions = pipe_dir
|
||||
var/turf/T = P.loc
|
||||
P.level = T.intact ? 2 : 1
|
||||
P.level = !T.is_plating() ? 2 : 1
|
||||
P.initialize()
|
||||
if (deleted(P))
|
||||
usr << pipefailtext
|
||||
@@ -518,7 +518,7 @@ Buildable meters
|
||||
P.set_dir(src.dir)
|
||||
P.initialize_directions = pipe_dir
|
||||
var/turf/T = P.loc
|
||||
P.level = T.intact ? 2 : 1
|
||||
P.level = !T.is_plating() ? 2 : 1
|
||||
P.initialize()
|
||||
if (deleted(P))
|
||||
usr << pipefailtext
|
||||
@@ -536,8 +536,6 @@ Buildable meters
|
||||
P.set_dir(src.dir)
|
||||
P.initialize_directions = pipe_dir //this var it's used to know if the pipe is bent or not
|
||||
P.initialize_directions_he = pipe_dir
|
||||
//var/turf/T = P.loc
|
||||
//P.level = T.intact ? 2 : 1
|
||||
P.initialize()
|
||||
if (deleted(P))
|
||||
usr << pipefailtext
|
||||
@@ -557,7 +555,7 @@ Buildable meters
|
||||
if (pipename)
|
||||
C.name = pipename
|
||||
var/turf/T = C.loc
|
||||
C.level = T.intact ? 2 : 1
|
||||
C.level = !T.is_plating() ? 2 : 1
|
||||
C.initialize()
|
||||
C.build_network()
|
||||
if (C.node)
|
||||
@@ -572,7 +570,7 @@ Buildable meters
|
||||
M.initialize_directions = pipe_dir
|
||||
//M.New()
|
||||
var/turf/T = M.loc
|
||||
M.level = T.intact ? 2 : 1
|
||||
M.level = !T.is_plating() ? 2 : 1
|
||||
M.initialize()
|
||||
if (deleted(M))
|
||||
usr << pipefailtext
|
||||
@@ -595,7 +593,7 @@ Buildable meters
|
||||
M.initialize_directions = pipe_dir
|
||||
//M.New()
|
||||
var/turf/T = M.loc
|
||||
M.level = T.intact ? 2 : 1
|
||||
M.level = !T.is_plating() ? 2 : 1
|
||||
M.initialize()
|
||||
if (!M)
|
||||
usr << "There's nothing to connect this manifold to! (with how the pipe code works, at least one end needs to be connected to something, otherwise the game deletes the segment)"
|
||||
@@ -618,7 +616,7 @@ Buildable meters
|
||||
M.initialize_directions = pipe_dir
|
||||
//M.New()
|
||||
var/turf/T = M.loc
|
||||
M.level = T.intact ? 2 : 1
|
||||
M.level = !T.is_plating() ? 2 : 1
|
||||
M.initialize()
|
||||
if (!M)
|
||||
usr << "There's nothing to connect this manifold to! (with how the pipe code works, at least one end needs to be connected to something, otherwise the game deletes the segment)"
|
||||
@@ -641,7 +639,7 @@ Buildable meters
|
||||
M.initialize_directions = pipe_dir
|
||||
//M.New()
|
||||
var/turf/T = M.loc
|
||||
M.level = T.intact ? 2 : 1
|
||||
M.level = !T.is_plating() ? 2 : 1
|
||||
M.initialize()
|
||||
if (deleted(M))
|
||||
usr << pipefailtext
|
||||
@@ -668,7 +666,7 @@ Buildable meters
|
||||
M.connect_types = src.connect_types
|
||||
//M.New()
|
||||
var/turf/T = M.loc
|
||||
M.level = T.intact ? 2 : 1
|
||||
M.level = !T.is_plating() ? 2 : 1
|
||||
M.initialize()
|
||||
if (!M)
|
||||
usr << "There's nothing to connect this manifold to! (with how the pipe code works, at least one end needs to be connected to something, otherwise the game deletes the segment)"
|
||||
@@ -695,7 +693,7 @@ Buildable meters
|
||||
M.connect_types = src.connect_types
|
||||
//M.New()
|
||||
var/turf/T = M.loc
|
||||
M.level = T.intact ? 2 : 1
|
||||
M.level = !T.is_plating() ? 2 : 1
|
||||
M.initialize()
|
||||
if (!M)
|
||||
usr << "There's nothing to connect this manifold to! (with how the pipe code works, at least one end needs to be connected to something, otherwise the game deletes the segment)"
|
||||
@@ -719,8 +717,6 @@ Buildable meters
|
||||
P.set_dir(src.dir)
|
||||
P.initialize_directions = src.get_pdir()
|
||||
P.initialize_directions_he = src.get_hdir()
|
||||
//var/turf/T = P.loc
|
||||
//P.level = T.intact ? 2 : 1
|
||||
P.initialize()
|
||||
if (deleted(P))
|
||||
usr << pipefailtext //"There's nothing to connect this pipe to! (with how the pipe code works, at least one end needs to be connected to something, otherwise the game deletes the segment)"
|
||||
@@ -740,7 +736,7 @@ Buildable meters
|
||||
if (pipename)
|
||||
V.name = pipename
|
||||
var/turf/T = V.loc
|
||||
V.level = T.intact ? 2 : 1
|
||||
V.level = !T.is_plating() ? 2 : 1
|
||||
V.initialize()
|
||||
V.build_network()
|
||||
if (V.node)
|
||||
@@ -755,7 +751,7 @@ Buildable meters
|
||||
if (pipename)
|
||||
V.name = pipename
|
||||
var/turf/T = V.loc
|
||||
V.level = T.intact ? 2 : 1
|
||||
V.level = !T.is_plating() ? 2 : 1
|
||||
V.initialize()
|
||||
V.build_network()
|
||||
if (V.node1)
|
||||
@@ -774,7 +770,7 @@ Buildable meters
|
||||
if (pipename)
|
||||
P.name = pipename
|
||||
var/turf/T = P.loc
|
||||
P.level = T.intact ? 2 : 1
|
||||
P.level = !T.is_plating() ? 2 : 1
|
||||
P.initialize()
|
||||
P.build_network()
|
||||
if (P.node1)
|
||||
@@ -791,7 +787,7 @@ Buildable meters
|
||||
if (pipename)
|
||||
P.name = pipename
|
||||
var/turf/T = P.loc
|
||||
P.level = T.intact ? 2 : 1
|
||||
P.level = !T.is_plating() ? 2 : 1
|
||||
P.initialize()
|
||||
P.build_network()
|
||||
if (P.node1)
|
||||
@@ -811,7 +807,7 @@ Buildable meters
|
||||
if (pipename)
|
||||
P.name = pipename
|
||||
var/turf/T = P.loc
|
||||
P.level = T.intact ? 2 : 1
|
||||
P.level = !T.is_plating() ? 2 : 1
|
||||
P.initialize()
|
||||
P.build_network()
|
||||
if (P.node1)
|
||||
@@ -831,7 +827,7 @@ Buildable meters
|
||||
if (pipename)
|
||||
P.name = pipename
|
||||
var/turf/T = P.loc
|
||||
P.level = T.intact ? 2 : 1
|
||||
P.level = !T.is_plating() ? 2 : 1
|
||||
P.initialize()
|
||||
P.build_network()
|
||||
if (P.node1)
|
||||
@@ -851,7 +847,7 @@ Buildable meters
|
||||
if (pipename)
|
||||
P.name = pipename
|
||||
var/turf/T = P.loc
|
||||
P.level = T.intact ? 2 : 1
|
||||
P.level = !T.is_plating() ? 2 : 1
|
||||
P.initialize()
|
||||
P.build_network()
|
||||
if (P.node1)
|
||||
@@ -871,7 +867,7 @@ Buildable meters
|
||||
if (pipename)
|
||||
P.name = pipename
|
||||
var/turf/T = P.loc
|
||||
P.level = T.intact ? 2 : 1
|
||||
P.level = !T.is_plating() ? 2 : 1
|
||||
P.initialize()
|
||||
P.build_network()
|
||||
if (P.node1)
|
||||
@@ -891,7 +887,7 @@ Buildable meters
|
||||
if (pipename)
|
||||
S.name = pipename
|
||||
var/turf/T = S.loc
|
||||
S.level = T.intact ? 2 : 1
|
||||
S.level = !T.is_plating() ? 2 : 1
|
||||
S.initialize()
|
||||
S.build_network()
|
||||
if (S.node)
|
||||
@@ -903,7 +899,7 @@ Buildable meters
|
||||
P.set_dir(src.dir)
|
||||
P.initialize_directions = pipe_dir
|
||||
var/turf/T = P.loc
|
||||
P.level = T.intact ? 2 : 1
|
||||
P.level = !T.is_plating() ? 2 : 1
|
||||
P.initialize()
|
||||
if (deleted(P))
|
||||
usr << pipefailtext
|
||||
@@ -923,7 +919,7 @@ Buildable meters
|
||||
if (pipename)
|
||||
V.name = pipename
|
||||
var/turf/T = V.loc
|
||||
V.level = T.intact ? 2 : 1
|
||||
V.level = !T.is_plating() ? 2 : 1
|
||||
V.initialize()
|
||||
V.build_network()
|
||||
if (V.node1)
|
||||
@@ -943,7 +939,7 @@ Buildable meters
|
||||
if (pipename)
|
||||
V.name = pipename
|
||||
var/turf/T = V.loc
|
||||
V.level = T.intact ? 2 : 1
|
||||
V.level = !T.is_plating() ? 2 : 1
|
||||
V.initialize()
|
||||
V.build_network()
|
||||
if (V.node1)
|
||||
@@ -993,7 +989,7 @@ Buildable meters
|
||||
if (pipename)
|
||||
P.name = pipename
|
||||
var/turf/T = P.loc
|
||||
P.level = T.intact ? 2 : 1
|
||||
P.level = !T.is_plating() ? 2 : 1
|
||||
P.initialize()
|
||||
P.build_network()
|
||||
if (P.node1)
|
||||
@@ -1010,7 +1006,7 @@ Buildable meters
|
||||
if (pipename)
|
||||
P.name = pipename
|
||||
var/turf/T = P.loc
|
||||
P.level = T.intact ? 2 : 1
|
||||
P.level = !T.is_plating() ? 2 : 1
|
||||
P.initialize()
|
||||
P.build_network()
|
||||
if (P.node1)
|
||||
@@ -1027,7 +1023,7 @@ Buildable meters
|
||||
if (pipename)
|
||||
C.name = pipename
|
||||
var/turf/T = C.loc
|
||||
C.level = T.intact ? 2 : 1
|
||||
C.level = !T.is_plating() ? 2 : 1
|
||||
C.initialize()
|
||||
C.build_network()
|
||||
if (C.node)
|
||||
@@ -1041,7 +1037,7 @@ Buildable meters
|
||||
if (pipename)
|
||||
P.name = pipename
|
||||
var/turf/T = P.loc
|
||||
P.level = T.intact ? 2 : 1
|
||||
P.level = !T.is_plating() ? 2 : 1
|
||||
P.initialize()
|
||||
P.build_network()
|
||||
if (P.node1)
|
||||
@@ -1057,7 +1053,7 @@ Buildable meters
|
||||
if (pipename)
|
||||
P.name = pipename
|
||||
var/turf/T = P.loc
|
||||
P.level = T.intact ? 2 : 1
|
||||
P.level = !T.is_plating() ? 2 : 1
|
||||
P.initialize()
|
||||
P.build_network()
|
||||
if (P.node1)
|
||||
@@ -1073,7 +1069,7 @@ Buildable meters
|
||||
if (pipename)
|
||||
P.name = pipename
|
||||
var/turf/T = P.loc
|
||||
P.level = T.intact ? 2 : 1
|
||||
P.level = !T.is_plating() ? 2 : 1
|
||||
P.initialize()
|
||||
P.build_network()
|
||||
if (P.node1)
|
||||
@@ -1089,7 +1085,7 @@ Buildable meters
|
||||
if (pipename)
|
||||
P.name = pipename
|
||||
var/turf/T = P.loc
|
||||
P.level = T.intact ? 2 : 1
|
||||
P.level = !T.is_plating() ? 2 : 1
|
||||
P.initialize()
|
||||
P.build_network()
|
||||
if (P.node1)
|
||||
@@ -1105,7 +1101,7 @@ Buildable meters
|
||||
if (pipename)
|
||||
P.name = pipename
|
||||
var/turf/T = P.loc
|
||||
P.level = T.intact ? 2 : 1
|
||||
P.level = !T.is_plating() ? 2 : 1
|
||||
P.initialize()
|
||||
P.build_network()
|
||||
if (P.node1)
|
||||
@@ -1121,7 +1117,7 @@ Buildable meters
|
||||
if (pipename)
|
||||
P.name = pipename
|
||||
var/turf/T = P.loc
|
||||
P.level = T.intact ? 2 : 1
|
||||
P.level = !T.is_plating() ? 2 : 1
|
||||
P.initialize()
|
||||
P.build_network()
|
||||
if (P.node1)
|
||||
@@ -1134,13 +1130,13 @@ Buildable meters
|
||||
if(PIPE_OMNI_MIXER)
|
||||
var/obj/machinery/atmospherics/omni/mixer/P = new(loc)
|
||||
var/turf/T = P.loc
|
||||
P.level = T.intact ? 2 : 1
|
||||
P.level = !T.is_plating() ? 2 : 1
|
||||
P.initialize()
|
||||
P.build_network()
|
||||
if(PIPE_OMNI_FILTER)
|
||||
var/obj/machinery/atmospherics/omni/filter/P = new(loc)
|
||||
var/turf/T = P.loc
|
||||
P.level = T.intact ? 2 : 1
|
||||
P.level = !T.is_plating() ? 2 : 1
|
||||
P.initialize()
|
||||
P.build_network()
|
||||
|
||||
|
||||
@@ -110,10 +110,8 @@
|
||||
if(istype(new_turf, /turf/simulated/floor))
|
||||
var/turf/simulated/floor/T = new_turf
|
||||
if(!T.is_plating())
|
||||
if(!T.broken && !T.burnt)
|
||||
new T.floor_type(T)
|
||||
T.make_plating()
|
||||
return !new_turf.intact
|
||||
T.make_plating(!(T.broken || T.burnt))
|
||||
return new_turf.is_plating()
|
||||
|
||||
/obj/machinery/pipelayer/proc/layPipe(var/turf/w_turf,var/M_Dir,var/old_dir)
|
||||
if(!on || !(M_Dir in list(1, 2, 4, 8)) || M_Dir==old_dir)
|
||||
|
||||
@@ -333,10 +333,8 @@
|
||||
if(istype(new_turf, /turf/simulated/floor))
|
||||
var/turf/simulated/floor/T = new_turf
|
||||
if(!T.is_plating())
|
||||
if(!T.broken && !T.burnt)
|
||||
new T.floor_type(T)
|
||||
T.make_plating()
|
||||
return !new_turf.intact
|
||||
T.make_plating(!(T.broken || T.burnt))
|
||||
return new_turf.is_plating()
|
||||
|
||||
proc/layCable(var/turf/new_turf)
|
||||
if(equip_ready || !istype(new_turf) || !dismantleFloor(new_turf))
|
||||
|
||||
@@ -107,8 +107,8 @@
|
||||
for(var/obj/item/weapon/ore/ore in range(chassis,1))
|
||||
if(get_dir(chassis,ore)&chassis.dir)
|
||||
ore.Move(ore_box)
|
||||
else if(istype(target, /turf/simulated/floor/plating/airless/asteroid))
|
||||
for(var/turf/simulated/floor/plating/airless/asteroid/M in range(chassis,1))
|
||||
else if(istype(target, /turf/simulated/floor/asteroid))
|
||||
for(var/turf/simulated/floor/asteroid/M in range(chassis,1))
|
||||
if(get_dir(chassis,M)&chassis.dir)
|
||||
M.gets_dug()
|
||||
log_message("Drilled through [target]")
|
||||
@@ -127,7 +127,7 @@
|
||||
name = "diamond drill"
|
||||
desc = "This is an upgraded version of the drill that'll pierce the heavens! (Can be attached to: Combat and Engineering Exosuits)"
|
||||
icon_state = "mecha_diamond_drill"
|
||||
origin_tech = list(TECH_MATERIAL = 4, TECH_ENGINERING = 3)
|
||||
origin_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 3)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=10000,"diamond"=6500)
|
||||
equip_cooldown = 20
|
||||
force = 15
|
||||
@@ -161,8 +161,8 @@
|
||||
for(var/obj/item/weapon/ore/ore in range(chassis,1))
|
||||
if(get_dir(chassis,ore)&chassis.dir)
|
||||
ore.Move(ore_box)
|
||||
else if(istype(target,/turf/simulated/floor/plating/airless/asteroid))
|
||||
for(var/turf/simulated/floor/plating/airless/asteroid/M in range(target,1))
|
||||
else if(istype(target,/turf/simulated/floor/asteroid))
|
||||
for(var/turf/simulated/floor/asteroid/M in range(target,1))
|
||||
M.gets_dug()
|
||||
log_message("Drilled through [target]")
|
||||
if(locate(/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp) in chassis.equipment)
|
||||
@@ -835,7 +835,7 @@
|
||||
name = "phoron generator"
|
||||
desc = "Generates power using solid phoron as fuel. Pollutes the environment."
|
||||
icon_state = "tesla"
|
||||
origin_tech = list(TECH_PHORON = 2, TECH_POWER = 2, TECH_ENGINERING = 1)
|
||||
origin_tech = list(TECH_PHORON = 2, TECH_POWER = 2, TECH_ENGINEERING = 1)
|
||||
equip_cooldown = 10
|
||||
energy_drain = 0
|
||||
range = MELEE
|
||||
@@ -973,7 +973,7 @@
|
||||
name = "\improper ExoNuclear reactor"
|
||||
desc = "Generates power using uranium. Pollutes the environment."
|
||||
icon_state = "tesla"
|
||||
origin_tech = list(TECH_POWER = 3, TECH_ENGINERING = 3)
|
||||
origin_tech = list(TECH_POWER = 3, TECH_ENGINEERING = 3)
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=10000,"silver"=500,"glass"=1000)
|
||||
max_fuel = 50000
|
||||
fuel_per_cycle_idle = 10
|
||||
@@ -1069,7 +1069,7 @@
|
||||
name = "passenger compartment"
|
||||
desc = "A mountable passenger compartment for exo-suits. Rather cramped."
|
||||
icon_state = "mecha_abooster_ccw"
|
||||
origin_tech = list(TECH_ENGINERING = 1, TECH_BIO = 1)
|
||||
origin_tech = list(TECH_ENGINEERING = 1, TECH_BIO = 1)
|
||||
energy_drain = 10
|
||||
range = MELEE
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=5000,"glass"=5000)
|
||||
|
||||
+85
-183
@@ -1,196 +1,98 @@
|
||||
/turf/simulated/floor/mech_bay_recharge_floor
|
||||
name = "Mech Bay Recharge Station"
|
||||
/obj/machinery/mech_recharger
|
||||
name = "mech recharger"
|
||||
desc = "A mech recharger, built into the floor."
|
||||
icon = 'icons/mecha/mech_bay.dmi'
|
||||
icon_state = "recharge_floor"
|
||||
var/obj/machinery/mech_bay_recharge_port/recharge_port
|
||||
var/obj/machinery/computer/mech_bay_power_console/recharge_console
|
||||
var/obj/mecha/recharging_mecha = null
|
||||
density = 0
|
||||
layer = TURF_LAYER + 0.1
|
||||
|
||||
/turf/simulated/floor/mech_bay_recharge_floor/Entered(var/obj/mecha/mecha)
|
||||
. = ..()
|
||||
if(istype(mecha))
|
||||
mecha.occupant_message("<b>Initializing power control devices.</b>")
|
||||
init_devices()
|
||||
if(recharge_console && recharge_port)
|
||||
recharging_mecha = mecha
|
||||
recharge_console.mecha_in(mecha)
|
||||
return
|
||||
else if(!recharge_console)
|
||||
mecha.occupant_message("<font color='red'>Control console not found. Terminating.</font>")
|
||||
else if(!recharge_port)
|
||||
mecha.occupant_message("<font color='red'>Power port not found. Terminating.</font>")
|
||||
return
|
||||
var/obj/mecha/charging = null
|
||||
var/charge = 45
|
||||
var/repair = 0
|
||||
|
||||
/turf/simulated/floor/mech_bay_recharge_floor/Exited(atom)
|
||||
. = ..()
|
||||
if(atom == recharging_mecha)
|
||||
recharging_mecha = null
|
||||
if(recharge_console)
|
||||
recharge_console.mecha_out()
|
||||
return
|
||||
|
||||
/turf/simulated/floor/mech_bay_recharge_floor/proc/init_devices()
|
||||
if(!recharge_console)
|
||||
recharge_console = locate() in range(1,src)
|
||||
if(!recharge_port)
|
||||
recharge_port = locate() in get_step(src, WEST)
|
||||
|
||||
if(recharge_console)
|
||||
recharge_console.recharge_floor = src
|
||||
if(recharge_port)
|
||||
recharge_console.recharge_port = recharge_port
|
||||
if(recharge_port)
|
||||
recharge_port.recharge_floor = src
|
||||
if(recharge_console)
|
||||
recharge_port.recharge_console = recharge_console
|
||||
return
|
||||
|
||||
// temporary fix for broken icon until somebody gets around to make these player-buildable
|
||||
/turf/simulated/floor/mech_bay_recharge_floor/attackby(obj/item/C as obj, mob/user as mob)
|
||||
/obj/machinery/mech_recharger/New()
|
||||
..()
|
||||
if(floor_type)
|
||||
icon_state = "recharge_floor"
|
||||
else
|
||||
icon_state = "support_lattice"
|
||||
component_parts = list()
|
||||
|
||||
component_parts += new /obj/item/weapon/circuitboard/mech_recharger(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
|
||||
|
||||
/obj/machinery/mech_bay_recharge_port
|
||||
name = "Mech Bay Power Port"
|
||||
density = 1
|
||||
anchored = 1
|
||||
icon = 'icons/mecha/mech_bay.dmi'
|
||||
icon_state = "recharge_port"
|
||||
var/turf/simulated/floor/mech_bay_recharge_floor/recharge_floor
|
||||
var/obj/machinery/computer/mech_bay_power_console/recharge_console
|
||||
var/datum/global_iterator/mech_bay_recharger/pr_recharger
|
||||
RefreshParts()
|
||||
|
||||
/obj/machinery/mech_bay_recharge_port/New()
|
||||
/obj/machinery/mech_recharger/Crossed(var/obj/mecha/M)
|
||||
. = ..()
|
||||
if(istype(M) && charging != M)
|
||||
start_charging(M)
|
||||
|
||||
/obj/machinery/mech_recharger/Uncrossed(var/obj/mecha/M)
|
||||
. = ..()
|
||||
if(M == charging)
|
||||
stop_charging()
|
||||
|
||||
/obj/machinery/mech_recharger/RefreshParts()
|
||||
..()
|
||||
pr_recharger = new /datum/global_iterator/mech_bay_recharger(null,0)
|
||||
return
|
||||
charge = 0
|
||||
repair = -5
|
||||
for(var/obj/item/weapon/stock_parts/P in component_parts)
|
||||
if(istype(P, /obj/item/weapon/stock_parts/capacitor))
|
||||
charge += P.rating * 20
|
||||
if(istype(P, /obj/item/weapon/stock_parts/scanning_module))
|
||||
charge += P.rating * 5
|
||||
repair += P.rating
|
||||
if(istype(P, /obj/item/weapon/stock_parts/manipulator))
|
||||
repair += P.rating * 2
|
||||
|
||||
/obj/machinery/mech_bay_recharge_port/proc/start_charge(var/obj/mecha/recharging_mecha)
|
||||
if(stat&(NOPOWER|BROKEN))
|
||||
recharging_mecha.occupant_message("<font color='red'>Power port not responding. Terminating.</font>")
|
||||
return 0
|
||||
else
|
||||
if(recharging_mecha.cell)
|
||||
recharging_mecha.occupant_message("Now charging...")
|
||||
pr_recharger.start(list(src,recharging_mecha))
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
/obj/machinery/mech_bay_recharge_port/proc/stop_charge()
|
||||
if(recharge_console && !recharge_console.stat)
|
||||
recharge_console.icon_screen = initial(recharge_console.icon_screen)
|
||||
pr_recharger.stop()
|
||||
return
|
||||
|
||||
/obj/machinery/mech_bay_recharge_port/proc/active()
|
||||
if(pr_recharger.active())
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
/obj/machinery/mech_bay_recharge_port/power_change()
|
||||
if(powered())
|
||||
stat &= ~NOPOWER
|
||||
else
|
||||
spawn(rand(0, 15))
|
||||
stat |= NOPOWER
|
||||
pr_recharger.stop()
|
||||
return
|
||||
|
||||
/obj/machinery/mech_bay_recharge_port/proc/set_voltage(new_voltage)
|
||||
if(new_voltage && isnum(new_voltage))
|
||||
pr_recharger.max_charge = new_voltage
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
|
||||
/datum/global_iterator/mech_bay_recharger
|
||||
delay = 20
|
||||
var/max_charge = 45
|
||||
check_for_null = 0 //since port.stop_charge() must be called. The checks are made in process()
|
||||
|
||||
/datum/global_iterator/mech_bay_recharger/process(var/obj/machinery/mech_bay_recharge_port/port, var/obj/mecha/mecha)
|
||||
if(!port)
|
||||
return 0
|
||||
if(mecha && mecha in port.recharge_floor)
|
||||
if(!mecha.cell)
|
||||
return
|
||||
var/delta = min(max_charge, mecha.cell.maxcharge - mecha.cell.charge)
|
||||
if(delta>0)
|
||||
mecha.give_power(delta)
|
||||
port.use_power(delta*150)
|
||||
else
|
||||
mecha.occupant_message("<font color='blue'><b>Fully charged.</b></font>")
|
||||
port.stop_charge()
|
||||
else
|
||||
port.stop_charge()
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/computer/mech_bay_power_console
|
||||
name = "Mech Bay Power Control Console"
|
||||
density = 1
|
||||
anchored = 1
|
||||
icon_keyboard = "tech_key"
|
||||
icon_screen = "recharge_comp"
|
||||
light_color = "#a97faa"
|
||||
circuit = /obj/item/weapon/circuitboard/mech_bay_power_console
|
||||
var/autostart = 1
|
||||
var/voltage = 45
|
||||
var/turf/simulated/floor/mech_bay_recharge_floor/recharge_floor
|
||||
var/obj/machinery/mech_bay_recharge_port/recharge_port
|
||||
|
||||
/obj/machinery/computer/mech_bay_power_console/proc/mecha_in(var/obj/mecha/mecha)
|
||||
if(stat&(NOPOWER|BROKEN))
|
||||
mecha.occupant_message("<font color='red'>Control console not responding. Terminating...</font>")
|
||||
/obj/machinery/mech_recharger/process()
|
||||
..()
|
||||
if(!charging)
|
||||
return
|
||||
if(recharge_port && autostart)
|
||||
var/answer = recharge_port.start_charge(mecha)
|
||||
if(answer)
|
||||
recharge_port.set_voltage(voltage)
|
||||
src.icon_screen = initial(src.icon_screen)+"_on"
|
||||
return
|
||||
|
||||
/obj/machinery/computer/mech_bay_power_console/proc/mecha_out()
|
||||
if(recharge_port)
|
||||
recharge_port.stop_charge()
|
||||
return
|
||||
|
||||
/obj/machinery/computer/mech_bay_power_console/attack_hand(mob/user as mob)
|
||||
if(..())
|
||||
if(charging.loc != loc) // Could be qdel or teleport or something
|
||||
stop_charging()
|
||||
return
|
||||
if(!recharge_floor || !recharge_port)
|
||||
var/turf/simulated/floor/mech_bay_recharge_floor/F = locate() in range(1,src)
|
||||
if(F)
|
||||
F.init_devices()
|
||||
ui_interact(user)
|
||||
var/done = 1
|
||||
if(charging.cell)
|
||||
var/t = min(charge, charging.cell.maxcharge - charging.cell.charge)
|
||||
if(t > 0)
|
||||
charging.give_power(t)
|
||||
use_power(t * 150)
|
||||
done = 0
|
||||
else
|
||||
charging.occupant_message("<span class='notice'>Fully charged.</span>")
|
||||
if(repair && charging.health < initial(charging.health))
|
||||
charging.health = min(charging.health + repair, initial(charging.health))
|
||||
if(charging.health == initial(charging.health))
|
||||
charging.occupant_message("<span class='notice'>Fully repaired.</span>")
|
||||
|
||||
/obj/machinery/computer/mech_bay_power_console/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
|
||||
var/list/data = list()
|
||||
data["has_floor"] = recharge_floor
|
||||
data["has_port"] = recharge_port
|
||||
if(recharge_floor && recharge_floor.recharging_mecha && recharge_floor.recharging_mecha.cell)
|
||||
data["has_mech"] = 1
|
||||
data["mecha_name"] = recharge_floor.recharging_mecha || "None"
|
||||
data["mecha_charge"] = isnull(recharge_floor.recharging_mecha) ? 0 : recharge_floor.recharging_mecha.cell.charge
|
||||
data["mecha_maxcharge"] = isnull(recharge_floor.recharging_mecha) ? 0 : recharge_floor.recharging_mecha.cell.maxcharge
|
||||
data["mecha_charge_percentage"] = isnull(recharge_floor.recharging_mecha) ? 0 : round(recharge_floor.recharging_mecha.cell.percent())
|
||||
else
|
||||
data["has_mech"] = 0
|
||||
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if (!ui)
|
||||
// the ui does not exist, so we'll create a new() one
|
||||
// for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm
|
||||
ui = new(user, src, ui_key, "mech_bay_console.tmpl", "Mech Bay Control Console", 500, 325)
|
||||
// when the ui is first opened this is the data it will use
|
||||
ui.set_initial_data(data)
|
||||
// open the new ui window
|
||||
ui.open()
|
||||
// auto update every Master Controller tick
|
||||
ui.set_auto_update(1)
|
||||
else
|
||||
done = 0
|
||||
if(done)
|
||||
stop_charging()
|
||||
return
|
||||
|
||||
/obj/machinery/mech_recharger/attackby(var/obj/item/I, var/mob/user)
|
||||
if(default_deconstruction_screwdriver(user, I))
|
||||
return
|
||||
if(default_deconstruction_crowbar(user, I))
|
||||
return
|
||||
if(default_part_replacement(user, I))
|
||||
return
|
||||
|
||||
/obj/machinery/mech_recharger/proc/start_charging(var/obj/mecha/M)
|
||||
if(stat & (NOPOWER | BROKEN))
|
||||
M.occupant_message("<span class='warning'>Power port not responding. Terminating.</span>")
|
||||
|
||||
return
|
||||
if(M.cell)
|
||||
M.occupant_message("<span class='notice'>Now charging...</span>")
|
||||
charging = M
|
||||
return
|
||||
|
||||
/obj/machinery/mech_recharger/proc/stop_charging()
|
||||
if(!charging)
|
||||
|
||||
return
|
||||
charging = null
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
name="Ripley Torso"
|
||||
desc="A torso part of Ripley APLU. Contains power unit, processing core and life support systems."
|
||||
icon_state = "ripley_harness"
|
||||
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_BIO = 2, TECH_ENGINERING = 2)
|
||||
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_BIO = 2, TECH_ENGINEERING = 2)
|
||||
construction_time = 200
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=40000,"glass"=15000)
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
name="Ripley Left Arm"
|
||||
desc="A Ripley APLU left arm. Data and power sockets are compatible with most exosuit tools."
|
||||
icon_state = "ripley_l_arm"
|
||||
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINERING = 2)
|
||||
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2)
|
||||
construction_time = 150
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=25000)
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
name="Ripley Right Arm"
|
||||
desc="A Ripley APLU right arm. Data and power sockets are compatible with most exosuit tools."
|
||||
icon_state = "ripley_r_arm"
|
||||
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINERING = 2)
|
||||
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2)
|
||||
construction_time = 150
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=25000)
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
name="Ripley Left Leg"
|
||||
desc="A Ripley APLU left leg. Contains somewhat complex servodrives and balance maintaining systems."
|
||||
icon_state = "ripley_l_leg"
|
||||
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINERING = 2)
|
||||
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2)
|
||||
construction_time = 150
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=30000)
|
||||
|
||||
@@ -75,7 +75,7 @@
|
||||
name="Ripley Right Leg"
|
||||
desc="A Ripley APLU right leg. Contains somewhat complex servodrives and balance maintaining systems."
|
||||
icon_state = "ripley_r_leg"
|
||||
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINERING = 2)
|
||||
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2)
|
||||
construction_time = 150
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=30000)
|
||||
|
||||
@@ -93,7 +93,7 @@
|
||||
name="Gygax Torso"
|
||||
desc="A torso part of Gygax. Contains power unit, processing core and life support systems. Has an additional equipment slot."
|
||||
icon_state = "gygax_harness"
|
||||
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_BIO = 3, TECH_ENGINERING = 3)
|
||||
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_BIO = 3, TECH_ENGINEERING = 3)
|
||||
construction_time = 300
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=50000,"glass"=20000)
|
||||
|
||||
@@ -101,7 +101,7 @@
|
||||
name="Gygax Head"
|
||||
desc="A Gygax head. Houses advanced surveilance and targeting sensors."
|
||||
icon_state = "gygax_head"
|
||||
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_MAGNET = 3, TECH_ENGINERING = 3)
|
||||
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_MAGNET = 3, TECH_ENGINEERING = 3)
|
||||
construction_time = 200
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=20000,"glass"=10000)
|
||||
|
||||
@@ -109,7 +109,7 @@
|
||||
name="Gygax Left Arm"
|
||||
desc="A Gygax left arm. Data and power sockets are compatible with most exosuit tools and weapons."
|
||||
icon_state = "gygax_l_arm"
|
||||
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINERING = 3)
|
||||
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 3)
|
||||
construction_time = 200
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=30000)
|
||||
|
||||
@@ -117,28 +117,28 @@
|
||||
name="Gygax Right Arm"
|
||||
desc="A Gygax right arm. Data and power sockets are compatible with most exosuit tools and weapons."
|
||||
icon_state = "gygax_r_arm"
|
||||
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINERING = 3)
|
||||
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 3)
|
||||
construction_time = 200
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=30000)
|
||||
|
||||
/obj/item/mecha_parts/part/gygax_left_leg
|
||||
name="Gygax Left Leg"
|
||||
icon_state = "gygax_l_leg"
|
||||
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINERING = 3)
|
||||
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 3)
|
||||
construction_time = 200
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=35000)
|
||||
|
||||
/obj/item/mecha_parts/part/gygax_right_leg
|
||||
name="Gygax Right Leg"
|
||||
icon_state = "gygax_r_leg"
|
||||
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINERING = 3)
|
||||
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 3)
|
||||
construction_time = 200
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=35000)
|
||||
|
||||
/obj/item/mecha_parts/part/gygax_armour
|
||||
name="Gygax Armour Plates"
|
||||
icon_state = "gygax_armour"
|
||||
origin_tech = list(TECH_MATERIAL = 6, TECH_COMBAT = 4, TECH_ENGINERING = 5)
|
||||
origin_tech = list(TECH_MATERIAL = 6, TECH_COMBAT = 4, TECH_ENGINEERING = 5)
|
||||
construction_time = 600
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=50000,"diamond"=10000)
|
||||
|
||||
@@ -156,49 +156,49 @@
|
||||
/obj/item/mecha_parts/part/durand_torso
|
||||
name="Durand Torso"
|
||||
icon_state = "durand_harness"
|
||||
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_BIO = 3, TECH_ENGINERING = 3)
|
||||
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_BIO = 3, TECH_ENGINEERING = 3)
|
||||
construction_time = 300
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=55000,"glass"=20000,"silver"=10000)
|
||||
|
||||
/obj/item/mecha_parts/part/durand_head
|
||||
name="Durand Head"
|
||||
icon_state = "durand_head"
|
||||
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_MAGNET = 3, TECH_ENGINERING = 3)
|
||||
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_MAGNET = 3, TECH_ENGINEERING = 3)
|
||||
construction_time = 200
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=25000,"glass"=10000,"silver"=3000)
|
||||
|
||||
/obj/item/mecha_parts/part/durand_left_arm
|
||||
name="Durand Left Arm"
|
||||
icon_state = "durand_l_arm"
|
||||
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_ENGINERING = 3)
|
||||
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_ENGINEERING = 3)
|
||||
construction_time = 200
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=35000,"silver"=3000)
|
||||
|
||||
/obj/item/mecha_parts/part/durand_right_arm
|
||||
name="Durand Right Arm"
|
||||
icon_state = "durand_r_arm"
|
||||
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_ENGINERING = 3)
|
||||
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_ENGINEERING = 3)
|
||||
construction_time = 200
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=35000,"silver"=3000)
|
||||
|
||||
/obj/item/mecha_parts/part/durand_left_leg
|
||||
name="Durand Left Leg"
|
||||
icon_state = "durand_l_leg"
|
||||
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_ENGINERING = 3)
|
||||
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_ENGINEERING = 3)
|
||||
construction_time = 200
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=40000,"silver"=3000)
|
||||
|
||||
/obj/item/mecha_parts/part/durand_right_leg
|
||||
name="Durand Right Leg"
|
||||
icon_state = "durand_r_leg"
|
||||
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_ENGINERING = 3)
|
||||
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_ENGINEERING = 3)
|
||||
construction_time = 200
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=40000,"silver"=3000)
|
||||
|
||||
/obj/item/mecha_parts/part/durand_armour
|
||||
name="Durand Armour Plates"
|
||||
icon_state = "durand_armour"
|
||||
origin_tech = list(TECH_MATERIAL = 5, TECH_COMBAT = 4, TECH_ENGINERING = 5)
|
||||
origin_tech = list(TECH_MATERIAL = 5, TECH_COMBAT = 4, TECH_ENGINEERING = 5)
|
||||
construction_time = 600
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=50000,"uranium"=10000)
|
||||
|
||||
@@ -307,7 +307,7 @@
|
||||
name="Odysseus Torso"
|
||||
desc="A torso part of Odysseus. Contains power unit, processing core and life support systems."
|
||||
icon_state = "odysseus_torso"
|
||||
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_BIO = 2, TECH_ENGINERING = 2)
|
||||
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_BIO = 2, TECH_ENGINEERING = 2)
|
||||
construction_time = 180
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=25000)
|
||||
|
||||
@@ -315,7 +315,7 @@
|
||||
name="Odysseus Left Arm"
|
||||
desc="An Odysseus left arm. Data and power sockets are compatible with most exosuit tools."
|
||||
icon_state = "odysseus_l_arm"
|
||||
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINERING = 2)
|
||||
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2)
|
||||
construction_time = 120
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=10000)
|
||||
|
||||
@@ -323,7 +323,7 @@
|
||||
name="Odysseus Right Arm"
|
||||
desc="An Odysseus right arm. Data and power sockets are compatible with most exosuit tools."
|
||||
icon_state = "odysseus_r_arm"
|
||||
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINERING = 2)
|
||||
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2)
|
||||
construction_time = 120
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=10000)
|
||||
|
||||
@@ -331,7 +331,7 @@
|
||||
name="Odysseus Left Leg"
|
||||
desc="An Odysseus left leg. Contains somewhat complex servodrives and balance maintaining systems."
|
||||
icon_state = "odysseus_l_leg"
|
||||
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINERING = 2)
|
||||
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2)
|
||||
construction_time = 130
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=15000)
|
||||
|
||||
@@ -339,13 +339,13 @@
|
||||
name="Odysseus Right Leg"
|
||||
desc="A Odysseus right leg. Contains somewhat complex servodrives and balance maintaining systems."
|
||||
icon_state = "odysseus_r_leg"
|
||||
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINERING = 2)
|
||||
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2)
|
||||
construction_time = 130
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=15000)
|
||||
|
||||
/*/obj/item/mecha_parts/part/odysseus_armour
|
||||
name="Odysseus Carapace"
|
||||
icon_state = "odysseus_armour"
|
||||
origin_tech = list(TECH_MATERIAL = 3, TECH_ENGINERING = 3)
|
||||
origin_tech = list(TECH_MATERIAL = 3, TECH_ENGINEERING = 3)
|
||||
construction_time = 200
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=15000)*/
|
||||
|
||||
@@ -338,6 +338,7 @@ Alien plants should do something if theres a lot of poison
|
||||
|
||||
var/health = 100
|
||||
var/status = GROWING //can be GROWING, GROWN or BURST; all mutually exclusive
|
||||
flags = PROXMOVE
|
||||
|
||||
/obj/effect/alien/egg/New()
|
||||
if(config.aliens_allowed)
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
/obj/effect/vaultspawner
|
||||
var/maxX = 6
|
||||
var/maxY = 6
|
||||
var/minX = 2
|
||||
var/minY = 2
|
||||
|
||||
/obj/effect/vaultspawner/New(turf/location as turf,lX = minX,uX = maxX,lY = minY,uY = maxY,var/type = null)
|
||||
if(!type)
|
||||
type = pick("sandstone","rock","alien")
|
||||
|
||||
var/lowBoundX = location.x
|
||||
var/lowBoundY = location.y
|
||||
|
||||
var/hiBoundX = location.x + rand(lX,uX)
|
||||
var/hiBoundY = location.y + rand(lY,uY)
|
||||
|
||||
var/z = location.z
|
||||
|
||||
for(var/i = lowBoundX,i<=hiBoundX,i++)
|
||||
for(var/j = lowBoundY,j<=hiBoundY,j++)
|
||||
if(i == lowBoundX || i == hiBoundX || j == lowBoundY || j == hiBoundY)
|
||||
new /turf/simulated/wall/vault(locate(i,j,z),type)
|
||||
else
|
||||
new /turf/simulated/floor/vault(locate(i,j,z),type)
|
||||
|
||||
qdel(src)
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50,"glass" = 20)
|
||||
|
||||
origin_tech = list(TECH_MAGNET = 1, TECH_ENGINERING = 1)
|
||||
origin_tech = list(TECH_MAGNET = 1, TECH_ENGINEERING = 1)
|
||||
var/obj/machinery/telecomms/buffer // simple machine buffer for device linkage
|
||||
|
||||
/obj/item/device/debugger/is_used_on(obj/O, mob/user)
|
||||
|
||||
@@ -4,212 +4,193 @@
|
||||
icon_state = "labeler1"
|
||||
item_state = "flight"
|
||||
|
||||
var/mode_nice = "standard"
|
||||
var/mode = "floor"
|
||||
var/tile_dir_mode = 0
|
||||
var/decal = "remove all decals"
|
||||
var/paint_dir = "precise"
|
||||
var/paint_colour = "white"
|
||||
|
||||
// mode 0 ignore direction; sets dir=0
|
||||
// mode 1 all-direction
|
||||
// mode 2 corner selecting the side CW from the selected corner
|
||||
// mode 3 cardinal
|
||||
// mode 4 warningcorner and warnwhitecorner direction fix
|
||||
// mode 5 Opposite corner tiles where the second icon_state is "[mode]_inv"
|
||||
/obj/item/device/floor_painter/afterattack(atom/A, mob/user as mob, proximity)
|
||||
var/list/decals = list(
|
||||
"quarter-turf" = list("path" = /obj/effect/floor_decal/corner, "precise" = 1, "coloured" = 1),
|
||||
"hazard stripes" = list("path" = /obj/effect/floor_decal/industrial/warning),
|
||||
"corner, hazard" = list("path" = /obj/effect/floor_decal/industrial/warning/corner),
|
||||
"hatched marking" = list("path" = /obj/effect/floor_decal/industrial/hatch),
|
||||
"dotted outline" = list("path" = /obj/effect/floor_decal/industrial/outline, "coloured" = 1),
|
||||
"loading sign" = list("path" = /obj/effect/floor_decal/industrial/loading),
|
||||
"1" = list("path" = /obj/effect/floor_decal/sign),
|
||||
"2" = list("path" = /obj/effect/floor_decal/sign/two),
|
||||
"A" = list("path" = /obj/effect/floor_decal/sign/a),
|
||||
"B" = list("path" = /obj/effect/floor_decal/sign/b),
|
||||
"C" = list("path" = /obj/effect/floor_decal/sign/c),
|
||||
"D" = list("path" = /obj/effect/floor_decal/sign/d),
|
||||
"Ex" = list("path" = /obj/effect/floor_decal/sign/ex),
|
||||
"M" = list("path" = /obj/effect/floor_decal/sign/m),
|
||||
"CMO" = list("path" = /obj/effect/floor_decal/sign/cmo),
|
||||
"V" = list("path" = /obj/effect/floor_decal/sign/v),
|
||||
"Psy" = list("path" = /obj/effect/floor_decal/sign/p),
|
||||
"remove all decals" = list("path" = /obj/effect/floor_decal/reset)
|
||||
)
|
||||
var/list/paint_dirs = list(
|
||||
"north" = NORTH,
|
||||
"northwest" = NORTHWEST,
|
||||
"west" = WEST,
|
||||
"southwest" = SOUTHWEST,
|
||||
"south" = SOUTH,
|
||||
"southeast" = SOUTHEAST,
|
||||
"east" = EAST,
|
||||
"northeast" = NORTHEAST,
|
||||
"precise" = 0
|
||||
)
|
||||
var/list/paint_colours = list(
|
||||
"white" = COLOR_WHITE,
|
||||
"light gray" = COLOR_SILVER,
|
||||
"dark gray" = COLOR_GRAY,
|
||||
"blue-grey" = "#6A97B0",
|
||||
"pale blue-grey" = "#8BBBD5",
|
||||
"green-grey" = "#8DAF6A",
|
||||
"pale green-gray" = "#AED18B",
|
||||
"red-gray" = "#AA5F61",
|
||||
"pale red-gray" = "#CC9090",
|
||||
"purple-gray" = "#A2819E",
|
||||
"pale purple-gray" = "#BDA2BA",
|
||||
"black" = COLOR_BLACK,
|
||||
"red" = COLOR_RED,
|
||||
"dark red" = COLOR_MAROON,
|
||||
"yellow" = COLOR_YELLOW,
|
||||
"dark yellow" = COLOR_OLIVE,
|
||||
"green" = COLOR_LIME,
|
||||
"dark green" = COLOR_GREEN,
|
||||
"cyan" = COLOR_CYAN,
|
||||
"teal" = COLOR_TEAL,
|
||||
"blue" = COLOR_BLUE,
|
||||
"dark blue" = COLOR_NAVY,
|
||||
"magenta" = COLOR_PINK,
|
||||
"purple" = COLOR_PURPLE,
|
||||
"orange" = COLOR_ORANGE,
|
||||
"dark orange" = "#B95A00",
|
||||
"dark brown" = "#917448",
|
||||
"brown" = "#B19664",
|
||||
"pale brown" = "#CEB689"
|
||||
)
|
||||
|
||||
/obj/item/device/floor_painter/afterattack(var/atom/A, var/mob/user, proximity, params)
|
||||
if(!proximity)
|
||||
return
|
||||
|
||||
if(istype(A, /turf/simulated/floor))
|
||||
var/turf/simulated/floor/F = A
|
||||
var/turf/simulated/floor/F = A
|
||||
if(!istype(F))
|
||||
user << "<span class='warning'>\The [src] can only be used on station flooring.</span>"
|
||||
return
|
||||
|
||||
if(F.is_steel_floor()) // only tiled floors
|
||||
if(tile_dir_mode)
|
||||
var/D = get_dir(usr, F)
|
||||
if(usr.loc == F)
|
||||
D = usr.dir
|
||||
if(!F.flooring || !F.flooring.can_paint || F.broken || F.burnt)
|
||||
user << "<span class='warning'>\The [src] cannot paint broken or missing tiles.</span>"
|
||||
return
|
||||
|
||||
switch(tile_dir_mode)
|
||||
if(1) // All directions accepted
|
||||
F.set_dir(D)
|
||||
F.icon_state = mode
|
||||
if(2) // Corner mode - diagonal directions converted CW around.
|
||||
switch(D)
|
||||
if(NORTHEAST)
|
||||
D = EAST
|
||||
if(SOUTHEAST)
|
||||
D = SOUTH
|
||||
if(SOUTHWEST)
|
||||
D = WEST
|
||||
if(NORTHWEST)
|
||||
D = NORTH
|
||||
F.set_dir(D)
|
||||
F.icon_state = mode
|
||||
if(3) // cardinal directions only. I've adjusted diagonals the same way the facing code does.
|
||||
switch(D)
|
||||
if(NORTHEAST)
|
||||
D = EAST
|
||||
if(SOUTHEAST)
|
||||
D = EAST
|
||||
if(SOUTHWEST)
|
||||
D = WEST
|
||||
if(NORTHWEST)
|
||||
D = WEST
|
||||
F.set_dir(D)
|
||||
F.icon_state = mode
|
||||
if(4) // floors.dmi icon_states "warningcorner" and "warnwhitecorner" are incorrect, this fixes it
|
||||
var/D2
|
||||
switch(D)
|
||||
if(NORTHEAST)
|
||||
D2 = WEST
|
||||
if(SOUTHEAST)
|
||||
D2 = SOUTH
|
||||
if(SOUTHWEST)
|
||||
D2 = NORTH
|
||||
if(NORTHWEST)
|
||||
D2 = EAST
|
||||
F.set_dir(D2)
|
||||
F.icon_state = mode
|
||||
if(5)
|
||||
F.set_dir(0)
|
||||
if(D == NORTH || D == SOUTH || D == NORTHEAST || D == SOUTHWEST)
|
||||
F.icon_state = mode
|
||||
else
|
||||
F.icon_state = "[mode]_inv"
|
||||
else
|
||||
F.set_dir(0)
|
||||
F.icon_state = mode
|
||||
var/list/decal_data = decals[decal]
|
||||
var/config_error
|
||||
if(!islist(decal_data))
|
||||
config_error = 1
|
||||
var/painting_decal
|
||||
if(!config_error)
|
||||
painting_decal = decal_data["path"]
|
||||
if(!ispath(painting_decal))
|
||||
config_error = 1
|
||||
|
||||
if(config_error)
|
||||
user << "<span class='warning'>\The [src] flashes an error light. You might need to reconfigure it.</span>"
|
||||
return
|
||||
|
||||
if(F.decals && F.decals.len > 5 && painting_decal != /obj/effect/floor_decal/reset)
|
||||
user << "<span class='warning'>\The [F] has been painted too much; you need to clear it off.</span>"
|
||||
return
|
||||
|
||||
var/painting_dir = 0
|
||||
if(paint_dir == "precise")
|
||||
if(!decal_data["precise"])
|
||||
painting_dir = user.dir
|
||||
else
|
||||
usr << "You can't paint that!"
|
||||
var/list/mouse_control = params2list(params)
|
||||
var/mouse_x = text2num(mouse_control["icon-x"])
|
||||
var/mouse_y = text2num(mouse_control["icon-y"])
|
||||
if(isnum(mouse_x) && isnum(mouse_y))
|
||||
if(mouse_x <= 16)
|
||||
if(mouse_y <= 16)
|
||||
painting_dir = WEST
|
||||
else
|
||||
painting_dir = NORTH
|
||||
else
|
||||
if(mouse_y <= 16)
|
||||
painting_dir = SOUTH
|
||||
else
|
||||
painting_dir = EAST
|
||||
else
|
||||
painting_dir = user.dir
|
||||
else if(paint_dirs[paint_dir])
|
||||
painting_dir = paint_dirs[paint_dir]
|
||||
|
||||
var/painting_colour
|
||||
if(paint_colour && !isnull(paint_colours[paint_colour]) && decal_data["coloured"])
|
||||
painting_colour = paint_colours[paint_colour]
|
||||
|
||||
new painting_decal(F, painting_dir, painting_colour)
|
||||
|
||||
/obj/item/device/floor_painter/attack_self(mob/user as mob)
|
||||
var/type = input("What type of floor?", "Floor painter", "solid") in list("solid", "corner", "opposite corners", "side/three corners", "special", "letters")
|
||||
|
||||
tile_dir_mode = 0
|
||||
var/choice = input("Do you wish to change the decal type, paint direction, or paint colour?") as null|anything in list("Decal","Direction", "Colour")
|
||||
|
||||
switch(type)
|
||||
if("solid")
|
||||
tile_dir_mode = 0
|
||||
var/design = input("Which color?", "Floor painter") in list("standard", "dark", "red", "blue", "green", "yellow", "purple", "neutral", "white", "white-red", "white-blue", "white-green", "white-yellow", "white-purple", "freezer", "hydro", "showroom")
|
||||
if(design == "standard")
|
||||
mode = "floor"
|
||||
mode_nice = "standard"
|
||||
return
|
||||
if(design == "white")
|
||||
mode = "white"
|
||||
mode_nice = "white"
|
||||
return
|
||||
if(design == "dark")
|
||||
mode = "dark"
|
||||
mode_nice = "dark"
|
||||
return
|
||||
if(design == "showroom" || design == "hydro" || design == "freezer")
|
||||
mode = "[design]floor"
|
||||
mode_nice = design
|
||||
return
|
||||
mode_nice = design
|
||||
mode = "[replacetext(design, "-", "")]full"
|
||||
if("corner")
|
||||
var/design = input("Which design?", "Floor painter") in list("black", "red", "blue", "green", "yellow", "purple", "neutral", "white", "white-red", "white-blue", "white-green", "white-yellow", "white-purple")
|
||||
mode_nice = "[design] corner"
|
||||
mode = "[replacetext(design, "-", "")]corner"
|
||||
tile_dir_mode = 2
|
||||
if("opposite corners")
|
||||
var/design = input("Which design?", "Floor painter") in list("bar", "cmo", "yellowpatch", "cafeteria", "red-yellow", "red-blue", "red-green", "green-yellow", "green-blue", "blue-yellow")
|
||||
mode_nice = design
|
||||
if(design == "bar" || design == "cmo" || design == "yellowpatch" || design == "cafeteria")
|
||||
mode = design
|
||||
else
|
||||
mode = "[replacetext(design, "-", "")]full"
|
||||
if(design == "yellowpatch")
|
||||
tile_dir_mode = 5
|
||||
else
|
||||
tile_dir_mode = 0
|
||||
if("side/three corners")
|
||||
var/design = input("Which design?", "Floor painter") in list("black", "red", "blue", "green", "yellow", "purple", "neutral", "white", "white-red", "white-blue", "white-green", "white-yellow", "white-purple", "red-yellow", "red-blue", "blue-red", "red-green", "green-yellow", "green-blue", "blue-yellow")
|
||||
if(design == "white")
|
||||
mode = "whitehall"
|
||||
mode_nice = "white side"
|
||||
else if(design == "black") // because SOMEONE made the black/grey side/corner sprite have the same name as the 'empty space' sprite :(
|
||||
mode = "blackfloor"
|
||||
mode_nice = design
|
||||
else
|
||||
mode_nice = design
|
||||
mode = replacetext(design, "-", "")
|
||||
tile_dir_mode = 1
|
||||
if("special")
|
||||
var/design = input("Which design?", "Floor painter") in list("arrival", "escape", "caution", "warning", "white-warning", "white-blue-green", "loadingarea", "delivery", "bot", "white-delivery", "white-bot")
|
||||
if(design == "white-blue-green")
|
||||
mode_nice = design
|
||||
mode = "whitebluegreencorners"
|
||||
tile_dir_mode = 2
|
||||
else if(design == "delivery" || design == "bot" || design == "white-delivery" || design == "white-bot")
|
||||
mode_nice = design
|
||||
mode = replacetext(design, "-", "")
|
||||
tile_dir_mode = 0
|
||||
else if(design == "loadingarea")
|
||||
mode_nice = design
|
||||
mode = design
|
||||
tile_dir_mode = 3
|
||||
else
|
||||
if(design == "white-warning")
|
||||
mode_nice = design
|
||||
design = "warnwhite"
|
||||
var/s_corner = alert("Do you want to paint a single corner of the tile?", "Floor painter","Yes","No") == "Yes"
|
||||
if(s_corner)
|
||||
mode_nice = "[design] corner"
|
||||
mode = "[design]corner"
|
||||
if(design == "warning" || design == "white-warning") // sprites for these are weird, need to fix dirs (icons/turf/floors.dmi, "warningcorner" and "warnwhitecorner")
|
||||
tile_dir_mode = 4
|
||||
else
|
||||
tile_dir_mode = 2
|
||||
else
|
||||
mode_nice = design
|
||||
mode = design
|
||||
tile_dir_mode = 1
|
||||
if("letters")
|
||||
var/which = input("Which letters/design?", "Floor painter") in list("A1", "A2", "DI", "SA", "SA (red)", "SB", "SB (red)", "SC", "SC (red)", "W (red)", "V (green)", "Psy", "Ex", "Ex (blue)", "CMO", "O (OP)", "P (OP)")
|
||||
mode_nice = which
|
||||
switch(which)
|
||||
if("A1")
|
||||
mode = "white_1"
|
||||
if("A2")
|
||||
mode = "white_2"
|
||||
if("DI")
|
||||
mode = "white_d"
|
||||
if("SA")
|
||||
mode = "white_a"
|
||||
if("SA (red)")
|
||||
mode = "whitered_a"
|
||||
tile_dir_mode = 3
|
||||
if("SB")
|
||||
mode = "white_b"
|
||||
if("SB (red)")
|
||||
mode = "whitered_b"
|
||||
tile_dir_mode = 3
|
||||
if("SC")
|
||||
mode = "white_c"
|
||||
if("SC (red)")
|
||||
mode = "whitered_c"
|
||||
tile_dir_mode = 3
|
||||
if("W (red)")
|
||||
mode = "whitered_w"
|
||||
tile_dir_mode = 3
|
||||
if("V (green)")
|
||||
mode = "whitegreen_v"
|
||||
tile_dir_mode = 3
|
||||
if("Psy")
|
||||
mode = "white_p"
|
||||
if("Ex")
|
||||
mode = "white_ex"
|
||||
if("Ex (blue)")
|
||||
mode = "whiteblue_ex"
|
||||
tile_dir_mode = 3
|
||||
if("CMO") // yes this is also in "opposite corners" choices, but it's a different icon_state (!!)
|
||||
mode = "white_cmo"
|
||||
if("O (OP)")
|
||||
mode = "white_halfo"
|
||||
if("P (OP)")
|
||||
mode = "white_halfp"
|
||||
if(choice == "Decal")
|
||||
var/new_decal = input("Select a decal.") as null|anything in decals
|
||||
if(new_decal && !isnull(decals[new_decal]))
|
||||
decal = new_decal
|
||||
user << "<span class='notice'>You set \the [src] decal to '[decal]'.</span>"
|
||||
else if(choice == "Direction")
|
||||
var/new_dir = input("Select a direction.") as null|anything in paint_dirs
|
||||
if(new_dir && !isnull(paint_dirs[new_dir]))
|
||||
paint_dir = new_dir
|
||||
user << "<span class='notice'>You set \the [src] direction to '[paint_dir]'.</span>"
|
||||
else if(choice == "Colour")
|
||||
var/new_colour = input("Select a colour.") as null|anything in paint_colours
|
||||
if(new_colour && !isnull(paint_colours[new_colour]))
|
||||
paint_colour = new_colour
|
||||
user << "<span class='notice'>You set \the [src] colour to '[paint_colour]'.</span>"
|
||||
|
||||
/obj/item/device/floor_painter/examine(mob/user)
|
||||
..(user)
|
||||
user << "It is in [mode_nice] mode."
|
||||
user << "It is configured to produce the '[decal]' decal with a direction of '[paint_dir]' using [paint_colour] paint."
|
||||
|
||||
/obj/item/device/floor_painter/verb/choose_colour(new_colour in paint_colours)
|
||||
set name = "Choose Colour"
|
||||
set desc = "Choose a floor painter colour."
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
if(usr.incapacitated())
|
||||
return
|
||||
|
||||
if(new_colour && !isnull(paint_colours[new_colour]))
|
||||
paint_colour = new_colour
|
||||
usr << "<span class='notice'>You set \the [src] colour to '[paint_colour]'.</span>"
|
||||
|
||||
/obj/item/device/floor_painter/verb/choose_decal(new_decal in decals)
|
||||
set name = "Choose Decal"
|
||||
set desc = "Choose a floor painter decal."
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
if(usr.incapacitated())
|
||||
return
|
||||
|
||||
if(new_decal && !isnull(decals[new_decal]))
|
||||
decal = new_decal
|
||||
usr << "<span class='notice'>You set \the [src] decal to '[decal]'.</span>"
|
||||
|
||||
/obj/item/device/floor_painter/verb/choose_direction(new_dir in paint_dirs)
|
||||
set name = "Choose Direction"
|
||||
set desc = "Choose a floor painter direction."
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
if(usr.incapacitated())
|
||||
return
|
||||
|
||||
if(new_dir && !isnull(paint_dirs[new_dir]))
|
||||
paint_dir = new_dir
|
||||
usr << "<span class='notice'>You set \the [src] direction to '[paint_dir]'.</span>"
|
||||
|
||||
@@ -18,6 +18,6 @@
|
||||
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50,"glass" = 20)
|
||||
|
||||
origin_tech = list(TECH_MAGNET = 1, TECH_ENGINERING = 1)
|
||||
origin_tech = list(TECH_MAGNET = 1, TECH_ENGINEERING = 1)
|
||||
var/obj/machinery/telecomms/buffer // simple machine buffer for device linkage
|
||||
var/obj/machinery/clonepod/connecting //same for cryopod linkage
|
||||
@@ -16,16 +16,11 @@
|
||||
/obj/item/device/pipe_painter/afterattack(atom/A, mob/user as mob, proximity)
|
||||
if(!proximity)
|
||||
return
|
||||
|
||||
|
||||
if(!istype(A,/obj/machinery/atmospherics/pipe) || istype(A,/obj/machinery/atmospherics/pipe/tank) || istype(A,/obj/machinery/atmospherics/pipe/vent) || istype(A,/obj/machinery/atmospherics/pipe/simple/heat_exchanging) || istype(A,/obj/machinery/atmospherics/pipe/simple/insulated) || !in_range(user, A))
|
||||
return
|
||||
var/obj/machinery/atmospherics/pipe/P = A
|
||||
|
||||
var/turf/T = P.loc
|
||||
if (P.level < 2 && T.level==1 && isturf(T) && T.intact)
|
||||
user << "<span class='warning'>You must remove the plating first.</span>"
|
||||
return
|
||||
|
||||
P.change_color(pipe_colors[mode])
|
||||
|
||||
/obj/item/device/pipe_painter/attack_self(mob/user as mob)
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
var/mode = 0 // 0 = off, 1=clamped (off), 2=operating
|
||||
var/drained_this_tick = 0 // This is unfortunately necessary to ensure we process powersinks BEFORE other machinery such as APCs.
|
||||
|
||||
var/datum/powernet/PN // Our powernet
|
||||
var/datum/powernet/PN // Our powernet
|
||||
var/obj/structure/cable/attached // the attached cable
|
||||
|
||||
/obj/item/device/powersink/Destroy()
|
||||
@@ -34,7 +34,7 @@
|
||||
if(istype(I, /obj/item/weapon/screwdriver))
|
||||
if(mode == 0)
|
||||
var/turf/T = loc
|
||||
if(isturf(T) && !T.intact)
|
||||
if(isturf(T) && !!T.is_plating())
|
||||
attached = locate() in T
|
||||
if(!attached)
|
||||
user << "No exposed cable here to attach to."
|
||||
|
||||
@@ -8,6 +8,7 @@ MASS SPECTROMETER
|
||||
REAGENT SCANNER
|
||||
*/
|
||||
|
||||
|
||||
/obj/item/device/healthanalyzer
|
||||
name = "health analyzer"
|
||||
desc = "A hand-held body scanner able to distinguish vital signs of the subject."
|
||||
@@ -200,7 +201,7 @@ REAGENT SCANNER
|
||||
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 30,"glass" = 20)
|
||||
|
||||
origin_tech = list(TECH_MAGNET = 1, TECH_ENGINERING = 1)
|
||||
origin_tech = list(TECH_MAGNET = 1, TECH_ENGINEERING = 1)
|
||||
|
||||
/obj/item/device/analyzer/atmosanalyze(var/mob/user)
|
||||
var/air = user.return_air()
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
throw_range = 15
|
||||
throw_speed = 3
|
||||
|
||||
origin_tech = list(TECH_DATA = 1, TECH_ENGINERING = 1, TECH_ILLEGAL = 3)
|
||||
origin_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1, TECH_ILLEGAL = 3)
|
||||
|
||||
var/obj/item/device/radio/spy/radio
|
||||
var/obj/machinery/camera/spy/camera
|
||||
@@ -53,7 +53,7 @@
|
||||
|
||||
w_class = 2.0
|
||||
|
||||
origin_tech = list(TECH_DATA = 1, TECH_ENGINERING = 1, TECH_ILLEGAL = 3)
|
||||
origin_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1, TECH_ILLEGAL = 3)
|
||||
|
||||
var/operating = 0
|
||||
var/obj/item/device/radio/spy/radio
|
||||
|
||||
@@ -61,10 +61,10 @@
|
||||
user_client.images += overlay
|
||||
|
||||
//Remove stale overlays
|
||||
for(var/obj/O in update_remove)
|
||||
for(var/obj/O in update_remove)
|
||||
user_client.images -= active_scanned[O]
|
||||
active_scanned -= O
|
||||
|
||||
|
||||
//Flicker effect
|
||||
for(var/obj/O in active_scanned)
|
||||
var/image/overlay = active_scanned[O]
|
||||
@@ -76,19 +76,19 @@
|
||||
|
||||
//creates a new overlay for a scanned object
|
||||
/obj/item/device/t_scanner/proc/get_overlay(obj/scanned)
|
||||
//Use a cache so we don't create a whole bunch of new images just because someone's walking back and forth in a room.
|
||||
//Use a cache so we don't create a whole bunch of new images just because someone's walking back and forth in a room.
|
||||
//Also means that images are reused if multiple people are using t-rays to look at the same objects.
|
||||
if(scanned in overlay_cache)
|
||||
. = overlay_cache[scanned]
|
||||
else
|
||||
var/image/I = image(loc = scanned, icon = scanned.icon, icon_state = scanned.icon_state, layer = HUD_LAYER)
|
||||
|
||||
|
||||
//Pipes are special
|
||||
if(istype(scanned, /obj/machinery/atmospherics/pipe))
|
||||
var/obj/machinery/atmospherics/pipe/P = scanned
|
||||
I.color = P.pipe_color
|
||||
I.overlays += P.overlays
|
||||
|
||||
|
||||
I.alpha = 128
|
||||
I.mouse_opacity = 0
|
||||
. = I
|
||||
@@ -100,12 +100,12 @@
|
||||
|
||||
/obj/item/device/t_scanner/proc/get_scanned_objects(var/scan_dist)
|
||||
. = list()
|
||||
|
||||
|
||||
var/turf/center = get_turf(src.loc)
|
||||
if(!center) return
|
||||
|
||||
|
||||
for(var/turf/T in range(scan_range, center))
|
||||
if(!T.intact)
|
||||
if(!!T.is_plating())
|
||||
continue
|
||||
|
||||
for(var/obj/O in T.contents)
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
var/mob/attacher = null
|
||||
var/valve_open = 0
|
||||
var/toggle = 1
|
||||
flags = PROXMOVE
|
||||
|
||||
/obj/item/device/transfer_valve/proc/process_activation(var/obj/item/device/D)
|
||||
|
||||
@@ -69,7 +70,7 @@
|
||||
|
||||
/obj/item/device/transfer_valve/attack_self(mob/user as mob)
|
||||
ui_interact(user)
|
||||
|
||||
|
||||
/obj/item/device/transfer_valve/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
|
||||
|
||||
// this is the data which will be sent to the ui
|
||||
@@ -80,7 +81,7 @@
|
||||
data["valveOpen"] = valve_open ? 1 : 0
|
||||
|
||||
// update the ui if it exists, returns null if no ui is passed/found
|
||||
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if (!ui)
|
||||
// the ui does not exist, so we'll create a new() one
|
||||
// for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
desc = "A tube of paste containing swarms of repair nanites. Very effective in repairing robotic machinery."
|
||||
icon = 'icons/obj/nanopaste.dmi'
|
||||
icon_state = "tube"
|
||||
origin_tech = list(TECH_MATERIAL = 4, TECH_ENGINERING = 3)
|
||||
origin_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 3)
|
||||
amount = 10
|
||||
|
||||
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
/obj/item/stack/light_w
|
||||
name = "wired glass tile"
|
||||
singular_name = "wired glass floor tile"
|
||||
desc = "A glass tile, which is wired, somehow."
|
||||
icon_state = "glass_wire"
|
||||
w_class = 3.0
|
||||
force = 3.0
|
||||
throwforce = 5.0
|
||||
throw_speed = 5
|
||||
throw_range = 20
|
||||
flags = CONDUCT
|
||||
max_amount = 60
|
||||
|
||||
/obj/item/stack/light_w/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
..()
|
||||
if(istype(O,/obj/item/weapon/wirecutters))
|
||||
var/obj/item/stack/cable_coil/CC = new/obj/item/stack/cable_coil(user.loc)
|
||||
CC.amount = 5
|
||||
amount--
|
||||
new/obj/item/stack/material/glass(user.loc)
|
||||
if(amount <= 0)
|
||||
user.drop_from_inventory(src)
|
||||
qdel(src)
|
||||
|
||||
if(istype(O,/obj/item/stack/material) && O.get_material_name() == DEFAULT_WALL_MATERIAL)
|
||||
var/obj/item/stack/M = O
|
||||
if (M.use(1))
|
||||
use(1)
|
||||
new/obj/item/stack/tile/light(get_turf(user))
|
||||
user << "<span class='notice'>You make a light tile.</span>"
|
||||
else
|
||||
user << "<span class='warning'>You need one metal sheet to finish the light tile.</span>"
|
||||
return
|
||||
@@ -1,36 +0,0 @@
|
||||
/obj/item/stack/tile/light
|
||||
name = "light tile"
|
||||
singular_name = "light floor tile"
|
||||
desc = "A floor tile, made out off glass. It produces light."
|
||||
icon_state = "tile_e"
|
||||
w_class = 3.0
|
||||
force = 3.0
|
||||
throwforce = 5.0
|
||||
throw_speed = 5
|
||||
throw_range = 20
|
||||
flags = CONDUCT
|
||||
max_amount = 60
|
||||
attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "smashed")
|
||||
var/on = 1
|
||||
var/state //0 = fine, 1 = flickering, 2 = breaking, 3 = broken
|
||||
|
||||
/obj/item/stack/tile/light/New(var/loc, var/amount=null)
|
||||
..()
|
||||
if(prob(5))
|
||||
state = 3 //broken
|
||||
else if(prob(5))
|
||||
state = 2 //breaking
|
||||
else if(prob(10))
|
||||
state = 1 //flickering occasionally
|
||||
else
|
||||
state = 0 //fine
|
||||
|
||||
/obj/item/stack/tile/light/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
..()
|
||||
if(istype(O,/obj/item/weapon/crowbar))
|
||||
new/obj/item/stack/material/steel(user.loc)
|
||||
amount--
|
||||
new/obj/item/stack/light_w(user.loc)
|
||||
if(amount <= 0)
|
||||
user.drop_from_inventory(src)
|
||||
qdel(src)
|
||||
@@ -1,34 +0,0 @@
|
||||
/obj/item/stack/tile/steel
|
||||
name = "floor tile"
|
||||
singular_name = "floor tile"
|
||||
desc = "Those could work as a pretty decent throwing weapon" //why?
|
||||
icon_state = "tile"
|
||||
force = 6.0
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 937.5)
|
||||
throwforce = 15.0
|
||||
throw_speed = 5
|
||||
throw_range = 20
|
||||
flags = CONDUCT
|
||||
|
||||
/obj/item/stack/tile/steel/New(var/loc, var/amount=null)
|
||||
..()
|
||||
src.pixel_x = rand(1, 14)
|
||||
src.pixel_y = rand(1, 14)
|
||||
return
|
||||
|
||||
/obj/item/stack/tile/steel/cyborg
|
||||
name = "floor tile synthesizer"
|
||||
desc = "A device that makes floor tiles."
|
||||
gender = NEUTER
|
||||
matter = null
|
||||
uses_charge = 1
|
||||
charge_costs = list(250)
|
||||
stacktype = /obj/item/stack/tile/steel
|
||||
build_type = /obj/item/stack/tile/steel
|
||||
|
||||
/obj/item/stack/tile/steel/proc/build(turf/S as turf)
|
||||
if (istype(S,/turf/space))
|
||||
S.ChangeTurf(/turf/simulated/floor/plating/airless)
|
||||
else
|
||||
S.ChangeTurf(/turf/simulated/floor/plating)
|
||||
return
|
||||
@@ -5,7 +5,7 @@
|
||||
* Wood
|
||||
* Carpet
|
||||
*/
|
||||
|
||||
|
||||
/obj/item/stack/tile
|
||||
name = "tile"
|
||||
singular_name = "tile"
|
||||
@@ -14,6 +14,11 @@
|
||||
max_amount = 60
|
||||
var/build_type = null
|
||||
|
||||
/obj/item/stack/tile/New()
|
||||
..()
|
||||
pixel_x = rand(-7, 7)
|
||||
pixel_y = rand(-7, 7)
|
||||
|
||||
/*
|
||||
* Grass
|
||||
*/
|
||||
@@ -64,3 +69,59 @@
|
||||
throw_speed = 5
|
||||
throw_range = 20
|
||||
flags = 0
|
||||
|
||||
/obj/item/stack/tile/floor
|
||||
name = "floor tile"
|
||||
singular_name = "floor tile"
|
||||
desc = "Those could work as a pretty decent throwing weapon" //why?
|
||||
icon_state = "tile"
|
||||
force = 6.0
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 937.5)
|
||||
throwforce = 15.0
|
||||
throw_speed = 5
|
||||
throw_range = 20
|
||||
flags = CONDUCT
|
||||
|
||||
/obj/item/stack/tile/floor_red
|
||||
name = "red floor tile"
|
||||
singular_name = "red floor tile"
|
||||
icon_state = "tile_red"
|
||||
|
||||
/obj/item/stack/tile/floor_steel
|
||||
name = "steel floor tile"
|
||||
singular_name = "steel floor tile"
|
||||
icon_state = "tile_steel"
|
||||
matter = list("plasteel" = 937.5)
|
||||
|
||||
/obj/item/stack/tile/floor_white
|
||||
name = "white floor tile"
|
||||
singular_name = "white floor tile"
|
||||
icon_state = "tile_white"
|
||||
matter = list("plastic" = 937.5)
|
||||
|
||||
/obj/item/stack/tile/floor_yellow
|
||||
name = "yellow floor tile"
|
||||
singular_name = "yellow floor tile"
|
||||
icon_state = "tile_yellow"
|
||||
|
||||
/obj/item/stack/tile/floor_dark
|
||||
name = "dark floor tile"
|
||||
singular_name = "dark floor tile"
|
||||
icon_state = "fr_tile"
|
||||
matter = list("plasteel" = 937.5)
|
||||
|
||||
/obj/item/stack/tile/floor_freezer
|
||||
name = "freezer floor tile"
|
||||
singular_name = "freezer floor tile"
|
||||
icon_state = "tile_freezer"
|
||||
matter = list("plastic" = 937.5)
|
||||
|
||||
/obj/item/stack/tile/floor/cyborg
|
||||
name = "floor tile synthesizer"
|
||||
desc = "A device that makes floor tiles."
|
||||
gender = NEUTER
|
||||
matter = null
|
||||
uses_charge = 1
|
||||
charge_costs = list(250)
|
||||
stacktype = /obj/item/stack/tile/floor
|
||||
build_type = /obj/item/stack/tile/floor
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
throw_speed = 1
|
||||
throw_range = 5
|
||||
w_class = 3.0
|
||||
origin_tech = list(TECH_ENGINERING = 4, TECH_MATERIAL = 2)
|
||||
origin_tech = list(TECH_ENGINEERING = 4, TECH_MATERIAL = 2)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50000)
|
||||
var/datum/effect/effect/system/spark_spread/spark_system
|
||||
var/stored_matter = 0
|
||||
@@ -103,7 +103,7 @@
|
||||
else if(!deconstruct && (istype(T,/turf/space) || istype(T,get_base_turf(T.z))))
|
||||
build_cost = 1
|
||||
build_type = "floor"
|
||||
build_turf = /turf/simulated/floor/plating/airless
|
||||
build_turf = /turf/simulated/floor/airless
|
||||
else if(deconstruct && istype(T,/turf/simulated/wall))
|
||||
var/turf/simulated/wall/W = T
|
||||
build_delay = deconstruct ? 50 : 40
|
||||
|
||||
@@ -139,11 +139,6 @@
|
||||
build_path = /obj/machinery/computer/crew
|
||||
origin_tech = list(TECH_DATA = 3, TECH_BIO = 2, TECH_MAGNET = 2)
|
||||
|
||||
/obj/item/weapon/circuitboard/mech_bay_power_console
|
||||
name = T_BOARD("mech bay power control console")
|
||||
build_path = /obj/machinery/computer/mech_bay_power_console
|
||||
origin_tech = list(TECH_DATA = 2, TECH_POWER = 3)
|
||||
|
||||
/obj/item/weapon/circuitboard/operating
|
||||
name = T_BOARD("patient monitoring console")
|
||||
build_path = /obj/machinery/computer/operating
|
||||
@@ -195,4 +190,4 @@
|
||||
/obj/item/weapon/circuitboard/rcon_console
|
||||
name = T_BOARD("RCON remote control console")
|
||||
build_path = /obj/machinery/computer/rcon
|
||||
origin_tech = list(TECH_DATA = 4, TECH_ENGINERING = 3, TECH_POWER = 5)
|
||||
origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 3, TECH_POWER = 5)
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
#ifndef T_BOARD
|
||||
#error T_BOARD macro is not defined but we need it!
|
||||
#endif
|
||||
|
||||
/obj/item/weapon/circuitboard/mech_recharger
|
||||
name = T_BOARD("mech recharger")
|
||||
build_path = "/obj/machinery/mech_recharger"
|
||||
board_type = "machine"
|
||||
origin_tech = list(TECH_DATA = 2, TECH_POWER = 2, TECH_ENGINEERING = 2)
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/capacitor" = 2,
|
||||
"/obj/item/weapon/stock_parts/scanning_module" = 1,
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 2)
|
||||
@@ -6,7 +6,7 @@
|
||||
name = T_BOARD("mining drill head")
|
||||
build_path = "/obj/machinery/mining/drill"
|
||||
board_type = "machine"
|
||||
origin_tech = list(TECH_DATA = 1, TECH_ENGINERING = 1)
|
||||
origin_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1)
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/capacitor" = 1,
|
||||
"/obj/item/weapon/cell" = 1,
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
name = T_BOARD("PACMAN-type generator")
|
||||
build_path = "/obj/machinery/power/port_gen/pacman"
|
||||
board_type = "machine"
|
||||
origin_tech = list(TECH_DATA = 3, TECH_POWER = 3, TECH_PHORON = 3, TECH_ENGINERING = 3)
|
||||
origin_tech = list(TECH_DATA = 3, TECH_POWER = 3, TECH_PHORON = 3, TECH_ENGINEERING = 3)
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/matter_bin" = 1,
|
||||
"/obj/item/weapon/stock_parts/micro_laser" = 1,
|
||||
@@ -16,9 +16,9 @@
|
||||
/obj/item/weapon/circuitboard/pacman/super
|
||||
name = T_BOARD("SUPERPACMAN-type generator")
|
||||
build_path = "/obj/machinery/power/port_gen/pacman/super"
|
||||
origin_tech = list(TECH_DATA = 3, TECH_POWER = 4, TECH_ENGINERING = 4)
|
||||
origin_tech = list(TECH_DATA = 3, TECH_POWER = 4, TECH_ENGINEERING = 4)
|
||||
|
||||
/obj/item/weapon/circuitboard/pacman/mrs
|
||||
name = T_BOARD("MRSPACMAN-type generator")
|
||||
build_path = "/obj/machinery/power/port_gen/pacman/mrs"
|
||||
origin_tech = list(TECH_DATA = 3, TECH_POWER = 5, TECH_ENGINERING = 5)
|
||||
origin_tech = list(TECH_DATA = 3, TECH_POWER = 5, TECH_ENGINEERING = 5)
|
||||
|
||||
@@ -6,14 +6,14 @@
|
||||
name = T_BOARD("superconductive magnetic energy storage")
|
||||
build_path = "/obj/machinery/power/smes/buildable"
|
||||
board_type = "machine"
|
||||
origin_tech = list(TECH_POWER = 6, TECH_ENGINERING = 4)
|
||||
origin_tech = list(TECH_POWER = 6, TECH_ENGINEERING = 4)
|
||||
req_components = list("/obj/item/weapon/smes_coil" = 1, "/obj/item/stack/cable_coil" = 30)
|
||||
|
||||
/obj/item/weapon/circuitboard/batteryrack
|
||||
name = T_BOARD("battery rack PSU")
|
||||
build_path = "/obj/machinery/power/smes/batteryrack"
|
||||
board_type = "machine"
|
||||
origin_tech = list(TECH_POWER = 3, TECH_ENGINERING = 2)
|
||||
origin_tech = list(TECH_POWER = 3, TECH_ENGINEERING = 2)
|
||||
req_components = list("/obj/item/weapon/cell" = 3)
|
||||
|
||||
/obj/item/weapon/circuitboard/ghettosmes
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
name = T_BOARD("cyborg recharging station")
|
||||
build_path = "/obj/machinery/recharge_station"
|
||||
board_type = "machine"
|
||||
origin_tech = list(TECH_DATA = 3, TECH_ENGINERING = 3)
|
||||
origin_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 3)
|
||||
req_components = list(
|
||||
"/obj/item/stack/cable_coil" = 5,
|
||||
"/obj/item/weapon/stock_parts/capacitor" = 2,
|
||||
|
||||
@@ -15,7 +15,7 @@ obj/item/weapon/circuitboard/rdserver
|
||||
name = T_BOARD("destructive analyzer")
|
||||
build_path = "/obj/machinery/r_n_d/destructive_analyzer"
|
||||
board_type = "machine"
|
||||
origin_tech = list(TECH_MAGNET = 2, TECH_ENGINERING = 2, TECH_DATA = 2)
|
||||
origin_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2, TECH_DATA = 2)
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/scanning_module" = 1,
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 1,
|
||||
@@ -25,7 +25,7 @@ obj/item/weapon/circuitboard/rdserver
|
||||
name = T_BOARD("autolathe")
|
||||
build_path = "/obj/machinery/autolathe"
|
||||
board_type = "machine"
|
||||
origin_tech = list(TECH_ENGINERING = 2, TECH_DATA = 2)
|
||||
origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2)
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/matter_bin" = 3,
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 1,
|
||||
@@ -35,7 +35,7 @@ obj/item/weapon/circuitboard/rdserver
|
||||
name = T_BOARD("protolathe")
|
||||
build_path = "/obj/machinery/r_n_d/protolathe"
|
||||
board_type = "machine"
|
||||
origin_tech = list(TECH_ENGINERING = 2, TECH_DATA = 2)
|
||||
origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2)
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/matter_bin" = 2,
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 2,
|
||||
@@ -46,7 +46,7 @@ obj/item/weapon/circuitboard/rdserver
|
||||
name = T_BOARD("circuit imprinter")
|
||||
build_path = "/obj/machinery/r_n_d/circuit_imprinter"
|
||||
board_type = "machine"
|
||||
origin_tech = list(TECH_ENGINERING = 2, TECH_DATA = 2)
|
||||
origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2)
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/matter_bin" = 1,
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 1,
|
||||
@@ -56,7 +56,7 @@ obj/item/weapon/circuitboard/rdserver
|
||||
name = "Circuit board (Exosuit Fabricator)"
|
||||
build_path = "/obj/machinery/mecha_part_fabricator"
|
||||
board_type = "machine"
|
||||
origin_tech = list(TECH_DATA = 3, TECH_ENGINERING = 3)
|
||||
origin_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 3)
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/matter_bin" = 2,
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 1,
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
/obj/item/weapon/circuitboard/telecomms/receiver
|
||||
name = T_BOARD("subspace receiver")
|
||||
build_path = "/obj/machinery/telecomms/receiver"
|
||||
origin_tech = list(TECH_DATA = 4, TECH_ENGINERING = 3, TECH_BLUESPACE = 2)
|
||||
origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 3, TECH_BLUESPACE = 2)
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/subspace/ansible" = 1,
|
||||
"/obj/item/weapon/stock_parts/subspace/filter" = 1,
|
||||
@@ -18,7 +18,7 @@
|
||||
/obj/item/weapon/circuitboard/telecomms/hub
|
||||
name = T_BOARD("hub mainframe")
|
||||
build_path = "/obj/machinery/telecomms/hub"
|
||||
origin_tech = list(TECH_DATA = 4, TECH_ENGINERING = 4)
|
||||
origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4)
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 2,
|
||||
"/obj/item/stack/cable_coil" = 2,
|
||||
@@ -27,7 +27,7 @@
|
||||
/obj/item/weapon/circuitboard/telecomms/relay
|
||||
name = T_BOARD("relay mainframe")
|
||||
build_path = "/obj/machinery/telecomms/relay"
|
||||
origin_tech = list(TECH_DATA = 3, TECH_ENGINERING = 4, TECH_BLUESPACE = 3)
|
||||
origin_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 4, TECH_BLUESPACE = 3)
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 2,
|
||||
"/obj/item/stack/cable_coil" = 2,
|
||||
@@ -36,7 +36,7 @@
|
||||
/obj/item/weapon/circuitboard/telecomms/bus
|
||||
name = T_BOARD("bus mainframe")
|
||||
build_path = "/obj/machinery/telecomms/bus"
|
||||
origin_tech = list(TECH_DATA = 4, TECH_ENGINERING = 4)
|
||||
origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4)
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 2,
|
||||
"/obj/item/stack/cable_coil" = 1,
|
||||
@@ -45,7 +45,7 @@
|
||||
/obj/item/weapon/circuitboard/telecomms/processor
|
||||
name = T_BOARD("processor unit")
|
||||
build_path = "/obj/machinery/telecomms/processor"
|
||||
origin_tech = list(TECH_DATA = 4, TECH_ENGINERING = 4)
|
||||
origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4)
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 3,
|
||||
"/obj/item/weapon/stock_parts/subspace/filter" = 1,
|
||||
@@ -57,7 +57,7 @@
|
||||
/obj/item/weapon/circuitboard/telecomms/server
|
||||
name = T_BOARD("telecommunication server")
|
||||
build_path = "/obj/machinery/telecomms/server"
|
||||
origin_tech = list(TECH_DATA = 4, TECH_ENGINERING = 4)
|
||||
origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4)
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 2,
|
||||
"/obj/item/stack/cable_coil" = 1,
|
||||
@@ -66,7 +66,7 @@
|
||||
/obj/item/weapon/circuitboard/telecomms/broadcaster
|
||||
name = T_BOARD("subspace broadcaster")
|
||||
build_path = "/obj/machinery/telecomms/broadcaster"
|
||||
origin_tech = list(TECH_DATA = 4, TECH_ENGINERING = 4, TECH_BLUESPACE = 2)
|
||||
origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4, TECH_BLUESPACE = 2)
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 2,
|
||||
"/obj/item/stack/cable_coil" = 1,
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
/obj/item/weapon/circuitboard/unary_atmos/heater
|
||||
name = T_BOARD("gas heating system")
|
||||
build_path = "/obj/machinery/atmospherics/unary/heater"
|
||||
origin_tech = list(TECH_POWER = 2, TECH_ENGINERING = 1)
|
||||
origin_tech = list(TECH_POWER = 2, TECH_ENGINEERING = 1)
|
||||
req_components = list(
|
||||
"/obj/item/stack/cable_coil" = 5,
|
||||
"/obj/item/weapon/stock_parts/matter_bin" = 1,
|
||||
@@ -25,7 +25,7 @@
|
||||
/obj/item/weapon/circuitboard/unary_atmos/cooler
|
||||
name = T_BOARD("gas cooling system")
|
||||
build_path = "/obj/machinery/atmospherics/unary/freezer"
|
||||
origin_tech = list(TECH_MAGNET = 2, TECH_ENGINERING = 2)
|
||||
origin_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2)
|
||||
req_components = list(
|
||||
"/obj/item/stack/cable_coil" = 2,
|
||||
"/obj/item/weapon/stock_parts/matter_bin" = 1,
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
force = 5.0
|
||||
throwforce = 7.0
|
||||
w_class = 2.0
|
||||
origin_tech = list(TECH_MATERIAL = 1, TECH_ENGINERING = 1)
|
||||
origin_tech = list(TECH_MATERIAL = 1, TECH_ENGINEERING = 1)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 150)
|
||||
attack_verb = list("bashed", "battered", "bludgeoned", "whacked")
|
||||
|
||||
@@ -103,7 +103,7 @@
|
||||
throw_speed = 2
|
||||
throw_range = 9
|
||||
w_class = 2.0
|
||||
origin_tech = list(TECH_MATERIAL = 1, TECH_ENGINERING = 1)
|
||||
origin_tech = list(TECH_MATERIAL = 1, TECH_ENGINEERING = 1)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 80)
|
||||
attack_verb = list("pinched", "nipped")
|
||||
sharp = 1
|
||||
@@ -148,7 +148,7 @@
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 70, "glass" = 30)
|
||||
|
||||
//R&D tech level
|
||||
origin_tech = list(TECH_ENGINERING = 1)
|
||||
origin_tech = list(TECH_ENGINEERING = 1)
|
||||
|
||||
//Welding tool specific stuff
|
||||
var/welding = 0 //Whether or not the welding tool is off(0), on(1) or currently welding(2)
|
||||
@@ -372,21 +372,21 @@
|
||||
/obj/item/weapon/weldingtool/largetank
|
||||
name = "industrial welding tool"
|
||||
max_fuel = 40
|
||||
origin_tech = list(TECH_ENGINERING = 2)
|
||||
origin_tech = list(TECH_ENGINEERING = 2)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 70, "glass" = 60)
|
||||
|
||||
/obj/item/weapon/weldingtool/hugetank
|
||||
name = "upgraded welding tool"
|
||||
max_fuel = 80
|
||||
w_class = 3.0
|
||||
origin_tech = list(TECH_ENGINERING = 3)
|
||||
origin_tech = list(TECH_ENGINEERING = 3)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 70, "glass" = 120)
|
||||
|
||||
/obj/item/weapon/weldingtool/experimental
|
||||
name = "experimental welding tool"
|
||||
max_fuel = 40
|
||||
w_class = 3.0
|
||||
origin_tech = list(TECH_ENGINERING = 4, TECH_PHORON = 3)
|
||||
origin_tech = list(TECH_ENGINEERING = 4, TECH_PHORON = 3)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 70, "glass" = 120)
|
||||
var/last_gen = 0
|
||||
|
||||
@@ -413,7 +413,7 @@
|
||||
throwforce = 7.0
|
||||
item_state = "crowbar"
|
||||
w_class = 2.0
|
||||
origin_tech = list(TECH_ENGINERING = 1)
|
||||
origin_tech = list(TECH_ENGINEERING = 1)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50)
|
||||
attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked")
|
||||
|
||||
|
||||
@@ -126,6 +126,8 @@
|
||||
/obj/proc/hide(h)
|
||||
return
|
||||
|
||||
/obj/proc/hides_under_flooring()
|
||||
return 0
|
||||
|
||||
/obj/proc/hear_talk(mob/M as mob, text, verb, datum/language/speaking)
|
||||
if(talking_atom)
|
||||
|
||||
@@ -44,6 +44,14 @@
|
||||
color = "#B8F5E3"
|
||||
alpha = 200
|
||||
|
||||
/obj/structure/curtain/open/bed
|
||||
name = "bed curtain"
|
||||
color = "#854636"
|
||||
|
||||
/obj/structure/curtain/open/privacy
|
||||
name = "privacy curtain"
|
||||
color = "#B8F5E3"
|
||||
|
||||
/obj/structure/curtain/open/shower
|
||||
name = "shower curtain"
|
||||
color = "#ACD1E9"
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
|
||||
/obj/structure/lattice/attackby(obj/item/C as obj, mob/user as mob)
|
||||
|
||||
if (istype(C, /obj/item/stack/tile/steel))
|
||||
if (istype(C, /obj/item/stack/tile/floor))
|
||||
var/turf/T = get_turf(src)
|
||||
T.attackby(C, user) //BubbleWrap - hand this off to the underlying turf instead
|
||||
return
|
||||
|
||||
@@ -175,12 +175,15 @@ obj/structure/safe/ex_act(severity)
|
||||
level = 1 //underfloor
|
||||
layer = 2.5
|
||||
|
||||
|
||||
/obj/structure/safe/floor/initialize()
|
||||
..()
|
||||
var/turf/T = loc
|
||||
hide(T.intact)
|
||||
|
||||
if(istype(T) && !T.is_plating())
|
||||
hide(1)
|
||||
update_icon()
|
||||
|
||||
/obj/structure/safe/floor/hide(var/intact)
|
||||
invisibility = intact ? 101 : 0
|
||||
|
||||
/obj/structure/safe/floor/hides_under_flooring()
|
||||
return 1
|
||||
|
||||
@@ -0,0 +1,181 @@
|
||||
var/list/flooring_types
|
||||
|
||||
/proc/get_flooring_data(var/flooring_path)
|
||||
if(!flooring_types)
|
||||
flooring_types = list()
|
||||
if(!flooring_types["[flooring_path]"])
|
||||
flooring_types["[flooring_path]"] = new flooring_path
|
||||
return flooring_types["[flooring_path]"]
|
||||
|
||||
// State values:
|
||||
// [icon_base]: initial base icon_state without edges or corners.
|
||||
// if has_base_range is set, append 0-has_base_range ie.
|
||||
// [icon_base][has_base_range]
|
||||
// [icon_base]_broken: damaged overlay.
|
||||
// if has_damage_range is set, append 0-damage_range for state ie.
|
||||
// [icon_base]_broken[has_damage_range]
|
||||
// [icon_base]_edges: directional overlays for edges.
|
||||
// [icon_base]_corners: directional overlays for non-edge corners.
|
||||
|
||||
/decl/flooring
|
||||
var/name
|
||||
var/desc
|
||||
var/icon
|
||||
var/icon_base
|
||||
|
||||
var/has_base_range
|
||||
var/has_damage_range
|
||||
var/has_burn_range
|
||||
var/damage_temperature
|
||||
var/apply_thermal_conductivity
|
||||
var/apply_heat_capacity
|
||||
|
||||
var/build_type // Unbuildable if not set. Must be /obj/item/stack.
|
||||
var/build_cost = 1 // Stack units.
|
||||
var/build_time = 0 // BYOND ticks.
|
||||
|
||||
var/descriptor = "tiles"
|
||||
var/flags
|
||||
var/can_paint
|
||||
|
||||
/decl/flooring/grass
|
||||
name = "grass"
|
||||
desc = "Do they smoke grass out in space, Bowie? Or do they smoke AstroTurf?"
|
||||
icon = 'icons/turf/flooring/grass.dmi'
|
||||
icon_base = "grass"
|
||||
has_base_range = 3
|
||||
damage_temperature = T0C+80
|
||||
flags = TURF_HAS_EDGES | TURF_REMOVE_SHOVEL
|
||||
build_type = /obj/item/stack/tile/grass
|
||||
|
||||
/decl/flooring/asteroid
|
||||
name = "coarse sand"
|
||||
desc = "Gritty and unpleasant."
|
||||
icon = 'icons/turf/flooring/asteroid.dmi'
|
||||
icon_base = "asteroid"
|
||||
flags = TURF_HAS_EDGES | TURF_REMOVE_SHOVEL
|
||||
build_type = null
|
||||
|
||||
/decl/flooring/carpet
|
||||
name = "carpet"
|
||||
desc = "Imported and comfy."
|
||||
icon = 'icons/turf/flooring/carpet.dmi'
|
||||
icon_base = "carpet"
|
||||
build_type = /obj/item/stack/tile/carpet
|
||||
damage_temperature = T0C+200
|
||||
flags = TURF_HAS_EDGES | TURF_HAS_CORNERS | TURF_REMOVE_CROWBAR | TURF_CAN_BURN
|
||||
|
||||
/decl/flooring/carpet/blue
|
||||
name = "carpet"
|
||||
icon_base = "bcarpet"
|
||||
build_type = null
|
||||
flags = TURF_HAS_EDGES
|
||||
|
||||
/decl/flooring/tiling
|
||||
name = "floor"
|
||||
desc = "Scuffed from the passage of countless greyshirts."
|
||||
icon = 'icons/turf/flooring/tiles.dmi'
|
||||
icon_base = "steel"
|
||||
has_damage_range = 4
|
||||
damage_temperature = T0C+1400
|
||||
flags = TURF_REMOVE_CROWBAR | TURF_CAN_BREAK | TURF_CAN_BURN
|
||||
build_type = /obj/item/stack/tile/floor
|
||||
can_paint = 1
|
||||
|
||||
/decl/flooring/linoleum
|
||||
name = "linoleum"
|
||||
desc = "It's like the 2390's all over again."
|
||||
icon = 'icons/turf/flooring/linoleum.dmi'
|
||||
icon_base = "lino"
|
||||
can_paint = 1
|
||||
|
||||
/decl/flooring/tiling/red
|
||||
name = "floor"
|
||||
icon_base = "red"
|
||||
has_damage_range = null
|
||||
flags = TURF_REMOVE_CROWBAR
|
||||
build_type = /obj/item/stack/tile/floor_red
|
||||
|
||||
/decl/flooring/tiling/steel
|
||||
name = "floor"
|
||||
icon_base = "steel"
|
||||
has_damage_range = null
|
||||
flags = TURF_REMOVE_CROWBAR
|
||||
build_type = /obj/item/stack/tile/floor_steel
|
||||
|
||||
/decl/flooring/tiling/white
|
||||
name = "floor"
|
||||
desc = "How sterile."
|
||||
icon_base = "white"
|
||||
has_damage_range = null
|
||||
flags = TURF_REMOVE_CROWBAR
|
||||
build_type = /obj/item/stack/tile/floor_white
|
||||
|
||||
/decl/flooring/tiling/yellow
|
||||
name = "floor"
|
||||
icon_base = "yellow"
|
||||
has_damage_range = null
|
||||
flags = TURF_REMOVE_CROWBAR
|
||||
build_type = /obj/item/stack/tile/floor_yellow
|
||||
|
||||
/decl/flooring/tiling/dark
|
||||
name = "floor"
|
||||
desc = "How ominous."
|
||||
icon_base = "dark"
|
||||
has_damage_range = null
|
||||
flags = TURF_REMOVE_CROWBAR
|
||||
build_type = /obj/item/stack/tile/floor_dark
|
||||
|
||||
/decl/flooring/tiling/freezer
|
||||
name = "floor"
|
||||
desc = "Don't slip."
|
||||
icon_base = "freezer"
|
||||
has_damage_range = null
|
||||
flags = TURF_REMOVE_CROWBAR
|
||||
build_type = /obj/item/stack/tile/floor_freezer
|
||||
|
||||
/decl/flooring/wood
|
||||
name = "wooden floor"
|
||||
desc = "Polished redwood planks."
|
||||
icon = 'icons/turf/flooring/wood.dmi'
|
||||
icon_base = "wood"
|
||||
has_damage_range = 6
|
||||
damage_temperature = T0C+200
|
||||
descriptor = "planks"
|
||||
build_type = /obj/item/stack/tile/wood
|
||||
flags = TURF_CAN_BREAK | TURF_IS_FRAGILE | TURF_REMOVE_SCREWDRIVER
|
||||
|
||||
/decl/flooring/reinforced
|
||||
name = "reinforced floor"
|
||||
desc = "Heavily reinforced with steel rods."
|
||||
icon = 'icons/turf/flooring/tiles.dmi'
|
||||
icon_base = "reinforced"
|
||||
flags = TURF_REMOVE_WRENCH | TURF_ACID_IMMUNE
|
||||
build_type = /obj/item/stack/rods
|
||||
build_cost = 2
|
||||
build_time = 30
|
||||
apply_thermal_conductivity = 0.025
|
||||
apply_heat_capacity = 325000
|
||||
can_paint = 1
|
||||
|
||||
/decl/flooring/reinforced/circuit
|
||||
name = "processing strata"
|
||||
icon = 'icons/turf/flooring/circuit.dmi'
|
||||
icon_base = "bcircuit"
|
||||
build_type = null
|
||||
flags = TURF_ACID_IMMUNE | TURF_CAN_BREAK
|
||||
can_paint = 1
|
||||
|
||||
/decl/flooring/reinforced/circuit/green
|
||||
name = "processing strata"
|
||||
icon_base = "gcircuit"
|
||||
|
||||
/decl/flooring/reinforced/cult
|
||||
name = "engraved floor"
|
||||
desc = "Unsettling whispers waver from the surface..."
|
||||
icon = 'icons/turf/flooring/cult.dmi'
|
||||
icon_base = "cult"
|
||||
build_type = null
|
||||
has_damage_range = 6
|
||||
flags = TURF_ACID_IMMUNE | TURF_CAN_BREAK
|
||||
can_paint = null
|
||||
@@ -0,0 +1,345 @@
|
||||
// These are objects that destroy themselves and add themselves to the
|
||||
// decal list of the floor under them. Use them rather than distinct icon_states
|
||||
// when mapping in interesting floor designs.
|
||||
var/list/floor_decals = list()
|
||||
|
||||
/obj/effect/floor_decal
|
||||
name = "floor decal"
|
||||
icon = 'icons/turf/flooring/decals.dmi'
|
||||
layer = TURF_LAYER + 0.01
|
||||
var/supplied_dir
|
||||
|
||||
/obj/effect/floor_decal/New(var/newloc, var/newdir, var/newcolour)
|
||||
supplied_dir = newdir
|
||||
if(newcolour) color = newcolour
|
||||
..(newloc)
|
||||
|
||||
/obj/effect/floor_decal/initialize()
|
||||
if(supplied_dir) set_dir(supplied_dir)
|
||||
var/turf/T = get_turf(src)
|
||||
if(istype(T, /turf/simulated/floor) || istype(T, /turf/unsimulated/floor))
|
||||
var/cache_key = "[alpha]-[color]-[dir]-[icon_state]-[layer]"
|
||||
if(!floor_decals[cache_key])
|
||||
var/image/I = image(icon = src.icon, icon_state = src.icon_state, dir = src.dir)
|
||||
I.layer = T.layer + 0.01
|
||||
I.color = src.color
|
||||
I.alpha = src.alpha
|
||||
floor_decals[cache_key] = I
|
||||
if(!T.decals) T.decals = list()
|
||||
T.decals |= floor_decals[cache_key]
|
||||
T.overlays |= floor_decals[cache_key]
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/effect/floor_decal/reset
|
||||
name = "reset marker"
|
||||
|
||||
/obj/effect/floor_decal/reset/initialize()
|
||||
var/turf/T = get_turf(src)
|
||||
if(T.decals && T.decals.len)
|
||||
T.decals.Cut()
|
||||
T.update_icon()
|
||||
return
|
||||
|
||||
/obj/effect/floor_decal/corner
|
||||
icon_state = "corner_white"
|
||||
|
||||
/obj/effect/floor_decal/corner/blue
|
||||
name = "blue corner"
|
||||
color = "#6A97B0"
|
||||
|
||||
/obj/effect/floor_decal/corner/blue/diagonal
|
||||
icon_state = "corner_white_diagonal"
|
||||
|
||||
/obj/effect/floor_decal/corner/blue/full
|
||||
icon_state = "corner_white_full"
|
||||
|
||||
/obj/effect/floor_decal/corner/paleblue
|
||||
name = "pale blue corner"
|
||||
color = "#8BBBD5"
|
||||
|
||||
/obj/effect/floor_decal/corner/paleblue/diagonal
|
||||
icon_state = "corner_white_diagonal"
|
||||
|
||||
/obj/effect/floor_decal/corner/paleblue/full
|
||||
icon_state = "corner_white_full"
|
||||
|
||||
/obj/effect/floor_decal/corner/green
|
||||
name = "green corner"
|
||||
color = "#8DAF6A"
|
||||
|
||||
/obj/effect/floor_decal/corner/green/diagonal
|
||||
icon_state = "corner_white_diagonal"
|
||||
|
||||
/obj/effect/floor_decal/corner/green/full
|
||||
icon_state = "corner_white_full"
|
||||
|
||||
/obj/effect/floor_decal/corner/lime
|
||||
name = "lime corner"
|
||||
color = "#AED18B"
|
||||
|
||||
/obj/effect/floor_decal/corner/lime/diagonal
|
||||
icon_state = "corner_white_diagonal"
|
||||
|
||||
/obj/effect/floor_decal/corner/lime/full
|
||||
icon_state = "corner_white_full"
|
||||
|
||||
/obj/effect/floor_decal/corner/yellow
|
||||
name = "yellow corner"
|
||||
color = "#B19664"
|
||||
|
||||
/obj/effect/floor_decal/corner/yellow/diagonal
|
||||
icon_state = "corner_white_diagonal"
|
||||
|
||||
/obj/effect/floor_decal/corner/yellow/full
|
||||
icon_state = "corner_white_full"
|
||||
|
||||
/obj/effect/floor_decal/corner/beige
|
||||
name = "beige corner"
|
||||
color = "#CEB689"
|
||||
|
||||
/obj/effect/floor_decal/corner/beige/diagonal
|
||||
icon_state = "corner_white_diagonal"
|
||||
|
||||
/obj/effect/floor_decal/corner/beige/full
|
||||
icon_state = "corner_white_full"
|
||||
|
||||
/obj/effect/floor_decal/corner/red
|
||||
name = "red corner"
|
||||
color = "#AA5F61"
|
||||
|
||||
/obj/effect/floor_decal/corner/red/diagonal
|
||||
icon_state = "corner_white_diagonal"
|
||||
|
||||
/obj/effect/floor_decal/corner/red/full
|
||||
icon_state = "corner_white_full"
|
||||
|
||||
/obj/effect/floor_decal/corner/pink
|
||||
name = "pink corner"
|
||||
color = "#CC9090"
|
||||
|
||||
/obj/effect/floor_decal/corner/pink/diagonal
|
||||
icon_state = "corner_white_diagonal"
|
||||
|
||||
/obj/effect/floor_decal/corner/pink/full
|
||||
icon_state = "corner_white_full"
|
||||
|
||||
/obj/effect/floor_decal/corner/purple
|
||||
name = "purple corner"
|
||||
color = "#A2819E"
|
||||
|
||||
/obj/effect/floor_decal/corner/purple/diagonal
|
||||
icon_state = "corner_white_diagonal"
|
||||
|
||||
/obj/effect/floor_decal/corner/purple/full
|
||||
icon_state = "corner_white_full"
|
||||
|
||||
/obj/effect/floor_decal/corner/mauve
|
||||
name = "mauve corner"
|
||||
color = "#BDA2BA"
|
||||
|
||||
/obj/effect/floor_decal/corner/mauve/diagonal
|
||||
icon_state = "corner_white_diagonal"
|
||||
|
||||
/obj/effect/floor_decal/corner/mauve/full
|
||||
icon_state = "corner_white_full"
|
||||
|
||||
/obj/effect/floor_decal/corner/orange
|
||||
name = "orange corner"
|
||||
color = "#B95A00"
|
||||
|
||||
/obj/effect/floor_decal/corner/orange/diagonal
|
||||
icon_state = "corner_white_diagonal"
|
||||
|
||||
/obj/effect/floor_decal/corner/orange/full
|
||||
icon_state = "corner_white_full"
|
||||
|
||||
/obj/effect/floor_decal/corner/brown
|
||||
name = "brown corner"
|
||||
color = "#917448"
|
||||
|
||||
/obj/effect/floor_decal/corner/brown/diagonal
|
||||
icon_state = "corner_white_diagonal"
|
||||
|
||||
/obj/effect/floor_decal/corner/brown/full
|
||||
icon_state = "corner_white_full"
|
||||
|
||||
/obj/effect/floor_decal/corner/white
|
||||
name = "white corner"
|
||||
icon_state = "corner_white"
|
||||
|
||||
/obj/effect/floor_decal/corner/white/diagonal
|
||||
icon_state = "corner_white_diagonal"
|
||||
|
||||
/obj/effect/floor_decal/corner/white/full
|
||||
icon_state = "corner_white_full"
|
||||
|
||||
/obj/effect/floor_decal/corner/grey
|
||||
name = "grey corner"
|
||||
color = "#8D8C8C"
|
||||
|
||||
/obj/effect/floor_decal/corner/grey/diagonal
|
||||
icon_state = "corner_white_diagonal"
|
||||
|
||||
/obj/effect/floor_decal/corner/grey/full
|
||||
icon_state = "corner_white_full"
|
||||
|
||||
/obj/effect/floor_decal/industrial/warning
|
||||
name = "hazard stripes"
|
||||
icon_state = "warning"
|
||||
|
||||
/obj/effect/floor_decal/industrial/warning/corner
|
||||
icon_state = "warningcorner"
|
||||
|
||||
/obj/effect/floor_decal/industrial/warning/full
|
||||
icon_state = "warningfull"
|
||||
|
||||
/obj/effect/floor_decal/industrial/warning/cee
|
||||
icon_state = "warningcee"
|
||||
|
||||
/obj/effect/floor_decal/industrial/warning/dust
|
||||
name = "hazard stripes"
|
||||
icon_state = "warning_dust"
|
||||
|
||||
/obj/effect/floor_decal/industrial/warning/dust/corner
|
||||
name = "hazard stripes"
|
||||
icon_state = "warningcorner_dust"
|
||||
|
||||
/obj/effect/floor_decal/industrial/hatch
|
||||
name = "hatched marking"
|
||||
icon_state = "delivery"
|
||||
color = "#CFCF55"
|
||||
|
||||
/obj/effect/floor_decal/industrial/outline
|
||||
name = "white outline"
|
||||
icon_state = "outline"
|
||||
|
||||
/obj/effect/floor_decal/industrial/outline/blue
|
||||
name = "blue outline"
|
||||
color = "#00B8B2"
|
||||
|
||||
/obj/effect/floor_decal/industrial/outline/yellow
|
||||
name = "yellow outline"
|
||||
color = "#CFCF55"
|
||||
|
||||
/obj/effect/floor_decal/industrial/outline/grey
|
||||
name = "grey outline"
|
||||
color = "#808080"
|
||||
|
||||
/obj/effect/floor_decal/industrial/loading
|
||||
name = "loading area"
|
||||
icon_state = "loadingarea"
|
||||
|
||||
/obj/effect/floor_decal/plaque
|
||||
name = "plaque"
|
||||
icon_state = "plaque"
|
||||
|
||||
/obj/effect/floor_decal/asteroid
|
||||
name = "random asteroid rubble"
|
||||
icon_state = "asteroid0"
|
||||
|
||||
/obj/effect/floor_decal/asteroid/New()
|
||||
icon_state = "asteroid[rand(0,9)]"
|
||||
..()
|
||||
|
||||
/obj/effect/floor_decal/chapel
|
||||
name = "chapel"
|
||||
icon_state = "chapel"
|
||||
|
||||
/obj/effect/floor_decal/ss13/l1
|
||||
name = "L1"
|
||||
icon_state = "L1"
|
||||
|
||||
/obj/effect/floor_decal/ss13/l2
|
||||
name = "L2"
|
||||
icon_state = "L2"
|
||||
|
||||
/obj/effect/floor_decal/ss13/l3
|
||||
name = "L3"
|
||||
icon_state = "L3"
|
||||
|
||||
/obj/effect/floor_decal/ss13/l4
|
||||
name = "L4"
|
||||
icon_state = "L4"
|
||||
|
||||
/obj/effect/floor_decal/ss13/l5
|
||||
name = "L5"
|
||||
icon_state = "L5"
|
||||
|
||||
/obj/effect/floor_decal/ss13/l6
|
||||
name = "L6"
|
||||
icon_state = "L6"
|
||||
|
||||
/obj/effect/floor_decal/ss13/l7
|
||||
name = "L7"
|
||||
icon_state = "L7"
|
||||
|
||||
/obj/effect/floor_decal/ss13/l8
|
||||
name = "L8"
|
||||
icon_state = "L8"
|
||||
|
||||
/obj/effect/floor_decal/ss13/l9
|
||||
name = "L9"
|
||||
icon_state = "L9"
|
||||
|
||||
/obj/effect/floor_decal/ss13/l10
|
||||
name = "L10"
|
||||
icon_state = "L10"
|
||||
|
||||
/obj/effect/floor_decal/ss13/l11
|
||||
name = "L11"
|
||||
icon_state = "L11"
|
||||
|
||||
/obj/effect/floor_decal/ss13/l12
|
||||
name = "L12"
|
||||
icon_state = "L12"
|
||||
|
||||
/obj/effect/floor_decal/ss13/l13
|
||||
name = "L13"
|
||||
icon_state = "L13"
|
||||
|
||||
/obj/effect/floor_decal/ss13/l14
|
||||
name = "L14"
|
||||
icon_state = "L14"
|
||||
|
||||
/obj/effect/floor_decal/ss13/l15
|
||||
name = "L15"
|
||||
icon_state = "L15"
|
||||
|
||||
/obj/effect/floor_decal/ss13/l16
|
||||
name = "L16"
|
||||
icon_state = "L16"
|
||||
|
||||
/obj/effect/floor_decal/sign
|
||||
name = "floor sign"
|
||||
icon_state = "white_1"
|
||||
|
||||
/obj/effect/floor_decal/sign/two
|
||||
icon_state = "white_2"
|
||||
|
||||
/obj/effect/floor_decal/sign/a
|
||||
icon_state = "white_a"
|
||||
|
||||
/obj/effect/floor_decal/sign/b
|
||||
icon_state = "white_b"
|
||||
|
||||
/obj/effect/floor_decal/sign/c
|
||||
icon_state = "white_c"
|
||||
|
||||
/obj/effect/floor_decal/sign/d
|
||||
icon_state = "white_d"
|
||||
|
||||
/obj/effect/floor_decal/sign/ex
|
||||
icon_state = "white_ex"
|
||||
|
||||
/obj/effect/floor_decal/sign/m
|
||||
icon_state = "white_m"
|
||||
|
||||
/obj/effect/floor_decal/sign/cmo
|
||||
icon_state = "white_cmo"
|
||||
|
||||
/obj/effect/floor_decal/sign/v
|
||||
icon_state = "white_v"
|
||||
|
||||
/obj/effect/floor_decal/sign/p
|
||||
icon_state = "white_p"
|
||||
@@ -0,0 +1,187 @@
|
||||
/turf/simulated/floor/carpet
|
||||
name = "carpet"
|
||||
icon = 'icons/turf/flooring/carpet.dmi'
|
||||
icon_state = "carpet"
|
||||
initial_flooring = /decl/flooring/carpet
|
||||
|
||||
/turf/simulated/floor/bluegrid
|
||||
name = "mainframe floor"
|
||||
icon = 'icons/turf/flooring/circuit.dmi'
|
||||
icon_state = "bcircuit"
|
||||
initial_flooring = /decl/flooring/reinforced/circuit
|
||||
|
||||
/turf/simulated/floor/greengrid
|
||||
name = "mainframe floor"
|
||||
icon = 'icons/turf/flooring/circuit.dmi'
|
||||
icon_state = "gcircuit"
|
||||
initial_flooring = /decl/flooring/reinforced/circuit/green
|
||||
|
||||
/turf/simulated/floor/wood
|
||||
name = "wooden floor"
|
||||
icon = 'icons/turf/flooring/wood.dmi'
|
||||
icon_state = "wood"
|
||||
initial_flooring = /decl/flooring/wood
|
||||
|
||||
/turf/simulated/floor/grass
|
||||
name = "grass patch"
|
||||
icon = 'icons/turf/flooring/grass.dmi'
|
||||
icon_state = "grass0"
|
||||
initial_flooring = /decl/flooring/grass
|
||||
|
||||
/turf/simulated/floor/carpet/blue
|
||||
name = "blue carpet"
|
||||
icon_state = "bcarpet"
|
||||
initial_flooring = /decl/flooring/carpet/blue
|
||||
|
||||
/turf/simulated/floor/tiled
|
||||
name = "floor"
|
||||
icon = 'icons/turf/flooring/tiles.dmi'
|
||||
icon_state = "steel"
|
||||
initial_flooring = /decl/flooring/tiling
|
||||
|
||||
/turf/simulated/floor/reinforced
|
||||
name = "reinforced floor"
|
||||
icon = 'icons/turf/flooring/tiles.dmi'
|
||||
icon_state = "reinforced"
|
||||
initial_flooring = /decl/flooring/reinforced
|
||||
|
||||
/turf/simulated/floor/reinforced/airless
|
||||
oxygen = 0
|
||||
nitrogen = 0
|
||||
|
||||
/turf/simulated/floor/reinforced/airmix
|
||||
oxygen = MOLES_O2ATMOS
|
||||
nitrogen = MOLES_N2ATMOS
|
||||
|
||||
/turf/simulated/floor/reinforced/nitrogen
|
||||
oxygen = 0
|
||||
nitrogen = MOLES_O2ATMOS + MOLES_N2ATMOS
|
||||
|
||||
/turf/simulated/floor/reinforced/oxygen
|
||||
oxygen = MOLES_O2ATMOS + MOLES_N2ATMOS
|
||||
nitrogen = 0
|
||||
|
||||
/turf/simulated/floor/reinforced/phoron
|
||||
oxygen = 0
|
||||
nitrogen = 0
|
||||
phoron = MOLES_O2ATMOS + MOLES_N2ATMOS
|
||||
|
||||
/turf/simulated/floor/reinforced/carbon_dioxide
|
||||
oxygen = 0
|
||||
nitrogen = 0
|
||||
carbon_dioxide = MOLES_O2ATMOS + MOLES_N2ATMOS
|
||||
|
||||
/turf/simulated/floor/reinforced/n20
|
||||
oxygen = 0
|
||||
nitrogen = 0
|
||||
|
||||
/turf/simulated/floor/reinforced/n20/New()
|
||||
..()
|
||||
sleep(-1)
|
||||
if(!air) make_air()
|
||||
air.adjust_gas("sleeping_agent", MOLES_O2ATMOS + MOLES_N2ATMOS)
|
||||
|
||||
/turf/simulated/floor/cult
|
||||
name = "engraved floor"
|
||||
icon = 'icons/turf/flooring/cult.dmi'
|
||||
icon_state = "cult"
|
||||
initial_flooring = /decl/flooring/reinforced/cult
|
||||
|
||||
/turf/simulated/floor/cult/cultify()
|
||||
return
|
||||
|
||||
/turf/simulated/floor/tiled/dark
|
||||
name = "dark floor"
|
||||
icon_state = "dark"
|
||||
initial_flooring = /decl/flooring/tiling/dark
|
||||
|
||||
/turf/simulated/floor/tiled/red
|
||||
name = "red floor"
|
||||
icon_state = "red"
|
||||
initial_flooring = /decl/flooring/tiling/red
|
||||
|
||||
/turf/simulated/floor/tiled/steel
|
||||
name = "steel floor"
|
||||
icon_state = "steel_dirty"
|
||||
initial_flooring = /decl/flooring/tiling/steel
|
||||
|
||||
/turf/simulated/floor/tiled/white
|
||||
name = "white floor"
|
||||
icon_state = "white"
|
||||
initial_flooring = /decl/flooring/tiling/white
|
||||
|
||||
/turf/simulated/floor/tiled/yellow
|
||||
name = "yellow floor"
|
||||
icon_state = "yellow"
|
||||
initial_flooring = /decl/flooring/tiling/yellow
|
||||
|
||||
/turf/simulated/floor/tiled/freezer
|
||||
name = "tiles"
|
||||
icon_state = "freezer"
|
||||
initial_flooring = /decl/flooring/tiling/freezer
|
||||
|
||||
/turf/simulated/floor/lino
|
||||
name = "lino"
|
||||
icon = 'icons/turf/flooring/linoleum.dmi'
|
||||
icon_state = "lino"
|
||||
initial_flooring = /decl/flooring/linoleum
|
||||
|
||||
//ATMOS PREMADES
|
||||
/turf/simulated/floor/reinforced/airless
|
||||
name = "vacuum floor"
|
||||
oxygen = 0
|
||||
nitrogen = 0
|
||||
temperature = TCMB
|
||||
|
||||
/turf/simulated/floor/reinforced/nitrogen
|
||||
oxygen = 0
|
||||
|
||||
/turf/simulated/floor/reinforced/n20/New()
|
||||
. = ..()
|
||||
assume_gas("sleeping_agent", 2000)
|
||||
|
||||
/turf/simulated/floor/airless
|
||||
name = "airless plating"
|
||||
oxygen = 0
|
||||
nitrogen = 0
|
||||
temperature = TCMB
|
||||
|
||||
/turf/simulated/floor/tiled/airless
|
||||
name = "airless floor"
|
||||
oxygen = 0
|
||||
nitrogen = 0
|
||||
temperature = TCMB
|
||||
|
||||
/turf/simulated/floor/bluegrid/airless
|
||||
name = "airless floor"
|
||||
oxygen = 0
|
||||
nitrogen = 0
|
||||
temperature = TCMB
|
||||
|
||||
/turf/simulated/floor/greengrid/airless
|
||||
name = "airless floor"
|
||||
oxygen = 0
|
||||
nitrogen = 0
|
||||
temperature = TCMB
|
||||
|
||||
/turf/simulated/floor/greengrid/nitrogen
|
||||
oxygen = 0
|
||||
|
||||
/turf/simulated/floor/tiled/white/airless
|
||||
name = "airless floor"
|
||||
oxygen = 0
|
||||
nitrogen = 0
|
||||
temperature = TCMB
|
||||
|
||||
// Placeholders
|
||||
/turf/simulated/floor/airless/lava
|
||||
/turf/simulated/floor/light
|
||||
/turf/simulated/floor/snow
|
||||
/turf/simulated/floor/beach
|
||||
/turf/simulated/floor/beach/sand
|
||||
/turf/simulated/floor/beach/sand/desert
|
||||
/turf/simulated/floor/beach/coastline
|
||||
/turf/simulated/floor/beach/water
|
||||
/turf/simulated/floor/beach/water/ocean
|
||||
/turf/simulated/floor/plating/snow
|
||||
/turf/simulated/floor/airless/ceiling
|
||||
@@ -1,604 +1,72 @@
|
||||
#define LIGHTFLOOR_ON_BIT 4
|
||||
|
||||
#define LIGHTFLOOR_STATE_OK 0
|
||||
#define LIGHTFLOOR_STATE_FLICKER 1
|
||||
#define LIGHTFLOOR_STATE_BREAKING 2
|
||||
#define LIGHTFLOOR_STATE_BROKEN 3
|
||||
#define LIGHTFLOOR_STATE_BITS 3
|
||||
|
||||
//This is so damaged or burnt tiles or platings don't get remembered as the default tile
|
||||
var/list/icons_to_ignore_at_floor_init = list("damaged1","damaged2","damaged3","damaged4",
|
||||
"damaged5","panelscorched","floorscorched1","floorscorched2","platingdmg1","platingdmg2",
|
||||
"platingdmg3","plating","light_on","light_on_flicker1","light_on_flicker2",
|
||||
"light_on_clicker3","light_on_clicker4","light_on_clicker5","light_broken",
|
||||
"light_on_broken","light_off","wall_thermite","grass1","grass2","grass3","grass4",
|
||||
"asteroid","asteroid_dug",
|
||||
"asteroid0","asteroid1","asteroid2","asteroid3","asteroid4",
|
||||
"asteroid5","asteroid6","asteroid7","asteroid8","asteroid9","asteroid10","asteroid11","asteroid12",
|
||||
"oldburning","light-on-r","light-on-y","light-on-g","light-on-b", "wood", "wood-broken", "carpet",
|
||||
"carpetcorner", "carpetside", "carpet", "ironsand1", "ironsand2", "ironsand3", "ironsand4", "ironsand5",
|
||||
"ironsand6", "ironsand7", "ironsand8", "ironsand9", "ironsand10", "ironsand11",
|
||||
"ironsand12", "ironsand13", "ironsand14", "ironsand15")
|
||||
|
||||
var/list/plating_icons = list("plating","platingdmg1","platingdmg2","platingdmg3","asteroid","asteroid_dug",
|
||||
"ironsand1", "ironsand2", "ironsand3", "ironsand4", "ironsand5", "ironsand6", "ironsand7",
|
||||
"ironsand8", "ironsand9", "ironsand10", "ironsand11",
|
||||
"ironsand12", "ironsand13", "ironsand14", "ironsand15")
|
||||
var/list/wood_icons = list("wood","wood-broken")
|
||||
|
||||
/turf/simulated/floor
|
||||
name = "plating"
|
||||
icon = 'icons/turf/flooring/plating.dmi'
|
||||
icon_state = "plating"
|
||||
|
||||
//Note to coders, the 'intact' var can no longer be used to determine if the floor is a plating or not.
|
||||
//Use the is_plating(), is_steel_floor() and is_light_floor() procs instead. --Errorage
|
||||
name = "floor"
|
||||
icon = 'icons/turf/floors.dmi'
|
||||
icon_state = "floor"
|
||||
// Damage to flooring.
|
||||
var/broken
|
||||
var/burnt
|
||||
|
||||
// Plating data.
|
||||
var/base_name = "plating"
|
||||
var/base_desc = "The naked hull."
|
||||
var/base_icon = 'icons/turf/flooring/plating.dmi'
|
||||
var/base_icon_state = "plating"
|
||||
|
||||
// Flooring data.
|
||||
var/flooring_override
|
||||
var/initial_flooring
|
||||
var/decl/flooring/flooring
|
||||
var/mineral = DEFAULT_WALL_MATERIAL
|
||||
|
||||
var/icon_regular_floor = "floor" //used to remember what icon the tile should have by default
|
||||
var/icon_plating = "plating"
|
||||
thermal_conductivity = 0.040
|
||||
heat_capacity = 10000
|
||||
var/lava = 0
|
||||
var/broken = 0
|
||||
var/burnt = 0
|
||||
var/mineral = DEFAULT_WALL_MATERIAL
|
||||
var/floor_type = /obj/item/stack/tile/steel
|
||||
var/lightfloor_state // for light floors, this is the state of the tile. 0-7, 0x4 is on-bit - use the helper procs below
|
||||
|
||||
proc/get_lightfloor_state()
|
||||
return lightfloor_state & LIGHTFLOOR_STATE_BITS
|
||||
|
||||
proc/get_lightfloor_on()
|
||||
return lightfloor_state & LIGHTFLOOR_ON_BIT
|
||||
|
||||
proc/set_lightfloor_state(n)
|
||||
lightfloor_state = get_lightfloor_on() | (n & LIGHTFLOOR_STATE_BITS)
|
||||
|
||||
proc/set_lightfloor_on(n)
|
||||
if(n)
|
||||
lightfloor_state |= LIGHTFLOOR_ON_BIT
|
||||
else
|
||||
lightfloor_state &= ~LIGHTFLOOR_ON_BIT
|
||||
|
||||
proc/toggle_lightfloor_on()
|
||||
lightfloor_state ^= LIGHTFLOOR_ON_BIT
|
||||
|
||||
/turf/simulated/floor/New()
|
||||
..()
|
||||
if(icon_state in icons_to_ignore_at_floor_init) //so damaged/burned tiles or plating icons aren't saved as the default
|
||||
icon_regular_floor = "floor"
|
||||
else
|
||||
icon_regular_floor = icon_state
|
||||
|
||||
//turf/simulated/floor/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
// if ((istype(mover, /obj/machinery/vehicle) && !(src.burnt)))
|
||||
// if (!( locate(/obj/machinery/mass_driver, src) ))
|
||||
// return 0
|
||||
// return ..()
|
||||
|
||||
/turf/simulated/floor/ex_act(severity)
|
||||
//set src in oview(1)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
src.ChangeTurf(get_base_turf(src.z))
|
||||
if(2.0)
|
||||
switch(pick(40;1,40;2,3))
|
||||
if (1)
|
||||
if(prob(33)) new /obj/item/stack/material/steel(src)
|
||||
src.ReplaceWithLattice()
|
||||
if(2)
|
||||
src.ChangeTurf(get_base_turf(src.z))
|
||||
if(3)
|
||||
if(prob(33)) new /obj/item/stack/material/steel(src)
|
||||
if(prob(80))
|
||||
src.break_tile_to_plating()
|
||||
else
|
||||
src.break_tile()
|
||||
src.hotspot_expose(1000,CELL_VOLUME)
|
||||
if(3.0)
|
||||
if (prob(50))
|
||||
src.break_tile()
|
||||
src.hotspot_expose(1000,CELL_VOLUME)
|
||||
return
|
||||
|
||||
/turf/simulated/floor/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
|
||||
var/temp_destroy = get_damage_temperature()
|
||||
if(!burnt && prob(5))
|
||||
burn_tile(exposed_temperature)
|
||||
else if(temp_destroy && exposed_temperature >= (temp_destroy + 100) && prob(1) && !is_plating())
|
||||
make_plating() //destroy the tile, exposing plating
|
||||
burn_tile(exposed_temperature)
|
||||
return
|
||||
|
||||
//should be a little bit lower than the temperature required to destroy the material
|
||||
/turf/simulated/floor/proc/get_damage_temperature()
|
||||
if(is_steel_floor()) return T0C+1400
|
||||
if(is_wood_floor()) return T0C+200
|
||||
if(is_carpet_floor()) return T0C+200
|
||||
if(is_grass_floor()) return T0C+80
|
||||
return null
|
||||
|
||||
/turf/simulated/floor/adjacent_fire_act(turf/simulated/floor/adj_turf, datum/gas_mixture/adj_air, adj_temp, adj_volume)
|
||||
var/dir_to = get_dir(src, adj_turf)
|
||||
|
||||
for(var/obj/structure/window/W in src)
|
||||
if(W.dir == dir_to || W.is_fulltile()) //Same direction or diagonal (full tile)
|
||||
W.fire_act(adj_air, adj_temp, adj_volume)
|
||||
|
||||
/turf/simulated/floor/blob_act()
|
||||
return
|
||||
|
||||
turf/simulated/floor/proc/update_icon()
|
||||
if(lava)
|
||||
return
|
||||
else if(is_steel_floor())
|
||||
if(!broken && !burnt)
|
||||
icon_state = icon_regular_floor
|
||||
else if(is_plating())
|
||||
if(!broken && !burnt)
|
||||
icon_state = icon_plating //Because asteroids are 'platings' too.
|
||||
else if(is_light_floor())
|
||||
if(get_lightfloor_on())
|
||||
switch(get_lightfloor_state())
|
||||
if(LIGHTFLOOR_STATE_OK)
|
||||
icon_state = "light_on"
|
||||
set_light(5)
|
||||
if(LIGHTFLOOR_STATE_FLICKER)
|
||||
var/num = pick("1","2","3","4")
|
||||
icon_state = "light_on_flicker[num]"
|
||||
set_light(5)
|
||||
if(LIGHTFLOOR_STATE_BREAKING)
|
||||
icon_state = "light_on_broken"
|
||||
set_light(5)
|
||||
if(LIGHTFLOOR_STATE_BROKEN)
|
||||
icon_state = "light_off"
|
||||
set_light(0)
|
||||
else
|
||||
set_light(0)
|
||||
icon_state = "light_off"
|
||||
else if(is_grass_floor())
|
||||
if(!broken && !burnt)
|
||||
if(!(icon_state in list("grass1","grass2","grass3","grass4")))
|
||||
icon_state = "grass[pick("1","2","3","4")]"
|
||||
else if(is_carpet_floor())
|
||||
if(!broken && !burnt)
|
||||
if(icon_state != "carpetsymbol")
|
||||
var/connectdir = 0
|
||||
for(var/direction in cardinal)
|
||||
if(istype(get_step(src,direction),/turf/simulated/floor))
|
||||
var/turf/simulated/floor/FF = get_step(src,direction)
|
||||
if(FF.is_carpet_floor())
|
||||
connectdir |= direction
|
||||
|
||||
//Check the diagonal connections for corners, where you have, for example, connections both north and east. In this case it checks for a north-east connection to determine whether to add a corner marker or not.
|
||||
var/diagonalconnect = 0 //1 = NE; 2 = SE; 4 = NW; 8 = SW
|
||||
|
||||
//Northeast
|
||||
if(connectdir & NORTH && connectdir & EAST)
|
||||
if(istype(get_step(src,NORTHEAST),/turf/simulated/floor))
|
||||
var/turf/simulated/floor/FF = get_step(src,NORTHEAST)
|
||||
if(FF.is_carpet_floor())
|
||||
diagonalconnect |= 1
|
||||
|
||||
//Southeast
|
||||
if(connectdir & SOUTH && connectdir & EAST)
|
||||
if(istype(get_step(src,SOUTHEAST),/turf/simulated/floor))
|
||||
var/turf/simulated/floor/FF = get_step(src,SOUTHEAST)
|
||||
if(FF.is_carpet_floor())
|
||||
diagonalconnect |= 2
|
||||
|
||||
//Northwest
|
||||
if(connectdir & NORTH && connectdir & WEST)
|
||||
if(istype(get_step(src,NORTHWEST),/turf/simulated/floor))
|
||||
var/turf/simulated/floor/FF = get_step(src,NORTHWEST)
|
||||
if(FF.is_carpet_floor())
|
||||
diagonalconnect |= 4
|
||||
|
||||
//Southwest
|
||||
if(connectdir & SOUTH && connectdir & WEST)
|
||||
if(istype(get_step(src,SOUTHWEST),/turf/simulated/floor))
|
||||
var/turf/simulated/floor/FF = get_step(src,SOUTHWEST)
|
||||
if(FF.is_carpet_floor())
|
||||
diagonalconnect |= 8
|
||||
|
||||
icon_state = "carpet[connectdir]-[diagonalconnect]"
|
||||
|
||||
else if(is_wood_floor())
|
||||
if(!broken && !burnt)
|
||||
if( !(icon_state in wood_icons) )
|
||||
icon_state = "wood"
|
||||
//world << "[icon_state]y's got [icon_state]"
|
||||
/*spawn(1)
|
||||
if(istype(src,/turf/simulated/floor)) //Was throwing runtime errors due to a chance of it changing to space halfway through.
|
||||
if(air)
|
||||
update_visuals(air)*/
|
||||
|
||||
/turf/simulated/floor/return_siding_icon_state()
|
||||
..()
|
||||
if(is_grass_floor())
|
||||
var/dir_sum = 0
|
||||
for(var/direction in cardinal)
|
||||
var/turf/T = get_step(src,direction)
|
||||
if(!(T.is_grass_floor()))
|
||||
dir_sum += direction
|
||||
if(dir_sum)
|
||||
return "wood_siding[dir_sum]"
|
||||
else
|
||||
return 0
|
||||
|
||||
/turf/simulated/floor/attack_hand(mob/user as mob)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
|
||||
if(is_light_floor())
|
||||
if(user.canmove && !user.restrained())
|
||||
toggle_lightfloor_on()
|
||||
update_icon()
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/turf/simulated/floor/proc/gets_drilled()
|
||||
return
|
||||
|
||||
/turf/simulated/floor/proc/break_tile_to_plating()
|
||||
if(!is_plating())
|
||||
make_plating()
|
||||
break_tile()
|
||||
|
||||
/turf/simulated/floor/is_steel_floor()
|
||||
if(ispath(floor_type, /obj/item/stack/tile/steel))
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
/turf/simulated/floor/is_light_floor()
|
||||
if(ispath(floor_type, /obj/item/stack/tile/light))
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
/turf/simulated/floor/is_grass_floor()
|
||||
if(ispath(floor_type, /obj/item/stack/tile/grass))
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
/turf/simulated/floor/is_wood_floor()
|
||||
if(ispath(floor_type, /obj/item/stack/tile/wood))
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
/turf/simulated/floor/is_carpet_floor()
|
||||
if(ispath(floor_type, /obj/item/stack/tile/carpet))
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
/turf/simulated/floor/is_plating()
|
||||
if(!floor_type)
|
||||
return 1
|
||||
return 0
|
||||
return !flooring
|
||||
|
||||
/turf/simulated/floor/proc/break_tile()
|
||||
if(istype(src,/turf/simulated/floor/engine)) return
|
||||
if(istype(src,/turf/simulated/floor/mech_bay_recharge_floor))
|
||||
src.ChangeTurf(/turf/simulated/floor/plating)
|
||||
if(broken) return
|
||||
if(is_steel_floor())
|
||||
src.icon_state = "damaged[pick(1,2,3,4,5)]"
|
||||
broken = 1
|
||||
else if(is_light_floor())
|
||||
src.icon_state = "light_broken"
|
||||
broken = 1
|
||||
else if(is_plating())
|
||||
src.icon_state = "platingdmg[pick(1,2,3)]"
|
||||
broken = 1
|
||||
else if(is_wood_floor())
|
||||
src.icon_state = "wood-broken"
|
||||
broken = 1
|
||||
else if(is_carpet_floor())
|
||||
src.icon_state = "carpet-broken"
|
||||
broken = 1
|
||||
else if(is_grass_floor())
|
||||
src.icon_state = "sand[pick("1","2","3")]"
|
||||
broken = 1
|
||||
/turf/simulated/floor/New(var/newloc, var/floortype)
|
||||
..(newloc)
|
||||
if(!floortype && initial_flooring)
|
||||
floortype = initial_flooring
|
||||
if(floortype)
|
||||
set_flooring(get_flooring_data(floortype))
|
||||
|
||||
/turf/simulated/floor/proc/burn_tile(var/exposed_temperature)
|
||||
if(istype(src,/turf/simulated/floor/engine)) return
|
||||
if(istype(src,/turf/simulated/floor/plating/airless/asteroid)) return//Asteroid tiles don't burn
|
||||
|
||||
var/damage_temp = get_damage_temperature()
|
||||
|
||||
if(broken) return
|
||||
if(burnt)
|
||||
if(is_steel_floor() && exposed_temperature >= damage_temp) //allow upgrading from scorched tiles to damaged tiles
|
||||
src.icon_state = "damaged[pick(1,2,3,4,5)]"
|
||||
broken = 1
|
||||
return
|
||||
|
||||
if(is_steel_floor() && exposed_temperature >= T0C+300) //enough to char the floor, but not hot enough to actually burn holes in it
|
||||
src.icon_state = "floorscorched[pick(1,2)]"
|
||||
burnt = 1
|
||||
else if(exposed_temperature >= damage_temp)
|
||||
if(is_steel_floor())
|
||||
src.icon_state = "damaged[pick(1,2,3,4,5)]"
|
||||
burnt = 1
|
||||
else if(is_plating())
|
||||
src.icon_state = "panelscorched"
|
||||
burnt = 1
|
||||
else if(is_wood_floor())
|
||||
src.icon_state = "wood-broken"
|
||||
burnt = 1
|
||||
else if(is_carpet_floor())
|
||||
src.icon_state = "carpet-broken"
|
||||
burnt = 1
|
||||
else if(is_grass_floor())
|
||||
src.icon_state = "sand[pick("1","2","3")]"
|
||||
burnt = 1
|
||||
/turf/simulated/floor/proc/set_flooring(var/decl/flooring/newflooring)
|
||||
make_plating(defer_icon_update = 1)
|
||||
flooring = newflooring
|
||||
update_icon(1)
|
||||
levelupdate()
|
||||
|
||||
//This proc will set floor_type to null and the update_icon() proc will then change the icon_state of the turf
|
||||
//This proc auto corrects the grass tiles' siding.
|
||||
/turf/simulated/floor/proc/make_plating()
|
||||
if(istype(src,/turf/simulated/floor/engine)) return
|
||||
/turf/simulated/floor/proc/make_plating(var/place_product, var/defer_icon_update)
|
||||
|
||||
if(is_grass_floor())
|
||||
for(var/direction in cardinal)
|
||||
if(istype(get_step(src,direction),/turf/simulated/floor))
|
||||
var/turf/simulated/floor/FF = get_step(src,direction)
|
||||
FF.update_icon() //so siding get updated properly
|
||||
else if(is_carpet_floor())
|
||||
spawn(5)
|
||||
if(src)
|
||||
for(var/direction in list(1,2,4,8,5,6,9,10))
|
||||
if(istype(get_step(src,direction),/turf/simulated/floor))
|
||||
var/turf/simulated/floor/FF = get_step(src,direction)
|
||||
FF.update_icon() //so siding get updated properly
|
||||
overlays.Cut()
|
||||
if(islist(decals))
|
||||
decals.Cut()
|
||||
decals = null
|
||||
|
||||
name = base_name
|
||||
desc = base_desc
|
||||
icon = base_icon
|
||||
icon_state = base_icon_state
|
||||
|
||||
if(flooring)
|
||||
if(flooring.build_type && place_product)
|
||||
new flooring.build_type(src)
|
||||
flooring = null
|
||||
|
||||
if(!floor_type) return
|
||||
icon_plating = "plating"
|
||||
set_light(0)
|
||||
floor_type = null
|
||||
intact = 0
|
||||
broken = 0
|
||||
burnt = 0
|
||||
|
||||
update_icon()
|
||||
broken = null
|
||||
burnt = null
|
||||
flooring_override = null
|
||||
levelupdate()
|
||||
|
||||
//This proc will make the turf a plasteel floor tile. The expected argument is the tile to make the turf with
|
||||
//If none is given it will make a new object. dropping or unequipping must be handled before or after calling
|
||||
//this proc.
|
||||
/turf/simulated/floor/proc/make_plasteel_floor(var/obj/item/stack/tile/steel/T = null)
|
||||
broken = 0
|
||||
burnt = 0
|
||||
intact = 1
|
||||
set_light(0)
|
||||
if(T)
|
||||
if(istype(T,/obj/item/stack/tile/steel))
|
||||
floor_type = T.type
|
||||
if (icon_regular_floor)
|
||||
icon_state = icon_regular_floor
|
||||
else
|
||||
icon_state = "floor"
|
||||
icon_regular_floor = icon_state
|
||||
update_icon()
|
||||
levelupdate()
|
||||
return
|
||||
//if you gave a valid parameter, it won't get thisf ar.
|
||||
floor_type = /obj/item/stack/tile/steel
|
||||
icon_state = "floor"
|
||||
icon_regular_floor = icon_state
|
||||
if(!defer_icon_update)
|
||||
update_icon(1)
|
||||
|
||||
update_icon()
|
||||
levelupdate()
|
||||
|
||||
//This proc will make the turf a light floor tile. The expected argument is the tile to make the turf with
|
||||
//If none is given it will make a new object. dropping or unequipping must be handled before or after calling
|
||||
//this proc.
|
||||
/turf/simulated/floor/proc/make_light_floor(var/obj/item/stack/tile/light/T = null)
|
||||
broken = 0
|
||||
burnt = 0
|
||||
intact = 1
|
||||
if(T)
|
||||
if(istype(T,/obj/item/stack/tile/light))
|
||||
floor_type = T.type
|
||||
update_icon()
|
||||
levelupdate()
|
||||
return
|
||||
//if you gave a valid parameter, it won't get thisf ar.
|
||||
floor_type = /obj/item/stack/tile/light
|
||||
|
||||
update_icon()
|
||||
levelupdate()
|
||||
|
||||
//This proc will make a turf into a grass patch. Fun eh? Insert the grass tile to be used as the argument
|
||||
//If no argument is given a new one will be made.
|
||||
/turf/simulated/floor/proc/make_grass_floor(var/obj/item/stack/tile/grass/T = null)
|
||||
broken = 0
|
||||
burnt = 0
|
||||
intact = 1
|
||||
if(T)
|
||||
if(istype(T,/obj/item/stack/tile/grass))
|
||||
floor_type = T.type
|
||||
update_icon()
|
||||
levelupdate()
|
||||
return
|
||||
//if you gave a valid parameter, it won't get thisf ar.
|
||||
floor_type = /obj/item/stack/tile/grass
|
||||
|
||||
update_icon()
|
||||
levelupdate()
|
||||
|
||||
//This proc will make a turf into a wood floor. Fun eh? Insert the wood tile to be used as the argument
|
||||
//If no argument is given a new one will be made.
|
||||
/turf/simulated/floor/proc/make_wood_floor(var/obj/item/stack/tile/wood/T = null)
|
||||
broken = 0
|
||||
burnt = 0
|
||||
intact = 1
|
||||
if(T)
|
||||
if(istype(T,/obj/item/stack/tile/wood))
|
||||
floor_type = T.type
|
||||
update_icon()
|
||||
levelupdate()
|
||||
return
|
||||
//if you gave a valid parameter, it won't get thisf ar.
|
||||
floor_type = /obj/item/stack/tile/wood
|
||||
|
||||
update_icon()
|
||||
levelupdate()
|
||||
|
||||
//This proc will make a turf into a carpet floor. Fun eh? Insert the carpet tile to be used as the argument
|
||||
//If no argument is given a new one will be made.
|
||||
/turf/simulated/floor/proc/make_carpet_floor(var/obj/item/stack/tile/carpet/T = null)
|
||||
broken = 0
|
||||
burnt = 0
|
||||
intact = 1
|
||||
if(T)
|
||||
if(istype(T,/obj/item/stack/tile/carpet))
|
||||
floor_type = T.type
|
||||
update_icon()
|
||||
levelupdate()
|
||||
return
|
||||
//if you gave a valid parameter, it won't get thisf ar.
|
||||
floor_type = /obj/item/stack/tile/carpet
|
||||
|
||||
update_icon()
|
||||
levelupdate()
|
||||
|
||||
/turf/simulated/floor/attackby(obj/item/C as obj, mob/user as mob)
|
||||
|
||||
if(!C || !user)
|
||||
return 0
|
||||
|
||||
if(istype(C,/obj/item/weapon/light/bulb)) //only for light tiles
|
||||
if(is_light_floor())
|
||||
if(get_lightfloor_state())
|
||||
user.remove_from_mob(C)
|
||||
qdel(C)
|
||||
set_lightfloor_state(0) //fixing it by bashing it with a light bulb, fun eh?
|
||||
update_icon()
|
||||
user << "<span class='notice'>You replace the light bulb.</span>"
|
||||
else
|
||||
user << "<span class='notice'>The lightbulb seems fine, no need to replace it.</span>"
|
||||
|
||||
if(istype(C, /obj/item/weapon/crowbar) && (!(is_plating())))
|
||||
if(broken || burnt)
|
||||
user << "<span class='notice'>You remove the broken plating.</span>"
|
||||
else
|
||||
if(is_wood_floor())
|
||||
user << "<span class='danger'>You forcefully pry off the planks, destroying them in the process.</span>"
|
||||
else
|
||||
var/obj/item/I = new floor_type(src)
|
||||
if(is_light_floor())
|
||||
var/obj/item/stack/tile/light/L = I
|
||||
L.on = get_lightfloor_on()
|
||||
L.state = get_lightfloor_state()
|
||||
user << "<span class='notice'>You remove the [I.name].</span>"
|
||||
|
||||
make_plating()
|
||||
playsound(src, 'sound/items/Crowbar.ogg', 80, 1)
|
||||
|
||||
return
|
||||
|
||||
if(istype(C, /obj/item/weapon/screwdriver) && is_wood_floor())
|
||||
if(broken || burnt)
|
||||
return
|
||||
else
|
||||
if(is_wood_floor())
|
||||
user << "<span class='notice'>You unscrew the planks.</span>"
|
||||
new floor_type(src)
|
||||
|
||||
make_plating()
|
||||
playsound(src, 'sound/items/Screwdriver.ogg', 80, 1)
|
||||
|
||||
return
|
||||
|
||||
if(istype(C, /obj/item/stack/rods))
|
||||
var/obj/item/stack/rods/R = C
|
||||
if (is_plating())
|
||||
if (R.get_amount() < 2)
|
||||
user << "<span class='warning'>You need more rods.</span>"
|
||||
return
|
||||
user << "<span class='notice'>Reinforcing the floor...</span>"
|
||||
if(do_after(user, 30) && is_plating())
|
||||
if (R.use(2))
|
||||
ChangeTurf(/turf/simulated/floor/engine)
|
||||
playsound(src, 'sound/items/Deconstruct.ogg', 80, 1)
|
||||
return
|
||||
else
|
||||
else
|
||||
user << "<span class='warning'>You must remove the plating first.</span>"
|
||||
return
|
||||
|
||||
if(istype(C, /obj/item/stack/tile))
|
||||
if(is_plating())
|
||||
if(!broken && !burnt)
|
||||
var/obj/item/stack/tile/T = C
|
||||
if (T.get_amount() < 1)
|
||||
return
|
||||
if(!T.build_type)
|
||||
floor_type = T.type
|
||||
else
|
||||
floor_type = T.build_type
|
||||
intact = 1
|
||||
if(istype(T,/obj/item/stack/tile/light))
|
||||
var/obj/item/stack/tile/light/L = T
|
||||
set_lightfloor_state(L.state)
|
||||
set_lightfloor_on(L.on)
|
||||
if(istype(T,/obj/item/stack/tile/grass))
|
||||
for(var/direction in cardinal)
|
||||
if(istype(get_step(src,direction),/turf/simulated/floor))
|
||||
var/turf/simulated/floor/FF = get_step(src,direction)
|
||||
FF.update_icon() //so siding gets updated properly
|
||||
else if(istype(T,/obj/item/stack/tile/carpet))
|
||||
for(var/direction in list(1,2,4,8,5,6,9,10))
|
||||
if(istype(get_step(src,direction),/turf/simulated/floor))
|
||||
var/turf/simulated/floor/FF = get_step(src,direction)
|
||||
FF.update_icon() //so siding gets updated properly
|
||||
T.use(1)
|
||||
update_icon()
|
||||
levelupdate()
|
||||
playsound(src, 'sound/weapons/Genhit.ogg', 50, 1)
|
||||
else
|
||||
user << "<span class='warning'>This section is too damaged to support a tile. Use a welder to fix the damage.</span>"
|
||||
|
||||
|
||||
if(istype(C, /obj/item/stack/cable_coil))
|
||||
if(is_plating())
|
||||
var/obj/item/stack/cable_coil/coil = C
|
||||
coil.turf_place(src, user)
|
||||
else
|
||||
user << "<span class='warning'>You must remove the plating first.</span>"
|
||||
|
||||
if(istype(C, /obj/item/weapon/shovel))
|
||||
if(is_grass_floor())
|
||||
new /obj/item/weapon/ore/glass(src)
|
||||
new /obj/item/weapon/ore/glass(src) //Make some sand if you shovel grass
|
||||
user << "<span class='notice'>You shovel the grass.</span>"
|
||||
make_plating()
|
||||
else
|
||||
user << "<span class='warning'>You cannot shovel this.</span>"
|
||||
|
||||
if(istype(C, /obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/welder = C
|
||||
if(welder.isOn() && (is_plating()))
|
||||
if(broken || burnt)
|
||||
if(welder.remove_fuel(0,user))
|
||||
user << "<span class='notice'>You fix some dents on the broken plating.</span>"
|
||||
playsound(src, 'sound/items/Welder.ogg', 80, 1)
|
||||
icon_state = "plating"
|
||||
burnt = 0
|
||||
broken = 0
|
||||
else
|
||||
user << "<span class='warning'>You need more welding fuel to complete this task.</span>"
|
||||
|
||||
#undef LIGHTFLOOR_ON_BIT
|
||||
|
||||
#undef LIGHTFLOOR_STATE_OK
|
||||
#undef LIGHTFLOOR_STATE_FLICKER
|
||||
#undef LIGHTFLOOR_STATE_BREAKING
|
||||
#undef LIGHTFLOOR_STATE_BROKEN
|
||||
#undef LIGHTFLOOR_STATE_BITS
|
||||
/turf/simulated/floor/levelupdate()
|
||||
for(var/obj/O in src)
|
||||
O.hide(O.hides_under_flooring() && src.flooring)
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
/turf/simulated/floor/ex_act(severity)
|
||||
//set src in oview(1)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
src.ChangeTurf(get_base_turf(src.z))
|
||||
if(2.0)
|
||||
switch(pick(40;1,40;2,3))
|
||||
if (1)
|
||||
if(prob(33)) new /obj/item/stack/material/steel(src)
|
||||
src.ReplaceWithLattice()
|
||||
if(2)
|
||||
src.ChangeTurf(get_base_turf(src.z))
|
||||
if(3)
|
||||
if(prob(33)) new /obj/item/stack/material/steel(src)
|
||||
if(prob(80))
|
||||
src.break_tile_to_plating()
|
||||
else
|
||||
src.break_tile()
|
||||
src.hotspot_expose(1000,CELL_VOLUME)
|
||||
if(3.0)
|
||||
if (prob(50))
|
||||
src.break_tile()
|
||||
src.hotspot_expose(1000,CELL_VOLUME)
|
||||
return
|
||||
|
||||
/turf/simulated/floor/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
|
||||
var/temp_destroy = get_damage_temperature()
|
||||
if(!burnt && prob(5))
|
||||
burn_tile(exposed_temperature)
|
||||
else if(temp_destroy && exposed_temperature >= (temp_destroy + 100) && prob(1) && !is_plating())
|
||||
make_plating() //destroy the tile, exposing plating
|
||||
burn_tile(exposed_temperature)
|
||||
return
|
||||
|
||||
//should be a little bit lower than the temperature required to destroy the material
|
||||
/turf/simulated/floor/proc/get_damage_temperature()
|
||||
return flooring ? flooring.damage_temperature : null
|
||||
|
||||
/turf/simulated/floor/adjacent_fire_act(turf/simulated/floor/adj_turf, datum/gas_mixture/adj_air, adj_temp, adj_volume)
|
||||
var/dir_to = get_dir(src, adj_turf)
|
||||
|
||||
for(var/obj/structure/window/W in src)
|
||||
if(W.dir == dir_to || W.is_fulltile()) //Same direction or diagonal (full tile)
|
||||
W.fire_act(adj_air, adj_temp, adj_volume)
|
||||
|
||||
/turf/simulated/floor/blob_act()
|
||||
return
|
||||
@@ -0,0 +1,90 @@
|
||||
/turf/simulated/floor/attackby(obj/item/C as obj, mob/user as mob)
|
||||
|
||||
if(!C || !user)
|
||||
return 0
|
||||
|
||||
if(flooring)
|
||||
if(istype(C, /obj/item/weapon/crowbar))
|
||||
if(broken || burnt)
|
||||
user << "<span class='notice'>You remove the broken [flooring.descriptor].</span>"
|
||||
make_plating()
|
||||
else if(flooring.flags & TURF_IS_FRAGILE)
|
||||
user << "<span class='danger'>You forcefully pry off the [flooring.descriptor], destroying them in the process.</span>"
|
||||
make_plating()
|
||||
else if(flooring.flags & TURF_REMOVE_CROWBAR)
|
||||
user << "<span class='notice'>You lever off the [flooring.descriptor].</span>"
|
||||
make_plating(1)
|
||||
else
|
||||
return
|
||||
playsound(src, 'sound/items/Crowbar.ogg', 80, 1)
|
||||
return
|
||||
else if(istype(C, /obj/item/weapon/screwdriver) && (flooring.flags & TURF_REMOVE_SCREWDRIVER))
|
||||
if(broken || burnt)
|
||||
return
|
||||
user << "<span class='notice'>You unscrew and remove the [flooring.descriptor].</span>"
|
||||
make_plating(1)
|
||||
playsound(src, 'sound/items/Screwdriver.ogg', 80, 1)
|
||||
return
|
||||
else if(istype(C, /obj/item/weapon/wrench) && (flooring.flags & TURF_REMOVE_WRENCH))
|
||||
user << "<span class='notice'>You unwrench and remove the [flooring.descriptor].</span>"
|
||||
make_plating(1)
|
||||
playsound(src, 'sound/items/Ratchet.ogg', 80, 1)
|
||||
return
|
||||
else if(istype(C, /obj/item/weapon/shovel) && (flooring.flags & TURF_REMOVE_SHOVEL))
|
||||
user << "<span class='notice'>You shovel off the [flooring.descriptor].</span>"
|
||||
make_plating(1)
|
||||
playsound(src, 'sound/items/Deconstruct.ogg', 80, 1)
|
||||
return
|
||||
else if(istype(C, /obj/item/stack/cable_coil))
|
||||
user << "<span class='warning'>You must remove the [flooring.descriptor] first.</span>"
|
||||
return
|
||||
else
|
||||
|
||||
if(istype(C, /obj/item/stack/cable_coil))
|
||||
if(broken || burnt)
|
||||
user << "<span class='warning'>This section is too damaged to support anything. Use a welder to fix the damage.</span>"
|
||||
return
|
||||
var/obj/item/stack/cable_coil/coil = C
|
||||
coil.turf_place(src, user)
|
||||
return
|
||||
else if(istype(C, /obj/item/stack))
|
||||
if(broken || burnt)
|
||||
user << "<span class='warning'>This section is too damaged to support anything. Use a welder to fix the damage.</span>"
|
||||
return
|
||||
var/obj/item/stack/S = C
|
||||
var/decl/flooring/use_flooring
|
||||
for(var/flooring_type in flooring_types)
|
||||
var/decl/flooring/F = flooring_types[flooring_type]
|
||||
if(!F.build_type)
|
||||
continue
|
||||
if(C.type == F.build_type)
|
||||
use_flooring = F
|
||||
break
|
||||
if(!use_flooring)
|
||||
return
|
||||
// Do we have enough?
|
||||
if(use_flooring.build_cost && S.amount < use_flooring.build_cost)
|
||||
user << "<span class='warning'>You require at least [use_flooring.build_cost] [S.name] to complete the [use_flooring.descriptor].</span>"
|
||||
return
|
||||
// Stay still and focus...
|
||||
if(use_flooring.build_time && !do_after(user, use_flooring.build_time))
|
||||
return
|
||||
if(flooring || !S || !user || !use_flooring)
|
||||
return
|
||||
if(S.use(use_flooring.build_cost))
|
||||
set_flooring(use_flooring)
|
||||
playsound(src, 'sound/items/Deconstruct.ogg', 80, 1)
|
||||
return
|
||||
// Repairs.
|
||||
else if(istype(C, /obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/welder = C
|
||||
if(welder.isOn() && (is_plating()))
|
||||
if(broken || burnt)
|
||||
if(welder.remove_fuel(0,user))
|
||||
user << "<span class='notice'>You fix some dents on the broken plating.</span>"
|
||||
playsound(src, 'sound/items/Welder.ogg', 80, 1)
|
||||
icon_state = "plating"
|
||||
burnt = null
|
||||
broken = null
|
||||
else
|
||||
user << "<span class='warning'>You need more welding fuel to complete this task.</span>"
|
||||
@@ -0,0 +1,25 @@
|
||||
/turf/simulated/floor/proc/gets_drilled()
|
||||
return
|
||||
|
||||
/turf/simulated/floor/proc/break_tile_to_plating()
|
||||
if(!is_plating())
|
||||
make_plating()
|
||||
break_tile()
|
||||
|
||||
/turf/simulated/floor/proc/break_tile()
|
||||
if(!flooring || !(flooring.flags & TURF_CAN_BREAK) || !isnull(broken))
|
||||
return
|
||||
if(flooring.has_damage_range)
|
||||
broken = rand(0,flooring.has_damage_range)
|
||||
else
|
||||
broken = 0
|
||||
update_icon()
|
||||
|
||||
/turf/simulated/floor/proc/burn_tile(var/exposed_temperature)
|
||||
if(!flooring || !(flooring.flags & TURF_CAN_BURN) || !isnull(burnt))
|
||||
return
|
||||
if(flooring.has_burn_range)
|
||||
burnt = rand(0,flooring.has_burn_range)
|
||||
else
|
||||
burnt = 0
|
||||
update_icon()
|
||||
@@ -0,0 +1,86 @@
|
||||
var/list/flooring_cache = list()
|
||||
|
||||
/turf/simulated/floor/update_icon(var/update_neighbors)
|
||||
|
||||
if(lava)
|
||||
return
|
||||
|
||||
if(flooring)
|
||||
// Set initial icon and strings.
|
||||
name = flooring.name
|
||||
desc = flooring.desc
|
||||
icon = flooring.icon
|
||||
|
||||
if(flooring_override)
|
||||
icon_state = flooring_override
|
||||
else
|
||||
icon_state = flooring.icon_base
|
||||
if(flooring.has_base_range)
|
||||
icon_state = "[icon_state][rand(0,flooring.has_base_range)]"
|
||||
flooring_override = icon_state
|
||||
|
||||
// Apply edges, corners, and inner corners.
|
||||
overlays.Cut()
|
||||
var/has_border = 0
|
||||
if(flooring.flags & TURF_HAS_EDGES)
|
||||
for(var/step_dir in cardinal)
|
||||
var/turf/simulated/floor/T = get_step(src, step_dir)
|
||||
if(!istype(T) || !T.flooring || T.flooring.name != flooring.name)
|
||||
has_border |= step_dir
|
||||
overlays |= get_flooring_overlay("[flooring.icon_base]-edge-[step_dir]", "[flooring.icon_base]_edges", step_dir)
|
||||
|
||||
// There has to be a concise numerical way to do this but I am too noob.
|
||||
if((has_border & NORTH) && (has_border & EAST))
|
||||
overlays |= get_flooring_overlay("[flooring.icon_base]-edge-[NORTHEAST]", "[flooring.icon_base]_edges", NORTHEAST)
|
||||
if((has_border & NORTH) && (has_border & WEST))
|
||||
overlays |= get_flooring_overlay("[flooring.icon_base]-edge-[NORTHWEST]", "[flooring.icon_base]_edges", NORTHWEST)
|
||||
if((has_border & SOUTH) && (has_border & EAST))
|
||||
overlays |= get_flooring_overlay("[flooring.icon_base]-edge-[SOUTHEAST]", "[flooring.icon_base]_edges", SOUTHEAST)
|
||||
if((has_border & SOUTH) && (has_border & WEST))
|
||||
overlays |= get_flooring_overlay("[flooring.icon_base]-edge-[SOUTHWEST]", "[flooring.icon_base]_edges", SOUTHWEST)
|
||||
|
||||
if(flooring.flags & TURF_HAS_CORNERS)
|
||||
// As above re: concise numerical way to do this.
|
||||
if(!(has_border & NORTH))
|
||||
if(!(has_border & EAST))
|
||||
var/turf/simulated/floor/T = get_step(src, NORTHEAST)
|
||||
if(!(istype(T) && T.flooring && T.flooring.name == flooring.name))
|
||||
overlays |= get_flooring_overlay("[flooring.icon_base]-corner-[NORTHEAST]", "[flooring.icon_base]_corners", NORTHEAST)
|
||||
if(!(has_border & WEST))
|
||||
var/turf/simulated/floor/T = get_step(src, NORTHWEST)
|
||||
if(!(istype(T) && T.flooring && T.flooring.name == flooring.name))
|
||||
overlays |= get_flooring_overlay("[flooring.icon_base]-corner-[NORTHWEST]", "[flooring.icon_base]_corners", NORTHWEST)
|
||||
if(!(has_border & SOUTH))
|
||||
if(!(has_border & EAST))
|
||||
var/turf/simulated/floor/T = get_step(src, SOUTHEAST)
|
||||
if(!(istype(T) && T.flooring && T.flooring.name == flooring.name))
|
||||
overlays |= get_flooring_overlay("[flooring.icon_base]-corner-[SOUTHEAST]", "[flooring.icon_base]_corners", SOUTHEAST)
|
||||
if(!(has_border & WEST))
|
||||
var/turf/simulated/floor/T = get_step(src, SOUTHWEST)
|
||||
if(!(istype(T) && T.flooring && T.flooring.name == flooring.name))
|
||||
overlays |= get_flooring_overlay("[flooring.icon_base]-corner-[SOUTHWEST]", "[flooring.icon_base]_corners", SOUTHWEST)
|
||||
|
||||
if(decals && decals.len)
|
||||
overlays |= decals
|
||||
|
||||
if(is_plating() && !(isnull(broken) && isnull(burnt))) //temp, todo
|
||||
icon = 'icons/turf/flooring/plating.dmi'
|
||||
icon_state = "dmg[rand(1,4)]"
|
||||
else if(flooring)
|
||||
if(!isnull(broken) && (flooring.flags & TURF_CAN_BREAK))
|
||||
overlays |= get_flooring_overlay("[flooring.icon_base]-broken-[broken]","[flooring.icon_base]_broken[broken]")
|
||||
if(!isnull(burnt) && (flooring.flags & TURF_CAN_BURN))
|
||||
overlays |= get_flooring_overlay("[flooring.icon_base]-burned-[burnt]","[flooring.icon_base]_burned[burnt]")
|
||||
|
||||
if(update_neighbors)
|
||||
for(var/turf/simulated/floor/F in range(src, 1))
|
||||
if(F == src)
|
||||
continue
|
||||
F.update_icon()
|
||||
|
||||
/turf/simulated/floor/proc/get_flooring_overlay(var/cache_key, var/icon_base, var/icon_dir = 0)
|
||||
if(!flooring_cache[cache_key])
|
||||
var/image/I = image(icon = flooring.icon, icon_state = icon_base, dir = icon_dir)
|
||||
I.layer = layer
|
||||
flooring_cache[cache_key] = I
|
||||
return flooring_cache[cache_key]
|
||||
@@ -0,0 +1,23 @@
|
||||
// This type of flooring cannot be altered short of being destroyed and rebuilt.
|
||||
// Use this to bypass the flooring system entirely ie. event areas, holodeck, etc.
|
||||
|
||||
/turf/simulated/floor/fixed
|
||||
name = "floor"
|
||||
icon = 'icons/turf/flooring/tiles.dmi'
|
||||
icon_state = "steel"
|
||||
initial_flooring = null
|
||||
|
||||
/turf/simulated/floor/fixed/attackby(var/obj/item/C, var/mob/user)
|
||||
if(istype(C, /obj/item/stack) && !istype(C, /obj/item/stack/cable_coil))
|
||||
return
|
||||
return ..()
|
||||
|
||||
/turf/simulated/floor/fixed/update_icon()
|
||||
return
|
||||
|
||||
/turf/simulated/floor/fixed/is_plating()
|
||||
return 0
|
||||
|
||||
/turf/simulated/floor/fixed/set_flooring()
|
||||
return
|
||||
|
||||
@@ -1,50 +1,3 @@
|
||||
/turf/simulated/floor/airless
|
||||
icon_state = "floor"
|
||||
name = "airless floor"
|
||||
oxygen = 0
|
||||
nitrogen = 0
|
||||
temperature = TCMB
|
||||
|
||||
New()
|
||||
..()
|
||||
name = "floor"
|
||||
|
||||
/turf/simulated/floor/airless/lava
|
||||
name = "lava"
|
||||
icon_state = "lava"
|
||||
lava = 1
|
||||
light_range = 2
|
||||
light_color = "#CC0000"
|
||||
|
||||
/turf/simulated/floor/airless/ceiling
|
||||
icon_state = "rockvault"
|
||||
|
||||
/turf/simulated/floor/light
|
||||
name = "Light floor"
|
||||
light_range = 5
|
||||
icon_state = "light_on"
|
||||
floor_type = /obj/item/stack/tile/light
|
||||
|
||||
New()
|
||||
var/n = name //just in case commands rename it in the ..() call
|
||||
..()
|
||||
spawn(4)
|
||||
if(src)
|
||||
update_icon()
|
||||
name = n
|
||||
|
||||
/turf/simulated/floor/wood
|
||||
name = "floor"
|
||||
icon_state = "wood"
|
||||
floor_type = /obj/item/stack/tile/wood
|
||||
|
||||
/turf/simulated/floor/vault
|
||||
icon_state = "rockvault"
|
||||
|
||||
New(location,type)
|
||||
..()
|
||||
icon_state = "[type]vault"
|
||||
|
||||
/turf/simulated/wall/vault
|
||||
icon_state = "rockvault"
|
||||
|
||||
@@ -52,76 +5,6 @@
|
||||
..()
|
||||
icon_state = "[type]vault"
|
||||
|
||||
/turf/simulated/floor/engine
|
||||
name = "reinforced floor"
|
||||
icon_state = "engine"
|
||||
thermal_conductivity = 0.025
|
||||
heat_capacity = 325000
|
||||
intact = 0
|
||||
|
||||
/turf/simulated/floor/engine/nitrogen
|
||||
oxygen = 0
|
||||
|
||||
/turf/simulated/floor/engine/attackby(obj/item/weapon/C as obj, mob/user as mob)
|
||||
if(!C)
|
||||
return
|
||||
if(!user)
|
||||
return
|
||||
if(istype(C, /obj/item/weapon/wrench))
|
||||
user << "<span class='notice'>Removing rods...</span>"
|
||||
playsound(src, 'sound/items/Ratchet.ogg', 80, 1)
|
||||
if(do_after(user, 30))
|
||||
PoolOrNew(/obj/item/stack/rods, list(loc, 2))
|
||||
ChangeTurf(/turf/simulated/floor)
|
||||
var/turf/simulated/floor/F = src
|
||||
F.make_plating()
|
||||
return
|
||||
|
||||
/turf/simulated/floor/engine/cult
|
||||
name = "engraved floor"
|
||||
icon_state = "cult"
|
||||
|
||||
/turf/simulated/floor/engine/cult/cultify()
|
||||
return
|
||||
|
||||
/turf/simulated/floor/engine/n20
|
||||
New()
|
||||
. = ..()
|
||||
assume_gas("sleeping_agent", 2000)
|
||||
|
||||
/turf/simulated/floor/engine/vacuum
|
||||
name = "vacuum floor"
|
||||
icon_state = "engine"
|
||||
oxygen = 0
|
||||
nitrogen = 0
|
||||
temperature = TCMB
|
||||
|
||||
/turf/simulated/floor/plating
|
||||
name = "plating"
|
||||
icon_state = "plating"
|
||||
floor_type = null
|
||||
intact = 0
|
||||
|
||||
/turf/simulated/floor/plating/airless
|
||||
icon_state = "plating"
|
||||
name = "airless plating"
|
||||
oxygen = 0
|
||||
nitrogen = 0
|
||||
temperature = TCMB
|
||||
|
||||
New()
|
||||
..()
|
||||
name = "plating"
|
||||
|
||||
/turf/simulated/floor/bluegrid
|
||||
icon = 'icons/turf/floors.dmi'
|
||||
icon_state = "bcircuit"
|
||||
|
||||
/turf/simulated/floor/greengrid
|
||||
icon = 'icons/turf/floors.dmi'
|
||||
icon_state = "gcircuit"
|
||||
|
||||
|
||||
/turf/simulated/shuttle
|
||||
name = "shuttle"
|
||||
icon = 'icons/turf/shuttle.dmi'
|
||||
@@ -145,7 +28,7 @@
|
||||
icon = 'icons/turf/floors.dmi'
|
||||
icon_state = "plating"
|
||||
|
||||
/turf/simulated/shuttle/plating/vox //Skipjack plating
|
||||
/turf/simulated/shuttle/plating/vox //Skipjack plating
|
||||
oxygen = 0
|
||||
nitrogen = MOLES_N2STANDARD + MOLES_O2STANDARD
|
||||
|
||||
@@ -153,87 +36,7 @@
|
||||
name = "Brig floor" // Also added it into the 2x3 brig area of the shuttle.
|
||||
icon_state = "floor4"
|
||||
|
||||
/turf/simulated/shuttle/floor4/vox //skipjack floors
|
||||
/turf/simulated/shuttle/floor4/vox //skipjack floors
|
||||
name = "skipjack floor"
|
||||
oxygen = 0
|
||||
nitrogen = MOLES_N2STANDARD + MOLES_O2STANDARD
|
||||
|
||||
/turf/simulated/floor/snow
|
||||
name = "Snow"
|
||||
icon = 'icons/turf/snow.dmi'
|
||||
icon_state = "snow"
|
||||
|
||||
/turf/simulated/floor/beach
|
||||
name = "Beach"
|
||||
icon = 'icons/misc/beach.dmi'
|
||||
|
||||
/turf/simulated/floor/beach/sand
|
||||
name = "Sand"
|
||||
icon_state = "sand"
|
||||
|
||||
/turf/simulated/floor/beach/sand/desert
|
||||
icon_state = "desert"
|
||||
|
||||
/turf/simulated/floor/beach/coastline
|
||||
name = "Coastline"
|
||||
icon = 'icons/misc/beach2.dmi'
|
||||
icon_state = "sandwater"
|
||||
|
||||
/turf/simulated/floor/beach/water
|
||||
name = "Water"
|
||||
icon_state = "water"
|
||||
|
||||
/turf/simulated/floor/beach/water/ocean
|
||||
icon_state = "seadeep"
|
||||
|
||||
/turf/simulated/floor/beach/water/New()
|
||||
..()
|
||||
overlays += image("icon"='icons/misc/beach.dmi',"icon_state"="water5","layer"=MOB_LAYER+0.1)
|
||||
|
||||
/turf/simulated/floor/grass
|
||||
name = "Grass patch"
|
||||
icon_state = "grass1"
|
||||
floor_type = /obj/item/stack/tile/grass
|
||||
|
||||
New()
|
||||
icon_state = "grass[pick("1","2","3","4")]"
|
||||
..()
|
||||
spawn(4)
|
||||
if(src)
|
||||
update_icon()
|
||||
for(var/direction in cardinal)
|
||||
if(istype(get_step(src,direction),/turf/simulated/floor))
|
||||
var/turf/simulated/floor/FF = get_step(src,direction)
|
||||
FF.update_icon() //so siding get updated properly
|
||||
|
||||
/turf/simulated/floor/carpet
|
||||
name = "Carpet"
|
||||
icon_state = "carpet"
|
||||
floor_type = /obj/item/stack/tile/carpet
|
||||
|
||||
New()
|
||||
if(!icon_state)
|
||||
icon_state = "carpet"
|
||||
..()
|
||||
spawn(4)
|
||||
if(src)
|
||||
update_icon()
|
||||
for(var/direction in list(1,2,4,8,5,6,9,10))
|
||||
if(istype(get_step(src,direction),/turf/simulated/floor))
|
||||
var/turf/simulated/floor/FF = get_step(src,direction)
|
||||
FF.update_icon() //so siding get updated properly
|
||||
|
||||
|
||||
|
||||
/turf/simulated/floor/plating/ironsand/New()
|
||||
..()
|
||||
name = "Iron Sand"
|
||||
icon_state = "ironsand[rand(1,15)]"
|
||||
|
||||
/turf/simulated/floor/plating/snow
|
||||
name = "snow"
|
||||
icon = 'icons/turf/snow.dmi'
|
||||
icon_state = "snow"
|
||||
|
||||
/turf/simulated/floor/plating/snow/ex_act(severity)
|
||||
return
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
reinf_material = newrmaterial
|
||||
update_material()
|
||||
|
||||
/turf/simulated/wall/proc/update_icon()
|
||||
/turf/simulated/wall/update_icon()
|
||||
if(!material)
|
||||
return
|
||||
|
||||
|
||||
@@ -21,6 +21,11 @@
|
||||
|
||||
var/list/wall_connections = list("0", "0", "0", "0")
|
||||
|
||||
// Walls always hide the stuff below them.
|
||||
/turf/simulated/wall/levelupdate()
|
||||
for(var/obj/O in src)
|
||||
O.hide(1)
|
||||
|
||||
/turf/simulated/wall/New(var/newloc, var/materialtype, var/rmaterialtype)
|
||||
..(newloc)
|
||||
icon_state = "blank"
|
||||
|
||||
@@ -14,6 +14,14 @@
|
||||
update_starlight()
|
||||
..()
|
||||
|
||||
/turf/space/is_space()
|
||||
return 1
|
||||
|
||||
// override for space turfs, since they should never hide anything
|
||||
/turf/space/levelupdate()
|
||||
for(var/obj/O in src)
|
||||
O.hide(0)
|
||||
|
||||
/turf/space/proc/update_starlight()
|
||||
if(!config.starlight)
|
||||
return
|
||||
@@ -35,16 +43,16 @@
|
||||
ReplaceWithLattice()
|
||||
return
|
||||
|
||||
if (istype(C, /obj/item/stack/tile/steel))
|
||||
if (istype(C, /obj/item/stack/tile/floor))
|
||||
var/obj/structure/lattice/L = locate(/obj/structure/lattice, src)
|
||||
if(L)
|
||||
var/obj/item/stack/tile/steel/S = C
|
||||
var/obj/item/stack/tile/floor/S = C
|
||||
if (S.get_amount() < 1)
|
||||
return
|
||||
qdel(L)
|
||||
playsound(src, 'sound/weapons/Genhit.ogg', 50, 1)
|
||||
S.build(src)
|
||||
S.use(1)
|
||||
ChangeTurf(/turf/simulated/floor/airless)
|
||||
return
|
||||
else
|
||||
user << "<span class='warning'>The plating is going to need some support.</span>"
|
||||
|
||||
+32
-171
@@ -1,11 +1,9 @@
|
||||
/turf
|
||||
icon = 'icons/turf/floors.dmi'
|
||||
level = 1.0
|
||||
level = 1
|
||||
var/holy = 0
|
||||
|
||||
//for floors, use is_plating(), is_steel_floor() and is_light_floor()
|
||||
var/intact = 1
|
||||
|
||||
//Properties for open tiles (/floor)
|
||||
// Initial air contents (in moles)
|
||||
var/oxygen = 0
|
||||
var/carbon_dioxide = 0
|
||||
var/nitrogen = 0
|
||||
@@ -16,20 +14,16 @@
|
||||
var/heat_capacity = 1
|
||||
|
||||
//Properties for both
|
||||
var/temperature = T20C
|
||||
var/temperature = T20C // Initial turf temperature.
|
||||
var/blocks_air = 0 // Does this turf contain air/let air through?
|
||||
|
||||
var/blocks_air = 0
|
||||
// General properties.
|
||||
var/icon_old = null
|
||||
var/pathweight = 1
|
||||
var/pathweight = 1 // How much does it cost to pathfind over this turf?
|
||||
var/blessed = 0 // Has the turf been blessed?
|
||||
var/dynamic_lighting = 1 // Does the turf use dynamic lighting?
|
||||
|
||||
// Flick animation
|
||||
var/atom/movable/overlay/c_animation = null
|
||||
|
||||
// holy water
|
||||
var/holy = 0
|
||||
|
||||
var/dynamic_lighting = 1
|
||||
luminosity = 1
|
||||
var/list/decals
|
||||
|
||||
/turf/New()
|
||||
..()
|
||||
@@ -39,6 +33,9 @@
|
||||
return
|
||||
turfs |= src
|
||||
|
||||
/turf/proc/update_icon()
|
||||
return
|
||||
|
||||
/turf/Destroy()
|
||||
turfs -= src
|
||||
..()
|
||||
@@ -46,6 +43,12 @@
|
||||
/turf/ex_act(severity)
|
||||
return 0
|
||||
|
||||
/turf/proc/is_space()
|
||||
return 0
|
||||
|
||||
/turf/proc/is_intact()
|
||||
return 0
|
||||
|
||||
/turf/attack_hand(mob/user)
|
||||
if(!(user.canmove) || user.restrained() || !(user.pulling))
|
||||
return 0
|
||||
@@ -70,7 +73,6 @@
|
||||
if (!mover || !isturf(mover.loc))
|
||||
return 1
|
||||
|
||||
|
||||
//First, check objects to block exit that are not on the border
|
||||
for(var/obj/obstacle in mover.loc)
|
||||
if(!(obstacle.flags & ON_BORDER) && (mover != obstacle) && (forget != obstacle))
|
||||
@@ -105,48 +107,38 @@
|
||||
return 0
|
||||
return 1 //Nothing found to block so return success!
|
||||
|
||||
|
||||
var/const/enterloopsanity = 100
|
||||
/turf/Entered(atom/atom as mob|obj)
|
||||
|
||||
if(movement_disabled)
|
||||
usr << "<span class='warning'>Movement is admin-disabled.</span>" //This is to identify lag problems
|
||||
return
|
||||
..()
|
||||
//vvvvv Infared beam stuff vvvvv
|
||||
|
||||
if ((atom && atom.density && !( istype(atom, /obj/effect/beam) )))
|
||||
for(var/obj/effect/beam/i_beam/I in src)
|
||||
spawn( 0 )
|
||||
if (I)
|
||||
I.hit()
|
||||
break
|
||||
|
||||
//^^^^^ Infared beam stuff ^^^^^
|
||||
|
||||
if(!istype(atom, /atom/movable))
|
||||
return
|
||||
|
||||
var/atom/movable/A = atom
|
||||
|
||||
var/loopsanity = 100
|
||||
if(ismob(A))
|
||||
var/mob/M = A
|
||||
if(!M.lastarea)
|
||||
M.lastarea = get_area(M.loc)
|
||||
if(M.lastarea.has_gravity == 0)
|
||||
inertial_drift(M)
|
||||
|
||||
else if(!istype(src, /turf/space))
|
||||
else if(is_space())
|
||||
M.inertia_dir = 0
|
||||
M.make_floating(0)
|
||||
..()
|
||||
var/objects = 0
|
||||
for(var/atom/O as mob|obj|turf|area in range(1))
|
||||
if(objects > loopsanity) break
|
||||
objects++
|
||||
spawn( 0 )
|
||||
if ((O && A))
|
||||
O.HasProximity(A, 1)
|
||||
return
|
||||
if(A && (A.flags & PROXMOVE))
|
||||
for(var/atom/thing as mob|obj|turf|area in range(1))
|
||||
if(objects > enterloopsanity) break
|
||||
objects++
|
||||
spawn(0)
|
||||
A.HasProximity(thing, 1)
|
||||
if ((thing && A) && (thing.flags & PROXMOVE))
|
||||
thing.HasProximity(A, 1)
|
||||
return
|
||||
|
||||
/turf/proc/adjacent_fire_act(turf/simulated/floor/source, temperature, volume)
|
||||
@@ -154,20 +146,6 @@
|
||||
|
||||
/turf/proc/is_plating()
|
||||
return 0
|
||||
/turf/proc/is_asteroid_floor()
|
||||
return 0
|
||||
/turf/proc/is_steel_floor()
|
||||
return 0
|
||||
/turf/proc/is_light_floor()
|
||||
return 0
|
||||
/turf/proc/is_grass_floor()
|
||||
return 0
|
||||
/turf/proc/is_wood_floor()
|
||||
return 0
|
||||
/turf/proc/is_carpet_floor()
|
||||
return 0
|
||||
/turf/proc/return_siding_icon_state() //used for grass floors, which have siding.
|
||||
return 0
|
||||
|
||||
/turf/proc/inertial_drift(atom/movable/A as mob|obj)
|
||||
if(!(A.last_move)) return
|
||||
@@ -187,125 +165,7 @@
|
||||
|
||||
/turf/proc/levelupdate()
|
||||
for(var/obj/O in src)
|
||||
if(O.level == 1)
|
||||
O.hide(src.intact)
|
||||
|
||||
// override for space turfs, since they should never hide anything
|
||||
/turf/space/levelupdate()
|
||||
for(var/obj/O in src)
|
||||
if(O.level == 1)
|
||||
O.hide(0)
|
||||
|
||||
// Removes all signs of lattice on the pos of the turf -Donkieyo
|
||||
/turf/proc/RemoveLattice()
|
||||
var/obj/structure/lattice/L = locate(/obj/structure/lattice, src)
|
||||
if(L)
|
||||
qdel(L)
|
||||
|
||||
//Creates a new turf
|
||||
/turf/proc/ChangeTurf(var/turf/N, var/tell_universe=1, var/force_lighting_update = 0)
|
||||
if (!N)
|
||||
return
|
||||
|
||||
///// Z-Level Stuff ///// This makes sure that turfs are not changed to space when one side is part of a zone
|
||||
if(N == /turf/space)
|
||||
var/turf/controller = locate(1, 1, src.z)
|
||||
for(var/obj/effect/landmark/zcontroller/c in controller)
|
||||
if(c.down)
|
||||
var/turf/below = locate(src.x, src.y, c.down_target)
|
||||
if((air_master.has_valid_zone(below) || air_master.has_valid_zone(src)) && !istype(below, /turf/space)) // dont make open space into space, its pointless and makes people drop out of the station
|
||||
var/turf/W = src.ChangeTurf(/turf/simulated/floor/open)
|
||||
var/list/temp = list()
|
||||
temp += W
|
||||
c.add(temp,3,1) // report the new open space to the zcontroller
|
||||
return W
|
||||
///// Z-Level Stuff
|
||||
|
||||
var/obj/fire/old_fire = fire
|
||||
var/old_opacity = opacity
|
||||
var/old_dynamic_lighting = dynamic_lighting
|
||||
var/list/old_affecting_lights = affecting_lights
|
||||
var/old_lighting_overlay = lighting_overlay
|
||||
|
||||
//world << "Replacing [src.type] with [N]"
|
||||
|
||||
if(connections) connections.erase_all()
|
||||
|
||||
if(istype(src,/turf/simulated))
|
||||
//Yeah, we're just going to rebuild the whole thing.
|
||||
//Despite this being called a bunch during explosions,
|
||||
//the zone will only really do heavy lifting once.
|
||||
var/turf/simulated/S = src
|
||||
if(S.zone) S.zone.rebuild()
|
||||
|
||||
if(ispath(N, /turf/simulated/floor))
|
||||
var/turf/simulated/W = new N( locate(src.x, src.y, src.z) )
|
||||
if(old_fire)
|
||||
fire = old_fire
|
||||
|
||||
if (istype(W,/turf/simulated/floor))
|
||||
W.RemoveLattice()
|
||||
|
||||
if(tell_universe)
|
||||
universe.OnTurfChange(W)
|
||||
|
||||
if(air_master)
|
||||
air_master.mark_for_update(src) //handle the addition of the new turf.
|
||||
|
||||
for(var/turf/space/S in range(W,1))
|
||||
S.update_starlight()
|
||||
|
||||
W.levelupdate()
|
||||
. = W
|
||||
|
||||
else
|
||||
|
||||
var/turf/W = new N( locate(src.x, src.y, src.z) )
|
||||
|
||||
if(old_fire)
|
||||
old_fire.RemoveFire()
|
||||
|
||||
if(tell_universe)
|
||||
universe.OnTurfChange(W)
|
||||
|
||||
if(air_master)
|
||||
air_master.mark_for_update(src)
|
||||
|
||||
for(var/turf/space/S in range(W,1))
|
||||
S.update_starlight()
|
||||
|
||||
W.levelupdate()
|
||||
. = W
|
||||
|
||||
lighting_overlay = old_lighting_overlay
|
||||
affecting_lights = old_affecting_lights
|
||||
if((old_opacity != opacity) || (dynamic_lighting != old_dynamic_lighting) || force_lighting_update)
|
||||
reconsider_lights()
|
||||
if(dynamic_lighting != old_dynamic_lighting)
|
||||
if(dynamic_lighting)
|
||||
lighting_build_overlays()
|
||||
else
|
||||
lighting_clear_overlays()
|
||||
|
||||
/turf/proc/ReplaceWithLattice()
|
||||
src.ChangeTurf(get_base_turf(src.z))
|
||||
spawn()
|
||||
new /obj/structure/lattice( locate(src.x, src.y, src.z) )
|
||||
|
||||
/turf/proc/kill_creatures(mob/U = null)//Will kill people/creatures and damage mechs./N
|
||||
//Useful to batch-add creatures to the list.
|
||||
for(var/mob/living/M in src)
|
||||
if(M==U) continue//Will not harm U. Since null != M, can be excluded to kill everyone.
|
||||
spawn(0)
|
||||
M.gib()
|
||||
for(var/obj/mecha/M in src)//Mecha are not gibbed but are damaged.
|
||||
spawn(0)
|
||||
M.take_damage(100, "brute")
|
||||
|
||||
/turf/proc/Bless()
|
||||
if(flags & NOJAUNT)
|
||||
return
|
||||
flags |= NOJAUNT
|
||||
O.hide(O.hides_under_flooring() && !is_plating())
|
||||
|
||||
/turf/proc/AdjacentTurfs()
|
||||
var/L[] = new()
|
||||
@@ -314,6 +174,7 @@
|
||||
if(!LinkBlocked(src, t) && !TurfBlockedNonWindow(t))
|
||||
L.Add(t)
|
||||
return L
|
||||
|
||||
/turf/proc/Distance(turf/t)
|
||||
if(get_dist(src,t) == 1)
|
||||
var/cost = (src.x - t.x) * (src.x - t.x) + (src.y - t.y) * (src.y - t.y)
|
||||
|
||||
@@ -0,0 +1,95 @@
|
||||
/turf/proc/ReplaceWithLattice()
|
||||
src.ChangeTurf(get_base_turf(src.z))
|
||||
spawn()
|
||||
new /obj/structure/lattice( locate(src.x, src.y, src.z) )
|
||||
|
||||
// Removes all signs of lattice on the pos of the turf -Donkieyo
|
||||
/turf/proc/RemoveLattice()
|
||||
var/obj/structure/lattice/L = locate(/obj/structure/lattice, src)
|
||||
if(L)
|
||||
qdel(L)
|
||||
|
||||
//Creates a new turf
|
||||
/turf/proc/ChangeTurf(var/turf/N, var/tell_universe=1, var/force_lighting_update = 0)
|
||||
if (!N)
|
||||
return
|
||||
|
||||
///// Z-Level Stuff ///// This makes sure that turfs are not changed to space when one side is part of a zone
|
||||
if(N == /turf/space)
|
||||
var/turf/controller = locate(1, 1, src.z)
|
||||
for(var/obj/effect/landmark/zcontroller/c in controller)
|
||||
if(c.down)
|
||||
var/turf/below = locate(src.x, src.y, c.down_target)
|
||||
if((air_master.has_valid_zone(below) || air_master.has_valid_zone(src)) && !istype(below, /turf/space)) // dont make open space into space, its pointless and makes people drop out of the station
|
||||
var/turf/W = src.ChangeTurf(/turf/simulated/floor/open)
|
||||
var/list/temp = list()
|
||||
temp += W
|
||||
c.add(temp,3,1) // report the new open space to the zcontroller
|
||||
return W
|
||||
///// Z-Level Stuff
|
||||
|
||||
var/obj/fire/old_fire = fire
|
||||
var/old_opacity = opacity
|
||||
var/old_dynamic_lighting = dynamic_lighting
|
||||
var/list/old_affecting_lights = affecting_lights
|
||||
var/old_lighting_overlay = lighting_overlay
|
||||
|
||||
//world << "Replacing [src.type] with [N]"
|
||||
|
||||
if(connections) connections.erase_all()
|
||||
|
||||
if(istype(src,/turf/simulated))
|
||||
//Yeah, we're just going to rebuild the whole thing.
|
||||
//Despite this being called a bunch during explosions,
|
||||
//the zone will only really do heavy lifting once.
|
||||
var/turf/simulated/S = src
|
||||
if(S.zone) S.zone.rebuild()
|
||||
|
||||
if(ispath(N, /turf/simulated/floor))
|
||||
var/turf/simulated/floor/W = new N( locate(src.x, src.y, src.z) )
|
||||
if(old_fire)
|
||||
fire = old_fire
|
||||
|
||||
if (istype(W))
|
||||
W.RemoveLattice()
|
||||
|
||||
if(tell_universe)
|
||||
universe.OnTurfChange(W)
|
||||
|
||||
if(air_master)
|
||||
air_master.mark_for_update(src) //handle the addition of the new turf.
|
||||
|
||||
for(var/turf/space/S in range(W,1))
|
||||
S.update_starlight()
|
||||
|
||||
W.levelupdate()
|
||||
. = W
|
||||
|
||||
else
|
||||
|
||||
var/turf/W = new N( locate(src.x, src.y, src.z) )
|
||||
|
||||
if(old_fire)
|
||||
old_fire.RemoveFire()
|
||||
|
||||
if(tell_universe)
|
||||
universe.OnTurfChange(W)
|
||||
|
||||
if(air_master)
|
||||
air_master.mark_for_update(src)
|
||||
|
||||
for(var/turf/space/S in range(W,1))
|
||||
S.update_starlight()
|
||||
|
||||
W.levelupdate()
|
||||
. = W
|
||||
|
||||
lighting_overlay = old_lighting_overlay
|
||||
affecting_lights = old_affecting_lights
|
||||
if((old_opacity != opacity) || (dynamic_lighting != old_dynamic_lighting) || force_lighting_update)
|
||||
reconsider_lights()
|
||||
if(dynamic_lighting != old_dynamic_lighting)
|
||||
if(dynamic_lighting)
|
||||
lighting_build_overlays()
|
||||
else
|
||||
lighting_clear_overlays()
|
||||
@@ -1,26 +1,4 @@
|
||||
/turf/proc/turf_animation(var/anim_icon,var/anim_state,var/anim_x=0, var/anim_y=0, var/anim_layer=MOB_LAYER+1, var/anim_sound=null, var/anim_color=null)
|
||||
if(!c_animation)//spamming turf animations can have unintended effects, such as the overlays never disapearing. hence this check.
|
||||
if(anim_sound)
|
||||
playsound(src, anim_sound, 50, 1)
|
||||
c_animation = PoolOrNew(/atom/movable/overlay, src)
|
||||
c_animation.name = "turf_animation"
|
||||
c_animation.density = 0
|
||||
c_animation.anchored = 1
|
||||
c_animation.icon = anim_icon
|
||||
c_animation.icon_state = anim_state
|
||||
c_animation.layer = anim_layer
|
||||
c_animation.master = src
|
||||
c_animation.pixel_x = anim_x
|
||||
c_animation.pixel_y = anim_y
|
||||
if(anim_color)
|
||||
c_animation.color = anim_color
|
||||
flick("turf_animation",c_animation)
|
||||
spawn(10)
|
||||
if(c_animation)
|
||||
qdel(c_animation)
|
||||
c_animation = null
|
||||
|
||||
proc/anim(turf/location as turf,target as mob|obj,a_icon,a_icon_state as text,flick_anim as text,sleeptime = 0,direction as num)
|
||||
/proc/anim(turf/location as turf,target as mob|obj,a_icon,a_icon_state as text,flick_anim as text,sleeptime = 0,direction as num)
|
||||
//This proc throws up either an icon or an animation for a specified amount of time.
|
||||
//The variables should be apparent enough.
|
||||
if(!location && target)
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
/turf/unsimulated
|
||||
intact = 1
|
||||
name = "command"
|
||||
oxygen = MOLES_O2STANDARD
|
||||
nitrogen = MOLES_N2STANDARD
|
||||
@@ -69,6 +69,7 @@ var/list/blobstart = list()
|
||||
var/list/ninjastart = list()
|
||||
|
||||
var/list/cardinal = list(NORTH, SOUTH, EAST, WEST)
|
||||
var/list/cornerdirs = list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST)
|
||||
var/list/alldirs = list(NORTH, SOUTH, EAST, WEST, NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST)
|
||||
var/list/reverse_dir = list( // reverse_dir[dir] = reverse of dir
|
||||
2, 1, 3, 8, 10, 9, 11, 4, 6, 5, 7, 12, 14, 13, 15, 32, 34, 33, 35, 40, 42,
|
||||
|
||||
@@ -659,13 +659,13 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/grenade/chem_grenade/cleaner(M), slot_r_store)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/grenade/chem_grenade/cleaner(M), slot_l_store)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/steel(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/steel(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/steel(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/steel(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/steel(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/steel(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/steel(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/floor(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/floor(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/floor(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/floor(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/floor(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/floor(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/floor(M), slot_in_backpack)
|
||||
|
||||
if ("pirate")
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/pirate(M), slot_w_uniform)
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
w_class = 3.0
|
||||
throw_speed = 2
|
||||
throw_range = 4
|
||||
flags = CONDUCT //Copied this from old code, so this may or may not be necessary
|
||||
flags = CONDUCT | PROXMOVE
|
||||
var/status = 0 //0 - not readied //1 - bomb finished with welder
|
||||
var/obj/item/device/assembly_holder/bombassembly = null //The first part of the bomb is an assembly holder, holding an igniter+some device
|
||||
var/obj/item/weapon/tank/bombtank = null //the second part of the bomb is a phoron tank
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
icon = 'icons/obj/assemblies/new_assemblies.dmi'
|
||||
icon_state = "holder"
|
||||
item_state = "assembly"
|
||||
flags = CONDUCT
|
||||
flags = CONDUCT | PROXMOVE
|
||||
throwforce = 5
|
||||
w_class = 2.0
|
||||
throw_speed = 3
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
name = "infrared emitter"
|
||||
desc = "Emits a visible or invisible beam and is triggered when the beam is interrupted."
|
||||
icon_state = "infrared"
|
||||
origin_tech = list(TECH_MAGNET = 2)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 1000, "glass" = 500, "waste" = 100)
|
||||
origin_tech = list(TECH_MAGNET = 2)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 1000, "glass" = 500, "waste" = 100)
|
||||
|
||||
wires = WIRE_PULSE
|
||||
|
||||
@@ -171,9 +171,7 @@
|
||||
|
||||
|
||||
/obj/effect/beam/i_beam/proc/hit()
|
||||
//world << "beam \ref[src]: hit"
|
||||
if(master)
|
||||
//world << "beam hit \ref[src]: calling master \ref[master].hit"
|
||||
master.trigger_beam()
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
name = "proximity sensor"
|
||||
desc = "Used for scanning and alerting when someone enters a certain proximity."
|
||||
icon_state = "prox"
|
||||
origin_tech = list(TECH_MAGNET = 1)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 800, "glass" = 200, "waste" = 50)
|
||||
|
||||
origin_tech = list(TECH_MAGNET = 1)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 800, "glass" = 200, "waste" = 50)
|
||||
flags = PROXMOVE
|
||||
wires = WIRE_PULSE
|
||||
|
||||
secured = 0
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
icon_state = "meson"
|
||||
item_state = "glasses"
|
||||
action_button_name = "Toggle Goggles"
|
||||
origin_tech = list(TECH_MAGNET = 2, TECH_ENGINERING = 2)
|
||||
origin_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2)
|
||||
toggleable = 1
|
||||
vision_flags = SEE_TURFS
|
||||
|
||||
@@ -95,7 +95,7 @@
|
||||
desc = "Very confusing glasses."
|
||||
icon_state = "material"
|
||||
item_state = "glasses"
|
||||
origin_tech = list(TECH_MAGNET = 3, TECH_ENGINERING = 3)
|
||||
origin_tech = list(TECH_MAGNET = 3, TECH_ENGINEERING = 3)
|
||||
toggleable = 1
|
||||
vision_flags = SEE_OBJS
|
||||
|
||||
|
||||
@@ -3,46 +3,112 @@
|
||||
// Holographic tables are in code/modules/tables/presets.dm
|
||||
// Holographic racks are in code/modules/tables/rack.dm
|
||||
|
||||
/turf/simulated/floor/holofloor/
|
||||
/turf/simulated/floor/holofloor
|
||||
thermal_conductivity = 0
|
||||
|
||||
/turf/simulated/floor/holofloor/grass
|
||||
name = "Lush Grass"
|
||||
icon_state = "grass1"
|
||||
floor_type = /obj/item/stack/tile/grass
|
||||
/turf/simulated/floor/holofloor/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
return
|
||||
// HOLOFLOOR DOES NOT GIVE A FUCK
|
||||
|
||||
New()
|
||||
icon_state = "grass[pick("1","2","3","4")]"
|
||||
..()
|
||||
spawn(4)
|
||||
update_icon()
|
||||
for(var/direction in cardinal)
|
||||
if(istype(get_step(src,direction),/turf/simulated/floor))
|
||||
var/turf/simulated/floor/FF = get_step(src,direction)
|
||||
FF.update_icon() //so siding get updated properly
|
||||
/turf/simulated/floor/holofloor/set_flooring()
|
||||
return
|
||||
|
||||
/turf/simulated/floor/holofloor/carpet
|
||||
name = "carpet"
|
||||
icon = 'icons/turf/flooring/carpet.dmi'
|
||||
icon_state = "carpet"
|
||||
initial_flooring = /decl/flooring/carpet
|
||||
|
||||
/turf/simulated/floor/holofloor/tiled
|
||||
name = "floor"
|
||||
icon = 'icons/turf/flooring/tiles.dmi'
|
||||
icon_state = "steel"
|
||||
initial_flooring = /decl/flooring/tiling
|
||||
|
||||
/turf/simulated/floor/holofloor/tiled/dark
|
||||
name = "dark floor"
|
||||
icon_state = "dark"
|
||||
initial_flooring = /decl/flooring/tiling/dark
|
||||
|
||||
/turf/simulated/floor/holofloor/lino
|
||||
name = "lino"
|
||||
icon = 'icons/turf/flooring/linoleum.dmi'
|
||||
icon_state = "lino"
|
||||
initial_flooring = /decl/flooring/linoleum
|
||||
|
||||
/turf/simulated/floor/holofloor/wood
|
||||
name = "wooden floor"
|
||||
icon = 'icons/turf/flooring/wood.dmi'
|
||||
icon_state = "wood"
|
||||
initial_flooring = /decl/flooring/wood
|
||||
|
||||
/turf/simulated/floor/holofloor/grass
|
||||
name = "lush grass"
|
||||
icon = 'icons/turf/flooring/grass.dmi'
|
||||
icon_state = "grass0"
|
||||
initial_flooring = /decl/flooring/grass
|
||||
|
||||
/turf/simulated/floor/holofloor/snow
|
||||
name = "snow"
|
||||
base_name = "snow"
|
||||
icon = 'icons/turf/floors.dmi'
|
||||
base_icon = 'icons/turf/floors.dmi'
|
||||
icon_state = "snow"
|
||||
base_icon_state = "snow"
|
||||
|
||||
/turf/simulated/floor/holofloor/space
|
||||
icon = 'icons/turf/space.dmi'
|
||||
name = "\proper space"
|
||||
icon_state = "0"
|
||||
|
||||
/turf/simulated/floor/holofloor/reinforced
|
||||
icon = 'icons/turf/flooring/tiles.dmi'
|
||||
initial_flooring = /decl/flooring/reinforced
|
||||
name = "reinforced holofloor"
|
||||
icon_state = "reinforced"
|
||||
|
||||
/turf/simulated/floor/holofloor/space/New()
|
||||
icon_state = "[((x + y) ^ ~(x * y) + z) % 25]"
|
||||
|
||||
/turf/simulated/floor/holofloor/beach
|
||||
desc = "Uncomfortably gritty for a hologram."
|
||||
base_desc = "Uncomfortably gritty for a hologram."
|
||||
icon = 'icons/misc/beach.dmi'
|
||||
base_icon = 'icons/misc/beach.dmi'
|
||||
initial_flooring = null
|
||||
|
||||
/turf/simulated/floor/holofloor/beach/sand
|
||||
name = "sand"
|
||||
icon_state = "desert"
|
||||
base_icon_state = "desert"
|
||||
|
||||
/turf/simulated/floor/holofloor/beach/coastline
|
||||
name = "coastline"
|
||||
icon = 'icons/misc/beach2.dmi'
|
||||
icon_state = "sandwater"
|
||||
base_icon_state = "sandwater"
|
||||
|
||||
/turf/simulated/floor/holofloor/beach/water
|
||||
name = "water"
|
||||
icon_state = "seashallow"
|
||||
base_icon_state = "seashallow"
|
||||
|
||||
/turf/simulated/floor/holofloor/desert
|
||||
name = "desert sand"
|
||||
base_name = "desert sand"
|
||||
desc = "Uncomfortably gritty for a hologram."
|
||||
base_desc = "Uncomfortably gritty for a hologram."
|
||||
icon_state = "asteroid"
|
||||
base_icon_state = "asteroid"
|
||||
icon = 'icons/turf/flooring/asteroid.dmi'
|
||||
base_icon = 'icons/turf/flooring/asteroid.dmi'
|
||||
initial_flooring = null
|
||||
|
||||
/turf/simulated/floor/holofloor/desert/New()
|
||||
..()
|
||||
if(prob(10))
|
||||
overlays += "asteroid[rand(0,9)]"
|
||||
|
||||
/turf/simulated/floor/holofloor/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
return
|
||||
// HOLOFLOOR DOES NOT GIVE A FUCK
|
||||
|
||||
/obj/structure/holostool
|
||||
name = "stool"
|
||||
desc = "Apply butt."
|
||||
@@ -51,7 +117,6 @@
|
||||
anchored = 1.0
|
||||
pressure_resistance = 15
|
||||
|
||||
|
||||
/obj/item/clothing/gloves/boxing/hologlove
|
||||
name = "boxing gloves"
|
||||
desc = "Because you really needed another excuse to punch your crewmates."
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
recipes += new/datum/stack_recipe("closet", /obj/structure/closet, 2, time = 15, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("canister", /obj/machinery/portable_atmospherics/canister, 10, time = 15, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("cannon frame", /obj/item/weapon/cannonframe, 10, time = 15, one_per_turf = 0, on_floor = 0)
|
||||
recipes += new/datum/stack_recipe("floor tile", /obj/item/stack/tile/steel, 1, 4, 20)
|
||||
recipes += new/datum/stack_recipe("regular floor tile", /obj/item/stack/tile/floor, 1, 4, 20)
|
||||
recipes += new/datum/stack_recipe("metal rod", /obj/item/stack/rods, 1, 2, 60)
|
||||
recipes += new/datum/stack_recipe("computer frame", /obj/structure/computerframe, 5, time = 25, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("wall girders", /obj/structure/girder, 2, time = 50, one_per_turf = 1, on_floor = 1)
|
||||
@@ -83,6 +83,7 @@
|
||||
recipes += new/datum/stack_recipe("AI core", /obj/structure/AIcore, 4, time = 50, one_per_turf = 1)
|
||||
recipes += new/datum/stack_recipe("Metal crate", /obj/structure/closet/crate, 10, time = 50, one_per_turf = 1)
|
||||
recipes += new/datum/stack_recipe("knife grip", /obj/item/weapon/material/butterflyhandle, 4, time = 20, one_per_turf = 0, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("dark floor tile", /obj/item/stack/tile/floor_dark, 1, 4, 20)
|
||||
|
||||
/material/sandstone/generate_recipes()
|
||||
..()
|
||||
@@ -96,6 +97,8 @@
|
||||
recipes += new/datum/stack_recipe("reagent dispenser cartridge (large)", /obj/item/weapon/reagent_containers/chem_disp_cartridge, 5, on_floor=0) // 500u
|
||||
recipes += new/datum/stack_recipe("reagent dispenser cartridge (med)", /obj/item/weapon/reagent_containers/chem_disp_cartridge/medium, 3, on_floor=0) // 250u
|
||||
recipes += new/datum/stack_recipe("reagent dispenser cartridge (small)", /obj/item/weapon/reagent_containers/chem_disp_cartridge/small, 1, on_floor=0) // 100u
|
||||
recipes += new/datum/stack_recipe("white floor tile", /obj/item/stack/tile/floor_white, 1, 4, 20)
|
||||
recipes += new/datum/stack_recipe("freezer floor tile", /obj/item/stack/tile/floor_freezer, 1, 4, 20)
|
||||
|
||||
/material/wood/generate_recipes()
|
||||
..()
|
||||
|
||||
@@ -361,7 +361,6 @@ var/list/name_to_material
|
||||
destruction_desc = "shatters"
|
||||
window_options = list("One Direction" = 1, "Full Window" = 4)
|
||||
created_window = /obj/structure/window/basic
|
||||
wire_product = /obj/item/stack/light_w
|
||||
rod_product = /obj/item/stack/material/glass/reinforced
|
||||
|
||||
/material/glass/build_windows(var/mob/living/user, var/obj/item/stack/used_stack)
|
||||
|
||||
@@ -74,8 +74,8 @@
|
||||
return
|
||||
|
||||
//Drill through the flooring, if any.
|
||||
if(istype(get_turf(src), /turf/simulated/floor/plating/airless/asteroid))
|
||||
var/turf/simulated/floor/plating/airless/asteroid/T = get_turf(src)
|
||||
if(istype(get_turf(src), /turf/simulated/floor/asteroid))
|
||||
var/turf/simulated/floor/asteroid/T = get_turf(src)
|
||||
if(!T.dug)
|
||||
T.gets_dug()
|
||||
else if(istype(get_turf(src), /turf/simulated/floor))
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "forensic0-old" //GET A BETTER SPRITE.
|
||||
item_state = "electronic"
|
||||
origin_tech = list(TECH_MAGNET = 1, TECH_ENGINERING = 1)
|
||||
origin_tech = list(TECH_MAGNET = 1, TECH_ENGINEERING = 1)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 150)
|
||||
|
||||
/obj/item/weapon/mining_scanner/attack_self(mob/user as mob)
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user