diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 58a700fd80..33b71bb2aa 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -24,6 +24,34 @@ jobs:
tools/ci/validate_files.sh
tools/ci/build_tgui.sh
+ dreamchecker:
+ name: DreamChecker
+ runs-on: ubuntu-18.04
+ steps:
+ - uses: actions/checkout@v2
+
+ - name: Cache SpacemanDMM
+ uses: actions/cache@v2
+ with:
+ path: ~/SpacemanDMM
+ key: ${{ runner.os }}-dreamchecker-${{ hashFiles('dependencies.sh')}}
+ restore-keys: ${{ runner.os }}-dreamchecker
+
+ - name: Install Dependencies
+ run: |
+ tools/ci/install_spaceman_dmm.sh dreamchecker
+
+ - name: Run Linter
+ id: linter
+ run: |
+ ~/dreamchecker > ${GITHUB_WORKSPACE}/output-annotations.txt 2>&1
+
+ - name: Annotate Linter
+ uses: yogstation13/DreamAnnotate@v1
+ if: always()
+ with:
+ outputFile: output-annotations.txt
+
unit_tests:
name: Integration Tests
runs-on: ubuntu-18.04
diff --git a/SpacemanDMM.toml b/SpacemanDMM.toml
index 771e48d2ef..ebc374f630 100644
--- a/SpacemanDMM.toml
+++ b/SpacemanDMM.toml
@@ -1,8 +1,6 @@
-[diagnostics]
-macro_redefined = "off"
-macro_undefined_no_definition = "off"
-as_local_var = "off"
-tmp_no_effect = "off"
-
[langserver]
dreamchecker = true
+
+[code_standards]
+disallow_relative_type_definitions = true
+disallow_relative_proc_definitions = true
\ No newline at end of file
diff --git a/_build_dependencies.sh b/_build_dependencies.sh
index b8d7476abd..b278c1115a 100644
--- a/_build_dependencies.sh
+++ b/_build_dependencies.sh
@@ -1,6 +1,6 @@
# This file has all the information on what versions of libraries are thrown into the code
# For dreamchecker
-export SPACEMANDMM_TAG=suite-1.4
+export SPACEMAN_DMM_VERSION=suite-1.7
# For NanoUI + TGUI
export NODE_VERSION=12
# Byond Major
diff --git a/code/ATMOSPHERICS/components/binary_devices/circulator.dm b/code/ATMOSPHERICS/components/binary_devices/circulator.dm
index 72e623351a..c09c482cc1 100644
--- a/code/ATMOSPHERICS/components/binary_devices/circulator.dm
+++ b/code/ATMOSPHERICS/components/binary_devices/circulator.dm
@@ -1,8 +1,5 @@
//node1, air1, network1 correspond to input
//node2, air2, network2 correspond to output
-
-#define ADIABATIC_EXPONENT 0.667 //Actually adiabatic exponent - 1.
-
/obj/machinery/atmospherics/binary/circulator
name = "circulator"
desc = "A gas circulator turbine and heat exchanger."
diff --git a/code/ATMOSPHERICS/components/binary_devices/pipeturbine.dm b/code/ATMOSPHERICS/components/binary_devices/pipeturbine.dm
index c111b36b0a..2a83dd5933 100644
--- a/code/ATMOSPHERICS/components/binary_devices/pipeturbine.dm
+++ b/code/ATMOSPHERICS/components/binary_devices/pipeturbine.dm
@@ -1,5 +1,3 @@
-#define ADIABATIC_EXPONENT 0.667 //Actually adiabatic exponent - 1.
-
/obj/machinery/atmospherics/pipeturbine
name = "turbine"
desc = "A gas turbine. Converting pressure into energy since 1884."
diff --git a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm
index ef2a4c1a8a..7344a3e732 100644
--- a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm
+++ b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm
@@ -163,7 +163,7 @@
//
// "T" Orientation - Inputs are on oposite sides instead of adjacent
//
-obj/machinery/atmospherics/trinary/mixer/t_mixer
+/obj/machinery/atmospherics/trinary/mixer/t_mixer
icon_state = "tmap"
construction_type = /obj/item/pipe/trinary // Can't flip a "T", its symmetrical
pipe_state = "t_mixer"
diff --git a/code/ATMOSPHERICS/components/unary/generator_input.dm b/code/ATMOSPHERICS/components/unary/generator_input.dm
deleted file mode 100644
index 2b31097dc4..0000000000
--- a/code/ATMOSPHERICS/components/unary/generator_input.dm
+++ /dev/null
@@ -1,21 +0,0 @@
-/obj/machinery/atmospherics/unary/generator_input
- icon = 'icons/obj/atmospherics/heat_exchanger.dmi'
- icon_state = "intact"
- density = 1
-
- name = "Generator Input"
- desc = "Placeholder"
-
- var/update_cycle
-
- update_icon()
- if(node)
- icon_state = "intact"
- else
- icon_state = "exposed"
-
- return
-
- proc
- return_exchange_air()
- return air_contents
\ No newline at end of file
diff --git a/code/ATMOSPHERICS/components/unary/heat_exchanger.dm b/code/ATMOSPHERICS/components/unary/heat_exchanger.dm
index 2295f70378..bba26185e7 100644
--- a/code/ATMOSPHERICS/components/unary/heat_exchanger.dm
+++ b/code/ATMOSPHERICS/components/unary/heat_exchanger.dm
@@ -11,77 +11,77 @@
var/obj/machinery/atmospherics/unary/heat_exchanger/partner = null
var/update_cycle
- update_icon()
- if(node)
- icon_state = "intact"
- else
- icon_state = "exposed"
+/obj/machinery/atmospherics/unary/heat_exchanger/update_icon()
+ if(node)
+ icon_state = "intact"
+ else
+ icon_state = "exposed"
- return
+ return
- atmos_init()
- if(!partner)
- var/partner_connect = turn(dir,180)
+/obj/machinery/atmospherics/unary/heat_exchanger/atmos_init()
+ if(!partner)
+ var/partner_connect = turn(dir,180)
- for(var/obj/machinery/atmospherics/unary/heat_exchanger/target in get_step(src,partner_connect))
- if(target.dir & get_dir(src,target))
- partner = target
- partner.partner = src
- break
+ for(var/obj/machinery/atmospherics/unary/heat_exchanger/target in get_step(src,partner_connect))
+ if(target.dir & get_dir(src,target))
+ partner = target
+ partner.partner = src
+ break
- ..()
+ ..()
- process()
- ..()
- if(!partner)
- return 0
+/obj/machinery/atmospherics/unary/heat_exchanger/process()
+ ..()
+ if(!partner)
+ return 0
- if(!air_master || air_master.current_cycle <= update_cycle)
- return 0
+ if(!air_master || air_master.current_cycle <= update_cycle)
+ return 0
- update_cycle = air_master.current_cycle
- partner.update_cycle = air_master.current_cycle
+ update_cycle = air_master.current_cycle
+ partner.update_cycle = air_master.current_cycle
- var/air_heat_capacity = air_contents.heat_capacity()
- var/other_air_heat_capacity = partner.air_contents.heat_capacity()
- var/combined_heat_capacity = other_air_heat_capacity + air_heat_capacity
+ var/air_heat_capacity = air_contents.heat_capacity()
+ var/other_air_heat_capacity = partner.air_contents.heat_capacity()
+ var/combined_heat_capacity = other_air_heat_capacity + air_heat_capacity
- var/old_temperature = air_contents.temperature
- var/other_old_temperature = partner.air_contents.temperature
+ var/old_temperature = air_contents.temperature
+ var/other_old_temperature = partner.air_contents.temperature
- if(combined_heat_capacity > 0)
- var/combined_energy = partner.air_contents.temperature*other_air_heat_capacity + air_heat_capacity*air_contents.temperature
+ if(combined_heat_capacity > 0)
+ var/combined_energy = partner.air_contents.temperature*other_air_heat_capacity + air_heat_capacity*air_contents.temperature
- var/new_temperature = combined_energy/combined_heat_capacity
- air_contents.temperature = new_temperature
- partner.air_contents.temperature = new_temperature
+ var/new_temperature = combined_energy/combined_heat_capacity
+ air_contents.temperature = new_temperature
+ partner.air_contents.temperature = new_temperature
- if(network)
- if(abs(old_temperature-air_contents.temperature) > 1)
- network.update = 1
+ if(network)
+ if(abs(old_temperature-air_contents.temperature) > 1)
+ network.update = 1
- if(partner.network)
- if(abs(other_old_temperature-partner.air_contents.temperature) > 1)
- partner.network.update = 1
+ if(partner.network)
+ if(abs(other_old_temperature-partner.air_contents.temperature) > 1)
+ partner.network.update = 1
+ return 1
+
+/obj/machinery/atmospherics/unary/heat_exchanger/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
+ if (!W.is_wrench())
+ return ..()
+ var/turf/T = src.loc
+ if (level==1 && isturf(T) && !T.is_plating())
+ to_chat(user, "You must remove the plating first.")
return 1
-
- attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
- if (!W.is_wrench())
- return ..()
- var/turf/T = src.loc
- if (level==1 && isturf(T) && !T.is_plating())
- to_chat(user, "You must remove the plating first.")
- return 1
- if (!can_unwrench())
- to_chat(user, "You cannot unwrench \the [src], it is too exerted due to internal pressure.")
- add_fingerprint(user)
- return 1
- playsound(src, W.usesound, 50, 1)
- to_chat(user, "You begin to unfasten \the [src]...")
- if (do_after(user, 40 * W.toolspeed))
- user.visible_message( \
- "\The [user] unfastens \the [src].", \
- "You have unfastened \the [src].", \
- "You hear a ratchet.")
- deconstruct()
+ if (!can_unwrench())
+ to_chat(user, "You cannot unwrench \the [src], it is too exerted due to internal pressure.")
+ add_fingerprint(user)
+ return 1
+ playsound(src, W.usesound, 50, 1)
+ to_chat(user, "You begin to unfasten \the [src]...")
+ if (do_after(user, 40 * W.toolspeed))
+ user.visible_message( \
+ "\The [user] unfastens \the [src].", \
+ "You have unfastened \the [src].", \
+ "You hear a ratchet.")
+ deconstruct()
diff --git a/code/ATMOSPHERICS/components/unary/oxygen_generator.dm b/code/ATMOSPHERICS/components/unary/oxygen_generator.dm
deleted file mode 100644
index 14bbb46bba..0000000000
--- a/code/ATMOSPHERICS/components/unary/oxygen_generator.dm
+++ /dev/null
@@ -1,49 +0,0 @@
-obj/machinery/atmospherics/unary/oxygen_generator
- icon = 'icons/obj/atmospherics/oxygen_generator.dmi'
- icon_state = "intact_off"
- density = 1
-
- name = "Oxygen Generator"
- desc = ""
-
- dir = SOUTH
- initialize_directions = SOUTH
-
- var/on = 0
-
- var/oxygen_content = 10
-
- update_icon()
- if(node)
- icon_state = "intact_[on?("on"):("off")]"
- else
- icon_state = "exposed_off"
-
- on = 0
-
- return
-
- New()
- ..()
-
- air_contents.volume = 50
-
- process()
- ..()
- if(!on)
- return 0
-
- var/total_moles = air_contents.total_moles
-
- if(total_moles < oxygen_content)
- var/current_heat_capacity = air_contents.heat_capacity()
-
- var/added_oxygen = oxygen_content - total_moles
-
- air_contents.temperature = (current_heat_capacity*air_contents.temperature + 20*added_oxygen*T0C)/(current_heat_capacity+20*added_oxygen)
- air_contents.adjust_gas("oxygen", added_oxygen)
-
- if(network)
- network.update = 1
-
- return 1
\ No newline at end of file
diff --git a/code/ZAS/Airflow.dm b/code/ZAS/Airflow.dm
index 4d92a42c35..fcc81509c8 100644
--- a/code/ZAS/Airflow.dm
+++ b/code/ZAS/Airflow.dm
@@ -2,8 +2,8 @@
Contains helper procs for airflow, handled in /connection_group.
*/
-mob/var/tmp/last_airflow_stun = 0
-mob/proc/airflow_stun()
+/mob/var/tmp/last_airflow_stun = 0
+/mob/proc/airflow_stun()
if(stat == 2)
return 0
if(last_airflow_stun > world.time - vsc.airflow_stun_cooldown) return 0
@@ -19,16 +19,16 @@ mob/proc/airflow_stun()
Weaken(5)
last_airflow_stun = world.time
-mob/living/silicon/airflow_stun()
+/mob/living/silicon/airflow_stun()
return
-mob/living/carbon/human/airflow_stun()
+/mob/living/carbon/human/airflow_stun()
if(shoes && (shoes.item_flags & NOSLIP))
to_chat(src, "Air suddenly rushes past you!")
return 0
..()
-atom/movable/proc/check_airflow_movable(n)
+/atom/movable/proc/check_airflow_movable(n)
if(!simulated) return 0
if(anchored && !ismob(src)) return 0
@@ -37,19 +37,19 @@ atom/movable/proc/check_airflow_movable(n)
return 1
-mob/check_airflow_movable(n)
+/mob/check_airflow_movable(n)
if(n < vsc.airflow_heavy_pressure)
return 0
return 1
-mob/observer/check_airflow_movable()
+/mob/observer/check_airflow_movable()
return 0
-mob/living/silicon/check_airflow_movable()
+/mob/living/silicon/check_airflow_movable()
return 0
-obj/check_airflow_movable(n)
+/obj/check_airflow_movable(n)
if (!(. = ..()))
return 0
if(isnull(w_class))
@@ -90,11 +90,11 @@ obj/check_airflow_movable(n)
airflow_time = 0
. = ..()
-atom/movable/proc/airflow_hit(atom/A)
+/atom/movable/proc/airflow_hit(atom/A)
airflow_speed = 0
airflow_dest = null
-mob/airflow_hit(atom/A)
+/mob/airflow_hit(atom/A)
for(var/mob/M in hearers(src))
M.show_message("\The [src] slams into \a [A]!",1,"You hear a loud slam!",2)
playsound(src, "smash.ogg", 25, 1, -1)
@@ -102,17 +102,17 @@ mob/airflow_hit(atom/A)
Weaken(weak_amt)
. = ..()
-obj/airflow_hit(atom/A)
+/obj/airflow_hit(atom/A)
for(var/mob/M in hearers(src))
M.show_message("\The [src] slams into \a [A]!",1,"You hear a loud slam!",2)
playsound(src, "smash.ogg", 25, 1, -1)
. = ..()
-obj/item/airflow_hit(atom/A)
+/obj/item/airflow_hit(atom/A)
airflow_speed = 0
airflow_dest = null
-mob/living/carbon/human/airflow_hit(atom/A)
+/mob/living/carbon/human/airflow_hit(atom/A)
// for(var/mob/M in hearers(src))
// M.show_message("[src] slams into [A]!",1,"You hear a loud slam!",2)
playsound(src, "punch", 25, 1, -1)
@@ -140,7 +140,7 @@ mob/living/carbon/human/airflow_hit(atom/A)
Stun(round(airflow_speed * vsc.airflow_stun/2))
. = ..()
-zone/proc/movables()
+/zone/proc/movables()
. = list()
for(var/turf/T in contents)
for(var/atom/movable/A in T)
diff --git a/code/ZAS/Atom.dm b/code/ZAS/Atom.dm
index b395c4551e..1953c58e9f 100644
--- a/code/ZAS/Atom.dm
+++ b/code/ZAS/Atom.dm
@@ -64,13 +64,13 @@
// AIR_BLOCKED - Blocked
// ZONE_BLOCKED - Not blocked, but zone boundaries will not cross.
// BLOCKED - Blocked, zone boundaries will not cross even if opened.
-atom/proc/c_airblock(turf/other)
+/atom/proc/c_airblock(turf/other)
#ifdef ZASDBG
ASSERT(isturf(other))
#endif
return (AIR_BLOCKED*!CanZASPass(other, FALSE))|(ZONE_BLOCKED*!CanZASPass(other, TRUE))
-turf/c_airblock(turf/other)
+/turf/c_airblock(turf/other)
#ifdef ZASDBG
ASSERT(isturf(other))
#endif
diff --git a/code/ZAS/ConnectionGroup.dm b/code/ZAS/ConnectionGroup.dm
index 2811ff6c77..0be44bb358 100644
--- a/code/ZAS/ConnectionGroup.dm
+++ b/code/ZAS/ConnectionGroup.dm
@@ -244,7 +244,7 @@ Class Procs:
if(!A.air.compare(air, vacuum_exception = 1))
air_master.mark_edge_active(src)
-proc/ShareHeat(datum/gas_mixture/A, datum/gas_mixture/B, connecting_tiles)
+/proc/ShareHeat(datum/gas_mixture/A, datum/gas_mixture/B, connecting_tiles)
//This implements a simplistic version of the Stefan-Boltzmann law.
var/energy_delta = ((A.temperature - B.temperature) ** 4) * STEFAN_BOLTZMANN_CONSTANT * connecting_tiles * 2.5
var/maximum_energy_delta = max(0, min(A.temperature * A.heat_capacity() * A.group_multiplier, B.temperature * B.heat_capacity() * B.group_multiplier))
diff --git a/code/ZAS/Debug.dm b/code/ZAS/Debug.dm
index 5aa2c73df2..224904a567 100644
--- a/code/ZAS/Debug.dm
+++ b/code/ZAS/Debug.dm
@@ -16,5 +16,5 @@ var/image/mark = image('icons/Testing/Zone.dmi', icon_state = "mark")
add_overlay(img)
dbg_img = img
-proc/soft_assert(thing,fail)
+/proc/soft_assert(thing,fail)
if(!thing) message_admins(fail)
\ No newline at end of file
diff --git a/code/ZAS/Diagnostic.dm b/code/ZAS/Diagnostic.dm
index 83537b8575..7166b42dc6 100644
--- a/code/ZAS/Diagnostic.dm
+++ b/code/ZAS/Diagnostic.dm
@@ -1,4 +1,4 @@
-client/proc/ZoneTick()
+/client/proc/ZoneTick()
set category = "Debug"
set name = "Process Atmos"
set desc = "Manually run a single tick of the air subsystem"
@@ -16,7 +16,7 @@ client/proc/ZoneTick()
to_chat(src, "Failed to process! ([air_master.tick_progress])")
*/
-client/proc/Zone_Info(turf/T as null|turf)
+/client/proc/Zone_Info(turf/T as null|turf)
set category = "Debug"
if(T)
if(istype(T,/turf/simulated) && T:zone)
@@ -33,9 +33,9 @@ client/proc/Zone_Info(turf/T as null|turf)
images -= zone_debug_images[zone]
zone_debug_images = null
-client/var/list/zone_debug_images
+/client/var/list/zone_debug_images
-client/proc/Test_ZAS_Connection(var/turf/simulated/T as turf)
+/client/proc/Test_ZAS_Connection(var/turf/simulated/T as turf)
set category = "Debug"
if(!istype(T))
return
@@ -94,7 +94,7 @@ client/proc/Test_ZAS_Connection(var/turf/simulated/T as turf)
else
to_chat(mob, "both turfs can merge.")
-client/proc/ZASSettings()
+/client/proc/ZASSettings()
set category = "Debug"
vsc.SetDefault(mob)
diff --git a/code/ZAS/Fire.dm b/code/ZAS/Fire.dm
index bb4ec95a84..9c8ec74d4d 100644
--- a/code/ZAS/Fire.dm
+++ b/code/ZAS/Fire.dm
@@ -11,11 +11,11 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
/turf/var/obj/fire/fire = null
//Some legacy definitions so fires can be started.
-atom/proc/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
+/atom/proc/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
return null
-turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
+/turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
/turf/simulated/hotspot_expose(exposed_temperature, exposed_volume, soh)
@@ -320,7 +320,7 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
return firelevel
-datum/gas_mixture/proc/check_recombustability(list/fuel_objs)
+/datum/gas_mixture/proc/check_recombustability(list/fuel_objs)
. = 0
for(var/g in gas)
if(gas_data.flags[g] & XGM_GAS_OXIDIZER && gas[g] >= 0.1)
diff --git a/code/ZAS/Phoron.dm b/code/ZAS/Phoron.dm
index 4017d0a74a..a8c797ec2a 100644
--- a/code/ZAS/Phoron.dm
+++ b/code/ZAS/Phoron.dm
@@ -38,7 +38,7 @@ var/image/contamination_overlay = image('icons/effects/contamination.dmi')
var/N2O_HALLUCINATION_DESC = "Does being in sleeping gas cause you to hallucinate?"
-obj/var/contaminated = 0
+/obj/var/contaminated = 0
/obj/item/proc/can_contaminate()
@@ -183,7 +183,7 @@ obj/var/contaminated = 0
gloves.contaminate()
-turf/Entered(obj/item/I)
+/turf/Entered(obj/item/I)
. = ..()
//Items that are in phoron, but not on a mob, can still be contaminated.
if(istype(I) && vsc.plc.CLOTH_CONTAMINATION && I.can_contaminate())
diff --git a/code/__defines/atmos.dm b/code/__defines/atmos.dm
index 424f2a2639..04905878a0 100644
--- a/code/__defines/atmos.dm
+++ b/code/__defines/atmos.dm
@@ -94,3 +94,7 @@
#define ATMOSTANK_CO2 25000 // CO2 and PH are not critically important for station, only for toxins and alternative coolants, no need to store a lot of those.
#define ATMOSTANK_PHORON 25000
#define ATMOSTANK_NITROUSOXIDE 10000 // N2O doesn't have a real useful use, i guess it's on station just to allow refilling of sec's riot control canisters?
+
+// Used in various things like tanks and oxygen pumps.
+#define TANK_MAX_RELEASE_PRESSURE (3*ONE_ATMOSPHERE)
+#define TANK_DEFAULT_RELEASE_PRESSURE ONE_ATMOSPHERE
\ No newline at end of file
diff --git a/code/__defines/color.dm b/code/__defines/color.dm
index af112ef4d6..73db8eef6e 100644
--- a/code/__defines/color.dm
+++ b/code/__defines/color.dm
@@ -7,7 +7,7 @@
#define COLOR_MAROON "#800000"
#define COLOR_PURPLE "#800080"
#define COLOR_VIOLET "#9933ff"
-#define COLOR_OLIVE "#808000"
+#define COLOR_OLIVE "#52613b" // VOREStation Edit
#define COLOR_BROWN_ORANGE "#824b28"
#define COLOR_DARK_ORANGE "#b95a00"
#define COLOR_GRAY40 "#666666"
@@ -91,7 +91,6 @@
#define COLOR_DARK_TEAL "#2db5b5"
#define COLOR_LIGHT_VIOLET "#e7bfff"
#define COLOR_SAN_MARINO_BLUE "#4b75ab"
-#define COLOR_OLIVE "#52613b" //VOREStation Addition
#define COLOR_HALF_TRANSPARENT_BLACK "#0000007A"
#define PIPE_COLOR_GREY "#808080"
@@ -165,9 +164,6 @@
#define COLOR_ASSEMBLY_PURPLE "#6F6192"
#define COLOR_ASSEMBLY_HOT_PINK "#FF69B4"
-#define COLOR_ASTEROID_ROCK "#735555"
-#define COLOR_GOLD "#ffcc33"
-
// Discord requires colors to be in decimal instead of hexadecimal.
#define COLOR_WEBHOOK_DEFAULT 0x8bbbd5 // "#8bbbd5"
#define COLOR_WEBHOOK_GOOD 0x2ECC71 // "#2ECC71"
diff --git a/code/__defines/construction.dm b/code/__defines/construction.dm
index 0ab4103e4d..c6d29a77ef 100644
--- a/code/__defines/construction.dm
+++ b/code/__defines/construction.dm
@@ -50,7 +50,6 @@
#define PIPING_LAYER_DEFAULT PIPING_LAYER_REGULAR
// We offset the layer values of the different pipe types to ensure they look nice
-#define PIPES_SCRUBBER_LAYER (PIPES_LAYER - 0.05)
#define PIPES_AUX_LAYER (PIPES_LAYER - 0.04)
#define PIPES_FUEL_LAYER (PIPES_LAYER - 0.03)
#define PIPES_SCRUBBER_LAYER (PIPES_LAYER - 0.02)
diff --git a/code/__defines/dcs/helpers.dm b/code/__defines/dcs/helpers.dm
index c5c7e3c42d..a7925329fd 100644
--- a/code/__defines/dcs/helpers.dm
+++ b/code/__defines/dcs/helpers.dm
@@ -8,7 +8,8 @@
/// Signifies that this proc is used to handle signals.
/// Every proc you pass to RegisterSignal must have this.
-#define SIGNAL_HANDLER SHOULD_NOT_SLEEP(TRUE)
+//#define SIGNAL_HANDLER SHOULD_NOT_SLEEP(TRUE)
+#define SIGNAL_HANDLER // Sigh
/// A wrapper for _AddElement that allows us to pretend we're using normal named arguments
#define AddElement(arguments...) _AddElement(list(##arguments))
diff --git a/code/__defines/dcs/signals.dm b/code/__defines/dcs/signals.dm
index 7079362659..9ca46ce7e8 100644
--- a/code/__defines/dcs/signals.dm
+++ b/code/__defines/dcs/signals.dm
@@ -121,8 +121,6 @@
///from obj/machinery/bsa/full/proc/fire(): ()
#define COMSIG_ATOM_BSA_BEAM "atom_bsa_beam_pass"
#define COMSIG_ATOM_BLOCKS_BSA_BEAM (1<<0)
-///from base of atom/set_light(): (l_range, l_power, l_color)
-#define COMSIG_ATOM_SET_LIGHT "atom_set_light"
///from base of atom/setDir(): (old_dir, new_dir)
#define COMSIG_ATOM_DIR_CHANGE "atom_dir_change"
///from base of atom/handle_atom_del(): (atom/deleted)
diff --git a/code/__defines/gamemode.dm b/code/__defines/gamemode.dm
index a0eede2f42..3054e94702 100644
--- a/code/__defines/gamemode.dm
+++ b/code/__defines/gamemode.dm
@@ -101,7 +101,6 @@ var/list/be_special_flags = list(
#define MODE_MONKEY "monkey"
#define MODE_RENEGADE "renegade"
#define MODE_REVOLUTIONARY "revolutionary"
-#define MODE_LOYALIST "loyalist"
#define MODE_MALFUNCTION "malf"
#define MODE_TRAITOR "traitor"
#define MODE_AUTOTRAITOR "autotraitor"
@@ -149,4 +148,28 @@ var/list/be_special_flags = list(
#define Sp_CHARGES "charges"
#define Sp_HOLDVAR "holdervar"
-#define CHANGELING_STASIS_COST 20
\ No newline at end of file
+#define CHANGELING_STASIS_COST 20
+
+//Spell stuff, for Technomancer and Cult.
+//cast_method flags
+#define CAST_USE 1 // Clicking the spell in your hand.
+#define CAST_MELEE 2 // Clicking an atom in melee range.
+#define CAST_RANGED 4 // Clicking an atom beyond melee range.
+#define CAST_THROW 8 // Throwing the spell and hitting an atom.
+#define CAST_COMBINE 16 // Clicking another spell with this spell.
+#define CAST_INNATE 32 // Activates upon verb usage, used for mobs without hands.
+
+//Aspects
+#define ASPECT_FIRE "fire" //Damage over time and raising body-temp. Firesuits protect from this.
+#define ASPECT_FROST "frost" //Slows down the affected, also involves imbedding with icicles. Winter coats protect from this.
+#define ASPECT_SHOCK "shock" //Energy-expensive, usually stuns. Insulated armor protects from this.
+#define ASPECT_AIR "air" //Mostly involves manipulation of atmos, useless in a vacuum. Magboots protect from this.
+#define ASPECT_FORCE "force" //Manipulates gravity to push things away or towards a location.
+#define ASPECT_TELE "tele" //Teleportation of self, other objects, or other people.
+#define ASPECT_DARK "dark" //Makes all those photons vanish using magic-- WITH SCIENCE. Used for sneaky stuff.
+#define ASPECT_LIGHT "light" //The opposite of dark, usually blinds, makes holo-illusions, or makes laser lightshows.
+#define ASPECT_BIOMED "biomed" //Mainly concerned with healing and restoration.
+#define ASPECT_EMP "emp" //Unused now.
+#define ASPECT_UNSTABLE "unstable" //Heavily RNG-based, causes instability to the victim.
+#define ASPECT_CHROMATIC "chromatic" //Used to combine with other spells.
+#define ASPECT_UNHOLY "unholy" //Involves the dead, blood, and most things against divine beings.
\ No newline at end of file
diff --git a/code/__defines/holomap.dm b/code/__defines/holomap.dm
index b7dc0305ad..53584a5648 100644
--- a/code/__defines/holomap.dm
+++ b/code/__defines/holomap.dm
@@ -2,8 +2,6 @@
// Constants and standard colors for the holomap
//
-#define WORLD_ICON_SIZE 32 // Size of a standard tile in pixels (world.icon_size)
-#define PIXEL_MULTIPLIER WORLD_ICON_SIZE/32 // Convert from normal icon size of 32 to whatever insane thing this server is using.
#define HOLOMAP_ICON 'icons/480x480.dmi' // Icon file to start with when drawing holomaps (to get a 480x480 canvas).
#define HOLOMAP_ICON_SIZE 480 // Pixel width & height of the holomap icon. Used for auto-centering etc.
#define ui_holomap "CENTER-7, CENTER-7" // Screen location of the holomap "hud"
@@ -21,6 +19,7 @@
#define HOLOMAP_EXTRA_STATIONMAP "stationmapformatted"
#define HOLOMAP_EXTRA_STATIONMAP_STRATEGIC "stationmapstrategic"
#define HOLOMAP_EXTRA_STATIONMAPAREAS "stationareas"
+#define HOLOMAP_EXTRA_STATIONMAPSMALL "stationmapsmall"
#define HOLOMAP_EXTRA_STATIONMAPSMALL_NORTH "stationmapsmallnorth"
#define HOLOMAP_EXTRA_STATIONMAPSMALL_SOUTH "stationmapsmallsouth"
#define HOLOMAP_EXTRA_STATIONMAPSMALL_EAST "stationmapsmalleast"
@@ -85,7 +84,3 @@
// #define HOLOMAP_MARKER_DISK "diskspawn"
// #define HOLOMAP_MARKER_SKIPJACK "skipjack"
// #define HOLOMAP_MARKER_SYNDISHUTTLE "syndishuttle"
-
-#define HOLOMAP_EXTRA_STATIONMAP "stationmapformatted"
-#define HOLOMAP_EXTRA_STATIONMAPAREAS "stationareas"
-#define HOLOMAP_EXTRA_STATIONMAPSMALL "stationmapsmall"
\ No newline at end of file
diff --git a/code/__defines/is_helpers.dm b/code/__defines/is_helpers.dm
index aed07bb0ec..0c26095401 100644
--- a/code/__defines/is_helpers.dm
+++ b/code/__defines/is_helpers.dm
@@ -58,3 +58,5 @@
//#define isturf(D) istype(D, /turf) //Built in
#define isopenspace(A) istype(A, /turf/simulated/open)
#define isspace(A) istype(A, /turf/space)
+
+#define istaurtail(A) istype(A, /datum/sprite_accessory/tail/taur)
diff --git a/code/__defines/items_clothing.dm b/code/__defines/items_clothing.dm
index 27250bc9a2..a7dba8be88 100644
--- a/code/__defines/items_clothing.dm
+++ b/code/__defines/items_clothing.dm
@@ -101,11 +101,9 @@
#define slot_r_ear_str "slot_r_ear"
#define slot_belt_str "slot_belt"
#define slot_shoes_str "slot_shoes"
-#define slot_head_str "slot_head"
#define slot_wear_mask_str "slot_wear_mask"
#define slot_handcuffed_str "slot_handcuffed"
#define slot_legcuffed_str "slot_legcuffed"
-#define slot_wear_mask_str "slot_wear_mask"
#define slot_wear_id_str "slot_wear_id"
#define slot_gloves_str "slot_gloves"
#define slot_glasses_str "slot_glasses"
diff --git a/code/__defines/lighting_vr.dm b/code/__defines/lighting_vr.dm
index a7f51e8bbc..aa7cb6994d 100644
--- a/code/__defines/lighting_vr.dm
+++ b/code/__defines/lighting_vr.dm
@@ -1,4 +1,8 @@
+#undef LIGHT_COLOR_INCANDESCENT_TUBE
#define LIGHT_COLOR_INCANDESCENT_TUBE "#E0EFF0"
+#undef LIGHT_COLOR_INCANDESCENT_BULB
#define LIGHT_COLOR_INCANDESCENT_BULB "#FFFEB8"
+
//Fake ambient occlusion filter
+#undef AMBIENT_OCCLUSION
#define AMBIENT_OCCLUSION filter(type="drop_shadow", x=0, y=-1, size=2, offset=2, color="#04080F55") //VOREStation Edit for prettier visuals.
\ No newline at end of file
diff --git a/code/__defines/machinery.dm b/code/__defines/machinery.dm
index 24f7b26dda..ece4cd7498 100644
--- a/code/__defines/machinery.dm
+++ b/code/__defines/machinery.dm
@@ -171,4 +171,4 @@ if (!(DATUM.datum_flags & DF_ISPROCESSING)) {\
// Computer login types
#define LOGIN_TYPE_NORMAL 1
#define LOGIN_TYPE_AI 2
-#define LOGIN_TYPE_ROBOT 3
\ No newline at end of file
+#define LOGIN_TYPE_ROBOT 3
diff --git a/code/__defines/materials.dm b/code/__defines/materials.dm
index 3dea12295e..ec665c37dd 100644
--- a/code/__defines/materials.dm
+++ b/code/__defines/materials.dm
@@ -57,9 +57,6 @@
#define MATERIAL_BRITTLE 0x2
#define MATERIAL_PADDING 0x4
-#define DEFAULT_TABLE_MATERIAL "plastic"
-#define DEFAULT_WALL_MATERIAL "steel"
-
#define TABLE_BRITTLE_MATERIAL_MULTIPLIER 4 // Amount table damage is multiplied by if it is made of a brittle material (e.g. glass)
//Material Container Flags.
diff --git a/code/__defines/math_physics.dm b/code/__defines/math_physics.dm
index 90950d0ca0..b00aef11ba 100644
--- a/code/__defines/math_physics.dm
+++ b/code/__defines/math_physics.dm
@@ -2,6 +2,7 @@
#define R_IDEAL_GAS_EQUATION 8.31 // kPa*L/(K*mol).
#define ONE_ATMOSPHERE 101.325 // kPa.
#define IDEAL_GAS_ENTROPY_CONSTANT 1164 // (mol^3 * s^3) / (kg^3 * L).
+#define ADIABATIC_EXPONENT 0.667 //Actually adiabatic exponent - 1.
#define T0C 273.15 // 0.0 degrees celcius
#define T20C 293.15 // 20.0 degrees celcius
diff --git a/code/__defines/misc.dm b/code/__defines/misc.dm
index 9f34e4aa55..25fb343136 100644
--- a/code/__defines/misc.dm
+++ b/code/__defines/misc.dm
@@ -197,8 +197,6 @@
#define MIDNIGHT_ROLLOVER 864000 //number of deciseconds in a day
-#define WORLD_ICON_SIZE 32 //Needed for the R-UST port
-#define PIXEL_MULTIPLIER WORLD_ICON_SIZE/32 //Needed for the R-UST port
#define MAX_CLIENT_VIEW 34 // Maximum effective value of client.view (According to DM references)
// Maploader bounds indices
@@ -464,4 +462,6 @@ GLOBAL_LIST_INIT(all_volume_channels, list(
#ifndef HTTP_POST_DLL_LOCATION
#define HTTP_POST_DLL_LOCATION (world.system_type == MS_WINDOWS ? WINDOWS_HTTP_POST_DLL_LOCATION : UNIX_HTTP_POST_DLL_LOCATION)
-#endif
\ No newline at end of file
+#endif
+
+#define DOCK_ATTEMPT_TIMEOUT 200 //how long in ticks we wait before assuming the docking controller is broken or blown up.
\ No newline at end of file
diff --git a/code/__defines/species_languages.dm b/code/__defines/species_languages.dm
index bdfbebb1bc..268b5d3253 100644
--- a/code/__defines/species_languages.dm
+++ b/code/__defines/species_languages.dm
@@ -25,19 +25,18 @@
#define EMP_OXY_DMG 0x100 // EMPs inflict oxy damage
// Species allergens
-#define MEAT 0x1 // Skrell won't like this.
-#define FISH 0x2 // Seperate for completion's sake. Still bad for skrell.
-#define FRUIT 0x4 // An apple a day only keeps the doctor away if they're allergic.
-#define VEGETABLE 0x8 // Taters 'n' carrots. Potato allergy is a thing, apparently.
-#define GRAINS 0x10 // Wheat, oats, etc.
-#define BEANS 0x20 // The musical fruit! Includes soy.
-#define SEEDS 0x40 // Hope you don't have a nut allergy.
-#define DAIRY 0x80 // Lactose intolerance, ho! Also bad for skrell.
-#define FUNGI 0x100 // Delicious shrooms.
-#define COFFEE 0x200 // Mostly here for tajara.
-#define GENERIC 0x400 // Catchall for stuff that doesn't fall into the groups above. You shouldn't be allergic to this type, ever.
-#define SUGARS 0x800 // For unathi-like reactions
-#define EGGS 0x1000 // For Skrell eggs allergy
+#define ALLERGEN_MEAT 0x1 // Skrell won't like this.
+#define ALLERGEN_FISH 0x2 // Seperate for completion's sake. Still bad for skrell.
+#define ALLERGEN_FRUIT 0x4 // An apple a day only keeps the doctor away if they're allergic.
+#define ALLERGEN_VEGETABLE 0x8 // Taters 'n' carrots. Potato allergy is a thing, apparently.
+#define ALLERGEN_GRAINS 0x10 // Wheat, oats, etc.
+#define ALLERGEN_BEANS 0x20 // The musical fruit! Includes soy.
+#define ALLERGEN_SEEDS 0x40 // Hope you don't have a nut allergy.
+#define ALLERGEN_DAIRY 0x80 // Lactose intolerance, ho! Also bad for skrell.
+#define ALLERGEN_FUNGI 0x100 // Delicious shrooms.
+#define ALLERGEN_COFFEE 0x200 // Mostly here for tajara.
+#define ALLERGEN_SUGARS 0x400 // For unathi-like reactions
+#define ALLERGEN_EGGS 0x800 // For Skrell eggs allergy
// Allergen reactions
#define AG_TOX_DMG 0x1 // the classic
diff --git a/code/__defines/subsystems_vr.dm b/code/__defines/subsystems_vr.dm
deleted file mode 100644
index 5c028803b9..0000000000
--- a/code/__defines/subsystems_vr.dm
+++ /dev/null
@@ -1 +0,0 @@
-#define INIT_ORDER_HOLOMAPS -5 //VOREStation Add
\ No newline at end of file
diff --git a/code/__defines/turfs.dm b/code/__defines/turfs.dm
index 770d58573f..cbcc45c1f5 100644
--- a/code/__defines/turfs.dm
+++ b/code/__defines/turfs.dm
@@ -20,3 +20,4 @@
#define isDiagonal(x) (x == NORTHEAST || x == SOUTHEAST || x == NORTHWEST || x == SOUTHWEST)
#define IS_OPAQUE_TURF(turf) (turf.directional_opacity == ALL_CARDINALS)
+#define FOOTSTEP_SPRITE_AMT 2
diff --git a/code/_helpers/_lists.dm b/code/_helpers/_lists.dm
index a87307ac80..0d1a46b2ea 100644
--- a/code/_helpers/_lists.dm
+++ b/code/_helpers/_lists.dm
@@ -79,7 +79,7 @@
return counting_english_list(input, output_icons, determiners, nothing_text, and_text, comma_text, final_comma_text)
//Returns list element or null. Should prevent "index out of bounds" error.
-proc/listgetindex(var/list/list,index)
+/proc/listgetindex(var/list/list,index)
if(istype(list) && list.len)
if(isnum(index))
if(InRange(index,1,list.len))
@@ -89,13 +89,13 @@ proc/listgetindex(var/list/list,index)
return
//Return either pick(list) or null if list is not of type /list or is empty
-proc/safepick(list/list)
+/proc/safepick(list/list)
if(!islist(list) || !list.len)
return
return pick(list)
//Checks if the list is empty
-proc/isemptylist(list/list)
+/proc/isemptylist(list/list)
if(!list.len)
return 1
return 0
@@ -177,13 +177,13 @@ proc/isemptylist(list/list)
//////////////////////////////////////////////////////
//Empties the list by setting the length to 0. Hopefully the elements get garbage collected
-proc/clearlist(list/list)
+/proc/clearlist(list/list)
if(istype(list))
list.len = 0
return
//Removes any null entries from the list
-proc/listclearnulls(list/list)
+/proc/listclearnulls(list/list)
if(istype(list))
while(null in list)
list -= null
@@ -611,7 +611,7 @@ This actually tests if they have the same entries and values.
min = mid+1
/*
-proc/dd_sortedObjectList(list/incoming)
+/proc/dd_sortedObjectList(list/incoming)
/*
Use binary search to order by dd_SortValue().
This works by going to the half-point of the list, seeing if the node in
@@ -669,7 +669,7 @@ proc/dd_sortedObjectList(list/incoming)
return sorted_list
*/
-proc/dd_sortedtextlist(list/incoming, case_sensitive = 0)
+/proc/dd_sortedtextlist(list/incoming, case_sensitive = 0)
// Returns a new list with the text values sorted.
// Use binary search to order by sortValue.
// This works by going to the half-point of the list, seeing if the node in question is higher or lower cost,
@@ -728,7 +728,7 @@ proc/dd_sortedtextlist(list/incoming, case_sensitive = 0)
return sorted_text
-proc/dd_sortedTextList(list/incoming)
+/proc/dd_sortedTextList(list/incoming)
var/case_sensitive = 1
return dd_sortedtextlist(incoming, case_sensitive)
diff --git a/code/_helpers/game.dm b/code/_helpers/game.dm
index dedc360f28..5781543089 100644
--- a/code/_helpers/game.dm
+++ b/code/_helpers/game.dm
@@ -322,39 +322,35 @@ var/mobs_radio_range_fired = 1 //CHOMPEdit
return list("mobs" = mobs, "objs" = objs)
-#define SIGN(X) ((X<0)?-1:1)
-
-proc
- inLineOfSight(X1,Y1,X2,Y2,Z=1,PX1=16.5,PY1=16.5,PX2=16.5,PY2=16.5)
- var/turf/T
- if(X1==X2)
- if(Y1==Y2)
- return 1 //Light cannot be blocked on same tile
- else
- var/s = SIGN(Y2-Y1)
- Y1+=s
- while(Y1!=Y2)
- T=locate(X1,Y1,Z)
- if(T.opacity)
- return 0
- Y1+=s
+/proc/inLineOfSight(X1,Y1,X2,Y2,Z=1,PX1=16.5,PY1=16.5,PX2=16.5,PY2=16.5)
+ var/turf/T
+ if(X1==X2)
+ if(Y1==Y2)
+ return 1 //Light cannot be blocked on same tile
else
- var/m=(32*(Y2-Y1)+(PY2-PY1))/(32*(X2-X1)+(PX2-PX1))
- var/b=(Y1+PY1/32-0.015625)-m*(X1+PX1/32-0.015625) //In tiles
- var/signX = SIGN(X2-X1)
- var/signY = SIGN(Y2-Y1)
- if(X1 transparent, gray -> translucent white, white -> solid white
- proc/BecomeAlphaMask()
- SwapColor(null, "#000000ff") // don't let transparent become gray
- MapColors(0,0,0,0.3, 0,0,0,0.59, 0,0,0,0.11, 0,0,0,0, 1,1,1,0)
+// Change a grayscale icon into a white icon where the original color becomes the alpha
+// I.e., black -> transparent, gray -> translucent white, white -> solid white
+/icon/proc/BecomeAlphaMask()
+ SwapColor(null, "#000000ff") // don't let transparent become gray
+ MapColors(0,0,0,0.3, 0,0,0,0.59, 0,0,0,0.11, 0,0,0,0, 1,1,1,0)
- proc/UseAlphaMask(mask)
- Opaque()
- AddAlphaMask(mask)
+/icon/proc/UseAlphaMask(mask)
+ Opaque()
+ AddAlphaMask(mask)
- proc/AddAlphaMask(mask)
- var/icon/M = new(mask)
- M.Blend("#ffffff", ICON_SUBTRACT)
- // apply mask
- Blend(M, ICON_ADD)
+/icon/proc/AddAlphaMask(mask)
+ var/icon/M = new(mask)
+ M.Blend("#ffffff", ICON_SUBTRACT)
+ // apply mask
+ Blend(M, ICON_ADD)
/*
HSV format is represented as "#hhhssvv" or "#hhhssvvaa"
@@ -317,7 +316,7 @@ icon
Higher value means brighter color
*/
-proc/ReadRGB(rgb)
+/proc/ReadRGB(rgb)
if(!rgb) return
// interpret the HSV or HSVA value
@@ -367,14 +366,14 @@ proc/ReadRGB(rgb)
. = list(r, g, b)
if(usealpha) . += alpha
-proc/RGBdec2hex(var/list/values)
+/proc/RGBdec2hex(var/list/values)
var/string = ""
while(values.len)
string = "[num2text(values[values.len], 2, 16)][string]"
values.len--
return "#[string]"
-proc/ReadHSV(hsv)
+/proc/ReadHSV(hsv)
if(!hsv) return
// interpret the HSV or HSVA value
@@ -413,7 +412,7 @@ proc/ReadHSV(hsv)
. = list(hue, sat, val)
if(usealpha) . += alpha
-proc/HSVtoRGB(hsv)
+/proc/HSVtoRGB(hsv)
if(!hsv) return "#000000"
var/list/HSV = ReadHSV(hsv)
if(!HSV) return "#000000"
@@ -441,7 +440,7 @@ proc/HSVtoRGB(hsv)
return (HSV.len > 3) ? rgb(r,g,b,HSV[4]) : rgb(r,g,b)
-proc/RGBtoHSV(rgb)
+/proc/RGBtoHSV(rgb)
if(!rgb) return "#0000000"
var/list/RGB = ReadRGB(rgb)
if(!RGB) return "#0000000"
@@ -472,7 +471,7 @@ proc/RGBtoHSV(rgb)
return hsv(hue, sat, val, (RGB.len>3 ? RGB[4] : null))
-proc/hsv(hue, sat, val, alpha)
+/proc/hsv(hue, sat, val, alpha)
if(hue < 0 || hue >= 1536) hue %= 1536
if(hue < 0) hue += 1536
if((hue & 0xFF) == 0xFF)
@@ -505,7 +504,7 @@ proc/hsv(hue, sat, val, alpha)
amount<0 or amount>1 are allowed
*/
-proc/BlendHSV(hsv1, hsv2, amount)
+/proc/BlendHSV(hsv1, hsv2, amount)
var/list/HSV1 = ReadHSV(hsv1)
var/list/HSV2 = ReadHSV(hsv2)
@@ -559,7 +558,7 @@ proc/BlendHSV(hsv1, hsv2, amount)
amount<0 or amount>1 are allowed
*/
-proc/BlendRGB(rgb1, rgb2, amount)
+/proc/BlendRGB(rgb1, rgb2, amount)
var/list/RGB1 = ReadRGB(rgb1)
var/list/RGB2 = ReadRGB(rgb2)
@@ -575,10 +574,10 @@ proc/BlendRGB(rgb1, rgb2, amount)
return isnull(alpha) ? rgb(r, g, b) : rgb(r, g, b, alpha)
-proc/BlendRGBasHSV(rgb1, rgb2, amount)
+/proc/BlendRGBasHSV(rgb1, rgb2, amount)
return HSVtoRGB(RGBtoHSV(rgb1), RGBtoHSV(rgb2), amount)
-proc/HueToAngle(hue)
+/proc/HueToAngle(hue)
// normalize hsv in case anything is screwy
if(hue < 0 || hue >= 1536) hue %= 1536
if(hue < 0) hue += 1536
@@ -586,7 +585,7 @@ proc/HueToAngle(hue)
hue -= hue >> 8
return hue / (1530/360)
-proc/AngleToHue(angle)
+/proc/AngleToHue(angle)
// normalize hsv in case anything is screwy
if(angle < 0 || angle >= 360) angle -= 360 * round(angle / 360)
var/hue = angle * (1530/360)
@@ -596,7 +595,7 @@ proc/AngleToHue(angle)
// positive angle rotates forward through red->green->blue
-proc/RotateHue(hsv, angle)
+/proc/RotateHue(hsv, angle)
var/list/HSV = ReadHSV(hsv)
// normalize hsv in case anything is screwy
@@ -618,13 +617,13 @@ proc/RotateHue(hsv, angle)
return hsv(HSV[1], HSV[2], HSV[3], (HSV.len > 3 ? HSV[4] : null))
// Convert an rgb color to grayscale
-proc/GrayScale(rgb)
+/proc/GrayScale(rgb)
var/list/RGB = ReadRGB(rgb)
var/gray = RGB[1]*0.3 + RGB[2]*0.59 + RGB[3]*0.11
return (RGB.len > 3) ? rgb(gray, gray, gray, RGB[4]) : rgb(gray, gray, gray)
// Change grayscale color to black->tone->white range
-proc/ColorTone(rgb, tone)
+/proc/ColorTone(rgb, tone)
var/list/RGB = ReadRGB(rgb)
var/list/TONE = ReadRGB(tone)
@@ -934,7 +933,7 @@ GLOBAL_LIST_EMPTY(cached_examine_icons)
/proc/uncache_examine_icon(var/weakref/WR)
GLOB.cached_examine_icons -= WR
-proc/adjust_brightness(var/color, var/value)
+/proc/adjust_brightness(var/color, var/value)
if (!color) return "#FFFFFF"
if (!value) return color
@@ -944,7 +943,7 @@ proc/adjust_brightness(var/color, var/value)
RGB[3] = CLAMP(RGB[3]+value,0,255)
return rgb(RGB[1],RGB[2],RGB[3])
-proc/sort_atoms_by_layer(var/list/atoms)
+/proc/sort_atoms_by_layer(var/list/atoms)
// Comb sort icons based on levels
var/list/result = atoms.Copy()
var/gap = result.len
diff --git a/code/_helpers/mobs.dm b/code/_helpers/mobs.dm
index 43ed714786..dc5c92f708 100644
--- a/code/_helpers/mobs.dm
+++ b/code/_helpers/mobs.dm
@@ -1,4 +1,4 @@
-proc/random_hair_style(gender, species = SPECIES_HUMAN)
+/proc/random_hair_style(gender, species = SPECIES_HUMAN)
var/h_style = "Bald"
var/list/valid_hairstyles = list()
@@ -17,7 +17,7 @@ proc/random_hair_style(gender, species = SPECIES_HUMAN)
return h_style
-proc/random_facial_hair_style(gender, species = SPECIES_HUMAN)
+/proc/random_facial_hair_style(gender, species = SPECIES_HUMAN)
var/f_style = "Shaved"
var/list/valid_facialhairstyles = list()
@@ -37,14 +37,14 @@ proc/random_facial_hair_style(gender, species = SPECIES_HUMAN)
return f_style
-proc/sanitize_name(name, species = SPECIES_HUMAN, robot = 0)
+/proc/sanitize_name(name, species = SPECIES_HUMAN, robot = 0)
var/datum/species/current_species
if(species)
current_species = GLOB.all_species[species]
return current_species ? current_species.sanitize_name(name, robot) : sanitizeName(name, MAX_NAME_LEN, robot)
-proc/random_name(gender, species = SPECIES_HUMAN)
+/proc/random_name(gender, species = SPECIES_HUMAN)
var/datum/species/current_species
if(species)
@@ -58,7 +58,7 @@ proc/random_name(gender, species = SPECIES_HUMAN)
else
return current_species.get_random_name(gender)
-proc/random_skin_tone()
+/proc/random_skin_tone()
switch(pick(60;"caucasian", 15;"afroamerican", 10;"african", 10;"latino", 5;"albino"))
if("caucasian") . = -10
if("afroamerican") . = -115
@@ -68,7 +68,7 @@ proc/random_skin_tone()
else . = rand(-185,34)
return min(max( .+rand(-25, 25), -185),34)
-proc/skintone2racedescription(tone)
+/proc/skintone2racedescription(tone)
switch (tone)
if(30 to INFINITY) return "albino"
if(20 to 30) return "pale"
@@ -80,7 +80,7 @@ proc/skintone2racedescription(tone)
if(-INFINITY to -65) return "black"
else return "unknown"
-proc/age2agedescription(age)
+/proc/age2agedescription(age)
switch(age)
if(0 to 1) return "infant"
if(1 to 3) return "toddler"
diff --git a/code/_helpers/text.dm b/code/_helpers/text.dm
index 91dd5901e1..6bf02bf77f 100644
--- a/code/_helpers/text.dm
+++ b/code/_helpers/text.dm
@@ -321,7 +321,7 @@
//Used in preferences' SetFlavorText and human's set_flavor verb
//Previews a string of len or less length
-proc/TextPreview(var/string,var/len=40)
+/proc/TextPreview(var/string,var/len=40)
if(length(string) <= len)
if(!length(string))
return "\[...\]"
diff --git a/code/_helpers/time.dm b/code/_helpers/time.dm
index 5b1210dfe5..167af12ab1 100644
--- a/code/_helpers/time.dm
+++ b/code/_helpers/time.dm
@@ -80,7 +80,7 @@ var/next_station_date_change = 1 DAY
return time2text(wtime - GLOB.timezoneOffset, format)
/* Returns 1 if it is the selected month and day */
-proc/isDay(var/month, var/day)
+/proc/isDay(var/month, var/day)
if(isnum(month) && isnum(day))
var/MM = text2num(time2text(world.timeofday, "MM")) // get the current month
var/DD = text2num(time2text(world.timeofday, "DD")) // get the current day
diff --git a/code/_helpers/unsorted.dm b/code/_helpers/unsorted.dm
index 0564d5e3f7..a989dcbede 100644
--- a/code/_helpers/unsorted.dm
+++ b/code/_helpers/unsorted.dm
@@ -596,7 +596,7 @@ Turf and target are seperate in case you want to teleport some distance from a t
return max(min(middle, high), low)
//returns random gauss number
-proc/GaussRand(var/sigma)
+/proc/GaussRand(var/sigma)
var/x,y,rsq
do
x=2*rand()-1
@@ -606,7 +606,7 @@ proc/GaussRand(var/sigma)
return sigma*y*sqrt(-2*log(rsq)/rsq)
//returns random gauss number, rounded to 'roundto'
-proc/GaussRandRound(var/sigma,var/roundto)
+/proc/GaussRandRound(var/sigma,var/roundto)
return round(GaussRand(sigma),roundto)
//Will return the contents of an atom recursivly to a depth of 'searchDepth'
@@ -867,7 +867,7 @@ proc/GaussRandRound(var/sigma,var/roundto)
refined_trg -= B
continue moving
-proc/DuplicateObject(obj/original, var/perfectcopy = 0 , var/sameloc = 0)
+/proc/DuplicateObject(obj/original, var/perfectcopy = 0 , var/sameloc = 0)
if(!original)
return null
@@ -1015,16 +1015,16 @@ proc/DuplicateObject(obj/original, var/perfectcopy = 0 , var/sameloc = 0)
-proc/get_cardinal_dir(atom/A, atom/B)
+/proc/get_cardinal_dir(atom/A, atom/B)
var/dx = abs(B.x - A.x)
var/dy = abs(B.y - A.y)
return get_dir(A, B) & (rand() * (dx+dy) < dy ? 3 : 12)
//chances are 1:value. anyprob(1) will always return true
-proc/anyprob(value)
+/proc/anyprob(value)
return (rand(1,value)==value)
-proc/view_or_range(distance = world.view , center = usr , type)
+/proc/view_or_range(distance = world.view , center = usr , type)
switch(type)
if("view")
. = view(distance,center)
@@ -1032,7 +1032,7 @@ proc/view_or_range(distance = world.view , center = usr , type)
. = range(distance,center)
return
-proc/oview_or_orange(distance = world.view , center = usr , type)
+/proc/oview_or_orange(distance = world.view , center = usr , type)
switch(type)
if("view")
. = oview(distance,center)
@@ -1040,7 +1040,7 @@ proc/oview_or_orange(distance = world.view , center = usr , type)
. = orange(distance,center)
return
-proc/get_mob_with_client_list()
+/proc/get_mob_with_client_list()
var/list/mobs = list()
for(var/mob/M in mob_list)
if (M.client)
@@ -1097,7 +1097,7 @@ var/global/list/common_tools = list(
return TRUE
return
-proc/is_hot(obj/item/W as obj)
+/proc/is_hot(obj/item/W as obj)
switch(W.type)
if(/obj/item/weapon/weldingtool)
var/obj/item/weapon/weldingtool/WT = W
@@ -1480,8 +1480,6 @@ var/mob/dview/dview_mob = new
/proc/pass()
return
-#define NAMEOF(datum, X) (#X || ##datum.##X)
-
/proc/pick_closest_path(value, list/matches = get_fancy_list_of_atom_types())
if (value == FALSE) //nothing should be calling us with a number, so this is safe
value = input("Enter type to find (blank for all, cancel to cancel)", "Search for type") as null|text
diff --git a/code/_macros.dm b/code/_macros.dm
index 18a8ddf825..d122d9045f 100644
--- a/code/_macros.dm
+++ b/code/_macros.dm
@@ -40,5 +40,6 @@
#define ARGS_DEBUG log_debug("[__FILE__] - [__LINE__]") ; for(var/arg in args) { log_debug("\t[log_info_line(arg)]") }
-#define isitem(A) istype(A, /obj/item)
-#define isTaurTail(A) istype(A, /datum/sprite_accessory/tail/taur)
+#define WORLD_ICON_SIZE 32 //Needed for the R-UST port
+
+#define PIXEL_MULTIPLIER WORLD_ICON_SIZE/32 //Needed for the R-UST port
\ No newline at end of file
diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm
index 4a1eb20d11..bdde739d83 100644
--- a/code/_onclick/hud/hud.dm
+++ b/code/_onclick/hud/hud.dm
@@ -191,7 +191,7 @@ var/list/global_huds = list(
var/list/minihuds = list()
-datum/hud/New(mob/owner)
+/datum/hud/New(mob/owner)
mymob = owner
instantiate()
..()
diff --git a/code/_onclick/hud/skybox.dm b/code/_onclick/hud/skybox.dm
index efd1179891..268e4e6518 100644
--- a/code/_onclick/hud/skybox.dm
+++ b/code/_onclick/hud/skybox.dm
@@ -62,6 +62,5 @@
client.update_skybox()
client.skybox?.scale_to_view(client.view)
-#undef SKYBOX_BORDER
#undef SKYBOX_PIXELS
#undef SKYBOX_TURFS
diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm
index 6a85d7075f..a1aedad119 100644
--- a/code/_onclick/item_attack.dm
+++ b/code/_onclick/item_attack.dm
@@ -4,14 +4,14 @@ These are the default click code call sequences used when clicking on stuff with
Atoms:
-mob/ClickOn() calls the item's resolve_attackby() proc.
+/mob/ClickOn() calls the item's resolve_attackby() proc.
item/resolve_attackby() calls the target atom's attackby() proc.
Mobs:
-mob/living/attackby() after checking for surgery, calls the item's attack() proc.
+/mob/living/attackby() after checking for surgery, calls the item's attack() proc.
item/attack() generates attack logs, sets click cooldown and calls the mob's attacked_with_item() proc. If you override this, consider whether you need to set a click cooldown, play attack animations, and generate logs yourself.
-mob/attacked_with_item() should then do mob-type specific stuff (like determining hit/miss, handling shields, etc) and then possibly call the item's apply_hit_effect() proc to actually apply the effects of being hit.
+/mob/attacked_with_item() should then do mob-type specific stuff (like determining hit/miss, handling shields, etc) and then possibly call the item's apply_hit_effect() proc to actually apply the effects of being hit.
Item Hit Effects:
diff --git a/code/controllers/autotransfer.dm b/code/controllers/autotransfer.dm
index 844dce89b2..f847f06908 100644
--- a/code/controllers/autotransfer.dm
+++ b/code/controllers/autotransfer.dm
@@ -1,20 +1,20 @@
var/datum/controller/transfer_controller/transfer_controller
-datum/controller/transfer_controller
+/datum/controller/transfer_controller
var/timerbuffer = 0 //buffer for time check
var/currenttick = 0
var/shift_hard_end = 0 //VOREStation Edit
var/shift_last_vote = 0 //VOREStation Edit
-datum/controller/transfer_controller/New()
+/datum/controller/transfer_controller/New()
timerbuffer = config.vote_autotransfer_initial
shift_hard_end = config.vote_autotransfer_initial + (config.vote_autotransfer_interval * 2) //CHOMPStation Edit //Change this "1" to how many extend votes you want there to be. //Note: Fuck you whoever just slapped a number here instead of using the FUCKING CONFIG LIKE ALL THE OTHER NUMBERS HERE
shift_last_vote = shift_hard_end - config.vote_autotransfer_interval //VOREStation Edit
START_PROCESSING(SSprocessing, src)
-datum/controller/transfer_controller/Destroy()
+/datum/controller/transfer_controller/Destroy()
STOP_PROCESSING(SSprocessing, src)
-datum/controller/transfer_controller/process()
+/datum/controller/transfer_controller/process()
currenttick = currenttick + 1
//VOREStation Edit START
if (round_duration_in_ds >= shift_last_vote - 2 MINUTES)
diff --git a/code/controllers/communications.dm b/code/controllers/communications.dm
index c1d87d7ef3..3839853567 100644
--- a/code/controllers/communications.dm
+++ b/code/controllers/communications.dm
@@ -194,9 +194,6 @@ var/list/DEPT_FREQS = list(AI_FREQ, COMM_FREQ, ENG_FREQ, ENT_FREQ, MED_FREQ, SEC
var/list/OFFMAP_FREQS = list(TALON_FREQ) //VOREStation Add
-#define TRANSMISSION_WIRE 0
-#define TRANSMISSION_RADIO 1
-
/proc/frequency_span_class(var/frequency)
// Antags!
if (frequency in ANTAG_FREQS)
diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm
index 2695a39373..bcea4490de 100644
--- a/code/controllers/master_controller.dm
+++ b/code/controllers/master_controller.dm
@@ -13,10 +13,10 @@ var/global/last_tick_duration = 0
var/global/pipe_processing_killed = 0
-datum/controller/game_controller
+/datum/controller/game_controller
var/list/shuttle_list // For debugging and VV
-datum/controller/game_controller/New()
+/datum/controller/game_controller/New()
//There can be only one master_controller. Out with the old and in with the new.
if(master_controller != src)
log_debug("Rebuilding Master Controller")
@@ -33,7 +33,7 @@ datum/controller/game_controller/New()
if(!syndicate_code_phrase) syndicate_code_phrase = generate_code_phrase()
if(!syndicate_code_response) syndicate_code_response = generate_code_phrase()
-datum/controller/game_controller/proc/setup()
+/datum/controller/game_controller/proc/setup()
setup_objects()
// setupgenetics() Moved to SSatoms
@@ -48,7 +48,7 @@ datum/controller/game_controller/proc/setup()
// #define CHECK_SLEEP_MASTER if(++initialized_objects > 500) { initialized_objects=0;sleep(world.tick_lag); }
// #endif
-datum/controller/game_controller/proc/setup_objects()
+/datum/controller/game_controller/proc/setup_objects()
// Set up antagonists.
populate_antag_type_list()
diff --git a/code/controllers/subsystems/machines.dm b/code/controllers/subsystems/machines.dm
index 89ba7d2dc6..3fc7f8b706 100644
--- a/code/controllers/subsystems/machines.dm
+++ b/code/controllers/subsystems/machines.dm
@@ -174,5 +174,4 @@ SUBSYSTEM_DEF(machines)
#undef SSMACHINES_PIPENETS
#undef SSMACHINES_MACHINERY
-#undef SSMACHINES_POWER
#undef SSMACHINES_POWER_OBJECTS
diff --git a/code/datums/category.dm b/code/datums/category.dm
index 45b2df5996..624183fe98 100644
--- a/code/datums/category.dm
+++ b/code/datums/category.dm
@@ -58,7 +58,7 @@
collection = null
return ..()
-datum/category_group/dd_SortValue()
+/datum/category_group/dd_SortValue()
return name
@@ -77,5 +77,5 @@ datum/category_group/dd_SortValue()
category = null
return ..()
-datum/category_item/dd_SortValue()
+/datum/category_item/dd_SortValue()
return name
diff --git a/code/datums/computerfiles.dm b/code/datums/computerfiles.dm
deleted file mode 100644
index 14cd7e3861..0000000000
--- a/code/datums/computerfiles.dm
+++ /dev/null
@@ -1,7 +0,0 @@
-datum
- computer
- var/name
- folder
- var/list/datum/computer/contents = list()
-
- file
\ No newline at end of file
diff --git a/code/datums/helper_datums/events.dm b/code/datums/helper_datums/events.dm
index 424f113a9c..bc3661470e 100644
--- a/code/datums/helper_datums/events.dm
+++ b/code/datums/helper_datums/events.dm
@@ -6,62 +6,62 @@
/datum/events
var/list/events
- New()
- ..()
- events = new
+/datum/events/New()
+ ..()
+ events = new
- proc/addEventType(event_type as text)
- if(!(event_type in events) || !islist(events[event_type]))
- events[event_type] = list()
- return 1
- return
-
-
- // Arguments: event_type as text, proc_holder as datum, proc_name as text
- // Returns: New event, null on error.
- proc/addEvent(event_type as text, proc_holder, proc_name as text)
- if(!event_type || !proc_holder || !proc_name)
- return
- addEventType(event_type)
- var/list/event = events[event_type]
- var/datum/event/E = new /datum/event(proc_holder,proc_name)
- event += E
- return E
-
- // Arguments: event_type as text, any number of additional arguments to pass to event handler
- // Returns: null
- proc/fireEvent()
- //to_world("Events in [args[1]] called")
- var/list/event = listgetindex(events,args[1])
- if(istype(event))
- spawn(-1)
- for(var/datum/event/E in event)
- if(!E.Fire(arglist(args.Copy(2))))
- clearEvent(args[1],E)
- return
-
- // Arguments: event_type as text, E as /datum/event
- // Returns: 1 if event cleared, null on error
- proc/clearEvent(event_type as text, datum/event/E)
- if(!event_type || !E)
- return
- var/list/event = listgetindex(events,event_type)
- event -= E
+/datum/events/proc/addEventType(event_type as text)
+ if(!(event_type in events) || !islist(events[event_type]))
+ events[event_type] = list()
return 1
+ return
+
+
+// Arguments: event_type as text, proc_holder as datum, proc_name as text
+// Returns: New event, null on error.
+/datum/events/proc/addEvent(event_type as text, proc_holder, proc_name as text)
+ if(!event_type || !proc_holder || !proc_name)
+ return
+ addEventType(event_type)
+ var/list/event = events[event_type]
+ var/datum/event/E = new /datum/event(proc_holder,proc_name)
+ event += E
+ return E
+
+// Arguments: event_type as text, any number of additional arguments to pass to event handler
+// Returns: null
+/datum/events/proc/fireEvent()
+ //to_world("Events in [args[1]] called")
+ var/list/event = listgetindex(events,args[1])
+ if(istype(event))
+ spawn(-1)
+ for(var/datum/event/E in event)
+ if(!E.Fire(arglist(args.Copy(2))))
+ clearEvent(args[1],E)
+ return
+
+// Arguments: event_type as text, E as /datum/event
+// Returns: 1 if event cleared, null on error
+/datum/events/proc/clearEvent(event_type as text, datum/event/E)
+ if(!event_type || !E)
+ return
+ var/list/event = listgetindex(events,event_type)
+ event -= E
+ return 1
/datum/event
var/listener
var/proc_name
- New(tlistener,tprocname)
- listener = tlistener
- proc_name = tprocname
- return ..()
+/datum/event/New(tlistener,tprocname)
+ listener = tlistener
+ proc_name = tprocname
+ return ..()
- proc/Fire()
- //to_world("Event fired")
- if(listener)
- call(listener,proc_name)(arglist(args))
- return 1
- return
\ No newline at end of file
+/datum/event/proc/Fire()
+ //to_world("Event fired")
+ if(listener)
+ call(listener,proc_name)(arglist(args))
+ return 1
+ return
\ No newline at end of file
diff --git a/code/datums/helper_datums/getrev.dm b/code/datums/helper_datums/getrev.dm
index 6f85193173..debc08c2c4 100644
--- a/code/datums/helper_datums/getrev.dm
+++ b/code/datums/helper_datums/getrev.dm
@@ -53,7 +53,7 @@ GLOBAL_DATUM(revdata, /datum/getrev)
continue
. += "#[tm.number][details]"
-client/verb/showrevinfo()
+/client/verb/showrevinfo()
set category = "OOC"
set name = "Show Server Revision"
set desc = "Check the current server code revision"
diff --git a/code/datums/helper_datums/topic_input.dm b/code/datums/helper_datums/topic_input.dm
index 17dd3f1266..809a6c4bc5 100644
--- a/code/datums/helper_datums/topic_input.dm
+++ b/code/datums/helper_datums/topic_input.dm
@@ -2,59 +2,59 @@
var/href
var/list/href_list
- New(thref,list/thref_list)
- href = thref
- href_list = thref_list.Copy()
- return
+/datum/topic_input/New(thref,list/thref_list)
+ href = thref
+ href_list = thref_list.Copy()
+ return
- proc/get(i)
- return listgetindex(href_list,i)
+/datum/topic_input/proc/get(i)
+ return listgetindex(href_list,i)
- proc/getAndLocate(i)
- var/t = get(i)
- if(t)
- t = locate(t)
- return t || null
+/datum/topic_input/proc/getAndLocate(i)
+ var/t = get(i)
+ if(t)
+ t = locate(t)
+ return t || null
- proc/getNum(i)
- var/t = get(i)
- if(t)
- t = text2num(t)
- return isnum(t) ? t : null
+/datum/topic_input/proc/getNum(i)
+ var/t = get(i)
+ if(t)
+ t = text2num(t)
+ return isnum(t) ? t : null
- proc/getObj(i)
- var/t = getAndLocate(i)
- return isobj(t) ? t : null
+/datum/topic_input/proc/getObj(i)
+ var/t = getAndLocate(i)
+ return isobj(t) ? t : null
- proc/getMob(i)
- var/t = getAndLocate(i)
- return ismob(t) ? t : null
+/datum/topic_input/proc/getMob(i)
+ var/t = getAndLocate(i)
+ return ismob(t) ? t : null
- proc/getTurf(i)
- var/t = getAndLocate(i)
- return isturf(t) ? t : null
+/datum/topic_input/proc/getTurf(i)
+ var/t = getAndLocate(i)
+ return isturf(t) ? t : null
- proc/getAtom(i)
- return getType(i,/atom)
+/datum/topic_input/proc/getAtom(i)
+ return getType(i,/atom)
- proc/getArea(i)
- var/t = getAndLocate(i)
- return isarea(t) ? t : null
+/datum/topic_input/proc/getArea(i)
+ var/t = getAndLocate(i)
+ return isarea(t) ? t : null
- proc/getStr(i)//params should always be text, but...
- var/t = get(i)
- return istext(t) ? t : null
+/datum/topic_input/proc/getStr(i)//params should always be text, but...
+ var/t = get(i)
+ return istext(t) ? t : null
- proc/getType(i,type)
- var/t = getAndLocate(i)
- return istype(t,type) ? t : null
+/datum/topic_input/proc/getType(i,type)
+ var/t = getAndLocate(i)
+ return istype(t,type) ? t : null
- proc/getPath(i)
- var/t = get(i)
- if(t)
- t = text2path(t)
- return ispath(t) ? t : null
+/datum/topic_input/proc/getPath(i)
+ var/t = get(i)
+ if(t)
+ t = text2path(t)
+ return ispath(t) ? t : null
- proc/getList(i)
- var/t = getAndLocate(i)
- return islist(t) ? t : null
\ No newline at end of file
+/datum/topic_input/proc/getList(i)
+ var/t = getAndLocate(i)
+ return islist(t) ? t : null
\ No newline at end of file
diff --git a/code/datums/managed_browsers/feedback_form.dm b/code/datums/managed_browsers/feedback_form.dm
index bc5c456aec..00755c7624 100644
--- a/code/datums/managed_browsers/feedback_form.dm
+++ b/code/datums/managed_browsers/feedback_form.dm
@@ -4,7 +4,7 @@
/client/can_vv_get(var_name)
return var_name != NAMEOF(src, feedback_form) // No snooping.
-GENERAL_PROTECT_DATUM(datum/managed_browser/feedback_form)
+GENERAL_PROTECT_DATUM(/datum/managed_browser/feedback_form)
// A fairly simple object to hold information about a player's feedback as it's being written.
// Having this be it's own object instead of being baked into /mob/new_player allows for it to be used
diff --git a/code/datums/outfits/jobs/special_vr.dm b/code/datums/outfits/jobs/special_vr.dm
index e16efb7947..20473f0e8e 100644
--- a/code/datums/outfits/jobs/special_vr.dm
+++ b/code/datums/outfits/jobs/special_vr.dm
@@ -22,9 +22,9 @@
pda_type = /obj/item/device/pda/centcom
flags = OUTFIT_EXTENDED_SURVIVAL|OUTFIT_COMPREHENSIVE_SURVIVAL
- post_equip(var/mob/living/carbon/human/H)
- ..()
- ert.add_antagonist(H.mind)
+/decl/hierarchy/outfit/job/emergency_responder/post_equip(var/mob/living/carbon/human/H)
+ ..()
+ ert.add_antagonist(H.mind)
/decl/hierarchy/outfit/job/clown
name = OUTFIT_JOB_NAME("Clown")
@@ -47,7 +47,7 @@
id_type = /obj/item/weapon/card/id/civilian/mime
pda_type = /obj/item/device/pda/mime
- post_equip(var/mob/living/carbon/human/H)
- ..()
- if(H.backbag == 1)
- H.equip_to_slot_or_del(new /obj/item/weapon/pen/crayon/mime(H), slot_l_hand)
+/decl/hierarchy/outfit/job/mime/post_equip(var/mob/living/carbon/human/H)
+ ..()
+ if(H.backbag == 1)
+ H.equip_to_slot_or_del(new /obj/item/weapon/pen/crayon/mime(H), slot_l_hand)
diff --git a/code/datums/supplypacks/costumes.dm b/code/datums/supplypacks/costumes.dm
index 9afd0fd60f..4af40491d3 100644
--- a/code/datums/supplypacks/costumes.dm
+++ b/code/datums/supplypacks/costumes.dm
@@ -109,7 +109,7 @@
containertype = /obj/structure/closet/crate/gilthari
containername = "Formal suit crate"
-datum/supply_pack/costumes/witch
+/datum/supply_pack/costumes/witch
name = "Witch costume"
containername = "Witch costume"
containertype = /obj/structure/closet/crate/nanothreads
diff --git a/code/datums/underwear/underwear.dm b/code/datums/underwear/underwear.dm
index f418f3e8d1..e3bf9d37ea 100644
--- a/code/datums/underwear/underwear.dm
+++ b/code/datums/underwear/underwear.dm
@@ -12,7 +12,7 @@
var/display_name // For displaying in text
var/gender = NEUTER
-datum/category_group/underwear/dd_SortValue()
+/datum/category_group/underwear/dd_SortValue()
return sort_order
/datum/category_group/underwear/top
diff --git a/code/datums/uplink/uplink_categories.dm b/code/datums/uplink/uplink_categories.dm
index f7236ddbb0..e075021c52 100644
--- a/code/datums/uplink/uplink_categories.dm
+++ b/code/datums/uplink/uplink_categories.dm
@@ -6,7 +6,7 @@
..()
items = list()
-datum/uplink_category/ammunition
+/datum/uplink_category/ammunition
name = "Ammunition"
/datum/uplink_category/services
diff --git a/code/datums/uplink/uplink_items.dm b/code/datums/uplink/uplink_items.dm
index 966884aaff..2abb5a1d1a 100644
--- a/code/datums/uplink/uplink_items.dm
+++ b/code/datums/uplink/uplink_items.dm
@@ -95,7 +95,7 @@ var/datum/uplink/uplink = new()
log_and_message_admins("\the [M] bought \a [src] through the uplink")
M.mind.purchase_log[src] += 1
-datum/uplink_item/dd_SortValue()
+/datum/uplink_item/dd_SortValue()
return item_cost
/********************************
diff --git a/code/defines/obj.dm b/code/defines/obj.dm
index 9778492615..3a7517507d 100644
--- a/code/defines/obj.dm
+++ b/code/defines/obj.dm
@@ -4,16 +4,16 @@
anchored = 1
density = 1
- attackby(obj/item/weapon/W as obj, mob/user as mob)
- return attack_hand(user)
+/obj/structure/signpost/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ return attack_hand(user)
- attack_hand(mob/user as mob)
- switch(alert("Travel back to ss13?",,"Yes","No"))
- if("Yes")
- if(user.z != src.z) return
- user.forceMove(pick(latejoin))
- if("No")
- return
+/obj/structure/signpost/attack_hand(mob/user as mob)
+ switch(alert("Travel back to ss13?",,"Yes","No"))
+ if("Yes")
+ if(user.z != src.z) return
+ user.forceMove(pick(latejoin))
+ if("No")
+ return
/obj/effect/mark
var/mark = ""
@@ -129,9 +129,9 @@
drop_sound = 'sound/items/drop/rubber.ogg'
pickup_sound = 'sound/items/pickup/rubber.ogg'
- afterattack(atom/target as mob|obj|turf|area, mob/user as mob)
- user.drop_item()
- src.throw_at(target, throw_range, throw_speed, user)
+/obj/item/weapon/beach_ball/afterattack(atom/target as mob|obj|turf|area, mob/user as mob)
+ user.drop_item()
+ src.throw_at(target, throw_range, throw_speed, user)
/obj/effect/spawner
name = "object spawner"
diff --git a/code/defines/procs/AStar.dm b/code/defines/procs/AStar.dm
index 3ce268d375..c29ffef73f 100644
--- a/code/defines/procs/AStar.dm
+++ b/code/defines/procs/AStar.dm
@@ -37,69 +37,69 @@ length to avoid portals or something i guess?? Not that they're counted right no
// Also added 'exclude' turf to avoid travelling over; defaults to null
-PriorityQueue
+/PriorityQueue
var/list/queue
var/comparison_function
- New(compare)
- queue = list()
- comparison_function = compare
+/PriorityQueue/New(compare)
+ queue = list()
+ comparison_function = compare
- proc/IsEmpty()
- return !queue.len
+/PriorityQueue/proc/IsEmpty()
+ return !queue.len
- proc/Enqueue(var/data)
- queue.Add(data)
- var/index = queue.len
+/PriorityQueue/proc/Enqueue(var/data)
+ queue.Add(data)
+ var/index = queue.len
- //From what I can tell, this automagically sorts the added data into the correct location.
- while(index > 2 && call(comparison_function)(queue[index / 2], queue[index]) > 0)
- queue.Swap(index, index / 2)
- index /= 2
+ //From what I can tell, this automagically sorts the added data into the correct location.
+ while(index > 2 && call(comparison_function)(queue[index / 2], queue[index]) > 0)
+ queue.Swap(index, index / 2)
+ index /= 2
- proc/Dequeue()
- if(!queue.len)
- return 0
- return Remove(1)
+/PriorityQueue/proc/Dequeue()
+ if(!queue.len)
+ return 0
+ return Remove(1)
- proc/Remove(var/index)
- if(index > queue.len)
- return 0
+/PriorityQueue/proc/Remove(var/index)
+ if(index > queue.len)
+ return 0
- var/thing = queue[index]
- queue.Swap(index, queue.len)
- queue.Cut(queue.len)
- if(index < queue.len)
- FixQueue(index)
- return thing
+ var/thing = queue[index]
+ queue.Swap(index, queue.len)
+ queue.Cut(queue.len)
+ if(index < queue.len)
+ FixQueue(index)
+ return thing
- proc/FixQueue(var/index)
- var/child = 2 * index
- var/item = queue[index]
+/PriorityQueue/proc/FixQueue(var/index)
+ var/child = 2 * index
+ var/item = queue[index]
- while(child <= queue.len)
- if(child < queue.len && call(comparison_function)(queue[child], queue[child + 1]) > 0)
- child++
- if(call(comparison_function)(item, queue[child]) > 0)
- queue[index] = queue[child]
- index = child
- else
- break
- child = 2 * index
- queue[index] = item
+ while(child <= queue.len)
+ if(child < queue.len && call(comparison_function)(queue[child], queue[child + 1]) > 0)
+ child++
+ if(call(comparison_function)(item, queue[child]) > 0)
+ queue[index] = queue[child]
+ index = child
+ else
+ break
+ child = 2 * index
+ queue[index] = item
- proc/List()
- return queue.Copy()
+/PriorityQueue/proc/List()
+ return queue.Copy()
- proc/Length()
- return queue.len
+/PriorityQueue/proc/Length()
+ return queue.len
- proc/RemoveItem(data)
- var/index = queue.Find(data)
- if(index)
- return Remove(index)
+/PriorityQueue/proc/RemoveItem(data)
+ var/index = queue.Find(data)
+ if(index)
+ return Remove(index)
-PathNode
+/PathNode
var/datum/position
var/PathNode/previous_node
@@ -109,21 +109,21 @@ PathNode
var/cost
var/nodes_traversed
- New(_position, _previous_node, _known_cost, _cost, _nodes_traversed)
- position = _position
- previous_node = _previous_node
+/PathNode/New(_position, _previous_node, _known_cost, _cost, _nodes_traversed)
+ position = _position
+ previous_node = _previous_node
- known_cost = _known_cost
- cost = _cost
- estimated_cost = cost + known_cost
+ known_cost = _known_cost
+ cost = _cost
+ estimated_cost = cost + known_cost
- best_estimated_cost = estimated_cost
- nodes_traversed = _nodes_traversed
+ best_estimated_cost = estimated_cost
+ nodes_traversed = _nodes_traversed
-proc/PathWeightCompare(PathNode/a, PathNode/b)
+/proc/PathWeightCompare(PathNode/a, PathNode/b)
return a.estimated_cost - b.estimated_cost
-proc/AStar(var/start, var/end, var/adjacent, var/dist, var/max_nodes, var/max_node_depth = 30, var/min_target_dist = 0, var/min_node_dist, var/id, var/datum/exclude)
+/proc/AStar(var/start, var/end, var/adjacent, var/dist, var/max_nodes, var/max_node_depth = 30, var/min_target_dist = 0, var/min_node_dist, var/id, var/datum/exclude)
var/PriorityQueue/open = new /PriorityQueue(/proc/PathWeightCompare)
var/list/closed = list()
var/list/path
diff --git a/code/defines/procs/dbcore.dm b/code/defines/procs/dbcore.dm
index 35470e8c59..e0f8ab94af 100644
--- a/code/defines/procs/dbcore.dm
+++ b/code/defines/procs/dbcore.dm
@@ -38,7 +38,7 @@ var/DB_SERVER = "" // This is the location of your MySQL server (localhost is US
var/DB_PORT = 3306 // This is the port your MySQL server is running on (3306 is the default)
*/
-DBConnection
+/DBConnection
var/_db_con // This variable contains a reference to the actual database connection.
var/dbi // This variable is a string containing the DBI MySQL requires.
var/user // This variable contains the username data.
@@ -48,14 +48,14 @@ DBConnection
var/server = ""
var/port = 3306
-DBConnection/New(dbi_handler,username,password_handler,cursor_handler)
+/DBConnection/New(dbi_handler,username,password_handler,cursor_handler)
src.dbi = dbi_handler
src.user = username
src.password = password_handler
src.default_cursor = cursor_handler
_db_con = _dm_db_new_con()
-DBConnection/proc/Connect(dbi_handler=src.dbi,user_handler=src.user,password_handler=src.password,cursor_handler)
+/DBConnection/proc/Connect(dbi_handler=src.dbi,user_handler=src.user,password_handler=src.password,cursor_handler)
if(!config.sql_enabled)
return 0
if(!src) return 0
@@ -63,24 +63,24 @@ DBConnection/proc/Connect(dbi_handler=src.dbi,user_handler=src.user,password_han
if(!cursor_handler) cursor_handler = Default_Cursor
return _dm_db_connect(_db_con,dbi_handler,user_handler,password_handler,cursor_handler,null)
-DBConnection/proc/Disconnect() return _dm_db_close(_db_con)
+/DBConnection/proc/Disconnect() return _dm_db_close(_db_con)
-DBConnection/proc/IsConnected()
+/DBConnection/proc/IsConnected()
if(!config.sql_enabled) return 0
var/success = _dm_db_is_connected(_db_con)
return success
-DBConnection/proc/Quote(str) return _dm_db_quote(_db_con,str)
+/DBConnection/proc/Quote(str) return _dm_db_quote(_db_con,str)
-DBConnection/proc/ErrorMsg() return _dm_db_error_msg(_db_con)
-DBConnection/proc/SelectDB(database_name,dbi)
+/DBConnection/proc/ErrorMsg() return _dm_db_error_msg(_db_con)
+/DBConnection/proc/SelectDB(database_name,dbi)
if(IsConnected()) Disconnect()
//return Connect("[dbi?"[dbi]":"dbi:mysql:[database_name]:[DB_SERVER]:[DB_PORT]"]",user,password)
return Connect("[dbi?"[dbi]":"dbi:mysql:[database_name]:[sqladdress]:[sqlport]"]",user,password)
-DBConnection/proc/NewQuery(sql_query,cursor_handler=src.default_cursor) return new/DBQuery(sql_query,src,cursor_handler)
+/DBConnection/proc/NewQuery(sql_query,cursor_handler=src.default_cursor) return new/DBQuery(sql_query,src,cursor_handler)
-DBQuery/New(sql_query,DBConnection/connection_handler,cursor_handler)
+/DBQuery/New(sql_query,DBConnection/connection_handler,cursor_handler)
if(sql_query) src.sql = sql_query
if(connection_handler) src.db_connection = connection_handler
if(cursor_handler) src.default_cursor = cursor_handler
@@ -88,7 +88,7 @@ DBQuery/New(sql_query,DBConnection/connection_handler,cursor_handler)
return ..()
-DBQuery
+/DBQuery
var/sql // The sql query being executed.
var/default_cursor
var/list/columns //list of DB Columns populated by Columns()
@@ -98,26 +98,26 @@ DBQuery
var/DBConnection/db_connection
var/_db_query
-DBQuery/proc/Connect(DBConnection/connection_handler) src.db_connection = connection_handler
+/DBQuery/proc/Connect(DBConnection/connection_handler) src.db_connection = connection_handler
-DBQuery/proc/Execute(sql_query=src.sql,cursor_handler=default_cursor)
+/DBQuery/proc/Execute(sql_query=src.sql,cursor_handler=default_cursor)
Close()
return _dm_db_execute(_db_query,sql_query,db_connection._db_con,cursor_handler,null)
-DBQuery/proc/NextRow() return _dm_db_next_row(_db_query,item,conversions)
+/DBQuery/proc/NextRow() return _dm_db_next_row(_db_query,item,conversions)
-DBQuery/proc/RowsAffected() return _dm_db_rows_affected(_db_query)
+/DBQuery/proc/RowsAffected() return _dm_db_rows_affected(_db_query)
-DBQuery/proc/RowCount() return _dm_db_row_count(_db_query)
+/DBQuery/proc/RowCount() return _dm_db_row_count(_db_query)
-DBQuery/proc/ErrorMsg() return _dm_db_error_msg(_db_query)
+/DBQuery/proc/ErrorMsg() return _dm_db_error_msg(_db_query)
-DBQuery/proc/Columns()
+/DBQuery/proc/Columns()
if(!columns)
columns = _dm_db_columns(_db_query,/DBColumn)
return columns
-DBQuery/proc/GetRowData()
+/DBQuery/proc/GetRowData()
var/list/columns = Columns()
var/list/results
if(columns.len)
@@ -128,23 +128,23 @@ DBQuery/proc/GetRowData()
results[C] = src.item[(cur_col.position+1)]
return results
-DBQuery/proc/Close()
+/DBQuery/proc/Close()
item.len = 0
columns = null
conversions = null
return _dm_db_close(_db_query)
-DBQuery/proc/Quote(str)
+/DBQuery/proc/Quote(str)
return db_connection.Quote(str)
-DBQuery/proc/SetConversion(column,conversion)
+/DBQuery/proc/SetConversion(column,conversion)
if(istext(column)) column = columns.Find(column)
if(!conversions) conversions = new/list(column)
else if(conversions.len < column) conversions.len = column
conversions[column] = conversion
-DBColumn
+/DBColumn
var/name
var/table
var/position //1-based index into item data
@@ -153,7 +153,7 @@ DBColumn
var/length
var/max_length
-DBColumn/New(name_handler,table_handler,position_handler,type_handler,flag_handler,length_handler,max_length_handler)
+/DBColumn/New(name_handler,table_handler,position_handler,type_handler,flag_handler,length_handler,max_length_handler)
src.name = name_handler
src.table = table_handler
src.position = position_handler
@@ -164,7 +164,7 @@ DBColumn/New(name_handler,table_handler,position_handler,type_handler,flag_handl
return ..()
-DBColumn/proc/SqlTypeName(type_handler=src.sql_type)
+/DBColumn/proc/SqlTypeName(type_handler=src.sql_type)
switch(type_handler)
if(TINYINT) return "TINYINT"
if(SMALLINT) return "SMALLINT"
diff --git a/code/defines/procs/sd_Alert.dm b/code/defines/procs/sd_Alert.dm
deleted file mode 100644
index e10416f112..0000000000
--- a/code/defines/procs/sd_Alert.dm
+++ /dev/null
@@ -1,168 +0,0 @@
-/* sd_Alert library
- by Shadowdarke (shadowdarke@byond.com)
-
- sd_Alert() is a powerful and flexible alternative to the built in BYOND
- alert() proc. sd_Alert offers timed popups, unlimited buttons, custom
- appearance, and even the option to popup without stealing keyboard focus
- from the map or command line.
-
- Please see demo.dm for detailed examples.
-
-FORMAT
- sd_Alert(who, message, title, buttons, default, duration, unfocus, \
- size, table, style, tag, select, flags)
-
-ARGUMENTS
- who - the client or mob to display the alert to.
- message - text message to display
- title - title of the alert box
- buttons - list of buttons
- Default Value: list("Ok")
- default - default button selestion
- Default Value: the first button in the list
- duration - the number of ticks before this alert expires. If not
- set, the alert lasts until a button is clicked.
- Default Value: 0 (unlimited)
- unfocus - if this value is set, the popup will not steal keyboard
- focus from the map or command line.
- Default Value: 1 (do not take focus)
- size - size of the popup window in px
- Default Value: "300x200"
- table - optional parameters for the HTML table in the alert
- Default Value: "width=100% height=100%" (fill the window)
- style - optional style sheet information
- tag - lets you specify a certain tag for this sd_Alert so you may manipulate it
- externally. (i.e. force the alert to close, change options and redisplay,
- reuse the same window, etc.)
- select - if set, the buttons will be replaced with a selection box with a number of
- lines displayed equal to this value.
- Default value: 0 (use buttons)
- flags - optional flags effecting the alert display. These flags may be ORed (|)
- together for multiple effects.
- SD_ALERT_SCROLL = display a scrollbar
- SD_ALERT_SELECT_MULTI = forces selection box display (instead of
- buttons) allows the user to select multiple
- choices.
- SD_ALERT_LINKS = display each choice as a plain text link.
- Any selection box style overrides this flag.
- SD_ALERT_NOVALIDATE = don't validate responses
- Default value: SD_ALERT_SCROLL
- (button display with scroll bar, validate responses)
-RETURNS
- The text of the selected button, or null if the alert duration expired
- without a button click.
-
-Version 1 changes (from version 0):
-* Added the tag, select, and flags arguments, thanks to several suggestions from Foomer.
-* Split the sd_Alert/Alert() proc into New(), Display(), and Response() to allow more
- customization by developers. Primarily developers would want to use Display() to change
- the display of active tagged windows
-
-*/
-
-
-#define SD_ALERT_SCROLL 1
-#define SD_ALERT_SELECT_MULTI 2
-#define SD_ALERT_LINKS 4
-#define SD_ALERT_NOVALIDATE 8
-
-proc/sd_Alert(client/who, message, title, buttons = list("Ok"),\
- default, duration = 0, unfocus = 1, size = "300x200", \
- table = "width=100% height=100%", style, tag, select, flags = SD_ALERT_SCROLL)
-
- if(ismob(who))
- var/mob/M = who
- who = M.client
- if(!istype(who)) CRASH("sd_Alert: Invalid target:[who] (\ref[who])")
-
- var/sd_alert/T = locate(tag)
- if(T)
- if(istype(T)) qdel(T)
- else CRASH("sd_Alert: tag \"[tag]\" is already in use by datum '[T]' (type: [T.type])")
- T = new(who, tag)
- if(duration)
- spawn(duration)
- if(T) qdel(T)
- return
- T.Display(message,title,buttons,default,unfocus,size,table,style,select,flags)
- . = T.Response()
-
-sd_alert
- var
- client/target
- response
- list/validation
-
- Destroy()
- target << browse(null,"window=\ref[src]")
- ..()
-
- New(who, tag)
- ..()
- target = who
- src.tag = tag
-
- Topic(href,params[])
- if(usr.client != target) return
- response = params["clk"]
-
- proc/Display(message,title,list/buttons,default,unfocus,size,table,style,select,flags)
- if(unfocus) spawn() target << browse(null,null)
- if(istext(buttons)) buttons = list(buttons)
- if(!default) default = buttons[1]
- if(!(flags & SD_ALERT_NOVALIDATE)) validation = buttons.Copy()
-
- var/html = {"[title][style]"
-
- target << browse(html,"window=\ref[src];size=[size];can_close=0")
-
- proc/Response()
- var/validated
- while(!validated)
- while(target && !response) // wait for a response
- sleep(2)
-
- if(response && validation)
- if(istype(response, /list))
- var/list/L = response - validation
- if(L.len) response = null
- else validated = 1
- else if(response in validation) validated = 1
- else response=null
- else validated = 1
- spawn(2) qdel(src)
- return response
diff --git a/code/defines/procs/statistics.dm b/code/defines/procs/statistics.dm
index 05ab212535..bc33fb2e5a 100644
--- a/code/defines/procs/statistics.dm
+++ b/code/defines/procs/statistics.dm
@@ -1,4 +1,4 @@
-proc/sql_poll_population()
+/proc/sql_poll_population()
if(!sqllogging)
return
var/admincount = GLOB.admins.len
@@ -17,16 +17,16 @@ proc/sql_poll_population()
log_game("SQL ERROR during population polling. Error : \[[err]\]\n")
qdel(query) //CHOMPEdit TGSQL
-proc/sql_report_round_start()
+/proc/sql_report_round_start()
// TODO
if(!sqllogging)
return
-proc/sql_report_round_end()
+/proc/sql_report_round_end()
// TODO
if(!sqllogging)
return
-proc/sql_report_death(var/mob/living/carbon/human/H)
+/proc/sql_report_death(var/mob/living/carbon/human/H)
if(!sqllogging)
return
if(!H)
@@ -61,7 +61,7 @@ proc/sql_report_death(var/mob/living/carbon/human/H)
qdel(query) //CHOMPEdit TGSQL
-proc/sql_report_cyborg_death(var/mob/living/silicon/robot/H)
+/proc/sql_report_cyborg_death(var/mob/living/silicon/robot/H)
if(!sqllogging)
return
if(!H)
@@ -96,7 +96,7 @@ proc/sql_report_cyborg_death(var/mob/living/silicon/robot/H)
qdel(query) //CHOMPEdit TGSQL
-proc/statistic_cycle()
+/proc/statistic_cycle()
set waitfor = 0
if(!sqllogging)
return
@@ -105,7 +105,7 @@ proc/statistic_cycle()
sleep(6000)
//This proc is used for feedback. It is executed at round end.
-proc/sql_commit_feedback()
+/proc/sql_commit_feedback()
if(!blackbox)
log_game("Round ended without a blackbox recorder. No feedback was sent to the database.")
return
diff --git a/code/game/antagonist/_antagonist_setup.dm b/code/game/antagonist/_antagonist_setup.dm
index fa99f001f3..6f514b9413 100644
--- a/code/game/antagonist/_antagonist_setup.dm
+++ b/code/game/antagonist/_antagonist_setup.dm
@@ -14,19 +14,6 @@
- To skip equipping with appropriate gear, supply a positive third argument.
*/
-// Antagonist datum flags.
-#define ANTAG_OVERRIDE_JOB 1 // Assigned job is set to MODE when spawning.
-#define ANTAG_OVERRIDE_MOB 2 // Mob is recreated from datum mob_type var when spawning.
-#define ANTAG_CLEAR_EQUIPMENT 4 // All preexisting equipment is purged.
-#define ANTAG_CHOOSE_NAME 8 // Antagonists are prompted to enter a name.
-#define ANTAG_IMPLANT_IMMUNE 16 // Cannot be loyalty implanted.
-#define ANTAG_SUSPICIOUS 32 // Shows up on roundstart report.
-#define ANTAG_HAS_LEADER 64 // Generates a leader antagonist.
-#define ANTAG_HAS_NUKE 128 // Will spawn a nuke at supplied location.
-#define ANTAG_RANDSPAWN 256 // Potentially randomly spawns due to events.
-#define ANTAG_VOTABLE 512 // Can be voted as an additional antagonist before roundstart.
-#define ANTAG_SET_APPEARANCE 1024 // Causes antagonists to use an appearance modifier on spawn.
-
// Globals.
var/global/list/all_antag_types = list()
var/global/list/all_antag_spawnpoints = list()
diff --git a/code/game/antagonist/outsider/wizard.dm b/code/game/antagonist/outsider/wizard.dm
index ac8efd6582..f362f6b3a8 100644
--- a/code/game/antagonist/outsider/wizard.dm
+++ b/code/game/antagonist/outsider/wizard.dm
@@ -105,7 +105,7 @@ var/datum/antagonist/wizard/wizards
for(var/spell/spell_to_remove in src.spell_list)
remove_spell(spell_to_remove)
-obj/item/clothing
+/obj/item/clothing
var/wizard_garb = 0
// Does this clothing slot count as wizard garb? (Combines a few checks)
diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm
index 93becacd94..2ee1f3e348 100755
--- a/code/game/area/Space Station 13 areas.dm
+++ b/code/game/area/Space Station 13 areas.dm
@@ -1440,29 +1440,29 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
dynamic_lighting = 0
ambience = AMBIENCE_SPACE
- auxport
- name = "\improper Fore Port Solar Array"
- icon_state = "panelsA"
+/area/solar/auxport
+ name = "\improper Fore Port Solar Array"
+ icon_state = "panelsA"
- auxstarboard
- name = "\improper Fore Starboard Solar Array"
- icon_state = "panelsA"
+/area/solar/auxstarboard
+ name = "\improper Fore Starboard Solar Array"
+ icon_state = "panelsA"
- fore
- name = "\improper Fore Solar Array"
- icon_state = "yellow"
+/area/solar/fore
+ name = "\improper Fore Solar Array"
+ icon_state = "yellow"
- aft
- name = "\improper Aft Solar Array"
- icon_state = "aft"
+/area/solar/aft
+ name = "\improper Aft Solar Array"
+ icon_state = "aft"
- starboard
- name = "\improper Aft Starboard Solar Array"
- icon_state = "panelsS"
+/area/solar/starboard
+ name = "\improper Aft Starboard Solar Array"
+ icon_state = "panelsS"
- port
- name = "\improper Aft Port Solar Array"
- icon_state = "panelsP"
+/area/solar/port
+ name = "\improper Aft Port Solar Array"
+ icon_state = "panelsP"
/area/maintenance/auxsolarport
name = "Solar Maintenance - Fore Port"
diff --git a/code/game/area/asteroid_areas.dm b/code/game/area/asteroid_areas.dm
index e43b024ed1..c25e0e3c15 100644
--- a/code/game/area/asteroid_areas.dm
+++ b/code/game/area/asteroid_areas.dm
@@ -134,9 +134,9 @@
always_unpowered = 1
dynamic_lighting = 0
- aft
- name = "\improper Engineering Outpost Solar Array"
- icon_state = "yellow"
+/area/outpost/engineering/solarsoutside/aft
+ name = "\improper Engineering Outpost Solar Array"
+ icon_state = "yellow"
// Engineering Mining Outpost
/area/outpost/engineering/mining
diff --git a/code/game/base_turf.dm b/code/game/base_turf.dm
index b1944cba4a..92bf5c9f8d 100644
--- a/code/game/base_turf.dm
+++ b/code/game/base_turf.dm
@@ -1,12 +1,12 @@
// Returns the lowest turf available on a given Z-level, defaults to asteroid for Polaris.
-proc/get_base_turf(var/z)
+/proc/get_base_turf(var/z)
if(!using_map.base_turf_by_z["[z]"])
using_map.base_turf_by_z["[z]"] = /turf/space
return using_map.base_turf_by_z["[z]"]
//An area can override the z-level base turf, so our solar array areas etc. can be space-based.
-proc/get_base_turf_by_area(var/turf/T)
+/proc/get_base_turf_by_area(var/turf/T)
var/area/A = T.loc
if(A.base_turf)
return A.base_turf
diff --git a/code/game/dna/dna2.dm b/code/game/dna/dna2.dm
index 60015e8427..e910bdf77e 100644
--- a/code/game/dna/dna2.dm
+++ b/code/game/dna/dna2.dm
@@ -89,10 +89,6 @@ var/global/list/datum/dna/gene/dna_genes[0]
// Used for genes that check for value rather than a binary on/off.
#define GENE_ALWAYS_ACTIVATE 1
-// Skip checking if it's already active.
-// Used for genes that check for value rather than a binary on/off.
-#define GENE_ALWAYS_ACTIVATE 1
-
/datum/dna
// READ-ONLY, GETS OVERWRITTEN
// DO NOT FUCK WITH THESE OR BYOND WILL EAT YOUR FACE
diff --git a/code/game/dna/genes/disabilities.dm b/code/game/dna/genes/disabilities.dm
index f3506cba7f..2d3c1a3ac5 100644
--- a/code/game/dna/genes/disabilities.dm
+++ b/code/game/dna/genes/disabilities.dm
@@ -57,73 +57,73 @@
activation_message="Your mind says 'Hello'."
mutation=mHallucination
- New()
- block=HALLUCINATIONBLOCK
+/datum/dna/gene/disability/hallucinate/New()
+ block=HALLUCINATIONBLOCK
/datum/dna/gene/disability/epilepsy
name="Epilepsy"
activation_message="You get a headache."
disability=EPILEPSY
- New()
- block=HEADACHEBLOCK
+/datum/dna/gene/disability/epilepsy/New()
+ block=HEADACHEBLOCK
/datum/dna/gene/disability/cough
name="Coughing"
activation_message="You start coughing."
disability=COUGHING
- New()
- block=COUGHBLOCK
+/datum/dna/gene/disability/cough/New()
+ block=COUGHBLOCK
/datum/dna/gene/disability/clumsy
name="Clumsiness"
activation_message="You feel lightheaded."
mutation=CLUMSY
- New()
- block=CLUMSYBLOCK
+/datum/dna/gene/disability/clumsy/New()
+ block=CLUMSYBLOCK
/datum/dna/gene/disability/tourettes
name="Tourettes"
activation_message="You twitch."
disability=TOURETTES
- New()
- block=TWITCHBLOCK
+/datum/dna/gene/disability/tourettes/New()
+ block=TWITCHBLOCK
/datum/dna/gene/disability/nervousness
name="Nervousness"
activation_message="You feel nervous."
disability=NERVOUS
- New()
- block=NERVOUSBLOCK
+/datum/dna/gene/disability/nervousness/New()
+ block=NERVOUSBLOCK
/datum/dna/gene/disability/blindness
name="Blindness"
activation_message="You can't seem to see anything."
sdisability=BLIND
- New()
- block=BLINDBLOCK
+/datum/dna/gene/disability/blindness/New()
+ block=BLINDBLOCK
/datum/dna/gene/disability/deaf
name="Deafness"
activation_message="It's kinda quiet."
sdisability=DEAF
- New()
- block=DEAFBLOCK
+/datum/dna/gene/disability/deaf/New()
+ block=DEAFBLOCK
- activate(var/mob/M, var/connected, var/flags)
- ..(M,connected,flags)
- M.ear_deaf = 1
+/datum/dna/gene/disability/deaf/activate(var/mob/M, var/connected, var/flags)
+ ..(M,connected,flags)
+ M.ear_deaf = 1
/datum/dna/gene/disability/nearsighted
name="Nearsightedness"
activation_message="Your eyes feel weird..."
disability=NEARSIGHTED
- New()
- block=GLASSESBLOCK
+/datum/dna/gene/disability/nearsighted/New()
+ block=GLASSESBLOCK
diff --git a/code/game/dna/genes/powers.dm b/code/game/dna/genes/powers.dm
index efb934e504..6f91a5d0c8 100644
--- a/code/game/dna/genes/powers.dm
+++ b/code/game/dna/genes/powers.dm
@@ -7,180 +7,153 @@
activation_messages=list("You feel no need to breathe.")
mutation=mNobreath
- New()
- block=NOBREATHBLOCK
+/datum/dna/gene/basic/nobreath/New()
+ block=NOBREATHBLOCK
/datum/dna/gene/basic/remoteview
name="Remote Viewing"
activation_messages=list("Your mind expands.")
mutation=mRemote
- New()
- block=REMOTEVIEWBLOCK
+/datum/dna/gene/basic/remoteview/New()
+ block=REMOTEVIEWBLOCK
- activate(var/mob/M, var/connected, var/flags)
- ..(M,connected,flags)
- M.verbs += /mob/living/carbon/human/proc/remoteobserve
+/datum/dna/gene/basic/remoteview/activate(var/mob/M, var/connected, var/flags)
+ ..(M,connected,flags)
+ M.verbs += /mob/living/carbon/human/proc/remoteobserve
/datum/dna/gene/basic/regenerate
name="Regenerate"
activation_messages=list("You feel better.")
mutation=mRegen
- New()
- block=REGENERATEBLOCK
+/datum/dna/gene/basic/regenerate/New()
+ block=REGENERATEBLOCK
/datum/dna/gene/basic/increaserun
name="Super Speed"
activation_messages=list("Your leg muscles pulsate.")
mutation=mRun
- New()
- block=INCREASERUNBLOCK
+/datum/dna/gene/basic/increaserun/New()
+ block=INCREASERUNBLOCK
/datum/dna/gene/basic/remotetalk
name="Telepathy"
activation_messages=list("You expand your mind outwards.")
mutation=mRemotetalk
- New()
- block=REMOTETALKBLOCK
+/datum/dna/gene/basic/remotetalk/New()
+ block=REMOTETALKBLOCK
- activate(var/mob/M, var/connected, var/flags)
- ..(M,connected,flags)
- M.verbs += /mob/living/carbon/human/proc/remotesay
+/datum/dna/gene/basic/remotetalk/activate(var/mob/M, var/connected, var/flags)
+ ..(M,connected,flags)
+ M.verbs += /mob/living/carbon/human/proc/remotesay
/datum/dna/gene/basic/morph
name="Morph"
activation_messages=list("Your skin feels strange.")
mutation=mMorph
- New()
- block=MORPHBLOCK
+/datum/dna/gene/basic/morph/New()
+ block=MORPHBLOCK
- activate(var/mob/M)
- ..(M)
- M.verbs += /mob/living/carbon/human/proc/morph
-
-/* Not used on bay
-/datum/dna/gene/basic/heat_resist
- name="Heat Resistance"
- activation_messages=list("Your skin is icy to the touch.")
- mutation=mHeatres
-
- New()
- block=COLDBLOCK
-
- can_activate(var/mob/M,var/flags)
- if(flags & MUTCHK_FORCED)
- return !(/datum/dna/gene/basic/cold_resist in M.active_genes)
- // Probability check
- var/_prob = 15
- if(COLD_RESISTANCE in M.mutations)
- _prob=5
- if(probinj(_prob,(flags&MUTCHK_FORCED)))
- return 1
-
- OnDrawUnderlays(var/mob/M,var/g,var/fat)
- return "cold[fat]_s"
-*/
+/datum/dna/gene/basic/morph/activate(var/mob/M)
+ ..(M)
+ M.verbs += /mob/living/carbon/human/proc/morph
/datum/dna/gene/basic/cold_resist
name="Cold Resistance"
activation_messages=list("Your body is filled with warmth.")
mutation=COLD_RESISTANCE
- New()
- block=FIREBLOCK
+/datum/dna/gene/basic/cold_resist/New()
+ block=FIREBLOCK
- can_activate(var/mob/M,var/flags)
- if(flags & MUTCHK_FORCED)
- return 1
- // return !(/datum/dna/gene/basic/heat_resist in M.active_genes)
- // Probability check
- var/_prob=30
- //if(mHeatres in M.mutations)
- // _prob=5
- if(probinj(_prob,(flags&MUTCHK_FORCED)))
- return 1
+/datum/dna/gene/basic/cold_resist/can_activate(var/mob/M,var/flags)
+ if(flags & MUTCHK_FORCED)
+ return 1
+ var/_prob=30
+ if(probinj(_prob,(flags&MUTCHK_FORCED)))
+ return 1
- OnDrawUnderlays(var/mob/M,var/g,var/fat)
- return "fire[fat]_s"
+/datum/dna/gene/basic/cold_resist/OnDrawUnderlays(var/mob/M,var/g,var/fat)
+ return "fire[fat]_s"
/datum/dna/gene/basic/noprints
name="No Prints"
activation_messages=list("Your fingers feel numb.")
mutation=mFingerprints
- New()
- block=NOPRINTSBLOCK
+/datum/dna/gene/basic/noprints/New()
+ block=NOPRINTSBLOCK
/datum/dna/gene/basic/noshock
name="Shock Immunity"
activation_messages=list("Your skin feels strange.")
mutation=mShock
- New()
- block=SHOCKIMMUNITYBLOCK
+/datum/dna/gene/basic/noshock/New()
+ block=SHOCKIMMUNITYBLOCK
/datum/dna/gene/basic/midget
name="Midget"
activation_messages=list("Your skin feels rubbery.")
mutation=mSmallsize
- New()
- block=SMALLSIZEBLOCK
+/datum/dna/gene/basic/midget/New()
+ block=SMALLSIZEBLOCK
- can_activate(var/mob/M,var/flags)
- // Can't be big and small.
- if(HULK in M.mutations)
- return 0
- return ..(M,flags)
+/datum/dna/gene/basic/midget/can_activate(var/mob/M,var/flags)
+ // Can't be big and small.
+ if(HULK in M.mutations)
+ return 0
+ return ..(M,flags)
- activate(var/mob/M, var/connected, var/flags)
- ..(M,connected,flags)
- M.pass_flags |= 1
+/datum/dna/gene/basic/midget/activate(var/mob/M, var/connected, var/flags)
+ ..(M,connected,flags)
+ M.pass_flags |= 1
- deactivate(var/mob/M, var/connected, var/flags)
- ..(M,connected,flags)
- M.pass_flags &= ~1 //This may cause issues down the track, but offhand I can't think of any other way for humans to get passtable short of varediting so it should be fine. ~Z
+/datum/dna/gene/basic/midget/deactivate(var/mob/M, var/connected, var/flags)
+ ..(M,connected,flags)
+ M.pass_flags &= ~1 //This may cause issues down the track, but offhand I can't think of any other way for humans to get passtable short of varediting so it should be fine. ~Z
/datum/dna/gene/basic/hulk
name="Hulk"
activation_messages=list("Your muscles hurt.")
mutation=HULK
- New()
- block=HULKBLOCK
+/datum/dna/gene/basic/hulk/New()
+ block=HULKBLOCK
- can_activate(var/mob/M,var/flags)
- // Can't be big and small.
- if(mSmallsize in M.mutations)
- return 0
- return ..(M,flags)
+/datum/dna/gene/basic/hulk/can_activate(var/mob/M,var/flags)
+ // Can't be big and small.
+ if(mSmallsize in M.mutations)
+ return 0
+ return ..(M,flags)
- OnDrawUnderlays(var/mob/M,var/g,var/fat)
- if(fat)
- return "hulk_[fat]_s"
- else
- return "hulk_[g]_s"
+/datum/dna/gene/basic/hulk/OnDrawUnderlays(var/mob/M,var/g,var/fat)
+ if(fat)
+ return "hulk_[fat]_s"
+ else
+ return "hulk_[g]_s"
- OnMobLife(var/mob/living/carbon/human/M)
- if(!istype(M)) return
- if(M.health <= 25)
- M.mutations.Remove(HULK)
- M.update_mutations() //update our mutation overlays
- to_chat(M, "You suddenly feel very weak.")
- M.Weaken(3)
- M.emote("collapse")
+/datum/dna/gene/basic/hulk/OnMobLife(var/mob/living/carbon/human/M)
+ if(!istype(M)) return
+ if(M.health <= 25)
+ M.mutations.Remove(HULK)
+ M.update_mutations() //update our mutation overlays
+ to_chat(M, "You suddenly feel very weak.")
+ M.Weaken(3)
+ M.emote("collapse")
/datum/dna/gene/basic/xray
name="X-Ray Vision"
activation_messages=list("The walls suddenly disappear.")
mutation=XRAY
- New()
- block=XRAYBLOCK
+/datum/dna/gene/basic/xray/New()
+ block=XRAYBLOCK
/datum/dna/gene/basic/tk
name="Telekenesis"
@@ -188,7 +161,7 @@
mutation=TK
activation_prob=15
- New()
- block=TELEBLOCK
- OnDrawUnderlays(var/mob/M,var/g,var/fat)
- return "telekinesishead[fat]_s"
+/datum/dna/gene/basic/tk/New()
+ block=TELEBLOCK
+/datum/dna/gene/basic/tk/OnDrawUnderlays(var/mob/M,var/g,var/fat)
+ return "telekinesishead[fat]_s"
diff --git a/code/game/gamemodes/changeling/changeling_powers.dm b/code/game/gamemodes/changeling/changeling_powers.dm
index b03b986bca..f6d6695b19 100644
--- a/code/game/gamemodes/changeling/changeling_powers.dm
+++ b/code/game/gamemodes/changeling/changeling_powers.dm
@@ -160,7 +160,7 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E
//STINGS// //They get a pretty header because there's just so fucking many of them ;_;
//////////
-turf/proc/AdjacentTurfsRangedSting()
+/turf/proc/AdjacentTurfsRangedSting()
//Yes this is snowflakey, but I couldn't get it to work any other way.. -Luke
var/list/allowed = list(
/obj/structure/table,
diff --git a/code/game/gamemodes/cult/construct_spells.dm b/code/game/gamemodes/cult/construct_spells.dm
index aea5270f95..48394146b5 100644
--- a/code/game/gamemodes/cult/construct_spells.dm
+++ b/code/game/gamemodes/cult/construct_spells.dm
@@ -1,29 +1,6 @@
-//cast_method flags, needs to be up to date with Technomancer's. They were, for some reason, not working outside it.
-#define CAST_USE 1 // Clicking the spell in your hand.
-#define CAST_MELEE 2 // Clicking an atom in melee range.
-#define CAST_RANGED 4 // Clicking an atom beyond melee range.
-#define CAST_THROW 8 // Throwing the spell and hitting an atom.
-#define CAST_COMBINE 16 // Clicking another spell with this spell.
-#define CAST_INNATE 32 // Activates upon verb usage, used for mobs without hands.
-
-//Aspects
-#define ASPECT_FIRE "fire" //Damage over time and raising body-temp. Firesuits protect from this.
-#define ASPECT_FROST "frost" //Slows down the affected, also involves imbedding with icicles. Winter coats protect from this.
-#define ASPECT_SHOCK "shock" //Energy-expensive, usually stuns. Insulated armor protects from this.
-#define ASPECT_AIR "air" //Mostly involves manipulation of atmos, useless in a vacuum. Magboots protect from this.
-#define ASPECT_FORCE "force" //Manipulates gravity to push things away or towards a location.
-#define ASPECT_TELE "tele" //Teleportation of self, other objects, or other people.
-#define ASPECT_DARK "dark" //Makes all those photons vanish using magic-- WITH SCIENCE. Used for sneaky stuff.
-#define ASPECT_LIGHT "light" //The opposite of dark, usually blinds, makes holo-illusions, or makes laser lightshows.
-#define ASPECT_BIOMED "biomed" //Mainly concerned with healing and restoration.
-#define ASPECT_EMP "emp" //Unused now.
-#define ASPECT_UNSTABLE "unstable" //Heavily RNG-based, causes instability to the victim.
-#define ASPECT_CHROMATIC "chromatic" //Used to combine with other spells.
-#define ASPECT_UNHOLY "unholy" //Involves the dead, blood, and most things against divine beings.
-
//////////////////////////////Construct Spells/////////////////////////
-proc/findNullRod(var/atom/target)
+/proc/findNullRod(var/atom/target)
if(istype(target,/obj/item/weapon/nullrod))
return 1
else if(target.contents)
diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm
index 07440ae5f5..4b095d2cd1 100644
--- a/code/game/gamemodes/cult/ritual.dm
+++ b/code/game/gamemodes/cult/ritual.dm
@@ -65,117 +65,116 @@ var/global/list/rnwords = list("ire","ego","nahlizet","certum","veri","jatkaa","
// self other technology - Communication rune //was other hear blood
// join hide technology - stun rune. Rune color: bright pink.
- New()
- ..()
- blood_image = image(loc = src)
- blood_image.override = 1
- for(var/mob/living/silicon/ai/AI in player_list)
- if(AI.client)
- AI.client.images += blood_image
- rune_list.Add(src)
+/obj/effect/rune/Initialize()
+ . = ..()
+ blood_image = image(loc = src)
+ blood_image.override = 1
+ for(var/mob/living/silicon/ai/AI in player_list)
+ if(AI.client)
+ AI.client.images += blood_image
+ rune_list.Add(src)
- Destroy()
- for(var/mob/living/silicon/ai/AI in player_list)
- if(AI.client)
- AI.client.images -= blood_image
- qdel(blood_image)
- blood_image = null
- rune_list.Remove(src)
- ..()
+/obj/effect/rune/Destroy()
+ for(var/mob/living/silicon/ai/AI in player_list)
+ if(AI.client)
+ AI.client.images -= blood_image
+ qdel(blood_image)
+ blood_image = null
+ rune_list.Remove(src)
+ ..()
- examine(mob/user)
- . = ..()
- if(iscultist(user))
- . += "This spell circle reads: [word1] [word2] [word3]."
+/obj/effect/rune/examine(mob/user)
+ . = ..()
+ if(iscultist(user))
+ . += "This spell circle reads: [word1] [word2] [word3]."
- attackby(I as obj, user as mob)
- if(istype(I, /obj/item/weapon/book/tome) && iscultist(user))
- to_chat(user, "You retrace your steps, carefully undoing the lines of the rune.")
- qdel(src)
- return
- else if(istype(I, /obj/item/weapon/nullrod))
- to_chat(user, "You disrupt the vile magic with the deadening field of the null rod!")
- qdel(src)
- return
+/obj/effect/rune/attackby(I as obj, user as mob)
+ if(istype(I, /obj/item/weapon/book/tome) && iscultist(user))
+ to_chat(user, "You retrace your steps, carefully undoing the lines of the rune.")
+ qdel(src)
return
+ else if(istype(I, /obj/item/weapon/nullrod))
+ to_chat(user, "You disrupt the vile magic with the deadening field of the null rod!")
+ qdel(src)
+ return
+ return
- attack_hand(mob/living/user as mob)
- if(!iscultist(user))
- to_chat(user, "You can't mouth the arcane scratchings without fumbling over them.")
- return
- if(user.is_muzzled())
- to_chat(user, "You are unable to speak the words of the rune.")
- return
- if(!word1 || !word2 || !word3 || prob(user.getBrainLoss()))
- return fizzle()
+/obj/effect/rune/attack_hand(mob/living/user as mob)
+ if(!iscultist(user))
+ to_chat(user, "You can't mouth the arcane scratchings without fumbling over them.")
+ return
+ if(user.is_muzzled())
+ to_chat(user, "You are unable to speak the words of the rune.")
+ return
+ if(!word1 || !word2 || !word3 || prob(user.getBrainLoss()))
+ return fizzle()
// if(!src.visibility)
// src.visibility=1
- if(word1 == cultwords["travel"] && word2 == cultwords["self"])
- return teleport(src.word3)
- if(word1 == cultwords["see"] && word2 == cultwords["blood"] && word3 == cultwords["hell"])
- return tomesummon()
- if(word1 == cultwords["hell"] && word2 == cultwords["destroy"] && word3 == cultwords["other"])
- return armor()
- if(word1 == cultwords["join"] && word2 == cultwords["blood"] && word3 == cultwords["self"])
- return convert()
- if(word1 == cultwords["hell"] && word2 == cultwords["join"] && word3 == cultwords["self"])
- return tearreality()
- if(word1 == cultwords["destroy"] && word2 == cultwords["see"] && word3 == cultwords["technology"])
- return emp(src.loc,5)
- if(word1 == cultwords["travel"] && word2 == cultwords["blood"] && word3 == cultwords["self"])
- return drain()
- if(word1 == cultwords["see"] && word2 == cultwords["hell"] && word3 == cultwords["join"])
- return seer()
- if(word1 == cultwords["blood"] && word2 == cultwords["join"] && word3 == cultwords["hell"])
- return raise()
- if(word1 == cultwords["hide"] && word2 == cultwords["see"] && word3 == cultwords["blood"])
- return obscure(4)
- if(word1 == cultwords["hell"] && word2 == cultwords["travel"] && word3 == cultwords["self"])
- return ajourney()
- if(word1 == cultwords["blood"] && word2 == cultwords["see"] && word3 == cultwords["travel"])
- return manifest()
- if(word1 == cultwords["hell"] && word2 == cultwords["technology"] && word3 == cultwords["join"])
- return talisman()
- if(word1 == cultwords["hell"] && word2 == cultwords["blood"] && word3 == cultwords["join"])
- return sacrifice()
- if(word1 == cultwords["blood"] && word2 == cultwords["see"] && word3 == cultwords["hide"])
- return revealrunes(src)
- if(word1 == cultwords["destroy"] && word2 == cultwords["travel"] && word3 == cultwords["self"])
- return wall()
- if(word1 == cultwords["travel"] && word2 == cultwords["technology"] && word3 == cultwords["other"])
- return freedom()
- if(word1 == cultwords["join"] && word2 == cultwords["other"] && word3 == cultwords["self"])
- return cultsummon()
- if(word1 == cultwords["hide"] && word2 == cultwords["other"] && word3 == cultwords["see"])
- return deafen()
- if(word1 == cultwords["destroy"] && word2 == cultwords["see"] && word3 == cultwords["other"])
- return blind()
- if(word1 == cultwords["destroy"] && word2 == cultwords["see"] && word3 == cultwords["blood"])
- return bloodboil()
- if(word1 == cultwords["self"] && word2 == cultwords["other"] && word3 == cultwords["technology"])
- return communicate()
- if(word1 == cultwords["travel"] && word2 == cultwords["other"])
- return itemport(src.word3)
- if(word1 == cultwords["join"] && word2 == cultwords["hide"] && word3 == cultwords["technology"])
- return runestun()
- else
- return fizzle()
+ if(word1 == cultwords["travel"] && word2 == cultwords["self"])
+ return teleport(src.word3)
+ if(word1 == cultwords["see"] && word2 == cultwords["blood"] && word3 == cultwords["hell"])
+ return tomesummon()
+ if(word1 == cultwords["hell"] && word2 == cultwords["destroy"] && word3 == cultwords["other"])
+ return armor()
+ if(word1 == cultwords["join"] && word2 == cultwords["blood"] && word3 == cultwords["self"])
+ return convert()
+ if(word1 == cultwords["hell"] && word2 == cultwords["join"] && word3 == cultwords["self"])
+ return tearreality()
+ if(word1 == cultwords["destroy"] && word2 == cultwords["see"] && word3 == cultwords["technology"])
+ return emp(src.loc,5)
+ if(word1 == cultwords["travel"] && word2 == cultwords["blood"] && word3 == cultwords["self"])
+ return drain()
+ if(word1 == cultwords["see"] && word2 == cultwords["hell"] && word3 == cultwords["join"])
+ return seer()
+ if(word1 == cultwords["blood"] && word2 == cultwords["join"] && word3 == cultwords["hell"])
+ return raise()
+ if(word1 == cultwords["hide"] && word2 == cultwords["see"] && word3 == cultwords["blood"])
+ return obscure(4)
+ if(word1 == cultwords["hell"] && word2 == cultwords["travel"] && word3 == cultwords["self"])
+ return ajourney()
+ if(word1 == cultwords["blood"] && word2 == cultwords["see"] && word3 == cultwords["travel"])
+ return manifest()
+ if(word1 == cultwords["hell"] && word2 == cultwords["technology"] && word3 == cultwords["join"])
+ return talisman()
+ if(word1 == cultwords["hell"] && word2 == cultwords["blood"] && word3 == cultwords["join"])
+ return sacrifice()
+ if(word1 == cultwords["blood"] && word2 == cultwords["see"] && word3 == cultwords["hide"])
+ return revealrunes(src)
+ if(word1 == cultwords["destroy"] && word2 == cultwords["travel"] && word3 == cultwords["self"])
+ return wall()
+ if(word1 == cultwords["travel"] && word2 == cultwords["technology"] && word3 == cultwords["other"])
+ return freedom()
+ if(word1 == cultwords["join"] && word2 == cultwords["other"] && word3 == cultwords["self"])
+ return cultsummon()
+ if(word1 == cultwords["hide"] && word2 == cultwords["other"] && word3 == cultwords["see"])
+ return deafen()
+ if(word1 == cultwords["destroy"] && word2 == cultwords["see"] && word3 == cultwords["other"])
+ return blind()
+ if(word1 == cultwords["destroy"] && word2 == cultwords["see"] && word3 == cultwords["blood"])
+ return bloodboil()
+ if(word1 == cultwords["self"] && word2 == cultwords["other"] && word3 == cultwords["technology"])
+ return communicate()
+ if(word1 == cultwords["travel"] && word2 == cultwords["other"])
+ return itemport(src.word3)
+ if(word1 == cultwords["join"] && word2 == cultwords["hide"] && word3 == cultwords["technology"])
+ return runestun()
+ else
+ return fizzle()
- proc
- fizzle()
- if(istype(src,/obj/effect/rune))
- usr.say(pick("Hakkrutju gopoenjim.", "Nherasai pivroiashan.", "Firjji prhiv mazenhor.", "Tanah eh wakantahe.", "Obliyae na oraie.", "Miyf hon vnor'c.", "Wakabai hij fen juswix."))
- else
- usr.whisper(pick("Hakkrutju gopoenjim.", "Nherasai pivroiashan.", "Firjji prhiv mazenhor.", "Tanah eh wakantahe.", "Obliyae na oraie.", "Miyf hon vnor'c.", "Wakabai hij fen juswix."))
- for (var/mob/V in viewers(src))
- V.show_message("The markings pulse with a small burst of light, then fall dark.", 3, "You hear a faint fizzle.", 2)
- return
+/obj/effect/rune/proc/fizzle()
+ if(istype(src,/obj/effect/rune))
+ usr.say(pick("Hakkrutju gopoenjim.", "Nherasai pivroiashan.", "Firjji prhiv mazenhor.", "Tanah eh wakantahe.", "Obliyae na oraie.", "Miyf hon vnor'c.", "Wakabai hij fen juswix."))
+ else
+ usr.whisper(pick("Hakkrutju gopoenjim.", "Nherasai pivroiashan.", "Firjji prhiv mazenhor.", "Tanah eh wakantahe.", "Obliyae na oraie.", "Miyf hon vnor'c.", "Wakabai hij fen juswix."))
+ for (var/mob/V in viewers(src))
+ V.show_message("The markings pulse with a small burst of light, then fall dark.", 3, "You hear a faint fizzle.", 2)
+ return
- check_icon()
- icon = get_uristrune_cult(word1, word2, word3)
+/obj/effect/rune/proc/check_icon()
+ icon = get_uristrune_cult(word1, word2, word3)
/obj/item/weapon/book/tome
name = "arcane tome"
@@ -289,149 +288,149 @@ var/global/list/rnwords = list("ire","ego","nahlizet","certum","veri","jatkaa","