mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2026-08-23 13:17:03 +01:00
@@ -34,8 +34,8 @@ Pipelines + Other Objects -> Pipe network
|
||||
var/obj/machinery/atmospherics/node1
|
||||
var/obj/machinery/atmospherics/node2
|
||||
|
||||
/obj/machinery/atmospherics/New(loc, newdir)
|
||||
..()
|
||||
/obj/machinery/atmospherics/Initialize(var/ml, newdir)
|
||||
. = ..()
|
||||
if(!icon_manager)
|
||||
icon_manager = new()
|
||||
if(!isnull(newdir))
|
||||
|
||||
@@ -9,8 +9,8 @@
|
||||
var/datum/pipe_network/network1
|
||||
var/datum/pipe_network/network2
|
||||
|
||||
/obj/machinery/atmospherics/binary/New()
|
||||
..()
|
||||
/obj/machinery/atmospherics/binary/Initialize()
|
||||
. = ..()
|
||||
|
||||
air1 = new
|
||||
air2 = new
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
|
||||
density = 1
|
||||
|
||||
/obj/machinery/atmospherics/binary/circulator/New()
|
||||
..()
|
||||
/obj/machinery/atmospherics/binary/circulator/Initialize()
|
||||
. = ..()
|
||||
desc = initial(desc) + " Its outlet port is to the [dir2text(dir)]."
|
||||
air1.volume = 400
|
||||
|
||||
|
||||
@@ -42,8 +42,10 @@
|
||||
//2: Do not pass input_pressure_min
|
||||
//4: Do not pass output_pressure_max
|
||||
|
||||
/obj/machinery/atmospherics/binary/dp_vent_pump/New()
|
||||
..()
|
||||
/obj/machinery/atmospherics/binary/dp_vent_pump/Initialize()
|
||||
. = ..()
|
||||
if(frequency)
|
||||
set_frequency(frequency)
|
||||
air1.volume = ATMOS_DEFAULT_VOLUME_PUMP
|
||||
air2.volume = ATMOS_DEFAULT_VOLUME_PUMP
|
||||
icon = null
|
||||
@@ -55,8 +57,8 @@
|
||||
/obj/machinery/atmospherics/binary/dp_vent_pump/high_volume
|
||||
name = "Large Dual Port Air Vent"
|
||||
|
||||
/obj/machinery/atmospherics/binary/dp_vent_pump/high_volume/New()
|
||||
..()
|
||||
/obj/machinery/atmospherics/binary/dp_vent_pump/high_volume/Initialize()
|
||||
. = ..()
|
||||
air1.volume = ATMOS_DEFAULT_VOLUME_PUMP + 800
|
||||
air2.volume = ATMOS_DEFAULT_VOLUME_PUMP + 800
|
||||
|
||||
@@ -194,11 +196,6 @@
|
||||
|
||||
return 1
|
||||
|
||||
/obj/machinery/atmospherics/binary/dp_vent_pump/Initialize()
|
||||
. = ..()
|
||||
if(frequency)
|
||||
set_frequency(frequency)
|
||||
|
||||
/obj/machinery/atmospherics/binary/dp_vent_pump/examine(mob/user)
|
||||
. = ..()
|
||||
if(Adjacent(user))
|
||||
|
||||
@@ -27,10 +27,12 @@
|
||||
var/id = null
|
||||
var/datum/radio_frequency/radio_connection
|
||||
|
||||
/obj/machinery/atmospherics/binary/passive_gate/New()
|
||||
..()
|
||||
/obj/machinery/atmospherics/binary/passive_gate/Initialize()
|
||||
. = ..()
|
||||
air1.volume = ATMOS_DEFAULT_VOLUME_PUMP * 2.5
|
||||
air2.volume = ATMOS_DEFAULT_VOLUME_PUMP * 2.5
|
||||
if(frequency)
|
||||
set_frequency(frequency)
|
||||
|
||||
/obj/machinery/atmospherics/binary/passive_gate/Destroy()
|
||||
unregister_radio(src, frequency)
|
||||
@@ -166,14 +168,8 @@
|
||||
)
|
||||
|
||||
radio_connection.post_signal(src, signal, radio_filter = RADIO_ATMOSIA)
|
||||
|
||||
return 1
|
||||
|
||||
/obj/machinery/atmospherics/binary/passive_gate/Initialize()
|
||||
. = ..()
|
||||
if(frequency)
|
||||
set_frequency(frequency)
|
||||
|
||||
/obj/machinery/atmospherics/binary/passive_gate/receive_signal(datum/signal/signal)
|
||||
if(!signal.data["tag"] || (signal.data["tag"] != id) || (signal.data["sigtype"]!="command"))
|
||||
return 0
|
||||
|
||||
@@ -37,10 +37,12 @@ Thus, the two variables affect pump operation are set in New():
|
||||
var/id = null
|
||||
var/datum/radio_frequency/radio_connection
|
||||
|
||||
/obj/machinery/atmospherics/binary/pump/New()
|
||||
..()
|
||||
/obj/machinery/atmospherics/binary/pump/Initialize()
|
||||
. = ..()
|
||||
air1.volume = ATMOS_DEFAULT_VOLUME_PUMP
|
||||
air2.volume = ATMOS_DEFAULT_VOLUME_PUMP
|
||||
if(frequency)
|
||||
set_frequency(frequency)
|
||||
|
||||
/obj/machinery/atmospherics/binary/pump/Destroy()
|
||||
unregister_radio(src, frequency)
|
||||
@@ -166,11 +168,6 @@ Thus, the two variables affect pump operation are set in New():
|
||||
|
||||
return data
|
||||
|
||||
/obj/machinery/atmospherics/binary/pump/Initialize()
|
||||
. = ..()
|
||||
if(frequency)
|
||||
set_frequency(frequency)
|
||||
|
||||
/obj/machinery/atmospherics/binary/pump/receive_signal(datum/signal/signal)
|
||||
if(!signal.data["tag"] || (signal.data["tag"] != id) || (signal.data["sigtype"]!="command"))
|
||||
return 0
|
||||
|
||||
@@ -20,8 +20,8 @@
|
||||
|
||||
var/list/filtering_outputs = list() //maps gasids to gas_mixtures
|
||||
|
||||
/obj/machinery/atmospherics/omni/atmos_filter/New()
|
||||
..()
|
||||
/obj/machinery/atmospherics/omni/atmos_filter/Initialize()
|
||||
. = ..()
|
||||
rebuild_filtering_list()
|
||||
for(var/datum/omni_port/P in ports)
|
||||
P.air.volume = ATMOS_DEFAULT_VOLUME_FILTER
|
||||
|
||||
@@ -24,8 +24,8 @@
|
||||
|
||||
var/list/mixing_inputs = list()
|
||||
|
||||
/obj/machinery/atmospherics/omni/mixer/New()
|
||||
..()
|
||||
/obj/machinery/atmospherics/omni/mixer/Initialize()
|
||||
. = ..()
|
||||
if(mapper_set())
|
||||
var/con = 0
|
||||
for(var/datum/omni_port/P in ports)
|
||||
|
||||
@@ -25,8 +25,8 @@
|
||||
|
||||
var/list/ports = new()
|
||||
|
||||
/obj/machinery/atmospherics/omni/New()
|
||||
..()
|
||||
/obj/machinery/atmospherics/omni/Initialize()
|
||||
. = ..()
|
||||
icon_state = "base"
|
||||
|
||||
ports = new()
|
||||
|
||||
@@ -39,8 +39,8 @@
|
||||
if(frequency)
|
||||
radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA)
|
||||
|
||||
/obj/machinery/atmospherics/trinary/atmos_filter/New()
|
||||
..()
|
||||
/obj/machinery/atmospherics/trinary/atmos_filter/Initialize()
|
||||
. = ..()
|
||||
switch(filter_type)
|
||||
if(0) //removing hydrocarbons
|
||||
filtered_out = list("phoron")
|
||||
@@ -56,6 +56,8 @@
|
||||
air1.volume = ATMOS_DEFAULT_VOLUME_FILTER
|
||||
air2.volume = ATMOS_DEFAULT_VOLUME_FILTER
|
||||
air3.volume = ATMOS_DEFAULT_VOLUME_FILTER
|
||||
if(frequency)
|
||||
set_frequency(frequency)
|
||||
|
||||
/obj/machinery/atmospherics/trinary/atmos_filter/Destroy()
|
||||
unregister_radio(src, frequency)
|
||||
@@ -106,11 +108,6 @@
|
||||
|
||||
return 1
|
||||
|
||||
/obj/machinery/atmospherics/trinary/atmos_filter/Initialize()
|
||||
. = ..()
|
||||
if(frequency)
|
||||
set_frequency(frequency)
|
||||
|
||||
/obj/machinery/atmospherics/trinary/atmos_filter/attack_hand(user) // -- TLE
|
||||
if(..())
|
||||
return
|
||||
|
||||
@@ -37,8 +37,8 @@
|
||||
icon_state += "off"
|
||||
update_use_power(USE_POWER_OFF)
|
||||
|
||||
/obj/machinery/atmospherics/trinary/mixer/New()
|
||||
..()
|
||||
/obj/machinery/atmospherics/trinary/mixer/Initialize()
|
||||
. = ..()
|
||||
air1.volume = ATMOS_DEFAULT_VOLUME_MIXER
|
||||
air2.volume = ATMOS_DEFAULT_VOLUME_MIXER
|
||||
air3.volume = ATMOS_DEFAULT_VOLUME_MIXER * 1.5
|
||||
|
||||
@@ -17,8 +17,8 @@
|
||||
var/datum/pipe_network/network2
|
||||
var/datum/pipe_network/network3
|
||||
|
||||
/obj/machinery/atmospherics/trinary/New()
|
||||
..()
|
||||
/obj/machinery/atmospherics/trinary/Initialize()
|
||||
. = ..()
|
||||
|
||||
air1 = new
|
||||
air2 = new
|
||||
|
||||
@@ -24,9 +24,11 @@
|
||||
|
||||
level = 1
|
||||
|
||||
/obj/machinery/atmospherics/unary/outlet_injector/New()
|
||||
..()
|
||||
/obj/machinery/atmospherics/unary/outlet_injector/Initialize()
|
||||
. = ..()
|
||||
air_contents.volume = ATMOS_DEFAULT_VOLUME_PUMP + 500 //Give it a small reservoir for injecting. Also allows it to have a higher flow rate limit than vent pumps, to differentiate injectors a bit more.
|
||||
if(frequency)
|
||||
set_frequency(frequency)
|
||||
|
||||
/obj/machinery/atmospherics/unary/outlet_injector/Destroy()
|
||||
unregister_radio(src, frequency)
|
||||
@@ -122,11 +124,6 @@
|
||||
|
||||
return 1
|
||||
|
||||
/obj/machinery/atmospherics/unary/outlet_injector/Initialize()
|
||||
. = ..()
|
||||
if(frequency)
|
||||
set_frequency(frequency)
|
||||
|
||||
/obj/machinery/atmospherics/unary/outlet_injector/receive_signal(datum/signal/signal)
|
||||
if(!signal.data["tag"] || (signal.data["tag"] != id) || (signal.data["sigtype"]!="command"))
|
||||
return 0
|
||||
|
||||
@@ -13,8 +13,8 @@
|
||||
|
||||
var/welded = 0 //defining this here for ventcrawl stuff
|
||||
|
||||
/obj/machinery/atmospherics/unary/New()
|
||||
..()
|
||||
/obj/machinery/atmospherics/unary/Initialize()
|
||||
. = ..()
|
||||
air_contents = new
|
||||
|
||||
air_contents.volume = 200
|
||||
|
||||
@@ -78,9 +78,6 @@
|
||||
/obj/machinery/atmospherics/unary/vent_pump/Initialize()
|
||||
. = ..()
|
||||
soundloop = new(list(src), FALSE)
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_pump/New()
|
||||
..()
|
||||
air_contents.volume = ATMOS_DEFAULT_VOLUME_PUMP
|
||||
|
||||
icon = null
|
||||
@@ -108,8 +105,8 @@
|
||||
icon_connect_type = "-aux"
|
||||
connect_types = CONNECT_TYPE_AUX //connects to aux pipes
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_pump/high_volume/New()
|
||||
..()
|
||||
/obj/machinery/atmospherics/unary/vent_pump/high_volume/Initialize()
|
||||
. = ..()
|
||||
air_contents.volume = ATMOS_DEFAULT_VOLUME_PUMP + 800
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_pump/engine
|
||||
@@ -117,8 +114,8 @@
|
||||
power_channel = ENVIRON
|
||||
power_rating = 30000 //15 kW ~ 20 HP
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_pump/engine/New()
|
||||
..()
|
||||
/obj/machinery/atmospherics/unary/vent_pump/engine/Initialize()
|
||||
. = ..()
|
||||
air_contents.volume = ATMOS_DEFAULT_VOLUME_PUMP + 500 //meant to match air injector
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_pump/update_icon(var/safety = 0)
|
||||
|
||||
@@ -32,8 +32,8 @@
|
||||
use_power = USE_POWER_IDLE
|
||||
icon_state = "map_scrubber_on"
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_scrubber/New()
|
||||
..()
|
||||
/obj/machinery/atmospherics/unary/vent_scrubber/Initialize()
|
||||
. = ..()
|
||||
air_contents.volume = ATMOS_DEFAULT_VOLUME_FILTER
|
||||
|
||||
icon = null
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
buckle_lying = 1
|
||||
|
||||
// BubbleWrap
|
||||
/obj/machinery/atmospherics/pipe/simple/heat_exchanging/New()
|
||||
..()
|
||||
/obj/machinery/atmospherics/pipe/simple/heat_exchanging/Initialize()
|
||||
. = ..()
|
||||
// BubbleWrap END
|
||||
color = "#404040" //we don't make use of the fancy overlay system for colours, use this to set the default.
|
||||
|
||||
|
||||
@@ -19,8 +19,8 @@
|
||||
|
||||
level = 1
|
||||
|
||||
/obj/machinery/atmospherics/pipe/manifold/New()
|
||||
..()
|
||||
/obj/machinery/atmospherics/pipe/manifold/Initialize()
|
||||
. = ..()
|
||||
alpha = 255
|
||||
icon = null
|
||||
|
||||
|
||||
@@ -20,8 +20,8 @@
|
||||
|
||||
level = 1
|
||||
|
||||
/obj/machinery/atmospherics/pipe/manifold4w/New()
|
||||
..()
|
||||
/obj/machinery/atmospherics/pipe/manifold4w/Initialize()
|
||||
. = ..()
|
||||
alpha = 255
|
||||
icon = null
|
||||
|
||||
|
||||
@@ -24,10 +24,10 @@
|
||||
/obj/machinery/atmospherics/pipe/drain_power()
|
||||
return -1
|
||||
|
||||
/obj/machinery/atmospherics/pipe/New()
|
||||
/obj/machinery/atmospherics/pipe/Initialize()
|
||||
if(istype(get_turf(src), /turf/simulated/wall) || istype(get_turf(src), /turf/simulated/shuttle/wall) || istype(get_turf(src), /turf/unsimulated/wall))
|
||||
level = 1
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/hides_under_flooring()
|
||||
return level != 2
|
||||
|
||||
@@ -26,8 +26,8 @@
|
||||
|
||||
level = 1
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/New()
|
||||
..()
|
||||
/obj/machinery/atmospherics/pipe/simple/Initialize()
|
||||
. = ..()
|
||||
|
||||
// Pipe colors and icon states are handled by an image cache - so color and icon should
|
||||
// be null. For mapping purposes color is defined in the object definitions.
|
||||
|
||||
@@ -18,9 +18,9 @@
|
||||
pipe_flags = PIPING_DEFAULT_LAYER_ONLY
|
||||
density = 1
|
||||
|
||||
/obj/machinery/atmospherics/pipe/tank/New()
|
||||
/obj/machinery/atmospherics/pipe/tank/Initialize()
|
||||
icon_state = "air"
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/tank/init_dir()
|
||||
initialize_directions = dir
|
||||
@@ -74,58 +74,49 @@
|
||||
name = "Pressure Tank (Air)"
|
||||
icon_state = "air_map"
|
||||
|
||||
/obj/machinery/atmospherics/pipe/tank/air/New()
|
||||
/obj/machinery/atmospherics/pipe/tank/air/Initialize()
|
||||
air_temporary = new
|
||||
air_temporary.volume = volume
|
||||
air_temporary.temperature = T20C
|
||||
|
||||
air_temporary.adjust_multi("oxygen", (start_pressure*O2STANDARD)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature), \
|
||||
"nitrogen",(start_pressure*N2STANDARD)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature))
|
||||
|
||||
|
||||
..()
|
||||
. = ..()
|
||||
icon_state = "air"
|
||||
|
||||
/obj/machinery/atmospherics/pipe/tank/oxygen
|
||||
name = "Pressure Tank (Oxygen)"
|
||||
icon_state = "o2_map"
|
||||
|
||||
/obj/machinery/atmospherics/pipe/tank/oxygen/New()
|
||||
/obj/machinery/atmospherics/pipe/tank/oxygen/Initialize()
|
||||
air_temporary = new
|
||||
air_temporary.volume = volume
|
||||
air_temporary.temperature = T20C
|
||||
|
||||
air_temporary.adjust_gas("oxygen", (start_pressure)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature))
|
||||
|
||||
..()
|
||||
. = ..()
|
||||
icon_state = "o2"
|
||||
|
||||
/obj/machinery/atmospherics/pipe/tank/nitrogen
|
||||
name = "Pressure Tank (Nitrogen)"
|
||||
icon_state = "n2_map"
|
||||
|
||||
/obj/machinery/atmospherics/pipe/tank/nitrogen/New()
|
||||
/obj/machinery/atmospherics/pipe/tank/nitrogen/Initialize()
|
||||
air_temporary = new
|
||||
air_temporary.volume = volume
|
||||
air_temporary.temperature = T20C
|
||||
|
||||
air_temporary.adjust_gas("nitrogen", (start_pressure)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature))
|
||||
|
||||
..()
|
||||
. = ..()
|
||||
icon_state = "n2"
|
||||
|
||||
/obj/machinery/atmospherics/pipe/tank/carbon_dioxide
|
||||
name = "Pressure Tank (Carbon Dioxide)"
|
||||
icon_state = "co2_map"
|
||||
|
||||
/obj/machinery/atmospherics/pipe/tank/carbon_dioxide/New()
|
||||
/obj/machinery/atmospherics/pipe/tank/carbon_dioxide/Initialize()
|
||||
air_temporary = new
|
||||
air_temporary.volume = volume
|
||||
air_temporary.temperature = T20C
|
||||
|
||||
air_temporary.adjust_gas("carbon_dioxide", (start_pressure)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature))
|
||||
|
||||
..()
|
||||
. = ..()
|
||||
icon_state = "co2"
|
||||
|
||||
/obj/machinery/atmospherics/pipe/tank/phoron
|
||||
@@ -133,26 +124,22 @@
|
||||
icon_state = "phoron_map"
|
||||
connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_FUEL
|
||||
|
||||
/obj/machinery/atmospherics/pipe/tank/phoron/New()
|
||||
/obj/machinery/atmospherics/pipe/tank/phoron/Initialize()
|
||||
air_temporary = new
|
||||
air_temporary.volume = volume
|
||||
air_temporary.temperature = T20C
|
||||
|
||||
air_temporary.adjust_gas("phoron", (start_pressure)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature))
|
||||
|
||||
..()
|
||||
. = ..()
|
||||
icon_state = "phoron"
|
||||
|
||||
/obj/machinery/atmospherics/pipe/tank/nitrous_oxide
|
||||
name = "Pressure Tank (Nitrous Oxide)"
|
||||
icon_state = "n2o_map"
|
||||
|
||||
/obj/machinery/atmospherics/pipe/tank/nitrous_oxide/New()
|
||||
/obj/machinery/atmospherics/pipe/tank/nitrous_oxide/Initialize()
|
||||
air_temporary = new
|
||||
air_temporary.volume = volume
|
||||
air_temporary.temperature = T0C
|
||||
|
||||
air_temporary.adjust_gas("nitrous_oxide", (start_pressure)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature))
|
||||
|
||||
..()
|
||||
. = ..()
|
||||
icon_state = "n2o"
|
||||
|
||||
+2
-2
@@ -180,8 +180,8 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
|
||||
animate(src, color = fire_color(air_contents.temperature), 5)
|
||||
set_light(l_color = color)
|
||||
|
||||
/obj/fire/New(newLoc,fl)
|
||||
..()
|
||||
/obj/fire/Initialize(var/ml, fl)
|
||||
. = ..()
|
||||
|
||||
if(!istype(loc, /turf))
|
||||
qdel(src)
|
||||
|
||||
@@ -55,8 +55,8 @@
|
||||
#define COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZE "atom_init_success"
|
||||
///from base of atom/attackby(): (/obj/item, /mob/living, params)
|
||||
#define COMSIG_PARENT_ATTACKBY "atom_attackby"
|
||||
///Return this in response if you don't want afterattack to be called
|
||||
#define COMPONENT_NO_AFTERATTACK (1<<0)
|
||||
///Return this in response if you don't want later item attack procs to be called.
|
||||
#define COMPONENT_CANCEL_ATTACK_CHAIN (1<<0)
|
||||
///from base of atom/attack_hulk(): (/mob/living/carbon/human)
|
||||
#define COMSIG_ATOM_HULK_ATTACK "hulk_attack"
|
||||
///from base of atom/animal_attack(): (/mob/user)
|
||||
@@ -89,6 +89,7 @@
|
||||
#define COMSIG_ATOM_BUMPED "atom_bumped"
|
||||
///from base of atom/ex_act(): (severity, target)
|
||||
#define COMSIG_ATOM_EX_ACT "atom_ex_act"
|
||||
#define COMPONENT_IGNORE_EXPLOSION (1<<0)
|
||||
///from base of atom/emp_act(): (severity)
|
||||
#define COMSIG_ATOM_EMP_ACT "atom_emp_act"
|
||||
///from base of atom/fire_act(): (exposed_temperature, exposed_volume)
|
||||
@@ -218,7 +219,7 @@
|
||||
|
||||
// /atom/movable signals
|
||||
|
||||
///from base of atom/movable/Moved(): (/atom)
|
||||
///from base of atom/movable/Move(): (atom/newloc, dir, movetime)
|
||||
#define COMSIG_MOVABLE_PRE_MOVE "movable_pre_move"
|
||||
#define COMPONENT_MOVABLE_BLOCK_PRE_MOVE (1<<0)
|
||||
///from base of atom/movable/Moved(): (/atom, dir)
|
||||
@@ -735,4 +736,7 @@
|
||||
#define COMSIG_TRIGGERED_ALARM "ssalarm_triggered"
|
||||
#define COMSIG_CANCELLED_ALARM "ssalarm_cancelled"
|
||||
|
||||
#define COMSIG_REAGENTS_CRAFTING_PING "reagents_crafting_ping"
|
||||
#define COMSIG_REAGENTS_CRAFTING_PING "reagents_crafting_ping"
|
||||
|
||||
//From reagents touch_x.
|
||||
#define COMSIG_REAGENTS_TOUCH "reagent_touch"
|
||||
@@ -43,6 +43,10 @@
|
||||
#define MAT_PAINITE "painite"
|
||||
#define MAT_BOROSILICATE "borosilicate glass"
|
||||
#define MAT_SANDSTONE "sandstone"
|
||||
#define MAT_PLATINUM "platinum"
|
||||
#define MAT_TRITIUM "tritium"
|
||||
#define MAT_DEUTERIUM "deuterium"
|
||||
|
||||
|
||||
#define DEFAULT_TABLE_MATERIAL MAT_PLASTIC
|
||||
#define DEFAULT_WALL_MATERIAL MAT_STEEL
|
||||
|
||||
@@ -37,9 +37,10 @@
|
||||
#define ALLERGEN_COFFEE 0x200 // Mostly here for tajara.
|
||||
#define ALLERGEN_SUGARS 0x400 // For unathi-like reactions
|
||||
#define ALLERGEN_EGGS 0x800 // For Skrell eggs allergy
|
||||
#define ALLERGEN_STIMULANT 0x1000 // Stimulants are what makes the Tajaran heart go ruh roh - not just coffee!
|
||||
|
||||
// Allergen reactions
|
||||
#define AG_TOX_DMG 0x1 // the classic
|
||||
#define AG_TOX_DMG 0x1 // the classic
|
||||
#define AG_OXY_DMG 0x2 // intense airway reactions
|
||||
#define AG_EMOTE 0x4 // general emote reactions based on affect type
|
||||
#define AG_PAIN 0x8 // short-lived hurt
|
||||
|
||||
@@ -19,9 +19,10 @@
|
||||
|
||||
#define TIMER_ID_NULL -1
|
||||
|
||||
#define INITIALIZATION_INSSATOMS 0 //New should not call Initialize
|
||||
#define INITIALIZATION_INNEW_MAPLOAD 1 //New should call Initialize(TRUE)
|
||||
#define INITIALIZATION_INNEW_REGULAR 2 //New should call Initialize(FALSE)
|
||||
#define INITIALIZATION_INSSATOMS 0 //New should not call Initialize
|
||||
#define INITIALIZATION_INSSATOMS_LATE 1 //New should not call Initialize; after the first pass is complete (handled differently)
|
||||
#define INITIALIZATION_INNEW_MAPLOAD 2 //New should call Initialize(TRUE)
|
||||
#define INITIALIZATION_INNEW_REGULAR 3 //New should call Initialize(FALSE)
|
||||
|
||||
#define INITIALIZE_HINT_NORMAL 0 //Nothing happens
|
||||
#define INITIALIZE_HINT_LATELOAD 1 //Call LateInitialize
|
||||
|
||||
@@ -108,7 +108,7 @@
|
||||
if(istype(T,/turf/simulated/shuttle))
|
||||
shuttlework = 1
|
||||
var/turf/simulated/shuttle/SS = T
|
||||
if(!SS.landed_holder) SS.landed_holder = new(turf = SS)
|
||||
if(!SS.landed_holder) SS.landed_holder = new(SS)
|
||||
X = SS.landed_holder.land_on(B)
|
||||
|
||||
//Generic non-shuttle turf move.
|
||||
|
||||
@@ -803,7 +803,7 @@ Turf and target are seperate in case you want to teleport some distance from a t
|
||||
if(istype(T,/turf/simulated/shuttle))
|
||||
shuttlework = 1
|
||||
var/turf/simulated/shuttle/SS = T
|
||||
if(!SS.landed_holder) SS.landed_holder = new(turf = SS)
|
||||
if(!SS.landed_holder) SS.landed_holder = new(SS)
|
||||
X = SS.landed_holder.land_on(B)
|
||||
|
||||
//Generic non-shuttle turf move.
|
||||
@@ -1310,8 +1310,9 @@ var/mob/dview/dview_mob = new
|
||||
color = origin.color
|
||||
set_light(origin.light_range, origin.light_power, origin.light_color)
|
||||
|
||||
/mob/dview/New()
|
||||
..()
|
||||
INITIALIZE_IMMEDIATE(/mob/dview)
|
||||
/mob/dview/Initialize()
|
||||
. = ..()
|
||||
// We don't want to be in any mob lists; we're a dummy not a mob.
|
||||
mob_list -= src
|
||||
if(stat == DEAD)
|
||||
|
||||
@@ -12,12 +12,13 @@
|
||||
|
||||
var/mob/my_mob = null // The mob that possesses this hud object.
|
||||
|
||||
/obj/screen/movable/ability_master/New(owner)
|
||||
/obj/screen/movable/ability_master/Initialize(ml, owner)
|
||||
. = ..()
|
||||
if(owner)
|
||||
my_mob = owner
|
||||
update_abilities(0, owner)
|
||||
else
|
||||
message_admins("ERROR: ability_master's New() was not given an owner argument. This is a bug.")
|
||||
message_admins("ERROR: ability_master's Initialize() was not given an owner argument. This is a bug.")
|
||||
|
||||
/obj/screen/movable/ability_master/Destroy()
|
||||
. = ..()
|
||||
@@ -178,9 +179,9 @@
|
||||
ability_master.toggle_open(1)
|
||||
client.screen -= ability_master
|
||||
|
||||
/mob/New()
|
||||
..()
|
||||
ability_master = new /obj/screen/movable/ability_master(src)
|
||||
/mob/Initialize()
|
||||
. = ..()
|
||||
ability_master = new /obj/screen/movable/ability_master(null, src)
|
||||
|
||||
///////////ACTUAL ABILITIES////////////
|
||||
//This is what you click to do things//
|
||||
|
||||
@@ -191,6 +191,11 @@ The box in your backpack has an oxygen tank and gas mask in it."
|
||||
desc = "Your battery is about to die! Charge it ASAP!"
|
||||
icon_state = "c_starving"
|
||||
|
||||
/obj/screen/alert/warm
|
||||
name = "Too Warm"
|
||||
desc = "You're uncomfortably warm. Take off some clothes or tweak the thermostat a few degrees cooler."
|
||||
icon_state = "mildhot"
|
||||
|
||||
/obj/screen/alert/hot
|
||||
name = "Too Hot"
|
||||
desc = "You're flaming hot! Get somewhere cooler and take off any insulating clothing like a fire suit."
|
||||
@@ -199,6 +204,11 @@ The box in your backpack has an oxygen tank and gas mask in it."
|
||||
/obj/screen/alert/hot/robot
|
||||
desc = "The air around you is too hot for a humanoid. Be careful to avoid exposing them to this enviroment."
|
||||
|
||||
/obj/screen/alert/chilly
|
||||
name = "Too Chilly"
|
||||
desc = "You're uncomfortably cold. Rug up or tweak the thermostat a few degrees higher."
|
||||
icon_state = "mildcold"
|
||||
|
||||
/obj/screen/alert/cold
|
||||
name = "Too Cold"
|
||||
desc = "You're freezing cold! Get somewhere warmer and take off any insulating clothing like a space suit."
|
||||
|
||||
@@ -622,8 +622,9 @@
|
||||
plane = PLANE_PLAYER_HUD_ABOVE
|
||||
var/client/holder
|
||||
|
||||
/obj/screen/splash/New(client/C, visible)
|
||||
. = ..()
|
||||
INITIALIZE_IMMEDIATE(/obj/screen/splash)
|
||||
/obj/screen/splash/Initialize(var/ml, client/C, visible)
|
||||
. = ..(ml)
|
||||
|
||||
holder = C
|
||||
|
||||
@@ -691,6 +692,9 @@
|
||||
var/obj/screen/mapper/extras_holder/extras_holder
|
||||
|
||||
/obj/screen/movable/mapper_holder/Initialize(mapload, newowner)
|
||||
|
||||
. = ..()
|
||||
|
||||
owner = newowner
|
||||
|
||||
mask_full = new(src) // Full white square mask
|
||||
@@ -778,8 +782,8 @@
|
||||
mouse_opacity = 0
|
||||
var/obj/screen/movable/mapper_holder/parent
|
||||
|
||||
/obj/screen/mapper/New()
|
||||
..()
|
||||
/obj/screen/mapper/Initialize()
|
||||
. = ..()
|
||||
parent = loc
|
||||
|
||||
/obj/screen/mapper/Destroy()
|
||||
|
||||
@@ -25,27 +25,46 @@ avoid code duplication. This includes items that may sometimes act as a standard
|
||||
return
|
||||
return
|
||||
|
||||
// Called at the start of resolve_attackby(), before the actual attack.
|
||||
/obj/item/proc/pre_attack(atom/a, mob/user)
|
||||
return
|
||||
/**
|
||||
* Called at the start of resolve_attackby(), before the actual attack.
|
||||
*
|
||||
* Arguments:
|
||||
* * atom/A - The atom about to be hit
|
||||
* * mob/living/user - The mob doing the htting
|
||||
* * params - click params such as alt/shift etc
|
||||
*
|
||||
* See: [/obj/item/proc/melee_attack_chain]
|
||||
*/
|
||||
|
||||
/obj/item/proc/pre_attack(atom/A, mob/user, params) //do stuff before attackby!
|
||||
if(SEND_SIGNAL(src, COMSIG_ITEM_PRE_ATTACK, A, user, params) & COMPONENT_CANCEL_ATTACK_CHAIN)
|
||||
return TRUE
|
||||
return FALSE //return TRUE to avoid calling attackby after this proc does stuff
|
||||
|
||||
//I would prefer to rename this to attack(), but that would involve touching hundreds of files.
|
||||
/obj/item/proc/resolve_attackby(atom/A, mob/user, var/attack_modifier = 1, var/click_parameters)
|
||||
pre_attack(A, user)
|
||||
add_fingerprint(user)
|
||||
. = pre_attack(A, user, click_parameters)
|
||||
if(.) // We're returning the value of pre_attack, important if it has a special return.
|
||||
return
|
||||
return A.attackby(src, user, attack_modifier, click_parameters)
|
||||
|
||||
// No comment
|
||||
/atom/proc/attackby(obj/item/W, mob/user, var/attack_modifier, var/click_parameters)
|
||||
if(SEND_SIGNAL(src, COMSIG_PARENT_ATTACKBY, W, user, click_parameters) & COMPONENT_NO_AFTERATTACK)
|
||||
if(SEND_SIGNAL(src, COMSIG_PARENT_ATTACKBY, W, user, click_parameters) & COMPONENT_CANCEL_ATTACK_CHAIN)
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/mob/living/attackby(obj/item/I, mob/user, var/attack_modifier, var/click_parameters)
|
||||
if(!ismob(user))
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
if(SEND_SIGNAL(src, COMSIG_PARENT_ATTACKBY, I, user, click_parameters) & COMPONENT_CANCEL_ATTACK_CHAIN)
|
||||
return FALSE
|
||||
|
||||
if(can_operate(src, user) && I.do_surgery(src,user))
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
return I.attack(src, user, user.zone_sel.selecting, attack_modifier)
|
||||
|
||||
// Used to get how fast a mob should attack, and influences click delay.
|
||||
|
||||
@@ -26,7 +26,9 @@
|
||||
A.attack_hand(src)
|
||||
|
||||
/atom/proc/attack_hand(mob/user as mob)
|
||||
return
|
||||
if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_HAND, user) & COMPONENT_CANCEL_ATTACK_CHAIN)
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/mob/living/carbon/human/RestrainedClickOn(var/atom/A)
|
||||
return
|
||||
|
||||
@@ -251,8 +251,8 @@ var/global/datum/emergency_shuttle_controller/emergency_shuttle = new
|
||||
layer = TURF_LAYER
|
||||
plane = TURF_PLANE
|
||||
|
||||
/obj/effect/bgstar/New()
|
||||
..()
|
||||
/obj/effect/bgstar/Initialize()
|
||||
. = ..()
|
||||
pixel_x += rand(-2,30)
|
||||
pixel_y += rand(-2,30)
|
||||
var/starnum = pick("1", "1", "1", "2", "3", "4")
|
||||
|
||||
@@ -8,70 +8,66 @@ SUBSYSTEM_DEF(atoms)
|
||||
init_order = INIT_ORDER_ATOMS
|
||||
flags = SS_NO_FIRE
|
||||
|
||||
var/static/initialized = INITIALIZATION_INSSATOMS
|
||||
// var/list/created_atoms // This is never used, so don't bother. ~Leshana
|
||||
var/static/old_initialized
|
||||
// override and GetArguments() exists for mod-override/downstream hook functionality.
|
||||
// Useful for total-overhaul type modifications.
|
||||
var/adjust_init_arguments = FALSE
|
||||
|
||||
var/atom_init_stage = INITIALIZATION_INSSATOMS
|
||||
var/old_init_stage
|
||||
|
||||
var/list/late_loaders
|
||||
var/list/created_atoms
|
||||
|
||||
var/list/BadInitializeCalls = list()
|
||||
|
||||
/datum/controller/subsystem/atoms/Initialize(timeofday)
|
||||
if(!plant_controller) // Initialize seed repo for /obj/item/seed and /obj/item/weapon/grown
|
||||
plant_controller = new
|
||||
setupgenetics() //to set the mutations' place in structural enzymes, so initializers know where to put mutations.
|
||||
initialized = INITIALIZATION_INNEW_MAPLOAD
|
||||
to_world_log("Initializing objects")
|
||||
admin_notice("<span class='danger'>Initializing objects</span>", R_DEBUG)
|
||||
atom_init_stage = INITIALIZATION_INNEW_MAPLOAD
|
||||
InitializeAtoms()
|
||||
return ..()
|
||||
|
||||
/datum/controller/subsystem/atoms/proc/InitializeAtoms(list/atoms)
|
||||
if(initialized == INITIALIZATION_INSSATOMS)
|
||||
/datum/controller/subsystem/atoms/proc/InitializeAtoms(var/list/supplied_atoms)
|
||||
|
||||
if(atom_init_stage <= INITIALIZATION_INSSATOMS_LATE)
|
||||
return
|
||||
|
||||
initialized = INITIALIZATION_INNEW_MAPLOAD
|
||||
atom_init_stage = INITIALIZATION_INNEW_MAPLOAD
|
||||
|
||||
LAZYINITLIST(late_loaders)
|
||||
|
||||
var/count
|
||||
var/list/mapload_arg = list(TRUE)
|
||||
if(atoms)
|
||||
created_atoms = list()
|
||||
count = atoms.len
|
||||
for(var/I in atoms)
|
||||
var/atom/A = I
|
||||
var/count = LAZYLEN(supplied_atoms)
|
||||
if(count)
|
||||
while(supplied_atoms.len)
|
||||
var/atom/A = supplied_atoms[supplied_atoms.len]
|
||||
supplied_atoms.len--
|
||||
if(!A.initialized)
|
||||
if(InitAtom(I, mapload_arg))
|
||||
atoms -= I
|
||||
InitAtom(A, GetArguments(A, mapload_arg))
|
||||
CHECK_TICK
|
||||
else
|
||||
count = 0
|
||||
for(var/atom/A in world) // This must be world, since this operation adds all the atoms to their specific lists.
|
||||
else if(!subsystem_initialized)
|
||||
// If wondering why not just store all atoms in a list and use the block above: that turns out unbearably expensive.
|
||||
// Instead, atoms without extra arguments in New created on server start are fished out of world directly.
|
||||
// We do this exactly once.
|
||||
|
||||
for(var/atom/A in world)
|
||||
if(!A.initialized)
|
||||
InitAtom(A, mapload_arg)
|
||||
InitAtom(A, GetArguments(A, mapload_arg, FALSE))
|
||||
++count
|
||||
CHECK_TICK
|
||||
|
||||
log_world("Initialized [count] atoms")
|
||||
report_progress("Initialized [count] atom\s")
|
||||
|
||||
initialized = INITIALIZATION_INNEW_REGULAR
|
||||
atom_init_stage = INITIALIZATION_INNEW_REGULAR
|
||||
|
||||
if(late_loaders.len)
|
||||
for(var/I in late_loaders)
|
||||
var/atom/A = I
|
||||
A.LateInitialize()
|
||||
CHECK_TICK
|
||||
testing("Late initialized [late_loaders.len] atoms")
|
||||
A.LateInitialize(arglist(late_loaders[A]))
|
||||
report_progress("Late initialized [late_loaders.len] atom\s")
|
||||
late_loaders.Cut()
|
||||
|
||||
// Nothing ever checks return value of this proc, so don't bother. If this ever changes fix code in /atom/New() ~Leshana
|
||||
// if(atoms)
|
||||
// . = created_atoms + atoms
|
||||
// created_atoms = null
|
||||
|
||||
/datum/controller/subsystem/atoms/proc/InitAtom(atom/A, list/arguments)
|
||||
LAZYREMOVE(global.pre_init_created_atoms, A)
|
||||
var/the_type = A.type
|
||||
if(QDELING(A))
|
||||
BadInitializeCalls[the_type] |= BAD_INIT_QDEL_BEFORE
|
||||
@@ -90,9 +86,9 @@ SUBSYSTEM_DEF(atoms)
|
||||
switch(result)
|
||||
if(INITIALIZE_HINT_LATELOAD)
|
||||
if(arguments[1]) //mapload
|
||||
late_loaders += A
|
||||
late_loaders[A] = arguments
|
||||
else
|
||||
A.LateInitialize()
|
||||
A.LateInitialize(arglist(arguments))
|
||||
if(INITIALIZE_HINT_QDEL)
|
||||
qdel(A)
|
||||
qdeleted = TRUE
|
||||
@@ -106,18 +102,37 @@ SUBSYSTEM_DEF(atoms)
|
||||
|
||||
return qdeleted || QDELING(A)
|
||||
|
||||
// override and GetArguments() exists for mod-override/downstream hook functionality.
|
||||
// Useful for total-overhaul type modifications.
|
||||
/atom/proc/AdjustInitializeArguments(list/arguments)
|
||||
// Lists are passed by reference so can simply modify the arguments list without returning it
|
||||
|
||||
/datum/controller/subsystem/atoms/proc/GetArguments(atom/A, list/mapload_arg, created=TRUE)
|
||||
if(!created && !adjust_init_arguments)
|
||||
return mapload_arg // Performance optimization. Nothing to do.
|
||||
var/list/arguments = mapload_arg.Copy()
|
||||
var/extra_args = LAZYACCESS(global.pre_init_created_atoms, A)
|
||||
if(created && extra_args)
|
||||
arguments += extra_args
|
||||
if(adjust_init_arguments)
|
||||
A.AdjustInitializeArguments(arguments)
|
||||
return arguments
|
||||
|
||||
/datum/controller/subsystem/atoms/stat_entry(msg)
|
||||
..("Bad Initialize Calls:[BadInitializeCalls.len]")
|
||||
|
||||
/datum/controller/subsystem/atoms/proc/map_loader_begin()
|
||||
old_initialized = initialized
|
||||
initialized = INITIALIZATION_INSSATOMS
|
||||
old_init_stage = atom_init_stage
|
||||
atom_init_stage = INITIALIZATION_INSSATOMS_LATE
|
||||
|
||||
/datum/controller/subsystem/atoms/proc/map_loader_stop()
|
||||
initialized = old_initialized
|
||||
atom_init_stage = old_init_stage
|
||||
|
||||
/datum/controller/subsystem/atoms/Recover()
|
||||
initialized = SSatoms.initialized
|
||||
if(initialized == INITIALIZATION_INNEW_MAPLOAD)
|
||||
atom_init_stage = SSatoms.atom_init_stage
|
||||
if(atom_init_stage == INITIALIZATION_INNEW_MAPLOAD)
|
||||
InitializeAtoms()
|
||||
old_initialized = SSatoms.old_initialized
|
||||
old_init_stage = SSatoms.old_init_stage
|
||||
BadInitializeCalls = SSatoms.BadInitializeCalls
|
||||
|
||||
/datum/controller/subsystem/atoms/proc/InitLog()
|
||||
|
||||
@@ -26,6 +26,10 @@ SUBSYSTEM_DEF(mapping)
|
||||
maploader = new()
|
||||
load_map_templates()
|
||||
|
||||
#if UNIT_TEST
|
||||
config.generate_map = TRUE
|
||||
#endif
|
||||
|
||||
if(config.generate_map)
|
||||
// Load the engine and other submaps.
|
||||
load_static_submaps(static_submap_landmarks)
|
||||
|
||||
@@ -87,17 +87,6 @@ SUBSYSTEM_DEF(open_space)
|
||||
// log_debug("[T] ([T.x],[T.y],[T.z]) queued for update for [src].update_icon()")
|
||||
SSopen_space.add_turf(T, 1)
|
||||
|
||||
// Ouch... this is painful. But is there any other way?
|
||||
/* - No for now
|
||||
/obj/New()
|
||||
. = ..()
|
||||
if(open_space_initialised && !invisibility)
|
||||
var/turf/T = GetAbove(src)
|
||||
if(isopenspace(T))
|
||||
// log_debug("[T] ([T.x],[T.y],[T.z]) queued for update for [src]New()")
|
||||
OS_controller.add_turf(T, 1)
|
||||
*/
|
||||
|
||||
// We probably should hook Destroy() If we can think of something more efficient, lets hear it.
|
||||
/obj/Destroy()
|
||||
if(GLOB.open_space_initialised && !invisibility && isturf(loc))
|
||||
|
||||
@@ -425,7 +425,7 @@ var/global/datum/controller/subsystem/ticker/ticker
|
||||
if(new_char)
|
||||
qdel(player)
|
||||
if(new_char.client)
|
||||
var/obj/screen/splash/S = new(new_char.client, TRUE)
|
||||
var/obj/screen/splash/S = new(null, new_char.client, TRUE)
|
||||
S.Fade(TRUE)
|
||||
|
||||
// If they're a carbon, they can get manifested
|
||||
|
||||
@@ -6,8 +6,9 @@
|
||||
name = "Initializing..."
|
||||
var/target
|
||||
|
||||
/obj/effect/statclick/New(loc, text, target) //Don't port this to Initialize it's too critical
|
||||
..()
|
||||
INITIALIZE_IMMEDIATE(/obj/effect/statclick)
|
||||
/obj/effect/statclick/Initialize(ml, text, target)
|
||||
. = ..(ml)
|
||||
name = text
|
||||
src.target = target
|
||||
|
||||
|
||||
@@ -344,7 +344,7 @@
|
||||
amt--
|
||||
|
||||
// Prepare to stuff inside product, don't delete it
|
||||
if(is_path_in_list(path_key, parts))
|
||||
if(is_path_in_list(path_key, R.parts))
|
||||
parts["items"] += I
|
||||
amt_to_transfer--
|
||||
continue
|
||||
|
||||
@@ -25,8 +25,7 @@
|
||||
var/obj/item/weapon/storage/briefcase/new_briefcase = new(H)
|
||||
for(var/obj/item/briefcase_item in new_briefcase)
|
||||
qdel(briefcase_item)
|
||||
new_briefcase.contents += new /obj/item/toy/crossbow
|
||||
new_briefcase.contents += new /obj/item/weapon/gun/projectile/revolver/capgun
|
||||
new_briefcase.contents += new /obj/item/weapon/gun/projectile/pistol/toy
|
||||
new_briefcase.contents += new /obj/item/clothing/mask/gas/clown_hat
|
||||
H.equip_to_slot_or_del(new_briefcase, slot_l_hand)
|
||||
|
||||
@@ -103,7 +102,7 @@
|
||||
suit = /obj/item/clothing/suit/storage/toggle/brown_jacket/sleeveless
|
||||
shoes = /obj/item/clothing/shoes/boots/jackboots
|
||||
gloves = /obj/item/clothing/gloves/fingerless
|
||||
l_pocket = /obj/item/toy/crossbow
|
||||
l_pocket = /obj/item/weapon/gun/projectile/revolver/toy/crossbow
|
||||
r_pocket = /obj/item/device/flashlight/color/red
|
||||
|
||||
/decl/hierarchy/outfit/costume/pirate
|
||||
@@ -120,4 +119,12 @@
|
||||
shoes = /obj/item/clothing/shoes/white
|
||||
suit = /obj/item/clothing/suit/storage/hooded/chaplain_hoodie/whiteout
|
||||
gloves = /obj/item/clothing/gloves/white
|
||||
mask = /obj/item/clothing/mask/surgical
|
||||
mask = /obj/item/clothing/mask/surgical
|
||||
|
||||
/decl/hierarchy/outfit/costume/marine
|
||||
name = OUTFIT_COSTUME("Ruin Marine")
|
||||
uniform = /obj/item/clothing/under/color/grey
|
||||
shoes = /obj/item/clothing/shoes/brown
|
||||
head = /obj/item/clothing/head/marine
|
||||
suit = /obj/item/clothing/suit/marine
|
||||
r_hand = /obj/item/weapon/gun/projectile/revolver/toy/sawnoff
|
||||
@@ -1,6 +1,6 @@
|
||||
/decl/hierarchy/outfit/job/engineering
|
||||
hierarchy_type = /decl/hierarchy/outfit/job/engineering
|
||||
belt = /obj/item/weapon/storage/belt/utility/full
|
||||
belt = /obj/item/weapon/storage/belt/utility/full/multitool
|
||||
l_ear = /obj/item/device/radio/headset/headset_eng
|
||||
shoes = /obj/item/clothing/shoes/boots/workboots
|
||||
r_pocket = /obj/item/device/t_scanner
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
name = OUTFIT_JOB_NAME("Roboticist")
|
||||
uniform = /obj/item/clothing/under/rank/roboticist
|
||||
shoes = /obj/item/clothing/shoes/black
|
||||
belt = /obj/item/weapon/storage/belt/utility/full
|
||||
belt = /obj/item/weapon/storage/belt/utility/full/multitool
|
||||
id_type = /obj/item/weapon/card/id/science
|
||||
pda_slot = slot_r_store
|
||||
pda_type = /obj/item/device/pda/roboticist
|
||||
|
||||
@@ -23,6 +23,13 @@
|
||||
containertype = /obj/structure/closet/crate/allico
|
||||
containername = "foam weapon crate"
|
||||
|
||||
/datum/supply_pack/recreation/donksoftvend
|
||||
name = "Donk-Soft Vendor Crate"
|
||||
contains = list()
|
||||
cost = 75
|
||||
containertype = /obj/structure/largecrate/donksoftvendor
|
||||
containername = "\improper Donk-Soft vendor crate"
|
||||
|
||||
/datum/supply_pack/recreation/lasertag
|
||||
name = "Lasertag equipment"
|
||||
contains = list(
|
||||
|
||||
@@ -47,9 +47,9 @@
|
||||
/obj/item/weapon/soap/deluxe
|
||||
icon_state = "soapdeluxe"
|
||||
|
||||
/obj/item/weapon/soap/deluxe/New()
|
||||
/obj/item/weapon/soap/deluxe/Initialize()
|
||||
desc = "A deluxe Waffle Co. brand bar of soap. Smells of [pick("lavender", "vanilla", "strawberry", "chocolate" ,"space")]."
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/weapon/soap/syndie
|
||||
desc = "An untrustworthy bar of soap. Smells of fear."
|
||||
@@ -363,10 +363,10 @@
|
||||
drop_sound = 'sound/items/drop/component.ogg'
|
||||
pickup_sound = 'sound/items/pickup/component.ogg'
|
||||
|
||||
/obj/item/weapon/stock_parts/New()
|
||||
/obj/item/weapon/stock_parts/Initialize()
|
||||
src.pixel_x = rand(-5.0, 5)
|
||||
src.pixel_y = rand(-5.0, 5)
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/weapon/stock_parts/get_rating()
|
||||
return rating
|
||||
@@ -390,7 +390,7 @@
|
||||
var/charge = 0
|
||||
var/max_charge = 1000
|
||||
|
||||
/obj/item/weapon/stock_parts/capacitor/New()
|
||||
/obj/item/weapon/stock_parts/capacitor/Initialize()
|
||||
. = ..()
|
||||
max_charge *= rating
|
||||
|
||||
|
||||
@@ -1831,24 +1831,6 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
|
||||
icon_state = "Tactical"
|
||||
ambience = AMBIENCE_HIGHSEC
|
||||
|
||||
|
||||
/*
|
||||
New()
|
||||
..()
|
||||
|
||||
spawn(10) //let objects set up first
|
||||
for(var/turf/turfToGrayscale in src)
|
||||
if(turfToGrayscale.icon)
|
||||
var/icon/newIcon = icon(turfToGrayscale.icon)
|
||||
newIcon.GrayScale()
|
||||
turfToGrayscale.icon = newIcon
|
||||
for(var/obj/objectToGrayscale in turfToGrayscale) //1 level deep, means tables, apcs, locker, etc, but not locker contents
|
||||
if(objectToGrayscale.icon)
|
||||
var/icon/newIcon = icon(objectToGrayscale.icon)
|
||||
newIcon.GrayScale()
|
||||
objectToGrayscale.icon = newIcon
|
||||
*/
|
||||
|
||||
/area/security/nuke_storage
|
||||
name = "\improper Vault"
|
||||
icon_state = "nuke_storage"
|
||||
|
||||
@@ -2,17 +2,12 @@
|
||||
name = "AI Monitored Area"
|
||||
var/obj/machinery/camera/motioncamera = null
|
||||
|
||||
|
||||
/area/ai_monitored/New()
|
||||
..()
|
||||
// locate and store the motioncamera
|
||||
spawn (20) // spawn on a delay to let turfs/objs load
|
||||
for (var/obj/machinery/camera/M in src)
|
||||
if(M.isMotion())
|
||||
motioncamera = M
|
||||
M.area_motion = src
|
||||
return
|
||||
return
|
||||
/area/ai_monitored/LateInitialize()
|
||||
. = ..()
|
||||
for(var/obj/machinery/camera/M in src)
|
||||
if(M.isMotion())
|
||||
motioncamera = M
|
||||
M.area_motion = src
|
||||
|
||||
/area/ai_monitored/Entered(atom/movable/O)
|
||||
..()
|
||||
@@ -22,5 +17,3 @@
|
||||
/area/ai_monitored/Exited(atom/movable/O)
|
||||
if (ismob(O) && motioncamera)
|
||||
motioncamera.lostTarget(O)
|
||||
|
||||
|
||||
|
||||
+10
-3
@@ -19,7 +19,7 @@
|
||||
|
||||
var/debug = 0
|
||||
var/requires_power = 1
|
||||
var/always_unpowered = 0 //this gets overriden to 1 for space in area/New()
|
||||
var/always_unpowered = 0 //this gets overriden to 1 for space in area/Initialize()
|
||||
|
||||
// Power channel status - Is it currently energized?
|
||||
var/power_equip = TRUE
|
||||
@@ -52,10 +52,13 @@
|
||||
var/no_spoilers = FALSE // If true, makes it much more difficult to see what is inside an area with things like mesons.
|
||||
var/soundproofed = FALSE // If true, blocks sounds from other areas and prevents hearers on other areas from hearing the sounds within.
|
||||
|
||||
/area/New()
|
||||
icon_state = ""
|
||||
luminosity = !dynamic_lighting
|
||||
..()
|
||||
|
||||
/area/Initialize()
|
||||
. = ..()
|
||||
luminosity = !(dynamic_lighting)
|
||||
icon_state = ""
|
||||
return INITIALIZE_HINT_LATELOAD // Areas tradiationally are initialized AFTER other atoms.
|
||||
|
||||
/area/LateInitialize()
|
||||
@@ -67,6 +70,10 @@
|
||||
if(no_spoilers)
|
||||
set_spoiler_obfuscation(TRUE)
|
||||
|
||||
icon = 'icons/turf/areas.dmi'
|
||||
icon_state = "white"
|
||||
blend_mode = BLEND_MULTIPLY
|
||||
|
||||
// Changes the area of T to A. Do not do this manually.
|
||||
// Area is expected to be a non-null instance.
|
||||
/proc/ChangeArea(var/turf/T, var/area/A)
|
||||
|
||||
+24
-22
@@ -43,27 +43,22 @@
|
||||
/// The chat color var, without alpha.
|
||||
var/chat_color_hover
|
||||
|
||||
var/global/list/pre_init_created_atoms // atom creation ordering means some stuff is trying to init before SSatoms exists, temp workaround
|
||||
/atom/New(loc, ...)
|
||||
// Don't call ..() unless /datum/New() ever exists
|
||||
|
||||
// During dynamic mapload (reader.dm) this assigns the var overrides from the .dmm file
|
||||
// Native BYOND maploading sets those vars before invoking New(), by doing this FIRST we come as close to that behavior as we can.
|
||||
if(use_preloader && (src.type == _preloader.target_path))//in case the instanciated atom is creating other atoms in New()
|
||||
_preloader.load(src)
|
||||
|
||||
// Pass our arguments to InitAtom so they can be passed to initialize(), but replace 1st with if-we're-during-mapload.
|
||||
var/do_initialize = SSatoms.initialized
|
||||
if(do_initialize > INITIALIZATION_INSSATOMS)
|
||||
args[1] = (do_initialize == INITIALIZATION_INNEW_MAPLOAD)
|
||||
if(SSatoms.InitAtom(src, args))
|
||||
// We were deleted. No sense continuing
|
||||
return
|
||||
|
||||
// Uncomment if anything ever uses the return value of SSatoms.InitializeAtoms ~Leshana
|
||||
// If a map is being loaded, it might want to know about newly created objects so they can be handled.
|
||||
// var/list/created = SSatoms.created_atoms
|
||||
// if(created)
|
||||
// created += src
|
||||
//atom creation method that preloads variables at creation
|
||||
if(global.use_preloader && (src.type == global._preloader.target_path))//in case the instanciated atom is creating other atoms in New()
|
||||
global._preloader.load(src)
|
||||
|
||||
var/do_initialize = SSatoms?.atom_init_stage
|
||||
if(do_initialize > INITIALIZATION_INSSATOMS_LATE)
|
||||
args[1] = do_initialize == INITIALIZATION_INNEW_MAPLOAD
|
||||
SSatoms.InitAtom(src, args)
|
||||
else
|
||||
var/list/argument_list
|
||||
if(length(args) > 1)
|
||||
argument_list = args.Copy(2)
|
||||
if(length(argument_list))
|
||||
LAZYSET(global.pre_init_created_atoms, src, argument_list)
|
||||
|
||||
// Note: I removed "auto_init" feature (letting types disable auto-init) since it shouldn't be needed anymore.
|
||||
// You can replicate the same by checking the value of the first parameter to initialize() ~Leshana
|
||||
@@ -75,6 +70,8 @@
|
||||
// Other parameters are passed from New (excluding loc), this does not happen if mapload is TRUE
|
||||
// Must return an Initialize hint. Defined in code/__defines/subsystems.dm
|
||||
/atom/proc/Initialize(mapload, ...)
|
||||
SHOULD_CALL_PARENT(TRUE)
|
||||
SHOULD_NOT_SLEEP(TRUE)
|
||||
if(QDELETED(src))
|
||||
crash_with("GC: -- [type] had initialize() called after qdel() --")
|
||||
if(initialized)
|
||||
@@ -111,6 +108,8 @@
|
||||
/atom/proc/Bumped(AM as mob|obj)
|
||||
set waitfor = FALSE
|
||||
|
||||
SEND_SIGNAL(src, COMSIG_ATOM_BUMPED, AM)
|
||||
|
||||
// Convenience proc to see if a container is open for chemistry handling
|
||||
// returns true if open
|
||||
// false if closed
|
||||
@@ -157,6 +156,9 @@
|
||||
return
|
||||
|
||||
/atom/proc/bullet_act(obj/item/projectile/P, def_zone)
|
||||
if(SEND_SIGNAL(src, COMSIG_ATOM_BULLET_ACT, P, def_zone) & COMPONENT_CANCEL_ATTACK_CHAIN)
|
||||
return
|
||||
|
||||
P.on_hit(src, 0, def_zone)
|
||||
. = 0
|
||||
|
||||
@@ -237,8 +239,8 @@
|
||||
. = new_dir != dir
|
||||
dir = new_dir
|
||||
|
||||
/atom/proc/ex_act()
|
||||
return
|
||||
/atom/proc/ex_act(var/strength = 3)
|
||||
return (SEND_SIGNAL(src, COMSIG_ATOM_EX_ACT, strength, src) & COMPONENT_IGNORE_EXPLOSION)
|
||||
|
||||
/atom/proc/emag_act(var/remaining_charges, var/mob/user, var/emag_source)
|
||||
return -1
|
||||
|
||||
@@ -60,6 +60,9 @@
|
||||
if(!loc || !newloc)
|
||||
return FALSE
|
||||
|
||||
if(SEND_SIGNAL(src, COMSIG_MOVABLE_PRE_MOVE, newloc, direct, movetime) & COMPONENT_MOVABLE_BLOCK_PRE_MOVE)
|
||||
return FALSE
|
||||
|
||||
// Store this early before we might move, it's used several places
|
||||
var/atom/oldloc = loc
|
||||
|
||||
@@ -205,6 +208,9 @@
|
||||
if(riding_datum)
|
||||
riding_datum.handle_vehicle_layer()
|
||||
riding_datum.handle_vehicle_offsets()
|
||||
|
||||
SEND_SIGNAL(src, COMSIG_MOVABLE_MOVED, old_loc, direction)
|
||||
|
||||
return TRUE
|
||||
|
||||
/atom/movable/set_dir(newdir)
|
||||
@@ -247,6 +253,9 @@
|
||||
throwing = 0
|
||||
if(QDELETED(A))
|
||||
return
|
||||
|
||||
SEND_SIGNAL(src, COMSIG_MOVABLE_BUMP, A)
|
||||
|
||||
A.Bumped(src)
|
||||
A.last_bumped = world.time
|
||||
|
||||
@@ -404,6 +413,7 @@
|
||||
src.throw_impact(A,speed)
|
||||
|
||||
/atom/movable/proc/throw_at(atom/target, range, speed, thrower)
|
||||
set waitfor = FALSE
|
||||
if(!target || !src)
|
||||
return 0
|
||||
if(target.z != src.z)
|
||||
@@ -495,10 +505,10 @@
|
||||
var/atom/master = null
|
||||
anchored = 1
|
||||
|
||||
/atom/movable/overlay/New()
|
||||
/atom/movable/overlay/Initialize()
|
||||
for(var/x in src.verbs)
|
||||
src.verbs -= x
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/atom/movable/overlay/attackby(a, b)
|
||||
if (src.master)
|
||||
|
||||
@@ -88,7 +88,7 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E
|
||||
verbs.Add(P.verbpath)
|
||||
if(P.make_hud_button)
|
||||
if(!src.ability_master)
|
||||
src.ability_master = new /obj/screen/movable/ability_master(src)
|
||||
src.ability_master = new /obj/screen/movable/ability_master(null, src)
|
||||
src.ability_master.add_ling_ability(
|
||||
object_given = src,
|
||||
verb_given = P.verbpath,
|
||||
@@ -102,7 +102,8 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E
|
||||
|
||||
var/mob/living/carbon/human/H = src
|
||||
if(istype(H))
|
||||
var/datum/absorbed_dna/newDNA = new(H.real_name, H.dna, H.species.name, H.languages, H.identifying_gender, H.flavor_texts)
|
||||
var/saved_dna = H.dna.Clone() /// Prevent transform from breaking.
|
||||
var/datum/absorbed_dna/newDNA = new(H.real_name, saved_dna, H.species.name, H.languages, H.identifying_gender, H.flavor_texts, H.modifiers)
|
||||
absorbDNA(newDNA)
|
||||
|
||||
return 1
|
||||
|
||||
@@ -344,7 +344,7 @@ var/list/datum/power/changeling/powerinstances = list()
|
||||
|
||||
if(Thepower.make_hud_button && Thepower.isVerb)
|
||||
if(!M.current.ability_master)
|
||||
M.current.ability_master = new /obj/screen/movable/ability_master(M.current)
|
||||
M.current.ability_master = new /obj/screen/movable/ability_master(null, M.current)
|
||||
M.current.ability_master.add_ling_ability(
|
||||
object_given = M.current,
|
||||
verb_given = Thepower.verbpath,
|
||||
|
||||
@@ -65,8 +65,8 @@
|
||||
defend_chance = 40 // The base chance for the weapon to parry.
|
||||
projectile_parry_chance = 15 // The base chance for a projectile to be deflected.
|
||||
|
||||
/obj/item/weapon/melee/changeling/New(location)
|
||||
..()
|
||||
/obj/item/weapon/melee/changeling/Initialize()
|
||||
. = ..()
|
||||
START_PROCESSING(SSobj, src)
|
||||
if(ismob(loc))
|
||||
visible_message("<span class='warning'>A grotesque weapon forms around [loc.name]\'s arm!</span>",
|
||||
@@ -88,11 +88,6 @@
|
||||
creator = null
|
||||
..()
|
||||
|
||||
/obj/item/weapon/melee/changeling/suicide_act(mob/user)
|
||||
var/datum/gender/T = gender_datums[user.get_visible_gender()]
|
||||
user.visible_message("<span class='danger'>[user] is impaling [T.himself] with the [src.name]! It looks like [T.he] [T.is] trying to commit suicide.</span>")
|
||||
return(BRUTELOSS)
|
||||
|
||||
/obj/item/weapon/melee/changeling/process() //Stolen from ninja swords.
|
||||
if(!creator || loc != creator || !creator.item_is_in_hands(src))
|
||||
// Tidy up a bit.
|
||||
|
||||
@@ -41,8 +41,8 @@
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) //No armor at all.
|
||||
canremove = 0
|
||||
|
||||
/obj/item/clothing/suit/space/changeling/New()
|
||||
..()
|
||||
/obj/item/clothing/suit/space/changeling/Initialize()
|
||||
. = ..()
|
||||
if(ismob(loc))
|
||||
loc.visible_message("<span class='warning'>[loc.name]\'s flesh rapidly inflates, forming a bloated mass around their body!</span>",
|
||||
"<span class='warning'>We inflate our flesh, creating a spaceproof suit!</span>",
|
||||
@@ -105,8 +105,8 @@
|
||||
max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE
|
||||
slowdown = 1.5
|
||||
|
||||
/obj/item/clothing/suit/space/changeling/armored/New()
|
||||
..()
|
||||
/obj/item/clothing/suit/space/changeling/armored/Initialize()
|
||||
. = ..()
|
||||
if(ismob(loc))
|
||||
loc.visible_message("<span class='warning'>[loc.name]\'s flesh turns black, quickly transforming into a hard, chitinous mass!</span>",
|
||||
"<span class='warning'>We harden our flesh, creating a suit of armor!</span>",
|
||||
|
||||
@@ -113,7 +113,8 @@
|
||||
agony_amount = 80
|
||||
electrocute_amount = 20
|
||||
|
||||
/obj/item/weapon/electric_hand/New()
|
||||
/obj/item/weapon/electric_hand/Initialize()
|
||||
. = ..()
|
||||
if(ismob(loc))
|
||||
visible_message("<span class='warning'>Electrical arcs form around [loc.name]\'s hand!</span>",
|
||||
"<span class='warning'>We store a charge of electricity in our hand.</span>",
|
||||
|
||||
@@ -32,7 +32,8 @@
|
||||
icon_state = "electric_hand"
|
||||
show_examine = FALSE
|
||||
|
||||
/obj/item/weapon/finger_lockpick/New()
|
||||
/obj/item/weapon/finger_lockpick/Initialize()
|
||||
. = ..()
|
||||
if(ismob(loc))
|
||||
to_chat(loc, "<span class='notice'>We shape our finger to fit inside electronics, and are ready to force them open.</span>")
|
||||
|
||||
|
||||
@@ -37,7 +37,8 @@
|
||||
|
||||
add_attack_logs(src,T,"DNA extraction sting (changeling)")
|
||||
|
||||
var/datum/absorbed_dna/newDNA = new(T.real_name, T.dna, T.species.name, T.languages)
|
||||
var/saved_dna = T.dna.Clone() /// Prevent transforming bugginess.
|
||||
var/datum/absorbed_dna/newDNA = new(T.real_name, saved_dna, T.species.name, T.languages, T.identifying_gender, T.flavor_text, T.modifiers)
|
||||
absorbDNA(newDNA)
|
||||
|
||||
feedback_add_details("changeling_powers","ED")
|
||||
|
||||
@@ -264,12 +264,10 @@ var/global/list/changeling_fabricated_clothing = list(
|
||||
access = null
|
||||
canremove = 0
|
||||
|
||||
/obj/item/weapon/card/id/syndicate/changeling/New(mob/user as mob)
|
||||
..()
|
||||
registered_user = user
|
||||
|
||||
/obj/item/weapon/card/id/syndicate/changeling/Initialize()
|
||||
. = ..()
|
||||
if(ismob(loc))
|
||||
registered_user = loc
|
||||
access = null
|
||||
|
||||
/obj/item/weapon/card/id/syndicate/changeling/verb/shred()
|
||||
|
||||
@@ -439,16 +439,9 @@
|
||||
toggled = 0 // Mainly used for overlays.
|
||||
cooldown = 0 // If set, will add a cooldown overlay and adjust click delay. Must be a multiple of 5 for overlays.
|
||||
cast_sound = null // Sound file played when this is used.
|
||||
needs_core = FALSE // Does not need a core.
|
||||
var/last_castcheck = null // The last time this spell was cast.
|
||||
|
||||
/obj/item/weapon/spell/construct/New()
|
||||
//..() //This kills the spell, because super on this calls the default spell's New, which checks for a core. Can't have that.
|
||||
if(isliving(loc))
|
||||
owner = loc
|
||||
if(!owner)
|
||||
qdel(src)
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/spell/construct/adjust_instability(var/amount) //The only drawback to the boons of the geometer is the use of a mortal's blood as fuel. Constructs have already paid that price long ago.
|
||||
return
|
||||
|
||||
|
||||
@@ -154,6 +154,7 @@
|
||||
return
|
||||
|
||||
/obj/effect/gateway/active/Initialize()
|
||||
. = ..()
|
||||
addtimer(CALLBACK(src, .proc/spawn_and_qdel), rand(30, 60) SECONDS)
|
||||
|
||||
/obj/effect/gateway/active/proc/spawn_and_qdel()
|
||||
|
||||
@@ -16,8 +16,8 @@ var/global/list/narsie_list = list()
|
||||
consume_range = 3 //How many tiles out do we eat
|
||||
|
||||
|
||||
/obj/singularity/narsie/New()
|
||||
..()
|
||||
/obj/singularity/narsie/Initialize()
|
||||
. = ..()
|
||||
narsie_list.Add(src)
|
||||
|
||||
/obj/singularity/narsie/Destroy()
|
||||
@@ -40,8 +40,8 @@ var/global/list/narsie_list = list()
|
||||
var/announce=1
|
||||
var/cause_hell = 1
|
||||
|
||||
/obj/singularity/narsie/large/New()
|
||||
..()
|
||||
/obj/singularity/narsie/large/Initialize()
|
||||
. = ..()
|
||||
if(announce)
|
||||
to_world("<font size='15' color='red'><b>[uppertext(name)] HAS RISEN</b></font>")
|
||||
world << sound('sound/effects/weather/wind/wind_5_1.ogg')
|
||||
@@ -358,6 +358,7 @@ var/global/list/narsie_list = list()
|
||||
consume(T)
|
||||
|
||||
/obj/singularity/narsie/proc/narsie_spawn_animation()
|
||||
set waitfor = FALSE
|
||||
icon = 'icons/obj/narsie_spawn_anim.dmi'
|
||||
dir = SOUTH
|
||||
move_self = 0
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
|
||||
/turf/unsimulated/wall/supermatter/Destroy()
|
||||
STOP_PROCESSING(SSturfs, src)
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/turf/unsimulated/wall/supermatter/process()
|
||||
// Only check infrequently.
|
||||
|
||||
@@ -14,9 +14,9 @@
|
||||
|
||||
consume_range = 6
|
||||
|
||||
/obj/singularity/narsie/large/exit/New()
|
||||
..()
|
||||
START_PROCESSING(SSobj, src)
|
||||
/obj/singularity/narsie/large/exit/Initialize()
|
||||
. = ..()
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/singularity/narsie/large/exit/update_icon()
|
||||
overlays = 0
|
||||
|
||||
@@ -8,9 +8,9 @@
|
||||
density = 0
|
||||
anchored = 1
|
||||
|
||||
/obj/effect/bhole/New()
|
||||
spawn(4)
|
||||
controller()
|
||||
/obj/effect/bhole/Initialize()
|
||||
. = ..()
|
||||
addtimer(CALLBACK(src, .proc/controller), 4)
|
||||
|
||||
/obj/effect/bhole/proc/controller()
|
||||
while(src)
|
||||
|
||||
@@ -23,9 +23,6 @@
|
||||
desc = "Directions for use: Requires two people, one to pull each end."
|
||||
var/cracked = 0
|
||||
|
||||
/obj/item/weapon/toy/xmas_cracker/New()
|
||||
..()
|
||||
|
||||
/obj/item/weapon/toy/xmas_cracker/attack(mob/target, mob/user)
|
||||
if( !cracked && (istype(target,/mob/living/silicon) || (istype(target,/mob/living/carbon/human) && !target.get_active_hand())) && target.stat == CONSCIOUS)
|
||||
target.visible_message("<span class='notice'>[user] and [target] pop \an [src]! *pop*</span>", "<span class='notice'>You pull \an [src] with [target]! *pop*</span>", "<span class='notice'>You hear a *pop*.</span>")
|
||||
|
||||
@@ -130,6 +130,7 @@
|
||||
. = ..()
|
||||
z_original = z
|
||||
GLOB.meteor_list += src
|
||||
SpinAnimation()
|
||||
|
||||
/obj/effect/meteor/Move()
|
||||
if(z != z_original || loc == dest)
|
||||
@@ -151,10 +152,6 @@
|
||||
GLOB.meteor_list -= src
|
||||
return ..()
|
||||
|
||||
/obj/effect/meteor/New()
|
||||
..()
|
||||
SpinAnimation()
|
||||
|
||||
/obj/effect/meteor/Bump(atom/A)
|
||||
if(A)
|
||||
if(A.handle_meteor_impact(src)) // Used for special behaviour when getting hit specifically by a meteor, like a shield.
|
||||
|
||||
@@ -62,8 +62,8 @@ var/list/all_technomancer_assistance = typesof(/datum/technomancer/assistance) -
|
||||
// Proc: New()
|
||||
// Parameters: 0
|
||||
// Description: Sets up the catalog, as shown below.
|
||||
/obj/item/weapon/technomancer_catalog/New()
|
||||
..()
|
||||
/obj/item/weapon/technomancer_catalog/Initialize()
|
||||
. = ..()
|
||||
set_up()
|
||||
|
||||
// Proc: set_up()
|
||||
|
||||
@@ -36,8 +36,8 @@
|
||||
var/list/wards_in_use = list() // Wards don't count against the cap for other summons.
|
||||
var/max_summons = 10 // Maximum allowed summoned entities. Some cores will have different caps.
|
||||
|
||||
/obj/item/weapon/technomancer_core/New()
|
||||
..()
|
||||
/obj/item/weapon/technomancer_core/Initialize()
|
||||
. = ..()
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/item/weapon/technomancer_core/Destroy()
|
||||
@@ -141,9 +141,10 @@
|
||||
var/obj/item/weapon/technomancer_core/core = null
|
||||
var/ability_icon_state = null
|
||||
|
||||
/obj/spellbutton/New(loc, var/path, var/new_name, var/new_icon_state)
|
||||
/obj/spellbutton/Initialize(var/ml, var/path, var/new_name, var/new_icon_state)
|
||||
. = ..()
|
||||
if(!path || !ispath(path))
|
||||
message_admins("ERROR: /obj/spellbutton/New() was not given a proper path!")
|
||||
message_admins("ERROR: /obj/spellbutton/Initialize() was not given a proper path!")
|
||||
qdel(src)
|
||||
src.name = new_name
|
||||
src.spellpath = path
|
||||
|
||||
@@ -36,9 +36,9 @@
|
||||
wearer.custom_pain("Your hands hurt like hell!",1)
|
||||
wearer = null
|
||||
|
||||
/obj/item/clothing/gloves/regen/New()
|
||||
/obj/item/clothing/gloves/regen/Initialize()
|
||||
START_PROCESSING(SSobj, src)
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/clothing/gloves/regen/Destroy()
|
||||
wearer = null
|
||||
|
||||
@@ -24,8 +24,8 @@
|
||||
var/datum/effect/effect/system/spark_spread/spark_system = null
|
||||
var/block_percentage = 75
|
||||
|
||||
/obj/item/clothing/suit/armor/shield/New()
|
||||
..()
|
||||
/obj/item/clothing/suit/armor/shield/Initialize()
|
||||
. = ..()
|
||||
spark_system = new /datum/effect/effect/system/spark_spread()
|
||||
spark_system.set_up(5, 0, src)
|
||||
|
||||
|
||||
@@ -108,7 +108,7 @@
|
||||
name = "hypo belt"
|
||||
desc = "A medical belt designed to carry autoinjectors and other medical equipment."
|
||||
|
||||
/obj/item/weapon/storage/belt/medical/technomancer/New()
|
||||
/obj/item/weapon/storage/belt/medical/technomancer/Initialize()
|
||||
new /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/brute(src)
|
||||
new /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/burn(src)
|
||||
new /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/toxin(src)
|
||||
@@ -117,7 +117,7 @@
|
||||
new /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/pain(src)
|
||||
new /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/organ(src)
|
||||
new /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/combat(src)
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/datum/technomancer/equipment/belt_of_holding
|
||||
name = "Belt of Holding"
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
var/toggled = 0 // Mainly used for overlays.
|
||||
var/cooldown = 0 // If set, will add a cooldown overlay and adjust click delay. Must be a multiple of 5 for overlays.
|
||||
var/cast_sound = null // Sound file played when this is used.
|
||||
var/needs_core = TRUE // Does this spell need a core to be usable?
|
||||
|
||||
// Proc: on_use_cast()
|
||||
// Parameters: 1 (user - the technomancer casting the spell)
|
||||
@@ -110,18 +111,18 @@
|
||||
// Proc: New()
|
||||
// Parameters: 0
|
||||
// Description: Sets owner to equal its loc, links to the owner's core, then applies overlays if needed.
|
||||
/obj/item/weapon/spell/New()
|
||||
..()
|
||||
/obj/item/weapon/spell/Initialize()
|
||||
. = ..()
|
||||
if(isliving(loc))
|
||||
owner = loc
|
||||
if(owner)
|
||||
core = owner.get_technomancer_core()
|
||||
if(!core)
|
||||
if(!core && needs_core)
|
||||
to_chat(owner, "<span class='warning'>You need a Core to do that.</span>")
|
||||
qdel(src)
|
||||
return
|
||||
// if(istype(/obj/item/weapon/technomancer_core, owner.back))
|
||||
// core = owner.back
|
||||
return INITIALIZE_HINT_QDEL
|
||||
else
|
||||
return INITIALIZE_HINT_QDEL
|
||||
|
||||
update_icon()
|
||||
|
||||
// Proc: Destroy()
|
||||
|
||||
@@ -41,8 +41,8 @@
|
||||
aspect = ASPECT_CHROMATIC
|
||||
var/glow_color = "#FFFFFF"
|
||||
|
||||
/obj/item/weapon/spell/aura/New()
|
||||
..()
|
||||
/obj/item/weapon/spell/aura/Initialize()
|
||||
. = ..()
|
||||
set_light(7, 4, l_color = glow_color)
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
aspect = null
|
||||
var/glow_color = "#FFFFFF"
|
||||
|
||||
/obj/item/weapon/spell/aura/New()
|
||||
..()
|
||||
/obj/item/weapon/spell/aura/Initialize()
|
||||
. = ..()
|
||||
set_light(calculate_spell_power(7), calculate_spell_power(4), l_color = glow_color)
|
||||
START_PROCESSING(SSobj, src)
|
||||
log_and_message_admins("has started casting [src].")
|
||||
|
||||
@@ -14,8 +14,8 @@
|
||||
aspect = ASPECT_LIGHT
|
||||
var/color_to_use = "#FFFFFF"
|
||||
|
||||
/obj/item/weapon/spell/chroma/New()
|
||||
..()
|
||||
/obj/item/weapon/spell/chroma/Initialize()
|
||||
. = ..()
|
||||
set_light(6, 5, l_color = color_to_use)
|
||||
|
||||
/obj/effect/temporary_effect/chroma
|
||||
|
||||
@@ -20,8 +20,8 @@
|
||||
var/list/things_to_siphon = list() //Things which are actually drained as a result of the above not being null.
|
||||
var/flow_rate = 1000 // Limits how much electricity can be drained per second. Measured by default in god knows what.
|
||||
|
||||
/obj/item/weapon/spell/energy_siphon/New()
|
||||
..()
|
||||
/obj/item/weapon/spell/energy_siphon/Initialize()
|
||||
. = ..()
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/item/weapon/spell/energy_siphon/Destroy()
|
||||
|
||||
@@ -14,8 +14,8 @@
|
||||
aspect = ASPECT_FIRE
|
||||
var/obj/item/weapon/weldingtool/spell/welder = null
|
||||
|
||||
/obj/item/weapon/spell/flame_tongue/New()
|
||||
..()
|
||||
/obj/item/weapon/spell/flame_tongue/Initialize()
|
||||
. = ..()
|
||||
set_light(3, 2, l_color = "#FF6A00")
|
||||
visible_message("<span class='warning'>\The [loc]'s hand begins to emit a flame.</span>")
|
||||
welder = new /obj/item/weapon/weldingtool/spell(src)
|
||||
|
||||
@@ -11,8 +11,8 @@
|
||||
var/obj/item/weapon/inserted_spell/inserting = null
|
||||
var/allow_stacking = 0
|
||||
|
||||
/obj/item/weapon/spell/insert/New()
|
||||
..()
|
||||
/obj/item/weapon/spell/insert/Initialize()
|
||||
. = ..()
|
||||
set_light(spell_light_range, spell_light_intensity, l_color = light_color)
|
||||
|
||||
/obj/item/weapon/inserted_spell
|
||||
@@ -20,9 +20,9 @@
|
||||
var/mob/living/host = null
|
||||
var/spell_power_at_creation = 1.0 // This is here because the spell object that made this object probably won't exist.
|
||||
|
||||
/obj/item/weapon/inserted_spell/New(var/newloc, var/user, var/obj/item/weapon/spell/insert/inserter)
|
||||
..(newloc)
|
||||
host = newloc
|
||||
/obj/item/weapon/inserted_spell/Initialize(var/ml, var/user, var/obj/item/weapon/spell/insert/inserter)
|
||||
. = ..()
|
||||
host = loc
|
||||
origin = user
|
||||
if(light_color)
|
||||
spawn(1)
|
||||
|
||||
@@ -14,8 +14,8 @@
|
||||
cast_methods = CAST_USE
|
||||
aspect = ASPECT_UNSTABLE
|
||||
|
||||
/obj/item/weapon/spell/instability_tap/New()
|
||||
..()
|
||||
/obj/item/weapon/spell/instability_tap/Initialize()
|
||||
. = ..()
|
||||
set_light(3, 2, l_color = "#FA58F4")
|
||||
|
||||
/obj/item/weapon/spell/instability_tap/on_use_cast(mob/user)
|
||||
|
||||
@@ -9,8 +9,8 @@
|
||||
var/spell_light_intensity = 2
|
||||
var/spell_light_range = 3
|
||||
|
||||
/obj/item/weapon/spell/modifier/New()
|
||||
..()
|
||||
/obj/item/weapon/spell/modifier/Initialize()
|
||||
. = ..()
|
||||
set_light(spell_light_range, spell_light_intensity, l_color = light_color)
|
||||
|
||||
/obj/item/weapon/spell/modifier/on_melee_cast(atom/hit_atom, mob/user)
|
||||
|
||||
@@ -15,8 +15,8 @@
|
||||
cast_methods = CAST_USE
|
||||
aspect = ASPECT_TELE
|
||||
|
||||
/obj/item/weapon/spell/phase_shift/New()
|
||||
..()
|
||||
/obj/item/weapon/spell/phase_shift/Initialize()
|
||||
. = ..()
|
||||
set_light(3, 2, l_color = "#FA58F4")
|
||||
|
||||
/obj/effect/phase_shift
|
||||
@@ -28,8 +28,8 @@
|
||||
/obj/effect/phase_shift/ex_act()
|
||||
return
|
||||
|
||||
/obj/effect/phase_shift/New()
|
||||
..()
|
||||
/obj/effect/phase_shift/Initialize()
|
||||
. = ..()
|
||||
set_light(3, 5, l_color = "#FA58F4")
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
|
||||
@@ -16,8 +16,8 @@
|
||||
var/power = 250
|
||||
toggled = 1
|
||||
|
||||
/obj/item/weapon/spell/radiance/New()
|
||||
..()
|
||||
/obj/item/weapon/spell/radiance/Initialize()
|
||||
. = ..()
|
||||
set_light(7, 4, l_color = "#D9D900")
|
||||
START_PROCESSING(SSobj, src)
|
||||
log_and_message_admins("has casted [src].")
|
||||
|
||||
@@ -16,8 +16,8 @@
|
||||
var/damage_to_energy_multiplier = 60.0 //Determines how much energy to charge for blocking, e.g. 20 damage attack = 1200 energy cost
|
||||
var/datum/effect/effect/system/spark_spread/spark_system = null
|
||||
|
||||
/obj/item/weapon/spell/reflect/New()
|
||||
..()
|
||||
/obj/item/weapon/spell/reflect/Initialize()
|
||||
. = ..()
|
||||
set_light(3, 2, l_color = "#006AFF")
|
||||
spark_system = new /datum/effect/effect/system/spark_spread()
|
||||
spark_system.set_up(5, 0, src)
|
||||
|
||||
@@ -18,8 +18,8 @@
|
||||
var/damage_to_energy_multiplier = 30.0 //Determines how much energy to charge for blocking, e.g. 20 damage attack = 600 energy cost
|
||||
var/datum/effect/effect/system/spark_spread/spark_system = null
|
||||
|
||||
/obj/item/weapon/spell/shield/New()
|
||||
..()
|
||||
/obj/item/weapon/spell/shield/Initialize()
|
||||
. = ..()
|
||||
set_light(3, 2, l_color = "#006AFF")
|
||||
spark_system = new /datum/effect/effect/system/spark_spread()
|
||||
spark_system.set_up(5, 0, src)
|
||||
|
||||
@@ -18,8 +18,8 @@
|
||||
adjust_instability(4)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/spell/spawner/darkness/New()
|
||||
..()
|
||||
/obj/item/weapon/spell/spawner/darkness/Initialize()
|
||||
. = ..()
|
||||
set_light(6, -20, l_color = "#FFFFFF")
|
||||
|
||||
/obj/effect/temporary_effect/darkness
|
||||
|
||||
@@ -14,8 +14,8 @@
|
||||
aspect = ASPECT_UNSTABLE
|
||||
spawner_type = /obj/effect/temporary_effect/destablize
|
||||
|
||||
/obj/item/weapon/spell/spawner/destablize/New()
|
||||
..()
|
||||
/obj/item/weapon/spell/spawner/destablize/Initialize()
|
||||
. = ..()
|
||||
set_light(3, 2, l_color = "#C26DDE")
|
||||
|
||||
/obj/item/weapon/spell/spawner/destablize/on_ranged_cast(atom/hit_atom, mob/user)
|
||||
|
||||
@@ -13,8 +13,8 @@
|
||||
aspect = ASPECT_EMP
|
||||
spawner_type = /obj/effect/temporary_effect/pulse/pulsar
|
||||
|
||||
/obj/item/weapon/spell/spawner/pulsar/New()
|
||||
..()
|
||||
/obj/item/weapon/spell/spawner/pulsar/Initialize()
|
||||
. = ..()
|
||||
set_light(3, 2, l_color = "#2ECCFA")
|
||||
|
||||
/obj/item/weapon/spell/spawner/pulsar/on_ranged_cast(atom/hit_atom, mob/user)
|
||||
|
||||
@@ -14,8 +14,8 @@
|
||||
aspect = ASPECT_TELE
|
||||
var/datum/effect/effect/system/spark_spread/sparks
|
||||
|
||||
/obj/item/weapon/spell/warp_strike/New()
|
||||
..()
|
||||
/obj/item/weapon/spell/warp_strike/Initialize()
|
||||
. = ..()
|
||||
sparks = new /datum/effect/effect/system/spark_spread()
|
||||
sparks.set_up(5, 0, src)
|
||||
sparks.attach(loc)
|
||||
|
||||
@@ -23,7 +23,10 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
|
||||
economic_modifier = 20
|
||||
|
||||
minimum_character_age = 25
|
||||
min_age_by_species = list(SPECIES_HUMAN_VATBORN = 14)
|
||||
ideal_character_age = 70 // Old geezer captains ftw
|
||||
ideal_age_by_species = list(SPECIES_HUMAN_VATBORN = 55) /// Vatborn live shorter, no other race eligible for captain besides human/skrell
|
||||
banned_job_species = list(SPECIES_UNATHI, SPECIES_TAJ, SPECIES_DIONA, SPECIES_PROMETHEAN, SPECIES_ZADDAT, "mechanical", "digital")
|
||||
|
||||
outfit_type = /decl/hierarchy/outfit/job/captain
|
||||
job_description = "The Site Manager manages the other Command Staff, and through them the rest of the station. Though they have access to everything, \
|
||||
@@ -31,6 +34,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
|
||||
have an understanding of Standard Operating Procedure, and is subject to it, and legal action, in the same way as every other crew member."
|
||||
alt_titles = list("Overseer"= /datum/alt_title/overseer)
|
||||
|
||||
|
||||
/*
|
||||
/datum/job/captain/equip(var/mob/living/carbon/human/H)
|
||||
. = ..()
|
||||
@@ -66,7 +70,10 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
|
||||
economic_modifier = 10
|
||||
|
||||
minimum_character_age = 25
|
||||
min_age_by_species = list(SPECIES_UNATHI = 70, SPECIES_TESHARI = 20, "mechanical" = 10, SPECIES_HUMAN_VATBORN = 14)
|
||||
ideal_character_age = 50
|
||||
ideal_age_by_species = list(SPECIES_UNATHI = 140, SPECIES_TESHARI = 27, "mechanical" = 20, SPECIES_HUMAN_VATBORN = 20)
|
||||
banned_job_species = list(SPECIES_PROMETHEAN, SPECIES_ZADDAT, "digital", SPECIES_DIONA)
|
||||
|
||||
outfit_type = /decl/hierarchy/outfit/job/hop
|
||||
job_description = "The Head of Personnel manages the Service department, the Exploration team, and most other civilians. They also \
|
||||
|
||||
@@ -99,6 +99,7 @@
|
||||
economic_modifier = 5
|
||||
access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station)
|
||||
minimal_access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station)
|
||||
banned_job_species = list("digital", SPECIES_PROMETHEAN)
|
||||
|
||||
ideal_character_age = 40
|
||||
|
||||
@@ -231,6 +232,7 @@
|
||||
access = list(access_lawyer, access_sec_doors, access_maint_tunnels, access_heads)
|
||||
minimal_access = list(access_lawyer, access_sec_doors, access_heads)
|
||||
minimal_player_age = 7
|
||||
banned_job_species = list(SPECIES_PROMETHEAN, SPECIES_UNATHI, SPECIES_DIONA, SPECIES_TESHARI, SPECIES_ZADDAT, "digital")
|
||||
|
||||
outfit_type = /decl/hierarchy/outfit/job/internal_affairs_agent
|
||||
job_description = "An Internal Affairs Agent makes sure that the crew is following Standard Operating Procedure. They also \
|
||||
|
||||
@@ -17,7 +17,10 @@
|
||||
economic_modifier = 10
|
||||
|
||||
minimum_character_age = 25
|
||||
min_age_by_species = list(SPECIES_UNATHI = 70, "mechanical" = 10, SPECIES_HUMAN_VATBORN = 14)
|
||||
ideal_character_age = 50
|
||||
ideal_age_by_species = list(SPECIES_UNATHI = 140, "mechanical" = 20, SPECIES_HUMAN_VATBORN = 20)
|
||||
banned_job_species = list(SPECIES_TESHARI, SPECIES_DIONA, SPECIES_PROMETHEAN, SPECIES_ZADDAT, "digital")
|
||||
|
||||
|
||||
access = list(access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels,
|
||||
@@ -55,6 +58,7 @@
|
||||
"Engine Technician" = /datum/alt_title/engine_tech, "Electrician" = /datum/alt_title/electrician)
|
||||
|
||||
minimal_player_age = 3
|
||||
min_age_by_species = list(SPECIES_PROMETHEAN = 2)
|
||||
|
||||
outfit_type = /decl/hierarchy/outfit/job/engineering/engineer
|
||||
job_description = "An Engineer keeps the station running. They repair damages, keep the atmosphere stable, and ensure that power is being \
|
||||
@@ -94,6 +98,7 @@
|
||||
minimal_access = list(access_eva, access_engine, access_atmospherics, access_maint_tunnels, access_emergency_storage, access_construction, access_external_airlocks)
|
||||
|
||||
minimal_player_age = 3
|
||||
min_age_by_species = list(SPECIES_PROMETHEAN = 2)
|
||||
|
||||
outfit_type = /decl/hierarchy/outfit/job/engineering/atmos
|
||||
job_description = "An Atmospheric Technician is primarily concerned with keeping the station's atmosphere breathable. They are expected to have a good \
|
||||
|
||||
@@ -22,7 +22,10 @@
|
||||
var/department_accounts = null // Which department accounts should people with this position be given the pin for?
|
||||
var/assignable = TRUE // Should it show up on things like the ID computer?
|
||||
var/minimum_character_age = 0
|
||||
var/list/min_age_by_species = null
|
||||
var/ideal_character_age = 30
|
||||
var/list/ideal_age_by_species = null
|
||||
var/list/banned_job_species = null
|
||||
var/has_headset = TRUE //Do people with this job need to be given headsets and told how to use them? E.g. Cyborgs don't.
|
||||
|
||||
var/account_allowed = 1 // Does this job type come with a station account?
|
||||
@@ -158,4 +161,20 @@
|
||||
if(mannequin.back)
|
||||
var/obj/O = mannequin.back
|
||||
mannequin.drop_from_inventory(O)
|
||||
qdel(O)
|
||||
qdel(O)
|
||||
|
||||
///Assigns minimum age by race & brain type. Code says Positronic = mechanical and Drone = digital because nothing can be simple.
|
||||
///Will first check based on brain type, then based on species.
|
||||
/datum/job/proc/get_min_age(species_name, brain_type)
|
||||
return (brain_type && LAZYACCESS(min_age_by_species, brain_type)) || LAZYACCESS(min_age_by_species, species_name) || minimum_character_age
|
||||
|
||||
/datum/job/proc/get_ideal_age(species_name, brain_type)
|
||||
return (brain_type && LAZYACCESS(ideal_age_by_species, brain_type)) || LAZYACCESS(ideal_age_by_species, brain_type) || ideal_character_age
|
||||
|
||||
/datum/job/proc/is_species_banned(species_name, brain_type)
|
||||
if(banned_job_species == null)
|
||||
return
|
||||
if(species_name in banned_job_species)
|
||||
return TRUE
|
||||
if(brain_type in banned_job_species)
|
||||
return TRUE
|
||||
@@ -23,8 +23,11 @@
|
||||
access_keycard_auth, access_sec_doors, access_psychiatrist, access_eva, access_external_airlocks, access_maint_tunnels)
|
||||
|
||||
minimum_character_age = 25
|
||||
min_age_by_species = list(SPECIES_UNATHI = 70, "mechanical" = 10, SPECIES_HUMAN_VATBORN = 14)
|
||||
minimal_player_age = 10
|
||||
ideal_character_age = 50
|
||||
ideal_age_by_species = list(SPECIES_UNATHI = 140, "mechanical" = 20, SPECIES_HUMAN_VATBORN = 20)
|
||||
banned_job_species = list(SPECIES_TESHARI, SPECIES_DIONA, SPECIES_PROMETHEAN, SPECIES_ZADDAT, "digital")
|
||||
|
||||
outfit_type = /decl/hierarchy/outfit/job/medical/cmo
|
||||
job_description = "The CMO manages the Medical department and is a position requiring experience and skill; their goal is to ensure that their \
|
||||
@@ -58,6 +61,8 @@
|
||||
"Nurse" = /datum/alt_title/nurse,
|
||||
"Virologist" = /datum/alt_title/virologist)
|
||||
|
||||
min_age_by_species = list(SPECIES_PROMETHEAN = 3)
|
||||
|
||||
//Medical Doctor Alt Titles
|
||||
/datum/alt_title/surgeon
|
||||
title = "Surgeon"
|
||||
@@ -103,6 +108,7 @@
|
||||
access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics)
|
||||
minimal_access = list(access_medical, access_medical_equip, access_chemistry)
|
||||
minimal_player_age = 3
|
||||
min_age_by_species = list(SPECIES_PROMETHEAN = 3)
|
||||
|
||||
outfit_type = /decl/hierarchy/outfit/job/medical/chemist
|
||||
job_description = "A Chemist produces and maintains a stock of basic to advanced chemicals for medical and occasionally research use. \
|
||||
@@ -157,6 +163,7 @@
|
||||
job_description = "A Psychiatrist provides mental health services to crew members in need. They may also be called upon to determine whatever \
|
||||
ails the mentally unwell, frequently under Security supervision. They understand the effects of various psychoactive drugs."
|
||||
alt_titles = list("Psychologist" = /datum/alt_title/psychologist)
|
||||
banned_job_species = list(SPECIES_PROMETHEAN, SPECIES_DIONA)
|
||||
|
||||
//Psychiatrist Alt Titles
|
||||
/datum/alt_title/psychologist
|
||||
@@ -185,6 +192,9 @@
|
||||
job_description = "A Paramedic is primarily concerned with the recovery of patients who are unable to make it to the Medical Department on their own. \
|
||||
They may also be called upon to keep patients stable when Medical is busy or understaffed."
|
||||
alt_titles = list("Emergency Medical Technician" = /datum/alt_title/emt)
|
||||
banned_job_species = list(SPECIES_DIONA)
|
||||
|
||||
min_age_by_species = list(SPECIES_PROMETHEAN = 2)
|
||||
|
||||
// Paramedic Alt Titles
|
||||
/datum/alt_title/emt
|
||||
|
||||
@@ -26,7 +26,10 @@
|
||||
|
||||
minimum_character_age = 25
|
||||
minimal_player_age = 14
|
||||
min_age_by_species = list(SPECIES_UNATHI = 70, "mechanical" = 10, SPECIES_HUMAN_VATBORN = 14)
|
||||
ideal_character_age = 50
|
||||
ideal_age_by_species = list(SPECIES_UNATHI = 140, "mechanical" = 20, SPECIES_HUMAN_VATBORN = 20)
|
||||
banned_job_species = list(SPECIES_TESHARI, SPECIES_DIONA, SPECIES_PROMETHEAN, SPECIES_ZADDAT, "digital")
|
||||
|
||||
outfit_type = /decl/hierarchy/outfit/job/science/rd
|
||||
job_description = "The Research Director manages and maintains the Research department. They are required to ensure the safety of the entire crew, \
|
||||
@@ -35,6 +38,7 @@
|
||||
are encouraged to allow their staff to perform their own duties."
|
||||
alt_titles = list("Research Supervisor" = /datum/alt_title/research_supervisor)
|
||||
|
||||
|
||||
// Research Director Alt Titles
|
||||
/datum/alt_title/research_supervisor
|
||||
title = "Research Supervisor"
|
||||
@@ -55,6 +59,8 @@
|
||||
economic_modifier = 7
|
||||
access = list(access_robotics, access_tox, access_tox_storage, access_research, access_xenobiology, access_xenoarch)
|
||||
minimal_access = list(access_tox, access_tox_storage, access_research, access_xenoarch)
|
||||
min_age_by_species = list(SPECIES_PROMETHEAN = 2)
|
||||
banned_job_species = list("digital")
|
||||
|
||||
minimal_player_age = 14
|
||||
|
||||
@@ -98,8 +104,10 @@
|
||||
economic_modifier = 7
|
||||
access = list(access_robotics, access_tox, access_tox_storage, access_research, access_xenobiology, access_hydroponics)
|
||||
minimal_access = list(access_research, access_xenobiology, access_hydroponics, access_tox_storage)
|
||||
banned_job_species = list("digital")
|
||||
|
||||
minimal_player_age = 14
|
||||
min_age_by_species = list(SPECIES_PROMETHEAN = 2)
|
||||
|
||||
outfit_type = /decl/hierarchy/outfit/job/science/xenobiologist
|
||||
job_description = "A Xenobiologist studies esoteric lifeforms, usually in the relative safety of their lab. They attempt to find ways to benefit \
|
||||
@@ -129,6 +137,8 @@
|
||||
access = list(access_robotics, access_tox, access_tox_storage, access_tech_storage, access_morgue, access_research) //As a job that handles so many corpses, it makes sense for them to have morgue access.
|
||||
minimal_access = list(access_robotics, access_tech_storage, access_morgue, access_research) //As a job that handles so many corpses, it makes sense for them to have morgue access.
|
||||
minimal_player_age = 7
|
||||
min_age_by_species = list(SPECIES_PROMETHEAN = 2)
|
||||
banned_job_species = list("digital")
|
||||
|
||||
outfit_type = /decl/hierarchy/outfit/job/science/roboticist
|
||||
job_description = "A Roboticist maintains and repairs the station's synthetics, including crew with prosthetic limbs. \
|
||||
|
||||
@@ -24,7 +24,11 @@
|
||||
access_research, access_engine, access_mining, access_medical, access_construction, access_mailsorting,
|
||||
access_heads, access_hos, access_RC_announce, access_keycard_auth, access_gateway, access_external_airlocks)
|
||||
minimum_character_age = 25
|
||||
min_age_by_species = list(SPECIES_HUMAN_VATBORN = 14)
|
||||
minimal_player_age = 14
|
||||
ideal_character_age = 50
|
||||
ideal_age_by_species = list(SPECIES_HUMAN_VATBORN = 20)
|
||||
banned_job_species = list(SPECIES_TESHARI, SPECIES_DIONA, SPECIES_PROMETHEAN, SPECIES_ZADDAT, "digital", SPECIES_UNATHI, "mechanical")
|
||||
|
||||
outfit_type = /decl/hierarchy/outfit/job/security/hos
|
||||
job_description = " The Head of Security manages the Security Department, keeping the station safe and making sure the rules are followed. They are expected to \
|
||||
@@ -32,6 +36,7 @@
|
||||
perform the duties of absent Security roles, such as distributing gear from the Armory."
|
||||
alt_titles = list("Security Commander" = /datum/alt_title/sec_commander, "Chief of Security" = /datum/alt_title/sec_chief)
|
||||
|
||||
|
||||
// Head of Security Alt Titles
|
||||
/datum/alt_title/sec_commander
|
||||
title = "Security Commander"
|
||||
@@ -57,6 +62,7 @@
|
||||
access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory, access_maint_tunnels, access_morgue, access_external_airlocks)
|
||||
minimal_access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory, access_maint_tunnels, access_external_airlocks)
|
||||
minimal_player_age = 5
|
||||
banned_job_species = list(SPECIES_ZADDAT, SPECIES_PROMETHEAN, SPECIES_TESHARI, SPECIES_DIONA)
|
||||
|
||||
outfit_type = /decl/hierarchy/outfit/job/security/warden
|
||||
job_description = "The Warden watches over the physical Security Department, making sure the Brig and Armoury are secure and in order at all times. They oversee \
|
||||
@@ -81,6 +87,7 @@
|
||||
minimal_access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_eva, access_external_airlocks)
|
||||
economic_modifier = 5
|
||||
minimal_player_age = 3
|
||||
banned_job_species = list(SPECIES_ZADDAT, SPECIES_PROMETHEAN, SPECIES_DIONA)
|
||||
|
||||
outfit_type = /decl/hierarchy/outfit/job/security/detective
|
||||
job_description = "A Detective works to help Security find criminals who have not properly been identified, through interviews and forensic work. \
|
||||
@@ -110,6 +117,7 @@
|
||||
access = list(access_security, access_eva, access_sec_doors, access_brig, access_maint_tunnels, access_morgue, access_external_airlocks)
|
||||
minimal_access = list(access_security, access_eva, access_sec_doors, access_brig, access_maint_tunnels, access_external_airlocks)
|
||||
minimal_player_age = 3
|
||||
banned_job_species = list(SPECIES_ZADDAT, SPECIES_TESHARI, SPECIES_DIONA)
|
||||
|
||||
outfit_type = /decl/hierarchy/outfit/job/security/officer
|
||||
job_description = "A Security Officer is concerned with maintaining the safety and security of the station as a whole, dealing with external threats and \
|
||||
@@ -117,6 +125,8 @@
|
||||
No one is above the Law, not Security or Command."
|
||||
alt_titles = list("Junior Officer" = /datum/alt_title/junior_officer)
|
||||
|
||||
min_age_by_species = list(SPECIES_PROMETHEAN = 3)
|
||||
|
||||
// Security Officer Alt Titles
|
||||
/datum/alt_title/junior_officer
|
||||
title = "Junior Officer"
|
||||
|
||||
@@ -54,7 +54,7 @@ var/global/datum/controller/occupations/job_master
|
||||
var/datum/job/job = GetJob(rank)
|
||||
if(!job)
|
||||
return 0
|
||||
if(job.minimum_character_age && (player.client.prefs.age < job.minimum_character_age))
|
||||
if((job.minimum_character_age || job.min_age_by_species) && (player.client.prefs.age < job.get_min_age(player.client.prefs.species, player.client.prefs.organ_data["brain"])))
|
||||
return 0
|
||||
if(jobban_isbanned(player, rank))
|
||||
return 0
|
||||
@@ -91,9 +91,12 @@ var/global/datum/controller/occupations/job_master
|
||||
if(!job.player_old_enough(player.client))
|
||||
Debug("FOC player not old enough, Player: [player]")
|
||||
continue
|
||||
if(job.minimum_character_age && (player.client.prefs.age < job.minimum_character_age))
|
||||
if(job.minimum_character_age && (player.client.prefs.age < job.get_min_age(player.client.prefs.species, player.client.prefs.organ_data["brain"])))
|
||||
Debug("FOC character not old enough, Player: [player]")
|
||||
continue
|
||||
if(job.is_species_banned(player.client.prefs.species, player.client.prefs.organ_data["brain"]) == TRUE)
|
||||
Debug("FOC character species invalid for job, Player: [player]")
|
||||
continue
|
||||
if(flag && !(player.client.prefs.be_special & flag))
|
||||
Debug("FOC flag failed, Player: [player], Flag: [flag], ")
|
||||
continue
|
||||
@@ -108,7 +111,10 @@ var/global/datum/controller/occupations/job_master
|
||||
if(!job)
|
||||
continue
|
||||
|
||||
if(job.minimum_character_age && (player.client.prefs.age < job.minimum_character_age))
|
||||
if((job.minimum_character_age || job.min_age_by_species) && (player.client.prefs.age < job.get_min_age(player.client.prefs.species, player.client.prefs.organ_data["brain"])))
|
||||
continue
|
||||
|
||||
if(job.is_species_banned(player.client.prefs.species, player.client.prefs.organ_data["brain"]) == TRUE)
|
||||
continue
|
||||
|
||||
if(istype(job, GetJob("Assistant"))) // We don't want to give him assistant, that's boring!
|
||||
@@ -157,20 +163,18 @@ var/global/datum/controller/occupations/job_master
|
||||
if(!V.client) continue
|
||||
var/age = V.client.prefs.age
|
||||
|
||||
if(age < job.minimum_character_age) // Nope.
|
||||
if(age < job.get_min_age(V.client.prefs.species, V.client.prefs.organ_data["brain"])) // Nope.
|
||||
continue
|
||||
|
||||
switch(age)
|
||||
if(job.minimum_character_age to (job.minimum_character_age+10))
|
||||
weightedCandidates[V] = 3 // Still a bit young.
|
||||
if((job.minimum_character_age+10) to (job.ideal_character_age-10))
|
||||
weightedCandidates[V] = 6 // Better.
|
||||
if((job.ideal_character_age-10) to (job.ideal_character_age+10))
|
||||
weightedCandidates[V] = 10 // Great.
|
||||
if((job.ideal_character_age+10) to (job.ideal_character_age+20))
|
||||
weightedCandidates[V] = 6 // Still good.
|
||||
if((job.ideal_character_age+20) to INFINITY)
|
||||
weightedCandidates[V] = 3 // Geezer.
|
||||
var/idealage = job.get_ideal_age(V.client.prefs.species, V.client.prefs.organ_data["brain"])
|
||||
var/agediff = abs(idealage - age) // Compute the absolute difference in age from target
|
||||
switch(agediff) /// If the math sucks, it's because I almost failed algebra in high school.
|
||||
if(20 to INFINITY)
|
||||
weightedCandidates[V] = 3 // Too far off
|
||||
if(10 to 20)
|
||||
weightedCandidates[V] = 6 // Nearer the mark, but not quite
|
||||
if(0 to 10)
|
||||
weightedCandidates[V] = 10 // On the mark
|
||||
else
|
||||
// If there's ABSOLUTELY NOBODY ELSE
|
||||
if(candidates.len == 1) weightedCandidates[V] = 1
|
||||
|
||||
@@ -10,8 +10,8 @@
|
||||
idle_power_usage = 0
|
||||
var/obj/item/device/radio/beacon/Beacon
|
||||
|
||||
/obj/machinery/bluespace_beacon/New()
|
||||
..()
|
||||
/obj/machinery/bluespace_beacon/Initialize()
|
||||
. = ..()
|
||||
var/turf/T = src.loc
|
||||
Beacon = new /obj/item/device/radio/beacon
|
||||
Beacon.invisibility = INVISIBILITY_MAXIMUM
|
||||
|
||||
@@ -8,10 +8,10 @@
|
||||
var/max_cable = 100
|
||||
var/on = 0
|
||||
|
||||
/obj/machinery/cablelayer/New()
|
||||
/obj/machinery/cablelayer/Initialize()
|
||||
cable = new(src)
|
||||
cable.amount = 100
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/machinery/cablelayer/Moved(atom/old_loc, direction, forced = FALSE)
|
||||
. = ..()
|
||||
|
||||
@@ -14,8 +14,8 @@
|
||||
var/strapped = 0.0
|
||||
var/obj/machinery/computer/operating/computer = null
|
||||
|
||||
/obj/machinery/optable/New()
|
||||
..()
|
||||
/obj/machinery/optable/Initialize()
|
||||
. = ..()
|
||||
for(var/direction in list(NORTH,EAST,SOUTH,WEST))
|
||||
computer = locate(/obj/machinery/computer/operating, get_step(src, direction))
|
||||
if(computer)
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user