diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 00000000..13f73b4b
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,17 @@
+.git
+!.git/HEAD
+!.git/logs/HEAD
+baystation12.dmb
+baystation12.rsc
+baystation12.dyn.rsc
+baystation12.dyn.rsc.lk
+baystation12.int
+libmysql.dll
+.dockerignore
+Dockerfile
+.editorconfig
+.gitattributes
+.gitignore
+.travis.yml
+.github
+sql
\ No newline at end of file
diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 00000000..ad578927
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,22 @@
+root = true
+
+[*]
+insert_final_newline = false
+trim_trailing_whitespace = true
+
+[*.dm]
+end_of_line = crlf
+indent_style = tab
+indent_size = 4
+
+[*.dmm]
+end_of_line = crlf
+
+[*.py]
+indent_style = space
+indent_size = 4
+
+[*.yml]
+indent_style = space
+indent_size = 2
+
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 00000000..add01d67
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,14 @@
+# dmm map merger hook
+# needs additional setup, see tools/mapmerge/install.txt
+*.dmm merge=merge-dmm
+
+# dmi icon merger hook
+# needs additional setup, see tools/dmitool/merging.txt
+*.dmi merge=merge-dmi
+
+# force changelog merging to use union
+html/changelog.html merge=union
+
+# Declare files that will always have CRLF line endings on checkout.
+*.dm text eol=crlf
+*.dmm text eol=crlf
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 00000000..0725370f
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,46 @@
+#ignore misc BYOND files
+Thumbs.db
+*.log
+*.int
+*.rsc
+*.dmb
+*.lk
+*.backup
+*.before
+data/
+cfg/
+build_log.txt
+use_map
+stopserver
+reboot_called
+atupdate
+__pycache__
+
+# ignore config, but not subdirs
+!config/*/
+config/*
+sql/test_db
+.vscode/tasks.json
+.vscode/settings.json
+tools/dmitool/.classpath
+tools/dmitool/.project
+tools/dmitool/.gradle/5.6.1/gc.properties
+tools/dmitool/.gradle/5.6.1/executionHistory/executionHistory.lock
+tools/dmitool/.gradle/5.6.1/fileChanges/last-build.bin
+tools/dmitool/.gradle/5.6.1/fileHashes/fileHashes.lock
+tools/dmitool/.gradle/buildOutputCleanup/buildOutputCleanup.lock
+tools/dmitool/.gradle/buildOutputCleanup/cache.properties
+tools/dmitool/.gradle/vcs-1/gc.properties
+tools/dmitool/.settings/org.eclipse.buildship.core.prefs
+tools/dmitool/bin/main/dmitool/DMI.class
+tools/dmitool/bin/main/dmitool/DMIDiff.class
+tools/dmitool/bin/main/dmitool/DMIException.class
+tools/dmitool/bin/main/dmitool/IconState.class
+tools/dmitool/bin/main/dmitool/IconStateDiff$ISAddress.class
+tools/dmitool/bin/main/dmitool/IconStateDiff.class
+tools/dmitool/bin/main/dmitool/Image.class
+tools/dmitool/bin/main/dmitool/Main.class
+tools/dmitool/bin/main/dmitool/NonPalettedImage.class
+tools/dmitool/bin/main/dmitool/PalettedImage.class
+tools/dmitool/bin/main/dmitool/PNGChunk.class
+tools/dmitool/bin/main/dmitool/RGBA.class
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 00000000..d620523a
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,30 @@
+language: generic
+sudo: false
+dist: precise
+
+env:
+ global:
+ - BYOND_MAJOR="513"
+ - BYOND_MINOR="1511"
+ - DM_BUILDFILE="IS12Warfare.dme"
+ - SPACEMAN_DMM_VERSION=suite-1.4
+
+matrix:
+ include:
+ - name: "Compile"
+ addons:
+ apt:
+ packages:
+ - libc6-i386
+ - libgcc1:i386
+ - libstdc++6:i386
+ cache:
+ directories:
+ - $HOME/BYOND-${BYOND_MAJOR}.${BYOND_MINOR}
+ install:
+ - chmod +x ./install-byond.sh
+ - ./install-byond.sh
+ script:
+ - (! grep -rn 'step_[xy]' maps)
+ - source $HOME/BYOND-${BYOND_MAJOR}.${BYOND_MINOR}/byond/bin/byondsetup
+ - bash dm.sh ${DM_BUILDFILE}
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 00000000..d0322027
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,30 @@
+FROM ubuntu:latest
+
+RUN mkdir /bs12
+
+RUN dpkg --add-architecture i386
+
+RUN apt-get update
+
+RUN apt-get install -y unzip make wget libmariadb2:i386
+
+RUN apt-get install -y libc6:i386 libstdc++6:i386
+
+# we are not using ADD here to download it because this file should never change
+# and thus, strictly caching it is okay
+RUN cd /bs12/ && wget -q https://www.byond.com/download/build/511/511.1385_byond_linux.zip
+
+RUN cd /bs12/ && unzip -q 511.1385_byond_linux.zip
+
+COPY . /bs12/Baystation12
+
+RUN /bin/bash -c '\
+cd /bs12/byond; \
+make here >/dev/null; \
+source bin/byondsetup; \
+cd ../Baystation12; \
+ln -s /usr/lib/i386-linux-gnu/libmariadb.so.2 libmariadb.so; \
+DreamMaker baystation12.dme; \
+'
+
+ENTRYPOINT cd /bs12/Baystation12 && . /bs12/byond/bin/byondsetup && DreamDaemon baystation12.dmb 8000 -invisible -trusted
\ No newline at end of file
diff --git a/IS12Warfare.dme b/IS12Warfare.dme
new file mode 100644
index 00000000..b6418869
--- /dev/null
+++ b/IS12Warfare.dme
@@ -0,0 +1,2463 @@
+// DM Environment file for interstation12.dme.
+// All manual changes should be made outside the BEGIN_ and END_ blocks.
+ // New source code should be placed in .dm files: choose File/New --> Code File.
+// BEGIN_INTERNALS
+// END_INTERNALS
+// BEGIN_FILE_DIR
+#define FILE_DIR .
+// END_FILE_DIR
+// BEGIN_PREFERENCES
+#define DEBUG
+// END_PREFERENCES
+// BEGIN_INCLUDE
+#include "code\_macros.dm"
+#include "code\client_macros.dm"
+#include "code\hub.dm"
+#include "code\stylesheet.dm"
+#include "code\world.dm"
+#include "code\__datastructures\globals.dm"
+#include "code\__datastructures\priority_queue.dm"
+#include "code\__datastructures\stack.dm"
+#include "code\__defines\_compile_options.dm"
+#include "code\__defines\_planes+layers.dm"
+#include "code\__defines\_tick.dm"
+#include "code\__defines\admin.dm"
+#include "code\__defines\appearance.dm"
+#include "code\__defines\atmos.dm"
+#include "code\__defines\atmospherics.dm"
+#include "code\__defines\callback.dm"
+#include "code\__defines\chemistry.dm"
+#include "code\__defines\client.dm"
+#include "code\__defines\colors.dm"
+#include "code\__defines\components.dm"
+#include "code\__defines\damage_organs.dm"
+#include "code\__defines\deity.dm"
+#include "code\__defines\dna.dm"
+#include "code\__defines\feedback.dm"
+#include "code\__defines\flags.dm"
+#include "code\__defines\gamemode.dm"
+#include "code\__defines\inventory_sizes.dm"
+#include "code\__defines\items_clothing.dm"
+#include "code\__defines\kaos.dm"
+#include "code\__defines\languages.dm"
+#include "code\__defines\lighting.dm"
+#include "code\__defines\machinery.dm"
+#include "code\__defines\mapping.dm"
+#include "code\__defines\materials.dm"
+#include "code\__defines\math_physics.dm"
+#include "code\__defines\MC.dm"
+#include "code\__defines\misc.dm"
+#include "code\__defines\mobs.dm"
+#include "code\__defines\proc_presets.dm"
+#include "code\__defines\process_scheduler.dm"
+#include "code\__defines\qdel.dm"
+#include "code\__defines\research.dm"
+#include "code\__defines\shields.dm"
+#include "code\__defines\species.dm"
+#include "code\__defines\subsystem-priority.dm"
+#include "code\__defines\subsystems.dm"
+#include "code\__defines\targeting.dm"
+#include "code\__defines\tgui.dm"
+#include "code\__defines\topic.dm"
+#include "code\__defines\turfs.dm"
+#include "code\__defines\xenoarcheaology.dm"
+#include "code\__defines\ZAS.dm"
+#include "code\_global_vars\configuration.dm"
+#include "code\_global_vars\logging.dm"
+#include "code\_global_vars\mapping.dm"
+#include "code\_global_vars\misc.dm"
+#include "code\_global_vars\mobs.dm"
+#include "code\_global_vars\radio.dm"
+#include "code\_global_vars\sensitive.dm"
+#include "code\_global_vars\lists\flavor.dm"
+#include "code\_global_vars\lists\locations.dm"
+#include "code\_global_vars\lists\logs.dm"
+#include "code\_global_vars\lists\mapping.dm"
+#include "code\_global_vars\lists\names.dm"
+#include "code\_global_vars\lists\objects.dm"
+#include "code\_helpers\_global_objects.dm"
+#include "code\_helpers\areas.dm"
+#include "code\_helpers\atmospherics.dm"
+#include "code\_helpers\atom_movables.dm"
+#include "code\_helpers\builtin_proc_callers.dm"
+#include "code\_helpers\cmp.dm"
+#include "code\_helpers\files.dm"
+#include "code\_helpers\functional.dm"
+#include "code\_helpers\game.dm"
+#include "code\_helpers\global_access.dm"
+#include "code\_helpers\global_lists.dm"
+#include "code\_helpers\icons.dm"
+#include "code\_helpers\lists.dm"
+#include "code\_helpers\logging.dm"
+#include "code\_helpers\maths.dm"
+#include "code\_helpers\matrices.dm"
+#include "code\_helpers\mobs.dm"
+#include "code\_helpers\names.dm"
+#include "code\_helpers\russian.dm"
+#include "code\_helpers\sanitize_values.dm"
+#include "code\_helpers\spawn_sync.dm"
+#include "code\_helpers\storage.dm"
+#include "code\_helpers\text.dm"
+#include "code\_helpers\time.dm"
+#include "code\_helpers\turfs.dm"
+#include "code\_helpers\type2type.dm"
+#include "code\_helpers\unsorted.dm"
+#include "code\_helpers\vector.dm"
+#include "code\_helpers\sorts\__main.dm"
+#include "code\_helpers\sorts\TimSort.dm"
+#include "code\_onclick\adjacent.dm"
+#include "code\_onclick\ai.dm"
+#include "code\_onclick\click.dm"
+#include "code\_onclick\cyborg.dm"
+#include "code\_onclick\drag_drop.dm"
+#include "code\_onclick\ghost.dm"
+#include "code\_onclick\item_attack.dm"
+#include "code\_onclick\other_mobs.dm"
+#include "code\_onclick\telekinesis.dm"
+#include "code\_onclick\hud\_defines.dm"
+#include "code\_onclick\hud\ability_screen_objects.dm"
+#include "code\_onclick\hud\action.dm"
+#include "code\_onclick\hud\alien_larva.dm"
+#include "code\_onclick\hud\fullscreen.dm"
+#include "code\_onclick\hud\global_hud.dm"
+#include "code\_onclick\hud\gun_mode.dm"
+#include "code\_onclick\hud\hud.dm"
+#include "code\_onclick\hud\human.dm"
+#include "code\_onclick\hud\movable_screen_objects.dm"
+#include "code\_onclick\hud\other_mobs.dm"
+#include "code\_onclick\hud\robot.dm"
+#include "code\_onclick\hud\screen_objects.dm"
+#include "code\_onclick\hud\skybox.dm"
+#include "code\controllers\admin.dm"
+#include "code\controllers\autotransfer.dm"
+#include "code\controllers\communications.dm"
+#include "code\controllers\configuration.dm"
+#include "code\controllers\controller.dm"
+#include "code\controllers\failsafe.dm"
+#include "code\controllers\globals.dm"
+#include "code\controllers\hooks-defs.dm"
+#include "code\controllers\hooks.dm"
+#include "code\controllers\master.dm"
+#include "code\controllers\master_controller.dm"
+#include "code\controllers\shuttle_controller.dm"
+#include "code\controllers\subsystem.dm"
+#include "code\controllers\verbs.dm"
+#include "code\controllers\voting.dm"
+#include "code\controllers\evacuation\evacuation.dm"
+#include "code\controllers\evacuation\evacuation_eta.dm"
+#include "code\controllers\evacuation\evacuation_helpers.dm"
+#include "code\controllers\evacuation\evacuation_lifepods.dm"
+#include "code\controllers\evacuation\evacuation_option.dm"
+#include "code\controllers\evacuation\evacuation_pods.dm"
+#include "code\controllers\evacuation\evacuation_predicate.dm"
+#include "code\controllers\evacuation\evacuation_shuttle.dm"
+#include "code\controllers\evacuation\~evac.dm"
+#include "code\controllers\Processes\alarm.dm"
+#include "code\controllers\Processes\emergencyShuttle.dm"
+#include "code\controllers\Processes\event.dm"
+#include "code\controllers\Processes\inactivity.dm"
+#include "code\controllers\Processes\lighting.dm"
+#include "code\controllers\Processes\nanoui.dm"
+#include "code\controllers\Processes\radiation.dm"
+#include "code\controllers\Processes\Shuttle.dm"
+#include "code\controllers\Processes\supply.dm"
+#include "code\controllers\Processes\tgui.dm"
+#include "code\controllers\Processes\ticker.dm"
+#include "code\controllers\Processes\timer.dm"
+#include "code\controllers\Processes\trade.dm"
+#include "code\controllers\Processes\turf.dm"
+#include "code\controllers\Processes\vote.dm"
+#include "code\controllers\ProcessScheduler\core\process.dm"
+#include "code\controllers\ProcessScheduler\core\processScheduler.dm"
+#include "code\controllers\subsystems\air.dm"
+#include "code\controllers\subsystems\aspects.dm"
+#include "code\controllers\subsystems\atoms.dm"
+#include "code\controllers\subsystems\chat.dm"
+#include "code\controllers\subsystems\garbage.dm"
+#include "code\controllers\subsystems\legacy.dm"
+#include "code\controllers\subsystems\machines.dm"
+#include "code\controllers\subsystems\mapping.dm"
+#include "code\controllers\subsystems\open_space.dm"
+#include "code\controllers\subsystems\overlays.dm"
+#include "code\controllers\subsystems\ping.dm"
+#include "code\controllers\subsystems\skybox.dm"
+#include "code\controllers\subsystems\sun.dm"
+#include "code\controllers\subsystems\warfare.dm"
+#include "code\controllers\subsystems\wireless.dm"
+#include "code\controllers\subsystems\processing\airflow.dm"
+#include "code\controllers\subsystems\processing\fast_process.dm"
+#include "code\controllers\subsystems\processing\mobs.dm"
+#include "code\controllers\subsystems\processing\obj.dm"
+#include "code\controllers\subsystems\processing\processing.dm"
+#include "code\controllers\subsystems\processing\projectiles.dm"
+#include "code\controllers\subsystems\processing\vines.dm"
+#include "code\datums\ai_law_sets.dm"
+#include "code\datums\ai_laws.dm"
+#include "code\datums\browser.dm"
+#include "code\datums\callbacks.dm"
+#include "code\datums\category.dm"
+#include "code\datums\datum.dm"
+#include "code\datums\hierarchy.dm"
+#include "code\datums\mil_ranks.dm"
+#include "code\datums\mind.dm"
+#include "code\datums\position_point_vector.dm"
+#include "code\datums\progressbar.dm"
+#include "code\datums\recipe.dm"
+#include "code\datums\ruins.dm"
+#include "code\datums\security_state.dm"
+#include "code\datums\shackle_law_sets.dm"
+#include "code\datums\sound_player.dm"
+#include "code\datums\suit_sensor_jammer_method.dm"
+#include "code\datums\sun.dm"
+#include "code\datums\weakref.dm"
+#include "code\datums\ai\ai.dm"
+#include "code\datums\ai\ai_holo.dm"
+#include "code\datums\appearances\appearance_data.dm"
+#include "code\datums\appearances\appearance_manager.dm"
+#include "code\datums\appearances\automatic\_base.dm"
+#include "code\datums\appearances\automatic\cardborg.dm"
+#include "code\datums\colors\color_generator.dm"
+#include "code\datums\communication\_defines.dm"
+#include "code\datums\communication\channel.dm"
+#include "code\datums\communication\dsay.dm"
+#include "code\datums\communication\looc.dm"
+#include "code\datums\communication\ooc.dm"
+#include "code\datums\communication\pray.dm"
+#include "code\datums\communication\~defines.dm"
+#include "code\datums\extensions\_defines.dm"
+#include "code\datums\extensions\extensions.dm"
+#include "code\datums\extensions\interactive.dm"
+#include "code\datums\extensions\label.dm"
+#include "code\datums\extensions\appearance\appearance.dm"
+#include "code\datums\extensions\appearance\base_icon_state.dm"
+#include "code\datums\extensions\appearance\cardborg.dm"
+#include "code\datums\extensions\multitool\_multitool.dm"
+#include "code\datums\extensions\multitool\multitool.dm"
+#include "code\datums\extensions\multitool\store.dm"
+#include "code\datums\extensions\multitool\circuitboards\circuitboards.dm"
+#include "code\datums\extensions\multitool\circuitboards\stationalert.dm"
+#include "code\datums\extensions\multitool\items\cable.dm"
+#include "code\datums\extensions\multitool\items\clothing.dm"
+#include "code\datums\extensions\multitool\items\items.dm"
+#include "code\datums\helper_datums\construction_datum.dm"
+#include "code\datums\helper_datums\dist_check.dm"
+#include "code\datums\helper_datums\events.dm"
+#include "code\datums\helper_datums\getrev.dm"
+#include "code\datums\helper_datums\global_iterator.dm"
+#include "code\datums\helper_datums\teleport.dm"
+#include "code\datums\helper_datums\topic_input.dm"
+#include "code\datums\observation\_defines.dm"
+#include "code\datums\observation\death.dm"
+#include "code\datums\observation\density_set.dm"
+#include "code\datums\observation\destroyed.dm"
+#include "code\datums\observation\dir_set.dm"
+#include "code\datums\observation\entered.dm"
+#include "code\datums\observation\equipped.dm"
+#include "code\datums\observation\exited.dm"
+#include "code\datums\observation\helpers.dm"
+#include "code\datums\observation\life.dm"
+#include "code\datums\observation\logged_in.dm"
+#include "code\datums\observation\logged_out.dm"
+#include "code\datums\observation\moved.dm"
+#include "code\datums\observation\name_set.dm"
+#include "code\datums\observation\observation.dm"
+#include "code\datums\observation\opacity_set.dm"
+#include "code\datums\observation\see_in_dark_set.dm"
+#include "code\datums\observation\see_invisible_set.dm"
+#include "code\datums\observation\set_invisibility.dm"
+#include "code\datums\observation\sight_set.dm"
+#include "code\datums\observation\stat_set.dm"
+#include "code\datums\observation\turf_changed.dm"
+#include "code\datums\observation\unequipped.dm"
+#include "code\datums\observation\~cleanup.dm"
+#include "code\datums\outfits\_defines.dm"
+#include "code\datums\outfits\horror_killers.dm"
+#include "code\datums\outfits\misc.dm"
+#include "code\datums\outfits\nanotrasen.dm"
+#include "code\datums\outfits\outfit.dm"
+#include "code\datums\outfits\pirates.dm"
+#include "code\datums\outfits\spec_op.dm"
+#include "code\datums\outfits\tournament.dm"
+#include "code\datums\outfits\wizardry.dm"
+#include "code\datums\outfits\equipment\backpacks.dm"
+#include "code\datums\outfits\jobs\_defines.dm"
+#include "code\datums\outfits\jobs\cargo.dm"
+#include "code\datums\outfits\jobs\civilian.dm"
+#include "code\datums\outfits\jobs\command.dm"
+#include "code\datums\outfits\jobs\engineering.dm"
+#include "code\datums\outfits\jobs\job.dm"
+#include "code\datums\outfits\jobs\medical.dm"
+#include "code\datums\outfits\jobs\misc.dm"
+#include "code\datums\outfits\jobs\science.dm"
+#include "code\datums\outfits\jobs\security.dm"
+#include "code\datums\proximity_trigger\proximity_trigger.dm"
+#include "code\datums\proximity_trigger\turf_selection.dm"
+#include "code\datums\repositories\_defines.dm"
+#include "code\datums\repositories\admin_pm.dm"
+#include "code\datums\repositories\areas.dm"
+#include "code\datums\repositories\attack_logs.dm"
+#include "code\datums\repositories\cameras.dm"
+#include "code\datums\repositories\client.dm"
+#include "code\datums\repositories\decls.dm"
+#include "code\datums\repositories\follow.dm"
+#include "code\datums\repositories\images.dm"
+#include "code\datums\repositories\mobs.dm"
+#include "code\datums\repositories\radiation.dm"
+#include "code\datums\repositories\repository.dm"
+#include "code\datums\repositories\unique.dm"
+#include "code\datums\repositories\uplink_purchases.dm"
+#include "code\datums\repositories\~defines.dm"
+#include "code\datums\repositories\crew\_defines.dm"
+#include "code\datums\repositories\crew\binary.dm"
+#include "code\datums\repositories\crew\crew.dm"
+#include "code\datums\repositories\crew\crew_sensor_modifier.dm"
+#include "code\datums\repositories\crew\general.dm"
+#include "code\datums\repositories\crew\tracking.dm"
+#include "code\datums\repositories\crew\vital.dm"
+#include "code\datums\repositories\crew\~defines.dm"
+#include "code\datums\supplypacks\atmospherics.dm"
+#include "code\datums\supplypacks\engineering.dm"
+#include "code\datums\supplypacks\hospitality.dm"
+#include "code\datums\supplypacks\hydroponics.dm"
+#include "code\datums\supplypacks\materials.dm"
+#include "code\datums\supplypacks\medical.dm"
+#include "code\datums\supplypacks\miscellaneous.dm"
+#include "code\datums\supplypacks\operations.dm"
+#include "code\datums\supplypacks\science.dm"
+#include "code\datums\supplypacks\security.dm"
+#include "code\datums\supplypacks\supply.dm"
+#include "code\datums\supplypacks\supplypack.dm"
+#include "code\datums\trading\_trading_defines.dm"
+#include "code\datums\trading\ai.dm"
+#include "code\datums\trading\food.dm"
+#include "code\datums\trading\goods.dm"
+#include "code\datums\trading\misc.dm"
+#include "code\datums\trading\ship.dm"
+#include "code\datums\trading\trade.dm"
+#include "code\datums\trading\unique.dm"
+#include "code\datums\trading\vox.dm"
+#include "code\datums\trading\weaponry.dm"
+#include "code\datums\underwear\bottom.dm"
+#include "code\datums\underwear\socks.dm"
+#include "code\datums\underwear\top.dm"
+#include "code\datums\underwear\undershirt.dm"
+#include "code\datums\underwear\underwear.dm"
+#include "code\datums\uplink\ammunition.dm"
+#include "code\datums\uplink\badassery.dm"
+#include "code\datums\uplink\devices and tools.dm"
+#include "code\datums\uplink\grenades.dm"
+#include "code\datums\uplink\highly_visible_and_dangerous_weapons.dm"
+#include "code\datums\uplink\implants.dm"
+#include "code\datums\uplink\medical.dm"
+#include "code\datums\uplink\services.dm"
+#include "code\datums\uplink\stealth_and_camouflage_items.dm"
+#include "code\datums\uplink\stealthy_and_inconspicuous_weapons.dm"
+#include "code\datums\uplink\telecrystals.dm"
+#include "code\datums\uplink\uplink_categories.dm"
+#include "code\datums\uplink\uplink_items.dm"
+#include "code\datums\uplink\uplink_sources.dm"
+#include "code\datums\vending\stored_item.dm"
+#include "code\datums\vending\vending.dm"
+#include "code\datums\wires\airlock.dm"
+#include "code\datums\wires\alarm.dm"
+#include "code\datums\wires\apc.dm"
+#include "code\datums\wires\autolathe.dm"
+#include "code\datums\wires\camera.dm"
+#include "code\datums\wires\explosive.dm"
+#include "code\datums\wires\nuclearbomb.dm"
+#include "code\datums\wires\particle_accelerator.dm"
+#include "code\datums\wires\radio.dm"
+#include "code\datums\wires\robot.dm"
+#include "code\datums\wires\shield_generator.dm"
+#include "code\datums\wires\smartfridge.dm"
+#include "code\datums\wires\smes.dm"
+#include "code\datums\wires\suit_storage_unit.dm"
+#include "code\datums\wires\vending.dm"
+#include "code\datums\wires\wires.dm"
+#include "code\game\atoms.dm"
+#include "code\game\atoms_movable.dm"
+#include "code\game\base_turf.dm"
+#include "code\game\images.dm"
+#include "code\game\periodic_news.dm"
+#include "code\game\response_team.dm"
+#include "code\game\shuttle_engines.dm"
+#include "code\game\sound.dm"
+#include "code\game\supplyshuttle.dm"
+#include "code\game\world.dm"
+#include "code\game\antagonist\_antagonist_setup.dm"
+#include "code\game\antagonist\antagonist.dm"
+#include "code\game\antagonist\antagonist_add.dm"
+#include "code\game\antagonist\antagonist_create.dm"
+#include "code\game\antagonist\antagonist_equip.dm"
+#include "code\game\antagonist\antagonist_factions.dm"
+#include "code\game\antagonist\antagonist_helpers.dm"
+#include "code\game\antagonist\antagonist_objectives.dm"
+#include "code\game\antagonist\antagonist_panel.dm"
+#include "code\game\antagonist\antagonist_place.dm"
+#include "code\game\antagonist\antagonist_print.dm"
+#include "code\game\antagonist\antagonist_update.dm"
+#include "code\game\antagonist\alien\borer.dm"
+#include "code\game\antagonist\alien\xenomorph.dm"
+#include "code\game\antagonist\outsider\actors.dm"
+#include "code\game\antagonist\outsider\commando.dm"
+#include "code\game\antagonist\outsider\deathsquad.dm"
+#include "code\game\antagonist\outsider\ert.dm"
+#include "code\game\antagonist\outsider\mercenary.dm"
+#include "code\game\antagonist\outsider\raider.dm"
+#include "code\game\antagonist\outsider\wizard.dm"
+#include "code\game\antagonist\station\changeling.dm"
+#include "code\game\antagonist\station\cultist.dm"
+#include "code\game\antagonist\station\loyalist.dm"
+#include "code\game\antagonist\station\renegade.dm"
+#include "code\game\antagonist\station\revolutionary.dm"
+#include "code\game\antagonist\station\rogue_ai.dm"
+#include "code\game\antagonist\station\traitor.dm"
+#include "code\game\area\areas.dm"
+#include "code\game\area\Space Station 13 areas.dm"
+#include "code\game\dna\dna2.dm"
+#include "code\game\dna\dna2_domutcheck.dm"
+#include "code\game\dna\dna2_helpers.dm"
+#include "code\game\dna\genes\disabilities.dm"
+#include "code\game\dna\genes\gene.dm"
+#include "code\game\dna\genes\powers.dm"
+#include "code\game\gamemodes\events.dm"
+#include "code\game\gamemodes\game_mode.dm"
+#include "code\game\gamemodes\game_mode_latespawn.dm"
+#include "code\game\gamemodes\gameticker.dm"
+#include "code\game\gamemodes\objective.dm"
+#include "code\game\gamemodes\setupgame.dm"
+#include "code\game\gamemodes\calamity\calamity.dm"
+#include "code\game\gamemodes\changeling\absorbed_dna.dm"
+#include "code\game\gamemodes\changeling\changeling.dm"
+#include "code\game\gamemodes\changeling\changeling_powers.dm"
+#include "code\game\gamemodes\changeling\modularchangling.dm"
+#include "code\game\gamemodes\cult\cult.dm"
+#include "code\game\gamemodes\cult\cult_items.dm"
+#include "code\game\gamemodes\cult\cult_structures.dm"
+#include "code\game\gamemodes\cult\ghosts.dm"
+#include "code\game\gamemodes\cult\hell_universe.dm"
+#include "code\game\gamemodes\cult\manifest.dm"
+#include "code\game\gamemodes\cult\narsie.dm"
+#include "code\game\gamemodes\cult\ritual.dm"
+#include "code\game\gamemodes\cult\runes.dm"
+#include "code\game\gamemodes\cult\talisman.dm"
+#include "code\game\gamemodes\cult\cultify\de-cultify.dm"
+#include "code\game\gamemodes\cult\cultify\mob.dm"
+#include "code\game\gamemodes\cult\cultify\turf.dm"
+#include "code\game\gamemodes\endgame\endgame.dm"
+#include "code\game\gamemodes\endgame\bluespace_jump\bluespace_jump.dm"
+#include "code\game\gamemodes\endgame\nuclear_explosion\nuclear_explosion.dm"
+#include "code\game\gamemodes\endgame\supermatter_cascade\blob.dm"
+#include "code\game\gamemodes\endgame\supermatter_cascade\portal.dm"
+#include "code\game\gamemodes\endgame\supermatter_cascade\universe.dm"
+#include "code\game\gamemodes\events\black_hole.dm"
+#include "code\game\gamemodes\events\clang.dm"
+#include "code\game\gamemodes\events\power_failure.dm"
+#include "code\game\gamemodes\events\wormholes.dm"
+#include "code\game\gamemodes\events\holidays\Christmas.dm"
+#include "code\game\gamemodes\events\holidays\Holidays.dm"
+#include "code\game\gamemodes\events\holidays\Other.dm"
+#include "code\game\gamemodes\extended\extended.dm"
+#include "code\game\gamemodes\heist\heist.dm"
+#include "code\game\gamemodes\malfunction\malf_hardware.dm"
+#include "code\game\gamemodes\malfunction\malf_research.dm"
+#include "code\game\gamemodes\malfunction\malf_research_ability.dm"
+#include "code\game\gamemodes\malfunction\malfunction.dm"
+#include "code\game\gamemodes\malfunction\newmalf_ability_trees\HARDWARE.dm"
+#include "code\game\gamemodes\malfunction\newmalf_ability_trees\HELPERS.dm"
+#include "code\game\gamemodes\malfunction\newmalf_ability_trees\tree_interdiction.dm"
+#include "code\game\gamemodes\malfunction\newmalf_ability_trees\tree_manipulation.dm"
+#include "code\game\gamemodes\malfunction\newmalf_ability_trees\tree_networking.dm"
+#include "code\game\gamemodes\malfunction\newmalf_ability_trees\tree_passive.dm"
+#include "code\game\gamemodes\meteor\meteor.dm"
+#include "code\game\gamemodes\meteor\meteors.dm"
+#include "code\game\gamemodes\mixed\bughunt.dm"
+#include "code\game\gamemodes\mixed\conflux.dm"
+#include "code\game\gamemodes\mixed\crossfire.dm"
+#include "code\game\gamemodes\mixed\infestation.dm"
+#include "code\game\gamemodes\mixed\lizard.dm"
+#include "code\game\gamemodes\mixed\paranoia.dm"
+#include "code\game\gamemodes\mixed\siege.dm"
+#include "code\game\gamemodes\mixed\traitorling.dm"
+#include "code\game\gamemodes\mixed\unity.dm"
+#include "code\game\gamemodes\mixed\uprising.dm"
+#include "code\game\gamemodes\nuclear\nuclear.dm"
+#include "code\game\gamemodes\nuclear\pinpointer.dm"
+#include "code\game\gamemodes\revolution\revolution.dm"
+#include "code\game\gamemodes\traitor\traitor.dm"
+#include "code\game\gamemodes\warfare\barricade.dm"
+#include "code\game\gamemodes\warfare\flare.dm"
+#include "code\game\gamemodes\warfare\language.dm"
+#include "code\game\gamemodes\warfare\lighting_dummy.dm"
+#include "code\game\gamemodes\warfare\structures.dm"
+#include "code\game\gamemodes\warfare\trenches.dm"
+#include "code\game\gamemodes\warfare\turfs.dm"
+#include "code\game\gamemodes\warfare\warfare.dm"
+#include "code\game\gamemodes\warfare\warfare_gas.dm"
+#include "code\game\gamemodes\wizard\wizard.dm"
+#include "code\game\jobs\_access_defs.dm"
+#include "code\game\jobs\access.dm"
+#include "code\game\jobs\access_datum.dm"
+#include "code\game\jobs\job_controller.dm"
+#include "code\game\jobs\jobs.dm"
+#include "code\game\jobs\whitelist.dm"
+#include "code\game\jobs\job\assistant.dm"
+#include "code\game\jobs\job\captain.dm"
+#include "code\game\jobs\job\civilian.dm"
+#include "code\game\jobs\job\civilian_chaplain.dm"
+#include "code\game\jobs\job\engineering.dm"
+#include "code\game\jobs\job\job.dm"
+#include "code\game\jobs\job\medical.dm"
+#include "code\game\jobs\job\science.dm"
+#include "code\game\jobs\job\security.dm"
+#include "code\game\jobs\job\silicon.dm"
+#include "code\game\machinery\adv_med.dm"
+#include "code\game\machinery\ai_slipper.dm"
+#include "code\game\machinery\alarm.dm"
+#include "code\game\machinery\atmo_control.dm"
+#include "code\game\machinery\autolathe.dm"
+#include "code\game\machinery\autolathe_datums.dm"
+#include "code\game\machinery\Beacon.dm"
+#include "code\game\machinery\biogenerator.dm"
+#include "code\game\machinery\bioprinter.dm"
+#include "code\game\machinery\bluespacerelay.dm"
+#include "code\game\machinery\boombox.dm"
+#include "code\game\machinery\buttons.dm"
+#include "code\game\machinery\CableLayer.dm"
+#include "code\game\machinery\cell_charger.dm"
+#include "code\game\machinery\constructable_frame.dm"
+#include "code\game\machinery\cryo.dm"
+#include "code\game\machinery\cryopod.dm"
+#include "code\game\machinery\deployable.dm"
+#include "code\game\machinery\door_control.dm"
+#include "code\game\machinery\doppler_array.dm"
+#include "code\game\machinery\flasher.dm"
+#include "code\game\machinery\floodlight.dm"
+#include "code\game\machinery\floor_light.dm"
+#include "code\game\machinery\floorlayer.dm"
+#include "code\game\machinery\hologram.dm"
+#include "code\game\machinery\holosign.dm"
+#include "code\game\machinery\igniter.dm"
+#include "code\game\machinery\jukebox.dm"
+#include "code\game\machinery\lightswitch.dm"
+#include "code\game\machinery\machinery.dm"
+#include "code\game\machinery\magnet.dm"
+#include "code\game\machinery\mass_driver.dm"
+#include "code\game\machinery\navbeacon.dm"
+#include "code\game\machinery\newscaster.dm"
+#include "code\game\machinery\nuclear_bomb.dm"
+#include "code\game\machinery\OpTable.dm"
+#include "code\game\machinery\oxygen_pump.dm"
+#include "code\game\machinery\pager.dm"
+#include "code\game\machinery\portable_turret.dm"
+#include "code\game\machinery\recharger.dm"
+#include "code\game\machinery\rechargestation.dm"
+#include "code\game\machinery\requests_console.dm"
+#include "code\game\machinery\resleever.dm"
+#include "code\game\machinery\robot_fabricator.dm"
+#include "code\game\machinery\seed_extractor.dm"
+#include "code\game\machinery\self_destruct.dm"
+#include "code\game\machinery\Sleeper.dm"
+#include "code\game\machinery\spaceheater.dm"
+#include "code\game\machinery\status_display.dm"
+#include "code\game\machinery\status_display_ai.dm"
+#include "code\game\machinery\status_light.dm"
+#include "code\game\machinery\suit_storage_unit.dm"
+#include "code\game\machinery\supply_display.dm"
+#include "code\game\machinery\supplybeacon.dm"
+#include "code\game\machinery\syndicatebeacon.dm"
+#include "code\game\machinery\teleporter.dm"
+#include "code\game\machinery\turret_control.dm"
+#include "code\game\machinery\vending.dm"
+#include "code\game\machinery\wall_frames.dm"
+#include "code\game\machinery\washing_machine.dm"
+#include "code\game\machinery\wishgranter.dm"
+#include "code\game\machinery\atmoalter\area_atmos_computer.dm"
+#include "code\game\machinery\atmoalter\canister.dm"
+#include "code\game\machinery\atmoalter\clamp.dm"
+#include "code\game\machinery\atmoalter\meter.dm"
+#include "code\game\machinery\atmoalter\portable_atmospherics.dm"
+#include "code\game\machinery\atmoalter\pump.dm"
+#include "code\game\machinery\atmoalter\scrubber.dm"
+#include "code\game\machinery\camera\camera.dm"
+#include "code\game\machinery\camera\camera_assembly.dm"
+#include "code\game\machinery\camera\motion.dm"
+#include "code\game\machinery\camera\presets.dm"
+#include "code\game\machinery\camera\tracking.dm"
+#include "code\game\machinery\computer\ai_core.dm"
+#include "code\game\machinery\computer\arcade.dm"
+#include "code\game\machinery\computer\arcade_orion.dm"
+#include "code\game\machinery\computer\atmos_alert.dm"
+#include "code\game\machinery\computer\atmos_control.dm"
+#include "code\game\machinery\computer\buildandrepair.dm"
+#include "code\game\machinery\computer\computer.dm"
+#include "code\game\machinery\computer\crew.dm"
+#include "code\game\machinery\computer\download_console.dm"
+#include "code\game\machinery\computer\guestpass.dm"
+#include "code\game\machinery\computer\law.dm"
+#include "code\game\machinery\computer\message.dm"
+#include "code\game\machinery\computer\Operating.dm"
+#include "code\game\machinery\computer\pod.dm"
+#include "code\game\machinery\computer\prisoner.dm"
+#include "code\game\machinery\computer\RCON_Console.dm"
+#include "code\game\machinery\computer\robot.dm"
+#include "code\game\machinery\computer\shuttle.dm"
+#include "code\game\machinery\computer\station_alert.dm"
+#include "code\game\machinery\doors\airlock.dm"
+#include "code\game\machinery\doors\airlock_control.dm"
+#include "code\game\machinery\doors\airlock_electronics.dm"
+#include "code\game\machinery\doors\airlock_interactions.dm"
+#include "code\game\machinery\doors\alarmlock.dm"
+#include "code\game\machinery\doors\blast_door.dm"
+#include "code\game\machinery\doors\braces.dm"
+#include "code\game\machinery\doors\brigdoors.dm"
+#include "code\game\machinery\doors\checkForMultipleDoors.dm"
+#include "code\game\machinery\doors\door.dm"
+#include "code\game\machinery\doors\firedoor.dm"
+#include "code\game\machinery\doors\firedoor_assembly.dm"
+#include "code\game\machinery\doors\multi_tile.dm"
+#include "code\game\machinery\doors\simple.dm"
+#include "code\game\machinery\doors\unpowered.dm"
+#include "code\game\machinery\doors\windowdoor.dm"
+#include "code\game\machinery\embedded_controller\airlock_controllers.dm"
+#include "code\game\machinery\embedded_controller\airlock_controllers_dummy.dm"
+#include "code\game\machinery\embedded_controller\airlock_docking_controller.dm"
+#include "code\game\machinery\embedded_controller\airlock_docking_controller_multi.dm"
+#include "code\game\machinery\embedded_controller\airlock_program.dm"
+#include "code\game\machinery\embedded_controller\docking_program.dm"
+#include "code\game\machinery\embedded_controller\docking_program_multi.dm"
+#include "code\game\machinery\embedded_controller\embedded_controller_base.dm"
+#include "code\game\machinery\embedded_controller\embedded_program_base.dm"
+#include "code\game\machinery\embedded_controller\simple_docking_controller.dm"
+#include "code\game\machinery\kitchen\gibber.dm"
+#include "code\game\machinery\kitchen\icecream.dm"
+#include "code\game\machinery\kitchen\microwave.dm"
+#include "code\game\machinery\kitchen\smartfridge.dm"
+#include "code\game\machinery\kitchen\cooking_machines\_cooker.dm"
+#include "code\game\machinery\kitchen\cooking_machines\_cooker_output.dm"
+#include "code\game\machinery\kitchen\cooking_machines\candy.dm"
+#include "code\game\machinery\kitchen\cooking_machines\cereal.dm"
+#include "code\game\machinery\kitchen\cooking_machines\fryer.dm"
+#include "code\game\machinery\kitchen\cooking_machines\grill.dm"
+#include "code\game\machinery\kitchen\cooking_machines\oven.dm"
+#include "code\game\machinery\pipe\construction.dm"
+#include "code\game\machinery\pipe\pipe_dispenser.dm"
+#include "code\game\machinery\pipe\pipelayer.dm"
+#include "code\game\machinery\storage\storage.dm"
+#include "code\game\machinery\telecomms\broadcaster.dm"
+#include "code\game\machinery\telecomms\logbrowser.dm"
+#include "code\game\machinery\telecomms\machine_interactions.dm"
+#include "code\game\machinery\telecomms\presets.dm"
+#include "code\game\machinery\telecomms\telecomunications.dm"
+#include "code\game\machinery\telecomms\telemonitor.dm"
+#include "code\game\machinery\telecomms\traffic_control.dm"
+#include "code\game\mecha\mech_bay.dm"
+#include "code\game\mecha\mech_fabricator.dm"
+#include "code\game\mecha\mech_sensor.dm"
+#include "code\game\mecha\mecha.dm"
+#include "code\game\mecha\mecha_construction_paths.dm"
+#include "code\game\mecha\mecha_control_console.dm"
+#include "code\game\mecha\mecha_parts.dm"
+#include "code\game\mecha\mecha_wreckage.dm"
+#include "code\game\mecha\combat\combat.dm"
+#include "code\game\mecha\combat\durand.dm"
+#include "code\game\mecha\combat\gygax.dm"
+#include "code\game\mecha\combat\marauder.dm"
+#include "code\game\mecha\combat\phazon.dm"
+#include "code\game\mecha\equipment\mecha_equipment.dm"
+#include "code\game\mecha\equipment\tools\medical_tools.dm"
+#include "code\game\mecha\equipment\tools\tools.dm"
+#include "code\game\mecha\equipment\weapons\weapons.dm"
+#include "code\game\mecha\medical\medical.dm"
+#include "code\game\mecha\medical\odysseus.dm"
+#include "code\game\mecha\working\hoverpod.dm"
+#include "code\game\mecha\working\ripley.dm"
+#include "code\game\mecha\working\working.dm"
+#include "code\game\objects\buckling.dm"
+#include "code\game\objects\empulse.dm"
+#include "code\game\objects\explosion.dm"
+#include "code\game\objects\explosion_recursive.dm"
+#include "code\game\objects\items.dm"
+#include "code\game\objects\objs.dm"
+#include "code\game\objects\structures.dm"
+#include "code\game\objects\topic.dm"
+#include "code\game\objects\weapons.dm"
+#include "code\game\objects\auras\aura.dm"
+#include "code\game\objects\auras\radiant_aura.dm"
+#include "code\game\objects\auras\personal_shields\personal_shield.dm"
+#include "code\game\objects\effects\aliens.dm"
+#include "code\game\objects\effects\bump_teleporter.dm"
+#include "code\game\objects\effects\effect_system.dm"
+#include "code\game\objects\effects\explosion_particles.dm"
+#include "code\game\objects\effects\force_portal.dm"
+#include "code\game\objects\effects\gibs.dm"
+#include "code\game\objects\effects\landmarks.dm"
+#include "code\game\objects\effects\manifest.dm"
+#include "code\game\objects\effects\mines.dm"
+#include "code\game\objects\effects\misc.dm"
+#include "code\game\objects\effects\overlays.dm"
+#include "code\game\objects\effects\portals.dm"
+#include "code\game\objects\effects\spiders.dm"
+#include "code\game\objects\effects\step_triggers.dm"
+#include "code\game\objects\effects\chem\chemsmoke.dm"
+#include "code\game\objects\effects\chem\foam.dm"
+#include "code\game\objects\effects\chem\water.dm"
+#include "code\game\objects\effects\decals\cleanable.dm"
+#include "code\game\objects\effects\decals\contraband.dm"
+#include "code\game\objects\effects\decals\crayon.dm"
+#include "code\game\objects\effects\decals\decal.dm"
+#include "code\game\objects\effects\decals\misc.dm"
+#include "code\game\objects\effects\decals\remains.dm"
+#include "code\game\objects\effects\decals\warning_stripes.dm"
+#include "code\game\objects\effects\decals\Cleanable\aliens.dm"
+#include "code\game\objects\effects\decals\Cleanable\fuel.dm"
+#include "code\game\objects\effects\decals\Cleanable\humans.dm"
+#include "code\game\objects\effects\decals\Cleanable\misc.dm"
+#include "code\game\objects\effects\decals\Cleanable\robots.dm"
+#include "code\game\objects\effects\decals\Cleanable\tracks.dm"
+#include "code\game\objects\effects\decals\posters\bs12.dm"
+#include "code\game\objects\effects\spawners\bombspawner.dm"
+#include "code\game\objects\effects\spawners\gibspawner.dm"
+#include "code\game\objects\items\apc_frame.dm"
+#include "code\game\objects\items\blueprints.dm"
+#include "code\game\objects\items\bodybag.dm"
+#include "code\game\objects\items\contraband.dm"
+#include "code\game\objects\items\crayons.dm"
+#include "code\game\objects\items\cryobag.dm"
+#include "code\game\objects\items\glassjar.dm"
+#include "code\game\objects\items\instruments.dm"
+#include "code\game\objects\items\latexballoon.dm"
+#include "code\game\objects\items\paintkit.dm"
+#include "code\game\objects\items\shooting_range.dm"
+#include "code\game\objects\items\toys.dm"
+#include "code\game\objects\items\trash.dm"
+#include "code\game\objects\items\devices\aicard.dm"
+#include "code\game\objects\items\devices\binoculars.dm"
+#include "code\game\objects\items\devices\cable_painter.dm"
+#include "code\game\objects\items\devices\chameleonproj.dm"
+#include "code\game\objects\items\devices\compass.dm"
+#include "code\game\objects\items\devices\debugger.dm"
+#include "code\game\objects\items\devices\dociler.dm"
+#include "code\game\objects\items\devices\flash.dm"
+#include "code\game\objects\items\devices\flashlight.dm"
+#include "code\game\objects\items\devices\floor_painter.dm"
+#include "code\game\objects\items\devices\geiger.dm"
+#include "code\game\objects\items\devices\hacktool.dm"
+#include "code\game\objects\items\devices\holowarrant.dm"
+#include "code\game\objects\items\devices\lightreplacer.dm"
+#include "code\game\objects\items\devices\megaphone.dm"
+#include "code\game\objects\items\devices\modkit.dm"
+#include "code\game\objects\items\devices\multitool.dm"
+#include "code\game\objects\items\devices\paicard.dm"
+#include "code\game\objects\items\devices\personal_shield.dm"
+#include "code\game\objects\items\devices\pipe_painter.dm"
+#include "code\game\objects\items\devices\powersink.dm"
+#include "code\game\objects\items\devices\scanners.dm"
+#include "code\game\objects\items\devices\spy_bug.dm"
+#include "code\game\objects\items\devices\suit_cooling.dm"
+#include "code\game\objects\items\devices\suit_sensor_jammer.dm"
+#include "code\game\objects\items\devices\t_scanner.dm"
+#include "code\game\objects\items\devices\taperecorder.dm"
+#include "code\game\objects\items\devices\traitordevices.dm"
+#include "code\game\objects\items\devices\transfer_valve.dm"
+#include "code\game\objects\items\devices\tvcamera.dm"
+#include "code\game\objects\items\devices\uplink.dm"
+#include "code\game\objects\items\devices\uplink_random_lists.dm"
+#include "code\game\objects\items\devices\violin.dm"
+#include "code\game\objects\items\devices\whistle.dm"
+#include "code\game\objects\items\devices\PDA\cart.dm"
+#include "code\game\objects\items\devices\PDA\PDA.dm"
+#include "code\game\objects\items\devices\PDA\radio.dm"
+#include "code\game\objects\items\devices\radio\beacon.dm"
+#include "code\game\objects\items\devices\radio\electropack.dm"
+#include "code\game\objects\items\devices\radio\encryptionkey.dm"
+#include "code\game\objects\items\devices\radio\headset.dm"
+#include "code\game\objects\items\devices\radio\intercom.dm"
+#include "code\game\objects\items\devices\radio\radio.dm"
+#include "code\game\objects\items\robot\robot_items.dm"
+#include "code\game\objects\items\robot\robot_parts.dm"
+#include "code\game\objects\items\robot\robot_upgrades.dm"
+#include "code\game\objects\items\stacks\matter_synth.dm"
+#include "code\game\objects\items\stacks\medical.dm"
+#include "code\game\objects\items\stacks\nanopaste.dm"
+#include "code\game\objects\items\stacks\rods.dm"
+#include "code\game\objects\items\stacks\stack.dm"
+#include "code\game\objects\items\stacks\telecrystal.dm"
+#include "code\game\objects\items\stacks\sheets\leather.dm"
+#include "code\game\objects\items\stacks\tiles\tile_types.dm"
+#include "code\game\objects\items\weapons\AI_modules.dm"
+#include "code\game\objects\items\weapons\autopsy.dm"
+#include "code\game\objects\items\weapons\baton.dm"
+#include "code\game\objects\items\weapons\beachball.dm"
+#include "code\game\objects\items\weapons\candle.dm"
+#include "code\game\objects\items\weapons\cane.dm"
+#include "code\game\objects\items\weapons\cards_ids.dm"
+#include "code\game\objects\items\weapons\cards_ids_syndicate.dm"
+#include "code\game\objects\items\weapons\cigs_lighters.dm"
+#include "code\game\objects\items\weapons\clothingbag.dm"
+#include "code\game\objects\items\weapons\clown_items.dm"
+#include "code\game\objects\items\weapons\cosmetics.dm"
+#include "code\game\objects\items\weapons\crutches.dm"
+#include "code\game\objects\items\weapons\defib.dm"
+#include "code\game\objects\items\weapons\dice.dm"
+#include "code\game\objects\items\weapons\ecigs.dm"
+#include "code\game\objects\items\weapons\explosives.dm"
+#include "code\game\objects\items\weapons\extinguisher.dm"
+#include "code\game\objects\items\weapons\flamethrower.dm"
+#include "code\game\objects\items\weapons\gift_wrappaper.dm"
+#include "code\game\objects\items\weapons\handcuffs.dm"
+#include "code\game\objects\items\weapons\improvised_components.dm"
+#include "code\game\objects\items\weapons\janitor_sign.dm"
+#include "code\game\objects\items\weapons\mop.dm"
+#include "code\game\objects\items\weapons\nuclear_cylinder.dm"
+#include "code\game\objects\items\weapons\paint.dm"
+#include "code\game\objects\items\weapons\policetape.dm"
+#include "code\game\objects\items\weapons\RCD.dm"
+#include "code\game\objects\items\weapons\RSF.dm"
+#include "code\game\objects\items\weapons\scrolls.dm"
+#include "code\game\objects\items\weapons\secrets_disk.dm"
+#include "code\game\objects\items\weapons\shields.dm"
+#include "code\game\objects\items\weapons\soap.dm"
+#include "code\game\objects\items\weapons\staff.dm"
+#include "code\game\objects\items\weapons\stunbaton.dm"
+#include "code\game\objects\items\weapons\surgery_tools.dm"
+#include "code\game\objects\items\weapons\tagnabber.dm"
+#include "code\game\objects\items\weapons\tape.dm"
+#include "code\game\objects\items\weapons\teleportation.dm"
+#include "code\game\objects\items\weapons\tools.dm"
+#include "code\game\objects\items\weapons\towels.dm"
+#include "code\game\objects\items\weapons\traps.dm"
+#include "code\game\objects\items\weapons\trays.dm"
+#include "code\game\objects\items\weapons\weaponry.dm"
+#include "code\game\objects\items\weapons\weldbackpack.dm"
+#include "code\game\objects\items\weapons\circuitboards\broken.dm"
+#include "code\game\objects\items\weapons\circuitboards\circuitboard.dm"
+#include "code\game\objects\items\weapons\circuitboards\mecha.dm"
+#include "code\game\objects\items\weapons\circuitboards\other.dm"
+#include "code\game\objects\items\weapons\circuitboards\computer\air_management.dm"
+#include "code\game\objects\items\weapons\circuitboards\computer\computer.dm"
+#include "code\game\objects\items\weapons\circuitboards\computer\holodeckcontrol.dm"
+#include "code\game\objects\items\weapons\circuitboards\computer\research.dm"
+#include "code\game\objects\items\weapons\circuitboards\computer\station_alert.dm"
+#include "code\game\objects\items\weapons\circuitboards\computer\telecomms.dm"
+#include "code\game\objects\items\weapons\circuitboards\machinery\biogenerator.dm"
+#include "code\game\objects\items\weapons\circuitboards\machinery\cloning.dm"
+#include "code\game\objects\items\weapons\circuitboards\machinery\commsantenna.dm"
+#include "code\game\objects\items\weapons\circuitboards\machinery\mech_recharger.dm"
+#include "code\game\objects\items\weapons\circuitboards\machinery\mining_drill.dm"
+#include "code\game\objects\items\weapons\circuitboards\machinery\oxyregenerator.dm"
+#include "code\game\objects\items\weapons\circuitboards\machinery\pacman.dm"
+#include "code\game\objects\items\weapons\circuitboards\machinery\power.dm"
+#include "code\game\objects\items\weapons\circuitboards\machinery\recharge_station.dm"
+#include "code\game\objects\items\weapons\circuitboards\machinery\replicator.dm"
+#include "code\game\objects\items\weapons\circuitboards\machinery\research.dm"
+#include "code\game\objects\items\weapons\circuitboards\machinery\shieldgen.dm"
+#include "code\game\objects\items\weapons\circuitboards\machinery\telecomms.dm"
+#include "code\game\objects\items\weapons\circuitboards\machinery\unary_atmos.dm"
+#include "code\game\objects\items\weapons\grenades\anti_photon_grenade.dm"
+#include "code\game\objects\items\weapons\grenades\chem_grenade.dm"
+#include "code\game\objects\items\weapons\grenades\emgrenade.dm"
+#include "code\game\objects\items\weapons\grenades\explosive.dm"
+#include "code\game\objects\items\weapons\grenades\flashbang.dm"
+#include "code\game\objects\items\weapons\grenades\grenade.dm"
+#include "code\game\objects\items\weapons\grenades\prank_grenades.dm"
+#include "code\game\objects\items\weapons\grenades\smokebomb.dm"
+#include "code\game\objects\items\weapons\grenades\spawnergrenade.dm"
+#include "code\game\objects\items\weapons\grenades\supermatter.dm"
+#include "code\game\objects\items\weapons\implants\implant.dm"
+#include "code\game\objects\items\weapons\implants\implantcase.dm"
+#include "code\game\objects\items\weapons\implants\implantchair.dm"
+#include "code\game\objects\items\weapons\implants\implanter.dm"
+#include "code\game\objects\items\weapons\implants\implantpad.dm"
+#include "code\game\objects\items\weapons\implants\implants\adrenaline.dm"
+#include "code\game\objects\items\weapons\implants\implants\chem.dm"
+#include "code\game\objects\items\weapons\implants\implants\compressed.dm"
+#include "code\game\objects\items\weapons\implants\implants\death_alarm.dm"
+#include "code\game\objects\items\weapons\implants\implants\explosive.dm"
+#include "code\game\objects\items\weapons\implants\implants\freedom.dm"
+#include "code\game\objects\items\weapons\implants\implants\imprinting.dm"
+#include "code\game\objects\items\weapons\implants\implants\loyalty.dm"
+#include "code\game\objects\items\weapons\implants\implants\tracking.dm"
+#include "code\game\objects\items\weapons\implants\implants\uplink.dm"
+#include "code\game\objects\items\weapons\material\ashtray.dm"
+#include "code\game\objects\items\weapons\material\bats.dm"
+#include "code\game\objects\items\weapons\material\kitchen.dm"
+#include "code\game\objects\items\weapons\material\knives.dm"
+#include "code\game\objects\items\weapons\material\material_weapons.dm"
+#include "code\game\objects\items\weapons\material\misc.dm"
+#include "code\game\objects\items\weapons\material\shards.dm"
+#include "code\game\objects\items\weapons\material\stick.dm"
+#include "code\game\objects\items\weapons\material\swords.dm"
+#include "code\game\objects\items\weapons\material\thrown.dm"
+#include "code\game\objects\items\weapons\material\twohanded.dm"
+#include "code\game\objects\items\weapons\melee\energy.dm"
+#include "code\game\objects\items\weapons\melee\misc.dm"
+#include "code\game\objects\items\weapons\storage\backpack.dm"
+#include "code\game\objects\items\weapons\storage\bags.dm"
+#include "code\game\objects\items\weapons\storage\belt.dm"
+#include "code\game\objects\items\weapons\storage\bible.dm"
+#include "code\game\objects\items\weapons\storage\boxes.dm"
+#include "code\game\objects\items\weapons\storage\briefcase.dm"
+#include "code\game\objects\items\weapons\storage\fancy.dm"
+#include "code\game\objects\items\weapons\storage\firstaid.dm"
+#include "code\game\objects\items\weapons\storage\internal.dm"
+#include "code\game\objects\items\weapons\storage\laundry_basket.dm"
+#include "code\game\objects\items\weapons\storage\lockbox.dm"
+#include "code\game\objects\items\weapons\storage\lunchbox.dm"
+#include "code\game\objects\items\weapons\storage\misc.dm"
+#include "code\game\objects\items\weapons\storage\secure.dm"
+#include "code\game\objects\items\weapons\storage\specialized.dm"
+#include "code\game\objects\items\weapons\storage\storage.dm"
+#include "code\game\objects\items\weapons\storage\toolbox.dm"
+#include "code\game\objects\items\weapons\storage\uplink_kits.dm"
+#include "code\game\objects\items\weapons\storage\wallets.dm"
+#include "code\game\objects\items\weapons\storage\storage_ui\default.dm"
+#include "code\game\objects\items\weapons\storage\storage_ui\storage_ui.dm"
+#include "code\game\objects\items\weapons\storage\storage_ui\tgui.dm"
+#include "code\game\objects\items\weapons\tanks\jetpack.dm"
+#include "code\game\objects\items\weapons\tanks\tank_types.dm"
+#include "code\game\objects\items\weapons\tanks\tanks.dm"
+#include "code\game\objects\random\random.dm"
+#include "code\game\objects\structures\barsign.dm"
+#include "code\game\objects\structures\bedsheet_bin.dm"
+#include "code\game\objects\structures\catwalk.dm"
+#include "code\game\objects\structures\coathanger.dm"
+#include "code\game\objects\structures\curtains.dm"
+#include "code\game\objects\structures\displaycase.dm"
+#include "code\game\objects\structures\dogbed.dm"
+#include "code\game\objects\structures\door_assembly.dm"
+#include "code\game\objects\structures\electricchair.dm"
+#include "code\game\objects\structures\extinguisher.dm"
+#include "code\game\objects\structures\fireaxe_cabinet.dm"
+#include "code\game\objects\structures\fitness.dm"
+#include "code\game\objects\structures\flora.dm"
+#include "code\game\objects\structures\girders.dm"
+#include "code\game\objects\structures\grille.dm"
+#include "code\game\objects\structures\handrail.dm"
+#include "code\game\objects\structures\inflatable.dm"
+#include "code\game\objects\structures\iv_drip.dm"
+#include "code\game\objects\structures\janicart.dm"
+#include "code\game\objects\structures\kitchen_spike.dm"
+#include "code\game\objects\structures\lattice.dm"
+#include "code\game\objects\structures\mirror.dm"
+#include "code\game\objects\structures\mop_bucket.dm"
+#include "code\game\objects\structures\morgue.dm"
+#include "code\game\objects\structures\musician.dm"
+#include "code\game\objects\structures\noticeboard.dm"
+#include "code\game\objects\structures\pit.dm"
+#include "code\game\objects\structures\railing.dm"
+#include "code\game\objects\structures\rubble.dm"
+#include "code\game\objects\structures\safe.dm"
+#include "code\game\objects\structures\showcase.dm"
+#include "code\game\objects\structures\signs.dm"
+#include "code\game\objects\structures\skele_stand.dm"
+#include "code\game\objects\structures\stasis_cage.dm"
+#include "code\game\objects\structures\statue.dm"
+#include "code\game\objects\structures\tank_dispenser.dm"
+#include "code\game\objects\structures\target_stake.dm"
+#include "code\game\objects\structures\transit_tubes.dm"
+#include "code\game\objects\structures\under_wardrobe.dm"
+#include "code\game\objects\structures\watercloset.dm"
+#include "code\game\objects\structures\windoor_assembly.dm"
+#include "code\game\objects\structures\window.dm"
+#include "code\game\objects\structures\window_frame.dm"
+#include "code\game\objects\structures\window_spawner.dm"
+#include "code\game\objects\structures\crates_lockers\closets.dm"
+#include "code\game\objects\structures\crates_lockers\crates.dm"
+#include "code\game\objects\structures\crates_lockers\largecrate.dm"
+#include "code\game\objects\structures\crates_lockers\closets\coffin.dm"
+#include "code\game\objects\structures\crates_lockers\closets\crittercrate.dm"
+#include "code\game\objects\structures\crates_lockers\closets\fitness.dm"
+#include "code\game\objects\structures\crates_lockers\closets\gimmick.dm"
+#include "code\game\objects\structures\crates_lockers\closets\job_closets.dm"
+#include "code\game\objects\structures\crates_lockers\closets\l3closet.dm"
+#include "code\game\objects\structures\crates_lockers\closets\malfunction.dm"
+#include "code\game\objects\structures\crates_lockers\closets\statue.dm"
+#include "code\game\objects\structures\crates_lockers\closets\syndicate.dm"
+#include "code\game\objects\structures\crates_lockers\closets\utility_closets.dm"
+#include "code\game\objects\structures\crates_lockers\closets\walllocker.dm"
+#include "code\game\objects\structures\crates_lockers\closets\wardrobe.dm"
+#include "code\game\objects\structures\crates_lockers\closets\secure\bar.dm"
+#include "code\game\objects\structures\crates_lockers\closets\secure\cargo.dm"
+#include "code\game\objects\structures\crates_lockers\closets\secure\engineering.dm"
+#include "code\game\objects\structures\crates_lockers\closets\secure\freezer.dm"
+#include "code\game\objects\structures\crates_lockers\closets\secure\guncabinet.dm"
+#include "code\game\objects\structures\crates_lockers\closets\secure\hydroponics.dm"
+#include "code\game\objects\structures\crates_lockers\closets\secure\medical.dm"
+#include "code\game\objects\structures\crates_lockers\closets\secure\nuke.dm"
+#include "code\game\objects\structures\crates_lockers\closets\secure\personal.dm"
+#include "code\game\objects\structures\crates_lockers\closets\secure\scientist.dm"
+#include "code\game\objects\structures\crates_lockers\closets\secure\secure_closets.dm"
+#include "code\game\objects\structures\crates_lockers\closets\secure\security.dm"
+#include "code\game\objects\structures\stool_bed_chair_nest\bed.dm"
+#include "code\game\objects\structures\stool_bed_chair_nest\chairs.dm"
+#include "code\game\objects\structures\stool_bed_chair_nest\stools.dm"
+#include "code\game\objects\structures\stool_bed_chair_nest\throne.dm"
+#include "code\game\objects\structures\stool_bed_chair_nest\wheelchair.dm"
+#include "code\game\turfs\simulated.dm"
+#include "code\game\turfs\turf.dm"
+#include "code\game\turfs\turf_changing.dm"
+#include "code\game\turfs\turf_flick_animations.dm"
+#include "code\game\turfs\unsimulated.dm"
+#include "code\game\turfs\flooring\flooring.dm"
+#include "code\game\turfs\flooring\flooring_decals.dm"
+#include "code\game\turfs\flooring\flooring_premade.dm"
+#include "code\game\turfs\flooring\flooring_shuttle.dm"
+#include "code\game\turfs\initialization\init.dm"
+#include "code\game\turfs\initialization\maintenance.dm"
+#include "code\game\turfs\simulated\floor.dm"
+#include "code\game\turfs\simulated\floor_acts.dm"
+#include "code\game\turfs\simulated\floor_attackby.dm"
+#include "code\game\turfs\simulated\floor_damage.dm"
+#include "code\game\turfs\simulated\floor_icon.dm"
+#include "code\game\turfs\simulated\floor_static.dm"
+#include "code\game\turfs\simulated\footsteps.dm"
+#include "code\game\turfs\simulated\wall_attacks.dm"
+#include "code\game\turfs\simulated\wall_icon.dm"
+#include "code\game\turfs\simulated\wall_shuttle.dm"
+#include "code\game\turfs\simulated\wall_types.dm"
+#include "code\game\turfs\simulated\walls.dm"
+#include "code\game\turfs\space\space.dm"
+#include "code\game\turfs\space\transit.dm"
+#include "code\game\turfs\unsimulated\beach.dm"
+#include "code\game\turfs\unsimulated\floor.dm"
+#include "code\game\turfs\unsimulated\walls.dm"
+#include "code\game\verbs\ignore.dm"
+#include "code\game\verbs\ooc.dm"
+#include "code\game\verbs\who.dm"
+#include "code\js\byjax.dm"
+#include "code\js\menus.dm"
+#include "code\modules\achievements\achievements.dm"
+#include "code\modules\achievements\achievements_core.dm"
+#include "code\modules\acting\acting_items.dm"
+#include "code\modules\admin\admin.dm"
+#include "code\modules\admin\admin_attack_log.dm"
+#include "code\modules\admin\admin_investigate.dm"
+#include "code\modules\admin\admin_memo.dm"
+#include "code\modules\admin\admin_ranks.dm"
+#include "code\modules\admin\admin_secrets.dm"
+#include "code\modules\admin\admin_verbs.dm"
+#include "code\modules\admin\banjob.dm"
+#include "code\modules\admin\create_mob.dm"
+#include "code\modules\admin\create_object.dm"
+#include "code\modules\admin\create_turf.dm"
+#include "code\modules\admin\hellban.dm"
+#include "code\modules\admin\holder2.dm"
+#include "code\modules\admin\holoverbs.dm"
+#include "code\modules\admin\IsBanned.dm"
+#include "code\modules\admin\map_capture.dm"
+#include "code\modules\admin\NewBan.dm"
+#include "code\modules\admin\player_notes.dm"
+#include "code\modules\admin\player_panel.dm"
+#include "code\modules\admin\server_whitelist.dm"
+#include "code\modules\admin\ticket.dm"
+#include "code\modules\admin\topic.dm"
+#include "code\modules\admin\buildmode\advance.dm"
+#include "code\modules\admin\buildmode\basic.dm"
+#include "code\modules\admin\buildmode\build_mode.dm"
+#include "code\modules\admin\buildmode\buttons.dm"
+#include "code\modules\admin\buildmode\click_handler.dm"
+#include "code\modules\admin\buildmode\edit.dm"
+#include "code\modules\admin\buildmode\ladders.dm"
+#include "code\modules\admin\buildmode\light_maker.dm"
+#include "code\modules\admin\buildmode\move_into.dm"
+#include "code\modules\admin\buildmode\relocate_to.dm"
+#include "code\modules\admin\buildmode\room_builder.dm"
+#include "code\modules\admin\buildmode\throw_at.dm"
+#include "code\modules\admin\callproc\callproc.dm"
+#include "code\modules\admin\DB ban\functions.dm"
+#include "code\modules\admin\permissionverbs\permissionedit.dm"
+#include "code\modules\admin\secrets\admin_secrets\admin_logs.dm"
+#include "code\modules\admin\secrets\admin_secrets\alter_narsie.dm"
+#include "code\modules\admin\secrets\admin_secrets\bombing_list.dm"
+#include "code\modules\admin\secrets\admin_secrets\jump_shuttle.dm"
+#include "code\modules\admin\secrets\admin_secrets\launch_shuttle.dm"
+#include "code\modules\admin\secrets\admin_secrets\launch_shuttle_forced.dm"
+#include "code\modules\admin\secrets\admin_secrets\list_dna.dm"
+#include "code\modules\admin\secrets\admin_secrets\list_fingerprints.dm"
+#include "code\modules\admin\secrets\admin_secrets\move_shuttle.dm"
+#include "code\modules\admin\secrets\admin_secrets\prison_warp.dm"
+#include "code\modules\admin\secrets\admin_secrets\show_ai_laws.dm"
+#include "code\modules\admin\secrets\admin_secrets\show_crew_manifest.dm"
+#include "code\modules\admin\secrets\admin_secrets\show_game_mode.dm"
+#include "code\modules\admin\secrets\admin_secrets\show_law_changes.dm"
+#include "code\modules\admin\secrets\admin_secrets\show_signalers.dm"
+#include "code\modules\admin\secrets\admin_secrets\traitors_and_objectives.dm"
+#include "code\modules\admin\secrets\final_solutions\summon_narsie.dm"
+#include "code\modules\admin\secrets\final_solutions\supermatter_cascade.dm"
+#include "code\modules\admin\secrets\fun_secrets\break_all_lights.dm"
+#include "code\modules\admin\secrets\fun_secrets\break_some_lights.dm"
+#include "code\modules\admin\secrets\fun_secrets\fix_all_lights.dm"
+#include "code\modules\admin\secrets\fun_secrets\ghost_mode.dm"
+#include "code\modules\admin\secrets\fun_secrets\make_all_areas_powered.dm"
+#include "code\modules\admin\secrets\fun_secrets\make_all_areas_unpowered.dm"
+#include "code\modules\admin\secrets\fun_secrets\paintball_mode.dm"
+#include "code\modules\admin\secrets\fun_secrets\power_all_smes.dm"
+#include "code\modules\admin\secrets\fun_secrets\remove_all_clothing.dm"
+#include "code\modules\admin\secrets\fun_secrets\remove_internal_clothing.dm"
+#include "code\modules\admin\secrets\fun_secrets\send_strike_team.dm"
+#include "code\modules\admin\secrets\fun_secrets\toggle_bomb_cap.dm"
+#include "code\modules\admin\secrets\fun_secrets\triple_ai_mode.dm"
+#include "code\modules\admin\secrets\fun_secrets\turn_humans_into_corgies.dm"
+#include "code\modules\admin\secrets\fun_secrets\turn_humans_into_monkeys.dm"
+#include "code\modules\admin\secrets\fun_secrets\waddle.dm"
+#include "code\modules\admin\secrets\investigation\admin_pms.dm"
+#include "code\modules\admin\secrets\investigation\attack_logs.dm"
+#include "code\modules\admin\secrets\random_events\gravity.dm"
+#include "code\modules\admin\secrets\random_events\trigger_cordical_borer_infestation.dm"
+#include "code\modules\admin\secrets\random_events\trigger_xenomorph_infestation.dm"
+#include "code\modules\admin\verbs\adminhelp.dm"
+#include "code\modules\admin\verbs\adminjump.dm"
+#include "code\modules\admin\verbs\adminpm.dm"
+#include "code\modules\admin\verbs\adminsay.dm"
+#include "code\modules\admin\verbs\atmosdebug.dm"
+#include "code\modules\admin\verbs\BrokenInhands.dm"
+#include "code\modules\admin\verbs\check_customitem_activity.dm"
+#include "code\modules\admin\verbs\cinematic.dm"
+#include "code\modules\admin\verbs\custom_event.dm"
+#include "code\modules\admin\verbs\deadsay.dm"
+#include "code\modules\admin\verbs\debug.dm"
+#include "code\modules\admin\verbs\diagnostics.dm"
+#include "code\modules\admin\verbs\dice.dm"
+#include "code\modules\admin\verbs\getlogs.dm"
+#include "code\modules\admin\verbs\grief_fixers.dm"
+#include "code\modules\admin\verbs\map_template_loadverb.dm"
+#include "code\modules\admin\verbs\mapping.dm"
+#include "code\modules\admin\verbs\massmodvar.dm"
+#include "code\modules\admin\verbs\modifyvariables.dm"
+#include "code\modules\admin\verbs\playsound.dm"
+#include "code\modules\admin\verbs\possess.dm"
+#include "code\modules\admin\verbs\pray.dm"
+#include "code\modules\admin\verbs\randomverbs.dm"
+#include "code\modules\admin\verbs\SDQL.dm"
+#include "code\modules\admin\verbs\striketeam.dm"
+#include "code\modules\admin\verbs\ticklag.dm"
+#include "code\modules\admin\verbs\trading_verbs.dm"
+#include "code\modules\admin\verbs\tripAI.dm"
+#include "code\modules\admin\verbs\SDQL_2\SDQL_2.dm"
+#include "code\modules\admin\verbs\SDQL_2\SDQL_2_parser.dm"
+#include "code\modules\admin\verbs\SDQL_2\SDQL_2_std.dm"
+#include "code\modules\admin\view_variables\helpers.dm"
+#include "code\modules\admin\view_variables\topic.dm"
+#include "code\modules\admin\view_variables\view_variables.dm"
+#include "code\modules\admin\view_variables\view_variables_global.dm"
+#include "code\modules\admin\view_variables\vv_set_handlers.dm"
+#include "code\modules\alarm\alarm.dm"
+#include "code\modules\alarm\alarm_handler.dm"
+#include "code\modules\alarm\atmosphere_alarm.dm"
+#include "code\modules\alarm\camera_alarm.dm"
+#include "code\modules\alarm\fire_alarm.dm"
+#include "code\modules\alarm\motion_alarm.dm"
+#include "code\modules\alarm\power_alarm.dm"
+#include "code\modules\aspect\_aspects.dm"
+#include "code\modules\assembly\assembly.dm"
+#include "code\modules\assembly\helpers.dm"
+#include "code\modules\assembly\holder.dm"
+#include "code\modules\assembly\igniter.dm"
+#include "code\modules\assembly\infrared.dm"
+#include "code\modules\assembly\mousetrap.dm"
+#include "code\modules\assembly\proximity.dm"
+#include "code\modules\assembly\shock_kit.dm"
+#include "code\modules\assembly\signaler.dm"
+#include "code\modules\assembly\timer.dm"
+#include "code\modules\assembly\voice.dm"
+#include "code\modules\atmospherics\_atmos_setup.dm"
+#include "code\modules\atmospherics\atmos_primitives.dm"
+#include "code\modules\atmospherics\atmospherics.dm"
+#include "code\modules\atmospherics\datum_pipe_network.dm"
+#include "code\modules\atmospherics\datum_pipeline.dm"
+#include "code\modules\atmospherics\he_pipes.dm"
+#include "code\modules\atmospherics\mainspipe.dm"
+#include "code\modules\atmospherics\pipes.dm"
+#include "code\modules\atmospherics\components\portables_connector.dm"
+#include "code\modules\atmospherics\components\shutoff.dm"
+#include "code\modules\atmospherics\components\tvalve.dm"
+#include "code\modules\atmospherics\components\valve.dm"
+#include "code\modules\atmospherics\components\binary_devices\binary_atmos_base.dm"
+#include "code\modules\atmospherics\components\binary_devices\circulator.dm"
+#include "code\modules\atmospherics\components\binary_devices\dp_vent_pump.dm"
+#include "code\modules\atmospherics\components\binary_devices\oxyregenerator.dm"
+#include "code\modules\atmospherics\components\binary_devices\passive_gate.dm"
+#include "code\modules\atmospherics\components\binary_devices\pipeturbine.dm"
+#include "code\modules\atmospherics\components\binary_devices\pump.dm"
+#include "code\modules\atmospherics\components\binary_devices\volume_pump.dm"
+#include "code\modules\atmospherics\components\omni_devices\_omni_extras.dm"
+#include "code\modules\atmospherics\components\omni_devices\filter.dm"
+#include "code\modules\atmospherics\components\omni_devices\mixer.dm"
+#include "code\modules\atmospherics\components\omni_devices\omni_base.dm"
+#include "code\modules\atmospherics\components\trinary_devices\filter.dm"
+#include "code\modules\atmospherics\components\trinary_devices\mixer.dm"
+#include "code\modules\atmospherics\components\trinary_devices\trinary_base.dm"
+#include "code\modules\atmospherics\components\unary\cold_sink.dm"
+#include "code\modules\atmospherics\components\unary\generator_input.dm"
+#include "code\modules\atmospherics\components\unary\heat_exchanger.dm"
+#include "code\modules\atmospherics\components\unary\heat_source.dm"
+#include "code\modules\atmospherics\components\unary\outlet_injector.dm"
+#include "code\modules\atmospherics\components\unary\oxygen_generator.dm"
+#include "code\modules\atmospherics\components\unary\thermal_plate.dm"
+#include "code\modules\atmospherics\components\unary\unary_base.dm"
+#include "code\modules\atmospherics\components\unary\vent_pump.dm"
+#include "code\modules\atmospherics\components\unary\vent_scrubber.dm"
+#include "code\modules\awaymissions\bluespaceartillery.dm"
+#include "code\modules\awaymissions\corpse.dm"
+#include "code\modules\awaymissions\exile.dm"
+#include "code\modules\awaymissions\gateway.dm"
+#include "code\modules\awaymissions\loot.dm"
+#include "code\modules\awaymissions\pamphlet.dm"
+#include "code\modules\awaymissions\trigger.dm"
+#include "code\modules\awaymissions\zlevel.dm"
+#include "code\modules\blob\blob.dm"
+#include "code\modules\client\asset_cache.dm"
+#include "code\modules\client\client_defines.dm"
+#include "code\modules\client\client_helpers.dm"
+#include "code\modules\client\client_procs.dm"
+#include "code\modules\client\darkmode.dm"
+#include "code\modules\client\movement.dm"
+#include "code\modules\client\preferences.dm"
+#include "code\modules\client\preferences_savefile.dm"
+#include "code\modules\client\preferences_spawnpoints.dm"
+#include "code\modules\client\preferences_toggle.dm"
+#include "code\modules\client\ui_style.dm"
+#include "code\modules\client\preference_setup\_defines.dm"
+#include "code\modules\client\preference_setup\preference_setup.dm"
+#include "code\modules\client\preference_setup\antagonism\01_candidacy.dm"
+#include "code\modules\client\preference_setup\antagonism\02_setup.dm"
+#include "code\modules\client\preference_setup\general\01_basic.dm"
+#include "code\modules\client\preference_setup\general\03_body.dm"
+#include "code\modules\client\preference_setup\general\04_equipment.dm"
+#include "code\modules\client\preference_setup\global\01_ui.dm"
+#include "code\modules\client\preference_setup\global\02_prefixes.dm"
+#include "code\modules\client\preference_setup\global\03_pai.dm"
+#include "code\modules\client\preference_setup\global\04_ooc.dm"
+#include "code\modules\client\preference_setup\global\05_settings.dm"
+#include "code\modules\client\preference_setup\global\preferences.dm"
+#include "code\modules\client\preference_setup\global\prefixes.dm"
+#include "code\modules\client\preference_setup\occupation\occupation.dm"
+#include "code\modules\clothing\chameleon.dm"
+#include "code\modules\clothing\clothing.dm"
+#include "code\modules\clothing\clothing_accessories.dm"
+#include "code\modules\clothing\ears\earrings.dm"
+#include "code\modules\clothing\ears\skrell.dm"
+#include "code\modules\clothing\glasses\glasses.dm"
+#include "code\modules\clothing\glasses\hud.dm"
+#include "code\modules\clothing\gloves\boxing.dm"
+#include "code\modules\clothing\gloves\color.dm"
+#include "code\modules\clothing\gloves\miscellaneous.dm"
+#include "code\modules\clothing\head\collectable.dm"
+#include "code\modules\clothing\head\hardhat.dm"
+#include "code\modules\clothing\head\helmet.dm"
+#include "code\modules\clothing\head\jobs.dm"
+#include "code\modules\clothing\head\mirania.dm"
+#include "code\modules\clothing\head\misc.dm"
+#include "code\modules\clothing\head\misc_special.dm"
+#include "code\modules\clothing\head\soft_caps.dm"
+#include "code\modules\clothing\masks\boxing.dm"
+#include "code\modules\clothing\masks\breath.dm"
+#include "code\modules\clothing\masks\gasmask.dm"
+#include "code\modules\clothing\masks\miscellaneous.dm"
+#include "code\modules\clothing\masks\monitor.dm"
+#include "code\modules\clothing\masks\voice.dm"
+#include "code\modules\clothing\rings\material.dm"
+#include "code\modules\clothing\rings\rings.dm"
+#include "code\modules\clothing\shoes\colour.dm"
+#include "code\modules\clothing\shoes\jobs.dm"
+#include "code\modules\clothing\shoes\magboots.dm"
+#include "code\modules\clothing\shoes\miscellaneous.dm"
+#include "code\modules\clothing\spacesuits\alien.dm"
+#include "code\modules\clothing\spacesuits\breaches.dm"
+#include "code\modules\clothing\spacesuits\captain.dm"
+#include "code\modules\clothing\spacesuits\miscellaneous.dm"
+#include "code\modules\clothing\spacesuits\spacesuits.dm"
+#include "code\modules\clothing\spacesuits\syndi.dm"
+#include "code\modules\clothing\spacesuits\void\bogani.dm"
+#include "code\modules\clothing\spacesuits\void\merc.dm"
+#include "code\modules\clothing\spacesuits\void\misc.dm"
+#include "code\modules\clothing\spacesuits\void\station.dm"
+#include "code\modules\clothing\spacesuits\void\void.dm"
+#include "code\modules\clothing\spacesuits\void\wizard.dm"
+#include "code\modules\clothing\suits\alien.dm"
+#include "code\modules\clothing\suits\armor.dm"
+#include "code\modules\clothing\suits\bio.dm"
+#include "code\modules\clothing\suits\jobs.dm"
+#include "code\modules\clothing\suits\labcoat.dm"
+#include "code\modules\clothing\suits\mirania.dm"
+#include "code\modules\clothing\suits\miscellaneous.dm"
+#include "code\modules\clothing\suits\storage.dm"
+#include "code\modules\clothing\suits\toggles.dm"
+#include "code\modules\clothing\suits\utility.dm"
+#include "code\modules\clothing\suits\wiz_robe.dm"
+#include "code\modules\clothing\under\casual_pants.dm"
+#include "code\modules\clothing\under\color.dm"
+#include "code\modules\clothing\under\formal_pants.dm"
+#include "code\modules\clothing\under\mirania.dm"
+#include "code\modules\clothing\under\miscellaneous.dm"
+#include "code\modules\clothing\under\nanotrasen.dm"
+#include "code\modules\clothing\under\shorts.dm"
+#include "code\modules\clothing\under\skirts.dm"
+#include "code\modules\clothing\under\syndicate.dm"
+#include "code\modules\clothing\under\accessories\accessory.dm"
+#include "code\modules\clothing\under\accessories\armband.dm"
+#include "code\modules\clothing\under\accessories\armor.dm"
+#include "code\modules\clothing\under\accessories\badges.dm"
+#include "code\modules\clothing\under\accessories\clothing.dm"
+#include "code\modules\clothing\under\accessories\holster.dm"
+#include "code\modules\clothing\under\accessories\jammers.dm"
+#include "code\modules\clothing\under\accessories\lockets.dm"
+#include "code\modules\clothing\under\accessories\medals.dm"
+#include "code\modules\clothing\under\accessories\stethoscope.dm"
+#include "code\modules\clothing\under\accessories\storage.dm"
+#include "code\modules\clothing\under\accessories\ties.dm"
+#include "code\modules\clothing\under\jobs\civilian.dm"
+#include "code\modules\clothing\under\jobs\engineering.dm"
+#include "code\modules\clothing\under\jobs\medsci.dm"
+#include "code\modules\clothing\under\jobs\security.dm"
+#include "code\modules\clothing\under\xenos\bogani.dm"
+#include "code\modules\clothing\underwear\base.dm"
+#include "code\modules\component\component.dm"
+#include "code\modules\crafting\crafting.dm"
+#include "code\modules\crafting\parts\lathe_items.dm"
+#include "code\modules\crafting\recipes\guns.dm"
+#include "code\modules\crafting\recipes\items.dm"
+#include "code\modules\crafting\recipes\structures.dm"
+#include "code\modules\crafting\recipes\tools.dm"
+#include "code\modules\customitems\item_spawning.dm"
+#include "code\modules\detectivework\footprints.dm"
+#include "code\modules\detectivework\forensics.dm"
+#include "code\modules\detectivework\microscope\dnascanner.dm"
+#include "code\modules\detectivework\microscope\microscope.dm"
+#include "code\modules\detectivework\tools\crimekit.dm"
+#include "code\modules\detectivework\tools\evidencebag.dm"
+#include "code\modules\detectivework\tools\luminol.dm"
+#include "code\modules\detectivework\tools\rag.dm"
+#include "code\modules\detectivework\tools\sample_kits.dm"
+#include "code\modules\detectivework\tools\storage.dm"
+#include "code\modules\detectivework\tools\swabs.dm"
+#include "code\modules\detectivework\tools\uvlight.dm"
+#include "code\modules\economy\Accounts.dm"
+#include "code\modules\economy\Accounts_DB.dm"
+#include "code\modules\economy\ATM.dm"
+#include "code\modules\economy\cash.dm"
+#include "code\modules\economy\economy_misc.dm"
+#include "code\modules\economy\EFTPOS.dm"
+#include "code\modules\economy\Events.dm"
+#include "code\modules\economy\Events_Mundane.dm"
+#include "code\modules\economy\TradeDestinations.dm"
+#include "code\modules\emoji\emoji_parse.dm"
+#include "code\modules\emotes\emote_define.dm"
+#include "code\modules\emotes\emote_mob.dm"
+#include "code\modules\emotes\definitions\_mob.dm"
+#include "code\modules\emotes\definitions\_species.dm"
+#include "code\modules\emotes\definitions\audible.dm"
+#include "code\modules\emotes\definitions\human.dm"
+#include "code\modules\emotes\definitions\slime.dm"
+#include "code\modules\emotes\definitions\synthetics.dm"
+#include "code\modules\emotes\definitions\visible.dm"
+#include "code\modules\error_handler\error_handler.dm"
+#include "code\modules\error_handler\error_reporting.dm"
+#include "code\modules\error_handler\error_viewer.dm"
+#include "code\modules\events\apc_damage.dm"
+#include "code\modules\events\blob.dm"
+#include "code\modules\events\brand_intelligence.dm"
+#include "code\modules\events\camera_damage.dm"
+#include "code\modules\events\carp_migration.dm"
+#include "code\modules\events\comms_blackout.dm"
+#include "code\modules\events\communications_blackout.dm"
+#include "code\modules\events\dust.dm"
+#include "code\modules\events\electrical_storm.dm"
+#include "code\modules\events\event.dm"
+#include "code\modules\events\event_container.dm"
+#include "code\modules\events\event_dynamic.dm"
+#include "code\modules\events\event_manager.dm"
+#include "code\modules\events\gravity.dm"
+#include "code\modules\events\grid_check.dm"
+#include "code\modules\events\infestation.dm"
+#include "code\modules\events\invasion.dm"
+#include "code\modules\events\ion_storm.dm"
+#include "code\modules\events\meteors.dm"
+#include "code\modules\events\money_hacker.dm"
+#include "code\modules\events\money_lotto.dm"
+#include "code\modules\events\mortars.dm"
+#include "code\modules\events\prison_break.dm"
+#include "code\modules\events\radiation_storm.dm"
+#include "code\modules\events\random_antagonist.dm"
+#include "code\modules\events\rogue_drones.dm"
+#include "code\modules\events\sensor_suit_jamming.dm"
+#include "code\modules\events\shipping_error.dm"
+#include "code\modules\events\solar_storm.dm"
+#include "code\modules\events\space_cold.dm"
+#include "code\modules\events\spacevine.dm"
+#include "code\modules\events\spider_infestation.dm"
+#include "code\modules\events\spontaneous_appendicitis.dm"
+#include "code\modules\events\wallrot.dm"
+#include "code\modules\events\zombies.dm"
+#include "code\modules\examine\examine.dm"
+#include "code\modules\examine\stat_icons.dm"
+#include "code\modules\examine\descriptions\armor.dm"
+#include "code\modules\examine\descriptions\atmospherics.dm"
+#include "code\modules\examine\descriptions\drink_containers.dm"
+#include "code\modules\examine\descriptions\engineering.dm"
+#include "code\modules\examine\descriptions\machinery.dm"
+#include "code\modules\examine\descriptions\medical.dm"
+#include "code\modules\examine\descriptions\mobs.dm"
+#include "code\modules\examine\descriptions\paperwork.dm"
+#include "code\modules\examine\descriptions\smokeables.dm"
+#include "code\modules\examine\descriptions\stacks.dm"
+#include "code\modules\examine\descriptions\structures.dm"
+#include "code\modules\examine\descriptions\turfs.dm"
+#include "code\modules\examine\descriptions\weapons.dm"
+#include "code\modules\ext_scripts\irc.dm"
+#include "code\modules\fire_lighting\torches.dm"
+#include "code\modules\flufftext\Dreaming.dm"
+#include "code\modules\flufftext\TextFilters.dm"
+#include "code\modules\food\recipes_microwave.dm"
+#include "code\modules\food\replicator.dm"
+#include "code\modules\games\boardgame.dm"
+#include "code\modules\games\cardemon.dm"
+#include "code\modules\games\cards.dm"
+#include "code\modules\games\tarot.dm"
+#include "code\modules\genetics\side_effects.dm"
+#include "code\modules\ghosttrap\trap.dm"
+#include "code\modules\goonchat\assets.dm"
+#include "code\modules\goonchat\browserOutput.dm"
+#include "code\modules\goonchat\helpers.dm"
+#include "code\modules\holodeck\HolodeckControl.dm"
+#include "code\modules\holodeck\HolodeckObjects.dm"
+#include "code\modules\holodeck\HolodeckPrograms.dm"
+#include "code\modules\hydroponics\_hydro_setup.dm"
+#include "code\modules\hydroponics\grown.dm"
+#include "code\modules\hydroponics\grown_inedible.dm"
+#include "code\modules\hydroponics\grown_predefined.dm"
+#include "code\modules\hydroponics\seed.dm"
+#include "code\modules\hydroponics\seed_controller.dm"
+#include "code\modules\hydroponics\seed_datums.dm"
+#include "code\modules\hydroponics\seed_gene_mut.dm"
+#include "code\modules\hydroponics\seed_machines.dm"
+#include "code\modules\hydroponics\seed_mobs.dm"
+#include "code\modules\hydroponics\seed_packets.dm"
+#include "code\modules\hydroponics\seed_storage.dm"
+#include "code\modules\hydroponics\spreading\spreading.dm"
+#include "code\modules\hydroponics\spreading\spreading_growth.dm"
+#include "code\modules\hydroponics\spreading\spreading_response.dm"
+#include "code\modules\hydroponics\trays\tray.dm"
+#include "code\modules\hydroponics\trays\tray_process.dm"
+#include "code\modules\hydroponics\trays\tray_reagents.dm"
+#include "code\modules\hydroponics\trays\tray_soil.dm"
+#include "code\modules\hydroponics\trays\tray_tools.dm"
+#include "code\modules\hydroponics\trays\tray_update_icons.dm"
+#include "code\modules\integrated_electronics\_defines.dm"
+#include "code\modules\integrated_electronics\arithmetic.dm"
+#include "code\modules\integrated_electronics\assemblies.dm"
+#include "code\modules\integrated_electronics\converters.dm"
+#include "code\modules\integrated_electronics\coordinate.dm"
+#include "code\modules\integrated_electronics\data_transfer.dm"
+#include "code\modules\integrated_electronics\filters.dm"
+#include "code\modules\integrated_electronics\input_output.dm"
+#include "code\modules\integrated_electronics\logic.dm"
+#include "code\modules\integrated_electronics\machine_printer.dm"
+#include "code\modules\integrated_electronics\manipulation.dm"
+#include "code\modules\integrated_electronics\memory.dm"
+#include "code\modules\integrated_electronics\sensors.dm"
+#include "code\modules\integrated_electronics\shells.dm"
+#include "code\modules\integrated_electronics\time.dm"
+#include "code\modules\integrated_electronics\tools.dm"
+#include "code\modules\integrated_electronics\~defines.dm"
+#include "code\modules\integrated_electronics\prefab\prefab.dm"
+#include "code\modules\integrated_electronics\prefab\prefabs.dm"
+#include "code\modules\item_worth\_helpers.dm"
+#include "code\modules\item_worth\item_worth.dm"
+#include "code\modules\item_worth\material_weapons.dm"
+#include "code\modules\item_worth\materials.dm"
+#include "code\modules\item_worth\reagents.dm"
+#include "code\modules\item_worth\worths_list.dm"
+#include "code\modules\item_worth\Value_procs\atoms.dm"
+#include "code\modules\item_worth\Value_procs\mob.dm"
+#include "code\modules\item_worth\Value_procs\obj.dm"
+#include "code\modules\item_worth\Value_procs\obj\items.dm"
+#include "code\modules\item_worth\Value_procs\obj\machinery.dm"
+#include "code\modules\item_worth\Value_procs\obj\structures.dm"
+#include "code\modules\library\lib_items.dm"
+#include "code\modules\library\lib_machines.dm"
+#include "code\modules\library\lib_readme.dm"
+#include "code\modules\library\manuals\engineering.dm"
+#include "code\modules\library\manuals\manuals.dm"
+#include "code\modules\library\manuals\medical.dm"
+#include "code\modules\library\manuals\nanotrasen.dm"
+#include "code\modules\lighting\lighting_area.dm"
+#include "code\modules\lighting\lighting_atom.dm"
+#include "code\modules\lighting\lighting_corner.dm"
+#include "code\modules\lighting\lighting_overlay.dm"
+#include "code\modules\lighting\lighting_setup.dm"
+#include "code\modules\lighting\lighting_source.dm"
+#include "code\modules\lighting\lighting_turf.dm"
+#include "code\modules\lighting\~lighting_undefs.dm"
+#include "code\modules\lobby_music\_licenses.dm"
+#include "code\modules\lobby_music\_lobby_music.dm"
+#include "code\modules\locks\key.dm"
+#include "code\modules\locks\lock.dm"
+#include "code\modules\locks\lock_construct.dm"
+#include "code\modules\maps\dmm_suite.dm"
+#include "code\modules\maps\map_template.dm"
+#include "code\modules\maps\reader.dm"
+#include "code\modules\maps\ruins.dm"
+#include "code\modules\maps\swapmaps.dm"
+#include "code\modules\materials\material_recipes.dm"
+#include "code\modules\materials\material_sheets.dm"
+#include "code\modules\materials\material_synth.dm"
+#include "code\modules\materials\materials.dm"
+#include "code\modules\merchant\merchant_guns.dm"
+#include "code\modules\merchant\merchant_machinery.dm"
+#include "code\modules\merchant\merchant_programs.dm"
+#include "code\modules\mining\abandonedcrates.dm"
+#include "code\modules\mining\alloys.dm"
+#include "code\modules\mining\coins.dm"
+#include "code\modules\mining\machine_input_output_plates.dm"
+#include "code\modules\mining\machine_processing.dm"
+#include "code\modules\mining\machine_stacking.dm"
+#include "code\modules\mining\machine_unloading.dm"
+#include "code\modules\mining\mine_items.dm"
+#include "code\modules\mining\mine_turfs.dm"
+#include "code\modules\mining\mint.dm"
+#include "code\modules\mining\ore.dm"
+#include "code\modules\mining\ore_datum.dm"
+#include "code\modules\mining\satchel_ore_boxdm.dm"
+#include "code\modules\mining\drilling\drill.dm"
+#include "code\modules\mining\drilling\scanner.dm"
+#include "code\modules\mob\animations.dm"
+#include "code\modules\mob\datum_stats_skills.dm"
+#include "code\modules\mob\death.dm"
+#include "code\modules\mob\gender.dm"
+#include "code\modules\mob\hear_say.dm"
+#include "code\modules\mob\holder.dm"
+#include "code\modules\mob\inventory.dm"
+#include "code\modules\mob\login.dm"
+#include "code\modules\mob\logout.dm"
+#include "code\modules\mob\mob.dm"
+#include "code\modules\mob\mob_defines.dm"
+#include "code\modules\mob\mob_helpers.dm"
+#include "code\modules\mob\mob_movement.dm"
+#include "code\modules\mob\mob_transformation_simple.dm"
+#include "code\modules\mob\say.dm"
+#include "code\modules\mob\shit_piss.dm"
+#include "code\modules\mob\transform_procs.dm"
+#include "code\modules\mob\typing_indicator.dm"
+#include "code\modules\mob\update_icons.dm"
+#include "code\modules\mob\grab\grab_datum.dm"
+#include "code\modules\mob\grab\grab_object.dm"
+#include "code\modules\mob\grab\grab_readme.dm"
+#include "code\modules\mob\grab\nab\grab_nab.dm"
+#include "code\modules\mob\grab\nab\nab_aggressive.dm"
+#include "code\modules\mob\grab\nab\nab_kill.dm"
+#include "code\modules\mob\grab\nab\nab_passive.dm"
+#include "code\modules\mob\grab\normal\grab_normal.dm"
+#include "code\modules\mob\grab\normal\norm_aggressive.dm"
+#include "code\modules\mob\grab\normal\norm_kill.dm"
+#include "code\modules\mob\grab\normal\norm_neck.dm"
+#include "code\modules\mob\grab\normal\norm_passive.dm"
+#include "code\modules\mob\grab\normal\norm_struggle.dm"
+#include "code\modules\mob\grab\special\grab_special.dm"
+#include "code\modules\mob\language\generic.dm"
+#include "code\modules\mob\language\language.dm"
+#include "code\modules\mob\language\monkey.dm"
+#include "code\modules\mob\language\synthetic.dm"
+#include "code\modules\mob\living\damage_procs.dm"
+#include "code\modules\mob\living\death.dm"
+#include "code\modules\mob\living\default_language.dm"
+#include "code\modules\mob\living\floating_say.dm"
+#include "code\modules\mob\living\life.dm"
+#include "code\modules\mob\living\living.dm"
+#include "code\modules\mob\living\living_defense.dm"
+#include "code\modules\mob\living\living_defines.dm"
+#include "code\modules\mob\living\living_powers.dm"
+#include "code\modules\mob\living\login.dm"
+#include "code\modules\mob\living\logout.dm"
+#include "code\modules\mob\living\say.dm"
+#include "code\modules\mob\living\bot\bot.dm"
+#include "code\modules\mob\living\bot\cleanbot.dm"
+#include "code\modules\mob\living\bot\ed209bot.dm"
+#include "code\modules\mob\living\bot\farmbot.dm"
+#include "code\modules\mob\living\bot\floorbot.dm"
+#include "code\modules\mob\living\bot\medbot.dm"
+#include "code\modules\mob\living\bot\mulebot.dm"
+#include "code\modules\mob\living\bot\remotebot.dm"
+#include "code\modules\mob\living\bot\secbot.dm"
+#include "code\modules\mob\living\carbon\breathe.dm"
+#include "code\modules\mob\living\carbon\carbon.dm"
+#include "code\modules\mob\living\carbon\carbon_defense.dm"
+#include "code\modules\mob\living\carbon\carbon_defines.dm"
+#include "code\modules\mob\living\carbon\carbon_needs.dm"
+#include "code\modules\mob\living\carbon\carbon_powers.dm"
+#include "code\modules\mob\living\carbon\give.dm"
+#include "code\modules\mob\living\carbon\hallucinations.dm"
+#include "code\modules\mob\living\carbon\happiness_events.dm"
+#include "code\modules\mob\living\carbon\life.dm"
+#include "code\modules\mob\living\carbon\resist.dm"
+#include "code\modules\mob\living\carbon\taste.dm"
+#include "code\modules\mob\living\carbon\viruses.dm"
+#include "code\modules\mob\living\carbon\brain\brain.dm"
+#include "code\modules\mob\living\carbon\brain\death.dm"
+#include "code\modules\mob\living\carbon\brain\life.dm"
+#include "code\modules\mob\living\carbon\brain\login.dm"
+#include "code\modules\mob\living\carbon\brain\MMI.dm"
+#include "code\modules\mob\living\carbon\brain\robot.dm"
+#include "code\modules\mob\living\carbon\brain\say.dm"
+#include "code\modules\mob\living\carbon\human\appearance.dm"
+#include "code\modules\mob\living\carbon\human\audible_emotes.dm"
+#include "code\modules\mob\living\carbon\human\death.dm"
+#include "code\modules\mob\living\carbon\human\emotions.dm"
+#include "code\modules\mob\living\carbon\human\examine.dm"
+#include "code\modules\mob\living\carbon\human\human.dm"
+#include "code\modules\mob\living\carbon\human\human_attackhand.dm"
+#include "code\modules\mob\living\carbon\human\human_damage.dm"
+#include "code\modules\mob\living\carbon\human\human_defense.dm"
+#include "code\modules\mob\living\carbon\human\human_defines.dm"
+#include "code\modules\mob\living\carbon\human\human_helpers.dm"
+#include "code\modules\mob\living\carbon\human\human_movement.dm"
+#include "code\modules\mob\living\carbon\human\human_organs.dm"
+#include "code\modules\mob\living\carbon\human\human_powers.dm"
+#include "code\modules\mob\living\carbon\human\human_species.dm"
+#include "code\modules\mob\living\carbon\human\inventory.dm"
+#include "code\modules\mob\living\carbon\human\life.dm"
+#include "code\modules\mob\living\carbon\human\login.dm"
+#include "code\modules\mob\living\carbon\human\logout.dm"
+#include "code\modules\mob\living\carbon\human\matt_combat.dm"
+#include "code\modules\mob\living\carbon\human\MedicalSideEffects.dm"
+#include "code\modules\mob\living\carbon\human\npcs.dm"
+#include "code\modules\mob\living\carbon\human\say.dm"
+#include "code\modules\mob\living\carbon\human\stripping.dm"
+#include "code\modules\mob\living\carbon\human\unarmed_attack.dm"
+#include "code\modules\mob\living\carbon\human\update_icons.dm"
+#include "code\modules\mob\living\carbon\human\vision_cone.dm"
+#include "code\modules\mob\living\carbon\human\weight.dm"
+#include "code\modules\mob\living\carbon\human\whisper.dm"
+#include "code\modules\mob\living\carbon\human\species\species.dm"
+#include "code\modules\mob\living\carbon\human\species\species_attack.dm"
+#include "code\modules\mob\living\carbon\human\species\species_getters.dm"
+#include "code\modules\mob\living\carbon\human\species\species_helpers.dm"
+#include "code\modules\mob\living\carbon\human\species\species_hud.dm"
+#include "code\modules\mob\living\carbon\human\species\species_random.dm"
+#include "code\modules\mob\living\carbon\human\species\station\children.dm"
+#include "code\modules\mob\living\carbon\human\species\station\monkey.dm"
+#include "code\modules\mob\living\carbon\human\species\station\station.dm"
+#include "code\modules\mob\living\carbon\xenobiological\death.dm"
+#include "code\modules\mob\living\carbon\xenobiological\examine.dm"
+#include "code\modules\mob\living\carbon\xenobiological\hud.dm"
+#include "code\modules\mob\living\carbon\xenobiological\items.dm"
+#include "code\modules\mob\living\carbon\xenobiological\life.dm"
+#include "code\modules\mob\living\carbon\xenobiological\powers.dm"
+#include "code\modules\mob\living\carbon\xenobiological\say.dm"
+#include "code\modules\mob\living\carbon\xenobiological\slime_AI.dm"
+#include "code\modules\mob\living\carbon\xenobiological\subtypes.dm"
+#include "code\modules\mob\living\carbon\xenobiological\update_icons.dm"
+#include "code\modules\mob\living\carbon\xenobiological\xenobiological.dm"
+#include "code\modules\mob\living\silicon\death.dm"
+#include "code\modules\mob\living\silicon\laws.dm"
+#include "code\modules\mob\living\silicon\login.dm"
+#include "code\modules\mob\living\silicon\posi_brainmob.dm"
+#include "code\modules\mob\living\silicon\say.dm"
+#include "code\modules\mob\living\silicon\silicon.dm"
+#include "code\modules\mob\living\silicon\subsystems.dm"
+#include "code\modules\mob\living\silicon\ai\ai.dm"
+#include "code\modules\mob\living\silicon\ai\ai_damage.dm"
+#include "code\modules\mob\living\silicon\ai\ai_movement.dm"
+#include "code\modules\mob\living\silicon\ai\death.dm"
+#include "code\modules\mob\living\silicon\ai\examine.dm"
+#include "code\modules\mob\living\silicon\ai\icons.dm"
+#include "code\modules\mob\living\silicon\ai\latejoin.dm"
+#include "code\modules\mob\living\silicon\ai\laws.dm"
+#include "code\modules\mob\living\silicon\ai\life.dm"
+#include "code\modules\mob\living\silicon\ai\login.dm"
+#include "code\modules\mob\living\silicon\ai\logout.dm"
+#include "code\modules\mob\living\silicon\ai\malf.dm"
+#include "code\modules\mob\living\silicon\ai\power.dm"
+#include "code\modules\mob\living\silicon\decoy\death.dm"
+#include "code\modules\mob\living\silicon\decoy\decoy.dm"
+#include "code\modules\mob\living\silicon\decoy\life.dm"
+#include "code\modules\mob\living\silicon\pai\admin.dm"
+#include "code\modules\mob\living\silicon\pai\death.dm"
+#include "code\modules\mob\living\silicon\pai\examine.dm"
+#include "code\modules\mob\living\silicon\pai\life.dm"
+#include "code\modules\mob\living\silicon\pai\pai.dm"
+#include "code\modules\mob\living\silicon\pai\paiwire.dm"
+#include "code\modules\mob\living\silicon\pai\personality.dm"
+#include "code\modules\mob\living\silicon\pai\recruit.dm"
+#include "code\modules\mob\living\silicon\pai\say.dm"
+#include "code\modules\mob\living\silicon\pai\software.dm"
+#include "code\modules\mob\living\silicon\pai\software_modules.dm"
+#include "code\modules\mob\living\silicon\robot\analyzer.dm"
+#include "code\modules\mob\living\silicon\robot\component.dm"
+#include "code\modules\mob\living\silicon\robot\custom_sprites.dm"
+#include "code\modules\mob\living\silicon\robot\death.dm"
+#include "code\modules\mob\living\silicon\robot\examine.dm"
+#include "code\modules\mob\living\silicon\robot\inventory.dm"
+#include "code\modules\mob\living\silicon\robot\laws.dm"
+#include "code\modules\mob\living\silicon\robot\life.dm"
+#include "code\modules\mob\living\silicon\robot\login.dm"
+#include "code\modules\mob\living\silicon\robot\photos.dm"
+#include "code\modules\mob\living\silicon\robot\preset.dm"
+#include "code\modules\mob\living\silicon\robot\robot.dm"
+#include "code\modules\mob\living\silicon\robot\robot_damage.dm"
+#include "code\modules\mob\living\silicon\robot\robot_items.dm"
+#include "code\modules\mob\living\silicon\robot\robot_modules.dm"
+#include "code\modules\mob\living\silicon\robot\robot_movement.dm"
+#include "code\modules\mob\living\silicon\robot\drone\drone.dm"
+#include "code\modules\mob\living\silicon\robot\drone\drone_abilities.dm"
+#include "code\modules\mob\living\silicon\robot\drone\drone_console.dm"
+#include "code\modules\mob\living\silicon\robot\drone\drone_damage.dm"
+#include "code\modules\mob\living\silicon\robot\drone\drone_items.dm"
+#include "code\modules\mob\living\silicon\robot\drone\drone_manufacturer.dm"
+#include "code\modules\mob\living\silicon\robot\drone\drone_remote_control.dm"
+#include "code\modules\mob\living\silicon\robot\drone\drone_say.dm"
+#include "code\modules\mob\living\simple_animal\parrot.dm"
+#include "code\modules\mob\living\simple_animal\shade.dm"
+#include "code\modules\mob\living\simple_animal\shafra.dm"
+#include "code\modules\mob\living\simple_animal\simple_animal.dm"
+#include "code\modules\mob\living\simple_animal\worm.dm"
+#include "code\modules\mob\living\simple_animal\borer\borer.dm"
+#include "code\modules\mob\living\simple_animal\borer\borer_captive.dm"
+#include "code\modules\mob\living\simple_animal\borer\borer_powers.dm"
+#include "code\modules\mob\living\simple_animal\borer\say.dm"
+#include "code\modules\mob\living\simple_animal\constructs\constructs.dm"
+#include "code\modules\mob\living\simple_animal\constructs\soulstone.dm"
+#include "code\modules\mob\living\simple_animal\familiars\familiars.dm"
+#include "code\modules\mob\living\simple_animal\friendly\cat.dm"
+#include "code\modules\mob\living\simple_animal\friendly\corgi.dm"
+#include "code\modules\mob\living\simple_animal\friendly\crab.dm"
+#include "code\modules\mob\living\simple_animal\friendly\farm_animals.dm"
+#include "code\modules\mob\living\simple_animal\friendly\lizard.dm"
+#include "code\modules\mob\living\simple_animal\friendly\mouse.dm"
+#include "code\modules\mob\living\simple_animal\friendly\mushroom.dm"
+#include "code\modules\mob\living\simple_animal\friendly\slime.dm"
+#include "code\modules\mob\living\simple_animal\friendly\spiderbot.dm"
+#include "code\modules\mob\living\simple_animal\friendly\tomato.dm"
+#include "code\modules\mob\living\simple_animal\hostile\alien.dm"
+#include "code\modules\mob\living\simple_animal\hostile\armalis.dm"
+#include "code\modules\mob\living\simple_animal\hostile\bat.dm"
+#include "code\modules\mob\living\simple_animal\hostile\bear.dm"
+#include "code\modules\mob\living\simple_animal\hostile\carp.dm"
+#include "code\modules\mob\living\simple_animal\hostile\creature.dm"
+#include "code\modules\mob\living\simple_animal\hostile\faithful_hound.dm"
+#include "code\modules\mob\living\simple_animal\hostile\faithless.dm"
+#include "code\modules\mob\living\simple_animal\hostile\giant_spider.dm"
+#include "code\modules\mob\living\simple_animal\hostile\hivebot.dm"
+#include "code\modules\mob\living\simple_animal\hostile\hostile.dm"
+#include "code\modules\mob\living\simple_animal\hostile\mimic.dm"
+#include "code\modules\mob\living\simple_animal\hostile\mining.dm"
+#include "code\modules\mob\living\simple_animal\hostile\pike.dm"
+#include "code\modules\mob\living\simple_animal\hostile\pirate.dm"
+#include "code\modules\mob\living\simple_animal\hostile\russian.dm"
+#include "code\modules\mob\living\simple_animal\hostile\syndicate.dm"
+#include "code\modules\mob\living\simple_animal\hostile\tree.dm"
+#include "code\modules\mob\living\simple_animal\hostile\vagrant.dm"
+#include "code\modules\mob\living\simple_animal\hostile\voxslug.dm"
+#include "code\modules\mob\living\simple_animal\hostile\commanded\_command_defines.dm"
+#include "code\modules\mob\living\simple_animal\hostile\commanded\bear_companion.dm"
+#include "code\modules\mob\living\simple_animal\hostile\commanded\commanded.dm"
+#include "code\modules\mob\living\simple_animal\hostile\commanded\nanomachines.dm"
+#include "code\modules\mob\living\simple_animal\hostile\retaliate\clown.dm"
+#include "code\modules\mob\living\simple_animal\hostile\retaliate\drone.dm"
+#include "code\modules\mob\living\simple_animal\hostile\retaliate\exoplanet.dm"
+#include "code\modules\mob\living\simple_animal\hostile\retaliate\rat.dm"
+#include "code\modules\mob\living\simple_animal\hostile\retaliate\retaliate.dm"
+#include "code\modules\mob\living\simple_animal\hostile\retaliate\roach.dm"
+#include "code\modules\mob\new_player\login.dm"
+#include "code\modules\mob\new_player\logout.dm"
+#include "code\modules\mob\new_player\new_player.dm"
+#include "code\modules\mob\new_player\poll.dm"
+#include "code\modules\mob\new_player\preferences_setup.dm"
+#include "code\modules\mob\new_player\sprite_accessories.dm"
+#include "code\modules\mob\observer\observer.dm"
+#include "code\modules\mob\observer\freelook\chunk.dm"
+#include "code\modules\mob\observer\freelook\eye.dm"
+#include "code\modules\mob\observer\freelook\life.dm"
+#include "code\modules\mob\observer\freelook\logging.dm"
+#include "code\modules\mob\observer\freelook\read_me.dm"
+#include "code\modules\mob\observer\freelook\update_triggers.dm"
+#include "code\modules\mob\observer\freelook\visualnet.dm"
+#include "code\modules\mob\observer\freelook\ai\cameranet.dm"
+#include "code\modules\mob\observer\freelook\ai\chunk.dm"
+#include "code\modules\mob\observer\freelook\ai\eye.dm"
+#include "code\modules\mob\observer\freelook\ai\update_triggers.dm"
+#include "code\modules\mob\observer\ghost\follow.dm"
+#include "code\modules\mob\observer\ghost\ghost.dm"
+#include "code\modules\mob\observer\ghost\login.dm"
+#include "code\modules\mob\observer\ghost\logout.dm"
+#include "code\modules\mob\observer\ghost\say.dm"
+#include "code\modules\mob\observer\virtual\_constants.dm"
+#include "code\modules\mob\observer\virtual\base.dm"
+#include "code\modules\mob\observer\virtual\helpers.dm"
+#include "code\modules\mob\observer\virtual\mob.dm"
+#include "code\modules\modular_computers\laptop_vendor.dm"
+#include "code\modules\modular_computers\computers\modular_computer\core.dm"
+#include "code\modules\modular_computers\computers\modular_computer\damage.dm"
+#include "code\modules\modular_computers\computers\modular_computer\hardware.dm"
+#include "code\modules\modular_computers\computers\modular_computer\interaction.dm"
+#include "code\modules\modular_computers\computers\modular_computer\power.dm"
+#include "code\modules\modular_computers\computers\modular_computer\ui.dm"
+#include "code\modules\modular_computers\computers\modular_computer\variables.dm"
+#include "code\modules\modular_computers\computers\subtypes\dev_console.dm"
+#include "code\modules\modular_computers\computers\subtypes\dev_laptop.dm"
+#include "code\modules\modular_computers\computers\subtypes\dev_tablet.dm"
+#include "code\modules\modular_computers\computers\subtypes\dev_telescreen.dm"
+#include "code\modules\modular_computers\computers\subtypes\preset_console.dm"
+#include "code\modules\modular_computers\computers\subtypes\preset_laptop.dm"
+#include "code\modules\modular_computers\computers\subtypes\preset_tablet.dm"
+#include "code\modules\modular_computers\computers\subtypes\preset_telescreen.dm"
+#include "code\modules\modular_computers\file_system\computer_file.dm"
+#include "code\modules\modular_computers\file_system\crew_record.dm"
+#include "code\modules\modular_computers\file_system\data.dm"
+#include "code\modules\modular_computers\file_system\manifest.dm"
+#include "code\modules\modular_computers\file_system\news_article.dm"
+#include "code\modules\modular_computers\file_system\program.dm"
+#include "code\modules\modular_computers\file_system\program_events.dm"
+#include "code\modules\modular_computers\file_system\programs\antagonist\access_decrypter.dm"
+#include "code\modules\modular_computers\file_system\programs\antagonist\dos.dm"
+#include "code\modules\modular_computers\file_system\programs\antagonist\hacked_camera.dm"
+#include "code\modules\modular_computers\file_system\programs\antagonist\revelation.dm"
+#include "code\modules\modular_computers\file_system\programs\command\card.dm"
+#include "code\modules\modular_computers\file_system\programs\command\comm.dm"
+#include "code\modules\modular_computers\file_system\programs\engineering\alarm_monitor.dm"
+#include "code\modules\modular_computers\file_system\programs\engineering\atmos_control.dm"
+#include "code\modules\modular_computers\file_system\programs\engineering\power_monitor.dm"
+#include "code\modules\modular_computers\file_system\programs\engineering\rcon_console.dm"
+#include "code\modules\modular_computers\file_system\programs\engineering\shields_monitor.dm"
+#include "code\modules\modular_computers\file_system\programs\engineering\supermatter_monitor.dm"
+#include "code\modules\modular_computers\file_system\programs\generic\camera.dm"
+#include "code\modules\modular_computers\file_system\programs\generic\configurator.dm"
+#include "code\modules\modular_computers\file_system\programs\generic\docks.dm"
+#include "code\modules\modular_computers\file_system\programs\generic\email_client.dm"
+#include "code\modules\modular_computers\file_system\programs\generic\file_browser.dm"
+#include "code\modules\modular_computers\file_system\programs\generic\game.dm"
+#include "code\modules\modular_computers\file_system\programs\generic\library.dm"
+#include "code\modules\modular_computers\file_system\programs\generic\news_browser.dm"
+#include "code\modules\modular_computers\file_system\programs\generic\ntdownloader.dm"
+#include "code\modules\modular_computers\file_system\programs\generic\ntnrc_client.dm"
+#include "code\modules\modular_computers\file_system\programs\generic\nttransfer.dm"
+#include "code\modules\modular_computers\file_system\programs\generic\records.dm"
+#include "code\modules\modular_computers\file_system\programs\generic\supply.dm"
+#include "code\modules\modular_computers\file_system\programs\generic\wordprocessor.dm"
+#include "code\modules\modular_computers\file_system\programs\medical\suit_sensors.dm"
+#include "code\modules\modular_computers\file_system\programs\research\ai_restorer.dm"
+#include "code\modules\modular_computers\file_system\programs\research\email_administration.dm"
+#include "code\modules\modular_computers\file_system\programs\research\ntmonitor.dm"
+#include "code\modules\modular_computers\file_system\programs\security\digitalwarrant.dm"
+#include "code\modules\modular_computers\hardware\_hardware.dm"
+#include "code\modules\modular_computers\hardware\ai_slot.dm"
+#include "code\modules\modular_computers\hardware\battery_module.dm"
+#include "code\modules\modular_computers\hardware\card_slot.dm"
+#include "code\modules\modular_computers\hardware\hard_drive.dm"
+#include "code\modules\modular_computers\hardware\nano_printer.dm"
+#include "code\modules\modular_computers\hardware\network_card.dm"
+#include "code\modules\modular_computers\hardware\portable_hard_drive.dm"
+#include "code\modules\modular_computers\hardware\processor_unit.dm"
+#include "code\modules\modular_computers\hardware\tesla_link.dm"
+#include "code\modules\modular_computers\NTNet\NTNet.dm"
+#include "code\modules\modular_computers\NTNet\NTNet_relay.dm"
+#include "code\modules\modular_computers\NTNet\emails\email_account.dm"
+#include "code\modules\modular_computers\NTNet\emails\email_message.dm"
+#include "code\modules\modular_computers\NTNet\NTNRC\conversation.dm"
+#include "code\modules\multiz\_stubs.dm"
+#include "code\modules\multiz\basic.dm"
+#include "code\modules\multiz\movement.dm"
+#include "code\modules\multiz\pipes.dm"
+#include "code\modules\multiz\structures.dm"
+#include "code\modules\multiz\turf.dm"
+#include "code\modules\multiz\zshadow.dm"
+#include "code\modules\nano\nanoexternal.dm"
+#include "code\modules\nano\nanomanager.dm"
+#include "code\modules\nano\nanomapgen.dm"
+#include "code\modules\nano\nanoui.dm"
+#include "code\modules\nano\interaction\admin.dm"
+#include "code\modules\nano\interaction\base.dm"
+#include "code\modules\nano\interaction\conscious.dm"
+#include "code\modules\nano\interaction\contained.dm"
+#include "code\modules\nano\interaction\default.dm"
+#include "code\modules\nano\interaction\hands.dm"
+#include "code\modules\nano\interaction\interactive.dm"
+#include "code\modules\nano\interaction\inventory.dm"
+#include "code\modules\nano\interaction\inventory_deep.dm"
+#include "code\modules\nano\interaction\outside.dm"
+#include "code\modules\nano\interaction\physical.dm"
+#include "code\modules\nano\interaction\remote.dm"
+#include "code\modules\nano\interaction\self.dm"
+#include "code\modules\nano\interaction\zlevel.dm"
+#include "code\modules\nano\modules\human_appearance.dm"
+#include "code\modules\nano\modules\law_manager.dm"
+#include "code\modules\nano\modules\nano_module.dm"
+#include "code\modules\organs\_organ_setup.dm"
+#include "code\modules\organs\blood.dm"
+#include "code\modules\organs\organ.dm"
+#include "code\modules\organs\pain.dm"
+#include "code\modules\organs\robolimbs.dm"
+#include "code\modules\organs\external\_external.dm"
+#include "code\modules\organs\external\_external_damage.dm"
+#include "code\modules\organs\external\_external_icons.dm"
+#include "code\modules\organs\external\head.dm"
+#include "code\modules\organs\external\machine.dm"
+#include "code\modules\organs\external\standard.dm"
+#include "code\modules\organs\external\stump.dm"
+#include "code\modules\organs\external\unbreakable.dm"
+#include "code\modules\organs\external\vox.dm"
+#include "code\modules\organs\external\wounds\wound.dm"
+#include "code\modules\organs\external\wounds\wound_types.dm"
+#include "code\modules\organs\internal\_internal.dm"
+#include "code\modules\organs\internal\appendix.dm"
+#include "code\modules\organs\internal\borer.dm"
+#include "code\modules\organs\internal\brain.dm"
+#include "code\modules\organs\internal\eyes.dm"
+#include "code\modules\organs\internal\heart.dm"
+#include "code\modules\organs\internal\kidneys.dm"
+#include "code\modules\organs\internal\liver.dm"
+#include "code\modules\organs\internal\lungs.dm"
+#include "code\modules\organs\internal\posibrain.dm"
+#include "code\modules\organs\internal\stack.dm"
+#include "code\modules\organs\subtypes\nabber_organ.dm"
+#include "code\modules\overmap\_defines.dm"
+#include "code\modules\overmap\overmap_shuttle.dm"
+#include "code\modules\overmap\sectors.dm"
+#include "code\modules\overmap\spacetravel.dm"
+#include "code\modules\overmap\events\event.dm"
+#include "code\modules\overmap\exoplanets\desert.dm"
+#include "code\modules\overmap\exoplanets\exoplanet.dm"
+#include "code\modules\overmap\exoplanets\garbage.dm"
+#include "code\modules\overmap\exoplanets\grass.dm"
+#include "code\modules\overmap\exoplanets\mountain.dm"
+#include "code\modules\overmap\exoplanets\snow.dm"
+#include "code\modules\overmap\ships\ship.dm"
+#include "code\modules\overmap\ships\computers\engine_control.dm"
+#include "code\modules\overmap\ships\computers\helm.dm"
+#include "code\modules\overmap\ships\computers\sensors.dm"
+#include "code\modules\overmap\ships\computers\shuttle.dm"
+#include "code\modules\overmap\ships\engines\engine.dm"
+#include "code\modules\overmap\ships\engines\gas_thruster.dm"
+#include "code\modules\paperwork\adminpaper.dm"
+#include "code\modules\paperwork\carbonpaper.dm"
+#include "code\modules\paperwork\clipboard.dm"
+#include "code\modules\paperwork\faxmachine.dm"
+#include "code\modules\paperwork\filingcabinet.dm"
+#include "code\modules\paperwork\folders.dm"
+#include "code\modules\paperwork\handlabeler.dm"
+#include "code\modules\paperwork\paper.dm"
+#include "code\modules\paperwork\paper_bundle.dm"
+#include "code\modules\paperwork\paperbin.dm"
+#include "code\modules\paperwork\papershredder.dm"
+#include "code\modules\paperwork\pen.dm"
+#include "code\modules\paperwork\photocopier.dm"
+#include "code\modules\paperwork\photography.dm"
+#include "code\modules\paperwork\silicon_photography.dm"
+#include "code\modules\paperwork\stamps.dm"
+#include "code\modules\placeholder\placeholder.dm"
+#include "code\modules\power\apc.dm"
+#include "code\modules\power\batteryrack.dm"
+#include "code\modules\power\breaker_box.dm"
+#include "code\modules\power\cable.dm"
+#include "code\modules\power\cell.dm"
+#include "code\modules\power\debug_items.dm"
+#include "code\modules\power\generator.dm"
+#include "code\modules\power\gravitygenerator.dm"
+#include "code\modules\power\lighting.dm"
+#include "code\modules\power\port_gen.dm"
+#include "code\modules\power\power.dm"
+#include "code\modules\power\powernet.dm"
+#include "code\modules\power\smes.dm"
+#include "code\modules\power\smes_construction.dm"
+#include "code\modules\power\smes_presets.dm"
+#include "code\modules\power\solar.dm"
+#include "code\modules\power\terminal.dm"
+#include "code\modules\power\tracker.dm"
+#include "code\modules\power\turbine.dm"
+#include "code\modules\power\antimatter\containment_jar.dm"
+#include "code\modules\power\antimatter\control.dm"
+#include "code\modules\power\antimatter\shielding.dm"
+#include "code\modules\power\fusion\_setup.dm"
+#include "code\modules\power\fusion\fusion_circuits.dm"
+#include "code\modules\power\fusion\fusion_particle_catcher.dm"
+#include "code\modules\power\fusion\fusion_reactions.dm"
+#include "code\modules\power\fusion\core\_core.dm"
+#include "code\modules\power\fusion\core\core_control.dm"
+#include "code\modules\power\fusion\core\core_field.dm"
+#include "code\modules\power\fusion\fuel_assembly\fuel_assembly.dm"
+#include "code\modules\power\fusion\fuel_assembly\fuel_compressor.dm"
+#include "code\modules\power\fusion\fuel_assembly\fuel_control.dm"
+#include "code\modules\power\fusion\fuel_assembly\fuel_injector.dm"
+#include "code\modules\power\fusion\gyrotron\gyrotron.dm"
+#include "code\modules\power\fusion\gyrotron\gyrotron_control.dm"
+#include "code\modules\power\sensors\powernet_sensor.dm"
+#include "code\modules\power\sensors\sensor_monitoring.dm"
+#include "code\modules\power\singularity\act.dm"
+#include "code\modules\power\singularity\collector.dm"
+#include "code\modules\power\singularity\containment_field.dm"
+#include "code\modules\power\singularity\emitter.dm"
+#include "code\modules\power\singularity\field_generator.dm"
+#include "code\modules\power\singularity\generator.dm"
+#include "code\modules\power\singularity\singularity.dm"
+#include "code\modules\power\singularity\particle_accelerator\particle.dm"
+#include "code\modules\power\singularity\particle_accelerator\particle_accelerator.dm"
+#include "code\modules\power\singularity\particle_accelerator\particle_chamber.dm"
+#include "code\modules\power\singularity\particle_accelerator\particle_control.dm"
+#include "code\modules\power\singularity\particle_accelerator\particle_emitter.dm"
+#include "code\modules\power\singularity\particle_accelerator\particle_power.dm"
+#include "code\modules\power\singularity\particle_accelerator\sunreactor.dm"
+#include "code\modules\projectiles\ammunition.dm"
+#include "code\modules\projectiles\effects.dm"
+#include "code\modules\projectiles\gun.dm"
+#include "code\modules\projectiles\projectile_new.dm"
+#include "code\modules\projectiles\ammunition\boxes.dm"
+#include "code\modules\projectiles\ammunition\bullets.dm"
+#include "code\modules\projectiles\ammunition\handfuls.dm"
+#include "code\modules\projectiles\ammunition\magnetic.dm"
+#include "code\modules\projectiles\guns\energy.dm"
+#include "code\modules\projectiles\guns\launcher.dm"
+#include "code\modules\projectiles\guns\projectile.dm"
+#include "code\modules\projectiles\guns\energy\laser.dm"
+#include "code\modules\projectiles\guns\energy\nuclear.dm"
+#include "code\modules\projectiles\guns\energy\pulse.dm"
+#include "code\modules\projectiles\guns\energy\special.dm"
+#include "code\modules\projectiles\guns\energy\stun.dm"
+#include "code\modules\projectiles\guns\launcher\alien.dm"
+#include "code\modules\projectiles\guns\launcher\crossbow.dm"
+#include "code\modules\projectiles\guns\launcher\grenade_launcher.dm"
+#include "code\modules\projectiles\guns\launcher\net.dm"
+#include "code\modules\projectiles\guns\launcher\pneumatic.dm"
+#include "code\modules\projectiles\guns\launcher\rocket.dm"
+#include "code\modules\projectiles\guns\launcher\slugsling.dm"
+#include "code\modules\projectiles\guns\launcher\syringe_gun.dm"
+#include "code\modules\projectiles\guns\projectile\automatic.dm"
+#include "code\modules\projectiles\guns\projectile\dartgun.dm"
+#include "code\modules\projectiles\guns\projectile\detective.dm"
+#include "code\modules\projectiles\guns\projectile\mattguns.dm"
+#include "code\modules\projectiles\guns\projectile\mortar.dm"
+#include "code\modules\projectiles\guns\projectile\pistol.dm"
+#include "code\modules\projectiles\guns\projectile\revolver.dm"
+#include "code\modules\projectiles\guns\projectile\shotgun.dm"
+#include "code\modules\projectiles\guns\projectile\sniper.dm"
+#include "code\modules\projectiles\projectile\animate.dm"
+#include "code\modules\projectiles\projectile\beams.dm"
+#include "code\modules\projectiles\projectile\bullets.dm"
+#include "code\modules\projectiles\projectile\change.dm"
+#include "code\modules\projectiles\projectile\energy.dm"
+#include "code\modules\projectiles\projectile\force.dm"
+#include "code\modules\projectiles\projectile\special.dm"
+#include "code\modules\projectiles\projectile\trace.dm"
+#include "code\modules\projectiles\projectile_effects\projectile_effects.dm"
+#include "code\modules\projectiles\projectile_effects\projectile_impact.dm"
+#include "code\modules\projectiles\projectile_effects\projectile_muzzle.dm"
+#include "code\modules\projectiles\projectile_effects\projectile_tracer.dm"
+#include "code\modules\projectiles\targeting\targeting_client.dm"
+#include "code\modules\projectiles\targeting\targeting_gun.dm"
+#include "code\modules\projectiles\targeting\targeting_mob.dm"
+#include "code\modules\projectiles\targeting\targeting_overlay.dm"
+#include "code\modules\projectiles\targeting\targeting_triggers.dm"
+#include "code\modules\prometheus_metrics\_defines.dm"
+#include "code\modules\prometheus_metrics\metric_family.dm"
+#include "code\modules\prometheus_metrics\metrics.dm"
+#include "code\modules\prometheus_metrics\metrics\byond.dm"
+#include "code\modules\prometheus_metrics\metrics\ss13.dm"
+#include "code\modules\random_map\_random_map_setup.dm"
+#include "code\modules\random_map\random_map.dm"
+#include "code\modules\random_map\random_map_verbs.dm"
+#include "code\modules\random_map\automata\automata.dm"
+#include "code\modules\random_map\automata\caves.dm"
+#include "code\modules\random_map\building\building.dm"
+#include "code\modules\random_map\drop\drop_types.dm"
+#include "code\modules\random_map\drop\droppod.dm"
+#include "code\modules\random_map\drop\droppod_doors.dm"
+#include "code\modules\random_map\drop\supply.dm"
+#include "code\modules\random_map\dungeon\predefined.dm"
+#include "code\modules\random_map\dungeon\room.dm"
+#include "code\modules\random_map\dungeon\room_generation.dm"
+#include "code\modules\random_map\dungeon\room_theme.dm"
+#include "code\modules\random_map\dungeon\winding_dungeon.dm"
+#include "code\modules\random_map\dungeon\winding_dungeon_verb.dm"
+#include "code\modules\random_map\dungeon\rooms\mimic_room.dm"
+#include "code\modules\random_map\dungeon\rooms\monster_room.dm"
+#include "code\modules\random_map\dungeon\rooms\tomb.dm"
+#include "code\modules\random_map\mazes\maze.dm"
+#include "code\modules\random_map\mazes\maze_cell.dm"
+#include "code\modules\random_map\noise\desert.dm"
+#include "code\modules\random_map\noise\magma.dm"
+#include "code\modules\random_map\noise\noise.dm"
+#include "code\modules\random_map\noise\ore.dm"
+#include "code\modules\random_map\noise\tundra.dm"
+#include "code\modules\reagents\Chemistry-Colours.dm"
+#include "code\modules\reagents\Chemistry-Holder.dm"
+#include "code\modules\reagents\Chemistry-Logging.dm"
+#include "code\modules\reagents\Chemistry-Machinery.dm"
+#include "code\modules\reagents\Chemistry-Metabolism.dm"
+#include "code\modules\reagents\Chemistry-Readme.dm"
+#include "code\modules\reagents\Chemistry-Reagents.dm"
+#include "code\modules\reagents\Chemistry-Recipes.dm"
+#include "code\modules\reagents\reagent_containers.dm"
+#include "code\modules\reagents\reagent_dispenser.dm"
+#include "code\modules\reagents\Chemistry-Reagents\Chemistry-Reagents-Core.dm"
+#include "code\modules\reagents\Chemistry-Reagents\Chemistry-Reagents-Dispenser.dm"
+#include "code\modules\reagents\Chemistry-Reagents\Chemistry-Reagents-Food-Drinks.dm"
+#include "code\modules\reagents\Chemistry-Reagents\Chemistry-Reagents-Helpers.dm"
+#include "code\modules\reagents\Chemistry-Reagents\Chemistry-Reagents-Medicine.dm"
+#include "code\modules\reagents\Chemistry-Reagents\Chemistry-Reagents-Other.dm"
+#include "code\modules\reagents\Chemistry-Reagents\Chemistry-Reagents-Toxins.dm"
+#include "code\modules\reagents\dispenser\_defines.dm"
+#include "code\modules\reagents\dispenser\cartridge.dm"
+#include "code\modules\reagents\dispenser\cartridge_presets.dm"
+#include "code\modules\reagents\dispenser\cartridge_spawn.dm"
+#include "code\modules\reagents\dispenser\dispenser2.dm"
+#include "code\modules\reagents\dispenser\dispenser_presets.dm"
+#include "code\modules\reagents\dispenser\supply.dm"
+#include "code\modules\reagents\reagent_containers\blood_pack.dm"
+#include "code\modules\reagents\reagent_containers\borghydro.dm"
+#include "code\modules\reagents\reagent_containers\dropper.dm"
+#include "code\modules\reagents\reagent_containers\food.dm"
+#include "code\modules\reagents\reagent_containers\glass.dm"
+#include "code\modules\reagents\reagent_containers\hypospray.dm"
+#include "code\modules\reagents\reagent_containers\pill.dm"
+#include "code\modules\reagents\reagent_containers\spray.dm"
+#include "code\modules\reagents\reagent_containers\syringes.dm"
+#include "code\modules\reagents\reagent_containers\drinkingglass\drinkingglass.dm"
+#include "code\modules\reagents\reagent_containers\drinkingglass\extras.dm"
+#include "code\modules\reagents\reagent_containers\drinkingglass\glass_boxes.dm"
+#include "code\modules\reagents\reagent_containers\drinkingglass\glass_types.dm"
+#include "code\modules\reagents\reagent_containers\drinkingglass\shaker.dm"
+#include "code\modules\reagents\reagent_containers\food\cans.dm"
+#include "code\modules\reagents\reagent_containers\food\condiment.dm"
+#include "code\modules\reagents\reagent_containers\food\drinks.dm"
+#include "code\modules\reagents\reagent_containers\food\lunch.dm"
+#include "code\modules\reagents\reagent_containers\food\sandwich.dm"
+#include "code\modules\reagents\reagent_containers\food\snacks.dm"
+#include "code\modules\reagents\reagent_containers\food\drinks\bottle.dm"
+#include "code\modules\reagents\reagent_containers\food\drinks\jar.dm"
+#include "code\modules\reagents\reagent_containers\food\drinks\bottle\robot.dm"
+#include "code\modules\reagents\reagent_containers\food\snacks\meat.dm"
+#include "code\modules\reagents\reagent_containers\glass\bottle.dm"
+#include "code\modules\reagents\reagent_containers\glass\jar.dm"
+#include "code\modules\reagents\reagent_containers\glass\supply.dm"
+#include "code\modules\reagents\reagent_containers\glass\bottle\robot.dm"
+#include "code\modules\recycling\conveyor2.dm"
+#include "code\modules\recycling\disposal-construction.dm"
+#include "code\modules\recycling\disposal.dm"
+#include "code\modules\recycling\sortingmachinery.dm"
+#include "code\modules\research\circuitprinter.dm"
+#include "code\modules\research\designs.dm"
+#include "code\modules\research\destructive_analyzer.dm"
+#include "code\modules\research\mechfab_designs.dm"
+#include "code\modules\research\message_server.dm"
+#include "code\modules\research\protolathe.dm"
+#include "code\modules\research\rd-readme.dm"
+#include "code\modules\research\rdconsole.dm"
+#include "code\modules\research\rdmachines.dm"
+#include "code\modules\research\research.dm"
+#include "code\modules\research\server.dm"
+#include "code\modules\research\stock_parts.dm"
+#include "code\modules\scripting\Errors.dm"
+#include "code\modules\scripting\IDE.dm"
+#include "code\modules\scripting\Options.dm"
+#include "code\modules\scripting\stack.dm"
+#include "code\modules\scripting\AST\AST Nodes.dm"
+#include "code\modules\scripting\AST\Blocks.dm"
+#include "code\modules\scripting\AST\Statements.dm"
+#include "code\modules\scripting\AST\Operators\Binary Operators.dm"
+#include "code\modules\scripting\AST\Operators\Unary Operators.dm"
+#include "code\modules\scripting\Implementations\_Logic.dm"
+#include "code\modules\scripting\Implementations\Telecomms.dm"
+#include "code\modules\scripting\Interpreter\Evaluation.dm"
+#include "code\modules\scripting\Interpreter\Interaction.dm"
+#include "code\modules\scripting\Interpreter\Interpreter.dm"
+#include "code\modules\scripting\Interpreter\Scope.dm"
+#include "code\modules\scripting\Parser\Expressions.dm"
+#include "code\modules\scripting\Parser\Keywords.dm"
+#include "code\modules\scripting\Parser\Parser.dm"
+#include "code\modules\scripting\Scanner\Scanner.dm"
+#include "code\modules\scripting\Scanner\Tokens.dm"
+#include "code\modules\security levels\keycard authentication.dm"
+#include "code\modules\shield_generators\floor_diffuser.dm"
+#include "code\modules\shield_generators\handheld_diffuser.dm"
+#include "code\modules\shield_generators\modes.dm"
+#include "code\modules\shield_generators\shield.dm"
+#include "code\modules\shield_generators\shield_generator.dm"
+#include "code\modules\shieldgen\emergency_shield.dm"
+#include "code\modules\shieldgen\energy_field.dm"
+#include "code\modules\shieldgen\shieldwallgen.dm"
+#include "code\modules\shuttles\_defines.dm"
+#include "code\modules\shuttles\antagonist.dm"
+#include "code\modules\shuttles\departmental.dm"
+#include "code\modules\shuttles\escape_pods.dm"
+#include "code\modules\shuttles\landmarks.dm"
+#include "code\modules\shuttles\shuttle.dm"
+#include "code\modules\shuttles\shuttle_autodock.dm"
+#include "code\modules\shuttles\shuttle_console.dm"
+#include "code\modules\shuttles\shuttle_console_multi.dm"
+#include "code\modules\shuttles\shuttle_emergency.dm"
+#include "code\modules\shuttles\shuttle_ferry.dm"
+#include "code\modules\shuttles\shuttle_specops.dm"
+#include "code\modules\shuttles\shuttle_supply.dm"
+#include "code\modules\shuttles\shuttles_multi.dm"
+#include "code\modules\spells\artifacts.dm"
+#include "code\modules\spells\construct_spells.dm"
+#include "code\modules\spells\contracts.dm"
+#include "code\modules\spells\no_clothes.dm"
+#include "code\modules\spells\racial_wizard.dm"
+#include "code\modules\spells\spell_code.dm"
+#include "code\modules\spells\spell_projectile.dm"
+#include "code\modules\spells\spellbook.dm"
+#include "code\modules\spells\spells.dm"
+#include "code\modules\spells\aoe_turf\aoe_turf.dm"
+#include "code\modules\spells\aoe_turf\blink.dm"
+#include "code\modules\spells\aoe_turf\charge.dm"
+#include "code\modules\spells\aoe_turf\disable_tech.dm"
+#include "code\modules\spells\aoe_turf\drain_blood.dm"
+#include "code\modules\spells\aoe_turf\knock.dm"
+#include "code\modules\spells\aoe_turf\smoke.dm"
+#include "code\modules\spells\aoe_turf\summons.dm"
+#include "code\modules\spells\aoe_turf\conjure\conjure.dm"
+#include "code\modules\spells\aoe_turf\conjure\construct.dm"
+#include "code\modules\spells\aoe_turf\conjure\druidic_spells.dm"
+#include "code\modules\spells\aoe_turf\conjure\faithful_hound.dm"
+#include "code\modules\spells\aoe_turf\conjure\force_portal.dm"
+#include "code\modules\spells\aoe_turf\conjure\forcewall.dm"
+#include "code\modules\spells\aoe_turf\conjure\grove.dm"
+#include "code\modules\spells\artifacts\monster_manual.dm"
+#include "code\modules\spells\artifacts\storage.dm"
+#include "code\modules\spells\general\acid_spray.dm"
+#include "code\modules\spells\general\area_teleport.dm"
+#include "code\modules\spells\general\contract_spells.dm"
+#include "code\modules\spells\general\create_air.dm"
+#include "code\modules\spells\general\mark_recall.dm"
+#include "code\modules\spells\general\radiant_aura.dm"
+#include "code\modules\spells\general\return_master.dm"
+#include "code\modules\spells\general\tear_veil.dm"
+#include "code\modules\spells\hand\blood_shards.dm"
+#include "code\modules\spells\hand\burning_grip.dm"
+#include "code\modules\spells\hand\entangle.dm"
+#include "code\modules\spells\hand\hand.dm"
+#include "code\modules\spells\hand\hand_item.dm"
+#include "code\modules\spells\hand\slippery_surface.dm"
+#include "code\modules\spells\spellbook\battlemage.dm"
+#include "code\modules\spells\spellbook\cleric.dm"
+#include "code\modules\spells\spellbook\druid.dm"
+#include "code\modules\spells\spellbook\spatial.dm"
+#include "code\modules\spells\spellbook\standard.dm"
+#include "code\modules\spells\spellbook\student.dm"
+#include "code\modules\spells\targeted\cleric_spells.dm"
+#include "code\modules\spells\targeted\ethereal_jaunt.dm"
+#include "code\modules\spells\targeted\genetic.dm"
+#include "code\modules\spells\targeted\harvest.dm"
+#include "code\modules\spells\targeted\shapeshift.dm"
+#include "code\modules\spells\targeted\shatter_mind.dm"
+#include "code\modules\spells\targeted\shift.dm"
+#include "code\modules\spells\targeted\subjugate.dm"
+#include "code\modules\spells\targeted\swap.dm"
+#include "code\modules\spells\targeted\targeted.dm"
+#include "code\modules\spells\targeted\torment.dm"
+#include "code\modules\spells\targeted\equip\dyrnwyn.dm"
+#include "code\modules\spells\targeted\equip\equip.dm"
+#include "code\modules\spells\targeted\equip\holy_relic.dm"
+#include "code\modules\spells\targeted\equip\horsemask.dm"
+#include "code\modules\spells\targeted\equip\party_hardy.dm"
+#include "code\modules\spells\targeted\equip\seed.dm"
+#include "code\modules\spells\targeted\equip\shield.dm"
+#include "code\modules\spells\targeted\projectile\dumbfire.dm"
+#include "code\modules\spells\targeted\projectile\fireball.dm"
+#include "code\modules\spells\targeted\projectile\magic_missile.dm"
+#include "code\modules\spells\targeted\projectile\passage.dm"
+#include "code\modules\spells\targeted\projectile\projectile.dm"
+#include "code\modules\spells\targeted\projectile\stuncuff.dm"
+#include "code\modules\supermatter\setup_supermatter.dm"
+#include "code\modules\supermatter\supermatter.dm"
+#include "code\modules\surgery\_defines.dm"
+#include "code\modules\surgery\bones.dm"
+#include "code\modules\surgery\encased.dm"
+#include "code\modules\surgery\face.dm"
+#include "code\modules\surgery\generic.dm"
+#include "code\modules\surgery\implant.dm"
+#include "code\modules\surgery\limb_reattach.dm"
+#include "code\modules\surgery\organs_internal.dm"
+#include "code\modules\surgery\other.dm"
+#include "code\modules\surgery\robotics.dm"
+#include "code\modules\surgery\slimes.dm"
+#include "code\modules\surgery\surgery.dm"
+#include "code\modules\surgery\~defines.dm"
+#include "code\modules\tables\flipping.dm"
+#include "code\modules\tables\interactions.dm"
+#include "code\modules\tables\presets.dm"
+#include "code\modules\tables\rack.dm"
+#include "code\modules\tables\tables.dm"
+#include "code\modules\tables\update_triggers.dm"
+#include "code\modules\tgui\external.dm"
+#include "code\modules\tgui\process.dm"
+#include "code\modules\tgui\states.dm"
+#include "code\modules\tgui\tgui.dm"
+#include "code\modules\tgui\states\admin.dm"
+#include "code\modules\tgui\states\always.dm"
+#include "code\modules\tgui\states\conscious.dm"
+#include "code\modules\tgui\states\contained.dm"
+#include "code\modules\tgui\states\deep_inventory.dm"
+#include "code\modules\tgui\states\default.dm"
+#include "code\modules\tgui\states\hands.dm"
+#include "code\modules\tgui\states\human_adjacent.dm"
+#include "code\modules\tgui\states\inventory.dm"
+#include "code\modules\tgui\states\not_contained.dm"
+#include "code\modules\tgui\states\not_incapacitated.dm"
+#include "code\modules\tgui\states\physical.dm"
+#include "code\modules\tgui\states\self.dm"
+#include "code\modules\tgui\states\zlevel.dm"
+#include "code\modules\trait\quirks.dm"
+#include "code\modules\trait\traits.dm"
+#include "code\modules\turbolift\_turbolift.dm"
+#include "code\modules\turbolift\turbolift.dm"
+#include "code\modules\turbolift\turbolift_areas.dm"
+#include "code\modules\turbolift\turbolift_console.dm"
+#include "code\modules\turbolift\turbolift_door.dm"
+#include "code\modules\turbolift\turbolift_floor.dm"
+#include "code\modules\turbolift\turbolift_map.dm"
+#include "code\modules\turbolift\turbolift_process.dm"
+#include "code\modules\turbolift\turbolift_turfs.dm"
+#include "code\modules\vehicles\bike.dm"
+#include "code\modules\vehicles\cargo_train.dm"
+#include "code\modules\vehicles\engine.dm"
+#include "code\modules\vehicles\train.dm"
+#include "code\modules\vehicles\vehicle.dm"
+#include "code\modules\ventcrawl\ventcrawl.dm"
+#include "code\modules\ventcrawl\ventcrawl_atmospherics.dm"
+#include "code\modules\ventcrawl\ventcrawl_multiz.dm"
+#include "code\modules\ventcrawl\ventcrawl_verb.dm"
+#include "code\modules\virus2\admin.dm"
+#include "code\modules\virus2\analyser.dm"
+#include "code\modules\virus2\antibodies.dm"
+#include "code\modules\virus2\antibodyanalyser.dm"
+#include "code\modules\virus2\centrifuge.dm"
+#include "code\modules\virus2\curer.dm"
+#include "code\modules\virus2\disease2.dm"
+#include "code\modules\virus2\diseasesplicer.dm"
+#include "code\modules\virus2\dishincubator.dm"
+#include "code\modules\virus2\effect.dm"
+#include "code\modules\virus2\helpers.dm"
+#include "code\modules\virus2\isolator.dm"
+#include "code\modules\virus2\items_devices.dm"
+#include "code\modules\wardog\wardog.dm"
+#include "code\modules\wireless\devices.dm"
+#include "code\modules\wireless\interfaces.dm"
+#include "code\modules\xenoarcheaology\anomaly_container.dm"
+#include "code\modules\xenoarcheaology\boulder.dm"
+#include "code\modules\xenoarcheaology\effect.dm"
+#include "code\modules\xenoarcheaology\master_controller.dm"
+#include "code\modules\xenoarcheaology\misc.dm"
+#include "code\modules\xenoarcheaology\sampling.dm"
+#include "code\modules\xenoarcheaology\artifacts\artifact.dm"
+#include "code\modules\xenoarcheaology\artifacts\artifact_find.dm"
+#include "code\modules\xenoarcheaology\artifacts\autocloner.dm"
+#include "code\modules\xenoarcheaology\artifacts\crystal.dm"
+#include "code\modules\xenoarcheaology\artifacts\gigadrill.dm"
+#include "code\modules\xenoarcheaology\artifacts\replicator.dm"
+#include "code\modules\xenoarcheaology\effects\badfeeling.dm"
+#include "code\modules\xenoarcheaology\effects\cellcharge.dm"
+#include "code\modules\xenoarcheaology\effects\celldrain.dm"
+#include "code\modules\xenoarcheaology\effects\cold.dm"
+#include "code\modules\xenoarcheaology\effects\dnaswitch.dm"
+#include "code\modules\xenoarcheaology\effects\emp.dm"
+#include "code\modules\xenoarcheaology\effects\forcefield.dm"
+#include "code\modules\xenoarcheaology\effects\gasco2.dm"
+#include "code\modules\xenoarcheaology\effects\gasnitro.dm"
+#include "code\modules\xenoarcheaology\effects\gasoxy.dm"
+#include "code\modules\xenoarcheaology\effects\gasphoron.dm"
+#include "code\modules\xenoarcheaology\effects\gassleeping.dm"
+#include "code\modules\xenoarcheaology\effects\goodfeeling.dm"
+#include "code\modules\xenoarcheaology\effects\heal.dm"
+#include "code\modules\xenoarcheaology\effects\heat.dm"
+#include "code\modules\xenoarcheaology\effects\hurt.dm"
+#include "code\modules\xenoarcheaology\effects\radiate.dm"
+#include "code\modules\xenoarcheaology\effects\roboheal.dm"
+#include "code\modules\xenoarcheaology\effects\robohurt.dm"
+#include "code\modules\xenoarcheaology\effects\sleepy.dm"
+#include "code\modules\xenoarcheaology\effects\stun.dm"
+#include "code\modules\xenoarcheaology\effects\teleport.dm"
+#include "code\modules\xenoarcheaology\finds\find_spawning.dm"
+#include "code\modules\xenoarcheaology\finds\finds.dm"
+#include "code\modules\xenoarcheaology\finds\finds_defines.dm"
+#include "code\modules\xenoarcheaology\finds\fossils.dm"
+#include "code\modules\xenoarcheaology\finds\misc.dm"
+#include "code\modules\xenoarcheaology\finds\special.dm"
+#include "code\modules\xenoarcheaology\finds\talking.dm"
+#include "code\modules\xenoarcheaology\tools\ano_device_battery.dm"
+#include "code\modules\xenoarcheaology\tools\artifact_analyser.dm"
+#include "code\modules\xenoarcheaology\tools\artifact_harvester.dm"
+#include "code\modules\xenoarcheaology\tools\artifact_scanner.dm"
+#include "code\modules\xenoarcheaology\tools\coolant_tank.dm"
+#include "code\modules\xenoarcheaology\tools\equipment.dm"
+#include "code\modules\xenoarcheaology\tools\geosample_scanner.dm"
+#include "code\modules\xenoarcheaology\tools\suspension_generator.dm"
+#include "code\modules\xenoarcheaology\tools\tools.dm"
+#include "code\modules\xenoarcheaology\tools\tools_pickaxe.dm"
+#include "code\modules\xgm\gases.dm"
+#include "code\modules\xgm\xgm_gas_data.dm"
+#include "code\modules\xgm\xgm_gas_mixture.dm"
+#include "code\modules\ZAS\_docs.dm"
+#include "code\modules\ZAS\Airflow.dm"
+#include "code\modules\ZAS\Atom.dm"
+#include "code\modules\ZAS\Connection.dm"
+#include "code\modules\ZAS\ConnectionGroup.dm"
+#include "code\modules\ZAS\ConnectionManager.dm"
+#include "code\modules\ZAS\Debug.dm"
+#include "code\modules\ZAS\Diagnostic.dm"
+#include "code\modules\ZAS\Fire.dm"
+#include "code\modules\ZAS\Phoron.dm"
+#include "code\modules\ZAS\Turf.dm"
+#include "code\modules\ZAS\Variable Settings.dm"
+#include "code\modules\ZAS\Zone.dm"
+#include "code\procs\announce.dm"
+#include "code\procs\AStar.dm"
+#include "code\procs\dbcore.dm"
+#include "code\procs\hud.dm"
+#include "code\procs\radio.dm"
+#include "code\procs\statistics.dm"
+#include "code\unit_tests\_includes.dm"
+#include "code\unit_tests\alt_appearances_test.dm"
+#include "code\unit_tests\area_tests.dm"
+#include "code\unit_tests\atmospherics_tests.dm"
+#include "code\unit_tests\cargo_tests.dm"
+#include "code\unit_tests\equipment_tests.dm"
+#include "code\unit_tests\extension_tests.dm"
+#include "code\unit_tests\food_tests.dm"
+#include "code\unit_tests\foundation_tests.dm"
+#include "code\unit_tests\icon_tests.dm"
+#include "code\unit_tests\integrated_circuits.dm"
+#include "code\unit_tests\job_tests.dm"
+#include "code\unit_tests\map_tests.dm"
+#include "code\unit_tests\mob_tests.dm"
+#include "code\unit_tests\movement_tests.dm"
+#include "code\unit_tests\observation_tests.dm"
+#include "code\unit_tests\organ_tests.dm"
+#include "code\unit_tests\power_tests.dm"
+#include "code\unit_tests\seed_tests.dm"
+#include "code\unit_tests\shuttle_tests.dm"
+#include "code\unit_tests\subsystem_tests.dm"
+#include "code\unit_tests\test_obj.dm"
+#include "code\unit_tests\unique_tests.dm"
+#include "code\unit_tests\unit_test.dm"
+#include "code\unit_tests\uplink_tests.dm"
+#include "code\unit_tests\view_variables_test.dm"
+#include "code\unit_tests\virtual_mob_tests.dm"
+#include "code\unit_tests\zas_tests.dm"
+#include "code\unit_tests\~helpers.dm"
+#include "code\unit_tests\~unit_test_types.dm"
+#include "interface\interface.dm"
+#include "interface\skin.dmf"
+#include "maps\_map_include.dm"
+#include "maps\away\away_sites.dm"
+#include "maps\away\mining\mining_areas.dm"
+#include "maps\oldfare\warfare.dm"
+#include "maps\oldfare\warfare_define.dm"
+#include "maps\overmap_example\overmap_example_define.dm"
+#include "maps\random_ruins\exoplanet_ruins\exoplanet_ruins.dm"
+#include "maps\random_ruins\exoplanet_ruins\hut\hut.dm"
+#include "maps\random_ruins\exoplanet_ruins\monoliths\monoliths.dm"
+#include "maps\random_ruins\space_ruins\space_ruins.dm"
+#include "maps\~mapsystem\map_preferences.dm"
+#include "maps\~mapsystem\map_ranks.dm"
+#include "maps\~mapsystem\maps.dm"
+#include "maps\~mapsystem\maps_announcements.dm"
+#include "maps\~mapsystem\maps_areas.dm"
+#include "maps\~mapsystem\maps_jobs.dm"
+#include "maps\~mapsystem\maps_unit_testing.dm"
+#include "maps\~unit_tests\unit_testing.dm"
+#include "~code\global_init.dm"
+// END_INCLUDE
+
+#include "__non-agpl-warfare/__secret.dme"
diff --git a/LICENSE-AGPL3.txt b/LICENSE-AGPL3.txt
new file mode 100644
index 00000000..dba13ed2
--- /dev/null
+++ b/LICENSE-AGPL3.txt
@@ -0,0 +1,661 @@
+ GNU AFFERO GENERAL PUBLIC LICENSE
+ Version 3, 19 November 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU Affero General Public License is a free, copyleft license for
+software and other kinds of works, specifically designed to ensure
+cooperation with the community in the case of network server software.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+our General Public Licenses are intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ Developers that use our General Public Licenses protect your rights
+with two steps: (1) assert copyright on the software, and (2) offer
+you this License which gives you legal permission to copy, distribute
+and/or modify the software.
+
+ A secondary benefit of defending all users' freedom is that
+improvements made in alternate versions of the program, if they
+receive widespread use, become available for other developers to
+incorporate. Many developers of free software are heartened and
+encouraged by the resulting cooperation. However, in the case of
+software used on network servers, this result may fail to come about.
+The GNU General Public License permits making a modified version and
+letting the public access it on a server without ever releasing its
+source code to the public.
+
+ The GNU Affero General Public License is designed specifically to
+ensure that, in such cases, the modified source code becomes available
+to the community. It requires the operator of a network server to
+provide the source code of the modified version running there to the
+users of that server. Therefore, public use of a modified version, on
+a publicly accessible server, gives the public access to the source
+code of the modified version.
+
+ An older license, called the Affero General Public License and
+published by Affero, was designed to accomplish similar goals. This is
+a different license, not a version of the Affero GPL, but Affero has
+released a new version of the Affero GPL which permits relicensing under
+this license.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU Affero General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Remote Network Interaction; Use with the GNU General Public License.
+
+ Notwithstanding any other provision of this License, if you modify the
+Program, your modified version must prominently offer all users
+interacting with it remotely through a computer network (if your version
+supports such interaction) an opportunity to receive the Corresponding
+Source of your version by providing access to the Corresponding Source
+from a network server at no charge, through some standard or customary
+means of facilitating copying of software. This Corresponding Source
+shall include the Corresponding Source for any work covered by version 3
+of the GNU General Public License that is incorporated pursuant to the
+following paragraph.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the work with which it is combined will remain governed by version
+3 of the GNU General Public License.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU Affero General Public License from time to time. Such new versions
+will be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU Affero General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU Affero General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU Affero General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+
+ Copyright (C)
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see .
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If your software can interact with users remotely through a computer
+network, you should also make sure that it provides a way for users to
+get its source. For example, if your program is a web application, its
+interface could display a "Source" link that leads users to an archive
+of the code. There are many ways you could offer source, and different
+solutions will be better for different programs; see section 13 for the
+specific requirements.
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU AGPL, see
+.
diff --git a/LICENSE-GPL3.txt b/LICENSE-GPL3.txt
new file mode 100644
index 00000000..94a9ed02
--- /dev/null
+++ b/LICENSE-GPL3.txt
@@ -0,0 +1,674 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+
+ Copyright (C)
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ Copyright (C)
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+.
diff --git a/README.md b/README.md
index c1d018d4..43d9d2ce 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,38 @@
-# IS12-Warfare
\ No newline at end of file
+## Interstation12: Warfare
+
+**Website:** http://is12wiki.xyz/index.php/Main_Page
+
+**Main source code:** https://github.com/mattroks101/IS12-Warfare
+
+**Discord:** https://discord.gg/FVRctMD
+
+## Terms of service
+
+**Please carefully read the following statement:**
+
+If you desire to host your own server based off of IS12 Warfare source code - you may not pretend to be an "Official IS12 Warfare" server.
+
+**By our terms and conditions we require any potential host to specify that they are an unofficial server in announcements and the Byond HUB.**
+
+Stated terms of service fully comply with the AGPL v3 license.
+
+### LICENSE
+Code is licensed under the [GNU Affero General Public License v3](http://www.gnu.org/licenses/agpl.html).
+
+If you wish to license under GPL v3 please make this clear in the commit message and any added files.
+
+The major change here is that if you host a server using any code licensed under AGPLv3 you are required to provide full source code for your servers users as well including addons and modifications you have made.
+
+**All original art assets are © 2020 Interstation12. All rights reserved. You may not rip the original art assets and use them in your project without consent.**
+
+
+## How do I get this to compile?
+
+You can do this one of two ways. First way is to go into your DME, and find the line that contains `#include "__non-agpl-warfare/__secret.dme"`, comment this out. Your code will now compile, but it may not be compatible with the main repo anymore, only do this if you have simply downloaded the codebase, and do not plan to contribute or keep up to date with it's changes.
+
+The proper method is to go into the folder called `__non-agpl-warfare` and create a DME called `__secret.dme`. Make sure it is titled exactly that, in exactly that folder, and that the DME is completely blank with no files included. Now go back to the IS12Warfare.dme and compile again. It will compile correctly.
+
+
+## Why do I have to do that?
+
+Due to license restrictions on certain independent systems referenced in this code, certain parts of the codebase were not able to be released to the public. A dummy file system has been created to account for this. The codebase will still compile and run without the independent systems.
\ No newline at end of file
diff --git a/code/__datastructures/globals.dm b/code/__datastructures/globals.dm
new file mode 100644
index 00000000..637af7f0
--- /dev/null
+++ b/code/__datastructures/globals.dm
@@ -0,0 +1,38 @@
+//See controllers/globals.dm
+#define GLOBAL_MANAGED(X, InitValue)\
+/datum/controller/global_vars/proc/InitGlobal##X(){\
+ ##X = ##InitValue;\
+ gvars_datum_init_order += #X;\
+}
+#define GLOBAL_UNMANAGED(X, InitValue) /datum/controller/global_vars/proc/InitGlobal##X()
+
+#ifndef TESTING
+#define GLOBAL_PROTECT(X)\
+/datum/controller/global_vars/InitGlobal##X(){\
+ ..();\
+ gvars_datum_protected_varlist += #X;\
+}
+#else
+#define GLOBAL_PROTECT(X)
+#endif
+
+#define GLOBAL_REAL_VAR(X) var/global/##X
+#define GLOBAL_REAL(X, Typepath) var/global##Typepath/##X
+
+#define GLOBAL_RAW(X) /datum/controller/global_vars/var/global##X
+
+#define GLOBAL_VAR_INIT(X, InitValue) GLOBAL_RAW(/##X); GLOBAL_MANAGED(X, InitValue)
+
+#define GLOBAL_VAR_CONST(X, InitValue) GLOBAL_RAW(/const/##X) = InitValue; GLOBAL_UNMANAGED(X, InitValue)
+
+#define GLOBAL_LIST_INIT(X, InitValue) GLOBAL_RAW(/list/##X); GLOBAL_MANAGED(X, InitValue)
+
+#define GLOBAL_LIST_EMPTY(X) GLOBAL_LIST_INIT(X, list())
+
+#define GLOBAL_DATUM_INIT(X, Typepath, InitValue) GLOBAL_RAW(Typepath/##X); GLOBAL_MANAGED(X, InitValue)
+
+#define GLOBAL_VAR(X) GLOBAL_RAW(/##X); GLOBAL_MANAGED(X, null)
+
+#define GLOBAL_LIST(X) GLOBAL_RAW(/list/##X); GLOBAL_MANAGED(X, null)
+
+#define GLOBAL_DATUM(X, Typepath) GLOBAL_RAW(Typepath/##X); GLOBAL_MANAGED(X, null)
diff --git a/code/__datastructures/priority_queue.dm b/code/__datastructures/priority_queue.dm
new file mode 100644
index 00000000..380db428
--- /dev/null
+++ b/code/__datastructures/priority_queue.dm
@@ -0,0 +1,63 @@
+
+//////////////////////
+//PriorityQueue object
+//////////////////////
+
+//an ordered list, using the cmp proc to weight the list elements
+/PriorityQueue
+ var/list/L //the actual queue
+ var/cmp //the weight function used to order the queue
+
+/PriorityQueue/New(compare)
+ L = new()
+ cmp = compare
+
+/PriorityQueue/proc/IsEmpty()
+ return !L.len
+
+//add an element in the list,
+//immediatly ordering it to its position using dichotomic search
+/PriorityQueue/proc/Enqueue(atom/A)
+ ADD_SORTED(L, A, cmp)
+
+//removes and returns the first element in the queue
+/PriorityQueue/proc/Dequeue()
+ if(!L.len)
+ return 0
+ . = L[1]
+
+ Remove(.)
+
+//removes an element
+/PriorityQueue/proc/Remove(atom/A)
+ . = L.Remove(A)
+
+//returns a copy of the elements list
+/PriorityQueue/proc/List()
+ . = L.Copy()
+
+//return the position of an element or 0 if not found
+/PriorityQueue/proc/Seek(atom/A)
+ . = L.Find(A)
+
+//return the element at the i_th position
+/PriorityQueue/proc/Get(i)
+ if(i > L.len || i < 1)
+ return 0
+ return L[i]
+
+//return the length of the queue
+/PriorityQueue/proc/Length()
+ . = L.len
+
+//replace the passed element at it's right position using the cmp proc
+/PriorityQueue/proc/ReSort(atom/A)
+ var/i = Seek(A)
+ if(i == 0)
+ return
+ while(i < L.len && call(cmp)(L[i],L[i+1]) > 0)
+ L.Swap(i,i+1)
+ i++
+ while(i > 1 && call(cmp)(L[i],L[i-1]) <= 0) //last inserted element being first in case of ties (optimization)
+ L.Swap(i,i-1)
+ i--
diff --git a/code/__datastructures/stack.dm b/code/__datastructures/stack.dm
new file mode 100644
index 00000000..76e492e0
--- /dev/null
+++ b/code/__datastructures/stack.dm
@@ -0,0 +1,66 @@
+/datum/stack
+ var/list/stack
+ var/max_elements = 0
+
+/datum/stack/New(list/elements, max)
+ ..()
+ stack = elements ? elements.Copy() : list()
+ if(max)
+ max_elements = max
+
+/datum/stack/Destroy()
+ Clear()
+ . = ..()
+
+/datum/stack/proc/Pop()
+ if(is_empty())
+ return null
+ . = stack[stack.len]
+ stack.Cut(stack.len,0)
+
+/datum/stack/proc/Push(element)
+ if(max_elements && (stack.len+1 > max_elements))
+ return null
+ stack += element
+
+/datum/stack/proc/Top()
+ if(is_empty())
+ return null
+ . = stack[stack.len]
+
+/datum/stack/proc/Remove(element)
+ stack -= element
+
+/datum/stack/proc/is_empty()
+ . = stack.len ? 0 : 1
+
+//Rotate entire stack left with the leftmost looping around to the right
+/datum/stack/proc/RotateLeft()
+ if(is_empty())
+ return 0
+ . = stack[1]
+ stack.Cut(1,2)
+ Push(.)
+
+//Rotate entire stack to the right with the rightmost looping around to the left
+/datum/stack/proc/RotateRight()
+ if(is_empty())
+ return 0
+ . = stack[stack.len]
+ stack.Cut(stack.len,0)
+ stack.Insert(1,.)
+
+
+/datum/stack/proc/Copy()
+ var/datum/stack/S=new()
+ S.stack = stack.Copy()
+ S.max_elements = max_elements
+ return S
+
+/datum/stack/proc/Clear()
+ stack.Cut()
+
+/datum/stack/proc/QdelClear()
+ for(var/entry in stack)
+ qdel(entry)
+ stack.Cut()
diff --git a/code/__defines/MC.dm b/code/__defines/MC.dm
new file mode 100644
index 00000000..d36f8384
--- /dev/null
+++ b/code/__defines/MC.dm
@@ -0,0 +1,124 @@
+#define MC_TICK_CHECK ( ( TICK_USAGE > Master.current_ticklimit || src.state != SS_RUNNING ) ? pause() : 0 )
+
+#define MC_SPLIT_TICK_INIT(phase_count) var/original_tick_limit = Master.current_ticklimit; var/split_tick_phases = ##phase_count
+#define MC_SPLIT_TICK \
+ if(split_tick_phases > 1){\
+ Master.current_ticklimit = ((original_tick_limit - TICK_USAGE) / split_tick_phases) + TICK_USAGE;\
+ --split_tick_phases;\
+ } else {\
+ Master.current_ticklimit = original_tick_limit;\
+ }
+
+// Used to smooth out costs to try and avoid oscillation.
+#define MC_AVERAGE_FAST(average, current) (0.7 * (average) + 0.3 * (current))
+#define MC_AVERAGE(average, current) (0.8 * (average) + 0.2 * (current))
+#define MC_AVERAGE_SLOW(average, current) (0.9 * (average) + 0.1 * (current))
+
+#define MC_AVG_FAST_UP_SLOW_DOWN(average, current) (average > current ? MC_AVERAGE_SLOW(average, current) : MC_AVERAGE_FAST(average, current))
+#define MC_AVG_SLOW_UP_FAST_DOWN(average, current) (average < current ? MC_AVERAGE_SLOW(average, current) : MC_AVERAGE_FAST(average, current))
+
+#define NEW_SS_GLOBAL(varname) if(varname != src){if(istype(varname)){Recover();qdel(varname);}varname = src;}
+
+#define START_PROCESSING(Processor, Datum) \
+if (Datum.is_processing) {\
+ if(Datum.is_processing != #Processor)\
+ {\
+ crash_with("Failed to start processing. [log_info_line(Datum)] is already being processed by [Datum.is_processing] but queue attempt occured on [#Processor]."); \
+ }\
+} else {\
+ Datum.is_processing = #Processor;\
+ Processor.processing += Datum;\
+}
+
+#define STOP_PROCESSING(Processor, Datum) \
+if(Datum.is_processing) {\
+ if(Processor.processing.Remove(Datum)) {\
+ Datum.is_processing = null;\
+ } else {\
+ crash_with("Failed to stop processing. [log_info_line(Datum)] is being processed by [Datum.is_processing] but de-queue attempt occured on [#Processor]."); \
+ }\
+}
+
+//SubSystem flags (Please design any new flags so that the default is off, to make adding flags to subsystems easier)
+
+//subsystem does not initialize.
+#define SS_NO_INIT 1
+
+//subsystem does not fire.
+// (like can_fire = 0, but keeps it from getting added to the processing subsystems list)
+// (Requires a MC restart to change)
+#define SS_NO_FIRE 2
+
+//subsystem only runs on spare cpu (after all non-background subsystems have ran that tick)
+// SS_BACKGROUND has its own priority bracket
+#define SS_BACKGROUND 4
+
+//subsystem does not tick check, and should not run unless there is enough time (or its running behind (unless background))
+#define SS_NO_TICK_CHECK 8
+
+//Treat wait as a tick count, not DS, run every wait ticks.
+// (also forces it to run first in the tick, above even SS_NO_TICK_CHECK subsystems)
+// (implies all runlevels because of how it works)
+// (overrides SS_BACKGROUND)
+// This is designed for basically anything that works as a mini-mc (like SStimer)
+#define SS_TICKER 16
+
+//keep the subsystem's timing on point by firing early if it fired late last fire because of lag
+// ie: if a 20ds subsystem fires say 5 ds late due to lag or what not, its next fire would be in 15ds, not 20ds.
+#define SS_KEEP_TIMING 32
+
+//Calculate its next fire after its fired.
+// (IE: if a 5ds wait SS takes 2ds to run, its next fire should be 5ds away, not 3ds like it normally would be)
+// This flag overrides SS_KEEP_TIMING
+#define SS_POST_FIRE_TIMING 64
+
+// -- SStimer stuff --
+//Don't run if there is an identical unique timer active
+#define TIMER_UNIQUE 0x1
+
+//For unique timers: Replace the old timer rather then not start this one
+#define TIMER_OVERRIDE 0x2
+
+//Timing should be based on how timing progresses on clients, not the sever.
+// tracking this is more expensive,
+// should only be used in conjuction with things that have to progress client side, such as animate() or sound()
+#define TIMER_CLIENT_TIME 0x4
+
+//Timer can be stopped using deltimer()
+#define TIMER_STOPPABLE 0x8
+
+//To be used with TIMER_UNIQUE
+//prevents distinguishing identical timers with the wait variable
+#define TIMER_NO_HASH_WAIT 0x10
+
+//number of byond ticks that are allowed to pass before the timer subsystem thinks it hung on something
+#define TIMER_NO_INVOKE_WARNING 600
+
+#define TIMER_ID_NULL -1
+
+//SUBSYSTEM STATES
+#define SS_IDLE 0 //aint doing shit.
+#define SS_QUEUED 1 //queued to run
+#define SS_RUNNING 2 //actively running
+#define SS_PAUSED 3 //paused by mc_tick_check
+#define SS_SLEEPING 4 //fire() slept.
+#define SS_PAUSING 5 //in the middle of pausing
+
+#define SUBSYSTEM_DEF(X) GLOBAL_REAL(SS##X, /datum/controller/subsystem/##X);\
+/datum/controller/subsystem/##X/New(){\
+ NEW_SS_GLOBAL(SS##X);\
+ PreInit();\
+}\
+/datum/controller/subsystem/##X
+
+#define PROCESSING_SUBSYSTEM_DEF(X) GLOBAL_REAL(SS##X, /datum/controller/subsystem/processing/##X);\
+/datum/controller/subsystem/processing/##X/New(){\
+ NEW_SS_GLOBAL(SS##X);\
+ PreInit();\
+}\
+/datum/controller/subsystem/processing/##X/Recover() {\
+ if(istype(SS##X.processing)) {\
+ processing = SS##X.processing; \
+ }\
+}\
+/datum/controller/subsystem/processing/##X
diff --git a/code/__defines/ZAS.dm b/code/__defines/ZAS.dm
new file mode 100644
index 00000000..2d95c9ef
--- /dev/null
+++ b/code/__defines/ZAS.dm
@@ -0,0 +1,117 @@
+//#define ZASDBG
+#define MULTIZAS
+
+#define AIR_BLOCKED 1
+#define ZONE_BLOCKED 2
+#define BLOCKED 3
+
+#define ZONE_MIN_SIZE 14 //zones with less than this many turfs will always merge, even if the connection is not direct
+
+#define CANPASS_ALWAYS 1
+#define CANPASS_DENSITY 2
+#define CANPASS_PROC 3
+#define CANPASS_NEVER 4
+
+#define NORTHUP (NORTH|UP)
+#define EASTUP (EAST|UP)
+#define SOUTHUP (SOUTH|UP)
+#define WESTUP (WEST|UP)
+#define NORTHDOWN (NORTH|DOWN)
+#define EASTDOWN (EAST|DOWN)
+#define SOUTHDOWN (SOUTH|DOWN)
+#define WESTDOWN (WEST|DOWN)
+
+#define TURF_HAS_VALID_ZONE(T) (istype(T, /turf/simulated) && T:zone && !T:zone:invalid)
+
+#ifdef MULTIZAS
+
+var/list/csrfz_check = list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST, NORTHUP, EASTUP, WESTUP, SOUTHUP, NORTHDOWN, EASTDOWN, WESTDOWN, SOUTHDOWN)
+var/list/gzn_check = list(NORTH, SOUTH, EAST, WEST, UP, DOWN)
+
+#define ATMOS_CANPASS_TURF(ret,A,B) \
+ if (A.blocks_air & AIR_BLOCKED || B.blocks_air & AIR_BLOCKED) { \
+ ret = BLOCKED; \
+ } \
+ else if (B.z != A.z) { \
+ if (B.z < A.z) { \
+ if (!istype(A, /turf/simulated/open)) { \
+ ret = BLOCKED; \
+ } else { \
+ ret = ZONE_BLOCKED; \
+ } \
+ } \
+ else { \
+ if (!istype(B, /turf/simulated/open)) { \
+ ret = BLOCKED; \
+ } else { \
+ ret = ZONE_BLOCKED; \
+ } \
+ } \
+ } \
+ else if (A.blocks_air & ZONE_BLOCKED || B.blocks_air & ZONE_BLOCKED) { \
+ ret = (A.z == B.z) ? ZONE_BLOCKED : AIR_BLOCKED; \
+ } \
+ else if (A.contents.len) { \
+ ret = 0;\
+ for (var/thing in A) { \
+ var/atom/movable/AM = thing; \
+ switch (AM.atmos_canpass) { \
+ if (CANPASS_ALWAYS) { \
+ continue; \
+ } \
+ if (CANPASS_DENSITY) { \
+ if (AM.density) { \
+ ret |= AIR_BLOCKED; \
+ } \
+ } \
+ if (CANPASS_PROC) { \
+ ret |= AM.c_airblock(B); \
+ } \
+ if (CANPASS_NEVER) { \
+ ret = BLOCKED; \
+ } \
+ } \
+ if (ret == BLOCKED) { \
+ break;\
+ }\
+ }\
+ }
+#else
+
+var/list/csrfz_check = list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST)
+var/list/gzn_check = list(NORTH, SOUTH, EAST, WEST)
+
+#define ATMOS_CANPASS_TURF(ret,A,B) \
+ if (A.blocks_air & AIR_BLOCKED || B.blocks_air & AIR_BLOCKED) { \
+ ret = BLOCKED; \
+ } \
+ else if (A.blocks_air & ZONE_BLOCKED || B.blocks_air & ZONE_BLOCKED) { \
+ ret = ZONE_BLOCKED; \
+ } \
+ else if (A.contents.len) { \
+ ret = 0;\
+ for (var/thing in A) { \
+ var/atom/movable/AM = thing; \
+ switch (AM.atmos_canpass) { \
+ if (CANPASS_ALWAYS) { \
+ continue; \
+ } \
+ if (CANPASS_DENSITY) { \
+ if (AM.density) { \
+ ret |= AIR_BLOCKED; \
+ } \
+ } \
+ if (CANPASS_PROC) { \
+ ret |= AM.c_airblock(B); \
+ } \
+ if (CANPASS_NEVER) { \
+ ret = BLOCKED; \
+ } \
+ } \
+ if (ret == BLOCKED) { \
+ break;\
+ }\
+ }\
+ }
+
+#endif
diff --git a/code/__defines/_compile_options.dm b/code/__defines/_compile_options.dm
new file mode 100644
index 00000000..2595ee6d
--- /dev/null
+++ b/code/__defines/_compile_options.dm
@@ -0,0 +1,2 @@
+#define BACKGROUND_ENABLED 0 // The default value for all uses of set background. Set background can cause gradual lag and is recommended you only turn this on if necessary.
+ // 1 will enable set background. 0 will disable set background.
\ No newline at end of file
diff --git a/code/__defines/_planes+layers.dm b/code/__defines/_planes+layers.dm
new file mode 100644
index 00000000..48dcd1a4
--- /dev/null
+++ b/code/__defines/_planes+layers.dm
@@ -0,0 +1,375 @@
+/*This file is a list of all preclaimed planes & layers
+
+All planes & layers should be given a value here instead of using a magic/arbitrary number.
+
+After fiddling with planes and layers for some time, I figured I may as well provide some documentation:
+
+What are planes?
+ Think of Planes as a sort of layer for a layer - if plane X is a larger number than plane Y, the highest number for a layer in X will be below the lowest
+ number for a layer in Y.
+ Planes also have the added bonus of having planesmasters.
+
+What are Planesmasters?
+ Planesmasters, when in the sight of a player, will have its appearance properties (for example, colour matrices, alpha, transform, etc)
+ applied to all the other objects in the plane. This is all client sided.
+ Usually you would want to add the planesmaster as an invisible image in the client's screen.
+
+What can I do with Planesmasters?
+ You can: Make certain players not see an entire plane,
+ Make an entire plane have a certain colour matrices,
+ Make an entire plane transform in a certain way,
+ Make players see a plane which is hidden to normal players - I intend to implement this with the antag HUDs for example.
+ Planesmasters can be used as a neater way to deal with client images or potentially to do some neat things
+
+How do planes work?
+ A plane can be any integer from -100 to 100. (If you want more, bug lummox.)
+ All planes above 0, the 'base plane', are visible even when your character cannot 'see' them, for example, the HUD.
+ All planes below 0, the 'base plane', are only visible when a character can see them.
+
+How do I add a plane?
+ Think of where you want the plane to appear, look through the pre-existing planes and find where it is above and where it is below
+ Slot it in in that place, and change the pre-existing planes, making sure no plane shares a number.
+ Add a description with a comment as to what the plane does.
+
+How do I make something a planesmaster?
+ Add the PLANE_MASTER appearance flag to the appearance_flags variable.
+
+What is the naming convention for planes or layers?
+ Make sure to use the name of your object before the _LAYER or _PLANE, eg: [NAME_OF_YOUR_OBJECT HERE]_LAYER or [NAME_OF_YOUR_OBJECT HERE]_PLANE
+ Also, as it's a define, it is standard practice to use capital letters for the variable so people know this.
+
+*/
+
+/*
+ from stddef.dm, planes & layers built into byond.
+
+ FLOAT_LAYER = -1
+ AREA_LAYER = 1
+ TURF_LAYER = 2
+ OBJ_LAYER = 3
+ MOB_LAYER = 4
+ FLY_LAYER = 5
+ EFFECTS_LAYER = 5000
+ TOPDOWN_LAYER = 10000
+ BACKGROUND_LAYER = 20000
+ EFFECTS_LAYER = 5000
+ TOPDOWN_LAYER = 10000
+ BACKGROUND_LAYER = 20000
+ ------
+
+ FLOAT_PLANE = -32767
+*/
+
+#define CLICKCATCHER_PLANE -500
+
+#define HIDDEN_SHIT_PLANE -499 //Used for the hiding of the vision cone masking object.
+#define SPACE_PLANE -498
+#define SKYBOX_PLANE SPACE_PLANE + 1
+
+#define DUST_PLANE SPACE_PLANE + 2
+ #define DEBRIS_LAYER 1
+ #define DUST_LAYER 2
+
+//Reserve planes for openspace
+#define OPENSPACE_PLANE_START -462
+#define OPENSPACE_PLANE_END -22
+#define OPENSPACE_PLANE -99 //-463
+#define UNDER_OPENSPACE_PLANE -100
+#define OVER_OPENSPACE_PLANE -17
+
+
+#define BELOW_TURF_PLANE -22 // objects that are below turfs. Useful for asteroid smoothing or other such magic.
+ // TURF_LAYER 2
+
+#define PLATING_PLANE -21
+ #define PLATING_LAYER 1
+
+#define ABOVE_PLATING_PLANE -20
+
+ #define HOLOMAP_LAYER 2 // NOTE: ENSURE this is equal to the one at ABOVE_TURF_PLANE!
+ #define DECAL_PLATING_LAYER 3
+ #define DISPOSALS_PIPE_LAYER 4
+ #define LATTICE_LAYER 5
+ #define PIPE_LAYER 6
+ #define WIRE_LAYER 7
+ #define WIRE_TERMINAL_LAYER 8
+ #define ABOVE_WIRE_LAYER 9
+
+#define TURF_PLANE -19
+
+ #define BASE_TURF_LAYER -999
+ #define TURF_DETAIL_LAYER 11
+
+#define WALL_PLANE -18
+
+
+#define ABOVE_TURF_PLANE -16 // For items which should appear above turfs but below other objects and hiding mobs, eg: wires & pipes
+
+ //#define HOLOMAP_LAYER 1 // NOTE: ENSURE this is equal to the one at ABOVE_PLATING_PLANE!
+ #define DECAL_LAYER 12
+ #define RUNE_LAYER 13
+ #define ABOVE_TILE_LAYER 14
+ #define EXPOSED_PIPE_LAYER 15
+ #define EXPOSED_WIRE_LAYER 16
+ #define EXPOSED_WIRE_TERMINAL_LAYER 17
+ #define CATWALK_LAYER 18
+ #define BLOOD_LAYER 19
+ #define MOUSETRAP_LAYER 20
+ #define PLANT_LAYER 21
+ #define AO_LAYER 22
+
+#define HIDING_MOB_PLANE -16 // for hiding mobs like MoMMIs or spiders or whatever, under most objects but over pipes & such.
+
+ #define HIDING_MOB_LAYER 0
+
+#define OBJ_PLANE -15 // For objects which appear below humans.
+ #define BELOW_DOOR_LAYER 23
+ #define OPEN_DOOR_LAYER 24
+ #define BELOW_TABLE_LAYER 25
+ #define TABLE_LAYER 26
+ #define BELOW_OBJ_LAYER 27
+ #define BASE_OBJ_LAYER 28
+ #define ABOVE_OBJ_LAYER 29
+ #define CLOSED_DOOR_LAYER 30
+ #define ABOVE_DOOR_LAYER 31
+ #define SIDE_WINDOW_LAYER 32
+ #define FULL_WINDOW_LAYER 33
+ #define ABOVE_WINDOW_LAYER 34
+
+#define LYING_MOB_PLANE -14 // other mobs that are lying down.
+
+ #define LYING_MOB_LAYER 35
+
+#define LYING_HUMAN_PLANE -13 // humans that are lying down
+
+ #define LYING_HUMAN_LAYER 36
+
+#define ABOVE_OBJ_PLANE -12 // for objects that are below humans when they are standing but above them when they are not. - eg, blankets.
+
+ #define BASE_ABOVE_OBJ_LAYER 37
+
+#define HUMAN_PLANE -10 // For Humans that are standing up.
+ #define BASE_MOB_LAYER 38
+
+#define ANON_PLANE -9 //For the anonymous blur effect.
+
+#define MOB_PLANE -11 // For Mobs.
+ // MOB_LAYER 4
+
+#define ABOVE_HUMAN_PLANE -6 // For things that should appear above humans.
+
+ #define ABOVE_HUMAN_LAYER 39
+ #define VEHICLE_LOAD_LAYER 40
+ #define CAMERA_LAYER 41
+
+#define BLOB_PLANE -5 // For Blobs, which are above humans.
+
+ #define BLOB_SHIELD_LAYER 42
+ #define BLOB_NODE_LAYER 43
+ #define BLOB_CORE_LAYER 44
+
+#define BULLET_PLANE -5 //Same as blob plane but blobs are not used in warfare.
+
+#define EFFECTS_BELOW_LIGHTING_PLANE -4 // For special effects.
+
+ #define BELOW_PROJECTILE_LAYER 45
+ #define FIRE_LAYER 46
+ #define PROJECTILE_LAYER 47
+ #define ABOVE_PROJECTILE_LAYER 48
+ #define SINGULARITY_LAYER 49
+ #define POINTER_LAYER 50
+
+#define OBSERVER_PLANE -3 // For observers and ghosts
+
+#define LIGHTING_PLANE -2 // For Lighting. - The highest plane (ignoring all other even higher planes)
+
+ #define LIGHTBULB_LAYER 0
+ //#define LIGHTING_LAYER 1
+ #define ABOVE_LIGHTING_LAYER 2
+ #define SUPER_PORTAL_LAYER 3
+ #define NARSIE_GLOW 4
+
+#define EFFECTS_ABOVE_LIGHTING_PLANE -1 // For glowy eyes, laser beams, etc. that shouldn't be affected by darkness
+ #define EYE_GLOW_LAYER 1
+ #define BEAM_PROJECTILE_LAYER 2
+ #define SUPERMATTER_WALL_LAYER 3
+
+#define BASE_PLANE 0 // Not for anything, but this is the default.
+ #define BASE_AREA_LAYER 999
+
+#define OBSCURITY_PLANE 2 // For visualnets, such as the AI's static.
+
+#define FULLSCREEN_PLANE 3 // for fullscreen overlays that do not cover the hud.
+
+ #define FULLSCREEN_LAYER 0
+ #define SCREEN_DAMAGE_LAYER 1
+ #define IMPAIRED_LAYER 2
+ #define BLIND_LAYER 3
+ #define CRIT_LAYER 4
+ #define HALLUCINATION_LAYER 5
+
+#define ABOVE_FULLSCREEN_PLANE 4
+
+#define VISION_CONE_PLANE 5 // For the vision cone.
+
+#define FOOTSTEP_ALERT_PLANE 6 // Hacky fix for the footsteps not being a thing.
+
+#define HUD_PLANE 7 // For the Head-Up Display
+
+ #define UNDER_HUD_LAYER 0
+ #define HUD_BASE_LAYER 1
+ #define HUD_ITEM_LAYER 2
+ #define HUD_ABOVE_ITEM_LAYER 3
+
+
+
+
+
+
+
+
+#define AMBIENT_OCCLUSION filter(type="drop_shadow", x=0, y=-2, size=4, color="#04080FAA")
+
+//This is difference between highest and lowest visible
+#define PLANE_DIFFERENCE 22
+/image
+ plane = FLOAT_PLANE // this is defunct, lummox fixed this on recent compilers, but it will bug out if I remove it for coders not on the most recent compile.
+
+/image/proc/plating_decal_layerise()
+ plane = ABOVE_PLATING_PLANE
+ layer = DECAL_PLATING_LAYER
+
+/image/proc/turf_decal_layerise()
+ plane = ABOVE_TURF_PLANE
+ layer = DECAL_LAYER
+
+/atom/proc/hud_layerise()
+ plane = HUD_PLANE
+ layer = HUD_ITEM_LAYER
+
+/atom/proc/reset_plane_and_layer()
+ plane = initial(plane)
+ layer = initial(layer)
+
+/*
+ PLANE MASTERS
+*/
+
+/obj/blur_planemaster
+ appearance_flags = PLANE_MASTER
+ plane = OPENSPACE_PLANE
+ screen_loc = "1,1"
+ filters = filter(type = "blur", size = 1)
+
+//I don't know what the fuck this shit is used for.
+/obj/screen/plane_master
+ appearance_flags = PLANE_MASTER
+ screen_loc = "CENTER,CENTER"
+ globalscreen = 1
+
+/obj/screen/plane_master/ghost_master
+ plane = OBSERVER_PLANE
+ filters = filter(type = "blur", size = 1)
+
+/obj/screen/plane_master/bullet_plane
+ plane = BULLET_PLANE
+ filters = filter(type = "blur", size = 1)
+
+/obj/screen/plane_master/human_blur
+ plane = HUMAN_PLANE
+ filters = filter(type = "blur", size = 2)
+
+/obj/screen/plane_master/turf_blur
+ plane = TURF_PLANE
+ filters = filter(type = "blur", size = 2)
+
+/obj/screen/plane_master/wall_blur
+ plane = WALL_PLANE
+ filters = filter(type = "blur", size = 2)
+
+/obj/screen/plane_master/obj_blur
+ plane = OBJ_PLANE
+ filters = filter(type = "blur", size = 2)
+
+/obj/screen/plane_master/lhuman_blur
+ plane = LYING_HUMAN_PLANE
+ filters = filter(type = "blur", size = 2)
+
+/obj/screen/plane_master/mob_blur
+ plane = MOB_PLANE
+ filters = filter(type = "blur", size = 2)
+
+/obj/screen/plane_master/above_human_blur
+ plane = ABOVE_HUMAN_PLANE
+ filters = filter(type = "blur", size = 2)
+
+/obj/screen/plane_master/abover_turf_blur
+ plane = ABOVE_TURF_PLANE
+ filters = filter(type = "blur", size = 2)
+
+/obj/screen/plane_master/abover_obj_blur
+ plane = ABOVE_OBJ_PLANE
+ filters = filter(type = "blur", size = 2)
+
+/obj/screen/plane_master/plating_blur
+ plane = PLATING_PLANE
+ filters = filter(type = "blur", size = 2)
+
+/obj/screen/plane_master/effects_blur
+ plane = EFFECTS_BELOW_LIGHTING_PLANE
+ filters = filter(type = "blur", size = 2)
+
+/obj/screen/plane_master/ghost_dummy
+ // this avoids a bug which means plane masters which have nothing to control get angry and mess with the other plane masters out of spite
+ alpha = 0
+ appearance_flags = 0
+ plane = OBSERVER_PLANE
+
+GLOBAL_LIST_INIT(ghost_master, list(
+ new /obj/screen/plane_master/ghost_master(),
+ new /obj/screen/plane_master/ghost_dummy()
+))
+
+
+/obj/screen/plane_master/humanAO
+ plane = HUMAN_PLANE
+ filters = AMBIENT_OCCLUSION
+
+/obj/screen/plane_master/wallAO
+ plane = WALL_PLANE
+ filters = AMBIENT_OCCLUSION
+
+/obj/screen/plane_master/objectAO
+ plane = OBJ_PLANE
+ filters = AMBIENT_OCCLUSION
+
+/obj/screen/plane_master/lying_human
+ plane = LYING_HUMAN_PLANE
+ filters = AMBIENT_OCCLUSION
+
+/obj/screen/plane_master/mobAO
+ plane = MOB_PLANE
+ filters = AMBIENT_OCCLUSION
+
+
+/obj/screen/plane_master/vision_cone_target
+ name = "vision cone master"
+ plane = HIDDEN_SHIT_PLANE
+ render_target = "vision_cone_target"
+
+/obj/screen/plane_master/vision_cone_blender
+ render_target = "vision_cone_target"
+
+//A series of vision related masters. They all have the same RT name to lower load on client.
+/obj/screen/plane_master/vision_cone/
+
+/obj/screen/plane_master/vision_cone/primary/Initialize() //For when you want things to not appear under the blind section.
+ . = ..()
+ filters += filter(type="alpha", render_source="vision_cone_target", flags=MASK_INVERSE)
+
+/obj/screen/plane_master/vision_cone/inverted //for things you want specifically to show up on the blind section.
+
+
+/obj/screen/plane_master/vision_cone/inverted/Initialize()
+ . = ..()
+ filters += filter(type="alpha", render_source="vision_cone_target")
diff --git a/code/__defines/_tick.dm b/code/__defines/_tick.dm
new file mode 100644
index 00000000..9609333e
--- /dev/null
+++ b/code/__defines/_tick.dm
@@ -0,0 +1,21 @@
+#define TICK_LIMIT_RUNNING 80
+#define TICK_LIMIT_TO_RUN 78
+#define TICK_LIMIT_MC 70
+#define TICK_LIMIT_MC_INIT_DEFAULT 98
+
+#define TICK_USAGE world.tick_usage //for general usage
+#define TICK_USAGE_REAL world.tick_usage //to be used where the result isn't checked
+
+#define TICK_CHECK ( TICK_USAGE > Master.current_ticklimit )
+#define CHECK_TICK if TICK_CHECK stoplag()
+
+//"fancy" math for calculating time in ms from tick_usage percentage and the length of ticks
+//percent_of_tick_used * (ticklag * 100(to convert to ms)) / 100(percent ratio)
+//collapsed to percent_of_tick_used * tick_lag
+#define TICK_DELTA_TO_MS(percent_of_tick_used) ((percent_of_tick_used) * world.tick_lag)
+#define TICK_USAGE_TO_MS(starting_tickusage) (TICK_DELTA_TO_MS(TICK_USAGE_REAL - starting_tickusage))
+
+//time of day but automatically adjusts to the server going into the next day within the same round.
+//for when you need a reliable time number that doesn't depend on byond time.
+#define REALTIMEOFDAY (world.timeofday + (MIDNIGHT_ROLLOVER * MIDNIGHT_ROLLOVER_CHECK))
+#define MIDNIGHT_ROLLOVER_CHECK ( GLOB.rollovercheck_last_timeofday != world.timeofday ? update_midnight_rollover() : GLOB.midnight_rollovers )
diff --git a/code/__defines/admin.dm b/code/__defines/admin.dm
new file mode 100644
index 00000000..2ebe4a1e
--- /dev/null
+++ b/code/__defines/admin.dm
@@ -0,0 +1,49 @@
+// A set of constants used to determine which type of mute an admin wishes to apply.
+// Please read and understand the muting/automuting stuff before changing these. MUTE_IC_AUTO, etc. = (MUTE_IC << 1)
+// Therefore there needs to be a gap between the flags for the automute flags.
+#define MUTE_IC 0x1
+#define MUTE_OOC 0x2
+#define MUTE_PRAY 0x4
+#define MUTE_ADMINHELP 0x8
+#define MUTE_DEADCHAT 0x10
+#define MUTE_AOOC 0x20
+#define MUTE_ALL 0xFFFF
+
+// Some constants for DB_Ban
+#define BANTYPE_PERMA 1
+#define BANTYPE_TEMP 2
+#define BANTYPE_JOB_PERMA 3
+#define BANTYPE_JOB_TEMP 4
+#define BANTYPE_ANY_FULLBAN 5 // Used to locate stuff to unban.
+
+#define ROUNDSTART_LOGOUT_REPORT_TIME 6000 // Amount of time (in deciseconds) after the rounds starts, that the player disconnect report is issued.
+
+// Admin permissions.
+#define R_BUILDMODE 0x1
+#define R_ADMIN 0x2
+#define R_BAN 0x4
+#define R_FUN 0x8
+#define R_SERVER 0x10
+#define R_DEBUG 0x20
+#define R_POSSESS 0x40
+#define R_PERMISSIONS 0x80
+#define R_STEALTH 0x100
+#define R_REJUVINATE 0x200
+#define R_VAREDIT 0x400
+#define R_SOUNDS 0x800
+#define R_SPAWN 0x1000
+#define R_MOD 0x2000
+#define R_MENTOR 0x4000
+#define R_HOST 0x8000 //higher than this will overflow
+#define R_INVESTIGATE (R_ADMIN|R_MOD)
+#define TESTALLRANKS (R_HOST | R_BUILDMODE | R_ADMIN | R_BAN | R_FUN | R_SERVER | R_DEBUG | R_PERMISSIONS | R_POSSESS | R_STEALTH | R_REJUVINATE | R_VAREDIT | R_SOUNDS | R_SPAWN | R_MOD| R_MENTOR)
+
+#define R_MAXPERMISSION 0x8000 // This holds the maximum value for a permission. It is used in iteration, so keep it updated.
+
+#define ADDANTAG_PLAYER 1 // Any player may call the add antagonist vote.
+#define ADDANTAG_ADMIN 2 // Any player with admin privilegies may call the add antagonist vote.
+#define ADDANTAG_AUTO 4 // The add antagonist vote is available as an alternative for transfer vote.
+
+#define TICKET_CLOSED 0 // Ticket has been resolved or declined
+#define TICKET_OPEN 1 // Ticket has been created, but not responded to
+#define TICKET_ASSIGNED 2 // An admin has assigned themself to the ticket and will respond
\ No newline at end of file
diff --git a/code/__defines/appearance.dm b/code/__defines/appearance.dm
new file mode 100644
index 00000000..faa97e8f
--- /dev/null
+++ b/code/__defines/appearance.dm
@@ -0,0 +1,3 @@
+// Consider these images/atoms as part of the UI/HUD
+#define APPEARANCE_UI_IGNORE_ALPHA RESET_COLOR|RESET_TRANSFORM|NO_CLIENT_COLOR|RESET_ALPHA
+#define APPEARANCE_UI RESET_COLOR|RESET_TRANSFORM|NO_CLIENT_COLOR
diff --git a/code/__defines/atmos.dm b/code/__defines/atmos.dm
new file mode 100644
index 00000000..ba0fe314
--- /dev/null
+++ b/code/__defines/atmos.dm
@@ -0,0 +1,109 @@
+
+#define CELL_VOLUME 2500 // Liters in a cell.
+#define MOLES_CELLSTANDARD (ONE_ATMOSPHERE*CELL_VOLUME/(T20C*R_IDEAL_GAS_EQUATION)) // Moles in a 2.5 m^3 cell at 101.325 kPa and 20 C.
+
+#define O2STANDARD 0.21 // Percentage.
+#define N2STANDARD 0.79
+
+#define MOLES_PHORON_VISIBLE 0.7 // Moles in a standard cell after which phoron is visible.
+#define MOLES_O2STANDARD (MOLES_CELLSTANDARD * O2STANDARD) // O2 standard value (21%)
+#define MOLES_N2STANDARD (MOLES_CELLSTANDARD * N2STANDARD) // N2 standard value (79%)
+#define MOLES_O2ATMOS (MOLES_O2STANDARD*50)
+#define MOLES_N2ATMOS (MOLES_N2STANDARD*50)
+
+// These are for when a mob breathes poisonous air.
+#define MIN_TOXIN_DAMAGE 1
+#define MAX_TOXIN_DAMAGE 10
+
+#define STD_BREATH_VOLUME 12 // Liters in a normal breath.
+
+#define HUMAN_HEAT_CAPACITY 280000 //J/K For 80kg person
+
+#define SOUND_MINIMUM_PRESSURE 10
+
+#define PRESSURE_DAMAGE_COEFFICIENT 4 // The amount of pressure damage someone takes is equal to (pressure / HAZARD_HIGH_PRESSURE)*PRESSURE_DAMAGE_COEFFICIENT, with the maximum of MAX_PRESSURE_DAMAGE.
+#define MAX_HIGH_PRESSURE_DAMAGE 4 // This used to be 20... I got this much random rage for some retarded decision by polymorph?! Polymorph now lies in a pool of blood with a katana jammed in his spleen. ~Errorage --PS: The katana did less than 20 damage to him :(
+#define LOW_PRESSURE_DAMAGE 2 // The amount of damage someone takes when in a low pressure area. (The pressure threshold is so low that it doesn't make sense to do any calculations, so it just applies this flat value).
+
+#define MINIMUM_PRESSURE_DIFFERENCE_TO_SUSPEND (MINIMUM_AIR_TO_SUSPEND*R_IDEAL_GAS_EQUATION*T20C)/CELL_VOLUME // Minimum pressure difference between zones to suspend
+#define MINIMUM_AIR_RATIO_TO_SUSPEND 0.05 // Minimum ratio of air that must move to/from a tile to suspend group processing
+#define MINIMUM_AIR_TO_SUSPEND (MOLES_CELLSTANDARD * MINIMUM_AIR_RATIO_TO_SUSPEND) // Minimum amount of air that has to move before a group processing can be suspended
+#define MINIMUM_MOLES_DELTA_TO_MOVE (MOLES_CELLSTANDARD * MINIMUM_AIR_RATIO_TO_SUSPEND) // Either this must be active
+#define MINIMUM_TEMPERATURE_TO_MOVE (T20C + 100) // or this (or both, obviously)
+
+#define MINIMUM_TEMPERATURE_RATIO_TO_SUSPEND 0.012 // Minimum temperature difference before group processing is suspended.
+#define MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND 4
+#define MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER 0.5 // Minimum temperature difference before the gas temperatures are just set to be equal.
+#define MINIMUM_TEMPERATURE_FOR_SUPERCONDUCTION (T20C + 10)
+#define MINIMUM_TEMPERATURE_START_SUPERCONDUCTION (T20C + 200)
+
+// Must be between 0 and 1. Values closer to 1 equalize temperature faster. Should not exceed 0.4, else strange heat flow occurs.
+#define FLOOR_HEAT_TRANSFER_COEFFICIENT 0.4
+#define WALL_HEAT_TRANSFER_COEFFICIENT 0.0
+#define DOOR_HEAT_TRANSFER_COEFFICIENT 0.0
+#define SPACE_HEAT_TRANSFER_COEFFICIENT 0.2 // A hack to partly simulate radiative heat.
+#define OPEN_HEAT_TRANSFER_COEFFICIENT 0.4
+#define WINDOW_HEAT_TRANSFER_COEFFICIENT 0.1 // A hack for now.
+
+// Fire damage.
+#define CARBON_LIFEFORM_FIRE_RESISTANCE (T0C + 200)
+#define CARBON_LIFEFORM_FIRE_DAMAGE 4
+
+// Phoron fire properties.
+#define PHORON_MINIMUM_BURN_TEMPERATURE (T0C + 126) //400 K - autoignite temperature in tanks and canisters - enclosed environments I guess
+#define PHORON_FLASHPOINT (T0C + 246) //519 K - autoignite temperature in air if that ever gets implemented.
+
+//These control the mole ratio of oxidizer and fuel used in the combustion reaction
+#define FIRE_REACTION_OXIDIZER_AMOUNT 3 //should be greater than the fuel amount if fires are going to spread much
+#define FIRE_REACTION_FUEL_AMOUNT 2
+
+//These control the speed at which fire burns
+#define FIRE_GAS_BURNRATE_MULT 1
+#define FIRE_LIQUID_BURNRATE_MULT 0.225
+
+//If the fire is burning slower than this rate then the reaction is going too slow to be self sustaining and the fire burns itself out.
+//This ensures that fires don't grind to a near-halt while still remaining active forever.
+#define FIRE_GAS_MIN_BURNRATE 0.01
+#define FIRE_LIQUD_MIN_BURNRATE 0.0025
+
+//How many moles of fuel are contained within one solid/liquid fuel volume unit
+#define LIQUIDFUEL_AMOUNT_TO_MOL 0.45 //mol/volume unit
+
+// XGM gas flags.
+#define XGM_GAS_FUEL 1
+#define XGM_GAS_OXIDIZER 2
+#define XGM_GAS_CONTAMINANT 4
+#define XGM_GAS_FUSION_FUEL 8
+
+#define TANK_LEAK_PRESSURE (30.*ONE_ATMOSPHERE) // Tank starts leaking.
+#define TANK_RUPTURE_PRESSURE (40.*ONE_ATMOSPHERE) // Tank spills all contents into atmosphere.
+#define TANK_FRAGMENT_PRESSURE (50.*ONE_ATMOSPHERE) // Boom 3x3 base explosion.
+#define TANK_FRAGMENT_SCALE (10.*ONE_ATMOSPHERE) // +1 for each SCALE kPa above threshold. Was 2 atm.
+
+#define NORMPIPERATE 30 // Pipe-insulation rate divisor.
+#define HEATPIPERATE 8 // Heat-exchange pipe insulation.
+#define FLOWFRAC 0.99 // Fraction of gas transfered per process.
+
+//Flags for zone sleeping
+#define ZONE_ACTIVE 1
+#define ZONE_SLEEPING 0
+
+// Defines how much of certain gas do the Atmospherics tanks start with. Values are in kpa per tile (assuming 20C)
+#define ATMOSTANK_NITROGEN 90000 // A lot of N2 is needed to produce air mix, that's why we keep 90MPa of it
+#define ATMOSTANK_OXYGEN 40000 // O2 is also important for airmix, but not as much as N2 as it's only 21% of it.
+#define ATMOSTANK_CO2 25000 // CO2, PH, and H2 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_PHORON_FUEL 15000
+#define ATMOSTANK_HYDROGEN 25000
+#define ATMOSTANK_HYDROGEN_FUEL 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?
+
+#define MAX_PUMP_PRESSURE 15000 // Maximal pressure setting for pumps and vents
+#define MAX_OMNI_PRESSURE 7500 // Maximal output(s) pressure for omni devices (filters/mixers)
+
+//Used by turbine and TEG energy generation.
+#define ADIABATIC_EXPONENT 0.667 //Actually adiabatic exponent - 1.
+
+//Used by air tanks.
+#define TANK_MAX_RELEASE_PRESSURE (3*ONE_ATMOSPHERE)
+#define TANK_DEFAULT_RELEASE_PRESSURE ONE_ATMOSPHERE
diff --git a/code/__defines/atmospherics.dm b/code/__defines/atmospherics.dm
new file mode 100644
index 00000000..6f8f3f47
--- /dev/null
+++ b/code/__defines/atmospherics.dm
@@ -0,0 +1,63 @@
+#define PIPE_SIMPLE_STRAIGHT 0
+#define PIPE_SIMPLE_BENT 1
+#define PIPE_HE_STRAIGHT 2
+#define PIPE_HE_BENT 3
+#define PIPE_CONNECTOR 4
+#define PIPE_MANIFOLD 5
+#define PIPE_JUNCTION 6
+#define PIPE_UVENT 7
+#define PIPE_MVALVE 8
+#define PIPE_DVALVE 9
+#define PIPE_PUMP 10
+#define PIPE_SCRUBBER 11
+//#define unsed 12
+#define PIPE_GAS_FILTER 13
+#define PIPE_GAS_MIXER 14
+#define PIPE_PASSIVE_GATE 15
+#define PIPE_VOLUME_PUMP 16
+#define PIPE_HEAT_EXCHANGE 17
+#define PIPE_MTVALVE 18
+#define PIPE_MANIFOLD4W 19
+#define PIPE_CAP 20
+///// Z-Level stuff
+#define PIPE_UP 21
+#define PIPE_DOWN 22
+///// Z-Level stuff
+#define PIPE_GAS_FILTER_M 23
+#define PIPE_GAS_MIXER_T 24
+#define PIPE_GAS_MIXER_M 25
+#define PIPE_OMNI_MIXER 26
+#define PIPE_OMNI_FILTER 27
+///// Supply, scrubbers and universal pipes
+#define PIPE_UNIVERSAL 28
+#define PIPE_SUPPLY_STRAIGHT 29
+#define PIPE_SUPPLY_BENT 30
+#define PIPE_SCRUBBERS_STRAIGHT 31
+#define PIPE_SCRUBBERS_BENT 32
+#define PIPE_SUPPLY_MANIFOLD 33
+#define PIPE_SCRUBBERS_MANIFOLD 34
+#define PIPE_SUPPLY_MANIFOLD4W 35
+#define PIPE_SCRUBBERS_MANIFOLD4W 36
+#define PIPE_SUPPLY_UP 37
+#define PIPE_SCRUBBERS_UP 38
+#define PIPE_SUPPLY_DOWN 39
+#define PIPE_SCRUBBERS_DOWN 40
+#define PIPE_SUPPLY_CAP 41
+#define PIPE_SCRUBBERS_CAP 42
+///// Mirrored T-valve ~ because I couldn't be bothered re-sorting all of the defines
+#define PIPE_MTVALVEM 43
+///// I also couldn't be bothered sorting, so automatic shutoff valve.
+#define PIPE_SVALVE 44
+
+#define PIPE_FUEL_STRAIGHT 45
+#define PIPE_FUEL_BENT 46
+#define PIPE_FUEL_MANIFOLD 47
+#define PIPE_FUEL_MANIFOLD4W 48
+#define PIPE_FUEL_UP 49
+#define PIPE_FUEL_DOWN 50
+#define PIPE_FUEL_CAP 51
+
+#define CONNECT_TYPE_REGULAR 1
+#define CONNECT_TYPE_SUPPLY 2
+#define CONNECT_TYPE_SCRUBBER 4
+#define CONNECT_TYPE_HE 8
\ No newline at end of file
diff --git a/code/__defines/callback.dm b/code/__defines/callback.dm
new file mode 100644
index 00000000..26c81f8b
--- /dev/null
+++ b/code/__defines/callback.dm
@@ -0,0 +1,4 @@
+#define GLOBAL_PROC "some_magic_bullshit"
+
+#define CALLBACK new /datum/callback
+#define INVOKE_ASYNC ImmediateInvokeAsync
\ No newline at end of file
diff --git a/code/__defines/chemistry.dm b/code/__defines/chemistry.dm
new file mode 100644
index 00000000..8af6cb08
--- /dev/null
+++ b/code/__defines/chemistry.dm
@@ -0,0 +1,50 @@
+#define DEFAULT_HUNGER_FACTOR 0.03 // Factor of how fast mob nutrition decreases
+
+#define REM 0.2 // Means 'Reagent Effect Multiplier'. This is how many units of reagent are consumed per tick
+
+#define CHEM_TOUCH 1
+#define CHEM_INGEST 2
+#define CHEM_BLOOD 3
+
+#define MINIMUM_CHEMICAL_VOLUME 0.01
+
+#define REAGENT_SOLID 1
+#define REAGENT_LIQUID 2
+#define REAGENT_GAS 3
+
+#define REAGENTS_OVERDOSE 30
+
+#define CHEM_SYNTH_ENERGY 500 // How much energy does it take to synthesize 1 unit of chemical, in Joules.
+
+// Some on_mob_life() procs check for alien races.
+#define IS_DIONA 1
+#define IS_VOX 2
+#define IS_SKRELL 3
+#define IS_UNATHI 4
+#define IS_TAJARA 5
+#define IS_XENOS 6
+#define IS_SLIME 8
+#define IS_NABBER 9
+
+#define CE_STABLE "stable" // Inaprovaline
+#define CE_ANTIBIOTIC "antibiotic" // Spaceacilin
+#define CE_BLOODRESTORE "bloodrestore" // Iron/nutriment
+#define CE_PAINKILLER "painkiller"
+#define CE_ALCOHOL "alcohol" // Liver filtering
+#define CE_ALCOHOL_TOXIC "alcotoxic" // Liver damage
+#define CE_SPEEDBOOST "gofast" // Hyperzine
+#define CE_SLOWDOWN "goslow" // Slowdown
+#define CE_PULSE "xcardic" // increases or decreases heart rate
+#define CE_NOPULSE "heartstop" // stops heartbeat
+#define CE_ANTITOX "antitox" // Dylovene
+#define CE_OXYGENATED "oxygen" // Dexalin.
+#define CE_BRAIN_REGEN "brainfix" // Alkysine.
+#define CE_ANTIVIRAL "antiviral" // Anti-virus effect.
+#define CE_TOXIN "toxins" // Generic toxins, stops autoheal.
+#define CE_BREATHLOSS "breathloss" // Breathing depression, makes you need more air
+#define CE_MIND "mindbending" // Stabilizes or wrecks mind. Used for hallucinations
+#define CE_CRYO "cryogenic" // Prevents damage from being frozen
+
+//reagent flags
+#define IGNORE_MOB_SIZE 0x1
+#define AFFECTS_DEAD 0x2
diff --git a/code/__defines/client.dm b/code/__defines/client.dm
new file mode 100644
index 00000000..0794c852
--- /dev/null
+++ b/code/__defines/client.dm
@@ -0,0 +1,2 @@
+#define CLIENT_MIN_FPS 0
+#define CLIENT_MAX_FPS 1000
diff --git a/code/__defines/colors.dm b/code/__defines/colors.dm
new file mode 100644
index 00000000..6c430184
--- /dev/null
+++ b/code/__defines/colors.dm
@@ -0,0 +1,62 @@
+// BYOND lower-cases color values, and thus we do so as well to ensure atom.color == COLOR_X will work correctly
+#define COLOR_BLACK "#000000"
+#define COLOR_NAVY_BLUE "#000080"
+#define COLOR_GREEN "#008000"
+#define COLOR_DARK_GRAY "#404040"
+#define COLOR_MAROON "#800000"
+#define COLOR_PURPLE "#800080"
+#define COLOR_VIOLET "#9933ff"
+#define COLOR_OLIVE "#808000"
+#define COLOR_BROWN_ORANGE "#824b28"
+#define COLOR_DARK_ORANGE "#b95a00"
+#define COLOR_GRAY40 "#666666"
+#define COLOR_SEDONA "#cc6600"
+#define COLOR_DARK_BROWN "#917448"
+#define COLOR_BLUE "#0000ff"
+#define COLOR_DEEP_SKY_BLUE "#00e1ff"
+#define COLOR_LIME "#00ff00"
+#define COLOR_CYAN "#00ffff"
+#define COLOR_TEAL "#33cccc"
+#define COLOR_RED "#ff0000"
+#define COLOR_PINK "#ff00ff"
+#define COLOR_ORANGE "#ff9900"
+#define COLOR_YELLOW "#ffff00"
+#define COLOR_GRAY "#808080"
+#define COLOR_RED_GRAY "#aa5f61"
+#define COLOR_BROWN "#b19664"
+#define COLOR_GREEN_GRAY "#8daf6a"
+#define COLOR_BLUE_GRAY "#6a97b0"
+#define COLOR_SUN "#ec8b2f"
+#define COLOR_PURPLE_GRAY "#a2819e"
+#define COLOR_BLUE_LIGHT "#33ccff"
+#define COLOR_RED_LIGHT "#ff3333"
+#define COLOR_BEIGE "#ceb689"
+#define COLOR_PALE_GREEN_GRAY "#aed18b"
+#define COLOR_PALE_RED_GRAY "#cc9090"
+#define COLOR_PALE_PURPLE_GRAY "#bda2ba"
+#define COLOR_PALE_BLUE_GRAY "#8bbbd5"
+#define COLOR_LUMINOL "#66ffff"
+#define COLOR_SILVER "#c0c0c0"
+#define COLOR_GRAY80 "#cccccc"
+#define COLOR_OFF_WHITE "#eeeeee"
+#define COLOR_WHITE "#ffffff"
+#define COLOR_NT_RED "#9d2300"
+#define COLOR_GUNMETAL "#80868e"
+#define COLOR_MUZZLE_FLASH "#ffffb2"
+#define COLOR_CHESTNUT "#996633"
+#define COLOR_BEASTY_BROWN "#663300"
+#define COLOR_WHEAT "#ffff99"
+#define COLOR_CYAN_BLUE "#3366cc"
+#define COLOR_LIGHT_CYAN "#66ccff"
+#define COLOR_PAKISTAN_GREEN "#006600"
+
+#define PIPE_COLOR_GREY "#ffffff" //yes white is grey
+#define PIPE_COLOR_RED "#ff0000"
+#define PIPE_COLOR_BLUE "#0000ff"
+#define PIPE_COLOR_CYAN "#00ffff"
+#define PIPE_COLOR_GREEN "#00ff00"
+#define PIPE_COLOR_YELLOW "#ffcc00"
+#define PIPE_COLOR_BLACK "#444444"
+#define PIPE_COLOR_ORANGE "#b95a00"
+
+#define COLOR_BLOOD_HUMAN "#a10808"
diff --git a/code/__defines/components.dm b/code/__defines/components.dm
new file mode 100644
index 00000000..f2270733
--- /dev/null
+++ b/code/__defines/components.dm
@@ -0,0 +1,17 @@
+//shorthand
+#define GET_COMPONENT_FROM(varname, path, target) var##path/##varname = ##target.GetComponent(##path)
+#define GET_COMPONENT(varname, path) GET_COMPONENT_FROM(varname, path, src)
+
+// How multiple components of the exact same type are handled in the same datum
+
+#define COMPONENT_DUPE_HIGHLANDER 0 //old component is deleted (default)
+#define COMPONENT_DUPE_ALLOWED 1 //duplicates allowed
+#define COMPONENT_DUPE_UNIQUE 2 //new component is deleted
+
+// All signals. Format:
+// When the signal is called: (signal arguments)
+
+#define COMSIG_COMPONENT_ADDED "component_added" //when a component is added to a datum: (datum/component)
+#define COMSIG_COMPONENT_REMOVING "component_removing" //before a component is removed from a datum because of RemoveComponent: (datum/component)
+#define COMSIG_PARENT_QDELETED "parent_qdeleted" //before a datum's Destroy() is called: ()
+#define COMSIG_UNARMEDATTACK "UnarmedAttack"
\ No newline at end of file
diff --git a/code/__defines/damage_organs.dm b/code/__defines/damage_organs.dm
new file mode 100644
index 00000000..db75714e
--- /dev/null
+++ b/code/__defines/damage_organs.dm
@@ -0,0 +1,78 @@
+// Damage things. TODO: Merge these down to reduce on defines.
+// Way to waste perfectly good damage-type names (BRUTE) on this... If you were really worried about case sensitivity, you could have just used lowertext(damagetype) in the proc.
+#define BRUTE "brute"
+#define BURN "fire"
+#define TOX "tox"
+#define OXY "oxy"
+#define CLONE "clone"
+#define PAIN "pain"
+#define ELECTROCUTE "electrocute"
+#define STAMINA "stamina"
+
+
+#define CUT "cut"
+#define BRUISE "bruise"
+#define PIERCE "pierce"
+#define LASER "laser"
+
+#define STUN "stun"
+#define WEAKEN "weaken"
+#define PARALYZE "paralize"
+#define IRRADIATE "irradiate"
+#define SLUR "slur"
+#define STUTTER "stutter"
+#define EYE_BLUR "eye_blur"
+#define DROWSY "drowsy"
+
+// Damage flags
+#define DAM_SHARP (1<<0)
+#define DAM_EDGE (1<<1)
+#define DAM_LASER (1<<2)
+
+#define FIRE_DAMAGE_MODIFIER 0.0215 // Higher values result in more external fire damage to the skin. (default 0.0215)
+#define AIR_DAMAGE_MODIFIER 2.025 // More means less damage from hot air scalding lungs, less = more damage. (default 2.025)
+
+// Organ defines.
+#define ORGAN_CUT_AWAY (1<<0)
+#define ORGAN_BLEEDING (1<<1)
+#define ORGAN_BROKEN (1<<2)
+#define ORGAN_DEAD (1<<3)
+#define ORGAN_MUTATED (1<<4)
+#define ORGAN_ARTERY_CUT (1<<6)
+#define ORGAN_TENDON_CUT (1<<7)
+
+#define DROPLIMB_EDGE 0
+#define DROPLIMB_BLUNT 1
+#define DROPLIMB_BURN 2
+
+// Robotics hatch_state defines.
+#define HATCH_CLOSED 0
+#define HATCH_UNSCREWED 1
+#define HATCH_OPENED 2
+
+// These control the amount of blood lost from burns. The loss is calculated so
+// that dealing just enough burn damage to kill the player will cause the given
+// proportion of their max blood volume to be lost
+// (e.g. 0.6 == 60% lost if 200 burn damage is taken).
+#define FLUIDLOSS_WIDE_BURN 0.6 //for burns from heat applied over a wider area, like from fire
+#define FLUIDLOSS_CONC_BURN 0.4 //for concentrated burns, like from lasers
+
+// Damage above this value must be repaired with surgery.
+#define ROBOLIMB_SELF_REPAIR_CAP 30
+
+#define ORGAN_ASSISTED 1
+#define ORGAN_ROBOT 2
+
+//Germs and infections.
+#define GERM_LEVEL_AMBIENT 110 // Maximum germ level you can reach by standing still.
+#define GERM_LEVEL_MOVE_CAP 200 // Maximum germ level you can reach by running around.
+
+#define INFECTION_LEVEL_ONE 100
+#define INFECTION_LEVEL_TWO 500
+#define INFECTION_LEVEL_THREE 1000
+
+//Blood levels. These are percentages based on the species blood_volume far.
+#define BLOOD_VOLUME_SAFE 85
+#define BLOOD_VOLUME_OKAY 75
+#define BLOOD_VOLUME_BAD 60
+#define BLOOD_VOLUME_SURVIVE 40
\ No newline at end of file
diff --git a/code/__defines/deity.dm b/code/__defines/deity.dm
new file mode 100644
index 00000000..99f7511b
--- /dev/null
+++ b/code/__defines/deity.dm
@@ -0,0 +1,2 @@
+#define DEITY_STRUCTURE_NEAR_IMPORTANT 1 //Whether this needs to be near an important structure.
+#define DEITY_STRUCTURE_ALONE 2 //Whether this can be near another of the same type.
\ No newline at end of file
diff --git a/code/__defines/dna.dm b/code/__defines/dna.dm
new file mode 100644
index 00000000..547f8a23
--- /dev/null
+++ b/code/__defines/dna.dm
@@ -0,0 +1,76 @@
+// Bitflags for mutations.
+#define STRUCDNASIZE 27
+#define UNIDNASIZE 13
+
+// Generic mutations:
+#define TK 1
+#define COLD_RESISTANCE 2
+#define XRAY 3
+#define HULK 4
+#define CLUMSY 5
+#define FAT 6
+#define HUSK 7
+#define NOCLONE 8
+#define LASER_MUTATION 9 // Harm intent - click anywhere to shoot lasers from eyes.
+#define HEAL 10 // Healing people with hands.
+
+#define SKELETON 29
+#define PLANT 30
+
+// Other Mutations:
+#define mNobreath 100 // No need to breathe.
+#define mRemote 101 // Remote viewing.
+#define mRegen 102 // Health regeneration.
+#define mRun 103 // No slowdown.
+#define mRemotetalk 104 // Remote talking.
+#define mMorph 105 // Hanging appearance.
+#define mBlend 106 // Nothing. (seriously nothing)
+#define mHallucination 107 // Hallucinations.
+#define mFingerprints 108 // No fingerprints.
+#define mShock 109 // Insulated hands.
+#define mSmallsize 110 // Table climbing.
+
+// disabilities
+#define NEARSIGHTED 0x1
+#define EPILEPSY 0x2
+#define COUGHING 0x4
+#define TOURETTES 0x8
+#define NERVOUS 0x10
+
+// sdisabilities
+#define BLIND 0x1
+#define MUTE 0x2
+#define DEAF 0x4
+
+// The way blocks are handled badly needs a rewrite, this is horrible.
+// Too much of a project to handle at the moment, TODO for later.
+GLOBAL_VAR_INIT(BLINDBLOCK,0)
+GLOBAL_VAR_INIT(DEAFBLOCK,0)
+GLOBAL_VAR_INIT(HULKBLOCK,0)
+GLOBAL_VAR_INIT(TELEBLOCK,0)
+GLOBAL_VAR_INIT(FIREBLOCK,0)
+GLOBAL_VAR_INIT(XRAYBLOCK,0)
+GLOBAL_VAR_INIT(CLUMSYBLOCK,0)
+GLOBAL_VAR_INIT(FAKEBLOCK,0)
+GLOBAL_VAR_INIT(COUGHBLOCK,0)
+GLOBAL_VAR_INIT(GLASSESBLOCK,0)
+GLOBAL_VAR_INIT(EPILEPSYBLOCK,0)
+GLOBAL_VAR_INIT(TWITCHBLOCK,0)
+GLOBAL_VAR_INIT(NERVOUSBLOCK,0)
+GLOBAL_VAR_INIT(MONKEYBLOCK, STRUCDNASIZE)
+
+GLOBAL_VAR_INIT(BLOCKADD,0)
+GLOBAL_VAR_INIT(DIFFMUT,0)
+
+GLOBAL_VAR_INIT(HEADACHEBLOCK,0)
+GLOBAL_VAR_INIT(NOBREATHBLOCK,0)
+GLOBAL_VAR_INIT(REMOTEVIEWBLOCK,0)
+GLOBAL_VAR_INIT(REGENERATEBLOCK,0)
+GLOBAL_VAR_INIT(INCREASERUNBLOCK,0)
+GLOBAL_VAR_INIT(REMOTETALKBLOCK,0)
+GLOBAL_VAR_INIT(MORPHBLOCK,0)
+GLOBAL_VAR_INIT(BLENDBLOCK,0)
+GLOBAL_VAR_INIT(HALLUCINATIONBLOCK,0)
+GLOBAL_VAR_INIT(NOPRINTSBLOCK,0)
+GLOBAL_VAR_INIT(SHOCKIMMUNITYBLOCK,0)
+GLOBAL_VAR_INIT(SMALLSIZEBLOCK,0)
diff --git a/code/__defines/feedback.dm b/code/__defines/feedback.dm
new file mode 100644
index 00000000..9e6d7c3c
--- /dev/null
+++ b/code/__defines/feedback.dm
@@ -0,0 +1,2 @@
+#define FEEDBACK_YOU_LACK_DEXTERITY "You don't have the dexterity to do this!"
+#define FEEDBACK_ACCESS_DENIED "Access Denied!"
\ No newline at end of file
diff --git a/code/__defines/flags.dm b/code/__defines/flags.dm
new file mode 100644
index 00000000..958ac2cc
--- /dev/null
+++ b/code/__defines/flags.dm
@@ -0,0 +1,42 @@
+GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768))
+
+#define CLOSET_HAS_LOCK 1
+#define CLOSET_CAN_BE_WELDED 2
+
+#define CLOSET_STORAGE_MISC 1
+#define CLOSET_STORAGE_ITEMS 2
+#define CLOSET_STORAGE_MOBS 4
+#define CLOSET_STORAGE_STRUCTURES 8
+#define CLOSET_STORAGE_ALL (~0)
+
+// Flags bitmasks.
+
+#define ATOM_FLAG_CHECKS_BORDER 0x0001 // If a dense atom (potentially) only blocks movements from a given direction, i.e. window panes
+#define ATOM_FLAG_CLIMBABLE 0x0002 // This object can be climbed on
+#define ATOM_FLAG_NO_BLOOD 0x0004 // Used for items if they don't want to get a blood overlay.
+#define ATOM_FLAG_NO_REACT 0x0008 // Reagents don't react inside this container.
+#define ATOM_FLAG_OPEN_CONTAINER 0x0010 // Is an open container for chemistry purposes.
+
+#define MOVABLE_FLAG_PROXMOVE 0x0001 // Does this object require proximity checking in Enter()?
+
+#define OBJ_FLAG_ANCHORABLE 0x0001 // This object can be stuck in place with a tool
+#define OBJ_FLAG_CONDUCTIBLE 0x0002 // Conducts electricity. (metal etc.)
+
+//Flags for items (equipment)
+#define ITEM_FLAG_NO_BLUDGEON 0x0001 // When an item has this it produces no "X has been hit by Y with Z" message with the default handler.
+#define ITEM_FLAG_PHORONGUARD 0x0002 // Does not get contaminated by phoron.
+#define ITEM_FLAG_NO_PRINT 0x0004 // This object does not leave the user's prints/fibres when using it
+#define ITEM_FLAG_THICKMATERIAL 0x0010 // Prevents syringes, reagent pens, and hyposprays if equiped to slot_suit or slot_head.
+#define ITEM_FLAG_STOPPRESSUREDAMAGE 0x0020 // Counts towards pressure protection. Note that like temperature protection, body_parts_covered is considered here as well.
+#define ITEM_FLAG_AIRTIGHT 0x0040 // Functions with internals.
+#define ITEM_FLAG_NOSLIP 0x0080 // Prevents from slipping on wet floors, in space, etc.
+#define ITEM_FLAG_BLOCK_GAS_SMOKE_EFFECT 0x0100 // Blocks the effect that chemical clouds would have on a mob -- glasses, mask and helmets ONLY! (NOTE: flag shared with ONESIZEFITSALL)
+#define ITEM_FLAG_FLEXIBLEMATERIAL 0x0200 // At the moment, masks with this flag will not prevent eating even if they are covering your face.
+#define ITEM_FLAG_PREMODIFIED 0x0400 // Gloves that are clipped by default
+#define ITEM_FLAG_ABSTRACT 0x0800 // Shit that can't be seen when you examine a person.
+
+// Flags for pass_flags.
+#define PASS_FLAG_TABLE 0x1
+#define PASS_FLAG_GLASS 0x2
+#define PASS_FLAG_GRILLE 0x4
+#define PASS_FLAG_MOB 0x10
diff --git a/code/__defines/gamemode.dm b/code/__defines/gamemode.dm
new file mode 100644
index 00000000..81d70cbf
--- /dev/null
+++ b/code/__defines/gamemode.dm
@@ -0,0 +1,90 @@
+#define GAME_STATE_PREGAME 1
+#define GAME_STATE_SETTING_UP 2
+#define GAME_STATE_PLAYING 3
+#define GAME_STATE_FINISHED 4
+
+#define BE_PLANT "BE_PLANT"
+#define BE_SYNTH "BE_SYNTH"
+#define BE_PAI "BE_PAI"
+
+// Antagonist datum flags.
+#define ANTAG_OVERRIDE_JOB 0x1 // Assigned job is set to MODE when spawning.
+#define ANTAG_OVERRIDE_MOB 0x2 // Mob is recreated from datum mob_type var when spawning.
+#define ANTAG_CLEAR_EQUIPMENT 0x4 // All preexisting equipment is purged.
+#define ANTAG_CHOOSE_NAME 0x8 // Antagonists are prompted to enter a name.
+#define ANTAG_IMPLANT_IMMUNE 0x10 // Cannot be loyalty implanted.
+#define ANTAG_SUSPICIOUS 0x20 // Shows up on roundstart report.
+#define ANTAG_HAS_LEADER 0x40 // Generates a leader antagonist.
+#define ANTAG_HAS_NUKE 0x80 // Will spawn a nuke at supplied location.
+#define ANTAG_RANDSPAWN 0x100 // Potentially randomly spawns due to events.
+#define ANTAG_VOTABLE 0x200 // Can be voted as an additional antagonist before roundstart.
+#define ANTAG_SET_APPEARANCE 0x400 // Causes antagonists to use an appearance modifier on spawn.
+#define ANTAG_RANDOM_EXCEPTED 0x800 // If a game mode randomly selects antag types, antag types with this flag should be excluded.
+
+// Mode/antag template macros.
+#define MODE_BORER "borer"
+#define MODE_XENOMORPH "xeno"
+#define MODE_LOYALIST "loyalist"
+#define MODE_MUTINEER "mutineer"
+#define MODE_COMMANDO "commando"
+#define MODE_DEATHSQUAD "deathsquad"
+#define MODE_ERT "ert"
+#define MODE_ACTOR "actor"
+#define MODE_MERCENARY "mercenary"
+#define MODE_RAIDER "raider"
+#define MODE_WIZARD "wizard"
+#define MODE_CHANGELING "changeling"
+#define MODE_CULTIST "cultist"
+#define MODE_MONKEY "monkey"
+#define MODE_RENEGADE "renegade"
+#define MODE_REVOLUTIONARY "revolutionary"
+#define MODE_MALFUNCTION "malf"
+#define MODE_TRAITOR "traitor"
+#define MODE_DEITY "deity"
+#define MODE_USURP "usurp"
+
+#define DEFAULT_TELECRYSTAL_AMOUNT 50 //130 ARE YOU HIGH?
+#define IMPLANT_TELECRYSTAL_AMOUNT(x) (round(x * 0.49)) // If this cost is ever greater than half of DEFAULT_TELECRYSTAL_AMOUNT then it is possible to buy more TC than you spend
+
+/////////////////
+////WIZARD //////
+/////////////////
+
+/* WIZARD SPELL FLAGS */
+#define GHOSTCAST 0x1 //can a ghost cast it?
+#define NEEDSCLOTHES 0x2 //does it need the wizard garb to cast? Nonwizard spells should not have this
+#define NEEDSHUMAN 0x4 //does it require the caster to be human?
+#define Z2NOCAST 0x8 //if this is added, the spell can't be cast at centcomm
+#define STATALLOWED 0x10 //if set, the user doesn't have to be conscious to cast. Required for ghost spells
+#define IGNOREPREV 0x20 //if set, each new target does not overlap with the previous one
+//The following flags only affect different types of spell, and therefore overlap
+//Targeted spells
+#define INCLUDEUSER 0x40 //does the spell include the caster in its target selection?
+#define SELECTABLE 0x80 //can you select each target for the spell?
+//AOE spells
+#define IGNOREDENSE 0x40 //are dense turfs ignored in selection?
+#define IGNORESPACE 0x80 //are space turfs ignored in selection?
+//End split flags
+#define CONSTRUCT_CHECK 0x100 //used by construct spells - checks for nullrods
+#define NO_BUTTON 0x200 //spell won't show up in the HUD with this
+
+//invocation
+#define SpI_SHOUT "shout"
+#define SpI_WHISPER "whisper"
+#define SpI_EMOTE "emote"
+#define SpI_NONE "none"
+
+//upgrading
+#define Sp_SPEED "speed"
+#define Sp_POWER "power"
+#define Sp_TOTAL "total"
+
+//casting costs
+#define Sp_RECHARGE "recharge"
+#define Sp_CHARGES "charges"
+#define Sp_HOLDVAR "holdervar"
+
+#define INITIALIZATION_NOW 1
+#define INITIALIZATION_HAS_BEGUN 2
+#define INITIALIZATION_COMPLETE 4
+#define INITIALIZATION_NOW_AND_COMPLETE (INITIALIZATION_NOW|INITIALIZATION_COMPLETE)
diff --git a/code/__defines/inventory_sizes.dm b/code/__defines/inventory_sizes.dm
new file mode 100644
index 00000000..9bbdcef0
--- /dev/null
+++ b/code/__defines/inventory_sizes.dm
@@ -0,0 +1,25 @@
+// The below should be used to define an item's w_class variable.
+// Example: w_class = ITENSIZE_LARGE
+// This allows the addition of future w_classes without needing to change every file.
+#define ITEM_SIZE_TINY 1
+#define ITEM_SIZE_SMALL 2
+#define ITEM_SIZE_NORMAL 3
+#define ITEM_SIZE_LARGE 4
+#define ITEM_SIZE_HUGE 5
+#define ITEM_SIZE_GARGANTUAN 6
+#define ITEM_SIZE_NO_CONTAINER INFINITY // Use this to forbid item from being placed in a container.
+
+
+/*
+ The values below are not yet in use.
+*/
+
+#define base_storage_cost(w_class) (2**(w_class-1)) //1,2,4,8,16,...
+
+//linear increase. Using many small storage containers is more space-efficient than using large ones,
+//in exchange for being limited in the w_class of items that will fit
+#define base_storage_capacity(w_class) (7*(w_class-1))
+
+#define DEFAULT_BACKPACK_STORAGE base_storage_capacity(5)
+#define DEFAULT_LARGEBOX_STORAGE base_storage_capacity(4)
+#define DEFAULT_BOX_STORAGE base_storage_capacity(3)
diff --git a/code/__defines/items_clothing.dm b/code/__defines/items_clothing.dm
new file mode 100644
index 00000000..a6bb618e
--- /dev/null
+++ b/code/__defines/items_clothing.dm
@@ -0,0 +1,229 @@
+#define HUMAN_STRIP_DELAY 40 // Takes 40ds = 4s to strip someone.
+
+#define CANDLE_LUM 3 // For how bright candles are.
+
+// Item inventory slot bitmasks.
+#define SLOT_OCLOTHING 0x1
+#define SLOT_ICLOTHING 0x2
+#define SLOT_GLOVES 0x4
+#define SLOT_EYES 0x8
+#define SLOT_EARS 0x10
+#define SLOT_MASK 0x20
+#define SLOT_HEAD 0x40
+#define SLOT_FEET 0x80
+#define SLOT_ID 0x100
+#define SLOT_BELT 0x200
+#define SLOT_BACK 0x400
+#define SLOT_POCKET 0x800 // This is to allow items with a w_class of 3 or 4 to fit in pockets.
+#define SLOT_DENYPOCKET 0x1000 // This is to deny items with a w_class of 2 or 1 from fitting in pockets.
+#define SLOT_TWOEARS 0x2000
+#define SLOT_TIE 0x4000
+#define SLOT_S_STORE 0x8000
+#define SLOT_HOLSTER 0x1600 //16th bit - higher than this will overflow
+
+#define ACCESSORY_SLOT_UTILITY "Utility"
+#define ACCESSORY_SLOT_HOLSTER "Holster"
+#define ACCESSORY_SLOT_ARMBAND "Armband"
+#define ACCESSORY_SLOT_RANK "Rank"
+#define ACCESSORY_SLOT_DEPT "Department"
+#define ACCESSORY_SLOT_DECOR "Decor"
+#define ACCESSORY_SLOT_MEDAL "Medal"
+#define ACCESSORY_SLOT_INSIGNIA "Insignia"
+#define ACCESSORY_SLOT_ARMOR_C "Chest armor"
+#define ACCESSORY_SLOT_ARMOR_A "Arm armor"
+#define ACCESSORY_SLOT_ARMOR_L "Leg armor"
+#define ACCESSORY_SLOT_ARMOR_S "Armor storage"
+#define ACCESSORY_SLOT_ARMOR_M "Misc armor"
+#define ACCESSORY_SLOT_HELM_C "Helmet cover"
+
+// Bitmasks for the flags_inv variable. These determine when a piece of clothing hides another, i.e. a helmet hiding glasses.
+// WARNING: The following flags apply only to the external suit!
+#define HIDEGLOVES 0x1
+#define HIDESUITSTORAGE 0x2
+#define HIDEJUMPSUIT 0x4
+#define HIDESHOES 0x8
+#define HIDETAIL 0x10
+
+// WARNING: The following flags apply only to the helmets and masks!
+#define HIDEMASK 0x1
+#define HIDEEARS 0x2 // Headsets and such.
+#define HIDEEYES 0x4 // Glasses.
+#define HIDEFACE 0x8 // Dictates whether we appear as "Unknown".
+
+#define BLOCKHEADHAIR 0x20 // Hides the user's hair overlay. Leaves facial hair.
+#define BLOCKHAIR 0x40 // Hides the user's hair, facial and otherwise.
+
+// Slots.
+#define slot_first 1
+#define slot_back 1
+#define slot_wear_mask 2
+#define slot_handcuffed 3
+#define slot_l_hand 4
+#define slot_r_hand 5
+#define slot_belt 6
+#define slot_wear_id 7
+#define slot_l_ear 8
+#define slot_glasses 9
+#define slot_gloves 10
+#define slot_head 11
+#define slot_shoes 12
+#define slot_wear_suit 13
+#define slot_w_uniform 14
+#define slot_l_store 15
+#define slot_r_store 16
+#define slot_s_store 17
+#define slot_in_backpack 18
+#define slot_legcuffed 19
+#define slot_r_ear 20
+#define slot_legs 21
+#define slot_tie 22
+#define slot_last 22
+
+// Inventory slot strings.
+// since numbers cannot be used as associative list keys.
+//icon_back, icon_l_hand, etc would be much better names for these...
+#define slot_back_str "slot_back"
+#define slot_l_hand_str "slot_l_hand"
+#define slot_r_hand_str "slot_r_hand"
+#define slot_w_uniform_str "slot_w_uniform"
+#define slot_wear_suit_str "slot_suit"
+#define slot_l_ear_str "slot_l_ear"
+#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_id_str "slot_wear_id"
+#define slot_gloves_str "slot_gloves"
+#define slot_glasses_str "slot_glasses"
+#define slot_s_store_str "slot_s_store"
+#define slot_tie_str "slot_tie"
+
+// Bitflags for clothing parts.
+#define HEAD 0x1
+#define FACE 0x2
+#define EYES 0x4
+#define UPPER_TORSO 0x8
+#define LOWER_TORSO 0x10
+#define LEG_LEFT 0x20
+#define LEG_RIGHT 0x40
+#define LEGS 0x60 // LEG_LEFT | LEG_RIGHT
+#define FOOT_LEFT 0x80
+#define FOOT_RIGHT 0x100
+#define FEET 0x180 // FOOT_LEFT | FOOT_RIGHT
+#define ARM_LEFT 0x200
+#define ARM_RIGHT 0x400
+#define ARMS 0x600 // ARM_LEFT | ARM_RIGHT
+#define HAND_LEFT 0x800
+#define HAND_RIGHT 0x1000
+#define HANDS 0x1800 // HAND_LEFT | HAND_RIGHT
+#define FULL_BODY 0xFFFF
+
+// Bitflags for the percentual amount of protection a piece of clothing which covers the body part offers.
+// Used with human/proc/get_heat_protection() and human/proc/get_cold_protection().
+// The values here should add up to 1, e.g., the head has 30% protection.
+#define THERMAL_PROTECTION_HEAD 0.3
+#define THERMAL_PROTECTION_UPPER_TORSO 0.15
+#define THERMAL_PROTECTION_LOWER_TORSO 0.15
+#define THERMAL_PROTECTION_LEG_LEFT 0.075
+#define THERMAL_PROTECTION_LEG_RIGHT 0.075
+#define THERMAL_PROTECTION_FOOT_LEFT 0.025
+#define THERMAL_PROTECTION_FOOT_RIGHT 0.025
+#define THERMAL_PROTECTION_ARM_LEFT 0.075
+#define THERMAL_PROTECTION_ARM_RIGHT 0.075
+#define THERMAL_PROTECTION_HAND_LEFT 0.025
+#define THERMAL_PROTECTION_HAND_RIGHT 0.025
+
+// Pressure limits.
+#define HAZARD_HIGH_PRESSURE 550 // This determines at what pressure the ultra-high pressure red icon is displayed. (This one is set as a constant)
+#define WARNING_HIGH_PRESSURE 325 // This determines when the orange pressure icon is displayed (it is 0.7 * HAZARD_HIGH_PRESSURE)
+#define WARNING_LOW_PRESSURE 50 // This is when the gray low pressure icon is displayed. (it is 2.5 * HAZARD_LOW_PRESSURE)
+#define HAZARD_LOW_PRESSURE 20 // This is when the black ultra-low pressure icon is displayed. (This one is set as a constant)
+
+#define TEMPERATURE_DAMAGE_COEFFICIENT 1.5 // This is used in handle_temperature_damage() for humans, and in reagents that affect body temperature. Temperature damage is multiplied by this amount.
+#define BODYTEMP_AUTORECOVERY_DIVISOR 12 // This is the divisor which handles how much of the temperature difference between the current body temperature and 310.15K (optimal temperature) humans auto-regenerate each tick. The higher the number, the slower the recovery. This is applied each tick, so long as the mob is alive.
+#define BODYTEMP_AUTORECOVERY_MINIMUM 1 // Minimum amount of kelvin moved toward 310.15K per tick. So long as abs(310.15 - bodytemp) is more than 50.
+#define BODYTEMP_COLD_DIVISOR 6 // Similar to the BODYTEMP_AUTORECOVERY_DIVISOR, but this is the divisor which is applied at the stage that follows autorecovery. This is the divisor which comes into play when the human's loc temperature is lower than their body temperature. Make it lower to lose bodytemp faster.
+#define BODYTEMP_HEAT_DIVISOR 6 // Similar to the BODYTEMP_AUTORECOVERY_DIVISOR, but this is the divisor which is applied at the stage that follows autorecovery. This is the divisor which comes into play when the human's loc temperature is higher than their body temperature. Make it lower to gain bodytemp faster.
+#define BODYTEMP_COOLING_MAX -30 // The maximum number of degrees that your body can cool down in 1 tick, when in a cold area.
+#define BODYTEMP_HEATING_MAX 30 // The maximum number of degrees that your body can heat up in 1 tick, when in a hot area.
+
+#define BODYTEMP_HEAT_DAMAGE_LIMIT 360.15 // The limit the human body can take before it starts taking damage from heat.
+#define BODYTEMP_COLD_DAMAGE_LIMIT 260.15 // The limit the human body can take before it starts taking damage from coldness.
+
+#define SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE 2.0 // What min_cold_protection_temperature is set to for space-helmet quality headwear. MUST NOT BE 0.
+#define SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE 2.0 // What min_cold_protection_temperature is set to for space-suit quality jumpsuits or suits. MUST NOT BE 0.
+#define HELMET_MIN_COLD_PROTECTION_TEMPERATURE 160 // For normal helmets.
+#define ARMOR_MIN_COLD_PROTECTION_TEMPERATURE 160 // For armor.
+#define GLOVES_MIN_COLD_PROTECTION_TEMPERATURE 2.0 // For some gloves.
+#define SHOE_MIN_COLD_PROTECTION_TEMPERATURE 2.0 // For shoes.
+
+#define SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE 5000 // These need better heat protect, but not as good heat protect as firesuits.
+#define FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE 30000 // What max_heat_protection_temperature is set to for firesuit quality headwear. MUST NOT BE 0.
+#define FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE 30000 // For fire-helmet quality items. (Red and white hardhats)
+#define HELMET_MAX_HEAT_PROTECTION_TEMPERATURE 600 // For normal helmets.
+#define ARMOR_MAX_HEAT_PROTECTION_TEMPERATURE 600 // For armor.
+#define GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE 1500 // For some gloves.
+#define SHOE_MAX_HEAT_PROTECTION_TEMPERATURE 1500 // For shoes.
+
+// Fire.
+#define FIRE_MIN_STACKS -20
+#define FIRE_MAX_STACKS 25
+#define FIRE_MAX_FIRESUIT_STACKS 20 // If the number of stacks goes above this firesuits won't protect you anymore. If not, you can walk around while on fire like a badass.
+
+#define THROWFORCE_SPEED_DIVISOR 5 // The throwing speed value at which the throwforce multiplier is exactly 1.
+#define THROWNOBJ_KNOCKBACK_SPEED 15 // The minumum speed of a w_class 2 thrown object that will cause living mobs it hits to be knocked back. Heavier objects can cause knockback at lower speeds.
+#define THROWNOBJ_KNOCKBACK_DIVISOR 2 // Affects how much speed the mob is knocked back with.
+
+// Suit sensor levels
+#define SUIT_SENSOR_OFF 0
+#define SUIT_SENSOR_BINARY 1
+#define SUIT_SENSOR_VITAL 2
+#define SUIT_SENSOR_TRACKING 3
+
+#define SUIT_NO_SENSORS 0
+#define SUIT_HAS_SENSORS 1
+#define SUIT_LOCKED_SENSORS 2
+
+// Hair Flags
+#define VERY_SHORT 0x1
+#define HAIR_TRIPPABLE 0x2
+
+// Storage
+
+/*
+ A note on w_classes - this is an attempt to describe the w_classes currently in use
+ with an attempt at providing examples of the kinds of things that fit each w_class
+
+ 1 - tiny items - things like screwdrivers and pens, sheets of paper
+ 2 - small items - things that can fit in a pocket
+ 3 - normal items
+ 4 - large items - the largest things you can fit in a backpack
+ 5 - bulky items - backpacks are this size, for reference
+ 6 - human sized objects
+ 7 - things that are large enough to contain humans, like closets, but smaller than entire turfs
+ 8 - things that take up an entire turf, like wall girders or door assemblies
+*/
+
+var/list/default_onmob_icons = list(
+ slot_l_hand_str = 'icons/mob/onmob/items/lefthand.dmi',
+ slot_r_hand_str = 'icons/mob/onmob/items/righthand.dmi',
+ slot_belt_str = 'icons/mob/onmob/belt.dmi',
+ slot_back_str = 'icons/mob/onmob/back.dmi',
+ slot_l_ear_str = 'icons/mob/onmob/ears.dmi',
+ slot_r_ear_str = 'icons/mob/onmob/ears.dmi',
+ slot_glasses_str = 'icons/mob/onmob/eyes.dmi',
+ slot_wear_id_str = 'icons/mob/onmob/id.dmi',
+ slot_w_uniform_str = 'icons/mob/onmob/uniform.dmi',
+ slot_wear_suit_str = 'icons/mob/onmob/suit.dmi',
+ slot_head_str = 'icons/mob/onmob/head.dmi',
+ slot_shoes_str = 'icons/mob/onmob/feet.dmi',
+ slot_wear_mask_str = 'icons/mob/onmob/mask.dmi',
+ slot_handcuffed_str = 'icons/mob/onmob/misc.dmi',
+ slot_legcuffed_str = 'icons/mob/onmob/misc.dmi',
+ slot_gloves_str = 'icons/mob/onmob/hands.dmi',
+ slot_s_store_str = 'icons/mob/onmob/belt_mirror.dmi',
+ slot_tie_str = 'icons/mob/onmob/ties.dmi'
+ )
diff --git a/code/__defines/kaos.dm b/code/__defines/kaos.dm
new file mode 100644
index 00000000..b8bf9d33
--- /dev/null
+++ b/code/__defines/kaos.dm
@@ -0,0 +1,12 @@
+/* Copyright (C) KDC Kyrah Design Concept - All Rights Reserved
+ * Unauthorized copying of this file, via any medium is strictly prohibited
+ *
+ * Proprietary and confidential
+ * Do not modify or remove this header.
+ *
+ * Written by Kyrah Abattoir , August 2018
+ */
+
+#define KAOS_ALIGN_LEFT -1
+#define KAOS_ALIGN_CENTER 0
+#define KAOS_ALIGN_RIGHT 1
diff --git a/code/__defines/languages.dm b/code/__defines/languages.dm
new file mode 100644
index 00000000..3dd43470
--- /dev/null
+++ b/code/__defines/languages.dm
@@ -0,0 +1,36 @@
+// Languages.
+#define LANGUAGE_GALCOM "Galactic Common"
+#define LANGUAGE_EAL "Encoded Audio Language"
+#define LANGUAGE_SOL_COMMON "Sol Common"
+#define LANGUAGE_UNATHI "Sinta'unathi"
+#define LANGUAGE_SIIK_MAAS "Siik'maas"
+#define LANGUAGE_SIIK_TAJR "Siik'tajr"
+#define LANGUAGE_SKRELLIAN "Skrellian"
+#define LANGUAGE_ROOTLOCAL "Local Rootspeak"
+#define LANGUAGE_ROOTGLOBAL "Global Rootspeak"
+#define LANGUAGE_LUNAR "Selenian"
+#define LANGUAGE_GUTTER "Gutter"
+#define LANGUAGE_CULT "Cult"
+#define LANGUAGE_SIGN "Sign Language"
+#define LANGUAGE_INDEPENDENT "Independent"
+#define LANGUAGE_NABBER "Serpentid"
+#define LANGUAGE_SPACER "Spacer"
+#define LANGUAGE_BOGANI "Bogani"
+
+#define LANGUAGE_ENGLISH "English"
+#define LANGUAGE_GERMAN "German"
+
+#define LANGUAGE_RED "Redenese"
+#define LANGUAGE_BLUE "Bluesnian"
+
+// Language flags.
+#define WHITELISTED 1 // Language is available if the speaker is whitelisted.
+#define RESTRICTED 2 // Language can only be acquired by spawning or an admin.
+#define NONVERBAL 4 // Language has a significant non-verbal component. Speech is garbled without line-of-sight.
+#define SIGNLANG 8 // Language is completely non-verbal. Speech is displayed through emotes for those who can understand.
+#define HIVEMIND 16 // Broadcast to all mobs with this language.
+#define NONGLOBAL 32 // Do not add to general languages list.
+#define INNATE 64 // All mobs can be assumed to speak and understand this language. (audible emotes)
+#define NO_TALK_MSG 128 // Do not show the "\The [speaker] talks into \the [radio]" message
+#define NO_STUTTER 256 // No stuttering, slurring, or other speech problems
+#define ALT_TRANSMIT 512 // Language is not based on vision or sound (Todo: add this into the say code and use it for the rootspeak languages)
diff --git a/code/__defines/lighting.dm b/code/__defines/lighting.dm
new file mode 100644
index 00000000..71ef56dc
--- /dev/null
+++ b/code/__defines/lighting.dm
@@ -0,0 +1,94 @@
+#define FOR_DVIEW(type, range, center, invis_flags) \
+ GLOB.dview_mob.loc = center; \
+ GLOB.dview_mob.see_invisible = invis_flags; \
+ for(type in view(range, GLOB.dview_mob))
+
+#define END_FOR_DVIEW dview_mob.loc = null
+
+#define LIGHTING_FALLOFF 1 // type of falloff to use for lighting; 1 for circular, 2 for square
+#define LIGHTING_LAMBERTIAN 0 // use lambertian shading for light sources
+#define LIGHTING_HEIGHT 1 // height off the ground of light sources on the pseudo-z-axis, you should probably leave this alone
+
+#define LIGHTING_LAYER 10 // drawing layer for lighting overlays
+#define LIGHTING_ICON 'icons/effects/lighting_overlay.dmi' // icon used for lighting shading effects
+#define LIGHTING_ICON_STATE_DARK "soft_dark" // Change between "soft_dark" and "dark" to swap soft darkvision
+
+#define LIGHTING_ROUND_VALUE (1 / 64) // Value used to round lumcounts, values smaller than 1/69 don't matter (if they do, thanks sinking points), greater values will make lighting less precise, but in turn increase performance, VERY SLIGHTLY.
+
+#define LIGHTING_SOFT_THRESHOLD 0.05 // If the max of the lighting lumcounts of each spectrum drops below this, disable luminosity on the lighting overlays. This also should be the transparancy of the "soft_dark" icon state.
+
+#define LIGHTING_MULT_FACTOR 0.5
+
+// If I were you I'd leave this alone.
+#define LIGHTING_BASE_MATRIX \
+ list \
+ ( \
+ LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, 0, \
+ LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, 0, \
+ LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, 0, \
+ LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, 0, \
+ 0, 0, 0, 1 \
+ ) \
+
+// Helpers so we can (more easily) control the colour matrices.
+#define CL_MATRIX_RR 1
+#define CL_MATRIX_RG 2
+#define CL_MATRIX_RB 3
+#define CL_MATRIX_RA 4
+#define CL_MATRIX_GR 5
+#define CL_MATRIX_GG 6
+#define CL_MATRIX_GB 7
+#define CL_MATRIX_GA 8
+#define CL_MATRIX_BR 9
+#define CL_MATRIX_BG 10
+#define CL_MATRIX_BB 11
+#define CL_MATRIX_BA 12
+#define CL_MATRIX_AR 13
+#define CL_MATRIX_AG 14
+#define CL_MATRIX_AB 15
+#define CL_MATRIX_AA 16
+#define CL_MATRIX_CR 17
+#define CL_MATRIX_CG 18
+#define CL_MATRIX_CB 19
+#define CL_MATRIX_CA 20
+
+
+//Some defines to generalise colours used in lighting.
+//Important note on colors. Colors can end up significantly different from the basic html picture, especially when saturated
+#define LIGHT_COLOR_RED "#FA8282" //Warm but extremely diluted red. rgb(250, 130, 130)
+#define LIGHT_COLOR_GREEN "#64C864" //Bright but quickly dissipating neon green. rgb(100, 200, 100)
+#define LIGHT_COLOR_BLUE "#6496FA" //Cold, diluted blue. rgb(100, 150, 250)
+
+#define LIGHT_COLOR_CYAN "#7DE1E1" //Diluted cyan. rgb(125, 225, 225)
+#define LIGHT_COLOR_PINK "#E17DE1" //Diluted, mid-warmth pink. rgb(225, 125, 225)
+#define LIGHT_COLOR_YELLOW "#E1E17D" //Dimmed yellow, leaning kaki. rgb(225, 225, 125)
+#define LIGHT_COLOR_BROWN "#966432" //Clear brown, mostly dim. rgb(150, 100, 50)
+#define LIGHT_COLOR_ORANGE "#FA9632" //Mostly pure orange. rgb(250, 150, 50)
+#define LIGHT_COLOR_PURPLE "#A97FAA" //Soft purple. rgb(169, 127, 170)
+#define LIGHT_COLOR_VIOLET "#B43CB8" //Deep purple. rgb(180, 60, 184)
+#define LIGHT_COLOR_SCARLET "#E85656" //Light red. rgb(232, 86, 86)
+
+//These ones aren't a direct colour like the ones above, because nothing would fit
+#define LIGHT_COLOR_FIRE "#FAA019" //Warm orange color, leaning strongly towards yellow. rgb(250, 160, 25)
+#define LIGHT_COLOR_LAVA "#C48A18" //Very warm yellow, leaning slightly towards orange. rgb(196, 138, 24)
+#define LIGHT_COLOR_FLARE "#FA644B" //Bright, non-saturated red. Leaning slightly towards pink for visibility. rgb(250, 100, 75)
+#define LIGHT_COLOR_SLIME_LAMP "#AFC84B" //Weird color, between yellow and green, very slimy. rgb(175, 200, 75)
+#define LIGHT_COLOR_TUNGSTEN "#FAE1AF" //Extremely diluted yellow, close to skin color (for some reason). rgb(250, 225, 175)
+#define LIGHT_COLOR_HALOGEN "#F0FAFA" //Barely visible cyan-ish hue, as the doctor prescribed. rgb(240, 250, 250)
+#define LIGHT_COLOR_EMERGENCY "#FF3232" //Red color used by emergency lighting. rgb(255, 50, 50)
+
+
+// -- Ambient Occlusion --
+
+// Not handled by the lighting engine, but related. Controls the alpha of the ambient occlusion effect on opaque atoms and openturfs.
+#define WALL_AO_ALPHA 90
+
+#define AO_UPDATE_NONE 0
+#define AO_UPDATE_OVERLAY 1
+#define AO_UPDATE_REBUILD 2
+
+// If ao_neighbors equals this, no AO shadows are present.
+#define AO_ALL_NEIGHBORS 1910
+
+// If defined, integrate with the lighting engine and use its opacity value. Otherwise a simple turf opacity check is used. This may cause visual artifacts with opaque non-square movables.
+//#define AO_USE_LIGHTING_OPACITY
diff --git a/code/__defines/machinery.dm b/code/__defines/machinery.dm
new file mode 100644
index 00000000..02201bf3
--- /dev/null
+++ b/code/__defines/machinery.dm
@@ -0,0 +1,107 @@
+var/global/defer_powernet_rebuild = 0 // True if net rebuild will be called manually after an event.
+
+#define KILOWATTS *1000
+#define MEGAWATTS *1000000
+#define GIGAWATTS *1000000000
+
+#define MACHINERY_TICKRATE 2 // Tick rate for machinery in seconds. As it affects CELLRATE calculation it is kept as define here
+
+#define CELLRATE (1 / ( 3600 / MACHINERY_TICKRATE )) // Multiplier for charge units. Converts cell charge units(watthours) to joules. Takes into consideration that our machinery ticks once per two seconds.
+
+// Doors!
+#define DOOR_CRUSH_DAMAGE 40
+#define ALIEN_SELECT_AFK_BUFFER 1 // How many minutes that a person can be AFK before not being allowed to be an alien.
+
+// Channel numbers for power.
+#define EQUIP 1
+#define LIGHT 2
+#define ENVIRON 3
+#define TOTAL 4 // For total power used only.
+
+// Bitflags for machine stat variable.
+#define BROKEN 0x1
+#define NOPOWER 0x2
+#define POWEROFF 0x4 // TBD.
+#define MAINT 0x8 // Under maintenance.
+#define EMPED 0x10 // Temporary broken by EMP pulse.
+
+// Used by firelocks
+#define FIREDOOR_OPEN 1
+#define FIREDOOR_CLOSED 2
+
+#define AI_CAMERA_LUMINOSITY 6
+
+// Camera networks
+#define NETWORK_CRESCENT "Crescent"
+#define NETWORK_ENGINEERING "Engineering"
+#define NETWORK_ERT "ZeEmergencyResponseTeam"
+#define NETWORK_EXODUS "Exodus"
+#define NETWORK_MEDICAL "Medical"
+#define NETWORK_MERCENARY "MercurialNet"
+#define NETWORK_MINE "Mining"
+#define NETWORK_RESEARCH "Research"
+#define NETWORK_ROBOTS "Robots"
+#define NETWORK_SECURITY "Security"
+#define NETWORK_THUNDER "Thunderdome"
+
+#define NETWORK_ALARM_ATMOS "Atmosphere Alarms"
+#define NETWORK_ALARM_CAMERA "Camera Alarms"
+#define NETWORK_ALARM_FIRE "Fire Alarms"
+#define NETWORK_ALARM_MOTION "Motion Alarms"
+#define NETWORK_ALARM_POWER "Power Alarms"
+
+// Those networks can only be accessed by pre-existing terminals. AIs and new terminals can't use them.
+var/list/restricted_camera_networks = list(NETWORK_ERT,NETWORK_MERCENARY,"Secret")
+
+
+//singularity defines
+#define STAGE_ONE 1
+#define STAGE_TWO 3
+#define STAGE_THREE 5
+#define STAGE_FOUR 7
+#define STAGE_FIVE 9
+#define STAGE_SUPER 11
+
+// NanoUI flags
+#define STATUS_INTERACTIVE 2 // GREEN Visability
+#define STATUS_UPDATE 1 // ORANGE Visability
+#define STATUS_DISABLED 0 // RED Visability
+#define STATUS_CLOSE -1 // Close the interface
+
+/*
+ * Atmospherics Machinery.
+*/
+#define MAX_SIPHON_FLOWRATE 2500 // L/s. This can be used to balance how fast a room is siphoned. Anything higher than CELL_VOLUME has no effect.
+#define MAX_SCRUBBER_FLOWRATE 200 // L/s. Max flow rate when scrubbing from a turf.
+
+// These balance how easy or hard it is to create huge pressure gradients with pumps and filters.
+// Lower values means it takes longer to create large pressures differences.
+// Has no effect on pumping gasses from high pressure to low, only from low to high.
+#define ATMOS_PUMP_EFFICIENCY 2.5
+#define ATMOS_FILTER_EFFICIENCY 2.5
+
+// Will not bother pumping or filtering if the gas source as fewer than this amount of moles, to help with performance.
+#define MINIMUM_MOLES_TO_PUMP 0.01
+#define MINIMUM_MOLES_TO_FILTER 0.04
+
+// The flow rate/effectiveness of various atmos devices is limited by their internal volume,
+// so for many atmos devices these will control maximum flow rates in L/s.
+#define ATMOS_DEFAULT_VOLUME_PUMP 200 // Liters.
+#define ATMOS_DEFAULT_VOLUME_FILTER 500 // L.
+#define ATMOS_DEFAULT_VOLUME_MIXER 500 // L.
+#define ATMOS_DEFAULT_VOLUME_PIPE 70 // L.
+
+#define TELECOMMS_RECEPTION_NONE 0
+#define TELECOMMS_RECEPTION_SENDER 1
+#define TELECOMMS_RECEPTION_RECEIVER 2
+#define TELECOMMS_RECEPTION_BOTH 3
+
+// These are used by supermatter and supermatter monitor program, mostly for UI updating purposes. Higher should always be worse!
+#define SUPERMATTER_ERROR -1 // Unknown status, shouldn't happen but just in case.
+#define SUPERMATTER_INACTIVE 0 // No or minimal energy
+#define SUPERMATTER_NORMAL 1 // Normal operation
+#define SUPERMATTER_NOTIFY 2 // Ambient temp > 80% of CRITICAL_TEMPERATURE
+#define SUPERMATTER_WARNING 3 // Ambient temp > CRITICAL_TEMPERATURE OR integrity damaged
+#define SUPERMATTER_DANGER 4 // Integrity < 50%
+#define SUPERMATTER_EMERGENCY 5 // Integrity < 25%
+#define SUPERMATTER_DELAMINATING 6 // Pretty obvious.
\ No newline at end of file
diff --git a/code/__defines/mapping.dm b/code/__defines/mapping.dm
new file mode 100644
index 00000000..c83aeb6d
--- /dev/null
+++ b/code/__defines/mapping.dm
@@ -0,0 +1,7 @@
+// Maploader bounds indices
+#define MAP_MINX 1
+#define MAP_MINY 2
+#define MAP_MINZ 3
+#define MAP_MAXX 4
+#define MAP_MAXY 5
+#define MAP_MAXZ 6
diff --git a/code/__defines/materials.dm b/code/__defines/materials.dm
new file mode 100644
index 00000000..72c610c8
--- /dev/null
+++ b/code/__defines/materials.dm
@@ -0,0 +1,5 @@
+#define MATERIAL_ALTERATION_NONE 0
+#define MATERIAL_ALTERATION_NAME 1
+#define MATERIAL_ALTERATION_DESC 2
+#define MATERIAL_ALTERATION_COLOR 4
+#define MATERIAL_ALTERATION_ALL (~MATERIAL_ALTERATION_NONE)
diff --git a/code/__defines/math_physics.dm b/code/__defines/math_physics.dm
new file mode 100644
index 00000000..59bcff33
--- /dev/null
+++ b/code/__defines/math_physics.dm
@@ -0,0 +1,33 @@
+// Math constants.
+#define M_PI 3.14159265
+
+#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).
+
+// Radiation constants.
+#define STEFAN_BOLTZMANN_CONSTANT 5.6704e-8 // W/(m^2*K^4).
+#define COSMIC_RADIATION_TEMPERATURE 3.15 // K.
+#define AVERAGE_SOLAR_RADIATION 200 // W/m^2. Kind of arbitrary. Really this should depend on the sun position much like solars.
+#define RADIATOR_OPTIMUM_PRESSURE 3771 // kPa at 20 C. This should be higher as gases aren't great conductors until they are dense. Used the critical pressure for air.
+#define GAS_CRITICAL_TEMPERATURE 132.65 // K. The critical point temperature for air.
+
+#define RADIATOR_EXPOSED_SURFACE_AREA_RATIO 0.04 // (3 cm + 100 cm * sin(3deg))/(2*(3+100 cm)). Unitless ratio.
+#define HUMAN_EXPOSED_SURFACE_AREA 5.2 //m^2, surface area of 1.7m (H) x 0.46m (D) cylinder
+
+#define T0C 273.15 // 0.0 degrees celcius
+#define T20C 293.15 // 20.0 degrees celcius
+#define TCMB 2.7 // -270.3 degrees celcius
+
+#define CLAMP01(x) max(0, min(1, x))
+#define CLAMP(CLVALUE,CLMIN,CLMAX) ( max( (CLMIN), min((CLVALUE), (CLMAX)) ) )
+#define ATMOS_PRECISION 0.0001
+#define QUANTIZE(variable) (round(variable, ATMOS_PRECISION))
+
+#define INFINITY 1.#INF
+
+#define TICKS_IN_DAY 24*60*60*10
+#define TICKS_IN_SECOND 10
+
+#define SIMPLE_SIGN(X) ((X) < 0 ? -1 : 1)
+#define SIGN(X) ((X) ? SIMPLE_SIGN(X) : 0)
diff --git a/code/__defines/misc.dm b/code/__defines/misc.dm
new file mode 100644
index 00000000..e4c81710
--- /dev/null
+++ b/code/__defines/misc.dm
@@ -0,0 +1,309 @@
+#define DEBUG
+// Turf-only flags.
+#define TURF_FLAG_NOJAUNT 1 // This is used in literally one place, turf.dm, to block ethereal jaunt.
+#define TURF_FLAG_NORUINS 2
+
+#define TRANSITIONEDGE 7 // Distance from edge to move to another z-level.
+#define RUIN_MAP_EDGE_PAD 15
+
+#define JOINTEXT(X) jointext(X, null)
+
+//lazy text span classes defines.
+#define span(class, text) "[text]"
+#define SPAN_NOTICE(X) "[X]"
+#define SPAN_WARNING(X) "[X]"
+#define SPAN_DANGER(X) "[X]"
+#define SPAN_BNOTICE(X) "[X]"
+#define SPAN_BOLD(X) "[X]"
+
+#define FONT_SMALL(X) "[X]"
+#define FONT_NORMAL(X) "[X]"
+#define FONT_LARGE(X) "[X]"
+#define FONT_HUGE(X) "[X]"
+#define FONT_GIANT(X) "[X]"
+
+#define text_starts_with(text, start) (copytext(text, 1, length(start) + 1) == start)
+
+//Misc text define. Does 4 spaces. Used as a makeshift tabulator.
+#define FOURSPACES " "
+
+// Invisibility constants.
+#define INVISIBILITY_LIGHTING 20
+#define INVISIBILITY_LEVEL_ONE 35
+#define INVISIBILITY_LEVEL_TWO 45
+#define INVISIBILITY_OBSERVER 60
+#define INVISIBILITY_EYE 61
+#define INVISIBILITY_SYSTEM 99
+
+#define SEE_INVISIBLE_LIVING 25
+#define SEE_INVISIBLE_NOLIGHTING 15
+#define SEE_INVISIBLE_LEVEL_ONE INVISIBILITY_LEVEL_ONE
+#define SEE_INVISIBLE_LEVEL_TWO INVISIBILITY_LEVEL_TWO
+#define SEE_INVISIBLE_CULT INVISIBILITY_OBSERVER
+#define SEE_INVISIBLE_OBSERVER INVISIBILITY_EYE
+#define SEE_INVISIBLE_SYSTEM INVISIBILITY_SYSTEM
+
+#define SEE_IN_DARK_DEFAULT 2
+
+#define SEE_INVISIBLE_MINIMUM 5
+#define INVISIBILITY_MAXIMUM 100
+
+// Some arbitrary defines to be used by self-pruning global lists. (see master_controller)
+#define PROCESS_KILL 26 // Used to trigger removal from a processing list.
+
+// For secHUDs and medHUDs and variants. The number is the location of the image on the list hud_list of humans.
+#define HEALTH_HUD 1 // A simple line rounding the mob's number health.
+#define STATUS_HUD 2 // Alive, dead, diseased, etc.
+#define ID_HUD 3 // The job asigned to your ID.
+#define WANTED_HUD 4 // Wanted, released, paroled, security status.
+#define IMPLOYAL_HUD 5 // Loyality implant.
+#define IMPCHEM_HUD 6 // Chemical implant.
+#define IMPTRACK_HUD 7 // Tracking implant.
+#define SPECIALROLE_HUD 8 // AntagHUD image.
+#define STATUS_HUD_OOC 9 // STATUS_HUD without virus DB check for someone being ill.
+#define LIFE_HUD 10 // STATUS_HUD that only reports dead or alive
+
+// Shuttle moving status.
+#define SHUTTLE_IDLE 0
+#define SHUTTLE_WARMUP 1
+#define SHUTTLE_INTRANSIT 2
+
+// Autodock shuttle processing status.
+#define IDLE_STATE 0
+#define WAIT_LAUNCH 1
+#define FORCE_LAUNCH 2
+#define WAIT_ARRIVE 3
+#define WAIT_FINISH 4
+
+// Setting this much higher than 1024 could allow spammers to DOS the server easily.
+#define MAX_MESSAGE_LEN 1024
+#define MAX_PAPER_MESSAGE_LEN 3072
+#define MAX_BOOK_MESSAGE_LEN 9216
+#define MAX_LNAME_LEN 64
+#define MAX_NAME_LEN 26
+#define MAX_DESC_LEN 128
+#define MAX_TEXTFILE_LENGTH 128000 // 512GQ file
+
+// Event defines.
+#define EVENT_LEVEL_MUNDANE 1
+#define EVENT_LEVEL_MODERATE 2
+#define EVENT_LEVEL_MAJOR 3
+
+//General-purpose life speed define for plants.
+#define HYDRO_SPEED_MULTIPLIER 1
+
+#define DEFAULT_JOB_TYPE /datum/job/assistant
+
+//Area flags, possibly more to come
+#define AREA_FLAG_RAD_SHIELDED 1 // shielded from radiation, clearly
+#define AREA_FLAG_EXTERNAL 2 // External as in exposed to space, not outside in a nice, green, forest
+
+// Convoluted setup so defines can be supplied by Bay12 main server compile script.
+// Should still work fine for people jamming the icons into their repo.
+#ifndef CUSTOM_ITEM_OBJ
+#define CUSTOM_ITEM_OBJ 'icons/obj/custom_items_obj.dmi'
+#endif
+#ifndef CUSTOM_ITEM_MOB
+#define CUSTOM_ITEM_MOB 'icons/mob/custom_items_mob.dmi'
+#endif
+#ifndef CUSTOM_ITEM_SYNTH
+#define CUSTOM_ITEM_SYNTH 'icons/mob/custom_synthetic.dmi'
+#endif
+
+#define WALL_CAN_OPEN 1
+#define WALL_OPENING 2
+
+#define DEFAULT_TABLE_MATERIAL "plastic"
+#define DEFAULT_WALL_MATERIAL "steel"
+
+#define SHARD_SHARD "shard"
+#define SHARD_SHRAPNEL "shrapnel"
+#define SHARD_STONE_PIECE "piece"
+#define SHARD_SPLINTER "splinters"
+#define SHARD_NONE ""
+
+#define MATERIAL_UNMELTABLE 0x1
+#define MATERIAL_BRITTLE 0x2
+#define MATERIAL_PADDING 0x4
+
+#define TABLE_BRITTLE_MATERIAL_MULTIPLIER 4 // Amount table damage is multiplied by if it is made of a brittle material (e.g. glass)
+
+#define BOMBCAP_DVSTN_RADIUS (GLOB.max_explosion_range/4)
+#define BOMBCAP_HEAVY_RADIUS (GLOB.max_explosion_range/2)
+#define BOMBCAP_LIGHT_RADIUS GLOB.max_explosion_range
+#define BOMBCAP_FLASH_RADIUS (GLOB.max_explosion_range*1.5)
+ // NTNet module-configuration values. Do not change these. If you need to add another use larger number (5..6..7 etc)
+#define NTNET_SOFTWAREDOWNLOAD 1 // Downloads of software from NTNet
+#define NTNET_PEERTOPEER 2 // P2P transfers of files between devices
+#define NTNET_COMMUNICATION 3 // Communication (messaging)
+#define NTNET_SYSTEMCONTROL 4 // Control of various systems, RCon, air alarm control, etc.
+
+// NTNet transfer speeds, used when downloading/uploading a file/program.
+#define NTNETSPEED_LOWSIGNAL 0.25 // GQ/s transfer speed when the device is wirelessly connected and on Low signal
+#define NTNETSPEED_HIGHSIGNAL 0.5 // GQ/s transfer speed when the device is wirelessly connected and on High signal
+#define NTNETSPEED_ETHERNET 1 // GQ/s transfer speed when the device is using wired connection
+#define NTNETSPEED_DOS_AMPLIFICATION 5 // Multiplier for Denial of Service program. Resulting load on NTNet relay is this multiplied by NTNETSPEED of the device
+
+// Program bitflags
+#define PROGRAM_ALL 15
+#define PROGRAM_CONSOLE 1
+#define PROGRAM_LAPTOP 2
+#define PROGRAM_TABLET 4
+#define PROGRAM_TELESCREEN 8
+
+#define PROGRAM_STATE_KILLED 0
+#define PROGRAM_STATE_BACKGROUND 1
+#define PROGRAM_STATE_ACTIVE 2
+
+// Caps for NTNet logging. Less than 10 would make logging useless anyway, more than 500 may make the log browser too laggy. Defaults to 100 unless user changes it.
+#define MAX_NTNET_LOGS 500
+#define MIN_NTNET_LOGS 10
+
+//Affects the chance that armour will block an attack. Should be between 0 and 1.
+//If set to 0, then armor will always prevent the same amount of damage, always, with no randomness whatsoever.
+//Of course, this will affect code that checks for blocked < 100, as blocked will be less likely to actually be 100.
+#define ARMOR_BLOCK_CHANCE_MULT 1.0
+
+// Special return values from bullet_act(). Positive return values are already used to indicate the blocked level of the projectile.
+#define PROJECTILE_CONTINUE -1 //if the projectile should continue flying after calling bullet_act()
+#define PROJECTILE_FORCE_MISS -2 //if the projectile should treat the attack as a miss (suppresses attack and admin logs) - only applies to mobs.
+
+//Camera capture modes
+#define CAPTURE_MODE_REGULAR 0 //Regular polaroid camera mode
+#define CAPTURE_MODE_ALL 1 //Admin camera mode
+#define CAPTURE_MODE_PARTIAL 3 //Simular to regular mode, but does not do dummy check
+
+//objectives
+#define CONFIG_OBJECTIVE_NONE 2
+#define CONFIG_OBJECTIVE_VERB 1
+#define CONFIG_OBJECTIVE_ALL 0
+
+// How many times an AI tries to connect to APC before switching to low power mode.
+#define AI_POWER_RESTORE_MAX_ATTEMPTS 3
+
+// AI power restoration routine steps.
+#define AI_RESTOREPOWER_FAILED -1
+#define AI_RESTOREPOWER_IDLE 0
+#define AI_RESTOREPOWER_STARTING 1
+#define AI_RESTOREPOWER_DIAGNOSTICS 2
+#define AI_RESTOREPOWER_CONNECTING 3
+#define AI_RESTOREPOWER_CONNECTED 4
+#define AI_RESTOREPOWER_COMPLETED 5
+
+
+// Values represented as Oxyloss. Can be tweaked, but make sure to use integers only.
+#define AI_POWERUSAGE_LOWPOWER 1
+#define AI_POWERUSAGE_RESTORATION 2
+#define AI_POWERUSAGE_NORMAL 5
+#define AI_POWERUSAGE_RECHARGING 7
+
+// Above values get multiplied by this when converting AI oxyloss -> watts.
+// For now, one oxyloss point equals 10kJ of energy, so normal AI uses 5 oxyloss per tick (50kW or 70kW if charging)
+#define AI_POWERUSAGE_OXYLOSS_TO_WATTS_MULTIPLIER 10000
+
+//Grid for Item Placement
+#define CELLS 8 //Amount of cells per row/column in grid
+#define CELLSIZE (world.icon_size/CELLS) //Size of a cell in pixels
+
+//#define WORLD_ICON_SIZE 32
+#define PIXEL_MULTIPLIER WORLD_ICON_SIZE/32
+
+#define DEFAULT_SPAWNPOINT_ID "Default"
+
+#define MIDNIGHT_ROLLOVER 864000 //number of deciseconds in a day
+
+//Virus badness defines
+#define VIRUS_MILD 1
+#define VIRUS_COMMON 2 //Random events don't go higher (mutations aside)
+#define VIRUS_ENGINEERED 3
+#define VIRUS_EXOTIC 4 //Usually adminbus only
+
+//Error handler defines
+#define ERROR_USEFUL_LEN 2
+
+#define RAD_LEVEL_LOW 0.5 // Around the level at which radiation starts to become harmful
+#define RAD_LEVEL_MODERATE 5
+#define RAD_LEVEL_HIGH 25
+#define RAD_LEVEL_VERY_HIGH 75
+
+#define RADIATION_THRESHOLD_CUTOFF 0.1 // Radiation will not affect a tile when below this value.
+
+#define LEGACY_RECORD_STRUCTURE(X, Y) GLOBAL_LIST_EMPTY(##X);/datum/computer_file/data/##Y/var/list/fields[0];/datum/computer_file/data/##Y/New(){..();GLOB.##X.Add(src);}/datum/computer_file/data/##Y/Destroy(){..();GLOB.##X.Remove(src);}
+
+#define EDIT_SHORTTEXT 1 // Short (single line) text input field
+#define EDIT_LONGTEXT 2 // Long (multi line, papercode tag formattable) text input field
+#define EDIT_NUMERIC 3 // Single-line number input field
+#define EDIT_LIST 4 // Option select dialog
+
+#define REC_FIELD(KEY) /record_field/##KEY
+
+#define SUPPLY_SECURITY_ELEVATED 1
+#define SUPPLY_SECURITY_HIGH 2
+
+#define DIFF_EASY "easy" //Used in achievements.
+#define DIFF_MEDIUM "medium"
+#define DIFF_HARD "hard"
+
+#define SUCCESS 1 //Used in stats and skills
+#define FAILURE 0
+#define CRIT_SUCCESS 2
+#define CRIT_FAILURE -1
+
+
+//Some Aurora shit
+#define N_NORTH 2
+#define N_SOUTH 4
+#define N_EAST 16
+#define N_WEST 256
+#define N_NORTHEAST 32
+#define N_NORTHWEST 512
+#define N_SOUTHEAST 64
+#define N_SOUTHWEST 1024
+
+#define CALCULATE_NEIGHBORS(ORIGIN, VAR, TVAR, FUNC) \
+ for (var/_tdir in GLOB.cardinal) { \
+ TVAR = get_step(ORIGIN, _tdir); \
+ if ((TVAR) && (FUNC)) { \
+ VAR |= 1 << _tdir; \
+ } \
+ } \
+ if (VAR & N_NORTH) { \
+ if (VAR & N_WEST) { \
+ TVAR = get_step(ORIGIN, NORTHWEST); \
+ if (FUNC) { \
+ VAR |= N_NORTHWEST; \
+ } \
+ } \
+ if (VAR & N_EAST) { \
+ TVAR = get_step(ORIGIN, NORTHEAST); \
+ if (FUNC) { \
+ VAR |= N_NORTHEAST; \
+ } \
+ } \
+ } \
+ if (VAR & N_SOUTH) { \
+ if (VAR & N_WEST) { \
+ TVAR = get_step(ORIGIN, SOUTHWEST); \
+ if (FUNC) { \
+ VAR |= N_SOUTHWEST; \
+ } \
+ } \
+ if (VAR & N_EAST) { \
+ TVAR = get_step(ORIGIN, SOUTHEAST); \
+ if (FUNC) { \
+ VAR |= N_SOUTHEAST; \
+ } \
+ } \
+ }
+
+
+//supposedly the fastest way to do this according to https://gist.github.com/Giacom/be635398926bb463b42a
+#define RANGE_TURFS(RADIUS, CENTER) \
+ block( \
+ locate(max(CENTER.x-(RADIUS),1), max(CENTER.y-(RADIUS),1), CENTER.z), \
+ locate(min(CENTER.x+(RADIUS),world.maxx), min(CENTER.y+(RADIUS),world.maxy), CENTER.z) \
+ )
+
+#define PUNCTUATION list("!", ".", "\"", ")", "'", ",", "?", ":", ";")
+
+#define CLIENT_FROM_VAR(I) (ismob(I) ? I:client : (istype(I, /client) ? I : (istype(I, /datum/mind) ? I:current?:client : null)))
\ No newline at end of file
diff --git a/code/__defines/mobs.dm b/code/__defines/mobs.dm
new file mode 100644
index 00000000..9d667b51
--- /dev/null
+++ b/code/__defines/mobs.dm
@@ -0,0 +1,377 @@
+// /mob/var/stat things.
+#define CONSCIOUS 0
+#define UNCONSCIOUS 1
+#define DEAD 2
+
+// Bitflags defining which status effects could be or are inflicted on a mob.
+#define CANSTUN 0x1
+#define CANWEAKEN 0x2
+#define CANPARALYSE 0x4
+#define CANPUSH 0x8
+#define LEAPING 0x10
+#define PASSEMOTES 0x32 // Mob has a cortical borer or holders inside of it that need to see emotes.
+#define GODMODE 0x1000
+#define FAKEDEATH 0x2000 // Replaces stuff like changeling.changeling_fakedeath.
+#define NO_ANTAG 0x4000 // Players are restricted from gaining antag roles when occupying this mob
+#define XENO_HOST 0x8000 // Tracks whether we're gonna be a baby alien's mummy.
+
+// Grab Types
+#define GRAB_NORMAL "normal"
+#define GRAB_NAB "nab"
+#define GRAB_NAB_SPECIAL "special nab"
+#define GRAB_TAKEDOWN "takedown"
+#define GRAB_STRANGLE "strangle"
+#define GRAB_WRENCH "wrench"
+
+// Grab levels.
+#define NORM_PASSIVE "normal passive"
+#define NORM_STRUGGLE "normal struggle"
+#define NORM_AGGRESSIVE "normal aggressive"
+#define NORM_NECK "normal neck"
+#define NORM_KILL "normal kill"
+
+#define NAB_PASSIVE "nab passive"
+#define NAB_AGGRESSIVE "nab aggressive"
+#define NAB_KILL "nab kill"
+
+#define BORGMESON 0x1
+#define BORGTHERM 0x2
+#define BORGXRAY 0x4
+#define BORGMATERIAL 8
+
+#define HOSTILE_STANCE_IDLE 1
+#define HOSTILE_STANCE_ALERT 2
+#define HOSTILE_STANCE_ATTACK 3
+#define HOSTILE_STANCE_ATTACKING 4
+#define HOSTILE_STANCE_TIRED 5
+#define HOSTILE_STANCE_INSIDE 6
+
+#define LEFT 0x1
+#define RIGHT 0x2
+#define UNDER 0x4
+
+// Pulse levels, very simplified.
+#define PULSE_NONE 0 // So !M.pulse checks would be possible.
+#define PULSE_SLOW 1 // <60 bpm
+#define PULSE_NORM 2 // 60-90 bpm
+#define PULSE_FAST 3 // 90-120 bpm
+#define PULSE_2FAST 4 // >120 bpm
+#define PULSE_THREADY 5 // Occurs during hypovolemic shock
+#define GETPULSE_HAND 0 // Less accurate. (hand)
+#define GETPULSE_TOOL 1 // More accurate. (med scanner, sleeper, etc.)
+
+//intent flags, why wasn't this done the first time?
+#define I_HELP "help"
+#define I_DISARM "disarm"
+#define I_GRAB "grab"
+#define I_HURT "harm"
+#define I_DODGE "dodge"
+#define I_PARRY "parry"
+//atk intents
+#define I_DEFENSE "defense"
+#define I_OFFENSE "offense"
+#define I_QUICK "quick"
+#define I_AIMED "aimed"
+#define I_GUARD "guard"
+#define I_WEAK "weak"
+#define I_FEINT "feint"
+#define I_DUAL "dual"
+
+//These are used Bump() code for living mobs, in the mob_bump_flag, mob_swap_flags, and mob_push_flags vars to determine whom can bump/swap with whom.
+#define HUMAN 1
+#define MONKEY 2
+#define ALIEN 4
+#define ROBOT 8
+#define SLIME 16
+#define SIMPLE_ANIMAL 32
+#define HEAVY 64
+#define ALLMOBS (HUMAN|MONKEY|ALIEN|ROBOT|SLIME|SIMPLE_ANIMAL|HEAVY)
+
+// Robot AI notifications
+#define ROBOT_NOTIFICATION_NEW_UNIT 1
+#define ROBOT_NOTIFICATION_NEW_NAME 2
+#define ROBOT_NOTIFICATION_NEW_MODULE 3
+#define ROBOT_NOTIFICATION_MODULE_RESET 4
+
+// Appearance change flags
+#define APPEARANCE_UPDATE_DNA 0x1
+#define APPEARANCE_RACE (0x2|APPEARANCE_UPDATE_DNA)
+#define APPEARANCE_GENDER (0x4|APPEARANCE_UPDATE_DNA)
+#define APPEARANCE_SKIN 0x8
+#define APPEARANCE_HAIR 0x10
+#define APPEARANCE_HAIR_COLOR 0x20
+#define APPEARANCE_FACIAL_HAIR 0x40
+#define APPEARANCE_FACIAL_HAIR_COLOR 0x80
+#define APPEARANCE_EYE_COLOR 0x100
+#define APPEARANCE_ALL_HAIR (APPEARANCE_HAIR|APPEARANCE_HAIR_COLOR|APPEARANCE_FACIAL_HAIR|APPEARANCE_FACIAL_HAIR_COLOR)
+#define APPEARANCE_ALL 0xFFFF
+
+// Click cooldown
+#define DEFAULT_SLOW_COOLDOWN 16 //The default cooldown for slow actions.
+#define DEFAULT_ATTACK_COOLDOWN 8 //Default timeout for aggressive actions
+#define DEFAULT_QUICK_COOLDOWN 4
+
+
+#define MIN_SUPPLIED_LAW_NUMBER 15
+#define MAX_SUPPLIED_LAW_NUMBER 50
+
+
+// NT's alignment towards the character
+#define COMPANY_LOYAL "Loyal"
+#define COMPANY_SUPPORTATIVE "Supportive"
+#define COMPANY_NEUTRAL "Neutral"
+#define COMPANY_SKEPTICAL "Skeptical"
+#define COMPANY_OPPOSED "Opposed"
+
+#define COMPANY_ALIGNMENTS list(COMPANY_LOYAL,COMPANY_SUPPORTATIVE,COMPANY_NEUTRAL,COMPANY_SKEPTICAL,COMPANY_OPPOSED)
+
+// Defines mob sizes, used by lockers and to determine what is considered a small sized mob, etc.
+#define MOB_LARGE 40
+#define MOB_MEDIUM 20
+#define MOB_SMALL 10
+#define MOB_TINY 5
+#define MOB_MINISCULE 1
+
+// Defines how strong the species is compared to humans. Think like strength in D&D
+#define STR_VHIGH 2
+#define STR_HIGH 1
+#define STR_MEDIUM 0
+#define STR_LOW -1
+#define STR_VLOW -2
+
+// Gluttony levels.
+#define GLUT_TINY 1 // Eat anything tiny and smaller
+#define GLUT_SMALLER 2 // Eat anything smaller than we are
+#define GLUT_ANYTHING 4 // Eat anything, ever
+
+#define GLUT_ITEM_TINY 8 // Eat items with a w_class of small or smaller
+#define GLUT_ITEM_NORMAL 16 // Eat items with a w_class of normal or smaller
+#define GLUT_ITEM_ANYTHING 32 // Eat any item
+#define GLUT_PROJECTILE_VOMIT 64 // When vomitting, does it fly out?
+
+// Devour speeds, returned by can_devour()
+#define DEVOUR_SLOW 1
+#define DEVOUR_FAST 2
+
+#define TINT_NONE 0
+#define TINT_MODERATE 1
+#define TINT_HEAVY 2
+#define TINT_BLIND 3
+
+#define FLASH_PROTECTION_VULNERABLE -2
+#define FLASH_PROTECTION_REDUCED -1
+#define FLASH_PROTECTION_NONE 0
+#define FLASH_PROTECTION_MODERATE 1
+#define FLASH_PROTECTION_MAJOR 2
+
+#define ANIMAL_SPAWN_DELAY round(config.respawn_delay / 6)
+#define DRONE_SPAWN_DELAY round(config.respawn_delay / 3)
+
+// Incapacitation flags, used by the mob/proc/incapacitated() proc
+#define INCAPACITATION_NONE 0
+#define INCAPACITATION_RESTRAINED 1
+#define INCAPACITATION_BUCKLED_PARTIALLY 2
+#define INCAPACITATION_BUCKLED_FULLY 4
+#define INCAPACITATION_STUNNED 8
+#define INCAPACITATION_FORCELYING 16 //needs a better name - represents being knocked down BUT still conscious.
+#define INCAPACITATION_KNOCKOUT 32
+
+#define INCAPACITATION_KNOCKDOWN (INCAPACITATION_KNOCKOUT|INCAPACITATION_FORCELYING)
+#define INCAPACITATION_DISABLED (INCAPACITATION_KNOCKDOWN|INCAPACITATION_STUNNED)
+#define INCAPACITATION_DEFAULT (INCAPACITATION_RESTRAINED|INCAPACITATION_BUCKLED_FULLY|INCAPACITATION_DISABLED)
+#define INCAPACITATION_ALL (~INCAPACITATION_NONE)
+
+// Organs.
+#define BP_MOUTH "mouth"
+#define BP_EYES "eyes"
+#define BP_HEART "heart"
+#define BP_LUNGS "lungs"
+#define BP_TRACH "tracheae"
+#define BP_BRAIN "brain"
+#define BP_LIVER "liver"
+#define BP_KIDNEYS "kidneys"
+#define BP_PLASMA "plasma vessel"
+#define BP_APPENDIX "appendix"
+#define BP_CELL "cell"
+#define BP_HIVE "hive node"
+#define BP_NUTRIENT "nutrient vessel"
+#define BP_ACID "acid gland"
+#define BP_EGG "egg sac"
+#define BP_RESIN "resin spinner"
+#define BP_STRATA "neural strata"
+#define BP_RESPONSE "response node"
+#define BP_GBLADDER "gas bladder"
+#define BP_POLYP "polyp segment"
+#define BP_ANCHOR "anchoring ligament"
+#define BP_PHORON "phoron filter"
+#define BP_THROAT "throat"
+#define BP_VCHORDS "vocal chords"
+#define BP_TONGUE "tongue"
+
+// Robo Organs.
+#define BP_POSIBRAIN "posibrain"
+#define BP_VOICE "vocal synthesiser"
+#define BP_STACK "stack"
+#define BP_OPTICS "optics"
+
+
+// Limbs.
+#define BP_L_FOOT "l_foot"
+#define BP_R_FOOT "r_foot"
+#define BP_L_LEG "l_leg"
+#define BP_R_LEG "r_leg"
+#define BP_L_HAND "l_hand"
+#define BP_R_HAND "r_hand"
+#define BP_L_ARM "l_arm"
+#define BP_R_ARM "r_arm"
+#define BP_HEAD "head"
+#define BP_CHEST "chest"
+#define BP_GROIN "groin"
+#define BP_ALL_LIMBS list(BP_CHEST, BP_GROIN, BP_HEAD, BP_L_ARM, BP_R_ARM, BP_L_HAND, BP_R_HAND, BP_L_LEG, BP_R_LEG, BP_L_FOOT, BP_R_FOOT)
+#define BP_BY_DEPTH list(BP_HEAD, BP_L_HAND, BP_R_HAND, BP_L_ARM, BP_R_ARM, BP_L_FOOT, BP_R_FOOT, BP_L_LEG, BP_R_LEG, BP_GROIN, BP_CHEST)
+
+#define SYNTH_BLOOD_COLOUR "#030303"
+#define SYNTH_FLESH_COLOUR "#575757"
+
+#define MOB_PULL_NONE 0
+#define MOB_PULL_SMALLER 1
+#define MOB_PULL_SAME 2
+#define MOB_PULL_LARGER 3
+
+//carbon taste sensitivity defines, used in mob/living/carbon/proc/ingest
+#define TASTE_HYPERSENSITIVE 3 //anything below 5%
+#define TASTE_SENSITIVE 2 //anything below 7%
+#define TASTE_NORMAL 1 //anything below 15%
+#define TASTE_DULL 0.5 //anything below 30%
+#define TASTE_NUMB 0.1 //anything below 150%
+
+//Used by show_message() and emotes
+#define VISIBLE_MESSAGE 1
+#define AUDIBLE_MESSAGE 2
+
+//used for getting species temp values
+#define COLD_LEVEL_1 -1
+#define COLD_LEVEL_2 -2
+#define COLD_LEVEL_3 -3
+#define HEAT_LEVEL_1 1
+#define HEAT_LEVEL_2 2
+#define HEAT_LEVEL_3 3
+
+//Synthetic human temperature vals
+#define SYNTH_COLD_LEVEL_1 50
+#define SYNTH_COLD_LEVEL_2 -1
+#define SYNTH_COLD_LEVEL_3 -1
+#define SYNTH_HEAT_LEVEL_1 500
+#define SYNTH_HEAT_LEVEL_2 1000
+#define SYNTH_HEAT_LEVEL_3 2000
+
+#define CORPSE_CAN_REENTER 1
+#define CORPSE_CAN_REENTER_AND_RESPAWN 2
+
+#define SPECIES_HUMAN "Human"
+#define SPECIES_TAJARA "Tajara"
+#define SPECIES_DIONA "Diona"
+#define SPECIES_VOX "Vox"
+#define SPECIES_IPC "Machine"
+#define SPECIES_UNATHI "Unathi"
+#define SPECIES_SKRELL "Skrell"
+#define SPECIES_NABBER "Giant Armoured Serpentid"
+#define SPECIES_PROMETHEAN "Promethean"
+#define SPECIES_BOGANI "Bogani"
+#define SPECIES_EGYNO "Egyno"
+
+#define SURGERY_CLOSED 0
+#define SURGERY_OPEN 1
+#define SURGERY_RETRACTED 2
+#define SURGERY_ENCASED 3
+
+//#define STAMINA_EXHAUST 250
+
+//Moods levels for humans
+#define MOOD_LEVEL_HAPPY4 20
+#define MOOD_LEVEL_HAPPY3 15
+#define MOOD_LEVEL_HAPPY2 10
+#define MOOD_LEVEL_HAPPY1 5
+#define MOOD_LEVEL_NEUTRAL 0
+#define MOOD_LEVEL_SAD1 -5
+#define MOOD_LEVEL_SAD2 -10
+#define MOOD_LEVEL_SAD3 -15
+#define MOOD_LEVEL_SAD4 -20
+
+#define NUTRITION_LEVEL_FAT 550
+#define NUTRITION_LEVEL_FULL 500
+#define NUTRITION_LEVEL_WELL_FED 450
+#define NUTRITION_LEVEL_FED 350
+#define NUTRITION_LEVEL_HUNGRY 250
+#define NUTRITION_LEVEL_STARVING 150
+
+//Thirst levels for humans
+#define THIRST_LEVEL_MAX 800
+#define THIRST_LEVEL_FILLED 600
+#define THIRST_LEVEL_MEDIUM 300
+#define THIRST_LEVEL_THIRSTY 200
+#define THIRST_LEVEL_DEHYDRATED 50
+#define THIRST_FACTOR 0.5
+
+//Disgust levels for humans
+#define DISGUST_LEVEL_MAXEDOUT 150
+#define DISGUST_LEVEL_DISGUSTED 75
+#define DISGUST_LEVEL_VERYGROSS 50
+#define DISGUST_LEVEL_GROSS 25
+
+//Starvation stuff
+
+#define STARVATION_MIN 60 //If you have less nutrition than this value, the hunger indicator starts flashing - THIS ISN'T USED!
+#define STARVATION_NOTICE 45 //If you have more nutrition than this value, you get an occasional message reminding you that you're going to starve soon
+#define STARVATION_WEAKNESS 20 //Otherwise, if you have more nutrition than this value, you occasionally become weak and receive minor damage
+#define STARVATION_NEARDEATH 5 //Otherwise, if you have more nutrition than this value, you have seizures and occasionally receive damage
+
+//If you have less nutrition than STARVATION_NEARDEATH, you start getting damage
+#define STARVATION_OXY_DAMAGE 2.5
+#define STARVATION_TOX_DAMAGE 2.5
+#define STARVATION_BRAIN_DAMAGE 2.5
+
+#define STARVATION_OXY_HEAL_RATE 1 //While starving, THIS much oxygen damage is restored per life tick (instead of the default 5)
+
+//Temperature stuff
+//BODYTEMP_COLD_DAMAGE_LIMIT -13�C Below which freezing damage occurs. (defined in items_clothing.dm)
+#define TEMPERATURE_REFRESHING 278.15 //5�C Below which drinks and foods are considered refreshing.
+#define TEMPERATURE_WARM 323.15 //50�C Above which drinks and foods are considered warm.
+//BODYTEMP_HEAT_DAMAGE_LIMIT 87�C Above which burn damage occurs. (defined in items_clothing.dm)#define STASIS_MISC "misc"
+#define STASIS_CRYOBAG "cryobag"
+#define STASIS_COLD "cold"
+
+#define AURA_CANCEL 1
+#define AURA_FALSE 2
+#define AURA_TYPE_BULLET "Bullet"
+#define AURA_TYPE_WEAPON "Weapon"
+#define AURA_TYPE_THROWN "Thrown"
+#define AURA_TYPE_LIFE "Life"
+
+//Social classes
+#define SOCIAL_CLASS_MIN 1
+#define SOCIAL_CLASS_MED 2
+#define SOCIAL_CLASS_HIGH 3
+#define SOCIAL_CLASS_MAX 4
+
+#define SKILL(x) /datum/skill/##x
+
+#define STAT(x) /datum/stat/##x
+
+#define GET_STAT(x) my_stats[STAT(x)]
+#define GET_SKILL(x) my_skills[SKILL(x)]
+
+#define STAT_LEVEL(x) my_stats[STAT(x)]?.level
+#define SKILL_LEVEL(x) my_skills[SKILL(x)]?.level
+
+//TDM
+#define BLUE_TEAM "Bluecoats"
+#define RED_TEAM "Redcoats"
+
+/*
+#define SKILL_LOW(x) x<=4
+
+#define SKILL_MED(x) x>=5 && x<=8
+
+#define SKILL_HIGH(x) x>=9
+*/
\ No newline at end of file
diff --git a/code/__defines/proc_presets.dm b/code/__defines/proc_presets.dm
new file mode 100644
index 00000000..05772133
--- /dev/null
+++ b/code/__defines/proc_presets.dm
@@ -0,0 +1 @@
+#define MERGE_ASSOCS_WITH_NUM_VALUES(a, b) merge_assoc_lists(a, b, /proc/assoc_merge_add, 1)
diff --git a/code/__defines/process_scheduler.dm b/code/__defines/process_scheduler.dm
new file mode 100644
index 00000000..d9c8f106
--- /dev/null
+++ b/code/__defines/process_scheduler.dm
@@ -0,0 +1,19 @@
+// Process status defines
+#define PROCESS_STATUS_IDLE 1
+#define PROCESS_STATUS_QUEUED 2
+#define PROCESS_STATUS_RUNNING 3
+#define PROCESS_STATUS_MAYBE_HUNG 4
+#define PROCESS_STATUS_PROBABLY_HUNG 5
+#define PROCESS_STATUS_HUNG 6
+
+// Process time thresholds
+#define PROCESS_DEFAULT_HANG_WARNING_TIME 300 // 30 seconds
+#define PROCESS_DEFAULT_HANG_ALERT_TIME 600 // 60 seconds
+#define PROCESS_DEFAULT_HANG_RESTART_TIME 900 // 90 seconds
+#define PROCESS_DEFAULT_SCHEDULE_INTERVAL 50 // 50 ticks
+#define PROCESS_DEFAULT_SLEEP_INTERVAL 8 // 1/8th of a tick
+
+// SCHECK macros
+// This references src directly to work around a weird bug with try/catch
+#define SCHECK_EVERY(this_many_calls) if(++src.calls_since_last_scheck >= this_many_calls) sleepCheck()
+#define SCHECK sleepCheck()
diff --git a/code/__defines/qdel.dm b/code/__defines/qdel.dm
new file mode 100644
index 00000000..444c1340
--- /dev/null
+++ b/code/__defines/qdel.dm
@@ -0,0 +1,23 @@
+//defines that give qdel hints. these can be given as a return in destory() or by calling
+
+#define QDEL_HINT_QUEUE 0 //qdel should queue the object for deletion.
+#define QDEL_HINT_LETMELIVE 1 //qdel should let the object live after calling destory.
+#define QDEL_HINT_IWILLGC 2 //functionally the same as the above. qdel should assume the object will gc on its own, and not check it.
+#define QDEL_HINT_HARDDEL 3 //qdel should assume this object won't gc, and queue a hard delete using a hard reference.
+#define QDEL_HINT_HARDDEL_NOW 4 //qdel should assume this object won't gc, and hard del it post haste.
+#define QDEL_HINT_FINDREFERENCE 5 //functionally identical to QDEL_HINT_QUEUE if TESTING is not enabled in _compiler_options.dm.
+ //if TESTING is enabled, qdel will call this object's find_references() verb.
+//defines for the gc_destroyed var
+
+#define GC_QUEUE_PREQUEUE 1
+#define GC_QUEUE_CHECK 2
+#define GC_QUEUE_HARDDELETE 3
+#define GC_QUEUE_COUNT 3 //increase this when adding more steps.
+
+#define GC_QUEUED_FOR_QUEUING -1
+#define GC_QUEUED_FOR_HARD_DEL -2
+#define GC_CURRENTLY_BEING_QDELETED -3
+
+#define QDELING(X) (X.gc_destroyed)
+#define QDELETED(X) (!X || QDELING(X))
+#define QDESTROYING(X) (!X || X.gc_destroyed == GC_CURRENTLY_BEING_QDELETED)
diff --git a/code/__defines/research.dm b/code/__defines/research.dm
new file mode 100644
index 00000000..d40722d0
--- /dev/null
+++ b/code/__defines/research.dm
@@ -0,0 +1,18 @@
+#define SHEET_MATERIAL_AMOUNT 2000
+
+#define TECH_MATERIAL "materials"
+#define TECH_ENGINEERING "engineering"
+#define TECH_PHORON "phorontech"
+#define TECH_POWER "powerstorage"
+#define TECH_BLUESPACE "bluespace"
+#define TECH_BIO "biotech"
+#define TECH_COMBAT "combat"
+#define TECH_MAGNET "magnets"
+#define TECH_DATA "programming"
+#define TECH_ILLEGAL "syndicate"
+#define TECH_ARCANE "arcane"
+
+#define IMPRINTER 0x1 //For circuits. Uses glass/chemicals.
+#define PROTOLATHE 0x2 //New stuff. Uses glass/metal/chemicals
+#define MECHFAB 0x4 //Mechfab
+#define CHASSIS 0x8 //For protolathe, but differently
diff --git a/code/__defines/shields.dm b/code/__defines/shields.dm
new file mode 100644
index 00000000..61feddb6
--- /dev/null
+++ b/code/__defines/shields.dm
@@ -0,0 +1,57 @@
+#define SHIELD_DAMTYPE_PHYSICAL 1 // Physical damage - bullets, meteors, various hand objects - aka. "brute" damtype.
+#define SHIELD_DAMTYPE_EM 2 // Electromagnetic damage - Ion weaponry, stun beams, ...
+#define SHIELD_DAMTYPE_HEAT 3 // Heat damage - Lasers, fire
+
+#define ENERGY_PER_HP (50 KILOWATTS)// Base amount energy that will be deducted from the generator's internal reserve per 1 HP of damage taken
+#define ENERGY_UPKEEP_PER_TILE 100 // Base upkeep per tile protected. Multiplied by various enabled shield modes. Without them the field does literally nothing.
+
+// This shield model is slightly inspired by Sins of a Solar Empire series. In short, shields are designed to analyze what hits them, and adapt themselves against that type of damage.
+// This means shields will become increasingly effective against things like emitters - as they will adapt to heat damage, however they will be vulnerable to brute and EM damage.
+// In a theoretical assault scenario, it is best to combine all damage types, so mitigation can't build up. The value is capped to prevent full scale invulnerability.
+
+#define MAX_MITIGATION_BASE 50 // % Base maximal reachable mitigation.
+#define MAX_MITIGATION_RESEARCH 10 // % Added to MAX_MITIGATION_BASE when generator is built using more advanced components. This value is added for each "tier" of used component, ie. basic one has 1, the best one has 3. Actual maximum should be 80% in this case (with best components). Make sure you won't get above 100%!
+#define MITIGATION_HIT_GAIN 5 // Mitigation gain per hit of respective damage type.
+#define MITIGATION_HIT_LOSS 4 // Mitigation loss per hit. If we get hit once by EM damage type, EM mitigation will grow, while Physical and Heat mitigation values drop.
+#define MITIGATION_LOSS_PASSIVE 0.5 // Mitigation of all damage types will drop by this every tick, up to 0.
+
+// Shield modes allow you to calibrate the field to fit specific needs. It is, for example, possible to create a field that will block airflow, but let people pass by calibrating it
+// properly. Each enabled shield mode adds up to the upkeep power usage, however. The following defines are a multiplier - 1.5 means the power usage will be increased 1.5x.
+
+#define MODEUSAGE_HYPERKINETIC // Blocks meteors and projectile based weapons. Relatively low as the shields are primarily intended as an anti-meteor countermeasure.
+#define MODEUSAGE_PHOTONIC // Blocks energy weapons, and makes the field opaque.
+#define MODEUSAGE_NONHUMANS // Blocks most organic lifeforms, with an exception being humanoid mobs. Typical uses include carps.
+#define MODEUSAGE_HUMANOIDS // Blocks humanoid mobs.
+#define MODEUSAGE_ANORGANIC // Blocks silicon-based mobs (cyborgs, drones, FBPs, IPCs, ..)
+#define MODEUSAGE_ATMOSPHERIC // Blocks airflow.
+#define MODEUSAGE_HULL 1 // Enables hull shielding mode, which changes a square shaped field into a field that covers external hull only.
+#define MODEUSAGE_BYPASS // Attempts to counter shield diffusers. Puts very large EM strain on the shield when doing so. Has to be hacked.
+#define MODEUSAGE_OVERCHARGE 3 // Overcharges the shield, causing it to shock anyone who touches a field segment. Best used with MODE_ORGANIC_HUMANOIDS. Has to be hacked.
+#define MODEUSAGE_MODULATE 2 // Modulates the shield, enabling the mitigation system.
+
+// Relevant mode bitflags (maximal of 16 flags due to current BYOND limitations)
+#define MODEFLAG_HYPERKINETIC 1
+#define MODEFLAG_PHOTONIC 2
+#define MODEFLAG_NONHUMANS 4
+#define MODEFLAG_HUMANOIDS 8
+#define MODEFLAG_ANORGANIC 16
+#define MODEFLAG_ATMOSPHERIC 32
+#define MODEFLAG_HULL 64
+#define MODEFLAG_BYPASS 128
+#define MODEFLAG_OVERCHARGE 256
+#define MODEFLAG_MODULATE 512
+#define MODEFLAG_MULTIZ 1024
+#define MODEFLAG_EM 2048
+
+// Return codes for shield hits.
+#define SHIELD_ABSORBED 1 // The shield has completely absorbed the hit
+#define SHIELD_BREACHED_MINOR 2 // The hit was absorbed, but a small gap will be created in the field (1-3 tiles)
+#define SHIELD_BREACHED_MAJOR 3 // Same as above, with 2-5 tile gap
+#define SHIELD_BREACHED_CRITICAL 4 // Same as above, with 4-8 tile gap
+#define SHIELD_BREACHED_FAILURE 5 // Same as above, with 8-16 tile gap. Occurs when the hit exhausts all remaining shield energy.
+
+#define SHIELD_OFF 0 // The shield is offline
+#define SHIELD_DISCHARGING 1 // The shield is shutting down and discharging.
+#define SHIELD_RUNNING 2 // The shield is running
+
+#define SHIELD_SHUTDOWN_DISPERSION_RATE (500 KILOWATTS) // The rate at which shield energy disperses when shutdown is initiated.
\ No newline at end of file
diff --git a/code/__defines/species.dm b/code/__defines/species.dm
new file mode 100644
index 00000000..8e89b09c
--- /dev/null
+++ b/code/__defines/species.dm
@@ -0,0 +1,38 @@
+// Species flags.
+#define SPECIES_FLAG_NO_MINOR_CUT 0x0001 // Can step on broken glass with no ill-effects. Either thick skin (diona/vox), cut resistant (slimes) or incorporeal (shadows)
+#define SPECIES_FLAG_IS_PLANT 0x0002 // Is a treeperson.
+#define SPECIES_FLAG_NO_SCAN 0x0004 // Cannot be scanned in a DNA machine/genome-stolen.
+#define SPECIES_FLAG_NO_PAIN 0x0008 // Cannot suffer halloss/recieves deceptive health indicator.
+#define SPECIES_FLAG_NO_SLIP 0x0010 // Cannot fall over.
+#define SPECIES_FLAG_NO_POISON 0x0020 // Cannot not suffer toxloss.
+#define SPECIES_FLAG_NO_EMBED 0x0040 // Can step on broken glass with no ill-effects and cannot have shrapnel embedded in it.
+#define SPECIES_FLAG_CAN_NAB 0x0080 // Uses the special set of grab rules.
+#define SPECIES_FLAG_NO_BLOCK 0x0100 // Unable to block or defend itself from attackers.
+#define SPECIES_FLAG_NEED_DIRECT_ABSORB 0x0200 // This species can only have their DNA taken by direct absorption.
+
+// unused: 0x8000 - higher than this will overflow
+
+// Species spawn flags
+#define SPECIES_IS_WHITELISTED 0x1 // Must be whitelisted to play.
+#define SPECIES_IS_RESTRICTED 0x2 // Is not a core/normally playable species. (castes, mutantraces)
+#define SPECIES_CAN_JOIN 0x4 // Species is selectable in chargen.
+#define SPECIES_NO_FBP_CONSTRUCTION 0x8 // FBP of this species can't be made in-game.
+#define SPECIES_NO_FBP_CHARGEN 0x10 // FBP of this species can't be selected at chargen.
+#define SPECIES_NO_LACE 0x20 // This species can't have a neural lace.
+
+// Species appearance flags
+#define HAS_SKIN_TONE_NORMAL 0x1 // Skin tone selectable in chargen for baseline humans (0-220)
+#define HAS_SKIN_COLOR 0x2 // Skin colour selectable in chargen. (RGB)
+#define HAS_LIPS 0x4 // Lips are drawn onto the mob icon. (lipstick)
+#define HAS_UNDERWEAR 0x8 // Underwear is drawn onto the mob icon.
+#define HAS_EYE_COLOR 0x10 // Eye colour selectable in chargen. (RGB)
+#define HAS_HAIR_COLOR 0x20 // Hair colour selectable in chargen. (RGB)
+#define RADIATION_GLOWS 0x40 // Radiation causes this character to glow.
+#define HAS_SKIN_TONE_GRAV 0x80 // Skin tone selectable in chargen for grav-adapted humans (0-100)
+#define HAS_SKIN_TONE_SPCR 0x100 // Skin tone selectable in chargen for spacer humans (0-165)
+#define HAS_BASE_SKIN_COLOURS 0x200 // Has multiple base skin sprites to go off of
+#define HAS_A_SKIN_TONE (HAS_SKIN_TONE_NORMAL | HAS_SKIN_TONE_GRAV | HAS_SKIN_TONE_SPCR) // Species has a numeric skintone
+
+// Skin Defines
+#define SKIN_NORMAL 0
+#define SKIN_THREAT 1
diff --git a/code/__defines/subsystem-priority.dm b/code/__defines/subsystem-priority.dm
new file mode 100644
index 00000000..0236aea1
--- /dev/null
+++ b/code/__defines/subsystem-priority.dm
@@ -0,0 +1,28 @@
+// Something to remember when setting priorities: SS_TICKER runs before Normal, which runs before SS_BACKGROUND.
+// Each group has its own priority bracket.
+// SS_BACKGROUND handles high server load differently than Normal and SS_TICKER do.
+// Higher priority also means a larger share of a given tick before sleep checks.
+
+// SS_TICKER
+// < none >
+
+#define SS_PRIORITY_DEFAULT 50 // Default priority for both normal and background processes
+
+// Normal
+#define SS_PRIORITY_OVERLAY 500 // Applies overlays. May cause overlay pop-in if it gets behind.
+#define SS_PRIORITY_CHAT 400 // Goonchat queue
+#define SS_PRIORITY_MOB 100 // Mob Life().
+#define SS_PRIORITY_MACHINERY 100 // Machinery + powernet ticks.
+#define SS_PRIORITY_AIR 80 // ZAS processing.
+#define SS_PRIORITY_AO 65 // Ambien occlusion shit
+#define SS_PRIORITY_AIRFLOW 15 // Object movement from ZAS airflow.
+
+
+// SS_BACKGROUND
+#define SS_PRIORITY_OBJECTS 60 // processing_objects processing.
+#define SS_PRIORITY_PROCESSING 30 // Generic datum processor. Replaces objects processor.
+#define SS_PRIORITY_GARBAGE 25 // Garbage collection.
+#define SS_PRIORITY_VINES 25 // Spreading vine effects.
+#define SS_PRIORITY_WIRELESS 10 // Wireless connection setup.
+#define SS_PRIORITY_PING 10 // Client ping.
+#define SS_PRIORITY_PROJECTILES 10 // Projectile processing!
diff --git a/code/__defines/subsystems.dm b/code/__defines/subsystems.dm
new file mode 100644
index 00000000..05cadb9d
--- /dev/null
+++ b/code/__defines/subsystems.dm
@@ -0,0 +1,70 @@
+
+//Timing subsystem
+//See MC.dm
+
+//For servers that can't do with any additional lag, set this to none in flightpacks.dm in subsystem/processing.
+#define FLIGHTSUIT_PROCESSING_NONE 0
+#define FLIGHTSUIT_PROCESSING_FULL 1
+
+#define INITIALIZATION_INSSATOMS 0 //New should not call Initialize
+#define INITIALIZATION_INNEW_MAPLOAD 1 //New should call Initialize(TRUE)
+#define INITIALIZATION_INNEW_REGULAR 2 //New should call Initialize(FALSE)
+
+#define INITIALIZE_HINT_NORMAL 0 //Nothing happens
+#define INITIALIZE_HINT_LATELOAD 1 //Call LateInitialize
+#define INITIALIZE_HINT_QDEL 2 //Call qdel on the atom
+
+//type and all subtypes should always call Initialize in New()
+#define INITIALIZE_IMMEDIATE(X) ##X/New(loc, ...){\
+ ..();\
+ if(!initialized) {\
+ args[1] = TRUE;\
+ SSatoms.InitAtom(src, args);\
+ }\
+}
+
+// Subsystem init_order, from highest priority to lowest priority
+// Subsystems shutdown in the reverse of the order they initialize in
+// The numbers just define the ordering, they are meaningless otherwise.
+
+#define INIT_ORDER_ASPECTS 20
+#define INIT_ORDER_SKYBOX 19
+#define INIT_ORDER_DBCORE 18
+#define INIT_ORDER_BLACKBOX 17
+#define INIT_ORDER_SERVER_MAINT 16
+#define INIT_ORDER_JOBS 15
+#define INIT_ORDER_EVENTS 14
+#define INIT_ORDER_TICKER 13
+#define INIT_ORDER_MAPPING 12
+#define INIT_ORDER_ATOMS 11
+#define INIT_ORDER_LANGUAGE 10
+#define INIT_ORDER_MACHINES 9
+#define INIT_ORDER_SHUTTLE 3
+#define INIT_ORDER_AO 5
+#define INIT_ORDER_TIMER 1
+#define INIT_ORDER_DEFAULT 0
+#define INIT_ORDER_AIR -1
+#define INIT_ORDER_MINIMAP -2
+#define INIT_ORDER_ASSETS -3
+#define INIT_ORDER_ICON_SMOOTHING -5
+#define INIT_ORDER_OVERLAY -6
+#define INIT_ORDER_XKEYSCORE -10
+#define INIT_ORDER_STICKY_BAN -10
+#define INIT_ORDER_LIGHTING -20
+#define INIT_ORDER_SQUEAK -40
+#define INIT_ORDER_PERSISTENCE -100
+#define INIT_OPEN_SPACE -150
+#define INIT_BAY_LEGACY -200
+#define INIT_ORDER_CHAT -210 //Should be last to ensure chat remains smooth during init.
+
+
+
+// SS runlevels
+
+#define RUNLEVEL_INIT 0
+#define RUNLEVEL_LOBBY 1
+#define RUNLEVEL_SETUP 2
+#define RUNLEVEL_GAME 4
+#define RUNLEVEL_POSTGAME 8
+
+#define RUNLEVELS_DEFAULT (RUNLEVEL_SETUP | RUNLEVEL_GAME | RUNLEVEL_POSTGAME)
diff --git a/code/__defines/targeting.dm b/code/__defines/targeting.dm
new file mode 100644
index 00000000..4bbe7345
--- /dev/null
+++ b/code/__defines/targeting.dm
@@ -0,0 +1,4 @@
+#define TARGET_CAN_MOVE 1
+#define TARGET_CAN_RUN 2
+#define TARGET_CAN_CLICK 4
+#define TARGET_CAN_RADIO 8
\ No newline at end of file
diff --git a/code/__defines/tgui.dm b/code/__defines/tgui.dm
new file mode 100644
index 00000000..1b3925f4
--- /dev/null
+++ b/code/__defines/tgui.dm
@@ -0,0 +1,4 @@
+#define UI_INTERACTIVE 2 // Green/Interactive
+#define UI_UPDATE 1 // Orange/Updates Only
+#define UI_DISABLED 0 // Red/Disabled
+#define UI_CLOSE -1 // Closed
diff --git a/code/__defines/topic.dm b/code/__defines/topic.dm
new file mode 100644
index 00000000..981de408
--- /dev/null
+++ b/code/__defines/topic.dm
@@ -0,0 +1,3 @@
+#define TOPIC_NOACTION 0
+#define TOPIC_HANDLED 1
+#define TOPIC_REFRESH 2
diff --git a/code/__defines/turfs.dm b/code/__defines/turfs.dm
new file mode 100644
index 00000000..48692745
--- /dev/null
+++ b/code/__defines/turfs.dm
@@ -0,0 +1,10 @@
+#define TURF_REMOVE_CROWBAR 1
+#define TURF_REMOVE_SCREWDRIVER 2
+#define TURF_REMOVE_SHOVEL 4
+#define TURF_REMOVE_WRENCH 8
+#define TURF_CAN_BREAK 16
+#define TURF_CAN_BURN 32
+#define TURF_HAS_EDGES 64
+#define TURF_HAS_CORNERS 128
+#define TURF_IS_FRAGILE 256
+#define TURF_ACID_IMMUNE 512
\ No newline at end of file
diff --git a/code/__defines/xenoarcheaology.dm b/code/__defines/xenoarcheaology.dm
new file mode 100644
index 00000000..b6af0d06
--- /dev/null
+++ b/code/__defines/xenoarcheaology.dm
@@ -0,0 +1,72 @@
+#define ARCHAEO_BOWL 1
+#define ARCHAEO_URN 2
+#define ARCHAEO_CUTLERY 3
+#define ARCHAEO_STATUETTE 4
+#define ARCHAEO_INSTRUMENT 5
+#define ARCHAEO_KNIFE 6
+#define ARCHAEO_COIN 7
+#define ARCHAEO_HANDCUFFS 8
+#define ARCHAEO_BEARTRAP 9
+#define ARCHAEO_LIGHTER 10
+#define ARCHAEO_BOX 11
+#define ARCHAEO_GASTANK 12
+#define ARCHAEO_TOOL 13
+#define ARCHAEO_METAL 14
+#define ARCHAEO_PEN 15
+#define ARCHAEO_CRYSTAL 16
+#define ARCHAEO_CULTBLADE 17
+#define ARCHAEO_TELEBEACON 18
+#define ARCHAEO_CLAYMORE 19
+#define ARCHAEO_CULTROBES 20
+#define ARCHAEO_SOULSTONE 21
+#define ARCHAEO_SHARD 22
+#define ARCHAEO_RODS 23
+#define ARCHAEO_STOCKPARTS 24
+#define ARCHAEO_KATANA 25
+#define ARCHAEO_LASER 26
+#define ARCHAEO_GUN 27
+#define ARCHAEO_UNKNOWN 28
+#define ARCHAEO_FOSSIL 29
+#define ARCHAEO_SHELL 30
+#define ARCHAEO_PLANT 31
+#define ARCHAEO_REMAINS_HUMANOID 32
+#define ARCHAEO_REMAINS_ROBOT 33
+#define ARCHAEO_REMAINS_XENO 34
+#define ARCHAEO_GASMASK 35
+#define MAX_ARCHAEO 35
+
+#define DIGSITE_GARDEN 1
+#define DIGSITE_ANIMAL 2
+#define DIGSITE_HOUSE 3
+#define DIGSITE_TECHNICAL 4
+#define DIGSITE_TEMPLE 5
+#define DIGSITE_WAR 6
+
+#define EFFECT_TOUCH 0
+#define EFFECT_AURA 1
+#define EFFECT_PULSE 2
+#define MAX_EFFECT 2
+
+#define TRIGGER_TOUCH 0
+#define TRIGGER_WATER 1
+#define TRIGGER_ACID 2
+#define TRIGGER_VOLATILE 3
+#define TRIGGER_TOXIN 4
+#define TRIGGER_FORCE 5
+#define TRIGGER_ENERGY 6
+#define TRIGGER_HEAT 7
+#define TRIGGER_COLD 8
+#define TRIGGER_PHORON 9
+#define TRIGGER_OXY 10
+#define TRIGGER_CO2 11
+#define TRIGGER_NITRO 12
+#define MAX_TRIGGER 12
+
+#define EFFECT_UNKNOWN 0
+#define EFFECT_ENERGY 1
+#define EFFECT_PSIONIC 2
+#define EFFECT_ELECTRO 3
+#define EFFECT_PARTICLE 4
+#define EFFECT_ORGANIC 5
+#define EFFECT_BLUESPACE 6
+#define EFFECT_SYNTH 7
\ No newline at end of file
diff --git a/code/__defines/~unit_testing.dm b/code/__defines/~unit_testing.dm
new file mode 100644
index 00000000..88eebd5a
--- /dev/null
+++ b/code/__defines/~unit_testing.dm
@@ -0,0 +1,10 @@
+/*
+ *
+ * This file is used by Travis to indicate that Unit Tests are to be ran.
+ * Do not add anything but the UNIT_TEST definition here as it will be overwritten by Travis when running tests.
+ *
+ *
+ * Should you wish to edit set UNIT_TEST to 1 like so:
+ * #define UNIT_TEST 1
+ */
+#define UNIT_TEST 0
diff --git a/code/_global_vars/configuration.dm b/code/_global_vars/configuration.dm
new file mode 100644
index 00000000..363c8ef0
--- /dev/null
+++ b/code/_global_vars/configuration.dm
@@ -0,0 +1,32 @@
+// Bomb cap!
+GLOBAL_VAR_INIT(max_explosion_range, 14)
+
+
+var/href_logfile = null
+var/game_version = "Interstation12"
+var/changelog_hash = ""
+var/game_year = (text2num(time2text(world.realtime, "YYYY")) + 544)
+var/join_motd = null
+
+var/master_mode = "extended" // "extended"
+var/secondary_mode = "extended"
+var/tertiary_mode = "extended"
+var/secret_force_mode = "secret" // if this is anything but "secret", the secret rotation will forceably choose this mode.
+
+var/Debug2 = 0
+
+var/gravity_is_on = 1
+var/round_progressing = 1
+
+// Database connections. A connection is established on world creation.
+// Ideally, the connection dies when the server restarts (After feedback logging.).
+var/DBConnection/dbcon = new() // Feedback database (New database)
+var/DBConnection/dbcon_old = new() // /tg/station database (Old database) -- see the files in the SQL folder for information on what goes where.
+
+
+// For FTP requests. (i.e. downloading runtime logs.)
+// However it'd be ok to use for accessing attack logs and such too, which are even laggier.
+var/fileaccess_timer = 0
+var/custom_event_msg = null
+
+GLOBAL_VAR_INIT(visibility_pref, FALSE)
\ No newline at end of file
diff --git a/code/_global_vars/lists/flavor.dm b/code/_global_vars/lists/flavor.dm
new file mode 100644
index 00000000..77fffe1c
--- /dev/null
+++ b/code/_global_vars/lists/flavor.dm
@@ -0,0 +1,81 @@
+// Used by robots and robot preferences.
+GLOBAL_LIST_INIT(robot_module_types, list(
+ "Standard", "Engineering", "Surgeon", "Crisis",
+ "Miner", "Janitor", "Service", "Clerical", "Security",
+ "Research"
+)) // This shouldn't be a static list. Am I the only one who cares about extendability around here?
+
+// Noises made when hit while typing.
+GLOBAL_LIST_INIT(hit_appends, list("-OOF", "-ACK", "-UGH", "-HRNK", "-HURGH", "-GLORF"))
+
+// Some scary sounds.
+GLOBAL_LIST_INIT(scarySounds, list(
+ 'sound/weapons/thudswoosh.ogg',
+ 'sound/weapons/Taser.ogg',
+ 'sound/weapons/armbomb.ogg',
+ 'sound/voice/hiss1.ogg',
+ 'sound/voice/hiss2.ogg',
+ 'sound/voice/hiss3.ogg',
+ 'sound/voice/hiss4.ogg',
+ 'sound/voice/hiss5.ogg',
+ 'sound/voice/hiss6.ogg',
+ 'sound/effects/Glassbr1.ogg',
+ 'sound/effects/Glassbr2.ogg',
+ 'sound/effects/Glassbr3.ogg',
+ 'sound/items/Welder.ogg',
+ 'sound/items/Welder2.ogg',
+ 'sound/machines/airlock_open.ogg',
+ 'sound/effects/clownstep1.ogg',
+ 'sound/effects/clownstep2.ogg'
+))
+
+// Reference list for disposal sort junctions. Filled up by sorting junction's New()
+GLOBAL_LIST_EMPTY(tagger_locations)
+
+GLOBAL_LIST_INIT(station_prefixes, list("", "Imperium", "Heretical", "Cuban",
+ "Psychic", "Elegant", "Common", "Uncommon", "Rare", "Unique",
+ "Houseruled", "Religious", "Atheist", "Traditional", "Houseruled",
+ "Mad", "Super", "Ultra", "Secret", "Top Secret", "Deep", "Death",
+ "Zybourne", "Central", "Main", "Government", "Uoi", "Fat",
+ "Automated", "Experimental", "Augmented"))
+
+GLOBAL_LIST_INIT(station_names, list("", "Stanford", "Dorf", "Alium",
+ "Prefix", "Clowning", "Aegis", "Ishimura", "Scaredy", "Death-World",
+ "Mime", "Honk", "Rogue", "MacRagge", "Ultrameens", "Safety", "Paranoia",
+ "Explosive", "Neckbear", "Donk", "Muppet", "North", "West", "East",
+ "South", "Slant-ways", "Widdershins", "Rimward", "Expensive",
+ "Procreatory", "Imperial", "Unidentified", "Immoral", "Carp", "Ork",
+ "Pete", "Control", "Nettle", "Aspie", "Class", "Crab", "Fist",
+ "Corrogated","Skeleton","Race", "Fatguy", "Gentleman", "Capitalist",
+ "Communist", "Bear", "Beard", "Derp", "Space", "Spess", "Star", "Moon",
+ "System", "Mining", "Neckbeard", "Research", "Supply", "Military",
+ "Orbital", "Battle", "Science", "Asteroid", "Home", "Production",
+ "Transport", "Delivery", "Extraplanetary", "Orbital", "Correctional",
+ "Robot", "Hats", "Pizza"))
+
+GLOBAL_LIST_INIT(station_suffixes, list("Station", "Frontier",
+ "Suffix", "Death-trap", "Space-hulk", "Lab", "Hazard","Spess Junk",
+ "Fishery", "No-Moon", "Tomb", "Crypt", "Hut", "Monkey", "Bomb",
+ "Trade Post", "Fortress", "Village", "Town", "City", "Edition", "Hive",
+ "Complex", "Base", "Facility", "Depot", "Outpost", "Installation",
+ "Drydock", "Observatory", "Array", "Relay", "Monitor", "Platform",
+ "Construct", "Hangar", "Prison", "Center", "Port", "Waystation",
+ "Factory", "Waypoint", "Stopover", "Hub", "HQ", "Office", "Object",
+ "Fortification", "Colony", "Planet-Cracker", "Roost", "Fat Camp",
+ "Airstrip"))
+
+GLOBAL_LIST_INIT(greek_letters, list("Alpha", "Beta", "Gamma", "Delta",
+ "Epsilon", "Zeta", "Eta", "Theta", "Iota", "Kappa", "Lambda", "Mu",
+ "Nu", "Xi", "Omicron", "Pi", "Rho", "Sigma", "Tau", "Upsilon", "Phi",
+ "Chi", "Psi", "Omega"))
+
+GLOBAL_LIST_INIT(phonetic_alphabet, list("Alpha", "Bravo", "Charlie",
+ "Delta", "Echo", "Foxtrot", "Golf", "Hotel", "India", "Juliet",
+ "Kilo", "Lima", "Mike", "November", "Oscar", "Papa", "Quebec",
+ "Romeo", "Sierra", "Tango", "Uniform", "Victor", "Whiskey", "X-ray",
+ "Yankee", "Zulu"))
+
+GLOBAL_LIST_INIT(numbers_as_words, list("One", "Two", "Three", "Four",
+ "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve",
+ "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen",
+ "Eighteen", "Nineteen"))
diff --git a/code/_global_vars/lists/locations.dm b/code/_global_vars/lists/locations.dm
new file mode 100644
index 00000000..1af7b15e
--- /dev/null
+++ b/code/_global_vars/lists/locations.dm
@@ -0,0 +1,18 @@
+GLOBAL_LIST_EMPTY(monkeystart)
+GLOBAL_LIST_EMPTY(newplayer_start)
+
+//Spawnpoints.
+GLOBAL_LIST_EMPTY(latejoin)
+GLOBAL_LIST_EMPTY(latejoin_gateway)
+GLOBAL_LIST_EMPTY(latejoin_cryo)
+GLOBAL_LIST_EMPTY(latejoin_cyborg)
+
+GLOBAL_LIST_EMPTY(prisonwarp) // Prisoners go to these
+GLOBAL_LIST_EMPTY(tdome1)
+GLOBAL_LIST_EMPTY(tdome2)
+GLOBAL_LIST_EMPTY(tdomeobserve)
+GLOBAL_LIST_EMPTY(tdomeadmin)
+GLOBAL_LIST_EMPTY(prisonsecuritywarp) // Prison security goes to these.
+GLOBAL_LIST_EMPTY(prisonwarped) // List of players already warped.
+
+GLOBAL_LIST_EMPTY(awaydestinations) // Away missions. A list of landmarks that the warpgate can take you to.
diff --git a/code/_global_vars/lists/logs.dm b/code/_global_vars/lists/logs.dm
new file mode 100644
index 00000000..6f79a510
--- /dev/null
+++ b/code/_global_vars/lists/logs.dm
@@ -0,0 +1,4 @@
+GLOBAL_LIST_EMPTY(bombers)
+GLOBAL_LIST_EMPTY(admin_log)
+GLOBAL_LIST_EMPTY(lastsignalers) // Keeps last 100 signals here in format: "[src] used \ref[src] @ location [src.loc]: [freq]/[code]"
+GLOBAL_LIST_EMPTY(lawchanges) // Stores who uploaded laws to which silicon-based lifeform, and what the law was.
diff --git a/code/_global_vars/lists/mapping.dm b/code/_global_vars/lists/mapping.dm
new file mode 100644
index 00000000..42e6f1ba
--- /dev/null
+++ b/code/_global_vars/lists/mapping.dm
@@ -0,0 +1,32 @@
+GLOBAL_LIST_INIT(cardinal, list(NORTH, SOUTH, EAST, WEST))
+GLOBAL_LIST_INIT(cardinalz, list(NORTH, SOUTH, EAST, WEST, UP, DOWN))
+GLOBAL_LIST_INIT(cornerdirs, list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST))
+GLOBAL_LIST_INIT(cornerdirsz, list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST, NORTH|UP, EAST|UP, WEST|UP, SOUTH|UP, NORTH|DOWN, EAST|DOWN, WEST|DOWN, SOUTH|DOWN))
+GLOBAL_LIST_INIT(alldirs, list(NORTH, SOUTH, EAST, WEST, NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST))
+GLOBAL_LIST_INIT(reverse_dir, list( // reverse_dir[dir] = reverse of dir
+ 2, 1, 3, 8, 10, 9, 11, 4, 6, 5, 7, 12, 14, 13, 15,
+ 32, 34, 33, 35, 40, 42, 41, 43, 36, 38, 37, 39, 44, 46, 45, 47,
+ 16, 18, 17, 19, 24, 26, 25, 27, 20, 22, 21, 23, 28, 30, 29, 31,
+ 48, 50, 49, 51, 56, 58, 57, 59, 52, 54, 53, 55, 60, 62, 61, 63
+))
+
+GLOBAL_LIST_INIT(flip_dir, list( // flip_dir[dir] = 180 degree rotation of dir. Unlike reverse_dir, UP remains UP & DOWN remains DOWN.
+ 2, 1, 3, 8, 10, 9, 11, 4, 6, 5, 7, 12, 14, 13, 15,
+ 16, 18, 17, 19, 24, 26, 25, 27, 20, 22, 21, 23, 28, 30, 29, 31, // UP - Same as first line but +16
+ 32, 34, 33, 35, 40, 42, 41, 43, 36, 38, 37, 39, 44, 46, 45, 47, // DOWN - Same as first line but +32
+ 48, 50, 49, 51, 56, 58, 57, 59, 52, 54, 53, 55, 60, 62, 61, 63 // UP+DOWN - Same as first line but +48
+))
+
+GLOBAL_LIST_INIT(cw_dir, list( // cw_dir[dir] = clockwise rotation of dir. Unlike reverse_dir, UP remains UP & DOWN remains DOWN.
+ 4, 8, 12, 2, 6, 10, 14, 1, 5, 9, 13, 3, 7, 11, 15,
+ 16, 20, 24, 28, 18, 22, 26, 30, 17, 21, 25, 19, 29, 23, 27, 31, // UP - Same as first line but +16
+ 32, 36, 40, 44, 34, 38, 42, 46, 33, 37, 41, 45, 35, 39, 43, 47, // DOWN - Same as first line but +32
+ 48, 52, 56, 40, 50, 54, 58, 62, 49, 53, 57, 61, 51, 55, 59, 63 // UP+DOWN - Same as first line but +48
+))
+
+GLOBAL_LIST_INIT(cww_dir, list( // cww_dir[dir] = counter-clockwise rotation of dir. Unlike reverse_dir, UP remains UP & DOWN remains DOWN.
+ 8, 4, 12, 1, 9, 5, 13, 2, 10, 6, 14, 3, 11, 7, 15,
+ 16, 24, 20, 28, 17, 25, 21, 29, 18, 26, 22, 30, 19, 27, 23, 31, // UP - Same as first line but +16
+ 32, 40, 36, 44, 33, 41, 37, 45, 34, 42, 38, 46, 35, 43, 39, 47, // DOWN - Same as first line but +32
+ 48, 56, 52, 60, 49, 57, 53, 61, 50, 58, 54, 62, 51, 59, 55, 63 // UP+DOWN - Same as first line but +48
+))
diff --git a/code/_global_vars/lists/names.dm b/code/_global_vars/lists/names.dm
new file mode 100644
index 00000000..817399d6
--- /dev/null
+++ b/code/_global_vars/lists/names.dm
@@ -0,0 +1,17 @@
+GLOBAL_LIST_INIT(ai_names, world.file2list("config/names/ai.txt"))
+GLOBAL_LIST_INIT(wizard_first, world.file2list("config/names/wizardfirst.txt"))
+GLOBAL_LIST_INIT(wizard_second, world.file2list("config/names/wizardsecond.txt"))
+GLOBAL_LIST_INIT(commando_names, world.file2list("config/names/death_commando.txt"))
+GLOBAL_LIST_INIT(first_names_male, world.file2list("config/names/first_male.txt"))
+GLOBAL_LIST_INIT(first_names_female, world.file2list("config/names/first_female.txt"))
+GLOBAL_LIST_INIT(last_names, world.file2list("config/names/last.txt"))
+GLOBAL_LIST_INIT(clown_names, world.file2list("config/names/clown.txt"))
+
+
+GLOBAL_LIST_INIT(verbs, world.file2list("config/names/verbs.txt"))
+GLOBAL_LIST_INIT(adjectives, world.file2list("config/names/adjectives.txt"))
+//loaded on startup because of "
+//would include in rsc if ' was used
+
+
+GLOBAL_LIST_EMPTY(in_character_filter)
\ No newline at end of file
diff --git a/code/_global_vars/lists/objects.dm b/code/_global_vars/lists/objects.dm
new file mode 100644
index 00000000..626a7944
--- /dev/null
+++ b/code/_global_vars/lists/objects.dm
@@ -0,0 +1,21 @@
+GLOBAL_LIST_EMPTY(active_diseases)
+GLOBAL_LIST_EMPTY(med_hud_users) // List of all entities using a medical HUD.
+GLOBAL_LIST_EMPTY(sec_hud_users) // List of all entities using a security HUD.
+GLOBAL_LIST_EMPTY(hud_icon_reference)
+GLOBAL_LIST_EMPTY(traders) //List of all nearby traders
+
+GLOBAL_LIST_EMPTY(listening_objects) // List of objects that need to be able to hear, used to avoid recursive searching through contents.
+
+GLOBAL_LIST_EMPTY(global_mutations) // List of hidden mutation things.
+
+GLOBAL_LIST_EMPTY(reg_dna)
+
+GLOBAL_LIST_EMPTY(global_map)
+
+// Announcer intercom, because too much stuff creates an intercom for one message then hard del()s it. Also headset, for things that should be affected by comms outages.
+GLOBAL_DATUM_INIT(global_announcer, /obj/item/device/radio/announcer, new)
+GLOBAL_DATUM_INIT(global_headset, /obj/item/device/radio/announcer/subspace, new)
+
+var/host = null //only here until check @ code\modules\ghosttrap\trap.dm:112 is fixed
+GLOBAL_DATUM_INIT(sun, /datum/sun, new)
+GLOBAL_DATUM_INIT(universe, /datum/universal_state, new)
diff --git a/code/_global_vars/logging.dm b/code/_global_vars/logging.dm
new file mode 100644
index 00000000..ecc443c3
--- /dev/null
+++ b/code/_global_vars/logging.dm
@@ -0,0 +1,19 @@
+var/runtime_diary = null
+
+
+var/list/combatlog = list()
+var/list/IClog = list()
+var/list/OOClog = list()
+var/list/adminlog = list()
+
+var/datum/configuration/config = null
+var/list/jobMax = list()
+
+var/diary = null
+
+GLOBAL_VAR(log_directory)
+GLOBAL_PROTECT(log_directory)
+GLOBAL_VAR(world_runtime_log)
+GLOBAL_PROTECT(world_runtime_log)
+GLOBAL_VAR(world_qdel_log)
+GLOBAL_PROTECT(world_qdel_log)
diff --git a/code/_global_vars/mapping.dm b/code/_global_vars/mapping.dm
new file mode 100644
index 00000000..11cbcd7e
--- /dev/null
+++ b/code/_global_vars/mapping.dm
@@ -0,0 +1 @@
+GLOBAL_LIST_EMPTY(ruin_landmarks)
\ No newline at end of file
diff --git a/code/_global_vars/misc.dm b/code/_global_vars/misc.dm
new file mode 100644
index 00000000..4e5ceae1
--- /dev/null
+++ b/code/_global_vars/misc.dm
@@ -0,0 +1,13 @@
+GLOBAL_LIST_EMPTY(all_observable_events)
+
+GLOBAL_LIST_INIT(font_resources, list('fonts/Shage/Shage.ttf'))
+
+GLOBAL_VAR_INIT(shit_left, 0)
+GLOBAL_VAR_INIT(piss_left, 0)
+GLOBAL_VAR_INIT(teeth_lost, 0)
+GLOBAL_VAR_INIT(ff_incidents, 0)
+GLOBAL_VAR_INIT(mines_tripped, 0)
+GLOBAL_VAR_INIT(mines_disarmed, 0)
+GLOBAL_VAR_INIT(total_deaths, 0)
+GLOBAL_VAR_INIT(holes_fallen, 0)
+GLOBAL_VAR_INIT(waddling, 0)
\ No newline at end of file
diff --git a/code/_global_vars/mobs.dm b/code/_global_vars/mobs.dm
new file mode 100644
index 00000000..dd843b31
--- /dev/null
+++ b/code/_global_vars/mobs.dm
@@ -0,0 +1,25 @@
+GLOBAL_LIST_EMPTY(clients) //all clients
+GLOBAL_LIST_EMPTY(admins) //all clients whom are admins
+GLOBAL_PROTECT(admins)
+GLOBAL_LIST_EMPTY(ckey_directory) //all ckeys with associated client
+
+//Server access whitelist
+var/global/list/ckey_whitelist = null
+
+var/global/list/hellbans = null//Hellbanned boys
+
+
+GLOBAL_LIST_EMPTY(player_list) //List of all mobs **with clients attached**. Excludes /mob/new_player
+GLOBAL_LIST_EMPTY(human_mob_list) //List of all human mobs and sub-types, including clientless
+GLOBAL_LIST_EMPTY(silicon_mob_list) //List of all silicon mobs, including clientless
+GLOBAL_LIST_EMPTY(living_mob_list_) //List of all alive mobs, including clientless. Excludes /mob/new_player
+GLOBAL_LIST_EMPTY(dead_mob_list_) //List of all dead mobs, including clientless. Excludes /mob/new_player
+GLOBAL_LIST_EMPTY(ghost_mob_list) //List of all ghosts, including clientless. Excludes /mob/new_player
+
+GLOBAL_VAR(cargo_password) //Goes into the mind of the Requisitions Officer.
+
+GLOBAL_VAR(final_words) //Final words of the first person who died.
+
+GLOBAL_VAR(first_death) //The first person who died.
+
+GLOBAL_VAR(first_death_happened) //bool to check it happened
\ No newline at end of file
diff --git a/code/_global_vars/radio.dm b/code/_global_vars/radio.dm
new file mode 100644
index 00000000..d3ec7f7b
--- /dev/null
+++ b/code/_global_vars/radio.dm
@@ -0,0 +1,7 @@
+// These globals are the worst
+
+GLOBAL_LIST_INIT(default_medbay_channels, list(
+ num2text(PUB_FREQ) = list(),
+ num2text(MED_FREQ) = list(access_medical_equip),
+ num2text(MED_I_FREQ) = list(access_medical_equip)
+))
diff --git a/code/_global_vars/sensitive.dm b/code/_global_vars/sensitive.dm
new file mode 100644
index 00000000..86522af9
--- /dev/null
+++ b/code/_global_vars/sensitive.dm
@@ -0,0 +1,12 @@
+// MySQL configuration
+GLOBAL_REAL_VAR(sqladdress) = "localhost"
+GLOBAL_REAL_VAR(sqlport) = "3306"
+GLOBAL_REAL_VAR(sqldb) = "tgstation"
+GLOBAL_REAL_VAR(sqllogin) = "root"
+GLOBAL_REAL_VAR(sqlpass) = ""
+
+// Feedback gathering sql connection
+GLOBAL_REAL_VAR(sqlfdbkdb) = "test"
+GLOBAL_REAL_VAR(sqlfdbklogin) = "root"
+GLOBAL_REAL_VAR(sqlfdbkpass) = ""
+GLOBAL_REAL_VAR(sqllogging) = 0 // Should we log deaths, population stats, etc.?
diff --git a/code/_helpers/_global_objects.dm b/code/_helpers/_global_objects.dm
new file mode 100644
index 00000000..b3f44797
--- /dev/null
+++ b/code/_helpers/_global_objects.dm
@@ -0,0 +1,5 @@
+
+
+//var/datum/gear_tweak/color/gear_tweak_free_color_choice_
+//#define gear_tweak_free_color_choice (gear_tweak_free_color_choice_ ? gear_tweak_free_color_choice_ : (gear_tweak_free_color_choice_ = new()))
+// Might work in 511 assuming x=y=5 gets implemented.
diff --git a/code/_helpers/areas.dm b/code/_helpers/areas.dm
new file mode 100644
index 00000000..284a8202
--- /dev/null
+++ b/code/_helpers/areas.dm
@@ -0,0 +1,107 @@
+/*
+ List generation helpers
+*/
+/proc/get_filtered_areas(var/list/predicates = list(/proc/is_area_with_turf))
+ . = list()
+ if(!predicates)
+ return
+ if(!islist(predicates))
+ predicates = list(predicates)
+ for(var/area/A)
+ if(all_predicates_true(list(A), predicates))
+ . += A
+
+/proc/get_area_turfs(var/area/A, var/list/predicates)
+ . = new/list()
+ A = istype(A) ? A : locate(A)
+ if(!A)
+ return
+ for(var/turf/T in A.contents)
+ if(!predicates || all_predicates_true(list(T), predicates))
+ . += T
+
+/proc/get_subarea_turfs(var/area/A, var/list/predicates)
+ . = new/list()
+ A = istype(A) ? A.type : A
+ if(!A)
+ return
+ for(var/sub_area_type in typesof(A))
+ var/area/sub_area = locate(sub_area_type)
+ for(var/turf/T in sub_area.contents)
+ if(!predicates || all_predicates_true(list(T), predicates))
+ . += T
+
+/proc/group_areas_by_name(var/list/predicates)
+ . = list()
+ for(var/area/A in get_filtered_areas(predicates))
+ group_by(., A.name, A)
+
+/proc/group_areas_by_z_level(var/list/predicates)
+ . = list()
+ for(var/area/A in get_filtered_areas(predicates))
+ group_by(., num2text(A.z), A)
+
+/*
+ Pick helpers
+*/
+/proc/pick_subarea_turf(var/areatype, var/list/predicates)
+ var/list/turfs = get_subarea_turfs(areatype, predicates)
+ if(turfs && turfs.len)
+ return pick(turfs)
+
+/proc/pick_area_turf(var/areatype, var/list/predicates)
+ var/list/turfs = get_area_turfs(areatype, predicates)
+ if(turfs && turfs.len)
+ return pick(turfs)
+
+/proc/pick_area(var/list/predicates)
+ var/list/areas = get_filtered_areas(predicates)
+ if(areas && areas.len)
+ . = pick(areas)
+
+/proc/pick_area_and_turf(var/list/area_predicates, var/list/turf_predicates)
+ var/area/A = pick_area(area_predicates)
+ if(!A)
+ return
+ return pick_area_turf(A, turf_predicates)
+
+/*
+ Predicate Helpers
+*/
+/proc/is_station_area(var/area/A)
+ . = isStationLevel(A.z)
+
+/proc/is_contact_area(var/area/A)
+ . = isContactLevel(A.z)
+
+/proc/is_player_area(var/area/A)
+ . = isPlayerLevel(A.z)
+
+/proc/is_not_space_area(var/area/A)
+ . = !istype(A,/area/space)
+
+/proc/is_not_shuttle_area(var/area/A)
+ . = !istype(A,/area/shuttle)
+
+/proc/is_area_with_turf(var/area/A)
+ . = isnum(A.x)
+
+/proc/is_area_without_turf(var/area/A)
+ . = !is_area_with_turf(A)
+
+/proc/is_coherent_area(var/area/A)
+ return !is_type_in_list(A, GLOB.using_map.area_coherency_test_exempt_areas)
+
+GLOBAL_LIST_INIT(is_station_but_not_space_or_shuttle_area, list(/proc/is_station_area, /proc/is_not_space_area, /proc/is_not_shuttle_area))
+
+GLOBAL_LIST_INIT(is_contact_but_not_space_or_shuttle_area, list(/proc/is_contact_area, /proc/is_not_space_area, /proc/is_not_shuttle_area))
+
+GLOBAL_LIST_INIT(is_player_but_not_space_or_shuttle_area, list(/proc/is_player_area, /proc/is_not_space_area, /proc/is_not_shuttle_area))
+
+
+/*
+ Misc Helpers
+*/
+#define teleportlocs area_repository.get_areas_by_name_and_coords(GLOB.is_player_but_not_space_or_shuttle_area)
+#define stationlocs area_repository.get_areas_by_name(GLOB.is_player_but_not_space_or_shuttle_area)
+
diff --git a/code/_helpers/atmospherics.dm b/code/_helpers/atmospherics.dm
new file mode 100644
index 00000000..3e269128
--- /dev/null
+++ b/code/_helpers/atmospherics.dm
@@ -0,0 +1,51 @@
+/obj/proc/analyze_gases(var/obj/A, var/mob/user, advanced)
+ user.visible_message("\The [user] has used \an [src] on \the [A].")
+ A.add_fingerprint(user)
+
+ var/air_contents = A.return_air()
+ if(!air_contents)
+ to_chat(user, "Your [src] flashes a red light as it fails to analyze \the [A].")
+ return 0
+
+ var/list/result = atmosanalyzer_scan(A, air_contents, advanced)
+ print_atmos_analysis(user, result)
+ return 1
+
+/proc/print_atmos_analysis(user, var/list/result)
+ for(var/line in result)
+ to_chat(user, "[line]")
+
+/proc/atmosanalyzer_scan(var/atom/target, var/datum/gas_mixture/mixture, advanced)
+ . = list()
+ . += "Results of the analysis of \the [target]:"
+ if(!mixture)
+ mixture = target.return_air()
+
+ if(mixture)
+ var/pressure = mixture.return_pressure()
+ var/total_moles = mixture.total_moles
+
+ if (total_moles>0)
+ if(abs(pressure - ONE_ATMOSPHERE) < 10)
+ . += "Pressure: [round(pressure,0.1)] kPa"
+ else
+ . += "Pressure: [round(pressure,0.1)] kPa"
+ for(var/mix in mixture.gas)
+ var/percentage = round(mixture.gas[mix]/total_moles * 100, advanced ? 0.01 : 1)
+ if(!percentage)
+ continue
+ . += "[gas_data.name[mix]]: [percentage]%"
+ if(advanced)
+ var/list/traits = list()
+ if(gas_data.flags[mix] & XGM_GAS_FUEL)
+ traits += "can be used as combustion fuel"
+ if(gas_data.flags[mix] & XGM_GAS_OXIDIZER)
+ traits += "can be used as oxidizer"
+ if(gas_data.flags[mix] & XGM_GAS_CONTAMINANT)
+ traits += "contaminates clothing with toxic residue"
+ if(gas_data.flags[mix] & XGM_GAS_FUSION_FUEL)
+ traits += "can be used to fuel fusion reaction"
+ . += "\tSpecific heat: [gas_data.specific_heat[mix]] J/(mol*K), Molar mass: [gas_data.molar_mass[mix]] kg/mol.[traits.len ? "\n\tThis gas [english_list(traits)]" : ""]"
+ . += "Temperature: [round(mixture.temperature-T0C)]°C / [round(mixture.temperature)]K"
+ return
+ . += "\The [target] has no gases!"
diff --git a/code/_helpers/atom_movables.dm b/code/_helpers/atom_movables.dm
new file mode 100644
index 00000000..b1092c5d
--- /dev/null
+++ b/code/_helpers/atom_movables.dm
@@ -0,0 +1,34 @@
+/proc/get_turf_pixel(atom/movable/AM)
+ if(!istype(AM))
+ return
+
+ //Find AM's matrix so we can use it's X/Y pixel shifts
+ var/matrix/M = matrix(AM.transform)
+
+ var/pixel_x_offset = AM.pixel_x + M.get_x_shift()
+ var/pixel_y_offset = AM.pixel_y + M.get_y_shift()
+
+ //Irregular objects
+ if(AM.bound_height != world.icon_size || AM.bound_width != world.icon_size)
+ var/icon/AMicon = icon(AM.icon, AM.icon_state)
+ pixel_x_offset += ((AMicon.Width()/world.icon_size)-1)*(world.icon_size*0.5)
+ pixel_y_offset += ((AMicon.Height()/world.icon_size)-1)*(world.icon_size*0.5)
+ qdel(AMicon)
+
+ //DY and DX
+ var/rough_x = round(round(pixel_x_offset,world.icon_size)/world.icon_size)
+ var/rough_y = round(round(pixel_y_offset,world.icon_size)/world.icon_size)
+
+ //Find coordinates
+ var/turf/T = get_turf(AM) //use AM's turfs, as it's coords are the same as AM's AND AM's coords are lost if it is inside another atom
+ var/final_x = T.x + rough_x
+ var/final_y = T.y + rough_y
+
+ if(final_x || final_y)
+ return locate(final_x, final_y, T.z)
+
+// Walks up the loc tree until it finds a holder of the given holder_type
+/proc/get_holder_of_type(atom/A, holder_type)
+ if(!istype(A)) return
+ for(A, A && !istype(A, holder_type), A=A.loc);
+ return A
diff --git a/code/_helpers/builtin_proc_callers.dm b/code/_helpers/builtin_proc_callers.dm
new file mode 100644
index 00000000..eb59cb31
--- /dev/null
+++ b/code/_helpers/builtin_proc_callers.dm
@@ -0,0 +1,6 @@
+/*
+ You cannot call built-in BYOND methods directly using call()(), hence these helpers
+*/
+
+/proc/prob_call(var/probability)
+ return prob(probability)
diff --git a/code/_helpers/cmp.dm b/code/_helpers/cmp.dm
new file mode 100644
index 00000000..76d26664
--- /dev/null
+++ b/code/_helpers/cmp.dm
@@ -0,0 +1,62 @@
+/proc/cmp_appearance_data(var/datum/appearance_data/a, var/datum/appearance_data/b)
+ return b.priority - a.priority
+
+/proc/cmp_camera_ctag_asc(var/obj/machinery/camera/a, var/obj/machinery/camera/b)
+ return sorttext(b.c_tag, a.c_tag)
+
+/proc/cmp_camera_ctag_dsc(var/obj/machinery/camera/a, var/obj/machinery/camera/b)
+ return sorttext(a.c_tag, b.c_tag)
+
+/proc/cmp_crew_sensor_modifier(var/crew_sensor_modifier/a, var/crew_sensor_modifier/b)
+ return b.priority - a.priority
+
+/proc/cmp_follow_holder(var/datum/follow_holder/a, var/datum/follow_holder/b)
+ if(a.sort_order == b.sort_order)
+ return sorttext(b.get_name(), a.get_name())
+
+ return a.sort_order - b.sort_order
+
+/proc/cmp_name_or_type_asc(atom/a, atom/b)
+ return sorttext(istype(b) || ("name" in b.vars) ? b.name : b.type, istype(a) || ("name" in a.vars) ? a.name : a.type)
+
+/proc/cmp_name_asc(atom/a, atom/b)
+ return sorttext(b.name, a.name)
+
+/proc/cmp_name_dsc(atom/a, atom/b)
+ return sorttext(a.name, b.name)
+
+/proc/cmp_numeric_asc(a,b)
+ return a - b
+
+/proc/cmp_subsystem_display(datum/controller/subsystem/a, datum/controller/subsystem/b)
+ return sorttext(b.name, a.name)
+
+/proc/cmp_subsystem_init(datum/controller/subsystem/a, datum/controller/subsystem/b)
+ var/a_init_order = ispath(a) ? initial(a.init_order) : a.init_order
+ var/b_init_order = ispath(b) ? initial(b.init_order) : b.init_order
+
+ return b_init_order - a_init_order //uses initial() so it can be used on types
+
+/proc/cmp_subsystem_priority(datum/controller/subsystem/a, datum/controller/subsystem/b)
+ return a.priority - b.priority
+
+/proc/cmp_text_asc(a,b)
+ return sorttext(b, a)
+
+/proc/cmp_text_dsc(a,b)
+ return sorttext(a, b)
+
+/proc/cmp_qdel_item_time(datum/qdel_item/A, datum/qdel_item/B)
+ . = B.hard_delete_time - A.hard_delete_time
+ if (!.)
+ . = B.destroy_time - A.destroy_time
+ if (!.)
+ . = B.failures - A.failures
+ if (!.)
+ . = B.qdels - A.qdels
+
+/proc/cmp_ruincost_priority(datum/map_template/ruin/A, datum/map_template/ruin/B)
+ return initial(A.cost) - initial(B.cost)
+
+/proc/cmp_timer(datum/timedevent/a, datum/timedevent/b)
+ return a.timeToRun - b.timeToRun
diff --git a/code/_helpers/files.dm b/code/_helpers/files.dm
new file mode 100644
index 00000000..94d51d2b
--- /dev/null
+++ b/code/_helpers/files.dm
@@ -0,0 +1,60 @@
+//checks if a file exists and contains text
+//returns text as a string if these conditions are met
+/proc/return_file_text(filename)
+ if(fexists(filename) == 0)
+ error("File not found ([filename])")
+ return
+
+ var/text = file2text(filename)
+ if(!text)
+ error("File empty ([filename])")
+ return
+
+ return text
+
+//Sends resource files to client cache
+/client/proc/getFiles()
+ for(var/file in args)
+ src << browse_rsc(file)
+
+/client/proc/browse_files(root="data/logs/", max_iterations=10, list/valid_extensions=list(".txt",".log",".htm"))
+ var/path = root
+
+ for(var/i=0, iError: browse_files(): File not found/Invalid file([path]).")
+ return
+
+ return path
+
+#define FTPDELAY 200 //200 tick delay to discourage spam
+/* This proc is a failsafe to prevent spamming of file requests.
+ It is just a timer that only permits a download every [FTPDELAY] ticks.
+ This can be changed by modifying FTPDELAY's value above.
+
+ PLEASE USE RESPONSIBLY, Some log files canr each sizes of 4MB! */
+/client/proc/file_spam_check()
+ var/time_to_wait = fileaccess_timer - world.time
+ if(time_to_wait > 0)
+ to_chat(src, "Error: file_spam_check(): Spam. Please wait [round(time_to_wait/10)] seconds.")
+ return 1
+ fileaccess_timer = world.time + FTPDELAY
+ return 0
+#undef FTPDELAY
diff --git a/code/_helpers/functional.dm b/code/_helpers/functional.dm
new file mode 100644
index 00000000..b37e51ac
--- /dev/null
+++ b/code/_helpers/functional.dm
@@ -0,0 +1,69 @@
+/proc/all_predicates_true(var/list/input, var/list/predicates)
+ predicates = istype(predicates) ? predicates : list(predicates)
+
+ for(var/i = 1 to predicates.len)
+ if(istype(input))
+ if(!call(predicates[i])(arglist(input)))
+ return FALSE
+ else
+ if(!call(predicates[i])(input))
+ return FALSE
+ return TRUE
+
+/proc/any_predicate_true(var/list/input, var/list/predicates)
+ predicates = istype(predicates) ? predicates : list(predicates)
+ if(!predicates.len)
+ return TRUE
+
+ for(var/i = 1 to predicates.len)
+ if(istype(input))
+ if(call(predicates[i])(arglist(input)))
+ return TRUE
+ else
+ if(call(predicates[i])(input))
+ return TRUE
+ return FALSE
+
+/proc/is_atom_predicate(var/value, var/feedback_receiver)
+ . = isatom(value)
+ if(!. && feedback_receiver)
+ to_chat(feedback_receiver, "Value must be an atom.")
+
+/proc/is_num_predicate(var/value, var/feedback_receiver)
+ . = isnum(value)
+ if(!. && feedback_receiver)
+ to_chat(feedback_receiver, "Value must be a numeral.")
+
+/proc/is_text_predicate(var/value, var/feedback_receiver)
+ . = !value || istext(value)
+ if(!. && feedback_receiver)
+ to_chat(feedback_receiver, "Value must be a text.")
+
+/proc/is_dir_predicate(var/value, var/feedback_receiver)
+ . = (value in GLOB.alldirs)
+ if(!. && feedback_receiver)
+ to_chat(feedback_receiver, "Value must be a direction.")
+
+/proc/can_locate(var/atom/container, var/container_thing)
+ return (locate(container_thing) in container)
+
+/proc/can_not_locate(var/atom/container, var/container_thing)
+ return !(locate(container_thing) in container) // We could just do !can_locate(container, container_thing) but BYOND is pretty awful when it comes to deep proc calls
+
+
+/proc/where(var/list/list_to_filter, var/list/predicates, var/list/extra_predicate_input)
+ . = list()
+ for(var/entry in list_to_filter)
+ var/predicate_input
+ if(extra_predicate_input)
+ predicate_input = (list(entry) + extra_predicate_input)
+ else
+ predicate_input = entry
+
+ if(all_predicates_true(predicate_input, predicates))
+ . += entry
+
+/proc/map(var/list/list_to_map, var/map_proc)
+ . = list()
+ for(var/entry in list_to_map)
+ . += call(map_proc)(entry)
diff --git a/code/_helpers/game.dm b/code/_helpers/game.dm
new file mode 100644
index 00000000..4c99528d
--- /dev/null
+++ b/code/_helpers/game.dm
@@ -0,0 +1,576 @@
+//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
+
+/proc/dopage(src,target)
+ var/href_list
+ var/href
+ href_list = params2list("src=\ref[src]&[target]=1")
+ href = "src=\ref[src];[target]=1"
+ src:temphtml = null
+ src:Topic(href, href_list)
+ return null
+
+/proc/is_on_same_plane_or_station(var/z1, var/z2)
+ if(z1 == z2)
+ return 1
+ if((z1 in GLOB.using_map.station_levels) && (z2 in GLOB.using_map.station_levels))
+ return 1
+ return 0
+
+/proc/max_default_z_level()
+ var/max_z = 0
+ for(var/z in GLOB.using_map.station_levels)
+ max_z = max(z, max_z)
+ for(var/z in GLOB.using_map.admin_levels)
+ max_z = max(z, max_z)
+ for(var/z in GLOB.using_map.player_levels)
+ max_z = max(z, max_z)
+ return max_z
+
+/proc/living_observers_present(var/list/zlevels)
+ if(LAZYLEN(zlevels))
+ for(var/client/C in GLOB.clients) //if a tree ticks on the empty zlevel does it really tick
+ if(isliving(C.mob)) //(no it doesn't)
+ var/turf/T = get_turf(C.mob)
+ if(T && (T.z in zlevels))
+ return TRUE
+ return FALSE
+
+/proc/get_z(O)
+ var/turf/loc = get_turf(O)
+ return loc ? loc.z : 0
+
+/proc/get_area(O)
+ var/turf/loc = get_turf(O)
+ if(loc)
+ var/area/res = loc.loc
+ .= res
+
+/proc/get_area_name(N) //get area by its name
+ for(var/area/A in world)
+ if(A.name == N)
+ return A
+ return 0
+
+/proc/get_area_master(const/O)
+ var/area/A = get_area(O)
+ if (isarea(A))
+ return A
+
+/proc/in_range(source, user)
+ if(get_dist(source, user) <= 1)
+ return 1
+
+ return 0 //not in range and not telekinetic
+
+// Like view but bypasses luminosity check
+
+/proc/hear(var/range, var/atom/source)
+
+ var/lum = source.luminosity
+ source.luminosity = 6
+
+ var/list/heard = view(range, source)
+ source.luminosity = lum
+
+ return heard
+
+/proc/isStationLevel(var/level)
+ return level in GLOB.using_map.station_levels
+
+/proc/isNotStationLevel(var/level)
+ return !isStationLevel(level)
+
+/proc/isPlayerLevel(var/level)
+ return level in GLOB.using_map.player_levels
+
+/proc/isAdminLevel(var/level)
+ return level in GLOB.using_map.admin_levels
+
+/proc/isNotAdminLevel(var/level)
+ return !isAdminLevel(level)
+
+/proc/isContactLevel(var/level)
+ return level in GLOB.using_map.contact_levels
+
+/proc/circlerange(center=usr,radius=3)
+
+ var/turf/centerturf = get_turf(center)
+ var/list/turfs = new/list()
+ var/rsq = radius * (radius+0.5)
+
+ for(var/atom/T in range(radius, centerturf))
+ var/dx = T.x - centerturf.x
+ var/dy = T.y - centerturf.y
+ if(dx*dx + dy*dy <= rsq)
+ turfs += T
+
+ //turfs += centerturf
+ return turfs
+
+/proc/circleview(center=usr,radius=3)
+
+ var/turf/centerturf = get_turf(center)
+ var/list/atoms = new/list()
+ var/rsq = radius * (radius+0.5)
+
+ for(var/atom/A in view(radius, centerturf))
+ var/dx = A.x - centerturf.x
+ var/dy = A.y - centerturf.y
+ if(dx*dx + dy*dy <= rsq)
+ atoms += A
+
+ //turfs += centerturf
+ return atoms
+
+/proc/trange(rad = 0, turf/centre = null) //alternative to range (ONLY processes turfs and thus less intensive)
+ if(!centre)
+ return
+
+ var/turf/x1y1 = locate(((centre.x-rad)<1 ? 1 : centre.x-rad),((centre.y-rad)<1 ? 1 : centre.y-rad),centre.z)
+ var/turf/x2y2 = locate(((centre.x+rad)>world.maxx ? world.maxx : centre.x+rad),((centre.y+rad)>world.maxy ? world.maxy : centre.y+rad),centre.z)
+ return block(x1y1,x2y2)
+
+/proc/get_dist_euclidian(atom/Loc1 as turf|mob|obj,atom/Loc2 as turf|mob|obj)
+ var/dx = Loc1.x - Loc2.x
+ var/dy = Loc1.y - Loc2.y
+
+ var/dist = sqrt(dx**2 + dy**2)
+
+ return dist
+
+/proc/circlerangeturfs(center=usr,radius=3)
+
+ var/turf/centerturf = get_turf(center)
+ var/list/turfs = new/list()
+ var/rsq = radius * (radius+0.5)
+
+ for(var/turf/T in range(radius, centerturf))
+ var/dx = T.x - centerturf.x
+ var/dy = T.y - centerturf.y
+ if(dx*dx + dy*dy <= rsq)
+ turfs += T
+ return turfs
+
+/proc/circleviewturfs(center=usr,radius=3) //Is there even a diffrence between this proc and circlerangeturfs()?
+
+ var/turf/centerturf = get_turf(center)
+ var/list/turfs = new/list()
+ var/rsq = radius * (radius+0.5)
+
+ for(var/turf/T in view(radius, centerturf))
+ var/dx = T.x - centerturf.x
+ var/dy = T.y - centerturf.y
+ if(dx*dx + dy*dy <= rsq)
+ turfs += T
+ return turfs
+
+
+
+//var/debug_mob = 0
+
+// Will recursively loop through an atom's contents and check for mobs, then it will loop through every atom in that atom's contents.
+// It will keep doing this until it checks every content possible. This will fix any problems with mobs, that are inside objects,
+// being unable to hear people due to being in a box within a bag.
+
+/proc/recursive_content_check(var/atom/O, var/list/L = list(), var/recursion_limit = 3, var/client_check = 1, var/sight_check = 1, var/include_mobs = 1, var/include_objects = 1)
+
+ if(!recursion_limit)
+ return L
+
+ for(var/I in O.contents)
+
+ if(ismob(I))
+ if(!sight_check || isInSight(I, O))
+ L |= recursive_content_check(I, L, recursion_limit - 1, client_check, sight_check, include_mobs, include_objects)
+ if(include_mobs)
+ if(client_check)
+ var/mob/M = I
+ if(M.client)
+ L |= M
+ else
+ L |= I
+
+ else if(istype(I,/obj/))
+ if(!sight_check || isInSight(I, O))
+ L |= recursive_content_check(I, L, recursion_limit - 1, client_check, sight_check, include_mobs, include_objects)
+ if(include_objects)
+ L |= I
+
+ return L
+
+// Returns a list of mobs and/or objects in range of R from source. Used in radio and say code.
+
+/proc/get_mobs_or_objects_in_view(var/R, var/atom/source, var/include_mobs = 1, var/include_objects = 1)
+
+ var/turf/T = get_turf(source)
+ var/list/hear = list()
+
+ if(!T)
+ return hear
+
+ var/list/range = hear(R, T)
+
+ for(var/I in range)
+ if(ismob(I))
+ hear |= recursive_content_check(I, hear, 3, 1, 0, include_mobs, include_objects)
+ if(include_mobs)
+ var/mob/M = I
+ if(M.client)
+ hear += M
+ else if(istype(I,/obj/))
+ hear |= recursive_content_check(I, hear, 3, 1, 0, include_mobs, include_objects)
+ if(include_objects)
+ hear += I
+
+ return hear
+
+
+/proc/get_mobs_in_radio_ranges(var/list/obj/item/device/radio/radios)
+
+ set background = 1
+
+ . = list()
+ // Returns a list of mobs who can hear any of the radios given in @radios
+ var/list/speaker_coverage = list()
+ for(var/obj/item/device/radio/R in radios)
+ if(R)
+ //Cyborg checks. Receiving message uses a bit of cyborg's charge.
+ var/obj/item/device/radio/borg/BR = R
+ if(istype(BR) && BR.myborg)
+ var/mob/living/silicon/robot/borg = BR.myborg
+ var/datum/robot_component/CO = borg.get_component("radio")
+ if(!CO)
+ continue //No radio component (Shouldn't happen)
+ if(!borg.is_component_functioning("radio") || !borg.cell_use_power(CO.active_usage))
+ continue //No power.
+
+ var/turf/speaker = get_turf(R)
+ if(speaker)
+ for(var/turf/T in hear(R.canhear_range,speaker))
+ speaker_coverage[T] = T
+
+
+ // Try to find all the players who can hear the message
+ for(var/i = 1; i <= GLOB.player_list.len; i++)
+ var/mob/M = GLOB.player_list[i]
+ if(M)
+ var/turf/ear = get_turf(M)
+ if(ear)
+ // Ghostship is magic: Ghosts can hear radio chatter from anywhere
+ if(speaker_coverage[ear] || (isghost(M) && M.get_preference_value(/datum/client_preference/ghost_radio) == GLOB.PREF_ALL_CHATTER))
+ . |= M // Since we're already looping through mobs, why bother using |= ? This only slows things down.
+ return .
+
+/proc/get_mobs_and_objs_in_view_fast(var/turf/T, var/range, var/list/mobs, var/list/objs, var/checkghosts = null)
+
+ var/list/hear = dview(range,T,INVISIBILITY_MAXIMUM)
+ var/list/hearturfs = list()
+
+ for(var/atom/movable/AM in hear)
+ if(ismob(AM))
+ mobs += AM
+ hearturfs += get_turf(AM)
+ else if(isobj(AM))
+ objs += AM
+ hearturfs += get_turf(AM)
+
+ for(var/mob/M in GLOB.player_list)
+ if(checkghosts && M.stat == DEAD && M.get_preference_value(checkghosts) != GLOB.PREF_NEARBY)
+ mobs |= M
+ else if(get_turf(M) in hearturfs)
+ mobs |= M
+
+ for(var/obj/O in GLOB.listening_objects)
+ if(get_turf(O) in hearturfs)
+ objs |= O
+
+
+
+
+
+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 = SIMPLE_SIGN(Y2-Y1)
+ Y1+=s
+ while(Y1!=Y2)
+ T=locate(X1,Y1,Z)
+ if(T.opacity)
+ return 0
+ Y1+=s
+ 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 = SIMPLE_SIGN(X2-X1)
+ var/signY = SIMPLE_SIGN(Y2-Y1)
+ if(X1 abs (dx)) //slope is above 1:1 (move horizontally in a tie)
+ if(dy > 0)
+ return get_step(start, SOUTH)
+ else
+ return get_step(start, NORTH)
+ else
+ if(dx > 0)
+ return get_step(start, WEST)
+ else
+ return get_step(start, EAST)
+
+/proc/get_mob_by_key(var/key)
+ for(var/mob/M in SSmobs.mob_list)
+ if(M.ckey == lowertext(key))
+ return M
+ return null
+
+
+// Will return a list of active candidates. It increases the buffer 5 times until it finds a candidate which is active within the buffer.
+/proc/get_active_candidates(var/buffer = 1)
+
+ var/list/candidates = list() //List of candidate KEYS to assume control of the new larva ~Carn
+ var/i = 0
+ while(candidates.len <= 0 && i < 5)
+ for(var/mob/observer/ghost/G in GLOB.player_list)
+ if(((G.client.inactivity/10)/60) <= buffer + i) // the most active players are more likely to become an alien
+ if(!(G.mind && G.mind.current && G.mind.current.stat != DEAD))
+ candidates += G.key
+ i++
+ return candidates
+
+// Same as above but for alien candidates.
+
+/proc/get_alien_candidates()
+ var/list/candidates = list() //List of candidate KEYS to assume control of the new larva ~Carn
+ var/i = 0
+ while(candidates.len <= 0 && i < 5)
+ for(var/mob/observer/ghost/G in GLOB.player_list)
+ if(MODE_XENOMORPH in G.client.prefs.be_special_role)
+ if(((G.client.inactivity/10)/60) <= ALIEN_SELECT_AFK_BUFFER + i) // the most active players are more likely to become an alien
+ if(!(G.mind && G.mind.current && G.mind.current.stat != DEAD))
+ candidates += G.key
+ i++
+ return candidates
+
+/proc/ScreenText(obj/O, maptext="", screen_loc="CENTER-7,CENTER-7", maptext_height=480, maptext_width=480)
+ if(!isobj(O)) O = new /obj/screen/text()
+ O.maptext = maptext
+ O.maptext_height = maptext_height
+ O.maptext_width = maptext_width
+ O.screen_loc = screen_loc
+ return O
+
+/proc/Show2Group4Delay(obj/O, list/group, delay=0)
+ if(!isobj(O)) return
+ if(!group) group = GLOB.clients
+ for(var/client/C in group)
+ C.screen += O
+ if(delay)
+ spawn(delay)
+ for(var/client/C in group)
+ C.screen -= O
+
+/proc/flick_overlay(image/I, list/show_to, duration)
+ for(var/client/C in show_to)
+ C.images += I
+ spawn(duration)
+ for(var/client/C in show_to)
+ C.images -= I
+
+datum/projectile_data
+ var/src_x
+ var/src_y
+ var/time
+ var/distance
+ var/power_x
+ var/power_y
+ var/dest_x
+ var/dest_y
+
+/datum/projectile_data/New(var/src_x, var/src_y, var/time, var/distance, \
+ var/power_x, var/power_y, var/dest_x, var/dest_y)
+ src.src_x = src_x
+ src.src_y = src_y
+ src.time = time
+ src.distance = distance
+ src.power_x = power_x
+ src.power_y = power_y
+ src.dest_x = dest_x
+ src.dest_y = dest_y
+
+/proc/projectile_trajectory(var/src_x, var/src_y, var/rotation, var/angle, var/power)
+
+ // returns the destination (Vx,y) that a projectile shot at [src_x], [src_y], with an angle of [angle],
+ // rotated at [rotation] and with the power of [power]
+ // Thanks to VistaPOWA for this function
+
+ var/power_x = power * cos(angle)
+ var/power_y = power * sin(angle)
+ var/time = 2* power_y / 10 //10 = g
+
+ var/distance = time * power_x
+
+ var/dest_x = src_x + distance*sin(rotation);
+ var/dest_y = src_y + distance*cos(rotation);
+
+ return new /datum/projectile_data(src_x, src_y, time, distance, power_x, power_y, dest_x, dest_y)
+
+/proc/GetRedPart(const/hexa)
+ return hex2num(copytext(hexa,2,4))
+
+/proc/GetGreenPart(const/hexa)
+ return hex2num(copytext(hexa,4,6))
+
+/proc/GetBluePart(const/hexa)
+ return hex2num(copytext(hexa,6,8))
+
+/proc/GetHexColors(const/hexa)
+ return list(
+ GetRedPart(hexa),
+ GetGreenPart(hexa),
+ GetBluePart(hexa)
+ )
+
+/proc/MixColors(const/list/colors)
+ var/list/reds = list()
+ var/list/blues = list()
+ var/list/greens = list()
+ var/list/weights = list()
+
+ for (var/i = 0, ++i <= colors.len)
+ reds.Add(GetRedPart(colors[i]))
+ blues.Add(GetBluePart(colors[i]))
+ greens.Add(GetGreenPart(colors[i]))
+ weights.Add(1)
+
+ var/r = mixOneColor(weights, reds)
+ var/g = mixOneColor(weights, greens)
+ var/b = mixOneColor(weights, blues)
+ return rgb(r,g,b)
+
+/proc/mixOneColor(var/list/weight, var/list/color)
+ if (!weight || !color || length(weight)!=length(color))
+ return 0
+
+ var/contents = length(weight)
+ var/i
+
+ //normalize weights
+ var/listsum = 0
+ for(i=1; i<=contents; i++)
+ listsum += weight[i]
+ for(i=1; i<=contents; i++)
+ weight[i] /= listsum
+
+ //mix them
+ var/mixedcolor = 0
+ for(i=1; i<=contents; i++)
+ mixedcolor += weight[i]*color[i]
+ mixedcolor = round(mixedcolor)
+
+ //until someone writes a formal proof for this algorithm, let's keep this in
+// if(mixedcolor<0x00 || mixedcolor>0xFF)
+// return 0
+ //that's not the kind of operation we are running here, nerd
+ mixedcolor=min(max(mixedcolor,0),255)
+
+ return mixedcolor
+
+/**
+* Gets the highest and lowest pressures from the tiles in cardinal directions
+* around us, then checks the difference.
+*/
+/proc/getOPressureDifferential(var/turf/loc)
+ var/minp=16777216;
+ var/maxp=0;
+ for(var/dir in GLOB.cardinal)
+ var/turf/simulated/T=get_turf(get_step(loc,dir))
+ var/cp=0
+ if(T && istype(T) && T.zone)
+ var/datum/gas_mixture/environment = T.return_air()
+ cp = environment.return_pressure()
+ else
+ if(istype(T,/turf/simulated))
+ continue
+ if(cpmaxp)maxp=cp
+ return abs(minp-maxp)
+
+/proc/convert_k2c(var/temp)
+ return ((temp - T0C))
+
+/proc/convert_c2k(var/temp)
+ return ((temp + T0C))
+
+/proc/getCardinalAirInfo(var/turf/loc, var/list/stats=list("temperature"))
+ var/list/temps = new/list(4)
+ for(var/dir in GLOB.cardinal)
+ var/direction
+ switch(dir)
+ if(NORTH)
+ direction = 1
+ if(SOUTH)
+ direction = 2
+ if(EAST)
+ direction = 3
+ if(WEST)
+ direction = 4
+ var/turf/simulated/T=get_turf(get_step(loc,dir))
+ var/list/rstats = new /list(stats.len)
+ if(T && istype(T) && T.zone)
+ var/datum/gas_mixture/environment = T.return_air()
+ for(var/i=1;i<=stats.len;i++)
+ if(stats[i] == "pressure")
+ rstats[i] = environment.return_pressure()
+ else
+ rstats[i] = environment.vars[stats[i]]
+ else if(istype(T, /turf/simulated))
+ rstats = null // Exclude zone (wall, door, etc).
+ else if(istype(T, /turf))
+ // Should still work. (/turf/return_air())
+ var/datum/gas_mixture/environment = T.return_air()
+ for(var/i=1;i<=stats.len;i++)
+ if(stats[i] == "pressure")
+ rstats[i] = environment.return_pressure()
+ else
+ rstats[i] = environment.vars[stats[i]]
+ temps[direction] = rstats
+ return temps
+
+/proc/MinutesToTicks(var/minutes)
+ return SecondsToTicks(60 * minutes)
+
+/proc/SecondsToTicks(var/seconds)
+ return seconds * 10
+
+/proc/round_is_spooky(var/spookiness_threshold = config.cult_ghostwriter_req_cultists)
+ return (cult.current_antagonists.len > spookiness_threshold)
diff --git a/code/_helpers/global_access.dm b/code/_helpers/global_access.dm
new file mode 100644
index 00000000..96319ad7
--- /dev/null
+++ b/code/_helpers/global_access.dm
@@ -0,0 +1,2545 @@
+// THIS FILE IS AUTOMATICALLY CREATED BY tools/gen_globals.py
+/proc/readglobal(which)
+ switch(which)
+ if("ALL_ANTIGENS")
+ return global.ALL_ANTIGENS;
+ if("ANTAG_FREQS")
+ return global.ANTAG_FREQS;
+ if("BSACooldown")
+ return global.BSACooldown;
+ if("BUMP_TELEPORTERS")
+ return global.BUMP_TELEPORTERS;
+ if("Banlist")
+ return global.Banlist;
+ if("CENT_FREQS")
+ return global.CENT_FREQS;
+ if("CMinutes")
+ return global.CMinutes;
+ if("DEPT_FREQS")
+ return global.DEPT_FREQS;
+ if("Debug2")
+ return global.Debug2;
+ if("Failsafe")
+ return global.Failsafe;
+ if("GLOB")
+ return global.GLOB;
+ if("Holiday")
+ return global.Holiday;
+ if("IClog")
+ return global.IClog;
+ if("LIGHTING_CORNER_DIAGONAL")
+ return global.LIGHTING_CORNER_DIAGONAL;
+ if("Master")
+ return global.Master;
+ if("OOClog")
+ return global.OOClog;
+ if("PDAs")
+ return global.PDAs;
+ if("SSair")
+ return global.SSair;
+ if("SSairflow")
+ return global.SSairflow;
+ if("SSatoms")
+ return global.SSatoms;
+ if("SSfastprocess")
+ return global.SSfastprocess;
+ if("SSgarbage")
+ return global.SSgarbage;
+ if("SSlegacy")
+ return global.SSlegacy;
+ if("SSmachines")
+ return global.SSmachines;
+ if("SSmapping")
+ return global.SSmapping;
+ if("SSmobs")
+ return global.SSmobs;
+ if("SSobj")
+ return global.SSobj;
+ if("SSopen_space")
+ return global.SSopen_space;
+ if("SSprocessing")
+ return global.SSprocessing;
+ if("SSskybox")
+ return global.SSskybox;
+ if("SSsun")
+ return global.SSsun;
+ if("SStimer")
+ return global.SStimer;
+ if("SSvines")
+ return global.SSvines;
+ if("SSwireless")
+ return global.SSwireless;
+ if("Tier1Runes")
+ return global.Tier1Runes;
+ if("Tier2Runes")
+ return global.Tier2Runes;
+ if("Tier3Runes")
+ return global.Tier3Runes;
+ if("Tier4Runes")
+ return global.Tier4Runes;
+ if("WALLITEMS")
+ return global.WALLITEMS;
+ if("_all_globals")
+ return global._all_globals;
+ if("_client_preferences")
+ return global._client_preferences;
+ if("_client_preferences_by_key")
+ return global._client_preferences_by_key;
+ if("_client_preferences_by_type")
+ return global._client_preferences_by_type;
+ if("account_hack_attempted")
+ return global.account_hack_attempted;
+ if("actor")
+ return global.actor;
+ if("additional_antag_types")
+ return global.additional_antag_types;
+ if("admin_datums")
+ return global.admin_datums;
+ if("admin_pm_repository")
+ return global.admin_pm_repository;
+ if("admin_ranks")
+ return global.admin_ranks;
+ if("admin_secrets")
+ return global.admin_secrets;
+ if("admin_verbs_admin")
+ return global.admin_verbs_admin;
+ if("admin_verbs_ban")
+ return global.admin_verbs_ban;
+ if("admin_verbs_debug")
+ return global.admin_verbs_debug;
+ if("admin_verbs_default")
+ return global.admin_verbs_default;
+ if("admin_verbs_fun")
+ return global.admin_verbs_fun;
+ if("admin_verbs_hideable")
+ return global.admin_verbs_hideable;
+ if("admin_verbs_mentor")
+ return global.admin_verbs_mentor;
+ if("admin_verbs_mod")
+ return global.admin_verbs_mod;
+ if("admin_verbs_paranoid_debug")
+ return global.admin_verbs_paranoid_debug;
+ if("admin_verbs_permissions")
+ return global.admin_verbs_permissions;
+ if("admin_verbs_possess")
+ return global.admin_verbs_possess;
+ if("admin_verbs_rejuv")
+ return global.admin_verbs_rejuv;
+ if("admin_verbs_server")
+ return global.admin_verbs_server;
+ if("admin_verbs_sounds")
+ return global.admin_verbs_sounds;
+ if("admin_verbs_spawn")
+ return global.admin_verbs_spawn;
+ if("adminhelp_ignored_words")
+ return global.adminhelp_ignored_words;
+ if("adminlog")
+ return global.adminlog;
+ if("ai_list")
+ return global.ai_list;
+ if("ai_status_emotions")
+ return global.ai_status_emotions;
+ if("ai_verbs_default")
+ return global.ai_verbs_default;
+ if("air_alarm_topic")
+ return global.air_alarm_topic;
+ if("air_blocked")
+ return global.air_blocked;
+ if("air_processing_killed")
+ return global.air_processing_killed;
+ if("alarm_manager")
+ return global.alarm_manager;
+ if("alien_whitelist")
+ return global.alien_whitelist;
+ if("allCasters")
+ return global.allCasters;
+ if("allConsoles")
+ return global.allConsoles;
+ if("all_antag_spawnpoints_")
+ return global.all_antag_spawnpoints_;
+ if("all_antag_types_")
+ return global.all_antag_types_;
+ if("all_grabobjects")
+ return global.all_grabobjects;
+ if("all_grabstates")
+ return global.all_grabstates;
+ if("all_languages")
+ return global.all_languages;
+ if("all_money_accounts")
+ return global.all_money_accounts;
+ if("all_objectives")
+ return global.all_objectives;
+ if("all_robolimbs")
+ return global.all_robolimbs;
+ if("all_species")
+ return global.all_species;
+ if("all_ui_styles")
+ return global.all_ui_styles;
+ if("all_unit_tests_passed")
+ return global.all_unit_tests_passed;
+ if("all_virtual_listeners")
+ return global.all_virtual_listeners;
+ if("announced_news_types")
+ return global.announced_news_types;
+ if("antag_add_finished")
+ return global.antag_add_finished;
+ if("antag_names_to_ids_")
+ return global.antag_names_to_ids_;
+ if("appearance_manager")
+ return global.appearance_manager;
+ if("area_repository")
+ return global.area_repository;
+ if("artefact_feedback")
+ return global.artefact_feedback;
+ if("ascii_esc")
+ return global.ascii_esc;
+ if("ascii_green")
+ return global.ascii_green;
+ if("ascii_red")
+ return global.ascii_red;
+ if("ascii_reset")
+ return global.ascii_reset;
+ if("ascii_yellow")
+ return global.ascii_yellow;
+ if("asset_cache")
+ return global.asset_cache;
+ if("asset_datums")
+ return global.asset_datums;
+ if("assigned")
+ return global.assigned;
+ if("assigned_blocks")
+ return global.assigned_blocks;
+ if("atmosphere_alarm")
+ return global.atmosphere_alarm;
+ if("attack_log_repository")
+ return global.attack_log_repository;
+ if("autolathe_categories")
+ return global.autolathe_categories;
+ if("autolathe_recipes")
+ return global.autolathe_recipes;
+ if("base_miss_chance")
+ return global.base_miss_chance;
+ if("basic_robolimb")
+ return global.basic_robolimb;
+ if("blackbox")
+ return global.blackbox;
+ if("blocked")
+ return global.blocked;
+ if("bomb_set")
+ return global.bomb_set;
+ if("borers")
+ return global.borers;
+ if("cable_list")
+ return global.cable_list;
+ if("cached_icons")
+ return global.cached_icons;
+ if("cached_space")
+ return global.cached_space;
+ if("camera_alarm")
+ return global.camera_alarm;
+ if("camera_range_display_status")
+ return global.camera_range_display_status;
+ if("camera_repository")
+ return global.camera_repository;
+ if("cameranet")
+ return global.cameranet;
+ if("can_call_ert")
+ return global.can_call_ert;
+ if("captain_announcement")
+ return global.captain_announcement;
+ if("cargo_supply_pack_root")
+ return global.cargo_supply_pack_root;
+ if("cargo_supply_packs")
+ return global.cargo_supply_packs;
+ if("changelog_hash")
+ return global.changelog_hash;
+ if("channel_to_radio_key")
+ return global.channel_to_radio_key;
+ if("chargen_robolimbs")
+ return global.chargen_robolimbs;
+ if("checked_for_inactives")
+ return global.checked_for_inactives;
+ if("chemical_reaction_logs")
+ return global.chemical_reaction_logs;
+ if("chemical_reactions_list")
+ return global.chemical_reactions_list;
+ if("chemical_produce_list")
+ return global.chemical_produce_list;
+ if("chicken_count")
+ return global.chicken_count;
+ if("church_name")
+ return global.church_name;
+ if("client_preference_stats_")
+ return global.client_preference_stats_;
+ if("client_repository")
+ return global.client_repository;
+ if("combatlog")
+ return global.combatlog;
+ if("comm_message_listeners")
+ return global.comm_message_listeners;
+ if("command_announcement")
+ return global.command_announcement;
+ if("command_name")
+ return global.command_name;
+ if("commandos")
+ return global.commandos;
+ if("common_tools")
+ return global.common_tools;
+ if("config")
+ return global.config;
+ if("contamination_overlay")
+ return global.contamination_overlay;
+ if("controller_iteration")
+ return global.controller_iteration;
+ if("create_mob_html")
+ return global.create_mob_html;
+ if("create_object_html")
+ return global.create_object_html;
+ if("create_turf_html")
+ return global.create_turf_html;
+ if("created")
+ return global.created;
+ if("crew_repository")
+ return global.crew_repository;
+ if("csrfz_check")
+ return global.csrfz_check;
+ if("cult")
+ return global.cult;
+ if("currently_running_tests")
+ return global.currently_running_tests;
+ if("custom_event_msg")
+ return global.custom_event_msg;
+ if("custom_items")
+ return global.custom_items;
+ if("damage_icon_parts")
+ return global.damage_icon_parts;
+ if("dbcon")
+ return global.dbcon;
+ if("dbcon_old")
+ return global.dbcon_old;
+ if("deathsquad")
+ return global.deathsquad;
+ if("debug_verbs")
+ return global.debug_verbs;
+ if("decls_repository")
+ return global.decls_repository;
+ if("default_material_composition")
+ return global.default_material_composition;
+ if("default_mobloc")
+ return global.default_mobloc;
+ if("default_onmob_icons")
+ return global.default_onmob_icons;
+ if("default_pai_software")
+ return global.default_pai_software;
+ if("defer_powernet_rebuild")
+ return global.defer_powernet_rebuild;
+ if("delta_index")
+ return global.delta_index;
+ if("department_accounts")
+ return global.department_accounts;
+ if("department_radio_keys")
+ return global.department_radio_keys;
+ if("description_icons")
+ return global.description_icons;
+ if("diary")
+ return global.diary;
+ if("dna_activity_bounds")
+ return global.dna_activity_bounds;
+ if("dna_genes")
+ return global.dna_genes;
+ if("doppler_arrays")
+ return global.doppler_arrays;
+ if("dreams")
+ return global.dreams;
+ if("dummy_lighting_corner")
+ return global.dummy_lighting_corner;
+ if("economic_species_modifier")
+ return global.economic_species_modifier;
+ if("empty_playable_ai_cores")
+ return global.empty_playable_ai_cores;
+ if("endgame_exits")
+ return global.endgame_exits;
+ if("endgame_safespawns")
+ return global.endgame_safespawns;
+ if("ert")
+ return global.ert;
+ if("ert_base_chance")
+ return global.ert_base_chance;
+ if("escape_pods")
+ return global.escape_pods;
+ if("escape_pods_by_name")
+ return global.escape_pods_by_name;
+ if("evacuation_controller")
+ return global.evacuation_controller;
+ if("event_last_fired")
+ return global.event_last_fired;
+ if("eventchance")
+ return global.eventchance;
+ if("exclude_jobs")
+ return global.exclude_jobs;
+ if("explosion_in_progress")
+ return global.explosion_in_progress;
+ if("explosion_turfs")
+ return global.explosion_turfs;
+ if("failed_db_connections")
+ return global.failed_db_connections;
+ if("failed_old_db_connections")
+ return global.failed_old_db_connections;
+ if("failed_unit_tests")
+ return global.failed_unit_tests;
+ if("file_uid")
+ return global.file_uid;
+ if("fileaccess_timer")
+ return global.fileaccess_timer;
+ if("finds_as_strings")
+ return global.finds_as_strings;
+ if("fire_alarm")
+ return global.fire_alarm;
+ if("flesh_hud_colours")
+ return global.flesh_hud_colours;
+ if("floorIsLava")
+ return global.floorIsLava;
+ if("floor_decals")
+ return global.floor_decals;
+ if("floor_light_cache")
+ return global.floor_light_cache;
+ if("flooring_cache")
+ return global.flooring_cache;
+ if("flooring_types")
+ return global.flooring_types;
+ if("fluidtrack_cache")
+ return global.fluidtrack_cache;
+ if("follow_repository")
+ return global.follow_repository;
+ if("forced_ambiance_list")
+ return global.forced_ambiance_list;
+ if("fruit_icon_cache")
+ return global.fruit_icon_cache;
+ if("fuel_injectors")
+ return global.fuel_injectors;
+ if("fusion_cores")
+ return global.fusion_cores;
+ if("fusion_reactions")
+ return global.fusion_reactions;
+ if("game_id")
+ return global.game_id;
+ if("game_version")
+ return global.game_version;
+ if("game_year")
+ return global.game_year;
+ if("gamemode_cache")
+ return global.gamemode_cache;
+ if("gas_data")
+ return global.gas_data;
+ if("gender_datums")
+ return global.gender_datums;
+ if("ghost_darkness_images")
+ return global.ghost_darkness_images;
+ if("ghost_sightless_images")
+ return global.ghost_sightless_images;
+ if("ghost_traps")
+ return global.ghost_traps;
+ if("global_message_listener")
+ return global.global_message_listener;
+ if("global_vars_")
+ return global.global_vars_;
+ if("gravity_is_on")
+ return global.gravity_is_on;
+ if("gyrotrons")
+ return global.gyrotrons;
+ if("gzn_check")
+ return global.gzn_check;
+ if("hadevent")
+ return global.hadevent;
+ if("hazard_overlays")
+ return global.hazard_overlays;
+ if("hivemind_bank")
+ return global.hivemind_bank;
+ if("holder_mob_icon_cache")
+ return global.holder_mob_icon_cache;
+ if("host")
+ return global.host;
+ if("href_logfile")
+ return global.href_logfile;
+ if("human_icon_cache")
+ return global.human_icon_cache;
+ if("id_card_states")
+ return global.id_card_states;
+ if("image_repository")
+ return global.image_repository;
+ if("inactive_keys")
+ return global.inactive_keys;
+ if("init")
+ return global.init;
+ if("initialization_stage")
+ return global.initialization_stage;
+ if("integrated_circuit_blacklist")
+ return global.integrated_circuit_blacklist;
+ if("intents")
+ return global.intents;
+ if("intercom_range_display_status")
+ return global.intercom_range_display_status;
+ if("invalid_zone")
+ return global.invalid_zone;
+ if("jobMax")
+ return global.jobMax;
+ if("job_master")
+ return global.job_master;
+ if("jobban_keylist")
+ return global.jobban_keylist;
+ if("jobban_runonce")
+ return global.jobban_runonce;
+ if("joblist")
+ return global.joblist;
+ if("join_motd")
+ return global.join_motd;
+ if("landmarks_list")
+ return global.landmarks_list;
+ if("language_keys")
+ return global.language_keys;
+ if("last_chew")
+ return global.last_chew;
+ if("last_message_id")
+ return global.last_message_id;
+ if("last_round_duration")
+ return global.last_round_duration;
+ if("last_tick_duration")
+ return global.last_tick_duration;
+ if("license_to_url")
+ return global.license_to_url;
+ if("light_overlay_cache")
+ return global.light_overlay_cache;
+ if("lighting_overlays_initialised")
+ return global.lighting_overlays_initialised;
+ if("lighting_update_corners")
+ return global.lighting_update_corners;
+ if("lighting_update_corners_old")
+ return global.lighting_update_corners_old;
+ if("lighting_update_lights")
+ return global.lighting_update_lights;
+ if("lighting_update_lights_old")
+ return global.lighting_update_lights_old;
+ if("lighting_update_overlays")
+ return global.lighting_update_overlays;
+ if("lighting_update_overlays_old")
+ return global.lighting_update_overlays_old;
+ if("limb_icon_cache")
+ return global.limb_icon_cache;
+ if("lobby_image")
+ return global.lobby_image;
+ if("log_end")
+ return global.log_end;
+ if("loyalists")
+ return global.loyalists;
+ if("lunchables_drink_reagents_")
+ return global.lunchables_drink_reagents_;
+ if("lunchables_drinks_")
+ return global.lunchables_drinks_;
+ if("lunchables_ethanol_reagents_")
+ return global.lunchables_ethanol_reagents_;
+ if("lunchables_lunches_")
+ return global.lunchables_lunches_;
+ if("lunchables_snacks_")
+ return global.lunchables_snacks_;
+ if("magazine_icondata_keys")
+ return global.magazine_icondata_keys;
+ if("magazine_icondata_states")
+ return global.magazine_icondata_states;
+ if("maint_all_access")
+ return global.maint_all_access;
+ if("malf")
+ return global.malf;
+ if("mannequins_")
+ return global.mannequins_;
+ if("map_count")
+ return global.map_count;
+ if("map_sectors")
+ return global.map_sectors;
+ if("maploader")
+ return global.maploader;
+ if("mark")
+ return global.mark;
+ if("master_controller")
+ return global.master_controller;
+ if("master_mode")
+ return global.master_mode;
+ if("maze_cell_count")
+ return global.maze_cell_count;
+ if("mechas_list")
+ return global.mechas_list;
+ if("mechtoys")
+ return global.mechtoys;
+ if("mercs")
+ return global.mercs;
+ if("merged")
+ return global.merged;
+ if("message_delay")
+ return global.message_delay;
+ if("message_servers")
+ return global.message_servers;
+ if("meteors_armageddon")
+ return global.meteors_armageddon;
+ if("meteors_cataclysm")
+ return global.meteors_cataclysm;
+ if("meteors_catastrophic")
+ return global.meteors_catastrophic;
+ if("meteors_dust")
+ return global.meteors_dust;
+ if("meteors_major")
+ return global.meteors_major;
+ if("meteors_minor")
+ return global.meteors_minor;
+ if("meteors_moderate")
+ return global.meteors_moderate;
+ if("meteors_normal")
+ return global.meteors_normal;
+ if("meteors_threatening")
+ return global.meteors_threatening;
+ if("mil_branches")
+ return global.mil_branches;
+ if("mining_floors")
+ return global.mining_floors;
+ if("mining_walls")
+ return global.mining_walls;
+ if("minor_air_alarms")
+ return global.minor_air_alarms;
+ if("minor_announcement")
+ return global.minor_announcement;
+ if("mob_hat_cache")
+ return global.mob_hat_cache;
+ if("mob_repository")
+ return global.mob_repository;
+ if("motion_alarm")
+ return global.motion_alarm;
+ if("moving_levels")
+ return global.moving_levels;
+ if("multi_point_spawns")
+ return global.multi_point_spawns;
+ if("name_to_material")
+ return global.name_to_material;
+ if("narsie_behaviour")
+ return global.narsie_behaviour;
+ if("narsie_cometh")
+ return global.narsie_cometh;
+ if("narsie_list")
+ return global.narsie_list;
+ if("navbeacons")
+ return global.navbeacons;
+ if("news_network")
+ return global.news_network;
+ if("newscaster_standard_feeds")
+ return global.newscaster_standard_feeds;
+ if("next_account_number")
+ return global.next_account_number;
+ if("next_duration_update")
+ return global.next_duration_update;
+ if("next_station_date_change")
+ return global.next_station_date_change;
+ if("not_incapacitated_turf_state")
+ return global.not_incapacitated_turf_state;
+ if("ntnet_card_uid")
+ return global.ntnet_card_uid;
+ if("ntnet_global")
+ return global.ntnet_global;
+ if("ntnrc_uid")
+ return global.ntnrc_uid;
+ if("nttransfer_uid")
+ return global.nttransfer_uid;
+ if("nuke_disks")
+ return global.nuke_disks;
+ if("num_financial_terminals")
+ return global.num_financial_terminals;
+ if("ore_data")
+ return global.ore_data;
+ if("ores_by_type")
+ return global.ores_by_type;
+ if("organ_cache")
+ return global.organ_cache;
+ if("organ_rel_size")
+ return global.organ_rel_size;
+ if("outfits_decls_")
+ return global.outfits_decls_;
+ if("outfits_decls_by_type_")
+ return global.outfits_decls_by_type_;
+ if("outfits_decls_root_")
+ return global.outfits_decls_root_;
+ if("overmap_event_handler")
+ return global.overmap_event_handler;
+ if("paiController")
+ return global.paiController;
+ if("pai_emotions")
+ return global.pai_emotions;
+ if("pai_software_by_key")
+ return global.pai_software_by_key;
+ if("paramslist_cache")
+ return global.paramslist_cache;
+ if("photo_count")
+ return global.photo_count;
+ if("pipe_colors")
+ return global.pipe_colors;
+ if("pipe_processing_killed")
+ return global.pipe_processing_killed;
+ if("plant_controller")
+ return global.plant_controller;
+ if("plant_seed_sprites")
+ return global.plant_seed_sprites;
+ if("playable_species")
+ return global.playable_species;
+ if("point_source_descriptions")
+ return global.point_source_descriptions;
+ if("possible_cable_coil_colours")
+ return global.possible_cable_coil_colours;
+ if("possible_changeling_IDs")
+ return global.possible_changeling_IDs;
+ if("poster_designs")
+ return global.poster_designs;
+ if("power_alarm")
+ return global.power_alarm;
+ if("powerinstances")
+ return global.powerinstances;
+ if("powers")
+ return global.powers;
+ if("preferences_datums")
+ return global.preferences_datums;
+ if("priority_air_alarms")
+ return global.priority_air_alarms;
+ if("priority_announcement")
+ return global.priority_announcement;
+ if("priv_all_access")
+ return global.priv_all_access;
+ if("priv_all_access_datums")
+ return global.priv_all_access_datums;
+ if("priv_all_access_datums_id")
+ return global.priv_all_access_datums_id;
+ if("priv_all_access_datums_region")
+ return global.priv_all_access_datums_region;
+ if("priv_centcom_access")
+ return global.priv_centcom_access;
+ if("priv_region_access")
+ return global.priv_region_access;
+ if("priv_station_access")
+ return global.priv_station_access;
+ if("priv_syndicate_access")
+ return global.priv_syndicate_access;
+ if("processScheduler")
+ return global.processScheduler;
+ if("processing_turfs")
+ return global.processing_turfs;
+ if("protected_objects")
+ return global.protected_objects;
+ if("rad_collectors")
+ return global.rad_collectors;
+ if("radiation_repository")
+ return global.radiation_repository;
+ if("radio_controller")
+ return global.radio_controller;
+ if("radiochannels")
+ return global.radiochannels;
+ if("raiders")
+ return global.raiders;
+ if("random_junk_")
+ return global.random_junk_;
+ if("random_maps")
+ return global.random_maps;
+ if("random_useful_")
+ return global.random_useful_;
+ if("recentmessages")
+ return global.recentmessages;
+ if("registered_macros_by_ckey_")
+ return global.registered_macros_by_ckey_;
+ if("religion_name")
+ return global.religion_name;
+ if("renegades")
+ return global.renegades;
+ if("req_console_assistance")
+ return global.req_console_assistance;
+ if("req_console_information")
+ return global.req_console_information;
+ if("req_console_supplies")
+ return global.req_console_supplies;
+ if("responsive_carriers")
+ return global.responsive_carriers;
+ if("restricted_camera_networks")
+ return global.restricted_camera_networks;
+ if("revdata")
+ return global.revdata;
+ if("revs")
+ return global.revs;
+ if("robot_custom_icons")
+ return global.robot_custom_icons;
+ if("robot_hud_colours")
+ return global.robot_hud_colours;
+ if("robot_inventory")
+ return global.robot_inventory;
+ if("robot_modules")
+ return global.robot_modules;
+ if("round_progressing")
+ return global.round_progressing;
+ if("round_start_time")
+ return global.round_start_time;
+ if("roundstart_hour")
+ return global.roundstart_hour;
+ if("rune_list")
+ return global.rune_list;
+ if("runtime_diary")
+ return global.runtime_diary;
+ if("same_wires")
+ return global.same_wires;
+ if("secondary_mode")
+ return global.secondary_mode;
+ if("secret_force_mode")
+ return global.secret_force_mode;
+ if("send_emergency_team")
+ return global.send_emergency_team;
+ if("sent_spiders_to_station")
+ return global.sent_spiders_to_station;
+ if("server_name")
+ return global.server_name;
+ if("severity_to_string")
+ return global.severity_to_string;
+ if("ship_engines")
+ return global.ship_engines;
+ if("shuttle_controller")
+ return global.shuttle_controller;
+ if("side_effects")
+ return global.side_effects;
+ if("skin_styles_female_list")
+ return global.skin_styles_female_list;
+ if("skipped_unit_tests")
+ return global.skipped_unit_tests;
+ if("slot_equipment_priority")
+ return global.slot_equipment_priority;
+ if("slot_flags_enumeration")
+ return global.slot_flags_enumeration;
+ if("solar_gen_rate")
+ return global.solar_gen_rate;
+ if("solars_list")
+ return global.solars_list;
+ if("sortInstance")
+ return global.sortInstance;
+ if("sound_player")
+ return global.sound_player;
+ if("sounds_cache")
+ return global.sounds_cache;
+ if("spacevines_spawned")
+ return global.spacevines_spawned;
+ if("sparring_attack_cache")
+ return global.sparring_attack_cache;
+ if("spells")
+ return global.spells;
+ if("splatter_cache")
+ return global.splatter_cache;
+ if("sqladdress")
+ return global.sqladdress;
+ if("sqldb")
+ return global.sqldb;
+ if("sqlfdbkdb")
+ return global.sqlfdbkdb;
+ if("sqlfdbklogin")
+ return global.sqlfdbklogin;
+ if("sqlfdbkpass")
+ return global.sqlfdbkpass;
+ if("sqllogging")
+ return global.sqllogging;
+ if("sqllogin")
+ return global.sqllogin;
+ if("sqlpass")
+ return global.sqlpass;
+ if("sqlport")
+ return global.sqlport;
+ if("station_account")
+ return global.station_account;
+ if("station_date")
+ return global.station_date;
+ if("stool_cache")
+ return global.stool_cache;
+ if("stored_shock_by_ref")
+ return global.stored_shock_by_ref;
+ if("string_part_flags")
+ return global.string_part_flags;
+ if("string_slot_flags")
+ return global.string_slot_flags;
+ if("supply_controller")
+ return global.supply_controller;
+ if("supply_drop")
+ return global.supply_drop;
+ if("supply_methods_")
+ return global.supply_methods_;
+ if("surgery_steps")
+ return global.surgery_steps;
+ if("swapmaps_byname")
+ return global.swapmaps_byname;
+ if("swapmaps_compiled_maxx")
+ return global.swapmaps_compiled_maxx;
+ if("swapmaps_compiled_maxy")
+ return global.swapmaps_compiled_maxy;
+ if("swapmaps_compiled_maxz")
+ return global.swapmaps_compiled_maxz;
+ if("swapmaps_iconcache")
+ return global.swapmaps_iconcache;
+ if("swapmaps_initialized")
+ return global.swapmaps_initialized;
+ if("swapmaps_loaded")
+ return global.swapmaps_loaded;
+ if("swapmaps_mode")
+ return global.swapmaps_mode;
+ if("syndicate_access")
+ return global.syndicate_access;
+ if("syndicate_code_phrase")
+ return global.syndicate_code_phrase;
+ if("syndicate_code_response")
+ return global.syndicate_code_response;
+ if("syndicate_name")
+ return global.syndicate_name;
+ if("tail_icon_cache")
+ return global.tail_icon_cache;
+ if("tank_gauge_cache")
+ return global.tank_gauge_cache;
+ if("tape_roll_applications")
+ return global.tape_roll_applications;
+ if("telecomms_list")
+ return global.telecomms_list;
+ if("tertiary_mode")
+ return global.tertiary_mode;
+ if("text_tag_icons")
+ return global.text_tag_icons;
+ if("tg_admin_state")
+ return global.tg_admin_state;
+ if("tg_always_state")
+ return global.tg_always_state;
+ if("tg_conscious_state")
+ return global.tg_conscious_state;
+ if("tg_contained_state")
+ return global.tg_contained_state;
+ if("tg_deep_inventory_state")
+ return global.tg_deep_inventory_state;
+ if("tg_default_state")
+ return global.tg_default_state;
+ if("tg_hands_state")
+ return global.tg_hands_state;
+ if("tg_human_adjacent_state")
+ return global.tg_human_adjacent_state;
+ if("tg_inventory_state")
+ return global.tg_inventory_state;
+ if("tg_not_contained_state")
+ return global.tg_not_contained_state;
+ if("tg_not_incapacitated_state")
+ return global.tg_not_incapacitated_state;
+ if("tg_physical_state")
+ return global.tg_physical_state;
+ if("tg_self_state")
+ return global.tg_self_state;
+ if("tg_z_state")
+ return global.tg_z_state;
+ if("tgui_process")
+ return global.tgui_process;
+ if("ticker")
+ return global.ticker;
+ if("tickerProcess")
+ return global.tickerProcess;
+ if("ticket_panels")
+ return global.ticket_panels;
+ if("tickets")
+ return global.tickets;
+ if("total_lighting_corners")
+ return global.total_lighting_corners;
+ if("total_lighting_overlays")
+ return global.total_lighting_overlays;
+ if("total_lighting_sources")
+ return global.total_lighting_sources;
+ if("total_unit_tests")
+ return global.total_unit_tests;
+ if("traitors")
+ return global.traitors;
+ if("transfer_controller")
+ return global.transfer_controller;
+ if("turbolift_controller")
+ return global.turbolift_controller;
+ if("turbolifts")
+ return global.turbolifts;
+ if("turret_icons")
+ return global.turret_icons;
+ if("uniqueness_repository")
+ return global.uniqueness_repository;
+ if("universe_has_ended")
+ return global.universe_has_ended;
+ if("uplink")
+ return global.uplink;
+ if("uplink_purchase_repository")
+ return global.uplink_purchase_repository;
+ if("uplink_random_selections_")
+ return global.uplink_random_selections_;
+ if("valid_bloodtypes")
+ return global.valid_bloodtypes;
+ if("vendor_account")
+ return global.vendor_account;
+ if("ventcrawl_machinery")
+ return global.ventcrawl_machinery;
+ if("view_variables_dont_expand")
+ return global.view_variables_dont_expand;
+ if("view_variables_no_assoc")
+ return global.view_variables_no_assoc;
+ if("virusDB")
+ return global.virusDB;
+ if("visual_nets")
+ return global.visual_nets;
+ if("vote")
+ return global.vote;
+ if("vsc")
+ return global.vsc;
+ if("weighted_mundaneevent_locations")
+ return global.weighted_mundaneevent_locations;
+ if("weighted_randomevent_locations")
+ return global.weighted_randomevent_locations;
+ if("whitelist")
+ return global.whitelist;
+ if("whitelisted_species")
+ return global.whitelisted_species;
+ if("wireColours")
+ return global.wireColours;
+ if("wizards")
+ return global.wizards;
+ if("world_topic_spam_protect_ip")
+ return global.world_topic_spam_protect_ip;
+ if("world_topic_spam_protect_time")
+ return global.world_topic_spam_protect_time;
+ if("world_uplinks")
+ return global.world_uplinks;
+ if("worths")
+ return global.worths;
+ if("z_levels")
+ return global.z_levels;
+ if("zone_blocked")
+ return global.zone_blocked;
+
+/proc/writeglobal(which, newval)
+ switch(which)
+ if("ALL_ANTIGENS")
+ global.ALL_ANTIGENS=newval;
+ if("ANTAG_FREQS")
+ global.ANTAG_FREQS=newval;
+ if("BSACooldown")
+ global.BSACooldown=newval;
+ if("BUMP_TELEPORTERS")
+ global.BUMP_TELEPORTERS=newval;
+ if("Banlist")
+ global.Banlist=newval;
+ if("CENT_FREQS")
+ global.CENT_FREQS=newval;
+ if("CMinutes")
+ global.CMinutes=newval;
+ if("DEPT_FREQS")
+ global.DEPT_FREQS=newval;
+ if("Debug2")
+ global.Debug2=newval;
+ if("Failsafe")
+ global.Failsafe=newval;
+ if("GLOB")
+ global.GLOB=newval;
+ if("Holiday")
+ global.Holiday=newval;
+ if("IClog")
+ global.IClog=newval;
+ if("LIGHTING_CORNER_DIAGONAL")
+ global.LIGHTING_CORNER_DIAGONAL=newval;
+ if("Master")
+ global.Master=newval;
+ if("OOClog")
+ global.OOClog=newval;
+ if("PDAs")
+ global.PDAs=newval;
+ if("SSair")
+ global.SSair=newval;
+ if("SSairflow")
+ global.SSairflow=newval;
+ if("SSatoms")
+ global.SSatoms=newval;
+ if("SSfastprocess")
+ global.SSfastprocess=newval;
+ if("SSgarbage")
+ global.SSgarbage=newval;
+ if("SSlegacy")
+ global.SSlegacy=newval;
+ if("SSmachines")
+ global.SSmachines=newval;
+ if("SSmapping")
+ global.SSmapping=newval;
+ if("SSmobs")
+ global.SSmobs=newval;
+ if("SSobj")
+ global.SSobj=newval;
+ if("SSopen_space")
+ global.SSopen_space=newval;
+ if("SSprocessing")
+ global.SSprocessing=newval;
+ if("SSskybox")
+ global.SSskybox=newval;
+ if("SSsun")
+ global.SSsun=newval;
+ if("SStimer")
+ global.SStimer=newval;
+ if("SSvines")
+ global.SSvines=newval;
+ if("SSwireless")
+ global.SSwireless=newval;
+ if("Tier1Runes")
+ global.Tier1Runes=newval;
+ if("Tier2Runes")
+ global.Tier2Runes=newval;
+ if("Tier3Runes")
+ global.Tier3Runes=newval;
+ if("Tier4Runes")
+ global.Tier4Runes=newval;
+ if("WALLITEMS")
+ global.WALLITEMS=newval;
+ if("_all_globals")
+ global._all_globals=newval;
+ if("_client_preferences")
+ global._client_preferences=newval;
+ if("_client_preferences_by_key")
+ global._client_preferences_by_key=newval;
+ if("_client_preferences_by_type")
+ global._client_preferences_by_type=newval;
+ if("account_hack_attempted")
+ global.account_hack_attempted=newval;
+ if("actor")
+ global.actor=newval;
+ if("additional_antag_types")
+ global.additional_antag_types=newval;
+ if("admin_datums")
+ global.admin_datums=newval;
+ if("admin_pm_repository")
+ global.admin_pm_repository=newval;
+ if("admin_ranks")
+ global.admin_ranks=newval;
+ if("admin_secrets")
+ global.admin_secrets=newval;
+ if("admin_verbs_admin")
+ global.admin_verbs_admin=newval;
+ if("admin_verbs_ban")
+ global.admin_verbs_ban=newval;
+ if("admin_verbs_debug")
+ global.admin_verbs_debug=newval;
+ if("admin_verbs_default")
+ global.admin_verbs_default=newval;
+ if("admin_verbs_fun")
+ global.admin_verbs_fun=newval;
+ if("admin_verbs_hideable")
+ global.admin_verbs_hideable=newval;
+ if("admin_verbs_mentor")
+ global.admin_verbs_mentor=newval;
+ if("admin_verbs_mod")
+ global.admin_verbs_mod=newval;
+ if("admin_verbs_paranoid_debug")
+ global.admin_verbs_paranoid_debug=newval;
+ if("admin_verbs_permissions")
+ global.admin_verbs_permissions=newval;
+ if("admin_verbs_possess")
+ global.admin_verbs_possess=newval;
+ if("admin_verbs_rejuv")
+ global.admin_verbs_rejuv=newval;
+ if("admin_verbs_server")
+ global.admin_verbs_server=newval;
+ if("admin_verbs_sounds")
+ global.admin_verbs_sounds=newval;
+ if("admin_verbs_spawn")
+ global.admin_verbs_spawn=newval;
+ if("adminhelp_ignored_words")
+ global.adminhelp_ignored_words=newval;
+ if("adminlog")
+ global.adminlog=newval;
+ if("ai_list")
+ global.ai_list=newval;
+ if("ai_status_emotions")
+ global.ai_status_emotions=newval;
+ if("ai_verbs_default")
+ global.ai_verbs_default=newval;
+ if("air_alarm_topic")
+ global.air_alarm_topic=newval;
+ if("air_blocked")
+ global.air_blocked=newval;
+ if("air_processing_killed")
+ global.air_processing_killed=newval;
+ if("alarm_manager")
+ global.alarm_manager=newval;
+ if("alien_whitelist")
+ global.alien_whitelist=newval;
+ if("allCasters")
+ global.allCasters=newval;
+ if("allConsoles")
+ global.allConsoles=newval;
+ if("all_antag_spawnpoints_")
+ global.all_antag_spawnpoints_=newval;
+ if("all_antag_types_")
+ global.all_antag_types_=newval;
+ if("all_grabobjects")
+ global.all_grabobjects=newval;
+ if("all_grabstates")
+ global.all_grabstates=newval;
+ if("all_languages")
+ global.all_languages=newval;
+ if("all_money_accounts")
+ global.all_money_accounts=newval;
+ if("all_objectives")
+ global.all_objectives=newval;
+ if("all_robolimbs")
+ global.all_robolimbs=newval;
+ if("all_species")
+ global.all_species=newval;
+ if("all_ui_styles")
+ global.all_ui_styles=newval;
+ if("all_unit_tests_passed")
+ global.all_unit_tests_passed=newval;
+ if("all_virtual_listeners")
+ global.all_virtual_listeners=newval;
+ if("announced_news_types")
+ global.announced_news_types=newval;
+ if("antag_add_finished")
+ global.antag_add_finished=newval;
+ if("antag_names_to_ids_")
+ global.antag_names_to_ids_=newval;
+ if("appearance_manager")
+ global.appearance_manager=newval;
+ if("area_repository")
+ global.area_repository=newval;
+ if("artefact_feedback")
+ global.artefact_feedback=newval;
+ if("ascii_esc")
+ global.ascii_esc=newval;
+ if("ascii_green")
+ global.ascii_green=newval;
+ if("ascii_red")
+ global.ascii_red=newval;
+ if("ascii_reset")
+ global.ascii_reset=newval;
+ if("ascii_yellow")
+ global.ascii_yellow=newval;
+ if("asset_cache")
+ global.asset_cache=newval;
+ if("asset_datums")
+ global.asset_datums=newval;
+ if("assigned")
+ global.assigned=newval;
+ if("assigned_blocks")
+ global.assigned_blocks=newval;
+ if("atmosphere_alarm")
+ global.atmosphere_alarm=newval;
+ if("attack_log_repository")
+ global.attack_log_repository=newval;
+ if("autolathe_categories")
+ global.autolathe_categories=newval;
+ if("autolathe_recipes")
+ global.autolathe_recipes=newval;
+ if("base_miss_chance")
+ global.base_miss_chance=newval;
+ if("basic_robolimb")
+ global.basic_robolimb=newval;
+ if("blackbox")
+ global.blackbox=newval;
+ if("blocked")
+ global.blocked=newval;
+ if("bomb_set")
+ global.bomb_set=newval;
+ if("borers")
+ global.borers=newval;
+ if("cable_list")
+ global.cable_list=newval;
+ if("cached_icons")
+ global.cached_icons=newval;
+ if("cached_space")
+ global.cached_space=newval;
+ if("camera_alarm")
+ global.camera_alarm=newval;
+ if("camera_range_display_status")
+ global.camera_range_display_status=newval;
+ if("camera_repository")
+ global.camera_repository=newval;
+ if("cameranet")
+ global.cameranet=newval;
+ if("can_call_ert")
+ global.can_call_ert=newval;
+ if("captain_announcement")
+ global.captain_announcement=newval;
+ if("cargo_supply_pack_root")
+ global.cargo_supply_pack_root=newval;
+ if("cargo_supply_packs")
+ global.cargo_supply_packs=newval;
+ if("changelog_hash")
+ global.changelog_hash=newval;
+ if("channel_to_radio_key")
+ global.channel_to_radio_key=newval;
+ if("chargen_robolimbs")
+ global.chargen_robolimbs=newval;
+ if("checked_for_inactives")
+ global.checked_for_inactives=newval;
+ if("chemical_reaction_logs")
+ global.chemical_reaction_logs=newval;
+ if("chemical_reactions_list")
+ global.chemical_reactions_list=newval;
+ if("chemical_produce_list")
+ global.chemical_produce_list=newval;
+ if("chicken_count")
+ global.chicken_count=newval;
+ if("church_name")
+ global.church_name=newval;
+ if("client_preference_stats_")
+ global.client_preference_stats_=newval;
+ if("client_repository")
+ global.client_repository=newval;
+ if("combatlog")
+ global.combatlog=newval;
+ if("comm_message_listeners")
+ global.comm_message_listeners=newval;
+ if("command_announcement")
+ global.command_announcement=newval;
+ if("command_name")
+ global.command_name=newval;
+ if("commandos")
+ global.commandos=newval;
+ if("common_tools")
+ global.common_tools=newval;
+ if("config")
+ global.config=newval;
+ if("contamination_overlay")
+ global.contamination_overlay=newval;
+ if("controller_iteration")
+ global.controller_iteration=newval;
+ if("create_mob_html")
+ global.create_mob_html=newval;
+ if("create_object_html")
+ global.create_object_html=newval;
+ if("create_turf_html")
+ global.create_turf_html=newval;
+ if("created")
+ global.created=newval;
+ if("crew_repository")
+ global.crew_repository=newval;
+ if("csrfz_check")
+ global.csrfz_check=newval;
+ if("cult")
+ global.cult=newval;
+ if("currently_running_tests")
+ global.currently_running_tests=newval;
+ if("custom_event_msg")
+ global.custom_event_msg=newval;
+ if("custom_items")
+ global.custom_items=newval;
+ if("damage_icon_parts")
+ global.damage_icon_parts=newval;
+ if("dbcon")
+ global.dbcon=newval;
+ if("dbcon_old")
+ global.dbcon_old=newval;
+ if("deathsquad")
+ global.deathsquad=newval;
+ if("debug_verbs")
+ global.debug_verbs=newval;
+ if("decls_repository")
+ global.decls_repository=newval;
+ if("default_material_composition")
+ global.default_material_composition=newval;
+ if("default_mobloc")
+ global.default_mobloc=newval;
+ if("default_onmob_icons")
+ global.default_onmob_icons=newval;
+ if("default_pai_software")
+ global.default_pai_software=newval;
+ if("defer_powernet_rebuild")
+ global.defer_powernet_rebuild=newval;
+ if("department_accounts")
+ global.department_accounts=newval;
+ if("department_radio_keys")
+ global.department_radio_keys=newval;
+ if("description_icons")
+ global.description_icons=newval;
+ if("diary")
+ global.diary=newval;
+ if("dna_activity_bounds")
+ global.dna_activity_bounds=newval;
+ if("dna_genes")
+ global.dna_genes=newval;
+ if("doppler_arrays")
+ global.doppler_arrays=newval;
+ if("dreams")
+ global.dreams=newval;
+ if("dummy_lighting_corner")
+ global.dummy_lighting_corner=newval;
+ if("economic_species_modifier")
+ global.economic_species_modifier=newval;
+ if("empty_playable_ai_cores")
+ global.empty_playable_ai_cores=newval;
+ if("endgame_exits")
+ global.endgame_exits=newval;
+ if("endgame_safespawns")
+ global.endgame_safespawns=newval;
+ if("ert")
+ global.ert=newval;
+ if("ert_base_chance")
+ global.ert_base_chance=newval;
+ if("escape_pods")
+ global.escape_pods=newval;
+ if("escape_pods_by_name")
+ global.escape_pods_by_name=newval;
+ if("evacuation_controller")
+ global.evacuation_controller=newval;
+ if("event_last_fired")
+ global.event_last_fired=newval;
+ if("eventchance")
+ global.eventchance=newval;
+ if("exclude_jobs")
+ global.exclude_jobs=newval;
+ if("explosion_in_progress")
+ global.explosion_in_progress=newval;
+ if("explosion_turfs")
+ global.explosion_turfs=newval;
+ if("failed_db_connections")
+ global.failed_db_connections=newval;
+ if("failed_old_db_connections")
+ global.failed_old_db_connections=newval;
+ if("failed_unit_tests")
+ global.failed_unit_tests=newval;
+ if("file_uid")
+ global.file_uid=newval;
+ if("fileaccess_timer")
+ global.fileaccess_timer=newval;
+ if("finds_as_strings")
+ global.finds_as_strings=newval;
+ if("fire_alarm")
+ global.fire_alarm=newval;
+ if("flesh_hud_colours")
+ global.flesh_hud_colours=newval;
+ if("floorIsLava")
+ global.floorIsLava=newval;
+ if("floor_decals")
+ global.floor_decals=newval;
+ if("floor_light_cache")
+ global.floor_light_cache=newval;
+ if("flooring_cache")
+ global.flooring_cache=newval;
+ if("flooring_types")
+ global.flooring_types=newval;
+ if("fluidtrack_cache")
+ global.fluidtrack_cache=newval;
+ if("follow_repository")
+ global.follow_repository=newval;
+ if("forced_ambiance_list")
+ global.forced_ambiance_list=newval;
+ if("fruit_icon_cache")
+ global.fruit_icon_cache=newval;
+ if("fuel_injectors")
+ global.fuel_injectors=newval;
+ if("fusion_cores")
+ global.fusion_cores=newval;
+ if("fusion_reactions")
+ global.fusion_reactions=newval;
+ if("game_id")
+ global.game_id=newval;
+ if("game_version")
+ global.game_version=newval;
+ if("game_year")
+ global.game_year=newval;
+ if("gamemode_cache")
+ global.gamemode_cache=newval;
+ if("gas_data")
+ global.gas_data=newval;
+ if("gender_datums")
+ global.gender_datums=newval;
+ if("ghost_darkness_images")
+ global.ghost_darkness_images=newval;
+ if("ghost_sightless_images")
+ global.ghost_sightless_images=newval;
+ if("ghost_traps")
+ global.ghost_traps=newval;
+ if("global_message_listener")
+ global.global_message_listener=newval;
+ if("global_vars_")
+ global.global_vars_=newval;
+ if("gravity_is_on")
+ global.gravity_is_on=newval;
+ if("gyrotrons")
+ global.gyrotrons=newval;
+ if("gzn_check")
+ global.gzn_check=newval;
+ if("hadevent")
+ global.hadevent=newval;
+ if("hazard_overlays")
+ global.hazard_overlays=newval;
+ if("hivemind_bank")
+ global.hivemind_bank=newval;
+ if("holder_mob_icon_cache")
+ global.holder_mob_icon_cache=newval;
+ if("host")
+ global.host=newval;
+ if("href_logfile")
+ global.href_logfile=newval;
+ if("human_icon_cache")
+ global.human_icon_cache=newval;
+ if("id_card_states")
+ global.id_card_states=newval;
+ if("image_repository")
+ global.image_repository=newval;
+ if("inactive_keys")
+ global.inactive_keys=newval;
+ if("init")
+ global.init=newval;
+ if("initialization_stage")
+ global.initialization_stage=newval;
+ if("integrated_circuit_blacklist")
+ global.integrated_circuit_blacklist=newval;
+ if("intents")
+ global.intents=newval;
+ if("intercom_range_display_status")
+ global.intercom_range_display_status=newval;
+ if("invalid_zone")
+ global.invalid_zone=newval;
+ if("jobMax")
+ global.jobMax=newval;
+ if("job_master")
+ global.job_master=newval;
+ if("jobban_keylist")
+ global.jobban_keylist=newval;
+ if("jobban_runonce")
+ global.jobban_runonce=newval;
+ if("joblist")
+ global.joblist=newval;
+ if("join_motd")
+ global.join_motd=newval;
+ if("landmarks_list")
+ global.landmarks_list=newval;
+ if("language_keys")
+ global.language_keys=newval;
+ if("last_chew")
+ global.last_chew=newval;
+ if("last_message_id")
+ global.last_message_id=newval;
+ if("last_round_duration")
+ global.last_round_duration=newval;
+ if("last_tick_duration")
+ global.last_tick_duration=newval;
+ if("license_to_url")
+ global.license_to_url=newval;
+ if("light_overlay_cache")
+ global.light_overlay_cache=newval;
+ if("lighting_overlays_initialised")
+ global.lighting_overlays_initialised=newval;
+ if("lighting_update_corners")
+ global.lighting_update_corners=newval;
+ if("lighting_update_corners_old")
+ global.lighting_update_corners_old=newval;
+ if("lighting_update_lights")
+ global.lighting_update_lights=newval;
+ if("lighting_update_lights_old")
+ global.lighting_update_lights_old=newval;
+ if("lighting_update_overlays")
+ global.lighting_update_overlays=newval;
+ if("lighting_update_overlays_old")
+ global.lighting_update_overlays_old=newval;
+ if("limb_icon_cache")
+ global.limb_icon_cache=newval;
+ if("lobby_image")
+ global.lobby_image=newval;
+ if("log_end")
+ global.log_end=newval;
+ if("loyalists")
+ global.loyalists=newval;
+ if("lunchables_drink_reagents_")
+ global.lunchables_drink_reagents_=newval;
+ if("lunchables_drinks_")
+ global.lunchables_drinks_=newval;
+ if("lunchables_ethanol_reagents_")
+ global.lunchables_ethanol_reagents_=newval;
+ if("lunchables_lunches_")
+ global.lunchables_lunches_=newval;
+ if("lunchables_snacks_")
+ global.lunchables_snacks_=newval;
+ if("magazine_icondata_keys")
+ global.magazine_icondata_keys=newval;
+ if("magazine_icondata_states")
+ global.magazine_icondata_states=newval;
+ if("maint_all_access")
+ global.maint_all_access=newval;
+ if("malf")
+ global.malf=newval;
+ if("mannequins_")
+ global.mannequins_=newval;
+ if("map_count")
+ global.map_count=newval;
+ if("map_sectors")
+ global.map_sectors=newval;
+ if("maploader")
+ global.maploader=newval;
+ if("mark")
+ global.mark=newval;
+ if("master_controller")
+ global.master_controller=newval;
+ if("master_mode")
+ global.master_mode=newval;
+ if("maze_cell_count")
+ global.maze_cell_count=newval;
+ if("mechas_list")
+ global.mechas_list=newval;
+ if("mechtoys")
+ global.mechtoys=newval;
+ if("mercs")
+ global.mercs=newval;
+ if("merged")
+ global.merged=newval;
+ if("message_delay")
+ global.message_delay=newval;
+ if("message_servers")
+ global.message_servers=newval;
+ if("meteors_armageddon")
+ global.meteors_armageddon=newval;
+ if("meteors_cataclysm")
+ global.meteors_cataclysm=newval;
+ if("meteors_catastrophic")
+ global.meteors_catastrophic=newval;
+ if("meteors_dust")
+ global.meteors_dust=newval;
+ if("meteors_major")
+ global.meteors_major=newval;
+ if("meteors_minor")
+ global.meteors_minor=newval;
+ if("meteors_moderate")
+ global.meteors_moderate=newval;
+ if("meteors_normal")
+ global.meteors_normal=newval;
+ if("meteors_threatening")
+ global.meteors_threatening=newval;
+ if("mil_branches")
+ global.mil_branches=newval;
+ if("mining_floors")
+ global.mining_floors=newval;
+ if("mining_walls")
+ global.mining_walls=newval;
+ if("minor_air_alarms")
+ global.minor_air_alarms=newval;
+ if("minor_announcement")
+ global.minor_announcement=newval;
+ if("mob_hat_cache")
+ global.mob_hat_cache=newval;
+ if("mob_repository")
+ global.mob_repository=newval;
+ if("motion_alarm")
+ global.motion_alarm=newval;
+ if("moving_levels")
+ global.moving_levels=newval;
+ if("multi_point_spawns")
+ global.multi_point_spawns=newval;
+ if("name_to_material")
+ global.name_to_material=newval;
+ if("narsie_behaviour")
+ global.narsie_behaviour=newval;
+ if("narsie_cometh")
+ global.narsie_cometh=newval;
+ if("narsie_list")
+ global.narsie_list=newval;
+ if("navbeacons")
+ global.navbeacons=newval;
+ if("news_network")
+ global.news_network=newval;
+ if("newscaster_standard_feeds")
+ global.newscaster_standard_feeds=newval;
+ if("next_account_number")
+ global.next_account_number=newval;
+ if("next_duration_update")
+ global.next_duration_update=newval;
+ if("next_station_date_change")
+ global.next_station_date_change=newval;
+ if("not_incapacitated_turf_state")
+ global.not_incapacitated_turf_state=newval;
+ if("ntnet_card_uid")
+ global.ntnet_card_uid=newval;
+ if("ntnet_global")
+ global.ntnet_global=newval;
+ if("ntnrc_uid")
+ global.ntnrc_uid=newval;
+ if("nttransfer_uid")
+ global.nttransfer_uid=newval;
+ if("nuke_disks")
+ global.nuke_disks=newval;
+ if("num_financial_terminals")
+ global.num_financial_terminals=newval;
+ if("ore_data")
+ global.ore_data=newval;
+ if("ores_by_type")
+ global.ores_by_type=newval;
+ if("organ_cache")
+ global.organ_cache=newval;
+ if("organ_rel_size")
+ global.organ_rel_size=newval;
+ if("outfits_decls_")
+ global.outfits_decls_=newval;
+ if("outfits_decls_by_type_")
+ global.outfits_decls_by_type_=newval;
+ if("outfits_decls_root_")
+ global.outfits_decls_root_=newval;
+ if("overmap_event_handler")
+ global.overmap_event_handler=newval;
+ if("paiController")
+ global.paiController=newval;
+ if("pai_emotions")
+ global.pai_emotions=newval;
+ if("pai_software_by_key")
+ global.pai_software_by_key=newval;
+ if("paramslist_cache")
+ global.paramslist_cache=newval;
+ if("photo_count")
+ global.photo_count=newval;
+ if("pipe_colors")
+ global.pipe_colors=newval;
+ if("pipe_processing_killed")
+ global.pipe_processing_killed=newval;
+ if("plant_controller")
+ global.plant_controller=newval;
+ if("plant_seed_sprites")
+ global.plant_seed_sprites=newval;
+ if("playable_species")
+ global.playable_species=newval;
+ if("point_source_descriptions")
+ global.point_source_descriptions=newval;
+ if("possible_cable_coil_colours")
+ global.possible_cable_coil_colours=newval;
+ if("possible_changeling_IDs")
+ global.possible_changeling_IDs=newval;
+ if("poster_designs")
+ global.poster_designs=newval;
+ if("power_alarm")
+ global.power_alarm=newval;
+ if("powerinstances")
+ global.powerinstances=newval;
+ if("powers")
+ global.powers=newval;
+ if("preferences_datums")
+ global.preferences_datums=newval;
+ if("priority_air_alarms")
+ global.priority_air_alarms=newval;
+ if("priority_announcement")
+ global.priority_announcement=newval;
+ if("priv_all_access")
+ global.priv_all_access=newval;
+ if("priv_all_access_datums")
+ global.priv_all_access_datums=newval;
+ if("priv_all_access_datums_id")
+ global.priv_all_access_datums_id=newval;
+ if("priv_all_access_datums_region")
+ global.priv_all_access_datums_region=newval;
+ if("priv_centcom_access")
+ global.priv_centcom_access=newval;
+ if("priv_region_access")
+ global.priv_region_access=newval;
+ if("priv_station_access")
+ global.priv_station_access=newval;
+ if("priv_syndicate_access")
+ global.priv_syndicate_access=newval;
+ if("processScheduler")
+ global.processScheduler=newval;
+ if("processing_turfs")
+ global.processing_turfs=newval;
+ if("protected_objects")
+ global.protected_objects=newval;
+ if("rad_collectors")
+ global.rad_collectors=newval;
+ if("radiation_repository")
+ global.radiation_repository=newval;
+ if("radio_controller")
+ global.radio_controller=newval;
+ if("radiochannels")
+ global.radiochannels=newval;
+ if("raiders")
+ global.raiders=newval;
+ if("random_junk_")
+ global.random_junk_=newval;
+ if("random_maps")
+ global.random_maps=newval;
+ if("random_useful_")
+ global.random_useful_=newval;
+ if("recentmessages")
+ global.recentmessages=newval;
+ if("registered_macros_by_ckey_")
+ global.registered_macros_by_ckey_=newval;
+ if("religion_name")
+ global.religion_name=newval;
+ if("renegades")
+ global.renegades=newval;
+ if("req_console_assistance")
+ global.req_console_assistance=newval;
+ if("req_console_information")
+ global.req_console_information=newval;
+ if("req_console_supplies")
+ global.req_console_supplies=newval;
+ if("responsive_carriers")
+ global.responsive_carriers=newval;
+ if("restricted_camera_networks")
+ global.restricted_camera_networks=newval;
+ if("revdata")
+ global.revdata=newval;
+ if("revs")
+ global.revs=newval;
+ if("robot_custom_icons")
+ global.robot_custom_icons=newval;
+ if("robot_hud_colours")
+ global.robot_hud_colours=newval;
+ if("robot_inventory")
+ global.robot_inventory=newval;
+ if("robot_modules")
+ global.robot_modules=newval;
+ if("round_progressing")
+ global.round_progressing=newval;
+ if("round_start_time")
+ global.round_start_time=newval;
+ if("roundstart_hour")
+ global.roundstart_hour=newval;
+ if("rune_list")
+ global.rune_list=newval;
+ if("runtime_diary")
+ global.runtime_diary=newval;
+ if("same_wires")
+ global.same_wires=newval;
+ if("secondary_mode")
+ global.secondary_mode=newval;
+ if("secret_force_mode")
+ global.secret_force_mode=newval;
+ if("send_emergency_team")
+ global.send_emergency_team=newval;
+ if("sent_spiders_to_station")
+ global.sent_spiders_to_station=newval;
+ if("server_name")
+ global.server_name=newval;
+ if("severity_to_string")
+ global.severity_to_string=newval;
+ if("ship_engines")
+ global.ship_engines=newval;
+ if("shuttle_controller")
+ global.shuttle_controller=newval;
+ if("side_effects")
+ global.side_effects=newval;
+ if("skin_styles_female_list")
+ global.skin_styles_female_list=newval;
+ if("skipped_unit_tests")
+ global.skipped_unit_tests=newval;
+ if("slot_equipment_priority")
+ global.slot_equipment_priority=newval;
+ if("slot_flags_enumeration")
+ global.slot_flags_enumeration=newval;
+ if("solar_gen_rate")
+ global.solar_gen_rate=newval;
+ if("solars_list")
+ global.solars_list=newval;
+ if("sortInstance")
+ global.sortInstance=newval;
+ if("sound_player")
+ global.sound_player=newval;
+ if("sounds_cache")
+ global.sounds_cache=newval;
+ if("spacevines_spawned")
+ global.spacevines_spawned=newval;
+ if("sparring_attack_cache")
+ global.sparring_attack_cache=newval;
+ if("spells")
+ global.spells=newval;
+ if("splatter_cache")
+ global.splatter_cache=newval;
+ if("sqladdress")
+ global.sqladdress=newval;
+ if("sqldb")
+ global.sqldb=newval;
+ if("sqlfdbkdb")
+ global.sqlfdbkdb=newval;
+ if("sqlfdbklogin")
+ global.sqlfdbklogin=newval;
+ if("sqlfdbkpass")
+ global.sqlfdbkpass=newval;
+ if("sqllogging")
+ global.sqllogging=newval;
+ if("sqllogin")
+ global.sqllogin=newval;
+ if("sqlpass")
+ global.sqlpass=newval;
+ if("sqlport")
+ global.sqlport=newval;
+ if("station_account")
+ global.station_account=newval;
+ if("station_date")
+ global.station_date=newval;
+ if("stool_cache")
+ global.stool_cache=newval;
+ if("stored_shock_by_ref")
+ global.stored_shock_by_ref=newval;
+ if("string_part_flags")
+ global.string_part_flags=newval;
+ if("string_slot_flags")
+ global.string_slot_flags=newval;
+ if("supply_controller")
+ global.supply_controller=newval;
+ if("supply_drop")
+ global.supply_drop=newval;
+ if("supply_methods_")
+ global.supply_methods_=newval;
+ if("surgery_steps")
+ global.surgery_steps=newval;
+ if("swapmaps_byname")
+ global.swapmaps_byname=newval;
+ if("swapmaps_compiled_maxx")
+ global.swapmaps_compiled_maxx=newval;
+ if("swapmaps_compiled_maxy")
+ global.swapmaps_compiled_maxy=newval;
+ if("swapmaps_compiled_maxz")
+ global.swapmaps_compiled_maxz=newval;
+ if("swapmaps_iconcache")
+ global.swapmaps_iconcache=newval;
+ if("swapmaps_initialized")
+ global.swapmaps_initialized=newval;
+ if("swapmaps_loaded")
+ global.swapmaps_loaded=newval;
+ if("swapmaps_mode")
+ global.swapmaps_mode=newval;
+ if("syndicate_access")
+ global.syndicate_access=newval;
+ if("syndicate_code_phrase")
+ global.syndicate_code_phrase=newval;
+ if("syndicate_code_response")
+ global.syndicate_code_response=newval;
+ if("syndicate_name")
+ global.syndicate_name=newval;
+ if("tail_icon_cache")
+ global.tail_icon_cache=newval;
+ if("tank_gauge_cache")
+ global.tank_gauge_cache=newval;
+ if("tape_roll_applications")
+ global.tape_roll_applications=newval;
+ if("telecomms_list")
+ global.telecomms_list=newval;
+ if("tertiary_mode")
+ global.tertiary_mode=newval;
+ if("text_tag_icons")
+ global.text_tag_icons=newval;
+ if("tg_admin_state")
+ global.tg_admin_state=newval;
+ if("tg_always_state")
+ global.tg_always_state=newval;
+ if("tg_conscious_state")
+ global.tg_conscious_state=newval;
+ if("tg_contained_state")
+ global.tg_contained_state=newval;
+ if("tg_deep_inventory_state")
+ global.tg_deep_inventory_state=newval;
+ if("tg_default_state")
+ global.tg_default_state=newval;
+ if("tg_hands_state")
+ global.tg_hands_state=newval;
+ if("tg_human_adjacent_state")
+ global.tg_human_adjacent_state=newval;
+ if("tg_inventory_state")
+ global.tg_inventory_state=newval;
+ if("tg_not_contained_state")
+ global.tg_not_contained_state=newval;
+ if("tg_not_incapacitated_state")
+ global.tg_not_incapacitated_state=newval;
+ if("tg_physical_state")
+ global.tg_physical_state=newval;
+ if("tg_self_state")
+ global.tg_self_state=newval;
+ if("tg_z_state")
+ global.tg_z_state=newval;
+ if("tgui_process")
+ global.tgui_process=newval;
+ if("ticker")
+ global.ticker=newval;
+ if("tickerProcess")
+ global.tickerProcess=newval;
+ if("ticket_panels")
+ global.ticket_panels=newval;
+ if("tickets")
+ global.tickets=newval;
+ if("total_lighting_corners")
+ global.total_lighting_corners=newval;
+ if("total_lighting_overlays")
+ global.total_lighting_overlays=newval;
+ if("total_lighting_sources")
+ global.total_lighting_sources=newval;
+ if("total_unit_tests")
+ global.total_unit_tests=newval;
+ if("traitors")
+ global.traitors=newval;
+ if("transfer_controller")
+ global.transfer_controller=newval;
+ if("turbolift_controller")
+ global.turbolift_controller=newval;
+ if("turbolifts")
+ global.turbolifts=newval;
+ if("turret_icons")
+ global.turret_icons=newval;
+ if("uniqueness_repository")
+ global.uniqueness_repository=newval;
+ if("universe_has_ended")
+ global.universe_has_ended=newval;
+ if("uplink")
+ global.uplink=newval;
+ if("uplink_purchase_repository")
+ global.uplink_purchase_repository=newval;
+ if("uplink_random_selections_")
+ global.uplink_random_selections_=newval;
+ if("valid_bloodtypes")
+ global.valid_bloodtypes=newval;
+ if("vendor_account")
+ global.vendor_account=newval;
+ if("ventcrawl_machinery")
+ global.ventcrawl_machinery=newval;
+ if("view_variables_dont_expand")
+ global.view_variables_dont_expand=newval;
+ if("view_variables_no_assoc")
+ global.view_variables_no_assoc=newval;
+ if("virusDB")
+ global.virusDB=newval;
+ if("visual_nets")
+ global.visual_nets=newval;
+ if("vote")
+ global.vote=newval;
+ if("vsc")
+ global.vsc=newval;
+ if("wax_recipes")
+ global.weighted_mundaneevent_locations=newval;
+ if("weighted_randomevent_locations")
+ global.weighted_randomevent_locations=newval;
+ if("whitelist")
+ global.whitelist=newval;
+ if("whitelisted_species")
+ global.whitelisted_species=newval;
+ if("wireColours")
+ global.wireColours=newval;
+ if("wizards")
+ global.wizards=newval;
+ if("world_topic_spam_protect_ip")
+ global.world_topic_spam_protect_ip=newval;
+ if("world_topic_spam_protect_time")
+ global.world_topic_spam_protect_time=newval;
+ if("world_uplinks")
+ global.world_uplinks=newval;
+ if("worths")
+ global.worths=newval;
+ if("xenomorphs")
+ global.xenomorphs=newval;
+ if("z_levels")
+ global.z_levels=newval;
+ if("zone_blocked")
+ global.zone_blocked=newval;
+
+/var/list/_all_globals=list(
+ "ALL_ANTIGENS",
+ "ANTAG_FREQS",
+ "BSACooldown",
+ "BUMP_TELEPORTERS",
+ "Banlist",
+ "CENT_FREQS",
+ "CMinutes",
+ "DEPT_FREQS",
+ "Debug2",
+ "Failsafe",
+ "GLOB",
+ "Holiday",
+ "IClog",
+ "LIGHTING_CORNER_DIAGONAL",
+ "Master",
+ "OOClog",
+ "PDAs",
+ "SKILLS",
+ "SSair",
+ "SSairflow",
+ "SSatoms",
+ "SSfastprocess",
+ "SSgarbage",
+ "SSlegacy",
+ "SSmachines",
+ "SSmapping",
+ "SSmobs",
+ "SSobj",
+ "SSopen_space",
+ "SSprocessing",
+ "SSskybox",
+ "SSsun",
+ "SStimer",
+ "SSvines",
+ "SSwireless",
+ "Tier1Runes",
+ "Tier2Runes",
+ "Tier3Runes",
+ "Tier4Runes",
+ "WALLITEMS",
+ "_all_globals",
+ "_client_preferences",
+ "_client_preferences_by_key",
+ "_client_preferences_by_type",
+ "account_hack_attempted",
+ "actor",
+ "additional_antag_types",
+ "admin_datums",
+ "admin_pm_repository",
+ "admin_ranks",
+ "admin_secrets",
+ "admin_verbs_admin",
+ "admin_verbs_ban",
+ "admin_verbs_debug",
+ "admin_verbs_default",
+ "admin_verbs_fun",
+ "admin_verbs_hideable",
+ "admin_verbs_mentor",
+ "admin_verbs_mod",
+ "admin_verbs_paranoid_debug",
+ "admin_verbs_permissions",
+ "admin_verbs_possess",
+ "admin_verbs_rejuv",
+ "admin_verbs_server",
+ "admin_verbs_sounds",
+ "admin_verbs_spawn",
+ "adminhelp_ignored_words",
+ "adminlog",
+ "ai_list",
+ "ai_status_emotions",
+ "ai_verbs_default",
+ "air_alarm_topic",
+ "air_blocked",
+ "air_processing_killed",
+ "alarm_manager",
+ "alien_whitelist",
+ "allCasters",
+ "allConsoles",
+ "all_antag_spawnpoints_",
+ "all_antag_types_",
+ "all_grabobjects",
+ "all_grabstates",
+ "all_languages",
+ "all_money_accounts",
+ "all_objectives",
+ "all_robolimbs",
+ "all_species",
+ "all_ui_styles",
+ "all_unit_tests_passed",
+ "all_virtual_listeners",
+ "announced_news_types",
+ "antag_add_finished",
+ "antag_names_to_ids_",
+ "appearance_manager",
+ "area_repository",
+ "artefact_feedback",
+ "ascii_esc",
+ "ascii_green",
+ "ascii_red",
+ "ascii_reset",
+ "ascii_yellow",
+ "asset_cache",
+ "asset_datums",
+ "assigned",
+ "assigned_blocks",
+ "atmosphere_alarm",
+ "attack_log_repository",
+ "autolathe_categories",
+ "autolathe_recipes",
+ "base_miss_chance",
+ "basic_robolimb",
+ "blackbox",
+ "blocked",
+ "bomb_set",
+ "borers",
+ "cable_list",
+ "cached_icons",
+ "cached_space",
+ "camera_alarm",
+ "camera_range_display_status",
+ "camera_repository",
+ "cameranet",
+ "can_call_ert",
+ "captain_announcement",
+ "cargo_supply_pack_root",
+ "cargo_supply_packs",
+ "changelog_hash",
+ "channel_to_radio_key",
+ "chargen_robolimbs",
+ "checked_for_inactives",
+ "chemical_reaction_logs",
+ "chemical_reactions_list",
+ "chemical_produce_list",
+ "chicken_count",
+ "church_name",
+ "client_preference_stats_",
+ "client_repository",
+ "combatlog",
+ "comm_message_listeners",
+ "command_announcement",
+ "command_name",
+ "commandos",
+ "common_tools",
+ "config",
+ "contamination_overlay",
+ "controller_iteration",
+ "create_mob_html",
+ "create_object_html",
+ "create_turf_html",
+ "created",
+ "crew_repository",
+ "csrfz_check",
+ "cult",
+ "currently_running_tests",
+ "custom_event_msg",
+ "custom_items",
+ "damage_icon_parts",
+ "dbcon",
+ "dbcon_old",
+ "deathsquad",
+ "debug_verbs",
+ "decls_repository",
+ "default_material_composition",
+ "default_mobloc",
+ "default_onmob_icons",
+ "default_pai_software",
+ "defer_powernet_rebuild",
+ "deity",
+ "delta_index",
+ "department_accounts",
+ "department_radio_keys",
+ "description_icons",
+ "diary",
+ "dna_activity_bounds",
+ "dna_genes",
+ "doppler_arrays",
+ "dreams",
+ "dummy_lighting_corner",
+ "economic_species_modifier",
+ "empty_playable_ai_cores",
+ "endgame_exits",
+ "endgame_safespawns",
+ "ert",
+ "ert_base_chance",
+ "escape_pods",
+ "escape_pods_by_name",
+ "evacuation_controller",
+ "event_last_fired",
+ "eventchance",
+ "exclude_jobs",
+ "explosion_in_progress",
+ "explosion_turfs",
+ "failed_db_connections",
+ "failed_old_db_connections",
+ "failed_unit_tests",
+ "file_uid",
+ "fileaccess_timer",
+ "finds_as_strings",
+ "fire_alarm",
+ "flesh_hud_colours",
+ "floorIsLava",
+ "floor_decals",
+ "floor_light_cache",
+ "flooring_cache",
+ "flooring_types",
+ "fluidtrack_cache",
+ "follow_repository",
+ "forced_ambiance_list",
+ "fruit_icon_cache",
+ "fuel_injectors",
+ "fusion_cores",
+ "fusion_reactions",
+ "game_id",
+ "game_version",
+ "game_year",
+ "gamemode_cache",
+ "gas_data",
+ "gear_datums",
+ "gear_tweak_free_color_choice_",
+ "gender_datums",
+ "ghost_darkness_images",
+ "ghost_sightless_images",
+ "ghost_traps",
+ "global_message_listener",
+ "global_vars_",
+ "godcult",
+ "gravity_is_on",
+ "gyrotrons",
+ "gzn_check",
+ "hadevent",
+ "hazard_overlays",
+ "hidden_skill_types",
+ "hivemind_bank",
+ "holder_mob_icon_cache",
+ "host",
+ "href_logfile",
+ "human_icon_cache",
+ "id_card_states",
+ "image_repository",
+ "inactive_keys",
+ "init",
+ "initialization_stage",
+ "integrated_circuit_blacklist",
+ "intents",
+ "intercom_range_display_status",
+ "invalid_zone",
+ "jobMax",
+ "job_master",
+ "jobban_keylist",
+ "jobban_runonce",
+ "joblist",
+ "join_motd",
+ "landmarks_list",
+ "language_keys",
+ "last_chew",
+ "last_message_id",
+ "last_round_duration",
+ "last_tick_duration",
+ "license_to_url",
+ "light_overlay_cache",
+ "lighting_overlays_initialised",
+ "lighting_update_corners",
+ "lighting_update_corners_old",
+ "lighting_update_lights",
+ "lighting_update_lights_old",
+ "lighting_update_overlays",
+ "lighting_update_overlays_old",
+ "limb_icon_cache",
+ "loadout_categories",
+ "lobby_image",
+ "log_end",
+ "loyalists",
+ "lunchables_drink_reagents_",
+ "lunchables_drinks_",
+ "lunchables_ethanol_reagents_",
+ "lunchables_lunches_",
+ "lunchables_snacks_",
+ "magazine_icondata_keys",
+ "magazine_icondata_states",
+ "maint_all_access",
+ "malf",
+ "mannequins_",
+ "map_count",
+ "map_sectors",
+ "maploader",
+ "mark",
+ "master_controller",
+ "master_mode",
+ "matchmaker",
+ "maze_cell_count",
+ "mechas_list",
+ "mechtoys",
+ "mercs",
+ "merged",
+ "message_delay",
+ "message_servers",
+ "meteors_armageddon",
+ "meteors_cataclysm",
+ "meteors_catastrophic",
+ "meteors_dust",
+ "meteors_major",
+ "meteors_minor",
+ "meteors_moderate",
+ "meteors_normal",
+ "meteors_threatening",
+ "mil_branches",
+ "mining_floors",
+ "mining_walls",
+ "minor_air_alarms",
+ "minor_announcement",
+ "mob_hat_cache",
+ "mob_repository",
+ "motion_alarm",
+ "moving_levels",
+ "multi_point_spawns",
+ "name_to_material",
+ "narsie_behaviour",
+ "narsie_cometh",
+ "narsie_list",
+ "navbeacons",
+ "news_network",
+ "newscaster_standard_feeds",
+ "next_account_number",
+ "next_duration_update",
+ "next_station_date_change",
+ "not_incapacitated_turf_state",
+ "ntnet_card_uid",
+ "ntnet_global",
+ "ntnrc_uid",
+ "nttransfer_uid",
+ "nuke_disks",
+ "num_financial_terminals",
+ "ore_data",
+ "ores_by_type",
+ "organ_cache",
+ "organ_rel_size",
+ "outfits_decls_",
+ "outfits_decls_by_type_",
+ "outfits_decls_root_",
+ "overmap_event_handler",
+ "paiController",
+ "pai_emotions",
+ "pai_software_by_key",
+ "paramslist_cache",
+ "photo_count",
+ "pipe_colors",
+ "pipe_processing_killed",
+ "plant_controller",
+ "plant_seed_sprites",
+ "playable_species",
+ "point_source_descriptions",
+ "possible_cable_coil_colours",
+ "possible_changeling_IDs",
+ "poster_designs",
+ "power_alarm",
+ "powerinstances",
+ "powers",
+ "preferences_datums",
+ "priority_air_alarms",
+ "priority_announcement",
+ "priv_all_access",
+ "priv_all_access_datums",
+ "priv_all_access_datums_id",
+ "priv_all_access_datums_region",
+ "priv_centcom_access",
+ "priv_region_access",
+ "priv_station_access",
+ "priv_syndicate_access",
+ "processScheduler",
+ "processing_turfs",
+ "prometheans",
+ "protected_objects",
+ "rad_collectors",
+ "radiation_repository",
+ "radio_controller",
+ "radiochannels",
+ "raiders",
+ "random_junk_",
+ "random_maps",
+ "random_useful_",
+ "recentmessages",
+ "registered_macros_by_ckey_",
+ "religion_name",
+ "renegades",
+ "req_console_assistance",
+ "req_console_information",
+ "req_console_supplies",
+ "responsive_carriers",
+ "restricted_camera_networks",
+ "revdata",
+ "revs",
+ "robot_custom_icons",
+ "robot_hud_colours",
+ "robot_inventory",
+ "robot_modules",
+ "round_progressing",
+ "round_start_time",
+ "roundstart_hour",
+ "rune_list",
+ "runtime_diary",
+ "same_wires",
+ "secondary_mode",
+ "secret_force_mode",
+ "send_emergency_team",
+ "sent_spiders_to_station",
+ "server_name",
+ "severity_to_string",
+ "ship_engines",
+ "shuttle_controller",
+ "side_effects",
+ "skin_styles_female_list",
+ "skipped_unit_tests",
+ "slot_equipment_priority",
+ "slot_flags_enumeration",
+ "solar_gen_rate",
+ "solars_list",
+ "sortInstance",
+ "sound_player",
+ "sounds_cache",
+ "spacevines_spawned",
+ "sparring_attack_cache",
+ "spells",
+ "splatter_cache",
+ "sqladdress",
+ "sqldb",
+ "sqlfdbkdb",
+ "sqlfdbklogin",
+ "sqlfdbkpass",
+ "sqllogging",
+ "sqllogin",
+ "sqlpass",
+ "sqlport",
+ "station_account",
+ "station_date",
+ "stool_cache",
+ "stored_shock_by_ref",
+ "string_part_flags",
+ "string_slot_flags",
+ "supply_controller",
+ "supply_drop",
+ "supply_methods_",
+ "surgery_steps",
+ "swapmaps_byname",
+ "swapmaps_compiled_maxx",
+ "swapmaps_compiled_maxy",
+ "swapmaps_compiled_maxz",
+ "swapmaps_iconcache",
+ "swapmaps_initialized",
+ "swapmaps_loaded",
+ "swapmaps_mode",
+ "syndicate_access",
+ "syndicate_code_phrase",
+ "syndicate_code_response",
+ "syndicate_name",
+ "tail_icon_cache",
+ "tank_gauge_cache",
+ "tape_roll_applications",
+ "telecomms_list",
+ "tertiary_mode",
+ "text_tag_icons",
+ "tg_admin_state",
+ "tg_always_state",
+ "tg_conscious_state",
+ "tg_contained_state",
+ "tg_deep_inventory_state",
+ "tg_default_state",
+ "tg_hands_state",
+ "tg_human_adjacent_state",
+ "tg_inventory_state",
+ "tg_not_contained_state",
+ "tg_not_incapacitated_state",
+ "tg_physical_state",
+ "tg_self_state",
+ "tg_z_state",
+ "tgui_process",
+ "ticker",
+ "tickerProcess",
+ "ticket_panels",
+ "tickets",
+ "total_lighting_corners",
+ "total_lighting_overlays",
+ "total_lighting_sources",
+ "total_unit_tests",
+ "traitors",
+ "transfer_controller",
+ "turbolift_controller",
+ "turbolifts",
+ "turret_icons",
+ "uniqueness_repository",
+ "universe_has_ended",
+ "uplink",
+ "uplink_purchase_repository",
+ "uplink_random_selections_",
+ "valid_bloodtypes",
+ "vendor_account",
+ "ventcrawl_machinery",
+ "view_variables_dont_expand",
+ "view_variables_no_assoc",
+ "virusDB",
+ "visual_nets",
+ "vote",
+ "vsc",
+ "wax_recipes",
+ "weighted_mundaneevent_locations",
+ "weighted_randomevent_locations",
+ "whitelist",
+ "whitelisted_species",
+ "wireColours",
+ "wizards",
+ "world_topic_spam_protect_ip",
+ "world_topic_spam_protect_time",
+ "world_uplinks",
+ "worths",
+ "wrapped_species_by_ref",
+ "xenomorphs",
+ "z_levels",
+ "zone_blocked")
diff --git a/code/_helpers/global_lists.dm b/code/_helpers/global_lists.dm
new file mode 100644
index 00000000..71142c1a
--- /dev/null
+++ b/code/_helpers/global_lists.dm
@@ -0,0 +1,250 @@
+//Since it didn't really belong in any other category, I'm putting this here
+//This is for procs to replace all the goddamn 'in world's that are chilling around the code
+
+var/global/list/cable_list = list() //Index for all cables, so that powernets don't have to look through the entire world all the time
+var/global/list/chemical_reactions_list //list of all /datum/chemical_reaction datums. Used during chemical reactions
+var/global/list/chemical_produce_list //list of all /datum/chemical_reaction datums, by produce. used for recipe lookup
+var/global/list/landmarks_list = list() //list of all landmarks created
+var/global/list/surgery_steps = list() //list of all surgery steps |BS12
+var/global/list/side_effects = list() //list of all medical sideeffects types by thier names |BS12
+var/global/list/mechas_list = list() //list of all mechs. Used by hostile mobs target tracking.
+var/global/list/joblist = list() //list of all jobstypes, minus borg and AI
+
+#define all_genders_define_list list(MALE,FEMALE,PLURAL,NEUTER)
+#define all_genders_text_list list("Male","Female","Plural","Neuter")
+
+//Languages/species/whitelist.
+var/global/list/all_species[0]
+var/global/list/all_languages[0]
+var/global/list/language_keys[0] // Table of say codes for all languages
+var/global/list/whitelisted_species = list(SPECIES_HUMAN) // Species that require a whitelist check.
+var/global/list/playable_species = list(SPECIES_HUMAN) // A list of ALL playable species, whitelisted, latejoin or otherwise.
+
+var/list/mannequins_
+
+// Posters
+var/global/list/poster_designs = list()
+
+// Grabs
+var/global/list/all_grabstates[0]
+var/global/list/all_grabobjects[0]
+
+// Uplinks
+var/list/obj/item/device/uplink/world_uplinks = list()
+
+//Preferences stuff
+//Hairstyles
+GLOBAL_LIST_EMPTY(hair_styles_list) //stores /datum/sprite_accessory/hair indexed by name
+GLOBAL_LIST_EMPTY(facial_hair_styles_list) //stores /datum/sprite_accessory/facial_hair indexed by name
+
+var/global/list/skin_styles_female_list = list() //unused
+GLOBAL_LIST_EMPTY(body_marking_styles_list) //stores /datum/sprite_accessory/marking indexed by name
+
+GLOBAL_DATUM_INIT(underwear, /datum/category_collection/underwear, new())
+
+var/global/list/exclude_jobs = list(/datum/job/ai,/datum/job/cyborg)
+
+// Visual nets
+var/list/datum/visualnet/visual_nets = list()
+var/datum/visualnet/camera/cameranet = new()
+
+// Runes
+var/global/list/rune_list = new()
+var/global/list/endgame_exits = list()
+var/global/list/endgame_safespawns = list()
+
+var/global/list/syndicate_access = list(access_maint_tunnels, access_syndicate, access_external_airlocks)
+
+//Crafting
+var/global/list/crafting_recipes = list()
+
+
+// Strings which corraspond to bodypart covering flags, useful for outputting what something covers.
+var/global/list/string_part_flags = list(
+ "head" = HEAD,
+ "face" = FACE,
+ "eyes" = EYES,
+ "upper body" = UPPER_TORSO,
+ "lower body" = LOWER_TORSO,
+ "legs" = LEGS,
+ "feet" = FEET,
+ "arms" = ARMS,
+ "hands" = HANDS
+)
+
+// Strings which corraspond to slot flags, useful for outputting what slot something is.
+var/global/list/string_slot_flags = list(
+ "back" = SLOT_BACK,
+ "face" = SLOT_MASK,
+ "waist" = SLOT_BELT,
+ "ID slot" = SLOT_ID,
+ "ears" = SLOT_EARS,
+ "eyes" = SLOT_EYES,
+ "hands" = SLOT_GLOVES,
+ "head" = SLOT_HEAD,
+ "feet" = SLOT_FEET,
+ "exo slot" = SLOT_OCLOTHING,
+ "body" = SLOT_ICLOTHING,
+ "neck" = SLOT_TIE,
+ "back2" = SLOT_S_STORE,
+ "holster" = SLOT_HOLSTER
+)
+
+//////////////////////////
+/////Initial Building/////
+//////////////////////////
+
+/hook/global_init/proc/populateGlobalLists()
+ possible_cable_coil_colours = sortAssoc(list(
+ "Yellow" = COLOR_YELLOW,
+ "Green" = COLOR_LIME,
+ "Pink" = COLOR_PINK,
+ "Blue" = COLOR_BLUE,
+ "Orange" = COLOR_ORANGE,
+ "Cyan" = COLOR_CYAN,
+ "Red" = COLOR_RED,
+ "White" = COLOR_WHITE
+ ))
+ return 1
+
+/proc/get_mannequin(var/ckey)
+ if(!mannequins_)
+ mannequins_ = new()
+ . = mannequins_[ckey]
+ if(!.)
+ . = new/mob/living/carbon/human/dummy/mannequin()
+ mannequins_[ckey] = .
+
+/hook/global_init/proc/makeDatumRefLists()
+ var/list/paths
+
+ //Hair - Initialise all /datum/sprite_accessory/hair into an list indexed by hair-style name
+ paths = typesof(/datum/sprite_accessory/hair) - /datum/sprite_accessory/hair
+ for(var/path in paths)
+ var/datum/sprite_accessory/hair/H = new path()
+ GLOB.hair_styles_list[H.name] = H
+
+ //Facial Hair - Initialise all /datum/sprite_accessory/facial_hair into an list indexed by facialhair-style name
+ paths = typesof(/datum/sprite_accessory/facial_hair) - /datum/sprite_accessory/facial_hair
+ for(var/path in paths)
+ var/datum/sprite_accessory/facial_hair/H = new path()
+ GLOB.facial_hair_styles_list[H.name] = H
+
+ //Body markings - Initialise all /datum/sprite_accessory/marking into an list indexed by marking name
+ paths = typesof(/datum/sprite_accessory/marking) - /datum/sprite_accessory/marking
+ for(var/path in paths)
+ var/datum/sprite_accessory/marking/M = new path()
+ GLOB.body_marking_styles_list[M.name] = M
+
+ //Surgery Steps - Initialize all /datum/surgery_step into a list
+ paths = typesof(/datum/surgery_step)-/datum/surgery_step
+ for(var/T in paths)
+ var/datum/surgery_step/S = new T
+ surgery_steps += S
+ sort_surgeries()
+
+ //List of job. I can't believe this was calculated multiple times per tick!
+ paths = typesof(/datum/job)-/datum/job
+ paths -= exclude_jobs
+ for(var/T in paths)
+ var/datum/job/J = new T
+ joblist[J.title] = J
+
+ //Languages and species.
+ paths = typesof(/datum/language)-/datum/language
+ for(var/T in paths)
+ var/datum/language/L = new T
+ all_languages[L.name] = L
+
+ for (var/language_name in all_languages)
+ var/datum/language/L = all_languages[language_name]
+ if(!(L.flags & NONGLOBAL))
+ language_keys[lowertext(L.key)] = L
+
+ var/rkey = 0
+ paths = typesof(/datum/species)
+ for(var/T in paths)
+
+ rkey++
+
+ var/datum/species/S = T
+ if(!initial(S.name))
+ continue
+
+ S = new T
+ S.race_key = rkey //Used in mob icon caching.
+ all_species[S.name] = S
+
+ if(!(S.spawn_flags & SPECIES_IS_RESTRICTED))
+ playable_species += S.name
+ if(S.spawn_flags & SPECIES_IS_WHITELISTED)
+ whitelisted_species += S.name
+
+ //Posters
+ paths = typesof(/datum/poster) - /datum/poster
+ for(var/T in paths)
+ var/datum/poster/P = new T
+ poster_designs += P
+
+
+ paths = typesof(/datum/crafting_recipe) - /datum/crafting_recipe
+ for(var/T in paths)
+ var/datum/crafting_recipe/R = new T
+ crafting_recipes[R.name] = R
+
+
+ //Grabs
+ paths = typesof(/datum/grab) - /datum/grab
+ for(var/T in paths)
+ var/datum/grab/G = new T
+ if(G.state_name)
+ all_grabstates[G.state_name] = G
+
+ paths = typesof(/obj/item/grab) - /obj/item/grab
+ for(var/T in paths)
+ var/obj/item/grab/G = T
+ all_grabobjects[initial(G.type_name)] = T
+
+ for(var/grabstate_name in all_grabstates)
+ var/datum/grab/G = all_grabstates[grabstate_name]
+ G.refresh_updown()
+
+ return 1
+
+/* // Uncomment to debug chemical reaction list.
+/client/verb/debug_chemical_list()
+
+ for (var/reaction in chemical_reactions_list)
+ . += "chemical_reactions_list\[\"[reaction]\"\] = \"[chemical_reactions_list[reaction]]\"\n"
+ if(islist(chemical_reactions_list[reaction]))
+ var/list/L = chemical_reactions_list[reaction]
+ for(var/t in L)
+ . += " has: [t]\n"
+ log_debug(.)
+
+*/
+
+//*** params cache
+
+var/global/list/paramslist_cache = list()
+
+#define cached_key_number_decode(key_number_data) cached_params_decode(key_number_data, /proc/key_number_decode)
+#define cached_number_list_decode(number_list_data) cached_params_decode(number_list_data, /proc/number_list_decode)
+
+/proc/cached_params_decode(var/params_data, var/decode_proc)
+ . = paramslist_cache[params_data]
+ if(!.)
+ . = call(decode_proc)(params_data)
+ paramslist_cache[params_data] = .
+
+/proc/key_number_decode(var/key_number_data)
+ var/list/L = params2list(key_number_data)
+ for(var/key in L)
+ L[key] = text2num(L[key])
+ return L
+
+/proc/number_list_decode(var/number_list_data)
+ var/list/L = params2list(number_list_data)
+ for(var/i in 1 to L.len)
+ L[i] = text2num(L[i])
+ return L
diff --git a/code/_helpers/icons.dm b/code/_helpers/icons.dm
new file mode 100644
index 00000000..a231a6ae
--- /dev/null
+++ b/code/_helpers/icons.dm
@@ -0,0 +1,923 @@
+/*
+IconProcs README
+
+A BYOND library for manipulating icons and colors
+
+by Lummox JR
+
+version 1.0
+
+The IconProcs library was made to make a lot of common icon operations much easier. BYOND's icon manipulation
+routines are very capable but some of the advanced capabilities like using alpha transparency can be unintuitive to beginners.
+
+CHANGING ICONS
+
+Several new procs have been added to the /icon datum to simplify working with icons. To use them,
+remember you first need to setup an /icon var like so:
+
+var/icon/my_icon = new('iconfile.dmi')
+
+icon/ChangeOpacity(amount = 1)
+ A very common operation in DM is to try to make an icon more or less transparent. Making an icon more
+ transparent is usually much easier than making it less so, however. This proc basically is a frontend
+ for MapColors() which can change opacity any way you like, in much the same way that SetIntensity()
+ can make an icon lighter or darker. If amount is 0.5, the opacity of the icon will be cut in half.
+ If amount is 2, opacity is doubled and anything more than half-opaque will become fully opaque.
+icon/GrayScale()
+ Converts the icon to grayscale instead of a fully colored icon. Alpha values are left intact.
+icon/ColorTone(tone)
+ Similar to GrayScale(), this proc converts the icon to a range of black -> tone -> white, where tone is an
+ RGB color (its alpha is ignored). This can be used to create a sepia tone or similar effect.
+ See also the global ColorTone() proc.
+icon/MinColors(icon)
+ The icon is blended with a second icon where the minimum of each RGB pixel is the result.
+ Transparency may increase, as if the icons were blended with ICON_ADD. You may supply a color in place of an icon.
+icon/MaxColors(icon)
+ The icon is blended with a second icon where the maximum of each RGB pixel is the result.
+ Opacity may increase, as if the icons were blended with ICON_OR. You may supply a color in place of an icon.
+icon/Opaque(background = "#000000")
+ All alpha values are set to 255 throughout the icon. Transparent pixels become black, or whatever background color you specify.
+icon/BecomeAlphaMask()
+ You can convert a simple grayscale icon into an alpha mask to use with other icons very easily with this proc.
+ The black parts become transparent, the white parts stay white, and anything in between becomes a translucent shade of white.
+icon/AddAlphaMask(mask)
+ The alpha values of the mask icon will be blended with the current icon. Anywhere the mask is opaque,
+ the current icon is untouched. Anywhere the mask is transparent, the current icon becomes transparent.
+ Where the mask is translucent, the current icon becomes more transparent.
+icon/UseAlphaMask(mask, mode)
+ Sometimes you may want to take the alpha values from one icon and use them on a different icon.
+ This proc will do that. Just supply the icon whose alpha mask you want to use, and src will change
+ so it has the same colors as before but uses the mask for opacity.
+
+COLOR MANAGEMENT AND HSV
+
+RGB isn't the only way to represent color. Sometimes it's more useful to work with a model called HSV, which stands for hue, saturation, and value.
+
+ * The hue of a color describes where it is along the color wheel. It goes from red to yellow to green to
+ cyan to blue to magenta and back to red.
+ * The saturation of a color is how much color is in it. A color with low saturation will be more gray,
+ and with no saturation at all it is a shade of gray.
+ * The value of a color determines how bright it is. A high-value color is vivid, moderate value is dark,
+ and no value at all is black.
+
+Just as BYOND uses "#rrggbb" to represent RGB values, a similar format is used for HSV: "#hhhssvv". The hue is three
+hex digits because it ranges from 0 to 0x5FF.
+
+ * 0 to 0xFF - red to yellow
+ * 0x100 to 0x1FF - yellow to green
+ * 0x200 to 0x2FF - green to cyan
+ * 0x300 to 0x3FF - cyan to blue
+ * 0x400 to 0x4FF - blue to magenta
+ * 0x500 to 0x5FF - magenta to red
+
+Knowing this, you can figure out that red is "#000ffff" in HSV format, which is hue 0 (red), saturation 255 (as colorful as possible),
+value 255 (as bright as possible). Green is "#200ffff" and blue is "#400ffff".
+
+More than one HSV color can match the same RGB color.
+
+Here are some procs you can use for color management:
+
+ReadRGB(rgb)
+ Takes an RGB string like "#ffaa55" and converts it to a list such as list(255,170,85). If an RGBA format is used
+ that includes alpha, the list will have a fourth item for the alpha value.
+hsv(hue, sat, val, apha)
+ Counterpart to rgb(), this takes the values you input and converts them to a string in "#hhhssvv" or "#hhhssvvaa"
+ format. Alpha is not included in the result if null.
+ReadHSV(rgb)
+ Takes an HSV string like "#100ff80" and converts it to a list such as list(256,255,128). If an HSVA format is used that
+ includes alpha, the list will have a fourth item for the alpha value.
+RGBtoHSV(rgb)
+ Takes an RGB or RGBA string like "#ffaa55" and converts it into an HSV or HSVA color such as "#080aaff".
+HSVtoRGB(hsv)
+ Takes an HSV or HSVA string like "#080aaff" and converts it into an RGB or RGBA color such as "#ff55aa".
+BlendRGB(rgb1, rgb2, amount)
+ Blends between two RGB or RGBA colors using regular RGB blending. If amount is 0, the first color is the result;
+ if 1, the second color is the result. 0.5 produces an average of the two. Values outside the 0 to 1 range are allowed as well.
+ The returned value is an RGB or RGBA color.
+BlendHSV(hsv1, hsv2, amount)
+ Blends between two HSV or HSVA colors using HSV blending, which tends to produce nicer results than regular RGB
+ blending because the brightness of the color is left intact. If amount is 0, the first color is the result; if 1,
+ the second color is the result. 0.5 produces an average of the two. Values outside the 0 to 1 range are allowed as well.
+ The returned value is an HSV or HSVA color.
+BlendRGBasHSV(rgb1, rgb2, amount)
+ Like BlendHSV(), but the colors used and the return value are RGB or RGBA colors. The blending is done in HSV form.
+HueToAngle(hue)
+ Converts a hue to an angle range of 0 to 360. Angle 0 is red, 120 is green, and 240 is blue.
+AngleToHue(hue)
+ Converts an angle to a hue in the valid range.
+RotateHue(hsv, angle)
+ Takes an HSV or HSVA value and rotates the hue forward through red, green, and blue by an angle from 0 to 360.
+ (Rotating red by 60° produces yellow.) The result is another HSV or HSVA color with the same saturation and value
+ as the original, but a different hue.
+GrayScale(rgb)
+ Takes an RGB or RGBA color and converts it to grayscale. Returns an RGB or RGBA string.
+ColorTone(rgb, tone)
+ Similar to GrayScale(), this proc converts an RGB or RGBA color to a range of black -> tone -> white instead of
+ using strict shades of gray. The tone value is an RGB color; any alpha value is ignored.
+*/
+
+/*
+Get Flat Icon DEMO by DarkCampainger
+
+This is a test for the get flat icon proc, modified approprietly for icons and their states.
+Probably not a good idea to run this unless you want to see how the proc works in detail.
+mob
+ icon = 'old_or_unused.dmi'
+ icon_state = "green"
+
+ Login()
+ // Testing image underlays
+ underlays += image(icon='old_or_unused.dmi',icon_state="red")
+ underlays += image(icon='old_or_unused.dmi',icon_state="red", pixel_x = 32)
+ underlays += image(icon='old_or_unused.dmi',icon_state="red", pixel_x = -32)
+
+ // Testing image overlays
+ overlays += image(icon='old_or_unused.dmi',icon_state="green", pixel_x = 32, pixel_y = -32)
+ overlays += image(icon='old_or_unused.dmi',icon_state="green", pixel_x = 32, pixel_y = 32)
+ overlays += image(icon='old_or_unused.dmi',icon_state="green", pixel_x = -32, pixel_y = -32)
+
+ // Testing icon file overlays (defaults to mob's state)
+ overlays += '_flat_demoIcons2.dmi'
+
+ // Testing icon_state overlays (defaults to mob's icon)
+ overlays += "white"
+
+ // Testing dynamic icon overlays
+ var/icon/I = icon('old_or_unused.dmi', icon_state="aqua")
+ I.Shift(NORTH,16,1)
+ overlays+=I
+
+ // Testing dynamic image overlays
+ I=image(icon=I,pixel_x = -32, pixel_y = 32)
+ overlays+=I
+
+ // Testing object types (and layers)
+ overlays+=/obj/effect/overlayTest
+
+ loc = locate (10,10,1)
+ verb
+ Browse_Icon()
+ set name = "1. Browse Icon"
+ // Give it a name for the cache
+ var/iconName = "[ckey(src.name)]_flattened.dmi"
+ // Send the icon to src's local cache
+ src<