Merge remote-tracking branch 'upstream/dev' into 150817-SynthAccess

This commit is contained in:
PsiOmegaDelta
2015-08-20 10:01:19 +02:00
269 changed files with 11310 additions and 10989 deletions

View File

@@ -5,7 +5,7 @@ sudo: false
env: env:
BYOND_MAJOR="508" BYOND_MAJOR="508"
BYOND_MINOR="1293" BYOND_MINOR="1293"
MACRO_COUNT=1230 MACRO_COUNT=1210
cache: cache:
directories: directories:

View File

@@ -31,6 +31,7 @@
#include "code\__defines\mobs.dm" #include "code\__defines\mobs.dm"
#include "code\__defines\research.dm" #include "code\__defines\research.dm"
#include "code\__defines\species_languages.dm" #include "code\__defines\species_languages.dm"
#include "code\__defines\turfs.dm"
#include "code\_helpers\atmospherics.dm" #include "code\_helpers\atmospherics.dm"
#include "code\_helpers\datum_pool.dm" #include "code\_helpers\datum_pool.dm"
#include "code\_helpers\files.dm" #include "code\_helpers\files.dm"
@@ -372,6 +373,7 @@
#include "code\game\machinery\doppler_array.dm" #include "code\game\machinery\doppler_array.dm"
#include "code\game\machinery\flasher.dm" #include "code\game\machinery\flasher.dm"
#include "code\game\machinery\floodlight.dm" #include "code\game\machinery\floodlight.dm"
#include "code\game\machinery\floor_light.dm"
#include "code\game\machinery\floorlayer.dm" #include "code\game\machinery\floorlayer.dm"
#include "code\game\machinery\hologram.dm" #include "code\game\machinery\hologram.dm"
#include "code\game\machinery\holosign.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\decals\posters\bs12.dm"
#include "code\game\objects\effects\spawners\bombspawner.dm" #include "code\game\objects\effects\spawners\bombspawner.dm"
#include "code\game\objects\effects\spawners\gibspawner.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\apc_frame.dm"
#include "code\game\objects\items\blueprints.dm" #include "code\game\objects\items\blueprints.dm"
#include "code\game\objects\items\bodybag.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\rods.dm"
#include "code\game\objects\items\stacks\stack.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\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\stacks\tiles\tile_types.dm"
#include "code\game\objects\items\weapons\AI_modules.dm" #include "code\game\objects\items\weapons\AI_modules.dm"
#include "code\game\objects\items\weapons\autopsy.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\biogenerator.dm"
#include "code\game\objects\items\weapons\circuitboards\machinery\cloning.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\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\mining_drill.dm"
#include "code\game\objects\items\weapons\circuitboards\machinery\pacman.dm" #include "code\game\objects\items\weapons\circuitboards\machinery\pacman.dm"
#include "code\game\objects\items\weapons\circuitboards\machinery\power.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\objects\structures\stool_bed_chair_nest\wheelchair.dm"
#include "code\game\turfs\simulated.dm" #include "code\game\turfs\simulated.dm"
#include "code\game\turfs\turf.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\turf_flick_animations.dm"
#include "code\game\turfs\unsimulated.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.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\floor_types.dm"
#include "code\game\turfs\simulated\wall_attacks.dm" #include "code\game\turfs\simulated\wall_attacks.dm"
#include "code\game\turfs\simulated\wall_icon.dm" #include "code\game\turfs\simulated\wall_icon.dm"
@@ -840,6 +848,7 @@
#include "code\modules\admin\create_turf.dm" #include "code\modules\admin\create_turf.dm"
#include "code\modules\admin\holder2.dm" #include "code\modules\admin\holder2.dm"
#include "code\modules\admin\IsBanned.dm" #include "code\modules\admin\IsBanned.dm"
#include "code\modules\admin\map_capture.dm"
#include "code\modules\admin\NewBan.dm" #include "code\modules\admin\NewBan.dm"
#include "code\modules\admin\player_notes.dm" #include "code\modules\admin\player_notes.dm"
#include "code\modules\admin\player_panel.dm" #include "code\modules\admin\player_panel.dm"
@@ -912,6 +921,7 @@
#include "code\modules\client\preferences_savefile.dm" #include "code\modules\client\preferences_savefile.dm"
#include "code\modules\client\preferences_spawnpoints.dm" #include "code\modules\client\preferences_spawnpoints.dm"
#include "code\modules\client\preferences_toggles.dm" #include "code\modules\client\preferences_toggles.dm"
#include "code\modules\client\ui_style.dm"
#include "code\modules\clothing\chameleon.dm" #include "code\modules\clothing\chameleon.dm"
#include "code\modules\clothing\clothing.dm" #include "code\modules\clothing\clothing.dm"
#include "code\modules\clothing\ears\skrell.dm" #include "code\modules\clothing\ears\skrell.dm"
@@ -1428,7 +1438,6 @@
#include "code\modules\power\cable.dm" #include "code\modules\power\cable.dm"
#include "code\modules\power\cable_heavyduty.dm" #include "code\modules\power\cable_heavyduty.dm"
#include "code\modules\power\cell.dm" #include "code\modules\power\cell.dm"
#include "code\modules\power\engine.dm"
#include "code\modules\power\fractal_reactor.dm" #include "code\modules\power\fractal_reactor.dm"
#include "code\modules\power\generator.dm" #include "code\modules\power\generator.dm"
#include "code\modules\power\generator_type2.dm" #include "code\modules\power\generator_type2.dm"

View File

@@ -12,14 +12,14 @@
#define PIPE_COLOR_CYAN "#00ffff" #define PIPE_COLOR_CYAN "#00ffff"
#define PIPE_COLOR_GREEN "#00ff00" #define PIPE_COLOR_GREEN "#00ff00"
#define PIPE_COLOR_YELLOW "#ffcc00" #define PIPE_COLOR_YELLOW "#ffcc00"
#define PIPE_COLOR_PURPLE "#5c1ec0" #define PIPE_COLOR_BLACK "#444444"
#define CONNECT_TYPE_REGULAR 1 #define CONNECT_TYPE_REGULAR 1
#define CONNECT_TYPE_SUPPLY 2 #define CONNECT_TYPE_SUPPLY 2
#define CONNECT_TYPE_SCRUBBER 4 #define CONNECT_TYPE_SCRUBBER 4
#define CONNECT_TYPE_HE 8 #define CONNECT_TYPE_HE 8
var/global/list/pipe_colors = list("grey" = PIPE_COLOR_GREY, "red" = PIPE_COLOR_RED, "blue" = PIPE_COLOR_BLUE, "cyan" = PIPE_COLOR_CYAN, "green" = PIPE_COLOR_GREEN, "yellow" = PIPE_COLOR_YELLOW, "purple" = PIPE_COLOR_PURPLE) var/global/list/pipe_colors = list("grey" = PIPE_COLOR_GREY, "red" = PIPE_COLOR_RED, "blue" = PIPE_COLOR_BLUE, "cyan" = PIPE_COLOR_CYAN, "green" = PIPE_COLOR_GREEN, "yellow" = PIPE_COLOR_YELLOW, "black" = PIPE_COLOR_BLACK)
/proc/pipe_color_lookup(var/color) /proc/pipe_color_lookup(var/color)
for(var/C in pipe_colors) for(var/C in pipe_colors)

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) /obj/machinery/atmospherics/proc/add_underlay(var/turf/T, var/obj/machinery/atmospherics/node, var/direction, var/icon_connect_type)
if(node) 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_down", direction, color_cache_name(node))
underlays += icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "down" + icon_connect_type) underlays += icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "down" + icon_connect_type)
else else

View File

@@ -69,7 +69,7 @@
if(!istype(T)) if(!istype(T))
return 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" vent_icon += "h"
if(!powered()) if(!powered())
@@ -85,7 +85,7 @@
var/turf/T = get_turf(src) var/turf/T = get_turf(src)
if(!istype(T)) if(!istype(T))
return 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 return
else else
if (node1) if (node1)

View File

@@ -189,7 +189,7 @@
var/turf/T = get_turf(src) var/turf/T = get_turf(src)
if(!istype(T)) if(!istype(T))
return 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_down", P.dir, color_cache_name(P.node))
pipe_state = icon_manager.get_atmos_icon("underlay", P.dir, color_cache_name(P.node), "down") pipe_state = icon_manager.get_atmos_icon("underlay", P.dir, color_cache_name(P.node), "down")
else else

View File

@@ -69,7 +69,7 @@
if (!istype(W, /obj/item/weapon/wrench)) if (!istype(W, /obj/item/weapon/wrench))
return ..() return ..()
var/turf/T = src.loc 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>" user << "<span class='warning'>You must remove the plating first.</span>"
return 1 return 1
var/datum/gas_mixture/int_air = return_air() var/datum/gas_mixture/int_air = return_air()

View File

@@ -118,7 +118,7 @@
if(!istype(T)) if(!istype(T))
return 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" vent_icon += "h"
if(welded) if(welded)
@@ -136,7 +136,7 @@
var/turf/T = get_turf(src) var/turf/T = get_turf(src)
if(!istype(T)) if(!istype(T))
return 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 return
else else
if(node) if(node)
@@ -399,7 +399,7 @@
user << "<span class='warning'>You cannot unwrench \the [src], turn it off first.</span>" user << "<span class='warning'>You cannot unwrench \the [src], turn it off first.</span>"
return 1 return 1
var/turf/T = src.loc 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>" user << "<span class='warning'>You must remove the plating first.</span>"
return 1 return 1
var/datum/gas_mixture/int_air = return_air() var/datum/gas_mixture/int_air = return_air()

View File

@@ -72,7 +72,7 @@
var/turf/T = get_turf(src) var/turf/T = get_turf(src)
if(!istype(T)) if(!istype(T))
return 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 return
else else
if(node) if(node)
@@ -261,7 +261,7 @@
user << "<span class='warning'>You cannot unwrench \the [src], turn it off first.</span>" user << "<span class='warning'>You cannot unwrench \the [src], turn it off first.</span>"
return 1 return 1
var/turf/T = src.loc 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>" user << "<span class='warning'>You must remove the plating first.</span>"
return 1 return 1
var/datum/gas_mixture/int_air = return_air() var/datum/gas_mixture/int_air = return_air()

View File

@@ -181,7 +181,7 @@ obj/machinery/atmospherics/mains_pipe/simple
..() // initialize internal pipes ..() // initialize internal pipes
var/turf/T = src.loc // hide if turf is not intact 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()
hidden hidden
@@ -243,7 +243,7 @@ obj/machinery/atmospherics/mains_pipe/manifold
..() // initialize internal pipes ..() // initialize internal pipes
var/turf/T = src.loc // hide if turf is not intact 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()
update_icon() update_icon()
@@ -293,7 +293,7 @@ obj/machinery/atmospherics/mains_pipe/manifold4w
..() // initialize internal pipes ..() // initialize internal pipes
var/turf/T = src.loc // hide if turf is not intact 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()
update_icon() update_icon()
@@ -354,7 +354,7 @@ obj/machinery/atmospherics/mains_pipe/split
N1.merge(N2) N1.merge(N2)
var/turf/T = src.loc // hide if turf is not intact 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()
update_icon() update_icon()
@@ -475,7 +475,7 @@ obj/machinery/atmospherics/mains_pipe/split3
N1.merge(N2) N1.merge(N2)
var/turf/T = src.loc // hide if turf is not intact 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()
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 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()
hidden hidden

View File

@@ -2,7 +2,6 @@
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/datum/pipeline/parent
var/volume = 0 var/volume = 0
force = 20 force = 20
@@ -20,10 +19,12 @@
return -1 return -1
/obj/machinery/atmospherics/pipe/New() /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)) 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 level = 1
..()
/obj/machinery/atmospherics/pipe/hides_under_flooring()
return level != 2
/obj/machinery/atmospherics/pipe/proc/pipeline_expansion() /obj/machinery/atmospherics/pipe/proc/pipeline_expansion()
return null return null
@@ -81,7 +82,7 @@
if (!istype(W, /obj/item/weapon/wrench)) if (!istype(W, /obj/item/weapon/wrench))
return ..() return ..()
var/turf/T = src.loc 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>" user << "<span class='warning'>You must remove the plating first.</span>"
return 1 return 1
var/datum/gas_mixture/int_air = return_air() var/datum/gas_mixture/int_air = return_air()
@@ -188,7 +189,7 @@
initialize_directions = SOUTH|WEST initialize_directions = SOUTH|WEST
/obj/machinery/atmospherics/pipe/simple/hide(var/i) /obj/machinery/atmospherics/pipe/simple/hide(var/i)
if(level == 1 && istype(loc, /turf/simulated)) if(istype(loc, /turf/simulated))
invisibility = i ? 101 : 0 invisibility = i ? 101 : 0
update_icon() update_icon()
@@ -297,9 +298,8 @@
qdel(src) qdel(src)
return return
var/turf/T = get_turf(src) var/turf/T = loc
if(istype(T)) if(level == 1 && !T.is_plating()) hide(1)
hide(T.intact)
update_icon() update_icon()
/obj/machinery/atmospherics/pipe/simple/disconnect(obj/machinery/atmospherics/reference) /obj/machinery/atmospherics/pipe/simple/disconnect(obj/machinery/atmospherics/reference)
@@ -348,8 +348,8 @@
/obj/machinery/atmospherics/pipe/simple/visible/green /obj/machinery/atmospherics/pipe/simple/visible/green
color = PIPE_COLOR_GREEN color = PIPE_COLOR_GREEN
/obj/machinery/atmospherics/pipe/simple/visible/purple /obj/machinery/atmospherics/pipe/simple/visible/black
color = PIPE_COLOR_PURPLE color = PIPE_COLOR_BLACK
/obj/machinery/atmospherics/pipe/simple/visible/red /obj/machinery/atmospherics/pipe/simple/visible/red
color = PIPE_COLOR_RED color = PIPE_COLOR_RED
@@ -390,8 +390,8 @@
/obj/machinery/atmospherics/pipe/simple/hidden/green /obj/machinery/atmospherics/pipe/simple/hidden/green
color = PIPE_COLOR_GREEN color = PIPE_COLOR_GREEN
/obj/machinery/atmospherics/pipe/simple/hidden/purple /obj/machinery/atmospherics/pipe/simple/hidden/black
color = PIPE_COLOR_PURPLE color = PIPE_COLOR_BLACK
/obj/machinery/atmospherics/pipe/simple/hidden/red /obj/machinery/atmospherics/pipe/simple/hidden/red
color = PIPE_COLOR_RED color = PIPE_COLOR_RED
@@ -446,7 +446,7 @@
initialize_directions = NORTH|EAST|SOUTH initialize_directions = NORTH|EAST|SOUTH
/obj/machinery/atmospherics/pipe/manifold/hide(var/i) /obj/machinery/atmospherics/pipe/manifold/hide(var/i)
if(level == 1 && istype(loc, /turf/simulated)) if(istype(loc, /turf/simulated))
invisibility = i ? 101 : 0 invisibility = i ? 101 : 0
update_icon() update_icon()
@@ -582,8 +582,7 @@
return return
var/turf/T = get_turf(src) var/turf/T = get_turf(src)
if(istype(T)) if(level == 1 && !T.is_plating()) hide(1)
hide(T.intact)
update_icon() update_icon()
/obj/machinery/atmospherics/pipe/manifold/visible /obj/machinery/atmospherics/pipe/manifold/visible
@@ -617,8 +616,8 @@
/obj/machinery/atmospherics/pipe/manifold/visible/green /obj/machinery/atmospherics/pipe/manifold/visible/green
color = PIPE_COLOR_GREEN color = PIPE_COLOR_GREEN
/obj/machinery/atmospherics/pipe/manifold/visible/purple /obj/machinery/atmospherics/pipe/manifold/visible/black
color = PIPE_COLOR_PURPLE color = PIPE_COLOR_BLACK
/obj/machinery/atmospherics/pipe/manifold/visible/red /obj/machinery/atmospherics/pipe/manifold/visible/red
color = PIPE_COLOR_RED color = PIPE_COLOR_RED
@@ -659,8 +658,8 @@
/obj/machinery/atmospherics/pipe/manifold/hidden/green /obj/machinery/atmospherics/pipe/manifold/hidden/green
color = PIPE_COLOR_GREEN color = PIPE_COLOR_GREEN
/obj/machinery/atmospherics/pipe/manifold/hidden/purple /obj/machinery/atmospherics/pipe/manifold/hidden/black
color = PIPE_COLOR_PURPLE color = PIPE_COLOR_BLACK
/obj/machinery/atmospherics/pipe/manifold/hidden/red /obj/machinery/atmospherics/pipe/manifold/hidden/red
color = PIPE_COLOR_RED color = PIPE_COLOR_RED
@@ -806,7 +805,7 @@
update_icon() update_icon()
/obj/machinery/atmospherics/pipe/manifold4w/hide(var/i) /obj/machinery/atmospherics/pipe/manifold4w/hide(var/i)
if(level == 1 && istype(loc, /turf/simulated)) if(istype(loc, /turf/simulated))
invisibility = i ? 101 : 0 invisibility = i ? 101 : 0
update_icon() update_icon()
@@ -841,8 +840,7 @@
return return
var/turf/T = get_turf(src) var/turf/T = get_turf(src)
if(istype(T)) if(level == 1 && !T.is_plating()) hide(1)
hide(T.intact)
update_icon() update_icon()
/obj/machinery/atmospherics/pipe/manifold4w/visible /obj/machinery/atmospherics/pipe/manifold4w/visible
@@ -876,8 +874,8 @@
/obj/machinery/atmospherics/pipe/manifold4w/visible/green /obj/machinery/atmospherics/pipe/manifold4w/visible/green
color = PIPE_COLOR_GREEN color = PIPE_COLOR_GREEN
/obj/machinery/atmospherics/pipe/manifold4w/visible/purple /obj/machinery/atmospherics/pipe/manifold4w/visible/black
color = PIPE_COLOR_PURPLE color = PIPE_COLOR_BLACK
/obj/machinery/atmospherics/pipe/manifold4w/visible/red /obj/machinery/atmospherics/pipe/manifold4w/visible/red
color = PIPE_COLOR_RED color = PIPE_COLOR_RED
@@ -917,8 +915,8 @@
/obj/machinery/atmospherics/pipe/manifold4w/hidden/green /obj/machinery/atmospherics/pipe/manifold4w/hidden/green
color = PIPE_COLOR_GREEN color = PIPE_COLOR_GREEN
/obj/machinery/atmospherics/pipe/manifold4w/hidden/purple /obj/machinery/atmospherics/pipe/manifold4w/hidden/black
color = PIPE_COLOR_PURPLE color = PIPE_COLOR_BLACK
/obj/machinery/atmospherics/pipe/manifold4w/hidden/red /obj/machinery/atmospherics/pipe/manifold4w/hidden/red
color = PIPE_COLOR_RED color = PIPE_COLOR_RED
@@ -946,7 +944,7 @@
initialize_directions = dir initialize_directions = dir
/obj/machinery/atmospherics/pipe/cap/hide(var/i) /obj/machinery/atmospherics/pipe/cap/hide(var/i)
if(level == 1 && istype(loc, /turf/simulated)) if(istype(loc, /turf/simulated))
invisibility = i ? 101 : 0 invisibility = i ? 101 : 0
update_icon() update_icon()
@@ -997,7 +995,7 @@
break break
var/turf/T = src.loc // hide if turf is not intact 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()
/obj/machinery/atmospherics/pipe/cap/visible /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 /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(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) underlays += icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "down" + icon_connect_type)
else else
underlays += icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "intact" + icon_connect_type) underlays += icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "intact" + icon_connect_type)

View File

@@ -46,8 +46,8 @@ obj/machinery/atmospherics/pipe/zpipe/New()
if(SOUTHWEST) if(SOUTHWEST)
initialize_directions = SOUTH initialize_directions = SOUTH
obj/machinery/atmospherics/pipe/zpipe/hide(var/i) /obj/machinery/atmospherics/pipe/zpipe/hide(var/i)
if(level == 1 && istype(loc, /turf/simulated)) if(istype(loc, /turf/simulated))
invisibility = i ? 101 : 0 invisibility = i ? 101 : 0
update_icon() update_icon()
@@ -149,7 +149,7 @@ obj/machinery/atmospherics/pipe/zpipe/up/initialize()
var/turf/T = src.loc // hide if turf is not intact var/turf/T = src.loc // hide if turf is not intact
hide(T.intact) hide(!T.is_plating())
/////////////////////// ///////////////////////
// and the down pipe // // 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 var/turf/T = src.loc // hide if turf is not intact
hide(T.intact) hide(!T.is_plating())
/////////////////////// ///////////////////////
// supply/scrubbers // // supply/scrubbers //

View File

@@ -1,6 +1,5 @@
/turf/simulated/floor/open /turf/simulated/floor/open
name = "open space" name = "open space"
intact = 0
density = 0 density = 0
icon_state = "black" icon_state = "black"
pathweight = 100000 //Seriously, don't try and path over this one numbnuts pathweight = 100000 //Seriously, don't try and path over this one numbnuts
@@ -81,7 +80,6 @@
// override to make sure nothing is hidden // override to make sure nothing is hidden
/turf/simulated/floor/open/levelupdate() /turf/simulated/floor/open/levelupdate()
for(var/obj/O in src) 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 //overwrite the attackby of space to transform it to openspace if necessary
@@ -114,16 +112,16 @@
ReplaceWithLattice() ReplaceWithLattice()
return 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) var/obj/structure/lattice/L = locate(/obj/structure/lattice, src)
if(L) if(L)
var/obj/item/stack/tile/steel/S = C var/obj/item/stack/tile/floor/S = C
if (S.get_amount() < 1) if (S.get_amount() < 1)
return return
qdel(L) qdel(L)
playsound(src.loc, 'sound/weapons/Genhit.ogg', 50, 1) playsound(src.loc, 'sound/weapons/Genhit.ogg', 50, 1)
S.build(src)
S.use(1) S.use(1)
ChangeTurf(/turf/simulated/floor/airless)
return return
else else
user << "<span class='warning'>The plating is going to need some support.</span>" user << "<span class='warning'>The plating is going to need some support.</span>"

View File

@@ -19,7 +19,7 @@ mob/proc/airflow_stun()
mob/living/silicon/airflow_stun() mob/living/silicon/airflow_stun()
return return
mob/living/carbon/metroid/airflow_stun() mob/living/carbon/slime/airflow_stun()
return return
mob/living/carbon/human/airflow_stun() mob/living/carbon/human/airflow_stun()
@@ -242,6 +242,6 @@ zone/proc/movables()
. = list() . = list()
for(var/turf/T in contents) for(var/turf/T in contents)
for(var/atom/movable/A in T) for(var/atom/movable/A in T)
if(!A.simulated || A.anchored || istype(A, /obj/effect) || istype(A, /mob/aiEye)) if(!A.simulated || A.anchored || istype(A, /obj/effect) || istype(A, /mob/eye))
continue continue
. += A . += A

View File

@@ -8,6 +8,8 @@
#define MOLES_PHORON_VISIBLE 0.7 // Moles in a standard cell after which phoron is visible. #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_O2STANDARD (MOLES_CELLSTANDARD * O2STANDARD) // O2 standard value (21%)
#define MOLES_N2STANDARD (MOLES_CELLSTANDARD * N2STANDARD) // N2 standard value (79%) #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. // These are for when a mob breathes poisonous air.
#define MIN_TOXIN_DAMAGE 1 #define MIN_TOXIN_DAMAGE 1

View File

@@ -33,6 +33,7 @@
#define ON_BORDER 64 // Item has priority to check when entering or leaving. #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 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 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. //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 #define GLASSESCOVERSEYES 256

View File

@@ -63,15 +63,23 @@
#define LIFE_HUD 10 // STATUS_HUD that only reports dead or alive #define LIFE_HUD 10 // STATUS_HUD that only reports dead or alive
//some colors //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_WHITE "#FFFFFF"
#define COLOR_SILVER "#C0C0C0"
#define COLOR_GRAY "#808080"
#define COLOR_BLACK "#000000" #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. // Shuttles.

View File

@@ -49,7 +49,7 @@
#define I_HELP "help" #define I_HELP "help"
#define I_DISARM "disarm" #define I_DISARM "disarm"
#define I_GRAB "grab" #define I_GRAB "grab"
#define I_HURT "hurt" #define I_HURT "harm"
//These are used Bump() code for living mobs, in the mob_bump_flag, mob_swap_flags, and mob_push_flags vars to determine whom can bump/swap with whom. //These are used Bump() code for living mobs, in the mob_bump_flag, mob_swap_flags, and mob_push_flags vars to determine whom can bump/swap with whom.
#define HUMAN 1 #define HUMAN 1
@@ -58,7 +58,8 @@
#define ROBOT 8 #define ROBOT 8
#define SLIME 16 #define SLIME 16
#define SIMPLE_ANIMAL 32 #define SIMPLE_ANIMAL 32
#define ALLMOBS (HUMAN|MONKEY|ALIEN|ROBOT|SLIME|SIMPLE_ANIMAL) #define HEAVY 64
#define ALLMOBS (HUMAN|MONKEY|ALIEN|ROBOT|SLIME|SIMPLE_ANIMAL|HEAVY)
#define NEXT_MOVE_DELAY 8 #define NEXT_MOVE_DELAY 8

View File

@@ -1,7 +1,7 @@
#define SHEET_MATERIAL_AMOUNT 2000 #define SHEET_MATERIAL_AMOUNT 2000
#define TECH_MATERIAL "materials" #define TECH_MATERIAL "materials"
#define TECH_ENGINERING "engineering" #define TECH_ENGINEERING "engineering"
#define TECH_PHORON "phorontech" #define TECH_PHORON "phorontech"
#define TECH_POWER "powerstorage" #define TECH_POWER "powerstorage"
#define TECH_BLUESPACE "bluespace" #define TECH_BLUESPACE "bluespace"

10
code/__defines/turfs.dm Normal file
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

View File

@@ -109,6 +109,12 @@
M = whom M = whom
C = M.client C = M.client
key = M.key key = M.key
else if(istype(whom, /datum/mind))
var/datum/mind/D = whom
key = D.key
M = D.current
if(D.current)
C = D.current.client
else if(istype(whom, /datum)) else if(istype(whom, /datum))
var/datum/D = whom var/datum/D = whom
return "*invalid:[D.type]*" return "*invalid:[D.type]*"

View File

@@ -27,3 +27,18 @@ proc/isDay(var/month, var/day)
// Uncomment this out when debugging! // Uncomment this out when debugging!
//else //else
//return 1 //return 1
var/next_duration_update = 0
var/last_round_duration = 0
proc/round_duration()
if(last_round_duration && world.time < next_duration_update)
return last_round_duration
var/mills = world.time // 1/10 of a second, not real milliseconds but whatever
//var/secs = ((mills % 36000) % 600) / 10 //Not really needed, but I'll leave it here for refrence.. or something
var/mins = (mills % 36000) / 600
var/hours = mills / 36000
last_round_duration = "[round(hours)]h [round(mins)]m"
next_duration_update = world.time + 1 MINUTES
return last_round_duration

View File

@@ -275,13 +275,6 @@ proc/tg_list2text(list/list, glue=",")
if (rights & R_MENTOR) . += "[seperator]+MENTOR" if (rights & R_MENTOR) . += "[seperator]+MENTOR"
return . return .
/proc/ui_style2icon(ui_style)
switch (ui_style)
if ("old") return 'icons/mob/screen1_old.dmi'
if ("Orange") return 'icons/mob/screen1_Orange.dmi'
if ("Midnight") return 'icons/mob/screen1_Midnight.dmi'
else return 'icons/mob/screen1_White.dmi'
// heat2color functions. Adapted from: http://www.tannerhelland.com/4435/convert-temperature-rgb-algorithm-code/ // heat2color functions. Adapted from: http://www.tannerhelland.com/4435/convert-temperature-rgb-algorithm-code/
/proc/heat2color(temp) /proc/heat2color(temp)
return rgb(heat2color_r(temp), heat2color_g(temp), heat2color_b(temp)) return rgb(heat2color_r(temp), heat2color_g(temp), heat2color_b(temp))

View File

@@ -774,11 +774,15 @@ proc/GaussRandRound(var/sigma,var/roundto)
var/old_dir1 = T.dir var/old_dir1 = T.dir
var/old_icon_state1 = T.icon_state var/old_icon_state1 = T.icon_state
var/old_icon1 = T.icon var/old_icon1 = T.icon
var/old_overlays = T.overlays.Copy()
var/old_underlays = T.underlays.Copy()
var/turf/X = B.ChangeTurf(T.type) var/turf/X = B.ChangeTurf(T.type)
X.set_dir(old_dir1) X.set_dir(old_dir1)
X.icon_state = old_icon_state1 X.icon_state = old_icon_state1
X.icon = old_icon1 //Shuttle floors are in shuttle.dmi while the defaults are floors.dmi X.icon = old_icon1 //Shuttle floors are in shuttle.dmi while the defaults are floors.dmi
X.overlays = old_overlays
X.underlays = old_underlays
var/turf/simulated/ST = T var/turf/simulated/ST = T
if(istype(ST) && ST.zone) if(istype(ST) && ST.zone)
@@ -824,7 +828,7 @@ proc/GaussRandRound(var/sigma,var/roundto)
if(!istype(O,/obj)) continue if(!istype(O,/obj)) continue
O.loc = X O.loc = X
for(var/mob/M in T) for(var/mob/M in T)
if(!istype(M,/mob) || istype(M, /mob/aiEye)) continue // If we need to check for more mobs, I'll add a variable if(!istype(M,/mob) || istype(M, /mob/eye)) continue // If we need to check for more mobs, I'll add a variable
M.loc = X M.loc = X
// var/area/AR = X.loc // var/area/AR = X.loc
@@ -921,6 +925,8 @@ proc/DuplicateObject(obj/original, var/perfectcopy = 0 , var/sameloc = 0)
var/old_dir1 = T.dir var/old_dir1 = T.dir
var/old_icon_state1 = T.icon_state var/old_icon_state1 = T.icon_state
var/old_icon1 = T.icon var/old_icon1 = T.icon
var/old_overlays = T.overlays.Copy()
var/old_underlays = T.underlays.Copy()
if(platingRequired) if(platingRequired)
if(istype(B, get_base_turf(B.z))) if(istype(B, get_base_turf(B.z)))
@@ -931,7 +937,8 @@ proc/DuplicateObject(obj/original, var/perfectcopy = 0 , var/sameloc = 0)
X.set_dir(old_dir1) X.set_dir(old_dir1)
X.icon_state = old_icon_state1 X.icon_state = old_icon_state1
X.icon = old_icon1 //Shuttle floors are in shuttle.dmi while the defaults are floors.dmi X.icon = old_icon1 //Shuttle floors are in shuttle.dmi while the defaults are floors.dmi
X.overlays = old_overlays
X.underlays = old_underlays
var/list/objs = new/list() var/list/objs = new/list()
var/list/newobjs = new/list() var/list/newobjs = new/list()
@@ -955,7 +962,7 @@ proc/DuplicateObject(obj/original, var/perfectcopy = 0 , var/sameloc = 0)
for(var/mob/M in T) for(var/mob/M in T)
if(!istype(M,/mob) || istype(M, /mob/aiEye)) continue // If we need to check for more mobs, I'll add a variable if(!istype(M,/mob) || istype(M, /mob/eye)) continue // If we need to check for more mobs, I'll add a variable
mobs += M mobs += M
for(var/mob/M in mobs) for(var/mob/M in mobs)

View File

@@ -256,7 +256,7 @@ datum/hud/New(mob/owner)
if(ishuman(mymob)) if(ishuman(mymob))
human_hud(ui_style, ui_color, ui_alpha, mymob) // Pass the player the UI style chosen in preferences human_hud(ui_style, ui_color, ui_alpha, mymob) // Pass the player the UI style chosen in preferences
else if(issmall(mymob)) else if(issmall(mymob))
monkey_hud(ui_style) monkey_hud(ui_style, ui_color, ui_alpha)
else if(isbrain(mymob)) else if(isbrain(mymob))
brain_hud(ui_style) brain_hud(ui_style)
else if(isalien(mymob)) else if(isalien(mymob))

View File

@@ -58,7 +58,6 @@
using = new /obj/screen() using = new /obj/screen()
using.name = "act_intent" using.name = "act_intent"
using.set_dir(SOUTHWEST)
using.icon = ui_style using.icon = ui_style
using.icon_state = "intent_"+mymob.a_intent using.icon_state = "intent_"+mymob.a_intent
using.screen_loc = ui_acti using.screen_loc = ui_acti
@@ -125,7 +124,6 @@
if(hud_data.has_m_intent) if(hud_data.has_m_intent)
using = new /obj/screen() using = new /obj/screen()
using.name = "mov_intent" using.name = "mov_intent"
using.set_dir(SOUTHWEST)
using.icon = ui_style using.icon = ui_style
using.icon_state = (mymob.m_intent == "run" ? "running" : "walking") using.icon_state = (mymob.m_intent == "run" ? "running" : "walking")
using.screen_loc = ui_movi using.screen_loc = ui_movi
@@ -160,11 +158,10 @@
inv_box = new /obj/screen/inventory() inv_box = new /obj/screen/inventory()
inv_box.name = "r_hand" inv_box.name = "r_hand"
inv_box.set_dir(WEST)
inv_box.icon = ui_style inv_box.icon = ui_style
inv_box.icon_state = "hand_inactive" inv_box.icon_state = "r_hand_inactive"
if(mymob && !mymob.hand) //This being 0 or null means the right hand is in use if(mymob && !mymob.hand) //This being 0 or null means the right hand is in use
inv_box.icon_state = "hand_active" inv_box.icon_state = "r_hand_active"
inv_box.screen_loc = ui_rhand inv_box.screen_loc = ui_rhand
inv_box.slot_id = slot_r_hand inv_box.slot_id = slot_r_hand
inv_box.layer = 19 inv_box.layer = 19
@@ -176,11 +173,10 @@
inv_box = new /obj/screen/inventory() inv_box = new /obj/screen/inventory()
inv_box.name = "l_hand" inv_box.name = "l_hand"
inv_box.set_dir(EAST)
inv_box.icon = ui_style inv_box.icon = ui_style
inv_box.icon_state = "hand_inactive" inv_box.icon_state = "l_hand_inactive"
if(mymob && mymob.hand) //This being 1 means the left hand is in use if(mymob && mymob.hand) //This being 1 means the left hand is in use
inv_box.icon_state = "hand_active" inv_box.icon_state = "l_hand_active"
inv_box.screen_loc = ui_lhand inv_box.screen_loc = ui_lhand
inv_box.slot_id = slot_l_hand inv_box.slot_id = slot_l_hand
inv_box.layer = 19 inv_box.layer = 19
@@ -191,7 +187,6 @@
using = new /obj/screen/inventory() using = new /obj/screen/inventory()
using.name = "hand" using.name = "hand"
using.set_dir(SOUTH)
using.icon = ui_style using.icon = ui_style
using.icon_state = "hand1" using.icon_state = "hand1"
using.screen_loc = ui_swaphand1 using.screen_loc = ui_swaphand1
@@ -202,7 +197,6 @@
using = new /obj/screen/inventory() using = new /obj/screen/inventory()
using.name = "hand" using.name = "hand"
using.set_dir(SOUTH)
using.icon = ui_style using.icon = ui_style
using.icon_state = "hand2" using.icon_state = "hand2"
using.screen_loc = ui_swaphand2 using.screen_loc = ui_swaphand2
@@ -340,29 +334,31 @@
//Handle the gun settings buttons //Handle the gun settings buttons
mymob.gun_setting_icon = new /obj/screen/gun/mode(null) mymob.gun_setting_icon = new /obj/screen/gun/mode(null)
//mymob.gun_setting_icon.color = ui_color mymob.gun_setting_icon.icon = ui_style
mymob.gun_setting_icon.color = ui_color
mymob.gun_setting_icon.alpha = ui_alpha mymob.gun_setting_icon.alpha = ui_alpha
hud_elements |= mymob.gun_setting_icon hud_elements |= mymob.gun_setting_icon
mymob.item_use_icon = new /obj/screen/gun/item(null) mymob.item_use_icon = new /obj/screen/gun/item(null)
//mymob.item_use_icon.color = ui_color mymob.item_use_icon.icon = ui_style
mymob.item_use_icon.color = ui_color
mymob.item_use_icon.alpha = ui_alpha mymob.item_use_icon.alpha = ui_alpha
mymob.gun_move_icon = new /obj/screen/gun/move(null) mymob.gun_move_icon = new /obj/screen/gun/move(null)
//mymob.gun_move_icon.color = ui_color mymob.gun_move_icon.icon = ui_style
mymob.gun_move_icon.color = ui_color
mymob.gun_move_icon.alpha = ui_alpha mymob.gun_move_icon.alpha = ui_alpha
mymob.gun_run_icon = new /obj/screen/gun/run(null) mymob.gun_run_icon = new /obj/screen/gun/run(null)
//mymob.gun_run_icon.color = ui_color mymob.gun_run_icon.icon = ui_style
mymob.gun_run_icon.color = ui_color
mymob.gun_run_icon.alpha = ui_alpha mymob.gun_run_icon.alpha = ui_alpha
mymob.radio_use_icon = new /obj/screen/gun/radio(null) mymob.radio_use_icon = new /obj/screen/gun/radio(null)
mymob.radio_use_icon.icon = ui_style
mymob.radio_use_icon.color = ui_color
mymob.radio_use_icon.alpha = ui_alpha mymob.radio_use_icon.alpha = ui_alpha
if (mymob.client)
if (mymob.client.gun_mode) // If in aim mode, correct the sprite
mymob.gun_setting_icon.set_dir(2)
mymob.client.screen = null mymob.client.screen = null

View File

@@ -1,4 +1,4 @@
/datum/hud/proc/monkey_hud(var/ui_style='icons/mob/screen1_old.dmi') /datum/hud/proc/monkey_hud(var/ui_style='icons/mob/screen1_old.dmi', var/ui_color = "#ffffff", var/ui_alpha = 255)
src.adding = list() src.adding = list()
src.other = list() src.other = list()
@@ -8,9 +8,10 @@
using = new /obj/screen() using = new /obj/screen()
using.name = "act_intent" using.name = "act_intent"
using.set_dir(SOUTHWEST)
using.icon = ui_style using.icon = ui_style
using.icon_state = (mymob.a_intent == I_HURT ? I_HURT : mymob.a_intent) using.color = ui_color
using.alpha = ui_alpha
using.icon_state = mymob.a_intent
using.screen_loc = ui_acti using.screen_loc = ui_acti
using.layer = 20 using.layer = 20
src.adding += using src.adding += using
@@ -23,7 +24,7 @@
ico.MapColors(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -1,-1,-1,-1) ico.MapColors(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -1,-1,-1,-1)
ico.DrawBox(rgb(255,255,255,1),1,ico.Height()/2,ico.Width()/2,ico.Height()) ico.DrawBox(rgb(255,255,255,1),1,ico.Height()/2,ico.Width()/2,ico.Height())
using = new /obj/screen( src ) using = new /obj/screen( src )
using.name = "help" using.name = I_HELP
using.icon = ico using.icon = ico
using.screen_loc = ui_acti using.screen_loc = ui_acti
using.layer = 21 using.layer = 21
@@ -34,7 +35,7 @@
ico.MapColors(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -1,-1,-1,-1) ico.MapColors(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -1,-1,-1,-1)
ico.DrawBox(rgb(255,255,255,1),ico.Width()/2,ico.Height()/2,ico.Width(),ico.Height()) ico.DrawBox(rgb(255,255,255,1),ico.Width()/2,ico.Height()/2,ico.Width(),ico.Height())
using = new /obj/screen( src ) using = new /obj/screen( src )
using.name = "disarm" using.name = I_DISARM
using.icon = ico using.icon = ico
using.screen_loc = ui_acti using.screen_loc = ui_acti
using.layer = 21 using.layer = 21
@@ -45,7 +46,7 @@
ico.MapColors(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -1,-1,-1,-1) ico.MapColors(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -1,-1,-1,-1)
ico.DrawBox(rgb(255,255,255,1),ico.Width()/2,1,ico.Width(),ico.Height()/2) ico.DrawBox(rgb(255,255,255,1),ico.Width()/2,1,ico.Width(),ico.Height()/2)
using = new /obj/screen( src ) using = new /obj/screen( src )
using.name = "grab" using.name = I_GRAB
using.icon = ico using.icon = ico
using.screen_loc = ui_acti using.screen_loc = ui_acti
using.layer = 21 using.layer = 21
@@ -56,7 +57,7 @@
ico.MapColors(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -1,-1,-1,-1) ico.MapColors(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -1,-1,-1,-1)
ico.DrawBox(rgb(255,255,255,1),1,1,ico.Width()/2,ico.Height()/2) ico.DrawBox(rgb(255,255,255,1),1,1,ico.Width()/2,ico.Height()/2)
using = new /obj/screen( src ) using = new /obj/screen( src )
using.name = "harm" using.name = I_HURT
using.icon = ico using.icon = ico
using.screen_loc = ui_acti using.screen_loc = ui_acti
using.layer = 21 using.layer = 21
@@ -67,8 +68,9 @@
using = new /obj/screen() using = new /obj/screen()
using.name = "mov_intent" using.name = "mov_intent"
using.set_dir(SOUTHWEST)
using.icon = ui_style using.icon = ui_style
using.color = ui_color
using.alpha = ui_alpha
using.icon_state = (mymob.m_intent == "run" ? "running" : "walking") using.icon_state = (mymob.m_intent == "run" ? "running" : "walking")
using.screen_loc = ui_movi using.screen_loc = ui_movi
using.layer = 20 using.layer = 20
@@ -78,6 +80,8 @@
using = new /obj/screen() using = new /obj/screen()
using.name = "drop" using.name = "drop"
using.icon = ui_style using.icon = ui_style
using.color = ui_color
using.alpha = ui_alpha
using.icon_state = "act_drop" using.icon_state = "act_drop"
using.screen_loc = ui_drop_throw using.screen_loc = ui_drop_throw
using.layer = 19 using.layer = 19
@@ -85,9 +89,10 @@
inv_box = new /obj/screen/inventory() inv_box = new /obj/screen/inventory()
inv_box.name = "r_hand" inv_box.name = "r_hand"
inv_box.set_dir(WEST)
inv_box.icon = ui_style inv_box.icon = ui_style
inv_box.icon_state = "hand_inactive" using.color = ui_color
using.alpha = ui_alpha
inv_box.icon_state = "r_hand_inactive"
if(mymob && !mymob.hand) //This being 0 or null means the right hand is in use if(mymob && !mymob.hand) //This being 0 or null means the right hand is in use
inv_box.icon_state = "hand_active" inv_box.icon_state = "hand_active"
inv_box.screen_loc = ui_rhand inv_box.screen_loc = ui_rhand
@@ -98,9 +103,10 @@
inv_box = new /obj/screen/inventory() inv_box = new /obj/screen/inventory()
inv_box.name = "l_hand" inv_box.name = "l_hand"
inv_box.set_dir(EAST)
inv_box.icon = ui_style inv_box.icon = ui_style
inv_box.icon_state = "hand_inactive" using.color = ui_color
using.alpha = ui_alpha
inv_box.icon_state = "l_hand_inactive"
if(mymob && mymob.hand) //This being 1 means the left hand is in use if(mymob && mymob.hand) //This being 1 means the left hand is in use
inv_box.icon_state = "hand_active" inv_box.icon_state = "hand_active"
inv_box.screen_loc = ui_lhand inv_box.screen_loc = ui_lhand
@@ -111,8 +117,9 @@
using = new /obj/screen/inventory() using = new /obj/screen/inventory()
using.name = "hand" using.name = "hand"
using.set_dir(SOUTH)
using.icon = ui_style using.icon = ui_style
using.color = ui_color
using.alpha = ui_alpha
using.icon_state = "hand1" using.icon_state = "hand1"
using.screen_loc = ui_swaphand1 using.screen_loc = ui_swaphand1
using.layer = 19 using.layer = 19
@@ -120,8 +127,9 @@
using = new /obj/screen/inventory() using = new /obj/screen/inventory()
using.name = "hand" using.name = "hand"
using.set_dir(SOUTH)
using.icon = ui_style using.icon = ui_style
using.color = ui_color
using.alpha = ui_alpha
using.icon_state = "hand2" using.icon_state = "hand2"
using.screen_loc = ui_swaphand2 using.screen_loc = ui_swaphand2
using.layer = 19 using.layer = 19
@@ -129,8 +137,9 @@
inv_box = new /obj/screen/inventory() inv_box = new /obj/screen/inventory()
inv_box.name = "mask" inv_box.name = "mask"
inv_box.set_dir(NORTH)
inv_box.icon = ui_style inv_box.icon = ui_style
inv_box.color = ui_color
inv_box.alpha = ui_alpha
inv_box.icon_state = "equip" inv_box.icon_state = "equip"
inv_box.screen_loc = ui_monkey_mask inv_box.screen_loc = ui_monkey_mask
inv_box.slot_id = slot_wear_mask inv_box.slot_id = slot_wear_mask
@@ -139,8 +148,9 @@
inv_box = new /obj/screen/inventory() inv_box = new /obj/screen/inventory()
inv_box.name = "back" inv_box.name = "back"
inv_box.set_dir(NORTHEAST)
inv_box.icon = ui_style inv_box.icon = ui_style
inv_box.color = ui_color
inv_box.alpha = ui_alpha
inv_box.icon_state = "equip" inv_box.icon_state = "equip"
inv_box.screen_loc = ui_back inv_box.screen_loc = ui_back
inv_box.slot_id = slot_back inv_box.slot_id = slot_back
@@ -149,54 +159,72 @@
mymob.throw_icon = new /obj/screen() mymob.throw_icon = new /obj/screen()
mymob.throw_icon.icon = ui_style mymob.throw_icon.icon = ui_style
mymob.throw_icon.color = ui_color
mymob.throw_icon.alpha = ui_alpha
mymob.throw_icon.icon_state = "act_throw_off" mymob.throw_icon.icon_state = "act_throw_off"
mymob.throw_icon.name = "throw" mymob.throw_icon.name = "throw"
mymob.throw_icon.screen_loc = ui_drop_throw mymob.throw_icon.screen_loc = ui_drop_throw
mymob.oxygen = new /obj/screen() mymob.oxygen = new /obj/screen()
mymob.oxygen.icon = ui_style mymob.oxygen.icon = ui_style
mymob.oxygen.color = ui_color
mymob.oxygen.alpha = ui_alpha
mymob.oxygen.icon_state = "oxy0" mymob.oxygen.icon_state = "oxy0"
mymob.oxygen.name = "oxygen" mymob.oxygen.name = "oxygen"
mymob.oxygen.screen_loc = ui_oxygen mymob.oxygen.screen_loc = ui_oxygen
mymob.pressure = new /obj/screen() mymob.pressure = new /obj/screen()
mymob.pressure.icon = ui_style mymob.pressure.icon = ui_style
mymob.pressure.color = ui_color
mymob.pressure.alpha = ui_alpha
mymob.pressure.icon_state = "pressure0" mymob.pressure.icon_state = "pressure0"
mymob.pressure.name = "pressure" mymob.pressure.name = "pressure"
mymob.pressure.screen_loc = ui_pressure mymob.pressure.screen_loc = ui_pressure
mymob.toxin = new /obj/screen() mymob.toxin = new /obj/screen()
mymob.toxin.icon = ui_style mymob.toxin.icon = ui_style
mymob.toxin.color = ui_color
mymob.toxin.alpha = ui_alpha
mymob.toxin.icon_state = "tox0" mymob.toxin.icon_state = "tox0"
mymob.toxin.name = "toxin" mymob.toxin.name = "toxin"
mymob.toxin.screen_loc = ui_toxin mymob.toxin.screen_loc = ui_toxin
mymob.internals = new /obj/screen() mymob.internals = new /obj/screen()
mymob.internals.icon = ui_style mymob.internals.icon = ui_style
mymob.internals.color = ui_color
mymob.internals.alpha = ui_alpha
mymob.internals.icon_state = "internal0" mymob.internals.icon_state = "internal0"
mymob.internals.name = "internal" mymob.internals.name = "internal"
mymob.internals.screen_loc = ui_internal mymob.internals.screen_loc = ui_internal
mymob.fire = new /obj/screen() mymob.fire = new /obj/screen()
mymob.fire.icon = ui_style mymob.fire.icon = ui_style
mymob.fire.color = ui_color
mymob.fire.alpha = ui_alpha
mymob.fire.icon_state = "fire0" mymob.fire.icon_state = "fire0"
mymob.fire.name = "fire" mymob.fire.name = "fire"
mymob.fire.screen_loc = ui_fire mymob.fire.screen_loc = ui_fire
mymob.bodytemp = new /obj/screen() mymob.bodytemp = new /obj/screen()
mymob.bodytemp.icon = ui_style mymob.bodytemp.icon = ui_style
mymob.bodytemp.color = ui_color
mymob.bodytemp.alpha = ui_alpha
mymob.bodytemp.icon_state = "temp1" mymob.bodytemp.icon_state = "temp1"
mymob.bodytemp.name = "body temperature" mymob.bodytemp.name = "body temperature"
mymob.bodytemp.screen_loc = ui_temp mymob.bodytemp.screen_loc = ui_temp
mymob.healths = new /obj/screen() mymob.healths = new /obj/screen()
mymob.healths.icon = ui_style mymob.healths.icon = ui_style
mymob.healths.color = ui_color
mymob.healths.alpha = ui_alpha
mymob.healths.icon_state = "health0" mymob.healths.icon_state = "health0"
mymob.healths.name = "health" mymob.healths.name = "health"
mymob.healths.screen_loc = ui_health mymob.healths.screen_loc = ui_health
mymob.pullin = new /obj/screen() mymob.pullin = new /obj/screen()
mymob.pullin.icon = ui_style mymob.pullin.icon = ui_style
mymob.pullin.color = ui_color
mymob.pullin.alpha = ui_alpha
mymob.pullin.icon_state = "pull0" mymob.pullin.icon_state = "pull0"
mymob.pullin.name = "pull" mymob.pullin.name = "pull"
mymob.pullin.screen_loc = ui_pull_resist mymob.pullin.screen_loc = ui_pull_resist
@@ -217,6 +245,8 @@
mymob.zone_sel = new /obj/screen/zone_sel() mymob.zone_sel = new /obj/screen/zone_sel()
mymob.zone_sel.icon = ui_style mymob.zone_sel.icon = ui_style
mymob.zone_sel.color = ui_color
mymob.zone_sel.alpha = ui_alpha
mymob.zone_sel.overlays.Cut() mymob.zone_sel.overlays.Cut()
mymob.zone_sel.overlays += image('icons/mob/zone_sel.dmi', "[mymob.zone_sel.selecting]") mymob.zone_sel.overlays += image('icons/mob/zone_sel.dmi', "[mymob.zone_sel.selecting]")

View File

@@ -57,7 +57,7 @@ var/obj/screen/robot_inventory
using.name = "act_intent" using.name = "act_intent"
using.set_dir(SOUTHWEST) using.set_dir(SOUTHWEST)
using.icon = 'icons/mob/screen1_robot.dmi' using.icon = 'icons/mob/screen1_robot.dmi'
using.icon_state = (mymob.a_intent == I_HURT ? I_HURT : mymob.a_intent) using.icon_state = mymob.a_intent
using.screen_loc = ui_acti using.screen_loc = ui_acti
using.layer = 20 using.layer = 20
src.adding += using src.adding += using

View File

@@ -372,7 +372,7 @@
usr.hud_used.action_intent.icon_state = "intent_help" usr.hud_used.action_intent.icon_state = "intent_help"
if(I_HURT) if(I_HURT)
usr.a_intent = I_HURT usr.a_intent = I_HURT
usr.hud_used.action_intent.icon_state = "intent_hurt" usr.hud_used.action_intent.icon_state = "intent_harm"
if(I_GRAB) if(I_GRAB)
usr.a_intent = I_GRAB usr.a_intent = I_GRAB
usr.hud_used.action_intent.icon_state = "intent_grab" usr.hud_used.action_intent.icon_state = "intent_grab"

View File

@@ -97,20 +97,21 @@ On the map:
1455 for AI access 1455 for AI access
*/ */
var/const/BOT_FREQ = 1447
var/const/COMM_FREQ = 1353 var/const/COMM_FREQ = 1353
var/const/SYND_FREQ = 1213
var/const/ERT_FREQ = 1345 var/const/ERT_FREQ = 1345
var/const/AI_FREQ = 1343
var/const/DTH_FREQ = 1341 var/const/DTH_FREQ = 1341
var/const/AI_FREQ = 1447 var/const/SYND_FREQ = 1213
// department channels // department channels
var/const/PUB_FREQ = 1459 var/const/PUB_FREQ = 1459
var/const/SEC_FREQ = 1359 var/const/SEC_FREQ = 1359
var/const/ENG_FREQ = 1357 var/const/ENG_FREQ = 1357
var/const/SCI_FREQ = 1351
var/const/MED_FREQ = 1355 var/const/MED_FREQ = 1355
var/const/SUP_FREQ = 1347 var/const/SCI_FREQ = 1351
var/const/SRV_FREQ = 1349 var/const/SRV_FREQ = 1349
var/const/SUP_FREQ = 1347
var/list/radiochannels = list( var/list/radiochannels = list(
"Common" = PUB_FREQ, "Common" = PUB_FREQ,

View File

@@ -203,7 +203,7 @@ var/global/datum/shuttle_controller/shuttle_controller
//Skipjack. //Skipjack.
var/datum/shuttle/multi_shuttle/VS = new/datum/shuttle/multi_shuttle() var/datum/shuttle/multi_shuttle/VS = new/datum/shuttle/multi_shuttle()
VS.origin = locate(/area/shuttle/skipjack/station) VS.origin = locate(/area/skipjack_station/start)
VS.destinations = list( VS.destinations = list(
"Fore Starboard Solars" = locate(/area/skipjack_station/northeast_solars), "Fore Starboard Solars" = locate(/area/skipjack_station/northeast_solars),

View File

@@ -143,7 +143,11 @@
if(href_list["add_antagonist"]) if(href_list["add_antagonist"])
var/datum/antagonist/antag = all_antag_types[href_list["add_antagonist"]] var/datum/antagonist/antag = all_antag_types[href_list["add_antagonist"]]
if(antag) antag.add_antagonist(src, 1, 1, 0, 1, 1) // Ignore equipment and role type for this. if(antag)
if(antag.add_antagonist(src, 1, 1, 0, 1, 1)) // Ignore equipment and role type for this.
log_admin("[key_name_admin(usr)] made [key_name(src)] into a [antag.role_text].")
else
usr << "<span class='warning'>[src] could not be made into a [antag.role_text]!</span>"
else if(href_list["remove_antagonist"]) else if(href_list["remove_antagonist"])
var/datum/antagonist/antag = all_antag_types[href_list["remove_antagonist"]] var/datum/antagonist/antag = all_antag_types[href_list["remove_antagonist"]]

View File

@@ -27,8 +27,10 @@
/obj/effect/beam /obj/effect/beam
name = "beam" name = "beam"
density = 0
unacidable = 1//Just to be sure. unacidable = 1//Just to be sure.
var/def_zone var/def_zone
flags = PROXMOVE
pass_flags = PASSTABLE pass_flags = PASSTABLE

View File

@@ -599,4 +599,4 @@
desc = "Instant research tool. For testing purposes only." desc = "Instant research tool. For testing purposes only."
icon = 'icons/obj/stock_parts.dmi' icon = 'icons/obj/stock_parts.dmi'
icon_state = "smes_coil" 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)

View File

@@ -72,7 +72,7 @@ mob/proc/handle_regular_hud_updates() //Used in the life.dm of mobs that can use
mob/proc/in_view(var/turf/T) mob/proc/in_view(var/turf/T)
return view(T) return view(T)
/mob/aiEye/in_view(var/turf/T) /mob/eye/in_view(var/turf/T)
var/list/viewed = new var/list/viewed = new
for(var/mob/living/carbon/human/H in mob_list) for(var/mob/living/carbon/human/H in mob_list)
if(get_dist(H, T) <= 7) if(get_dist(H, T) <= 7)

View File

@@ -59,20 +59,23 @@
/datum/antagonist/proc/get_candidates(var/ghosts_only) /datum/antagonist/proc/get_candidates(var/ghosts_only)
candidates = list() // Clear. candidates = list() // Clear.
candidates = ticker.mode.get_players_for_role(role_type, id)
// Prune restricted status. Broke it up for readability. // Prune restricted status. Broke it up for readability.
// Note that this is done before jobs are handed out. // Note that this is done before jobs are handed out.
for(var/datum/mind/player in candidates) for(var/datum/mind/player in ticker.mode.get_players_for_role(role_type, id))
if(ghosts_only && !istype(player.current, /mob/dead)) if(ghosts_only && !istype(player.current, /mob/dead))
candidates -= player log_debug("[key_name(player)] is not eligible to become a [role_text]: Only ghosts may join as this role!")
else if(player.special_role) else if(player.special_role)
candidates -= player log_debug("[key_name(player)] is not eligible to become a [role_text]: They already have a special role ([player.special_role])!")
else if (player in pending_antagonists) else if (player in pending_antagonists)
candidates -= player log_debug("[key_name(player)] is not eligible to become a [role_text]: They have already been selected for this role!")
else if(!can_become_antag(player)) else if(!can_become_antag(player))
candidates -= player log_debug("[key_name(player)] is not eligible to become a [role_text]: They are blacklisted for this role!")
else if(player_is_antag(player)) else if(player_is_antag(player))
candidates -= player log_debug("[key_name(player)] is not eligible to become a [role_text]: They are already an antagonist!")
else
candidates += player
return candidates return candidates
/datum/antagonist/proc/attempt_random_spawn() /datum/antagonist/proc/attempt_random_spawn()
@@ -108,6 +111,7 @@
return 0 return 0
//Grab candidates randomly until we have enough. //Grab candidates randomly until we have enough.
candidates = shuffle(candidates)
while(candidates.len && pending_antagonists.len < cur_max) while(candidates.len && pending_antagonists.len < cur_max)
var/datum/mind/player = pick(candidates) var/datum/mind/player = pick(candidates)
candidates -= player candidates -= player
@@ -118,6 +122,7 @@
/datum/antagonist/proc/draft_antagonist(var/datum/mind/player) /datum/antagonist/proc/draft_antagonist(var/datum/mind/player)
//Check if the player can join in this antag role, or if the player has already been given an antag role. //Check if the player can join in this antag role, or if the player has already been given an antag role.
if(!can_become_antag(player) || player.special_role) if(!can_become_antag(player) || player.special_role)
log_debug("[player.key] was selected for [role_text] by lottery, but is not allowed to be that role.")
return 0 return 0
pending_antagonists |= player pending_antagonists |= player

View File

@@ -86,7 +86,7 @@
code_owner.store_memory("<B>Nuclear Bomb Code</B>: [code]", 0, 0) code_owner.store_memory("<B>Nuclear Bomb Code</B>: [code]", 0, 0)
code_owner.current << "The nuclear authorization code is: <B>[code]</B>" code_owner.current << "The nuclear authorization code is: <B>[code]</B>"
else else
world << "<span class='danger'>Could not spawn nuclear bomb. Contact a developer.</span>" message_admins("<span class='danger'>Could not spawn nuclear bomb. Contact a developer.</span>")
return return
spawned_nuke = code spawned_nuke = code

View File

@@ -2,9 +2,9 @@
if(player.current && jobban_isbanned(player.current, bantype)) if(player.current && jobban_isbanned(player.current, bantype))
return 0 return 0
if(!ignore_role) if(!ignore_role)
if(player.assigned_role in protected_jobs) if(player.assigned_role in restricted_jobs)
return 0 return 0
if(config.protect_roles_from_antagonist && (player.assigned_role in restricted_jobs)) if(config.protect_roles_from_antagonist && (player.assigned_role in protected_jobs))
return 0 return 0
return 1 return 1

View File

@@ -184,7 +184,7 @@ var/datum/antagonist/raider/raiders
return 0 return 0
for(var/datum/mind/player in current_antagonists) for(var/datum/mind/player in current_antagonists)
if(!player.current || get_area(player.current) != locate(/area/shuttle/skipjack/station)) if(!player.current || get_area(player.current) != locate(/area/skipjack_station/start))
return 0 return 0
return 1 return 1

View File

@@ -135,10 +135,10 @@ datum/antagonist/revolutionary/finalize(var/datum/mind/target)
world << text world << text
// This is a total redefine because headrevs are greeted differently to subrevs. // This is a total redefine because headrevs are greeted differently to subrevs.
/datum/antagonist/revolutionary/add_antagonist(var/datum/mind/player) /datum/antagonist/revolutionary/add_antagonist(var/datum/mind/player, var/ignore_role)
if((player in current_antagonists) || (player in head_revolutionaries)) if((player in current_antagonists) || (player in head_revolutionaries))
return 0 return 0
if(!can_become_antag(player)) if(!can_become_antag(player, ignore_role))
return 0 return 0
current_antagonists |= player current_antagonists |= player
player.current << "<span class='danger'><font size=3>You are a Revolutionary!</font></span>" player.current << "<span class='danger'><font size=3>You are a Revolutionary!</font></span>"
@@ -168,11 +168,6 @@ datum/antagonist/revolutionary/finalize(var/datum/mind/target)
if(show_message) if(show_message)
player.current.visible_message("[player.current] looks like they just remembered their real allegiance!") player.current.visible_message("[player.current] looks like they just remembered their real allegiance!")
/datum/antagonist/revolutionary/can_become_antag(var/datum/mind/player)
return ..() && istype(player) && \
istype(player.current, /mob/living/carbon/human) && \
!(player.assigned_role in command_positions)
// Used by RP-rev. // Used by RP-rev.
/mob/living/carbon/human/proc/convert_to_rev(mob/M as mob in oview(src)) /mob/living/carbon/human/proc/convert_to_rev(mob/M as mob in oview(src))
set name = "Convert Bourgeoise" set name = "Convert Bourgeoise"

View File

@@ -319,11 +319,6 @@ area/space/atmosalert()
/area/shuttle/research/outpost /area/shuttle/research/outpost
icon_state = "shuttle" icon_state = "shuttle"
/area/shuttle/skipjack/station
name = "\improper Skipjack"
icon_state = "yellow"
requires_power = 0
/area/airtunnel1/ // referenced in airtunnel.dm:759 /area/airtunnel1/ // referenced in airtunnel.dm:759
/area/dummy/ // Referenced in engine.dm:261 /area/dummy/ // Referenced in engine.dm:261
@@ -516,8 +511,16 @@ area/space/atmosalert()
requires_power = 0 requires_power = 0
lighting_use_dynamic = 0 lighting_use_dynamic = 0
/area/skipjack_station/transit /area/skipjack_station
name = "\improper Skipjack"
icon_state = "yellow"
requires_power = 0
/area/skipjack_station/start
name = "\improper Skipjack"
icon_state = "yellow"
/area/skipjack_station/transit
name = "\improper hyperspace" name = "\improper hyperspace"
icon_state = "shuttle" icon_state = "shuttle"

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) if(!wall)
wall = pick(/turf/simulated/wall/r_wall,/turf/simulated/wall,/obj/effect/alien/resin) wall = pick(/turf/simulated/wall/r_wall,/turf/simulated/wall,/obj/effect/alien/resin)
if(!floor) 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/x = 0,x<x_size,x++)
for(var/y = 0,y<y_size,y++) for(var/y = 0,y<y_size,y++)
@@ -76,9 +76,9 @@ proc/admin_spawn_room_at_pos()
wall=/obj/effect/alien/resin wall=/obj/effect/alien/resin
switch(alert("Floor type",null,"Regular floor","Reinforced floor")) switch(alert("Floor type",null,"Regular floor","Reinforced floor"))
if("Regular floor") if("Regular floor")
floor=/turf/simulated/floor floor=/turf/simulated/floor/tiled
if("Reinforced floor") if("Reinforced floor")
floor=/turf/simulated/floor/engine floor=/turf/simulated/floor/reinforced
if(x && y && z && wall && floor && x_len && y_len) if(x && y && z && wall && floor && x_len && y_len)
spawn_room(locate(x,y,z),x_len,y_len,wall,floor,clean) spawn_room(locate(x,y,z),x_len,y_len,wall,floor,clean)
return return

View File

@@ -66,6 +66,8 @@
/atom/proc/CheckExit() /atom/proc/CheckExit()
return 1 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) /atom/proc/HasProximity(atom/movable/AM as mob|obj)
return return

View File

@@ -1,6 +1,6 @@
// Returns the lowest turf available on a given Z-level, defaults to space. // Returns the lowest turf available on a given Z-level, defaults to space.
var/global/list/base_turf_by_z = list( 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) proc/get_base_turf(var/z)

View File

@@ -127,11 +127,6 @@
T.ChangeTurf(/turf/simulated/wall/cult) 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() /obj/structure/table/cultify()
// Make it a wood-reinforced wooden table. // Make it a wood-reinforced wooden table.
// There are cult materials available, but it'd make the table non-deconstructable with how holotables work. // There are cult materials available, but it'd make the table non-deconstructable with how holotables work.

View File

@@ -3,11 +3,9 @@
return return
/turf/simulated/floor/cultify() /turf/simulated/floor/cultify()
//todo: flooring datum cultify check
cultify_floor() cultify_floor()
/turf/simulated/floor/carpet/cultify()
return
/turf/simulated/shuttle/floor/cultify() /turf/simulated/shuttle/floor/cultify()
cultify_floor() cultify_floor()
@@ -39,8 +37,6 @@
if((icon_state != "cult")&&(icon_state != "cult-narsie")) if((icon_state != "cult")&&(icon_state != "cult-narsie"))
name = "engraved floor" name = "engraved floor"
icon_state = "cult" icon_state = "cult"
turf_animation('icons/effects/effects.dmi',"cultfloor",0,0,MOB_LAYER-1)
/turf/proc/cultify_wall() /turf/proc/cultify_wall()
ChangeTurf(/turf/unsimulated/wall/cult) ChangeTurf(/turf/unsimulated/wall/cult)
turf_animation('icons/effects/effects.dmi',"cultwall",0,0,MOB_LAYER-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(!(istype(T, /turf/simulated/wall/cult)||istype(T, /turf/space)))
if(T.icon_state != "cult-narsie") if(T.icon_state != "cult-narsie")
T.desc = "something that goes beyond your understanding went this way" T.desc = "something that goes beyond your understanding went this way"
T.icon = 'icons/turf/flooring/cult.dmi'
T.icon_state = "cult-narsie" T.icon_state = "cult-narsie"
T.set_light(1) T.set_light(1)

View File

@@ -432,28 +432,22 @@ var/global/list/additional_antag_types = list()
if(!antag_template) if(!antag_template)
return candidates return candidates
var/roletext
// Assemble a list of active players without jobbans. // Assemble a list of active players without jobbans.
for(var/mob/new_player/player in player_list) for(var/mob/new_player/player in player_list)
if( player.client && player.ready ) if( player.client && player.ready )
if(!(jobban_isbanned(player, "Syndicate") || jobban_isbanned(player, antag_template.bantype)))
players += player players += player
// Shuffle the players list so that it becomes ping-independent.
players = shuffle(players)
// Get a list of all the people who want to be the antagonist for this round // Get a list of all the people who want to be the antagonist for this round
for(var/mob/new_player/player in players) for(var/mob/new_player/player in players)
if(!role || (player.client.prefs.be_special & role)) if(!role || (player.client.prefs.be_special & role))
log_debug("[player.key] had [roletext] enabled, so we are drafting them.") log_debug("[player.key] had [antag_id] enabled, so we are drafting them.")
candidates += player.mind candidates += player.mind
players -= player players -= player
// If we don't have enough antags, draft people who voted for the round. // If we don't have enough antags, draft people who voted for the round.
if(candidates.len < required_enemies) if(candidates.len < required_enemies)
for(var/key in round_voters)
for(var/mob/new_player/player in players) for(var/mob/new_player/player in players)
if(player.ckey == key) if(player.ckey in round_voters)
log_debug("[player.key] voted for this round, so we are drafting them.") log_debug("[player.key] voted for this round, so we are drafting them.")
candidates += player.mind candidates += player.mind
players -= player players -= player
@@ -490,12 +484,14 @@ var/global/list/additional_antag_types = list()
if(antag) if(antag)
antag_templates |= antag antag_templates |= antag
/*
if(antag_templates && antag_templates.len) if(antag_templates && antag_templates.len)
for(var/datum/antagonist/antag in antag_templates) for(var/datum/antagonist/antag in antag_templates)
if(antag.flags & (ANTAG_OVERRIDE_JOB|ANTAG_RANDSPAWN)) if(antag.flags & (ANTAG_OVERRIDE_JOB|ANTAG_RANDSPAWN))
continue continue
antag_templates -= antag antag_templates -= antag
world << "<span class='danger'>[antag.role_text_plural] are invalid for additional roundtype antags!</span>" world << "<span class='danger'>[antag.role_text_plural] are invalid for additional roundtype antags!</span>"
*/
newscaster_announcements = pick(newscaster_standard_feeds) newscaster_announcements = pick(newscaster_standard_feeds)

View File

@@ -728,7 +728,7 @@ datum/objective/heist/kidnap
//if (!target.current.restrained()) //if (!target.current.restrained())
// return 0 // They're loose. Close but no cigar. // return 0 // They're loose. Close but no cigar.
var/area/shuttle/skipjack/station/A = locate() var/area/skipjack_station/start/A = locate()
for(var/mob/living/carbon/human/M in A) for(var/mob/living/carbon/human/M in A)
if(target.current == M) if(target.current == M)
return 1 //They're restrained on the shuttle. Success. return 1 //They're restrained on the shuttle. Success.
@@ -779,7 +779,7 @@ datum/objective/heist/loot
var/total_amount = 0 var/total_amount = 0
for(var/obj/O in locate(/area/shuttle/skipjack/station)) for(var/obj/O in locate(/area/skipjack_station/start))
if(istype(O,target)) total_amount++ if(istype(O,target)) total_amount++
for(var/obj/I in O.contents) for(var/obj/I in O.contents)
if(istype(I,target)) total_amount++ if(istype(I,target)) total_amount++
@@ -828,7 +828,7 @@ datum/objective/heist/salvage
var/total_amount = 0 var/total_amount = 0
for(var/obj/item/O in locate(/area/shuttle/skipjack/station)) for(var/obj/item/O in locate(/area/skipjack_station/start))
var/obj/item/stack/material/S var/obj/item/stack/material/S
if(istype(O,/obj/item/stack/material)) if(istype(O,/obj/item/stack/material))

View File

@@ -110,7 +110,7 @@
selection_color = "#ffeef0" selection_color = "#ffeef0"
economic_modifier = 5 economic_modifier = 5
access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics) access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics)
minimal_access = list(access_medical, access_chemistry) minimal_access = list(access_medical, access_medical_equip, access_chemistry)
alt_titles = list("Pharmacist") alt_titles = list("Pharmacist")

View File

@@ -18,7 +18,7 @@
Beacon.invisibility = INVISIBILITY_MAXIMUM Beacon.invisibility = INVISIBILITY_MAXIMUM
Beacon.loc = T Beacon.loc = T
hide(T.intact) hide(!T.is_plating())
Destroy() Destroy()
if(Beacon) if(Beacon)

View File

@@ -85,10 +85,8 @@
if(istype(new_turf, /turf/simulated/floor)) if(istype(new_turf, /turf/simulated/floor))
var/turf/simulated/floor/T = new_turf var/turf/simulated/floor/T = new_turf
if(!T.is_plating()) if(!T.is_plating())
if(!T.broken && !T.burnt) T.make_plating(!(T.broken || T.burnt))
new T.floor_type(T) return new_turf.is_plating()
T.make_plating()
return !new_turf.intact
/obj/machinery/cablelayer/proc/layCable(var/turf/new_turf,var/M_Dir) /obj/machinery/cablelayer/proc/layCable(var/turf/new_turf,var/M_Dir)
if(!on) if(!on)

View File

@@ -5,7 +5,6 @@
icon_state = "sleeper_0" icon_state = "sleeper_0"
density = 1 density = 1
anchored = 1 anchored = 1
var/orient = "LEFT" // "RIGHT" changes the dir suffix to "-r"
var/mob/living/carbon/human/occupant = null var/mob/living/carbon/human/occupant = null
var/list/available_chemicals = list("inaprovaline" = "Inaprovaline", "stoxin" = "Soporific", "paracetamol" = "Paracetamol", "anti_toxin" = "Dylovene", "dexalin" = "Dexalin") var/list/available_chemicals = list("inaprovaline" = "Inaprovaline", "stoxin" = "Soporific", "paracetamol" = "Paracetamol", "anti_toxin" = "Dylovene", "dexalin" = "Dexalin")
var/obj/item/weapon/reagent_containers/glass/beaker = null var/obj/item/weapon/reagent_containers/glass/beaker = null
@@ -39,7 +38,7 @@
toggle_filter() toggle_filter()
/obj/machinery/sleeper/update_icon() /obj/machinery/sleeper/update_icon()
icon_state = "sleeper_[occupant ? "1" : "0"][orient == "RIGHT" ? "-r" : ""]" icon_state = "sleeper_[occupant ? "1" : "0"]"
/obj/machinery/sleeper/attack_hand(var/mob/user) /obj/machinery/sleeper/attack_hand(var/mob/user)
if(..()) if(..())

View File

@@ -37,6 +37,11 @@
path = /obj/item/device/flashlight path = /obj/item/device/flashlight
category = "General" category = "General"
/datum/autolathe/recipe/floor_light
name = "floor light"
path = /obj/machinery/floor_light
category = "General"
/datum/autolathe/recipe/extinguisher /datum/autolathe/recipe/extinguisher
name = "extinguisher" name = "extinguisher"
path = /obj/item/weapon/extinguisher path = /obj/item/weapon/extinguisher

View File

@@ -19,7 +19,7 @@
brute_dam_coeff = 0.5 brute_dam_coeff = 0.5
var/atom/movable/load = null // the loaded crate (usually) var/atom/movable/load = null // the loaded crate (usually)
var/beacon_freq = 1400 var/beacon_freq = 1400
var/control_freq = AI_FREQ var/control_freq = BOT_FREQ
suffix = "" suffix = ""

View File

@@ -1,10 +1,9 @@
/obj/machinery/camera /obj/machinery/camera
var/list/motionTargets = list() var/list/motionTargets = list()
var/detectTime = 0 var/detectTime = 0
var/area/ai_monitored/area_motion = null var/area/ai_monitored/area_motion = null
var/alarm_delay = 100 // Don't forget, there's another 10 seconds in queueAlarm() var/alarm_delay = 100 // Don't forget, there's another 10 seconds in queueAlarm()
flags = PROXMOVE
/obj/machinery/camera/process() /obj/machinery/camera/process()
// motion camera event loop // motion camera event loop

View File

@@ -2,8 +2,8 @@
/obj/machinery/atmospherics/unary/cryo_cell /obj/machinery/atmospherics/unary/cryo_cell
name = "cryo cell" name = "cryo cell"
icon = 'icons/obj/cryogenics.dmi' icon = 'icons/obj/cryogenics.dmi' // map only
icon_state = "pod0" icon_state = "pod_preview"
density = 1 density = 1
anchored = 1.0 anchored = 1.0
layer = 2.8 layer = 2.8
@@ -22,6 +22,8 @@
/obj/machinery/atmospherics/unary/cryo_cell/New() /obj/machinery/atmospherics/unary/cryo_cell/New()
..() ..()
icon = 'icons/obj/cryogenics_split.dmi'
update_icon()
initialize_directions = dir initialize_directions = dir
/obj/machinery/atmospherics/unary/cryo_cell/Destroy() /obj/machinery/atmospherics/unary/cryo_cell/Destroy()
@@ -193,12 +195,28 @@
/obj/machinery/atmospherics/unary/cryo_cell/update_icon() /obj/machinery/atmospherics/unary/cryo_cell/update_icon()
overlays.Cut() overlays.Cut()
icon_state = "pod[on]" icon_state = "pod[on]"
var/image/I
I = image(icon, "pod[on]_top")
I.layer = 5 // this needs to be fairly high so it displays over most things, but it needs to be under lighting (at 10)
I.pixel_z = 32
overlays += I
if(occupant) if(occupant)
var/image/pickle = image(occupant.icon, occupant.icon_state) var/image/pickle = image(occupant.icon, occupant.icon_state)
pickle.overlays = occupant.overlays pickle.overlays = occupant.overlays
pickle.pixel_y = 20 pickle.pixel_z = 18
pickle.layer = 5
overlays += pickle overlays += pickle
overlays += "lid[on]"
I = image(icon, "lid[on]")
I.layer = 5
overlays += I
I = image(icon, "lid[on]_top")
I.layer = 5
I.pixel_z = 32
overlays += I
/obj/machinery/atmospherics/unary/cryo_cell/proc/process_occupant() /obj/machinery/atmospherics/unary/cryo_cell/proc/process_occupant()
if(air_contents.total_moles < 10) if(air_contents.total_moles < 10)

View File

@@ -22,6 +22,7 @@
//Used for logging people entering cryosleep and important items they are carrying. //Used for logging people entering cryosleep and important items they are carrying.
var/list/frozen_crew = list() var/list/frozen_crew = list()
var/list/frozen_items = list() var/list/frozen_items = list()
var/list/_admin_logs = list() // _ so it shows first in VV
var/storage_type = "crewmembers" var/storage_type = "crewmembers"
var/storage_name = "Cryogenic Oversight Control" var/storage_name = "Cryogenic Oversight Control"
@@ -146,20 +147,7 @@
icon = 'icons/obj/Cryogenic2.dmi' icon = 'icons/obj/Cryogenic2.dmi'
icon_state = "cryo_rear" icon_state = "cryo_rear"
anchored = 1 anchored = 1
dir = WEST
var/orient_right = null //Flips the sprite.
/obj/structure/cryofeed/right
orient_right = 1
icon_state = "cryo_rear-r"
/obj/structure/cryofeed/New()
if(orient_right)
icon_state = "cryo_rear-r"
else
icon_state = "cryo_rear"
..()
//Cryopods themselves. //Cryopods themselves.
/obj/machinery/cryopod /obj/machinery/cryopod
@@ -169,6 +157,7 @@
icon_state = "body_scanner_0" icon_state = "body_scanner_0"
density = 1 density = 1
anchored = 1 anchored = 1
dir = WEST
var/base_icon_state = "body_scanner_0" var/base_icon_state = "body_scanner_0"
var/occupied_icon_state = "body_scanner_1" var/occupied_icon_state = "body_scanner_1"
@@ -179,7 +168,6 @@
var/disallow_occupant_types = list() var/disallow_occupant_types = list()
var/mob/occupant = null // Person waiting to be despawned. var/mob/occupant = null // Person waiting to be despawned.
var/orient_right = null // Flips the sprite.
var/time_till_despawn = 18000 // 30 minutes-ish safe period before being despawned. var/time_till_despawn = 18000 // 30 minutes-ish safe period before being despawned.
var/time_entered = 0 // Used to keep track of the safe period. var/time_entered = 0 // Used to keep track of the safe period.
var/obj/item/device/radio/intercom/announce // var/obj/item/device/radio/intercom/announce //
@@ -203,10 +191,6 @@
/obj/item/weapon/storage/internal /obj/item/weapon/storage/internal
) )
/obj/machinery/cryopod/right
orient_right = 1
icon_state = "body_scanner_0-r"
/obj/machinery/cryopod/robot /obj/machinery/cryopod/robot
name = "robotic storage unit" name = "robotic storage unit"
desc = "A storage unit for robots." desc = "A storage unit for robots."
@@ -220,18 +204,8 @@
allow_occupant_types = list(/mob/living/silicon/robot) allow_occupant_types = list(/mob/living/silicon/robot)
disallow_occupant_types = list(/mob/living/silicon/robot/drone) disallow_occupant_types = list(/mob/living/silicon/robot/drone)
/obj/machinery/cryopod/robot/right
orient_right = 1
icon_state = "pod_0-r"
/obj/machinery/cryopod/New() /obj/machinery/cryopod/New()
announce = new /obj/item/device/radio/intercom(src) announce = new /obj/item/device/radio/intercom(src)
if(orient_right)
icon_state = "[base_icon_state]-r"
else
icon_state = base_icon_state
..() ..()
/obj/machinery/cryopod/Destroy() /obj/machinery/cryopod/Destroy()
@@ -382,22 +356,22 @@
if ((G.fields["name"] == occupant.real_name)) if ((G.fields["name"] == occupant.real_name))
qdel(G) qdel(G)
if(orient_right)
icon_state = "[base_icon_state]-r"
else
icon_state = base_icon_state icon_state = base_icon_state
//TODO: Check objectives/mode, update new targets if this mob is the target, spawn new antags? //TODO: Check objectives/mode, update new targets if this mob is the target, spawn new antags?
//This should guarantee that ghosts don't spawn.
occupant.ckey = null
//Make an announcement and log the person entering storage. //Make an announcement and log the person entering storage.
control_computer.frozen_crew += "[occupant.real_name], [occupant.mind.role_alt_title] - [worldtime2text()]" control_computer.frozen_crew += "[occupant.real_name], [occupant.mind.role_alt_title] - [worldtime2text()]"
control_computer._admin_logs += "[key_name(occupant)] ([occupant.mind.role_alt_title]) at [worldtime2text()]"
log_and_message_admins("[key_name(occupant)] ([occupant.mind.role_alt_title]) entered cryostorage.")
announce.autosay("[occupant.real_name], [occupant.mind.role_alt_title], [on_store_message]", "[on_store_name]") announce.autosay("[occupant.real_name], [occupant.mind.role_alt_title], [on_store_message]", "[on_store_name]")
visible_message("<span class='notice'>\The [initial(name)] hums and hisses as it moves [occupant.real_name] into storage.</span>", 3) visible_message("<span class='notice'>\The [initial(name)] hums and hisses as it moves [occupant.real_name] into storage.</span>", 3)
//This should guarantee that ghosts don't spawn.
occupant.ckey = null
// Delete the mob. // Delete the mob.
qdel(occupant) qdel(occupant)
set_occupant(null) set_occupant(null)
@@ -440,9 +414,6 @@
M.client.perspective = EYE_PERSPECTIVE M.client.perspective = EYE_PERSPECTIVE
M.client.eye = src M.client.eye = src
if(orient_right)
icon_state = "[occupied_icon_state]-r"
else
icon_state = occupied_icon_state icon_state = occupied_icon_state
M << "<span class='notice'>[on_enter_occupant_message]</span>" M << "<span class='notice'>[on_enter_occupant_message]</span>"
@@ -465,9 +436,6 @@
if(usr.stat != 0) if(usr.stat != 0)
return return
if(orient_right)
icon_state = "[base_icon_state]-r"
else
icon_state = base_icon_state icon_state = base_icon_state
//Eject any items that aren't meant to be in the pod. //Eject any items that aren't meant to be in the pod.
@@ -518,9 +486,6 @@
usr.loc = src usr.loc = src
set_occupant(usr) set_occupant(usr)
if(orient_right)
icon_state = "[occupied_icon_state]-r"
else
icon_state = occupied_icon_state icon_state = occupied_icon_state
usr << "<span class='notice'>[on_enter_occupant_message]</span>" usr << "<span class='notice'>[on_enter_occupant_message]</span>"
@@ -544,9 +509,6 @@
occupant.loc = get_turf(src) occupant.loc = get_turf(src)
set_occupant(null) set_occupant(null)
if(orient_right)
icon_state = "[base_icon_state]-r"
else
icon_state = base_icon_state icon_state = base_icon_state
return return

View File

@@ -1022,6 +1022,9 @@ About the new airlock wires panel:
name = "[istext(assembly.glass) ? "[assembly.glass] airlock" : assembly.base_name]" name = "[istext(assembly.glass) ? "[assembly.glass] airlock" : assembly.base_name]"
//wires //wires
var/turf/T = get_turf(newloc)
if(T && (T.z in config.admin_levels))
secured_wires = 1
if (secured_wires) if (secured_wires)
wires = new/datum/wires/airlock/secure(src) wires = new/datum/wires/airlock/secure(src)
else else

View File

@@ -14,6 +14,7 @@
anchored = 1 anchored = 1
use_power = 1 use_power = 1
idle_power_usage = 2 idle_power_usage = 2
flags = PROXMOVE
/obj/machinery/flasher/portable //Portable version of the flasher. Only flashes when anchored /obj/machinery/flasher/portable //Portable version of the flasher. Only flashes when anchored
name = "portable flasher" name = "portable flasher"
@@ -24,11 +25,6 @@
base_state = "pflash" base_state = "pflash"
density = 1 density = 1
/*
/obj/machinery/flasher/New()
sleep(4) //<--- What the fuck are you doing? D=
src.sd_SetLuminosity(2)
*/
/obj/machinery/flasher/power_change() /obj/machinery/flasher/power_change()
..() ..()
if ( !(stat & NOPOWER) ) if ( !(stat & NOPOWER) )

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()

View File

@@ -10,7 +10,7 @@
var/list/mode = list("dismantle"=0,"laying"=0,"collect"=0) var/list/mode = list("dismantle"=0,"laying"=0,"collect"=0)
/obj/machinery/floorlayer/New() /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) /obj/machinery/floorlayer/Move(new_turf,M_Dir)
@@ -80,10 +80,8 @@
if(istype(new_turf, /turf/simulated/floor)) if(istype(new_turf, /turf/simulated/floor))
var/turf/simulated/floor/T = new_turf var/turf/simulated/floor/T = new_turf
if(!T.is_plating()) if(!T.is_plating())
if(!T.broken && !T.burnt) T.make_plating(!(T.broken || T.burnt))
new T.floor_type(T) return new_turf.is_plating()
T.make_plating()
return !new_turf.intact
/obj/machinery/floorlayer/proc/TakeNewStack() /obj/machinery/floorlayer/proc/TakeNewStack()
for(var/obj/item/stack/tile/tile in contents) for(var/obj/item/stack/tile/tile in contents)

View File

@@ -32,7 +32,7 @@
New() New()
..() ..()
var/turf/T = loc var/turf/T = loc
hide(T.intact) hide(!T.is_plating())
center = T center = T
spawn(10) // must wait for map loading to finish spawn(10) // must wait for map loading to finish

View File

@@ -29,7 +29,7 @@ var/global/list/navbeacons // no I don't like putting this in, but it will do
set_codes() set_codes()
var/turf/T = loc var/turf/T = loc
hide(T.intact) hide(!T.is_plating())
// add beacon to MULE bot beacon list // add beacon to MULE bot beacon list
if(freq == 1400) if(freq == 1400)
@@ -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) attackby(var/obj/item/I, var/mob/user)
var/turf/T = loc var/turf/T = loc
if(T.intact) if(!T.is_plating())
return // prevent intraction when T-scanner revealed return // prevent intraction when T-scanner revealed
if(istype(I, /obj/item/weapon/screwdriver)) 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) interact(var/mob/user, var/ai = 0)
var/turf/T = loc var/turf/T = loc
if(T.intact) if(!T.is_plating())
return // prevent intraction when T-scanner revealed return // prevent intraction when T-scanner revealed
if(!open && !ai) // can't alter controls if not open, unless you're an AI if(!open && !ai) // can't alter controls if not open, unless you're an AI

View File

@@ -61,7 +61,7 @@
sense = 0 sense = 0
colour = rgb(130,130,130) colour = rgb(130,130,130)
if("/turf/simulated/floor/engine") if("/turf/simulated/floor/reinforced")
colour = rgb(128,128,128) colour = rgb(128,128,128)
if("/turf/simulated/wall") if("/turf/simulated/wall")
@@ -208,7 +208,7 @@
colour = rgb(10,10,10) colour = rgb(10,10,10)
sense = 0 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/datum/gas_mixture/environment = T.return_air()
var/turf_total = environment.total_moles var/turf_total = environment.total_moles
var/t1 = turf_total / MOLES_CELLSTANDARD * 175 var/t1 = turf_total / MOLES_CELLSTANDARD * 175

View File

@@ -461,7 +461,7 @@ Buildable meters
P.set_dir(src.dir) P.set_dir(src.dir)
P.initialize_directions = pipe_dir P.initialize_directions = pipe_dir
var/turf/T = P.loc var/turf/T = P.loc
P.level = T.intact ? 2 : 1 P.level = !T.is_plating() ? 2 : 1
P.initialize() P.initialize()
if (deleted(P)) if (deleted(P))
usr << pipefailtext usr << pipefailtext
@@ -480,7 +480,7 @@ Buildable meters
P.set_dir(src.dir) P.set_dir(src.dir)
P.initialize_directions = pipe_dir P.initialize_directions = pipe_dir
var/turf/T = P.loc var/turf/T = P.loc
P.level = T.intact ? 2 : 1 P.level = !T.is_plating() ? 2 : 1
P.initialize() P.initialize()
if (deleted(P)) if (deleted(P))
usr << pipefailtext usr << pipefailtext
@@ -499,7 +499,7 @@ Buildable meters
P.set_dir(src.dir) P.set_dir(src.dir)
P.initialize_directions = pipe_dir P.initialize_directions = pipe_dir
var/turf/T = P.loc var/turf/T = P.loc
P.level = T.intact ? 2 : 1 P.level = !T.is_plating() ? 2 : 1
P.initialize() P.initialize()
if (deleted(P)) if (deleted(P))
usr << pipefailtext usr << pipefailtext
@@ -518,7 +518,7 @@ Buildable meters
P.set_dir(src.dir) P.set_dir(src.dir)
P.initialize_directions = pipe_dir P.initialize_directions = pipe_dir
var/turf/T = P.loc var/turf/T = P.loc
P.level = T.intact ? 2 : 1 P.level = !T.is_plating() ? 2 : 1
P.initialize() P.initialize()
if (deleted(P)) if (deleted(P))
usr << pipefailtext usr << pipefailtext
@@ -536,8 +536,6 @@ Buildable meters
P.set_dir(src.dir) 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 = pipe_dir //this var it's used to know if the pipe is bent or not
P.initialize_directions_he = pipe_dir P.initialize_directions_he = pipe_dir
//var/turf/T = P.loc
//P.level = T.intact ? 2 : 1
P.initialize() P.initialize()
if (deleted(P)) if (deleted(P))
usr << pipefailtext usr << pipefailtext
@@ -557,7 +555,7 @@ Buildable meters
if (pipename) if (pipename)
C.name = pipename C.name = pipename
var/turf/T = C.loc var/turf/T = C.loc
C.level = T.intact ? 2 : 1 C.level = !T.is_plating() ? 2 : 1
C.initialize() C.initialize()
C.build_network() C.build_network()
if (C.node) if (C.node)
@@ -572,7 +570,7 @@ Buildable meters
M.initialize_directions = pipe_dir M.initialize_directions = pipe_dir
//M.New() //M.New()
var/turf/T = M.loc var/turf/T = M.loc
M.level = T.intact ? 2 : 1 M.level = !T.is_plating() ? 2 : 1
M.initialize() M.initialize()
if (deleted(M)) if (deleted(M))
usr << pipefailtext usr << pipefailtext
@@ -595,7 +593,7 @@ Buildable meters
M.initialize_directions = pipe_dir M.initialize_directions = pipe_dir
//M.New() //M.New()
var/turf/T = M.loc var/turf/T = M.loc
M.level = T.intact ? 2 : 1 M.level = !T.is_plating() ? 2 : 1
M.initialize() M.initialize()
if (!M) 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)" 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.initialize_directions = pipe_dir
//M.New() //M.New()
var/turf/T = M.loc var/turf/T = M.loc
M.level = T.intact ? 2 : 1 M.level = !T.is_plating() ? 2 : 1
M.initialize() M.initialize()
if (!M) 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)" 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.initialize_directions = pipe_dir
//M.New() //M.New()
var/turf/T = M.loc var/turf/T = M.loc
M.level = T.intact ? 2 : 1 M.level = !T.is_plating() ? 2 : 1
M.initialize() M.initialize()
if (deleted(M)) if (deleted(M))
usr << pipefailtext usr << pipefailtext
@@ -668,7 +666,7 @@ Buildable meters
M.connect_types = src.connect_types M.connect_types = src.connect_types
//M.New() //M.New()
var/turf/T = M.loc var/turf/T = M.loc
M.level = T.intact ? 2 : 1 M.level = !T.is_plating() ? 2 : 1
M.initialize() M.initialize()
if (!M) 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)" 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.connect_types = src.connect_types
//M.New() //M.New()
var/turf/T = M.loc var/turf/T = M.loc
M.level = T.intact ? 2 : 1 M.level = !T.is_plating() ? 2 : 1
M.initialize() M.initialize()
if (!M) 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)" 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.set_dir(src.dir)
P.initialize_directions = src.get_pdir() P.initialize_directions = src.get_pdir()
P.initialize_directions_he = src.get_hdir() P.initialize_directions_he = src.get_hdir()
//var/turf/T = P.loc
//P.level = T.intact ? 2 : 1
P.initialize() P.initialize()
if (deleted(P)) 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)" 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) if (pipename)
V.name = pipename V.name = pipename
var/turf/T = V.loc var/turf/T = V.loc
V.level = T.intact ? 2 : 1 V.level = !T.is_plating() ? 2 : 1
V.initialize() V.initialize()
V.build_network() V.build_network()
if (V.node) if (V.node)
@@ -755,7 +751,7 @@ Buildable meters
if (pipename) if (pipename)
V.name = pipename V.name = pipename
var/turf/T = V.loc var/turf/T = V.loc
V.level = T.intact ? 2 : 1 V.level = !T.is_plating() ? 2 : 1
V.initialize() V.initialize()
V.build_network() V.build_network()
if (V.node1) if (V.node1)
@@ -774,7 +770,7 @@ Buildable meters
if (pipename) if (pipename)
P.name = pipename P.name = pipename
var/turf/T = P.loc var/turf/T = P.loc
P.level = T.intact ? 2 : 1 P.level = !T.is_plating() ? 2 : 1
P.initialize() P.initialize()
P.build_network() P.build_network()
if (P.node1) if (P.node1)
@@ -791,7 +787,7 @@ Buildable meters
if (pipename) if (pipename)
P.name = pipename P.name = pipename
var/turf/T = P.loc var/turf/T = P.loc
P.level = T.intact ? 2 : 1 P.level = !T.is_plating() ? 2 : 1
P.initialize() P.initialize()
P.build_network() P.build_network()
if (P.node1) if (P.node1)
@@ -811,7 +807,7 @@ Buildable meters
if (pipename) if (pipename)
P.name = pipename P.name = pipename
var/turf/T = P.loc var/turf/T = P.loc
P.level = T.intact ? 2 : 1 P.level = !T.is_plating() ? 2 : 1
P.initialize() P.initialize()
P.build_network() P.build_network()
if (P.node1) if (P.node1)
@@ -831,7 +827,7 @@ Buildable meters
if (pipename) if (pipename)
P.name = pipename P.name = pipename
var/turf/T = P.loc var/turf/T = P.loc
P.level = T.intact ? 2 : 1 P.level = !T.is_plating() ? 2 : 1
P.initialize() P.initialize()
P.build_network() P.build_network()
if (P.node1) if (P.node1)
@@ -851,7 +847,7 @@ Buildable meters
if (pipename) if (pipename)
P.name = pipename P.name = pipename
var/turf/T = P.loc var/turf/T = P.loc
P.level = T.intact ? 2 : 1 P.level = !T.is_plating() ? 2 : 1
P.initialize() P.initialize()
P.build_network() P.build_network()
if (P.node1) if (P.node1)
@@ -871,7 +867,7 @@ Buildable meters
if (pipename) if (pipename)
P.name = pipename P.name = pipename
var/turf/T = P.loc var/turf/T = P.loc
P.level = T.intact ? 2 : 1 P.level = !T.is_plating() ? 2 : 1
P.initialize() P.initialize()
P.build_network() P.build_network()
if (P.node1) if (P.node1)
@@ -891,7 +887,7 @@ Buildable meters
if (pipename) if (pipename)
S.name = pipename S.name = pipename
var/turf/T = S.loc var/turf/T = S.loc
S.level = T.intact ? 2 : 1 S.level = !T.is_plating() ? 2 : 1
S.initialize() S.initialize()
S.build_network() S.build_network()
if (S.node) if (S.node)
@@ -903,7 +899,7 @@ Buildable meters
P.set_dir(src.dir) P.set_dir(src.dir)
P.initialize_directions = pipe_dir P.initialize_directions = pipe_dir
var/turf/T = P.loc var/turf/T = P.loc
P.level = T.intact ? 2 : 1 P.level = !T.is_plating() ? 2 : 1
P.initialize() P.initialize()
if (deleted(P)) if (deleted(P))
usr << pipefailtext usr << pipefailtext
@@ -923,7 +919,7 @@ Buildable meters
if (pipename) if (pipename)
V.name = pipename V.name = pipename
var/turf/T = V.loc var/turf/T = V.loc
V.level = T.intact ? 2 : 1 V.level = !T.is_plating() ? 2 : 1
V.initialize() V.initialize()
V.build_network() V.build_network()
if (V.node1) if (V.node1)
@@ -943,7 +939,7 @@ Buildable meters
if (pipename) if (pipename)
V.name = pipename V.name = pipename
var/turf/T = V.loc var/turf/T = V.loc
V.level = T.intact ? 2 : 1 V.level = !T.is_plating() ? 2 : 1
V.initialize() V.initialize()
V.build_network() V.build_network()
if (V.node1) if (V.node1)
@@ -993,7 +989,7 @@ Buildable meters
if (pipename) if (pipename)
P.name = pipename P.name = pipename
var/turf/T = P.loc var/turf/T = P.loc
P.level = T.intact ? 2 : 1 P.level = !T.is_plating() ? 2 : 1
P.initialize() P.initialize()
P.build_network() P.build_network()
if (P.node1) if (P.node1)
@@ -1010,7 +1006,7 @@ Buildable meters
if (pipename) if (pipename)
P.name = pipename P.name = pipename
var/turf/T = P.loc var/turf/T = P.loc
P.level = T.intact ? 2 : 1 P.level = !T.is_plating() ? 2 : 1
P.initialize() P.initialize()
P.build_network() P.build_network()
if (P.node1) if (P.node1)
@@ -1027,7 +1023,7 @@ Buildable meters
if (pipename) if (pipename)
C.name = pipename C.name = pipename
var/turf/T = C.loc var/turf/T = C.loc
C.level = T.intact ? 2 : 1 C.level = !T.is_plating() ? 2 : 1
C.initialize() C.initialize()
C.build_network() C.build_network()
if (C.node) if (C.node)
@@ -1041,7 +1037,7 @@ Buildable meters
if (pipename) if (pipename)
P.name = pipename P.name = pipename
var/turf/T = P.loc var/turf/T = P.loc
P.level = T.intact ? 2 : 1 P.level = !T.is_plating() ? 2 : 1
P.initialize() P.initialize()
P.build_network() P.build_network()
if (P.node1) if (P.node1)
@@ -1057,7 +1053,7 @@ Buildable meters
if (pipename) if (pipename)
P.name = pipename P.name = pipename
var/turf/T = P.loc var/turf/T = P.loc
P.level = T.intact ? 2 : 1 P.level = !T.is_plating() ? 2 : 1
P.initialize() P.initialize()
P.build_network() P.build_network()
if (P.node1) if (P.node1)
@@ -1073,7 +1069,7 @@ Buildable meters
if (pipename) if (pipename)
P.name = pipename P.name = pipename
var/turf/T = P.loc var/turf/T = P.loc
P.level = T.intact ? 2 : 1 P.level = !T.is_plating() ? 2 : 1
P.initialize() P.initialize()
P.build_network() P.build_network()
if (P.node1) if (P.node1)
@@ -1089,7 +1085,7 @@ Buildable meters
if (pipename) if (pipename)
P.name = pipename P.name = pipename
var/turf/T = P.loc var/turf/T = P.loc
P.level = T.intact ? 2 : 1 P.level = !T.is_plating() ? 2 : 1
P.initialize() P.initialize()
P.build_network() P.build_network()
if (P.node1) if (P.node1)
@@ -1105,7 +1101,7 @@ Buildable meters
if (pipename) if (pipename)
P.name = pipename P.name = pipename
var/turf/T = P.loc var/turf/T = P.loc
P.level = T.intact ? 2 : 1 P.level = !T.is_plating() ? 2 : 1
P.initialize() P.initialize()
P.build_network() P.build_network()
if (P.node1) if (P.node1)
@@ -1121,7 +1117,7 @@ Buildable meters
if (pipename) if (pipename)
P.name = pipename P.name = pipename
var/turf/T = P.loc var/turf/T = P.loc
P.level = T.intact ? 2 : 1 P.level = !T.is_plating() ? 2 : 1
P.initialize() P.initialize()
P.build_network() P.build_network()
if (P.node1) if (P.node1)
@@ -1134,13 +1130,13 @@ Buildable meters
if(PIPE_OMNI_MIXER) if(PIPE_OMNI_MIXER)
var/obj/machinery/atmospherics/omni/mixer/P = new(loc) var/obj/machinery/atmospherics/omni/mixer/P = new(loc)
var/turf/T = P.loc var/turf/T = P.loc
P.level = T.intact ? 2 : 1 P.level = !T.is_plating() ? 2 : 1
P.initialize() P.initialize()
P.build_network() P.build_network()
if(PIPE_OMNI_FILTER) if(PIPE_OMNI_FILTER)
var/obj/machinery/atmospherics/omni/filter/P = new(loc) var/obj/machinery/atmospherics/omni/filter/P = new(loc)
var/turf/T = P.loc var/turf/T = P.loc
P.level = T.intact ? 2 : 1 P.level = !T.is_plating() ? 2 : 1
P.initialize() P.initialize()
P.build_network() P.build_network()

View File

@@ -110,10 +110,8 @@
if(istype(new_turf, /turf/simulated/floor)) if(istype(new_turf, /turf/simulated/floor))
var/turf/simulated/floor/T = new_turf var/turf/simulated/floor/T = new_turf
if(!T.is_plating()) if(!T.is_plating())
if(!T.broken && !T.burnt) T.make_plating(!(T.broken || T.burnt))
new T.floor_type(T) return new_turf.is_plating()
T.make_plating()
return !new_turf.intact
/obj/machinery/pipelayer/proc/layPipe(var/turf/w_turf,var/M_Dir,var/old_dir) /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) if(!on || !(M_Dir in list(1, 2, 4, 8)) || M_Dir==old_dir)

View File

@@ -56,7 +56,7 @@
id = "Receiver A" id = "Receiver A"
network = "tcommsat" network = "tcommsat"
autolinkers = list("receiverA") // link to relay autolinkers = list("receiverA") // link to relay
freq_listening = list(SCI_FREQ, MED_FREQ, SUP_FREQ, SRV_FREQ, COMM_FREQ, ENG_FREQ, SEC_FREQ) freq_listening = list(AI_FREQ, SCI_FREQ, MED_FREQ, SUP_FREQ, SRV_FREQ, COMM_FREQ, ENG_FREQ, SEC_FREQ)
//Common and other radio frequencies for people to freely use //Common and other radio frequencies for people to freely use
New() New()
@@ -88,7 +88,7 @@
/obj/machinery/telecomms/bus/preset_two/New() /obj/machinery/telecomms/bus/preset_two/New()
for(var/i = 1441, i < 1489, i += 2) for(var/i = 1441, i < 1489, i += 2)
if(i == AI_FREQ || i == PUB_FREQ) if(i == PUB_FREQ)
continue continue
freq_listening |= i freq_listening |= i
..() ..()

View File

@@ -912,8 +912,8 @@
desc = "A kitchen and restaurant equipment vendor." desc = "A kitchen and restaurant equipment vendor."
product_ads = "Mm, food stuffs!;Food and food accessories.;Get your plates!;You like forks?;I like forks.;Woo, utensils.;You don't really need these..." product_ads = "Mm, food stuffs!;Food and food accessories.;Get your plates!;You like forks?;I like forks.;Woo, utensils.;You don't really need these..."
icon_state = "dinnerware" icon_state = "dinnerware"
products = list(/obj/item/weapon/tray = 8,/obj/item/weapon/material/kitchen/utensil/fork = 6,/obj/item/weapon/material/knife = 3,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass = 8,/obj/item/clothing/suit/chef/classic = 2) products = list(/obj/item/weapon/tray = 8,/obj/item/weapon/material/kitchen/utensil/fork = 6, /obj/item/weapon/material/kitchen/utensil/knife = 6, /obj/item/weapon/material/kitchen/utensil/spoon = 6, /obj/item/weapon/material/knife = 3,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass = 8,/obj/item/clothing/suit/chef/classic = 2)
contraband = list(/obj/item/weapon/material/kitchen/utensil/spoon = 2,/obj/item/weapon/material/kitchen/utensil/knife = 2,/obj/item/weapon/material/kitchen/rollingpin = 2, /obj/item/weapon/material/knife/butch = 2) contraband = list(/obj/item/weapon/material/kitchen/rollingpin = 2, /obj/item/weapon/material/knife/butch = 2)
/obj/machinery/vending/sovietsoda /obj/machinery/vending/sovietsoda
name = "BODA" name = "BODA"

View File

@@ -333,10 +333,8 @@
if(istype(new_turf, /turf/simulated/floor)) if(istype(new_turf, /turf/simulated/floor))
var/turf/simulated/floor/T = new_turf var/turf/simulated/floor/T = new_turf
if(!T.is_plating()) if(!T.is_plating())
if(!T.broken && !T.burnt) T.make_plating(!(T.broken || T.burnt))
new T.floor_type(T) return new_turf.is_plating()
T.make_plating()
return !new_turf.intact
proc/layCable(var/turf/new_turf) proc/layCable(var/turf/new_turf)
if(equip_ready || !istype(new_turf) || !dismantleFloor(new_turf)) if(equip_ready || !istype(new_turf) || !dismantleFloor(new_turf))

View File

@@ -107,8 +107,8 @@
for(var/obj/item/weapon/ore/ore in range(chassis,1)) for(var/obj/item/weapon/ore/ore in range(chassis,1))
if(get_dir(chassis,ore)&chassis.dir) if(get_dir(chassis,ore)&chassis.dir)
ore.Move(ore_box) ore.Move(ore_box)
else if(istype(target, /turf/simulated/floor/plating/airless/asteroid)) else if(istype(target, /turf/simulated/floor/asteroid))
for(var/turf/simulated/floor/plating/airless/asteroid/M in range(chassis,1)) for(var/turf/simulated/floor/asteroid/M in range(chassis,1))
if(get_dir(chassis,M)&chassis.dir) if(get_dir(chassis,M)&chassis.dir)
M.gets_dug() M.gets_dug()
log_message("Drilled through [target]") log_message("Drilled through [target]")
@@ -127,7 +127,7 @@
name = "diamond drill" 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)" 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" 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) construction_cost = list(DEFAULT_WALL_MATERIAL=10000,"diamond"=6500)
equip_cooldown = 20 equip_cooldown = 20
force = 15 force = 15
@@ -161,8 +161,8 @@
for(var/obj/item/weapon/ore/ore in range(chassis,1)) for(var/obj/item/weapon/ore/ore in range(chassis,1))
if(get_dir(chassis,ore)&chassis.dir) if(get_dir(chassis,ore)&chassis.dir)
ore.Move(ore_box) ore.Move(ore_box)
else if(istype(target,/turf/simulated/floor/plating/airless/asteroid)) else if(istype(target,/turf/simulated/floor/asteroid))
for(var/turf/simulated/floor/plating/airless/asteroid/M in range(target,1)) for(var/turf/simulated/floor/asteroid/M in range(target,1))
M.gets_dug() M.gets_dug()
log_message("Drilled through [target]") log_message("Drilled through [target]")
if(locate(/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp) in chassis.equipment) if(locate(/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp) in chassis.equipment)
@@ -835,7 +835,7 @@
name = "phoron generator" name = "phoron generator"
desc = "Generates power using solid phoron as fuel. Pollutes the environment." desc = "Generates power using solid phoron as fuel. Pollutes the environment."
icon_state = "tesla" 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 equip_cooldown = 10
energy_drain = 0 energy_drain = 0
range = MELEE range = MELEE
@@ -973,7 +973,7 @@
name = "\improper ExoNuclear reactor" name = "\improper ExoNuclear reactor"
desc = "Generates power using uranium. Pollutes the environment." desc = "Generates power using uranium. Pollutes the environment."
icon_state = "tesla" 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) construction_cost = list(DEFAULT_WALL_MATERIAL=10000,"silver"=500,"glass"=1000)
max_fuel = 50000 max_fuel = 50000
fuel_per_cycle_idle = 10 fuel_per_cycle_idle = 10
@@ -1069,7 +1069,7 @@
name = "passenger compartment" name = "passenger compartment"
desc = "A mountable passenger compartment for exo-suits. Rather cramped." desc = "A mountable passenger compartment for exo-suits. Rather cramped."
icon_state = "mecha_abooster_ccw" 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 energy_drain = 10
range = MELEE range = MELEE
construction_cost = list(DEFAULT_WALL_MATERIAL=5000,"glass"=5000) construction_cost = list(DEFAULT_WALL_MATERIAL=5000,"glass"=5000)

View File

@@ -1,196 +1,98 @@
/turf/simulated/floor/mech_bay_recharge_floor /obj/machinery/mech_recharger
name = "Mech Bay Recharge Station" name = "mech recharger"
desc = "A mech recharger, built into the floor."
icon = 'icons/mecha/mech_bay.dmi' icon = 'icons/mecha/mech_bay.dmi'
icon_state = "recharge_floor" icon_state = "recharge_floor"
var/obj/machinery/mech_bay_recharge_port/recharge_port density = 0
var/obj/machinery/computer/mech_bay_power_console/recharge_console layer = TURF_LAYER + 0.1
var/obj/mecha/recharging_mecha = null
/turf/simulated/floor/mech_bay_recharge_floor/Entered(var/obj/mecha/mecha) var/obj/mecha/charging = null
. = ..() var/charge = 45
if(istype(mecha)) var/repair = 0
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
/turf/simulated/floor/mech_bay_recharge_floor/Exited(atom) /obj/machinery/mech_recharger/New()
. = ..()
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)
..() ..()
if(floor_type) component_parts = list()
icon_state = "recharge_floor"
else
icon_state = "support_lattice"
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 RefreshParts()
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
/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) 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_recharger/process()
..()
if(!charging)
return
if(charging.loc != loc) // Could be qdel or teleport or something
stop_charging()
return
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>")
else
done = 0
if(done)
stop_charging()
return return
/obj/machinery/mech_bay_recharge_port/proc/start_charge(var/obj/mecha/recharging_mecha) /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)) if(stat & (NOPOWER | BROKEN))
recharging_mecha.occupant_message("<font color='red'>Power port not responding. Terminating.</font>") M.occupant_message("<span class='warning'>Power port not responding. Terminating.</span>")
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() return
if(recharge_console && !recharge_console.stat) if(M.cell)
recharge_console.icon_screen = initial(recharge_console.icon_screen) M.occupant_message("<span class='notice'>Now charging...</span>")
pr_recharger.stop() charging = M
return return
/obj/machinery/mech_bay_recharge_port/proc/active() /obj/machinery/mech_recharger/proc/stop_charging()
if(pr_recharger.active()) if(!charging)
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 return
charging = null
/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>")
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(..())
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)
/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)

View File

@@ -43,7 +43,7 @@
name="Ripley Torso" name="Ripley Torso"
desc="A torso part of Ripley APLU. Contains power unit, processing core and life support systems." desc="A torso part of Ripley APLU. Contains power unit, processing core and life support systems."
icon_state = "ripley_harness" 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_time = 200
construction_cost = list(DEFAULT_WALL_MATERIAL=40000,"glass"=15000) construction_cost = list(DEFAULT_WALL_MATERIAL=40000,"glass"=15000)
@@ -51,7 +51,7 @@
name="Ripley Left Arm" name="Ripley Left Arm"
desc="A Ripley APLU left arm. Data and power sockets are compatible with most exosuit tools." desc="A Ripley APLU left arm. Data and power sockets are compatible with most exosuit tools."
icon_state = "ripley_l_arm" 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_time = 150
construction_cost = list(DEFAULT_WALL_MATERIAL=25000) construction_cost = list(DEFAULT_WALL_MATERIAL=25000)
@@ -59,7 +59,7 @@
name="Ripley Right Arm" name="Ripley Right Arm"
desc="A Ripley APLU right arm. Data and power sockets are compatible with most exosuit tools." desc="A Ripley APLU right arm. Data and power sockets are compatible with most exosuit tools."
icon_state = "ripley_r_arm" 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_time = 150
construction_cost = list(DEFAULT_WALL_MATERIAL=25000) construction_cost = list(DEFAULT_WALL_MATERIAL=25000)
@@ -67,7 +67,7 @@
name="Ripley Left Leg" name="Ripley Left Leg"
desc="A Ripley APLU left leg. Contains somewhat complex servodrives and balance maintaining systems." desc="A Ripley APLU left leg. Contains somewhat complex servodrives and balance maintaining systems."
icon_state = "ripley_l_leg" 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_time = 150
construction_cost = list(DEFAULT_WALL_MATERIAL=30000) construction_cost = list(DEFAULT_WALL_MATERIAL=30000)
@@ -75,7 +75,7 @@
name="Ripley Right Leg" name="Ripley Right Leg"
desc="A Ripley APLU right leg. Contains somewhat complex servodrives and balance maintaining systems." desc="A Ripley APLU right leg. Contains somewhat complex servodrives and balance maintaining systems."
icon_state = "ripley_r_leg" 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_time = 150
construction_cost = list(DEFAULT_WALL_MATERIAL=30000) construction_cost = list(DEFAULT_WALL_MATERIAL=30000)
@@ -93,7 +93,7 @@
name="Gygax Torso" name="Gygax Torso"
desc="A torso part of Gygax. Contains power unit, processing core and life support systems. Has an additional equipment slot." desc="A torso part of Gygax. Contains power unit, processing core and life support systems. Has an additional equipment slot."
icon_state = "gygax_harness" 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_time = 300
construction_cost = list(DEFAULT_WALL_MATERIAL=50000,"glass"=20000) construction_cost = list(DEFAULT_WALL_MATERIAL=50000,"glass"=20000)
@@ -101,7 +101,7 @@
name="Gygax Head" name="Gygax Head"
desc="A Gygax head. Houses advanced surveilance and targeting sensors." desc="A Gygax head. Houses advanced surveilance and targeting sensors."
icon_state = "gygax_head" 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_time = 200
construction_cost = list(DEFAULT_WALL_MATERIAL=20000,"glass"=10000) construction_cost = list(DEFAULT_WALL_MATERIAL=20000,"glass"=10000)
@@ -109,7 +109,7 @@
name="Gygax Left Arm" name="Gygax Left Arm"
desc="A Gygax left arm. Data and power sockets are compatible with most exosuit tools and weapons." desc="A Gygax left arm. Data and power sockets are compatible with most exosuit tools and weapons."
icon_state = "gygax_l_arm" 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_time = 200
construction_cost = list(DEFAULT_WALL_MATERIAL=30000) construction_cost = list(DEFAULT_WALL_MATERIAL=30000)
@@ -117,28 +117,28 @@
name="Gygax Right Arm" name="Gygax Right Arm"
desc="A Gygax right arm. Data and power sockets are compatible with most exosuit tools and weapons." desc="A Gygax right arm. Data and power sockets are compatible with most exosuit tools and weapons."
icon_state = "gygax_r_arm" 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_time = 200
construction_cost = list(DEFAULT_WALL_MATERIAL=30000) construction_cost = list(DEFAULT_WALL_MATERIAL=30000)
/obj/item/mecha_parts/part/gygax_left_leg /obj/item/mecha_parts/part/gygax_left_leg
name="Gygax Left Leg" name="Gygax Left Leg"
icon_state = "gygax_l_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_time = 200
construction_cost = list(DEFAULT_WALL_MATERIAL=35000) construction_cost = list(DEFAULT_WALL_MATERIAL=35000)
/obj/item/mecha_parts/part/gygax_right_leg /obj/item/mecha_parts/part/gygax_right_leg
name="Gygax Right Leg" name="Gygax Right Leg"
icon_state = "gygax_r_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_time = 200
construction_cost = list(DEFAULT_WALL_MATERIAL=35000) construction_cost = list(DEFAULT_WALL_MATERIAL=35000)
/obj/item/mecha_parts/part/gygax_armour /obj/item/mecha_parts/part/gygax_armour
name="Gygax Armour Plates" name="Gygax Armour Plates"
icon_state = "gygax_armour" 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_time = 600
construction_cost = list(DEFAULT_WALL_MATERIAL=50000,"diamond"=10000) construction_cost = list(DEFAULT_WALL_MATERIAL=50000,"diamond"=10000)
@@ -156,49 +156,49 @@
/obj/item/mecha_parts/part/durand_torso /obj/item/mecha_parts/part/durand_torso
name="Durand Torso" name="Durand Torso"
icon_state = "durand_harness" 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_time = 300
construction_cost = list(DEFAULT_WALL_MATERIAL=55000,"glass"=20000,"silver"=10000) construction_cost = list(DEFAULT_WALL_MATERIAL=55000,"glass"=20000,"silver"=10000)
/obj/item/mecha_parts/part/durand_head /obj/item/mecha_parts/part/durand_head
name="Durand Head" name="Durand Head"
icon_state = "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_time = 200
construction_cost = list(DEFAULT_WALL_MATERIAL=25000,"glass"=10000,"silver"=3000) construction_cost = list(DEFAULT_WALL_MATERIAL=25000,"glass"=10000,"silver"=3000)
/obj/item/mecha_parts/part/durand_left_arm /obj/item/mecha_parts/part/durand_left_arm
name="Durand Left Arm" name="Durand Left Arm"
icon_state = "durand_l_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_time = 200
construction_cost = list(DEFAULT_WALL_MATERIAL=35000,"silver"=3000) construction_cost = list(DEFAULT_WALL_MATERIAL=35000,"silver"=3000)
/obj/item/mecha_parts/part/durand_right_arm /obj/item/mecha_parts/part/durand_right_arm
name="Durand Right Arm" name="Durand Right Arm"
icon_state = "durand_r_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_time = 200
construction_cost = list(DEFAULT_WALL_MATERIAL=35000,"silver"=3000) construction_cost = list(DEFAULT_WALL_MATERIAL=35000,"silver"=3000)
/obj/item/mecha_parts/part/durand_left_leg /obj/item/mecha_parts/part/durand_left_leg
name="Durand Left Leg" name="Durand Left Leg"
icon_state = "durand_l_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_time = 200
construction_cost = list(DEFAULT_WALL_MATERIAL=40000,"silver"=3000) construction_cost = list(DEFAULT_WALL_MATERIAL=40000,"silver"=3000)
/obj/item/mecha_parts/part/durand_right_leg /obj/item/mecha_parts/part/durand_right_leg
name="Durand Right Leg" name="Durand Right Leg"
icon_state = "durand_r_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_time = 200
construction_cost = list(DEFAULT_WALL_MATERIAL=40000,"silver"=3000) construction_cost = list(DEFAULT_WALL_MATERIAL=40000,"silver"=3000)
/obj/item/mecha_parts/part/durand_armour /obj/item/mecha_parts/part/durand_armour
name="Durand Armour Plates" name="Durand Armour Plates"
icon_state = "durand_armour" 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_time = 600
construction_cost = list(DEFAULT_WALL_MATERIAL=50000,"uranium"=10000) construction_cost = list(DEFAULT_WALL_MATERIAL=50000,"uranium"=10000)
@@ -307,7 +307,7 @@
name="Odysseus Torso" name="Odysseus Torso"
desc="A torso part of Odysseus. Contains power unit, processing core and life support systems." desc="A torso part of Odysseus. Contains power unit, processing core and life support systems."
icon_state = "odysseus_torso" 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_time = 180
construction_cost = list(DEFAULT_WALL_MATERIAL=25000) construction_cost = list(DEFAULT_WALL_MATERIAL=25000)
@@ -315,7 +315,7 @@
name="Odysseus Left Arm" name="Odysseus Left Arm"
desc="An Odysseus left arm. Data and power sockets are compatible with most exosuit tools." desc="An Odysseus left arm. Data and power sockets are compatible with most exosuit tools."
icon_state = "odysseus_l_arm" 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_time = 120
construction_cost = list(DEFAULT_WALL_MATERIAL=10000) construction_cost = list(DEFAULT_WALL_MATERIAL=10000)
@@ -323,7 +323,7 @@
name="Odysseus Right Arm" name="Odysseus Right Arm"
desc="An Odysseus right arm. Data and power sockets are compatible with most exosuit tools." desc="An Odysseus right arm. Data and power sockets are compatible with most exosuit tools."
icon_state = "odysseus_r_arm" 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_time = 120
construction_cost = list(DEFAULT_WALL_MATERIAL=10000) construction_cost = list(DEFAULT_WALL_MATERIAL=10000)
@@ -331,7 +331,7 @@
name="Odysseus Left Leg" name="Odysseus Left Leg"
desc="An Odysseus left leg. Contains somewhat complex servodrives and balance maintaining systems." desc="An Odysseus left leg. Contains somewhat complex servodrives and balance maintaining systems."
icon_state = "odysseus_l_leg" 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_time = 130
construction_cost = list(DEFAULT_WALL_MATERIAL=15000) construction_cost = list(DEFAULT_WALL_MATERIAL=15000)
@@ -339,13 +339,13 @@
name="Odysseus Right Leg" name="Odysseus Right Leg"
desc="A Odysseus right leg. Contains somewhat complex servodrives and balance maintaining systems." desc="A Odysseus right leg. Contains somewhat complex servodrives and balance maintaining systems."
icon_state = "odysseus_r_leg" 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_time = 130
construction_cost = list(DEFAULT_WALL_MATERIAL=15000) construction_cost = list(DEFAULT_WALL_MATERIAL=15000)
/*/obj/item/mecha_parts/part/odysseus_armour /*/obj/item/mecha_parts/part/odysseus_armour
name="Odysseus Carapace" name="Odysseus Carapace"
icon_state = "odysseus_armour" 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_time = 200
construction_cost = list(DEFAULT_WALL_MATERIAL=15000)*/ construction_cost = list(DEFAULT_WALL_MATERIAL=15000)*/

View File

@@ -338,6 +338,7 @@ Alien plants should do something if theres a lot of poison
var/health = 100 var/health = 100
var/status = GROWING //can be GROWING, GROWN or BURST; all mutually exclusive var/status = GROWING //can be GROWING, GROWN or BURST; all mutually exclusive
flags = PROXMOVE
/obj/effect/alien/egg/New() /obj/effect/alien/egg/New()
if(config.aliens_allowed) if(config.aliens_allowed)

View File

@@ -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)

View File

@@ -40,7 +40,7 @@
var/mob/living/bot/secbot/active // the active bot; if null, show bot list var/mob/living/bot/secbot/active // the active bot; if null, show bot list
var/list/botstatus // the status signal sent by the bot var/list/botstatus // the status signal sent by the bot
var/control_freq = AI_FREQ var/control_freq = BOT_FREQ
// create a new QM cartridge, and register to receive bot control & beacon message // create a new QM cartridge, and register to receive bot control & beacon message
New() New()
@@ -112,7 +112,7 @@
var/list/beacons var/list/beacons
var/beacon_freq = 1400 var/beacon_freq = 1400
var/control_freq = AI_FREQ var/control_freq = BOT_FREQ
// create a new QM cartridge, and register to receive bot control & beacon message // create a new QM cartridge, and register to receive bot control & beacon message
New() New()

View File

@@ -19,7 +19,7 @@
matter = list(DEFAULT_WALL_MATERIAL = 50,"glass" = 20) 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/telecomms/buffer // simple machine buffer for device linkage
/obj/item/device/debugger/is_used_on(obj/O, mob/user) /obj/item/device/debugger/is_used_on(obj/O, mob/user)

View File

@@ -4,212 +4,193 @@
icon_state = "labeler1" icon_state = "labeler1"
item_state = "flight" item_state = "flight"
var/mode_nice = "standard" var/decal = "remove all decals"
var/mode = "floor" var/paint_dir = "precise"
var/tile_dir_mode = 0 var/paint_colour = "white"
// mode 0 ignore direction; sets dir=0 var/list/decals = list(
// mode 1 all-direction "quarter-turf" = list("path" = /obj/effect/floor_decal/corner, "precise" = 1, "coloured" = 1),
// mode 2 corner selecting the side CW from the selected corner "hazard stripes" = list("path" = /obj/effect/floor_decal/industrial/warning),
// mode 3 cardinal "corner, hazard" = list("path" = /obj/effect/floor_decal/industrial/warning/corner),
// mode 4 warningcorner and warnwhitecorner direction fix "hatched marking" = list("path" = /obj/effect/floor_decal/industrial/hatch),
// mode 5 Opposite corner tiles where the second icon_state is "[mode]_inv" "dotted outline" = list("path" = /obj/effect/floor_decal/industrial/outline, "coloured" = 1),
/obj/item/device/floor_painter/afterattack(atom/A, mob/user as mob, proximity) "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) if(!proximity)
return 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(!F.flooring || !F.flooring.can_paint || F.broken || F.burnt)
if(tile_dir_mode) user << "<span class='warning'>\The [src] cannot paint broken or missing tiles.</span>"
var/D = get_dir(usr, F) return
if(usr.loc == F)
D = usr.dir
switch(tile_dir_mode) var/list/decal_data = decals[decal]
if(1) // All directions accepted var/config_error
F.set_dir(D) if(!islist(decal_data))
F.icon_state = mode config_error = 1
if(2) // Corner mode - diagonal directions converted CW around. var/painting_decal
switch(D) if(!config_error)
if(NORTHEAST) painting_decal = decal_data["path"]
D = EAST if(!ispath(painting_decal))
if(SOUTHEAST) config_error = 1
D = SOUTH
if(SOUTHWEST) if(config_error)
D = WEST user << "<span class='warning'>\The [src] flashes an error light. You might need to reconfigure it.</span>"
if(NORTHWEST) return
D = NORTH
F.set_dir(D) if(F.decals && F.decals.len > 5 && painting_decal != /obj/effect/floor_decal/reset)
F.icon_state = mode user << "<span class='warning'>\The [F] has been painted too much; you need to clear it off.</span>"
if(3) // cardinal directions only. I've adjusted diagonals the same way the facing code does. return
switch(D)
if(NORTHEAST) var/painting_dir = 0
D = EAST if(paint_dir == "precise")
if(SOUTHEAST) if(!decal_data["precise"])
D = EAST painting_dir = user.dir
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 else
F.icon_state = "[mode]_inv" 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 else
F.set_dir(0) painting_dir = NORTH
F.icon_state = mode
else else
usr << "You can't paint that!" 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) /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(choice == "Decal")
if("solid") var/new_decal = input("Select a decal.") as null|anything in decals
tile_dir_mode = 0 if(new_decal && !isnull(decals[new_decal]))
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") decal = new_decal
if(design == "standard") user << "<span class='notice'>You set \the [src] decal to '[decal]'.</span>"
mode = "floor" else if(choice == "Direction")
mode_nice = "standard" var/new_dir = input("Select a direction.") as null|anything in paint_dirs
return if(new_dir && !isnull(paint_dirs[new_dir]))
if(design == "white") paint_dir = new_dir
mode = "white" user << "<span class='notice'>You set \the [src] direction to '[paint_dir]'.</span>"
mode_nice = "white" else if(choice == "Colour")
return var/new_colour = input("Select a colour.") as null|anything in paint_colours
if(design == "dark") if(new_colour && !isnull(paint_colours[new_colour]))
mode = "dark" paint_colour = new_colour
mode_nice = "dark" user << "<span class='notice'>You set \the [src] colour to '[paint_colour]'.</span>"
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"
/obj/item/device/floor_painter/examine(mob/user) /obj/item/device/floor_painter/examine(mob/user)
..(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>"

View File

@@ -18,6 +18,6 @@
matter = list(DEFAULT_WALL_MATERIAL = 50,"glass" = 20) 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/telecomms/buffer // simple machine buffer for device linkage
var/obj/machinery/clonepod/connecting //same for cryopod linkage var/obj/machinery/clonepod/connecting //same for cryopod linkage

View File

@@ -21,11 +21,6 @@
return return
var/obj/machinery/atmospherics/pipe/P = A 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]) P.change_color(pipe_colors[mode])
/obj/item/device/pipe_painter/attack_self(mob/user as mob) /obj/item/device/pipe_painter/attack_self(mob/user as mob)

View File

@@ -34,7 +34,7 @@
if(istype(I, /obj/item/weapon/screwdriver)) if(istype(I, /obj/item/weapon/screwdriver))
if(mode == 0) if(mode == 0)
var/turf/T = loc var/turf/T = loc
if(isturf(T) && !T.intact) if(isturf(T) && !!T.is_plating())
attached = locate() in T attached = locate() in T
if(!attached) if(!attached)
user << "No exposed cable here to attach to." user << "No exposed cable here to attach to."

View File

@@ -67,3 +67,10 @@
icon_state = "intercom-p" icon_state = "intercom-p"
else else
icon_state = "intercom" icon_state = "intercom"
/obj/item/device/radio/intercom/locked
freerange = 1
var/locked_frequency
/obj/item/device/radio/intercom/locked/set_frequency()
..(locked_frequency)

View File

@@ -8,6 +8,7 @@ MASS SPECTROMETER
REAGENT SCANNER REAGENT SCANNER
*/ */
/obj/item/device/healthanalyzer /obj/item/device/healthanalyzer
name = "health analyzer" name = "health analyzer"
desc = "A hand-held body scanner able to distinguish vital signs of the subject." 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) 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) /obj/item/device/analyzer/atmosanalyze(var/mob/user)
var/air = user.return_air() var/air = user.return_air()

View File

@@ -14,7 +14,7 @@
throw_range = 15 throw_range = 15
throw_speed = 3 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/item/device/radio/spy/radio
var/obj/machinery/camera/spy/camera var/obj/machinery/camera/spy/camera
@@ -53,7 +53,7 @@
w_class = 2.0 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/operating = 0
var/obj/item/device/radio/spy/radio var/obj/item/device/radio/spy/radio

View File

@@ -105,7 +105,7 @@
if(!center) return if(!center) return
for(var/turf/T in range(scan_range, center)) for(var/turf/T in range(scan_range, center))
if(!T.intact) if(!!T.is_plating())
continue continue
for(var/obj/O in T.contents) for(var/obj/O in T.contents)

View File

@@ -9,6 +9,7 @@
var/mob/attacher = null var/mob/attacher = null
var/valve_open = 0 var/valve_open = 0
var/toggle = 1 var/toggle = 1
flags = PROXMOVE
/obj/item/device/transfer_valve/proc/process_activation(var/obj/item/device/D) /obj/item/device/transfer_valve/proc/process_activation(var/obj/item/device/D)

View File

@@ -4,7 +4,7 @@
desc = "A tube of paste containing swarms of repair nanites. Very effective in repairing robotic machinery." desc = "A tube of paste containing swarms of repair nanites. Very effective in repairing robotic machinery."
icon = 'icons/obj/nanopaste.dmi' icon = 'icons/obj/nanopaste.dmi'
icon_state = "tube" icon_state = "tube"
origin_tech = list(TECH_MATERIAL = 4, TECH_ENGINERING = 3) origin_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 3)
amount = 10 amount = 10

View File

@@ -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

View File

@@ -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)

View File

@@ -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

View File

@@ -14,6 +14,11 @@
max_amount = 60 max_amount = 60
var/build_type = null var/build_type = null
/obj/item/stack/tile/New()
..()
pixel_x = rand(-7, 7)
pixel_y = rand(-7, 7)
/* /*
* Grass * Grass
*/ */
@@ -64,3 +69,59 @@
throw_speed = 5 throw_speed = 5
throw_range = 20 throw_range = 20
flags = 0 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

View File

@@ -13,7 +13,7 @@
throw_speed = 1 throw_speed = 1
throw_range = 5 throw_range = 5
w_class = 3.0 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) matter = list(DEFAULT_WALL_MATERIAL = 50000)
var/datum/effect/effect/system/spark_spread/spark_system var/datum/effect/effect/system/spark_spread/spark_system
var/stored_matter = 0 var/stored_matter = 0
@@ -103,7 +103,7 @@
else if(!deconstruct && (istype(T,/turf/space) || istype(T,get_base_turf(T.z)))) else if(!deconstruct && (istype(T,/turf/space) || istype(T,get_base_turf(T.z))))
build_cost = 1 build_cost = 1
build_type = "floor" build_type = "floor"
build_turf = /turf/simulated/floor/plating/airless build_turf = /turf/simulated/floor/airless
else if(deconstruct && istype(T,/turf/simulated/wall)) else if(deconstruct && istype(T,/turf/simulated/wall))
var/turf/simulated/wall/W = T var/turf/simulated/wall/W = T
build_delay = deconstruct ? 50 : 40 build_delay = deconstruct ? 50 : 40

View File

@@ -139,11 +139,6 @@
build_path = /obj/machinery/computer/crew build_path = /obj/machinery/computer/crew
origin_tech = list(TECH_DATA = 3, TECH_BIO = 2, TECH_MAGNET = 2) 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 /obj/item/weapon/circuitboard/operating
name = T_BOARD("patient monitoring console") name = T_BOARD("patient monitoring console")
build_path = /obj/machinery/computer/operating build_path = /obj/machinery/computer/operating
@@ -195,4 +190,4 @@
/obj/item/weapon/circuitboard/rcon_console /obj/item/weapon/circuitboard/rcon_console
name = T_BOARD("RCON remote control console") name = T_BOARD("RCON remote control console")
build_path = /obj/machinery/computer/rcon 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)

View File

@@ -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)

View File

@@ -6,7 +6,7 @@
name = T_BOARD("mining drill head") name = T_BOARD("mining drill head")
build_path = "/obj/machinery/mining/drill" build_path = "/obj/machinery/mining/drill"
board_type = "machine" board_type = "machine"
origin_tech = list(TECH_DATA = 1, TECH_ENGINERING = 1) origin_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1)
req_components = list( req_components = list(
"/obj/item/weapon/stock_parts/capacitor" = 1, "/obj/item/weapon/stock_parts/capacitor" = 1,
"/obj/item/weapon/cell" = 1, "/obj/item/weapon/cell" = 1,

View File

@@ -6,7 +6,7 @@
name = T_BOARD("PACMAN-type generator") name = T_BOARD("PACMAN-type generator")
build_path = "/obj/machinery/power/port_gen/pacman" build_path = "/obj/machinery/power/port_gen/pacman"
board_type = "machine" 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( req_components = list(
"/obj/item/weapon/stock_parts/matter_bin" = 1, "/obj/item/weapon/stock_parts/matter_bin" = 1,
"/obj/item/weapon/stock_parts/micro_laser" = 1, "/obj/item/weapon/stock_parts/micro_laser" = 1,
@@ -16,9 +16,9 @@
/obj/item/weapon/circuitboard/pacman/super /obj/item/weapon/circuitboard/pacman/super
name = T_BOARD("SUPERPACMAN-type generator") name = T_BOARD("SUPERPACMAN-type generator")
build_path = "/obj/machinery/power/port_gen/pacman/super" 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 /obj/item/weapon/circuitboard/pacman/mrs
name = T_BOARD("MRSPACMAN-type generator") name = T_BOARD("MRSPACMAN-type generator")
build_path = "/obj/machinery/power/port_gen/pacman/mrs" 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)

View File

@@ -6,14 +6,14 @@
name = T_BOARD("superconductive magnetic energy storage") name = T_BOARD("superconductive magnetic energy storage")
build_path = "/obj/machinery/power/smes/buildable" build_path = "/obj/machinery/power/smes/buildable"
board_type = "machine" 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) req_components = list("/obj/item/weapon/smes_coil" = 1, "/obj/item/stack/cable_coil" = 30)
/obj/item/weapon/circuitboard/batteryrack /obj/item/weapon/circuitboard/batteryrack
name = T_BOARD("battery rack PSU") name = T_BOARD("battery rack PSU")
build_path = "/obj/machinery/power/smes/batteryrack" build_path = "/obj/machinery/power/smes/batteryrack"
board_type = "machine" 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) req_components = list("/obj/item/weapon/cell" = 3)
/obj/item/weapon/circuitboard/ghettosmes /obj/item/weapon/circuitboard/ghettosmes

View File

@@ -6,7 +6,7 @@
name = T_BOARD("cyborg recharging station") name = T_BOARD("cyborg recharging station")
build_path = "/obj/machinery/recharge_station" build_path = "/obj/machinery/recharge_station"
board_type = "machine" board_type = "machine"
origin_tech = list(TECH_DATA = 3, TECH_ENGINERING = 3) origin_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 3)
req_components = list( req_components = list(
"/obj/item/stack/cable_coil" = 5, "/obj/item/stack/cable_coil" = 5,
"/obj/item/weapon/stock_parts/capacitor" = 2, "/obj/item/weapon/stock_parts/capacitor" = 2,

View File

@@ -15,7 +15,7 @@ obj/item/weapon/circuitboard/rdserver
name = T_BOARD("destructive analyzer") name = T_BOARD("destructive analyzer")
build_path = "/obj/machinery/r_n_d/destructive_analyzer" build_path = "/obj/machinery/r_n_d/destructive_analyzer"
board_type = "machine" 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( req_components = list(
"/obj/item/weapon/stock_parts/scanning_module" = 1, "/obj/item/weapon/stock_parts/scanning_module" = 1,
"/obj/item/weapon/stock_parts/manipulator" = 1, "/obj/item/weapon/stock_parts/manipulator" = 1,
@@ -25,7 +25,7 @@ obj/item/weapon/circuitboard/rdserver
name = T_BOARD("autolathe") name = T_BOARD("autolathe")
build_path = "/obj/machinery/autolathe" build_path = "/obj/machinery/autolathe"
board_type = "machine" board_type = "machine"
origin_tech = list(TECH_ENGINERING = 2, TECH_DATA = 2) origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2)
req_components = list( req_components = list(
"/obj/item/weapon/stock_parts/matter_bin" = 3, "/obj/item/weapon/stock_parts/matter_bin" = 3,
"/obj/item/weapon/stock_parts/manipulator" = 1, "/obj/item/weapon/stock_parts/manipulator" = 1,
@@ -35,7 +35,7 @@ obj/item/weapon/circuitboard/rdserver
name = T_BOARD("protolathe") name = T_BOARD("protolathe")
build_path = "/obj/machinery/r_n_d/protolathe" build_path = "/obj/machinery/r_n_d/protolathe"
board_type = "machine" board_type = "machine"
origin_tech = list(TECH_ENGINERING = 2, TECH_DATA = 2) origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2)
req_components = list( req_components = list(
"/obj/item/weapon/stock_parts/matter_bin" = 2, "/obj/item/weapon/stock_parts/matter_bin" = 2,
"/obj/item/weapon/stock_parts/manipulator" = 2, "/obj/item/weapon/stock_parts/manipulator" = 2,
@@ -46,7 +46,7 @@ obj/item/weapon/circuitboard/rdserver
name = T_BOARD("circuit imprinter") name = T_BOARD("circuit imprinter")
build_path = "/obj/machinery/r_n_d/circuit_imprinter" build_path = "/obj/machinery/r_n_d/circuit_imprinter"
board_type = "machine" board_type = "machine"
origin_tech = list(TECH_ENGINERING = 2, TECH_DATA = 2) origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2)
req_components = list( req_components = list(
"/obj/item/weapon/stock_parts/matter_bin" = 1, "/obj/item/weapon/stock_parts/matter_bin" = 1,
"/obj/item/weapon/stock_parts/manipulator" = 1, "/obj/item/weapon/stock_parts/manipulator" = 1,
@@ -56,7 +56,7 @@ obj/item/weapon/circuitboard/rdserver
name = "Circuit board (Exosuit Fabricator)" name = "Circuit board (Exosuit Fabricator)"
build_path = "/obj/machinery/mecha_part_fabricator" build_path = "/obj/machinery/mecha_part_fabricator"
board_type = "machine" board_type = "machine"
origin_tech = list(TECH_DATA = 3, TECH_ENGINERING = 3) origin_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 3)
req_components = list( req_components = list(
"/obj/item/weapon/stock_parts/matter_bin" = 2, "/obj/item/weapon/stock_parts/matter_bin" = 2,
"/obj/item/weapon/stock_parts/manipulator" = 1, "/obj/item/weapon/stock_parts/manipulator" = 1,

View File

@@ -8,7 +8,7 @@
/obj/item/weapon/circuitboard/telecomms/receiver /obj/item/weapon/circuitboard/telecomms/receiver
name = T_BOARD("subspace receiver") name = T_BOARD("subspace receiver")
build_path = "/obj/machinery/telecomms/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( req_components = list(
"/obj/item/weapon/stock_parts/subspace/ansible" = 1, "/obj/item/weapon/stock_parts/subspace/ansible" = 1,
"/obj/item/weapon/stock_parts/subspace/filter" = 1, "/obj/item/weapon/stock_parts/subspace/filter" = 1,
@@ -18,7 +18,7 @@
/obj/item/weapon/circuitboard/telecomms/hub /obj/item/weapon/circuitboard/telecomms/hub
name = T_BOARD("hub mainframe") name = T_BOARD("hub mainframe")
build_path = "/obj/machinery/telecomms/hub" 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( req_components = list(
"/obj/item/weapon/stock_parts/manipulator" = 2, "/obj/item/weapon/stock_parts/manipulator" = 2,
"/obj/item/stack/cable_coil" = 2, "/obj/item/stack/cable_coil" = 2,
@@ -27,7 +27,7 @@
/obj/item/weapon/circuitboard/telecomms/relay /obj/item/weapon/circuitboard/telecomms/relay
name = T_BOARD("relay mainframe") name = T_BOARD("relay mainframe")
build_path = "/obj/machinery/telecomms/relay" 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( req_components = list(
"/obj/item/weapon/stock_parts/manipulator" = 2, "/obj/item/weapon/stock_parts/manipulator" = 2,
"/obj/item/stack/cable_coil" = 2, "/obj/item/stack/cable_coil" = 2,
@@ -36,7 +36,7 @@
/obj/item/weapon/circuitboard/telecomms/bus /obj/item/weapon/circuitboard/telecomms/bus
name = T_BOARD("bus mainframe") name = T_BOARD("bus mainframe")
build_path = "/obj/machinery/telecomms/bus" 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( req_components = list(
"/obj/item/weapon/stock_parts/manipulator" = 2, "/obj/item/weapon/stock_parts/manipulator" = 2,
"/obj/item/stack/cable_coil" = 1, "/obj/item/stack/cable_coil" = 1,
@@ -45,7 +45,7 @@
/obj/item/weapon/circuitboard/telecomms/processor /obj/item/weapon/circuitboard/telecomms/processor
name = T_BOARD("processor unit") name = T_BOARD("processor unit")
build_path = "/obj/machinery/telecomms/processor" 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( req_components = list(
"/obj/item/weapon/stock_parts/manipulator" = 3, "/obj/item/weapon/stock_parts/manipulator" = 3,
"/obj/item/weapon/stock_parts/subspace/filter" = 1, "/obj/item/weapon/stock_parts/subspace/filter" = 1,
@@ -57,7 +57,7 @@
/obj/item/weapon/circuitboard/telecomms/server /obj/item/weapon/circuitboard/telecomms/server
name = T_BOARD("telecommunication server") name = T_BOARD("telecommunication server")
build_path = "/obj/machinery/telecomms/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( req_components = list(
"/obj/item/weapon/stock_parts/manipulator" = 2, "/obj/item/weapon/stock_parts/manipulator" = 2,
"/obj/item/stack/cable_coil" = 1, "/obj/item/stack/cable_coil" = 1,
@@ -66,7 +66,7 @@
/obj/item/weapon/circuitboard/telecomms/broadcaster /obj/item/weapon/circuitboard/telecomms/broadcaster
name = T_BOARD("subspace broadcaster") name = T_BOARD("subspace broadcaster")
build_path = "/obj/machinery/telecomms/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( req_components = list(
"/obj/item/weapon/stock_parts/manipulator" = 2, "/obj/item/weapon/stock_parts/manipulator" = 2,
"/obj/item/stack/cable_coil" = 1, "/obj/item/stack/cable_coil" = 1,

Some files were not shown because too many files have changed in this diff Show More