Merge pull request #10275 from Zuhayr/turfs

Flooring rewrite.
This commit is contained in:
Chinsky
2015-08-18 07:55:03 +03:00
154 changed files with 10436 additions and 10459 deletions
+12 -5
View File
@@ -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"
+1 -1
View File
@@ -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()
+6 -6
View File
@@ -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
View File
@@ -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)
+4 -4
View File
@@ -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 //
+4 -6
View File
@@ -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>"
+2
View File
@@ -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
+1
View File
@@ -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
View File
@@ -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 -1
View File
@@ -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"
+10
View File
@@ -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
+2
View File
@@ -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
+1 -1
View File
@@ -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)
+3 -3
View File
@@ -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
View File
@@ -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 -1
View File
@@ -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)
-5
View File
@@ -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.
+1 -5
View File
@@ -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)
+1
View File
@@ -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)
+1 -1
View File
@@ -18,7 +18,7 @@
Beacon.invisibility = INVISIBILITY_MAXIMUM
Beacon.loc = T
hide(T.intact)
hide(!T.is_plating())
Destroy()
if(Beacon)
+2 -4
View File
@@ -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)
+5
View File
@@ -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 -2
View File
@@ -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
+1 -5
View File
@@ -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) )
+154
View File
@@ -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()
+3 -5
View File
@@ -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)
+1 -1
View File
@@ -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
+5 -5
View File
@@ -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
+2 -2
View File
@@ -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
+34 -38
View File
@@ -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()
+2 -4
View File
@@ -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))
+8 -8
View File
@@ -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
View File
@@ -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
+25 -25
View File
@@ -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)*/
+1
View File
@@ -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)
+1 -1
View File
@@ -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)
+176 -195
View File
@@ -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>"
+1 -1
View File
@@ -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)
+2 -2
View File
@@ -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."
+2 -1
View File
@@ -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()
+2 -2
View File
@@ -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
+8 -8
View File
@@ -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
+1 -1
View File
@@ -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
+2 -2
View File
@@ -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,
+7 -7
View File
@@ -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")
+2
View File
@@ -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)
+8
View File
@@ -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"
+1 -1
View File
@@ -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
+6 -3
View File
@@ -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
+181
View File
@@ -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
+345
View File
@@ -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
+53 -585
View File
@@ -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)
+48
View File
@@ -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>"
+25
View File
@@ -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()
+86
View File
@@ -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]
+23
View File
@@ -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
+2 -199
View File
@@ -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
+1 -1
View File
@@ -35,7 +35,7 @@
reinf_material = newrmaterial
update_material()
/turf/simulated/wall/proc/update_icon()
/turf/simulated/wall/update_icon()
if(!material)
return
+5
View File
@@ -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"
+11 -3
View File
@@ -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
View File
@@ -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)
+95
View File
@@ -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 -23
View File
@@ -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
View File
@@ -1,5 +1,4 @@
/turf/unsimulated
intact = 1
name = "command"
oxygen = MOLES_O2STANDARD
nitrogen = MOLES_N2STANDARD
+1
View File
@@ -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,
+7 -7
View File
@@ -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)
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+2 -4
View File
@@ -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
+3 -3
View File
@@ -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
+2 -2
View File
@@ -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
+84 -19
View File
@@ -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."
+4 -1
View File
@@ -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()
..()
-1
View File
@@ -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)
+2 -2
View File
@@ -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))
+1 -1
View File
@@ -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