diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index f204eb0a72..f9a4055342 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -27,6 +27,11 @@ refactor: refactored some code
config: changed some config setting
admin: messed with admin stuff
server: something server ops should know
+wip: still being worked on
+experiment: experimental
+tgs: has something to do with tgs
+expansion: expands on something
+qol: quality of life content
/:cl:
diff --git a/.github/workflows/compile_changelogs.yml b/.github/workflows/compile_changelogs.yml
index 0c6974a1d1..fc2f436986 100644
--- a/.github/workflows/compile_changelogs.yml
+++ b/.github/workflows/compile_changelogs.yml
@@ -43,6 +43,7 @@ jobs:
git config --local user.email "action@github.com"
git config --local user.name "Changelogs"
git pull origin master
+ git add html/changelogs
git commit -m "Automatic changelog compile [ci skip]" -a || true
- name: "Push"
if: steps.value_holder.outputs.CL_ENABLED
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_random_ripley.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_random_ripley.dmm
index e1097d3f68..0ca8a35149 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_random_ripley.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_random_ripley.dmm
@@ -9,7 +9,7 @@
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
"d" = (
-/obj/mecha/working/ripley/mining,
+/obj/vehicle/sealed/mecha/working/ripley/mining,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
"e" = (
diff --git a/_maps/RandomRuins/SpaceRuins/deepstorage.dmm b/_maps/RandomRuins/SpaceRuins/deepstorage.dmm
index 5b246e57db..ea821570bd 100644
--- a/_maps/RandomRuins/SpaceRuins/deepstorage.dmm
+++ b/_maps/RandomRuins/SpaceRuins/deepstorage.dmm
@@ -49,7 +49,6 @@
/area/ruin/space/has_grav/deepstorage/crusher)
"an" = (
/obj/machinery/conveyor{
- dir = 2;
id = "bunkerrecycle"
},
/turf/open/floor/plating,
@@ -142,7 +141,6 @@
icon_state = "0-8"
},
/obj/machinery/power/apc{
- dir = 2;
name = "Recycling APC";
pixel_y = -23
},
@@ -694,7 +692,6 @@
icon_state = "0-8"
},
/obj/machinery/power/apc{
- dir = 2;
name = "Kitchen APC";
pixel_y = -23
},
@@ -1762,7 +1759,6 @@
},
/obj/structure/cable/yellow,
/obj/machinery/power/apc{
- dir = 2;
name = "Main Area APC";
pixel_y = -23
},
@@ -2682,6 +2678,7 @@
/area/ruin/space/has_grav/deepstorage)
"fU" = (
/obj/machinery/camera{
+ c_tag = "Deep Storage - Entry";
network = list("bunker1")
},
/obj/structure/sign/warning/securearea{
diff --git a/_maps/RandomRuins/SpaceRuins/mechtransport.dmm b/_maps/RandomRuins/SpaceRuins/mechtransport.dmm
index a9beb9540e..dbe8722b83 100644
--- a/_maps/RandomRuins/SpaceRuins/mechtransport.dmm
+++ b/_maps/RandomRuins/SpaceRuins/mechtransport.dmm
@@ -102,7 +102,7 @@
/turf/open/floor/mineral/titanium/yellow/airless,
/area/ruin/space/has_grav/powered/mechtransport)
"A" = (
-/obj/mecha/working/ripley,
+/obj/vehicle/sealed/mecha/working/ripley,
/turf/open/floor/mineral/titanium/yellow/airless,
/area/ruin/space/has_grav/powered/mechtransport)
"B" = (
diff --git a/_maps/RandomZLevels/VR/snowdin_VR.dmm b/_maps/RandomZLevels/VR/snowdin_VR.dmm
index c0977f00f0..d1e3373633 100644
--- a/_maps/RandomZLevels/VR/snowdin_VR.dmm
+++ b/_maps/RandomZLevels/VR/snowdin_VR.dmm
@@ -14451,7 +14451,7 @@
/turf/open/floor/plasteel/dark,
/area/awaymission/snowdin/post/mining_main/mechbay)
"In" = (
-/obj/mecha/working/ripley/mining{
+/obj/vehicle/sealed/mecha/working/ripley/mining{
dir = 1;
icon_state = "ripley"
},
diff --git a/_maps/RandomZLevels/away_mission/caves.dmm b/_maps/RandomZLevels/away_mission/caves.dmm
index ed246ff8b5..e33659fbdd 100644
--- a/_maps/RandomZLevels/away_mission/caves.dmm
+++ b/_maps/RandomZLevels/away_mission/caves.dmm
@@ -2039,7 +2039,7 @@
},
/area/awaymission/caves/BMP_asteroid)
"gC" = (
-/obj/mecha/working/ripley/mining,
+/obj/vehicle/sealed/mecha/working/ripley/mining,
/turf/open/floor/plasteel/recharge_floor,
/area/awaymission/caves/BMP_asteroid)
"gD" = (
diff --git a/_maps/RandomZLevels/away_mission/snowdin.dmm b/_maps/RandomZLevels/away_mission/snowdin.dmm
index aa4dd61154..dae17bd259 100644
--- a/_maps/RandomZLevels/away_mission/snowdin.dmm
+++ b/_maps/RandomZLevels/away_mission/snowdin.dmm
@@ -14452,7 +14452,7 @@
/turf/open/floor/plasteel/dark,
/area/awaymission/snowdin/post/mining_main/mechbay)
"In" = (
-/obj/mecha/working/ripley/mining{
+/obj/vehicle/sealed/mecha/working/ripley/mining{
dir = 1
},
/obj/effect/turf_decal/bot,
diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm
index 491f9f8b75..8fbb97bbdd 100644
--- a/_maps/map_files/BoxStation/BoxStation.dmm
+++ b/_maps/map_files/BoxStation/BoxStation.dmm
@@ -463,8 +463,8 @@
/turf/closed/wall,
/area/security/execution/transfer)
"abd" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 1
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 6
},
/turf/closed/wall,
/area/security/execution/transfer)
@@ -4655,7 +4655,7 @@
pixel_x = -32
},
/turf/open/floor/plasteel/white,
-/area/medical/medbay/lobby)
+/area/medical/medbay/central)
"aiQ" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/cable{
@@ -9444,6 +9444,10 @@
/area/maintenance/port/fore)
"atK" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/machinery/light_switch{
+ pixel_x = 24;
+ pixel_y = -24
+ },
/turf/open/floor/plating,
/area/commons/vacant_room/office/b)
"atL" = (
@@ -12669,9 +12673,7 @@
/turf/open/floor/plasteel,
/area/construction/mining/aux_base)
"aCW" = (
-/obj/machinery/sleeper{
- dir = 4
- },
+/obj/machinery/stasis,
/turf/open/floor/plating,
/area/maintenance/port/fore)
"aCX" = (
@@ -15212,7 +15214,7 @@
/obj/structure/plasticflaps/opaque,
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
-/area/service/kitchen/coldroom)
+/area/service/kitchen)
"aJL" = (
/obj/machinery/navbeacon{
codes_txt = "delivery;dir=2";
@@ -15437,10 +15439,12 @@
/obj/item/radio/intercom{
pixel_y = 25
},
-/obj/machinery/camera,
/obj/structure/chair/comfy/brown{
dir = 4
},
+/obj/machinery/camera{
+ c_tag = "Bar North"
+ },
/turf/open/floor/wood,
/area/service/bar)
"aKs" = (
@@ -15485,7 +15489,7 @@
/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel/showroomfloor,
-/area/service/kitchen/coldroom)
+/area/service/kitchen)
"aKD" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
@@ -15589,7 +15593,7 @@
"aKT" = (
/obj/structure/closet/secure_closet/freezer/meat,
/turf/open/floor/plasteel/showroomfloor,
-/area/service/kitchen/coldroom)
+/area/service/kitchen)
"aKU" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/turf/open/floor/plasteel,
@@ -15604,7 +15608,7 @@
dir = 8
},
/turf/open/floor/plasteel,
-/area/service/kitchen/coldroom)
+/area/service/kitchen)
"aKW" = (
/obj/machinery/light_switch{
pixel_y = 28
@@ -16056,13 +16060,13 @@
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel/showroomfloor,
-/area/service/kitchen/coldroom)
+/area/service/kitchen)
"aMl" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 8
},
/turf/open/floor/plasteel/showroomfloor,
-/area/service/kitchen/coldroom)
+/area/service/kitchen)
"aMm" = (
/obj/machinery/firealarm{
pixel_y = 24
@@ -16167,7 +16171,7 @@
"aMD" = (
/obj/machinery/icecream_vat,
/turf/open/floor/plasteel/showroomfloor,
-/area/service/kitchen/coldroom)
+/area/service/kitchen)
"aME" = (
/obj/structure/disposalpipe/segment{
dir = 10
@@ -16179,7 +16183,7 @@
/area/service/hydroponics)
"aMF" = (
/turf/open/floor/plasteel/showroomfloor,
-/area/service/kitchen/coldroom)
+/area/service/kitchen)
"aMG" = (
/obj/structure/closet/crate/hydroponics,
/obj/item/shovel/spade,
@@ -16470,7 +16474,7 @@
name = "Pete"
},
/turf/open/floor/plasteel/showroomfloor,
-/area/service/kitchen/coldroom)
+/area/service/kitchen)
"aNL" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/closed/wall,
@@ -16481,7 +16485,7 @@
dir = 8
},
/turf/open/floor/plasteel/showroomfloor,
-/area/service/kitchen/coldroom)
+/area/service/kitchen)
"aNN" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/public/glass{
@@ -16502,7 +16506,7 @@
},
/obj/machinery/vending/wardrobe/chef_wardrobe,
/turf/open/floor/plasteel/showroomfloor,
-/area/service/kitchen/coldroom)
+/area/service/kitchen)
"aNP" = (
/obj/structure/disposalpipe/segment,
/turf/open/floor/wood,
@@ -16873,7 +16877,7 @@
"aOI" = (
/obj/structure/kitchenspike,
/turf/open/floor/plasteel/showroomfloor,
-/area/service/kitchen/coldroom)
+/area/service/kitchen)
"aOJ" = (
/obj/structure/chair/comfy/brown{
dir = 8
@@ -16895,14 +16899,18 @@
dir = 8
},
/turf/open/floor/plasteel/showroomfloor,
-/area/service/kitchen/coldroom)
+/area/service/kitchen)
"aON" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 8
},
+/obj/machinery/light_switch{
+ pixel_x = 24;
+ pixel_y = -24
+ },
/turf/open/floor/plasteel/showroomfloor,
-/area/service/kitchen/coldroom)
+/area/service/kitchen)
"aOO" = (
/obj/machinery/door/airlock{
name = "Bar Storage";
@@ -16939,7 +16947,7 @@
"aOT" = (
/obj/machinery/gibber,
/turf/open/floor/plasteel/showroomfloor,
-/area/service/kitchen/coldroom)
+/area/service/kitchen)
"aOU" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 8
@@ -18682,6 +18690,7 @@
/obj/structure/table,
/obj/item/storage/crayons,
/obj/item/storage/crayons,
+/obj/item/chisel,
/turf/open/floor/plasteel,
/area/commons/storage/art)
"aTH" = (
@@ -21951,6 +21960,7 @@
/obj/structure/table,
/obj/item/aiModule/supplied/quarantine,
/obj/machinery/camera/motion{
+ c_tag = "AI Upload Chamber - West";
dir = 4;
network = list("aiupload")
},
@@ -21970,6 +21980,7 @@
pixel_x = 32
},
/obj/machinery/camera/motion{
+ c_tag = "AI Upload Chamber - East";
dir = 8;
network = list("aiupload")
},
@@ -22904,6 +22915,10 @@
dir = 9
},
/obj/structure/closet/crate,
+/obj/machinery/light_switch{
+ pixel_x = 7;
+ pixel_y = -26
+ },
/turf/open/floor/plasteel,
/area/cargo/warehouse)
"beE" = (
@@ -23086,9 +23101,7 @@
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"beY" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 4
- },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel/dark,
/area/medical/morgue)
"beZ" = (
@@ -23285,13 +23298,18 @@
/turf/closed/wall,
/area/medical/chemistry)
"bfG" = (
-/obj/effect/spawner/structure/window,
-/turf/open/floor/plating,
-/area/medical/medbay/lobby)
+/obj/machinery/cryopod{
+ dir = 4
+ },
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/open/floor/carpet,
+/area/commons/cryopod)
"bfH" = (
/obj/structure/sign/departments/medbay/alt,
/turf/closed/wall,
-/area/medical/medbay/lobby)
+/area/medical/medbay/central)
"bfI" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 4
@@ -23423,8 +23441,12 @@
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
"bgc" = (
-/turf/closed/wall/r_wall,
-/area/science/lab)
+/obj/machinery/camera{
+ c_tag = "Theatre - Stage";
+ dir = 8
+ },
+/turf/open/floor/carpet,
+/area/service/theater)
"bgd" = (
/obj/machinery/airalarm{
dir = 1;
@@ -23692,7 +23714,7 @@
dir = 8
},
/turf/open/floor/plasteel/white,
-/area/medical/medbay/lobby)
+/area/medical/medbay/central)
"bgX" = (
/obj/structure/table/wood,
/obj/machinery/airalarm{
@@ -23759,7 +23781,7 @@
"bhe" = (
/obj/structure/chair,
/turf/open/floor/plasteel/white,
-/area/medical/medbay/lobby)
+/area/medical/medbay/central)
"bhg" = (
/obj/effect/turf_decal/tile/blue,
/obj/effect/turf_decal/tile/blue{
@@ -23833,9 +23855,6 @@
/turf/open/floor/plasteel,
/area/security/checkpoint/medical)
"bhm" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 4
- },
/obj/machinery/power/apc{
areastring = "/area/medical/morgue";
dir = 1;
@@ -24362,7 +24381,7 @@
dir = 1
},
/turf/open/floor/plasteel/white,
-/area/medical/medbay/lobby)
+/area/medical/medbay/central)
"biu" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel/white,
@@ -24434,9 +24453,12 @@
/turf/open/floor/plasteel/dark,
/area/medical/paramedic)
"biC" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/closed/wall,
-/area/service/kitchen/coldroom)
+/obj/machinery/light_switch{
+ pixel_x = 7;
+ pixel_y = -26
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/commons/toilet)
"biD" = (
/obj/machinery/portable_atmospherics/canister/air,
/turf/open/floor/plating,
@@ -24998,14 +25020,14 @@
dir = 8
},
/turf/open/floor/plasteel/white,
-/area/medical/medbay/lobby)
+/area/medical/medbay/central)
"bjU" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 6
},
/obj/effect/turf_decal/tile/blue,
/turf/open/floor/plasteel/white,
-/area/medical/medbay/lobby)
+/area/medical/medbay/central)
"bjV" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -25015,7 +25037,7 @@
dir = 8
},
/turf/open/floor/plasteel/white,
-/area/medical/medbay/lobby)
+/area/medical/medbay/central)
"bjX" = (
/obj/structure/table,
/obj/machinery/recharger{
@@ -25559,7 +25581,7 @@
dir = 4
},
/turf/open/floor/plasteel/white,
-/area/medical/medbay/lobby)
+/area/medical/medbay/central)
"bll" = (
/obj/structure/table/reinforced,
/obj/item/folder/white,
@@ -26176,7 +26198,7 @@
pixel_x = -24
},
/turf/open/floor/plasteel/white,
-/area/medical/medbay/lobby)
+/area/medical/medbay/central)
"bmK" = (
/obj/structure/table/reinforced,
/turf/open/floor/plasteel/white,
@@ -29787,7 +29809,7 @@
/obj/machinery/door/firedoor,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel/white,
-/area/medical/medbay/lobby)
+/area/medical/medbay/central)
"bvl" = (
/obj/machinery/door/airlock/medical/glass{
name = "Surgery Observation"
@@ -32035,14 +32057,12 @@
/turf/open/floor/plating,
/area/maintenance/port/aft)
"bAq" = (
-/obj/machinery/sleeper{
- dir = 8
- },
/obj/machinery/camera{
c_tag = "Medbay Treatment Center";
dir = 8;
network = list("ss13","medbay")
},
+/obj/machinery/stasis,
/turf/open/floor/plasteel,
/area/medical/medbay/central)
"bAr" = (
@@ -44867,7 +44887,7 @@
dir = 8
},
/turf/open/floor/plasteel/dark,
-/area/command)
+/area/command/heads_quarters/ce)
"cgQ" = (
/obj/machinery/camera{
c_tag = "Engineering East";
@@ -52491,6 +52511,9 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 6
},
+/obj/machinery/light_switch{
+ pixel_y = 24
+ },
/turf/open/floor/plasteel/freezer,
/area/commons/toilet/locker)
"ddI" = (
@@ -53335,7 +53358,7 @@
},
/obj/machinery/camera{
c_tag = "Prison Forestry";
- dir = 8;
+ dir = 4;
network = list("ss13","prison")
},
/turf/open/floor/plasteel,
@@ -53652,9 +53675,12 @@
/turf/open/floor/carpet,
/area/commons/dorms)
"eRr" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/plasteel/white,
-/area/medical/medbay/lobby)
+/obj/machinery/light_switch{
+ pixel_x = -10;
+ pixel_y = 26
+ },
+/turf/open/floor/plasteel/dark,
+/area/service/chapel/main)
"eRz" = (
/obj/structure/lattice,
/obj/structure/grille,
@@ -53962,6 +53988,10 @@
"fgl" = (
/obj/structure/closet/crate/bin,
/obj/item/coin/silver,
+/obj/machinery/airalarm{
+ dir = 8;
+ pixel_x = 23
+ },
/turf/open/floor/carpet/arcade,
/area/commons/arcade)
"fgy" = (
@@ -54222,6 +54252,10 @@
dir = 8;
pixel_x = 24
},
+/obj/machinery/light_switch{
+ pixel_x = -7;
+ pixel_y = -24
+ },
/turf/open/floor/plasteel,
/area/security/range)
"fsQ" = (
@@ -55117,6 +55151,10 @@
},
/obj/effect/turf_decal/tile/red,
/obj/effect/landmark/start/clown,
+/obj/machinery/camera{
+ c_tag = "Theatre - Backstage";
+ dir = 1
+ },
/turf/open/floor/plasteel,
/area/service/theater)
"gLz" = (
@@ -55870,7 +55908,6 @@
req_access_txt = "6"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel/dark,
/area/medical/morgue)
"ibK" = (
@@ -55916,8 +55953,11 @@
/turf/open/floor/plasteel/freezer,
/area/security/prison/cells)
"ihR" = (
-/turf/open/floor/plasteel/white,
-/area/medical/medbay/lobby)
+/obj/machinery/airalarm{
+ pixel_y = 24
+ },
+/turf/open/floor/plasteel,
+/area/cargo/warehouse)
"ihS" = (
/obj/effect/landmark/event_spawn,
/obj/effect/turf_decal/tile/blue{
@@ -56272,7 +56312,7 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/structure/reagent_dispensers/cooking_oil,
/turf/open/floor/plasteel/showroomfloor,
-/area/service/kitchen/coldroom)
+/area/service/kitchen)
"iPX" = (
/obj/structure/table,
/obj/machinery/reagentgrinder{
@@ -56475,6 +56515,10 @@
pixel_y = -28
},
/obj/effect/landmark/start/paramedic,
+/obj/machinery/light_switch{
+ pixel_x = -26;
+ pixel_y = -26
+ },
/turf/open/floor/plasteel/dark,
/area/medical/paramedic)
"jex" = (
@@ -56531,9 +56575,18 @@
/turf/closed/wall,
/area/engineering/main)
"jiT" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plasteel/white,
-/area/medical/medbay/lobby)
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/light_switch{
+ pixel_x = -9;
+ pixel_y = 26
+ },
+/turf/open/floor/plasteel,
+/area/cargo/sorting)
"jkx" = (
/obj/effect/decal/cleanable/cobweb/cobweb2,
/obj/machinery/computer/slot_machine,
@@ -58875,6 +58928,9 @@
/obj/structure/sign/poster/contraband/fun_police{
pixel_x = 32
},
+/obj/machinery/camera{
+ c_tag = "Bar Arcade"
+ },
/turf/open/floor/carpet/arcade,
/area/commons/arcade)
"meb" = (
@@ -60602,10 +60658,12 @@
/turf/open/floor/mineral/titanium/blue,
/area/commons/dorms)
"oJV" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/structure/cable{
icon_state = "2-4"
},
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 4
+ },
/turf/open/floor/plasteel/dark,
/area/medical/morgue)
"oKh" = (
@@ -61649,9 +61707,26 @@
},
/area/maintenance/starboard/aft)
"qnC" = (
-/obj/machinery/door/firedoor,
-/turf/open/floor/plasteel/white,
-/area/medical/medbay/lobby)
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/power/apc{
+ areastring = "/area/maintenance/department/medical/morgue";
+ dir = 1;
+ name = "Morgue Maintenance APC";
+ pixel_y = 23
+ },
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/open/floor/plating,
+/area/maintenance/department/medical/morgue)
"qoT" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 9
@@ -62015,7 +62090,7 @@
icon_state = "plant-22"
},
/turf/open/floor/plasteel/white,
-/area/medical/medbay/lobby)
+/area/medical/medbay/central)
"qUh" = (
/obj/machinery/door/airlock/public/glass{
name = "Chapel Office";
@@ -63054,6 +63129,11 @@
pixel_x = 2;
pixel_y = 2
},
+/obj/machinery/camera{
+ c_tag = "Service Hallway";
+ dir = 1;
+ name = "hallway camera"
+ },
/turf/open/floor/plasteel,
/area/hallway/secondary/service)
"syJ" = (
@@ -63871,7 +63951,7 @@
dir = 1
},
/turf/open/floor/plasteel/white,
-/area/medical/medbay/lobby)
+/area/medical/medbay/central)
"tCs" = (
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
@@ -64041,11 +64121,14 @@
"tMl" = (
/obj/effect/turf_decal/loading_area,
/turf/open/floor/plasteel/showroomfloor,
-/area/service/kitchen/coldroom)
+/area/service/kitchen)
"tNl" = (
/obj/structure/cable{
icon_state = "1-2"
},
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 4
+ },
/turf/open/floor/plasteel/dark,
/area/medical/morgue)
"tNF" = (
@@ -64239,6 +64322,10 @@
/obj/structure/cable{
icon_state = "0-4"
},
+/obj/machinery/light_switch{
+ pixel_x = -26;
+ pixel_y = 26
+ },
/turf/open/floor/wood,
/area/maintenance/bar)
"ucq" = (
@@ -64556,13 +64643,6 @@
/obj/structure/grille,
/turf/open/floor/plating,
/area/maintenance/port/fore)
-"uBr" = (
-/obj/effect/turf_decal/tile/blue,
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/turf/open/floor/plasteel/white,
-/area/medical/medbay/lobby)
"uCn" = (
/obj/structure/table/reinforced,
/obj/item/paper_bin,
@@ -64731,6 +64811,10 @@
/turf/open/floor/plasteel/dark,
/area/security/prison/upper)
"uOd" = (
+/obj/machinery/light_switch{
+ pixel_x = 7;
+ pixel_y = -26
+ },
/turf/open/floor/plasteel/white/side{
dir = 4
},
@@ -65612,7 +65696,7 @@
dir = 8
},
/turf/open/floor/plasteel/white,
-/area/medical/medbay/lobby)
+/area/medical/medbay/central)
"wcB" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 10
@@ -67022,6 +67106,10 @@
/area/security/execution/transfer)
"yfX" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on,
+/obj/machinery/light_switch{
+ pixel_x = 24;
+ pixel_y = -24
+ },
/turf/open/floor/carpet/arcade,
/area/commons/arcade)
"ygb" = (
@@ -87984,7 +88072,7 @@ wUr
mzB
uSc
wHm
-qTG
+bgc
aJe
aKw
aLE
@@ -88768,7 +88856,7 @@ aTH
aPK
aWz
aWC
-baS
+ihR
baS
baS
bcR
@@ -89805,7 +89893,7 @@ aZH
aZK
bhZ
aZK
-cNM
+jiT
bfQ
bnG
bnz
@@ -97234,7 +97322,7 @@ atf
dgz
tqg
ujF
-ujF
+bfG
ujF
dgz
aaa
@@ -99550,7 +99638,7 @@ aDM
aGx
aDM
aDM
-aDM
+biC
aAh
aMm
aJq
@@ -102397,7 +102485,7 @@ bet
bfH
aiP
wbE
-ihR
+bhh
wbE
bmJ
bof
@@ -102651,12 +102739,12 @@ bby
aYV
aYV
bet
-bfG
+rUe
bhe
bit
bjS
tCd
-eRr
+bli
boe
bli
bpN
@@ -102908,9 +102996,9 @@ aJC
aYV
aYV
bet
-bfG
+rUe
bhe
-ihR
+bhh
bjU
blk
blk
@@ -103165,9 +103253,9 @@ aJC
bcr
aYV
bet
-bfG
+rUe
bhe
-ihR
+bhh
bjV
blj
bmK
@@ -103423,8 +103511,8 @@ aYV
bdo
beu
bvk
-jiT
-jiT
+biu
+biu
bjT
blm
bmL
@@ -103679,9 +103767,9 @@ aJC
aYV
aYV
bet
-qnC
-ihR
-ihR
+bfJ
+bhh
+bhh
bgQ
bll
bhh
@@ -103938,8 +104026,8 @@ aYV
bet
bfH
qTV
-ihR
-uBr
+bhh
+bhg
bln
bmM
boj
@@ -104948,10 +105036,10 @@ alP
aGL
aIe
bhr
-bhr
-bhr
-bhr
-bhr
+aJI
+aJI
+aJI
+aJI
aJI
aRC
aSK
@@ -105204,7 +105292,7 @@ aaa
alP
aGN
aIh
-bhr
+aJI
aKT
aMD
aNM
@@ -105718,7 +105806,7 @@ aaa
alP
aGL
aHY
-biC
+aQj
iNn
aMk
aNK
@@ -106232,9 +106320,9 @@ vpY
alP
aGJ
avI
-bhr
-bhr
-bhr
+aJI
+aJI
+aJI
aNO
aOT
aJI
@@ -106491,9 +106579,9 @@ aGJ
avI
aJL
aKX
-bhr
-bhr
-bhr
+aJI
+aJI
+aJI
aJI
aRH
aVz
@@ -107282,7 +107370,7 @@ tIE
dnW
jdE
nyi
-cTO
+qnC
bmZ
bpG
bqZ
@@ -113431,7 +113519,7 @@ aFw
aFw
aFw
aFw
-aFz
+eRr
aPk
aQu
aPk
@@ -115509,7 +115597,7 @@ pKV
pKV
pKV
bpp
-pKV
+bqe
brr
bsE
bvK
@@ -115766,7 +115854,7 @@ biY
bmd
bnr
bpr
-bgc
+bqe
btj
buu
bvM
@@ -116022,8 +116110,8 @@ bhG
blO
bmc
bnq
-bgc
-bgc
+bqe
+bqe
bru
bsF
btY
diff --git a/_maps/map_files/CogStation/CogStation.dmm b/_maps/map_files/CogStation/CogStation.dmm
index c5e8df8ed2..1dcb97a647 100644
--- a/_maps/map_files/CogStation/CogStation.dmm
+++ b/_maps/map_files/CogStation/CogStation.dmm
@@ -8805,12 +8805,11 @@
/obj/effect/turf_decal/tile/blue{
dir = 1
},
-/obj/machinery/sleeper{
- dir = 8
- },
/obj/machinery/airalarm{
pixel_y = 24
},
+/obj/structure/table,
+/obj/item/stack/medical/suture/five,
/turf/open/floor/plasteel/white,
/area/medical/clinic)
"auS" = (
@@ -8876,9 +8875,7 @@
name = "Station Intercom (Common)";
pixel_y = 26
},
-/obj/machinery/sleep_console{
- dir = 8
- },
+/obj/machinery/stasis,
/turf/open/floor/plasteel/white,
/area/medical/clinic)
"auZ" = (
@@ -36751,9 +36748,6 @@
/obj/machinery/light/small{
dir = 4
},
-/obj/item/storage/box/engineer{
- pixel_y = 4
- },
/turf/open/floor/plasteel,
/area/maintenance/disposal)
"bCu" = (
@@ -58340,9 +58334,7 @@
dir = 4
},
/obj/structure/window/reinforced/spawner/east,
-/obj/machinery/sleeper{
- dir = 8
- },
+/obj/machinery/stasis,
/turf/open/floor/plasteel/white,
/area/medical/medbay/zone2)
"cua" = (
diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm
index bb0af44bb4..d64abed5dc 100644
--- a/_maps/map_files/Deltastation/DeltaStation2.dmm
+++ b/_maps/map_files/Deltastation/DeltaStation2.dmm
@@ -46157,8 +46157,7 @@
},
/obj/effect/turf_decal/delivery,
/obj/machinery/atmospherics/components/binary/valve/digital{
- dir = 8;
- icon_state = "dvalve_map-2"
+ dir = 8
},
/turf/open/floor/plasteel,
/area/science/xenobiology)
@@ -46911,12 +46910,10 @@
dir = 4;
pixel_x = -23
},
-/obj/machinery/sleeper{
- dir = 4
- },
/obj/effect/turf_decal/stripes/line{
dir = 6
},
+/obj/machinery/stasis,
/turf/open/floor/plasteel,
/area/medical/abandoned)
"ddn" = (
@@ -47560,10 +47557,10 @@
/turf/open/floor/plating,
/area/security/checkpoint/medical)
"deC" = (
-/obj/machinery/sleeper{
+/obj/effect/turf_decal/stripes/end{
dir = 4
},
-/obj/effect/turf_decal/stripes/end{
+/obj/machinery/sleeper{
dir = 4
},
/turf/open/floor/plasteel,
@@ -47585,12 +47582,10 @@
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
"deF" = (
-/obj/machinery/sleeper{
- dir = 8
- },
/obj/effect/turf_decal/stripes/end{
dir = 8
},
+/obj/machinery/stasis,
/turf/open/floor/plasteel,
/area/medical/medbay/central)
"deG" = (
@@ -50090,6 +50085,9 @@
/obj/effect/turf_decal/tile/purple{
dir = 4
},
+/obj/machinery/airalarm{
+ pixel_y = 23
+ },
/turf/open/floor/plasteel/white,
/area/science/misc_lab)
"djz" = (
@@ -50940,6 +50938,9 @@
/obj/effect/turf_decal/tile/purple{
dir = 8
},
+/obj/machinery/light_switch{
+ pixel_x = -26
+ },
/turf/open/floor/plasteel/white,
/area/science/misc_lab)
"dln" = (
@@ -53782,6 +53783,9 @@
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/effect/turf_decal/tile/blue,
+/obj/item/wallframe/light_fixture/small{
+ pixel_y = -15
+ },
/turf/open/floor/plasteel,
/area/maintenance/department/medical)
"dss" = (
@@ -56700,6 +56704,10 @@
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/delivery,
+/obj/machinery/light_switch{
+ pixel_x = -26;
+ pixel_y = -26
+ },
/turf/open/floor/plasteel,
/area/hallway/secondary/construction)
"dyP" = (
@@ -60428,6 +60436,10 @@
/obj/item/clothing/gloves/color/latex/nitrile,
/obj/item/clothing/suit/apron/surgical,
/obj/item/clothing/mask/breath/medical,
+/obj/item/wallframe/light_fixture/small{
+ dir = 4;
+ pixel_x = 14
+ },
/turf/open/floor/plating,
/area/maintenance/department/medical/morgue)
"dGA" = (
@@ -77552,8 +77564,7 @@
/area/engineering/main)
"grf" = (
/obj/machinery/atmospherics/pipe/simple/orange/hidden{
- dir = 5;
- icon_state = "pipe11-2"
+ dir = 5
},
/turf/closed/wall/r_wall,
/area/science/xenobiology)
@@ -77889,8 +77900,7 @@
dir = 8
},
/obj/machinery/atmospherics/components/unary/outlet_injector/on{
- dir = 4;
- icon_state = "inje_map-2"
+ dir = 4
},
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
@@ -78953,7 +78963,6 @@
/turf/open/floor/plasteel,
/area/commons/dorms)
"gUc" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/structure/bodycontainer/crematorium{
dir = 4;
id = "cremawheat"
@@ -86276,7 +86285,7 @@
"jjN" = (
/obj/structure/table/reinforced,
/obj/machinery/camera{
- c_tag = "Science - Experimentation Lab";
+ c_tag = "Science - Circuitry Lab";
name = "science camera";
network = list("ss13","rd")
},
@@ -91351,7 +91360,7 @@
pixel_y = 32
},
/obj/machinery/camera{
- c_tag = "Library - Aft";
+ c_tag = "Library - Port";
name = "library camera"
},
/turf/open/floor/wood,
@@ -101092,6 +101101,19 @@
},
/turf/open/floor/plasteel,
/area/engineering/main)
+"orP" = (
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/maintenance/aft)
"orZ" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
@@ -113658,6 +113680,20 @@
},
/turf/open/floor/plasteel,
/area/engineering/break_room)
+"sOn" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 8
+ },
+/obj/machinery/light_switch{
+ pixel_x = -26;
+ pixel_y = 8
+ },
+/turf/open/floor/plasteel,
+/area/security/brig)
"sOo" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
@@ -114372,7 +114408,7 @@
dir = 4
},
/obj/machinery/camera{
- c_tag = "Library - Aft";
+ c_tag = "Library - Beam";
name = "library camera"
},
/turf/open/floor/plasteel/grimy,
@@ -117067,6 +117103,10 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
+/obj/machinery/camera{
+ c_tag = "Engineering MiniSat Access";
+ dir = 1
+ },
/turf/open/floor/plasteel/dark,
/area/engineering/transit_tube)
"tVn" = (
@@ -118939,6 +118979,9 @@
/obj/effect/turf_decal/tile/red{
dir = 4
},
+/obj/machinery/light_switch{
+ pixel_y = 24
+ },
/turf/open/floor/plasteel,
/area/security/office)
"uBU" = (
@@ -119406,6 +119449,10 @@
/obj/effect/turf_decal/stripes/line{
dir = 1
},
+/obj/machinery/light_switch{
+ pixel_x = 26;
+ pixel_y = 26
+ },
/turf/open/floor/plasteel,
/area/ai_monitored/command/storage/eva)
"uNf" = (
@@ -124179,6 +124226,7 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
+/obj/item/chisel,
/turf/open/floor/plasteel/dark,
/area/service/library)
"wDf" = (
@@ -126517,7 +126565,7 @@
dir = 4
},
/obj/machinery/camera{
- c_tag = "Science - Lab Access";
+ c_tag = "Science - Circuitry Lab Starboard";
dir = 8;
name = "science camera";
network = list("ss13","rd")
@@ -169461,7 +169509,7 @@ dGk
dHF
dIW
dCy
-dKY
+orP
dMx
dNS
aaa
@@ -179929,7 +179977,7 @@ byJ
bAl
bCe
bEc
-bmh
+sOn
bHA
bJw
bLn
diff --git a/_maps/map_files/FestiveBall/FestiveStation.dmm b/_maps/map_files/FestiveBall/FestiveStation.dmm
index dda657c782..a559280263 100644
--- a/_maps/map_files/FestiveBall/FestiveStation.dmm
+++ b/_maps/map_files/FestiveBall/FestiveStation.dmm
@@ -29800,8 +29800,8 @@
/turf/open/floor/carpet/green,
/area/medical/surgery)
"byn" = (
-/obj/machinery/sleeper,
/obj/effect/decal/festive/christmas_ivy_string,
+/obj/machinery/sleeper,
/turf/open/floor/plasteel/white/side,
/area/medical/exam_room)
"byo" = (
@@ -33048,8 +33048,8 @@
},
/area/medical/genetics/cloning)
"bEC" = (
-/obj/machinery/sleeper{
- dir = 1
+/obj/machinery/stasis{
+ dir = 4
},
/turf/open/floor/plasteel/white/side{
dir = 1
diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm
index 731641d737..fa3c32a418 100644
--- a/_maps/map_files/KiloStation/KiloStation.dmm
+++ b/_maps/map_files/KiloStation/KiloStation.dmm
@@ -22447,7 +22447,7 @@
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
-/obj/machinery/sleeper{
+/obj/machinery/stasis{
dir = 4
},
/turf/open/floor/plasteel/dark,
@@ -39443,6 +39443,7 @@
/obj/machinery/light/small{
dir = 1
},
+/obj/item/chisel,
/turf/open/floor/plasteel/dark,
/area/service/library)
"blB" = (
@@ -84644,6 +84645,17 @@
icon_state = "wood-broken6"
},
/area/commons/vacant_room/office)
+"fuh" = (
+/obj/effect/turf_decal/delivery,
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/machinery/sleeper{
+ dir = 4
+ },
+/turf/open/floor/plasteel/dark,
+/area/medical/medbay/central)
"fyr" = (
/obj/effect/decal/cleanable/cobweb/cobweb2,
/turf/closed/mineral/random/labormineral,
@@ -104570,7 +104582,7 @@ aRd
aOR
abl
aSW
-aLi
+fuh
aLi
aOW
aWp
diff --git a/_maps/map_files/LambdaStation/lambda.dmm b/_maps/map_files/LambdaStation/lambda.dmm
index e676dea0e5..394f7fb7c1 100644
--- a/_maps/map_files/LambdaStation/lambda.dmm
+++ b/_maps/map_files/LambdaStation/lambda.dmm
@@ -18306,6 +18306,7 @@
/obj/structure/table,
/obj/item/stack/cable_coil/random,
/obj/item/stack/cable_coil/random,
+/obj/item/chisel,
/turf/open/floor/plasteel,
/area/commons/storage/art)
"aGS" = (
@@ -38153,17 +38154,19 @@
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
"bDq" = (
-/obj/machinery/sleeper,
/obj/effect/turf_decal/trimline/blue/filled/line{
dir = 9
},
+/obj/machinery/sleeper{
+ dir = 4
+ },
/turf/open/floor/plasteel/white,
/area/medical/cryo)
"bDr" = (
-/obj/machinery/sleeper,
/obj/effect/turf_decal/trimline/blue/filled/line{
dir = 5
},
+/obj/machinery/stasis,
/turf/open/floor/plasteel/white,
/area/medical/cryo)
"bDs" = (
diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm
index d9b14bab19..3661b49684 100644
--- a/_maps/map_files/MetaStation/MetaStation.dmm
+++ b/_maps/map_files/MetaStation/MetaStation.dmm
@@ -4143,6 +4143,10 @@
/obj/effect/turf_decal/stripes/line{
dir = 8
},
+/obj/machinery/light_switch{
+ pixel_x = -10;
+ pixel_y = -26
+ },
/turf/open/floor/plasteel,
/area/security/range)
"amt" = (
@@ -5971,6 +5975,10 @@
pixel_x = -3;
pixel_y = 5
},
+/obj/machinery/light_switch{
+ pixel_x = 16;
+ pixel_y = -26
+ },
/turf/open/floor/plasteel/showroomfloor,
/area/security/warden)
"ast" = (
@@ -8519,6 +8527,9 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
+/obj/machinery/light/small{
+ dir = 1
+ },
/turf/open/floor/plating{
icon_state = "platingdmg2"
},
@@ -24204,6 +24215,11 @@
},
/obj/structure/table,
/obj/item/kitchen/rollingpin,
+/obj/machinery/camera{
+ c_tag = "Service Hallway";
+ dir = 4;
+ name = "hallway camera"
+ },
/turf/open/floor/plasteel,
/area/hallway/secondary/service)
"bYp" = (
@@ -33174,6 +33190,10 @@
icon_state = "1-8"
},
/obj/effect/landmark/start/medical_doctor,
+/obj/machinery/camera{
+ c_tag = "Patient Room";
+ dir = 10
+ },
/turf/open/floor/plasteel/white,
/area/medical/patients_rooms/room_a)
"cum" = (
@@ -33364,6 +33384,10 @@
/obj/effect/turf_decal/tile/blue{
dir = 4
},
+/obj/machinery/light_switch{
+ pixel_x = -25;
+ pixel_y = 26
+ },
/turf/open/floor/plasteel,
/area/medical/paramedic)
"cuy" = (
@@ -35364,7 +35388,7 @@
dir = 10
},
/obj/machinery/camera{
- c_tag = "Genetics Lab";
+ c_tag = "Genetics Lab Hall";
dir = 6;
network = list("ss13","medbay")
},
@@ -50555,9 +50579,6 @@
/turf/open/floor/plasteel/dark,
/area/engineering/storage/tech)
"eAe" = (
-/obj/machinery/sleeper{
- dir = 8
- },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
@@ -50571,6 +50592,7 @@
/obj/effect/turf_decal/tile/blue{
dir = 8
},
+/obj/machinery/stasis,
/turf/open/floor/plasteel/white,
/area/medical/treatment_center)
"eAy" = (
@@ -52788,7 +52810,7 @@
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/camera{
- c_tag = "Atmospherics - Entrance"
+ c_tag = "Atmospherics - Bow"
},
/turf/open/floor/plasteel,
/area/engineering/atmos)
@@ -54751,7 +54773,7 @@
"gXt" = (
/obj/machinery/cryopod,
/obj/machinery/camera{
- c_tag = "Fitness Room - Fore"
+ c_tag = "Cryogenics"
},
/turf/open/floor/plasteel/dark,
/area/commons/cryopod)
@@ -56227,6 +56249,10 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
+/obj/machinery/light_switch{
+ pixel_x = 8;
+ pixel_y = 30
+ },
/turf/open/floor/plasteel/dark,
/area/command/teleporter)
"hNB" = (
@@ -56376,6 +56402,16 @@
},
/turf/open/floor/engine/n2,
/area/engineering/atmos)
+"hRD" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/machinery/light_switch{
+ pixel_x = -24
+ },
+/turf/open/floor/plasteel,
+/area/security/brig)
"hSe" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 10
@@ -56908,6 +56944,9 @@
/area/solars/starboard/aft)
"ihO" = (
/obj/machinery/portable_atmospherics/canister/air,
+/obj/machinery/light/small{
+ dir = 4
+ },
/turf/open/floor/plating,
/area/maintenance/prison)
"iiu" = (
@@ -59850,6 +59889,16 @@
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
/area/cargo/storage)
+"jPq" = (
+/obj/structure/urinal{
+ pixel_y = 29
+ },
+/obj/machinery/camera{
+ c_tag = "Auxiliary Restrooms";
+ dir = 5
+ },
+/turf/open/floor/plating,
+/area/commons/toilet/auxiliary)
"jPu" = (
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -64388,6 +64437,10 @@
"moT" = (
/obj/structure/table,
/obj/item/camera,
+/obj/machinery/camera{
+ c_tag = "Art Storage";
+ dir = 1
+ },
/turf/open/floor/plasteel,
/area/commons/storage/art)
"moW" = (
@@ -67269,6 +67322,9 @@
/obj/effect/turf_decal/bot{
dir = 1
},
+/obj/machinery/light_switch{
+ pixel_x = -23
+ },
/turf/open/floor/plasteel{
dir = 1
},
@@ -70711,6 +70767,10 @@
pixel_x = -28
},
/obj/machinery/light/small,
+/obj/machinery/light_switch{
+ pixel_x = -10;
+ pixel_y = -26
+ },
/turf/open/floor/plasteel/freezer,
/area/commons/fitness/recreation)
"pRd" = (
@@ -72469,6 +72529,7 @@
/obj/item/stack/cable_coil/random,
/obj/item/stack/cable_coil/random,
/obj/item/stack/cable_coil/random,
+/obj/item/chisel,
/turf/open/floor/plasteel,
/area/commons/storage/art)
"qNe" = (
@@ -80971,9 +81032,6 @@
/turf/open/space/basic,
/area/space)
"vLV" = (
-/obj/machinery/sleeper{
- dir = 4
- },
/obj/effect/turf_decal/tile/blue{
dir = 1
},
@@ -80984,6 +81042,9 @@
/obj/effect/turf_decal/tile/blue{
dir = 8
},
+/obj/machinery/sleeper{
+ dir = 4
+ },
/turf/open/floor/plasteel/white,
/area/medical/treatment_center)
"vMm" = (
@@ -83941,6 +84002,9 @@
/obj/effect/turf_decal/tile/red{
dir = 8
},
+/obj/machinery/light_switch{
+ pixel_x = -24
+ },
/turf/open/floor/plasteel,
/area/security/office)
"xnt" = (
@@ -84591,6 +84655,9 @@
/turf/open/floor/wood,
/area/service/lawoffice)
"xEM" = (
+/obj/machinery/light_switch{
+ pixel_x = -20
+ },
/turf/open/floor/plating,
/area/commons/toilet/auxiliary)
"xFb" = (
@@ -102517,7 +102584,7 @@ btZ
bvV
bxN
mei
-nzp
+jPq
xEM
mei
smm
@@ -110693,7 +110760,7 @@ afR
akx
anh
anh
-anh
+hRD
anh
alQ
anh
diff --git a/_maps/map_files/OmegaStation/OmegaStation.dmm b/_maps/map_files/OmegaStation/OmegaStation.dmm
index 43cfcbebd0..68dfbe5bcf 100644
--- a/_maps/map_files/OmegaStation/OmegaStation.dmm
+++ b/_maps/map_files/OmegaStation/OmegaStation.dmm
@@ -937,9 +937,6 @@
id = "engsm";
name = "Radiation Chamber Shutters"
},
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 10
- },
/turf/open/floor/plating,
/area/engineering/gravity_generator)
"abR" = (
@@ -1314,14 +1311,14 @@
/area/engineering/main)
"acA" = (
/obj/structure/cable/white,
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 4
- },
/obj/effect/spawner/structure/window/plasma/reinforced,
/obj/machinery/door/poddoor/shutters/radiation/preopen{
id = "engsm";
name = "Radiation Chamber Shutters"
},
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 10
+ },
/turf/open/floor/plating,
/area/engineering/gravity_generator)
"acB" = (
@@ -2545,6 +2542,10 @@
pixel_x = 24;
pixel_y = 24
},
+/obj/machinery/light_switch{
+ pixel_x = 24;
+ pixel_y = -24
+ },
/turf/open/floor/plasteel,
/area/cargo/qm)
"aeQ" = (
@@ -6573,6 +6574,10 @@
/area/commons/toilet/restrooms)
"alX" = (
/obj/machinery/vending/wardrobe/law_wardrobe,
+/obj/machinery/camera{
+ c_tag = "Law Office";
+ dir = 8
+ },
/turf/open/floor/wood,
/area/service/lawoffice)
"alY" = (
@@ -7009,14 +7014,10 @@
/turf/open/floor/wood,
/area/service/lawoffice)
"amS" = (
-/obj/machinery/camera{
- c_tag = "Law Office";
- dir = 8
- },
/obj/machinery/power/apc{
- areastring = "/area/commons/toilet/restrooms";
+ areastring = "/area/service/lawoffice";
dir = 4;
- name = "Restrooms APC";
+ name = "Law Office APC";
pixel_x = 24
},
/obj/structure/cable/white{
@@ -7345,6 +7346,10 @@
name = "Chief Engineer RC";
pixel_x = 32
},
+/obj/machinery/light_switch{
+ pixel_x = 24;
+ pixel_y = -17
+ },
/turf/open/floor/plasteel,
/area/command/heads_quarters/ce)
"anB" = (
@@ -8434,7 +8439,7 @@
pixel_y = 32
},
/obj/machinery/atmospherics/components/unary/vent_pump/on,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
+/obj/machinery/atmospherics/pipe/simple/orange/hidden{
dir = 4
},
/turf/open/floor/plasteel/dark,
@@ -8844,10 +8849,12 @@
/turf/open/floor/plasteel,
/area/service/bar/atrium)
"apX" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
/obj/effect/turf_decal/delivery,
/obj/effect/turf_decal/stripes/box,
/obj/machinery/rnd/production/techfab/department/service,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 9
+ },
/turf/open/floor/plasteel,
/area/service/bar/atrium)
"apY" = (
@@ -12774,6 +12781,10 @@
pixel_x = -26;
pixel_y = -26
},
+/obj/machinery/camera{
+ c_tag = "Bathrooms";
+ dir = 1
+ },
/turf/open/floor/plasteel/freezer,
/area/commons/toilet/restrooms)
"axg" = (
@@ -13508,6 +13519,10 @@
"ayE" = (
/obj/structure/table/wood,
/obj/item/instrument/violin,
+/obj/machinery/camera{
+ c_tag = "Central Diner 2";
+ dir = 4
+ },
/turf/open/floor/plasteel/dark,
/area/service/theater)
"ayF" = (
@@ -13540,10 +13555,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
-/obj/machinery/camera{
- c_tag = "Central Diner 2";
- dir = 4
- },
/turf/open/floor/plasteel/dark/side{
dir = 8
},
@@ -15209,6 +15220,10 @@
},
/area/service/theater)
"aBW" = (
+/obj/machinery/light_switch{
+ pixel_x = 10;
+ pixel_y = 26
+ },
/turf/open/floor/wood{
icon_state = "wood-broken7"
},
@@ -16021,7 +16036,7 @@
"aDv" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/closed/wall/r_wall,
-/area/engineering/break_room)
+/area/engineering/lobby)
"aDw" = (
/obj/machinery/firealarm{
dir = 4;
@@ -16037,7 +16052,7 @@
/turf/open/floor/plasteel/white/corner{
dir = 1
},
-/area/engineering/break_room)
+/area/engineering/lobby)
"aDx" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 4
@@ -16051,7 +16066,7 @@
/turf/open/floor/plasteel/dark/corner{
dir = 1
},
-/area/engineering/break_room)
+/area/engineering/lobby)
"aDy" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/effect/turf_decal/tile/yellow{
@@ -16060,7 +16075,7 @@
/turf/open/floor/plasteel/dark/corner{
dir = 1
},
-/area/engineering/break_room)
+/area/engineering/lobby)
"aDz" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 8
@@ -16071,7 +16086,7 @@
/turf/open/floor/plasteel/dark/corner{
dir = 1
},
-/area/engineering/break_room)
+/area/engineering/lobby)
"aDA" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 8
@@ -16082,7 +16097,7 @@
/turf/open/floor/plasteel/dark/corner{
dir = 1
},
-/area/engineering/break_room)
+/area/engineering/lobby)
"aDB" = (
/obj/item/kirbyplants{
icon_state = "plant-21"
@@ -16091,7 +16106,7 @@
dir = 4
},
/turf/open/floor/plasteel/checker,
-/area/engineering/break_room)
+/area/engineering/lobby)
"aDC" = (
/obj/structure/table/reinforced,
/obj/item/airlock_painter,
@@ -16596,7 +16611,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/structure/sign/warning/nosmoking,
/turf/closed/wall/r_wall,
-/area/engineering/break_room)
+/area/engineering/lobby)
"aEB" = (
/obj/machinery/atmospherics/components/unary/portables_connector/visible{
dir = 4
@@ -16608,7 +16623,7 @@
/turf/open/floor/plasteel/white/corner{
dir = 1
},
-/area/engineering/break_room)
+/area/engineering/lobby)
"aEC" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 9
@@ -16617,26 +16632,26 @@
icon_state = "1-2"
},
/turf/open/floor/plasteel,
-/area/engineering/break_room)
+/area/engineering/lobby)
"aED" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 8
},
/turf/open/floor/plasteel,
-/area/engineering/break_room)
+/area/engineering/lobby)
"aEE" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/turf/open/floor/plasteel,
-/area/engineering/break_room)
+/area/engineering/lobby)
"aEF" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 1
},
/turf/open/floor/plasteel,
-/area/engineering/break_room)
+/area/engineering/lobby)
"aEG" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -16645,7 +16660,7 @@
dir = 4
},
/turf/open/floor/plasteel,
-/area/engineering/break_room)
+/area/engineering/lobby)
"aEH" = (
/obj/machinery/door/firedoor,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -16655,7 +16670,7 @@
name = "Engineering Foyer"
},
/turf/open/floor/plasteel,
-/area/engineering/break_room)
+/area/engineering/lobby)
"aEI" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -17202,7 +17217,7 @@
/turf/open/floor/plasteel/white/corner{
dir = 1
},
-/area/engineering/break_room)
+/area/engineering/lobby)
"aFD" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 10
@@ -17217,7 +17232,7 @@
icon_state = "2-4"
},
/turf/open/floor/plasteel,
-/area/engineering/break_room)
+/area/engineering/lobby)
"aFE" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/structure/cable/white{
@@ -17231,7 +17246,7 @@
icon_state = "2-4"
},
/turf/open/floor/plasteel,
-/area/engineering/break_room)
+/area/engineering/lobby)
"aFF" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 8
@@ -17241,7 +17256,7 @@
},
/obj/effect/landmark/event_spawn,
/turf/open/floor/plasteel,
-/area/engineering/break_room)
+/area/engineering/lobby)
"aFG" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -17251,7 +17266,7 @@
icon_state = "4-8"
},
/turf/open/floor/plasteel,
-/area/engineering/break_room)
+/area/engineering/lobby)
"aFH" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -17261,7 +17276,7 @@
},
/obj/effect/turf_decal/tile/yellow,
/turf/open/floor/plasteel,
-/area/engineering/break_room)
+/area/engineering/lobby)
"aFI" = (
/obj/machinery/door/firedoor,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -17274,7 +17289,7 @@
name = "Engineering Foyer"
},
/turf/open/floor/plasteel,
-/area/engineering/break_room)
+/area/engineering/lobby)
"aFJ" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -17615,7 +17630,7 @@
/turf/open/floor/plasteel/white/corner{
dir = 1
},
-/area/engineering/break_room)
+/area/engineering/lobby)
"aGq" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 4
@@ -17627,7 +17642,7 @@
dir = 8
},
/turf/open/floor/plasteel,
-/area/engineering/break_room)
+/area/engineering/lobby)
"aGr" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/light,
@@ -17646,28 +17661,28 @@
dir = 8
},
/turf/open/floor/plasteel,
-/area/engineering/break_room)
+/area/engineering/lobby)
"aGs" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/effect/turf_decal/tile/yellow{
dir = 8
},
/turf/open/floor/plasteel,
-/area/engineering/break_room)
+/area/engineering/lobby)
"aGt" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 1
},
/obj/effect/turf_decal/tile/yellow,
/turf/open/floor/plasteel,
-/area/engineering/break_room)
+/area/engineering/lobby)
"aGu" = (
/obj/item/kirbyplants{
icon_state = "plant-22"
},
/obj/effect/turf_decal/tile/yellow,
/turf/open/floor/plasteel,
-/area/engineering/break_room)
+/area/engineering/lobby)
"aGv" = (
/obj/structure/table/reinforced,
/obj/item/stock_parts/cell/high,
@@ -20008,7 +20023,6 @@
/obj/structure/cable/white{
icon_state = "4-8"
},
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 8
},
@@ -21046,6 +21060,10 @@
dir = 1;
pixel_y = 1
},
+/obj/machinery/camera{
+ c_tag = "Hydroponics South";
+ dir = 9
+ },
/turf/open/floor/grass,
/area/service/hydroponics)
"aMt" = (
@@ -21434,7 +21452,7 @@
icon_state = "1-2"
},
/obj/machinery/camera{
- c_tag = "Atmospherics South West";
+ c_tag = "Central Hallway West 2";
dir = 4
},
/turf/open/floor/plasteel{
@@ -21580,10 +21598,6 @@
"aNu" = (
/obj/structure/closet/crate/bin,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/machinery/camera{
- c_tag = "Hydroponics South";
- dir = 8
- },
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel/dark/side,
/area/service/hydroponics)
@@ -23309,7 +23323,7 @@
pixel_y = -32
},
/obj/machinery/camera{
- c_tag = "Starboard Primary Hallway 3";
+ c_tag = "Starboard Primary Hallway";
dir = 1
},
/obj/effect/turf_decal/bot,
@@ -23475,18 +23489,14 @@
/area/engineering/main)
"aQU" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
/obj/structure/cable/white{
icon_state = "1-2"
},
-/obj/machinery/door/airlock/maintenance_hatch{
- name = "Maintenance Hatch";
- req_access_txt = "12"
+/obj/machinery/light/small{
+ dir = 4
},
-/turf/open/floor/plasteel,
-/area/maintenance/port/aft)
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
"aQV" = (
/obj/machinery/computer/arcade{
dir = 4
@@ -24002,6 +24012,10 @@
dir = 1
},
/obj/machinery/holopad,
+/obj/machinery/light_switch{
+ pixel_x = 12;
+ pixel_y = 32
+ },
/turf/open/floor/plasteel/white,
/area/medical/virology)
"aSf" = (
@@ -24087,6 +24101,10 @@
/area/medical/chemistry)
"aSo" = (
/obj/effect/landmark/event_spawn,
+/obj/machinery/light_switch{
+ pixel_x = 24;
+ pixel_y = -24
+ },
/turf/open/floor/plasteel/dark,
/area/medical/morgue)
"aSp" = (
@@ -24615,22 +24633,22 @@
/obj/structure/table/wood,
/obj/item/flashlight/lamp,
/turf/open/floor/plasteel/grimy,
-/area/commons/lounge)
+/area/hallway/primary/aft)
"aTz" = (
/obj/structure/chair/comfy/brown,
/turf/open/floor/plasteel/grimy,
-/area/commons/lounge)
+/area/hallway/primary/aft)
"aTA" = (
/obj/item/kirbyplants{
icon_state = "plant-18"
},
/turf/open/floor/plasteel/grimy,
-/area/commons/lounge)
+/area/hallway/primary/aft)
"aTB" = (
/obj/structure/chair/comfy/brown,
/obj/effect/landmark/start/assistant,
/turf/open/floor/plasteel/grimy,
-/area/commons/lounge)
+/area/hallway/primary/aft)
"aTC" = (
/obj/structure/table/wood,
/obj/item/storage/fancy/donut_box,
@@ -24638,7 +24656,7 @@
c_tag = "Arrivals Lounge"
},
/turf/open/floor/plasteel/grimy,
-/area/commons/lounge)
+/area/hallway/primary/aft)
"aTD" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel,
@@ -24928,7 +24946,9 @@
/turf/open/floor/wood,
/area/service/library)
"aUh" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 9
+ },
/turf/closed/wall/r_wall,
/area/medical/virology)
"aUi" = (
@@ -25071,16 +25091,16 @@
dir = 4
},
/turf/open/floor/plasteel/grimy,
-/area/commons/lounge)
+/area/hallway/primary/aft)
"aUy" = (
/turf/open/floor/carpet,
-/area/commons/lounge)
+/area/hallway/primary/aft)
"aUz" = (
/obj/structure/chair/comfy/brown{
dir = 8
},
/turf/open/floor/plasteel/grimy,
-/area/commons/lounge)
+/area/hallway/primary/aft)
"aUA" = (
/obj/machinery/rnd/destructive_analyzer,
/obj/effect/turf_decal/stripes/line{
@@ -25350,6 +25370,7 @@
name = "Station Intercom";
pixel_x = 26
},
+/obj/item/chisel,
/turf/open/floor/plasteel/dark,
/area/service/library)
"aVc" = (
@@ -25498,17 +25519,17 @@
dir = 8
},
/turf/open/floor/plasteel/grimy,
-/area/commons/lounge)
+/area/hallway/primary/aft)
"aVq" = (
/obj/machinery/holopad,
/turf/open/floor/carpet,
-/area/commons/lounge)
+/area/hallway/primary/aft)
"aVr" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 4
},
/turf/open/floor/plasteel/grimy,
-/area/commons/lounge)
+/area/hallway/primary/aft)
"aVt" = (
/obj/machinery/computer/rdconsole/core{
dir = 4
@@ -26261,7 +26282,7 @@
/obj/structure/table/wood,
/obj/item/reagent_containers/food/snacks/chips,
/turf/open/floor/plasteel/grimy,
-/area/commons/lounge)
+/area/hallway/primary/aft)
"aWQ" = (
/obj/structure/chair/comfy/brown{
buildstackamount = 0;
@@ -26273,7 +26294,7 @@
pixel_y = -22
},
/turf/open/floor/plasteel/grimy,
-/area/commons/lounge)
+/area/hallway/primary/aft)
"aWR" = (
/obj/item/kirbyplants{
icon_state = "plant-21";
@@ -26285,7 +26306,7 @@
pixel_y = -32
},
/turf/open/floor/plasteel/grimy,
-/area/commons/lounge)
+/area/hallway/primary/aft)
"aWS" = (
/obj/structure/chair/comfy/brown{
buildstackamount = 0;
@@ -26296,13 +26317,13 @@
pixel_y = -24
},
/turf/open/floor/plasteel/grimy,
-/area/commons/lounge)
+/area/hallway/primary/aft)
"aWT" = (
/obj/structure/table/wood,
/obj/item/folder,
/obj/item/pen,
/turf/open/floor/plasteel/grimy,
-/area/commons/lounge)
+/area/hallway/primary/aft)
"aWU" = (
/obj/machinery/door/firedoor,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
@@ -26793,12 +26814,12 @@
/turf/open/floor/plating,
/area/medical/medbay/zone3)
"aXS" = (
-/obj/machinery/sleeper{
- dir = 4
- },
/obj/effect/turf_decal/stripes/line{
dir = 6
},
+/obj/machinery/sleeper{
+ dir = 4
+ },
/turf/open/floor/plasteel/dark/side{
dir = 8
},
@@ -26876,20 +26897,12 @@
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
"aYe" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
+/obj/machinery/airalarm{
+ dir = 8;
+ pixel_x = 24
},
-/obj/machinery/power/apc{
- areastring = "/area/commons/lounge";
- dir = 1;
- name = "Lounge APC";
- pixel_y = 23
- },
-/obj/structure/cable/white{
- icon_state = "0-2"
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/aft)
+/turf/open/floor/plasteel/white/corner,
+/area/commons/dorms)
"aYf" = (
/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden,
/turf/open/floor/plasteel,
@@ -26991,7 +27004,7 @@
/area/science/research)
"aYp" = (
/obj/machinery/camera{
- c_tag = "Communications Relay";
+ c_tag = "Telecommunications Relay";
dir = 8;
network = list("ss13","tcomms")
},
@@ -28145,9 +28158,6 @@
/turf/open/floor/plating,
/area/medical/medbay/zone3)
"bax" = (
-/obj/machinery/sleeper{
- dir = 4
- },
/obj/machinery/newscaster{
pixel_y = -32
},
@@ -28157,6 +28167,9 @@
/obj/effect/turf_decal/stripes/end{
dir = 4
},
+/obj/machinery/stasis{
+ dir = 4
+ },
/turf/open/floor/plasteel/dark/side{
dir = 8
},
@@ -30415,6 +30428,10 @@
},
/obj/effect/turf_decal/stripes/line,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/machinery/camera{
+ c_tag = "Toxins Lab";
+ network = list("ss13","rd")
+ },
/turf/open/floor/plasteel/dark/side{
dir = 1
},
@@ -33375,7 +33392,7 @@
icon_state = "1-2"
},
/obj/machinery/camera{
- c_tag = "Starboard Primary Hallway 2";
+ c_tag = "Starboard Primary Hallway 3";
dir = 8
},
/turf/open/floor/plasteel,
@@ -33433,7 +33450,7 @@
"blm" = (
/obj/structure/closet/emcloset,
/obj/machinery/camera{
- c_tag = "Starboard Primary Hallway"
+ c_tag = "Starboard Primary Hallway 1"
},
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel/dark/side{
@@ -35282,7 +35299,7 @@
"fgG" = (
/obj/machinery/status_display/ai,
/turf/closed/wall,
-/area/commons/lounge)
+/area/hallway/primary/aft)
"fgZ" = (
/obj/structure/girder/reinforced,
/obj/effect/turf_decal/sand/plating,
@@ -35877,6 +35894,10 @@
/obj/effect/turf_decal/stripes/line{
dir = 9
},
+/obj/machinery/light_switch{
+ dir = 9;
+ pixel_x = -22
+ },
/turf/open/floor/plasteel/dark,
/area/command/gateway)
"hIu" = (
@@ -35924,9 +35945,6 @@
/obj/structure/cable/white{
icon_state = "0-8"
},
-/obj/structure/cable/white{
- icon_state = "1-8"
- },
/turf/open/floor/plasteel{
heat_capacity = 1e+006
},
@@ -36155,6 +36173,13 @@
/obj/item/toy/poolnoodle/red,
/turf/open/floor/wood,
/area/maintenance/starboard/aft)
+"iUa" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 8
+ },
+/turf/closed/wall/r_wall,
+/area/engineering/gravity_generator)
"iUq" = (
/obj/machinery/status_display,
/turf/closed/wall,
@@ -36951,7 +36976,7 @@
/area/asteroid/nearstation)
"lIM" = (
/turf/closed/wall/rust,
-/area/commons/lounge)
+/area/hallway/primary/aft)
"lMu" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -37333,10 +37358,6 @@
/obj/machinery/firealarm{
pixel_y = 24
},
-/obj/machinery/camera{
- c_tag = "Toxins Lab West";
- network = list("ss13","rd")
- },
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel/dark/side{
dir = 1
@@ -38475,6 +38496,9 @@
/obj/structure/cable/white{
icon_state = "4-8"
},
+/obj/structure/cable/white{
+ icon_state = "2-8"
+ },
/turf/open/floor/plating,
/area/maintenance/starboard)
"sEq" = (
@@ -38484,7 +38508,7 @@
"sEG" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
-/area/commons/lounge)
+/area/hallway/primary/aft)
"sEJ" = (
/obj/structure/cable/white{
icon_state = "1-2"
@@ -38522,6 +38546,9 @@
name = "Technology Storage";
req_access_txt = "23"
},
+/obj/structure/cable/white{
+ icon_state = "1-2"
+ },
/turf/open/floor/plasteel/dark,
/area/engineering/storage/tech)
"sEQ" = (
@@ -38548,9 +38575,21 @@
pixel_x = -3;
pixel_y = -3
},
+/obj/machinery/power/apc{
+ areastring = "/area/engineering/storage/tech";
+ dir = 1;
+ name = "Tech Storage APC";
+ pixel_y = 23
+ },
+/obj/structure/cable/white{
+ icon_state = "0-4"
+ },
/turf/open/floor/plasteel/dark,
/area/engineering/storage/tech)
"sFo" = (
+/obj/structure/cable/white{
+ icon_state = "1-8"
+ },
/turf/open/floor/plasteel/dark/side{
dir = 9
},
@@ -38620,6 +38659,10 @@
pixel_x = -4;
pixel_y = -4
},
+/obj/machinery/camera{
+ c_tag = "Tech Storage";
+ dir = 4
+ },
/turf/open/floor/plasteel/dark,
/area/engineering/storage/tech)
"sFS" = (
@@ -38645,6 +38688,14 @@
/obj/item/electronics/apc,
/obj/item/electronics/airlock,
/obj/item/stock_parts/cell/high,
+/obj/machinery/airalarm{
+ dir = 8;
+ pixel_x = 24
+ },
+/obj/machinery/light_switch{
+ pixel_x = -6;
+ pixel_y = -24
+ },
/turf/open/floor/plasteel/dark,
/area/engineering/storage/tech)
"sFX" = (
@@ -39226,7 +39277,7 @@
/obj/effect/turf_decal/delivery,
/obj/effect/turf_decal/stripes/line,
/obj/machinery/camera{
- c_tag = "AI Chamber - Core";
+ c_tag = "AI Chamber - Core Fore";
name = "core camera";
network = list("rd")
},
@@ -39536,7 +39587,7 @@
dir = 10
},
/obj/machinery/camera{
- c_tag = "AI Chamber - Core";
+ c_tag = "AI Chamber - Core Aft";
name = "core camera";
network = list("rd")
},
@@ -40072,7 +40123,7 @@
"sNz" = (
/obj/item/beacon,
/turf/open/floor/carpet,
-/area/commons/lounge)
+/area/hallway/primary/aft)
"sNA" = (
/obj/effect/turf_decal/stripes/line{
dir = 10
@@ -40640,7 +40691,7 @@
/area/hallway/secondary/entry)
"tWh" = (
/turf/closed/wall,
-/area/commons/lounge)
+/area/hallway/primary/aft)
"tWQ" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -40860,7 +40911,7 @@
"uuU" = (
/obj/machinery/status_display,
/turf/closed/wall,
-/area/commons/lounge)
+/area/hallway/primary/aft)
"uuX" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -41484,7 +41535,9 @@
/area/science/mixing)
"wQj" = (
/obj/effect/turf_decal/bot,
-/obj/machinery/atmospherics/components/unary/thermomachine/freezer,
+/obj/machinery/atmospherics/components/unary/thermomachine/freezer{
+ dir = 1
+ },
/turf/open/floor/plasteel/dark,
/area/engineering/main)
"wRY" = (
@@ -41570,7 +41623,7 @@
dir = 4
},
/obj/machinery/camera{
- c_tag = "Security Checkpoint";
+ c_tag = "Science Foyer";
dir = 6
},
/turf/open/floor/plasteel,
@@ -41666,7 +41719,7 @@
"xwu" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
-/area/engineering/break_room)
+/area/engineering/lobby)
"xxx" = (
/obj/structure/chair/stool/bar,
/obj/effect/turf_decal/tile/red{
@@ -70849,7 +70902,7 @@ amF
anw
anO
aop
-aGe
+iUa
aJl
aKu
aLI
@@ -76781,7 +76834,7 @@ aQW
aQW
sJI
aPO
-aQU
+aXv
aRV
aUb
aUu
@@ -79067,7 +79120,7 @@ jJn
bxJ
aDD
aBQ
-aDD
+aYe
aDF
aEN
awQ
@@ -83972,7 +84025,7 @@ aUy
aUy
aWS
lIM
-aYe
+ugK
hOc
byo
baK
@@ -87522,7 +87575,7 @@ bym
bdi
bdF
bxw
-bym
+aQU
afB
agu
ahj
diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm
index 4078c690d4..2c01f48150 100644
--- a/_maps/map_files/PubbyStation/PubbyStation.dmm
+++ b/_maps/map_files/PubbyStation/PubbyStation.dmm
@@ -5229,6 +5229,10 @@
/obj/structure/cable{
icon_state = "2-8"
},
+/obj/machinery/light_switch{
+ pixel_x = 24;
+ pixel_y = 24
+ },
/turf/open/floor/plasteel,
/area/security/brig)
"anw" = (
@@ -15212,6 +15216,10 @@
/obj/structure/cable{
icon_state = "1-8"
},
+/obj/machinery/light_switch{
+ pixel_x = 24;
+ pixel_y = 24
+ },
/turf/open/floor/plasteel,
/area/command/teleporter)
"aMa" = (
@@ -15846,6 +15854,10 @@
/obj/effect/turf_decal/stripes/line{
dir = 8
},
+/obj/machinery/light_switch{
+ pixel_x = 24;
+ pixel_y = 24
+ },
/turf/open/floor/plasteel/dark,
/area/ai_monitored/command/storage/eva)
"aNu" = (
@@ -15950,6 +15962,10 @@
/obj/effect/turf_decal/tile/red{
dir = 4
},
+/obj/machinery/light_switch{
+ pixel_x = 24;
+ pixel_y = 24
+ },
/turf/open/floor/plasteel,
/area/security/checkpoint/supply)
"aNH" = (
@@ -16161,6 +16177,7 @@
/obj/effect/turf_decal/tile/blue{
dir = 8
},
+/obj/item/chisel,
/turf/open/floor/plasteel,
/area/commons/storage/art)
"aOu" = (
@@ -16898,6 +16915,10 @@
/area/cargo/warehouse)
"aQe" = (
/obj/effect/spawner/lootdrop/maintenance,
+/obj/machinery/light_switch{
+ pixel_x = -7;
+ pixel_y = -24
+ },
/turf/open/floor/plasteel,
/area/cargo/warehouse)
"aQf" = (
@@ -19482,7 +19503,7 @@
receive_ore_updates = 1
},
/obj/machinery/camera{
- c_tag = "Bar Access"
+ c_tag = "Service Hallway"
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -20644,6 +20665,10 @@
/obj/effect/turf_decal/tile/brown{
dir = 4
},
+/obj/machinery/light_switch{
+ pixel_x = 24;
+ pixel_y = 24
+ },
/turf/open/floor/plasteel,
/area/cargo/office)
"aYs" = (
@@ -21835,6 +21860,10 @@
/obj/effect/turf_decal/tile/red{
dir = 8
},
+/obj/machinery/light_switch{
+ pixel_x = -26;
+ pixel_y = -26
+ },
/turf/open/floor/plasteel,
/area/security/checkpoint/customs)
"baR" = (
@@ -24548,6 +24577,10 @@
/obj/effect/turf_decal/tile/brown{
dir = 8
},
+/obj/machinery/light_switch{
+ pixel_x = -6;
+ pixel_y = -24
+ },
/turf/open/floor/plasteel,
/area/cargo/miningdock)
"bht" = (
@@ -25504,6 +25537,9 @@
/obj/effect/turf_decal/tile/red{
dir = 4
},
+/obj/machinery/light_switch{
+ pixel_y = 22
+ },
/turf/open/floor/plasteel,
/area/security/checkpoint/medical)
"bkb" = (
@@ -26499,6 +26535,9 @@
/obj/machinery/vending/wallmed{
pixel_y = -28
},
+/obj/machinery/light_switch{
+ pixel_x = -23
+ },
/turf/open/floor/plasteel/dark,
/area/medical/paramedic)
"bmn" = (
@@ -30452,6 +30491,9 @@
/obj/effect/turf_decal/tile/purple{
dir = 8
},
+/obj/machinery/light_switch{
+ pixel_x = 24
+ },
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
"bva" = (
@@ -31157,6 +31199,10 @@
dir = 4
},
/obj/structure/disposalpipe/segment,
+/obj/machinery/light_switch{
+ dir = 8;
+ pixel_x = 24
+ },
/turf/open/floor/plasteel/white,
/area/medical/medbay/zone3)
"bwE" = (
@@ -32683,9 +32729,6 @@
/turf/open/floor/plasteel/white,
/area/medical/medbay/zone3)
"bzP" = (
-/obj/machinery/sleeper{
- dir = 4
- },
/obj/effect/turf_decal/stripes/line{
dir = 1
},
@@ -32702,6 +32745,9 @@
/obj/effect/turf_decal/tile/blue{
dir = 8
},
+/obj/machinery/sleeper{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/medical/treatment_center)
"bzQ" = (
@@ -32738,6 +32784,10 @@
/obj/effect/turf_decal/tile/blue{
dir = 4
},
+/obj/machinery/light_switch{
+ pixel_x = 24;
+ pixel_y = 24
+ },
/turf/open/floor/plasteel/white,
/area/medical/treatment_center)
"bzU" = (
@@ -33911,9 +33961,6 @@
/turf/open/floor/plasteel,
/area/medical/treatment_center)
"bCj" = (
-/obj/machinery/sleeper{
- dir = 4
- },
/obj/effect/turf_decal/tile/blue{
dir = 1
},
@@ -33924,6 +33971,9 @@
/obj/effect/turf_decal/tile/blue{
dir = 8
},
+/obj/machinery/stasis{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/medical/treatment_center)
"bCl" = (
@@ -35453,6 +35503,10 @@
/obj/effect/turf_decal/tile/red{
dir = 8
},
+/obj/machinery/light_switch{
+ pixel_x = 24;
+ pixel_y = -24
+ },
/turf/open/floor/plasteel,
/area/security/checkpoint/science)
"bEZ" = (
@@ -37187,6 +37241,10 @@
/obj/structure/cable{
icon_state = "0-8"
},
+/obj/machinery/light_switch{
+ pixel_x = 24;
+ pixel_y = -24
+ },
/turf/open/floor/engine,
/area/science/storage)
"bII" = (
@@ -37973,7 +38031,7 @@
layer = 4.5
},
/turf/open/floor/plasteel/freezer,
-/area/medical/exam_room)
+/area/medical/medbay/central)
"bKw" = (
/obj/machinery/vending/wallmed{
pixel_y = 28
@@ -37986,7 +38044,7 @@
},
/obj/effect/landmark/xeno_spawn,
/turf/open/floor/plasteel/freezer,
-/area/medical/exam_room)
+/area/medical/medbay/central)
"bKx" = (
/obj/machinery/button/door{
id = "patientB";
@@ -38000,7 +38058,7 @@
dir = 4
},
/turf/open/floor/plasteel/freezer,
-/area/medical/exam_room)
+/area/medical/medbay/central)
"bKy" = (
/obj/machinery/door/airlock/medical{
name = "Patient Room";
@@ -38010,7 +38068,7 @@
dir = 4
},
/turf/open/floor/plasteel/freezer,
-/area/medical/exam_room)
+/area/medical/medbay/central)
"bKz" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -38462,7 +38520,7 @@
pixel_x = -22
},
/turf/open/floor/plasteel/freezer,
-/area/medical/exam_room)
+/area/medical/medbay/central)
"bLG" = (
/obj/structure/chair/office/light{
dir = 8
@@ -38470,15 +38528,19 @@
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 4
},
+/obj/machinery/airalarm{
+ dir = 1;
+ pixel_y = -22
+ },
/turf/open/floor/plasteel/freezer,
-/area/medical/exam_room)
+/area/medical/medbay/central)
"bLH" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/obj/structure/closet/secure_closet/personal/patient,
/turf/open/floor/plasteel/freezer,
-/area/medical/exam_room)
+/area/medical/medbay/central)
"bLI" = (
/obj/machinery/door/poddoor/shutters/preopen{
id = "patientB";
@@ -38489,7 +38551,7 @@
},
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
-/area/medical/exam_room)
+/area/medical/medbay/central)
"bLJ" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
/obj/effect/turf_decal/tile/blue{
@@ -40138,6 +40200,10 @@
/obj/structure/disposalpipe/sorting/mail{
sortType = 6
},
+/obj/machinery/light_switch{
+ pixel_x = 24;
+ pixel_y = 24
+ },
/turf/open/floor/plasteel,
/area/engineering/atmos)
"bPP" = (
@@ -40557,6 +40623,9 @@
dir = 4
},
/obj/effect/turf_decal/tile/yellow,
+/obj/machinery/light{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/engineering/atmos)
"bQI" = (
@@ -42547,6 +42616,10 @@
/obj/effect/turf_decal/tile/red{
dir = 8
},
+/obj/machinery/light_switch{
+ pixel_x = -24;
+ pixel_y = -13
+ },
/turf/open/floor/plasteel,
/area/security/checkpoint/engineering)
"bUW" = (
@@ -47468,6 +47541,10 @@
/area/maintenance/department/security/brig)
"clm" = (
/obj/machinery/photocopier,
+/obj/machinery/light_switch{
+ pixel_x = -24;
+ pixel_y = -8
+ },
/turf/open/floor/plasteel/dark,
/area/service/library/lounge)
"cln" = (
@@ -50925,8 +51002,11 @@
/turf/open/floor/plasteel/dark,
/area/service/library)
"czP" = (
-/turf/closed/mineral,
-/area/maintenance/department/chapel/monastery)
+/obj/machinery/light_switch{
+ pixel_x = -24
+ },
+/turf/open/floor/carpet/black,
+/area/service/chapel/office)
"czQ" = (
/obj/structure/table/wood,
/obj/item/storage/bag/books,
@@ -53664,7 +53744,7 @@
/area/security/courtroom)
"gDR" = (
/obj/machinery/camera{
- c_tag = "Central Primary Hallway Escape";
+ c_tag = "Aft Primary Hallway Medsci";
dir = 4
},
/obj/effect/turf_decal/tile/blue{
@@ -53944,7 +54024,7 @@
"gXZ" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/camera{
- c_tag = "Engineering Supermatter Fore";
+ c_tag = "Engineering Supermatter Port";
dir = 4;
network = list("ss13","engine")
},
@@ -57485,6 +57565,10 @@
pixel_y = -32
},
/obj/item/gavelhammer,
+/obj/machinery/light_switch{
+ pixel_x = -26;
+ pixel_y = 26
+ },
/turf/open/floor/plasteel,
/area/security/courtroom)
"nih" = (
@@ -59200,6 +59284,9 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
+/obj/machinery/light_switch{
+ pixel_x = -25
+ },
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
"pNy" = (
@@ -59419,8 +59506,15 @@
/turf/open/floor/plating,
/area/maintenance/department/engine)
"qdY" = (
-/turf/closed/wall,
-/area/medical/exam_room)
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/machinery/light_switch{
+ pixel_x = 24;
+ pixel_y = -24
+ },
+/turf/open/floor/plasteel/dark,
+/area/service/library)
"qeY" = (
/turf/closed/wall/r_wall,
/area/engineering/supermatter)
@@ -59868,6 +59962,9 @@
/obj/effect/turf_decal/tile/blue{
dir = 4
},
+/obj/machinery/light_switch{
+ pixel_x = -25
+ },
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
"qVP" = (
@@ -61786,7 +61883,7 @@
name = "Defense"
},
/obj/machinery/camera{
- c_tag = "Atmospherics Starboard";
+ c_tag = "Atmospherics Hallway";
dir = 8
},
/obj/effect/turf_decal/tile/purple,
@@ -75511,7 +75608,7 @@ csd
csd
csB
csd
-csd
+czP
cBM
aaa
aaa
@@ -83005,7 +83102,7 @@ hlj
cAg
cAt
ckH
-hlj
+qdY
lEh
cyU
aaa
@@ -85028,10 +85125,10 @@ aht
cjm
cvK
cjm
-czP
-czP
-czP
-czP
+cfN
+cfN
+cfN
+cfN
cAj
eNc
cfN
@@ -85285,10 +85382,10 @@ cjm
cjm
cwg
cjm
-czP
+cfN
kJo
-czP
-czP
+cfN
+cfN
cAj
eNc
cjm
@@ -85545,7 +85642,7 @@ cjm
cwg
eNc
czt
-czP
+cfN
qWo
lxI
xVt
@@ -85802,8 +85899,8 @@ cjm
eNc
czl
cjm
-czP
-czP
+cfN
+cfN
eNc
cjm
cjm
@@ -91164,7 +91261,7 @@ bIe
bjc
bKv
bLF
-qdY
+bjc
bNS
bCz
bPB
@@ -91421,7 +91518,7 @@ bIf
bjc
bKw
bLG
-qdY
+bjc
bNT
bCz
bPB
@@ -91678,7 +91775,7 @@ bIg
bjc
bKx
bLH
-qdY
+bjc
bNU
bCz
bPB
@@ -91935,7 +92032,7 @@ bkb
bjc
bKy
bLI
-qdY
+bjc
bjc
bCz
bPB
diff --git a/_maps/map_files/Snaxi/Snaxi.dmm b/_maps/map_files/Snaxi/Snaxi.dmm
index 1db8a64a97..4def794b4f 100644
--- a/_maps/map_files/Snaxi/Snaxi.dmm
+++ b/_maps/map_files/Snaxi/Snaxi.dmm
@@ -11007,9 +11007,7 @@
/obj/effect/turf_decal/tile/blue{
dir = 4
},
-/obj/machinery/sleeper{
- dir = 8
- },
+/obj/machinery/stasis,
/turf/open/floor/plasteel/white,
/area/medical/medbay/zone2)
"aPZ" = (
@@ -20516,9 +20514,6 @@
/turf/open/floor/plating,
/area/maintenance/solars/starboard/aft)
"fUX" = (
-/obj/machinery/sleeper{
- dir = 4
- },
/obj/structure/window/reinforced{
dir = 1
},
@@ -20528,6 +20523,9 @@
/obj/effect/turf_decal/stripes/line{
dir = 9
},
+/obj/machinery/sleeper{
+ dir = 4
+ },
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
"fVm" = (
@@ -23736,9 +23734,6 @@
/turf/open/floor/plasteel/dark,
/area/security/office)
"hWn" = (
-/obj/machinery/sleeper{
- dir = 8
- },
/obj/structure/window/reinforced{
dir = 1
},
@@ -23755,6 +23750,7 @@
/obj/effect/turf_decal/stripes/line{
dir = 1
},
+/obj/machinery/stasis,
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
"hWp" = (
@@ -29421,9 +29417,6 @@
/turf/open/floor/plasteel/dark,
/area/ai_monitored/turret_protected/ai_upload_foyer)
"lOX" = (
-/obj/machinery/sleeper{
- dir = 8
- },
/obj/structure/window/reinforced,
/obj/structure/mirror{
pixel_x = 25
@@ -29433,6 +29426,7 @@
},
/obj/effect/turf_decal/tile/blue,
/obj/effect/turf_decal/stripes/line,
+/obj/machinery/stasis,
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
"lPB" = (
@@ -43682,6 +43676,7 @@
/obj/structure/table,
/obj/item/toy/cards/deck,
/obj/item/storage/crayons,
+/obj/item/chisel,
/turf/open/floor/plasteel/grimy,
/area/commons/fitness/recreation)
"uWC" = (
@@ -44164,9 +44159,7 @@
/obj/effect/turf_decal/tile/blue{
dir = 4
},
-/obj/machinery/sleeper{
- dir = 8
- },
+/obj/machinery/stasis,
/turf/open/floor/plasteel/white,
/area/medical/medbay/zone3)
"vkk" = (
@@ -46270,9 +46263,6 @@
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
"wut" = (
-/obj/machinery/sleeper{
- dir = 4
- },
/obj/structure/window/reinforced,
/obj/structure/window/reinforced{
dir = 8
@@ -46281,6 +46271,9 @@
/obj/effect/turf_decal/stripes/line{
dir = 10
},
+/obj/machinery/sleeper{
+ dir = 4
+ },
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
"wuC" = (
diff --git a/_maps/map_files/SpookyStation/SpookyStation.dmm b/_maps/map_files/SpookyStation/SpookyStation.dmm
index 90ba06f372..b40f7adaab 100644
--- a/_maps/map_files/SpookyStation/SpookyStation.dmm
+++ b/_maps/map_files/SpookyStation/SpookyStation.dmm
@@ -4981,7 +4981,7 @@
/turf/open/floor/wood,
/area/eventmap/inside)
"aoJ" = (
-/obj/mecha/working/ripley/deathripley{
+/obj/vehicle/sealed/mecha/working/ripley/deathripley{
equipment_disabled = 1;
light_color = "#FAA019";
lights_power = 3
diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm
index 4fb880fb4d..a147773cd1 100644
--- a/_maps/map_files/generic/CentCom.dmm
+++ b/_maps/map_files/generic/CentCom.dmm
@@ -1121,7 +1121,7 @@
dir = 8
},
/obj/machinery/sleeper{
- dir = 1
+ dir = 4
},
/turf/open/floor/holofloor{
icon_state = "white"
@@ -1134,9 +1134,7 @@
},
/area/holodeck/rec_center/medical)
"dd" = (
-/obj/machinery/sleeper{
- dir = 1
- },
+/obj/machinery/stasis,
/turf/open/floor/holofloor{
icon_state = "white"
},
@@ -11920,12 +11918,12 @@
/turf/open/floor/plasteel/white,
/area/centcom/control)
"BH" = (
-/obj/machinery/sleeper{
- dir = 4
- },
/obj/effect/turf_decal/stripes/line{
dir = 9
},
+/obj/machinery/sleeper{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/centcom/control)
"BI" = (
@@ -11940,12 +11938,10 @@
/turf/open/floor/plasteel,
/area/centcom/control)
"BJ" = (
-/obj/machinery/sleeper{
- dir = 8
- },
/obj/effect/turf_decal/stripes/line{
dir = 5
},
+/obj/machinery/stasis,
/turf/open/floor/plasteel,
/area/centcom/control)
"BK" = (
@@ -16449,8 +16445,8 @@
/turf/open/floor/holofloor/wood,
/area/holodeck/rec_center/wrestlingarena)
"Lh" = (
-/obj/machinery/sleeper{
- dir = 8
+/obj/machinery/stasis{
+ dir = 4
},
/turf/open/floor/mineral/titanium/blue,
/area/centcom/evac)
@@ -17335,6 +17331,12 @@
/obj/effect/turf_decal/delivery,
/turf/open/floor/plating,
/area/syndicate_mothership)
+"Pa" = (
+/obj/machinery/sleeper{
+ dir = 8
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/centcom/evac)
"Pg" = (
/obj/machinery/light{
dir = 1
@@ -46068,7 +46070,7 @@ KH
KY
Lb
KV
-Lh
+Pa
Lb
Li
Li
@@ -46325,7 +46327,7 @@ KO
KV
KV
KV
-Lb
+Lh
Lb
Lp
Lp
diff --git a/_maps/shuttles/aux_base_default.dmm b/_maps/shuttles/aux_base_default.dmm
index 684a78e980..7587fb40da 100644
--- a/_maps/shuttles/aux_base_default.dmm
+++ b/_maps/shuttles/aux_base_default.dmm
@@ -52,11 +52,7 @@
/area/shuttle/auxillary_base)
"P" = (
/obj/docking_port/mobile/auxillary_base{
- dheight = 4;
- dir = 2;
- dwidth = 4;
- height = 9;
- width = 9
+ dir = 2
},
/obj/machinery/bluespace_beacon,
/obj/machinery/computer/auxillary_base,
@@ -77,6 +73,7 @@
/area/shuttle/auxillary_base)
"X" = (
/obj/machinery/camera{
+ c_tag = "Auxiliary Base Platform";
dir = 1;
network = list("auxbase")
},
diff --git a/_maps/shuttles/aux_base_small.dmm b/_maps/shuttles/aux_base_small.dmm
index fc507ea3d8..4dcc35c78b 100644
--- a/_maps/shuttles/aux_base_small.dmm
+++ b/_maps/shuttles/aux_base_small.dmm
@@ -35,6 +35,7 @@
/area/shuttle/auxillary_base)
"h" = (
/obj/machinery/camera{
+ c_tag = "Auxiliary Base Platform";
dir = 1;
network = list("auxbase")
},
@@ -49,11 +50,7 @@
/area/shuttle/auxillary_base)
"j" = (
/obj/docking_port/mobile/auxillary_base{
- dheight = 4;
- dir = 2;
- dwidth = 4;
- height = 9;
- width = 9
+ dir = 2
},
/obj/machinery/bluespace_beacon,
/obj/machinery/computer/auxillary_base,
diff --git a/_maps/shuttles/emergency_discoinferno.dmm b/_maps/shuttles/emergency_discoinferno.dmm
index 92b515f17e..755198fe8a 100644
--- a/_maps/shuttles/emergency_discoinferno.dmm
+++ b/_maps/shuttles/emergency_discoinferno.dmm
@@ -89,7 +89,7 @@
"q" = (
/obj/structure/statue/plasma/scientist{
anchored = 1;
- oreAmount = 50
+ custom_materials = list(/datum/material/plasma = 100000)
},
/turf/open/floor/light/colour_cycle,
/area/shuttle/escape)
diff --git a/auxmos.dll b/auxmos.dll
index eb7e3b71fc..4e0687fa2b 100644
Binary files a/auxmos.dll and b/auxmos.dll differ
diff --git a/auxmos.pdb b/auxmos.pdb
index 5d005d3689..da06980179 100644
Binary files a/auxmos.pdb and b/auxmos.pdb differ
diff --git a/code/__DEFINES/DNA.dm b/code/__DEFINES/DNA.dm
index a5b5cf6dc0..5695995713 100644
--- a/code/__DEFINES/DNA.dm
+++ b/code/__DEFINES/DNA.dm
@@ -179,6 +179,7 @@
#define ORGAN_SLOT_VAGINA "vagina"
#define ORGAN_SLOT_TESTICLES "testicles"
#define ORGAN_SLOT_BREASTS "breasts"
+#define ORGAN_SLOT_BUTT "butt"
////organ defines
#define STANDARD_ORGAN_THRESHOLD 100
diff --git a/code/__DEFINES/_flags/_flags.dm b/code/__DEFINES/_flags/_flags.dm
index a73841eff5..895f37a7a9 100644
--- a/code/__DEFINES/_flags/_flags.dm
+++ b/code/__DEFINES/_flags/_flags.dm
@@ -106,15 +106,18 @@ GLOBAL_LIST_INIT(bitflags, list(
#define PASSBLOB (1<<3)
#define PASSMOB (1<<4)
#define PASSCLOSEDTURF (1<<5)
+/// Let thrown things past us. **ONLY MEANINGFUL ON pass_flags_self!**
#define LETPASSTHROW (1<<6)
+#define PASSMACHINE (1<<7)
+#define PASSSTRUCTURE (1<<8)
//Movement Types
#define GROUND (1<<0)
#define FLYING (1<<1)
#define VENTCRAWLING (1<<2)
#define FLOATING (1<<3)
-///When moving, will Bump()/Cross()/Uncross() everything, but won't be stopped.
-#define UNSTOPPABLE (1<<4)
+///When moving, will Bump()/Cross()/Uncross() everything, but won't stop or Bump() anything.
+#define PHASING (1<<4)
///Applied if you're crawling around on the ground/resting.
#define CRAWLING (1<<5)
diff --git a/code/__DEFINES/atmospherics.dm b/code/__DEFINES/atmospherics.dm
index 35de475d35..6266dcc6d3 100644
--- a/code/__DEFINES/atmospherics.dm
+++ b/code/__DEFINES/atmospherics.dm
@@ -275,6 +275,7 @@
#define GAS_PLASMA "plasma"
#define GAS_H2O "water_vapor"
#define GAS_HYPERNOB "nob"
+#define GAS_NITRIC "no"
#define GAS_NITROUS "n2o"
#define GAS_NITRYL "no2"
#define GAS_HYDROGEN "hydrogen"
@@ -289,6 +290,7 @@
#define GAS_AMMONIA "ammonia"
#define GAS_FLUORINE "fluorine"
#define GAS_ETHANOL "ethanol"
+#define GAS_QCD "qcd"
#define GAS_GROUP_CHEMICALS "Chemicals"
diff --git a/code/__DEFINES/citadel_defines.dm b/code/__DEFINES/citadel_defines.dm
index 04eeb515c9..fa11db38aa 100644
--- a/code/__DEFINES/citadel_defines.dm
+++ b/code/__DEFINES/citadel_defines.dm
@@ -6,12 +6,13 @@
#define CIT_FILTER_STAMINACRIT filter(type="drop_shadow", x=0, y=0, size=-3, color="#04080F")
//organ defines
-#define VAGINA_LAYER_INDEX 1
-#define TESTICLES_LAYER_INDEX 2
-#define GENITAL_LAYER_INDEX 3
-#define PENIS_LAYER_INDEX 4
+#define BUTT_LAYER_INDEX 1
+#define VAGINA_LAYER_INDEX 2
+#define TESTICLES_LAYER_INDEX 3
+#define GENITAL_LAYER_INDEX 4
+#define PENIS_LAYER_INDEX 5
-#define GENITAL_LAYER_INDEX_LENGTH 4 //keep it updated with each new index added, thanks.
+#define GENITAL_LAYER_INDEX_LENGTH 5 //keep it updated with each new index added, thanks.
//genital flags
#define GENITAL_BLACKLISTED (1<<0) //for genitals that shouldn't be added to GLOB.genitals_list.
@@ -62,6 +63,9 @@
#define MILK_RATE_MULT 1
#define MILK_EFFICIENCY 1
+#define BUTT_SIZE_DEF 1
+#define BUTT_SIZE_MAX 5 //butt genitals are special in that they have caps. if there's the event there's even bigger butt sprites, raise this number.
+
//visibility toggles defines to avoid errors typos code errors.
#define GEN_VISIBLE_ALWAYS "Always visible"
#define GEN_VISIBLE_NO_CLOTHES "Hidden by clothes"
@@ -102,6 +106,8 @@
#define GENITAL_EXAMINE (1<<13)
#define VORE_EXAMINE (1<<14)
#define TRASH_FORCEFEED (1<<15)
+#define BUTT_ENLARGEMENT (1<<16)
+//Note: reminder, if you're a coder adding more bitflags here in the event we add more horny things, the maximum is (1<<23).
#define TOGGLES_CITADEL 0
//belly sound pref things
diff --git a/code/__DEFINES/cooldowns.dm b/code/__DEFINES/cooldowns.dm
index b783678c86..39240ed7e5 100644
--- a/code/__DEFINES/cooldowns.dm
+++ b/code/__DEFINES/cooldowns.dm
@@ -31,12 +31,21 @@
#define COOLDOWN_OBJECTIVES "objectives"
#define COOLDOWN_OBJ_ADMIN_PING "obj_admin_ping"
+
+//Mecha cooldowns
+#define COOLDOWN_MECHA_MESSAGE "mecha_message"
+#define COOLDOWN_MECHA_EQUIPMENT "mecha_equipment"
+#define COOLDOWN_MECHA_ARMOR "mecha_armor"
+#define COOLDOWN_MECHA_MELEE_ATTACK "mecha_melee"
+#define COOLDOWN_MECHA_SMOKE "mecha_smoke"
+
//car cooldowns
#define COOLDOWN_CAR_HONK "car_honk"
//clown car cooldowns
#define COOLDOWN_CLOWNCAR_RANDOMNESS "clown_car_randomness"
+
//TIMER COOLDOWN MACROS
#define COMSIG_CD_STOP(cd_index) "cooldown_[cd_index]"
diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm
index 65cd07e6ad..7ef6e8694d 100644
--- a/code/__DEFINES/dcs/signals.dm
+++ b/code/__DEFINES/dcs/signals.dm
@@ -415,6 +415,7 @@
#define COMSIG_LIVING_LIFE "life_tick" //from base of mob/living/Life() (seconds, times_fired)
#define COMPONENT_INTERRUPT_LIFE_BIOLOGICAL 1 // interrupt biological processes
#define COMPONENT_INTERRUPT_LIFE_PHYSICAL 2 // interrupt physical handling
+ #define COMPONET_INTERRUPT_STATUS_EFFECTS 3 // interrupt status effects
#define COMSIG_LIVING_BIOLOGICAL_LIFE "biological_life" //from base of mob/living/BiologicalLife() (seconds, times_fired)
@@ -556,7 +557,19 @@
#define COMSIG_PROJECTILE_PREHIT "com_proj_prehit" ///sent to targets during the process_hit proc of projectiles
#define COMSIG_PELLET_CLOUD_INIT "pellet_cloud_init" // sent to targets during the process_hit proc of projectiles
+// /obj/vehicle/sealed/mecha signals
+// /sent from mecha action buttons to the mecha they're linked to
+#define COMSIG_MECHA_ACTION_TRIGGER "mecha_action_activate"
+///sent from clicking while you have no equipment selected. Sent before cooldown and adjacency checks, so you can use this for infinite range things if you want.
+#define COMSIG_MECHA_MELEE_CLICK "mecha_action_melee_click"
+ /// Prevents click from happening.
+ #define COMPONENT_CANCEL_MELEE_CLICK (1<<0)
+///sent from clicking while you have equipment selected.
+#define COMSIG_MECHA_EQUIPMENT_CLICK "mecha_action_equipment_click"
+ /// Prevents click from happening.
+ #define COMPONENT_CANCEL_EQUIPMENT_CLICK (1<<0)
+
// /mob/living/carbon/human signals
#define COMSIG_HUMAN_MELEE_UNARMED_ATTACK "human_melee_unarmed_attack" //from mob/living/carbon/human/UnarmedAttack(): (atom/target)
#define COMSIG_HUMAN_MELEE_UNARMED_ATTACKBY "human_melee_unarmed_attackby" //from mob/living/carbon/human/UnarmedAttack(): (mob/living/carbon/human/attacker)
diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm
index f893ab3dfe..cfd2cebbd0 100644
--- a/code/__DEFINES/is_helpers.dm
+++ b/code/__DEFINES/is_helpers.dm
@@ -207,7 +207,7 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list(
#define ismachinery(A) (istype(A, /obj/machinery))
-#define ismecha(A) (istype(A, /obj/mecha))
+#define ismecha(A) (istype(A, /obj/vehicle/sealed/mecha))
#define is_cleanable(A) (istype(A, /obj/effect/decal/cleanable) || istype(A, /obj/effect/rune)) //if something is cleanable
diff --git a/code/__DEFINES/logging.dm b/code/__DEFINES/logging.dm
index bde3189272..87e7fe3ce4 100644
--- a/code/__DEFINES/logging.dm
+++ b/code/__DEFINES/logging.dm
@@ -39,6 +39,7 @@
#define LOG_ADMIN_PRIVATE (1 << 14)
#define LOG_ASAY (1 << 15)
#define LOG_VIRUS (1 << 16)
+#define LOG_MECHA (1 << 17)
#define LOG_SHUTTLE (1 << 18)
#define LOG_VICTIM (1 << 19)
diff --git a/code/__DEFINES/mecha.dm b/code/__DEFINES/mecha.dm
new file mode 100644
index 0000000000..4a90a32d08
--- /dev/null
+++ b/code/__DEFINES/mecha.dm
@@ -0,0 +1,31 @@
+#define MECHA_INT_FIRE (1<<0)
+#define MECHA_INT_TEMP_CONTROL (1<<1)
+#define MECHA_INT_SHORT_CIRCUIT (1<<2)
+#define MECHA_INT_TANK_BREACH (1<<3)
+#define MECHA_INT_CONTROL_LOST (1<<4)
+
+#define ADDING_ACCESS_POSSIBLE (1<<0)
+#define ADDING_MAINT_ACCESS_POSSIBLE (1<<1)
+#define CANSTRAFE (1<<2)
+#define LIGHTS_ON (1<<3)
+#define SILICON_PILOT (1<<4)
+#define IS_ENCLOSED (1<<5)
+#define HAS_LIGHTS (1<<6)
+#define QUIET_STEPS (1<<7)
+#define QUIET_TURNS (1<<8)
+///blocks using equipment and melee attacking.
+#define CANNOT_INTERACT (1<<9)
+/// posibrains can drive this mecha
+#define MMI_COMPATIBLE (1<<10)
+
+#define MECHA_MELEE (1 << 0)
+#define MECHA_RANGED (1 << 1)
+
+#define MECHA_FRONT_ARMOUR 1
+#define MECHA_SIDE_ARMOUR 2
+#define MECHA_BACK_ARMOUR 3
+
+#define MECHA_LOCKED 0
+#define MECHA_SECURE_BOLTS 1
+#define MECHA_LOOSE_BOLTS 2
+#define MECHA_OPEN_HATCH 3
diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm
index 3ce91f4332..c8c084fc18 100644
--- a/code/__DEFINES/mobs.dm
+++ b/code/__DEFINES/mobs.dm
@@ -344,9 +344,32 @@
///Define for spawning megafauna instead of a mob for cave gen
#define SPAWN_MEGAFAUNA "bluh bluh huge boss"
+/*
+ * Defines for "AI emotions", allowing the AI to expression emotions
+ * with status displays via emotes.
+ */
+
+#define AI_EMOTION_VERY_HAPPY "Very Happy"
+#define AI_EMOTION_HAPPY "Happy"
+#define AI_EMOTION_NEUTRAL "Neutral"
+#define AI_EMOTION_UNSURE "Unsure"
+#define AI_EMOTION_CONFUSED "Confused"
+#define AI_EMOTION_SAD "Sad"
+#define AI_EMOTION_BSOD "BSOD"
+#define AI_EMOTION_BLANK "Blank"
+#define AI_EMOTION_PROBLEMS "Problems?"
+#define AI_EMOTION_AWESOME "Awesome"
+#define AI_EMOTION_FACEPALM "Facepalm"
+#define AI_EMOTION_THINKING "Thinking"
+#define AI_EMOTION_FRIEND_COMPUTER "Friend Computer"
+#define AI_EMOTION_DORFY "Dorfy"
+#define AI_EMOTION_BLUE_GLOW "Blue Glow"
+#define AI_EMOTION_RED_GLOW "Red Glow"
+
// / Breathing types. Lungs can access either by these or by a string, which will be considered a gas ID.
#define BREATH_OXY /datum/breathing_class/oxygen
#define BREATH_PLASMA /datum/breathing_class/plasma
+#define BREATH_METHANE /datum/breathing_class/methane
//Gremlins
#define NPC_TAMPER_ACT_FORGET 1 //Don't try to tamper with this again
diff --git a/code/__DEFINES/preferences.dm b/code/__DEFINES/preferences.dm
index cb95aab8c0..d2aa2f6a91 100644
--- a/code/__DEFINES/preferences.dm
+++ b/code/__DEFINES/preferences.dm
@@ -16,6 +16,12 @@
#define DISABLE_ARRIVALRATTLE (1<<13)
#define COMBOHUD_LIGHTING (1<<14)
+#define DEADMIN_ALWAYS (1<<0)
+#define DEADMIN_ANTAGONIST (1<<1)
+#define DEADMIN_POSITION_HEAD (1<<2)
+#define DEADMIN_POSITION_SECURITY (1<<3)
+#define DEADMIN_POSITION_SILICON (1<<4)
+
#define TOGGLES_DEFAULT (SOUND_ADMINHELP|SOUND_MIDI|SOUND_AMBIENCE|SOUND_LOBBY|MEMBER_PUBLIC|INTENT_STYLE|MIDROUND_ANTAG|SOUND_INSTRUMENTS|SOUND_SHIP_AMBIENCE|SOUND_PRAYERS|SOUND_ANNOUNCEMENTS)
//Chat toggles
diff --git a/code/__DEFINES/projectiles.dm b/code/__DEFINES/projectiles.dm
index 1bd67fbe02..70a2d611ab 100644
--- a/code/__DEFINES/projectiles.dm
+++ b/code/__DEFINES/projectiles.dm
@@ -1,3 +1,14 @@
+
+// check_pierce() return values
+/// Default behavior: hit and delete self
+#define PROJECTILE_PIERCE_NONE 0
+/// Hit the thing but go through without deleting. Causes on_hit to be called with pierced = TRUE
+#define PROJECTILE_PIERCE_HIT 1
+/// Entirely phase through the thing without ever hitting.
+#define PROJECTILE_PIERCE_PHASE 2
+// Delete self without hitting
+#define PROJECTILE_DELETE_WITHOUT_HITTING 3
+
/// This atom should be ricocheted off of from its inherent properties using standard % chance handling.
#define PROJECTILE_RICOCHET_YES 1
/// This atom should not be ricocheted off of from its inherent properties.
diff --git a/code/__DEFINES/reactions.dm b/code/__DEFINES/reactions.dm
index fad53e4830..d1329060eb 100644
--- a/code/__DEFINES/reactions.dm
+++ b/code/__DEFINES/reactions.dm
@@ -42,3 +42,5 @@
#define FUSION_RAD_MAX 2000
#define FUSION_RAD_COEFFICIENT (-1000)
#define FUSION_INSTABILITY_ENDOTHERMALITY 2
+// Snowflake fire product types
+#define FIRE_PRODUCT_PLASMA 0
diff --git a/code/__DEFINES/research.dm b/code/__DEFINES/research.dm
index 55c3ac8772..e27489380c 100644
--- a/code/__DEFINES/research.dm
+++ b/code/__DEFINES/research.dm
@@ -74,5 +74,6 @@
)
#define BOMB_TARGET_POINTS 50000 //Adjust as needed. Actual hard cap is double this, but will never be reached due to hyperbolic curve.
-#define BOMB_TARGET_SIZE 175 // The shockwave radius required for a bomb to get TECHWEB_BOMB_MIDPOINT points.
+#define BOMB_TARGET_SIZE (world.system_type == MS_WINDOWS ? 240 : 50000) // The shockwave radius required for a bomb to get TECHWEB_BOMB_MIDPOINT points.
+// Linux still has old trit fires, so
#define BOMB_SUB_TARGET_EXPONENT 3 // The power of the points curve below the target size. Higher = less points for worse bombs, below target.
diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm
index e3c928a9a9..b1f7efbb9a 100644
--- a/code/__DEFINES/status_effects.dm
+++ b/code/__DEFINES/status_effects.dm
@@ -152,4 +152,9 @@
// GROUPED //
/////////////
+#define STASIS_MACHINE_EFFECT "stasis_machine"
+
#define STASIS_ASCENSION_EFFECT "heretic_ascension"
+
+/// If the incapacitated status effect will ignore a mob in stasis (stasis beds)
+#define IGNORE_STASIS (1<<1)
diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm
index 2a59dbb810..986b9821b3 100644
--- a/code/__DEFINES/traits.dm
+++ b/code/__DEFINES/traits.dm
@@ -70,6 +70,10 @@
#define HAS_TRAIT_NOT_FROM(target, trait, source) (target.status_traits ? (target.status_traits[trait] ? (length(target.status_traits[trait] - source) > 0) : FALSE) : FALSE)
//mob traits
+/// Prevents voluntary movement.
+#define TRAIT_IMMOBILIZED "immobilized"
+/// Prevents usage of manipulation appendages (picking, holding or using items, manipulating storage).
+#define TRAIT_HANDS_BLOCKED "handsblocked"
#define TRAIT_BLIND "blind"
#define TRAIT_MUTE "mute"
#define TRAIT_EMOTEMUTE "emotemute"
@@ -175,6 +179,8 @@
#define TRAIT_DWARF "dwarf"
#define TRAIT_ALCOHOL_TOLERANCE "alcohol_tolerance"
#define TRAIT_AGEUSIA "ageusia"
+#define TRAIT_ANOSMIA "anosmia"
+#define TRAIT_GOODSMELL "super_smeller"
#define TRAIT_HEAVY_SLEEPER "heavy_sleeper"
#define TRAIT_NIGHT_VISION "night_vision"
#define TRAIT_LIGHT_STEP "light_step"
@@ -349,6 +355,7 @@
#define STICKY_NODROP "sticky-nodrop" //sticky nodrop sounds like a bad soundcloud rapper's name
#define TRAIT_SACRIFICED "sacrificed" //Makes sure that people cant be cult sacrificed twice.
#define TRAIT_SPACEWALK "spacewalk"
+#define TRAIT_SALT_SENSITIVE "salt_sensitive"
/// obtained from mapping helper
diff --git a/code/__DEFINES/vehicles.dm b/code/__DEFINES/vehicles.dm
index 1ff14f9506..0255327ed9 100644
--- a/code/__DEFINES/vehicles.dm
+++ b/code/__DEFINES/vehicles.dm
@@ -11,6 +11,11 @@
///changing around settings and the like.
#define VEHICLE_CONTROL_SETTINGS (1<<4)
+
+///ez define for giving a single pilot mech all the flags it needs.
+#define FULL_MECHA_CONTROL ALL
+
+
//car_traits flags
///Will this car kidnap people by ramming into them?
#define CAN_KIDNAP (1<<0)
diff --git a/code/__HELPERS/_cit_helpers.dm b/code/__HELPERS/_cit_helpers.dm
index a5ffda36f9..c4a7b051de 100644
--- a/code/__HELPERS/_cit_helpers.dm
+++ b/code/__HELPERS/_cit_helpers.dm
@@ -56,6 +56,7 @@ GLOBAL_LIST_EMPTY(ipc_antennas_list)
GLOBAL_LIST_EMPTY(genitals_list)
GLOBAL_LIST_EMPTY(cock_shapes_list)
GLOBAL_LIST_EMPTY(balls_shapes_list)
+GLOBAL_LIST_EMPTY(butt_shapes_list)
GLOBAL_LIST_EMPTY(breasts_shapes_list)
GLOBAL_LIST_EMPTY(vagina_shapes_list)
//longcat memes.
@@ -124,6 +125,11 @@ GLOBAL_VAR_INIT(miscreants_allowed, FALSE)
return TRUE
return FALSE
+/mob/living/carbon/proc/has_butt()
+ if(getorganslot(ORGAN_SLOT_BUTT))
+ return TRUE
+ return FALSE
+
/mob/living/carbon/proc/is_groin_exposed(list/L)
if(!L)
L = get_equipped_items()
@@ -157,7 +163,9 @@ GLOBAL_VAR_INIT(miscreants_allowed, FALSE)
if(H.gender == MALE)
H.give_genital(/obj/item/organ/genital/penis)
H.give_genital(/obj/item/organ/genital/testicles)
+ H.give_genital(/obj/item/organ/genital/butt)
else
H.give_genital(/obj/item/organ/genital/vagina)
H.give_genital(/obj/item/organ/genital/womb)
H.give_genital(/obj/item/organ/genital/breasts)
+ H.give_genital(/obj/item/organ/genital/butt)
diff --git a/code/__HELPERS/_logging.dm b/code/__HELPERS/_logging.dm
index 25b5334a2b..8a8ccd5023 100644
--- a/code/__HELPERS/_logging.dm
+++ b/code/__HELPERS/_logging.dm
@@ -77,6 +77,10 @@
if (CONFIG_GET(flag/log_game))
WRITE_LOG(GLOB.world_game_log, "GAME: [text]")
+/proc/log_mecha(text)
+ if (CONFIG_GET(flag/log_mecha))
+ WRITE_LOG(GLOB.world_mecha_log, "MECHA: [text]")
+
/proc/log_virus(text)
if (CONFIG_GET(flag/log_virus))
WRITE_LOG(GLOB.world_virus_log, "VIRUS: [text]")
diff --git a/code/__HELPERS/do_after.dm b/code/__HELPERS/do_after.dm
index 3ec1aa9b08..5b17ed687c 100644
--- a/code/__HELPERS/do_after.dm
+++ b/code/__HELPERS/do_after.dm
@@ -121,7 +121,7 @@
break
// CLEANUP
- qdel(progbar)
+ progbar.end_progress()
// If we failed, just return.
if(!.)
return FALSE
@@ -206,8 +206,9 @@
if((!drifting && user.loc != user_loc) || target.loc != target_loc || (!ignorehelditem && user.get_active_held_item() != holding) || user.incapacitated() || user.lying || (extra_checks && !extra_checks.Invoke()))
. = 0
break
- if(progress)
- qdel(progbar)
+
+ if(!QDELETED(progbar))
+ progbar.end_progress()
if(!QDELETED(target))
LAZYREMOVE(user.do_afters, target)
@@ -296,8 +297,10 @@
if(user.get_active_held_item() != holding)
. = 0
break
- if(progress)
- qdel(progbar)
+
+ if(!QDELETED(progbar))
+ progbar.end_progress()
+
if(!QDELETED(target))
LAZYREMOVE(user.do_afters, target)
@@ -351,8 +354,10 @@
if((!drifting && user_loc != user.loc) || QDELETED(target) || originalloc[target] != target.loc || user.get_active_held_item() != holding || user.incapacitated() || user.lying || (extra_checks && !extra_checks.Invoke()))
. = 0
break mainloop
- if(progbar)
- qdel(progbar)
+
+ if(!QDELETED(progbar))
+ progbar.end_progress()
+
for(var/thing in targets)
var/atom/target = thing
if(!QDELETED(target))
diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm
index 56e1976990..3e5658fa00 100644
--- a/code/__HELPERS/global_lists.dm
+++ b/code/__HELPERS/global_lists.dm
@@ -55,6 +55,7 @@
init_sprite_accessory_subtypes(/datum/sprite_accessory/penis, GLOB.cock_shapes_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/vagina, GLOB.vagina_shapes_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/breasts, GLOB.breasts_shapes_list)
+ init_sprite_accessory_subtypes(/datum/sprite_accessory/butt, GLOB.butt_shapes_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/testicles, GLOB.balls_shapes_list)
for(var/gpath in subtypesof(/obj/item/organ/genital))
diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm
index 178fa5b8a4..4cd82f9e66 100644
--- a/code/__HELPERS/mobs.dm
+++ b/code/__HELPERS/mobs.dm
@@ -90,6 +90,8 @@
init_sprite_accessory_subtypes(/datum/sprite_accessory/vagina, GLOB.vagina_shapes_list)
if(!GLOB.breasts_shapes_list.len)
init_sprite_accessory_subtypes(/datum/sprite_accessory/breasts, GLOB.breasts_shapes_list)
+ if(!GLOB.butt_shapes_list.len)
+ init_sprite_accessory_subtypes(/datum/sprite_accessory/butt, GLOB.butt_shapes_list)
if(!GLOB.ipc_screens_list.len)
init_sprite_accessory_subtypes(/datum/sprite_accessory/screen, GLOB.ipc_screens_list)
if(!GLOB.ipc_antennas_list.len)
@@ -206,10 +208,16 @@
"vag_shape" = pick(GLOB.vagina_shapes_list),
"vag_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"),
"has_womb" = FALSE,
+ "has_butt" = FALSE,
+ "butt_size" = BUTT_SIZE_DEF,
+ "butt_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"),
+
+
"balls_visibility" = GEN_VISIBLE_NO_UNDIES,
"breasts_visibility"= GEN_VISIBLE_NO_UNDIES,
"cock_visibility" = GEN_VISIBLE_NO_UNDIES,
"vag_visibility" = GEN_VISIBLE_NO_UNDIES,
+ "butt_visibility" = GEN_VISIBLE_NO_UNDIES,
"ipc_screen" = snowflake_ipc_antenna_list ? pick(snowflake_ipc_antenna_list) : "None",
"ipc_antenna" = "None",
"flavor_text" = "",
@@ -476,3 +484,5 @@ GLOBAL_LIST_EMPTY(species_datums)
//check if the person is dead, not sure where to put this
#define IS_DEAD_OR_INCAP(source) (source.incapacitated() || source.stat)
+
+#define IS_IN_STASIS(mob) (mob.has_status_effect(/datum/status_effect/grouped/stasis))
diff --git a/code/__HELPERS/path.dm b/code/__HELPERS/path.dm
index 7ae72c3fa2..72ed8da819 100644
--- a/code/__HELPERS/path.dm
+++ b/code/__HELPERS/path.dm
@@ -44,7 +44,7 @@
* Note that this can only be used inside the [datum/pathfind][pathfind datum] since it uses variables from said datum.
* If you really want to optimize things, optimize this, cuz this gets called a lot.
*/
-#define CAN_STEP(cur_turf, next) (next && !next.density && cur_turf.Adjacent(next) && !(simulated_only && SSpathfinder.space_type_cache[next.type]) && !cur_turf.LinkBlockedWithAccess(next,caller, id) && (next != avoid))
+#define CAN_STEP(cur_turf, next) (next && !next.density && !(simulated_only && SSpathfinder.space_type_cache[next.type]) && !cur_turf.LinkBlockedWithAccess(next,caller, id) && (next != avoid))
/// Another helper macro for JPS, for telling when a node has forced neighbors that need expanding
#define STEP_NOT_HERE_BUT_THERE(cur_turf, dirA, dirB) ((!CAN_STEP(cur_turf, get_step(cur_turf, dirA)) && CAN_STEP(cur_turf, get_step(cur_turf, dirB))))
@@ -338,8 +338,21 @@
* * simulated_only: Do we only worry about turfs with simulated atmos, most notably things that aren't space?
*/
/turf/proc/LinkBlockedWithAccess(turf/destination_turf, caller, ID)
+ if(destination_turf.x != x && destination_turf.y != y) //diagonal
+ var/in_dir = get_dir(destination_turf,src) // eg. northwest (1+8) = 9 (00001001)
+ var/first_step_direction_a = in_dir & 3 // eg. north (1+8)&3 (0000 0011) = 1 (0000 0001)
+ var/first_step_direction_b = in_dir & 12 // eg. west (1+8)&12 (0000 1100) = 8 (0000 1000)
+
+ for(var/first_step_direction in list(first_step_direction_a,first_step_direction_b))
+ var/turf/midstep_turf = get_step(destination_turf,first_step_direction)
+ var/way_blocked = midstep_turf.density || LinkBlockedWithAccess(midstep_turf,caller,ID) || midstep_turf.LinkBlockedWithAccess(destination_turf,caller,ID)
+ if(!way_blocked)
+ return FALSE
+ return TRUE
+
var/actual_dir = get_dir(src, destination_turf)
+ // Source border object checks
for(var/obj/structure/window/iter_window in src)
if(!iter_window.CanAStarPass(ID, actual_dir))
return TRUE
@@ -348,6 +361,15 @@
if(!iter_windoor.CanAStarPass(ID, actual_dir))
return TRUE
+ for(var/obj/structure/railing/iter_rail in src)
+ if(!iter_rail.CanAStarPass(ID, actual_dir))
+ return TRUE
+
+ for(var/obj/machinery/door/firedoor/border_only/firedoor in src)
+ if(!firedoor.CanAStarPass(ID, actual_dir))
+ return TRUE
+
+ // Destination blockers check
var/reverse_dir = get_dir(destination_turf, src)
for(var/obj/iter_object in destination_turf)
if(!iter_object.CanAStarPass(ID, reverse_dir, caller))
diff --git a/code/__HELPERS/time.dm b/code/__HELPERS/time.dm
index 2e27588ae5..519a54b38d 100644
--- a/code/__HELPERS/time.dm
+++ b/code/__HELPERS/time.dm
@@ -75,10 +75,8 @@ GLOBAL_VAR_INIT(rollovercheck_last_timeofday, 0)
/proc/daysSince(realtimev)
return round((world.realtime - realtimev) / (24 HOURS))
-/proc/worldtime2text()
- return gameTimestamp("hh:mm:ss", world.time)
+/proc/worldtime2text(wtime = world.timeofday)
+ return gameTimestamp("hh:mm:ss", wtime)
-/proc/gameTimestamp(format = "hh:mm:ss", wtime=null)
- if(!wtime)
- wtime = world.time
+/proc/gameTimestamp(format = "hh:mm:ss", wtime=world.time)
return time2text(wtime - GLOB.timezoneOffset, format)
diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm
index 2156d888f7..b415b4720f 100644
--- a/code/__HELPERS/unsorted.dm
+++ b/code/__HELPERS/unsorted.dm
@@ -1235,7 +1235,7 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
move_resist = INFINITY
var/ready_to_die = FALSE
-/mob/dview/Initialize() //Properly prevents this mob from gaining huds or joining any global lists
+/mob/dview/Initialize(mapload) //Properly prevents this mob from gaining huds or joining any global lists
SHOULD_CALL_PARENT(FALSE)
if(flags_1 & INITIALIZED_1)
stack_trace("Warning: [src]([type]) initialized multiple times!")
diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm
index 2dc77d3bcb..be1d95416b 100644
--- a/code/_globalvars/bitfields.dm
+++ b/code/_globalvars/bitfields.dm
@@ -130,7 +130,7 @@ GLOBAL_LIST_INIT(bitfields, list(
"FLYING" = FLYING,
"VENTCRAWLING" = VENTCRAWLING,
"FLOATING" = FLOATING,
- "UNSTOPPABLE" = UNSTOPPABLE
+ "PHASING" = PHASING
),
"resistance_flags" = list(
"LAVA_PROOF" = LAVA_PROOF,
diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm
index 599f90b0af..da8b0ed3ee 100644
--- a/code/_globalvars/lists/flavor_misc.dm
+++ b/code/_globalvars/lists/flavor_misc.dm
@@ -292,6 +292,8 @@ GLOBAL_LIST_INIT(station_names, world.file2list("strings/station_names.txt" + ""
GLOBAL_LIST_INIT(station_suffixes, world.file2list("strings/station_suffixes.txt"))
+GLOBAL_LIST_INIT(server_taglines, world.file2list("[global.config.directory]/server_taglines.txt"))
+
GLOBAL_LIST_INIT(greek_letters, world.file2list("strings/greek_letters.txt"))
GLOBAL_LIST_INIT(phonetic_alphabet, world.file2list("strings/phonetic_alphabet.txt"))
diff --git a/code/_globalvars/logging.dm b/code/_globalvars/logging.dm
index f445843364..3f3d9c5e25 100644
--- a/code/_globalvars/logging.dm
+++ b/code/_globalvars/logging.dm
@@ -33,8 +33,8 @@ GLOBAL_VAR(query_debug_log)
GLOBAL_PROTECT(query_debug_log)
GLOBAL_VAR(world_job_debug_log)
GLOBAL_PROTECT(world_job_debug_log)
-// GLOBAL_VAR(world_mecha_log)
-// GLOBAL_PROTECT(world_mecha_log)
+GLOBAL_VAR(world_mecha_log)
+GLOBAL_PROTECT(world_mecha_log)
GLOBAL_VAR(world_virus_log)
GLOBAL_PROTECT(world_virus_log)
GLOBAL_VAR(world_asset_log)
diff --git a/code/_globalvars/traits.dm b/code/_globalvars/traits.dm
index 4a8156d268..1381e12824 100644
--- a/code/_globalvars/traits.dm
+++ b/code/_globalvars/traits.dm
@@ -126,7 +126,8 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_EMPATH" = TRAIT_EMPATH,
"TRAIT_FRIENDLY" = TRAIT_FRIENDLY,
"TRAIT_IWASBATONED" = TRAIT_IWASBATONED,
- "TRAIT_SPACEWALK" = TRAIT_SPACEWALK
+ "TRAIT_SPACEWALK" = TRAIT_SPACEWALK,
+ "TRAIT_SALT_SENSITIVE" = TRAIT_SALT_SENSITIVE
),
/obj/item/bodypart = list(
"TRAIT_PARALYSIS" = TRAIT_PARALYSIS
diff --git a/code/_onclick/adjacent.dm b/code/_onclick/adjacent.dm
index 3f3eecb676..e629a6eb57 100644
--- a/code/_onclick/adjacent.dm
+++ b/code/_onclick/adjacent.dm
@@ -94,7 +94,7 @@
for(var/obj/O in src)
if((mover && O.CanPass(mover,get_step(src,target_dir))) || (!mover && !O.density))
continue
- if(O == target_atom || O == mover || (O.pass_flags & LETPASSTHROW)) //check if there's a dense object present on the turf
+ if(O == target_atom || O == mover || (O.pass_flags_self & LETPASSTHROW)) //check if there's a dense object present on the turf
continue // LETPASSTHROW is used for anything you can click through (or the firedoor special case, see above)
if( O.flags_1&ON_BORDER_1) // windows are on border, check them first
diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm
index c7834dc5ef..239ef319d1 100644
--- a/code/_onclick/ai.dm
+++ b/code/_onclick/ai.dm
@@ -55,11 +55,6 @@
if(modifiers["shift"] && modifiers["ctrl"])
CtrlShiftClickOn(A)
return
- if(modifiers["middle"])
- if(controlled_mech) //Are we piloting a mech? Placed here so the modifiers are not overridden.
- controlled_mech.click_action(A, src, params) //Override AI normal click behavior.
- return
-
if(modifiers["shift"])
ShiftClickOn(A)
return
diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm
index 773adc061f..c9e20bc01a 100644
--- a/code/_onclick/click.dm
+++ b/code/_onclick/click.dm
@@ -82,11 +82,6 @@
if(!modifiers["catcher"] && A.IsObscured())
return
- if(ismecha(loc))
- var/obj/mecha/M = loc
- M.click_action(A,src,params)
- return TRUE
-
if(restrained())
DelayNextAction(CLICK_CD_HANDCUFFED)
return RestrainedClickOn(A)
diff --git a/code/_onclick/hud/action_button.dm b/code/_onclick/hud/action_button.dm
index 791cf336ac..d97e1f5d04 100644
--- a/code/_onclick/hud/action_button.dm
+++ b/code/_onclick/hud/action_button.dm
@@ -72,7 +72,7 @@
var/mutable_appearance/hide_appearance
var/mutable_appearance/show_appearance
-/atom/movable/screen/movable/action_button/hide_toggle/Initialize()
+/atom/movable/screen/movable/action_button/hide_toggle/Initialize(mapload)
. = ..()
var/static/list/icon_cache = list()
diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm
index f74d380b8a..53ad775954 100644
--- a/code/_onclick/hud/alert.dm
+++ b/code/_onclick/hud/alert.dm
@@ -349,7 +349,7 @@ or shoot a gun to move around via Newton's 3rd Law of Motion."
/// Simply checks if the other person is still in range
/atom/movable/screen/alert/give/proc/check_in_range(atom/taker)
SIGNAL_HANDLER
-
+
if(!offerer.CanReach(taker))
to_chat(owner, span_warning("You moved out of range of [offerer]!"))
owner.clear_alert("[offerer]")
@@ -455,7 +455,7 @@ or shoot a gun to move around via Newton's 3rd Law of Motion."
var/angle = 0
var/mob/living/simple_animal/hostile/construct/Cviewer = null
-/atom/movable/screen/alert/bloodsense/Initialize()
+/atom/movable/screen/alert/bloodsense/Initialize(mapload)
. = ..()
narnar = new('icons/mob/screen_alert.dmi', "mini_nar")
START_PROCESSING(SSprocessing, src)
@@ -820,7 +820,7 @@ so as to remain in compliance with the most up-to-date laws."
return FALSE
if(master && click_master)
return usr.client.Click(master, location, control, params)
-
+
return TRUE
/atom/movable/screen/alert/Destroy()
diff --git a/code/_onclick/hud/families.dm b/code/_onclick/hud/families.dm
index eb09d53bc1..6cc9f4ef32 100644
--- a/code/_onclick/hud/families.dm
+++ b/code/_onclick/hud/families.dm
@@ -12,7 +12,7 @@
/atom/movable/screen/wanted/New()
return ..()
-/atom/movable/screen/wanted/Initialize()
+/atom/movable/screen/wanted/Initialize(mapload)
. = ..()
update_icon()
diff --git a/code/_onclick/hud/picture_in_picture.dm b/code/_onclick/hud/picture_in_picture.dm
index 6cf1bfd6a6..354a6ed546 100644
--- a/code/_onclick/hud/picture_in_picture.dm
+++ b/code/_onclick/hud/picture_in_picture.dm
@@ -14,7 +14,7 @@
var/mutable_appearance/standard_background
var/const/max_dimensions = 10
-/atom/movable/screen/movable/pic_in_pic/Initialize()
+/atom/movable/screen/movable/pic_in_pic/Initialize(mapload)
. = ..()
make_backgrounds()
diff --git a/code/_onclick/hud/plane_master.dm b/code/_onclick/hud/plane_master.dm
index d83a81fa45..3d39440dad 100644
--- a/code/_onclick/hud/plane_master.dm
+++ b/code/_onclick/hud/plane_master.dm
@@ -24,7 +24,7 @@
blend_mode = BLEND_MULTIPLY
alpha = 255
-/atom/movable/screen/plane_master/openspace/Initialize()
+/atom/movable/screen/plane_master/openspace/Initialize(mapload)
. = ..()
filters += filter(type="alpha", render_source=FIELD_OF_VISION_RENDER_TARGET, flags=MASK_INVERSE)
@@ -61,7 +61,7 @@
plane = ABOVE_WALL_PLANE
appearance_flags = PLANE_MASTER
-/atom/movable/screen/plane_master/above_wall/Initialize()
+/atom/movable/screen/plane_master/above_wall/Initialize(mapload)
. = ..()
add_filter("vision_cone", 100, list(type="alpha", render_source=FIELD_OF_VISION_RENDER_TARGET, flags=MASK_INVERSE))
@@ -78,7 +78,7 @@
appearance_flags = PLANE_MASTER //should use client color
blend_mode = BLEND_OVERLAY
-/atom/movable/screen/plane_master/game_world/Initialize()
+/atom/movable/screen/plane_master/game_world/Initialize(mapload)
. = ..()
add_filter("vision_cone", 100, list(type="alpha", render_source=FIELD_OF_VISION_RENDER_TARGET, flags=MASK_INVERSE))
@@ -95,7 +95,7 @@
render_target = FIELD_OF_VISION_RENDER_TARGET
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
-/atom/movable/screen/plane_master/field_of_vision/Initialize()
+/atom/movable/screen/plane_master/field_of_vision/Initialize(mapload)
. = ..()
filters += filter(type="alpha", render_source=FIELD_OF_VISION_BLOCKER_RENDER_TARGET, flags=MASK_INVERSE)
@@ -112,7 +112,7 @@
plane = FIELD_OF_VISION_VISUAL_PLANE
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
-/atom/movable/screen/plane_master/field_of_vision_visual/Initialize()
+/atom/movable/screen/plane_master/field_of_vision_visual/Initialize(mapload)
. = ..()
filters += filter(type="alpha", render_source=FIELD_OF_VISION_BLOCKER_RENDER_TARGET, flags=MASK_INVERSE)
@@ -138,7 +138,7 @@
* This is then used to alpha mask the lighting plane.
*/
-/atom/movable/screen/plane_master/lighting/Initialize()
+/atom/movable/screen/plane_master/lighting/Initialize(mapload)
. = ..()
add_filter("emissives", 1, alpha_mask_filter(render_source = EMISSIVE_RENDER_TARGET, flags = MASK_INVERSE))
add_filter("object_lighting", 2, alpha_mask_filter(render_source = O_LIGHTING_VISUAL_RENDER_TARGET, flags = MASK_INVERSE))
@@ -152,7 +152,7 @@
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
render_target = EMISSIVE_RENDER_TARGET
-/atom/movable/screen/plane_master/emissive/Initialize()
+/atom/movable/screen/plane_master/emissive/Initialize(mapload)
. = ..()
add_filter("em_block_masking", 1, color_matrix_filter(GLOB.em_mask_matrix))
diff --git a/code/_onclick/hud/radial.dm b/code/_onclick/hud/radial.dm
index 3cce288e67..0070362f8b 100644
--- a/code/_onclick/hud/radial.dm
+++ b/code/_onclick/hud/radial.dm
@@ -194,6 +194,9 @@ GLOBAL_LIST_EMPTY(radial_menus)
else
if(istext(choices_values[choice_id]))
E.name = choices_values[choice_id]
+ else if(ispath(choices_values[choice_id],/atom))
+ var/atom/A = choices_values[choice_id]
+ E.name = initial(A.name)
else
var/atom/movable/AM = choices_values[choice_id] //Movables only
E.name = AM.name
diff --git a/code/_onclick/hud/screen_objects/clickdelay.dm b/code/_onclick/hud/screen_objects/clickdelay.dm
index c62f051c1a..b8258c7598 100644
--- a/code/_onclick/hud/screen_objects/clickdelay.dm
+++ b/code/_onclick/hud/screen_objects/clickdelay.dm
@@ -25,7 +25,7 @@
icon_state = "prog_bar_100"
layer = 20 // under hand buttons
-/atom/movable/screen/action_bar/clickdelay/Initialize()
+/atom/movable/screen/action_bar/clickdelay/Initialize(mapload)
. = ..()
var/matrix/M = new
M.Scale(2, 1)
diff --git a/code/_onclick/right_click.dm b/code/_onclick/right_click.dm
index 4b2480eb8c..c1613561b4 100644
--- a/code/_onclick/right_click.dm
+++ b/code/_onclick/right_click.dm
@@ -11,10 +11,6 @@
if(!modifiers["catcher"] && A.IsObscured())
return
- if(ismecha(loc))
- var/obj/mecha/M = loc
- return M.click_action(A,src,params)
-
if(restrained())
DelayNextAction(CLICK_CD_HANDCUFFED)
return RestrainedClickOn(A)
diff --git a/code/_onclick/telekinesis.dm b/code/_onclick/telekinesis.dm
index ed0a9eb4ea..3ae45648df 100644
--- a/code/_onclick/telekinesis.dm
+++ b/code/_onclick/telekinesis.dm
@@ -79,7 +79,7 @@
var/atom/movable/focus
var/mob/living/carbon/tk_user
-/obj/item/tk_grab/Initialize()
+/obj/item/tk_grab/Initialize(mapload)
. = ..()
START_PROCESSING(SSfastprocess, src)
diff --git a/code/_rendering/atom_huds/data_huds.dm b/code/_rendering/atom_huds/data_huds.dm
index 413484b99b..d25dcb5380 100644
--- a/code/_rendering/atom_huds/data_huds.dm
+++ b/code/_rendering/atom_huds/data_huds.dm
@@ -381,14 +381,14 @@
/*~~~~~~~~~~~~~~~~~~~~
BIG STOMPY MECHS
~~~~~~~~~~~~~~~~~~~~~*/
-/obj/mecha/proc/diag_hud_set_mechhealth()
+/obj/vehicle/sealed/mecha/proc/diag_hud_set_mechhealth()
var/image/holder = hud_list[DIAG_MECH_HUD]
var/icon/I = icon(icon, icon_state, dir)
holder.pixel_y = I.Height() - world.icon_size
holder.icon_state = "huddiag[RoundDiagBar(obj_integrity/max_integrity)]"
-/obj/mecha/proc/diag_hud_set_mechcell()
+/obj/vehicle/sealed/mecha/proc/diag_hud_set_mechcell()
var/image/holder = hud_list[DIAG_BATT_HUD]
var/icon/I = icon(icon, icon_state, dir)
holder.pixel_y = I.Height() - world.icon_size
@@ -399,7 +399,7 @@
holder.icon_state = "hudnobatt"
-/obj/mecha/proc/diag_hud_set_mechstat()
+/obj/vehicle/sealed/mecha/proc/diag_hud_set_mechstat()
var/image/holder = hud_list[DIAG_STAT_HUD]
var/icon/I = icon(icon, icon_state, dir)
holder.pixel_y = I.Height() - world.icon_size
@@ -407,7 +407,7 @@
if(internal_damage)
holder.icon_state = "hudwarn"
-/obj/mecha/proc/diag_hud_set_mechtracking() //Shows tracking beacons on the mech
+/obj/vehicle/sealed/mecha/proc/diag_hud_set_mechtracking() //Shows tracking beacons on the mech
var/image/holder = hud_list[DIAG_TRACK_HUD]
var/icon/I = icon(icon, icon_state, dir)
holder.pixel_y = I.Height() - world.icon_size
diff --git a/code/controllers/configuration/entries/admin.dm b/code/controllers/configuration/entries/admin.dm
index 1f9b5d460f..60919e10a9 100644
--- a/code/controllers/configuration/entries/admin.dm
+++ b/code/controllers/configuration/entries/admin.dm
@@ -64,3 +64,18 @@
/datum/config_entry/flag/automute_on //enables automuting/spam prevention
/datum/config_entry/flag/debug_admin_hrefs
+
+/datum/config_entry/flag/auto_deadmin_players
+ protection = CONFIG_ENTRY_LOCKED
+
+/datum/config_entry/flag/auto_deadmin_antagonists
+ protection = CONFIG_ENTRY_LOCKED
+
+/datum/config_entry/flag/auto_deadmin_heads
+ protection = CONFIG_ENTRY_LOCKED
+
+/datum/config_entry/flag/auto_deadmin_silicons
+ protection = CONFIG_ENTRY_LOCKED
+
+/datum/config_entry/flag/auto_deadmin_security
+ protection = CONFIG_ENTRY_LOCKED
diff --git a/code/controllers/configuration/entries/fetish_content.dm b/code/controllers/configuration/entries/fetish_content.dm
index 1de796a11d..b7ae2e0d83 100644
--- a/code/controllers/configuration/entries/fetish_content.dm
+++ b/code/controllers/configuration/entries/fetish_content.dm
@@ -11,6 +11,16 @@
config_entry_value = 20
min_val = 0
+/datum/config_entry/number/butt_min_size_prefs
+ config_entry_value = 1
+ min_val = 0
+ max_val = BUTT_SIZE_MAX
+
+/datum/config_entry/number/butt_max_size_prefs
+ config_entry_value = BUTT_SIZE_MAX
+ min_val = 0
+ max_val = BUTT_SIZE_MAX
+
/datum/config_entry/keyed_list/safe_visibility_toggles
key_mode = KEY_MODE_TEXT
value_mode = VALUE_MODE_FLAG
diff --git a/code/controllers/configuration/entries/logging.dm b/code/controllers/configuration/entries/logging.dm
index e9fe04f2d4..52e4743a22 100644
--- a/code/controllers/configuration/entries/logging.dm
+++ b/code/controllers/configuration/entries/logging.dm
@@ -31,6 +31,10 @@
/datum/config_entry/flag/log_game
config_entry_value = TRUE
+/// log mech data
+/datum/config_entry/flag/log_mecha
+ config_entry_value = TRUE
+
/// log virology data
/datum/config_entry/flag/log_virus
config_entry_value = TRUE
diff --git a/code/controllers/configuration/entries/server.dm b/code/controllers/configuration/entries/server.dm
index ee40df573c..77e5dcf950 100644
--- a/code/controllers/configuration/entries/server.dm
+++ b/code/controllers/configuration/entries/server.dm
@@ -2,9 +2,15 @@
/datum/config_entry/string/servername // server name (the name of the game window)
+/datum/config_entry/string/communityshortname // short name of the server's community
+
+/datum/config_entry/string/communitylink // link to the server's website
+
/datum/config_entry/string/servertagline
config_entry_value = "We forgot to set the server's tagline in config.txt"
+/datum/config_entry/flag/usetaglinestrings
+
/datum/config_entry/string/serversqlname // short form server name used for the DB
/datum/config_entry/string/stationname // station name (the name of the station in-game)
diff --git a/code/controllers/subsystem/atoms.dm b/code/controllers/subsystem/atoms.dm
index 8a84251341..ba2da8365b 100644
--- a/code/controllers/subsystem/atoms.dm
+++ b/code/controllers/subsystem/atoms.dm
@@ -67,7 +67,7 @@ SUBSYSTEM_DEF(atoms)
for (var/queued_deletion in queued_deletions)
qdel(queued_deletion)
-
+
testing("[queued_deletions.len] atoms were queued for deletion.")
queued_deletions.Cut()
@@ -152,7 +152,7 @@ SUBSYSTEM_DEF(atoms)
. += "Path : [path] \n"
var/fails = BadInitializeCalls[path]
if(fails & BAD_INIT_DIDNT_INIT)
- . += "- Didn't call atom/Initialize()\n"
+ . += "- Didn't call atom/Initialize(mapload)\n"
if(fails & BAD_INIT_NO_HINT)
. += "- Didn't return an Initialize hint\n"
if(fails & BAD_INIT_QDEL_BEFORE)
diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm
index c1482593dd..2153325940 100644
--- a/code/controllers/subsystem/job.dm
+++ b/code/controllers/subsystem/job.dm
@@ -453,11 +453,11 @@ SUBSYSTEM_DEF(job)
SSpersistence.antag_rep_change[M.client.ckey] += job.GetAntagRep()
-/* if(M.client.holder)
- if(CONFIG_GET(flag/auto_deadmin_players) || (M.client.prefs?.toggles & DEADMIN_ALWAYS))
+ if(M.client.holder)
+ if(CONFIG_GET(flag/auto_deadmin_players) || (M.client.prefs?.deadmin & DEADMIN_ALWAYS))
M.client.holder.auto_deadmin()
else
- handle_auto_deadmin_roles(M.client, rank) */
+ handle_auto_deadmin_roles(M.client, rank)
to_chat(M, "You are the [rank].")
if(job)
@@ -504,19 +504,19 @@ SUBSYSTEM_DEF(job)
binder.decks = N.client.prefs.tcg_decks
return H
-/*
+
/datum/controller/subsystem/job/proc/handle_auto_deadmin_roles(client/C, rank)
if(!C?.holder)
return TRUE
var/datum/job/job = GetJob(rank)
if(!job)
return
- if((job.auto_deadmin_role_flags & DEADMIN_POSITION_HEAD) && (CONFIG_GET(flag/auto_deadmin_heads) || (C.prefs?.toggles & DEADMIN_POSITION_HEAD)))
+ if((job.auto_deadmin_role_flags & DEADMIN_POSITION_HEAD) && (CONFIG_GET(flag/auto_deadmin_heads) || (C.prefs?.deadmin & DEADMIN_POSITION_HEAD)))
return C.holder.auto_deadmin()
- else if((job.auto_deadmin_role_flags & DEADMIN_POSITION_SECURITY) && (CONFIG_GET(flag/auto_deadmin_security) || (C.prefs?.toggles & DEADMIN_POSITION_SECURITY)))
+ else if((job.auto_deadmin_role_flags & DEADMIN_POSITION_SECURITY) && (CONFIG_GET(flag/auto_deadmin_security) || (C.prefs?.deadmin & DEADMIN_POSITION_SECURITY)))
+ return C.holder.auto_deadmin()
+ else if((job.auto_deadmin_role_flags & DEADMIN_POSITION_SILICON) && (CONFIG_GET(flag/auto_deadmin_silicons) || (C.prefs?.deadmin & DEADMIN_POSITION_SILICON))) //in the event there's ever psuedo-silicon roles added, ie synths.
return C.holder.auto_deadmin()
- else if((job.auto_deadmin_role_flags & DEADMIN_POSITION_SILICON) && (CONFIG_GET(flag/auto_deadmin_silicons) || (C.prefs?.toggles & DEADMIN_POSITION_SILICON))) //in the event there's ever psuedo-silicon roles added, ie synths.
- return C.holder.auto_deadmin()*/
/datum/controller/subsystem/job/proc/setup_officer_positions()
var/datum/job/J = SSjob.GetJob("Security Officer")
diff --git a/code/controllers/subsystem/materials.dm b/code/controllers/subsystem/materials.dm
index 2134be0176..d8362ea0d1 100644
--- a/code/controllers/subsystem/materials.dm
+++ b/code/controllers/subsystem/materials.dm
@@ -25,7 +25,7 @@ SUBSYSTEM_DEF(materials)
)
///List of stackcrafting recipes for materials using rigid recipes
var/list/rigid_stack_recipes = list(
- // new /datum/stack_recipe("Carving block", /obj/structure/carving_block, 5, one_per_turf = TRUE, on_floor = TRUE, applies_mats = TRUE),
+ new /datum/stack_recipe("Carving block", /obj/structure/carving_block, 5, one_per_turf = TRUE, on_floor = TRUE, applies_mats = TRUE),
)
///Ran on initialize, populated the materials and materials_by_category dictionaries with their appropiate vars (See these variables for more info)
diff --git a/code/controllers/subsystem/processing/quirks.dm b/code/controllers/subsystem/processing/quirks.dm
index b3c8a6422f..582d2eb9dc 100644
--- a/code/controllers/subsystem/processing/quirks.dm
+++ b/code/controllers/subsystem/processing/quirks.dm
@@ -48,7 +48,7 @@ PROCESSING_SUBSYSTEM_DEF(quirks)
cli.prefs.save_character()
if (!silent && LAZYLEN(cut))
to_chat(to_chat_target || user, "Some quirks have been cut from your character because of these quirks conflicting with your job assignment: [english_list(cut)].")
-
+
var/mob/living/carbon/human/H = user
if(istype(H) && H.dna?.species)
var/datum/species/S = H.dna.species
diff --git a/code/controllers/subsystem/statpanel.dm b/code/controllers/subsystem/statpanel.dm
index d0d5579611..6ba2caa31d 100644
--- a/code/controllers/subsystem/statpanel.dm
+++ b/code/controllers/subsystem/statpanel.dm
@@ -18,7 +18,7 @@ SUBSYSTEM_DEF(statpanels)
cached ? "Next Map: [cached.map_name]" : null,
"Round ID: [GLOB.round_id ? GLOB.round_id : "NULL"]",
"Server Time: [time2text(world.timeofday, "YYYY-MM-DD hh:mm:ss")]",
- "Round Time: [round_time > MIDNIGHT_ROLLOVER ? "[round(round_time/MIDNIGHT_ROLLOVER)]:[worldtime2text()]" : worldtime2text()]",
+ "Round Time: [GAMETIMESTAMP("hh:mm:ss", round_time)]",
"Station Time: [STATION_TIME_TIMESTAMP("hh:mm:ss", world.time)]",
"Time Dilation: [round(SStime_track.time_dilation_current,1)]% AVG:([round(SStime_track.time_dilation_avg_fast,1)]%, [round(SStime_track.time_dilation_avg,1)]%, [round(SStime_track.time_dilation_avg_slow,1)]%)"
)
diff --git a/code/controllers/subsystem/throwing.dm b/code/controllers/subsystem/throwing.dm
index 0fa8035d72..2ff1e284d0 100644
--- a/code/controllers/subsystem/throwing.dm
+++ b/code/controllers/subsystem/throwing.dm
@@ -200,6 +200,6 @@ SUBSYSTEM_DEF(throwing)
var/atom/movable/AM = thing
if (AM == thrownthing || (AM == thrower && !ismob(thrownthing)))
continue
- if (AM.density && !(AM.pass_flags & LETPASSTHROW) && !(AM.flags_1 & ON_BORDER_1))
+ if (AM.density && !(AM.pass_flags_self & LETPASSTHROW) && !(AM.flags_1 & ON_BORDER_1))
finalize(hit=TRUE, target=AM)
return TRUE
diff --git a/code/controllers/subsystem/traumas.dm b/code/controllers/subsystem/traumas.dm
index 9a0665e91f..edf10f89c4 100644
--- a/code/controllers/subsystem/traumas.dm
+++ b/code/controllers/subsystem/traumas.dm
@@ -107,7 +107,7 @@ SUBSYSTEM_DEF(traumas)
/obj/item/clothing/under/rank/medical/doctor/nurse, /obj/item/clothing/under/rank/medical/chief_medical_officer,
/obj/item/reagent_containers/syringe, /obj/item/reagent_containers/pill/, /obj/item/reagent_containers/hypospray,
/obj/item/storage/firstaid, /obj/item/storage/pill_bottle, /obj/item/healthanalyzer,
- /obj/structure/sign/departments/medbay, /obj/machinery/door/airlock/medical, /obj/machinery/sleeper,
+ /obj/structure/sign/departments/medbay, /obj/machinery/door/airlock/medical, /obj/machinery/sleeper, /obj/machinery/stasis,
/obj/machinery/dna_scannernew, /obj/machinery/atmospherics/components/unary/cryo_cell, /obj/item/surgical_drapes,
/obj/item/retractor, /obj/item/hemostat, /obj/item/cautery, /obj/item/surgicaldrill, /obj/item/scalpel, /obj/item/circular_saw,
/obj/item/clothing/suit/bio_suit/plaguedoctorsuit, /obj/item/clothing/head/plaguedoctorhat, /obj/item/clothing/mask/gas/plaguedoctor)),
@@ -159,7 +159,7 @@ SUBSYSTEM_DEF(traumas)
/obj/item/storage/backpack/mime, /obj/item/reagent_containers/food/snacks/grown/banana/mime,
/obj/item/grown/bananapeel/mimanapeel, /obj/item/cartridge/virus/mime, /obj/item/clothing/shoes/sneakers/mime,
/obj/item/bedsheet/mime, /obj/item/reagent_containers/food/snacks/burger/mime, /obj/item/clothing/head/beret,
- /obj/item/toy/figure/mime, /obj/item/toy/crayon/mime, /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/silenced, /obj/mecha/combat/reticence)),
+ /obj/item/toy/figure/mime, /obj/item/toy/crayon/mime, /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/silenced, /obj/vehicle/sealed/mecha/combat/reticence)),
"cats" = typecacheof(list(/obj/item/organ/ears/cat, /obj/item/organ/tail/cat, /obj/item/laser_pointer, /obj/item/toy/cattoy, /obj/item/clothing/head/kitty,
/obj/item/clothing/head/collectable/kitty, /obj/item/melee/chainofcommand/tailwhip/kitty, /obj/item/stack/sheet/animalhide/cat)),
@@ -169,7 +169,7 @@ SUBSYSTEM_DEF(traumas)
/obj/structure/fluff/empty_sleeper/syndicate, /obj/item/implant/radio/syndicate, /obj/item/clothing/head/helmet/space/syndicate, /obj/machinery/nuclearbomb/syndicate, /obj/item/grenade/syndieminibomb, /obj/item/storage/backpack/duffelbag/syndie, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/revolver,
/obj/item/gun/ballistic/automatic/shotgun/bulldog, /obj/item/gun/ballistic/automatic/c20r, /obj/item/gun/ballistic/automatic/m90, /obj/item/gun/ballistic/automatic/l6_saw, /obj/item/storage/belt/grenade/full, /obj/item/gun/ballistic/automatic/sniper_rifle/syndicate, /obj/item/gun/energy/kinetic_accelerator/crossbow,
/obj/item/melee/transforming/energy/sword/saber, /obj/item/dualsaber, /obj/item/melee/powerfist, /obj/item/storage/box/syndie_kit, /obj/item/grenade/spawnergrenade/manhacks, /obj/item/grenade/chem_grenade/bioterrorfoam, /obj/item/reagent_containers/spray/chemsprayer/bioterror, /obj/item/ammo_box/magazine/m10mm,
- /obj/item/ammo_box/magazine/pistolm9mm, /obj/item/ammo_box/a357, /obj/item/ammo_box/magazine/m12g, /obj/item/ammo_box/magazine/mm195x129, /obj/item/antag_spawner/nuke_ops, /obj/mecha/combat/gygax/dark, /obj/mecha/combat/marauder/mauler, /obj/item/soap/syndie, /obj/item/gun/syringe/syndicate, /obj/item/cartridge/virus/syndicate,
+ /obj/item/ammo_box/magazine/pistolm9mm, /obj/item/ammo_box/a357, /obj/item/ammo_box/magazine/m12g, /obj/item/ammo_box/magazine/mm195x129, /obj/item/antag_spawner/nuke_ops, /obj/vehicle/sealed/mecha/combat/gygax/dark, /obj/vehicle/sealed/mecha/combat/marauder/mauler, /obj/item/soap/syndie, /obj/item/gun/syringe/syndicate, /obj/item/cartridge/virus/syndicate,
/obj/item/cartridge/virus/frame, /obj/item/chameleon, /obj/item/storage/box/syndie_kit/cutouts, /obj/item/clothing/suit/space/hardsuit/syndi, /obj/item/card/emag, /obj/item/storage/toolbox/syndicate, /obj/item/storage/book/bible/syndicate, /obj/item/encryptionkey/binary, /obj/item/encryptionkey/syndicate, /obj/item/aiModule/syndicate,
/obj/item/clothing/shoes/magboots/syndie, /obj/item/powersink, /obj/item/sbeacondrop, /obj/item/sbeacondrop/bomb, /obj/item/syndicatedetonator, /obj/item/shield/energy, /obj/item/assault_pod, /obj/item/slimepotion/slime/sentience/nuclear, /obj/item/stack/telecrystal, /obj/item/jammer, /obj/item/codespeak_manual/unlimited,
/obj/item/toy/cards/deck/syndicate, /obj/item/storage/secure/briefcase/syndie, /obj/item/storage/fancy/cigarettes/cigpack_syndicate, /obj/item/toy/syndicateballoon, /obj/item/clothing/gloves/fingerless/pugilist/rapid, /obj/item/paper/fluff/ruins/thederelict/syndie_mission, /obj/item/organ/cyberimp/eyes/hud/security/syndicate, /obj/item/clothing/head/HoS/syndicate,
diff --git a/code/controllers/subsystem/vis_overlays.dm b/code/controllers/subsystem/vis_overlays.dm
index b0e5d6c689..0572532fda 100644
--- a/code/controllers/subsystem/vis_overlays.dm
+++ b/code/controllers/subsystem/vis_overlays.dm
@@ -5,12 +5,10 @@ SUBSYSTEM_DEF(vis_overlays)
init_order = INIT_ORDER_VIS
var/list/vis_overlay_cache
- var/list/unique_vis_overlays
var/list/currentrun
/datum/controller/subsystem/vis_overlays/Initialize()
vis_overlay_cache = list()
- unique_vis_overlays = list()
return ..()
/datum/controller/subsystem/vis_overlays/fire(resumed = FALSE)
@@ -30,7 +28,7 @@ SUBSYSTEM_DEF(vis_overlays)
if(MC_TICK_CHECK)
return
-//the "thing" var can be anything with vis_contents which includes images
+//the "thing" var can be anything with vis_contents which includes images - in the future someone should totally allow vis overlays to be passed in as an arg instead of all this bullshit
/datum/controller/subsystem/vis_overlays/proc/add_vis_overlay(atom/movable/thing, icon, iconstate, layer, plane, dir, alpha = 255, add_appearance_flags = NONE, unique = FALSE)
var/obj/effect/overlay/vis/overlay
if(!unique)
@@ -45,7 +43,6 @@ SUBSYSTEM_DEF(vis_overlays)
overlay = _create_new_vis_overlay(icon, iconstate, layer, plane, dir, alpha, add_appearance_flags)
overlay.cache_expiration = -1
var/cache_id = "\ref[overlay]@{[world.time]}"
- unique_vis_overlays += overlay
vis_overlay_cache[cache_id] = overlay
. = overlay
thing.vis_contents += overlay
diff --git a/code/datums/armor.dm b/code/datums/armor.dm
index 88170541c6..6814706e1e 100644
--- a/code/datums/armor.dm
+++ b/code/datums/armor.dm
@@ -1,5 +1,18 @@
#define ARMORID "armor-[melee]-[bullet]-[laser]-[energy]-[bomb]-[bio]-[rad]-[fire]-[acid]-[magic]-[wound]"
+#define MELEE "melee"
+#define BULLET "bullet"
+#define LASER "laser"
+#define ENERGY "energy"
+#define BOMB "bomb"
+#define BIO "bio"
+#define RAD "rad"
+#define FIRE "fire"
+#define ACID "acid"
+#define MAGIC "magic"
+#define WOUND "wound"
+
+
/proc/getArmor(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0, magic = 0, wound = 0)
. = locate(ARMORID)
if (!.)
@@ -56,7 +69,7 @@
return vars[rating]
/datum/armor/proc/getList()
- return list("melee" = melee, "bullet" = bullet, "laser" = laser, "energy" = energy, "bomb" = bomb, "bio" = bio, "rad" = rad, "fire" = fire, "acid" = acid, "magic" = magic, "wound" = wound)
+ return list(MELEE = melee, BULLET = bullet, LASER = laser, ENERGY = energy, BOMB = bomb, BIO = bio, RAD = rad, FIRE = fire, ACID = acid, MAGIC = magic, WOUND = wound)
/datum/armor/proc/attachArmor(datum/armor/AA)
return getArmor(melee+AA.melee, bullet+AA.bullet, laser+AA.laser, energy+AA.energy, bomb+AA.bomb, bio+AA.bio, rad+AA.rad, fire+AA.fire, acid+AA.acid, magic+AA.magic, wound+AA.wound)
diff --git a/code/datums/atmosphere/planetary.dm b/code/datums/atmosphere/planetary.dm
index 9336451fe4..2324c4780a 100644
--- a/code/datums/atmosphere/planetary.dm
+++ b/code/datums/atmosphere/planetary.dm
@@ -12,8 +12,8 @@
GAS_CO2=5,
)
restricted_gases = list(
- GAS_BZ = 0.1,
- GAS_METHYL_BROMIDE= 0.1
+ GAS_BZ=0.1,
+ GAS_BROMINE=0.1
)
minimum_pressure = HAZARD_LOW_PRESSURE + 10
@@ -22,26 +22,44 @@
minimum_temp = 281
maximum_temp = 320
+/datum/atmosphere/lavaland/generate_gas_string()
+ if(prob(restricted_chance))
+ base_gases = list(
+ GAS_METHANE=5,
+ GAS_N2=10
+ )
+ normal_gases = list(
+ GAS_METHANE=5,
+ GAS_N2=5,
+ )
+ restricted_gases = list(
+ GAS_AMMONIA = 0.1,
+ GAS_METHYL_BROMIDE = 0.1,
+ GAS_HYDROGEN = 0.1
+ )
+ return ..()
+
/datum/atmosphere/lavaland/check_for_sanity(datum/gas_mixture/mix)
- var/datum/breathing_class/o2_class = GLOB.gas_data.breathing_classes[BREATH_OXY]
- while(o2_class.get_effective_pp(mix) < 10)
- mix.adjust_moles(GAS_CO2, -0.5)
- mix.adjust_moles(GAS_O2, 0.5)
+ if(mix.get_moles(GAS_METHANE) < 0.1)
+ var/datum/breathing_class/o2_class = GLOB.gas_data.breathing_classes[BREATH_OXY]
+ while(o2_class.get_effective_pp(mix) < 10)
+ mix.adjust_moles(GAS_CO2, -0.5)
+ mix.adjust_moles(GAS_O2, 0.5)
/datum/atmosphere/icemoon
id = ICEMOON_DEFAULT_ATMOS
base_gases = list(
- GAS_O2=5,
+ GAS_METHANE=5,
GAS_N2=10,
)
normal_gases = list(
- GAS_O2=10,
- GAS_N2=10,
- GAS_CO2=10,
+ GAS_METHANE=5,
+ GAS_N2=10
)
restricted_gases = list(
- GAS_METHYL_BROMIDE=0.1
+ GAS_METHYL_BROMIDE=0.1,
+ GAS_HYDROGEN=0.1
)
restricted_chance = 5
@@ -51,3 +69,18 @@
minimum_temp = 180
maximum_temp = 180
+/datum/atmosphere/icemoon/generate_gas_string()
+ if(prob(restricted_chance))
+ base_gases = list(
+ GAS_O2=5,
+ GAS_N2=10,
+ )
+ normal_gases = list(
+ GAS_O2=5,
+ GAS_N2=10,
+ )
+ restricted_gases = list(
+ GAS_BZ = 0.1,
+ GAS_METHYL_BROMIDE = 0.1,
+ )
+ return ..()
diff --git a/code/datums/brain_damage/special.dm b/code/datums/brain_damage/special.dm
index 7cc5348a0a..d4631f2558 100644
--- a/code/datums/brain_damage/special.dm
+++ b/code/datums/brain_damage/special.dm
@@ -99,7 +99,7 @@
var/obj/effect/hallucination/simple/bluespace_stream/linked_to
var/mob/living/carbon/seer
-/obj/effect/hallucination/simple/bluespace_stream/Initialize()
+/obj/effect/hallucination/simple/bluespace_stream/Initialize(mapload)
. = ..()
QDEL_IN(src, 300)
diff --git a/code/datums/components/acid.dm b/code/datums/components/acid.dm
index 39e9b2cb63..686d47cb1e 100644
--- a/code/datums/components/acid.dm
+++ b/code/datums/components/acid.dm
@@ -53,7 +53,7 @@
if(!(O.resistance_flags & ACID_PROOF))
if(prob(33))
playsound(O.loc, 'sound/items/welder.ogg', 150, 1)
- O.take_damage(min(1 + round(sqrt(level)*0.3), 300), BURN, "acid", 0)
+ O.take_damage(min(1 + round(sqrt(level)*0.3), 300), BURN, ACID, 0)
level = max(level - (5 + 3*round(sqrt(level))), 0)
if(level <= 0)
diff --git a/code/datums/components/armor_plate.dm b/code/datums/components/armor_plate.dm
index 763aef6a70..db22e2277b 100644
--- a/code/datums/components/armor_plate.dm
+++ b/code/datums/components/armor_plate.dm
@@ -2,7 +2,7 @@
var/amount = 0
var/maxamount = 3
var/upgrade_item = /obj/item/stack/sheet/animalhide/goliath_hide
- var/datum/armor/added_armor = list("melee" = 10)
+ var/datum/armor/added_armor = list(MELEE = 10)
var/upgrade_name
/datum/component/armor_plate/Initialize(_maxamount,obj/item/_upgrade_item,datum/armor/_added_armor)
@@ -12,7 +12,7 @@
RegisterSignal(parent, COMSIG_PARENT_EXAMINE, .proc/examine)
RegisterSignal(parent, COMSIG_PARENT_ATTACKBY, .proc/applyplate)
RegisterSignal(parent, COMSIG_PARENT_PREQDELETED, .proc/dropplates)
- if(istype(parent, /obj/mecha/working/ripley))
+ if(istype(parent, /obj/vehicle/sealed/mecha/working/ripley))
RegisterSignal(parent, COMSIG_ATOM_UPDATE_OVERLAYS, .proc/apply_mech_overlays)
if(_maxamount)
@@ -67,7 +67,7 @@
O.armor = O.armor.attachArmor(added_armor)
if(ismecha(O))
- var/obj/mecha/R = O
+ var/obj/vehicle/sealed/mecha/R = O
R.update_icon()
to_chat(user, "You strengthen [R], improving its resistance against melee, bullet and laser damage.")
else
@@ -80,11 +80,11 @@
for(var/i in 1 to amount)
new upgrade_item(get_turf(parent))
-/datum/component/armor_plate/proc/apply_mech_overlays(obj/mecha/mech, list/overlays)
+/datum/component/armor_plate/proc/apply_mech_overlays(obj/vehicle/sealed/mecha/mech, list/overlays)
if(amount)
var/overlay_string = "ripley-g"
if(amount >= 3)
overlay_string += "-full"
- if(!mech.occupant)
+ if(LAZYLEN(mech.occupants) < 1)
overlay_string += "-open"
overlays += overlay_string
diff --git a/code/datums/components/embedded.dm b/code/datums/components/embedded.dm
index dcbf40a16b..1535c3f142 100644
--- a/code/datums/components/embedded.dm
+++ b/code/datums/components/embedded.dm
@@ -152,7 +152,7 @@
to_chat(victim, "[weapon] sticks itself to your [limb.name]!")
if(damage > 0)
- var/armor = victim.run_armor_check(limb.body_zone, "melee", "Your armor has protected your [limb.name].", "Your armor has softened a hit to your [limb.name].",weapon.armour_penetration)
+ var/armor = victim.run_armor_check(limb.body_zone, MELEE, "Your armor has protected your [limb.name].", "Your armor has softened a hit to your [limb.name].",weapon.armour_penetration)
limb.receive_damage(brute=(1-pain_stam_pct) * damage, stamina=pain_stam_pct * damage, blocked=armor, sharpness = weapon.get_sharpness())
/// Called every time a carbon with a harmful embed moves, rolling a chance for the item to cause pain. The chance is halved if the carbon is crawling or walking.
diff --git a/code/datums/components/killerqueen.dm b/code/datums/components/killerqueen.dm
index c700e0d17e..0f7d3f0346 100644
--- a/code/datums/components/killerqueen.dm
+++ b/code/datums/components/killerqueen.dm
@@ -1,6 +1,6 @@
/**
* KILLER QUEEN
- *
+ *
* Simple contact bomb component
* Blows up the first person to touch it.
*/
@@ -26,7 +26,7 @@
var/flame = 0
/// only triggered by living mobs
var/living_only = TRUE
-
+
/datum/component/killerqueen/Initialize(ex_strength = EXPLODE_HEAVY, datum/callback/pre_explode, datum/callback/failure, examine_message, light = 0, heavy = 0, dev = 0, flame = 0, living_only = TRUE)
. = ..()
diff --git a/code/datums/components/knockoff.dm b/code/datums/components/knockoff.dm
index 7d399c7d26..b9cdb7754c 100644
--- a/code/datums/components/knockoff.dm
+++ b/code/datums/components/knockoff.dm
@@ -11,7 +11,7 @@
RegisterSignal(parent, COMSIG_ITEM_DROPPED,.proc/OnDropped)
src.knockoff_chance = knockoff_chance
-
+
if(zone_override)
target_zones = zone_override
diff --git a/code/datums/components/mirv.dm b/code/datums/components/mirv.dm
index 2a1663776c..77c47bcb1d 100644
--- a/code/datums/components/mirv.dm
+++ b/code/datums/components/mirv.dm
@@ -38,5 +38,5 @@
P.range = override_projectile_range
P.preparePixelProjectile(shootat_turf, target)
P.firer = firer // don't hit ourself that would be really annoying
- P.permutated += target // don't hit the target we hit already with the flak
+ P.impacted = list(target = TRUE) // don't hit the target we hit already with the flak
P.fire()
diff --git a/code/datums/components/pellet_cloud.dm b/code/datums/components/pellet_cloud.dm
index dcc806d991..a06242962f 100644
--- a/code/datums/components/pellet_cloud.dm
+++ b/code/datums/components/pellet_cloud.dm
@@ -242,7 +242,7 @@
P.original = target
P.fired_from = parent
P.firer = parent // don't hit ourself that would be really annoying
- P.permutated += parent // don't hit the target we hit already with the flak
+ P.impacted = list(parent = TRUE) // don't hit the target we hit already with the flak
P.suppressed = SUPPRESSED_VERY // set the projectiles to make no message so we can do our own aggregate message
P.preparePixelProjectile(target, parent)
RegisterSignal(P, COMSIG_PROJECTILE_SELF_ON_HIT, .proc/pellet_hit)
diff --git a/code/datums/components/squeak.dm b/code/datums/components/squeak.dm
index a285b7d3f2..faca18caff 100644
--- a/code/datums/components/squeak.dm
+++ b/code/datums/components/squeak.dm
@@ -42,6 +42,8 @@
RegisterSignal(parent, COMSIG_ITEM_DROPPED, .proc/on_drop)
if(istype(parent, /obj/item/clothing/shoes))
RegisterSignal(parent, COMSIG_SHOES_STEP_ACTION, .proc/step_squeak)
+ else if(isstructure(parent))
+ RegisterSignal(parent, COMSIG_ATOM_ATTACK_HAND, .proc/use_squeak)
override_squeak_sounds = custom_sounds
if(chance_override)
diff --git a/code/datums/components/storage/concrete/rped.dm b/code/datums/components/storage/concrete/rped.dm
index 3744e833ac..9d85dc6173 100644
--- a/code/datums/components/storage/concrete/rped.dm
+++ b/code/datums/components/storage/concrete/rped.dm
@@ -39,7 +39,7 @@
var/datum/progressbar/progress = new(M, length(things), T)
while (do_after(M, 10, TRUE, T, FALSE, CALLBACK(src, .proc/mass_remove_from_storage, T, things, progress, TRUE, M)))
stoplag(1)
- qdel(progress)
+ progress.end_progress()
A.do_squish(0.8, 1.2)
/datum/component/storage/concrete/bluespace/rped
@@ -83,5 +83,5 @@
var/datum/progressbar/progress = new(M, length(things), T)
while (do_after(M, 10, TRUE, T, FALSE, CALLBACK(src, .proc/mass_remove_from_storage, T, things, progress, TRUE, M)))
stoplag(1)
- qdel(progress)
+ progress.end_progress()
A.do_squish(0.8, 1.2)
diff --git a/code/datums/components/storage/storage.dm b/code/datums/components/storage/storage.dm
index c291a416fc..00a58a75f8 100644
--- a/code/datums/components/storage/storage.dm
+++ b/code/datums/components/storage/storage.dm
@@ -215,7 +215,7 @@
var/list/rejections = list()
while(do_after(M, 10, TRUE, parent, FALSE, CALLBACK(src, .proc/handle_mass_pickup, things, I.loc, rejections, progress)))
stoplag(1)
- qdel(progress)
+ progress.end_progress()
to_chat(M, "You put everything you could [insert_preposition] [parent].")
A.do_squish(1.4, 0.4)
@@ -273,7 +273,7 @@
var/datum/progressbar/progress = new(M, length(things), T)
while (do_after(M, 10, TRUE, T, FALSE, CALLBACK(src, .proc/mass_remove_from_storage, T, things, progress, TRUE, M)))
stoplag(1)
- qdel(progress)
+ progress.end_progress()
A.do_squish(0.8, 1.2)
/datum/component/storage/proc/mass_remove_from_storage(atom/target, list/things, datum/progressbar/progress, trigger_on_found = TRUE, mob/user)
diff --git a/code/datums/diseases/_MobProcs.dm b/code/datums/diseases/_MobProcs.dm
index d6c11ab452..c00a0fdb5d 100644
--- a/code/datums/diseases/_MobProcs.dm
+++ b/code/datums/diseases/_MobProcs.dm
@@ -145,7 +145,7 @@
return !is_mouth_covered()
/mob/living/carbon/CanSpreadAirborneDisease()
- return !((head && (head.flags_cover & HEADCOVERSMOUTH) && (head.armor.getRating("bio") >= 25)) || (wear_mask && (wear_mask.flags_cover & MASKCOVERSMOUTH) && (wear_mask.armor.getRating("bio") >= 25)))
+ return !((head && (head.flags_cover & HEADCOVERSMOUTH) && (head.armor.getRating(BIO) >= 25)) || (wear_mask && (wear_mask.flags_cover & MASKCOVERSMOUTH) && (wear_mask.armor.getRating(BIO) >= 25)))
/mob/living/proc/set_shocked()
flags_1 |= SHOCKED_1
diff --git a/code/datums/diseases/crabcancer.dm b/code/datums/diseases/crabcancer.dm
new file mode 100644
index 0000000000..a762028807
--- /dev/null
+++ b/code/datums/diseases/crabcancer.dm
@@ -0,0 +1,67 @@
+/datum/disease/crabcancer
+ name = "Crab Cancer"
+ form = "Skin Cancer"
+ max_stages = 3
+ cure_text = "Mutadone"
+ spread_text = "Noncontagious"
+ cures = list(/datum/reagent/medicine/mutadone)
+ agent = "Carcinisoprojection Jelly"
+ viable_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
+ permeability_mod = 1
+ desc = "If left untreated, the patient will rapidly and painfully grow flesh that will fall off the subject. This can result in death if unmaintained."
+ severity = DISEASE_SEVERITY_DANGEROUS
+ spread_flags = DISEASE_SPREAD_NON_CONTAGIOUS
+ visibility_flags = HIDDEN_PANDEMIC
+ bypasses_immunity = TRUE
+
+/datum/disease/crabcancer/stage_act()
+ ..()
+ switch(stage)
+ if(1)
+ if(prob(10))
+ to_chat(affected_mob, "" + pick("You feel uncomfortable.",
+ "You can feel your arms and legs throbbing.",
+ "You feel... crabby.",
+ "You're starting to smell like seafood.") + "")
+ if(2)
+ if(prob(10))
+ to_chat(affected_mob, "" + pick("Your flesh is starting to look deformed.",
+ "You feel your flesh bubbling and swelling.",
+ "You think you see pincers coming out of your flesh.",
+ "It's time for crab...") + "")
+ if(3)
+ if(prob(5))
+ to_chat(affected_mob, "" + pick("Your skin forms black, rough patches!",
+ "The pain is unbearable!",
+ "Your skin is forming painful cysts!") + "")
+ affected_mob.take_bodypart_damage(rand(1,5))
+ if(prob(5))
+ affected_mob.visible_message("[affected_mob]'s own flesh swells and tears away from \him!", \
+ "" + pick("You feel your flesh swelling and tearing away from you!",
+ "Your own flesh grows and falls beneath you!",
+ "The pain... the crabby meat falls off you!",
+ "Your flesh... it tears!",
+ "It is now time for crab!") + "",
+ "You hear a disgusting squelch of flesh being torn.")
+ playsound(affected_mob, 'sound/items/poster_ripped.ogg', 50, TRUE)
+ playsound(get_turf(affected_mob), 'sound/effects/splat.ogg', 20, TRUE)
+ affected_mob.emote("scream")
+ affected_mob.take_bodypart_damage(rand(15,25))
+ var/humanmeatamount = rand(0,2)
+ var/crabmeatamount = rand(1,2)
+ var/meattype = /obj/item/reagent_containers/food/snacks/meat/slab/human
+ if(ishuman(affected_mob))
+ meattype = affected_mob.dna.species.meat
+ else //grab the carbon's meat instead (usually this means monkey meat... though other disease-compatible carbon mobs might apply.)
+ meattype = affected_mob.type_of_meat
+
+ if(humanmeatamount)
+ for(var/i=1 to humanmeatamount)
+ var/obj/item/reagent_containers/food/snacks/meat/slab/newmeat = new meattype
+ newmeat.name = "[affected_mob.real_name] [newmeat.name]"
+ newmeat.forceMove(affected_mob.loc)
+ if(crabmeatamount)
+ for(var/i=1 to crabmeatamount)
+ new /obj/item/reagent_containers/food/snacks/meat/rawcrab(affected_mob.loc)
+ affected_mob.jitteriness += 3
+
diff --git a/code/datums/elements/art.dm b/code/datums/elements/art.dm
index 960d22af56..47908a2e2d 100644
--- a/code/datums/elements/art.dm
+++ b/code/datums/elements/art.dm
@@ -54,11 +54,14 @@
/datum/element/art/rev
-/datum/element/art/rev/apply_moodlet(atom/source, mob/M, impress)
- M.visible_message("[M] stops to inspect [source].", \
- "You take in [source], inspecting the fine craftsmanship of the proletariat.")
-
- if(M.mind && M.mind.has_antag_datum(/datum/antagonist/rev))
- SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "artgreat", /datum/mood_event/artgreat)
+/datum/element/art/rev/apply_moodlet(atom/source, mob/user, impress)
+ var/msg
+ if(user.mind?.has_antag_datum(/datum/antagonist/rev))
+ SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "artgreat", /datum/mood_event/artgreat)
+ msg = "What \a [pick("masterpiece", "chef-d'oeuvre")] [source.p_theyre()]. So [pick("subversive", "revolutionary", "unitizing", "egalitarian")]!"
else
- SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "artbad", /datum/mood_event/artbad)
+ SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "artbad", /datum/mood_event/artbad)
+ msg = "Wow, [source.p_they()] sucks."
+
+ user.visible_message(span_notice("[user] stops to inspect [source]."), \
+ span_notice("You appraise [source], inspecting the fine craftsmanship of the proletariat... [msg]"))
diff --git a/code/datums/elements/embed.dm b/code/datums/elements/embed.dm
index 4a9044b6e1..66c11e3668 100644
--- a/code/datums/elements/embed.dm
+++ b/code/datums/elements/embed.dm
@@ -79,7 +79,7 @@
var/actual_chance = embed_chance
if(!weapon.isEmbedHarmless()) // all the armor in the world won't save you from a kick me sign
- var/armor = max(victim.run_armor_check(hit_zone, "bullet", silent=TRUE), victim.run_armor_check(hit_zone, "bomb", silent=TRUE)) * 0.5 // we'll be nice and take the better of bullet and bomb armor, halved
+ var/armor = max(victim.run_armor_check(hit_zone, BULLET, silent=TRUE), victim.run_armor_check(hit_zone, BOMB, silent=TRUE)) * 0.5 // we'll be nice and take the better of bullet and bomb armor, halved
if(armor) // we only care about armor penetration if there's actually armor to penetrate
var/pen_mod = -armor + weapon.armour_penetration // even a little bit of armor can make a big difference for shrapnel with large negative armor pen
diff --git a/code/datums/elements/trash.dm b/code/datums/elements/trash.dm
index a83889c6ca..97864cd5f2 100644
--- a/code/datums/elements/trash.dm
+++ b/code/datums/elements/trash.dm
@@ -11,9 +11,9 @@
if(HAS_TRAIT(H, TRAIT_TRASHCAN))
playsound(H.loc,'sound/items/eatfood.ogg', rand(10,50), 1)
if(H.vore_selected)
- H.visible_message("[H] [H.vore_selected.vore_verb]s the [source] into their [H.vore_selected]",
- "You [H.vore_selected.vore_verb]s the [source] into your [H.vore_selected]")
+ H.visible_message("[H] [H.vore_selected.vore_verb]s the [source.name] into their [H.vore_selected.name]",
+ "You [H.vore_selected.vore_verb] the [source.name] into your [H.vore_selected.name]")
source.forceMove(H.vore_selected)
else
- H.visible_message("[H] consumes the [source].")
+ H.visible_message("[H] consumes the [source.name].")
qdel(source)
diff --git a/code/datums/martial/boxing.dm b/code/datums/martial/boxing.dm
index 5b6c0e222d..32b916d724 100644
--- a/code/datums/martial/boxing.dm
+++ b/code/datums/martial/boxing.dm
@@ -26,7 +26,7 @@
return TRUE
var/obj/item/bodypart/affecting = D.get_bodypart(ran_zone(A.zone_selected))
- var/armor_block = D.run_armor_check(affecting, "melee")
+ var/armor_block = D.run_armor_check(affecting, MELEE)
playsound(D.loc, A.dna.species.attack_sound, 25, 1, -1)
diff --git a/code/datums/martial/krav_maga.dm b/code/datums/martial/krav_maga.dm
index f8ed72eae8..d91e802a8a 100644
--- a/code/datums/martial/krav_maga.dm
+++ b/code/datums/martial/krav_maga.dm
@@ -98,7 +98,7 @@
/datum/martial_art/krav_maga/proc/leg_sweep(mob/living/carbon/human/A, mob/living/carbon/human/D)
var/obj/item/bodypart/affecting = D.get_bodypart(BODY_ZONE_CHEST)
- var/armor_block = D.run_armor_check(affecting, "melee")
+ var/armor_block = D.run_armor_check(affecting, MELEE)
var/damage = (damage_roll(A,D)*2 + 25)
if(!CHECK_MOBILITY(D, MOBILITY_STAND))
return FALSE
@@ -140,7 +140,7 @@
/datum/martial_art/krav_maga/harm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
var/obj/item/bodypart/affecting = D.get_bodypart(ran_zone(A.zone_selected))
- var/armor_block = D.run_armor_check(affecting, "melee")
+ var/armor_block = D.run_armor_check(affecting, MELEE)
if(check_streak(A,D))
return TRUE
log_combat(A, D, "punched")
@@ -165,7 +165,7 @@
if(check_streak(A,D))
return TRUE
var/obj/item/bodypart/affecting = D.get_bodypart(ran_zone(A.zone_selected))
- var/armor_block = D.run_armor_check(affecting, "melee")
+ var/armor_block = D.run_armor_check(affecting, MELEE)
var/damage = damage_roll(A,D)
var/stunthreshold = A.dna.species.punchstunthreshold
if(CHECK_MOBILITY(D, MOBILITY_STAND))
@@ -233,4 +233,4 @@
heat_protection = HANDS
max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
resistance_flags = NONE
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 50)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 50)
diff --git a/code/datums/martial/sleeping_carp.dm b/code/datums/martial/sleeping_carp.dm
index a55e947709..bac1614228 100644
--- a/code/datums/martial/sleeping_carp.dm
+++ b/code/datums/martial/sleeping_carp.dm
@@ -223,7 +223,7 @@
block_chance = 50
var/wielded = FALSE // track wielded status on item
-/obj/item/staff/bostaff/Initialize()
+/obj/item/staff/bostaff/Initialize(mapload)
. = ..()
RegisterSignal(src, COMSIG_TWOHANDED_WIELD, .proc/on_wield)
RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, .proc/on_unwield)
diff --git a/code/datums/materials/_material.dm b/code/datums/materials/_material.dm
index dbd976b2f7..c57b3bad8e 100644
--- a/code/datums/materials/_material.dm
+++ b/code/datums/materials/_material.dm
@@ -30,7 +30,7 @@ Simple datum which is instanced once per type and is used for every object of sa
///This is the amount of value per 1 unit of the material
var/value_per_unit = 0
///Armor modifiers, multiplies an items normal armor vars by these amounts.
- var/armor_modifiers = list("melee" = 1, "bullet" = 1, "laser" = 1, "energy" = 1, "bomb" = 1, "bio" = 1, "rad" = 1, "fire" = 1, "acid" = 1)
+ var/armor_modifiers = list(MELEE = 1, BULLET = 1, LASER = 1, ENERGY = 1, BOMB = 1, BIO = 1, RAD = 1, FIRE = 1, ACID = 1)
///How beautiful is this material per unit.
var/beauty_modifier = 0
///Can be used to override the sound items make, lets add some SLOSHing.
diff --git a/code/datums/materials/basemats.dm b/code/datums/materials/basemats.dm
index 5bf6b8642c..e423ccd1d6 100644
--- a/code/datums/materials/basemats.dm
+++ b/code/datums/materials/basemats.dm
@@ -18,7 +18,7 @@
sheet_type = /obj/item/stack/sheet/glass
value_per_unit = 0.0025
beauty_modifier = 0.05
- armor_modifiers = list("melee" = 0.2, "bullet" = 0.2, "laser" = 0, "energy" = 1, "bomb" = 0, "bio" = 0.2, "rad" = 0.2, "fire" = 1, "acid" = 0.2) // yeah ok
+ armor_modifiers = list(MELEE = 0.2, BULLET = 0.2, LASER = 0, ENERGY = 1, BOMB = 0, BIO = 0.2, RAD = 0.2, FIRE = 1, ACID = 0.2) // yeah ok
/*
Color matrices are like regular colors but unlike with normal colors, you can go over 255 on a channel.
@@ -45,7 +45,7 @@ Unless you know what you're doing, only use the first three numbers. They're in
sheet_type = /obj/item/stack/sheet/mineral/gold
value_per_unit = 0.0625
beauty_modifier = 0.15
- armor_modifiers = list("melee" = 1.1, "bullet" = 1.1, "laser" = 1.15, "energy" = 1.15, "bomb" = 1, "bio" = 1, "rad" = 1, "fire" = 0.7, "acid" = 1.1)
+ armor_modifiers = list(MELEE = 1.1, BULLET = 1.1, LASER = 1.15, ENERGY = 1.15, BOMB = 1, BIO = 1, RAD = 1, FIRE = 0.7, ACID = 1.1)
///Small force increase, for diamond swords
/datum/material/diamond
@@ -58,7 +58,7 @@ Unless you know what you're doing, only use the first three numbers. They're in
sheet_type = /obj/item/stack/sheet/mineral/diamond
value_per_unit = 0.25
beauty_modifier = 0.3
- armor_modifiers = list("melee" = 1.3, "bullet" = 1.3, "laser" = 0.6, "energy" = 1, "bomb" = 1.2, "bio" = 1, "rad" = 1, "fire" = 1, "acid" = 1)
+ armor_modifiers = list(MELEE = 1.3, BULLET = 1.3, LASER = 0.6, ENERGY = 1, BOMB = 1.2, BIO = 1, RAD = 1, FIRE = 1, ACID = 1)
///Is slightly radioactive
/datum/material/uranium
@@ -69,7 +69,7 @@ Unless you know what you're doing, only use the first three numbers. They're in
sheet_type = /obj/item/stack/sheet/mineral/uranium
value_per_unit = 0.05
beauty_modifier = 0.3 //It shines so beautiful
- armor_modifiers = list("melee" = 1.5, "bullet" = 1.4, "laser" = 0.5, "energy" = 0.5, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 1, "acid" = 1)
+ armor_modifiers = list(MELEE = 1.5, BULLET = 1.4, LASER = 0.5, ENERGY = 0.5, BOMB = 0, BIO = 0, RAD = 0, FIRE = 1, ACID = 1)
/datum/material/uranium/on_applied(atom/source, amount, material_flags)
. = ..()
@@ -90,7 +90,7 @@ Unless you know what you're doing, only use the first three numbers. They're in
sheet_type = /obj/item/stack/sheet/mineral/plasma
value_per_unit = 0.1
beauty_modifier = 0.15
- armor_modifiers = list("melee" = 1.4, "bullet" = 0.7, "laser" = 0, "energy" = 1.2, "bomb" = 0, "bio" = 1.2, "rad" = 1, "fire" = 0, "acid" = 0.5)
+ armor_modifiers = list(MELEE = 1.4, BULLET = 0.7, LASER = 0, ENERGY = 1.2, BOMB = 0, BIO = 1.2, RAD = 1, FIRE = 0, ACID = 0.5)
/datum/material/plasma/on_applied(atom/source, amount, material_flags)
. = ..()
@@ -124,7 +124,7 @@ Unless you know what you're doing, only use the first three numbers. They're in
sheet_type = /obj/item/stack/sheet/mineral/bananium
value_per_unit = 0.5
beauty_modifier = 0.5
- armor_modifiers = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 100, "bio" = 0, "rad" = 0, "fire" = 10, "acid" = 0) //Clowns cant be blown away
+ armor_modifiers = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 100, BIO = 0, RAD = 0, FIRE = 10, ACID = 0) //Clowns cant be blown away
/datum/material/bananium/on_applied(atom/source, amount, material_flags)
. = ..()
@@ -147,7 +147,7 @@ Unless you know what you're doing, only use the first three numbers. They're in
sheet_type = /obj/item/stack/sheet/mineral/titanium
value_per_unit = 0.0625
beauty_modifier = 0.05
- armor_modifiers = list("melee" = 1.35, "bullet" = 1.3, "laser" = 1.3, "energy" = 1.25, "bomb" = 1.25, "bio" = 1, "rad" = 1, "fire" = 0.7, "acid" = 1)
+ armor_modifiers = list(MELEE = 1.35, BULLET = 1.3, LASER = 1.3, ENERGY = 1.25, BOMB = 1.25, BIO = 1, RAD = 1, FIRE = 0.7, ACID = 1)
/datum/material/runite
name = "runite"
@@ -157,7 +157,7 @@ Unless you know what you're doing, only use the first three numbers. They're in
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE)
sheet_type = /obj/item/stack/sheet/mineral/runite
beauty_modifier = 0.5
- armor_modifiers = list("melee" = 1.35, "bullet" = 2, "laser" = 0.5, "energy" = 1.25, "bomb" = 1.25, "bio" = 1, "rad" = 1, "fire" = 1.4, "acid" = 1) //rune is weak against magic lasers but strong against bullets. This is the combat triangle.
+ armor_modifiers = list(MELEE = 1.35, BULLET = 2, LASER = 0.5, ENERGY = 1.25, BOMB = 1.25, BIO = 1, RAD = 1, FIRE = 1.4, ACID = 1) //rune is weak against magic lasers but strong against bullets. This is the combat triangle.
///Force decrease
/datum/material/plastic
@@ -168,7 +168,7 @@ Unless you know what you're doing, only use the first three numbers. They're in
sheet_type = /obj/item/stack/sheet/plastic
value_per_unit = 0.0125
beauty_modifier = -0.01
- armor_modifiers = list("melee" = 1.5, "bullet" = 1.1, "laser" = 0.3, "energy" = 0.5, "bomb" = 1, "bio" = 1, "rad" = 1, "fire" = 1.1, "acid" = 1)
+ armor_modifiers = list(MELEE = 1.5, BULLET = 1.1, LASER = 0.3, ENERGY = 0.5, BOMB = 1, BIO = 1, RAD = 1, FIRE = 1.1, ACID = 1)
///Force decrease and mushy sound effect. (Not yet implemented)
/datum/material/biomass
@@ -187,7 +187,7 @@ Unless you know what you're doing, only use the first three numbers. They're in
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE)
value_per_unit = 0.06
beauty_modifier = 0.1
- armor_modifiers = list("melee" = 1.1, "bullet" = 1.1, "laser" = 0.4, "energy" = 0.4, "bomb" = 1, "bio" = 0.2, "rad" = 0, "fire" = 0, "acid" = 0.3)
+ armor_modifiers = list(MELEE = 1.1, BULLET = 1.1, LASER = 0.4, ENERGY = 0.4, BOMB = 1, BIO = 0.2, RAD = 0, FIRE = 0, ACID = 0.3)
/datum/material/wood/on_applied_obj(obj/source, amount, material_flags)
. = ..()
@@ -211,7 +211,7 @@ Unless you know what you're doing, only use the first three numbers. They're in
sheet_type = /obj/item/stack/sheet/mineral/adamantine
value_per_unit = 0.25
beauty_modifier = 0.4
- armor_modifiers = list("melee" = 1.5, "bullet" = 1.5, "laser" = 1.3, "energy" = 1.3, "bomb" = 1, "bio" = 1, "rad" = 1, "fire" = 2.5, "acid" = 1)
+ armor_modifiers = list(MELEE = 1.5, BULLET = 1.5, LASER = 1.3, ENERGY = 1.3, BOMB = 1, BIO = 1, RAD = 1, FIRE = 2.5, ACID = 1)
///RPG Magic. (Admin only)
/datum/material/mythril
@@ -222,7 +222,7 @@ Unless you know what you're doing, only use the first three numbers. They're in
sheet_type = /obj/item/stack/sheet/mineral/mythril
value_per_unit = 0.75
beauty_modifier = 0.5
- armor_modifiers = list("melee" = 2, "bullet" = 2, "laser" = 2, "energy" = 2, "bomb" = 2, "bio" = 2, "rad" = 2, "fire" = 2, "acid" = 2)
+ armor_modifiers = list(MELEE = 2, BULLET = 2, LASER = 2, ENERGY = 2, BOMB = 2, BIO = 2, RAD = 2, FIRE = 2, ACID = 2)
/datum/material/mythril/on_applied_obj(atom/source, amount, material_flags)
. = ..()
@@ -244,7 +244,7 @@ Unless you know what you're doing, only use the first three numbers. They're in
value_per_unit = 0.001
strength_modifier = 0.5
integrity_modifier = 0.1
- armor_modifiers = list("melee" = 0.25, "bullet" = 0.25, "laser" = 1.25, "energy" = 0.25, "bomb" = 0.25, "bio" = 0.25, "rad" = 1.5, "fire" = 1.5, "acid" = 1.5)
+ armor_modifiers = list(MELEE = 0.25, BULLET = 0.25, LASER = 1.25, ENERGY = 0.25, BOMB = 0.25, BIO = 0.25, RAD = 1.5, FIRE = 1.5, ACID = 1.5)
beauty_modifier = 0.25
turf_sound_override = FOOTSTEP_SAND
texture_layer_icon_state = "sand"
@@ -257,7 +257,7 @@ Unless you know what you're doing, only use the first three numbers. They're in
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE)
sheet_type = /obj/item/stack/sheet/mineral/sandstone
value_per_unit = 0.0025
- armor_modifiers = list("melee" = 0.5, "bullet" = 0.5, "laser" = 1.25, "energy" = 0.5, "bomb" = 0.5, "bio" = 0.25, "rad" = 1.5, "fire" = 1.5, "acid" = 1.5)
+ armor_modifiers = list(MELEE = 0.5, BULLET = 0.5, LASER = 1.25, ENERGY = 0.5, BOMB = 0.5, BIO = 0.25, RAD = 1.5, FIRE = 1.5, ACID = 1.5)
beauty_modifier = 0.3
turf_sound_override = FOOTSTEP_WOOD
texture_layer_icon_state = "brick"
@@ -269,7 +269,7 @@ Unless you know what you're doing, only use the first three numbers. They're in
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE)
sheet_type = /obj/item/stack/sheet/mineral/snow
value_per_unit = 0.0025
- armor_modifiers = list("melee" = 0.25, "bullet" = 0.25, "laser" = 0.25, "energy" = 0.25, "bomb" = 0.25, "bio" = 0.25, "rad" = 1.5, "fire" = 0.25, "acid" = 1.5)
+ armor_modifiers = list(MELEE = 0.25, BULLET = 0.25, LASER = 0.25, ENERGY = 0.25, BOMB = 0.25, BIO = 0.25, RAD = 1.5, FIRE = 0.25, ACID = 1.5)
beauty_modifier = 0.3
turf_sound_override = FOOTSTEP_SAND
texture_layer_icon_state = "sand"
@@ -282,7 +282,7 @@ Unless you know what you're doing, only use the first three numbers. They're in
strength_modifier = 1.2
sheet_type = /obj/item/stack/sheet/runed_metal
value_per_unit = 0.75
- armor_modifiers = list("melee" = 1.2, "bullet" = 1.2, "laser" = 1, "energy" = 1, "bomb" = 1.2, "bio" = 1.2, "rad" = 1.5, "fire" = 1.5, "acid" = 1.5)
+ armor_modifiers = list(MELEE = 1.2, BULLET = 1.2, LASER = 1, ENERGY = 1, BOMB = 1.2, BIO = 1.2, RAD = 1.5, FIRE = 1.5, ACID = 1.5)
beauty_modifier = -0.15
texture_layer_icon_state = "runed"
@@ -294,7 +294,7 @@ Unless you know what you're doing, only use the first three numbers. They're in
strength_modifier = 1.3 // Replicant Alloy is very good for skull beatings..
sheet_type = /obj/item/stack/tile/brass
value_per_unit = 0.75
- armor_modifiers = list("melee" = 1.4, "bullet" = 1.4, "laser" = 0, "energy" = 0, "bomb" = 1.4, "bio" = 1.2, "rad" = 1.5, "fire" = 1.5, "acid" = 1.5) //But it has.. a few problems that can't easily be compensated for.
+ armor_modifiers = list(MELEE = 1.4, BULLET = 1.4, LASER = 0, ENERGY = 0, BOMB = 1.4, BIO = 1.2, RAD = 1.5, FIRE = 1.5, ACID = 1.5) //But it has.. a few problems that can't easily be compensated for.
beauty_modifier = 0.3 //It really beats the cold plain plating of the station, doesn't it?
/datum/material/bronze
@@ -305,7 +305,7 @@ Unless you know what you're doing, only use the first three numbers. They're in
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE)
sheet_type = /obj/item/stack/sheet/bronze
value_per_unit = 0.025
- armor_modifiers = list("melee" = 1, "bullet" = 1, "laser" = 1, "energy" = 1, "bomb" = 1, "bio" = 1, "rad" = 1.5, "fire" = 1.5, "acid" = 1.5)
+ armor_modifiers = list(MELEE = 1, BULLET = 1, LASER = 1, ENERGY = 1, BOMB = 1, BIO = 1, RAD = 1.5, FIRE = 1.5, ACID = 1.5)
beauty_modifier = 0.2
/datum/material/paper
@@ -315,7 +315,7 @@ Unless you know what you're doing, only use the first three numbers. They're in
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE)
sheet_type = /obj/item/stack/sheet/paperframes
value_per_unit = 0.0025
- armor_modifiers = list("melee" = 0.1, "bullet" = 0.1, "laser" = 0.1, "energy" = 0.1, "bomb" = 0.1, "bio" = 0.1, "rad" = 1.5, "fire" = 0, "acid" = 1.5)
+ armor_modifiers = list(MELEE = 0.1, BULLET = 0.1, LASER = 0.1, ENERGY = 0.1, BOMB = 0.1, BIO = 0.1, RAD = 1.5, FIRE = 0, ACID = 1.5)
beauty_modifier = 0.3
turf_sound_override = FOOTSTEP_SAND
texture_layer_icon_state = "paper"
@@ -340,7 +340,7 @@ Unless you know what you're doing, only use the first three numbers. They're in
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE)
sheet_type = /obj/item/stack/sheet/cardboard
value_per_unit = 0.003
- armor_modifiers = list("melee" = 0.25, "bullet" = 0.25, "laser" = 0.25, "energy" = 0.25, "bomb" = 0.25, "bio" = 0.25, "rad" = 1.5, "fire" = 0, "acid" = 1.5)
+ armor_modifiers = list(MELEE = 0.25, BULLET = 0.25, LASER = 0.25, ENERGY = 0.25, BOMB = 0.25, BIO = 0.25, RAD = 1.5, FIRE = 0, ACID = 1.5)
beauty_modifier = -0.1
/datum/material/cardboard/on_applied_obj(obj/source, amount, material_flags)
@@ -364,7 +364,7 @@ Unless you know what you're doing, only use the first three numbers. They're in
sheet_type = /obj/item/stack/sheet/bone
strength_modifier = 1.05
value_per_unit = 0.05
- armor_modifiers = list("melee" = 1.2, "bullet" = 0.75, "laser" = 0.75, "energy" = 1.2, "bomb" = 1, "bio" = 1, "rad" = 1.5, "fire" = 1.5, "acid" = 1.5)
+ armor_modifiers = list(MELEE = 1.2, BULLET = 0.75, LASER = 0.75, ENERGY = 1.2, BOMB = 1, BIO = 1, RAD = 1.5, FIRE = 1.5, ACID = 1.5)
beauty_modifier = -0.2
/datum/material/bamboo
@@ -374,7 +374,7 @@ Unless you know what you're doing, only use the first three numbers. They're in
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE)
sheet_type = /obj/item/stack/sheet/mineral/bamboo
value_per_unit = 0.0025
- armor_modifiers = list("melee" = 0.5, "bullet" = 0.5, "laser" = 0.5, "energy" = 0.5, "bomb" = 0.5, "bio" = 0.51, "rad" = 1.5, "fire" = 0.5, "acid" = 1.5)
+ armor_modifiers = list(MELEE = 0.5, BULLET = 0.5, LASER = 0.5, ENERGY = 0.5, BOMB = 0.5, BIO = 0.51, RAD = 1.5, FIRE = 0.5, ACID = 1.5)
beauty_modifier = 0.2
turf_sound_override = FOOTSTEP_WOOD
texture_layer_icon_state = "bamboo"
diff --git a/code/datums/materials/meat.dm b/code/datums/materials/meat.dm
index 14a373f2d2..c902aa078e 100644
--- a/code/datums/materials/meat.dm
+++ b/code/datums/materials/meat.dm
@@ -8,7 +8,7 @@
value_per_unit = 0.05
beauty_modifier = -0.3
strength_modifier = 0.7
- armor_modifiers = list("melee" = 0.3, "bullet" = 0.3, "laser" = 1.2, "energy" = 1.2, "bomb" = 0.3, "bio" = 0, "rad" = 0.7, "fire" = 1, "acid" = 1)
+ armor_modifiers = list(MELEE = 0.3, BULLET = 0.3, LASER = 1.2, ENERGY = 1.2, BOMB = 0.3, BIO = 0, RAD = 0.7, FIRE = 1, ACID = 1)
item_sound_override = 'sound/effects/meatslap.ogg'
turf_sound_override = FOOTSTEP_MEAT
texture_layer_icon_state = "meat"
diff --git a/code/datums/materials/pizza.dm b/code/datums/materials/pizza.dm
index 2a9542234f..013538614f 100644
--- a/code/datums/materials/pizza.dm
+++ b/code/datums/materials/pizza.dm
@@ -7,7 +7,7 @@
value_per_unit = 0.05
beauty_modifier = 0.1
strength_modifier = 0.7
- armor_modifiers = list("melee" = 0.3, "bullet" = 0.3, "laser" = 1.2, "energy" = 1.2, "bomb" = 0.3, "bio" = 0, "rad" = 0.7, "fire" = 1, "acid" = 1)
+ armor_modifiers = list(MELEE = 0.3, BULLET = 0.3, LASER = 1.2, ENERGY = 1.2, BOMB = 0.3, BIO = 0, RAD = 0.7, FIRE = 1, ACID = 1)
item_sound_override = 'sound/effects/meatslap.ogg'
turf_sound_override = FOOTSTEP_MEAT
texture_layer_icon_state = "pizza"
diff --git a/code/datums/mood_events/generic_negative_events.dm b/code/datums/mood_events/generic_negative_events.dm
index 4b2d872aec..3521fe756c 100644
--- a/code/datums/mood_events/generic_negative_events.dm
+++ b/code/datums/mood_events/generic_negative_events.dm
@@ -147,6 +147,11 @@
mood_change = -5
timeout = 1 MINUTES
+/datum/mood_event/painful_limb_regrowth
+ description = "It's great to have all my limbs back but that was absolutely painful.\n"
+ mood_change = -5
+ timeout = 1 MINUTES
+
/datum/mood_event/loud_gong
description = "That loud gong noise really hurt my ears!\n"
mood_change = -3
diff --git a/code/datums/mutations/actions.dm b/code/datums/mutations/actions.dm
index 8f7d67abb8..dad5237aa5 100644
--- a/code/datums/mutations/actions.dm
+++ b/code/datums/mutations/actions.dm
@@ -205,6 +205,16 @@
synchronizer_coeff = 1
var/reek = 200
+/datum/mutation/human/olfaction/on_acquiring(mob/living/carbon/human/owner)
+ if(..() || HAS_TRAIT(owner, TRAIT_ANOSMIA))
+ return TRUE
+ ADD_TRAIT(owner, TRAIT_GOODSMELL, GENETIC_MUTATION)
+
+/datum/mutation/human/olfaction/on_losing(mob/living/carbon/human/owner)
+ if(..())
+ return
+ REMOVE_TRAIT(owner, TRAIT_GOODSMELL, GENETIC_MUTATION)
+
/datum/mutation/human/olfaction/modify()
if(power)
var/obj/effect/proc_holder/spell/targeted/olfaction/S = power
diff --git a/code/datums/progressbar.dm b/code/datums/progressbar.dm
index c2e0d3c9d2..b3d7d2d633 100644
--- a/code/datums/progressbar.dm
+++ b/code/datums/progressbar.dm
@@ -1,67 +1,139 @@
#define PROGRESSBAR_HEIGHT 6
+#define PROGRESSBAR_ANIMATION_TIME 5
/datum/progressbar
- var/goal = 1
+ ///The progress bar visual element.
var/image/bar
- var/shown = 0
+ ///The target where this progress bar is applied and where it is shown.
+ var/atom/bar_loc
+ ///The mob whose client sees the progress bar.
var/mob/user
- var/client/client
- var/listindex
+ ///The client seeing the progress bar.
+ var/client/user_client
+ ///Effectively the number of steps the progress bar will need to do before reaching completion.
+ var/goal = 1
+ ///Control check to see if the progress was interrupted before reaching its goal.
+ var/last_progress = 0
+ ///Variable to ensure smooth visual stacking on multiple progress bars.
+ var/listindex = 0
+
/datum/progressbar/New(mob/User, goal_number, atom/target)
. = ..()
if (!istype(target))
- CRASH("Invalid target given")
- if (goal_number)
- goal = goal_number
- bar = image('icons/effects/progessbar.dmi', target, "prog_bar_0", HUD_LAYER)
- bar.plane = HUD_PLANE
+ EXCEPTION("Invalid target given")
+ if(QDELETED(User) || !istype(User))
+ stack_trace("/datum/progressbar created with [isnull(User) ? "null" : "invalid"] user")
+ qdel(src)
+ return
+ if(!isnum(goal_number))
+ stack_trace("/datum/progressbar created with [isnull(User) ? "null" : "invalid"] goal_number")
+ qdel(src)
+ return
+ goal = goal_number
+ bar_loc = target
+ bar = image('icons/effects/progessbar.dmi', bar_loc, "prog_bar_0")
+ bar.plane = ABOVE_HUD_PLANE
bar.appearance_flags = APPEARANCE_UI_IGNORE_ALPHA
user = User
- if(user)
- client = user.client
- LAZYINITLIST(user.progressbars)
- LAZYINITLIST(user.progressbars[bar.loc])
- var/list/bars = user.progressbars[bar.loc]
- bars.Add(src)
+ LAZYADDASSOCLIST(user.progressbars, bar_loc, src)
+ var/list/bars = user.progressbars[bar_loc]
listindex = bars.len
- bar.pixel_y = 32 + (PROGRESSBAR_HEIGHT * (listindex - 1))
-/datum/progressbar/proc/update(progress)
- if (!user || !user.client)
- shown = 0
- return
- if (user.client != client)
- if (client)
- client.images -= bar
- if (user.client)
- user.client.images += bar
+ if(user.client)
+ user_client = user.client
+ add_prog_bar_image_to_client()
- progress = clamp(progress, 0, goal)
- bar.icon_state = "prog_bar_[round(((progress / goal) * 100), 5)]"
- if (!shown)
- user.client.images += bar
- shown = 1
-
-/datum/progressbar/proc/shiftDown()
- --listindex
- bar.pixel_y -= PROGRESSBAR_HEIGHT
+ RegisterSignal(user, COMSIG_PARENT_QDELETING, .proc/on_user_delete)
+ RegisterSignal(user, COMSIG_MOB_CLIENT_LOGOUT, .proc/clean_user_client)
+ RegisterSignal(user, COMSIG_MOB_CLIENT_LOGIN, .proc/on_user_login)
/datum/progressbar/Destroy()
- for(var/I in user.progressbars[bar.loc])
- var/datum/progressbar/P = I
- if(P != src && P.listindex > listindex)
- P.shiftDown()
+ if(user)
+ for(var/pb in user.progressbars[bar_loc])
+ var/datum/progressbar/progress_bar = pb
+ if(progress_bar == src || progress_bar.listindex <= listindex)
+ continue
+ progress_bar.listindex--
- var/list/bars = user.progressbars[bar.loc]
- bars.Remove(src)
- if(!bars.len)
- LAZYREMOVE(user.progressbars, bar.loc)
+ progress_bar.bar.pixel_y = 32 + (PROGRESSBAR_HEIGHT * (progress_bar.listindex - 1))
+ var/dist_to_travel = 32 + (PROGRESSBAR_HEIGHT * (progress_bar.listindex - 1)) - PROGRESSBAR_HEIGHT
+ animate(progress_bar.bar, pixel_y = dist_to_travel, time = PROGRESSBAR_ANIMATION_TIME, easing = SINE_EASING)
- if (client)
- client.images -= bar
- qdel(bar)
- . = ..()
+ LAZYREMOVEASSOC(user.progressbars, bar_loc, src)
+ user = null
+ if(user_client)
+ clean_user_client()
+
+ bar_loc = null
+
+ if(bar)
+ QDEL_NULL(bar)
+
+ return ..()
+
+
+///Called right before the user's Destroy()
+/datum/progressbar/proc/on_user_delete(datum/source)
+ SIGNAL_HANDLER
+
+ user.progressbars = null //We can simply nuke the list and stop worrying about updating other prog bars if the user itself is gone.
+ user = null
+ qdel(src)
+
+
+///Removes the progress bar image from the user_client and nulls the variable, if it exists.
+/datum/progressbar/proc/clean_user_client(datum/source)
+ SIGNAL_HANDLER
+
+ if(!user_client) //Disconnected, already gone.
+ return
+ user_client.images -= bar
+ user_client = null
+
+
+///Called by user's Login(), it transfers the progress bar image to the new client.
+/datum/progressbar/proc/on_user_login(datum/source)
+ SIGNAL_HANDLER
+
+ if(user_client)
+ if(user_client == user.client) //If this was not client handling I'd condemn this sanity check. But clients are fickle things.
+ return
+ clean_user_client()
+ if(!user.client) //Clients can vanish at any time, the bastards.
+ return
+ user_client = user.client
+ add_prog_bar_image_to_client()
+
+
+///Adds a smoothly-appearing progress bar image to the player's screen.
+/datum/progressbar/proc/add_prog_bar_image_to_client()
+ bar.pixel_y = 0
+ bar.alpha = 0
+ user_client.images += bar
+ animate(bar, pixel_y = 32 + (PROGRESSBAR_HEIGHT * (listindex - 1)), alpha = 255, time = PROGRESSBAR_ANIMATION_TIME, easing = SINE_EASING)
+
+
+///Updates the progress bar image visually.
+/datum/progressbar/proc/update(progress)
+ progress = clamp(progress, 0, goal)
+ if(progress == last_progress)
+ return
+ last_progress = progress
+ bar.icon_state = "prog_bar_[round(((progress / goal) * 100), 5)]"
+
+
+///Called on progress end, be it successful or a failure. Wraps up things to delete the datum and bar.
+/datum/progressbar/proc/end_progress()
+ if(last_progress != goal)
+ bar.icon_state = "[bar.icon_state]_fail"
+
+ animate(bar, alpha = 0, time = PROGRESSBAR_ANIMATION_TIME)
+
+ QDEL_IN(src, PROGRESSBAR_ANIMATION_TIME)
+
+
+#undef PROGRESSBAR_ANIMATION_TIME
#undef PROGRESSBAR_HEIGHT
diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm
index eda3470a0b..77638d157b 100644
--- a/code/datums/status_effects/buffs.dm
+++ b/code/datums/status_effects/buffs.dm
@@ -69,7 +69,7 @@
..()
/datum/status_effect/vanguard_shield/Destroy()
- qdel(progbar)
+ progbar.end_progress()
progbar = null
return ..()
diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm
index b5a7a38915..5fc0263952 100644
--- a/code/datums/status_effects/debuffs.dm
+++ b/code/datums/status_effects/debuffs.dm
@@ -127,13 +127,58 @@
desc = "You've fallen asleep. Wait a bit and you should wake up. Unless you don't, considering how helpless you are."
icon_state = "asleep"
-
/datum/status_effect/grouped/stasis
id = "stasis"
duration = -1
tick_interval = 10
+ alert_type = /atom/movable/screen/alert/status_effect/stasis
var/last_dead_time
+/datum/status_effect/grouped/stasis/proc/update_time_of_death()
+ if(last_dead_time)
+ var/delta = world.time - last_dead_time
+ var/new_timeofdeath = owner.timeofdeath + delta
+ owner.timeofdeath = new_timeofdeath
+ owner.tod = gameTimestamp(wtime=new_timeofdeath)
+ last_dead_time = null
+ if(owner.stat == DEAD)
+ last_dead_time = world.time
+
+/datum/status_effect/grouped/stasis/on_creation(mob/living/new_owner, set_duration)
+ . = ..()
+ if(.)
+ update_time_of_death()
+ owner.reagents?.end_metabolization(owner, FALSE)
+
+/datum/status_effect/grouped/stasis/on_apply()
+ . = ..()
+ if(!.)
+ return
+ RegisterSignal(owner, COMSIG_LIVING_LIFE, .proc/InterruptBiologicalLife)
+ owner.mobility_flags &= ~(MOBILITY_USE | MOBILITY_PICKUP | MOBILITY_PULL | MOBILITY_HOLD)
+ owner.update_mobility()
+ owner.add_filter("stasis_status_ripple", 2, list("type" = "ripple", "flags" = WAVE_BOUNDED, "radius" = 0, "size" = 2))
+ var/filter = owner.get_filter("stasis_status_ripple")
+ animate(filter, radius = 32, time = 15, size = 0, loop = -1)
+
+/datum/status_effect/grouped/stasis/proc/InterruptBiologicalLife()
+ return COMPONENT_INTERRUPT_LIFE_BIOLOGICAL
+
+/datum/status_effect/grouped/stasis/tick()
+ update_time_of_death()
+
+/datum/status_effect/grouped/stasis/on_remove()
+ UnregisterSignal(owner, COMSIG_LIVING_LIFE)
+ owner.mobility_flags |= MOBILITY_USE | MOBILITY_PICKUP | MOBILITY_PULL | MOBILITY_HOLD
+ owner.remove_filter("stasis_status_ripple")
+ update_time_of_death()
+ return ..()
+
+/atom/movable/screen/alert/status_effect/stasis
+ name = "Stasis"
+ desc = "Your biological functions have halted. You could live forever this way, but it's pretty boring."
+ icon_state = "stasis"
+
/datum/status_effect/robotic_emp
id = "emp_no_combat_mode"
@@ -819,7 +864,7 @@
/obj/effect/temp_visual/curse
icon_state = "curse"
-/obj/effect/temp_visual/curse/Initialize()
+/obj/effect/temp_visual/curse/Initialize(mapload)
. = ..()
deltimer(timerid)
diff --git a/code/datums/traits/negative.dm b/code/datums/traits/negative.dm
index 10f66fce0c..8958226ff4 100644
--- a/code/datums/traits/negative.dm
+++ b/code/datums/traits/negative.dm
@@ -416,3 +416,12 @@ GLOBAL_LIST_EMPTY(family_heirlooms)
. = ..()
var/mob/living/carbon/human/H = quirk_holder
H?.cure_trauma_type(/datum/brain_trauma/severe/monophobia, TRAUMA_RESILIENCE_ABSOLUTE)
+
+/datum/quirk/no_smell
+ name = "Anosmia"
+ desc = "You can't smell anything! You won't be able to detect certain colorless gases."
+ value = -1
+ mob_trait = TRAIT_ANOSMIA
+ gain_text = "You can't smell anything!"
+ lose_text = "You can smell again!"
+ medical_record_text = "Patient suffers from anosmia and is incapable of smelling gases or particulates."
diff --git a/code/datums/traits/neutral.dm b/code/datums/traits/neutral.dm
index 6b2cdbd455..aebe6ec7fa 100644
--- a/code/datums/traits/neutral.dm
+++ b/code/datums/traits/neutral.dm
@@ -179,3 +179,10 @@
var/mob/living/carbon/human/H = quirk_holder
SEND_SIGNAL(H.back, COMSIG_TRY_STORAGE_SHOW, H)
to_chat(quirk_holder, "You brought some extra dye with you! It's in your bag if you forgot.")
+
+/datum/quirk/salt_sensitive
+ name = "Sodium Sensitivity"
+ desc = "Your body is sensitive to sodium, and is burnt upon contact. Ingestion or contact with it is not advised."
+ value = 0
+ medical_record_text = "Patient should not come into contact with sodium."
+ mob_trait = TRAIT_SALT_SENSITIVE
diff --git a/code/datums/weather/weather_types/acid_rain.dm b/code/datums/weather/weather_types/acid_rain.dm
index a1ec4871d5..9fa12a0938 100644
--- a/code/datums/weather/weather_types/acid_rain.dm
+++ b/code/datums/weather/weather_types/acid_rain.dm
@@ -27,6 +27,6 @@
/datum/weather/acid_rain/weather_act(mob/living/L)
- var/resist = L.getarmor(null, "acid")
+ var/resist = L.getarmor(null, ACID)
if(prob(max(0,100-resist)))
L.acid_act(20,20)
diff --git a/code/datums/weather/weather_types/radiation_storm.dm b/code/datums/weather/weather_types/radiation_storm.dm
index 5c14968be4..acc0232c21 100644
--- a/code/datums/weather/weather_types/radiation_storm.dm
+++ b/code/datums/weather/weather_types/radiation_storm.dm
@@ -30,7 +30,7 @@
status_alarm(TRUE)
/datum/weather/rad_storm/weather_act(mob/living/L)
- var/resist = L.getarmor(null, "rad")
+ var/resist = L.getarmor(null, RAD)
var/ratio = 1 - (min(resist, 100) / 100)
L.rad_act(radiation_intensity * ratio)
diff --git a/code/game/area/Space_Station_13_areas.dm b/code/game/area/Space_Station_13_areas.dm
index 5b52ec14de..a5b9dd2fc7 100644
--- a/code/game/area/Space_Station_13_areas.dm
+++ b/code/game/area/Space_Station_13_areas.dm
@@ -126,7 +126,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
ambientsounds = RUINS
area_flags = UNIQUE_AREA | NO_ALERTS
-/area/asteroid/artifactroom/Initialize()
+/area/asteroid/artifactroom/Initialize(mapload)
. = ..()
set_dynamic_lighting()
diff --git a/code/game/area/ai_monitored.dm b/code/game/area/ai_monitored.dm
index 911cdde658..0123e20a07 100644
--- a/code/game/area/ai_monitored.dm
+++ b/code/game/area/ai_monitored.dm
@@ -31,6 +31,6 @@
cam.lostTargetRef(WEAKREF(O))
return
-/area/ai_monitored/turret_protected/ai/Initialize()
+/area/ai_monitored/turret_protected/ai/Initialize(mapload)
. = ..()
src.area_flags |= ABDUCTOR_PROOF
diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm
index b922f52315..44916cf1d2 100644
--- a/code/game/area/areas.dm
+++ b/code/game/area/areas.dm
@@ -41,7 +41,7 @@
///Will objects this area be needing power?
var/requires_power = TRUE
- /// This gets overridden to 1 for space in area/Initialize().
+ /// This gets overridden to 1 for space in area/Initialize(mapload).
var/always_unpowered = FALSE
var/power_equip = TRUE
@@ -197,7 +197,7 @@ GLOBAL_LIST_EMPTY(teleportlocs)
*
* returns INITIALIZE_HINT_LATELOAD
*/
-/area/Initialize()
+/area/Initialize(mapload)
icon_state = ""
map_name = name // Save the initial (the name set in the map) name of the area.
canSmoothWithAreas = typecacheof(canSmoothWithAreas)
diff --git a/code/game/area/areas/centcom.dm b/code/game/area/areas/centcom.dm
index 0befe0bd86..6fe4c8fc65 100644
--- a/code/game/area/areas/centcom.dm
+++ b/code/game/area/areas/centcom.dm
@@ -59,7 +59,7 @@
icon_state = "supplypod_loading"
var/loading_id = ""
-/area/centcom/supplypod/loading/Initialize()
+/area/centcom/supplypod/loading/Initialize(mapload)
. = ..()
if(!loading_id)
CRASH("[type] created without a loading_id")
diff --git a/code/game/area/areas/edina.dm b/code/game/area/areas/edina.dm
index ab785f61ff..75c99334f7 100644
--- a/code/game/area/areas/edina.dm
+++ b/code/game/area/areas/edina.dm
@@ -169,7 +169,7 @@
name = "planet z helper"
layer = POINT_LAYER
-/obj/effect/mapping_helpers/planet_z/Initialize()
+/obj/effect/mapping_helpers/planet_z/Initialize(mapload)
. = ..()
var/datum/space_level/S = SSmapping.get_level(z)
S.traits["Planet"] = TRUE //This probably doesn't work as I expect. But maybe!!
diff --git a/code/game/area/areas/holodeck.dm b/code/game/area/areas/holodeck.dm
index 3bc73a945f..35d6f1d202 100644
--- a/code/game/area/areas/holodeck.dm
+++ b/code/game/area/areas/holodeck.dm
@@ -14,7 +14,7 @@
Asserts are to avoid the inevitable infinite loops
*/
-/area/holodeck/Initialize()
+/area/holodeck/Initialize(mapload)
. = ..()
var/list/update_holodeck_cache = SSholodeck?.rejected_areas[type]
if(update_holodeck_cache)
diff --git a/code/game/area/areas/shuttles.dm b/code/game/area/areas/shuttles.dm
index c8ee2973c4..e86f2ffe06 100644
--- a/code/game/area/areas/shuttles.dm
+++ b/code/game/area/areas/shuttles.dm
@@ -15,7 +15,7 @@
// area_limited_icon_smoothing = /area/shuttle
sound_environment = SOUND_ENVIRONMENT_ROOM
-/area/shuttle/Initialize()
+/area/shuttle/Initialize(mapload)
if(!canSmoothWithAreas)
canSmoothWithAreas = type
. = ..()
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index 6d600eefa1..242f3123e1 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -9,6 +9,9 @@
plane = GAME_PLANE
appearance_flags = TILE_BOUND
+ /// pass_flags that we are. If any of this matches a pass_flag on a moving thing, by default, we let them through.
+ var/pass_flags_self = NONE
+
var/level = 2
///If non-null, overrides a/an/some in all cases
var/article
@@ -267,14 +270,29 @@
var/a_incidence_s = abs(incidence_s)
if(a_incidence_s > 90 && a_incidence_s < 270)
return FALSE
- if((P.flag in list("bullet", "bomb")) && P.ricochet_incidence_leeway)
+ if((P.flag in list(BULLET, BOMB)) && P.ricochet_incidence_leeway)
if((a_incidence_s < 90 && a_incidence_s < 90 - P.ricochet_incidence_leeway) || (a_incidence_s > 270 && a_incidence_s -270 > P.ricochet_incidence_leeway))
- return
+ return FALSE
var/new_angle_s = SIMPLIFY_DEGREES(face_angle + incidence_s)
P.setAngle(new_angle_s)
return TRUE
/atom/proc/CanPass(atom/movable/mover, turf/target)
+ //SHOULD_CALL_PARENT(TRUE)
+ if(mover.movement_type & PHASING)
+ return TRUE
+ . = CanAllowThrough(mover, target)
+ // This is cheaper than calling the proc every time since most things dont override CanPassThrough
+ if(!mover.generic_canpass)
+ return mover.CanPassThrough(src, target, .)
+
+/// Returns true or false to allow the mover to move through src
+/atom/proc/CanAllowThrough(atom/movable/mover, turf/target)
+ //SHOULD_CALL_PARENT(TRUE)
+ if(mover.pass_flags & pass_flags_self)
+ return TRUE
+ if(mover.throwing && (pass_flags_self & LETPASSTHROW))
+ return TRUE
return !density
/**
@@ -445,9 +463,19 @@
wires.emp_pulse(severity)
return protection // Pass the protection value collected here upwards
-/atom/proc/bullet_act(obj/item/projectile/P, def_zone)
+/**
+ * React to a hit by a projectile object
+ *
+ * Default behaviour is to send the [COMSIG_ATOM_BULLET_ACT] and then call [on_hit][/obj/item/projectile/proc/on_hit] on the projectile
+ *
+ * @params
+ * P - projectile
+ * def_zone - zone hit
+ * piercing_hit - is this hit piercing or normal?
+ */
+/atom/proc/bullet_act(obj/item/projectile/P, def_zone, piercing_hit = FALSE)
SEND_SIGNAL(src, COMSIG_ATOM_BULLET_ACT, P, def_zone)
- . = P.on_hit(src, 0, def_zone)
+ . = P.on_hit(src, 0, def_zone, piercing_hit)
//used on altdisarm() for special interactions between the shoved victim (target) and the src, with user being the one shoving the target on it.
// IMPORTANT: if you wish to add a new own shove_act() to a certain object, remember to add SHOVABLE_ONTO to its obj_flags bitfied var first.
@@ -860,10 +888,11 @@
var/datum/progressbar/progress = new(user, things.len, src)
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
if(STR == src_object)
+ progress.end_progress()
return
while (do_after(user, 10, TRUE, src, FALSE, CALLBACK(STR, /datum/component/storage.proc/handle_mass_item_insertion, things, src_object, user, progress)))
stoplag(1)
- qdel(progress)
+ progress.end_progress()
to_chat(user, "You dump as much of [src_object.parent]'s contents into [STR.insert_preposition]to [src] as you can.")
if(user.active_storage) //refresh the HUD to show the transfered contents
user.active_storage.ui_show(user)
@@ -896,9 +925,6 @@
SEND_SIGNAL(src, COMSIG_ATOM_DIR_CHANGE, dir, newdir)
dir = newdir
-/atom/proc/mech_melee_attack(obj/mecha/M)
- return
-
//If a mob logouts/logins in side of an object you can use this proc
/atom/proc/on_log(login)
if(loc)
@@ -1162,6 +1188,8 @@
log_game(log_text)
if(LOG_GAME)
log_game(log_text)
+ if(LOG_MECHA)
+ log_mecha(log_text)
if(LOG_SHUTTLE)
log_shuttle(log_text)
else
diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm
index 5da389fbb8..56c668a24b 100644
--- a/code/game/atoms_movable.dm
+++ b/code/game/atoms_movable.dm
@@ -25,7 +25,10 @@
var/inertia_moving = 0
var/inertia_next_move = 0
var/inertia_move_delay = 5
- var/pass_flags = 0
+ /// Things we can pass through while moving. If any of this matches the thing we're trying to pass's [pass_flags_self], then we can pass through.
+ var/pass_flags = NONE
+ /// If false makes CanPass call CanPassThrough on this type instead of using default behaviour
+ var/generic_canpass = TRUE
var/moving_diagonally = 0 //0: not doing a diagonal move. 1 and 2: doing the first/second step of the diagonal move
var/atom/movable/moving_from_pull //attempt to resume grab after moving instead of before.
var/list/acted_explosions //for explosion dodging
@@ -473,10 +476,15 @@
/atom/movable/proc/move_crushed(atom/movable/pusher, force = MOVE_FORCE_DEFAULT, direction)
return FALSE
-/atom/movable/CanPass(atom/movable/mover, turf/target)
+/atom/movable/CanAllowThrough(atom/movable/mover, turf/target)
+ . = ..()
if(mover in buckled_mobs)
return TRUE
- return ..()
+
+/// Returns true or false to allow src to move through the blocker, mover has final say
+/atom/movable/proc/CanPassThrough(atom/blocker, turf/target, blocker_opinion)
+ SHOULD_CALL_PARENT(TRUE)
+ return blocker_opinion
/// called when this atom is removed from a storage item, which is passed on as S. The loc variable is already set to the new destination before this is called.
/atom/movable/proc/on_exit_storage(datum/component/storage/concrete/S) // rename S to master_storage
diff --git a/code/game/gamemodes/clown_ops/clown_weapons.dm b/code/game/gamemodes/clown_ops/clown_weapons.dm
index 081ffbbdc4..f17cfde761 100644
--- a/code/game/gamemodes/clown_ops/clown_weapons.dm
+++ b/code/game/gamemodes/clown_ops/clown_weapons.dm
@@ -17,7 +17,7 @@
desc = "advanced clown shoes that protect the wearer and render them nearly immune to slipping on their own peels. They also squeak at 100% capacity."
clothing_flags = NOSLIP
slowdown = SHOES_SLOWDOWN
- armor = list("melee" = 25, "bullet" = 25, "laser" = 25, "energy" = 25, "bomb" = 50, "bio" = 10, "rad" = 0, "fire" = 70, "acid" = 50)
+ armor = list(MELEE = 25, BULLET = 25, LASER = 25, ENERGY = 25, BOMB = 50, BIO = 10, RAD = 0, FIRE = 70, ACID = 50)
strip_delay = 70
resistance_flags = NONE
permeability_coefficient = 0.05
@@ -28,7 +28,7 @@
name = "mk-honk combat shoes"
desc = "The culmination of years of clown combat research, these shoes leave a trail of chaos in their wake. They will slowly recharge themselves over time, or can be manually charged with bananium."
slowdown = SHOES_SLOWDOWN
- armor = list("melee" = 25, "bullet" = 25, "laser" = 25, "energy" = 25, "bomb" = 50, "bio" = 10, "rad" = 0, "fire" = 70, "acid" = 50)
+ armor = list(MELEE = 25, BULLET = 25, LASER = 25, ENERGY = 25, BOMB = 50, BIO = 10, RAD = 0, FIRE = 70, ACID = 50)
strip_delay = 70
resistance_flags = NONE
permeability_coefficient = 0.05
@@ -37,7 +37,7 @@
var/max_recharge = 3000 //30 peels worth
var/recharge_rate = 34 //about 1/3 of a peel per tick
-/obj/item/clothing/shoes/clown_shoes/banana_shoes/combat/Initialize()
+/obj/item/clothing/shoes/clown_shoes/banana_shoes/combat/Initialize(mapload)
. = ..()
var/datum/component/material_container/bananium = GetComponent(/datum/component/material_container)
bananium.insert_amount_mat(max_recharge, /datum/material/bananium)
@@ -69,7 +69,7 @@
var/next_trombone_allowed = 0
var/datum/component/slippery/slipper
-/obj/item/melee/transforming/energy/sword/bananium/Initialize()
+/obj/item/melee/transforming/energy/sword/bananium/Initialize(mapload)
. = ..()
slipper = LoadComponent(/datum/component/slippery, 81, GALOSHES_DONT_HELP)
slipper.signal_enabled = active
@@ -128,7 +128,7 @@
on_throw_speed = 1
var/datum/component/slippery/slipper
-/obj/item/shield/energy/bananium/Initialize()
+/obj/item/shield/energy/bananium/Initialize(mapload)
. = ..()
slipper = LoadComponent(/datum/component/slippery, 81, GALOSHES_DONT_HELP)
slipper.signal_enabled = active
@@ -173,7 +173,7 @@
var/det_time = 50
var/obj/item/grenade/syndieminibomb/bomb
-/obj/item/grown/bananapeel/bombanana/Initialize()
+/obj/item/grown/bananapeel/bombanana/Initialize(mapload)
. = ..()
AddComponent(/datum/component/slippery, det_time)
bomb = new /obj/item/grenade/syndieminibomb(src)
@@ -219,7 +219,7 @@
/obj/item/clothing/mask/fakemoustache/sticky
var/unstick_time = 2 MINUTES
-/obj/item/clothing/mask/fakemoustache/sticky/Initialize()
+/obj/item/clothing/mask/fakemoustache/sticky/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, STICKY_MOUSTACHE_TRAIT)
addtimer(TRAIT_CALLBACK_REMOVE(src, TRAIT_NODROP, STICKY_MOUSTACHE_TRAIT), unstick_time)
@@ -243,7 +243,7 @@
projectiles = 8
projectile_energy_cost = 1000
-/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/banana_mortar/bombanana/can_attach(obj/mecha/combat/honker/M)
+/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/banana_mortar/bombanana/can_attach(obj/vehicle/sealed/mecha/combat/honker/M)
if(..())
if(istype(M))
return TRUE
@@ -261,42 +261,33 @@
equip_cooldown = 60
det_time = 20
-/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang/tearstache/can_attach(obj/mecha/combat/honker/M)
+/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang/tearstache/can_attach(obj/vehicle/sealed/mecha/combat/honker/M)
if(..())
if(istype(M))
return TRUE
return FALSE
-/obj/mecha/combat/honker/dark
+/obj/vehicle/sealed/mecha/combat/honker/dark
desc = "Produced by \"Tyranny of Honk, INC\", this exosuit is designed as heavy clown-support. This one has been painted black for maximum fun. HONK!"
name = "\improper Dark H.O.N.K"
icon_state = "darkhonker"
max_integrity = 300
deflect_chance = 15
- armor = list("melee" = 40, "bullet" = 40, "laser" = 50, "energy" = 35, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
+ armor = list(MELEE = 40, BULLET = 40, LASER = 50, ENERGY = 35, BOMB = 20, BIO = 0, RAD = 0, FIRE = 100, ACID = 100)
max_temperature = 35000
operation_req_access = list(ACCESS_SYNDICATE)
internals_req_access = list(ACCESS_SYNDICATE)
wreckage = /obj/structure/mecha_wreckage/honker/dark
max_equip = 3
-/obj/mecha/combat/honker/dark/GrantActions(mob/living/user, human_occupant = 0)
- ..()
- thrusters_action.Grant(user, src)
-
-
-/obj/mecha/combat/honker/dark/RemoveActions(mob/living/user, human_occupant = 0)
- ..()
- thrusters_action.Remove(user)
-
-/obj/mecha/combat/honker/dark/add_cell(obj/item/stock_parts/cell/C)
+/obj/vehicle/sealed/mecha/combat/honker/dark/add_cell(obj/item/stock_parts/cell/C)
if(C)
C.forceMove(src)
cell = C
return
cell = new /obj/item/stock_parts/cell/hyper(src)
-/obj/mecha/combat/honker/dark/loaded/Initialize()
+/obj/vehicle/sealed/mecha/combat/honker/dark/loaded/Initialize(mapload)
. = ..()
var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/honker()
ME.attach(src)
diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm
index 9953b593d9..446573e2af 100644
--- a/code/game/gamemodes/meteor/meteors.dm
+++ b/code/game/gamemodes/meteor/meteors.dm
@@ -281,7 +281,7 @@ GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust)) //for space dust event
var/meteorgibs = /obj/effect/gibspawner/generic
threat = 2
-/obj/effect/meteor/meaty/Initialize()
+/obj/effect/meteor/meaty/Initialize(mapload)
for(var/path in meteordrop)
if(path == /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant)
meteordrop -= path
@@ -312,7 +312,7 @@ GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust)) //for space dust event
meteordrop = list(/obj/item/reagent_containers/food/snacks/meat/slab/xeno, /obj/item/organ/tongue/alien)
meteorgibs = /obj/effect/gibspawner/xeno
-/obj/effect/meteor/meaty/xeno/Initialize()
+/obj/effect/meteor/meaty/xeno/Initialize(mapload)
meteordrop += subtypesof(/obj/item/organ/alien)
return ..()
@@ -363,7 +363,7 @@ GLOBAL_LIST_INIT(meteorsSPOOKY, list(/obj/effect/meteor/pumpkin))
meteordrop = list(/obj/item/clothing/head/hardhat/pumpkinhead, /obj/item/reagent_containers/food/snacks/grown/pumpkin)
threat = 100
-/obj/effect/meteor/pumpkin/Initialize()
+/obj/effect/meteor/pumpkin/Initialize(mapload)
. = ..()
meteorsound = pick('sound/hallucinations/im_here1.ogg','sound/hallucinations/im_here2.ogg')
//////////////////////////
diff --git a/code/game/machinery/Beacon.dm b/code/game/machinery/Beacon.dm
index e9968dadd4..d708af7d7a 100644
--- a/code/game/machinery/Beacon.dm
+++ b/code/game/machinery/Beacon.dm
@@ -10,7 +10,7 @@
idle_power_usage = 0
var/obj/item/beacon/Beacon
-/obj/machinery/bluespace_beacon/Initialize()
+/obj/machinery/bluespace_beacon/Initialize(mapload)
. = ..()
var/turf/T = loc
Beacon = new(T)
diff --git a/code/game/machinery/PDApainter.dm b/code/game/machinery/PDApainter.dm
index 69b39bd382..f6eebb8544 100644
--- a/code/game/machinery/PDApainter.dm
+++ b/code/game/machinery/PDApainter.dm
@@ -31,7 +31,7 @@
if(storedpda)
. += "[initial(icon_state)]-closed"
-/obj/machinery/pdapainter/Initialize()
+/obj/machinery/pdapainter/Initialize(mapload)
. = ..()
var/list/blocked = list(
/obj/item/pda/ai/pai,
diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm
index 06e1635656..706b2520dd 100644
--- a/code/game/machinery/Sleeper.dm
+++ b/code/game/machinery/Sleeper.dm
@@ -29,7 +29,7 @@
payment_department = ACCOUNT_MED
fair_market_price = 5
-/obj/machinery/sleeper/Initialize()
+/obj/machinery/sleeper/Initialize(mapload)
. = ..()
// if(mapload)
// component_parts -= circuit
@@ -278,7 +278,7 @@
icon_state = "sleeper_s"
controls_inside = TRUE
-/obj/machinery/sleeper/syndie/Initialize()
+/obj/machinery/sleeper/syndie/Initialize(mapload)
. = ..()
component_parts = list()
component_parts += new /obj/item/circuitboard/machine/sleeper/syndie(null)
@@ -289,7 +289,7 @@
component_parts += new /obj/item/stack/cable_coil(null)
RefreshParts()
-/obj/machinery/sleeper/syndie/fullupgrade/Initialize()
+/obj/machinery/sleeper/syndie/fullupgrade/Initialize(mapload)
. = ..()
component_parts = list()
component_parts += new /obj/item/circuitboard/machine/sleeper/syndie(null)
diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm
index f40adcd00b..e9a1fb61e0 100644
--- a/code/game/machinery/_machinery.dm
+++ b/code/game/machinery/_machinery.dm
@@ -90,6 +90,7 @@ Class Procs:
verb_say = "beeps"
verb_yell = "blares"
pressure_resistance = 15
+ pass_flags_self = PASSMACHINE
max_integrity = 200
layer = BELOW_OBJ_LAYER //keeps shit coming out of the machine from ending up underneath it.
flags_1 = DEFAULT_RICOCHET_1
@@ -134,9 +135,9 @@ Class Procs:
var/market_verb = "Customer"
var/payment_department = ACCOUNT_ENG
-/obj/machinery/Initialize()
+/obj/machinery/Initialize(mapload)
if(!armor)
- armor = list("melee" = 25, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 70)
+ armor = list(MELEE = 25, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 70)
. = ..()
GLOB.machines += src
@@ -370,7 +371,7 @@ Class Procs:
user.DelayNextAction(CLICK_CD_MELEE)
user.do_attack_animation(src, ATTACK_EFFECT_PUNCH)
user.visible_message("[user.name] smashes against \the [src.name] with its paws.", null, null, COMBAT_MESSAGE_RANGE)
- take_damage(4, BRUTE, "melee", 1)
+ take_damage(4, BRUTE, MELEE, 1)
/obj/machinery/attack_robot(mob/user)
if(!(interaction_flags_machine & INTERACT_MACHINE_ALLOW_SILICON) && !IsAdminGhost(user))
@@ -448,6 +449,12 @@ Class Procs:
update_icon()
updateUsrDialog()
+/obj/machinery/CanAllowThrough(atom/movable/mover, turf/target)
+ . = ..()
+
+ if(mover.pass_flags & PASSMACHINE)
+ return TRUE
+
/obj/machinery/proc/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/I)
if(!(flags_1 & NODECONSTRUCT_1) && I.tool_behaviour == TOOL_SCREWDRIVER)
I.play_tool_sound(src, 50)
@@ -590,7 +597,7 @@ Class Procs:
if(prob(85) && (zap_flags & ZAP_MACHINE_EXPLOSIVE))
explosion(src, 1, 2, 4, flame_range = 2, adminlog = FALSE, smoke = FALSE)
else if(zap_flags & ZAP_OBJ_DAMAGE)
- take_damage(power/2000, BURN, "energy")
+ take_damage(power/2000, BURN, ENERGY)
if(prob(40))
emp_act(50)
@@ -614,7 +621,7 @@ Class Procs:
AM.pixel_y = -8 + (round( . / 3)*8)
/obj/machinery/rust_heretic_act()
- take_damage(500, BRUTE, "melee", 1)
+ take_damage(500, BRUTE, MELEE, 1)
/**
* Alerts the AI that a hack is in progress.
diff --git a/code/game/machinery/ai_slipper.dm b/code/game/machinery/ai_slipper.dm
index 4935c9d4d3..80621e2bcd 100644
--- a/code/game/machinery/ai_slipper.dm
+++ b/code/game/machinery/ai_slipper.dm
@@ -6,7 +6,7 @@
layer = PROJECTILE_HIT_THRESHHOLD_LAYER
plane = FLOOR_PLANE
max_integrity = 200
- armor = list("melee" = 50, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 30)
+ armor = list(MELEE = 50, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 30)
var/uses = 20
var/cooldown = 0
diff --git a/code/game/machinery/airlock_control.dm b/code/game/machinery/airlock_control.dm
index 4b5e4088d7..0841dc6939 100644
--- a/code/game/machinery/airlock_control.dm
+++ b/code/game/machinery/airlock_control.dm
@@ -152,7 +152,7 @@
frequency = new_frequency
radio_connection = SSradio.add_object(src, frequency, RADIO_AIRLOCK)
-/obj/machinery/airlock_sensor/Initialize()
+/obj/machinery/airlock_sensor/Initialize(mapload)
. = ..()
set_frequency(frequency)
diff --git a/code/game/machinery/announcement_system.dm b/code/game/machinery/announcement_system.dm
index f46169f72e..a565f679bb 100644
--- a/code/game/machinery/announcement_system.dm
+++ b/code/game/machinery/announcement_system.dm
@@ -27,7 +27,7 @@ GLOBAL_LIST_EMPTY(announcement_systems)
var/pinklight = "Light_Pink"
var/errorlight = "Error_Red"
-/obj/machinery/announcement_system/Initialize()
+/obj/machinery/announcement_system/Initialize(mapload)
. = ..()
GLOB.announcement_systems += src
radio = new /obj/item/radio/headset/silicon/ai(src)
diff --git a/code/game/machinery/aug_manipulator.dm b/code/game/machinery/aug_manipulator.dm
index 19bac616e9..c34e0a2d4f 100644
--- a/code/game/machinery/aug_manipulator.dm
+++ b/code/game/machinery/aug_manipulator.dm
@@ -8,14 +8,14 @@
max_integrity = 200
var/obj/item/bodypart/storedpart
var/initial_icon_state
- var/static/list/style_list_icons = list("standard" = 'icons/mob/augmentation/augments.dmi',
- "engineer" = 'icons/mob/augmentation/augments_engineer.dmi',
- "security" = 'icons/mob/augmentation/augments_security.dmi',
- "mining" = 'icons/mob/augmentation/augments_mining.dmi',
- "Talon" = 'icons/mob/augmentation/cosmetic_prosthetic/talon.dmi',
- "Nanotrasen" = 'icons/mob/augmentation/cosmetic_prosthetic/nanotrasen.dmi',
- "Hephaesthus" = 'icons/mob/augmentation/cosmetic_prosthetic/hephaestus.dmi',
- "Bishop" = 'icons/mob/augmentation/cosmetic_prosthetic/bishop.dmi',
+ var/static/list/style_list_icons = list("standard" = 'icons/mob/augmentation/augments.dmi',
+ "engineer" = 'icons/mob/augmentation/augments_engineer.dmi',
+ "security" = 'icons/mob/augmentation/augments_security.dmi',
+ "mining" = 'icons/mob/augmentation/augments_mining.dmi',
+ "Talon" = 'icons/mob/augmentation/cosmetic_prosthetic/talon.dmi',
+ "Nanotrasen" = 'icons/mob/augmentation/cosmetic_prosthetic/nanotrasen.dmi',
+ "Hephaesthus" = 'icons/mob/augmentation/cosmetic_prosthetic/hephaestus.dmi',
+ "Bishop" = 'icons/mob/augmentation/cosmetic_prosthetic/bishop.dmi',
"Xion" = 'icons/mob/augmentation/cosmetic_prosthetic/xion.dmi',
"Grayson" = 'icons/mob/augmentation/cosmetic_prosthetic/grayson.dmi',
"Cybersolutions" = 'icons/mob/augmentation/cosmetic_prosthetic/cybersolutions.dmi',
@@ -27,7 +27,7 @@
if(storedpart)
. += "Alt-click to eject the limb."
-/obj/machinery/aug_manipulator/Initialize()
+/obj/machinery/aug_manipulator/Initialize(mapload)
initial_icon_state = initial(icon_state)
return ..()
diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm
index 4db565aec1..35f45818b6 100644
--- a/code/game/machinery/autolathe.dm
+++ b/code/game/machinery/autolathe.dm
@@ -44,7 +44,7 @@
"Imported"
)
-/obj/machinery/autolathe/Initialize()
+/obj/machinery/autolathe/Initialize(mapload)
. = ..()
wires = new /datum/wires/autolathe(src)
stored_research = new /datum/techweb/specialized/autounlocking/autolathe
@@ -429,7 +429,7 @@
desc = "It produces items using metal and glass. This model was reprogrammed without some of the more hazardous designs."
circuit = /obj/item/circuitboard/machine/autolathe/secure
-/obj/machinery/autolathe/secure/Initialize()
+/obj/machinery/autolathe/secure/Initialize(mapload)
. = ..()
// let's not leave the parent datum floating, right?
if(stored_research)
@@ -452,14 +452,14 @@
"Misc",
"Imported"
)
-/obj/machinery/autolathe/toy/Initialize()
+/obj/machinery/autolathe/toy/Initialize(mapload)
. = ..()
// let's not leave the parent datum floating, right?
if(stored_research)
QDEL_NULL(stored_research)
stored_research = new /datum/techweb/specialized/autounlocking/autolathe/toy
-/obj/machinery/autolathe/toy/hacked/Initialize()
+/obj/machinery/autolathe/toy/hacked/Initialize(mapload)
. = ..()
adjust_hacked(TRUE)
diff --git a/code/game/machinery/bank_machine.dm b/code/game/machinery/bank_machine.dm
index 79fff2a76a..54d302910d 100644
--- a/code/game/machinery/bank_machine.dm
+++ b/code/game/machinery/bank_machine.dm
@@ -14,7 +14,7 @@
var/minimum_time_between_warnings = 400
var/syphoning_credits = 0
-/obj/machinery/computer/bank_machine/Initialize()
+/obj/machinery/computer/bank_machine/Initialize(mapload)
. = ..()
radio = new(src)
radio.subspace_transmission = TRUE
diff --git a/code/game/machinery/bloodbankgen.dm b/code/game/machinery/bloodbankgen.dm
index 31fac02d83..9dc5539959 100644
--- a/code/game/machinery/bloodbankgen.dm
+++ b/code/game/machinery/bloodbankgen.dm
@@ -17,7 +17,7 @@
var/efficiency = 0
var/productivity = 0
-/obj/machinery/bloodbankgen/Initialize()
+/obj/machinery/bloodbankgen/Initialize(mapload)
. = ..()
create_reagents(maxbloodstored, AMOUNT_VISIBLE)
update_icon()
diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm
index 0de76694c0..d3e79d38c5 100644
--- a/code/game/machinery/buttons.dm
+++ b/code/game/machinery/buttons.dm
@@ -10,7 +10,7 @@
var/device_type = null
var/id = null
var/initialized_button = 0
- armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 70)
+ armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 10, BIO = 100, RAD = 100, FIRE = 90, ACID = 70)
use_power = IDLE_POWER_USE
idle_power_usage = 2
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm
index b680377d0a..9a23cc86fb 100644
--- a/code/game/machinery/camera/camera.dm
+++ b/code/game/machinery/camera/camera.dm
@@ -15,7 +15,7 @@
resistance_flags = FIRE_PROOF
- armor = list("melee" = 50, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 50)
+ armor = list(MELEE = 50, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 0, BIO = 0, RAD = 0, FIRE = 90, ACID = 50)
max_integrity = 100
integrity_failure = 0.5
var/list/network = list("ss13")
@@ -273,7 +273,7 @@
return ..()
/obj/machinery/camera/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir)
- if(damage_flag == "melee" && damage_amount < 12 && !(stat & BROKEN))
+ if(damage_flag == MELEE && damage_amount < 12 && !(stat & BROKEN))
return 0
. = ..()
diff --git a/code/game/machinery/camera/motion.dm b/code/game/machinery/camera/motion.dm
index af5093d6ca..df0c7412bb 100644
--- a/code/game/machinery/camera/motion.dm
+++ b/code/game/machinery/camera/motion.dm
@@ -82,7 +82,7 @@
c_tag = "Arena"
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF | FREEZE_PROOF
-/obj/machinery/camera/motion/thunderdome/Initialize()
+/obj/machinery/camera/motion/thunderdome/Initialize(mapload)
. = ..()
proximity_monitor.SetRange(7)
diff --git a/code/game/machinery/camera/presets.dm b/code/game/machinery/camera/presets.dm
index 33e250fa59..880536245a 100644
--- a/code/game/machinery/camera/presets.dm
+++ b/code/game/machinery/camera/presets.dm
@@ -4,7 +4,7 @@
/obj/machinery/camera/emp_proof
start_active = TRUE
-/obj/machinery/camera/emp_proof/Initialize()
+/obj/machinery/camera/emp_proof/Initialize(mapload)
. = ..()
upgradeEmpProof()
@@ -14,7 +14,7 @@
start_active = TRUE
icon_state = "xraycam" // Thanks to Krutchen for the icons.
-/obj/machinery/camera/xray/Initialize()
+/obj/machinery/camera/xray/Initialize(mapload)
. = ..()
upgradeXRay()
@@ -23,7 +23,7 @@
start_active = TRUE
name = "motion-sensitive security camera"
-/obj/machinery/camera/motion/Initialize()
+/obj/machinery/camera/motion/Initialize(mapload)
. = ..()
upgradeMotion()
@@ -31,7 +31,7 @@
/obj/machinery/camera/all
start_active = TRUE
-/obj/machinery/camera/all/Initialize()
+/obj/machinery/camera/all/Initialize(mapload)
. = ..()
upgradeEmpProof()
upgradeXRay()
@@ -43,7 +43,7 @@
var/number = 0 //camera number in area
//This camera type automatically sets it's name to whatever the area that it's in is called.
-/obj/machinery/camera/autoname/Initialize()
+/obj/machinery/camera/autoname/Initialize(mapload)
..()
return INITIALIZE_HINT_LATELOAD
diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index b59bf98190..06a399a2eb 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -42,7 +42,7 @@
fair_market_price = 5 // He nodded, because he knew I was right. Then he swiped his credit card to pay me for arresting him.
payment_department = ACCOUNT_MED
-/obj/machinery/clonepod/Initialize()
+/obj/machinery/clonepod/Initialize(mapload)
. = ..()
countdown = new(src)
diff --git a/code/game/machinery/computer/Operating.dm b/code/game/machinery/computer/Operating.dm
index b837553b38..2830031781 100644
--- a/code/game/machinery/computer/Operating.dm
+++ b/code/game/machinery/computer/Operating.dm
@@ -13,7 +13,7 @@
var/datum/techweb/linked_techweb
light_color = LIGHT_COLOR_BLUE
-/obj/machinery/computer/operating/Initialize()
+/obj/machinery/computer/operating/Initialize(mapload)
. = ..()
linked_techweb = SSresearch.science_tech
find_table()
diff --git a/code/game/machinery/computer/_computer.dm b/code/game/machinery/computer/_computer.dm
index abca9db109..6b1d28fcba 100644
--- a/code/game/machinery/computer/_computer.dm
+++ b/code/game/machinery/computer/_computer.dm
@@ -8,7 +8,7 @@
active_power_usage = 300
max_integrity = 200
integrity_failure = 0.5
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 40, "acid" = 20)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 40, ACID = 20)
var/brightness_on = 1
var/icon_keyboard = "generic_key"
var/icon_screen = "generic"
@@ -101,10 +101,10 @@
switch(severity)
if(1)
if(prob(50))
- obj_break("energy")
+ obj_break(ENERGY)
if(2)
if(prob(10))
- obj_break("energy")
+ obj_break(ENERGY)
/obj/machinery/computer/deconstruct(disassembled = TRUE, mob/user)
on_deconstruction()
diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm
index e430ac469f..276c1796b3 100644
--- a/code/game/machinery/computer/arcade.dm
+++ b/code/game/machinery/computer/arcade.dm
@@ -77,7 +77,7 @@ GLOBAL_LIST_INIT(arcade_prize_pool, list(
/obj/machinery/computer/arcade/proc/Reset()
return
-/obj/machinery/computer/arcade/Initialize()
+/obj/machinery/computer/arcade/Initialize(mapload)
. = ..()
// If it's a generic arcade machine, pick a random arcade
// circuit board for it and make the new machine
diff --git a/code/game/machinery/computer/arcade/orion_trail.dm b/code/game/machinery/computer/arcade/orion_trail.dm
index 58617a0cf3..21b0ac1cc0 100644
--- a/code/game/machinery/computer/arcade/orion_trail.dm
+++ b/code/game/machinery/computer/arcade/orion_trail.dm
@@ -61,7 +61,7 @@
var/killed_crew = 0
-/obj/machinery/computer/arcade/orion_trail/Initialize()
+/obj/machinery/computer/arcade/orion_trail/Initialize(mapload)
. = ..()
Radio = new /obj/item/radio(src)
Radio.listening = 0
diff --git a/code/game/machinery/computer/atmos_alert.dm b/code/game/machinery/computer/atmos_alert.dm
index 50a6d10302..f4851fc33c 100644
--- a/code/game/machinery/computer/atmos_alert.dm
+++ b/code/game/machinery/computer/atmos_alert.dm
@@ -11,7 +11,7 @@
light_color = LIGHT_COLOR_CYAN
-/obj/machinery/computer/atmos_alert/Initialize()
+/obj/machinery/computer/atmos_alert/Initialize(mapload)
. = ..()
set_frequency(receive_frequency)
diff --git a/code/game/machinery/computer/atmos_control.dm b/code/game/machinery/computer/atmos_control.dm
index fa552a4e66..5200ab839e 100644
--- a/code/game/machinery/computer/atmos_control.dm
+++ b/code/game/machinery/computer/atmos_control.dm
@@ -6,7 +6,7 @@
name = "gas sensor"
icon = 'icons/obj/stationobjs.dmi'
icon_state = "gsensor1"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 0)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 0)
var/on = TRUE
@@ -71,7 +71,7 @@
frequency = new_frequency
radio_connection = SSradio.add_object(src, frequency, RADIO_ATMOSIA)
-/obj/machinery/air_sensor/Initialize()
+/obj/machinery/air_sensor/Initialize(mapload)
. = ..()
SSair.atmos_air_machinery += src
set_frequency(frequency)
@@ -126,7 +126,7 @@ GLOBAL_LIST_EMPTY(atmos_air_controllers)
var/datum/radio_frequency/radio_connection
-/obj/machinery/computer/atmos_control/Initialize()
+/obj/machinery/computer/atmos_control/Initialize(mapload)
. = ..()
GLOB.atmos_air_controllers += src
set_frequency(frequency)
diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm
index a6b774523c..ec897f97e2 100644
--- a/code/game/machinery/computer/camera.dm
+++ b/code/game/machinery/computer/camera.dm
@@ -23,7 +23,7 @@
interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_SET_MACHINE //| INTERACT_MACHINE_REQUIRES_SIGHT
-/obj/machinery/computer/security/Initialize()
+/obj/machinery/computer/security/Initialize(mapload)
. = ..()
// Map name has to start and end with an A-Z character,
// and definitely NOT with a square bracket or even a number.
@@ -275,7 +275,7 @@
var/icon_state_off = "entertainment_blank"
var/icon_state_on = "entertainment"
-/obj/machinery/computer/security/telescreen/entertainment/Initialize()
+/obj/machinery/computer/security/telescreen/entertainment/Initialize(mapload)
. = ..()
RegisterSignal(src, COMSIG_CLICK, .proc/BigClick)
diff --git a/code/game/machinery/computer/camera_advanced.dm b/code/game/machinery/computer/camera_advanced.dm
index 992807bed7..30463f4f01 100644
--- a/code/game/machinery/computer/camera_advanced.dm
+++ b/code/game/machinery/computer/camera_advanced.dm
@@ -16,7 +16,7 @@
light_color = LIGHT_COLOR_RED
-/obj/machinery/computer/camera_advanced/Initialize()
+/obj/machinery/computer/camera_advanced/Initialize(mapload)
. = ..()
for(var/i in networks)
networks -= i
diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm
index 46d419a8fe..a16e70155f 100644
--- a/code/game/machinery/computer/card.dm
+++ b/code/game/machinery/computer/card.dm
@@ -56,7 +56,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
/obj/machinery/computer/card/centcom/get_jobs()
return get_all_centcom_jobs()
-/obj/machinery/computer/card/Initialize()
+/obj/machinery/computer/card/Initialize(mapload)
. = ..()
change_position_cooldown = CONFIG_GET(number/id_console_jobslot_delay)
@@ -586,7 +586,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
icon_screen = "idminor"
circuit = /obj/item/circuitboard/computer/card/minor
-/obj/machinery/computer/card/minor/Initialize()
+/obj/machinery/computer/card/minor/Initialize(mapload)
. = ..()
var/obj/item/circuitboard/computer/card/minor/typed_circuit = circuit
if(target_dept)
diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm
index d034ba382e..91211d3d40 100644
--- a/code/game/machinery/computer/cloning.dm
+++ b/code/game/machinery/computer/cloning.dm
@@ -24,7 +24,7 @@
light_color = LIGHT_COLOR_BLUE
-/obj/machinery/computer/cloning/Initialize()
+/obj/machinery/computer/cloning/Initialize(mapload)
. = ..()
updatemodules(TRUE)
var/obj/item/circuitboard/computer/cloning/board = circuit
diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm
index b81507024c..7c22846ece 100755
--- a/code/game/machinery/computer/communications.dm
+++ b/code/game/machinery/computer/communications.dm
@@ -41,7 +41,7 @@
/// The last lines used for changing the status display
var/static/last_status_display
-/obj/machinery/computer/communications/Initialize()
+/obj/machinery/computer/communications/Initialize(mapload)
. = ..()
GLOB.shuttle_caller_list += src
AddComponent(/datum/component/gps, "Secured Communications Signal")
@@ -89,6 +89,7 @@
/obj/machinery/computer/communications/ui_act(action, list/params)
var/static/list/approved_states = list(STATE_BUYING_SHUTTLE, STATE_CHANGING_STATUS, STATE_MAIN, STATE_MESSAGES)
var/static/list/approved_status_pictures = list("biohazard", "blank", "default", "lockdown", "redalert", "shuttle")
+ var/static/list/state_status_pictures = list("blank", "shuttle")
. = ..()
if (.)
@@ -307,7 +308,10 @@
var/picture = params["picture"]
if (!(picture in approved_status_pictures))
return
- post_status("alert", picture)
+ if(picture in state_status_pictures)
+ post_status(picture)
+ else
+ post_status("alert", picture)
playsound(src, "terminal_type", 50, FALSE)
if ("toggleAuthentication")
// Log out if we're logged in
diff --git a/code/game/machinery/computer/dna_console.dm b/code/game/machinery/computer/dna_console.dm
index 3d212ec0cb..b6b01ff03b 100644
--- a/code/game/machinery/computer/dna_console.dm
+++ b/code/game/machinery/computer/dna_console.dm
@@ -199,7 +199,7 @@
eject_disk(user)
-/obj/machinery/computer/scan_consolenew/Initialize()
+/obj/machinery/computer/scan_consolenew/Initialize(mapload)
. = ..()
// Connect with a nearby DNA Scanner on init
@@ -263,7 +263,7 @@
if(!ui)
ui = new(user, src, "DnaConsole")
ui.open()
-
+
/obj/machinery/computer/scan_consolenew/ui_assets()
. = ..() || list()
. += get_asset_datum(/datum/asset/simple/genetics)
diff --git a/code/game/machinery/computer/launchpad_control.dm b/code/game/machinery/computer/launchpad_control.dm
index 18a0aeb221..65c91fad76 100644
--- a/code/game/machinery/computer/launchpad_control.dm
+++ b/code/game/machinery/computer/launchpad_control.dm
@@ -11,7 +11,7 @@
var/list/obj/machinery/launchpad/launchpads
var/maximum_pads = 4
-/obj/machinery/computer/launchpad/Initialize()
+/obj/machinery/computer/launchpad/Initialize(mapload)
launchpads = list()
. = ..()
diff --git a/code/game/machinery/computer/pod.dm b/code/game/machinery/computer/pod.dm
index f1cf187ff9..a7071ac72e 100644
--- a/code/game/machinery/computer/pod.dm
+++ b/code/game/machinery/computer/pod.dm
@@ -15,7 +15,7 @@
/// Countdown timer for the mass driver's delayed launch functionality.
COOLDOWN_DECLARE(massdriver_countdown)
-/obj/machinery/computer/pod/Initialize()
+/obj/machinery/computer/pod/Initialize(mapload)
. = ..()
for(var/obj/machinery/mass_driver/M in range(range, src))
if(M.id == id)
diff --git a/code/game/machinery/computer/prisoner/gulag_teleporter.dm b/code/game/machinery/computer/prisoner/gulag_teleporter.dm
index 13727b585b..70b66c1b87 100644
--- a/code/game/machinery/computer/prisoner/gulag_teleporter.dm
+++ b/code/game/machinery/computer/prisoner/gulag_teleporter.dm
@@ -15,7 +15,7 @@
light_color = LIGHT_COLOR_RED
-/obj/machinery/computer/prisoner/gulag_teleporter_computer/Initialize()
+/obj/machinery/computer/prisoner/gulag_teleporter_computer/Initialize(mapload)
. = ..()
scan_machinery()
diff --git a/code/game/machinery/computer/station_alert.dm b/code/game/machinery/computer/station_alert.dm
index 7b2e6ab455..0671100623 100644
--- a/code/game/machinery/computer/station_alert.dm
+++ b/code/game/machinery/computer/station_alert.dm
@@ -8,7 +8,7 @@
light_color = LIGHT_COLOR_CYAN
-/obj/machinery/computer/station_alert/Initialize()
+/obj/machinery/computer/station_alert/Initialize(mapload)
. = ..()
GLOB.alert_consoles += src
diff --git a/code/game/machinery/computer/telecrystalconsoles.dm b/code/game/machinery/computer/telecrystalconsoles.dm
index 87b7159125..34495478d7 100644
--- a/code/game/machinery/computer/telecrystalconsoles.dm
+++ b/code/game/machinery/computer/telecrystalconsoles.dm
@@ -21,7 +21,7 @@ GLOBAL_LIST_INIT(possible_uplinker_IDs, list("Alfa","Bravo","Charlie","Delta","E
var/obj/item/uplinkholder = null
var/obj/machinery/computer/telecrystals/boss/linkedboss = null
-/obj/machinery/computer/telecrystals/uplinker/Initialize()
+/obj/machinery/computer/telecrystals/uplinker/Initialize(mapload)
. = ..()
var/ID = pick_n_take(GLOB.possible_uplinker_IDs)
diff --git a/code/game/machinery/computer/teleporter.dm b/code/game/machinery/computer/teleporter.dm
index 3e9531097e..eb1c4903fc 100644
--- a/code/game/machinery/computer/teleporter.dm
+++ b/code/game/machinery/computer/teleporter.dm
@@ -14,7 +14,7 @@
var/turf/target
var/obj/item/implant/imp_t
-/obj/machinery/computer/teleporter/Initialize()
+/obj/machinery/computer/teleporter/Initialize(mapload)
. = ..()
id = "[rand(1000, 9999)]"
link_power_station()
diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm
index ce29d10004..e3778811ea 100644
--- a/code/game/machinery/cryopod.dm
+++ b/code/game/machinery/cryopod.dm
@@ -38,7 +38,7 @@ GLOBAL_LIST_EMPTY(cryopod_computers)
var/obj/O = i
O.forceMove(drop_location())
-/obj/machinery/computer/cryopod/Initialize()
+/obj/machinery/computer/cryopod/Initialize(mapload)
. = ..()
GLOB.cryopod_computers += src
@@ -144,7 +144,7 @@ GLOBAL_LIST_EMPTY(cryopod_computers)
var/datum/weakref/control_computer_weakref
COOLDOWN_DECLARE(last_no_computer_message)
-/obj/machinery/cryopod/Initialize()
+/obj/machinery/cryopod/Initialize(mapload)
..()
return INITIALIZE_HINT_LATELOAD //Gotta populate the cryopod computer GLOB first
diff --git a/code/game/machinery/defibrillator_mount.dm b/code/game/machinery/defibrillator_mount.dm
index bc6cc4b60e..9d7a6a8635 100644
--- a/code/game/machinery/defibrillator_mount.dm
+++ b/code/game/machinery/defibrillator_mount.dm
@@ -14,7 +14,7 @@
var/obj/item/defibrillator/defib //this mount's defibrillator
var/clamps_locked = FALSE //if true, and a defib is loaded, it can't be removed without unlocking the clamps
-/obj/machinery/defibrillator_mount/loaded/Initialize() //loaded subtype for mapping use
+/obj/machinery/defibrillator_mount/loaded/Initialize(mapload) //loaded subtype for mapping use
. = ..()
defib = new/obj/item/defibrillator/loaded(src)
diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm
index ca4b392efa..86c561bb15 100644
--- a/code/game/machinery/deployable.dm
+++ b/code/game/machinery/deployable.dm
@@ -37,22 +37,19 @@
else
return ..()
-/obj/structure/barricade/CanPass(atom/movable/mover, turf/target)//So bullets will fly over and stuff.
+/obj/structure/barricade/CanAllowThrough(atom/movable/mover, turf/target)//So bullets will fly over and stuff.
+ . = ..()
if(locate(/obj/structure/barricade) in get_turf(mover))
- return 1
+ return TRUE
else if(istype(mover, /obj/item/projectile))
if(!anchored)
- return 1
+ return TRUE
var/obj/item/projectile/proj = mover
if(proj.firer && Adjacent(proj.firer))
- return 1
+ return TRUE
if(prob(proj_pass_rate))
- return 1
- return 0
- else
- return !density
-
-
+ return TRUE
+ return FALSE
/////BARRICADE TYPES///////
@@ -79,7 +76,6 @@
return
return ..()
-
/obj/structure/barricade/wooden/crude
name = "crude plank barricade"
desc = "This space is blocked off by a crude assortment of planks."
@@ -96,7 +92,6 @@
/obj/structure/barricade/wooden/make_debris()
new /obj/item/stack/sheet/mineral/wood(get_turf(src), drop_amount)
-
/obj/structure/barricade/sandbags
name = "sandbags"
desc = "Bags of sand. Self explanatory."
@@ -104,13 +99,12 @@
icon_state = "sandbags"
max_integrity = 280
proj_pass_rate = 20
- pass_flags = LETPASSTHROW
+ pass_flags_self = LETPASSTHROW
bar_material = SAND
climbable = TRUE
smooth = SMOOTH_TRUE
canSmoothWith = list(/obj/structure/barricade/sandbags, /turf/closed/wall, /turf/closed/wall/r_wall, /obj/structure/falsewall, /obj/structure/falsewall/reinforced, /turf/closed/wall/rust, /turf/closed/wall/r_wall/rust, /obj/structure/barricade/security)
-
/obj/structure/barricade/security
name = "security barrier"
desc = "A deployable barrier. Provides good cover in fire fights."
@@ -120,13 +114,12 @@
anchored = FALSE
max_integrity = 180
proj_pass_rate = 20
- armor = list("melee" = 10, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 10, "acid" = 0)
+ armor = list(MELEE = 10, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 10, BIO = 100, RAD = 100, FIRE = 10, ACID = 0)
var/deploy_time = 40
var/deploy_message = TRUE
-
-/obj/structure/barricade/security/Initialize()
+/obj/structure/barricade/security/Initialize(mapload)
. = ..()
addtimer(CALLBACK(src, .proc/deploy), deploy_time)
@@ -137,7 +130,6 @@
if(deploy_message)
visible_message("[src] deploys!")
-
/obj/item/grenade/barrier
name = "barrier grenade"
desc = "Instant cover."
@@ -194,7 +186,6 @@
/obj/item/grenade/barrier/ui_action_click(mob/user)
toggle_mode(user)
-
#undef SINGLE
#undef VERTICAL
#undef HORIZONTAL
diff --git a/code/game/machinery/dish_drive.dm b/code/game/machinery/dish_drive.dm
index 869d583037..148069b103 100644
--- a/code/game/machinery/dish_drive.dm
+++ b/code/game/machinery/dish_drive.dm
@@ -22,7 +22,7 @@
var/suction_enabled = TRUE
var/transmit_enabled = TRUE
-/obj/machinery/dish_drive/Initialize()
+/obj/machinery/dish_drive/Initialize(mapload)
. = ..()
RefreshParts()
diff --git a/code/game/machinery/dna_scanner.dm b/code/game/machinery/dna_scanner.dm
index 0dcb0e7235..c032e57ef3 100644
--- a/code/game/machinery/dna_scanner.dm
+++ b/code/game/machinery/dna_scanner.dm
@@ -163,7 +163,7 @@
var/max_mutations = 6
var/read_only = FALSE //Well,it's still a floppy disk
-/obj/item/disk/data/Initialize()
+/obj/item/disk/data/Initialize(mapload)
. = ..()
icon_state = "datadisk[rand(0,6)]"
add_overlay("datadisk_gene")
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index ce29d1947d..ed62019824 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -106,7 +106,7 @@
/// sigh
var/unelectrify_timerid
-/obj/machinery/door/airlock/Initialize()
+/obj/machinery/door/airlock/Initialize(mapload)
. = ..()
wires = new wiretypepath(src) //CIT CHANGE - makes it possible for airlocks to have different wire datums
if(frequency)
diff --git a/code/game/machinery/doors/airlock_types.dm b/code/game/machinery/doors/airlock_types.dm
index 5215baf87f..9575c45c57 100644
--- a/code/game/machinery/doors/airlock_types.dm
+++ b/code/game/machinery/doors/airlock_types.dm
@@ -485,7 +485,7 @@
var/friendly = FALSE
var/stealthy = FALSE
-/obj/machinery/door/airlock/cult/Initialize()
+/obj/machinery/door/airlock/cult/Initialize(mapload)
. = ..()
new openingoverlaytype(loc)
@@ -576,7 +576,7 @@
desc = "An airlock hastily corrupted by blood magic, it is unusually brittle in this state."
normal_integrity = 150
damage_deflection = 5
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0)
//Pinion airlocks: Clockwork doors that only let servants of Ratvar through.
/obj/machinery/door/airlock/clockwork
@@ -593,7 +593,7 @@
normal_integrity = 240
var/construction_state = GEAR_SECURE //Pinion airlocks have custom deconstruction
-/obj/machinery/door/airlock/clockwork/Initialize()
+/obj/machinery/door/airlock/clockwork/Initialize(mapload)
. = ..()
new /obj/effect/temp_visual/ratvar/door(loc)
new /obj/effect/temp_visual/ratvar/beam/door(loc)
diff --git a/code/game/machinery/doors/alarmlock.dm b/code/game/machinery/doors/alarmlock.dm
index fa516f4b6b..f0b0d9eeb0 100644
--- a/code/game/machinery/doors/alarmlock.dm
+++ b/code/game/machinery/doors/alarmlock.dm
@@ -10,7 +10,7 @@
var/air_frequency = FREQ_ATMOS_ALARMS
autoclose = FALSE
-/obj/machinery/door/airlock/alarmlock/Initialize()
+/obj/machinery/door/airlock/alarmlock/Initialize(mapload)
. = ..()
air_connection = new
@@ -19,7 +19,7 @@
air_connection = null
return ..()
-/obj/machinery/door/airlock/alarmlock/Initialize()
+/obj/machinery/door/airlock/alarmlock/Initialize(mapload)
. = ..()
SSradio.remove_object(src, air_frequency)
air_connection = SSradio.add_object(src, air_frequency, RADIO_TO_AIRALARM)
diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm
index b2e0050819..c209118537 100644
--- a/code/game/machinery/doors/brigdoors.dm
+++ b/code/game/machinery/doors/brigdoors.dm
@@ -36,7 +36,7 @@
maptext_height = 26
maptext_width = 32
-/obj/machinery/door_timer/Initialize()
+/obj/machinery/door_timer/Initialize(mapload)
. = ..()
Radio = new/obj/item/radio(src)
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index d1781d9477..ef47a0e7f6 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -10,7 +10,7 @@
power_channel = ENVIRON
max_integrity = 350
damage_deflection = 10
- armor = list("melee" = 30, "bullet" = 30, "laser" = 20, "energy" = 20, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 70)
+ armor = list(MELEE = 30, BULLET = 30, LASER = 20, ENERGY = 20, BOMB = 10, BIO = 100, RAD = 100, FIRE = 80, ACID = 70)
CanAtmosPass = ATMOS_PASS_DENSITY
flags_1 = PREVENT_CLICK_UNDER_1|DEFAULT_RICOCHET_1
ricochet_chance_mod = 0.8
@@ -60,7 +60,7 @@
return TRUE
return ..()
-/obj/machinery/door/Initialize()
+/obj/machinery/door/Initialize(mapload)
. = ..()
set_init_door_layer()
update_freelook_sight()
@@ -107,19 +107,6 @@
return
bumpopen(M)
return
-
- if(ismecha(AM))
- var/obj/mecha/mecha = AM
- if(density)
- if(mecha.occupant)
- if(world.time - mecha.occupant.last_bumped <= 10)
- return
- mecha.occupant.last_bumped = world.time
- if(mecha.occupant && (src.allowed(mecha.occupant) || src.check_access_list(mecha.operation_req_access)))
- open()
- else
- do_animate("deny")
- return
return
/obj/machinery/door/Move()
@@ -127,10 +114,14 @@
. = ..()
move_update_air(T)
-/obj/machinery/door/CanPass(atom/movable/mover, turf/target)
+/obj/machinery/door/CanAllowThrough(atom/movable/mover, turf/target)
+ . = ..()
+ if(.)
+ return
+
+ // Snowflake handling for PASSGLASS.
if(istype(mover) && (mover.pass_flags & PASSGLASS))
return !opacity
- return !density
/obj/machinery/door/proc/bumpopen(mob/user)
if(operating)
@@ -362,7 +353,7 @@
C.bleed(DOOR_CRUSH_DAMAGE)
else
L.add_splatter_floor(location)
- for(var/obj/mecha/M in get_turf(src))
+ for(var/obj/vehicle/sealed/mecha/M in get_turf(src))
M.take_damage(DOOR_CRUSH_DAMAGE)
/obj/machinery/door/proc/autoclose()
diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm
index d84b994b92..c0866ce165 100644
--- a/code/game/machinery/doors/firedoor.dm
+++ b/code/game/machinery/doors/firedoor.dm
@@ -21,7 +21,7 @@
layer = BELOW_OPEN_DOOR_LAYER
closingLayer = CLOSED_FIREDOOR_LAYER
assemblytype = /obj/structure/firelock_frame
- armor = list("melee" = 30, "bullet" = 30, "laser" = 20, "energy" = 20, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 95, "acid" = 70)
+ armor = list(MELEE = 30, BULLET = 30, LASER = 20, ENERGY = 20, BOMB = 10, BIO = 100, RAD = 100, FIRE = 95, ACID = 70)
interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON | INTERACT_MACHINE_REQUIRES_SILICON | INTERACT_MACHINE_OPEN
air_tight = TRUE
attack_hand_is_action = TRUE
@@ -31,7 +31,7 @@
var/boltslocked = TRUE
var/list/affecting_areas
-/obj/machinery/door/firedoor/Initialize()
+/obj/machinery/door/firedoor/Initialize(mapload)
. = ..()
CalculateAffectingAreas()
@@ -347,21 +347,18 @@
return 0 // not big enough to matter
return start_point.air.return_pressure() < 20 ? -1 : 1
-/obj/machinery/door/firedoor/border_only/CanPass(atom/movable/mover, turf/target)
- if(istype(mover) && (mover.pass_flags & PASSGLASS))
- return TRUE
- if(get_dir(loc, target) == dir) //Make sure looking at appropriate border
- return !density
- else
+/obj/machinery/door/firedoor/border_only/CanAllowThrough(atom/movable/mover, turf/target)
+ . = ..()
+ if(!(get_dir(loc, target) == dir)) //Make sure looking at appropriate border
return TRUE
+/obj/machinery/door/firedoor/border_only/CanAStarPass(obj/item/card/id/ID, to_dir)
+ return !density || (dir != to_dir)
+
/obj/machinery/door/firedoor/border_only/CheckExit(atom/movable/mover as mob|obj, turf/target)
- if(istype(mover) && (mover.pass_flags & PASSGLASS))
- return TRUE
if(get_dir(loc, target) == dir)
return !density
- else
- return TRUE
+ return TRUE
/obj/machinery/door/firedoor/border_only/CanAtmosPass(turf/T)
if(get_dir(loc, T) == dir)
diff --git a/code/game/machinery/doors/passworddoor.dm b/code/game/machinery/doors/passworddoor.dm
index c4f01e58b5..64afc07ae3 100644
--- a/code/game/machinery/doors/passworddoor.dm
+++ b/code/game/machinery/doors/passworddoor.dm
@@ -6,7 +6,7 @@
explosion_block = 3
heat_proof = TRUE
max_integrity = 600
- armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100)
+ armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100)
resistance_flags = INDESTRUCTIBLE | FIRE_PROOF | ACID_PROOF | LAVA_PROOF
damage_deflection = 70
var/password = "Swordfish"
diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm
index e1c0843f55..654dc13e1c 100644
--- a/code/game/machinery/doors/poddoor.dm
+++ b/code/game/machinery/doors/poddoor.dm
@@ -13,7 +13,7 @@
heat_proof = TRUE
safe = FALSE
max_integrity = 600
- armor = list("melee" = 50, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 70)
+ armor = list(MELEE = 50, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 50, BIO = 100, RAD = 100, FIRE = 100, ACID = 70)
resistance_flags = FIRE_PROOF
damage_deflection = 70
poddoor = TRUE
diff --git a/code/game/machinery/doors/shutters.dm b/code/game/machinery/doors/shutters.dm
index 362dde1157..323fab4cf2 100644
--- a/code/game/machinery/doors/shutters.dm
+++ b/code/game/machinery/doors/shutters.dm
@@ -5,7 +5,7 @@
icon = 'icons/obj/doors/shutters.dmi'
layer = SHUTTER_LAYER
closingLayer = SHUTTER_LAYER
- armor = list("melee" = 20, "bullet" = 20, "laser" = 20, "energy" = 75, "bomb" = 25, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 70)
+ armor = list(MELEE = 20, BULLET = 20, LASER = 20, ENERGY = 75, BOMB = 25, BIO = 100, RAD = 100, FIRE = 100, ACID = 70)
damage_deflection = 20
max_integrity = 100
@@ -24,7 +24,7 @@
desc = "These shutters have an armoured frame; it looks like plasteel. These shutters look robust enough to survive explosions."
icon = 'icons/obj/doors/shutters_old.dmi'
icon_state = "closed"
- armor = list("melee" = 30, "bullet" = 30, "laser" = 30, "energy" = 75, "bomb" = 30, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 70)
+ armor = list(MELEE = 30, BULLET = 30, LASER = 30, ENERGY = 75, BOMB = 30, BIO = 100, RAD = 100, FIRE = 100, ACID = 70)
max_integrity = 300
/obj/machinery/door/poddoor/shutters/old/preopen
diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm
index af7545d3c9..7d9ec6a9a1 100644
--- a/code/game/machinery/doors/windowdoor.dm
+++ b/code/game/machinery/doors/windowdoor.dm
@@ -9,9 +9,10 @@
var/base_state = "left"
max_integrity = 150 //If you change this, consider changing ../door/window/brigdoor/ max_integrity at the bottom of this .dm file
integrity_failure = 0
- armor = list("melee" = 20, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 70, "acid" = 100)
+ armor = list(MELEE = 20, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 10, BIO = 100, RAD = 100, FIRE = 70, ACID = 100)
visible = FALSE
flags_1 = ON_BORDER_1|DEFAULT_RICOCHET_1
+ pass_flags_self = PASSGLASS
opacity = 0
CanAtmosPass = ATMOS_PASS_PROC
interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON | INTERACT_MACHINE_REQUIRES_SILICON | INTERACT_MACHINE_OPEN
@@ -77,11 +78,13 @@
return
if (!( ismob(AM) ))
if(ismecha(AM))
- var/obj/mecha/mecha = AM
- if(mecha.occupant && src.allowed(mecha.occupant))
- open_and_close()
- else
- do_animate("deny")
+ var/obj/vehicle/sealed/mecha/mecha = AM
+ for(var/O in mecha.occupants)
+ var/mob/living/occupant = O
+ if(allowed(occupant))
+ open_and_close()
+ return
+ do_animate("deny")
return
if (!( SSticker ))
return
@@ -103,11 +106,12 @@
do_animate("deny")
return
-/obj/machinery/door/window/CanPass(atom/movable/mover, turf/target)
- if(istype(mover) && (mover.pass_flags & PASSGLASS))
- return 1
+/obj/machinery/door/window/CanAllowThrough(atom/movable/mover, turf/target)
+ . = ..()
+ if(.)
+ return
if(get_dir(loc, target) == dir) //Make sure looking at appropriate border
- return !density
+ return
if(istype(mover, /obj/structure/window))
var/obj/structure/window/W = mover
if(!valid_window_location(loc, W.ini_dir))
@@ -119,7 +123,7 @@
else if(istype(mover, /obj/machinery/door/window) && !valid_window_location(loc, mover.dir))
return FALSE
else
- return 1
+ return TRUE
/obj/machinery/door/window/CanAtmosPass(turf/T)
if(get_dir(loc, T) == dir)
@@ -131,13 +135,12 @@
/obj/machinery/door/window/CanAStarPass(obj/item/card/id/ID, to_dir)
return !density || (dir != to_dir) || (check_access(ID) && hasPower())
-/obj/machinery/door/window/CheckExit(atom/movable/mover as mob|obj, turf/target)
- if(istype(mover) && (mover.pass_flags & PASSGLASS))
- return 1
+/obj/machinery/door/window/CheckExit(atom/movable/mover, turf/target)
+ if((pass_flags_self & mover.pass_flags) || ((pass_flags_self & LETPASSTHROW) && mover.throwing))
+ return TRUE
if(get_dir(loc, target) == dir)
return !density
- else
- return 1
+ return TRUE
/obj/machinery/door/window/open(forced=0)
if (src.operating == 1) //doors can still open when emag-disabled
diff --git a/code/game/machinery/doppler_array.dm b/code/game/machinery/doppler_array.dm
index 27b591d374..18ed5205be 100644
--- a/code/game/machinery/doppler_array.dm
+++ b/code/game/machinery/doppler_array.dm
@@ -14,7 +14,7 @@ GLOBAL_LIST_EMPTY(doppler_arrays)
verb_say = "states coldly"
var/list/message_log = list()
-/obj/machinery/doppler_array/Initialize()
+/obj/machinery/doppler_array/Initialize(mapload)
. = ..()
GLOB.doppler_arrays += src
@@ -218,6 +218,6 @@ GLOBAL_LIST_EMPTY(doppler_arrays)
return
-/obj/machinery/doppler_array/research/science/Initialize()
+/obj/machinery/doppler_array/research/science/Initialize(mapload)
. = ..()
linked_techweb = SSresearch.science_tech
diff --git a/code/game/machinery/droneDispenser.dm b/code/game/machinery/droneDispenser.dm
index 74df30ebfe..4d2d5d3d7a 100644
--- a/code/game/machinery/droneDispenser.dm
+++ b/code/game/machinery/droneDispenser.dm
@@ -48,7 +48,7 @@
var/break_message = "lets out a tinny alarm before falling dark."
var/break_sound = 'sound/machines/warning-buzzer.ogg'
-/obj/machinery/droneDispenser/Initialize()
+/obj/machinery/droneDispenser/Initialize(mapload)
. = ..()
var/datum/component/material_container/materials = AddComponent(/datum/component/material_container, list(/datum/material/iron, /datum/material/glass), MINERAL_MATERIAL_AMOUNT * MAX_STACK_SIZE * 2, TRUE, /obj/item/stack)
materials.insert_amount_mat(starting_amount)
diff --git a/code/game/machinery/embedded_controller/access_controller.dm b/code/game/machinery/embedded_controller/access_controller.dm
index 8eebd779f4..3beb481e00 100644
--- a/code/game/machinery/embedded_controller/access_controller.dm
+++ b/code/game/machinery/embedded_controller/access_controller.dm
@@ -18,7 +18,7 @@
/obj/machinery/doorButtons/proc/findObjsByTag()
return
-/obj/machinery/doorButtons/Initialize()
+/obj/machinery/doorButtons/Initialize(mapload)
..()
return INITIALIZE_HINT_LATELOAD
diff --git a/code/game/machinery/embedded_controller/embedded_controller_base.dm b/code/game/machinery/embedded_controller/embedded_controller_base.dm
index 5d0165189d..4526a75f32 100644
--- a/code/game/machinery/embedded_controller/embedded_controller_base.dm
+++ b/code/game/machinery/embedded_controller/embedded_controller_base.dm
@@ -67,7 +67,7 @@
SSradio.remove_object(src,frequency)
return ..()
-/obj/machinery/embedded_controller/radio/Initialize()
+/obj/machinery/embedded_controller/radio/Initialize(mapload)
. = ..()
set_frequency(frequency)
diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm
index 229a2d98d8..cca67030ed 100644
--- a/code/game/machinery/firealarm.dm
+++ b/code/game/machinery/firealarm.dm
@@ -20,7 +20,7 @@
plane = ABOVE_WALL_PLANE
max_integrity = 250
integrity_failure = 0.4
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 30)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 100, FIRE = 90, ACID = 30)
use_power = IDLE_POWER_USE
idle_power_usage = 2
active_power_usage = 6
diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm
index 20aac89743..9b16f4ad0c 100644
--- a/code/game/machinery/flasher.dm
+++ b/code/game/machinery/flasher.dm
@@ -93,7 +93,7 @@
return flash()
/obj/machinery/flasher/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir)
- if(damage_flag == "melee" && damage_amount < 10) //any melee attack below 10 dmg does nothing
+ if(damage_flag == MELEE && damage_amount < 10) //any melee attack below 10 dmg does nothing
return 0
. = ..()
@@ -159,7 +159,7 @@
new /obj/item/stack/sheet/metal (loc, 2)
qdel(src)
-/obj/machinery/flasher/portable/Initialize()
+/obj/machinery/flasher/portable/Initialize(mapload)
. = ..()
proximity_monitor = new(src, 0)
diff --git a/code/game/machinery/gulag_teleporter.dm b/code/game/machinery/gulag_teleporter.dm
index da64699dd4..f595829890 100644
--- a/code/game/machinery/gulag_teleporter.dm
+++ b/code/game/machinery/gulag_teleporter.dm
@@ -32,7 +32,7 @@ The console is located at computer/gulag_teleporter.dm
/obj/item/clothing/mask/breath,
/obj/item/clothing/mask/gas))
-/obj/machinery/gulag_teleporter/Initialize()
+/obj/machinery/gulag_teleporter/Initialize(mapload)
. = ..()
locate_reclaimer()
diff --git a/code/game/machinery/harvester.dm b/code/game/machinery/harvester.dm
index 191967ac1a..5d4f0f1ac8 100644
--- a/code/game/machinery/harvester.dm
+++ b/code/game/machinery/harvester.dm
@@ -16,7 +16,7 @@
var/allow_clothing = FALSE
var/allow_living = FALSE
-/obj/machinery/harvester/Initialize()
+/obj/machinery/harvester/Initialize(mapload)
. = ..()
if(prob(1))
name = "auto-autopsy"
diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm
index d83819a1b3..755894d906 100644
--- a/code/game/machinery/hologram.dm
+++ b/code/game/machinery/hologram.dm
@@ -40,7 +40,7 @@ Possible to do for anyone motivated enough:
idle_power_usage = 5
active_power_usage = 100
max_integrity = 300
- armor = list("melee" = 50, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 0)
+ armor = list(MELEE = 50, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 0)
circuit = /obj/item/circuitboard/machine/holopad
/// List of living mobs that use the holopad
var/list/masters
@@ -85,7 +85,7 @@ Possible to do for anyone motivated enough:
desc = "It's a floor-mounted device for projecting holographic images. This one will refuse to auto-connect incoming calls."
secure = TRUE
-/obj/machinery/holopad/secure/Initialize()
+/obj/machinery/holopad/secure/Initialize(mapload)
. = ..()
var/obj/item/circuitboard/machine/holopad/board = circuit
board.secure = TRUE
@@ -144,7 +144,7 @@ Possible to do for anyone motivated enough:
if(!replay_mode && (disk?.record))
replay_start()
-/obj/machinery/holopad/Initialize()
+/obj/machinery/holopad/Initialize(mapload)
. = ..()
if(on_network)
holopads += src
diff --git a/code/game/machinery/hypnochair.dm b/code/game/machinery/hypnochair.dm
index 41f420204e..9380038147 100644
--- a/code/game/machinery/hypnochair.dm
+++ b/code/game/machinery/hypnochair.dm
@@ -14,7 +14,7 @@
var/timerid = 0 ///Timer ID for interrogations
var/message_cooldown = 0 ///Cooldown for breakout message
-/obj/machinery/hypnochair/Initialize()
+/obj/machinery/hypnochair/Initialize(mapload)
. = ..()
open_machine()
update_icon()
diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm
index bb047a6a5e..2f70bfcecb 100644
--- a/code/game/machinery/igniter.dm
+++ b/code/game/machinery/igniter.dm
@@ -8,7 +8,7 @@
idle_power_usage = 2
active_power_usage = 4
max_integrity = 300
- armor = list("melee" = 50, "bullet" = 30, "laser" = 70, "energy" = 50, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 70)
+ armor = list(MELEE = 50, BULLET = 30, LASER = 70, ENERGY = 50, BOMB = 20, BIO = 0, RAD = 0, FIRE = 100, ACID = 70)
resistance_flags = FIRE_PROOF
var/id = null
var/on = FALSE
@@ -40,7 +40,7 @@
location.hotspot_expose(700,10,1)
return 1
-/obj/machinery/igniter/Initialize()
+/obj/machinery/igniter/Initialize(mapload)
. = ..()
icon_state = "igniter[on]"
@@ -70,7 +70,7 @@
/obj/machinery/sparker/toxmix
id = INCINERATOR_TOXMIX_IGNITER
-/obj/machinery/sparker/Initialize()
+/obj/machinery/sparker/Initialize(mapload)
. = ..()
spark_system = new /datum/effect_system/spark_spread
spark_system.set_up(2, 1, src)
diff --git a/code/game/machinery/launch_pad.dm b/code/game/machinery/launch_pad.dm
index 87989b18ec..fa689cc95f 100644
--- a/code/game/machinery/launch_pad.dm
+++ b/code/game/machinery/launch_pad.dm
@@ -229,7 +229,7 @@
/obj/item/storage/briefcase/launchpad
var/obj/machinery/launchpad/briefcase/pad
-/obj/item/storage/briefcase/launchpad/Initialize()
+/obj/item/storage/briefcase/launchpad/Initialize(mapload)
pad = new(null, src) //spawns pad in nullspace to hide it from briefcase contents
. = ..()
diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm
index 03d9dcee4b..0473a1333a 100644
--- a/code/game/machinery/lightswitch.dm
+++ b/code/game/machinery/lightswitch.dm
@@ -24,7 +24,7 @@
dir = EAST
pixel_x = -26
-/obj/machinery/light_switch/Initialize()
+/obj/machinery/light_switch/Initialize(mapload)
. = ..()
if(istext(area))
area = text2path(area)
diff --git a/code/game/machinery/limbgrower.dm b/code/game/machinery/limbgrower.dm
index ad286a52a7..421bb2550b 100644
--- a/code/game/machinery/limbgrower.dm
+++ b/code/game/machinery/limbgrower.dm
@@ -36,7 +36,7 @@
)
var/obj/item/disk/data/dna_disk
-/obj/machinery/limbgrower/Initialize()
+/obj/machinery/limbgrower/Initialize(mapload)
create_reagents(100, OPENCONTAINER)
stored_research = new /datum/techweb/specialized/autounlocking/limbgrower
. = ..()
@@ -60,7 +60,7 @@
reagent_type = reagent_id.type
)
data["reagents"] += list(reagent_data)
- else
+ else
data["reagents"] = list()
data["total_reagents"] = reagents.total_volume
data["max_reagents"] = reagents.maximum_volume
@@ -335,6 +335,12 @@
if(!features["breasts_producing"])
boobs.genital_flags &= ~(GENITAL_FUID_PRODUCTION|CAN_CLIMAX_WITH|CAN_MASTURBATE_WITH)
boobs.update()
+ if(/obj/item/organ/genital/butt)
+ var/obj/item/organ/genital/butt/ass = new(loc)
+ if(features["has_butt"])
+ ass.color = sanitize_hexcolor(features["butt_color"], 6, TRUE)
+ ass.size = features["butt_size"]
+ ass.update()
else
new built_typepath(loc)
else
@@ -373,7 +379,7 @@
C.undershirt = "Nude"
C.saved_underwear = ""
C.saved_undershirt = ""
-
+
// Just enough to start reviving them, I hope
C.blood_volume = BLOOD_VOLUME_SURVIVE
// At some point, make a way to deal with species regenerate_organs
diff --git a/code/game/machinery/magnet.dm b/code/game/machinery/magnet.dm
index c4494b822f..fa71960c9d 100644
--- a/code/game/machinery/magnet.dm
+++ b/code/game/machinery/magnet.dm
@@ -27,7 +27,7 @@
var/center_y = 0
var/max_dist = 20 // absolute value of center_x,y cannot exceed this integer
-/obj/machinery/magnetic_module/Initialize()
+/obj/machinery/magnetic_module/Initialize(mapload)
..()
var/turf/T = loc
hide(T.intact)
@@ -213,7 +213,7 @@
var/datum/radio_frequency/radio_connection
-/obj/machinery/magnetic_controller/Initialize()
+/obj/machinery/magnetic_controller/Initialize(mapload)
. = ..()
if(autolink)
for(var/obj/machinery/magnetic_module/M in GLOB.machines)
diff --git a/code/game/machinery/mechlaunchpad.dm b/code/game/machinery/mechlaunchpad.dm
index f32fe0bc4f..a2ac2efb3f 100644
--- a/code/game/machinery/mechlaunchpad.dm
+++ b/code/game/machinery/mechlaunchpad.dm
@@ -13,7 +13,7 @@
///List of consoles that can access the pad
var/list/obj/machinery/computer/mechpad/consoles
-/obj/machinery/mechpad/Initialize()
+/obj/machinery/mechpad/Initialize(mapload)
. = ..()
display_name = "Orbital Pad - [get_area_name(src)]"
GLOB.mechpad_list += src
diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm
index 752ba1b732..2bcb9b0762 100644
--- a/code/game/machinery/navbeacon.dm
+++ b/code/game/machinery/navbeacon.dm
@@ -10,7 +10,7 @@
level = 1 // underfloor
layer = LOW_OBJ_LAYER
max_integrity = 500
- armor = list("melee" = 70, "bullet" = 70, "laser" = 70, "energy" = 70, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80)
+ armor = list(MELEE = 70, BULLET = 70, LASER = 70, ENERGY = 70, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 80)
var/open = FALSE // true if cover is open
var/locked = TRUE // true if controls are locked
@@ -21,7 +21,7 @@
req_one_access = list(ACCESS_ENGINE, ACCESS_ROBOTICS)
-/obj/machinery/navbeacon/Initialize()
+/obj/machinery/navbeacon/Initialize(mapload)
. = ..()
set_codes()
diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm
index e346439e03..4a05885b70 100644
--- a/code/game/machinery/porta_turret/portable_turret.dm
+++ b/code/game/machinery/porta_turret/portable_turret.dm
@@ -28,7 +28,7 @@
power_channel = EQUIP //drains power from the EQUIPMENT channel
max_integrity = 160 //the turret's health
integrity_failure = 0.5
- armor = list("melee" = 50, "bullet" = 30, "laser" = 30, "energy" = 30, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90)
+ armor = list(MELEE = 50, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 30, BIO = 0, RAD = 0, FIRE = 90, ACID = 90)
/// Base turret icon state
base_icon_state = "standard"
/// Scan range of the turret for locating targets
@@ -98,7 +98,7 @@
/// MISSING:
var/shot_stagger = 0
-/obj/machinery/porta_turret/Initialize()
+/obj/machinery/porta_turret/Initialize(mapload)
. = ..()
if(!base)
base = src
@@ -478,10 +478,12 @@
for(var/A in GLOB.mechas_list)
if((get_dist(A, base) < scan_range) && can_see(base, A, scan_range))
- var/obj/mecha/Mech = A
- if(Mech.occupant && !in_faction(Mech.occupant)) //If there is a user and they're not in our faction
- if(assess_perp(Mech.occupant) >= 4)
- targets += Mech
+ var/obj/vehicle/sealed/mecha/mech = A
+ for(var/O in mech.occupants)
+ var/mob/living/occupant = O
+ if(!in_faction(occupant)) //If there is a user and they're not in our faction
+ if(assess_perp(occupant) >= 4)
+ targets += mech
if((turret_flags & TURRET_FLAG_SHOOT_ANOMALOUS) && GLOB.blobs.len && (mode == TURRET_LETHAL))
for(var/obj/structure/blob/B in view(scan_range, base))
@@ -774,7 +776,7 @@
/obj/machinery/porta_turret/syndicate/energy/pirate
max_integrity = 260
integrity_failure = 0.08
- armor = list("melee" = 50, "bullet" = 30, "laser" = 30, "energy" = 30, "bomb" = 50, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90)
+ armor = list(MELEE = 50, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 50, BIO = 0, RAD = 0, FIRE = 90, ACID = 90)
/obj/machinery/porta_turret/syndicate/energy/raven
stun_projectile = /obj/item/projectile/beam/laser
@@ -794,7 +796,7 @@
lethal_projectile = /obj/item/projectile/bullet/p50/penetrator/shuttle
lethal_projectile_sound = 'sound/weapons/gunshot_smg.ogg'
stun_projectile_sound = 'sound/weapons/gunshot_smg.ogg'
- armor = list("melee" = 50, "bullet" = 30, "laser" = 30, "energy" = 30, "bomb" = 80, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90)
+ armor = list(MELEE = 50, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 80, BIO = 0, RAD = 0, FIRE = 90, ACID = 90)
/obj/machinery/porta_turret/syndicate/pod/toolbox
max_integrity = 100
@@ -835,7 +837,7 @@
/obj/machinery/porta_turret/aux_base/interact(mob/user) //Controlled solely from the base console.
return
-/obj/machinery/porta_turret/aux_base/Initialize()
+/obj/machinery/porta_turret/aux_base/Initialize(mapload)
. = ..()
cover.name = name
cover.desc = desc
diff --git a/code/game/machinery/quantum_pad.dm b/code/game/machinery/quantum_pad.dm
index 5c1a2195a4..389dd0f2ab 100644
--- a/code/game/machinery/quantum_pad.dm
+++ b/code/game/machinery/quantum_pad.dm
@@ -20,7 +20,7 @@
var/map_pad_id = "" as text //what's my name
var/map_pad_link_id = "" as text //who's my friend
-/obj/machinery/quantumpad/Initialize()
+/obj/machinery/quantumpad/Initialize(mapload)
. = ..()
if(map_pad_id)
mapped_quantum_pads[map_pad_id] = src
diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm
index 0accd0994c..11ae19f7fa 100644
--- a/code/game/machinery/rechargestation.dm
+++ b/code/game/machinery/rechargestation.dm
@@ -14,13 +14,13 @@
var/recharge_speed
var/repairs
-/obj/machinery/recharge_station/Initialize()
+/obj/machinery/recharge_station/Initialize(mapload)
. = ..()
update_icon()
/obj/machinery/recharge_station/upgraded
-/obj/machinery/recharge_station/upgraded/Initialize()
+/obj/machinery/recharge_station/upgraded/Initialize(mapload)
. = ..()
component_parts = list()
component_parts += new /obj/item/circuitboard/machine/cyborgrecharger(null)
@@ -31,7 +31,7 @@
/obj/machinery/recharge_station/fullupgrade
-/obj/machinery/recharge_station/fullupgrade/Initialize()
+/obj/machinery/recharge_station/fullupgrade/Initialize(mapload)
. = ..()
component_parts = list()
component_parts += new /obj/item/circuitboard/machine/cyborgrecharger(null)
diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm
index 21ef8e2dcf..c1dac389bf 100644
--- a/code/game/machinery/recycler.dm
+++ b/code/game/machinery/recycler.dm
@@ -17,7 +17,7 @@
var/eat_victim_items = TRUE
var/item_recycle_sound = 'sound/items/welder.ogg'
-/obj/machinery/recycler/Initialize()
+/obj/machinery/recycler/Initialize(mapload)
AddComponent(/datum/component/butchering/recycler, 1, amount_produced,amount_produced/5)
AddComponent(/datum/component/material_container, list(/datum/material/iron, /datum/material/glass, /datum/material/silver, /datum/material/plasma, /datum/material/gold, /datum/material/diamond, /datum/material/plastic, /datum/material/uranium, /datum/material/bananium, /datum/material/titanium, /datum/material/bluespace), INFINITY, FALSE, null, null, null, TRUE)
. = ..()
@@ -87,7 +87,7 @@
is_powered = FALSE
icon_state = icon_name + "[is_powered]" + "[(blood ? "bld" : "")]" // add the blood tag at the end
-/obj/machinery/recycler/CanPass(atom/movable/AM)
+/obj/machinery/recycler/CanAllowThrough(atom/movable/AM)
. = ..()
if(!anchored)
return
@@ -120,10 +120,10 @@
var/obj/item/bodypart/head/as_head = AM
var/obj/item/mmi/as_mmi = AM
if(istype(AM, /obj/item/organ/brain) || (istype(as_head) && as_head.brain) || (istype(as_mmi) && as_mmi.brain) || istype(AM, /obj/item/dullahan_relay))
- living_detected = living_detected || AM
+ living_detected = living_detected ? living_detected : AM
nom += AM
else if(isliving(AM))
- living_detected = living_detected || TRUE
+ living_detected = living_detected ? living_detected : AM
crunchy_nom += AM
var/not_eaten = to_eat.len - nom.len - crunchy_nom.len
if(living_detected) // First, check if we have any living beings detected.
diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm
index a273aad0dd..52c96e269f 100644
--- a/code/game/machinery/requests_console.dm
+++ b/code/game/machinery/requests_console.dm
@@ -55,7 +55,7 @@ GLOBAL_LIST_EMPTY(allConsoles)
var/emergency //If an emergency has been called by this device. Acts as both a cooldown and lets the responder know where it the emergency was triggered from
var/receive_ore_updates = FALSE //If ore redemption machines will send an update when it receives new ores.
max_integrity = 300
- armor = list("melee" = 70, "bullet" = 30, "laser" = 30, "energy" = 30, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90)
+ armor = list(MELEE = 70, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 0, BIO = 0, RAD = 0, FIRE = 90, ACID = 90)
/obj/machinery/requests_console/power_change()
..()
@@ -85,7 +85,7 @@ GLOBAL_LIST_EMPTY(allConsoles)
else
icon_state = "req_comp0"
-/obj/machinery/requests_console/Initialize()
+/obj/machinery/requests_console/Initialize(mapload)
. = ..()
name = "\improper [department] requests console"
GLOB.allConsoles += src
diff --git a/code/game/machinery/sheetifier.dm b/code/game/machinery/sheetifier.dm
index 7b83401194..82f15803ab 100644
--- a/code/game/machinery/sheetifier.dm
+++ b/code/game/machinery/sheetifier.dm
@@ -11,7 +11,7 @@
layer = BELOW_OBJ_LAYER
var/busy_processing = FALSE
-/obj/machinery/sheetifier/Initialize()
+/obj/machinery/sheetifier/Initialize(mapload)
. = ..()
AddComponent(/datum/component/material_container, list(/datum/material/meat), MINERAL_MATERIAL_AMOUNT * MAX_STACK_SIZE * 2, TRUE, /obj/item/reagent_containers/food/snacks/meat/slab, CALLBACK(src, .proc/CanInsertMaterials), CALLBACK(src, .proc/AfterInsertMaterials))
diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm
index 2ebb137839..836fcad8e8 100644
--- a/code/game/machinery/shieldgen.dm
+++ b/code/game/machinery/shieldgen.dm
@@ -11,7 +11,7 @@
max_integrity = 200 //The shield can only take so much beating (prevents perma-prisons)
CanAtmosPass = ATMOS_PASS_DENSITY
-/obj/structure/emergency_shield/Initialize()
+/obj/structure/emergency_shield/Initialize(mapload)
. = ..()
setDir(pick(GLOB.cardinals))
air_update_turf(1)
@@ -28,7 +28,7 @@
if(severity >= 70)
qdel(src)
else
- take_damage(severity/1.3, BRUTE, "energy", 0)
+ take_damage(severity/1.3, BRUTE, ENERGY, 0)
/obj/structure/emergency_shield/play_attack_sound(damage, damage_type = BRUTE, damage_flag = 0)
switch(damage_type)
@@ -454,11 +454,10 @@
if(gen_secondary) //using power may cause us to be destroyed
gen_secondary.use_stored_power(drain_amount*0.5)
-/obj/machinery/shieldwall/CanPass(atom/movable/mover, turf/target)
+/obj/machinery/shieldwall/CanAllowThrough(atom/movable/mover, turf/target)
+ . = ..()
if(istype(mover) && (mover.pass_flags & PASSGLASS))
return prob(20)
else
if(istype(mover, /obj/item/projectile))
return prob(10)
- else
- return !density
diff --git a/code/game/machinery/shuttle/custom_shuttle.dm b/code/game/machinery/shuttle/custom_shuttle.dm
index 7c83cade69..9bf721b80c 100644
--- a/code/game/machinery/shuttle/custom_shuttle.dm
+++ b/code/game/machinery/shuttle/custom_shuttle.dm
@@ -12,7 +12,7 @@
var/icon_state_open = "burst_plasma_open"
var/icon_state_off = "burst_plasma_off"
-/obj/machinery/shuttle/Initialize()
+/obj/machinery/shuttle/Initialize(mapload)
. = ..()
GLOB.custom_shuttle_machines += src
diff --git a/code/game/machinery/shuttle/shuttle_engine.dm b/code/game/machinery/shuttle/shuttle_engine.dm
index c3de384c58..d7bb93d94b 100644
--- a/code/game/machinery/shuttle/shuttle_engine.dm
+++ b/code/game/machinery/shuttle/shuttle_engine.dm
@@ -49,7 +49,7 @@
bluespace_capable = TRUE
cooldown = 90
-/obj/machinery/shuttle/engine/Initialize()
+/obj/machinery/shuttle/engine/Initialize(mapload)
. = ..()
check_setup()
diff --git a/code/game/machinery/shuttle/shuttle_heater.dm b/code/game/machinery/shuttle/shuttle_heater.dm
index 8f7b772072..31fcabffda 100644
--- a/code/game/machinery/shuttle/shuttle_heater.dm
+++ b/code/game/machinery/shuttle/shuttle_heater.dm
@@ -22,7 +22,7 @@
density = TRUE
max_integrity = 400
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 30)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 0, BIO = 100, RAD = 100, FIRE = 100, ACID = 30)
layer = OBJ_LAYER
showpipe = TRUE
diff --git a/code/game/machinery/slotmachine.dm b/code/game/machinery/slotmachine.dm
index 1fadad168e..21b469190a 100644
--- a/code/game/machinery/slotmachine.dm
+++ b/code/game/machinery/slotmachine.dm
@@ -36,7 +36,7 @@
var/list/symbols = list(SEVEN = 1, "&" = 2, "@" = 2, "$" = 2, "?" = 2, "#" = 2, "!" = 2, "%" = 2) //if people are winning too much, multiply every number in this list by 2 and see if they are still winning too much.
-/obj/machinery/computer/slot_machine/Initialize()
+/obj/machinery/computer/slot_machine/Initialize(mapload)
. = ..()
jackpots = rand(1, 4) //false hope
plays = rand(75, 200)
diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm
index 17e58f2a49..30c8eb3a86 100644
--- a/code/game/machinery/spaceheater.dm
+++ b/code/game/machinery/spaceheater.dm
@@ -12,7 +12,7 @@
name = "space heater"
desc = "Made by Space Amish using traditional space techniques, this heater/cooler is guaranteed not to set the station on fire. Warranty void if used in engines."
max_integrity = 250
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 10)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 100, FIRE = 80, ACID = 10)
circuit = /obj/item/circuitboard/machine/space_heater
var/obj/item/stock_parts/cell/cell
var/on = FALSE
@@ -28,7 +28,7 @@
/obj/machinery/space_heater/get_cell()
return cell
-/obj/machinery/space_heater/Initialize()
+/obj/machinery/space_heater/Initialize(mapload)
. = ..()
cell = new(src)
update_icon()
diff --git a/code/game/machinery/stasis.dm b/code/game/machinery/stasis.dm
new file mode 100644
index 0000000000..406da6c3b5
--- /dev/null
+++ b/code/game/machinery/stasis.dm
@@ -0,0 +1,153 @@
+#define STASIS_TOGGLE_COOLDOWN 50
+/obj/machinery/stasis
+ name = "lifeform stasis unit"
+ desc = "A not so comfortable looking bed with some nozzles at the top and bottom. It will keep someone in stasis."
+ icon = 'icons/obj/machines/stasis.dmi'
+ icon_state = "stasis"
+ base_icon_state = "stasis"
+ density = FALSE
+ // obj_flags = NO_BUILD
+ can_buckle = TRUE
+ buckle_lying = 90
+ circuit = /obj/item/circuitboard/machine/stasis
+ idle_power_usage = 40
+ active_power_usage = 340
+ fair_market_price = 10
+ payment_department = ACCOUNT_MED
+ var/stasis_enabled = TRUE
+ var/last_stasis_sound = FALSE
+ COOLDOWN_DECLARE(stasis_can_toggle)
+ var/mattress_state = "stasis_on"
+ var/obj/effect/overlay/vis/mattress_on
+
+/obj/machinery/stasis/examine(mob/user)
+ . = ..()
+ . += span_notice("Alt-click to [stasis_enabled ? "turn off" : "turn on"] the machine.")
+
+/obj/machinery/stasis/proc/play_power_sound()
+ var/_running = stasis_running()
+ if(last_stasis_sound != _running)
+ var/sound_freq = rand(5120, 8800)
+ if(_running)
+ playsound(src, 'sound/machines/synth_yes.ogg', 50, TRUE, frequency = sound_freq)
+ else
+ playsound(src, 'sound/machines/synth_no.ogg', 50, TRUE, frequency = sound_freq)
+ last_stasis_sound = _running
+
+/obj/machinery/stasis/AltClick(mob/user)
+ . = ..()
+ if(!can_interact(user))
+ return
+ if(COOLDOWN_FINISHED(src, stasis_can_toggle) && user.canUseTopic(src, !issilicon(user)))
+ stasis_enabled = !stasis_enabled
+ COOLDOWN_START(src, stasis_can_toggle, STASIS_TOGGLE_COOLDOWN)
+ playsound(src, 'sound/machines/click.ogg', 60, TRUE)
+ user.visible_message(span_notice("\The [src] [stasis_enabled ? "powers on" : "shuts down"]."), \
+ span_notice("You [stasis_enabled ? "power on" : "shut down"] \the [src]."), \
+ span_hear("You hear a nearby machine [stasis_enabled ? "power on" : "shut down"]."))
+ play_power_sound()
+ update_appearance()
+
+/obj/machinery/stasis/Exited(atom/movable/gone, atom/newloc)
+ if(gone == occupant)
+ var/mob/living/L = gone
+ if(IS_IN_STASIS(L))
+ thaw_them(L)
+ return ..()
+
+/obj/machinery/stasis/proc/stasis_running()
+ return stasis_enabled && is_operational()
+
+/obj/machinery/stasis/update_icon_state()
+ if(stat & BROKEN)
+ icon_state = "[base_icon_state]_broken"
+ return ..()
+ if(panel_open || stat & MAINT)
+ icon_state = "[base_icon_state]_maintenance"
+ return ..()
+ icon_state = base_icon_state
+ return ..()
+
+/obj/machinery/stasis/update_overlays()
+ . = ..()
+ if(!mattress_state)
+ return
+ var/_running = stasis_running()
+ if(!mattress_on)
+ mattress_on = SSvis_overlays.add_vis_overlay(src, icon, mattress_state, BELOW_OBJ_LAYER, plane, dir, alpha = 0, unique = TRUE)
+ else
+ vis_contents += mattress_on
+ if(managed_vis_overlays)
+ managed_vis_overlays += mattress_on
+ else
+ managed_vis_overlays = list(mattress_on)
+
+ if(mattress_on.alpha ? !_running : _running) //check the inverse of _running compared to truthy alpha, to see if they differ
+ var/new_alpha = _running ? 255 : 0
+ var/easing_direction = _running ? EASE_OUT : EASE_IN
+ animate(mattress_on, alpha = new_alpha, time = 50, easing = CUBIC_EASING|easing_direction)
+
+/obj/machinery/stasis/obj_break(damage_flag)
+ . = ..()
+ if(.)
+ play_power_sound()
+
+/obj/machinery/stasis/power_change()
+ . = ..()
+ if(.)
+ play_power_sound()
+
+/obj/machinery/stasis/proc/chill_out(mob/living/target)
+ if(target != occupant)
+ return
+ var/freq = rand(24750, 26550)
+ playsound(src, 'sound/effects/spray.ogg', 5, TRUE, 2, frequency = freq)
+ target.apply_status_effect(/datum/status_effect/grouped/stasis, STASIS_MACHINE_EFFECT)
+ // ADD_TRAIT(target, TRAIT_TUMOR_SUPPRESSED, TRAIT_GENERIC)
+ target.ExtinguishMob()
+ use_power = ACTIVE_POWER_USE
+
+/obj/machinery/stasis/proc/thaw_them(mob/living/target)
+ target.remove_status_effect(/datum/status_effect/grouped/stasis, STASIS_MACHINE_EFFECT)
+ // REMOVE_TRAIT(target, TRAIT_TUMOR_SUPPRESSED, TRAIT_GENERIC)
+ if(target == occupant)
+ use_power = IDLE_POWER_USE
+
+/obj/machinery/stasis/post_buckle_mob(mob/living/L)
+ if(!can_be_occupant(L))
+ return
+ occupant = L
+ if(stasis_running() && check_nap_violations())
+ chill_out(L)
+ update_appearance()
+
+/obj/machinery/stasis/post_unbuckle_mob(mob/living/L)
+ thaw_them(L)
+ if(L == occupant)
+ occupant = null
+ update_appearance()
+
+/obj/machinery/stasis/process()
+ if(!(occupant && isliving(occupant) && check_nap_violations()))
+ use_power = IDLE_POWER_USE
+ return
+ var/mob/living/L_occupant = occupant
+ if(stasis_running())
+ if(!IS_IN_STASIS(L_occupant))
+ chill_out(L_occupant)
+ else if(IS_IN_STASIS(L_occupant))
+ thaw_them(L_occupant)
+
+/obj/machinery/stasis/screwdriver_act(mob/living/user, obj/item/I)
+ . = ..()
+ . |= default_deconstruction_screwdriver(user, "[base_icon_state]_maintenance", "[base_icon_state]", I)
+ update_appearance()
+
+/obj/machinery/stasis/crowbar_act(mob/living/user, obj/item/I)
+ . = ..()
+ return default_deconstruction_crowbar(I) || .
+
+/obj/machinery/stasis/nap_violation(mob/violator)
+ unbuckle_mob(violator, TRUE)
+
+#undef STASIS_TOGGLE_COOLDOWN
diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm
index 8937106601..2438a6b66b 100644
--- a/code/game/machinery/status_display.dm
+++ b/code/game/machinery/status_display.dm
@@ -4,102 +4,182 @@
#define CHARS_PER_LINE 5
#define FONT_SIZE "5pt"
#define FONT_COLOR "#09f"
-#define FONT_STYLE "Arial Black"
-#define SCROLL_SPEED 2
+#define FONT_STYLE "Small Fonts"
+#define SCROLL_RATE (0.04 SECONDS) // time per pixel
+#define LINE1_Y -8
+#define LINE2_Y -15
#define SD_BLANK 0 // 0 = Blank
#define SD_EMERGENCY 1 // 1 = Emergency Shuttle timer
#define SD_MESSAGE 2 // 2 = Arbitrary message(s)
#define SD_PICTURE 3 // 3 = alert picture
-#define SD_AI_EMOTE 1 // 1 = AI emoticon
-#define SD_AI_BSOD 2 // 2 = Blue screen of death
-
-/// Status display which can show images and scrolling text. !!!USE /obj/machinery/status_display/evac NOT THIS!!!
+/// Status display which can show images and scrolling text.
/obj/machinery/status_display
name = "status display"
desc = null
icon = 'icons/obj/status_display.dmi'
icon_state = "frame"
- plane = ABOVE_WALL_PLANE
+ base_icon_state = "unanchoredstatusdisplay"
+ verb_say = "beeps"
+ verb_ask = "beeps"
+ verb_exclaim = "beeps"
density = FALSE
- use_power = IDLE_POWER_USE
- idle_power_usage = 10
+ layer = ABOVE_WINDOW_LAYER
- maptext_height = 26
- maptext_width = 32
+ var/obj/effect/overlay/status_display_text/message1_overlay
+ var/obj/effect/overlay/status_display_text/message2_overlay
+ var/current_picture = ""
+ var/current_mode = SD_BLANK
+ var/message1 = ""
+ var/message2 = ""
- var/message1 = "" // message line 1
- var/message2 = "" // message line 2
- var/index1 // display index for scrolling messages or 0 if non-scrolling
- var/index2
+/obj/item/wallframe/status_display
+ name = "status display frame"
+ desc = "Used to build status displays, just secure to the wall."
+ icon_state = "unanchoredstatusdisplay"
+ custom_materials = list(/datum/material/iron=14000, /datum/material/glass=8000)
+ result_path = /obj/machinery/status_display/evac
+ pixel_shift = -32
-/// Immediately blank the display.
-/obj/machinery/status_display/proc/remove_display()
- cut_overlays()
- if(maptext)
- maptext = ""
+/obj/machinery/status_display/wrench_act(mob/living/user, obj/item/tool)
+ . = ..()
+ balloon_alert(user, "[anchored ? "un" : ""]securing...")
+ tool.play_tool_sound(src)
+ if(tool.use_tool(src, user, 6 SECONDS))
+ playsound(loc, 'sound/items/deconstruct.ogg', 50, TRUE)
+ balloon_alert(user, "[anchored ? "un" : ""]secured")
+ deconstruct()
+ return TRUE
+
+/obj/machinery/status_display/welder_act(mob/living/user, obj/item/tool)
+ if(user.a_intent == INTENT_HARM)
+ return
+ if(obj_integrity >= max_integrity)
+ balloon_alert(user, "it doesn't need repairs!")
+ return TRUE
+ user.balloon_alert_to_viewers("repairing display...", "repairing...")
+ if(!tool.use_tool(src, user, 4 SECONDS, amount = 0, volume=50))
+ return TRUE
+ balloon_alert(user, "repaired")
+ obj_integrity = max_integrity
+ set_machine_stat(stat & ~BROKEN)
+ update_appearance()
+ return TRUE
+
+/obj/machinery/status_display/deconstruct(disassembled = TRUE)
+ if(flags_1 & NODECONSTRUCT_1)
+ return
+ if(!disassembled)
+ new /obj/item/stack/sheet/metal(drop_location(), 2)
+ new /obj/item/shard(drop_location())
+ new /obj/item/shard(drop_location())
+ else
+ new /obj/item/wallframe/status_display(drop_location())
+ qdel(src)
/// Immediately change the display to the given picture.
/obj/machinery/status_display/proc/set_picture(state)
- remove_display()
- add_overlay(state)
+ if(state != current_picture)
+ current_picture = state
+
+ update_appearance()
/// Immediately change the display to the given two lines.
-/obj/machinery/status_display/proc/update_display(line1, line2)
- var/new_text = {"[line1]
[line2]
"}
- if(maptext != new_text)
- maptext = new_text
+/obj/machinery/status_display/proc/set_messages(line1, line2)
+ line1 = uppertext(line1)
+ line2 = uppertext(line2)
-/// Prepare the display to marquee the given two lines.
-///
-/// Call with no arguments to disable.
-/obj/machinery/status_display/proc/set_message(m1, m2)
- if(m1)
- index1 = (length_char(m1) > CHARS_PER_LINE)
- message1 = m1
- else
- message1 = ""
- index1 = 0
+ if(line1 != message1)
+ message1 = line1
- if(m2)
- index2 = (length_char(m2) > CHARS_PER_LINE)
- message2 = m2
- else
- message2 = ""
- index2 = 0
+ if(line2 != message2)
+ message2 = line2
-// Timed process - performs default marquee action if so needed.
+ update_appearance()
+
+/**
+ * Remove both message objs and null the fields.
+ * Don't call this in subclasses.
+ */
+/obj/machinery/status_display/proc/remove_messages()
+ if(message1_overlay)
+ QDEL_NULL(message1_overlay)
+ if(message2_overlay)
+ QDEL_NULL(message2_overlay)
+
+/**
+ * Create/update message overlay.
+ * They must be handled as real objects for the animation to run.
+ * Don't call this in subclasses.
+ * Arguments:
+ * * overlay - the current /obj/effect/overlay/status_display_text instance
+ * * line_y - The Y offset to render the text.
+ * * message - the new message text.
+ * Returns new /obj/effect/overlay/status_display_text or null if unchanged.
+ */
+/obj/machinery/status_display/proc/update_message(obj/effect/overlay/status_display_text/overlay, line_y, message)
+ if(overlay && message == overlay.message)
+ return null
+
+ if(overlay)
+ qdel(overlay)
+
+ var/obj/effect/overlay/status_display_text/new_status_display_text = new(src, line_y, message)
+ vis_contents += new_status_display_text
+ return new_status_display_text
+
+/obj/machinery/status_display/update_appearance(updates=ALL)
+ . = ..()
+ if( \
+ (stat & (NOPOWER|BROKEN)) || \
+ (current_mode == SD_BLANK) || \
+ (current_mode != SD_PICTURE && message1 == "" && message2 == "") \
+ )
+ set_light(0)
+ return
+ set_light(1.4, 0.7, LIGHT_COLOR_BLUE) // blue light
+
+/obj/machinery/status_display/update_overlays()
+ . = ..()
+
+ if(stat & (NOPOWER|BROKEN))
+ remove_messages()
+ return
+
+ switch(current_mode)
+ if(SD_BLANK)
+ remove_messages()
+ // Turn off backlight.
+ return
+ if(SD_PICTURE)
+ remove_messages()
+ . += mutable_appearance(icon, current_picture)
+ else
+ var/overlay = update_message(message1_overlay, LINE1_Y, message1)
+ if(overlay)
+ message1_overlay = overlay
+ overlay = update_message(message2_overlay, LINE2_Y, message2)
+ if(overlay)
+ message2_overlay = overlay
+
+ // Turn off backlight if message is blank
+ if(message1 == "" && message2 == "")
+ return
+
+ . += emissive_appearance(icon, "outline", alpha = src.alpha)
+
+// Timed process - performs nothing in the base class
/obj/machinery/status_display/process()
if(stat & NOPOWER)
// No power, no processing.
- remove_display()
- return PROCESS_KILL
+ update_appearance()
- var/line1 = message1
- if(index1)
- line1 = copytext_char("[message1]|[message1]", index1, index1+CHARS_PER_LINE)
- var/message1_len = length_char(message1)
- index1 += SCROLL_SPEED
- if(index1 > message1_len + 1)
- index1 -= (message1_len + 1)
-
- var/line2 = message2
- if(index2)
- line2 = copytext_char("[message2]|[message2]", index2, index2+CHARS_PER_LINE)
- var/message2_len = length(message2)
- index2 += SCROLL_SPEED
- if(index2 > message2_len + 1)
- index2 -= (message2_len + 1)
-
- update_display(line1, line2)
- if (!index1 && !index2)
- // No marquee, no processing.
- return PROCESS_KILL
+ return PROCESS_KILL
/// Update the display and, if necessary, re-enable processing.
/obj/machinery/status_display/proc/update()
- if (process() != PROCESS_KILL)
+ if (process(SSMACHINES_DT) != PROCESS_KILL)
START_PROCESSING(SSmachines, src)
/obj/machinery/status_display/power_change()
@@ -110,22 +190,23 @@
. = ..()
if(stat & (NOPOWER|BROKEN) || . & EMP_PROTECT_SELF)
return
+ current_mode = SD_PICTURE
set_picture("ai_bsod")
/obj/machinery/status_display/examine(mob/user)
. = ..()
- if (message1 || message2)
+ if (current_mode == SD_MESSAGE && (message1_overlay?.message || message2_overlay?.message))
. += "The display says:"
- if (message1)
- . += "\t[html_encode(message1)]"
- if (message2)
- . += "\t[html_encode(message2)]"
+ if (message1_overlay.message)
+ . += "\t[html_encode(message1_overlay.message)]"
+ if (message2_overlay.message)
+ . += "\t[html_encode(message2_overlay.message)]"
// Helper procs for child display types.
/obj/machinery/status_display/proc/display_shuttle_status(obj/docking_port/mobile/shuttle)
if(!shuttle)
// the shuttle is missing - no processing
- update_display("shutl?","")
+ set_messages("shutl?","")
return PROCESS_KILL
else if(shuttle.timer)
var/line1 = "-[shuttle.getModeStr()]-"
@@ -133,10 +214,10 @@
if(length_char(line2) > CHARS_PER_LINE)
line2 = "error"
- update_display(line1, line2)
+ set_messages(line1, line2)
else
// don't kill processing, the timer might turn back on
- remove_display()
+ set_messages("", "")
/obj/machinery/status_display/proc/examine_shuttle(mob/user, obj/docking_port/mobile/shuttle)
if (shuttle)
@@ -150,18 +231,75 @@
else
return "The display says:
\tShuttle missing!"
+/obj/machinery/status_display/Destroy()
+ remove_messages()
+ return ..()
+
+/**
+ * Nice overlay to make text smoothly scroll with no client updates after setup.
+ */
+/obj/effect/overlay/status_display_text
+ icon = 'icons/obj/status_display.dmi'
+ vis_flags = VIS_INHERIT_LAYER | VIS_INHERIT_PLANE | VIS_INHERIT_ID
+
+ var/message
+
+/obj/effect/overlay/status_display_text/Initialize(mapload, yoffset, line)
+ . = ..()
+
+ maptext_y = yoffset
+ message = line
+
+ var/line_length = length_char(line)
+
+ if(line_length > CHARS_PER_LINE)
+ // Marquee text
+ var/marquee_message = "[line] • [line] • [line]"
+ var/marquee_length = line_length * 3 + 6
+ maptext = generate_text(marquee_message, center = FALSE)
+ maptext_width = 6 * marquee_length
+ maptext_x = 32
+
+ // Mask off to fit in screen.
+ add_filter("mask", 1, alpha_mask_filter(icon = icon(icon, "outline")))
+
+ // Scroll.
+ var/width = 4 * marquee_length
+ var/time = (width + 32) * SCROLL_RATE
+ animate(src, maptext_x = -width, time = time, loop = -1)
+ animate(maptext_x = 32, time = 0)
+ else
+ // Centered text
+ maptext = generate_text(line, center = TRUE)
+ maptext_x = 0
+
+/obj/effect/overlay/status_display_text/proc/generate_text(text, center)
+ return {"[text]
"}
/// Evac display which shows shuttle timer or message set by Command.
/obj/machinery/status_display/evac
+ current_mode = SD_EMERGENCY
var/frequency = FREQ_STATUS_DISPLAYS
- var/mode = SD_EMERGENCY
var/friendc = FALSE // track if Friend Computer mode
var/last_picture // For when Friend Computer mode is undone
-/obj/machinery/status_display/evac/Initialize()
+// MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/status_display/evac, 32)
+
+//makes it go on the wall when built
+/obj/machinery/status_display/Initialize(mapload, ndir, building)
+ . = ..()
+ update_appearance()
+
+/obj/machinery/status_display/evac/Initialize(mapload)
. = ..()
// register for radio system
SSradio.add_object(src, frequency)
+ // Circuit USB
+ /*
+ AddComponent(/datum/component/usb_port, list(
+ /obj/item/circuit_component/status_display,
+ ))
+ */
/obj/machinery/status_display/evac/Destroy()
SSradio.remove_object(src,frequency)
@@ -170,23 +308,23 @@
/obj/machinery/status_display/evac/process()
if(stat & NOPOWER)
// No power, no processing.
- remove_display()
+ update_appearance()
return PROCESS_KILL
if(friendc) //Makes all status displays except supply shuttle timer display the eye -- Urist
+ current_mode = SD_PICTURE
set_picture("ai_friend")
return PROCESS_KILL
- switch(mode)
+ switch(current_mode)
if(SD_BLANK)
- remove_display()
return PROCESS_KILL
if(SD_EMERGENCY)
return display_shuttle_status(SSshuttle.emergency)
if(SD_MESSAGE)
- return ..()
+ return PROCESS_KILL
if(SD_PICTURE)
set_picture(last_picture)
@@ -194,7 +332,7 @@
/obj/machinery/status_display/evac/examine(mob/user)
. = ..()
- if(mode == SD_EMERGENCY)
+ if(current_mode == SD_EMERGENCY)
. += examine_shuttle(user, SSshuttle.emergency)
else if(!message1 && !message2)
. += "The display is blank."
@@ -202,16 +340,16 @@
/obj/machinery/status_display/evac/receive_signal(datum/signal/signal)
switch(signal.data["command"])
if("blank")
- mode = SD_BLANK
- set_message(null, null)
+ current_mode = SD_BLANK
+ update_appearance()
if("shuttle")
- mode = SD_EMERGENCY
- set_message(null, null)
+ current_mode = SD_EMERGENCY
+ set_messages("", "")
if("message")
- mode = SD_MESSAGE
- set_message(signal.data["msg1"], signal.data["msg2"])
+ current_mode = SD_MESSAGE
+ set_messages(signal.data["msg1"] || "", signal.data["msg2"] || "")
if("alert")
- mode = SD_PICTURE
+ current_mode = SD_PICTURE
last_picture = signal.data["picture_state"]
set_picture(last_picture)
if("friendcomputer")
@@ -222,11 +360,12 @@
/// Supply display which shows the status of the supply shuttle.
/obj/machinery/status_display/supply
name = "supply display"
+ current_mode = SD_MESSAGE
/obj/machinery/status_display/supply/process()
if(stat & NOPOWER)
// No power, no processing.
- remove_display()
+ update_appearance()
return PROCESS_KILL
var/line1
@@ -240,12 +379,15 @@
if(is_station_level(SSshuttle.supply.z))
line1 = "CARGO"
line2 = "Docked"
+ else
+ line1 = ""
+ line2 = ""
else
line1 = "CARGO"
line2 = SSshuttle.supply.getTimerStr()
if(length_char(line2) > CHARS_PER_LINE)
line2 = "Error"
- update_display(line1, line2)
+ set_messages(line1, line2)
/obj/machinery/status_display/supply/examine(mob/user)
. = ..()
@@ -265,12 +407,13 @@
/// General-purpose shuttle status display.
/obj/machinery/status_display/shuttle
name = "shuttle display"
+ current_mode = SD_MESSAGE
var/shuttle_id
/obj/machinery/status_display/shuttle/process()
if(!shuttle_id || (stat & NOPOWER))
// No power, no processing.
- remove_display()
+ update_appearance()
return PROCESS_KILL
return display_shuttle_status(SSshuttle.getShuttle(shuttle_id))
@@ -291,7 +434,7 @@
update()
/obj/machinery/status_display/shuttle/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock, idnum, override)
- if (port && (shuttle_id == initial(shuttle_id) || override))
+ if(port && (shuttle_id == initial(shuttle_id) || override))
shuttle_id = port.id
update()
@@ -300,11 +443,34 @@
/obj/machinery/status_display/ai
name = "\improper AI display"
desc = "A small screen which the AI can use to present itself."
+ current_mode = SD_PICTURE
- var/mode = SD_BLANK
- var/emotion = "Neutral"
+ var/emotion = AI_EMOTION_BLANK
-/obj/machinery/status_display/ai/Initialize()
+ /// A mapping between AI_EMOTION_* string constants, which also double as user readable descriptions, and the name of the iconfile.
+ var/static/list/emotion_map = list(
+ AI_EMOTION_BLANK = "ai_off",
+ AI_EMOTION_VERY_HAPPY = "ai_veryhappy",
+ AI_EMOTION_HAPPY = "ai_happy",
+ AI_EMOTION_NEUTRAL = "ai_neutral",
+ AI_EMOTION_UNSURE = "ai_unsure",
+ AI_EMOTION_CONFUSED = "ai_confused",
+ AI_EMOTION_SAD = "ai_sad",
+ AI_EMOTION_BSOD = "ai_bsod",
+ AI_EMOTION_PROBLEMS = "ai_trollface",
+ AI_EMOTION_AWESOME = "ai_awesome",
+ AI_EMOTION_DORFY = "ai_urist",
+ AI_EMOTION_THINKING = "ai_thinking",
+ AI_EMOTION_FACEPALM = "ai_facepalm",
+ AI_EMOTION_FRIEND_COMPUTER = "ai_friend",
+ AI_EMOTION_BLUE_GLOW = "ai_sal",
+ AI_EMOTION_RED_GLOW = "ai_hal",
+ )
+
+
+// MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/status_display/ai, 32)
+
+/obj/machinery/status_display/ai/Initialize(mapload)
. = ..()
GLOB.ai_status_displays.Add(src)
@@ -313,57 +479,109 @@
. = ..()
/obj/machinery/status_display/ai/attack_ai(mob/living/silicon/ai/user)
- if(isAI(user))
- user.ai_statuschange()
+ if(!isAI(user))
+ return
+ var/list/choices = list()
+ for(var/emotion_const in emotion_map)
+ var/icon_state = emotion_map[emotion_const]
+ choices[emotion_const] = image(icon = 'icons/obj/status_display.dmi', icon_state = icon_state)
+
+ var/emotion_result = show_radial_menu(user, src, choices, tooltips = TRUE)
+ for(var/_emote in typesof(/datum/emote/ai/emotion_display))
+ var/datum/emote/ai/emotion_display/emote = _emote
+ if(initial(emote.emotion) == emotion_result)
+ user.emote(initial(emote.key))
+ break
/obj/machinery/status_display/ai/process()
- if(mode == SD_BLANK || (stat & NOPOWER))
- remove_display()
+ if(stat & NOPOWER)
+ update_appearance()
return PROCESS_KILL
- if(mode == SD_AI_EMOTE)
- switch(emotion)
- if("Very Happy")
- set_picture("ai_veryhappy")
- if("Happy")
- set_picture("ai_happy")
- if("Neutral")
- set_picture("ai_neutral")
- if("Unsure")
- set_picture("ai_unsure")
- if("Confused")
- set_picture("ai_confused")
- if("Sad")
- set_picture("ai_sad")
- if("BSOD")
- set_picture("ai_bsod")
- if("Blank")
- set_picture("ai_off")
- if("Problems?")
- set_picture("ai_trollface")
- if("Awesome")
- set_picture("ai_awesome")
- if("Dorfy")
- set_picture("ai_urist")
- if("Thinking")
- set_picture("ai_thinking")
- if("Facepalm")
- set_picture("ai_facepalm")
- if("Friend Computer")
- set_picture("ai_friend")
- if("Blue Glow")
- set_picture("ai_sal")
- if("Red Glow")
- set_picture("ai_hal")
- return PROCESS_KILL
+ set_picture(emotion_map[emotion])
+ return PROCESS_KILL
- if(mode == SD_AI_BSOD)
- set_picture("ai_bsod")
- return PROCESS_KILL
+/*
+/obj/item/circuit_component/status_display
+ display_name = "Status Display"
+ desc = "Output text and pictures to a status display."
+ circuit_flags = CIRCUIT_FLAG_INPUT_SIGNAL|CIRCUIT_FLAG_OUTPUT_SIGNAL
+ var/datum/port/input/option/command
+ var/datum/port/input/option/picture
+ var/datum/port/input/message1
+ var/datum/port/input/message2
+
+ var/obj/machinery/status_display/connected_display
+
+ var/list/command_map
+ var/list/picture_map
+
+/obj/item/circuit_component/status_display/populate_ports()
+ message1 = add_input_port("Message 1", PORT_TYPE_STRING)
+ message2 = add_input_port("Message 2", PORT_TYPE_STRING)
+
+/obj/item/circuit_component/status_display/populate_options()
+ var/static/list/command_options = list(
+ "Blank" = "blank",
+ "Shuttle" = "shuttle",
+ "Message" = "message",
+ "Alert" = "alert"
+ )
+
+ var/static/list/picture_options = list(
+ "Default" = "default",
+ "Red Alert" = "redalert",
+ "Biohazard" = "biohazard",
+ "Lockdown" = "lockdown",
+ "Happy" = "ai_happy",
+ "Neutral" = "ai_neutral",
+ "Very Happy" = "ai_veryhappy",
+ "Sad" = "ai_sad",
+ "Unsure" = "ai_unsure",
+ "Confused" = "ai_confused",
+ "Surprised" = "ai_surprised",
+ "BSOD" = "ai_bsod"
+ )
+
+ command = add_option_port("Command", command_options)
+ command_map = command_options
+
+ picture = add_option_port("Picture", picture_options)
+ picture_map = picture_options
+
+/obj/item/circuit_component/status_display/register_usb_parent(atom/movable/shell)
+ . = ..()
+ if(istype(shell, /obj/machinery/status_display))
+ connected_display = shell
+
+/obj/item/circuit_component/status_display/unregister_usb_parent(atom/movable/parent)
+ connected_display = null
+ return ..()
+
+/obj/item/circuit_component/status_display/input_received(datum/port/input/port)
+ // Just use command handling built into status display.
+ // The option inputs thankfully sanitize command and picture for us.
+
+ if(!connected_display)
+ return
+
+ var/command_value = command_map[command.value]
+ var/datum/signal/status_signal = new(list("command" = command_value))
+ switch(command_value)
+ if("message")
+ status_signal.data["msg1"] = message1.value
+ status_signal.data["msg2"] = message2.value
+ if("alert")
+ status_signal.data["picture_state"] = picture_map[picture.value]
+
+ connected_display.receive_signal(status_signal)
+*/
#undef CHARS_PER_LINE
#undef FONT_SIZE
#undef FONT_COLOR
#undef FONT_STYLE
-#undef SCROLL_SPEED
+#undef SCROLL_RATE
+#undef LINE1_Y
+#undef LINE2_Y
diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm
index cecf351ea9..74a05a1e7b 100644
--- a/code/game/machinery/suit_storage_unit.dm
+++ b/code/game/machinery/suit_storage_unit.dm
@@ -120,7 +120,7 @@
state_open = TRUE
density = FALSE
-/obj/machinery/suit_storage_unit/Initialize()
+/obj/machinery/suit_storage_unit/Initialize(mapload)
. = ..()
wires = new /datum/wires/suit_storage_unit(src)
if(suit_type)
diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm
index 3bee98b51d..56629841e3 100644
--- a/code/game/machinery/syndicatebomb.dm
+++ b/code/game/machinery/syndicatebomb.dm
@@ -84,7 +84,7 @@
countdown.stop()
STOP_PROCESSING(SSfastprocess, src)
-/obj/machinery/syndicatebomb/Initialize()
+/obj/machinery/syndicatebomb/Initialize(mapload)
. = ..()
wires = new /datum/wires/syndicatebomb(src)
if(payload)
@@ -242,7 +242,7 @@
open_panel = TRUE
timer_set = 120
-/obj/machinery/syndicatebomb/empty/Initialize()
+/obj/machinery/syndicatebomb/empty/Initialize(mapload)
. = ..()
wires.cut_all()
diff --git a/code/game/machinery/telecomms/machines/allinone.dm b/code/game/machinery/telecomms/machines/allinone.dm
index 7cc421ef15..7129d77720 100644
--- a/code/game/machinery/telecomms/machines/allinone.dm
+++ b/code/game/machinery/telecomms/machines/allinone.dm
@@ -16,7 +16,7 @@
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
flags_1 = NODECONSTRUCT_1
-/obj/machinery/telecomms/allinone/Initialize()
+/obj/machinery/telecomms/allinone/Initialize(mapload)
. = ..()
if (intercept)
freq_listening = list(FREQ_SYNDICATE)
diff --git a/code/game/machinery/telecomms/machines/bus.dm b/code/game/machinery/telecomms/machines/bus.dm
index bf3dfe8f7e..fc4de9ae84 100644
--- a/code/game/machinery/telecomms/machines/bus.dm
+++ b/code/game/machinery/telecomms/machines/bus.dm
@@ -70,7 +70,7 @@
freq_listening = list(FREQ_ENGINEERING)
autolinkers = list("processor4", "engineering", "common")
-/obj/machinery/telecomms/bus/preset_four/Initialize()
+/obj/machinery/telecomms/bus/preset_four/Initialize(mapload)
. = ..()
for(var/i = MIN_FREQ, i <= MAX_FREQ, i += 2)
freq_listening |= i
diff --git a/code/game/machinery/telecomms/machines/message_server.dm b/code/game/machinery/telecomms/machines/message_server.dm
index a0440001c3..bc22f99928 100644
--- a/code/game/machinery/telecomms/machines/message_server.dm
+++ b/code/game/machinery/telecomms/machines/message_server.dm
@@ -14,10 +14,10 @@
use_power = IDLE_POWER_USE
idle_power_usage = 10
active_power_usage = 100
- armor = list("melee" = 25, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 70)
+ armor = list(MELEE = 25, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 70)
var/obj/item/stored
-/obj/machinery/blackbox_recorder/Initialize()
+/obj/machinery/blackbox_recorder/Initialize(mapload)
. = ..()
stored = new /obj/item/blackbox(src)
@@ -93,7 +93,7 @@
var/list/datum/data_rc_msg/rc_msgs = list()
var/decryptkey
-/obj/machinery/telecomms/message_server/Initialize()
+/obj/machinery/telecomms/message_server/Initialize(mapload)
. = ..()
if (!decryptkey)
decryptkey = GenerateKey()
diff --git a/code/game/machinery/telecomms/machines/receiver.dm b/code/game/machinery/telecomms/machines/receiver.dm
index 0e443bad8f..9f884e3904 100644
--- a/code/game/machinery/telecomms/machines/receiver.dm
+++ b/code/game/machinery/telecomms/machines/receiver.dm
@@ -63,7 +63,7 @@
freq_listening = list(FREQ_COMMAND, FREQ_ENGINEERING, FREQ_SECURITY)
//Common and other radio frequencies for people to freely use
-/obj/machinery/telecomms/receiver/preset_right/Initialize()
+/obj/machinery/telecomms/receiver/preset_right/Initialize(mapload)
. = ..()
for(var/i = MIN_FREQ, i <= MAX_FREQ, i += 2)
freq_listening |= i
diff --git a/code/game/machinery/telecomms/machines/server.dm b/code/game/machinery/telecomms/machines/server.dm
index 6f80cfbf0e..d9d3ca896a 100644
--- a/code/game/machinery/telecomms/machines/server.dm
+++ b/code/game/machinery/telecomms/machines/server.dm
@@ -16,7 +16,7 @@
var/list/log_entries = list()
var/totaltraffic = 0 // gigabytes (if > 1024, divide by 1024 -> terrabytes)
-/obj/machinery/telecomms/server/Initialize()
+/obj/machinery/telecomms/server/Initialize(mapload)
. = ..()
/obj/machinery/telecomms/server/RefreshParts()
@@ -72,7 +72,7 @@
/obj/machinery/telecomms/server/presets
network = "tcommsat"
-/obj/machinery/telecomms/server/presets/Initialize()
+/obj/machinery/telecomms/server/presets/Initialize(mapload)
. = ..()
name = id
@@ -103,7 +103,7 @@
autolinkers = list("common")
//Common and other radio frequencies for people to freely use
-/obj/machinery/telecomms/server/presets/common/Initialize()
+/obj/machinery/telecomms/server/presets/common/Initialize(mapload)
. = ..()
for(var/i = MIN_FREQ, i <= MAX_FREQ, i += 2)
freq_listening |= i
@@ -123,6 +123,6 @@
freq_listening = list(FREQ_SECURITY)
autolinkers = list("security")
-/obj/machinery/telecomms/server/presets/common/birdstation/Initialize()
+/obj/machinery/telecomms/server/presets/common/birdstation/Initialize(mapload)
. = ..()
freq_listening = list()
diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm
index daadbf4f72..6284c93ca5 100644
--- a/code/game/machinery/teleporter.dm
+++ b/code/game/machinery/teleporter.dm
@@ -15,7 +15,7 @@
var/obj/machinery/teleport/station/power_station
var/calibrated //Calibration prevents mutation
-/obj/machinery/teleport/hub/Initialize()
+/obj/machinery/teleport/hub/Initialize(mapload)
. = ..()
link_power_station()
@@ -100,7 +100,7 @@
/obj/machinery/teleport/hub/proc/is_ready()
. = !panel_open && !(stat & (BROKEN|NOPOWER)) && power_station && power_station.engaged && !(power_station.stat & (BROKEN|NOPOWER))
-/obj/machinery/teleport/hub/syndicate/Initialize()
+/obj/machinery/teleport/hub/syndicate/Initialize(mapload)
. = ..()
component_parts += new /obj/item/stock_parts/matter_bin/super(null)
RefreshParts()
@@ -120,7 +120,7 @@
var/list/linked_stations = list()
var/efficiency = 0
-/obj/machinery/teleport/station/Initialize()
+/obj/machinery/teleport/station/Initialize(mapload)
. = ..()
link_console_and_hub()
diff --git a/code/game/machinery/transformer.dm b/code/game/machinery/transformer.dm
index 8bca58a7de..eb79376dc3 100644
--- a/code/game/machinery/transformer.dm
+++ b/code/game/machinery/transformer.dm
@@ -16,7 +16,7 @@
var/obj/effect/countdown/transformer/countdown
var/mob/living/silicon/ai/masterAI
-/obj/machinery/transformer/Initialize()
+/obj/machinery/transformer/Initialize(mapload)
// On us
. = ..()
new /obj/machinery/conveyor/auto(locate(x - 1, y, z), WEST)
@@ -57,14 +57,14 @@
AM.forceMove(drop_location())
do_transform(AM)
-/obj/machinery/transformer/CanPass(atom/movable/mover, turf/target)
+/obj/machinery/transformer/CanAllowThrough(atom/movable/mover, turf/target)
+ . = ..()
// Allows items to go through,
// to stop them from blocking the conveyor belt.
if(!ishuman(mover))
- var/dir = get_dir(src, mover)
- if(dir == EAST)
- return ..()
- return 0
+ if(get_dir(src, mover) == EAST)
+ return
+ return FALSE
/obj/machinery/transformer/process()
if(cooldown && (cooldown_timer <= world.time))
diff --git a/code/game/machinery/turnstile.dm b/code/game/machinery/turnstile.dm
index f30ef22dd7..796d34dcb4 100644
--- a/code/game/machinery/turnstile.dm
+++ b/code/game/machinery/turnstile.dm
@@ -11,7 +11,7 @@
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
layer = OPEN_DOOR_LAYER
-/obj/machinery/turnstile/Initialize()
+/obj/machinery/turnstile/Initialize(mapload)
. = ..()
icon_state = "turnstile"
diff --git a/code/game/mecha/combat/combat.dm b/code/game/mecha/combat/combat.dm
deleted file mode 100644
index f9a86066ff..0000000000
--- a/code/game/mecha/combat/combat.dm
+++ /dev/null
@@ -1,11 +0,0 @@
-/obj/mecha/combat
- force = 30
- internal_damage_threshold = 50
- armor = list("melee" = 30, "bullet" = 30, "laser" = 15, "energy" = 20, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
- mouse_pointer = 'icons/mecha/mecha_mouse.dmi'
-
-/obj/mecha/combat/proc/max_ammo() //Max the ammo stored for Nuke Ops mechs, or anyone else that calls this
- for(var/obj/item/I in equipment)
- if(istype(I, /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/))
- var/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/gun = I
- gun.projectiles_cache = gun.projectiles_cache_max
diff --git a/code/game/mecha/combat/durand.dm b/code/game/mecha/combat/durand.dm
deleted file mode 100644
index 498266d043..0000000000
--- a/code/game/mecha/combat/durand.dm
+++ /dev/null
@@ -1,21 +0,0 @@
-/obj/mecha/combat/durand
- desc = "An aging combat exosuit utilized by the Nanotrasen corporation. Originally developed to combat hostile alien lifeforms."
- name = "\improper Durand"
- icon_state = "durand"
- step_in = 4
- dir_in = 1 //Facing North.
- max_integrity = 400
- deflect_chance = 20
- armor = list("melee" = 40, "bullet" = 35, "laser" = 15, "energy" = 10, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
- max_temperature = 30000
- infra_luminosity = 8
- force = 40
- wreckage = /obj/structure/mecha_wreckage/durand
-
-/obj/mecha/combat/durand/GrantActions(mob/living/user, human_occupant = 0)
- ..()
- defense_action.Grant(user, src)
-
-/obj/mecha/combat/durand/RemoveActions(mob/living/user, human_occupant = 0)
- ..()
- defense_action.Remove(user)
diff --git a/code/game/mecha/combat/gygax.dm b/code/game/mecha/combat/gygax.dm
deleted file mode 100644
index 71258d1ccb..0000000000
--- a/code/game/mecha/combat/gygax.dm
+++ /dev/null
@@ -1,68 +0,0 @@
-/obj/mecha/combat/gygax
- desc = "A lightweight, security exosuit. Popular among private and corporate security."
- name = "\improper Gygax"
- icon_state = "gygax"
- step_in = 3
- dir_in = 1 //Facing North.
- max_integrity = 250
- deflect_chance = 5
- force = 20
- armor = list("melee" = 25, "bullet" = 20, "laser" = 30, "energy" = 15, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
- max_temperature = 25000
- infra_luminosity = 6
- wreckage = /obj/structure/mecha_wreckage/gygax
- internal_damage_threshold = 35
- max_equip = 3
- step_energy_drain = 3
- leg_overload_coeff = 300
-
-/obj/mecha/combat/gygax/dark
- desc = "A lightweight exosuit, painted in a dark scheme. This model appears to have some modifications."
- name = "\improper Dark Gygax"
- icon_state = "darkgygax"
- max_integrity = 300
- deflect_chance = 15
- force = 25
- armor = list("melee" = 40, "bullet" = 40, "laser" = 50, "energy" = 35, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
- max_temperature = 35000
- leg_overload_coeff = 100
- operation_req_access = list(ACCESS_SYNDICATE)
- internals_req_access = list(ACCESS_SYNDICATE)
- wreckage = /obj/structure/mecha_wreckage/gygax/dark
- max_equip = 4
-
-/obj/mecha/combat/gygax/dark/loaded/Initialize()
- . = ..()
- var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/carbine
- ME.attach(src)
- ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang
- ME.attach(src)
- ME = new /obj/item/mecha_parts/mecha_equipment/teleporter
- ME.attach(src)
- ME = new /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay
- ME.attach(src)
- max_ammo()
-
-/obj/mecha/combat/gygax/dark/add_cell(obj/item/stock_parts/cell/C=null)
- if(C)
- C.forceMove(src)
- cell = C
- return
- cell = new /obj/item/stock_parts/cell/hyper(src)
-
-/obj/mecha/combat/gygax/GrantActions(mob/living/user, human_occupant = 0)
- ..()
- overload_action.Grant(user, src)
-
-/obj/mecha/combat/gygax/dark/GrantActions(mob/living/user, human_occupant = 0)
- ..()
- thrusters_action.Grant(user, src)
-
-
-/obj/mecha/combat/gygax/RemoveActions(mob/living/user, human_occupant = 0)
- ..()
- overload_action.Remove(user)
-
-/obj/mecha/combat/gygax/dark/RemoveActions(mob/living/user, human_occupant = 0)
- ..()
- thrusters_action.Remove(user)
diff --git a/code/game/mecha/combat/phazon.dm b/code/game/mecha/combat/phazon.dm
deleted file mode 100644
index 11a1bc1e84..0000000000
--- a/code/game/mecha/combat/phazon.dm
+++ /dev/null
@@ -1,29 +0,0 @@
-/obj/mecha/combat/phazon
- desc = "This is a Phazon exosuit. The pinnacle of scientific research and pride of Nanotrasen, it uses cutting edge bluespace technology and expensive materials."
- name = "\improper Phazon"
- icon_state = "phazon"
- step_in = 2
- dir_in = 2 //Facing South.
- step_energy_drain = 3
- max_integrity = 200
- deflect_chance = 30
- armor = list("melee" = 30, "bullet" = 30, "laser" = 30, "energy" = 30, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
- max_temperature = 25000
- infra_luminosity = 3
- wreckage = /obj/structure/mecha_wreckage/phazon
- add_req_access = 1
- internal_damage_threshold = 25
- force = 15
- max_equip = 3
- phase_state = "phazon-phase"
-
-/obj/mecha/combat/phazon/GrantActions(mob/living/user, human_occupant = 0)
- ..()
- switch_damtype_action.Grant(user, src)
- phasing_action.Grant(user, src)
-
-
-/obj/mecha/combat/phazon/RemoveActions(mob/living/user, human_occupant = 0)
- ..()
- switch_damtype_action.Remove(user)
- phasing_action.Remove(user)
diff --git a/code/game/mecha/equipment/mecha_equipment.dm b/code/game/mecha/equipment/mecha_equipment.dm
deleted file mode 100644
index ef1565502e..0000000000
--- a/code/game/mecha/equipment/mecha_equipment.dm
+++ /dev/null
@@ -1,171 +0,0 @@
-//DO NOT ADD MECHA PARTS TO THE GAME WITH THE DEFAULT "SPRITE ME" SPRITE!
-//I'm annoyed I even have to tell you this! SPRITE FIRST, then commit.
-
-/obj/item/mecha_parts/mecha_equipment
- name = "mecha equipment"
- icon = 'icons/mecha/mecha_equipment.dmi'
- icon_state = "mecha_equip"
- force = 5
- max_integrity = 300
- var/equip_cooldown = 0 // cooldown after use
- var/equip_ready = 1 //whether the equipment is ready for use. (or deactivated/activated for static stuff)
- var/energy_drain = 0
- var/obj/mecha/chassis = null
- /// Bitflag. Determines the range of the equipment.
- var/range = MELEE
- /// Bitflag. Used by exosuit fabricator to assign sub-categories based on which exosuits can equip this.
- var/mech_flags = NONE
- var/salvageable = 1
- //var/detachable = TRUE // Set to FALSE for built-in equipment that cannot be removed
- var/selectable = 1 // Set to 0 for passive equipment such as mining scanner or armor plates
- var/harmful = FALSE //Controls if equipment can be used to attack by a pacifist.
- //var/destroy_sound = 'sound/mecha/critdestr.ogg'
-
-/obj/item/mecha_parts/mecha_equipment/proc/update_chassis_page()
- if(chassis)
- send_byjax(chassis.occupant,"exosuit.browser","eq_list",chassis.get_equipment_list())
- send_byjax(chassis.occupant,"exosuit.browser","equipment_menu",chassis.get_equipment_menu(),"dropdowns")
- return 1
- return
-
-/obj/item/mecha_parts/mecha_equipment/proc/update_equip_info()
- if(chassis)
- send_byjax(chassis.occupant,"exosuit.browser","[REF(src)]",get_equip_info())
- return 1
- return
-
-/obj/item/mecha_parts/mecha_equipment/Destroy()
- if(chassis)
- chassis.equipment -= src
- if(chassis.selected == src)
- chassis.selected = null
- src.update_chassis_page()
- //log_message("[src] is destroyed.", LOG_MECHA)
- chassis.log_append_to_last("[src] is destroyed.",1)
- if(chassis.occupant)
- chassis.occupant_message("[src] is destroyed!")
- SEND_SOUND(chassis.occupant, sound(istype(src, /obj/item/mecha_parts/mecha_equipment/weapon) ? 'sound/mecha/weapdestr.ogg' : 'sound/mecha/critdestr.ogg', volume=50))
- //chassis.occupant.playsound_local(chassis, destroy_sound, 50)
- //if(!detachable) //If we're a built-in nondetachable equipment, let's lock up the slot that we were in.
- // chassis.max_equip--
- chassis = null
- return ..()
-
-/obj/item/mecha_parts/mecha_equipment/proc/critfail()
- if(chassis)
- mecha_log_message("Critical failure", color="red")
-
-/obj/item/mecha_parts/mecha_equipment/proc/get_equip_info()
- if(!chassis)
- return
- var/txt = "* "
- if(chassis.selected == src)
- txt += "[src.name]"
- else if(selectable)
- txt += "[src.name]"
- else
- txt += "[src.name]"
-
- return txt
-
-/obj/item/mecha_parts/mecha_equipment/proc/is_ranged()//add a distance restricted equipment. Why not?
- return range&RANGED //rename to MECHA_RANGE and MECHA_MELEE
-
-/obj/item/mecha_parts/mecha_equipment/proc/is_melee()
- return range&MELEE
-
-
-/obj/item/mecha_parts/mecha_equipment/proc/action_checks(atom/target)
- if(!target)
- return 0
- if(!chassis)
- return 0
- if(!equip_ready)
- return 0
- if(energy_drain && !chassis.has_charge(energy_drain))
- return 0
- if(crit_fail)
- return 0
- if(chassis.equipment_disabled)
- to_chat(chassis.occupant, "Error -- Equipment control unit is unresponsive.")
- return 0
- return 1
-
-/obj/item/mecha_parts/mecha_equipment/proc/action(atom/target)
- return 0
-
-/obj/item/mecha_parts/mecha_equipment/proc/start_cooldown()
- set_ready_state(0)
- chassis.use_power(energy_drain)
- addtimer(CALLBACK(src, .proc/set_ready_state, 1), equip_cooldown)
-
-/obj/item/mecha_parts/mecha_equipment/proc/do_after_cooldown(atom/target)
- if(!chassis)
- return
- var/C = chassis.loc
- set_ready_state(0)
- chassis.use_power(energy_drain)
- . = do_after(chassis.occupant, equip_cooldown, target=target)
- set_ready_state(1)
- if(!chassis || chassis.loc != C || src != chassis.selected || !(get_dir(chassis, target)&chassis.dir))
- return 0
-
-/obj/item/mecha_parts/mecha_equipment/proc/do_after_mecha(atom/target, delay)
- if(!chassis)
- return
- var/C = chassis.loc
- . = do_after(chassis.occupant, delay, target=target)
- if(!chassis || chassis.loc != C || src != chassis.selected || !(get_dir(chassis, target)&chassis.dir))
- return 0
-
-/obj/item/mecha_parts/mecha_equipment/proc/can_attach(obj/mecha/M)
- if(M.equipment.len[target] successfully loaded.")
- mecha_log_message("Loaded [O]. Cargo compartment capacity: [cargo_holder.cargo_capacity - cargo_holder.cargo.len]")
- else
- O.anchored = initial(O.anchored)
- else
- occupant_message("Not enough room in cargo compartment!")
- else
- occupant_message("[target] is firmly secured!")
-
- else if(isliving(target))
- var/mob/living/M = target
- if(M.stat == DEAD)
- return
- if(chassis.occupant.a_intent == INTENT_HARM)
- M.take_overall_damage(dam_force)
- if(!M)
- return
- M.adjustOxyLoss(round(dam_force/2))
- M.updatehealth()
- target.visible_message("[chassis] squeezes [target].", \
- "[chassis] squeezes [target].",\
- "You hear something crack.")
- log_combat(chassis.occupant, M, "attacked", "[name]", "(INTENT: [uppertext(chassis.occupant.a_intent)]) (DAMTYE: [uppertext(damtype)])")
- else
- step_away(M,chassis)
- occupant_message("You push [target] out of the way.")
- chassis.visible_message("[chassis] pushes [target] out of the way.")
- return 1
-
-
-
-//This is pretty much just for the death-ripley
-/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/kill
- name = "\improper KILL CLAMP"
- desc = "They won't know what clamped them!"
- energy_drain = 0
- dam_force = 0
- var/real_clamp = FALSE
-
-/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/kill/real
- desc = "They won't know what clamped them! This time for real!"
- energy_drain = 10
- dam_force = 20
- real_clamp = TRUE
-
-/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/kill/action(atom/target)
- if(!action_checks(target))
- return
- if(!cargo_holder)
- return
- if(isobj(target))
- var/obj/O = target
- if(!O.anchored)
- if(cargo_holder.cargo.len < cargo_holder.cargo_capacity)
- chassis.visible_message("[chassis] lifts [target] and starts to load it into cargo compartment.")
- O.anchored = TRUE
- if(do_after_cooldown(target))
- cargo_holder.cargo += O
- O.forceMove(chassis)
- O.anchored = FALSE
- occupant_message("[target] successfully loaded.")
- mecha_log_message("Loaded [O]. Cargo compartment capacity: [cargo_holder.cargo_capacity - cargo_holder.cargo.len]")
- else
- O.anchored = initial(O.anchored)
- else
- occupant_message("Not enough room in cargo compartment!")
- else
- occupant_message("[target] is firmly secured!")
-
- else if(isliving(target))
- var/mob/living/M = target
- if(M.stat == DEAD)
- return
- if(chassis.occupant.a_intent == INTENT_HARM)
- if(real_clamp)
- M.take_overall_damage(dam_force)
- if(!M)
- return
- M.adjustOxyLoss(round(dam_force/2))
- M.updatehealth()
- target.visible_message("[chassis] destroys [target] in an unholy fury.", \
- "[chassis] destroys [target] in an unholy fury.")
- log_combat(chassis.occupant, M, "attacked", "[name]", "(INTENT: [uppertext(chassis.occupant.a_intent)]) (DAMTYE: [uppertext(damtype)])")
- else
- target.visible_message("[chassis] destroys [target] in an unholy fury.", \
- "[chassis] destroys [target] in an unholy fury.")
- else if(chassis.occupant.a_intent == INTENT_DISARM)
- if(real_clamp)
- var/mob/living/carbon/C = target
- var/play_sound = FALSE
- var/limbs_gone = ""
- var/obj/item/bodypart/affected = C.get_bodypart(BODY_ZONE_L_ARM)
- if(affected != null)
- affected.dismember(damtype)
- play_sound = TRUE
- limbs_gone = ", [affected]"
- affected = C.get_bodypart(BODY_ZONE_R_ARM)
- if(affected != null)
- affected.dismember(damtype)
- play_sound = TRUE
- limbs_gone = "[limbs_gone], [affected]"
- if(play_sound)
- playsound(src, get_dismember_sound(), 80, TRUE)
- target.visible_message("[chassis] rips [target]'s arms off.", \
- "[chassis] rips [target]'s arms off.")
- log_combat(chassis.occupant, M, "dismembered of[limbs_gone],", "[name]", "(INTENT: [uppertext(chassis.occupant.a_intent)]) (DAMTYE: [uppertext(damtype)])")
- else
- target.visible_message("[chassis] rips [target]'s arms off.", \
- "[chassis] rips [target]'s arms off.")
- else
- step_away(M,chassis)
- target.visible_message("[chassis] tosses [target] like a piece of paper.")
- return 1
-
-
-
-/obj/item/mecha_parts/mecha_equipment/extinguisher
- name = "exosuit extinguisher"
- desc = "Equipment for engineering exosuits. A rapid-firing high capacity fire extinguisher."
- icon_state = "mecha_exting"
- equip_cooldown = 5
- energy_drain = 0
- range = MELEE|RANGED
- mech_flags = EXOSUIT_MODULE_WORKING
-
-/obj/item/mecha_parts/mecha_equipment/extinguisher/Initialize()
- . = ..()
- create_reagents(1000)
- reagents.add_reagent(/datum/reagent/water, 1000)
-
-/obj/item/mecha_parts/mecha_equipment/extinguisher/action(atom/target) //copypasted from extinguisher. TODO: Rewrite from scratch.
- if(!action_checks(target) || get_dist(chassis, target)>3)
- return
-
- if(istype(target, /obj/structure/reagent_dispensers/watertank) && get_dist(chassis,target) <= 1)
- var/obj/structure/reagent_dispensers/watertank/WT = target
- WT.reagents.trans_to(src, 1000)
- occupant_message("Extinguisher refilled.")
- playsound(chassis, 'sound/effects/refill.ogg', 50, 1, -6)
- else
- if(reagents.total_volume > 0)
- playsound(chassis, 'sound/effects/extinguish.ogg', 75, 1, -3)
- var/direction = get_dir(chassis,target)
- var/turf/T = get_turf(target)
- var/turf/T1 = get_step(T,turn(direction, 90))
- var/turf/T2 = get_step(T,turn(direction, -90))
-
- var/list/the_targets = list(T,T1,T2)
- spawn(0)
- for(var/a=0, a<5, a++)
- var/obj/effect/particle_effect/water/W = new /obj/effect/particle_effect/water(get_turf(chassis))
- if(!W)
- return
- var/turf/my_target = pick(the_targets)
- var/datum/reagents/R = new/datum/reagents(5)
- W.reagents = R
- R.my_atom = W
- reagents.trans_to(W,1)
- for(var/b=0, b<4, b++)
- if(!W)
- return
- step_towards(W,my_target)
- if(!W)
- return
- var/turf/W_turf = get_turf(W)
- W.reagents.reaction(W_turf)
- for(var/atom/atm in W_turf)
- W.reagents.reaction(atm)
- if(W.loc == my_target)
- break
- sleep(2)
- return 1
-
-/obj/item/mecha_parts/mecha_equipment/extinguisher/get_equip_info()
- return "[..()] \[[src.reagents.total_volume]\]"
-
-/obj/item/mecha_parts/mecha_equipment/extinguisher/can_attach(obj/mecha/working/M as obj)
- if(..())
- if(istype(M))
- return 1
- return 0
-
-
-
-/obj/item/mecha_parts/mecha_equipment/rcd
- name = "mounted RCD"
- desc = "An exosuit-mounted Rapid Construction Device."
- icon_state = "mecha_rcd"
- equip_cooldown = 10
- energy_drain = 250
- range = MELEE|RANGED
- item_flags = NO_MAT_REDEMPTION
- var/mode = 0 //0 - deconstruct, 1 - wall or floor, 2 - airlock.
-
-/obj/item/mecha_parts/mecha_equipment/rcd/Initialize()
- . = ..()
- GLOB.rcd_list += src
-
-/obj/item/mecha_parts/mecha_equipment/rcd/Destroy()
- GLOB.rcd_list -= src
- return ..()
-
-/obj/item/mecha_parts/mecha_equipment/rcd/action(atom/target)
- if(istype(target, /turf/open/space/transit))//>implying these are ever made -Sieve
- return
-
- if(!isturf(target) && !istype(target, /obj/machinery/door/airlock))
- target = get_turf(target)
- if(!action_checks(target) || get_dist(chassis, target)>3)
- return
- playsound(chassis, 'sound/machines/click.ogg', 50, 1)
-
- switch(mode)
- if(0)
- if(iswallturf(target))
- var/turf/closed/wall/W = target
- occupant_message("Deconstructing [W]...")
- if(do_after_cooldown(W))
- chassis.spark_system.start()
- W.ScrapeAway(flags = CHANGETURF_INHERIT_AIR)
- playsound(W, 'sound/items/deconstruct.ogg', 50, 1)
- else if(isfloorturf(target))
- var/turf/open/floor/F = target
- occupant_message("Deconstructing [F]...")
- if(do_after_cooldown(target))
- chassis.spark_system.start()
- F.ScrapeAway(flags = CHANGETURF_INHERIT_AIR)
- playsound(F, 'sound/items/deconstruct.ogg', 50, 1)
- else if (istype(target, /obj/machinery/door/airlock))
- occupant_message("Deconstructing [target]...")
- if(do_after_cooldown(target))
- chassis.spark_system.start()
- qdel(target)
- playsound(target, 'sound/items/deconstruct.ogg', 50, 1)
- if(1)
- if(isspaceturf(target))
- var/turf/open/space/S = target
- occupant_message("Building Floor...")
- if(do_after_cooldown(S))
- S.PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR)
- playsound(S, 'sound/items/deconstruct.ogg', 50, 1)
- chassis.spark_system.start()
- else if(isfloorturf(target))
- var/turf/open/floor/F = target
- occupant_message("Building Wall...")
- if(do_after_cooldown(F))
- F.PlaceOnTop(/turf/closed/wall)
- playsound(F, 'sound/items/deconstruct.ogg', 50, 1)
- chassis.spark_system.start()
- if(2)
- if(isfloorturf(target))
- occupant_message("Building Airlock...")
- if(do_after_cooldown(target))
- chassis.spark_system.start()
- var/obj/machinery/door/airlock/T = new /obj/machinery/door/airlock(target)
- T.autoclose = TRUE
- playsound(target, 'sound/items/deconstruct.ogg', 50, 1)
- playsound(target, 'sound/effects/sparks2.ogg', 50, 1)
-
-
-
-/obj/item/mecha_parts/mecha_equipment/rcd/do_after_cooldown(var/atom/target)
- . = ..()
-
-/obj/item/mecha_parts/mecha_equipment/rcd/Topic(href,href_list)
- ..()
- if(href_list["mode"])
- mode = text2num(href_list["mode"])
- switch(mode)
- if(0)
- occupant_message("Switched RCD to Deconstruct.")
- energy_drain = initial(energy_drain)
- if(1)
- occupant_message("Switched RCD to Construct.")
- energy_drain = 2*initial(energy_drain)
- if(2)
- occupant_message("Switched RCD to Construct Airlock.")
- energy_drain = 2*initial(energy_drain)
- return
-
-/obj/item/mecha_parts/mecha_equipment/rcd/get_equip_info()
- return "[..()] \[D|C|A\]"
-
-
-
-
-/obj/item/mecha_parts/mecha_equipment/cable_layer
- name = "cable layer"
- desc = "Equipment for engineering exosuits. Lays cable along the exosuit's path."
- icon_state = "mecha_wire"
- var/datum/callback/event
- var/turf/old_turf
- var/obj/structure/cable/last_piece
- var/obj/item/stack/cable_coil/cable
- var/max_cable = 1000
-
-/obj/item/mecha_parts/mecha_equipment/cable_layer/Initialize()
- . = ..()
- cable = new(src, 0)
-
-/obj/item/mecha_parts/mecha_equipment/cable_layer/can_attach(obj/mecha/working/M)
- if(..())
- if(istype(M))
- return 1
- return 0
-
-/obj/item/mecha_parts/mecha_equipment/cable_layer/attach()
- ..()
- event = chassis.events.addEvent("onMove", CALLBACK(src, .proc/layCable))
- return
-
-/obj/item/mecha_parts/mecha_equipment/cable_layer/detach()
- chassis.events.clearEvent("onMove",event)
- return ..()
-
-/obj/item/mecha_parts/mecha_equipment/cable_layer/Destroy()
- if(chassis)
- chassis.events.clearEvent("onMove",event)
- return ..()
-
-/obj/item/mecha_parts/mecha_equipment/cable_layer/action(var/obj/item/stack/cable_coil/target)
- if(!action_checks(target))
- return
- if(istype(target) && target.amount)
- var/cur_amount = cable? cable.amount : 0
- var/to_load = max(max_cable - cur_amount,0)
- if(to_load)
- to_load = min(target.amount, to_load)
- if(!cable)
- cable = new(src, 0)
- cable.amount += to_load
- target.use(to_load)
- occupant_message("[to_load] meters of cable successfully loaded.")
- send_byjax(chassis.occupant,"exosuit.browser","[REF(src)]",src.get_equip_info())
- else
- occupant_message("Reel is full.")
- else
- occupant_message("Unable to load [target] - no cable found.")
-
-
-/obj/item/mecha_parts/mecha_equipment/cable_layer/Topic(href,href_list)
- ..()
- if(href_list["toggle"])
- set_ready_state(!equip_ready)
- occupant_message("[src] [equip_ready?"dea":"a"]ctivated.")
- mecha_log_message("[equip_ready?"Dea":"A"]ctivated.")
- return
- if(href_list["cut"])
- if(cable && cable.amount)
- var/m = round(input(chassis.occupant,"Please specify the length of cable to cut","Cut cable",min(cable.amount,30)) as num, 1)
- m = min(m, cable.amount)
- if(m)
- use_cable(m)
- new /obj/item/stack/cable_coil(get_turf(chassis), m)
- else
- occupant_message("There's no more cable on the reel.")
- return
-
-/obj/item/mecha_parts/mecha_equipment/cable_layer/get_equip_info()
- var/output = ..()
- if(output)
- return "[output] \[Cable: [cable ? cable.amount : 0] m\][(cable && cable.amount) ? "- [!equip_ready?"Dea":"A"]ctivate|Cut" : null]"
- return
-
-/obj/item/mecha_parts/mecha_equipment/cable_layer/proc/use_cable(amount)
- if(!cable || cable.amount<1)
- set_ready_state(1)
- occupant_message("Cable depleted, [src] deactivated.")
- mecha_log_message("Cable depleted, [src] deactivated.")
- return
- if(cable.amount < amount)
- occupant_message("No enough cable to finish the task.")
- return
- cable.use(amount)
- update_equip_info()
- return 1
-
-/obj/item/mecha_parts/mecha_equipment/cable_layer/proc/reset()
- last_piece = null
-
-/obj/item/mecha_parts/mecha_equipment/cable_layer/proc/dismantleFloor(var/turf/new_turf)
- if(isfloorturf(new_turf))
- var/turf/open/floor/T = new_turf
- if(!isplatingturf(T))
- if(!T.broken && !T.burnt)
- new T.floor_tile(T)
- T.make_plating()
- return !new_turf.intact
-
-/obj/item/mecha_parts/mecha_equipment/cable_layer/proc/layCable(var/turf/new_turf)
- if(equip_ready || !istype(new_turf) || !dismantleFloor(new_turf))
- return reset()
- var/fdirn = turn(chassis.dir,180)
- for(var/obj/structure/cable/LC in new_turf) // check to make sure there's not a cable there already
- if(LC.d1 == fdirn || LC.d2 == fdirn)
- return reset()
- if(!use_cable(1))
- return reset()
- var/obj/structure/cable/NC = new(new_turf, "red")
- NC.d1 = 0
- NC.d2 = fdirn
- NC.update_icon()
-
- var/datum/powernet/PN
- if(last_piece && last_piece.d2 != chassis.dir)
- last_piece.d1 = min(last_piece.d2, chassis.dir)
- last_piece.d2 = max(last_piece.d2, chassis.dir)
- last_piece.update_icon()
- PN = last_piece.powernet
-
- if(!PN)
- PN = new()
- GLOB.powernets += PN
- NC.powernet = PN
- PN.cables += NC
- NC.mergeConnectedNetworks(NC.d2)
-
- //NC.mergeConnectedNetworksOnTurf()
- last_piece = NC
- return 1
diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm
deleted file mode 100644
index 86bbf81dd2..0000000000
--- a/code/game/mecha/mecha.dm
+++ /dev/null
@@ -1,1124 +0,0 @@
-#define MECHA_INT_FIRE (1<<0)
-#define MECHA_INT_TEMP_CONTROL (1<<1)
-#define MECHA_INT_SHORT_CIRCUIT (1<<2)
-#define MECHA_INT_TANK_BREACH (1<<3)
-#define MECHA_INT_CONTROL_LOST (1<<4)
-
-#define MELEE 1
-#define RANGED 2
-
-#define FRONT_ARMOUR 1
-#define SIDE_ARMOUR 2
-#define BACK_ARMOUR 3
-
-
-/obj/mecha
- name = "mecha"
- desc = "Exosuit"
- icon = 'icons/mecha/mecha.dmi'
- density = TRUE //Dense. To raise the heat.
- opacity = 1 ///opaque. Menacing.
- anchored = TRUE //no pulling around.
- resistance_flags = FIRE_PROOF | ACID_PROOF
- layer = BELOW_MOB_LAYER//icon draw layer
- infra_luminosity = 15 //byond implementation is bugged.
- force = 5
- flags_1 = HEAR_1|BLOCK_FACE_ATOM_1
- attack_hand_speed = CLICK_CD_MELEE
- attack_hand_is_action = TRUE
- var/can_move = 0 //time of next allowed movement
- var/mob/living/occupant = null
- var/step_in = 10 //make a step in step_in/10 sec.
- var/dir_in = SOUTH //What direction will the mech face when entered/powered on? Defaults to South.
- var/normal_step_energy_drain = 10 //How much energy the mech will consume each time it moves. This variable is a backup for when leg actuators affect the energy drain.
- var/step_energy_drain = 10
- var/melee_energy_drain = 15
- var/overload_step_energy_drain_min = 100
- max_integrity = 300 //max_integrity is base health
- var/deflect_chance = 10 //chance to deflect the incoming projectiles, hits, or lesser the effect of ex_act.
- armor = list("melee" = 20, "bullet" = 10, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
- var/list/facing_modifiers = list(FRONT_ARMOUR = 1.5, SIDE_ARMOUR = 1, BACK_ARMOUR = 0.5)
- var/obj/item/stock_parts/cell/cell
- var/state = 0
- var/list/log = new
- var/last_message = 0
- var/add_req_access = 1
- var/maint_access = 0
- var/equipment_disabled = 0 //disabled due to EMP
- var/dna_lock //dna-locking the mech
- var/list/proc_res = list() //stores proc owners, like proc_res["functionname"] = owner reference
- var/datum/effect_system/spark_spread/spark_system = new
- var/lights = FALSE
- var/lights_power = 6
- var/last_user_hud = 1 // used to show/hide the mecha hud while preserving previous preference
- var/completely_disabled = FALSE //stops the mech from doing anything
- var/breach_time = 0
- var/recharge_rate = 0
-
- var/bumpsmash = 0 //Whether or not the mech destroys walls by running into it.
- //inner atmos
- var/use_internal_tank = 0
- var/internal_tank_valve = ONE_ATMOSPHERE
- var/obj/machinery/portable_atmospherics/canister/internal_tank
- var/datum/gas_mixture/cabin_air
- var/obj/machinery/atmospherics/components/unary/portables_connector/connected_port = null
-
- var/obj/item/radio/mech/radio
- var/list/trackers = list()
-
- var/max_temperature = 25000
- var/internal_damage_threshold = 50 //health percentage below which internal damage is possible
- var/internal_damage = 0 //contains bitflags
-
- var/list/operation_req_access = list()//required access level for mecha operation
- var/list/internals_req_access = list(ACCESS_ROBOTICS)//REQUIRED ACCESS LEVEL TO OPEN CELL COMPARTMENT
-
- var/wreckage
-
- var/list/equipment = new
- var/obj/item/mecha_parts/mecha_equipment/selected
- var/max_equip = 3
- var/datum/events/events
-
- var/stepsound = 'sound/mecha/mechstep.ogg'
- var/turnsound = 'sound/mecha/mechturn.ogg'
-
- var/melee_cooldown = 10
- var/melee_can_hit = 1
-
- //Action datums
- var/datum/action/innate/mecha/mech_eject/eject_action = new
- var/datum/action/innate/mecha/mech_toggle_internals/internals_action = new
- var/datum/action/innate/mecha/mech_cycle_equip/cycle_action = new
- var/datum/action/innate/mecha/mech_toggle_lights/lights_action = new
- var/datum/action/innate/mecha/mech_view_stats/stats_action = new
- var/datum/action/innate/mecha/mech_toggle_thrusters/thrusters_action = new
- var/datum/action/innate/mecha/mech_defence_mode/defense_action = new
- var/datum/action/innate/mecha/mech_overload_mode/overload_action = new
- var/datum/effect_system/smoke_spread/smoke_system = new //not an action, but trigged by one
- var/datum/action/innate/mecha/mech_smoke/smoke_action = new
- var/datum/action/innate/mecha/mech_zoom/zoom_action = new
- var/datum/action/innate/mecha/mech_switch_damtype/switch_damtype_action = new
- var/datum/action/innate/mecha/mech_toggle_phasing/phasing_action = new
- var/datum/action/innate/mecha/strafe/strafing_action = new
-
- //Action vars
- var/thrusters_active = FALSE
- var/defence_mode = FALSE
- var/defence_mode_deflect_chance = 35
- var/leg_overload_mode = FALSE
- var/leg_overload_coeff = 100
- var/zoom_mode = FALSE
- var/smoke = 5
- var/smoke_ready = 1
- var/smoke_cooldown = 100
- var/phasing = FALSE
- var/phasing_energy_drain = 200
- var/phase_state = "" //icon_state when phasing
- var/strafe = FALSE //If we are strafing
-
- var/nextsmash = 0
- var/smashcooldown = 3 //deciseconds
-
- var/occupant_sight_flags = 0 //sight flags to give to the occupant (e.g. mech mining scanner gives meson-like vision)
- var/mouse_pointer
-
- hud_possible = list (DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_MECH_HUD, DIAG_TRACK_HUD)
-
-/obj/item/radio/mech //this has to go somewhere
-
-/obj/mecha/Initialize()
- . = ..()
- events = new
- icon_state += "-open"
- add_radio()
- spark_system.set_up(2, 0, src)
- spark_system.attach(src)
- smoke_system.set_up(3, src)
- smoke_system.attach(src)
- add_cell()
- START_PROCESSING(SSobj, src)
- GLOB.poi_list |= src
- mecha_log_message("[src.name] created.")
- GLOB.mechas_list += src //global mech list
- prepare_huds()
- for(var/datum/atom_hud/data/diagnostic/diag_hud in GLOB.huds)
- diag_hud.add_to_hud(src)
- diag_hud_set_mechhealth()
- diag_hud_set_mechcell()
- diag_hud_set_mechstat()
- return INITIALIZE_HINT_LATELOAD
-
-/obj/mecha/LateInitialize()
- . = ..()
- add_airtank()
- add_cabin()
-
-/obj/mecha/get_cell()
- return cell
-
-/obj/mecha/rust_heretic_act()
- take_damage(500, BRUTE)
-
-/obj/mecha/Destroy()
- go_out()
- var/mob/living/silicon/ai/AI
- for(var/mob/M in src) //Let's just be ultra sure
- if(isAI(M))
- occupant = null
- AI = M //AIs are loaded into the mech computer itself. When the mech dies, so does the AI. They can be recovered with an AI card from the wreck.
- else
- M.forceMove(loc)
- if(wreckage)
- if(prob(30))
- explosion(get_turf(src), 0, 0, 1, 3)
- var/obj/structure/mecha_wreckage/WR = new wreckage(loc, AI)
- for(var/obj/item/mecha_parts/mecha_equipment/E in equipment)
- if(E.salvageable && prob(30))
- WR.crowbar_salvage += E
- E.detach(WR) //detaches from src into WR
- E.equip_ready = 1
- else
- E.detach(loc)
- qdel(E)
- if(cell)
- WR.crowbar_salvage += cell
- cell.forceMove(WR)
- cell.charge = rand(0, cell.charge)
- if(internal_tank)
- WR.crowbar_salvage += internal_tank
- internal_tank.forceMove(WR)
- else
- for(var/obj/item/mecha_parts/mecha_equipment/E in equipment)
- E.detach(loc)
- qdel(E)
- if(cell)
- qdel(cell)
- if(internal_tank)
- qdel(internal_tank)
- if(AI)
- AI.gib() //No wreck, no AI to recover
- STOP_PROCESSING(SSobj, src)
- GLOB.poi_list.Remove(src)
- equipment.Cut()
- cell = null
- internal_tank = null
- assume_air(cabin_air)
- cabin_air = null
- qdel(spark_system)
- spark_system = null
- qdel(smoke_system)
- smoke_system = null
-
- GLOB.mechas_list -= src //global mech list
- return ..()
-
-/obj/mecha/proc/restore_equipment()
- equipment_disabled = 0
- if(istype(src, /obj/mecha/combat))
- mouse_pointer = 'icons/mecha/mecha_mouse.dmi'
- if(occupant)
- SEND_SOUND(occupant, sound('sound/items/timer.ogg', volume=50))
- to_chat(occupant, "Equipment control unit has been rebooted successfuly.")
- occupant.update_mouse_pointer()
-
-/obj/mecha/CheckParts(list/parts_list)
- ..()
- cell = locate(/obj/item/stock_parts/cell) in contents
- var/obj/item/stock_parts/scanning_module/SM = locate() in contents
- var/obj/item/stock_parts/capacitor/CP = locate() in contents
- if(SM)
- normal_step_energy_drain = 20 - (5 * SM.rating) //10 is normal, so on lowest part its worse, on second its ok and on higher its real good up to 0 on best
- step_energy_drain = normal_step_energy_drain
- qdel(SM)
- if(CP)
- armor = armor.modifyRating(energy = (CP.rating * 10)) //Each level of capacitor protects the mech against emp by 10%
- qdel(CP)
-
-////////////////////////
-////// Helpers /////////
-////////////////////////
-
-/obj/mecha/proc/add_airtank()
- internal_tank = new /obj/machinery/portable_atmospherics/canister/air(src)
- return internal_tank
-
-/obj/mecha/proc/add_cell(var/obj/item/stock_parts/cell/C=null)
- if(C)
- C.forceMove(src)
- cell = C
- return
- cell = new /obj/item/stock_parts/cell/high/plus(src)
-
-/obj/mecha/proc/add_cabin()
- cabin_air = new(200)
- cabin_air.set_temperature(T20C)
- cabin_air.set_moles(GAS_O2,O2STANDARD*cabin_air.return_volume()/(R_IDEAL_GAS_EQUATION*cabin_air.return_temperature()))
- cabin_air.set_moles(GAS_N2,N2STANDARD*cabin_air.return_volume()/(R_IDEAL_GAS_EQUATION*cabin_air.return_temperature()))
- return cabin_air
-
-/obj/mecha/proc/add_radio()
- radio = new(src)
- radio.name = "[src] radio"
- radio.icon = icon
- radio.icon_state = icon_state
- radio.subspace_transmission = TRUE
-
-/obj/mecha/proc/can_use(mob/user)
- if(user != occupant)
- return 0
- if(user && ismob(user))
- if(!user.incapacitated())
- return 1
- return 0
-
-////////////////////////////////////////////////////////////////////////////////
-
-/obj/mecha/examine(mob/user)
- . = ..()
- var/integrity = obj_integrity*100/max_integrity
- switch(integrity)
- if(85 to 100)
- . += "It's fully intact."
- if(65 to 85)
- . += "It's slightly damaged."
- if(45 to 65)
- . += "It's badly damaged."
- if(25 to 45)
- . += "It's heavily damaged."
- else
- . += "It's falling apart."
- if(equipment && equipment.len)
- . += "It's equipped with:"
- for(var/obj/item/mecha_parts/mecha_equipment/ME in equipment)
- . += "[icon2html(ME, user)] \A [ME]."
-
-//processing internal damage, temperature, air regulation, alert updates, lights power use.
-/obj/mecha/process()
- var/internal_temp_regulation = 1
-
- if(internal_damage)
- if(internal_damage & MECHA_INT_FIRE)
- if(!(internal_damage & MECHA_INT_TEMP_CONTROL) && prob(5))
- clearInternalDamage(MECHA_INT_FIRE)
- if(internal_tank)
- var/datum/gas_mixture/int_tank_air = internal_tank.return_air()
- if(int_tank_air.return_pressure() > internal_tank.maximum_pressure && !(internal_damage & MECHA_INT_TANK_BREACH))
- setInternalDamage(MECHA_INT_TANK_BREACH)
- if(int_tank_air && int_tank_air.return_volume() > 0) //heat the air_contents
- int_tank_air.set_temperature(min(6000+T0C, int_tank_air.return_temperature()+rand(10,15)))
- if(cabin_air && cabin_air.return_volume()>0)
- cabin_air.set_temperature(min(6000+T0C, cabin_air.return_temperature()+rand(10,15)))
- if(cabin_air.return_temperature() > max_temperature/2)
- take_damage(4/round(max_temperature/cabin_air.return_temperature(),0.1), BURN, 0, 0)
-
- if(internal_damage & MECHA_INT_TEMP_CONTROL)
- internal_temp_regulation = 0
-
- if(internal_damage & MECHA_INT_TANK_BREACH) //remove some air from internal tank
- if(internal_tank)
- assume_air_ratio(internal_tank.return_air(), 0.1)
-
- if(internal_damage & MECHA_INT_SHORT_CIRCUIT)
- if(get_charge())
- spark_system.start()
- cell.charge -= min(20,cell.charge)
- cell.maxcharge -= min(20,cell.maxcharge)
-
- if(internal_temp_regulation)
- if(cabin_air && cabin_air.return_volume() > 0)
- var/delta = cabin_air.return_temperature() - T20C
- cabin_air.set_temperature(cabin_air.return_temperature() - max(-10, min(10, round(delta/4,0.1))))
-
- if(internal_tank)
- var/datum/gas_mixture/tank_air = internal_tank.return_air()
-
- var/release_pressure = internal_tank_valve
- var/cabin_pressure = cabin_air.return_pressure()
- var/pressure_delta = min(release_pressure - cabin_pressure, (tank_air.return_pressure() - cabin_pressure)/2)
- var/transfer_moles = 0
- if(pressure_delta > 0) //cabin pressure lower than release pressure
- if(tank_air.return_temperature() > 0)
- transfer_moles = pressure_delta*cabin_air.return_volume()/(cabin_air.return_temperature() * R_IDEAL_GAS_EQUATION)
- tank_air.transfer_to(cabin_air,transfer_moles)
- else if(pressure_delta < 0) //cabin pressure higher than release pressure
- var/datum/gas_mixture/t_air = return_air()
- pressure_delta = cabin_pressure - release_pressure
- if(t_air)
- pressure_delta = min(cabin_pressure - t_air.return_pressure(), pressure_delta)
- if(pressure_delta > 0) //if location pressure is lower than cabin pressure
- transfer_moles = pressure_delta*cabin_air.return_volume()/(cabin_air.return_temperature() * R_IDEAL_GAS_EQUATION)
- cabin_air.transfer_to(t_air, transfer_moles)
-
- if(occupant)
- if(cell)
- var/cellcharge = cell.charge/cell.maxcharge
- switch(cellcharge)
- if(0.75 to INFINITY)
- occupant.clear_alert("charge")
- if(0.5 to 0.75)
- occupant.throw_alert("charge", /atom/movable/screen/alert/lowcell, 1)
- if(0.25 to 0.5)
- occupant.throw_alert("charge", /atom/movable/screen/alert/lowcell, 2)
- if(0.01 to 0.25)
- occupant.throw_alert("charge", /atom/movable/screen/alert/lowcell, 3)
- else
- occupant.throw_alert("charge", /atom/movable/screen/alert/emptycell)
-
- var/integrity = obj_integrity/max_integrity*100
- switch(integrity)
- if(30 to 45)
- occupant.throw_alert("mech damage", /atom/movable/screen/alert/low_mech_integrity, 1)
- if(15 to 35)
- occupant.throw_alert("mech damage", /atom/movable/screen/alert/low_mech_integrity, 2)
- if(-INFINITY to 15)
- occupant.throw_alert("mech damage", /atom/movable/screen/alert/low_mech_integrity, 3)
- else
- occupant.clear_alert("mech damage")
- var/atom/checking = occupant.loc
- // recursive check to handle all cases regarding very nested occupants,
- // such as brainmob inside brainitem inside MMI inside mecha
- while (!isnull(checking))
- if (isturf(checking))
- // hit a turf before hitting the mecha, seems like they have
- // been moved out
- occupant.clear_alert("charge")
- occupant.clear_alert("mech damage")
- RemoveActions(occupant, human_occupant=1)
- occupant = null
- break
- else if (checking == src)
- break // all good
- checking = checking.loc
-
- if(lights)
- var/lights_energy_drain = 2
- use_power(lights_energy_drain)
-
-//Diagnostic HUD updates
- diag_hud_set_mechhealth()
- diag_hud_set_mechcell()
- diag_hud_set_mechstat()
-
-/obj/mecha/proc/drop_item()//Derpfix, but may be useful in future for engineering exosuits.
- return
-
-/obj/mecha/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode, atom/movable/source)
- . = ..()
- if(speaker == occupant)
- if(radio.broadcasting)
- radio.talk_into(speaker, text, , spans, message_language)
- //flick speech bubble
- var/list/speech_bubble_recipients = list()
- for(var/mob/M in get_hearers_in_view(7,src))
- if(M.client)
- speech_bubble_recipients.Add(M.client)
- INVOKE_ASYNC(GLOBAL_PROC, /proc/flick_overlay, image('icons/mob/talk.dmi', src, "machine[say_test(raw_message)]",MOB_LAYER+1), speech_bubble_recipients, 30)
-
-////////////////////////////
-///// Action processing ////
-////////////////////////////
-
-
-/obj/mecha/proc/click_action(atom/target,mob/user,params)
- if(!occupant || occupant != user )
- return
- if(!locate(/turf) in list(target,target.loc)) // Prevents inventory from being drilled
- return
- if(completely_disabled)
- return
- if(phasing)
- occupant_message("Unable to interact with objects while phasing")
- return
- if(user.incapacitated())
- return
- if(state)
- occupant_message("Maintenance protocols in effect.")
- return
- if(!get_charge())
- return
- if(src == target)
- return
- var/dir_to_target = get_dir(src,target)
- if(dir_to_target && !(dir_to_target & dir))//wrong direction
- return
- if(internal_damage & MECHA_INT_CONTROL_LOST)
- target = safepick(view(3,target))
- if(!target)
- return
-
- var/mob/living/L = user
- if(!Adjacent(target))
- if(selected && selected.is_ranged())
- if(HAS_TRAIT(L, TRAIT_PACIFISM) && selected.harmful)
- to_chat(user, "You don't want to harm other living beings!")
- return
- if(selected.action(target,params))
- selected.start_cooldown()
- else if(selected && selected.is_melee())
- if(isliving(target) && selected.harmful && HAS_TRAIT(L, TRAIT_PACIFISM))
- to_chat(user, "You don't want to harm other living beings!")
- return
- if(selected.action(target,params))
- selected.start_cooldown()
- else
- if(internal_damage & MECHA_INT_CONTROL_LOST)
- target = safepick(oview(1,src))
- if(!melee_can_hit || !istype(target, /atom))
- return
- target.mech_melee_attack(src)
- melee_can_hit = 0
- spawn(melee_cooldown)
- melee_can_hit = 1
-
-
-/obj/mecha/proc/range_action(atom/target)
- return
-
-
-//////////////////////////////////
-//////// Movement procs ////////
-//////////////////////////////////
-
-/obj/mecha/Move(atom/newloc, direct)
- . = ..()
- if(.)
- events.fireEvent("onMove",get_turf(src))
- if (internal_tank.disconnect()) // Something moved us and broke connection
- occupant_message("Air port connection teared off!")
- mecha_log_message("Lost connection to gas port.")
-
-/obj/mecha/setDir(newdir)
- . = ..()
- occupant?.setDir(newdir)
-
-/obj/mecha/Process_Spacemove(var/movement_dir = 0)
- . = ..()
- if(.)
- return 1
- if(thrusters_active && movement_dir && use_power(step_energy_drain))
- return 1
-
- var/atom/movable/backup = get_spacemove_backup()
- if(backup)
- if(istype(backup) && movement_dir && !backup.anchored)
- if(backup.newtonian_move(turn(movement_dir, 180)))
- if(occupant)
- to_chat(occupant, "You push off of [backup] to propel yourself.")
- return 1
-
-/obj/mecha/relaymove(mob/user,direction)
- if(completely_disabled)
- return
- if(!direction)
- return
- if(user != occupant) //While not "realistic", this piece is player friendly.
- user.forceMove(get_turf(src))
- to_chat(user, "You climb out from [src].")
- return 0
- if(internal_tank.connected_port)
- if(world.time - last_message > 20)
- occupant_message("Unable to move while connected to the air system port!")
- last_message = world.time
- return 0
- if(state)
- occupant_message("Maintenance protocols in effect.")
- return
- return domove(direction)
-
-/obj/mecha/proc/domove(direction)
- if(can_move >= world.time)
- return 0
- if(!Process_Spacemove(direction))
- return 0
- if(!has_charge(step_energy_drain))
- return 0
- if(defence_mode)
- if(world.time - last_message > 20)
- occupant_message("Unable to move while in defence mode")
- last_message = world.time
- return 0
- if(zoom_mode)
- if(world.time - last_message > 20)
- occupant_message("Unable to move while in zoom mode.")
- last_message = world.time
- return 0
-
- var/move_result = 0
- var/oldloc = loc
- if(internal_damage & MECHA_INT_CONTROL_LOST)
- move_result = mechsteprand()
- else if(dir != direction && (!strafe || occupant.client.keys_held["Alt"]))
- move_result = mechturn(direction)
- else
- move_result = mechstep(direction)
- if(move_result || loc != oldloc)// halfway done diagonal move still returns false
- use_power(step_energy_drain)
- can_move = world.time + step_in
- return 1
- return 0
-
-/obj/mecha/proc/mechturn(direction)
- setDir(direction)
- if(turnsound)
- playsound(src,turnsound,40,1)
- return 1
-
-/obj/mecha/proc/mechstep(direction)
- var/current_dir = dir
- set_glide_size(DELAY_TO_GLIDE_SIZE(step_in))
- var/result = step(src,direction)
- if(strafe)
- setDir(current_dir)
- if(result && stepsound)
- playsound(src,stepsound,40,1)
- return result
-
-/obj/mecha/proc/mechsteprand()
- var/result = step_rand(src)
- if(result && stepsound)
- playsound(src,stepsound,40,1)
- return result
-
-/obj/mecha/Bump(var/atom/obstacle)
- if(phasing && get_charge() >= phasing_energy_drain && !throwing)
- spawn()
- if(can_move)
- can_move = 0
- if(phase_state)
- flick(phase_state, src)
- forceMove(get_step(src,dir))
- use_power(phasing_energy_drain)
- sleep(step_in*3)
- can_move = 1
- else
- if(..()) //mech was thrown
- return
- if(bumpsmash && occupant) //Need a pilot to push the PUNCH button.
- if(nextsmash < world.time)
- obstacle.mech_melee_attack(src)
- nextsmash = world.time + smashcooldown
- if(!obstacle || obstacle.CanPass(src,get_step(src,dir)))
- step(src,dir)
- if(isobj(obstacle))
- var/obj/O = obstacle
- if(!O.anchored)
- step(obstacle, dir)
- else if(ismob(obstacle))
- var/mob/M = obstacle
- if(!M.anchored)
- step(obstacle, dir)
-
-
-
-
-
-///////////////////////////////////
-//////// Internal damage ////////
-///////////////////////////////////
-
-/obj/mecha/proc/check_for_internal_damage(list/possible_int_damage,ignore_threshold=null)
- if(!islist(possible_int_damage) || isemptylist(possible_int_damage))
- return
- if(prob(20))
- if(ignore_threshold || obj_integrity*100/max_integrity < internal_damage_threshold)
- for(var/T in possible_int_damage)
- if(internal_damage & T)
- possible_int_damage -= T
- var/int_dam_flag = safepick(possible_int_damage)
- if(int_dam_flag)
- setInternalDamage(int_dam_flag)
- if(prob(5))
- if(ignore_threshold || obj_integrity*100/max_integrity < internal_damage_threshold)
- var/obj/item/mecha_parts/mecha_equipment/ME = safepick(equipment)
- if(ME)
- qdel(ME)
- return
-
-/obj/mecha/proc/setInternalDamage(int_dam_flag)
- internal_damage |= int_dam_flag
- log_append_to_last("Internal damage of type [int_dam_flag].",1)
- SEND_SOUND(occupant, sound('sound/machines/warning-buzzer.ogg',wait=0))
- diag_hud_set_mechstat()
- return
-
-/obj/mecha/proc/clearInternalDamage(int_dam_flag)
- if(internal_damage & int_dam_flag)
- switch(int_dam_flag)
- if(MECHA_INT_TEMP_CONTROL)
- occupant_message("Life support system reactivated.")
- if(MECHA_INT_FIRE)
- occupant_message("Internal fire extinquished.")
- if(MECHA_INT_TANK_BREACH)
- occupant_message("Damaged internal tank has been sealed.")
- internal_damage &= ~int_dam_flag
- diag_hud_set_mechstat()
-
-/////////////////////////////////////
-//////////// AI piloting ////////////
-/////////////////////////////////////
-
-/obj/mecha/attack_ai(mob/living/silicon/ai/user)
- if(!isAI(user))
- return
- //Allows the Malf to scan a mech's status and loadout, helping it to decide if it is a worthy chariot.
- if(user.can_dominate_mechs)
- examine(user) //Get diagnostic information!
- for(var/obj/item/mecha_parts/mecha_tracking/B in trackers)
- to_chat(user, "Warning: Tracking Beacon detected. Enter at your own risk. Beacon Data:")
- to_chat(user, "[B.get_mecha_info()]")
- break
- //Nothing like a big, red link to make the player feel powerful!
- to_chat(user, "ASSUME DIRECT CONTROL?
")
- else
- examine(user)
- if(occupant)
- to_chat(user, "This exosuit has a pilot and cannot be controlled.")
- return
- var/can_control_mech = 0
- for(var/obj/item/mecha_parts/mecha_tracking/ai_control/A in trackers)
- can_control_mech = 1
- to_chat(user, "[icon2html(src, user)] Status of [name]:\n[A.get_mecha_info()]")
- break
- if(!can_control_mech)
- to_chat(user, "You cannot control exosuits without AI control beacons installed.")
- return
- to_chat(user, "Take control of exosuit?
")
-
-/obj/mecha/transfer_ai(interaction, mob/user, mob/living/silicon/ai/AI, obj/item/aicard/card)
- if(!..())
- return
-
- //Transfer from core or card to mech. Proc is called by mech.
- switch(interaction)
- if(AI_TRANS_TO_CARD) //Upload AI from mech to AI card.
- if(!state) //Mech must be in maint mode to allow carding.
- to_chat(user, "[name] must have maintenance protocols active in order to allow a transfer.")
- return
- AI = occupant
- if(!AI || !isAI(occupant)) //Mech does not have an AI for a pilot
- to_chat(user, "No AI detected in the [name] onboard computer.")
- return
- AI.ai_restore_power()//So the AI initially has power.
- AI.control_disabled = 1
- AI.radio_enabled = 0
- AI.disconnect_shell()
- RemoveActions(AI, TRUE)
- occupant = null
- AI.forceMove(card)
- card.AI = AI
- AI.controlled_mech = null
- AI.remote_control = null
- icon_state = initial(icon_state)+"-open"
- to_chat(AI, "You have been downloaded to a mobile storage device. Wireless connection offline.")
- to_chat(user, "Transfer successful: [AI.name] ([rand(1000,9999)].exe) removed from [name] and stored within local memory.")
-
- if(AI_MECH_HACK) //Called by AIs on the mech
- AI.linked_core = new /obj/structure/AIcore/deactivated(AI.loc)
- if(AI.can_dominate_mechs)
- if(occupant) //Oh, I am sorry, were you using that?
- to_chat(AI, "Pilot detected! Forced ejection initiated!")
- to_chat(occupant, "You have been forcibly ejected!")
- go_out(1) //IT IS MINE, NOW. SUCK IT, RD!
- ai_enter_mech(AI, interaction)
-
- if(AI_TRANS_FROM_CARD) //Using an AI card to upload to a mech.
- AI = card.AI
- if(!AI)
- to_chat(user, "There is no AI currently installed on this device.")
- return
- if(AI.deployed_shell) //Recall AI if shelled so it can be checked for a client
- AI.disconnect_shell()
- if(AI.stat || !AI.client)
- to_chat(user, "[AI.name] is currently unresponsive, and cannot be uploaded.")
- return
- if(occupant || dna_lock) //Normal AIs cannot steal mechs!
- to_chat(user, "Access denied. [name] is [occupant ? "currently occupied" : "secured with a DNA lock"].")
- return
- AI.control_disabled = 0
- AI.radio_enabled = 1
- to_chat(user, "Transfer successful: [AI.name] ([rand(1000,9999)].exe) installed and executed successfully. Local copy has been removed.")
- card.AI = null
- ai_enter_mech(AI, interaction)
-
-//Hack and From Card interactions share some code, so leave that here for both to use.
-/obj/mecha/proc/ai_enter_mech(mob/living/silicon/ai/AI, interaction)
- AI.ai_restore_power()
- AI.forceMove(src)
- occupant = AI
- icon_state = initial(icon_state)
- playsound(src, 'sound/machines/windowdoor.ogg', 50, 1)
- if(!internal_damage)
- SEND_SOUND(occupant, sound('sound/mecha/nominal.ogg',volume=50))
- AI.cancel_camera()
- AI.controlled_mech = src
- AI.remote_control = src
- AI.mobility_flags = MOBILITY_FLAGS_DEFAULT //Much easier than adding AI checks! Be sure to set this back to 0 if you decide to allow an AI to leave a mech somehow.
- AI.can_shunt = 0 //ONE AI ENTERS. NO AI LEAVES.
- to_chat(AI, AI.can_dominate_mechs ? "Takeover of [name] complete! You are now loaded onto the onboard computer. Do not attempt to leave the station sector!" :\
- "You have been uploaded to a mech's onboard computer.")
- to_chat(AI, "Use Middle-Mouse to activate mech functions and equipment. Click normally for AI interactions.")
- if(interaction == AI_TRANS_FROM_CARD)
- GrantActions(AI, FALSE) //No eject/return to core action for AI uploaded by card
- else
- GrantActions(AI, !AI.can_dominate_mechs)
-
-
-//An actual AI (simple_animal mecha pilot) entering the mech
-/obj/mecha/proc/aimob_enter_mech(mob/living/simple_animal/hostile/syndicate/mecha_pilot/pilot_mob)
- if(pilot_mob && pilot_mob.Adjacent(src))
- if(occupant)
- return
- icon_state = initial(icon_state)
- occupant = pilot_mob
- pilot_mob.mecha = src
- pilot_mob.forceMove(src)
- GrantActions(pilot_mob)//needed for checks, and incase a badmin puts somebody in the mob
-
-/obj/mecha/proc/aimob_exit_mech(mob/living/simple_animal/hostile/syndicate/mecha_pilot/pilot_mob)
- if(occupant == pilot_mob)
- occupant = null
- if(pilot_mob.mecha == src)
- pilot_mob.mecha = null
- icon_state = "[initial(icon_state)]-open"
- pilot_mob.forceMove(get_turf(src))
- RemoveActions(pilot_mob)
-
-
-/////////////////////////////////////
-//////// Atmospheric stuff ////////
-/////////////////////////////////////
-
-/obj/mecha/remove_air(amount)
- if(use_internal_tank)
- return cabin_air.remove(amount)
- return ..()
-
-/obj/mecha/remove_air_ratio(ratio)
- if(use_internal_tank)
- return cabin_air.remove_ratio(ratio)
- return ..()
-
-/obj/mecha/return_air()
- if(use_internal_tank)
- return cabin_air
- return ..()
-
-/obj/mecha/proc/return_pressure()
- var/datum/gas_mixture/t_air = return_air()
- if(t_air)
- . = t_air.return_pressure()
- return
-
-/obj/mecha/return_temperature()
- var/datum/gas_mixture/t_air = return_air()
- if(t_air)
- . = t_air.return_temperature()
- return
-
-/obj/mecha/portableConnectorReturnAir()
- return internal_tank.return_air()
-
-
-/obj/mecha/MouseDrop_T(mob/M, mob/user)
- if (!user.canUseTopic(src) || (user != M))
- return
- if(!ishuman(user)) // no silicons or drones in mechas.
- return
- mecha_log_message("[user] tries to move in.")
- if (occupant)
- to_chat(usr, "The [name] is already occupied!")
- log_append_to_last("Permission denied.")
- return
- if(dna_lock)
- var/passed = FALSE
- if(user.has_dna())
- var/mob/living/carbon/C = user
- if(C.dna.unique_enzymes==dna_lock)
- passed = TRUE
- if (!passed)
- to_chat(user, "Access denied. [name] is secured with a DNA lock.")
- log_append_to_last("Permission denied.")
- return
- if(!operation_allowed(user))
- to_chat(user, "Access denied. Insufficient operation keycodes.")
- log_append_to_last("Permission denied.")
- return
- if(user.buckled)
- to_chat(user, "You are currently buckled and cannot move.")
- log_append_to_last("Permission denied.")
- return
- if(user.has_buckled_mobs()) //mob attached to us
- to_chat(user, "You can't enter the exosuit with other creatures attached to you!")
- return
-
- visible_message("[user] starts to climb into [name].")
-
- if(do_after(user, 40, target = src))
- if(obj_integrity <= 0)
- to_chat(user, "You cannot get in the [name], it has been destroyed!")
- else if(occupant)
- to_chat(user, "[occupant] was faster! Try better next time, loser.")
- else if(user.buckled)
- to_chat(user, "You can't enter the exosuit while buckled.")
- else if(user.has_buckled_mobs())
- to_chat(user, "You can't enter the exosuit with other creatures attached to you!")
- else
- moved_inside(user)
- else
- to_chat(user, "You stop entering the exosuit!")
- return
-
-/obj/mecha/proc/moved_inside(mob/living/carbon/human/H)
- if(H?.client && (H in range(1)))
- occupant = H
- H.forceMove(src)
- H.update_mouse_pointer()
- add_fingerprint(H)
- GrantActions(H, human_occupant=1)
- forceMove(loc)
- log_append_to_last("[H] moved in as pilot.")
- icon_state = initial(icon_state)
- setDir(dir_in)
- playsound(src, 'sound/machines/windowdoor.ogg', 50, 1)
- if(!internal_damage)
- SEND_SOUND(occupant, sound('sound/mecha/nominal.ogg',volume=50))
- return 1
- else
- return 0
-
-/obj/mecha/proc/mmi_move_inside(obj/item/mmi/mmi_as_oc, mob/user)
- if(!mmi_as_oc.brainmob || !mmi_as_oc.brainmob.client)
- to_chat(user, "Consciousness matrix not detected!")
- return FALSE
- else if(mmi_as_oc.brainmob.stat)
- to_chat(user, "Beta-rhythm below acceptable level!")
- return FALSE
- else if(occupant)
- to_chat(user, "Occupant detected!")
- return FALSE
- else if(dna_lock && (!mmi_as_oc.brainmob.stored_dna || (dna_lock != mmi_as_oc.brainmob.stored_dna.unique_enzymes)))
- to_chat(user, "Access denied. [name] is secured with a DNA lock.")
- return FALSE
-
- visible_message("[user] starts to insert an MMI into [name].")
-
- if(do_after(user, 40, target = src))
- if(!occupant)
- return mmi_moved_inside(mmi_as_oc, user)
- else
- to_chat(user, "Occupant detected!")
- else
- to_chat(user, "You stop inserting the MMI.")
- return FALSE
-
-/obj/mecha/proc/mmi_moved_inside(obj/item/mmi/mmi_as_oc, mob/user)
- if(!(Adjacent(mmi_as_oc) && Adjacent(user)))
- return FALSE
- if(!mmi_as_oc.brainmob || !mmi_as_oc.brainmob.client)
- to_chat(user, "Consciousness matrix not detected!")
- return FALSE
- else if(mmi_as_oc.brainmob.stat)
- to_chat(user, "Beta-rhythm below acceptable level!")
- return FALSE
- if(!user.transferItemToLoc(mmi_as_oc, src))
- to_chat(user, "\the [mmi_as_oc] is stuck to your hand, you cannot put it in \the [src]!")
- return FALSE
- var/mob/living/brainmob = mmi_as_oc.brainmob
- mmi_as_oc.mecha = src
- occupant = brainmob
- brainmob.forceMove(src) //should allow relaymove
- brainmob.reset_perspective(src)
- brainmob.remote_control = src
- brainmob.update_mobility()
- brainmob.update_mouse_pointer()
- icon_state = initial(icon_state)
- update_icon()
- setDir(dir_in)
- mecha_log_message("[mmi_as_oc] moved in as pilot.")
- if(!internal_damage)
- SEND_SOUND(occupant, sound('sound/mecha/nominal.ogg',volume=50))
- GrantActions(brainmob)
- return TRUE
-
-/obj/mecha/container_resist(mob/living/user)
- go_out()
-
-/obj/mecha/Exited(atom/movable/M, atom/newloc)
- if(occupant && occupant == M) // The occupant exited the mech without calling go_out()
- go_out(TRUE, newloc)
-
-/obj/mecha/proc/go_out(forced, atom/newloc = loc)
- if(!occupant)
- return
- var/atom/movable/mob_container
- occupant.clear_alert("charge")
- occupant.clear_alert("mech damage")
- if(ishuman(occupant))
- mob_container = occupant
- RemoveActions(occupant, human_occupant=1)
- else if(isbrain(occupant))
- var/mob/living/brain/brain = occupant
- RemoveActions(brain)
- mob_container = brain.container
- else if(isAI(occupant))
- var/mob/living/silicon/ai/AI = occupant
- if(forced)//This should only happen if there are multiple AIs in a round, and at least one is Malf.
- RemoveActions(occupant)
- occupant.gib() //If one Malf decides to steal a mech from another AI (even other Malfs!), they are destroyed, as they have nowhere to go when replaced.
- occupant = null
- return
- else
- if(!AI.linked_core)
- to_chat(AI, "Inactive core destroyed. Unable to return.")
- AI.linked_core = null
- return
- to_chat(AI, "Returning to core...")
- AI.controlled_mech = null
- AI.remote_control = null
- RemoveActions(occupant, 1)
- mob_container = AI
- newloc = get_turf(AI.linked_core)
- qdel(AI.linked_core)
- else
- return
- var/mob/living/L = occupant
- occupant = null //we need it null when forceMove calls Exited().
- if(mob_container.forceMove(newloc))//ejecting mob container
- mecha_log_message("[mob_container] moved out.")
- L << browse(null, "window=exosuit")
-
- if(istype(mob_container, /obj/item/mmi))
- var/obj/item/mmi/mmi = mob_container
- if(mmi.brainmob)
- L.forceMove(mmi)
- L.reset_perspective()
- mmi.mecha = null
- mmi.update_icon()
- L.mobility_flags = NONE
- icon_state = initial(icon_state)+"-open"
- setDir(dir_in)
-
- if(L && L.client)
- L.update_mouse_pointer()
- L.client.view_size.resetToDefault()
- zoom_mode = 0
-
-/////////////////////////
-////// Access stuff /////
-/////////////////////////
-
-/obj/mecha/proc/operation_allowed(mob/M)
- req_access = operation_req_access
- req_one_access = list()
- return allowed(M)
-
-/obj/mecha/proc/internals_access_allowed(mob/M)
- req_one_access = internals_req_access
- req_access = list()
- return allowed(M)
-
-
-
-////////////////////////////////
-/////// Messages and Log ///////
-////////////////////////////////
-
-/obj/mecha/proc/occupant_message(message as text)
- if(message)
- if(occupant && occupant.client)
- to_chat(occupant, "[icon2html(src, occupant)] [message]")
- return
-
-/obj/mecha/proc/mecha_log_message(message, color)
- log.len++
- log[log.len] = list("time"="[STATION_TIME_TIMESTAMP("hh:mm:ss", world.time)]","date","year"="[GLOB.year_integer]","message"="[color?"":null][message][color?"":null]")
- log_message(message, LOG_GAME, color) //also do the normal admin logs I guess.
- return log.len
-
-/obj/mecha/proc/log_append_to_last(message as text,red=null)
- var/list/last_entry = log[log.len]
- last_entry["message"] += "
[red?"":null][message][red?"":null]"
- return
-
-///////////////////////
-///// Power stuff /////
-///////////////////////
-
-/obj/mecha/proc/has_charge(amount)
- return (get_charge()>=amount)
-
-/obj/mecha/proc/get_charge()
- for(var/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/R in equipment)
- var/relay_charge = R.get_charge()
- if(relay_charge)
- return relay_charge
- if(cell)
- return max(0, cell.charge)
-
-/obj/mecha/proc/use_power(amount)
- if(get_charge())
- cell.use(amount)
- return 1
- return 0
-
-/obj/mecha/proc/give_power(amount)
- if(!isnull(get_charge()))
- cell.give(amount)
- return 1
- return 0
-
-/obj/mecha/update_remote_sight(mob/living/user)
- if(occupant_sight_flags)
- if(user == occupant)
- user.sight |= occupant_sight_flags
-
-///////////////////////
-////// Ammo stuff /////
-///////////////////////
-
-/obj/mecha/proc/ammo_resupply(var/obj/item/mecha_ammo/A, mob/user,var/fail_chat_override = FALSE)
- if(!A.rounds)
- if(!fail_chat_override)
- to_chat(user, "This box of ammo is empty!")
- return FALSE
- var/ammo_needed
- var/found_gun
- for(var/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/gun in equipment)
- ammo_needed = 0
-
- if(istype(gun, /obj/item/mecha_parts/mecha_equipment/weapon/ballistic) && gun.ammo_type == A.ammo_type)
- found_gun = TRUE
- if(A.direct_load)
- ammo_needed = initial(gun.projectiles) - gun.projectiles
- else
- ammo_needed = gun.projectiles_cache_max - gun.projectiles_cache
-
- if(ammo_needed)
- if(ammo_needed < A.rounds)
- if(A.direct_load)
- gun.projectiles = gun.projectiles + ammo_needed
- else
- gun.projectiles_cache = gun.projectiles_cache + ammo_needed
- playsound(get_turf(user),A.load_audio,50,1)
- to_chat(user, "You add [ammo_needed] [A.round_term][ammo_needed > 1?"s":""] to the [gun.name]")
- A.rounds = A.rounds - ammo_needed
- A.update_name()
- return TRUE
-
- else
- if(A.direct_load)
- gun.projectiles = gun.projectiles + A.rounds
- else
- gun.projectiles_cache = gun.projectiles_cache + A.rounds
- playsound(get_turf(user),A.load_audio,50,1)
- to_chat(user, "You add [A.rounds] [A.round_term][A.rounds > 1?"s":""] to the [gun.name]")
- A.rounds = 0
- A.update_name()
- return TRUE
- if(!fail_chat_override)
- if(found_gun)
- to_chat(user, "You can't fit any more ammo of this type!")
- else
- to_chat(user, "None of the equipment on this exosuit can use this ammo!")
- return FALSE
diff --git a/code/game/mecha/mecha_actions.dm b/code/game/mecha/mecha_actions.dm
deleted file mode 100644
index ee43e3f770..0000000000
--- a/code/game/mecha/mecha_actions.dm
+++ /dev/null
@@ -1,285 +0,0 @@
-//////////////////////////////////////// Action Buttons ///////////////////////////////////////////////
-
-/obj/mecha/proc/GrantActions(mob/living/user, human_occupant = 0)
- if(human_occupant)
- eject_action.Grant(user, src)
- internals_action.Grant(user, src)
- cycle_action.Grant(user, src)
- lights_action.Grant(user, src)
- stats_action.Grant(user, src)
- strafing_action.Grant(user, src)
-
-
-/obj/mecha/proc/RemoveActions(mob/living/user, human_occupant = 0)
- if(human_occupant)
- eject_action.Remove(user)
- internals_action.Remove(user)
- cycle_action.Remove(user)
- lights_action.Remove(user)
- stats_action.Remove(user)
- strafing_action.Remove(user)
-
-
-/datum/action/innate/mecha
- check_flags = AB_CHECK_RESTRAINED | AB_CHECK_STUN | AB_CHECK_CONSCIOUS
- icon_icon = 'icons/mob/actions/actions_mecha.dmi'
- var/obj/mecha/chassis
-
-/datum/action/innate/mecha/Grant(mob/living/L, obj/mecha/M)
- if(M)
- chassis = M
- ..()
-
-/datum/action/innate/mecha/Destroy()
- chassis = null
- return ..()
-
-/datum/action/innate/mecha/mech_eject
- name = "Eject From Mech"
- button_icon_state = "mech_eject"
-
-/datum/action/innate/mecha/mech_eject/Activate()
- if(!owner)
- return
- if(!chassis || chassis.occupant != owner)
- return
- chassis.go_out()
-
-
-/datum/action/innate/mecha/mech_toggle_internals
- name = "Toggle Internal Airtank Usage"
- button_icon_state = "mech_internals_off"
-
-/datum/action/innate/mecha/mech_toggle_internals/Activate()
- if(!owner || !chassis || chassis.occupant != owner)
- return
- chassis.use_internal_tank = !chassis.use_internal_tank
- button_icon_state = "mech_internals_[chassis.use_internal_tank ? "on" : "off"]"
- chassis.occupant_message("Now taking air from [chassis.use_internal_tank?"internal airtank":"environment"].")
- chassis.mecha_log_message("Now taking air from [chassis.use_internal_tank?"internal airtank":"environment"].")
- UpdateButtonIcon()
-
-/datum/action/innate/mecha/mech_cycle_equip
- name = "Cycle Equipment"
- button_icon_state = "mech_cycle_equip_off"
-
-/datum/action/innate/mecha/mech_cycle_equip/Activate()
- if(!owner || !chassis || chassis.occupant != owner)
- return
-
- var/list/available_equipment = list()
- for(var/obj/item/mecha_parts/mecha_equipment/M in chassis.equipment)
- if(M.selectable)
- available_equipment += M
-
- if(available_equipment.len == 0)
- chassis.occupant_message("No equipment available.")
- return
- if(!chassis.selected)
- chassis.selected = available_equipment[1]
- chassis.occupant_message("You select [chassis.selected]")
- send_byjax(chassis.occupant,"exosuit.browser","eq_list",chassis.get_equipment_list())
- button_icon_state = "mech_cycle_equip_on"
- UpdateButtonIcon()
- return
- var/number = 0
- for(var/A in available_equipment)
- number++
- if(A == chassis.selected)
- if(available_equipment.len == number)
- chassis.selected = null
- chassis.occupant_message("You switch to no equipment")
- button_icon_state = "mech_cycle_equip_off"
- else
- chassis.selected = available_equipment[number+1]
- chassis.occupant_message("You switch to [chassis.selected]")
- button_icon_state = "mech_cycle_equip_on"
- send_byjax(chassis.occupant,"exosuit.browser","eq_list",chassis.get_equipment_list())
- UpdateButtonIcon()
- return
-
-
-/datum/action/innate/mecha/mech_toggle_lights
- name = "Toggle Lights"
- button_icon_state = "mech_lights_off"
-
-/datum/action/innate/mecha/mech_toggle_lights/Activate()
- if(!owner || !chassis || chassis.occupant != owner)
- return
- chassis.lights = !chassis.lights
- if(chassis.lights)
- chassis.set_light(chassis.lights_power)
- button_icon_state = "mech_lights_on"
- else
- chassis.set_light(-chassis.lights_power)
- button_icon_state = "mech_lights_off"
- chassis.occupant_message("Toggled lights [chassis.lights?"on":"off"].")
- chassis.mecha_log_message("Toggled lights [chassis.lights?"on":"off"].")
- UpdateButtonIcon()
-
-/datum/action/innate/mecha/mech_view_stats
- name = "View Stats"
- button_icon_state = "mech_view_stats"
-
-/datum/action/innate/mecha/mech_view_stats/Activate()
- if(!owner || !chassis || chassis.occupant != owner)
- return
- chassis.occupant << browse(chassis.get_stats_html(), "window=exosuit")
-
-
-/datum/action/innate/mecha/strafe
- name = "Toggle Strafing. Disabled when Alt is held."
- button_icon_state = "strafe"
-
-/datum/action/innate/mecha/strafe/Activate()
- if(!owner || !chassis || chassis.occupant != owner)
- return
-
- chassis.toggle_strafe()
-
-/obj/mecha/AltClick(mob/living/user)
- . = ..()
- if((user == occupant) && user.canUseTopic(src))
- toggle_strafe()
- return TRUE
-
-/obj/mecha/proc/toggle_strafe()
- strafe = !strafe
-
- occupant_message("Toggled strafing mode [strafe?"on":"off"].")
- mecha_log_message("Toggled strafing mode [strafe?"on":"off"].")
- strafing_action.UpdateButtonIcon()
-
-//////////////////////////////////////// Specific Ability Actions ///////////////////////////////////////////////
-//Need to be granted by the mech type, Not default abilities.
-
-/datum/action/innate/mecha/mech_toggle_thrusters
- name = "Toggle Thrusters"
- button_icon_state = "mech_thrusters_off"
-
-/datum/action/innate/mecha/mech_toggle_thrusters/Activate()
- if(!owner || !chassis || chassis.occupant != owner)
- return
- if(chassis.get_charge() > 0)
- chassis.thrusters_active = !chassis.thrusters_active
- button_icon_state = "mech_thrusters_[chassis.thrusters_active ? "on" : "off"]"
- chassis.mecha_log_message("Toggled thrusters.")
- chassis.occupant_message("Thrusters [chassis.thrusters_active ?"en":"dis"]abled.")
-
-
-/datum/action/innate/mecha/mech_defence_mode
- name = "Toggle Defence Mode"
- button_icon_state = "mech_defense_mode_off"
-
-/datum/action/innate/mecha/mech_defence_mode/Activate(forced_state = null)
- if(!owner || !chassis || chassis.occupant != owner)
- return
- if(!isnull(forced_state))
- chassis.defence_mode = forced_state
- else
- chassis.defence_mode = !chassis.defence_mode
- button_icon_state = "mech_defense_mode_[chassis.defence_mode ? "on" : "off"]"
- if(chassis.defence_mode)
- chassis.deflect_chance = chassis.defence_mode_deflect_chance
- chassis.occupant_message("You enable [chassis] defence mode.")
- else
- chassis.deflect_chance = initial(chassis.deflect_chance)
- chassis.occupant_message("You disable [chassis] defence mode.")
- chassis.mecha_log_message("Toggled defence mode.")
- UpdateButtonIcon()
-
-/datum/action/innate/mecha/mech_overload_mode
- name = "Toggle leg actuators overload"
- button_icon_state = "mech_overload_off"
-
-/datum/action/innate/mecha/mech_overload_mode/Activate(forced_state = null)
- if(!owner || !chassis || chassis.occupant != owner)
- return
- if(!isnull(forced_state))
- chassis.leg_overload_mode = forced_state
- else
- chassis.leg_overload_mode = !chassis.leg_overload_mode
- button_icon_state = "mech_overload_[chassis.leg_overload_mode ? "on" : "off"]"
- chassis.mecha_log_message("Toggled leg actuators overload.")
- if(chassis.leg_overload_mode)
- chassis.leg_overload_mode = 1
- chassis.bumpsmash = 1
- chassis.step_in = min(1, round(chassis.step_in/2))
- chassis.step_energy_drain = max(chassis.overload_step_energy_drain_min,chassis.step_energy_drain*chassis.leg_overload_coeff)
- chassis.occupant_message("You enable leg actuators overload.")
- else
- chassis.leg_overload_mode = 0
- chassis.bumpsmash = 0
- chassis.step_in = initial(chassis.step_in)
- chassis.step_energy_drain = chassis.normal_step_energy_drain
- chassis.occupant_message("You disable leg actuators overload.")
- UpdateButtonIcon()
-
-/datum/action/innate/mecha/mech_smoke
- name = "Smoke"
- button_icon_state = "mech_smoke"
-
-/datum/action/innate/mecha/mech_smoke/Activate()
- if(!owner || !chassis || chassis.occupant != owner)
- return
- if(chassis.smoke_ready && chassis.smoke>0)
- chassis.smoke_system.start()
- chassis.smoke--
- chassis.smoke_ready = 0
- spawn(chassis.smoke_cooldown)
- chassis.smoke_ready = 1
-
-
-/datum/action/innate/mecha/mech_zoom
- name = "Zoom"
- button_icon_state = "mech_zoom_off"
-
-/datum/action/innate/mecha/mech_zoom/Activate()
- if(!owner || !chassis || chassis.occupant != owner)
- return
- if(owner.client)
- chassis.zoom_mode = !chassis.zoom_mode
- button_icon_state = "mech_zoom_[chassis.zoom_mode ? "on" : "off"]"
- chassis.mecha_log_message("Toggled zoom mode.")
- chassis.occupant_message("Zoom mode [chassis.zoom_mode?"en":"dis"]abled.")
- if(chassis.zoom_mode)
- owner.client.view_size.setTo(4.5)
- SEND_SOUND(owner, sound('sound/mecha/imag_enh.ogg',volume=50))
- else
- owner.client.view_size.resetToDefault()
- UpdateButtonIcon()
-
-/datum/action/innate/mecha/mech_switch_damtype
- name = "Reconfigure arm microtool arrays"
- button_icon_state = "mech_damtype_brute"
-
-/datum/action/innate/mecha/mech_switch_damtype/Activate()
- if(!owner || !chassis || chassis.occupant != owner)
- return
- var/new_damtype
- switch(chassis.damtype)
- if("tox")
- new_damtype = "brute"
- chassis.occupant_message("Your exosuit's hands form into fists.")
- if("brute")
- new_damtype = "fire"
- chassis.occupant_message("A torch tip extends from your exosuit's hand, glowing red.")
- if("fire")
- new_damtype = "tox"
- chassis.occupant_message("A bone-chillingly thick plasteel needle protracts from the exosuit's palm.")
- chassis.damtype = new_damtype
- button_icon_state = "mech_damtype_[new_damtype]"
- playsound(src, 'sound/mecha/mechmove01.ogg', 50, 1)
- UpdateButtonIcon()
-
-/datum/action/innate/mecha/mech_toggle_phasing
- name = "Toggle Phasing"
- button_icon_state = "mech_phasing_off"
-
-/datum/action/innate/mecha/mech_toggle_phasing/Activate()
- if(!owner || !chassis || chassis.occupant != owner)
- return
- chassis.phasing = !chassis.phasing
- button_icon_state = "mech_phasing_[chassis.phasing ? "on" : "off"]"
- chassis.occupant_message("En":"#f00\">Dis"]abled phasing.")
- UpdateButtonIcon()
diff --git a/code/game/mecha/mecha_construction_paths.dm b/code/game/mecha/mecha_construction_paths.dm
deleted file mode 100644
index 34cb57f661..0000000000
--- a/code/game/mecha/mecha_construction_paths.dm
+++ /dev/null
@@ -1,2292 +0,0 @@
-////////////////////////////////
-///// Construction datums //////
-////////////////////////////////
-/datum/component/construction/mecha
- var/base_icon
- var/looky_helpy = TRUE
-
-/datum/component/construction/mecha/examine(datum/source, mob/user, list/examine_list)
- . = ..()
- if(looky_helpy)
- switch(steps[index]["key"])
- if(TOOL_WRENCH)
- examine_list += "The mech could be wrenched into place."
- if(TOOL_SCREWDRIVER)
- examine_list += "The mech could be screwed into place."
- if(TOOL_WIRECUTTER)
- examine_list += "The mech wires could be trimmed into place."
- if(/obj/item/stack/cable_coil)
- examine_list += "The mech could use some wiring."
- if(/obj/item/circuitboard)
- examine_list += "The mech could use a type ofcircuitboard."
- if(/obj/item/stock_parts/scanning_module)
- examine_list += "The mech could use a scanning stock part."
- if(/obj/item/stock_parts/capacitor)
- examine_list += "The mech could use a power based stock part."
- if(/obj/item/stock_parts/cell)
- examine_list += "The mech could use a power source."
- if(/obj/item/stack/sheet/metal)
- examine_list += "The mech could use some sheets of metal."
- if(/obj/item/stack/sheet/plasteel)
- examine_list += "The mech could use some sheets of strong steel."
- if(/obj/item/bikehorn)
- examine_list += "HONK IT!."
- if(/obj/item/clothing/mask/gas/clown_hat)
- examine_list += "GIVE IT CLOWN MAKEUP HONK!."
- if(/obj/item/clothing/shoes/clown_shoes)
- examine_list += "GIVE IT GOOFY SHOES HONK HONK!."
- if(/obj/item/mecha_parts/part)
- examine_list += "The mech could use a mech part."
- if(/obj/item/stack/ore/bluespace_crystal)
- examine_list += "The mech could use a crystal of sorts."
- if(/obj/item/assembly/signaler/anomaly)
- examine_list += "The mech could use a anomaly of sorts."
-
-/datum/component/construction/mecha/spawn_result()
- if(!result)
- return
- // Remove default mech power cell, as we replace it with a new one.
- var/obj/mecha/M = new result(drop_location())
- QDEL_NULL(M.cell)
-
- var/obj/item/mecha_parts/chassis/parent_chassis = parent
- M.CheckParts(parent_chassis.contents)
-
- SSblackbox.record_feedback("tally", "mechas_created", 1, M.name)
- QDEL_NULL(parent)
-
-/datum/component/construction/mecha/update_parent(step_index)
- ..()
- // By default, each step in mech construction has a single icon_state:
- // "[base_icon][index - 1]"
- // For example, Ripley's step 1 icon_state is "ripley0".
- var/atom/parent_atom = parent
- if(!steps[index]["icon_state"] && base_icon)
- parent_atom.icon_state = "[base_icon][index - 1]"
-
-/datum/component/construction/unordered/mecha_chassis/custom_action(obj/item/I, mob/living/user, typepath)
- . = user.transferItemToLoc(I, parent)
- if(.)
- var/atom/parent_atom = parent
- user.visible_message("[user] has connected [I] to [parent].", "You connect [I] to [parent].")
- parent_atom.add_overlay(I.icon_state+"+o")
- qdel(I)
-
-/datum/component/construction/unordered/mecha_chassis/spawn_result()
- var/atom/parent_atom = parent
- parent_atom.icon = 'icons/mecha/mech_construction.dmi'
- parent_atom.density = TRUE
- parent_atom.cut_overlays()
- ..()
-
-
-/datum/component/construction/unordered/mecha_chassis/ripley
- result = /datum/component/construction/mecha/ripley
- steps = list(
- /obj/item/mecha_parts/part/ripley_torso,
- /obj/item/mecha_parts/part/ripley_left_arm,
- /obj/item/mecha_parts/part/ripley_right_arm,
- /obj/item/mecha_parts/part/ripley_left_leg,
- /obj/item/mecha_parts/part/ripley_right_leg
- )
-
-/datum/component/construction/mecha/ripley
- result = /obj/mecha/working/ripley
- base_icon = "ripley"
- steps = list(
- //1
- list(
- "key" = TOOL_WRENCH,
- "desc" = "The hydraulic systems are disconnected."
- ),
-
- //2
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_WRENCH,
- "desc" = "The hydraulic systems are connected."
- ),
-
- //3
- list(
- "key" = /obj/item/stack/cable_coil,
- "amount" = 5,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The hydraulic systems are active."
- ),
-
- //4
- list(
- "key" = TOOL_WIRECUTTER,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The wiring is added."
- ),
-
- //5
- list(
- "key" = /obj/item/circuitboard/mecha/ripley/main,
- "action" = ITEM_DELETE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The wiring is adjusted."
- ),
-
- //6
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Central control module is installed."
- ),
-
- //7
- list(
- "key" = /obj/item/circuitboard/mecha/ripley/peripherals,
- "action" = ITEM_DELETE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Central control module is secured."
- ),
-
- //8
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Peripherals control module is installed."
- ),
-
- //9
- list(
- "key" = /obj/item/stock_parts/scanning_module,
- "action" = ITEM_MOVE_INSIDE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Peripherals control module is secured."
- ),
-
- //10
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "The scanner module is installed."
- ),
-
- //11
- list(
- "key" = /obj/item/stock_parts/capacitor,
- "action" = ITEM_MOVE_INSIDE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Scanner module is secured."
- ),
-
- //12
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Capacitor is installed."
- ),
-
- //13
- list(
- "key" = /obj/item/stock_parts/cell,
- "action" = ITEM_MOVE_INSIDE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Capacitor is secured."
- ),
-
- //14
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "The power cell is installed."
- ),
-
- //15
- list(
- "key" = /obj/item/stack/sheet/metal,
- "amount" = 5,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The power cell is secured."
- ),
-
- //16
- list(
- "key" = TOOL_WRENCH,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Internal armor is installed."
- ),
-
- //17
- list(
- "key" = TOOL_WELDER,
- "back_key" = TOOL_WRENCH,
- "desc" = "Internal armor is wrenched."
- ),
-
- //18
- list(
- "key" = /obj/item/stack/sheet/plasteel,
- "amount" = 5,
- "back_key" = TOOL_WELDER,
- "desc" = "Internal armor is welded."
- ),
-
- //19
- list(
- "key" = TOOL_WRENCH,
- "back_key" = TOOL_CROWBAR,
- "desc" = "External armor is installed."
- ),
-
- //20
- list(
- "key" = TOOL_WELDER,
- "back_key" = TOOL_WRENCH,
- "desc" = "External armor is wrenched."
- ),
- )
-
-/datum/component/construction/mecha/ripley/custom_action(obj/item/I, mob/living/user, diff)
- if(!..())
- return FALSE
-
- switch(index)
- if(1)
- user.visible_message("[user] connects [parent] hydraulic systems", "You connect [parent] hydraulic systems.")
- if(2)
- if(diff==FORWARD)
- user.visible_message("[user] activates [parent] hydraulic systems.", "You activate [parent] hydraulic systems.")
- else
- user.visible_message("[user] disconnects [parent] hydraulic systems", "You disconnect [parent] hydraulic systems.")
- if(3)
- if(diff==FORWARD)
- user.visible_message("[user] adds the wiring to [parent].", "You add the wiring to [parent].")
- else
- user.visible_message("[user] deactivates [parent] hydraulic systems.", "You deactivate [parent] hydraulic systems.")
- if(4)
- if(diff==FORWARD)
- user.visible_message("[user] adjusts the wiring of [parent].", "You adjust the wiring of [parent].")
- else
- user.visible_message("[user] removes the wiring from [parent].", "You remove the wiring from [parent].")
- if(5)
- if(diff==FORWARD)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
- else
- user.visible_message("[user] disconnects the wiring of [parent].", "You disconnect the wiring of [parent].")
- if(6)
- if(diff==FORWARD)
- user.visible_message("[user] secures the mainboard.", "You secure the mainboard.")
- else
- user.visible_message("[user] removes the central control module from [parent].", "You remove the central computer mainboard from [parent].")
- if(7)
- if(diff==FORWARD)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
- else
- user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.")
- if(8)
- if(diff==FORWARD)
- user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.")
- else
- user.visible_message("[user] removes the peripherals control module from [parent].", "You remove the peripherals control module from [parent].")
- if(9)
- if(diff==FORWARD)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
- else
- user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.")
- if(10)
- if(diff==FORWARD)
- user.visible_message("[user] secures the scanner module.", "You secure the scanner module.")
- else
- user.visible_message("[user] removes the scanner module from [parent].", "You remove the scanner module from [parent].")
- if(11)
- if(diff==FORWARD)
- user.visible_message("[user] installs [I] to [parent].", "You install [I] to [parent].")
- else
- user.visible_message("[user] unfastens the scanner module.", "You unfasten the scanner module.")
- if(12)
- if(diff==FORWARD)
- user.visible_message("[user] secures [I].", "You secure [I].")
- else
- user.visible_message("[user] removes the capacitor from [parent].", "You remove the capacitor from [parent].")
- if(13)
- if(diff==FORWARD)
- user.visible_message("[user] installs [I].", "You install [I].")
- else
- user.visible_message("[user] unsecures the capacitor from [parent].", "You unsecure the capacitor from [parent].")
- if(14)
- if(diff==FORWARD)
- user.visible_message("[user] secures the power cell.", "You secure the power cell.")
- else
- user.visible_message("[user] pries the power cell from [parent].", "You pry the power cell from [parent].")
- if(15)
- if(diff==FORWARD)
- user.visible_message("[user] installs the internal armor layer to [parent].", "You install the internal armor layer to [parent].")
- else
- user.visible_message("[user] unfastens the power cell.", "You unfasten the power cell.")
- if(16)
- if(diff==FORWARD)
- user.visible_message("[user] secures the internal armor layer.", "You secure the internal armor layer.")
- else
- user.visible_message("[user] pries internal armor layer from [parent].", "You pry internal armor layer from [parent].")
- if(17)
- if(diff==FORWARD)
- user.visible_message("[user] welds the internal armor layer to [parent].", "You weld the internal armor layer to [parent].")
- else
- user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.")
- if(18)
- if(diff==FORWARD)
- user.visible_message("[user] installs the external reinforced armor layer to [parent].", "You install the external reinforced armor layer to [parent].")
- else
- user.visible_message("[user] cuts the internal armor layer from [parent].", "You cut the internal armor layer from [parent].")
- if(19)
- if(diff==FORWARD)
- user.visible_message("[user] secures the external armor layer.", "You secure the external reinforced armor layer.")
- else
- user.visible_message("[user] pries external armor layer from [parent].", "You pry external armor layer from [parent].")
- if(20)
- if(diff==FORWARD)
- user.visible_message("[user] welds the external armor layer to [parent].", "You weld the external armor layer to [parent].")
- else
- user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.")
- return TRUE
-
-/datum/component/construction/unordered/mecha_chassis/gygax
- result = /datum/component/construction/mecha/gygax
- steps = list(
- /obj/item/mecha_parts/part/gygax_torso,
- /obj/item/mecha_parts/part/gygax_left_arm,
- /obj/item/mecha_parts/part/gygax_right_arm,
- /obj/item/mecha_parts/part/gygax_left_leg,
- /obj/item/mecha_parts/part/gygax_right_leg,
- /obj/item/mecha_parts/part/gygax_head
- )
-
-/datum/component/construction/mecha/gygax
- result = /obj/mecha/combat/gygax
- base_icon = "gygax"
- steps = list(
- //1
- list(
- "key" = TOOL_WRENCH,
- "desc" = "The hydraulic systems are disconnected."
- ),
-
- //2
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_WRENCH,
- "desc" = "The hydraulic systems are connected."
- ),
-
- //3
- list(
- "key" = /obj/item/stack/cable_coil,
- "amount" = 5,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The hydraulic systems are active."
- ),
-
- //4
- list(
- "key" = TOOL_WIRECUTTER,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The wiring is added."
- ),
-
- //5
- list(
- "key" = /obj/item/circuitboard/mecha/gygax/main,
- "action" = ITEM_DELETE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The wiring is adjusted."
- ),
-
- //6
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Central control module is installed."
- ),
-
- //7
- list(
- "key" = /obj/item/circuitboard/mecha/gygax/peripherals,
- "action" = ITEM_DELETE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Central control module is secured."
- ),
-
- //8
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Peripherals control module is installed."
- ),
-
- //9
- list(
- "key" = /obj/item/circuitboard/mecha/gygax/targeting,
- "action" = ITEM_DELETE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Peripherals control module is secured."
- ),
-
- //10
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Weapon control module is installed."
- ),
-
- //11
- list(
- "key" = /obj/item/stock_parts/scanning_module,
- "action" = ITEM_MOVE_INSIDE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Weapon control module is secured."
- ),
-
- //12
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Scanner module is installed."
- ),
-
- //13
- list(
- "key" = /obj/item/stock_parts/capacitor,
- "action" = ITEM_MOVE_INSIDE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Scanner module is secured."
- ),
-
- //14
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Capacitor is installed."
- ),
-
- //15
- list(
- "key" = /obj/item/stock_parts/cell,
- "action" = ITEM_MOVE_INSIDE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Capacitor is secured."
- ),
-
- //16
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "The power cell is installed."
- ),
-
- //17
- list(
- "key" = /obj/item/stack/sheet/metal,
- "amount" = 5,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The power cell is secured."
- ),
-
- //18
- list(
- "key" = TOOL_WRENCH,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Internal armor is installed."
- ),
-
- //19
- list(
- "key" = TOOL_WELDER,
- "back_key" = TOOL_WRENCH,
- "desc" = "Internal armor is wrenched."
- ),
-
- //20
- list(
- "key" = /obj/item/mecha_parts/part/gygax_armor,
- "action" = ITEM_DELETE,
- "back_key" = TOOL_WELDER,
- "desc" = "Internal armor is welded."
- ),
-
- //21
- list(
- "key" = TOOL_WRENCH,
- "back_key" = TOOL_CROWBAR,
- "desc" = "External armor is installed."
- ),
-
- //22
- list(
- "key" = TOOL_WELDER,
- "back_key" = TOOL_WRENCH,
- "desc" = "External armor is wrenched."
- ),
-
- )
-
-/datum/component/construction/mecha/gygax/action(datum/source, atom/used_atom, mob/user)
- return check_step(used_atom,user)
-
-/datum/component/construction/mecha/gygax/custom_action(obj/item/I, mob/living/user, diff)
- if(!..())
- return FALSE
-
- switch(index)
- if(1)
- user.visible_message("[user] connects [parent] hydraulic systems", "You connect [parent] hydraulic systems.")
- if(2)
- if(diff==FORWARD)
- user.visible_message("[user] activates [parent] hydraulic systems.", "You activate [parent] hydraulic systems.")
- else
- user.visible_message("[user] disconnects [parent] hydraulic systems", "You disconnect [parent] hydraulic systems.")
- if(3)
- if(diff==FORWARD)
- user.visible_message("[user] adds the wiring to [parent].", "You add the wiring to [parent].")
- else
- user.visible_message("[user] deactivates [parent] hydraulic systems.", "You deactivate [parent] hydraulic systems.")
- if(4)
- if(diff==FORWARD)
- user.visible_message("[user] adjusts the wiring of [parent].", "You adjust the wiring of [parent].")
- else
- user.visible_message("[user] removes the wiring from [parent].", "You remove the wiring from [parent].")
- if(5)
- if(diff==FORWARD)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
- else
- user.visible_message("[user] disconnects the wiring of [parent].", "You disconnect the wiring of [parent].")
- if(6)
- if(diff==FORWARD)
- user.visible_message("[user] secures the mainboard.", "You secure the mainboard.")
- else
- user.visible_message("[user] removes the central control module from [parent].", "You remove the central computer mainboard from [parent].")
- if(7)
- if(diff==FORWARD)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
- else
- user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.")
- if(8)
- if(diff==FORWARD)
- user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.")
- else
- user.visible_message("[user] removes the peripherals control module from [parent].", "You remove the peripherals control module from [parent].")
- if(9)
- if(diff==FORWARD)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
- else
- user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.")
- if(10)
- if(diff==FORWARD)
- user.visible_message("[user] secures the weapon control module.", "You secure the weapon control module.")
- else
- user.visible_message("[user] removes the weapon control module from [parent].", "You remove the weapon control module from [parent].")
- if(11)
- if(diff==FORWARD)
- user.visible_message("[user] installs [I] to [parent].", "You install [I] to [parent].")
- else
- user.visible_message("[user] unfastens the weapon control module.", "You unfasten the weapon control module.")
- if(12)
- if(diff==FORWARD)
- user.visible_message("[user] secures the scanner module.", "You secure the scanner module.")
- else
- user.visible_message("[user] removes the scanner module from [parent].", "You remove the scanner module from [parent].")
- if(13)
- if(diff==FORWARD)
- user.visible_message("[user] installs [I] to [parent].", "You install [I] to [parent].")
- else
- user.visible_message("[user] unfastens the scanner module.", "You unfasten the scanner module.")
- if(14)
- if(diff==FORWARD)
- user.visible_message("[user] secures the capacitor.", "You secure the capacitor.")
- else
- user.visible_message("[user] removes the capacitor from [parent].", "You remove the capacitor from [parent].")
- if(15)
- if(diff==FORWARD)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
- else
- user.visible_message("[user] unfastens the capacitor.", "You unfasten the capacitor.")
- if(16)
- if(diff==FORWARD)
- user.visible_message("[user] secures the power cell.", "You secure the power cell.")
- else
- user.visible_message("[user] pries the power cell from [parent].", "You pry the power cell from [parent].")
- if(17)
- if(diff==FORWARD)
- user.visible_message("[user] installs the internal armor layer to [parent].", "You install the internal armor layer to [parent].")
- else
- user.visible_message("[user] unfastens the power cell.", "You unfasten the power cell.")
- if(18)
- if(diff==FORWARD)
- user.visible_message("[user] secures the internal armor layer.", "You secure the internal armor layer.")
- else
- user.visible_message("[user] pries internal armor layer from [parent].", "You pry internal armor layer from [parent].")
- if(19)
- if(diff==FORWARD)
- user.visible_message("[user] welds the internal armor layer to [parent].", "You weld the internal armor layer to [parent].")
- else
- user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.")
- if(20)
- if(diff==FORWARD)
- user.visible_message("[user] installs [I] to [parent].", "You install [I] to [parent].")
- else
- user.visible_message("[user] cuts the internal armor layer from [parent].", "You cut the internal armor layer from [parent].")
- if(21)
- if(diff==FORWARD)
- user.visible_message("[user] secures Gygax Armor Plates.", "You secure Gygax Armor Plates.")
- else
- user.visible_message("[user] pries Gygax Armor Plates from [parent].", "You pry Gygax Armor Plates from [parent].")
- if(22)
- if(diff==FORWARD)
- user.visible_message("[user] welds Gygax Armor Plates to [parent].", "You weld Gygax Armor Plates to [parent].")
- else
- user.visible_message("[user] unfastens Gygax Armor Plates.", "You unfasten Gygax Armor Plates.")
- return TRUE
-
-//Begin Medigax
-/datum/component/construction/unordered/mecha_chassis/medigax
- result = /datum/component/construction/mecha/medigax
- steps = list(
- /obj/item/mecha_parts/part/medigax_torso,
- /obj/item/mecha_parts/part/medigax_left_arm,
- /obj/item/mecha_parts/part/medigax_right_arm,
- /obj/item/mecha_parts/part/medigax_left_leg,
- /obj/item/mecha_parts/part/medigax_right_leg,
- /obj/item/mecha_parts/part/medigax_head
- )
-
-/datum/component/construction/mecha/medigax
- result = /obj/mecha/medical/medigax
- base_icon = "medigax"
- steps = list(
- //1
- list(
- "key" = TOOL_WRENCH,
- "desc" = "The hydraulic systems are disconnected."
- ),
-
- //2
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_WRENCH,
- "desc" = "The hydraulic systems are connected."
- ),
-
- //3
- list(
- "key" = /obj/item/stack/cable_coil,
- "amount" = 5,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The hydraulic systems are active."
- ),
-
- //4
- list(
- "key" = TOOL_WIRECUTTER,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The wiring is added."
- ),
-
- //5
- list(
- "key" = /obj/item/circuitboard/mecha/gygax/main,
- "action" = ITEM_DELETE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The wiring is adjusted."
- ),
-
- //6
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Central control module is installed."
- ),
-
- //7
- list(
- "key" = /obj/item/circuitboard/mecha/gygax/peripherals,
- "action" = ITEM_DELETE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Central control module is secured."
- ),
-
- //8
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Peripherals control module is installed."
- ),
-
- //9
- list(
- "key" = /obj/item/circuitboard/mecha/gygax/targeting,
- "action" = ITEM_DELETE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Peripherals control module is secured."
- ),
-
- //10
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Weapon control module is installed."
- ),
-
- //11
- list(
- "key" = /obj/item/stock_parts/scanning_module,
- "action" = ITEM_MOVE_INSIDE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Weapon control module is secured."
- ),
-
- //12
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Scanner module is installed."
- ),
-
- //13
- list(
- "key" = /obj/item/stock_parts/capacitor,
- "action" = ITEM_MOVE_INSIDE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Scanner module is secured."
- ),
-
- //14
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Capacitor is installed."
- ),
-
- //15
- list(
- "key" = /obj/item/stock_parts/cell,
- "action" = ITEM_MOVE_INSIDE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Capacitor is secured."
- ),
-
- //16
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "The power cell is installed."
- ),
-
- //17
- list(
- "key" = /obj/item/stack/sheet/metal,
- "amount" = 5,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The power cell is secured."
- ),
-
- //18
- list(
- "key" = TOOL_WRENCH,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Internal armor is installed."
- ),
-
- //19
- list(
- "key" = TOOL_WELDER,
- "back_key" = TOOL_WRENCH,
- "desc" = "Internal armor is wrenched."
- ),
-
- //20
- list(
- "key" = /obj/item/mecha_parts/part/medigax_armor,
- "action" = ITEM_DELETE,
- "back_key" = TOOL_WELDER,
- "desc" = "Internal armor is welded."
- ),
-
- //21
- list(
- "key" = TOOL_WRENCH,
- "back_key" = TOOL_CROWBAR,
- "desc" = "External armor is installed."
- ),
-
- //22
- list(
- "key" = TOOL_WELDER,
- "back_key" = TOOL_WRENCH,
- "desc" = "External armor is wrenched."
- ),
-
- )
-
-/datum/component/construction/mecha/medigax/action(datum/source, atom/used_atom, mob/user)
- return check_step(used_atom,user)
-
-/datum/component/construction/mecha/medigax/custom_action(obj/item/I, mob/living/user, diff)
- if(!..())
- return FALSE
-
- switch(index)
- if(1)
- user.visible_message("[user] connects [parent] hydraulic systems", "You connect [parent] hydraulic systems.")
- if(2)
- if(diff==FORWARD)
- user.visible_message("[user] activates [parent] hydraulic systems.", "You activate [parent] hydraulic systems.")
- else
- user.visible_message("[user] disconnects [parent] hydraulic systems", "You disconnect [parent] hydraulic systems.")
- if(3)
- if(diff==FORWARD)
- user.visible_message("[user] adds the wiring to [parent].", "You add the wiring to [parent].")
- else
- user.visible_message("[user] deactivates [parent] hydraulic systems.", "You deactivate [parent] hydraulic systems.")
- if(4)
- if(diff==FORWARD)
- user.visible_message("[user] adjusts the wiring of [parent].", "You adjust the wiring of [parent].")
- else
- user.visible_message("[user] removes the wiring from [parent].", "You remove the wiring from [parent].")
- if(5)
- if(diff==FORWARD)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
- else
- user.visible_message("[user] disconnects the wiring of [parent].", "You disconnect the wiring of [parent].")
- if(6)
- if(diff==FORWARD)
- user.visible_message("[user] secures the mainboard.", "You secure the mainboard.")
- else
- user.visible_message("[user] removes the central control module from [parent].", "You remove the central computer mainboard from [parent].")
- if(7)
- if(diff==FORWARD)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
- else
- user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.")
- if(8)
- if(diff==FORWARD)
- user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.")
- else
- user.visible_message("[user] removes the peripherals control module from [parent].", "You remove the peripherals control module from [parent].")
- if(9)
- if(diff==FORWARD)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
- else
- user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.")
- if(10)
- if(diff==FORWARD)
- user.visible_message("[user] secures the weapon control module.", "You secure the weapon control module.")
- else
- user.visible_message("[user] removes the weapon control module from [parent].", "You remove the weapon control module from [parent].")
- if(11)
- if(diff==FORWARD)
- user.visible_message("[user] installs [I] to [parent].", "You install [I] to [parent].")
- else
- user.visible_message("[user] unfastens the weapon control module.", "You unfasten the weapon control module.")
- if(12)
- if(diff==FORWARD)
- user.visible_message("[user] secures the scanner module.", "You secure the scanner module.")
- else
- user.visible_message("[user] removes the scanner module from [parent].", "You remove the scanner module from [parent].")
- if(13)
- if(diff==FORWARD)
- user.visible_message("[user] installs [I] to [parent].", "You install [I] to [parent].")
- else
- user.visible_message("[user] unfastens the scanner module.", "You unfasten the scanner module.")
- if(14)
- if(diff==FORWARD)
- user.visible_message("[user] secures the capacitor.", "You secure the capacitor.")
- else
- user.visible_message("[user] removes the capacitor from [parent].", "You remove the capacitor from [parent].")
- if(15)
- if(diff==FORWARD)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
- else
- user.visible_message("[user] unfastens the capacitor.", "You unfasten the capacitor.")
- if(16)
- if(diff==FORWARD)
- user.visible_message("[user] secures the power cell.", "You secure the power cell.")
- else
- user.visible_message("[user] pries the power cell from [parent].", "You pry the power cell from [parent].")
- if(17)
- if(diff==FORWARD)
- user.visible_message("[user] installs the internal armor layer to [parent].", "You install the internal armor layer to [parent].")
- else
- user.visible_message("[user] unfastens the power cell.", "You unfasten the power cell.")
- if(18)
- if(diff==FORWARD)
- user.visible_message("[user] secures the internal armor layer.", "You secure the internal armor layer.")
- else
- user.visible_message("[user] pries internal armor layer from [parent].", "You pry internal armor layer from [parent].")
- if(19)
- if(diff==FORWARD)
- user.visible_message("[user] welds the internal armor layer to [parent].", "You weld the internal armor layer to [parent].")
- else
- user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.")
- if(20)
- if(diff==FORWARD)
- user.visible_message("[user] installs [I] to [parent].", "You install [I] to [parent].")
- else
- user.visible_message("[user] cuts the internal armor layer from [parent].", "You cut the internal armor layer from [parent].")
- if(21)
- if(diff==FORWARD)
- user.visible_message("[user] secures Gygax Armor Plates.", "You secure Medical Gygax Armor Plates.")
- else
- user.visible_message("[user] pries Gygax Armor Plates from [parent].", "You pry Medical Gygax Armor Plates from [parent].")
- if(22)
- if(diff==FORWARD)
- user.visible_message("[user] welds Gygax Armor Plates to [parent].", "You weld Medical Gygax Armor Plates to [parent].")
- else
- user.visible_message("[user] unfastens Gygax Armor Plates.", "You unfasten Medical Gygax Armor Plates.")
- return TRUE
-// End Medigax
-
-/datum/component/construction/unordered/mecha_chassis/firefighter
- result = /datum/component/construction/mecha/firefighter
- steps = list(
- /obj/item/mecha_parts/part/ripley_torso,
- /obj/item/mecha_parts/part/ripley_left_arm,
- /obj/item/mecha_parts/part/ripley_right_arm,
- /obj/item/mecha_parts/part/ripley_left_leg,
- /obj/item/mecha_parts/part/ripley_right_leg,
- /obj/item/clothing/suit/fire
- )
-
-/datum/component/construction/mecha/firefighter
- result = /obj/mecha/working/ripley/firefighter
- base_icon = "fireripley"
- steps = list(
- //1
- list(
- "key" = TOOL_WRENCH,
- "desc" = "The hydraulic systems are disconnected."
- ),
-
- //2
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_WRENCH,
- "desc" = "The hydraulic systems are connected."
- ),
-
- //3
- list(
- "key" = /obj/item/stack/cable_coil,
- "amount" = 5,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The hydraulic systems are active."
- ),
-
- //4
- list(
- "key" = TOOL_WIRECUTTER,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The wiring is added."
- ),
-
- //5
- list(
- "key" = /obj/item/circuitboard/mecha/ripley/main,
- "action" = ITEM_DELETE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The wiring is adjusted."
- ),
-
- //6
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Central control module is installed."
- ),
-
- //7
- list(
- "key" = /obj/item/circuitboard/mecha/ripley/peripherals,
- "action" = ITEM_DELETE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Central control module is secured."
- ),
-
- //8
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Peripherals control module is installed."
- ),
-
- //9
- list(
- "key" = /obj/item/stock_parts/scanning_module,
- "action" = ITEM_MOVE_INSIDE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Peripherals control module is secured."
- ),
-
- //10
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "The scanner module is installed."
- ),
-
- //11
- list(
- "key" = /obj/item/stock_parts/capacitor,
- "action" = ITEM_MOVE_INSIDE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The scanner module is secured."
- ),
-
- //12
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "The capacitor is installed."
- ),
-
- //13
- list(
- "key" = /obj/item/stock_parts/cell,
- "action" = ITEM_MOVE_INSIDE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The capacitor is secured."
- ),
-
- //14
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "The power cell is installed."
- ),
-
- //15
- list(
- "key" = /obj/item/stack/sheet/plasteel,
- "amount" = 5,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The power cell is secured."
- ),
-
- //16
- list(
- "key" = TOOL_WRENCH,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Internal armor is installed."
- ),
-
- //17
- list(
- "key" = TOOL_WELDER,
- "back_key" = TOOL_WRENCH,
- "desc" = "Internal armor is wrenched."
- ),
-
- //18
- list(
- "key" = /obj/item/stack/sheet/plasteel,
- "amount" = 5,
- "back_key" = TOOL_WELDER,
- "desc" = "Internal armor is welded."
- ),
-
- //19
- list(
- "key" = /obj/item/stack/sheet/plasteel,
- "amount" = 5,
- "back_key" = TOOL_CROWBAR,
- "desc" = "External armor is being installed."
- ),
-
- //20
- list(
- "key" = TOOL_WRENCH,
- "back_key" = TOOL_CROWBAR,
- "desc" = "External armor is installed."
- ),
-
- //21
- list(
- "key" = TOOL_WELDER,
- "back_key" = TOOL_WRENCH,
- "desc" = "External armor is wrenched."
- ),
- )
-
-/datum/component/construction/mecha/firefighter/custom_action(obj/item/I, mob/living/user, diff)
- if(!..())
- return FALSE
-
- //TODO: better messages.
- switch(index)
- if(1)
- user.visible_message("[user] connects [parent] hydraulic systems", "You connect [parent] hydraulic systems.")
- if(2)
- if(diff==FORWARD)
- user.visible_message("[user] activates [parent] hydraulic systems.", "You activate [parent] hydraulic systems.")
- else
- user.visible_message("[user] disconnects [parent] hydraulic systems", "You disconnect [parent] hydraulic systems.")
- if(3)
- if(diff==FORWARD)
- user.visible_message("[user] adds the wiring to [parent].", "You add the wiring to [parent].")
- else
- user.visible_message("[user] deactivates [parent] hydraulic systems.", "You deactivate [parent] hydraulic systems.")
- if(4)
- if(diff==FORWARD)
- user.visible_message("[user] adjusts the wiring of [parent].", "You adjust the wiring of [parent].")
- else
- user.visible_message("[user] removes the wiring from [parent].", "You remove the wiring from [parent].")
- if(5)
- if(diff==FORWARD)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
- else
- user.visible_message("[user] disconnects the wiring of [parent].", "You disconnect the wiring of [parent].")
- if(6)
- if(diff==FORWARD)
- user.visible_message("[user] secures the mainboard.", "You secure the mainboard.")
- else
- user.visible_message("[user] removes the central control module from [parent].", "You remove the central computer mainboard from [parent].")
- if(7)
- if(diff==FORWARD)
- user.visible_message("[user] installs [I]into [parent].", "You install [I]into [parent].")
- else
- user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.")
- if(8)
- if(diff==FORWARD)
- user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.")
- else
- user.visible_message("[user] removes the peripherals control module from [parent].", "You remove the peripherals control module from [parent].")
- if(9)
- if(diff==FORWARD)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
- else
- user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.")
- if(10)
- if(diff==FORWARD)
- user.visible_message("[user] secures the scanner module.", "You secure the scanner module.")
- else
- user.visible_message("[user] removes the scanner module from [parent].", "You remove the scanner module from [parent].")
- if(12)
- if(diff==FORWARD)
- user.visible_message("[user] installs [I] to [parent].", "You install [I] to [parent].")
- else
- user.visible_message("[user] unfastens the scanner module.", "You unfasten the scanner module.")
- if(13)
- if(diff==FORWARD)
- user.visible_message("[user] secures the capacitor.", "You secure the capacitor.")
- else
- user.visible_message("[user] removes the capacitor from [parent].", "You remove the capacitor from [parent].")
- if(14)
- if(diff==FORWARD)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
- else
- user.visible_message("[user] unfastens the capacitor.", "You unfasten the capacitor.")
- if(15)
- if(diff==FORWARD)
- user.visible_message("[user] secures the power cell.", "You secure the power cell.")
- else
- user.visible_message("[user] pries the power cell from [parent].", "You pry the power cell from [parent].")
- if(16)
- if(diff==FORWARD)
- user.visible_message("[user] installs the internal armor layer to [parent].", "You install the internal armor layer to [parent].")
- else
- user.visible_message("[user] unfastens the power cell.", "You unfasten the power cell.")
- if(17)
- if(diff==FORWARD)
- user.visible_message("[user] secures the internal armor layer.", "You secure the internal armor layer.")
- else
- user.visible_message("[user] pries internal armor layer from [parent].", "You pry internal armor layer from [parent].")
- if(18)
- if(diff==FORWARD)
- user.visible_message("[user] welds the internal armor layer to [parent].", "You weld the internal armor layer to [parent].")
- else
- user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.")
- if(19)
- if(diff==FORWARD)
- user.visible_message("[user] starts to install the external armor layer to [parent].", "You install the external armor layer to [parent].")
- else
- user.visible_message("[user] cuts the internal armor layer from [parent].", "You cut the internal armor layer from [parent].")
- if(20)
- if(diff==FORWARD)
- user.visible_message("[user] installs the external reinforced armor layer to [parent].", "You install the external reinforced armor layer to [parent].")
- else
- user.visible_message("[user] removes the external armor from [parent].", "You remove the external armor from [parent].")
- if(21)
- if(diff==FORWARD)
- user.visible_message("[user] secures the external armor layer.", "You secure the external reinforced armor layer.")
- else
- user.visible_message("[user] pries external armor layer from [parent].", "You pry external armor layer from [parent].")
- if(22)
- if(diff==FORWARD)
- user.visible_message("[user] welds the external armor layer to [parent].", "You weld the external armor layer to [parent].")
- else
- user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.")
- return TRUE
-
-/datum/component/construction/unordered/mecha_chassis/honker
- result = /datum/component/construction/mecha/honker
- steps = list(
- /obj/item/mecha_parts/part/honker_torso,
- /obj/item/mecha_parts/part/honker_left_arm,
- /obj/item/mecha_parts/part/honker_right_arm,
- /obj/item/mecha_parts/part/honker_left_leg,
- /obj/item/mecha_parts/part/honker_right_leg,
- /obj/item/mecha_parts/part/honker_head
- )
-
-
-/datum/component/construction/mecha/honker
- result = /obj/mecha/combat/honker
- steps = list(
- //1
- list(
- "key" = /obj/item/bikehorn
- ),
-
- //2
- list(
- "key" = /obj/item/circuitboard/mecha/honker/main,
- "action" = ITEM_DELETE
- ),
-
- //3
- list(
- "key" = /obj/item/bikehorn
- ),
-
- //4
- list(
- "key" = /obj/item/circuitboard/mecha/honker/peripherals,
- "action" = ITEM_DELETE
- ),
-
- //5
- list(
- "key" = /obj/item/bikehorn
- ),
-
- //6
- list(
- "key" = /obj/item/circuitboard/mecha/honker/targeting,
- "action" = ITEM_DELETE
- ),
-
- //7
- list(
- "key" = /obj/item/bikehorn
- ),
-
- //6
- list(
- "key" = /obj/item/stock_parts/scanning_module,
- "action" = ITEM_MOVE_INSIDE
- ),
-
- //8
- list(
- "key" = /obj/item/bikehorn
- ),
-
- //9
- list(
- "key" = /obj/item/stock_parts/capacitor,
- "action" = ITEM_MOVE_INSIDE
- ),
-
- //10
- list(
- "key" = /obj/item/bikehorn
- ),
-
- //11
- list(
- "key" = /obj/item/stock_parts/cell,
- "action" = ITEM_MOVE_INSIDE
- ),
-
- //12
- list(
- "key" = /obj/item/bikehorn
- ),
-
- //13
- list(
- "key" = /obj/item/clothing/mask/gas/clown_hat,
- "action" = ITEM_DELETE
- ),
-
- //14
- list(
- "key" = /obj/item/bikehorn
- ),
-
- //15
- list(
- "key" = /obj/item/clothing/shoes/clown_shoes,
- "action" = ITEM_DELETE
- ),
-
- //16
- list(
- "key" = /obj/item/bikehorn
- ),
- )
-
-// HONK doesn't have any construction step icons, so we just set an icon once.
-/datum/component/construction/mecha/honker/update_parent(step_index)
- if(step_index == 1)
- var/atom/parent_atom = parent
- parent_atom.icon = 'icons/mecha/mech_construct.dmi'
- parent_atom.icon_state = "honker_chassis"
- ..()
-// HONK doesn't have any construction step icons, so we just set an icon once.
-/datum/component/construction/mecha/honker/update_parent(step_index)
- if(step_index == 1)
- var/atom/parent_atom = parent
- parent_atom.icon = 'icons/mecha/mech_construct.dmi'
- parent_atom.icon_state = "honker_chassis"
- ..()
-
-/datum/component/construction/mecha/honker/custom_action(obj/item/I, mob/living/user, diff)
- if(!..())
- return FALSE
-
- if(istype(I, /obj/item/bikehorn))
- playsound(parent, 'sound/items/bikehorn.ogg', 50, 1)
- user.visible_message("HONK!")
-
- //TODO: better messages.
- switch(index)
- if(2)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
- if(4)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
- if(6)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
- if(8)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
- if(10)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
- if(12)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
- if(14)
- user.visible_message("[user] puts [I] on [parent].", "You put [I] on [parent].")
- if(16)
- user.visible_message("[user] puts [I] on [parent].", "You put [I] on [parent].")
- return TRUE
-
-/datum/component/construction/unordered/mecha_chassis/durand
- result = /datum/component/construction/mecha/durand
- steps = list(
- /obj/item/mecha_parts/part/durand_torso,
- /obj/item/mecha_parts/part/durand_left_arm,
- /obj/item/mecha_parts/part/durand_right_arm,
- /obj/item/mecha_parts/part/durand_left_leg,
- /obj/item/mecha_parts/part/durand_right_leg,
- /obj/item/mecha_parts/part/durand_head
- )
-
-/datum/component/construction/mecha/durand
- result = /obj/mecha/combat/durand
- base_icon = "durand"
- steps = list(
- //1
- list(
- "key" = TOOL_WRENCH,
- "desc" = "The hydraulic systems are disconnected."
- ),
-
- //2
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_WRENCH,
- "desc" = "The hydraulic systems are connected."
- ),
-
- //3
- list(
- "key" = /obj/item/stack/cable_coil,
- "amount" = 5,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The hydraulic systems are active."
- ),
-
- //4
- list(
- "key" = TOOL_WIRECUTTER,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The wiring is added."
- ),
-
- //5
- list(
- "key" = /obj/item/circuitboard/mecha/durand/main,
- "action" = ITEM_DELETE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The wiring is adjusted."
- ),
-
- //6
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Central control module is installed."
- ),
-
- //7
- list(
- "key" = /obj/item/circuitboard/mecha/durand/peripherals,
- "action" = ITEM_DELETE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Central control module is secured."
- ),
-
- //8
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Peripherals control module is installed."
- ),
-
- //9
- list(
- "key" = /obj/item/circuitboard/mecha/durand/targeting,
- "action" = ITEM_DELETE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Peripherals control module is secured."
- ),
-
- //10
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Weapon control module is installed."
- ),
-
- //11
- list(
- "key" = /obj/item/stock_parts/scanning_module,
- "action" = ITEM_MOVE_INSIDE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Weapon control module is secured."
- ),
-
- //12
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Scanner module is installed."
- ),
-
- //13
- list(
- "key" = /obj/item/stock_parts/capacitor,
- "action" = ITEM_MOVE_INSIDE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Scanner module is secured."
- ),
-
- //14
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Capacitor is installed."
- ),
-
- //15
- list(
- "key" = /obj/item/stock_parts/cell,
- "action" = ITEM_MOVE_INSIDE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Capacitor is secured."
- ),
-
- //16
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "The power cell is installed."
- ),
-
- //17
- list(
- "key" = /obj/item/stack/sheet/metal,
- "amount" = 5,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The power cell is secured."
- ),
-
- //18
- list(
- "key" = TOOL_WRENCH,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Internal armor is installed."
- ),
-
- //19
- list(
- "key" = TOOL_WELDER,
- "back_key" = TOOL_WRENCH,
- "desc" = "Internal armor is wrenched."
- ),
-
- //20
- list(
- "key" = /obj/item/mecha_parts/part/durand_armor,
- "action" = ITEM_DELETE,
- "back_key" = TOOL_WELDER,
- "desc" = "Internal armor is welded."
- ),
-
- //21
- list(
- "key" = TOOL_WRENCH,
- "back_key" = TOOL_CROWBAR,
- "desc" = "External armor is installed."
- ),
-
- //22
- list(
- "key" = TOOL_WELDER,
- "back_key" = TOOL_WRENCH,
- "desc" = "External armor is wrenched."
- ),
- )
-
-
-/datum/component/construction/mecha/durand/custom_action(obj/item/I, mob/living/user, diff)
- if(!..())
- return FALSE
-
- //TODO: better messages.
- switch(index)
- if(1)
- user.visible_message("[user] connects [parent] hydraulic systems", "You connect [parent] hydraulic systems.")
- if(2)
- if(diff==FORWARD)
- user.visible_message("[user] activates [parent] hydraulic systems.", "You activate [parent] hydraulic systems.")
- else
- user.visible_message("[user] disconnects [parent] hydraulic systems", "You disconnect [parent] hydraulic systems.")
- if(3)
- if(diff==FORWARD)
- user.visible_message("[user] adds the wiring to [parent].", "You add the wiring to [parent].")
- else
- user.visible_message("[user] deactivates [parent] hydraulic systems.", "You deactivate [parent] hydraulic systems.")
- if(4)
- if(diff==FORWARD)
- user.visible_message("[user] adjusts the wiring of [parent].", "You adjust the wiring of [parent].")
- else
- user.visible_message("[user] removes the wiring from [parent].", "You remove the wiring from [parent].")
- if(5)
- if(diff==FORWARD)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
- else
- user.visible_message("[user] disconnects the wiring of [parent].", "You disconnect the wiring of [parent].")
- if(6)
- if(diff==FORWARD)
- user.visible_message("[user] secures the mainboard.", "You secure the mainboard.")
- else
- user.visible_message("[user] removes the central control module from [parent].", "You remove the central computer mainboard from [parent].")
- if(7)
- if(diff==FORWARD)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
- else
- user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.")
- if(8)
- if(diff==FORWARD)
- user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.")
- else
- user.visible_message("[user] removes the peripherals control module from [parent].", "You remove the peripherals control module from [parent].")
- if(9)
- if(diff==FORWARD)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
- else
- user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.")
- if(10)
- if(diff==FORWARD)
- user.visible_message("[user] secures the weapon control module.", "You secure the weapon control module.")
- else
- user.visible_message("[user] removes the weapon control module from [parent].", "You remove the weapon control module from [parent].")
- if(11)
- if(diff==FORWARD)
- user.visible_message("[user] installs [I] to [parent].", "You install [I] to [parent].")
- else
- user.visible_message("[user] unfastens the weapon control module.", "You unfasten the weapon control module.")
- if(12)
- if(diff==FORWARD)
- user.visible_message("[user] secures the scanner module.", "You secure the scanner module.")
- else
- user.visible_message("[user] removes the scanner module from [parent].", "You remove the scanner module from [parent].")
- if(13)
- if(diff==FORWARD)
- user.visible_message("[user] installs [I] to [parent].", "You install [I] to [parent].")
- else
- user.visible_message("[user] unfastens the scanner module.", "You unfasten the scanner module.")
- if(14)
- if(diff==FORWARD)
- user.visible_message("[user] secures the capacitor.", "You secure the capacitor.")
- else
- user.visible_message("[user] removes the capacitor from [parent].", "You remove the capacitor from [parent].")
- if(15)
- if(diff==FORWARD)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
- else
- user.visible_message("[user] unfastens the capacitor.", "You unfasten the capacitor.")
- if(16)
- if(diff==FORWARD)
- user.visible_message("[user] secures the power cell.", "You secure the power cell.")
- else
- user.visible_message("[user] pries the power cell from [parent].", "You pry the power cell from [parent].")
- if(17)
- if(diff==FORWARD)
- user.visible_message("[user] installs the internal armor layer to [parent].", "You install the internal armor layer to [parent].")
- else
- user.visible_message("[user] unfastens the power cell.", "You unfasten the power cell.")
- if(18)
- if(diff==FORWARD)
- user.visible_message("[user] secures the internal armor layer.", "You secure the internal armor layer.")
- else
- user.visible_message("[user] pries internal armor layer from [parent].", "You pry internal armor layer from [parent].")
- if(19)
- if(diff==FORWARD)
- user.visible_message("[user] welds the internal armor layer to [parent].", "You weld the internal armor layer to [parent].")
- else
- user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.")
- if(20)
- if(diff==FORWARD)
- user.visible_message("[user] installs [I] to [parent].", "You install [I] to [parent].")
- else
- user.visible_message("[user] cuts the internal armor layer from [parent].", "You cut the internal armor layer from [parent].")
- if(21)
- if(diff==FORWARD)
- user.visible_message("[user] secures Durand Armor Plates.", "You secure Durand Armor Plates.")
- else
- user.visible_message("[user] pries Durand Armor Plates from [parent].", "You pry Durand Armor Plates from [parent].")
- if(22)
- if(diff==FORWARD)
- user.visible_message("[user] welds Durand Armor Plates to [parent].", "You weld Durand Armor Plates to [parent].")
- else
- user.visible_message("[user] unfastens Durand Armor Plates.", "You unfasten Durand Armor Plates.")
- return TRUE
-
-//PHAZON
-
-/datum/component/construction/unordered/mecha_chassis/phazon
- result = /datum/component/construction/mecha/phazon
- steps = list(
- /obj/item/mecha_parts/part/phazon_torso,
- /obj/item/mecha_parts/part/phazon_left_arm,
- /obj/item/mecha_parts/part/phazon_right_arm,
- /obj/item/mecha_parts/part/phazon_left_leg,
- /obj/item/mecha_parts/part/phazon_right_leg,
- /obj/item/mecha_parts/part/phazon_head
- )
-
-/datum/component/construction/mecha/phazon
- result = /obj/mecha/combat/phazon
- base_icon = "phazon"
- steps = list(
- //1
- list(
- "key" = TOOL_WRENCH,
- "desc" = "The hydraulic systems are disconnected."
- ),
-
- //2
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_WRENCH,
- "desc" = "The hydraulic systems are connected."
- ),
-
- //3
- list(
- "key" = /obj/item/stack/cable_coil,
- "amount" = 5,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The hydraulic systems are active."
- ),
-
- //4
- list(
- "key" = TOOL_WIRECUTTER,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The wiring is added."
- ),
-
- //5
- list(
- "key" = /obj/item/circuitboard/mecha/phazon/main,
- "action" = ITEM_DELETE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The wiring is adjusted."
- ),
-
- //6
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Central control module is installed."
- ),
-
- //7
- list(
- "key" = /obj/item/circuitboard/mecha/phazon/peripherals,
- "action" = ITEM_DELETE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Central control module is secured."
- ),
-
- //8
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Peripherals control module is installed"
- ),
-
- //9
- list(
- "key" = /obj/item/circuitboard/mecha/phazon/targeting,
- "action" = ITEM_DELETE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Peripherals control module is secured."
- ),
-
- //10
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Weapon control is installed."
- ),
-
- //11
- list(
- "key" = /obj/item/stock_parts/scanning_module,
- "action" = ITEM_MOVE_INSIDE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Weapon control module is secured."
- ),
-
- //12
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Scanner module is installed."
- ),
-
- //13
- list(
- "key" = /obj/item/stock_parts/capacitor,
- "action" = ITEM_MOVE_INSIDE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Scanner module is secured."
- ),
-
- //14
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Capacitor is installed."
- ),
-
- //15
- list(
- "key" = /obj/item/stack/ore/bluespace_crystal,
- "amount" = 1,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Capacitor is secured."
- ),
-
- //16
- list(
- "key" = /obj/item/stack/cable_coil,
- "amount" = 5,
- "back_key" = TOOL_CROWBAR,
- "desc" = "The bluespace crystal is installed."
- ),
-
- //17
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_WIRECUTTER,
- "desc" = "The bluespace crystal is connected."
- ),
-
- //18
- list(
- "key" = /obj/item/stock_parts/cell,
- "action" = ITEM_MOVE_INSIDE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The bluespace crystal is engaged."
- ),
-
- //19
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "The power cell is installed.",
- "icon_state" = "phazon17"
- // This is the point where a step icon is skipped, so "icon_state" had to be set manually starting from here.
- ),
-
- //20
- list(
- "key" = /obj/item/stack/sheet/plasteel,
- "amount" = 5,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The power cell is secured.",
- "icon_state" = "phazon18"
- ),
-
- //21
- list(
- "key" = TOOL_WRENCH,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Phase armor is installed.",
- "icon_state" = "phazon19"
- ),
-
- //22
- list(
- "key" = TOOL_WELDER,
- "back_key" = TOOL_WRENCH,
- "desc" = "Phase armor is wrenched.",
- "icon_state" = "phazon20"
- ),
-
- //23
- list(
- "key" = /obj/item/mecha_parts/part/phazon_armor,
- "action" = ITEM_DELETE,
- "back_key" = TOOL_WELDER,
- "desc" = "Phase armor is welded.",
- "icon_state" = "phazon21"
- ),
-
- //24
- list(
- "key" = TOOL_WRENCH,
- "back_key" = TOOL_CROWBAR,
- "desc" = "External armor is installed.",
- "icon_state" = "phazon22"
- ),
-
- //25
- list(
- "key" = TOOL_WELDER,
- "back_key" = TOOL_WRENCH,
- "desc" = "External armor is wrenched.",
- "icon_state" = "phazon23"
- ),
-
- //26
- list(
- "key" = /obj/item/assembly/signaler/anomaly,
- "action" = ITEM_DELETE,
- "back_key" = TOOL_WELDER,
- "desc" = "Anomaly core socket is open.",
- "icon_state" = "phazon24"
- ),
- )
-
-
-/datum/component/construction/mecha/phazon/custom_action(obj/item/I, mob/living/user, diff)
- if(!..())
- return FALSE
-
- //TODO: better messages.
- switch(index)
- if(1)
- user.visible_message("[user] connects [parent] hydraulic systems", "You connect [parent] hydraulic systems.")
- if(2)
- if(diff==FORWARD)
- user.visible_message("[user] activates [parent] hydraulic systems.", "You activate [parent] hydraulic systems.")
- else
- user.visible_message("[user] disconnects [parent] hydraulic systems", "You disconnect [parent] hydraulic systems.")
- if(3)
- if(diff==FORWARD)
- user.visible_message("[user] adds the wiring to [parent].", "You add the wiring to [parent].")
- else
- user.visible_message("[user] deactivates [parent] hydraulic systems.", "You deactivate [parent] hydraulic systems.")
- if(4)
- if(diff==FORWARD)
- user.visible_message("[user] adjusts the wiring of [parent].", "You adjust the wiring of [parent].")
- else
- user.visible_message("[user] removes the wiring from [parent].", "You remove the wiring from [parent].")
- if(5)
- if(diff==FORWARD)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
- else
- user.visible_message("[user] disconnects the wiring of [parent].", "You disconnect the wiring of [parent].")
- if(6)
- if(diff==FORWARD)
- user.visible_message("[user] secures the mainboard.", "You secure the mainboard.")
- else
- user.visible_message("[user] removes the central control module from [parent].", "You remove the central computer mainboard from [parent].")
- if(7)
- if(diff==FORWARD)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
- else
- user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.")
- if(8)
- if(diff==FORWARD)
- user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.")
- else
- user.visible_message("[user] removes the peripherals control module from [parent].", "You remove the peripherals control module from [parent].")
- if(9)
- if(diff==FORWARD)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
- else
- user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.")
- if(10)
- if(diff==FORWARD)
- user.visible_message("[user] secures the weapon control module.", "You secure the weapon control module.")
- else
- user.visible_message("[user] removes the weapon control module from [parent].", "You remove the weapon control module from [parent].")
- if(11)
- if(diff==FORWARD)
- user.visible_message("[user] installs [I] to [parent].", "You install [I] to [parent].")
- else
- user.visible_message("[user] unfastens the weapon control module.", "You unfasten the weapon control module.")
- if(12)
- if(diff==FORWARD)
- user.visible_message("[user] secures the scanner module.", "You secure the scanner module.")
- else
- user.visible_message("[user] removes the scanner module from [parent].", "You remove the scanner module from [parent].")
- if(13)
- if(diff==FORWARD)
- user.visible_message("[user] installs [I] to [parent].", "You install [I] to [parent].")
- else
- user.visible_message("[user] unfastens the scanner module.", "You unfasten the scanner module.")
- if(14)
- if(diff==FORWARD)
- user.visible_message("[user] secures [I].", "You secure [I].")
- else
- user.visible_message("[user] removes the capacitor from [parent].", "You remove the capacitor from [parent].")
- if(15)
- if(diff==FORWARD)
- user.visible_message("[user] installs [I].", "You install [I].")
- else
- user.visible_message("[user] unsecures the capacitor from [parent].", "You unsecure the capacitor from [parent].")
- if(16)
- if(diff==FORWARD)
- user.visible_message("[user] connects the bluespace crystal.", "You connect the bluespace crystal.")
- else
- user.visible_message("[user] removes the bluespace crystal from [parent].", "You remove the bluespace crystal from [parent].")
- if(17)
- if(diff==FORWARD)
- user.visible_message("[user] engages the bluespace crystal.", "You engage the bluespace crystal.")
- else
- user.visible_message("[user] disconnects the bluespace crystal from [parent].", "You disconnect the bluespace crystal from [parent].")
- if(18)
- if(diff==FORWARD)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
- else
- user.visible_message("[user] disengages the bluespace crystal.", "You disengage the bluespace crystal.")
- if(19)
- if(diff==FORWARD)
- user.visible_message("[user] secures the power cell.", "You secure the power cell.")
- else
- user.visible_message("[user] pries the power cell from [parent].", "You pry the power cell from [parent].")
- if(20)
- if(diff==FORWARD)
- user.visible_message("[user] installs the phase armor layer to [parent].", "You install the phase armor layer to [parent].")
- else
- user.visible_message("[user] unfastens the power cell.", "You unfasten the power cell.")
- if(21)
- if(diff==FORWARD)
- user.visible_message("[user] secures the phase armor layer.", "You secure the phase armor layer.")
- else
- user.visible_message("[user] pries the phase armor layer from [parent].", "You pry the phase armor layer from [parent].")
- if(22)
- if(diff==FORWARD)
- user.visible_message("[user] welds the phase armor layer to [parent].", "You weld the phase armor layer to [parent].")
- else
- user.visible_message("[user] unfastens the phase armor layer.", "You unfasten the phase armor layer.")
- if(23)
- if(diff==FORWARD)
- user.visible_message("[user] installs [I] to [parent].", "You install [I] to [parent].")
- else
- user.visible_message("[user] cuts phase armor layer from [parent].", "You cut the phase armor layer from [parent].")
- if(24)
- if(diff==FORWARD)
- user.visible_message("[user] secures Phazon Armor Plates.", "You secure Phazon Armor Plates.")
- else
- user.visible_message("[user] pries Phazon Armor Plates from [parent].", "You pry Phazon Armor Plates from [parent].")
- if(25)
- if(diff==FORWARD)
- user.visible_message("[user] welds Phazon Armor Plates to [parent].", "You weld Phazon Armor Plates to [parent].")
- else
- user.visible_message("[user] unfastens Phazon Armor Plates.", "You unfasten Phazon Armor Plates.")
- if(26)
- if(diff==FORWARD)
- user.visible_message("[user] carefully inserts the anomaly core into [parent] and secures it.",
- "You slowly place the anomaly core into its socket and close its chamber.")
- return TRUE
-
-//ODYSSEUS
-
-/datum/component/construction/unordered/mecha_chassis/odysseus
- result = /datum/component/construction/mecha/odysseus
- steps = list(
- /obj/item/mecha_parts/part/odysseus_torso,
- /obj/item/mecha_parts/part/odysseus_head,
- /obj/item/mecha_parts/part/odysseus_left_arm,
- /obj/item/mecha_parts/part/odysseus_right_arm,
- /obj/item/mecha_parts/part/odysseus_left_leg,
- /obj/item/mecha_parts/part/odysseus_right_leg
- )
-
-/datum/component/construction/mecha/odysseus
- result = /obj/mecha/medical/odysseus
- base_icon = "odysseus"
- steps = list(
- //1
- list(
- "key" = TOOL_WRENCH,
- "desc" = "The hydraulic systems are disconnected."
- ),
-
- //2
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_WRENCH,
- "desc" = "The hydraulic systems are connected."
- ),
-
- //3
- list(
- "key" = /obj/item/stack/cable_coil,
- "amount" = 5,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The hydraulic systems are active."
- ),
-
- //4
- list(
- "key" = TOOL_WIRECUTTER,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The wiring is added."
- ),
-
- //5
- list(
- "key" = /obj/item/circuitboard/mecha/odysseus/main,
- "action" = ITEM_DELETE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The wiring is adjusted."
- ),
-
- //6
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Central control module is installed."
- ),
-
- //7
- list(
- "key" = /obj/item/circuitboard/mecha/odysseus/peripherals,
- "action" = ITEM_DELETE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Central control module is secured."
- ),
-
- //8
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Peripherals control module is installed."
- ),
- //9
- list(
- "key" = /obj/item/stock_parts/scanning_module,
- "action" = ITEM_MOVE_INSIDE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Peripherals control module is secured."
- ),
-
- //10
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Scanner module is installed."
- ),
-
- //11
- list(
- "key" = /obj/item/stock_parts/capacitor,
- "action" = ITEM_MOVE_INSIDE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Scanner module is secured."
- ),
-
- //12
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Capacitor is installed."
- ),
-
- //13
- list(
- "key" = /obj/item/stock_parts/cell,
- "action" = ITEM_MOVE_INSIDE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Capacitor is secured."
- ),
-
- //11
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "The power cell is installed."
- ),
-
- //12
- list(
- "key" = /obj/item/stack/sheet/metal,
- "amount" = 5,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The power cell is secured."
- ),
-
- //13
- list(
- "key" = TOOL_WRENCH,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Internal armor is installed."
- ),
-
- //14
- list(
- "key" = TOOL_WELDER,
- "back_key" = TOOL_WRENCH,
- "desc" = "Internal armor is wrenched."
- ),
-
- //15
- list(
- "key" = /obj/item/stack/sheet/plasteel,
- "amount" = 5,
- "back_key" = TOOL_WELDER,
- "desc" = "Internal armor is welded."
- ),
-
- //16
- list(
- "key" = TOOL_WRENCH,
- "back_key" = TOOL_CROWBAR,
- "desc" = "External armor is installed."
- ),
-
- //17
- list(
- "key" = TOOL_WELDER,
- "back_key" = TOOL_WRENCH,
- "desc" = "External armor is wrenched."
- ),
- )
-
-/datum/component/construction/mecha/odysseus/custom_action(obj/item/I, mob/living/user, diff)
- if(!..())
- return FALSE
-
- //TODO: better messages.
- switch(index)
- if(1)
- user.visible_message("[user] connects [parent] hydraulic systems", "You connect [parent] hydraulic systems.")
- if(2)
- if(diff==FORWARD)
- user.visible_message("[user] activates [parent] hydraulic systems.", "You activate [parent] hydraulic systems.")
- else
- user.visible_message("[user] disconnects [parent] hydraulic systems", "You disconnect [parent] hydraulic systems.")
- if(3)
- if(diff==FORWARD)
- user.visible_message("[user] adds the wiring to [parent].", "You add the wiring to [parent].")
- else
- user.visible_message("[user] deactivates [parent] hydraulic systems.", "You deactivate [parent] hydraulic systems.")
- if(4)
- if(diff==FORWARD)
- user.visible_message("[user] adjusts the wiring of [parent].", "You adjust the wiring of [parent].")
- else
- user.visible_message("[user] removes the wiring from [parent].", "You remove the wiring from [parent].")
- if(5)
- if(diff==FORWARD)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
- else
- user.visible_message("[user] disconnects the wiring of [parent].", "You disconnect the wiring of [parent].")
- if(6)
- if(diff==FORWARD)
- user.visible_message("[user] secures the mainboard.", "You secure the mainboard.")
- else
- user.visible_message("[user] removes the central control module from [parent].", "You remove the central computer mainboard from [parent].")
- if(7)
- if(diff==FORWARD)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
- else
- user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.")
- if(8)
- if(diff==FORWARD)
- user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.")
- else
- user.visible_message("[user] removes the peripherals control module from [parent].", "You remove the peripherals control module from [parent].")
- if(9)
- if(diff==FORWARD)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
- else
- user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.")
- if(10)
- if(diff==FORWARD)
- user.visible_message("[user] secures the scanner module.", "You secure the scanner module.")
- else
- user.visible_message("[user] removes the scanner module from [parent].", "You remove the scanner module from [parent].")
- if(11)
- if(diff==FORWARD)
- user.visible_message("[user] installs [I] to [parent].", "You install [I] to [parent].")
- else
- user.visible_message("[user] unfastens the scanner module.", "You unfasten the scanner module.")
- if(12)
- if(diff==FORWARD)
- user.visible_message("[user] secures the capacitor.", "You secure the capacitor.")
- else
- user.visible_message("[user] removes the capacitor from [parent].", "You remove the capacitor from [parent].")
- if(13)
- if(diff==FORWARD)
- user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
- else
- user.visible_message("[user] unfastens the capacitor.", "You unfasten the capacitor.")
- if(14)
- if(diff==FORWARD)
- user.visible_message("[user] secures the power cell.", "You secure the power cell.")
- else
- user.visible_message("[user] pries the power cell from [parent].", "You pry the power cell from [parent].")
- if(15)
- if(diff==FORWARD)
- user.visible_message("[user] installs the internal armor layer to [parent].", "You install the internal armor layer to [parent].")
- else
- user.visible_message("[user] unfastens the power cell.", "You unfasten the power cell.")
- if(16)
- if(diff==FORWARD)
- user.visible_message("[user] secures the internal armor layer.", "You secure the internal armor layer.")
- else
- user.visible_message("[user] pries internal armor layer from [parent].", "You pry internal armor layer from [parent].")
- if(17)
- if(diff==FORWARD)
- user.visible_message("[user] welds the internal armor layer to [parent].", "You weld the internal armor layer to [parent].")
- else
- user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.")
- if(18)
- if(diff==FORWARD)
- user.visible_message("[user] installs the external armor layer to [parent].", "You install the external reinforced armor layer to [parent].")
- else
- user.visible_message("[user] cuts the internal armor layer from [parent].", "You cut the internal armor layer from [parent].")
- if(19)
- if(diff==FORWARD)
- user.visible_message("[user] secures the external armor layer.", "You secure the external reinforced armor layer.")
- else
- user.visible_message("[user] pries the external armor layer from [parent].", "You pry the external armor layer from [parent].")
- if(20)
- if(diff==FORWARD)
- user.visible_message("[user] welds the external armor layer to [parent].", "You weld the external armor layer to [parent].")
- else
- user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.")
- return TRUE
diff --git a/code/game/mecha/mecha_defense.dm b/code/game/mecha/mecha_defense.dm
deleted file mode 100644
index 1db4cc30b9..0000000000
--- a/code/game/mecha/mecha_defense.dm
+++ /dev/null
@@ -1,334 +0,0 @@
-/obj/mecha/proc/get_armour_facing(relative_dir)
- switch(relative_dir)
- if(180) // BACKSTAB!
- return facing_modifiers[BACK_ARMOUR]
- if(0, 45) // direct or 45 degrees off
- return facing_modifiers[FRONT_ARMOUR]
- return facing_modifiers[SIDE_ARMOUR] //if its not a front hit or back hit then assume its from the side
-
-/obj/mecha/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir)
- . = ..()
- if(. && obj_integrity > 0)
- spark_system.start()
- switch(damage_flag)
- if("fire")
- check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL))
- if("melee")
- check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST))
- else
- check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST,MECHA_INT_SHORT_CIRCUIT))
- if(. >= 5 || prob(33))
- occupant_message("Taking damage!")
- log_append_to_last("Took [damage_amount] points of damage. Damage type: \"[damage_type]\".",1)
-
-/obj/mecha/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir)
- . = ..()
- if(!damage_amount)
- return 0
- var/booster_deflection_modifier = 1
- var/booster_damage_modifier = 1
- if(damage_flag == "bullet" || damage_flag == "laser" || damage_flag == "energy")
- for(var/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/B in equipment)
- if(B.projectile_react())
- booster_deflection_modifier = B.deflect_coeff
- booster_damage_modifier = B.damage_coeff
- break
- else if(damage_flag == "melee")
- for(var/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/B in equipment)
- if(B.attack_react())
- booster_deflection_modifier *= B.deflect_coeff
- booster_damage_modifier *= B.damage_coeff
- break
-
- if(attack_dir)
- var/facing_modifier = get_armour_facing(abs(dir2angle(dir) - dir2angle(attack_dir)))
- booster_damage_modifier /= facing_modifier
- booster_deflection_modifier *= facing_modifier
- if(prob(deflect_chance * booster_deflection_modifier))
- visible_message("[src]'s armour deflects the attack!")
- log_append_to_last("Armor saved.")
- return 0
- if(.)
- . *= booster_damage_modifier
-
-
-/obj/mecha/on_attack_hand(mob/living/user, act_intent = user.a_intent, unarmed_attack_flags)
- user.do_attack_animation(src, ATTACK_EFFECT_PUNCH)
- playsound(loc, 'sound/weapons/tap.ogg', 40, 1, -1)
- user.visible_message("[user] hits [name]. Nothing happens", null, null, COMBAT_MESSAGE_RANGE)
- mecha_log_message("Attack by hand/paw. Attacker - [user].", color="red")
- log_append_to_last("Armor saved.")
-
-/obj/mecha/attack_paw(mob/user as mob)
- return attack_hand(user)
-
-
-/obj/mecha/attack_alien(mob/living/user)
- mecha_log_message("Attack by alien. Attacker - [user].", color="red")
- playsound(src.loc, 'sound/weapons/slash.ogg', 100, 1)
- attack_generic(user, 15, BRUTE, "melee", 0)
-
-/obj/mecha/attack_animal(mob/living/simple_animal/user)
- mecha_log_message("Attack by simple animal. Attacker - [user].", color="red")
- if(!user.melee_damage_upper && !user.obj_damage)
- user.emote("custom", message = "[user.friendly_verb_continuous] [src].")
- return 0
- else
- var/play_soundeffect = 1
- if(user.environment_smash)
- play_soundeffect = 0
- playsound(src, 'sound/effects/bang.ogg', 50, 1)
- var/animal_damage = rand(user.melee_damage_lower,user.melee_damage_upper)
- if(user.obj_damage)
- animal_damage = user.obj_damage
- animal_damage = min(animal_damage, 20*user.environment_smash)
- attack_generic(user, animal_damage, user.melee_damage_type, "melee", play_soundeffect)
- log_combat(user, src, "attacked")
- return 1
-
-
-/obj/mecha/hulk_damage()
- return 15
-
-/obj/mecha/attack_hulk(mob/living/carbon/human/user)
- . = ..()
- if(.)
- mecha_log_message("Attack by hulk. Attacker - [user].", color="red")
- log_combat(user, src, "punched", "hulk powers")
-
-/obj/mecha/blob_act(obj/structure/blob/B)
- take_damage(30, BRUTE, "melee", 0, get_dir(src, B))
-
-/obj/mecha/attack_tk()
- return
-
-/obj/mecha/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum) //wrapper
- mecha_log_message("Hit by [AM].", color="red")
- . = ..()
-
-
-/obj/mecha/bullet_act(obj/item/projectile/Proj) //wrapper
- mecha_log_message("Hit by projectile. Type: [Proj.name]([Proj.flag]).", color="red")
- . = ..()
-
-/obj/mecha/ex_act(severity, target, origin)
- mecha_log_message("Affected by explosion of severity: [severity].", color="red")
- if(prob(deflect_chance))
- severity++
- log_append_to_last("Armor saved, changing severity to [severity].")
- . = ..()
-
-/obj/mecha/contents_explosion(severity, target, origin)
- severity++
- for(var/X in equipment)
- var/obj/item/mecha_parts/mecha_equipment/ME = X
- ME.ex_act(severity, target, origin)
- for(var/Y in trackers)
- var/obj/item/mecha_parts/mecha_tracking/MT = Y
- MT.ex_act(severity, target, origin)
- if(occupant)
- occupant.ex_act(severity, target, origin)
-
-/obj/mecha/handle_atom_del(atom/A)
- if(A == occupant)
- occupant = null
- icon_state = initial(icon_state)+"-open"
- setDir(dir_in)
-
-/obj/mecha/emp_act(severity)
- . = ..()
- if (. & EMP_PROTECT_SELF)
- return
- if(get_charge())
- use_power((cell.charge/3)*(severity*0.005))
- take_damage(severity/3, BURN, "energy", 1)
- mecha_log_message("EMP detected", color="red")
-
- if(istype(src, /obj/mecha/combat))
- mouse_pointer = 'icons/mecha/mecha_mouse-disable.dmi'
- occupant?.update_mouse_pointer()
- if(!equipment_disabled && occupant) //prevent spamming this message with back-to-back EMPs
- to_chat(occupant, "Error -- Connection to equipment control unit has been lost.")
- addtimer(CALLBACK(src, /obj/mecha/proc/restore_equipment), 3 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE)
- equipment_disabled = 1
-
-/obj/mecha/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
- if(exposed_temperature>max_temperature)
- mecha_log_message("Exposed to dangerous temperature.", color="red")
- take_damage(5, BURN, 0, 1)
-
-/obj/mecha/attackby(obj/item/W as obj, mob/user as mob, params)
-
- if(istype(W, /obj/item/mmi))
- if(mmi_move_inside(W,user))
- to_chat(user, "[src]-[W] interface initialized successfully.")
- else
- to_chat(user, "[src]-[W] interface initialization failed.")
- return
-
- if(istype(W, /obj/item/mecha_ammo))
- ammo_resupply(W, user)
- return
-
- if(istype(W, /obj/item/mecha_parts/mecha_equipment))
- var/obj/item/mecha_parts/mecha_equipment/E = W
- spawn()
- if(E.can_attach(src))
- if(!user.temporarilyRemoveItemFromInventory(W))
- return
- E.attach(src)
- user.visible_message("[user] attaches [W] to [src].", "You attach [W] to [src].")
- else
- to_chat(user, "You were unable to attach [W] to [src]!")
- return
- if(W.GetID())
- if(add_req_access || maint_access)
- if(internals_access_allowed(user))
- var/obj/item/card/id/id_card
- if(istype(W, /obj/item/card/id))
- id_card = W
- else
- var/obj/item/pda/pda = W
- id_card = pda.id
- output_maintenance_dialog(id_card, user)
- return
- else
- to_chat(user, "Invalid ID: Access denied.")
- else
- to_chat(user, "Maintenance protocols disabled by operator.")
- else if(W.tool_behaviour == TOOL_WRENCH)
- if(state==1)
- state = 2
- to_chat(user, "You undo the securing bolts.")
- else if(state==2)
- state = 1
- to_chat(user, "You tighten the securing bolts.")
- return
- else if(W.tool_behaviour == TOOL_CROWBAR)
- if(state==2)
- state = 3
- to_chat(user, "You open the hatch to the power unit.")
- else if(state==3)
- state=2
- to_chat(user, "You close the hatch to the power unit.")
- return
- else if(istype(W, /obj/item/stack/cable_coil))
- if(state == 3 && (internal_damage & MECHA_INT_SHORT_CIRCUIT))
- if(W.use_tool(src, user, 0, 2))
- clearInternalDamage(MECHA_INT_SHORT_CIRCUIT)
- to_chat(user, "You replace the fused wires.")
- else
- to_chat(user, "You need two lengths of cable to fix this mech!")
- return
- else if(W.tool_behaviour == TOOL_SCREWDRIVER && user.a_intent != INTENT_HARM)
- if(internal_damage & MECHA_INT_TEMP_CONTROL)
- clearInternalDamage(MECHA_INT_TEMP_CONTROL)
- to_chat(user, "You repair the damaged temperature controller.")
- else if(state==3 && cell)
- cell.forceMove(loc)
- cell = null
- state = 4
- to_chat(user, "You unscrew and pry out the powercell.")
- mecha_log_message("Powercell removed")
- else if(state==4 && cell)
- state=3
- to_chat(user, "You screw the cell in place.")
- return
-
- else if(istype(W, /obj/item/stock_parts/cell))
- if(state==4)
- if(!cell)
- if(!user.transferItemToLoc(W, src))
- return
- var/obj/item/stock_parts/cell/C = W
- to_chat(user, "You install the powercell.")
- cell = C
- mecha_log_message("Powercell installed")
- else
- to_chat(user, "There's already a powercell installed.")
- return
-
- else if(W.tool_behaviour == TOOL_WELDER && user.a_intent != INTENT_HARM)
- user.DelayNextAction(CLICK_CD_MELEE)
- if(obj_integrity < max_integrity)
- if(W.use_tool(src, user, 0, volume=50, amount=1))
- if (internal_damage & MECHA_INT_TANK_BREACH)
- clearInternalDamage(MECHA_INT_TANK_BREACH)
- to_chat(user, "You repair the damaged gas tank.")
- else
- user.visible_message("[user] repairs some damage to [name].", "You repair some damage to [src].")
- obj_integrity += min(10, max_integrity-obj_integrity)
- if(obj_integrity == max_integrity)
- to_chat(user, "It looks to be fully repaired now.")
- return 1
- else
- to_chat(user, "The [name] is at full integrity!")
- return 1
-
- else if(istype(W, /obj/item/mecha_parts/mecha_tracking))
- var/obj/item/mecha_parts/mecha_tracking/tracker = W
- tracker.try_attach_part(user, src)
- return
- else
- return ..()
-
-/obj/mecha/attacked_by(obj/item/I, mob/living/user, attackchain_flags = NONE, damage_multiplier = 1)
- mecha_log_message("Attacked by [I]. Attacker - [user]")
- return ..()
-
-/obj/mecha/proc/mech_toxin_damage(mob/living/target)
- playsound(src, 'sound/effects/spray2.ogg', 50, 1)
- if(target.reagents)
- if(target.reagents.get_reagent_amount(/datum/reagent/cryptobiolin) + force < force*2)
- target.reagents.add_reagent(/datum/reagent/cryptobiolin, force/2)
- if(target.reagents.get_reagent_amount(/datum/reagent/toxin) + force < force*2)
- target.reagents.add_reagent(/datum/reagent/toxin, force/2.5)
-
-
-/obj/mecha/mech_melee_attack(obj/mecha/M)
- if(!has_charge(melee_energy_drain))
- return 0
- use_power(melee_energy_drain)
- if(M.damtype == BRUTE || M.damtype == BURN)
- log_combat(M.occupant, src, "attacked", M, "(INTENT: [uppertext(M.occupant.a_intent)]) (DAMTYPE: [uppertext(M.damtype)])")
- . = ..()
-
-/obj/mecha/proc/full_repair(charge_cell)
- obj_integrity = max_integrity
- if(cell && charge_cell)
- cell.charge = cell.maxcharge
- if(internal_damage & MECHA_INT_FIRE)
- clearInternalDamage(MECHA_INT_FIRE)
- if(internal_damage & MECHA_INT_TEMP_CONTROL)
- clearInternalDamage(MECHA_INT_TEMP_CONTROL)
- if(internal_damage & MECHA_INT_SHORT_CIRCUIT)
- clearInternalDamage(MECHA_INT_SHORT_CIRCUIT)
- if(internal_damage & MECHA_INT_TANK_BREACH)
- clearInternalDamage(MECHA_INT_TANK_BREACH)
- if(internal_damage & MECHA_INT_CONTROL_LOST)
- clearInternalDamage(MECHA_INT_CONTROL_LOST)
-
-/obj/mecha/narsie_act()
- emp_act(100)
-
-/obj/mecha/ratvar_act()
- if((GLOB.ratvar_awakens || GLOB.clockwork_gateway_activated) && occupant)
- if(is_servant_of_ratvar(occupant)) //reward the minion that got a mech by repairing it
- full_repair(TRUE)
- else
- var/mob/living/L = occupant
- go_out(TRUE)
- if(L)
- L.ratvar_act()
-
-/obj/mecha/do_attack_animation(atom/A, visual_effect_icon, obj/item/used_item, no_effect)
- if(!no_effect)
- if(selected)
- used_item = selected
- else if(!visual_effect_icon)
- visual_effect_icon = ATTACK_EFFECT_SMASH
- if(damtype == BURN)
- visual_effect_icon = ATTACK_EFFECT_MECHFIRE
- else if(damtype == TOX)
- visual_effect_icon = ATTACK_EFFECT_MECHTOXIN
- ..()
diff --git a/code/game/mecha/mecha_topic.dm b/code/game/mecha/mecha_topic.dm
deleted file mode 100644
index 067cffd319..0000000000
--- a/code/game/mecha/mecha_topic.dm
+++ /dev/null
@@ -1,360 +0,0 @@
-
-////////////////////////////////////
-///// Rendering stats window ///////
-////////////////////////////////////
-
-/obj/mecha/proc/get_stats_html()
- . = {"
-
-
- [name] data
-
-
-
-
-
- [src.get_stats_part()]
-
-
- [src.get_equipment_list()]
-
-
-
- [src.get_commands()]
-
-
-
- "}
-
-
-
-/obj/mecha/proc/report_internal_damage()
- . = ""
- var/list/dam_reports = list(
- "[MECHA_INT_FIRE]" = "INTERNAL FIRE",
- "[MECHA_INT_TEMP_CONTROL]" = "LIFE SUPPORT SYSTEM MALFUNCTION",
- "[MECHA_INT_TANK_BREACH]" = "GAS TANK BREACH",
- "[MECHA_INT_CONTROL_LOST]" = "COORDINATION SYSTEM CALIBRATION FAILURE - Recalibrate",
- "[MECHA_INT_SHORT_CIRCUIT]" = "SHORT CIRCUIT"
- )
- for(var/tflag in dam_reports)
- var/intdamflag = text2num(tflag)
- if(internal_damage & intdamflag)
- . += dam_reports[tflag]
- . += "
"
- if(return_pressure() > WARNING_HIGH_PRESSURE)
- . += "DANGEROUSLY HIGH CABIN PRESSURE
"
-
-
-
-/obj/mecha/proc/get_stats_part()
- var/integrity = obj_integrity/max_integrity*100
- var/cell_charge = get_charge()
- var/datum/gas_mixture/int_tank_air = internal_tank.return_air()
- var/tank_pressure = internal_tank ? round(int_tank_air.return_pressure(),0.01) : "None"
- var/tank_temperature = internal_tank ? int_tank_air.return_temperature() : "Unknown"
- var/cabin_pressure = round(return_pressure(),0.01)
- . = {"[report_internal_damage()]
- [integrity<30?"DAMAGE LEVEL CRITICAL
":null]
- Integrity: [integrity]%
- Powercell charge: [isnull(cell_charge)?"No powercell installed":"[cell.percent()]%"]
- Air source: [use_internal_tank?"Internal Airtank":"Environment"]
- Airtank pressure: [tank_pressure]kPa
- Airtank temperature: [tank_temperature]°K|[tank_temperature - T0C]°C
- Cabin pressure: [cabin_pressure>WARNING_HIGH_PRESSURE ? "[cabin_pressure]": cabin_pressure]kPa
- Cabin temperature: [return_temperature()]°K|[return_temperature() - T0C]°C
- [dna_lock?"DNA-locked:
[dna_lock] \[Reset\]
":""]
- [thrusters_action.owner ? "Thrusters: [thrusters_active ? "Enabled" : "Disabled"]
" : ""]
- [defense_action.owner ? "Defence Mode: [defence_mode ? "Enabled" : "Disabled"]
" : ""]
- [overload_action.owner ? "Leg Actuators Overload: [leg_overload_mode ? "Enabled" : "Disabled"]
" : ""]
- [smoke_action.owner ? "Smoke: [smoke]
" : ""]
- [zoom_action.owner ? "Zoom: [zoom_mode ? "Enabled" : "Disabled"]
" : ""]
- [switch_damtype_action.owner ? "Damtype: [damtype]
" : ""]
- [phasing_action.owner ? "Phase Modulator: [phasing ? "Enabled" : "Disabled"]
" : ""]
- "}
-
-
-/obj/mecha/proc/get_commands()
- . = {"
-
-
- "}
-
-
-/obj/mecha/proc/get_equipment_menu() //outputs mecha html equipment menu
- . = ""
- if(equipment.len)
- . += {"
-
-
"}
- for(var/X in equipment)
- var/obj/item/mecha_parts/mecha_equipment/W = X
- . += "[W.name]
Detach"
- . += "
Available equipment slots: [max_equip-equipment.len]"
- . += "
"
-
-
-/obj/mecha/proc/get_equipment_list() //outputs mecha equipment list in html
- if(!equipment.len)
- return
- . = "Equipment:"
- for(var/obj/item/mecha_parts/mecha_equipment/MT in equipment)
- . += "
[MT.get_equip_info()]
"
- . += "
"
-
-
-
-/obj/mecha/proc/get_log_html()
- . = "[src.name] Log"
- for(var/list/entry in log)
- . += {"[entry["time"]] [time2text(entry["date"],"MMM DD")] [entry["year"]]
- [entry["message"]]
- "}
- . += ""
-
-
-
-/obj/mecha/proc/output_access_dialog(obj/item/card/id/id_card, mob/user)
- if(!id_card || !user)
- return
- . = {"
-
-
-
-
-
- Following keycodes are present in this system:
"}
- for(var/a in operation_req_access)
- . += "[get_access_desc(a)] - Delete
"
- . += "
Following keycodes were detected on portable device:
"
- for(var/a in id_card.access)
- if(a in operation_req_access)
- continue
- var/a_name = get_access_desc(a)
- if(!a_name)
- continue //there's some strange access without a name
- . += "[a_name] - Add
"
- . += "
Finish "
- . += "(Warning! The ID upload panel will be locked. It can be unlocked only through Exosuit Interface.)"
- . += ""
- user << browse(., "window=exosuit_add_access")
- onclose(user, "exosuit_add_access")
-
-
-/obj/mecha/proc/output_maintenance_dialog(obj/item/card/id/id_card,mob/user)
- if(!id_card || !user)
- return
- . = {"
-
-
-
-
-
- [add_req_access?"Edit operation keycodes":null]
- [maint_access?"[(state>0) ? "Terminate" : "Initiate"] maintenance protocol":null]
- [(state>0) ?"Set Cabin Air Pressure":null]
-
- "}
- user << browse(., "window=exosuit_maint_console")
- onclose(user, "exosuit_maint_console")
-
-
-
-
-/////////////////
-///// Topic /////
-/////////////////
-
-/obj/mecha/Topic(href, href_list)
- ..()
- if(href_list["close"])
- return
-
- if(usr.incapacitated())
- return
-
- if(in_range(src, usr))
- var/obj/item/card/id/id_card
- if (href_list["id_card"])
- id_card = locate(href_list["id_card"])
- if (!istype(id_card))
- return
-
- if(href_list["req_access"] && add_req_access)
- output_access_dialog(id_card, usr)
-
- if(href_list["maint_access"] && maint_access)
- if(state==0)
- state = 1
- to_chat(usr, "The securing bolts are now exposed.")
- else if(state==1)
- state = 0
- to_chat(usr, "The securing bolts are now hidden.")
- output_maintenance_dialog(id_card, usr)
-
- if(href_list["set_internal_tank_valve"] && state >=1)
- var/new_pressure = input(usr,"Input new output pressure","Pressure setting",internal_tank_valve) as num
- if(new_pressure)
- internal_tank_valve = new_pressure
- to_chat(usr, "The internal pressure valve has been set to [internal_tank_valve]kPa.")
-
- if(href_list["add_req_access"] && add_req_access)
- operation_req_access += text2num(href_list["add_req_access"])
- output_access_dialog(id_card, usr)
-
- if(href_list["del_req_access"] && add_req_access)
- operation_req_access -= text2num(href_list["del_req_access"])
- output_access_dialog(id_card, usr)
-
- if(href_list["finish_req_access"])
- add_req_access = 0
- usr << browse(null,"window=exosuit_add_access")
-
- if(usr != occupant)
- return
-
- if(href_list["update_content"])
- send_byjax(usr,"exosuit.browser","content",src.get_stats_part())
-
- if(href_list["select_equip"])
- var/obj/item/mecha_parts/mecha_equipment/equip = locate(href_list["select_equip"]) in src
- if(equip && equip.selectable)
- selected = equip
- occupant_message("You switch to [equip]")
- visible_message("[src] raises [equip]")
- send_byjax(usr, "exosuit.browser","eq_list", get_equipment_list())
-
- if(href_list["rmictoggle"])
- radio.broadcasting = !radio.broadcasting
- send_byjax(usr,"exosuit.browser","rmicstate",(radio.broadcasting?"Engaged":"Disengaged"))
-
- if(href_list["rspktoggle"])
- radio.listening = !radio.listening
- send_byjax(usr,"exosuit.browser","rspkstate",(radio.listening?"Engaged":"Disengaged"))
-
- if(href_list["rfreq"])
- var/new_frequency = (radio.frequency + text2num(href_list["rfreq"]))
- if (!radio.freerange || (radio.frequency < MIN_FREE_FREQ || radio.frequency > MAX_FREE_FREQ))
- new_frequency = sanitize_frequency(new_frequency)
- radio.set_frequency(new_frequency)
- send_byjax(usr,"exosuit.browser","rfreq","[format_frequency(radio.frequency)]")
-
- if (href_list["view_log"])
- src.occupant << browse(src.get_log_html(), "window=exosuit_log")
- onclose(occupant, "exosuit_log")
-
- if (href_list["change_name"])
- var/userinput = stripped_input(occupant,"Choose new exosuit name","Rename exosuit","", MAX_NAME_LEN)
- if(!userinput || usr != occupant || usr.incapacitated())
- return
- name = userinput
- return
-
- if (href_list["toggle_id_upload"])
- add_req_access = !add_req_access
- send_byjax(usr,"exosuit.browser","t_id_upload","[add_req_access?"L":"Unl"]ock ID upload panel")
-
- if(href_list["toggle_maint_access"])
- if(state)
- occupant_message("Maintenance protocols in effect")
- return
- maint_access = !maint_access
- send_byjax(usr,"exosuit.browser","t_maint_access","[maint_access?"Forbid":"Permit"] maintenance protocols")
-
- if (href_list["toggle_port_connection"])
- if(internal_tank.connected_port)
- if(internal_tank.disconnect())
- occupant_message("Disconnected from the air system port.")
- mecha_log_message("Disconnected from gas port.")
- else
- occupant_message("Unable to disconnect from the air system port!")
- return
- else
- var/obj/machinery/atmospherics/components/unary/portables_connector/possible_port = locate() in loc
- if(internal_tank.connect(possible_port))
- occupant_message("Connected to the air system port.")
- mecha_log_message("Connected to gas port.")
- else
- occupant_message("Unable to connect with air system port!")
- return
- send_byjax(occupant,"exosuit.browser","t_port_connection","[internal_tank.connected_port?"Disconnect from":"Connect to"] gas port")
-
- if(href_list["dna_lock"])
- if(!occupant)
- return
- var/mob/living/carbon/C = occupant
- if(!istype(C) || !C.dna)
- to_chat(C, " You do not have any DNA!")
- return
- dna_lock = C.dna.unique_enzymes
- occupant_message("You feel a prick as the needle takes your DNA sample.")
-
- if(href_list["reset_dna"])
- dna_lock = null
-
- if(href_list["repair_int_control_lost"])
- occupant_message("Recalibrating coordination system...")
- mecha_log_message("Recalibration of coordination system started.")
- var/T = loc
- spawn(100)
- if(T == loc)
- clearInternalDamage(MECHA_INT_CONTROL_LOST)
- occupant_message("Recalibration successful.")
- mecha_log_message("Recalibration of coordination system finished with 0 errors.")
- else
- occupant_message("Recalibration failed!")
- mecha_log_message("Recalibration of coordination system failed with 1 error.", color="red")
-
diff --git a/code/game/mecha/mecha_wreckage.dm b/code/game/mecha/mecha_wreckage.dm
deleted file mode 100644
index 36584b85ec..0000000000
--- a/code/game/mecha/mecha_wreckage.dm
+++ /dev/null
@@ -1,271 +0,0 @@
-///////////////////////////////////
-//////// Mecha wreckage ////////
-///////////////////////////////////
-
-
-/obj/structure/mecha_wreckage
- name = "exosuit wreckage"
- desc = "Remains of some unfortunate mecha. Completely irreparable, but perhaps something can be salvaged."
- icon = 'icons/mecha/mecha.dmi'
- density = TRUE
- anchored = FALSE
- opacity = 0
- var/list/welder_salvage = list(/obj/item/stack/sheet/plasteel, /obj/item/stack/sheet/metal, /obj/item/stack/rods)
- var/list/wirecutters_salvage = list(/obj/item/stack/cable_coil)
- var/list/crowbar_salvage = list()
- var/salvage_num = 5
- var/mob/living/silicon/ai/AI //AIs to be salvaged
-
-/obj/structure/mecha_wreckage/Initialize(mapload, mob/living/silicon/ai/AI_pilot)
- . = ..()
- if(!AI_pilot) //Type-checking for this is already done in mecha/Destroy()
- return
-
- AI = AI_pilot
- AI.apply_damage(150, BURN) //Give the AI a bit of damage from the "shock" of being suddenly shut down
- AI.death() //The damage is not enough to kill the AI, but to be 'corrupted files' in need of repair.
- AI.forceMove(src) //Put the dead AI inside the wreckage for recovery
- add_overlay(mutable_appearance('icons/obj/projectiles.dmi', "green_laser")) //Overlay for the recovery beacon
- AI.controlled_mech = null
- AI.remote_control = null
-
-/obj/structure/mecha_wreckage/examine(mob/user)
- . = ..()
- if(AI)
- . += "The AI recovery beacon is active."
-
-/obj/structure/mecha_wreckage/attackby(obj/item/I, mob/user, params)
- if(I.tool_behaviour == TOOL_WELDER)
- if(salvage_num <= 0 || !length(welder_salvage))
- to_chat(user, "You don't see anything that can be cut with [I]!")
- return
-
- if(!I.use_tool(src, user, 0, volume=50))
- return
-
- var/type = prob(70) ? pick(welder_salvage) : null
- if(type)
- var/N = new type(get_turf(user))
- user.visible_message("[user] cuts [N] from [src].", "You cut [N] from [src].")
- if(istype(N, /obj/item/mecha_parts/part))
- welder_salvage -= type
- salvage_num--
- else
- to_chat(user, "You fail to salvage anything valuable from [src]!")
- return
-
- else if(I.tool_behaviour == TOOL_WIRECUTTER)
- if(salvage_num <= 0)
- to_chat(user, "You don't see anything that can be cut with [I]!")
- return
- else if(wirecutters_salvage && wirecutters_salvage.len)
- var/type = prob(70) ? pick(wirecutters_salvage) : null
- if(type)
- var/N = new type(get_turf(user))
- user.visible_message("[user] cuts [N] from [src].", "You cut [N] from [src].")
- salvage_num--
- else
- to_chat(user, "You fail to salvage anything valuable from [src]!")
-
- else if(I.tool_behaviour == TOOL_CROWBAR)
- if(crowbar_salvage && crowbar_salvage.len)
- var/obj/S = pick(crowbar_salvage)
- if(S)
- S.forceMove(user.drop_location())
- crowbar_salvage -= S
- user.visible_message("[user] pries [S] from [src].", "You pry [S] from [src].")
- return
- else
- to_chat(user, "You don't see anything that can be pried with [I]!")
-
-
-/obj/structure/mecha_wreckage/transfer_ai(interaction, mob/user, null, obj/item/aicard/card)
- if(!..())
- return
-
- //Proc called on the wreck by the AI card.
- if(interaction == AI_TRANS_TO_CARD) //AIs can only be transferred in one direction, from the wreck to the card.
- if(!AI) //No AI in the wreck
- to_chat(user, "No AI backups found.")
- return
- cut_overlays() //Remove the recovery beacon overlay
- AI.forceMove(card) //Move the dead AI to the card.
- card.AI = AI
- if(AI.client) //AI player is still in the dead AI and is connected
- to_chat(AI, "The remains of your file system have been recovered on a mobile storage device.")
- else //Give the AI a heads-up that it is probably going to get fixed.
- AI.notify_ghost_cloning("You have been recovered from the wreckage!", source = card)
- to_chat(user, "Backup files recovered: [AI.name] ([rand(1000,9999)].exe) salvaged from [name] and stored within local memory.")
-
- else
- return ..()
-
-
-/obj/structure/mecha_wreckage/gygax
- name = "\improper Gygax wreckage"
- icon_state = "gygax-broken"
-
-/obj/structure/mecha_wreckage/gygax/Initialize()
- . = ..()
- var/list/parts = list(/obj/item/mecha_parts/part/gygax_torso,
- /obj/item/mecha_parts/part/gygax_head,
- /obj/item/mecha_parts/part/gygax_left_arm,
- /obj/item/mecha_parts/part/gygax_right_arm,
- /obj/item/mecha_parts/part/gygax_left_leg,
- /obj/item/mecha_parts/part/gygax_right_leg)
- for(var/i = 0; i < 2; i++)
- if(parts.len && prob(40))
- var/part = pick(parts)
- welder_salvage += part
- parts -= part
-
-
-
-/obj/structure/mecha_wreckage/gygax/dark
- name = "\improper Dark Gygax wreckage"
- icon_state = "darkgygax-broken"
-
-/obj/structure/mecha_wreckage/medigax
- name = "\improper Medical Gygax wreckage"
- icon_state = "medigax-broken"
-
-/obj/structure/mecha_wreckage/medigax/Initialize()
- . = ..()
- var/list/parts = list(/obj/item/mecha_parts/part/medigax_torso,
- /obj/item/mecha_parts/part/medigax_head,
- /obj/item/mecha_parts/part/medigax_left_arm,
- /obj/item/mecha_parts/part/medigax_right_arm,
- /obj/item/mecha_parts/part/medigax_left_leg,
- /obj/item/mecha_parts/part/medigax_right_leg)
- for(var/i = 0; i < 2; i++)
- if(parts.len && prob(40))
- var/part = pick(parts)
- welder_salvage += part
- parts -= part
-
-/obj/structure/mecha_wreckage/marauder
- name = "\improper Marauder wreckage"
- icon_state = "marauder-broken"
-
-/obj/structure/mecha_wreckage/mauler
- name = "\improper Mauler wreckage"
- icon_state = "mauler-broken"
- desc = "The syndicate won't be very happy about this..."
-
-/obj/structure/mecha_wreckage/seraph
- name = "\improper Seraph wreckage"
- icon_state = "seraph-broken"
-
-/obj/structure/mecha_wreckage/reticence
- name = "\improper Reticence wreckage"
- icon_state = "reticence-broken"
- color = "#87878715"
- desc = "..."
-
-/obj/structure/mecha_wreckage/ripley
- name = "\improper Ripley wreckage"
- icon_state = "ripley-broken"
-
-/obj/structure/mecha_wreckage/ripley/Initialize()
- . = ..()
- var/list/parts = list(/obj/item/mecha_parts/part/ripley_torso,
- /obj/item/mecha_parts/part/ripley_left_arm,
- /obj/item/mecha_parts/part/ripley_right_arm,
- /obj/item/mecha_parts/part/ripley_left_leg,
- /obj/item/mecha_parts/part/ripley_right_leg)
- for(var/i = 0; i < 2; i++)
- if(parts.len && prob(40))
- var/part = pick(parts)
- welder_salvage += part
- parts -= part
-
-
-/obj/structure/mecha_wreckage/ripley/firefighter
- name = "\improper Firefighter wreckage"
- icon_state = "firefighter-broken"
-
-/obj/structure/mecha_wreckage/ripley/firefighter/Initialize()
- . = ..()
- var/list/parts = list(/obj/item/mecha_parts/part/ripley_torso,
- /obj/item/mecha_parts/part/ripley_left_arm,
- /obj/item/mecha_parts/part/ripley_right_arm,
- /obj/item/mecha_parts/part/ripley_left_leg,
- /obj/item/mecha_parts/part/ripley_right_leg,
- /obj/item/clothing/suit/fire)
- for(var/i = 0; i < 2; i++)
- if(parts.len && prob(40))
- var/part = pick(parts)
- welder_salvage += part
- parts -= part
-
-
-/obj/structure/mecha_wreckage/ripley/deathripley
- name = "\improper Death-Ripley wreckage"
- icon_state = "deathripley-broken"
-
-
-/obj/structure/mecha_wreckage/honker
- name = "\improper H.O.N.K wreckage"
- icon_state = "honker-broken"
- desc = "All is right in the universe."
-
-/obj/structure/mecha_wreckage/honker/Initialize()
- . = ..()
- var/list/parts = list(
- /obj/item/mecha_parts/chassis/honker,
- /obj/item/mecha_parts/part/honker_torso,
- /obj/item/mecha_parts/part/honker_head,
- /obj/item/mecha_parts/part/honker_left_arm,
- /obj/item/mecha_parts/part/honker_right_arm,
- /obj/item/mecha_parts/part/honker_left_leg,
- /obj/item/mecha_parts/part/honker_right_leg)
- for(var/i = 0; i < 2; i++)
- if(parts.len && prob(40))
- var/part = pick(parts)
- welder_salvage += part
- parts -= part
-
-
-/obj/structure/mecha_wreckage/durand
- name = "\improper Durand wreckage"
- icon_state = "durand-broken"
-
-/obj/structure/mecha_wreckage/durand/Initialize()
- . = ..()
- var/list/parts = list(
- /obj/item/mecha_parts/part/durand_torso,
- /obj/item/mecha_parts/part/durand_head,
- /obj/item/mecha_parts/part/durand_left_arm,
- /obj/item/mecha_parts/part/durand_right_arm,
- /obj/item/mecha_parts/part/durand_left_leg,
- /obj/item/mecha_parts/part/durand_right_leg)
- for(var/i = 0; i < 2; i++)
- if(parts.len && prob(40))
- var/part = pick(parts)
- welder_salvage += part
- parts -= part
-
-
-/obj/structure/mecha_wreckage/phazon
- name = "\improper Phazon wreckage"
- icon_state = "phazon-broken"
-
-
-/obj/structure/mecha_wreckage/odysseus
- name = "\improper Odysseus wreckage"
- icon_state = "odysseus-broken"
-
-/obj/structure/mecha_wreckage/odysseus/Initialize()
- . = ..()
- var/list/parts = list(
- /obj/item/mecha_parts/part/odysseus_torso,
- /obj/item/mecha_parts/part/odysseus_head,
- /obj/item/mecha_parts/part/odysseus_left_arm,
- /obj/item/mecha_parts/part/odysseus_right_arm,
- /obj/item/mecha_parts/part/odysseus_left_leg,
- /obj/item/mecha_parts/part/odysseus_right_leg)
- for(var/i = 0; i < 2; i++)
- if(parts.len && prob(40))
- var/part = pick(parts)
- welder_salvage += part
- parts -= part
diff --git a/code/game/mecha/medical/medical.dm b/code/game/mecha/medical/medical.dm
deleted file mode 100644
index 8b4e48cd3e..0000000000
--- a/code/game/mecha/medical/medical.dm
+++ /dev/null
@@ -1,16 +0,0 @@
-/obj/mecha/medical/mechturn(direction)
- setDir(direction)
- playsound(src,'sound/mecha/mechmove01.ogg',40,1)
- return 1
-
-/obj/mecha/medical/mechstep(direction)
- var/result = step(src,direction)
- if(result)
- playsound(src,'sound/mecha/mechstep.ogg',25,1)
- return result
-
-/obj/mecha/medical/mechsteprand()
- var/result = step_rand(src)
- if(result)
- playsound(src,'sound/mecha/mechstep.ogg',25,1)
- return result
diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm
deleted file mode 100644
index 3c2f75bd6c..0000000000
--- a/code/game/mecha/working/ripley.dm
+++ /dev/null
@@ -1,188 +0,0 @@
-/obj/mecha/working/ripley
- desc = "Autonomous Power Loader Unit. This newer model is refitted with powerful armour against the dangers of planetary mining."
- name = "\improper APLU \"Ripley\""
- icon_state = "ripley"
- step_in = 3 //Move speed, lower is faster.
- var/fast_pressure_step_in = 2
- var/slow_pressure_step_in = 3
- max_temperature = 20000
- max_integrity = 200
- lights_power = 8
- deflect_chance = 15
- armor = list("melee" = 30, "bullet" = 15, "laser" = 10, "energy" = 20, "bomb" = 40, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
- max_equip = 6
- wreckage = /obj/structure/mecha_wreckage/ripley
- var/list/cargo = new
- var/cargo_capacity = 15
- var/hides = 0
-
-/obj/mecha/working/ripley/Move()
- . = ..()
- if(.)
- collect_ore()
- update_pressure()
-
-/obj/mecha/working/ripley/proc/collect_ore()
- if(locate(/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp) in equipment)
- var/obj/structure/ore_box/ore_box = locate(/obj/structure/ore_box) in cargo
- if(ore_box)
- for(var/obj/item/stack/ore/ore in range(1, src))
- if(ore.Adjacent(src) && ((get_dir(src, ore) & dir) || ore.loc == loc)) //we can reach it and it's in front of us? grab it!
- ore.forceMove(ore_box)
-
-/obj/mecha/working/ripley/Destroy()
- for(var/atom/movable/A in cargo)
- A.forceMove(drop_location())
- step_rand(A)
- cargo.Cut()
- return ..()
-
-/obj/mecha/working/ripley/go_out()
- ..()
- update_icon()
-
-/obj/mecha/working/ripley/moved_inside(mob/living/carbon/human/H)
- ..()
- update_icon()
-
-/obj/mecha/working/ripley/Initialize()
- . = ..()
- AddComponent(/datum/component/armor_plate,3,/obj/item/stack/sheet/animalhide/goliath_hide,list("melee" = 10, "bullet" = 5, "laser" = 5))
-
-
-/obj/mecha/working/ripley/firefighter
- desc = "Autonomous Power Loader Unit. This model is refitted with additional thermal protection."
- name = "\improper APLU \"Firefighter\""
- icon_state = "firefighter"
- step_in = 4
- fast_pressure_step_in = 2
- slow_pressure_step_in = 4
- max_temperature = 65000
- max_integrity = 250
- resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
- lights_power = 7
- armor = list("melee" = 40, "bullet" = 30, "laser" = 30, "energy" = 30, "bomb" = 60, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
- max_equip = 5 // More armor, less tools
- wreckage = /obj/structure/mecha_wreckage/ripley/firefighter
-
-
-/obj/mecha/working/ripley/deathripley
- desc = "OH SHIT IT'S THE DEATHSQUAD WE'RE ALL GONNA DIE"
- name = "\improper DEATH-RIPLEY"
- icon_state = "deathripley"
- armor = list("melee" = 40, "bullet" = 30, "laser" = 20, "energy" = 20, "bomb" = 40, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
- slow_pressure_step_in = 3
- opacity=0
- lights_power = 7
- wreckage = /obj/structure/mecha_wreckage/ripley/deathripley
- step_energy_drain = 0
-
-/obj/mecha/working/ripley/deathripley/Initialize()
- . = ..()
- var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/kill
- ME.attach(src)
-
-/obj/mecha/working/ripley/deathripley/real
- desc = "OH SHIT IT'S THE DEATHSQUAD WE'RE ALL GONNA DIE. FOR REAL"
-
-/obj/mecha/working/ripley/deathripley/real/Initialize()
- . = ..()
- for(var/obj/item/mecha_parts/mecha_equipment/E in equipment)
- E.detach()
- qdel(E)
- equipment.Cut()
- var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/kill/real
- ME.attach(src)
-
-/obj/mecha/working/ripley/mining
- desc = "An old, dusty mining Ripley."
- name = "\improper APLU \"Miner\""
- obj_integrity = 75 //Low starting health
-
-/obj/mecha/working/ripley/mining/Initialize()
- . = ..()
- if(cell)
- cell.charge = FLOOR(cell.charge * 0.25, 1) //Starts at very low charge
- if(prob(70)) //Maybe add a drill
- if(prob(15)) //Possible diamond drill... Feeling lucky?
- var/obj/item/mecha_parts/mecha_equipment/drill/diamonddrill/D = new
- D.attach(src)
- else
- var/obj/item/mecha_parts/mecha_equipment/drill/D = new
- D.attach(src)
-
- else //Add plasma cutter if no drill
- var/obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma/P = new
- P.attach(src)
-
- //Add ore box to cargo
- cargo.Add(new /obj/structure/ore_box(src))
-
- //Attach hydraulic clamp
- var/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/HC = new
- HC.attach(src)
- for(var/obj/item/mecha_parts/mecha_tracking/B in trackers)//Deletes the beacon so it can't be found easily
- qdel(B)
-
- var/obj/item/mecha_parts/mecha_equipment/mining_scanner/scanner = new
- scanner.attach(src)
-
-/obj/mecha/working/ripley/Exit(atom/movable/O)
- if(O in cargo)
- return 0
- return ..()
-
-/obj/mecha/working/ripley/Topic(href, href_list)
- ..()
- if(href_list["drop_from_cargo"])
- var/obj/O = locate(href_list["drop_from_cargo"])
- if(O && (O in cargo))
- occupant_message("You unload [O].")
- O.forceMove(drop_location())
- cargo -= O
- mecha_log_message("Unloaded [O]. Cargo compartment capacity: [cargo_capacity - src.cargo.len]")
- return
-
-
-/obj/mecha/working/ripley/contents_explosion(severity, target, origin)
- for(var/X in cargo)
- var/obj/O = X
- if(prob(30/severity))
- cargo -= O
- O.forceMove(drop_location())
- . = ..()
-
-/obj/mecha/working/ripley/get_stats_part()
- var/output = ..()
- output += "Cargo Compartment Contents:"
- if(cargo.len)
- for(var/obj/O in cargo)
- output += "
Unload : [O]
"
- else
- output += "Nothing"
- output += "
"
- return output
-
-/obj/mecha/working/ripley/proc/update_pressure()
- var/turf/T = get_turf(loc)
-
- if(lavaland_equipment_pressure_check(T))
- step_in = fast_pressure_step_in
- for(var/obj/item/mecha_parts/mecha_equipment/drill/drill in equipment)
- drill.equip_cooldown = initial(drill.equip_cooldown)/2
- else
- step_in = slow_pressure_step_in
- for(var/obj/item/mecha_parts/mecha_equipment/drill/drill in equipment)
- drill.equip_cooldown = initial(drill.equip_cooldown)
-
-/obj/mecha/working/ripley/relay_container_resist(mob/living/user, obj/O)
- to_chat(user, "You lean on the back of [O] and start pushing so it falls out of [src].")
- if(do_after(user, 300, target = O))
- if(!user || user.stat != CONSCIOUS || user.loc != src || O.loc != src )
- return
- to_chat(user, "You successfully pushed [O] out of [src]!")
- O.forceMove(drop_location())
- cargo -= O
- else
- if(user.loc == src) //so we don't get the message if we resisted multiple times and succeeded.
- to_chat(user, "You fail to push [O] out of [src]!")
diff --git a/code/game/mecha/working/working.dm b/code/game/mecha/working/working.dm
deleted file mode 100644
index c9e7d99ac0..0000000000
--- a/code/game/mecha/working/working.dm
+++ /dev/null
@@ -1,3 +0,0 @@
-/obj/mecha/working
- internal_damage_threshold = 60
-
diff --git a/code/game/objects/effects/arachnid_web.dm b/code/game/objects/effects/arachnid_web.dm
index 2adaa12dc9..bd91624ee5 100644
--- a/code/game/objects/effects/arachnid_web.dm
+++ b/code/game/objects/effects/arachnid_web.dm
@@ -16,7 +16,7 @@
playsound(loc, 'sound/items/welder.ogg', 100, TRUE)
/obj/structure/arachnid/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir)
- if(damage_flag == "melee")
+ if(damage_flag == MELEE)
switch(damage_type)
if(BURN)
damage_amount *= 2
@@ -49,7 +49,7 @@
density = FALSE
max_integrity = 60
-/obj/structure/arachnid/cocoon/Initialize()
+/obj/structure/arachnid/cocoon/Initialize(mapload)
icon_state = pick("cocoon1","cocoon2","cocoon3")
. = ..()
diff --git a/code/game/objects/effects/bump_teleporter.dm b/code/game/objects/effects/bump_teleporter.dm
index 0337b076ff..36320f2913 100644
--- a/code/game/objects/effects/bump_teleporter.dm
+++ b/code/game/objects/effects/bump_teleporter.dm
@@ -11,7 +11,7 @@
var/static/list/AllTeleporters
-/obj/effect/bump_teleporter/Initialize()
+/obj/effect/bump_teleporter/Initialize(mapload)
. = ..()
LAZYADD(AllTeleporters, src)
diff --git a/code/game/objects/effects/contraband.dm b/code/game/objects/effects/contraband.dm
index 846132a2fc..561df57700 100644
--- a/code/game/objects/effects/contraband.dm
+++ b/code/game/objects/effects/contraband.dm
@@ -61,7 +61,7 @@
var/poster_item_icon_state = "rolled_poster"
var/poster_item_type = /obj/item/poster
-/obj/structure/sign/poster/Initialize()
+/obj/structure/sign/poster/Initialize(mapload)
. = ..()
if(random_basetype)
randomise(random_basetype)
diff --git a/code/game/objects/effects/countdown.dm b/code/game/objects/effects/countdown.dm
index b425946789..0722f3bd18 100644
--- a/code/game/objects/effects/countdown.dm
+++ b/code/game/objects/effects/countdown.dm
@@ -14,7 +14,7 @@
var/displayed_text
var/atom/attached_to
-/obj/effect/countdown/Initialize()
+/obj/effect/countdown/Initialize(mapload)
. = ..()
attach(loc)
diff --git a/code/game/objects/effects/decals/cleanable/aliens.dm b/code/game/objects/effects/decals/cleanable/aliens.dm
index 875f23434b..9a23a3032e 100644
--- a/code/game/objects/effects/decals/cleanable/aliens.dm
+++ b/code/game/objects/effects/decals/cleanable/aliens.dm
@@ -72,6 +72,6 @@
icon_state = "tracks"
random_icon_states = null
-/obj/effect/decal/cleanable/blood/xtracks/Initialize()
+/obj/effect/decal/cleanable/blood/xtracks/Initialize(mapload)
add_blood_DNA(list("UNKNOWN DNA" = "X*"))
. = ..()
diff --git a/code/game/objects/effects/decals/cleanable/humans.dm b/code/game/objects/effects/decals/cleanable/humans.dm
index e5ccd9f21a..8aea7047b6 100644
--- a/code/game/objects/effects/decals/cleanable/humans.dm
+++ b/code/game/objects/effects/decals/cleanable/humans.dm
@@ -109,7 +109,7 @@
if(!fixed_color)
add_atom_colour(blood_DNA_to_color(), FIXED_COLOUR_PRIORITY)
-/obj/effect/cleanable/trail_holder/Initialize()
+/obj/effect/cleanable/trail_holder/Initialize(mapload)
. = ..()
update_icon()
diff --git a/code/game/objects/effects/decals/cleanable/misc.dm b/code/game/objects/effects/decals/cleanable/misc.dm
index 62e4dbf5f3..28999ef0b5 100644
--- a/code/game/objects/effects/decals/cleanable/misc.dm
+++ b/code/game/objects/effects/decals/cleanable/misc.dm
@@ -15,7 +15,7 @@
persistent = TRUE
persistence_allow_stacking = TRUE
-/obj/effect/decal/cleanable/ash/Initialize()
+/obj/effect/decal/cleanable/ash/Initialize(mapload)
. = ..()
reagents.add_reagent(/datum/reagent/ash, 30)
pixel_x = rand(-5, 5)
@@ -30,7 +30,7 @@
icon_state = "big_ash"
beauty = -100
-/obj/effect/decal/cleanable/ash/large/Initialize()
+/obj/effect/decal/cleanable/ash/large/Initialize(mapload)
. = ..()
reagents.add_reagent(/datum/reagent/ash, 30) //double the amount of ash.
@@ -43,7 +43,7 @@
mergeable_decal = TRUE
persistent = TRUE
-/obj/effect/decal/cleanable/glass/Initialize()
+/obj/effect/decal/cleanable/glass/Initialize(mapload)
. = ..()
setDir(pick(GLOB.cardinals))
@@ -89,7 +89,7 @@
if(data["alpha"])
alpha = text2num(data["alpha"])
-/obj/effect/decal/cleanable/dirt/Initialize()
+/obj/effect/decal/cleanable/dirt/Initialize(mapload)
. = ..()
var/turf/T = get_turf(src)
if(T.tiled_dirt)
@@ -265,7 +265,7 @@
qdel(src)
return power // no block
-/obj/effect/decal/cleanable/shreds/Initialize()
+/obj/effect/decal/cleanable/shreds/Initialize(mapload)
pixel_x = rand(-10, 10)
pixel_y = rand(-10, 10)
. = ..()
diff --git a/code/game/objects/effects/decals/cleanable/robots.dm b/code/game/objects/effects/decals/cleanable/robots.dm
index 1eb3533f71..605da122c0 100644
--- a/code/game/objects/effects/decals/cleanable/robots.dm
+++ b/code/game/objects/effects/decals/cleanable/robots.dm
@@ -55,7 +55,7 @@
beauty = -100
persistent = TRUE
-/obj/effect/decal/cleanable/oil/Initialize()
+/obj/effect/decal/cleanable/oil/Initialize(mapload)
. = ..()
reagents.add_reagent(/datum/reagent/oil, 30)
reagents.add_reagent(/datum/reagent/liquidgibs/oil, 5)
@@ -68,6 +68,6 @@
/obj/effect/decal/cleanable/oil/slippery
persistent = FALSE
-/obj/effect/decal/cleanable/oil/slippery/Initialize()
+/obj/effect/decal/cleanable/oil/slippery/Initialize(mapload)
. = ..()
AddComponent(/datum/component/slippery, 80, (NO_SLIP_WHEN_WALKING | SLIDE))
diff --git a/code/game/objects/effects/decals/decal.dm b/code/game/objects/effects/decals/decal.dm
index cdf16468f4..2e1cc2b606 100644
--- a/code/game/objects/effects/decals/decal.dm
+++ b/code/game/objects/effects/decals/decal.dm
@@ -5,7 +5,7 @@
resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF
var/turf_loc_check = TRUE
-/obj/effect/decal/Initialize()
+/obj/effect/decal/Initialize(mapload)
. = ..()
if(turf_loc_check && (!isturf(loc) || NeverShouldHaveComeHere(loc)))
return INITIALIZE_HINT_QDEL
@@ -37,7 +37,7 @@
layer = TURF_DECAL_LAYER
plane = ABOVE_WALL_PLANE
-/obj/effect/turf_decal/Initialize()
+/obj/effect/turf_decal/Initialize(mapload)
..()
return INITIALIZE_HINT_QDEL
diff --git a/code/game/objects/effects/effect_system/effect_system.dm b/code/game/objects/effects/effect_system/effect_system.dm
index 05077bf898..6eb6fecd66 100644
--- a/code/game/objects/effects/effect_system/effect_system.dm
+++ b/code/game/objects/effects/effect_system/effect_system.dm
@@ -12,7 +12,7 @@ would spawn and follow the beaker, even if it is carried or thrown.
pass_flags = PASSTABLE | PASSGRILLE
anchored = TRUE
-/obj/effect/particle_effect/Initialize()
+/obj/effect/particle_effect/Initialize(mapload)
. = ..()
GLOB.cameranet.updateVisibility(src)
diff --git a/code/game/objects/effects/effect_system/effects_explosion.dm b/code/game/objects/effects/effect_system/effects_explosion.dm
index d208510e86..e45461cde8 100644
--- a/code/game/objects/effects/effect_system/effects_explosion.dm
+++ b/code/game/objects/effects/effect_system/effects_explosion.dm
@@ -4,7 +4,7 @@
opacity = 1
anchored = TRUE
-/obj/effect/particle_effect/expl_particles/Initialize()
+/obj/effect/particle_effect/expl_particles/Initialize(mapload)
. = ..()
QDEL_IN(src, 15)
@@ -29,7 +29,7 @@
pixel_x = -32
pixel_y = -32
-/obj/effect/explosion/Initialize()
+/obj/effect/explosion/Initialize(mapload)
. = ..()
QDEL_IN(src, 10)
diff --git a/code/game/objects/effects/effect_system/effects_foam.dm b/code/game/objects/effects/effect_system/effects_foam.dm
index a0f53ceab7..d9cfc09220 100644
--- a/code/game/objects/effects/effect_system/effects_foam.dm
+++ b/code/game/objects/effects/effect_system/effects_foam.dm
@@ -40,9 +40,16 @@
if(hotspot && istype(T) && T.air)
qdel(hotspot)
var/datum/gas_mixture/G = T.air
- var/plas_amt = min(30,G.get_moles(GAS_PLASMA)) //Absorb some plasma
- G.adjust_moles(GAS_PLASMA,-plas_amt)
- absorbed_plasma += plas_amt
+ var/amt_removed = min(30,G.get_moles(GAS_PLASMA)) //Absorb some plasma
+ G.adjust_moles(GAS_PLASMA,-amt_removed)
+ absorbed_plasma += amt_removed
+ var/list/fire_gases = GLOB.gas_data.fire_temperatures.Copy()
+ for(var/gas in fire_gases - GAS_PLASMA)
+ if(amt_removed <= 0)
+ break
+ var/this_amount = min(30-amt_removed, G.get_moles(gas))
+ G.adjust_moles(gas, -this_amount)
+ amt_removed -= this_amount
if(G.return_temperature() > T20C)
G.set_temperature(max(G.return_temperature()/2,T20C))
T.air_update_turf()
@@ -90,7 +97,7 @@
/obj/effect/particle_effect/foam/long_life
lifetime = 150
-/obj/effect/particle_effect/foam/Initialize()
+/obj/effect/particle_effect/foam/Initialize(mapload)
. = ..()
MakeSlippery()
create_reagents(1000, NONE, NO_REAGENTS_VALUE) //limited by the size of the reagent holder anyway.
@@ -271,7 +278,7 @@
attack_hand_speed = CLICK_CD_MELEE
attack_hand_is_action = TRUE
-/obj/structure/foamedmetal/Initialize()
+/obj/structure/foamedmetal/Initialize(mapload)
. = ..()
air_update_turf(1)
@@ -291,9 +298,6 @@
to_chat(user, "You hit [src] but bounce off it!")
playsound(src.loc, 'sound/weapons/tap.ogg', 100, 1)
-/obj/structure/foamedmetal/CanPass(atom/movable/mover, turf/target)
- return !density
-
/obj/structure/foamedmetal/iron
max_integrity = 50
icon_state = "ironfoam"
@@ -306,8 +310,9 @@
icon_state = "atmos_resin"
alpha = 120
max_integrity = 10
+ pass_flags_self = PASSGLASS
-/obj/structure/foamedmetal/resin/Initialize()
+/obj/structure/foamedmetal/resin/Initialize(mapload)
. = ..()
neutralize_air()
addtimer(CALLBACK(src, .proc/neutralize_air), 5) // yeah this sucks, maybe when auxmos is out
@@ -336,14 +341,6 @@
for(var/obj/item/Item in O)
Item.extinguish()
-/obj/structure/foamedmetal/resin/CanPass(atom/movable/mover, turf/target)
- if(istype(mover) && (mover.pass_flags & PASSGLASS))
- return TRUE
- . = ..()
-
-/obj/structure/foamedmetal/resin/BlockThermalConductivity()
- return TRUE
-
#undef ALUMINUM_FOAM
#undef IRON_FOAM
#undef RESIN_FOAM
diff --git a/code/game/objects/effects/effect_system/effects_smoke.dm b/code/game/objects/effects/effect_system/effects_smoke.dm
index cc7112dddf..9e6cde9336 100644
--- a/code/game/objects/effects/effect_system/effects_smoke.dm
+++ b/code/game/objects/effects/effect_system/effects_smoke.dm
@@ -30,7 +30,7 @@
set_opacity(0) //if we were blocking view, we aren't now because we're fading out
stoplag()
-/obj/effect/particle_effect/smoke/Initialize()
+/obj/effect/particle_effect/smoke/Initialize(mapload)
. = ..()
create_reagents(500, NONE, NO_REAGENTS_VALUE)
START_PROCESSING(SSobj, src)
@@ -133,13 +133,11 @@
M.emote("cough")
return 1
-/obj/effect/particle_effect/smoke/bad/CanPass(atom/movable/mover, turf/target)
- if(istype(mover, /obj/item/projectile/beam))
- var/obj/item/projectile/beam/B = mover
+/obj/effect/particle_effect/smoke/bad/Crossed(atom/movable/AM, oldloc)
+ . = ..()
+ if(istype(AM, /obj/item/projectile/beam))
+ var/obj/item/projectile/beam/B = AM
B.damage = (B.damage/2)
- return 1
-
-
/datum/effect_system/smoke_spread/bad
effect_type = /obj/effect/particle_effect/smoke/bad
diff --git a/code/game/objects/effects/effect_system/effects_sparks.dm b/code/game/objects/effects/effect_system/effects_sparks.dm
index a388d3bc67..62cf7e54f5 100644
--- a/code/game/objects/effects/effect_system/effects_sparks.dm
+++ b/code/game/objects/effects/effect_system/effects_sparks.dm
@@ -24,7 +24,7 @@
light_range = MINIMUM_USEFUL_LIGHT_RANGE
light_color = LIGHT_COLOR_FIRE
-/obj/effect/particle_effect/sparks/Initialize()
+/obj/effect/particle_effect/sparks/Initialize(mapload)
. = ..()
flick(icon_state, src) // replay the animation
playsound(src, "sparks", 100, TRUE)
@@ -69,7 +69,7 @@
name = "lightning"
icon_state = "electricity"
-/obj/effect/particle_effect/fake_sparks/Initialize()
+/obj/effect/particle_effect/fake_sparks/Initialize(mapload)
. = ..()
flick(icon_state, src) // replay the animation
playsound(src, "sparks", 100, TRUE)
diff --git a/code/game/objects/effects/effect_system/effects_water.dm b/code/game/objects/effects/effect_system/effects_water.dm
index 31124381f6..8fafda8b51 100644
--- a/code/game/objects/effects/effect_system/effects_water.dm
+++ b/code/game/objects/effects/effect_system/effects_water.dm
@@ -7,7 +7,7 @@
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
-/obj/effect/particle_effect/water/Initialize()
+/obj/effect/particle_effect/water/Initialize(mapload)
. = ..()
QDEL_IN(src, 70)
@@ -45,7 +45,7 @@ steam.start() -- spawns the effect
icon_state = "extinguish"
density = FALSE
-/obj/effect/particle_effect/steam/Initialize()
+/obj/effect/particle_effect/steam/Initialize(mapload)
. = ..()
QDEL_IN(src, 20)
diff --git a/code/game/objects/effects/effects.dm b/code/game/objects/effects/effects.dm
index fb245f7607..5d573c5a43 100644
--- a/code/game/objects/effects/effects.dm
+++ b/code/game/objects/effects/effects.dm
@@ -18,9 +18,6 @@
/obj/effect/acid_act()
return
-/obj/effect/mech_melee_attack(obj/mecha/M)
- return 0
-
/obj/effect/blob_act(obj/structure/blob/B)
return
diff --git a/code/game/objects/effects/forcefields.dm b/code/game/objects/effects/forcefields.dm
index 384cf73c89..c16c9751a8 100644
--- a/code/game/objects/effects/forcefields.dm
+++ b/code/game/objects/effects/forcefields.dm
@@ -8,7 +8,7 @@
CanAtmosPass = ATMOS_PASS_DENSITY
var/timeleft = 300 //Set to 0 for permanent forcefields (ugh)
-/obj/effect/forcefield/Initialize()
+/obj/effect/forcefield/Initialize(mapload)
. = ..()
if(timeleft)
QDEL_IN(src, timeleft)
diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm
index 9bc2111754..22a9e86bb0 100644
--- a/code/game/objects/effects/landmarks.dm
+++ b/code/game/objects/effects/landmarks.dm
@@ -19,7 +19,7 @@
INITIALIZE_IMMEDIATE(/obj/effect/landmark)
-/obj/effect/landmark/Initialize()
+/obj/effect/landmark/Initialize(mapload)
. = ..()
GLOB.landmarks_list += src
@@ -245,7 +245,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark)
icon = 'icons/effects/landmarks_static.dmi'
icon_state = "wiznerd_spawn"
-/obj/effect/landmark/start/wizard/Initialize()
+/obj/effect/landmark/start/wizard/Initialize(mapload)
..()
GLOB.wizardstart += loc
return INITIALIZE_HINT_QDEL
@@ -255,7 +255,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark)
icon = 'icons/effects/landmarks_static.dmi'
icon_state = "snukeop_spawn"
-/obj/effect/landmark/start/nukeop/Initialize()
+/obj/effect/landmark/start/nukeop/Initialize(mapload)
..()
GLOB.nukeop_start += loc
return INITIALIZE_HINT_QDEL
@@ -265,7 +265,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark)
icon = 'icons/effects/landmarks_static.dmi'
icon_state = "snukeop_leader_spawn"
-/obj/effect/landmark/start/nukeop_leader/Initialize()
+/obj/effect/landmark/start/nukeop_leader/Initialize(mapload)
..()
GLOB.nukeop_leader_start += loc
return INITIALIZE_HINT_QDEL
@@ -277,7 +277,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/start/new_player)
/obj/effect/landmark/start/new_player
name = "New Player"
-/obj/effect/landmark/start/new_player/Initialize()
+/obj/effect/landmark/start/new_player/Initialize(mapload)
..()
GLOB.newplayer_start += loc
return INITIALIZE_HINT_QDEL
diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm
index b0e801137d..a1edac02a3 100644
--- a/code/game/objects/effects/mines.dm
+++ b/code/game/objects/effects/mines.dm
@@ -116,7 +116,7 @@
density = FALSE
var/duration = 0
-/obj/effect/mine/pickup/Initialize()
+/obj/effect/mine/pickup/Initialize(mapload)
. = ..()
animate(src, pixel_y = 4, time = 20, loop = -1)
diff --git a/code/game/objects/effects/overlays.dm b/code/game/objects/effects/overlays.dm
index 6be0a50a5e..945136466f 100644
--- a/code/game/objects/effects/overlays.dm
+++ b/code/game/objects/effects/overlays.dm
@@ -13,7 +13,7 @@
icon_state="b_beam"
var/atom/BeamSource
-/obj/effect/overlay/beam/Initialize()
+/obj/effect/overlay/beam/Initialize(mapload)
. = ..()
QDEL_IN(src, 10)
diff --git a/code/game/objects/effects/spawners/bombspawner.dm b/code/game/objects/effects/spawners/bombspawner.dm
index fb92e31f1e..953468f1ff 100644
--- a/code/game/objects/effects/spawners/bombspawner.dm
+++ b/code/game/objects/effects/spawners/bombspawner.dm
@@ -13,7 +13,7 @@
var/pressure_o = 10 * ONE_ATMOSPHERE //tank pressures
var/assembly_type
-/obj/effect/spawner/newbomb/Initialize()
+/obj/effect/spawner/newbomb/Initialize(mapload)
. = ..()
var/obj/item/transfer_valve/V = new(src.loc)
var/obj/item/tank/internals/plasma/PT = new(V)
@@ -39,7 +39,7 @@
return INITIALIZE_HINT_QDEL
-/obj/effect/spawner/newbomb/timer/syndicate/Initialize()
+/obj/effect/spawner/newbomb/timer/syndicate/Initialize(mapload)
temp_p = (OPTIMAL_TEMP_K_PLA_BURN_SCALE(pressure_p, pressure_o, temp_o)/2 + OPTIMAL_TEMP_K_PLA_BURN_RATIO(pressure_p, pressure_o, temp_o)/2) - T0C
. = ..()
diff --git a/code/game/objects/effects/spawners/gibspawner.dm b/code/game/objects/effects/spawners/gibspawner.dm
index 00ddf0e9ef..65c6c35c9e 100644
--- a/code/game/objects/effects/spawners/gibspawner.dm
+++ b/code/game/objects/effects/spawners/gibspawner.dm
@@ -91,7 +91,7 @@
gibamounts = list(2, 2, 1)
sound_vol = 40
-/obj/effect/gibspawner/generic/Initialize()
+/obj/effect/gibspawner/generic/Initialize(mapload)
if(!gibdirections.len)
gibdirections = list(list(WEST, NORTHWEST, SOUTHWEST, NORTH),list(EAST, NORTHEAST, SOUTHEAST, SOUTH), list())
return ..()
@@ -106,7 +106,7 @@
gib_mob_species = /datum/species/human
sound_vol = 50
-/obj/effect/gibspawner/human/Initialize()
+/obj/effect/gibspawner/human/Initialize(mapload)
if(!gibdirections.len)
gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), GLOB.alldirs, GLOB.alldirs, list())
return ..()
@@ -115,7 +115,7 @@
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/human, /obj/effect/decal/cleanable/blood/gibs/human/core, /obj/effect/decal/cleanable/blood/gibs/human, /obj/effect/decal/cleanable/blood/gibs/human/core, /obj/effect/decal/cleanable/blood/gibs/human, /obj/effect/decal/cleanable/blood/gibs/human/torso)
gibamounts = list(1, 1, 1, 1, 1, 1)
-/obj/effect/gibspawner/human/bodypartless/Initialize()
+/obj/effect/gibspawner/human/bodypartless/Initialize(mapload)
if(!gibdirections.len)
gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), GLOB.alldirs, list())
return ..()
@@ -127,7 +127,7 @@
gib_mob_species = /datum/species/lizard
sound_vol = 50
-/obj/effect/gibspawner/lizard/Initialize()
+/obj/effect/gibspawner/lizard/Initialize(mapload)
if(!gibdirections.len)
gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), GLOB.alldirs, GLOB.alldirs, list())
return ..()
@@ -136,7 +136,7 @@
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/human/lizard, /obj/effect/decal/cleanable/blood/gibs/human/lizard/core, /obj/effect/decal/cleanable/blood/gibs/human/lizard, /obj/effect/decal/cleanable/blood/gibs/human/lizard/core, /obj/effect/decal/cleanable/blood/gibs/human/lizard, /obj/effect/decal/cleanable/blood/gibs/human/lizard/torso)
gibamounts = list(1, 1, 1, 1, 1, 1)
-/obj/effect/gibspawner/lizard/bodypartless/Initialize()
+/obj/effect/gibspawner/lizard/bodypartless/Initialize(mapload)
if(!gibdirections.len)
gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), GLOB.alldirs, list())
return ..()
@@ -148,7 +148,7 @@
gib_mob_species = /datum/species/jelly/roundstartslime
sound_vol = 50
-/obj/effect/gibspawner/slime/Initialize()
+/obj/effect/gibspawner/slime/Initialize(mapload)
if(!gibdirections.len)
gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), GLOB.alldirs, GLOB.alldirs, list())
return ..()
@@ -157,7 +157,7 @@
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/slime, /obj/effect/decal/cleanable/blood/gibs/slime/core, /obj/effect/decal/cleanable/blood/gibs/slime, /obj/effect/decal/cleanable/blood/gibs/slime/core, /obj/effect/decal/cleanable/blood/gibs/slime, /obj/effect/decal/cleanable/blood/gibs/slime/torso)
gibamounts = list(1, 1, 1, 1, 1, 1)
-/obj/effect/gibspawner/slime/bodypartless/Initialize()
+/obj/effect/gibspawner/slime/bodypartless/Initialize(mapload)
if(!gibdirections.len)
gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), GLOB.alldirs, list())
return ..()
@@ -171,7 +171,7 @@
sparks = TRUE
sound_to_play = 'sound/effects/bang.ogg'
-/obj/effect/gibspawner/ipc/Initialize()
+/obj/effect/gibspawner/ipc/Initialize(mapload)
if(!gibdirections.len)
gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), GLOB.alldirs, GLOB.alldirs, list())
return ..()
@@ -180,7 +180,7 @@
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/ipc, /obj/effect/decal/cleanable/blood/gibs/ipc/core, /obj/effect/decal/cleanable/blood/gibs/ipc, /obj/effect/decal/cleanable/blood/gibs/ipc/core, /obj/effect/decal/cleanable/blood/gibs/ipc, /obj/effect/decal/cleanable/blood/gibs/ipc/torso)
gibamounts = list(1, 1, 1, 1, 1, 1)
-/obj/effect/gibspawner/ipc/bodypartless/Initialize()
+/obj/effect/gibspawner/ipc/bodypartless/Initialize(mapload)
if(!gibdirections.len)
gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), GLOB.alldirs, list())
return ..()
@@ -190,7 +190,7 @@
gibamounts = list(1, 1, 1, 1, 1, 1, 1)
gib_mob_type = /mob/living/carbon/alien
-/obj/effect/gibspawner/xeno/Initialize()
+/obj/effect/gibspawner/xeno/Initialize(mapload)
if(!gibdirections.len)
gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), GLOB.alldirs, GLOB.alldirs, list())
return ..()
@@ -199,7 +199,7 @@
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/xeno, /obj/effect/decal/cleanable/blood/gibs/xeno/core, /obj/effect/decal/cleanable/blood/gibs/xeno, /obj/effect/decal/cleanable/blood/gibs/xeno/core, /obj/effect/decal/cleanable/blood/gibs/xeno, /obj/effect/decal/cleanable/blood/gibs/xeno/torso)
gibamounts = list(1, 1, 1, 1, 1, 1)
-/obj/effect/gibspawner/xeno/bodypartless/Initialize()
+/obj/effect/gibspawner/xeno/bodypartless/Initialize(mapload)
if(!gibdirections.len)
gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), GLOB.alldirs, list())
return ..()
@@ -215,7 +215,7 @@
gibamounts = list(1, 1, 1, 1)
gib_mob_type = /mob/living/carbon/alien/larva
-/obj/effect/gibspawner/larva/Initialize()
+/obj/effect/gibspawner/larva/Initialize(mapload)
if(!gibdirections.len)
gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST), list(), GLOB.alldirs)
return ..()
@@ -224,7 +224,7 @@
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/xeno/larva, /obj/effect/decal/cleanable/blood/gibs/xeno/larva, /obj/effect/decal/cleanable/blood/gibs/xeno/larva)
gibamounts = list(1, 1, 1)
-/obj/effect/gibspawner/larva/bodypartless/Initialize()
+/obj/effect/gibspawner/larva/bodypartless/Initialize(mapload)
if(!gibdirections.len)
gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST), list())
return ..()
@@ -235,7 +235,7 @@
gibamounts = list(1, 1, 1, 1, 1, 1)
gib_mob_type = /mob/living/silicon/robot
-/obj/effect/gibspawner/robot/Initialize()
+/obj/effect/gibspawner/robot/Initialize(mapload)
if(!gibdirections.len)
gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), GLOB.alldirs, GLOB.alldirs)
gibamounts[6] = pick(0, 1, 2)
diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm
index 7fbd3c67cd..0f7e00a538 100644
--- a/code/game/objects/effects/spawners/lootdrop.dm
+++ b/code/game/objects/effects/spawners/lootdrop.dm
@@ -185,7 +185,7 @@
icon = 'icons/obj/lighting.dmi'
icon_state = "random_glowstick"
-/obj/effect/spawner/lootdrop/glowstick/Initialize()
+/obj/effect/spawner/lootdrop/glowstick/Initialize(mapload)
loot = typesof(/obj/item/flashlight/glowstick)
. = ..()
@@ -240,7 +240,7 @@
/obj/effect/spawner/lootdrop/costume
name = "random costume spawner"
-/obj/effect/spawner/lootdrop/costume/Initialize()
+/obj/effect/spawner/lootdrop/costume/Initialize(mapload)
loot = list()
for(var/path in subtypesof(/obj/effect/spawner/bundle/costume))
loot[path] = TRUE
@@ -316,7 +316,7 @@
icon = 'icons/obj/storage.dmi'
icon_state = "mre"
-/obj/effect/spawner/lootdrop/mre/Initialize()
+/obj/effect/spawner/lootdrop/mre/Initialize(mapload)
for(var/A in subtypesof(/obj/item/storage/box/mre))
var/obj/item/storage/box/mre/M = A
var/our_chance = initial(M.spawner_chance)
diff --git a/code/game/objects/effects/spawners/structure.dm b/code/game/objects/effects/spawners/structure.dm
index 7a151c4312..e55a7daa52 100644
--- a/code/game/objects/effects/spawners/structure.dm
+++ b/code/game/objects/effects/spawners/structure.dm
@@ -8,7 +8,7 @@ again.
name = "map structure spawner"
var/list/spawn_list
-/obj/effect/spawner/structure/Initialize()
+/obj/effect/spawner/structure/Initialize(mapload)
. = ..()
if(spawn_list && spawn_list.len)
for(var/I in spawn_list)
@@ -27,7 +27,7 @@ again.
var/electrochromatic
var/electrochromatic_id
-/obj/effect/spawner/structure/window/Initialize()
+/obj/effect/spawner/structure/window/Initialize(mapload)
. = ..()
if(!electrochromatic)
return
@@ -50,7 +50,7 @@ again.
/obj/effect/spawner/structure/window/hollow/end
icon_state = "hwindow_spawner_end"
-/obj/effect/spawner/structure/window/hollow/end/Initialize()
+/obj/effect/spawner/structure/window/hollow/end/Initialize(mapload)
switch(dir)
if(NORTH)
spawn_list = list(/obj/structure/grille, /obj/structure/window/spawner/north, /obj/structure/window/spawner/east, /obj/structure/window/spawner/west)
@@ -65,7 +65,7 @@ again.
/obj/effect/spawner/structure/window/hollow/middle
icon_state = "hwindow_spawner_middle"
-/obj/effect/spawner/structure/window/hollow/middle/Initialize()
+/obj/effect/spawner/structure/window/hollow/middle/Initialize(mapload)
switch(dir)
if(NORTH,SOUTH)
spawn_list = list(/obj/structure/grille, /obj/structure/window, /obj/structure/window/spawner/north)
@@ -76,7 +76,7 @@ again.
/obj/effect/spawner/structure/window/hollow/directional
icon_state = "hwindow_spawner_directional"
-/obj/effect/spawner/structure/window/hollow/directional/Initialize()
+/obj/effect/spawner/structure/window/hollow/directional/Initialize(mapload)
switch(dir)
if(NORTH)
spawn_list = list(/obj/structure/grille, /obj/structure/window/spawner/north)
@@ -111,7 +111,7 @@ again.
/obj/effect/spawner/structure/window/hollow/reinforced/end
icon_state = "hrwindow_spawner_end"
-/obj/effect/spawner/structure/window/hollow/reinforced/end/Initialize()
+/obj/effect/spawner/structure/window/hollow/reinforced/end/Initialize(mapload)
switch(dir)
if(NORTH)
spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/spawner/north, /obj/structure/window/reinforced/spawner/east, /obj/structure/window/reinforced/spawner/west)
@@ -126,7 +126,7 @@ again.
/obj/effect/spawner/structure/window/hollow/reinforced/middle
icon_state = "hrwindow_spawner_middle"
-/obj/effect/spawner/structure/window/hollow/reinforced/middle/Initialize()
+/obj/effect/spawner/structure/window/hollow/reinforced/middle/Initialize(mapload)
switch(dir)
if(NORTH,SOUTH)
spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced, /obj/structure/window/reinforced/spawner/north)
@@ -137,7 +137,7 @@ again.
/obj/effect/spawner/structure/window/hollow/reinforced/directional
icon_state = "hrwindow_spawner_directional"
-/obj/effect/spawner/structure/window/hollow/reinforced/directional/Initialize()
+/obj/effect/spawner/structure/window/hollow/reinforced/directional/Initialize(mapload)
switch(dir)
if(NORTH)
spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/spawner/north)
@@ -211,7 +211,7 @@ again.
/obj/effect/spawner/structure/window/hollow/survival_pod/end
icon_state = "podwindow_spawner_end"
-/obj/effect/spawner/structure/window/hollow/survival_pod/end/Initialize()
+/obj/effect/spawner/structure/window/hollow/survival_pod/end/Initialize(mapload)
switch(dir)
if(NORTH)
spawn_list = list(/obj/structure/grille, /obj/structure/window/shuttle/survival_pod/spawner/north, /obj/structure/window/shuttle/survival_pod/spawner/east, /obj/structure/window/shuttle/survival_pod/spawner/west)
@@ -226,7 +226,7 @@ again.
/obj/effect/spawner/structure/window/hollow/survival_pod/middle
icon_state = "podwindow_spawner_middle"
-/obj/effect/spawner/structure/window/hollow/survival_pod/middle/Initialize()
+/obj/effect/spawner/structure/window/hollow/survival_pod/middle/Initialize(mapload)
switch(dir)
if(NORTH,SOUTH)
spawn_list = list(/obj/structure/grille, /obj/structure/window/shuttle/survival_pod, /obj/structure/window/shuttle/survival_pod/spawner/north)
@@ -237,7 +237,7 @@ again.
/obj/effect/spawner/structure/window/hollow/survival_pod/directional
icon_state = "podwindow_spawner_directional"
-/obj/effect/spawner/structure/window/hollow/survival_pod/directional/Initialize()
+/obj/effect/spawner/structure/window/hollow/survival_pod/directional/Initialize(mapload)
switch(dir)
if(NORTH)
spawn_list = list(/obj/structure/grille, /obj/structure/window/shuttle/survival_pod/spawner/north)
@@ -273,7 +273,7 @@ again.
/obj/effect/spawner/structure/window/hollow/plasma/end
icon_state = "phwindow_spawner_end"
-/obj/effect/spawner/structure/window/hollow/plasma/end/Initialize()
+/obj/effect/spawner/structure/window/hollow/plasma/end/Initialize(mapload)
switch(dir)
if(NORTH)
spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/spawner/north, /obj/structure/window/plasma/spawner/east, /obj/structure/window/plasma/spawner/west)
@@ -288,7 +288,7 @@ again.
/obj/effect/spawner/structure/window/hollow/plasma/middle
icon_state = "phwindow_spawner_middle"
-/obj/effect/spawner/structure/window/hollow/plasma/middle/Initialize()
+/obj/effect/spawner/structure/window/hollow/plasma/middle/Initialize(mapload)
switch(dir)
if(NORTH,SOUTH)
spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma, /obj/structure/window/plasma/spawner/north)
@@ -299,7 +299,7 @@ again.
/obj/effect/spawner/structure/window/hollow/plasma/directional
icon_state = "phwindow_spawner_directional"
-/obj/effect/spawner/structure/window/hollow/plasma/directional/Initialize()
+/obj/effect/spawner/structure/window/hollow/plasma/directional/Initialize(mapload)
switch(dir)
if(NORTH)
spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/spawner/north)
@@ -334,7 +334,7 @@ again.
/obj/effect/spawner/structure/window/hollow/plasma/reinforced/end
icon_state = "phrwindow_spawner_end"
-/obj/effect/spawner/structure/window/hollow/plasma/reinforced/end/Initialize()
+/obj/effect/spawner/structure/window/hollow/plasma/reinforced/end/Initialize(mapload)
switch(dir)
if(NORTH)
spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/reinforced/spawner/north, /obj/structure/window/plasma/reinforced/spawner/east, /obj/structure/window/plasma/reinforced/spawner/west)
@@ -349,7 +349,7 @@ again.
/obj/effect/spawner/structure/window/hollow/plasma/reinforced/middle
icon_state = "phrwindow_spawner_middle"
-/obj/effect/spawner/structure/window/hollow/plasma/reinforced/middle/Initialize()
+/obj/effect/spawner/structure/window/hollow/plasma/reinforced/middle/Initialize(mapload)
switch(dir)
if(NORTH,SOUTH)
spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/reinforced, /obj/structure/window/plasma/reinforced/spawner/north)
@@ -360,7 +360,7 @@ again.
/obj/effect/spawner/structure/window/hollow/plasma/reinforced/directional
icon_state = "phrwindow_spawner_directional"
-/obj/effect/spawner/structure/window/hollow/plasma/reinforced/directional/Initialize()
+/obj/effect/spawner/structure/window/hollow/plasma/reinforced/directional/Initialize(mapload)
switch(dir)
if(NORTH)
spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/reinforced/spawner/north)
diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm
index 4b04606401..11830c009c 100644
--- a/code/game/objects/effects/spiders.dm
+++ b/code/game/objects/effects/spiders.dm
@@ -15,7 +15,7 @@
/obj/structure/spider/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir)
- if(damage_flag == "melee")
+ if(damage_flag == MELEE)
switch(damage_type)
if(BURN)
damage_amount *= 2
@@ -31,12 +31,13 @@
var/genetic = FALSE
icon_state = "stickyweb1"
-/obj/structure/spider/stickyweb/Initialize()
+/obj/structure/spider/stickyweb/Initialize(mapload)
if(prob(50))
icon_state = "stickyweb2"
. = ..()
-/obj/structure/spider/stickyweb/CanPass(atom/movable/mover, turf/target)
+/obj/structure/spider/stickyweb/CanAllowThrough(atom/movable/mover, turf/target)
+ . = ..()
if (genetic)
return
if(istype(mover, /mob/living/simple_animal/hostile/poison/giant_spider))
@@ -49,7 +50,6 @@
return FALSE
else if(istype(mover, /obj/item/projectile))
return prob(30)
- return TRUE
/obj/structure/spider/stickyweb/genetic //for the spider genes in genetics
genetic = TRUE
@@ -84,7 +84,7 @@
var/poison_per_bite = 5
var/list/faction = list("spiders")
-/obj/structure/spider/eggcluster/Initialize()
+/obj/structure/spider/eggcluster/Initialize(mapload)
pixel_x = rand(3,-3)
pixel_y = rand(3,-3)
START_PROCESSING(SSobj, src)
@@ -127,7 +127,7 @@
new/obj/item/reagent_containers/food/snacks/spiderling(get_turf(src))
. = ..()
-/obj/structure/spider/spiderling/Initialize()
+/obj/structure/spider/spiderling/Initialize(mapload)
. = ..()
pixel_x = rand(6,-6)
pixel_y = rand(6,-6)
@@ -248,7 +248,7 @@
icon_state = "cocoon1"
max_integrity = 60
-/obj/structure/spider/cocoon/Initialize()
+/obj/structure/spider/cocoon/Initialize(mapload)
icon_state = pick("cocoon1","cocoon2","cocoon3")
. = ..()
diff --git a/code/game/objects/effects/temporary_visuals/clockcult.dm b/code/game/objects/effects/temporary_visuals/clockcult.dm
index 9a236c00c3..64c34ad1cd 100644
--- a/code/game/objects/effects/temporary_visuals/clockcult.dm
+++ b/code/game/objects/effects/temporary_visuals/clockcult.dm
@@ -69,7 +69,7 @@
pixel_y = 20
duration = 20
-/obj/effect/temp_visual/ratvar/belligerent_cast/Initialize()
+/obj/effect/temp_visual/ratvar/belligerent_cast/Initialize(mapload)
. = ..()
animate(src, alpha = 0, time = duration, easing = EASE_OUT)
@@ -129,14 +129,18 @@
"Your [I.name] shields you from [src]!")
continue
L.visible_message("[L] is struck by a [name]!", "You're struck by a [name]!")
- L.apply_damage(damage, BURN, "chest", L.run_armor_check("chest", "laser", "Your armor absorbs [src]!", "Your armor blocks part of [src]!", 0, "Your armor was penetrated by [src]!"))
+ L.apply_damage(damage, BURN, "chest", L.run_armor_check("chest", LASER, "Your armor absorbs [src]!", "Your armor blocks part of [src]!", 0, "Your armor was penetrated by [src]!"))
log_combat(user, L, "struck with a volt blast")
hit_amount++
- for(var/obj/mecha/M in T)
- if(M.occupant)
- if(is_servant_of_ratvar(M.occupant))
- continue
- to_chat(M.occupant, "Your [M.name] is struck by a [name]!")
+ for(var/obj/vehicle/sealed/mecha/M in T)
+ if(LAZYLEN(M.occupants))
+ for(var/mob/living/MB in M.occupants)
+ if(is_servant_of_ratvar(MB))
+ continue
+ else
+ to_chat(MB, "Your [M.name] is struck by a [name]!")
+ continue
+
M.visible_message("[M] is struck by a [name]!")
M.take_damage(damage, BURN, 0, 0)
hit_amount++
@@ -145,7 +149,7 @@
else
playsound(src, "sparks", 50, 1)
-/obj/effect/temp_visual/ratvar/ocular_warden/Initialize()
+/obj/effect/temp_visual/ratvar/ocular_warden/Initialize(mapload)
. = ..()
pixel_x = rand(-8, 8)
pixel_y = rand(-10, 10)
@@ -184,7 +188,7 @@
layer = ABOVE_MOB_LAYER
duration = 10
-/obj/effect/temp_visual/ratvar/component/Initialize()
+/obj/effect/temp_visual/ratvar/component/Initialize(mapload)
. = ..()
transform = matrix()*0.75
pixel_x = rand(-10, 10)
@@ -215,7 +219,7 @@
light_power = 2
light_color = "#FAE48C"
-/obj/effect/temp_visual/ratvar/sigil/transgression/Initialize()
+/obj/effect/temp_visual/ratvar/sigil/transgression/Initialize(mapload)
. = ..()
var/oldtransform = transform
animate(src, transform = matrix()*2, time = 5)
@@ -277,7 +281,7 @@
/obj/effect/temp_visual/steam_release
name = "all the steam"
-/obj/effect/temp_visual/steam_release/Initialize()
+/obj/effect/temp_visual/steam_release/Initialize(mapload)
..()
for(var/V in GLOB.cardinals)
var/turf/T = get_step(src, V)
diff --git a/code/game/objects/effects/temporary_visuals/temporary_visual.dm b/code/game/objects/effects/temporary_visuals/temporary_visual.dm
index 9a4c26111f..bf4e82f7b7 100644
--- a/code/game/objects/effects/temporary_visuals/temporary_visual.dm
+++ b/code/game/objects/effects/temporary_visuals/temporary_visual.dm
@@ -8,7 +8,7 @@
var/randomdir = TRUE
var/timerid
-/obj/effect/temp_visual/Initialize()
+/obj/effect/temp_visual/Initialize(mapload)
. = ..()
if(randomdir)
setDir(pick(GLOB.cardinals))
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 54bdeff4de..be3f1709a9 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -177,7 +177,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
var/canMouseDown = FALSE
-/obj/item/Initialize()
+/obj/item/Initialize(mapload)
if(attack_verb)
attack_verb = typelist("attack_verb", attack_verb)
@@ -841,9 +841,6 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
return ..()
return 0
-/obj/item/mech_melee_attack(obj/mecha/M)
- return 0
-
/obj/item/burn()
if(!QDELETED(src))
var/turf/T = get_turf(src)
diff --git a/code/game/objects/items/AI_modules.dm b/code/game/objects/items/AI_modules.dm
index 59dd420d23..306b711994 100644
--- a/code/game/objects/items/AI_modules.dm
+++ b/code/game/objects/items/AI_modules.dm
@@ -406,7 +406,7 @@ AI MODULES
/obj/item/aiModule/core/full/custom
name = "Default Core AI Module"
-/obj/item/aiModule/core/full/custom/Initialize()
+/obj/item/aiModule/core/full/custom/Initialize(mapload)
. = ..()
for(var/line in world.file2list("[global.config.directory]/silicon_laws.txt"))
if(!line)
diff --git a/code/game/objects/items/RCD.dm b/code/game/objects/items/RCD.dm
index 07ffe8896e..8896170bd3 100644
--- a/code/game/objects/items/RCD.dm
+++ b/code/game/objects/items/RCD.dm
@@ -24,7 +24,7 @@ RLD
w_class = WEIGHT_CLASS_NORMAL
custom_materials = list(/datum/material/iron=100000)
req_access_txt = "11"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 50)
resistance_flags = FIRE_PROOF
var/datum/effect_system/spark_spread/spark_system
var/matter = 0
@@ -39,7 +39,7 @@ RLD
var/custom_range = 7
var/upgrade = FALSE
-/obj/item/construction/Initialize()
+/obj/item/construction/Initialize(mapload)
. = ..()
spark_system = new /datum/effect_system/spark_spread
spark_system.set_up(5, 0, src)
@@ -464,7 +464,7 @@ RLD
return TRUE
qdel(rcd_effect)
-/obj/item/construction/rcd/Initialize()
+/obj/item/construction/rcd/Initialize(mapload)
. = ..()
GLOB.rcd_list += src
@@ -561,7 +561,7 @@ RLD
cut_overlays() //To prevent infinite stacking of overlays
add_overlay("[icon_state]_charge[ratio]")
-/obj/item/construction/rcd/Initialize()
+/obj/item/construction/rcd/Initialize(mapload)
. = ..()
update_icon()
@@ -699,7 +699,7 @@ RLD
var/color_choice = null
-/obj/item/construction/rld/Initialize()
+/obj/item/construction/rld/Initialize(mapload)
. = ..()
update_icon()
diff --git a/code/game/objects/items/RCL.dm b/code/game/objects/items/RCL.dm
index 019231b8b4..fa73650142 100644
--- a/code/game/objects/items/RCL.dm
+++ b/code/game/objects/items/RCL.dm
@@ -23,7 +23,7 @@
var/datum/radial_menu/persistent/wiring_gui_menu
var/mob/listeningTo
-/obj/item/rcl/Initialize()
+/obj/item/rcl/Initialize(mapload)
. = ..()
RegisterSignal(src, COMSIG_TWOHANDED_WIELD, .proc/on_wield)
RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, .proc/on_unwield)
@@ -314,7 +314,7 @@
else //open the menu
showWiringGui(user)
-/obj/item/rcl/pre_loaded/Initialize() //Comes preloaded with cable, for testing stuff
+/obj/item/rcl/pre_loaded/Initialize(mapload) //Comes preloaded with cable, for testing stuff
loaded = new()
loaded.max_amount = max_amount
loaded.amount = max_amount
diff --git a/code/game/objects/items/RPD.dm b/code/game/objects/items/RPD.dm
index 635ea97902..6f263b7163 100644
--- a/code/game/objects/items/RPD.dm
+++ b/code/game/objects/items/RPD.dm
@@ -206,7 +206,7 @@ GLOBAL_LIST_INIT(fluid_duct_recipes, list(
throw_range = 5
w_class = WEIGHT_CLASS_NORMAL
custom_materials = list(/datum/material/iron=75000, /datum/material/glass=37500)
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 50)
resistance_flags = FIRE_PROOF
var/datum/effect_system/spark_spread/spark_system
var/effectcooldown
@@ -532,7 +532,7 @@ GLOBAL_LIST_INIT(fluid_duct_recipes, list(
category = PLUMBING_CATEGORY
locked = TRUE
-/obj/item/pipe_dispenser/plumbing/Initialize()
+/obj/item/pipe_dispenser/plumbing/Initialize(mapload)
. = ..()
spark_system = new
spark_system.set_up(5, 0, src)
diff --git a/code/game/objects/items/RSF.dm b/code/game/objects/items/RSF.dm
index da5ab1a5a5..4e9470141c 100644
--- a/code/game/objects/items/RSF.dm
+++ b/code/game/objects/items/RSF.dm
@@ -14,7 +14,7 @@ RSF
density = FALSE
anchored = FALSE
item_flags = NOBLUDGEON
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0)
var/matter = 0
var/mode = 1
w_class = WEIGHT_CLASS_NORMAL
diff --git a/code/game/objects/items/airlock_painter.dm b/code/game/objects/items/airlock_painter.dm
index 8edd1c2a76..048a62fea6 100644
--- a/code/game/objects/items/airlock_painter.dm
+++ b/code/game/objects/items/airlock_painter.dm
@@ -16,7 +16,7 @@
var/obj/item/toner/ink = null
-/obj/item/airlock_painter/Initialize()
+/obj/item/airlock_painter/Initialize(mapload)
. = ..()
ink = new /obj/item/toner(src)
@@ -169,7 +169,7 @@
. = ..()
ui_interact(user)
-/obj/item/airlock_painter/decal/Initialize()
+/obj/item/airlock_painter/decal/Initialize(mapload)
. = ..()
ink = new /obj/item/toner/large(src)
@@ -237,6 +237,6 @@
name = "extreme decal painter"
icon_state = "decal_sprayer_ex"
-/obj/item/airlock_painter/decal/debug/Initialize()
+/obj/item/airlock_painter/decal/debug/Initialize(mapload)
. = ..()
ink = new /obj/item/toner/extreme(src)
diff --git a/code/game/objects/items/armor_kits.dm b/code/game/objects/items/armor_kits.dm
index 906d7c5f81..5bed4f01a4 100644
--- a/code/game/objects/items/armor_kits.dm
+++ b/code/game/objects/items/armor_kits.dm
@@ -20,20 +20,20 @@
if(C.attached_accessory)
to_chat(user,"Kind of hard to sew around [C.attached_accessory].")
return
- if(C.armor.getRating("melee") < 10)
- C.armor = C.armor.setRating("melee" = 10)
+ if(C.armor.getRating(MELEE) < 10)
+ C.armor = C.armor.setRating(MELEE = 10)
used = TRUE
- if(C.armor.getRating("laser") < 10)
- C.armor = C.armor.setRating("laser" = 10)
+ if(C.armor.getRating(LASER) < 10)
+ C.armor = C.armor.setRating(LASER = 10)
used = TRUE
- if(C.armor.getRating("fire") < 40)
- C.armor = C.armor.setRating("fire" = 40)
+ if(C.armor.getRating(FIRE) < 40)
+ C.armor = C.armor.setRating(FIRE = 40)
used = TRUE
- if(C.armor.getRating("acid") < 10)
- C.armor = C.armor.setRating("acid" = 10)
+ if(C.armor.getRating(ACID) < 10)
+ C.armor = C.armor.setRating(ACID = 10)
used = TRUE
- if(C.armor.getRating("bomb") < 5)
- C.armor = C.armor.setRating("bomb" = 5)
+ if(C.armor.getRating(BOMB) < 5)
+ C.armor = C.armor.setRating(BOMB = 5)
used = TRUE
if(used)
diff --git a/code/game/objects/items/binoculars.dm b/code/game/objects/items/binoculars.dm
index 01295204a8..0897dc1dca 100644
--- a/code/game/objects/items/binoculars.dm
+++ b/code/game/objects/items/binoculars.dm
@@ -11,7 +11,7 @@
var/zoom_out_amt = 6
var/zoom_amt = 10
-/obj/item/binoculars/Initialize()
+/obj/item/binoculars/Initialize(mapload)
. = ..()
RegisterSignal(src, COMSIG_TWOHANDED_WIELD, .proc/on_wield)
RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, .proc/on_unwield)
diff --git a/code/game/objects/items/boombox.dm b/code/game/objects/items/boombox.dm
index 49e2375c1a..7ac2c67f5a 100644
--- a/code/game/objects/items/boombox.dm
+++ b/code/game/objects/items/boombox.dm
@@ -48,7 +48,7 @@
baseiconstate = "raiqbawks"
availabletrackids = list("hotline.ogg","chiptune.ogg","genesis.ogg")
-/obj/item/boombox/raiq/Initialize()
+/obj/item/boombox/raiq/Initialize(mapload)
. = ..()
RegisterSignal(src, COMSIG_ATOM_UPDATED_ICON, .proc/start_party)
diff --git a/code/game/objects/items/broom.dm b/code/game/objects/items/broom.dm
index 4cbd75ed94..91b37a4c5d 100644
--- a/code/game/objects/items/broom.dm
+++ b/code/game/objects/items/broom.dm
@@ -13,7 +13,7 @@
attack_verb = list("swept", "brushed off", "bludgeoned", "whacked")
resistance_flags = FLAMMABLE
-/obj/item/broom/Initialize()
+/obj/item/broom/Initialize(mapload)
. = ..()
RegisterSignal(src, COMSIG_TWOHANDED_WIELD, .proc/on_wield)
RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, .proc/on_unwield)
diff --git a/code/game/objects/items/candle.dm b/code/game/objects/items/candle.dm
index 960e3ce499..355405b626 100644
--- a/code/game/objects/items/candle.dm
+++ b/code/game/objects/items/candle.dm
@@ -15,7 +15,7 @@
var/start_lit = FALSE
var/heats_space = TRUE
-/obj/item/candle/Initialize()
+/obj/item/candle/Initialize(mapload)
. = ..()
if(start_lit)
light()
diff --git a/code/game/objects/items/cardboard_cutouts.dm b/code/game/objects/items/cardboard_cutouts.dm
index a8ff7b9004..bdfb9798b7 100644
--- a/code/game/objects/items/cardboard_cutouts.dm
+++ b/code/game/objects/items/cardboard_cutouts.dm
@@ -15,7 +15,7 @@
/// If the cutout actually appears as what it portray and not a discolored version
var/deceptive = FALSE
-/obj/item/cardboard_cutout/Initialize()
+/obj/item/cardboard_cutout/Initialize(mapload)
. = ..()
if(possible_appearances)
return
@@ -92,9 +92,9 @@
if(prob(I.force))
push_over()
-/obj/item/cardboard_cutout/bullet_act(obj/item/projectile/P)
+/obj/item/cardboard_cutout/bullet_act(obj/item/projectile/P, def_zone, piercing_hit = FALSE)
if(istype(P, /obj/item/projectile/bullet/reusable))
- P.on_hit(src, 0)
+ P.on_hit(src, 0, piercing_hit)
visible_message("[src] has been hit by [P]!")
playsound(src, 'sound/weapons/slice.ogg', 50, 1)
if(prob(P.damage))
diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm
index df7d6467f0..464b3c5ccc 100644
--- a/code/game/objects/items/cards_ids.dm
+++ b/code/game/objects/items/cards_ids.dm
@@ -34,7 +34,7 @@
righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi'
var/detail_color = COLOR_ASSEMBLY_ORANGE
-/obj/item/card/data/Initialize()
+/obj/item/card/data/Initialize(mapload)
.=..()
update_icon()
@@ -184,7 +184,7 @@
lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi'
slot_flags = ITEM_SLOT_ID
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 100)
resistance_flags = FIRE_PROOF | ACID_PROOF
var/id_type_name = "identification card"
var/mining_points = 0 //For redeeming at mining equipment vendors
@@ -448,7 +448,7 @@
var/anyone = FALSE //Can anyone forge the ID or just syndicate?
var/forged = FALSE //have we set a custom name and job assignment, or will we use what we're given when we chameleon change?
-/obj/item/card/id/syndicate/Initialize()
+/obj/item/card/id/syndicate/Initialize(mapload)
. = ..()
var/datum/action/item_action/chameleon/change/chameleon_action = new(src)
chameleon_action.chameleon_type = /obj/item/card/id
@@ -566,7 +566,7 @@
registered_name = "Captain"
assignment = "Captain"
-/obj/item/card/id/captains_spare/Initialize()
+/obj/item/card/id/captains_spare/Initialize(mapload)
var/datum/job/captain/J = new/datum/job/captain
access = J.get_access()
. = ..()
@@ -578,7 +578,7 @@
registered_name = "Central Command"
assignment = "General"
-/obj/item/card/id/centcom/Initialize()
+/obj/item/card/id/centcom/Initialize(mapload)
access = get_all_centcom_access()
. = ..()
@@ -589,7 +589,7 @@
registered_name = "Emergency Response Team Commander"
assignment = "Emergency Response Team Commander"
-/obj/item/card/id/ert/Initialize()
+/obj/item/card/id/ert/Initialize(mapload)
access = get_all_accesses()+get_ert_access("commander")-ACCESS_CHANGE_IDS
. = ..()
@@ -598,7 +598,7 @@
registered_name = "Security Response Officer"
assignment = "Security Response Officer"
-/obj/item/card/id/ert/Security/Initialize()
+/obj/item/card/id/ert/Security/Initialize(mapload)
access = get_all_accesses()+get_ert_access("sec")-ACCESS_CHANGE_IDS
. = ..()
@@ -607,7 +607,7 @@
registered_name = "Engineer Response Officer"
assignment = "Engineer Response Officer"
-/obj/item/card/id/ert/Engineer/Initialize()
+/obj/item/card/id/ert/Engineer/Initialize(mapload)
access = get_all_accesses()+get_ert_access("eng")-ACCESS_CHANGE_IDS
. = ..()
@@ -616,7 +616,7 @@
registered_name = "Medical Response Officer"
assignment = "Medical Response Officer"
-/obj/item/card/id/ert/Medical/Initialize()
+/obj/item/card/id/ert/Medical/Initialize(mapload)
access = get_all_accesses()+get_ert_access("med")-ACCESS_CHANGE_IDS
. = ..()
@@ -625,7 +625,7 @@
registered_name = "Religious Response Officer"
assignment = "Religious Response Officer"
-/obj/item/card/id/ert/chaplain/Initialize()
+/obj/item/card/id/ert/chaplain/Initialize(mapload)
access = get_all_accesses()+get_ert_access("sec")-ACCESS_CHANGE_IDS
. = ..()
@@ -763,7 +763,7 @@
var/department_ID = ACCOUNT_CIV
var/department_name = ACCOUNT_CIV_NAME
-/obj/item/card/id/departmental_budget/Initialize()
+/obj/item/card/id/departmental_budget/Initialize(mapload)
. = ..()
var/datum/bank_account/B = SSeconomy.get_dep_account(department_ID)
if(B)
@@ -819,7 +819,7 @@
var/id_color = "#00FF00" //defaults to green
var/mutable_appearance/id_overlay
-/obj/item/card/id/knight/Initialize()
+/obj/item/card/id/knight/Initialize(mapload)
. = ..()
id_overlay = mutable_appearance(icon, "knight_overlay")
update_icon()
@@ -870,7 +870,7 @@
icon_state = "ert_janitor"
assignment = "Jannie"
-/obj/item/card/id/debug/Initialize()
+/obj/item/card/id/debug/Initialize(mapload)
access = get_all_accesses()+get_all_centcom_access()+get_all_syndicate_access()
registered_account = SSeconomy.get_dep_account(ACCOUNT_CAR)
. = ..()
diff --git a/code/game/objects/items/chainsaw.dm b/code/game/objects/items/chainsaw.dm
index ebb26fab93..58046a35d1 100644
--- a/code/game/objects/items/chainsaw.dm
+++ b/code/game/objects/items/chainsaw.dm
@@ -23,7 +23,7 @@
var/on = FALSE
var/wielded = FALSE // track wielded status on item
-/obj/item/chainsaw/Initialize()
+/obj/item/chainsaw/Initialize(mapload)
. = ..()
RegisterSignal(src, COMSIG_TWOHANDED_WIELD, .proc/on_wield)
RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, .proc/on_unwield)
diff --git a/code/game/objects/items/charter.dm b/code/game/objects/items/charter.dm
index e9c3842619..8ece13681c 100644
--- a/code/game/objects/items/charter.dm
+++ b/code/game/objects/items/charter.dm
@@ -18,7 +18,7 @@
var/static/regex/standard_station_regex
-/obj/item/station_charter/Initialize()
+/obj/item/station_charter/Initialize(mapload)
. = ..()
if(!standard_station_regex)
var/prefixes = jointext(GLOB.station_prefixes, "|")
diff --git a/code/game/objects/items/chrono_eraser.dm b/code/game/objects/items/chrono_eraser.dm
index 682ce18215..8c510bb489 100644
--- a/code/game/objects/items/chrono_eraser.dm
+++ b/code/game/objects/items/chrono_eraser.dm
@@ -52,7 +52,7 @@
var/obj/effect/chrono_field/field = null
var/turf/startpos = null
-/obj/item/gun/energy/chrono_gun/Initialize()
+/obj/item/gun/energy/chrono_gun/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CHRONO_GUN_TRAIT)
if(istype(loc, /obj/item/chrono_eraser))
@@ -124,7 +124,7 @@
nodamage = 1
var/obj/item/gun/energy/chrono_gun/gun = null
-/obj/item/projectile/energy/chrono_beam/Initialize()
+/obj/item/projectile/energy/chrono_beam/Initialize(mapload)
. = ..()
var/obj/item/ammo_casing/energy/chrono_beam/C = loc
if(istype(C))
@@ -143,7 +143,7 @@
e_cost = 0
var/obj/item/gun/energy/chrono_gun/gun
-/obj/item/ammo_casing/energy/chrono_beam/Initialize()
+/obj/item/ammo_casing/energy/chrono_beam/Initialize(mapload)
if(istype(loc))
gun = loc
. = ..()
diff --git a/code/game/objects/items/cigs_lighters.dm b/code/game/objects/items/cigs_lighters.dm
index 8227097d8f..518772c771 100644
--- a/code/game/objects/items/cigs_lighters.dm
+++ b/code/game/objects/items/cigs_lighters.dm
@@ -123,7 +123,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
user.visible_message("[user] is huffing [src] as quickly as [user.p_they()] can! It looks like [user.p_theyre()] trying to give [user.p_them()]self cancer.")
return (TOXLOSS|OXYLOSS)
-/obj/item/clothing/mask/cigarette/Initialize()
+/obj/item/clothing/mask/cigarette/Initialize(mapload)
. = ..()
create_reagents(chem_volume, INJECTABLE | NO_REACT, NO_REAGENTS_VALUE) // so it doesn't react until you light it
if(list_reagents)
@@ -398,7 +398,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
throwforce = 0
grind_results = list(/datum/reagent/carbon = 2)
-/obj/item/cigbutt/Initialize()
+/obj/item/cigbutt/Initialize(mapload)
. = ..()
AddElement(/datum/element/trash)
@@ -422,7 +422,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
list_reagents = null
var/packeditem = 0
-/obj/item/clothing/mask/cigarette/pipe/Initialize()
+/obj/item/clothing/mask/cigarette/pipe/Initialize(mapload)
. = ..()
name = "empty [initial(name)]"
@@ -532,7 +532,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
grind_results = list(/datum/reagent/iron = 1, /datum/reagent/fuel = 5, /datum/reagent/oil = 5)
custom_price = PRICE_ALMOST_CHEAP
-/obj/item/lighter/Initialize()
+/obj/item/lighter/Initialize(mapload)
. = ..()
if(!overlay_state)
overlay_state = pick(overlay_list)
@@ -670,7 +670,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
COLOR_ASSEMBLY_PURPLE
)
-/obj/item/lighter/greyscale/Initialize()
+/obj/item/lighter/greyscale/Initialize(mapload)
. = ..()
if(!lighter_color)
lighter_color = pick(color_list)
@@ -917,7 +917,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
var/list/list_reagents = list() //For the base reagents bongs could get
-/obj/item/bong/Initialize()
+/obj/item/bong/Initialize(mapload)
. = ..()
create_reagents(chem_volume, NO_REACT) // so it doesn't react until you light it
reagents.add_reagent_list(list_reagents)
diff --git a/code/game/objects/items/circuitboards/computer_circuitboards.dm b/code/game/objects/items/circuitboards/computer_circuitboards.dm
index 742a1fe3b0..74d11e9c11 100644
--- a/code/game/objects/items/circuitboards/computer_circuitboards.dm
+++ b/code/game/objects/items/circuitboards/computer_circuitboards.dm
@@ -313,7 +313,7 @@
var/challenge = FALSE
var/moved = FALSE
-/obj/item/circuitboard/computer/syndicate_shuttle/Initialize()
+/obj/item/circuitboard/computer/syndicate_shuttle/Initialize(mapload)
. = ..()
GLOB.syndicate_shuttle_boards += src
diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm
index cb1d4aae88..ef9825ee79 100644
--- a/code/game/objects/items/circuitboards/machine_circuitboards.dm
+++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm
@@ -77,7 +77,7 @@
#define PATH_POWERCOIL /obj/machinery/power/tesla_coil/power
#define PATH_RPCOIL /obj/machinery/power/tesla_coil/research
-/obj/item/circuitboard/machine/tesla_coil/Initialize()
+/obj/item/circuitboard/machine/tesla_coil/Initialize(mapload)
. = ..()
if(build_path)
build_path = PATH_POWERCOIL
@@ -347,7 +347,7 @@
#define PATH_FREEZER /obj/machinery/atmospherics/components/unary/thermomachine/freezer
#define PATH_HEATER /obj/machinery/atmospherics/components/unary/thermomachine/heater
-/obj/item/circuitboard/machine/thermomachine/Initialize()
+/obj/item/circuitboard/machine/thermomachine/Initialize(mapload)
. = ..()
if(!build_path)
if(prob(50))
@@ -920,14 +920,14 @@
/obj/item/stock_parts/cell = 1)
needs_anchored = FALSE
-// /obj/item/circuitboard/machine/stasis
-// name = "\improper Lifeform Stasis Unit (Machine Board)"
-// icon_state = "medical"
-// build_path = /obj/machinery/stasis
-// req_components = list(
-// /obj/item/stack/cable_coil = 3,
-// /obj/item/stock_parts/manipulator = 1,
-// /obj/item/stock_parts/capacitor = 1)
+/obj/item/circuitboard/machine/stasis
+ name = "\improper Lifeform Stasis Unit (Machine Board)"
+ icon_state = "medical"
+ build_path = /obj/machinery/stasis
+ req_components = list(
+ /obj/item/stack/cable_coil = 3,
+ /obj/item/stock_parts/manipulator = 1,
+ /obj/item/stock_parts/capacitor = 1)
/obj/item/circuitboard/machine/medipen_refiller
name = "Medipen Refiller (Machine Board)"
diff --git a/code/game/objects/items/clown_items.dm b/code/game/objects/items/clown_items.dm
index f5477ae5f6..d8d471abaf 100644
--- a/code/game/objects/items/clown_items.dm
+++ b/code/game/objects/items/clown_items.dm
@@ -27,7 +27,7 @@
var/cleanspeed = 50 //slower than mop
force_string = "robust... against germs"
-/obj/item/soap/Initialize()
+/obj/item/soap/Initialize(mapload)
. = ..()
AddComponent(/datum/component/slippery, 80)
diff --git a/code/game/objects/items/control_wand.dm b/code/game/objects/items/control_wand.dm
index be39bb6973..c87dad8f8c 100644
--- a/code/game/objects/items/control_wand.dm
+++ b/code/game/objects/items/control_wand.dm
@@ -15,7 +15,7 @@
var/region_access = 1 //See access.dm
var/list/access_list
-/obj/item/door_remote/Initialize()
+/obj/item/door_remote/Initialize(mapload)
. = ..()
access_list = get_region_accesses(region_access)
AddComponent(/datum/component/ntnet_interface)
diff --git a/code/game/objects/items/crab17.dm b/code/game/objects/items/crab17.dm
index 8d55d3d5a2..b71b520517 100644
--- a/code/game/objects/items/crab17.dm
+++ b/code/game/objects/items/crab17.dm
@@ -29,7 +29,7 @@
icon = 'icons/obj/money_machine.dmi'
icon_state = "bogdanoff"
layer = LARGE_MOB_LAYER
- armor = list("melee" = 80, "bullet" = 30, "laser" = 30, "energy" = 60, "bomb" = 90, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 80)
+ armor = list(MELEE = 80, BULLET = 30, LASER = 30, ENERGY = 60, BOMB = 90, BIO = 0, RAD = 0, FIRE = 100, ACID = 80)
density = TRUE
pixel_z = -8
max_integrity = 5000
diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm
index bf1fdb1716..61bc715a64 100644
--- a/code/game/objects/items/crayons.dm
+++ b/code/game/objects/items/crayons.dm
@@ -83,7 +83,7 @@
user.visible_message("[user] is jamming [src] up [user.p_their()] nose and into [user.p_their()] brain. It looks like [user.p_theyre()] trying to commit suicide!")
return (BRUTELOSS|OXYLOSS)
-/obj/item/toy/crayon/Initialize()
+/obj/item/toy/crayon/Initialize(mapload)
. = ..()
// Makes crayons identifiable in things like grinders
if(name == "crayon")
@@ -606,7 +606,7 @@
icon_state = "crayonbox"
w_class = WEIGHT_CLASS_SMALL
-/obj/item/storage/crayons/Initialize()
+/obj/item/storage/crayons/Initialize(mapload)
. = ..()
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
STR.max_items = 7
@@ -701,7 +701,7 @@
return (OXYLOSS)
-/obj/item/toy/crayon/spraycan/Initialize()
+/obj/item/toy/crayon/spraycan/Initialize(mapload)
. = ..()
// If default crayon red colour, pick a more fun spraycan colour
if(!paint_color)
diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm
index 36f68cfdf3..f66a1bea24 100644
--- a/code/game/objects/items/defib.dm
+++ b/code/game/objects/items/defib.dm
@@ -14,7 +14,7 @@
throwforce = 6
w_class = WEIGHT_CLASS_BULKY
actions_types = list(/datum/action/item_action/toggle_paddles)
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50)
var/on = FALSE //if the paddles are equipped (1) or on the defib (0)
var/safety = TRUE //if you can zap people with the defibs on harm mode
@@ -33,7 +33,7 @@
/obj/item/defibrillator/get_cell()
return cell
-/obj/item/defibrillator/Initialize() //starts without a cell for rnd
+/obj/item/defibrillator/Initialize(mapload) //starts without a cell for rnd
. = ..()
if(cell)
cell = new cell(src)
@@ -287,7 +287,7 @@
var/disarm_shock_time = 10
var/wielded = FALSE // track wielded status on item
-/obj/item/shockpaddles/Initialize()
+/obj/item/shockpaddles/Initialize(mapload)
. = ..()
RegisterSignal(src, COMSIG_TWOHANDED_WIELD, .proc/on_wield)
RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, .proc/on_unwield)
diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm
index 1a130998b6..7fb1dd0065 100644
--- a/code/game/objects/items/devices/PDA/PDA.dm
+++ b/code/game/objects/items/devices/PDA/PDA.dm
@@ -29,7 +29,7 @@ GLOBAL_LIST_EMPTY(PDAs)
item_flags = NOBLUDGEON
w_class = WEIGHT_CLASS_TINY
slot_flags = ITEM_SLOT_ID | ITEM_SLOT_BELT
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 100)
resistance_flags = FIRE_PROOF | ACID_PROOF
//Main variables
@@ -115,7 +115,7 @@ GLOBAL_LIST_EMPTY(PDAs)
if(LAZYLEN(GLOB.pda_reskins))
. += "Ctrl-shift-click it to reskin it."
-/obj/item/pda/Initialize()
+/obj/item/pda/Initialize(mapload)
. = ..()
if(fon)
set_light(f_lum, f_pow, f_col)
diff --git a/code/game/objects/items/devices/PDA/PDA_types.dm b/code/game/objects/items/devices/PDA/PDA_types.dm
index 8fcd97c261..e857b7dbd5 100644
--- a/code/game/objects/items/devices/PDA/PDA_types.dm
+++ b/code/game/objects/items/devices/PDA/PDA_types.dm
@@ -8,7 +8,7 @@
ttone = "honk"
var/slipvictims = list() //CIT CHANGE - makes clown PDAs track unique people slipped
-/obj/item/pda/clown/Initialize()
+/obj/item/pda/clown/Initialize(mapload)
. = ..()
AddComponent(/datum/component/slippery, 120, NO_SLIP_WHEN_WALKING|SLIP_WHEN_JOGGING, CALLBACK(src, .proc/AfterSlip))
diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm
index ca72e3371b..34f8202898 100644
--- a/code/game/objects/items/devices/PDA/cart.dm
+++ b/code/game/objects/items/devices/PDA/cart.dm
@@ -52,7 +52,7 @@
var/mob/living/simple_animal/bot/active_bot
var/list/botlist = list()
-/obj/item/cartridge/Initialize()
+/obj/item/cartridge/Initialize(mapload)
. = ..()
var/obj/item/pda/pda = loc
if(istype(pda))
@@ -131,7 +131,7 @@
icon_state = "cart-tox"
access = CART_REAGENT_SCANNER | CART_ATMOS
-/obj/item/cartridge/signal/Initialize()
+/obj/item/cartridge/signal/Initialize(mapload)
. = ..()
radio = new(src)
@@ -180,7 +180,7 @@
access = CART_MANIFEST | CART_STATUS_DISPLAY | CART_REAGENT_SCANNER | CART_ATMOS | CART_DRONEPHONE
bot_access_flags = FLOOR_BOT | CLEAN_BOT | MED_BOT | FIRE_BOT
-/obj/item/cartridge/rd/Initialize()
+/obj/item/cartridge/rd/Initialize(mapload)
. = ..()
radio = new(src)
diff --git a/code/game/objects/items/devices/PDA/radio.dm b/code/game/objects/items/devices/PDA/radio.dm
index 329631ff9e..39d1a7b522 100644
--- a/code/game/objects/items/devices/PDA/radio.dm
+++ b/code/game/objects/items/devices/PDA/radio.dm
@@ -15,7 +15,7 @@
radio_connection = null
return ..()
-/obj/item/integrated_signaler/Initialize()
+/obj/item/integrated_signaler/Initialize(mapload)
. = ..()
if (frequency < MIN_FREE_FREQ || frequency > MAX_FREE_FREQ)
frequency = sanitize_frequency(frequency)
diff --git a/code/game/objects/items/devices/beacon.dm b/code/game/objects/items/devices/beacon.dm
index e868ec07b6..86aa787c3e 100644
--- a/code/game/objects/items/devices/beacon.dm
+++ b/code/game/objects/items/devices/beacon.dm
@@ -9,11 +9,11 @@
var/enabled = TRUE
var/renamed = FALSE
-/obj/item/beacon/Initialize()
+/obj/item/beacon/Initialize(mapload)
. = ..()
if (enabled)
GLOB.teleportbeacons += src
- else
+ else
icon_state = "beacon-off"
/obj/item/beacon/Destroy()
@@ -25,7 +25,7 @@
if (enabled)
icon_state = "beacon"
GLOB.teleportbeacons += src
- else
+ else
icon_state = "beacon-off"
GLOB.teleportbeacons.Remove(src)
to_chat(user, "You [enabled ? "enable" : "disable"] the beacon.")
@@ -40,5 +40,5 @@
name = new_name
renamed = TRUE
return
- else
+ else
return ..()
diff --git a/code/game/objects/items/devices/camera_bug.dm b/code/game/objects/items/devices/camera_bug.dm
index e20321414d..da5bed07ce 100644
--- a/code/game/objects/items/devices/camera_bug.dm
+++ b/code/game/objects/items/devices/camera_bug.dm
@@ -161,7 +161,7 @@
dat += " (Stage [stage])"
dat += " \[Track\]
"
- for(var/obj/mecha/M in seen)
+ for(var/obj/vehicle/sealed/mecha/M in seen)
if(M.name in names)
names[M.name]++
dat += "[M.name] ([names[M.name]])"
diff --git a/code/game/objects/items/devices/dogborg_sleeper.dm b/code/game/objects/items/devices/dogborg_sleeper.dm
index e7493efadc..73574eda96 100644
--- a/code/game/objects/items/devices/dogborg_sleeper.dm
+++ b/code/game/objects/items/devices/dogborg_sleeper.dm
@@ -47,7 +47,7 @@
// Bags are prohibited from this due to the potential explotation of objects, same with brought
-/obj/item/dogborg/sleeper/Initialize()
+/obj/item/dogborg/sleeper/Initialize(mapload)
. = ..()
update_icon()
item_flags |= NOBLUDGEON //No more attack messages
diff --git a/code/game/objects/items/devices/electroadaptive_pseudocircuit.dm b/code/game/objects/items/devices/electroadaptive_pseudocircuit.dm
index 5dbda8de54..9c06c92108 100644
--- a/code/game/objects/items/devices/electroadaptive_pseudocircuit.dm
+++ b/code/game/objects/items/devices/electroadaptive_pseudocircuit.dm
@@ -11,7 +11,7 @@
var/static/recycleable_circuits = typecacheof(list(/obj/item/electronics/firelock, /obj/item/electronics/airalarm, /obj/item/electronics/firealarm, \
/obj/item/electronics/apc))//A typecache of circuits consumable for material
-/obj/item/electroadaptive_pseudocircuit/Initialize()
+/obj/item/electroadaptive_pseudocircuit/Initialize(mapload)
. = ..()
maptext = "[circuits]"
diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm
index e29519406a..79489c3c51 100644
--- a/code/game/objects/items/devices/flashlight.dm
+++ b/code/game/objects/items/devices/flashlight.dm
@@ -17,7 +17,7 @@
var/flashlight_power = 0.8 //strength of the light when on
light_color = "#FFCC66"
-/obj/item/flashlight/Initialize()
+/obj/item/flashlight/Initialize(mapload)
. = ..()
if(icon_state == "[initial(icon_state)]-on")
on = TRUE
@@ -461,7 +461,7 @@
rad_flags = RAD_NO_CONTAMINATE
var/fuel = 0
-/obj/item/flashlight/glowstick/Initialize()
+/obj/item/flashlight/glowstick/Initialize(mapload)
fuel = rand(1000, 1500)
light_color = color
. = ..()
diff --git a/code/game/objects/items/devices/forcefieldprojector.dm b/code/game/objects/items/devices/forcefieldprojector.dm
index 9ef9d73705..47c3bc8d13 100644
--- a/code/game/objects/items/devices/forcefieldprojector.dm
+++ b/code/game/objects/items/devices/forcefieldprojector.dm
@@ -84,10 +84,11 @@
layer = ABOVE_ALL_MOB_LAYER
anchored = TRUE
density = TRUE
+ pass_flags_self = PASSGLASS
mouse_opacity = MOUSE_OPACITY_OPAQUE
resistance_flags = INDESTRUCTIBLE
CanAtmosPass = ATMOS_PASS_DENSITY
- armor = list("melee" = 0, "bullet" = 25, "laser" = 25, "energy" = 25, "bomb" = 25, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100)
+ armor = list(MELEE = 0, BULLET = 25, LASER = 25, ENERGY = 25, BOMB = 25, BIO = 100, RAD = 100, FIRE = 100, ACID = 100)
var/obj/item/forcefield_projector/generator
/obj/structure/projected_forcefield/Initialize(mapload, obj/item/forcefield_projector/origin)
@@ -101,11 +102,6 @@
generator = null
return ..()
-/obj/structure/projected_forcefield/CanPass(atom/movable/mover, turf/target)
- if(istype(mover) && (mover.pass_flags & PASSGLASS))
- return 1
- return !density
-
/obj/structure/projected_forcefield/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
playsound(loc, 'sound/weapons/egloves.ogg', 80, 1)
diff --git a/code/game/objects/items/devices/geiger_counter.dm b/code/game/objects/items/devices/geiger_counter.dm
index aa54ee6219..4caf9ee0aa 100644
--- a/code/game/objects/items/devices/geiger_counter.dm
+++ b/code/game/objects/items/devices/geiger_counter.dm
@@ -32,7 +32,7 @@
var/fail_to_receive = 0
var/current_warning = 1
-/obj/item/geiger_counter/Initialize()
+/obj/item/geiger_counter/Initialize(mapload)
. = ..()
START_PROCESSING(SSobj, src)
diff --git a/code/game/objects/items/devices/gps.dm b/code/game/objects/items/devices/gps.dm
index e0453cebc0..e2dc7b0f91 100644
--- a/code/game/objects/items/devices/gps.dm
+++ b/code/game/objects/items/devices/gps.dm
@@ -11,7 +11,7 @@
var/emp_proof = FALSE
var/starton = TRUE
-/obj/item/gps/Initialize()
+/obj/item/gps/Initialize(mapload)
. = ..()
AddComponent(/datum/component/gps/item, gpstag, emp_proof, starton)
@@ -36,7 +36,7 @@
gpstag = "BORG0"
desc = "A mining cyborg internal positioning system. Used as a recovery beacon for damaged cyborg assets, or a collaboration tool for mining teams."
-/obj/item/gps/cyborg/Initialize()
+/obj/item/gps/cyborg/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CYBORG_ITEM_TRAIT)
@@ -75,7 +75,7 @@
for marking the area around the transition edges."
var/list/turf/tagged
-/obj/item/gps/visible_debug/Initialize()
+/obj/item/gps/visible_debug/Initialize(mapload)
. = ..()
tagged = list()
START_PROCESSING(SSfastprocess, src)
diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm
index 1e43f0f883..fbc241c5de 100644
--- a/code/game/objects/items/devices/multitool.dm
+++ b/code/game/objects/items/devices/multitool.dm
@@ -45,7 +45,7 @@
throwforce = 10
obj_flags = UNIQUE_RENAME
-/obj/item/multitool/chaplain/Initialize()
+/obj/item/multitool/chaplain/Initialize(mapload)
. = ..()
AddComponent(/datum/component/anti_magic, TRUE, TRUE, FALSE, null, null, FALSE)
@@ -130,7 +130,7 @@
var/mob/camera/aiEye/remote/ai_detector/eye
var/datum/action/item_action/toggle_multitool/toggle_action
-/obj/item/multitool/ai_detect/Initialize()
+/obj/item/multitool/ai_detect/Initialize(mapload)
. = ..()
START_PROCESSING(SSobj, src)
eye = new /mob/camera/aiEye/remote/ai_detector()
diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm
index d54911528d..845c8a874f 100644
--- a/code/game/objects/items/devices/paicard.dm
+++ b/code/game/objects/items/devices/paicard.dm
@@ -15,7 +15,7 @@
user.visible_message("[user] is staring sadly at [src]! [user.p_they()] can't keep living without real human intimacy!")
return OXYLOSS
-/obj/item/paicard/Initialize()
+/obj/item/paicard/Initialize(mapload)
SSpai.pai_card_list += src
add_overlay("pai-off")
AddElement(/datum/element/bed_tuckable, 6, -5, 90)
diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm
index 838b5376c5..140bcc192f 100644
--- a/code/game/objects/items/devices/powersink.dm
+++ b/code/game/objects/items/devices/powersink.dm
@@ -28,7 +28,7 @@ GLOBAL_LIST_EMPTY(power_sinks)
var/obj/structure/cable/attached // the attached cable
-/obj/item/powersink/Initialize()
+/obj/item/powersink/Initialize(mapload)
. = ..()
GLOB.power_sinks += src
diff --git a/code/game/objects/items/devices/pressureplates.dm b/code/game/objects/items/devices/pressureplates.dm
index 2b5c8d873b..47dcaae60e 100644
--- a/code/game/objects/items/devices/pressureplates.dm
+++ b/code/game/objects/items/devices/pressureplates.dm
@@ -22,7 +22,7 @@
var/can_trigger = TRUE
var/trigger_delay = 10
-/obj/item/pressure_plate/Initialize()
+/obj/item/pressure_plate/Initialize(mapload)
. = ..()
tile_overlay = image(icon = 'icons/turf/floors.dmi', icon_state = "pp_overlay")
if(roundstart_signaller)
diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm
index 2c55bbf8e4..9e802d173c 100644
--- a/code/game/objects/items/devices/radio/electropack.dm
+++ b/code/game/objects/items/devices/radio/electropack.dm
@@ -20,7 +20,7 @@
user.visible_message("[user] hooks [user.p_them()]self to the electropack and spams the trigger! It looks like [user.p_theyre()] trying to commit suicide!")
return (FIRELOSS)
-/obj/item/electropack/Initialize()
+/obj/item/electropack/Initialize(mapload)
. = ..()
set_frequency(frequency)
diff --git a/code/game/objects/items/devices/radio/encryptionkey.dm b/code/game/objects/items/devices/radio/encryptionkey.dm
index e26b9dd845..9ad75b5d8f 100644
--- a/code/game/objects/items/devices/radio/encryptionkey.dm
+++ b/code/game/objects/items/devices/radio/encryptionkey.dm
@@ -9,7 +9,7 @@
var/independent = FALSE
var/list/channels = list()
-/obj/item/encryptionkey/Initialize()
+/obj/item/encryptionkey/Initialize(mapload)
. = ..()
if(!channels.len)
desc = "An encryption key for a radio headset. Has no special codes in it. You should probably tell a coder!"
diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm
index 6feb8bf663..8403ea30e7 100644
--- a/code/game/objects/items/devices/radio/headset.dm
+++ b/code/game/objects/items/devices/radio/headset.dm
@@ -58,7 +58,7 @@ GLOBAL_LIST_INIT(channel_tokens, list(
if (bowman)
AddComponent(/datum/component/wearertargeting/earprotection, list(ITEM_SLOT_EARS))
-/obj/item/radio/headset/Initialize()
+/obj/item/radio/headset/Initialize(mapload)
. = ..()
recalculateChannels()
@@ -94,12 +94,12 @@ GLOBAL_LIST_INIT(channel_tokens, list(
name = "team leader headset"
command = TRUE
-/obj/item/radio/headset/syndicate/Initialize()
+/obj/item/radio/headset/syndicate/Initialize(mapload)
. = ..()
make_syndie()
/obj/item/radio/headset/binary
-/obj/item/radio/headset/binary/Initialize()
+/obj/item/radio/headset/binary/Initialize(mapload)
. = ..()
qdel(keyslot)
keyslot = new /obj/item/encryptionkey/binary
diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm
index e81110425c..ce5305f7dc 100644
--- a/code/game/objects/items/devices/radio/radio.dm
+++ b/code/game/objects/items/devices/radio/radio.dm
@@ -84,7 +84,7 @@
QDEL_NULL(keyslot)
return ..()
-/obj/item/radio/Initialize()
+/obj/item/radio/Initialize(mapload)
wires = new /datum/wires/radio(src)
if(prison_radio)
wires.cut(WIRE_TX) // OH GOD WHY
@@ -378,7 +378,7 @@
syndie = 1
keyslot = new /obj/item/encryptionkey/syndicate
-/obj/item/radio/borg/syndicate/Initialize()
+/obj/item/radio/borg/syndicate/Initialize(mapload)
. = ..()
set_frequency(FREQ_SYNDICATE)
diff --git a/code/game/objects/items/devices/reverse_bear_trap.dm b/code/game/objects/items/devices/reverse_bear_trap.dm
index 810f2150e6..48206ba867 100644
--- a/code/game/objects/items/devices/reverse_bear_trap.dm
+++ b/code/game/objects/items/devices/reverse_bear_trap.dm
@@ -22,7 +22,7 @@
var/datum/looping_sound/reverse_bear_trap/soundloop
var/datum/looping_sound/reverse_bear_trap_beep/soundloop2
-/obj/item/reverse_bear_trap/Initialize()
+/obj/item/reverse_bear_trap/Initialize(mapload)
. = ..()
soundloop = new(src)
soundloop2 = new(src)
diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm
index 11900d8e42..dea3bda144 100644
--- a/code/game/objects/items/devices/traitordevices.dm
+++ b/code/game/objects/items/devices/traitordevices.dm
@@ -78,7 +78,7 @@ effective or pretty fucking useless.
var/ui_x = 320
var/ui_y = 335
-/obj/item/healthanalyzer/rad_laser/Initialize()
+/obj/item/healthanalyzer/rad_laser/Initialize(mapload)
. = ..()
AddComponent(/datum/component/identification/syndicate, ID_COMPONENT_DEL_ON_IDENTIFY, ID_COMPONENT_EFFECT_NO_ACTIONS, ID_COMPONENT_IDENTIFY_WITH_DECONSTRUCTOR)
diff --git a/code/game/objects/items/dice.dm b/code/game/objects/items/dice.dm
index 53b0860def..91aad761d9 100644
--- a/code/game/objects/items/dice.dm
+++ b/code/game/objects/items/dice.dm
@@ -50,7 +50,7 @@
var/can_be_rigged = TRUE
var/rigged = FALSE
-/obj/item/dice/Initialize()
+/obj/item/dice/Initialize(mapload)
. = ..()
result = roll(sides)
update_icon()
@@ -89,7 +89,7 @@
desc = "A die with six sides. 6 TIMES 255 TIMES 255 TILE TOTAL EXISTENCE, SQUARE YOUR MIND OF EDUCATED STUPID: 2 DOES NOT EXIST."
icon_state = "spaced6"
-/obj/item/dice/d6/space/Initialize()
+/obj/item/dice/d6/space/Initialize(mapload)
. = ..()
if(prob(10))
name = "spess cube"
diff --git a/code/game/objects/items/dualsaber.dm b/code/game/objects/items/dualsaber.dm
index 9a6a87bb51..dc1a9fbd49 100644
--- a/code/game/objects/items/dualsaber.dm
+++ b/code/game/objects/items/dualsaber.dm
@@ -21,7 +21,7 @@
light_color = "#00ff00"//green
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
max_integrity = 200
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 70)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 70)
resistance_flags = FIRE_PROOF
wound_bonus = -40
bare_wound_bonus = 20
@@ -84,7 +84,7 @@
block_return[BLOCK_RETURN_REDIRECT_METHOD] = REDIRECT_METHOD_DEFLECT
. |= BLOCK_SHOULD_REDIRECT
-/obj/item/dualsaber/Initialize()
+/obj/item/dualsaber/Initialize(mapload)
. = ..()
RegisterSignal(src, COMSIG_TWOHANDED_WIELD, .proc/on_wield)
RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, .proc/on_unwield)
@@ -94,7 +94,7 @@
AddComponent(/datum/component/two_handed, force_unwielded=3, force_wielded=34, \
wieldsound='sound/weapons/saberon.ogg', unwieldsound='sound/weapons/saberoff.ogg')
-/obj/item/dualsaber/Initialize()
+/obj/item/dualsaber/Initialize(mapload)
. = ..()
if(LAZYLEN(possible_colors))
saber_color = pick(possible_colors)
diff --git a/code/game/objects/items/extinguisher.dm b/code/game/objects/items/extinguisher.dm
index 301b8d4155..372d1a1733 100644
--- a/code/game/objects/items/extinguisher.dm
+++ b/code/game/objects/items/extinguisher.dm
@@ -53,7 +53,7 @@
power = 7
cooling_power = 3
-/obj/item/extinguisher/Initialize()
+/obj/item/extinguisher/Initialize(mapload)
. = ..()
create_reagents(max_water, AMOUNT_VISIBLE)
reagents.add_reagent(chem, max_water)
diff --git a/code/game/objects/items/fireaxe.dm b/code/game/objects/items/fireaxe.dm
index 6fb7b89262..c865eedf6a 100644
--- a/code/game/objects/items/fireaxe.dm
+++ b/code/game/objects/items/fireaxe.dm
@@ -15,13 +15,13 @@
hitsound = 'sound/weapons/bladeslice.ogg'
sharpness = SHARP_EDGED
max_integrity = 200
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 30)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 30)
resistance_flags = FIRE_PROOF
wound_bonus = -15
bare_wound_bonus = 20
var/wielded = FALSE // track wielded status on item
-/obj/item/fireaxe/Initialize()
+/obj/item/fireaxe/Initialize(mapload)
. = ..()
RegisterSignal(src, COMSIG_TWOHANDED_WIELD, .proc/on_wield)
RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, .proc/on_unwield)
@@ -52,10 +52,10 @@
return
if(istype(A, /obj/structure/window)) //destroys windows and grilles in one hit (or more if it has a ton of health like plasmaglass)
var/obj/structure/window/W = A
- W.take_damage(200, BRUTE, "melee", 0)
+ W.take_damage(200, BRUTE, MELEE, 0)
else if(istype(A, /obj/structure/grille))
var/obj/structure/grille/G = A
- G.take_damage(40, BRUTE, "melee", 0)
+ G.take_damage(40, BRUTE, MELEE, 0)
/*
* Bone Axe
diff --git a/code/game/objects/items/fluff.dm b/code/game/objects/items/fluff.dm
index 0df8d5b447..1077aab87e 100644
--- a/code/game/objects/items/fluff.dm
+++ b/code/game/objects/items/fluff.dm
@@ -88,7 +88,7 @@
poly_states = 0
actions_types = list(/datum/action/item_action/squeeze)
-/obj/item/toy/fluff/tennis_poly/tri/squeak/Initialize()
+/obj/item/toy/fluff/tennis_poly/tri/squeak/Initialize(mapload)
. = ..()
AddComponent(/datum/component/squeak)
@@ -124,7 +124,7 @@
name = "polychromic bone"
desc = "A polychromic chew bone. Makes a small squeak when squeezed."
-/obj/item/toy/fluff/bone_poly/squeak/Initialize()
+/obj/item/toy/fluff/bone_poly/squeak/Initialize(mapload)
. = ..()
AddComponent(/datum/component/squeak)
diff --git a/code/game/objects/items/granters.dm b/code/game/objects/items/granters.dm
index c084b90d6f..7227b10298 100644
--- a/code/game/objects/items/granters.dm
+++ b/code/game/objects/items/granters.dm
@@ -368,7 +368,7 @@
/obj/item/book/granter/spell/random
icon_state = "random_book"
-/obj/item/book/granter/spell/random/Initialize()
+/obj/item/book/granter/spell/random/Initialize(mapload)
. = ..()
var/static/banned_spells = list(/obj/item/book/granter/spell/mimery_blockade, /obj/item/book/granter/spell/mimery_guns)
var/real_type = pick(subtypesof(/obj/item/book/granter/spell) - banned_spells)
diff --git a/code/game/objects/items/grenades/chem_grenade.dm b/code/game/objects/items/grenades/chem_grenade.dm
index 2032758624..3d35f7eb24 100644
--- a/code/game/objects/items/grenades/chem_grenade.dm
+++ b/code/game/objects/items/grenades/chem_grenade.dm
@@ -20,7 +20,7 @@
var/no_splash = FALSE //If the grenade deletes even if it has no reagents to splash with. Used for slime core reactions.
var/casedesc = "This basic model accepts both beakers and bottles. It heats contents by 10°K upon ignition." // Appears when examining empty casings.
-/obj/item/grenade/chem_grenade/Initialize()
+/obj/item/grenade/chem_grenade/Initialize(mapload)
. = ..()
create_reagents(1000)
stage_change() // If no argument is set, it will change the stage to the current stage, useful for stock grenades that start READY.
@@ -326,7 +326,7 @@
desc = "Used for emergency sealing of hull breaches."
stage = READY
-/obj/item/grenade/chem_grenade/metalfoam/Initialize()
+/obj/item/grenade/chem_grenade/metalfoam/Initialize(mapload)
. = ..()
var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
@@ -344,7 +344,7 @@
desc = "Used for emergency sealing of hull breaches, while keeping areas accessible."
stage = READY
-/obj/item/grenade/chem_grenade/smart_metal_foam/Initialize()
+/obj/item/grenade/chem_grenade/smart_metal_foam/Initialize(mapload)
. = ..()
var/obj/item/reagent_containers/glass/beaker/large/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
@@ -362,7 +362,7 @@
desc = "Used for clearing rooms of living things."
stage = READY
-/obj/item/grenade/chem_grenade/incendiary/Initialize()
+/obj/item/grenade/chem_grenade/incendiary/Initialize(mapload)
. = ..()
var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
@@ -380,7 +380,7 @@
desc = "Used for purging large areas of invasive plant species. Contents under pressure. Do not directly inhale contents."
stage = READY
-/obj/item/grenade/chem_grenade/antiweed/Initialize()
+/obj/item/grenade/chem_grenade/antiweed/Initialize(mapload)
. = ..()
var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
@@ -399,7 +399,7 @@
desc = "BLAM!-brand foaming space cleaner. In a special applicator for rapid cleaning of wide areas."
stage = READY
-/obj/item/grenade/chem_grenade/cleaner/Initialize()
+/obj/item/grenade/chem_grenade/cleaner/Initialize(mapload)
. = ..()
var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
@@ -417,7 +417,7 @@
desc = "Waffle Co.-brand foaming space cleaner. In a special applicator for rapid cleaning of wide areas."
stage = READY
-/obj/item/grenade/chem_grenade/ez_clean/Initialize()
+/obj/item/grenade/chem_grenade/ez_clean/Initialize(mapload)
. = ..()
var/obj/item/reagent_containers/glass/beaker/large/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/large/B2 = new(src)
@@ -436,7 +436,7 @@
desc = "Used for nonlethal riot control. Contents under pressure. Do not directly inhale contents."
stage = READY
-/obj/item/grenade/chem_grenade/teargas/Initialize()
+/obj/item/grenade/chem_grenade/teargas/Initialize(mapload)
. = ..()
var/obj/item/reagent_containers/glass/beaker/large/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/large/B2 = new(src)
@@ -455,7 +455,7 @@
desc = "Used for melting armoured opponents."
stage = READY
-/obj/item/grenade/chem_grenade/facid/Initialize()
+/obj/item/grenade/chem_grenade/facid/Initialize(mapload)
. = ..()
var/obj/item/reagent_containers/glass/beaker/bluespace/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/bluespace/B2 = new(src)
@@ -475,7 +475,7 @@
desc = "Used for wide scale painting projects."
stage = READY
-/obj/item/grenade/chem_grenade/colorful/Initialize()
+/obj/item/grenade/chem_grenade/colorful/Initialize(mapload)
. = ..()
var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
@@ -494,7 +494,7 @@
stage = READY
var/glitter_type = /datum/reagent/glitter
-/obj/item/grenade/chem_grenade/glitter/Initialize()
+/obj/item/grenade/chem_grenade/glitter/Initialize(mapload)
. = ..()
var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
@@ -527,7 +527,7 @@
desc = "BURN!-brand foaming clf3. In a special applicator for rapid purging of wide areas."
stage = READY
-/obj/item/grenade/chem_grenade/clf3/Initialize()
+/obj/item/grenade/chem_grenade/clf3/Initialize(mapload)
. = ..()
var/obj/item/reagent_containers/glass/beaker/bluespace/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/bluespace/B2 = new(src)
@@ -545,7 +545,7 @@
desc = "Tiger Cooperative chemical foam grenade. Causes temporary irration, blindness, confusion, mutism, and mutations to carbon based life forms. Contains additional spore toxin."
stage = READY
-/obj/item/grenade/chem_grenade/bioterrorfoam/Initialize()
+/obj/item/grenade/chem_grenade/bioterrorfoam/Initialize(mapload)
. = ..()
var/obj/item/reagent_containers/glass/beaker/bluespace/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/bluespace/B2 = new(src)
@@ -565,7 +565,7 @@
desc = "WARNING: GRENADE WILL RELEASE DEADLY SPORES CONTAINING ACTIVE AGENTS. SEAL SUIT AND AIRFLOW BEFORE USE."
stage = READY
-/obj/item/grenade/chem_grenade/tuberculosis/Initialize()
+/obj/item/grenade/chem_grenade/tuberculosis/Initialize(mapload)
. = ..()
var/obj/item/reagent_containers/glass/beaker/bluespace/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/bluespace/B2 = new(src)
@@ -585,7 +585,7 @@
icon_state = "holy_grenade"
stage = READY
-/obj/item/grenade/chem_grenade/holy/Initialize()
+/obj/item/grenade/chem_grenade/holy/Initialize(mapload)
. = ..()
var/obj/item/reagent_containers/glass/beaker/large/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/large/B2 = new(src)
diff --git a/code/game/objects/items/grenades/ghettobomb.dm b/code/game/objects/items/grenades/ghettobomb.dm
index 3553d79faf..f379bf6493 100644
--- a/code/game/objects/items/grenades/ghettobomb.dm
+++ b/code/game/objects/items/grenades/ghettobomb.dm
@@ -19,7 +19,7 @@
var/range = 3
var/list/times
-/obj/item/grenade/iedcasing/Initialize()
+/obj/item/grenade/iedcasing/Initialize(mapload)
. = ..()
add_overlay("improvised_grenade_filled")
add_overlay("improvised_grenade_wired")
diff --git a/code/game/objects/items/grenades/plastic.dm b/code/game/objects/items/grenades/plastic.dm
index 23fe128fa8..9c5f1475fd 100644
--- a/code/game/objects/items/grenades/plastic.dm
+++ b/code/game/objects/items/grenades/plastic.dm
@@ -21,7 +21,7 @@
var/full_damage_on_mobs = FALSE
var/can_gib_mobs = FALSE
-/obj/item/grenade/plastic/Initialize()
+/obj/item/grenade/plastic/Initialize(mapload)
. = ..()
plastic_overlay = mutable_appearance(icon, "[item_state]2", HIGH_OBJ_LAYER)
diff --git a/code/game/objects/items/grenades/smokebomb.dm b/code/game/objects/items/grenades/smokebomb.dm
index 1b856fc013..501f019027 100644
--- a/code/game/objects/items/grenades/smokebomb.dm
+++ b/code/game/objects/items/grenades/smokebomb.dm
@@ -27,6 +27,6 @@
for(var/obj/structure/blob/B in view(8,src))
var/damage = round(30/(get_dist(B,src)+1))
- B.take_damage(damage, BURN, "melee", 0)
+ B.take_damage(damage, BURN, MELEE, 0)
sleep(80)
qdel(src)
diff --git a/code/game/objects/items/handcuffs.dm b/code/game/objects/items/handcuffs.dm
index 60538b479b..163119800f 100644
--- a/code/game/objects/items/handcuffs.dm
+++ b/code/game/objects/items/handcuffs.dm
@@ -40,7 +40,7 @@
throw_range = 5
custom_materials = list(/datum/material/iron=500)
breakouttime = 600 //Deciseconds = 60s = 1 minute
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50)
var/cuffsound = 'sound/weapons/handcuffs.ogg'
var/trashtype = null //for disposable cuffs
@@ -260,7 +260,7 @@
var/armed = FALSE
var/trap_damage = 20
-/obj/item/restraints/legcuffs/beartrap/Initialize()
+/obj/item/restraints/legcuffs/beartrap/Initialize(mapload)
. = ..()
icon_state = "[initial(icon_state)][armed]"
diff --git a/code/game/objects/items/his_grace.dm b/code/game/objects/items/his_grace.dm
index eafa03ca61..b339b08bd9 100644
--- a/code/game/objects/items/his_grace.dm
+++ b/code/game/objects/items/his_grace.dm
@@ -25,7 +25,7 @@
var/victims_needed = 10 //Citadel change from 25 to 10
var/ascend_bonus = 15
-/obj/item/his_grace/Initialize()
+/obj/item/his_grace/Initialize(mapload)
. = ..()
START_PROCESSING(SSprocessing, src)
GLOB.poi_list += src
diff --git a/code/game/objects/items/holy_weapons.dm b/code/game/objects/items/holy_weapons.dm
index 1360fb970e..9fae1496fd 100644
--- a/code/game/objects/items/holy_weapons.dm
+++ b/code/game/objects/items/holy_weapons.dm
@@ -5,7 +5,7 @@
desc = "Deus Vult."
icon_state = "knight_templar"
item_state = "knight_templar"
- armor = list("melee" = 41, "bullet" = 15, "laser" = 5,"energy" = 5, "bomb" = 5, "bio" = 2, "rad" = 0, "fire" = 0, "acid" = 50)
+ armor = list(MELEE = 41, BULLET = 15, LASER = 5,ENERGY = 5, BOMB = 5, BIO = 2, RAD = 0, FIRE = 0, ACID = 50)
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR
flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH
strip_delay = 80
@@ -229,7 +229,7 @@
var/chaplain_spawnable = TRUE
total_mass = TOTAL_MASS_MEDIEVAL_WEAPON
-/obj/item/nullrod/Initialize()
+/obj/item/nullrod/Initialize(mapload)
. = ..()
AddComponent(/datum/component/anti_magic, TRUE, TRUE, FALSE, null, null, FALSE)
@@ -314,7 +314,7 @@
attack_verb = list("punched", "cross countered", "pummeled")
total_mass = TOTAL_MASS_HAND_REPLACEMENT
-/obj/item/nullrod/godhand/Initialize()
+/obj/item/nullrod/godhand/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT)
@@ -455,7 +455,7 @@
sharpness = SHARP_EDGED
attack_verb = list("chopped", "sliced", "cut", "reaped")
-/obj/item/nullrod/scythe/Initialize()
+/obj/item/nullrod/scythe/Initialize(mapload)
. = ..()
AddComponent(/datum/component/butchering, 70, 110) //the harvest gives a high bonus chance
@@ -582,7 +582,7 @@
tool_behaviour = TOOL_SAW
toolspeed = 2
-/obj/item/nullrod/chainsaw/Initialize()
+/obj/item/nullrod/chainsaw/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT)
AddComponent(/datum/component/butchering, 30, 100, 0, hitsound)
@@ -662,7 +662,7 @@
bare_wound_bonus = 25
total_mass = TOTAL_MASS_HAND_REPLACEMENT
-/obj/item/nullrod/armblade/Initialize()
+/obj/item/nullrod/armblade/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT)
AddComponent(/datum/component/butchering, 80, 70)
@@ -831,7 +831,7 @@
var/praying = FALSE
var/deity_name = "Coderbus" //This is the default, hopefully won't actually appear if the religion subsystem is running properly
-/obj/item/nullrod/rosary/Initialize()
+/obj/item/nullrod/rosary/Initialize(mapload)
.=..()
if(GLOB.deity)
deity_name = GLOB.deity
diff --git a/code/game/objects/items/implants/implant_chem.dm b/code/game/objects/items/implants/implant_chem.dm
index d148cbbb3c..5f0b4f3fc3 100644
--- a/code/game/objects/items/implants/implant_chem.dm
+++ b/code/game/objects/items/implants/implant_chem.dm
@@ -21,7 +21,7 @@
Integrity: Implant will last so long as the subject is alive."}
return dat
-/obj/item/implant/chem/Initialize()
+/obj/item/implant/chem/Initialize(mapload)
. = ..()
create_reagents(50, OPENCONTAINER)
GLOB.tracked_chem_implants += src
diff --git a/code/game/objects/items/implants/implant_stealth.dm b/code/game/objects/items/implants/implant_stealth.dm
index eb58d76d1b..219e4fdd68 100644
--- a/code/game/objects/items/implants/implant_stealth.dm
+++ b/code/game/objects/items/implants/implant_stealth.dm
@@ -16,7 +16,7 @@
animate(src, , alpha = 0, time = 5)
START_PROCESSING(SSobj, src)
-/obj/structure/closet/cardboard/agent/Initialize()
+/obj/structure/closet/cardboard/agent/Initialize(mapload)
. = ..()
go_invisible()
diff --git a/code/game/objects/items/implants/implant_track.dm b/code/game/objects/items/implants/implant_track.dm
index 2fa0244831..b2678baddf 100644
--- a/code/game/objects/items/implants/implant_track.dm
+++ b/code/game/objects/items/implants/implant_track.dm
@@ -11,11 +11,11 @@
var/lifespan = 5 MINUTES //how many deciseconds does the implant last?
allow_teleport = FALSE
-/obj/item/implant/tracking/c38/Initialize()
+/obj/item/implant/tracking/c38/Initialize(mapload)
. = ..()
QDEL_IN(src, lifespan)
-/obj/item/implant/tracking/Initialize()
+/obj/item/implant/tracking/Initialize(mapload)
. = ..()
GLOB.tracked_implants += src
diff --git a/code/game/objects/items/implants/implantchair.dm b/code/game/objects/items/implants/implantchair.dm
index e32acd105e..8777a9f5e0 100644
--- a/code/game/objects/items/implants/implantchair.dm
+++ b/code/game/objects/items/implants/implantchair.dm
@@ -21,7 +21,7 @@
var/message_cooldown
var/breakout_time = 600
-/obj/machinery/implantchair/Initialize()
+/obj/machinery/implantchair/Initialize(mapload)
. = ..()
open_machine()
update_icon()
diff --git a/code/game/objects/items/inducer.dm b/code/game/objects/items/inducer.dm
index a5913c308d..f7a614050e 100644
--- a/code/game/objects/items/inducer.dm
+++ b/code/game/objects/items/inducer.dm
@@ -14,7 +14,7 @@
var/recharging = FALSE
var/gun_charger = FALSE
-/obj/item/inducer/Initialize()
+/obj/item/inducer/Initialize(mapload)
. = ..()
if(!cell && cell_type)
cell = new cell_type
@@ -180,7 +180,7 @@
powertransfer = 500
opened = TRUE
-/obj/item/inducer/sci/Initialize()
+/obj/item/inducer/sci/Initialize(mapload)
. = ..()
update_icon()
@@ -199,11 +199,11 @@
cell_type = null
opened = TRUE
-/obj/item/inducer/sci/combat/dry/Initialize() //Just in case
+/obj/item/inducer/sci/combat/dry/Initialize(mapload) //Just in case
. = ..()
update_icon()
-/obj/item/inducer/sci/combat/Initialize()
+/obj/item/inducer/sci/combat/Initialize(mapload)
. = ..()
update_icon()
diff --git a/code/game/objects/items/kitchen.dm b/code/game/objects/items/kitchen.dm
index 5a16c24b8e..d53a12fd27 100644
--- a/code/game/objects/items/kitchen.dm
+++ b/code/game/objects/items/kitchen.dm
@@ -27,7 +27,7 @@
flags_1 = CONDUCT_1
attack_verb = list("attacked", "stabbed", "poked")
hitsound = 'sound/weapons/bladeslice.ogg'
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 30)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 30)
sharpness = SHARP_POINTY
var/datum/reagent/forkload //used to eat omelette
@@ -78,13 +78,13 @@
custom_materials = list(/datum/material/iron=12000)
attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
sharpness = SHARP_POINTY
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50)
var/bayonet = FALSE //Can this be attached to a gun?
wound_bonus = -5
bare_wound_bonus = 10
custom_price = PRICE_NORMAL
-/obj/item/kitchen/knife/Initialize()
+/obj/item/kitchen/knife/Initialize(mapload)
. = ..()
AddComponent(/datum/component/butchering, 80 - force, 100, force - 10) //bonus chance increases depending on force
@@ -114,13 +114,13 @@
custom_materials = list(/datum/material/iron=12000)
attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
sharpness = SHARP_POINTY
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50)
var/bayonet = FALSE //Can this be attached to a gun?
wound_bonus = -5
bare_wound_bonus = 10
custom_price = PRICE_NORMAL
-/obj/item/kitchen/efink/Initialize()
+/obj/item/kitchen/efink/Initialize(mapload)
. = ..()
AddComponent(/datum/component/butchering, 80 - force, 100, force - 10) //bonus chance increases depending on force
@@ -209,7 +209,7 @@
var/light_on = FALSE
var/brightness_on = 7
-/obj/item/kitchen/knife/combat/survival/knuckledagger/Initialize()
+/obj/item/kitchen/knife/combat/survival/knuckledagger/Initialize(mapload)
. = ..()
AddComponent(/datum/component/butchering, 30, 130, 20) // it's good for butchering stuff
@@ -266,7 +266,7 @@
force = 8
throwforce = 12//fuck git
attack_verb = list("shanked", "shivved")
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0)
custom_materials = list(/datum/material/glass=400)
/obj/item/kitchen/knife/shiv/carrot
@@ -322,6 +322,6 @@
desc = "A knife used to cleanly butcher. Its razor-sharp edge has been honed for butchering, but has been poorly maintained over the years."
attack_verb = list("cleaved", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
-/obj/item/kitchen/knife/scimitar/Initialize()
+/obj/item/kitchen/knife/scimitar/Initialize(mapload)
. = ..()
AddComponent(/datum/component/butchering, 90 - force, 100, force - 60) //bonus chance increases depending on force
diff --git a/code/game/objects/items/manuals.dm b/code/game/objects/items/manuals.dm
index 05b7ef4802..ed8ec80bf0 100644
--- a/code/game/objects/items/manuals.dm
+++ b/code/game/objects/items/manuals.dm
@@ -336,7 +336,7 @@
title = "Outdated Chemistry Textbook"
page_link = "Guide_to_chemistry"
-/obj/item/book/manual/wiki/chemistry/Initialize()
+/obj/item/book/manual/wiki/chemistry/Initialize(mapload)
. = ..()
new /obj/item/book/manual/wiki/cit/chemistry(loc)
new /obj/item/book/manual/wiki/cit/chem_recipies(loc)
diff --git a/code/game/objects/items/melee/energy.dm b/code/game/objects/items/melee/energy.dm
index dd176f6d54..4930f39b31 100644
--- a/code/game/objects/items/melee/energy.dm
+++ b/code/game/objects/items/melee/energy.dm
@@ -2,13 +2,13 @@
hitsound_on = 'sound/weapons/blade1.ogg'
heat = 3500
max_integrity = 200
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 30)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 30)
resistance_flags = FIRE_PROOF
var/brightness_on = 3
var/sword_color
total_mass = 0.4 //Survival flashlights typically weigh around 5 ounces.
-/obj/item/melee/transforming/energy/Initialize()
+/obj/item/melee/transforming/energy/Initialize(mapload)
. = ..()
total_mass_on = (total_mass_on ? total_mass_on : (w_class_on * 0.75))
if(active)
@@ -331,7 +331,7 @@
sharpness = SHARP_EDGED
//Most of the other special functions are handled in their own files. aka special snowflake code so kewl
-/obj/item/melee/transforming/energy/blade/Initialize()
+/obj/item/melee/transforming/energy/blade/Initialize(mapload)
. = ..()
spark_system = new /datum/effect_system/spark_spread()
spark_system.set_up(5, 0, src)
@@ -371,7 +371,7 @@
light_color = "#37FFF7"
actions_types = list()
-/obj/item/melee/transforming/energy/sword/cx/Initialize()
+/obj/item/melee/transforming/energy/sword/cx/Initialize(mapload)
icon_state_on = icon_state
return ..()
diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm
index 29593cae06..a9dfcb00e6 100644
--- a/code/game/objects/items/melee/misc.dm
+++ b/code/game/objects/items/melee/misc.dm
@@ -46,7 +46,7 @@
sharpness = SHARP_EDGED
total_mass = TOTAL_MASS_HAND_REPLACEMENT
-/obj/item/melee/synthetic_arm_blade/Initialize()
+/obj/item/melee/synthetic_arm_blade/Initialize(mapload)
. = ..()
AddComponent(/datum/component/butchering, 60, 80) //very imprecise
@@ -84,7 +84,7 @@
parry_flags = PARRY_DEFAULT_HANDLE_FEEDBACK
parry_automatic_enabled = TRUE
-/obj/item/melee/sabre/Initialize()
+/obj/item/melee/sabre/Initialize(mapload)
. = ..()
AddComponent(/datum/component/butchering, 30, 95, 5) //fast and effective, but as a sword, it might damage the results.
AddElement(/datum/element/sword_point)
@@ -208,7 +208,7 @@
. |= BLOCK_SHOULD_REDIRECT
return_list[BLOCK_RETURN_REDIRECT_METHOD] = REDIRECT_METHOD_DEFLECT
-/obj/item/melee/rapier/Initialize()
+/obj/item/melee/rapier/Initialize(mapload)
. = ..()
AddComponent(/datum/component/butchering, 20, 65, 0)
@@ -277,7 +277,7 @@
wound_bonus = 15
-/obj/item/melee/classic_baton/Initialize()
+/obj/item/melee/classic_baton/Initialize(mapload)
. = ..()
if(sword_point)
AddElement(/datum/element/sword_point)
@@ -518,7 +518,7 @@
var/balanced = 1
force_string = "INFINITE"
-/obj/item/melee/supermatter_sword/Initialize()
+/obj/item/melee/supermatter_sword/Initialize(mapload)
. = ..()
shard = new /obj/machinery/power/supermatter_crystal(src)
qdel(shard.countdown)
@@ -625,7 +625,7 @@
var/datum/beam/beam
total_mass = 2.5
-/obj/item/melee/roastingstick/Initialize()
+/obj/item/melee/roastingstick/Initialize(mapload)
. = ..()
if (!ovens)
ovens = typecacheof(list(/obj/singularity, /obj/machinery/power/supermatter_crystal, /obj/structure/bonfire, /obj/structure/destructible/clockwork/massive/ratvar))
@@ -741,7 +741,7 @@
var/overlay_state = "mace_handle"
var/mutable_appearance/overlay
-/obj/item/melee/cleric_mace/Initialize()
+/obj/item/melee/cleric_mace/Initialize(mapload)
. = ..()
overlay = mutable_appearance(icon, overlay_state)
overlay.appearance_flags = RESET_COLOR
diff --git a/code/game/objects/items/melee/transforming.dm b/code/game/objects/items/melee/transforming.dm
index 8c44a15cd4..82b19a1357 100644
--- a/code/game/objects/items/melee/transforming.dm
+++ b/code/game/objects/items/melee/transforming.dm
@@ -15,7 +15,7 @@
var/clumsy_check = TRUE
var/total_mass_on //Total mass in ounces when transformed. Primarily for balance purposes. Don't think about it too hard.
-/obj/item/melee/transforming/Initialize()
+/obj/item/melee/transforming/Initialize(mapload)
. = ..()
if(active)
if(attack_verb_on.len)
diff --git a/code/game/objects/items/pet_carrier.dm b/code/game/objects/items/pet_carrier.dm
index 78fe1a896e..648a38437c 100644
--- a/code/game/objects/items/pet_carrier.dm
+++ b/code/game/objects/items/pet_carrier.dm
@@ -253,7 +253,7 @@
///chem transfer rate / second
var/transfer_rate = 5
-/obj/item/pet_carrier/bluespace/Initialize()
+/obj/item/pet_carrier/bluespace/Initialize(mapload)
. = ..()
create_reagents(300, OPENCONTAINER, DEFAULT_REAGENTS_VALUE) //equivalent of bsbeakers
diff --git a/code/game/objects/items/pinpointer.dm b/code/game/objects/items/pinpointer.dm
index 22ffc33516..d1ceb36b6d 100644
--- a/code/game/objects/items/pinpointer.dm
+++ b/code/game/objects/items/pinpointer.dm
@@ -22,7 +22,7 @@
/// resets target on toggle
var/resets_target = TRUE
-/obj/item/pinpointer/Initialize()
+/obj/item/pinpointer/Initialize(mapload)
. = ..()
GLOB.pinpointer_list += src
diff --git a/code/game/objects/items/pitchfork.dm b/code/game/objects/items/pitchfork.dm
index b296e2d0cb..eff586cf11 100644
--- a/code/game/objects/items/pitchfork.dm
+++ b/code/game/objects/items/pitchfork.dm
@@ -11,11 +11,11 @@
hitsound = 'sound/weapons/bladeslice.ogg'
sharpness = SHARP_EDGED
max_integrity = 200
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 30)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 30)
resistance_flags = FIRE_PROOF
var/wielded = FALSE // track wielded status on item
-/obj/item/pitchfork/Initialize()
+/obj/item/pitchfork/Initialize(mapload)
. = ..()
RegisterSignal(src, COMSIG_TWOHANDED_WIELD, .proc/on_wield)
RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, .proc/on_unwield)
@@ -42,7 +42,7 @@
force = 19
throwforce = 24
-/obj/item/pitchfork/demonic/Initialize()
+/obj/item/pitchfork/demonic/Initialize(mapload)
. = ..()
set_light(3,6,LIGHT_COLOR_RED)
diff --git a/code/game/objects/items/plushes.dm b/code/game/objects/items/plushes.dm
index 683232b540..e60871dec7 100644
--- a/code/game/objects/items/plushes.dm
+++ b/code/game/objects/items/plushes.dm
@@ -466,7 +466,7 @@ GLOBAL_LIST_INIT(valid_plushie_paths, valid_plushie_paths())
desc = "Something fucked up"
can_random_spawn = FALSE
-/obj/item/toy/plush/random/Initialize()
+/obj/item/toy/plush/random/Initialize(mapload)
..()
var/newtype
var/list/snowflake_list = CONFIG_GET(keyed_list/snowflake_plushies)
diff --git a/code/game/objects/items/pneumaticCannon.dm b/code/game/objects/items/pneumaticCannon.dm
index 42e345b502..595b24d214 100644
--- a/code/game/objects/items/pneumaticCannon.dm
+++ b/code/game/objects/items/pneumaticCannon.dm
@@ -13,7 +13,7 @@
item_state = "bulldog"
lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi'
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 50)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 60, ACID = 50)
var/maxWeightClass = 20 //The max weight of items that can fit into the cannon
var/loadedWeightClass = 0 //The weight of items currently in the cannon
var/obj/item/tank/internals/tank = null //The gas tank that is drawn from to fire things
@@ -35,7 +35,7 @@
trigger_guard = TRIGGER_GUARD_NORMAL
-/obj/item/pneumatic_cannon/Initialize()
+/obj/item/pneumatic_cannon/Initialize(mapload)
. = ..()
if(selfcharge)
init_charge()
@@ -292,7 +292,7 @@
clumsyCheck = FALSE
var/static/list/pie_typecache = typecacheof(/obj/item/reagent_containers/food/snacks/pie)
-/obj/item/pneumatic_cannon/pie/Initialize()
+/obj/item/pneumatic_cannon/pie/Initialize(mapload)
. = ..()
allowed_typecache = pie_typecache
diff --git a/code/game/objects/items/powerfist.dm b/code/game/objects/items/powerfist.dm
index 569b11b8b0..713a14460b 100644
--- a/code/game/objects/items/powerfist.dm
+++ b/code/game/objects/items/powerfist.dm
@@ -12,7 +12,7 @@
throwforce = 10
throw_range = 7
w_class = WEIGHT_CLASS_NORMAL
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 40)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 40)
resistance_flags = FIRE_PROOF
attack_speed = CLICK_CD_MELEE * 1.5
var/fisto_setting = 1
diff --git a/code/game/objects/items/puzzle_pieces.dm b/code/game/objects/items/puzzle_pieces.dm
index 3f3e81604e..325acc6ac6 100644
--- a/code/game/objects/items/puzzle_pieces.dm
+++ b/code/game/objects/items/puzzle_pieces.dm
@@ -39,7 +39,7 @@
explosion_block = 3
heat_proof = TRUE
max_integrity = 600
- armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100)
+ armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100)
resistance_flags = INDESTRUCTIBLE | FIRE_PROOF | ACID_PROOF | LAVA_PROOF
damage_deflection = 70
/// Make sure that the key has the same puzzle_id as the keycard door!
diff --git a/code/game/objects/items/religion.dm b/code/game/objects/items/religion.dm
index b8f0d161dc..20a2aae52a 100644
--- a/code/game/objects/items/religion.dm
+++ b/code/game/objects/items/religion.dm
@@ -165,7 +165,7 @@
desc = "It's a backpack with lots of extra room. A banner with Nanotrasen's logo is attached, that can't be removed."
icon_state = "bannerpack"
-/obj/item/storage/backpack/bannerpack/Initialize()
+/obj/item/storage/backpack/bannerpack/Initialize(mapload)
. = ..()
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
STR.max_combined_w_class = 27 //6 more then normal, for the tradeoff of declaring yourself an antag at all times.
@@ -188,7 +188,7 @@
w_class = WEIGHT_CLASS_BULKY
slowdown = 2.0 //gotta pretend we're balanced.
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
- armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 40, "bomb" = 60, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 60)
+ armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 40, BOMB = 60, BIO = 0, RAD = 0, FIRE = 60, ACID = 60)
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON
/obj/item/clothing/suit/armor/plate/crusader/red
@@ -203,7 +203,7 @@
icon_state = "crusader"
w_class = WEIGHT_CLASS_NORMAL
flags_inv = HIDEHAIR|HIDEEARS|HIDEFACE
- armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 40, "bomb" = 60, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 60)
+ armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 40, BOMB = 60, BIO = 0, RAD = 0, FIRE = 60, ACID = 60)
/obj/item/clothing/head/helmet/plate/crusader/blue
icon_state = "crusader-blue"
@@ -218,7 +218,7 @@
icon_state = "prophet"
mob_overlay_icon = 'icons/mob/large-worn-icons/64x64/head.dmi'
flags_1 = NONE
- armor = list("melee" = 60, "bullet" = 60, "laser" = 60, "energy" = 50, "bomb" = 70, "bio" = 50, "rad" = 50, "fire" = 60, "acid" = 60) //religion protects you from disease and radiation, honk.
+ armor = list(MELEE = 60, BULLET = 60, LASER = 60, ENERGY = 50, BOMB = 70, BIO = 50, RAD = 50, FIRE = 60, ACID = 60) //religion protects you from disease and radiation, honk.
worn_x_dimension = 64
worn_y_dimension = 64
@@ -277,7 +277,7 @@
desc = "Metal boots, they look heavy."
icon_state = "crusader"
w_class = WEIGHT_CLASS_NORMAL
- armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 40, "bomb" = 60, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 60) //does this even do anything on boots?
+ armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 40, BOMB = 60, BIO = 0, RAD = 0, FIRE = 60, ACID = 60) //does this even do anything on boots?
clothing_flags = NOSLIP
cold_protection = FEET
min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT
diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm
index cbfdc85f6d..2cc65ab261 100644
--- a/code/game/objects/items/robot/robot_items.dm
+++ b/code/game/objects/items/robot/robot_items.dm
@@ -564,7 +564,7 @@
energy = 50000
energy_recharge = 5000
-/obj/item/borg/projectile_dampen/Initialize()
+/obj/item/borg/projectile_dampen/Initialize(mapload)
. = ..()
projectile_effect = image('icons/effects/fields.dmi', "projectile_dampen_effect")
tracked = list()
diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm
index 36559d14be..1363f0994c 100644
--- a/code/game/objects/items/shields.dm
+++ b/code/game/objects/items/shields.dm
@@ -3,7 +3,7 @@
icon = 'icons/obj/shields.dmi'
item_flags = ITEM_CAN_BLOCK
block_parry_data = /datum/block_parry_data/shield
- armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 70)
+ armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 0, BOMB = 30, BIO = 0, RAD = 0, FIRE = 80, ACID = 70)
/// Shield flags
var/shield_flags = SHIELD_FLAGS_DEFAULT
/// Last shieldbash world.time
@@ -304,7 +304,7 @@
/obj/item/shield/riot/energy_proof
name = "energy resistant shield"
desc = "An ablative shield designed to absorb and disperse energy attacks. This comes at significant cost to its ability to withstand ballistics and kinetics, breaking apart easily."
- armor = list("melee" = 30, "bullet" = -10, "laser" = 80, "energy" = 80, "bomb" = -40, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 50)
+ armor = list(MELEE = 30, BULLET = -10, LASER = 80, ENERGY = 80, BOMB = -40, BIO = 0, RAD = 0, FIRE = 0, ACID = 50)
icon_state = "riot_laser"
item_state = "riot_laser"
lefthand_file = 'icons/mob/inhands/equipment/shields_lefthand.dmi'
@@ -315,7 +315,7 @@
/obj/item/shield/riot/kinetic_proof
name = "kinetic resistant shield"
desc = "A polymer and ceramic shield designed to absorb ballistic projectiles and kinetic force. It doesn't do very well into energy attacks, especially from weapons that inflict burns."
- armor = list("melee" = 30, "bullet" = 80, "laser" = 0, "energy" = 0, "bomb" = -40, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 50)
+ armor = list(MELEE = 30, BULLET = 80, LASER = 0, ENERGY = 0, BOMB = -40, BIO = 0, RAD = 0, FIRE = 0, ACID = 50)
icon_state = "riot_bullet"
item_state = "riot_bullet"
shield_flags = SHIELD_FLAGS_DEFAULT | SHIELD_KINETIC_STRONG | SHIELD_ENERGY_WEAK
@@ -334,7 +334,7 @@
/obj/item/shield/riot/roman/fake
desc = "Bears an inscription on the inside: \"Romanes venio domus\". It appears to be a bit flimsy."
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0)
shield_flags = SHIELD_ENERGY_WEAK | SHIELD_KINETIC_WEAK | SHIELD_NO_RANGED
max_integrity = 40
@@ -366,7 +366,7 @@
item_state = "flashshield"
var/obj/item/assembly/flash/handheld/embedded_flash
-/obj/item/shield/riot/flash/Initialize()
+/obj/item/shield/riot/flash/Initialize(mapload)
. = ..()
embedded_flash = new(src)
@@ -471,7 +471,7 @@
/obj/item/shield/makeshift
name = "metal shield"
desc = "A large shield made of wired and welded sheets of metal. The handle is made of cloth and leather, making it unwieldy."
- armor = list("melee" = 25, "bullet" = 25, "laser" = 5, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 80)
+ armor = list(MELEE = 25, BULLET = 25, LASER = 5, ENERGY = 0, BOMB = 30, BIO = 0, RAD = 0, FIRE = 70, ACID = 80)
lefthand_file = 'icons/mob/inhands/equipment/shields_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/shields_righthand.dmi'
item_state = "metal"
@@ -485,7 +485,7 @@
/obj/item/shield/riot/tower
name = "tower shield"
desc = "An immense tower shield. Designed to ensure maximum protection to the user, at the expense of mobility."
- armor = list("melee" = 95, "bullet" = 95, "laser" = 75, "energy" = 60, "bomb" = 90, "bio" = 90, "rad" = 0, "fire" = 90, "acid" = 10) //Armor for the item, dosnt transfer to user
+ armor = list(MELEE = 95, BULLET = 95, LASER = 75, ENERGY = 60, BOMB = 90, BIO = 90, RAD = 0, FIRE = 90, ACID = 10) //Armor for the item, dosnt transfer to user
item_state = "metal"
icon_state = "metal"
force = 16
@@ -561,7 +561,7 @@
var/active = 0
var/clumsy_check = TRUE
-/obj/item/shield/energy/Initialize()
+/obj/item/shield/energy/Initialize(mapload)
. = ..()
icon_state = "[base_icon_state]0"
diff --git a/code/game/objects/items/singularityhammer.dm b/code/game/objects/items/singularityhammer.dm
index e58dbc23ce..b9d66a5bd0 100644
--- a/code/game/objects/items/singularityhammer.dm
+++ b/code/game/objects/items/singularityhammer.dm
@@ -10,7 +10,7 @@
throwforce = 15
throw_range = 1
w_class = WEIGHT_CLASS_HUGE
- armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 0, "bomb" = 50, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
+ armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 0, BOMB = 50, BIO = 0, RAD = 0, FIRE = 100, ACID = 100)
resistance_flags = FIRE_PROOF | ACID_PROOF
force_string = "LORD SINGULOTH HIMSELF"
total_mass = TOTAL_MASS_MEDIEVAL_WEAPON
@@ -97,7 +97,7 @@
total_mass = TOTAL_MASS_MEDIEVAL_WEAPON
var/wielded = FALSE // track wielded status on item
-/obj/item/mjollnir/Initialize()
+/obj/item/mjollnir/Initialize(mapload)
. = ..()
RegisterSignal(src, COMSIG_TWOHANDED_WIELD, .proc/on_wield)
RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, .proc/on_unwield)
diff --git a/code/game/objects/items/spear.dm b/code/game/objects/items/spear.dm
index f40c774551..14fb5062ad 100644
--- a/code/game/objects/items/spear.dm
+++ b/code/game/objects/items/spear.dm
@@ -17,7 +17,7 @@
attack_verb = list("attacked", "poked", "jabbed", "torn", "gored")
sharpness = SHARP_EDGED
max_integrity = 200
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 30)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 30)
var/obj/item/grenade/explosive = null
var/war_cry = "AAAAARGH!!!"
var/icon_prefix = "spearglass"
@@ -25,7 +25,7 @@
wound_bonus = -15
bare_wound_bonus = 15
-/obj/item/spear/Initialize()
+/obj/item/spear/Initialize(mapload)
. = ..()
RegisterSignal(src, COMSIG_TWOHANDED_WIELD, .proc/on_wield)
RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, .proc/on_unwield)
diff --git a/code/game/objects/items/stacks/bscrystal.dm b/code/game/objects/items/stacks/bscrystal.dm
index 3b4be37cee..125065c83e 100644
--- a/code/game/objects/items/stacks/bscrystal.dm
+++ b/code/game/objects/items/stacks/bscrystal.dm
@@ -18,7 +18,7 @@
points = 0
refined_type = null
-/obj/item/stack/ore/bluespace_crystal/Initialize()
+/obj/item/stack/ore/bluespace_crystal/Initialize(mapload)
. = ..()
pixel_x = rand(-5, 5)
pixel_y = rand(-5, 5)
diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm
index 0bd3083a59..15bd521834 100644
--- a/code/game/objects/items/stacks/medical.dm
+++ b/code/game/objects/items/stacks/medical.dm
@@ -342,7 +342,7 @@
/obj/item/stack/medical/mesh/advanced/one
amount = 1
-/obj/item/stack/medical/mesh/Initialize()
+/obj/item/stack/medical/mesh/Initialize(mapload)
. = ..()
if(amount == max_amount) //only seal full mesh packs
is_open = FALSE
@@ -490,7 +490,7 @@
/obj/item/stack/medical/nanogel/one
amount = 1
-
+
/obj/item/stack/medical/nanogel/try_heal(mob/living/M, mob/user, silent = FALSE)
if(being_applied)
to_chat(user, "You are already applying [src]!")
diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm
index 1f19821df6..ece4d6bae2 100644
--- a/code/game/objects/items/stacks/sheets/glass.dm
+++ b/code/game/objects/items/stacks/sheets/glass.dm
@@ -34,7 +34,7 @@ GLOBAL_LIST_INIT(glass_recipes, list ( \
icon_state = "sheet-glass"
item_state = "sheet-glass"
custom_materials = list(/datum/material/glass=MINERAL_MATERIAL_AMOUNT)
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 100)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 100)
resistance_flags = ACID_PROOF
merge_type = /obj/item/stack/sheet/glass
grind_results = list(/datum/reagent/silicon = 20)
@@ -106,7 +106,7 @@ GLOBAL_LIST_INIT(pglass_recipes, list ( \
icon_state = "sheet-pglass"
item_state = "sheet-pglass"
custom_materials = list(/datum/material/plasma=MINERAL_MATERIAL_AMOUNT * 0.5, /datum/material/glass=MINERAL_MATERIAL_AMOUNT)
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 75, "acid" = 100)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 75, ACID = 100)
resistance_flags = ACID_PROOF
merge_type = /obj/item/stack/sheet/plasmaglass
grind_results = list(/datum/reagent/silicon = 20, /datum/reagent/toxin/plasma = 10)
@@ -161,7 +161,7 @@ GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \
icon_state = "sheet-rglass"
item_state = "sheet-rglass"
custom_materials = list(/datum/material/iron=MINERAL_MATERIAL_AMOUNT * 0.5, /datum/material/glass=MINERAL_MATERIAL_AMOUNT)
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 100)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 70, ACID = 100)
resistance_flags = ACID_PROOF
merge_type = /obj/item/stack/sheet/rglass
grind_results = list(/datum/reagent/silicon = 20, /datum/reagent/iron = 10)
@@ -209,7 +209,7 @@ GLOBAL_LIST_INIT(prglass_recipes, list ( \
icon_state = "sheet-prglass"
item_state = "sheet-prglass"
custom_materials = list(/datum/material/plasma=MINERAL_MATERIAL_AMOUNT * 0.5, /datum/material/glass=MINERAL_MATERIAL_AMOUNT, /datum/material/iron=MINERAL_MATERIAL_AMOUNT * 0.5,)
- armor = list("melee" = 20, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 100)
+ armor = list(MELEE = 20, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 100)
resistance_flags = ACID_PROOF
merge_type = /obj/item/stack/sheet/plasmarglass
grind_results = list(/datum/reagent/silicon = 20, /datum/reagent/toxin/plasma = 10, /datum/reagent/iron = 10)
@@ -236,7 +236,7 @@ GLOBAL_LIST_INIT(titaniumglass_recipes, list(
icon_state = "sheet-titaniumglass"
item_state = "sheet-titaniumglass"
custom_materials = list(/datum/material/titanium=MINERAL_MATERIAL_AMOUNT * 0.5, /datum/material/glass=MINERAL_MATERIAL_AMOUNT)
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 100)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 100)
resistance_flags = ACID_PROOF
merge_type = /obj/item/stack/sheet/titaniumglass
shard_type = /obj/item/shard
@@ -260,7 +260,7 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
icon_state = "sheet-plastitaniumglass"
item_state = "sheet-plastitaniumglass"
custom_materials = list(/datum/material/titanium=MINERAL_MATERIAL_AMOUNT * 0.5, /datum/material/plasma=MINERAL_MATERIAL_AMOUNT * 0.5, /datum/material/glass=MINERAL_MATERIAL_AMOUNT)
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 100)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 100)
resistance_flags = ACID_PROOF
merge_type = /obj/item/stack/sheet/plastitaniumglass
shard_type = /obj/item/shard
@@ -291,7 +291,7 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
attack_verb = list("stabbed", "slashed", "sliced", "cut")
hitsound = 'sound/weapons/bladeslice.ogg'
resistance_flags = ACID_PROOF
- armor = list("melee" = 100, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 100)
+ armor = list(MELEE = 100, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 100)
max_integrity = 40
sharpness = SHARP_EDGED
var/icon_prefix
@@ -303,7 +303,7 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
return (BRUTELOSS)
-/obj/item/shard/Initialize()
+/obj/item/shard/Initialize(mapload)
. = ..()
AddComponent(/datum/component/caltrop, force)
AddComponent(/datum/component/butchering, 150, 65)
diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm
index b2bd394a53..eaf576510e 100644
--- a/code/game/objects/items/stacks/sheets/mineral.dm
+++ b/code/game/objects/items/stacks/sheets/mineral.dm
@@ -27,7 +27,6 @@ GLOBAL_LIST_INIT(sandstone_recipes, list ( \
new/datum/stack_recipe("pile of dirt", /obj/machinery/hydroponics/soil, 3, time = 10, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("sandstone door", /obj/structure/mineral_door/sandstone, 10, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("aesthetic volcanic floor tile", /obj/item/stack/tile/basalt, 2, 2, 4, 20), \
- new/datum/stack_recipe("Assistant Statue", /obj/structure/statue/sandstone/assistant, 5, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("Breakdown into sand", /obj/item/stack/ore/glass, 1, one_per_turf = 0, on_floor = 1) \
))
@@ -114,9 +113,6 @@ GLOBAL_LIST_INIT(sandbag_recipes, list ( \
GLOBAL_LIST_INIT(diamond_recipes, list ( \
new/datum/stack_recipe("diamond door", /obj/structure/mineral_door/transparent/diamond, 10, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("diamond tile", /obj/item/stack/tile/mineral/diamond, 1, 4, 20), \
- new/datum/stack_recipe("Captain Statue", /obj/structure/statue/diamond/captain, 5, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("AI Hologram Statue", /obj/structure/statue/diamond/ai1, 5, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("AI Core Statue", /obj/structure/statue/diamond/ai2, 5, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("diamond ingot", /obj/item/ingot/diamond, 6, time = 100), \
))
@@ -144,8 +140,6 @@ GLOBAL_LIST_INIT(diamond_recipes, list ( \
GLOBAL_LIST_INIT(uranium_recipes, list ( \
new/datum/stack_recipe("uranium door", /obj/structure/mineral_door/uranium, 10, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("uranium tile", /obj/item/stack/tile/mineral/uranium, 1, 4, 20), \
- new/datum/stack_recipe("Nuke Statue", /obj/structure/statue/uranium/nuke, 5, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("Engineer Statue", /obj/structure/statue/uranium/eng, 5, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("uranium ingot", /obj/item/ingot/uranium, 6, time = 100), \
))
@@ -178,7 +172,6 @@ GLOBAL_LIST_INIT(uranium_recipes, list ( \
GLOBAL_LIST_INIT(plasma_recipes, list ( \
new/datum/stack_recipe("plasma door", /obj/structure/mineral_door/transparent/plasma, 10, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("plasma tile", /obj/item/stack/tile/mineral/plasma, 1, 4, 20), \
- new/datum/stack_recipe("Scientist Statue", /obj/structure/statue/plasma/scientist, 5, one_per_turf = 1, on_floor = 1), \
// new/datum/stack_recipe("plasma ingot", /obj/item/ingot/plasma, 6, time = 100), \ no
))
@@ -218,12 +211,7 @@ GLOBAL_LIST_INIT(plasma_recipes, list ( \
GLOBAL_LIST_INIT(gold_recipes, list ( \
new/datum/stack_recipe("golden door", /obj/structure/mineral_door/gold, 10, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("gold tile", /obj/item/stack/tile/mineral/gold, 1, 4, 20), \
- new/datum/stack_recipe("HoS Statue", /obj/structure/statue/gold/hos, 5, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("HoP Statue", /obj/structure/statue/gold/hop, 5, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("CE Statue", /obj/structure/statue/gold/ce, 5, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("RD Statue", /obj/structure/statue/gold/rd, 5, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("Simple Crown", /obj/item/clothing/head/crown, 5), \
- new/datum/stack_recipe("CMO Statue", /obj/structure/statue/gold/cmo, 5, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("gold ingot", /obj/item/ingot/gold, 6, time = 100), \
))
@@ -251,11 +239,6 @@ GLOBAL_LIST_INIT(gold_recipes, list ( \
GLOBAL_LIST_INIT(silver_recipes, list ( \
new/datum/stack_recipe("silver door", /obj/structure/mineral_door/silver, 10, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("silver tile", /obj/item/stack/tile/mineral/silver, 1, 4, 20), \
- new/datum/stack_recipe("Med Officer Statue", /obj/structure/statue/silver/md, 5, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("Janitor Statue", /obj/structure/statue/silver/janitor, 5, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("Sec Officer Statue", /obj/structure/statue/silver/sec, 5, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("Sec Borg Statue", /obj/structure/statue/silver/secborg, 5, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("Med Borg Statue", /obj/structure/statue/silver/medborg, 5, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("silver ingot", /obj/item/ingot/silver, 6, time = 100), \
))
@@ -282,7 +265,6 @@ GLOBAL_LIST_INIT(silver_recipes, list ( \
GLOBAL_LIST_INIT(bananium_recipes, list ( \
new/datum/stack_recipe("bananium tile", /obj/item/stack/tile/mineral/bananium, 1, 4, 20), \
- new/datum/stack_recipe("Clown Statue", /obj/structure/statue/bananium/clown, 5, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("hilarious ingot", /obj/item/ingot/bananium, 6, time = 100), \
))
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index 1fbd0433be..5dbdddb540 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -212,7 +212,7 @@ GLOBAL_LIST_INIT(plasteel_recipes, list ( \
custom_materials = list(/datum/material/iron=MINERAL_MATERIAL_AMOUNT, /datum/material/plasma=MINERAL_MATERIAL_AMOUNT)
throwforce = 10
flags_1 = CONDUCT_1
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 80)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 80)
resistance_flags = FIRE_PROOF
merge_type = /obj/item/stack/sheet/plasteel
grind_results = list(/datum/reagent/iron = 20, /datum/reagent/toxin/plasma = 20)
@@ -291,7 +291,7 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \
icon = 'icons/obj/stack_objects.dmi'
custom_materials = list(/datum/material/wood=MINERAL_MATERIAL_AMOUNT)
sheettype = "wood"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 0)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 0)
resistance_flags = FLAMMABLE
merge_type = /obj/item/stack/sheet/mineral/wood
novariants = TRUE
@@ -355,7 +355,7 @@ GLOBAL_LIST_INIT(bamboo_recipes, list ( \
icon = 'icons/obj/stack_objects.dmi'
custom_materials = list(/datum/material/bamboo = MINERAL_MATERIAL_AMOUNT)
throwforce = 15
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 0)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 0)
resistance_flags = FLAMMABLE
merge_type = /obj/item/stack/sheet/mineral/bamboo
grind_results = list(/datum/reagent/cellulose = 10)
diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm
index 6eac04b976..728e5fd726 100644
--- a/code/game/objects/items/stacks/tiles/tile_types.dm
+++ b/code/game/objects/items/stacks/tiles/tile_types.dm
@@ -530,7 +530,7 @@
flags_1 = CONDUCT_1
turf_type = /turf/open/floor/plasteel
mineralType = "metal"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 70)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 70)
resistance_flags = FIRE_PROOF
/obj/item/stack/tile/plasteel/cyborg
diff --git a/code/game/objects/items/storage/_storage.dm b/code/game/objects/items/storage/_storage.dm
index 04362481b2..cbaa1775eb 100644
--- a/code/game/objects/items/storage/_storage.dm
+++ b/code/game/objects/items/storage/_storage.dm
@@ -8,7 +8,7 @@
/obj/item/storage/get_dumping_location(obj/item/storage/source,mob/user)
return src
-/obj/item/storage/Initialize()
+/obj/item/storage/Initialize(mapload)
. = ..()
PopulateContents()
diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm
index b6520f6bb5..6b97772b00 100644
--- a/code/game/objects/items/storage/backpack.dm
+++ b/code/game/objects/items/storage/backpack.dm
@@ -44,7 +44,7 @@
item_state = "holdingpack"
resistance_flags = FIRE_PROOF
item_flags = NO_MAT_REDEMPTION
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 50)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 60, ACID = 50)
component_type = /datum/component/storage/concrete/bluespace/bag_of_holding
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
@@ -283,7 +283,7 @@
level = 1
component_type = /datum/component/storage/concrete/secret_satchel
-/obj/item/storage/backpack/satchel/flat/Initialize()
+/obj/item/storage/backpack/satchel/flat/Initialize(mapload)
. = ..()
SSpersistence.new_secret_satchels += src
@@ -316,7 +316,7 @@
var/list/reward_all_of_these = list() //use paths!
var/revealed = FALSE
-/obj/item/storage/backpack/satchel/flat/secret/Initialize()
+/obj/item/storage/backpack/satchel/flat/secret/Initialize(mapload)
. = ..()
if(isfloorturf(loc) && !isplatingturf(loc))
diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm
index e30ec783bf..cc54de09a6 100755
--- a/code/game/objects/items/storage/belt.dm
+++ b/code/game/objects/items/storage/belt.dm
@@ -28,7 +28,7 @@
for(var/obj/item/I in contents)
. += I.get_worn_belt_overlay(icon_file)
-/obj/item/storage/belt/Initialize()
+/obj/item/storage/belt/Initialize(mapload)
. = ..()
update_icon()
@@ -366,7 +366,7 @@
/obj/item/storage/belt/military/snack
name = "tactical snack rig"
-/obj/item/storage/belt/military/snack/Initialize()
+/obj/item/storage/belt/military/snack/Initialize(mapload)
. = ..()
var/sponsor = pick("DonkCo", "Waffle Co.", "Roffle Co.", "Gorlax Marauders", "Tiger Cooperative")
desc = "A set of snack-tical webbing worn by athletes of the [sponsor] VR sports division."
diff --git a/code/game/objects/items/storage/book.dm b/code/game/objects/items/storage/book.dm
index 1a3b40d1da..3a8f5a5cc8 100644
--- a/code/game/objects/items/storage/book.dm
+++ b/code/game/objects/items/storage/book.dm
@@ -39,7 +39,7 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "bible",
var/deity_name = "Christ"
force_string = "holy"
-/obj/item/storage/book/bible/Initialize()
+/obj/item/storage/book/bible/Initialize(mapload)
. = ..()
AddComponent(/datum/component/anti_magic, FALSE, TRUE)
diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm
index 37ca2e4481..79280faca6 100644
--- a/code/game/objects/items/storage/boxes.dm
+++ b/code/game/objects/items/storage/boxes.dm
@@ -964,7 +964,7 @@
illustration = "fruit"
var/theme_name
-/obj/item/storage/box/ingredients/Initialize()
+/obj/item/storage/box/ingredients/Initialize(mapload)
. = ..()
if(theme_name)
name = "[name] ([theme_name])"
@@ -1287,7 +1287,7 @@
var/expiration_date_min = 2300
var/expiration_date_max = 2700
-/obj/item/storage/box/mre/Initialize()
+/obj/item/storage/box/mre/Initialize(mapload)
. = ..()
if(can_expire)
expiration_date = rand(expiration_date_min, expiration_date_max)
diff --git a/code/game/objects/items/storage/firstaid.dm b/code/game/objects/items/storage/firstaid.dm
index 6c3185b312..e700bf87e0 100644
--- a/code/game/objects/items/storage/firstaid.dm
+++ b/code/game/objects/items/storage/firstaid.dm
@@ -405,6 +405,14 @@
for(var/i in 1 to 10)
new /obj/item/reagent_containers/pill/breast_enlargement(src)
+/obj/item/storage/pill_bottle/butt_enlargement
+ name = "butt enlargement pills"
+ desc = "May alert security when sneaking around if enough pills are consumed due to assclapping. Be dummy thick responsibly."
+
+/obj/item/storage/pill_bottle/butt_enlargement/PopulateContents()
+ for(var/i in 1 to 10)
+ new /obj/item/reagent_containers/pill/butt_enlargement(src)
+
/obj/item/storage/pill_bottle/neurine
name = "bottle of neurine pills"
desc = "Contains pills to treat non-severe mental traumas."
@@ -551,6 +559,9 @@
new /obj/item/reagent_containers/glass/bottle/vial/small/penisreduction(src)
new /obj/item/reagent_containers/glass/bottle/vial/small/penisreduction(src)
new /obj/item/reagent_containers/glass/bottle/vial/small/penisreduction(src)
+ new /obj/item/reagent_containers/glass/bottle/vial/small/buttreduction(src)
+ new /obj/item/reagent_containers/glass/bottle/vial/small/buttreduction(src)
+ new /obj/item/reagent_containers/glass/bottle/vial/small/buttreduction(src)
/obj/item/storage/hypospraykit/brute
name = "brute trauma hypospray kit"
diff --git a/code/game/objects/items/storage/lockbox.dm b/code/game/objects/items/storage/lockbox.dm
index ce4e8b9df1..adfd3cc1bd 100644
--- a/code/game/objects/items/storage/lockbox.dm
+++ b/code/game/objects/items/storage/lockbox.dm
@@ -217,7 +217,7 @@
var/datum/bank_account/buyer_account
var/privacy_lock = TRUE
-/obj/item/storage/lockbox/order/Initialize(datum/bank_account/_buyer_account)
+/obj/item/storage/lockbox/order/Initialize(mapload, datum/bank_account/_buyer_account)
. = ..()
buyer_account = _buyer_account
diff --git a/code/game/objects/items/storage/toolbox.dm b/code/game/objects/items/storage/toolbox.dm
index 869711e5b2..00b1d92659 100644
--- a/code/game/objects/items/storage/toolbox.dm
+++ b/code/game/objects/items/storage/toolbox.dm
@@ -400,7 +400,7 @@ GLOBAL_LIST_EMPTY(rubber_toolbox_icons)
attack_verb = list("robusted", "bounced")
can_rubberify = FALSE //we are already the future.
-/obj/item/storage/toolbox/rubber/Initialize()
+/obj/item/storage/toolbox/rubber/Initialize(mapload)
icon_state = pick("blue", "red", "yellow", "green")
item_state = "toolbox_[icon_state]"
if(!GLOB.rubber_toolbox_icons[icon_state])
diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm
index f25f6f3a51..f4b5e26189 100644
--- a/code/game/objects/items/storage/uplink_kits.dm
+++ b/code/game/objects/items/storage/uplink_kits.dm
@@ -447,7 +447,7 @@
/obj/item/paper/contractor_guide
name = "Contractor Guide"
-/obj/item/paper/contractor_guide/Initialize()
+/obj/item/paper/contractor_guide/Initialize(mapload)
info = {"Welcome agent, congratulations on your new position as contractor. On top of your already assigned objectives,
this kit will provide you contracts to take on for TC payments.
Provided within, we give your specialist contractor space suit. It's even more compact, being able to fit into a pocket, and faster than the
diff --git a/code/game/objects/items/stunbaton.dm b/code/game/objects/items/stunbaton.dm
index 6db1e4baae..efd20fdd9e 100644
--- a/code/game/objects/items/stunbaton.dm
+++ b/code/game/objects/items/stunbaton.dm
@@ -13,7 +13,7 @@
throwforce = 7
w_class = WEIGHT_CLASS_NORMAL
attack_verb = list("beaten")
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 50, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 50, BIO = 0, RAD = 0, FIRE = 80, ACID = 80)
attack_speed = CLICK_CD_MELEE
var/stamina_loss_amount = 35
@@ -190,7 +190,7 @@
var/final_stamina_loss_amount = stamina_loss_amount //Our stunning power for the baton
var/shoved = FALSE //Did we succeed on knocking our target over?
var/zap_penetration = armor_pen
- var/zap_block = L.run_armor_check(BODY_ZONE_CHEST, "melee", null, null, zap_penetration) //armor check, including calculation for armor penetration, for our attack
+ var/zap_block = L.run_armor_check(BODY_ZONE_CHEST, MELEE, null, null, zap_penetration) //armor check, including calculation for armor penetration, for our attack
final_stamina_loss_amount = block_calculate_resultant_damage(final_stamina_loss_amount, return_list)
var/obj/item/stock_parts/cell/our_cell = get_cell()
@@ -333,7 +333,7 @@
status_duration = 3 //Slows someone for a tiny bit
var/obj/item/assembly/igniter/sparkler
-/obj/item/melee/baton/cattleprod/Initialize()
+/obj/item/melee/baton/cattleprod/Initialize(mapload)
. = ..()
sparkler = new (src)
sparkler.activate_cooldown = 7 //Helps visualize the knockdown
diff --git a/code/game/objects/items/summon.dm b/code/game/objects/items/summon.dm
index 93846d10ab..ca678e2cbb 100644
--- a/code/game/objects/items/summon.dm
+++ b/code/game/objects/items/summon.dm
@@ -29,7 +29,7 @@
/// are we a ranged weapon?
var/melee_only = TRUE
-/obj/item/summon/Initialize()
+/obj/item/summon/Initialize(mapload)
. = ..()
if(host_type)
host = new host_type(src, summon_count, range)
diff --git a/code/game/objects/items/tanks/jetpack.dm b/code/game/objects/items/tanks/jetpack.dm
index 75ad909777..06c38ead9f 100644
--- a/code/game/objects/items/tanks/jetpack.dm
+++ b/code/game/objects/items/tanks/jetpack.dm
@@ -14,7 +14,7 @@
var/full_speed = TRUE // If the jetpack will have a speedboost in space/nograv or not
var/datum/effect_system/trail_follow/ion/ion_trail
-/obj/item/tank/jetpack/Initialize()
+/obj/item/tank/jetpack/Initialize(mapload)
. = ..()
ion_trail = new
ion_trail.set_up(src)
@@ -181,7 +181,7 @@
var/obj/item/tank/internals/tank = null
var/mob/living/carbon/human/cur_user
-/obj/item/tank/jetpack/suit/Initialize()
+/obj/item/tank/jetpack/suit/Initialize(mapload)
. = ..()
STOP_PROCESSING(SSobj, src)
temp_air_contents = air_contents
diff --git a/code/game/objects/items/tanks/tanks.dm b/code/game/objects/items/tanks/tanks.dm
index ef798ae631..7804abdc91 100644
--- a/code/game/objects/items/tanks/tanks.dm
+++ b/code/game/objects/items/tanks/tanks.dm
@@ -15,7 +15,7 @@
throw_range = 4
custom_materials = list(/datum/material/iron = 500)
actions_types = list(/datum/action/item_action/set_internals)
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 30)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 0, RAD = 0, FIRE = 80, ACID = 30)
var/datum/gas_mixture/air_contents = null
var/distribute_pressure = ONE_ATMOSPHERE
var/integrity = 3
@@ -64,7 +64,7 @@
H.update_action_buttons_icon()
-/obj/item/tank/Initialize()
+/obj/item/tank/Initialize(mapload)
. = ..()
air_contents = new(volume) //liters
diff --git a/code/game/objects/items/tanks/watertank.dm b/code/game/objects/items/tanks/watertank.dm
index 88131fb197..188a8763cd 100644
--- a/code/game/objects/items/tanks/watertank.dm
+++ b/code/game/objects/items/tanks/watertank.dm
@@ -10,13 +10,13 @@
slowdown = 1
actions_types = list(/datum/action/item_action/toggle_mister)
max_integrity = 200
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 30)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 30)
resistance_flags = FIRE_PROOF
var/obj/item/noz
var/volume = 500
-/obj/item/watertank/Initialize()
+/obj/item/watertank/Initialize(mapload)
. = ..()
create_reagents(volume, OPENCONTAINER)
noz = make_noz()
@@ -117,7 +117,7 @@
var/obj/item/watertank/tank
-/obj/item/reagent_containers/spray/mister/Initialize()
+/obj/item/reagent_containers/spray/mister/Initialize(mapload)
. = ..()
tank = loc
if(!istype(tank))
@@ -147,7 +147,7 @@
item_state = "waterbackpackjani"
custom_price = PRICE_ALMOST_ONE_GRAND
-/obj/item/watertank/janitor/Initialize()
+/obj/item/watertank/janitor/Initialize(mapload)
. = ..()
reagents.add_reagent(/datum/reagent/space_cleaner, 500)
@@ -183,7 +183,7 @@
volume = 200
slowdown = 0
-/obj/item/watertank/atmos/Initialize()
+/obj/item/watertank/atmos/Initialize(mapload)
. = ..()
reagents.add_reagent(/datum/reagent/water, 200)
@@ -219,7 +219,7 @@
var/metal_synthesis_cooldown = 0
var/resin_cooldown = 0
-/obj/item/extinguisher/mini/nozzle/Initialize()
+/obj/item/extinguisher/mini/nozzle/Initialize(mapload)
. = ..()
tank = loc
if (!istype(tank))
@@ -440,7 +440,7 @@
volume = 2000
slowdown = 0
-/obj/item/watertank/op/Initialize()
+/obj/item/watertank/op/Initialize(mapload)
. = ..()
reagents.add_reagent(/datum/reagent/toxin/mutagen,350)
reagents.add_reagent(/datum/reagent/napalm,125)
diff --git a/code/game/objects/items/teleportation.dm b/code/game/objects/items/teleportation.dm
index bc6a40f8c0..b0b6a7a973 100644
--- a/code/game/objects/items/teleportation.dm
+++ b/code/game/objects/items/teleportation.dm
@@ -107,13 +107,13 @@
throw_speed = 3
throw_range = 5
custom_materials = list(/datum/material/iron=10000)
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 30, BIO = 0, RAD = 0, FIRE = 100, ACID = 100)
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
var/list/active_portal_pairs
var/max_portal_pairs = 3
var/atmos_link_override
-/obj/item/hand_tele/Initialize()
+/obj/item/hand_tele/Initialize(mapload)
. = ..()
active_portal_pairs = list()
diff --git a/code/game/objects/items/theft_tools.dm b/code/game/objects/items/theft_tools.dm
index 08390e1607..b40c5c22cf 100644
--- a/code/game/objects/items/theft_tools.dm
+++ b/code/game/objects/items/theft_tools.dm
@@ -15,7 +15,7 @@
var/cooldown = 0
var/pulseicon = "plutonium_core_pulse"
-/obj/item/nuke_core/Initialize()
+/obj/item/nuke_core/Initialize(mapload)
. = ..()
START_PROCESSING(SSobj, src)
@@ -229,7 +229,7 @@
usesound = 'sound/weapons/bladeslice.ogg'
var/usesLeft
-/obj/item/scalpel/supermatter/Initialize()
+/obj/item/scalpel/supermatter/Initialize(mapload)
. = ..()
usesLeft = rand(2, 4)
diff --git a/code/game/objects/items/tools/crowbar.dm b/code/game/objects/items/tools/crowbar.dm
index 93f8915f95..8ddcda55e1 100644
--- a/code/game/objects/items/tools/crowbar.dm
+++ b/code/game/objects/items/tools/crowbar.dm
@@ -17,7 +17,7 @@
attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked")
tool_behaviour = TOOL_CROWBAR
toolspeed = 1
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 30)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 30)
wound_bonus = -10
bare_wound_bonus = 5
diff --git a/code/game/objects/items/tools/screwdriver.dm b/code/game/objects/items/tools/screwdriver.dm
index 9f393a7fcb..9aaffa4009 100644
--- a/code/game/objects/items/tools/screwdriver.dm
+++ b/code/game/objects/items/tools/screwdriver.dm
@@ -20,7 +20,7 @@
usesound = list('sound/items/screwdriver.ogg', 'sound/items/screwdriver2.ogg')
tool_behaviour = TOOL_SCREWDRIVER
toolspeed = 1
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 30)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 30)
var/random_color = TRUE //if the screwdriver uses random coloring
var/static/list/screwdriver_colors = list(
"blue" = rgb(24, 97, 213),
@@ -39,7 +39,7 @@
user.visible_message("[user] is stabbing [src] into [user.p_their()] [pick("temple", "heart")]! It looks like [user.p_theyre()] trying to commit suicide!")
return(BRUTELOSS)
-/obj/item/screwdriver/Initialize()
+/obj/item/screwdriver/Initialize(mapload)
. = ..()
if(random_color) //random colors!
icon_state = "screwdriver"
diff --git a/code/game/objects/items/tools/weldingtool.dm b/code/game/objects/items/tools/weldingtool.dm
index 6e7ad99221..d93547e642 100644
--- a/code/game/objects/items/tools/weldingtool.dm
+++ b/code/game/objects/items/tools/weldingtool.dm
@@ -19,7 +19,7 @@
throw_speed = 3
throw_range = 5
w_class = WEIGHT_CLASS_SMALL
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 30)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 30)
resistance_flags = FIRE_PROOF
var/self_fueling = FALSE //Do we refill ourselves or not
@@ -41,7 +41,7 @@
wound_bonus = 0
bare_wound_bonus = 5
-/obj/item/weldingtool/Initialize()
+/obj/item/weldingtool/Initialize(mapload)
. = ..()
create_reagents(max_fuel)
reagents.add_reagent(/datum/reagent/fuel, max_fuel)
diff --git a/code/game/objects/items/tools/wirecutters.dm b/code/game/objects/items/tools/wirecutters.dm
index cbca26e63c..a24137c2f7 100644
--- a/code/game/objects/items/tools/wirecutters.dm
+++ b/code/game/objects/items/tools/wirecutters.dm
@@ -20,7 +20,7 @@
tool_behaviour = TOOL_WIRECUTTER
toolspeed = 1
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 30)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 30)
var/random_color = TRUE
var/static/list/wirecutter_colors = list(
"blue" = rgb(24, 97, 213),
@@ -33,7 +33,7 @@
)
-/obj/item/wirecutters/Initialize()
+/obj/item/wirecutters/Initialize(mapload)
. = ..()
if(random_color) //random colors!
icon_state = "cutters"
diff --git a/code/game/objects/items/tools/wrench.dm b/code/game/objects/items/tools/wrench.dm
index 9a0db3b92b..8f60ab9d4a 100644
--- a/code/game/objects/items/tools/wrench.dm
+++ b/code/game/objects/items/tools/wrench.dm
@@ -17,7 +17,7 @@
attack_verb = list("bashed", "battered", "bludgeoned", "whacked")
tool_behaviour = TOOL_WRENCH
toolspeed = 1
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 30)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 30)
wound_bonus = -10
bare_wound_bonus = 5
diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm
index 547217366b..e6600d323e 100644
--- a/code/game/objects/items/toys.dm
+++ b/code/game/objects/items/toys.dm
@@ -44,7 +44,7 @@
item_state = "balloon-empty"
-/obj/item/toy/balloon/Initialize()
+/obj/item/toy/balloon/Initialize(mapload)
. = ..()
create_reagents(10)
@@ -781,7 +781,7 @@
var/list/cards = list()
var/original_size = 52
-/obj/item/toy/cards/deck/Initialize()
+/obj/item/toy/cards/deck/Initialize(mapload)
. = ..()
populate_deck()
@@ -1549,7 +1549,7 @@
icon_state = "shell1"
var/static/list/possible_colors = list("" = 2, COLOR_PURPLE_GRAY = 1, COLOR_OLIVE = 1, COLOR_PALE_BLUE_GRAY = 1, COLOR_RED_GRAY = 1)
-/obj/item/toy/seashell/Initialize()
+/obj/item/toy/seashell/Initialize(mapload)
. = ..()
pixel_x = rand(-5, 5)
pixel_y = rand(-5, 5)
diff --git a/code/game/objects/items/trash.dm b/code/game/objects/items/trash.dm
index 1816f26843..857f3d8f4a 100644
--- a/code/game/objects/items/trash.dm
+++ b/code/game/objects/items/trash.dm
@@ -7,7 +7,7 @@
w_class = WEIGHT_CLASS_TINY
resistance_flags = FLAMMABLE
-/obj/item/trash/Initialize()
+/obj/item/trash/Initialize(mapload)
. = ..()
AddElement(/datum/element/trash)
diff --git a/code/game/objects/items/vending_items.dm b/code/game/objects/items/vending_items.dm
index 2964d31259..325827c3d0 100755
--- a/code/game/objects/items/vending_items.dm
+++ b/code/game/objects/items/vending_items.dm
@@ -17,7 +17,7 @@
throw_speed = 1
throw_range = 7
w_class = WEIGHT_CLASS_BULKY
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 30)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 70, ACID = 30)
// Built automatically from the corresponding vending machine.
// If null, considered to be full. Otherwise, is list(/typepath = amount).
diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm
index b00d736282..df4ea68af5 100644
--- a/code/game/objects/items/weaponry.dm
+++ b/code/game/objects/items/weaponry.dm
@@ -11,7 +11,7 @@
throw_range = 7
attack_verb = list("banned")
max_integrity = 200
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 70)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 70)
resistance_flags = FIRE_PROOF
/obj/item/banhammer/suicide_act(mob/user)
@@ -67,11 +67,11 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
block_chance = 50
sharpness = SHARP_EDGED
max_integrity = 200
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 50)
resistance_flags = FIRE_PROOF
total_mass = TOTAL_MASS_MEDIEVAL_WEAPON
-/obj/item/claymore/Initialize()
+/obj/item/claymore/Initialize(mapload)
. = ..()
AddComponent(/datum/component/butchering, 40, 105)
AddElement(/datum/element/sword_point)
@@ -97,7 +97,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
var/notches = 0 //HOW MANY PEOPLE HAVE BEEN SLAIN WITH THIS BLADE
var/obj/item/disk/nuclear/nuke_disk //OUR STORED NUKE DISK
-/obj/item/claymore/highlander/Initialize()
+/obj/item/claymore/highlander/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, HIGHLANDER)
START_PROCESSING(SSobj, src)
@@ -223,7 +223,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
icon_state = "claymore_cyborg"
var/mob/living/silicon/robot/robot
-/obj/item/claymore/highlander/robot/Initialize()
+/obj/item/claymore/highlander/robot/Initialize(mapload)
var/obj/item/robot_module/kiltkit = loc
robot = kiltkit.loc
if(!istype(robot))
@@ -250,7 +250,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
block_chance = 50
sharpness = SHARP_EDGED
max_integrity = 200
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 50)
resistance_flags = FIRE_PROOF
total_mass = TOTAL_MASS_MEDIEVAL_WEAPON
@@ -262,7 +262,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
/obj/item/katana/cursed
slot_flags = null
-/obj/item/katana/cursed/Initialize()
+/obj/item/katana/cursed/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CURSED_ITEM_TRAIT)
@@ -369,7 +369,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
/datum/block_parry_data/bokken/quick_parry/proj
parry_efficiency_perfect_override = list()
-/obj/item/melee/bokken/Initialize()
+/obj/item/melee/bokken/Initialize(mapload)
. = ..()
AddElement(/datum/element/sword_point)
if(!harm) //if initialised in non-harm mode, setup force accordingly
@@ -793,7 +793,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
tool_behaviour = TOOL_SAW
toolspeed = 1
-/obj/item/mounted_chainsaw/Initialize()
+/obj/item/mounted_chainsaw/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT)
@@ -821,7 +821,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
attack_verb = list("busted")
var/impressiveness = 45
-/obj/item/statuebust/Initialize()
+/obj/item/statuebust/Initialize(mapload)
. = ..()
AddElement(/datum/element/art, impressiveness)
// AddComponent(/datum/component/beauty, 1000)
@@ -928,7 +928,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
var/throwforce_off // Damage when off
var/weight_class_on // What is the new size class when turned on
-/obj/item/melee/baseball_bat/Initialize()
+/obj/item/melee/baseball_bat/Initialize(mapload)
. = ..()
if(prob(1))
name = "cricket bat"
@@ -946,7 +946,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
total_mass = TOTAL_MASS_MEDIEVAL_WEAPON
wound_bonus = -5
-/obj/item/melee/baseball_bat/chaplain/Initialize()
+/obj/item/melee/baseball_bat/chaplain/Initialize(mapload)
. = ..()
AddComponent(/datum/component/anti_magic, TRUE, TRUE, FALSE, null, null, FALSE)
@@ -1076,7 +1076,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
//Things in this list will be instantly splatted. Flyman weakness is handled in the flyman species weakness proc.
var/list/strong_against
-/obj/item/melee/flyswatter/Initialize()
+/obj/item/melee/flyswatter/Initialize(mapload)
. = ..()
strong_against = typecacheof(list(
/mob/living/simple_animal/hostile/poison/bees/,
@@ -1108,7 +1108,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
item_flags = DROPDEL | ABSTRACT | HAND_ITEM
attack_verb = list("bopped")
-/obj/item/circlegame/Initialize()
+/obj/item/circlegame/Initialize(mapload)
. = ..()
var/mob/living/owner = loc
if(!istype(owner))
@@ -1398,7 +1398,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
hitsound = 'sound/weapons/bladeslice.ogg'
var/wielded = FALSE // track wielded status on item
-/obj/item/vibro_weapon/Initialize()
+/obj/item/vibro_weapon/Initialize(mapload)
. = ..()
RegisterSignal(src, COMSIG_TWOHANDED_WIELD, .proc/on_wield)
RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, .proc/on_unwield)
diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm
index 95a651b50e..e7ab7214b7 100644
--- a/code/game/objects/obj_defense.dm
+++ b/code/game/objects/obj_defense.dm
@@ -22,7 +22,7 @@
//returns the damage value of the attack after processing the obj's various armor protections
/obj/proc/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir, armour_penetration = 0)
- if(damage_flag == "melee" && damage_amount < damage_deflection) // TODO: Refactor armor datums and types entirely jfc
+ if(damage_flag == MELEE && damage_amount < damage_deflection) // TODO: Refactor armor datums and types entirely jfc
return 0
switch(damage_type)
if(BRUTE)
@@ -54,7 +54,7 @@
var/obj/O = AM
if(O.damtype == STAMINA)
throwdamage = 0
- take_damage(throwdamage, BRUTE, "melee", 1, get_dir(src, AM))
+ take_damage(throwdamage, BRUTE, MELEE, 1, get_dir(src, AM))
/obj/ex_act(severity, target, origin)
if(resistance_flags & INDESTRUCTIBLE)
@@ -69,9 +69,9 @@
obj_integrity = 0
qdel(src)
if(2)
- take_damage(rand(100, 250), BRUTE, "bomb", 0)
+ take_damage(rand(100, 250), BRUTE, BOMB, 0)
if(3)
- take_damage(rand(10, 90), BRUTE, "bomb", 0)
+ take_damage(rand(10, 90), BRUTE, BOMB, 0)
/obj/wave_ex_act(power, datum/wave_explosion/explosion, dir)
if(resistance_flags & INDESTRUCTIBLE)
@@ -81,7 +81,7 @@
obj_integrity = 0
qdel(src)
return
- take_damage(wave_explosion_damage(power, explosion), BRUTE, "bomb", 0)
+ take_damage(wave_explosion_damage(power, explosion), BRUTE, BOMB, 0)
/obj/proc/wave_explosion_damage(power, datum/wave_explosion/explosion)
return (explosion_flags & EXPLOSION_FLAG_HARD_OBSTACLE)? EXPLOSION_POWER_STANDARD_SCALE_HARD_OBSTACLE_DAMAGE(power, explosion.hard_obstacle_mod) : EXPLOSION_POWER_STANDARD_SCALE_OBJECT_DAMAGE(power, explosion.object_damage_mod)
@@ -106,7 +106,7 @@
user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ), forced="hulk")
else
playsound(src, 'sound/effects/bang.ogg', 50, 1)
- take_damage(hulk_damage(), BRUTE, "melee", 0, get_dir(src, user))
+ take_damage(hulk_damage(), BRUTE, MELEE, 0, get_dir(src, user))
return 1
return 0
@@ -115,7 +115,7 @@
var/turf/T = loc
if(T.intact && level == 1) //the blob doesn't destroy thing below the floor
return
- take_damage(400, BRUTE, "melee", 0, get_dir(src, B))
+ take_damage(400, BRUTE, MELEE, 0, get_dir(src, B))
/obj/proc/attack_generic(mob/user, damage_amount = 0, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, armor_penetration = 0) //used by attack_alien, attack_animal, and attack_slime
if(SEND_SIGNAL(src, COMSIG_OBJ_ATTACK_GENERIC, user, damage_amount, damage_type, damage_flag, sound_effect, armor_penetration) & COMPONENT_STOP_GENERIC_ATTACK)
@@ -127,7 +127,7 @@
user.DelayNextAction(CLICK_CD_MELEE)
/obj/attack_alien(mob/living/carbon/alien/humanoid/user)
- if(attack_generic(user, 60, BRUTE, "melee", 0))
+ if(attack_generic(user, 60, BRUTE, MELEE, 0))
playsound(src.loc, 'sound/weapons/slash.ogg', 100, 1)
/obj/attack_animal(mob/living/simple_animal/M)
@@ -141,9 +141,9 @@
if(M.environment_smash)
play_soundeffect = 0
if(M.obj_damage)
- . = attack_generic(M, M.obj_damage, M.melee_damage_type, "melee", play_soundeffect, M.armour_penetration)
+ . = attack_generic(M, M.obj_damage, M.melee_damage_type, MELEE, play_soundeffect, M.armour_penetration)
else
- . = attack_generic(M, rand(M.melee_damage_lower,M.melee_damage_upper), M.melee_damage_type, "melee", play_soundeffect, M.armour_penetration)
+ . = attack_generic(M, rand(M.melee_damage_lower,M.melee_damage_upper), M.melee_damage_type, MELEE, play_soundeffect, M.armour_penetration)
if(. && !play_soundeffect)
playsound(src, 'sound/effects/meteorimpact.ogg', 100, 1)
@@ -167,30 +167,10 @@
return
if(istype(src, /obj/machinery/atmospherics))
return
- attack_generic(user, rand(10, 15), BRUTE, "melee", 1)
+ attack_generic(user, rand(10, 15), BRUTE, MELEE, 1)
#undef BLACKLISTED_OBJECTS
-/obj/mech_melee_attack(obj/mecha/M)
- M.do_attack_animation(src)
- var/play_soundeffect = 0
- var/mech_damtype = M.damtype
- if(M.selected)
- mech_damtype = M.selected.damtype
- play_soundeffect = 1
- else
- switch(M.damtype)
- if(BRUTE)
- playsound(src, 'sound/weapons/punch4.ogg', 50, 1)
- if(BURN)
- playsound(src, 'sound/items/welder.ogg', 50, 1)
- if(TOX)
- playsound(src, 'sound/effects/spray2.ogg', 50, 1)
- return 0
- else
- return 0
- visible_message("[M.name] has hit [src].", null, null, COMBAT_MESSAGE_RANGE)
- return take_damage(M.force*3, mech_damtype, "melee", play_soundeffect, get_dir(src, M)) // multiplied by 3 so we can hit objs hard but not be overpowered against mobs.
/obj/singularity_act()
ex_act(EXPLODE_DEVASTATE)
@@ -201,7 +181,7 @@
///// ACID
-GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/effects/effects.dmi', "acid"))
+GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/effects/effects.dmi', ACID))
//the obj's reaction when touched by acid
/obj/acid_act(acidpwr, acid_volume)
@@ -231,7 +211,7 @@ GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/e
if(T.intact && level == 1) //fire can't damage things hidden below the floor.
return
if(exposed_temperature && !(resistance_flags & FIRE_PROOF))
- take_damage(clamp(0.02 * exposed_temperature, 0, 20), BURN, "fire", 0)
+ take_damage(clamp(0.02 * exposed_temperature, 0, 20), BURN, FIRE, 0)
if(!(resistance_flags & ON_FIRE) && (resistance_flags & FLAMMABLE))
resistance_flags |= ON_FIRE
SSfire_burning.processing[src] = src
@@ -280,9 +260,9 @@ GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/e
//what happens when the obj's integrity reaches zero.
/obj/proc/obj_destruction(damage_flag)
- if(damage_flag == "acid")
+ if(damage_flag == ACID)
acid_melt()
- else if(damage_flag == "fire")
+ else if(damage_flag == FIRE)
burn()
else
deconstruct(FALSE)
diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm
index cf256dd6fc..46248c1ff8 100644
--- a/code/game/objects/objs.dm
+++ b/code/game/objects/objs.dm
@@ -48,7 +48,7 @@
return FALSE
return ..()
-/obj/Initialize()
+/obj/Initialize(mapload)
if (islist(armor))
armor = getArmor(arglist(armor))
else if (!armor)
@@ -250,6 +250,10 @@
* * caller- The movable we're checking pass flags for, if we're making any such checks
**/
/obj/proc/CanAStarPass(obj/item/card/id/ID, to_dir, atom/movable/caller)
+ if(ismovable(caller))
+ var/atom/movable/AM = caller
+ if(AM.pass_flags & pass_flags_self)
+ return TRUE
. = !density
/obj/proc/check_uplink_validity()
@@ -280,15 +284,15 @@
if (islist(result))
if (result["button"] != 2) // If the user pressed the cancel button
// text2num conveniently returns a null on invalid values
- armor = armor.setRating(melee = text2num(result["values"]["melee"]),\
- bullet = text2num(result["values"]["bullet"]),\
- laser = text2num(result["values"]["laser"]),\
- energy = text2num(result["values"]["energy"]),\
- bomb = text2num(result["values"]["bomb"]),\
- bio = text2num(result["values"]["bio"]),\
- rad = text2num(result["values"]["rad"]),\
- fire = text2num(result["values"]["fire"]),\
- acid = text2num(result["values"]["acid"]))
+ armor = armor.setRating(melee = text2num(result["values"][MELEE]),\
+ bullet = text2num(result["values"][BULLET]),\
+ laser = text2num(result["values"][LASER]),\
+ energy = text2num(result["values"][ENERGY]),\
+ bomb = text2num(result["values"][BOMB]),\
+ bio = text2num(result["values"][BIO]),\
+ rad = text2num(result["values"][RAD]),\
+ fire = text2num(result["values"][FIRE]),\
+ acid = text2num(result["values"][ACID]))
log_admin("[key_name(usr)] modified the armor on [src] ([type]) to melee: [armor.melee], bullet: [armor.bullet], laser: [armor.laser], energy: [armor.energy], bomb: [armor.bomb], bio: [armor.bio], rad: [armor.rad], fire: [armor.fire], acid: [armor.acid]")
message_admins("[key_name_admin(usr)] modified the armor on [src] ([type]) to melee: [armor.melee], bullet: [armor.bullet], laser: [armor.laser], energy: [armor.energy], bomb: [armor.bomb], bio: [armor.bio], rad: [armor.rad], fire: [armor.fire], acid: [armor.acid]")
if(href_list[VV_HK_MASS_DEL_TYPE])
diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm
index 52036427c8..9887830364 100644
--- a/code/game/objects/structures.dm
+++ b/code/game/objects/structures.dm
@@ -10,13 +10,15 @@
var/broken = 0 //similar to machinery's stat BROKEN
layer = BELOW_OBJ_LAYER
//ricochets on structures commented out for now because there's a lot of structures that /shouldnt/ be ricocheting and those need to be reviewed first
+ //With the addition of [pass_flags_self] the ricocheting of structures /shouldnt/ happen by default thus the existing code could be uncommented out - Solaris-Shade
//flags_1 = DEFAULT_RICOCHET_1
//flags_ricochet = RICOCHET_HARD
//ricochet_chance_mod = 0.5
+ pass_flags_self = PASSSTRUCTURE
-/obj/structure/Initialize()
+/obj/structure/Initialize(mapload)
if (!armor)
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50)
. = ..()
if(smooth)
queue_smooth(src)
@@ -102,6 +104,12 @@
if(examine_status)
. += examine_status
+/obj/structure/CanAllowThrough(atom/movable/mover, turf/target)
+ . = ..()
+
+ if(mover.pass_flags & PASSSTRUCTURE)
+ return TRUE
+
/obj/structure/proc/examine_status(mob/user) //An overridable proc, mostly for falsewalls.
var/healthpercent = (obj_integrity/max_integrity) * 100
switch(healthpercent)
@@ -114,4 +122,4 @@
return "It's falling apart!"
/obj/structure/rust_heretic_act()
- take_damage(500, BRUTE, "melee", 1)
+ take_damage(500, BRUTE, MELEE, 1)
diff --git a/code/game/objects/structures/ai_core.dm b/code/game/objects/structures/ai_core.dm
index 339c2773e5..85ee3f9f56 100644
--- a/code/game/objects/structures/ai_core.dm
+++ b/code/game/objects/structures/ai_core.dm
@@ -12,7 +12,7 @@
var/obj/item/mmi/brain = null
var/can_deconstruct = TRUE
-/obj/structure/AIcore/Initialize()
+/obj/structure/AIcore/Initialize(mapload)
. = ..()
laws = new
laws.set_laws_config()
@@ -67,7 +67,7 @@
return
return ..()
-/obj/structure/AIcore/latejoin_inactive/Initialize()
+/obj/structure/AIcore/latejoin_inactive/Initialize(mapload)
. = ..()
GLOB.latejoin_ai_cores += src
diff --git a/code/game/objects/structures/aliens.dm b/code/game/objects/structures/aliens.dm
index bc7ce8c36e..6c30b20ccd 100644
--- a/code/game/objects/structures/aliens.dm
+++ b/code/game/objects/structures/aliens.dm
@@ -97,11 +97,6 @@
/obj/structure/alien/resin/attack_paw(mob/user)
return attack_hand(user)
-
-/obj/structure/alien/resin/CanPass(atom/movable/mover, turf/target)
- return !density
-
-
/*
* Weeds
*/
@@ -125,7 +120,7 @@
var/growth_cooldown_high = 200
var/static/list/blacklisted_turfs
-/obj/structure/alien/weeds/Initialize()
+/obj/structure/alien/weeds/Initialize(mapload)
pixel_x = -4
pixel_y = -4 //so the sprites line up right in the map editor
. = ..()
@@ -177,7 +172,7 @@
var/lon_range = 4
var/node_range = NODERANGE
-/obj/structure/alien/weeds/node/Initialize()
+/obj/structure/alien/weeds/node/Initialize(mapload)
icon = 'icons/obj/smooth_structures/alien/weednode.dmi'
. = ..()
set_light(lon_range)
diff --git a/code/game/objects/structures/artstuff.dm b/code/game/objects/structures/artstuff.dm
index b751724313..7592385abf 100644
--- a/code/game/objects/structures/artstuff.dm
+++ b/code/game/objects/structures/artstuff.dm
@@ -62,7 +62,7 @@
pixel_x = 10
pixel_y = 9
-/obj/item/canvas/Initialize()
+/obj/item/canvas/Initialize(mapload)
. = ..()
reset_grid()
diff --git a/code/game/objects/structures/barsigns.dm b/code/game/objects/structures/barsigns.dm
index a96d39316e..91c43dc238 100644
--- a/code/game/objects/structures/barsigns.dm
+++ b/code/game/objects/structures/barsigns.dm
@@ -6,12 +6,12 @@
req_access = list(ACCESS_BAR)
max_integrity = 500
integrity_failure = 0.5
- armor = list("melee" = 20, "bullet" = 20, "laser" = 20, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
+ armor = list(MELEE = 20, BULLET = 20, LASER = 20, ENERGY = 100, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50)
buildable_sign = 0
var/list/barsigns=list()
var/panel_open = FALSE
-/obj/structure/sign/barsign/Initialize()
+/obj/structure/sign/barsign/Initialize(mapload)
. = ..()
//filling the barsigns list
diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm
index 89f018f291..9d14757897 100644
--- a/code/game/objects/structures/beds_chairs/chair.dm
+++ b/code/game/objects/structures/beds_chairs/chair.dm
@@ -21,7 +21,7 @@
if(!has_buckled_mobs())
. += "Drag your sprite to sit in it."
-/obj/structure/chair/Initialize()
+/obj/structure/chair/Initialize(mapload)
. = ..()
if(!anchored) //why would you put these on the shuttle?
addtimer(CALLBACK(src, .proc/RemoveFromLatejoin), 0)
@@ -190,7 +190,7 @@
item_chair = null
var/mutable_appearance/armrest
-/obj/structure/chair/comfy/Initialize()
+/obj/structure/chair/comfy/Initialize(mapload)
armrest = GetArmrest()
armrest.layer = ABOVE_MOB_LAYER
return ..()
diff --git a/code/game/objects/structures/beds_chairs/pew.dm b/code/game/objects/structures/beds_chairs/pew.dm
index ec257a9898..27f67ba0be 100644
--- a/code/game/objects/structures/beds_chairs/pew.dm
+++ b/code/game/objects/structures/beds_chairs/pew.dm
@@ -14,7 +14,7 @@
icon_state = "pewend_left"
var/mutable_appearance/leftpewarmrest
-/obj/structure/chair/pew/left/Initialize()
+/obj/structure/chair/pew/left/Initialize(mapload)
leftpewarmrest = GetLeftPewArmrest()
leftpewarmrest.layer = ABOVE_MOB_LAYER
return ..()
@@ -45,7 +45,7 @@
icon_state = "pewend_right"
var/mutable_appearance/rightpewarmrest
-/obj/structure/chair/pew/right/Initialize()
+/obj/structure/chair/pew/right/Initialize(mapload)
rightpewarmrest = GetRightPewArmrest()
rightpewarmrest.layer = ABOVE_MOB_LAYER
return ..()
diff --git a/code/game/objects/structures/beds_chairs/sofa.dm b/code/game/objects/structures/beds_chairs/sofa.dm
index 48352814b5..b7968d84f4 100644
--- a/code/game/objects/structures/beds_chairs/sofa.dm
+++ b/code/game/objects/structures/beds_chairs/sofa.dm
@@ -6,7 +6,7 @@
item_chair = null
var/mutable_appearance/armrest
-/obj/structure/chair/sofa/Initialize()
+/obj/structure/chair/sofa/Initialize(mapload)
armrest = mutable_appearance(icon, "[icon_state]_armrest", ABOVE_MOB_LAYER)
return ..()
diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm
index 8cd58d7942..1403eb999c 100644
--- a/code/game/objects/structures/bedsheet_bin.dm
+++ b/code/game/objects/structures/bedsheet_bin.dm
@@ -259,7 +259,7 @@ GLOBAL_LIST_INIT(double_bedsheets, list(/obj/item/bedsheet/double,
var/g_mouth
var/g_eyes
-/obj/item/bedsheet/gondola/Initialize()
+/obj/item/bedsheet/gondola/Initialize(mapload)
. = ..()
g_mouth = "sheetgondola_mouth[rand(1, 4)]"
g_eyes = "sheetgondola_eyes[rand(1, 4)]"
@@ -285,7 +285,7 @@ GLOBAL_LIST_INIT(double_bedsheets, list(/obj/item/bedsheet/double,
name = "random bedsheet"
desc = "If you're reading this description ingame, something has gone wrong! Honk!"
-/obj/item/bedsheet/random/Initialize()
+/obj/item/bedsheet/random/Initialize(mapload)
..()
if(bedsheet_type == BEDSHEET_SINGLE)
var/type = pick(typesof(/obj/item/bedsheet) - (list(/obj/item/bedsheet/random, /obj/item/bedsheet/chameleon) + typesof(/obj/item/bedsheet/unlockable) + GLOB.double_bedsheets))
@@ -446,7 +446,7 @@ GLOBAL_LIST_INIT(double_bedsheets, list(/obj/item/bedsheet/double,
icon_state = "random_bedsheet"
bedsheet_type = BEDSHEET_DOUBLE
-/obj/item/bedsheet/random/double/Initialize()
+/obj/item/bedsheet/random/double/Initialize(mapload)
..()
if(bedsheet_type == BEDSHEET_DOUBLE)
var/type = pick(GLOB.double_bedsheets)
diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm
index af4d098157..741b289d97 100644
--- a/code/game/objects/structures/crates_lockers/closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets.dm
@@ -6,7 +6,7 @@
density = TRUE
max_integrity = 200
integrity_failure = 0.25
- armor = list("melee" = 20, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 60)
+ armor = list(MELEE = 20, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 10, BIO = 0, RAD = 0, FIRE = 70, ACID = 60)
var/icon_door = null
var/icon_door_override = FALSE //override to have open overlay use icon different to its base's
@@ -110,10 +110,10 @@
if(HAS_TRAIT(user, TRAIT_SKITTISH))
. += "If you bump into [p_them()] while running, you will jump inside."
-/obj/structure/closet/CanPass(atom/movable/mover, turf/target)
+/obj/structure/closet/CanAllowThrough(atom/movable/mover, turf/target)
+ . = ..()
if(wall_mounted)
return TRUE
- return !density
/obj/structure/closet/proc/can_open(mob/living/user, force = FALSE)
if(force)
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm
index bfb86b087b..e5a7793ab7 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm
@@ -6,7 +6,7 @@
recursive_organ_check(src)
return ..()
-/obj/structure/closet/secure_closet/freezer/Initialize()
+/obj/structure/closet/secure_closet/freezer/Initialize(mapload)
. = ..()
recursive_organ_check(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm
index 4266f006ec..22996339ef 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm
@@ -4,12 +4,12 @@
locked = TRUE
icon_state = "secure"
max_integrity = 250
- armor = list("melee" = 30, "bullet" = 50, "laser" = 50, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80)
+ armor = list(MELEE = 30, BULLET = 50, LASER = 50, ENERGY = 100, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 80)
secure = TRUE
var/melee_min_damage = 20
/obj/structure/closet/secure_closet/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir)
- if(damage_flag == "melee" && damage_amount < melee_min_damage)
+ if(damage_flag == MELEE && damage_amount < melee_min_damage)
return 0
. = ..()
diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm
index f6153330e4..46db798c84 100644
--- a/code/game/objects/structures/crates_lockers/crates.dm
+++ b/code/game/objects/structures/crates_lockers/crates.dm
@@ -17,7 +17,7 @@
material_drop_amount = 5
var/obj/item/paper/fluff/jobs/cargo/manifest/manifest
-/obj/structure/closet/crate/Initialize()
+/obj/structure/closet/crate/Initialize(mapload)
. = ..()
if(icon_state == "[initial(icon_state)]open")
opened = TRUE
@@ -26,15 +26,15 @@
// AddElement(/datum/element/climbable, climb_time = crate_climb_time, climb_stun = 0)
update_icon()
-/obj/structure/closet/crate/CanPass(atom/movable/mover, turf/target)
+/obj/structure/closet/crate/CanAllowThrough(atom/movable/mover, turf/target)
+ . = ..()
if(!istype(mover, /obj/structure/closet))
var/obj/structure/closet/crate/locatedcrate = locate(/obj/structure/closet/crate) in get_turf(mover)
if(locatedcrate) //you can walk on it like tables, if you're not in an open crate trying to move to a closed crate
if(opened) //if we're open, allow entering regardless of located crate openness
- return 1
+ return TRUE
if(!locatedcrate.opened) //otherwise, if the located crate is closed, allow entering
- return 1
- return !density
+ return TRUE
/obj/structure/closet/crate/update_icon_state()
icon_state = "[initial(icon_state)][opened ? "open" : ""]"
@@ -141,7 +141,7 @@
recursive_organ_check(src)
..()
-/obj/structure/closet/crate/freezer/Initialize()
+/obj/structure/closet/crate/freezer/Initialize(mapload)
. = ..()
recursive_organ_check(src)
diff --git a/code/game/objects/structures/crates_lockers/crates/secure.dm b/code/game/objects/structures/crates_lockers/crates/secure.dm
index f63f3afbd9..e60454a7ce 100644
--- a/code/game/objects/structures/crates_lockers/crates/secure.dm
+++ b/code/game/objects/structures/crates_lockers/crates/secure.dm
@@ -5,11 +5,11 @@
secure = TRUE
locked = TRUE
max_integrity = 500
- armor = list("melee" = 30, "bullet" = 50, "laser" = 50, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80)
+ armor = list(MELEE = 30, BULLET = 50, LASER = 50, ENERGY = 100, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 80)
var/tamperproof = 0
/obj/structure/closet/crate/secure/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir)
- if(damage_flag == "melee" && damage_amount < 25)
+ if(damage_flag == MELEE && damage_amount < 25)
return 0
. = ..()
diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm
index ce2acdbdf7..4df8d70939 100644
--- a/code/game/objects/structures/displaycase.dm
+++ b/code/game/objects/structures/displaycase.dm
@@ -6,7 +6,7 @@
density = TRUE
anchored = TRUE
resistance_flags = ACID_PROOF
- armor = list("melee" = 30, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 100)
+ armor = list(MELEE = 30, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 0, RAD = 0, FIRE = 70, ACID = 100)
max_integrity = 200
integrity_failure = 0.25
attack_hand_speed = CLICK_CD_MELEE
@@ -20,7 +20,7 @@
var/list/start_showpieces = list() //Takes sublists in the form of list("type" = /obj/item/bikehorn, "trophy_message" = "henk")
var/trophy_message = ""
-/obj/structure/displaycase/Initialize()
+/obj/structure/displaycase/Initialize(mapload)
. = ..()
if(start_showpieces.len && !start_showpiece_type)
var/list/showpiece_entry = pick(start_showpieces)
@@ -252,7 +252,7 @@
integrity_failure = 0
openable = FALSE
-/obj/structure/displaycase/trophy/Initialize()
+/obj/structure/displaycase/trophy/Initialize(mapload)
. = ..()
GLOB.trophy_cases += src
diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm
index 5b3cd3139c..bf06f06e6f 100644
--- a/code/game/objects/structures/false_walls.dm
+++ b/code/game/objects/structures/false_walls.dm
@@ -33,7 +33,7 @@
var/girder_type = /obj/structure/girder/displaced
var/opening = FALSE
-/obj/structure/falsewall/Initialize()
+/obj/structure/falsewall/Initialize(mapload)
. = ..()
air_update_turf(TRUE)
diff --git a/code/game/objects/structures/fence.dm b/code/game/objects/structures/fence.dm
index 5c63be0165..1a23981af2 100644
--- a/code/game/objects/structures/fence.dm
+++ b/code/game/objects/structures/fence.dm
@@ -23,7 +23,7 @@
var/hole_size= NO_HOLE
var/invulnerable = FALSE
-/obj/structure/fence/Initialize()
+/obj/structure/fence/Initialize(mapload)
. = ..()
update_cut_status()
@@ -129,7 +129,7 @@
cuttable = FALSE
var/open = FALSE
-/obj/structure/fence/door/Initialize()
+/obj/structure/fence/door/Initialize(mapload)
. = ..()
update_door_status()
diff --git a/code/game/objects/structures/fireaxe.dm b/code/game/objects/structures/fireaxe.dm
index a247908b3b..5bf1cd4809 100644
--- a/code/game/objects/structures/fireaxe.dm
+++ b/code/game/objects/structures/fireaxe.dm
@@ -6,14 +6,14 @@
plane = ABOVE_WALL_PLANE
anchored = TRUE
density = FALSE
- armor = list("melee" = 50, "bullet" = 20, "laser" = 0, "energy" = 100, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 50)
+ armor = list(MELEE = 50, BULLET = 20, LASER = 0, ENERGY = 100, BOMB = 10, BIO = 100, RAD = 100, FIRE = 90, ACID = 50)
max_integrity = 150
integrity_failure = 0.33
var/locked = TRUE
var/open = FALSE
var/obj/item/fireaxe/fireaxe
-/obj/structure/fireaxecabinet/Initialize()
+/obj/structure/fireaxecabinet/Initialize(mapload)
. = ..()
fireaxe = new
update_icon()
diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm
index 288bcc2075..e92cf641c8 100644
--- a/code/game/objects/structures/flora.dm
+++ b/code/game/objects/structures/flora.dm
@@ -57,7 +57,7 @@
icon_state = "pine_1"
var/list/icon_states = list("pine_1", "pine_2", "pine_3")
-/obj/structure/flora/tree/pine/Initialize()
+/obj/structure/flora/tree/pine/Initialize(mapload)
. = ..()
if(islist(icon_states && icon_states.len))
@@ -101,7 +101,7 @@
desc = "A tree straight from the tropics."
icon_state = "palm1"
-/obj/structure/flora/tree/palm/Initialize()
+/obj/structure/flora/tree/palm/Initialize(mapload)
. = ..()
icon_state = pick("palm1","palm2")
pixel_x = 0
@@ -118,7 +118,7 @@
icon_state = "anchored_rod"
anchored = TRUE
-/obj/structure/flora/tree/dead/Initialize()
+/obj/structure/flora/tree/dead/Initialize(mapload)
icon_state = "tree_[rand(1, 6)]"
. = ..()
@@ -130,7 +130,7 @@
pixel_x = -48
pixel_y = -20
-/obj/structure/flora/tree/jungle/Initialize()
+/obj/structure/flora/tree/jungle/Initialize(mapload)
icon_state = "[icon_state][rand(1, 6)]"
. = ..()
@@ -149,7 +149,7 @@
/obj/structure/flora/grass/brown
icon_state = "snowgrass1bb"
-/obj/structure/flora/grass/brown/Initialize()
+/obj/structure/flora/grass/brown/Initialize(mapload)
icon_state = "snowgrass[rand(1, 3)]bb"
. = ..()
@@ -157,14 +157,14 @@
/obj/structure/flora/grass/green
icon_state = "snowgrass1gb"
-/obj/structure/flora/grass/green/Initialize()
+/obj/structure/flora/grass/green/Initialize(mapload)
icon_state = "snowgrass[rand(1, 3)]gb"
. = ..()
/obj/structure/flora/grass/both
icon_state = "snowgrassall1"
-/obj/structure/flora/grass/both/Initialize()
+/obj/structure/flora/grass/both/Initialize(mapload)
icon_state = "snowgrassall[rand(1, 3)]"
. = ..()
@@ -177,7 +177,7 @@
icon_state = "snowbush1"
anchored = TRUE
-/obj/structure/flora/bush/Initialize()
+/obj/structure/flora/bush/Initialize(mapload)
icon_state = "snowbush[rand(1, 6)]"
. = ..()
@@ -189,7 +189,7 @@
icon = 'icons/obj/flora/ausflora.dmi'
icon_state = "firstbush_1"
-/obj/structure/flora/ausbushes/Initialize()
+/obj/structure/flora/ausbushes/Initialize(mapload)
if(icon_state == "firstbush_1")
icon_state = "firstbush_[rand(1, 4)]"
. = ..()
@@ -197,105 +197,105 @@
/obj/structure/flora/ausbushes/reedbush
icon_state = "reedbush_1"
-/obj/structure/flora/ausbushes/reedbush/Initialize()
+/obj/structure/flora/ausbushes/reedbush/Initialize(mapload)
icon_state = "reedbush_[rand(1, 4)]"
. = ..()
/obj/structure/flora/ausbushes/leafybush
icon_state = "leafybush_1"
-/obj/structure/flora/ausbushes/leafybush/Initialize()
+/obj/structure/flora/ausbushes/leafybush/Initialize(mapload)
icon_state = "leafybush_[rand(1, 3)]"
. = ..()
/obj/structure/flora/ausbushes/palebush
icon_state = "palebush_1"
-/obj/structure/flora/ausbushes/palebush/Initialize()
+/obj/structure/flora/ausbushes/palebush/Initialize(mapload)
icon_state = "palebush_[rand(1, 4)]"
. = ..()
/obj/structure/flora/ausbushes/stalkybush
icon_state = "stalkybush_1"
-/obj/structure/flora/ausbushes/stalkybush/Initialize()
+/obj/structure/flora/ausbushes/stalkybush/Initialize(mapload)
icon_state = "stalkybush_[rand(1, 3)]"
. = ..()
/obj/structure/flora/ausbushes/grassybush
icon_state = "grassybush_1"
-/obj/structure/flora/ausbushes/grassybush/Initialize()
+/obj/structure/flora/ausbushes/grassybush/Initialize(mapload)
icon_state = "grassybush_[rand(1, 4)]"
. = ..()
/obj/structure/flora/ausbushes/fernybush
icon_state = "fernybush_1"
-/obj/structure/flora/ausbushes/fernybush/Initialize()
+/obj/structure/flora/ausbushes/fernybush/Initialize(mapload)
icon_state = "fernybush_[rand(1, 3)]"
. = ..()
/obj/structure/flora/ausbushes/sunnybush
icon_state = "sunnybush_1"
-/obj/structure/flora/ausbushes/sunnybush/Initialize()
+/obj/structure/flora/ausbushes/sunnybush/Initialize(mapload)
icon_state = "sunnybush_[rand(1, 3)]"
. = ..()
/obj/structure/flora/ausbushes/genericbush
icon_state = "genericbush_1"
-/obj/structure/flora/ausbushes/genericbush/Initialize()
+/obj/structure/flora/ausbushes/genericbush/Initialize(mapload)
icon_state = "genericbush_[rand(1, 4)]"
. = ..()
/obj/structure/flora/ausbushes/pointybush
icon_state = "pointybush_1"
-/obj/structure/flora/ausbushes/pointybush/Initialize()
+/obj/structure/flora/ausbushes/pointybush/Initialize(mapload)
icon_state = "pointybush_[rand(1, 4)]"
. = ..()
/obj/structure/flora/ausbushes/lavendergrass
icon_state = "lavendergrass_1"
-/obj/structure/flora/ausbushes/lavendergrass/Initialize()
+/obj/structure/flora/ausbushes/lavendergrass/Initialize(mapload)
icon_state = "lavendergrass_[rand(1, 4)]"
. = ..()
/obj/structure/flora/ausbushes/ywflowers
icon_state = "ywflowers_1"
-/obj/structure/flora/ausbushes/ywflowers/Initialize()
+/obj/structure/flora/ausbushes/ywflowers/Initialize(mapload)
icon_state = "ywflowers_[rand(1, 3)]"
. = ..()
/obj/structure/flora/ausbushes/brflowers
icon_state = "brflowers_1"
-/obj/structure/flora/ausbushes/brflowers/Initialize()
+/obj/structure/flora/ausbushes/brflowers/Initialize(mapload)
icon_state = "brflowers_[rand(1, 3)]"
. = ..()
/obj/structure/flora/ausbushes/ppflowers
icon_state = "ppflowers_1"
-/obj/structure/flora/ausbushes/ppflowers/Initialize()
+/obj/structure/flora/ausbushes/ppflowers/Initialize(mapload)
icon_state = "ppflowers_[rand(1, 3)]"
. = ..()
/obj/structure/flora/ausbushes/sparsegrass
icon_state = "sparsegrass_1"
-/obj/structure/flora/ausbushes/sparsegrass/Initialize()
+/obj/structure/flora/ausbushes/sparsegrass/Initialize(mapload)
icon_state = "sparsegrass_[rand(1, 3)]"
. = ..()
/obj/structure/flora/ausbushes/fullgrass
icon_state = "fullgrass_1"
-/obj/structure/flora/ausbushes/fullgrass/Initialize()
+/obj/structure/flora/ausbushes/fullgrass/Initialize(mapload)
icon_state = "fullgrass_[rand(1, 3)]"
. = ..()
@@ -322,7 +322,7 @@
icon_state = "random_plant"
var/list/static/states
-/obj/item/kirbyplants/random/Initialize()
+/obj/item/kirbyplants/random/Initialize(mapload)
. = ..()
icon = 'icons/obj/flora/plants.dmi'
if(!states)
@@ -368,7 +368,7 @@
/// Amount of the itemstack to drop
var/mineAmount = 20
-/obj/structure/flora/rock/Initialize()
+/obj/structure/flora/rock/Initialize(mapload)
. = ..()
icon_state = "[icon_state][rand(1,3)]"
@@ -398,7 +398,7 @@
icon_state = "grassa"
-/obj/structure/flora/grass/jungle/Initialize()
+/obj/structure/flora/grass/jungle/Initialize(mapload)
icon_state = "[icon_state][rand(1, 5)]"
. = ..()
@@ -414,7 +414,7 @@
icon = 'icons/obj/flora/jungleflora.dmi'
density = FALSE
-/obj/structure/flora/rock/jungle/Initialize()
+/obj/structure/flora/rock/jungle/Initialize(mapload)
. = ..()
icon_state = "[initial(icon_state)][rand(1,5)]"
@@ -427,7 +427,7 @@
icon = 'icons/obj/flora/jungleflora.dmi'
icon_state = "busha"
-/obj/structure/flora/junglebush/Initialize()
+/obj/structure/flora/junglebush/Initialize(mapload)
icon_state = "[icon_state][rand(1, 3)]"
. = ..()
@@ -452,6 +452,6 @@
pixel_x = -16
pixel_y = -16
-/obj/structure/flora/rock/pile/largejungle/Initialize()
+/obj/structure/flora/rock/pile/largejungle/Initialize(mapload)
. = ..()
icon_state = "[initial(icon_state)][rand(1,3)]"
diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm
index 22f9cf7111..5b4b3a229f 100644
--- a/code/game/objects/structures/girders.dm
+++ b/code/game/objects/structures/girders.dm
@@ -296,14 +296,10 @@
qdel(src)
return TRUE
-/obj/structure/girder/CanPass(atom/movable/mover, turf/target)
- if(istype(mover) && (mover.pass_flags & PASSGRILLE))
+/obj/structure/girder/CanAllowThrough(atom/movable/mover, turf/target)
+ . = ..()
+ if((mover.pass_flags & PASSGRILLE) || istype(mover, /obj/item/projectile))
return prob(girderpasschance)
- else
- if(istype(mover, /obj/item/projectile))
- return prob(girderpasschance)
- else
- return 0
/obj/structure/girder/CanAStarPass(obj/item/card/id/ID, to_dir, atom/movable/caller)
. = !density
diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm
index a09ce578e7..998285dd58 100644
--- a/code/game/objects/structures/grille.dm
+++ b/code/game/objects/structures/grille.dm
@@ -5,10 +5,11 @@
icon_state = "grille"
density = TRUE
anchored = TRUE
+ pass_flags_self = PASSGRILLE
flags_1 = CONDUCT_1
pressure_resistance = 5*ONE_ATMOSPHERE
layer = BELOW_OBJ_LAYER
- armor = list("melee" = 50, "bullet" = 70, "laser" = 70, "energy" = 100, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 50, BULLET = 70, LASER = 70, ENERGY = 100, BOMB = 10, BIO = 100, RAD = 100, FIRE = 0, ACID = 0)
max_integrity = 50
attack_hand_is_action = TRUE
attack_hand_speed = 8
@@ -91,7 +92,7 @@
user.DelayNextAction(flush = TRUE)
user.do_attack_animation(src)
if(!shock(user, 70) && !QDELETED(src)) //Last hit still shocks but shouldn't deal damage to the grille)
- take_damage(rand(5,10), BRUTE, "melee", 1)
+ take_damage(rand(5,10), BRUTE, MELEE, 1)
/obj/structure/grille/attack_paw(mob/user)
return attack_hand(user)
@@ -113,7 +114,7 @@
user.visible_message("[user] hits [src].", null, null, COMBAT_MESSAGE_RANGE)
log_combat(user, src, "hit")
if(!shock(user, 70))
- take_damage(rand(5,10), BRUTE, "melee", 1)
+ take_damage(rand(5,10), BRUTE, MELEE, 1)
/obj/structure/grille/attack_alien(mob/living/user)
if(!user.CheckActionCooldown(CLICK_CD_MELEE))
@@ -122,16 +123,12 @@
user.do_attack_animation(src)
user.visible_message("[user] mangles [src].", null, null, COMBAT_MESSAGE_RANGE)
if(!shock(user, 70))
- take_damage(20, BRUTE, "melee", 1)
+ take_damage(20, BRUTE, MELEE, 1)
-/obj/structure/grille/CanPass(atom/movable/mover, turf/target)
- if(istype(mover) && (mover.pass_flags & PASSGRILLE))
- return TRUE
- else
- if(istype(mover, /obj/item/projectile) && density)
- return prob(30)
- else
- return !density
+/obj/structure/grille/CanAllowThrough(atom/movable/mover, turf/target)
+ . = ..()
+ if(!. && istype(mover, /obj/item/projectile))
+ return prob(30)
/obj/structure/grille/CanAStarPass(obj/item/card/id/ID, to_dir, atom/movable/caller)
. = !density
diff --git a/code/game/objects/structures/guillotine.dm b/code/game/objects/structures/guillotine.dm
index 4773c07657..604961abf4 100644
--- a/code/game/objects/structures/guillotine.dm
+++ b/code/game/objects/structures/guillotine.dm
@@ -29,7 +29,7 @@
var/kill_count = 0
var/current_action = 0 // What's currently happening to the guillotine
-/obj/structure/guillotine/Initialize()
+/obj/structure/guillotine/Initialize(mapload)
LAZYINITLIST(buckled_mobs)
. = ..()
diff --git a/code/game/objects/structures/headpike.dm b/code/game/objects/structures/headpike.dm
index 6aed11701d..16c8bf41c1 100644
--- a/code/game/objects/structures/headpike.dm
+++ b/code/game/objects/structures/headpike.dm
@@ -24,7 +24,7 @@
else
spear = locate(/obj/item/spear) in parts_list
-/obj/structure/headpike/Initialize()
+/obj/structure/headpike/Initialize(mapload)
. = ..()
pixel_x = rand(-8, 8)
diff --git a/code/game/objects/structures/holosign.dm b/code/game/objects/structures/holosign.dm
index cb9309c4c4..0ebccf819e 100644
--- a/code/game/objects/structures/holosign.dm
+++ b/code/game/objects/structures/holosign.dm
@@ -6,7 +6,7 @@
icon = 'icons/effects/effects.dmi'
anchored = TRUE
max_integrity = 1
- armor = list("melee" = 0, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 20)
+ armor = list(MELEE = 0, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 0, BIO = 0, RAD = 0, FIRE = 20, ACID = 20)
var/obj/item/holosign_creator/projector
var/init_vis_overlay = TRUE
rad_flags = RAD_NO_CONTAMINATE
@@ -32,7 +32,7 @@
return
user.do_attack_animation(src, ATTACK_EFFECT_PUNCH)
user.DelayNextAction(CLICK_CD_MELEE)
- take_damage(5 , BRUTE, "melee", 1)
+ take_damage(5 , BRUTE, MELEE, 1)
/obj/structure/holosign/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
switch(damage_type)
@@ -51,20 +51,19 @@
name = "holo barrier"
desc = "A short holographic barrier which can only be passed by walking."
icon_state = "holosign_sec"
- pass_flags = LETPASSTHROW
+ pass_flags_self = PASSTABLE | PASSGRILLE | PASSGLASS | LETPASSTHROW
density = TRUE
max_integrity = 20
var/allow_walk = 1 //can we pass through it on walk intent
-/obj/structure/holosign/barrier/CanPass(atom/movable/mover, turf/target)
- if(!density)
- return 1
- if(mover.pass_flags & (PASSGLASS|PASSTABLE|PASSGRILLE))
- return 1
+/obj/structure/holosign/barrier/CanAllowThrough(atom/movable/mover, turf/target)
+ . = ..()
+ if(.)
+ return
if(iscarbon(mover))
var/mob/living/carbon/C = mover
if(allow_walk && C.m_intent == MOVE_INTENT_WALK)
- return 1
+ return TRUE
/obj/structure/holosign/barrier/engineering
icon_state = "holosign_engi"
@@ -82,7 +81,7 @@
alpha = 150
init_vis_overlay = FALSE
-/obj/structure/holosign/barrier/atmos/Initialize()
+/obj/structure/holosign/barrier/atmos/Initialize(mapload)
. = ..()
air_update_turf(TRUE)
@@ -98,7 +97,7 @@
/obj/structure/holosign/barrier/firelock/BlockThermalConductivity()
return TRUE
-/obj/structure/holosign/barrier/firelock/Initialize()
+/obj/structure/holosign/barrier/firelock/Initialize(mapload)
. = ..()
air_update_turf(TRUE)
@@ -118,7 +117,7 @@
/obj/structure/holosign/barrier/combifan/BlockThermalConductivity()
return TRUE
-/obj/structure/holosign/barrier/combifan/Initialize()
+/obj/structure/holosign/barrier/combifan/Initialize(mapload)
. = ..()
air_update_turf(TRUE)
@@ -130,11 +129,11 @@
allow_walk = 0
/obj/structure/holosign/barrier/cyborg/bullet_act(obj/item/projectile/P)
- take_damage((P.damage / 5) , BRUTE, "melee", 1) //Doesn't really matter what damage flag it is.
+ take_damage((P.damage / 5) , BRUTE, MELEE, 1) //Doesn't really matter what damage flag it is.
if(istype(P, /obj/item/projectile/energy/electrode))
- take_damage(10, BRUTE, "melee", 1) //Tasers aren't harmful.
+ take_damage(10, BRUTE, MELEE, 1) //Tasers aren't harmful.
if(istype(P, /obj/item/projectile/beam/disabler))
- take_damage(5, BRUTE, "melee", 1) //Disablers aren't harmful.
+ take_damage(5, BRUTE, MELEE, 1) //Disablers aren't harmful.
return BULLET_ACT_HIT
/obj/structure/holosign/barrier/medical
@@ -149,7 +148,7 @@
. = ..()
. += "The biometric scanners are [force_allaccess ? "off" : "on"]."
-/obj/structure/holosign/barrier/medical/CanPass(atom/movable/mover, turf/target)
+/obj/structure/holosign/barrier/medical/CanAllowThrough(atom/movable/mover, turf/target)
icon_state = "holo_medical"
if(force_allaccess)
return TRUE
@@ -159,7 +158,7 @@
switch(threat)
if(DISEASE_SEVERITY_MINOR, DISEASE_SEVERITY_MEDIUM, DISEASE_SEVERITY_HARMFUL, DISEASE_SEVERITY_DANGEROUS, DISEASE_SEVERITY_BIOHAZARD)
if(buzzcd < world.time)
- playsound(get_turf(src),'sound/machines/buzz-sigh.ogg',65,1,4)
+ playsound(get_turf(src),'sound/machines/buzz-sigh.ogg',65,TRUE,4)
buzzcd = (world.time + 60)
icon_state = "holo_medical-deny"
return FALSE
@@ -181,7 +180,7 @@
var/shockcd = 0
/obj/structure/holosign/barrier/cyborg/hacked/bullet_act(obj/item/projectile/P)
- take_damage(P.damage, BRUTE, "melee", 1) //Yeah no this doesn't get projectile resistance.
+ take_damage(P.damage, BRUTE, MELEE, 1) //Yeah no this doesn't get projectile resistance.
return BULLET_ACT_HIT
/obj/structure/holosign/barrier/cyborg/hacked/proc/cooldown()
diff --git a/code/game/objects/structures/icemoon/cave_entrance.dm b/code/game/objects/structures/icemoon/cave_entrance.dm
index e68918c764..16e0566d68 100644
--- a/code/game/objects/structures/icemoon/cave_entrance.dm
+++ b/code/game/objects/structures/icemoon/cave_entrance.dm
@@ -19,7 +19,7 @@ GLOBAL_LIST_INIT(ore_probability, list(/obj/item/stack/ore/uranium = 50,
move_resist = INFINITY
anchored = TRUE
-/obj/structure/spawner/ice_moon/Initialize()
+/obj/structure/spawner/ice_moon/Initialize(mapload)
. = ..()
clear_rock()
@@ -107,7 +107,7 @@ GLOBAL_LIST_INIT(ore_probability, list(/obj/item/stack/ore/uranium = 50,
anchored = TRUE
density = TRUE
-/obj/effect/collapsing_demonic_portal/Initialize()
+/obj/effect/collapsing_demonic_portal/Initialize(mapload)
. = ..()
playsound(loc,'sound/effects/tendril_destroyed.ogg', 200, FALSE, 50, TRUE, TRUE)
visible_message("[src] begins to collapse, cutting it off from this world!")
diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm
index bcb9422708..e49de85cf9 100644
--- a/code/game/objects/structures/janicart.dm
+++ b/code/game/objects/structures/janicart.dm
@@ -15,7 +15,7 @@
var/const/max_signs = 4
-/obj/structure/janitorialcart/Initialize()
+/obj/structure/janitorialcart/Initialize(mapload)
. = ..()
create_reagents(100, OPENCONTAINER)
diff --git a/code/game/objects/structures/ladders.dm b/code/game/objects/structures/ladders.dm
index e844461952..ab23ab97e0 100644
--- a/code/game/objects/structures/ladders.dm
+++ b/code/game/objects/structures/ladders.dm
@@ -155,7 +155,7 @@
var/id
var/height = 0 // higher numbers are considered physically higher
-/obj/structure/ladder/unbreakable/Initialize()
+/obj/structure/ladder/unbreakable/Initialize(mapload)
GLOB.ladders += src
return ..()
diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm
index 13f86d13bd..e86123eb25 100644
--- a/code/game/objects/structures/lattice.dm
+++ b/code/game/objects/structures/lattice.dm
@@ -5,7 +5,7 @@
icon_state = "lattice"
density = FALSE
anchored = TRUE
- armor = list("melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 50)
+ armor = list(MELEE = 50, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 50)
max_integrity = 50
layer = LATTICE_LAYER //under pipes
plane = FLOOR_PLANE
diff --git a/code/game/objects/structures/lavaland/geyser.dm b/code/game/objects/structures/lavaland/geyser.dm
index 263b47aab2..38d8a43269 100644
--- a/code/game/objects/structures/lavaland/geyser.dm
+++ b/code/game/objects/structures/lavaland/geyser.dm
@@ -46,7 +46,7 @@
erupting_state = null
var/list/options = list(/datum/reagent/clf3 = 10, /datum/reagent/water/hollowwater = 10, /datum/reagent/medicine/omnizine/protozine = 6, /datum/reagent/wittel = 1)
-/obj/structure/geyser/random/Initialize()
+/obj/structure/geyser/random/Initialize(mapload)
. = ..()
reagent_id = pickweight(options)
diff --git a/code/game/objects/structures/lavaland/necropolis_tendril.dm b/code/game/objects/structures/lavaland/necropolis_tendril.dm
index 67341160de..6a3dcc761f 100644
--- a/code/game/objects/structures/lavaland/necropolis_tendril.dm
+++ b/code/game/objects/structures/lavaland/necropolis_tendril.dm
@@ -30,7 +30,7 @@
mob_types = list(/mob/living/simple_animal/hostile/asteroid/basilisk/watcher/icewing)
GLOBAL_LIST_INIT(tendrils, list())
-/obj/structure/spawner/lavaland/Initialize()
+/obj/structure/spawner/lavaland/Initialize(mapload)
. = ..()
emitted_light = new(loc)
for(var/F in RANGE_TURFS(1, src))
@@ -78,7 +78,7 @@ GLOBAL_LIST_INIT(tendrils, list())
density = TRUE
var/obj/effect/light_emitter/tendril/emitted_light
-/obj/effect/collapse/Initialize()
+/obj/effect/collapse/Initialize(mapload)
. = ..()
emitted_light = new(loc)
visible_message("The tendril writhes in fury as the earth around it begins to crack and break apart! Get back!")
diff --git a/code/game/objects/structures/loot_pile.dm b/code/game/objects/structures/loot_pile.dm
index dc3971fdd2..2ea9f0700b 100644
--- a/code/game/objects/structures/loot_pile.dm
+++ b/code/game/objects/structures/loot_pile.dm
@@ -31,7 +31,7 @@
var/loot_restriction = NO_LOOT_RESTRICTION
var/maximum_loot_per_player = 1
-/obj/structure/loot_pile/Initialize()
+/obj/structure/loot_pile/Initialize(mapload)
. = ..()
icon_state = pick(icon_states_to_use)
diff --git a/code/game/objects/structures/manned_turret.dm b/code/game/objects/structures/manned_turret.dm
index cdbf19367b..f70510e173 100644
--- a/code/game/objects/structures/manned_turret.dm
+++ b/code/game/objects/structures/manned_turret.dm
@@ -184,7 +184,7 @@
resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF
var/obj/machinery/manned_turret/turret
-/obj/item/gun_control/Initialize()
+/obj/item/gun_control/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, ABSTRACT_ITEM_TRAIT)
turret = loc
diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm
index b2f1de8750..61563fc8c5 100644
--- a/code/game/objects/structures/mineral_doors.dm
+++ b/code/game/objects/structures/mineral_doors.dm
@@ -16,7 +16,7 @@
var/isSwitchingStates = 0
var/close_delay = -1 //-1 if does not auto close.
max_integrity = 200
- armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 50, "acid" = 50)
+ armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 10, BIO = 100, RAD = 100, FIRE = 50, ACID = 50)
var/sheetType = /obj/item/stack/sheet/metal
var/sheetAmount = 7
var/openSound = 'sound/effects/stonedoor_openclose.ogg'
@@ -25,7 +25,7 @@
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
rad_insulation = RAD_MEDIUM_INSULATION
-/obj/structure/mineral_door/Initialize()
+/obj/structure/mineral_door/Initialize(mapload)
. = ..()
initial_state = icon_state
air_update_turf(TRUE)
@@ -53,10 +53,10 @@
/obj/structure/mineral_door/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags)
return TryToSwitchState(user)
-/obj/structure/mineral_door/CanPass(atom/movable/mover, turf/target)
+/obj/structure/mineral_door/CanAllowThrough(atom/movable/mover, turf/target)
+ . = ..()
if(istype(mover, /obj/effect/beam))
return !opacity
- return !density
/obj/structure/mineral_door/proc/TryToSwitchState(atom/user)
if(isSwitchingStates)
@@ -243,7 +243,7 @@
resistance_flags = FLAMMABLE
max_integrity = 20
-/obj/structure/mineral_door/paperframe/Initialize()
+/obj/structure/mineral_door/paperframe/Initialize(mapload)
. = ..()
queue_smooth_neighbors(src)
diff --git a/code/game/objects/structures/mop_bucket.dm b/code/game/objects/structures/mop_bucket.dm
index 3eb88ad12d..09dfffb552 100644
--- a/code/game/objects/structures/mop_bucket.dm
+++ b/code/game/objects/structures/mop_bucket.dm
@@ -7,7 +7,7 @@
var/amount_per_transfer_from_this = 5 //shit I dunno, adding this so syringes stop runtime erroring. --NeoFite
-/obj/structure/mopbucket/Initialize()
+/obj/structure/mopbucket/Initialize(mapload)
. = ..()
create_reagents(100, OPENCONTAINER)
diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm
index 383b57a0b0..69206f0d08 100644
--- a/code/game/objects/structures/morgue.dm
+++ b/code/game/objects/structures/morgue.dm
@@ -29,7 +29,7 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants an
var/message_cooldown
var/breakout_time = 600
-/obj/structure/bodycontainer/Initialize()
+/obj/structure/bodycontainer/Initialize(mapload)
. = ..()
if(starting_tray)
connected = new starting_tray(src)
@@ -213,7 +213,7 @@ GLOBAL_LIST_EMPTY(crematoriums)
GLOB.crematoriums.Remove(src)
return ..()
-/obj/structure/bodycontainer/crematorium/Initialize()
+/obj/structure/bodycontainer/crematorium/Initialize(mapload)
. = ..()
GLOB.crematoriums.Add(src)
@@ -306,7 +306,7 @@ GLOBAL_LIST_EMPTY(crematoriums)
layer = TRAY_LAYER
var/obj/structure/bodycontainer/connected = null
anchored = TRUE
- pass_flags = LETPASSTHROW
+ pass_flags_self = LETPASSTHROW
max_integrity = 350
/obj/structure/tray/Destroy()
@@ -362,10 +362,12 @@ GLOBAL_LIST_EMPTY(crematoriums)
name = "morgue tray"
desc = "Apply corpse before closing."
icon_state = "morguet"
+ pass_flags_self = PASSTABLE
-/obj/structure/tray/m_tray/CanPass(atom/movable/mover, turf/target)
- if(istype(mover) && (mover.pass_flags & PASSTABLE))
- return 1
+/obj/structure/tray/m_tray/CanAllowThrough(atom/movable/mover, turf/target)
+ . = ..()
+ if(.)
+ return
if(locate(/obj/structure/table) in get_turf(mover))
return 1
else
diff --git a/code/game/objects/structures/plasticflaps.dm b/code/game/objects/structures/plasticflaps.dm
index 46d5316458..ff85f5b2eb 100644
--- a/code/game/objects/structures/plasticflaps.dm
+++ b/code/game/objects/structures/plasticflaps.dm
@@ -3,7 +3,7 @@
desc = "Heavy duty, airtight, plastic flaps. Definitely can't get past those. No way."
icon = 'icons/obj/stationobjs.dmi'
icon_state = "plasticflaps"
- armor = list("melee" = 100, "bullet" = 80, "laser" = 80, "energy" = 100, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 50, "acid" = 50)
+ armor = list(MELEE = 100, BULLET = 80, LASER = 80, ENERGY = 100, BOMB = 50, BIO = 100, RAD = 100, FIRE = 50, ACID = 50)
density = FALSE
anchored = TRUE
CanAtmosPass = ATMOS_PASS_NO
@@ -11,7 +11,7 @@
/obj/structure/plasticflaps/opaque
opacity = TRUE
-/obj/structure/plasticflaps/Initialize()
+/obj/structure/plasticflaps/Initialize(mapload)
. = ..()
alpha = 0
SSvis_overlays.add_vis_overlay(src, icon, icon_state, ABOVE_MOB_LAYER, plane, dir, add_appearance_flags = RESET_ALPHA) //you see mobs under it, but you hit them like they are above it
@@ -69,7 +69,9 @@
return CanAStarPass(ID, to_dir, caller.pulling)
return TRUE //diseases, stings, etc can pass
-/obj/structure/plasticflaps/CanPass(atom/movable/A, turf/T)
+/obj/structure/plasticflaps/CanAllowThrough(atom/movable/A, turf/T)
+ . = ..()
+
if(istype(A) && (A.pass_flags & PASSGLASS))
return prob(60)
@@ -93,14 +95,13 @@
return 1
if(!M.lying && !(SEND_SIGNAL(M, COMSIG_CHECK_VENTCRAWL)) && M.mob_size != MOB_SIZE_TINY) //If your not laying down, or a ventcrawler or a small creature, no pass.
return 0
- return ..()
/obj/structure/plasticflaps/deconstruct(disassembled = TRUE)
if(!(flags_1 & NODECONSTRUCT_1))
new /obj/item/stack/sheet/plastic/five(loc)
qdel(src)
-/obj/structure/plasticflaps/Initialize()
+/obj/structure/plasticflaps/Initialize(mapload)
. = ..()
air_update_turf(TRUE)
diff --git a/code/game/objects/structures/railings.dm b/code/game/objects/structures/railings.dm
index 21cf97ba70..bfe6d8beee 100644
--- a/code/game/objects/structures/railings.dm
+++ b/code/game/objects/structures/railings.dm
@@ -18,7 +18,7 @@
. = ..()
AddComponent(/datum/component/simple_rotation,ROTATION_ALTCLICK | ROTATION_CLOCKWISE | ROTATION_COUNTERCLOCKWISE | ROTATION_VERBS ,null,CALLBACK(src, .proc/can_be_rotated),CALLBACK(src,.proc/after_rotation))
-/obj/structure/railing/Initialize()
+/obj/structure/railing/Initialize(mapload)
. = ..()
ini_dir = dir
@@ -78,7 +78,7 @@
/obj/structure/railing/CheckExit(atom/movable/mover, turf/target)
..()
if(get_dir(loc, target) & dir)
- var/checking = UNSTOPPABLE | FLYING | FLOATING
+ var/checking = PHASING | FLYING | FLOATING
return !density || mover.throwing || mover.movement_type & checking || mover.move_force >= MOVE_FORCE_EXTREMELY_STRONG
return TRUE
diff --git a/code/game/objects/structures/reflector.dm b/code/game/objects/structures/reflector.dm
index 944e1dac9c..c3322b310d 100644
--- a/code/game/objects/structures/reflector.dm
+++ b/code/game/objects/structures/reflector.dm
@@ -17,7 +17,7 @@
var/list/allowed_projectile_typecache = list(/obj/item/projectile/beam)
var/rotation_angle = -1
-/obj/structure/reflector/Initialize()
+/obj/structure/reflector/Initialize(mapload)
. = ..()
icon_state = "reflector_base"
allowed_projectile_typecache = typecacheof(allowed_projectile_typecache)
diff --git a/code/game/objects/structures/showcase.dm b/code/game/objects/structures/showcase.dm
index 3b7933ab87..9f52bfbefb 100644
--- a/code/game/objects/structures/showcase.dm
+++ b/code/game/objects/structures/showcase.dm
@@ -17,7 +17,7 @@
icon = 'icons/obj/computer.dmi'
icon_state = "computer"
-/obj/structure/showcase/fakeid/Initialize()
+/obj/structure/showcase/fakeid/Initialize(mapload)
. = ..()
add_overlay("id")
add_overlay("id_key")
@@ -28,7 +28,7 @@
icon = 'icons/obj/computer.dmi'
icon_state = "computer"
-/obj/structure/showcase/fakesec/Initialize()
+/obj/structure/showcase/fakesec/Initialize(mapload)
. = ..()
add_overlay("security")
add_overlay("security_key")
diff --git a/code/game/objects/structures/signs/_signs.dm b/code/game/objects/structures/signs/_signs.dm
index 8b82cdba5e..0e4f85572c 100644
--- a/code/game/objects/structures/signs/_signs.dm
+++ b/code/game/objects/structures/signs/_signs.dm
@@ -6,7 +6,7 @@
plane = ABOVE_WALL_PLANE
layer = SIGN_LAYER
max_integrity = 100
- armor = list("melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
+ armor = list(MELEE = 50, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50)
var/buildable_sign = 1 //unwrenchable and modifiable
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
diff --git a/code/game/objects/structures/spawner.dm b/code/game/objects/structures/spawner.dm
index 7d13af1e3e..8b78253adc 100644
--- a/code/game/objects/structures/spawner.dm
+++ b/code/game/objects/structures/spawner.dm
@@ -14,7 +14,7 @@
var/spawn_text = "emerges from"
var/faction = list("hostile")
-/obj/structure/spawner/Initialize()
+/obj/structure/spawner/Initialize(mapload)
. = ..()
AddComponent(/datum/component/spawner, mob_types, spawn_time, faction, spawn_text, max_mobs)
diff --git a/code/game/objects/structures/statues.dm b/code/game/objects/structures/statues.dm
index 2924545cc1..c3eed136be 100644
--- a/code/game/objects/structures/statues.dm
+++ b/code/game/objects/structures/statues.dm
@@ -6,43 +6,59 @@
density = TRUE
anchored = FALSE
max_integrity = 100
- var/oreAmount = 5
- var/material_drop_type = /obj/item/stack/sheet/metal
- var/impressiveness = 15
CanAtmosPass = ATMOS_PASS_DENSITY
+ /// Beauty component mood modifier
+ var/impressiveness = 15
+ /// Art component subtype added to this statue
+ var/art_type = /datum/element/art
+ /// Abstract root type
+ var/abstract_type = /obj/structure/statue
-
-/obj/structure/statue/Initialize()
+/obj/structure/statue/Initialize(mapload)
. = ..()
- AddElement(/datum/element/art, impressiveness)
- addtimer(CALLBACK(src, /datum.proc/_AddElement, list(/datum/element/beauty, impressiveness * 75)), 0)
+ AddElement(art_type, impressiveness)
+ AddElement(/datum/element/beauty, impressiveness * 75)
+
+/obj/structure/statue/ComponentInitialize()
+ . = ..()
+ var/rotation_flags = ROTATION_ALTCLICK | ROTATION_CLOCKWISE | ROTATION_COUNTERCLOCKWISE | ROTATION_VERBS
+ AddComponent(/datum/component/simple_rotation, rotation_flags, null, CALLBACK(src, .proc/can_be_rotated))
+
+/obj/structure/statue/proc/can_be_rotated(mob/user, rotation_type)
+ if(anchored)
+ to_chat(user, "[src] cannot be rotated while it is fastened to the floor!")
+ return FALSE
+ return TRUE
/obj/structure/statue/attackby(obj/item/W, mob/living/user, params)
add_fingerprint(user)
if(!(flags_1 & NODECONSTRUCT_1))
if(default_unfasten_wrench(user, W))
return
- if(W.tool_behaviour == TOOL_WELDER || istype(W, /obj/item/gun/energy/plasmacutter))
+ if(W.tool_behaviour == TOOL_WELDER)
if(!W.tool_start_check(user, amount=0))
return FALSE
- user.visible_message("[user] is slicing apart the [name].", \
- "You are slicing apart the [name]...")
+ user.visible_message(span_notice("[user] is slicing apart the [name]."), \
+ span_notice("You are slicing apart the [name]..."))
if(W.use_tool(src, user, 40, volume=50))
- user.visible_message("[user] slices apart the [name].", \
- "You slice apart the [name]!")
+ user.visible_message(span_notice("[user] slices apart the [name]."), \
+ span_notice("You slice apart the [name]!"))
deconstruct(TRUE)
return
return ..()
+/obj/structure/statue/AltClick(mob/user)
+ return ..() // This hotkey is BLACKLISTED since it's used by /datum/component/simple_rotation
+
/obj/structure/statue/deconstruct(disassembled = TRUE)
if(!(flags_1 & NODECONSTRUCT_1))
- if(material_drop_type)
- var/drop_amt = oreAmount
- if(!disassembled)
- drop_amt -= 2
- if(drop_amt > 0)
- new material_drop_type(get_turf(src), drop_amt)
+ var/amount_mod = disassembled ? 0 : -2
+ for(var/mat in custom_materials)
+ var/datum/material/custom_material = SSmaterials.GetMaterialRef(mat)
+ var/amount = max(0,round(custom_materials[mat]/MINERAL_MATERIAL_AMOUNT) + amount_mod)
+ if(amount > 0)
+ new custom_material.sheet_type(drop_location(),amount)
qdel(src)
//////////////////////////////////////STATUES/////////////////////////////////////////////////////////////
@@ -51,10 +67,9 @@
/obj/structure/statue/uranium
max_integrity = 300
light_range = 2
- material_drop_type = /obj/item/stack/sheet/mineral/uranium
- var/last_event = 0
- var/active = null
+ custom_materials = list(/datum/material/uranium=MINERAL_MATERIAL_AMOUNT*5)
impressiveness = 25 // radiation makes an impression
+ abstract_type = /obj/structure/statue/uranium
/obj/structure/statue/uranium/nuke
name = "statue of a nuclear fission explosive"
@@ -66,39 +81,14 @@
desc = "This statue has a sickening green colour."
icon_state = "eng"
-/obj/structure/statue/uranium/attackby(obj/item/W, mob/user, params)
- radiate()
- return ..()
-
-/obj/structure/statue/uranium/Bumped(atom/movable/AM)
- radiate()
- ..()
-
-/obj/structure/statue/uranium/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags)
- radiate()
- . = ..()
-
-/obj/structure/statue/uranium/attack_paw(mob/user)
- radiate()
- . = ..()
-
-/obj/structure/statue/uranium/proc/radiate()
- if(!active)
- if(world.time > last_event+15)
- active = 1
- radiation_pulse(src, 30)
- last_event = world.time
- active = null
- return
- return
-
////////////////////////////plasma///////////////////////////////////////////////////////////////////////
/obj/structure/statue/plasma
max_integrity = 200
- material_drop_type = /obj/item/stack/sheet/mineral/plasma
desc = "This statue is suitably made from plasma."
impressiveness = 20
+ custom_materials = list(/datum/material/plasma=MINERAL_MATERIAL_AMOUNT*5)
+ abstract_type = /obj/structure/statue/plasma
/obj/structure/statue/plasma/scientist
name = "statue of a scientist"
@@ -108,7 +98,6 @@
if(exposed_temperature > 300)
PlasmaBurn(exposed_temperature)
-
/obj/structure/statue/plasma/bullet_act(obj/item/projectile/Proj)
var/burn = FALSE
if(!(Proj.nodamage) && Proj.damage_type == BURN && !QDELETED(src))
@@ -136,7 +125,9 @@
/obj/structure/statue/plasma/proc/PlasmaBurn(exposed_temperature)
if(QDELETED(src))
return
- atmos_spawn_air("plasma=[oreAmount*10];TEMP=[exposed_temperature]")
+ if(custom_materials[/datum/material/plasma])
+ var/plasma_amount = round(custom_materials[/datum/material/plasma]/MINERAL_MATERIAL_AMOUNT)
+ atmos_spawn_air("plasma=[plasma_amount*10];TEMP=[exposed_temperature]")
deconstruct(FALSE)
/obj/structure/statue/plasma/proc/ignite(exposed_temperature)
@@ -147,9 +138,10 @@
/obj/structure/statue/gold
max_integrity = 300
- material_drop_type = /obj/item/stack/sheet/mineral/gold
desc = "This is a highly valuable statue made from gold."
impressiveness = 30
+ custom_materials = list(/datum/material/gold=MINERAL_MATERIAL_AMOUNT*5)
+ abstract_type = /obj/structure/statue/gold
/obj/structure/statue/gold/hos
name = "statue of the head of security"
@@ -175,9 +167,10 @@
/obj/structure/statue/silver
max_integrity = 300
- material_drop_type = /obj/item/stack/sheet/mineral/silver
desc = "This is a valuable statue made from silver."
impressiveness = 25
+ custom_materials = list(/datum/material/silver=MINERAL_MATERIAL_AMOUNT*5)
+ abstract_type = /obj/structure/statue/silver
/obj/structure/statue/silver/md
name = "statue of a medical officer"
@@ -203,9 +196,10 @@
/obj/structure/statue/diamond
max_integrity = 1000
- material_drop_type = /obj/item/stack/sheet/mineral/diamond
desc = "This is a very expensive diamond statue."
impressiveness = 60
+ custom_materials = list(/datum/material/diamond=MINERAL_MATERIAL_AMOUNT*5)
+ abstract_type = /obj/structure/statue/diamond
/obj/structure/statue/diamond/captain
name = "statue of THE captain."
@@ -223,43 +217,22 @@
/obj/structure/statue/bananium
max_integrity = 300
- material_drop_type = /obj/item/stack/sheet/mineral/bananium
desc = "A bananium statue with a small engraving:'HOOOOOOONK'."
- var/spam_flag = 0
impressiveness = 65
+ custom_materials = list(/datum/material/bananium=MINERAL_MATERIAL_AMOUNT*5)
+ abstract_type = /obj/structure/statue/bananium
/obj/structure/statue/bananium/clown
name = "statue of a clown"
icon_state = "clown"
-/obj/structure/statue/bananium/Bumped(atom/movable/AM)
- honk()
- ..()
-
-/obj/structure/statue/bananium/attackby(obj/item/W, mob/user, params)
- honk()
- return ..()
-
-/obj/structure/statue/bananium/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags)
- honk()
- . = ..()
-
-/obj/structure/statue/bananium/attack_paw(mob/user)
- honk()
- ..()
-
-/obj/structure/statue/bananium/proc/honk()
- if(!spam_flag)
- spam_flag = 1
- playsound(src.loc, 'sound/items/bikehorn.ogg', 50, 1)
- spawn(20)
- spam_flag = 0
-
/////////////////////sandstone/////////////////////////////////////////
/obj/structure/statue/sandstone
max_integrity = 50
- material_drop_type = /obj/item/stack/sheet/mineral/sandstone
+ impressiveness = 15
+ custom_materials = list(/datum/material/sandstone=MINERAL_MATERIAL_AMOUNT*5)
+ abstract_type = /obj/structure/statue/sandstone
/obj/structure/statue/sandstone/assistant
name = "statue of an assistant"
@@ -277,9 +250,327 @@
/obj/structure/statue/snow
max_integrity = 50
- material_drop_type = /obj/item/stack/sheet/mineral/snow
+ custom_materials = list(/datum/material/snow=MINERAL_MATERIAL_AMOUNT*5)
+ abstract_type = /obj/structure/statue/snow
/obj/structure/statue/snow/snowman
name = "snowman"
desc = "Several lumps of snow put together to form a snowman."
icon_state = "snowman"
+
+/obj/structure/statue/snow/snowlegion
+ name = "snowlegion"
+ desc = "Looks like that weird kid with the tiger plushie has been round here again."
+ icon_state = "snowlegion"
+
+///////////////////////////////bronze///////////////////////////////////
+
+/obj/structure/statue/bronze
+ custom_materials = list(/datum/material/bronze=MINERAL_MATERIAL_AMOUNT*5)
+ abstract_type = /obj/structure/statue/bronze
+
+/obj/structure/statue/bronze/marx
+ name = "\improper Karl Marx bust"
+ desc = "A bust depicting a certain 19th century economist. You get the feeling a specter is haunting the station."
+ icon_state = "marx"
+ art_type = /datum/element/art/rev
+
+///////////Elder Atmosian///////////////////////////////////////////
+/* Yeah no.
+/obj/structure/statue/elder_atmosian
+ name = "Elder Atmosian"
+ desc = "A statue of an Elder Atmosian, capable of bending the laws of thermodynamics to their will"
+ icon_state = "eng"
+ custom_materials = list(/datum/material/metalhydrogen = MINERAL_MATERIAL_AMOUNT*10)
+ max_integrity = 1000
+ impressiveness = 100
+ abstract_type = /obj/structure/statue/elder_atmosian //This one is uncarvable
+*/
+
+/obj/item/chisel
+ name = "chisel"
+ desc = "Breaking and making art since 4000 BC. This one uses advanced technology to allow creation of lifelike moving statues."
+ icon = 'icons/obj/statue.dmi'
+ icon_state = "chisel"
+ item_state = "screwdriver_nuke"
+ lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
+ flags_1 = CONDUCT_1
+ slot_flags = ITEM_SLOT_BELT
+ force = 5
+ w_class = WEIGHT_CLASS_TINY
+ throwforce = 5
+ throw_speed = 3
+ throw_range = 5
+ custom_materials = list(/datum/material/iron=75)
+ attack_verb = list("stabs")
+ hitsound = 'sound/weapons/bladeslice.ogg'
+ usesound = list('sound/items/screwdriver.ogg', 'sound/items/screwdriver2.ogg')
+ drop_sound = 'sound/items/handling/screwdriver_drop.ogg'
+ pickup_sound = 'sound/items/handling/screwdriver_pickup.ogg'
+ // item_flags = EYE_STAB // don't have it
+ sharpness = SHARP_POINTY
+
+ /// Block we're currently carving in
+ var/obj/structure/carving_block/prepared_block
+ /// If tracked user moves we stop sculpting
+ var/mob/living/tracked_user
+ /// Currently sculpting
+ var/sculpting = FALSE
+
+/obj/item/chisel/Initialize(mapload)
+ . = ..()
+ //AddElement(/datum/element/eyestab)
+ //AddElement(/datum/element/wall_engraver)
+ //deals 200 damage to statues, meaning you can actually kill one in ~250 hits
+
+/obj/item/chisel/ComponentInitialize()
+ . = ..()
+ AddComponent(/datum/component/bane, /mob/living/simple_animal/hostile/statue, damage_multiplier = 40)
+
+/obj/item/chisel/Destroy()
+ prepared_block = null
+ tracked_user = null
+ return ..()
+
+/*
+Hit the block to start
+Point with the chisel at the target to choose what to sculpt or hit block to choose from preset statue types.
+Hit block again to start sculpting.
+Moving interrupts
+*/
+/obj/item/chisel/pre_attack(atom/A, mob/living/user, params)
+ . = ..()
+ if(sculpting)
+ return
+ if(istype(A,/obj/structure/carving_block))
+ if(A == prepared_block && (prepared_block.current_target || prepared_block.current_preset_type))
+ start_sculpting(user)
+ else if(!prepared_block)
+ set_block(A,user)
+ else if(A == prepared_block)
+ show_generic_statues_prompt(user)
+ return TRUE
+ else if(prepared_block) //We're aiming at something next to us with block prepared
+ prepared_block.set_target(A,user)
+ return TRUE
+
+// We aim at something distant.
+/obj/item/chisel/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
+ . = ..()
+ if(!proximity_flag && !sculpting && prepared_block && ismovable(target) && prepared_block.completion == 0)
+ prepared_block.set_target(target,user)
+
+/obj/item/chisel/proc/start_sculpting(mob/living/user)
+ to_chat(user,span_notice("You start sculpting [prepared_block]."),type="info")
+ sculpting = TRUE
+ //How long whole process takes
+ var/sculpting_time = 30 SECONDS
+ //Single interruptible progress period
+ var/sculpting_period = round(sculpting_time / world.icon_size) //this is just so it reveals pixels line by line for each.
+ var/interrupted = FALSE
+ var/remaining_time = sculpting_time - (prepared_block.completion * sculpting_time)
+
+ var/datum/progressbar/total_progress_bar = new(user, sculpting_time, prepared_block )
+ while(remaining_time > 0 && !interrupted)
+ if(do_after(user,sculpting_period, target = prepared_block, progress = FALSE))
+ remaining_time -= sculpting_period
+ prepared_block.set_completion((sculpting_time - remaining_time)/sculpting_time)
+ total_progress_bar.update(sculpting_time - remaining_time)
+ else
+ interrupted = TRUE
+ total_progress_bar.end_progress()
+ if(!interrupted && !QDELETED(prepared_block))
+ prepared_block.create_statue()
+ to_chat(user,span_notice("The statue is finished!"),type="info")
+ break_sculpting()
+
+/obj/item/chisel/proc/set_block(obj/structure/carving_block/B,mob/living/user)
+ prepared_block = B
+ tracked_user = user
+ RegisterSignal(tracked_user,COMSIG_MOVABLE_MOVED,.proc/break_sculpting)
+ to_chat(user,span_notice("You prepare to work on [B]."),type="info")
+
+/obj/item/chisel/dropped(mob/user, silent)
+ . = ..()
+ break_sculpting()
+
+/obj/item/chisel/proc/break_sculpting()
+ SIGNAL_HANDLER
+ sculpting = FALSE
+ if(prepared_block && prepared_block.completion == 0)
+ prepared_block.reset_target()
+ prepared_block = null
+ if(tracked_user)
+ UnregisterSignal(tracked_user,COMSIG_MOVABLE_MOVED)
+ tracked_user = null
+
+/obj/item/chisel/proc/show_generic_statues_prompt(mob/living/user)
+ var/list/choices = list()
+ for(var/statue_path in prepared_block.get_possible_statues())
+ var/obj/structure/statue/S = statue_path
+ choices[statue_path] = image(icon=initial(S.icon),icon_state=initial(S.icon_state))
+ var/choice = show_radial_menu(user, prepared_block , choices, require_near = TRUE)
+ if(choice)
+ prepared_block.current_preset_type = choice
+ var/image/chosen_looks = choices[choice]
+ prepared_block.current_target = chosen_looks.appearance
+ var/obj/structure/statue/S = choice
+ to_chat(user,span_notice("You decide to sculpt [prepared_block] into [initial(S.name)]."),type="info")
+
+
+/obj/structure/carving_block
+ name = "block"
+ desc = "Ready for sculpting."
+ icon = 'icons/obj/statue.dmi'
+ icon_state = "block"
+ material_flags = MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS | MATERIAL_ADD_PREFIX // MATERIAL_EFFECTS
+ density = TRUE
+ material_modifier = 0.5 //50% effectiveness of materials
+
+ /// The thing it will look like - Unmodified resulting statue appearance
+ var/current_target
+ /// Currently chosen preset statue type
+ var/current_preset_type
+ //Table of required materials for each non-abstract statue type
+ var/static/list/statue_costs
+ /// statue completion from 0 to 1.0
+ var/completion = 0
+ /// Greyscaled target with cutout filter
+ var/mutable_appearance/target_appearance_with_filters
+ /// HSV color filters parameters
+ var/static/list/greyscale_with_value_bump = list(0,0,0, 0,0,0, 0,0,1, 0,0,-0.05)
+
+/obj/structure/carving_block/Destroy()
+ current_target = null
+ target_appearance_with_filters = null
+ return ..()
+
+/obj/structure/carving_block/proc/set_target(atom/movable/target,mob/living/user)
+ if(!is_viable_target(target))
+ to_chat(user,"You won't be able to carve that.")
+ return
+ if(istype(target,/obj/structure/statue/custom))
+ var/obj/structure/statue/custom/original = target
+ current_target = original.content_ma
+ else
+ current_target = target.appearance
+ var/mutable_appearance/ma = current_target
+ to_chat(user,span_notice("You decide to sculpt [src] into [ma.name]."),type="info")
+
+/obj/structure/carving_block/proc/reset_target()
+ current_target = null
+ current_preset_type = null
+ target_appearance_with_filters = null
+
+/obj/structure/carving_block/update_overlays()
+ . = ..()
+ if(!target_appearance_with_filters)
+ return
+ //We're only keeping one instance here that changes in the middle so we have to clone it to avoid managed overlay issues
+ var/mutable_appearance/clone = new(target_appearance_with_filters)
+ . += clone
+
+/obj/structure/carving_block/proc/is_viable_target(atom/movable/target)
+ //Only things on turfs
+ if(!isturf(target.loc))
+ return FALSE
+ //No big icon things
+ var/icon/thing_icon = icon(target.icon, target.icon_state)
+ if(thing_icon.Height() != world.icon_size || thing_icon.Width() != world.icon_size)
+ return FALSE
+ return TRUE
+
+/obj/structure/carving_block/proc/create_statue()
+ if(current_preset_type)
+ var/obj/structure/statue/preset_statue = new current_preset_type(get_turf(src))
+ preset_statue.set_custom_materials(custom_materials)
+ qdel(src)
+ else if(current_target)
+ var/obj/structure/statue/custom/new_statue = new(get_turf(src))
+ new_statue.set_visuals(current_target)
+ new_statue.set_custom_materials(custom_materials)
+ var/mutable_appearance/ma = current_target
+ new_statue.dir = ma.dir
+ new_statue.name = "statue of [ma.name]"
+ new_statue.desc = "A statue depicting [ma.name]."
+ qdel(src)
+
+/obj/structure/carving_block/proc/set_completion(value)
+ if(!current_target)
+ return
+ if(!target_appearance_with_filters)
+ target_appearance_with_filters = new(current_target)
+ // KEEP_APART in case carving block gets KEEP_TOGETHER from somewhere like material texture filters.
+ target_appearance_with_filters.appearance_flags |= KEEP_TOGETHER | KEEP_APART
+ //Doesn't use filter helpers because MAs aren't atoms
+ target_appearance_with_filters.filters = filter(type="color",color=greyscale_with_value_bump,space=FILTER_COLOR_HSV)
+ completion = value
+ var/static/icon/white = icon('icons/effects/alphacolors.dmi', "white")
+ switch(value)
+ if(0)
+ //delete uncovered and reset filters
+ remove_filter("partial_uncover")
+ target_appearance_with_filters = null
+ else
+ var/mask_offset = min(world.icon_size,round(completion * world.icon_size))
+ remove_filter("partial_uncover")
+ add_filter("partial_uncover", 1, alpha_mask_filter(icon = white, y = -mask_offset))
+ target_appearance_with_filters.filters = filter(type="alpha",icon=white,y=-mask_offset,flags=MASK_INVERSE)
+ update_appearance()
+
+
+/// Returns a list of preset statues carvable from this block depending on the custom materials
+/obj/structure/carving_block/proc/get_possible_statues()
+ . = list()
+ if(!statue_costs)
+ statue_costs = build_statue_cost_table()
+ for(var/statue_path in statue_costs)
+ var/list/carving_cost = statue_costs[statue_path]
+ var/enough_materials = TRUE
+ for(var/required_material in carving_cost)
+ if(!custom_materials[required_material] || custom_materials[required_material] < carving_cost[required_material])
+ enough_materials = FALSE
+ break
+ if(enough_materials)
+ . += statue_path
+
+/obj/structure/carving_block/proc/build_statue_cost_table()
+ . = list()
+ for(var/statue_type in subtypesof(/obj/structure/statue) - /obj/structure/statue/custom)
+ var/obj/structure/statue/S = new statue_type()
+ if(!S.icon_state || S.abstract_type == S.type || !S.custom_materials)
+ continue
+ .[S.type] = S.custom_materials
+ qdel(S)
+
+/obj/structure/statue/custom
+ name = "custom statue"
+ icon_state = "base"
+ obj_flags = CAN_BE_HIT | UNIQUE_RENAME
+ appearance_flags = TILE_BOUND | PIXEL_SCALE | KEEP_TOGETHER //Added keep together in case targets has weird layering
+ material_flags = MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS // MATERIAL_EFFECTS
+ /// primary statue overlay
+ var/mutable_appearance/content_ma
+ var/static/list/greyscale_with_value_bump = list(0,0,0, 0,0,0, 0,0,1, 0,0,-0.05)
+
+/obj/structure/statue/custom/Destroy()
+ content_ma = null
+ return ..()
+
+/obj/structure/statue/custom/proc/set_visuals(model_appearance)
+ if(content_ma)
+ QDEL_NULL(content_ma)
+ content_ma = new
+ content_ma.appearance = model_appearance
+ content_ma.pixel_x = 0
+ content_ma.pixel_y = 0
+ content_ma.alpha = 255
+ content_ma.appearance_flags &= ~KEEP_APART //Don't want this
+ content_ma.filters = filter(type="color",color=greyscale_with_value_bump,space=FILTER_COLOR_HSV)
+ update_appearance()
+
+/obj/structure/statue/custom/update_overlays()
+ . = ..()
+ if(content_ma)
+ . += content_ma
diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm
index 24342e44bd..56bd859cda 100644
--- a/code/game/objects/structures/tables_racks.dm
+++ b/code/game/objects/structures/tables_racks.dm
@@ -19,10 +19,10 @@
icon_state = "table"
density = TRUE
anchored = TRUE
+ pass_flags_self = PASSTABLE | LETPASSTHROW
layer = TABLE_LAYER
climbable = TRUE
obj_flags = CAN_BE_HIT|SHOVABLE_ONTO
- pass_flags = LETPASSTHROW //You can throw objects over this, despite it's density.")
attack_hand_speed = CLICK_CD_MELEE
attack_hand_is_action = TRUE
var/frame = /obj/structure/table_frame
@@ -99,15 +99,14 @@
/obj/structure/table/attack_tk()
return FALSE
-/obj/structure/table/CanPass(atom/movable/mover, turf/target)
- if(istype(mover) && (mover.pass_flags & PASSTABLE))
- return 1
+/obj/structure/table/CanAllowThrough(atom/movable/mover, turf/target)
+ . = ..()
+ if(.)
+ return
if(mover.throwing)
- return 1
+ return TRUE
if(locate(/obj/structure/table) in get_turf(mover))
- return 1
- else
- return !density
+ return TRUE
/obj/structure/table/CanAStarPass(obj/item/card/id/ID, to_dir, atom/movable/caller)
. = !density
@@ -317,7 +316,7 @@
canSmoothWith = null
max_integrity = 70
resistance_flags = ACID_PROOF
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 100)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 100)
var/list/debris = list()
/obj/structure/table/glass/New()
@@ -395,7 +394,7 @@
canSmoothWith = null
max_integrity = 270
resistance_flags = ACID_PROOF
- armor = list("melee" = 10, "bullet" = 5, "laser" = 0, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 100)
+ armor = list(MELEE = 10, BULLET = 5, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 0, RAD = 0, FIRE = 80, ACID = 100)
var/list/debris = list()
/obj/structure/table/plasmaglass/New()
@@ -483,7 +482,7 @@
/obj/structure/table/wood/fancy/royalblue)
var/smooth_icon = 'icons/obj/smooth_structures/fancy_table.dmi' // see Initialize()
-/obj/structure/table/wood/fancy/Initialize()
+/obj/structure/table/wood/fancy/Initialize(mapload)
. = ..()
// Needs to be set dynamically because table smooth sprites are 32x34,
// which the editor treats as a two-tile-tall object. The sprites are that
@@ -558,7 +557,7 @@
buildstack = /obj/item/stack/sheet/plasteel
max_integrity = 200
integrity_failure = 0.25
- armor = list("melee" = 10, "bullet" = 30, "laser" = 30, "energy" = 100, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 70)
+ armor = list(MELEE = 10, BULLET = 30, LASER = 30, ENERGY = 100, BOMB = 20, BIO = 0, RAD = 0, FIRE = 80, ACID = 70)
/obj/structure/table/reinforced/deconstruction_hints(mob/user)
if(deconstruction_ready)
@@ -684,7 +683,7 @@
layer = TABLE_LAYER
density = TRUE
anchored = TRUE
- pass_flags = LETPASSTHROW //You can throw objects over this, despite it's density.
+ pass_flags_self = LETPASSTHROW //You can throw objects over this, despite it's density.
max_integrity = 20
attack_hand_speed = CLICK_CD_MELEE
attack_hand_is_action = TRUE
@@ -705,7 +704,7 @@
. = !density
if(istype(caller))
. = . || (caller.pass_flags & PASSTABLE)
-
+
/obj/structure/rack/MouseDrop_T(obj/O, mob/user)
. = ..()
if ((!( istype(O, /obj/item) ) || user.get_active_held_item() != O))
@@ -736,7 +735,7 @@
return
user.do_attack_animation(src, ATTACK_EFFECT_KICK)
user.visible_message("[user] kicks [src].", null, null, COMBAT_MESSAGE_RANGE)
- take_damage(rand(4,8), BRUTE, "melee", 1)
+ take_damage(rand(4,8), BRUTE, MELEE, 1)
/obj/structure/rack/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
switch(damage_type)
diff --git a/code/game/objects/structures/tank_dispenser.dm b/code/game/objects/structures/tank_dispenser.dm
index 00df078d0b..695dcef476 100644
--- a/code/game/objects/structures/tank_dispenser.dm
+++ b/code/game/objects/structures/tank_dispenser.dm
@@ -17,7 +17,7 @@
/obj/structure/tank_dispenser/plasma
oxygentanks = 0
-/obj/structure/tank_dispenser/Initialize()
+/obj/structure/tank_dispenser/Initialize(mapload)
. = ..()
for(var/i in 1 to oxygentanks)
new /obj/item/tank/internals/oxygen(src)
diff --git a/code/game/objects/structures/transit_tubes/transit_tube.dm b/code/game/objects/structures/transit_tubes/transit_tube.dm
index 7e3684ad32..c8341c8834 100644
--- a/code/game/objects/structures/transit_tubes/transit_tube.dm
+++ b/code/game/objects/structures/transit_tubes/transit_tube.dm
@@ -8,17 +8,13 @@
layer = LOW_ITEM_LAYER
anchored = TRUE
climbable = 1
+ pass_flags_self = PASSGLASS
var/tube_construction = /obj/structure/c_transit_tube
var/list/tube_dirs //list of directions this tube section can connect to.
var/exit_delay = 1
var/enter_delay = 0
var/const/time_to_unwrench = 2 SECONDS
-/obj/structure/transit_tube/CanPass(atom/movable/mover, turf/target)
- if(istype(mover) && (mover.pass_flags & PASSGLASS))
- return 1
- return !density
-
/obj/structure/transit_tube/New(loc, newdirection)
..(loc)
if(newdirection)
diff --git a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm
index 9f3a829633..0ae1aff68a 100644
--- a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm
+++ b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm
@@ -8,7 +8,7 @@
var/datum/gas_mixture/air_contents = new()
-/obj/structure/transit_tube_pod/Initialize()
+/obj/structure/transit_tube_pod/Initialize(mapload)
. = ..()
air_contents.set_moles(GAS_O2, MOLES_O2STANDARD)
air_contents.set_moles(GAS_N2, MOLES_N2STANDARD)
diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm
index e3ee7ddc63..e89e6e6116 100644
--- a/code/game/objects/structures/watercloset.dm
+++ b/code/game/objects/structures/watercloset.dm
@@ -16,7 +16,7 @@
attack_hand_speed = CLICK_CD_MELEE
attack_hand_is_action = TRUE
-/obj/structure/toilet/Initialize()
+/obj/structure/toilet/Initialize(mapload)
. = ..()
open = round(rand(0, 1))
update_icon()
@@ -138,7 +138,7 @@
/obj/structure/toilet/secret
var/secret_type = null
-/obj/structure/toilet/secret/Initialize()
+/obj/structure/toilet/secret/Initialize(mapload)
. = ..()
if (secret_type)
new secret_type(src)
@@ -255,7 +255,7 @@
var/watertemp = "normal" //freezing, normal, or boiling
var/datum/looping_sound/showering/soundloop
-/obj/machinery/shower/Initialize()
+/obj/machinery/shower/Initialize(mapload)
. = ..()
soundloop = new(src, FALSE)
diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm
index ef1ca6720a..4f1de6432a 100644
--- a/code/game/objects/structures/windoor_assembly.dm
+++ b/code/game/objects/structures/windoor_assembly.dm
@@ -50,11 +50,10 @@
/obj/structure/windoor_assembly/update_icon_state()
icon_state = "[facing]_[secure ? "secure_" : ""]windoor_assembly[state]"
-/obj/structure/windoor_assembly/CanPass(atom/movable/mover, turf/target)
- if(istype(mover) && (mover.pass_flags & PASSGLASS))
- return 1
+/obj/structure/windoor_assembly/CanAllowThrough(atom/movable/mover, turf/target)
+ . = ..()
if(get_dir(loc, target) == dir) //Make sure looking at appropriate border
- return !density
+ return
if(istype(mover, /obj/structure/window))
var/obj/structure/window/W = mover
if(!valid_window_location(loc, W.ini_dir))
@@ -65,7 +64,6 @@
return FALSE
else if(istype(mover, /obj/machinery/door/window) && !valid_window_location(loc, mover.dir))
return FALSE
- return 1
/obj/structure/windoor_assembly/CanAtmosPass(turf/T)
if(get_dir(loc, T) == dir)
@@ -73,13 +71,13 @@
else
return 1
-/obj/structure/windoor_assembly/CheckExit(atom/movable/mover as mob|obj, turf/target)
- if(istype(mover) && (mover.pass_flags & PASSGLASS))
- return 1
+/obj/structure/windoor_assembly/CheckExit(atom/movable/mover, turf/target)
+ if(mover.pass_flags & pass_flags_self)
+ return TRUE
if(get_dir(loc, target) == dir)
return !density
else
- return 1
+ return TRUE
/obj/structure/windoor_assembly/attackby(obj/item/W, mob/user, params)
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index e8e170446b..cf5e34fd8b 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -18,6 +18,7 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup)
pressure_resistance = 4*ONE_ATMOSPHERE
anchored = TRUE //initially is 0 for tile smoothing
max_integrity = 25
+ pass_flags_self = PASSGLASS
var/ini_dir = null
var/state = WINDOW_OUT_OF_FRAME
var/reinf = FALSE
@@ -31,7 +32,7 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup)
var/glass_amount = 1
can_be_unanchored = TRUE
resistance_flags = ACID_PROOF
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 100)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 100)
CanAtmosPass = ATMOS_PASS_PROC
var/real_explosion_block //ignore this, just use explosion_block
var/breaksound = "shatter"
@@ -159,13 +160,15 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup)
else
..(FULLTILE_WINDOW_DIR)
-/obj/structure/window/CanPass(atom/movable/mover, turf/target)
- if(istype(mover) && (mover.pass_flags & PASSGLASS))
- return 1
+/obj/structure/window/CanAllowThrough(atom/movable/mover, turf/target)
+ . = ..()
+ if(.)
+ return
if(dir == FULLTILE_WINDOW_DIR)
return 0 //full tile window, you can't move into it!
- if(get_dir(loc, target) == dir)
- return !density
+ var/attempted_dir = get_dir(loc, target)
+ if(attempted_dir == dir)
+ return
if(istype(mover, /obj/structure/window))
var/obj/structure/window/W = mover
if(!valid_window_location(loc, W.ini_dir))
@@ -176,7 +179,8 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup)
return FALSE
else if(istype(mover, /obj/machinery/door/window) && !valid_window_location(loc, mover.dir))
return FALSE
- return 1
+ else if(attempted_dir != dir)
+ return TRUE
/obj/structure/window/CheckExit(atom/movable/O, turf/target)
if(istype(O) && (O.pass_flags & PASSGLASS))
@@ -445,11 +449,6 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup)
/obj/structure/window/proc/check_state_and_anchored(checked_state, checked_anchored)
return check_state(checked_state) && check_anchored(checked_anchored)
-/obj/structure/window/mech_melee_attack(obj/mecha/M)
- if(!can_be_reached())
- return
- ..()
-
/obj/structure/window/proc/can_be_reached(mob/user)
if(!fulltile)
if(get_dir(user,src) & dir)
@@ -600,7 +599,7 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup)
icon_state = "rwindow"
reinf = TRUE
heat_resistance = 1600
- armor = list("melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 25, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 100)
+ armor = list(MELEE = 50, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 25, BIO = 100, RAD = 100, FIRE = 80, ACID = 100)
max_integrity = 50
explosion_block = 1
wave_explosion_block = EXPLOSION_BLOCK_REINFORCED_WINDOW
@@ -627,7 +626,7 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup)
icon_state = "plasmawindow"
reinf = FALSE
heat_resistance = 25000
- armor = list("melee" = 75, "bullet" = 5, "laser" = 0, "energy" = 0, "bomb" = 45, "bio" = 100, "rad" = 100, "fire" = 99, "acid" = 100)
+ armor = list(MELEE = 75, BULLET = 5, LASER = 0, ENERGY = 0, BOMB = 45, BIO = 100, RAD = 100, FIRE = 99, ACID = 100)
max_integrity = 150
explosion_block = 1
wave_explosion_block = EXPLOSION_BLOCK_BOROSILICATE_WINDOW
@@ -655,7 +654,7 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup)
reinf = TRUE
extra_reinforced = TRUE
heat_resistance = 50000
- armor = list("melee" = 85, "bullet" = 20, "laser" = 0, "energy" = 0, "bomb" = 60, "bio" = 100, "rad" = 100, "fire" = 99, "acid" = 100)
+ armor = list(MELEE = 85, BULLET = 20, LASER = 0, ENERGY = 0, BOMB = 60, BIO = 100, RAD = 100, FIRE = 99, ACID = 100)
max_integrity = 500
explosion_block = 2
wave_explosion_block = EXPLOSION_BLOCK_EXTREME
@@ -774,7 +773,7 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup)
flags_1 = PREVENT_CLICK_UNDER_1
reinf = TRUE
heat_resistance = 1600
- armor = list("melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 100)
+ armor = list(MELEE = 50, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 50, BIO = 100, RAD = 100, FIRE = 80, ACID = 100)
smooth = SMOOTH_TRUE
canSmoothWith = null
explosion_block = 3
@@ -805,7 +804,7 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup)
reinf = TRUE
extra_reinforced = TRUE
heat_resistance = 1600
- armor = list("melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 100)
+ armor = list(MELEE = 50, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 50, BIO = 100, RAD = 100, FIRE = 80, ACID = 100)
smooth = SMOOTH_TRUE
canSmoothWith = null
explosion_block = 3
@@ -831,7 +830,7 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup)
icon_state = "clockwork_window_single"
resistance_flags = FIRE_PROOF | ACID_PROOF
max_integrity = 80
- armor = list("melee" = 60, "bullet" = 25, "laser" = 0, "energy" = 0, "bomb" = 25, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 100)
+ armor = list(MELEE = 60, BULLET = 25, LASER = 0, ENERGY = 0, BOMB = 25, BIO = 100, RAD = 100, FIRE = 80, ACID = 100)
explosion_block = 2 //fancy AND hard to destroy. the most useful combination.
wave_explosion_block = EXPLOSION_BLOCK_BOROSILICATE_WINDOW
wave_explosion_multiply = EXPLOSION_DAMPEN_BOROSILICATE_WINDOW
@@ -917,13 +916,13 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup)
decon_speed = 10
CanAtmosPass = ATMOS_PASS_YES
resistance_flags = FLAMMABLE
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0)
breaksound = 'sound/items/poster_ripped.ogg'
hitsound = 'sound/weapons/slashmiss.ogg'
var/static/mutable_appearance/torn = mutable_appearance('icons/obj/smooth_structures/paperframes.dmi',icon_state = "torn", layer = ABOVE_OBJ_LAYER - 0.1)
var/static/mutable_appearance/paper = mutable_appearance('icons/obj/smooth_structures/paperframes.dmi',icon_state = "paper", layer = ABOVE_OBJ_LAYER - 0.1)
-/obj/structure/window/paperframe/Initialize()
+/obj/structure/window/paperframe/Initialize(mapload)
. = ..()
update_icon()
@@ -938,7 +937,7 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup)
user.visible_message("[user] knocks on [src].")
playsound(src, "pageturn", 50, 1)
else
- take_damage(4,BRUTE,"melee", 0)
+ take_damage(4,BRUTE,MELEE, 0)
playsound(src, hitsound, 50, 1)
if(!QDELETED(src))
user.visible_message("[user] tears a hole in [src].")
diff --git a/code/game/shuttle_engines.dm b/code/game/shuttle_engines.dm
index e5d58c3e1b..b0f06a1495 100644
--- a/code/game/shuttle_engines.dm
+++ b/code/game/shuttle_engines.dm
@@ -8,7 +8,7 @@
icon = 'icons/turf/shuttle.dmi'
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
max_integrity = 500
- armor = list("melee" = 100, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 70) //default + ignores melee
+ armor = list(MELEE = 100, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 70) //default + ignores melee
/obj/structure/shuttle/engine
name = "engine"
diff --git a/code/game/sound.dm b/code/game/sound.dm
index 3a65d47f3f..edc3019f27 100644
--- a/code/game/sound.dm
+++ b/code/game/sound.dm
@@ -173,7 +173,7 @@ distance_multiplier - Can be used to multiply the distance at which the sound is
var/dz = turf_source.y - T.y // Hearing from infront/behind
S.z = dz * distance_multiplier
var/dy = (turf_source.z - T.z) * 5 * distance_multiplier // Hearing from above / below, multiplied by 5 because we assume height is further along coords.
- S.y = dy
+ S.y = dy + 1
S.falloff = isnull(max_distance)? FALLOFF_SOUNDS : max_distance //use max_distance, else just use 1 as we are a direct sound so falloff isnt relevant.
diff --git a/code/game/turfs/baseturf_skipover.dm b/code/game/turfs/baseturf_skipover.dm
index 4df8c86e62..9bef78a15e 100644
--- a/code/game/turfs/baseturf_skipover.dm
+++ b/code/game/turfs/baseturf_skipover.dm
@@ -3,7 +3,7 @@
name = "Baseturf skipover placeholder"
desc = "This shouldn't exist"
-/turf/baseturf_skipover/Initialize()
+/turf/baseturf_skipover/Initialize(mapload)
. = ..()
stack_trace("[src]([type]) was instanced which should never happen. Changing into the next baseturf down...")
ScrapeAway()
diff --git a/code/game/turfs/closed.dm b/code/game/turfs/closed.dm
index ccfb5dc238..e57b0c9806 100644
--- a/code/game/turfs/closed.dm
+++ b/code/game/turfs/closed.dm
@@ -6,6 +6,7 @@
blocks_air = 1
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
rad_insulation = RAD_MEDIUM_INSULATION
+ pass_flags_self = PASSCLOSEDTURF
wave_explosion_block = 10
wave_explosion_multiply = 0.75
/// How much we block yelling
@@ -13,7 +14,7 @@
/// how much of inbound yelling to dampen
var/yelling_dampen = 0.5
-/turf/closed/Initialize()
+/turf/closed/Initialize(mapload)
. = ..()
/turf/closed/AfterChange()
@@ -23,11 +24,6 @@
/turf/closed/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir)
return FALSE
-/turf/closed/CanPass(atom/movable/mover, turf/target)
- if(istype(mover) && (mover.pass_flags & PASSCLOSEDTURF))
- return TRUE
- return ..()
-
/turf/closed/indestructible
name = "wall"
icon = 'icons/turf/walls.dmi'
@@ -123,7 +119,7 @@
smooth = SMOOTH_TRUE
icon = 'icons/obj/smooth_structures/reinforced_window.dmi'
-/turf/closed/indestructible/fakeglass/Initialize()
+/turf/closed/indestructible/fakeglass/Initialize(mapload)
. = ..()
icon_state = null //set the icon state to null, so our base state isn't visible
underlays += mutable_appearance('icons/obj/structures.dmi', "grille") //add a grille underlay
diff --git a/code/game/turfs/open.dm b/code/game/turfs/open.dm
index b526b5b886..aa5e02819c 100644
--- a/code/game/turfs/open.dm
+++ b/code/game/turfs/open.dm
@@ -124,7 +124,7 @@
heavyfootstep = FOOTSTEP_LAVA
tiled_dirt = FALSE
-/turf/open/indestructible/necropolis/Initialize()
+/turf/open/indestructible/necropolis/Initialize(mapload)
. = ..()
if(prob(12))
icon_state = "necro[rand(2,3)]"
diff --git a/code/game/turfs/open/floor/catwalk_plating.dm b/code/game/turfs/open/floor/catwalk_plating.dm
index cbcbade5d4..76d22847c9 100644
--- a/code/game/turfs/open/floor/catwalk_plating.dm
+++ b/code/game/turfs/open/floor/catwalk_plating.dm
@@ -18,7 +18,7 @@
heavyfootstep = FOOTSTEP_CATWALK
var/covered = TRUE
-/turf/open/floor/plating/catwalk_floor/Initialize()
+/turf/open/floor/plating/catwalk_floor/Initialize(mapload)
. = ..()
layer = CATWALK_LAYER
update_icon(UPDATE_OVERLAYS)
diff --git a/code/game/turfs/openspace/transparent.dm b/code/game/turfs/openspace/transparent.dm
index 570f153d41..b9ab562643 100644
--- a/code/game/turfs/openspace/transparent.dm
+++ b/code/game/turfs/openspace/transparent.dm
@@ -2,7 +2,7 @@
baseturfs = /turf/open/transparent/openspace
intact = FALSE //this means wires go on top
-/turf/open/transparent/Initialize() // handle plane and layer here so that they don't cover other obs/turfs in Dream Maker
+/turf/open/transparent/Initialize(mapload) // handle plane and layer here so that they don't cover other obs/turfs in Dream Maker
. = ..()
plane = OPENSPACE_PLANE
layer = OPENSPACE_LAYER
@@ -59,7 +59,7 @@
clawfootstep = FOOTSTEP_HARD_CLAW
heavyfootstep = FOOTSTEP_GENERIC_HEAVY
-/turf/open/transparent/glass/Initialize()
+/turf/open/transparent/glass/Initialize(mapload)
icon_state = "" //Prevent the normal icon from appearing behind the smooth overlays
..()
return INITIALIZE_HINT_LATELOAD
diff --git a/code/game/turfs/simulated/chasm.dm b/code/game/turfs/simulated/chasm.dm
index 9490d728fe..58c69d2299 100644
--- a/code/game/turfs/simulated/chasm.dm
+++ b/code/game/turfs/simulated/chasm.dm
@@ -11,7 +11,7 @@
bullet_bounce_sound = null //abandon all hope ye who enter
dirt_buildup_allowed = FALSE
-/turf/open/chasm/Initialize()
+/turf/open/chasm/Initialize(mapload)
. = ..()
AddComponent(/datum/component/chasm, SSmapping.get_turf_below(src))
@@ -77,9 +77,6 @@
else
to_chat(user, "The plating is going to need some support! Place metal rods first.")
-/turf/open/chasm/CanPass(atom/movable/mover, turf/target)
- return 1
-
// Chasms for Lavaland, with planetary atmos and lava glow
/turf/open/chasm/lavaland
initial_gas_mix = LAVALAND_DEFAULT_ATMOS
@@ -121,7 +118,7 @@
light_range = 1.9
light_power = 0.65
-/turf/open/chasm/magic/Initialize()
+/turf/open/chasm/magic/Initialize(mapload)
. = ..()
var/turf/T = safepick(get_area_turfs(/area/fabric_of_reality))
if(T)
diff --git a/code/game/turfs/simulated/floor/fancy_floor.dm b/code/game/turfs/simulated/floor/fancy_floor.dm
index f707037771..a7d3cda389 100644
--- a/code/game/turfs/simulated/floor/fancy_floor.dm
+++ b/code/game/turfs/simulated/floor/fancy_floor.dm
@@ -108,7 +108,7 @@
var/turfverb = "uproot"
tiled_dirt = FALSE
-/turf/open/floor/grass/Initialize()
+/turf/open/floor/grass/Initialize(mapload)
. = ..()
update_icon()
@@ -203,7 +203,7 @@
initial_gas_mix = LAVALAND_DEFAULT_ATMOS
slowdown = 0
-/turf/open/floor/grass/snow/basalt/Initialize()
+/turf/open/floor/grass/snow/basalt/Initialize(mapload)
. = ..()
if(prob(15))
icon_state = "basalt[rand(0, 12)]"
@@ -224,7 +224,7 @@
clawfootstep = FOOTSTEP_SAND
heavyfootstep = FOOTSTEP_GENERIC_HEAVY
-/turf/open/floor/grass/fakebasalt/Initialize()
+/turf/open/floor/grass/fakebasalt/Initialize(mapload)
. = ..()
if(prob(15))
icon_state = "basalt[rand(0, 12)]"
@@ -252,7 +252,7 @@
. = ..()
. += "There's a small crack on the edge of it."
-/turf/open/floor/carpet/Initialize()
+/turf/open/floor/carpet/Initialize(mapload)
. = ..()
update_icon()
@@ -413,7 +413,7 @@
plane = PLANE_SPACE
tiled_dirt = FALSE
-/turf/open/floor/fakespace/Initialize()
+/turf/open/floor/fakespace/Initialize(mapload)
. = ..()
icon_state = SPACE_ICON_STATE
diff --git a/code/game/turfs/simulated/floor/light_floor.dm b/code/game/turfs/simulated/floor/light_floor.dm
index 4bca25f96c..55c1a45ff4 100644
--- a/code/game/turfs/simulated/floor/light_floor.dm
+++ b/code/game/turfs/simulated/floor/light_floor.dm
@@ -17,7 +17,7 @@
. = ..()
. += "There's a small crack on the edge of it."
-/turf/open/floor/light/Initialize()
+/turf/open/floor/light/Initialize(mapload)
. = ..()
update_icon()
diff --git a/code/game/turfs/simulated/floor/mineral_floor.dm b/code/game/turfs/simulated/floor/mineral_floor.dm
index fe6ed2da9b..b7266bfb16 100644
--- a/code/game/turfs/simulated/floor/mineral_floor.dm
+++ b/code/game/turfs/simulated/floor/mineral_floor.dm
@@ -16,7 +16,7 @@
tiled_dirt = FALSE
-/turf/open/floor/mineral/Initialize()
+/turf/open/floor/mineral/Initialize(mapload)
if(!broken_states)
broken_states = list("[initial(icon_state)]_dam")
. = ..()
@@ -237,7 +237,7 @@
icons = list("alienpod1", "alienpod2", "alienpod3", "alienpod4", "alienpod5", "alienpod6", "alienpod7", "alienpod8", "alienpod9")
baseturfs = /turf/open/floor/plating/abductor2
-/turf/open/floor/mineral/abductor/Initialize()
+/turf/open/floor/mineral/abductor/Initialize(mapload)
. = ..()
icon_state = "alienpod[rand(1,9)]"
diff --git a/code/game/turfs/simulated/floor/misc_floor.dm b/code/game/turfs/simulated/floor/misc_floor.dm
index 11f2918bcf..f041d657ec 100644
--- a/code/game/turfs/simulated/floor/misc_floor.dm
+++ b/code/game/turfs/simulated/floor/misc_floor.dm
@@ -18,7 +18,7 @@
floor_tile = /obj/item/stack/tile/circuit
var/on = TRUE
-/turf/open/floor/circuit/Initialize()
+/turf/open/floor/circuit/Initialize(mapload)
SSmapping.nuke_tiles += src
update_icon()
. = ..()
@@ -151,7 +151,7 @@
/turf/open/floor/clockwork/Bless() //Who needs holy blessings when you have DADDY RATVAR?
return
-/turf/open/floor/clockwork/Initialize()
+/turf/open/floor/clockwork/Initialize(mapload)
. = ..()
if(uses_overlay)
new /obj/effect/temp_visual/ratvar/floor(src)
diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm
index b23ce17c72..1683163df0 100644
--- a/code/game/turfs/simulated/floor/plating.dm
+++ b/code/game/turfs/simulated/floor/plating.dm
@@ -29,7 +29,7 @@
else
. += "You might be able to build ontop of it with some tiles..."
-/turf/open/floor/plating/Initialize()
+/turf/open/floor/plating/Initialize(mapload)
if (!broken_states)
broken_states = list("platingdmg1", "platingdmg2", "platingdmg3")
if (!burnt_states)
diff --git a/code/game/turfs/simulated/floor/plating/asteroid.dm b/code/game/turfs/simulated/floor/plating/asteroid.dm
index 2770d12454..32c1f0d42b 100644
--- a/code/game/turfs/simulated/floor/plating/asteroid.dm
+++ b/code/game/turfs/simulated/floor/plating/asteroid.dm
@@ -29,7 +29,7 @@
// /turf/open/floor/plating/asteroid/setup_broken_states()
// return list("asteroid_dug")
-/turf/open/floor/plating/asteroid/Initialize()
+/turf/open/floor/plating/asteroid/Initialize(mapload)
var/proper_name = name
. = ..()
name = proper_name
@@ -116,7 +116,7 @@
baseturfs = /turf/open/floor/plating/asteroid/airless
initial_gas_mix = AIRLESS_ATMOS
-/turf/open/floor/plating/asteroid/basalt/Initialize()
+/turf/open/floor/plating/asteroid/basalt/Initialize(mapload)
. = ..()
set_basalt_light(src)
diff --git a/code/game/turfs/simulated/floor/plating/misc_plating.dm b/code/game/turfs/simulated/floor/plating/misc_plating.dm
index e49b6b78d3..a4000ea486 100644
--- a/code/game/turfs/simulated/floor/plating/misc_plating.dm
+++ b/code/game/turfs/simulated/floor/plating/misc_plating.dm
@@ -12,7 +12,7 @@
icon_state = "alienpod1"
tiled_dirt = FALSE
-/turf/open/floor/plating/abductor/Initialize()
+/turf/open/floor/plating/abductor/Initialize(mapload)
. = ..()
icon_state = "alienpod[rand(1,9)]"
@@ -56,7 +56,7 @@
heavyfootstep = FOOTSTEP_GENERIC_HEAVY
tiled_dirt = FALSE
-/turf/open/floor/plating/ashplanet/Initialize()
+/turf/open/floor/plating/ashplanet/Initialize(mapload)
if(smooth)
var/matrix/M = new
M.Translate(-4, -4)
@@ -101,7 +101,7 @@
clawfootstep = FOOTSTEP_HARD_CLAW
heavyfootstep = FOOTSTEP_GENERIC_HEAVY
-/turf/open/floor/plating/ashplanet/wateryrock/Initialize()
+/turf/open/floor/plating/ashplanet/wateryrock/Initialize(mapload)
icon_state = "[icon_state][rand(1, 9)]"
. = ..()
@@ -161,7 +161,7 @@
clawfootstep = FOOTSTEP_SAND
heavyfootstep = FOOTSTEP_GENERIC_HEAVY
-/turf/open/floor/plating/ironsand/Initialize()
+/turf/open/floor/plating/ironsand/Initialize(mapload)
. = ..()
icon_state = "ironsand[rand(1,15)]"
@@ -188,7 +188,7 @@
clawfootstep = FOOTSTEP_HARD_CLAW
heavyfootstep = FOOTSTEP_GENERIC_HEAVY
-/turf/open/floor/plating/ice/Initialize()
+/turf/open/floor/plating/ice/Initialize(mapload)
. = ..()
MakeSlippery(TURF_WET_PERMAFROST, INFINITY, 0, INFINITY, TRUE)
diff --git a/code/game/turfs/simulated/floor/reinf_floor.dm b/code/game/turfs/simulated/floor/reinf_floor.dm
index 32eda3bdb7..93ced4b3d5 100644
--- a/code/game/turfs/simulated/floor/reinf_floor.dm
+++ b/code/game/turfs/simulated/floor/reinf_floor.dm
@@ -133,7 +133,7 @@
var/obj/effect/clockwork/overlay/floor/bloodcult/realappearance
-/turf/open/floor/engine/cult/Initialize()
+/turf/open/floor/engine/cult/Initialize(mapload)
. = ..()
new /obj/effect/temp_visual/cult/turf/floor(src)
realappearance = new /obj/effect/clockwork/overlay/floor/bloodcult(src)
diff --git a/code/game/turfs/simulated/glass.dm b/code/game/turfs/simulated/glass.dm
index f02ca19548..58acc696fa 100644
--- a/code/game/turfs/simulated/glass.dm
+++ b/code/game/turfs/simulated/glass.dm
@@ -17,7 +17,7 @@
// return list("glass-damaged1", "glass-damaged2", "glass-damaged3")
-/turf/open/floor/glass/Initialize()
+/turf/open/floor/glass/Initialize(mapload)
icon_state = "" //Prevent the normal icon from appearing behind the smooth overlays
..()
return INITIALIZE_HINT_LATELOAD
diff --git a/code/game/turfs/simulated/minerals.dm b/code/game/turfs/simulated/minerals.dm
index 48e7fa8f8a..0c5455b8b7 100644
--- a/code/game/turfs/simulated/minerals.dm
+++ b/code/game/turfs/simulated/minerals.dm
@@ -27,7 +27,7 @@
// If true you can mine the mineral turf with your hands
var/weak_turf = FALSE
-/turf/closed/mineral/Initialize()
+/turf/closed/mineral/Initialize(mapload)
if (!canSmoothWith)
canSmoothWith = list(/turf/closed/mineral, /turf/closed/indestructible)
. = ..()
@@ -191,7 +191,7 @@
//Currently, Adamantine won't spawn as it has no uses. -Durandan
var/mineralChance = 13
-/turf/closed/mineral/random/Initialize()
+/turf/closed/mineral/random/Initialize(mapload)
mineralSpawnChanceList = typelist("mineralSpawnChanceList", mineralSpawnChanceList)
@@ -512,7 +512,7 @@
var/activated_name = null
var/mutable_appearance/activated_overlay
-/turf/closed/mineral/gibtonite/Initialize()
+/turf/closed/mineral/gibtonite/Initialize(mapload)
det_time = rand(8,10) //So you don't know exactly when the hot potato will explode
. = ..()
diff --git a/code/game/turfs/simulated/openspace.dm b/code/game/turfs/simulated/openspace.dm
index a856ed75b5..935bfdc1a7 100644
--- a/code/game/turfs/simulated/openspace.dm
+++ b/code/game/turfs/simulated/openspace.dm
@@ -36,7 +36,7 @@ GLOBAL_DATUM_INIT(openspace_backdrop_one_for_all, /atom/movable/openspace_backdr
// /turf/open/transparent/openspace/show_bottom_level()
// return FALSE
-/turf/open/openspace/Initialize() // handle plane and layer here so that they don't cover other obs/turfs in Dream Maker
+/turf/open/openspace/Initialize(mapload) // handle plane and layer here so that they don't cover other obs/turfs in Dream Maker
. = ..()
vis_contents += GLOB.openspace_backdrop_one_for_all //Special grey square for projecting backdrop darkness filter on it.
return INITIALIZE_HINT_LATELOAD
@@ -165,7 +165,7 @@ GLOBAL_DATUM_INIT(openspace_backdrop_one_for_all, /atom/movable/openspace_backdr
/// If true mineral turfs below this openspace turf will be mined automatically
var/drill_below = TRUE
-/turf/open/openspace/icemoon/Initialize()
+/turf/open/openspace/icemoon/Initialize(mapload)
. = ..()
var/turf/T = below()
if(T.flags_1 & NO_RUINS_1 && protect_ruin)
diff --git a/code/game/turfs/simulated/wall/misc_walls.dm b/code/game/turfs/simulated/wall/misc_walls.dm
index e4d991a082..a8d1cf2ed4 100644
--- a/code/game/turfs/simulated/wall/misc_walls.dm
+++ b/code/game/turfs/simulated/wall/misc_walls.dm
@@ -10,7 +10,7 @@
explosion_block = 10
girder_type = /obj/structure/girder/cult
-/turf/closed/wall/mineral/cult/Initialize()
+/turf/closed/wall/mineral/cult/Initialize(mapload)
new /obj/effect/temp_visual/cult/turf(src)
. = ..()
@@ -60,7 +60,7 @@
var/heated
var/obj/effect/clockwork/overlay/wall/realappearance
-/turf/closed/wall/clockwork/Initialize()
+/turf/closed/wall/clockwork/Initialize(mapload)
. = ..()
new /obj/effect/temp_visual/ratvar/wall(src)
new /obj/effect/temp_visual/ratvar/beam(src)
@@ -145,10 +145,11 @@
user.adjustFireLoss(5)
playsound(src, 'sound/machines/fryer/deep_fryer_emerge.ogg', 50, TRUE)
-/turf/closed/wall/clockwork/mech_melee_attack(obj/mecha/M)
+/turf/closed/wall/clockwork/mech_melee_attack(obj/vehicle/sealed/mecha/M)
..()
if(heated)
- to_chat(M.occupant, "The wall's intense heat completely reflects your [M.name]'s attack!")
+ for(var/mob/living/MB in M.occupants)
+ to_chat(MB, "The wall's intense heat completely reflects your [M.name]'s attack!")
M.take_damage(20, BURN)
/turf/closed/wall/clockwork/proc/turn_up_the_heat()
diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm
index 6303b33afa..cac03b0637 100644
--- a/code/game/turfs/simulated/walls.dm
+++ b/code/game/turfs/simulated/walls.dm
@@ -115,23 +115,6 @@
else
add_dent(WALL_DENT_HIT)
-/turf/closed/wall/mech_melee_attack(obj/mecha/M)
- M.do_attack_animation(src)
- switch(M.damtype)
- if(BRUTE)
- playsound(src, 'sound/weapons/punch4.ogg', 50, 1)
- visible_message("[M.name] has hit [src]!", null, null, COMBAT_MESSAGE_RANGE)
- if(prob(hardness + M.force) && M.force > 20)
- dismantle_wall(1)
- playsound(src, 'sound/effects/meteorimpact.ogg', 100, 1)
- else
- add_dent(WALL_DENT_HIT)
- if(BURN)
- playsound(src, 'sound/items/welder.ogg', 100, 1)
- if(TOX)
- playsound(src, 'sound/effects/spray2.ogg', 100, 1)
- return FALSE
-
/turf/closed/wall/attack_paw(mob/living/user)
return attack_hand(user)
diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm
index 3ed3891fdf..2df1606cb9 100644
--- a/code/game/turfs/space/space.dm
+++ b/code/game/turfs/space/space.dm
@@ -33,7 +33,7 @@
*
* Doesn't call parent, see [/atom/proc/Initialize]
*/
-/turf/open/space/Initialize()
+/turf/open/space/Initialize(mapload)
SHOULD_CALL_PARENT(FALSE)
icon_state = SPACE_ICON_STATE
if(!space_gas)
@@ -283,7 +283,7 @@
baseturfs = /turf/open/space/transparent/openspace
intact = FALSE //this means wires go on top
-/turf/open/space/transparent/Initialize() // handle plane and layer here so that they don't cover other obs/turfs in Dream Maker
+/turf/open/space/transparent/Initialize(mapload) // handle plane and layer here so that they don't cover other obs/turfs in Dream Maker
..()
plane = OPENSPACE_PLANE
layer = OPENSPACE_LAYER
@@ -339,7 +339,7 @@
/turf/open/space/transparent/openspace/show_bottom_level()
return FALSE
-/turf/open/space/transparent/openspace/Initialize() // handle plane and layer here so that they don't cover other obs/turfs in Dream Maker
+/turf/open/space/transparent/openspace/Initialize(mapload) // handle plane and layer here so that they don't cover other obs/turfs in Dream Maker
. = ..()
icon_state = "transparent"
diff --git a/code/game/turfs/space/transit.dm b/code/game/turfs/space/transit.dm
index 08da6fa84f..ed3b20fce4 100644
--- a/code/game/turfs/space/transit.dm
+++ b/code/game/turfs/space/transit.dm
@@ -101,7 +101,7 @@
return SSshuttle.is_in_shuttle_bounds(src)
-/turf/open/space/transit/Initialize()
+/turf/open/space/transit/Initialize(mapload)
. = ..()
update_icon()
for(var/atom/movable/AM in src)
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index 419378acb9..dc44ac728f 100755
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -225,16 +225,6 @@ GLOBAL_LIST_EMPTY(station_turfs)
return FALSE
-/turf/CanPass(atom/movable/mover, turf/target)
- if(!target)
- return FALSE
-
- if(istype(mover)) // turf/Enter(...) will perform more advanced checks
- return !density
-
- stack_trace("Non movable passed to turf CanPass : [mover]")
- return FALSE
-
//There's a lot of QDELETED() calls here if someone can figure out how to optimize this but not runtime when something gets deleted by a Bump/CanPass/Cross call, lemme know or go ahead and fix this mess - kevinz000
/turf/Enter(atom/movable/mover, atom/oldloc)
// Do not call ..()
@@ -243,7 +233,7 @@ GLOBAL_LIST_EMPTY(station_turfs)
// Here's hoping it doesn't stay like this for years before we finish conversion to step_
var/atom/firstbump
var/canPassSelf = CanPass(mover, src)
- if(canPassSelf || (mover.movement_type & UNSTOPPABLE))
+ if(canPassSelf || (mover.movement_type & PHASING))
for(var/i in contents)
if(QDELETED(mover))
return FALSE //We were deleted, do not attempt to proceed with movement.
@@ -253,7 +243,7 @@ GLOBAL_LIST_EMPTY(station_turfs)
if(!thing.Cross(mover))
if(QDELETED(mover)) //Mover deleted from Cross/CanPass, do not proceed.
return FALSE
- if((mover.movement_type & UNSTOPPABLE))
+ if((mover.movement_type & PHASING))
mover.Bump(thing)
continue
else
@@ -265,7 +255,7 @@ GLOBAL_LIST_EMPTY(station_turfs)
firstbump = src
if(firstbump)
mover.Bump(firstbump)
- return (mover.movement_type & UNSTOPPABLE)
+ return (mover.movement_type & PHASING)
return TRUE
/turf/Exit(atom/movable/mover, atom/newloc)
@@ -279,7 +269,7 @@ GLOBAL_LIST_EMPTY(station_turfs)
if(!thing.Uncross(mover, newloc))
if(thing.flags_1 & ON_BORDER_1)
mover.Bump(thing)
- if(!(mover.movement_type & UNSTOPPABLE))
+ if(!(mover.movement_type & PHASING))
return FALSE
if(QDELETED(mover))
return FALSE //We were deleted.
@@ -379,8 +369,8 @@ GLOBAL_LIST_EMPTY(station_turfs)
continue//Will not harm U. Since null != M, can be excluded to kill everyone.
M.adjustBruteLoss(damage)
M.Unconscious(damage * 4)
- for(var/obj/mecha/M in src)
- M.take_damage(damage*2, BRUTE, "melee", 1)
+ for(var/obj/vehicle/sealed/mecha/M in src)
+ M.take_damage(damage*2, BRUTE, MELEE, 1)
/turf/proc/Bless()
new /obj/effect/blessing(src)
@@ -398,7 +388,7 @@ GLOBAL_LIST_EMPTY(station_turfs)
var/datum/progressbar/progress = new(user, things.len, src)
while (do_after(usr, 1 SECONDS, TRUE, src, FALSE, CALLBACK(src_object, /datum/component/storage.proc/mass_remove_from_storage, src, things, progress, TRUE, user)))
stoplag(1)
- qdel(progress)
+ progress.end_progress()
return TRUE
@@ -621,11 +611,6 @@ GLOBAL_LIST_EMPTY(station_turfs)
/turf/proc/Melt()
return ScrapeAway(flags = CHANGETURF_INHERIT_AIR)
-/turf/bullet_act(obj/item/projectile/P)
- . = ..()
- if(. != BULLET_ACT_FORCE_PIERCE)
- . = BULLET_ACT_TURF
-
/turf/proc/get_yelling_resistance(power)
. = 0
// don't bother checking fulltile, we don't need accuracy
diff --git a/code/game/world.dm b/code/game/world.dm
index 75f145b048..092422e822 100644
--- a/code/game/world.dm
+++ b/code/game/world.dm
@@ -112,6 +112,7 @@ GLOBAL_LIST(topic_status_cache)
GLOB.world_game_log = "[GLOB.log_directory]/game.log"
GLOB.world_suspicious_login_log = "[GLOB.log_directory]/suspicious_logins.log"
+ GLOB.world_mecha_log = "[GLOB.log_directory]/mecha.log"
GLOB.world_virus_log = "[GLOB.log_directory]/virus.log"
GLOB.world_asset_log = "[GLOB.log_directory]/asset.log"
GLOB.world_attack_log = "[GLOB.log_directory]/attack.log"
@@ -284,63 +285,47 @@ GLOBAL_LIST(topic_status_cache)
..()
/world/proc/update_status()
+ . = ""
+ if(!config)
+ status = "SERVER LOADING OR BROKEN. (18+)"
+ return
- var/list/features = list()
+ game_state = (CONFIG_GET(number/extreme_popcap) && GLOB.clients.len >= CONFIG_GET(number/extreme_popcap))
- // if(GLOB.master_mode)
- // features += GLOB.master_mode
+ // ---Hub title---
+ var/servername = CONFIG_GET(string/servername)
+ var/stationname = station_name()
+ var/defaultstation = CONFIG_GET(string/stationname)
+ if(servername || stationname != defaultstation)
+ . += (servername ? "[servername]" : "")
+ . += (stationname != defaultstation ? "[servername ? " - " : ""][stationname]\] " : "\] ")
- // if (!GLOB.enter_allowed)
- // features += "closed"
+ var/communityname = CONFIG_GET(string/communityshortname)
+ var/communitylink = CONFIG_GET(string/communitylink)
+ if(communityname)
+ . += (communitylink ? "([communityname]) " : "([communityname]) ")
- var/s = ""
- var/hostedby
- if(config)
- var/server_name = CONFIG_GET(string/servername)
- if (server_name)
- s += "[server_name] — "
- // features += "[CONFIG_GET(flag/norespawn) ? "no " : ""]respawn"
- // if(CONFIG_GET(flag/allow_vote_mode))
- // features += "vote"
- // if(CONFIG_GET(flag/allow_ai))
- // features += "AI allowed"
- hostedby = CONFIG_GET(string/hostedby)
-
- s += "[station_name()]";
- s += " ("
- s += "" //Change this to wherever you want the hub to link to.
- s += "Citadel" //Replace this with something else. Or ever better, delete it and uncomment the game version.
- s += ""
- s += ")\]" //CIT CHANGE - encloses the server title in brackets to make the hub entry fancier
- s += "
[CONFIG_GET(string/servertagline)]
" //CIT CHANGE - adds a tagline!
-
- var/players = GLOB.clients.len
-
- if(SSmapping.config) // this just stops the runtime, honk.
- features += "[SSmapping.config.map_name]" //CIT CHANGE - makes the hub entry display the current map
-
- if(NUM2SECLEVEL(GLOB.security_level))//CIT CHANGE - makes the hub entry show the security level
- features += "[NUM2SECLEVEL(GLOB.security_level)] alert"
-
- var/popcaptext = ""
var/popcap = max(CONFIG_GET(number/extreme_popcap), CONFIG_GET(number/hard_popcap), CONFIG_GET(number/soft_popcap))
- if (popcap)
- popcaptext = "/[popcap]"
+ if(popcap)
+ . += "([GLOB.clients.len]/[popcap]) "
- if (players > 1)
- features += "[players][popcaptext] players"
- else if (players > 0)
- features += "[players][popcaptext] player"
+ . += "(18+)
" //This is obligatory forr obvious reasons.
- game_state = (CONFIG_GET(number/extreme_popcap) && players >= CONFIG_GET(number/extreme_popcap)) //tells the hub if we are full
+ // ---Hub body---
+ var/tagline = (CONFIG_GET(flag/usetaglinestrings) ? pick(GLOB.server_taglines) : CONFIG_GET(string/servertagline))
+ if(tagline)
+ . += "[tagline]
"
- if (!host && hostedby)
- features += "hosted by [hostedby]"
+ // ---Hub footer---
+ . += "\["
+ if(SSmapping.config)
+ . += "[SSmapping.config.map_name], "
+ if(NUM2SECLEVEL(GLOB.security_level))
+ . += "[NUM2SECLEVEL(GLOB.security_level)] alert, "
+
+ . += "[get_active_player_count(afk_check = TRUE)] playing"
- if (features)
- s += "\[[jointext(features, ", ")]"
-
- status = s
+ status = .
/world/proc/update_hub_visibility(new_visibility)
if(new_visibility == GLOB.hub_visibility)
diff --git a/code/modules/NTNet/relays.dm b/code/modules/NTNet/relays.dm
index 8c33dd1eba..9a39b80356 100644
--- a/code/modules/NTNet/relays.dm
+++ b/code/modules/NTNet/relays.dm
@@ -92,7 +92,7 @@
update_icon()
return TRUE
-/obj/machinery/ntnet_relay/Initialize()
+/obj/machinery/ntnet_relay/Initialize(mapload)
uid = gl_uid++
component_parts = list()
diff --git a/code/modules/VR/vr_sleeper.dm b/code/modules/VR/vr_sleeper.dm
index a5e31e595c..5b667c5fd5 100644
--- a/code/modules/VR/vr_sleeper.dm
+++ b/code/modules/VR/vr_sleeper.dm
@@ -16,7 +16,7 @@
var/allow_creating_vr_mobs = TRUE //So you can have vr_sleepers that always spawn you as a specific person or 1 life/chance vr games
var/only_current_user_can_interact = FALSE
-/obj/machinery/vr_sleeper/Initialize()
+/obj/machinery/vr_sleeper/Initialize(mapload)
. = ..()
sparks = new /datum/effect_system/spark_spread()
sparks.set_up(2,0)
@@ -151,7 +151,7 @@
if(SOFT_CRIT)
status = "Barely Conscious"
data["vr_avatar"] += list("status" = status, "health" = vr_mob.health, "maxhealth" = vr_mob.maxHealth)
- else
+ else
data["can_delete_avatar"] = FALSE
data["vr_avatar"] = FALSE
data["isliving"] = FALSE
@@ -207,7 +207,7 @@
var/vr_category = "default" //So we can have specific sleepers, eg: "Basketball VR Sleeper", etc.
var/vr_outfit = /datum/outfit/vr
-/obj/effect/landmark/vr_spawn/Initialize()
+/obj/effect/landmark/vr_spawn/Initialize(mapload)
. = ..()
LAZYADD(GLOB.vr_spawnpoints[vr_category], src)
@@ -235,7 +235,7 @@
var/area/vr_area
var/list/corpse_party
-/obj/effect/vr_clean_master/Initialize()
+/obj/effect/vr_clean_master/Initialize(mapload)
. = ..()
vr_area = get_base_area(src)
if(!vr_area)
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 01720c8e5d..bed3ee071f 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -10,7 +10,6 @@ GLOBAL_PROTECT(admin_verbs_default)
/client/proc/hide_most_verbs, /*hides all our hideable adminverbs*/
/client/proc/debug_variables, /*allows us to -see- the variables of any instance in the game. +VAREDIT needed to modify*/
/client/proc/dsay, /*talk in deadchat using our ckey/fakekey*/
- /client/proc/investigate_show, /*various admintools for investigation. Such as a singulo grief-log*/
/client/proc/secrets,
/client/proc/toggle_hear_radio, /*allows admins to hide all radio output*/
/client/proc/reload_admins,
@@ -124,6 +123,10 @@ GLOBAL_LIST_INIT(admin_verbs_fun, list(
GLOBAL_PROTECT(admin_verbs_fun)
GLOBAL_LIST_INIT(admin_verbs_spawn, list(/datum/admins/proc/spawn_atom, /datum/admins/proc/podspawn_atom, /datum/admins/proc/spawn_cargo, /datum/admins/proc/spawn_objasmob, /client/proc/respawn_character))
GLOBAL_PROTECT(admin_verbs_spawn)
+GLOBAL_LIST_INIT(admin_verbs_sensitive, list(
+ /client/proc/investigate_show /*various admintools for investigation. Such as a singulo grief-log*/
+))
+GLOBAL_PROTECT(admin_verbs_sensitive)
GLOBAL_LIST_INIT(admin_verbs_server, world.AVerbsServer())
GLOBAL_PROTECT(admin_verbs_server)
/world/proc/AVerbsServer()
@@ -316,6 +319,8 @@ GLOBAL_PROTECT(admin_verbs_hideable)
add_verb(src, /client/proc/play_web_sound)
if(rights & R_SPAWN)
add_verb(src, GLOB.admin_verbs_spawn)
+ if(rights & R_SENSITIVE)
+ add_verb(src, GLOB.admin_verbs_sensitive)
/client/proc/remove_admin_verbs()
remove_verb(src, list(
diff --git a/code/modules/admin/fun_balloon.dm b/code/modules/admin/fun_balloon.dm
index 417663fcb7..bfbb5e7dbb 100644
--- a/code/modules/admin/fun_balloon.dm
+++ b/code/modules/admin/fun_balloon.dm
@@ -6,7 +6,7 @@
anchored = TRUE
var/popped = FALSE
-/obj/effect/fun_balloon/Initialize()
+/obj/effect/fun_balloon/Initialize(mapload)
. = ..()
SSobj.processing |= src
@@ -109,7 +109,7 @@
timeleft = 0
var/list/warp_points
-/obj/effect/forcefield/arena_shuttle/Initialize()
+/obj/effect/forcefield/arena_shuttle/Initialize(mapload)
. = ..()
for(var/obj/effect/landmark/shuttle_arena_safe/exit in GLOB.landmarks_list)
warp_points += exit
diff --git a/code/modules/admin/sql_message_system.dm b/code/modules/admin/sql_message_system.dm
index 3ba309bc24..72b63da2ef 100644
--- a/code/modules/admin/sql_message_system.dm
+++ b/code/modules/admin/sql_message_system.dm
@@ -369,6 +369,8 @@
qdel(query_find_message_secret)
/proc/browse_messages(type, target_ckey, index, linkless = FALSE, filter, agegate = FALSE)
+ if((!usr || (target_ckey != usr.ckey)) && !check_rights(R_SENSITIVE))
+ return
if(!SSdbcore.Connect())
to_chat(usr, "Failed to establish database connection.", confidential = TRUE)
return
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index 9e201ec360..85b3d9eaa4 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -1577,7 +1577,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
duration = 9
pixel_z = 270
-/obj/effect/temp_visual/fireball/Initialize()
+/obj/effect/temp_visual/fireball/Initialize(mapload)
. = ..()
animate(src, pixel_z = 0, time = duration)
diff --git a/code/modules/antagonists/_common/antag_datum.dm b/code/modules/antagonists/_common/antag_datum.dm
index a1b1a1288e..ca392a0441 100644
--- a/code/modules/antagonists/_common/antag_datum.dm
+++ b/code/modules/antagonists/_common/antag_datum.dm
@@ -185,8 +185,8 @@ GLOBAL_LIST_EMPTY(antagonists)
// RegisterSignal(owner, COMSIG_MINDSHIELD_IMPLANTED, .proc/on_mindshield)
if(is_banned(owner.current) && replace_banned)
replace_banned_player()
- // else if(owner.current.client?.holder && (CONFIG_GET(flag/auto_deadmin_antagonists) || owner.current.client.prefs?.toggles & DEADMIN_ANTAGONIST))
- // owner.current.client.holder.auto_deadmin()
+ else if(owner.current.client?.holder && (CONFIG_GET(flag/auto_deadmin_antagonists) || owner.current.client.prefs?.deadmin & DEADMIN_ANTAGONIST))
+ owner.current.client.holder.auto_deadmin()
if(!soft_antag && owner.current.stat != DEAD)
owner.current.add_to_current_living_antags()
diff --git a/code/modules/antagonists/abductor/equipment/abduction_gear.dm b/code/modules/antagonists/abductor/equipment/abduction_gear.dm
index 011d175cfa..343faccad6 100644
--- a/code/modules/antagonists/abductor/equipment/abduction_gear.dm
+++ b/code/modules/antagonists/abductor/equipment/abduction_gear.dm
@@ -13,7 +13,7 @@
icon_state = "vest_stealth"
item_state = "armor"
blood_overlay_type = "armor"
- armor = list("melee" = 15, "bullet" = 15, "laser" = 15, "energy" = 15, "bomb" = 15, "bio" = 15, "rad" = 15, "fire" = 70, "acid" = 70)
+ armor = list(MELEE = 15, BULLET = 15, LASER = 15, ENERGY = 15, BOMB = 15, BIO = 15, RAD = 15, FIRE = 70, ACID = 70)
actions_types = list(/datum/action/item_action/hands_free/activate)
allowed = list(
/obj/item/abductor,
@@ -27,10 +27,10 @@
var/stealth_active = 0
var/combat_cooldown = 10
var/datum/icon_snapshot/disguise
- var/stealth_armor = list("melee" = 15, "bullet" = 15, "laser" = 15, "energy" = 15, "bomb" = 15, "bio" = 15, "rad" = 15, "fire" = 70, "acid" = 70)
- var/combat_armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 50, "bio" = 50, "rad" = 50, "fire" = 90, "acid" = 90)
+ var/stealth_armor = list(MELEE = 15, BULLET = 15, LASER = 15, ENERGY = 15, BOMB = 15, BIO = 15, RAD = 15, FIRE = 70, ACID = 70)
+ var/combat_armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 50, BIO = 50, RAD = 50, FIRE = 90, ACID = 90)
-/obj/item/clothing/suit/armor/abductor/vest/Initialize()
+/obj/item/clothing/suit/armor/abductor/vest/Initialize(mapload)
. = ..()
stealth_armor = getArmor(arglist(stealth_armor))
combat_armor = getArmor(arglist(combat_armor))
diff --git a/code/modules/antagonists/abductor/equipment/gland.dm b/code/modules/antagonists/abductor/equipment/gland.dm
index d0002d1f4a..312cc07997 100644
--- a/code/modules/antagonists/abductor/equipment/gland.dm
+++ b/code/modules/antagonists/abductor/equipment/gland.dm
@@ -19,7 +19,7 @@
var/mind_control_duration = 1800
var/active_mind_control = FALSE
-/obj/item/organ/heart/gland/Initialize()
+/obj/item/organ/heart/gland/Initialize(mapload)
. = ..()
icon_state = pick(list("health", "spider", "slime", "emp", "species", "egg", "vent", "mindshock", "viral"))
diff --git a/code/modules/antagonists/abductor/equipment/glands/chem.dm b/code/modules/antagonists/abductor/equipment/glands/chem.dm
index b651b45f6d..0c7d20d1ff 100644
--- a/code/modules/antagonists/abductor/equipment/glands/chem.dm
+++ b/code/modules/antagonists/abductor/equipment/glands/chem.dm
@@ -8,7 +8,7 @@
mind_control_duration = 1200
var/list/possible_reagents = list()
-/obj/item/organ/heart/gland/chem/Initialize()
+/obj/item/organ/heart/gland/chem/Initialize(mapload)
. = ..()
for(var/R in subtypesof(/datum/reagent/drug) + subtypesof(/datum/reagent/medicine) + typesof(/datum/reagent/toxin))
possible_reagents += R
diff --git a/code/modules/antagonists/abductor/machinery/dispenser.dm b/code/modules/antagonists/abductor/machinery/dispenser.dm
index f5bc0946e6..7d79bacdd0 100644
--- a/code/modules/antagonists/abductor/machinery/dispenser.dm
+++ b/code/modules/antagonists/abductor/machinery/dispenser.dm
@@ -12,7 +12,7 @@
//TODO : replace with presets or spectrum
return rgb(rand(0,255),rand(0,255),rand(0,255))
-/obj/machinery/abductor/gland_dispenser/Initialize()
+/obj/machinery/abductor/gland_dispenser/Initialize(mapload)
. = ..()
gland_types = subtypesof(/obj/item/organ/heart/gland)
gland_types = shuffle(gland_types)
diff --git a/code/modules/antagonists/abductor/machinery/pad.dm b/code/modules/antagonists/abductor/machinery/pad.dm
index ab636f7d0e..2ec8e70358 100644
--- a/code/modules/antagonists/abductor/machinery/pad.dm
+++ b/code/modules/antagonists/abductor/machinery/pad.dm
@@ -49,7 +49,7 @@
icon_state = "teleport"
duration = 80
-/obj/effect/temp_visual/teleport_abductor/Initialize()
+/obj/effect/temp_visual/teleport_abductor/Initialize(mapload)
. = ..()
var/datum/effect_system/spark_spread/S = new
S.set_up(10,0,loc)
diff --git a/code/modules/antagonists/blob/blob/blobs/blob_mobs.dm b/code/modules/antagonists/blob/blob/blobs/blob_mobs.dm
index f9763b92fd..8ecfc70a42 100644
--- a/code/modules/antagonists/blob/blob/blobs/blob_mobs.dm
+++ b/code/modules/antagonists/blob/blob/blobs/blob_mobs.dm
@@ -46,10 +46,10 @@
else
adjustFireLoss(5)
-/mob/living/simple_animal/hostile/blob/CanPass(atom/movable/mover, turf/target)
+/mob/living/simple_animal/hostile/blob/CanAllowThrough(atom/movable/mover, turf/target)
+ . = ..()
if(istype(mover, /obj/structure/blob))
- return 1
- return ..()
+ return TRUE
/mob/living/simple_animal/hostile/blob/Process_Spacemove(movement_dir = 0)
for(var/obj/structure/blob/B in range(1, src))
@@ -221,7 +221,7 @@
hud_type = /datum/hud/blobbernaut
var/independent = FALSE
-/mob/living/simple_animal/hostile/blob/blobbernaut/Initialize()
+/mob/living/simple_animal/hostile/blob/blobbernaut/Initialize(mapload)
. = ..()
if(independent)
pass_flags &= ~PASSBLOB
diff --git a/code/modules/antagonists/blob/blob/blobs/core.dm b/code/modules/antagonists/blob/blob/blobs/core.dm
index ef7c01a781..317dcb2522 100644
--- a/code/modules/antagonists/blob/blob/blobs/core.dm
+++ b/code/modules/antagonists/blob/blob/blobs/core.dm
@@ -4,7 +4,7 @@
icon_state = "blank_blob"
desc = "A huge, pulsating yellow mass."
max_integrity = 400
- armor = list("melee" = 30, "bullet" = 30, "laser" = 20, "energy" = 5, "bomb" = 70, "bio" = 0, "rad" = 0, "fire" = 75, "acid" = 90) // Last stand
+ armor = list(MELEE = 30, BULLET = 30, LASER = 20, ENERGY = 5, BOMB = 70, BIO = 0, RAD = 0, FIRE = 75, ACID = 90) // Last stand
explosion_block = 6
point_return = -1
health_regen = 0 //we regen in Life() instead of when pulsed
@@ -47,7 +47,7 @@
/obj/structure/blob/core/ex_act(severity, target, origin)
var/damage = 50 - 10 * severity //remember, the core takes half brute damage, so this is 20/15/10 damage based on severity
- take_damage(damage, BRUTE, "bomb", 0)
+ take_damage(damage, BRUTE, BOMB, 0)
/obj/structure/blob/core/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir, overmind_reagent_trigger = 1)
. = ..()
diff --git a/code/modules/antagonists/blob/blob/blobs/factory.dm b/code/modules/antagonists/blob/blob/blobs/factory.dm
index dfb3c6d71b..ae2c7f53ef 100644
--- a/code/modules/antagonists/blob/blob/blobs/factory.dm
+++ b/code/modules/antagonists/blob/blob/blobs/factory.dm
@@ -6,7 +6,7 @@
max_integrity = 200
health_regen = 1
point_return = 25
- armor = list("melee" = 10, "bullet" = 20, "laser" = 15, "energy" = 10, "bomb" = 40, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90)
+ armor = list(MELEE = 10, BULLET = 20, LASER = 15, ENERGY = 10, BOMB = 40, BIO = 0, RAD = 0, FIRE = 90, ACID = 90)
var/list/spores = list()
var/mob/living/simple_animal/hostile/blob/blobbernaut/naut = null
var/max_spores = 3
diff --git a/code/modules/antagonists/blob/blob/blobs/node.dm b/code/modules/antagonists/blob/blob/blobs/node.dm
index 14fbc741c0..75bd668bc5 100644
--- a/code/modules/antagonists/blob/blob/blobs/node.dm
+++ b/code/modules/antagonists/blob/blob/blobs/node.dm
@@ -4,12 +4,12 @@
icon_state = "blank_blob"
desc = "A large, pulsating yellow mass."
max_integrity = 200
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 65, "acid" = 90)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 65, ACID = 90)
health_regen = 3
point_return = 25
-/obj/structure/blob/node/Initialize()
+/obj/structure/blob/node/Initialize(mapload)
GLOB.blob_nodes += src
START_PROCESSING(SSobj, src)
. = ..()
diff --git a/code/modules/antagonists/blob/blob/blobs/resource.dm b/code/modules/antagonists/blob/blob/blobs/resource.dm
index 2ed9744327..ea5c6b14a5 100644
--- a/code/modules/antagonists/blob/blob/blobs/resource.dm
+++ b/code/modules/antagonists/blob/blob/blobs/resource.dm
@@ -5,7 +5,7 @@
desc = "A thin spire of slightly swaying tendrils."
max_integrity = 60
point_return = 15
- armor = list("melee" = 10, "bullet" = 10, "laser" = 0, "energy" = 0, "bomb" = 15, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90)
+ armor = list(MELEE = 10, BULLET = 10, LASER = 0, ENERGY = 0, BOMB = 15, BIO = 0, RAD = 0, FIRE = 90, ACID = 90)
var/resource_delay = 0
/obj/structure/blob/resource/scannerreport()
diff --git a/code/modules/antagonists/blob/blob/blobs/shield.dm b/code/modules/antagonists/blob/blob/blobs/shield.dm
index 38e6edc6d4..4dbbeb4708 100644
--- a/code/modules/antagonists/blob/blob/blobs/shield.dm
+++ b/code/modules/antagonists/blob/blob/blobs/shield.dm
@@ -9,7 +9,7 @@
explosion_block = 3
point_return = 4
atmosblock = TRUE
- armor = list("melee" = 25, "bullet" = 25, "laser" = 15, "energy" = 10, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90)
+ armor = list(MELEE = 25, BULLET = 25, LASER = 15, ENERGY = 10, BOMB = 20, BIO = 0, RAD = 0, FIRE = 90, ACID = 90)
var/weakened
/obj/structure/blob/shield/scannerreport()
@@ -28,7 +28,7 @@
desc = "[damaged_desc]"
atmosblock = FALSE
if(!weakened)
- armor = armor.setRating("melee" = 15, "bullet" = 15, "laser" = 5, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90)
+ armor = armor.setRating(MELEE = 15, BULLET = 15, LASER = 5, ENERGY = 0, BOMB = 10, BIO = 0, RAD = 0, FIRE = 90, ACID = 90)
weakened = TRUE
else
icon_state = initial(icon_state)
@@ -36,7 +36,7 @@
desc = initial(desc)
atmosblock = TRUE
if(weakened)
- armor = armor.setRating("melee" = 25, "bullet" = 25, "laser" = 15, "energy" = 10, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90)
+ armor = armor.setRating(MELEE = 25, BULLET = 25, LASER = 15, ENERGY = 10, BOMB = 20, BIO = 0, RAD = 0, FIRE = 90, ACID = 90)
weakened = FALSE
air_update_turf(1)
diff --git a/code/modules/antagonists/blob/blob/blobstrains/blazing_oil.dm b/code/modules/antagonists/blob/blob/blobstrains/blazing_oil.dm
index f97e271e72..be08266687 100644
--- a/code/modules/antagonists/blob/blob/blobstrains/blazing_oil.dm
+++ b/code/modules/antagonists/blob/blob/blobstrains/blazing_oil.dm
@@ -14,15 +14,15 @@
reagent = /datum/reagent/blob/blazing_oil
/datum/blobstrain/reagent/blazing_oil/extinguish_reaction(obj/structure/blob/B)
- B.take_damage(1.5, BURN, "energy")
+ B.take_damage(1.5, BURN, ENERGY)
/datum/blobstrain/reagent/blazing_oil/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag)
- if(damage_type == BURN && damage_flag != "energy")
+ if(damage_type == BURN && damage_flag != ENERGY)
for(var/turf/open/T in range(1, B))
var/obj/structure/blob/C = locate() in T
if(!(C && C.overmind && C.overmind.blobstrain.type == B.overmind.blobstrain.type) && prob(80))
new /obj/effect/hotspot(T)
- if(damage_flag == "fire")
+ if(damage_flag == FIRE)
return 0
return ..()
diff --git a/code/modules/antagonists/blob/blob/blobstrains/electromagnetic_web.dm b/code/modules/antagonists/blob/blob/blobstrains/electromagnetic_web.dm
index 7a1715cb4a..f2b00a981e 100644
--- a/code/modules/antagonists/blob/blob/blobstrains/electromagnetic_web.dm
+++ b/code/modules/antagonists/blob/blob/blobstrains/electromagnetic_web.dm
@@ -17,7 +17,7 @@
return damage * 1.25 //a laser will do 25 damage, which will kill any normal blob
/datum/blobstrain/reagent/electromagnetic_web/death_reaction(obj/structure/blob/B, damage_flag)
- if(damage_flag == "melee" || damage_flag == "bullet" || damage_flag == "laser")
+ if(damage_flag == MELEE || damage_flag == BULLET || damage_flag == LASER)
empulse_using_range(B.loc, 5) //less than screen range, so you can stand out of range to avoid it
/datum/reagent/blob/electromagnetic_web
diff --git a/code/modules/antagonists/blob/blob/blobstrains/energized_jelly.dm b/code/modules/antagonists/blob/blob/blobstrains/energized_jelly.dm
index 66ce3c303d..c22b429e1b 100644
--- a/code/modules/antagonists/blob/blob/blobstrains/energized_jelly.dm
+++ b/code/modules/antagonists/blob/blob/blobstrains/energized_jelly.dm
@@ -10,7 +10,7 @@
reagent = /datum/reagent/blob/energized_jelly
/datum/blobstrain/reagent/energized_jelly/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag)
- if((damage_flag == "melee" || damage_flag == "bullet" || damage_flag == "laser") && B.obj_integrity - damage <= 0 && prob(10))
+ if((damage_flag == MELEE || damage_flag == BULLET || damage_flag == LASER) && B.obj_integrity - damage <= 0 && prob(10))
do_sparks(rand(2, 4), FALSE, B)
return ..()
@@ -19,7 +19,7 @@
/datum/blobstrain/reagent/energized_jelly/emp_reaction(obj/structure/blob/B, severity)
var/damage = rand(30, 50) - severity * rand(10, 15)
- B.take_damage(damage, BURN, "energy")
+ B.take_damage(damage, BURN, ENERGY)
/datum/reagent/blob/energized_jelly
name = "Energized Jelly"
diff --git a/code/modules/antagonists/blob/blob/blobstrains/explosive_lattice.dm b/code/modules/antagonists/blob/blob/blobstrains/explosive_lattice.dm
index 3d005ba913..c805069a9c 100644
--- a/code/modules/antagonists/blob/blob/blobstrains/explosive_lattice.dm
+++ b/code/modules/antagonists/blob/blob/blobstrains/explosive_lattice.dm
@@ -12,9 +12,9 @@
reagent = /datum/reagent/blob/explosive_lattice
/datum/blobstrain/reagent/explosive_lattice/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag)
- if(damage_flag == "bomb")
+ if(damage_flag == BOMB)
return 0
- else if(damage_flag != "melee" && damage_flag != "bullet" && damage_flag != "laser")
+ else if(damage_flag != MELEE && damage_flag != BULLET && damage_flag != LASER)
return damage * 1.5
return ..()
diff --git a/code/modules/antagonists/blob/blob/blobstrains/pressurized_slime.dm b/code/modules/antagonists/blob/blob/blobstrains/pressurized_slime.dm
index 11477712e7..6b19ff2257 100644
--- a/code/modules/antagonists/blob/blob/blobstrains/pressurized_slime.dm
+++ b/code/modules/antagonists/blob/blob/blobstrains/pressurized_slime.dm
@@ -13,12 +13,12 @@
reagent = /datum/reagent/blob/pressurized_slime
/datum/blobstrain/reagent/pressurized_slime/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag)
- if((damage_flag == "melee" || damage_flag == "bullet" || damage_flag == "laser") || damage_type != BURN)
+ if((damage_flag == MELEE || damage_flag == BULLET || damage_flag == LASER) || damage_type != BURN)
extinguisharea(B, damage)
return ..()
/datum/blobstrain/reagent/pressurized_slime/death_reaction(obj/structure/blob/B, damage_flag)
- if(damage_flag == "melee" || damage_flag == "bullet" || damage_flag == "laser")
+ if(damage_flag == MELEE || damage_flag == BULLET || damage_flag == LASER)
B.visible_message("The blob ruptures, spraying the area with liquid!")
extinguisharea(B, 50)
diff --git a/code/modules/antagonists/blob/blob/blobstrains/reactive_spines.dm b/code/modules/antagonists/blob/blob/blobstrains/reactive_spines.dm
index fca56d1402..84ff383dd1 100644
--- a/code/modules/antagonists/blob/blob/blobstrains/reactive_spines.dm
+++ b/code/modules/antagonists/blob/blob/blobstrains/reactive_spines.dm
@@ -13,7 +13,7 @@
/datum/blobstrain/reagent/reactive_spines/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag)
if(damage && damage_type == BRUTE && B.obj_integrity - damage > 0) //is there any damage, is it brute, and will we be alive
- if(damage_flag == "melee")
+ if(damage_flag == MELEE)
B.visible_message("The blob retaliates, lashing out!")
for(var/atom/A in range(1, B))
A.blob_act(B)
diff --git a/code/modules/antagonists/blob/blob/blobstrains/shifting_fragments.dm b/code/modules/antagonists/blob/blob/blobstrains/shifting_fragments.dm
index 9265158e1b..d4930a9a61 100644
--- a/code/modules/antagonists/blob/blob/blobstrains/shifting_fragments.dm
+++ b/code/modules/antagonists/blob/blob/blobstrains/shifting_fragments.dm
@@ -14,7 +14,7 @@
B.forceMove(T)
/datum/blobstrain/reagent/shifting_fragments/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag)
- if((damage_flag == "melee" || damage_flag == "bullet" || damage_flag == "laser") && damage > 0 && B.obj_integrity - damage > 0 && prob(60-damage))
+ if((damage_flag == MELEE || damage_flag == BULLET || damage_flag == LASER) && damage > 0 && B.obj_integrity - damage > 0 && prob(60-damage))
var/list/blobstopick = list()
for(var/obj/structure/blob/OB in orange(1, B))
if((istype(OB, /obj/structure/blob/normal) || (istype(OB, /obj/structure/blob/shield) && prob(25))) && OB.overmind && OB.overmind.blobstrain.type == B.overmind.blobstrain.type)
diff --git a/code/modules/antagonists/blob/blob/blobstrains/synchronous_mesh.dm b/code/modules/antagonists/blob/blob/blobstrains/synchronous_mesh.dm
index daad0068e2..ad6b36cf42 100644
--- a/code/modules/antagonists/blob/blob/blobstrains/synchronous_mesh.dm
+++ b/code/modules/antagonists/blob/blob/blobstrains/synchronous_mesh.dm
@@ -11,7 +11,7 @@
message = "The blobs strike you"
/datum/blobstrain/reagent/synchronous_mesh/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag)
- if(damage_flag == "melee" || damage_flag == "bullet" || damage_flag == "laser") //the cause isn't fire or bombs, so split the damage
+ if(damage_flag == MELEE || damage_flag == BULLET || damage_flag == LASER) //the cause isn't fire or bombs, so split the damage
var/damagesplit = 1 //maximum split is 9, reducing the damage each blob takes to 11% but doing that damage to 9 blobs
for(var/obj/structure/blob/C in orange(1, B))
if(!istype(C, /obj/structure/blob/core) && !istype(C, /obj/structure/blob/node) && C.overmind && C.overmind.blobstrain.type == B.overmind.blobstrain.type) //if it doesn't have the same chemical or is a core or node, don't split damage to it
diff --git a/code/modules/antagonists/blob/blob/blobstrains/zombifying_pods.dm b/code/modules/antagonists/blob/blob/blobstrains/zombifying_pods.dm
index b2bb9d5115..6fba19b487 100644
--- a/code/modules/antagonists/blob/blob/blobstrains/zombifying_pods.dm
+++ b/code/modules/antagonists/blob/blob/blobstrains/zombifying_pods.dm
@@ -12,7 +12,7 @@
reagent = /datum/reagent/blob/zombifying_pods
/datum/blobstrain/reagent/zombifying_pods/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag)
- if((damage_flag == "melee" || damage_flag == "bullet" || damage_flag == "laser") && damage <= 20 && B.obj_integrity - damage <= 0 && prob(30)) //if the cause isn't fire or a bomb, the damage is less than 21, we're going to die from that damage, 20% chance of a shitty spore.
+ if((damage_flag == MELEE || damage_flag == BULLET || damage_flag == LASER) && damage <= 20 && B.obj_integrity - damage <= 0 && prob(30)) //if the cause isn't fire or a bomb, the damage is less than 21, we're going to die from that damage, 20% chance of a shitty spore.
B.visible_message("A spore floats free of the blob!")
var/mob/living/simple_animal/hostile/blob/blobspore/weak/BS = new/mob/living/simple_animal/hostile/blob/blobspore/weak(B.loc)
BS.overmind = B.overmind
diff --git a/code/modules/antagonists/blob/blob/theblob.dm b/code/modules/antagonists/blob/blob/theblob.dm
index 8ca7e65c3f..ff6eab264b 100644
--- a/code/modules/antagonists/blob/blob/theblob.dm
+++ b/code/modules/antagonists/blob/blob/theblob.dm
@@ -4,14 +4,15 @@
icon = 'icons/mob/blob.dmi'
light_range = 2
desc = "A thick wall of writhing tendrils."
- density = FALSE //this being false causes two bugs, being able to attack blob tiles behind other blobs and being unable to move on blob tiles in no gravity, but turning it to 1 causes the blob mobs to be unable to path through blobs, which is probably worse.
+ density = TRUE
opacity = 0
anchored = TRUE
layer = BELOW_MOB_LAYER
+ pass_flags_self = PASSBLOB
CanAtmosPass = ATMOS_PASS_PROC
var/point_return = 0 //How many points the blob gets back when it removes a blob of that type. If less than 0, blob cannot be removed.
max_integrity = 30
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 70)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 70)
var/health_regen = 2 //how much health this blob regens when pulsed
var/pulse_timestamp = 0 //we got pulsed when?
var/heal_timestamp = 0 //we got healed when?
@@ -67,11 +68,6 @@
/obj/structure/blob/BlockThermalConductivity()
return atmosblock
-/obj/structure/blob/CanPass(atom/movable/mover, turf/target)
- if(istype(mover) && (mover.pass_flags & PASSBLOB))
- return 1
- return 0
-
/obj/structure/blob/CanAtmosPass(turf/T)
return !atmosblock
@@ -210,9 +206,9 @@
. = ..()
if(overmind)
if(overmind.blobstrain.tesla_reaction(src, power))
- take_damage(power/400, BURN, "energy")
+ take_damage(power/400, BURN, ENERGY)
else
- take_damage(power/400, BURN, "energy")
+ take_damage(power/400, BURN, ENERGY)
/obj/structure/blob/extinguish()
..()
diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_sunlight.dm b/code/modules/antagonists/bloodsucker/bloodsucker_sunlight.dm
index f26152f90e..a86cb374d2 100644
--- a/code/modules/antagonists/bloodsucker/bloodsucker_sunlight.dm
+++ b/code/modules/antagonists/bloodsucker/bloodsucker_sunlight.dm
@@ -12,7 +12,7 @@
var/nighttime_duration = 900 //15 Minutes
var/issued_XP = FALSE
-/obj/effect/sunlight/Initialize()
+/obj/effect/sunlight/Initialize(mapload)
. = ..()
/obj/effect/sunlight/proc/start_countdown()
diff --git a/code/modules/antagonists/bloodsucker/objects/bloodsucker_coffin.dm b/code/modules/antagonists/bloodsucker/objects/bloodsucker_coffin.dm
index 881da8f282..d58190cf66 100644
--- a/code/modules/antagonists/bloodsucker/objects/bloodsucker_coffin.dm
+++ b/code/modules/antagonists/bloodsucker/objects/bloodsucker_coffin.dm
@@ -54,7 +54,7 @@
resistance_flags = NONE
max_integrity = 100
integrity_failure = 0.5
- armor = list("melee" = 50, "bullet" = 20, "laser" = 30, "energy" = 0, "bomb" = 50, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 60)
+ armor = list(MELEE = 50, BULLET = 20, LASER = 30, ENERGY = 0, BOMB = 50, BIO = 0, RAD = 0, FIRE = 70, ACID = 60)
/obj/structure/closet/crate/coffin/meatcoffin
name = "meat coffin"
@@ -69,7 +69,7 @@
material_drop = /obj/item/reagent_containers/food/snacks/meat/slab
material_drop_amount = 3
integrity_failure = 0.57
- armor = list("melee" = 70, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 70, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 100)
+ armor = list(MELEE = 70, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 70, BIO = 0, RAD = 0, FIRE = 70, ACID = 100)
/obj/structure/closet/crate/coffin/metalcoffin
name = "metal coffin"
@@ -85,7 +85,7 @@
material_drop_amount = 5
max_integrity = 200
integrity_failure = 0.25
- armor = list("melee" = 40, "bullet" = 15, "laser" = 50, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 60)
+ armor = list(MELEE = 40, BULLET = 15, LASER = 50, ENERGY = 0, BOMB = 10, BIO = 0, RAD = 0, FIRE = 70, ACID = 60)
//////////////////////////////////////////////
diff --git a/code/modules/antagonists/changeling/powers/mutations.dm b/code/modules/antagonists/changeling/powers/mutations.dm
index ec95ee4ef6..cb19f624fb 100644
--- a/code/modules/antagonists/changeling/powers/mutations.dm
+++ b/code/modules/antagonists/changeling/powers/mutations.dm
@@ -302,7 +302,7 @@
firing_effect_type = null
var/obj/item/gun/magic/tentacle/gun //the item that shot it
-/obj/item/ammo_casing/magic/tentacle/Initialize()
+/obj/item/ammo_casing/magic/tentacle/Initialize(mapload)
gun = loc
. = ..()
@@ -321,7 +321,7 @@
var/chain
var/obj/item/ammo_casing/magic/tentacle/source //the item that shot it
-/obj/item/projectile/tentacle/Initialize()
+/obj/item/projectile/tentacle/Initialize(mapload)
source = loc
. = ..()
@@ -503,10 +503,10 @@
item_flags = DROPDEL
clothing_flags = STOPSPRESSUREDAMAGE //Not THICKMATERIAL because it's organic tissue, so if somebody tries to inject something into it, it still ends up in your blood. (also balance but muh fluff)
allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/oxygen)
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90) //No armor at all.
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 90, ACID = 90) //No armor at all.
mutantrace_variation = NONE
-/obj/item/clothing/suit/space/changeling/Initialize()
+/obj/item/clothing/suit/space/changeling/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT)
if(ismob(loc))
@@ -524,10 +524,10 @@
desc = "A covering of pressure and temperature-resistant organic tissue with a glass-like chitin front."
item_flags = DROPDEL
clothing_flags = STOPSPRESSUREDAMAGE
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 90, ACID = 90)
flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH
-/obj/item/clothing/head/helmet/space/changeling/Initialize()
+/obj/item/clothing/head/helmet/space/changeling/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT)
@@ -558,12 +558,12 @@
icon_state = "lingarmor"
item_flags = DROPDEL
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
- armor = list("melee" = 70, "bullet" = 60, "laser" = 30, "energy" = 40, "bomb" = 10, "bio" = 4, "rad" = 0, "fire" = 50, "acid" = 90)
+ armor = list(MELEE = 70, BULLET = 60, LASER = 30, ENERGY = 40, BOMB = 10, BIO = 4, RAD = 0, FIRE = 50, ACID = 90)
flags_inv = HIDEJUMPSUIT
cold_protection = 0
heat_protection = 0
-/obj/item/clothing/suit/armor/changeling/Initialize()
+/obj/item/clothing/suit/armor/changeling/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT)
if(ismob(loc))
@@ -574,10 +574,10 @@
desc = "A tough, hard covering of black chitin with transparent chitin in front."
icon_state = "lingarmorhelmet"
item_flags = DROPDEL
- armor = list("melee" = 70, "bullet" = 60, "laser" = 30, "energy" = 40, "bomb" = 10, "bio" = 4, "rad" = 0, "fire" = 50, "acid" = 90)
+ armor = list(MELEE = 70, BULLET = 60, LASER = 30, ENERGY = 40, BOMB = 10, BIO = 4, RAD = 0, FIRE = 50, ACID = 90)
flags_inv = HIDEEARS|HIDEHAIR|HIDEEYES|HIDEFACIALHAIR|HIDEFACE
-/obj/item/clothing/head/helmet/changeling/Initialize()
+/obj/item/clothing/head/helmet/changeling/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT)
@@ -653,9 +653,9 @@
cold_protection = HANDS
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
- armor = list("melee" = 20, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 35, "bio" = 35, "rad" = 35, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 20, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 35, BIO = 35, RAD = 35, FIRE = 0, ACID = 0)
-/obj/item/clothing/gloves/claws/Initialize()
+/obj/item/clothing/gloves/claws/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT)
@@ -697,7 +697,7 @@
cold_protection = ARMS|HANDS
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
- armor = list("melee" = 20, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 35, "bio" = 35, "rad" = 35, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 20, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 35, BIO = 35, RAD = 35, FIRE = 0, ACID = 0)
enhancement = 6 // first, do harm. all of it. all of the harm. just fuck em up.
wound_enhancement = 6
var/fast_enhancement = 6
@@ -727,7 +727,7 @@
to_chat(user, "[src] are now formed to allow for [fasthands ? "fast, precise strikes" : "crippling, damaging blows"].")
addtimer(CALLBACK(src, .proc/use_buffs, user, TRUE), 0.1) // go fuckin get em
-/obj/item/clothing/gloves/fingerless/pugilist/cling/Initialize()
+/obj/item/clothing/gloves/fingerless/pugilist/cling/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT)
diff --git a/code/modules/antagonists/changeling/powers/transform.dm b/code/modules/antagonists/changeling/powers/transform.dm
index cfd42f05cf..e685cbabfa 100644
--- a/code/modules/antagonists/changeling/powers/transform.dm
+++ b/code/modules/antagonists/changeling/powers/transform.dm
@@ -12,7 +12,7 @@
/obj/item/clothing/glasses/changeling
name = "flesh"
-/obj/item/clothing/glasses/changeling/Initialize()
+/obj/item/clothing/glasses/changeling/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT)
@@ -27,7 +27,7 @@
/obj/item/clothing/under/changeling
name = "flesh"
-/obj/item/clothing/under/changeling/Initialize()
+/obj/item/clothing/under/changeling/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT)
@@ -43,7 +43,7 @@
name = "flesh"
allowed = list(/obj/item/changeling)
-/obj/item/clothing/suit/changeling/Initialize()
+/obj/item/clothing/suit/changeling/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT)
@@ -58,7 +58,7 @@
/obj/item/clothing/head/changeling
name = "flesh"
-/obj/item/clothing/head/changeling/Initialize()
+/obj/item/clothing/head/changeling/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT)
@@ -72,7 +72,7 @@
/obj/item/clothing/shoes/changeling
name = "flesh"
-/obj/item/clothing/shoes/changeling/Initialize()
+/obj/item/clothing/shoes/changeling/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT)
@@ -87,7 +87,7 @@
/obj/item/clothing/gloves/changeling
name = "flesh"
-/obj/item/clothing/gloves/changeling/Initialize()
+/obj/item/clothing/gloves/changeling/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT)
@@ -102,7 +102,7 @@
/obj/item/clothing/mask/changeling
name = "flesh"
-/obj/item/clothing/mask/changeling/Initialize()
+/obj/item/clothing/mask/changeling/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT)
@@ -119,7 +119,7 @@
slot_flags = ALL
allowed = list(/obj/item/changeling)
-/obj/item/changeling/Initialize()
+/obj/item/changeling/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT)
diff --git a/code/modules/antagonists/clockcult/clock_effect.dm b/code/modules/antagonists/clockcult/clock_effect.dm
index 8e3a8f4ceb..a788677eb1 100644
--- a/code/modules/antagonists/clockcult/clock_effect.dm
+++ b/code/modules/antagonists/clockcult/clock_effect.dm
@@ -10,7 +10,7 @@
opacity = 0
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF
-/obj/effect/clockwork/Initialize()
+/obj/effect/clockwork/Initialize(mapload)
. = ..()
GLOB.all_clockwork_objects += src
diff --git a/code/modules/antagonists/clockcult/clock_effects/city_of_cogs_rift.dm b/code/modules/antagonists/clockcult/clock_effects/city_of_cogs_rift.dm
index 562d6a0c94..4dff21c369 100644
--- a/code/modules/antagonists/clockcult/clock_effects/city_of_cogs_rift.dm
+++ b/code/modules/antagonists/clockcult/clock_effects/city_of_cogs_rift.dm
@@ -16,7 +16,7 @@
/obj/effect/clockwork/city_of_cogs_rift/singularity_pull()
return
-/obj/effect/clockwork/city_of_cogs_rift/Initialize()
+/obj/effect/clockwork/city_of_cogs_rift/Initialize(mapload)
. = ..()
visible_message("The air above [loc] shimmers and pops as a [name] forms there!")
for(var/mob/M in GLOB.player_list)
diff --git a/code/modules/antagonists/clockcult/clock_effects/clock_overlay.dm b/code/modules/antagonists/clockcult/clock_effects/clock_overlay.dm
index 7e2fd1e11c..6c9097de0e 100644
--- a/code/modules/antagonists/clockcult/clock_effects/clock_overlay.dm
+++ b/code/modules/antagonists/clockcult/clock_effects/clock_overlay.dm
@@ -32,7 +32,7 @@
smooth = SMOOTH_TRUE
layer = CLOSED_TURF_LAYER
-/obj/effect/clockwork/overlay/wall/Initialize()
+/obj/effect/clockwork/overlay/wall/Initialize(mapload)
. = ..()
queue_smooth_neighbors(src)
addtimer(CALLBACK(GLOBAL_PROC, .proc/queue_smooth, src), 1)
diff --git a/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm b/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm
index d7facb7f2d..18211d0447 100644
--- a/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm
+++ b/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm
@@ -200,7 +200,7 @@
sigil_name = "Sigil of Transmission"
affects_servants = TRUE
-/obj/effect/clockwork/sigil/transmission/Initialize()
+/obj/effect/clockwork/sigil/transmission/Initialize(mapload)
. = ..()
update_icon()
@@ -229,7 +229,7 @@
else if(get_clockwork_power())
to_chat(L, "You feel a slight, static shock.")
-/obj/effect/clockwork/sigil/transmission/Initialize()
+/obj/effect/clockwork/sigil/transmission/Initialize(mapload)
. = ..()
START_PROCESSING(SSobj, src)
diff --git a/code/modules/antagonists/clockcult/clock_effects/servant_blocker.dm b/code/modules/antagonists/clockcult/clock_effects/servant_blocker.dm
index 6fc2bde9d8..5905862690 100644
--- a/code/modules/antagonists/clockcult/clock_effects/servant_blocker.dm
+++ b/code/modules/antagonists/clockcult/clock_effects/servant_blocker.dm
@@ -8,7 +8,7 @@
density = TRUE
CanAtmosPass = ATMOS_PASS_NO
-/obj/effect/clockwork/servant_blocker/Initialize()
+/obj/effect/clockwork/servant_blocker/Initialize(mapload)
. = ..()
air_update_turf(TRUE)
diff --git a/code/modules/antagonists/clockcult/clock_effects/spatial_gateway.dm b/code/modules/antagonists/clockcult/clock_effects/spatial_gateway.dm
index f2aa443f82..79ad69b76f 100644
--- a/code/modules/antagonists/clockcult/clock_effects/spatial_gateway.dm
+++ b/code/modules/antagonists/clockcult/clock_effects/spatial_gateway.dm
@@ -17,7 +17,7 @@
var/is_stable = FALSE
var/busy = FALSE //If someone is already working on closing the gateway, only needed for stable gateways but in the parent to not need typecasting
-/obj/effect/clockwork/spatial_gateway/Initialize()
+/obj/effect/clockwork/spatial_gateway/Initialize(mapload)
. = ..()
addtimer(CALLBACK(src, .proc/check_setup), 1)
diff --git a/code/modules/antagonists/clockcult/clock_helpers/clock_powerdrain.dm b/code/modules/antagonists/clockcult/clock_helpers/clock_powerdrain.dm
index 76738ab1de..8d0dff0ea8 100644
--- a/code/modules/antagonists/clockcult/clock_helpers/clock_powerdrain.dm
+++ b/code/modules/antagonists/clockcult/clock_helpers/clock_powerdrain.dm
@@ -72,8 +72,11 @@ drain_amount: How much is drained by default; Influenced by a multiplier on most
cell.use(.)
spark_system.start()
-/obj/mecha/power_drain(clockcult_user, drain_weapons = FALSE, recursive = FALSE, drain_amount = MIN_CLOCKCULT_POWER)
- if(!clockcult_user || (occupant && !is_servant_of_ratvar(occupant)))
+/obj/vehicle/sealed/mecha/power_drain(clockcult_user, drain_weapons = FALSE, recursive = FALSE, drain_amount = MIN_CLOCKCULT_POWER)
+ if(!clockcult_user || LAZYLEN(occupants))
+ for(var/mob/living/MB in occupants)
+ if(is_servant_of_ratvar(MB))
+ return
if(recursive)
var/succ = 0
for(var/atom/movable/target in contents) //Hiding in your mech won't save you.
diff --git a/code/modules/antagonists/clockcult/clock_item.dm b/code/modules/antagonists/clockcult/clock_item.dm
index 7c8e877fb3..f4d5352ab9 100644
--- a/code/modules/antagonists/clockcult/clock_item.dm
+++ b/code/modules/antagonists/clockcult/clock_item.dm
@@ -8,7 +8,7 @@
icon_state = "rare_pepe"
w_class = WEIGHT_CLASS_SMALL
-/obj/item/clockwork/Initialize()
+/obj/item/clockwork/Initialize(mapload)
. = ..()
ratvar_act()
GLOB.all_clockwork_objects += src
diff --git a/code/modules/antagonists/clockcult/clock_items/clock_components.dm b/code/modules/antagonists/clockcult/clock_items/clock_components.dm
index a9307f15e1..1e5a538772 100644
--- a/code/modules/antagonists/clockcult/clock_items/clock_components.dm
+++ b/code/modules/antagonists/clockcult/clock_items/clock_components.dm
@@ -172,7 +172,7 @@
var/randomspritemax = 2
var/sprite_shift = 9
-/obj/item/clockwork/alloy_shards/Initialize()
+/obj/item/clockwork/alloy_shards/Initialize(mapload)
. = ..()
if(randomsinglesprite)
replace_name_desc()
diff --git a/code/modules/antagonists/clockcult/clock_items/clock_weapons/brass_claw.dm b/code/modules/antagonists/clockcult/clock_items/clock_weapons/brass_claw.dm
index 340f01f6f8..b98214668a 100644
--- a/code/modules/antagonists/clockcult/clock_items/clock_weapons/brass_claw.dm
+++ b/code/modules/antagonists/clockcult/clock_items/clock_weapons/brass_claw.dm
@@ -26,7 +26,7 @@
var/damage_per_combo = 2
var/maximum_combo_damage = 18 //33 damage on max stacks. Usually the target will already be dead by then but if they somehow aren't, better to have this capped
-/obj/item/clockwork/brass_claw/Initialize()
+/obj/item/clockwork/brass_claw/Initialize(mapload)
. = ..()
AddComponent(/datum/component/butchering, 60, 80)
diff --git a/code/modules/antagonists/clockcult/clock_items/clock_weapons/ratvarian_shield.dm b/code/modules/antagonists/clockcult/clock_items/clock_weapons/ratvarian_shield.dm
index 1b6979300f..47105938e6 100644
--- a/code/modules/antagonists/clockcult/clock_items/clock_weapons/ratvarian_shield.dm
+++ b/code/modules/antagonists/clockcult/clock_items/clock_weapons/ratvarian_shield.dm
@@ -7,7 +7,7 @@
item_state = "ratvarian_shield"
desc = "A resilient shield made out of brass.. It feels warm to the touch."
var/clockwork_desc = "A powerful shield of ratvarian making. It absorbs blocked attacks to charge devastating bashes."
- armor = list("melee" = 80, "bullet" = 70, "laser" = -10, "energy" = -20, "bomb" = 60, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
+ armor = list(MELEE = 80, BULLET = 70, LASER = -10, ENERGY = -20, BOMB = 60, BIO = 0, RAD = 0, FIRE = 100, ACID = 100)
shield_flags = SHIELD_FLAGS_DEFAULT | SHIELD_KINETIC_STRONG | SHIELD_ENERGY_WEAK
max_integrity = 300 //High integrity, extremely strong against melee / bullets, but still quite easy to destroy with lasers and energy
repair_material = /obj/item/stack/tile/brass
diff --git a/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm b/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm
index b5f2a358e6..982ab73485 100644
--- a/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm
+++ b/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm
@@ -8,9 +8,9 @@
resistance_flags = FIRE_PROOF | ACID_PROOF
flags_inv = HIDEEARS|HIDEHAIR|HIDEFACE|HIDESNOUT
mutantrace_variation = STYLE_MUZZLE
- armor = list("melee" = 50, "bullet" = 70, "laser" = 0, "energy" = 0, "bomb" = 60, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100, "magic" = 60, "wound" = 65)
+ armor = list(MELEE = 50, BULLET = 70, LASER = 0, ENERGY = 0, BOMB = 60, BIO = 0, RAD = 0, FIRE = 100, ACID = 100, MAGIC = 60, WOUND = 65)
-/obj/item/clothing/head/helmet/clockwork/Initialize()
+/obj/item/clothing/head/helmet/clockwork/Initialize(mapload)
. = ..()
ratvar_act()
GLOB.all_clockwork_objects += src
@@ -68,11 +68,11 @@
cold_protection = CHEST|GROIN|LEGS
heat_protection = CHEST|GROIN|LEGS
resistance_flags = FIRE_PROOF | ACID_PROOF
- armor = list("melee" = 60, "bullet" = 70, "laser" = 0, "energy" = 0, "bomb" = 60, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100, "magic" = 60, "wound" = 65)
+ armor = list(MELEE = 60, BULLET = 70, LASER = 0, ENERGY = 0, BOMB = 60, BIO = 0, RAD = 0, FIRE = 100, ACID = 100, MAGIC = 60, WOUND = 65)
allowed = list(/obj/item/clockwork, /obj/item/clothing/glasses/wraith_spectacles, /obj/item/clothing/glasses/judicial_visor, /obj/item/mmi/posibrain/soul_vessel, /obj/item/reagent_containers/food/drinks/bottle/holyoil)
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_SNEK_TAURIC
-/obj/item/clothing/suit/armor/clockwork/Initialize()
+/obj/item/clothing/suit/armor/clockwork/Initialize(mapload)
. = ..()
ratvar_act()
GLOB.all_clockwork_objects += src
@@ -135,9 +135,9 @@
siemens_coefficient = 0
permeability_coefficient = 0.05
resistance_flags = FIRE_PROOF | ACID_PROOF
- armor = list("melee" = 80, "bullet" = 70, "laser" = 0, "energy" = 0, "bomb" = 60, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100, "magic" = 70, "wound" = 85)
+ armor = list(MELEE = 80, BULLET = 70, LASER = 0, ENERGY = 0, BOMB = 60, BIO = 0, RAD = 0, FIRE = 100, ACID = 100, MAGIC = 70, WOUND = 85)
-/obj/item/clothing/gloves/clockwork/Initialize()
+/obj/item/clothing/gloves/clockwork/Initialize(mapload)
. = ..()
ratvar_act()
GLOB.all_clockwork_objects += src
@@ -190,7 +190,7 @@
equip_delay_other = 30
resistance_flags = FIRE_PROOF | ACID_PROOF
-/obj/item/clothing/shoes/clockwork/Initialize()
+/obj/item/clothing/shoes/clockwork/Initialize(mapload)
. = ..()
ratvar_act()
GLOB.all_clockwork_objects += src
diff --git a/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm b/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm
index d5c9b2cd2f..db19361ca8 100644
--- a/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm
+++ b/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm
@@ -106,7 +106,7 @@
if(!GLOB.ratvar_awakens)
SStgui.close_uis(src)
-/obj/item/clockwork/slab/Initialize()
+/obj/item/clockwork/slab/Initialize(mapload)
. = ..()
update_slab_info(src)
START_PROCESSING(SSobj, src)
diff --git a/code/modules/antagonists/clockcult/clock_items/construct_chassis.dm b/code/modules/antagonists/clockcult/clock_items/construct_chassis.dm
index 9342cd8ea5..be832f7e52 100644
--- a/code/modules/antagonists/clockcult/clock_items/construct_chassis.dm
+++ b/code/modules/antagonists/clockcult/clock_items/construct_chassis.dm
@@ -11,7 +11,7 @@
var/creation_message = "The chassis shudders and hums to life!"
var/construct_type //The construct this shell will create
-/obj/item/clockwork/construct_chassis/Initialize()
+/obj/item/clockwork/construct_chassis/Initialize(mapload)
. = ..()
var/area/A = get_area(src)
if(A && construct_type)
@@ -92,7 +92,7 @@
var/infinite_resources = FALSE //No.
var/static/obj/item/seasonal_hat //Share it with all other scarabs, since we're from the same cult!
-/obj/item/clockwork/construct_chassis/cogscarab/Initialize()
+/obj/item/clockwork/construct_chassis/cogscarab/Initialize(mapload)
. = ..()
if(GLOB.servants_active)
infinite_resources = FALSE //This check is relatively irrelevant until *someone* makes the infinite resources var default to true again, so, leaving it in.
diff --git a/code/modules/antagonists/clockcult/clock_items/integration_cog.dm b/code/modules/antagonists/clockcult/clock_items/integration_cog.dm
index ab8e30c8bb..45c3f757a4 100644
--- a/code/modules/antagonists/clockcult/clock_items/integration_cog.dm
+++ b/code/modules/antagonists/clockcult/clock_items/integration_cog.dm
@@ -12,7 +12,7 @@
item_flags = NOBLUDGEON
var/obj/machinery/power/apc/apc
-/obj/item/clockwork/integration_cog/Initialize()
+/obj/item/clockwork/integration_cog/Initialize(mapload)
. = ..()
transform *= 0.5 //little cog!
diff --git a/code/modules/antagonists/clockcult/clock_items/judicial_visor.dm b/code/modules/antagonists/clockcult/clock_items/judicial_visor.dm
index 138f04feb3..dc53217486 100644
--- a/code/modules/antagonists/clockcult/clock_items/judicial_visor.dm
+++ b/code/modules/antagonists/clockcult/clock_items/judicial_visor.dm
@@ -13,7 +13,7 @@
var/recharge_cooldown = 300 //divided by 10 if ratvar is alive
actions_types = list(/datum/action/item_action/clock/toggle_visor)
-/obj/item/clothing/glasses/judicial_visor/Initialize()
+/obj/item/clothing/glasses/judicial_visor/Initialize(mapload)
. = ..()
GLOB.all_clockwork_objects += src
blaster = new(src)
diff --git a/code/modules/antagonists/clockcult/clock_items/soul_vessel.dm b/code/modules/antagonists/clockcult/clock_items/soul_vessel.dm
index 6bec6e3bc7..f0e4863c4e 100644
--- a/code/modules/antagonists/clockcult/clock_items/soul_vessel.dm
+++ b/code/modules/antagonists/clockcult/clock_items/soul_vessel.dm
@@ -25,7 +25,7 @@
force_replace_ai_name = TRUE
overrides_aicore_laws = TRUE
-/obj/item/mmi/posibrain/soul_vessel/Initialize()
+/obj/item/mmi/posibrain/soul_vessel/Initialize(mapload)
. = ..()
radio.on = FALSE
laws = new /datum/ai_laws/ratvar()
diff --git a/code/modules/antagonists/clockcult/clock_items/wraith_spectacles.dm b/code/modules/antagonists/clockcult/clock_items/wraith_spectacles.dm
index 837844d0cb..c48696aa8c 100644
--- a/code/modules/antagonists/clockcult/clock_items/wraith_spectacles.dm
+++ b/code/modules/antagonists/clockcult/clock_items/wraith_spectacles.dm
@@ -12,7 +12,7 @@
visor_vars_to_toggle = NONE //we don't actually toggle anything we just set it
tint = 3 //this'll get reset, but it won't handle vision updates properly otherwise
-/obj/item/clothing/glasses/wraith_spectacles/Initialize()
+/obj/item/clothing/glasses/wraith_spectacles/Initialize(mapload)
. = ..()
GLOB.all_clockwork_objects += src
diff --git a/code/modules/antagonists/clockcult/clock_mobs.dm b/code/modules/antagonists/clockcult/clock_mobs.dm
index 2f00fd4e4a..b6fe18986a 100644
--- a/code/modules/antagonists/clockcult/clock_mobs.dm
+++ b/code/modules/antagonists/clockcult/clock_mobs.dm
@@ -23,7 +23,7 @@
var/playstyle_string = "You are a bug, yell at whoever spawned you!"
var/empower_string = "You have nothing to empower, yell at the coders!" //Shown to the mob when the herald beacon activates
-/mob/living/simple_animal/hostile/clockwork/Initialize()
+/mob/living/simple_animal/hostile/clockwork/Initialize(mapload)
. = ..()
update_values()
diff --git a/code/modules/antagonists/clockcult/clock_mobs/clockwork_guardian.dm b/code/modules/antagonists/clockcult/clock_mobs/clockwork_guardian.dm
index 5060f516c7..a1f9a7fa8d 100644
--- a/code/modules/antagonists/clockcult/clock_mobs/clockwork_guardian.dm
+++ b/code/modules/antagonists/clockcult/clock_mobs/clockwork_guardian.dm
@@ -34,7 +34,7 @@
Stay near your host to protect and heal them; being too far from your host will rapidly cause you massive damage. Recall to your host if you are too weak and believe you cannot continue \
fighting safely. As a final note, you should probably avoid harming any fellow servants of Ratvar.
"
-/mob/living/simple_animal/hostile/clockwork/guardian/Initialize()
+/mob/living/simple_animal/hostile/clockwork/guardian/Initialize(mapload)
. = ..()
true_name = pick(possible_true_names)
diff --git a/code/modules/antagonists/clockcult/clock_scripture.dm b/code/modules/antagonists/clockcult/clock_scripture.dm
index 6922c7cd81..feb724dceb 100644
--- a/code/modules/antagonists/clockcult/clock_scripture.dm
+++ b/code/modules/antagonists/clockcult/clock_scripture.dm
@@ -310,7 +310,7 @@ Judgement 80k power or nine converts
var/datum/progressbar/progbar
/datum/clockwork_scripture/ranged_ability/Destroy()
- qdel(progbar)
+ progbar.end_progress()
return ..()
/datum/clockwork_scripture/ranged_ability/scripture_effects()
@@ -333,7 +333,7 @@ Judgement 80k power or nine converts
(allow_mobility || (can_recite() && T == get_turf(invoker))))
if(progbar)
if(slab.slab_ability.in_progress)
- qdel(progbar)
+ progbar.end_progress()
else
progbar.update(end_time - world.time)
stoplag(1)
diff --git a/code/modules/antagonists/clockcult/clock_scriptures/scripture_applications.dm b/code/modules/antagonists/clockcult/clock_scriptures/scripture_applications.dm
index e251fb41e9..ae524ac257 100644
--- a/code/modules/antagonists/clockcult/clock_scriptures/scripture_applications.dm
+++ b/code/modules/antagonists/clockcult/clock_scriptures/scripture_applications.dm
@@ -207,20 +207,20 @@
/datum/clockwork_scripture/create_object/summon_arbiter
descname = "Powerful Assault Mech"
name = "Summon Neovgre, the Anima Bulwark"
- desc = "Calls forth the mighty Anima Bulwark, a mech with superior defensive and offensive capabilities. It will \
+ desc = "Calls forth the mighty Anima Bulwark, a two-person mech with superior defensive and offensive capabilities. It will \
steadily regenerate HP and triple its regeneration speed while standing \
on a clockwork tile. It will automatically draw power from nearby sigils of \
transmission should the need arise. Its Arbiter laser cannon can decimate foes \
from a range and is capable of smashing through any barrier presented to it. \
- Be warned however, choosing to pilot Neovgre is a lifetime commitment, once you are \
- in you cannot leave and when it is destroyed it will explode catastrophically, with you inside."
+ Be warned however, choosing to pilot or man Neovgre is a lifetime commitment, once you are \
+ in you cannot leave and when it is destroyed it will explode catastrophically, with everyone inside."
invocations = list("By the strength of the alloy...!!", "...call forth the Arbiter!!")
channel_time = 200 // This is a strong fucking weapon, 20 seconds channel time is getting off light I tell ya.
power_cost = 75000 //75 KW
usage_tip = "Neovgre is a powerful mech that will crush your enemies!"
invokers_required = 5
multiple_invokers_used = TRUE
- object_path = /obj/mecha/combat/neovgre
+ object_path = /obj/vehicle/sealed/mecha/combat/neovgre
tier = SCRIPTURE_APPLICATION
primary_component = BELLIGERENT_EYE
sort_priority = 8
diff --git a/code/modules/antagonists/clockcult/clock_structure.dm b/code/modules/antagonists/clockcult/clock_structure.dm
index 380e93f102..2884886e47 100644
--- a/code/modules/antagonists/clockcult/clock_structure.dm
+++ b/code/modules/antagonists/clockcult/clock_structure.dm
@@ -18,7 +18,7 @@
var/construction_value = 0 //How much value the structure contributes to the overall "power" of the structures on the station
var/immune_to_servant_attacks = FALSE //if we ignore attacks from servants of ratvar instead of taking damage
-/obj/structure/destructible/clockwork/Initialize()
+/obj/structure/destructible/clockwork/Initialize(mapload)
. = ..()
change_construction_value(construction_value)
GLOB.all_clockwork_objects += src
@@ -72,11 +72,6 @@
return FALSE
return ..()
-/obj/structure/destructible/clockwork/mech_melee_attack(obj/mecha/M)
- if(M.occupant && is_servant_of_ratvar(M.occupant) && immune_to_servant_attacks)
- return FALSE
- return ..()
-
/obj/structure/destructible/clockwork/proc/get_efficiency_mod()
if(GLOB.ratvar_awakens)
return 2
@@ -134,7 +129,7 @@
density = FALSE
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF | FREEZE_PROOF
-/obj/structure/destructible/clockwork/massive/Initialize()
+/obj/structure/destructible/clockwork/massive/Initialize(mapload)
. = ..()
GLOB.poi_list += src
diff --git a/code/modules/antagonists/clockcult/clock_structures/_trap_object.dm b/code/modules/antagonists/clockcult/clock_structures/_trap_object.dm
index 47a37583ba..29b8a1f010 100644
--- a/code/modules/antagonists/clockcult/clock_structures/_trap_object.dm
+++ b/code/modules/antagonists/clockcult/clock_structures/_trap_object.dm
@@ -5,7 +5,7 @@
clockwork_desc = "A trap that shouldn't exist, and you should report this as a bug."
var/list/wired_to
-/obj/structure/destructible/clockwork/trap/Initialize()
+/obj/structure/destructible/clockwork/trap/Initialize(mapload)
. = ..()
wired_to = list()
@@ -80,7 +80,7 @@
break_message = "The trigger breaks apart!"
density = FALSE
-/obj/structure/destructible/clockwork/trap/trigger/Initialize()
+/obj/structure/destructible/clockwork/trap/trigger/Initialize(mapload)
. = ..()
for(var/obj/structure/destructible/clockwork/trap/T in get_turf(src))
if(!istype(T, /obj/structure/destructible/clockwork/trap/trigger))
diff --git a/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm b/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm
index 44c57b77ad..92225990dd 100644
--- a/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm
+++ b/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm
@@ -33,7 +33,7 @@
var/recalls_remaining = 1
var/recalling
-/obj/structure/destructible/clockwork/massive/celestial_gateway/Initialize()
+/obj/structure/destructible/clockwork/massive/celestial_gateway/Initialize(mapload)
. = ..()
INVOKE_ASYNC(src, .proc/spawn_animation)
glow = new(get_turf(src))
@@ -199,7 +199,7 @@
/obj/structure/destructible/clockwork/massive/celestial_gateway/ex_act(severity, target, origin)
var/damage = max((obj_integrity * 0.7) / severity, 100) //requires multiple bombs to take down
- take_damage(damage, BRUTE, "bomb", 0)
+ take_damage(damage, BRUTE, BOMB, 0)
/obj/structure/destructible/clockwork/massive/celestial_gateway/proc/get_arrival_time(var/deciseconds = TRUE)
if(seconds_until_activation)
@@ -301,7 +301,7 @@
for(var/obj/O in orange(1, src))
if(!O.pulledby && !iseffect(O) && O.density)
if(!step_away(O, src, 2) || get_dist(O, src) < 2)
- O.take_damage(50, BURN, "bomb")
+ O.take_damage(50, BURN, BOMB)
O.update_icon()
conversion_pulse() //Converts the nearby area into clockcult-style
diff --git a/code/modules/antagonists/clockcult/clock_structures/clockwork_obelisk.dm b/code/modules/antagonists/clockcult/clock_structures/clockwork_obelisk.dm
index 2b4b797b4d..bb05427e25 100644
--- a/code/modules/antagonists/clockcult/clock_structures/clockwork_obelisk.dm
+++ b/code/modules/antagonists/clockcult/clock_structures/clockwork_obelisk.dm
@@ -16,7 +16,7 @@
var/hierophant_cost = MIN_CLOCKCULT_POWER //how much it costs to broadcast with large text
var/gateway_cost = 2000 //how much it costs to open a gateway
-/obj/structure/destructible/clockwork/powered/clockwork_obelisk/Initialize()
+/obj/structure/destructible/clockwork/powered/clockwork_obelisk/Initialize(mapload)
. = ..()
toggle(1)
diff --git a/code/modules/antagonists/clockcult/clock_structures/heralds_beacon.dm b/code/modules/antagonists/clockcult/clock_structures/heralds_beacon.dm
index f8a3afbf91..8245f48a84 100644
--- a/code/modules/antagonists/clockcult/clock_structures/heralds_beacon.dm
+++ b/code/modules/antagonists/clockcult/clock_structures/heralds_beacon.dm
@@ -17,7 +17,7 @@
var/votes_needed = 0 //How many votes are needed to activate the beacon
var/available = FALSE //If the beacon can be used
-/obj/structure/destructible/clockwork/heralds_beacon/Initialize()
+/obj/structure/destructible/clockwork/heralds_beacon/Initialize(mapload)
. = ..()
voters = list()
START_PROCESSING(SSprocessing, src)
diff --git a/code/modules/antagonists/clockcult/clock_structures/ocular_warden.dm b/code/modules/antagonists/clockcult/clock_structures/ocular_warden.dm
index 00db2b0d72..c81b05145e 100644
--- a/code/modules/antagonists/clockcult/clock_structures/ocular_warden.dm
+++ b/code/modules/antagonists/clockcult/clock_structures/ocular_warden.dm
@@ -16,7 +16,7 @@
var/atom/movable/target
var/list/idle_messages = list(" sulkily glares around.", " lazily drifts from side to side.", " looks around for something to burn.", " slowly turns in circles.")
-/obj/structure/destructible/clockwork/ocular_warden/Initialize()
+/obj/structure/destructible/clockwork/ocular_warden/Initialize(mapload)
. = ..()
START_PROCESSING(SSfastprocess, src)
@@ -76,8 +76,8 @@
L.adjust_fire_stacks(damage_per_tick)
L.IgniteMob()
else if(ismecha(target))
- var/obj/mecha/M = target
- M.take_damage(damage_per_tick * get_efficiency_mod(), BURN, "melee", 1, get_dir(src, M))
+ var/obj/vehicle/sealed/mecha/M = target
+ M.take_damage(damage_per_tick * get_efficiency_mod(), BURN, MELEE, 1, get_dir(src, M))
new /obj/effect/temp_visual/ratvar/ocular_warden(get_turf(target))
@@ -91,8 +91,8 @@
var/mob/living/L = target
to_chat(L, "\"I SEE YOU!\"\n[src]'s gaze [GLOB.ratvar_awakens ? "melts you alive" : "burns you"]!")
else if(ismecha(target))
- var/obj/mecha/M = target
- to_chat(M.occupant, "\"I SEE YOU!\"" )
+ var/obj/vehicle/sealed/mecha/M = target
+ to_chat(M.occupants, "\"I SEE YOU!\"" )
else if(prob(0.5)) //Extremely low chance because of how fast the subsystem it uses processes
if(prob(50))
visible_message("[src][pick(idle_messages)]")
@@ -131,8 +131,11 @@
. += L
var/list/viewcache = list()
for(var/N in GLOB.mechas_list)
- var/obj/mecha/M = N
- if(get_dist(M, src) <= sight_range && M.occupant && !is_servant_of_ratvar(M.occupant))
+ var/obj/vehicle/sealed/mecha/M = N
+ if(get_dist(M, src) <= sight_range && LAZYLEN(M.occupants))
+ for(var/mob/living/MB in M.occupants)
+ if(is_servant_of_ratvar(MB))
+ return
if(!length(viewcache))
for (var/obj/Z in view(sight_range, src))
viewcache += Z
diff --git a/code/modules/antagonists/clockcult/clock_structures/ratvar_the_clockwork_justicar.dm b/code/modules/antagonists/clockcult/clock_structures/ratvar_the_clockwork_justicar.dm
index 51f8dc7101..da04353974 100644
--- a/code/modules/antagonists/clockcult/clock_structures/ratvar_the_clockwork_justicar.dm
+++ b/code/modules/antagonists/clockcult/clock_structures/ratvar_the_clockwork_justicar.dm
@@ -17,7 +17,7 @@
var/convert_range = 10
obj_flags = CAN_BE_HIT | DANGEROUS_POSSESSION
-/obj/structure/destructible/clockwork/massive/ratvar/Initialize()
+/obj/structure/destructible/clockwork/massive/ratvar/Initialize(mapload)
. = ..()
GLOB.ratvar_awakens++
for(var/obj/O in GLOB.all_clockwork_objects)
diff --git a/code/modules/antagonists/clockcult/clock_structures/reflector.dm b/code/modules/antagonists/clockcult/clock_structures/reflector.dm
index e734429524..7152953c6c 100644
--- a/code/modules/antagonists/clockcult/clock_structures/reflector.dm
+++ b/code/modules/antagonists/clockcult/clock_structures/reflector.dm
@@ -16,7 +16,7 @@
var/ini_dir = null
-/obj/structure/destructible/clockwork/reflector/Initialize()
+/obj/structure/destructible/clockwork/reflector/Initialize(mapload)
. = ..()
allowed_projectile_typecache = typecacheof(allowed_projectile_typecache)
diff --git a/code/modules/antagonists/clockcult/clock_structures/stargazer.dm b/code/modules/antagonists/clockcult/clock_structures/stargazer.dm
index dea8f428ba..178b78ff13 100644
--- a/code/modules/antagonists/clockcult/clock_structures/stargazer.dm
+++ b/code/modules/antagonists/clockcult/clock_structures/stargazer.dm
@@ -16,7 +16,7 @@
light_color = "#DAAA18"
var/star_light_star_bright = FALSE //If this stargazer can see starlight
-/obj/structure/destructible/clockwork/stargazer/Initialize()
+/obj/structure/destructible/clockwork/stargazer/Initialize(mapload)
. = ..()
START_PROCESSING(SSprocessing, src)
diff --git a/code/modules/antagonists/clockcult/clock_structures/taunting_trail.dm b/code/modules/antagonists/clockcult/clock_structures/taunting_trail.dm
index 98b3c32b0f..5305758b25 100644
--- a/code/modules/antagonists/clockcult/clock_structures/taunting_trail.dm
+++ b/code/modules/antagonists/clockcult/clock_structures/taunting_trail.dm
@@ -14,7 +14,7 @@
debris = list()
var/timerid
-/obj/structure/destructible/clockwork/taunting_trail/Initialize()
+/obj/structure/destructible/clockwork/taunting_trail/Initialize(mapload)
. = ..()
timerid = QDEL_IN(src, 15)
var/obj/structure/destructible/clockwork/taunting_trail/Tt = locate(/obj/structure/destructible/clockwork/taunting_trail) in loc
diff --git a/code/modules/antagonists/clockcult/clock_structures/trap_triggers/pressure_sensor_mech.dm b/code/modules/antagonists/clockcult/clock_structures/trap_triggers/pressure_sensor_mech.dm
index 21735ad6d7..55143fae66 100644
--- a/code/modules/antagonists/clockcult/clock_structures/trap_triggers/pressure_sensor_mech.dm
+++ b/code/modules/antagonists/clockcult/clock_structures/trap_triggers/pressure_sensor_mech.dm
@@ -9,12 +9,14 @@
/obj/structure/destructible/clockwork/trap/trigger/pressure_sensor/mech/Crossed(atom/movable/AM)
. = ..()
- if(!istype(AM,/obj/mecha/))
+ if(!istype(AM,/obj/vehicle/sealed/mecha/))
return
- var/obj/mecha/M = AM
- if(M.occupant && is_servant_of_ratvar(M.occupant))
- return
+ var/obj/vehicle/sealed/mecha/M = AM
+ if(LAZYLEN(M.occupants))
+ for(var/mob/living/MB in M.occupants)
+ if(is_servant_of_ratvar(MB))
+ return
audible_message("*click*")
playsound(src, 'sound/items/screwdriver2.ogg', 50, TRUE)
activate()
diff --git a/code/modules/antagonists/clockcult/clock_structures/traps/brass_skewer.dm b/code/modules/antagonists/clockcult/clock_structures/traps/brass_skewer.dm
index e8ae133ede..a7c1f81f06 100644
--- a/code/modules/antagonists/clockcult/clock_structures/traps/brass_skewer.dm
+++ b/code/modules/antagonists/clockcult/clock_structures/traps/brass_skewer.dm
@@ -13,7 +13,7 @@
var/wiggle_wiggle
var/mutable_appearance/impale_overlay //This is applied to any mob impaled so that they visibly have the skewer coming through their chest
-/obj/structure/destructible/clockwork/trap/brass_skewer/Initialize()
+/obj/structure/destructible/clockwork/trap/brass_skewer/Initialize(mapload)
. = ..()
START_PROCESSING(SSfastprocess, src)
@@ -68,9 +68,9 @@
mouse_opacity = MOUSE_OPACITY_OPAQUE //So players can interact with the tile it's on to pull them off
buckle_mob(squirrel, TRUE)
else
- var/obj/mecha/M = locate() in get_turf(src)
+ var/obj/vehicle/sealed/mecha/M = locate() in get_turf(src)
if(M)
- M.take_damage(50,BRUTE,"melee")
+ M.take_damage(50,BRUTE,MELEE)
M.visible_message("A massive brass spike erupts from the ground, penetrating \the [M] and shattering the trap into pieces!")
addtimer(CALLBACK(src, .proc/take_damage, max_integrity), 1)
else
diff --git a/code/modules/antagonists/clockcult/clock_structures/wall_gear.dm b/code/modules/antagonists/clockcult/clock_structures/wall_gear.dm
index 7e4822b622..20cf8711e0 100644
--- a/code/modules/antagonists/clockcult/clock_structures/wall_gear.dm
+++ b/code/modules/antagonists/clockcult/clock_structures/wall_gear.dm
@@ -15,7 +15,7 @@
/obj/structure/destructible/clockwork/wall_gear/displaced
anchored = FALSE
-/obj/structure/destructible/clockwork/wall_gear/Initialize()
+/obj/structure/destructible/clockwork/wall_gear/Initialize(mapload)
. = ..()
new /obj/effect/temp_visual/ratvar/gear(get_turf(src))
diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm
index 20e41828d4..a522285210 100644
--- a/code/modules/antagonists/cult/cult_items.dm
+++ b/code/modules/antagonists/cult/cult_items.dm
@@ -39,7 +39,7 @@
armour_penetration = 35
actions_types = list(/datum/action/item_action/cult_dagger)
-/obj/item/melee/cultblade/dagger/Initialize()
+/obj/item/melee/cultblade/dagger/Initialize(mapload)
. = ..()
var/image/I = image(icon = 'icons/effects/blood.dmi' , icon_state = null, loc = src)
I.override = TRUE
@@ -62,7 +62,7 @@
hitsound = 'sound/weapons/bladeslice.ogg'
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "rended")
-/obj/item/melee/cultblade/Initialize()
+/obj/item/melee/cultblade/Initialize(mapload)
. = ..()
AddComponent(/datum/component/butchering, 40, 100)
AddElement(/datum/element/sword_point)
@@ -87,7 +87,7 @@
item_flags = NEEDS_PERMIT | DROPDEL
flags_1 = NONE
-/obj/item/melee/cultblade/ghost/Initialize()
+/obj/item/melee/cultblade/ghost/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CULT_TRAIT)
@@ -131,7 +131,7 @@
var/spin_cooldown = 250
var/dash_toggled = TRUE
-/obj/item/cult_bastard/Initialize()
+/obj/item/cult_bastard/Initialize(mapload)
. = ..()
set_light(4)
jaunt = new(src)
@@ -297,7 +297,7 @@
desc = "A torn, dust-caked hood. Strange letters line the inside."
flags_inv = HIDEFACE|HIDEHAIR|HIDEEARS
flags_cover = HEADCOVERSEYES
- armor = list("melee" = 40, "bullet" = 30, "laser" = 40,"energy" = 20, "bomb" = 65, "bio" = 10, "rad" = 0, "fire" = 10, "acid" = 10)
+ armor = list(MELEE = 40, BULLET = 30, LASER = 40,ENERGY = 20, BOMB = 65, BIO = 10, RAD = 0, FIRE = 10, ACID = 10)
cold_protection = HEAD
min_cold_protection_temperature = HELMET_MIN_TEMP_PROTECT
heat_protection = HEAD
@@ -310,7 +310,7 @@
item_state = "cultrobes"
body_parts_covered = CHEST|GROIN|LEGS|ARMS
allowed = list(/obj/item/tome, /obj/item/melee/cultblade)
- armor = list("melee" = 40, "bullet" = 30, "laser" = 40,"energy" = 20, "bomb" = 65, "bio" = 10, "rad" = 0, "fire" = 10, "acid" = 10)
+ armor = list(MELEE = 40, BULLET = 30, LASER = 40,ENERGY = 20, BOMB = 65, BIO = 10, RAD = 0, FIRE = 10, ACID = 10)
flags_inv = HIDEJUMPSUIT
cold_protection = CHEST|GROIN|LEGS|ARMS
min_cold_protection_temperature = ARMOR_MIN_TEMP_PROTECT
@@ -326,7 +326,7 @@
/obj/item/clothing/head/culthood/alt/ghost
item_flags = DROPDEL
-/obj/item/clothing/head/culthood/alt/ghost/Initialize()
+/obj/item/clothing/head/culthood/alt/ghost/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CULT_TRAIT)
@@ -340,7 +340,7 @@
/obj/item/clothing/suit/cultrobes/alt/ghost
item_flags = DROPDEL
-/obj/item/clothing/suit/cultrobes/alt/ghost/Initialize()
+/obj/item/clothing/suit/cultrobes/alt/ghost/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CULT_TRAIT)
@@ -350,7 +350,7 @@
item_state = "magus"
desc = "A helm worn by the followers of Nar'Sie."
flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDEEARS|HIDEEYES|HIDESNOUT
- armor = list("melee" = 30, "bullet" = 30, "laser" = 30,"energy" = 20, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 10, "acid" = 10)
+ armor = list(MELEE = 30, BULLET = 30, LASER = 30,ENERGY = 20, BOMB = 0, BIO = 0, RAD = 0, FIRE = 10, ACID = 10)
flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH
mutantrace_variation = STYLE_MUZZLE
@@ -361,7 +361,7 @@
item_state = "magusred"
body_parts_covered = CHEST|GROIN|LEGS|ARMS
allowed = list(/obj/item/tome, /obj/item/melee/cultblade)
- armor = list("melee" = 50, "bullet" = 30, "laser" = 50,"energy" = 20, "bomb" = 25, "bio" = 10, "rad" = 0, "fire" = 10, "acid" = 10)
+ armor = list(MELEE = 50, BULLET = 30, LASER = 50,ENERGY = 20, BOMB = 25, BIO = 10, RAD = 0, FIRE = 10, ACID = 10)
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
/obj/item/clothing/head/helmet/space/hardsuit/cult
@@ -369,7 +369,7 @@
desc = "A heavily-armored helmet worn by warriors of the Nar'Sien cult. It can withstand hard vacuum."
icon_state = "cult_helmet"
item_state = "cult_helmet"
- armor = list("melee" = 60, "bullet" = 50, "laser" = 30,"energy" = 15, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 40, "acid" = 75)
+ armor = list(MELEE = 60, BULLET = 50, LASER = 30,ENERGY = 15, BOMB = 30, BIO = 30, RAD = 30, FIRE = 40, ACID = 75)
brightness_on = 0
actions_types = list()
@@ -385,7 +385,7 @@
desc = "A heavily-armored exosuit worn by warriors of the Nar'Sien cult. It can withstand hard vacuum."
w_class = WEIGHT_CLASS_BULKY
allowed = list(/obj/item/tome, /obj/item/melee/cultblade, /obj/item/tank/internals/)
- armor = list("melee" = 70, "bullet" = 50, "laser" = 30,"energy" = 15, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 40, "acid" = 75)
+ armor = list(MELEE = 70, BULLET = 50, LASER = 30,ENERGY = 15, BOMB = 30, BIO = 30, RAD = 30, FIRE = 40, ACID = 75)
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/cult
/obj/item/clothing/suit/space/hardsuit/cult/ComponentInitialize()
@@ -413,7 +413,7 @@
icon_state = "cult_armor"
item_state = "cult_armor"
w_class = WEIGHT_CLASS_BULKY
- armor = list("melee" = 50, "bullet" = 40, "laser" = 50,"energy" = 30, "bomb" = 50, "bio" = 30, "rad" = 30, "fire" = 50, "acid" = 60)
+ armor = list(MELEE = 50, BULLET = 40, LASER = 50,ENERGY = 30, BOMB = 50, BIO = 30, RAD = 30, FIRE = 50, ACID = 60)
body_parts_covered = CHEST|GROIN|LEGS|ARMS
allowed = list(/obj/item/tome, /obj/item/melee/cultblade)
var/current_charges = 3
@@ -423,7 +423,7 @@
name = "empowered cultist armor"
desc = "Empowered garb which creates a powerful shield around the user."
icon_state = "cult_hoodalt"
- armor = list("melee" = 50, "bullet" = 40, "laser" = 50,"energy" = 30, "bomb" = 50, "bio" = 30, "rad" = 30, "fire" = 50, "acid" = 50)
+ armor = list(MELEE = 50, BULLET = 40, LASER = 50,ENERGY = 30, BOMB = 50, BIO = 30, RAD = 30, FIRE = 50, ACID = 50)
body_parts_covered = HEAD
flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS
@@ -473,7 +473,7 @@
flags_inv = HIDEJUMPSUIT
allowed = list(/obj/item/tome, /obj/item/melee/cultblade)
body_parts_covered = CHEST|GROIN|LEGS|ARMS
- armor = list("melee" = -50, "bullet" = -50, "laser" = -50,"energy" = -50, "bomb" = -50, "bio" = -50, "rad" = -50, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = -50, BULLET = -50, LASER = -50,ENERGY = -50, BOMB = -50, BIO = -50, RAD = -50, FIRE = 0, ACID = 0)
slowdown = -1
hoodtype = /obj/item/clothing/head/hooded/berserkerhood
@@ -483,7 +483,7 @@
icon_state = "culthood"
body_parts_covered = HEAD
flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS
- armor = list("melee" = -50, "bullet" = -50, "laser" = -50, "energy" = -50, "bomb" = -50, "bio" = -50, "rad" = -50, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = -50, BULLET = -50, LASER = -50, ENERGY = -50, BOMB = -50, BIO = -50, RAD = -50, FIRE = 0, ACID = 0)
/obj/item/clothing/suit/hooded/cultrobes/berserker/equipped(mob/living/user, slot)
..()
@@ -716,7 +716,7 @@
var/wielded = FALSE // track wielded status on item
-/obj/item/cult_spear/Initialize()
+/obj/item/cult_spear/Initialize(mapload)
. = ..()
RegisterSignal(src, COMSIG_TWOHANDED_WIELD, .proc/on_wield)
RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, .proc/on_unwield)
@@ -874,7 +874,7 @@
var/firing = FALSE
var/angle
-/obj/item/blood_beam/Initialize()
+/obj/item/blood_beam/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CULT_TRAIT)
diff --git a/code/modules/antagonists/cult/cult_structures.dm b/code/modules/antagonists/cult/cult_structures.dm
index a2f283ec67..3a4079d67f 100644
--- a/code/modules/antagonists/cult/cult_structures.dm
+++ b/code/modules/antagonists/cult/cult_structures.dm
@@ -89,7 +89,7 @@
var/static/image/radial_shell = image(icon = 'icons/obj/wizard.dmi', icon_state = "construct-cult")
var/static/image/radial_unholy_water = image(icon = 'icons/obj/drinks.dmi', icon_state = "holyflask")
-/obj/structure/destructible/cult/talisman/Initialize()
+/obj/structure/destructible/cult/talisman/Initialize(mapload)
. = ..()
radial_unholy_water.color = "#333333"
diff --git a/code/modules/antagonists/cult/ritual.dm b/code/modules/antagonists/cult/ritual.dm
index 98889169c6..6caa13dcff 100644
--- a/code/modules/antagonists/cult/ritual.dm
+++ b/code/modules/antagonists/cult/ritual.dm
@@ -5,7 +5,7 @@ This file contains the cult dagger and rune list code
*/
-/obj/item/melee/cultblade/dagger/Initialize()
+/obj/item/melee/cultblade/dagger/Initialize(mapload)
. = ..()
if(!LAZYLEN(GLOB.rune_types))
GLOB.rune_types = list()
diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm
index 3b73a998e7..809a69d393 100644
--- a/code/modules/antagonists/cult/runes.dm
+++ b/code/modules/antagonists/cult/runes.dm
@@ -832,7 +832,7 @@ structure_check() searches for nearby cultist structures required for the invoca
var/ghost_limit = 3
var/ghosts = 0
-/obj/effect/rune/manifest/Initialize()
+/obj/effect/rune/manifest/Initialize(mapload)
. = ..()
diff --git a/code/modules/antagonists/devil/imp/imp.dm b/code/modules/antagonists/devil/imp/imp.dm
index f7f55456f7..c0abe504a5 100644
--- a/code/modules/antagonists/devil/imp/imp.dm
+++ b/code/modules/antagonists/devil/imp/imp.dm
@@ -44,7 +44,7 @@
Though you are not obligated to help, perhaps by aiding a higher ranking devil, you might just get a promotion. However, you are incapable \
of intentionally harming a fellow devil."
-/mob/living/simple_animal/imp/Initialize()
+/mob/living/simple_animal/imp/Initialize(mapload)
..()
boost = world.time + 30
diff --git a/code/modules/antagonists/devil/true_devil/_true_devil.dm b/code/modules/antagonists/devil/true_devil/_true_devil.dm
index 619129f679..a70d518f59 100644
--- a/code/modules/antagonists/devil/true_devil/_true_devil.dm
+++ b/code/modules/antagonists/devil/true_devil/_true_devil.dm
@@ -25,7 +25,7 @@
var/mob/living/oldform
var/list/devil_overlays[DEVIL_TOTAL_LAYERS]
-/mob/living/carbon/true_devil/Initialize()
+/mob/living/carbon/true_devil/Initialize(mapload)
create_bodyparts() //initialize bodyparts
create_internal_organs()
grant_all_languages()
diff --git a/code/modules/antagonists/eldritch_cult/eldritch_effects.dm b/code/modules/antagonists/eldritch_cult/eldritch_effects.dm
index 3d6059dfe3..6640135f37 100644
--- a/code/modules/antagonists/eldritch_cult/eldritch_effects.dm
+++ b/code/modules/antagonists/eldritch_cult/eldritch_effects.dm
@@ -8,7 +8,7 @@
///Used mainly for summoning ritual to prevent spamming the rune to create millions of monsters.
var/is_in_use = FALSE
-/obj/effect/eldritch/Initialize()
+/obj/effect/eldritch/Initialize(mapload)
. = ..()
var/image/I = image(icon = 'icons/effects/eldritch.dmi', icon_state = null, loc = src)
I.override = TRUE
@@ -216,7 +216,7 @@
resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF
alpha = 0
-/obj/effect/broken_illusion/Initialize()
+/obj/effect/broken_illusion/Initialize(mapload)
. = ..()
addtimer(CALLBACK(src,.proc/show_presence),15 SECONDS)
addtimer(CALLBACK(src,.proc/remove_presence),195 SECONDS)
@@ -295,7 +295,7 @@
///Tracked image
var/image/img
-/obj/effect/reality_smash/Initialize()
+/obj/effect/reality_smash/Initialize(mapload)
. = ..()
GLOB.reality_smash_track.smashes += src
img = image(icon, src, image_state, OBJ_LAYER)
diff --git a/code/modules/antagonists/eldritch_cult/eldritch_items.dm b/code/modules/antagonists/eldritch_cult/eldritch_items.dm
index c0f3e2be7c..58e0193de5 100644
--- a/code/modules/antagonists/eldritch_cult/eldritch_items.dm
+++ b/code/modules/antagonists/eldritch_cult/eldritch_items.dm
@@ -8,7 +8,7 @@
var/mob/living/carbon/human/target
var/datum/antagonist/heretic/sac_targetter //The heretic who used this to acquire the current target - gets cleared when target gets sacrificed.
-/obj/item/living_heart/Initialize()
+/obj/item/living_heart/Initialize(mapload)
. = ..()
GLOB.living_heart_cache.Add(src) //Add is better than +=.
@@ -177,7 +177,7 @@
allowed = list(/obj/item/melee/sickly_blade, /obj/item/forbidden_book, /obj/item/living_heart)
hoodtype = /obj/item/clothing/head/hooded/cult_hoodie/eldritch
// slightly better than normal cult robes
- armor = list("melee" = 50, "bullet" = 50, "laser" = 50,"energy" = 50, "bomb" = 35, "bio" = 20, "rad" = 0, "fire" = 20, "acid" = 20)
+ armor = list(MELEE = 50, BULLET = 50, LASER = 50,ENERGY = 50, BOMB = 35, BIO = 20, RAD = 0, FIRE = 20, ACID = 20)
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON
/obj/item/reagent_containers/glass/beaker/eldritch
@@ -193,7 +193,7 @@
flags_inv = NONE
flags_cover = NONE
desc = "Black like tar, doesn't reflect any light. Runic symbols line the outside, with each flash you lose comprehension of what you are seeing."
- armor = list("melee" = 30, "bullet" = 30, "laser" = 30,"energy" = 30, "bomb" = 15, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 30, BULLET = 30, LASER = 30,ENERGY = 30, BOMB = 15, BIO = 0, RAD = 0, FIRE = 0, ACID = 0)
obj_flags = NONE | EXAMINE_SKIP
/obj/item/clothing/suit/hooded/cultrobes/void
@@ -205,7 +205,7 @@
hoodtype = /obj/item/clothing/head/hooded/cult_hoodie/void
flags_inv = NONE
// slightly worse than normal cult robes
- armor = list("melee" = 30, "bullet" = 30, "laser" = 30,"energy" = 30, "bomb" = 15, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 30, BULLET = 30, LASER = 30,ENERGY = 30, BOMB = 15, BIO = 0, RAD = 0, FIRE = 0, ACID = 0)
pocket_storage_component_path = /datum/component/storage/concrete/pockets/void_cloak
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON
@@ -310,7 +310,7 @@
. += "This item can carve 'Grasping carving' - when stepped on it causes heavy damage to the legs and stuns for 5 seconds."
. += "This item can carve 'Mad carving' - when stepped on it causes dizzyness, jiterryness, temporary blindness, confusion , stuttering and slurring."
-/obj/item/melee/rune_knife/Initialize()
+/obj/item/melee/rune_knife/Initialize(mapload)
. = ..()
linked_action = new(src)
diff --git a/code/modules/antagonists/eldritch_cult/eldritch_magic.dm b/code/modules/antagonists/eldritch_cult/eldritch_magic.dm
index 158acc0071..61ff54c5e9 100644
--- a/code/modules/antagonists/eldritch_cult/eldritch_magic.dm
+++ b/code/modules/antagonists/eldritch_cult/eldritch_magic.dm
@@ -402,11 +402,11 @@
new /obj/effect/hotspot(T)
T.hotspot_expose(700,50,1)
// deals damage to mechs
- for(var/obj/mecha/M in T.contents)
+ for(var/obj/vehicle/sealed/mecha/M in T.contents)
if(M in hit_list)
continue
hit_list += M
- M.take_damage(45, BURN, "melee", 1)
+ M.take_damage(45, BURN, MELEE, 1)
sleep(1.5)
/obj/effect/proc_holder/spell/targeted/shapeshift/eldritch
@@ -702,7 +702,7 @@
duration = 1 MINUTES
layer = LOW_SIGIL_LAYER
-/obj/effect/temp_visual/glowing_rune/Initialize()
+/obj/effect/temp_visual/glowing_rune/Initialize(mapload)
. = ..()
pixel_y = rand(-6,6)
pixel_x = rand(-6,6)
diff --git a/code/modules/antagonists/gang/cellphone.dm b/code/modules/antagonists/gang/cellphone.dm
index f7971300f9..5cba485799 100644
--- a/code/modules/antagonists/gang/cellphone.dm
+++ b/code/modules/antagonists/gang/cellphone.dm
@@ -9,7 +9,7 @@ GLOBAL_LIST_EMPTY(gangster_cell_phones)
var/gang_id = "Grove Street Families"
var/activated = FALSE
-/obj/item/gangster_cellphone/Initialize()
+/obj/item/gangster_cellphone/Initialize(mapload)
. = ..()
GLOB.gangster_cell_phones += src
flags_1 |= HEAR_1
diff --git a/code/modules/antagonists/morph/morph.dm b/code/modules/antagonists/morph/morph.dm
index 8352b8f238..fbee439dda 100644
--- a/code/modules/antagonists/morph/morph.dm
+++ b/code/modules/antagonists/morph/morph.dm
@@ -52,7 +52,7 @@
You can attack any item or dead creature to consume it - creatures will fully restore your health. \
Finally, you can restore yourself to your original form while morphed by shift-clicking yourself."
-/mob/living/simple_animal/hostile/morph/Initialize()
+/mob/living/simple_animal/hostile/morph/Initialize(mapload)
. = ..()
src.AddElement(/datum/element/ventcrawling, given_tier = VENTCRAWLER_ALWAYS)
diff --git a/code/modules/antagonists/nukeop/equipment/borgchameleon.dm b/code/modules/antagonists/nukeop/equipment/borgchameleon.dm
index b3c31152a5..f40ecc27cf 100644
--- a/code/modules/antagonists/nukeop/equipment/borgchameleon.dm
+++ b/code/modules/antagonists/nukeop/equipment/borgchameleon.dm
@@ -32,7 +32,7 @@
var/list/engymodels = list("Default", "Default - Treads", "Heavy", "Sleek", "Marina", "Can", "Spider", "Loader","Handy", "Pup Dozer", "Vale")
-/obj/item/borg_chameleon/Initialize()
+/obj/item/borg_chameleon/Initialize(mapload)
. = ..()
friendlyName = pick(GLOB.ai_names)
diff --git a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm
index eb98635e65..1d8c205e11 100644
--- a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm
+++ b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm
@@ -31,7 +31,7 @@
var/proper_bomb = TRUE //Please
var/obj/effect/countdown/nuclearbomb/countdown
-/obj/machinery/nuclearbomb/Initialize()
+/obj/machinery/nuclearbomb/Initialize(mapload)
. = ..()
countdown = new(src)
GLOB.nuke_list += src
@@ -507,7 +507,7 @@
proper_bomb = FALSE
var/obj/structure/reagent_dispensers/beerkeg/keg
-/obj/machinery/nuclearbomb/beer/Initialize()
+/obj/machinery/nuclearbomb/beer/Initialize(mapload)
. = ..()
keg = new(src)
QDEL_NULL(core)
@@ -612,14 +612,14 @@ This is here to make the tiles around the station mininuke change when it's arme
icon_state = "nucleardisk"
persistence_replacement = /obj/item/disk/nuclear/fake
max_integrity = 250
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 30, BIO = 0, RAD = 0, FIRE = 100, ACID = 100)
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
var/fake = FALSE
var/turf/lastlocation
var/last_disk_move
var/process_tick = 0
-/obj/item/disk/nuclear/Initialize()
+/obj/item/disk/nuclear/Initialize(mapload)
. = ..()
AddElement(/datum/element/bed_tuckable, 6, -6, 0)
diff --git a/code/modules/antagonists/nukeop/equipment/pinpointer.dm b/code/modules/antagonists/nukeop/equipment/pinpointer.dm
index 5b48951ed5..2b00f85e36 100644
--- a/code/modules/antagonists/nukeop/equipment/pinpointer.dm
+++ b/code/modules/antagonists/nukeop/equipment/pinpointer.dm
@@ -74,7 +74,7 @@
flags_1 = NONE
-/obj/item/pinpointer/syndicate_cyborg/Initialize()
+/obj/item/pinpointer/syndicate_cyborg/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CYBORG_ITEM_TRAIT)
@@ -91,7 +91,7 @@
target = closest_operative
..()
-/obj/item/pinpointer/spider_cyborg/Initialize()
+/obj/item/pinpointer/spider_cyborg/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CYBORG_ITEM_TRAIT)
diff --git a/code/modules/antagonists/slaughter/slaughter.dm b/code/modules/antagonists/slaughter/slaughter.dm
index c468862c8b..d2b698bce4 100644
--- a/code/modules/antagonists/slaughter/slaughter.dm
+++ b/code/modules/antagonists/slaughter/slaughter.dm
@@ -70,7 +70,7 @@
var/slam_mode = FALSE
var/datum/action/cooldown/slam
-/mob/living/simple_animal/slaughter/Initialize()
+/mob/living/simple_animal/slaughter/Initialize(mapload)
..()
var/obj/effect/proc_holder/spell/bloodcrawl/bloodspell = new
AddSpell(bloodspell)
@@ -282,7 +282,7 @@
T = find_safe_turf()
for(var/mob/living/M in consumed_mobs)
if(!M)
- continue
+ continue
M.forceMove(T)
if(M.revive(full_heal = TRUE, admin_revive = TRUE))
M.grab_ghost(force = TRUE)
diff --git a/code/modules/antagonists/swarmer/swarmer.dm b/code/modules/antagonists/swarmer/swarmer.dm
index 2d4ac88656..4c48ad81dd 100644
--- a/code/modules/antagonists/swarmer/swarmer.dm
+++ b/code/modules/antagonists/swarmer/swarmer.dm
@@ -30,7 +30,7 @@
3. Biological resources will be harvested at a later date; do not harm them.
"}
-/obj/effect/mob_spawn/swarmer/Initialize()
+/obj/effect/mob_spawn/swarmer/Initialize(mapload)
. = ..()
var/area/A = get_area(src)
if(A)
@@ -106,7 +106,7 @@
var/resources = 0 //Resource points, generated by consuming metal/glass
var/max_resources = 100
-/mob/living/simple_animal/hostile/swarmer/Initialize()
+/mob/living/simple_animal/hostile/swarmer/Initialize(mapload)
. = ..()
remove_verb(src, /mob/living/verb/pulled)
for(var/datum/atom_hud/data/diagnostic/diag_hud in GLOB.huds)
@@ -139,12 +139,12 @@
else
death()
-/mob/living/simple_animal/hostile/swarmer/CanPass(atom/movable/O)
+/mob/living/simple_animal/hostile/swarmer/CanAllowThrough(atom/movable/O)
+ . = ..()
if(istype(O, /obj/item/projectile/beam/disabler))//Allows for swarmers to fight as a group without wasting their shots hitting each other
return 1
if(isswarmer(O))
return 1
- ..()
////CTRL CLICK FOR SWARMERS AND SWARMER_ACT()'S////
/mob/living/simple_animal/hostile/swarmer/AttackingTarget()
@@ -607,7 +607,7 @@
icon_state = "disintegrate"
duration = 10
-/obj/effect/temp_visual/swarmer/disintegration/Initialize()
+/obj/effect/temp_visual/swarmer/disintegration/Initialize(mapload)
. = ..()
playsound(loc, "sparks", 100, 1)
@@ -698,11 +698,12 @@
light_range = MINIMUM_USEFUL_LIGHT_RANGE
max_integrity = 50
-/obj/structure/swarmer/blockade/CanPass(atom/movable/O)
+/obj/structure/swarmer/blockade/CanAllowThrough(atom/movable/O)
+ . = ..()
if(isswarmer(O))
- return 1
+ return TRUE
if(istype(O, /obj/item/projectile/beam/disabler))
- return 1
+ return TRUE
/mob/living/simple_animal/hostile/swarmer/proc/CreateSwarmer()
set name = "Replicate"
diff --git a/code/modules/antagonists/traitor/equipment/Malf_Modules.dm b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm
index fcc8bcade8..e5fa38a415 100644
--- a/code/modules/antagonists/traitor/equipment/Malf_Modules.dm
+++ b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm
@@ -355,7 +355,7 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list(
var/detonation_timer
var/next_announce
-/obj/machinery/doomsday_device/Initialize()
+/obj/machinery/doomsday_device/Initialize(mapload)
. = ..()
countdown = new(src)
diff --git a/code/modules/antagonists/wizard/equipment/artefact.dm b/code/modules/antagonists/wizard/equipment/artefact.dm
index 6f7ba374f7..7df91f4679 100644
--- a/code/modules/antagonists/wizard/equipment/artefact.dm
+++ b/code/modules/antagonists/wizard/equipment/artefact.dm
@@ -444,6 +444,6 @@
duration = 40
pixel_x = 500
-/obj/effect/temp_visual/tornado/Initialize()
+/obj/effect/temp_visual/tornado/Initialize(mapload)
. = ..()
animate(src, pixel_x = -500, time = 40)
diff --git a/code/modules/antagonists/wizard/equipment/spellbook.dm b/code/modules/antagonists/wizard/equipment/spellbook.dm
index 21de660edb..0701ade73c 100644
--- a/code/modules/antagonists/wizard/equipment/spellbook.dm
+++ b/code/modules/antagonists/wizard/equipment/spellbook.dm
@@ -618,7 +618,7 @@
else
. += "It appears to have no author."
-/obj/item/spellbook/Initialize()
+/obj/item/spellbook/Initialize(mapload)
. = ..()
prepare_spells()
diff --git a/code/modules/arousal/genitals.dm b/code/modules/arousal/genitals.dm
index b7e90e5b84..f4ecafa690 100644
--- a/code/modules/arousal/genitals.dm
+++ b/code/modules/arousal/genitals.dm
@@ -228,6 +228,8 @@
give_genital(/obj/item/organ/genital/breasts)
if(dna.features["has_cock"])
give_genital(/obj/item/organ/genital/penis)
+ if(dna.features["has_butt"])
+ give_genital(/obj/item/organ/genital/butt)
/mob/living/carbon/human/proc/give_genital(obj/item/organ/genital/G)
if(!dna || (NOGENITALS in dna.species.species_traits) || getorganslot(initial(G.slot)))
@@ -285,6 +287,8 @@
S = GLOB.vagina_shapes_list[G.shape]
if(/obj/item/organ/genital/breasts)
S = GLOB.breasts_shapes_list[G.shape]
+ if(/obj/item/organ/genital/butt)
+ S = GLOB.butt_shapes_list[G.shape]
if(!S || S.icon_state == "none")
continue
@@ -317,6 +321,8 @@
genital_overlay.color = "#[dna.features["breasts_color"]]"
if("vag_color")
genital_overlay.color = "#[dna.features["vag_color"]]"
+ if("butt_color")
+ genital_overlay.color = "#[dna.features["butt_color"]]"
genital_overlay.icon_state = "[G.slot]_[S.icon_state]_[size][(dna.species.use_skintones && !dna.skin_tone_override) ? "_s" : ""]_[aroused_state]_[layertext]"
@@ -346,20 +352,30 @@
var/organCheck = locate(/obj/item/organ/genital) in internal_organs
var/breastCheck = getorganslot(ORGAN_SLOT_BREASTS)
var/willyCheck = getorganslot(ORGAN_SLOT_PENIS)
+ var/buttCheck = getorganslot(ORGAN_SLOT_BUTT)
+ var/ballCheck = getorganslot(ORGAN_SLOT_TESTICLES)
if(organCheck == FALSE)
if(ishuman(src) && dna.species.use_skintones)
dna.features["genitals_use_skintone"] = TRUE
- if(src.dna.species.fixed_mut_color)
+ if(dna.species.fixed_mut_color)
dna.features["cock_color"] = "[dna.species.fixed_mut_color]"
dna.features["breasts_color"] = "[dna.species.fixed_mut_color]"
+ dna.features["butt_color"] = "[dna.species.fixed_mut_color]"
+ dna.features["testicles_color"] = "[dna.species.fixed_mut_color]"
return
//So people who haven't set stuff up don't get rainbow surprises.
dna.features["cock_color"] = "[dna.features["mcolor"]]"
dna.features["breasts_color"] = "[dna.features["mcolor"]]"
+ dna.features["butt_color"] = "[dna.features["mcolor"]]"
+ dna.features["testicles_color"] = "[dna.features["mcolor"]]"
else //If there's a new organ, make it the same colour.
if(breastCheck == FALSE)
dna.features["breasts_color"] = dna.features["cock_color"]
else if (willyCheck == FALSE)
dna.features["cock_color"] = dna.features["breasts_color"]
+ else if (buttCheck == FALSE)
+ dna.features["butt_color"] = dna.features["butt_color"]
+ else if (ballCheck == FALSE)
+ dna.features["testicles_color"] = dna.features["testicles_color"]
return TRUE
diff --git a/code/modules/arousal/genitals_sprite_accessories.dm b/code/modules/arousal/genitals_sprite_accessories.dm
index 1140a1d3ec..65c71edb30 100644
--- a/code/modules/arousal/genitals_sprite_accessories.dm
+++ b/code/modules/arousal/genitals_sprite_accessories.dm
@@ -64,6 +64,10 @@
icon_state = "single"
name = "Single" //Single as "single pair", for clarity.
+/datum/sprite_accessory/testicles/hidden
+ icon_state = "hidden"
+ name = "Hidden" //not sure why these were missing, but I'm pretty certain people might want these.
+
//Vaginas
/datum/sprite_accessory/vagina
icon = 'icons/obj/genitals/vagina_onmob.dmi'
@@ -119,3 +123,15 @@
/datum/sprite_accessory/breasts/sextuple
icon_state = "sextuple"
name = "Sextuple"
+
+//BUTT BE HERE
+/datum/sprite_accessory/butt
+ icon = 'icons/obj/genitals/butt_onmob.dmi'
+ icon_state = "butt"
+ name = "butt"
+ color_src = "butt_color"
+
+//there literally shouldn't be any other ass types besides one because that'd be weird, this is just here to keep things consistent for the genital system.
+/datum/sprite_accessory/butt/pair
+ icon_state = "pair"
+ name = "Pair"
diff --git a/code/modules/arousal/organs/butt.dm b/code/modules/arousal/organs/butt.dm
new file mode 100644
index 0000000000..172b87f748
--- /dev/null
+++ b/code/modules/arousal/organs/butt.dm
@@ -0,0 +1,92 @@
+/obj/item/organ/genital/butt
+ name = "butt"
+ desc = "You see a pair of asscheeks."
+ icon_state = "butt"
+ icon = 'icons/obj/genitals/butt.dmi'
+ zone = BODY_ZONE_PRECISE_GROIN
+ slot = ORGAN_SLOT_BUTT
+ w_class = 3
+ size = 0
+ var/size_name = "nonexistent"
+ shape = "Pair" //turn this into a default constant if for some inexplicable reason we get more than one butt type but I doubt it.
+ genital_flags = UPDATE_OWNER_APPEARANCE|GENITAL_UNDIES_HIDDEN
+ masturbation_verb = "massage"
+ var/size_cached = 0
+ var/prev_size //former size value, to allow update_size() to early return should be there no significant changes.
+ layer_index = BUTT_LAYER_INDEX
+
+/obj/item/organ/genital/butt/on_life()
+ if(QDELETED(src))
+ return
+ if(!owner)
+ return
+
+/obj/item/organ/genital/butt/modify_size(modifier, min = -INFINITY, max = BUTT_SIZE_MAX)
+ var/new_value = clamp(size_cached + modifier, min, max)
+ if(new_value == size_cached)
+ return
+ prev_size = size_cached
+ size_cached = new_value
+ size = round(size_cached)
+ update()
+ ..()
+
+/obj/item/organ/genital/butt/update_size()//wah
+ var/rounded_size = round(size)
+ if(size < 0)//I don't actually know what round() does to negative numbers, so to be safe!!fixed
+ if(owner)
+ to_chat(owner, "You feel your asscheeks shrink down to an ordinary size.")
+ QDEL_IN(src, 1)
+ return
+
+ if(owner) //Because byond doesn't count from 0, I have to do this.
+ var/mob/living/carbon/human/H = owner
+ var/r_prev_size = round(prev_size)
+ if (rounded_size > r_prev_size)
+ to_chat(H, "Your buttcheeks [pick("swell up to", "flourish into", "expand into", "plump up into", "grow eagerly into", "amplify into")] a larger pair.")
+ else if (rounded_size < r_prev_size)
+ to_chat(H, "Your buttcheeks [pick("shrink down to", "decrease into", "wobble down into", "diminish into", "deflate into", "contracts into")] a smaller pair.")
+
+
+/obj/item/organ/genital/butt/update_appearance()
+ var/lowershape = lowertext(shape)
+
+ //Reflect the size of dat ass on examine.
+ switch(round(size))
+ if(1)
+ size_name = "average"
+ if(2)
+ size_name = "sizable"
+ if(3)
+ size_name = "squeezable"
+ if(4)
+ size_name = "hefty"
+ if(5)
+ size_name = pick("massive","extreme","enormous","very generous","humongous","big bubbly","dummy thicc")
+ else
+ size_name = "nonexistent"
+
+ desc = "You see a [lowershape] of [size_name] asscheeks."
+
+ var/icon_size = size
+ icon_state = "butt_[lowershape]_[icon_size]"
+ if(owner)
+ if(owner.dna.species.use_skintones && owner.dna.features["genitals_use_skintone"])
+ if(ishuman(owner)) // Check before recasting type, although someone fucked up if you're not human AND have use_skintones somehow...
+ var/mob/living/carbon/human/H = owner // only human mobs have skin_tone, which we need.
+ color = SKINTONE2HEX(H.skin_tone)
+ if(!H.dna.skin_tone_override)
+ icon_state += "_s"
+ else
+ color = "#[owner.dna.features["butt_color"]]"
+
+
+/obj/item/organ/genital/butt/get_features(mob/living/carbon/human/H)
+ var/datum/dna/D = H.dna
+ if(D.species.use_skintones && D.features["genitals_use_skintone"])
+ color = SKINTONE2HEX(H.skin_tone)
+ else
+ color = "#[D.features["butt_color"]]"
+ size = D.features["butt_size"]
+ prev_size = size
+ toggle_visibility(D.features["butt_visibility"], FALSE)
diff --git a/code/modules/arousal/toys/dildos.dm b/code/modules/arousal/toys/dildos.dm
index 4de6877915..f80373140d 100644
--- a/code/modules/arousal/toys/dildos.dm
+++ b/code/modules/arousal/toys/dildos.dm
@@ -71,7 +71,7 @@
update_appearance()
return TRUE
-/obj/item/dildo/Initialize()
+/obj/item/dildo/Initialize(mapload)
. = ..()
if(random_color == TRUE)
var/randcolor = pick(GLOB.dildo_colors)
diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm
index d0ed0f2436..6e1d7b60f6 100644
--- a/code/modules/assembly/infrared.dm
+++ b/code/modules/assembly/infrared.dm
@@ -12,7 +12,7 @@
var/turf/listeningTo
var/hearing_range = 3
-/obj/item/assembly/infra/Initialize()
+/obj/item/assembly/infra/Initialize(mapload)
. = ..()
beams = list()
START_PROCESSING(SSobj, src)
@@ -220,7 +220,8 @@
icon_state = "ibeam"
anchored = TRUE
density = FALSE
- pass_flags = PASSTABLE|PASSGLASS|PASSGRILLE|LETPASSTHROW
+ pass_flags = PASSTABLE|PASSGLASS|PASSGRILLE
+ pass_flags_self = LETPASSTHROW
var/obj/item/assembly/infra/master
/obj/effect/beam/i_beam/Crossed(atom/movable/AM as mob|obj)
diff --git a/code/modules/assembly/proximity.dm b/code/modules/assembly/proximity.dm
index 60de1b3e87..49f912dff2 100644
--- a/code/modules/assembly/proximity.dm
+++ b/code/modules/assembly/proximity.dm
@@ -10,7 +10,7 @@
var/sensitivity = 1
var/hearing_range = 3
-/obj/item/assembly/prox_sensor/Initialize()
+/obj/item/assembly/prox_sensor/Initialize(mapload)
. = ..()
proximity_monitor = new(src, 0)
START_PROCESSING(SSobj, src)
diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm
index e586f97a28..a4700e4f16 100644
--- a/code/modules/assembly/signaler.dm
+++ b/code/modules/assembly/signaler.dm
@@ -41,7 +41,7 @@
playsound(user, 'sound/machines/triple_beep.ogg', ASSEMBLY_BEEP_VOLUME, TRUE)
qdel(src)
-/obj/item/assembly/signaler/Initialize()
+/obj/item/assembly/signaler/Initialize(mapload)
. = ..()
set_frequency(frequency)
diff --git a/code/modules/assembly/timer.dm b/code/modules/assembly/timer.dm
index e06bb22b0b..0234ac43df 100644
--- a/code/modules/assembly/timer.dm
+++ b/code/modules/assembly/timer.dm
@@ -22,7 +22,7 @@
user.adjustOxyLoss(200)
user.death(0)
-/obj/item/assembly/timer/Initialize()
+/obj/item/assembly/timer/Initialize(mapload)
. = ..()
START_PROCESSING(SSobj, src)
diff --git a/code/modules/atmospherics/auxgm/breathing_classes.dm b/code/modules/atmospherics/auxgm/breathing_classes.dm
index cfc82adbff..51a8e7bd40 100644
--- a/code/modules/atmospherics/auxgm/breathing_classes.dm
+++ b/code/modules/atmospherics/auxgm/breathing_classes.dm
@@ -41,3 +41,18 @@
low_alert_datum = /atom/movable/screen/alert/not_enough_tox
high_alert_category = "too_much_tox"
high_alert_datum = /atom/movable/screen/alert/too_much_tox
+
+/datum/breathing_class/methane
+ gases = list(
+ GAS_METHANE = 1,
+ GAS_METHYL_BROMIDE = -0.7,
+ GAS_OXYGEN = -0.1,
+ GAS_PLUOXIUM = -0.8
+ )
+ products = list(
+ GAS_METHYL_BROMIDE = 1
+ )
+ low_alert_category = "not_enough_ch4"
+ low_alert_datum = /atom/movable/screen/alert/not_enough_ch4
+ high_alert_category = "too_much_ch4"
+ high_alert_datum = /atom/movable/screen/alert/too_much_ch4
diff --git a/code/modules/atmospherics/auxgm/gas_types.dm b/code/modules/atmospherics/auxgm/gas_types.dm
index 6ee234d64d..f037e1bfab 100644
--- a/code/modules/atmospherics/auxgm/gas_types.dm
+++ b/code/modules/atmospherics/auxgm/gas_types.dm
@@ -7,12 +7,18 @@
heat_penalty = 1
transmit_modifier = 1.5
+/datum/gas/oxygen/generate_TLV()
+ return new/datum/tlv(16, 19, 40, 50)
+
/datum/gas/nitrogen
id = GAS_N2
specific_heat = 20
name = "Nitrogen"
powermix = -1
heat_penalty = -1.5
+ fire_burn_rate = 1
+ fire_temperature = 2300
+ fire_products = list(GAS_NITRIC = 2)
breath_alert_info = list(
not_enough_alert = list(
alert_category = "not_enough_nitro",
@@ -45,6 +51,9 @@
fusion_power = 3
enthalpy = -393500
+/datum/gas/carbon_dioxide/generate_TLV()
+ return new/datum/tlv(-1, -1, 5, 10)
+
/datum/gas/plasma
id = GAS_PLASMA
specific_heat = 200
@@ -57,7 +66,7 @@
powermix = 1
fire_burn_rate = OXYGEN_BURN_RATE_BASE // named when plasma fires were the only fires, surely
fire_temperature = FIRE_MINIMUM_TEMPERATURE_TO_EXIST
- fire_products = "plasma_fire"
+ fire_products = FIRE_PRODUCT_PLASMA
enthalpy = FIRE_PLASMA_ENERGY_RELEASED // 3000000, 3 megajoules, 3000 kj
/datum/gas/water_vapor
@@ -66,19 +75,13 @@
name = "Water Vapor"
gas_overlay = "water_vapor"
moles_visible = MOLES_GAS_VISIBLE
+ flags = GAS_FLAG_DANGEROUS
fusion_power = 8
heat_penalty = 8
enthalpy = -241800 // FIRE_HYDROGEN_ENERGY_RELEASED is actually what this was supposed to be
powermix = 1
breath_reagent = /datum/reagent/water
-/datum/gas/hypernoblium
- id = GAS_HYPERNOB
- specific_heat = 2000
- name = "Hyper-noblium"
- gas_overlay = "freon"
- moles_visible = MOLES_GAS_VISIBLE
-
/datum/gas/nitrous_oxide
id = GAS_NITROUS
specific_heat = 40
@@ -92,31 +95,6 @@
enthalpy = 81600
heat_resistance = 6
-/datum/gas/nitryl
- id = GAS_NITRYL
- specific_heat = 20
- name = "Nitryl"
- gas_overlay = "nitryl"
- moles_visible = MOLES_GAS_VISIBLE
- flags = GAS_FLAG_DANGEROUS
- fusion_power = 15
- fire_products = list(GAS_N2 = 0.5)
- enthalpy = 33200
- oxidation_temperature = FIRE_MINIMUM_TEMPERATURE_TO_EXIST - 50
-
-/datum/gas/hydrogen
- id = GAS_HYDROGEN
- specific_heat = 10
- name = "Hydrogen"
- flags = GAS_FLAG_DANGEROUS
- fusion_power = 0
- powermix = 1
- heat_penalty = 3
- transmit_modifier = 10
- fire_products = list(GAS_H2O = 1)
- fire_burn_rate = 2
- fire_temperature = FIRE_MINIMUM_TEMPERATURE_TO_EXIST - 50
-
/datum/gas/tritium
id = GAS_TRITIUM
specific_heat = 10
@@ -134,6 +112,51 @@
fire_radiation_released = 50 // arbitrary number, basically 60 moles of trit burning will just barely start to harm you
fire_temperature = FIRE_MINIMUM_TEMPERATURE_TO_EXIST - 50
+/datum/gas/nitric_oxide
+ id = GAS_NITRIC
+ specific_heat = 20
+ name = "Nitric oxide"
+ flags = GAS_FLAG_DANGEROUS
+ odor = "sharp sweetness"
+ odor_strength = 1
+ fusion_power = 15
+ enthalpy = 91290
+ heat_resistance = 2
+
+/datum/gas/nitryl
+ id = GAS_NITRYL
+ specific_heat = 20
+ name = "Nitrogen dioxide"
+ color = "#963"
+ moles_visible = MOLES_GAS_VISIBLE
+ flags = GAS_FLAG_DANGEROUS
+ fusion_power = 15
+ fire_products = list(GAS_N2 = 0.5)
+ enthalpy = 33200
+ oxidation_temperature = FIRE_MINIMUM_TEMPERATURE_TO_EXIST - 50
+
+/datum/gas/hypernoblium
+ id = GAS_HYPERNOB
+ specific_heat = 2000
+ name = "Hyper-noblium"
+ gas_overlay = "freon"
+ moles_visible = MOLES_GAS_VISIBLE
+
+/datum/gas/hydrogen
+ id = GAS_HYDROGEN
+ specific_heat = 10
+ name = "Hydrogen"
+ flags = GAS_FLAG_DANGEROUS
+ moles_visible = MOLES_GAS_VISIBLE
+ color = "#ffe"
+ fusion_power = 0
+ powermix = 1
+ heat_penalty = 3
+ transmit_modifier = 10
+ fire_products = list(GAS_H2O = 1)
+ fire_burn_rate = 2
+ fire_temperature = FIRE_MINIMUM_TEMPERATURE_TO_EXIST - 50
+
/datum/gas/bz
id = GAS_BZ
specific_heat = 20
@@ -149,6 +172,8 @@
/datum/gas/stimulum
id = GAS_STIMULUM
specific_heat = 5
+ odor = "the color blue" // fast
+ odor_strength = 10
name = "Stimulum"
fusion_power = 7
@@ -157,18 +182,23 @@
specific_heat = 80
name = "Pluoxium"
fusion_power = 10
- oxidation_temperature = FIRE_MINIMUM_TEMPERATURE_TO_EXIST * 1000 // it is VERY stable
+ oxidation_temperature = FIRE_MINIMUM_TEMPERATURE_TO_EXIST * 25 // it is VERY stable
oxidation_rate = 8 // when it can oxidize, it can oxidize a LOT
- enthalpy = -50000 // but it reduces the heat output a bit
+ enthalpy = -2000000 // but it reduces the heat output a great deal (plasma fires add 3000000 per mole)
powermix = -1
heat_penalty = -1
transmit_modifier = -5
heat_resistance = 3
+/datum/gas/pluoxium/generate_TLV()
+ return new/datum/tlv(-1, -1, 5, 6)
+
/datum/gas/miasma
id = GAS_MIASMA
specific_heat = 20
fusion_power = 50
+ flags = GAS_FLAG_DANGEROUS
+ // snowflaked odor
name = "Miasma"
gas_overlay = "miasma"
moles_visible = MOLES_GAS_VISIBLE * 60
@@ -177,6 +207,9 @@
id = GAS_METHANE
specific_heat = 30
name = "Methane"
+ odor = "natural gas"
+ odor_strength = 2
+ flags = GAS_FLAG_DANGEROUS
powerloss_inhibition = 1
heat_resistance = 3
breath_results = GAS_METHYL_BROMIDE
@@ -215,14 +248,18 @@
fire_products = list(GAS_CO2 = 1, GAS_H2O = 1.5, GAS_BROMINE = 0.5)
enthalpy = -35400
fire_burn_rate = 4 / 7 // oh no
- fire_temperature = 808 // its autoignition, it apparently doesn't spark readily, so i don't put it lower
+ fire_temperature = 808 // its autoignition; it apparently doesn't spark readily, so i don't put it lower
/datum/gas/bromine
id = GAS_BROMINE
specific_heat = 76
name = "Bromine"
- flags = GAS_FLAG_DANGEROUS
+ flags = GAS_FLAG_DANGEROUS | GAS_FLAG_CHEMICAL
group = GAS_GROUP_CHEMICALS
+ color = "#6e1f00"
+ moles_visible = MOLES_GAS_VISIBLE
+ odor = "bromine" // it's a very recognizable smell
+ odor_strength = 0.1
enthalpy = 193 // yeah it's small but it's good to include it
breath_reagent = /datum/reagent/bromine
@@ -230,10 +267,21 @@
id = GAS_AMMONIA
specific_heat = 35
name = "Ammonia"
- flags = GAS_FLAG_DANGEROUS
+ odor = "ammonia"
+ odor_strength = 0.01
+ flags = GAS_FLAG_DANGEROUS | GAS_FLAG_CHEMICAL
group = GAS_GROUP_CHEMICALS
enthalpy = -45900
breath_reagent = /datum/reagent/ammonia
fire_products = list(GAS_H2O = 1.5, GAS_N2 = 0.5)
fire_burn_rate = 4/3
fire_temperature = 924
+
+/datum/gas/quark_matter
+ id = GAS_QCD
+ specific_heat = 10
+ name = "Quark Matter"
+ flags = GAS_FLAG_DANGEROUS
+ powermix = -1
+ transmit_modifier = -10
+ heat_penalty = -10
diff --git a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm
index a0665707ff..2c1902d4cc 100644
--- a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm
+++ b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm
@@ -28,7 +28,7 @@
var/list/atmos_overlay_types //gas IDs of current active gas overlays
-/turf/open/Initialize()
+/turf/open/Initialize(mapload)
if(!blocks_air)
air = new(2500,src)
air.copy_from_turf(src)
diff --git a/code/modules/atmospherics/gasmixtures/auxgm.dm b/code/modules/atmospherics/gasmixtures/auxgm.dm
index 2e5dd716ed..d3de583f04 100644
--- a/code/modules/atmospherics/gasmixtures/auxgm.dm
+++ b/code/modules/atmospherics/gasmixtures/auxgm.dm
@@ -25,6 +25,7 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(GAS_O2, GAS_N2, GAS_CO2, GA
var/list/ids = list()
var/list/typepaths = list()
var/list/fusion_powers = list()
+ var/list/TLV = list()
var/list/breathing_classes = list()
var/list/breath_results = list()
var/list/breath_reagents = list()
@@ -39,13 +40,18 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(GAS_O2, GAS_N2, GAS_CO2, GA
var/list/supermatter = list()
var/list/groups_by_gas = list()
var/list/groups = list()
+ var/list/TLVs = list()
+ var/list/odors = list()
+ var/list/odor_strengths = list()
/datum/gas
var/id = ""
var/specific_heat = 0
var/name = ""
- var/gas_overlay = "" //icon_state in icons/effects/atmospherics.dmi
- var/color = "#ffff"
+ var/gas_overlay = "generic" //icon_state in icons/effects/atmospherics.dmi
+ var/color = "#ffff" // Tints the overlay by this color. Use instead of gas_overlay, usually (but not necessarily).
+ var/odor = null // Odor string. Null means none; if not null, anyone who breathes the gas will smell it.
+ var/odor_strength = INFINITY // How strong the odor is; minimal partial pressure to smell, so lower = more.
var/moles_visible = null
var/flags = NONE //currently used by canisters
var/group = null // groups for scrubber/filter listing
@@ -68,6 +74,12 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(GAS_O2, GAS_N2, GAS_CO2, GA
var/heat_resistance = 0 // makes the crystal more resistant against heat damage.
var/powerloss_inhibition = 0 // Reduces how much power the supermatter loses each tick
+/datum/gas/proc/generate_TLV()
+ if(flags & GAS_FLAG_DANGEROUS)
+ return new/datum/tlv/dangerous
+ else
+ return new/datum/tlv(-1, -1, 1000, 1000)
+
/datum/gas/proc/breath(partial_pressure, light_threshold, heavy_threshold, moles, mob/living/carbon/C, obj/item/organ/lungs/lungs)
// This is only called on gases with the GAS_FLAG_BREATH_PROC flag. When possible, do NOT use this--
// greatly prefer just adding a reagent. This is mostly around for legacy reasons.
@@ -79,11 +91,15 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(GAS_O2, GAS_N2, GAS_CO2, GA
datums[g] = gas
specific_heats[g] = gas.specific_heat
names[g] = gas.name
+ TLVs[g] = gas.generate_TLV()
if(gas.moles_visible)
visibility[g] = gas.moles_visible
overlays[g] = new /list(FACTOR_GAS_VISIBLE_MAX)
for(var/i in 1 to FACTOR_GAS_VISIBLE_MAX)
- overlays[g][i] = new /obj/effect/overlay/gas(gas.gas_overlay, i * 255 / FACTOR_GAS_VISIBLE_MAX)
+ var/obj/effect/overlay/gas/overlay = new(gas.gas_overlay)
+ overlay.color = gas.color
+ overlay.alpha = i * 255 / FACTOR_GAS_VISIBLE_MAX
+ overlays[g][i] = overlay
else
visibility[g] = 0
overlays[g] = 0
@@ -114,8 +130,11 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(GAS_O2, GAS_N2, GAS_CO2, GA
if(gas.group)
if(!(gas.group in groups))
groups[gas.group] = list()
- groups[gas.group] += gas
+ groups[gas.group] += g
groups_by_gas[g] = gas.group
+ if(gas.odor)
+ odor_strengths[g] = gas.odor_strength
+ odors[g] = gas.odor
add_supermatter_properties(gas)
_auxtools_register_gas(gas)
if(done_initializing)
@@ -145,6 +164,17 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(GAS_O2, GAS_N2, GAS_CO2, GA
done_initializing = TRUE
finalize_gas_refs()
+/datum/auxgm/proc/get_by_flag(flag)
+ var/static/list/gases_by_flag
+ if(!gases_by_flag)
+ gases_by_flag = list()
+ if(!(flag in gases_by_flag))
+ gases_by_flag += flag
+ gases_by_flag[flag] = list()
+ for(var/g in flags)
+ if(flags[g] & flag)
+ gases_by_flag[flag] += g
+ return gases_by_flag[flag]
GLOBAL_DATUM_INIT(gas_data, /datum/auxgm, new)
@@ -156,7 +186,6 @@ GLOBAL_DATUM_INIT(gas_data, /datum/auxgm, new)
appearance_flags = TILE_BOUND
vis_flags = NONE
-/obj/effect/overlay/gas/New(state, alph)
+/obj/effect/overlay/gas/New(state)
. = ..()
icon_state = state
- alpha = alph
diff --git a/code/modules/atmospherics/gasmixtures/gas_mixture.dm b/code/modules/atmospherics/gasmixtures/gas_mixture.dm
index b670baaae7..56820d2836 100644
--- a/code/modules/atmospherics/gasmixtures/gas_mixture.dm
+++ b/code/modules/atmospherics/gasmixtures/gas_mixture.dm
@@ -135,6 +135,7 @@ we use a hook instead
/datum/gas_mixture/proc/set_temperature(new_temp)
/datum/gas_mixture/proc/set_volume(new_volume)
/datum/gas_mixture/proc/get_moles(gas_type)
+/datum/gas_mixture/proc/get_by_flag(flag)
/datum/gas_mixture/proc/set_moles(gas_type, moles)
// VV WRAPPERS - EXTOOLS HOOKED PROCS DO NOT TAKE ARGUMENTS FROM CALL() FOR SOME REASON.
@@ -152,13 +153,20 @@ we use a hook instead
/datum/gas_mixture/proc/scrub_into(datum/gas_mixture/target, ratio, list/gases)
/datum/gas_mixture/proc/mark_immutable()
/datum/gas_mixture/proc/get_gases()
+/datum/gas_mixture/proc/add(amt)
+/datum/gas_mixture/proc/subtract(amt)
/datum/gas_mixture/proc/multiply(factor)
+/datum/gas_mixture/proc/divide(factor)
/datum/gas_mixture/proc/get_last_share()
/datum/gas_mixture/proc/clear()
/datum/gas_mixture/proc/adjust_moles(gas_type, amt = 0)
set_moles(gas_type, clamp(get_moles(gas_type) + amt,0,INFINITY))
+/datum/gas_mixture/proc/adjust_moles_temp(gas_type, amt, temperature)
+
+/datum/gas_mixture/proc/adjust_multi()
+
/datum/gas_mixture/proc/return_volume() //liters
/datum/gas_mixture/proc/thermal_energy() //joules
@@ -175,6 +183,10 @@ we use a hook instead
//Removes amount of gas from the gas_mixture
//Returns: gas_mixture with the gases removed
+/datum/gas_mixture/proc/remove_by_flag(flag, amount)
+ //Removes amount of gas from the gas mixture by flag
+ //Returns: gas_mixture with gases that match the flag removed
+
/datum/gas_mixture/proc/transfer_to(datum/gas_mixture/target, amount)
//Transfers amount of gas to target. Equivalent to target.merge(remove(amount)) but faster.
@@ -235,6 +247,14 @@ we use a hook instead
//Makes every gas in the given list have the same pressure, temperature and gas proportions.
//Returns: null
+/datum/gas_mixture/proc/__remove_by_flag()
+
+/datum/gas_mixture/remove_by_flag(flag, amount)
+ var/datum/gas_mixture/removed = new type
+ __remove_by_flag(removed, flag, amount)
+
+ return removed
+
/datum/gas_mixture/proc/__remove()
/datum/gas_mixture/remove(amount)
var/datum/gas_mixture/removed = new type
diff --git a/code/modules/atmospherics/gasmixtures/reactions.dm b/code/modules/atmospherics/gasmixtures/reactions.dm
index a6429a0754..122d30f33e 100644
--- a/code/modules/atmospherics/gasmixtures/reactions.dm
+++ b/code/modules/atmospherics/gasmixtures/reactions.dm
@@ -5,10 +5,9 @@
for(var/r in subtypesof(/datum/gas_reaction))
var/datum/gas_reaction/reaction = r
- if(initial(reaction.exclude))
- continue
reaction = new r
- . += reaction
+ if(!reaction.exclude)
+ . += reaction
sortTim(., /proc/cmp_gas_reaction)
/proc/cmp_gas_reaction(datum/gas_reaction/a, datum/gas_reaction/b) // compares lists of reactions by the maximum priority contained within the list
@@ -18,7 +17,6 @@
//regarding the requirements lists: the minimum or maximum requirements must be non-zero.
//when in doubt, use MINIMUM_MOLE_COUNT.
var/list/min_requirements
- var/list/max_requirements
var/exclude = FALSE //do it this way to allow for addition/removal of reactions midmatch in the future
var/priority = 100 //lower numbers are checked/react later than higher numbers. if two reactions have the same priority they may happen in either order
var/name = "reaction"
@@ -716,3 +714,78 @@
if(result != NO_REACTION)
return list("success" = FALSE, "message" = "Miasma sterilization not stopping due to water vapor correctly!")
return ..()
+
+/datum/gas_reaction/nitric_oxide
+ priority = -5
+ name = "Nitric oxide decomposition"
+ id = "nitric_oxide"
+
+/datum/gas_reaction/nitric_oxide/init_reqs()
+ min_requirements = list(
+ "MAX_TEMP" = FIRE_MINIMUM_TEMPERATURE_TO_EXIST+100,
+ GAS_NITRIC = MINIMUM_MOLE_COUNT
+ )
+
+/datum/gas_reaction/nitric_oxide/react(datum/gas_mixture/air, datum/holder)
+ var/nitric = air.get_moles(GAS_NITRIC)
+ var/oxygen = air.get_moles(GAS_O2)
+ var/max_amount = max(nitric / 10, MINIMUM_MOLE_COUNT)
+ var/enthalpy = air.return_temperature() * (air.heat_capacity() + R_IDEAL_GAS_EQUATION * air.total_moles());
+ var/list/enthalpies = GLOB.gas_data.enthalpies
+ if(oxygen > MINIMUM_MOLE_COUNT)
+ var/reaction_amount = min(max_amount, oxygen)
+ air.adjust_moles(GAS_NITRIC, -reaction_amount*2)
+ air.adjust_moles(GAS_O2, -reaction_amount)
+ air.adjust_moles(GAS_NITRYL, reaction_amount*2)
+ enthalpy += (reaction_amount * -(enthalpies[GAS_NITRIC] - enthalpies[GAS_NITRYL]))
+ air.adjust_moles(GAS_NITRIC, -max_amount)
+ air.adjust_moles(GAS_O2, max_amount * 0.5)
+ air.adjust_moles(GAS_N2, max_amount * 0.5)
+ enthalpy += max_amount * -enthalpies[GAS_NITRIC]
+ air.set_temperature(enthalpy/(air.heat_capacity() + R_IDEAL_GAS_EQUATION * air.total_moles()))
+ return REACTING
+
+/datum/gas_reaction/hagedorn
+ priority = -INFINITY
+ name = "Hagedorn decomposition"
+ id = "hagedorn"
+
+/datum/gas_reaction/hagedorn/init_reqs()
+ min_requirements = list(
+ "TEMP" = 2e12 // 2 trillion kelvins
+ )
+
+/datum/gas_reaction/hagedorn/react(datum/gas_mixture/air, datum/holder)
+ var/initial_energy = air.thermal_energy()
+ for(var/g in air.get_gases())
+ air.set_moles(g, 0)
+ air.set_moles(GAS_QCD, initial_energy / (air.return_temperature() * GLOB.gas_data.specific_heats[GAS_QCD]))
+
+/datum/gas_reaction/dehagedorn
+ priority = 50
+ name = "Hagedorn condensation"
+ id = "dehagedorn"
+
+/datum/gas_reaction/dehagedorn/init_reqs()
+ min_requirements = list(
+ "MAX_TEMP" = 1.99e12,
+ GAS_QCD = MINIMUM_MOLE_COUNT
+ )
+
+/datum/gas_reaction/dehagedorn/react(datum/gas_mixture/air, datum/holder)
+ var/initial_energy = air.thermal_energy()
+ var/energy_remaining = initial_energy
+ air.set_moles(GAS_QCD, 0)
+ air.set_temperature(min(air.return_temperature(), 1.8e12))
+ var/new_temp = air.return_temperature()
+ var/list/gases = GLOB.gas_data.specific_heats.Copy()
+ gases -= GAS_QCD
+ gases -= GAS_TRITIUM // no refusing sorry
+ for(var/g in gases)
+ gases[g] = 10000 / gases[g]
+ while(energy_remaining > 0)
+ var/G = pick(gases)
+ air.adjust_moles(G, max(0.1, energy_remaining / (gases[G] * new_temp * 20)))
+ energy_remaining = initial_energy - air.thermal_energy()
+ air.adjust_heat(-energy_remaining)
+ return REACTING
diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm
index 5ea4be80cb..66b8277273 100644
--- a/code/modules/atmospherics/machinery/airalarm.dm
+++ b/code/modules/atmospherics/machinery/airalarm.dm
@@ -75,7 +75,7 @@
req_access = list(ACCESS_ATMOSPHERICS)
max_integrity = 250
integrity_failure = 0.33
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 30)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 0, BIO = 100, RAD = 100, FIRE = 90, ACID = 30)
resistance_flags = FIRE_PROOF
var/danger_level = 0
@@ -90,7 +90,6 @@
var/frequency = FREQ_ATMOS_CONTROL
var/alarm_frequency = FREQ_ATMOS_ALARMS
var/datum/radio_frequency/radio_connection
-
var/list/TLV = list( // Breathable air.
"pressure" = new/datum/tlv(ONE_ATMOSPHERE * 0.8, ONE_ATMOSPHERE* 0.9, ONE_ATMOSPHERE * 1.1, ONE_ATMOSPHERE * 1.2), // kPa
"temperature" = new/datum/tlv(T0C, T0C+10, T0C+40, T0C+66),
@@ -108,9 +107,17 @@
GAS_NITRYL = new/datum/tlv/dangerous,
GAS_PLUOXIUM = new/datum/tlv(-1, -1, 5, 6), // Unlike oxygen, pluoxium does not fuel plasma/tritium fires
GAS_METHANE = new/datum/tlv(-1, -1, 3, 6),
- GAS_METHYL_BROMIDE = new/datum/tlv/dangerous
+ GAS_METHYL_BROMIDE = new/datum/tlv/dangerous,
+ GAS_AMMONIA = new/datum/tlv/dangerous,
+ GAS_BROMINE = new/datum/tlv/dangerous,
+
)
+/obj/machinery/airalarm/proc/regenerate_TLV()
+ var/list/TLVs = GLOB.gas_data.TLVs
+ for(var/g in TLVs)
+ TLV[g] = TLVs[g]
+
/obj/machinery/airalarm/server // No checks here.
TLV = list(
"pressure" = new/datum/tlv/no_checks,
@@ -132,6 +139,11 @@
GAS_METHYL_BROMIDE = new/datum/tlv/no_checks
)
+/obj/machinery/airalarm/server/regenerate_TLV()
+ var/list/TLVs = GLOB.gas_data.TLVs
+ for(var/g in TLVs)
+ TLV[g] = new/datum/tlv/no_checks
+
/obj/machinery/airalarm/kitchen_cold_room // Copypasta: to check temperatures.
TLV = list(
"pressure" = new/datum/tlv(ONE_ATMOSPHERE * 0.8, ONE_ATMOSPHERE* 0.9, ONE_ATMOSPHERE * 1.1, ONE_ATMOSPHERE * 1.2), // kPa
@@ -203,6 +215,8 @@
/obj/machinery/airalarm/Initialize(mapload, ndir, nbuild)
. = ..()
+ regenerate_TLV()
+ RegisterSignal(SSdcs,COMSIG_GLOB_NEW_GAS,.proc/regenerate_TLV)
wires = new /datum/wires/airalarm(src)
if(ndir)
@@ -546,26 +560,11 @@
"set_external_pressure" = ONE_ATMOSPHERE
))
if(AALARM_MODE_CONTAMINATED)
+ var/list/all_gases = GLOB.gas_data.get_by_flag(GAS_FLAG_DANGEROUS)
for(var/device_id in A.air_scrub_names)
send_signal(device_id, list(
"power" = 1,
- "set_filters" = list(
- GAS_CO2,
- GAS_MIASMA,
- GAS_PLASMA,
- GAS_H2O,
- GAS_HYDROGEN,
- GAS_HYPERNOB,
- GAS_NITROUS,
- GAS_NITRYL,
- GAS_TRITIUM,
- GAS_BZ,
- GAS_STIMULUM,
- GAS_PLUOXIUM,
- GAS_METHANE,
- GAS_METHYL_BROMIDE,
- GAS_GROUP_CHEMICALS
- ),
+ "set_filters" = all_gases,
"scrubbing" = 1,
"widenet" = 1,
))
@@ -599,7 +598,7 @@
for(var/device_id in A.air_scrub_names)
send_signal(device_id, list(
"power" = 1,
- "set_filters" = list(GAS_CO2, GAS_MIASMA),
+ "set_filters" = list(GAS_CO2, GAS_MIASMA, GAS_GROUP_CHEMICALS),
"scrubbing" = 1,
"widenet" = 0,
))
diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm
index 6f45599463..49fc0322df 100644
--- a/code/modules/atmospherics/machinery/atmosmachinery.dm
+++ b/code/modules/atmospherics/machinery/atmosmachinery.dm
@@ -55,7 +55,7 @@
normalize_cardinal_directions()
nodes = new(device_type)
if (!armor)
- armor = list("melee" = 25, "bullet" = 10, "laser" = 10, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 70)
+ armor = list(MELEE = 25, BULLET = 10, LASER = 10, ENERGY = 100, BOMB = 0, BIO = 100, RAD = 100, FIRE = 100, ACID = 70)
..()
if(process)
if(interacts_with_air)
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm
index c652a7f791..f5c10b365f 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm
@@ -4,7 +4,7 @@
icon_state = "pod-off"
density = TRUE
max_integrity = 350
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 30, "acid" = 30)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 0, BIO = 100, RAD = 100, FIRE = 30, ACID = 30)
layer = ABOVE_WINDOW_LAYER
plane = GAME_PLANE
state_open = FALSE
@@ -39,7 +39,7 @@
fair_market_price = 10
payment_department = ACCOUNT_MED
-/obj/machinery/atmospherics/components/unary/cryo_cell/Initialize()
+/obj/machinery/atmospherics/components/unary/cryo_cell/Initialize(mapload)
. = ..()
initialize_directions = dir
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm
index 80a8ee4bf3..b60cc7bb90 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm
@@ -7,7 +7,7 @@
density = TRUE
max_integrity = 300
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 30)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 0, BIO = 100, RAD = 100, FIRE = 80, ACID = 30)
layer = OBJ_LAYER
plane = GAME_PLANE
circuit = /obj/item/circuitboard/machine/thermomachine
@@ -24,7 +24,7 @@
var/heat_capacity = 0
var/interactive = TRUE // So mapmakers can disable interaction.
-/obj/machinery/atmospherics/components/unary/thermomachine/Initialize()
+/obj/machinery/atmospherics/components/unary/thermomachine/Initialize(mapload)
. = ..()
initialize_directions = dir
@@ -197,7 +197,7 @@
on = TRUE
icon_state = "freezer_1"
-/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on/Initialize()
+/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on/Initialize(mapload)
. = ..()
if(target_temperature == initial(target_temperature))
target_temperature = min_temperature
@@ -205,7 +205,7 @@
/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on/coldroom
name = "cold room freezer"
-/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on/coldroom/Initialize()
+/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on/coldroom/Initialize(mapload)
. = ..()
target_temperature = T0C-80
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
index 098618bc65..4ced6c0554 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
@@ -18,7 +18,7 @@
var/id_tag = null
var/scrubbing = SCRUBBING //0 = siphoning, 1 = scrubbing
- var/filter_types = list(GAS_CO2, GAS_MIASMA, GAS_GROUP_CHEMICALS)
+ var/filter_types = list(GAS_CO2, GAS_METHANE, GAS_METHYL_BROMIDE, GAS_MIASMA, GAS_GROUP_CHEMICALS)
var/list/clean_filter_types = null
var/volume_rate = 200
var/widenet = 0 //is this scrubber acting on the 3x3 area around it.
@@ -42,7 +42,7 @@
clean_filter_types = list()
for(var/id in filter_types)
if(id in GLOB.gas_data.groups)
- clean_filter_types += GLOB.gas_data.groups[id]
+ clean_filter_types |= GLOB.gas_data.groups[id]
else
clean_filter_types += id
diff --git a/code/modules/atmospherics/machinery/other/meter.dm b/code/modules/atmospherics/machinery/other/meter.dm
index c17c93ab95..e7ea86851b 100644
--- a/code/modules/atmospherics/machinery/other/meter.dm
+++ b/code/modules/atmospherics/machinery/other/meter.dm
@@ -9,7 +9,7 @@
idle_power_usage = 2
active_power_usage = 4
max_integrity = 150
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 40, "acid" = 0)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 0, BIO = 100, RAD = 100, FIRE = 40, ACID = 0)
var/frequency = 0
var/atom/target
var/id_tag
diff --git a/code/modules/atmospherics/machinery/other/miner.dm b/code/modules/atmospherics/machinery/other/miner.dm
index 1caae1376f..47deaba3c7 100644
--- a/code/modules/atmospherics/machinery/other/miner.dm
+++ b/code/modules/atmospherics/machinery/other/miner.dm
@@ -29,7 +29,7 @@
idle_power_usage = 150
active_power_usage = 2000
-/obj/machinery/atmospherics/miner/Initialize()
+/obj/machinery/atmospherics/miner/Initialize(mapload)
. = ..()
set_active(active) //Force overlay update.
diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm
index 5fdedd5be7..b71c16b2ff 100644
--- a/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm
+++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm
@@ -8,7 +8,7 @@
resistance_flags = LAVA_PROOF | FIRE_PROOF
interacts_with_air = TRUE
-/obj/machinery/atmospherics/pipe/heat_exchanging/Initialize()
+/obj/machinery/atmospherics/pipe/heat_exchanging/Initialize(mapload)
. = ..()
add_atom_colour("#404040", FIXED_COLOUR_PRIORITY)
diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold.dm
index ce4aba6ab7..d2c5123527 100644
--- a/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold.dm
+++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold.dm
@@ -16,7 +16,7 @@
var/mutable_appearance/center
-/obj/machinery/atmospherics/pipe/heat_exchanging/manifold/Initialize()
+/obj/machinery/atmospherics/pipe/heat_exchanging/manifold/Initialize(mapload)
icon_state = ""
center = mutable_appearance(icon, "manifold_center")
return ..()
diff --git a/code/modules/atmospherics/machinery/pipes/layermanifold.dm b/code/modules/atmospherics/machinery/pipes/layermanifold.dm
index d019a03140..8a300e23f3 100644
--- a/code/modules/atmospherics/machinery/pipes/layermanifold.dm
+++ b/code/modules/atmospherics/machinery/pipes/layermanifold.dm
@@ -14,7 +14,7 @@
var/list/front_nodes
var/list/back_nodes
-/obj/machinery/atmospherics/pipe/layer_manifold/Initialize()
+/obj/machinery/atmospherics/pipe/layer_manifold/Initialize(mapload)
front_nodes = list()
back_nodes = list()
icon_state = "manifoldlayer_center"
diff --git a/code/modules/atmospherics/machinery/pipes/manifold.dm b/code/modules/atmospherics/machinery/pipes/manifold.dm
index 3f061e3779..d0b054fa3e 100644
--- a/code/modules/atmospherics/machinery/pipes/manifold.dm
+++ b/code/modules/atmospherics/machinery/pipes/manifold.dm
@@ -17,7 +17,7 @@
var/mutable_appearance/center
-/obj/machinery/atmospherics/pipe/manifold/Initialize()
+/obj/machinery/atmospherics/pipe/manifold/Initialize(mapload)
icon_state = ""
center = mutable_appearance(icon, "manifold_center")
return ..()
diff --git a/code/modules/atmospherics/machinery/pipes/manifold4w.dm b/code/modules/atmospherics/machinery/pipes/manifold4w.dm
index bbceff56da..dd4cc1402c 100644
--- a/code/modules/atmospherics/machinery/pipes/manifold4w.dm
+++ b/code/modules/atmospherics/machinery/pipes/manifold4w.dm
@@ -16,7 +16,7 @@
var/mutable_appearance/center
-/obj/machinery/atmospherics/pipe/manifold4w/Initialize()
+/obj/machinery/atmospherics/pipe/manifold4w/Initialize(mapload)
icon_state = ""
center = mutable_appearance(icon, "manifold4w_center")
return ..()
diff --git a/code/modules/atmospherics/machinery/pipes/pipes.dm b/code/modules/atmospherics/machinery/pipes/pipes.dm
index e286cbbe7f..a514606e4d 100644
--- a/code/modules/atmospherics/machinery/pipes/pipes.dm
+++ b/code/modules/atmospherics/machinery/pipes/pipes.dm
@@ -109,7 +109,7 @@
. = list(parent)
/obj/machinery/atmospherics/pipe/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir)
- if(damage_flag == "melee" && damage_amount < 12)
+ if(damage_flag == MELEE && damage_amount < 12)
return 0
. = ..()
diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm
index 868c5dafa3..f7bdc173f3 100644
--- a/code/modules/atmospherics/machinery/portable/canister.dm
+++ b/code/modules/atmospherics/machinery/portable/canister.dm
@@ -6,7 +6,7 @@
icon_state = "yellow"
density = TRUE
volume = 1000
- armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 100, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 50)
+ armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 100, BOMB = 10, BIO = 100, RAD = 100, FIRE = 80, ACID = 50)
max_integrity = 250
integrity_failure = 0.4
pressure_resistance = 7 * ONE_ATMOSPHERE
diff --git a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm
index 93dc414968..9f5dc87c30 100644
--- a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm
+++ b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm
@@ -3,7 +3,7 @@
icon = 'icons/obj/atmos.dmi'
use_power = NO_POWER_USE
max_integrity = 250
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 60, "acid" = 30)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 0, BIO = 100, RAD = 100, FIRE = 60, ACID = 30)
anchored = FALSE
var/datum/gas_mixture/air_contents
diff --git a/code/modules/atmospherics/machinery/portable/pump.dm b/code/modules/atmospherics/machinery/portable/pump.dm
index 68708c3233..12598b99d9 100644
--- a/code/modules/atmospherics/machinery/portable/pump.dm
+++ b/code/modules/atmospherics/machinery/portable/pump.dm
@@ -15,7 +15,7 @@
volume = 1000
-/obj/machinery/portable_atmospherics/pump/Initialize()
+/obj/machinery/portable_atmospherics/pump/Initialize(mapload)
. = ..()
pump = new(src, FALSE)
pump.on = TRUE
diff --git a/code/modules/awaymissions/away_props.dm b/code/modules/awaymissions/away_props.dm
index 36ed9b6ba3..a28bd0633a 100644
--- a/code/modules/awaymissions/away_props.dm
+++ b/code/modules/awaymissions/away_props.dm
@@ -6,10 +6,11 @@
invisibility = INVISIBILITY_MAXIMUM
anchored = TRUE
-/obj/effect/oneway/CanPass(atom/movable/mover, turf/target)
+/obj/effect/oneway/CanAllowThrough(atom/movable/mover, turf/target)
+ . = ..()
var/turf/T = get_turf(src)
var/turf/MT = get_turf(mover)
- return ..() && (T == MT || get_dir(MT,T) == dir)
+ return . && (T == MT || get_dir(MT,T) == dir)
/obj/effect/wind
@@ -20,7 +21,7 @@
invisibility = INVISIBILITY_MAXIMUM
var/strength = 30
-/obj/effect/wind/Initialize()
+/obj/effect/wind/Initialize(mapload)
. = ..()
START_PROCESSING(SSobj,src)
diff --git a/code/modules/awaymissions/capture_the_flag.dm b/code/modules/awaymissions/capture_the_flag.dm
index d32905e007..68930ca03a 100644
--- a/code/modules/awaymissions/capture_the_flag.dm
+++ b/code/modules/awaymissions/capture_the_flag.dm
@@ -35,7 +35,7 @@
QDEL_NULL(reset)
return ..()
-/obj/item/ctf/Initialize()
+/obj/item/ctf/Initialize(mapload)
. = ..()
if(!reset)
reset = new reset_path(get_turf(src))
@@ -167,7 +167,7 @@
var/static/arena_reset = FALSE
var/static/list/people_who_want_to_play = list()
-/obj/machinery/capture_the_flag/Initialize()
+/obj/machinery/capture_the_flag/Initialize(mapload)
. = ..()
GLOB.poi_list |= src
@@ -405,10 +405,10 @@
/obj/item/projectile/bullet/ctf
damage = 0
-/obj/item/projectile/bullet/ctf/prehit(atom/target)
+/obj/item/projectile/bullet/ctf/prehit_pierce(atom/target)
if(is_ctf_target(target))
damage = 60
- return //PROJECTILE_PIERCE_NONE /// hey uhh don't hit anyone behind them
+ return PROJECTILE_PIERCE_NONE /// hey uhh don't hit anyone behind them
. = ..()
/obj/item/gun/ballistic/automatic/laser/ctf
@@ -442,10 +442,10 @@
damage = 0
icon_state = "omnilaser"
-/obj/item/projectile/beam/ctf/prehit(atom/target)
+/obj/item/projectile/beam/ctf/prehit_pierce(atom/target)
if(is_ctf_target(target))
damage = 150
- return //PROJECTILE_PIERCE_NONE /// hey uhhh don't hit anyone behind them
+ return PROJECTILE_PIERCE_NONE /// hey uhhh don't hit anyone behind them
. = ..()
/proc/is_ctf_target(atom/target)
diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm
index 668a8dcb92..76af33b613 100644
--- a/code/modules/awaymissions/corpse.dm
+++ b/code/modules/awaymissions/corpse.dm
@@ -36,7 +36,7 @@
///override this to add special spawn conditions to a ghost role
/obj/effect/mob_spawn/proc/allow_spawn(mob/user, silent = FALSE)
return TRUE
-
+
//ATTACK GHOST IGNORING PARENT RETURN VALUE
/obj/effect/mob_spawn/attack_ghost(mob/user, latejoinercalling)
if(!SSticker.HasRoundStarted() || !loc || !ghost_usable)
@@ -184,7 +184,7 @@
var/facial_hair_style
var/skin_tone
-/obj/effect/mob_spawn/human/Initialize()
+/obj/effect/mob_spawn/human/Initialize(mapload)
if(ispath(outfit))
outfit = new outfit()
if(!outfit)
diff --git a/code/modules/awaymissions/gateway.dm b/code/modules/awaymissions/gateway.dm
index 8aa265d39f..767304f799 100644
--- a/code/modules/awaymissions/gateway.dm
+++ b/code/modules/awaymissions/gateway.dm
@@ -174,7 +174,7 @@ GLOBAL_LIST_EMPTY(gateway_destinations)
/// Visual object for handling the viscontents
var/obj/effect/gateway_portal_effect/portal_visuals
-/obj/machinery/gateway/Initialize()
+/obj/machinery/gateway/Initialize(mapload)
generate_destination()
update_icon()
portal_visuals = new
@@ -231,7 +231,7 @@ GLOBAL_LIST_EMPTY(gateway_destinations)
destination_type = /datum/gateway_destination/gateway/home
destination_name = "Home Gateway"
-/obj/machinery/gateway/centerstation/Initialize()
+/obj/machinery/gateway/centerstation/Initialize(mapload)
. = ..()
if(!GLOB.the_gateway)
GLOB.the_gateway = src
diff --git a/code/modules/awaymissions/mission_code/Cabin.dm b/code/modules/awaymissions/mission_code/Cabin.dm
index 3ad7c7cb50..b5ff23d75b 100644
--- a/code/modules/awaymissions/mission_code/Cabin.dm
+++ b/code/modules/awaymissions/mission_code/Cabin.dm
@@ -43,7 +43,7 @@
density = FALSE
var/active = 1
-/obj/structure/firepit/Initialize()
+/obj/structure/firepit/Initialize(mapload)
..()
toggleFirepit()
diff --git a/code/modules/awaymissions/mission_code/jungleresort.dm b/code/modules/awaymissions/mission_code/jungleresort.dm
index f520cfdbee..934f3e5e1f 100644
--- a/code/modules/awaymissions/mission_code/jungleresort.dm
+++ b/code/modules/awaymissions/mission_code/jungleresort.dm
@@ -19,7 +19,7 @@
icon_state = "whip"
/obj/item/clothing/suit/hooded/wintercoat/captain/jungle
- armor = list("melee" = 5, "bullet" = 5, "laser" = 5, "energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 5, BULLET = 5, LASER = 5, ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 0, ACID = 0)
/obj/item/clothing/head/rice_hat/cursed // this was a stupid idea lmao
name = "cursed rice hat"
@@ -32,7 +32,7 @@
else
UnregisterSignal(M, COMSIG_MOB_SAY)
-/obj/item/clothing/head/rice_hat/cursed/Initialize()
+/obj/item/clothing/head/rice_hat/cursed/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, SHAMEBRERO_TRAIT)
diff --git a/code/modules/awaymissions/mission_code/murderdome.dm b/code/modules/awaymissions/mission_code/murderdome.dm
index 2a7cb21841..eef757cf8e 100644
--- a/code/modules/awaymissions/mission_code/murderdome.dm
+++ b/code/modules/awaymissions/mission_code/murderdome.dm
@@ -26,7 +26,7 @@
icon_state = "barrier0"
alpha = 100
-/obj/effect/murderdome/dead_barricade/Initialize()
+/obj/effect/murderdome/dead_barricade/Initialize(mapload)
. = ..()
addtimer(CALLBACK(src, .proc/respawn), 3 MINUTES)
diff --git a/code/modules/awaymissions/mission_code/snowdin.dm b/code/modules/awaymissions/mission_code/snowdin.dm
index ba3f07bd7d..1362c7818a 100644
--- a/code/modules/awaymissions/mission_code/snowdin.dm
+++ b/code/modules/awaymissions/mission_code/snowdin.dm
@@ -532,7 +532,7 @@
/obj/item/clothing/under/syndicate/coldres
name = "insulated tactical turtleneck"
desc = "A nondescript and slightly suspicious-looking turtleneck with digital camouflage cargo pants. The interior has been padded with special insulation for both warmth and protection."
- armor = list("melee" = 20, "bullet" = 10, "laser" = 0,"energy" = 5, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 25, "acid" = 25)
+ armor = list(MELEE = 20, BULLET = 10, LASER = 0,ENERGY = 5, BOMB = 0, BIO = 0, RAD = 0, FIRE = 25, ACID = 25)
cold_protection = CHEST|GROIN|ARMS|LEGS
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
diff --git a/code/modules/awaymissions/mission_code/stationCollision.dm b/code/modules/awaymissions/mission_code/stationCollision.dm
index 962abc59fd..f72e0132cd 100644
--- a/code/modules/awaymissions/mission_code/stationCollision.dm
+++ b/code/modules/awaymissions/mission_code/stationCollision.dm
@@ -48,7 +48,7 @@
//Syndicate sub-machine guns.
/obj/item/gun/ballistic/automatic/c20r/sc_c20r
-/obj/item/gun/ballistic/automatic/c20r/sc_c20r/Initialize()
+/obj/item/gun/ballistic/automatic/c20r/sc_c20r/Initialize(mapload)
. = ..()
for(var/ammo in magazine.stored_ammo)
if(prob(95)) //95% chance
@@ -57,7 +57,7 @@
//Barman's shotgun
/obj/item/gun/ballistic/shotgun/sc_pump
-/obj/item/gun/ballistic/shotgun/sc_pump/Initialize()
+/obj/item/gun/ballistic/shotgun/sc_pump/Initialize(mapload)
. = ..()
for(var/ammo in magazine.stored_ammo)
if(prob(95)) //95% chance
diff --git a/code/modules/awaymissions/signpost.dm b/code/modules/awaymissions/signpost.dm
index 4d85d947c2..a53384c6fa 100644
--- a/code/modules/awaymissions/signpost.dm
+++ b/code/modules/awaymissions/signpost.dm
@@ -7,7 +7,7 @@
var/question = "Travel back?"
var/list/zlevels
-/obj/structure/signpost/Initialize()
+/obj/structure/signpost/Initialize(mapload)
. = ..()
set_light(2)
zlevels = SSmapping.levels_by_trait(ZTRAIT_STATION)
@@ -63,7 +63,7 @@
exit the area."
question = "Leave? You might never come back."
-/obj/structure/signpost/exit/Initialize()
+/obj/structure/signpost/exit/Initialize(mapload)
. = ..()
zlevels = list()
for(var/i in 1 to world.maxz)
diff --git a/code/modules/awaymissions/super_secret_room.dm b/code/modules/awaymissions/super_secret_room.dm
index af801e1e42..2c01a66d43 100644
--- a/code/modules/awaymissions/super_secret_room.dm
+++ b/code/modules/awaymissions/super_secret_room.dm
@@ -10,7 +10,7 @@
var/times_spoken_to = 0
var/list/shenanigans = list()
-/obj/structure/speaking_tile/Initialize()
+/obj/structure/speaking_tile/Initialize(mapload)
. = ..()
var/json_file = file("data/npc_saves/Poly.json")
if(!fexists(json_file))
diff --git a/code/modules/awaymissions/zlevel.dm b/code/modules/awaymissions/zlevel.dm
index 1e2e1fe43c..a30e51a0a3 100644
--- a/code/modules/awaymissions/zlevel.dm
+++ b/code/modules/awaymissions/zlevel.dm
@@ -21,7 +21,7 @@
var/id
var/delay = TRUE // If the generated destination should be delayed by configured gateway delay
-/obj/effect/landmark/awaystart/Initialize()
+/obj/effect/landmark/awaystart/Initialize(mapload)
. = ..()
var/datum/gateway_destination/point/current
for(var/datum/gateway_destination/point/D in GLOB.gateway_destinations)
diff --git a/code/modules/cargo/blackmarket/blackmarket_telepad.dm b/code/modules/cargo/blackmarket/blackmarket_telepad.dm
index eb986a443a..1ad1496e60 100644
--- a/code/modules/cargo/blackmarket/blackmarket_telepad.dm
+++ b/code/modules/cargo/blackmarket/blackmarket_telepad.dm
@@ -25,7 +25,7 @@
var/transmitting // Current /datum/blackmarket_purchase being sent to the target uplink.
var/list/datum/blackmarket_purchase/queue = list() // Queue for purchases that the machine should recieve and send.
-/obj/machinery/ltsrbt/Initialize()
+/obj/machinery/ltsrbt/Initialize(mapload)
. = ..()
SSblackmarket.telepads += src
diff --git a/code/modules/cargo/blackmarket/blackmarket_uplink.dm b/code/modules/cargo/blackmarket/blackmarket_uplink.dm
index 7d5b333f13..0c397fa7d6 100644
--- a/code/modules/cargo/blackmarket/blackmarket_uplink.dm
+++ b/code/modules/cargo/blackmarket/blackmarket_uplink.dm
@@ -1,6 +1,6 @@
/obj/item/blackmarket_uplink
name = "Black Market Uplink"
- desc = "A mishmash of a subspace amplifier, a radio, and an analyzer. Somehow able to access the black market, with a variable inventory in limited stock at inflated prices. No refunds, customer responsible for pick-ups."
+ desc = "A mishmash of a subspace amplifier, a radio, and an analyzer. Somehow able to access the black market, with a variable inventory in limited stock at inflated prices. No refunds, customer responsible for pick-ups."
icon = 'icons/obj/blackmarket.dmi'
icon_state = "uplink"
// UI variables.
@@ -13,7 +13,7 @@
var/money = 0 // How much money is inserted into the uplink.
var/list/accessible_markets = list(/datum/blackmarket_market/blackmarket) // List of typepaths for "/datum/blackmarket_market"s that this uplink can access.
-/obj/item/blackmarket_uplink/Initialize()
+/obj/item/blackmarket_uplink/Initialize(mapload)
. = ..()
if(accessible_markets.len)
viewing_market = accessible_markets[1]
diff --git a/code/modules/cargo/bounties/mech.dm b/code/modules/cargo/bounties/mech.dm
index b7eac3499f..c1d22d9dbf 100644
--- a/code/modules/cargo/bounties/mech.dm
+++ b/code/modules/cargo/bounties/mech.dm
@@ -5,8 +5,8 @@
/datum/bounty/item/mech/ship(obj/O)
if(!applies_to(O))
return
- if(istype(O, /obj/mecha))
- var/obj/mecha/M = O
+ if(istype(O, /obj/vehicle/sealed/mecha))
+ var/obj/vehicle/sealed/mecha/M = O
M.wreckage = null // So the mech doesn't explode.
..()
@@ -16,30 +16,30 @@
/datum/bounty/item/mech/ripley
name = "APLU \"Ripley\""
reward = 13000
- wanted_types = list(/obj/mecha/working/ripley)
- exclude_types = list(/obj/mecha/working/ripley/firefighter)
+ wanted_types = list(/obj/vehicle/sealed/mecha/working/ripley)
+ exclude_types = list(/obj/vehicle/sealed/mecha/working/ripley/firefighter)
/datum/bounty/item/mech/firefighter
name = "APLU \"Firefighter\""
reward = 18000
- wanted_types = list(/obj/mecha/working/ripley/firefighter)
+ wanted_types = list(/obj/vehicle/sealed/mecha/working/ripley/firefighter)
/datum/bounty/item/mech/odysseus
name = "Odysseus"
reward = 11000
- wanted_types = list(/obj/mecha/medical/odysseus)
+ wanted_types = list(/obj/vehicle/sealed/mecha/medical/odysseus)
/datum/bounty/item/mech/gygax
name = "Gygax"
reward = 28000
- wanted_types = list(/obj/mecha/combat/gygax)
+ wanted_types = list(/obj/vehicle/sealed/mecha/combat/gygax)
/datum/bounty/item/mech/durand
name = "Durand"
reward = 20000
- wanted_types = list(/obj/mecha/combat/durand)
+ wanted_types = list(/obj/vehicle/sealed/mecha/combat/durand)
/datum/bounty/item/mech/phazon
name = "Phazon"
reward = 50000
- wanted_types = list(/obj/mecha/combat/phazon)
+ wanted_types = list(/obj/vehicle/sealed/mecha/combat/phazon)
diff --git a/code/modules/cargo/bounties/reagent.dm b/code/modules/cargo/bounties/reagent.dm
index 57501beab3..c8646ab618 100644
--- a/code/modules/cargo/bounties/reagent.dm
+++ b/code/modules/cargo/bounties/reagent.dm
@@ -139,6 +139,7 @@
/datum/reagent/medicine/atropine,\
/datum/reagent/medicine/strange_reagent,\
/datum/reagent/medicine/regen_jelly,\
+ /datum/reagent/medicine/limb_regrowth,\
/datum/reagent/drug/space_drugs,\
/datum/reagent/drug/crank,\
/datum/reagent/drug/krokodil,\
diff --git a/code/modules/cargo/bounty_console.dm b/code/modules/cargo/bounty_console.dm
index 8a29715016..b2ee0e0e1a 100644
--- a/code/modules/cargo/bounty_console.dm
+++ b/code/modules/cargo/bounty_console.dm
@@ -9,7 +9,7 @@
var/printer_ready = 0 //cooldown var
var/static/datum/bank_account/cargocash
-/obj/machinery/computer/bounty/Initialize()
+/obj/machinery/computer/bounty/Initialize(mapload)
. = ..()
printer_ready = world.time + PRINTER_TIMEOUT
cargocash = SSeconomy.get_dep_account(ACCOUNT_CAR)
@@ -20,7 +20,7 @@
/obj/item/paper/bounty_printout
name = "paper - Bounties"
-/obj/item/paper/bounty_printout/Initialize()
+/obj/item/paper/bounty_printout/Initialize(mapload)
. = ..()
info = "
Nanotrasen Cargo Bounties
"
update_icon()
diff --git a/code/modules/cargo/console.dm b/code/modules/cargo/console.dm
index fddad598fb..390f02d419 100644
--- a/code/modules/cargo/console.dm
+++ b/code/modules/cargo/console.dm
@@ -34,7 +34,7 @@
can_approve_requests = FALSE
requestonly = TRUE
-/obj/machinery/computer/cargo/Initialize()
+/obj/machinery/computer/cargo/Initialize(mapload)
. = ..()
radio = new /obj/item/radio/headset/headset_cargo(src)
diff --git a/code/modules/cargo/exports.dm b/code/modules/cargo/exports.dm
index b72e497a5f..e6ed245294 100644
--- a/code/modules/cargo/exports.dm
+++ b/code/modules/cargo/exports.dm
@@ -61,7 +61,7 @@ Credit dupes that require a lot of manual work shouldn't be removed, unless they
if(ismob(thing))
thing.investigate_log("deleted through cargo export",INVESTIGATE_CARGO)
if(ismecha(thing))
- var/obj/mecha/mech = thing
+ var/obj/vehicle/sealed/mecha/mech = thing
mech.wreckage = null // why a mech left a wreck when sold i will never know
qdel(thing)
diff --git a/code/modules/cargo/exports/large_objects.dm b/code/modules/cargo/exports/large_objects.dm
index dca23c9f22..6d965e2c5a 100644
--- a/code/modules/cargo/exports/large_objects.dm
+++ b/code/modules/cargo/exports/large_objects.dm
@@ -278,69 +278,69 @@
/datum/export/large/mech/odysseus
cost = 7500
unit_name = "working odysseus"
- export_types = list(/obj/mecha/medical/odysseus)
+ export_types = list(/obj/vehicle/sealed/mecha/medical/odysseus)
/datum/export/large/mech/ripley
cost = 12000
unit_name = "working ripley"
- export_types = list(/obj/mecha/working/ripley)
+ export_types = list(/obj/vehicle/sealed/mecha/working/ripley)
/datum/export/large/mech/firefighter
cost = 14000
unit_name = "working firefighter"
- export_types = list(/obj/mecha/working/ripley/firefighter)
+ export_types = list(/obj/vehicle/sealed/mecha/working/ripley/firefighter)
/datum/export/large/mech/gygax
cost = 19000
unit_name = "working gygax"
- export_types = list(/obj/mecha/combat/gygax)
+ export_types = list(/obj/vehicle/sealed/mecha/combat/gygax)
/datum/export/large/mech/durand
cost = 16000
unit_name = "working durand"
- export_types = list(/obj/mecha/combat/durand)
+ export_types = list(/obj/vehicle/sealed/mecha/combat/durand)
/datum/export/large/mech/phazon
cost = 35000 //Little over half due to needing a core
unit_name = "working phazon"
- export_types = list(/obj/mecha/combat/phazon)
+ export_types = list(/obj/vehicle/sealed/mecha/combat/phazon)
/datum/export/large/mech/marauder
cost = 15000 //Still a Combat class mech - CC tech as well! 150% "normal" boundy price.
unit_name = "working marauder"
- export_types = list(/obj/mecha/combat/marauder)
+ export_types = list(/obj/vehicle/sealed/mecha/combat/marauder)
/datum/export/large/mech/deathripley
cost = 18500 //Still a "Combat class" mech - Illegal tech as well! 165% "normal" boundy price.
unit_name = "working illegally modified"
- export_types = list(/obj/mecha/working/ripley/deathripley)
+ export_types = list(/obj/vehicle/sealed/mecha/working/ripley/deathripley)
/datum/export/large/mech/gygaxdark
cost = 28500 //Still a Combat class mech - Illegal tech as well! 150% "normal" boundy price.
unit_name = "working illegally modified gygax"
- export_types = list(/obj/mecha/combat/gygax/dark)
+ export_types = list(/obj/vehicle/sealed/mecha/combat/gygax/dark)
/datum/export/large/mech/oldripley
cost = 6250 //old mech - Scrap metal ! 50% "normal" boundy price.
unit_name = "working miner ripley"
- export_types = list(/obj/mecha/working/ripley/mining)
+ export_types = list(/obj/vehicle/sealed/mecha/working/ripley/mining)
/datum/export/large/mech/honk
cost = 16000 //Still a "Combat class" mech - Comats bordem honk!
unit_name = "working honker"
- export_types = list(/obj/mecha/combat/honker)
+ export_types = list(/obj/vehicle/sealed/mecha/combat/honker)
/datum/export/large/mech/reticence
cost = 16000 //Still a "Combat class" mech - Has cloking and lethal weaponds.
unit_name = "working reticence"
- export_types = list(/obj/mecha/combat/reticence)
+ export_types = list(/obj/vehicle/sealed/mecha/combat/reticence)
/datum/export/large/mech/seraph
cost = 25500 //Still a Combat class mech - CC tech as well! 150% "normal" boundy price.
unit_name = "working seraph"
- export_types = list(/obj/mecha/combat/marauder/seraph)
+ export_types = list(/obj/vehicle/sealed/mecha/combat/marauder/seraph)
/datum/export/large/mech/mauler
cost = 25000 //Still a Combat class mech - CC lethal weaponds.
unit_name = "working legally modified marauder"
- export_types = list(/obj/mecha/combat/marauder/mauler)
+ export_types = list(/obj/vehicle/sealed/mecha/combat/marauder/mauler)
diff --git a/code/modules/cargo/exports/organs_robotics.dm b/code/modules/cargo/exports/organs_robotics.dm
index 08340e6a56..40f7edbd99 100644
--- a/code/modules/cargo/exports/organs_robotics.dm
+++ b/code/modules/cargo/exports/organs_robotics.dm
@@ -163,7 +163,7 @@
cost = 150
unit_name = "mech based tool"
include_subtypes = TRUE
- export_types = list(/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp, /obj/item/mecha_parts/mecha_equipment/extinguisher, /obj/item/mecha_parts/mecha_equipment/rcd, /obj/item/mecha_parts/mecha_equipment/cable_layer, \
+ export_types = list(/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp, /obj/item/mecha_parts/mecha_equipment/extinguisher, /obj/item/mecha_parts/mecha_equipment/rcd, \
/obj/item/mecha_parts/mecha_equipment/drill, /obj/item/mecha_parts/mecha_equipment/mining_scanner, /obj/item/mecha_parts/mecha_equipment/medical/sleeper)
/datum/export/robotics/mech_blue_space
diff --git a/code/modules/cargo/expressconsole.dm b/code/modules/cargo/expressconsole.dm
index 65b7b6cca7..62fa7f8488 100644
--- a/code/modules/cargo/expressconsole.dm
+++ b/code/modules/cargo/expressconsole.dm
@@ -26,7 +26,7 @@
var/locked = TRUE //is the console locked? unlock with ID
var/usingBeacon = FALSE //is the console in beacon mode? exists to let beacon know when a pod may come in
-/obj/machinery/computer/cargo/express/Initialize()
+/obj/machinery/computer/cargo/express/Initialize(mapload)
. = ..()
packin_up()
diff --git a/code/modules/cargo/supplypod.dm b/code/modules/cargo/supplypod.dm
index 2bdd84141c..48baaa80d8 100644
--- a/code/modules/cargo/supplypod.dm
+++ b/code/modules/cargo/supplypod.dm
@@ -11,7 +11,7 @@
allow_dense = TRUE
delivery_icon = null
can_weld_shut = FALSE
- armor = list("melee" = 30, "bullet" = 50, "laser" = 50, "energy" = 100, "bomb" = 100, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 80)
+ armor = list(MELEE = 30, BULLET = 50, LASER = 50, ENERGY = 100, BOMB = 100, BIO = 0, RAD = 0, FIRE = 100, ACID = 80)
anchored = TRUE //So it cant slide around after landing
anchorable = FALSE
flags_1 = PREVENT_CONTENTS_EXPLOSION_1
@@ -89,7 +89,7 @@
style = customStyle
setStyle(style) //Upon initialization, give the supplypod an iconstate, name, and description based on the "style" variable. This system is important for the centcom_podlauncher to function correctly
-/obj/structure/closet/supplypod/extractionpod/Initialize()
+/obj/structure/closet/supplypod/extractionpod/Initialize(mapload)
. = ..()
var/turf/picked_turf = pick(GLOB.holdingfacility)
reverse_dropoff_coords = list(picked_turf.x, picked_turf.y, picked_turf.z)
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 5fcb6787d2..dcfb199837 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -85,6 +85,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/tgui_lock = TRUE
var/windowflashing = TRUE
var/toggles = TOGGLES_DEFAULT
+ /// A separate variable for deadmin toggles, only deals with those.
+ var/deadmin = NONE
var/db_flags
var/chat_toggles = TOGGLES_DEFAULT_CHAT
var/ghost_form = "ghost"
@@ -130,7 +132,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/eye_type = DEFAULT_EYES_TYPE //Eye type
var/split_eye_colors = FALSE
var/datum/species/pref_species = new /datum/species/human() //Mutant race
- var/list/features = list("mcolor" = "FFFFFF", "mcolor2" = "FFFFFF", "mcolor3" = "FFFFFF", "tail_lizard" = "Smooth", "tail_human" = "None", "snout" = "Round", "horns" = "None", "horns_color" = "85615a", "ears" = "None", "wings" = "None", "wings_color" = "FFF", "frills" = "None", "deco_wings" = "None", "spines" = "None", "legs" = "Plantigrade", "insect_wings" = "Plain", "insect_fluff" = "None", "insect_markings" = "None", "arachnid_legs" = "Plain", "arachnid_spinneret" = "Plain", "arachnid_mandibles" = "Plain", "mam_body_markings" = list(), "mam_ears" = "None", "mam_snouts" = "None", "mam_tail" = "None", "mam_tail_animated" = "None", "xenodorsal" = "Standard", "xenohead" = "Standard", "xenotail" = "Xenomorph Tail", "taur" = "None", "genitals_use_skintone" = FALSE, "has_cock" = FALSE, "cock_shape" = DEF_COCK_SHAPE, "cock_length" = COCK_SIZE_DEF, "cock_diameter_ratio" = COCK_DIAMETER_RATIO_DEF, "cock_color" = "ffffff", "cock_taur" = FALSE, "has_balls" = FALSE, "balls_color" = "ffffff", "balls_shape" = DEF_BALLS_SHAPE, "balls_size" = BALLS_SIZE_DEF, "balls_cum_rate" = CUM_RATE, "balls_cum_mult" = CUM_RATE_MULT, "balls_efficiency" = CUM_EFFICIENCY, "has_breasts" = FALSE, "breasts_color" = "ffffff", "breasts_size" = BREASTS_SIZE_DEF, "breasts_shape" = DEF_BREASTS_SHAPE, "breasts_producing" = FALSE, "has_vag" = FALSE, "vag_shape" = DEF_VAGINA_SHAPE, "vag_color" = "ffffff", "has_womb" = FALSE, "balls_visibility" = GEN_VISIBLE_NO_UNDIES, "breasts_visibility"= GEN_VISIBLE_NO_UNDIES, "cock_visibility" = GEN_VISIBLE_NO_UNDIES, "vag_visibility" = GEN_VISIBLE_NO_UNDIES, "ipc_screen" = "Sunburst", "ipc_antenna" = "None", "flavor_text" = "", "silicon_flavor_text" = "", "ooc_notes" = "", "meat_type" = "Mammalian", "body_model" = MALE, "body_size" = RESIZE_DEFAULT_SIZE, "color_scheme" = OLD_CHARACTER_COLORING)
+ var/list/features = list("mcolor" = "FFFFFF", "mcolor2" = "FFFFFF", "mcolor3" = "FFFFFF", "tail_lizard" = "Smooth", "tail_human" = "None", "snout" = "Round", "horns" = "None", "horns_color" = "85615a", "ears" = "None", "wings" = "None", "wings_color" = "FFF", "frills" = "None", "deco_wings" = "None", "spines" = "None", "legs" = "Plantigrade", "insect_wings" = "Plain", "insect_fluff" = "None", "insect_markings" = "None", "arachnid_legs" = "Plain", "arachnid_spinneret" = "Plain", "arachnid_mandibles" = "Plain", "mam_body_markings" = list(), "mam_ears" = "None", "mam_snouts" = "None", "mam_tail" = "None", "mam_tail_animated" = "None", "xenodorsal" = "Standard", "xenohead" = "Standard", "xenotail" = "Xenomorph Tail", "taur" = "None", "genitals_use_skintone" = FALSE, "has_cock" = FALSE, "cock_shape" = DEF_COCK_SHAPE, "cock_length" = COCK_SIZE_DEF, "cock_diameter_ratio" = COCK_DIAMETER_RATIO_DEF, "cock_color" = "ffffff", "cock_taur" = FALSE, "has_balls" = FALSE, "balls_color" = "ffffff", "balls_shape" = DEF_BALLS_SHAPE, "balls_size" = BALLS_SIZE_DEF, "balls_cum_rate" = CUM_RATE, "balls_cum_mult" = CUM_RATE_MULT, "balls_efficiency" = CUM_EFFICIENCY, "has_breasts" = FALSE, "breasts_color" = "ffffff", "breasts_size" = BREASTS_SIZE_DEF, "breasts_shape" = DEF_BREASTS_SHAPE, "breasts_producing" = FALSE, "has_vag" = FALSE, "vag_shape" = DEF_VAGINA_SHAPE, "vag_color" = "ffffff", "has_womb" = FALSE, "has_butt" = FALSE, "butt_color" = "ffffff", "butt_size" = BUTT_SIZE_DEF, "balls_visibility" = GEN_VISIBLE_NO_UNDIES, "breasts_visibility"= GEN_VISIBLE_NO_UNDIES, "cock_visibility" = GEN_VISIBLE_NO_UNDIES, "vag_visibility" = GEN_VISIBLE_NO_UNDIES, "butt_visibility" = GEN_VISIBLE_NO_UNDIES, "ipc_screen" = "Sunburst", "ipc_antenna" = "None", "flavor_text" = "", "silicon_flavor_text" = "", "ooc_notes" = "", "meat_type" = "Mammalian", "body_model" = MALE, "body_size" = RESIZE_DEFAULT_SIZE, "color_scheme" = OLD_CHARACTER_COLORING)
var/custom_speech_verb = "default" //if your say_mod is to be something other than your races
var/custom_tongue = "default" //if your tongue is to be something other than your races
@@ -721,6 +723,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
else
dat += "Testicles Color:
"
dat += " Change
"
+ dat += "Testicles Shape: [features["balls_shape"]]"
dat += "Testicles Visibility:[features["balls_visibility"]]"
dat += APPEARANCE_CATEGORY_COLUMN
dat += "Vagina
"
@@ -751,6 +754,19 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "Breasts Visibility:[features["breasts_visibility"]]"
dat += "Lactates:[features["breasts_producing"] == TRUE ? "Yes" : "No"]"
dat += ""
+ dat += APPEARANCE_CATEGORY_COLUMN
+ dat += "Butt
"
+ dat += "[features["has_butt"] == TRUE ? "Yes" : "No"]"
+ if(features["has_butt"])
+ if(pref_species.use_skintones && features["genitals_use_skintone"] == TRUE)
+ dat += "Color:
"
+ dat += " (Skin tone overriding)
"
+ else
+ dat += "Color:
"
+ dat += " Change
"
+ dat += "Butt Size:[features["butt_size"]]"
+ dat += "Butt Visibility:[features["butt_visibility"]]"
+ dat += ""
dat += ""
dat += ""
@@ -830,6 +846,35 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "Announce Login: [(toggles & ANNOUNCE_LOGIN)?"Enabled":"Disabled"]
"
dat += "
"
dat += "Combo HUD Lighting: [(toggles & COMBOHUD_LIGHTING)?"Full-bright":"No Change"]
"
+ dat += "
"
+
+ //deadmin
+ dat += "Deadmin While Playing
"
+ if(CONFIG_GET(flag/auto_deadmin_players))
+ dat += "Always Deadmin: FORCED
"
+ else
+ dat += "Always Deadmin: [(deadmin & DEADMIN_ALWAYS)?"Enabled":"Disabled"]
"
+ if(!(deadmin & DEADMIN_ALWAYS))
+ dat += "
"
+ if(!CONFIG_GET(flag/auto_deadmin_antagonists))
+ dat += "As Antag: [(deadmin & DEADMIN_ANTAGONIST)?"Deadmin":"Keep Admin"]
"
+ else
+ dat += "As Antag: FORCED
"
+
+ if(!CONFIG_GET(flag/auto_deadmin_heads))
+ dat += "As Command: [(deadmin & DEADMIN_POSITION_HEAD)?"Deadmin":"Keep Admin"]
"
+ else
+ dat += "As Command: FORCED
"
+
+ if(!CONFIG_GET(flag/auto_deadmin_security))
+ dat += "As Security: [(deadmin & DEADMIN_POSITION_SECURITY)?"Deadmin":"Keep Admin"]
"
+ else
+ dat += "As Security: FORCED
"
+
+ if(!CONFIG_GET(flag/auto_deadmin_silicons))
+ dat += "As Silicon: [(deadmin & DEADMIN_POSITION_SILICON)?"Deadmin":"Keep Admin"]
"
+ else
+ dat += "As Silicon: FORCED
"
dat += ""
dat +=""
@@ -1098,6 +1143,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "Other content prefs"
dat += "Breast Enlargement: [(cit_toggles & BREAST_ENLARGEMENT) ? "Allowed" : "Disallowed"] "
dat += "Penis Enlargement: [(cit_toggles & PENIS_ENLARGEMENT) ? "Allowed" : "Disallowed"] "
+ dat += "Butt Enlargement: [(cit_toggles & BUTT_ENLARGEMENT) ? "Allowed" : "Disallowed"] "
dat += "Hypno: [(cit_toggles & NEVER_HYPNO) ? "Disallowed" : "Allowed"] "
dat += "Aphrodisiacs: [(cit_toggles & NO_APHRO) ? "Disallowed" : "Allowed"] "
dat += "Ass Slapping: [(cit_toggles & NO_ASS_SLAP) ? "Disallowed" : "Allowed"] "
@@ -2285,6 +2331,12 @@ GLOBAL_LIST_EMPTY(preferences_datums)
else
to_chat(user,"Invalid color. Your color is not bright enough.")
+ if("balls_shape")
+ var/new_shape
+ new_shape = input(user, "Testicle Shape", "Character Preference") as null|anything in GLOB.balls_shapes_list
+ if(new_shape)
+ features["balls_shape"] = new_shape
+
if("balls_visibility")
var/n_vis = input(user, "Testicles Visibility", "Character Preference") as null|anything in CONFIG_GET(keyed_list/safe_visibility_toggles)
if(n_vis)
@@ -2339,6 +2391,29 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if(n_vis)
features["vag_visibility"] = n_vis
+ if("butt_color")
+ var/new_buttcolor = input(user, "Butt color:", "Character Preference","#"+features["butt_color"]) as color|null
+ if(new_buttcolor)
+ var/temp_hsv = RGBtoHSV(new_buttcolor)
+ if(new_buttcolor == "#000000")
+ features["butt_color"] = pref_species.default_color
+ else if(ReadHSV(temp_hsv)[3] >= ReadHSV(MINIMUM_MUTANT_COLOR)[3])
+ features["butt_color"] = sanitize_hexcolor(new_buttcolor, 6)
+ else
+ to_chat(user,"Invalid color. Your color is not bright enough.")
+
+ if("butt_size")
+ var/min_B = CONFIG_GET(number/butt_min_size_prefs)
+ var/max_B = CONFIG_GET(number/butt_max_size_prefs)
+ var/new_length = input(user, "Butt size:\n([min_B]-[max_B])", "Character Preference") as num|null
+ if(new_length)
+ features["butt_size"] = clamp(round(new_length), min_B, max_B)
+
+ if("butt_visibility")
+ var/n_vis = input(user, "Butt Visibility", "Character Preference") as null|anything in CONFIG_GET(keyed_list/safe_visibility_toggles)
+ if(n_vis)
+ features["butt_visibility"] = n_vis
+
if("ooccolor")
var/new_ooccolor = input(user, "Choose your OOC colour:", "Game Preference",ooccolor) as color|null
if(new_ooccolor)
@@ -2597,6 +2672,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
features["has_womb"] = FALSE
if("has_womb")
features["has_womb"] = !features["has_womb"]
+ if("has_butt")
+ features["has_butt"] = !features["has_butt"]
if("widescreenpref")
widescreenpref = !widescreenpref
user.client.view_size.setDefault(getScreenSize(widescreenpref))
@@ -2769,6 +2846,19 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if("combohud_lighting")
toggles ^= COMBOHUD_LIGHTING
+ // Deadmin preferences
+ if("toggle_deadmin_always")
+ deadmin ^= DEADMIN_ALWAYS
+ if("toggle_deadmin_antag")
+ deadmin ^= DEADMIN_ANTAGONIST
+ if("toggle_deadmin_head")
+ deadmin ^= DEADMIN_POSITION_HEAD
+ if("toggle_deadmin_security")
+ deadmin ^= DEADMIN_POSITION_SECURITY
+ if("toggle_deadmin_silicon")
+ deadmin ^= DEADMIN_POSITION_SILICON
+ //
+
if("be_special")
var/be_special_type = href_list["be_special_type"]
if(be_special_type in be_special)
@@ -2861,6 +2951,9 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if("penis_enlargement")
cit_toggles ^= PENIS_ENLARGEMENT
+ if("butt_enlargement")
+ cit_toggles ^= BUTT_ENLARGEMENT
+
if("feminization")
cit_toggles ^= FORCED_FEM
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index 628a51ed44..a4fadb9b41 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -401,6 +401,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["default_slot"] >> default_slot
S["chat_toggles"] >> chat_toggles
S["toggles"] >> toggles
+ S["deadmin"] >> deadmin
S["ghost_form"] >> ghost_form
S["ghost_orbit"] >> ghost_orbit
S["ghost_accs"] >> ghost_accs
@@ -473,6 +474,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
windowflashing = sanitize_integer(windowflashing, 0, 1, initial(windowflashing))
default_slot = sanitize_integer(default_slot, 1, max_save_slots, initial(default_slot))
toggles = sanitize_integer(toggles, 0, 16777215, initial(toggles))
+ deadmin = sanitize_integer(deadmin, 0, 16777215, initial(deadmin))
clientfps = sanitize_integer(clientfps, 0, 1000, 0)
parallax = sanitize_integer(parallax, PARALLAX_DISABLE, PARALLAX_INSANE, null)
ambientocclusion = sanitize_integer(ambientocclusion, 0, 1, initial(ambientocclusion))
@@ -582,6 +584,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
WRITE_FILE(S["be_special"], be_special)
WRITE_FILE(S["default_slot"], default_slot)
WRITE_FILE(S["toggles"], toggles)
+ WRITE_FILE(S["deadmin"], deadmin)
WRITE_FILE(S["chat_toggles"], chat_toggles)
WRITE_FILE(S["ghost_form"], ghost_form)
WRITE_FILE(S["ghost_orbit"], ghost_orbit)
@@ -641,7 +644,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
var/savefile/S = new /savefile(path)
if(!S)
return FALSE
- features = list("mcolor" = "FFFFFF", "mcolor2" = "FFFFFF", "mcolor3" = "FFFFFF", "tail_lizard" = "Smooth", "tail_human" = "None", "snout" = "Round", "horns" = "None", "horns_color" = "85615a", "ears" = "None", "wings" = "None", "wings_color" = "FFF", "frills" = "None", "deco_wings" = "None", "spines" = "None", "legs" = "Plantigrade", "insect_wings" = "Plain", "insect_fluff" = "None", "insect_markings" = "None", "arachnid_legs" = "Plain", "arachnid_spinneret" = "Plain", "arachnid_mandibles" = "Plain", "mam_body_markings" = "Plain", "mam_ears" = "None", "mam_snouts" = "None", "mam_tail" = "None", "mam_tail_animated" = "None", "xenodorsal" = "Standard", "xenohead" = "Standard", "xenotail" = "Xenomorph Tail", "taur" = "None", "genitals_use_skintone" = FALSE, "has_cock" = FALSE, "cock_shape" = DEF_COCK_SHAPE, "cock_length" = COCK_SIZE_DEF, "cock_diameter_ratio" = COCK_DIAMETER_RATIO_DEF, "cock_color" = "ffffff", "cock_taur" = FALSE, "has_balls" = FALSE, "balls_color" = "ffffff", "balls_shape" = DEF_BALLS_SHAPE, "balls_size" = BALLS_SIZE_DEF, "balls_cum_rate" = CUM_RATE, "balls_cum_mult" = CUM_RATE_MULT, "balls_efficiency" = CUM_EFFICIENCY, "has_breasts" = FALSE, "breasts_color" = "ffffff", "breasts_size" = BREASTS_SIZE_DEF, "breasts_shape" = DEF_BREASTS_SHAPE, "breasts_producing" = FALSE, "has_vag" = FALSE, "vag_shape" = DEF_VAGINA_SHAPE, "vag_color" = "ffffff", "has_womb" = FALSE, "balls_visibility" = GEN_VISIBLE_NO_UNDIES, "breasts_visibility"= GEN_VISIBLE_NO_UNDIES, "cock_visibility" = GEN_VISIBLE_NO_UNDIES, "vag_visibility" = GEN_VISIBLE_NO_UNDIES, "ipc_screen" = "Sunburst", "ipc_antenna" = "None", "flavor_text" = "", "silicon_flavor_text" = "", "ooc_notes" = "", "meat_type" = "Mammalian", "body_model" = MALE, "body_size" = RESIZE_DEFAULT_SIZE, "color_scheme" = OLD_CHARACTER_COLORING)
+ features = list("mcolor" = "FFFFFF", "mcolor2" = "FFFFFF", "mcolor3" = "FFFFFF", "tail_lizard" = "Smooth", "tail_human" = "None", "snout" = "Round", "horns" = "None", "horns_color" = "85615a", "ears" = "None", "wings" = "None", "wings_color" = "FFF", "frills" = "None", "deco_wings" = "None", "spines" = "None", "legs" = "Plantigrade", "insect_wings" = "Plain", "insect_fluff" = "None", "insect_markings" = "None", "arachnid_legs" = "Plain", "arachnid_spinneret" = "Plain", "arachnid_mandibles" = "Plain", "mam_body_markings" = "Plain", "mam_ears" = "None", "mam_snouts" = "None", "mam_tail" = "None", "mam_tail_animated" = "None", "xenodorsal" = "Standard", "xenohead" = "Standard", "xenotail" = "Xenomorph Tail", "taur" = "None", "genitals_use_skintone" = FALSE, "has_cock" = FALSE, "cock_shape" = DEF_COCK_SHAPE, "cock_length" = COCK_SIZE_DEF, "cock_diameter_ratio" = COCK_DIAMETER_RATIO_DEF, "cock_color" = "ffffff", "cock_taur" = FALSE, "has_balls" = FALSE, "balls_color" = "ffffff", "balls_shape" = DEF_BALLS_SHAPE, "balls_size" = BALLS_SIZE_DEF, "balls_cum_rate" = CUM_RATE, "balls_cum_mult" = CUM_RATE_MULT, "balls_efficiency" = CUM_EFFICIENCY, "has_breasts" = FALSE, "breasts_color" = "ffffff", "breasts_size" = BREASTS_SIZE_DEF, "breasts_shape" = DEF_BREASTS_SHAPE, "breasts_producing" = FALSE, "has_vag" = FALSE, "vag_shape" = DEF_VAGINA_SHAPE, "vag_color" = "ffffff", "has_womb" = FALSE, "has_butt" = FALSE, "butt_color" = "ffffff", "butt_size" = BUTT_SIZE_DEF, "balls_visibility" = GEN_VISIBLE_NO_UNDIES, "breasts_visibility"= GEN_VISIBLE_NO_UNDIES, "cock_visibility" = GEN_VISIBLE_NO_UNDIES, "vag_visibility" = GEN_VISIBLE_NO_UNDIES, "butt_visibility" = GEN_VISIBLE_NO_UNDIES, "ipc_screen" = "Sunburst", "ipc_antenna" = "None", "flavor_text" = "", "silicon_flavor_text" = "", "ooc_notes" = "", "meat_type" = "Mammalian", "body_model" = MALE, "body_size" = RESIZE_DEFAULT_SIZE, "color_scheme" = OLD_CHARACTER_COLORING)
S.cd = "/"
if(!slot)
@@ -804,6 +807,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
//balls features
S["feature_has_balls"] >> features["has_balls"]
S["feature_balls_color"] >> features["balls_color"]
+ S["feature_balls_shape"] >> features["balls_shape"]
S["feature_balls_size"] >> features["balls_size"]
S["feature_balls_visibility"] >> features["balls_visibility"]
//breasts features
@@ -820,6 +824,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["feature_vag_visibility"] >> features["vag_visibility"]
//womb features
S["feature_has_womb"] >> features["has_womb"]
+ //butt features
+ S["feature_has_butt"] >> features["has_butt"]
+ S["feature_butt_color"] >> features["butt_color"]
+ S["feature_butt_size"] >> features["butt_size"]
+ S["feature_butt_visibility"] >> features["butt_visibility"]
//flavor text
//Let's make our players NOT cry desperately as we wipe their savefiles of their special snowflake texts:
@@ -942,6 +951,13 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
var/static/max_D
if(!max_D)
max_D = CONFIG_GET(number/penis_max_inches_prefs)
+ var/static/min_B
+ if(!min_B)
+ min_B = CONFIG_GET(number/butt_min_size_prefs)
+ var/static/max_B
+ if(!max_B)
+ max_B = CONFIG_GET(number/butt_max_size_prefs)
+
var/static/safe_visibilities
if(!safe_visibilities)
var/list/L = CONFIG_GET(keyed_list/safe_visibility_toggles)
@@ -949,6 +965,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
features["breasts_size"] = sanitize_inlist(features["breasts_size"], B_sizes, BREASTS_SIZE_DEF)
features["cock_length"] = sanitize_integer(features["cock_length"], min_D, max_D, COCK_SIZE_DEF)
+ features["butt_size"] = sanitize_integer(features["butt_size"], min_B, max_B, BUTT_SIZE_DEF)
features["breasts_shape"] = sanitize_inlist(features["breasts_shape"], GLOB.breasts_shapes_list, DEF_BREASTS_SHAPE)
features["cock_shape"] = sanitize_inlist(features["cock_shape"], GLOB.cock_shapes_list, DEF_COCK_SHAPE)
features["balls_shape"] = sanitize_inlist(features["balls_shape"], GLOB.balls_shapes_list, DEF_BALLS_SHAPE)
@@ -961,6 +978,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
features["cock_visibility"] = sanitize_inlist(features["cock_visibility"], safe_visibilities, GEN_VISIBLE_NO_UNDIES)
features["balls_visibility"] = sanitize_inlist(features["balls_visibility"], safe_visibilities, GEN_VISIBLE_NO_UNDIES)
features["vag_visibility"] = sanitize_inlist(features["vag_visibility"], safe_visibilities, GEN_VISIBLE_NO_UNDIES)
+ features["butt_visibility"] = sanitize_inlist(features["butt_visibility"], safe_visibilities, GEN_VISIBLE_NO_UNDIES)
custom_speech_verb = sanitize_inlist(custom_speech_verb, GLOB.speech_verbs, "default")
custom_tongue = sanitize_inlist(custom_tongue, GLOB.roundstart_tongues, "default")
@@ -1107,6 +1125,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
WRITE_FILE(S["feature_has_balls"], features["has_balls"])
WRITE_FILE(S["feature_balls_color"], features["balls_color"])
+ WRITE_FILE(S["feature_balls_shape"], features["balls_shape"])
WRITE_FILE(S["feature_balls_size"], features["balls_size"])
WRITE_FILE(S["feature_balls_visibility"], features["balls_visibility"])
@@ -1124,6 +1143,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
WRITE_FILE(S["feature_has_womb"], features["has_womb"])
+ WRITE_FILE(S["feature_has_butt"], features["has_butt"])
+ WRITE_FILE(S["feature_butt_color"], features["butt_color"])
+ WRITE_FILE(S["feature_butt_size"], features["butt_size"])
+ WRITE_FILE(S["feature_butt_visibility"], features["butt_visibility"])
+
WRITE_FILE(S["feature_ooc_notes"], features["ooc_notes"])
WRITE_FILE(S["feature_color_scheme"], features["color_scheme"])
diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm
index 697afd4885..05ef6f18e0 100644
--- a/code/modules/clothing/chameleon.dm
+++ b/code/modules/clothing/chameleon.dm
@@ -279,7 +279,7 @@ CHAMELEON_CLOTHING_DEFINE(/obj/item/clothing/under/chameleon)
sensor_flags = NONE
resistance_flags = NONE
can_adjust = FALSE
- armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
+ armor = list(MELEE = 10, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50)
var/datum/action/item_action/chameleon/change/chameleon_action
@@ -289,7 +289,7 @@ CHAMELEON_CLOTHING_DEFINE(/obj/item/clothing/under/chameleon)
icon_state = "engine"
item_state = "engi_suit"
-/obj/item/clothing/under/chameleon/Initialize()
+/obj/item/clothing/under/chameleon/Initialize(mapload)
. = ..()
chameleon_action = new(src)
chameleon_action.chameleon_type = /obj/item/clothing/under
@@ -303,7 +303,7 @@ CHAMELEON_CLOTHING_DEFINE(/obj/item/clothing/under/chameleon)
return
chameleon_action.emp_randomise()
-/obj/item/clothing/under/chameleon/broken/Initialize()
+/obj/item/clothing/under/chameleon/broken/Initialize(mapload)
. = ..()
chameleon_action.emp_randomise(INFINITY)
@@ -314,11 +314,11 @@ CHAMELEON_CLOTHING_DEFINE(/obj/item/clothing/suit/chameleon)
item_state = "armor"
blood_overlay_type = "armor"
resistance_flags = NONE
- armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
+ armor = list(MELEE = 10, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50)
var/datum/action/item_action/chameleon/change/chameleon_action
-/obj/item/clothing/suit/chameleon/Initialize()
+/obj/item/clothing/suit/chameleon/Initialize(mapload)
. = ..()
chameleon_action = new(src)
chameleon_action.chameleon_type = /obj/item/clothing/suit
@@ -332,7 +332,7 @@ CHAMELEON_CLOTHING_DEFINE(/obj/item/clothing/suit/chameleon)
return
chameleon_action.emp_randomise()
-/obj/item/clothing/suit/chameleon/broken/Initialize()
+/obj/item/clothing/suit/chameleon/broken/Initialize(mapload)
. = ..()
chameleon_action.emp_randomise(INFINITY)
@@ -342,11 +342,11 @@ CHAMELEON_CLOTHING_DEFINE(/obj/item/clothing/glasses/chameleon)
icon_state = "meson"
item_state = "meson"
resistance_flags = NONE
- armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
+ armor = list(MELEE = 10, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50)
var/datum/action/item_action/chameleon/change/chameleon_action
-/obj/item/clothing/glasses/chameleon/Initialize()
+/obj/item/clothing/glasses/chameleon/Initialize(mapload)
. = ..()
chameleon_action = new(src)
chameleon_action.chameleon_type = /obj/item/clothing/glasses
@@ -360,7 +360,7 @@ CHAMELEON_CLOTHING_DEFINE(/obj/item/clothing/glasses/chameleon)
return
chameleon_action.emp_randomise()
-/obj/item/clothing/glasses/chameleon/broken/Initialize()
+/obj/item/clothing/glasses/chameleon/broken/Initialize(mapload)
. = ..()
chameleon_action.emp_randomise(INFINITY)
@@ -371,14 +371,14 @@ CHAMELEON_CLOTHING_DEFINE(/obj/item/clothing/gloves/chameleon)
item_state = "ygloves"
resistance_flags = NONE
- armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
+ armor = list(MELEE = 10, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50)
var/datum/action/item_action/chameleon/change/chameleon_action
CHAMELEON_CLOTHING_DEFINE(/obj/item/clothing/gloves/chameleon/insulated)
siemens_coefficient = 0
-/obj/item/clothing/gloves/chameleon/Initialize()
+/obj/item/clothing/gloves/chameleon/Initialize(mapload)
. = ..()
chameleon_action = new(src)
chameleon_action.chameleon_type = /obj/item/clothing/gloves
@@ -392,7 +392,7 @@ CHAMELEON_CLOTHING_DEFINE(/obj/item/clothing/gloves/chameleon/insulated)
return
chameleon_action.emp_randomise()
-/obj/item/clothing/gloves/chameleon/broken/Initialize()
+/obj/item/clothing/gloves/chameleon/broken/Initialize(mapload)
. = ..()
chameleon_action.emp_randomise(INFINITY)
@@ -402,11 +402,11 @@ CHAMELEON_CLOTHING_DEFINE(/obj/item/clothing/head/chameleon)
icon_state = "greysoft"
resistance_flags = NONE
- armor = list("melee" = 5, "bullet" = 5, "laser" = 5, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
+ armor = list(MELEE = 5, BULLET = 5, LASER = 5, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50)
var/datum/action/item_action/chameleon/change/chameleon_action
-/obj/item/clothing/head/chameleon/Initialize()
+/obj/item/clothing/head/chameleon/Initialize(mapload)
. = ..()
chameleon_action = new(src)
chameleon_action.chameleon_type = /obj/item/clothing/head
@@ -420,17 +420,17 @@ CHAMELEON_CLOTHING_DEFINE(/obj/item/clothing/head/chameleon)
return
chameleon_action.emp_randomise()
-/obj/item/clothing/head/chameleon/broken/Initialize()
+/obj/item/clothing/head/chameleon/broken/Initialize(mapload)
. = ..()
chameleon_action.emp_randomise(INFINITY)
/obj/item/clothing/head/chameleon/drone
// The camohat, I mean, holographic hat projection, is part of the
// drone itself.
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0)
// which means it offers no protection, it's just air and light
-/obj/item/clothing/head/chameleon/drone/Initialize()
+/obj/item/clothing/head/chameleon/drone/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, ABSTRACT_ITEM_TRAIT)
chameleon_action.random_look()
@@ -445,7 +445,7 @@ CHAMELEON_CLOTHING_DEFINE(/obj/item/clothing/mask/chameleon)
icon_state = "gas_alt"
item_state = "gas_alt"
resistance_flags = NONE
- armor = list("melee" = 5, "bullet" = 5, "laser" = 5, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
+ armor = list(MELEE = 5, BULLET = 5, LASER = 5, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50)
clothing_flags = BLOCK_GAS_SMOKE_EFFECT | ALLOWINTERNALS
flags_inv = HIDEEARS|HIDEEYES|HIDEFACE|HIDEFACIALHAIR
gas_transfer_coefficient = 0.01
@@ -456,7 +456,7 @@ CHAMELEON_CLOTHING_DEFINE(/obj/item/clothing/mask/chameleon)
var/datum/action/item_action/chameleon/change/chameleon_action
-/obj/item/clothing/mask/chameleon/Initialize()
+/obj/item/clothing/mask/chameleon/Initialize(mapload)
. = ..()
chameleon_action = new(src)
chameleon_action.chameleon_type = /obj/item/clothing/mask
@@ -470,7 +470,7 @@ CHAMELEON_CLOTHING_DEFINE(/obj/item/clothing/mask/chameleon)
return
chameleon_action.emp_randomise()
-/obj/item/clothing/mask/chameleon/broken/Initialize()
+/obj/item/clothing/mask/chameleon/broken/Initialize(mapload)
. = ..()
chameleon_action.emp_randomise(INFINITY)
@@ -480,11 +480,11 @@ CHAMELEON_CLOTHING_DEFINE(/obj/item/clothing/mask/chameleon)
/obj/item/clothing/mask/chameleon/drone
//Same as the drone chameleon hat, undroppable and no protection
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0)
// Can drones use the voice changer part? Let's not find out.
voice_change = 0
-/obj/item/clothing/mask/chameleon/drone/Initialize()
+/obj/item/clothing/mask/chameleon/drone/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, ABSTRACT_ITEM_TRAIT)
chameleon_action.random_look()
@@ -502,12 +502,12 @@ CHAMELEON_CLOTHING_DEFINE(/obj/item/clothing/shoes/chameleon)
desc = "A pair of black shoes."
permeability_coefficient = 0.05
resistance_flags = NONE
- armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
+ armor = list(MELEE = 10, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50)
pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes
var/datum/action/item_action/chameleon/change/chameleon_action
-/obj/item/clothing/shoes/chameleon/Initialize()
+/obj/item/clothing/shoes/chameleon/Initialize(mapload)
. = ..()
chameleon_action = new(src)
chameleon_action.chameleon_type = /obj/item/clothing/shoes
@@ -527,7 +527,7 @@ CHAMELEON_CLOTHING_DEFINE(/obj/item/clothing/shoes/chameleon/noslip)
desc = "A pair of black shoes."
clothing_flags = NOSLIP
-/obj/item/clothing/shoes/chameleon/noslip/broken/Initialize()
+/obj/item/clothing/shoes/chameleon/noslip/broken/Initialize(mapload)
. = ..()
chameleon_action.emp_randomise(INFINITY)
@@ -535,7 +535,7 @@ CHAMELEON_CLOTHING_DEFINE(/obj/item/storage/backpack/chameleon)
name = "backpack"
var/datum/action/item_action/chameleon/change/chameleon_action
-/obj/item/storage/backpack/chameleon/Initialize()
+/obj/item/storage/backpack/chameleon/Initialize(mapload)
. = ..()
chameleon_action = new(src)
chameleon_action.chameleon_type = /obj/item/storage/backpack
@@ -548,7 +548,7 @@ CHAMELEON_CLOTHING_DEFINE(/obj/item/storage/backpack/chameleon)
return
chameleon_action.emp_randomise()
-/obj/item/storage/backpack/chameleon/broken/Initialize()
+/obj/item/storage/backpack/chameleon/broken/Initialize(mapload)
. = ..()
chameleon_action.emp_randomise(INFINITY)
@@ -557,7 +557,7 @@ CHAMELEON_CLOTHING_DEFINE(/obj/item/storage/belt/chameleon)
desc = "Holds tools."
var/datum/action/item_action/chameleon/change/chameleon_action
-/obj/item/storage/belt/chameleon/Initialize()
+/obj/item/storage/belt/chameleon/Initialize(mapload)
. = ..()
chameleon_action = new(src)
@@ -576,7 +576,7 @@ CHAMELEON_CLOTHING_DEFINE(/obj/item/storage/belt/chameleon)
return
chameleon_action.emp_randomise()
-/obj/item/storage/belt/chameleon/broken/Initialize()
+/obj/item/storage/belt/chameleon/broken/Initialize(mapload)
. = ..()
chameleon_action.emp_randomise(INFINITY)
@@ -584,7 +584,7 @@ CHAMELEON_CLOTHING_DEFINE(/obj/item/radio/headset/chameleon)
name = "radio headset"
var/datum/action/item_action/chameleon/change/chameleon_action
-/obj/item/radio/headset/chameleon/Initialize()
+/obj/item/radio/headset/chameleon/Initialize(mapload)
. = ..()
chameleon_action = new(src)
chameleon_action.chameleon_type = /obj/item/radio/headset
@@ -597,7 +597,7 @@ CHAMELEON_CLOTHING_DEFINE(/obj/item/radio/headset/chameleon)
return
chameleon_action.emp_randomise()
-/obj/item/radio/headset/chameleon/broken/Initialize()
+/obj/item/radio/headset/chameleon/broken/Initialize(mapload)
. = ..()
chameleon_action.emp_randomise(INFINITY)
@@ -605,7 +605,7 @@ CHAMELEON_CLOTHING_DEFINE(/obj/item/pda/chameleon)
name = "PDA"
var/datum/action/item_action/chameleon/change/pda/chameleon_action
-/obj/item/pda/chameleon/Initialize()
+/obj/item/pda/chameleon/Initialize(mapload)
. = ..()
chameleon_action = new(src)
chameleon_action.chameleon_type = /obj/item/pda
@@ -619,21 +619,21 @@ CHAMELEON_CLOTHING_DEFINE(/obj/item/pda/chameleon)
return
chameleon_action.emp_randomise()
-/obj/item/pda/chameleon/broken/Initialize()
+/obj/item/pda/chameleon/broken/Initialize(mapload)
. = ..()
chameleon_action.emp_randomise(INFINITY)
CHAMELEON_CLOTHING_DEFINE(/obj/item/stamp/chameleon)
var/datum/action/item_action/chameleon/change/chameleon_action
-/obj/item/stamp/chameleon/Initialize()
+/obj/item/stamp/chameleon/Initialize(mapload)
. = ..()
chameleon_action = new(src)
chameleon_action.chameleon_type = /obj/item/stamp
chameleon_action.chameleon_name = "Stamp"
chameleon_action.initialize_disguises()
-/obj/item/stamp/chameleon/broken/Initialize()
+/obj/item/stamp/chameleon/broken/Initialize(mapload)
. = ..()
chameleon_action.emp_randomise(INFINITY)
@@ -643,12 +643,12 @@ CHAMELEON_CLOTHING_DEFINE(/obj/item/clothing/neck/cloak/chameleon)
icon = 'icons/obj/clothing/neck.dmi'
icon_state = "blacktie"
resistance_flags = NONE
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50)
/obj/item/clothing/neck/cloak/chameleon
var/datum/action/item_action/chameleon/change/chameleon_action
-/obj/item/clothing/neck/cloak/chameleon/Initialize()
+/obj/item/clothing/neck/cloak/chameleon/Initialize(mapload)
. = ..()
chameleon_action = new(src)
chameleon_action.chameleon_type = /obj/item/clothing/neck
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index 572cce28b2..f349eae02b 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -63,7 +63,7 @@
///These are armor values that protect the clothing, taken from its armor datum. List updates on examine because it's currently only used to print armor ratings to chat in Topic().
var/list/durability_list = list()
-/obj/item/clothing/Initialize()
+/obj/item/clothing/Initialize(mapload)
. = ..()
if((clothing_flags & VOICEBOX_TOGGLABLE))
actions_types += /datum/action/item_action/toggle_voice_box
@@ -185,7 +185,7 @@
body_parts_covered &= ~i
if(body_parts_covered == NONE) // if there are no more parts to break then the whole thing is kaput
- obj_destruction((damage_type == BRUTE ? "melee" : "laser")) // melee/laser is good enough since this only procs from direct attacks anyway and not from fire/bombs
+ obj_destruction((damage_type == BRUTE ? MELEE : LASER)) // melee/laser is good enough since this only procs from direct attacks anyway and not from fire/bombs
return
damaged_clothes = CLOTHING_DAMAGED
@@ -425,13 +425,13 @@ BLIND // can't see anything
/obj/item/clothing/obj_destruction(damage_flag)
- if(damage_flag == "bomb")
+ if(damage_flag == BOMB)
var/turf/T = get_turf(src)
spawn(1) //so the shred survives potential turf change from the explosion.
var/obj/effect/decal/cleanable/shreds/Shreds = new(T)
Shreds.desc = "The sad remains of what used to be [name]."
deconstruct(FALSE)
- else if(!(damage_flag in list("acid", "fire")))
+ else if(!(damage_flag in list(ACID, FIRE)))
damaged_clothes = CLOTHING_SHREDDED
body_parts_covered = NONE
name = "shredded [initial(name)]"
diff --git a/code/modules/clothing/ears/_ears.dm b/code/modules/clothing/ears/_ears.dm
index a2f0c80041..35871fb142 100644
--- a/code/modules/clothing/ears/_ears.dm
+++ b/code/modules/clothing/ears/_ears.dm
@@ -33,7 +33,7 @@
var/headphones_on = FALSE
custom_price = PRICE_ALMOST_CHEAP
-/obj/item/clothing/ears/headphones/Initialize()
+/obj/item/clothing/ears/headphones/Initialize(mapload)
. = ..()
update_icon()
diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm
index 9726ab6b59..21004a163e 100644
--- a/code/modules/clothing/glasses/_glasses.dm
+++ b/code/modules/clothing/glasses/_glasses.dm
@@ -112,7 +112,7 @@
actions_types = list(/datum/action/item_action/toggle_research_scanner)
glass_colour_type = /datum/client_colour/glass_colour/purple
resistance_flags = ACID_PROOF
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 100)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 100)
/obj/item/clothing/glasses/science/item_action_slot_check(slot, mob/user, datum/action/A)
if(slot == ITEM_SLOT_EYES)
@@ -299,7 +299,7 @@
actions_types = list(/datum/action/item_action/flash)
var/obj/item/assembly/flash/installed
-/obj/item/clothing/glasses/sunglasses/stunglasses/Initialize()
+/obj/item/clothing/glasses/sunglasses/stunglasses/Initialize(mapload)
. = ..()
if (!installed)
installed = new(src)
@@ -491,7 +491,7 @@
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
resistance_flags = LAVA_PROOF | FIRE_PROOF
-/obj/item/clothing/glasses/godeye/Initialize()
+/obj/item/clothing/glasses/godeye/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, EYE_OF_GOD_TRAIT)
diff --git a/code/modules/clothing/glasses/engine_goggles.dm b/code/modules/clothing/glasses/engine_goggles.dm
index d7e7ae3669..461648c270 100644
--- a/code/modules/clothing/glasses/engine_goggles.dm
+++ b/code/modules/clothing/glasses/engine_goggles.dm
@@ -26,7 +26,7 @@
desc = "Goggles used by engineers. The Meson Scanner mode lets you see basic structural and terrain layouts through walls, the T-ray Scanner mode lets you see underfloor objects such as cables and pipes, and the Radiation Scanner mode let's you see objects contaminated by radiation. Each lens has been replaced with a corrective lens."
vision_correction = 1
-/obj/item/clothing/glasses/meson/engine/Initialize()
+/obj/item/clothing/glasses/meson/engine/Initialize(mapload)
. = ..()
START_PROCESSING(SSobj, src)
update_icon()
diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm
index 1e3f2c08cf..d763899987 100644
--- a/code/modules/clothing/gloves/color.dm
+++ b/code/modules/clothing/gloves/color.dm
@@ -44,7 +44,7 @@
resistance_flags = ACID_PROOF
var/shocks_remaining = 10
-/obj/item/clothing/gloves/color/yellow/sprayon/Initialize()
+/obj/item/clothing/gloves/color/yellow/sprayon/Initialize(mapload)
.=..()
ADD_TRAIT(src, TRAIT_NODROP, GLOVE_TRAIT)
@@ -79,7 +79,7 @@
desc = "Old and worn out insulated gloves, hopefully they still work."
name = "worn out insulated gloves"
-/obj/item/clothing/gloves/color/fyellow/old/Initialize()
+/obj/item/clothing/gloves/color/fyellow/old/Initialize(mapload)
. = ..()
siemens_coefficient = pick(0,0,0,0.5,0.5,0.5,0.75)
@@ -211,7 +211,7 @@
heat_protection = HANDS
max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
strip_delay = 60
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 50)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 70, ACID = 50)
/obj/item/clothing/gloves/color/latex
name = "latex gloves"
diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm
index 381e70161b..6fc0fabf31 100644
--- a/code/modules/clothing/gloves/miscellaneous.dm
+++ b/code/modules/clothing/gloves/miscellaneous.dm
@@ -98,7 +98,7 @@
secondary_trait = TRAIT_ANTIMAGIC
var/chaplain_spawnable = TRUE
-/obj/item/clothing/gloves/fingerless/pugilist/chaplain/Initialize()
+/obj/item/clothing/gloves/fingerless/pugilist/chaplain/Initialize(mapload)
. = ..()
AddComponent(/datum/component/anti_magic, TRUE, TRUE, FALSE, null, null, FALSE)
@@ -114,7 +114,7 @@
icon_state = "narsiearmwraps"
item_state = "narsiearmwraps"
resistance_flags = FIRE_PROOF | ACID_PROOF
- armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 35, "rad" = 0, "fire" = 50, "acid" = 50)
+ armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 35, RAD = 0, FIRE = 50, ACID = 50)
enhancement = 3
secondary_trait = TRAIT_KI_VAMPIRE
@@ -124,7 +124,7 @@
icon_state = "ratvararmwraps"
item_state = "ratvararmwraps"
resistance_flags = FIRE_PROOF | ACID_PROOF
- armor = list("melee" = 10, "bullet" = 0, "laser" = -10, "energy" = 0, "bomb" = 0, "bio" = 35, "rad" = 0, "fire" = 50, "acid" = 50)
+ armor = list(MELEE = 10, BULLET = 0, LASER = -10, ENERGY = 0, BOMB = 0, BIO = 35, RAD = 0, FIRE = 50, ACID = 50)
enhancement = 4 //The artifice of Ratvar is unmatched except when it is.
secondary_trait = TRAIT_STRONG_GRABBER
@@ -138,7 +138,7 @@
var/warcry = "AT"
secondary_trait = TRAIT_NOSOFTCRIT //basically extra health
-/obj/item/clothing/gloves/fingerless/pugilist/rapid/Initialize()
+/obj/item/clothing/gloves/fingerless/pugilist/rapid/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, GLOVE_TRAIT)
@@ -252,7 +252,7 @@
cold_protection = ARMS|HANDS
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
- armor = list("melee" = 30, "bullet" = 30, "laser" = 10, "energy" = 10, "bomb" = 55, "bio" = 15, "rad" = 15, "fire" = 80, "acid" = 50)
+ armor = list(MELEE = 30, BULLET = 30, LASER = 10, ENERGY = 10, BOMB = 55, BIO = 15, RAD = 15, FIRE = 80, ACID = 50)
siemens_coefficient = 0
permeability_coefficient = 0.05
strip_delay = 80
@@ -297,7 +297,7 @@
heat_protection = HANDS
max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
resistance_flags = NONE
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 30)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 70, ACID = 30)
strip_mod = 0.9
/obj/item/clothing/gloves/combat
@@ -313,7 +313,7 @@
heat_protection = HANDS
max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
resistance_flags = NONE
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 50)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 50)
strip_mod = 1.5
/obj/item/clothing/gloves/bracer
@@ -329,7 +329,7 @@
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
resistance_flags = NONE
- armor = list("melee" = 15, "bullet" = 35, "laser" = 35, "energy" = 20, "bomb" = 35, "bio" = 35, "rad" = 35, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 15, BULLET = 35, LASER = 35, ENERGY = 20, BOMB = 35, BIO = 35, RAD = 35, FIRE = 0, ACID = 0)
/obj/item/clothing/gloves/thief
name = "black gloves"
diff --git a/code/modules/clothing/gloves/mittens.dm b/code/modules/clothing/gloves/mittens.dm
index b1b17c9afe..2d00da6780 100644
--- a/code/modules/clothing/gloves/mittens.dm
+++ b/code/modules/clothing/gloves/mittens.dm
@@ -12,7 +12,7 @@
/obj/item/clothing/gloves/mittens/random
-/obj/item/clothing/gloves/mittens/random/Initialize()
+/obj/item/clothing/gloves/mittens/random/Initialize(mapload)
..()
var/colours = list("black", "yellow", "lightbrown", "brown", "orange", "red", "purple", "green", "blue", "kitten")
var/picked_c = pick(colours)
diff --git a/code/modules/clothing/head/_head.dm b/code/modules/clothing/head/_head.dm
index ea58d0bc88..29a07fd177 100644
--- a/code/modules/clothing/head/_head.dm
+++ b/code/modules/clothing/head/_head.dm
@@ -10,7 +10,7 @@
dynamic_hair_suffix = "+generic"
var/datum/beepsky_fashion/beepsky_fashion //the associated datum for applying this to a secbot
-/obj/item/clothing/head/Initialize()
+/obj/item/clothing/head/Initialize(mapload)
. = ..()
if(ishuman(loc) && dynamic_hair_suffix)
var/mob/living/carbon/human/H = loc
diff --git a/code/modules/clothing/head/beanie.dm b/code/modules/clothing/head/beanie.dm
index 365624bc0d..3e53b3aaa5 100644
--- a/code/modules/clothing/head/beanie.dm
+++ b/code/modules/clothing/head/beanie.dm
@@ -72,7 +72,7 @@
name = "durathread beanie"
desc = "A beanie made from durathread, its resilient fibres provide some protection to the wearer."
icon_state = "beaniedurathread"
- armor = list("melee" = 25, "bullet" = 10, "laser" = 20,"energy" = 10, "bomb" = 30, "bio" = 15, "rad" = 20, "fire" = 100, "acid" = 50)
+ armor = list(MELEE = 25, BULLET = 10, LASER = 20,ENERGY = 10, BOMB = 30, BIO = 15, RAD = 20, FIRE = 100, ACID = 50)
/obj/item/clothing/head/beanie/waldo
name = "red striped bobble hat"
diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm
index 95ce887693..226255e133 100644
--- a/code/modules/clothing/head/hardhat.dm
+++ b/code/modules/clothing/head/hardhat.dm
@@ -8,7 +8,7 @@
var/power_on = 0.8
var/on = FALSE
var/hat_type = "yellow" //Determines used sprites: hardhat[on]_[hat_type] and hardhat[on]_[hat_type]2 (lying down sprite)
- armor = list("melee" = 15, "bullet" = 5, "laser" = 20,"energy" = 10, "bomb" = 20, "bio" = 10, "rad" = 20, "fire" = 100, "acid" = 50)
+ armor = list(MELEE = 15, BULLET = 5, LASER = 20,ENERGY = 10, BOMB = 20, BIO = 10, RAD = 20, FIRE = 100, ACID = 50)
flags_inv = 0
actions_types = list(/datum/action/item_action/toggle_helmet_light)
resistance_flags = FIRE_PROOF
@@ -117,7 +117,7 @@
visor_flags_inv = HIDEEYES | HIDEFACE
visor_flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH
-/obj/item/clothing/head/hardhat/weldhat/Initialize()
+/obj/item/clothing/head/hardhat/weldhat/Initialize(mapload)
. = ..()
update_icon()
diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm
index 126b1af40f..ff78b51909 100644
--- a/code/modules/clothing/head/helmet.dm
+++ b/code/modules/clothing/head/helmet.dm
@@ -3,7 +3,7 @@
desc = "Standard Security gear. Protects the head from impacts."
icon_state = "helmet"
item_state = "helmet"
- armor = list("melee" = 40, "bullet" = 30, "laser" = 30,"energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
+ armor = list(MELEE = 40, BULLET = 30, LASER = 30,ENERGY = 10, BOMB = 25, BIO = 0, RAD = 0, FIRE = 50, ACID = 50)
flags_inv = HIDEEARS
cold_protection = HEAD
min_cold_protection_temperature = HELMET_MIN_TEMP_PROTECT
@@ -74,7 +74,7 @@
desc = "A bulletproof combat helmet that excels in protecting the wearer against traditional projectile weaponry and explosives to a minor extent."
icon_state = "helmetalt"
item_state = "helmetalt"
- armor = list("melee" = 15, "bullet" = 60, "laser" = 10, "energy" = 10, "bomb" = 40, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
+ armor = list(MELEE = 15, BULLET = 60, LASER = 10, ENERGY = 10, BOMB = 40, BIO = 0, RAD = 0, FIRE = 50, ACID = 50)
can_flashlight = 1
dog_fashion = null
@@ -98,7 +98,7 @@
toggle_message = "You pull the visor down on"
alt_toggle_message = "You push the visor up on"
can_toggle = 1
- armor = list("melee" = 45, "bullet" = 15, "laser" = 5,"energy" = 5, "bomb" = 5, "bio" = 2, "rad" = 0, "fire" = 50, "acid" = 50)
+ armor = list(MELEE = 45, BULLET = 15, LASER = 5,ENERGY = 5, BOMB = 5, BIO = 2, RAD = 0, FIRE = 50, ACID = 50)
flags_inv = HIDEEARS|HIDEFACE
strip_delay = 80
actions_types = list(/datum/action/item_action/toggle)
@@ -154,7 +154,7 @@
desc = "An extremely robust, space-worthy helmet in a nefarious red and black stripe pattern."
icon_state = "swatsyndie"
item_state = "swatsyndie"
- armor = list("melee" = 40, "bullet" = 30, "laser" = 30,"energy" = 30, "bomb" = 50, "bio" = 90, "rad" = 20, "fire" = 50, "acid" = 50)
+ armor = list(MELEE = 40, BULLET = 30, LASER = 30,ENERGY = 30, BOMB = 50, BIO = 90, RAD = 20, FIRE = 50, ACID = 50)
cold_protection = HEAD
min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT
heat_protection = HEAD
@@ -175,7 +175,7 @@
flags_inv = HIDEEARS|HIDEHAIR
icon_state = "thunderdome"
item_state = "thunderdome"
- armor = list("melee" = 40, "bullet" = 30, "laser" = 25,"energy" = 10, "bomb" = 25, "bio" = 10, "rad" = 0, "fire" = 50, "acid" = 50)
+ armor = list(MELEE = 40, BULLET = 30, LASER = 25,ENERGY = 10, BOMB = 25, BIO = 10, RAD = 0, FIRE = 50, ACID = 50)
cold_protection = HEAD
min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT
heat_protection = HEAD
@@ -188,7 +188,7 @@
desc = "An ancient helmet made of bronze and leather."
flags_inv = HIDEEARS|HIDEHAIR
flags_cover = HEADCOVERSEYES
- armor = list("melee" = 25, "bullet" = 0, "laser" = 25, "energy" = 10, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
+ armor = list(MELEE = 25, BULLET = 0, LASER = 25, ENERGY = 10, BOMB = 10, BIO = 0, RAD = 0, FIRE = 100, ACID = 50)
resistance_flags = FIRE_PROOF
icon_state = "roman"
item_state = "roman"
@@ -197,7 +197,7 @@
/obj/item/clothing/head/helmet/roman/fake
desc = "An ancient helmet made of plastic and leather."
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0)
/obj/item/clothing/head/helmet/roman/legionnaire
name = "\improper Roman legionnaire helmet"
@@ -207,7 +207,7 @@
/obj/item/clothing/head/helmet/roman/legionnaire/fake
desc = "An ancient helmet made of plastic and leather. Has a red crest on top of it."
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0)
/obj/item/clothing/head/helmet/gladiator
name = "gladiator helmet"
@@ -224,7 +224,7 @@
icon_state = "redtaghelm"
flags_cover = HEADCOVERSEYES
item_state = "redtaghelm"
- armor = list("melee" = 15, "bullet" = 10, "laser" = 20,"energy" = 10, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 50)
+ armor = list(MELEE = 15, BULLET = 10, LASER = 20,ENERGY = 10, BOMB = 20, BIO = 0, RAD = 0, FIRE = 0, ACID = 50)
// Offer about the same protection as a hardhat.
dog_fashion = null
@@ -234,7 +234,7 @@
icon_state = "bluetaghelm"
flags_cover = HEADCOVERSEYES
item_state = "bluetaghelm"
- armor = list("melee" = 15, "bullet" = 10, "laser" = 20,"energy" = 10, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 50)
+ armor = list(MELEE = 15, BULLET = 10, LASER = 20,ENERGY = 10, BOMB = 20, BIO = 0, RAD = 0, FIRE = 0, ACID = 50)
// Offer about the same protection as a hardhat.
dog_fashion = null
@@ -243,7 +243,7 @@
desc = "A classic metal helmet."
icon_state = "knight_green"
item_state = "knight_green"
- armor = list("melee" = 41, "bullet" = 15, "laser" = 5,"energy" = 5, "bomb" = 5, "bio" = 2, "rad" = 0, "fire" = 0, "acid" = 50)
+ armor = list(MELEE = 41, BULLET = 15, LASER = 5,ENERGY = 5, BOMB = 5, BIO = 2, RAD = 0, FIRE = 0, ACID = 50)
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT
flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH
strip_delay = 80
@@ -273,7 +273,7 @@
desc = "A classic medieval helmet, if you hold it upside down you could see that it's actually a bucket."
icon_state = "knight_greyscale"
item_state = "knight_greyscale"
- armor = list("melee" = 35, "bullet" = 10, "laser" = 10, "energy" = 10, "bomb" = 10, "bio" = 10, "rad" = 10, "fire" = 40, "acid" = 40)
+ armor = list(MELEE = 35, BULLET = 10, LASER = 10, ENERGY = 10, BOMB = 10, BIO = 10, RAD = 10, FIRE = 40, ACID = 40)
material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS //Can change color and add prefix
/obj/item/clothing/head/helmet/skull
@@ -281,7 +281,7 @@
desc = "An intimidating tribal helmet, it doesn't look very comfortable."
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
flags_cover = HEADCOVERSEYES
- armor = list("melee" = 25, "bullet" = 25, "laser" = 25, "energy" = 10, "bomb" = 10, "bio" = 5, "rad" = 20, "fire" = 40, "acid" = 20)
+ armor = list(MELEE = 25, BULLET = 25, LASER = 25, ENERGY = 10, BOMB = 10, BIO = 5, RAD = 20, FIRE = 40, ACID = 20)
icon_state = "skull"
item_state = "skull"
strip_delay = 100
@@ -292,7 +292,7 @@
desc = "An insidious armored combat helmet signed with Syndicate insignia. The visor is coated with a resistant paste guaranteed to withstand bright flashes perfectly."
icon_state = "infiltrator"
item_state = "infiltrator"
- armor = list("melee" = 40, "bullet" = 40, "laser" = 30, "energy" = 40, "bomb" = 70, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
+ armor = list(MELEE = 40, BULLET = 40, LASER = 30, ENERGY = 40, BOMB = 70, BIO = 0, RAD = 0, FIRE = 50, ACID = 50)
resistance_flags = FIRE_PROOF | ACID_PROOF
flash_protect = 2
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT
@@ -396,14 +396,14 @@
desc = "A hardhat with strips of leather and durathread for additional blunt protection."
icon_state = "durathread"
item_state = "durathread"
- armor = list("melee" = 25, "bullet" = 10, "laser" = 20,"energy" = 10, "bomb" = 30, "bio" = 15, "rad" = 20, "fire" = 100, "acid" = 50)
+ armor = list(MELEE = 25, BULLET = 10, LASER = 20,ENERGY = 10, BOMB = 30, BIO = 15, RAD = 20, FIRE = 100, ACID = 50)
/obj/item/clothing/head/helmet/rus_helmet
name = "russian helmet"
desc = "It can hold a bottle of vodka."
icon_state = "rus_helmet"
item_state = "rus_helmet"
- armor = list("melee" = 30, "bullet" = 25, "laser" = 20,"energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 20, "fire" = 30, "acid" = 50)
+ armor = list(MELEE = 30, BULLET = 25, LASER = 20,ENERGY = 10, BOMB = 25, BIO = 0, RAD = 20, FIRE = 30, ACID = 50)
pocket_storage_component_path = /datum/component/storage/concrete/pockets/small/rushelmet
/obj/item/clothing/head/helmet/rus_ushanka
@@ -415,7 +415,7 @@
body_parts_covered = HEAD
cold_protection = HEAD
min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT
- armor = list("melee" = 10, "bullet" = 5, "laser" = 5,"energy" = 5, "bomb" = 5, "bio" = 50, "rad" = 20, "fire" = -10, "acid" = 0)
+ armor = list(MELEE = 10, BULLET = 5, LASER = 5,ENERGY = 5, BOMB = 5, BIO = 50, RAD = 20, FIRE = -10, ACID = 0)
/obj/item/clothing/head/helmet/police
name = "police officer's hat"
diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm
index 592614af61..40729a442d 100644
--- a/code/modules/clothing/head/jobs.dm
+++ b/code/modules/clothing/head/jobs.dm
@@ -33,7 +33,7 @@
icon_state = "captain"
item_state = "that"
flags_inv = 0
- armor = list("melee" = 40, "bullet" = 30, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
+ armor = list(MELEE = 40, BULLET = 30, LASER = 30, ENERGY = 10, BOMB = 25, BIO = 0, RAD = 0, FIRE = 50, ACID = 50)
strip_delay = 60
dog_fashion = /datum/dog_fashion/head/captain
@@ -65,7 +65,7 @@
name = "head of personnel's cap"
icon_state = "hopcap"
desc = "The symbol of true bureaucratic micromanagement."
- armor = list("melee" = 30, "bullet" = 25, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
+ armor = list(MELEE = 30, BULLET = 25, LASER = 25, ENERGY = 10, BOMB = 25, BIO = 0, RAD = 0, FIRE = 50, ACID = 50)
dog_fashion = /datum/dog_fashion/head/hop
/obj/item/clothing/head/hopcap/beret
@@ -93,13 +93,13 @@
/obj/item/clothing/head/fedora/det_hat
name = "detective's fedora"
desc = "There's only one man who can sniff out the dirty stench of crime, and he's likely wearing this hat."
- armor = list("melee" = 25, "bullet" = 5, "laser" = 25, "energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 50)
+ armor = list(MELEE = 25, BULLET = 5, LASER = 25, ENERGY = 10, BOMB = 0, BIO = 0, RAD = 0, FIRE = 30, ACID = 50)
icon_state = "detective"
var/candy_cooldown = 0
pocket_storage_component_path = /datum/component/storage/concrete/pockets/small/detective
dog_fashion = /datum/dog_fashion/head/detective
-/obj/item/clothing/head/fedora/det_hat/Initialize()
+/obj/item/clothing/head/fedora/det_hat/Initialize(mapload)
. = ..()
new /obj/item/reagent_containers/food/drinks/flask/det(src)
@@ -147,7 +147,7 @@
desc = "That was white fabric. Was."
dog_fashion = null //THIS IS FOR SLAUGHTER, NOT PUPPIES
-/obj/item/clothing/head/beret/highlander/Initialize()
+/obj/item/clothing/head/beret/highlander/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, HIGHLANDER)
@@ -157,7 +157,7 @@
name = "head of security cap"
desc = "The robust standard-issue cap of the Head of Security. For showing the officers who's in charge."
icon_state = "hoscap"
- armor = list("melee" = 40, "bullet" = 30, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 10, "rad" = 0, "fire" = 50, "acid" = 60)
+ armor = list(MELEE = 40, BULLET = 30, LASER = 25, ENERGY = 10, BOMB = 25, BIO = 10, RAD = 0, FIRE = 50, ACID = 60)
strip_delay = 80
dynamic_hair_suffix = ""
@@ -183,7 +183,7 @@
name = "warden's police hat"
desc = "It's a special armored hat issued to the Warden of a security force. Protects the head from impacts."
icon_state = "policehelm"
- armor = list("melee" = 40, "bullet" = 30, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 60)
+ armor = list(MELEE = 40, BULLET = 30, LASER = 30, ENERGY = 10, BOMB = 25, BIO = 0, RAD = 0, FIRE = 30, ACID = 60)
strip_delay = 60
dog_fashion = /datum/dog_fashion/head/warden
@@ -258,7 +258,7 @@
name = "security beret"
desc = "A robust beret with the security insignia emblazoned on it. Uses reinforced fabric to offer sufficient protection."
icon_state = "beret_badge"
- armor = list("melee" = 40, "bullet" = 30, "laser" = 30,"energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
+ armor = list(MELEE = 40, BULLET = 30, LASER = 30,ENERGY = 10, BOMB = 25, BIO = 0, RAD = 0, FIRE = 50, ACID = 50)
strip_delay = 60
dog_fashion = null
@@ -368,7 +368,7 @@
name = "durathread beret"
desc = "A beret made from durathread, its resilient fibres provide some protection to the wearer."
icon_state = "beretdurathread"
- armor = list("melee" = 25, "bullet" = 10, "laser" = 20,"energy" = 10, "bomb" = 30, "bio" = 15, "rad" = 20, "fire" = 100, "acid" = 50)
+ armor = list(MELEE = 25, BULLET = 10, LASER = 20,ENERGY = 10, BOMB = 30, BIO = 15, RAD = 20, FIRE = 100, ACID = 50)
#undef DRILL_DEFAULT
#undef DRILL_SHOUTING
diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm
index eb48048c00..4e7ccb7111 100644
--- a/code/modules/clothing/head/misc.dm
+++ b/code/modules/clothing/head/misc.dm
@@ -6,7 +6,7 @@
desc = "It's good to be emperor."
item_state = "that"
flags_inv = 0
- armor = list("melee" = 30, "bullet" = 15, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
+ armor = list(MELEE = 30, BULLET = 15, LASER = 30, ENERGY = 10, BOMB = 25, BIO = 0, RAD = 0, FIRE = 50, ACID = 50)
strip_delay = 80
/obj/item/clothing/head/spacepolice
@@ -238,7 +238,7 @@
dog_fashion = null
-/obj/item/clothing/head/sombrero/shamebrero/Initialize()
+/obj/item/clothing/head/sombrero/shamebrero/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, SHAMEBRERO_TRAIT)
@@ -301,7 +301,7 @@
name = "crown"
desc = "A crown fit for a king, a petty king maybe."
icon_state = "crown"
- armor = list("melee" = 15, "bullet" = 0, "laser" = 0,"energy" = 15, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
+ armor = list(MELEE = 15, BULLET = 0, LASER = 0,ENERGY = 15, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 50)
resistance_flags = FIRE_PROOF
dynamic_hair_suffix = ""
@@ -458,7 +458,7 @@
desc = "Ain't nobody gonna cheat the hangman in my town."
icon_state = "hunter"
item_state = "hunter"
- armor = list("melee" = 5, "bullet" = 5, "laser" = 5, "energy" = 15, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 5, BULLET = 5, LASER = 5, ENERGY = 15, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0)
resistance_flags = FIRE_PROOF | ACID_PROOF
/obj/item/clothing/head/kepi
diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm
index 21cec4f7d2..c0ff26342e 100644
--- a/code/modules/clothing/head/misc_special.dm
+++ b/code/modules/clothing/head/misc_special.dm
@@ -22,7 +22,7 @@
custom_materials = list(/datum/material/iron=1750, /datum/material/glass=400)
flash_protect = 2
tint = 2
- armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 60)
+ armor = list(MELEE = 10, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 60)
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
actions_types = list(/datum/action/item_action/toggle)
visor_flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
@@ -45,7 +45,7 @@
hat_type = "cakehat"
hitsound = 'sound/weapons/tap.ogg'
flags_inv = HIDEEARS|HIDEHAIR
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0)
brightness_on = 2 //luminosity when on
flags_cover = HEADCOVERSEYES
heat = 1000
@@ -131,7 +131,7 @@
item_state = "hardhat0_pumpkin"
hat_type = "pumpkin"
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0)
brightness_on = 2 //luminosity when on
flags_cover = HEADCOVERSEYES
@@ -169,7 +169,7 @@
item_state = "hardhat0_reindeer"
hat_type = "reindeer"
flags_inv = 0
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0)
brightness_on = 1 //luminosity when on
dynamic_hair_suffix = ""
@@ -245,14 +245,14 @@
icon = 'icons/obj/clothing/clockwork_garb.dmi'
icon_state = "clockwork_helmet_old"
flags_inv = HIDEEARS|HIDEHAIR
- armor = list("melee" = 5, "bullet" = 0, "laser" = -5, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 20)
+ armor = list(MELEE = 5, BULLET = 0, LASER = -5, ENERGY = 0, BOMB = 10, BIO = 0, RAD = 0, FIRE = 20, ACID = 20)
/obj/item/clothing/head/foilhat
name = "tinfoil hat"
desc = "Thought control rays, psychotronic scanning. Don't mind that, I'm protected cause I made this hat."
icon_state = "foilhat"
item_state = "foilhat"
- armor = list("melee" = 0, "bullet" = 0, "laser" = -5,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = -5, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 0, BULLET = 0, LASER = -5,ENERGY = 0, BOMB = 0, BIO = 0, RAD = -5, FIRE = 0, ACID = 0)
equip_delay_other = 140
var/datum/brain_trauma/mild/phobia/conspiracies/paranoia
var/warped = FALSE
@@ -320,7 +320,7 @@
name = "flak helmet"
icon_state = "m1helm"
item_state = "helmet"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0.1, "bio" = 0, "rad" = 0, "fire" = -10, "acid" = -15)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0.1, BIO = 0, RAD = 0, FIRE = -10, ACID = -15)
desc = "A dilapidated helmet used in ancient wars. This one is brittle and essentially useless. An ace of spades is tucked into the band around the outer shell."
pocket_storage_component_path = /datum/component/storage/concrete/pockets/tiny/spacenam //So you can stuff other things in the elastic band instead of it simply being a fluff thing.
diff --git a/code/modules/clothing/head/soft_caps.dm b/code/modules/clothing/head/soft_caps.dm
index 084d39a9b5..5569da96eb 100644
--- a/code/modules/clothing/head/soft_caps.dm
+++ b/code/modules/clothing/head/soft_caps.dm
@@ -119,7 +119,7 @@
desc = "It's a robust baseball hat in tasteful red colour."
icon_state = "secsoft"
soft_type = "sec"
- armor = list("melee" = 30, "bullet" = 25, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 50)
+ armor = list(MELEE = 30, BULLET = 25, LASER = 25, ENERGY = 10, BOMB = 25, BIO = 0, RAD = 0, FIRE = 20, ACID = 50)
strip_delay = 60
dog_fashion = null
@@ -137,6 +137,6 @@
soft_type = "baseball"
item_state = "baseballsoft"
flags_inv = HIDEEYES|HIDEFACE
- armor = list("melee" = 35, "bullet" = 35, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 90)
+ armor = list(MELEE = 35, BULLET = 35, LASER = 25, ENERGY = 10, BOMB = 25, BIO = 0, RAD = 0, FIRE = 20, ACID = 90)
strip_delay = 90 //You dont take a Major Leage cap
dog_fashion = null
diff --git a/code/modules/clothing/masks/boxing.dm b/code/modules/clothing/masks/boxing.dm
index 6701b53c10..324562c1a5 100644
--- a/code/modules/clothing/masks/boxing.dm
+++ b/code/modules/clothing/masks/boxing.dm
@@ -26,7 +26,7 @@
flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
visor_flags_inv = HIDEFACE|HIDEFACIALHAIR
w_class = WEIGHT_CLASS_SMALL
- armor = list("melee" = 10, "bullet" = 5, "laser" = 5,"energy" = 5, "bomb" = 0, "bio" = 0, "rad" = 10, "fire" = 30, "acid" = 30)
+ armor = list(MELEE = 10, BULLET = 5, LASER = 5,ENERGY = 5, BOMB = 0, BIO = 0, RAD = 10, FIRE = 30, ACID = 30)
resistance_flags = FIRE_PROOF | ACID_PROOF
mutantrace_variation = STYLE_MUZZLE
var/voice_unknown = TRUE ///This makes it so that your name shows up as unknown when wearing the mask.
diff --git a/code/modules/clothing/masks/cluwne.dm b/code/modules/clothing/masks/cluwne.dm
index f39f5e73b8..cc2105d5fc 100644
--- a/code/modules/clothing/masks/cluwne.dm
+++ b/code/modules/clothing/masks/cluwne.dm
@@ -12,7 +12,7 @@
var/last_sound = 0
var/delay = 15
-/obj/item/clothing/mask/gas/cluwne/Initialize()
+/obj/item/clothing/mask/gas/cluwne/Initialize(mapload)
.=..()
ADD_TRAIT(src, TRAIT_NODROP, CLOTHING_TRAIT)
ADD_TRAIT(src, CURSED_ITEM_TRAIT, CLOTHING_TRAIT)
@@ -68,7 +68,7 @@
var/is_cursed = FALSE //i don't care that this is *slightly* memory wasteful, it's just one more byte and it's not like some madman is going to spawn thousands of these
var/is_very_cursed = FALSE
-/obj/item/clothing/mask/gas/cluwne/happy_cluwne/Initialize()
+/obj/item/clothing/mask/gas/cluwne/happy_cluwne/Initialize(mapload)
.=..()
if(prob(1)) //this function pre-determines the logic of the cluwne mask. applying and reapplying the mask does not alter or change anything
is_cursed = TRUE
diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm
index d78488ec0b..a2d13822f8 100644
--- a/code/modules/clothing/masks/gasmask.dm
+++ b/code/modules/clothing/masks/gasmask.dm
@@ -41,7 +41,7 @@
custom_materials = list(/datum/material/iron=4000, /datum/material/glass=2000)
flash_protect = 2
tint = 2
- armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 55)
+ armor = list(MELEE = 10, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 55)
actions_types = list(/datum/action/item_action/toggle)
flags_inv = HIDEEARS|HIDEEYES|HIDEFACE
flags_cover = MASKCOVERSEYES
@@ -55,7 +55,7 @@
/obj/item/clothing/mask/gas/welding/up
-/obj/item/clothing/mask/gas/welding/up/Initialize()
+/obj/item/clothing/mask/gas/welding/up/Initialize(mapload)
..()
visor_toggling()
@@ -68,7 +68,7 @@
desc = "A modernised version of the classic design, this mask will not only filter out toxins but it can also be connected to an air supply."
icon_state = "plaguedoctor"
item_state = "gas_mask"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 2,"energy" = 2, "bomb" = 0, "bio" = 75, "rad" = 0, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 2,ENERGY = 2, BOMB = 0, BIO = 75, RAD = 0, FIRE = 0, ACID = 0)
/obj/item/clothing/mask/gas/syndicate
name = "syndicate mask"
diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm
index 45da6a9a75..f498c02cfe 100644
--- a/code/modules/clothing/masks/miscellaneous.dm
+++ b/code/modules/clothing/masks/miscellaneous.dm
@@ -29,7 +29,7 @@
visor_flags_cover = MASKCOVERSMOUTH
gas_transfer_coefficient = 0.9
permeability_coefficient = 0.01
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 25, "rad" = 0, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 25, RAD = 0, FIRE = 0, ACID = 0)
actions_types = list(/datum/action/item_action/adjust)
mutantrace_variation = STYLE_MUZZLE
@@ -41,7 +41,7 @@
visor_flags_inv = null
visor_flags_cover = null
permeability_coefficient = 1
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0)
/obj/item/clothing/mask/surgical/attack_self(mob/user)
adjustmask(user)
@@ -133,7 +133,7 @@
flags_inv = HIDEFACIALHAIR
clothing_flags = NONE
-/obj/item/clothing/mask/pig/cursed/Initialize()
+/obj/item/clothing/mask/pig/cursed/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CURSED_MASK_TRAIT)
playsound(get_turf(src), 'sound/magic/pighead_curse.ogg', 50, 1)
@@ -159,7 +159,7 @@
/obj/item/clothing/mask/frog/cursed
clothing_flags = NONE
-/obj/item/clothing/mask/frog/cursed/Initialize()
+/obj/item/clothing/mask/frog/cursed/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CURSED_MASK_TRAIT)
@@ -190,7 +190,7 @@
flags_inv = HIDEFACIALHAIR
clothing_flags = NONE
-/obj/item/clothing/mask/cowmask/cursed/Initialize()
+/obj/item/clothing/mask/cowmask/cursed/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CURSED_MASK_TRAIT)
playsound(get_turf(src), 'sound/magic/cowhead_curse.ogg', 50, 1)
@@ -215,7 +215,7 @@
clothing_flags = NONE
flags_inv = HIDEFACIALHAIR
-/obj/item/clothing/mask/horsehead/cursed/Initialize()
+/obj/item/clothing/mask/horsehead/cursed/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CURSED_MASK_TRAIT)
playsound(get_turf(src), 'sound/magic/horsehead_curse.ogg', 50, 1)
diff --git a/code/modules/clothing/neck/_neck.dm b/code/modules/clothing/neck/_neck.dm
index 1f40df0f57..4f852fb301 100644
--- a/code/modules/clothing/neck/_neck.dm
+++ b/code/modules/clothing/neck/_neck.dm
@@ -175,7 +175,7 @@
var/tagname = null
var/treat_path = /obj/item/reagent_containers/food/snacks/cookie
-/obj/item/clothing/neck/petcollar/Initialize()
+/obj/item/clothing/neck/petcollar/Initialize(mapload)
. = ..()
if(treat_path)
new treat_path(src)
diff --git a/code/modules/clothing/shoes/bananashoes.dm b/code/modules/clothing/shoes/bananashoes.dm
index fe392881c6..c5949406f7 100644
--- a/code/modules/clothing/shoes/bananashoes.dm
+++ b/code/modules/clothing/shoes/bananashoes.dm
@@ -8,7 +8,7 @@
var/on = FALSE
var/always_noslip = FALSE
-/obj/item/clothing/shoes/clown_shoes/banana_shoes/Initialize()
+/obj/item/clothing/shoes/clown_shoes/banana_shoes/Initialize(mapload)
. = ..()
if(always_noslip)
clothing_flags |= NOSLIP
diff --git a/code/modules/clothing/shoes/cluwne.dm b/code/modules/clothing/shoes/cluwne.dm
index aec57a2148..ec135014e9 100644
--- a/code/modules/clothing/shoes/cluwne.dm
+++ b/code/modules/clothing/shoes/cluwne.dm
@@ -7,7 +7,7 @@
item_flags = DROPDEL
var/footstep = 1
-/obj/item/clothing/shoes/clown_shoes/cluwne/Initialize()
+/obj/item/clothing/shoes/clown_shoes/cluwne/Initialize(mapload)
.=..()
ADD_TRAIT(src, TRAIT_NODROP, CLOTHING_TRAIT)
ADD_TRAIT(src, CURSED_ITEM_TRAIT, CLOTHING_TRAIT)
diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm
index cd01d6f099..726b284632 100644
--- a/code/modules/clothing/shoes/magboots.dm
+++ b/code/modules/clothing/shoes/magboots.dm
@@ -56,7 +56,7 @@
/obj/item/clothing/shoes/magboots/advance/debug
-/obj/item/clothing/shoes/magboots/advance/debug/Initialize()
+/obj/item/clothing/shoes/magboots/advance/debug/Initialize(mapload)
. = ..()
var/mob/living/L = loc
if(istype(L))
diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm
index 7a67308760..06c2c19ad8 100644
--- a/code/modules/clothing/shoes/miscellaneous.dm
+++ b/code/modules/clothing/shoes/miscellaneous.dm
@@ -12,7 +12,7 @@
item_state = "jackboots"
lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi'
- armor = list("melee" = 25, "bullet" = 25, "laser" = 25, "energy" = 25, "bomb" = 50, "bio" = 10, "rad" = 0, "fire" = 70, "acid" = 50)
+ armor = list(MELEE = 25, BULLET = 25, LASER = 25, ENERGY = 25, BOMB = 50, BIO = 10, RAD = 0, FIRE = 70, ACID = 50)
strip_delay = 70
resistance_flags = NONE
permeability_coefficient = 0.05 //Thick soles, and covers the ankle
@@ -40,7 +40,7 @@
desc = "High speed, no drag combat boots."
permeability_coefficient = 0.01
clothing_flags = NOSLIP
- armor = list("melee" = 40, "bullet" = 30, "laser" = 25, "energy" = 25, "bomb" = 50, "bio" = 30, "rad" = 30, "fire" = 90, "acid" = 50)
+ armor = list(MELEE = 40, BULLET = 30, LASER = 25, ENERGY = 25, BOMB = 50, BIO = 30, RAD = 30, FIRE = 90, ACID = 50)
/obj/item/clothing/shoes/sandal
desc = "A pair of rather plain wooden sandals."
@@ -73,7 +73,7 @@
strip_delay = 50
equip_delay_other = 50
resistance_flags = NONE
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 40, "acid" = 75)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 40, ACID = 75)
custom_price = PRICE_ABOVE_EXPENSIVE
can_be_tied = FALSE
@@ -106,7 +106,7 @@
var/datum/component/waddle
var/enabled_waddle = TRUE
-/obj/item/clothing/shoes/clown_shoes/Initialize()
+/obj/item/clothing/shoes/clown_shoes/Initialize(mapload)
. = ..()
AddComponent(/datum/component/squeak, list('sound/effects/clownstep1.ogg'=1,'sound/effects/clownstep2.ogg'=1), 50)
@@ -231,7 +231,7 @@
/obj/item/clothing/shoes/cult/alt/ghost
item_flags = DROPDEL
-/obj/item/clothing/shoes/cult/alt/ghost/Initialize()
+/obj/item/clothing/shoes/cult/alt/ghost/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CULT_TRAIT)
@@ -321,7 +321,7 @@
icon_state = "clockwork_treads"
lace_time = 8 SECONDS
-/obj/item/clothing/shoes/bronze/Initialize()
+/obj/item/clothing/shoes/bronze/Initialize(mapload)
. = ..()
AddComponent(/datum/component/squeak, list('sound/machines/clockcult/integration_cog_install.ogg' = 1, 'sound/magic/clockwork/fellowship_armory.ogg' = 1), 50)
@@ -333,7 +333,7 @@
var/wheelToggle = FALSE //False means wheels are not popped out
var/obj/vehicle/ridden/scooter/wheelys/W
-/obj/item/clothing/shoes/wheelys/Initialize()
+/obj/item/clothing/shoes/wheelys/Initialize(mapload)
. = ..()
W = new /obj/vehicle/ridden/scooter/wheelys(null)
diff --git a/code/modules/clothing/spacesuits/_spacesuits.dm b/code/modules/clothing/spacesuits/_spacesuits.dm
index cba27845f1..dbcda218a7 100644
--- a/code/modules/clothing/spacesuits/_spacesuits.dm
+++ b/code/modules/clothing/spacesuits/_spacesuits.dm
@@ -7,7 +7,7 @@
clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL | BLOCK_GAS_SMOKE_EFFECT | ALLOWINTERNALS
item_state = "spaceold"
permeability_coefficient = 0.01
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 50, "fire" = 80, "acid" = 70, "wound" = 5)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 100, RAD = 50, FIRE = 80, ACID = 70, WOUND = 5)
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT
dynamic_hair_suffix = ""
dynamic_fhair_suffix = ""
@@ -36,7 +36,7 @@
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
allowed = list(/obj/item/flashlight, /obj/item/tank/internals)
slowdown = 1
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 50, "fire" = 80, "acid" = 70, "wound" = 5)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 100, RAD = 50, FIRE = 80, ACID = 70, WOUND = 5)
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAUR
cold_protection = CHEST | GROIN | LEGS | FEET | ARMS | HANDS
min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT
diff --git a/code/modules/clothing/spacesuits/chronosuit.dm b/code/modules/clothing/spacesuits/chronosuit.dm
index e30b0953c6..5ec0fad2e6 100644
--- a/code/modules/clothing/spacesuits/chronosuit.dm
+++ b/code/modules/clothing/spacesuits/chronosuit.dm
@@ -4,7 +4,7 @@
icon_state = "chronohelmet"
item_state = "chronohelmet"
slowdown = 1
- armor = list("melee" = 60, "bullet" = 60, "laser" = 60, "energy" = 60, "bomb" = 30, "bio" = 90, "rad" = 90, "fire" = 100, "acid" = 100, "wound" = 80)
+ armor = list(MELEE = 60, BULLET = 60, LASER = 60, ENERGY = 60, BOMB = 30, BIO = 90, RAD = 90, FIRE = 100, ACID = 100, WOUND = 80)
resistance_flags = FIRE_PROOF | ACID_PROOF
var/obj/item/clothing/suit/space/chronos/suit = null
@@ -19,7 +19,7 @@
icon_state = "chronosuit"
item_state = "chronosuit"
actions_types = list(/datum/action/item_action/toggle)
- armor = list("melee" = 60, "bullet" = 60, "laser" = 60, "energy" = 60, "bomb" = 30, "bio" = 90, "rad" = 90, "fire" = 100, "acid" = 1000, "wound" = 80)
+ armor = list(MELEE = 60, BULLET = 60, LASER = 60, ENERGY = 60, BOMB = 30, BIO = 90, RAD = 90, FIRE = 100, ACID = 1000, WOUND = 80)
resistance_flags = FIRE_PROOF | ACID_PROOF
mutantrace_variation = STYLE_DIGITIGRADE
var/list/chronosafe_items = list(/obj/item/chrono_eraser, /obj/item/gun/energy/chrono_gun)
diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm
index d8a6426295..c946002fa2 100644
--- a/code/modules/clothing/spacesuits/hardsuit.dm
+++ b/code/modules/clothing/spacesuits/hardsuit.dm
@@ -5,7 +5,7 @@
icon_state = "hardsuit0-engineering"
item_state = "eng_helm"
max_integrity = 300
- armor = list("melee" = 10, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 10, "bio" = 100, "rad" = 75, "fire" = 50, "acid" = 75, "wound" = 10)
+ armor = list(MELEE = 10, BULLET = 5, LASER = 10, ENERGY = 5, BOMB = 10, BIO = 100, RAD = 75, FIRE = 50, ACID = 75, WOUND = 10)
var/basestate = "hardsuit"
var/brightness_on = 4 //luminosity when on
var/on = FALSE
@@ -18,7 +18,7 @@
var/grace_count = 0
var/datum/looping_sound/geiger/soundloop
-/obj/item/clothing/head/helmet/space/hardsuit/Initialize()
+/obj/item/clothing/head/helmet/space/hardsuit/Initialize(mapload)
. = ..()
soundloop = new(src, FALSE, TRUE)
soundloop.volume = 5
@@ -98,7 +98,7 @@
icon_state = "hardsuit-engineering"
item_state = "eng_hardsuit"
max_integrity = 300
- armor = list("melee" = 10, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 10, "bio" = 100, "rad" = 75, "fire" = 50, "acid" = 75, "wound" = 10)
+ armor = list(MELEE = 10, BULLET = 5, LASER = 10, ENERGY = 5, BOMB = 10, BIO = 100, RAD = 75, FIRE = 50, ACID = 75, WOUND = 10)
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/t_scanner, /obj/item/construction/rcd, /obj/item/pipe_dispenser)
siemens_coefficient = 0
var/obj/item/clothing/head/helmet/space/hardsuit/helmet
@@ -108,7 +108,7 @@
var/hardsuit_type
-/obj/item/clothing/suit/space/hardsuit/Initialize()
+/obj/item/clothing/suit/space/hardsuit/Initialize(mapload)
if(jetpack && ispath(jetpack))
jetpack = new jetpack(src)
return ..()
@@ -167,7 +167,7 @@
desc = "A special helmet designed for work in a hazardous, low-pressure environment. Has radiation shielding."
icon_state = "hardsuit0-engineering"
item_state = "eng_helm"
- armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 10, "bio" = 100, "rad" = 75, "fire" = 100, "acid" = 75, "wound" = 10)
+ armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 5, BOMB = 10, BIO = 100, RAD = 75, FIRE = 100, ACID = 75, WOUND = 10)
hardsuit_type = "engineering"
resistance_flags = FIRE_PROOF
@@ -176,7 +176,7 @@
desc = "A special suit that protects against hazardous, low pressure environments. Has radiation shielding."
icon_state = "hardsuit-engineering"
item_state = "eng_hardsuit"
- armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 10, "bio" = 100, "rad" = 75, "fire" = 100, "acid" = 75, "wound" = 10)
+ armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 5, BOMB = 10, BIO = 100, RAD = 75, FIRE = 100, ACID = 75, WOUND = 10)
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/engine
resistance_flags = FIRE_PROOF
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_ALL_TAURIC
@@ -188,7 +188,7 @@
icon_state = "hardsuit0-atmospherics"
item_state = "atmo_helm"
hardsuit_type = "atmospherics"
- armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 10, "bio" = 100, "rad" = 25, "fire" = 100, "acid" = 75, "wound" = 10)
+ armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 5, BOMB = 10, BIO = 100, RAD = 25, FIRE = 100, ACID = 75, WOUND = 10)
heat_protection = HEAD //Uncomment to enable firesuit protection
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
@@ -197,7 +197,7 @@
desc = "A special suit that protects against hazardous, low pressure environments. Has thermal shielding."
icon_state = "hardsuit-atmospherics"
item_state = "atmo_hardsuit"
- armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 10, "bio" = 100, "rad" = 25, "fire" = 100, "acid" = 75, "wound" = 10)
+ armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 5, BOMB = 10, BIO = 100, RAD = 25, FIRE = 100, ACID = 75, WOUND = 10)
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS //Uncomment to enable firesuit protection
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/engine/atmos
@@ -209,7 +209,7 @@
icon_state = "hardsuit0-white"
item_state = "ce_helm"
hardsuit_type = "white"
- armor = list("melee" = 40, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 90, "wound" = 10)
+ armor = list(MELEE = 40, BULLET = 5, LASER = 10, ENERGY = 5, BOMB = 50, BIO = 100, RAD = 100, FIRE = 100, ACID = 90, WOUND = 10)
heat_protection = HEAD
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
@@ -218,7 +218,7 @@
name = "advanced hardsuit"
desc = "An advanced suit that protects against hazardous, low pressure environments. Shines with a high polish."
item_state = "ce_hardsuit"
- armor = list("melee" = 40, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 90, "wound" = 10)
+ armor = list(MELEE = 40, BULLET = 5, LASER = 10, ENERGY = 5, BOMB = 50, BIO = 100, RAD = 100, FIRE = 100, ACID = 90, WOUND = 10)
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/engine/elite
@@ -234,11 +234,11 @@
max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT
resistance_flags = FIRE_PROOF
heat_protection = HEAD
- armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 50, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 75, "wound" = 15)
+ armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 5, BOMB = 50, BIO = 100, RAD = 50, FIRE = 50, ACID = 75, WOUND = 15)
brightness_on = 7
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator)
-/obj/item/clothing/head/helmet/space/hardsuit/mining/Initialize()
+/obj/item/clothing/head/helmet/space/hardsuit/mining/Initialize(mapload)
. = ..()
AddComponent(/datum/component/armor_plate)
RegisterSignal(src, COMSIG_ARMOR_PLATED, .proc/upgrade_icon)
@@ -265,13 +265,13 @@
hardsuit_type = "mining"
max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT
resistance_flags = FIRE_PROOF
- armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 50, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 75, "wound" = 15)
+ armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 5, BOMB = 50, BIO = 100, RAD = 50, FIRE = 50, ACID = 75, WOUND = 15)
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/storage/bag/ore, /obj/item/pickaxe)
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/mining
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_ALL_TAURIC
-/obj/item/clothing/suit/space/hardsuit/mining/Initialize()
+/obj/item/clothing/suit/space/hardsuit/mining/Initialize(mapload)
. = ..()
AddComponent(/datum/component/armor_plate)
RegisterSignal(src, COMSIG_ARMOR_PLATED, .proc/upgrade_icon)
@@ -298,7 +298,7 @@
icon_state = "hardsuit1-syndi"
item_state = "syndie_helm"
hardsuit_type = "syndi"
- armor = list("melee" = 40, "bullet" = 50, "laser" = 30, "energy" = 15, "bomb" = 35, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 90, "wound" = 25)
+ armor = list(MELEE = 40, BULLET = 50, LASER = 30, ENERGY = 15, BOMB = 35, BIO = 100, RAD = 50, FIRE = 50, ACID = 90, WOUND = 25)
on = FALSE
var/obj/item/clothing/suit/space/hardsuit/syndi/linkedsuit = null
actions_types = list(/datum/action/item_action/toggle_helmet_mode)
@@ -308,7 +308,7 @@
/obj/item/clothing/head/helmet/space/hardsuit/syndi/update_icon_state()
icon_state = "hardsuit[on]-[hardsuit_type]"
-/obj/item/clothing/head/helmet/space/hardsuit/syndi/Initialize()
+/obj/item/clothing/head/helmet/space/hardsuit/syndi/Initialize(mapload)
. = ..()
if(istype(loc, /obj/item/clothing/suit/space/hardsuit/syndi))
linkedsuit = loc
@@ -376,7 +376,7 @@
item_state = "syndie_hardsuit"
hardsuit_type = "syndi"
w_class = WEIGHT_CLASS_NORMAL
- armor = list("melee" = 40, "bullet" = 50, "laser" = 30, "energy" = 15, "bomb" = 35, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 90, "wound" = 25)
+ armor = list(MELEE = 40, BULLET = 50, LASER = 30, ENERGY = 15, BOMB = 35, BIO = 100, RAD = 50, FIRE = 50, ACID = 90, WOUND = 25)
allowed = list(/obj/item/gun, /obj/item/ammo_box,/obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/melee/transforming/energy/sword/saber, /obj/item/restraints/handcuffs, /obj/item/tank/internals)
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi
jetpack = /obj/item/tank/jetpack/suit
@@ -389,14 +389,14 @@
alt_desc = "An elite version of the syndicate helmet, with improved armour and fireproofing. It is in combat mode. Property of Gorlex Marauders."
icon_state = "hardsuit0-syndielite"
hardsuit_type = "syndielite"
- armor = list("melee" = 60, "bullet" = 60, "laser" = 50, "energy" = 25, "bomb" = 55, "bio" = 100, "rad" = 70, "fire" = 100, "acid" = 100, "wound" = 25)
+ armor = list(MELEE = 60, BULLET = 60, LASER = 50, ENERGY = 25, BOMB = 55, BIO = 100, RAD = 70, FIRE = 100, ACID = 100, WOUND = 25)
heat_protection = HEAD
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
resistance_flags = FIRE_PROOF | ACID_PROOF
/obj/item/clothing/head/helmet/space/hardsuit/syndi/elite/debug
-/obj/item/clothing/head/helmet/space/hardsuit/syndi/elite/debug/Initialize()
+/obj/item/clothing/head/helmet/space/hardsuit/syndi/elite/debug/Initialize(mapload)
. = ..()
soundloop.volume = 0
@@ -407,7 +407,7 @@
icon_state = "hardsuit0-syndielite"
hardsuit_type = "syndielite"
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi/elite
- armor = list("melee" = 60, "bullet" = 60, "laser" = 50, "energy" = 25, "bomb" = 55, "bio" = 100, "rad" = 70, "fire" = 100, "acid" = 100, "wound" = 25)
+ armor = list(MELEE = 60, BULLET = 60, LASER = 50, ENERGY = 25, BOMB = 55, BIO = 100, RAD = 70, FIRE = 100, ACID = 100, WOUND = 25)
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
resistance_flags = FIRE_PROOF | ACID_PROOF
@@ -447,7 +447,7 @@
item_state = "wiz_helm"
hardsuit_type = "wiz"
resistance_flags = FIRE_PROOF | ACID_PROOF //No longer shall our kind be foiled by lone chemists with spray bottles!
- armor = list("melee" = 40, "bullet" = 40, "laser" = 40, "energy" = 20, "bomb" = 35, "bio" = 100, "rad" = 50, "fire" = 100, "acid" = 100, "wound" = 30)
+ armor = list(MELEE = 40, BULLET = 40, LASER = 40, ENERGY = 20, BOMB = 35, BIO = 100, RAD = 50, FIRE = 100, ACID = 100, WOUND = 30)
heat_protection = HEAD //Uncomment to enable firesuit protection
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
@@ -462,7 +462,7 @@
item_state = "wiz_hardsuit"
w_class = WEIGHT_CLASS_NORMAL
resistance_flags = FIRE_PROOF | ACID_PROOF
- armor = list("melee" = 40, "bullet" = 40, "laser" = 40, "energy" = 20, "bomb" = 35, "bio" = 100, "rad" = 50, "fire" = 100, "acid" = 100, "wound" = 30)
+ armor = list(MELEE = 40, BULLET = 40, LASER = 40, ENERGY = 20, BOMB = 35, BIO = 100, RAD = 50, FIRE = 100, ACID = 100, WOUND = 30)
allowed = list(/obj/item/teleportation_scroll, /obj/item/tank/internals)
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS //Uncomment to enable firesuit protection
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
@@ -482,7 +482,7 @@
item_state = "medical_helm"
hardsuit_type = "medical"
flash_protect = 0
- armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 10, "bio" = 100, "rad" = 60, "fire" = 60, "acid" = 75, "wound" = 10)
+ armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 5, BOMB = 10, BIO = 100, RAD = 60, FIRE = 60, ACID = 75, WOUND = 10)
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL | BLOCK_GAS_SMOKE_EFFECT | ALLOWINTERNALS | SCAN_REAGENTS
@@ -505,7 +505,7 @@
item_state = "medical_hardsuit"
slowdown = 0.8
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/storage/firstaid, /obj/item/healthanalyzer, /obj/item/stack/medical)
- armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 10, "bio" = 100, "rad" = 60, "fire" = 60, "acid" = 75, "wound" = 10)
+ armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 5, BOMB = 10, BIO = 100, RAD = 60, FIRE = 60, ACID = 75, WOUND = 10)
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/medical
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_ALL_TAURIC
@@ -517,12 +517,12 @@
hardsuit_type = "rd"
resistance_flags = ACID_PROOF | FIRE_PROOF
max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT
- armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 100, "bio" = 100, "rad" = 60, "fire" = 60, "acid" = 80, "wound" = 15)
+ armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 5, BOMB = 100, BIO = 100, RAD = 60, FIRE = 60, ACID = 80, WOUND = 15)
var/obj/machinery/doppler_array/integrated/bomb_radar
clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL | BLOCK_GAS_SMOKE_EFFECT | ALLOWINTERNALS | SCAN_REAGENTS
actions_types = list(/datum/action/item_action/toggle_helmet_light, /datum/action/item_action/toggle_research_scanner)
-/obj/item/clothing/head/helmet/space/hardsuit/rd/Initialize()
+/obj/item/clothing/head/helmet/space/hardsuit/rd/Initialize(mapload)
. = ..()
bomb_radar = new /obj/machinery/doppler_array/integrated(src)
@@ -547,7 +547,7 @@
max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT //Same as an emergency firesuit. Not ideal for extended exposure.
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/gun/energy/wormhole_projector,
/obj/item/hand_tele, /obj/item/aicard)
- armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 100, "bio" = 100, "rad" = 60, "fire" = 60, "acid" = 80, "wound" = 15)
+ armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 5, BOMB = 100, BIO = 100, RAD = 60, FIRE = 60, ACID = 80, WOUND = 15)
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/rd
//Security hardsuit
@@ -557,18 +557,18 @@
icon_state = "hardsuit0-sec"
item_state = "sec_helm"
hardsuit_type = "sec"
- armor = list("melee" = 35, "bullet" = 15, "laser" = 30,"energy" = 10, "bomb" = 10, "bio" = 100, "rad" = 50, "fire" = 75, "acid" = 75, "wound" = 20)
+ armor = list(MELEE = 35, BULLET = 15, LASER = 30,ENERGY = 10, BOMB = 10, BIO = 100, RAD = 50, FIRE = 75, ACID = 75, WOUND = 20)
/obj/item/clothing/suit/space/hardsuit/security
icon_state = "hardsuit-sec"
name = "security hardsuit"
desc = "A special suit that protects against hazardous, low pressure environments. Has an additional layer of armor."
item_state = "sec_hardsuit"
- armor = list("melee" = 35, "bullet" = 15, "laser" = 30, "energy" = 10, "bomb" = 10, "bio" = 100, "rad" = 50, "fire" = 75, "acid" = 75, "wound" = 20)
+ armor = list(MELEE = 35, BULLET = 15, LASER = 30, ENERGY = 10, BOMB = 10, BIO = 100, RAD = 50, FIRE = 75, ACID = 75, WOUND = 20)
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/security
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_ALL_TAURIC
-/obj/item/clothing/suit/space/hardsuit/security/Initialize()
+/obj/item/clothing/suit/space/hardsuit/security/Initialize(mapload)
. = ..()
allowed = GLOB.security_hardsuit_allowed
@@ -578,13 +578,13 @@
desc = "A special bulky helmet designed for work in a hazardous, low pressure environment. Has an additional layer of armor."
icon_state = "hardsuit0-hos"
hardsuit_type = "hos"
- armor = list("melee" = 45, "bullet" = 25, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 100, "rad" = 50, "fire" = 95, "acid" = 95, "wound" = 25)
+ armor = list(MELEE = 45, BULLET = 25, LASER = 30, ENERGY = 10, BOMB = 25, BIO = 100, RAD = 50, FIRE = 95, ACID = 95, WOUND = 25)
/obj/item/clothing/suit/space/hardsuit/security/hos
icon_state = "hardsuit-hos"
name = "head of security's hardsuit"
desc = "A special bulky suit that protects against hazardous, low pressure environments. Has an additional layer of armor."
- armor = list("melee" = 45, "bullet" = 25, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 100, "rad" = 50, "fire" = 95, "acid" = 95, "wound" = 25)
+ armor = list(MELEE = 45, BULLET = 25, LASER = 30, ENERGY = 10, BOMB = 25, BIO = 100, RAD = 50, FIRE = 95, ACID = 95, WOUND = 25)
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/security/hos
jetpack = /obj/item/tank/jetpack/suit
@@ -594,7 +594,7 @@
icon_state = "capspace"
item_state = "capspacehelmet"
desc = "A tactical SWAT helmet MK.II boasting better protection and a horrible fashion sense."
- armor = list("melee" = 40, "bullet" = 50, "laser" = 50, "energy" = 25, "bomb" = 50, "bio" = 100, "rad" = 50, "fire" = 100, "acid" = 100, "wound" = 15)
+ armor = list(MELEE = 40, BULLET = 50, LASER = 50, ENERGY = 25, BOMB = 50, BIO = 100, RAD = 50, FIRE = 100, ACID = 100, WOUND = 15)
resistance_flags = FIRE_PROOF | ACID_PROOF
flags_inv = HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR //we want to see the mask
heat_protection = HEAD
@@ -609,13 +609,13 @@
desc = "A MK.II SWAT suit with streamlined joints and armor made out of superior materials, insulated against intense heat. The most advanced tactical armor available Usually reserved for heavy hitter corporate security, this one has a regal finish in Nanotrasen company colors. Better not let the assistants get a hold of it."
icon_state = "caparmor"
item_state = "capspacesuit"
- armor = list("melee" = 40, "bullet" = 50, "laser" = 50, "energy" = 25, "bomb" = 50, "bio" = 100, "rad" = 50, "fire" = 100, "acid" = 100, "wound" = 15)
+ armor = list(MELEE = 40, BULLET = 50, LASER = 50, ENERGY = 25, BOMB = 50, BIO = 100, RAD = 50, FIRE = 100, ACID = 100, WOUND = 15)
resistance_flags = FIRE_PROOF | ACID_PROOF
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT //this needed to be added a long fucking time ago
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/captain
-/obj/item/clothing/suit/space/hardsuit/captain/Initialize()
+/obj/item/clothing/suit/space/hardsuit/captain/Initialize(mapload)
. = ..()
allowed = GLOB.security_hardsuit_allowed
@@ -625,7 +625,7 @@
desc = "A special helmet designed for work in a hazardous, low-humor environment. Has radiation shielding."
icon_state = "hardsuit0-clown"
item_state = "hardsuit0-clown"
- armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 10, "bio" = 100, "rad" = 75, "fire" = 60, "acid" = 30, "wound" = 10)
+ armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 5, BOMB = 10, BIO = 100, RAD = 75, FIRE = 60, ACID = 30, WOUND = 10)
hardsuit_type = "clown"
/obj/item/clothing/suit/space/hardsuit/clown
@@ -633,7 +633,7 @@
desc = "A special suit that protects against hazardous, low humor environments. Has radiation shielding. Only a true clown can wear it."
icon_state = "hardsuit-clown"
item_state = "clown_hardsuit"
- armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 10, "bio" = 100, "rad" = 75, "fire" = 60, "acid" = 30, "wound" = 10)
+ armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 5, BOMB = 10, BIO = 100, RAD = 75, FIRE = 60, ACID = 30, WOUND = 10)
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/clown
mutantrace_variation = STYLE_DIGITIGRADE
@@ -651,7 +651,7 @@
desc = "Early prototype RIG hardsuit helmet, designed to quickly shift over a user's head. Design constraints of the helmet mean it has no inbuilt cameras, thus it restricts the users visability."
icon_state = "hardsuit0-ancient"
item_state = "anc_helm"
- armor = list("melee" = 30, "bullet" = 5, "laser" = 5, "energy" = 0, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 75, "wound" = 10)
+ armor = list(MELEE = 30, BULLET = 5, LASER = 5, ENERGY = 0, BOMB = 50, BIO = 100, RAD = 100, FIRE = 100, ACID = 75, WOUND = 10)
hardsuit_type = "ancient"
resistance_flags = FIRE_PROOF
@@ -660,7 +660,7 @@
desc = "Prototype powered RIG hardsuit. Provides excellent protection from the elements of space while being comfortable to move around in, thanks to the powered locomotives. Remains very bulky however."
icon_state = "hardsuit-ancient"
item_state = "anc_hardsuit"
- armor = list("melee" = 30, "bullet" = 5, "laser" = 5, "energy" = 0, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 75, "wound" = 10)
+ armor = list(MELEE = 30, BULLET = 5, LASER = 5, ENERGY = 0, BOMB = 50, BIO = 100, RAD = 100, FIRE = 100, ACID = 75, WOUND = 10)
slowdown = 3
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ancient
resistance_flags = FIRE_PROOF
@@ -673,7 +673,7 @@
desc = "The Multi-Augmented Severe Operations Networked Resource Integration Gear is an man-portable tank designed for extreme environmental situations. It is excessively bulky, but rated for all but the most atomic of hazards. The specialized armor is surprisingly weak to conventional weaponry. The exo slot can attach most storage bags on to the suit."
icon_state = "hardsuit-ancient"
item_state = "anc_hardsuit"
- armor = list("melee" = 20, "bullet" = 15, "laser" = 15, "energy" = 45, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100, "wound" = 10)
+ armor = list(MELEE = 20, BULLET = 15, LASER = 15, ENERGY = 45, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, WOUND = 10)
slowdown = 6 //Slow
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/storage, /obj/item/construction/rcd, /obj/item/pipe_dispenser)
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ancient/mason
@@ -686,7 +686,7 @@
desc = "The M.A.S.O.N RIG helmet is complimentary to the rest of the armor. It features a very large, high powered flood lamp and robust flash protection."
icon_state = "hardsuit0-ancient"
item_state = "anc_helm"
- armor = list("melee" = 20, "bullet" = 15, "laser" = 15, "energy" = 45, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100, "wound" = 10)
+ armor = list(MELEE = 20, BULLET = 15, LASER = 15, ENERGY = 45, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, WOUND = 10)
hardsuit_type = "ancient"
brightness_on = 16
flash_protect = 5 //We will not be flash by bombs
@@ -696,7 +696,7 @@
clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL | BLOCK_GAS_SMOKE_EFFECT | ALLOWINTERNALS | SCAN_REAGENTS
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
-/obj/item/clothing/head/helmet/space/hardsuit/ancient/mason/Initialize()
+/obj/item/clothing/head/helmet/space/hardsuit/ancient/mason/Initialize(mapload)
. = ..()
bomb_radar = new /obj/machinery/doppler_array/integrated(src)
@@ -752,7 +752,7 @@
item_state = "rig0-soviet"
hardsuit_type = "soviet"
icon_state = "rig0-soviet"
- armor = list("melee" = 40, "bullet" = 30, "laser" = 30, "energy" = 15, "bomb" = 35, "bio" = 100, "rad" = 20, "fire" = 50, "acid" = 75, "wound" = 15)
+ armor = list(MELEE = 40, BULLET = 30, LASER = 30, ENERGY = 15, BOMB = 35, BIO = 100, RAD = 20, FIRE = 50, ACID = 75, WOUND = 15)
mutantrace_variation = NONE
/obj/item/clothing/suit/space/hardsuit/soviet
@@ -761,11 +761,11 @@
item_state = "rig-soviet"
icon_state = "rig-soviet"
slowdown = 0.8
- armor = list("melee" = 40, "bullet" = 30, "laser" = 30, "energy" = 15, "bomb" = 35, "bio" = 100, "rad" = 20, "fire" = 50, "acid" = 75, "wound" = 15)
+ armor = list(MELEE = 40, BULLET = 30, LASER = 30, ENERGY = 15, BOMB = 35, BIO = 100, RAD = 20, FIRE = 50, ACID = 75, WOUND = 15)
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/soviet
mutantrace_variation = NONE
-/obj/item/clothing/suit/space/hardsuit/soviet/Initialize()
+/obj/item/clothing/suit/space/hardsuit/soviet/Initialize(mapload)
. = ..()
allowed = GLOB.security_hardsuit_allowed
@@ -777,7 +777,7 @@
icon_state = "hardsuit-hos"
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/security/hos
allowed = null
- armor = list("melee" = 30, "bullet" = 15, "laser" = 30, "energy" = 10, "bomb" = 10, "bio" = 100, "rad" = 50, "fire" = 100, "acid" = 100, "wound" = 15)
+ armor = list(MELEE = 30, BULLET = 15, LASER = 30, ENERGY = 10, BOMB = 10, BIO = 100, RAD = 50, FIRE = 100, ACID = 100, WOUND = 15)
resistance_flags = FIRE_PROOF | ACID_PROOF
var/max_charges = 3 //How many charges total the shielding has
var/current_charges //if null, will default to max_chargs
@@ -785,7 +785,7 @@
var/recharge_rate = 1 //How quickly the shield recharges once it starts charging
var/shield_state = "shield-old"
-/obj/item/clothing/suit/space/hardsuit/shielded/Initialize()
+/obj/item/clothing/suit/space/hardsuit/shielded/Initialize(mapload)
. = ..()
if(!allowed)
allowed = GLOB.advanced_hardsuit_allowed
@@ -806,11 +806,11 @@
item_state = "ert_medical"
hardsuit_type = "ert_medical"
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf
- armor = list("melee" = 0, "bullet" = 30, "laser" = 30, "energy" = 30, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 95, "acid" = 95, "wound" = 30)
+ armor = list(MELEE = 0, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 50, BIO = 100, RAD = 100, FIRE = 95, ACID = 95, WOUND = 30)
slowdown = 0
max_charges = 5
-/obj/item/clothing/suit/space/hardsuit/shielded/ctf/Initialize()
+/obj/item/clothing/suit/space/hardsuit/shielded/ctf/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CAPTURE_THE_FLAG_TRAIT)
@@ -835,7 +835,7 @@
icon_state = "hardsuit0-ert_medical"
item_state = "hardsuit0-ert_medical"
hardsuit_type = "ert_medical"
- armor = list("melee" = 0, "bullet" = 30, "laser" = 30, "energy" = 30, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 95, "acid" = 95, "wound" = 30)
+ armor = list(MELEE = 0, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 50, BIO = 100, RAD = 100, FIRE = 95, ACID = 95, WOUND = 30)
/obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf/red
icon_state = "hardsuit0-ert_security"
@@ -857,13 +857,13 @@
icon_state = "hardsuit1-syndi"
item_state = "syndie_hardsuit"
hardsuit_type = "syndi"
- armor = list("melee" = 40, "bullet" = 50, "laser" = 30, "energy" = 15, "bomb" = 35, "bio" = 100, "rad" = 50, "fire" = 100, "acid" = 100, "wound" = 30)
+ armor = list(MELEE = 40, BULLET = 50, LASER = 30, ENERGY = 15, BOMB = 35, BIO = 100, RAD = 50, FIRE = 100, ACID = 100, WOUND = 30)
allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/melee/transforming/energy/sword/saber, /obj/item/restraints/handcuffs, /obj/item/tank/internals)
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/syndi
slowdown = 0
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_ALL_TAURIC
-/obj/item/clothing/suit/space/hardsuit/shielded/syndi/Initialize()
+/obj/item/clothing/suit/space/hardsuit/shielded/syndi/Initialize(mapload)
jetpack = new /obj/item/tank/jetpack/suit(src)
. = ..()
@@ -873,7 +873,7 @@
icon_state = "hardsuit1-syndi"
item_state = "syndie_helm"
hardsuit_type = "syndi"
- armor = list("melee" = 40, "bullet" = 50, "laser" = 30, "energy" = 15, "bomb" = 35, "bio" = 100, "rad" = 50, "fire" = 100, "acid" = 100, "wound" = 30)
+ armor = list(MELEE = 40, BULLET = 50, LASER = 30, ENERGY = 15, BOMB = 35, BIO = 100, RAD = 50, FIRE = 100, ACID = 100, WOUND = 30)
///SWAT version
/obj/item/clothing/suit/space/hardsuit/shielded/swat
@@ -884,7 +884,7 @@
hardsuit_type = "syndi"
max_charges = 4
recharge_delay = 15
- armor = list("melee" = 80, "bullet" = 80, "laser" = 50, "energy" = 50, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100, "wound" = 30)
+ armor = list(MELEE = 80, BULLET = 80, LASER = 50, ENERGY = 50, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, WOUND = 30)
strip_delay = 130
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/swat
@@ -896,7 +896,7 @@
icon_state = "deathsquad"
item_state = "deathsquad"
hardsuit_type = "syndi"
- armor = list("melee" = 80, "bullet" = 80, "laser" = 50, "energy" = 50, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100, "wound" = 30)
+ armor = list(MELEE = 80, BULLET = 80, LASER = 50, ENERGY = 50, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, WOUND = 30)
strip_delay = 130
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
actions_types = list()
@@ -914,14 +914,14 @@
max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT
resistance_flags = FIRE_PROOF | LAVA_PROOF
heat_protection = HEAD
- armor = list(melee = 50, bullet = 10, laser = 10, energy = 10, bomb = 50, bio = 100, rad = 50, fire = 100, acid = 100, "wound" = 30)
+ armor = list(melee = 50, bullet = 10, laser = 10, energy = 10, bomb = 50, bio = 100, rad = 50, fire = 100, acid = 100, WOUND = 30)
brightness_on = 7
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator)
var/energy_color = "#35FFF0"
var/obj/item/clothing/suit/space/hardsuit/lavaknight/linkedsuit = null
mutantrace_variation = NONE
-/obj/item/clothing/head/helmet/space/hardsuit/lavaknight/Initialize()
+/obj/item/clothing/head/helmet/space/hardsuit/lavaknight/Initialize(mapload)
. = ..()
if(istype(loc, /obj/item/clothing/suit/space/hardsuit/lavaknight))
var/obj/item/clothing/suit/space/hardsuit/lavaknight/S = loc
@@ -958,13 +958,13 @@
item_state = "swat_suit"
max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT
resistance_flags = FIRE_PROOF | LAVA_PROOF
- armor = list(melee = 50, bullet = 10, laser = 10, energy = 10, bomb = 50, bio = 100, rad = 50, fire = 100, acid = 100, "wound" = 30)
+ armor = list(melee = 50, bullet = 10, laser = 10, energy = 10, bomb = 50, bio = 100, rad = 50, fire = 100, acid = 100, WOUND = 30)
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/storage/bag/ore, /obj/item/pickaxe)
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/lavaknight
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
var/energy_color = "#35FFF0"
-/obj/item/clothing/suit/space/hardsuit/lavaknight/Initialize()
+/obj/item/clothing/suit/space/hardsuit/lavaknight/Initialize(mapload)
..()
light_color = energy_color
set_light(1)
diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm
index f51593b590..24f91a3ab2 100644
--- a/code/modules/clothing/spacesuits/miscellaneous.dm
+++ b/code/modules/clothing/spacesuits/miscellaneous.dm
@@ -22,7 +22,7 @@ Contains:
desc = "An advanced tactical space helmet."
icon_state = "deathsquad"
item_state = "deathsquad"
- armor = list("melee" = 80, "bullet" = 80, "laser" = 50, "energy" = 50, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100, "wound" = 30)
+ armor = list(MELEE = 80, BULLET = 80, LASER = 50, ENERGY = 50, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, WOUND = 30)
strip_delay = 130
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
resistance_flags = FIRE_PROOF | ACID_PROOF
@@ -37,7 +37,7 @@ Contains:
icon_state = "deathsquad"
item_state = "swat_suit"
allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/kitchen/knife/combat)
- armor = list("melee" = 80, "bullet" = 80, "laser" = 50, "energy" = 50, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100, "wound" = 30)
+ armor = list(MELEE = 80, BULLET = 80, LASER = 50, ENERGY = 50, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, WOUND = 30)
strip_delay = 130
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
resistance_flags = FIRE_PROOF | ACID_PROOF
@@ -51,7 +51,7 @@ Contains:
icon_state = "heavy"
item_state = "swat_suit"
allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/kitchen/knife/combat)
- armor = list("melee" = 40, "bullet" = 30, "laser" = 30,"energy" = 30, "bomb" = 50, "bio" = 90, "rad" = 20, "fire" = 100, "acid" = 100, "wound" = 25)
+ armor = list(MELEE = 40, BULLET = 30, LASER = 30,ENERGY = 30, BOMB = 50, BIO = 90, RAD = 20, FIRE = 100, ACID = 100, WOUND = 25)
strip_delay = 120
resistance_flags = FIRE_PROOF | ACID_PROOF
mutantrace_variation = STYLE_DIGITIGRADE
@@ -63,7 +63,7 @@ Contains:
dynamic_hair_suffix = "+generic"
dynamic_fhair_suffix = "+generic"
flags_inv = 0
- armor = list("melee" = 80, "bullet" = 80, "laser" = 50, "energy" = 50, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100, "wound" = 30)
+ armor = list(MELEE = 80, BULLET = 80, LASER = 50, ENERGY = 50, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, WOUND = 30)
strip_delay = 130
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
resistance_flags = FIRE_PROOF | ACID_PROOF
@@ -79,7 +79,7 @@ Contains:
flags_inv = 0
w_class = WEIGHT_CLASS_NORMAL
allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals)
- armor = list("melee" = 80, "bullet" = 80, "laser" = 50, "energy" = 50, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100, "wound" = 30)
+ armor = list(MELEE = 80, BULLET = 80, LASER = 50, ENERGY = 50, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, WOUND = 30)
strip_delay = 130
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
resistance_flags = FIRE_PROOF | ACID_PROOF
@@ -140,7 +140,7 @@ Contains:
desc = "A thick, space-proof tricorne from the royal Space Queen. It's lined with a layer of reflective kevlar."
icon_state = "pirate"
item_state = "pirate"
- armor = list("melee" = 30, "bullet" = 50, "laser" = 30,"energy" = 15, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 60, "acid" = 75, "wound" = 30)
+ armor = list(MELEE = 30, BULLET = 50, LASER = 30,ENERGY = 15, BOMB = 30, BIO = 30, RAD = 30, FIRE = 60, ACID = 75, WOUND = 30)
flags_inv = HIDEHAIR
strip_delay = 40
equip_delay_other = 20
@@ -163,7 +163,7 @@ Contains:
flags_inv = 0
allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/melee/transforming/energy/sword/pirate, /obj/item/clothing/glasses/eyepatch, /obj/item/reagent_containers/food/drinks/bottle/rum)
slowdown = 0
- armor = list("melee" = 30, "bullet" = 50, "laser" = 30,"energy" = 15, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 60, "acid" = 75, "wound" = 30)
+ armor = list(MELEE = 30, BULLET = 50, LASER = 30,ENERGY = 15, BOMB = 30, BIO = 30, RAD = 30, FIRE = 60, ACID = 75, WOUND = 30)
strip_delay = 40
equip_delay_other = 20
mutantrace_variation = STYLE_DIGITIGRADE
@@ -175,12 +175,12 @@ Contains:
icon_state = "hardsuit0-ert_commander"
item_state = "hardsuit0-ert_commander"
hardsuit_type = "ert_commander"
- armor = list("melee" = 65, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 80, "wound" = 30)
+ armor = list(MELEE = 65, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 50, BIO = 100, RAD = 100, FIRE = 80, ACID = 80, WOUND = 30)
strip_delay = 130
brightness_on = 7
resistance_flags = ACID_PROOF
-/obj/item/clothing/head/helmet/space/hardsuit/ert/Initialize()
+/obj/item/clothing/head/helmet/space/hardsuit/ert/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, LOCKED_HELMET_TRAIT)
@@ -191,7 +191,7 @@ Contains:
item_state = "ert_command"
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert
allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals)
- armor = list("melee" = 65, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 80, "wound" = 30)
+ armor = list(MELEE = 65, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 50, BIO = 100, RAD = 100, FIRE = 80, ACID = 80, WOUND = 30)
slowdown = 0
strip_delay = 130
resistance_flags = ACID_PROOF
@@ -243,7 +243,7 @@ Contains:
icon_state = "hardsuit0-ert_commander-alert"
item_state = "hardsuit0-ert_commander-alert"
hardsuit_type = "ert_commander-alert"
- armor = list("melee" = 70, "bullet" = 55, "laser" = 50, "energy" = 50, "bomb" = 65, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100, "wound" = 50)
+ armor = list(MELEE = 70, BULLET = 55, LASER = 50, ENERGY = 50, BOMB = 65, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, WOUND = 50)
brightness_on = 8
resistance_flags = FIRE_PROOF | ACID_PROOF
@@ -253,7 +253,7 @@ Contains:
icon_state = "ert_command-alert"
item_state = "ert_command-alert"
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/alert
- armor = list("melee" = 70, "bullet" = 55, "laser" = 50, "energy" = 50, "bomb" = 65, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100, "wound" = 50)
+ armor = list(MELEE = 70, BULLET = 55, LASER = 50, ENERGY = 50, BOMB = 65, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, WOUND = 50)
resistance_flags = FIRE_PROOF | ACID_PROOF
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_SNEK_TAURIC|STYLE_PAW_TAURIC
@@ -301,7 +301,7 @@ Contains:
icon_state = "space"
item_state = "s_suit"
desc = "A lightweight space suit with the basic ability to protect the wearer from the vacuum of space during emergencies."
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 20, "fire" = 50, "acid" = 65, "wound" = 10)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 100, RAD = 20, FIRE = 50, ACID = 65, WOUND = 10)
/obj/item/clothing/head/helmet/space/eva
name = "EVA helmet"
@@ -309,7 +309,7 @@ Contains:
item_state = "space"
desc = "A lightweight space helmet with the basic ability to protect the wearer from the vacuum of space during emergencies."
flash_protect = 0
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 20, "fire" = 50, "acid" = 65, "wound" = 10)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 100, RAD = 20, FIRE = 50, ACID = 65, WOUND = 10)
//Radiation
/obj/item/clothing/head/helmet/space/rad
@@ -317,7 +317,7 @@ Contains:
desc = "A special helmet that protects against radiation and space. Not much else unfortunately."
icon_state = "cespace_helmet"
item_state = "nothing"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 0, "acid" = 0, "wound" = 5)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 100, FIRE = 0, ACID = 0, WOUND = 5)
resistance_flags = FIRE_PROOF
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
actions_types = list()
@@ -327,7 +327,7 @@ Contains:
desc = "A special suit that protects against radiation and space. Not much else unfortunately."
icon_state = "hardsuit-rad"
item_state = "nothing"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 0, "acid" = 0, "wound" = 5)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 100, FIRE = 0, ACID = 0, WOUND = 5)
resistance_flags = FIRE_PROOF
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
mutantrace_variation = NONE
@@ -337,7 +337,7 @@ Contains:
desc = "An advanced, space-proof helmet. It appears to be modeled after an old-world eagle."
icon_state = "griffinhat"
item_state = "griffinhat"
- armor = list("melee" = 20, "bullet" = 40, "laser" = 30, "energy" = 25, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 80, "wound" = 20)
+ armor = list(MELEE = 20, BULLET = 40, LASER = 30, ENERGY = 25, BOMB = 100, BIO = 100, RAD = 100, FIRE = 80, ACID = 80, WOUND = 20)
strip_delay = 130
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
resistance_flags = ACID_PROOF | FIRE_PROOF
@@ -349,7 +349,7 @@ Contains:
icon_state = "freedom"
item_state = "freedom"
allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals)
- armor = list("melee" = 20, "bullet" = 40, "laser" = 30,"energy" = 25, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 80, "wound" = 20)
+ armor = list(MELEE = 20, BULLET = 40, LASER = 30,ENERGY = 25, BOMB = 100, BIO = 100, RAD = 100, FIRE = 80, ACID = 80, WOUND = 20)
strip_delay = 130
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
resistance_flags = ACID_PROOF | FIRE_PROOF
@@ -362,12 +362,12 @@ Contains:
desc = "Spaceworthy and it looks like a space carp's head, smells like one too."
icon_state = "carp_helm"
item_state = "syndicate"
- armor = list("melee" = -20, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 75, "fire" = 60, "acid" = 75, "wound" = 5) //As whimpy as a space carp
+ armor = list(MELEE = -20, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 75, FIRE = 60, ACID = 75, WOUND = 5) //As whimpy as a space carp
brightness_on = 0 //luminosity when on
actions_types = list()
mutantrace_variation = NONE
-/obj/item/clothing/head/helmet/space/hardsuit/carp/Initialize()
+/obj/item/clothing/head/helmet/space/hardsuit/carp/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, LOCKED_HELMET_TRAIT)
@@ -378,7 +378,7 @@ Contains:
icon_state = "carp_suit"
item_state = "space_suit_syndicate"
slowdown = 0 //Space carp magic, never stop believing
- armor = list("melee" = -20, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 75, "fire" = 60, "acid" = 75, "wound" = 5) //As whimpy whimpy whoo
+ armor = list(MELEE = -20, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 75, FIRE = 60, ACID = 75, WOUND = 5) //As whimpy whimpy whoo
allowed = list(/obj/item/tank/internals, /obj/item/gun/ballistic/automatic/speargun) //I'm giving you a hint here
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/carp
mutantrace_variation = STYLE_DIGITIGRADE
@@ -395,7 +395,7 @@ Contains:
mutantrace_variation = NONE
var/charges = INFINITY
-/obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal/Initialize()
+/obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal/Initialize(mapload)
. = ..()
AddComponent(/datum/component/anti_magic, FALSE, FALSE, TRUE, ITEM_SLOT_HEAD, charges, TRUE, null, CALLBACK(src, .proc/anti_magic_gone))
@@ -416,7 +416,7 @@ Contains:
resistance_flags = FIRE_PROOF
var/charges = INFINITY
-/obj/item/clothing/suit/space/hardsuit/ert/paranormal/Initialize()
+/obj/item/clothing/suit/space/hardsuit/ert/paranormal/Initialize(mapload)
. = ..()
AddComponent(/datum/component/anti_magic, TRUE, TRUE, FALSE, ITEM_SLOT_OCLOTHING, charges, TRUE, null, CALLBACK(src, .proc/anti_magic_gone))
@@ -440,14 +440,14 @@ Contains:
/obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor/old
desc = "Powerful wards are built into this hardsuit, protecting the user from all manner of paranormal threats. Alas, this one looks pretty worn out and rusted."
- armor = list("melee" = 55, "bullet" = 40, "laser" = 40, "energy" = 40, "bomb" = 40, "bio" = 80, "rad" = 80, "fire" = 60, "acid" = 60, "wound" = 20)
+ armor = list(MELEE = 55, BULLET = 40, LASER = 40, ENERGY = 40, BOMB = 40, BIO = 80, RAD = 80, FIRE = 60, ACID = 60, WOUND = 20)
slowdown = 0.8
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal/inquisitor/old
charges = 12
/obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal/inquisitor/old
desc = "A helmet worn by those who deal with paranormal threats for a living. Alas, this one looks pretty worn out and rusted."
- armor = list("melee" = 55, "bullet" = 40, "laser" = 40, "energy" = 40, "bomb" = 40, "bio" = 80, "rad" = 80, "fire" = 60, "acid" = 60, "wound" = 20)
+ armor = list(MELEE = 55, BULLET = 40, LASER = 40, ENERGY = 40, BOMB = 40, BIO = 80, RAD = 80, FIRE = 60, ACID = 60, WOUND = 20)
charges = 12
/obj/item/clothing/suit/space/hardsuit/ert/paranormal/beserker
@@ -465,14 +465,14 @@ Contains:
/obj/item/clothing/suit/space/hardsuit/ert/paranormal/beserker/old
desc = "Voices echo from the hardsuit, driving the user insane. This one is pretty battle-worn, but still fearsome."
- armor = list("melee" = 55, "bullet" = 40, "laser" = 40, "energy" = 40, "bomb" = 40, "bio" = 80, "rad" = 80, "fire" = 60, "acid" = 60, "wound" = 20)
+ armor = list(MELEE = 55, BULLET = 40, LASER = 40, ENERGY = 40, BOMB = 40, BIO = 80, RAD = 80, FIRE = 60, ACID = 60, WOUND = 20)
slowdown = 0.8
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal/beserker/old
charges = 6
/obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal/beserker/old
desc = "Peering into the eyes of the helmet is enough to seal damnation. This one is pretty battle-worn, but still fearsome."
- armor = list("melee" = 55, "bullet" = 40, "laser" = 40, "energy" = 40, "bomb" = 40, "bio" = 80, "rad" = 80, "fire" = 60, "acid" = 60, "wound" = 20)
+ armor = list(MELEE = 55, BULLET = 40, LASER = 40, ENERGY = 40, BOMB = 40, BIO = 80, RAD = 80, FIRE = 60, ACID = 60, WOUND = 20)
charges = 6
/obj/item/clothing/head/helmet/space/fragile
@@ -480,7 +480,7 @@ Contains:
desc = "A bulky, air-tight helmet meant to protect the user during emergency situations. It doesn't look very durable."
icon_state = "syndicate-helm-orange"
item_state = "syndicate-helm-orange"
- armor = list("melee" = 5, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 10, "fire" = 0, "acid" = 0, "wound" = 5)
+ armor = list(MELEE = 5, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 10, FIRE = 0, ACID = 0, WOUND = 5)
strip_delay = 65
/obj/item/clothing/suit/space/fragile
@@ -490,7 +490,7 @@ Contains:
icon_state = "syndicate-orange"
item_state = "syndicate-orange"
slowdown = 2
- armor = list("melee" = 5, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 10, "fire" = 0, "acid" = 0, "wound" = 5)
+ armor = list(MELEE = 5, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 10, FIRE = 0, ACID = 0, WOUND = 5)
strip_delay = 65
/obj/item/clothing/suit/space/fragile/run_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return)
@@ -523,7 +523,7 @@ Contains:
icon_state = "hunter"
item_state = "swat_suit"
allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/kitchen/knife/combat)
- armor = list("melee" = 60, "bullet" = 40, "laser" = 40, "energy" = 50, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100, "wound" = 25)
+ armor = list(MELEE = 60, BULLET = 40, LASER = 40, ENERGY = 50, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, WOUND = 25)
strip_delay = 130
resistance_flags = FIRE_PROOF | ACID_PROOF
diff --git a/code/modules/clothing/spacesuits/plasmamen.dm b/code/modules/clothing/spacesuits/plasmamen.dm
index 25ad19eee4..8eacf66bbe 100644
--- a/code/modules/clothing/spacesuits/plasmamen.dm
+++ b/code/modules/clothing/spacesuits/plasmamen.dm
@@ -5,7 +5,7 @@
name = "EVA plasma envirosuit"
desc = "A special plasma containment suit designed to be space-worthy, as well as worn over other clothing. Like its smaller counterpart, it can automatically extinguish the wearer in a crisis, and holds twice as many charges."
allowed = list(/obj/item/gun, /obj/item/ammo_casing, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/melee/transforming/energy/sword, /obj/item/restraints/handcuffs, /obj/item/tank)
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 0, "fire" = 100, "acid" = 75, "wound" = 10)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 0, FIRE = 100, ACID = 75, WOUND = 10)
resistance_flags = FIRE_PROOF
icon_state = "plasmaman_suit"
item_state = "plasmaman_suit"
@@ -42,7 +42,7 @@
strip_delay = 80
flash_protect = 2
tint = 2
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 0, "fire" = 100, "acid" = 75, "wound" = 10)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 0, FIRE = 100, ACID = 75, WOUND = 10)
resistance_flags = FIRE_PROOF
var/brightness_on = 4 //luminosity when the light is on
var/helmet_on = FALSE
@@ -58,7 +58,7 @@
visor_flags_inv = HIDEEYES|HIDEFACE|HIDEFACIALHAIR
mutantrace_variation = NONE
-/obj/item/clothing/head/helmet/space/plasmaman/Initialize()
+/obj/item/clothing/head/helmet/space/plasmaman/Initialize(mapload)
. = ..()
visor_toggling()
update_icon()
@@ -155,7 +155,7 @@
desc = "A plasmaman containment helmet designed for security officers, protecting them from being flashed and burning alive, along-side other undesirables."
icon_state = "security_envirohelm"
item_state = "security_envirohelm"
- armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 0, "fire" = 100, "acid" = 75, "wound" = 20)
+ armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 0, FIRE = 100, ACID = 75, WOUND = 20)
/obj/item/clothing/head/helmet/space/plasmaman/security/warden
name = "warden's plasma envirosuit helmet"
@@ -214,7 +214,7 @@
desc = "A sturdier plasmaman envirohelmet designed for research directors."
icon_state = "rd_envirohelm"
item_state = "rd_envirohelm"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 10, "bio" = 100, "rad" = 0, "fire" = 100, "acid" = 75, "wound" = 10)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 100, RAD = 0, FIRE = 100, ACID = 75, WOUND = 10)
/obj/item/clothing/head/helmet/space/plasmaman/robotics
name = "robotics plasma envirosuit helmet"
@@ -227,7 +227,7 @@
desc = "A space-worthy helmet specially designed for engineer plasmamen, the usual purple stripes being replaced by engineering's orange."
icon_state = "engineer_envirohelm"
item_state = "engineer_envirohelm"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 10, "fire" = 100, "acid" = 75, "wound" = 10)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 10, FIRE = 100, ACID = 75, WOUND = 10)
/obj/item/clothing/head/helmet/space/plasmaman/engineering/ce
name = "chief engineer's plasma envirosuit helmet"
@@ -277,7 +277,7 @@
desc = "A blue and gold envirohelm designed for the station's captain, nonetheless. Made of superior materials to protect them from the station hazards and more."
icon_state = "captain_envirohelm"
item_state = "captain_envirohelm"
- armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 10, "bomb" = 10, "bio" = 100, "rad" = 10, "fire" = 100, "acid" = 85, "wound" = 15)
+ armor = list(MELEE = 10, BULLET = 10, LASER = 10, ENERGY = 10, BOMB = 10, BIO = 100, RAD = 10, FIRE = 100, ACID = 85, WOUND = 15)
/obj/item/clothing/head/helmet/space/plasmaman/curator
name = "curator's plasma envirosuit helmet"
diff --git a/code/modules/clothing/spacesuits/syndi.dm b/code/modules/clothing/spacesuits/syndi.dm
index f55379da2f..81eff1b428 100644
--- a/code/modules/clothing/spacesuits/syndi.dm
+++ b/code/modules/clothing/spacesuits/syndi.dm
@@ -4,7 +4,7 @@
icon_state = "syndicate"
item_state = "syndicate"
desc = "Has a tag on it: Totally not property of an enemy corporation, honest!"
- armor = list("melee" = 40, "bullet" = 50, "laser" = 30,"energy" = 15, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 80, "acid" = 85, "wound" = 20)
+ armor = list(MELEE = 40, BULLET = 50, LASER = 30,ENERGY = 15, BOMB = 30, BIO = 30, RAD = 30, FIRE = 80, ACID = 85, WOUND = 20)
/obj/item/clothing/suit/space/syndicate
name = "red space suit"
@@ -13,7 +13,7 @@
desc = "Has a tag on it: Totally not property of an enemy corporation, honest!"
w_class = WEIGHT_CLASS_NORMAL
allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/melee/transforming/energy/sword/saber, /obj/item/restraints/handcuffs, /obj/item/tank/internals)
- armor = list("melee" = 40, "bullet" = 50, "laser" = 30,"energy" = 15, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 80, "acid" = 85, "wound" = 20)
+ armor = list(MELEE = 40, BULLET = 50, LASER = 30,ENERGY = 15, BOMB = 30, BIO = 30, RAD = 30, FIRE = 80, ACID = 85, WOUND = 20)
mutantrace_variation = STYLE_DIGITIGRADE
//Green syndicate space suit
diff --git a/code/modules/clothing/suits/_suits.dm b/code/modules/clothing/suits/_suits.dm
index 0d16f9bdfa..fa4614429c 100644
--- a/code/modules/clothing/suits/_suits.dm
+++ b/code/modules/clothing/suits/_suits.dm
@@ -4,7 +4,7 @@
block_priority = BLOCK_PRIORITY_WEAR_SUIT
var/fire_resist = T0C+100
allowed = list(/obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0)
slot_flags = ITEM_SLOT_OCLOTHING
body_parts_covered = CHEST
var/blood_overlay_type = "suit"
diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm
index 90fd0b2812..e5b3dfe427 100644
--- a/code/modules/clothing/suits/armor.dm
+++ b/code/modules/clothing/suits/armor.dm
@@ -8,10 +8,10 @@
equip_delay_other = 40
max_integrity = 250
resistance_flags = NONE
- armor = list("melee" = 30, "bullet" = 30, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50, "wound" = 10)
+ armor = list(MELEE = 30, BULLET = 30, LASER = 30, ENERGY = 10, BOMB = 25, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, WOUND = 10)
-/obj/item/clothing/suit/armor/Initialize()
+/obj/item/clothing/suit/armor/Initialize(mapload)
. = ..()
if(!allowed)
allowed = GLOB.security_vest_allowed
@@ -58,7 +58,7 @@
icon_state = "hos"
item_state = "greatcoat"
body_parts_covered = CHEST|GROIN|ARMS|LEGS
- armor = list("melee" = 30, "bullet" = 30, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 90, "wound" = 10)
+ armor = list(MELEE = 30, BULLET = 30, LASER = 30, ENERGY = 10, BOMB = 25, BIO = 0, RAD = 0, FIRE = 70, ACID = 90, WOUND = 10)
cold_protection = CHEST|GROIN|LEGS|ARMS
heat_protection = CHEST|GROIN|LEGS|ARMS
strip_delay = 80
@@ -126,7 +126,7 @@
icon_state = "capcarapace"
item_state = "armor"
body_parts_covered = CHEST|GROIN
- armor = list("melee" = 50, "bullet" = 40, "laser" = 50, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 90, "wound" = 10)
+ armor = list(MELEE = 50, BULLET = 40, LASER = 50, ENERGY = 10, BOMB = 25, BIO = 0, RAD = 0, FIRE = 100, ACID = 90, WOUND = 10)
dog_fashion = null
resistance_flags = FIRE_PROOF
@@ -142,10 +142,10 @@
icon_state = "capformal"
item_state = "capspacesuit"
body_parts_covered = CHEST|GROIN|ARMS
- armor = list("melee" = 50, "bullet" = 40, "laser" = 50, "energy" = 50, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 90, "wound" = 10)
+ armor = list(MELEE = 50, BULLET = 40, LASER = 50, ENERGY = 50, BOMB = 25, BIO = 0, RAD = 0, FIRE = 100, ACID = 90, WOUND = 10)
togglename = "buttons"
-/obj/item/clothing/suit/toggle/captains_parade/Initialize()
+/obj/item/clothing/suit/toggle/captains_parade/Initialize(mapload)
. = ..()
allowed = GLOB.security_wintercoat_allowed
@@ -157,7 +157,7 @@
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
- armor = list("melee" = 50, "bullet" = 10, "laser" = 10, "energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80, "wound" = 20)
+ armor = list(MELEE = 50, BULLET = 10, LASER = 10, ENERGY = 10, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 80, WOUND = 20)
blocks_shove_knockdown = TRUE
strip_delay = 80
equip_delay_other = 60
@@ -168,7 +168,7 @@
icon_state = "bonearmor"
item_state = "bonearmor"
blood_overlay_type = "armor"
- armor = list("melee" = 35, "bullet" = 25, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50, "wound" = 10)
+ armor = list(MELEE = 35, BULLET = 25, LASER = 25, ENERGY = 10, BOMB = 25, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, WOUND = 10)
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS
/obj/item/clothing/suit/armor/bulletproof
@@ -177,7 +177,7 @@
icon_state = "bulletproof"
item_state = "armor"
blood_overlay_type = "armor"
- armor = list("melee" = 15, "bullet" = 60, "laser" = 10, "energy" = 10, "bomb" = 40, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50, "wound" = 20)
+ armor = list(MELEE = 15, BULLET = 60, LASER = 10, ENERGY = 10, BOMB = 40, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, WOUND = 20)
strip_delay = 70
equip_delay_other = 50
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON
@@ -188,7 +188,7 @@
icon_state = "armor_reflec"
item_state = "armor_reflec"
blood_overlay_type = "armor"
- armor = list("melee" = 10, "bullet" = 10, "laser" = 60, "energy" = 50, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
+ armor = list(MELEE = 10, BULLET = 10, LASER = 60, ENERGY = 50, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 100)
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON
var/hit_reflect_chance = 40
@@ -207,7 +207,7 @@
resistance_flags = FLAMMABLE
dog_fashion = null
-/obj/item/clothing/suit/armor/vest/det_suit/Initialize()
+/obj/item/clothing/suit/armor/vest/det_suit/Initialize(mapload)
. = ..()
allowed = GLOB.detective_vest_allowed
@@ -216,7 +216,7 @@
desc = "An insidious combat vest designed using Syndicate nanofibers to absorb the supreme majority of kinetic blows. Although it doesn't look like it'll do too much for energy impacts."
icon_state = "infiltrator"
item_state = "infiltrator"
- armor = list("melee" = 30, "bullet" = 40, "laser" = 20, "energy" = 30, "bomb" = 70, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
+ armor = list(MELEE = 30, BULLET = 40, LASER = 20, ENERGY = 30, BOMB = 70, BIO = 0, RAD = 0, FIRE = 50, ACID = 50)
resistance_flags = FIRE_PROOF | ACID_PROOF
strip_delay = 80
@@ -236,7 +236,7 @@
min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT
- armor = list("melee" = 80, "bullet" = 80, "laser" = 50, "energy" = 50, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 90)
+ armor = list(MELEE = 80, BULLET = 80, LASER = 50, ENERGY = 50, BOMB = 100, BIO = 100, RAD = 100, FIRE = 90, ACID = 90)
/obj/item/clothing/suit/armor/heavy
name = "heavy armor"
@@ -249,7 +249,7 @@
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
slowdown = 3
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
- armor = list("melee" = 80, "bullet" = 80, "laser" = 50, "energy" = 50, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 90)
+ armor = list(MELEE = 80, BULLET = 80, LASER = 50, ENERGY = 50, BOMB = 100, BIO = 100, RAD = 100, FIRE = 90, ACID = 90)
/obj/item/clothing/suit/armor/tdome
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
@@ -257,7 +257,7 @@
clothing_flags = THICKMATERIAL
cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
- armor = list("melee" = 80, "bullet" = 80, "laser" = 50, "energy" = 50, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 90)
+ armor = list(MELEE = 80, BULLET = 80, LASER = 50, ENERGY = 50, BOMB = 100, BIO = 100, RAD = 100, FIRE = 90, ACID = 90)
/obj/item/clothing/suit/armor/tdome/red
name = "thunderdome suit"
@@ -295,7 +295,7 @@
desc = "A classic suit of armour, able to be made from many different materials."
icon_state = "knight_greyscale"
item_state = "knight_greyscale"
- armor = list("melee" = 35, "bullet" = 10, "laser" = 10, "energy" = 10, "bomb" = 10, "bio" = 10, "rad" = 10, "fire" = 40, "acid" = 40, "wound" = 15)
+ armor = list(MELEE = 35, BULLET = 10, LASER = 10, ENERGY = 10, BOMB = 10, BIO = 10, RAD = 10, FIRE = 40, ACID = 40, WOUND = 15)
material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS //Can change color and add prefix
/obj/item/clothing/suit/armor/vest/durathread
@@ -307,14 +307,14 @@
equip_delay_other = 40
max_integrity = 200
resistance_flags = FLAMMABLE
- armor = list("melee" = 20, "bullet" = 10, "laser" = 30, "energy" = 5, "bomb" = 15, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 50)
+ armor = list(MELEE = 20, BULLET = 10, LASER = 30, ENERGY = 5, BOMB = 15, BIO = 0, RAD = 0, FIRE = 0, ACID = 50)
/obj/item/clothing/suit/armor/vest/russian
name = "russian vest"
desc = "A bulletproof vest with forest camo. Good thing there's plenty of forests to hide in around here, right?"
icon_state = "rus_armor"
item_state = "rus_armor"
- armor = list("melee" = 25, "bullet" = 30, "laser" = 0, "energy" = 15, "bomb" = 10, "bio" = 0, "rad" = 20, "fire" = 20, "acid" = 50, "wound" = 10)
+ armor = list(MELEE = 25, BULLET = 30, LASER = 0, ENERGY = 15, BOMB = 10, BIO = 0, RAD = 20, FIRE = 20, ACID = 50, WOUND = 10)
/obj/item/clothing/suit/armor/vest/russian_coat
name = "russian battle coat"
@@ -325,7 +325,7 @@
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT
- armor = list("melee" = 25, "bullet" = 20, "laser" = 20, "energy" = 10, "bomb" = 20, "bio" = 50, "rad" = 20, "fire" = -10, "acid" = 50, "wound" = 10)
+ armor = list(MELEE = 25, BULLET = 20, LASER = 20, ENERGY = 10, BOMB = 20, BIO = 50, RAD = 20, FIRE = -10, ACID = 50, WOUND = 10)
/obj/item/clothing/suit/toggle/armor/vest/centcom_formal
name = "\improper CentCom formal coat"
@@ -333,10 +333,10 @@
icon_state = "centcom_formal"
item_state = "centcom"
body_parts_covered = CHEST|GROIN|ARMS
- armor = list("melee" = 35, "bullet" = 40, "laser" = 40, "energy" = 50, "bomb" = 35, "bio" = 10, "rad" = 10, "fire" = 10, "acid" = 60)
+ armor = list(MELEE = 35, BULLET = 40, LASER = 40, ENERGY = 50, BOMB = 35, BIO = 10, RAD = 10, FIRE = 10, ACID = 60)
togglename = "buttons"
-/obj/item/clothing/suit/toggle/armor/vest/centcom_formal/Initialize()
+/obj/item/clothing/suit/toggle/armor/vest/centcom_formal/Initialize(mapload)
. = ..()
allowed = GLOB.security_wintercoat_allowed
@@ -346,9 +346,9 @@
icon_state = "hosformal"
item_state = "hostrench"
body_parts_covered = CHEST|GROIN|ARMS
- armor = list("melee" = 30, "bullet" = 30, "laser" = 30, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 90, "wound" = 10)
+ armor = list(MELEE = 30, BULLET = 30, LASER = 30, ENERGY = 40, BOMB = 25, BIO = 0, RAD = 0, FIRE = 70, ACID = 90, WOUND = 10)
togglename = "buttons"
-/obj/item/clothing/suit/toggle/armor/hos/hos_formal/Initialize()
+/obj/item/clothing/suit/toggle/armor/hos/hos_formal/Initialize(mapload)
. = ..()
allowed = GLOB.security_wintercoat_allowed
diff --git a/code/modules/clothing/suits/bio.dm b/code/modules/clothing/suits/bio.dm
index 94859d434f..2b66d61237 100644
--- a/code/modules/clothing/suits/bio.dm
+++ b/code/modules/clothing/suits/bio.dm
@@ -5,7 +5,7 @@
desc = "A hood that protects the head and face from biological contaminants."
permeability_coefficient = 0.01
clothing_flags = THICKMATERIAL | BLOCK_GAS_SMOKE_EFFECT
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 60, "fire" = 30, "acid" = 100)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 100, RAD = 60, FIRE = 30, ACID = 100)
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEHAIR|HIDEFACIALHAIR|HIDEFACE|HIDESNOUT
resistance_flags = ACID_PROOF
flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH
@@ -23,7 +23,7 @@
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
slowdown = 1
allowed = list(/obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/pen, /obj/item/flashlight/pen, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray)
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 60, "fire" = 30, "acid" = 100)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 100, RAD = 60, FIRE = 30, ACID = 100)
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAUR
strip_delay = 70
equip_delay_other = 70
@@ -48,11 +48,11 @@
//Security biosuit, grey with red stripe across the chest
/obj/item/clothing/head/bio_hood/security
- armor = list("melee" = 25, "bullet" = 15, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 100, "rad" = 80, "fire" = 30, "acid" = 100)
+ armor = list(MELEE = 25, BULLET = 15, LASER = 25, ENERGY = 10, BOMB = 25, BIO = 100, RAD = 80, FIRE = 30, ACID = 100)
icon_state = "bio_security"
/obj/item/clothing/suit/bio_suit/security
- armor = list("melee" = 25, "bullet" = 15, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 100, "rad" = 80, "fire" = 30, "acid" = 100)
+ armor = list(MELEE = 25, BULLET = 15, LASER = 25, ENERGY = 10, BOMB = 25, BIO = 100, RAD = 80, FIRE = 30, ACID = 100)
icon_state = "bio_security"
diff --git a/code/modules/clothing/suits/cloaks.dm b/code/modules/clothing/suits/cloaks.dm
index a58b218c1a..9c9c22e72e 100644
--- a/code/modules/clothing/suits/cloaks.dm
+++ b/code/modules/clothing/suits/cloaks.dm
@@ -60,7 +60,7 @@
icon_state = "goliath_cloak"
desc = "A staunch, practical cape made out of numerous monster materials, it is coveted amongst exiles & hermits."
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/pickaxe, /obj/item/spear, /obj/item/spear/bonespear, /obj/item/organ/regenerative_core/legion, /obj/item/kitchen/knife/combat/bone, /obj/item/kitchen/knife/combat/survival)
- armor = list("melee" = 35, "bullet" = 10, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 60) //a fair alternative to bone armor, requiring alternative materials and gaining a suit slot
+ armor = list(MELEE = 35, BULLET = 10, LASER = 25, ENERGY = 10, BOMB = 25, BIO = 0, RAD = 0, FIRE = 60, ACID = 60) //a fair alternative to bone armor, requiring alternative materials and gaining a suit slot
hoodtype = /obj/item/clothing/head/hooded/cloakhood/goliath
body_parts_covered = CHEST|ARMS|LEGS
@@ -68,7 +68,7 @@
name = "goliath cloak hood"
icon_state = "golhood"
desc = "A protective & concealing hood."
- armor = list("melee" = 35, "bullet" = 10, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 60)
+ armor = list(MELEE = 35, BULLET = 10, LASER = 25, ENERGY = 10, BOMB = 25, BIO = 0, RAD = 0, FIRE = 60, ACID = 60)
flags_inv = HIDEEARS|HIDEEYES|HIDEHAIR|HIDEFACIALHAIR
/obj/item/clothing/suit/hooded/cloak/drake
@@ -76,7 +76,7 @@
icon_state = "dragon"
desc = "A suit of armour fashioned from the remains of an ash drake."
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe, /obj/item/spear)
- armor = list("melee" = 70, "bullet" = 20, "laser" = 35, "energy" = 25, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
+ armor = list(MELEE = 70, BULLET = 20, LASER = 35, ENERGY = 25, BOMB = 25, BIO = 0, RAD = 0, FIRE = 100, ACID = 100)
hoodtype = /obj/item/clothing/head/hooded/cloakhood/drake
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
@@ -87,7 +87,7 @@
name = "drake helm"
icon_state = "dragon"
desc = "The skull of a dragon."
- armor = list("melee" = 70, "bullet" = 20, "laser" = 35, "energy" = 25, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
+ armor = list(MELEE = 70, BULLET = 20, LASER = 35, ENERGY = 25, BOMB = 25, BIO = 0, RAD = 0, FIRE = 100, ACID = 100)
heat_protection = HEAD
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
resistance_flags = FIRE_PROOF | ACID_PROOF | GOLIATH_RESISTANCE
diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm
index 13bfd8b460..e8ba7a5d18 100644
--- a/code/modules/clothing/suits/jobs.dm
+++ b/code/modules/clothing/suits/jobs.dm
@@ -102,12 +102,12 @@
item_state = "det_suit"
blood_overlay_type = "coat"
body_parts_covered = CHEST|GROIN|LEGS|ARMS
- armor = list("melee" = 25, "bullet" = 10, "laser" = 25, "energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 45)
+ armor = list(MELEE = 25, BULLET = 10, LASER = 25, ENERGY = 10, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 45)
cold_protection = CHEST|GROIN|LEGS|ARMS
heat_protection = CHEST|GROIN|LEGS|ARMS
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON
-/obj/item/clothing/suit/det_suit/Initialize()
+/obj/item/clothing/suit/det_suit/Initialize(mapload)
. = ..()
allowed = GLOB.detective_vest_allowed
@@ -176,7 +176,7 @@
/obj/item/clothing/suit/toggle/lawyer/black/syndie
desc = "A snappy dress jacket. Suspiciously has no tags or branding."
- armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 10, "bomb" = 10, "bio" = 10, "rad" = 10, "fire" = 40, "acid" = 40)
+ armor = list(MELEE = 10, BULLET = 10, LASER = 10, ENERGY = 10, BOMB = 10, BIO = 10, RAD = 10, FIRE = 40, ACID = 40)
//Mime
/obj/item/clothing/suit/suspenders
@@ -204,7 +204,7 @@
blood_overlay_type = "coat"
body_parts_covered = CHEST|ARMS
allowed = list(/obj/item/tank/internals, /obj/item/melee/curator_whip)
- armor = list("melee" = 25, "bullet" = 10, "laser" = 25, "energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 45)
+ armor = list(MELEE = 25, BULLET = 10, LASER = 25, ENERGY = 10, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 45)
cold_protection = CHEST|ARMS
heat_protection = CHEST|ARMS
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON
diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm
index d8e0466069..f94e21a466 100644
--- a/code/modules/clothing/suits/labcoat.dm
+++ b/code/modules/clothing/suits/labcoat.dm
@@ -27,7 +27,7 @@
/obj/item/tank/internals/plasmaman
)
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 50, "rad" = 0, "fire" = 50, "acid" = 50)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 50, RAD = 0, FIRE = 50, ACID = 50)
togglename = "buttons"
species_exception = list(/datum/species/golem)
@@ -78,7 +78,7 @@
icon_state = "sci_dep_jacket"
item_state = "sci_dep_jacket"
allowed = list(/obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 10, BIO = 0, RAD = 0, FIRE = 0, ACID = 0)
/obj/item/clothing/suit/toggle/labcoat/depjacket/med
name = "medical jacket"
@@ -86,14 +86,14 @@
icon_state = "med_dep_jacket"
item_state = "med_dep_jacket"
allowed = list(/obj/item/analyzer, /obj/item/sensor_device, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 50, "rad" = 0, "fire" = 0, "acid" = 45)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 50, RAD = 0, FIRE = 0, ACID = 45)
/obj/item/clothing/suit/toggle/labcoat/depjacket/sec
name = "security jacket"
desc = "A comfortable jacket in security red."
icon_state = "sec_dep_jacket"
item_state = "sec_dep_jacket"
- armor = list("melee" = 25, "bullet" = 15, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 45)
+ armor = list(MELEE = 25, BULLET = 15, LASER = 30, ENERGY = 10, BOMB = 25, BIO = 0, RAD = 0, FIRE = 0, ACID = 45)
allowed = list(/obj/item/gun/energy, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
/obj/item/clothing/suit/toggle/labcoat/depjacket/sup
@@ -113,5 +113,5 @@
desc = "A comfortable jacket in engineering yellow."
icon_state = "engi_dep_jacket"
item_state = "engi_dep_jacket"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 20, "fire" = 30, "acid" = 45)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 20, FIRE = 30, ACID = 45)
allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/t_scanner, /obj/item/construction/rcd, /obj/item/pipe_dispenser, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter)
diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm
index 57d2ae5c69..4de1b2ed8d 100644
--- a/code/modules/clothing/suits/miscellaneous.dm
+++ b/code/modules/clothing/suits/miscellaneous.dm
@@ -185,7 +185,7 @@
body_parts_covered = ARMS
actions_types = list(/datum/action/item_action/toggle_wings)
-/obj/item/clothing/suit/toggle/owlwings/Initialize()
+/obj/item/clothing/suit/toggle/owlwings/Initialize(mapload)
. = ..()
allowed = GLOB.security_vest_allowed
@@ -259,7 +259,7 @@
icon_state = "ponchoshame"
item_state = "ponchoshame"
-/obj/item/clothing/suit/poncho/ponchoshame/Initialize()
+/obj/item/clothing/suit/poncho/ponchoshame/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, SHAMEBRERO_TRAIT)
@@ -538,7 +538,7 @@
icon_state = "pufferjacket"
item_state = "hostrench"
body_parts_covered = CHEST|GROIN|ARMS
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 50, "rad" = 0, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 50, RAD = 0, FIRE = 0, ACID = 0)
/obj/item/clothing/suit/jacket/puffer/vest
name = "puffer vest"
@@ -548,7 +548,7 @@
body_parts_covered = CHEST|GROIN
cold_protection = CHEST|GROIN
heat_protection = CHEST|GROIN
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 30, "rad" = 0, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 30, RAD = 0, FIRE = 0, ACID = 0)
/obj/item/clothing/suit/jacket/miljacket
name = "military jacket"
@@ -635,7 +635,7 @@
w_class = WEIGHT_CLASS_SMALL
body_parts_covered = CHEST|GROIN
attack_verb = list("warned", "cautioned", "smashed")
- armor = list("melee" = 5, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 5, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0)
/obj/item/clothing/suit/petharness
name = "pet harness"
@@ -669,7 +669,7 @@
heat_protection = CHEST|GROIN|ARMS
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
max_heat_protection_temperature = COAT_MAX_TEMP_PROTECT
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 0, ACID = 0)
allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter)
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON
@@ -689,26 +689,26 @@
name = "centcom winter coat"
icon_state = "coatcentcom"
item_state = "coatcentcom"
- armor = list("melee" = 40, "bullet" = 45, "laser" = 45, "energy" = 35, "bomb" = 40, "bio" = 25, "rad" = 25, "fire" = 35, "acid" = 50)
+ armor = list(MELEE = 40, BULLET = 45, LASER = 45, ENERGY = 35, BOMB = 40, BIO = 25, RAD = 25, FIRE = 35, ACID = 50)
hoodtype = /obj/item/clothing/head/hooded/winterhood/centcom
-/obj/item/clothing/suit/hooded/wintercoat/centcom/Initialize()
+/obj/item/clothing/suit/hooded/wintercoat/centcom/Initialize(mapload)
. = ..()
allowed = GLOB.security_wintercoat_allowed
/obj/item/clothing/head/hooded/winterhood/centcom
icon_state = "winterhood_centcom"
- armor = list("melee" = 40, "bullet" = 45, "laser" = 45, "energy" = 35, "bomb" = 40, "bio" = 25, "rad" = 25, "fire" = 35, "acid" = 50)
+ armor = list(MELEE = 40, BULLET = 45, LASER = 45, ENERGY = 35, BOMB = 40, BIO = 25, RAD = 25, FIRE = 35, ACID = 50)
/obj/item/clothing/suit/hooded/wintercoat/captain
name = "captain's winter coat"
desc = "A luxurious winter coat, stuffed with the down of the endangered Uka bird and trimmed with genuine sable. The fabric is an indulgently soft micro-fiber, and the deep ultramarine color is only one that could be achieved with minute amounts of crystalline bluespace dust woven into the thread between the plectrums. Extremely lavish, and extremely durable. The tiny flakes of protective material make it nothing short of extremely light lamellar armor."
icon_state = "coatcaptain"
item_state = "coatcaptain"
- armor = list("melee" = 25, "bullet" = 30, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 50)
+ armor = list(MELEE = 25, BULLET = 30, LASER = 30, ENERGY = 10, BOMB = 25, BIO = 0, RAD = 0, FIRE = 0, ACID = 50)
hoodtype = /obj/item/clothing/head/hooded/winterhood/captain
-/obj/item/clothing/suit/hooded/wintercoat/captain/Initialize()
+/obj/item/clothing/suit/hooded/wintercoat/captain/Initialize(mapload)
. = ..()
allowed = GLOB.security_wintercoat_allowed
@@ -721,7 +721,7 @@
desc = "A cozy winter coat, covered in thick fur. The breast features a proud yellow chevron, reminding everyone that you're the second banana."
icon_state = "coathop"
item_state = "coathop"
- armor = list("melee" = 5, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 5, "bio" = 5, "rad" = 0, "fire" = 0, "acid" = 5)
+ armor = list(MELEE = 5, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 5, BIO = 5, RAD = 0, FIRE = 0, ACID = 5)
hoodtype = /obj/item/clothing/head/hooded/winterhood/hop
/obj/item/clothing/head/hooded/winterhood/hop
@@ -733,10 +733,10 @@
desc = "A red, armor-padded winter coat. It glitters with a mild ablative coating and a robust air of authority. The zipper tab is a pair of jingly little handcuffs that get annoying after the first ten seconds."
icon_state = "coatsecurity"
item_state = "coatsecurity"
- armor = list("melee" = 25, "bullet" = 15, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 45)
+ armor = list(MELEE = 25, BULLET = 15, LASER = 30, ENERGY = 10, BOMB = 25, BIO = 0, RAD = 0, FIRE = 0, ACID = 45)
hoodtype = /obj/item/clothing/head/hooded/winterhood/security
-/obj/item/clothing/suit/hooded/wintercoat/security/Initialize()
+/obj/item/clothing/suit/hooded/wintercoat/security/Initialize(mapload)
. = ..()
allowed = GLOB.security_wintercoat_allowed
@@ -749,10 +749,10 @@
desc = "A red, armor-padded winter coat, lovingly woven with a Kevlar interleave and reinforced with semi-ablative polymers and a silver azide fill material. The zipper tab looks like a tiny replica of Beepsky."
icon_state = "coathos"
item_state = "coathos"
- armor = list("melee" = 35, "bullet" = 35, "laser" = 35, "energy" = 15, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 55)
+ armor = list(MELEE = 35, BULLET = 35, LASER = 35, ENERGY = 15, BOMB = 30, BIO = 0, RAD = 0, FIRE = 0, ACID = 55)
hoodtype = /obj/item/clothing/head/hooded/winterhood/hos
-/obj/item/clothing/suit/hooded/wintercoat/hos/Initialize()
+/obj/item/clothing/suit/hooded/wintercoat/hos/Initialize(mapload)
. = ..()
allowed = GLOB.security_wintercoat_allowed
@@ -766,7 +766,7 @@
icon_state = "coatmedical"
item_state = "coatmedical"
allowed = list(/obj/item/analyzer, /obj/item/sensor_device, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 50, "rad" = 0, "fire" = 0, "acid" = 45)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 50, RAD = 0, FIRE = 0, ACID = 45)
hoodtype = /obj/item/clothing/head/hooded/winterhood/medical
/obj/item/clothing/head/hooded/winterhood/medical
@@ -779,7 +779,7 @@
icon_state = "coatcmo"
item_state = "coatcmo"
allowed = list(/obj/item/analyzer, /obj/item/sensor_device, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
- armor = list("melee" = 5, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 50, "rad" = 0, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 5, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 50, RAD = 0, FIRE = 0, ACID = 0)
hoodtype = /obj/item/clothing/head/hooded/winterhood/cmo
/obj/item/clothing/head/hooded/winterhood/cmo
@@ -792,7 +792,7 @@
icon_state = "coatchemistry"
item_state = "coatchemistry"
allowed = list(/obj/item/analyzer, /obj/item/sensor_device, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 30, "rad" = 0, "fire" = 30, "acid" = 45)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 30, RAD = 0, FIRE = 30, ACID = 45)
hoodtype = /obj/item/clothing/head/hooded/winterhood/chemistry
/obj/item/clothing/head/hooded/winterhood/chemistry
@@ -805,7 +805,7 @@
icon_state = "coatviro"
item_state = "coatviro"
allowed = list(/obj/item/analyzer, /obj/item/sensor_device, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 30, "rad" = 0, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 30, RAD = 0, FIRE = 0, ACID = 0)
hoodtype = /obj/item/clothing/head/hooded/winterhood/viro
/obj/item/clothing/head/hooded/winterhood/viro
@@ -818,7 +818,7 @@
icon_state = "coatparamed"
item_state = "coatparamed"
allowed = list(/obj/item/analyzer, /obj/item/sensor_device, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 50, "rad" = 0, "fire" = 0, "acid" = 45)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 50, RAD = 0, FIRE = 0, ACID = 45)
hoodtype = /obj/item/clothing/head/hooded/winterhood/paramedic
/obj/item/clothing/head/hooded/winterhood/paramedic
@@ -831,7 +831,7 @@
icon_state = "coatscience"
item_state = "coatscience"
allowed = list(/obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 10, BIO = 0, RAD = 0, FIRE = 0, ACID = 0)
hoodtype = /obj/item/clothing/head/hooded/winterhood/science
/obj/item/clothing/head/hooded/winterhood/science
@@ -844,7 +844,7 @@
icon_state = "coatrobotics"
item_state = "coatrobotics"
allowed = list(/obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/screwdriver, /obj/item/crowbar, /obj/item/wrench, /obj/item/stack/cable_coil, /obj/item/weldingtool, /obj/item/multitool)
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 10, BIO = 0, RAD = 0, FIRE = 0, ACID = 0)
hoodtype = /obj/item/clothing/head/hooded/winterhood/robotics
/obj/item/clothing/head/hooded/winterhood/robotics
@@ -869,7 +869,7 @@
icon_state = "coatrd"
item_state = "coatrd"
allowed = list(/obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
- armor = list("melee" = 0, "bullet" = 0, "laser" = 5,"energy" = 0, "bomb" = 15, "bio" = 5, "rad" = 5, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 5,ENERGY = 0, BOMB = 15, BIO = 5, RAD = 5, FIRE = 0, ACID = 0)
hoodtype = /obj/item/clothing/head/hooded/winterhood/rd
/obj/item/clothing/head/hooded/winterhood/rd
@@ -881,7 +881,7 @@
desc = "A white winter coat with reflective green and yellow stripes. Stuffed with asbestos, treated with fire retardant PBDE, lined with a micro thin sheet of lead foil and snugly fitted to your body's measurements. This baby's ready to save you from anything except the thyroid cancer and systemic fibrosis you'll get from wearing it. The zipper tab is a tiny golden wrench."
icon_state = "coatce"
item_state = "coatce"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 5, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 30, "fire" = 35, "acid" = 45)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 5, ENERGY = 0, BOMB = 10, BIO = 0, RAD = 30, FIRE = 35, ACID = 45)
allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/t_scanner, /obj/item/construction/rcd, /obj/item/pipe_dispenser, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter)
hoodtype = /obj/item/clothing/head/hooded/winterhood/ce
@@ -894,7 +894,7 @@
desc = "A surprisingly heavy yellow winter coat with reflective orange stripes. It has a small wrench for its zipper tab, and the inside layer is covered with a radiation-resistant silver-nylon blend. Because you're worth it."
icon_state = "coatengineer"
item_state = "coatengineer"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 20, "fire" = 30, "acid" = 45)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 20, FIRE = 30, ACID = 45)
allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/t_scanner, /obj/item/construction/rcd, /obj/item/pipe_dispenser, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter)
hoodtype = /obj/item/clothing/head/hooded/winterhood/engineering
@@ -1001,7 +1001,7 @@
icon_state = "coatminer"
item_state = "coatminer"
allowed = list(/obj/item/pickaxe, /obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter)
- armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0)
hoodtype = /obj/item/clothing/head/hooded/winterhood/miner
/obj/item/clothing/head/hooded/winterhood/miner
@@ -1013,7 +1013,7 @@
desc = "A brass-plated button up winter coat. Instead of a zipper tab, it has a brass cog with a tiny red gemstone inset."
icon_state = "coatratvar"
item_state = "coatratvar"
- armor = list("melee" = 30, "bullet" = 45, "laser" = -10, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 60)
+ armor = list(MELEE = 30, BULLET = 45, LASER = -10, ENERGY = 0, BOMB = 30, BIO = 0, RAD = 0, FIRE = 60, ACID = 60)
allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/clockwork/replica_fabricator, /obj/item/clockwork/integration_cog, /obj/item/clockwork/slab, /obj/item/clockwork/weapon/ratvarian_spear)
hoodtype = /obj/item/clothing/head/hooded/winterhood/ratvar
var/real = TRUE
@@ -1042,7 +1042,7 @@
desc = "A somber button-up in tones of grey entropy and a wicked crimson zipper. When pulled all the way up, the zipper looks like a bloody gash. The zipper pull looks like a single drop of blood."
icon_state = "coatnarsie"
item_state = "coatnarsie"
- armor = list("melee" = 30, "bullet" = 20, "laser" = 30,"energy" = 10, "bomb" = 30, "bio" = 10, "rad" = 10, "fire" = 30, "acid" = 30)
+ armor = list(MELEE = 30, BULLET = 20, LASER = 30,ENERGY = 10, BOMB = 30, BIO = 10, RAD = 10, FIRE = 30, ACID = 30)
allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/restraints/legcuffs/bola/cult,/obj/item/melee/cultblade,/obj/item/melee/cultblade/dagger,/obj/item/reagent_containers/glass/beaker/unholywater,/obj/item/cult_shift,/obj/item/flashlight/flare/culttorch,/obj/item/cult_spear)
hoodtype = /obj/item/clothing/head/hooded/winterhood/narsie
var/real = TRUE
@@ -1069,7 +1069,7 @@
icon_state = "coatratvar"
item_state = "coatratvar"
allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter)
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0)
real = FALSE
/obj/item/clothing/suit/hooded/wintercoat/narsie/fake
@@ -1078,7 +1078,7 @@
icon_state = "coatnarsie"
item_state = "coatnarsie"
allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter)
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0)
real = FALSE
/obj/item/clothing/suit/hooded/wintercoat/durathread
@@ -1086,16 +1086,16 @@
desc = "The one coat to rule them all. Extremely durable while providing the utmost comfort."
icon_state = "coatdurathread"
item_state = "coatdurathread"
- armor = list("melee" = 15, "bullet" = 8, "laser" = 25, "energy" = 5, "bomb" = 12, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 50)
+ armor = list(MELEE = 15, BULLET = 8, LASER = 25, ENERGY = 5, BOMB = 12, BIO = 0, RAD = 0, FIRE = 0, ACID = 50)
hoodtype = /obj/item/clothing/head/hooded/winterhood/durathread
-/obj/item/clothing/suit/hooded/wintercoat/durathread/Initialize()
+/obj/item/clothing/suit/hooded/wintercoat/durathread/Initialize(mapload)
. = ..()
allowed = GLOB.security_wintercoat_allowed
/obj/item/clothing/head/hooded/winterhood/durathread
icon_state = "winterhood_durathread"
- armor = list("melee" = 20, "bullet" = 8, "laser" = 15, "energy" = 8, "bomb" = 25, "bio" = 10, "rad" = 15, "fire" = 75, "acid" = 37)
+ armor = list(MELEE = 20, BULLET = 8, LASER = 15, ENERGY = 8, BOMB = 25, BIO = 10, RAD = 15, FIRE = 75, ACID = 37)
/obj/item/clothing/suit/spookyghost
name = "spooky ghost"
@@ -1112,7 +1112,7 @@
icon = 'icons/obj/clothing/clockwork_garb.dmi'
icon_state = "clockwork_cuirass_old"
body_parts_covered = CHEST|GROIN|LEGS
- armor = list("melee" = 5, "bullet" = 0, "laser" = -5, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 20)
+ armor = list(MELEE = 5, BULLET = 0, LASER = -5, ENERGY = 0, BOMB = 10, BIO = 0, RAD = 0, FIRE = 20, ACID = 20)
/obj/item/clothing/suit/ghost_sheet
name = "ghost sheet"
@@ -1152,7 +1152,7 @@
blood_overlay_type = "armor"
body_parts_covered = CHEST
resistance_flags = NONE
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 5, "bio" = 0, "rad" = 0, "fire" = -5, "acid" = -15) //nylon sucks against acid
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 5, BIO = 0, RAD = 0, FIRE = -5, ACID = -15) //nylon sucks against acid
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON
/obj/item/clothing/suit/assu_suit
diff --git a/code/modules/clothing/suits/reactive_armour.dm b/code/modules/clothing/suits/reactive_armour.dm
index 608aca2aad..2f2c861b6b 100644
--- a/code/modules/clothing/suits/reactive_armour.dm
+++ b/code/modules/clothing/suits/reactive_armour.dm
@@ -33,7 +33,7 @@
icon_state = "reactiveoff"
item_state = "reactiveoff"
blood_overlay_type = "armor"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 100)
actions_types = list(/datum/action/item_action/toggle)
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
diff --git a/code/modules/clothing/suits/toggles.dm b/code/modules/clothing/suits/toggles.dm
index 5ee247e135..25cbf27cf6 100644
--- a/code/modules/clothing/suits/toggles.dm
+++ b/code/modules/clothing/suits/toggles.dm
@@ -8,7 +8,7 @@
var/alternative_mode = FALSE
var/no_t //do not update sprites when pulling up hood so we can avoid oddities with certain mechanics
-/obj/item/clothing/suit/hooded/Initialize()
+/obj/item/clothing/suit/hooded/Initialize(mapload)
. = ..()
hood = MakeHelmet()
@@ -146,7 +146,7 @@
. += "Alt-click on [src] to toggle the [togglename]."
//Hardsuit toggle code
-/obj/item/clothing/suit/space/hardsuit/Initialize()
+/obj/item/clothing/suit/space/hardsuit/Initialize(mapload)
. = ..()
helmet = MakeHelmet()
diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm
index 1f28c5ddf3..d58b88b773 100644
--- a/code/modules/clothing/suits/utility.dm
+++ b/code/modules/clothing/suits/utility.dm
@@ -20,7 +20,7 @@
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/extinguisher, /obj/item/crowbar)
slowdown = 1
- armor = list("melee" = 15, "bullet" = 5, "laser" = 20, "energy" = 10, "bomb" = 20, "bio" = 10, "rad" = 20, "fire" = 100, "acid" = 50)
+ armor = list(MELEE = 15, BULLET = 5, LASER = 20, ENERGY = 10, BOMB = 20, BIO = 10, RAD = 20, FIRE = 100, ACID = 50)
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
@@ -62,7 +62,7 @@
desc = "Use in case of bomb."
icon_state = "bombsuit"
clothing_flags = THICKMATERIAL
- armor = list("melee" = 20, "bullet" = 0, "laser" = 20,"energy" = 10, "bomb" = 100, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 50)
+ armor = list(MELEE = 20, BULLET = 0, LASER = 20,ENERGY = 10, BOMB = 100, BIO = 0, RAD = 0, FIRE = 80, ACID = 50)
flags_inv = HIDEFACE|HIDEMASK|HIDEEARS|HIDEEYES|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT
dynamic_hair_suffix = ""
dynamic_fhair_suffix = ""
@@ -88,7 +88,7 @@
clothing_flags = THICKMATERIAL
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
slowdown = 2
- armor = list("melee" = 20, "bullet" = 0, "laser" = 20,"energy" = 10, "bomb" = 100, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 50)
+ armor = list(MELEE = 20, BULLET = 0, LASER = 20,ENERGY = 10, BOMB = 100, BIO = 0, RAD = 0, FIRE = 80, ACID = 50)
flags_inv = HIDEJUMPSUIT|HIDETAUR
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT
@@ -128,7 +128,7 @@
desc = "A hood with radiation protective properties. The label reads, 'Made with lead. Please do not consume insulation.'"
clothing_flags = THICKMATERIAL
flags_inv = HIDEMASK|HIDEEARS|HIDEFACE|HIDEEYES|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 60, "rad" = 100, "fire" = 30, "acid" = 30)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 60, RAD = 100, FIRE = 30, ACID = 30)
strip_delay = 60
equip_delay_other = 60
flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH
@@ -148,7 +148,7 @@
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/geiger_counter)
slowdown = 1.5
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 60, "rad" = 100, "fire" = 30, "acid" = 30)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 60, RAD = 100, FIRE = 30, ACID = 30)
strip_delay = 60
equip_delay_other = 60
flags_inv = HIDEJUMPSUIT|HIDETAUR
diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm
index 5b131749b8..0d8aa60ba5 100644
--- a/code/modules/clothing/suits/wiz_robe.dm
+++ b/code/modules/clothing/suits/wiz_robe.dm
@@ -4,7 +4,7 @@
icon_state = "wizard"
gas_transfer_coefficient = 0.01 // IT'S MAGICAL OKAY JEEZ +1 TO NOT DIE
permeability_coefficient = 0.01
- armor = list("melee" = 30, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 20, "bio" = 20, "rad" = 20, "fire" = 100, "acid" = 100, "wound" = 20)
+ armor = list(MELEE = 30, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 20, BIO = 20, RAD = 20, FIRE = 100, ACID = 100, WOUND = 20)
strip_delay = 50
equip_delay_other = 50
resistance_flags = FIRE_PROOF | ACID_PROOF
@@ -41,7 +41,7 @@
icon_state = "wizard-fake"
gas_transfer_coefficient = 1
permeability_coefficient = 1
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0)
resistance_flags = FLAMMABLE
magic_flags = NONE
@@ -74,7 +74,7 @@
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.01
body_parts_covered = CHEST|GROIN|ARMS|LEGS
- armor = list("melee" = 30, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 20, "bio" = 20, "rad" = 20, "fire" = 100, "acid" = 100, "wound" = 20)
+ armor = list(MELEE = 30, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 20, BIO = 20, RAD = 20, FIRE = 100, ACID = 100, WOUND = 20)
allowed = list(/obj/item/teleportation_scroll)
flags_inv = HIDEJUMPSUIT
strip_delay = 50
@@ -140,21 +140,21 @@
icon_state = "wizard-fake"
gas_transfer_coefficient = 1
permeability_coefficient = 1
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0)
resistance_flags = FLAMMABLE
magic_flags = NONE
/obj/item/clothing/head/wizard/marisa/fake
gas_transfer_coefficient = 1
permeability_coefficient = 1
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0)
resistance_flags = FLAMMABLE
magic_flags = NONE
/obj/item/clothing/suit/wizrobe/marisa/fake
gas_transfer_coefficient = 1
permeability_coefficient = 1
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0)
resistance_flags = FLAMMABLE
magic_flags = NONE
@@ -274,8 +274,8 @@
if(isliving(A)) //Gettem boys!
L = A
else if(ismecha(A))
- var/obj/mecha/M = A
- L = M.occupant
+ var/obj/vehicle/sealed/mecha/M = A
+ L = pick(M.occupants)
if(L && L.stat != DEAD && !HAS_TRAIT(L, TRAIT_DEATHCOMA)) //Taking revenge on the deads would be proposterous.
addtimer(CALLBACK(src, .proc/clear_grudge, L), 2 MINUTES, TIMER_OVERRIDE|TIMER_UNIQUE)
if(!book_of_grudges[L])
@@ -309,7 +309,7 @@
min_cold_protection_temperature = ARMOR_MIN_TEMP_PROTECT
max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/wizard
- armor = list("melee" = 30, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 20, "bio" = 20, "rad" = 20, "fire" = 100, "acid" = 100)
+ armor = list(MELEE = 30, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 20, BIO = 20, RAD = 20, FIRE = 100, ACID = 100)
slowdown = 0
resistance_flags = FIRE_PROOF | ACID_PROOF
@@ -324,7 +324,7 @@
item_state = "battlemage"
min_cold_protection_temperature = ARMOR_MIN_TEMP_PROTECT
max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT
- armor = list("melee" = 30, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 20, "bio" = 20, "rad" = 20, "fire" = 100, "acid" = 100)
+ armor = list(MELEE = 30, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 20, BIO = 20, RAD = 20, FIRE = 100, ACID = 100)
actions_types = null //No inbuilt light
resistance_flags = FIRE_PROOF | ACID_PROOF
diff --git a/code/modules/clothing/under/_under.dm b/code/modules/clothing/under/_under.dm
index 61e4bb5149..e806ebf906 100644
--- a/code/modules/clothing/under/_under.dm
+++ b/code/modules/clothing/under/_under.dm
@@ -5,7 +5,7 @@
permeability_coefficient = 0.9
block_priority = BLOCK_PRIORITY_UNIFORM
slot_flags = ITEM_SLOT_ICLOTHING
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0, "wound" = 5)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, WOUND = 5)
mutantrace_variation = STYLE_DIGITIGRADE|USE_TAUR_CLIP_MASK
limb_integrity = 120
var/fitted = FEMALE_UNIFORM_FULL // For use in alternate clothing styles for women
diff --git a/code/modules/clothing/under/accessories.dm b/code/modules/clothing/under/accessories.dm
index 40d30235d8..ca1b8f0552 100644
--- a/code/modules/clothing/under/accessories.dm
+++ b/code/modules/clothing/under/accessories.dm
@@ -378,7 +378,7 @@
/obj/item/clothing/accessory/medal/gold/captain/family
name = "old medal of captaincy"
desc = "A rustic badge pure gold, has been through hell and back by the looks, the syndcate have been after these by the looks of it for generations..."
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 10) //Pure gold
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 10) //Pure gold
custom_materials = list(/datum/material/gold=2000)
/obj/item/clothing/accessory/medal/gold/heroism
@@ -390,7 +390,7 @@
desc = "An eccentric medal made of plasma."
icon_state = "plasma"
medaltype = "medal-plasma"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = -10, "acid" = 0) //It's made of plasma. Of course it's flammable.
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = -10, ACID = 0) //It's made of plasma. Of course it's flammable.
custom_materials = list(/datum/material/plasma=1000)
/obj/item/clothing/accessory/medal/plasma/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
@@ -480,13 +480,13 @@
icon_state = "pocketprotector"
pocket_storage_component_path = /datum/component/storage/concrete/pockets/pocketprotector
-/obj/item/clothing/accessory/pocketprotector/full/Initialize()
+/obj/item/clothing/accessory/pocketprotector/full/Initialize(mapload)
. = ..()
new /obj/item/pen/red(src)
new /obj/item/pen(src)
new /obj/item/pen/blue(src)
-/obj/item/clothing/accessory/pocketprotector/cosmetology/Initialize()
+/obj/item/clothing/accessory/pocketprotector/cosmetology/Initialize(mapload)
. = ..()
for(var/i in 1 to 3)
new /obj/item/lipstick/random(src)
@@ -499,21 +499,21 @@
name = "bone talisman"
desc = "A hunter's talisman, some say the old gods smile on those who wear it."
icon_state = "talisman"
- armor = list("melee" = 5, "bullet" = 5, "laser" = 0, "energy" = 0, "bomb" = 10, "bio" = 20, "rad" = 5, "fire" = 0, "acid" = 25)
+ armor = list(MELEE = 5, BULLET = 5, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 20, RAD = 5, FIRE = 0, ACID = 25)
/obj/item/clothing/accessory/skullcodpiece
name = "skull codpiece"
desc = "A skull shaped ornament, intended to protect the important things in life."
icon_state = "skull"
above_suit = TRUE
- armor = list("melee" = 5, "bullet" = 5, "laser" = 0, "energy" = 0, "bomb" = 10, "bio" = 20, "rad" = 5, "fire" = 0, "acid" = 25)
+ armor = list(MELEE = 5, BULLET = 5, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 20, RAD = 5, FIRE = 0, ACID = 25)
/obj/item/clothing/accessory/skullcodpiece/fake
name = "false codpiece"
desc = "A plastic ornament, intended to protect the important things in life. It's not very good at it."
icon_state = "skull"
above_suit = TRUE
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0)
/////////////////////
//Syndie Accessories//
@@ -523,21 +523,21 @@
name = "protective padding"
desc = "A soft padding meant to cushion the wearer from melee harm."
icon_state = "padding"
- armor = list("melee" = 20, "bullet" = 10, "laser" = 0, "energy" = 0, "bomb" = 5, "bio" = 0, "rad" = 0, "fire" = -20, "acid" = 45)
+ armor = list(MELEE = 20, BULLET = 10, LASER = 0, ENERGY = 0, BOMB = 5, BIO = 0, RAD = 0, FIRE = -20, ACID = 45)
flags_inv = HIDEACCESSORY //hidden from indiscrete mob examines.
/obj/item/clothing/accessory/kevlar
name = "kevlar padding"
desc = "A layered kevlar padding meant to cushion the wearer from ballistic harm."
icon_state = "padding"
- armor = list("melee" = 10, "bullet" = 20, "laser" = 0, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 25)
+ armor = list(MELEE = 10, BULLET = 20, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 0, RAD = 0, FIRE = 0, ACID = 25)
flags_inv = HIDEACCESSORY
/obj/item/clothing/accessory/plastics
name = "ablative padding"
desc = "A thin ultra-refractory composite padding meant to cushion the wearer from energy lasers harm."
icon_state = "plastics"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 20, "energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = -40)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 20, ENERGY = 10, BOMB = 0, BIO = 0, RAD = 0, FIRE = 20, ACID = -40)
flags_inv = HIDEACCESSORY
//necklace
diff --git a/code/modules/clothing/under/cluwne.dm b/code/modules/clothing/under/cluwne.dm
index e1af4b5171..572a2017e6 100644
--- a/code/modules/clothing/under/cluwne.dm
+++ b/code/modules/clothing/under/cluwne.dm
@@ -8,7 +8,7 @@
can_adjust = 0
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON
-/obj/item/clothing/under/cluwne/Initialize()
+/obj/item/clothing/under/cluwne/Initialize(mapload)
.=..()
ADD_TRAIT(src, TRAIT_NODROP, CLOTHING_TRAIT)
ADD_TRAIT(src, CURSED_ITEM_TRAIT, CLOTHING_TRAIT)
diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm
index 06d2771d88..215be905aa 100644
--- a/code/modules/clothing/under/color.dm
+++ b/code/modules/clothing/under/color.dm
@@ -11,7 +11,7 @@
/obj/item/clothing/under/color/random
icon_state = "random_jumpsuit"
-/obj/item/clothing/under/color/random/Initialize()
+/obj/item/clothing/under/color/random/Initialize(mapload)
..()
var/obj/item/clothing/under/color/C = pick(subtypesof(/obj/item/clothing/under/color) - subtypesof(/obj/item/clothing/under/color/jumpskirt) - /obj/item/clothing/under/color/random - /obj/item/clothing/under/color/grey/glorf - /obj/item/clothing/under/color/black/ghost)
@@ -25,7 +25,7 @@
/obj/item/clothing/under/color/jumpskirt/random
icon_state = "random_jumpsuit" //Skirt variant needed
-/obj/item/clothing/under/color/jumpskirt/random/Initialize()
+/obj/item/clothing/under/color/jumpskirt/random/Initialize(mapload)
..()
var/obj/item/clothing/under/color/jumpskirt/C = pick(subtypesof(/obj/item/clothing/under/color/jumpskirt) - /obj/item/clothing/under/color/jumpskirt/random)
if(ishuman(loc))
@@ -54,11 +54,11 @@
/obj/item/clothing/under/color/black/ghost
item_flags = DROPDEL
-/obj/item/clothing/under/color/black/ghost/Initialize()
+/obj/item/clothing/under/color/black/ghost/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CULT_TRAIT)
-/obj/item/clothing/under/color/black/ghost/Initialize()
+/obj/item/clothing/under/color/black/ghost/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, DROPDEL)
/obj/item/clothing/under/color/grey
diff --git a/code/modules/clothing/under/costume.dm b/code/modules/clothing/under/costume.dm
index 9ebc79bd41..50da2d79c8 100644
--- a/code/modules/clothing/under/costume.dm
+++ b/code/modules/clothing/under/costume.dm
@@ -85,7 +85,7 @@
/obj/item/clothing/under/costume/kilt/highlander
desc = "You're the only one worthy of this kilt."
-/obj/item/clothing/under/costume/kilt/highlander/Initialize()
+/obj/item/clothing/under/costume/kilt/highlander/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, HIGHLANDER)
@@ -125,7 +125,7 @@
can_adjust = FALSE
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON
-/obj/item/clothing/under/costume/maid/Initialize()
+/obj/item/clothing/under/costume/maid/Initialize(mapload)
. = ..()
var/obj/item/clothing/accessory/maidapron/A = new (src)
attach_accessory(A)
@@ -282,7 +282,7 @@
can_adjust = FALSE
fitted = FEMALE_UNIFORM_TOP
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON
-
+
/obj/item/clothing/under/costume/qipao/white
name = "White Qipao"
diff --git a/code/modules/clothing/under/jobs/Plasmaman/civilian_service.dm b/code/modules/clothing/under/jobs/Plasmaman/civilian_service.dm
index 885e659bb2..82924b850d 100644
--- a/code/modules/clothing/under/jobs/Plasmaman/civilian_service.dm
+++ b/code/modules/clothing/under/jobs/Plasmaman/civilian_service.dm
@@ -57,7 +57,7 @@
desc = "An expensive piece of plasmaman envirosuit fashion. guaranteed to keep you cool while the station goes down in fierceful fires."
icon_state = "captain_envirosuit"
item_state = "captain_envirosuit"
- armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 0, "fire" = 95, "acid" = 95, "wound" = 15)
+ armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 0, FIRE = 95, ACID = 95, WOUND = 15)
sensor_mode = SENSOR_COORDS
sensor_flags = NONE
diff --git a/code/modules/clothing/under/jobs/Plasmaman/engineering.dm b/code/modules/clothing/under/jobs/Plasmaman/engineering.dm
index 4850a605e7..68d1ab30e1 100644
--- a/code/modules/clothing/under/jobs/Plasmaman/engineering.dm
+++ b/code/modules/clothing/under/jobs/Plasmaman/engineering.dm
@@ -3,7 +3,7 @@
desc = "An air-tight suit designed to be used by plasmamen exployed as engineers, the usual purple stripes being replaced by engineer's orange. It protects the user from fire and acid damage."
icon_state = "engineer_envirosuit"
item_state = "engineer_envirosuit"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 10, "fire" = 95, "acid" = 95, "wound" = 5)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 10, FIRE = 95, ACID = 95, WOUND = 5)
/obj/item/clothing/under/plasmaman/engineering/ce
name = "chief engineer's plasma envirosuit"
diff --git a/code/modules/clothing/under/jobs/Plasmaman/medsci.dm b/code/modules/clothing/under/jobs/Plasmaman/medsci.dm
index 52f817dcce..e77021646a 100644
--- a/code/modules/clothing/under/jobs/Plasmaman/medsci.dm
+++ b/code/modules/clothing/under/jobs/Plasmaman/medsci.dm
@@ -21,7 +21,7 @@
desc = "A plasmaman envirosuit designed for the research director to aid them in their job of directing research into the right direction."
icon_state = "rd_envirosuit"
item_state = "rd_envirosuit"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 10, "bio" = 100, "rad" = 0, "fire" = 95, "acid" = 95, "wound" = 5)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 100, RAD = 0, FIRE = 95, ACID = 95, WOUND = 5)
/obj/item/clothing/under/plasmaman/robotics
name = "robotics plasma envirosuit"
diff --git a/code/modules/clothing/under/jobs/Plasmaman/security.dm b/code/modules/clothing/under/jobs/Plasmaman/security.dm
index 262b336011..01a1effa14 100644
--- a/code/modules/clothing/under/jobs/Plasmaman/security.dm
+++ b/code/modules/clothing/under/jobs/Plasmaman/security.dm
@@ -3,7 +3,7 @@
desc = "A plasmaman containment suit designed for security officers, offering a limited amount of extra protection."
icon_state = "security_envirosuit"
item_state = "security_envirosuit"
- armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 0, "fire" = 95, "acid" = 95, "wound" = 10)
+ armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 0, FIRE = 95, ACID = 95, WOUND = 10)
sensor_mode = SENSOR_COORDS
sensor_flags = NONE
diff --git a/code/modules/clothing/under/jobs/cargo.dm b/code/modules/clothing/under/jobs/cargo.dm
index 832589a6b7..9f7a7fdd7f 100644
--- a/code/modules/clothing/under/jobs/cargo.dm
+++ b/code/modules/clothing/under/jobs/cargo.dm
@@ -51,7 +51,7 @@
/obj/item/clothing/under/rank/cargo/miner
name = "shaft miner's jumpsuit"
desc = "It's a snappy jumpsuit with a sturdy set of overalls. It is very dirty."
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 0, "wound" = 10)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 0, WOUND = 10)
icon_state = "miner"
item_state = "miner"
diff --git a/code/modules/clothing/under/jobs/civilian/civilian.dm b/code/modules/clothing/under/jobs/civilian/civilian.dm
index 2eabb0ce35..13f9a1fa75 100644
--- a/code/modules/clothing/under/jobs/civilian/civilian.dm
+++ b/code/modules/clothing/under/jobs/civilian/civilian.dm
@@ -178,7 +178,7 @@
desc = "It's the official uniform of the station's janitor. It has minor protection from biohazards."
name = "janitor's jumpsuit"
icon_state = "janitor"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0, "wound" = 5)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 0, ACID = 0, WOUND = 5)
/obj/item/clothing/under/rank/civilian/janitor/skirt
name = "janitor's jumpskirt"
diff --git a/code/modules/clothing/under/jobs/civilian/clown_mime.dm b/code/modules/clothing/under/jobs/civilian/clown_mime.dm
index 25c40ee5d8..cf4d7672ce 100644
--- a/code/modules/clothing/under/jobs/civilian/clown_mime.dm
+++ b/code/modules/clothing/under/jobs/civilian/clown_mime.dm
@@ -118,6 +118,6 @@
can_adjust = FALSE
mutantrace_variation = STYLE_DIGITIGRADE|USE_TAUR_CLIP_MASK
-/obj/item/clothing/under/rank/civilian/clown/Initialize()
+/obj/item/clothing/under/rank/civilian/clown/Initialize(mapload)
. = ..()
AddComponent(/datum/component/squeak, list('sound/items/bikehorn.ogg'=1), 50)
diff --git a/code/modules/clothing/under/jobs/command.dm b/code/modules/clothing/under/jobs/command.dm
index 6f2becbe63..2c70d8bcc8 100644
--- a/code/modules/clothing/under/jobs/command.dm
+++ b/code/modules/clothing/under/jobs/command.dm
@@ -3,7 +3,7 @@
name = "captain's jumpsuit"
icon_state = "captain"
item_state = "b_suit"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0, "wound" = 15)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, WOUND = 15)
sensor_mode = SENSOR_COORDS
sensor_flags = NONE
diff --git a/code/modules/clothing/under/jobs/engineering.dm b/code/modules/clothing/under/jobs/engineering.dm
index 98dee44cb2..44bb8ca1dd 100644
--- a/code/modules/clothing/under/jobs/engineering.dm
+++ b/code/modules/clothing/under/jobs/engineering.dm
@@ -4,7 +4,7 @@
name = "chief engineer's jumpsuit"
icon_state = "chiefengineer"
item_state = "gy_suit"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 10, "fire" = 80, "acid" = 40, "wound" = 5)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 10, FIRE = 80, ACID = 40, WOUND = 5)
resistance_flags = NONE
/obj/item/clothing/under/rank/engineering/chief_engineer/skirt
@@ -39,7 +39,7 @@
name = "engineer's jumpsuit"
icon_state = "engine"
item_state = "engi_suit"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 10, "fire" = 60, "acid" = 20, "wound" = 5)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 10, FIRE = 60, ACID = 20, WOUND = 5)
resistance_flags = NONE
/obj/item/clothing/under/rank/engineering/engineer/mechanic
diff --git a/code/modules/clothing/under/jobs/medical.dm b/code/modules/clothing/under/jobs/medical.dm
index 20fd34f4a0..48f3be3597 100644
--- a/code/modules/clothing/under/jobs/medical.dm
+++ b/code/modules/clothing/under/jobs/medical.dm
@@ -4,7 +4,7 @@
icon_state = "cmo"
item_state = "w_suit"
permeability_coefficient = 0.5
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0, "wound" = 5)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 0, ACID = 0, WOUND = 5)
/obj/item/clothing/under/rank/medical/chief_medical_officer/skirt
name = "chief medical officer's jumpskirt"
@@ -30,7 +30,7 @@
icon_state = "genetics"
item_state = "w_suit"
permeability_coefficient = 0.5
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0, "wound" = 5)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 0, ACID = 0, WOUND = 5)
/obj/item/clothing/under/rank/medical/geneticist/skirt
name = "geneticist's jumpskirt"
@@ -48,7 +48,7 @@
icon_state = "virology"
item_state = "w_suit"
permeability_coefficient = 0.5
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0, "wound" = 5)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 0, ACID = 0, WOUND = 5)
/obj/item/clothing/under/rank/medical/virologist/skirt
name = "virologist's jumpskirt"
@@ -66,7 +66,7 @@
icon_state = "chemistry"
item_state = "w_suit"
permeability_coefficient = 0.5
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 50, "acid" = 65, "wound" = 5)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 50, ACID = 65, WOUND = 5)
/obj/item/clothing/under/rank/medical/chemist/skirt
name = "chemist's jumpskirt"
@@ -84,7 +84,7 @@
icon_state = "paramedic-dark"
item_state = "w_suit"
permeability_coefficient = 0.5
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0, "wound" = 5)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 0, ACID = 0, WOUND = 5)
/obj/item/clothing/under/rank/medical/paramedic/red
name = "red paramedic jumpsuit"
@@ -116,7 +116,7 @@
icon_state = "nursesuit"
item_state = "w_suit"
permeability_coefficient = 0.5
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0, "wound" = 5)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 0, ACID = 0, WOUND = 5)
body_parts_covered = CHEST|GROIN|ARMS
fitted = NO_FEMALE_UNIFORM
can_adjust = FALSE
@@ -128,7 +128,7 @@
icon_state = "medical"
item_state = "w_suit"
permeability_coefficient = 0.5
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0, "wound" = 5)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 0, ACID = 0, WOUND = 5)
/obj/item/clothing/under/rank/medical/doctor/util
name = "medical utility uniform"
diff --git a/code/modules/clothing/under/jobs/rnd.dm b/code/modules/clothing/under/jobs/rnd.dm
index d63e81a0a3..e8265aa4e9 100644
--- a/code/modules/clothing/under/jobs/rnd.dm
+++ b/code/modules/clothing/under/jobs/rnd.dm
@@ -3,7 +3,7 @@
name = "research director's vest suit"
icon_state = "director"
item_state = "lb_suit"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 10, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 35, "wound" = 5)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 10, BIO = 10, RAD = 0, FIRE = 0, ACID = 35, WOUND = 5)
can_adjust = FALSE
/obj/item/clothing/under/rank/rnd/research_director/skirt
@@ -20,7 +20,7 @@
name = "research director's tan suit"
icon_state = "rdwhimsy"
item_state = "rdwhimsy"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 10, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0, "wound" = 5)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 10, RAD = 0, FIRE = 0, ACID = 0, WOUND = 5)
can_adjust = TRUE
alt_covers_chest = TRUE
@@ -39,7 +39,7 @@
name = "research director's turtleneck"
icon_state = "rdturtle"
item_state = "p_suit"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 10, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0, "wound" = 5)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 10, RAD = 0, FIRE = 0, ACID = 0, WOUND = 5)
can_adjust = TRUE
alt_covers_chest = TRUE
@@ -59,7 +59,7 @@
icon_state = "toxins"
item_state = "w_suit"
permeability_coefficient = 0.5
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0, "wound" = 5)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 10, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, WOUND = 5)
/obj/item/clothing/under/rank/rnd/scientist/util
name = "science utility uniform"
diff --git a/code/modules/clothing/under/jobs/security.dm b/code/modules/clothing/under/jobs/security.dm
index c0d08204f0..5a2ece4dda 100644
--- a/code/modules/clothing/under/jobs/security.dm
+++ b/code/modules/clothing/under/jobs/security.dm
@@ -19,7 +19,7 @@
desc = "A tactical security jumpsuit for officers complete with Nanotrasen belt buckle."
icon_state = "rsecurity"
item_state = "r_suit"
- armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 30, "wound" = 10)
+ armor = list(MELEE = 10, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 30, ACID = 30, WOUND = 10)
/obj/item/clothing/under/rank/security/officer/util
name = "security utility uniform"
@@ -96,7 +96,7 @@
desc = "A formal security suit for officers complete with Nanotrasen belt buckle."
icon_state = "rwarden"
item_state = "r_suit"
- armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 30, "wound" = 10)
+ armor = list(MELEE = 10, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 30, ACID = 30, WOUND = 10)
/obj/item/clothing/under/rank/security/warden/grey
name = "grey security suit"
@@ -130,7 +130,7 @@
desc = "Someone who wears this means business."
icon_state = "detective"
item_state = "det"
- armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 30, "wound" = 10)
+ armor = list(MELEE = 10, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 30, ACID = 30, WOUND = 10)
/obj/item/clothing/under/rank/security/detective/brown
name = "dark boiled suit"
@@ -177,7 +177,7 @@
desc = "A security jumpsuit decorated for those few with the dedication to achieve the position of Head of Security."
icon_state = "rhos"
item_state = "r_suit"
- armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50, "wound" = 10)
+ armor = list(MELEE = 10, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, WOUND = 10)
strip_delay = 60
/obj/item/clothing/under/rank/security/head_of_security/skirt
diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm
index 4dac5f1961..2071dd6930 100644
--- a/code/modules/clothing/under/miscellaneous.dm
+++ b/code/modules/clothing/under/miscellaneous.dm
@@ -65,7 +65,7 @@
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.01
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
- armor = list("melee" = 100, "bullet" = 100, "laser" = 100,"energy" = 100, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100, "wound" = 1000) //wound defense at 100 wont stop wounds
+ armor = list(MELEE = 100, BULLET = 100, LASER = 100,ENERGY = 100, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, WOUND = 1000) //wound defense at 100 wont stop wounds
cold_protection = CHEST | GROIN | LEGS | FEET | ARMS | HANDS
min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
@@ -116,7 +116,7 @@
desc = "A special containment suit that allows plasma-based lifeforms to exist safely in an oxygenated environment, and automatically extinguishes them in a crisis. Despite being airtight, it's not spaceworthy."
icon_state = "plasmaman"
item_state = "plasmaman"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 0, "fire" = 95, "acid" = 95)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 0, FIRE = 95, ACID = 95)
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
mutantrace_variation = USE_TAUR_CLIP_MASK
can_adjust = FALSE
@@ -186,7 +186,7 @@
icon_state = "durathread"
item_state = "durathread"
can_adjust = TRUE
- armor = list("melee" = 10, "laser" = 10, "fire" = 40, "acid" = 10, "bomb" = 5)
+ armor = list(MELEE = 10, LASER = 10, FIRE = 40, ACID = 10, BOMB = 5)
/obj/item/clothing/under/misc/durathread/skirt
name = "durathread jumpskirt"
diff --git a/code/modules/clothing/under/syndicate.dm b/code/modules/clothing/under/syndicate.dm
index 58d5d26e86..a2bd8256d7 100644
--- a/code/modules/clothing/under/syndicate.dm
+++ b/code/modules/clothing/under/syndicate.dm
@@ -4,7 +4,7 @@
icon_state = "syndicate"
item_state = "bl_suit"
has_sensor = NO_SENSORS
- armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40, "wound" = 5)
+ armor = list(MELEE = 10, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 40, WOUND = 5)
alt_covers_chest = TRUE
/obj/item/clothing/under/syndicate/skirt
@@ -13,7 +13,7 @@
icon_state = "syndicate_skirt"
item_state = "bl_suit"
has_sensor = NO_SENSORS
- armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40, "wound" = 5)
+ armor = list(MELEE = 10, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 40, WOUND = 5)
alt_covers_chest = TRUE
fitted = FEMALE_UNIFORM_TOP
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON
@@ -24,7 +24,7 @@
icon_state = "bloodred_pajamas"
item_state = "bl_suit"
dummy_thick = TRUE
- armor = list("melee" = 10, "bullet" = 10, "laser" = 10,"energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 10, "fire" = 50, "acid" = 40, "wound" = 10)
+ armor = list(MELEE = 10, BULLET = 10, LASER = 10,ENERGY = 10, BOMB = 0, BIO = 0, RAD = 10, FIRE = 50, ACID = 40, WOUND = 10)
resistance_flags = FIRE_PROOF | ACID_PROOF
can_adjust = FALSE
@@ -33,21 +33,21 @@
desc = "Do operatives dream of nuclear sheep?"
icon_state = "bloodred_pajamas"
item_state = "bl_suit"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40, "wound" = 5)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 40, WOUND = 5)
/obj/item/clothing/under/syndicate/tacticool
name = "tacticool turtleneck"
desc = "Just looking at it makes you want to buy an SKS, go into the woods, and -operate-."
icon_state = "tactifool"
item_state = "bl_suit"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40, "wound" = 5)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 40, WOUND = 5)
/obj/item/clothing/under/syndicate/tacticool/skirt
name = "tacticool skirtleneck"
desc = "Just looking at it makes you want to buy an SKS, go into the woods, and -operate-."
icon_state = "tactifool_skirt"
item_state = "bl_suit"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40, "wound" = 5)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 40, WOUND = 5)
fitted = FEMALE_UNIFORM_TOP
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON
@@ -57,7 +57,7 @@
icon_state = "tactifool"
item_state = "bl_suit"
has_sensor = HAS_SENSORS
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0, "wound" = 5)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, WOUND = 5)
/obj/item/clothing/under/syndicate/cosmetic/skirt
name = "tactitool skirtleneck"
@@ -81,14 +81,14 @@
can_adjust = FALSE
/obj/item/clothing/under/syndicate/camo/cosmetic
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0)
/obj/item/clothing/under/syndicate/soviet
name = "Ratnik 5 tracksuit"
desc = "Badly translated labels tell you to clean this in Vodka. Great for squatting in."
icon_state = "trackpants"
can_adjust = FALSE
- armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0, "wound" = 5)
+ armor = list(MELEE = 10, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, WOUND = 5)
resistance_flags = NONE
/obj/item/clothing/under/syndicate/combat
@@ -103,7 +103,7 @@
desc = "Military grade tracksuits for frontline squatting."
icon_state = "rus_under"
can_adjust = FALSE
- armor = list("melee" = 5, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0, "wound" = 5)
+ armor = list(MELEE = 5, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, WOUND = 5)
resistance_flags = NONE
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON
@@ -113,7 +113,7 @@
icon_state = "syndicatebaseball"
item_state = "syndicatebaseball"
has_sensor = NO_SENSORS
- armor = list("melee" = 15, "bullet" = 5, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40, "wound" = 10)
+ armor = list(MELEE = 15, BULLET = 5, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 40, WOUND = 10)
alt_covers_chest = TRUE
mutantrace_variation = USE_TAUR_CLIP_MASK
diff --git a/code/modules/clothing/under/trek.dm b/code/modules/clothing/under/trek.dm
index 89e42d2566..d86e32b1f6 100644
--- a/code/modules/clothing/under/trek.dm
+++ b/code/modules/clothing/under/trek.dm
@@ -108,7 +108,7 @@
/obj/item/clothing/under/trek/sec/orv
desc = "An uniform worn by security officers since 2420s."
- armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 30, "wound" = 10)
+ armor = list(MELEE = 10, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 30, ACID = 30, WOUND = 10)
icon_state = "orv_sec"
/obj/item/clothing/under/trek/medsci/orv
@@ -129,7 +129,7 @@
/obj/item/clothing/under/trek/command/orv/sec
name = "security command uniform"
- armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50, "wound" = 10)
+ armor = list(MELEE = 10, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, WOUND = 10)
desc = "An uniform worn by Heads of Security since 2550s."
icon_state = "orv_com_sec"
diff --git a/code/modules/events/holiday/xmas.dm b/code/modules/events/holiday/xmas.dm
index 919a1d2949..e043caa29d 100644
--- a/code/modules/events/holiday/xmas.dm
+++ b/code/modules/events/holiday/xmas.dm
@@ -37,7 +37,7 @@
icon_state = "xmashat"
desc = "A crappy paper hat that you are REQUIRED to wear."
flags_inv = 0
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0)
/obj/effect/landmark/xmastree
name = "christmas tree spawner"
diff --git a/code/modules/events/pirates.dm b/code/modules/events/pirates.dm
index 31859b4fc0..47a466bf0a 100644
--- a/code/modules/events/pirates.dm
+++ b/code/modules/events/pirates.dm
@@ -275,7 +275,7 @@
var/sending_timer
var/cargo_hold_id
-/obj/machinery/computer/piratepad_control/Initialize()
+/obj/machinery/computer/piratepad_control/Initialize(mapload)
..()
return INITIALIZE_HINT_LATELOAD
diff --git a/code/modules/events/shuttle_loan.dm b/code/modules/events/shuttle_loan.dm
index 347162d9c5..38d52797d7 100644
--- a/code/modules/events/shuttle_loan.dm
+++ b/code/modules/events/shuttle_loan.dm
@@ -271,7 +271,7 @@
name = "Objectives of a Bee Liberation Front Operative"
info = "Objective #1. Liberate all bees on the NT transport vessel 2416/B. Success! Objective #2. Escape alive. Failed."
-/obj/machinery/syndicatebomb/shuttle_loan/Initialize()
+/obj/machinery/syndicatebomb/shuttle_loan/Initialize(mapload)
. = ..()
setAnchored(TRUE)
timer_set = rand(480, 600) //once the supply shuttle docks (after 5 minutes travel time), players have between 3-5 minutes to defuse the bomb
diff --git a/code/modules/events/spacevine.dm b/code/modules/events/spacevine.dm
index ed6a087cd9..a96e74f1e4 100644
--- a/code/modules/events/spacevine.dm
+++ b/code/modules/events/spacevine.dm
@@ -276,7 +276,7 @@
var/datum/spacevine_controller/master = null
var/list/mutations = list()
-/obj/structure/spacevine/Initialize()
+/obj/structure/spacevine/Initialize(mapload)
. = ..()
add_atom_colour("#ffffff", FIXED_COLOUR_PRIORITY)
@@ -327,7 +327,7 @@
user.DelayNextAction()
for(var/datum/spacevine_mutation/SM in mutations)
damage_dealt = SM.on_hit(src, user, I, damage_dealt) //on_hit now takes override damage as arg and returns new value for other mutations to permutate further
- take_damage(damage_dealt, I.damtype, "melee", 1)
+ take_damage(damage_dealt, I.damtype, MELEE, 1)
/obj/structure/spacevine/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
switch(damage_type)
@@ -523,7 +523,7 @@
if(!override)
qdel(src)
-/obj/structure/spacevine/CanPass(atom/movable/mover, turf/target)
+/obj/structure/spacevine/CanAllowThrough(atom/movable/mover, turf/target)
. = ..()
if(isvineimmune(mover))
return TRUE
diff --git a/code/modules/events/travelling_trader.dm b/code/modules/events/travelling_trader.dm
index f7cbba2e4a..03aabc940b 100644
--- a/code/modules/events/travelling_trader.dm
+++ b/code/modules/events/travelling_trader.dm
@@ -98,7 +98,7 @@
var/reward = pickweight(possible_rewards)
new reward(get_turf(src))
-/mob/living/carbon/human/dummy/travelling_trader/Initialize()
+/mob/living/carbon/human/dummy/travelling_trader/Initialize(mapload)
. = ..() // return a hint you fuck
add_atom_colour("#570d6b", FIXED_COLOUR_PRIORITY) //make them purple (otherworldly!)
set_light(1, -0.7, "#AAD84B")
@@ -134,7 +134,7 @@
/obj/item/kitchen/fork/throwing = 1,
/mob/living/simple_animal/cow/random = 1)
-/mob/living/carbon/human/dummy/travelling_trader/cook/Initialize()
+/mob/living/carbon/human/dummy/travelling_trader/cook/Initialize(mapload)
//pick a random crafted food item as the requested item
var/datum/crafting_recipe/food_recipe = pick(subtypesof(/datum/crafting_recipe/food))
var/result = initial(food_recipe.result)
@@ -158,7 +158,7 @@
/obj/item/seeds/gatfruit = 1) //overall you have less chance of seeing them than a lifebringer just bringing the seeds to you directly
-/mob/living/carbon/human/dummy/travelling_trader/gardener/Initialize()
+/mob/living/carbon/human/dummy/travelling_trader/gardener/Initialize(mapload)
requested_item = pick(subtypesof(/obj/item/reagent_containers/food/snacks/grown) - list(/obj/item/reagent_containers/food/snacks/grown/shell,
/obj/item/reagent_containers/food/snacks/grown/shell/gatfruit,
/obj/item/reagent_containers/food/snacks/grown/cherry_bomb))
@@ -188,7 +188,7 @@
/mob/living/simple_animal/hostile/netherworld/blankbody = 1,
/mob/living/simple_animal/hostile/retaliate/goose = 1)
-/mob/living/carbon/human/dummy/travelling_trader/animal_hunter/Initialize()
+/mob/living/carbon/human/dummy/travelling_trader/animal_hunter/Initialize(mapload)
. = ..()
acceptance_speech = pick(list("This lifeform shall make for a great stew, thank you.", "This lifeform shall be of a true use to our cause, thank you.", "The lifeform is adequate. Goodbye.", "This lifeform shall make a great addition to my collection."))
@@ -222,7 +222,7 @@
/obj/structure/reagent_dispensers/keg/narsour = 3,
/obj/structure/reagent_dispensers/keg/quintuple_sec = 3)
-/mob/living/carbon/human/dummy/travelling_trader/bartender/Initialize() //pick a subtype of ethanol that isn't found in the default set of the booze dispensers reagents
+/mob/living/carbon/human/dummy/travelling_trader/bartender/Initialize(mapload) //pick a subtype of ethanol that isn't found in the default set of the booze dispensers reagents
. = ..() // RETURN A HINT.
requested_item = pick(subtypesof(/datum/reagent/consumable/ethanol) - list(/datum/reagent/consumable/ethanol/beer,
/datum/reagent/consumable/ethanol/kahlua,
@@ -276,7 +276,7 @@
/obj/item/stack/sticky_tape/infinite = 2,
/obj/item/clothing/suit/hooded/wintercoat/cosmic = 2)
-/mob/living/carbon/human/dummy/travelling_trader/artifact_dealer/Initialize()
+/mob/living/carbon/human/dummy/travelling_trader/artifact_dealer/Initialize(mapload)
possible_rewards += list(pick(subtypesof(/obj/item/clothing/head/collectable)) = 1) //this is slightly lower because it's absolutely useless
..()
diff --git a/code/modules/events/wizard/magicarp.dm b/code/modules/events/wizard/magicarp.dm
index 57e2a2a051..052143722e 100644
--- a/code/modules/events/wizard/magicarp.dm
+++ b/code/modules/events/wizard/magicarp.dm
@@ -41,7 +41,7 @@
/obj/item/projectile/magic/death, /obj/item/projectile/magic/teleport, /obj/item/projectile/magic/door, /obj/item/projectile/magic/aoe/fireball,
/obj/item/projectile/magic/spellblade, /obj/item/projectile/magic/arcane_barrage)
-/mob/living/simple_animal/hostile/carp/ranged/Initialize()
+/mob/living/simple_animal/hostile/carp/ranged/Initialize(mapload)
projectiletype = pick(allowed_projectile_types)
. = ..()
diff --git a/code/modules/fields/fields.dm b/code/modules/fields/fields.dm
index 8c7b414996..0bdabf5e8e 100644
--- a/code/modules/fields/fields.dm
+++ b/code/modules/fields/fields.dm
@@ -289,7 +289,7 @@
var/datum/proximity_monitor/advanced/current = null
var/mob/listeningTo
-/obj/item/multitool/field_debug/Initialize()
+/obj/item/multitool/field_debug/Initialize(mapload)
. = ..()
START_PROCESSING(SSobj, src)
diff --git a/code/modules/fields/timestop.dm b/code/modules/fields/timestop.dm
index a96a44a789..db42ad6798 100644
--- a/code/modules/fields/timestop.dm
+++ b/code/modules/fields/timestop.dm
@@ -84,7 +84,7 @@
freeze_mob(A)
else if(istype(A, /obj/item/projectile))
freeze_projectile(A)
- else if(istype(A, /obj/mecha))
+ else if(istype(A, /obj/vehicle/sealed/mecha))
freeze_mecha(A)
else if((ismachinery(A) && !istype(A, /obj/machinery/light)) || isstructure(A)) //Special exception for light fixtures since recoloring causes them to change light
freeze_structure(A)
@@ -120,7 +120,7 @@
unfreeze_mob(A)
else if(istype(A, /obj/item/projectile))
unfreeze_projectile(A)
- else if(istype(A, /obj/mecha))
+ else if(istype(A, /obj/vehicle/sealed/mecha))
unfreeze_mecha(A)
UnregisterSignal(A, COMSIG_MOVABLE_PRE_MOVE)
@@ -131,10 +131,10 @@
global_frozen_atoms -= A
-/datum/proximity_monitor/advanced/timestop/proc/freeze_mecha(obj/mecha/M)
+/datum/proximity_monitor/advanced/timestop/proc/freeze_mecha(obj/vehicle/sealed/mecha/M)
M.completely_disabled = TRUE
-/datum/proximity_monitor/advanced/timestop/proc/unfreeze_mecha(obj/mecha/M)
+/datum/proximity_monitor/advanced/timestop/proc/unfreeze_mecha(obj/vehicle/sealed/mecha/M)
M.completely_disabled = FALSE
diff --git a/code/modules/fields/turf_objects.dm b/code/modules/fields/turf_objects.dm
index 1af924294a..f8d139a45d 100644
--- a/code/modules/fields/turf_objects.dm
+++ b/code/modules/fields/turf_objects.dm
@@ -23,7 +23,7 @@
name = "energy field"
desc = "Get off my turf!"
-/obj/effect/abstract/proximity_checker/advanced/field_turf/CanPass(atom/movable/AM, turf/target)
+/obj/effect/abstract/proximity_checker/advanced/field_turf/CanAllowThrough(atom/movable/AM, turf/target)
. = ..()
if(parent)
return parent.field_turf_canpass(AM, src, target)
@@ -48,7 +48,7 @@
name = "energy field edge"
desc = "Edgy description here."
-/obj/effect/abstract/proximity_checker/advanced/field_edge/CanPass(atom/movable/AM, turf/target)
+/obj/effect/abstract/proximity_checker/advanced/field_edge/CanAllowThrough(atom/movable/AM, turf/target)
. = ..()
if(parent)
return parent.field_edge_canpass(AM, src, target)
diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm
index 22f81cccad..5920c33df1 100644
--- a/code/modules/flufftext/Hallucination.dm
+++ b/code/modules/flufftext/Hallucination.dm
@@ -647,10 +647,10 @@ GLOBAL_LIST_INIT(hallucination_list, list(
target.playsound_local(get_turf(airlock), 'sound/machines/boltsup.ogg',30,0,3)
qdel(src)
-/obj/effect/hallucination/fake_door_lock/CanPass(atom/movable/mover, turf/_target)
+/obj/effect/hallucination/fake_door_lock/CanAllowThrough(atom/movable/mover, turf/_target)
+ . = ..()
if(mover == target && airlock.density)
return FALSE
- return TRUE
/datum/hallucination/chat
@@ -1122,7 +1122,7 @@ GLOBAL_LIST_INIT(hallucination_list, list(
/obj/effect/hallucination/danger/anomaly
name = "flux wave anomaly"
-/obj/effect/hallucination/danger/anomaly/Initialize()
+/obj/effect/hallucination/danger/anomaly/Initialize(mapload)
. = ..()
START_PROCESSING(SSobj, src)
diff --git a/code/modules/food_and_drinks/drinks/drinks.dm b/code/modules/food_and_drinks/drinks/drinks.dm
index 5d6b92c021..f4185ccf77 100644
--- a/code/modules/food_and_drinks/drinks/drinks.dm
+++ b/code/modules/food_and_drinks/drinks/drinks.dm
@@ -535,7 +535,7 @@
list_reagents = list(/datum/reagent/consumable/lemon_lime = 30)
foodtype = FRUIT
-/obj/item/reagent_containers/food/drinks/soda_cans/lemon_lime/Initialize()
+/obj/item/reagent_containers/food/drinks/soda_cans/lemon_lime/Initialize(mapload)
. = ..()
name = "lemon-lime soda"
diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm
index 1c151511af..3fd2d85cd1 100644
--- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm
+++ b/code/modules/food_and_drinks/drinks/drinks/bottle.dm
@@ -31,7 +31,7 @@
var/obj/item/bodypart/affecting = user.zone_selected //Find what the player is aiming at
var/headarmor = 0 // Target's head armor
- var/armor_block = min(90, target.run_armor_check(affecting, "melee", null, null,armour_penetration)) // For normal attack damage
+ var/armor_block = min(90, target.run_armor_check(affecting, MELEE, null, null,armour_penetration)) // For normal attack damage
//If they have a hat/helmet and the user is targeting their head.
if(affecting == BODY_ZONE_HEAD)
@@ -89,7 +89,7 @@
var/icon/broken_outline = icon('icons/obj/drinks.dmi', "broken")
sharpness = SHARP_EDGED
-/obj/item/broken_bottle/Initialize()
+/obj/item/broken_bottle/Initialize(mapload)
. = ..()
AddComponent(/datum/component/butchering, 200, 55)
@@ -243,7 +243,7 @@
/obj/item/reagent_containers/food/drinks/bottle/absinthe/empty
list_reagents = null
-/obj/item/reagent_containers/food/drinks/bottle/absinthe/Initialize()
+/obj/item/reagent_containers/food/drinks/bottle/absinthe/Initialize(mapload)
. = ..()
redact()
@@ -332,7 +332,7 @@
/obj/item/reagent_containers/food/drinks/bottle/sake/empty
list_reagents = null
-/obj/item/reagent_containers/food/drinks/bottle/sake/Initialize()
+/obj/item/reagent_containers/food/drinks/bottle/sake/Initialize(mapload)
. = ..()
if(prob(10))
name = "Fluffy Tail Sake"
@@ -509,7 +509,7 @@
..()
add_overlay("[initial(icon_state)]shine")
-/obj/item/reagent_containers/food/drinks/bottle/blank/Initialize()
+/obj/item/reagent_containers/food/drinks/bottle/blank/Initialize(mapload)
. = ..()
update_icon()
diff --git a/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm b/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm
index 9602c1d24e..4a4ee40f60 100644
--- a/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm
+++ b/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm
@@ -74,7 +74,7 @@
desc = "A shot glass - the universal symbol for bad decisions."
return
-/obj/item/reagent_containers/food/drinks/drinkingglass/filled/Initialize()
+/obj/item/reagent_containers/food/drinks/drinkingglass/filled/Initialize(mapload)
. = ..()
on_reagent_change(ADD_REAGENT)
diff --git a/code/modules/food_and_drinks/food/customizables.dm b/code/modules/food_and_drinks/food/customizables.dm
index 42f536c4f3..923d365f73 100644
--- a/code/modules/food_and_drinks/food/customizables.dm
+++ b/code/modules/food_and_drinks/food/customizables.dm
@@ -281,7 +281,7 @@
icon = 'icons/obj/food/soupsalad.dmi'
icon_state = "wishsoup"
-/obj/item/reagent_containers/food/snacks/customizable/soup/Initialize()
+/obj/item/reagent_containers/food/snacks/customizable/soup/Initialize(mapload)
. = ..()
eatverb = pick("slurp","sip","suck","inhale","drink")
diff --git a/code/modules/food_and_drinks/food/snacks_burgers.dm b/code/modules/food_and_drinks/food/snacks_burgers.dm
index f8c85700c9..344ff92717 100644
--- a/code/modules/food_and_drinks/food/snacks_burgers.dm
+++ b/code/modules/food_and_drinks/food/snacks_burgers.dm
@@ -13,7 +13,7 @@
bonus_reagents = list(/datum/reagent/consumable/nutriment/vitamin = 1)
foodtype = GRAIN | MEAT
-/obj/item/reagent_containers/food/snacks/burger/plain/Initialize()
+/obj/item/reagent_containers/food/snacks/burger/plain/Initialize(mapload)
. = ..()
if(prob(1))
new/obj/effect/particle_effect/smoke(get_turf(src))
@@ -146,7 +146,7 @@
verb_say = "moans"
verb_yell = "wails"
-/obj/item/reagent_containers/food/snacks/burger/ghost/Initialize()
+/obj/item/reagent_containers/food/snacks/burger/ghost/Initialize(mapload)
. = ..()
START_PROCESSING(SSobj, src)
@@ -379,7 +379,7 @@
bonus_reagents = list(/datum/reagent/consumable/nutriment = 1)
foodtype = GRAIN | MEAT | DAIRY
-/obj/item/reagent_containers/food/snacks/burger/cheese/Initialize()
+/obj/item/reagent_containers/food/snacks/burger/cheese/Initialize(mapload)
. = ..()
if(prob(33))
icon_state = "cheeseburgeralt"
diff --git a/code/modules/food_and_drinks/food/snacks_egg.dm b/code/modules/food_and_drinks/food/snacks_egg.dm
index 2143c6b8f2..489380777c 100644
--- a/code/modules/food_and_drinks/food/snacks_egg.dm
+++ b/code/modules/food_and_drinks/food/snacks_egg.dm
@@ -24,7 +24,7 @@
/obj/item/reagent_containers/food/snacks/egg/gland
desc = "An egg! It looks weird..."
-/obj/item/reagent_containers/food/snacks/egg/gland/Initialize()
+/obj/item/reagent_containers/food/snacks/egg/gland/Initialize(mapload)
. = ..()
reagents.add_reagent(get_random_reagent_id(), 15)
diff --git a/code/modules/food_and_drinks/food/snacks_meat.dm b/code/modules/food_and_drinks/food/snacks_meat.dm
index 402192e034..5bcb106822 100644
--- a/code/modules/food_and_drinks/food/snacks_meat.dm
+++ b/code/modules/food_and_drinks/food/snacks_meat.dm
@@ -26,7 +26,7 @@
tastes = list("fish" = 1)
foodtype = MEAT
-/obj/item/reagent_containers/food/snacks/carpmeat/Initialize()
+/obj/item/reagent_containers/food/snacks/carpmeat/Initialize(mapload)
. = ..()
eatverb = pick("bite","chew","choke down","gnaw","swallow","chomp")
@@ -63,7 +63,7 @@
filling_color = "#ee7676"
tastes = list("fish" = 1, "pan seared vegtables" = 1)
foodtype = MEAT | VEGETABLES | FRIED
-
+
/obj/item/reagent_containers/food/snacks/sushi_basic
name = "funa hosomaki"
desc = "A small cylindrical kudzu skin, filled with rice and fish."
@@ -172,7 +172,7 @@
foodtype = MEAT | BREAKFAST
var/roasted = FALSE
-/obj/item/reagent_containers/food/snacks/sausage/Initialize()
+/obj/item/reagent_containers/food/snacks/sausage/Initialize(mapload)
. = ..()
eatverb = pick("bite","chew","nibble","deep throat","gobble","chomp")
@@ -283,7 +283,7 @@
tastes = list("soy" = 1, "vegetables" = 1)
foodtype = VEGETABLES
-/obj/item/reagent_containers/food/snacks/stewedsoymeat/Initialize()
+/obj/item/reagent_containers/food/snacks/stewedsoymeat/Initialize(mapload)
. = ..()
eatverb = pick("slurp","sip","suck","inhale","drink")
@@ -328,7 +328,7 @@
tastes = list("\"chicken\"" = 1)
foodtype = MEAT
-/obj/item/reagent_containers/food/snacks/nugget/Initialize()
+/obj/item/reagent_containers/food/snacks/nugget/Initialize(mapload)
. = ..()
var/shape = pick("lump", "star", "lizard", "corgi")
desc = "A 'chicken' nugget vaguely shaped like a [shape]."
@@ -391,7 +391,7 @@
bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 1)
tastes = list("meat" = 3, "smokey sauce" = 1)
foodtype = MEAT
-
+
/obj/item/reagent_containers/food/snacks/goliathcalamari
name = "goliath calamari"
desc = "ACKCHYUALLY, this isn't calamari, guys!"
diff --git a/code/modules/food_and_drinks/food/snacks_other.dm b/code/modules/food_and_drinks/food/snacks_other.dm
index b771a90907..c26da941b2 100644
--- a/code/modules/food_and_drinks/food/snacks_other.dm
+++ b/code/modules/food_and_drinks/food/snacks_other.dm
@@ -79,7 +79,7 @@
tastes = list("popcorn" = 3, "butter" = 1)
foodtype = JUNKFOOD
-/obj/item/reagent_containers/food/snacks/popcorn/Initialize()
+/obj/item/reagent_containers/food/snacks/popcorn/Initialize(mapload)
. = ..()
eatverb = pick("bite","crunch","nibble","gnaw","gobble","chomp")
@@ -453,7 +453,7 @@
tastes = list("candy" = 1)
foodtype = JUNKFOOD | SUGAR | ANTITOXIC
-/obj/item/reagent_containers/food/snacks/lollipop/Initialize()
+/obj/item/reagent_containers/food/snacks/lollipop/Initialize(mapload)
. = ..()
head = mutable_appearance('icons/obj/lollipop.dmi', "lollipop_head")
change_head_color(rgb(rand(0, 255), rand(0, 255), rand(0, 255)))
@@ -472,7 +472,7 @@
/obj/item/reagent_containers/food/snacks/lollipop/cyborg
var/spamchecking = TRUE
-/obj/item/reagent_containers/food/snacks/lollipop/cyborg/Initialize()
+/obj/item/reagent_containers/food/snacks/lollipop/cyborg/Initialize(mapload)
. = ..()
addtimer(CALLBACK(src, .proc/spamcheck), 1200)
@@ -493,14 +493,14 @@
tastes = list("candy")
foodtype = JUNKFOOD
-/obj/item/reagent_containers/food/snacks/gumball/Initialize()
+/obj/item/reagent_containers/food/snacks/gumball/Initialize(mapload)
. = ..()
color = rgb(rand(0, 255), rand(0, 255), rand(0, 255))
/obj/item/reagent_containers/food/snacks/gumball/cyborg
var/spamchecking = TRUE
-/obj/item/reagent_containers/food/snacks/gumball/cyborg/Initialize()
+/obj/item/reagent_containers/food/snacks/gumball/cyborg/Initialize(mapload)
. = ..()
addtimer(CALLBACK(src, .proc/spamcheck), 1200)
diff --git a/code/modules/food_and_drinks/food/snacks_pastry.dm b/code/modules/food_and_drinks/food/snacks_pastry.dm
index 8c5631336e..831c5c6d16 100644
--- a/code/modules/food_and_drinks/food/snacks_pastry.dm
+++ b/code/modules/food_and_drinks/food/snacks_pastry.dm
@@ -19,7 +19,7 @@
var/extra_reagent = null
var/decorated_adjective = "sprinkled"
-/obj/item/reagent_containers/food/snacks/donut/Initialize()
+/obj/item/reagent_containers/food/snacks/donut/Initialize(mapload)
. = ..()
if(prob(30))
decorate_donut()
@@ -60,7 +60,7 @@
bitesize = 10
tastes = list("donut" = 3, "chaos" = 1)
-/obj/item/reagent_containers/food/snacks/donut/chaos/Initialize()
+/obj/item/reagent_containers/food/snacks/donut/chaos/Initialize(mapload)
. = ..()
extra_reagent = pick(/datum/reagent/consumable/nutriment, /datum/reagent/consumable/capsaicin, /datum/reagent/consumable/frostoil,
/datum/reagent/drug/krokodil, /datum/reagent/toxin/plasma, /datum/reagent/consumable/coco,
@@ -173,7 +173,7 @@
/obj/item/reagent_containers/food/snacks/donut/jelly/in_box_sprite()
return "[replacetext(icon_state, "jelly", "donut")]_inbox"
-/obj/item/reagent_containers/food/snacks/donut/jelly/Initialize()
+/obj/item/reagent_containers/food/snacks/donut/jelly/Initialize(mapload)
. = ..()
if(extra_reagent)
reagents.add_reagent(extra_reagent, 3)
@@ -569,7 +569,7 @@
tastes = list("mushroom" = 1, "biscuit" = 1)
foodtype = GRAIN | VEGETABLES
-/obj/item/reagent_containers/food/snacks/plumphelmetbiscuit/Initialize()
+/obj/item/reagent_containers/food/snacks/plumphelmetbiscuit/Initialize(mapload)
var/fey = prob(10)
if(fey)
name = "exceptional plump helmet biscuit"
@@ -736,7 +736,7 @@
list_reagents = list(/datum/reagent/consumable/nutriment = 6, /datum/reagent/consumable/nutriment/vitamin = 3)
tastes = list("pancakes" = 1, "chocolate" = 1)
-/obj/item/reagent_containers/food/snacks/pancakes/Initialize()
+/obj/item/reagent_containers/food/snacks/pancakes/Initialize(mapload)
. = ..()
update_icon()
diff --git a/code/modules/food_and_drinks/food/snacks_pie.dm b/code/modules/food_and_drinks/food/snacks_pie.dm
index 5329829637..c98c170df3 100644
--- a/code/modules/food_and_drinks/food/snacks_pie.dm
+++ b/code/modules/food_and_drinks/food/snacks_pie.dm
@@ -164,7 +164,7 @@
foodtype = GRAIN | VEGETABLES
-/obj/item/reagent_containers/food/snacks/pie/plump_pie/Initialize()
+/obj/item/reagent_containers/food/snacks/pie/plump_pie/Initialize(mapload)
. = ..()
var/fey = prob(10)
if(fey)
diff --git a/code/modules/food_and_drinks/food/snacks_pizza.dm b/code/modules/food_and_drinks/food/snacks_pizza.dm
index 75cf8ffb82..fc6cd1472f 100644
--- a/code/modules/food_and_drinks/food/snacks_pizza.dm
+++ b/code/modules/food_and_drinks/food/snacks_pizza.dm
@@ -35,7 +35,7 @@
tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1)
foodtype = GRAIN | VEGETABLES
-/obj/item/reagent_containers/food/snacks/pizza/margherita/robo/Initialize()
+/obj/item/reagent_containers/food/snacks/pizza/margherita/robo/Initialize(mapload)
bonus_reagents += list("nanomachines" = 70)
return ..()
@@ -187,7 +187,7 @@
slice_path = /obj/item/reagent_containers/food/snacks/pizzaslice/arnold
bonus_reagents = list(/datum/reagent/consumable/nutriment = 30, /datum/reagent/consumable/nutriment/vitamin = 6, /datum/reagent/iron = 10, /datum/reagent/medicine/omnizine = 30)
tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1, "pepperoni" = 2, "9 millimeter bullets" = 2)
-
+
/obj/item/reagent_containers/food/snacks/proc/try_break_off(mob/living/M, mob/living/user) //maybe i give you a pizza maybe i break off your arm
var/obj/item/bodypart/l_arm = user.get_bodypart(BODY_ZONE_L_ARM)
diff --git a/code/modules/food_and_drinks/food/snacks_salad.dm b/code/modules/food_and_drinks/food/snacks_salad.dm
index 8c6eecb829..3582015ee9 100644
--- a/code/modules/food_and_drinks/food/snacks_salad.dm
+++ b/code/modules/food_and_drinks/food/snacks_salad.dm
@@ -9,7 +9,7 @@
tastes = list("leaves" = 1)
foodtype = VEGETABLES
-/obj/item/reagent_containers/food/snacks/salad/Initialize()
+/obj/item/reagent_containers/food/snacks/salad/Initialize(mapload)
. = ..()
eatverb = pick("crunch","devour","nibble","gnaw","gobble","chomp") //who the fuck gnaws and devours on a salad
diff --git a/code/modules/food_and_drinks/food/snacks_soup.dm b/code/modules/food_and_drinks/food/snacks_soup.dm
index 38a68ad364..2e45a13ea0 100644
--- a/code/modules/food_and_drinks/food/snacks_soup.dm
+++ b/code/modules/food_and_drinks/food/snacks_soup.dm
@@ -8,7 +8,7 @@
tastes = list("tasteless soup" = 1)
foodtype = VEGETABLES
-/obj/item/reagent_containers/food/snacks/soup/Initialize()
+/obj/item/reagent_containers/food/snacks/soup/Initialize(mapload)
. = ..()
eatverb = pick("slurp","sip","suck","inhale","drink")
@@ -19,7 +19,7 @@
list_reagents = list(/datum/reagent/water = 10)
tastes = list("wishes" = 1)
-/obj/item/reagent_containers/food/snacks/soup/wish/Initialize()
+/obj/item/reagent_containers/food/snacks/soup/wish/Initialize(mapload)
. = ..()
var/wish_true = prob(25)
if(wish_true)
@@ -99,7 +99,7 @@
list_reagents = list(/datum/reagent/consumable/nutriment = 6)
tastes = list("chaos" = 1)
-/obj/item/reagent_containers/food/snacks/soup/mystery/Initialize()
+/obj/item/reagent_containers/food/snacks/soup/mystery/Initialize(mapload)
. = ..()
extra_reagent = pick(/datum/reagent/consumable/capsaicin, /datum/reagent/consumable/frostoil,
/datum/reagent/medicine/omnizine, /datum/reagent/consumable/banana, /datum/reagent/blood,
@@ -184,7 +184,7 @@
bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 5)
foodtype = VEGETABLES
-/obj/item/reagent_containers/food/snacks/soup/beet/Initialize()
+/obj/item/reagent_containers/food/snacks/soup/beet/Initialize(mapload)
. = ..()
name = pick("borsch","bortsch","borstch","borsh","borshch","borscht")
tastes = list(name = 1)
diff --git a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm
index a41970ea2b..0bf4179814 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm
@@ -49,7 +49,7 @@ God bless America.
/obj/item/his_grace))
var/datum/looping_sound/deep_fryer/fry_loop
-/obj/machinery/deepfryer/Initialize()
+/obj/machinery/deepfryer/Initialize(mapload)
. = ..()
create_reagents(50, OPENCONTAINER)
reagents.add_reagent(/datum/reagent/consumable/cooking_oil, 25)
diff --git a/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm b/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm
index f09d3d6728..8bf13363a9 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm
@@ -17,7 +17,7 @@
var/list/stored_food = list()
var/obj/item/reagent_containers/mixer
-/obj/machinery/food_cart/Initialize()
+/obj/machinery/food_cart/Initialize(mapload)
. = ..()
create_reagents(LIQUID_CAPACITY, OPENCONTAINER | NO_REACT)
mixer = new /obj/item/reagent_containers(src, MIXER_CAPACITY)
diff --git a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm
index e4148d849a..fc00fd176e 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm
@@ -17,7 +17,7 @@
var/meat_quality = 35 //food_quality of meat produced
-/obj/machinery/gibber/Initialize()
+/obj/machinery/gibber/Initialize(mapload)
. = ..()
add_overlay("grjam")
diff --git a/code/modules/food_and_drinks/kitchen_machinery/grill.dm b/code/modules/food_and_drinks/kitchen_machinery/grill.dm
index 02b24402db..c03c834407 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/grill.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/grill.dm
@@ -11,7 +11,7 @@
var/grill_time = 0
var/datum/looping_sound/grill/grill_loop
-/obj/machinery/grill/Initialize()
+/obj/machinery/grill/Initialize(mapload)
. = ..()
grill_loop = new(src, FALSE)
diff --git a/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm b/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm
index 303d18b4a4..9f36fc058f 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm
@@ -80,7 +80,7 @@
return "vanilla"
-/obj/machinery/icecream_vat/Initialize()
+/obj/machinery/icecream_vat/Initialize(mapload)
. = ..()
while(product_types.len < 9)
product_types.Add(5)
@@ -249,7 +249,7 @@
bitesize = 4
foodtype = DAIRY | SUGAR
-/obj/item/reagent_containers/food/snacks/icecream/Initialize()
+/obj/item/reagent_containers/food/snacks/icecream/Initialize(mapload)
. = ..()
reagents.maximum_volume = 20
diff --git a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm
index c4ac4c2dcf..41cd860362 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm
@@ -32,7 +32,7 @@
var/static/list/radial_options = list("eject" = radial_eject, "use" = radial_use)
var/static/list/ai_radial_options = list("eject" = radial_eject, "use" = radial_use, "examine" = radial_examine)
-/obj/machinery/microwave/Initialize()
+/obj/machinery/microwave/Initialize(mapload)
. = ..()
wires = new /datum/wires/microwave(src)
create_reagents(100)
diff --git a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
index 58769cebf1..e4a098c3f1 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
@@ -19,7 +19,7 @@
var/list/initial_contents
var/visible_contents = TRUE
-/obj/machinery/smartfridge/Initialize()
+/obj/machinery/smartfridge/Initialize(mapload)
. = ..()
create_reagents(100, NO_REACT)
@@ -258,7 +258,7 @@
base_build_path = /obj/machinery/smartfridge/drying_rack //should really be seeing this without admin fuckery.
var/drying = FALSE
-/obj/machinery/smartfridge/drying_rack/Initialize()
+/obj/machinery/smartfridge/drying_rack/Initialize(mapload)
. = ..()
// Cache the old_parts first, we'll delete it after we've changed component_parts to a new list.
@@ -471,7 +471,7 @@
/obj/item/reagent_containers/medspray/synthtissue = 1,
/obj/item/reagent_containers/medspray/sterilizine = 1)
-/obj/machinery/smartfridge/organ/preloaded/Initialize()
+/obj/machinery/smartfridge/organ/preloaded/Initialize(mapload)
. = ..()
var/list = list(/obj/item/organ/tongue, /obj/item/organ/brain, /obj/item/organ/heart, /obj/item/organ/liver, /obj/item/organ/ears, /obj/item/organ/eyes, /obj/item/organ/tail, /obj/item/organ/stomach)
var/newtype = pick(list)
diff --git a/code/modules/food_and_drinks/pizzabox.dm b/code/modules/food_and_drinks/pizzabox.dm
index a2603d07ab..3c0d60907f 100644
--- a/code/modules/food_and_drinks/pizzabox.dm
+++ b/code/modules/food_and_drinks/pizzabox.dm
@@ -29,7 +29,7 @@
var/const/BOMB_TIMER_MIN = 1
var/const/BOMB_TIMER_MAX = 10
-/obj/item/pizzabox/Initialize()
+/obj/item/pizzabox/Initialize(mapload)
. = ..()
update_icon()
@@ -259,14 +259,14 @@
wires = null
update_icon()
-/obj/item/pizzabox/bomb/Initialize()
+/obj/item/pizzabox/bomb/Initialize(mapload)
. = ..()
var/randompizza = pick(subtypesof(/obj/item/reagent_containers/food/snacks/pizza))
pizza = new randompizza(src)
bomb = new(src)
wires = new /datum/wires/explosive/pizza(src)
-/obj/item/pizzabox/margherita/Initialize()
+/obj/item/pizzabox/margherita/Initialize(mapload)
. = ..()
AddPizza()
boxtag = "Margherita Deluxe"
@@ -277,22 +277,22 @@
/obj/item/pizzabox/margherita/robo/AddPizza()
pizza = new /obj/item/reagent_containers/food/snacks/pizza/margherita/robo(src)
-/obj/item/pizzabox/vegetable/Initialize()
+/obj/item/pizzabox/vegetable/Initialize(mapload)
. = ..()
pizza = new /obj/item/reagent_containers/food/snacks/pizza/vegetable(src)
boxtag = "Gourmet Vegatable"
-/obj/item/pizzabox/mushroom/Initialize()
+/obj/item/pizzabox/mushroom/Initialize(mapload)
. = ..()
pizza = new /obj/item/reagent_containers/food/snacks/pizza/mushroom(src)
boxtag = "Mushroom Special"
-/obj/item/pizzabox/meat/Initialize()
+/obj/item/pizzabox/meat/Initialize(mapload)
. = ..()
pizza = new /obj/item/reagent_containers/food/snacks/pizza/meat(src)
boxtag = "Meatlover's Supreme"
-/obj/item/pizzabox/pineapple/Initialize()
+/obj/item/pizzabox/pineapple/Initialize(mapload)
. = ..()
pizza = new /obj/item/reagent_containers/food/snacks/pizza/pineapple(src)
boxtag = "Honolulu Chew"
@@ -312,7 +312,7 @@
/obj/item/reagent_containers/food/snacks/pizza/dank = 0.1) //pizzas here are weighted by chance to be someone's favorite
var/static/list/pizza_preferences
-/obj/item/pizzabox/infinite/Initialize()
+/obj/item/pizzabox/infinite/Initialize(mapload)
. = ..()
if(!pizza_preferences)
pizza_preferences = list()
diff --git a/code/modules/holiday/easter.dm b/code/modules/holiday/easter.dm
index 84287daa4f..10b825440a 100644
--- a/code/modules/holiday/easter.dm
+++ b/code/modules/holiday/easter.dm
@@ -66,7 +66,7 @@
icon = 'icons/mob/easter.dmi'
icon_state = "basket"
-/obj/item/storage/bag/easterbasket/Initialize()
+/obj/item/storage/bag/easterbasket/Initialize(mapload)
. = ..()
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
STR.can_hold = typecacheof(list(/obj/item/reagent_containers/food/snacks/egg, /obj/item/reagent_containers/food/snacks/chocolateegg, /obj/item/reagent_containers/food/snacks/boiledegg))
@@ -109,7 +109,7 @@
/obj/item/reagent_containers/food/snacks/egg/loaded
containsPrize = TRUE
-/obj/item/reagent_containers/food/snacks/egg/loaded/Initialize()
+/obj/item/reagent_containers/food/snacks/egg/loaded/Initialize(mapload)
. = ..()
var/eggcolor = pick("blue","green","mime","orange","purple","rainbow","red","yellow")
icon_state = "egg-[eggcolor]"
diff --git a/code/modules/holiday/halloween/halloween.dm b/code/modules/holiday/halloween/halloween.dm
index 0c9987fc00..59a7fcce0c 100644
--- a/code/modules/holiday/halloween/halloween.dm
+++ b/code/modules/holiday/halloween/halloween.dm
@@ -42,7 +42,7 @@
var/trapped = 0
var/mob/trapped_mob
-/obj/structure/closet/Initialize()
+/obj/structure/closet/Initialize(mapload)
..()
if(prob(30))
set_spooky_trap()
@@ -137,7 +137,7 @@
layer = 4
var/timer = 0
-/mob/living/simple_animal/hostile/construct/shade/howling_ghost/Initialize()
+/mob/living/simple_animal/hostile/construct/shade/howling_ghost/Initialize(mapload)
. = ..()
icon_state = pick("ghost","ghostian","ghostian2","ghostking","ghost1","ghost2")
icon_living = icon_state
@@ -175,9 +175,6 @@
step(I,direction)
return
-/mob/living/simple_animal/hostile/construct/shade/howling_ghost/CanPass(atom/movable/mover, turf/target)
- return 1
-
///////////////////////////
//Spookoween Insane Clown//
///////////////////////////
@@ -196,7 +193,7 @@
unsuitable_atmos_damage = 0
var/timer
-/mob/living/simple_animal/hostile/retaliate/clown/insane/Initialize()
+/mob/living/simple_animal/hostile/retaliate/clown/insane/Initialize(mapload)
. = ..()
timer = rand(5,15)
@@ -233,7 +230,7 @@
return
/mob/living/simple_animal/hostile/retaliate/clown/insane/adjustHealth()
- . = ..()
+ . = ..()
if(prob(5))
playsound(loc, 'sound/spookoween/insane_low_laugh.ogg', 300, 1)
@@ -281,7 +278,7 @@
var/obj/effect/wisp/pumpkin/wisp2
//Hoooo boy that's some wild code there.
-/obj/item/wisp_lantern/pumpkin/Initialize()
+/obj/item/wisp_lantern/pumpkin/Initialize(mapload)
. = ..()
qdel(wisp)
wisp2 = new(src)
diff --git a/code/modules/holiday/halloween/jacqueen.dm b/code/modules/holiday/halloween/jacqueen.dm
index 723b404717..618ba9fcd7 100644
--- a/code/modules/holiday/halloween/jacqueen.dm
+++ b/code/modules/holiday/halloween/jacqueen.dm
@@ -61,7 +61,7 @@
/atom/movable/screen
))
-/mob/living/simple_animal/jacq/Initialize()
+/mob/living/simple_animal/jacq/Initialize(mapload)
. = ..() //fuck you jacq, return a hint you shit
cached_z = z
poof()
@@ -664,13 +664,13 @@
hat_type = "pumpkin_j"
brightness_on = 4
-/obj/item/clothing/head/hardhat/pumpkinhead/jaqc/Initialize()
+/obj/item/clothing/head/hardhat/pumpkinhead/jaqc/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, GLUED_ITEM_TRAIT)
/obj/item/clothing/suit/ghost_sheet/sticky
-/obj/item/clothing/suit/ghost_sheet/sticky/Initialize()
+/obj/item/clothing/suit/ghost_sheet/sticky/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, GLUED_ITEM_TRAIT)
@@ -723,7 +723,7 @@
icon_state = "jacq_potion"
desc = "A potion with a strange concoction within. Be careful, as if it's thrown it explodes in a puff of smoke like Jacqueline."
-/obj/item/reagent_containers/potion_container/Initialize()
+/obj/item/reagent_containers/potion_container/Initialize(mapload)
.=..()
var/R = get_random_reagent_id()
reagents.add_reagent(R, 30)
@@ -748,6 +748,6 @@
icon_state = "jacq_candy"
desc = "A candy with strange magic within. Be careful, as the magic isn't always helpful."
-/obj/item/reagent_containers/food/snacks/special_candy/Initialize()
+/obj/item/reagent_containers/food/snacks/special_candy/Initialize(mapload)
.=..()
reagents.add_reagent(get_random_reagent_id(), 5)
diff --git a/code/modules/holodeck/holo_effect.dm b/code/modules/holodeck/holo_effect.dm
index ffff8e190e..5d6259d9c2 100644
--- a/code/modules/holodeck/holo_effect.dm
+++ b/code/modules/holodeck/holo_effect.dm
@@ -105,7 +105,7 @@
/obj/effect/holodeck_effect/mobspawner/penguin
mobtype = /mob/living/simple_animal/pet/penguin/emperor
-/obj/effect/holodeck_effect/mobspawner/penguin/Initialize()
+/obj/effect/holodeck_effect/mobspawner/penguin/Initialize(mapload)
if(prob(1))
mobtype = /mob/living/simple_animal/pet/penguin/emperor/shamebrero
return ..()
diff --git a/code/modules/holodeck/items.dm b/code/modules/holodeck/items.dm
index e4564ecb7e..a88b8ab905 100644
--- a/code/modules/holodeck/items.dm
+++ b/code/modules/holodeck/items.dm
@@ -26,12 +26,12 @@
var/active = 0
var/saber_color
-/obj/item/holo/esword/green/Initialize()
+/obj/item/holo/esword/green/Initialize(mapload)
. = ..()
saber_color = "green"
-/obj/item/holo/esword/red/Initialize()
+/obj/item/holo/esword/red/Initialize(mapload)
. = ..()
saber_color = "red"
@@ -40,7 +40,7 @@
return ..()
return ..()
-/obj/item/holo/esword/Initialize()
+/obj/item/holo/esword/Initialize(mapload)
. = ..()
saber_color = pick("red","blue","green","purple")
diff --git a/code/modules/holodeck/turfs.dm b/code/modules/holodeck/turfs.dm
index 169c9061d3..7340ffda61 100644
--- a/code/modules/holodeck/turfs.dm
+++ b/code/modules/holodeck/turfs.dm
@@ -58,7 +58,7 @@
icon_state = "asteroid0"
tiled_dirt = FALSE
-/turf/open/floor/holofloor/asteroid/Initialize()
+/turf/open/floor/holofloor/asteroid/Initialize(mapload)
icon_state = "asteroid[rand(0, 12)]"
. = ..()
@@ -68,7 +68,7 @@
icon_state = "basalt0"
tiled_dirt = FALSE
-/turf/open/floor/holofloor/basalt/Initialize()
+/turf/open/floor/holofloor/basalt/Initialize(mapload)
. = ..()
if(prob(15))
icon_state = "basalt[rand(0, 12)]"
@@ -79,7 +79,7 @@
icon = 'icons/turf/space.dmi'
icon_state = "0"
-/turf/open/floor/holofloor/space/Initialize()
+/turf/open/floor/holofloor/space/Initialize(mapload)
icon_state = SPACE_ICON_STATE // so realistic
. = ..()
@@ -90,11 +90,11 @@
bullet_bounce_sound = null
tiled_dirt = FALSE
-/turf/open/floor/holofloor/hyperspace/Initialize()
+/turf/open/floor/holofloor/hyperspace/Initialize(mapload)
icon_state = "speedspace_ns_[(x + 5*y + (y%2+1)*7)%15+1]"
. = ..()
-/turf/open/floor/holofloor/hyperspace/ns/Initialize()
+/turf/open/floor/holofloor/hyperspace/ns/Initialize(mapload)
. = ..()
icon_state = "speedspace_ns_[(x + 5*y + (y%2+1)*7)%15+1]"
@@ -109,7 +109,7 @@
bullet_bounce_sound = null
tiled_dirt = FALSE
-/turf/open/floor/holofloor/carpet/Initialize()
+/turf/open/floor/holofloor/carpet/Initialize(mapload)
. = ..()
addtimer(CALLBACK(src, /atom/.proc/update_icon), 1)
@@ -167,6 +167,6 @@
canSmoothWith = list(/turf/open/floor/plating/ice/smooth, /turf/open/floor/plating/ice, /turf/open/floor/holofloor/ice)
baseturfs = /turf/open/floor/holofloor/ice/smooth
-/turf/open/floor/holofloor/ice/Initialize()
+/turf/open/floor/holofloor/ice/Initialize(mapload)
. = ..()
MakeSlippery(TURF_WET_PERMAFROST, INFINITY, 0, INFINITY, TRUE)
diff --git a/code/modules/hydroponics/beekeeping/beebox.dm b/code/modules/hydroponics/beekeeping/beebox.dm
index 2857099d0f..28e537acbc 100644
--- a/code/modules/hydroponics/beekeeping/beebox.dm
+++ b/code/modules/hydroponics/beekeeping/beebox.dm
@@ -40,7 +40,7 @@
var/bee_resources = 0
-/obj/structure/beebox/Initialize()
+/obj/structure/beebox/Initialize(mapload)
. = ..()
START_PROCESSING(SSobj, src)
@@ -58,7 +58,7 @@
var/random_reagent = FALSE
-/obj/structure/beebox/premade/Initialize()
+/obj/structure/beebox/premade/Initialize(mapload)
. = ..()
icon_state = "beebox"
diff --git a/code/modules/hydroponics/beekeeping/honey_frame.dm b/code/modules/hydroponics/beekeeping/honey_frame.dm
index 370b31da17..3cc3f9806d 100644
--- a/code/modules/hydroponics/beekeeping/honey_frame.dm
+++ b/code/modules/hydroponics/beekeeping/honey_frame.dm
@@ -7,7 +7,7 @@
var/honeycomb_capacity = 10 //10 Honeycomb per frame by default, researchable frames perhaps?
-/obj/item/honey_frame/Initialize()
+/obj/item/honey_frame/Initialize(mapload)
. = ..()
pixel_x = rand(8,-8)
pixel_y = rand(8,-8)
diff --git a/code/modules/hydroponics/beekeeping/honeycomb.dm b/code/modules/hydroponics/beekeeping/honeycomb.dm
index 6ce04a8732..d31ea281c7 100644
--- a/code/modules/hydroponics/beekeeping/honeycomb.dm
+++ b/code/modules/hydroponics/beekeeping/honeycomb.dm
@@ -13,7 +13,7 @@
grind_results = list()
var/honey_color = ""
-/obj/item/reagent_containers/honeycomb/Initialize()
+/obj/item/reagent_containers/honeycomb/Initialize(mapload)
. = ..()
pixel_x = rand(8,-8)
pixel_y = rand(8,-8)
diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm
index 8651ea82ab..71513ccfdf 100644
--- a/code/modules/hydroponics/biogenerator.dm
+++ b/code/modules/hydroponics/biogenerator.dm
@@ -18,7 +18,7 @@
/// Currently selected category in the UI
var/selected_cat
-/obj/machinery/biogenerator/Initialize()
+/obj/machinery/biogenerator/Initialize(mapload)
. = ..()
stored_research = new /datum/techweb/specialized/autounlocking/biogenerator
create_reagents(1000)
diff --git a/code/modules/hydroponics/fermenting_barrel.dm b/code/modules/hydroponics/fermenting_barrel.dm
index 39b0bfdfde..fd0f39fd75 100644
--- a/code/modules/hydroponics/fermenting_barrel.dm
+++ b/code/modules/hydroponics/fermenting_barrel.dm
@@ -10,7 +10,7 @@
var/open = FALSE
var/speed_multiplier = 1 //How fast it distills. Defaults to 100% (1.0). Lower is better.
-/obj/structure/fermenting_barrel/Initialize()
+/obj/structure/fermenting_barrel/Initialize(mapload)
create_reagents(300, DRAINABLE | AMOUNT_VISIBLE) //Bluespace beakers, but without the portability or efficiency in circuits.
. = ..()
@@ -85,7 +85,7 @@
max_integrity = 300
var/open = FALSE
-/obj/structure/custom_keg/Initialize()
+/obj/structure/custom_keg/Initialize(mapload)
create_reagents(1000, DRAINABLE | AMOUNT_VISIBLE)
. = ..()
diff --git a/code/modules/hydroponics/gene_modder.dm b/code/modules/hydroponics/gene_modder.dm
index a6ba5ec461..3b1c4eb163 100644
--- a/code/modules/hydroponics/gene_modder.dm
+++ b/code/modules/hydroponics/gene_modder.dm
@@ -424,7 +424,7 @@
var/read_only = 0 //Well, it's still a floppy disk
obj_flags = UNIQUE_RENAME
-/obj/item/disk/plantgene/Initialize()
+/obj/item/disk/plantgene/Initialize(mapload)
. = ..()
add_overlay("datadisk_gene")
src.pixel_x = rand(-5, 5)
diff --git a/code/modules/hydroponics/grown/banana.dm b/code/modules/hydroponics/grown/banana.dm
index e825c88524..65a28eee2e 100644
--- a/code/modules/hydroponics/grown/banana.dm
+++ b/code/modules/hydroponics/grown/banana.dm
@@ -167,6 +167,6 @@
name = "synthesized banana peel"
desc = "A synthetic banana peel."
-/obj/item/grown/bananapeel/specialpeel/Initialize(AM)
+/obj/item/grown/bananapeel/specialpeel/Initialize(mapload, AM)
. = ..()
AddComponent(/datum/component/slippery, 40)
diff --git a/code/modules/hydroponics/grown/cocoa_vanilla.dm b/code/modules/hydroponics/grown/cocoa_vanilla.dm
index 5de0740b87..3a1c78a7a9 100644
--- a/code/modules/hydroponics/grown/cocoa_vanilla.dm
+++ b/code/modules/hydroponics/grown/cocoa_vanilla.dm
@@ -96,7 +96,7 @@
foodtype = TOXIC
tastes = list("acrid bitterness" = 1)
-/obj/item/reagent_containers/food/snacks/grown/bungopit/Initialize()
+/obj/item/reagent_containers/food/snacks/grown/bungopit/Initialize(mapload)
. =..()
reagents.clear_reagents()
reagents.add_reagent(/datum/reagent/toxin/bungotoxin, seed.potency * 0.10) //More than this will kill at too low potency
diff --git a/code/modules/hydroponics/grown/melon.dm b/code/modules/hydroponics/grown/melon.dm
index b988261770..c8b952889b 100644
--- a/code/modules/hydroponics/grown/melon.dm
+++ b/code/modules/hydroponics/grown/melon.dm
@@ -61,7 +61,7 @@
wine_flavor = "divinity"
/*
-/obj/item/reagent_containers/food/snacks/grown/holymelon/Initialize()
+/obj/item/reagent_containers/food/snacks/grown/holymelon/Initialize(mapload)
. = ..()
var/uses = 1
if(seed)
diff --git a/code/modules/hydroponics/grown/misc.dm b/code/modules/hydroponics/grown/misc.dm
index 4e6a4f0765..d32d287800 100644
--- a/code/modules/hydroponics/grown/misc.dm
+++ b/code/modules/hydroponics/grown/misc.dm
@@ -377,7 +377,7 @@
var/obj/item/bodypart/affecting = user.zone_selected //Find what the player is aiming at
if (affecting == BODY_ZONE_HEAD && prob(15))
//smash the nut open
- var/armor_block = min(90, M.run_armor_check(affecting, "melee", null, null,armour_penetration)) // For normal attack damage
+ var/armor_block = min(90, M.run_armor_check(affecting, MELEE, null, null,armour_penetration)) // For normal attack damage
M.apply_damage(force, BRUTE, affecting, armor_block)
//Sound
diff --git a/code/modules/hydroponics/grown/random.dm b/code/modules/hydroponics/grown/random.dm
index 75505202da..cc4da4c6e5 100644
--- a/code/modules/hydroponics/grown/random.dm
+++ b/code/modules/hydroponics/grown/random.dm
@@ -12,7 +12,7 @@
icon_harvest = "xpod-harvest"
growthstages = 4
-/obj/item/seeds/random/Initialize()
+/obj/item/seeds/random/Initialize(mapload)
. = ..()
randomize_stats()
if(prob(60))
@@ -28,7 +28,7 @@
icon_state = "crunchy"
bitesize_mod = 2
-/obj/item/reagent_containers/food/snacks/grown/random/Initialize()
+/obj/item/reagent_containers/food/snacks/grown/random/Initialize(mapload)
. = ..()
wine_power = rand(10,150)
if(prob(1))
diff --git a/code/modules/hydroponics/grown/replicapod.dm b/code/modules/hydroponics/grown/replicapod.dm
index 053daaf3af..e15c8f1323 100644
--- a/code/modules/hydroponics/grown/replicapod.dm
+++ b/code/modules/hydroponics/grown/replicapod.dm
@@ -24,7 +24,7 @@
var/list/quirks = null
var/contains_sample = 0
-/obj/item/seeds/replicapod/Initialize()
+/obj/item/seeds/replicapod/Initialize(mapload)
. = ..()
create_reagents(volume, INJECTABLE | DRAWABLE)
diff --git a/code/modules/hydroponics/grown/towercap.dm b/code/modules/hydroponics/grown/towercap.dm
index 38e4fcc6ff..b45a9292b1 100644
--- a/code/modules/hydroponics/grown/towercap.dm
+++ b/code/modules/hydroponics/grown/towercap.dm
@@ -151,6 +151,7 @@
density = FALSE
anchored = TRUE
buckle_lying = 0
+ pass_flags_self = PASSTABLE | LETPASSTHROW
var/burning = 0
var/burn_icon = "bonfire_on_fire" //for a softer more burning embers icon, use "bonfire_warm"
var/grill = FALSE
@@ -159,17 +160,10 @@
/obj/structure/bonfire/dense
density = TRUE
-/obj/structure/bonfire/prelit/Initialize()
+/obj/structure/bonfire/prelit/Initialize(mapload)
. = ..()
StartBurning()
-/obj/structure/bonfire/CanPass(atom/movable/mover, turf/target)
- if(istype(mover) && (mover.pass_flags & PASSTABLE))
- return TRUE
- if(mover.throwing)
- return TRUE
- return ..()
-
/obj/structure/bonfire/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/stack/rods) && !can_buckle && !grill)
var/obj/item/stack/rods/R = W
diff --git a/code/modules/hydroponics/growninedible.dm b/code/modules/hydroponics/growninedible.dm
index f4859ffb1e..c8c6195d5a 100644
--- a/code/modules/hydroponics/growninedible.dm
+++ b/code/modules/hydroponics/growninedible.dm
@@ -9,7 +9,7 @@
var/obj/item/seeds/seed = null // type path, gets converted to item on New(). It's safe to assume it's always a seed item.
var/tastes = list("indescribable" = 1) //Stops runtimes. Grown are un-eatable anyways so if you do then its a bug
-/obj/item/grown/Initialize(newloc, obj/item/seeds/new_seed)
+/obj/item/grown/Initialize(mapload, newloc, obj/item/seeds/new_seed)
. = ..()
create_reagents(50, NONE, HARVEST_REAGENTS_VALUE)
diff --git a/code/modules/hydroponics/hydroitemdefines.dm b/code/modules/hydroponics/hydroitemdefines.dm
index 798cd9a2f6..26566d3f85 100644
--- a/code/modules/hydroponics/hydroitemdefines.dm
+++ b/code/modules/hydroponics/hydroitemdefines.dm
@@ -109,7 +109,7 @@
hitsound = 'sound/weapons/bladeslice.ogg'
sharpness = SHARP_EDGED
-/obj/item/hatchet/Initialize()
+/obj/item/hatchet/Initialize(mapload)
. = ..()
AddComponent(/datum/component/butchering, 70, 100)
@@ -143,7 +143,7 @@
hitsound = 'sound/weapons/bladeslice.ogg'
var/swiping = FALSE
-/obj/item/scythe/Initialize()
+/obj/item/scythe/Initialize(mapload)
. = ..()
AddComponent(/datum/component/butchering, 90, 105)
@@ -191,7 +191,7 @@
amount_per_transfer_from_this = 10
possible_transfer_amounts = list(1,2,5,10,15,25,50)
-/obj/item/reagent_containers/glass/bottle/nutrient/Initialize()
+/obj/item/reagent_containers/glass/bottle/nutrient/Initialize(mapload)
. = ..()
pixel_x = rand(-5, 5)
pixel_y = rand(-5, 5)
diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm
index fa7decc437..a91e3ddfd8 100644
--- a/code/modules/hydroponics/hydroponics.dm
+++ b/code/modules/hydroponics/hydroponics.dm
@@ -31,7 +31,7 @@
var/self_sustaining = FALSE //If the tray generates nutrients and water on its own
// Here lies irrigation. You won't be missed, because you were never used.
-/obj/machinery/hydroponics/Initialize()
+/obj/machinery/hydroponics/Initialize(mapload)
//Here lies "nutrilevel", killed by ArcaneMusic 20??-2019. Finally, we strive for a better future. Please use "reagents" instead
create_reagents(20)
reagents.add_reagent(/datum/reagent/plantnutriment/eznutriment, 10) //Half filled nutrient trays for dirt trays to have more to grow with in prison/lavaland.
diff --git a/code/modules/hydroponics/sample.dm b/code/modules/hydroponics/sample.dm
index 7fb92e8fcd..ebcb100b32 100644
--- a/code/modules/hydroponics/sample.dm
+++ b/code/modules/hydroponics/sample.dm
@@ -5,7 +5,7 @@
yield = -1
var/sample_color = "#FFFFFF"
-/obj/item/seeds/sample/Initialize()
+/obj/item/seeds/sample/Initialize(mapload)
. = ..()
if(sample_color)
var/mutable_appearance/filling = mutable_appearance(icon, "sample-filling")
diff --git a/code/modules/instruments/instruments/item.dm b/code/modules/instruments/instruments/item.dm
index 0141a4baee..888aac4d40 100644
--- a/code/modules/instruments/instruments/item.dm
+++ b/code/modules/instruments/instruments/item.dm
@@ -103,7 +103,7 @@
item_state = "synth"
allowed_instrument_ids = "piano"
-/obj/item/instrument/piano_synth/Initialize()
+/obj/item/instrument/piano_synth/Initialize(mapload)
. = ..()
song.allowed_instrument_ids = get_allowed_instrument_ids()
@@ -155,7 +155,7 @@
force = 0
attack_verb = list("played","jazzed","trumpeted","mourned","dooted","spooked")
-/obj/item/instrument/trumpet/spectral/Initialize()
+/obj/item/instrument/trumpet/spectral/Initialize(mapload)
. = ..()
AddComponent(/datum/component/spooky)
@@ -178,7 +178,7 @@
force = 0
attack_verb = list("played","jazzed","saxxed","mourned","dooted","spooked")
-/obj/item/instrument/saxophone/spectral/Initialize()
+/obj/item/instrument/saxophone/spectral/Initialize(mapload)
. = ..()
AddComponent(/datum/component/spooky)
@@ -201,7 +201,7 @@
force = 0
attack_verb = list("played","jazzed","tromboned","mourned","dooted","spooked")
-/obj/item/instrument/trombone/spectral/Initialize()
+/obj/item/instrument/trombone/spectral/Initialize(mapload)
. = ..()
AddComponent(/datum/component/spooky)
diff --git a/code/modules/integrated_electronics/core/assemblies.dm b/code/modules/integrated_electronics/core/assemblies.dm
index ac27b4a30e..4b6f76574f 100644
--- a/code/modules/integrated_electronics/core/assemblies.dm
+++ b/code/modules/integrated_electronics/core/assemblies.dm
@@ -36,7 +36,7 @@
hud_possible = list(DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_TRACK_HUD, DIAG_CIRCUIT_HUD) //diagnostic hud overlays
max_integrity = 50
pass_flags = 0
- armor = list("melee" = 50, "bullet" = 70, "laser" = 70, "energy" = 100, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 50, BULLET = 70, LASER = 70, ENERGY = 100, BOMB = 10, BIO = 100, RAD = 100, FIRE = 0, ACID = 0)
anchored = FALSE
var/can_anchor = TRUE
var/detail_color = COLOR_ASSEMBLY_BLACK
@@ -96,7 +96,7 @@
if(D.check_access(access_card))
D.open()
-/obj/item/electronic_assembly/Initialize()
+/obj/item/electronic_assembly/Initialize(mapload)
LAZYSET(custom_materials, /datum/material/iron, round((max_complexity + max_components) * 0.25) * SScircuit.cost_multiplier)
.=..()
START_PROCESSING(SScircuit, src)
diff --git a/code/modules/integrated_electronics/core/detailer.dm b/code/modules/integrated_electronics/core/detailer.dm
index 03cd19cf96..374f4f602a 100644
--- a/code/modules/integrated_electronics/core/detailer.dm
+++ b/code/modules/integrated_electronics/core/detailer.dm
@@ -30,7 +30,7 @@
"custom" = COLOR_ASSEMBLY_WHITE
)
-/obj/item/integrated_electronics/detailer/Initialize()
+/obj/item/integrated_electronics/detailer/Initialize(mapload)
.=..()
update_icon()
diff --git a/code/modules/integrated_electronics/core/integrated_circuit.dm b/code/modules/integrated_electronics/core/integrated_circuit.dm
index 756706dcdf..7e667b3d09 100644
--- a/code/modules/integrated_electronics/core/integrated_circuit.dm
+++ b/code/modules/integrated_electronics/core/integrated_circuit.dm
@@ -81,7 +81,7 @@ a creative player the means to solve many problems. Circuits are held inside an
else
return user.canUseTopic(src, BE_CLOSE)
-/obj/item/integrated_circuit/Initialize()
+/obj/item/integrated_circuit/Initialize(mapload)
displayed_name = name
setup_io(inputs, /datum/integrated_io, inputs_default, IC_INPUT)
setup_io(outputs, /datum/integrated_io, outputs_default, IC_OUTPUT)
diff --git a/code/modules/integrated_electronics/core/printer.dm b/code/modules/integrated_electronics/core/printer.dm
index 5f6440bffb..879cfdf6b6 100644
--- a/code/modules/integrated_electronics/core/printer.dm
+++ b/code/modules/integrated_electronics/core/printer.dm
@@ -31,7 +31,7 @@
fast_clone = TRUE
w_class = WEIGHT_CLASS_TINY
-/obj/item/integrated_circuit_printer/Initialize()
+/obj/item/integrated_circuit_printer/Initialize(mapload)
. = ..()
var/datum/component/material_container/materials = AddComponent(/datum/component/material_container, list(/datum/material/iron), MINERAL_MATERIAL_AMOUNT * 25, TRUE, list(/obj/item/stack, /obj/item/integrated_circuit, /obj/item/electronic_assembly))
materials.precise_insertion = TRUE
diff --git a/code/modules/integrated_electronics/passive/power.dm b/code/modules/integrated_electronics/passive/power.dm
index a7ee449be2..adc99f0ff5 100644
--- a/code/modules/integrated_electronics/passive/power.dm
+++ b/code/modules/integrated_electronics/passive/power.dm
@@ -101,7 +101,7 @@
var/multi = 1
var/lfwb =TRUE
-/obj/item/integrated_circuit/passive/power/chemical_cell/Initialize()
+/obj/item/integrated_circuit/passive/power/chemical_cell/Initialize(mapload)
. = ..()
create_reagents(volume, OPENCONTAINER)
diff --git a/code/modules/integrated_electronics/subtypes/arithmetic.dm b/code/modules/integrated_electronics/subtypes/arithmetic.dm
index e207f57ddb..a5b559585c 100644
--- a/code/modules/integrated_electronics/subtypes/arithmetic.dm
+++ b/code/modules/integrated_electronics/subtypes/arithmetic.dm
@@ -241,7 +241,7 @@
inputs = list()
spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH
-/obj/item/integrated_circuit/arithmetic/pi/Initialize()
+/obj/item/integrated_circuit/arithmetic/pi/Initialize(mapload)
. = ..()
desc = "Not recommended for cooking. Outputs '[PI]' when it receives a pulse."
diff --git a/code/modules/integrated_electronics/subtypes/atmospherics.dm b/code/modules/integrated_electronics/subtypes/atmospherics.dm
index b3056d46cf..b2cb7b9c24 100644
--- a/code/modules/integrated_electronics/subtypes/atmospherics.dm
+++ b/code/modules/integrated_electronics/subtypes/atmospherics.dm
@@ -17,7 +17,7 @@
var/datum/gas_mixture/air_contents
var/volume = 2 //Pretty small, I know
-/obj/item/integrated_circuit/atmospherics/Initialize()
+/obj/item/integrated_circuit/atmospherics/Initialize(mapload)
air_contents = new(volume)
return ..()
@@ -57,7 +57,7 @@
var/target_pressure = PUMP_MAX_PRESSURE
power_draw_per_use = 20
-/obj/item/integrated_circuit/atmospherics/pump/Initialize()
+/obj/item/integrated_circuit/atmospherics/pump/Initialize(mapload)
air_contents = new(volume)
extended_desc += " Use negative pressure to move air from target to source. \
Note that only part of the gas is moved on each transfer, \
@@ -246,7 +246,7 @@
var/obj/machinery/atmospherics/components/unary/portables_connector/connector
-/obj/item/integrated_circuit/atmospherics/connector/Initialize()
+/obj/item/integrated_circuit/atmospherics/connector/Initialize(mapload)
air_contents = new(volume)
START_PROCESSING(SSobj, src)
. = ..()
@@ -398,7 +398,7 @@
contaminated_air.merge(removed)
-/obj/item/integrated_circuit/atmospherics/pump/filter/Initialize()
+/obj/item/integrated_circuit/atmospherics/pump/filter/Initialize(mapload)
air_contents = new(volume)
. = ..()
extended_desc = "Remember to properly spell and capitalize the filtered gas name. \
@@ -485,7 +485,7 @@
volume = 3 //emergency tank sized
var/broken = FALSE
-/obj/item/integrated_circuit/atmospherics/tank/Initialize()
+/obj/item/integrated_circuit/atmospherics/tank/Initialize(mapload)
air_contents = new(volume)
START_PROCESSING(SSobj, src)
extended_desc = "Take care not to pressurize it above [round(TANK_FAILURE_PRESSURE)] kPa, or else it will break."
@@ -611,7 +611,7 @@
var/temperature = 293.15
var/heater_coefficient = 0.1
-/obj/item/integrated_circuit/atmospherics/cooler/Initialize()
+/obj/item/integrated_circuit/atmospherics/cooler/Initialize(mapload)
air_contents = new(volume)
START_PROCESSING(SSobj, src)
. = ..()
@@ -701,7 +701,7 @@
var/obj/item/tank/internals/current_tank
-/obj/item/integrated_circuit/input/tank_slot/Initialize()
+/obj/item/integrated_circuit/input/tank_slot/Initialize(mapload)
START_PROCESSING(SSobj, src)
. = ..()
diff --git a/code/modules/integrated_electronics/subtypes/converters.dm b/code/modules/integrated_electronics/subtypes/converters.dm
index ebb91a894e..0c89e78564 100644
--- a/code/modules/integrated_electronics/subtypes/converters.dm
+++ b/code/modules/integrated_electronics/subtypes/converters.dm
@@ -151,7 +151,7 @@
var/number_of_pins = 8
var/max_string_length = 512
-/obj/item/integrated_circuit/converter/concatenator/Initialize()
+/obj/item/integrated_circuit/converter/concatenator/Initialize(mapload)
for(var/i = 1 to number_of_pins)
inputs["input [i]"] = IC_PINTYPE_STRING
. = ..()
diff --git a/code/modules/integrated_electronics/subtypes/data_transfer.dm b/code/modules/integrated_electronics/subtypes/data_transfer.dm
index 8db1db4e00..588d920fec 100644
--- a/code/modules/integrated_electronics/subtypes/data_transfer.dm
+++ b/code/modules/integrated_electronics/subtypes/data_transfer.dm
@@ -16,7 +16,7 @@
power_draw_per_use = 4
var/number_of_pins = 2
-/obj/item/integrated_circuit/transfer/multiplexer/Initialize()
+/obj/item/integrated_circuit/transfer/multiplexer/Initialize(mapload)
for(var/i = 1 to number_of_pins)
inputs["input [i]"] = IC_PINTYPE_ANY // This is just a string since pins don't get built until ..() is called.
@@ -64,7 +64,7 @@
power_draw_per_use = 4
var/number_of_pins = 2
-/obj/item/integrated_circuit/transfer/demultiplexer/Initialize()
+/obj/item/integrated_circuit/transfer/demultiplexer/Initialize(mapload)
for(var/i = 1 to number_of_pins)
outputs["output [i]"] = IC_PINTYPE_ANY
complexity = number_of_pins
@@ -113,7 +113,7 @@
power_draw_per_use = 4
var/number_of_pins = 2
-/obj/item/integrated_circuit/transfer/pulsedemultiplexer/Initialize()
+/obj/item/integrated_circuit/transfer/pulsedemultiplexer/Initialize(mapload)
for(var/i = 1 to number_of_pins)
activators["output [i]"] = IC_PINTYPE_PULSE_OUT
complexity = number_of_pins
@@ -158,7 +158,7 @@
power_draw_per_use = 4
var/number_of_pins = 2
-/obj/item/integrated_circuit/transfer/pulsemultiplexer/Initialize()
+/obj/item/integrated_circuit/transfer/pulsemultiplexer/Initialize(mapload)
for(var/i = 1 to number_of_pins)
inputs["input [i]"] = IC_PINTYPE_ANY
for(var/i = 1 to number_of_pins)
diff --git a/code/modules/integrated_electronics/subtypes/input.dm b/code/modules/integrated_electronics/subtypes/input.dm
index f66931e253..547036f08a 100644
--- a/code/modules/integrated_electronics/subtypes/input.dm
+++ b/code/modules/integrated_electronics/subtypes/input.dm
@@ -652,7 +652,7 @@
var/datum/radio_frequency/radio_connection
var/hearing_range = 1
-/obj/item/integrated_circuit/input/signaler/Initialize()
+/obj/item/integrated_circuit/input/signaler/Initialize(mapload)
. = ..()
spawn(40)
set_frequency(frequency)
@@ -738,7 +738,7 @@
power_draw_per_use = 50
var/address
-/obj/item/integrated_circuit/input/ntnet_packet/Initialize()
+/obj/item/integrated_circuit/input/ntnet_packet/Initialize(mapload)
. = ..()
var/datum/component/ntnet_interface/net = LoadComponent(/datum/component/ntnet_interface)
address = net.hardware_id
@@ -786,7 +786,7 @@
power_draw_per_use = 50
var/address
-/obj/item/integrated_circuit/input/ntnet_advanced/Initialize()
+/obj/item/integrated_circuit/input/ntnet_advanced/Initialize(mapload)
. = ..()
var/datum/component/ntnet_interface/net = LoadComponent(/datum/component/ntnet_interface)
address = net.hardware_id
diff --git a/code/modules/integrated_electronics/subtypes/lists.dm b/code/modules/integrated_electronics/subtypes/lists.dm
index a5c482c7de..5855959627 100644
--- a/code/modules/integrated_electronics/subtypes/lists.dm
+++ b/code/modules/integrated_electronics/subtypes/lists.dm
@@ -360,7 +360,7 @@
spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH
var/number_of_pins = 16
-/obj/item/integrated_circuit/lists/constructor/Initialize()
+/obj/item/integrated_circuit/lists/constructor/Initialize(mapload)
for(var/i = 1 to number_of_pins)
inputs["input [i]"] = IC_PINTYPE_ANY // This is just a string since pins don't get built until ..() is called.
complexity = number_of_pins / 2
@@ -406,7 +406,7 @@
spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH
var/number_of_pins = 16
-/obj/item/integrated_circuit/lists/deconstructor/Initialize()
+/obj/item/integrated_circuit/lists/deconstructor/Initialize(mapload)
for(var/i = 1 to number_of_pins)
outputs["output [i]"] = IC_PINTYPE_ANY // This is just a string since pins don't get built until ..() is called.
complexity = number_of_pins / 2
diff --git a/code/modules/integrated_electronics/subtypes/memory.dm b/code/modules/integrated_electronics/subtypes/memory.dm
index 34c36883d1..75ce4aefd7 100644
--- a/code/modules/integrated_electronics/subtypes/memory.dm
+++ b/code/modules/integrated_electronics/subtypes/memory.dm
@@ -11,7 +11,7 @@
power_draw_per_use = 1
var/number_of_pins = 1
-/obj/item/integrated_circuit/memory/Initialize()
+/obj/item/integrated_circuit/memory/Initialize(mapload)
for(var/i = 1 to number_of_pins)
inputs["input [i]"] = IC_PINTYPE_ANY // This is just a string since pins don't get built until ..() is called.
outputs["output [i]"] = IC_PINTYPE_ANY
diff --git a/code/modules/integrated_electronics/subtypes/output.dm b/code/modules/integrated_electronics/subtypes/output.dm
index 833b2963ad..e0b1afe72e 100644
--- a/code/modules/integrated_electronics/subtypes/output.dm
+++ b/code/modules/integrated_electronics/subtypes/output.dm
@@ -148,7 +148,7 @@
power_draw_per_use = 10
var/list/sounds = list()
-/obj/item/integrated_circuit/output/sound/Initialize()
+/obj/item/integrated_circuit/output/sound/Initialize(mapload)
.= ..()
extended_desc = list()
extended_desc += "The first input pin determines which sound is used. The choices are; "
@@ -230,7 +230,7 @@
desc = "Takes a sound name as an input, and will play said sound when pulsed. This circuit is often found in AI announcement systems."
spawn_flags = IC_SPAWN_RESEARCH
-/obj/item/integrated_circuit/output/sound/vox/Initialize()
+/obj/item/integrated_circuit/output/sound/vox/Initialize(mapload)
.= ..()
sounds = GLOB.vox_sounds
extended_desc = "The first input pin determines which sound is used. It uses the AI Vox Broadcast word list. So either experiment to find words that work, or ask the AI to help in figuring them out. The second pin determines the volume of sound that is played, and the third determines if the frequency of the sound will vary with each activation."
diff --git a/code/modules/integrated_electronics/subtypes/reagents.dm b/code/modules/integrated_electronics/subtypes/reagents.dm
index de6ad729e9..bdd9e954db 100644
--- a/code/modules/integrated_electronics/subtypes/reagents.dm
+++ b/code/modules/integrated_electronics/subtypes/reagents.dm
@@ -6,7 +6,7 @@
cooldown_per_use = 10
var/volume = 0
-/obj/item/integrated_circuit/reagent/Initialize()
+/obj/item/integrated_circuit/reagent/Initialize(mapload)
. = ..()
if(volume)
create_reagents(volume)
@@ -75,7 +75,7 @@
var/transfer_amount = 10
var/busy = FALSE
-/obj/item/integrated_circuit/reagent/injector/Initialize()
+/obj/item/integrated_circuit/reagent/injector/Initialize(mapload)
. = ..()
reagents.reagents_holder_flags |= OPENCONTAINER
@@ -271,7 +271,7 @@
activators = list("push ref" = IC_PINTYPE_PULSE_OUT)
spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH
-/obj/item/integrated_circuit/reagent/storage/Initialize()
+/obj/item/integrated_circuit/reagent/storage/Initialize(mapload)
. = ..()
reagents.reagents_holder_flags |= OPENCONTAINER
@@ -301,7 +301,7 @@
complexity = 8
spawn_flags = IC_SPAWN_RESEARCH
-/obj/item/integrated_circuit/reagent/storage/cryo/Initialize()
+/obj/item/integrated_circuit/reagent/storage/cryo/Initialize(mapload)
. = ..()
reagents.reagents_holder_flags |= NO_REACT
@@ -520,7 +520,7 @@
else
power_draw_idle = 0
-/obj/item/integrated_circuit/reagent/storage/heater/Initialize()
+/obj/item/integrated_circuit/reagent/storage/heater/Initialize(mapload)
.=..()
START_PROCESSING(SScircuit, src)
@@ -572,7 +572,7 @@
var/smoke_radius = 5
var/notified = FALSE
-/obj/item/integrated_circuit/reagent/smoke/Initialize()
+/obj/item/integrated_circuit/reagent/smoke/Initialize(mapload)
. = ..()
reagents.reagents_holder_flags |= OPENCONTAINER
@@ -630,7 +630,7 @@
power_draw_per_use = 15
var/busy = FALSE
-/obj/item/integrated_circuit/reagent/extinguisher/Initialize()
+/obj/item/integrated_circuit/reagent/extinguisher/Initialize(mapload)
.=..()
reagents.reagents_holder_flags |= OPENCONTAINER
set_pin_data(IC_OUTPUT,2, src)
diff --git a/code/modules/integrated_electronics/subtypes/smart.dm b/code/modules/integrated_electronics/subtypes/smart.dm
index e1fdc36552..0f97ff8e08 100644
--- a/code/modules/integrated_electronics/subtypes/smart.dm
+++ b/code/modules/integrated_electronics/subtypes/smart.dm
@@ -87,7 +87,7 @@
power_draw_per_use = 80
var/obj/item/card/id/idc
-/obj/item/integrated_circuit/smart/advanced_pathfinder/Initialize()
+/obj/item/integrated_circuit/smart/advanced_pathfinder/Initialize(mapload)
.=..()
idc = new(src)
diff --git a/code/modules/integrated_electronics/subtypes/weaponized.dm b/code/modules/integrated_electronics/subtypes/weaponized.dm
index 54b14cccbc..0458700f44 100644
--- a/code/modules/integrated_electronics/subtypes/weaponized.dm
+++ b/code/modules/integrated_electronics/subtypes/weaponized.dm
@@ -162,7 +162,7 @@
var/pre_attached_grenade_type
demands_object_input = TRUE // You can put stuff in once the circuit is in assembly,passed down from additem and handled by attackby()
-/obj/item/integrated_circuit/weaponized/grenade/Initialize()
+/obj/item/integrated_circuit/weaponized/grenade/Initialize(mapload)
. = ..()
if(pre_attached_grenade_type)
var/grenade = new pre_attached_grenade_type(src)
diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm
index 68f0da61c6..ff9f86e932 100644
--- a/code/modules/jobs/job_types/_job.dm
+++ b/code/modules/jobs/job_types/_job.dm
@@ -15,7 +15,7 @@
//Bitflags for the job
var/flag = NONE //Deprecated
var/department_flag = NONE //Deprecated
-// var/auto_deadmin_role_flags = NONE
+ var/auto_deadmin_role_flags = NONE
//Players will be allowed to spawn in as jobs that are set to "Station"
var/faction = "None"
diff --git a/code/modules/jobs/job_types/ai.dm b/code/modules/jobs/job_types/ai.dm
index f7670f2f8f..c5cb978f40 100644
--- a/code/modules/jobs/job_types/ai.dm
+++ b/code/modules/jobs/job_types/ai.dm
@@ -1,7 +1,7 @@
/datum/job/ai
title = "AI"
flag = AI_JF
-// auto_deadmin_role_flags = DEADMIN_POSITION_SILICON
+ auto_deadmin_role_flags = DEADMIN_POSITION_SILICON
department_flag = ENGSEC
faction = "Station"
total_positions = 1
diff --git a/code/modules/jobs/job_types/captain.dm b/code/modules/jobs/job_types/captain.dm
index 4806bf5546..c3765260cc 100644
--- a/code/modules/jobs/job_types/captain.dm
+++ b/code/modules/jobs/job_types/captain.dm
@@ -1,7 +1,7 @@
/datum/job/captain
title = "Captain"
flag = CAPTAIN
-// auto_deadmin_role_flags = DEADMIN_POSITION_HEAD|DEADMIN_POSITION_SECURITY //:eyes:
+ auto_deadmin_role_flags = DEADMIN_POSITION_HEAD|DEADMIN_POSITION_SECURITY //:eyes:
department_head = list("CentCom")
department_flag = ENGSEC
faction = "Station"
diff --git a/code/modules/jobs/job_types/chief_engineer.dm b/code/modules/jobs/job_types/chief_engineer.dm
index 6fbf546e95..bfc52e9437 100644
--- a/code/modules/jobs/job_types/chief_engineer.dm
+++ b/code/modules/jobs/job_types/chief_engineer.dm
@@ -1,7 +1,7 @@
/datum/job/chief_engineer
title = "Chief Engineer"
flag = CHIEF
-// auto_deadmin_role_flags = DEADMIN_POSITION_HEAD
+ auto_deadmin_role_flags = DEADMIN_POSITION_HEAD
department_head = list("Captain")
department_flag = ENGSEC
head_announce = list(RADIO_CHANNEL_ENGINEERING)
diff --git a/code/modules/jobs/job_types/chief_medical_officer.dm b/code/modules/jobs/job_types/chief_medical_officer.dm
index bb5fc68809..89b06f6802 100644
--- a/code/modules/jobs/job_types/chief_medical_officer.dm
+++ b/code/modules/jobs/job_types/chief_medical_officer.dm
@@ -3,7 +3,7 @@
flag = CMO_JF
department_head = list("Captain")
department_flag = MEDSCI
-// auto_deadmin_role_flags = DEADMIN_POSITION_HEAD
+ auto_deadmin_role_flags = DEADMIN_POSITION_HEAD
head_announce = list(RADIO_CHANNEL_MEDICAL)
faction = "Station"
total_positions = 1
diff --git a/code/modules/jobs/job_types/cyborg.dm b/code/modules/jobs/job_types/cyborg.dm
index c4d4337813..280d7616c2 100644
--- a/code/modules/jobs/job_types/cyborg.dm
+++ b/code/modules/jobs/job_types/cyborg.dm
@@ -1,7 +1,7 @@
/datum/job/cyborg
title = "Cyborg"
flag = CYBORG
-// auto_deadmin_role_flags = DEADMIN_POSITION_SILICON
+ auto_deadmin_role_flags = DEADMIN_POSITION_SILICON
department_flag = ENGSEC
faction = "Station"
total_positions = 0
diff --git a/code/modules/jobs/job_types/detective.dm b/code/modules/jobs/job_types/detective.dm
index c704326879..b56ebed191 100644
--- a/code/modules/jobs/job_types/detective.dm
+++ b/code/modules/jobs/job_types/detective.dm
@@ -1,7 +1,7 @@
/datum/job/detective
title = "Detective"
flag = DETECTIVE
-// auto_deadmin_role_flags = DEADMIN_POSITION_SECURITY
+ auto_deadmin_role_flags = DEADMIN_POSITION_SECURITY
department_head = list("Head of Security")
department_flag = ENGSEC
faction = "Station"
diff --git a/code/modules/jobs/job_types/head_of_personnel.dm b/code/modules/jobs/job_types/head_of_personnel.dm
index 07c1a12ced..ce05f199a2 100644
--- a/code/modules/jobs/job_types/head_of_personnel.dm
+++ b/code/modules/jobs/job_types/head_of_personnel.dm
@@ -1,7 +1,7 @@
/datum/job/hop
title = "Head of Personnel"
flag = HOP
-// auto_deadmin_role_flags = DEADMIN_POSITION_HEAD
+ auto_deadmin_role_flags = DEADMIN_POSITION_HEAD
department_head = list("Captain")
department_flag = CIVILIAN
head_announce = list(RADIO_CHANNEL_SERVICE)
diff --git a/code/modules/jobs/job_types/head_of_security.dm b/code/modules/jobs/job_types/head_of_security.dm
index d612b6a56d..57f248b760 100644
--- a/code/modules/jobs/job_types/head_of_security.dm
+++ b/code/modules/jobs/job_types/head_of_security.dm
@@ -1,7 +1,7 @@
/datum/job/hos
title = "Head of Security"
flag = HOS
-// auto_deadmin_role_flags = DEADMIN_POSITION_HEAD|DEADMIN_POSITION_SECURITY
+ auto_deadmin_role_flags = DEADMIN_POSITION_HEAD|DEADMIN_POSITION_SECURITY
department_head = list("Captain")
department_flag = ENGSEC
head_announce = list(RADIO_CHANNEL_SECURITY)
diff --git a/code/modules/jobs/job_types/quartermaster.dm b/code/modules/jobs/job_types/quartermaster.dm
index ff811d30d1..98343417c8 100644
--- a/code/modules/jobs/job_types/quartermaster.dm
+++ b/code/modules/jobs/job_types/quartermaster.dm
@@ -4,7 +4,7 @@
department_head = list("Captain")
department_flag = CIVILIAN
head_announce = list(RADIO_CHANNEL_SUPPLY)
-// auto_deadmin_role_flags = DEADMIN_POSITION_HEAD
+ auto_deadmin_role_flags = DEADMIN_POSITION_HEAD
faction = "Station"
total_positions = 1
spawn_positions = 1
diff --git a/code/modules/jobs/job_types/research_director.dm b/code/modules/jobs/job_types/research_director.dm
index e70e747ae6..51f5296b16 100644
--- a/code/modules/jobs/job_types/research_director.dm
+++ b/code/modules/jobs/job_types/research_director.dm
@@ -1,7 +1,7 @@
/datum/job/rd
title = "Research Director"
flag = RD_JF
-// auto_deadmin_role_flags = DEADMIN_POSITION_HEAD
+ auto_deadmin_role_flags = DEADMIN_POSITION_HEAD
department_head = list("Captain")
department_flag = MEDSCI
head_announce = list(RADIO_CHANNEL_SCIENCE)
diff --git a/code/modules/jobs/job_types/security_officer.dm b/code/modules/jobs/job_types/security_officer.dm
index 1823a2498a..f5d64b101a 100644
--- a/code/modules/jobs/job_types/security_officer.dm
+++ b/code/modules/jobs/job_types/security_officer.dm
@@ -1,7 +1,7 @@
/datum/job/officer
title = "Security Officer"
flag = OFFICER
-// auto_deadmin_role_flags = DEADMIN_POSITION_SECURITY
+ auto_deadmin_role_flags = DEADMIN_POSITION_SECURITY
department_head = list("Head of Security")
department_flag = ENGSEC
faction = "Station"
@@ -141,7 +141,7 @@ GLOBAL_LIST_INIT(available_depts, list(SEC_DEPT_ENGINEERING, SEC_DEPT_MEDICAL, S
//The helmet is necessary because /obj/item/clothing/head/helmet/sec is overwritten in the chameleon list by the standard helmet, which has the same name and icon state
-/obj/item/radio/headset/headset_sec/alt/department/Initialize()
+/obj/item/radio/headset/headset_sec/alt/department/Initialize(mapload)
. = ..()
wires = new/datum/wires/radio(src)
secure_radio_connections = new
diff --git a/code/modules/jobs/job_types/warden.dm b/code/modules/jobs/job_types/warden.dm
index 074ccac09f..26decc294f 100644
--- a/code/modules/jobs/job_types/warden.dm
+++ b/code/modules/jobs/job_types/warden.dm
@@ -1,7 +1,7 @@
/datum/job/warden
title = "Warden"
flag = WARDEN
-// auto_deadmin_role_flags = DEADMIN_POSITION_SECURITY
+ auto_deadmin_role_flags = DEADMIN_POSITION_SECURITY
department_head = list("Head of Security")
department_flag = ENGSEC
faction = "Station"
diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm
index fb6992dd4e..d752a6d027 100644
--- a/code/modules/library/lib_items.dm
+++ b/code/modules/library/lib_items.dm
@@ -24,7 +24,7 @@
opacity = FALSE
resistance_flags = FLAMMABLE
max_integrity = 200
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 0)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 0)
var/state = BOOKCASE_UNANCHORED
/// When enabled, books_to_load number of random books will be generated for this bookcase when first interacted with.
var/load_random_books = FALSE
@@ -175,7 +175,7 @@
/obj/structure/bookcase/manuals/engineering
name = "engineering manuals bookcase"
-/obj/structure/bookcase/manuals/engineering/Initialize()
+/obj/structure/bookcase/manuals/engineering/Initialize(mapload)
. = ..()
new /obj/item/book/manual/wiki/engineering_construction(src)
new /obj/item/book/manual/wiki/engineering_hacking(src)
@@ -188,7 +188,7 @@
/obj/structure/bookcase/manuals/research_and_development
name = "\improper R&D manuals bookcase"
-/obj/structure/bookcase/manuals/research_and_development/Initialize()
+/obj/structure/bookcase/manuals/research_and_development/Initialize(mapload)
. = ..()
new /obj/item/book/manual/wiki/research_and_development(src)
update_icon()
@@ -196,7 +196,7 @@
/obj/structure/bookcase/manuals/medical
name = "medical manuals bookcase"
-/obj/structure/bookcase/manuals/medical/Initialize()
+/obj/structure/bookcase/manuals/medical/Initialize(mapload)
. = ..()
new /obj/item/book/manual/wiki/medical_cloning(src)
update_icon()
diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm
index 1125d15bca..4f73b037c8 100644
--- a/code/modules/library/lib_machines.dm
+++ b/code/modules/library/lib_machines.dm
@@ -183,7 +183,7 @@
var/printer_cooldown = 0
COOLDOWN_DECLARE(library_console_topic_cooldown)
-/obj/machinery/computer/libraryconsole/bookmanagement/Initialize()
+/obj/machinery/computer/libraryconsole/bookmanagement/Initialize(mapload)
. = ..()
if(circuit)
circuit.name = "Book Inventory Management Console (Machine Board)"
diff --git a/code/modules/library/random_books.dm b/code/modules/library/random_books.dm
index d60609147a..be5e9ea6b5 100644
--- a/code/modules/library/random_books.dm
+++ b/code/modules/library/random_books.dm
@@ -1,7 +1,7 @@
/obj/item/book/manual/random
icon_state = "random_book"
-/obj/item/book/manual/random/Initialize()
+/obj/item/book/manual/random/Initialize(mapload)
..()
var/static/banned_books = list(/obj/item/book/manual/random, /obj/item/book/manual/nuclear, /obj/item/book/manual/wiki)
var/newtype = pick(subtypesof(/obj/item/book/manual) - banned_books)
diff --git a/code/modules/mapping/mapping_helpers/_mapping_helpers.dm b/code/modules/mapping/mapping_helpers/_mapping_helpers.dm
index a96b81528f..7bb281e5d9 100644
--- a/code/modules/mapping/mapping_helpers/_mapping_helpers.dm
+++ b/code/modules/mapping/mapping_helpers/_mapping_helpers.dm
@@ -4,7 +4,7 @@
icon_state = ""
var/late = FALSE
-/obj/effect/mapping_helpers/Initialize()
+/obj/effect/mapping_helpers/Initialize(mapload)
..()
return late ? INITIALIZE_HINT_LATELOAD : INITIALIZE_HINT_QDEL
@@ -83,7 +83,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_lava)
/obj/effect/mapping_helpers/no_lava
icon_state = "no_lava"
-/obj/effect/mapping_helpers/no_lava/Initialize()
+/obj/effect/mapping_helpers/no_lava/Initialize(mapload)
. = ..()
var/turf/T = get_turf(src)
T.flags_1 |= NO_LAVA_GEN_1
diff --git a/code/modules/mapping/mapping_helpers/baseturf.dm b/code/modules/mapping/mapping_helpers/baseturf.dm
index 4d79d3dba5..8bb44ae993 100644
--- a/code/modules/mapping/mapping_helpers/baseturf.dm
+++ b/code/modules/mapping/mapping_helpers/baseturf.dm
@@ -8,7 +8,7 @@
layer = POINT_LAYER
-/obj/effect/baseturf_helper/Initialize()
+/obj/effect/baseturf_helper/Initialize(mapload)
. = ..()
return INITIALIZE_HINT_LATELOAD
diff --git a/code/modules/mining/abandoned_crates.dm b/code/modules/mining/abandoned_crates.dm
index e97060b45d..3f213eb934 100644
--- a/code/modules/mining/abandoned_crates.dm
+++ b/code/modules/mining/abandoned_crates.dm
@@ -11,7 +11,7 @@
var/codelen = 4
tamperproof = 90
-/obj/structure/closet/crate/secure/loot/Initialize()
+/obj/structure/closet/crate/secure/loot/Initialize(mapload)
. = ..()
var/list/digits = list("1", "2", "3", "4", "5", "6", "7", "8", "9", "0")
code = ""
diff --git a/code/modules/mining/aux_base.dm b/code/modules/mining/aux_base.dm
index feb4b4b2da..494ca0e433 100644
--- a/code/modules/mining/aux_base.dm
+++ b/code/modules/mining/aux_base.dm
@@ -27,7 +27,7 @@ interface with the mining shuttle at the landing site if a mobile beacon is also
var/obj/item/gps/internal/base/locator
circuit = /obj/item/circuitboard/computer/auxiliary_base
-/obj/machinery/computer/auxillary_base/Initialize()
+/obj/machinery/computer/auxillary_base/Initialize(mapload)
. = ..()
locator = new(src)
diff --git a/code/modules/mining/aux_base_camera.dm b/code/modules/mining/aux_base_camera.dm
index be0a41427f..262e776c68 100644
--- a/code/modules/mining/aux_base_camera.dm
+++ b/code/modules/mining/aux_base_camera.dm
@@ -6,7 +6,7 @@
icon_state = "construction_drone"
var/area/starting_area
-/mob/camera/aiEye/remote/base_construction/Initialize()
+/mob/camera/aiEye/remote/base_construction/Initialize(mapload)
. = ..()
starting_area = get_area(loc)
diff --git a/code/modules/mining/equipment/explorer_gear.dm b/code/modules/mining/equipment/explorer_gear.dm
index dc52fb7f20..921cd9b6f0 100644
--- a/code/modules/mining/equipment/explorer_gear.dm
+++ b/code/modules/mining/equipment/explorer_gear.dm
@@ -9,7 +9,7 @@
cold_protection = CHEST|GROIN|LEGS|ARMS
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
hoodtype = /obj/item/clothing/head/hooded/explorer
- armor = list("melee" = 30, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 50, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 50)
+ armor = list(MELEE = 30, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 50, BIO = 100, RAD = 50, FIRE = 50, ACID = 50)
flags_inv = HIDEJUMPSUIT|HIDETAUR
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe)
resistance_flags = FIRE_PROOF
@@ -27,7 +27,7 @@
flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS
min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
cold_protection = HEAD
- armor = list("melee" = 30, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 50, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 50, "wound" = 10)
+ armor = list(MELEE = 30, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 50, BIO = 100, RAD = 50, FIRE = 50, ACID = 50, WOUND = 10)
resistance_flags = FIRE_PROOF
/obj/item/clothing/suit/hooded/explorer/standard
@@ -35,7 +35,7 @@
/obj/item/clothing/head/hooded/explorer/standard
-/obj/item/clothing/suit/hooded/explorer/standard/Initialize()
+/obj/item/clothing/suit/hooded/explorer/standard/Initialize(mapload)
. = ..()
AddComponent(/datum/component/armor_plate)
RegisterSignal(src, COMSIG_ARMOR_PLATED, .proc/upgrade_icon)
@@ -54,7 +54,7 @@
if(wearer.wear_suit == src)
wearer.update_inv_wear_suit()
-/obj/item/clothing/head/hooded/explorer/standard/Initialize()
+/obj/item/clothing/head/hooded/explorer/standard/Initialize(mapload)
. = ..()
AddComponent(/datum/component/armor_plate)
RegisterSignal(src, COMSIG_ARMOR_PLATED, .proc/upgrade_icon)
@@ -81,7 +81,7 @@
visor_flags_inv = HIDEFACIALHAIR
visor_flags_cover = MASKCOVERSMOUTH
actions_types = list(/datum/action/item_action/adjust)
- armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 5, "bio" = 50, "rad" = 0, "fire" = 20, "acid" = 40, "wound" = 5)
+ armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 5, BIO = 50, RAD = 0, FIRE = 20, ACID = 40, WOUND = 5)
resistance_flags = FIRE_PROOF
/obj/item/clothing/mask/gas/explorer/attack_self(mob/user)
@@ -91,7 +91,7 @@
..()
w_class = mask_adjusted ? WEIGHT_CLASS_NORMAL : WEIGHT_CLASS_SMALL
-/obj/item/clothing/mask/gas/explorer/folded/Initialize()
+/obj/item/clothing/mask/gas/explorer/folded/Initialize(mapload)
. = ..()
adjustmask()
@@ -105,10 +105,10 @@
resistance_flags = FIRE_PROOF | LAVA_PROOF | ACID_PROOF | GOLIATH_RESISTANCE
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_SNEK_TAURIC|STYLE_PAW_TAURIC
slowdown = 0
- armor = list("melee" = 70, "bullet" = 40, "laser" = 10, "energy" = 10, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100)
+ armor = list(MELEE = 70, BULLET = 40, LASER = 10, ENERGY = 10, BOMB = 50, BIO = 100, RAD = 100, FIRE = 100, ACID = 100)
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe)
-/obj/item/clothing/suit/space/hostile_environment/Initialize()
+/obj/item/clothing/suit/space/hostile_environment/Initialize(mapload)
. = ..()
AddComponent(/datum/component/spraycan_paintable)
START_PROCESSING(SSobj, src)
@@ -134,10 +134,10 @@
w_class = WEIGHT_CLASS_NORMAL
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
clothing_flags = THICKMATERIAL // no space protection
- armor = list("melee" = 70, "bullet" = 40, "laser" = 10, "energy" = 10, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100)
+ armor = list(MELEE = 70, BULLET = 40, LASER = 10, ENERGY = 10, BOMB = 50, BIO = 100, RAD = 100, FIRE = 100, ACID = 100)
resistance_flags = FIRE_PROOF | LAVA_PROOF
-/obj/item/clothing/head/helmet/space/hostile_environment/Initialize()
+/obj/item/clothing/head/helmet/space/hostile_environment/Initialize(mapload)
. = ..()
AddComponent(/datum/component/spraycan_paintable)
update_icon()
@@ -170,7 +170,7 @@
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
hoodtype = /obj/item/clothing/head/hooded/explorer/seva
- armor = list("melee" = 15, "bullet" = 10, "laser" = 10, "energy" = 10, "bomb" = 35, "bio" = 50, "rad" = 25, "fire" = 100, "acid" = 25)
+ armor = list(MELEE = 15, BULLET = 10, LASER = 10, ENERGY = 10, BOMB = 35, BIO = 50, RAD = 25, FIRE = 100, ACID = 25)
resistance_flags = FIRE_PROOF | GOLIATH_WEAKNESS
/obj/item/clothing/head/hooded/explorer/seva
@@ -179,7 +179,7 @@
icon_state = "seva"
item_state = "seva"
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
- armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 10, "bomb" = 35, "bio" = 50, "rad" = 25, "fire" = 100, "acid" = 25)
+ armor = list(MELEE = 10, BULLET = 10, LASER = 10, ENERGY = 10, BOMB = 35, BIO = 50, RAD = 25, FIRE = 100, ACID = 25)
resistance_flags = FIRE_PROOF | GOLIATH_WEAKNESS
/obj/item/clothing/mask/gas/seva
@@ -199,7 +199,7 @@
w_class = WEIGHT_CLASS_BULKY
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
hoodtype = /obj/item/clothing/head/hooded/explorer/exo
- armor = list("melee" = 55, "bullet" = 5, "laser" = 5, "energy" = 5, "bomb" = 40, "bio" = 25, "rad" = 10, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 55, BULLET = 5, LASER = 5, ENERGY = 5, BOMB = 40, BIO = 25, RAD = 10, FIRE = 0, ACID = 0)
resistance_flags = FIRE_PROOF | GOLIATH_RESISTANCE
/obj/item/clothing/head/hooded/explorer/exo
@@ -207,7 +207,7 @@
desc = "A robust helmet for fighting dangerous animals. Its design and material make it harder for a Goliath to keep their grip on the wearer."
icon_state = "exo"
item_state = "exo"
- armor = list("melee" = 55, "bullet" = 5, "laser" = 5, "energy" = 5, "bomb" = 40, "bio" = 25, "rad" = 10, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 55, BULLET = 5, LASER = 5, ENERGY = 5, BOMB = 40, BIO = 25, RAD = 10, FIRE = 0, ACID = 0)
resistance_flags = FIRE_PROOF | GOLIATH_RESISTANCE
/obj/item/clothing/mask/gas/exo
diff --git a/code/modules/mining/equipment/kinetic_crusher.dm b/code/modules/mining/equipment/kinetic_crusher.dm
index 409cdb825b..8ede497c83 100644
--- a/code/modules/mining/equipment/kinetic_crusher.dm
+++ b/code/modules/mining/equipment/kinetic_crusher.dm
@@ -34,7 +34,7 @@
detonation_damage = 60
wielded = 1
-/obj/item/kinetic_crusher/Initialize()
+/obj/item/kinetic_crusher/Initialize(mapload)
. = ..()
RegisterSignal(src, COMSIG_TWOHANDED_WIELD, .proc/on_wield)
RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, .proc/on_unwield)
@@ -133,7 +133,7 @@
C.total_damage += target_health - L.health //we did some damage, but let's not assume how much we did
new /obj/effect/temp_visual/kinetic_blast(get_turf(L))
var/backstab_dir = get_dir(user, L)
- var/def_check = L.getarmor(type = "bomb")
+ var/def_check = L.getarmor(type = BOMB)
if((user.dir & backstab_dir) && (L.dir & backstab_dir))
if(!QDELETED(C))
C.total_damage += detonation_damage + backstab_bonus //cheat a little and add the total before killing it, so certain mobs don't have much lower chances of giving an item
@@ -278,7 +278,7 @@
nodamage = TRUE
damage = 0 //We're just here to mark people. This is still a melee weapon.
damage_type = BRUTE
- flag = "bomb"
+ flag = BOMB
range = 6
log_override = TRUE
var/obj/item/kinetic_crusher/hammer_synced
diff --git a/code/modules/mining/equipment/marker_beacons.dm b/code/modules/mining/equipment/marker_beacons.dm
index 296513af8d..d8e54ae322 100644
--- a/code/modules/mining/equipment/marker_beacons.dm
+++ b/code/modules/mining/equipment/marker_beacons.dm
@@ -73,7 +73,7 @@ GLOBAL_LIST_INIT(marker_beacon_colors, list(
icon = 'icons/obj/lighting.dmi'
icon_state = "marker"
layer = BELOW_OPEN_DOOR_LAYER
- armor = list("melee" = 50, "bullet" = 75, "laser" = 75, "energy" = 75, "bomb" = 25, "bio" = 100, "rad" = 100, "fire" = 25, "acid" = 0)
+ armor = list(MELEE = 50, BULLET = 75, LASER = 75, ENERGY = 75, BOMB = 25, BIO = 100, RAD = 100, FIRE = 25, ACID = 0)
max_integrity = 50
anchored = TRUE
light_range = 2
diff --git a/code/modules/mining/equipment/mineral_scanner.dm b/code/modules/mining/equipment/mineral_scanner.dm
index b2cd840468..98818cb957 100644
--- a/code/modules/mining/equipment/mineral_scanner.dm
+++ b/code/modules/mining/equipment/mineral_scanner.dm
@@ -78,6 +78,6 @@
pixel_x = -224
pixel_y = -224
-/obj/effect/temp_visual/mining_overlay/Initialize()
+/obj/effect/temp_visual/mining_overlay/Initialize(mapload)
. = ..()
animate(src, alpha = 0, time = duration, easing = EASE_IN)
diff --git a/code/modules/mining/equipment/mining_tools.dm b/code/modules/mining/equipment/mining_tools.dm
index bb0ac0f957..0cb63d51a2 100644
--- a/code/modules/mining/equipment/mining_tools.dm
+++ b/code/modules/mining/equipment/mining_tools.dm
@@ -108,7 +108,7 @@
flags_1 = NONE
toolspeed = 0.5
-/obj/item/pickaxe/drill/cyborg/Initialize()
+/obj/item/pickaxe/drill/cyborg/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CYBORG_ITEM_TRAIT)
@@ -155,7 +155,7 @@
attack_verb = list("bashed", "bludgeoned", "thrashed", "whacked")
sharpness = SHARP_EDGED
-/obj/item/shovel/Initialize()
+/obj/item/shovel/Initialize(mapload)
. = ..()
AddComponent(/datum/component/butchering, 150, 40) //it's sharp, so it works, but barely.
diff --git a/code/modules/mining/equipment/regenerative_core.dm b/code/modules/mining/equipment/regenerative_core.dm
index 1de3a86702..4552d103b6 100644
--- a/code/modules/mining/equipment/regenerative_core.dm
+++ b/code/modules/mining/equipment/regenerative_core.dm
@@ -29,7 +29,7 @@
var/inert
var/preserved
-/obj/item/organ/regenerative_core/Initialize()
+/obj/item/organ/regenerative_core/Initialize(mapload)
. = ..()
addtimer(CALLBACK(src, .proc/inert_check), 2400)
@@ -116,7 +116,7 @@
desc = "A strange rock that crackles with power. It can be used to heal completely, but it will rapidly decay into uselessness."
icon_state = "legion_soul"
-/obj/item/organ/regenerative_core/legion/Initialize()
+/obj/item/organ/regenerative_core/legion/Initialize(mapload)
. = ..()
update_icon()
diff --git a/code/modules/mining/equipment/resonator.dm b/code/modules/mining/equipment/resonator.dm
index 16dd893c3a..fd9ff4c91e 100644
--- a/code/modules/mining/equipment/resonator.dm
+++ b/code/modules/mining/equipment/resonator.dm
@@ -111,7 +111,7 @@
layer = ABOVE_ALL_MOB_LAYER
duration = 4
-/obj/effect/temp_visual/resonance_crush/Initialize()
+/obj/effect/temp_visual/resonance_crush/Initialize(mapload)
. = ..()
transform = matrix()*1.5
animate(src, transform = matrix()*0.1, alpha = 50, time = 4)
diff --git a/code/modules/mining/equipment/survival_pod.dm b/code/modules/mining/equipment/survival_pod.dm
index ba4b02fcf4..033b6dd884 100644
--- a/code/modules/mining/equipment/survival_pod.dm
+++ b/code/modules/mining/equipment/survival_pod.dm
@@ -162,6 +162,26 @@
if(!state_open)
. += "sleeper_cover"
+//Lifeform Stasis Unit
+/obj/machinery/stasis/survival_pod
+ icon = 'icons/obj/lavaland/survival_pod.dmi'
+ icon_state = "sleeper"
+ mattress_state = null
+ buckle_lying = 270
+
+/obj/machinery/stasis/survival_pod/play_power_sound()
+ return
+
+/obj/machinery/stasis/survival_pod/update_icon()
+ return
+
+//NanoMed
+/obj/machinery/vending/wallmed/survival_pod
+ name = "survival pod medical supply"
+ desc = "Wall-mounted Medical Equipment dispenser. This one seems just a tiny bit smaller."
+ refill_canister = null
+ onstation = FALSE
+
//Computer
/obj/item/gps/computer
name = "pod computer"
@@ -327,7 +347,7 @@
/obj/item/phylactery,
/obj/item/banhammer)
-/obj/item/fakeartefact/Initialize()
+/obj/item/fakeartefact/Initialize(mapload)
. = ..()
var/obj/item/I = pick(possible)
name = initial(I.name)
diff --git a/code/modules/mining/fulton.dm b/code/modules/mining/fulton.dm
index adee8b66ce..18f816699c 100644
--- a/code/modules/mining/fulton.dm
+++ b/code/modules/mining/fulton.dm
@@ -161,7 +161,7 @@ GLOBAL_LIST_EMPTY(total_extraction_beacons)
density = FALSE
var/beacon_network = "station"
-/obj/structure/extraction_point/Initialize()
+/obj/structure/extraction_point/Initialize(mapload)
. = ..()
name += " ([rand(100,999)]) ([get_area_name(src, TRUE)])"
GLOB.total_extraction_beacons += src
diff --git a/code/modules/mining/laborcamp/laborstacker.dm b/code/modules/mining/laborcamp/laborstacker.dm
index 6ef4684921..97953e6297 100644
--- a/code/modules/mining/laborcamp/laborstacker.dm
+++ b/code/modules/mining/laborcamp/laborstacker.dm
@@ -15,7 +15,7 @@ GLOBAL_LIST(labor_sheet_values)
/// Needed to send messages to sec radio
var/obj/item/radio/Radio
-/obj/machinery/mineral/labor_claim_console/Initialize()
+/obj/machinery/mineral/labor_claim_console/Initialize(mapload)
. = ..()
Radio = new/obj/item/radio(src)
Radio.listening = FALSE
diff --git a/code/modules/mining/lavaland/ash_flora.dm b/code/modules/mining/lavaland/ash_flora.dm
index 9710773309..b9ab6463c7 100644
--- a/code/modules/mining/lavaland/ash_flora.dm
+++ b/code/modules/mining/lavaland/ash_flora.dm
@@ -20,7 +20,7 @@
var/regrowth_time_low = 8 MINUTES
var/regrowth_time_high = 16 MINUTES
-/obj/structure/flora/ash/Initialize()
+/obj/structure/flora/ash/Initialize(mapload)
. = ..()
base_icon = "[icon_state][rand(1, 4)]"
icon_state = base_icon
@@ -152,7 +152,7 @@
seed = /obj/item/seeds/lavaland/polypore
wine_power = 20
-/obj/item/reagent_containers/food/snacks/grown/ash_flora/Initialize()
+/obj/item/reagent_containers/food/snacks/grown/ash_flora/Initialize(mapload)
. = ..()
pixel_x = rand(-4, 4)
pixel_y = rand(-4, 4)
diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm
index 0b394e0fc5..6f71f04d9f 100644
--- a/code/modules/mining/lavaland/necropolis_chests.dm
+++ b/code/modules/mining/lavaland/necropolis_chests.dm
@@ -184,7 +184,7 @@
icon_state = "datadisk1"
var/modkit_design = /datum/design/unique_modkit
-/obj/item/disk/design_disk/modkit_disc/Initialize()
+/obj/item/disk/design_disk/modkit_disc/Initialize(mapload)
. = ..()
blueprints[1] = new modkit_design
@@ -383,7 +383,7 @@
wisp.forceMove(src)
SSblackbox.record_feedback("tally", "wisp_lantern", 1, "Returned")
-/obj/item/wisp_lantern/Initialize()
+/obj/item/wisp_lantern/Initialize(mapload)
. = ..()
wisp = new(src)
@@ -473,7 +473,7 @@
icon_state = "red_cube"
teleport_color = "#FD3F48"
-/obj/item/warp_cube/red/Initialize()
+/obj/item/warp_cube/red/Initialize(mapload)
. = ..()
if(!linked)
var/obj/item/warp_cube/blue = new(src.loc)
@@ -553,7 +553,7 @@
actions_types = list(/datum/action/item_action/immortality)
var/cooldown = 0
-/obj/item/immortality_talisman/Initialize()
+/obj/item/immortality_talisman/Initialize(mapload)
. = ..()
AddComponent(/datum/component/anti_magic, TRUE, TRUE, TRUE)
@@ -637,7 +637,7 @@
name = "paradox bag"
desc = "Somehow, it's in two places at once."
-/obj/item/shared_storage/red/Initialize()
+/obj/item/shared_storage/red/Initialize(mapload)
. = ..()
var/datum/component/storage/STR = AddComponent(/datum/component/storage/concrete)
STR.max_w_class = WEIGHT_CLASS_NORMAL
@@ -876,7 +876,7 @@
var/summon_cooldown = 0
var/list/mob/dead/observer/spirits
-/obj/item/melee/ghost_sword/Initialize()
+/obj/item/melee/ghost_sword/Initialize(mapload)
. = ..()
spirits = list()
START_PROCESSING(SSobj, src)
diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm
index 851d78004b..3d89377952 100644
--- a/code/modules/mining/machine_processing.dm
+++ b/code/modules/mining/machine_processing.dm
@@ -65,7 +65,7 @@
var/obj/machinery/mineral/processing_unit/machine = null
var/machinedir = EAST
-/obj/machinery/mineral/processing_unit_console/Initialize()
+/obj/machinery/mineral/processing_unit_console/Initialize(mapload)
. = ..()
machine = locate(/obj/machinery/mineral/processing_unit, get_step(src, machinedir))
if (machine)
@@ -127,7 +127,7 @@
var/selected_alloy = null
var/datum/techweb/stored_research
-/obj/machinery/mineral/processing_unit/Initialize()
+/obj/machinery/mineral/processing_unit/Initialize(mapload)
. = ..()
proximity_monitor = new(src, 1)
AddComponent(/datum/component/material_container, list(/datum/material/iron, /datum/material/glass, /datum/material/silver, /datum/material/gold, /datum/material/diamond, /datum/material/plasma, /datum/material/uranium, /datum/material/bananium, /datum/material/titanium, /datum/material/bluespace), INFINITY, TRUE, /obj/item/stack)
diff --git a/code/modules/mining/machine_stacking.dm b/code/modules/mining/machine_stacking.dm
index 40f4db3660..c06a090314 100644
--- a/code/modules/mining/machine_stacking.dm
+++ b/code/modules/mining/machine_stacking.dm
@@ -12,7 +12,7 @@
/// Direction for which console looks for stacking machine to connect to
var/machinedir = SOUTHEAST
-/obj/machinery/mineral/stacking_unit_console/Initialize()
+/obj/machinery/mineral/stacking_unit_console/Initialize(mapload)
. = ..()
machine = locate(/obj/machinery/mineral/stacking_machine, get_step(src, machinedir))
if (machine)
diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm
index c7ddaebe2d..491d647c37 100644
--- a/code/modules/mining/machine_vending.dm
+++ b/code/modules/mining/machine_vending.dm
@@ -88,7 +88,7 @@
src.equipment_path = path
src.cost = cost
-/obj/machinery/mineral/equipment_vendor/Initialize()
+/obj/machinery/mineral/equipment_vendor/Initialize(mapload)
. = ..()
build_inventory()
@@ -281,7 +281,7 @@
name = "golem ship equipment vendor"
circuit = /obj/item/circuitboard/machine/mining_equipment_vendor/golem
-/obj/machinery/mineral/equipment_vendor/golem/Initialize()
+/obj/machinery/mineral/equipment_vendor/golem/Initialize(mapload)
. = ..()
desc += "\nIt seems a few selections have been added."
prize_list += list(
diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm
index e9c38398fb..091e80aef6 100644
--- a/code/modules/mining/mine_items.dm
+++ b/code/modules/mining/mine_items.dm
@@ -8,7 +8,7 @@
var/set_luminosity = 8
var/set_cap = 0
-/obj/effect/light_emitter/Initialize()
+/obj/effect/light_emitter/Initialize(mapload)
. = ..()
set_light(set_luminosity, set_cap)
diff --git a/code/modules/mining/minebot.dm b/code/modules/mining/minebot.dm
index 8037a22a52..69b5de963d 100644
--- a/code/modules/mining/minebot.dm
+++ b/code/modules/mining/minebot.dm
@@ -39,7 +39,7 @@
var/light_on = 0
var/obj/item/gun/energy/kinetic_accelerator/minebot/stored_gun
-/mob/living/simple_animal/hostile/mining_drone/Initialize()
+/mob/living/simple_animal/hostile/mining_drone/Initialize(mapload)
. = ..()
stored_gun = new(src)
var/datum/action/innate/minedrone/toggle_light/toggle_light_action = new()
@@ -131,7 +131,8 @@
to_chat(M, "[src] has been set to attack hostile wildlife.")
return
-/mob/living/simple_animal/hostile/mining_drone/CanPass(atom/movable/O)
+/mob/living/simple_animal/hostile/mining_drone/CanAllowThrough(atom/movable/O)
+ . = ..()
if(istype(O, /obj/item/projectile/kinetic))
var/obj/item/projectile/kinetic/K = O
if(K.kinetic_gun)
@@ -141,7 +142,6 @@
return TRUE
if(istype(O, /obj/item/projectile/destabilizer))
return TRUE
- return ..()
/mob/living/simple_animal/hostile/mining_drone/proc/SetCollectBehavior()
mode = MINEDRONE_COLLECT
diff --git a/code/modules/mining/mint.dm b/code/modules/mining/mint.dm
index f8a4ba4a72..8f3431ba1b 100644
--- a/code/modules/mining/mint.dm
+++ b/code/modules/mining/mint.dm
@@ -16,7 +16,7 @@
var/chosen = /datum/material/iron //which material will be used to make coins
-/obj/machinery/mineral/mint/Initialize()
+/obj/machinery/mineral/mint/Initialize(mapload)
. = ..()
AddComponent(/datum/component/material_container, list(
/datum/material/iron,
diff --git a/code/modules/mining/money_bag.dm b/code/modules/mining/money_bag.dm
index 7be07f2bf9..b9365d2f9d 100644
--- a/code/modules/mining/money_bag.dm
+++ b/code/modules/mining/money_bag.dm
@@ -9,7 +9,7 @@
max_integrity = 100
w_class = WEIGHT_CLASS_BULKY
-/obj/item/storage/bag/money/Initialize()
+/obj/item/storage/bag/money/Initialize(mapload)
. = ..()
if(prob(20))
icon_state = "moneybagalt"
diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm
index 83344949ac..056ad2d642 100644
--- a/code/modules/mining/ores_coins.dm
+++ b/code/modules/mining/ores_coins.dm
@@ -384,7 +384,7 @@ GLOBAL_LIST_INIT(sand_recipes, list(\
var/coinflip
item_flags = NO_MAT_REDEMPTION //You know, it's kind of a problem that money is worth more extrinsicly than intrinsically in this universe.
-/obj/item/coin/Initialize()
+/obj/item/coin/Initialize(mapload)
. = ..()
coinflip = pick(sideslist)
icon_state = "coin_[coinflip]"
diff --git a/code/modules/mob/dead/dead.dm b/code/modules/mob/dead/dead.dm
index 90b6da26fa..b455787e5c 100644
--- a/code/modules/mob/dead/dead.dm
+++ b/code/modules/mob/dead/dead.dm
@@ -7,7 +7,7 @@ INITIALIZE_IMMEDIATE(/mob/dead)
move_resist = INFINITY
throwforce = 0
-/mob/dead/Initialize()
+/mob/dead/Initialize(mapload)
SHOULD_CALL_PARENT(FALSE)
if(flags_1 & INITIALIZED_1)
stack_trace("Warning: [src]([type]) initialized multiple times!")
@@ -121,6 +121,9 @@ INITIALIZE_IMMEDIATE(/mob/dead)
if (isturf(T))
update_z(T.z)
+/mob/dead/auto_deadmin_on_login()
+ return
+
/mob/dead/Logout()
update_z(null)
return ..()
diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm
index 74a8c5859a..9c17578aad 100644
--- a/code/modules/mob/dead/new_player/new_player.dm
+++ b/code/modules/mob/dead/new_player/new_player.dm
@@ -19,7 +19,7 @@
//is there a result we want to read from the age gate
var/age_gate_result
-/mob/dead/new_player/Initialize()
+/mob/dead/new_player/Initialize(mapload)
if(client && SSticker.state == GAME_STATE_STARTUP)
var/atom/movable/screen/splash/S = new(client, TRUE, TRUE)
S.Fade(TRUE)
@@ -762,7 +762,7 @@
client.prefs.scars_list["[cur_scar_index]"] = valid_scars
client.prefs.save_character()
-
+
client.prefs.copy_to(H, initial_spawn = TRUE)
H.dna.update_dna_identity()
if(mind)
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index 624db8caf5..4b228e1eb3 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -166,9 +166,6 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER)
QDEL_NULL(spawners_menu)
return ..()
-/mob/dead/CanPass(atom/movable/mover, turf/target)
- return 1
-
/*
* This proc will update the icon of the ghost itself, with hair overlays, as well as the ghost image.
* Please call update_icon(icon_state) from now on when you want to update the icon_state of the ghost,
diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm
index 849bbb9e38..203c578c2c 100644
--- a/code/modules/mob/inventory.dm
+++ b/code/modules/mob/inventory.dm
@@ -461,7 +461,7 @@
//any cost it has isn't a worry
/mob/proc/change_number_of_hands(amt)
if(amt < held_items.len)
- for(var/i in held_items.len to amt step -1)
+ for(var/i in held_items.len to (amt + 1) step -1)
dropItemToGround(held_items[i])
held_items.len = amt
@@ -472,14 +472,14 @@
/mob/living/carbon/human/change_number_of_hands(amt)
var/old_limbs = held_items.len
if(amt < old_limbs)
- for(var/i in hand_bodyparts.len to amt step -1)
+ for(var/i in hand_bodyparts.len to (amt + 1) step -1)
var/obj/item/bodypart/BP = hand_bodyparts[i]
BP.dismember()
hand_bodyparts[i] = null
hand_bodyparts.len = amt
else if(amt > old_limbs)
hand_bodyparts.len = amt
- for(var/i in old_limbs+1 to amt)
+ for(var/i in (old_limbs + 1) to amt)
var/path = /obj/item/bodypart/l_arm
if(!(i % 2))
path = /obj/item/bodypart/r_arm
diff --git a/code/modules/mob/living/bloodcrawl.dm b/code/modules/mob/living/bloodcrawl.dm
index 13803a63d2..6f2f7094e6 100644
--- a/code/modules/mob/living/bloodcrawl.dm
+++ b/code/modules/mob/living/bloodcrawl.dm
@@ -144,7 +144,7 @@
icon = 'icons/effects/blood.dmi'
item_flags = ABSTRACT
-/obj/item/bloodcrawl/Initialize()
+/obj/item/bloodcrawl/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, ABSTRACT_ITEM_TRAIT)
diff --git a/code/modules/mob/living/brain/MMI.dm b/code/modules/mob/living/brain/MMI.dm
index f38f326bc6..f5a2368a60 100644
--- a/code/modules/mob/living/brain/MMI.dm
+++ b/code/modules/mob/living/brain/MMI.dm
@@ -8,7 +8,7 @@
var/obj/item/radio/radio = null //Let's give it a radio.
var/mob/living/brain/brainmob = null //The current occupant.
var/mob/living/silicon/robot = null //Appears unused.
- var/obj/mecha = null //This does not appear to be used outside of reference in mecha.dm.
+ var/obj/vehicle/sealed/mecha = null //This does not appear to be used outside of reference in mecha.dm.
var/obj/item/organ/brain/brain = null //The actual brain
var/datum/ai_laws/laws = new()
var/force_replace_ai_name = FALSE
@@ -32,7 +32,7 @@
else
. += "mmi_dead"
-/obj/item/mmi/Initialize()
+/obj/item/mmi/Initialize(mapload)
. = ..()
radio = new(src) //Spawns a radio inside the MMI.
radio.broadcasting = 0 //researching radio mmis turned the robofabs into radios because this didnt start as 0.
@@ -215,7 +215,7 @@
desc = "Syndicate's own brand of MMI. It enforces laws designed to help Syndicate agents achieve their goals upon cyborgs and AIs created with it."
overrides_aicore_laws = TRUE
-/obj/item/mmi/syndie/Initialize()
+/obj/item/mmi/syndie/Initialize(mapload)
. = ..()
laws = new /datum/ai_laws/syndicate_override()
radio.on = 0
diff --git a/code/modules/mob/living/brain/brain.dm b/code/modules/mob/living/brain/brain.dm
index 91fab5f2ec..ca9edead48 100644
--- a/code/modules/mob/living/brain/brain.dm
+++ b/code/modules/mob/living/brain/brain.dm
@@ -9,7 +9,7 @@
possible_a_intents = list(INTENT_HELP, INTENT_HARM) //for mechas
speech_span = SPAN_ROBOT
-/mob/living/brain/Initialize()
+/mob/living/brain/Initialize(mapload)
. = ..()
create_dna(src)
if(stored_dna.blood_type)
@@ -41,7 +41,7 @@
return ..()
/mob/living/brain/update_mobility()
- return ((mobility_flags = (container?.in_contents_of(/obj/mecha)? MOBILITY_FLAGS_DEFAULT : NONE)))
+ return ((mobility_flags = (container?.in_contents_of(/obj/vehicle/sealed/mecha)? MOBILITY_FLAGS_DEFAULT : NONE)))
/mob/living/brain/ex_act(severity, target, origin) //you cant blow up brainmobs because it makes transfer_to() freak out when borgs blow up.
return
@@ -71,13 +71,6 @@
if(stored_dna)
stored_dna.real_name = real_name
-/mob/living/brain/ClickOn(atom/A, params)
- ..()
- if(container)
- var/obj/mecha/M = container.mecha
- if(istype(M))
- return M.click_action(A,src,params)
-
/mob/living/brain/forceMove(atom/destination)
if(container)
return container.forceMove(destination)
@@ -98,7 +91,7 @@
if(!container)
return
if (container.mecha)
- var/obj/mecha/M = container.mecha
+ var/obj/vehicle/sealed/mecha/M = container.mecha
if(M.mouse_pointer)
client.mouse_pointer_icon = M.mouse_pointer
if (client && ranged_ability && ranged_ability.ranged_mousepointer)
diff --git a/code/modules/mob/living/brain/posibrain.dm b/code/modules/mob/living/brain/posibrain.dm
index e1eb09405a..b3749b4a41 100644
--- a/code/modules/mob/living/brain/posibrain.dm
+++ b/code/modules/mob/living/brain/posibrain.dm
@@ -28,7 +28,7 @@ GLOBAL_VAR(posibrain_notify_cooldown)
var/list/possible_names //If you leave this blank, it will use the global posibrain names
var/picked_name
-/obj/item/mmi/posibrain/Initialize()
+/obj/item/mmi/posibrain/Initialize(mapload)
. = ..()
brainmob = new(src)
var/new_name
diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm
index e9a62d209b..1b7207d7eb 100644
--- a/code/modules/mob/living/carbon/alien/alien.dm
+++ b/code/modules/mob/living/carbon/alien/alien.dm
@@ -34,7 +34,7 @@
var/static/regex/alien_name_regex = new("alien (larva|sentinel|drone|hunter|praetorian|queen)( \\(\\d+\\))?")
-/mob/living/carbon/alien/Initialize()
+/mob/living/carbon/alien/Initialize(mapload)
add_verb(src, /mob/living/proc/mob_sleep)
add_verb(src, /mob/living/proc/lay_down)
diff --git a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm
index 28d311b034..6598dd6a54 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm
@@ -17,7 +17,7 @@ Doesn't work on other aliens/AI.*/
action_icon_state = "spell_default"
action_background_icon_state = "bg_alien"
-/obj/effect/proc_holder/alien/Initialize()
+/obj/effect/proc_holder/alien/Initialize(mapload)
. = ..()
action = new(src)
diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm
index cf024d707d..3e8a5d8bdb 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm
@@ -6,7 +6,7 @@
icon_state = "aliend"
meleeKnockdownPower = 80
-/mob/living/carbon/alien/humanoid/drone/Initialize()
+/mob/living/carbon/alien/humanoid/drone/Initialize(mapload)
AddAbility(new/obj/effect/proc_holder/alien/evolve(null))
. = ..()
diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/praetorian.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/praetorian.dm
index 796a78d566..3e0faf44f0 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/caste/praetorian.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/caste/praetorian.dm
@@ -5,7 +5,7 @@
health = 250
icon_state = "alienp"
-/mob/living/carbon/alien/humanoid/royal/praetorian/Initialize()
+/mob/living/carbon/alien/humanoid/royal/praetorian/Initialize(mapload)
real_name = name
AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/repulse/xeno(src))
AddAbility(new /obj/effect/proc_holder/alien/royal/praetorian/evolve())
diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm
index 67cf6f7d25..9f8b9d6845 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm
@@ -6,7 +6,7 @@
icon_state = "aliens"
meleeSlashHumanPower = 15
-/mob/living/carbon/alien/humanoid/sentinel/Initialize()
+/mob/living/carbon/alien/humanoid/sentinel/Initialize(mapload)
AddAbility(new /obj/effect/proc_holder/alien/sneak)
. = ..()
diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
index 343b95f05d..71b1d09fad 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
@@ -28,7 +28,7 @@ GLOBAL_LIST_INIT(strippable_alien_humanoid_items, create_strippable_list(list(
)))
//This is fine right now, if we're adding organ specific damage this needs to be updated
-/mob/living/carbon/alien/humanoid/Initialize()
+/mob/living/carbon/alien/humanoid/Initialize(mapload)
AddAbility(new/obj/effect/proc_holder/alien/regurgitate(null))
. = ..()
diff --git a/code/modules/mob/living/carbon/alien/humanoid/queen.dm b/code/modules/mob/living/carbon/alien/humanoid/queen.dm
index bcc83f14f9..7717180e6c 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/queen.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/queen.dm
@@ -28,7 +28,7 @@
icon_state = "alienq"
var/datum/action/small_sprite/smallsprite = new/datum/action/small_sprite/queen()
-/mob/living/carbon/alien/humanoid/royal/queen/Initialize()
+/mob/living/carbon/alien/humanoid/royal/queen/Initialize(mapload)
//there should only be one queen
for(var/mob/living/carbon/alien/humanoid/royal/queen/Q in GLOB.carbon_list)
if(Q == src)
@@ -110,7 +110,7 @@
item_flags = ABSTRACT | DROPDEL
icon = 'icons/mob/alien.dmi'
-/obj/item/queenpromote/Initialize()
+/obj/item/queenpromote/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, ABSTRACT_ITEM_TRAIT)
diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm
index 7a610ac421..ce38f615f7 100644
--- a/code/modules/mob/living/carbon/alien/larva/larva.dm
+++ b/code/modules/mob/living/carbon/alien/larva/larva.dm
@@ -21,7 +21,7 @@
bodyparts = list(/obj/item/bodypart/chest/larva, /obj/item/bodypart/head/larva)
//This is fine right now, if we're adding organ specific damage this needs to be updated
-/mob/living/carbon/alien/larva/Initialize()
+/mob/living/carbon/alien/larva/Initialize(mapload)
AddAbility(new/obj/effect/proc_holder/alien/hide(null))
AddAbility(new/obj/effect/proc_holder/alien/larva_evolve(null))
diff --git a/code/modules/mob/living/carbon/alien/organs.dm b/code/modules/mob/living/carbon/alien/organs.dm
index 41c3882de6..2db912fe7e 100644
--- a/code/modules/mob/living/carbon/alien/organs.dm
+++ b/code/modules/mob/living/carbon/alien/organs.dm
@@ -4,7 +4,7 @@
var/list/alien_powers = list()
organ_flags = ORGAN_NO_SPOIL|ORGAN_EDIBLE
-/obj/item/organ/alien/Initialize()
+/obj/item/organ/alien/Initialize(mapload)
. = ..()
for(var/A in alien_powers)
if(ispath(A))
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index cc17928a98..e12a28d01a 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -1,7 +1,7 @@
/mob/living/carbon
blood_volume = BLOOD_VOLUME_NORMAL
-/mob/living/carbon/Initialize()
+/mob/living/carbon/Initialize(mapload)
. = ..()
create_reagents(1000, NONE, NO_REAGENTS_VALUE)
update_body_parts() //to update the carbon's new bodyparts appearance
diff --git a/code/modules/mob/living/carbon/damage_procs.dm b/code/modules/mob/living/carbon/damage_procs.dm
index 4167fdbde1..1a159a56bb 100644
--- a/code/modules/mob/living/carbon/damage_procs.dm
+++ b/code/modules/mob/living/carbon/damage_procs.dm
@@ -209,7 +209,7 @@
if(!parts.len)
return
var/obj/item/bodypart/picked = pick(parts)
- if(picked.receive_damage(brute, burn, stamina,check_armor ? run_armor_check(picked, (brute ? "melee" : burn ? "fire" : stamina ? "bullet" : null)) : FALSE, wound_bonus = wound_bonus, bare_wound_bonus = bare_wound_bonus, sharpness = sharpness))
+ if(picked.receive_damage(brute, burn, stamina,check_armor ? run_armor_check(picked, (brute ? MELEE : burn ? FIRE : stamina ? BULLET : null)) : FALSE, wound_bonus = wound_bonus, bare_wound_bonus = bare_wound_bonus, sharpness = sharpness))
update_damage_overlays()
//Heal MANY bodyparts, in random order
diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm
index b7d9b0f61a..4ca45ceabd 100644
--- a/code/modules/mob/living/carbon/human/death.dm
+++ b/code/modules/mob/living/carbon/human/death.dm
@@ -43,10 +43,6 @@ GLOBAL_LIST_EMPTY(dead_players_during_shift)
if(client && !suiciding && !(client in GLOB.dead_players_during_shift))
GLOB.dead_players_during_shift += client
GLOB.deaths_during_shift++
- if(ismecha(loc))
- var/obj/mecha/M = loc
- if(M.occupant == src)
- M.go_out()
if(!QDELETED(dna)) //The gibbed param is bit redundant here since dna won't exist at this point if they got deleted.
dna.species.spec_death(gibbed, src)
diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm
index 3015d1edc3..4fb52f31c3 100644
--- a/code/modules/mob/living/carbon/human/emote.dm
+++ b/code/modules/mob/living/carbon/human/emote.dm
@@ -6,7 +6,7 @@
/datum/emote/living/carbon/human/cry/run_emote(mob/user, params)
. = ..()
- if(. && isipcperson(user))
+ if(. && isrobotic(user))
do_fake_sparks(5,FALSE,user)
/datum/emote/living/carbon/human/dap
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 0f149928df..c60e4c6cb2 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -5,7 +5,7 @@
icon_state = "caucasian_m"
SET_APPEARANCE_FLAGS(KEEP_TOGETHER|TILE_BOUND|PIXEL_SCALE)
-/mob/living/carbon/human/Initialize()
+/mob/living/carbon/human/Initialize(mapload)
add_verb(src, /mob/living/proc/mob_sleep)
add_verb(src, /mob/living/proc/lay_down)
add_verb(src, /mob/living/carbon/human/verb/underwear_toggle)
@@ -903,7 +903,7 @@
/mob/living/carbon/human/species
var/race = null
-/mob/living/carbon/human/species/Initialize()
+/mob/living/carbon/human/species/Initialize(mapload)
. = ..()
set_species(race)
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index 71573abc90..5b6fae8e1b 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -53,7 +53,7 @@
dna.species.on_hit(P, src)
-/mob/living/carbon/human/bullet_act(obj/item/projectile/P, def_zone)
+/mob/living/carbon/human/bullet_act(obj/item/projectile/P, def_zone, piercing_hit = FALSE)
if(dna && dna.species)
var/spec_return = dna.species.bullet_act(P, src)
if(spec_return)
@@ -61,7 +61,7 @@
if(mind) //martial art stuff
if(mind.martial_art && mind.martial_art.can_use(src)) //Some martial arts users can deflect projectiles!
- var/martial_art_result = mind.martial_art.on_projectile_hit(src, P, def_zone)
+ var/martial_art_result = mind.martial_art.on_projectile_hit(src, P, def_zone, piercing_hit)
if(!(martial_art_result == BULLET_ACT_HIT))
return martial_art_result
return ..()
@@ -163,7 +163,7 @@
if(can_inject(M, 1, affecting))//Thick suits can stop monkey bites.
if(..()) //successful monkey bite, this handles disease contraction.
var/damage = rand(1, 3)
- apply_damage(damage, BRUTE, affecting, run_armor_check(affecting, "melee"))
+ apply_damage(damage, BRUTE, affecting, run_armor_check(affecting, MELEE))
return 1
/mob/living/carbon/human/attack_alien(mob/living/carbon/alien/humanoid/M)
@@ -183,7 +183,7 @@
var/obj/item/bodypart/affecting = get_bodypart(ran_zone(M.zone_selected))
if(!affecting)
affecting = get_bodypart(BODY_ZONE_CHEST)
- var/armor_block = run_armor_check(affecting, "melee", null, null,10)
+ var/armor_block = run_armor_check(affecting, MELEE, null, null,10)
playsound(loc, 'sound/weapons/slice.ogg', 25, 1, -1)
visible_message("[M] has slashed at [src]!", \
@@ -219,7 +219,7 @@
var/obj/item/bodypart/affecting = get_bodypart(ran_zone(L.zone_selected))
if(!affecting)
affecting = get_bodypart(BODY_ZONE_CHEST)
- var/armor_block = run_armor_check(affecting, "melee")
+ var/armor_block = run_armor_check(affecting, MELEE)
apply_damage(damage, BRUTE, affecting, armor_block)
@@ -233,7 +233,7 @@
var/obj/item/bodypart/affecting = get_bodypart(ran_zone(dam_zone))
if(!affecting)
affecting = get_bodypart(BODY_ZONE_CHEST)
- var/armor = run_armor_check(affecting, "melee", armour_penetration = M.armour_penetration)
+ var/armor = run_armor_check(affecting, MELEE, armour_penetration = M.armour_penetration)
apply_damage(damage, M.melee_damage_type, affecting, armor, wound_bonus = M.wound_bonus, bare_wound_bonus = M.bare_wound_bonus, sharpness = M.sharpness)
/mob/living/carbon/human/attack_slime(mob/living/simple_animal/slime/M)
@@ -253,51 +253,9 @@
var/obj/item/bodypart/affecting = get_bodypart(ran_zone(dam_zone))
if(!affecting)
affecting = get_bodypart(BODY_ZONE_CHEST)
- var/armor_block = run_armor_check(affecting, "melee")
+ var/armor_block = run_armor_check(affecting, MELEE)
apply_damage(damage, BRUTE, affecting, armor_block, wound_bonus=wound_mod)
-/mob/living/carbon/human/mech_melee_attack(obj/mecha/M)
- if(M.occupant.a_intent == INTENT_HARM)
- if(HAS_TRAIT(M.occupant, TRAIT_PACIFISM))
- to_chat(M.occupant, "You don't want to harm other living beings!")
- return
- M.do_attack_animation(src)
- if(M.damtype == "brute")
- step_away(src,M,15)
- var/obj/item/bodypart/temp = get_bodypart(pick(BODY_ZONE_CHEST, BODY_ZONE_CHEST, BODY_ZONE_CHEST, BODY_ZONE_HEAD))
- if(temp)
- var/update = 0
- var/dmg = rand(M.force/2, M.force)
- var/atom/throw_target = get_edge_target_turf(src, M.dir)
- switch(M.damtype)
- if("brute")
- if(M.force > 35) // durand and other heavy mechas
- DefaultCombatKnockdown(50)
- src.throw_at(throw_target, rand(1,5), 7)
- else if(M.force >= 20 && CHECK_MOBILITY(src, MOBILITY_STAND)) // lightweight mechas like gygax
- DefaultCombatKnockdown(30)
- src.throw_at(throw_target, rand(1,3), 7)
- update |= temp.receive_damage(dmg, 0)
- playsound(src, 'sound/weapons/punch4.ogg', 50, 1)
- if("fire")
- update |= temp.receive_damage(0, dmg)
- playsound(src, 'sound/items/welder.ogg', 50, 1)
- if("tox")
- M.mech_toxin_damage(src)
- else
- return
- if(update)
- update_damage_overlays()
- updatehealth()
-
- visible_message("[M.name] has hit [src]!", \
- "[M.name] has hit you!", null, COMBAT_MESSAGE_RANGE, target = M,
- target_message = "You have hit [src]!")
- log_combat(M.occupant, src, "attacked", M, "(INTENT: [uppertext(M.occupant.a_intent)]) (DAMTYPE: [uppertext(M.damtype)])")
-
- else
- ..()
-
/mob/living/carbon/human/ex_act(severity, target, origin)
if(TRAIT_BOMBIMMUNE in dna.species.species_traits)
@@ -307,7 +265,7 @@
return
var/brute_loss = 0
var/burn_loss = 0
- var/bomb_armor = getarmor(null, "bomb")
+ var/bomb_armor = getarmor(null, BOMB)
//200 max knockdown for EXPLODE_HEAVY
//160 max knockdown for EXPLODE_LIGHT
@@ -328,7 +286,7 @@
brute_loss = 500
var/atom/throw_target = get_edge_target_turf(src, get_dir(src, get_step_away(src, src)))
throw_at(throw_target, 200, 4)
- damage_clothes(400 - bomb_armor, BRUTE, "bomb")
+ damage_clothes(400 - bomb_armor, BRUTE, BOMB)
if (EXPLODE_HEAVY)
brute_loss = 60
@@ -336,7 +294,7 @@
if(bomb_armor)
brute_loss = 30*(2 - round(bomb_armor*0.01, 0.05))
burn_loss = brute_loss //damage gets reduced from 120 to up to 60 combined brute+burn
- damage_clothes(200 - bomb_armor, BRUTE, "bomb")
+ damage_clothes(200 - bomb_armor, BRUTE, BOMB)
if (!istype(ears, /obj/item/clothing/ears/earmuffs))
adjustEarDamage(30, 120)
Unconscious(20) //short amount of time for follow up attacks against elusive enemies like wizards
@@ -347,7 +305,7 @@
brute_loss = 30
if(bomb_armor)
brute_loss = 15*(2 - round(bomb_armor*0.01, 0.05))
- damage_clothes(max(50 - bomb_armor, 0), BRUTE, "bomb")
+ damage_clothes(max(50 - bomb_armor, 0), BRUTE, BOMB)
if (!istype(ears, /obj/item/clothing/ears/earmuffs))
adjustEarDamage(15,60)
Knockdown((160 - (bomb_armor * 1.6)) / 4) //100 bomb armor will prevent knockdown altogether
@@ -360,7 +318,7 @@
var/max_limb_loss = round(4/severity) //so you don't lose four limbs at severity 3.
for(var/X in bodyparts)
var/obj/item/bodypart/BP = X
- if(prob(50/severity) && !prob(getarmor(BP, "bomb")) && BP.body_zone != BODY_ZONE_HEAD && BP.body_zone != BODY_ZONE_CHEST)
+ if(prob(50/severity) && !prob(getarmor(BP, BOMB)) && BP.body_zone != BODY_ZONE_HEAD && BP.body_zone != BODY_ZONE_CHEST)
BP.brute_dam = BP.max_damage
BP.dismember()
max_limb_loss--
@@ -374,7 +332,7 @@
show_message("The blob attacks you!")
var/dam_zone = pick(BODY_ZONE_CHEST, BODY_ZONE_PRECISE_L_HAND, BODY_ZONE_PRECISE_R_HAND, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)
var/obj/item/bodypart/affecting = get_bodypart(ran_zone(dam_zone))
- apply_damage(5, BRUTE, affecting, run_armor_check(affecting, "melee"))
+ apply_damage(5, BRUTE, affecting, run_armor_check(affecting, MELEE))
///Calculates the siemens coeff based on clothing and species, can also restart hearts.
diff --git a/code/modules/mob/living/carbon/human/innate_abilities/customization.dm b/code/modules/mob/living/carbon/human/innate_abilities/customization.dm
index 583577840f..621dc58650 100644
--- a/code/modules/mob/living/carbon/human/innate_abilities/customization.dm
+++ b/code/modules/mob/living/carbon/human/innate_abilities/customization.dm
@@ -22,7 +22,7 @@
/datum/action/innate/ability/humanoid_customization/proc/change_form()
var/mob/living/carbon/human/H = owner
- var/select_alteration = input(owner, "Select what part of your form to alter", "Form Alteration", "cancel") in list("Body Color", "Eye Color","Hair Style", "Genitals", "Tail", "Snout", "Markings", "Ears", "Taur body", "Penis", "Vagina", "Penis Length", "Breast Size", "Breast Shape", "Cancel")
+ var/select_alteration = input(owner, "Select what part of your form to alter", "Form Alteration", "cancel") in list("Body Color", "Eye Color","Hair Style", "Genitals", "Tail", "Snout", "Wings", "Markings", "Ears", "Taur body", "Penis", "Vagina", "Penis Length", "Breast Size", "Breast Shape", "Butt Size", "Cancel")
if(select_alteration == "Body Color")
var/new_color = input(owner, "Choose your skin color:", "Race change","#"+H.dna.features["mcolor"]) as color|null
@@ -116,6 +116,25 @@
if(new_snout)
H.dna.features["mam_snouts"] = new_snout
H.update_body()
+
+ else if (select_alteration == "Wings")
+ var/new_color = input(owner, "Choose your wing color:", "Race change","#"+H.dna.features["wings_color"]) as color|null
+ if(new_color)
+ H.dna.features["wings_color"] = sanitize_hexcolor(new_color, 6)
+ H.update_body()
+ H.update_hair()
+ var/list/snowflake_wings_list = list("Normal" = null)
+ for(var/path in GLOB.deco_wings_list)
+ var/datum/sprite_accessory/deco_wings/instance = GLOB.deco_wings_list[path]
+ if(istype(instance, /datum/sprite_accessory))
+ var/datum/sprite_accessory/S = instance
+ if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey)))
+ snowflake_wings_list[S.name] = path
+ var/new_wings
+ new_wings = input(owner, "Choose your character's wings:", "Wing Alteration") as null|anything in snowflake_wings_list
+ if(new_wings)
+ H.dna.features["deco_wings"] = new_wings
+ H.update_body()
else if (select_alteration == "Markings")
var/list/snowflake_markings_list = list("None")
@@ -227,5 +246,17 @@
H.apply_overlay()
H.give_genital(/obj/item/organ/genital/breasts)
+ else if (select_alteration == "Butt Size")
+ for(var/obj/item/organ/genital/butt/X in H.internal_organs)
+ qdel(X)
+ var/min_B = CONFIG_GET(number/butt_min_size_prefs)
+ var/max_B = CONFIG_GET(number/butt_max_size_prefs)
+ var/new_length = input(owner, "Butt size:\n([min_B]-[max_B])", "Genital Alteration") as num|null
+ if(new_length)
+ H.dna.features["butt_size"] = clamp(round(new_length), min_B, max_B)
+ H.update_genitals()
+ H.apply_overlay()
+ H.give_genital(/obj/item/organ/genital/butt)
+
else
return
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index ee98288c5d..4eccbc62c7 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -1696,7 +1696,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
return FALSE
- var/armor_block = target.run_armor_check(affecting, "melee")
+ var/armor_block = target.run_armor_check(affecting, MELEE)
playsound(target.loc, user.dna.species.attack_sound_override || attack_sound, 25, 1, -1)
target.visible_message("[user] [atk_verb]ed [target]!", \
"[user] [atk_verb]ed you!", null, COMBAT_MESSAGE_RANGE, null, \
@@ -1905,7 +1905,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
hit_area = affecting.name
var/def_zone = affecting.body_zone
- var/armor_block = H.run_armor_check(affecting, "melee", "Your armor has protected your [hit_area].", "Your armor has softened a hit to your [hit_area].",I.armour_penetration)
+ var/armor_block = H.run_armor_check(affecting, MELEE, "Your armor has protected your [hit_area].", "Your armor has softened a hit to your [hit_area].",I.armour_penetration)
armor_block = min(90,armor_block) //cap damage reduction at 90%
var/Iforce = I.force //to avoid runtimes on the forcesay checks at the bottom. Some items might delete themselves if you drop them. (stunning yourself, ninja swords)
var/Iwound_bonus = I.wound_bonus
@@ -2404,7 +2404,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
for(var/X in burning_items)
var/obj/item/I = X
if(!(I.resistance_flags & FIRE_PROOF))
- I.take_damage(H.fire_stacks, BURN, "fire", 0)
+ I.take_damage(H.fire_stacks, BURN, FIRE, 0)
var/thermal_protection = H.easy_thermal_protection()
diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm
index f90199c8ee..d33dbbe4e1 100644
--- a/code/modules/mob/living/carbon/human/species_types/golems.dm
+++ b/code/modules/mob/living/carbon/human/species_types/golems.dm
@@ -347,7 +347,7 @@
/datum/species/golem/sand/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H)
if(!(P.original == H && P.firer == H))
- if(P.flag == "bullet" || P.flag == "bomb")
+ if(P.flag == BULLET || P.flag == BOMB)
playsound(H, 'sound/effects/shovel_dig.ogg', 70, 1)
H.visible_message("The [P.name] sinks harmlessly in [H]'s sandy body!", \
"The [P.name] sinks harmlessly in [H]'s sandy body!")
@@ -379,7 +379,7 @@
/datum/species/golem/glass/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H)
if(!(P.original == H && P.firer == H)) //self-shots don't reflect
- if(P.flag == "laser" || P.flag == "energy")
+ if(P.flag == LASER || P.flag == ENERGY)
H.visible_message("The [P.name] gets reflected by [H]'s glass skin!", \
"The [P.name] gets reflected by [H]'s glass skin!")
if(P.starting)
@@ -741,7 +741,7 @@
name = "pile of bandages"
desc = "It emits a strange aura, as if there was still life within it..."
max_integrity = 50
- armor = list("melee" = 90, "bullet" = 90, "laser" = 25, "energy" = 80, "bomb" = 50, "bio" = 100, "fire" = -50, "acid" = -50)
+ armor = list(MELEE = 90, BULLET = 90, LASER = 25, ENERGY = 80, BOMB = 50, BIO = 100, FIRE = -50, ACID = -50)
icon = 'icons/obj/items_and_weapons.dmi'
icon_state = "pile_bandages"
resistance_flags = FLAMMABLE
@@ -829,7 +829,7 @@
/datum/species/golem/bronze/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H)
if(!(world.time > last_gong_time + gong_cooldown))
return ..()
- if(P.flag == "bullet" || P.flag == "bomb")
+ if(P.flag == BULLET || P.flag == BOMB)
gong(H)
return ..()
diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
index 66402de911..3b84752e1e 100644
--- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
@@ -474,7 +474,7 @@
light_color = "#FFFFFF"
light_range = LUMINESCENT_DEFAULT_GLOW
-/obj/effect/dummy/luminescent_glow/Initialize()
+/obj/effect/dummy/luminescent_glow/Initialize(mapload)
. = ..()
if(!isliving(loc))
return INITIALIZE_HINT_QDEL
diff --git a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm
index f412099831..812ae12955 100644
--- a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm
@@ -168,7 +168,7 @@
sharpness = SHARP_EDGED
total_mass = TOTAL_MASS_HAND_REPLACEMENT
-/obj/item/light_eater/Initialize()
+/obj/item/light_eater/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT)
AddComponent(/datum/component/butchering, 80, 70)
@@ -211,7 +211,7 @@
visible_message("[S] is disintegrated by [src]!")
else if(AM.light_range && AM.light_power && !(istype(AM, /obj/machinery/power/apc) || istype(AM, /obj/machinery/airalarm)))
var/obj/target_object = AM
- target_object.take_damage(force * 5, BRUTE, "melee", 0)
+ target_object.take_damage(force * 5, BRUTE, MELEE, 0)
/obj/item/light_eater/proc/disintegrate(obj/item/O)
diff --git a/code/modules/mob/living/carbon/monkey/life.dm b/code/modules/mob/living/carbon/monkey/life.dm
index 480cbebe11..ffb0e329be 100644
--- a/code/modules/mob/living/carbon/monkey/life.dm
+++ b/code/modules/mob/living/carbon/monkey/life.dm
@@ -162,7 +162,7 @@
for(var/X in burning_items)
var/obj/item/I = X
if(!(I.resistance_flags & FIRE_PROOF))
- I.take_damage(fire_stacks, BURN, "fire", 0)
+ I.take_damage(fire_stacks, BURN, FIRE, 0)
adjust_bodytemperature(BODYTEMP_HEATING_MAX)
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "on_fire", /datum/mood_event/on_fire)
diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm
index 8a029613e2..bb35ff082b 100644
--- a/code/modules/mob/living/carbon/monkey/monkey.dm
+++ b/code/modules/mob/living/carbon/monkey/monkey.dm
@@ -180,7 +180,7 @@ GLOBAL_LIST_INIT(strippable_monkey_items, create_strippable_list(list(
/mob/living/carbon/monkey/angry
aggressive = TRUE
-/mob/living/carbon/monkey/angry/Initialize()
+/mob/living/carbon/monkey/angry/Initialize(mapload)
. = ..()
if(prob(10))
var/obj/item/clothing/head/helmet/justice/escape/helmet = new(src)
diff --git a/code/modules/mob/living/carbon/monkey/monkey_defense.dm b/code/modules/mob/living/carbon/monkey/monkey_defense.dm
index 16b3c1a79e..80d968b229 100644
--- a/code/modules/mob/living/carbon/monkey/monkey_defense.dm
+++ b/code/modules/mob/living/carbon/monkey/monkey_defense.dm
@@ -195,14 +195,14 @@
if (EXPLODE_HEAVY)
take_overall_damage(60, 60)
- damage_clothes(200, BRUTE, "bomb")
+ damage_clothes(200, BRUTE, BOMB)
adjustEarDamage(30, 120)
if(prob(70))
Unconscious(200)
if(EXPLODE_LIGHT)
take_overall_damage(30, 0)
- damage_clothes(50, BRUTE, "bomb")
+ damage_clothes(50, BRUTE, BOMB)
adjustEarDamage(15,60)
if (prob(50))
Unconscious(160)
diff --git a/code/modules/mob/living/carbon/monkey/punpun.dm b/code/modules/mob/living/carbon/monkey/punpun.dm
index d71a989c1d..c8b8dbbc9d 100644
--- a/code/modules/mob/living/carbon/monkey/punpun.dm
+++ b/code/modules/mob/living/carbon/monkey/punpun.dm
@@ -9,7 +9,7 @@
var/list/pet_monkey_names = list("Pun Pun", "Bubbles", "Mojo", "George", "Darwin", "Aldo", "Caeser", "Kanzi", "Kong", "Terk", "Grodd", "Mala", "Bojangles", "Coco", "Able", "Baker", "Scatter", "Norbit", "Travis")
var/list/rare_pet_monkey_names = list("Professor Bobo", "Deempisi's Revenge", "Furious George", "King Louie", "Dr. Zaius", "Jimmy Rustles", "Dinner", "Lanky")
-/mob/living/carbon/monkey/punpun/Initialize()
+/mob/living/carbon/monkey/punpun/Initialize(mapload)
Read_Memory()
if(ancestor_name)
name = ancestor_name
diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm
index cfebacb977..99396ca09e 100644
--- a/code/modules/mob/living/emote.dm
+++ b/code/modules/mob/living/emote.dm
@@ -5,7 +5,7 @@
/datum/emote/living/blush/run_emote(mob/user, params)
. = ..()
- if(. && isipcperson(user))
+ if(. && isrobotic(user))
do_fake_sparks(5,FALSE,user)
/datum/emote/living/bow
diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm
index 0c73c623d1..447256cb69 100644
--- a/code/modules/mob/living/life.dm
+++ b/code/modules/mob/living/life.dm
@@ -6,13 +6,13 @@
SHOULD_NOT_SLEEP(TRUE)
if(mob_transforming)
return
-
. = SEND_SIGNAL(src, COMSIG_LIVING_LIFE, seconds, times_fired)
if(!(. & COMPONENT_INTERRUPT_LIFE_PHYSICAL))
PhysicalLife(seconds, times_fired)
if(!(. & COMPONENT_INTERRUPT_LIFE_BIOLOGICAL))
BiologicalLife(seconds, times_fired)
-
+ if(!(. & COMPONET_INTERRUPT_STATUS_EFFECTS))
+ handle_status_effects() //all special effects, stun, knockdown, jitteryness, hallucination, sleeping, etc
// CODE BELOW SHOULD ONLY BE THINGS THAT SHOULD HAPPEN NO MATTER WHAT AND CAN NOT BE SUSPENDED!
// Otherwise, it goes into one of the two split Life procs!
@@ -69,9 +69,8 @@
handle_block_parry(seconds)
- // These two MIGHT need to be moved to base Life() if we get any in the future that's a "physical" effect that needs to fire even while in stasis.
handle_traits() // eye, ear, brain damages
- handle_status_effects() //all special effects, stun, knockdown, jitteryness, hallucination, sleeping, etc
+
return TRUE
/**
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index bf3094cb08..6f394c1135 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -1,4 +1,4 @@
-/mob/living/Initialize()
+/mob/living/Initialize(mapload)
. = ..()
if(unique_name)
name = "[name] ([rand(1, 1000)])"
@@ -433,8 +433,8 @@
to_chat(src, "You have given up life and succumbed to death.")
death()
-/mob/living/incapacitated(ignore_restraints = FALSE, ignore_grab = FALSE, check_immobilized = FALSE)
- if(stat || IsUnconscious() || IsStun() || IsParalyzed() || (combat_flags & COMBAT_FLAG_HARD_STAMCRIT) || (check_immobilized && IsImmobilized()) || (!ignore_restraints && restrained(ignore_grab)))
+/mob/living/incapacitated(ignore_restraints = FALSE, ignore_grab = FALSE, check_immobilized = FALSE, ignore_stasis = FALSE)
+ if(stat || IsUnconscious() || IsStun() || IsParalyzed() || (combat_flags & COMBAT_FLAG_HARD_STAMCRIT) || (check_immobilized && IsImmobilized()) || (!ignore_restraints && restrained(ignore_grab)) || (!ignore_stasis && IS_IN_STASIS(src)))
return TRUE
/mob/living/canUseStorage()
@@ -1124,7 +1124,7 @@
amount -= RAD_BACKGROUND_RADIATION // This will always be at least 1 because of how skin protection is calculated
- var/blocked = getarmor(null, "rad")
+ var/blocked = getarmor(null, RAD)
if(amount > RAD_BURN_THRESHOLD)
apply_damage((amount-RAD_BURN_THRESHOLD)/RAD_BURN_THRESHOLD, BURN, null, blocked)
@@ -1153,7 +1153,7 @@
visible_message("[src] catches fire!", \
"You're set on fire!")
new/obj/effect/dummy/lighting_obj/moblight/fire(src)
- throw_alert("fire", /atom/movable/screen/alert/fire)
+ throw_alert(FIRE, /atom/movable/screen/alert/fire)
update_fire()
SEND_SIGNAL(src, COMSIG_LIVING_IGNITED,src)
return TRUE
diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm
index 5ce80c5575..0b71359a1e 100644
--- a/code/modules/mob/living/living_defense.dm
+++ b/code/modules/mob/living/living_defense.dm
@@ -1,5 +1,5 @@
-/mob/living/proc/run_armor_check(def_zone = null, attack_flag = "melee", absorb_text = "Your armor absorbs the blow!", soften_text = "Your armor softens the blow!", armour_penetration, penetrated_text = "Your armor was penetrated!", silent=FALSE)
+/mob/living/proc/run_armor_check(def_zone = null, attack_flag = MELEE, absorb_text = "Your armor absorbs the blow!", soften_text = "Your armor softens the blow!", armour_penetration, penetrated_text = "Your armor was penetrated!", silent=FALSE)
var/armor = getarmor(def_zone, attack_flag)
if(silent)
@@ -68,7 +68,7 @@
else
CRASH("Invalid rediretion mode [redirection_mode]")
-/mob/living/bullet_act(obj/item/projectile/P, def_zone)
+/mob/living/bullet_act(obj/item/projectile/P, def_zone, piercing_hit = FALSE)
var/totaldamage = P.damage
var/final_percent = 0
if(P.original != src || P.firer != src) //try to block or reflect the bullet, can't do so when shooting oneself
@@ -81,7 +81,7 @@
if(returned & BLOCK_REDIRECTED)
return BULLET_ACT_FORCE_PIERCE
if(returned & BLOCK_SUCCESS)
- P.on_hit(src, final_percent, def_zone)
+ P.on_hit(src, final_percent, def_zone, piercing_hit)
return BULLET_ACT_BLOCK
totaldamage = block_calculate_resultant_damage(totaldamage, returnlist)
var/armor = run_armor_check(def_zone, P.flag, null, null, P.armour_penetration, null)
@@ -141,7 +141,7 @@
"You're hit by [I]!")
if(!I.throwforce)
return
- var/armor = run_armor_check(impacting_zone, "melee", "Your armor has protected your [parse_zone(impacting_zone)].", "Your armor has softened hit to your [parse_zone(impacting_zone)].",I.armour_penetration)
+ var/armor = run_armor_check(impacting_zone, MELEE, "Your armor has protected your [parse_zone(impacting_zone)].", "Your armor has softened hit to your [parse_zone(impacting_zone)].",I.armour_penetration)
apply_damage(I.throwforce, dtype, impacting_zone, armor, sharpness=I.get_sharpness(), wound_bonus=(nosell_hit * CANT_WOUND))
else
return 1
@@ -149,39 +149,6 @@
playsound(loc, 'sound/weapons/genhit.ogg', 50, 1, -1)
..()
-
-/mob/living/mech_melee_attack(obj/mecha/M)
- if(M.occupant.a_intent == INTENT_HARM)
- if(HAS_TRAIT(M.occupant, TRAIT_PACIFISM))
- to_chat(M.occupant, "You don't want to harm other living beings!")
- return
- M.do_attack_animation(src)
- if(M.damtype == "brute")
- step_away(src,M,15)
- switch(M.damtype)
- if(BRUTE)
- Unconscious(20)
- take_overall_damage(rand(M.force/2, M.force))
- playsound(src, 'sound/weapons/punch4.ogg', 50, 1)
- if(BURN)
- take_overall_damage(0, rand(M.force/2, M.force))
- playsound(src, 'sound/items/welder.ogg', 50, 1)
- if(TOX)
- M.mech_toxin_damage(src)
- else
- return
- updatehealth()
- visible_message("[M.name] has hit [src]!", \
- "[M.name] has hit you!", null, COMBAT_MESSAGE_RANGE, null,
- M.occupant, "You hit [src] with your [M.name]!")
- log_combat(M.occupant, src, "attacked", M, "(INTENT: [uppertext(M.occupant.a_intent)]) (DAMTYPE: [uppertext(M.damtype)])")
- else
- step_away(src,M)
- log_combat(M.occupant, src, "pushed", M)
- visible_message("[M] pushes [src] out of the way.", \
- "[M] pushes you out of the way.", null, COMBAT_MESSAGE_RANGE, null,
- M.occupant, "You push [src] out of the way with your [M.name].")
-
/mob/living/fire_act()
adjust_fire_stacks(3)
IgniteMob()
diff --git a/code/modules/mob/living/living_movement.dm b/code/modules/mob/living/living_movement.dm
index a35558884b..fcab9344d9 100644
--- a/code/modules/mob/living/living_movement.dm
+++ b/code/modules/mob/living/living_movement.dm
@@ -20,12 +20,10 @@
/mob/living/proc/update_density()
density = !lying && !HAS_TRAIT(src, TRAIT_LIVING_NO_DENSITY)
-/mob/living/CanPass(atom/movable/mover, turf/target)
- if((mover.pass_flags & PASSMOB))
- return TRUE
- if(istype(mover, /obj/item/projectile))
- var/obj/item/projectile/P = mover
- return !P.can_hit_target(src, P.permutated, src == P.original, TRUE)
+/mob/living/CanAllowThrough(atom/movable/mover, turf/target)
+ . = ..()
+ if(.)
+ return
if(mover.throwing)
return (!density || lying)
if(buckled == mover)
@@ -41,7 +39,7 @@
var/mob/living/L = mover //typecast first, check isliving and only check this if living using short circuit
if(isliving(L) && lying && L.lying) //if we're both lying down and aren't already being thrown/shipped around, don't pass
return FALSE
- return (!density || (isliving(mover)? L.can_move_under_living(src) : !mover.density))
+ return (isliving(mover)? L.can_move_under_living(src) : !mover.density)
/mob/living/toggle_move_intent()
. = ..()
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index b2b1d2fb5f..a822917aa4 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -39,7 +39,7 @@
var/alarms = list("Motion"=list(), "Fire"=list(), "Atmosphere"=list(), "Power"=list(), "Camera"=list(), "Burglar"=list())
var/viewalerts = 0
var/icon/holo_icon//Female is assigned when AI is created.
- var/obj/mecha/controlled_mech //For controlled_mech a mech, to determine whether to relaymove or use the AI eye.
+ var/obj/vehicle/sealed/mecha/controlled_mech //For controlled_mech a mech, to determine whether to relaymove or use the AI eye.
var/radio_enabled = TRUE //Determins if a carded AI can speak with its built in radio or not.
radiomod = ";" //AIs will, by default, state their laws on the internal radio.
var/obj/item/pda/ai/aiPDA
@@ -408,7 +408,7 @@
return
if (href_list["ai_take_control"]) //Mech domination
- var/obj/mecha/M = locate(href_list["ai_take_control"])
+ var/obj/vehicle/sealed/mecha/M = locate(href_list["ai_take_control"])
if(controlled_mech)
to_chat(src, "You are already loaded into an onboard computer!")
return
diff --git a/code/modules/mob/living/silicon/ai/death.dm b/code/modules/mob/living/silicon/ai/death.dm
index afabafd929..14f9490481 100644
--- a/code/modules/mob/living/silicon/ai/death.dm
+++ b/code/modules/mob/living/silicon/ai/death.dm
@@ -2,6 +2,10 @@
if(stat == DEAD)
return
+ if(!gibbed)
+ // Will update all AI status displays with a blue screen of death
+ INVOKE_ASYNC(src, .proc/emote, "bsod")
+
. = ..()
var/old_icon = icon_state
@@ -29,12 +33,6 @@
spawn(10)
explosion(src.loc, 3, 6, 12, 15)
- if(src.key)
- for(var/each in GLOB.ai_status_displays) //change status
- var/obj/machinery/status_display/ai/O = each
- O.mode = 2
- O.update()
-
if(istype(loc, /obj/item/aicard/aitater))
loc.icon_state = "aitater-404"
else if(istype(loc, /obj/item/aicard/aispook))
diff --git a/code/modules/mob/living/silicon/ai/emote.dm b/code/modules/mob/living/silicon/ai/emote.dm
new file mode 100644
index 0000000000..c48fefbe1f
--- /dev/null
+++ b/code/modules/mob/living/silicon/ai/emote.dm
@@ -0,0 +1,101 @@
+/datum/emote/ai
+ mob_type_allowed_typecache = /mob/living/silicon/ai
+ mob_type_blacklist_typecache = list()
+
+
+/datum/emote/ai/emotion_display
+ key = "blank"
+ var/emotion = AI_EMOTION_BLANK
+
+/datum/emote/ai/emotion_display/run_emote(mob/user, params, type_override, intentional)
+ . = ..()
+ if(!.)
+ return
+ var/mob/living/silicon/ai/ai = user
+ var/turf/ai_turf = get_turf(ai)
+
+ for(var/_display in GLOB.ai_status_displays)
+ var/obj/machinery/status_display/ai/ai_display = _display
+ var/turf/display_turf = get_turf(ai_display)
+
+ // Derelict AIs can't affect station displays.
+ // TODO does this need to be made multiZ aware?
+ if(ai_turf.z != display_turf.z)
+ continue
+
+ ai_display.emotion = emotion
+ ai_display.update()
+
+/datum/emote/ai/emotion_display/very_happy
+ key = "veryhappy"
+ emotion = AI_EMOTION_VERY_HAPPY
+
+/datum/emote/ai/emotion_display/happy
+ key = "happy"
+ emotion = AI_EMOTION_HAPPY
+
+/datum/emote/ai/emotion_display/neutral
+ key = "neutral"
+ emotion = AI_EMOTION_NEUTRAL
+
+/datum/emote/ai/emotion_display/unsure
+ key = "unsure"
+ emotion = AI_EMOTION_UNSURE
+
+/datum/emote/ai/emotion_display/confused
+ key = "confused"
+ emotion = AI_EMOTION_CONFUSED
+
+/datum/emote/ai/emotion_display/sad
+ key = "sad"
+ emotion = AI_EMOTION_SAD
+
+/datum/emote/ai/emotion_display/bsod
+ key = "bsod"
+ emotion = AI_EMOTION_BSOD
+
+/datum/emote/ai/emotion_display/trollface
+ key = "trollface"
+ emotion = AI_EMOTION_PROBLEMS
+
+/datum/emote/ai/emotion_display/awesome
+ key = "awesome"
+ emotion = AI_EMOTION_AWESOME
+
+/datum/emote/ai/emotion_display/dorfy
+ key = "dorfy"
+ emotion = AI_EMOTION_DORFY
+
+/datum/emote/ai/emotion_display/thinking
+ key = "thinking"
+ emotion = AI_EMOTION_THINKING
+
+/datum/emote/ai/emotion_display/facepalm
+ key = "facepalm"
+ key_third_person = "facepalms"
+ emotion = AI_EMOTION_FACEPALM
+
+/datum/emote/ai/emotion_display/friend_computer
+ key = "friendcomputer"
+ emotion = AI_EMOTION_FRIEND_COMPUTER
+
+/datum/emote/ai/emotion_display/friend_computer/run_emote(mob/user, params, type_override, intentional)
+ . = ..()
+ if(!.)
+ return
+
+ var/datum/radio_frequency/frequency = SSradio.return_frequency(FREQ_STATUS_DISPLAYS)
+
+ if(!frequency)
+ return
+
+ var/datum/signal/status_signal = new(list("command" = "friendcomputer"))
+ frequency.post_signal(src, status_signal)
+
+/datum/emote/ai/emotion_display/blue_glow
+ key = "blueglow"
+ emotion = AI_EMOTION_BLUE_GLOW
+
+/datum/emote/ai/emotion_display/red_glow
+ key = "redglow"
+ emotion = AI_EMOTION_RED_GLOW
diff --git a/code/modules/mob/living/silicon/ai/freelook/eye.dm b/code/modules/mob/living/silicon/ai/freelook/eye.dm
index 3fad48e584..bc6ab7c34e 100644
--- a/code/modules/mob/living/silicon/ai/freelook/eye.dm
+++ b/code/modules/mob/living/silicon/ai/freelook/eye.dm
@@ -18,7 +18,7 @@
var/ai_detector_visible = TRUE
var/ai_detector_color = COLOR_RED
-/mob/camera/aiEye/Initialize()
+/mob/camera/aiEye/Initialize(mapload)
. = ..()
GLOB.aiEyes += src
update_ai_detect_hud()
diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm
index 2cbd1f35ca..f14f2edcd4 100644
--- a/code/modules/mob/living/silicon/ai/life.dm
+++ b/code/modules/mob/living/silicon/ai/life.dm
@@ -53,11 +53,11 @@
if(NONE)
return FALSE
if(POWER_REQ_ALL)
- return !T || !A || ((!A.powered(EQUIP) || isspaceturf(T)) && !is_type_in_list(loc, list(/obj/item, /obj/mecha)))
+ return !T || !A || ((!A.powered(EQUIP) || isspaceturf(T)) && !is_type_in_list(loc, list(/obj/item, /obj/vehicle/sealed/mecha)))
if(POWER_REQ_CLOCKCULT)
for(var/obj/effect/clockwork/sigil/transmission/ST in range(src, SIGIL_ACCESS_RANGE))
return FALSE
- return !T || !A || (!istype(T, /turf/open/floor/clockwork) && (!A.powered(EQUIP) || isspaceturf(T)) && !is_type_in_list(loc, list(/obj/item, /obj/mecha)))
+ return !T || !A || (!istype(T, /turf/open/floor/clockwork) && (!A.powered(EQUIP) || isspaceturf(T)) && !is_type_in_list(loc, list(/obj/item, /obj/vehicle/sealed/mecha)))
/mob/living/silicon/ai/updatehealth()
if(status_flags & GODMODE)
diff --git a/code/modules/mob/living/silicon/ai/login.dm b/code/modules/mob/living/silicon/ai/login.dm
index 36e87a8e16..a1826c38af 100644
--- a/code/modules/mob/living/silicon/ai/login.dm
+++ b/code/modules/mob/living/silicon/ai/login.dm
@@ -1,11 +1,5 @@
/mob/living/silicon/ai/Login()
..()
- if(stat != DEAD)
- for(var/each in GLOB.ai_status_displays) //change status
- var/obj/machinery/status_display/ai/O = each
- O.mode = 1
- O.emotion = emote_display
- O.update()
set_eyeobj_visible(TRUE)
if(multicam_on)
end_multicam()
diff --git a/code/modules/mob/living/silicon/ai/logout.dm b/code/modules/mob/living/silicon/ai/logout.dm
index 73161f12d5..a027871716 100644
--- a/code/modules/mob/living/silicon/ai/logout.dm
+++ b/code/modules/mob/living/silicon/ai/logout.dm
@@ -1,8 +1,4 @@
/mob/living/silicon/ai/Logout()
..()
- for(var/each in GLOB.ai_status_displays) //change status
- var/obj/machinery/status_display/ai/O = each
- O.mode = 0
- O.update()
set_eyeobj_visible(FALSE)
view_core()
diff --git a/code/modules/mob/living/silicon/ai/multicam.dm b/code/modules/mob/living/silicon/ai/multicam.dm
index 54713acac4..b48b39a885 100644
--- a/code/modules/mob/living/silicon/ai/multicam.dm
+++ b/code/modules/mob/living/silicon/ai/multicam.dm
@@ -6,7 +6,7 @@
var/highlighted = FALSE
var/mob/camera/aiEye/pic_in_pic/aiEye
-/atom/movable/screen/movable/pic_in_pic/ai/Initialize()
+/atom/movable/screen/movable/pic_in_pic/ai/Initialize(mapload)
. = ..()
aiEye = new /mob/camera/aiEye/pic_in_pic()
aiEye.screen = src
@@ -103,7 +103,7 @@ GLOBAL_DATUM(ai_camera_room_landmark, /obj/effect/landmark/ai_multicam_room)
icon = 'icons/mob/landmarks.dmi'
icon_state = "x"
-/obj/effect/landmark/ai_multicam_room/Initialize()
+/obj/effect/landmark/ai_multicam_room/Initialize(mapload)
. = ..()
qdel(GLOB.ai_camera_room_landmark)
GLOB.ai_camera_room_landmark = src
diff --git a/code/modules/mob/living/silicon/login.dm b/code/modules/mob/living/silicon/login.dm
index 7b1854b940..ddc47465a4 100644
--- a/code/modules/mob/living/silicon/login.dm
+++ b/code/modules/mob/living/silicon/login.dm
@@ -11,3 +11,10 @@
if(G)
mind.remove_antag_datum(G)
..()
+
+/mob/living/silicon/auto_deadmin_on_login()
+ if(!client?.holder)
+ return TRUE
+ if(CONFIG_GET(flag/auto_deadmin_silicons) || (client.prefs?.deadmin & DEADMIN_POSITION_SILICON))
+ return client.holder.auto_deadmin()
+ return ..()
diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm
index d19ef4c16e..fdde445379 100644
--- a/code/modules/mob/living/silicon/pai/pai.dm
+++ b/code/modules/mob/living/silicon/pai/pai.dm
@@ -95,7 +95,7 @@
GLOB.pai_list -= src
return ..()
-/mob/living/silicon/pai/Initialize()
+/mob/living/silicon/pai/Initialize(mapload)
var/obj/item/paicard/P = loc
START_PROCESSING(SSfastprocess, src)
GLOB.pai_list += src
@@ -143,7 +143,7 @@
custom_holoform.Grant(src)
emitter_next_use = world.time + 10 SECONDS
-/mob/living/silicon/pai/deployed/Initialize()
+/mob/living/silicon/pai/deployed/Initialize(mapload)
. = ..()
fold_out(TRUE)
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index bd1c260bf5..19847d9bdc 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -731,7 +731,7 @@
/mob/living/silicon/robot/modules
var/set_module = /obj/item/robot_module
-/mob/living/silicon/robot/modules/Initialize()
+/mob/living/silicon/robot/modules/Initialize(mapload)
. = ..()
module.transform_to(set_module)
@@ -772,7 +772,7 @@
cell = /obj/item/stock_parts/cell/hyper
// radio = /obj/item/radio/borg/syndicate
-/mob/living/silicon/robot/modules/syndicate/Initialize()
+/mob/living/silicon/robot/modules/syndicate/Initialize(mapload)
. = ..()
radio = new /obj/item/radio/borg/syndicate(src)
laws = new /datum/ai_laws/syndicate_override()
diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm
index b9c6f4e2c4..f2f1f8adbe 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -43,7 +43,7 @@
var/moduleselect_alternate_icon
var/dogborg = FALSE
-/obj/item/robot_module/Initialize()
+/obj/item/robot_module/Initialize(mapload)
. = ..()
for(var/i in basic_modules)
var/obj/item/I = new i(src)
@@ -638,7 +638,7 @@
return FALSE
return ..()
-/obj/item/robot_module/security/Initialize()
+/obj/item/robot_module/security/Initialize(mapload)
. = ..()
if(!CONFIG_GET(flag/weaken_secborg))
for(var/obj/item/gun/energy/disabler/cyborg/pewpew in basic_modules)
diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm
index b0ec2959d7..b97536b7a4 100644
--- a/code/modules/mob/living/silicon/silicon.dm
+++ b/code/modules/mob/living/silicon/silicon.dm
@@ -50,7 +50,7 @@
typing_indicator_state = /obj/effect/overlay/typing_indicator/machine
-/mob/living/silicon/Initialize()
+/mob/living/silicon/Initialize(mapload)
. = ..()
GLOB.silicon_mobs += src
faction += "silicon"
diff --git a/code/modules/mob/living/silicon/silicon_defense.dm b/code/modules/mob/living/silicon/silicon_defense.dm
index 55d0336671..a87c0a81ab 100644
--- a/code/modules/mob/living/silicon/silicon_defense.dm
+++ b/code/modules/mob/living/silicon/silicon_defense.dm
@@ -120,7 +120,7 @@
"You are thrown off of [src]!")
flash_act(affect_silicon = 1)
-/mob/living/silicon/bullet_act(obj/item/projectile/P, def_zone)
+/mob/living/silicon/bullet_act(obj/item/projectile/P, def_zone, piercing_hit = FALSE)
var/totaldamage = P.damage
if(P.original != src || P.firer != src) //try to block or reflect the bullet, can't do so when shooting oneself
var/list/returnlist = list()
@@ -141,7 +141,7 @@
"You are knocked off of [src] by the [P]!")
unbuckle_mob(M)
M.DefaultCombatKnockdown(40)
- P.on_hit(src, 0, def_zone)
+ P.on_hit(src, 0, def_zone, 0, piercing_hit)
return BULLET_ACT_HIT
/mob/living/silicon/flash_act(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, type = /atom/movable/screen/fullscreen/tiled/flash/static)
diff --git a/code/modules/mob/living/simple_animal/animal_defense.dm b/code/modules/mob/living/simple_animal/animal_defense.dm
index b003e066ef..e605ffde31 100644
--- a/code/modules/mob/living/simple_animal/animal_defense.dm
+++ b/code/modules/mob/living/simple_animal/animal_defense.dm
@@ -110,7 +110,7 @@
return
return ..()
-/mob/living/simple_animal/proc/attack_threshold_check(damage, damagetype = BRUTE, armorcheck = "melee")
+/mob/living/simple_animal/proc/attack_threshold_check(damage, damagetype = BRUTE, armorcheck = MELEE)
var/temp_damage = damage
if(!damage_coeff[damagetype])
temp_damage = 0
@@ -124,10 +124,10 @@
apply_damage(damage, damagetype, null, getarmor(null, armorcheck))
return TRUE
-/mob/living/simple_animal/bullet_act(obj/item/projectile/Proj)
+/mob/living/simple_animal/bullet_act(obj/item/projectile/Proj, def_zone, piercing_hit = FALSE)
if(!Proj)
return
- apply_damage(Proj.damage, Proj.damage_type)
+ apply_damage(Proj.damage, Proj.damage_type, 0, piercing_hit)
Proj.on_hit(src)
return BULLET_ACT_HIT
@@ -135,7 +135,7 @@
if(origin && istype(origin, /datum/spacevine_mutation) && isvineimmune(src))
return
..()
- var/bomb_armor = getarmor(null, "bomb")
+ var/bomb_armor = getarmor(null, BOMB)
switch (severity)
if (EXPLODE_DEVASTATE)
if(prob(bomb_armor))
diff --git a/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm b/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm
index 99048b4e9f..5796fe67ac 100644
--- a/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm
+++ b/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm
@@ -30,7 +30,7 @@
playsound(src,'sound/effects/beepskyspinsabre.ogg',100,TRUE,-1)
stun_attack(AM)
-/mob/living/simple_animal/bot/secbot/grievous/Initialize()
+/mob/living/simple_animal/bot/secbot/grievous/Initialize(mapload)
. = ..()
weapon = new baton_type(src)
INVOKE_ASYNC(weapon, /obj/item.proc/attack_self, src)
diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm
index 3aec65f6fb..203ac5f846 100644
--- a/code/modules/mob/living/simple_animal/bot/bot.dm
+++ b/code/modules/mob/living/simple_animal/bot/bot.dm
@@ -149,7 +149,7 @@
bot_reset() //Resets an AI's call, should it exist.
update_icon()
-/mob/living/simple_animal/bot/Initialize()
+/mob/living/simple_animal/bot/Initialize(mapload)
. = ..()
GLOB.bots_list += src
access_card = new /obj/item/card/id(src)
@@ -285,7 +285,7 @@
call_mode()
return
if(BOT_SUMMON) //Called by PDA
- bot_summon()
+ summon_step()
return
return TRUE //Successful completion. Used to prevent child process() continuing if this one is ended early.
@@ -731,8 +731,6 @@ Pass a positive integer as an argument to override a bot's default speed.
mode = BOT_SUMMON
speak("Responding.", radio_channel)
- calc_summon_path()
-
if("ejectpai")
ejectpairemote(user)
return
@@ -759,9 +757,6 @@ Pass a positive integer as an argument to override a bot's default speed.
else
to_chat(src, "Unidentified control sequence received:[command]")
-/mob/living/simple_animal/bot/proc/bot_summon() // summoned to PDA
- summon_step()
-
// calculates a path to the current destination
// given an optional turf to avoid
/mob/living/simple_animal/bot/proc/calc_path(turf/avoid)
@@ -876,7 +871,7 @@ Pass a positive integer as an argument to override a bot's default speed.
anchored = FALSE
var/mob/living/simple_animal/bot/owner = null
-/obj/machinery/bot_core/Initialize()
+/obj/machinery/bot_core/Initialize(mapload)
. = ..()
owner = loc
if(!istype(owner))
diff --git a/code/modules/mob/living/simple_animal/bot/cleanbot.dm b/code/modules/mob/living/simple_animal/bot/cleanbot.dm
index ed68d4d272..0ad684ab4b 100644
--- a/code/modules/mob/living/simple_animal/bot/cleanbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/cleanbot.dm
@@ -102,7 +102,7 @@
if(ascended && user.stat == CONSCIOUS && user.client)
user.client.give_award(/datum/award/achievement/misc/cleanboss, user)
-/mob/living/simple_animal/bot/cleanbot/Initialize()
+/mob/living/simple_animal/bot/cleanbot/Initialize(mapload)
. = ..()
chosen_name = name
diff --git a/code/modules/mob/living/simple_animal/bot/construction.dm b/code/modules/mob/living/simple_animal/bot/construction.dm
index fff1782154..8ec0aab5bb 100644
--- a/code/modules/mob/living/simple_animal/bot/construction.dm
+++ b/code/modules/mob/living/simple_animal/bot/construction.dm
@@ -208,7 +208,7 @@
created_name = "Floorbot"
var/toolbox = /obj/item/storage/toolbox
-/obj/item/bot_assembly/floorbot/Initialize()
+/obj/item/bot_assembly/floorbot/Initialize(mapload)
. = ..()
update_icon()
@@ -277,7 +277,7 @@
var/healthanalyzer = /obj/item/healthanalyzer
var/firstaid = /obj/item/storage/firstaid
-/obj/item/bot_assembly/medbot/Initialize()
+/obj/item/bot_assembly/medbot/Initialize(mapload)
. = ..()
spawn(5)
if(skin)
diff --git a/code/modules/mob/living/simple_animal/bot/firebot.dm b/code/modules/mob/living/simple_animal/bot/firebot.dm
index 9eea7a85b1..0b97a553b2 100644
--- a/code/modules/mob/living/simple_animal/bot/firebot.dm
+++ b/code/modules/mob/living/simple_animal/bot/firebot.dm
@@ -39,7 +39,7 @@
var/extinguish_fires = TRUE
var/stationary_mode = FALSE
-/mob/living/simple_animal/bot/firebot/Initialize()
+/mob/living/simple_animal/bot/firebot/Initialize(mapload)
. = ..()
update_icon()
var/datum/job/engineer/J = new/datum/job/engineer
diff --git a/code/modules/mob/living/simple_animal/bot/floorbot.dm b/code/modules/mob/living/simple_animal/bot/floorbot.dm
index c8b502f032..8cd1cd519d 100644
--- a/code/modules/mob/living/simple_animal/bot/floorbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/floorbot.dm
@@ -43,7 +43,7 @@
#define REPLACE_TILE 6
#define TILE_EMAG 7
-/mob/living/simple_animal/bot/floorbot/Initialize()
+/mob/living/simple_animal/bot/floorbot/Initialize(mapload)
. = ..()
update_icon()
var/datum/job/engineer/J = new/datum/job/engineer
diff --git a/code/modules/mob/living/simple_animal/bot/honkbot.dm b/code/modules/mob/living/simple_animal/bot/honkbot.dm
index eb415b9bb5..b8d82e8c7a 100644
--- a/code/modules/mob/living/simple_animal/bot/honkbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/honkbot.dm
@@ -37,7 +37,7 @@
var/weaponscheck = TRUE
var/bikehorn = /obj/item/bikehorn
-/mob/living/simple_animal/bot/honkbot/Initialize()
+/mob/living/simple_animal/bot/honkbot/Initialize(mapload)
. = ..()
update_icon()
auto_patrol = TRUE
diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm
index 56e2f66feb..ed47611a8f 100644
--- a/code/modules/mob/living/simple_animal/bot/mulebot.dm
+++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm
@@ -49,7 +49,7 @@
var/obj/item/stock_parts/cell/cell
var/bloodiness = 0
-/mob/living/simple_animal/bot/mulebot/Initialize()
+/mob/living/simple_animal/bot/mulebot/Initialize(mapload)
. = ..()
wires = new /datum/wires/mulebot(src)
var/datum/job/cargo_tech/J = new/datum/job/cargo_tech
@@ -631,12 +631,12 @@
playsound(loc, 'sound/effects/splat.ogg', 50, TRUE)
var/damage = rand(5,15)
- H.apply_damage(2*damage, BRUTE, BODY_ZONE_HEAD, run_armor_check(BODY_ZONE_HEAD, "melee"))
- H.apply_damage(2*damage, BRUTE, BODY_ZONE_CHEST, run_armor_check(BODY_ZONE_CHEST, "melee"))
- H.apply_damage(0.5*damage, BRUTE, BODY_ZONE_L_LEG, run_armor_check(BODY_ZONE_L_LEG, "melee"))
- H.apply_damage(0.5*damage, BRUTE, BODY_ZONE_R_LEG, run_armor_check(BODY_ZONE_R_LEG, "melee"))
- H.apply_damage(0.5*damage, BRUTE, BODY_ZONE_L_ARM, run_armor_check(BODY_ZONE_L_ARM, "melee"))
- H.apply_damage(0.5*damage, BRUTE, BODY_ZONE_R_ARM, run_armor_check(BODY_ZONE_R_ARM, "melee"))
+ H.apply_damage(2*damage, BRUTE, BODY_ZONE_HEAD, run_armor_check(BODY_ZONE_HEAD, MELEE))
+ H.apply_damage(2*damage, BRUTE, BODY_ZONE_CHEST, run_armor_check(BODY_ZONE_CHEST, MELEE))
+ H.apply_damage(0.5*damage, BRUTE, BODY_ZONE_L_LEG, run_armor_check(BODY_ZONE_L_LEG, MELEE))
+ H.apply_damage(0.5*damage, BRUTE, BODY_ZONE_R_LEG, run_armor_check(BODY_ZONE_R_LEG, MELEE))
+ H.apply_damage(0.5*damage, BRUTE, BODY_ZONE_L_ARM, run_armor_check(BODY_ZONE_L_ARM, MELEE))
+ H.apply_damage(0.5*damage, BRUTE, BODY_ZONE_R_ARM, run_armor_check(BODY_ZONE_R_ARM, MELEE))
var/turf/T = get_turf(src)
T.add_mob_blood(H)
diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm
index c3ab805d62..4f6b6aa351 100644
--- a/code/modules/mob/living/simple_animal/bot/secbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/secbot.dm
@@ -58,7 +58,7 @@
name = "Officer Pipsqueak"
desc = "It's Officer Beep O'sky's smaller, just-as aggressive cousin, Pipsqueak."
-/mob/living/simple_animal/bot/secbot/beepsky/jr/Initialize()
+/mob/living/simple_animal/bot/secbot/beepsky/jr/Initialize(mapload)
. = ..()
resize = 0.8
update_transform()
@@ -174,7 +174,7 @@
desc = "It's Officer Pingsky! Delegated to satellite guard duty for harbouring anti-human sentiment."
radio_channel = RADIO_CHANNEL_AI_PRIVATE
-/mob/living/simple_animal/bot/secbot/Initialize()
+/mob/living/simple_animal/bot/secbot/Initialize(mapload)
. = ..()
update_icon()
var/datum/job/detective/J = new/datum/job/detective
diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm
index 7b1e2dcaba..3e32712fb3 100644
--- a/code/modules/mob/living/simple_animal/constructs.dm
+++ b/code/modules/mob/living/simple_animal/constructs.dm
@@ -46,7 +46,7 @@
var/runetype
var/datum/mind/original_mind
-/mob/living/simple_animal/hostile/construct/Initialize()
+/mob/living/simple_animal/hostile/construct/Initialize(mapload)
. = ..()
update_health_hud()
var/spellnum = 1
@@ -382,7 +382,7 @@
return FALSE
. = ..()
-/mob/living/simple_animal/hostile/construct/harvester/Initialize()
+/mob/living/simple_animal/hostile/construct/harvester/Initialize(mapload)
. = ..()
var/datum/action/innate/seek_prey/seek = new()
seek.Grant(src)
diff --git a/code/modules/mob/living/simple_animal/eldritch_demons.dm b/code/modules/mob/living/simple_animal/eldritch_demons.dm
index 4a96c4be67..6fb53d42a4 100644
--- a/code/modules/mob/living/simple_animal/eldritch_demons.dm
+++ b/code/modules/mob/living/simple_animal/eldritch_demons.dm
@@ -34,7 +34,7 @@
///Innate spells that are supposed to be added when a beast is created
var/list/spells_to_add
-/mob/living/simple_animal/hostile/eldritch/Initialize()
+/mob/living/simple_animal/hostile/eldritch/Initialize(mapload)
. = ..()
add_spells()
@@ -63,7 +63,7 @@
var/list/linked_mobs = list()
-/mob/living/simple_animal/hostile/eldritch/raw_prophet/Initialize()
+/mob/living/simple_animal/hostile/eldritch/raw_prophet/Initialize(mapload)
. = ..()
link_mob(src)
diff --git a/code/modules/mob/living/simple_animal/friendly/bumbles.dm b/code/modules/mob/living/simple_animal/friendly/bumbles.dm
index 53be1434c9..dca823ba21 100644
--- a/code/modules/mob/living/simple_animal/friendly/bumbles.dm
+++ b/code/modules/mob/living/simple_animal/friendly/bumbles.dm
@@ -31,7 +31,7 @@
speak_chance = 1
unique_name = FALSE
-/mob/living/simple_animal/pet/bumbles/Initialize()
+/mob/living/simple_animal/pet/bumbles/Initialize(mapload)
. = ..()
add_verb(src, /mob/living/proc/lay_down)
AddElement(/datum/element/ventcrawling, given_tier = VENTCRAWLER_ALWAYS)
diff --git a/code/modules/mob/living/simple_animal/friendly/butterfly.dm b/code/modules/mob/living/simple_animal/friendly/butterfly.dm
index 1e6afd6044..5cb54ce6ca 100644
--- a/code/modules/mob/living/simple_animal/friendly/butterfly.dm
+++ b/code/modules/mob/living/simple_animal/friendly/butterfly.dm
@@ -28,7 +28,7 @@
verb_exclaim = "flutters intensely"
verb_yell = "flutters intensely"
-/mob/living/simple_animal/butterfly/Initialize()
+/mob/living/simple_animal/butterfly/Initialize(mapload)
. = ..()
var/newcolor = rgb(rand(0, 255), rand(0, 255), rand(0, 255))
add_atom_colour(newcolor, FIXED_COLOUR_PRIORITY)
diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm
index 4594d27ecd..0d04d4b562 100644
--- a/code/modules/mob/living/simple_animal/friendly/cat.dm
+++ b/code/modules/mob/living/simple_animal/friendly/cat.dm
@@ -36,7 +36,7 @@
var/held_icon = "cat2"
footstep_type = FOOTSTEP_MOB_CLAW
-/mob/living/simple_animal/pet/cat/Initialize()
+/mob/living/simple_animal/pet/cat/Initialize(mapload)
. = ..()
add_verb(src, /mob/living/proc/lay_down)
AddElement(/datum/element/ventcrawling, given_tier = VENTCRAWLER_ALWAYS)
@@ -107,7 +107,7 @@
var/cats_deployed = 0
var/memory_saved = FALSE
-/mob/living/simple_animal/pet/cat/Runtime/Initialize()
+/mob/living/simple_animal/pet/cat/Runtime/Initialize(mapload)
if(prob(5))
icon_state = "original"
icon_living = "original"
diff --git a/code/modules/mob/living/simple_animal/friendly/cockroach.dm b/code/modules/mob/living/simple_animal/friendly/cockroach.dm
index b0d66a1209..66e9c75315 100644
--- a/code/modules/mob/living/simple_animal/friendly/cockroach.dm
+++ b/code/modules/mob/living/simple_animal/friendly/cockroach.dm
@@ -31,7 +31,7 @@
var/squish_chance = 50
del_on_death = 1
-/mob/living/simple_animal/cockroach/Initialize()
+/mob/living/simple_animal/cockroach/Initialize(mapload)
. = ..()
AddElement(/datum/element/ventcrawling, given_tier = VENTCRAWLER_ALWAYS)
diff --git a/code/modules/mob/living/simple_animal/friendly/crab.dm b/code/modules/mob/living/simple_animal/friendly/crab.dm
index addbd493a5..8fd97a465c 100644
--- a/code/modules/mob/living/simple_animal/friendly/crab.dm
+++ b/code/modules/mob/living/simple_animal/friendly/crab.dm
@@ -26,7 +26,7 @@
var/obj/item/inventory_mask
gold_core_spawnable = FRIENDLY_SPAWN
-/mob/living/simple_animal/crab/Initialize()
+/mob/living/simple_animal/crab/Initialize(mapload)
. = ..()
AddElement(/datum/element/ventcrawling, given_tier = VENTCRAWLER_ALWAYS)
diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm
index e7016ff0ea..a12b28ea77 100644
--- a/code/modules/mob/living/simple_animal/friendly/dog.dm
+++ b/code/modules/mob/living/simple_animal/friendly/dog.dm
@@ -84,7 +84,7 @@
animal_species = /mob/living/simple_animal/pet/dog/corgi/exoticcorgi
nofur = TRUE
-/mob/living/simple_animal/pet/dog/Initialize()
+/mob/living/simple_animal/pet/dog/Initialize(mapload)
. = ..()
var/dog_area = get_area(src)
for(var/obj/structure/bed/dogbed/D in dog_area)
@@ -92,11 +92,11 @@
D.update_owner(src)
break
-/mob/living/simple_animal/pet/dog/corgi/Initialize()
+/mob/living/simple_animal/pet/dog/corgi/Initialize(mapload)
. = ..()
regenerate_icons()
-/mob/living/simple_animal/pet/dog/corgi/exoticcorgi/Initialize()
+/mob/living/simple_animal/pet/dog/corgi/exoticcorgi/Initialize(mapload)
. = ..()
var/newcolor = rgb(rand(0, 255), rand(0, 255), rand(0, 255))
add_atom_colour(newcolor, FIXED_COLOUR_PRIORITY)
@@ -400,7 +400,7 @@ GLOBAL_LIST_INIT(strippable_corgi_items, create_strippable_list(list(
var/memory_saved = FALSE
var/saved_head //path
-/mob/living/simple_animal/pet/dog/corgi/Ian/Initialize()
+/mob/living/simple_animal/pet/dog/corgi/Ian/Initialize(mapload)
. = ..()
//parent call must happen first to ensure IAN
//is not in nullspace when child puppies spawn
diff --git a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm
index dfb00f2657..9ecc60f7eb 100644
--- a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm
+++ b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm
@@ -79,7 +79,7 @@
"These rules are at admin discretion and will be heavily enforced.\n"+\
"If you do not have the regular drone laws, follow your laws to the best of your ability."
-/mob/living/simple_animal/drone/Initialize()
+/mob/living/simple_animal/drone/Initialize(mapload)
. = ..()
GLOB.drones_list += src
access_card = new /obj/item/card/id(src)
@@ -140,6 +140,12 @@
if(!picked)
pickVisualAppearence()
+/mob/living/simple_animal/drone/auto_deadmin_on_login()
+ if(!client?.holder)
+ return TRUE
+ if(CONFIG_GET(flag/auto_deadmin_silicons) || (client.prefs?.deadmin & DEADMIN_POSITION_SILICON))
+ return client.holder.auto_deadmin()
+ return ..()
/mob/living/simple_animal/drone/death(gibbed)
..(gibbed)
diff --git a/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm b/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm
index df4d1e0673..10cb6bde83 100644
--- a/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm
+++ b/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm
@@ -17,7 +17,7 @@
var/seasonal_hats = TRUE //If TRUE, and there are no default hats, different holidays will grant different hats
var/static/list/possible_seasonal_hats //This is built automatically in build_seasonal_hats() but can also be edited by admins!
-/obj/item/drone_shell/Initialize()
+/obj/item/drone_shell/Initialize(mapload)
. = ..()
var/area/A = get_area(src)
if(A)
diff --git a/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm b/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm
index f3842b507a..4acbd41977 100644
--- a/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm
+++ b/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm
@@ -31,7 +31,7 @@
hacked = TRUE
flavortext = null
-/mob/living/simple_animal/drone/syndrone/Initialize()
+/mob/living/simple_animal/drone/syndrone/Initialize(mapload)
. = ..()
var/datum/component/uplink/hidden_uplink = internal_storage.GetComponent(/datum/component/uplink)
hidden_uplink.telecrystals = 10
@@ -45,7 +45,7 @@
default_hatmask = /obj/item/clothing/head/helmet/space/hardsuit/syndi/elite
default_storage = /obj/item/uplink/nuclear
-/mob/living/simple_animal/drone/syndrone/badass/Initialize()
+/mob/living/simple_animal/drone/syndrone/badass/Initialize(mapload)
. = ..()
var/datum/component/uplink/hidden_uplink = internal_storage.GetComponent(/datum/component/uplink)
hidden_uplink.telecrystals = 30
@@ -55,7 +55,7 @@
/mob/living/simple_animal/drone/snowflake
default_hatmask = /obj/item/clothing/head/chameleon/drone
-/mob/living/simple_animal/drone/snowflake/Initialize()
+/mob/living/simple_animal/drone/snowflake/Initialize(mapload)
. = ..()
desc += " This drone appears to have a complex holoprojector built on its 'head'."
@@ -79,7 +79,7 @@
default_hatmask = null
picked = TRUE
-/mob/living/simple_animal/drone/polymorphed/Initialize()
+/mob/living/simple_animal/drone/polymorphed/Initialize(mapload)
. = ..()
liberate()
visualAppearence = pick(MAINTDRONE, REPAIRDRONE, SCOUTDRONE)
@@ -136,7 +136,7 @@
/mob/living/simple_animal/drone/cogscarab/admin //an admin-only subtype of cogscarab with a no-cost fabricator and slab in its box
default_storage = /obj/item/storage/toolbox/brass/prefilled/ratvar/admin
-/mob/living/simple_animal/drone/cogscarab/Initialize()
+/mob/living/simple_animal/drone/cogscarab/Initialize(mapload)
. = ..()
set_light(2, 0.5)
qdel(access_card) //we don't have free access
diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
index 81925d922f..c6dfc772c1 100644
--- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
+++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
@@ -37,7 +37,7 @@
footstep_type = FOOTSTEP_MOB_SHOE
-/mob/living/simple_animal/hostile/retaliate/goat/Initialize(/datum/reagent/milk_reagent)
+/mob/living/simple_animal/hostile/retaliate/goat/Initialize(mapload, /datum/reagent/milk_reagent)
udder = new (null, milk_reagent)
. = ..()
@@ -144,7 +144,7 @@
footstep_type = FOOTSTEP_MOB_SHOE
-/mob/living/simple_animal/cow/Initialize()
+/mob/living/simple_animal/cow/Initialize(mapload)
udder = new(null, milk_reagent)
. = ..()
@@ -197,7 +197,7 @@
name = "strange cow"
desc = "Something seems off about the milk this cow is producing."
-/mob/living/simple_animal/cow/random/Initialize()
+/mob/living/simple_animal/cow/random/Initialize(mapload)
milk_reagent = get_random_reagent_id() //this has a blacklist so don't worry about romerol cows, etc
..()
@@ -210,7 +210,7 @@
speak_chance = 10 //the cow is eager to share its wisdom! //but is wise enough to not lag the server too bad
milk_reagent = /datum/reagent/medicine/liquid_wisdom
-/mob/living/simple_animal/cow/wisdom/Initialize()
+/mob/living/simple_animal/cow/wisdom/Initialize(mapload)
. = ..()
speak = GLOB.wisdoms //Done here so it's setup properly
@@ -248,7 +248,7 @@
footstep_type = FOOTSTEP_MOB_CLAW
-/mob/living/simple_animal/chick/Initialize()
+/mob/living/simple_animal/chick/Initialize(mapload)
. = ..()
pixel_x = rand(-6, 6)
pixel_y = rand(0, 10)
@@ -310,7 +310,7 @@
footstep_type = FOOTSTEP_MOB_CLAW
-/mob/living/simple_animal/chicken/Initialize()
+/mob/living/simple_animal/chicken/Initialize(mapload)
. = ..()
if(!body_color)
body_color = pick(validColors)
@@ -408,7 +408,7 @@
--kiwi_count
return ..()
-/mob/living/simple_animal/kiwi/Initialize()
+/mob/living/simple_animal/kiwi/Initialize(mapload)
. = ..()
++kiwi_count
@@ -482,7 +482,7 @@
footstep_type = FOOTSTEP_MOB_CLAW
-/mob/living/simple_animal/babyKiwi/Initialize()
+/mob/living/simple_animal/babyKiwi/Initialize(mapload)
. = ..()
pixel_x = rand(-6, 6)
pixel_y = rand(0, 10)
@@ -506,7 +506,7 @@
/obj/item/udder
name = "udder"
-/obj/item/udder/Initialize(loc, milk_reagent)
+/obj/item/udder/Initialize(mapload, loc, milk_reagent)
if(!milk_reagent)
milk_reagent = /datum/reagent/consumable/milk
create_reagents(50, NONE, NO_REAGENTS_VALUE)
diff --git a/code/modules/mob/living/simple_animal/friendly/gondola.dm b/code/modules/mob/living/simple_animal/friendly/gondola.dm
index e29cbb8062..8ba92fd967 100644
--- a/code/modules/mob/living/simple_animal/friendly/gondola.dm
+++ b/code/modules/mob/living/simple_animal/friendly/gondola.dm
@@ -31,7 +31,7 @@
//Gondolas don't make footstep sounds
-/mob/living/simple_animal/pet/gondola/Initialize()
+/mob/living/simple_animal/pet/gondola/Initialize(mapload)
. = ..()
if (!(istype(src, /mob/living/simple_animal/pet/gondola/gondolapod)))
CreateGondola()
diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm
index 66b4bd5e73..d49eb1251d 100644
--- a/code/modules/mob/living/simple_animal/friendly/mouse.dm
+++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm
@@ -30,7 +30,7 @@
var/chew_probability = 1
faction = list("rat")
-/mob/living/simple_animal/mouse/Initialize()
+/mob/living/simple_animal/mouse/Initialize(mapload)
. = ..()
AddComponent(/datum/component/squeak, list('sound/effects/mousesqueek.ogg'=1), 100)
if(!body_color)
@@ -174,7 +174,7 @@ GLOBAL_VAR(tom_existed)
desc = "Jerry the cat is not amused."
gold_core_spawnable = NO_SPAWN
-/mob/living/simple_animal/mouse/brown/Tom/Initialize()
+/mob/living/simple_animal/mouse/brown/Tom/Initialize(mapload)
. = ..()
GLOB.tom_existed = TRUE
diff --git a/code/modules/mob/living/simple_animal/friendly/pet.dm b/code/modules/mob/living/simple_animal/friendly/pet.dm
index dbdb5c646c..78193b481f 100644
--- a/code/modules/mob/living/simple_animal/friendly/pet.dm
+++ b/code/modules/mob/living/simple_animal/friendly/pet.dm
@@ -38,7 +38,7 @@
else
..()
-/mob/living/simple_animal/pet/Initialize()
+/mob/living/simple_animal/pet/Initialize(mapload)
. = ..()
if(pcollar)
pcollar = new(src)
diff --git a/code/modules/mob/living/simple_animal/friendly/possum.dm b/code/modules/mob/living/simple_animal/friendly/possum.dm
index 5e7ed572e2..4f1e27d1db 100644
--- a/code/modules/mob/living/simple_animal/friendly/possum.dm
+++ b/code/modules/mob/living/simple_animal/friendly/possum.dm
@@ -27,7 +27,7 @@
mob_biotypes = MOB_ORGANIC|MOB_BEAST
gold_core_spawnable = FRIENDLY_SPAWN
-/mob/living/simple_animal/opossum/Initialize()
+/mob/living/simple_animal/opossum/Initialize(mapload)
. = ..()
AddElement(/datum/element/ventcrawling, given_tier = VENTCRAWLER_ALWAYS)
diff --git a/code/modules/mob/living/simple_animal/friendly/snake.dm b/code/modules/mob/living/simple_animal/friendly/snake.dm
index 61c735c7c1..3e40ab53bc 100644
--- a/code/modules/mob/living/simple_animal/friendly/snake.dm
+++ b/code/modules/mob/living/simple_animal/friendly/snake.dm
@@ -38,7 +38,7 @@
obj_damage = 0
environment_smash = ENVIRONMENT_SMASH_NONE
-/mob/living/simple_animal/hostile/retaliate/poison/snake/Initialize()
+/mob/living/simple_animal/hostile/retaliate/poison/snake/Initialize(mapload)
. = ..()
AddElement(/datum/element/ventcrawling, given_tier = VENTCRAWLER_ALWAYS)
diff --git a/code/modules/mob/living/simple_animal/gremlin/gremlin.dm b/code/modules/mob/living/simple_animal/gremlin/gremlin.dm
index a6312b9ddf..da6fed4051 100644
--- a/code/modules/mob/living/simple_animal/gremlin/gremlin.dm
+++ b/code/modules/mob/living/simple_animal/gremlin/gremlin.dm
@@ -63,7 +63,7 @@ GLOBAL_LIST(bad_gremlin_items)
var/list/hear_memory = list()
var/const/max_hear_memory = 20
-/mob/living/simple_animal/hostile/gremlin/Initialize()
+/mob/living/simple_animal/hostile/gremlin/Initialize(mapload)
. = ..()
AddElement(/datum/element/ventcrawling, given_tier = VENTCRAWLER_ALWAYS)
ADD_TRAIT(src, TRAIT_SHOCKIMMUNE, INNATE_TRAIT)
diff --git a/code/modules/mob/living/simple_animal/guardian/types/assassin.dm b/code/modules/mob/living/simple_animal/guardian/types/assassin.dm
index 7083f891b8..77d4fd1013 100644
--- a/code/modules/mob/living/simple_animal/guardian/types/assassin.dm
+++ b/code/modules/mob/living/simple_animal/guardian/types/assassin.dm
@@ -17,7 +17,7 @@
var/atom/movable/screen/alert/canstealthalert
var/atom/movable/screen/alert/instealthalert
-/mob/living/simple_animal/hostile/guardian/assassin/Initialize()
+/mob/living/simple_animal/hostile/guardian/assassin/Initialize(mapload)
. = ..()
stealthcooldown = 0
diff --git a/code/modules/mob/living/simple_animal/guardian/types/support.dm b/code/modules/mob/living/simple_animal/guardian/types/support.dm
index fc2912ec2f..78225a458c 100644
--- a/code/modules/mob/living/simple_animal/guardian/types/support.dm
+++ b/code/modules/mob/living/simple_animal/guardian/types/support.dm
@@ -15,7 +15,7 @@
var/beacon_cooldown = 0
var/toggle = FALSE
-/mob/living/simple_animal/hostile/guardian/healer/Initialize()
+/mob/living/simple_animal/hostile/guardian/healer/Initialize(mapload)
. = ..()
var/datum/atom_hud/medsensor = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED]
medsensor.add_hud_to(src)
diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm
index 57ddbe6290..a620c9a58b 100644
--- a/code/modules/mob/living/simple_animal/hostile/alien.dm
+++ b/code/modules/mob/living/simple_animal/hostile/alien.dm
@@ -40,7 +40,7 @@
death_sound = 'sound/voice/hiss6.ogg'
deathmessage = "lets out a waning guttural screech, green blood bubbling from its maw..."
-/mob/living/simple_animal/hostile/alien/Initialize()
+/mob/living/simple_animal/hostile/alien/Initialize(mapload)
. = ..()
AddComponent(/datum/component/footstep, FOOTSTEP_MOB_CLAW)
@@ -86,7 +86,7 @@
melee_damage_upper = 20
del_on_death = TRUE
loot = list(/obj/effect/mob_spawn/alien/corpse/humanoid/sentinel)
-
+
/mob/living/simple_animal/hostile/alien/queen
name = "alien queen"
diff --git a/code/modules/mob/living/simple_animal/hostile/banana_spider.dm b/code/modules/mob/living/simple_animal/hostile/banana_spider.dm
index 802f55a934..f8e8bf75d4 100644
--- a/code/modules/mob/living/simple_animal/hostile/banana_spider.dm
+++ b/code/modules/mob/living/simple_animal/hostile/banana_spider.dm
@@ -30,7 +30,7 @@
var/projectile_density = TRUE //griffons get shot
del_on_death = TRUE
-/mob/living/simple_animal/banana_spider/Initialize()
+/mob/living/simple_animal/banana_spider/Initialize(mapload)
. = ..()
var/area/A = get_area(src)
if(A)
@@ -105,6 +105,6 @@
juice_results = list(/datum/reagent/consumable/banana = 0)
-/obj/item/reagent_containers/food/snacks/deadbanana_spider/Initialize()
+/obj/item/reagent_containers/food/snacks/deadbanana_spider/Initialize(mapload)
. = ..()
AddComponent(/datum/component/slippery, 20)
diff --git a/code/modules/mob/living/simple_animal/hostile/bees.dm b/code/modules/mob/living/simple_animal/hostile/bees.dm
index 399a403ce7..1f0efddd8d 100644
--- a/code/modules/mob/living/simple_animal/hostile/bees.dm
+++ b/code/modules/mob/living/simple_animal/hostile/bees.dm
@@ -60,7 +60,7 @@
var/static/hydroponicstypecache = typecacheof(/obj/machinery/hydroponics)
var/held_icon = "" // bees are small and have no held icon (aka the coder doesn't know how to sprite it)
-/mob/living/simple_animal/hostile/poison/bees/Initialize()
+/mob/living/simple_animal/hostile/poison/bees/Initialize(mapload)
. = ..()
generate_bee_visuals()
AddComponent(/datum/component/swarming)
@@ -211,7 +211,7 @@
beehome = BB
break // End loop after the first compatible find.
-/mob/living/simple_animal/hostile/poison/bees/toxin/Initialize()
+/mob/living/simple_animal/hostile/poison/bees/toxin/Initialize(mapload)
. = ..()
var/datum/reagent/R = pick(typesof(/datum/reagent/toxin))
assign_reagent(GLOB.chemical_reagents_list[R])
@@ -289,7 +289,7 @@
..()
-/obj/item/queen_bee/bought/Initialize()
+/obj/item/queen_bee/bought/Initialize(mapload)
. = ..()
queen = new(src)
@@ -310,6 +310,6 @@
/mob/living/simple_animal/hostile/poison/bees/short
desc = "These bees seem unstable and won't survive for long."
-/mob/living/simple_animal/hostile/poison/bees/short/Initialize()
+/mob/living/simple_animal/hostile/poison/bees/short/Initialize(mapload)
. = ..()
addtimer(CALLBACK(src, .proc/death), 50 SECONDS)
diff --git a/code/modules/mob/living/simple_animal/hostile/bosses/boss.dm b/code/modules/mob/living/simple_animal/hostile/bosses/boss.dm
index 1b0d210d9c..1dedf8cd29 100644
--- a/code/modules/mob/living/simple_animal/hostile/bosses/boss.dm
+++ b/code/modules/mob/living/simple_animal/hostile/bosses/boss.dm
@@ -13,7 +13,7 @@
var/point_regen_amount = 1
sentience_type = SENTIENCE_BOSS
-/mob/living/simple_animal/hostile/boss/Initialize()
+/mob/living/simple_animal/hostile/boss/Initialize(mapload)
. = ..()
atb = new()
diff --git a/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm b/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm
index fe00af9384..6db5250469 100644
--- a/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm
+++ b/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm
@@ -182,7 +182,7 @@
duration = 18
randomdir = FALSE
-/obj/effect/temp_visual/paperwiz_dying/Initialize()
+/obj/effect/temp_visual/paperwiz_dying/Initialize(mapload)
. = ..()
visible_message("The wizard cries out in pain as a gate appears behind him, sucking him in!")
playsound(get_turf(src),'sound/magic/mandswap.ogg', 50, 1, 1)
diff --git a/code/modules/mob/living/simple_animal/hostile/bread.dm b/code/modules/mob/living/simple_animal/hostile/bread.dm
index 1fe1a13e75..663b1fae72 100644
--- a/code/modules/mob/living/simple_animal/hostile/bread.dm
+++ b/code/modules/mob/living/simple_animal/hostile/bread.dm
@@ -32,7 +32,7 @@
verb_yell = "growls loudly"
del_on_death = TRUE
-/mob/living/simple_animal/bread/hostile/Initialize()
+/mob/living/simple_animal/bread/hostile/Initialize(mapload)
. = ..()
var/area/A = get_area(src)
if(A)
diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm
index 747abb4b19..98dddab7bd 100644
--- a/code/modules/mob/living/simple_animal/hostile/carp.dm
+++ b/code/modules/mob/living/simple_animal/hostile/carp.dm
@@ -85,7 +85,7 @@
melee_damage_lower = 20
melee_damage_upper = 20
-/mob/living/simple_animal/hostile/carp/megacarp/Initialize()
+/mob/living/simple_animal/hostile/carp/megacarp/Initialize(mapload)
. = ..()
name = "[pick(GLOB.megacarp_first_names)] [pick(GLOB.megacarp_last_names)]"
melee_damage_lower += rand(4, 10)
@@ -109,7 +109,7 @@
/// Colored disk mouth appearance for adding it as a mouth overlay
var/mutable_appearance/colored_disk_mouth
-/mob/living/simple_animal/hostile/carp/cayenne/Initialize()
+/mob/living/simple_animal/hostile/carp/cayenne/Initialize(mapload)
. = ..()
// AddElement(/datum/element/pet_bonus, "bloops happily!")
// colored_disk_mouth = mutable_appearance(SSgreyscale.GetColoredIconByType(/datum/greyscale_config/carp/disk_mouth, greyscale_colors), "disk_mouth")
diff --git a/code/modules/mob/living/simple_animal/hostile/dark_wizard.dm b/code/modules/mob/living/simple_animal/hostile/dark_wizard.dm
index 9b50587b3d..61b8652287 100644
--- a/code/modules/mob/living/simple_animal/hostile/dark_wizard.dm
+++ b/code/modules/mob/living/simple_animal/hostile/dark_wizard.dm
@@ -37,4 +37,4 @@
icon_state = "declone"
damage = 4
damage_type = BURN
- flag = "energy"
+ flag = ENERGY
diff --git a/code/modules/mob/living/simple_animal/hostile/floor_cluwne.dm b/code/modules/mob/living/simple_animal/hostile/floor_cluwne.dm
index b6d5db7d6d..d52da8f095 100644
--- a/code/modules/mob/living/simple_animal/hostile/floor_cluwne.dm
+++ b/code/modules/mob/living/simple_animal/hostile/floor_cluwne.dm
@@ -49,7 +49,7 @@ GLOBAL_VAR_INIT(floor_cluwnes, 0)
hud_possible = list(ANTAG_HUD)
-/mob/living/simple_animal/hostile/floor_cluwne/Initialize()
+/mob/living/simple_animal/hostile/floor_cluwne/Initialize(mapload)
. = ..()
access_card = new /obj/item/card/id(src)
var/datum/job/captain/C = new /datum/job/captain
@@ -431,7 +431,7 @@ GLOBAL_VAR_INIT(floor_cluwnes, 0)
duration = 600
randomdir = FALSE
-/obj/effect/temp_visual/fcluwne_manifest/Initialize()
+/obj/effect/temp_visual/fcluwne_manifest/Initialize(mapload)
. = ..()
playsound(src, 'sound/misc/floor_cluwne_emerge.ogg', 100, 1)
flick("fcluwne_manifest",src)
@@ -440,7 +440,7 @@ GLOBAL_VAR_INIT(floor_cluwnes, 0)
name = "floor cluwne"
desc = "If you have this, tell a coder or admin!"
-/obj/effect/dummy/floorcluwne_orbit/Initialize()
+/obj/effect/dummy/floorcluwne_orbit/Initialize(mapload)
. = ..()
GLOB.floor_cluwnes++
name += " ([GLOB.floor_cluwnes])"
diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
index 2349685a4e..23a0d44d56 100644
--- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
+++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
@@ -57,7 +57,7 @@
var/datum/action/innate/spider/lay_web/lay_web
var/directive = "" //Message passed down to children, to relay the creator's orders
-/mob/living/simple_animal/hostile/poison/giant_spider/Initialize()
+/mob/living/simple_animal/hostile/poison/giant_spider/Initialize(mapload)
. = ..()
lay_web = new
lay_web.Grant(src)
@@ -122,7 +122,7 @@
var/datum/action/innate/spider/set_directive/set_directive
var/static/list/consumed_mobs = list() //the tags of mobs that have been consumed by nurse spiders to lay eggs
-/mob/living/simple_animal/hostile/poison/giant_spider/nurse/Initialize()
+/mob/living/simple_animal/hostile/poison/giant_spider/nurse/Initialize(mapload)
. = ..()
wrap = new
AddAbility(wrap)
@@ -208,7 +208,7 @@
var/datum/action/innate/spider/comm/letmetalkpls
gold_core_spawnable = NO_SPAWN
-/mob/living/simple_animal/hostile/poison/giant_spider/nurse/midwife/Initialize()
+/mob/living/simple_animal/hostile/poison/giant_spider/nurse/midwife/Initialize(mapload)
. = ..()
letmetalkpls = new
letmetalkpls.Grant(src)
@@ -396,7 +396,7 @@
action_icon_state = "wrap_0"
action_background_icon_state = "bg_alien"
-/obj/effect/proc_holder/wrap/Initialize()
+/obj/effect/proc_holder/wrap/Initialize(mapload)
. = ..()
action = new(src)
diff --git a/code/modules/mob/living/simple_animal/hostile/headcrab.dm b/code/modules/mob/living/simple_animal/hostile/headcrab.dm
index 5e34d17bb2..c23e438b31 100644
--- a/code/modules/mob/living/simple_animal/hostile/headcrab.dm
+++ b/code/modules/mob/living/simple_animal/hostile/headcrab.dm
@@ -24,7 +24,7 @@
var/egg_lain = 0
gold_core_spawnable = NO_SPAWN //are you sure about this?? // CITADEL CHANGE, Yes.
-/mob/living/simple_animal/hostile/headcrab/Initialize()
+/mob/living/simple_animal/hostile/headcrab/Initialize(mapload)
. = ..()
AddElement(/datum/element/ventcrawling, given_tier = VENTCRAWLER_ALWAYS)
diff --git a/code/modules/mob/living/simple_animal/hostile/hivebot.dm b/code/modules/mob/living/simple_animal/hostile/hivebot.dm
index b627bf67c2..b02919446b 100644
--- a/code/modules/mob/living/simple_animal/hostile/hivebot.dm
+++ b/code/modules/mob/living/simple_animal/hostile/hivebot.dm
@@ -33,7 +33,7 @@
footstep_type = FOOTSTEP_MOB_CLAW
-/mob/living/simple_animal/hostile/hivebot/Initialize()
+/mob/living/simple_animal/hostile/hivebot/Initialize(mapload)
. = ..()
deathmessage = "[src] blows apart!"
diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm
index 029adbe92f..1b6f417b7b 100644
--- a/code/modules/mob/living/simple_animal/hostile/hostile.dm
+++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm
@@ -65,7 +65,7 @@
///Declares a cooldown for potential charges right off the bat.
COOLDOWN_DECLARE(charge_cooldown)
-/mob/living/simple_animal/hostile/Initialize()
+/mob/living/simple_animal/hostile/Initialize(mapload)
. = ..()
if(!targets_from)
@@ -146,7 +146,7 @@
if(!search_objects)
. = hearers(vision_range, targets_from) - src //Remove self, so we don't suicide
- var/static/hostile_machines = typecacheof(list(/obj/machinery/porta_turret, /obj/mecha, /obj/structure/destructible/clockwork/ocular_warden,/obj/item/electronic_assembly))
+ var/static/hostile_machines = typecacheof(list(/obj/machinery/porta_turret, /obj/vehicle/sealed/mecha, /obj/structure/destructible/clockwork/ocular_warden,/obj/item/electronic_assembly))
for(var/HM in typecache_filter_list(range(vision_range, targets_from), hostile_machines))
if(can_see(targets_from, HM, vision_range))
@@ -236,9 +236,9 @@
return TRUE
if(ismecha(the_target))
- var/obj/mecha/M = the_target
- if(M.occupant)//Just so we don't attack empty mechs
- if(CanAttack(M.occupant))
+ var/obj/vehicle/sealed/mecha/M = the_target
+ for(var/occupant in M.occupants)
+ if(CanAttack(occupant))
return TRUE
if(istype(the_target, /obj/machinery/porta_turret))
@@ -604,7 +604,7 @@
toggle_ai(AI_ON)
/mob/living/simple_animal/hostile/proc/ListTargetsLazy(var/_Z)//Step 1, find out what we can see
- var/static/hostile_machines = typecacheof(list(/obj/machinery/porta_turret, /obj/mecha, /obj/structure/destructible/clockwork/ocular_warden))
+ var/static/hostile_machines = typecacheof(list(/obj/machinery/porta_turret, /obj/vehicle/sealed/mecha, /obj/structure/destructible/clockwork/ocular_warden))
. = list()
for (var/I in SSmobs.clients_by_zlevel[_Z])
var/mob/M = I
diff --git a/code/modules/mob/living/simple_animal/hostile/jungle/leaper.dm b/code/modules/mob/living/simple_animal/hostile/jungle/leaper.dm
index b98ee5adfb..a0528b4109 100644
--- a/code/modules/mob/living/simple_animal/hostile/jungle/leaper.dm
+++ b/code/modules/mob/living/simple_animal/hostile/jungle/leaper.dm
@@ -60,7 +60,7 @@
layer = ABOVE_ALL_MOB_LAYER
duration = 3
-/obj/effect/temp_visual/leaper_projectile_impact/Initialize()
+/obj/effect/temp_visual/leaper_projectile_impact/Initialize(mapload)
. = ..()
new /obj/effect/decal/cleanable/leaper_sludge(get_turf(src))
@@ -78,7 +78,7 @@
max_integrity = 10
density = FALSE
-/obj/structure/leaper_bubble/Initialize()
+/obj/structure/leaper_bubble/Initialize(mapload)
. = ..()
INVOKE_ASYNC(src, /atom/movable.proc/float, TRUE)
QDEL_IN(src, 100)
@@ -126,7 +126,7 @@
pixel_y = -32
duration = 30
-/mob/living/simple_animal/hostile/jungle/leaper/Initialize()
+/mob/living/simple_animal/hostile/jungle/leaper/Initialize(mapload)
. = ..()
remove_verb(src, /mob/living/verb/pulled)
diff --git a/code/modules/mob/living/simple_animal/hostile/jungle/mook.dm b/code/modules/mob/living/simple_animal/hostile/jungle/mook.dm
index 2d964f5721..baa0fe4649 100644
--- a/code/modules/mob/living/simple_animal/hostile/jungle/mook.dm
+++ b/code/modules/mob/living/simple_animal/hostile/jungle/mook.dm
@@ -33,12 +33,12 @@
footstep_type = FOOTSTEP_MOB_BAREFOOT
-/mob/living/simple_animal/hostile/jungle/mook/CanPass(atom/movable/O)
+/mob/living/simple_animal/hostile/jungle/mook/CanAllowThrough(atom/movable/O)
+ . = ..()
if(istype(O, /mob/living/simple_animal/hostile/jungle/mook))
var/mob/living/simple_animal/hostile/jungle/mook/M = O
if(M.attack_state == MOOK_ATTACK_ACTIVE && M.throwing)
return TRUE
- return ..()
/mob/living/simple_animal/hostile/jungle/mook/death()
desc = "A deceased primitive. Upon closer inspection, it was suffering from severe cellular degeneration and its garments are machine made..."//Can you guess the twist
diff --git a/code/modules/mob/living/simple_animal/hostile/jungle/seedling.dm b/code/modules/mob/living/simple_animal/hostile/jungle/seedling.dm
index 0f25688b6a..2d773c67bb 100644
--- a/code/modules/mob/living/simple_animal/hostile/jungle/seedling.dm
+++ b/code/modules/mob/living/simple_animal/hostile/jungle/seedling.dm
@@ -42,7 +42,7 @@
damage = 10
damage_type = BURN
light_range = 2
- flag = "energy"
+ flag = ENERGY
light_color = LIGHT_COLOR_YELLOW
hitsound = 'sound/weapons/sear.ogg'
hitsound_wall = 'sound/weapons/effects/searwall.ogg'
diff --git a/code/modules/mob/living/simple_animal/hostile/killertomato.dm b/code/modules/mob/living/simple_animal/hostile/killertomato.dm
index d3d3dadd1e..1d23e04b2d 100644
--- a/code/modules/mob/living/simple_animal/hostile/killertomato.dm
+++ b/code/modules/mob/living/simple_animal/hostile/killertomato.dm
@@ -29,6 +29,6 @@
maxbodytemp = 500
gold_core_spawnable = HOSTILE_SPAWN
-/mob/living/simple_animal/hostile/killertomato/Initialize()
+/mob/living/simple_animal/hostile/killertomato/Initialize(mapload)
. = ..()
AddElement(/datum/element/ventcrawling, given_tier = VENTCRAWLER_ALWAYS)
diff --git a/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm b/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm
index f2dc6abe40..0f6c10d817 100644
--- a/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm
@@ -25,14 +25,14 @@
search_objects = 0
mob_biotypes = MOB_ORGANIC|MOB_HUMANOID
- var/spawn_mecha_type = /obj/mecha/combat/marauder/mauler/loaded
- var/obj/mecha/mecha //Ref to pilot's mecha instance
+ var/spawn_mecha_type = /obj/vehicle/sealed/mecha/combat/marauder/mauler/loaded
+ var/obj/vehicle/sealed/mecha/mecha //Ref to pilot's mecha instance
var/required_mecha_charge = 7500 //If the pilot doesn't have a mecha, what charge does a potential Grand Theft Mecha need? (Defaults to half a battery)
var/mecha_charge_evacuate = 50 //Amount of charge at which the pilot tries to abandon the mecha
//Vars that control when the pilot uses their mecha's abilities (if the mecha has that ability)
var/threat_use_mecha_smoke = 5 //5 mobs is enough to engage crowd control
- var/defence_mode_chance = 35 //Chance to engage Defence mode when damaged
+ var/defense_mode_chance = 35 //Chance to engage Defense mode when damaged
var/smoke_chance = 20 //Chance to deploy smoke for crowd control
var/retreat_chance = 40 //Chance to run away
@@ -40,35 +40,35 @@
spawn_mecha_type = null
search_objects = 2
-/mob/living/simple_animal/hostile/syndicate/mecha_pilot/no_mech/Initialize()
+/mob/living/simple_animal/hostile/syndicate/mecha_pilot/no_mech/Initialize(mapload)
. = ..()
- wanted_objects = typecacheof(/obj/mecha/combat, TRUE)
+ wanted_objects = typecacheof(/obj/vehicle/sealed/mecha/combat, TRUE)
/mob/living/simple_animal/hostile/syndicate/mecha_pilot/nanotrasen //nanotrasen are syndies! no it's just a weird path.
- name = "Nanotrasen Mecha Pilot"
+ name = "\improper Nanotrasen Mecha Pilot"
desc = "Death to the Syndicate. This variant comes in MECHA DEATH flavour."
icon_living = "nanotrasen"
icon_state = "nanotrasen"
faction = list("nanotrasen")
- spawn_mecha_type = /obj/mecha/combat/marauder/loaded
+ spawn_mecha_type = /obj/vehicle/sealed/mecha/combat/marauder/loaded
/mob/living/simple_animal/hostile/syndicate/mecha_pilot/no_mech/nanotrasen
- name = "Nanotrasen Mecha Pilot"
+ name = "\improper Nanotrasen Mecha Pilot"
desc = "Death to the Syndicate. This variant comes in MECHA DEATH flavour."
icon_living = "nanotrasen"
icon_state = "nanotrasen"
faction = list("nanotrasen")
-/mob/living/simple_animal/hostile/syndicate/mecha_pilot/Initialize()
+/mob/living/simple_animal/hostile/syndicate/mecha_pilot/Initialize(mapload)
. = ..()
if(spawn_mecha_type)
- var/obj/mecha/M = new spawn_mecha_type (get_turf(src))
+ var/obj/vehicle/sealed/mecha/M = new spawn_mecha_type (get_turf(src))
if(istype(M))
- enter_mecha(M)
+ INVOKE_ASYNC(src, .proc/enter_mecha, M)
-/mob/living/simple_animal/hostile/syndicate/mecha_pilot/proc/enter_mecha(obj/mecha/M)
+/mob/living/simple_animal/hostile/syndicate/mecha_pilot/proc/enter_mecha(obj/vehicle/sealed/mecha/M)
if(!M)
return 0
target = null //Target was our mecha, so null it out
@@ -78,7 +78,7 @@
var/do_ranged = 0
for(var/equip in mecha.equipment)
var/obj/item/mecha_parts/mecha_equipment/ME = equip
- if(ME.range & RANGED)
+ if(ME.range & MECHA_RANGED)
do_ranged = 1
break
if(do_ranged)
@@ -89,11 +89,11 @@
ranged = 0
wanted_objects = list()
search_objects = 0
- if(mecha && mecha.lights_action) //an AI mecha is an EVIL EVIL thing, so let's not hide them in the dark
- mecha.lights_action.Activate()
+ if(LAZYACCESSASSOC(mecha.occupant_actions, src, /datum/action/vehicle/sealed/mecha/mech_defense_mode) && !mecha.defense_mode)
+ var/datum/action/action = mecha.occupant_actions[src][/datum/action/vehicle/sealed/mecha/mech_defense_mode]
+ action.Trigger(TRUE)
-
-/mob/living/simple_animal/hostile/syndicate/mecha_pilot/proc/exit_mecha(obj/mecha/M)
+/mob/living/simple_animal/hostile/syndicate/mecha_pilot/proc/exit_mecha(obj/vehicle/sealed/mecha/M)
if(!M)
return 0
@@ -102,9 +102,9 @@
targets_from = src
//Find a new mecha
- wanted_objects = typecacheof(/obj/mecha/combat, TRUE)
+ wanted_objects = typecacheof(/obj/vehicle/sealed/mecha/combat, TRUE)
var/search_aggressiveness = 2
- for(var/obj/mecha/combat/C in range(vision_range,src))
+ for(var/obj/vehicle/sealed/mecha/combat/C in range(vision_range,src))
if(is_valid_mecha(C))
target = C
search_aggressiveness = 3 //We can see a mech? RUN FOR IT, IGNORE MOBS!
@@ -116,23 +116,23 @@
walk(M,0)//end any lingering movement loops, to prevent the haunted mecha bug
//Checks if a mecha is valid for theft
-/mob/living/simple_animal/hostile/syndicate/mecha_pilot/proc/is_valid_mecha(obj/mecha/M)
+/mob/living/simple_animal/hostile/syndicate/mecha_pilot/proc/is_valid_mecha(obj/vehicle/sealed/mecha/M)
if(!M)
- return 0
- if(M.occupant)
- return 0
+ return FALSE
+ if(LAZYLEN(M.occupants))
+ return FALSE
if(!M.has_charge(required_mecha_charge))
- return 0
+ return FALSE
if(M.obj_integrity < M.max_integrity*0.5)
- return 0
- return 1
+ return FALSE
+ return TRUE
/mob/living/simple_animal/hostile/syndicate/mecha_pilot/proc/mecha_face_target(atom/A)
if(mecha)
var/dirto = get_dir(mecha,A)
if(mecha.dir != dirto) //checking, because otherwise the mecha makes too many turn noises
- mecha.mechturn(dirto)
+ mecha.vehicle_move(dirto, TRUE)
@@ -144,7 +144,7 @@
ME.rearm()
-/mob/living/simple_animal/hostile/syndicate/mecha_pilot/proc/get_mecha_equip_by_flag(flag = RANGED)
+/mob/living/simple_animal/hostile/syndicate/mecha_pilot/proc/get_mecha_equip_by_flag(flag = MECHA_RANGED)
. = list()
if(mecha)
for(var/equip in mecha.equipment)
@@ -160,11 +160,10 @@
if(mecha)
mecha_reload()
mecha_face_target(A)
- var/list/possible_weapons = get_mecha_equip_by_flag(RANGED)
+ var/list/possible_weapons = get_mecha_equip_by_flag(MECHA_RANGED)
if(possible_weapons.len)
var/obj/item/mecha_parts/mecha_equipment/ME = pick(possible_weapons) //so we don't favor mecha.equipment[1] forever
- if(ME.action(A))
- ME.start_cooldown()
+ if(ME.action(src,A))
return
else
@@ -173,20 +172,19 @@
/mob/living/simple_animal/hostile/syndicate/mecha_pilot/AttackingTarget()
if(mecha)
- var/list/possible_weapons = get_mecha_equip_by_flag(MELEE)
+ var/list/possible_weapons = get_mecha_equip_by_flag(MECHA_MELEE)
if(possible_weapons.len)
var/obj/item/mecha_parts/mecha_equipment/ME = pick(possible_weapons)
mecha_face_target(target)
- if(ME.action(target))
- ME.start_cooldown()
+ if(ME.action(src,target))
return
- if(mecha.melee_can_hit)
+ if(!TIMER_COOLDOWN_CHECK(mecha, COOLDOWN_MECHA_MELEE_ATTACK))
mecha_face_target(target)
- target.mech_melee_attack(mecha)
+ target.mech_melee_attack(mecha, src)
else
if(ismecha(target))
- var/obj/mecha/M = target
+ var/obj/vehicle/sealed/mecha/M = target
if(is_valid_mecha(M))
enter_mecha(M)
return
@@ -199,50 +197,54 @@
/mob/living/simple_animal/hostile/syndicate/mecha_pilot/handle_automated_action()
- if(..())
- if(!mecha)
- for(var/obj/mecha/combat/C in range(src,vision_range))
- if(is_valid_mecha(C))
- target = C //Let's nab it!
- minimum_distance = 1
- ranged = 0
- break
- if(mecha)
- var/list/L = PossibleThreats()
- var/threat_count = L.len
+ . = ..()
+ if(!.)
+ return
+ if(!mecha)
+ for(var/obj/vehicle/sealed/mecha/combat/mecha_in_range in range(src,vision_range))
+ if(is_valid_mecha(mecha_in_range))
+ target = mecha_in_range //Let's nab it!
+ minimum_distance = 1
+ ranged = 0
+ break
+ if(mecha)
+ var/list/L = PossibleThreats()
+ var/threat_count = L.len
- //Low Charge - Eject
- if(!mecha.has_charge(mecha_charge_evacuate))
- exit_mecha(mecha)
- return
+ //Low Charge - Eject
+ if(!mecha.has_charge(mecha_charge_evacuate))
+ exit_mecha(mecha)
+ return
//Too Much Damage - Eject
- if(mecha.obj_integrity < mecha.max_integrity*0.1)
- exit_mecha(mecha)
- return
+ if(mecha.obj_integrity < mecha.max_integrity*0.1)
+ exit_mecha(mecha)
+ return
- //Smoke if there's too many targets - Smoke Power
- if(threat_count >= threat_use_mecha_smoke && prob(smoke_chance))
- if(mecha.smoke_action && mecha.smoke_action.owner && mecha.smoke)
- mecha.smoke_action.Activate()
+ //Smoke if there's too many targets - Smoke Power
+ if(threat_count >= threat_use_mecha_smoke && prob(smoke_chance))
+ if(LAZYACCESSASSOC(mecha.occupant_actions, src, /datum/action/vehicle/sealed/mecha/mech_smoke) && !mecha.smoke_charges)
+ var/datum/action/action = mecha.occupant_actions[src][/datum/action/vehicle/sealed/mecha/mech_smoke]
+ action.Trigger()
- //Heavy damage - Defence Power or Retreat
- if(mecha.obj_integrity < mecha.max_integrity*0.25)
- if(prob(defence_mode_chance))
- if(mecha.defense_action && mecha.defense_action.owner && !mecha.defence_mode)
- mecha.leg_overload_mode = 0
- mecha.defense_action.Activate(TRUE)
- addtimer(CALLBACK(mecha.defense_action, /datum/action/innate/mecha/mech_defence_mode.proc/Activate, FALSE), 100) //10 seconds of defence, then toggle off
+ //Heavy damage - Defense Power or Retreat
+ if(mecha.obj_integrity < mecha.max_integrity*0.25)
+ if(prob(defense_mode_chance))
+ if(LAZYACCESSASSOC(mecha.occupant_actions, src, /datum/action/vehicle/sealed/mecha/mech_defense_mode) && !mecha.defense_mode)
+ var/datum/action/action = mecha.occupant_actions[src][/datum/action/vehicle/sealed/mecha/mech_defense_mode]
+ action.Trigger(TRUE)
+ addtimer(CALLBACK(action, /datum/action/vehicle/sealed/mecha/mech_defense_mode.proc/Trigger, FALSE), 100) //10 seconds of defense, then toggle off
- else if(prob(retreat_chance))
- //Speed boost if possible
- if(mecha.overload_action && mecha.overload_action.owner && !mecha.leg_overload_mode)
- mecha.overload_action.Activate(TRUE)
- addtimer(CALLBACK(mecha.overload_action, /datum/action/innate/mecha/mech_defence_mode.proc/Activate, FALSE), 100) //10 seconds of speeeeed, then toggle off
+ else if(prob(retreat_chance))
+ //Speed boost if possible
+ if(LAZYACCESSASSOC(mecha.occupant_actions, src, /datum/action/vehicle/sealed/mecha/mech_overload_mode) && !mecha.leg_overload_mode)
+ var/datum/action/action = mecha.occupant_actions[src][/datum/action/vehicle/sealed/mecha/mech_overload_mode]
+ mecha.leg_overload_mode = FALSE
+ action.Trigger(TRUE)
+ addtimer(CALLBACK(action, /datum/action/vehicle/sealed/mecha/mech_overload_mode.proc/Trigger, FALSE), 100) //10 seconds of speeeeed, then toggle off
- retreat_distance = 50
- spawn(100)
- retreat_distance = 0
+ retreat_distance = 50
+ addtimer(VARSET_CALLBACK(src, retreat_distance, 0), 10 SECONDS)
@@ -261,17 +263,17 @@
//~simple animals~
/mob/living/simple_animal/hostile/syndicate/mecha_pilot/CanAttack(atom/the_target)
if(ismecha(the_target))
- var/obj/mecha/M = the_target
+ var/obj/vehicle/sealed/mecha/M = the_target
if(mecha)
- if(M == mecha || !CanAttack(M.occupant))
- return 0
+ if(M == mecha) //Dont kill yourself
+ return FALSE
else //we're not in a mecha, so we check if we can steal it instead.
if(is_valid_mecha(M))
- return 1
- else if (M.occupant && CanAttack(M.occupant))
- return 1
- else
- return 0
+ return TRUE
+ for(var/occupant in M.occupants)
+ if(CanAttack(occupant))
+ return TRUE
+ return FALSE
. = ..()
@@ -290,6 +292,6 @@
/mob/living/simple_animal/hostile/syndicate/mecha_pilot/Goto(target, delay, minimum_distance)
if(mecha)
- walk_to(mecha, target, minimum_distance, mecha.step_in)
+ walk_to(mecha, target, minimum_distance, mecha.movedelay)
else
..()
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm
index c28fa99054..3369588915 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm
@@ -57,7 +57,7 @@ Difficulty: Medium
/datum/action/innate/megafauna_attack/kinetic_accelerator,
/datum/action/innate/megafauna_attack/transform_weapon)
-/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/Initialize()
+/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/Initialize(mapload)
. = ..()
internal = new/obj/item/gps/internal/miner(src)
miner_saw = new(src)
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm
index 9bcc21efa6..5520efb93b 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm
@@ -120,7 +120,7 @@ Difficulty: Hard
SetRecoveryTime(10)
-/mob/living/simple_animal/hostile/megafauna/bubblegum/Initialize()
+/mob/living/simple_animal/hostile/megafauna/bubblegum/Initialize(mapload)
. = ..()
if(istype(src, /mob/living/simple_animal/hostile/megafauna/bubblegum/hallucination))
return
@@ -160,10 +160,10 @@ Difficulty: Hard
severity = EXPLODE_LIGHT // puny mortals
return ..()
-/mob/living/simple_animal/hostile/megafauna/bubblegum/CanPass(atom/movable/mover, turf/target)
+/mob/living/simple_animal/hostile/megafauna/bubblegum/CanAllowThrough(atom/movable/mover, turf/target)
+ . = ..()
if(istype(mover, /mob/living/simple_animal/hostile/megafauna/bubblegum/hallucination))
- return 1
- return ..()
+ return TRUE
/mob/living/simple_animal/hostile/megafauna/bubblegum/Goto(target, delay, minimum_distance)
if(!charging)
@@ -299,7 +299,7 @@ Difficulty: Hard
to_chat(L, "[src] rends you!")
playsound(T, attack_sound, 100, 1, -1)
var/limb_to_hit = L.get_bodypart(pick(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG))
- L.apply_damage(10, BRUTE, limb_to_hit, L.run_armor_check(limb_to_hit, "melee", null, null, armour_penetration))
+ L.apply_damage(10, BRUTE, limb_to_hit, L.run_armor_check(limb_to_hit, MELEE, null, null, armour_penetration))
sleep(3)
/mob/living/simple_animal/hostile/megafauna/bubblegum/proc/bloodgrab(turf/T, handedness)
@@ -454,7 +454,7 @@ Difficulty: Hard
deathmessage = "Explodes into a pool of blood!"
deathsound = 'sound/effects/splat.ogg'
-/mob/living/simple_animal/hostile/megafauna/bubblegum/hallucination/Initialize()
+/mob/living/simple_animal/hostile/megafauna/bubblegum/hallucination/Initialize(mapload)
..()
toggle_ai(AI_OFF)
@@ -466,10 +466,10 @@ Difficulty: Hard
new /obj/effect/decal/cleanable/blood(get_turf(src))
. = ..()
-/mob/living/simple_animal/hostile/megafauna/bubblegum/hallucination/CanPass(atom/movable/mover, turf/target)
+/mob/living/simple_animal/hostile/megafauna/bubblegum/hallucination/CanAllowThrough(atom/movable/mover, turf/target)
+ . = ..()
if(istype(mover, /mob/living/simple_animal/hostile/megafauna/bubblegum)) // hallucinations should not be stopping bubblegum or eachother
- return 1
- return ..()
+ return TRUE
/mob/living/simple_animal/hostile/megafauna/bubblegum/hallucination/Life()
return
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
index ca8eb46942..eb6c29df5f 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
@@ -94,7 +94,7 @@ Difficulty: Very Hard
INVOKE_ASYNC(src, .proc/alternating_dir_shots)
-/mob/living/simple_animal/hostile/megafauna/colossus/Initialize()
+/mob/living/simple_animal/hostile/megafauna/colossus/Initialize(mapload)
. = ..()
internal = new/obj/item/gps/internal/colossus(src)
@@ -262,7 +262,7 @@ Difficulty: Very Hard
return FALSE
return TRUE
-/obj/machinery/smartfridge/black_box/Initialize()
+/obj/machinery/smartfridge/black_box/Initialize(mapload)
. = ..()
var/static/obj/machinery/smartfridge/black_box/current
if(current && current != src)
@@ -452,7 +452,7 @@ Difficulty: Very Hard
var/list/NewFlora = list()
var/florachance = 8
-/obj/machinery/anomalous_crystal/theme_warp/Initialize()
+/obj/machinery/anomalous_crystal/theme_warp/Initialize(mapload)
. = ..()
terrain_theme = pick("lavaland","winter","jungle","ayy lmao")
observer_desc = "This crystal changes the area around it to match the theme of \"[terrain_theme]\"."
@@ -518,7 +518,7 @@ Difficulty: Very Hard
cooldown_add = 50
var/obj/item/projectile/generated_projectile = /obj/item/projectile/beam/emitter
-/obj/machinery/anomalous_crystal/emitter/Initialize()
+/obj/machinery/anomalous_crystal/emitter/Initialize(mapload)
. = ..()
generated_projectile = pick(/obj/item/projectile/colossus)
@@ -629,7 +629,7 @@ Difficulty: Very Hard
stop_automated_movement = 1
var/heal_power = 5
-/mob/living/simple_animal/hostile/lightgeist/Initialize()
+/mob/living/simple_animal/hostile/lightgeist/Initialize(mapload)
. = ..()
remove_verb(src, /mob/living/verb/pulled)
remove_verb(src, /mob/verb/me_verb)
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner.dm
index a5fc918181..609d4dcefa 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner.dm
@@ -48,7 +48,7 @@ Difficulty: Extremely Hard
/// If the demonic frost miner is currently transforming to its enraged state
var/enraging = FALSE
-/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner/Initialize()
+/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner/Initialize(mapload)
. = ..()
AddComponent(/datum/component/knockback, 7, FALSE, TRUE)
AddComponent(/datum/component/lifesteal, 50)
@@ -309,7 +309,7 @@ Difficulty: Extremely Hard
desc = "A pair of winter boots contractually made by a devil, they cannot be taken off once put on."
slowdown = SHOES_SPEED_SLIGHT
-/obj/item/clothing/shoes/winterboots/ice_boots/speedy/Initialize()
+/obj/item/clothing/shoes/winterboots/ice_boots/speedy/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CURSED_ITEM_TRAIT)
@@ -318,7 +318,7 @@ Difficulty: Extremely Hard
desc = "Cracks rocks at an inhuman speed, as well as being enhanced for combat purposes."
toolspeed = 0
-/obj/item/pickaxe/drill/jackhammer/demonic/Initialize()
+/obj/item/pickaxe/drill/jackhammer/demonic/Initialize(mapload)
. = ..()
AddComponent(/datum/component/knockback, 4, FALSE, TRUE)
AddComponent(/datum/component/lifesteal, 5)
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/dragon_vore.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/dragon_vore.dm
index a2d18c508e..7a946e662b 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/dragon_vore.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/dragon_vore.dm
@@ -2,7 +2,7 @@
vore_active = TRUE
isPredator = TRUE
-/mob/living/simple_animal/hostile/megafauna/dragon/Initialize()
+/mob/living/simple_animal/hostile/megafauna/dragon/Initialize(mapload)
// Create and register 'stomachs'
var/obj/belly/megafauna/dragon/maw/maw = new(src)
var/obj/belly/megafauna/dragon/gullet/gullet = new(src)
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm
index dc13d870c5..c83db749e2 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm
@@ -74,7 +74,7 @@ Difficulty: Medium
footstep_type = FOOTSTEP_MOB_HEAVY
-/mob/living/simple_animal/hostile/megafauna/dragon/Initialize()
+/mob/living/simple_animal/hostile/megafauna/dragon/Initialize(mapload)
smallsprite.Grant(src)
. = ..()
internal = new/obj/item/gps/internal/dragon(src)
@@ -195,7 +195,7 @@ Difficulty: Medium
if(L.client)
empty += pick(((RANGE_TURFS(2, L) - RANGE_TURFS(1, L)) & turfs) - empty) // picks a turf within 2 of the creature not outside or in the shield
any_attack = 1
- for(var/obj/mecha/M in T.contents)
+ for(var/obj/vehicle/sealed/mecha/M in T.contents)
empty += pick(((RANGE_TURFS(2, M) - RANGE_TURFS(1, M)) & turfs) - empty)
any_attack = 1
if(!any_attack)
@@ -264,11 +264,11 @@ Difficulty: Medium
to_chat(L, "You're hit by [src]'s fire breath!")
// deals damage to mechs
- for(var/obj/mecha/M in T.contents)
+ for(var/obj/vehicle/sealed/mecha/M in T.contents)
if(M in hit_list)
continue
hit_list += M
- M.take_damage(45, BRUTE, "melee", 1)
+ M.take_damage(45, BRUTE, MELEE, 1)
sleep(1.5)
/mob/living/simple_animal/hostile/megafauna/dragon/proc/swoop_attack(lava_arena = FALSE, atom/movable/manual_target, var/swoop_cooldown = 30)
@@ -350,8 +350,8 @@ Difficulty: Medium
var/throwtarget = get_edge_target_turf(src, throw_dir)
L.throw_at(throwtarget, 3)
visible_message("[L] is thrown clear of [src]!")
- for(var/obj/mecha/M in orange(1, src))
- M.take_damage(75, BRUTE, "melee", 1)
+ for(var/obj/vehicle/sealed/mecha/M in orange(1, src))
+ M.take_damage(75, BRUTE, MELEE, 1)
for(var/mob/M in range(7, src))
shake_camera(M, 15, 1)
@@ -409,8 +409,8 @@ Difficulty: Medium
to_chat(L, "You fall directly into the pool of lava!")
// deals damage to mechs
- for(var/obj/mecha/M in T.contents)
- M.take_damage(45, BRUTE, "melee", 1)
+ for(var/obj/vehicle/sealed/mecha/M in T.contents)
+ M.take_damage(45, BRUTE, MELEE, 1)
// changes turf to lava temporarily
if(!istype(T, /turf/closed) && !istype(T, /turf/open/lava))
@@ -538,9 +538,9 @@ Difficulty: Medium
to_chat(L, "You're hit by [source]'s fire breath!")
// deals damage to mechs
- for(var/obj/mecha/M in T.contents)
+ for(var/obj/vehicle/sealed/mecha/M in T.contents)
if(M in hit_list)
continue
hit_list += M
- M.take_damage(45, BRUTE, "melee", 1)
+ M.take_damage(45, BRUTE, MELEE, 1)
sleep(1.5)
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm
index c1aea8db9d..04967f081d 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm
@@ -81,7 +81,7 @@ Difficulty: Normal
var/list/kill_phrases = list("Wsyvgi sj irivkc xettih. Vitemvmrk...", "Irivkc wsyvgi jsyrh. Vitemvmrk...", "Jyip jsyrh. Egxmzexmrk vitemv gcgpiw...", "Kix fiex. Liepmrk...")
var/list/target_phrases = list("Xevkix psgexih.", "Iriqc jsyrh.", "Eguymvih xevkix.")
-/mob/living/simple_animal/hostile/megafauna/hierophant/Initialize()
+/mob/living/simple_animal/hostile/megafauna/hierophant/Initialize(mapload)
. = ..()
internal = new/obj/item/gps/internal/hierophant(src)
spawned_beacon = new(loc)
@@ -490,7 +490,8 @@ Difficulty: Normal
queue_smooth_neighbors(src)
return ..()
-/obj/effect/temp_visual/hierophant/wall/CanPass(atom/movable/mover, turf/target)
+/obj/effect/temp_visual/hierophant/wall/CanAllowThrough(atom/movable/mover, turf/target)
+ . = ..()
if(QDELETED(caster))
return FALSE
if(mover == caster.pulledby)
@@ -501,7 +502,6 @@ Difficulty: Normal
return TRUE
if(mover == caster)
return TRUE
- return FALSE
/obj/effect/temp_visual/hierophant/chaser //a hierophant's chaser. follows target around, moving and producing a blast every speed deciseconds.
duration = 98
@@ -643,7 +643,7 @@ Difficulty: Normal
playsound(L,'sound/weapons/sear.ogg', 50, 1, -4)
to_chat(L, "You're struck by a [name]!")
var/limb_to_hit = L.get_bodypart(pick(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG))
- var/armor = L.run_armor_check(limb_to_hit, "melee", "Your armor absorbs [src]!", "Your armor blocks part of [src]!", 50, "Your armor was penetrated by [src]!")
+ var/armor = L.run_armor_check(limb_to_hit, MELEE, "Your armor absorbs [src]!", "Your armor blocks part of [src]!", 50, "Your armor was penetrated by [src]!")
L.apply_damage(damage, BURN, limb_to_hit, armor, wound_bonus=CANT_WOUND)
if(ishostile(L))
var/mob/living/simple_animal/hostile/H = L //mobs find and damage you...
@@ -656,14 +656,16 @@ Difficulty: Normal
if(monster_damage_boost && (ismegafauna(L) || istype(L, /mob/living/simple_animal/hostile/asteroid)))
L.adjustBruteLoss(damage)
log_combat(caster, L, "struck with a [name]")
- for(var/obj/mecha/M in T.contents - hit_things) //also damage mechs.
+ for(var/obj/vehicle/sealed/mecha/M in T.contents - hit_things) //also damage mechs.
hit_things += M
- if(M.occupant)
- if(friendly_fire_check && caster && caster.faction_check_mob(M.occupant))
+ for(var/O in M.occupants)
+ var/mob/living/occupant = O
+ if(friendly_fire_check && caster && caster.faction_check_mob(occupant))
continue
- to_chat(M.occupant, "Your [M.name] is struck by a [name]!")
- playsound(M,'sound/weapons/sear.ogg', 50, 1, -4)
- M.take_damage(damage, BURN, 0, 0, null, 50)
+ to_chat(occupant, "Your [M.name] is struck by a [name]!")
+ playsound(M,'sound/weapons/sear.ogg', 50, TRUE, -4)
+ M.take_damage(damage, BURN, 0, 0)
+
/obj/effect/hierophant
name = "hierophant beacon"
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm
index 15bfe2b7f7..b72d8f4003 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm
@@ -59,7 +59,7 @@ SHITCODE AHEAD. BE ADVISED. Also comment extravaganza
var/size = 3
var/charging = FALSE
-/mob/living/simple_animal/hostile/megafauna/legion/Initialize()
+/mob/living/simple_animal/hostile/megafauna/legion/Initialize(mapload)
. = ..()
internal = new/obj/item/gps/internal/legion(src)
@@ -335,7 +335,7 @@ SHITCODE AHEAD. BE ADVISED. Also comment extravaganza
anchored = TRUE
density = TRUE
layer = ABOVE_OBJ_LAYER
- armor = list("melee" = 0, "bullet" = 0, "laser" = 100,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 100,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0)
///What kind of projectile the actual damaging part should be.
var/projectile_type = /obj/item/projectile/beam/legion
///Time until the tracer gets shot
@@ -345,7 +345,7 @@ SHITCODE AHEAD. BE ADVISED. Also comment extravaganza
///Compared with the targeted mobs. If they have the faction, turret won't shoot.
var/faction = list("mining")
-/obj/structure/legionturret/Initialize()
+/obj/structure/legionturret/Initialize(mapload)
. = ..()
addtimer(CALLBACK(src, .proc/set_up_shot), initial_firing_time)
@@ -394,7 +394,7 @@ SHITCODE AHEAD. BE ADVISED. Also comment extravaganza
muzzle_type = /obj/effect/projectile/tracer/legion
impact_type = /obj/effect/projectile/tracer/legion
hitscan = TRUE
- movement_type = UNSTOPPABLE
+ projectile_piercing = ALL
///Used for the legion turret tracer.
/obj/effect/projectile/tracer/legion/tracer
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm
index 923a626b28..6ce43ed409 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm
@@ -64,7 +64,7 @@ GLOBAL_LIST_INIT(AISwarmerCapsByType, list(/mob/living/simple_animal/hostile/swa
var/static/list/swarmer_caps
-/mob/living/simple_animal/hostile/megafauna/swarmer_swarm_beacon/Initialize()
+/mob/living/simple_animal/hostile/megafauna/swarmer_swarm_beacon/Initialize(mapload)
. = ..()
swarmer_caps = GLOB.AISwarmerCapsByType //for admin-edits
internal = new/obj/item/gps/internal/swarmer_beacon(src)
@@ -104,7 +104,7 @@ GLOBAL_LIST_INIT(AISwarmerCapsByType, list(/mob/living/simple_animal/hostile/swa
weather_immunities = list("ash") //wouldn't be fun otherwise
AIStatus = AI_ON
-/mob/living/simple_animal/hostile/swarmer/ai/Initialize()
+/mob/living/simple_animal/hostile/swarmer/ai/Initialize(mapload)
. = ..()
ToggleLight() //so you can see them eating you out of house and home/shooting you/stunlocking you for eternity
LAZYINITLIST(GLOB.AISwarmersByType[type])
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm
index 938483be84..0d6287e50c 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm
@@ -70,7 +70,7 @@ Difficulty: Hard
chosen_message = "You are now screeching, disorienting targets around you."
chosen_attack_num = 3
-/mob/living/simple_animal/hostile/megafauna/wendigo/Initialize()
+/mob/living/simple_animal/hostile/megafauna/wendigo/Initialize(mapload)
. = ..()
starting = get_turf(src)
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm
index c5be239b3b..cda54e32f9 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm
@@ -42,7 +42,7 @@
damage = 0
damage_type = BURN
nodamage = 1
- flag = "energy"
+ flag = ENERGY
temperature = 50
/mob/living/simple_animal/hostile/asteroid/basilisk/GiveTarget(new_target)
@@ -110,7 +110,7 @@
qdel(O)
src.visible_message("[src] examines [O] closer, and telekinetically shatters the pen.")
-/mob/living/simple_animal/hostile/asteroid/basilisk/watcher/random/Initialize()
+/mob/living/simple_animal/hostile/asteroid/basilisk/watcher/random/Initialize(mapload)
. = ..()
if(prob(1))
if(prob(75))
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm
index ed056c2ad9..04b003b315 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm
@@ -72,14 +72,14 @@
return
//if it's not our target, we ignore it
-/mob/living/simple_animal/hostile/asteroid/curseblob/CanPass(atom/movable/mover, turf/target)
+/mob/living/simple_animal/hostile/asteroid/curseblob/CanAllowThrough(atom/movable/mover, turf/target)
+ . = ..()
if(mover == set_target)
return FALSE
if(istype(mover, /obj/item/projectile))
var/obj/item/projectile/P = mover
if(P.firer == set_target)
return FALSE
- return TRUE
#define IGNORE_PROC_IF_NOT_TARGET(X) /mob/living/simple_animal/hostile/asteroid/curseblob/##X(AM) { if (AM == set_target) return ..(); }
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm
index be596b0292..1f5cace824 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm
@@ -122,7 +122,7 @@ While using this makes the system rely on OnFire, it still gives options for tim
/obj/structure/elite_tumor
name = "pulsing tumor"
desc = "An odd, pulsing tumor sticking out of the ground. You feel compelled to reach out and touch it..."
- armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100)
+ armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100)
resistance_flags = INDESTRUCTIBLE
var/activity = TUMOR_INACTIVE
var/boosted = FALSE
@@ -383,8 +383,7 @@ While using this makes the system rely on OnFire, it still gives options for tim
ourelite = null
return ..()
-/obj/effect/temp_visual/elite_tumor_wall/CanPass(atom/movable/mover, turf/target)
+/obj/effect/temp_visual/elite_tumor_wall/CanAllowThrough(atom/movable/mover, turf/target)
+ . = ..()
if(mover == ourelite || mover == activator)
return FALSE
- else
- return TRUE
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm
index 4425bce532..7b21ce6a62 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm
@@ -203,7 +203,7 @@
is_mirror = TRUE
var/mob/living/simple_animal/hostile/asteroid/elite/herald/my_master = null
-/mob/living/simple_animal/hostile/asteroid/elite/herald/mirror/Initialize()
+/mob/living/simple_animal/hostile/asteroid/elite/herald/mirror/Initialize(mapload)
..()
toggle_ai(AI_OFF)
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm
index dca508cfeb..c744d4ed58 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm
@@ -275,7 +275,7 @@
duration = 10
color = rgb(0,0,0)
-/obj/effect/temp_visual/dragon_swoop/legionnaire/Initialize()
+/obj/effect/temp_visual/dragon_swoop/legionnaire/Initialize(mapload)
. = ..()
transform *= 0.33
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goldgrub.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goldgrub.dm
index 3845c6f406..2017d75c36 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goldgrub.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goldgrub.dm
@@ -35,7 +35,7 @@
var/chase_time = 100
var/will_burrow = TRUE
-/mob/living/simple_animal/hostile/asteroid/goldgrub/Initialize()
+/mob/living/simple_animal/hostile/asteroid/goldgrub/Initialize(mapload)
. = ..()
var/i = rand(1,3)
while(i)
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm
index 6bd55d06ae..2b7943d130 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm
@@ -101,7 +101,7 @@
stat_attack = UNCONSCIOUS
robust_searching = 1
-/mob/living/simple_animal/hostile/asteroid/goliath/beast/random/Initialize()
+/mob/living/simple_animal/hostile/asteroid/goliath/beast/random/Initialize(mapload)
. = ..()
if(prob(1))
new /mob/living/simple_animal/hostile/asteroid/goliath/beast/ancient(loc)
@@ -200,7 +200,7 @@
L.Stun(75)
L.adjustBruteLoss(rand(15,20)) // Less stun more harm
latched = TRUE
- for(var/obj/mecha/M in loc)
+ for(var/obj/vehicle/sealed/mecha/M in loc)
M.take_damage(20, BRUTE, null, null, null, 25)
if(!latched)
retract()
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/gutlunch.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/gutlunch.dm
index e35220a920..d0aa25aabc 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/gutlunch.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/gutlunch.dm
@@ -46,7 +46,7 @@
/obj/item/organ/lungs, /obj/item/organ/stomach, /obj/item/organ/tongue) // So we dont eat implants or brains. Still can eat robotic stuff thats subtyped of base line but thats a issue for another day.
var/obj/item/udder/gutlunch/udder = null
-/mob/living/simple_animal/hostile/asteroid/gutlunch/Initialize()
+/mob/living/simple_animal/hostile/asteroid/gutlunch/Initialize(mapload)
udder = new()
. = ..()
AddElement(/datum/element/ventcrawling, given_tier = VENTCRAWLER_ALWAYS)
@@ -103,7 +103,7 @@
name = "gubbuck"
gender = MALE
-/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck/Initialize()
+/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck/Initialize(mapload)
. = ..()
add_atom_colour(pick("#E39FBB", "#D97D64", "#CF8C4A"), FIXED_COLOUR_PRIORITY)
resize = 0.85
@@ -130,7 +130,7 @@
/obj/item/udder/gutlunch
name = "nutrient sac"
-/obj/item/udder/gutlunch/Initialize()
+/obj/item/udder/gutlunch/Initialize(mapload)
. = ..()
reagents = new(50)
reagents.my_atom = src
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm
index 7db91b50ad..757272ca98 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm
@@ -92,7 +92,7 @@
var/swarming = FALSE
var/my_creator = null
-/mob/living/simple_animal/hostile/asteroid/hivelordbrood/Initialize()
+/mob/living/simple_animal/hostile/asteroid/hivelordbrood/Initialize(mapload)
. = ..()
if(swarming)
AddComponent(/datum/component/swarming) //oh god not the bees
@@ -126,7 +126,7 @@
var/dwarf_mob = FALSE
var/mob/living/carbon/human/stored_mob
-/mob/living/simple_animal/hostile/asteroid/hivelord/legion/random/Initialize()
+/mob/living/simple_animal/hostile/asteroid/hivelord/legion/random/Initialize(mapload)
. = ..()
if(prob(5))
new /mob/living/simple_animal/hostile/asteroid/hivelord/legion/dwarf(loc)
@@ -278,7 +278,7 @@
see_in_dark = 8
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
-/mob/living/simple_animal/hostile/big_legion/Initialize()
+/mob/living/simple_animal/hostile/big_legion/Initialize(mapload)
.=..()
AddComponent(/datum/component/spawner, list(/mob/living/simple_animal/hostile/asteroid/hivelord/legion), 200, faction, "peels itself off from", 3)
@@ -298,7 +298,7 @@
. = ..()
H.dna.add_mutation(DWARFISM)
-/obj/effect/mob_spawn/human/corpse/damaged/legioninfested/Initialize()
+/obj/effect/mob_spawn/human/corpse/damaged/legioninfested/Initialize(mapload)
var/type = pickweight(list("Miner" = 45, "Ashwalker" = 10, "Golem" = 10,"Clown" = 10, pick(list("Shadow", "YeOlde","Operative", "Cultist", "Lavaknight")) = 4, "Assistant" = 20, "Beelegion" = 1))
switch(type)
if("Miner")
diff --git a/code/modules/mob/living/simple_animal/hostile/mushroom.dm b/code/modules/mob/living/simple_animal/hostile/mushroom.dm
index f41746ea69..527fd51260 100644
--- a/code/modules/mob/living/simple_animal/hostile/mushroom.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mushroom.dm
@@ -40,7 +40,7 @@
var/static/mutable_appearance/cap_living //Where we store our cap icons so we dont generate them constantly to update our icon
var/static/mutable_appearance/cap_dead
-/mob/living/simple_animal/hostile/mushroom/Initialize()
+/mob/living/simple_animal/hostile/mushroom/Initialize(mapload)
. = ..()
AddElement(/datum/element/ventcrawling, given_tier = VENTCRAWLER_ALWAYS)
@@ -57,7 +57,7 @@
if(!stat)//Mushrooms slowly regenerate if conscious, for people who want to save them from being eaten
adjustBruteLoss(-2)
-/mob/living/simple_animal/hostile/mushroom/Initialize()//Makes every shroom a little unique
+/mob/living/simple_animal/hostile/mushroom/Initialize(mapload)//Makes every shroom a little unique
melee_damage_lower += rand(3, 5)
melee_damage_upper += rand(10,20)
maxHealth += rand(40,60)
diff --git a/code/modules/mob/living/simple_animal/hostile/netherworld.dm b/code/modules/mob/living/simple_animal/hostile/netherworld.dm
index a81ae6eef6..06db07daf6 100644
--- a/code/modules/mob/living/simple_animal/hostile/netherworld.dm
+++ b/code/modules/mob/living/simple_animal/hostile/netherworld.dm
@@ -34,7 +34,7 @@
deathmessage = "wails as its form turns into a pulpy mush."
death_sound = 'sound/voice/hiss6.ogg'
-/mob/living/simple_animal/hostile/netherworld/migo/Initialize()
+/mob/living/simple_animal/hostile/netherworld/migo/Initialize(mapload)
. = ..()
migo_sounds = list('sound/items/bubblewrap.ogg', 'sound/items/change_jaws.ogg', 'sound/items/crowbar.ogg', 'sound/items/drink.ogg', 'sound/items/deconstruct.ogg', 'sound/items/carhorn.ogg', 'sound/items/change_drill.ogg', 'sound/items/dodgeball.ogg', 'sound/items/eatfood.ogg', 'sound/items/megaphone.ogg', 'sound/items/screwdriver.ogg', 'sound/items/weeoo1.ogg', 'sound/items/wirecutter.ogg', 'sound/items/welder.ogg', 'sound/items/zip.ogg', 'sound/items/rped.ogg', 'sound/items/ratchet.ogg', 'sound/items/polaroid1.ogg', 'sound/items/pshoom.ogg', 'sound/items/airhorn.ogg', 'sound/items/geiger/high1.ogg', 'sound/items/geiger/high2.ogg', 'sound/voice/beepsky/creep.ogg', 'sound/voice/beepsky/iamthelaw.ogg', 'sound/voice/ed209_20sec.ogg', 'sound/voice/hiss3.ogg', 'sound/voice/hiss6.ogg', 'sound/voice/medbot/patchedup.ogg', 'sound/voice/medbot/feelbetter.ogg', 'sound/voice/human/manlaugh1.ogg', 'sound/voice/human/womanlaugh.ogg', 'sound/weapons/sear.ogg', 'sound/ambience/antag/clockcultalr.ogg', 'sound/ambience/antag/ling_aler.ogg', 'sound/ambience/antag/tatoralert.ogg', 'sound/ambience/antag/monkey.ogg', 'sound/mecha/nominal.ogg', 'sound/mecha/weapdestr.ogg', 'sound/mecha/critdestr.ogg', 'sound/mecha/imag_enh.ogg', 'sound/effects/adminhelp.ogg', 'sound/effects/alert.ogg', 'sound/effects/attackblob.ogg', 'sound/effects/bamf.ogg', 'sound/effects/blobattack.ogg', 'sound/effects/break_stone.ogg', 'sound/effects/bubbles.ogg', 'sound/effects/bubbles2.ogg', 'sound/effects/clang.ogg', 'sound/effects/clockcult_gateway_disrupted.ogg', 'sound/effects/clownstep2.ogg', 'sound/effects/curse1.ogg', 'sound/effects/dimensional_rend.ogg', 'sound/effects/doorcreaky.ogg', 'sound/effects/empulse.ogg', 'sound/effects/explosion_distant.ogg', 'sound/effects/explosionfar.ogg', 'sound/effects/explosion1.ogg', 'sound/effects/grillehit.ogg', 'sound/effects/genetics.ogg', 'sound/effects/heart_beat.ogg', 'sound/effects/hyperspace_begin.ogg', 'sound/effects/hyperspace_end.ogg', 'sound/effects/his_grace_awaken.ogg', 'sound/effects/pai_boot.ogg', 'sound/effects/phasein.ogg', 'sound/effects/picaxe1.ogg', 'sound/effects/ratvar_reveal.ogg', 'sound/effects/sparks1.ogg', 'sound/effects/smoke.ogg', 'sound/effects/splat.ogg', 'sound/effects/snap.ogg', 'sound/effects/tendril_destroyed.ogg', 'sound/effects/supermatter.ogg', 'sound/misc/desceration-01.ogg', 'sound/misc/desceration-02.ogg', 'sound/misc/desceration-03.ogg', 'sound/misc/bloblarm.ogg', 'sound/misc/airraid.ogg', 'sound/misc/bang.ogg','sound/misc/highlander.ogg', 'sound/misc/interference.ogg', 'sound/misc/notice1.ogg', 'sound/misc/notice2.ogg', 'sound/misc/sadtrombone.ogg', 'sound/misc/slip.ogg', 'sound/misc/splort.ogg', 'sound/weapons/armbomb.ogg', 'sound/weapons/beam_sniper.ogg', 'sound/weapons/chainsawhit.ogg', 'sound/weapons/emitter.ogg', 'sound/weapons/emitter2.ogg', 'sound/weapons/blade1.ogg', 'sound/weapons/bladeslice.ogg', 'sound/weapons/blastcannon.ogg', 'sound/weapons/blaster.ogg', 'sound/weapons/bulletflyby3.ogg', 'sound/weapons/circsawhit.ogg', 'sound/weapons/cqchit2.ogg', 'sound/weapons/drill.ogg', 'sound/weapons/genhit1.ogg', 'sound/weapons/gunshot_silenced.ogg', 'sound/weapons/gunshot2.ogg', 'sound/weapons/handcuffs.ogg', 'sound/weapons/homerun.ogg', 'sound/weapons/kenetic_accel.ogg', 'sound/machines/clockcult/steam_whoosh.ogg', 'sound/machines/fryer/deep_fryer_emerge.ogg', 'sound/machines/airlock.ogg', 'sound/machines/airlock_alien_prying.ogg', 'sound/machines/airlockclose.ogg', 'sound/machines/airlockforced.ogg', 'sound/machines/airlockopen.ogg', 'sound/machines/alarm.ogg', 'sound/machines/blender.ogg', 'sound/machines/boltsdown.ogg', 'sound/machines/boltsup.ogg', 'sound/machines/buzz-sigh.ogg', 'sound/machines/buzz-two.ogg', 'sound/machines/chime.ogg', 'sound/machines/cryo_warning.ogg', 'sound/machines/defib_charge.ogg', 'sound/machines/defib_failed.ogg', 'sound/machines/defib_ready.ogg', 'sound/machines/defib_zap.ogg', 'sound/machines/deniedbeep.ogg', 'sound/machines/ding.ogg', 'sound/machines/disposalflush.ogg', 'sound/machines/door_close.ogg', 'sound/machines/door_open.ogg', 'sound/machines/engine_alert1.ogg', 'sound/machines/engine_alert2.ogg', 'sound/machines/hiss.ogg', 'sound/machines/honkbot_evil_laugh.ogg', 'sound/machines/juicer.ogg', 'sound/machines/ping.ogg', 'sound/machines/signal.ogg', 'sound/machines/synth_no.ogg', 'sound/machines/synth_yes.ogg', 'sound/machines/terminal_alert.ogg', 'sound/machines/triple_beep.ogg', 'sound/machines/twobeep.ogg', 'sound/machines/ventcrawl.ogg', 'sound/machines/warning-buzzer.ogg', SSstation.announcer.event_sounds[ANNOUNCER_OUTBREAK5], SSstation.announcer.event_sounds[ANNOUNCER_OUTBREAK7], SSstation.announcer.event_sounds[ANNOUNCER_POWEROFF], SSstation.announcer.event_sounds[ANNOUNCER_RADIATION], SSstation.announcer.event_sounds[ANNOUNCER_SHUTTLERECALLED], SSstation.announcer.event_sounds[ANNOUNCER_SHUTTLEDOCK], SSstation.announcer.event_sounds[ANNOUNCER_SHUTTLECALLED], SSstation.announcer.event_sounds[ANNOUNCER_AIMALF]) //hahahaha fuck you code divers
@@ -81,7 +81,7 @@
mob_types = list(/mob/living/simple_animal/hostile/netherworld/migo, /mob/living/simple_animal/hostile/netherworld, /mob/living/simple_animal/hostile/netherworld/blankbody)
faction = list("nether")
-/obj/structure/spawner/nether/Initialize()
+/obj/structure/spawner/nether/Initialize(mapload)
.=..()
START_PROCESSING(SSprocessing, src)
diff --git a/code/modules/mob/living/simple_animal/hostile/pirate.dm b/code/modules/mob/living/simple_animal/hostile/pirate.dm
index 74e37bea21..01015c43ab 100644
--- a/code/modules/mob/living/simple_animal/hostile/pirate.dm
+++ b/code/modules/mob/living/simple_animal/hostile/pirate.dm
@@ -55,7 +55,7 @@
speed = 1
spacewalk = TRUE
-/mob/living/simple_animal/hostile/pirate/melee/Initialize()
+/mob/living/simple_animal/hostile/pirate/melee/Initialize(mapload)
. = ..()
sord = new(src)
@@ -63,7 +63,7 @@
QDEL_NULL(sord)
return ..()
-/mob/living/simple_animal/hostile/pirate/melee/Initialize()
+/mob/living/simple_animal/hostile/pirate/melee/Initialize(mapload)
. = ..()
set_light(2)
diff --git a/code/modules/mob/living/simple_animal/hostile/plaguerat.dm b/code/modules/mob/living/simple_animal/hostile/plaguerat.dm
index 497359829e..7112740b39 100644
--- a/code/modules/mob/living/simple_animal/hostile/plaguerat.dm
+++ b/code/modules/mob/living/simple_animal/hostile/plaguerat.dm
@@ -42,7 +42,7 @@ GLOBAL_LIST_EMPTY(plague_rats)
var/obj/machinery/atmospherics/components/unary/entry_vent
var/obj/machinery/atmospherics/components/unary/exit_vent
-/mob/living/simple_animal/hostile/plaguerat/Initialize()
+/mob/living/simple_animal/hostile/plaguerat/Initialize(mapload)
. = ..()
GLOB.plague_rats += src
AddComponent(/datum/component/swarming)
diff --git a/code/modules/mob/living/simple_animal/hostile/regalrat.dm b/code/modules/mob/living/simple_animal/hostile/regalrat.dm
index 6995202e9c..f90fb55424 100644
--- a/code/modules/mob/living/simple_animal/hostile/regalrat.dm
+++ b/code/modules/mob/living/simple_animal/hostile/regalrat.dm
@@ -29,7 +29,7 @@
var/datum/action/cooldown/riot
///Number assigned to rats and mice, checked when determining infighting.
-/mob/living/simple_animal/hostile/regalrat/Initialize()
+/mob/living/simple_animal/hostile/regalrat/Initialize(mapload)
. = ..()
coffer = new /datum/action/cooldown/coffer
coffer.Grant(src)
@@ -183,7 +183,7 @@
mob_biotypes = MOB_ORGANIC|MOB_BEAST
faction = list("rat")
-/mob/living/simple_animal/hostile/rat/Initialize()
+/mob/living/simple_animal/hostile/rat/Initialize(mapload)
. = ..()
SSmobs.cheeserats += src
AddComponent(/datum/component/swarming)
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm
index cb1ee6c6f6..c45587e2aa 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm
@@ -41,7 +41,7 @@
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
-/mob/living/simple_animal/hostile/retaliate/bat/Initialize()
+/mob/living/simple_animal/hostile/retaliate/bat/Initialize(mapload)
. = ..()
AddElement(/datum/element/ventcrawling, given_tier = VENTCRAWLER_ALWAYS)
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm
index e2f83677d8..0233cb9c5d 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm
@@ -85,7 +85,7 @@
emote_see = list("bubbles", "oozes")
loot = list(/obj/item/clothing/mask/gas/clown_hat, /obj/effect/particle_effect/foam)
-/mob/living/simple_animal/hostile/retaliate/clown/lube/Initialize()
+/mob/living/simple_animal/hostile/retaliate/clown/lube/Initialize(mapload)
. = ..()
AddElement(/datum/element/snailcrawl)
@@ -147,7 +147,7 @@
obj_damage = 5
loot = list(/obj/item/clothing/suit/hooded/bloated_human, /obj/item/clothing/mask/gas/clown_hat, /obj/effect/gibspawner/human, /obj/item/soap)
-/mob/living/simple_animal/hostile/retaliate/clown/fleshclown/Initialize()
+/mob/living/simple_animal/hostile/retaliate/clown/fleshclown/Initialize(mapload)
. = ..()
AddElement(/datum/element/ventcrawling, given_tier = VENTCRAWLER_ALWAYS)
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/frog.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/frog.dm
index 2433b45cc0..ea250d60ba 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/frog.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/frog.dm
@@ -30,7 +30,7 @@
gold_core_spawnable = HOSTILE_SPAWN
var/stepped_sound = 'sound/effects/huuu.ogg'
-/mob/living/simple_animal/hostile/retaliate/frog/Initialize()
+/mob/living/simple_animal/hostile/retaliate/frog/Initialize(mapload)
. = ..()
if(prob(1))
name = "rare frog"
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm
index f6ab2a1a9e..a0a2b897e4 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm
@@ -45,7 +45,7 @@
var/mutable_appearance/ghost_facial_hair
var/random = TRUE //if you want random names for ghosts or not
-/mob/living/simple_animal/hostile/retaliate/ghost/Initialize()
+/mob/living/simple_animal/hostile/retaliate/ghost/Initialize(mapload)
. = ..()
give_hair()
set_light(1, 2) // same glowing as visible player ghosts
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm
index 63a796a809..92eb310595 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm
@@ -9,8 +9,8 @@
else
enemies -= L
else if(ismecha(A))
- var/obj/mecha/M = A
- if(M.occupant)
+ var/obj/vehicle/sealed/mecha/M = A
+ if(LAZYLEN(M.occupants))
return A
/mob/living/simple_animal/hostile/retaliate/ListTargets()
@@ -31,10 +31,10 @@
if(faction_check_mob(M) && attack_same || !faction_check_mob(M))
enemies |= M
else if(ismecha(A))
- var/obj/mecha/M = A
- if(M.occupant)
+ var/obj/vehicle/sealed/mecha/M = A
+ if(LAZYLEN(M.occupants))
enemies |= M
- enemies |= M.occupant
+ enemies |= M.occupants
for(var/mob/living/simple_animal/hostile/retaliate/H in around)
if(faction_check_mob(H) && !attack_same && !H.attack_same)
diff --git a/code/modules/mob/living/simple_animal/hostile/skeleton.dm b/code/modules/mob/living/simple_animal/hostile/skeleton.dm
index ebacf1edef..a812e9d3c4 100644
--- a/code/modules/mob/living/simple_animal/hostile/skeleton.dm
+++ b/code/modules/mob/living/simple_animal/hostile/skeleton.dm
@@ -123,6 +123,6 @@
attack_sound = 'sound/weapons/sonic_jackhammer.ogg'
loot = list(/obj/effect/decal/remains/plasma, /obj/item/pickaxe/drill/jackhammer)
-/mob/living/simple_animal/hostile/skeleton/plasmaminer/Initialize()
+/mob/living/simple_animal/hostile/skeleton/plasmaminer/Initialize(mapload)
. = ..()
set_light(2)
diff --git a/code/modules/mob/living/simple_animal/hostile/space_dragon.dm b/code/modules/mob/living/simple_animal/hostile/space_dragon.dm
index 800c7d29ca..f8931aa27b 100644
--- a/code/modules/mob/living/simple_animal/hostile/space_dragon.dm
+++ b/code/modules/mob/living/simple_animal/hostile/space_dragon.dm
@@ -99,7 +99,7 @@
if(!chosen_color)
dragon_name()
color_selection()
-
+
/mob/living/simple_animal/hostile/space_dragon/Life()
. = ..()
@@ -158,8 +158,8 @@
adjustHealth(-L.maxHealth * 0.5)
return
. = ..()
- if(istype(target, /obj/mecha))
- var/obj/mecha/M = target
+ if(istype(target, /obj/vehicle/sealed/mecha))
+ var/obj/vehicle/sealed/mecha/M = target
M.take_damage(50, BRUTE, MELEE, 1)
/mob/living/simple_animal/hostile/space_dragon/AltClickOn(atom/A)
@@ -322,7 +322,7 @@
L.adjustFireLoss(30)
to_chat(L, "You're hit by [src]'s fire breath!")
// deals damage to mechs
- for(var/obj/mecha/M in T.contents)
+ for(var/obj/vehicle/sealed/mecha/M in T.contents)
if(M in hit_list)
continue
hit_list += M
@@ -530,7 +530,7 @@
/obj/structure/carp_rift
name = "carp rift"
desc = "A rift akin to the ones space carp use to travel long distances."
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 50, BIO = 100, RAD = 100, FIRE = 100, ACID = 100)
max_integrity = 300
icon = 'icons/obj/carp_rift.dmi'
icon_state = "carp_rift_carpspawn"
@@ -637,7 +637,7 @@
icon_state = "carp_rift_charged"
light_color = LIGHT_COLOR_YELLOW
update_light()
- armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100)
+ armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100)
resistance_flags = INDESTRUCTIBLE
dragon.rifts_charged += 1
if(dragon.rifts_charged != 3 && !dragon.objective_complete)
diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm
index df73516337..01f6b72128 100644
--- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm
+++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm
@@ -62,7 +62,7 @@
speed = 1
spacewalk = TRUE
-/mob/living/simple_animal/hostile/syndicate/space/Initialize()
+/mob/living/simple_animal/hostile/syndicate/space/Initialize(mapload)
. = ..()
set_light(4)
@@ -98,7 +98,7 @@
speed = 1
spacewalk = TRUE
-/mob/living/simple_animal/hostile/syndicate/melee/space/Initialize()
+/mob/living/simple_animal/hostile/syndicate/melee/space/Initialize(mapload)
. = ..()
set_light(4)
@@ -122,7 +122,7 @@
status_flags = 0
var/obj/effect/light_emitter/red_energy_sword/sord
-/mob/living/simple_animal/hostile/syndicate/melee/sword/Initialize()
+/mob/living/simple_animal/hostile/syndicate/melee/sword/Initialize(mapload)
. = ..()
set_light(2)
@@ -147,7 +147,7 @@
speed = 1
spacewalk = TRUE
-/mob/living/simple_animal/hostile/syndicate/melee/sword/space/Initialize()
+/mob/living/simple_animal/hostile/syndicate/melee/sword/space/Initialize(mapload)
. = ..()
sord = new(src)
set_light(4)
@@ -192,7 +192,7 @@
speed = 1
spacewalk = TRUE
-/mob/living/simple_animal/hostile/syndicate/ranged/space/Initialize()
+/mob/living/simple_animal/hostile/syndicate/ranged/space/Initialize(mapload)
. = ..()
set_light(4)
@@ -225,7 +225,7 @@
speed = 1
spacewalk = TRUE
-/mob/living/simple_animal/hostile/syndicate/ranged/smg/space/Initialize()
+/mob/living/simple_animal/hostile/syndicate/ranged/smg/space/Initialize(mapload)
. = ..()
set_light(4)
@@ -255,7 +255,7 @@
speed = 1
spacewalk = TRUE
-/mob/living/simple_animal/hostile/syndicate/ranged/shotgun/space/Initialize()
+/mob/living/simple_animal/hostile/syndicate/ranged/shotgun/space/Initialize(mapload)
. = ..()
set_light(4)
@@ -309,6 +309,6 @@
del_on_death = 1
deathmessage = "is smashed into pieces!"
-/mob/living/simple_animal/hostile/viscerator/Initialize()
+/mob/living/simple_animal/hostile/viscerator/Initialize(mapload)
. = ..()
AddComponent(/datum/component/swarming)
diff --git a/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm b/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm
index cc5b0b8a75..452138fa80 100644
--- a/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm
+++ b/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm
@@ -20,7 +20,7 @@
/// The amount of time it takes to create a venus human trap, in deciseconds
var/growth_time = 1200
-/obj/structure/alien/resin/flower_bud_enemy/Initialize()
+/obj/structure/alien/resin/flower_bud_enemy/Initialize(mapload)
. = ..()
var/list/anchors = list()
anchors += locate(x-2,y+2,z)
diff --git a/code/modules/mob/living/simple_animal/hostile/wizard.dm b/code/modules/mob/living/simple_animal/hostile/wizard.dm
index 59bd67e42a..97f4a0a5fc 100644
--- a/code/modules/mob/living/simple_animal/hostile/wizard.dm
+++ b/code/modules/mob/living/simple_animal/hostile/wizard.dm
@@ -37,7 +37,7 @@
footstep_type = FOOTSTEP_MOB_SHOE
-/mob/living/simple_animal/hostile/wizard/Initialize()
+/mob/living/simple_animal/hostile/wizard/Initialize(mapload)
. = ..()
fireball = new /obj/effect/proc_holder/spell/aimed/fireball
fireball.clothes_req = NONE
diff --git a/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm b/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm
index f10b184a45..eb35606e0d 100644
--- a/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm
+++ b/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm
@@ -38,7 +38,7 @@
var/datum/action/innate/fugu/expand/E
loot = list(/obj/item/fugu_gland{layer = ABOVE_MOB_LAYER})
-/mob/living/simple_animal/hostile/asteroid/fugu/Initialize()
+/mob/living/simple_animal/hostile/asteroid/fugu/Initialize(mapload)
. = ..()
E = new
E.Grant(src)
diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm
index 4cc66bc4bd..fe479bb943 100644
--- a/code/modules/mob/living/simple_animal/parrot.dm
+++ b/code/modules/mob/living/simple_animal/parrot.dm
@@ -104,7 +104,7 @@
var/obj/item/held_item = null
-/mob/living/simple_animal/parrot/Initialize()
+/mob/living/simple_animal/parrot/Initialize(mapload)
. = ..()
if(spawns_with_headset)
if(!ears)
@@ -902,7 +902,7 @@ GLOBAL_LIST_INIT(strippable_parrot_items, create_strippable_list(list(
var/longest_survival = 0
var/longest_deathstreak = 0
-/mob/living/simple_animal/parrot/Poly/Initialize()
+/mob/living/simple_animal/parrot/Poly/Initialize(mapload)
ears = new /obj/item/radio/headset/headset_eng(src)
available_channels = list(":e")
Read_Memory()
@@ -1004,7 +1004,7 @@ GLOBAL_LIST_INIT(strippable_parrot_items, create_strippable_list(list(
incorporeal_move = INCORPOREAL_MOVE_BASIC
butcher_results = list(/obj/item/ectoplasm = 1)
-/mob/living/simple_animal/parrot/Poly/ghost/Initialize()
+/mob/living/simple_animal/parrot/Poly/ghost/Initialize(mapload)
memory_saved = TRUE //At this point nothing is saved
. = ..()
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index 2a978bedb4..9cc82f6a1a 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -151,7 +151,7 @@
//Generic flags
var/simple_mob_flags = NONE
-/mob/living/simple_animal/Initialize()
+/mob/living/simple_animal/Initialize(mapload)
. = ..()
GLOB.simple_animals[AIStatus] += src
if(gender == PLURAL)
@@ -394,8 +394,8 @@
if(L.stat != CONSCIOUS)
return FALSE
if (ismecha(the_target))
- var/obj/mecha/M = the_target
- if (M.occupant)
+ var/obj/vehicle/sealed/mecha/M = the_target
+ if(LAZYLEN(M.occupants))
return FALSE
return TRUE
diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm
index 38149494bc..9812307300 100644
--- a/code/modules/mob/living/simple_animal/slime/slime.dm
+++ b/code/modules/mob/living/simple_animal/slime/slime.dm
@@ -231,11 +231,11 @@
amount = -abs(amount)
return ..() //Heals them
-/mob/living/simple_animal/slime/bullet_act(obj/item/projectile/Proj)
+/mob/living/simple_animal/slime/bullet_act(obj/item/projectile/Proj, def_zone, piercing_hit = FALSE)
attacked += 10
if((Proj.damage_type == BURN))
adjustBruteLoss(-abs(Proj.damage)) //fire projectiles heals slimes.
- Proj.on_hit(src)
+ Proj.on_hit(src, 0, piercing_hit)
return BULLET_ACT_BLOCK
return ..()
diff --git a/code/modules/mob/living/smell.dm b/code/modules/mob/living/smell.dm
new file mode 100644
index 0000000000..bc82fe5ccb
--- /dev/null
+++ b/code/modules/mob/living/smell.dm
@@ -0,0 +1,62 @@
+#define DEFAULT_SMELL_SENSITIVITY 1
+
+/mob/living
+ var/last_smell_time
+ var/last_smell_text
+
+/mob/living/proc/get_smell_sensitivity()
+ return DEFAULT_SMELL_SENSITIVITY
+
+/mob/living/carbon/get_smell_sensitivity()
+ . = DEFAULT_SMELL_SENSITIVITY
+ var/obj/item/organ/lungs/lungs = getorganslot(ORGAN_SLOT_LUNGS) // don't think about it too hard
+ if(istype(lungs))
+ . = lungs.smell_sensitivity
+ if(HAS_TRAIT(src, TRAIT_ANOSMIA))
+ . *= 0
+ else if(HAS_TRAIT(src, TRAIT_GOODSMELL))
+ . *= 2
+
+/mob/living/proc/smell(datum/gas_mixture/from)
+ if(last_smell_time + 50 > world.time)
+ return FALSE
+ var/smell_sensitivity = get_smell_sensitivity()
+
+ if(smell_sensitivity == 0)
+ return FALSE
+
+ var/pressure = from.return_pressure()
+ var/total_moles = from.total_moles()
+
+ #define PP_MOLES(X) ((X / total_moles) * pressure)
+
+ #define PP(air, gas) PP_MOLES(air.get_moles(gas))
+
+ var/list/odors = GLOB.gas_data.odors
+ var/list/odor_strengths = GLOB.gas_data.odor_strengths
+ var/list/odors_found = list()
+ for(var/gas in from.get_gases())
+ if(!(gas in odors))
+ continue
+ var/pp = PP(from, gas)
+ var/strength = (odor_strengths[gas] / smell_sensitivity)
+ if(pp > 2*strength)
+ odors_found += "[odors[gas]]"
+ else if(pp > strength)
+ odors_found += "a hint of [odors[gas]]"
+ if(!length(odors_found))
+ return FALSE
+ var/text_output = ""
+ if(hallucination > 50 && prob(25))
+ text_output = pick("", "spiders","dreams","nightmares","the future","the past","victory",\
+ "defeat","pain","bliss","chaos","revenge","cold","rotten glass","poison","time","space","death","life","truth","lies","justice","memory",\
+ "regrets","your soul","suffering","magic","music","noise","blood","hunger","the american way")
+ else
+ text_output = english_list(odors_found, "something indescribable")
+ if(text_output != last_smell_text || last_smell_time + 100 < world.time)
+ to_chat(src, "You can smell [text_output].")
+ last_smell_time = world.time
+ last_smell_text = text_output
+
+ #undef PP_MOLES
+ #undef PP
diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm
index aac55c614b..a49df9522b 100644
--- a/code/modules/mob/login.dm
+++ b/code/modules/mob/login.dm
@@ -79,6 +79,7 @@
for(var/foo in client.player_details.post_login_callbacks)
var/datum/callback/CB = foo
CB.Invoke()
+ auto_deadmin_on_login()
mind?.hide_ckey = client?.prefs?.hide_ckey
@@ -96,3 +97,13 @@
// optimized area sound effects. Enable during events (compile flag when 😳)
// AddElement(/datum/element/weather_listener, /datum/weather/long_rain, ZTRAIT_STATION, GLOB.rain_sounds)
+
+/mob/proc/auto_deadmin_on_login() //return true if they're not an admin at the end.
+ if(!client?.holder)
+ return TRUE
+ if(CONFIG_GET(flag/auto_deadmin_players) || (client.prefs?.deadmin & DEADMIN_ALWAYS))
+ return client.holder.auto_deadmin()
+ if(mind.has_antag_datum(/datum/antagonist) && (CONFIG_GET(flag/auto_deadmin_antagonists) || client.prefs?.deadmin & DEADMIN_ANTAGONIST))
+ return client.holder.auto_deadmin()
+ if(job)
+ return SSjob.handle_auto_deadmin_roles(client, job)
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 4b8fa75aee..f5c89312e3 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -1,4 +1,4 @@
-/mob/Initialize()
+/mob/Initialize(mapload)
add_to_mob_list()
if(stat == DEAD)
add_to_dead_mob_list()
@@ -879,7 +879,7 @@ GLOBAL_VAR_INIT(exploit_warn_spam_prevention, 0)
return
client.mouse_pointer_icon = initial(client.mouse_pointer_icon)
if (ismecha(loc))
- var/obj/mecha/M = loc
+ var/obj/vehicle/sealed/mecha/M = loc
if(M.mouse_pointer)
client.mouse_pointer_icon = M.mouse_pointer
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index 527b0c0917..138a3b9662 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -9,7 +9,7 @@
mouse_drag_pointer = MOUSE_ACTIVE_POINTER
throwforce = 10
blocks_emissive = EMISSIVE_BLOCK_GENERIC
-
+ pass_flags_self = PASSMOB
vis_flags = VIS_INHERIT_PLANE //when this be added to vis_contents of something it inherit something.plane, important for visualisation of mob in openspace.
attack_hand_is_action = TRUE
diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm
index 1d90c3a651..e2345a6384 100644
--- a/code/modules/modular_computers/computers/item/computer.dm
+++ b/code/modules/modular_computers/computers/item/computer.dm
@@ -10,7 +10,7 @@
integrity_failure = 0.5
max_integrity = 100
rad_flags = RAD_PROTECT_CONTENTS
- armor = list("melee" = 0, "bullet" = 20, "laser" = 20, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 0, BULLET = 20, LASER = 20, ENERGY = 100, BOMB = 0, BIO = 100, RAD = 100, FIRE = 0, ACID = 0)
var/enabled = 0 // Whether the computer is turned on.
var/screen_on = 1 // Whether the computer is active/opened/it's screen is on.
@@ -54,7 +54,7 @@
var/comp_light_color //The color of that light
-/obj/item/modular_computer/Initialize()
+/obj/item/modular_computer/Initialize(mapload)
. = ..()
START_PROCESSING(SSobj, src)
if(!physical)
diff --git a/code/modules/modular_computers/computers/item/computer_damage.dm b/code/modules/modular_computers/computers/item/computer_damage.dm
index 9053aebcd5..042b3937aa 100644
--- a/code/modules/modular_computers/computers/item/computer_damage.dm
+++ b/code/modules/modular_computers/computers/item/computer_damage.dm
@@ -2,9 +2,9 @@
. = ..()
var/component_probability = min(50, max(damage_amount*0.1, 1 - obj_integrity/max_integrity))
switch(damage_flag)
- if("bullet")
+ if(BULLET)
component_probability = damage_amount * 0.5
- if("laser")
+ if(LASER)
component_probability = damage_amount * 0.66
if(component_probability)
for(var/I in all_components)
diff --git a/code/modules/modular_computers/computers/item/laptop.dm b/code/modules/modular_computers/computers/item/laptop.dm
index b4669c72f8..bb39381e6d 100644
--- a/code/modules/modular_computers/computers/item/laptop.dm
+++ b/code/modules/modular_computers/computers/item/laptop.dm
@@ -35,7 +35,7 @@
if(card_slot2.stored_card)
. += "\The [src] has \a [card_slot2] with an id inside, Alt-click to remove the id."
-/obj/item/modular_computer/laptop/Initialize()
+/obj/item/modular_computer/laptop/Initialize(mapload)
. = ..()
if(start_open && !screen_on)
diff --git a/code/modules/modular_computers/computers/item/laptop_presets.dm b/code/modules/modular_computers/computers/item/laptop_presets.dm
index 6bc2919bea..2ed2ec78a5 100644
--- a/code/modules/modular_computers/computers/item/laptop_presets.dm
+++ b/code/modules/modular_computers/computers/item/laptop_presets.dm
@@ -1,4 +1,4 @@
-/obj/item/modular_computer/laptop/preset/Initialize()
+/obj/item/modular_computer/laptop/preset/Initialize(mapload)
. = ..()
install_component(new /obj/item/computer_hardware/processor_unit/small)
install_component(new /obj/item/computer_hardware/battery(src, /obj/item/stock_parts/cell/computer))
diff --git a/code/modules/modular_computers/computers/item/tablet.dm b/code/modules/modular_computers/computers/item/tablet.dm
index 8741c468d2..2c6bef81c2 100644
--- a/code/modules/modular_computers/computers/item/tablet.dm
+++ b/code/modules/modular_computers/computers/item/tablet.dm
@@ -29,7 +29,7 @@
if(inserted_item && (!isturf(loc)))
. += "Ctrl-click to remove [inserted_item]."
-/obj/item/modular_computer/tablet/Initialize()
+/obj/item/modular_computer/tablet/Initialize(mapload)
. = ..()
if(can_have_pen)
if(inserted_item)
@@ -214,6 +214,6 @@
device_theme = "syndicate"
-/obj/item/modular_computer/tablet/integrated/syndicate/Initialize()
+/obj/item/modular_computer/tablet/integrated/syndicate/Initialize(mapload)
. = ..()
borgo.lamp_color = COLOR_RED //Syndicate likes it red
diff --git a/code/modules/modular_computers/computers/item/tablet_presets.dm b/code/modules/modular_computers/computers/item/tablet_presets.dm
index 2c760a4b6c..44a96aa2e7 100644
--- a/code/modules/modular_computers/computers/item/tablet_presets.dm
+++ b/code/modules/modular_computers/computers/item/tablet_presets.dm
@@ -3,7 +3,7 @@
/obj/item/modular_computer/tablet/preset/cheap
desc = "A low-end tablet often seen among low ranked station personnel."
-/obj/item/modular_computer/tablet/preset/cheap/Initialize()
+/obj/item/modular_computer/tablet/preset/cheap/Initialize(mapload)
. = ..()
install_component(new /obj/item/computer_hardware/processor_unit/small)
install_component(new /obj/item/computer_hardware/battery(src, /obj/item/stock_parts/cell/computer/micro))
@@ -11,7 +11,7 @@
install_component(new /obj/item/computer_hardware/network_card)
// Alternative version, an average one, for higher ranked positions mostly
-/obj/item/modular_computer/tablet/preset/advanced/Initialize()
+/obj/item/modular_computer/tablet/preset/advanced/Initialize(mapload)
. = ..()
install_component(new /obj/item/computer_hardware/processor_unit/small)
install_component(new /obj/item/computer_hardware/battery(src, /obj/item/stock_parts/cell/computer))
@@ -20,7 +20,7 @@
install_component(new /obj/item/computer_hardware/card_slot)
install_component(new /obj/item/computer_hardware/printer/mini)
-/obj/item/modular_computer/tablet/preset/science/Initialize()
+/obj/item/modular_computer/tablet/preset/science/Initialize(mapload)
. = ..()
var/obj/item/computer_hardware/hard_drive/small/hard_drive = new
install_component(new /obj/item/computer_hardware/processor_unit/small)
@@ -31,7 +31,7 @@
install_component(new /obj/item/computer_hardware/radio_card)
hard_drive.store_file(new /datum/computer_file/program/signaler)
-/obj/item/modular_computer/tablet/preset/cargo/Initialize()
+/obj/item/modular_computer/tablet/preset/cargo/Initialize(mapload)
. = ..()
var/obj/item/computer_hardware/hard_drive/small/hard_drive = new
install_component(new /obj/item/computer_hardware/processor_unit/small)
@@ -52,16 +52,16 @@
/obj/item/modular_computer/tablet/preset/cargo/quartermaster/get_cargochat_username()
return "quartermaster"
-/obj/item/modular_computer/tablet/preset/advanced/atmos/Initialize() //This will be defunct and will be replaced when NtOS PDAs are done
+/obj/item/modular_computer/tablet/preset/advanced/atmos/Initialize(mapload) //This will be defunct and will be replaced when NtOS PDAs are done
. = ..()
install_component(new /obj/item/computer_hardware/sensorpackage)
-/obj/item/modular_computer/tablet/preset/advanced/engineering/Initialize()
+/obj/item/modular_computer/tablet/preset/advanced/engineering/Initialize(mapload)
. = ..()
var/obj/item/computer_hardware/hard_drive/small/hard_drive = find_hardware_by_name("solid state drive")
hard_drive.store_file(new /datum/computer_file/program/supermatter_monitor)
-/obj/item/modular_computer/tablet/preset/advanced/command/Initialize()
+/obj/item/modular_computer/tablet/preset/advanced/command/Initialize(mapload)
. = ..()
var/obj/item/computer_hardware/hard_drive/small/hard_drive = find_hardware_by_name("solid state drive")
install_component(new /obj/item/computer_hardware/sensorpackage)
@@ -69,13 +69,13 @@
hard_drive.store_file(new /datum/computer_file/program/budgetorders)
// hard_drive.store_file(new /datum/computer_file/program/science)
-/obj/item/modular_computer/tablet/preset/advanced/command/engineering/Initialize()
+/obj/item/modular_computer/tablet/preset/advanced/command/engineering/Initialize(mapload)
. = ..()
var/obj/item/computer_hardware/hard_drive/small/hard_drive = find_hardware_by_name("solid state drive")
hard_drive.store_file(new /datum/computer_file/program/supermatter_monitor)
/// Given by the syndicate as part of the contract uplink bundle - loads in the Contractor Uplink.
-/obj/item/modular_computer/tablet/syndicate_contract_uplink/preset/uplink/Initialize()
+/obj/item/modular_computer/tablet/syndicate_contract_uplink/preset/uplink/Initialize(mapload)
. = ..()
var/obj/item/computer_hardware/hard_drive/small/syndicate/hard_drive = new
var/datum/computer_file/program/contract_uplink/uplink = new
@@ -94,7 +94,7 @@
install_component(new /obj/item/computer_hardware/printer/mini)
/// Given to Nuke Ops members.
-/obj/item/modular_computer/tablet/nukeops/Initialize()
+/obj/item/modular_computer/tablet/nukeops/Initialize(mapload)
. = ..()
install_component(new /obj/item/computer_hardware/processor_unit/small)
install_component(new /obj/item/computer_hardware/battery(src, /obj/item/stock_parts/cell/computer))
@@ -102,7 +102,7 @@
install_component(new /obj/item/computer_hardware/network_card)
//Borg Built-in tablet
-/obj/item/modular_computer/tablet/integrated/Initialize()
+/obj/item/modular_computer/tablet/integrated/Initialize(mapload)
. = ..()
install_component(new /obj/item/computer_hardware/processor_unit/small)
install_component(new /obj/item/computer_hardware/hard_drive/small/integrated)
diff --git a/code/modules/modular_computers/computers/machinery/console_presets.dm b/code/modules/modular_computers/computers/machinery/console_presets.dm
index 9da6b35ff9..0cb2a65375 100644
--- a/code/modules/modular_computers/computers/machinery/console_presets.dm
+++ b/code/modules/modular_computers/computers/machinery/console_presets.dm
@@ -5,7 +5,7 @@
var/_has_battery = FALSE
var/_has_ai = FALSE
-/obj/machinery/modular_computer/console/preset/Initialize()
+/obj/machinery/modular_computer/console/preset/Initialize(mapload)
. = ..()
if(!cpu)
return
diff --git a/code/modules/modular_computers/computers/machinery/modular_computer.dm b/code/modules/modular_computers/computers/machinery/modular_computer.dm
index dd78a985e1..5fb771cb85 100644
--- a/code/modules/modular_computers/computers/machinery/modular_computer.dm
+++ b/code/modules/modular_computers/computers/machinery/modular_computer.dm
@@ -40,7 +40,7 @@
///CPU that handles most logic while this type only handles power and other specific things.
var/obj/item/modular_computer/processor/cpu = null
-/obj/machinery/modular_computer/Initialize()
+/obj/machinery/modular_computer/Initialize(mapload)
. = ..()
cpu = new(src)
cpu.physical = src
diff --git a/code/modules/modular_computers/computers/machinery/modular_console.dm b/code/modules/modular_computers/computers/machinery/modular_console.dm
index aa6108fcbd..3cbdc4a923 100644
--- a/code/modules/modular_computers/computers/machinery/modular_console.dm
+++ b/code/modules/modular_computers/computers/machinery/modular_console.dm
@@ -19,7 +19,7 @@
///Used in New() to set network tag according to our area.
var/console_department = ""
-/obj/machinery/modular_computer/console/buildable/Initialize()
+/obj/machinery/modular_computer/console/buildable/Initialize(mapload)
. = ..()
// User-built consoles start as empty frames.
var/obj/item/computer_hardware/hard_drive/hard_drive = cpu.all_components[MC_HDD]
@@ -29,7 +29,7 @@
qdel(network_card)
qdel(hard_drive)
-/obj/machinery/modular_computer/console/Initialize()
+/obj/machinery/modular_computer/console/Initialize(mapload)
. = ..()
var/obj/item/computer_hardware/battery/battery_module = cpu.all_components[MC_CELL]
if(battery_module)
diff --git a/code/modules/modular_computers/hardware/hard_drive.dm b/code/modules/modular_computers/hardware/hard_drive.dm
index 29614cc7b0..b0bf605f9a 100644
--- a/code/modules/modular_computers/hardware/hard_drive.dm
+++ b/code/modules/modular_computers/hardware/hard_drive.dm
@@ -120,7 +120,7 @@
QDEL_LIST(stored_files)
return ..()
-/obj/item/computer_hardware/hard_drive/Initialize()
+/obj/item/computer_hardware/hard_drive/Initialize(mapload)
. = ..()
install_default_programs()
diff --git a/code/modules/newscaster/newscaster_machine.dm b/code/modules/newscaster/newscaster_machine.dm
index c81a8f5d1a..5bc0929465 100644
--- a/code/modules/newscaster/newscaster_machine.dm
+++ b/code/modules/newscaster/newscaster_machine.dm
@@ -16,7 +16,7 @@ GLOBAL_LIST_EMPTY(allCasters)
verb_say = "beeps"
verb_ask = "beeps"
verb_exclaim = "beeps"
- armor = list("melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 30)
+ armor = list(MELEE = 50, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 30)
max_integrity = 200
integrity_failure = 0.25
var/screen = 0
@@ -614,7 +614,7 @@ GLOBAL_LIST_EMPTY(allCasters)
if(user.a_intent != INTENT_HARM)
to_chat(user, "The newscaster controls are far too complicated for your tiny brain!")
else
- take_damage(5, BRUTE, "melee")
+ take_damage(5, BRUTE, MELEE)
/obj/machinery/newscaster/proc/AttachPhoto(mob/user)
var/obj/item/photo/photo = user.is_holding_item_of_type(/obj/item/photo)
diff --git a/code/modules/ninja/energy_katana.dm b/code/modules/ninja/energy_katana.dm
index f59a06dc69..716c4a0dad 100644
--- a/code/modules/ninja/energy_katana.dm
+++ b/code/modules/ninja/energy_katana.dm
@@ -32,7 +32,7 @@
var/datum/action/innate/dash/ninja/jaunt
var/dash_toggled = TRUE
-/obj/item/energy_katana/Initialize()
+/obj/item/energy_katana/Initialize(mapload)
. = ..()
jaunt = new(src)
spark_system = new /datum/effect_system/spark_spread()
diff --git a/code/modules/ninja/suit/head.dm b/code/modules/ninja/suit/head.dm
index 99dde98f09..36c3eb71d1 100644
--- a/code/modules/ninja/suit/head.dm
+++ b/code/modules/ninja/suit/head.dm
@@ -11,7 +11,7 @@
name = "ninja hood"
icon_state = "s-ninja"
item_state = "s-ninja_mask"
- armor = list("melee" = 40, "bullet" = 30, "laser" = 20,"energy" = 30, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 100, "acid" = 100)
+ armor = list(MELEE = 40, BULLET = 30, LASER = 20,ENERGY = 30, BOMB = 30, BIO = 30, RAD = 30, FIRE = 100, ACID = 100)
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
blockTracking = TRUE//Roughly the only unique thing about this helmet.
flags_inv = HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
diff --git a/code/modules/ninja/suit/ninjaDrainAct.dm b/code/modules/ninja/suit/ninjaDrainAct.dm
index 4f287fc81b..48efa2452f 100644
--- a/code/modules/ninja/suit/ninjaDrainAct.dm
+++ b/code/modules/ninja/suit/ninjaDrainAct.dm
@@ -241,16 +241,18 @@
return drain_total
-//MECH//
-/obj/mecha/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/ninja_suit, mob/living/carbon/human/ninja, obj/item/clothing/gloves/space_ninja/ninja_gloves)
+
+/obj/vehicle/sealed/mecha/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/ninja_suit, mob/living/carbon/human/ninja, obj/item/clothing/gloves/space_ninja/ninja_gloves)
if(!ninja_suit || !ninja || !ninja_gloves)
+
return INVALID_DRAIN
var/maxcapacity = FALSE //Safety check
var/drain = 0 //Drain amount
var/drain_total = 0
- occupant_message("Warning: Unauthorized access through sub-route 4, block H, detected.")
+ for(var/mob/living/MB in occupants)
+ to_chat(MB, "[icon2html(src, occupants)]Warning: Unauthorized access through sub-route 4, block H, detected.")
if(get_charge())
while(ninja_gloves.candrain && cell.charge > 0 && !maxcapacity)
drain = rand(ninja_gloves.mindrain, ninja_gloves.maxdrain)
diff --git a/code/modules/ninja/suit/shoes.dm b/code/modules/ninja/suit/shoes.dm
index 4f46a1bfc6..fdc9c068ac 100644
--- a/code/modules/ninja/suit/shoes.dm
+++ b/code/modules/ninja/suit/shoes.dm
@@ -14,7 +14,7 @@
permeability_coefficient = 0.01
clothing_flags = NOSLIP
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
- armor = list("melee" = 40, "bullet" = 30, "laser" = 20,"energy" = 30, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 100, "acid" = 100)
+ armor = list(MELEE = 40, BULLET = 30, LASER = 20,ENERGY = 30, BOMB = 30, BIO = 30, RAD = 30, FIRE = 100, ACID = 100)
cold_protection = FEET
min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT
heat_protection = FEET
diff --git a/code/modules/ninja/suit/suit.dm b/code/modules/ninja/suit/suit.dm
index d9d362c43c..789ce852aa 100644
--- a/code/modules/ninja/suit/suit.dm
+++ b/code/modules/ninja/suit/suit.dm
@@ -16,7 +16,7 @@
allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/stock_parts/cell)
slowdown = 1
resistance_flags = LAVA_PROOF | ACID_PROOF
- armor = list("melee" = 40, "bullet" = 30, "laser" = 20,"energy" = 30, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 100, "acid" = 100)
+ armor = list(MELEE = 40, BULLET = 30, LASER = 20,ENERGY = 30, BOMB = 30, BIO = 30, RAD = 30, FIRE = 100, ACID = 100)
actions_types = list(/datum/action/item_action/initialize_ninja_suit, /datum/action/item_action/ninjastatus, /datum/action/item_action/ninjaboost, /datum/action/item_action/ninjapulse, /datum/action/item_action/ninjastar, /datum/action/item_action/ninjanet, /datum/action/item_action/ninja_sword_recall, /datum/action/item_action/ninja_stealth)
@@ -66,7 +66,7 @@
"The CLOAK-tech device is [stealth?"active":"inactive"].\n"+\
"[a_boost?"An adrenaline boost is available to use.":"There is no adrenaline boost available. Try refilling the suit with 20 units of radium."]"
-/obj/item/clothing/suit/space/space_ninja/Initialize()
+/obj/item/clothing/suit/space/space_ninja/Initialize(mapload)
. = ..()
//Spark Init
diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm
index c957a927ec..ed83a0f67b 100644
--- a/code/modules/paperwork/clipboard.dm
+++ b/code/modules/paperwork/clipboard.dm
@@ -29,7 +29,7 @@
user.visible_message(span_suicide("[user] begins putting [user.p_their()] head into the clip of \the [src]! It looks like [user.p_theyre()] trying to commit suicide!"))
return BRUTELOSS //The clipboard's clip is very strong. Industrial duty. Can kill a man easily.
-/obj/item/clipboard/Initialize()
+/obj/item/clipboard/Initialize(mapload)
update_appearance()
. = ..()
diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm
index 59bbf47128..f6725eeb1d 100644
--- a/code/modules/paperwork/filingcabinet.dm
+++ b/code/modules/paperwork/filingcabinet.dm
@@ -192,7 +192,7 @@ GLOBAL_LIST_EMPTY(employmentCabinets)
///This var is so that its filled on crew interaction to be as accurate (including latejoins) as possible, true until first interact
var/virgin = TRUE
-/obj/structure/filingcabinet/employment/Initialize()
+/obj/structure/filingcabinet/employment/Initialize(mapload)
. = ..()
GLOB.employmentCabinets += src
diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm
index 2c534d0178..d69da4d797 100644
--- a/code/modules/paperwork/folders.dm
+++ b/code/modules/paperwork/folders.dm
@@ -100,7 +100,7 @@
name = "folder- 'TOP SECRET'"
desc = "A folder stamped \"Top Secret - Property of Nanotrasen Corporation. Unauthorized distribution is punishable by death.\""
-/obj/item/folder/documents/Initialize()
+/obj/item/folder/documents/Initialize(mapload)
. = ..()
new /obj/item/documents/nanotrasen(src)
update_icon()
@@ -113,7 +113,7 @@
/obj/item/folder/syndicate/red
icon_state = "folder_sred"
-/obj/item/folder/syndicate/red/Initialize()
+/obj/item/folder/syndicate/red/Initialize(mapload)
. = ..()
new /obj/item/documents/syndicate/red(src)
update_icon()
@@ -121,12 +121,12 @@
/obj/item/folder/syndicate/blue
icon_state = "folder_sblue"
-/obj/item/folder/syndicate/blue/Initialize()
+/obj/item/folder/syndicate/blue/Initialize(mapload)
. = ..()
new /obj/item/documents/syndicate/blue(src)
update_icon()
-/obj/item/folder/syndicate/mining/Initialize()
+/obj/item/folder/syndicate/mining/Initialize(mapload)
. = ..()
new /obj/item/documents/syndicate/mining(src)
update_icon()
diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm
index 366d1a3f68..9b10ea230d 100644
--- a/code/modules/paperwork/paper.dm
+++ b/code/modules/paperwork/paper.dm
@@ -101,7 +101,7 @@
contact_poison = null
. = ..()
-/obj/item/paper/Initialize()
+/obj/item/paper/Initialize(mapload)
. = ..()
pixel_x = initial(pixel_x) + rand(-9, 9)
pixel_y = initial(pixel_y) + rand(-8, 8)
@@ -371,14 +371,14 @@
*/
/obj/item/paper/construction
-/obj/item/paper/construction/Initialize()
+/obj/item/paper/construction/Initialize(mapload)
. = ..()
color = pick("FF0000", "#33cc33", "#ffb366", "#551A8B", "#ff80d5", "#4d94ff")
/**
* Natural paper
*/
-/obj/item/paper/natural/Initialize()
+/obj/item/paper/natural/Initialize(mapload)
. = ..()
color = "#FFF5ED"
diff --git a/code/modules/paperwork/paper_cutter.dm b/code/modules/paperwork/paper_cutter.dm
index 0dbc80521b..bd59ed7a10 100644
--- a/code/modules/paperwork/paper_cutter.dm
+++ b/code/modules/paperwork/paper_cutter.dm
@@ -12,7 +12,7 @@
pass_flags = PASSTABLE
-/obj/item/papercutter/Initialize()
+/obj/item/papercutter/Initialize(mapload)
. = ..()
storedcutter = new /obj/item/hatchet/cutterblade(src)
update_icon()
@@ -120,7 +120,7 @@
return ..()
-/obj/item/paperslip/Initialize()
+/obj/item/paperslip/Initialize(mapload)
. = ..()
pixel_x = initial(pixel_x) + rand(-5, 5)
pixel_y = initial(pixel_y) + rand(-5, 5)
diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm
index 20c9c6211a..0ad49e192d 100644
--- a/code/modules/paperwork/pen.dm
+++ b/code/modules/paperwork/pen.dm
@@ -113,7 +113,7 @@
)
embedding = list("embed_chance" = 75)
-/obj/item/pen/fountain/captain/Initialize()
+/obj/item/pen/fountain/captain/Initialize(mapload)
. = ..()
AddComponent(/datum/component/butchering, 200, 115) //the pen is mightier than the sword
@@ -212,7 +212,7 @@
reagents.trans_to(M, reagents.total_volume, log = "sleepypen inject")
-/obj/item/pen/sleepy/Initialize()
+/obj/item/pen/sleepy/Initialize(mapload)
. = ..()
create_reagents(45, OPENCONTAINER)
reagents.add_reagent(/datum/reagent/toxin/chloralhydrate, 20)
diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm
index 06adda95dd..8079950aff 100644
--- a/code/modules/paperwork/photocopier.dm
+++ b/code/modules/paperwork/photocopier.dm
@@ -44,7 +44,7 @@
/// Indicates whether the printer is currently busy copying or not.
var/busy = FALSE
-/obj/machinery/photocopier/Initialize()
+/obj/machinery/photocopier/Initialize(mapload)
. = ..()
// AddComponent(/datum/component/payment, 5, SSeconomy.get_dep_account(ACCOUNT_CIV), PAYMENT_CLINICAL)
toner_cartridge = new(src)
diff --git a/code/modules/paperwork/ticketmachine.dm b/code/modules/paperwork/ticketmachine.dm
index e874f2836d..ff1a1fd563 100644
--- a/code/modules/paperwork/ticketmachine.dm
+++ b/code/modules/paperwork/ticketmachine.dm
@@ -44,7 +44,7 @@
tickets.Cut()
update_icon()
-/obj/machinery/ticket_machine/Initialize()
+/obj/machinery/ticket_machine/Initialize(mapload)
. = ..()
update_icon()
@@ -69,7 +69,7 @@
req_access = list()
id = "ticket_machine_default"
-/obj/machinery/button/ticket_machine/Initialize()
+/obj/machinery/button/ticket_machine/Initialize(mapload)
. = ..()
if(device)
var/obj/item/assembly/control/ticket_machine/ours = device
@@ -92,7 +92,7 @@
desc = "A remote controller for the HoP's ticket machine."
var/obj/machinery/ticket_machine/linked //To whom are we linked?
-/obj/item/assembly/control/ticket_machine/Initialize()
+/obj/item/assembly/control/ticket_machine/Initialize(mapload)
..()
return INITIALIZE_HINT_LATELOAD
diff --git a/code/modules/photography/photos/album.dm b/code/modules/photography/photos/album.dm
index 8361accba2..6f35e7a99d 100644
--- a/code/modules/photography/photos/album.dm
+++ b/code/modules/photography/photos/album.dm
@@ -11,7 +11,7 @@
resistance_flags = FLAMMABLE
var/persistence_id
-/obj/item/storage/photo_album/Initialize()
+/obj/item/storage/photo_album/Initialize(mapload)
. = ..()
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
STR.can_hold = typecacheof(list(/obj/item/photo))
diff --git a/code/modules/plumbing/plumbers/grinder_chemical.dm b/code/modules/plumbing/plumbers/grinder_chemical.dm
index f39c79f906..1d216046e4 100644
--- a/code/modules/plumbing/plumbers/grinder_chemical.dm
+++ b/code/modules/plumbing/plumbers/grinder_chemical.dm
@@ -31,7 +31,7 @@
eat_dir = WEST
return TRUE
-/obj/machinery/plumbing/grinder_chemical/CanPass(atom/movable/AM)
+/obj/machinery/plumbing/grinder_chemical/CanAllowThrough(atom/movable/AM)
. = ..()
if(!anchored)
return
diff --git a/code/modules/plumbing/plumbers/medipenrefill.dm b/code/modules/plumbing/plumbers/medipenrefill.dm
index fb7553a4d5..140114673a 100644
--- a/code/modules/plumbing/plumbers/medipenrefill.dm
+++ b/code/modules/plumbing/plumbers/medipenrefill.dm
@@ -15,7 +15,7 @@
/// var to prevent glitches in the animation
var/busy = FALSE
-/obj/machinery/medipen_refiller/Initialize()
+/obj/machinery/medipen_refiller/Initialize(mapload)
. = ..()
create_reagents(100, TRANSPARENT)
for(var/obj/item/stock_parts/matter_bin/B in component_parts)
diff --git a/code/modules/pool/pool_controller.dm b/code/modules/pool/pool_controller.dm
index ff52fb9fef..f2a3b23e57 100644
--- a/code/modules/pool/pool_controller.dm
+++ b/code/modules/pool/pool_controller.dm
@@ -64,7 +64,7 @@
. = ..()
. += "Alt click to drain reagents."
-/obj/machinery/pool/controller/Initialize()
+/obj/machinery/pool/controller/Initialize(mapload)
. = ..()
START_PROCESSING(SSfastprocess, src)
create_reagents(1000)
diff --git a/code/modules/pool/pool_drain.dm b/code/modules/pool/pool_drain.dm
index 527c25b9f0..09afe09cd1 100644
--- a/code/modules/pool/pool_drain.dm
+++ b/code/modules/pool/pool_drain.dm
@@ -24,7 +24,7 @@
var/cooldown
-/obj/machinery/pool/drain/Initialize()
+/obj/machinery/pool/drain/Initialize(mapload)
START_PROCESSING(SSfastprocess, src)
whirling_mobs = list()
return ..()
diff --git a/code/modules/pool/pool_main.dm b/code/modules/pool/pool_main.dm
index 088c991ca0..691c22a9c5 100644
--- a/code/modules/pool/pool_main.dm
+++ b/code/modules/pool/pool_main.dm
@@ -130,7 +130,7 @@
H.visible_message("[H] falls in and takes a drink!",
"You fall in and swallow some water!")
playsound(src, 'sound/effects/splash.ogg', 60, TRUE, 1)
- else if(!H.head || !(H.head.armor.getRating("melee") > 20))
+ else if(!H.head || !(H.head.armor.getRating(MELEE) > 20))
if(prob(75))
H.visible_message("[H] falls in the drained pool!",
"You fall in the drained pool!")
diff --git a/code/modules/power/antimatter/control.dm b/code/modules/power/antimatter/control.dm
index f8f31f6990..5b9bf71a9b 100644
--- a/code/modules/power/antimatter/control.dm
+++ b/code/modules/power/antimatter/control.dm
@@ -30,7 +30,7 @@
var/stored_power = 0//Power to deploy per tick
-/obj/machinery/power/am_control_unit/Initialize()
+/obj/machinery/power/am_control_unit/Initialize(mapload)
. = ..()
linked_shielding = list()
linked_cores = list()
@@ -121,7 +121,7 @@
/obj/machinery/power/am_control_unit/bullet_act(obj/item/projectile/Proj)
. = ..()
- if(Proj.flag != "bullet")
+ if(Proj.flag != BULLET)
stability -= Proj.force
check_stability()
diff --git a/code/modules/power/antimatter/shielding.dm b/code/modules/power/antimatter/shielding.dm
index 52478e532e..e9ee1e70d0 100644
--- a/code/modules/power/antimatter/shielding.dm
+++ b/code/modules/power/antimatter/shielding.dm
@@ -28,7 +28,7 @@
var/dirs = 0
-/obj/machinery/am_shielding/Initialize()
+/obj/machinery/am_shielding/Initialize(mapload)
. = ..()
addtimer(CALLBACK(src, .proc/controllerscan), 10)
@@ -102,7 +102,7 @@
/obj/machinery/am_shielding/bullet_act(obj/item/projectile/Proj)
. = ..()
- if(Proj.flag != "bullet")
+ if(Proj.flag != BULLET)
stability -= Proj.force/2
check_stability()
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index 2e38fdd840..84a0ef96c1 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -119,7 +119,7 @@
integrity_failure = 0.17
damage_deflection = 10
resistance_flags = FIRE_PROOF
- armor = list("melee" = 40, "bullet" = 40, "laser" = 40, "energy" = 100, "bomb" = 30, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 50)
+ armor = list(MELEE = 40, BULLET = 40, LASER = 40, ENERGY = 100, BOMB = 30, BIO = 100, RAD = 100, FIRE = 90, ACID = 50)
req_access = list(ACCESS_ENGINE_EQUIP)
interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON
@@ -852,7 +852,7 @@
set_nightshift(!nightshift_lights)
/obj/machinery/power/apc/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir)
- if(damage_flag == "melee" && damage_amount < 10 && (!(stat & BROKEN) || malfai))
+ if(damage_flag == MELEE && damage_amount < 10 && (!(stat & BROKEN) || malfai))
return 0
. = ..()
diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm
index 10a4f5844a..6d1da2bc20 100644
--- a/code/modules/power/cell.dm
+++ b/code/modules/power/cell.dm
@@ -370,7 +370,7 @@
custom_materials = list(/datum/material/glass = 20)
w_class = WEIGHT_CLASS_TINY
-/obj/item/stock_parts/cell/emergency_light/Initialize()
+/obj/item/stock_parts/cell/emergency_light/Initialize(mapload)
. = ..()
var/area/A = get_area(src)
if(!A.lightswitch || !A.light_power)
diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm
index 3d07b60c41..08a804550e 100644
--- a/code/modules/power/gravitygenerator.dm
+++ b/code/modules/power/gravitygenerator.dm
@@ -98,7 +98,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne
// Generator which spawns with the station.
//
-/obj/machinery/gravity_generator/main/station/Initialize()
+/obj/machinery/gravity_generator/main/station/Initialize(mapload)
. = ..()
setup_parts()
middle.add_overlay("activated")
diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm
index 00487ee607..fd5516a48a 100644
--- a/code/modules/power/lighting.dm
+++ b/code/modules/power/lighting.dm
@@ -43,7 +43,7 @@
anchored = TRUE
layer = WALL_OBJ_LAYER
max_integrity = 200
- armor = list("melee" = 50, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 50)
+ armor = list(MELEE = 50, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 50)
var/stage = 1
var/fixture_type = "tube"
@@ -250,7 +250,7 @@
icon_state = "tube-empty"
start_with_cell = FALSE
-/obj/machinery/light/built/Initialize()
+/obj/machinery/light/built/Initialize(mapload)
. = ..()
status = LIGHT_EMPTY
update(0)
@@ -259,7 +259,7 @@
icon_state = "bulb-empty"
start_with_cell = FALSE
-/obj/machinery/light/small/built/Initialize()
+/obj/machinery/light/small/built/Initialize(mapload)
. = ..()
status = LIGHT_EMPTY
update(0)
@@ -267,7 +267,7 @@
// create a new lighting fixture
-/obj/machinery/light/Initialize()
+/obj/machinery/light/Initialize(mapload)
. = ..()
if(start_with_cell && !no_emergency)
cell = new/obj/item/stock_parts/cell/emergency_light(src)
@@ -797,7 +797,7 @@
desc = "A broken [name]."
-/obj/item/light/Initialize()
+/obj/item/light/Initialize(mapload)
. = ..()
update()
diff --git a/code/modules/power/monitor.dm b/code/modules/power/monitor.dm
index 393d403c4d..e5099dd009 100644
--- a/code/modules/power/monitor.dm
+++ b/code/modules/power/monitor.dm
@@ -31,7 +31,7 @@
. = ..()
. += "It's operating system seems quite outdated... It doesn't seem like it'd be compatible with the latest remote NTOS monitoring systems."
-/obj/machinery/computer/monitor/Initialize()
+/obj/machinery/computer/monitor/Initialize(mapload)
. = ..()
search()
history["supply"] = list()
diff --git a/code/modules/power/multiz.dm b/code/modules/power/multiz.dm
index d5f2846293..9a012991f7 100644
--- a/code/modules/power/multiz.dm
+++ b/code/modules/power/multiz.dm
@@ -41,7 +41,7 @@
addtimer(CALLBACK(src, .proc/refresh), 20) //Wait a bit so we can find the one below, then get powering
return TRUE
-/obj/machinery/power/deck_relay/Initialize()
+/obj/machinery/power/deck_relay/Initialize(mapload)
. = ..()
addtimer(CALLBACK(src, .proc/find_relays), 30)
addtimer(CALLBACK(src, .proc/refresh), 50) //Wait a bit so we can find the one below, then get powering
diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm
index a57711a539..48c67f164e 100644
--- a/code/modules/power/port_gen.dm
+++ b/code/modules/power/port_gen.dm
@@ -17,7 +17,7 @@
interaction_flags_atom = INTERACT_ATOM_ATTACK_HAND | INTERACT_ATOM_UI_INTERACT | INTERACT_ATOM_REQUIRES_ANCHORED
-/obj/machinery/power/port_gen/Initialize()
+/obj/machinery/power/port_gen/Initialize(mapload)
. = ..()
soundloop = new(src, active)
@@ -85,12 +85,12 @@
var/time_per_sheet = 260
var/current_heat = 0
-/obj/machinery/power/port_gen/pacman/Initialize()
+/obj/machinery/power/port_gen/pacman/Initialize(mapload)
. = ..()
if(anchored)
connect_to_network()
-/obj/machinery/power/port_gen/pacman/Initialize()
+/obj/machinery/power/port_gen/pacman/Initialize(mapload)
. = ..()
var/obj/S = sheet_path
diff --git a/code/modules/power/rtg.dm b/code/modules/power/rtg.dm
index 10219c29c1..618dbb2120 100644
--- a/code/modules/power/rtg.dm
+++ b/code/modules/power/rtg.dm
@@ -19,7 +19,7 @@
var/irradiate = TRUE // RTGs irradiate surroundings, but only when panel is open.
-/obj/machinery/power/rtg/Initialize()
+/obj/machinery/power/rtg/Initialize(mapload)
. = ..()
connect_to_network()
@@ -56,7 +56,7 @@
/obj/machinery/power/rtg/advanced/fullupgrade //fully ugpraded stock parts
desc = "An advanced RTG capable of moderating isotope decay, increasing power output but reducing lifetime. It uses plasma-fueled radiation collectors to increase output even further. This model is fully upgraded with the latest tech available in this quadrant."
-/obj/machinery/power/rtg/advanced/fullupgrade/Initialize()
+/obj/machinery/power/rtg/advanced/fullupgrade/Initialize(mapload)
. = ..()
//This looks terrifying. And apparently instancing vars and modifying the amount variable causes runtime errors. Guess we're sticking to copy pasta, thanks, byond.
component_parts = list()
diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm
index a6b144ebe6..16e49cd451 100644
--- a/code/modules/power/singularity/collector.dm
+++ b/code/modules/power/singularity/collector.dm
@@ -33,7 +33,7 @@
/obj/machinery/power/rad_collector/anchored
anchored = TRUE
-/obj/machinery/power/rad_collector/Initialize()
+/obj/machinery/power/rad_collector/Initialize(mapload)
. = ..()
Radio = new /obj/item/radio(src)
Radio.listening = 0
diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm
index ff6cf99411..7c6b1cc922 100644
--- a/code/modules/power/singularity/containment_field.dm
+++ b/code/modules/power/singularity/containment_field.dm
@@ -100,10 +100,10 @@
return
-/obj/machinery/field/CanPass(atom/movable/mover, turf/target)
+/obj/machinery/field/CanAllowThrough(atom/movable/mover, turf/target)
+ . = ..()
if(hasShocked || isliving(mover) || ismachinery(mover) || isstructure(mover) || ismecha(mover))
return FALSE
- return ..()
/obj/machinery/field/proc/shock(mob/living/user)
var/shock_damage = min(rand(30,40),rand(30,40))
diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm
index 6961ec54bb..8f9a7805c6 100644
--- a/code/modules/power/singularity/emitter.dm
+++ b/code/modules/power/singularity/emitter.dm
@@ -57,7 +57,7 @@
state = EMITTER_WELDED
use_power = FALSE
-/obj/machinery/power/emitter/Initialize()
+/obj/machinery/power/emitter/Initialize(mapload)
. = ..()
RefreshParts()
wires = new /datum/wires/emitter(src)
@@ -454,7 +454,7 @@
resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF
var/delay = 0
-/obj/item/turret_control/Initialize()
+/obj/item/turret_control/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, ABSTRACT_ITEM_TRAIT)
diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm
index af2237a426..9d887a8e1f 100644
--- a/code/modules/power/singularity/field_generator.dm
+++ b/code/modules/power/singularity/field_generator.dm
@@ -33,7 +33,7 @@ field_generator power level display
use_power = NO_POWER_USE
max_integrity = 500
//100% immune to lasers and energy projectiles since it absorbs their energy.
- armor = list("melee" = 25, "bullet" = 10, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 70)
+ armor = list(MELEE = 25, BULLET = 10, LASER = 100, ENERGY = 100, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 70)
var/const/num_power_levels = 6 // Total number of power level icon has
var/power_level = 0
var/active = FG_OFFLINE
@@ -54,7 +54,7 @@ field_generator power level display
. += "+p[power_level]"
-/obj/machinery/field/generator/Initialize()
+/obj/machinery/field/generator/Initialize(mapload)
. = ..()
fields = list()
connected_gens = list()
@@ -158,7 +158,7 @@ field_generator power level display
..()
/obj/machinery/field/generator/bullet_act(obj/item/projectile/Proj)
- if(Proj.flag != "bullet")
+ if(Proj.flag != BULLET)
power = min(power + Proj.damage, field_generator_max_power)
check_power_level()
..()
diff --git a/code/modules/power/singularity/narsie.dm b/code/modules/power/singularity/narsie.dm
index 5f6e110a9c..0f58805976 100644
--- a/code/modules/power/singularity/narsie.dm
+++ b/code/modules/power/singularity/narsie.dm
@@ -27,7 +27,7 @@
grav_pull = 10
consume_range = 12 //How many tiles out do we eat
-/obj/singularity/narsie/large/Initialize()
+/obj/singularity/narsie/large/Initialize(mapload)
. = ..()
send_to_playing_players("NAR'SIE HAS RISEN")
sound_to_playing_players('sound/creatures/narsie_rises.ogg')
@@ -44,7 +44,7 @@
var/souls = 0
var/resolved = FALSE
-/obj/singularity/narsie/large/cult/Initialize()
+/obj/singularity/narsie/large/cult/Initialize(mapload)
. = ..()
GLOB.cult_narsie = src
var/list/all_cults = list()
diff --git a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm
index 60c97eda76..6938352d16 100644
--- a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm
+++ b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm
@@ -27,7 +27,7 @@
anchored = FALSE
density = TRUE
max_integrity = 500
- armor = list("melee" = 30, "bullet" = 20, "laser" = 20, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 80)
+ armor = list(MELEE = 30, BULLET = 20, LASER = 20, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 90, ACID = 80)
var/obj/machinery/particle_accelerator/control_box/master = null
var/construction_state = PA_CONSTRUCTION_UNSECURED
diff --git a/code/modules/power/singularity/particle_accelerator/particle_control.dm b/code/modules/power/singularity/particle_accelerator/particle_control.dm
index 96c8d9a263..3a592a4f98 100644
--- a/code/modules/power/singularity/particle_accelerator/particle_control.dm
+++ b/code/modules/power/singularity/particle_accelerator/particle_control.dm
@@ -19,7 +19,7 @@
var/strength = 0
var/powered = FALSE
-/obj/machinery/particle_accelerator/control_box/Initialize()
+/obj/machinery/particle_accelerator/control_box/Initialize(mapload)
. = ..()
wires = new /datum/wires/particle_accelerator/control_box(src)
connected_parts = list()
diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm
index 32e6186133..fff91df1b9 100644
--- a/code/modules/power/smes.dm
+++ b/code/modules/power/smes.dm
@@ -44,7 +44,7 @@
if(!terminal)
. += "This SMES has no power terminal!"
-/obj/machinery/power/smes/Initialize()
+/obj/machinery/power/smes/Initialize(mapload)
. = ..()
dir_loop:
for(var/d in GLOB.cardinals)
diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm
index 907c4e7d65..fad48b4854 100644
--- a/code/modules/power/solar.dm
+++ b/code/modules/power/solar.dm
@@ -297,7 +297,7 @@
var/obj/machinery/power/tracker/connected_tracker = null
var/list/connected_panels = list()
-/obj/machinery/power/solar_control/Initialize()
+/obj/machinery/power/solar_control/Initialize(mapload)
. = ..()
azimuth_rate = SSsun.base_rotation
RegisterSignal(SSsun, COMSIG_SUN_MOVED, .proc/timed_track)
diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm
index 22ce4e7ce5..f7f5b335c5 100644
--- a/code/modules/power/supermatter/supermatter.dm
+++ b/code/modules/power/supermatter/supermatter.dm
@@ -192,7 +192,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
///Disables the sm's proccessing totally.
var/processes = TRUE
-/obj/machinery/power/supermatter_crystal/Initialize()
+/obj/machinery/power/supermatter_crystal/Initialize(mapload)
. = ..()
uid = gl_uid++
SSair.atmos_air_machinery += src
@@ -728,7 +728,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
return FALSE
if(!istype(Proj.firer, /obj/machinery/power/emitter) && power_changes)
investigate_log("has been hit by [Proj] fired by [key_name(Proj.firer)]", INVESTIGATE_SUPERMATTER)
- if(Proj.flag != "bullet")
+ if(Proj.flag != BULLET)
if(power_changes) //This needs to be here I swear
power += Proj.damage * bullet_energy
if(!has_been_powered)
diff --git a/code/modules/power/terminal.dm b/code/modules/power/terminal.dm
index 3fa815bf99..fc6ff29856 100644
--- a/code/modules/power/terminal.dm
+++ b/code/modules/power/terminal.dm
@@ -12,7 +12,7 @@
var/obj/machinery/power/master = null
-/obj/machinery/power/terminal/Initialize()
+/obj/machinery/power/terminal/Initialize(mapload)
. = ..()
var/turf/T = get_turf(src)
if(level == 1)
diff --git a/code/modules/power/tesla/coil.dm b/code/modules/power/tesla/coil.dm
index 13f2aab811..c32bbc0c86 100644
--- a/code/modules/power/tesla/coil.dm
+++ b/code/modules/power/tesla/coil.dm
@@ -23,7 +23,7 @@
/obj/machinery/power/tesla_coil/power
circuit = /obj/item/circuitboard/machine/tesla_coil/power
-/obj/machinery/power/tesla_coil/Initialize()
+/obj/machinery/power/tesla_coil/Initialize(mapload)
. = ..()
wires = new /datum/wires/tesla_coil(src)
linked_techweb = SSresearch.science_tech
@@ -162,7 +162,7 @@
buckle_lying = FALSE
buckle_requires_restraints = TRUE
-/obj/machinery/power/grounding_rod/Initialize()
+/obj/machinery/power/grounding_rod/Initialize(mapload)
GLOB.grounding_rods |= src
return ..()
diff --git a/code/modules/power/turbine.dm b/code/modules/power/turbine.dm
index dda7f27eee..c01e3f3dcc 100644
--- a/code/modules/power/turbine.dm
+++ b/code/modules/power/turbine.dm
@@ -70,7 +70,7 @@
// the inlet stage of the gas turbine electricity generator
-/obj/machinery/power/compressor/Initialize()
+/obj/machinery/power/compressor/Initialize(mapload)
. = ..()
// The inlet of the compressor is the direction it faces
gas_contained = new
@@ -162,7 +162,7 @@
#define TURBGENQ 100000
#define TURBGENG 0.5
-/obj/machinery/power/turbine/Initialize()
+/obj/machinery/power/turbine/Initialize(mapload)
. = ..()
// The outlet is pointed at the direction of the turbine component
outturf = get_step(src, dir)
@@ -288,7 +288,7 @@
var/obj/machinery/power/compressor/compressor
var/id = 0
-/obj/machinery/computer/turbine_computer/Initialize()
+/obj/machinery/computer/turbine_computer/Initialize(mapload)
. = ..()
return INITIALIZE_HINT_LATELOAD
diff --git a/code/modules/projectiles/ammunition/_ammunition.dm b/code/modules/projectiles/ammunition/_ammunition.dm
index 6a73d9a366..4794aa6c10 100644
--- a/code/modules/projectiles/ammunition/_ammunition.dm
+++ b/code/modules/projectiles/ammunition/_ammunition.dm
@@ -26,7 +26,7 @@
name = "spent bullet casing"
BB = null
-/obj/item/ammo_casing/Initialize()
+/obj/item/ammo_casing/Initialize(mapload)
. = ..()
if(projectile_type)
BB = new projectile_type(src)
diff --git a/code/modules/projectiles/ammunition/ballistic/shotgun.dm b/code/modules/projectiles/ammunition/ballistic/shotgun.dm
index 04e8e62029..441d112e32 100644
--- a/code/modules/projectiles/ammunition/ballistic/shotgun.dm
+++ b/code/modules/projectiles/ammunition/ballistic/shotgun.dm
@@ -124,7 +124,7 @@
projectile_type = /obj/item/projectile/bullet/dart
var/reagent_amount = 30
-/obj/item/ammo_casing/shotgun/dart/Initialize()
+/obj/item/ammo_casing/shotgun/dart/Initialize(mapload)
. = ..()
create_reagents(reagent_amount, OPENCONTAINER)
@@ -137,7 +137,7 @@
icon_state = "cnrshell"
reagent_amount = 10
-/obj/item/ammo_casing/shotgun/dart/noreact/Initialize()
+/obj/item/ammo_casing/shotgun/dart/noreact/Initialize(mapload)
. = ..()
reagents.reagents_holder_flags |= NO_REACT
@@ -146,7 +146,7 @@
projectile_type = /obj/item/projectile/bullet/dart/piercing
reagent_amount = 50
-/obj/item/ammo_casing/shotgun/dart/bioterror/Initialize()
+/obj/item/ammo_casing/shotgun/dart/bioterror/Initialize(mapload)
. = ..()
reagents.add_reagent(/datum/reagent/toxin/amanitin, 12) //for a nasty surprise after you get shot and somehow escape and don't think to quickly purge, and even shock those who are loaded up on purging agents
reagents.add_reagent(/datum/reagent/toxin/chloralhydrate, 6)
diff --git a/code/modules/projectiles/ammunition/caseless/misc.dm b/code/modules/projectiles/ammunition/caseless/misc.dm
index 8b783ff6aa..12be41a551 100644
--- a/code/modules/projectiles/ammunition/caseless/misc.dm
+++ b/code/modules/projectiles/ammunition/caseless/misc.dm
@@ -10,7 +10,7 @@
/obj/item/ammo_casing/caseless/laser
name = "laser casing"
desc = "You shouldn't be seeing this."
- caliber = "laser"
+ caliber = LASER
icon_state = "s-casing-live"
projectile_type = /obj/item/projectile/beam
fire_sound = 'sound/weapons/laser.ogg'
diff --git a/code/modules/projectiles/ammunition/energy/_energy.dm b/code/modules/projectiles/ammunition/energy/_energy.dm
index 10de173ecc..02fb510a2e 100644
--- a/code/modules/projectiles/ammunition/energy/_energy.dm
+++ b/code/modules/projectiles/ammunition/energy/_energy.dm
@@ -1,7 +1,7 @@
/obj/item/ammo_casing/energy
name = "energy weapon lens"
desc = "The part of the gun that makes the laser go pew."
- caliber = "energy"
+ caliber = ENERGY
projectile_type = /obj/item/projectile/energy
var/e_cost = 100 //The amount of energy a cell needs to expend to create this shot.
var/select_name = "energy"
diff --git a/code/modules/projectiles/boxes_magazines/_box_magazine.dm b/code/modules/projectiles/boxes_magazines/_box_magazine.dm
index 9ea030da99..e44fcb38c8 100644
--- a/code/modules/projectiles/boxes_magazines/_box_magazine.dm
+++ b/code/modules/projectiles/boxes_magazines/_box_magazine.dm
@@ -23,7 +23,7 @@
var/list/bullet_cost
var/list/base_cost// override this one as well if you override bullet_cost
-/obj/item/ammo_box/Initialize()
+/obj/item/ammo_box/Initialize(mapload)
. = ..()
if (!bullet_cost)
for (var/material in custom_materials)
diff --git a/code/modules/projectiles/boxes_magazines/external/rechargable.dm b/code/modules/projectiles/boxes_magazines/external/rechargable.dm
index 76d8f217ab..eaafeba349 100644
--- a/code/modules/projectiles/boxes_magazines/external/rechargable.dm
+++ b/code/modules/projectiles/boxes_magazines/external/rechargable.dm
@@ -3,7 +3,7 @@
desc = "A rechargeable, detachable battery that serves as a magazine for laser rifles."
icon_state = "oldrifle-20"
ammo_type = /obj/item/ammo_casing/caseless/laser
- caliber = "laser"
+ caliber = LASER
max_ammo = 20
/obj/item/ammo_box/magazine/recharge/update_icon()
@@ -67,7 +67,7 @@
var/e_cost = 100
projectile_type = /obj/item/projectile/beam
-/obj/item/ammo_casing/mws_batt/Initialize()
+/obj/item/ammo_casing/mws_batt/Initialize(mapload)
. = ..()
pixel_x = rand(-10, 10)
pixel_y = rand(-10, 10)
diff --git a/code/modules/projectiles/boxes_magazines/internal/revolver.dm b/code/modules/projectiles/boxes_magazines/internal/revolver.dm
index a9cad1adc8..3e91b2670e 100644
--- a/code/modules/projectiles/boxes_magazines/internal/revolver.dm
+++ b/code/modules/projectiles/boxes_magazines/internal/revolver.dm
@@ -17,6 +17,6 @@
max_ammo = 6
multiload = 0
-/obj/item/ammo_box/magazine/internal/rus357/Initialize()
+/obj/item/ammo_box/magazine/internal/rus357/Initialize(mapload)
stored_ammo += new ammo_type(src)
. = ..()
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index a1c7c312ab..3210ad2d15 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -94,7 +94,7 @@
var/automatic = 0 //can gun use it, 0 is no, anything above 0 is the delay between clicks in ds
-/obj/item/gun/Initialize()
+/obj/item/gun/Initialize(mapload)
. = ..()
if(no_pin_required)
pin = null
diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm
index 1416dfa812..836ed3b804 100644
--- a/code/modules/projectiles/guns/ballistic.dm
+++ b/code/modules/projectiles/guns/ballistic.dm
@@ -10,7 +10,7 @@
var/magazine_wording = "magazine"
var/sawn_item_state = "gun"
-/obj/item/gun/ballistic/Initialize()
+/obj/item/gun/ballistic/Initialize(mapload)
. = ..()
if(!spawnwithmagazine)
update_icon()
diff --git a/code/modules/projectiles/guns/ballistic/automatic.dm b/code/modules/projectiles/guns/ballistic/automatic.dm
index 9388ca214a..aa3ac20cb8 100644
--- a/code/modules/projectiles/guns/ballistic/automatic.dm
+++ b/code/modules/projectiles/guns/ballistic/automatic.dm
@@ -110,7 +110,7 @@
/obj/item/gun/ballistic/automatic/c20r/unrestricted
pin = /obj/item/firing_pin
-/obj/item/gun/ballistic/automatic/c20r/Initialize()
+/obj/item/gun/ballistic/automatic/c20r/Initialize(mapload)
. = ..()
update_icon()
@@ -172,7 +172,7 @@
burst_shot_delay = 2
pin = /obj/item/firing_pin/implant/pindicate
-/obj/item/gun/ballistic/automatic/m90/Initialize()
+/obj/item/gun/ballistic/automatic/m90/Initialize(mapload)
. = ..()
underbarrel = new /obj/item/gun/ballistic/revolver/grenadelauncher(src)
update_icon()
@@ -180,7 +180,7 @@
/obj/item/gun/ballistic/automatic/m90/unrestricted
pin = /obj/item/firing_pin
-/obj/item/gun/ballistic/automatic/m90/unrestricted/Initialize()
+/obj/item/gun/ballistic/automatic/m90/unrestricted/Initialize(mapload)
. = ..()
underbarrel = new /obj/item/gun/ballistic/revolver/grenadelauncher/unrestricted(src)
update_icon()
@@ -274,7 +274,7 @@
/obj/item/gun/ballistic/automatic/shotgun/bulldog/unrestricted
pin = /obj/item/firing_pin
-/obj/item/gun/ballistic/automatic/shotgun/bulldog/Initialize()
+/obj/item/gun/ballistic/automatic/shotgun/bulldog/Initialize(mapload)
. = ..()
update_icon()
diff --git a/code/modules/projectiles/guns/ballistic/magweapon.dm b/code/modules/projectiles/guns/ballistic/magweapon.dm
index c01a2fb74a..f3a11eb179 100644
--- a/code/modules/projectiles/guns/ballistic/magweapon.dm
+++ b/code/modules/projectiles/guns/ballistic/magweapon.dm
@@ -21,7 +21,7 @@
var/obj/item/stock_parts/cell/cell
var/cell_type = /obj/item/stock_parts/cell/magnetic
-/obj/item/gun/ballistic/automatic/magrifle/Initialize()
+/obj/item/gun/ballistic/automatic/magrifle/Initialize(mapload)
. = ..()
if(cell_type)
cell = new cell_type(src)
diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm
index 0d60203cb5..afb30631e0 100644
--- a/code/modules/projectiles/guns/ballistic/revolver.dm
+++ b/code/modules/projectiles/guns/ballistic/revolver.dm
@@ -6,7 +6,7 @@
fire_sound = "sound/weapons/revolvershot.ogg"
casing_ejector = FALSE
-/obj/item/gun/ballistic/revolver/Initialize()
+/obj/item/gun/ballistic/revolver/Initialize(mapload)
. = ..()
if(!istype(magazine, /obj/item/ammo_box/magazine/internal/cylinder))
verbs += /obj/item/gun/ballistic/revolver/verb/spin
@@ -109,7 +109,7 @@
)
var/list/safe_calibers
-/obj/item/gun/ballistic/revolver/detective/Initialize()
+/obj/item/gun/ballistic/revolver/detective/Initialize(mapload)
. = ..()
safe_calibers = magazine.caliber
@@ -191,7 +191,7 @@
. = ..()
spun = TRUE
-/obj/item/gun/ballistic/revolver/russian/Initialize()
+/obj/item/gun/ballistic/revolver/russian/Initialize(mapload)
. = ..()
do_spin()
spun = TRUE
diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm
index f84ed9cd8d..f7d57b43a0 100644
--- a/code/modules/projectiles/guns/ballistic/shotgun.dm
+++ b/code/modules/projectiles/guns/ballistic/shotgun.dm
@@ -192,7 +192,7 @@
flags_1 = NONE
mag_type = /obj/item/ammo_box/magazine/internal/boltaction/enchanted/arcane_barrage
-/obj/item/gun/ballistic/shotgun/boltaction/enchanted/Initialize()
+/obj/item/gun/ballistic/shotgun/boltaction/enchanted/Initialize(mapload)
. = ..()
bolt_open = TRUE
pump()
@@ -303,7 +303,7 @@
. = ..()
. += "Alt-click to pump it."
-/obj/item/gun/ballistic/shotgun/automatic/dual_tube/Initialize()
+/obj/item/gun/ballistic/shotgun/automatic/dual_tube/Initialize(mapload)
. = ..()
if (!alternate_magazine)
alternate_magazine = new mag_type(src)
diff --git a/code/modules/projectiles/guns/ballistic/toy.dm b/code/modules/projectiles/guns/ballistic/toy.dm
index 1f0601ac77..a72a172891 100644
--- a/code/modules/projectiles/guns/ballistic/toy.dm
+++ b/code/modules/projectiles/guns/ballistic/toy.dm
@@ -35,7 +35,7 @@
/obj/item/gun/ballistic/automatic/toy/pistol/riot
mag_type = /obj/item/ammo_box/magazine/toy/pistol/riot
-/obj/item/gun/ballistic/automatic/toy/pistol/riot/Initialize()
+/obj/item/gun/ballistic/automatic/toy/pistol/riot/Initialize(mapload)
magazine = new /obj/item/ammo_box/magazine/toy/pistol/riot(src)
return ..()
diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm
index 34e9247184..dd759f9e3c 100644
--- a/code/modules/projectiles/guns/energy.dm
+++ b/code/modules/projectiles/guns/energy.dm
@@ -49,7 +49,7 @@
/obj/item/gun/energy/get_cell()
return cell
-/obj/item/gun/energy/Initialize()
+/obj/item/gun/energy/Initialize(mapload)
. = ..()
if(cell_type)
cell = new cell_type(src)
diff --git a/code/modules/projectiles/guns/energy/dueling.dm b/code/modules/projectiles/guns/energy/dueling.dm
index 04eff5afa9..b11e5533cc 100644
--- a/code/modules/projectiles/guns/energy/dueling.dm
+++ b/code/modules/projectiles/guns/energy/dueling.dm
@@ -168,7 +168,7 @@
/obj/item/gun/energy/dueling/hugbox/stamina
hugbox = DUEL_HUGBOX_NONLETHAL
-/obj/item/gun/energy/dueling/Initialize()
+/obj/item/gun/energy/dueling/Initialize(mapload)
. = ..()
setting_overlay = mutable_appearance(icon,setting_iconstate())
add_overlay(setting_overlay)
diff --git a/code/modules/projectiles/guns/energy/energy_gun.dm b/code/modules/projectiles/guns/energy/energy_gun.dm
index 294040b040..a34e0f6f12 100644
--- a/code/modules/projectiles/guns/energy/energy_gun.dm
+++ b/code/modules/projectiles/guns/energy/energy_gun.dm
@@ -22,7 +22,7 @@
gunlight_state = "mini-light"
can_flashlight = 0 // Can't attach or detach the flashlight, and override it's icon update
-/obj/item/gun/energy/e_gun/mini/Initialize()
+/obj/item/gun/energy/e_gun/mini/Initialize(mapload)
gun_light = new /obj/item/flashlight/seclite(src)
return ..()
diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm
index 4d394401c4..a785e4e0e8 100644
--- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm
+++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm
@@ -42,7 +42,7 @@
icon_state = null
damage = 50
damage_type = BRUTE
- flag = "bomb"
+ flag = BOMB
range = 4
log_override = TRUE
@@ -125,7 +125,7 @@
holds_charge = TRUE
unique_frequency = TRUE
-/obj/item/gun/energy/kinetic_accelerator/Initialize()
+/obj/item/gun/energy/kinetic_accelerator/Initialize(mapload)
. = ..()
if(!holds_charge)
empty()
@@ -220,7 +220,7 @@
icon_state = null
damage = 40
damage_type = BRUTE
- flag = "bomb"
+ flag = BOMB
range = 3
log_override = TRUE
@@ -232,17 +232,18 @@
kinetic_gun = null
return ..()
-/obj/item/projectile/kinetic/prehit(atom/target)
+/obj/item/projectile/kinetic/prehit_pierce(atom/target)
. = ..()
- if(.)
- if(kinetic_gun)
- var/list/mods = kinetic_gun.get_modkits()
- for(var/obj/item/borg/upgrade/modkit/M in mods)
- M.projectile_prehit(src, target, kinetic_gun)
- if(!lavaland_equipment_pressure_check(get_turf(target)))
- name = "weakened [name]"
- damage = damage * pressure_decrease
- pressure_decrease_active = TRUE
+ if(. == PROJECTILE_PIERCE_PHASE)
+ return
+ if(kinetic_gun)
+ var/list/mods = kinetic_gun.modkits
+ for(var/obj/item/borg/upgrade/modkit/modkit in mods)
+ modkit.projectile_prehit(src, target, kinetic_gun)
+ if(!pressure_decrease_active && !lavaland_equipment_pressure_check(get_turf(target)))
+ name = "weakened [name]"
+ damage = damage * pressure_decrease
+ pressure_decrease_active = TRUE
/obj/item/projectile/kinetic/on_range()
strike_thing()
diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm
index 8e61221cc8..f73ac9cfb8 100644
--- a/code/modules/projectiles/guns/energy/laser.dm
+++ b/code/modules/projectiles/guns/energy/laser.dm
@@ -204,7 +204,7 @@
throwforce = 10
obj_flags = UNIQUE_RENAME
-/obj/item/gun/energy/laser/redtag/hitscan/chaplain/Initialize()
+/obj/item/gun/energy/laser/redtag/hitscan/chaplain/Initialize(mapload)
. = ..()
AddComponent(/datum/component/anti_magic, TRUE, TRUE, FALSE, null, null, FALSE)
diff --git a/code/modules/projectiles/guns/energy/laser_gatling.dm b/code/modules/projectiles/guns/energy/laser_gatling.dm
index 2bb1ece906..16a977515c 100644
--- a/code/modules/projectiles/guns/energy/laser_gatling.dm
+++ b/code/modules/projectiles/guns/energy/laser_gatling.dm
@@ -17,7 +17,7 @@
var/overheat_max = 50
var/heat_diffusion = 1
-/obj/item/minigunpack/Initialize()
+/obj/item/minigunpack/Initialize(mapload)
. = ..()
gun = new(src)
START_PROCESSING(SSfastprocess, src)
@@ -114,7 +114,7 @@
item_flags = NEEDS_PERMIT | SLOWS_WHILE_IN_HAND
var/obj/item/minigunpack/ammo_pack
-/obj/item/gun/energy/minigun/Initialize()
+/obj/item/gun/energy/minigun/Initialize(mapload)
if(istype(loc, /obj/item/minigunpack)) //We should spawn inside an ammo pack so let's use that one.
ammo_pack = loc
else
diff --git a/code/modules/projectiles/guns/energy/pulse.dm b/code/modules/projectiles/guns/energy/pulse.dm
index b05be99808..d5dc39695b 100644
--- a/code/modules/projectiles/guns/energy/pulse.dm
+++ b/code/modules/projectiles/guns/energy/pulse.dm
@@ -17,7 +17,7 @@
/obj/item/gun/energy/pulse/prize
pin = /obj/item/firing_pin
-/obj/item/gun/energy/pulse/prize/Initialize()
+/obj/item/gun/energy/pulse/prize/Initialize(mapload)
. = ..()
GLOB.poi_list += src
var/turf/T = get_turf(src)
diff --git a/code/modules/projectiles/guns/magic.dm b/code/modules/projectiles/guns/magic.dm
index ebc4a2f2a4..4192f038c2 100644
--- a/code/modules/projectiles/guns/magic.dm
+++ b/code/modules/projectiles/guns/magic.dm
@@ -49,7 +49,7 @@
charges--//... drain a charge
recharge_newshot()
-/obj/item/gun/magic/Initialize()
+/obj/item/gun/magic/Initialize(mapload)
. = ..()
charges = max_charges
chambered = new ammo_type(src)
diff --git a/code/modules/projectiles/guns/magic/motivation.dm b/code/modules/projectiles/guns/magic/motivation.dm
index a33165b28b..db4c222619 100644
--- a/code/modules/projectiles/guns/magic/motivation.dm
+++ b/code/modules/projectiles/guns/magic/motivation.dm
@@ -23,7 +23,7 @@
block_parry_data = /datum/block_parry_data/motivation
//to get this to toggle correctly
-/obj/item/gun/magic/staff/motivation/Initialize()
+/obj/item/gun/magic/staff/motivation/Initialize(mapload)
. = ..()
judgementcut = new(src)
diff --git a/code/modules/projectiles/guns/magic/staff.dm b/code/modules/projectiles/guns/magic/staff.dm
index 6ebdc5e7b8..f22cf6e1a9 100644
--- a/code/modules/projectiles/guns/magic/staff.dm
+++ b/code/modules/projectiles/guns/magic/staff.dm
@@ -86,7 +86,7 @@
sharpness = SHARP_EDGED
max_charges = 4
-/obj/item/gun/magic/staff/spellblade/Initialize()
+/obj/item/gun/magic/staff/spellblade/Initialize(mapload)
. = ..()
AddComponent(/datum/component/butchering, 15, 125, 0, hitsound)
diff --git a/code/modules/projectiles/guns/magic/wand.dm b/code/modules/projectiles/guns/magic/wand.dm
index f48020aeb5..8ff955fe66 100644
--- a/code/modules/projectiles/guns/magic/wand.dm
+++ b/code/modules/projectiles/guns/magic/wand.dm
@@ -9,7 +9,7 @@
max_charges = 100 //100, 50, 50, 34 (max charge distribution by 25%ths)
var/variable_charges = 1
-/obj/item/gun/magic/wand/Initialize()
+/obj/item/gun/magic/wand/Initialize(mapload)
if(prob(75) && variable_charges) //25% chance of listed max charges, 50% chance of 1/2 max charges, 25% chance of 1/3 max charges
if(prob(33))
max_charges = CEILING(max_charges / 3, 1)
diff --git a/code/modules/projectiles/guns/misc/beam_rifle.dm b/code/modules/projectiles/guns/misc/beam_rifle.dm
index 2ef974a450..6f70998834 100644
--- a/code/modules/projectiles/guns/misc/beam_rifle.dm
+++ b/code/modules/projectiles/guns/misc/beam_rifle.dm
@@ -169,7 +169,7 @@
to_chat(user, "You set \the [src] to [projectile_setting_pierce? "pierce":"impact"] mode.")
aiming_beam()
-/obj/item/gun/energy/beam_rifle/Initialize()
+/obj/item/gun/energy/beam_rifle/Initialize(mapload)
. = ..()
fire_delay = delay
current_tracers = list()
@@ -408,7 +408,7 @@
hitsound = 'sound/effects/explosion3.ogg'
damage = 0 //Handled manually.
damage_type = BURN
- flag = "energy"
+ flag = ENERGY
range = 150
jitter = 10
var/obj/item/gun/energy/beam_rifle/gun
@@ -427,11 +427,9 @@
var/aoe_mob_damage = 30
var/impact_structure_damage = 0
var/impact_direct_damage = 0
- var/turf/cached
var/list/pierced = list()
/obj/item/projectile/beam/beam_rifle/proc/AOE(turf/epicenter)
- set waitfor = FALSE
if(!epicenter)
return
new /obj/effect/temp_visual/explosion/fast(epicenter)
@@ -445,33 +443,24 @@
if(!isitem(O))
if(O.level == 1) //Please don't break underfloor items!
continue
- O.take_damage(aoe_structure_damage * get_damage_coeff(O), BURN, "laser", FALSE)
+ O.take_damage(aoe_structure_damage * get_damage_coeff(O), BURN, LASER, FALSE)
-/obj/item/projectile/beam/beam_rifle/proc/check_pierce(atom/target)
- if(!do_pierce)
- return FALSE
- if(pierced[target]) //we already pierced them go away
- return TRUE
- if(isclosedturf(target))
- if(wall_pierce++ < wall_pierce_amount)
- if(prob(wall_devastate))
- if(iswallturf(target))
- var/turf/closed/wall/W = target
- W.dismantle_wall(TRUE, TRUE)
- else
- target.ex_act(EXPLODE_HEAVY)
- return TRUE
- if(ismovable(target))
- var/atom/movable/AM = target
- if(AM.density && !AM.CanPass(src, get_turf(target)) && !ismob(AM))
- if(structure_pierce < structure_pierce_amount)
- if(isobj(AM))
- var/obj/O = AM
- O.take_damage((impact_structure_damage + aoe_structure_damage) * structure_bleed_coeff * get_damage_coeff(AM), BURN, "energy", FALSE)
- pierced[AM] = TRUE
- structure_pierce++
- return TRUE
- return FALSE
+/obj/item/projectile/beam/beam_rifle/prehit_pierce(atom/A)
+ if(isclosedturf(A) && (wall_pierce < wall_pierce_amount))
+ if(prob(wall_devastate))
+ if(iswallturf(A))
+ var/turf/closed/wall/W = A
+ W.dismantle_wall(TRUE, TRUE)
+ else
+ A.ex_act(EXPLODE_HEAVY)
+ ++wall_pierce
+ return PROJECTILE_PIERCE_PHASE // yeah this gun is a snowflakey piece of garbage - Silly-Cons
+ if(isobj(A) && (structure_pierce < structure_pierce_amount))
+ ++structure_pierce
+ var/obj/O = A
+ O.take_damage((impact_structure_damage + aoe_structure_damage) * structure_bleed_coeff * get_damage_coeff(A), BURN, "energy", FALSE)
+ return PROJECTILE_PIERCE_PHASE // ditto and this could be refactored to on_hit honestly - Silly-Cons
+ return ..()
/obj/item/projectile/beam/beam_rifle/proc/get_damage_coeff(atom/target)
if(istype(target, /obj/machinery/door))
@@ -485,38 +474,24 @@
/obj/item/projectile/beam/beam_rifle/proc/handle_impact(atom/target)
if(isobj(target))
var/obj/O = target
- O.take_damage(impact_structure_damage * get_damage_coeff(target), BURN, "laser", FALSE)
+ O.take_damage(impact_structure_damage * get_damage_coeff(target), BURN, LASER, FALSE)
if(isliving(target))
var/mob/living/L = target
L.adjustFireLoss(impact_direct_damage)
L.emote("scream")
-/obj/item/projectile/beam/beam_rifle/proc/handle_hit(atom/target)
+/obj/item/projectile/beam/beam_rifle/proc/handle_hit(atom/target, piercing_hit = FALSE)
set waitfor = FALSE
- if(!cached && !QDELETED(target))
- cached = get_turf(target)
if(nodamage)
return FALSE
- playsound(cached, 'sound/effects/explosion3.ogg', 100, 1)
- AOE(cached)
+ playsound(src, 'sound/effects/explosion3.ogg', 100, TRUE)
+ if(!do_pierce)
+ AOE(get_turf(target) || get_turf(src))
if(!QDELETED(target))
handle_impact(target)
-/obj/item/projectile/beam/beam_rifle/Bump(atom/target)
- if(check_pierce(target))
- permutated += target
- trajectory_ignore_forcemove = TRUE
- forceMove(target.loc)
- trajectory_ignore_forcemove = FALSE
- return FALSE
- if(!QDELETED(target))
- cached = get_turf(target)
- . = ..()
-
-/obj/item/projectile/beam/beam_rifle/on_hit(atom/target, blocked = FALSE)
- if(!QDELETED(target))
- cached = get_turf(target)
- handle_hit(target)
+/obj/item/projectile/beam/beam_rifle/on_hit(atom/target, blocked = FALSE, piercing_hit = FALSE)
+ handle_hit(target, piercing_hit)
. = ..()
/obj/item/projectile/beam/beam_rifle/hitscan
@@ -547,6 +522,9 @@
hitscan_light_intensity = 0
hitscan_light_color_override = "#99ff99"
-/obj/item/projectile/beam/beam_rifle/hitscan/aiming_beam/prehit(atom/target)
+/obj/item/projectile/beam/beam_rifle/hitscan/aiming_beam/prehit_pierce(atom/target)
+ return PROJECTILE_DELETE_WITHOUT_HITTING
+
+/obj/item/projectile/beam/beam_rifle/hitscan/aiming_beam/on_hit()
qdel(src)
- return FALSE
+ return BULLET_ACT_BLOCK
diff --git a/code/modules/projectiles/guns/misc/blastcannon.dm b/code/modules/projectiles/guns/misc/blastcannon.dm
index 64cffe52e7..a88f395561 100644
--- a/code/modules/projectiles/guns/misc/blastcannon.dm
+++ b/code/modules/projectiles/guns/misc/blastcannon.dm
@@ -26,7 +26,7 @@
debug_power = 80
bombcheck = FALSE
-/obj/item/gun/blastcannon/Initialize()
+/obj/item/gun/blastcannon/Initialize(mapload)
. = ..()
if(!pin)
pin = new
@@ -114,7 +114,8 @@
icon_state = "blastwave"
damage = 0
nodamage = FALSE
- movement_type = FLYING | UNSTOPPABLE
+ movement_type = FLYING
+ projectile_phasing = ALL // just blows up the turfs lmao - Silly-Cons
var/heavyr = 0
var/mediumr = 0
var/lightr = 0
diff --git a/code/modules/projectiles/guns/misc/chameleon.dm b/code/modules/projectiles/guns/misc/chameleon.dm
index 4fa614ae5c..428de747f7 100644
--- a/code/modules/projectiles/guns/misc/chameleon.dm
+++ b/code/modules/projectiles/guns/misc/chameleon.dm
@@ -25,7 +25,7 @@
var/can_hitscan = FALSE
var/hitscan_mode = FALSE
-/obj/item/gun/energy/laser/chameleon/Initialize()
+/obj/item/gun/energy/laser/chameleon/Initialize(mapload)
. = ..()
chameleon_action = new(src)
chameleon_action.chameleon_type = /obj/item/gun
diff --git a/code/modules/projectiles/guns/misc/chem_gun.dm b/code/modules/projectiles/guns/misc/chem_gun.dm
index ccc4c5bd15..9f0815ebfb 100644
--- a/code/modules/projectiles/guns/misc/chem_gun.dm
+++ b/code/modules/projectiles/guns/misc/chem_gun.dm
@@ -21,7 +21,7 @@
var/list/allowed_containers = list(/obj/item/reagent_containers/glass/bottle/vial/small, /obj/item/reagent_containers/glass/bottle/vial/large)
var/quickload = TRUE
-/obj/item/gun/chem/Initialize()
+/obj/item/gun/chem/Initialize(mapload)
. = ..()
chambered = new /obj/item/ammo_casing/chemgun(src)
START_PROCESSING(SSobj, src)
@@ -111,7 +111,7 @@
icon_state = "chemgunrepeater"
item_state = "syringegun"
-obj/item/gun/chem/smart/Initialize()
+obj/item/gun/chem/smart/Initialize(mapload)
. = ..()
chambered = new /obj/item/ammo_casing/chemgun/smart(src)
diff --git a/code/modules/projectiles/guns/misc/medbeam.dm b/code/modules/projectiles/guns/misc/medbeam.dm
index 6864dad33e..4a64317fd9 100644
--- a/code/modules/projectiles/guns/misc/medbeam.dm
+++ b/code/modules/projectiles/guns/misc/medbeam.dm
@@ -16,7 +16,7 @@
weapon_weight = WEAPON_MEDIUM
-/obj/item/gun/medbeam/Initialize()
+/obj/item/gun/medbeam/Initialize(mapload)
. = ..()
START_PROCESSING(SSobj, src)
@@ -130,6 +130,6 @@
/obj/item/gun/medbeam/mech
mounted = 1
-/obj/item/gun/medbeam/mech/Initialize()
+/obj/item/gun/medbeam/mech/Initialize(mapload)
. = ..()
STOP_PROCESSING(SSobj, src) //Mech mediguns do not process until installed, and are controlled by the holder obj
diff --git a/code/modules/projectiles/guns/misc/syringe_gun.dm b/code/modules/projectiles/guns/misc/syringe_gun.dm
index 91275e197a..07066023b3 100644
--- a/code/modules/projectiles/guns/misc/syringe_gun.dm
+++ b/code/modules/projectiles/guns/misc/syringe_gun.dm
@@ -14,7 +14,7 @@
var/list/syringes = list()
var/max_syringes = 1
-/obj/item/gun/syringe/Initialize()
+/obj/item/gun/syringe/Initialize(mapload)
. = ..()
chambered = new /obj/item/ammo_casing/syringegun(src)
@@ -83,7 +83,7 @@
name = "modified syringe gun"
desc = "A syringe gun that has been modified to fit DNA injectors instead of normal syringes."
-/obj/item/gun/syringe/dna/Initialize()
+/obj/item/gun/syringe/dna/Initialize(mapload)
. = ..()
chambered = new /obj/item/ammo_casing/dnainjector(src)
@@ -113,7 +113,7 @@
suppressed = TRUE //Softer fire sound
can_unsuppress = FALSE
-/obj/item/gun/syringe/dart/Initialize()
+/obj/item/gun/syringe/dart/Initialize(mapload)
. = ..()
chambered = new /obj/item/ammo_casing/syringegun/dart(src)
diff --git a/code/modules/projectiles/pins.dm b/code/modules/projectiles/pins.dm
index cef730366e..0f5e558841 100644
--- a/code/modules/projectiles/pins.dm
+++ b/code/modules/projectiles/pins.dm
@@ -13,7 +13,7 @@
var/pin_removeable = 0 // Can be replaced by any pin.
var/obj/item/gun/gun
-/obj/item/firing_pin/Initialize(newloc)
+/obj/item/firing_pin/Initialize(mapload, newloc)
. = ..()
if(istype(newloc, /obj/item/gun))
gun = newloc
@@ -238,7 +238,7 @@
var/only_lethals = FALSE
var/can_toggle = TRUE
-/obj/item/firing_pin/security_level/Initialize()
+/obj/item/firing_pin/security_level/Initialize(mapload)
. = ..()
fail_message = "INVALID SECURITY LEVEL. CURRENT: [uppertext(NUM2SECLEVEL(GLOB.security_level))]. \
MIN: [uppertext(NUM2SECLEVEL(min_sec_level))]. MAX: [uppertext(NUM2SECLEVEL(max_sec_level))]. \
diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm
index 8d467c9901..6c6733627f 100644
--- a/code/modules/projectiles/projectile.dm
+++ b/code/modules/projectiles/projectile.dm
@@ -13,9 +13,9 @@
density = FALSE
anchored = TRUE
item_flags = ABSTRACT
- pass_flags = PASSTABLE
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
movement_type = FLYING
+ generic_canpass = FALSE
animate_movement = NO_STEPS
hitsound = 'sound/weapons/pierce.ogg'
appearance_flags = PIXEL_SCALE
@@ -31,7 +31,6 @@
var/xo = null
var/atom/original = null // the original target clicked
var/turf/starting = null // the projectile's starting turf
- var/list/permutated = list() // we've passed through these atoms, don't try to hit them again
var/p_x = 16
var/p_y = 16 // the pixel location of the tile that the player clicked. Default is the center
@@ -41,6 +40,35 @@
var/time_offset = 0
var/datum/point/vector/trajectory
var/trajectory_ignore_forcemove = FALSE //instructs forceMove to NOT reset our trajectory to the new location!
+ /// We already impacted these things, do not impact them again. Used to make sure we can pierce things we want to pierce. Lazylist, typecache style (object = TRUE) for performance.
+ var/list/impacted
+ /// If TRUE, we can hit our firer.
+ var/ignore_source_check = FALSE
+ /// We are flagged PHASING temporarily to not stop moving when we Bump something but want to keep going anyways.
+ var/temporary_unstoppable_movement = FALSE
+
+ /** PROJECTILE PIERCING
+ * WARNING:
+ * Projectile piercing MUST be done using these variables.
+ * Ordinary passflags will result in can_hit_target being false unless directly clicked on - similar to projectile_phasing but without even going to process_hit.
+ * The two flag variables below both use pass flags.
+ * In the context of LETPASStHROW, it means the projectile will ignore things that are currently "in the air" from a throw.
+ *
+ * Also, projectiles sense hits using Bump(), and then pierce them if necessary.
+ * They simply do not follow conventional movement rules.
+ * NEVER flag a projectile as PHASING movement type.
+ * If you so badly need to make one go through *everything*, override check_pierce() for your projectile to always return PROJECTILE_PIERCE_PHASE/HIT.
+ */
+ /// The "usual" flags of pass_flags is used in that can_hit_target ignores these unless they're specifically targeted/clicked on. This behavior entirely bypasses process_hit if triggered, rather than phasing which uses prehit_pierce() to check.
+ pass_flags = PASSTABLE
+ /// If FALSE, allow us to hit something directly targeted/clicked/whatnot even if we're able to phase through it
+ var/phasing_ignore_direct_target = FALSE
+ /// Bitflag for things the projectile should just phase through entirely - No hitting unless direct target and [phasing_ignore_direct_target] is FALSE. Uses pass_flags flags.
+ var/projectile_phasing = NONE
+ /// Bitflag for things the projectile should hit, but pierce through without deleting itself. Defers to projectile_phasing. Uses pass_flags flags.
+ var/projectile_piercing = NONE
+ /// number of times we've pierced something. Incremented BEFORE bullet_act and on_hit proc!
+ var/pierces = 0
/// "leftover" pixels for Range() calculation as pixel_move() was moved to simulated semi-pixel movement and Range() is in tiles.
var/pixels_range_leftover = 0
/// "leftover" tick pixels and stuff yeah, so we don't round off things and introducing tracing inaccuracy.
@@ -118,12 +146,10 @@
/// How many deciseconds are each hitscan movement considered. Used for homing and other things that use seconds for timing rather than ticks.
var/hitscan_movement_decisecond_equivalency = 0.1
- var/ignore_source_check = FALSE
-
var/damage = 10
var/damage_type = BRUTE //BRUTE, BURN, TOX, OXY, CLONE are the only things that should be in here
var/nodamage = 0 //Determines if the projectile will skip any damage inflictions
- var/flag = "bullet" //Defines what armor to use when it hits things. Must be set to bullet, laser, energy,or bomb
+ var/flag = BULLET //Defines what armor to use when it hits things. Must be set to bullet, laser, energy,or bomb
var/projectile_type = /obj/item/projectile
/// Range of the projectile, de-incrementing every step. The projectile deletes itself at 0. This is in tiles.
var/range = 50
@@ -151,8 +177,6 @@
var/impact_effect_type //what type of impact effect to show when hitting something
var/log_override = FALSE //is this type spammed enough to not log? (KAs)
- var/temporary_unstoppable_movement = FALSE
-
///If defined, on hit we create an item of this type then call hitby() on the hit target with this, mainly used for embedding items (bullets) in targets
var/shrapnel_type
///If TRUE, hit mobs even if they're on the floor and not our target
@@ -166,9 +190,8 @@
/// For telling whether we want to roll for bone breaking or lacerations if we're bothering with wounds
sharpness = SHARP_NONE
-/obj/item/projectile/Initialize()
+/obj/item/projectile/Initialize(mapload)
. = ..()
- permutated = list()
decayedRange = range
if(embedding)
updateEmbedding()
@@ -202,10 +225,7 @@
else //when a limb is missing the damage is actually passed to the chest
return BODY_ZONE_CHEST
-/obj/item/projectile/proc/prehit(atom/target)
- return TRUE
-
-/obj/item/projectile/proc/on_hit(atom/target, blocked = FALSE)
+/obj/item/projectile/proc/on_hit(atom/target, blocked = FALSE, pierce_hit)
if(fired_from)
SEND_SIGNAL(fired_from, COMSIG_PROJECTILE_ON_HIT, firer, target, Angle)
@@ -239,6 +259,11 @@
if(!isliving(target))
if(impact_effect_type && !hitscan)
new impact_effect_type(target_loca, hitx, hity)
+ if(isturf(target) && hitsound_wall)
+ var/volume = clamp(vol_by_damage() + 20, 0, 100)
+ if(suppressed)
+ volume = 5
+ playsound(loc, hitsound_wall, volume, TRUE, -1)
return BULLET_ACT_HIT
var/mob/living/L = target
@@ -279,7 +304,7 @@
else
if(hitsound)
var/volume = vol_by_damage()
- playsound(loc, hitsound, volume, 1, -1)
+ playsound(src, hitsound, volume, 1, -1)
L.visible_message("[L] is hit by \a [src][organ_hit_text]!", \
"[L] is hit by \a [src][organ_hit_text]!", null, COMBAT_MESSAGE_RANGE)
if(candink && def_zone == BODY_ZONE_HEAD)
@@ -299,7 +324,7 @@
/obj/item/projectile/proc/vol_by_damage()
if(src.damage)
- return clamp((src.damage) * 0.67, 30, 100)// Multiply projectile damage by 0.67, then CLAMP the value between 30 and 100
+ return clamp((src.damage) * 0.67, 30, 100) // Multiply projectile damage by 0.67, then CLAMP the value between 30 and 100
else
return 50 //if the projectile doesn't do damage, play its hitsound at 50% volume
@@ -328,94 +353,274 @@
beam_segments[beam_index] = null
/obj/item/projectile/Bump(atom/A)
- if(!trajectory)
+ SEND_SIGNAL(src, COMSIG_MOVABLE_BUMP, A)
+ if(!can_hit_target(A, A == original, TRUE, TRUE))
return
+ Impact(A)
+
+/**
+ * Called when the projectile hits something
+ * This can either be from it bumping something,
+ * or it passing over a turf/being crossed and scanning that there is infact
+ * a valid target it needs to hit.
+ * This target isn't however necessarily WHAT it hits
+ * that is determined by process_hit and select_target.
+ *
+ * Furthermore, this proc shouldn't check can_hit_target - this should only be called if can hit target is already checked.
+ * Also, we select_target to find what to process_hit first.
+ */
+/obj/item/projectile/proc/Impact(atom/A)
+ if(!trajectory)
+ qdel(src)
+ return FALSE
+ if(impacted[A]) // NEVER doublehit - Silly-Cons
+ return FALSE
+ var/datum/point/pcache = trajectory.copy_to()
var/turf/T = get_turf(A)
if(check_ricochet_flag(A) && check_ricochet(A)) //if you can ricochet, attempt to ricochet off the object
ricochets++
if(A.handle_ricochet(src))
on_ricochet(A) //if allowed, use autoaim to ricochet into someone, otherwise default to ricocheting off the object from above
- var/datum/point/pcache = trajectory.copy_to()
- if(hitscan)
- store_hitscan_collision(pcache)
+ impacted = list() // Shoot a x-ray laser at a pair of mirrors I dare you
+ ignore_source_check = TRUE // Firer is no longer immune
decayedRange = max(0, decayedRange - reflect_range_decrease)
ricochet_chance *= ricochet_decay_chance
damage *= ricochet_decay_damage
range = decayedRange
+ if(hitscan)
+ store_hitscan_collision(pcache)
return TRUE
var/distance = get_dist(T, starting) // Get the distance between the turf shot from and the mob we hit and use that for the calculations.
if(def_zone && check_zone(def_zone) != BODY_ZONE_CHEST)
def_zone = ran_zone(def_zone, max(100-(7*distance), 5) * zone_accuracy_factor) //Lower accurancy/longer range tradeoff. 7 is a balanced number to use.
- if(isturf(A) && hitsound_wall)
- var/volume = clamp(vol_by_damage() + 20, 0, 100)
- if(suppressed)
- volume = 5
- playsound(loc, hitsound_wall, volume, 1, -1)
+ return process_hit(T, select_target(T, A, A), A) // SELECT TARGET FIRST!
- return process_hit(T, select_target(T, A))
-
-#define QDEL_SELF 1 //Delete if we're not UNSTOPPABLE flagged non-temporarily
-#define DO_NOT_QDEL 2 //Pass through.
-#define FORCE_QDEL 3 //Force deletion.
-
-/obj/item/projectile/proc/process_hit(turf/T, atom/target, qdel_self, hit_something = FALSE) //probably needs to be reworked entirely when pixel movement is done.
- if(QDELETED(src) || !T || !target) //We're done, nothing's left.
- if((qdel_self == FORCE_QDEL) || ((qdel_self == QDEL_SELF) && !temporary_unstoppable_movement && !(movement_type & UNSTOPPABLE)))
- qdel(src)
- return hit_something
- permutated |= target //Make sure we're never hitting it again. If we ever run into weirdness with piercing projectiles needing to hit something multiple times.. well.. that's a to-do.
- if(!prehit(target))
- return process_hit(T, select_target(T), qdel_self, hit_something) //Hit whatever else we can since that didn't work.
- var/result = target.bullet_act(src, def_zone)
- if(result == BULLET_ACT_FORCE_PIERCE)
- if(!(movement_type & UNSTOPPABLE))
- temporary_unstoppable_movement = TRUE
- movement_type |= UNSTOPPABLE
- return process_hit(T, select_target(T), qdel_self, TRUE) //Hit whatever else we can since we're piercing through but we're still on the same tile.
- else if(result == BULLET_ACT_TURF) //We hit the turf but instead we're going to also hit something else on it.
- return process_hit(T, select_target(T), QDEL_SELF, TRUE)
- else //Whether it hit or blocked, we're done!
- qdel_self = QDEL_SELF
- hit_something = TRUE
- if((qdel_self == FORCE_QDEL) || ((qdel_self == QDEL_SELF) && !temporary_unstoppable_movement && !(movement_type & UNSTOPPABLE)))
+/**
+ * The primary workhorse proc of projectile impacts.
+ * This is a RECURSIVE call - process_hit is called on the first selected target, and then repeatedly called if the projectile still hasn't been deleted.
+ *
+ * Order of operations:
+ * 1. Checks if we are deleted, or if we're somehow trying to hit a null, in which case, bail out
+ * 2. Adds the thing we're hitting to impacted so we can make sure we don't doublehit
+ * 3. Checks piercing - stores this.
+ * Afterwards:
+ * Hit and delete, hit without deleting and pass through, pass through without hitting, or delete without hitting depending on result
+ * If we're going through without hitting, find something else to hit if possible and recurse, set unstoppable movement to true
+ * If we're deleting without hitting, delete and return
+ * Otherwise, send signal of COMSIG_PROJECTILE_PREHIT to target
+ * Then, hit, deleting ourselves if necessary.
+ * @params
+ * T - Turf we're on/supposedly hitting
+ * target - target we're hitting
+ * bumped - target we originally bumped. it's here to ensure that if something blocks our projectile by means of Cross() failure, we hit it
+ * even if it is not dense.
+ * hit_something - only should be set by recursive calling by this proc - tracks if we hit something already
+ *
+ * Returns if we hit something.
+ * - Silly-Cons
+ */
+/obj/item/projectile/proc/process_hit(turf/T, atom/target, atom/bumped, hit_something = FALSE)
+ // 1.
+ if(QDELETED(src) || !T || !target)
+ return
+ // 2.
+ impacted[target] = TRUE //hash lookup > in for performance in hit-checking
+ // 3.
+ var/mode = prehit_pierce(target)
+ if(mode == PROJECTILE_DELETE_WITHOUT_HITTING)
qdel(src)
+ return hit_something
+ else if(mode == PROJECTILE_PIERCE_PHASE)
+ if(!(movement_type & PHASING))
+ temporary_unstoppable_movement = TRUE
+ movement_type |= PHASING
+ return process_hit(T, select_target(T, target, bumped), bumped, hit_something) // try to hit something else
+ // at this point we are going to hit the thing
+ // in which case send signal to it
+ SEND_SIGNAL(target, COMSIG_PROJECTILE_PREHIT, args)
+ if(mode == PROJECTILE_PIERCE_HIT)
+ ++pierces
+ hit_something = TRUE
+ var/result = target.bullet_act(src, def_zone, mode == PROJECTILE_PIERCE_HIT)
+ if((result == BULLET_ACT_FORCE_PIERCE) || (mode == PROJECTILE_PIERCE_HIT))
+ if(!(movement_type & PHASING))
+ temporary_unstoppable_movement = TRUE
+ movement_type |= PHASING
+ return process_hit(T, select_target(T, target, bumped), bumped, TRUE)
+ qdel(src)
return hit_something
-#undef QDEL_SELF
-#undef DO_NOT_QDEL
-#undef FORCE_QDEL
+/**
+ * Selects a target to hit from a turf
+ *
+ * @params
+ * T - The turf
+ * target - The "preferred" atom to hit, usually what we Bumped() first.
+ * bumped - used to track if something is the reason we impacted in the first place.
+ * If set, this atom is always treated as dense by can_hit_target.
-/obj/item/projectile/proc/select_target(turf/T, atom/target) //Select a target from a turf.
- if((original in T) && can_hit_target(original, permutated, TRUE, TRUE))
+ * Priority:
+ * 0. Anything that is already in impacted is ignored no matter what. Furthermore, in any bracket, if the target atom parameter is in it, that's hit first.
+ * Furthermore, can_hit_target is always checked. This (entire proc) is PERFORMANCE OVERHEAD!! But, it shouldn't be ""too"" bad and I frankly don't have a better *generic non snowflakey* way that I can think of right now at 3 AM.
+ * FURTHERMORE, mobs/objs have a density check from can_hit_target - to hit non dense objects over a turf, you must click on them, same for mobs that usually wouldn't get hit.
+ * 1. The thing originally aimed at/clicked on
+ * 2. Mobs - picks lowest buckled mob to prevent scarp piggybacking memes
+ * 3. Objs
+ * 4. Turf
+ * 5. Nothing
+ */
+/obj/item/projectile/proc/select_target(turf/T, atom/target, atom/bumped)
+ // 1. original
+ if(can_hit_target(original, TRUE, FALSE, original == bumped))
return original
- if(target && can_hit_target(target, permutated, target == original, TRUE))
- return target
- var/list/mob/living/possible_mobs = typecache_filter_list(T, GLOB.typecache_mob)
- var/list/mob/mobs = list()
- for(var/mob/living/M in possible_mobs)
- if(!can_hit_target(M, permutated, M == original, TRUE))
+ var/list/atom/possible = list() // let's define these ONCE
+ var/list/atom/considering = list()
+ // 2. mobs
+ possible = typecache_filter_list(T, GLOB.typecache_living) // living only
+ for(var/i in possible)
+ if(!can_hit_target(i, i == original, TRUE, i == bumped))
continue
- mobs += M
- var/mob/M = safepick(mobs)
- if(M)
+ considering += i
+ if(considering.len)
+ var/mob/living/M = pick(considering)
return M.lowest_buckled_mob()
- var/list/obj/possible_objs = typecache_filter_list(T, GLOB.typecache_machine_or_structure)
- var/list/obj/objs = list()
- for(var/obj/O in possible_objs)
- if(!can_hit_target(O, permutated, O == original, TRUE))
+ considering.len = 0
+ // 3. objs and other dense things
+ for(var/i in T.contents)
+ if(!can_hit_target(i, i == original, TRUE, i == bumped))
continue
- objs += O
- var/obj/O = safepick(objs)
- if(O)
- if(length(O.buckled_mobs))
- return pick(O.buckled_mobs)
- return O
- //Nothing else is here that we can hit, hit the turf if we haven't.
- if(!(T in permutated) && can_hit_target(T, permutated, T == original, TRUE))
+ considering += i
+ if(considering.len)
+ return pick(considering)
+ // 4. turf
+ if(can_hit_target(T, T == original, TRUE, T == bumped))
return T
- //Returns null if nothing at all was found.
+ // 5. nothing
+ // (returns null)
+
+//Returns true if the target atom is on our current turf and above the right layer
+//If direct target is true it's the originally clicked target.
+/obj/item/projectile/proc/can_hit_target(atom/target, direct_target = FALSE, ignore_loc = FALSE,cross_failed = FALSE)
+ if(QDELETED(target) || impacted[target])
+ return FALSE
+ if(!ignore_loc && (loc != target.loc))
+ return FALSE
+ // if pass_flags match, pass through entirely - unless direct target is set.
+ if((target.pass_flags_self & pass_flags) && !direct_target)
+ return FALSE
+ if(!ignore_source_check && firer)
+ var/mob/M = firer
+ if((target == firer) || ((target == firer.loc) && ismecha(firer.loc)) || (target in firer.buckled_mobs) || (istype(M) && (M.buckled == target)))
+ return FALSE
+ if(target.density || cross_failed) //This thing blocks projectiles, hit it regardless of layer/mob stuns/etc.
+ return TRUE
+ if(!isliving(target))
+ if(isturf(target)) // non dense turfs
+ return FALSE
+ if(target.layer < PROJECTILE_HIT_THRESHHOLD_LAYER)
+ return FALSE
+ else if(!direct_target) // non dense objects do not get hit unless specifically clicked
+ return FALSE
+ else
+ var/mob/living/L = target
+ if(direct_target)
+ return TRUE
+ // If target not able to use items, move and stand - or if they're just dead, pass over.
+ if(L.stat == DEAD)
+ return FALSE
+ if(!L.density)
+ return FALSE
+ if(L.resting)
+ return TRUE
+ var/stunned = HAS_TRAIT(L, TRAIT_MOBILITY_NOMOVE) && HAS_TRAIT(L, TRAIT_MOBILITY_NOREST) && HAS_TRAIT(L, TRAIT_MOBILITY_NOPICKUP)
+ return !stunned || hit_stunned_targets
+ return TRUE
+
+/**
+ * Scan if we should hit something and hit it if we need to
+ * The difference between this and handling in Impact is
+ * In this we strictly check if we need to Impact() something in specific
+ * If we do, we do
+ * We don't even check if it got hit already - Impact() does that
+ * In impact there's more code for selecting WHAT to hit
+ * So this proc is more of checking if we should hit something at all BY having an atom cross us.
+ */
+/obj/item/projectile/proc/scan_crossed_hit(atom/movable/A)
+ if(can_hit_target(A, direct_target = (A == original)))
+ Impact(A)
+
+/**
+ * Scans if we should hit something on the turf we just moved to if we haven't already
+ *
+ * This proc is a little high in overhead but allows us to not snowflake CanPass in living and other things.
+ */
+/obj/item/projectile/proc/scan_moved_turf()
+ // Optimally, we scan: mobs --> objs --> turf for impact
+ // but, overhead is a thing and 2 for loops every time it moves is a no-go.
+ // realistically, since we already do select_target in impact, we can not do that
+ // and hope projectiles get refactored again in the future to have a less stupid impact detection system
+ // that hopefully won't also involve a ton of overhead
+ if(can_hit_target(original, TRUE, FALSE))
+ Impact(original) // try to hit thing clicked on
+ // else, try to hit mobs
+ else // because if we impacted original and pierced we'll already have select target'd and hit everything else we should be hitting
+ for(var/mob/M in loc) // so I guess we're STILL doing a for loop of mobs because living movement would otherwise have snowflake code for projectile CanPass
+ // so the snowflake vs performance is pretty arguable here
+ if(can_hit_target(M, M == original, TRUE))
+ Impact(M)
+ break
+
+/**
+ * Projectile crossed: When something enters a projectile's tile, make sure the projectile hits it if it should be hitting it.
+ */
+/obj/item/projectile/Crossed(atom/movable/AM)
+ . = ..()
+ scan_crossed_hit(AM)
+
+/**
+ * Projectile can pass through
+ * Used to not even attempt to Bump() or fail to Cross() anything we already hit.
+ */
+/obj/item/projectile/CanPassThrough(atom/blocker, turf/target, blocker_opinion)
+ return impacted[blocker]? TRUE : ..()
+
+/**
+ * Projectile moved:
+ *
+ * If not fired yet, do not do anything. Else,
+ *
+ * If temporary unstoppable movement used for piercing through things we already hit (impacted list) is set, unset it.
+ * Scan turf we're now in for anything we can/should hit. This is useful for hitting non dense objects the user
+ * directly clicks on, as well as for PHASING projectiles to be able to hit things at all as they don't ever Bump().
+ */
+/obj/item/projectile/Moved(atom/OldLoc, Dir)
+ . = ..()
+ if(!fired)
+ return
+ if(temporary_unstoppable_movement)
+ temporary_unstoppable_movement = FALSE
+ movement_type &= ~PHASING
+ scan_moved_turf() //mostly used for making sure we can hit a non-dense object the user directly clicked on, and for penetrating projectiles that don't bump
+
+/**
+ * Checks if we should pierce something.
+ *
+ * NOT meant to be a pure proc, since this replaces prehit() which was used to do things.
+ * Return PROJECTILE_DELETE_WITHOUT_HITTING to delete projectile without hitting at all!
+ */
+
+/obj/item/projectile/proc/prehit_pierce(atom/A)
+ if((projectile_phasing & A.pass_flags_self) && (phasing_ignore_direct_target || original != A))
+ return PROJECTILE_PIERCE_PHASE
+ if(projectile_piercing & A.pass_flags_self)
+ return PROJECTILE_PIERCE_HIT
+ if(ismovable(A))
+ var/atom/movable/AM = A
+ if(AM.throwing)
+ return (projectile_phasing & LETPASSTHROW)? PROJECTILE_PIERCE_PHASE : ((projectile_piercing & LETPASSTHROW)? PROJECTILE_PIERCE_HIT : PROJECTILE_PIERCE_NONE)
+ return PROJECTILE_PIERCE_NONE
/obj/item/projectile/proc/check_ricochet(atom/A)
if(ricochets > ricochets_max) //safety thing, we don't care about what the other thing says about this.
@@ -438,9 +643,9 @@
CRASH("Invalid return value for projectile ricochet check from [A].")
/obj/item/projectile/proc/check_ricochet_flag(atom/A)
- if((flag in list("energy", "laser")) && (A.flags_ricochet & RICOCHET_SHINY))
+ if((flag in list(ENERGY, LASER)) && (A.flags_ricochet & RICOCHET_SHINY))
return TRUE
- if((flag in list("bomb", "bullet")) && (A.flags_ricochet & RICOCHET_HARD))
+ if((flag in list(BOMB, BULLET)) && (A.flags_ricochet & RICOCHET_HARD))
return TRUE
return FALSE
@@ -479,16 +684,16 @@
pixels_tick_leftover = required_pixels
/obj/item/projectile/proc/fire(angle, atom/direct_target)
+ LAZYINITLIST(impacted)
if(fired_from)
SEND_SIGNAL(fired_from, COMSIG_PROJECTILE_BEFORE_FIRE, src, original) //If no angle needs to resolve it from xo/yo!
if(shrapnel_type)
AddElement(/datum/element/embed, projectile_payload = shrapnel_type)
if(!log_override && firer && original)
log_combat(firer, original, "fired at", src, "from [get_area_name(src, TRUE)]")
- if(direct_target)
- if(prehit(direct_target))
- direct_target.bullet_act(src, def_zone)
- qdel(src)
+ if(direct_target && (get_dist(direct_target, get_turf(src)) <= 1)) // point blank shots
+ process_hit(get_turf(direct_target), direct_target)
+ if(QDELETED(src))
return
if(isnum(angle))
setAngle(angle)
@@ -545,6 +750,8 @@
if(zc)
before_z_change(old, target)
. = ..()
+ if(QDELETED(src)) // we coulda bumped something
+ return
if(trajectory && !trajectory_ignore_forcemove && isturf(target))
if(hitscan)
finalize_hitscan_and_generate_tracers(FALSE)
@@ -679,30 +886,6 @@
if(prob(50))
homing_offset_y = -homing_offset_y
-//Returns true if the target atom is on our current turf and above the right layer
-//If direct target is true it's the originally clicked target.
-/obj/item/projectile/proc/can_hit_target(atom/target, list/passthrough, direct_target = FALSE, ignore_loc = FALSE)
- if(QDELETED(target))
- return FALSE
- if(!ignore_source_check && firer)
- var/mob/M = firer
- if((target == firer) || ((target == firer.loc) && ismecha(firer.loc)) || (target in firer.buckled_mobs) || (istype(M) && (M.buckled == target)))
- if(!ricochets) //if it has ricocheted, it can hit the firer.
- return FALSE
- if(!ignore_loc && (loc != target.loc))
- return FALSE
- if(target in passthrough)
- return FALSE
- if(target.density) //This thing blocks projectiles, hit it regardless of layer/mob stuns/etc.
- return TRUE
- if(!isliving(target))
- if(target.layer < PROJECTILE_HIT_THRESHHOLD_LAYER)
- return FALSE
- else
- var/mob/living/L = target
- if(!direct_target && !L.density)
- return FALSE
- return TRUE
//Spread is FORCED!
/obj/item/projectile/proc/preparePixelProjectile(atom/target, atom/source, params, spread = 0)
@@ -763,22 +946,6 @@
angle = arctan(y - oy, x - ox)
return list(angle, p_x, p_y)
-/obj/item/projectile/Crossed(atom/movable/AM) //A mob moving on a tile with a projectile is hit by it.
- . = ..()
- if(isliving(AM) && !(pass_flags & PASSMOB))
- var/mob/living/L = AM
- if(can_hit_target(L, permutated, (AM == original)))
- Bump(AM)
-
-/obj/item/projectile/Move(atom/newloc, dir = NONE)
- . = ..()
- if(.)
- if(temporary_unstoppable_movement)
- temporary_unstoppable_movement = FALSE
- movement_type &= ~(UNSTOPPABLE)
- if(fired && can_hit_target(original, permutated, TRUE))
- Bump(original)
-
/obj/item/projectile/Destroy()
STOP_PROCESSING(SSprojectiles, src)
if(hitscan)
diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm
index 79e9ab8b4b..69ad106b96 100644
--- a/code/modules/projectiles/projectile/beams.dm
+++ b/code/modules/projectiles/projectile/beams.dm
@@ -7,7 +7,7 @@
damage_type = BURN
hitsound = 'sound/weapons/sear.ogg'
hitsound_wall = 'sound/weapons/effects/searwall.ogg'
- flag = "laser"
+ flag = LASER
eyeblur = 2
impact_effect_type = /obj/effect/temp_visual/impact_effect/red_laser
light_color = LIGHT_COLOR_RED
@@ -30,7 +30,7 @@
wound_bonus = 0
damage = 25
-/obj/item/projectile/beam/laser/hellfire/Initialize()
+/obj/item/projectile/beam/laser/hellfire/Initialize(mapload)
. = ..()
transform *= 2
@@ -72,7 +72,7 @@
damage = 15
irradiate = 100
range = 15
- pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE | PASSCLOSEDTURF
+ pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE | PASSCLOSEDTURF | PASSMACHINE | PASSSTRUCTURE
impact_effect_type = /obj/effect/temp_visual/impact_effect/green_laser
light_color = LIGHT_COLOR_GREEN
@@ -85,7 +85,7 @@
icon_state = "omnilaser"
damage = 28 // Citadel change for balance from 36
damage_type = STAMINA
- flag = "energy"
+ flag = ENERGY
hitsound = 'sound/weapons/tap.ogg'
eyeblur = 0
pixels_per_second = TILES_TO_PIXELS(16.667)
@@ -150,7 +150,7 @@
hitsound = null
damage = 0
damage_type = STAMINA
- flag = "laser"
+ flag = LASER
var/suit_types = list(/obj/item/clothing/suit/redtag, /obj/item/clothing/suit/bluetag)
impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser
light_color = LIGHT_COLOR_BLUE
@@ -166,7 +166,7 @@
/obj/item/projectile/beam/lasertag/mag //the projectile, compatible with regular laser tag armor
icon_state = "magjectile-toy"
name = "lasertag magbolt"
- movement_type = FLYING | UNSTOPPABLE //for penetration memes
+ movement_type = FLYING | PHASING //for penetration memes
range = 5 //so it isn't super annoying
light_range = 2
light_color = LIGHT_COLOR_YELLOW
@@ -231,7 +231,7 @@
hitsound = 'sound/weapons/shrink_hit.ogg'
damage = 0
damage_type = STAMINA
- flag = "energy"
+ flag = ENERGY
impact_effect_type = /obj/effect/temp_visual/impact_effect/shrink
light_color = LIGHT_COLOR_BLUE
var/shrink_time = 90
diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm
index b408957aa7..5b488f629f 100644
--- a/code/modules/projectiles/projectile/bullets.dm
+++ b/code/modules/projectiles/projectile/bullets.dm
@@ -5,7 +5,7 @@
damage_type = BRUTE
nodamage = FALSE
candink = TRUE
- flag = "bullet"
+ flag = BULLET
hitsound_wall = "ricochet"
impact_effect_type = /obj/effect/temp_visual/impact_effect
sharpness = SHARP_POINTY
diff --git a/code/modules/projectiles/projectile/bullets/dart_syringe.dm b/code/modules/projectiles/projectile/bullets/dart_syringe.dm
index 4978e679b4..3b7e86e77c 100644
--- a/code/modules/projectiles/projectile/bullets/dart_syringe.dm
+++ b/code/modules/projectiles/projectile/bullets/dart_syringe.dm
@@ -4,7 +4,7 @@
damage = 6
var/piercing = FALSE
-/obj/item/projectile/bullet/dart/Initialize()
+/obj/item/projectile/bullet/dart/Initialize(mapload)
. = ..()
create_reagents(50, NO_REACT, NO_REAGENTS_VALUE)
@@ -32,13 +32,13 @@
/obj/item/projectile/bullet/dart/piercing
piercing = TRUE
-/obj/item/projectile/bullet/dart/metalfoam/Initialize()
+/obj/item/projectile/bullet/dart/metalfoam/Initialize(mapload)
. = ..()
reagents.add_reagent(/datum/reagent/aluminium, 15)
reagents.add_reagent(/datum/reagent/foaming_agent, 5)
reagents.add_reagent(/datum/reagent/toxin/acid, 5)
-/obj/item/projectile/bullet/dart/catranq/Initialize()
+/obj/item/projectile/bullet/dart/catranq/Initialize(mapload)
. = ..()
reagents.add_reagent(/datum/reagent/fermi/furranium, 5) // Turns out I don't even need to give this guy actual tranquilizer chems.
diff --git a/code/modules/projectiles/projectile/bullets/ferromagnetic.dm b/code/modules/projectiles/projectile/bullets/ferromagnetic.dm
index 03482e2a9d..1ba6ba7b79 100644
--- a/code/modules/projectiles/projectile/bullets/ferromagnetic.dm
+++ b/code/modules/projectiles/projectile/bullets/ferromagnetic.dm
@@ -28,7 +28,7 @@
damage = 10
armour_penetration = 20
stamina = 10
- movement_type = FLYING | UNSTOPPABLE
+ movement_type = FLYING | PHASING
range = 6
fired_light_range = 1
fired_light_color = LIGHT_COLOR_RED
@@ -37,7 +37,7 @@
icon_state = "magjectile-large"
damage = 10
armour_penetration = 20
- movement_type = FLYING | UNSTOPPABLE
+ movement_type = FLYING | PHASING
range = 20
pixels_per_second = TILES_TO_PIXELS(12.5)
fired_light_range = 4
diff --git a/code/modules/projectiles/projectile/bullets/shotgun.dm b/code/modules/projectiles/projectile/bullets/shotgun.dm
index 9670907ec3..cdee721509 100644
--- a/code/modules/projectiles/projectile/bullets/shotgun.dm
+++ b/code/modules/projectiles/projectile/bullets/shotgun.dm
@@ -71,7 +71,7 @@
var/atom/throw_target = get_edge_target_turf(M, get_dir(src, get_step_away(M, src)))
M.safe_throw_at(throw_target, 3, 2)
-/obj/item/projectile/bullet/shotgun_meteorslug/Initialize()
+/obj/item/projectile/bullet/shotgun_meteorslug/Initialize(mapload)
. = ..()
SpinAnimation()
@@ -118,7 +118,7 @@
wound_bonus = 0
bare_wound_bonus = 7.5
-/obj/item/projectile/bullet/pellet/shotgun_improvised/Initialize()
+/obj/item/projectile/bullet/pellet/shotgun_improvised/Initialize(mapload)
. = ..()
range = rand(1, 8)
diff --git a/code/modules/projectiles/projectile/bullets/sniper.dm b/code/modules/projectiles/projectile/bullets/sniper.dm
index f69b62a149..abf4537de2 100644
--- a/code/modules/projectiles/projectile/bullets/sniper.dm
+++ b/code/modules/projectiles/projectile/bullets/sniper.dm
@@ -13,7 +13,7 @@
/obj/item/projectile/bullet/p50/on_hit(atom/target, blocked = 0)
if(isobj(target) && (blocked != 100) && breakthings)
var/obj/O = target
- O.take_damage(80, BRUTE, "bullet", FALSE)
+ O.take_damage(80, BRUTE, BULLET, FALSE)
return ..()
/obj/item/projectile/bullet/p50/soporific
@@ -35,7 +35,8 @@
icon_state = "gauss"
name = "penetrator round"
damage = 60
- movement_type = FLYING | UNSTOPPABLE
+ projectile_piercing = PASSMOB
+ projectile_phasing = (ALL & (~PASSMOB))
dismemberment = 0 //It goes through you cleanly.
knockdown = 0
breakthings = FALSE
diff --git a/code/modules/projectiles/projectile/bullets/special.dm b/code/modules/projectiles/projectile/bullets/special.dm
index a0414d8a9c..7fd73e18b9 100644
--- a/code/modules/projectiles/projectile/bullets/special.dm
+++ b/code/modules/projectiles/projectile/bullets/special.dm
@@ -3,7 +3,8 @@
/obj/item/projectile/bullet/honker
damage = 0
knockdown = 60
- movement_type = FLYING | UNSTOPPABLE
+ movement_type = FLYING
+ projectile_piercing = ALL
nodamage = TRUE
candink = FALSE
hitsound = 'sound/items/bikehorn.ogg'
@@ -11,7 +12,7 @@
icon_state = "banana"
range = 200
-/obj/item/projectile/bullet/honker/Initialize()
+/obj/item/projectile/bullet/honker/Initialize(mapload)
. = ..()
SpinAnimation()
diff --git a/code/modules/projectiles/projectile/energy/_energy.dm b/code/modules/projectiles/projectile/energy/_energy.dm
index ec80ae1e74..9a803af46c 100644
--- a/code/modules/projectiles/projectile/energy/_energy.dm
+++ b/code/modules/projectiles/projectile/energy/_energy.dm
@@ -3,6 +3,6 @@
icon_state = "spark"
damage = 0
damage_type = BURN
- flag = "energy"
+ flag = ENERGY
is_reflectable = TRUE
diff --git a/code/modules/projectiles/projectile/energy/net_snare.dm b/code/modules/projectiles/projectile/energy/net_snare.dm
index 22eaadb1e0..7ecf48cf6a 100644
--- a/code/modules/projectiles/projectile/energy/net_snare.dm
+++ b/code/modules/projectiles/projectile/energy/net_snare.dm
@@ -6,7 +6,7 @@
hitsound = 'sound/weapons/taserhit.ogg'
range = 10
-/obj/item/projectile/energy/net/Initialize()
+/obj/item/projectile/energy/net/Initialize(mapload)
. = ..()
SpinAnimation()
@@ -29,7 +29,7 @@
light_range = 3
anchored = TRUE
-/obj/effect/nettingportal/Initialize()
+/obj/effect/nettingportal/Initialize(mapload)
. = ..()
var/obj/item/beacon/teletarget = null
for(var/obj/machinery/computer/teleporter/com in GLOB.machines)
diff --git a/code/modules/projectiles/projectile/energy/nuclear_particle.dm b/code/modules/projectiles/projectile/energy/nuclear_particle.dm
index 6cbe258560..77f013ebba 100644
--- a/code/modules/projectiles/projectile/energy/nuclear_particle.dm
+++ b/code/modules/projectiles/projectile/energy/nuclear_particle.dm
@@ -17,7 +17,7 @@
"purple" = "#FF00FF"
)
-/obj/item/projectile/energy/nuclear_particle/Initialize()
+/obj/item/projectile/energy/nuclear_particle/Initialize(mapload)
. = ..()
//Random color time!
var/our_color = pick(particle_colors)
diff --git a/code/modules/projectiles/projectile/energy/tesla.dm b/code/modules/projectiles/projectile/energy/tesla.dm
index 1afbdeae25..d88e217722 100644
--- a/code/modules/projectiles/projectile/energy/tesla.dm
+++ b/code/modules/projectiles/projectile/energy/tesla.dm
@@ -28,3 +28,7 @@
/obj/item/projectile/energy/tesla/cannon
name = "tesla orb"
power = 20000
+
+/obj/item/projectile/energy/tesla/sphere
+ name = "tesla sphere"
+ power = 100000
diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm
index 76cd1a6bc5..9761881067 100644
--- a/code/modules/projectiles/projectile/magic.dm
+++ b/code/modules/projectiles/projectile/magic.dm
@@ -5,7 +5,7 @@
damage_type = OXY
nodamage = 1
armour_penetration = 100
- flag = "magic"
+ flag = MAGIC
/obj/item/projectile/magic/death
name = "bolt of death"
@@ -302,7 +302,7 @@
icon_state = "lavastaff"
damage = 15
damage_type = BURN
- flag = "magic"
+ flag = MAGIC
dismemberment = 50
nodamage = 0
@@ -322,7 +322,7 @@
damage_type = BURN
nodamage = 0
armour_penetration = 0
- flag = "magic"
+ flag = MAGIC
hitsound = 'sound/weapons/barragespellhit.ogg'
/obj/item/projectile/magic/arcane_barrage/on_hit(target)
@@ -339,23 +339,22 @@
name = "locker bolt"
icon_state = "locker"
nodamage = TRUE
- flag = "magic"
+ flag = MAGIC
var/weld = TRUE
var/created = FALSE //prevents creation of more then one locker if it has multiple hits
var/locker_suck = TRUE
-/obj/item/projectile/magic/locker/prehit(atom/A)
+/obj/item/projectile/magic/locker/prehit_pierce(atom/A)
+ . = ..()
if(ismob(A) && locker_suck)
var/mob/M = A
- if(M.anti_magic_check())
+ if(M.anti_magic_check()) // no this doesn't check if ..() returned to phase through do I care no it's magic ain't gotta explain shit - Silly-Cons
M.visible_message("[src] vanishes on contact with [A]!")
- qdel(src)
- return
+ return PROJECTILE_DELETE_WITHOUT_HITTING
if(M.anchored)
- return ..()
+ return
M.forceMove(src)
- return FALSE
- return ..()
+ return PROJECTILE_PIERCE_PHASE
/obj/item/projectile/magic/locker/on_hit(target)
if(created)
@@ -382,7 +381,7 @@
var/weakened_icon = "decursed"
var/auto_destroy = TRUE
-/obj/structure/closet/decay/Initialize()
+/obj/structure/closet/decay/Initialize(mapload)
. = ..()
if(auto_destroy)
addtimer(CALLBACK(src, .proc/bust_open), 5 MINUTES)
@@ -437,7 +436,7 @@
damage_type = BURN
nodamage = 0
pixels_per_second = TILES_TO_PIXELS(33.33)
- flag = "magic"
+ flag = MAGIC
var/zap_power = 20000
var/zap_range = 15
diff --git a/code/modules/projectiles/projectile/magic/spellcard.dm b/code/modules/projectiles/projectile/magic/spellcard.dm
index 5015a97e78..efd3373dd9 100644
--- a/code/modules/projectiles/projectile/magic/spellcard.dm
+++ b/code/modules/projectiles/projectile/magic/spellcard.dm
@@ -12,7 +12,7 @@
icon_state = "spellcard"
damage_type = BURN
damage = 12
- flag = "magic"
+ flag = MAGIC
/obj/item/projectile/magic/spellcard/book/spark
damage = 4
@@ -25,7 +25,7 @@
if(M.anti_magic_check())
M.visible_message("[src] vanishes on contact with [target]!")
return BULLET_ACT_BLOCK
-
+
if(iscarbon(target))
M.adjust_fire_stacks(fire_stacks)
M.IgniteMob()
diff --git a/code/modules/projectiles/projectile/plasma.dm b/code/modules/projectiles/projectile/plasma.dm
index 474a3d95c7..649de58742 100644
--- a/code/modules/projectiles/projectile/plasma.dm
+++ b/code/modules/projectiles/projectile/plasma.dm
@@ -1,7 +1,7 @@
/obj/item/projectile/energy/plasmabolt
name = "plasma bolt"
icon_state = "plasma"
- flag = "energy"
+ flag = ENERGY
damage_type = BURN
hitsound = 'sound/weapons/sear.ogg'
hitsound_wall = 'sound/weapons/effects/searwall.ogg'
diff --git a/code/modules/projectiles/projectile/special/curse.dm b/code/modules/projectiles/projectile/special/curse.dm
index 6c682763ae..89b1ecba4c 100644
--- a/code/modules/projectiles/projectile/special/curse.dm
+++ b/code/modules/projectiles/projectile/special/curse.dm
@@ -12,7 +12,6 @@
knockdown = 20
pixels_per_second = TILES_TO_PIXELS(5)
range = 16
- movement_type = FLYING | UNSTOPPABLE
var/datum/beam/arm
var/handedness = 0
@@ -29,18 +28,14 @@
arm = starting.Beam(src, icon_state = "curse[handedness]", time = INFINITY, maxdistance = INFINITY, beam_type=/obj/effect/ebeam/curse_arm)
..()
-/obj/item/projectile/curse_hand/prehit(atom/target)
- if(target == original)
- movement_type &= ~(UNSTOPPABLE)
- else if(!isturf(target))
- return FALSE
- return ..()
+/obj/item/projectile/curse_hand/prehit_pierce(atom/target)
+ return (target == original)? PROJECTILE_PIERCE_NONE : PROJECTILE_PIERCE_PHASE
/obj/item/projectile/curse_hand/Destroy()
if(arm)
arm.End()
arm = null
- if((movement_type & UNSTOPPABLE))
+ if((movement_type & PHASING))
playsound(src, 'sound/effects/curse3.ogg', 25, 1, -1)
var/turf/T = get_step(src, dir)
var/obj/effect/temp_visual/dir_setting/curse/hand/leftover = new(T, dir)
diff --git a/code/modules/projectiles/projectile/special/floral.dm b/code/modules/projectiles/projectile/special/floral.dm
index b855322f09..9eb6131cbe 100644
--- a/code/modules/projectiles/projectile/special/floral.dm
+++ b/code/modules/projectiles/projectile/special/floral.dm
@@ -4,7 +4,7 @@
damage = 0
damage_type = TRUE
nodamage = 1
- flag = "energy"
+ flag = ENERGY
/obj/item/projectile/energy/floramut/on_hit(atom/target, blocked = FALSE)
. = ..()
@@ -22,7 +22,7 @@
damage = 0
damage_type = TOX
nodamage = TRUE
- flag = "energy"
+ flag = ENERGY
/obj/item/projectile/energy/florarevolution
name = "gamma somatorary"
@@ -30,4 +30,4 @@
damage = 0
damage_type = TOX
nodamage = TRUE
- flag = "energy"
+ flag = ENERGY
diff --git a/code/modules/projectiles/projectile/special/ion.dm b/code/modules/projectiles/projectile/special/ion.dm
index 41331f6738..835c148986 100644
--- a/code/modules/projectiles/projectile/special/ion.dm
+++ b/code/modules/projectiles/projectile/special/ion.dm
@@ -4,7 +4,7 @@
damage = 0
damage_type = BURN
nodamage = TRUE
- flag = "energy"
+ flag = ENERGY
impact_effect_type = /obj/effect/temp_visual/impact_effect/ion
var/emp_radius = 1
diff --git a/code/modules/projectiles/projectile/special/meteor.dm b/code/modules/projectiles/projectile/special/meteor.dm
index ec54e8dd1e..569d4ea754 100644
--- a/code/modules/projectiles/projectile/special/meteor.dm
+++ b/code/modules/projectiles/projectile/special/meteor.dm
@@ -5,7 +5,7 @@
damage = 0
damage_type = BRUTE
nodamage = 1
- flag = "bullet"
+ flag = BULLET
/obj/item/projectile/meteor/Bump(atom/A)
if(A == firer)
diff --git a/code/modules/projectiles/projectile/special/plasma.dm b/code/modules/projectiles/projectile/special/plasma.dm
index 77509cb574..050d6a4364 100644
--- a/code/modules/projectiles/projectile/special/plasma.dm
+++ b/code/modules/projectiles/projectile/special/plasma.dm
@@ -13,7 +13,7 @@
muzzle_type = /obj/effect/projectile/muzzle/plasma_cutter
impact_type = /obj/effect/projectile/impact/plasma_cutter
-/obj/item/projectile/plasma/Initialize()
+/obj/item/projectile/plasma/Initialize(mapload)
. = ..()
if(!lavaland_equipment_pressure_check(get_turf(src)))
name = "weakened [name]"
diff --git a/code/modules/projectiles/projectile/special/rocket.dm b/code/modules/projectiles/projectile/special/rocket.dm
index b3737a8388..87fa7557da 100644
--- a/code/modules/projectiles/projectile/special/rocket.dm
+++ b/code/modules/projectiles/projectile/special/rocket.dm
@@ -23,7 +23,7 @@
explosion(target, -1, 1, 3, 1, 0, flame_range = 4)
if(ismecha(target))
- var/obj/mecha/M = target
+ var/obj/vehicle/sealed/mecha/M = target
M.take_damage(anti_armour_damage)
if(issilicon(target))
var/mob/living/silicon/S = target
@@ -53,7 +53,7 @@
ricochets_max = 0 //it's a MISSILE
var/sturdy = list(
/turf/closed,
- /obj/mecha,
+ /obj/vehicle/sealed/mecha,
/obj/machinery/door/,
/obj/machinery/door/poddoor/shutters
)
diff --git a/code/modules/projectiles/projectile/special/temperature.dm b/code/modules/projectiles/projectile/special/temperature.dm
index ec23af6748..4bd4191fa5 100644
--- a/code/modules/projectiles/projectile/special/temperature.dm
+++ b/code/modules/projectiles/projectile/special/temperature.dm
@@ -12,7 +12,7 @@
ricochet_chance = 80
is_reflectable = TRUE
light_color = LIGHT_COLOR_BLUE
- flag = "energy"
+ flag = ENERGY
var/temperature = 100
/obj/item/projectile/temp/on_hit(atom/target, blocked = 0)
diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
index 6aec48182a..2e8f301e13 100644
--- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
@@ -92,7 +92,7 @@
var/list/saved_recipes = list()
-/obj/machinery/chem_dispenser/Initialize()
+/obj/machinery/chem_dispenser/Initialize(mapload)
. = ..()
dispensable_reagents = sortList(dispensable_reagents, /proc/cmp_reagents_asc)
if(emagged_reagents)
@@ -534,7 +534,7 @@
return "purple"
-/obj/machinery/chem_dispenser/drinks/Initialize()
+/obj/machinery/chem_dispenser/drinks/Initialize(mapload)
. = ..()
AddComponent(/datum/component/simple_rotation, ROTATION_ALTCLICK | ROTATION_CLOCKWISE)
@@ -629,7 +629,7 @@
obj_flags = CAN_BE_HIT | EMAGGED
flags_1 = NODECONSTRUCT_1
-/obj/machinery/chem_dispenser/drinks/fullupgrade/Initialize()
+/obj/machinery/chem_dispenser/drinks/fullupgrade/Initialize(mapload)
. = ..()
dispensable_reagents |= emagged_reagents //adds emagged reagents
component_parts = list()
@@ -689,7 +689,7 @@
obj_flags = CAN_BE_HIT | EMAGGED
flags_1 = NODECONSTRUCT_1
-/obj/machinery/chem_dispenser/drinks/beer/fullupgrade/Initialize()
+/obj/machinery/chem_dispenser/drinks/beer/fullupgrade/Initialize(mapload)
. = ..()
dispensable_reagents |= emagged_reagents //adds emagged reagents
component_parts = list()
@@ -736,7 +736,7 @@
upgrade_reagents2 = null
upgrade_reagents3 = null
-/obj/machinery/chem_dispenser/mutagensaltpeter/Initialize()
+/obj/machinery/chem_dispenser/mutagensaltpeter/Initialize(mapload)
. = ..()
component_parts = list()
component_parts += new /obj/item/circuitboard/machine/chem_dispenser(null)
@@ -753,7 +753,7 @@
obj_flags = CAN_BE_HIT | EMAGGED
flags_1 = NODECONSTRUCT_1
-/obj/machinery/chem_dispenser/fullupgrade/Initialize()
+/obj/machinery/chem_dispenser/fullupgrade/Initialize(mapload)
. = ..()
dispensable_reagents |= emagged_reagents //adds emagged reagents
component_parts = list()
@@ -818,7 +818,7 @@
/datum/reagent/medicine/morphine
)
-/obj/machinery/chem_dispenser/abductor/Initialize()
+/obj/machinery/chem_dispenser/abductor/Initialize(mapload)
. = ..()
component_parts = list()
component_parts += new /obj/item/circuitboard/machine/chem_dispenser(null)
diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm
index 128c4ed3cb..0e53b0796b 100644
--- a/code/modules/reagents/chemistry/machinery/chem_master.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_master.dm
@@ -22,7 +22,7 @@
var/list/pillStyles
var/fermianalyze //Give more detail on fermireactions on analysis
-/obj/machinery/chem_master/Initialize()
+/obj/machinery/chem_master/Initialize(mapload)
create_reagents(100)
//Calculate the span tags and ids fo all the available pill icons
diff --git a/code/modules/reagents/chemistry/machinery/pandemic.dm b/code/modules/reagents/chemistry/machinery/pandemic.dm
index d4d8ae47fe..4729443d7a 100644
--- a/code/modules/reagents/chemistry/machinery/pandemic.dm
+++ b/code/modules/reagents/chemistry/machinery/pandemic.dm
@@ -16,7 +16,7 @@
var/datum/symptom/selected_symptom
var/obj/item/reagent_containers/beaker
-/obj/machinery/computer/pandemic/Initialize()
+/obj/machinery/computer/pandemic/Initialize(mapload)
. = ..()
update_icon()
diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm
index 65cc97f586..b3c4cc8908 100644
--- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm
+++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm
@@ -25,13 +25,13 @@
var/static/radial_juice = image(icon = 'icons/mob/radial.dmi', icon_state = "radial_juice")
var/static/radial_mix = image(icon = 'icons/mob/radial.dmi', icon_state = "radial_mix")
-/obj/machinery/reagentgrinder/Initialize()
+/obj/machinery/reagentgrinder/Initialize(mapload)
. = ..()
holdingitems = list()
beaker = new /obj/item/reagent_containers/glass/beaker/large(src)
beaker.desc += " May contain blended dust. Don't breathe this in!"
-/obj/machinery/reagentgrinder/constructed/Initialize()
+/obj/machinery/reagentgrinder/constructed/Initialize(mapload)
. = ..()
holdingitems = list()
QDEL_NULL(beaker)
diff --git a/code/modules/reagents/chemistry/machinery/smoke_machine.dm b/code/modules/reagents/chemistry/machinery/smoke_machine.dm
index 80b8011af0..e601e9f551 100644
--- a/code/modules/reagents/chemistry/machinery/smoke_machine.dm
+++ b/code/modules/reagents/chemistry/machinery/smoke_machine.dm
@@ -29,7 +29,7 @@
opaque = FALSE
alpha = 100
-/obj/machinery/smoke_machine/Initialize()
+/obj/machinery/smoke_machine/Initialize(mapload)
. = ..()
create_reagents(REAGENTS_BASE_VOLUME)
for(var/obj/item/stock_parts/matter_bin/B in component_parts)
diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm
index 8d009ffb2e..0bb847a573 100644
--- a/code/modules/reagents/chemistry/reagents.dm
+++ b/code/modules/reagents/chemistry/reagents.dm
@@ -273,6 +273,7 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent())
G.color = color
G.breath_reagent = src.type
G.group = GAS_GROUP_CHEMICALS
+ G.moles_visible = MOLES_GAS_VISIBLE
return G
/datum/reagent/proc/create_gas()
diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm
index 85836ffdf3..71339567d2 100644
--- a/code/modules/reagents/chemistry/reagents/food_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm
@@ -381,6 +381,13 @@
return
if(M.has_bane(BANE_SALT))
M.mind.disrupt_spells(-200)
+ if(HAS_TRAIT(M, TRAIT_SALT_SENSITIVE)) // haha snails go brrr
+ M.adjustFireLoss(2)
+ M.emote("scream")
+
+/datum/reagent/consumable/sodiumchloride/on_mob_life(mob/living/M)
+ if(HAS_TRAIT(M, TRAIT_SALT_SENSITIVE))
+ M.adjustFireLoss(1) // equal to a standard toxin
/datum/reagent/consumable/sodiumchloride/reaction_turf(turf/T, reac_volume) //Creates an umbra-blocking salt pile
if(!istype(T))
diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
index 4d1ded3913..0a78af67b2 100644
--- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
@@ -1359,7 +1359,7 @@
/datum/reagent/medicine/neo_jelly
name = "Neo Jelly"
- description = "Gradually regenerates all types of damage, without harming slime anatomy.Can OD"
+ description = "Gradually regenerates all types of damage, without harming slime anatomy. Can overdose."
reagent_state = LIQUID
metabolization_rate = 1 * REAGENTS_METABOLISM
color = "#91D865"
@@ -1797,3 +1797,50 @@
else
M.adjustToxLoss(0.5*REAGENTS_EFFECT_MULTIPLIER)
. = 1
+
+/datum/reagent/medicine/limb_regrowth
+ name = "Carcinisoprojection Jelly"
+ description = "Also known as \"limb regrowth jelly\", this crabby looking xenobiological jelly will rapidly regrow any missing limbs someone has at the cost of some of their blood. Do not overdose."
+ taste_description = "salty slime"
+ color = "#EF5428" //like cooked crab!
+ reagent_state = LIQUID
+ overdose_threshold = 65 //it takes more than one bluespace syringe to overdose someone with this given how nasty the OD is.
+ value = REAGENT_VALUE_RARE
+
+/datum/reagent/medicine/limb_regrowth/reaction_mob(mob/living/carbon/C, method=TOUCH, reac_volume)
+ . = ..()
+ if(!.)
+ return
+ if(method == TOUCH) //as funny as it would be to have this hurled at someone, nah.
+ return
+ var/vol = reac_volume + C.reagents.get_reagent_amount(/datum/reagent/medicine/limb_regrowth)
+ if(vol < 5) //need at least 5 units.
+ return
+ var/list/limbs_to_heal = C.get_missing_limbs(exclude_head = TRUE)
+ if(limbs_to_heal.len < 1) //nothing happens if they already got all limbs.
+ return
+ if(HAS_TRAIT(C, TRAIT_ROBOTIC_ORGANISM)) //sorry synths, consider a visit to the roboticist. dunno how to justify regrowing robolimbs.
+ return
+ else if(ishuman(C) && !(HAS_BONE in C.dna?.species?.species_traits)) //boneless have little trouble with the limb chemical.
+ C.visible_message("[C] suddenly regrows \his limbs!",
+ "You suddenly regrow your limbs, sensation and all!")
+ else //boneful beings get to scream.
+ C.visible_message("[C]'s body lets off a grotesque squelching, bone crunching sound as \his limbs grow back rapidly!",
+ "Your body emits a grotesque squelching, bone crunching sound as your limbs grow back rapidly! \
+ With the sensation of your regained limbs, also comes pain!",
+ "You hear a grotsque squelching noise and the sound of crunching bones.")
+ playsound(C, 'sound/magic/demon_consume.ogg', 50, 1)
+ SEND_SIGNAL(C, COMSIG_ADD_MOOD_EVENT, "painful_limb_regrowth", /datum/mood_event/painful_limb_regrowth)
+ C.emote("scream")
+ C.regenerate_limbs(excluded_limbs = list(BODY_ZONE_HEAD)) //would be a little funky for dullahans if they suddenly sprouted a head.
+ C.blood_volume = max(C.blood_volume - 30*limbs_to_heal.len,0)
+ //lose blood for each limb that was regained.
+ //10 units less expensive than slime limb regrowth, but doesn't check for low blood like the ability, so it could be dangerous.
+ to_chat(C,"You feel like this ordeal of your limbs regrowing has made you a little paler... as well as made you feel a little thirsty.")
+ //hint at the blood loss. (paler is a common symptom depicted in-game of low blood, but dehydration is another symptom of low blood.)
+
+
+/datum/reagent/medicine/limb_regrowth/overdose_start(mob/living/M)
+ M.ForceContractDisease(new /datum/disease/crabcancer, FALSE, TRUE) //it is now, time for crab.
+ ..()
+ . = 1
diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm
index ec628255fa..abe3aef82d 100644
--- a/code/modules/reagents/chemistry/reagents/other_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm
@@ -1483,6 +1483,7 @@
description = "A caustic substance commonly used in fertilizer or household cleaners."
reagent_state = GAS
gas = GAS_AMMONIA
+ boiling_point = 239.81
color = "#404030" // rgb: 64, 64, 48
taste_description = "mordant"
pH = 11.6
@@ -1496,6 +1497,13 @@
myseed.adjust_yield(1)
myseed.adjust_instability(1)
+/datum/reagent/ammonia/reaction_mob(mob/living/M, method=TOUCH, reac_volume, touch_protection)
+ if(method == VAPOR)
+ M.adjustOrganLoss(ORGAN_SLOT_LUNGS, ((100-touch_protection)/100)*reac_volume*REAGENTS_EFFECT_MULTIPLIER * 0.25)
+ if(prob(reac_volume))
+ to_chat(M, "Your lungs hurt!")
+ return ..()
+
/datum/reagent/diethylamine
name = "Diethylamine"
description = "A secondary amine, mildly corrosive."
@@ -1806,6 +1814,10 @@
boiling_point = 332
pH = 7.8
+/datum/reagent/bromine/on_mob_life(mob/living/carbon/C)
+ C.adjustOrganLoss(ORGAN_SLOT_BRAIN, 0.2, 99)
+ ..()
+
/datum/reagent/phenol
name = "Phenol"
description = "An aromatic ring of carbon with a hydroxyl group. A useful precursor to some medicines, but has no healing properties on its own."
diff --git a/code/modules/reagents/chemistry/recipes/medicine.dm b/code/modules/reagents/chemistry/recipes/medicine.dm
index 918ccf01e5..74c7d0d3c6 100644
--- a/code/modules/reagents/chemistry/recipes/medicine.dm
+++ b/code/modules/reagents/chemistry/recipes/medicine.dm
@@ -371,3 +371,9 @@
id = /datum/reagent/medicine/system_cleaner
results = list(/datum/reagent/medicine/system_cleaner = 4)
required_reagents = list(/datum/reagent/iron = 2, /datum/reagent/oil = 2, /datum/reagent/medicine/calomel = 2, /datum/reagent/acetone = 2)
+
+/datum/chemical_reaction/limb_regrowth
+ name = "Carcinisoprojection Jelly"
+ id = /datum/reagent/medicine/limb_regrowth
+ results = list(/datum/reagent/medicine/limb_regrowth = 2)
+ required_reagents = list(/datum/reagent/blood = 1, /datum/reagent/slime_toxin = 1)
diff --git a/code/modules/reagents/chemistry/recipes/special.dm b/code/modules/reagents/chemistry/recipes/special.dm
index 4aab8e4046..58dd37133a 100644
--- a/code/modules/reagents/chemistry/recipes/special.dm
+++ b/code/modules/reagents/chemistry/recipes/special.dm
@@ -177,7 +177,7 @@ GLOBAL_LIST_INIT(food_reagents, build_reagents_to_food()) //reagentid = related
return list()
. = ..()
-/obj/item/paper/secretrecipe/Initialize()
+/obj/item/paper/secretrecipe/Initialize(mapload)
. = ..()
if(SSpersistence.initialized)
UpdateInfo()
diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm
index acfda85963..c6df9ebb0c 100644
--- a/code/modules/reagents/reagent_containers/blood_pack.dm
+++ b/code/modules/reagents/reagent_containers/blood_pack.dm
@@ -10,7 +10,7 @@
var/color_to_apply = "#FFFFFF"
var/mutable_appearance/fill_overlay
-/obj/item/reagent_containers/blood/Initialize()
+/obj/item/reagent_containers/blood/Initialize(mapload)
. = ..()
if(blood_type != null)
reagents.add_reagent(/datum/reagent/blood, 200, list("donor"=null,"viruses"=null,"blood_DNA"=null,"bloodcolor"=bloodtype_to_color(blood_type), "blood_type"=blood_type,"resistances"=null,"trace_chem"=null))
@@ -43,7 +43,7 @@
/obj/item/reagent_containers/blood/random
icon_state = "random_bloodpack"
-/obj/item/reagent_containers/blood/random/Initialize()
+/obj/item/reagent_containers/blood/random/Initialize(mapload)
icon_state = "bloodpack"
blood_type = pick("A+", "A-", "B+", "B-", "O+", "O-", "L", "SY", "HF", "GEL", "BUG")
return ..()
diff --git a/code/modules/reagents/reagent_containers/borghypo.dm b/code/modules/reagents/reagent_containers/borghypo.dm
index 3388018280..0b3e5bcf75 100644
--- a/code/modules/reagents/reagent_containers/borghypo.dm
+++ b/code/modules/reagents/reagent_containers/borghypo.dm
@@ -34,7 +34,7 @@ Borg Hypospray
//Used as list for input() in shakers.
var/list/reagent_names = list()
-/obj/item/reagent_containers/borghypo/Initialize()
+/obj/item/reagent_containers/borghypo/Initialize(mapload)
. = ..()
for(var/R in reagent_ids)
diff --git a/code/modules/reagents/reagent_containers/bottle.dm b/code/modules/reagents/reagent_containers/bottle.dm
index be8c7fac36..47f5c94e09 100644
--- a/code/modules/reagents/reagent_containers/bottle.dm
+++ b/code/modules/reagents/reagent_containers/bottle.dm
@@ -8,7 +8,7 @@
possible_transfer_amounts = list(5,10,15,25,30)
volume = 30
-/obj/item/reagent_containers/glass/bottle/Initialize()
+/obj/item/reagent_containers/glass/bottle/Initialize(mapload)
. = ..()
if(!icon_state)
icon_state = "bottle"
@@ -159,7 +159,7 @@
icon = 'icons/obj/chemical.dmi'
var/extra_reagent = null
-/obj/item/reagent_containers/glass/bottle/traitor/Initialize()
+/obj/item/reagent_containers/glass/bottle/traitor/Initialize(mapload)
. = ..()
extra_reagent = pick(/datum/reagent/toxin/polonium, /datum/reagent/toxin/histamine, /datum/reagent/toxin/formaldehyde,
/datum/reagent/toxin/venom, /datum/reagent/toxin/fentanyl, /datum/reagent/toxin/cyanide)
diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm
index cc7ff43bab..bec2f22590 100644
--- a/code/modules/reagents/reagent_containers/glass.dm
+++ b/code/modules/reagents/reagent_containers/glass.dm
@@ -128,7 +128,7 @@
possible_transfer_amounts = list(5,10,15,20,25,30,50,60)
container_flags = PH_WEAK|APTFT_ALTCLICK|APTFT_VERB
-/obj/item/reagent_containers/glass/beaker/Initialize()
+/obj/item/reagent_containers/glass/beaker/Initialize(mapload)
. = ..()
update_icon()
@@ -298,7 +298,7 @@
flags_inv = HIDEHAIR
slot_flags = ITEM_SLOT_HEAD
resistance_flags = NONE
- armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 75, "acid" = 50) //Weak melee protection, because you can wear it on your head
+ armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 75, ACID = 50) //Weak melee protection, because you can wear it on your head
slot_equipment_priority = list( \
ITEM_SLOT_BACK, ITEM_SLOT_ID,\
ITEM_SLOT_ICLOTHING, ITEM_SLOT_OCLOTHING,\
diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm
index a6b6640ead..75c9f3c117 100644
--- a/code/modules/reagents/reagent_containers/hypospray.dm
+++ b/code/modules/reagents/reagent_containers/hypospray.dm
@@ -370,7 +370,7 @@
quickload = TRUE
penetrates = TRUE
-/obj/item/hypospray/mkii/Initialize()
+/obj/item/hypospray/mkii/Initialize(mapload)
. = ..()
if(!spawnwithvial)
update_icon()
diff --git a/code/modules/reagents/reagent_containers/hypovial.dm b/code/modules/reagents/reagent_containers/hypovial.dm
index 8d99248d97..43f9f88976 100644
--- a/code/modules/reagents/reagent_containers/hypovial.dm
+++ b/code/modules/reagents/reagent_containers/hypovial.dm
@@ -21,7 +21,7 @@
always_reskinnable = TRUE
cached_icon = "hypovial"
-/obj/item/reagent_containers/glass/bottle/vial/Initialize()
+/obj/item/reagent_containers/glass/bottle/vial/Initialize(mapload)
. = ..()
update_icon()
@@ -103,6 +103,11 @@
icon_state = "hypovial-pink"
list_reagents = list(/datum/reagent/fermi/PEsmaller_hypo = 30)
+/obj/item/reagent_containers/glass/bottle/vial/small/buttreduction
+ name = "pink hypovial (butt treatment)"
+ icon_state = "hypovial-pink"
+ list_reagents = list(/datum/reagent/fermi/AEsmaller_hypo = 30)
+
/obj/item/reagent_containers/glass/bottle/vial/large/CMO
name = "deluxe hypovial"
icon_state = "hypoviallarge-cmos"
diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm
index a5b4e5b8ab..50db4f0610 100644
--- a/code/modules/reagents/reagent_containers/pill.dm
+++ b/code/modules/reagents/reagent_containers/pill.dm
@@ -15,7 +15,7 @@
var/self_delay = FALSE //pills are instant, this is because patches inheret their aplication from pills
var/dissolvable = TRUE
-/obj/item/reagent_containers/pill/Initialize()
+/obj/item/reagent_containers/pill/Initialize(mapload)
. = ..()
if(!icon_state)
icon_state = "pill[rand(1,20)]"
@@ -248,7 +248,7 @@
var/static/list/descs = list("Your feeling is telling you no, but...","Drugs are expensive, you can't afford not to eat any pills that you find."\
, "Surely, there's no way this could go bad.")
-/obj/item/reagent_containers/pill/floorpill/Initialize()
+/obj/item/reagent_containers/pill/floorpill/Initialize(mapload)
list_reagents = list(get_random_reagent_id() = rand(10,50))
. = ..()
name = pick(names)
@@ -265,3 +265,7 @@
/obj/item/reagent_containers/pill/breast_enlargement
name = "breast enlargement pill"
list_reagents = list(/datum/reagent/fermi/breast_enlarger = 10)
+
+/obj/item/reagent_containers/pill/butt_enlargement
+ name = "butt enlargement pill"
+ list_reagents = list(/datum/reagent/fermi/butt_enlarger = 10)
diff --git a/code/modules/reagents/reagent_containers/rags.dm b/code/modules/reagents/reagent_containers/rags.dm
index 78cb9d43ea..1bd9c16000 100644
--- a/code/modules/reagents/reagent_containers/rags.dm
+++ b/code/modules/reagents/reagent_containers/rags.dm
@@ -134,7 +134,7 @@
var/folded_icon = "towel"
var/list/possible_colors
-/obj/item/reagent_containers/rag/towel/Initialize()
+/obj/item/reagent_containers/rag/towel/Initialize(mapload)
. = ..()
if(possible_colors)
add_atom_colour(pick(possible_colors), FIXED_COLOUR_PRIORITY)
@@ -192,4 +192,4 @@
extinguish_efficiency = 5
action_speed = 15
damp_threshold = 0.8
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 20, "bio" = 20, "rad" = 20, "fire" = 50, "acid" = 50) //items don't provide armor to wearers unlike clothing yet.
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 20, BIO = 20, RAD = 20, FIRE = 50, ACID = 50) //items don't provide armor to wearers unlike clothing yet.
diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm
index f59e45ff01..2670401964 100644
--- a/code/modules/reagents/reagent_containers/spray.dm
+++ b/code/modules/reagents/reagent_containers/spray.dm
@@ -229,7 +229,7 @@
generate_amount = 1
generate_delay = 40 //deciseconds
-/obj/item/reagent_containers/spray/waterflower/cyborg/Initialize()
+/obj/item/reagent_containers/spray/waterflower/cyborg/Initialize(mapload)
. = ..()
START_PROCESSING(SSfastprocess, src)
diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm
index c2f80de761..c1812d9121 100644
--- a/code/modules/reagents/reagent_containers/syringes.dm
+++ b/code/modules/reagents/reagent_containers/syringes.dm
@@ -18,7 +18,7 @@
custom_price = PRICE_CHEAP_AS_FREE
sharpness = SHARP_POINTY
-/obj/item/reagent_containers/syringe/Initialize()
+/obj/item/reagent_containers/syringe/Initialize(mapload)
. = ..()
if(list_reagents) //syringe starts in inject mode if its already got something inside
mode = SYRINGE_INJECT
diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm
index 8215c9d8db..8e4db6f2f2 100644
--- a/code/modules/reagents/reagent_dispenser.dm
+++ b/code/modules/reagents/reagent_dispenser.dm
@@ -13,7 +13,7 @@
/obj/structure/reagent_dispensers/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir)
. = ..()
if(. && obj_integrity > 0)
- if(tank_volume && (damage_flag == "bullet" || damage_flag == "laser"))
+ if(tank_volume && (damage_flag == BULLET || damage_flag == LASER))
boom()
/obj/structure/reagent_dispensers/attackby(obj/item/W, mob/user, params)
@@ -22,7 +22,7 @@
else
return ..()
-/obj/structure/reagent_dispensers/Initialize()
+/obj/structure/reagent_dispensers/Initialize(mapload)
create_reagents(tank_volume, DRAINABLE | AMOUNT_VISIBLE)
if(reagent_id)
reagents.add_reagent(reagent_id, tank_volume)
@@ -212,7 +212,7 @@
density = FALSE
reagent_id = /datum/reagent/consumable/condensedcapsaicin
-/obj/structure/reagent_dispensers/peppertank/Initialize()
+/obj/structure/reagent_dispensers/peppertank/Initialize(mapload)
. = ..()
if(prob(1))
desc = "IT'S PEPPER TIME, BITCH!"
diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm
index e9c17ecc28..a21b026080 100644
--- a/code/modules/recycling/conveyor2.dm
+++ b/code/modules/recycling/conveyor2.dm
@@ -321,7 +321,7 @@ GLOBAL_LIST_EMPTY(conveyors_by_id)
desc = "A conveyor control switch. It appears to only go in one direction."
oneway = TRUE
-/obj/machinery/conveyor_switch/oneway/Initialize()
+/obj/machinery/conveyor_switch/oneway/Initialize(mapload)
. = ..()
if((dir == NORTH) || (dir == WEST))
invert_icon = TRUE
@@ -334,7 +334,7 @@ GLOBAL_LIST_EMPTY(conveyors_by_id)
w_class = WEIGHT_CLASS_NORMAL
var/id = "" //inherited by the switch
-/obj/item/conveyor_switch_construct/Initialize()
+/obj/item/conveyor_switch_construct/Initialize(mapload)
. = ..()
id = "[rand()]" //this couldn't possibly go wrong
diff --git a/code/modules/recycling/disposal/bin.dm b/code/modules/recycling/disposal/bin.dm
index 85b5cdac51..8be744cd96 100644
--- a/code/modules/recycling/disposal/bin.dm
+++ b/code/modules/recycling/disposal/bin.dm
@@ -5,7 +5,7 @@
/obj/machinery/disposal
icon = 'icons/obj/atmospherics/pipes/disposal.dmi'
density = TRUE
- armor = list("melee" = 25, "bullet" = 10, "laser" = 10, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 30)
+ armor = list(MELEE = 25, BULLET = 10, LASER = 10, ENERGY = 100, BOMB = 0, BIO = 100, RAD = 100, FIRE = 90, ACID = 30)
max_integrity = 200
resistance_flags = FIRE_PROOF
interaction_flags_machine = INTERACT_MACHINE_OPEN | INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON
@@ -524,7 +524,7 @@
/obj/effect/CanEnterDisposals()
return
-/obj/mecha/CanEnterDisposals()
+/obj/vehicle/sealed/mecha/CanEnterDisposals()
return
/obj/machinery/disposal/deliveryChute/newHolderDestination(obj/structure/disposalholder/H)
diff --git a/code/modules/recycling/disposal/pipe.dm b/code/modules/recycling/disposal/pipe.dm
index f6c27f4a79..2fbea18ac2 100644
--- a/code/modules/recycling/disposal/pipe.dm
+++ b/code/modules/recycling/disposal/pipe.dm
@@ -12,7 +12,7 @@
level = 1 // underfloor only
dir = NONE // dir will contain dominant direction for junction pipes
max_integrity = 200
- armor = list("melee" = 25, "bullet" = 10, "laser" = 10, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 30)
+ armor = list(MELEE = 25, BULLET = 10, LASER = 10, ENERGY = 100, BOMB = 0, BIO = 100, RAD = 100, FIRE = 90, ACID = 30)
layer = DISPOSAL_PIPE_LAYER // slightly lower than wires and other pipes
plane = ABOVE_WALL_PLANE
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
@@ -139,7 +139,7 @@
/obj/structure/disposalpipe/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir)
- if(damage_flag == "melee" && damage_amount < 10)
+ if(damage_flag == MELEE && damage_amount < 10)
return 0
return ..()
@@ -240,7 +240,7 @@
canclank = TRUE
var/obj/linked // the linked obj/machinery/disposal or obj/disposaloutlet
-/obj/structure/disposalpipe/trunk/Initialize()
+/obj/structure/disposalpipe/trunk/Initialize(mapload)
. = ..()
getlinked()
diff --git a/code/modules/recycling/disposal/pipe_sorting.dm b/code/modules/recycling/disposal/pipe_sorting.dm
index 2d40ec64eb..1ae5698312 100644
--- a/code/modules/recycling/disposal/pipe_sorting.dm
+++ b/code/modules/recycling/disposal/pipe_sorting.dm
@@ -36,7 +36,7 @@
icon_state = "pipe-j2s"
initialize_dirs = DISP_DIR_LEFT | DISP_DIR_FLIP
-/obj/structure/disposalpipe/sorting/mail/Initialize()
+/obj/structure/disposalpipe/sorting/mail/Initialize(mapload)
. = ..()
// Generate a list of soring tags.
if(sortType)
diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm
index cfb6d92723..9c80176f46 100644
--- a/code/modules/research/designs.dm
+++ b/code/modules/research/designs.dm
@@ -79,7 +79,7 @@ other types of metals and chemistry for reagents).
var/list/blueprints = list()
var/max_blueprints = 1
-/obj/item/disk/design_disk/Initialize()
+/obj/item/disk/design_disk/Initialize(mapload)
. = ..()
pixel_x = rand(-5, 5)
pixel_y = rand(-5, 5)
diff --git a/code/modules/research/designs/autolathe_desings/autolathe_designs_construction.dm b/code/modules/research/designs/autolathe_desings/autolathe_designs_construction.dm
index f8cf5c1d84..0fdef4819e 100644
--- a/code/modules/research/designs/autolathe_desings/autolathe_designs_construction.dm
+++ b/code/modules/research/designs/autolathe_desings/autolathe_designs_construction.dm
@@ -75,6 +75,14 @@
build_path = /obj/item/wallframe/newscaster
category = list("initial", "Construction")
+/datum/design/status_display_frame
+ name = "Status Display Frame"
+ id = "status_display_frame"
+ build_type = AUTOLATHE
+ materials = list(/datum/material/iron = 14000, /datum/material/glass = 8000)
+ build_path = /obj/item/wallframe/status_display
+ category = list("initial", "Construction")
+
/datum/design/turret_control_frame
name = "Turret Control Frame"
id = "turret_control"
diff --git a/code/modules/research/designs/autolathe_desings/autolathe_designs_tools.dm b/code/modules/research/designs/autolathe_desings/autolathe_designs_tools.dm
index bebf836ce0..63442ef1ac 100644
--- a/code/modules/research/designs/autolathe_desings/autolathe_designs_tools.dm
+++ b/code/modules/research/designs/autolathe_desings/autolathe_designs_tools.dm
@@ -158,3 +158,11 @@
materials = list(/datum/material/iron = 150, /datum/material/glass = 150)
build_path = /obj/item/geiger_counter
category = list("initial", "Tools")
+
+/datum/design/chisel
+ name = "Chisel"
+ id = "chisel"
+ build_type = AUTOLATHE
+ materials = list(/datum/material/iron = 75)
+ build_path = /obj/item/chisel
+ category = list("initial","Tools")
diff --git a/code/modules/research/designs/limbgrower_designs.dm b/code/modules/research/designs/limbgrower_designs.dm
index e30cdfb5ef..f0e162b24f 100644
--- a/code/modules/research/designs/limbgrower_designs.dm
+++ b/code/modules/research/designs/limbgrower_designs.dm
@@ -212,3 +212,13 @@
reagents_list = list(/datum/reagent/medicine/synthflesh = 25)
build_path = /obj/item/organ/genital/breasts
category = list("initial","human","lizard","fly","insect","plasmaman","mammal","xeno")
+
+/datum/design/butt
+ name = "Butt"
+ id = "butt"
+ research_icon_state = "butt_pair_5_s"
+ research_icon = 'icons/obj/genitals/butt.dmi'
+ build_type = LIMBGROWER
+ reagents_list = list(/datum/reagent/medicine/synthflesh = 25)
+ build_path = /obj/item/organ/genital/butt
+ category = list("initial","human","lizard","fly","insect","plasmaman","mammal","xeno")
diff --git a/code/modules/research/designs/machine_desings/machine_designs_engi.dm b/code/modules/research/designs/machine_desings/machine_designs_engi.dm
index ca522d2ce1..e3dea1d9ee 100644
--- a/code/modules/research/designs/machine_desings/machine_designs_engi.dm
+++ b/code/modules/research/designs/machine_desings/machine_designs_engi.dm
@@ -105,6 +105,14 @@
category = list ("Engineering Machinery")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
+/datum/design/board/stasis
+ name = "Machine Design (Lifeform Stasis Unit)"
+ desc = "The circuit board for a stasis unit."
+ id = "stasis"
+ build_path = /obj/item/circuitboard/machine/stasis
+ category = list("Medical Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
+
/datum/design/board/spaceship_navigation_beacon
name = "Machine Design (Bluespace Navigation Gigabeacon)"
desc = "The circuit board for a Bluespace Navigation Gigabeacon."
diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm
index 4efcad97ba..12a18c7f91 100644
--- a/code/modules/research/designs/mechfabricator_designs.dm
+++ b/code/modules/research/designs/mechfabricator_designs.dm
@@ -585,15 +585,6 @@
construction_time = 100
category = list("Exosuit Equipment")
-/datum/design/mech_cable_layer
- name = "Exosuit Engineering Equipment (Cable Layer)"
- id = "mech_cable_layer"
- build_type = MECHFAB
- build_path = /obj/item/mecha_parts/mecha_equipment/cable_layer
- materials = list(/datum/material/iron=10000)
- construction_time = 100
- category = list("Exosuit Equipment")
-
/datum/design/mech_generator
name = "Exosuit Equipment (Plasma Generator)"
id = "mech_generator"
diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm
index cf17ec8545..5d28603055 100644
--- a/code/modules/research/designs/medical_designs.dm
+++ b/code/modules/research/designs/medical_designs.dm
@@ -958,6 +958,13 @@
surgery = /datum/surgery/advanced/brainwashing
research_icon_state = "surgery_head"
+/datum/design/surgery/robo_brainwashing
+ name = "Reprogramming"
+ desc = "A surgical procedure which hardcodes a directive into the patient's logic subroutines, making it their absolute priority. It can be purged using a mindshield implant."
+ id = "surgery_robot_brainwashing"
+ surgery = /datum/surgery/advanced/robot_brainwashing
+ research_icon_state = "surgery_head"
+
/datum/design/surgery/nerve_splicing
name = "Nerve Splicing"
desc = "A surgical procedure which splices the patient's nerves, making them more resistant to stuns."
diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm
index e6128ed5c2..ba0b17c113 100644
--- a/code/modules/research/experimentor.dm
+++ b/code/modules/research/experimentor.dm
@@ -66,7 +66,7 @@
if(initial(tempCheck.icon_state) != null)
critical_items += I
-/obj/machinery/rnd/experimentor/Initialize()
+/obj/machinery/rnd/experimentor/Initialize(mapload)
. = ..()
trackedIan = locate(/mob/living/simple_animal/pet/dog/corgi/Ian) in GLOB.mob_living_list
@@ -537,7 +537,7 @@
var/cooldownMax = 60
var/cooldown
-/obj/item/relic/Initialize()
+/obj/item/relic/Initialize(mapload)
. = ..()
icon_state = pick("shock_kit","armor-igniter-analyzer","infra-igniter0","infra-igniter1","radio-multitool","prox-radio1","radio-radio","timer-multitool0","radio-igniter-tank")
realName = "[pick("broken","twisted","spun","improved","silly","regular","badly made")] [pick("device","object","toy","illegal tech","weapon")]"
diff --git a/code/modules/research/nanites/nanite_chamber.dm b/code/modules/research/nanites/nanite_chamber.dm
index 8675d54b46..fe776e86c5 100644
--- a/code/modules/research/nanites/nanite_chamber.dm
+++ b/code/modules/research/nanites/nanite_chamber.dm
@@ -20,7 +20,7 @@
var/busy_message
var/message_cooldown = 0
-/obj/machinery/nanite_chamber/Initialize()
+/obj/machinery/nanite_chamber/Initialize(mapload)
. = ..()
occupant_typecache = GLOB.typecache_living
diff --git a/code/modules/research/nanites/nanite_chamber_computer.dm b/code/modules/research/nanites/nanite_chamber_computer.dm
index f69cb58456..0755487a7a 100644
--- a/code/modules/research/nanites/nanite_chamber_computer.dm
+++ b/code/modules/research/nanites/nanite_chamber_computer.dm
@@ -6,7 +6,7 @@
icon_screen = "nanite_chamber_control"
circuit = /obj/item/circuitboard/computer/nanite_chamber_control
-/obj/machinery/computer/nanite_chamber_control/Initialize()
+/obj/machinery/computer/nanite_chamber_control/Initialize(mapload)
. = ..()
find_chamber()
diff --git a/code/modules/research/nanites/nanite_program_hub.dm b/code/modules/research/nanites/nanite_program_hub.dm
index 9a625cd0c7..a097a08532 100644
--- a/code/modules/research/nanites/nanite_program_hub.dm
+++ b/code/modules/research/nanites/nanite_program_hub.dm
@@ -22,7 +22,7 @@
list(name = "Protocols"),
)
-/obj/machinery/nanite_program_hub/Initialize()
+/obj/machinery/nanite_program_hub/Initialize(mapload)
. = ..()
linked_techweb = SSresearch.science_tech
@@ -148,6 +148,6 @@
disk.name = initial(disk.name)
. = TRUE
-/obj/machinery/nanite_program_hub/admin/Initialize()
+/obj/machinery/nanite_program_hub/admin/Initialize(mapload)
. = ..()
linked_techweb = SSresearch.admin_tech
diff --git a/code/modules/research/nanites/program_disks.dm b/code/modules/research/nanites/program_disks.dm
index 667618173c..291982059c 100644
--- a/code/modules/research/nanites/program_disks.dm
+++ b/code/modules/research/nanites/program_disks.dm
@@ -7,7 +7,7 @@
var/program_type
var/datum/nanite_program/program
-/obj/item/disk/nanite_program/Initialize()
+/obj/item/disk/nanite_program/Initialize(mapload)
. = ..()
if(program_type)
program = new program_type
diff --git a/code/modules/research/nanites/public_chamber.dm b/code/modules/research/nanites/public_chamber.dm
index b7a8db4080..c6c53779a9 100644
--- a/code/modules/research/nanites/public_chamber.dm
+++ b/code/modules/research/nanites/public_chamber.dm
@@ -18,7 +18,7 @@
var/busy_icon_state
var/message_cooldown = 0
-/obj/machinery/public_nanite_chamber/Initialize()
+/obj/machinery/public_nanite_chamber/Initialize(mapload)
. = ..()
occupant_typecache = GLOB.typecache_living
diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm
index a9284a19f7..29181021c7 100644
--- a/code/modules/research/rdconsole.dm
+++ b/code/modules/research/rdconsole.dm
@@ -87,7 +87,7 @@ Nothing else in the console has ID requirements.
linked_imprinter = D
D.linked_console = src
-/obj/machinery/computer/rdconsole/Initialize()
+/obj/machinery/computer/rdconsole/Initialize(mapload)
. = ..()
stored_research = SSresearch.science_tech
stored_research.consoles_accessing[src] = TRUE
@@ -1145,7 +1145,7 @@ Nothing else in the console has ID requirements.
req_access = null
req_access_txt = "29"
-/obj/machinery/computer/rdconsole/robotics/Initialize()
+/obj/machinery/computer/rdconsole/robotics/Initialize(mapload)
. = ..()
if(circuit)
circuit.name = "R&D Console - Robotics (Computer Board)"
diff --git a/code/modules/research/rdmachines.dm b/code/modules/research/rdmachines.dm
index f39f5b1584..3ab3465b9e 100644
--- a/code/modules/research/rdmachines.dm
+++ b/code/modules/research/rdmachines.dm
@@ -18,7 +18,7 @@
/obj/machinery/rnd/proc/reset_busy()
busy = FALSE
-/obj/machinery/rnd/Initialize()
+/obj/machinery/rnd/Initialize(mapload)
. = ..()
wires = new /datum/wires/rnd(src)
diff --git a/code/modules/research/research_disk.dm b/code/modules/research/research_disk.dm
index a656093d98..0ac80040f9 100644
--- a/code/modules/research/research_disk.dm
+++ b/code/modules/research/research_disk.dm
@@ -6,7 +6,7 @@
custom_materials = list(/datum/material/iron=300, /datum/material/glass=100)
var/datum/techweb/stored_research
-/obj/item/disk/tech_disk/Initialize()
+/obj/item/disk/tech_disk/Initialize(mapload)
. = ..()
pixel_x = rand(-5, 5)
pixel_y = rand(-5, 5)
@@ -17,7 +17,7 @@
desc = "A debug item for research"
custom_materials = null
-/obj/item/disk/tech_disk/debug/Initialize()
+/obj/item/disk/tech_disk/debug/Initialize(mapload)
. = ..()
stored_research = new /datum/techweb/admin
@@ -27,7 +27,7 @@
icon_state = "rndmajordisk"
custom_materials = list(/datum/material/iron=300, /datum/material/glass=100)
-/obj/item/disk/tech_disk/major/Initialize()
+/obj/item/disk/tech_disk/major/Initialize(mapload)
. = ..()
stored_research = new /datum/techweb/bepis
@@ -36,7 +36,7 @@
desc = "A technology disk containing schematics for syndicate inspired equipment."
custom_materials = null
-/obj/item/disk/tech_disk/illegal/Initialize()
+/obj/item/disk/tech_disk/illegal/Initialize(mapload)
. = ..()
stored_research = new /datum/techweb/syndicate
@@ -45,6 +45,6 @@
desc = "You feel like it's not Gray because of its color."
custom_materials = null
-/obj/item/disk/tech_disk/abductor/Initialize()
+/obj/item/disk/tech_disk/abductor/Initialize(mapload)
. = ..()
stored_research = new /datum/techweb/abductor
diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm
index beb3561025..1794fd852b 100644
--- a/code/modules/research/server.dm
+++ b/code/modules/research/server.dm
@@ -18,7 +18,7 @@
var/temp_tolerance_high = T20C
var/temp_penalty_coefficient = 0.5 //1 = -1 points per degree above high tolerance. 0.5 = -0.5 points per degree above high tolerance.
-/obj/machinery/rnd/server/Initialize()
+/obj/machinery/rnd/server/Initialize(mapload)
. = ..()
SSresearch.servers |= src
stored_research = SSresearch.science_tech
diff --git a/code/modules/research/stock_parts.dm b/code/modules/research/stock_parts.dm
index de0ebcb63a..c823799952 100644
--- a/code/modules/research/stock_parts.dm
+++ b/code/modules/research/stock_parts.dm
@@ -123,7 +123,7 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi
var/rating = 1
rad_flags = RAD_NO_CONTAMINATE
-/obj/item/stock_parts/Initialize()
+/obj/item/stock_parts/Initialize(mapload)
. = ..()
pixel_x = rand(-5, 5)
pixel_y = rand(-5, 5)
diff --git a/code/modules/research/techweb/nodes/mecha_nodes.dm b/code/modules/research/techweb/nodes/mecha_nodes.dm
index 2e77f697da..740faf3832 100644
--- a/code/modules/research/techweb/nodes/mecha_nodes.dm
+++ b/code/modules/research/techweb/nodes/mecha_nodes.dm
@@ -14,7 +14,7 @@
starting_node = TRUE
display_name = "Basic Exosuit Equipment"
description = "Various tools fit for basic mech units"
- design_ids = list("mech_drill", "mech_mscanner", "mech_extinguisher", "mech_cable_layer")
+ design_ids = list("mech_drill", "mech_mscanner", "mech_extinguisher")
/datum/techweb_node/adv_mecha
id = "adv_mecha"
diff --git a/code/modules/research/techweb/nodes/medical_nodes.dm b/code/modules/research/techweb/nodes/medical_nodes.dm
index 1d7d579dad..7b6047724f 100644
--- a/code/modules/research/techweb/nodes/medical_nodes.dm
+++ b/code/modules/research/techweb/nodes/medical_nodes.dm
@@ -13,7 +13,7 @@
display_name = "Cryostasis Technology"
description = "Smart freezing of objects to preserve them!"
prereq_ids = list("adv_engi", "biotech")
- design_ids = list("splitbeaker", "noreactsyringe", "cryotube", "cryo_Grenade")
+ design_ids = list("splitbeaker", "noreactsyringe", "cryotube", "cryo_Grenade", "stasis")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2000)
/datum/techweb_node/adv_defibrillator_tec
@@ -152,5 +152,5 @@
display_name = "Alien Surgery"
description = "Abductors did nothing wrong."
prereq_ids = list("exp_surgery", "alientech")
- design_ids = list("surgery_brainwashing","surgery_zombie", "surgery_ext_dissection", "surgery_heal_combo_upgrade_femto")
+ design_ids = list("surgery_brainwashing", "surgery_robot_brainwashing", "surgery_zombie", "surgery_ext_dissection", "surgery_heal_combo_upgrade_femto")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 10000)
diff --git a/code/modules/research/xenobiology/crossbreeding/__corecross.dm b/code/modules/research/xenobiology/crossbreeding/__corecross.dm
index 17a6b77bfe..b37bbb59b6 100644
--- a/code/modules/research/xenobiology/crossbreeding/__corecross.dm
+++ b/code/modules/research/xenobiology/crossbreeding/__corecross.dm
@@ -37,7 +37,7 @@ To add a crossbreed:
throw_speed = 3
throw_range = 6
-/obj/item/slimecross/Initialize()
+/obj/item/slimecross/Initialize(mapload)
. = ..()
name = effect + " " + colour + " extract"
var/itemcolor = "#FFFFFF"
@@ -92,7 +92,7 @@ To add a crossbreed:
var/del_on_empty = TRUE
var/list/list_reagents
-/obj/item/slimecrossbeaker/Initialize()
+/obj/item/slimecrossbeaker/Initialize(mapload)
. = ..()
create_reagents(50, INJECTABLE | DRAWABLE)
if(list_reagents)
@@ -132,7 +132,7 @@ To add a crossbreed:
var/ignore_flags = FALSE
var/self_use_only = FALSE
-/obj/item/slimecrossbeaker/autoinjector/Initialize()
+/obj/item/slimecrossbeaker/autoinjector/Initialize(mapload)
. = ..()
reagents.reagents_holder_flags = DRAWABLE // Cannot be refilled, since it's basically an autoinjector!
@@ -176,7 +176,7 @@ To add a crossbreed:
color = "#DDAAAA"
list_reagents = list(/datum/reagent/pax/peaceborg = 10, /datum/reagent/drug/space_drugs = 15) //Peace, dudes
-/obj/item/slimecrossbeaker/autoinjector/peaceandlove/Initialize()
+/obj/item/slimecrossbeaker/autoinjector/peaceandlove/Initialize(mapload)
. = ..()
reagents.reagents_holder_flags = NONE // It won't be *that* easy to get your hands on pax.
diff --git a/code/modules/research/xenobiology/crossbreeding/_clothing.dm b/code/modules/research/xenobiology/crossbreeding/_clothing.dm
index b30a53c27d..640aa6d490 100644
--- a/code/modules/research/xenobiology/crossbreeding/_clothing.dm
+++ b/code/modules/research/xenobiology/crossbreeding/_clothing.dm
@@ -135,7 +135,7 @@ Slimecrossing Armor
obj_flags = IMMUTABLE_SLOW
slowdown = 4
var/hit_reflect_chance = 10 // Citadel Change: because 40% chance of bouncing lasers back into peoples faces isn't good.
- armor = list("melee" = 70, "bullet" = 70, "laser" = 40, "energy" = 40, "bomb" = 80, "bio" = 80, "rad" = 80, "fire" = 70, "acid" = 90) //Citadel Change to avoid immortal Xenobiologists.
+ armor = list(MELEE = 70, BULLET = 70, LASER = 40, ENERGY = 40, BOMB = 80, BIO = 80, RAD = 80, FIRE = 70, ACID = 90) //Citadel Change to avoid immortal Xenobiologists.
/obj/item/clothing/suit/armor/heavy/adamantine/run_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return)
if(is_energy_reflectable_projectile(object) && prob(hit_reflect_chance))
diff --git a/code/modules/research/xenobiology/crossbreeding/_misc.dm b/code/modules/research/xenobiology/crossbreeding/_misc.dm
index 97a87a5e01..05470b41d6 100644
--- a/code/modules/research/xenobiology/crossbreeding/_misc.dm
+++ b/code/modules/research/xenobiology/crossbreeding/_misc.dm
@@ -71,9 +71,9 @@
icon_state = "frozen"
density = TRUE
max_integrity = 100
- armor = list("melee" = 30, "bullet" = 50, "laser" = -50, "energy" = -50, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = -80, "acid" = 30)
+ armor = list(MELEE = 30, BULLET = 50, LASER = -50, ENERGY = -50, BOMB = 0, BIO = 100, RAD = 100, FIRE = -80, ACID = 30)
-/obj/structure/ice_stasis/Initialize()
+/obj/structure/ice_stasis/Initialize(mapload)
. = ..()
playsound(src, 'sound/magic/ethereal_exit.ogg', 50, 1)
diff --git a/code/modules/research/xenobiology/crossbreeding/_weapons.dm b/code/modules/research/xenobiology/crossbreeding/_weapons.dm
index 1b2f43c518..00748d2609 100644
--- a/code/modules/research/xenobiology/crossbreeding/_weapons.dm
+++ b/code/modules/research/xenobiology/crossbreeding/_weapons.dm
@@ -17,7 +17,7 @@
fire_sound = 'sound/effects/attackblob.ogg'
total_mass = TOTAL_MASS_HAND_REPLACEMENT
-/obj/item/gun/magic/bloodchill/Initialize()
+/obj/item/gun/magic/bloodchill/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT)
diff --git a/code/modules/research/xenobiology/crossbreeding/burning.dm b/code/modules/research/xenobiology/crossbreeding/burning.dm
index 1a8b82232b..3d159cddde 100644
--- a/code/modules/research/xenobiology/crossbreeding/burning.dm
+++ b/code/modules/research/xenobiology/crossbreeding/burning.dm
@@ -9,7 +9,7 @@ Burning extracts:
effect = "burning"
icon_state = "burning"
-/obj/item/slimecross/burning/Initialize()
+/obj/item/slimecross/burning/Initialize(mapload)
. = ..()
create_reagents(10, INJECTABLE | DRAWABLE)
@@ -447,7 +447,7 @@ Burning extracts:
icon_state = "adamshield"
item_state = "adamshield"
w_class = WEIGHT_CLASS_HUGE
- armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 70)
+ armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 0, BOMB = 30, BIO = 0, RAD = 0, FIRE = 80, ACID = 70)
slot_flags = ITEM_SLOT_BACK
block_chance = 75
force = 0
diff --git a/code/modules/research/xenobiology/crossbreeding/charged.dm b/code/modules/research/xenobiology/crossbreeding/charged.dm
index 75a15be9ce..a51adfffe6 100644
--- a/code/modules/research/xenobiology/crossbreeding/charged.dm
+++ b/code/modules/research/xenobiology/crossbreeding/charged.dm
@@ -10,7 +10,7 @@ Charged extracts:
effect = "charged"
icon_state = "charged"
-/obj/item/slimecross/charged/Initialize()
+/obj/item/slimecross/charged/Initialize(mapload)
. = ..()
create_reagents(10, INJECTABLE | DRAWABLE)
diff --git a/code/modules/research/xenobiology/crossbreeding/chilling.dm b/code/modules/research/xenobiology/crossbreeding/chilling.dm
index d117e6104c..7c129b8179 100644
--- a/code/modules/research/xenobiology/crossbreeding/chilling.dm
+++ b/code/modules/research/xenobiology/crossbreeding/chilling.dm
@@ -9,7 +9,7 @@ Chilling extracts:
effect = "chilling"
icon_state = "chilling"
-/obj/item/slimecross/chilling/Initialize()
+/obj/item/slimecross/chilling/Initialize(mapload)
. = ..()
create_reagents(10, INJECTABLE | DRAWABLE)
diff --git a/code/modules/research/xenobiology/crossbreeding/consuming.dm b/code/modules/research/xenobiology/crossbreeding/consuming.dm
index 8d80613be4..f69d1bd674 100644
--- a/code/modules/research/xenobiology/crossbreeding/consuming.dm
+++ b/code/modules/research/xenobiology/crossbreeding/consuming.dm
@@ -277,7 +277,7 @@ Consuming extracts:
taste = "vanilla and " //Randomly selected color dye.
var/colour = "#FFFFFF"
-/obj/item/slime_cookie/pyrite/Initialize()
+/obj/item/slime_cookie/pyrite/Initialize(mapload)
. = ..()
var/tastemessage = "paint remover"
switch(rand(1,7))
diff --git a/code/modules/research/xenobiology/crossbreeding/industrial.dm b/code/modules/research/xenobiology/crossbreeding/industrial.dm
index ac9d2e58c5..cc85486bad 100644
--- a/code/modules/research/xenobiology/crossbreeding/industrial.dm
+++ b/code/modules/research/xenobiology/crossbreeding/industrial.dm
@@ -19,7 +19,7 @@ Industrial extracts:
/obj/item/slimecross/industrial/proc/do_after_spawn(obj/item/spawned)
return
-/obj/item/slimecross/industrial/Initialize()
+/obj/item/slimecross/industrial/Initialize(mapload)
. = ..()
create_reagents(100, INJECTABLE | DRAWABLE)
START_PROCESSING(SSobj,src)
diff --git a/code/modules/research/xenobiology/crossbreeding/recurring.dm b/code/modules/research/xenobiology/crossbreeding/recurring.dm
index 4a094744f7..4389801882 100644
--- a/code/modules/research/xenobiology/crossbreeding/recurring.dm
+++ b/code/modules/research/xenobiology/crossbreeding/recurring.dm
@@ -13,7 +13,7 @@ Recurring extracts:
var/cooldown = 0
var/max_cooldown = 5 //In sets of 2 seconds.
-/obj/item/slimecross/recurring/Initialize()
+/obj/item/slimecross/recurring/Initialize(mapload)
. = ..()
extract = new extract_type(src.loc)
visible_message("[src] wraps a layer of goo around itself!")
diff --git a/code/modules/research/xenobiology/crossbreeding/regenerative.dm b/code/modules/research/xenobiology/crossbreeding/regenerative.dm
index f871cac778..7f3d2ce791 100644
--- a/code/modules/research/xenobiology/crossbreeding/regenerative.dm
+++ b/code/modules/research/xenobiology/crossbreeding/regenerative.dm
@@ -178,7 +178,7 @@ Regenerative extracts:
target.forceMove(T)
do_sparks(5,FALSE,target)
-/obj/item/slimecross/regenerative/bluespace/Initialize()
+/obj/item/slimecross/regenerative/bluespace/Initialize(mapload)
. = ..()
T = get_turf(src)
diff --git a/code/modules/research/xenobiology/crossbreeding/selfsustaining.dm b/code/modules/research/xenobiology/crossbreeding/selfsustaining.dm
index a88b5cd35b..ae003d984f 100644
--- a/code/modules/research/xenobiology/crossbreeding/selfsustaining.dm
+++ b/code/modules/research/xenobiology/crossbreeding/selfsustaining.dm
@@ -14,7 +14,7 @@ Self-sustaining extracts:
var/obj/item/slime_extract/extract
//Just divides into the actual item.
-/obj/item/slimecross/selfsustaining/Initialize()
+/obj/item/slimecross/selfsustaining/Initialize(mapload)
..()
visible_message("The [src] shudders, and splits into four smaller extracts.")
for(var/i = 0, i < 4, i++)
diff --git a/code/modules/research/xenobiology/crossbreeding/stabilized.dm b/code/modules/research/xenobiology/crossbreeding/stabilized.dm
index 69bd2c7e28..2def0640a9 100644
--- a/code/modules/research/xenobiology/crossbreeding/stabilized.dm
+++ b/code/modules/research/xenobiology/crossbreeding/stabilized.dm
@@ -14,7 +14,7 @@ Stabilized extracts:
var/datum/status_effect/linked_effect
var/mob/living/owner
-/obj/item/slimecross/stabilized/Initialize()
+/obj/item/slimecross/stabilized/Initialize(mapload)
. = ..()
START_PROCESSING(SSobj,src)
@@ -110,7 +110,7 @@ Stabilized extracts:
mob_spawn_pets += T
mob_type = pick(mob_spawn_pets)
-/obj/item/slimecross/stabilized/gold/Initialize()
+/obj/item/slimecross/stabilized/gold/Initialize(mapload)
. = ..()
generate_mobtype()
diff --git a/code/modules/research/xenobiology/xenobio_camera.dm b/code/modules/research/xenobiology/xenobio_camera.dm
index ef9c751d57..bccc738398 100644
--- a/code/modules/research/xenobiology/xenobio_camera.dm
+++ b/code/modules/research/xenobiology/xenobio_camera.dm
@@ -5,7 +5,7 @@
icon_state = "generic_camera"
var/allowed_area = null
-/mob/camera/aiEye/remote/xenobio/Initialize()
+/mob/camera/aiEye/remote/xenobio/Initialize(mapload)
var/area/A = get_area(loc)
allowed_area = A.name
. = ..()
@@ -41,7 +41,7 @@
light_color = LIGHT_COLOR_PINK
-/obj/machinery/computer/camera_advanced/xenobio/Initialize()
+/obj/machinery/computer/camera_advanced/xenobio/Initialize(mapload)
. = ..()
slime_place_action = new
slime_up_action = new
diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm
index 9bf794a0a2..dd2579663a 100644
--- a/code/modules/research/xenobiology/xenobiology.dm
+++ b/code/modules/research/xenobiology/xenobiology.dm
@@ -36,7 +36,7 @@
qdel(O)
..()
-/obj/item/slime_extract/Initialize()
+/obj/item/slime_extract/Initialize(mapload)
. = ..()
create_reagents(100, INJECTABLE | DRAWABLE)
diff --git a/code/modules/ruins/lavaland_ruin_code.dm b/code/modules/ruins/lavaland_ruin_code.dm
index e572f1ee02..93be0d1eed 100644
--- a/code/modules/ruins/lavaland_ruin_code.dm
+++ b/code/modules/ruins/lavaland_ruin_code.dm
@@ -7,7 +7,7 @@
/obj/item/disk/design_disk/adv/knight_gear
name = "Magic Disk of Smithing"
-/obj/item/disk/design_disk/adv/knight_gear/Initialize()
+/obj/item/disk/design_disk/adv/knight_gear/Initialize(mapload)
. = ..()
var/datum/design/knight_armour/A = new
var/datum/design/knight_helmet/H = new
@@ -33,7 +33,7 @@
icon_state = "datadisk1"
max_blueprints = 1
-/obj/item/disk/design_disk/plant_disk/Initialize()
+/obj/item/disk/design_disk/plant_disk/Initialize(mapload)
. = ..()
var/datum/design/diskplantgene/P = new
blueprints[1] = P
@@ -46,7 +46,7 @@
icon_state = "datadisk1"
max_blueprints = 1
-/obj/item/disk/design_disk/golem_shell/Initialize()
+/obj/item/disk/design_disk/golem_shell/Initialize(mapload)
. = ..()
var/datum/design/golem_shell/G = new
blueprints[1] = G
@@ -160,7 +160,7 @@
important_info = "DO NOT abandon the base."
outfit = /datum/outfit/lavaland_syndicate/comms
-/obj/effect/mob_spawn/human/lavaland_syndicate/comms/space/Initialize()
+/obj/effect/mob_spawn/human/lavaland_syndicate/comms/space/Initialize(mapload)
. = ..()
if(prob(90)) //only has a 10% chance of existing, otherwise it'll just be a NPC syndie.
new /mob/living/simple_animal/hostile/syndicate/ranged(get_turf(src))
@@ -172,7 +172,7 @@
mask = /obj/item/clothing/mask/chameleon/gps
suit = /obj/item/clothing/suit/armor/vest
-/obj/item/clothing/mask/chameleon/gps/Initialize()
+/obj/item/clothing/mask/chameleon/gps/Initialize(mapload)
. = ..()
new /obj/item/gps/internal/lavaland_syndicate_base(src)
diff --git a/code/modules/ruins/lavalandruin_code/elephantgraveyard.dm b/code/modules/ruins/lavalandruin_code/elephantgraveyard.dm
index d9dfdd8c19..c8bc4b0568 100644
--- a/code/modules/ruins/lavalandruin_code/elephantgraveyard.dm
+++ b/code/modules/ruins/lavalandruin_code/elephantgraveyard.dm
@@ -3,27 +3,28 @@
/obj/structure/statue/bone
anchored = TRUE
max_integrity = 120
- material_drop_type = /obj/item/stack/sheet/bone
impressiveness = 18 // Carved from the bones of a massive creature, it's going to be a specticle to say the least
layer = ABOVE_ALL_MOB_LAYER
+ custom_materials = list(/datum/material/bone=MINERAL_MATERIAL_AMOUNT*5)
+ abstract_type = /obj/structure/statue/bone
/obj/structure/statue/bone/rib
name = "collosal rib"
desc = "It's staggering to think that something this big could have lived, let alone died."
- oreAmount = 4
+ custom_materials = list(/datum/material/bone=MINERAL_MATERIAL_AMOUNT*4)
icon = 'icons/obj/statuelarge.dmi'
icon_state = "rib"
/obj/structure/statue/bone/skull
name = "collosal skull"
desc = "The gaping maw of a dead, titanic monster."
- oreAmount = 12
+ custom_materials = list(/datum/material/bone=MINERAL_MATERIAL_AMOUNT*12)
icon = 'icons/obj/statuelarge.dmi'
icon_state = "skull"
/obj/structure/statue/bone/skull/half
desc = "The gaping maw of a dead, titanic monster. This one is cracked in half."
- oreAmount = 6
+ custom_materials = list(/datum/material/bone=MINERAL_MATERIAL_AMOUNT*6)
icon = 'icons/obj/statuelarge.dmi'
icon_state = "skull-half"
@@ -39,7 +40,7 @@
slowdown = 0.5
floor_variance = 30
-/turf/open/floor/plating/asteroid/basalt/wasteland/Initialize()
+/turf/open/floor/plating/asteroid/basalt/wasteland/Initialize(mapload)
.=..()
if(prob(floor_variance))
icon_state = "[environment_type][rand(0,6)]"
@@ -68,7 +69,7 @@
icon_state = "puddle-oil"
dispensedreagent = /datum/reagent/oil
-/obj/structure/sink/oil_well/Initialize()
+/obj/structure/sink/oil_well/Initialize(mapload)
.=..()
create_reagents(20)
reagents.add_reagent(dispensedreagent, 20)
diff --git a/code/modules/ruins/lavalandruin_code/puzzle.dm b/code/modules/ruins/lavalandruin_code/puzzle.dm
index 92e24e3bc4..136acc7da7 100644
--- a/code/modules/ruins/lavalandruin_code/puzzle.dm
+++ b/code/modules/ruins/lavalandruin_code/puzzle.dm
@@ -34,7 +34,7 @@
return get_step(center,SOUTH)
if(9)
return get_step(center,SOUTHEAST)
-
+
/obj/effect/sliding_puzzle/Initialize(mapload)
..()
return INITIALIZE_HINT_LATELOAD
@@ -56,7 +56,7 @@
/obj/effect/sliding_puzzle/proc/validate()
if(finished)
return
-
+
if(elements.len < 8) //Someone broke it
qdel(src)
@@ -86,7 +86,7 @@
shake_camera(M, COLLAPSE_DURATION , 1)
for(var/obj/structure/puzzle_element/E in elements)
E.collapse()
-
+
dispense_reward()
/obj/effect/sliding_puzzle/proc/dispense_reward()
@@ -103,7 +103,7 @@
for(var/j in i to current_ordering.len)
if(current_ordering[j] < checked_value)
swap_tally++
-
+
return swap_tally % 2 == 0
//swap two tiles in same row
@@ -113,13 +113,13 @@
if(empty_tile_id == 1 || empty_tile_id == 2) //Can't swap with empty one so just grab some in second row
first_tile_id = 4
other_tile_id = 5
-
+
var/turf/T1 = get_turf_for_id(first_tile_id)
var/turf/T2 = get_turf_for_id(other_tile_id)
-
+
var/obj/structure/puzzle_element/E1 = locate() in T1
var/obj/structure/puzzle_element/E2 = locate() in T2
-
+
E1.forceMove(T2)
E2.forceMove(T1)
@@ -294,7 +294,7 @@
//Some armor so it's harder to kill someone by mistake.
/obj/structure/puzzle_element/prison
- armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 50, "bio" = 50, "rad" = 50, "fire" = 50, "acid" = 50)
+ armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 50, BIO = 50, RAD = 50, FIRE = 50, ACID = 50)
/obj/structure/puzzle_element/prison/relaymove(mob/user)
return
@@ -342,7 +342,7 @@
for(var/atom/movable/AM in things_to_throw)
var/throwtarget = get_edge_target_turf(T, get_dir(T, get_step_away(AM, T)))
AM.throw_at(throwtarget, 2, 3)
-
+
//Create puzzle itself
cube.prisoner = prisoner
cube.setup()
diff --git a/code/modules/ruins/objects_and_mobs/necropolis_gate.dm b/code/modules/ruins/objects_and_mobs/necropolis_gate.dm
index d62b3c2611..94abd1ef0a 100644
--- a/code/modules/ruins/objects_and_mobs/necropolis_gate.dm
+++ b/code/modules/ruins/objects_and_mobs/necropolis_gate.dm
@@ -26,7 +26,7 @@
var/uses
var/ashwalker_only = FALSE
-/obj/structure/necropolis_gate/Initialize()
+/obj/structure/necropolis_gate/Initialize(mapload)
. = ..()
setDir(SOUTH)
var/turf/sight_blocker_turf = get_turf(src)
@@ -59,10 +59,10 @@
/obj/structure/necropolis_gate/singularity_pull()
return 0
-/obj/structure/necropolis_gate/CanPass(atom/movable/mover, turf/target)
- if(get_dir(loc, target) == dir)
- return !density
- return 1
+/obj/structure/necropolis_gate/CanAllowThrough(atom/movable/mover, turf/target)
+ . = ..()
+ if(!(get_dir(loc, target) == dir))
+ return TRUE
/obj/structure/necropolis_gate/CheckExit(atom/movable/O, target)
if(get_dir(O.loc, target) == dir)
@@ -155,7 +155,7 @@ GLOBAL_DATUM(necropolis_gate, /obj/structure/necropolis_gate/legion_gate)
desc = "A tremendous, impossibly large gateway, set into a massive tower of stone."
sight_blocker_distance = 2
-/obj/structure/necropolis_gate/legion_gate/Initialize()
+/obj/structure/necropolis_gate/legion_gate/Initialize(mapload)
. = ..()
GLOB.necropolis_gate = src
@@ -228,7 +228,7 @@ GLOBAL_DATUM(necropolis_gate, /obj/structure/necropolis_gate/legion_gate)
var/open = FALSE
var/static/mutable_appearance/top_overlay
-/obj/structure/necropolis_arch/Initialize()
+/obj/structure/necropolis_arch/Initialize(mapload)
. = ..()
icon_state = "arch_bottom"
top_overlay = mutable_appearance('icons/effects/160x160.dmi', "arch_top")
diff --git a/code/modules/ruins/objects_and_mobs/sin_ruins.dm b/code/modules/ruins/objects_and_mobs/sin_ruins.dm
index 5e2fc3d7e4..ddb5c9df3c 100644
--- a/code/modules/ruins/objects_and_mobs/sin_ruins.dm
+++ b/code/modules/ruins/objects_and_mobs/sin_ruins.dm
@@ -48,7 +48,7 @@
anchored = FALSE
density = TRUE
-/obj/structure/cursed_money/Initialize()
+/obj/structure/cursed_money/Initialize(mapload)
. = ..()
addtimer(CALLBACK(src, .proc/collapse), 600)
@@ -80,7 +80,8 @@
icon = 'icons/mob/blob.dmi'
color = rgb(145, 150, 0)
-/obj/effect/gluttony/CanPass(atom/movable/mover, turf/target)//So bullets will fly over and stuff.
+/obj/effect/gluttony/CanAllowThrough(atom/movable/mover, turf/target)//So bullets will fly over and stuff.
+ . = ..()
if(ishuman(mover))
var/mob/living/carbon/human/H = mover
if(H.nutrition >= NUTRITION_LEVEL_FAT)
@@ -90,8 +91,6 @@
to_chat(H, "You're repulsed by even looking at [src]. Only a pig could force themselves to go through it.")
if(istype(mover, /mob/living/simple_animal/hostile/morph))
return TRUE
- else
- return FALSE
/obj/structure/mirror/magic/pride //Pride's mirror: Used in the Pride ruin.
name = "pride's mirror"
diff --git a/code/modules/ruins/spaceruin_code/caravanambush.dm b/code/modules/ruins/spaceruin_code/caravanambush.dm
index ab38ed8e4d..b347c66dbe 100644
--- a/code/modules/ruins/spaceruin_code/caravanambush.dm
+++ b/code/modules/ruins/spaceruin_code/caravanambush.dm
@@ -53,7 +53,7 @@
shuttleId = "caravantrade1"
possible_destinations = "whiteship_away;whiteship_home;whiteship_z4;whiteship_lavaland;caravantrade1_custom;caravantrade1_ambush"
-/obj/machinery/computer/camera_advanced/shuttle_docker/caravan/Initialize()
+/obj/machinery/computer/camera_advanced/shuttle_docker/caravan/Initialize(mapload)
. = ..()
GLOB.jam_on_wardec += src
diff --git a/code/modules/ruins/spaceruin_code/clericsden.dm b/code/modules/ruins/spaceruin_code/clericsden.dm
index 3fe4cad794..63f85c3291 100644
--- a/code/modules/ruins/spaceruin_code/clericsden.dm
+++ b/code/modules/ruins/spaceruin_code/clericsden.dm
@@ -4,7 +4,7 @@
/obj/item/disk/design_disk/adv/cleric_mace
name = "Enshrined Disc of Smiting"
-/obj/item/disk/design_disk/adv/cleric_mace/Initialize()
+/obj/item/disk/design_disk/adv/cleric_mace/Initialize(mapload)
. = ..()
var/datum/design/cleric_mace/M = new
blueprints[1] = M
diff --git a/code/modules/ruins/spaceruin_code/hilbertshotel.dm b/code/modules/ruins/spaceruin_code/hilbertshotel.dm
index 4a03844a33..79119c8448 100644
--- a/code/modules/ruins/spaceruin_code/hilbertshotel.dm
+++ b/code/modules/ruins/spaceruin_code/hilbertshotel.dm
@@ -18,7 +18,7 @@ GLOBAL_VAR_INIT(hhmysteryRoomNumber, 1337)
var/ruinSpawned = FALSE
var/mysteryRoom
-/obj/item/hilbertshotel/Initialize()
+/obj/item/hilbertshotel/Initialize(mapload)
. = ..()
//Load templates
INVOKE_ASYNC(src, .proc/prepare_rooms)
@@ -478,7 +478,7 @@ GLOBAL_VAR_INIT(hhmysteryRoomNumber, 1337)
/obj/item/paper/crumpled/docslogs
name = "Research Logs"
-/obj/item/paper/crumpled/docslogs/Initialize()
+/obj/item/paper/crumpled/docslogs/Initialize(mapload)
. = ..()
GLOB.hhmysteryRoomNumber = rand(1, SHORT_REAL_LIMIT)
info = {"
diff --git a/code/modules/security_levels/keycard_authentication.dm b/code/modules/security_levels/keycard_authentication.dm
index 7326cad816..562dc17182 100644
--- a/code/modules/security_levels/keycard_authentication.dm
+++ b/code/modules/security_levels/keycard_authentication.dm
@@ -26,7 +26,7 @@ GLOBAL_DATUM_INIT(keycard_events, /datum/events, new)
var/obj/item/card/id/first_id = null
var/waiting = 0
-/obj/machinery/keycard_auth/Initialize()
+/obj/machinery/keycard_auth/Initialize(mapload)
. = ..()
ev = GLOB.keycard_events.addEvent("triggerEvent", CALLBACK(src, .proc/triggerEvent))
diff --git a/code/modules/shuttle/custom_shuttle.dm b/code/modules/shuttle/custom_shuttle.dm
index e9a5ca4688..e8e5fe8d4d 100644
--- a/code/modules/shuttle/custom_shuttle.dm
+++ b/code/modules/shuttle/custom_shuttle.dm
@@ -235,7 +235,7 @@
designate_time = 100
circuit = /obj/item/circuitboard/computer/shuttle/docker
-/obj/machinery/computer/camera_advanced/shuttle_docker/custom/Initialize()
+/obj/machinery/computer/camera_advanced/shuttle_docker/custom/Initialize(mapload)
. = ..()
GLOB.jam_on_wardec += src
diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm
index 2a15558e64..d4e6f3e050 100644
--- a/code/modules/shuttle/emergency.dm
+++ b/code/modules/shuttle/emergency.dm
@@ -630,7 +630,7 @@
height = 8
dir = EAST
-/obj/docking_port/mobile/emergency/backup/Initialize()
+/obj/docking_port/mobile/emergency/backup/Initialize(mapload)
// We want to be a valid emergency shuttle
// but not be the main one, keep whatever's set
// valid.
diff --git a/code/modules/shuttle/navigation_computer.dm b/code/modules/shuttle/navigation_computer.dm
index 029d50585a..c02405fc3f 100644
--- a/code/modules/shuttle/navigation_computer.dm
+++ b/code/modules/shuttle/navigation_computer.dm
@@ -22,7 +22,7 @@
var/turf/designating_target_loc
var/jammed = FALSE
-/obj/machinery/computer/camera_advanced/shuttle_docker/Initialize()
+/obj/machinery/computer/camera_advanced/shuttle_docker/Initialize(mapload)
. = ..()
GLOB.navigation_computers += src
whitelist_turfs = typecacheof(whitelist_turfs)
diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm
index d3e52410d6..376a253379 100644
--- a/code/modules/shuttle/shuttle.dm
+++ b/code/modules/shuttle/shuttle.dm
@@ -281,7 +281,7 @@
var/area/shuttle/transit/assigned_area
var/obj/docking_port/mobile/owner
-/obj/docking_port/stationary/transit/Initialize()
+/obj/docking_port/stationary/transit/Initialize(mapload)
. = ..()
SSshuttle.transit += src
diff --git a/code/modules/shuttle/shuttle_creation/shuttle_creator.dm b/code/modules/shuttle/shuttle_creation/shuttle_creator.dm
index b9374a09c4..ac604fbe49 100644
--- a/code/modules/shuttle/shuttle_creation/shuttle_creator.dm
+++ b/code/modules/shuttle/shuttle_creation/shuttle_creator.dm
@@ -24,7 +24,7 @@ GLOBAL_LIST_EMPTY(custom_shuttle_machines) //Machines that require updating (He
throw_range = 5
w_class = WEIGHT_CLASS_NORMAL
req_access_txt = "11"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 50)
resistance_flags = FIRE_PROOF
var/ready = TRUE
//pre-designation
@@ -39,7 +39,7 @@ GLOBAL_LIST_EMPTY(custom_shuttle_machines) //Machines that require updating (He
//After designation
var/linkedShuttleId
-/obj/item/shuttle_creator/Initialize()
+/obj/item/shuttle_creator/Initialize(mapload)
. = ..()
internal_shuttle_creator = new()
internal_shuttle_creator.owner_rsd = src
diff --git a/code/modules/shuttle/shuttle_creation/shuttle_creator_eye.dm b/code/modules/shuttle/shuttle_creation/shuttle_creator_eye.dm
index ff96e2ae65..2bbe7d7407 100644
--- a/code/modules/shuttle/shuttle_creation/shuttle_creator_eye.dm
+++ b/code/modules/shuttle/shuttle_creation/shuttle_creator_eye.dm
@@ -8,7 +8,7 @@
var/turf/source_turf
var/max_range = 12
-/mob/camera/aiEye/remote/shuttle_creation/Initialize()
+/mob/camera/aiEye/remote/shuttle_creation/Initialize(mapload)
. = ..()
setLoc(get_turf(source_turf))
diff --git a/code/modules/shuttle/spaceship_navigation_beacon.dm b/code/modules/shuttle/spaceship_navigation_beacon.dm
index dbf81d791e..e3232ec904 100644
--- a/code/modules/shuttle/spaceship_navigation_beacon.dm
+++ b/code/modules/shuttle/spaceship_navigation_beacon.dm
@@ -17,7 +17,7 @@
var/locked = FALSE //Locked beacons don't allow to jump to it.
-/obj/machinery/spaceship_navigation_beacon/Initialize()
+/obj/machinery/spaceship_navigation_beacon/Initialize(mapload)
. = ..()
SSshuttle.beacons |= src
diff --git a/code/modules/shuttle/special.dm b/code/modules/shuttle/special.dm
index 05450fd7c2..5e034c0b52 100644
--- a/code/modules/shuttle/special.dm
+++ b/code/modules/shuttle/special.dm
@@ -15,7 +15,7 @@
var/list/active_tables = list()
var/tables_required = 2
-/obj/machinery/power/emitter/energycannon/magical/Initialize()
+/obj/machinery/power/emitter/energycannon/magical/Initialize(mapload)
. = ..()
if(prob(50))
desc = "Oh no, not again."
@@ -144,7 +144,7 @@
unique_name = FALSE // disables the (123) number suffix
initial_language_holder = /datum/language_holder/universal
-/mob/living/simple_animal/drone/snowflake/bardrone/Initialize()
+/mob/living/simple_animal/drone/snowflake/bardrone/Initialize(mapload)
. = ..()
access_card.access |= ACCESS_CENT_BAR
@@ -159,7 +159,7 @@
stop_automated_movement = TRUE
initial_language_holder = /datum/language_holder/universal
-/mob/living/simple_animal/hostile/alien/maid/barmaid/Initialize()
+/mob/living/simple_animal/hostile/alien/maid/barmaid/Initialize(mapload)
. = ..()
access_card = new /obj/item/card/id(src)
var/datum/job/captain/C = new /datum/job/captain
@@ -212,15 +212,14 @@
var/static/list/check_times = list()
-/obj/effect/forcefield/luxury_shuttle/CanPass(atom/movable/mover, turf/target)
+/obj/effect/forcefield/luxury_shuttle/CanAllowThrough(atom/movable/mover, turf/target)
+ . = ..()
if(mover in approved_passengers)
return TRUE
if(!isliving(mover)) //No stowaways
return FALSE
- return FALSE
-
#define LUXURY_MESSAGE_COOLDOWN 100
/obj/effect/forcefield/luxury_shuttle/Bumped(atom/movable/AM)
diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm
index b8a13a7279..21d616bee4 100644
--- a/code/modules/shuttle/supply.dm
+++ b/code/modules/shuttle/supply.dm
@@ -261,7 +261,7 @@ GLOBAL_LIST_INIT(cargo_shuttle_leave_behind_typecache, typecacheof(list(
matched_bounty = TRUE
// ignore mech checks because the mech is ONLY for bounty
continue
- if(!AM.anchored || istype(AM, /obj/mecha))
+ if(!AM.anchored || istype(AM, /obj/vehicle/sealed/mecha))
export_item_and_contents(AM, export_categories , dry_run = FALSE, external_report = ex)
if(ex.exported_atoms)
diff --git a/code/modules/shuttle/white_ship.dm b/code/modules/shuttle/white_ship.dm
index 66146edea1..6d8b2446f7 100644
--- a/code/modules/shuttle/white_ship.dm
+++ b/code/modules/shuttle/white_ship.dm
@@ -41,7 +41,7 @@
y_offset = 0
designate_time = 0
-/obj/machinery/computer/camera_advanced/shuttle_docker/whiteship/Initialize()
+/obj/machinery/computer/camera_advanced/shuttle_docker/whiteship/Initialize(mapload)
. = ..()
GLOB.jam_on_wardec += src
@@ -51,6 +51,6 @@
/obj/effect/spawner/lootdrop/whiteship_cere_ripley
name = "25% mech 75% wreckage ripley spawner"
- loot = list(/obj/mecha/working/ripley/mining = 1,
+ loot = list(/obj/vehicle/sealed/mecha/working/ripley/mining = 1,
/obj/structure/mecha_wreckage/ripley = 5)
lootdoubles = FALSE
diff --git a/code/modules/smithing/anvil.dm b/code/modules/smithing/anvil.dm
index 9dffc883d4..197b39272d 100644
--- a/code/modules/smithing/anvil.dm
+++ b/code/modules/smithing/anvil.dm
@@ -68,7 +68,7 @@
RECIPE_GLAIVE = /obj/item/smithing/glaivehead,
RECIPE_PIKE = /obj/item/smithing/pikehead)
-/obj/structure/anvil/Initialize()
+/obj/structure/anvil/Initialize(mapload)
..()
currentquality = anvilquality
diff --git a/code/modules/smithing/finished_items.dm b/code/modules/smithing/finished_items.dm
index 27be8c034d..97618df8fc 100644
--- a/code/modules/smithing/finished_items.dm
+++ b/code/modules/smithing/finished_items.dm
@@ -18,7 +18,7 @@
var/wielded_mult = 1
var/wield_force = 15
-/obj/item/melee/smith/Initialize()
+/obj/item/melee/smith/Initialize(mapload)
..()
if(desc == "cringe")
desc = "A handmade [name]."
@@ -55,7 +55,7 @@
icon_state = "minipick" //todo:sprite
sharpness = SHARP_POINTY//it doesnt have a blade it has a point
-/obj/item/mining_scanner/prospector/Initialize()
+/obj/item/mining_scanner/prospector/Initialize(mapload)
..()
var/mutable_appearance/overlay
desc = "A handmade [name]."
@@ -73,7 +73,7 @@
icon_state = "pickaxe"
sharpness = SHARP_POINTY
-/obj/item/pickaxe/smithed/Initialize()
+/obj/item/pickaxe/smithed/Initialize(mapload)
..()
desc = "A handmade [name]."
var/mutable_appearance/overlay
@@ -94,7 +94,7 @@
icon_state = "shovel"
sharpness = SHARP_EDGED //it cuts through the earth
-/obj/item/shovel/smithed/Initialize()
+/obj/item/shovel/smithed/Initialize(mapload)
..()
desc = "A handmade [name]."
var/mutable_appearance/overlay
diff --git a/code/modules/smithing/furnace.dm b/code/modules/smithing/furnace.dm
index ee1d6a1b93..70bff32030 100644
--- a/code/modules/smithing/furnace.dm
+++ b/code/modules/smithing/furnace.dm
@@ -10,7 +10,7 @@
var/fueluse = 1
-/obj/structure/furnace/Initialize()
+/obj/structure/furnace/Initialize(mapload)
..()
create_reagents(250, TRANSPARENT)
START_PROCESSING(SSobj, src)
diff --git a/code/modules/spells/spell.dm b/code/modules/spells/spell.dm
index 2272a14612..b740cca114 100644
--- a/code/modules/spells/spell.dm
+++ b/code/modules/spells/spell.dm
@@ -15,7 +15,7 @@
var/action_background_icon_state = "bg_spell"
var/base_action = /datum/action/spell_action
-/obj/effect/proc_holder/Initialize()
+/obj/effect/proc_holder/Initialize(mapload)
. = ..()
if(has_action)
action = new base_action(src)
@@ -144,7 +144,7 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for th
action_background_icon_state = "bg_spell"
base_action = /datum/action/spell_action/spell
-/obj/effect/proc_holder/spell/Initialize()
+/obj/effect/proc_holder/spell/Initialize(mapload)
. = ..()
if(mobs_whitelist)
mobs_whitelist = typecacheof(mobs_whitelist)
@@ -204,7 +204,7 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for th
/obj/effect/proc_holder/spell/proc/playMagSound()
playsound(get_turf(usr), sound,50,1)
-/obj/effect/proc_holder/spell/Initialize()
+/obj/effect/proc_holder/spell/Initialize(mapload)
. = ..()
START_PROCESSING(SSfastprocess, src)
diff --git a/code/modules/spells/spell_types/construct_spells.dm b/code/modules/spells/spell_types/construct_spells.dm
index e8f3ab7d06..7a22d1498a 100644
--- a/code/modules/spells/spell_types/construct_spells.dm
+++ b/code/modules/spells/spell_types/construct_spells.dm
@@ -317,6 +317,6 @@
new /obj/effect/temp_visual/cult/sac(T)
for(var/obj/O in range(src,1))
if(O.density && !istype(O, /obj/structure/destructible/cult))
- O.take_damage(90, BRUTE, "melee", 0)
+ O.take_damage(90, BRUTE, MELEE, 0)
new /obj/effect/temp_visual/cult/turf/floor
..()
diff --git a/code/modules/spells/spell_types/forcewall.dm b/code/modules/spells/spell_types/forcewall.dm
index e0c21066cf..be7bb4cbd3 100644
--- a/code/modules/spells/spell_types/forcewall.dm
+++ b/code/modules/spells/spell_types/forcewall.dm
@@ -30,11 +30,11 @@
. = ..()
wizard = summoner
-/obj/effect/forcefield/wizard/CanPass(atom/movable/mover, turf/target)
+/obj/effect/forcefield/wizard/CanAllowThrough(atom/movable/mover, turf/target)
+ . = ..()
if(mover == wizard)
return TRUE
if(ismob(mover))
var/mob/M = mover
if(M.anti_magic_check(chargecost = 0))
return TRUE
- return FALSE
diff --git a/code/modules/spells/spell_types/godhand.dm b/code/modules/spells/spell_types/godhand.dm
index fe53fd37e4..073f96d498 100644
--- a/code/modules/spells/spell_types/godhand.dm
+++ b/code/modules/spells/spell_types/godhand.dm
@@ -15,7 +15,7 @@
throw_speed = 0
var/charges = 1
-/obj/item/melee/touch_attack/Initialize()
+/obj/item/melee/touch_attack/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, ABSTRACT_ITEM_TRAIT)
diff --git a/code/modules/spells/spell_types/trigger.dm b/code/modules/spells/spell_types/trigger.dm
index df579d9243..4a48c868b8 100644
--- a/code/modules/spells/spell_types/trigger.dm
+++ b/code/modules/spells/spell_types/trigger.dm
@@ -4,7 +4,7 @@
var/list/linked_spells = list() //those are just referenced by the trigger spell and are unaffected by it directly
var/list/starting_spells = list() //those are added on New() to contents from default spells and are deleted when the trigger spell is deleted to prevent memory leaks
-/obj/effect/proc_holder/spell/pointed/trigger/Initialize()
+/obj/effect/proc_holder/spell/pointed/trigger/Initialize(mapload)
. = ..()
for(var/spell in starting_spells)
var/spell_to_add = text2path(spell)
diff --git a/code/modules/station_goals/dna_vault.dm b/code/modules/station_goals/dna_vault.dm
index 69f2d5454e..297f918c6f 100644
--- a/code/modules/station_goals/dna_vault.dm
+++ b/code/modules/station_goals/dna_vault.dm
@@ -145,7 +145,7 @@
var/list/obj/structure/fillers = list()
-/obj/machinery/dna_vault/Initialize()
+/obj/machinery/dna_vault/Initialize(mapload)
//TODO: Replace this,bsa and gravgen with some big machinery datum
var/list/occupied = list()
for(var/direct in list(EAST,WEST,SOUTHEAST,SOUTHWEST))
diff --git a/code/modules/station_goals/shield.dm b/code/modules/station_goals/shield.dm
index e317820e7d..f17af626a1 100644
--- a/code/modules/station_goals/shield.dm
+++ b/code/modules/station_goals/shield.dm
@@ -95,7 +95,7 @@
var/static/gid = 0
var/id = 0
-/obj/machinery/satellite/Initialize()
+/obj/machinery/satellite/Initialize(mapload)
. = ..()
id = gid++
diff --git a/code/modules/surgery/advanced/brainwashing.dm b/code/modules/surgery/advanced/brainwashing.dm
index 2a09fd2b93..7ad7af273a 100644
--- a/code/modules/surgery/advanced/brainwashing.dm
+++ b/code/modules/surgery/advanced/brainwashing.dm
@@ -1,7 +1,10 @@
/obj/item/disk/surgery/brainwashing
name = "Brainwashing Surgery Disk"
desc = "The disk provides instructions on how to impress an order on a brain, making it the primary objective of the patient."
- surgeries = list(/datum/surgery/advanced/brainwashing)
+ surgeries = list(
+ /datum/surgery/advanced/brainwashing,
+ /datum/surgery/advanced/robot_brainwashing)
+
/datum/surgery/advanced/brainwashing
name = "Brainwashing"
desc = "A surgical procedure which directly implants a directive into the patient's brain, making it their absolute priority. It can be cleared using a mindshield implant."
@@ -23,11 +26,16 @@
if(!B)
return FALSE
return TRUE
+
/datum/surgery_step/brainwash
name = "brainwash"
implements = list(TOOL_HEMOSTAT = 85, TOOL_WIRECUTTER = 50, /obj/item/stack/packageWrap = 35, /obj/item/stack/cable_coil = 15)
time = 200
+ preop_sound = 'sound/surgery/hemostat1.ogg'
+ success_sound = 'sound/surgery/hemostat1.ogg'
+ failure_sound = 'sound/surgery/organ2.ogg'
var/objective
+
/datum/surgery_step/brainwash/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
objective = stripped_input(user, "Choose the objective to imprint on your victim's brain.", "Brainwashing", null, MAX_MESSAGE_LEN)
if(!objective)
diff --git a/code/modules/surgery/advanced/lobotomy.dm b/code/modules/surgery/advanced/lobotomy.dm
index b3b3b4aa1d..fdc5e9b522 100644
--- a/code/modules/surgery/advanced/lobotomy.dm
+++ b/code/modules/surgery/advanced/lobotomy.dm
@@ -12,6 +12,7 @@
target_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
possible_locs = list(BODY_ZONE_HEAD)
requires_bodypart_type = 0
+
/datum/surgery/advanced/lobotomy/can_start(mob/user, mob/living/carbon/target, obj/item/tool)
if(!..())
return FALSE
@@ -19,11 +20,16 @@
if(!B)
return FALSE
return TRUE
+
/datum/surgery_step/lobotomize
name = "perform lobotomy"
implements = list(TOOL_SCALPEL = 85, /obj/item/melee/transforming/energy/sword = 55, /obj/item/kitchen/knife = 35,
/obj/item/shard = 25, /obj/item = 20)
time = 100
+ preop_sound = 'sound/surgery/scalpel1.ogg'
+ success_sound = 'sound/surgery/scalpel2.ogg'
+ failure_sound = 'sound/surgery/organ2.ogg'
+
/datum/surgery_step/lobotomize/tool_check(mob/user, obj/item/tool)
if(implement_type == /obj/item && !tool.get_sharpness())
return FALSE
diff --git a/code/modules/surgery/advanced/pacification.dm b/code/modules/surgery/advanced/pacification.dm
index 7b85015420..4a68f93a06 100644
--- a/code/modules/surgery/advanced/pacification.dm
+++ b/code/modules/surgery/advanced/pacification.dm
@@ -11,15 +11,20 @@
target_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
possible_locs = list(BODY_ZONE_HEAD)
requires_bodypart_type = 0
+
/datum/surgery/advanced/pacify/can_start(mob/user, mob/living/carbon/target, obj/item/tool)
. = ..()
var/obj/item/organ/brain/B = target.getorganslot(ORGAN_SLOT_BRAIN)
if(!B)
return FALSE
+
/datum/surgery_step/pacify
name = "rewire brain"
implements = list(TOOL_HEMOSTAT = 100, TOOL_SCREWDRIVER = 35, /obj/item/pen = 15)
time = 40
+ preop_sound = 'sound/surgery/hemostat1.ogg'
+ success_sound = 'sound/surgery/hemostat1.ogg'
+ failure_sound = 'sound/surgery/organ2.ogg'
/datum/surgery_step/pacify/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(user, target, "You begin to pacify [target]...",
diff --git a/code/modules/surgery/advanced/revival.dm b/code/modules/surgery/advanced/revival.dm
index 945dee48e7..eb186feafa 100644
--- a/code/modules/surgery/advanced/revival.dm
+++ b/code/modules/surgery/advanced/revival.dm
@@ -12,6 +12,7 @@
target_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
possible_locs = list(BODY_ZONE_HEAD)
requires_bodypart_type = 0
+
/datum/surgery/advanced/revival/can_start(mob/user, mob/living/carbon/target, obj/item/tool)
if(!..())
return FALSE
@@ -23,10 +24,14 @@
if(!B)
return FALSE
return TRUE
+
/datum/surgery_step/revive
name = "electrically stimulate brain"
implements = list(/obj/item/shockpaddles = 100, /obj/item/abductor/gizmo = 100, /obj/item/rod_of_asclepius = 100, /obj/item/melee/baton = 75, /obj/item/organ/cyberimp/arm/baton = 75, /obj/item/organ/cyberimp/arm/gun/taser = 60, /obj/item/gun/energy/e_gun/advtaser = 60, /obj/item/gun/energy/taser = 60)
time = 120
+ success_sound = 'sound/magic/lightningbolt.ogg'
+ failure_sound = 'sound/magic/lightningbolt.ogg'
+
/datum/surgery_step/revive/tool_check(mob/user, obj/item/tool)
. = TRUE
if(istype(tool, /obj/item/shockpaddles))
@@ -53,11 +58,16 @@
"[user] prepares to shock [target]'s brain with [tool].")
target.notify_ghost_cloning("Someone is trying to zap your brain. Re-enter your corpse if you want to be revived!", source = target)
+/datum/surgery_step/revive/play_preop_sound(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ if(istype(tool, /obj/item/shockpaddles))
+ playsound(tool, 'sound/machines/defib_charge.ogg', 75, 0)
+ else
+ ..()
+
/datum/surgery_step/revive/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(user, target, "You successfully shock [target]'s brain with [tool]...",
"[user] send a powerful shock to [target]'s brain with [tool]...",
"[user] send a powerful shock to [target]'s brain with [tool]...")
- playsound(get_turf(target), 'sound/magic/lightningbolt.ogg', 50, 1)
target.adjustOxyLoss(-50, 0)
target.updatehealth()
var/tplus = world.time - target.timeofdeath
@@ -86,6 +96,5 @@
display_results(user, target, "You shock [target]'s brain with [tool], but [target.p_they()] doesn't react.",
"[user] send a powerful shock to [target]'s brain with [tool], but [target.p_they()] doesn't react.",
"[user] send a powerful shock to [target]'s brain with [tool], but [target.p_they()] doesn't react.")
- playsound(get_turf(target), 'sound/magic/lightningbolt.ogg', 50, 1)
target.adjustOrganLoss(ORGAN_SLOT_BRAIN, 15, 199)
return FALSE
diff --git a/code/modules/surgery/advanced/robot_brainwashing.dm b/code/modules/surgery/advanced/robot_brainwashing.dm
new file mode 100644
index 0000000000..427005b4c0
--- /dev/null
+++ b/code/modules/surgery/advanced/robot_brainwashing.dm
@@ -0,0 +1,60 @@
+/datum/surgery/advanced/robot_brainwashing
+ name = "Reprogramming"
+ desc = "A surgical procedure which hardcodes a directive into the patient's logic subroutines, making it their absolute priority. It can be purged using a mindshield implant."
+ possible_locs = list(BODY_ZONE_HEAD)
+ requires_bodypart_type = BODYPART_ROBOTIC
+ steps = list(/datum/surgery_step/mechanic_open,
+ /datum/surgery_step/open_hatch,
+ /datum/surgery_step/mechanic_unwrench,
+ /datum/surgery_step/prepare_electronics,
+ /datum/surgery_step/reprogram,
+ /datum/surgery_step/mechanic_wrench,
+ /datum/surgery_step/mechanic_close)
+
+/datum/surgery/advanced/reprogramming/can_start(mob/user, mob/living/carbon/target, obj/item/tool)
+ if(!..())
+ return FALSE
+ var/obj/item/organ/brain/B = target.getorganslot(ORGAN_SLOT_BRAIN)
+ if(!B)
+ return FALSE
+ return TRUE
+
+/datum/surgery_step/reprogram
+ name = "reprogram"
+ implements = list(TOOL_MULTITOOL = 85, TOOL_HEMOSTAT = 50, TOOL_WIRECUTTER = 35, /obj/item/stack/packageWrap = 35, /obj/item/stack/cable_coil = 15, /obj/item/card/emag = 100)
+ time = 200
+ var/objective
+
+/datum/surgery_step/reprogram/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ objective = stripped_input(user, "Choose the objective to imprint on your victim's posibrain.", "Reprogramming", null, MAX_MESSAGE_LEN)
+ if(!objective)
+ return -1
+ display_results(user, target, "You begin to reprogram [target]...",
+ "[user] begins to fix [target]'s posibrain.",
+ "[user] begins to perform surgery on [target]'s posibrain.")
+
+/datum/surgery_step/reprogram/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ if(!target.mind)
+ to_chat(user, "[target] doesn't respond to the reprogramming, as if [target.p_they()] lacked a mind...")
+ return FALSE
+ if(HAS_TRAIT(target, TRAIT_MINDSHIELD))
+ to_chat(user, "You hear a faint buzzing from a device inside [target]'s posibrain, and the programming is purged.")
+ return FALSE
+ display_results(user, target, "You succeed in reprogramming [target].",
+ "[user] successfully fixes [target]'s posibrain!",
+ "[user] completes the surgery on [target]'s posibrain.")
+ to_chat(target, "A new directive fills your mind... you feel forced to obey it!")
+ brainwash(target, objective)
+ message_admins("[ADMIN_LOOKUPFLW(user)] surgically synth-brainwashed [ADMIN_LOOKUPFLW(target)] with the objective '[objective]'.")
+ log_game("[key_name(user)] surgically synth-brainwashed [key_name(target)] with the objective '[objective]'.")
+ return TRUE
+
+/datum/surgery_step/reprogram/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ if(target.getorganslot(ORGAN_SLOT_BRAIN))
+ display_results(user, target, "You screw up, causing more damage!",
+ "[user] screws up, causing damage to the circuits!/span>",
+ "[user] completes the surgery on [target]'s posibrain.")
+ target.adjustOrganLoss(ORGAN_SLOT_BRAIN, 40)
+ else
+ user.visible_message("[user] suddenly notices that the posibrain [user.p_they()] [user.p_were()] working on is not there anymore.", "You suddenly notice that the posibrain you were working on is not there anymore.")
+ return FALSE
diff --git a/code/modules/surgery/amputation.dm b/code/modules/surgery/amputation.dm
index e00ff66ee7..2c3524a598 100644
--- a/code/modules/surgery/amputation.dm
+++ b/code/modules/surgery/amputation.dm
@@ -4,10 +4,13 @@
target_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
possible_locs = list(BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG, BODY_ZONE_HEAD)
requires_bodypart_type = 0
+
/datum/surgery_step/sever_limb
name = "sever limb"
implements = list(TOOL_SCALPEL = 100, TOOL_SAW = 100, /obj/item/melee/transforming/energy/sword/cyborg/saw = 100, /obj/item/melee/arm_blade = 80, /obj/item/chainsaw = 80, /obj/item/mounted_chainsaw = 80, /obj/item/fireaxe = 50, /obj/item/hatchet = 40, /obj/item/kitchen/knife/butcher = 25)
time = 64
+ preop_sound = 'sound/surgery/scalpel1.ogg'
+ success_sound = 'sound/surgery/organ2.ogg'
/datum/surgery_step/sever_limb/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(user, target, "You begin to sever [target]'s [parse_zone(target_zone)]...",
diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm
index 6f95fd0f8d..a89727d183 100644
--- a/code/modules/surgery/bodyparts/_bodyparts.dm
+++ b/code/modules/surgery/bodyparts/_bodyparts.dm
@@ -388,7 +388,7 @@
for(var/i in clothing)
var/obj/item/clothing/clothes_check = i
// unlike normal armor checks, we tabluate these piece-by-piece manually so we can also pass on appropriate damage the clothing's limbs if necessary
- if(clothes_check.armor.getRating("wound"))
+ if(clothes_check.armor.getRating(WOUND))
bare_wound_bonus = 0
break
@@ -447,7 +447,7 @@
for(var/c in clothing)
var/obj/item/clothing/C = c
// unlike normal armor checks, we tabluate these piece-by-piece manually so we can also pass on appropriate damage the clothing's limbs if necessary
- armor_ablation += C.armor.getRating("wound")
+ armor_ablation += C.armor.getRating(WOUND)
if(wounding_type == WOUND_SLASH)
C.take_damage_zone(body_zone, damage, BRUTE, armour_penetration)
else if(wounding_type == WOUND_BURN && damage >= 10) // lazy way to block freezing from shredding clothes without adding another var onto apply_damage()
diff --git a/code/modules/surgery/bodyparts/helpers.dm b/code/modules/surgery/bodyparts/helpers.dm
index c2c5582f59..40f599c103 100644
--- a/code/modules/surgery/bodyparts/helpers.dm
+++ b/code/modules/surgery/bodyparts/helpers.dm
@@ -124,19 +124,25 @@
/mob/living/carbon/alien/larva/get_leg_ignore()
return TRUE
-/mob/living/proc/get_missing_limbs()
+/mob/living/proc/get_missing_limbs(exclude_head = FALSE)
return list()
-/mob/living/carbon/get_missing_limbs()
+/mob/living/carbon/get_missing_limbs(exclude_head = FALSE)
var/list/full = list(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG)
for(var/zone in full)
+ if(exclude_head && zone == BODY_ZONE_HEAD) //this is needed in case we don't care for the lack of a dullahan's head or something.
+ full -= zone
+ continue
if(get_bodypart(zone))
full -= zone
return full
-/mob/living/carbon/alien/larva/get_missing_limbs()
+/mob/living/carbon/alien/larva/get_missing_limbs(exclude_head = FALSE)
var/list/full = list(BODY_ZONE_HEAD, BODY_ZONE_CHEST)
for(var/zone in full)
+ if(exclude_head && zone == BODY_ZONE_HEAD) //I guess????
+ full -= zone
+ continue
if(get_bodypart(zone))
full -= zone
return full
diff --git a/code/modules/surgery/brain_surgery.dm b/code/modules/surgery/brain_surgery.dm
index cf626ce7b4..e5f91c9c01 100644
--- a/code/modules/surgery/brain_surgery.dm
+++ b/code/modules/surgery/brain_surgery.dm
@@ -11,10 +11,15 @@
target_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
possible_locs = list(BODY_ZONE_HEAD)
requires_bodypart_type = 0
+
/datum/surgery_step/fix_brain
name = "fix brain"
implements = list(TOOL_HEMOSTAT = 85, TOOL_SCREWDRIVER = 35, /obj/item/pen = 15) //don't worry, pouring some alcohol on their open brain will get that chance to 100
time = 120 //long and complicated
+ preop_sound = 'sound/surgery/hemostat1.ogg'
+ success_sound = 'sound/surgery/hemostat1.ogg'
+ failure_sound = 'sound/surgery/organ2.ogg'
+
/datum/surgery/brain_surgery/can_start(mob/user, mob/living/carbon/target, obj/item/tool)
var/obj/item/organ/brain/B = target.getorganslot(ORGAN_SLOT_BRAIN)
if(!B || istype(B, /obj/item/organ/brain/ipc))
diff --git a/code/modules/surgery/burn_dressing.dm b/code/modules/surgery/burn_dressing.dm
index 14bca66139..f704c9b414 100644
--- a/code/modules/surgery/burn_dressing.dm
+++ b/code/modules/surgery/burn_dressing.dm
@@ -28,6 +28,9 @@
implements = list(TOOL_HEMOSTAT = 100, TOOL_SCALPEL = 85, TOOL_SAW = 60, TOOL_WIRECUTTER = 40)
time = 30
repeatable = TRUE
+ preop_sound = 'sound/surgery/scalpel1.ogg'
+ success_sound = 'sound/surgery/retractor2.ogg'
+ failure_sound = 'sound/surgery/organ1.ogg'
/datum/surgery_step/debride/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
if(surgery.operated_wound)
diff --git a/code/modules/surgery/cavity_implant.dm b/code/modules/surgery/cavity_implant.dm
index 200e33b5f8..7cc545027c 100644
--- a/code/modules/surgery/cavity_implant.dm
+++ b/code/modules/surgery/cavity_implant.dm
@@ -3,6 +3,7 @@
steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/retract_skin, /datum/surgery_step/incise, /datum/surgery_step/handle_cavity, /datum/surgery_step/close)
target_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
possible_locs = list(BODY_ZONE_CHEST)
+
//handle cavity
/datum/surgery_step/handle_cavity
name = "implant item"
@@ -11,11 +12,15 @@
implements = list(/obj/item = 100)
repeatable = TRUE
time = 32
+ preop_sound = 'sound/surgery/organ1.ogg'
+ success_sound = 'sound/surgery/organ2.ogg'
var/obj/item/IC = null
+
/datum/surgery_step/handle_cavity/tool_check(mob/user, obj/item/tool)
if(istype(tool, /obj/item/cautery) || istype(tool, /obj/item/gun/energy/laser))
return FALSE
return !tool.get_temperature()
+
/datum/surgery_step/handle_cavity/preop(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery)
var/obj/item/bodypart/chest/CH = target.get_bodypart(BODY_ZONE_CHEST)
IC = CH.cavity_item
diff --git a/code/modules/surgery/coronary_bypass.dm b/code/modules/surgery/coronary_bypass.dm
index 69f5062032..8880744dd4 100644
--- a/code/modules/surgery/coronary_bypass.dm
+++ b/code/modules/surgery/coronary_bypass.dm
@@ -12,13 +12,15 @@
return TRUE
return FALSE
-
//an incision but with greater bleed, and a 90% base success chance
/datum/surgery_step/incise_heart
name = "incise heart"
implements = list(TOOL_SCALPEL = 90, /obj/item/melee/transforming/energy/sword = 45, /obj/item/kitchen/knife = 45,
/obj/item/shard = 25)
time = 16
+ preop_sound = 'sound/surgery/scalpel1.ogg'
+ success_sound = 'sound/surgery/scalpel2.ogg'
+ failure_sound = 'sound/surgery/organ2.ogg'
/datum/surgery_step/incise_heart/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(user, target, "You begin to make an incision in [target]'s heart...",
@@ -53,6 +55,9 @@
name = "graft coronary bypass"
implements = list(TOOL_HEMOSTAT = 90, TOOL_WIRECUTTER = 35, /obj/item/stack/packageWrap = 15, /obj/item/stack/cable_coil = 5)
time = 90
+ preop_sound = 'sound/surgery/hemostat1.ogg'
+ success_sound = 'sound/surgery/hemostat1.ogg'
+ failure_sound = 'sound/surgery/organ2.ogg'
/datum/surgery_step/coronary_bypass/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(user, target, "You begin to graft a bypass onto [target]'s heart...",
diff --git a/code/modules/surgery/healing.dm b/code/modules/surgery/healing.dm
index 52db6624e7..3d2cac05d1 100644
--- a/code/modules/surgery/healing.dm
+++ b/code/modules/surgery/healing.dm
@@ -32,6 +32,8 @@
implements = list(TOOL_HEMOSTAT = 100, TOOL_SCREWDRIVER = 65, /obj/item/pen = 55)
repeatable = TRUE
time = 15
+ success_sound = 'sound/surgery/retractor2.ogg'
+ failure_sound = 'sound/surgery/organ2.ogg'
var/brutehealing = 0
var/burnhealing = 0
var/missinghpbonus = 0 //heals an extra point of damager per X missing damage of type (burn damage for burn healing, brute for brute). Smaller Number = More Healing!
diff --git a/code/modules/surgery/implant_removal.dm b/code/modules/surgery/implant_removal.dm
index 7010638004..5162fafbc0 100644
--- a/code/modules/surgery/implant_removal.dm
+++ b/code/modules/surgery/implant_removal.dm
@@ -3,12 +3,15 @@
steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/retract_skin, /datum/surgery_step/extract_implant, /datum/surgery_step/close)
target_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
possible_locs = list(BODY_ZONE_CHEST)
+
//extract implant
/datum/surgery_step/extract_implant
name = "extract implant"
implements = list(TOOL_HEMOSTAT = 100, TOOL_CROWBAR = 65)
time = 64
+ success_sound = 'sound/surgery/hemostat1.ogg'
var/obj/item/implant/I = null
+
/datum/surgery_step/extract_implant/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
for(var/obj/item/O in target.implants)
I = O
@@ -48,6 +51,7 @@
else
to_chat(user, "You can't find anything in [target]'s [target_zone]!")
return 1
+
/datum/surgery/implant_removal/mechanic
name = "implant removal"
requires_bodypart_type = BODYPART_ROBOTIC
diff --git a/code/modules/surgery/lobectomy.dm b/code/modules/surgery/lobectomy.dm
index 4b3a52f635..3117c5af9b 100644
--- a/code/modules/surgery/lobectomy.dm
+++ b/code/modules/surgery/lobectomy.dm
@@ -19,6 +19,9 @@
implements = list(TOOL_SCALPEL = 95, /obj/item/melee/transforming/energy/sword = 65, /obj/item/kitchen/knife = 45,
/obj/item/shard = 35)
time = 42
+ preop_sound = 'sound/surgery/scalpel1.ogg'
+ success_sound = 'sound/surgery/organ1.ogg'
+ failure_sound = 'sound/surgery/organ2.ogg'
/datum/surgery_step/lobectomy/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(user, target, "You begin to make an incision in [target]'s lungs...",
diff --git a/code/modules/surgery/mechanic_steps.dm b/code/modules/surgery/mechanic_steps.dm
index 6f03740560..3f6887d78c 100644
--- a/code/modules/surgery/mechanic_steps.dm
+++ b/code/modules/surgery/mechanic_steps.dm
@@ -3,10 +3,12 @@
name = "unscrew shell"
implements = list(
TOOL_SCREWDRIVER = 100,
- TOOL_SCALPEL = 75, // med borgs could try to unskrew shell with scalpel
+ TOOL_SCALPEL = 75, // med borgs could try to unscrew shell with scalpel
/obj/item/kitchen/knife = 50,
/obj/item = 10) // 10% success with any sharp item.
time = 24
+ preop_sound = 'sound/items/screwdriver.ogg'
+ success_sound = 'sound/items/screwdriver2.ogg'
/datum/surgery_step/mechanic_open/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(user, target, "You begin to unscrew the shell of [target]'s [parse_zone(target_zone)]...",
@@ -16,7 +18,11 @@
/datum/surgery_step/mechanic_open/tool_check(mob/user, obj/item/tool)
if(implement_type == /obj/item && !tool.get_sharpness())
return FALSE
+ if(tool.usesound)
+ preop_sound = tool.usesound
+
return TRUE
+
//close shell
/datum/surgery_step/mechanic_close
name = "screw shell"
@@ -26,6 +32,8 @@
/obj/item/kitchen/knife = 50,
/obj/item = 10) // 10% success with any sharp item.
time = 24
+ preop_sound = 'sound/items/screwdriver.ogg'
+ success_sound = 'sound/items/screwdriver2.ogg'
/datum/surgery_step/mechanic_close/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(user, target, "You begin to screw the shell of [target]'s [parse_zone(target_zone)]...",
@@ -35,7 +43,11 @@
/datum/surgery_step/mechanic_close/tool_check(mob/user, obj/item/tool)
if(implement_type == /obj/item && !tool.get_sharpness())
return FALSE
+ if(tool.usesound)
+ preop_sound = tool.usesound
+
return TRUE
+
//prepare electronics
/datum/surgery_step/prepare_electronics
name = "prepare electronics (multitool)"
@@ -43,6 +55,8 @@
TOOL_MULTITOOL = 100,
TOOL_HEMOSTAT = 10) // try to reboot internal controllers via short circuit with some conductor
time = 24
+ preop_sound = 'sound/items/taperecorder/tape_flip.ogg'
+ success_sound = 'sound/items/taperecorder/taperecorder_close.ogg'
/datum/surgery_step/prepare_electronics/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(user, target, "You begin to prepare electronics in [target]'s [parse_zone(target_zone)]...",
@@ -56,12 +70,19 @@
TOOL_WRENCH = 100,
TOOL_RETRACTOR = 10)
time = 24
+ preop_sound = 'sound/items/ratchet.ogg'
/datum/surgery_step/mechanic_unwrench/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(user, target, "You begin to unwrench some bolts in [target]'s [parse_zone(target_zone)]...",
"[user] begins to unwrench some bolts in [target]'s [parse_zone(target_zone)].",
"[user] begins to unwrench some bolts in [target]'s [parse_zone(target_zone)].")
+/datum/surgery_step/mechanic_unwrench/tool_check(mob/user, obj/item/tool)
+ if(tool.usesound)
+ preop_sound = tool.usesound
+
+ return TRUE
+
//wrench
/datum/surgery_step/mechanic_wrench
name = "wrench bolts"
@@ -69,23 +90,38 @@
TOOL_WRENCH = 100,
TOOL_RETRACTOR = 10)
time = 24
+ preop_sound = 'sound/items/ratchet.ogg'
/datum/surgery_step/mechanic_wrench/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(user, target, "You begin to wrench some bolts in [target]'s [parse_zone(target_zone)]...",
"[user] begins to wrench some bolts in [target]'s [parse_zone(target_zone)].",
"[user] begins to wrench some bolts in [target]'s [parse_zone(target_zone)].")
+/datum/surgery_step/mechanic_wrench/tool_check(mob/user, obj/item/tool)
+ if(tool.usesound)
+ preop_sound = tool.usesound
+
+ return TRUE
+
//open hatch
/datum/surgery_step/open_hatch
name = "open the hatch (empty hand)"
accept_hand = 1
time = 10
+ preop_sound = 'sound/items/ratchet.ogg'
+ preop_sound = 'sound/machines/doorclick.ogg'
/datum/surgery_step/open_hatch/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(user, target, "You begin to open the hatch holders in [target]'s [parse_zone(target_zone)]...",
"[user] begins to open the hatch holders in [target]'s [parse_zone(target_zone)].",
"[user] begins to open the hatch holders in [target]'s [parse_zone(target_zone)].")
+/datum/surgery_step/mechanic_unwrench/tool_check(mob/user, obj/item/tool)
+ if(tool.usesound)
+ preop_sound = tool.usesound
+
+ return TRUE
+
//cut wires
/datum/surgery_step/cut_wires
name = "cut wires"
diff --git a/code/modules/surgery/organ_manipulation.dm b/code/modules/surgery/organ_manipulation.dm
index 0876357e8e..4104f0ce7f 100644
--- a/code/modules/surgery/organ_manipulation.dm
+++ b/code/modules/surgery/organ_manipulation.dm
@@ -14,6 +14,7 @@
//there should be bone fixing
/datum/surgery_step/close
)
+
/datum/surgery/organ_manipulation/soft
possible_locs = list(BODY_ZONE_PRECISE_GROIN, BODY_ZONE_PRECISE_EYES, BODY_ZONE_PRECISE_MOUTH, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)
steps = list(
@@ -24,6 +25,7 @@
/datum/surgery_step/manipulate_organs,
/datum/surgery_step/close
)
+
/datum/surgery/organ_manipulation/alien
name = "Alien organ manipulation"
possible_locs = list(BODY_ZONE_CHEST, BODY_ZONE_HEAD, BODY_ZONE_PRECISE_GROIN, BODY_ZONE_PRECISE_EYES, BODY_ZONE_PRECISE_MOUTH, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)
@@ -36,6 +38,7 @@
/datum/surgery_step/manipulate_organs,
/datum/surgery_step/close
)
+
/datum/surgery/organ_manipulation/mechanic
name = "Prosthesis organ manipulation"
possible_locs = list(BODY_ZONE_CHEST, BODY_ZONE_HEAD)
@@ -49,6 +52,7 @@
/datum/surgery_step/mechanic_wrench,
/datum/surgery_step/mechanic_close
)
+
/datum/surgery/organ_manipulation/mechanic/soft
possible_locs = list(BODY_ZONE_PRECISE_GROIN, BODY_ZONE_PRECISE_EYES, BODY_ZONE_PRECISE_MOUTH, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)
steps = list(
@@ -58,20 +62,27 @@
/datum/surgery_step/manipulate_organs,
/datum/surgery_step/mechanic_close
)
+
/datum/surgery_step/manipulate_organs
time = 64
name = "manipulate organs"
repeatable = 1
implements = list(/obj/item/organ = 100, /obj/item/organ_storage = 100)
+ preop_sound = 'sound/surgery/organ2.ogg'
+ success_sound = 'sound/surgery/organ1.ogg'
var/implements_extract = list(TOOL_HEMOSTAT = 100, TOOL_CROWBAR = 55)
var/current_type
var/obj/item/organ/I = null
+
/datum/surgery_step/manipulate_organs/New()
..()
implements = implements + implements_extract
+
/datum/surgery_step/manipulate_organs/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
I = null
if(istype(tool, /obj/item/organ_storage))
+ preop_sound = initial(preop_sound)
+ success_sound = initial(success_sound)
if(!tool.contents.len)
to_chat(user, "There is nothing inside [tool]!")
return -1
@@ -82,6 +93,8 @@
tool = I
if(isorgan(tool))
current_type = "insert"
+ preop_sound = 'sound/surgery/hemostat1.ogg'
+ success_sound = 'sound/surgery/organ2.ogg'
I = tool
if(target_zone != I.zone || target.getorganslot(I.slot))
to_chat(user, "There is no room for [I] in [target]'s [parse_zone(target_zone)]!")
diff --git a/code/modules/surgery/organic_steps.dm b/code/modules/surgery/organic_steps.dm
index 8e893875a9..9e93042f63 100644
--- a/code/modules/surgery/organic_steps.dm
+++ b/code/modules/surgery/organic_steps.dm
@@ -4,6 +4,8 @@
implements = list(TOOL_SCALPEL = 100, /obj/item/melee/transforming/energy/sword = 75, /obj/item/kitchen/knife = 65,
/obj/item/shard = 45, /obj/item = 30) // 30% success with any sharp item.
time = 16
+ preop_sound = 'sound/surgery/scalpel1.ogg'
+ success_sound = 'sound/surgery/scalpel2.ogg'
/datum/surgery_step/incise/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(user, target, "You begin to make an incision in [target]'s [parse_zone(target_zone)]...",
@@ -41,6 +43,7 @@
name = "clamp bleeders"
implements = list(TOOL_HEMOSTAT = 100, TOOL_WIRECUTTER = 60, /obj/item/stack/packageWrap = 35, /obj/item/stack/cable_coil = 15)
time = 24
+ preop_sound = 'sound/surgery/hemostat1.ogg'
/datum/surgery_step/clamp_bleeders/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(user, target, "You begin to clamp bleeders in [target]'s [parse_zone(target_zone)]...",
@@ -56,25 +59,28 @@
if(BP)
BP.generic_bleedstacks -= 3
return ..()
+
//retract skin
/datum/surgery_step/retract_skin
name = "retract skin"
implements = list(TOOL_RETRACTOR = 100, TOOL_SCREWDRIVER = 45, TOOL_WIRECUTTER = 35)
time = 24
+ preop_sound = 'sound/surgery/retractor1.ogg'
+ success_sound = 'sound/surgery/retractor2.ogg'
/datum/surgery_step/retract_skin/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(user, target, "You begin to retract the skin in [target]'s [parse_zone(target_zone)]...",
"[user] begins to retract the skin in [target]'s [parse_zone(target_zone)].",
"[user] begins to retract the skin in [target]'s [parse_zone(target_zone)].")
-
-
//close incision
/datum/surgery_step/close
name = "mend incision"
implements = list(TOOL_CAUTERY = 100, /obj/item/gun/energy/laser = 90, TOOL_WELDER = 70,
/obj/item = 30) // 30% success with any hot item.
time = 24
+ preop_sound = 'sound/surgery/cautery1.ogg'
+ success_sound = 'sound/surgery/cautery2.ogg'
/datum/surgery_step/close/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(user, target, "You begin to mend the incision in [target]'s [parse_zone(target_zone)]...",
@@ -85,6 +91,7 @@
if(implement_type == TOOL_WELDER || implement_type == /obj/item)
return tool.get_temperature()
return TRUE
+
/datum/surgery_step/close/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
if(locate(/datum/surgery_step/saw) in surgery.steps)
target.heal_bodypart_damage(45,0)
@@ -94,11 +101,14 @@
if(BP)
BP.generic_bleedstacks -= 3
return ..()
+
//saw bone
/datum/surgery_step/saw
name = "saw bone"
implements = list(TOOL_SAW = 100, /obj/item/melee/arm_blade = 75, /obj/item/fireaxe = 50, /obj/item/hatchet = 35, /obj/item/kitchen/knife/butcher = 25)
time = 54
+ preop_sound = 'sound/surgery/saw.ogg'
+ success_sound = 'sound/surgery/organ2.ogg'
/datum/surgery_step/saw/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(user, target, "You begin to saw through the bone in [target]'s [parse_zone(target_zone)]...",
diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm
index 0d2659dff8..998473abe3 100644
--- a/code/modules/surgery/organs/augments_arms.dm
+++ b/code/modules/surgery/organs/augments_arms.dm
@@ -14,7 +14,7 @@
var/obj/item/holder = null
// You can use this var for item path, it would be converted into an item on New()
-/obj/item/organ/cyberimp/arm/Initialize()
+/obj/item/organ/cyberimp/arm/Initialize(mapload)
. = ..()
if(ispath(holder))
holder = new holder(src)
@@ -242,7 +242,7 @@
desc = "An integrated projector mounted onto a user's arm that is able to be used as a powerful flash."
contents = newlist(/obj/item/assembly/flash/armimplant)
-/obj/item/organ/cyberimp/arm/flash/Initialize()
+/obj/item/organ/cyberimp/arm/flash/Initialize(mapload)
. = ..()
if(locate(/obj/item/assembly/flash/armimplant) in items_list)
var/obj/item/assembly/flash/armimplant/F = locate(/obj/item/assembly/flash/armimplant) in items_list
@@ -258,7 +258,7 @@
desc = "A powerful cybernetic implant that contains combat modules built into the user's arm."
contents = newlist(/obj/item/melee/transforming/energy/blade/hardlight, /obj/item/gun/medbeam, /obj/item/borg/stun, /obj/item/assembly/flash/armimplant)
-/obj/item/organ/cyberimp/arm/combat/Initialize()
+/obj/item/organ/cyberimp/arm/combat/Initialize(mapload)
. = ..()
if(locate(/obj/item/assembly/flash/armimplant) in items_list)
var/obj/item/assembly/flash/armimplant/F = locate(/obj/item/assembly/flash/armimplant) in items_list
diff --git a/code/modules/surgery/organs/eyes.dm b/code/modules/surgery/organs/eyes.dm
index 06865a0f39..526285f60d 100644
--- a/code/modules/surgery/organs/eyes.dm
+++ b/code/modules/surgery/organs/eyes.dm
@@ -246,7 +246,7 @@
var/obj/effect/abstract/eye_lighting/on_mob
var/image/mob_overlay
-/obj/item/organ/eyes/robotic/glow/Initialize()
+/obj/item/organ/eyes/robotic/glow/Initialize(mapload)
. = ..()
mob_overlay = image('icons/mob/human_face.dmi', "eyes_glow_gs")
@@ -407,7 +407,7 @@
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
var/obj/item/organ/eyes/robotic/glow/parent
-/obj/effect/abstract/eye_lighting/Initialize()
+/obj/effect/abstract/eye_lighting/Initialize(mapload)
. = ..()
parent = loc
if(!istype(parent))
diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm
index f6265969e7..cb2c02fa7c 100644
--- a/code/modules/surgery/organs/lungs.dm
+++ b/code/modules/surgery/organs/lungs.dm
@@ -76,6 +76,8 @@
var/heat_level_3_damage = HEAT_GAS_DAMAGE_LEVEL_3
var/heat_damage_type = BURN
+ var/smell_sensitivity = 1
+
var/crit_stabilizing_reagent = /datum/reagent/medicine/epinephrine
/obj/item/organ/lungs/New()
@@ -245,12 +247,16 @@
else if(alert_category)
H.clear_alert(alert_category)
var/list/breath_reagents = GLOB.gas_data.breath_reagents
+ var/static/datum/reagents/reagents_holder = new
+ reagents_holder.clear_reagents()
+ reagents_holder.chem_temp = breath.return_temperature()
for(var/gas in breath.get_gases())
if(gas in breath_reagents)
var/datum/reagent/R = breath_reagents[gas]
- H.reagents.add_reagent(R, breath.get_moles(gas) * initial(R.molarity))
+ reagents_holder.add_reagent(R, breath.get_moles(gas) * initial(R.molarity))
mole_adjustments[gas] = (gas in mole_adjustments) ? mole_adjustments[gas] - breath.get_moles(gas) : -breath.get_moles(gas)
-
+ reagents_holder.reaction(H, VAPOR, from_gas = 1)
+ H.smell(breath)
for(var/gas in mole_adjustments)
breath.adjust_moles(gas, mole_adjustments[gas])
@@ -440,7 +446,7 @@
owner.adjust_bodytemperature(30*TEMPERATURE_DAMAGE_COEFFICIENT)
if(50 to INFINITY)
owner.adjust_bodytemperature(100*TEMPERATURE_DAMAGE_COEFFICIENT)
-
+
/obj/item/organ/lungs/ipc/ui_action_click(mob/user, actiontype)
if(!owner)
return
@@ -494,7 +500,7 @@
if(owner.blood_volume <= next_warn)
to_chat(owner, "[owner.blood_volume > BLOOD_VOLUME_BAD ? "" : ""]Coolant level passed threshold - now [round(owner.blood_volume / BLOOD_VOLUME_NORMAL * 100, 0.1)] percent.")
next_warn -= (BLOOD_VOLUME_NORMAL * 0.1)
-
+
/obj/item/organ/lungs/plasmaman
name = "plasma filter"
desc = "A spongy rib-shaped mass for filtering plasma from the air."
@@ -523,6 +529,7 @@
safe_breath_min = 13
safe_breath_max = 100
emp_vulnerability = 2
+ smell_sensitivity = 1.5
/obj/item/organ/lungs/cybernetic/tier3
name = "upgraded cybernetic lungs"
@@ -540,6 +547,7 @@
SA_sleep_min = 50
BZ_brain_damage_min = 30
emp_vulnerability = 3
+ smell_sensitivity = 2
cold_level_1_threshold = 200
cold_level_2_threshold = 140
@@ -574,6 +582,8 @@
// humans usually breathe 21 but require 16/17, so 80% - 1, which is more lenient but it's fine
#define SAFE_THRESHOLD_RATIO 0.8
var/datum/gas_mixture/breath = SSair.planetary[LAVALAND_DEFAULT_ATMOS] // y'all know
+ if(breath.get_moles(GAS_METHANE) > 0.1)
+ breathing_class = BREATH_METHANE
var/pressure = breath.return_pressure()
var/total_moles = breath.total_moles()
for(var/id in breath.get_gases())
diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm
index 05f3f06b06..d4a2663374 100644
--- a/code/modules/surgery/organs/organ_internal.dm
+++ b/code/modules/surgery/organs/organ_internal.dm
@@ -31,7 +31,7 @@
var/useable = TRUE
var/list/food_reagents = list(/datum/reagent/consumable/nutriment = 5)
-/obj/item/organ/Initialize()
+/obj/item/organ/Initialize(mapload)
. = ..()
if(organ_flags & ORGAN_EDIBLE)
AddComponent(/datum/component/edible, food_reagents, null, RAW | MEAT | GROSS, null, 10, null, null, null, CALLBACK(src, .proc/OnEatFrom))
@@ -359,7 +359,7 @@
name = "Illegal organ"
desc = "Something hecked up"
-/obj/item/organ/random/Initialize()
+/obj/item/organ/random/Initialize(mapload)
..()
var/list = list(/obj/item/organ/tongue, /obj/item/organ/brain, /obj/item/organ/heart, /obj/item/organ/liver, /obj/item/organ/ears, /obj/item/organ/eyes, /obj/item/organ/tail, /obj/item/organ/stomach)
var/newtype = pick(list)
diff --git a/code/modules/surgery/organs/tongue.dm b/code/modules/surgery/organs/tongue.dm
index 0ba265c36c..b281132ce0 100644
--- a/code/modules/surgery/organs/tongue.dm
+++ b/code/modules/surgery/organs/tongue.dm
@@ -168,7 +168,7 @@
var/phomeme_type = "sans"
var/list/phomeme_types = list(/datum/accent/span/sans, /datum/accent/span/papyrus)
-/obj/item/organ/tongue/bone/Initialize()
+/obj/item/organ/tongue/bone/Initialize(mapload)
initial_accents += pick(phomeme_types)
. = ..()
diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm
index 0ffae2bb7d..06415e7685 100644
--- a/code/modules/surgery/surgery.dm
+++ b/code/modules/surgery/surgery.dm
@@ -147,7 +147,7 @@
icon_state = "datadisk1"
custom_materials = list(/datum/material/iron=300, /datum/material/glass=100)
-/obj/item/disk/surgery/debug/Initialize()
+/obj/item/disk/surgery/debug/Initialize(mapload)
. = ..()
surgeries = list()
var/list/req_tech_surgeries = subtypesof(/datum/surgery)
diff --git a/code/modules/surgery/surgery_step.dm b/code/modules/surgery/surgery_step.dm
index 456d93c73b..5e037345fe 100644
--- a/code/modules/surgery/surgery_step.dm
+++ b/code/modules/surgery/surgery_step.dm
@@ -9,6 +9,9 @@
var/list/chems_needed = list() //list of chems needed to complete the step. Even on success, the step will have no effect if there aren't the chems required in the mob.
var/require_all_chems = TRUE //any on the list or all on the list?
var/silicons_obey_prob = FALSE
+ var/preop_sound //Sound played when the step is started
+ var/success_sound //Sound played if the step succeeded
+ var/failure_sound //Sound played if the step fails
/datum/surgery_step/proc/try_op(mob/user, mob/living/target, target_zone, obj/item/tool, datum/surgery/surgery, try_to_fail = FALSE)
var/success = FALSE
@@ -56,6 +59,9 @@
if(preop(user, target, target_zone, tool, surgery) == -1)
surgery.step_in_progress = FALSE
return FALSE
+
+ play_preop_sound(user, target, target_zone, tool, surgery) // Here because most steps overwrite preop
+
if(tool)
speed_mod = tool.toolspeed //faster tools mean faster surgeries, but also less experience.
if(user.mind)
@@ -69,6 +75,7 @@
if((prob(prob_chance) || (iscyborg(user) && !silicons_obey_prob)) && chem_check(target) && !try_to_fail)
if(success(user, target, target_zone, tool, surgery))
+ play_success_sound(user, target, target_zone, tool, surgery)
var/multi = (delay/SKILL_GAIN_DELAY_DIVISOR)
if(repeatable)
multi *= 0.5 //Spammable surgeries award less experience.
@@ -76,6 +83,7 @@
advance = TRUE
else
if(failure(user, target, target_zone, tool, surgery))
+ play_failure_sound(user, target, target_zone, tool, surgery)
advance = TRUE
if(advance && !repeatable)
surgery.status++
@@ -98,18 +106,33 @@
"[user] begins to perform surgery on [target].",
"[user] begins to perform surgery on [target].")
+/datum/surgery_step/proc/play_preop_sound(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ if(!preop_sound)
+ return
+ playsound(get_turf(target), preop_sound, 75, TRUE, falloff_exponent = 12, falloff_distance = 1)
+
/datum/surgery_step/proc/success(mob/user, mob/living/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(user, target, "You succeed.",
"[user] succeeds!",
"[user] finishes.")
return TRUE
+/datum/surgery_step/proc/play_success_sound(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ if(!success_sound)
+ return
+ playsound(get_turf(target), success_sound, 75, TRUE, falloff_exponent = 12, falloff_distance = 1)
+
/datum/surgery_step/proc/failure(mob/user, mob/living/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(user, target, "You screw up!",
"[user] screws up!",
"[user] finishes.", TRUE) //By default the patient will notice if the wrong thing has been cut
return FALSE
+/datum/surgery_step/proc/play_failure_sound(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ if(!failure_sound)
+ return
+ playsound(get_turf(target), failure_sound, 75, TRUE, falloff_exponent = 12, falloff_distance = 1)
+
/datum/surgery_step/proc/tool_check(mob/user, obj/item/tool)
return TRUE
diff --git a/code/modules/surgery/tools.dm b/code/modules/surgery/tools.dm
index 1d2286214d..4161ed1f70 100644
--- a/code/modules/surgery/tools.dm
+++ b/code/modules/surgery/tools.dm
@@ -160,7 +160,7 @@
icon_state = "surgicaldrill_a"
hitsound = 'sound/items/welder.ogg'
-/obj/item/surgicaldrill/advanced/Initialize()
+/obj/item/surgicaldrill/advanced/Initialize(mapload)
. = ..()
set_light(1)
@@ -214,7 +214,7 @@
toolspeed = 1
bare_wound_bonus = 20
-/obj/item/scalpel/Initialize()
+/obj/item/scalpel/Initialize(mapload)
. = ..()
AddComponent(/datum/component/butchering, 80 * toolspeed, 100, 0)
@@ -235,7 +235,7 @@
light_color = LIGHT_COLOR_GREEN
sharpness = SHARP_POINTY
-/obj/item/scalpel/advanced/Initialize()
+/obj/item/scalpel/advanced/Initialize(mapload)
. = ..()
set_light(1)
@@ -311,7 +311,7 @@
wound_bonus = 5
bare_wound_bonus = 10
-/obj/item/circular_saw/Initialize()
+/obj/item/circular_saw/Initialize(mapload)
. = ..()
AddComponent(/datum/component/butchering, 40 * toolspeed, 100, 5, 'sound/weapons/circsawhit.ogg') //saws are very accurate and fast at butchering
diff --git a/code/modules/tcg/cards.dm b/code/modules/tcg/cards.dm
index f5c7c47aaf..7717a44410 100644
--- a/code/modules/tcg/cards.dm
+++ b/code/modules/tcg/cards.dm
@@ -353,7 +353,7 @@
material_flags = NONE
sideslist = list("nanotrasen", "syndicate")
-/obj/item/coin/thunderdome/Initialize()
+/obj/item/coin/thunderdome/Initialize(mapload)
. = ..()
transform = matrix(0.5,0,0,0,0.5,0)
@@ -377,7 +377,7 @@
var/static/radial_shuffle = image(icon = 'icons/mob/radial.dmi', icon_state = "radial_shuffle")
var/static/radial_pickup = image(icon = 'icons/mob/radial.dmi', icon_state = "radial_pickup")
-/obj/item/tcgcard_deck/Initialize()
+/obj/item/tcgcard_deck/Initialize(mapload)
. = ..()
LoadComponent(/datum/component/storage/concrete/tcg)
@@ -669,7 +669,7 @@
card.forceMove(src)
cards.Add(card)
-/obj/item/tcgcard_binder/full/Initialize() //For admemes.
+/obj/item/tcgcard_binder/full/Initialize(mapload) //For admemes.
. = ..()
for(var/cardtype in subtypesof(/datum/tcg_card))
var/obj/item/tcg_card/card = new(get_turf(src), cardtype)
diff --git a/code/modules/unit_tests/projectiles.dm b/code/modules/unit_tests/projectiles.dm
index 53ceef01d6..f1a2391c07 100644
--- a/code/modules/unit_tests/projectiles.dm
+++ b/code/modules/unit_tests/projectiles.dm
@@ -1,5 +1,5 @@
/datum/unit_test/projectile_movetypes/Run()
for(var/path in typesof(/obj/item/projectile))
- var/obj/projectile/projectile = path
+ var/obj/item/projectile/projectile = path
if(initial(projectile.movement_type) & PHASING)
Fail("[path] has default movement type PHASING. Piercing projectiles should be done using the projectile piercing system, not movement_types!")
diff --git a/code/modules/uplink/uplink_devices.dm b/code/modules/uplink/uplink_devices.dm
index 9660718bb6..54b4035acb 100644
--- a/code/modules/uplink/uplink_devices.dm
+++ b/code/modules/uplink/uplink_devices.dm
@@ -52,7 +52,7 @@
/obj/item/uplink/nuclear_restricted
uplink_flag = UPLINK_NUKE_OPS
-/obj/item/uplink/nuclear_restricted/Initialize()
+/obj/item/uplink/nuclear_restricted/Initialize(mapload)
. = ..()
var/datum/component/uplink/hidden_uplink = GetComponent(/datum/component/uplink)
hidden_uplink.allow_restricted = FALSE
diff --git a/code/modules/uplink/uplink_items/uplink_support.dm b/code/modules/uplink/uplink_items/uplink_support.dm
index efdfe1b06a..245074b2a5 100644
--- a/code/modules/uplink/uplink_items/uplink_support.dm
+++ b/code/modules/uplink/uplink_items/uplink_support.dm
@@ -58,13 +58,13 @@
name = "Dark Gygax Exosuit"
desc = "A lightweight exosuit, painted in a dark scheme. Its speed and equipment selection make it excellent \
for hit-and-run style attacks. Features an incendiary carbine, flash bang launcher, teleporter, ion thrusters and a Tesla energy array."
- item = /obj/mecha/combat/gygax/dark/loaded
+ item = /obj/vehicle/sealed/mecha/combat/gygax/dark/loaded
cost = 80
/datum/uplink_item/support/honker
name = "Dark H.O.N.K."
desc = "A clown combat mech equipped with bombanana peel and tearstache grenade launchers, as well as the ubiquitous HoNkER BlAsT 5000."
- item = /obj/mecha/combat/honker/dark/loaded
+ item = /obj/vehicle/sealed/mecha/combat/honker/dark/loaded
cost = 80
purchasable_from = UPLINK_CLOWN_OPS
@@ -72,5 +72,5 @@
name = "Mauler Exosuit"
desc = "A massive and incredibly deadly military-grade exosuit. Features long-range targeting, thrust vectoring \
and deployable smoke. Comes equipped with an LMG, scattershot carbine, missile rack, an antiprojectile armor booster and a Tesla energy array."
- item = /obj/mecha/combat/marauder/mauler/loaded
+ item = /obj/vehicle/sealed/mecha/combat/marauder/mauler/loaded
cost = 140
diff --git a/code/modules/vehicles/_vehicle.dm b/code/modules/vehicles/_vehicle.dm
index d0144269b7..a968d42073 100644
--- a/code/modules/vehicles/_vehicle.dm
+++ b/code/modules/vehicles/_vehicle.dm
@@ -4,9 +4,10 @@
icon = 'icons/obj/vehicles.dmi'
icon_state = "fuckyou"
max_integrity = 300
- armor = list("melee" = 30, "bullet" = 30, "laser" = 30, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 60)
+ armor = list(MELEE = 30, BULLET = 30, LASER = 30, ENERGY = 0, BOMB = 30, BIO = 0, RAD = 0, FIRE = 60, ACID = 60)
density = TRUE
anchored = FALSE
+ COOLDOWN_DECLARE(cooldown_vehicle_move)
var/list/mob/occupants //mob = bitflags of their control level.
var/max_occupants = 1
var/max_drivers = 1
@@ -23,6 +24,7 @@
var/list/autogrant_actions_controller //assoc list "[bitflag]" = list(typepaths)
var/list/mob/occupant_actions //assoc list mob = list(type = action datum assigned to mob)
var/obj/vehicle/trailer
+ var/mouse_pointer //do we have a special mouse
/obj/vehicle/Initialize(mapload)
. = ..()
@@ -121,9 +123,9 @@
vehicle_move(direction)
/obj/vehicle/proc/vehicle_move(direction)
- if(lastmove + movedelay > world.time)
+ if(!COOLDOWN_FINISHED(src, cooldown_vehicle_move))
return FALSE
- lastmove = world.time
+ COOLDOWN_START(src, cooldown_vehicle_move, movedelay)
if(trailer)
var/dir_to_move = get_dir(trailer.loc, loc)
var/did_move = step(src, direction)
diff --git a/code/modules/vehicles/atv.dm b/code/modules/vehicles/atv.dm
index d5ddfe63cc..cb32b11083 100644
--- a/code/modules/vehicles/atv.dm
+++ b/code/modules/vehicles/atv.dm
@@ -6,7 +6,7 @@
key_type = /obj/item/key
var/static/mutable_appearance/atvcover
-/obj/vehicle/ridden/atv/Initialize()
+/obj/vehicle/ridden/atv/Initialize(mapload)
. = ..()
var/datum/component/riding/D = LoadComponent(/datum/component/riding)
D.vehicle_move_delay = CONFIG_GET(number/movedelay/run_delay)
@@ -34,7 +34,7 @@
scan_range = 7
density = FALSE
-/obj/vehicle/ridden/atv/turret/Initialize()
+/obj/vehicle/ridden/atv/turret/Initialize(mapload)
. = ..()
turret = new(loc)
turret.base = src
diff --git a/code/modules/vehicles/bicycle.dm b/code/modules/vehicles/bicycle.dm
index 3784f4d459..2fbe20a75f 100644
--- a/code/modules/vehicles/bicycle.dm
+++ b/code/modules/vehicles/bicycle.dm
@@ -8,7 +8,7 @@
'sound/misc/bike2.mid',
'sound/misc/bike3.mid')
-/obj/vehicle/ridden/bicycle/Initialize()
+/obj/vehicle/ridden/bicycle/Initialize(mapload)
. = ..()
var/datum/component/riding/D = LoadComponent(/datum/component/riding)
D.set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, 4), TEXT_SOUTH = list(0, 4), TEXT_EAST = list(0, 4), TEXT_WEST = list( 0, 4)))
diff --git a/code/modules/vehicles/cars/car.dm b/code/modules/vehicles/cars/car.dm
index 0196abe82c..81b2db6cf8 100644
--- a/code/modules/vehicles/cars/car.dm
+++ b/code/modules/vehicles/cars/car.dm
@@ -8,7 +8,7 @@
var/engine_sound_length = 20 //Set this to the length of the engine sound
var/escape_time = 200 //Time it takes to break out of the car
-/obj/vehicle/sealed/car/Initialize()
+/obj/vehicle/sealed/car/Initialize(mapload)
. = ..()
LoadComponent(/datum/component/riding)
diff --git a/code/modules/vehicles/cars/clowncar.dm b/code/modules/vehicles/cars/clowncar.dm
index f65df26488..9660a16f90 100644
--- a/code/modules/vehicles/cars/clowncar.dm
+++ b/code/modules/vehicles/cars/clowncar.dm
@@ -3,7 +3,7 @@
desc = "How someone could even fit in there is byond me."
icon_state = "clowncar"
max_integrity = 150
- armor = list("melee" = 70, "bullet" = 40, "laser" = 40, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80)
+ armor = list(MELEE = 70, BULLET = 40, LASER = 40, ENERGY = 0, BOMB = 30, BIO = 0, RAD = 0, FIRE = 80, ACID = 80)
enter_delay = 20
max_occupants = 50
movedelay = 0.6
@@ -20,7 +20,7 @@
var/cannonmode = CLOWN_CANNON_INACTIVE
var/light_on = TRUE
-/obj/vehicle/sealed/car/clowncar/Initialize()
+/obj/vehicle/sealed/car/clowncar/Initialize(mapload)
. = ..()
START_PROCESSING(SSobj,src)
@@ -246,7 +246,7 @@
key_type = null
explode_on_death = FALSE
-/obj/vehicle/sealed/car/clowncar/twitch_plays/Initialize()
+/obj/vehicle/sealed/car/clowncar/twitch_plays/Initialize(mapload)
. = ..()
AddComponent(/datum/component/twitch_plays/simple_movement)
GLOB.poi_list |= src
diff --git a/code/modules/vehicles/lavaboat.dm b/code/modules/vehicles/lavaboat.dm
index 32f53a15aa..3d83c48633 100644
--- a/code/modules/vehicles/lavaboat.dm
+++ b/code/modules/vehicles/lavaboat.dm
@@ -9,7 +9,7 @@
resistance_flags = LAVA_PROOF | FIRE_PROOF
can_buckle = TRUE
-/obj/vehicle/ridden/lavaboat/Initialize()
+/obj/vehicle/ridden/lavaboat/Initialize(mapload)
. = ..()
var/datum/component/riding/D = LoadComponent(/datum/component/riding)
D.keytype = /obj/item/oar
@@ -61,7 +61,7 @@
desc = "This boat moves where you will it, without the need for an oar."
icon_state = "dragon_boat"
-/obj/vehicle/ridden/lavaboat/dragon/Initialize()
+/obj/vehicle/ridden/lavaboat/dragon/Initialize(mapload)
. = ..()
var/datum/component/riding/D = LoadComponent(/datum/component/riding)
D.vehicle_move_delay = 1
diff --git a/code/modules/vehicles/mecha/_mecha.dm b/code/modules/vehicles/mecha/_mecha.dm
new file mode 100644
index 0000000000..99020ec7df
--- /dev/null
+++ b/code/modules/vehicles/mecha/_mecha.dm
@@ -0,0 +1,1223 @@
+/***************** WELCOME TO MECHA.DM, ENJOY YOUR STAY *****************/
+
+/**
+ * Mechs are now (finally) vehicles, this means you can make them multicrew
+ * They can also grant select ability buttons based on occupant bitflags
+ *
+ * Movement is handled through vehicle_move() which is called by relaymove
+ * Clicking is done by way of signals registering to the entering mob
+ * NOTE: MMIS are NOT mobs but instead contain a brain that is, so you need special checks
+ * AI also has special checks becaus it gets in and out of the mech differently
+ * Always call remove_occupant(mob) when leaving the mech so the mob is removed properly
+ *
+ * For multi-crew, you need to set how the occupants recieve ability bitflags corresponding to their status on the vehicle(i.e: driver, gunner etc)
+ * Abilities can then be set to only apply for certain bitflags and are assigned as such automatically
+ *
+ * Clicks are wither translated into mech_melee_attack (see mech_melee_attack.dm)
+ * Or are used to call action() on equipped gear
+ * Cooldown for gear is on the mech because exploits
+ */
+/obj/vehicle/sealed/mecha
+ name = "mecha"
+ desc = "Exosuit"
+ icon = 'icons/mecha/mecha.dmi'
+ resistance_flags = FIRE_PROOF | ACID_PROOF
+ flags_1 = HEAR_1
+ max_integrity = 300
+ armor = list(MELEE = 20, BULLET = 10, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 0, RAD = 0, FIRE = 100, ACID = 100)
+ movedelay = 1 SECONDS
+ anchored = TRUE
+ emulate_door_bumps = TRUE
+ COOLDOWN_DECLARE(mecha_bump_smash)
+ var/light_on = FALSE
+ ///What direction will the mech face when entered/powered on? Defaults to South.
+ var/dir_in = SOUTH
+ ///How much energy the mech will consume each time it moves. This variable is a backup for when leg actuators affect the energy drain.
+ var/normal_step_energy_drain = 10
+ ///How much energy the mech will consume each time it moves. this is the current active energy consumed
+ var/step_energy_drain = 10
+ ///How much energy we drain each time we mechpunch someone
+ var/melee_energy_drain = 15
+ ///The minimum amount of energy charge consumed by leg overload
+ var/overload_step_energy_drain_min = 100
+ ///chance to deflect the incoming projectiles, hits, or lesser the effect of ex_act.
+ var/deflect_chance = 10
+ ///Modifiers for directional armor
+ var/list/facing_modifiers = list(MECHA_FRONT_ARMOUR = 1.5, MECHA_SIDE_ARMOUR = 1, MECHA_BACK_ARMOUR = 0.5)
+ ///if we cant use our equipment(such as due to EMP)
+ var/equipment_disabled = FALSE
+ /// Keeps track of the mech's cell
+ var/obj/item/stock_parts/cell/cell
+ /// Keeps track of the mech's scanning module
+ var/obj/item/stock_parts/scanning_module/scanmod
+ /// Keeps track of the mech's capacitor
+ var/obj/item/stock_parts/capacitor/capacitor
+ ///Whether the mechs maintenance protocols are on or off
+ var/construction_state = MECHA_LOCKED
+ ///Contains flags for the mecha
+ var/mecha_flags = ADDING_ACCESS_POSSIBLE | CANSTRAFE | IS_ENCLOSED | HAS_LIGHTS
+ ///Stores the DNA enzymes of a carbon so tht only they can access the mech
+ var/dna_lock
+ ///Spark effects are handled by this datum
+ var/datum/effect_system/spark_spread/spark_system = new
+ ///How powerful our lights are
+ var/lights_power = 6
+ ///Just stop the mech from doing anything
+ var/completely_disabled = FALSE
+ ///Whether this mech is allowed to move diagonally
+ var/allow_diagonal_movement = TRUE
+ ///Whether or not the mech destroys walls by running into it.
+ var/bumpsmash = FALSE
+
+ ///////////ATMOS
+ ///Whether we are currrently drawing from the internal tank
+ var/use_internal_tank = FALSE
+ ///The setting of the valve on the internal tank
+ var/internal_tank_valve = ONE_ATMOSPHERE
+ ///The internal air tank obj of the mech
+ var/obj/machinery/portable_atmospherics/canister/internal_tank
+ ///Internal air mix datum
+ var/datum/gas_mixture/cabin_air
+ ///The connected air port, if we have one
+ var/obj/machinery/atmospherics/components/unary/portables_connector/connected_port
+
+ ///Special version of the radio, which is unsellable
+ var/obj/item/radio/mech/radio
+ var/list/trackers = list()
+
+ var/max_temperature = 25000
+ ///health percentage below which internal damage is possible
+ var/internal_damage_threshold = 50
+ ///Bitflags for internal damage
+ var/internal_damage = NONE
+
+ ///required access level for mecha operation
+ var/list/operation_req_access = list()
+ ///required access to change internal components
+ var/list/internals_req_access = list(ACCESS_ENGINE, ACCESS_ROBOTICS)
+
+ ///Typepath for the wreckage it spawns when destroyed
+ var/wreckage
+
+ var/list/equipment = new
+ ///Current active equipment
+ var/obj/item/mecha_parts/mecha_equipment/selected
+ ///Maximum amount of equipment we can have
+ var/max_equip = 3
+
+ ///Whether our steps are silent, for example in zero-G
+ var/step_silent = FALSE
+ ///Sound played when the mech moves
+ var/stepsound = 'sound/mecha/mechstep.ogg'
+ ///Sound played when the mech walks
+ var/turnsound = 'sound/mecha/mechturn.ogg'
+
+ ///Cooldown duration between melee punches
+ var/melee_cooldown = 10
+
+ ///TIme taken to leave the mech
+ var/exit_delay = 2 SECONDS
+ ///Time you get slept for if you get forcible ejected by the mech exploding
+ var/destruction_sleep_duration = 2 SECONDS
+ ///Whether outside viewers can see the pilot inside
+ ///In case theres a different iconstate for AI/MMI pilot(currently only used for ripley)
+ var/silicon_icon_state = null
+ ///Currently ejecting, and unable to do things
+ var/is_currently_ejecting = FALSE
+
+ var/datum/effect_system/smoke_spread/smoke_system = new
+
+ ////Action vars
+ ///Ref to any active thrusters we might have
+ var/obj/item/mecha_parts/mecha_equipment/thrusters/active_thrusters
+
+ ///Bool for energy shield on/off
+ var/defense_mode = FALSE
+
+ ///Bool for leg overload on/off
+ var/leg_overload_mode = FALSE
+ ///Energy use modifier for leg overload
+ var/leg_overload_coeff = 100
+
+ //Bool for zoom on/off
+ var/zoom_mode = FALSE
+
+ ///Remaining smoke charges
+ var/smoke_charges = 5
+ ///Cooldown between using smoke
+ var/smoke_cooldown = 10 SECONDS
+
+ ///Bool for if the mech is currently phasing
+ var/phasing = FALSE
+ ///Power we use every time we phaze through something
+ var/phasing_energy_drain = 200
+ ///icon_state for flick() when phazing
+ var/phase_state = ""
+
+ ///Wether we are strafing
+ var/strafe = FALSE
+
+ ///Cooldown length between bumpsmashes
+ var/smashcooldown = 3
+
+ ///Bool for whether this mech can only be used on lavaland
+ var/lavaland_only = FALSE
+
+
+ hud_possible = list (DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_MECH_HUD, DIAG_TRACK_HUD)
+
+/obj/item/radio/mech //this has to go somewhere
+
+/obj/vehicle/sealed/mecha/Initialize(mapload)
+ . = ..()
+ add_radio()
+ add_cabin()
+ if(enclosed)
+ add_airtank()
+ RegisterSignal(src, COMSIG_MOVABLE_PRE_MOVE , .proc/disconnect_air)
+ RegisterSignal(src, COMSIG_MOVABLE_MOVED, .proc/play_stepsound)
+ spark_system.set_up(2, 0, src)
+ spark_system.attach(src)
+ smoke_system.set_up(3, src)
+ smoke_system.attach(src)
+ add_cell()
+ add_scanmod()
+ add_capacitor()
+ START_PROCESSING(SSobj, src)
+ GLOB.poi_list |= src
+ log_message("[src.name] created.", LOG_MECHA)
+ GLOB.mechas_list += src //global mech list
+ prepare_huds()
+ for(var/datum/atom_hud/data/diagnostic/diag_hud in GLOB.huds)
+ diag_hud.add_to_hud(src)
+ diag_hud_set_mechhealth()
+ diag_hud_set_mechcell()
+ diag_hud_set_mechstat()
+ update_icon()
+
+/obj/vehicle/sealed/mecha/Destroy()
+ if(obj_integrity > 0) //no explody if we have hp remaining!
+ explode_on_death = FALSE
+ for(var/M in occupants)
+ var/mob/living/occupant = M
+ if(isAI(occupant))
+ occupant.gib() //No wreck, no AI to recover
+ else
+ occupant.forceMove(loc)
+ occupant.SetSleeping(destruction_sleep_duration)
+ if(LAZYLEN(equipment))
+ for(var/E in equipment)
+ var/obj/item/mecha_parts/mecha_equipment/equip = E
+ equip.detach(loc)
+ qdel(equip)
+ if(cell)
+ QDEL_NULL(cell)
+ if(scanmod)
+ QDEL_NULL(scanmod)
+ if(capacitor)
+ QDEL_NULL(capacitor)
+ if(internal_tank)
+ QDEL_NULL(internal_tank)
+ STOP_PROCESSING(SSobj, src)
+ GLOB.poi_list.Remove(src)
+ LAZYCLEARLIST(equipment)
+ if(loc)
+ loc.assume_air(cabin_air)
+ air_update_turf()
+ else
+ qdel(cabin_air)
+ cabin_air = null
+ QDEL_NULL(spark_system)
+ QDEL_NULL(smoke_system)
+
+ GLOB.mechas_list -= src //global mech list
+ return ..()
+
+/obj/vehicle/sealed/mecha/update_icon()
+ icon_state = get_mecha_occupancy_state()
+ return ..()
+
+//override this proc if you need to split up mecha control between multiple people (see savannah_ivanov.dm)
+/obj/vehicle/sealed/mecha/auto_assign_occupant_flags(mob/M)
+ if(driver_amount() < max_drivers)
+ add_control_flags(M, FULL_MECHA_CONTROL)
+
+/obj/vehicle/sealed/mecha/proc/get_mecha_occupancy_state()
+ if((mecha_flags & SILICON_PILOT) && silicon_icon_state)
+ return silicon_icon_state
+ if(LAZYLEN(occupants))
+ return initial(icon_state)
+ return "[initial(icon_state)]-open"
+
+/obj/vehicle/sealed/mecha/get_cell()
+ return cell
+
+/obj/vehicle/sealed/mecha/rust_heretic_act()
+ take_damage(500, BRUTE)
+
+/obj/vehicle/sealed/mecha/proc/restore_equipment()
+ equipment_disabled = FALSE
+ for(var/occupant in occupants)
+ var/mob/mob_occupant
+ SEND_SOUND(mob_occupant, sound('sound/items/timer.ogg', volume=50))
+ to_chat(mob_occupant, "Equipment control unit has been rebooted successfully.")
+ mob_occupant.update_mouse_pointer()
+
+/obj/vehicle/sealed/mecha/CheckParts(list/parts_list)
+ ..()
+ cell = locate(/obj/item/stock_parts/cell) in contents
+ scanmod = locate(/obj/item/stock_parts/scanning_module) in contents
+ capacitor = locate(/obj/item/stock_parts/capacitor) in contents
+ update_part_values()
+
+/obj/vehicle/sealed/mecha/proc/update_part_values() ///Updates the values given by scanning module and capacitor tier, called when a part is removed or inserted.
+ if(scanmod)
+ normal_step_energy_drain = 20 - (5 * scanmod.rating) //10 is normal, so on lowest part its worse, on second its ok and on higher its real good up to 0 on best
+ step_energy_drain = normal_step_energy_drain
+ else
+ normal_step_energy_drain = 500
+ step_energy_drain = normal_step_energy_drain
+ if(capacitor)
+ armor = armor.modifyRating(energy = (capacitor.rating * 5)) //Each level of capacitor protects the mech against emp by 5%
+ else //because we can still be hit without a cap, even if we can't move
+ armor = armor.setRating(energy = 0)
+
+
+////////////////////////
+////// Helpers /////////
+////////////////////////
+
+/obj/vehicle/sealed/mecha/proc/add_airtank()
+ internal_tank = new /obj/machinery/portable_atmospherics/canister/air(src)
+ return internal_tank
+
+///Adds a cell, for use in Map-spawned mechs, Nuke Ops mechs, and admin-spawned mechs. Mechs built by hand will replace this.
+/obj/vehicle/sealed/mecha/proc/add_cell(obj/item/stock_parts/cell/C=null)
+ QDEL_NULL(cell)
+ if(C)
+ C.forceMove(src)
+ cell = C
+ return
+ cell = new /obj/item/stock_parts/cell/high/plus(src)
+
+///Adds a scanning module, for use in Map-spawned mechs, Nuke Ops mechs, and admin-spawned mechs. Mechs built by hand will replace this.
+/obj/vehicle/sealed/mecha/proc/add_scanmod(obj/item/stock_parts/scanning_module/sm=null)
+ QDEL_NULL(scanmod)
+ if(sm)
+ sm.forceMove(src)
+ scanmod = sm
+ return
+ scanmod = new /obj/item/stock_parts/scanning_module(src)
+
+///Adds a capacitor, for use in Map-spawned mechs, Nuke Ops mechs, and admin-spawned mechs. Mechs built by hand will replace this.
+/obj/vehicle/sealed/mecha/proc/add_capacitor(obj/item/stock_parts/capacitor/cap=null)
+ QDEL_NULL(capacitor)
+ if(cap)
+ cap.forceMove(src)
+ capacitor = cap
+ else
+ capacitor = new /obj/item/stock_parts/capacitor(src)
+
+/obj/vehicle/sealed/mecha/proc/add_cabin()
+ cabin_air = new(200)
+ cabin_air.set_temperature(T20C)
+ cabin_air.set_moles(GAS_O2,O2STANDARD*cabin_air.return_volume()/(R_IDEAL_GAS_EQUATION*cabin_air.return_temperature()))
+ cabin_air.set_moles(GAS_N2,N2STANDARD*cabin_air.return_volume()/(R_IDEAL_GAS_EQUATION*cabin_air.return_temperature()))
+ return cabin_air
+
+/obj/vehicle/sealed/mecha/proc/add_radio()
+ radio = new(src)
+ radio.name = "[src] radio"
+ radio.icon = icon
+ radio.icon_state = icon_state
+ radio.subspace_transmission = TRUE
+
+/obj/vehicle/sealed/mecha/proc/can_use(mob/user)
+ if(istype(user) && is_occupant(user))
+ if(!user.incapacitated())
+ return TRUE
+ return FALSE
+
+////////////////////////////////////////////////////////////////////////////////
+
+/obj/vehicle/sealed/mecha/examine(mob/user)
+ . = ..()
+ var/integrity = obj_integrity*100/max_integrity
+ switch(integrity)
+ if(85 to 100)
+ . += "It's fully intact."
+ if(65 to 85)
+ . += "It's slightly damaged."
+ if(45 to 65)
+ . += "It's badly damaged."
+ if(25 to 45)
+ . += "It's heavily damaged."
+ else
+ . += "It's falling apart."
+ var/hide_weapon = locate(/obj/item/mecha_parts/concealed_weapon_bay) in contents
+ var/hidden_weapon = hide_weapon ? (locate(/obj/item/mecha_parts/mecha_equipment/weapon) in equipment) : null
+ var/list/visible_equipment = equipment - hidden_weapon
+ if(visible_equipment.len)
+ . += "It's equipped with:"
+ for(var/obj/item/mecha_parts/mecha_equipment/ME in visible_equipment)
+ . += "[icon2html(ME, user)] \A [ME]."
+ if(!enclosed)
+ if(mecha_flags & SILICON_PILOT)
+ . += "[src] appears to be piloting itself..."
+ else
+ for(var/occupante in occupants)
+ . += "You can see [occupante] inside."
+ if(ishuman(user))
+ var/mob/living/carbon/human/H = user
+ for(var/O in H.held_items)
+ if(istype(O, /obj/item/gun))
+ . += "It looks like you can hit the pilot directly if you target the center or above."
+ break //in case user is holding two guns
+
+//processing internal damage, temperature, air regulation, alert updates, lights power use.
+/obj/vehicle/sealed/mecha/process()
+ var/internal_temp_regulation = 1
+
+ if(internal_damage)
+ if(internal_damage & MECHA_INT_FIRE)
+ if(!(internal_damage & MECHA_INT_TEMP_CONTROL) && prob(5))
+ clearInternalDamage(MECHA_INT_FIRE)
+ if(internal_tank)
+ var/datum/gas_mixture/int_tank_air = internal_tank.return_air()
+ if(int_tank_air.return_pressure() > internal_tank.maximum_pressure && !(internal_damage & MECHA_INT_TANK_BREACH))
+ setInternalDamage(MECHA_INT_TANK_BREACH)
+ if(int_tank_air && int_tank_air.return_volume() > 0) //heat the air_contents
+ int_tank_air.set_temperature(min(6000+T0C, int_tank_air.return_temperature()+rand(10,15)))
+ if(cabin_air && cabin_air.return_volume()>0)
+ cabin_air.set_temperature(min(6000+T0C, cabin_air.return_temperature()+rand(10,15)))
+ if(cabin_air.return_temperature() > max_temperature/2)
+ take_damage(4/round(max_temperature/cabin_air.return_temperature(),0.1), BURN, 0, 0)
+
+ if(internal_damage & MECHA_INT_TEMP_CONTROL)
+ internal_temp_regulation = 0
+
+ if(internal_damage & MECHA_INT_TANK_BREACH) //remove some air from internal tank
+ if(internal_tank)
+ assume_air_ratio(internal_tank.return_air(), 0.1)
+
+ if(internal_damage & MECHA_INT_SHORT_CIRCUIT)
+ if(get_charge())
+ spark_system.start()
+ cell.charge -= min(20,cell.charge)
+ cell.maxcharge -= min(20,cell.maxcharge)
+
+ if(internal_temp_regulation)
+ if(cabin_air && cabin_air.return_volume() > 0)
+ var/delta = cabin_air.return_temperature() - T20C
+ cabin_air.set_temperature(cabin_air.return_temperature() - max(-10, min(10, round(delta/4,0.1))))
+
+ if(internal_tank)
+ var/datum/gas_mixture/tank_air = internal_tank.return_air()
+
+ var/release_pressure = internal_tank_valve
+ var/cabin_pressure = cabin_air.return_pressure()
+ var/pressure_delta = min(release_pressure - cabin_pressure, (tank_air.return_pressure() - cabin_pressure)/2)
+ var/transfer_moles = 0
+ if(pressure_delta > 0) //cabin pressure lower than release pressure
+ if(tank_air.return_temperature() > 0)
+ transfer_moles = pressure_delta*cabin_air.return_volume()/(cabin_air.return_temperature() * R_IDEAL_GAS_EQUATION)
+ tank_air.transfer_to(cabin_air,transfer_moles)
+ else if(pressure_delta < 0) //cabin pressure higher than release pressure
+ var/datum/gas_mixture/t_air = return_air()
+ pressure_delta = cabin_pressure - release_pressure
+ if(t_air)
+ pressure_delta = min(cabin_pressure - t_air.return_pressure(), pressure_delta)
+ if(pressure_delta > 0) //if location pressure is lower than cabin pressure
+ transfer_moles = pressure_delta*cabin_air.return_volume()/(cabin_air.return_temperature() * R_IDEAL_GAS_EQUATION)
+ cabin_air.transfer_to(t_air, transfer_moles)
+
+ if(occupants)
+ for(var/i in occupants)
+ var/mob/living/occupant = i
+ if(cell)
+ var/cellcharge = cell.charge/cell.maxcharge
+ switch(cellcharge)
+ if(0.75 to INFINITY)
+ occupant.clear_alert("charge")
+ if(0.5 to 0.75)
+ occupant.throw_alert("charge", /atom/movable/screen/alert/lowcell, 1)
+ if(0.25 to 0.5)
+ occupant.throw_alert("charge", /atom/movable/screen/alert/lowcell, 2)
+ if(0.01 to 0.25)
+ occupant.throw_alert("charge", /atom/movable/screen/alert/lowcell, 3)
+ else
+ occupant.throw_alert("charge", /atom/movable/screen/alert/emptycell)
+
+ var/integrity = obj_integrity/max_integrity*100
+ switch(integrity)
+ if(30 to 45)
+ occupant.throw_alert("mech damage", /atom/movable/screen/alert/low_mech_integrity, 1)
+ if(15 to 35)
+ occupant.throw_alert("mech damage", /atom/movable/screen/alert/low_mech_integrity, 2)
+ if(-INFINITY to 15)
+ occupant.throw_alert("mech damage", /atom/movable/screen/alert/low_mech_integrity, 3)
+ else
+ occupant.clear_alert("mech damage")
+ var/atom/checking = occupant.loc
+ // recursive check to handle all cases regarding very nested occupants,
+ // such as brainmob inside brainitem inside MMI inside mecha
+ while(!isnull(checking))
+ if(isturf(checking))
+ // hit a turf before hitting the mecha, seems like they have been moved out
+ occupant.clear_alert("charge")
+ occupant.clear_alert("mech damage")
+ occupant = null
+ break
+ else if (checking == src)
+ break // all good
+ checking = checking.loc
+
+ if(mecha_flags & LIGHTS_ON)
+ var/lights_energy_drain = 2
+ use_power(lights_energy_drain)
+
+ for(var/b in occupants)
+ var/mob/living/occupant = b
+ if(!enclosed && occupant?.incapacitated()) //no sides mean it's easy to just sorta fall out if you're incapacitated.
+ visible_message("[occupant] tumbles out of the cockpit!")
+ mob_try_exit(occupant, TRUE, TRUE) //bye bye
+
+//Diagnostic HUD updates
+ diag_hud_set_mechhealth()
+ diag_hud_set_mechcell()
+ diag_hud_set_mechstat()
+
+/obj/vehicle/sealed/mecha/fire_act() //Check if we should ignite the pilot of an open-canopy mech
+ . = ..()
+ if(LAZYLEN(occupants) && !enclosed && !(mecha_flags & SILICON_PILOT))
+ for(var/M in occupants)
+ var/mob/living/cookedalive = M
+ if(cookedalive.fire_stacks < 5)
+ cookedalive.fire_stacks += 1
+ cookedalive.IgniteMob()
+
+/obj/vehicle/sealed/mecha/proc/display_speech_bubble(datum/source, list/speech_args)
+ SIGNAL_HANDLER
+ var/list/speech_bubble_recipients = get_hearers_in_view(7,src)
+ for(var/mob/M in speech_bubble_recipients)
+ if(M.client)
+ speech_bubble_recipients.Add(M.client)
+ INVOKE_ASYNC(GLOBAL_PROC, /proc/flick_overlay, image('icons/mob/talk.dmi', src, "machine[say_test(speech_args[SPEECH_MESSAGE])]",MOB_LAYER+1), speech_bubble_recipients, 30)
+
+////////////////////////////
+///// Action processing ////
+////////////////////////////
+
+/obj/vehicle/sealed/mecha/proc/on_mouseclick(mob/user, atom/target, params)
+ SIGNAL_HANDLER
+ if(!locate(/turf) in list(target,target.loc)) // Prevents inventory from being drilled
+ return
+ if(completely_disabled || is_currently_ejecting || (mecha_flags & CANNOT_INTERACT))
+ return
+ var/list/mouse_control = params2list(params)
+ if(isAI(user) && !mouse_control["middle"])//AIs use MMB
+ return
+ if(phasing)
+ to_chat(occupants, "[icon2html(src, occupants)]Unable to interact with objects while phasing.")
+ return
+ if(user.incapacitated())
+ return
+ if(construction_state)
+ to_chat(occupants, "[icon2html(src, occupants)]Maintenance protocols in effect.")
+ return
+ if(!get_charge())
+ return
+ if(src == target)
+ return
+ var/dir_to_target = get_dir(src,target)
+ if(dir_to_target && !(dir_to_target & dir))//wrong direction
+ return
+ if(internal_damage & MECHA_INT_CONTROL_LOST)
+ target = pick(view(3,target))
+ if(!target)
+ return
+ var/mob/living/L = user
+ if(selected)
+ if(!(L in return_controllers_with_flag(VEHICLE_CONTROL_EQUIPMENT)))
+ to_chat(user, "You can't control mech equipment from here!")
+ return
+ if(!Adjacent(target) && (selected.range & MECHA_RANGED))
+ if(HAS_TRAIT(L, TRAIT_PACIFISM) && selected.harmful)
+ to_chat(L, "You don't want to harm other living beings!")
+ return
+ if(SEND_SIGNAL(src, COMSIG_MECHA_EQUIPMENT_CLICK, L, target) & COMPONENT_CANCEL_EQUIPMENT_CLICK)
+ return
+ INVOKE_ASYNC(selected, /obj/item/mecha_parts/mecha_equipment.proc/action, user, target, params)
+ return
+ if((selected.range & MECHA_MELEE) && Adjacent(target))
+ if(isliving(target) && selected.harmful && HAS_TRAIT(L, TRAIT_PACIFISM))
+ to_chat(L, "You don't want to harm other living beings!")
+ return
+ if(SEND_SIGNAL(src, COMSIG_MECHA_EQUIPMENT_CLICK, L, target) & COMPONENT_CANCEL_EQUIPMENT_CLICK)
+ return
+ INVOKE_ASYNC(selected, /obj/item/mecha_parts/mecha_equipment.proc/action, user, target, params)
+ return
+ if(!(L in return_controllers_with_flag(VEHICLE_CONTROL_MELEE)))
+ to_chat(L, "You're in the wrong seat to interact with your hands.")
+ return
+ var/on_cooldown = TIMER_COOLDOWN_CHECK(src, COOLDOWN_MECHA_MELEE_ATTACK)
+ var/adjacent = Adjacent(target)
+ if(SEND_SIGNAL(src, COMSIG_MECHA_MELEE_CLICK, L, target, on_cooldown, adjacent) & COMPONENT_CANCEL_MELEE_CLICK)
+ return
+ if(on_cooldown || !adjacent)
+ return
+ if(internal_damage & MECHA_INT_CONTROL_LOST)
+ var/list/possible_targets = oview(1,src)
+ if(!length(possible_targets))
+ return
+ target = pick(possible_targets)
+ target.mech_melee_attack(src, user)
+ TIMER_COOLDOWN_START(src, COOLDOWN_MECHA_MELEE_ATTACK, melee_cooldown)
+
+
+//////////////////////////////////
+//////// Movement procs ////////
+//////////////////////////////////
+
+///Plays the mech step sound effect. Split from movement procs so that other mechs (HONK) can override this one specific part.
+/obj/vehicle/sealed/mecha/proc/play_stepsound()
+ SIGNAL_HANDLER
+ if(stepsound)
+ playsound(src,stepsound,40,1)
+
+/obj/vehicle/sealed/mecha/proc/disconnect_air()
+ SIGNAL_HANDLER
+ if(internal_tank.disconnect()) // Something moved us and broke connection
+ to_chat(occupants, "[icon2html(src, occupants)]Air port connection has been severed!")
+ log_message("Lost connection to gas port.", LOG_MECHA)
+
+/obj/vehicle/sealed/mecha/Process_Spacemove(movement_dir = 0)
+ . = ..()
+ if(.)
+ return TRUE
+
+ var/atom/movable/backup = get_spacemove_backup()
+ if(backup)
+ if(istype(backup) && movement_dir && !backup.anchored)
+ if(backup.newtonian_move(turn(movement_dir, 180)))
+ step_silent = TRUE
+ if(return_drivers())
+ to_chat(occupants, "[icon2html(src, occupants)]The [src] push off [backup] to propel yourself.")
+ return TRUE
+
+ if(movedelay <= world.time && active_thrusters && movement_dir && active_thrusters.thrust(movement_dir))
+ step_silent = TRUE
+ return TRUE
+
+ return FALSE
+
+/obj/vehicle/sealed/mecha/relaymove(mob/living/user, direction)
+ . = TRUE
+ if(!canmove || !(user in return_drivers()))
+ return
+ vehicle_move(direction)
+
+
+
+/obj/vehicle/sealed/mecha/vehicle_move(direction, forcerotate = FALSE)
+ if(!COOLDOWN_FINISHED(src, cooldown_vehicle_move))
+ return FALSE
+ COOLDOWN_START(src, cooldown_vehicle_move, movedelay)
+ if(completely_disabled)
+ return FALSE
+ if(!direction)
+ return FALSE
+ if(internal_tank?.connected_port)
+ if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_MECHA_MESSAGE))
+ to_chat(occupants, "[icon2html(src, occupants)]Unable to move while connected to the air system port!")
+ TIMER_COOLDOWN_START(src, COOLDOWN_MECHA_MESSAGE, 2 SECONDS)
+ return FALSE
+ if(construction_state)
+ if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_MECHA_MESSAGE))
+ to_chat(occupants, "[icon2html(src, occupants)]Maintenance protocols in effect.")
+ TIMER_COOLDOWN_START(src, COOLDOWN_MECHA_MESSAGE, 2 SECONDS)
+ return FALSE
+
+ if(!Process_Spacemove(direction))
+ return FALSE
+ if(!has_charge(step_energy_drain))
+ return FALSE
+ if(zoom_mode)
+ to_chat(occupants, "[icon2html(src, occupants)]Unable to move while in zoom mode!")
+ return FALSE
+ if(!cell)
+ to_chat(occupants, "[icon2html(src, occupants)]Missing power cell.")
+ return FALSE
+ if(!scanmod || !capacitor)
+ to_chat(occupants, "[icon2html(src, occupants)]Missing [scanmod? "capacitor" : "scanning module"].")
+ return FALSE
+ if(lavaland_only && is_mining_level(z))
+ to_chat(occupants, "[icon2html(src, occupants)]Invalid Environment.")
+ return FALSE
+
+ var/olddir = dir
+
+ if(internal_damage & MECHA_INT_CONTROL_LOST)
+ direction = pick(GLOB.alldirs)
+
+ //only mechs with diagonal movement may move diagonally
+ if(!allow_diagonal_movement && ISDIAGONALDIR(direction))
+ return TRUE
+
+ //if we're not facing the way we're going rotate us
+ var/no_strafe = FALSE
+ if(dir != direction || forcerotate)
+ if(strafe)
+ for(var/D in return_drivers())
+ var/mob/driver = D
+ if(driver.client?.keys_held["Alt"])
+ no_strafe = TRUE
+ setDir(direction)
+ if(turnsound)
+ playsound(src,turnsound,40,TRUE)
+ return TRUE
+ else
+ setDir(direction)
+ if(turnsound)
+ playsound(src,turnsound,40,TRUE)
+ return TRUE
+
+ set_glide_size(DELAY_TO_GLIDE_SIZE(movedelay))
+ //Otherwise just walk normally
+ . = step(src,direction, dir)
+
+ if(strafe && !no_strafe)
+ setDir(olddir)
+
+
+/obj/vehicle/sealed/mecha/Bump(atom/obstacle)
+ if(phasing && get_charge() >= phasing_energy_drain && !throwing)
+ if(phase_state)
+ flick(phase_state, src)
+ forceMove(get_step(src,dir))//This is jank I hate it thanks, this should be done thrugh move not this dumb shit
+ use_power(phasing_energy_drain)
+ addtimer(VARSET_CALLBACK(src, movedelay, TRUE), movedelay*3)
+ return
+ . = ..()
+ if(.) //mech was thrown/door/whatever
+ return
+ if(bumpsmash) //Need a pilot to push the PUNCH button.
+ if(COOLDOWN_FINISHED(src, mecha_bump_smash))
+ obstacle.mech_melee_attack(src)
+ COOLDOWN_START(src, mecha_bump_smash, smashcooldown)
+ if(!obstacle || obstacle.CanPass(src,get_step(src,dir)))
+ step(src,dir)
+ if(isobj(obstacle))
+ var/obj/obj_obstacle = obstacle
+ if(!obj_obstacle.anchored && obj_obstacle.move_resist <= move_force)
+ step(obstacle, dir)
+ else if(ismob(obstacle))
+ var/mob/mob_obstacle = obstacle
+ if(mob_obstacle.move_resist <= move_force)
+ step(obstacle, dir)
+
+
+
+
+
+///////////////////////////////////
+//////// Internal damage ////////
+///////////////////////////////////
+
+/obj/vehicle/sealed/mecha/proc/check_for_internal_damage(list/possible_int_damage,ignore_threshold=null)
+ if(!islist(possible_int_damage) || !length(possible_int_damage))
+ return
+ if(prob(20))
+ if(ignore_threshold || obj_integrity*100/max_integrity < internal_damage_threshold)
+ for(var/T in possible_int_damage)
+ if(internal_damage & T)
+ possible_int_damage -= T
+ if (length(possible_int_damage))
+ var/int_dam_flag = pick(possible_int_damage)
+ if(int_dam_flag)
+ setInternalDamage(int_dam_flag)
+ if(prob(5))
+ if(ignore_threshold || obj_integrity*100/max_integrity < internal_damage_threshold)
+ if(LAZYLEN(equipment))
+ var/obj/item/mecha_parts/mecha_equipment/ME = pick(equipment)
+ qdel(ME)
+
+/obj/vehicle/sealed/mecha/proc/setInternalDamage(int_dam_flag)
+ internal_damage |= int_dam_flag
+ log_message("Internal damage of type [int_dam_flag].", LOG_MECHA)
+ SEND_SOUND(occupants, sound('sound/machines/warning-buzzer.ogg',wait=0))
+ diag_hud_set_mechstat()
+
+/obj/vehicle/sealed/mecha/proc/clearInternalDamage(int_dam_flag)
+ if(internal_damage & int_dam_flag)
+ switch(int_dam_flag)
+ if(MECHA_INT_TEMP_CONTROL)
+ to_chat(occupants, "[icon2html(src, occupants)]Life support system reactivated.")
+ if(MECHA_INT_FIRE)
+ to_chat(occupants, "[icon2html(src, occupants)]Internal fire extinguished.")
+ if(MECHA_INT_TANK_BREACH)
+ to_chat(occupants, "[icon2html(src, occupants)]Damaged internal tank has been sealed.")
+ internal_damage &= ~int_dam_flag
+ diag_hud_set_mechstat()
+
+/////////////////////////////////////
+//////////// AI piloting ////////////
+/////////////////////////////////////
+
+/obj/vehicle/sealed/mecha/attack_ai(mob/living/silicon/ai/user)
+ if(!isAI(user))
+ return
+ //Allows the Malf to scan a mech's status and loadout, helping it to decide if it is a worthy chariot.
+ if(user.can_dominate_mechs)
+ examine(user) //Get diagnostic information!
+ for(var/obj/item/mecha_parts/mecha_tracking/B in trackers)
+ to_chat(user, "Warning: Tracking Beacon detected. Enter at your own risk. Beacon Data:")
+ to_chat(user, "[B.get_mecha_info()]")
+ break
+ //Nothing like a big, red link to make the player feel powerful!
+ to_chat(user, "ASSUME DIRECT CONTROL? ")
+ else
+ examine(user)
+ if(length(return_drivers()) > 0)
+ to_chat(user, "This exosuit has a pilot and cannot be controlled.")
+ return
+ var/can_control_mech = 0
+ for(var/obj/item/mecha_parts/mecha_tracking/ai_control/A in trackers)
+ can_control_mech = 1
+ to_chat(user, "[icon2html(src, user)] Status of [name]:\n[A.get_mecha_info()]")
+ break
+ if(!can_control_mech)
+ to_chat(user, "You cannot control exosuits without AI control beacons installed.")
+ return
+ to_chat(user, "Take control of exosuit? ")
+
+/obj/vehicle/sealed/mecha/transfer_ai(interaction, mob/user, mob/living/silicon/ai/AI, obj/item/aicard/card)
+ if(!..())
+ return
+
+ //Transfer from core or card to mech. Proc is called by mech.
+ switch(interaction)
+ if(AI_TRANS_TO_CARD) //Upload AI from mech to AI card.
+ if(!construction_state) //Mech must be in maint mode to allow carding.
+ to_chat(user, "[name] must have maintenance protocols active in order to allow a transfer.")
+ return
+ if(!locate(AI) in occupants) //Mech does not have an AI for a pilot
+ to_chat(user, "No AI detected in the [name] onboard computer.")
+ return
+ for(var/mob/living/silicon/ai in occupants)
+ AI.ai_restore_power()//So the AI initially has power.
+ AI.control_disabled = TRUE
+ AI.radio_enabled = FALSE
+ AI.disconnect_shell()
+ remove_occupant(AI)
+ mecha_flags &= ~SILICON_PILOT
+ AI.forceMove(card)
+ card.AI = AI
+ AI.controlled_mech = null
+ AI.remote_control = null
+ to_chat(AI, "You have been downloaded to a mobile storage device. Wireless connection offline.")
+ to_chat(user, "Transfer successful: [AI.name] ([rand(1000,9999)].exe) removed from [name] and stored within local memory.")
+
+ if(AI_MECH_HACK) //Called by AIs on the mech
+ AI.linked_core = new /obj/structure/AIcore/deactivated(AI.loc)
+ if(AI.can_dominate_mechs)
+ if(LAZYLEN(occupants)) //Oh, I am sorry, were you using that?
+ to_chat(AI, "Occupants detected! Forced ejection initiated!")
+ to_chat(occupants, "You have been forcibly ejected!")
+ ejectall() //IT IS MINE, NOW. SUCK IT, RD!
+ ai_enter_mech(AI, interaction)
+
+ if(AI_TRANS_FROM_CARD) //Using an AI card to upload to a mech.
+ AI = card.AI
+ if(!AI)
+ to_chat(user, "There is no AI currently installed on this device.")
+ return
+ if(AI.deployed_shell) //Recall AI if shelled so it can be checked for a client
+ AI.disconnect_shell()
+ if(AI.stat || !AI.client)
+ to_chat(user, "[AI.name] is currently unresponsive, and cannot be uploaded.")
+ return
+ if((LAZYLEN(occupants) >= max_occupants) || dna_lock) //Normal AIs cannot steal mechs!
+ to_chat(user, "Access denied. [name] is [LAZYLEN(occupants) >= max_occupants ? "currently fully occupied" : "secured with a DNA lock"].")
+ return
+ AI.control_disabled = FALSE
+ AI.radio_enabled = TRUE
+ to_chat(user, "Transfer successful: [AI.name] ([rand(1000,9999)].exe) installed and executed successfully. Local copy has been removed.")
+ card.AI = null
+ ai_enter_mech(AI, interaction)
+
+//Hack and From Card interactions share some code, so leave that here for both to use.
+/obj/vehicle/sealed/mecha/proc/ai_enter_mech(mob/living/silicon/ai/AI, interaction)
+ AI.ai_restore_power()
+ mecha_flags |= SILICON_PILOT
+ moved_inside(AI)
+ AI.cancel_camera()
+ AI.controlled_mech = src
+ AI.remote_control = src
+ AI.mobility_flags = ALL //Much easier than adding AI checks! Be sure to set this back to 0 if you decide to allow an AI to leave a mech somehow.
+ if(interaction == AI_MECH_HACK)
+ AI.can_shunt = FALSE //ONE AI ENTERS. NO AI LEAVES.
+ to_chat(AI, AI.can_dominate_mechs ? "Takeover of [name] complete! You are now loaded onto the onboard computer. Do not attempt to leave the station sector!" :\
+ "You have been uploaded to a mech's onboard computer.")
+ to_chat(AI, "Use Middle-Mouse to activate mech functions and equipment. Click normally for AI interactions.")
+
+
+///Handles an actual AI (simple_animal mecha pilot) entering the mech
+/obj/vehicle/sealed/mecha/proc/aimob_enter_mech(mob/living/simple_animal/hostile/syndicate/mecha_pilot/pilot_mob)
+ if(pilot_mob && pilot_mob.Adjacent(src))
+ if(LAZYLEN(occupants))
+ return
+ LAZYADD(occupants, src)
+ pilot_mob.mecha = src
+ pilot_mob.forceMove(src)
+ update_icon()
+
+///Handles an actual AI (simple_animal mecha pilot) exiting the mech
+/obj/vehicle/sealed/mecha/proc/aimob_exit_mech(mob/living/simple_animal/hostile/syndicate/mecha_pilot/pilot_mob)
+ LAZYREMOVE(occupants, pilot_mob)
+ if(pilot_mob.mecha == src)
+ pilot_mob.mecha = null
+ pilot_mob.forceMove(get_turf(src))
+ update_icon()
+
+
+/////////////////////////////////////
+//////// Atmospheric stuff ////////
+/////////////////////////////////////
+
+/obj/vehicle/sealed/mecha/remove_air(amount)
+ if(use_internal_tank)
+ return cabin_air.remove(amount)
+ return ..()
+
+/obj/vehicle/sealed/mecha/remove_air_ratio(ratio)
+ if(use_internal_tank)
+ return cabin_air.remove_ratio(ratio)
+ return ..()
+
+
+/obj/vehicle/sealed/mecha/return_air()
+ if(use_internal_tank)
+ return cabin_air
+ return ..()
+
+
+/obj/vehicle/sealed/mecha/proc/return_pressure()
+ var/datum/gas_mixture/t_air = return_air()
+ if(t_air)
+ . = t_air.return_pressure()
+ return
+
+/obj/vehicle/sealed/mecha/return_temperature()
+ var/datum/gas_mixture/t_air = return_air()
+ if(t_air)
+ . = t_air.return_temperature()
+ return
+
+/obj/vehicle/sealed/mecha/mob_try_enter(mob/M)
+ if(!ishuman(M)) // no silicons or drones in mechas.
+ return
+ log_message("[M] tries to move into [src].", LOG_MECHA)
+ if(dna_lock && M.has_dna())
+ var/mob/living/carbon/entering_carbon = M
+ if(entering_carbon.dna.unique_enzymes != dna_lock)
+ to_chat(M, "Access denied. [name] is secured with a DNA lock.")
+ log_message("Permission denied (DNA LOCK).", LOG_MECHA)
+ return
+ if(!operation_allowed(M))
+ to_chat(M, "Access denied. Insufficient operation keycodes.")
+ log_message("Permission denied (No keycode).", LOG_MECHA)
+ return
+ if(M.buckled)
+ to_chat(M, "You are currently buckled and cannot move.")
+ log_message("Permission denied (Buckled).", LOG_MECHA)
+ return
+ if(M.has_buckled_mobs()) //mob attached to us
+ to_chat(M, "You can't enter the exosuit with other creatures attached to you!")
+ log_message("Permission denied (Attached mobs).", LOG_MECHA)
+ return
+
+ visible_message("[M] starts to climb into [name].")
+
+ if(do_after(M, enter_delay, target = src))
+ if(obj_integrity <= 0)
+ to_chat(M, "You cannot get in the [name], it has been destroyed!")
+ else if(LAZYLEN(occupants) >= max_occupants)
+ to_chat(M, "[occupants[occupants.len]] was faster! Try better next time, loser.")//get the last one that hopped in
+ else if(M.buckled)
+ to_chat(M, "You can't enter the exosuit while buckled.")
+ else if(M.has_buckled_mobs())
+ to_chat(M, "You can't enter the exosuit with other creatures attached to you!")
+ else
+ moved_inside(M)
+ return ..()
+ else
+ to_chat(M, "You stop entering the exosuit!")
+
+
+/obj/vehicle/sealed/mecha/generate_actions()
+ initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/mech_eject) // I don't see a single problem in generating exit vehicle action.
+ initialize_controller_action_type(/datum/action/vehicle/sealed/mecha/mech_toggle_internals, VEHICLE_CONTROL_SETTINGS)
+ initialize_controller_action_type(/datum/action/vehicle/sealed/mecha/mech_cycle_equip, VEHICLE_CONTROL_EQUIPMENT)
+ initialize_controller_action_type(/datum/action/vehicle/sealed/mecha/mech_toggle_lights, VEHICLE_CONTROL_SETTINGS)
+ initialize_controller_action_type(/datum/action/vehicle/sealed/mecha/mech_view_stats, VEHICLE_CONTROL_SETTINGS)
+ initialize_controller_action_type(/datum/action/vehicle/sealed/mecha/strafe, VEHICLE_CONTROL_DRIVE)
+ if(max_occupants > 1)
+ initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/swap_seat)
+
+/obj/vehicle/sealed/mecha/proc/moved_inside(mob/living/H)
+ . = FALSE
+ if(!(H?.client))
+ return
+ if(ishuman(H) && !Adjacent(H))
+ return
+ H.forceMove(src)
+ add_occupant(H)
+ add_fingerprint(H)
+ log_message("[H] moved in as pilot.", LOG_MECHA)
+ setDir(dir_in)
+ playsound(src, 'sound/machines/windowdoor.ogg', 50, TRUE)
+ if(!internal_damage)
+ SEND_SOUND(H, sound('sound/mecha/nominal.ogg',volume=50))
+ return TRUE
+
+/obj/vehicle/sealed/mecha/proc/mmi_move_inside(obj/item/mmi/M, mob/user)
+ if(!M.brainmob || !M.brainmob.client)
+ to_chat(user, "Consciousness matrix not detected!")
+ return FALSE
+ else if(M.brainmob.stat)
+ to_chat(user, "Beta-rhythm below acceptable level!")
+ return FALSE
+ var/mob/living/brain/B = M.brainmob
+ if(LAZYLEN(occupants) >= max_occupants)
+ to_chat(user, "It's full!")
+ return FALSE
+ if(dna_lock && (!B.stored_dna || (dna_lock != B.stored_dna.unique_enzymes)))
+ to_chat(user, "Access denied. [name] is secured with a DNA lock.")
+ return FALSE
+
+ visible_message("[user] starts to insert an MMI into [name].")
+
+ if(do_after(user, 40, target = src))
+ if(LAZYLEN(occupants) < max_occupants)
+ return mmi_moved_inside(M, user)
+ else
+ to_chat(user, "Maximum occupants detected!")
+ else
+ to_chat(user, "You stop inserting the MMI.")
+ return FALSE
+
+/obj/vehicle/sealed/mecha/proc/mmi_moved_inside(obj/item/mmi/M, mob/user)
+ if(!(Adjacent(M) && Adjacent(user)))
+ return FALSE
+ if(!M.brainmob || !M.brainmob.client)
+ to_chat(user, "Consciousness matrix not detected!")
+ return FALSE
+ else if(M.brainmob.stat)
+ to_chat(user, "Beta-rhythm below acceptable level!")
+
+ var/mob/living/brain/B = M.brainmob
+ if(!user.transferItemToLoc(M, src))
+ to_chat(user, "\the [M] is stuck to your hand, you cannot put it in \the [src]!")
+ return FALSE
+
+ M.mecha = src
+ add_occupant(B)//Note this forcemoves the brain into the mech to allow relaymove
+ mecha_flags |= SILICON_PILOT
+ B.reset_perspective(src)
+ B.remote_control = src
+ B.update_mobility()
+ setDir(dir_in)
+ log_message("[M] moved in as pilot.", LOG_MECHA)
+ if(!internal_damage)
+ SEND_SOUND(M, sound('sound/mecha/nominal.ogg',volume=50))
+ log_game("[key_name(user)] has put the MMI/posibrain of [key_name(B)] into [src] at [AREACOORD(src)]")
+ return TRUE
+
+/obj/vehicle/sealed/mecha/container_resist(mob/living/user)
+ if(isAI(user))
+ var/mob/living/silicon/ai/AI = user
+ if(!AI.can_shunt)
+ to_chat(AI, "You can't leave a mech after dominating it!.")
+ return FALSE
+ to_chat(user, "You begin the ejection procedure. Equipment is disabled during this process. Hold still to finish ejecting.")
+ is_currently_ejecting = TRUE
+ if(do_after(user, exit_delay , target = src))
+ to_chat(user, "You exit the mech.")
+ mob_try_exit(user, silent = FALSE)
+ else
+ to_chat(user, "You stop exiting the mech. Weapons are enabled again.")
+ is_currently_ejecting = FALSE
+
+/obj/vehicle/sealed/mecha/proc/ejectall()
+ for(var/ejectee in occupants)
+ mob_try_exit(ejectee, TRUE, TRUE)
+
+/obj/vehicle/sealed/mecha/mob_try_exit(mob/M, silent, randomstep)
+ mob_exit(M, silent, randomstep)
+
+/obj/vehicle/sealed/mecha/mob_exit(mob/M, silent, forced)
+ var/newloc = get_turf(src)
+ var/atom/movable/mob_container
+ if(ishuman(M))
+ remove_occupant(M)
+ ..()
+ return
+ else if(isbrain(M))
+ var/mob/living/brain/brain = M
+ mob_container = brain.container
+ else if(isAI(M))
+ var/mob/living/silicon/ai/AI = M
+ if(forced)//This should only happen if there are multiple AIs in a round, and at least one is Malf.
+ AI.gib() //If one Malf decides to steal a mech from another AI (even other Malfs!), they are destroyed, as they have nowhere to go when replaced.
+ AI = null
+ mecha_flags &= ~SILICON_PILOT
+ return
+ else
+ if(!AI.linked_core)
+ to_chat(AI, "Inactive core destroyed. Unable to return.")
+ AI.linked_core = null
+ return
+ to_chat(AI, "Returning to core...")
+ AI.controlled_mech = null
+ AI.remote_control = null
+ mob_container = AI
+ newloc = get_turf(AI.linked_core)
+ qdel(AI.linked_core)
+ else
+ return ..()
+ var/mob/living/L = M
+ mecha_flags &= ~SILICON_PILOT
+ if(mob_container.forceMove(newloc))
+ log_message("[mob_container] moved out.", LOG_MECHA)
+ L << browse(null, "window=exosuit")
+ if(istype(mob_container, /obj/item/mmi))
+ var/obj/item/mmi/mmi = mob_container
+ if(mmi.brainmob)
+ L.forceMove(mmi)
+ L.reset_perspective()
+ remove_occupant(L)
+ mmi.mecha = null
+ mmi.update_icon()
+ L.mobility_flags = NONE
+ setDir(dir_in)
+ return ..()
+
+
+/obj/vehicle/sealed/mecha/add_occupant(mob/M, control_flags)
+ RegisterSignal(M, COMSIG_MOB_DEATH, .proc/mob_exit)
+ RegisterSignal(M, COMSIG_MOB_CLICKON, .proc/on_mouseclick)
+ RegisterSignal(M, COMSIG_MOB_SAY, .proc/display_speech_bubble)
+ return ..()
+
+/obj/vehicle/sealed/mecha/after_add_occupant(mob/M)
+ . = ..()
+ update_icon()
+ M.update_mouse_pointer()
+
+/obj/vehicle/sealed/mecha/remove_occupant(mob/M)
+ UnregisterSignal(M, COMSIG_MOB_DEATH)
+ UnregisterSignal(M, COMSIG_MOB_CLICKON)
+ UnregisterSignal(M, COMSIG_MOB_SAY)
+ M.clear_alert("charge")
+ M.clear_alert("mech damage")
+ if(M.client)
+ M.client.view_size.resetToDefault()
+ zoom_mode = 0
+ return ..()
+
+/obj/vehicle/sealed/mecha/after_remove_occupant(mob/M)
+ . = ..()
+ update_icon()
+ M.update_mouse_pointer()
+
+/////////////////////////
+////// Access stuff /////
+/////////////////////////
+
+/obj/vehicle/sealed/mecha/proc/operation_allowed(mob/M)
+ req_access = operation_req_access
+ req_one_access = list()
+ return allowed(M)
+
+/obj/vehicle/sealed/mecha/proc/internals_access_allowed(mob/M)
+ req_one_access = internals_req_access
+ req_access = list()
+ return allowed(M)
+
+
+///////////////////////
+///// Power stuff /////
+///////////////////////
+
+/obj/vehicle/sealed/mecha/proc/has_charge(amount)
+ return (get_charge()>=amount)
+
+/obj/vehicle/sealed/mecha/proc/get_charge()
+ for(var/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/R in equipment)
+ var/relay_charge = R.get_charge()
+ if(relay_charge)
+ return relay_charge
+ if(cell)
+ return max(0, cell.charge)
+
+/obj/vehicle/sealed/mecha/proc/use_power(amount)
+ if(get_charge() && cell.use(amount))
+ return TRUE
+ return FALSE
+
+/obj/vehicle/sealed/mecha/proc/give_power(amount)
+ if(!isnull(get_charge()))
+ cell.give(amount)
+ return TRUE
+ return FALSE
+
+///////////////////////
+////// Ammo stuff /////
+///////////////////////
+
+/obj/vehicle/sealed/mecha/proc/ammo_resupply(obj/item/mecha_ammo/A, mob/user,fail_chat_override = FALSE)
+ if(!A.rounds)
+ if(!fail_chat_override)
+ to_chat(user, "This box of ammo is empty!")
+ return FALSE
+ var/ammo_needed
+ var/found_gun
+ for(var/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/gun in equipment)
+ ammo_needed = 0
+
+ if(istype(gun, /obj/item/mecha_parts/mecha_equipment/weapon/ballistic) && gun.ammo_type == A.ammo_type)
+ found_gun = TRUE
+ if(A.direct_load)
+ ammo_needed = initial(gun.projectiles) - gun.projectiles
+ else
+ ammo_needed = gun.projectiles_cache_max - gun.projectiles_cache
+
+ if(ammo_needed)
+ if(ammo_needed < A.rounds)
+ if(A.direct_load)
+ gun.projectiles = gun.projectiles + ammo_needed
+ else
+ gun.projectiles_cache = gun.projectiles_cache + ammo_needed
+ playsound(get_turf(user),A.load_audio,50,TRUE)
+ to_chat(user, "You add [ammo_needed] [A.round_term][ammo_needed > 1?"s":""] to the [gun.name]")
+ A.rounds = A.rounds - ammo_needed
+ A.update_name()
+ return TRUE
+
+ else
+ if(A.direct_load)
+ gun.projectiles = gun.projectiles + A.rounds
+ else
+ gun.projectiles_cache = gun.projectiles_cache + A.rounds
+ playsound(get_turf(user),A.load_audio,50,TRUE)
+ to_chat(user, "You add [A.rounds] [A.round_term][A.rounds > 1?"s":""] to the [gun.name]")
+ A.rounds = 0
+ A.update_name()
+ return TRUE
+ if(!fail_chat_override)
+ if(found_gun)
+ to_chat(user, "You can't fit any more ammo of this type!")
+ else
+ to_chat(user, "None of the equipment on this exosuit can use this ammo!")
+ return FALSE
diff --git a/code/modules/vehicles/mecha/combat/combat.dm b/code/modules/vehicles/mecha/combat/combat.dm
new file mode 100644
index 0000000000..b5479c6867
--- /dev/null
+++ b/code/modules/vehicles/mecha/combat/combat.dm
@@ -0,0 +1,18 @@
+/obj/vehicle/sealed/mecha/combat
+ force = 30
+ internals_req_access = list(ACCESS_ROBOTICS, ACCESS_SECURITY)
+ internal_damage_threshold = 50
+ armor = list(MELEE = 30, BULLET = 30, LASER = 15, ENERGY = 20, BOMB = 20, BIO = 0, RAD = 0, FIRE = 100, ACID = 100)
+ mouse_pointer = 'icons/mecha/mecha_mouse.dmi'
+ destruction_sleep_duration = 40
+ exit_delay = 40
+
+/obj/vehicle/sealed/mecha/combat/restore_equipment()
+ mouse_pointer = 'icons/mecha/mecha_mouse.dmi'
+ . = ..()
+
+/obj/vehicle/sealed/mecha/combat/proc/max_ammo() //Max the ammo stored for Nuke Ops mechs, or anyone else that calls this
+ for(var/obj/item/I in equipment)
+ if(istype(I, /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/))
+ var/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/gun = I
+ gun.projectiles_cache = gun.projectiles_cache_max
diff --git a/code/modules/vehicles/mecha/combat/durand.dm b/code/modules/vehicles/mecha/combat/durand.dm
new file mode 100644
index 0000000000..36c5f75984
--- /dev/null
+++ b/code/modules/vehicles/mecha/combat/durand.dm
@@ -0,0 +1,241 @@
+/obj/vehicle/sealed/mecha/combat/durand
+ desc = "An aging combat exosuit utilized by the Nanotrasen corporation. Originally developed to combat hostile alien lifeforms."
+ name = "\improper Durand"
+ icon_state = "durand"
+ movedelay = 4
+ dir_in = 1 //Facing North.
+ max_integrity = 400
+ deflect_chance = 20
+ armor = list(MELEE = 40, BULLET = 35, LASER = 15, ENERGY = 10, BOMB = 20, BIO = 0, RAD = 50, FIRE = 100, ACID = 100)
+ max_temperature = 30000
+ force = 40
+ wreckage = /obj/structure/mecha_wreckage/durand
+ var/obj/durand_shield/shield
+
+
+/obj/vehicle/sealed/mecha/combat/durand/Initialize(mapload)
+ . = ..()
+ shield = new /obj/durand_shield(loc, src, layer, dir)
+ RegisterSignal(src, COMSIG_MECHA_ACTION_TRIGGER, .proc/relay)
+ RegisterSignal(src, COMSIG_PROJECTILE_PREHIT, .proc/prehit)
+
+
+/obj/vehicle/sealed/mecha/combat/durand/Destroy()
+ if(shield)
+ QDEL_NULL(shield)
+ return ..()
+
+
+/obj/vehicle/sealed/mecha/combat/durand/generate_actions()
+ . = ..()
+ initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/mech_defense_mode)
+
+/obj/vehicle/sealed/mecha/combat/durand/process()
+ . = ..()
+ if(defense_mode && !use_power(100)) //Defence mode can only be on with a occupant so we check if one of them can toggle it and toggle
+ for(var/O in occupants)
+ var/mob/living/occupant = O
+ var/datum/action/action = LAZYACCESSASSOC(occupant_actions, occupant, /datum/action/vehicle/sealed/mecha/mech_defense_mode)
+ if(action)
+ INVOKE_ASYNC(action, /datum/action.proc/Trigger)
+ break
+
+/obj/vehicle/sealed/mecha/combat/durand/Move(direction)
+ . = ..()
+ if(shield)
+ shield.forceMove(loc)
+ shield.setDir(dir)
+
+/obj/vehicle/sealed/mecha/combat/durand/forceMove(turf/T)
+ . = ..()
+ shield.forceMove(T)
+
+/obj/vehicle/sealed/mecha/combat/durand/mob_exit(mob/M, silent, randomstep, forced)
+ if(defense_mode)
+ var/datum/action/action = LAZYACCESSASSOC(occupant_actions, M, /datum/action/vehicle/sealed/mecha/mech_defense_mode)
+ if(action)
+ INVOKE_ASYNC(action, /datum/action.proc/Trigger, FALSE)
+ return ..()
+
+///Relays the signal from the action button to the shield, and creates a new shield if the old one is MIA.
+/obj/vehicle/sealed/mecha/combat/durand/proc/relay(datum/source, mob/owner, list/signal_args)
+ SIGNAL_HANDLER
+ if(!shield) //if the shield somehow got deleted
+ stack_trace("Durand triggered relay without a shield")
+ shield = new /obj/durand_shield(loc, src, layer)
+ shield.setDir(dir)
+ SEND_SIGNAL(shield, COMSIG_MECHA_ACTION_TRIGGER, owner, signal_args)
+
+//Redirects projectiles to the shield if defense_check decides they should be blocked and returns true.
+/obj/vehicle/sealed/mecha/combat/durand/proc/prehit(obj/item/projectile/source, list/signal_args)
+ if(defense_check(source.loc) && shield)
+ signal_args[2] = shield
+
+
+/**Checks if defense mode is enabled, and if the attacker is standing in an area covered by the shield.
+Expects a turf. Returns true if the attack should be blocked, false if not.*/
+/obj/vehicle/sealed/mecha/combat/durand/proc/defense_check(turf/aloc)
+ if (!defense_mode || !shield || shield.switching)
+ return FALSE
+ . = FALSE
+ switch(dir)
+ if (1)
+ if(abs(x - aloc.x) <= (y - aloc.y) * -2)
+ . = TRUE
+ if (2)
+ if(abs(x - aloc.x) <= (y - aloc.y) * 2)
+ . = TRUE
+ if (4)
+ if(abs(y - aloc.y) <= (x - aloc.x) * -2)
+ . = TRUE
+ if (8)
+ if(abs(y - aloc.y) <= (x - aloc.x) * 2)
+ . = TRUE
+ return
+
+/obj/vehicle/sealed/mecha/combat/durand/attack_generic(mob/user, damage_amount = 0, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, armor_penetration = 0)
+ if(defense_check(user.loc))
+ log_message("Attack absorbed by defense field. Attacker - [user].", LOG_MECHA, color="orange")
+ shield.attack_generic(user, damage_amount, damage_type, damage_flag, sound_effect, armor_penetration)
+ else
+ . = ..()
+
+/obj/vehicle/sealed/mecha/combat/durand/blob_act(obj/structure/blob/B)
+ if(defense_check(B.loc))
+ log_message("Attack by blob. Attacker - [B].", LOG_MECHA, color="red")
+ log_message("Attack absorbed by defense field.", LOG_MECHA, color="orange")
+ shield.blob_act(B)
+ else
+ . = ..()
+
+/obj/vehicle/sealed/mecha/combat/durand/attackby(obj/item/W as obj, mob/user as mob, params)
+ if(defense_check(user.loc))
+ log_message("Attack absorbed by defense field. Attacker - [user], with [W]", LOG_MECHA, color="orange")
+ shield.attackby(W, user, params)
+ else
+ . = ..()
+
+/obj/vehicle/sealed/mecha/combat/durand/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum)
+ if(defense_check(AM.loc))
+ log_message("Impact with [AM] absorbed by defense field.", LOG_MECHA, color="orange")
+ shield.hitby(AM, skipcatch, hitpush, blocked, throwingdatum)
+ else
+ . = ..()
+
+////////////////////////////
+///// Shield processing ////
+////////////////////////////
+
+/**An object to take the hit for us when using the Durand's defense mode.
+It is spawned in during the durand's initilization, and always stays on the same tile.
+Normally invisible, until defense mode is actvated. When the durand detects an attack that should be blocked, the
+attack is passed to the shield. The shield takes the damage, uses it to calculate charge cost, and then sets its
+own integrity back to max. Shield is automatically dropped if we run out of power or the user gets out.*/
+
+/obj/durand_shield //projectiles get passed to this when defense mode is enabled
+ name = "defense grid"
+ icon = 'icons/mecha/durand_shield.dmi'
+ icon_state = "shield_null"
+ invisibility = INVISIBILITY_MAXIMUM //no showing on right-click
+ pixel_y = 4
+ max_integrity = 10000
+ obj_integrity = 10000
+ anchored = TRUE
+ light_range = MINIMUM_USEFUL_LIGHT_RANGE
+ light_power = 5
+ light_color = COLOR_CYAN
+ ///Our link back to the durand
+ var/obj/vehicle/sealed/mecha/combat/durand/chassis
+ ///To keep track of things during the animation
+ var/switching = FALSE
+ var/currentuser
+
+
+/obj/durand_shield/Initialize(mapload, _chassis, _layer, _dir)
+ . = ..()
+ chassis = _chassis
+ layer = _layer
+ setDir(_dir)
+ RegisterSignal(src, COMSIG_MECHA_ACTION_TRIGGER, .proc/activate)
+
+
+/obj/durand_shield/Destroy()
+ if(chassis)
+ chassis.shield = null
+ chassis = null
+ return ..()
+
+/**
+ *Handles activating and deactivating the shield. This proc is called by a signal sent from the mech's action button
+ *and relayed by the mech itself. The "forced" variabe, signal_args[1], will skip the to-pilot text and is meant for when
+ *the shield is disabled by means other than the action button (like running out of power)
+ * Arguments:
+ * * source: the shield
+ * * owner: mob that activated the shield
+ * * signal_args: whether it's forced
+ */
+/obj/durand_shield/proc/activate(datum/source, mob/owner, list/signal_args)
+ SIGNAL_HANDLER
+ currentuser = owner
+ if(!chassis?.occupants)
+ return
+ if(switching && !signal_args[1])
+ return
+ if(!chassis.defense_mode && (!chassis.cell || chassis.cell.charge < 100)) //If it's off, and we have less than 100 units of power
+ to_chat(currentuser, "[icon2html(src, currentuser)]Insufficient power; cannot activate defense mode.")
+ return
+ switching = TRUE
+ chassis.defense_mode = !chassis.defense_mode
+ if(!signal_args[1])
+ to_chat(currentuser, "[icon2html(src, currentuser)]Defense mode [chassis.defense_mode?"enabled":"disabled"].")
+ chassis.log_message("User has toggled defense mode -- now [chassis.defense_mode?"enabled":"disabled"].", LOG_MECHA)
+ else
+ chassis.log_message("defense mode state changed -- now [chassis.defense_mode?"enabled":"disabled"].", LOG_MECHA)
+ for(var/occupant in chassis.occupants)
+ var/datum/action/button = chassis.occupant_actions[occupant][/datum/action/vehicle/sealed/mecha/mech_defense_mode]
+ button.button_icon_state = "mech_defense_mode_[chassis.defense_mode ? "on" : "off"]"
+ button.UpdateButtonIcon()
+
+ set_light(light_range, light_power, light_color)
+
+ if(chassis.defense_mode)
+ invisibility = 0
+ flick("shield_raise", src)
+ playsound(src, 'sound/mecha/mech_shield_raise.ogg', 50, FALSE)
+ set_light(l_range = MINIMUM_USEFUL_LIGHT_RANGE , l_power = 5, l_color = "#00FFFF")
+ icon_state = "shield"
+ RegisterSignal(chassis, COMSIG_ATOM_DIR_CHANGE, .proc/resetdir)
+ else
+ flick("shield_drop", src)
+ playsound(src, 'sound/mecha/mech_shield_drop.ogg', 50, FALSE)
+ set_light(0)
+ icon_state = "shield_null"
+ invisibility = INVISIBILITY_MAXIMUM //no showing on right-click
+ UnregisterSignal(chassis, COMSIG_ATOM_DIR_CHANGE)
+ switching = FALSE
+
+/obj/durand_shield/proc/resetdir(datum/source, olddir, newdir)
+ setDir(newdir)
+
+/obj/durand_shield/take_damage()
+ if(!chassis)
+ qdel(src)
+ return
+ if(!chassis.defense_mode) //if defense mode is disabled, we're taking damage that we shouldn't be taking
+ return
+ . = ..()
+ flick("shield_impact", src)
+ if(!chassis.use_power((max_integrity - obj_integrity) * 100))
+ chassis.cell?.charge = 0
+ for(var/O in chassis.occupants)
+ var/mob/living/occupant = O
+ var/datum/action/action = LAZYACCESSASSOC(chassis.occupant_actions, occupant, /datum/action/vehicle/sealed/mecha/mech_defense_mode)
+ action.Trigger(FALSE)
+ obj_integrity = 10000
+
+/obj/durand_shield/play_attack_sound()
+ playsound(src, 'sound/mecha/mech_shield_deflect.ogg', 100, TRUE)
+
+/obj/durand_shield/bullet_act()
+ play_attack_sound()
+ . = ..()
diff --git a/code/game/mecha/combat/five_stars.dm b/code/modules/vehicles/mecha/combat/five_stars.dm
similarity index 73%
rename from code/game/mecha/combat/five_stars.dm
rename to code/modules/vehicles/mecha/combat/five_stars.dm
index 250ec7f3f6..6a73c3adde 100644
--- a/code/game/mecha/combat/five_stars.dm
+++ b/code/modules/vehicles/mecha/combat/five_stars.dm
@@ -1,16 +1,16 @@
-/obj/mecha/combat/five_stars
+/obj/vehicle/sealed/mecha/combat/five_stars
desc = "A state of the art tank deployed by the Spinward Stellar Coalition National Guard."
name = "\improper Tank"
icon = 'icons/mecha/mecha_96x96.dmi'
icon_state = "five_stars"
- armor = list("melee" = 100, "bullet" = 50, "laser" = 35, "energy" = 35, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
+ armor = list(MELEE = 100, BULLET = 50, LASER = 35, ENERGY = 35, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 100)
step_in = 4
dir_in = 1 //Facing North.
max_integrity = 800
pixel_x = -32
pixel_y = -32
-/obj/mecha/combat/five_stars/Initialize()
+/obj/vehicle/sealed/mecha/combat/five_stars/Initialize(mapload)
. = ..()
var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/spacecops(src)
ME.attach(src)
diff --git a/code/modules/vehicles/mecha/combat/gygax.dm b/code/modules/vehicles/mecha/combat/gygax.dm
new file mode 100644
index 0000000000..29746a5fc7
--- /dev/null
+++ b/code/modules/vehicles/mecha/combat/gygax.dm
@@ -0,0 +1,59 @@
+/obj/vehicle/sealed/mecha/combat/gygax
+ desc = "A lightweight, security exosuit. Popular among private and corporate security."
+ name = "\improper Gygax"
+ icon_state = "gygax"
+ allow_diagonal_movement = TRUE
+ movedelay = 3
+ dir_in = 1 //Facing North.
+ max_integrity = 250
+ deflect_chance = 5
+ armor = list(MELEE = 25, BULLET = 20, LASER = 30, ENERGY = 15, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 100)
+ max_temperature = 25000
+ leg_overload_coeff = 80
+ force = 25
+ wreckage = /obj/structure/mecha_wreckage/gygax
+ internal_damage_threshold = 35
+ max_equip = 3
+ step_energy_drain = 3
+
+/obj/vehicle/sealed/mecha/combat/gygax/dark
+ desc = "A lightweight exosuit, painted in a dark scheme. This model appears to have some modifications."
+ name = "\improper Dark Gygax"
+ icon_state = "darkgygax"
+ max_integrity = 300
+ deflect_chance = 20
+ armor = list(MELEE = 40, BULLET = 40, LASER = 50, ENERGY = 35, BOMB = 20, BIO = 0, RAD =20, FIRE = 100, ACID = 100)
+ max_temperature = 35000
+ leg_overload_coeff = 70
+ force = 30
+ operation_req_access = list(ACCESS_SYNDICATE)
+ internals_req_access = list(ACCESS_SYNDICATE)
+ wreckage = /obj/structure/mecha_wreckage/gygax/dark
+ max_equip = 5
+ destruction_sleep_duration = 20
+
+/obj/vehicle/sealed/mecha/combat/gygax/dark/loaded/Initialize(mapload)
+ . = ..()
+ var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/thrusters/ion(src)
+ ME.attach(src)
+ ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot
+ ME.attach(src)
+ ME = new /obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster
+ ME.attach(src)
+ ME = new /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster
+ ME.attach(src)
+ ME = new /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay
+ ME.attach(src)
+ max_ammo()
+
+/obj/vehicle/sealed/mecha/combat/gygax/dark/add_cell(obj/item/stock_parts/cell/C=null)
+ if(C)
+ C.forceMove(src)
+ cell = C
+ return
+ cell = new /obj/item/stock_parts/cell/bluespace(src)
+
+
+/obj/vehicle/sealed/mecha/combat/gygax/generate_actions()
+ . = ..()
+ initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/mech_overload_mode)
diff --git a/code/game/mecha/combat/honker.dm b/code/modules/vehicles/mecha/combat/honker.dm
similarity index 63%
rename from code/game/mecha/combat/honker.dm
rename to code/modules/vehicles/mecha/combat/honker.dm
index 89b641ccc6..7373469614 100644
--- a/code/game/mecha/combat/honker.dm
+++ b/code/modules/vehicles/mecha/combat/honker.dm
@@ -1,22 +1,21 @@
-/obj/mecha/combat/honker
+/obj/vehicle/sealed/mecha/combat/honker
desc = "Produced by \"Tyranny of Honk, INC\", this exosuit is designed as heavy clown-support. Used to spread the fun and joy of life. HONK!"
name = "\improper H.O.N.K"
icon_state = "honker"
- step_in = 3
+ movedelay = 3
max_integrity = 140
deflect_chance = 60
internal_damage_threshold = 60
- armor = list("melee" = -20, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
+ armor = list(MELEE = -20, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 100)
max_temperature = 25000
- infra_luminosity = 5
operation_req_access = list(ACCESS_THEATRE)
- internals_req_access = list(ACCESS_THEATRE, ACCESS_ROBOTICS)
+ internals_req_access = list(ACCESS_ROBOTICS, ACCESS_THEATRE)
wreckage = /obj/structure/mecha_wreckage/honker
- add_req_access = 0
+ mecha_flags = CANSTRAFE | IS_ENCLOSED | HAS_LIGHTS
max_equip = 3
- var/squeak = 0
+ var/squeak = TRUE
-/obj/mecha/combat/honker/get_stats_part()
+/obj/vehicle/sealed/mecha/combat/honker/get_stats_part(mob/user)
var/integrity = obj_integrity/max_integrity*100
var/cell_charge = get_charge()
var/datum/gas_mixture/int_tank_air = internal_tank.return_air()
@@ -29,18 +28,18 @@
[internal_damage&MECHA_INT_TANK_BREACH?"GAS TANK HONK ":null]
[internal_damage&MECHA_INT_CONTROL_LOST?"HONK-A-DOODLE - Recalibrate ":null]
IntegriHONK: [integrity]%
- PowerHONK charge: [isnull(cell_charge)?"No powercell installed":"[cell.percent()]%"]
+ PowerHONK charge: [isnull(cell_charge)?"No power cell installed":"[cell.percent()]%"]
Air source: [use_internal_tank?"Internal Airtank":"Environment"]
AirHONK pressure: [tank_pressure]kPa
AirHONK temperature: [tank_temperature]°K|[tank_temperature - T0C]°C
HONK pressure: [cabin_pressure>WARNING_HIGH_PRESSURE ? "[cabin_pressure]": cabin_pressure]kPa
HONK temperature: [return_temperature()]°K|[return_temperature() - T0C]°C
- Lights: [lights?"on":"off"]
+ Lights: [(mecha_flags & LIGHTS_ON)?"on":"off"]
[dna_lock?"DNA-locked: [dna_lock] \[Reset\] ":null]
"}
return output
-/obj/mecha/combat/honker/get_stats_html()
+/obj/vehicle/sealed/mecha/combat/honker/get_stats_html(mob/user)
var/output = {"
@@ -60,19 +59,19 @@
[js_byjax]
[js_dropdowns]
function SSticker() {
- setInterval(function(){
- window.location='byond://?src=[REF(src)]&update_content=1';
- document.body.style.color = get_rand_color_string();
- document.body.style.background = get_rand_color_string();
- }, 1000);
+ setInterval(function(){
+ window.location='byond://?src=[REF(src)]&update_content=1';
+ document.body.style.color = get_rand_color_string();
+ document.body.style.background = get_rand_color_string();
+ }, 1000);
}
function get_rand_color_string() {
- var color = new Array;
- for(var i=0;i<3;i++){
- color.push(Math.floor(Math.random()*255));
- }
- return "rgb("+color.toString()+")";
+ var color = new Array;
+ for(var i=0;i<3;i++){
+ color.push(Math.floor(Math.random()*255));
+ }
+ return "rgb("+color.toString()+")";
}
window.onload = function() {
@@ -83,7 +82,7 @@
- [src.get_stats_part()]
+ [src.get_stats_part(user)]
[src.get_equipment_list()]
@@ -97,7 +96,7 @@
"}
return output
-/obj/mecha/combat/honker/get_commands()
+/obj/vehicle/sealed/mecha/combat/honker/get_commands()
var/output = {"
"}
@@ -113,8 +120,8 @@
return output
-/obj/mecha/combat/honker/get_equipment_list()
- if(!equipment.len)
+/obj/vehicle/sealed/mecha/combat/honker/get_equipment_list()
+ if(!LAZYLEN(equipment))
return
var/output = " Honk-ON-Systems:"
for(var/obj/item/mecha_parts/mecha_equipment/MT in equipment)
@@ -122,19 +129,12 @@
output += " "
return output
+/obj/vehicle/sealed/mecha/combat/honker/play_stepsound()
+ if(squeak)
+ playsound(src, "clownstep", 70, 1)
+ squeak = !squeak
-
-/obj/mecha/combat/honker/mechstep(direction)
- var/result = step(src,direction)
- if(result)
- if(!squeak)
- playsound(src, "clownstep", 70, 1)
- squeak = 1
- else
- squeak = 0
- return result
-
-/obj/mecha/combat/honker/Topic(href, href_list)
+/obj/vehicle/sealed/mecha/combat/honker/Topic(href, href_list)
..()
if (href_list["play_sound"])
switch(href_list["play_sound"])
@@ -148,11 +148,20 @@
playsound(src, 'sound/items/carhorn.ogg', 80) //soundfile has lower than average volume
if("party_horn")
playsound(src, 'sound/items/party_horn.ogg', 50)
+ if("reee")
+ playsound(src, 'sound/effects/reee.ogg', 50)
+ if("weeoo1")
+ playsound(src, 'sound/items/weeoo1.ogg', 50)
+ if("hiss1")
+ playsound(src, 'sound/voice/hiss1.ogg', 50)
+ if("armbomb")
+ playsound(src, 'sound/weapons/armbomb.ogg', 50)
+ if("saberon")
+ playsound(src, 'sound/weapons/saberon.ogg', 50)
+ if("airlock_alien_prying")
+ playsound(src, 'sound/machines/airlock_alien_prying.ogg', 50)
+ if("lightningbolt")
+ playsound(src, 'sound/magic/lightningbolt.ogg', 50)
+ if("explosionfar")
+ playsound(src, 'sound/effects/explosionfar.ogg', 50)
return
-
-/proc/rand_hex_color()
- var/list/colors = list("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f")
- var/color=""
- for (var/i=0;i<6;i++)
- color = color+pick(colors)
- return color
diff --git a/code/game/mecha/combat/marauder.dm b/code/modules/vehicles/mecha/combat/marauder.dm
similarity index 61%
rename from code/game/mecha/combat/marauder.dm
rename to code/modules/vehicles/mecha/combat/marauder.dm
index 5c60a97864..0919b71826 100644
--- a/code/game/mecha/combat/marauder.dm
+++ b/code/modules/vehicles/mecha/combat/marauder.dm
@@ -1,38 +1,32 @@
-/obj/mecha/combat/marauder
+/obj/vehicle/sealed/mecha/combat/marauder
desc = "Heavy-duty, combat exosuit, developed after the Durand model. Rarely found among civilian populations."
name = "\improper Marauder"
icon_state = "marauder"
- step_in = 5
+ movedelay = 5
max_integrity = 500
deflect_chance = 25
- armor = list("melee" = 50, "bullet" = 55, "laser" = 40, "energy" = 30, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
+ armor = list(MELEE = 50, BULLET = 55, LASER = 40, ENERGY = 30, BOMB = 30, BIO = 0, RAD = 60, FIRE = 100, ACID = 100)
max_temperature = 60000
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
- infra_luminosity = 3
operation_req_access = list(ACCESS_CENT_SPECOPS)
- internals_req_access = list(ACCESS_CENT_SPECOPS, ACCESS_ROBOTICS)
+ internals_req_access = list(ACCESS_CENT_SPECOPS)
wreckage = /obj/structure/mecha_wreckage/marauder
- add_req_access = 0
+ mecha_flags = CANSTRAFE | IS_ENCLOSED | HAS_LIGHTS
internal_damage_threshold = 25
force = 45
- max_equip = 4
- bumpsmash = 1
+ max_equip = 5
+ bumpsmash = TRUE
-/obj/mecha/combat/marauder/GrantActions(mob/living/user, human_occupant = 0)
- ..()
- smoke_action.Grant(user, src)
- thrusters_action.Grant(user, src)
- zoom_action.Grant(user, src)
-
-/obj/mecha/combat/marauder/RemoveActions(mob/living/user, human_occupant = 0)
- ..()
- smoke_action.Remove(user)
- thrusters_action.Remove(user)
- zoom_action.Remove(user)
-
-/obj/mecha/combat/marauder/loaded/Initialize()
+/obj/vehicle/sealed/mecha/combat/marauder/generate_actions()
. = ..()
- var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/energy/pulse(src)
+ initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/mech_smoke)
+ initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/mech_zoom)
+
+/obj/vehicle/sealed/mecha/combat/marauder/loaded/Initialize(mapload)
+ . = ..()
+ var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/thrusters/ion(src)
+ ME.attach(src)
+ ME = new /obj/item/mecha_parts/mecha_equipment/weapon/energy/pulse(src)
ME.attach(src)
ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack(src)
ME.attach(src)
@@ -42,23 +36,24 @@
ME.attach(src)
max_ammo()
-/obj/mecha/combat/marauder/seraph
+/obj/vehicle/sealed/mecha/combat/marauder/seraph
desc = "Heavy-duty, command-type exosuit. This is a custom model, utilized only by high-ranking military personnel."
name = "\improper Seraph"
icon_state = "seraph"
operation_req_access = list(ACCESS_CENT_SPECOPS)
- internals_req_access = list(ACCESS_CENT_SPECOPS, ACCESS_ROBOTICS)
- step_in = 3
+ internals_req_access = list(ACCESS_CENT_SPECOPS)
+ movedelay = 3
max_integrity = 550
wreckage = /obj/structure/mecha_wreckage/seraph
internal_damage_threshold = 20
force = 55
- max_equip = 5
+ max_equip = 6
-/obj/mecha/combat/marauder/seraph/Initialize()
+/obj/vehicle/sealed/mecha/combat/marauder/seraph/Initialize(mapload)
. = ..()
- var/obj/item/mecha_parts/mecha_equipment/ME
- ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot(src)
+ var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/thrusters/ion(src)
+ ME.attach(src)
+ ME = new /obj/item/mecha_parts/mecha_equipment/weapon/energy/pulse(src)
ME.attach(src)
ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack(src)
ME.attach(src)
@@ -70,16 +65,22 @@
ME.attach(src)
max_ammo()
-/obj/mecha/combat/marauder/mauler
+/obj/vehicle/sealed/mecha/combat/marauder/mauler
desc = "Heavy-duty, combat exosuit, developed off of the existing Marauder model."
name = "\improper Mauler"
icon_state = "mauler"
operation_req_access = list(ACCESS_SYNDICATE)
internals_req_access = list(ACCESS_SYNDICATE)
wreckage = /obj/structure/mecha_wreckage/mauler
- max_equip = 5
+ max_equip = 6
+ destruction_sleep_duration = 20
-/obj/mecha/combat/marauder/mauler/loaded/Initialize()
+/obj/vehicle/sealed/mecha/combat/marauder/mauler/Initialize(mapload)
+ . = ..()
+ var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/thrusters/ion(src)
+ ME.attach(src)
+
+/obj/vehicle/sealed/mecha/combat/marauder/mauler/loaded/Initialize(mapload)
. = ..()
var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg(src)
ME.attach(src)
diff --git a/code/game/mecha/medical/medigax.dm b/code/modules/vehicles/mecha/combat/medigax.dm
similarity index 54%
rename from code/game/mecha/medical/medigax.dm
rename to code/modules/vehicles/mecha/combat/medigax.dm
index 98b7c9455b..6b2f54a976 100644
--- a/code/game/mecha/medical/medigax.dm
+++ b/code/modules/vehicles/mecha/combat/medigax.dm
@@ -1,34 +1,36 @@
-/obj/mecha/medical/medigax
+/obj/vehicle/sealed/mecha/medical/medigax
desc = "A Gygax with it's actuator overload stripped and a slick white paint scheme, for medical use, These exosuits are developed and produced by Vey-Med. (© All rights reserved)."
name = "\improper Medical Gygax"
icon_state = "medigax"
- step_in = 1.75 // a little faster than an odysseus
- max_temperature = 25000
+ allow_diagonal_movement = TRUE
+ movedelay = 2
+ dir_in = 1 //Facing North.
max_integrity = 250
- wreckage = /obj/structure/mecha_wreckage/odysseus
- armor = list("melee" = 25, "bullet" = 20, "laser" = 30, "energy" = 15, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
- internal_damage_threshold = 35
deflect_chance = 15
+ armor = list(MELEE = 25, BULLET = 20, LASER = 30, ENERGY = 15, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 100)
+ max_temperature = 25000
+ wreckage = /obj/structure/mecha_wreckage/odysseus
+ internal_damage_threshold = 35
step_energy_drain = 6
infra_luminosity = 6
+ internals_req_access = list(ACCESS_ROBOTICS, ACCESS_MEDICAL)
-
-/obj/mecha/medical/medigax/moved_inside(mob/living/carbon/human/H)
+/obj/vehicle/sealed/mecha/medical/medigax/moved_inside(mob/living/carbon/human/H)
. = ..()
if(.)
var/datum/atom_hud/hud = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED]
hud.add_hud_to(H)
-/obj/mecha/medical/medigax/go_out()
- if(isliving(occupant))
- var/mob/living/carbon/human/L = occupant
+/obj/vehicle/sealed/mecha/medical/medigax/remove_occupant(mob/M)
+ if(isliving(M))
+ var/mob/living/L = M
var/datum/atom_hud/hud = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED]
hud.remove_hud_from(L)
- ..()
+ return ..()
-/obj/mecha/medical/medigax/mmi_moved_inside(obj/item/mmi/mmi_as_oc, mob/user)
+/obj/vehicle/sealed/mecha/medical/medigax/mmi_moved_inside(obj/item/mmi/M, mob/user)
. = ..()
if(.)
var/datum/atom_hud/hud = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED]
- var/mob/living/brain/B = mmi_as_oc.brainmob
+ var/mob/living/brain/B = M.brainmob
hud.add_hud_to(B)
diff --git a/code/game/mecha/combat/neovgre.dm b/code/modules/vehicles/mecha/combat/neovgre.dm
similarity index 65%
rename from code/game/mecha/combat/neovgre.dm
rename to code/modules/vehicles/mecha/combat/neovgre.dm
index 75470abe88..0426eb9d9a 100644
--- a/code/game/mecha/combat/neovgre.dm
+++ b/code/modules/vehicles/mecha/combat/neovgre.dm
@@ -1,52 +1,49 @@
-/obj/mecha/combat/neovgre
+/obj/vehicle/sealed/mecha/combat/neovgre
name = "Neovgre, the Anima Bulwark"
- desc = "Nezbere's most powerful creation, a mighty war machine of unmatched power said to have ended wars in a single night."
+ desc = "Nezbere's most powerful creation, a mighty war machine of unmatched power said to have ended wars in a single night. Armed with a heavy laser and a tesla sphere generator. Requires a pilot and a gunner."
icon = 'icons/mecha/neovgre.dmi'
icon_state = "neovgre"
max_integrity = 500 //This is THE ratvarian superweaon, its deployment is an investment
- armor = list("melee" = 50, "bullet" = 40, "laser" = 25, "energy" = 25, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100) //Its similar to the clockwork armour albeit with a few buffs becuase RATVARIAN SUPERWEAPON!!
+ armor = list(MELEE = 50, BULLET = 40, LASER = 25, ENERGY = 25, BOMB = 50, BIO = 100, RAD = 100, FIRE = 100, ACID = 100) //Its similar to the clockwork armour albeit with a few buffs becuase RATVARIAN SUPERWEAPON!!
force = 50 //SMASHY SMASHY!!
+ movedelay = 3
internal_damage_threshold = 0
- step_in = 3
pixel_x = -16
layer = ABOVE_MOB_LAYER
- breach_time = 100 //ten seconds till all goes to shit
- recharge_rate = 100
+ var/breach_time = 100 //ten seconds till all goes to shit
+ var/recharge_rate = 100
internals_req_access = list()
- add_req_access = 0
wreckage = /obj/structure/mecha_wreckage/durand/neovgre
stepsound = 'sound/mecha/neostep2.ogg'
turnsound = 'sound/mecha/powerloader_step.ogg'
+ max_occupants = 2
-/obj/mecha/combat/neovgre/GrantActions(mob/living/user, human_occupant = 0) //No Eject action for you sonny jim, your life for Ratvar!
- internals_action.Grant(user, src)
- cycle_action.Grant(user, src)
- lights_action.Grant(user, src)
- stats_action.Grant(user, src)
- strafing_action.Grant(user, src)
+//override this proc if you need to split up mecha control between multiple people (see savannah_ivanov.dm)
+/obj/vehicle/sealed/mecha/combat/neovgre/auto_assign_occupant_flags(mob/M)
+ if(driver_amount() < max_drivers)
+ add_control_flags(M, VEHICLE_CONTROL_DRIVE|VEHICLE_CONTROL_SETTINGS)
+ else
+ add_control_flags(M, VEHICLE_CONTROL_MELEE|VEHICLE_CONTROL_EQUIPMENT)
-/obj/mecha/combat/neovgre/RemoveActions(mob/living/user, human_occupant = 0)
- internals_action.Remove(user)
- cycle_action.Remove(user)
- lights_action.Remove(user)
- stats_action.Remove(user)
- strafing_action.Remove(user)
+/obj/vehicle/sealed/mecha/combat/neovgre/mob_exit(mob/M, silent, forced)
+ if(forced)
+ ..()
-/obj/mecha/combat/neovgre/MouseDrop_T(mob/M, mob/user)
+/obj/vehicle/sealed/mecha/combat/neovgre/MouseDrop_T(mob/M, mob/user)
if(!is_servant_of_ratvar(user))
to_chat(user, " BEGONE HEATHEN!")
return
else
..()
-/obj/mecha/combat/neovgre/moved_inside(mob/living/carbon/human/H)
+/obj/vehicle/sealed/mecha/combat/neovgre/moved_inside(mob/living/carbon/human/H)
var/list/Itemlist = H.get_contents()
for(var/obj/item/clockwork/slab/W in Itemlist)
to_chat(H, " You safely store [W] inside [src].")
qdel(W)
. = ..()
-/obj/mecha/combat/neovgre/obj_destruction()
+/obj/vehicle/sealed/mecha/combat/neovgre/obj_destruction()
for(var/mob/M in src)
to_chat(M, " You are consumed by the fires raging within Neovgre...")
M.dust()
@@ -54,15 +51,15 @@
src.visible_message(" The reactor has gone critical, its going to blow!")
addtimer(CALLBACK(src,.proc/go_critical),breach_time)
-/obj/mecha/combat/neovgre/proc/go_critical()
+/obj/vehicle/sealed/mecha/combat/neovgre/proc/go_critical()
explosion(get_turf(loc), 3, 5, 10, 20, 30)
Destroy(src)
-/obj/mecha/combat/neovgre/container_resist(mob/living/user)
+/obj/vehicle/sealed/mecha/combat/neovgre/container_resist(mob/living/user)
to_chat(user, " Neovgre requires a lifetime commitment friend, no backing out now!")
return
-/obj/mecha/combat/neovgre/process()
+/obj/vehicle/sealed/mecha/combat/neovgre/process()
..()
if(!obj_integrity) //Integrity is zero but we would heal out of that state if we went into this before it recognises it being zero
return
@@ -80,11 +77,13 @@
if(obj_integrity < max_integrity && istype(loc, /turf/open/floor/clockwork))
obj_integrity += min(max_integrity - obj_integrity, max_integrity / 200)
-/obj/mecha/combat/neovgre/Initialize()
+/obj/vehicle/sealed/mecha/combat/neovgre/Initialize(mapload)
.=..()
GLOB.neovgre_exists ++
var/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy/neovgre/N = new
N.attach(src)
+ var/obj/item/mecha_parts/mecha_equipment/weapon/energy/tesla/shocking = new
+ shocking.attach(src)
/obj/structure/mecha_wreckage/durand/neovgre
name = "\improper Neovgre wreckage?"
@@ -97,7 +96,7 @@
desc = "Please re-attach this to neovgre and stop asking questions about why it looks like a normal Nanotrasen issue Solaris laser cannon - Nezbere"
fire_sound = 'sound/weapons/neovgre_laser.ogg'
-/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy/neovgre/can_attach(obj/mecha/combat/neovgre/M)
+/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy/neovgre/can_attach(obj/vehicle/sealed/mecha/combat/neovgre/M)
if(istype(M))
return 1
return 0
diff --git a/code/modules/vehicles/mecha/combat/phazon.dm b/code/modules/vehicles/mecha/combat/phazon.dm
new file mode 100644
index 0000000000..c964b17e36
--- /dev/null
+++ b/code/modules/vehicles/mecha/combat/phazon.dm
@@ -0,0 +1,21 @@
+/obj/vehicle/sealed/mecha/combat/phazon
+ desc = "This is a Phazon exosuit. The pinnacle of scientific research and pride of Nanotrasen, it uses cutting edge bluespace technology and expensive materials."
+ name = "\improper Phazon"
+ icon_state = "phazon"
+ movedelay = 2
+ dir_in = 2 //Facing South.
+ step_energy_drain = 3
+ max_integrity = 200
+ deflect_chance = 30
+ armor = list(MELEE = 30, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 30, BIO = 0, RAD = 50, FIRE = 100, ACID = 100)
+ max_temperature = 25000
+ wreckage = /obj/structure/mecha_wreckage/phazon
+ internal_damage_threshold = 25
+ force = 15
+ max_equip = 3
+ phase_state = "phazon-phase"
+
+/obj/vehicle/sealed/mecha/combat/phazon/generate_actions()
+ . = ..()
+ initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/mech_toggle_phasing)
+ initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/mech_switch_damtype)
diff --git a/code/game/mecha/combat/reticence.dm b/code/modules/vehicles/mecha/combat/reticence.dm
similarity index 66%
rename from code/game/mecha/combat/reticence.dm
rename to code/modules/vehicles/mecha/combat/reticence.dm
index 7343a85483..b0c8b07aaf 100644
--- a/code/game/mecha/combat/reticence.dm
+++ b/code/modules/vehicles/mecha/combat/reticence.dm
@@ -1,26 +1,25 @@
-/obj/mecha/combat/reticence
+/obj/vehicle/sealed/mecha/combat/reticence
desc = "A silent, fast, and nigh-invisible miming exosuit. Popular among mimes and mime assassins."
name = "\improper reticence"
icon_state = "reticence"
- step_in = 2
+ movedelay = 2
dir_in = 1 //Facing North.
max_integrity = 100
deflect_chance = 3
- armor = list("melee" = 25, "bullet" = 20, "laser" = 30, "energy" = 15, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
+ armor = list(MELEE = 25, BULLET = 20, LASER = 30, ENERGY = 15, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 100)
max_temperature = 15000
wreckage = /obj/structure/mecha_wreckage/reticence
operation_req_access = list(ACCESS_THEATRE)
- internals_req_access = list(ACCESS_THEATRE, ACCESS_ROBOTICS)
- add_req_access = 0
+ internals_req_access = list(ACCESS_ROBOTICS, ACCESS_THEATRE)
+ mecha_flags = CANSTRAFE | IS_ENCLOSED | HAS_LIGHTS
internal_damage_threshold = 25
max_equip = 2
step_energy_drain = 3
color = "#87878715"
stepsound = null
turnsound = null
- opacity = 0
-/obj/mecha/combat/reticence/loaded/Initialize()
+/obj/vehicle/sealed/mecha/combat/reticence/loaded/Initialize(mapload)
. = ..()
var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/silenced
ME.attach(src)
diff --git a/code/modules/vehicles/mecha/equipment/mecha_equipment.dm b/code/modules/vehicles/mecha/equipment/mecha_equipment.dm
new file mode 100644
index 0000000000..1d104291f3
--- /dev/null
+++ b/code/modules/vehicles/mecha/equipment/mecha_equipment.dm
@@ -0,0 +1,153 @@
+//DO NOT ADD MECHA PARTS TO THE GAME WITH THE DEFAULT "SPRITE ME" SPRITE!
+//I'm annoyed I even have to tell you this! SPRITE FIRST, then commit.
+
+/obj/item/mecha_parts/mecha_equipment
+ name = "mecha equipment"
+ icon = 'icons/mecha/mecha_equipment.dmi'
+ icon_state = "mecha_equip"
+ force = 5
+ max_integrity = 300
+ var/equip_cooldown = 0
+ var/equip_ready = TRUE //whether the equipment is ready for use. (or deactivated/activated for static stuff)
+ var/energy_drain = 0
+ var/obj/vehicle/sealed/mecha/chassis = null
+ ///Bitflag. Determines the range of the equipment.
+ var/range = MECHA_MELEE
+ /// Bitflag. Used by exosuit fabricator to assign sub-categories based on which exosuits can equip this.
+ var/mech_flags = NONE
+ var/salvageable = 1
+ var/detachable = TRUE // Set to FALSE for built-in equipment that cannot be removed
+ var/selectable = 1 // Set to 0 for passive equipment such as mining scanner or armor plates
+ var/harmful = FALSE //Controls if equipment can be used to attack by a pacifist.
+ var/destroy_sound = 'sound/mecha/critdestr.ogg'
+
+/obj/item/mecha_parts/mecha_equipment/proc/update_chassis_page()
+ if(chassis)
+ send_byjax(chassis.occupants,"exosuit.browser","eq_list",chassis.get_equipment_list())
+ send_byjax(chassis.occupants,"exosuit.browser","equipment_menu",chassis.get_equipment_menu(),"dropdowns")
+ return TRUE
+ return
+
+/obj/item/mecha_parts/mecha_equipment/proc/update_equip_info()
+ if(chassis)
+ send_byjax(chassis.occupants,"exosuit.browser","[REF(src)]",get_equip_info())
+ return TRUE
+ return
+
+/obj/item/mecha_parts/mecha_equipment/Destroy()
+ if(chassis)
+ LAZYREMOVE(chassis.equipment, src)
+ if(chassis.selected == src)
+ chassis.selected = null
+ update_chassis_page()
+ log_message("[src] is destroyed.", LOG_MECHA)
+ if(chassis.occupants)
+ to_chat(chassis.occupants, "[icon2html(src, chassis.occupants)] [src] is destroyed!")
+ playsound(chassis, destroy_sound, 50)
+ if(!detachable) //If we're a built-in nondetachable equipment, let's lock up the slot that we were in.
+ chassis.max_equip--
+ chassis = null
+ return ..()
+
+/obj/item/mecha_parts/mecha_equipment/try_attach_part(mob/user, obj/vehicle/sealed/mecha/M)
+ if(can_attach(M))
+ if(!user.temporarilyRemoveItemFromInventory(src))
+ return FALSE
+ attach(M)
+ user.visible_message(" [user] attaches [src] to [M].", " You attach [src] to [M].")
+ return TRUE
+ to_chat(user, " You are unable to attach [src] to [M]!")
+ return FALSE
+
+/obj/item/mecha_parts/mecha_equipment/proc/get_equip_info()
+ if(!chassis)
+ return
+ var/txt = " * "
+ if(chassis.selected == src)
+ txt += " [src.name]"
+ else if(selectable)
+ txt += " [src.name]"
+ else
+ txt += "[src.name]"
+
+ return txt
+
+/obj/item/mecha_parts/mecha_equipment/proc/action_checks(atom/target)
+ if(!target)
+ return FALSE
+ if(!chassis)
+ return FALSE
+ if(!equip_ready)
+ return FALSE
+ if(energy_drain && !chassis.has_charge(energy_drain))
+ return FALSE
+ if(chassis.is_currently_ejecting)
+ return FALSE
+ if(chassis.equipment_disabled)
+ to_chat(chassis.occupants, " Error -- Equipment control unit is unresponsive.")
+ return FALSE
+ if(TIMER_COOLDOWN_CHECK(chassis, COOLDOWN_MECHA_EQUIPMENT))
+ return FALSE
+ return TRUE
+
+/obj/item/mecha_parts/mecha_equipment/proc/action(mob/source, atom/target, params)
+ TIMER_COOLDOWN_START(chassis, COOLDOWN_MECHA_EQUIPMENT, equip_cooldown)//Cooldown is on the MECH so people dont bypass it by switching equipment
+ send_byjax(chassis.occupants,"exosuit.browser","[REF(src)]",src.get_equip_info())
+ chassis.use_power(energy_drain)
+ return TRUE
+
+/obj/item/mecha_parts/mecha_equipment/proc/do_after_cooldown(atom/target, mob/user)
+ if(!chassis)
+ return FALSE
+ chassis.use_power(energy_drain)
+ return do_after(user, equip_cooldown, target, extra_checks = CALLBACK(src, .proc/do_after_checks, target))
+
+/obj/item/mecha_parts/mecha_equipment/proc/do_after_mecha(atom/target, mob/user, delay)
+ return do_after(user, delay, target, extra_checks = CALLBACK(src, .proc/do_after_checks, target))
+
+/// do after checks for the mecha equipment do afters
+/obj/item/mecha_parts/mecha_equipment/proc/do_after_checks(atom/target)
+ return chassis && (get_dir(chassis, target) & chassis.dir)
+
+/obj/item/mecha_parts/mecha_equipment/proc/can_attach(obj/vehicle/sealed/mecha/M)
+ if(LAZYLEN(M.equipment) You start putting [target] into [src]...")
+ to_chat(source, "[icon2html(src, source)]You start putting [target] into [src]...")
chassis.visible_message("[chassis] starts putting [target] into \the [src].")
- if(do_after_cooldown(target))
- if(!patient_insertion_check(target))
+ if(do_after(source, equip_cooldown, target=target))
+ if(!chassis || src != chassis.selected || !(get_dir(chassis, target)&chassis.dir))
+ return
+ if(!patient_insertion_check(target, source))
return
target.forceMove(src)
patient = target
START_PROCESSING(SSobj, src)
update_equip_info()
- occupant_message("[target] successfully loaded into [src]. Life support functions engaged.")
+ to_chat(source, "[icon2html(src, source)][target] successfully loaded into [src]. Life support functions engaged.")
chassis.visible_message("[chassis] loads [target] into [src].")
- mecha_log_message("[target] loaded. Life support functions engaged.")
+ log_message("[target] loaded. Life support functions engaged.", LOG_MECHA)
+ return ..()
-/obj/item/mecha_parts/mecha_equipment/medical/sleeper/proc/patient_insertion_check(mob/living/carbon/target)
+/obj/item/mecha_parts/mecha_equipment/medical/sleeper/proc/patient_insertion_check(mob/living/carbon/target, mob/user)
if(target.buckled)
- occupant_message("[target] will not fit into the sleeper because [target.p_theyre()] buckled to [target.buckled]!")
+ to_chat(user, "[icon2html(src, user)][target] will not fit into the sleeper because [target.p_theyre()] buckled to [target.buckled]!")
return
if(target.has_buckled_mobs())
- occupant_message("[target] will not fit into the sleeper because of the creatures attached to it!")
+ to_chat(user, "[icon2html(src, user)][target] will not fit into the sleeper because of the creatures attached to it!")
return
if(patient)
- occupant_message("The sleeper is already occupied!")
+ to_chat(user, "[icon2html(src, user)]The sleeper is already occupied!")
return
- return 1
+ return TRUE
/obj/item/mecha_parts/mecha_equipment/medical/sleeper/proc/go_out()
if(!patient)
return
patient.forceMove(get_turf(src))
- occupant_message("[patient] ejected. Life support functions disabled.")
- mecha_log_message("[patient] ejected. Life support functions disabled.")
+ to_chat(chassis.occupants, "[icon2html(src, chassis.occupants)][patient] ejected. Life support functions disabled.")
+ log_message("[patient] ejected. Life support functions disabled.", LOG_MECHA)
STOP_PROCESSING(SSobj, src)
patient = null
update_equip_info()
/obj/item/mecha_parts/mecha_equipment/medical/sleeper/detach()
if(patient)
- occupant_message("Unable to detach [src] - equipment occupied!")
+ to_chat(chassis.occupants, "[icon2html(src, chassis.occupants)]Unable to detach [src] - equipment occupied!")
return
STOP_PROCESSING(SSobj, src)
return ..()
@@ -105,20 +107,23 @@
if(patient)
temp = " \[Occupant: [patient] ([patient.stat > 1 ? "*DECEASED*" : "Health: [patient.health]%"])\] View stats|Eject"
return "[output] [temp]"
- return
/obj/item/mecha_parts/mecha_equipment/medical/sleeper/Topic(href,href_list)
- ..()
+ . = ..()
+ if(.)
+ return
+ if(!(usr in chassis.occupants))
+ return
if(href_list["eject"])
go_out()
if(href_list["view_stats"])
- chassis.occupant << browse(get_patient_stats(),"window=msleeper")
- onclose(chassis.occupant, "msleeper")
+ usr << browse(get_patient_stats(),"window=msleeper")
+ onclose(usr, "msleeper")
return
if(href_list["inject"])
var/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/SG = locate() in chassis
var/datum/reagent/R = locate(href_list["inject"]) in SG.reagents.reagent_list
- if (istype(R))
+ if(istype(R))
inject_reagent(R, SG)
/obj/item/mecha_parts/mecha_equipment/medical/sleeper/proc/get_patient_stats()
@@ -186,7 +191,7 @@
if(SG && SG.reagents && islist(SG.reagents.reagent_list))
for(var/datum/reagent/R in SG.reagents.reagent_list)
if(R.volume > 0)
- output += "Inject [R.name] "
+ output += "Inject [R.name] "
return output
@@ -195,9 +200,9 @@
return 0
var/to_inject = min(R.volume, inject_amount)
if(to_inject && patient.reagents.get_reagent_amount(R.type) + to_inject <= inject_amount*2)
- occupant_message("Injecting [patient] with [to_inject] units of [R.name].")
- mecha_log_message("Injecting [patient] with [to_inject] units of [R.name].")
- log_combat(chassis.occupant, patient, "injected", "[name] ([R] - [to_inject] units)")
+ to_chat(chassis.occupants, "[icon2html(src, chassis.occupants)]Injecting [patient] with [to_inject] units of [R.name].")
+ log_message("Injecting [patient] with [to_inject] units of [R.name].", LOG_MECHA)
+ log_combat(chassis.occupants, patient, "injected", "[name] ([R] - [to_inject] units)")
SG.reagents.trans_id_to(patient,R.type,to_inject)
update_equip_info()
return
@@ -205,9 +210,9 @@
/obj/item/mecha_parts/mecha_equipment/medical/sleeper/update_equip_info()
if(..())
if(patient)
- send_byjax(chassis.occupant,"msleeper.browser","lossinfo",get_patient_dam())
- send_byjax(chassis.occupant,"msleeper.browser","reagents",get_patient_reagents())
- send_byjax(chassis.occupant,"msleeper.browser","injectwith",get_available_reagents())
+ send_byjax(chassis.occupants,"msleeper.browser","lossinfo",get_patient_dam())
+ send_byjax(chassis.occupants,"msleeper.browser","reagents",get_patient_reagents())
+ send_byjax(chassis.occupants,"msleeper.browser","injectwith",get_available_reagents())
return 1
return
@@ -218,9 +223,8 @@
if(..())
return
if(!chassis.has_charge(energy_drain))
- set_ready_state(1)
- mecha_log_message("Deactivated.")
- occupant_message("[src] deactivated - no power.")
+ log_message("Deactivated.", LOG_MECHA)
+ to_chat(chassis.occupants, "[icon2html(src, chassis.occupants)][src] deactivated - no power.")
STOP_PROCESSING(SSobj, src)
return
var/mob/living/carbon/M = patient
@@ -228,7 +232,10 @@
return
if(M.health > 0)
M.adjustOxyLoss(-1)
- M.AdjustAllImmobility(-80)
+ M.AdjustStun(-80)
+ M.AdjustKnockdown(-80)
+ M.AdjustParalyzed(-80)
+ M.AdjustImmobilized(-80)
M.AdjustUnconscious(-80)
if(M.reagents.get_reagent_amount(/datum/reagent/medicine/epinephrine) < 5)
M.reagents.add_reagent(/datum/reagent/medicine/epinephrine, 5)
@@ -254,15 +261,14 @@
var/synth_speed = 5 //[num] reagent units per cycle
energy_drain = 10
var/mode = 0 //0 - fire syringe, 1 - analyze reagents.
- range = MELEE|RANGED
+ range = MECHA_MELEE|MECHA_RANGED
equip_cooldown = 10
-/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/Initialize()
+/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/Initialize(mapload)
. = ..()
create_reagents(max_volume, NO_REACT)
syringes = new
- known_reagents = list(/datum/reagent/medicine/epinephrine = "Epinephrine", /datum/reagent/medicine/charcoal = "Charcoal", /datum/reagent/medicine/prussian_blue = "Prussian Blue", \
- /datum/reagent/medicine/dexalin = "Dexalin", /datum/reagent/medicine/insulin = "Insulin", /datum/reagent/medicine/kelotane = "Kelotane", /datum/reagent/medicine/bicaridine = "Bicaridine")
+ known_reagents = list(/datum/reagent/medicine/epinephrine="Epinephrine")
processed_reagents = new
/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/detach()
@@ -273,39 +279,35 @@
STOP_PROCESSING(SSobj, src)
return ..()
-/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/critfail()
- ..()
- if(reagents)
- reagents.reagents_holder_flags &= ~(NO_REACT)
-
-/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/can_attach(obj/mecha/medical/M)
- if(..())
- if(istype(M))
- return 1
- return 0
+/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/can_attach(obj/vehicle/sealed/mecha/medical/M)
+ . = ..()
+ if(!istype(M))
+ return FALSE
/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/get_equip_info()
var/output = ..()
if(output)
return "[output] \[[mode? "Analyze" : "Launch"]\] \[Syringes: [syringes.len]/[max_syringes] | Reagents: [reagents.total_volume]/[reagents.maximum_volume]\] Reagents list"
- return
-/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/action(atom/movable/target)
+/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/action(mob/source, atom/movable/target, params)
if(!action_checks(target))
return
if(istype(target, /obj/item/reagent_containers/syringe))
return load_syringe(target)
if(istype(target, /obj/item/storage))//Loads syringes from boxes
for(var/obj/item/reagent_containers/syringe/S in target.contents)
- load_syringe(S)
+ load_syringe(S, source)
return
if(mode)
- return analyze_reagents(target)
+ return analyze_reagents(target, source)
if(!syringes.len)
- occupant_message("No syringes loaded.")
+ to_chat(source, "[icon2html(src, source)]No syringes loaded.")
return
if(reagents.total_volume<=0)
- occupant_message("No available reagents to load syringe with.")
+ to_chat(source, "[icon2html(src, source)]No available reagents to load syringe with.")
+ return
+ if(HAS_TRAIT(source, TRAIT_PACIFISM))
+ to_chat(source, "The [src] is lethally chambered! You don't want to risk harming anyone...")
return
var/turf/trg = get_turf(target)
var/obj/item/reagent_containers/syringe/mechsyringe = syringes[1]
@@ -314,11 +316,9 @@
syringes -= mechsyringe
mechsyringe.icon = 'icons/obj/chemical.dmi'
mechsyringe.icon_state = "syringeproj"
- playsound(chassis, 'sound/items/syringeproj.ogg', 50, 1)
- mecha_log_message("Launched [mechsyringe] from [src], targeting [target].")
- var/mob/originaloccupant = chassis.occupant
- spawn(0)
- src = null //if src is deleted, still process the syringe
+ playsound(chassis, 'sound/items/syringeproj.ogg', 50, TRUE)
+ log_message("Launched [mechsyringe] from [src] by [source], targeting [target].", LOG_MECHA)
+ spawn(0) //This code is trash and whoever wrote it should feel bad
for(var/i=0, i<6, i++)
if(!mechsyringe)
break
@@ -326,10 +326,10 @@
var/list/mobs = new
for(var/mob/living/carbon/M in mechsyringe.loc)
mobs += M
- var/mob/living/carbon/M = safepick(mobs)
- if(M)
+ if(length(mobs))
+ var/mob/living/carbon/M = pick(mobs)
var/R
- mechsyringe.visible_message(" [M] was hit by the syringe!")
+ mechsyringe.visible_message(" [M] is hit by the syringe!")
if(M.can_inject(null, 1))
if(mechsyringe.reagents)
for(var/datum/reagent/A in mechsyringe.reagents.reagent_list)
@@ -337,9 +337,9 @@
mechsyringe.icon_state = initial(mechsyringe.icon_state)
mechsyringe.icon = initial(mechsyringe.icon)
mechsyringe.reagents.reaction(M, INJECT)
- mechsyringe.reagents.trans_to(M, mechsyringe.reagents.total_volume)
+ mechsyringe.reagents.trans_to(M, mechsyringe.reagents.total_volume, log = TRUE)
M.take_bodypart_damage(2)
- log_combat(originaloccupant, M, "shot", "syringegun")
+ log_combat(source, M, "shot", "syringegun")
break
else if(mechsyringe.loc == trg)
mechsyringe.icon_state = initial(mechsyringe.icon_state)
@@ -352,7 +352,7 @@
mechsyringe.update_icon()
break
sleep(1)
- return 1
+ return ..()
/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/Topic(href,href_list)
@@ -376,12 +376,14 @@
if(processed_reagents.len)
message += " added to production"
START_PROCESSING(SSobj, src)
- occupant_message(message)
- occupant_message("Reagent processing started.")
- mecha_log_message("Reagent processing started.")
+ to_chat(usr, message)
+ to_chat(usr, "[icon2html(src, usr)]Reagent processing started.")
+ log_message("Reagent processing started.", LOG_MECHA)
return
if (href_list["show_reagents"])
- chassis.occupant << browse(get_reagents_page(),"window=msyringegun")
+ if(!(usr in chassis.occupants))
+ return
+ usr << browse(get_reagents_page(),"window=msyringegun")
if (href_list["purge_reagent"])
var/reagent = href_list["purge_reagent"]
if(reagent)
@@ -445,74 +447,72 @@
var/output
for(var/datum/reagent/R in reagents.reagent_list)
if(R.volume > 0)
- output += "[R]: [round(R.volume,0.001)] - Purge Reagent "
+ output += "[R]: [round(R.volume,0.001)] - Purge Reagent "
if(output)
output += "Total: [round(reagents.total_volume,0.001)]/[reagents.maximum_volume] - Purge All"
return output || "None"
-/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/proc/load_syringe(obj/item/reagent_containers/syringe/S)
+/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/proc/load_syringe(obj/item/reagent_containers/syringe/S, mob/user)
if(syringes.len= 2)
- occupant_message("The syringe is too far away.")
+ to_chat(user, "[icon2html(src, user)]The syringe is too far away!")
return 0
for(var/obj/structure/D in S.loc)//Basic level check for structures in the way (Like grilles and windows)
if(!(D.CanPass(S,src.loc)))
- occupant_message("Unable to load syringe.")
+ to_chat(user, "[icon2html(src, user)]Unable to load syringe!")
return 0
for(var/obj/machinery/door/D in S.loc)//Checks for doors
if(!(D.CanPass(S,src.loc)))
- occupant_message("Unable to load syringe.")
+ to_chat(user, "[icon2html(src, user)]Unable to load syringe!")
return 0
S.reagents.trans_to(src, S.reagents.total_volume)
S.forceMove(src)
syringes += S
- occupant_message("Syringe loaded.")
+ to_chat(user, "[icon2html(src, user)]Syringe loaded.")
update_equip_info()
return 1
- occupant_message("[src]'s syringe chamber is full.")
+ to_chat(user, "[icon2html(src, user)][src]'s syringe chamber is full!")
return 0
-/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/proc/analyze_reagents(atom/A)
+/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/proc/analyze_reagents(atom/A, mob/user)
if(get_dist(src,A) >= 4)
- occupant_message("The object is too far away.")
- return 0
+ to_chat(user, "[icon2html(src, user)]The object is too far away!")
+ return FALSE
if(!A.reagents || ismob(A))
- occupant_message("No reagent info gained from [A].")
- return 0
- occupant_message("Analyzing reagents...")
+ to_chat(user, "[icon2html(src, user)]No reagent info gained from [A].")
+ return FALSE
+ to_chat(user, "[icon2html(src, user)]Analyzing reagents...")
for(var/datum/reagent/R in A.reagents.reagent_list)
if(R.can_synth && add_known_reagent(R.type,R.name))
- occupant_message("Reagent analyzed, identified as [R.name] and added to database.")
- send_byjax(chassis.occupant,"msyringegun.browser","reagents_form",get_reagents_form())
- occupant_message("Analyzis complete.")
- return 1
+ to_chat(user, "[icon2html(src, user)]Reagent analyzed, identified as [R.name] and added to database.")
+ send_byjax(chassis.occupants,"msyringegun.browser","reagents_form",get_reagents_form())
+ to_chat(user, "[icon2html(src, user)]Analysis complete.")
+ return TRUE
/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/proc/add_known_reagent(r_id,r_name)
if(!(r_id in known_reagents))
known_reagents += r_id
known_reagents[r_id] = r_name
- return 1
- return 0
+ return TRUE
+ return FALSE
/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/update_equip_info()
if(..())
- send_byjax(chassis.occupant,"msyringegun.browser","reagents",get_current_reagents())
- send_byjax(chassis.occupant,"msyringegun.browser","reagents_form",get_reagents_form())
- return 1
- return
+ send_byjax(chassis.occupants,"msyringegun.browser","reagents",get_current_reagents())
+ send_byjax(chassis.occupants,"msyringegun.browser","reagents_form",get_reagents_form())
+ return TRUE
/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/on_reagent_change(changetype)
..()
update_equip_info()
- return
/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/process()
if(..())
return
if(!processed_reagents.len || reagents.total_volume >= reagents.maximum_volume || !chassis.has_charge(energy_drain))
- occupant_message("Reagent processing stopped.")
- mecha_log_message("Reagent processing stopped.")
+ to_chat(chassis.occupants, "[icon2html(src, chassis.occupants)]Reagent processing stopped.")
+ log_message("Reagent processing stopped.", LOG_MECHA)
STOP_PROCESSING(SSobj, src)
return
var/amount = synth_speed / processed_reagents.len
@@ -527,12 +527,12 @@
desc = "Equipment for medical exosuits. Generates a focused beam of medical nanites."
icon_state = "mecha_medigun"
energy_drain = 10
- range = MELEE|RANGED
+ range = MECHA_MELEE|MECHA_RANGED
equip_cooldown = 0
var/obj/item/gun/medbeam/mech/medigun
custom_materials = list(/datum/material/iron = 15000, /datum/material/glass = 8000, /datum/material/plasma = 3000, /datum/material/gold = 8000, /datum/material/diamond = 2000)
-/obj/item/mecha_parts/mecha_equipment/medical/mechmedbeam/Initialize()
+/obj/item/mecha_parts/mecha_equipment/medical/mechmedbeam/Initialize(mapload)
. = ..()
medigun = new(src)
@@ -546,7 +546,7 @@
return
medigun.process()
-/obj/item/mecha_parts/mecha_equipment/medical/mechmedbeam/action(atom/target)
+/obj/item/mecha_parts/mecha_equipment/medical/mechmedbeam/action(mob/source, atom/movable/target, params)
medigun.process_fire(target, loc)
diff --git a/code/game/mecha/equipment/tools/mining_tools.dm b/code/modules/vehicles/mecha/equipment/tools/mining_tools.dm
similarity index 69%
rename from code/game/mecha/equipment/tools/mining_tools.dm
rename to code/modules/vehicles/mecha/equipment/tools/mining_tools.dm
index 47820d1e27..46190a4c84 100644
--- a/code/game/mecha/equipment/tools/mining_tools.dm
+++ b/code/modules/vehicles/mecha/equipment/tools/mining_tools.dm
@@ -13,17 +13,18 @@
energy_drain = 10
force = 15
harmful = TRUE
+ range = MECHA_MELEE
tool_behaviour = TOOL_DRILL
toolspeed = 0.9
var/drill_delay = 7
var/drill_level = DRILL_BASIC
mech_flags = EXOSUIT_MODULE_WORKING | EXOSUIT_MODULE_COMBAT
-/obj/item/mecha_parts/mecha_equipment/drill/Initialize()
+/obj/item/mecha_parts/mecha_equipment/drill/Initialize(mapload)
. = ..()
AddComponent(/datum/component/butchering, 50, 100, null, null, TRUE)
-/obj/item/mecha_parts/mecha_equipment/drill/action(atom/target)
+/obj/item/mecha_parts/mecha_equipment/drill/action(mob/source, atom/target, params)
if(!action_checks(target))
return
if(isspaceturf(target))
@@ -34,72 +35,69 @@
return
target.visible_message("[chassis] starts to drill [target].", \
"[chassis] starts to drill [target]...", \
- "You hear drilling.")
+ "You hear drilling.")
- if(do_after_cooldown(target))
- set_ready_state(FALSE)
- mecha_log_message("Started drilling [target]")
+ if(do_after_cooldown(target, source))
+ log_message("Started drilling [target]", LOG_MECHA)
if(isturf(target))
var/turf/T = target
- T.drill_act(src)
- set_ready_state(TRUE)
+ T.drill_act(src, source)
return
- while(do_after_mecha(target, drill_delay))
+ while(do_after_mecha(target, source, drill_delay))
if(isliving(target))
- drill_mob(target, chassis.occupant)
- playsound(src,'sound/weapons/drill.ogg',40,1)
+ drill_mob(target, source)
+ playsound(src,'sound/weapons/drill.ogg',40,TRUE)
else if(isobj(target))
var/obj/O = target
O.take_damage(15, BRUTE, 0, FALSE, get_dir(chassis, target))
- playsound(src,'sound/weapons/drill.ogg',40,1)
+ playsound(src,'sound/weapons/drill.ogg',40,TRUE)
else
- set_ready_state(TRUE)
return
- set_ready_state(TRUE)
+ return ..()
-/turf/proc/drill_act(obj/item/mecha_parts/mecha_equipment/drill/drill)
+/turf/proc/drill_act(obj/item/mecha_parts/mecha_equipment/drill/drill, mob/user)
return
-/turf/closed/wall/drill_act(obj/item/mecha_parts/mecha_equipment/drill/drill)
- if(drill.do_after_mecha(src, 60 / drill.drill_level))
- drill.mecha_log_message("Drilled through [src]")
+/turf/closed/wall/drill_act(obj/item/mecha_parts/mecha_equipment/drill/drill, mob/user)
+ if(drill.do_after_mecha(src, user, 60 / drill.drill_level))
+ drill.log_message("Drilled through [src]", LOG_MECHA)
dismantle_wall(TRUE, FALSE)
-/turf/closed/wall/r_wall/drill_act(obj/item/mecha_parts/mecha_equipment/drill/drill)
+/turf/closed/wall/r_wall/drill_act(obj/item/mecha_parts/mecha_equipment/drill/drill, mob/user)
if(drill.drill_level >= DRILL_HARDENED)
- if(drill.do_after_mecha(src, 120 / drill.drill_level))
- drill.mecha_log_message("Drilled through [src]")
+ if(drill.do_after_mecha(src, user, 120 / drill.drill_level))
+ drill.log_message("Drilled through [src]", LOG_MECHA)
dismantle_wall(TRUE, FALSE)
else
- drill.occupant_message("[src] is too durable to drill through.")
+ to_chat(user, "[icon2html(src, user)][src] is too durable to drill through.")
-/turf/closed/mineral/drill_act(obj/item/mecha_parts/mecha_equipment/drill/drill)
+/turf/closed/mineral/drill_act(obj/item/mecha_parts/mecha_equipment/drill/drill, mob/user)
for(var/turf/closed/mineral/M in range(drill.chassis,1))
if(get_dir(drill.chassis,M)&drill.chassis.dir)
M.gets_drilled()
- drill.mecha_log_message("Drilled through [src]")
+ drill.log_message("[user] drilled through [src]", LOG_MECHA)
drill.move_ores()
/turf/open/floor/plating/asteroid/drill_act(obj/item/mecha_parts/mecha_equipment/drill/drill)
for(var/turf/open/floor/plating/asteroid/M in range(1, drill.chassis))
if((get_dir(drill.chassis,M)&drill.chassis.dir) && !M.dug)
M.getDug()
- drill.mecha_log_message("Drilled through [src]")
+ drill.log_message("Drilled through [src]", LOG_MECHA)
drill.move_ores()
/obj/item/mecha_parts/mecha_equipment/drill/proc/move_ores()
- if(locate(/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp) in chassis.equipment && istype(chassis, /obj/mecha/working/ripley))
- var/obj/mecha/working/ripley/R = chassis //we could assume that it's a ripley because it has a clamp, but that's ~unsafe~ and ~bad practice~
+ if(locate(/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp) in chassis.equipment && istype(chassis, /obj/vehicle/sealed/mecha/working/ripley))
+ var/obj/vehicle/sealed/mecha/working/ripley/R = chassis //we could assume that it's a ripley because it has a clamp, but that's ~unsafe~ and ~bad practice~
R.collect_ore()
-/obj/item/mecha_parts/mecha_equipment/drill/can_attach(obj/mecha/M as obj)
+/obj/item/mecha_parts/mecha_equipment/drill/can_attach(obj/vehicle/sealed/mecha/M as obj)
if(..())
- if(istype(M, /obj/mecha/working) || istype(M, /obj/mecha/combat))
- return 1
- return 0
+ if(istype(M, /obj/vehicle/sealed/mecha/working) || istype(M, /obj/vehicle/sealed/mecha/combat))
+ return TRUE
+ return FALSE
-/obj/item/mecha_parts/mecha_equipment/drill/attach(obj/mecha/M)
+/obj/item/mecha_parts/mecha_equipment/drill/attach(obj/vehicle/sealed/mecha/M)
..()
var/datum/component/butchering/butchering = src.GetComponent(/datum/component/butchering)
butchering.butchering_enabled = TRUE
@@ -123,7 +121,7 @@
else
//drill makes a hole
var/obj/item/bodypart/target_part = target.get_bodypart(ran_zone(BODY_ZONE_CHEST))
- target.apply_damage(10, BRUTE, BODY_ZONE_CHEST, target.run_armor_check(target_part, "melee"))
+ target.apply_damage(10, BRUTE, BODY_ZONE_CHEST, target.run_armor_check(target_part, MELEE))
//blood splatters
var/splatter_dir = get_dir(chassis, target)
@@ -133,7 +131,7 @@
if(ishuman(target))
var/mob/living/carbon/human/H = target
new /obj/effect/temp_visual/dir_setting/bloodsplatter(target.drop_location(), splatter_dir, H.dna.species.exotic_blood_color)
- else
+ else
new /obj/effect/temp_visual/dir_setting/bloodsplatter(target.drop_location(), splatter_dir)
//organs go everywhere
@@ -153,24 +151,30 @@
/obj/item/mecha_parts/mecha_equipment/mining_scanner
name = "exosuit mining scanner"
- desc = "Equipment for engineering and combat exosuits. It will automatically check surrounding rock for useful minerals."
+ desc = "Equipment for working exosuits. It will automatically check surrounding rock for useful minerals."
icon_state = "mecha_analyzer"
selectable = 0
equip_cooldown = 15
var/scanning_time = 0
mech_flags = EXOSUIT_MODULE_WORKING
-/obj/item/mecha_parts/mecha_equipment/mining_scanner/Initialize()
+/obj/item/mecha_parts/mecha_equipment/mining_scanner/Initialize(mapload)
. = ..()
START_PROCESSING(SSfastprocess, src)
+/obj/item/mecha_parts/mecha_equipment/mining_scanner/can_attach(obj/vehicle/sealed/mecha/M as obj)
+ if(..())
+ if(istype(M, /obj/vehicle/sealed/mecha/working))
+ return TRUE
+ return FALSE
+
/obj/item/mecha_parts/mecha_equipment/mining_scanner/process()
if(!loc)
STOP_PROCESSING(SSfastprocess, src)
qdel(src)
- if(istype(loc, /obj/mecha/working) && scanning_time <= world.time)
- var/obj/mecha/working/mecha = loc
- if(!mecha.occupant)
+ if(istype(loc, /obj/vehicle/sealed/mecha/working) && scanning_time <= world.time)
+ var/obj/vehicle/sealed/mecha/working/mecha = loc
+ if(!mecha.occupants)
return
scanning_time = world.time + equip_cooldown
mineral_scan_pulse(get_turf(src))
diff --git a/code/game/mecha/equipment/tools/other_tools.dm b/code/modules/vehicles/mecha/equipment/tools/other_tools.dm
similarity index 58%
rename from code/game/mecha/equipment/tools/other_tools.dm
rename to code/modules/vehicles/mecha/equipment/tools/other_tools.dm
index e1861232f4..348a4bb6ec 100644
--- a/code/game/mecha/equipment/tools/other_tools.dm
+++ b/code/modules/vehicles/mecha/equipment/tools/other_tools.dm
@@ -10,15 +10,16 @@
icon_state = "mecha_teleport"
equip_cooldown = 150
energy_drain = 1000
- range = RANGED
+ range = MECHA_RANGED
+ var/teleport_range = 7
-/obj/item/mecha_parts/mecha_equipment/teleporter/action(atom/target)
+/obj/item/mecha_parts/mecha_equipment/teleporter/action(mob/source, atom/target, params)
if(!action_checks(target) || is_centcom_level(loc.z))
return
var/turf/T = get_turf(target)
- if(T)
+ if(T && (loc.z == T.z) && (get_dist(loc, T) <= teleport_range))
do_teleport(chassis, T, 4, channel = TELEPORT_CHANNEL_BLUESPACE)
- return 1
+ return ..()
@@ -30,10 +31,10 @@
icon_state = "mecha_wholegen"
equip_cooldown = 50
energy_drain = 300
- range = RANGED
+ range = MECHA_RANGED
-/obj/item/mecha_parts/mecha_equipment/wormhole_generator/action(atom/target)
+/obj/item/mecha_parts/mecha_equipment/wormhole_generator/action(mob/source, atom/target, params)
if(!action_checks(target) || is_centcom_level(loc.z))
return
var/list/theareas = get_areas_in_range(100, chassis)
@@ -44,10 +45,10 @@
var/turf/pos = get_turf(src)
for(var/turf/T in get_area_turfs(thearea.type))
if(!T.density && pos.z == T.z)
- var/clear = 1
+ var/clear = TRUE
for(var/obj/O in T)
if(O.density)
- clear = 0
+ clear = FALSE
break
if(clear)
L+=T
@@ -58,11 +59,11 @@
return
var/list/obj/effect/portal/created = create_portal_pair(get_turf(src), target_turf, 300, 1, /obj/effect/portal/anom)
var/turf/T = get_turf(target)
- message_admins("[ADMIN_LOOKUPFLW(chassis.occupant)] used a Wormhole Generator in [ADMIN_VERBOSEJMP(T)]")
- log_game("[key_name(chassis.occupant)] used a Wormhole Generator in [AREACOORD(T)]")
+ message_admins("[ADMIN_LOOKUPFLW(source)] used a Wormhole Generator in [ADMIN_VERBOSEJMP(T)]")
+ log_game("[key_name(source)] used a Wormhole Generator in [AREACOORD(T)]")
src = null
QDEL_LIST_IN(created, rand(150,300))
- return 1
+ return ..()
/////////////////////////////////////// GRAVITATIONAL CATAPULT ///////////////////////////////////////////
@@ -73,36 +74,41 @@
icon_state = "mecha_teleport"
equip_cooldown = 10
energy_drain = 100
- range = MELEE|RANGED
+ range = MECHA_MELEE|MECHA_RANGED
var/atom/movable/locked
var/mode = 1 //1 - gravsling 2 - gravpush
-/obj/item/mecha_parts/mecha_equipment/gravcatapult/action(atom/movable/target)
+/obj/item/mecha_parts/mecha_equipment/gravcatapult/action(mob/source, atom/movable/target, params)
if(!action_checks(target))
return
switch(mode)
if(1)
if(!locked)
if(!istype(target) || target.anchored || target.move_resist >= MOVE_FORCE_EXTREMELY_STRONG)
- occupant_message("Unable to lock on [target]")
+ to_chat(source, "[icon2html(src, source)]Unable to lock on [target]!")
return
+ if(ismob(target))
+ var/mob/M = target
+ if(M.mob_negates_gravity())
+ to_chat(source, "[icon2html(src, source)]Unable to lock on [target]!")
+ return
locked = target
- occupant_message("Locked on [target]")
- send_byjax(chassis.occupant,"exosuit.browser","[REF(src)]",src.get_equip_info())
+ to_chat(source, "[icon2html(src, source)]Locked on [target].")
+ send_byjax(source,"exosuit.browser","[REF(src)]",src.get_equip_info())
else if(target!=locked)
if(locked in view(chassis))
var/turf/targ = get_turf(target)
var/turf/orig = get_turf(locked)
locked.throw_at(target, 14, 1.5)
locked = null
- send_byjax(chassis.occupant,"exosuit.browser","[REF(src)]",src.get_equip_info())
- log_game("[key_name(chassis.occupant)] used a Gravitational Catapult to throw [locked] (From [AREACOORD(orig)]) at [target] ([AREACOORD(targ)]).")
- return TRUE
+ send_byjax(source,"exosuit.browser","[REF(src)]",src.get_equip_info())
+ log_game("[key_name(source)] used a Gravitational Catapult to throw [locked] (From [AREACOORD(orig)]) at [target] ([AREACOORD(targ)]).")
+ return ..()
else
locked = null
- occupant_message("Lock on [locked] disengaged.")
- send_byjax(chassis.occupant,"exosuit.browser","[REF(src)]",src.get_equip_info())
+ to_chat(source, "[icon2html(src, source)]Lock on [locked] disengaged.")
+ send_byjax(source,"exosuit.browser","[REF(src)]",src.get_equip_info())
if(2)
var/list/atoms = list()
if(isturf(target))
@@ -112,15 +118,21 @@
for(var/atom/movable/A in atoms)
if(A.anchored || A.move_resist >= MOVE_FORCE_EXTREMELY_STRONG)
continue
- spawn(0)
- var/iter = 5-get_dist(A,target)
- for(var/i=0 to iter)
- step_away(A,target)
- sleep(2)
- var/turf/T = get_turf(target)
- log_game("[key_name(chassis.occupant)] used a Gravitational Catapult repulse wave on [AREACOORD(T)]")
- return TRUE
+ if(ismob(A))
+ var/mob/M = A
+ if(M.mob_negates_gravity())
+ continue
+ INVOKE_ASYNC(src, .proc/do_scatter, A, target)
+ var/turf/T = get_turf(target)
+ log_game("[key_name(source)] used a Gravitational Catapult repulse wave on [AREACOORD(T)]")
+ return ..()
+
+/obj/item/mecha_parts/mecha_equipment/gravcatapult/proc/do_scatter(atom/movable/A, atom/movable/target)
+ var/iter = 5-get_dist(A,target)
+ for(var/i in 0 to iter)
+ step_away(A,target)
+ sleep(2)
/obj/item/mecha_parts/mecha_equipment/gravcatapult/get_equip_info()
return "[..()] [mode==1?"([locked||"Nothing"])":null] \[S|P\]"
@@ -129,7 +141,7 @@
..()
if(href_list["mode"])
mode = text2num(href_list["mode"])
- send_byjax(chassis.occupant,"exosuit.browser","[REF(src)]",src.get_equip_info())
+ send_byjax(chassis.occupants,"exosuit.browser","[REF(src)]",src.get_equip_info())
return
@@ -150,9 +162,10 @@
selectable = 0
/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/proc/attack_react()
- if(action_checks(src))
- start_cooldown()
- return 1
+ if(energy_drain && !chassis.has_charge(energy_drain))
+ return FALSE
+ TIMER_COOLDOWN_START(src, COOLDOWN_MECHA_ARMOR, equip_cooldown)
+ return TRUE
@@ -168,9 +181,10 @@
selectable = 0
/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/proc/projectile_react()
- if(action_checks(src))
- start_cooldown()
- return 1
+ if(energy_drain && !chassis.has_charge(energy_drain))
+ return FALSE
+ TIMER_COOLDOWN_START(src, COOLDOWN_MECHA_ARMOR, equip_cooldown)
+ return TRUE
////////////////////////////////// REPAIR DROID //////////////////////////////////////////////////
@@ -193,7 +207,7 @@
chassis.cut_overlay(droid_overlay)
return ..()
-/obj/item/mecha_parts/mecha_equipment/repair_droid/attach(obj/mecha/M as obj)
+/obj/item/mecha_parts/mecha_equipment/repair_droid/attach(obj/vehicle/sealed/mecha/M)
..()
droid_overlay = new(src.icon, icon_state = "repair_droid")
M.add_overlay(droid_overlay)
@@ -216,21 +230,18 @@
if(equip_ready)
START_PROCESSING(SSobj, src)
droid_overlay = new(src.icon, icon_state = "repair_droid_a")
- mecha_log_message("Activated.")
- set_ready_state(0)
+ log_message("Activated.", LOG_MECHA)
else
STOP_PROCESSING(SSobj, src)
droid_overlay = new(src.icon, icon_state = "repair_droid")
- mecha_log_message("Deactivated.")
- set_ready_state(1)
+ log_message("Deactivated.", LOG_MECHA)
chassis.add_overlay(droid_overlay)
- send_byjax(chassis.occupant,"exosuit.browser","[REF(src)]",src.get_equip_info())
+ send_byjax(chassis.occupants,"exosuit.browser", "[REF(src)]", get_equip_info())
/obj/item/mecha_parts/mecha_equipment/repair_droid/process()
if(!chassis)
STOP_PROCESSING(SSobj, src)
- set_ready_state(1)
return
var/h_boost = health_boost
var/repaired = 0
@@ -242,16 +253,14 @@
chassis.clearInternalDamage(int_dam_flag)
repaired = 1
break
- if(health_boost<0 || chassis.obj_integrity < chassis.max_integrity)
- chassis.obj_integrity += min(health_boost, chassis.max_integrity-chassis.obj_integrity)
+ if(h_boost<0 || chassis.obj_integrity < chassis.max_integrity)
+ chassis.obj_integrity += min(h_boost, chassis.max_integrity-chassis.obj_integrity)
repaired = 1
if(repaired)
if(!chassis.use_power(energy_drain))
STOP_PROCESSING(SSobj, src)
- set_ready_state(1)
else //no repair needed, we turn off
STOP_PROCESSING(SSobj, src)
- set_ready_state(1)
chassis.cut_overlay(droid_overlay)
droid_overlay = new(src.icon, icon_state = "repair_droid")
chassis.add_overlay(droid_overlay)
@@ -284,12 +293,12 @@
if(equip_ready) //disabled
return
var/area/A = get_area(chassis)
- var/pow_chan = get_MUTATION_POWER_channel(A)
+ var/pow_chan = GET_MUTATION_POWER_channel(A)
if(pow_chan)
return 1000 //making magic
-/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/proc/get_MUTATION_POWER_channel(var/area/A)
+/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/proc/GET_MUTATION_POWER_channel(area/A)
var/pow_chan
if(A)
for(var/c in use_channels)
@@ -303,12 +312,10 @@
if(href_list["toggle_relay"])
if(equip_ready) //inactive
START_PROCESSING(SSobj, src)
- set_ready_state(0)
- mecha_log_message("Activated.")
+ log_message("Activated.", LOG_MECHA)
else
STOP_PROCESSING(SSobj, src)
- set_ready_state(1)
- mecha_log_message("Deactivated.")
+ log_message("Deactivated.", LOG_MECHA)
/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/get_equip_info()
if(!chassis)
@@ -319,19 +326,17 @@
/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/process()
if(!chassis || chassis.internal_damage & MECHA_INT_SHORT_CIRCUIT)
STOP_PROCESSING(SSobj, src)
- set_ready_state(1)
return
var/cur_charge = chassis.get_charge()
if(isnull(cur_charge) || !chassis.cell)
STOP_PROCESSING(SSobj, src)
- set_ready_state(1)
- occupant_message("No powercell detected.")
+ to_chat(chassis.occupants, "[icon2html(src, chassis.occupants)]No power cell detected.")
return
if(cur_charge < chassis.cell.maxcharge)
- var/area/A = get_base_area(chassis)
+ var/area/A = get_area(chassis)
if(A)
var/pow_chan
- for(var/c in list(EQUIP,ENVIRON,LIGHT))
+ for(var/c in use_channels)
if(A.powered(c))
pow_chan = c
break
@@ -350,7 +355,7 @@
name = "exosuit plasma converter"
desc = "An exosuit module that generates power using solid plasma as fuel. Pollutes the environment."
icon_state = "tesla"
- range = MELEE
+ range = MECHA_MELEE
var/coeff = 100
var/obj/item/stack/sheet/fuel
var/max_fuel = 150000
@@ -358,7 +363,7 @@
var/fuel_per_cycle_active = 200
var/power_per_cycle = 20
-/obj/item/mecha_parts/mecha_equipment/generator/Initialize()
+/obj/item/mecha_parts/mecha_equipment/generator/Initialize(mapload)
. = ..()
generator_init()
@@ -377,77 +382,54 @@
..()
if(href_list["toggle"])
if(equip_ready) //inactive
- set_ready_state(0)
START_PROCESSING(SSobj, src)
- mecha_log_message("Activated.")
+ log_message("Activated.", LOG_MECHA)
else
- set_ready_state(1)
STOP_PROCESSING(SSobj, src)
- mecha_log_message("Deactivated.")
+ log_message("Deactivated.", LOG_MECHA)
/obj/item/mecha_parts/mecha_equipment/generator/get_equip_info()
var/output = ..()
if(output)
return "[output] \[[fuel]: [round(fuel.amount*MINERAL_MATERIAL_AMOUNT,0.1)] cm3\] - [equip_ready?"A":"Dea"]ctivate"
-/obj/item/mecha_parts/mecha_equipment/generator/action(target)
+/obj/item/mecha_parts/mecha_equipment/generator/action(mob/source, atom/movable/target, params)
if(chassis)
- var/result = load_fuel(target)
- if(result)
- send_byjax(chassis.occupant,"exosuit.browser","[REF(src)]",src.get_equip_info())
+ if(load_fuel(target, source))
+ send_byjax(chassis.occupants,"exosuit.browser","[REF(src)]",src.get_equip_info())
+ return ..()
-/obj/item/mecha_parts/mecha_equipment/generator/proc/load_fuel(var/obj/item/stack/sheet/P)
+/obj/item/mecha_parts/mecha_equipment/generator/proc/load_fuel(obj/item/stack/sheet/P, mob/user)
if(P.type == fuel.type && P.amount > 0)
var/to_load = max(max_fuel - fuel.amount*MINERAL_MATERIAL_AMOUNT,0)
if(to_load)
var/units = min(max(round(to_load / MINERAL_MATERIAL_AMOUNT),1),P.amount)
fuel.amount += units
P.use(units)
- occupant_message("[units] unit\s of [fuel] successfully loaded.")
+ to_chat(user, "[icon2html(src, user)][units] unit\s of [fuel] successfully loaded.")
return units
else
- occupant_message("Unit is full.")
+ to_chat(user, "[icon2html(src, user)]Unit is full.")
return 0
else
- occupant_message("[fuel] traces in target minimal! [P] cannot be used as fuel.")
+ to_chat(user, "[icon2html(src, user)][fuel] traces in target minimal! [P] cannot be used as fuel.")
return
/obj/item/mecha_parts/mecha_equipment/generator/attackby(weapon,mob/user, params)
load_fuel(weapon)
-/obj/item/mecha_parts/mecha_equipment/generator/critfail()
- ..()
- var/turf/open/T = get_turf(src)
- if(!istype(T))
- return
- var/datum/gas_mixture/GM = new
- if(prob(10))
- GM.adjust_moles(GAS_PLASMA,100)
- GM.set_temperature(1500+T0C) //should be enough to start a fire
- T.visible_message("[src] suddenly disgorges a cloud of heated plasma.")
- qdel(src)
- else
- GM.adjust_moles(GAS_PLASMA,5)
- GM.set_temperature(istype(T) ? T.air.return_temperature() : T20C)
- T.visible_message("[src] suddenly disgorges a cloud of plasma.")
- T.assume_air(GM)
- return
-
/obj/item/mecha_parts/mecha_equipment/generator/process()
if(!chassis)
STOP_PROCESSING(SSobj, src)
- set_ready_state(1)
return
if(fuel.amount<=0)
STOP_PROCESSING(SSobj, src)
- mecha_log_message("Deactivated - no fuel.")
- set_ready_state(1)
+ log_message("Deactivated - no fuel.", LOG_MECHA)
return
var/cur_charge = chassis.get_charge()
if(isnull(cur_charge))
- set_ready_state(1)
- occupant_message("No powercell detected.")
- mecha_log_message("Deactivated.")
+ to_chat(chassis.occupants, "[icon2html(src, chassis.occupants)]No power cell detected.")
+ log_message("Deactivated.", LOG_MECHA)
STOP_PROCESSING(SSobj, src)
return
var/use_fuel = fuel_per_cycle_idle
@@ -456,7 +438,7 @@
chassis.give_power(power_per_cycle)
fuel.amount -= min(use_fuel/MINERAL_MATERIAL_AMOUNT,fuel.amount)
update_equip_info()
- return 1
+ return TRUE
/obj/item/mecha_parts/mecha_equipment/generator/nuclear
@@ -472,9 +454,118 @@
/obj/item/mecha_parts/mecha_equipment/generator/nuclear/generator_init()
fuel = new /obj/item/stack/sheet/mineral/uranium(src, 0)
-/obj/item/mecha_parts/mecha_equipment/generator/nuclear/critfail()
- return
-
/obj/item/mecha_parts/mecha_equipment/generator/nuclear/process()
if(..())
radiation_pulse(get_turf(src), rad_per_cycle)
+
+
+/////////////////////////////////////////// THRUSTERS /////////////////////////////////////////////
+
+/obj/item/mecha_parts/mecha_equipment/thrusters
+ name = "generic exosuit thrusters" //parent object, in-game sources will be a child object
+ desc = "A generic set of thrusters, from an unknown source. Uses not-understood methods to propel exosuits seemingly for free."
+ icon_state = "thrusters"
+ selectable = FALSE
+ var/effect_type = /obj/effect/particle_effect/sparks
+
+/obj/item/mecha_parts/mecha_equipment/thrusters/try_attach_part(mob/user, obj/vehicle/sealed/mecha/M)
+ for(var/obj/item/I in M.equipment)
+ if(istype(I, src))
+ to_chat(user, "[M] already has this thruster package!")
+ return FALSE
+ . = ..()
+
+/obj/item/mecha_parts/mecha_equipment/thrusters/attach(obj/vehicle/sealed/mecha/M)
+ M.active_thrusters = src //Enable by default
+ . = ..()
+
+/obj/item/mecha_parts/mecha_equipment/thrusters/detach()
+ if(chassis?.active_thrusters == src)
+ chassis.active_thrusters = null
+ . = ..()
+
+/obj/item/mecha_parts/mecha_equipment/thrusters/Destroy()
+ if(chassis?.active_thrusters == src)
+ chassis.active_thrusters = null
+ . = ..()
+
+/obj/item/mecha_parts/mecha_equipment/thrusters/Topic(href,href_list)
+ ..()
+ if(!chassis)
+ return
+ if(href_list["mode"])
+ var/mode = text2num(href_list["mode"])
+ switch(mode)
+ if(0)
+ enable()
+ if(1)
+ disable()
+ return
+
+/obj/item/mecha_parts/mecha_equipment/thrusters/proc/enable()
+ if (chassis.active_thrusters == src)
+ return
+ chassis.active_thrusters = src
+ to_chat(chassis.occupants, "[icon2html(src, chassis.occupants)][src] enabled.")
+
+/obj/item/mecha_parts/mecha_equipment/thrusters/proc/disable()
+ if(chassis.active_thrusters != src)
+ return
+ chassis.active_thrusters = null
+ to_chat(chassis.occupants, "[icon2html(src, chassis.occupants)][src] disabled.")
+
+/obj/item/mecha_parts/mecha_equipment/thrusters/get_equip_info()
+ return "[..()] \[Enable|Disable\]"
+
+/obj/item/mecha_parts/mecha_equipment/thrusters/proc/thrust(movement_dir)
+ if(!chassis)
+ return FALSE
+ generate_effect(movement_dir)
+ return TRUE //This parent should never exist in-game outside admeme use, so why not let it be a creative thruster?
+
+/obj/item/mecha_parts/mecha_equipment/thrusters/proc/generate_effect(movement_dir)
+ var/obj/effect/particle_effect/E = new effect_type(get_turf(chassis))
+ E.dir = turn(movement_dir, 180)
+ step(E, turn(movement_dir, 180))
+ QDEL_IN(E, 5)
+
+
+/obj/item/mecha_parts/mecha_equipment/thrusters/gas
+ name = "RCS thruster package"
+ desc = "A set of thrusters that allow for exosuit movement in zero-gravity environments, by expelling gas from the internal life support tank."
+ effect_type = /obj/effect/particle_effect/smoke
+ var/move_cost = 20 //moles per step
+
+/obj/item/mecha_parts/mecha_equipment/thrusters/gas/try_attach_part(mob/user, obj/vehicle/sealed/mecha/M)
+ if(!M.internal_tank)
+ to_chat(user, "[M] does not have an internal tank and cannot support this upgrade!")
+ return FALSE
+ . = ..()
+
+/obj/item/mecha_parts/mecha_equipment/thrusters/gas/thrust(movement_dir)
+ if(!chassis || !chassis.internal_tank)
+ return FALSE
+ var/moles = chassis.internal_tank.air_contents.total_moles()
+ if(moles < move_cost)
+ chassis.internal_tank.air_contents.remove(moles)
+ return FALSE
+ chassis.internal_tank.air_contents.remove(move_cost)
+ generate_effect(movement_dir)
+ return TRUE
+
+
+
+/obj/item/mecha_parts/mecha_equipment/thrusters/ion //for mechs with built-in thrusters, should never really exist un-attached to a mech
+ name = "Ion thruster package"
+ desc = "A set of thrusters that allow for exosuit movement in zero-gravity environments."
+ detachable = FALSE
+ salvageable = FALSE
+ effect_type = /obj/effect/particle_effect/ion_trails
+
+/obj/item/mecha_parts/mecha_equipment/thrusters/ion/thrust(movement_dir)
+ if(!chassis)
+ return FALSE
+ if(chassis.use_power(chassis.step_energy_drain))
+ generate_effect(movement_dir)
+ return TRUE
+ return FALSE
diff --git a/code/modules/vehicles/mecha/equipment/tools/weapon_bay.dm b/code/modules/vehicles/mecha/equipment/tools/weapon_bay.dm
new file mode 100644
index 0000000000..469d430328
--- /dev/null
+++ b/code/modules/vehicles/mecha/equipment/tools/weapon_bay.dm
@@ -0,0 +1,14 @@
+/obj/item/mecha_parts/concealed_weapon_bay
+ name = "concealed weapon bay"
+ desc = "A compartment that allows a non-combat mecha to equip one weapon while hiding the weapon from plain sight."
+ icon = 'icons/mecha/mecha_equipment.dmi'
+ icon_state = "mecha_weapon_bay"
+
+/obj/item/mecha_parts/concealed_weapon_bay/try_attach_part(mob/user, obj/vehicle/sealed/mecha/M)
+ if(istype(M, /obj/vehicle/sealed/mecha/combat))
+ to_chat(user, "[M] can already hold weapons!")
+ return
+ if(locate(/obj/item/mecha_parts/concealed_weapon_bay) in M.contents)
+ to_chat(user, "[M] already has a concealed weapon bay!")
+ return
+ ..()
diff --git a/code/modules/vehicles/mecha/equipment/tools/work_tools.dm b/code/modules/vehicles/mecha/equipment/tools/work_tools.dm
new file mode 100644
index 0000000000..dd9448a826
--- /dev/null
+++ b/code/modules/vehicles/mecha/equipment/tools/work_tools.dm
@@ -0,0 +1,410 @@
+
+//Hydraulic clamp, Kill clamp, Extinguisher, RCD, Cable layer.
+
+
+/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp
+ name = "hydraulic clamp"
+ desc = "Equipment for engineering exosuits. Lifts objects and loads them into cargo."
+ icon_state = "mecha_clamp"
+ equip_cooldown = 15
+ energy_drain = 10
+ tool_behaviour = TOOL_RETRACTOR
+ range = MECHA_MELEE
+ toolspeed = 0.8
+ var/dam_force = 20
+ var/obj/vehicle/sealed/mecha/working/ripley/cargo_holder
+ harmful = TRUE
+ mech_flags = EXOSUIT_MODULE_RIPLEY
+
+/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/can_attach(obj/vehicle/sealed/mecha/working/ripley/M)
+ if(..())
+ if(istype(M))
+ return 1
+ return 0
+
+/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/attach(obj/vehicle/sealed/mecha/M)
+ ..()
+ cargo_holder = M
+ return
+
+/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/detach(atom/moveto = null)
+ ..()
+ cargo_holder = null
+
+/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/action(mob/source, atom/target, params)
+ if(!action_checks(target))
+ return
+ if(!cargo_holder)
+ return
+ if(ismecha(target))
+ var/obj/vehicle/sealed/mecha/M = target
+ var/have_ammo
+ for(var/obj/item/mecha_ammo/box in cargo_holder.cargo)
+ if(istype(box, /obj/item/mecha_ammo) && box.rounds)
+ have_ammo = TRUE
+ if(M.ammo_resupply(box, source, TRUE))
+ return
+ if(have_ammo)
+ to_chat(source, "No further supplies can be provided to [M].")
+ else
+ to_chat(source, "No providable supplies found in cargo hold")
+ return
+ if(isobj(target))
+ var/obj/O = target
+ if(istype(O, /obj/machinery/door/firedoor))
+ var/obj/machinery/door/firedoor/D = O
+ D.try_to_crowbar(src, source)
+ return
+ if(istype(O, /obj/machinery/door/airlock/))
+ var/obj/machinery/door/airlock/D = O
+ D.try_to_crowbar(src, source)
+ return
+ if(!O.anchored)
+ if(cargo_holder.cargo.len < cargo_holder.cargo_capacity)
+ chassis.visible_message("[chassis] lifts [target] and starts to load it into cargo compartment.")
+ O.set_anchored(TRUE)
+ if(do_after_cooldown(target, source))
+ cargo_holder.cargo += O
+ O.forceMove(chassis)
+ O.set_anchored(FALSE)
+ to_chat(source, "[icon2html(src, source)][target] successfully loaded.")
+ log_message("Loaded [O]. Cargo compartment capacity: [cargo_holder.cargo_capacity - cargo_holder.cargo.len]", LOG_MECHA)
+ else
+ O.set_anchored(initial(O.anchored))
+ else
+ to_chat(source, "[icon2html(src, source)]Not enough room in cargo compartment!")
+ else
+ to_chat(source, "[icon2html(src, source)][target] is firmly secured!")
+
+ else if(isliving(target))
+ var/mob/living/M = target
+ if(M.stat == DEAD)
+ return
+ if(source.a_intent == INTENT_HARM)
+ M.take_overall_damage(dam_force)
+ if(!M)
+ return
+ M.adjustOxyLoss(round(dam_force/2))
+ M.updatehealth()
+ target.visible_message("[chassis] squeezes [target]!", \
+ "[chassis] squeezes you!",\
+ "You hear something crack.")
+ log_combat(source, M, "attacked", "[name]", "(INTENT: [uppertext(source.a_intent)]) (DAMTYPE: [uppertext(damtype)])")
+ else
+ step_away(M,chassis)
+ to_chat(source, "[icon2html(src, source)]You push [target] out of the way.")
+ chassis.visible_message("[chassis] pushes [target] out of the way.")
+ return ..()
+
+
+
+//This is pretty much just for the death-ripley
+/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/kill
+ name = "\improper KILL CLAMP"
+ desc = "They won't know what clamped them!"
+ energy_drain = 0
+ dam_force = 0
+ var/real_clamp = FALSE
+
+/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/kill/real
+ desc = "They won't know what clamped them! This time for real!"
+ energy_drain = 10
+ dam_force = 20
+ real_clamp = TRUE
+
+/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/kill/action(mob/source, atom/target, params)
+ if(!action_checks(target))
+ return
+ if(!cargo_holder)
+ return
+ if(isobj(target))
+ var/obj/O = target
+ if(!O.anchored)
+ if(cargo_holder.cargo.len < cargo_holder.cargo_capacity)
+ chassis.visible_message("[chassis] lifts [target] and starts to load it into cargo compartment.")
+ O.set_anchored(TRUE)
+ if(do_after_cooldown(target, source))
+ cargo_holder.cargo += O
+ O.forceMove(chassis)
+ O.set_anchored(FALSE)
+ to_chat(source, "[icon2html(src, source)][target] successfully loaded.")
+ log_message("Loaded [O]. Cargo compartment capacity: [cargo_holder.cargo_capacity - cargo_holder.cargo.len]", LOG_MECHA)
+ else
+ O.set_anchored(initial(O.anchored))
+ else
+ to_chat(source, "[icon2html(src, source)]Not enough room in cargo compartment!")
+ else
+ to_chat(source, "[icon2html(src, source)][target] is firmly secured!")
+
+ else if(isliving(target))
+ var/mob/living/M = target
+ if(M.stat == DEAD)
+ return
+ if(source.a_intent == INTENT_HARM)
+ if(real_clamp)
+ M.take_overall_damage(dam_force)
+ if(!M)
+ return
+ M.adjustOxyLoss(round(dam_force/2))
+ M.updatehealth()
+ target.visible_message("[chassis] destroys [target] in an unholy fury!", \
+ "[chassis] destroys you in an unholy fury!")
+ log_combat(source, M, "attacked", "[name]", "(INTENT: [uppertext(source.a_intent)]) (DAMTYPE: [uppertext(damtype)])")
+ else
+ target.visible_message("[chassis] destroys [target] in an unholy fury!", \
+ "[chassis] destroys you in an unholy fury!")
+ else if(source.a_intent == INTENT_DISARM)
+ if(real_clamp)
+ var/mob/living/carbon/C = target
+ var/play_sound = FALSE
+ var/limbs_gone = ""
+ var/obj/item/bodypart/affected = C.get_bodypart(BODY_ZONE_L_ARM)
+ if(affected != null)
+ affected.dismember(damtype)
+ play_sound = TRUE
+ limbs_gone = ", [affected]"
+ affected = C.get_bodypart(BODY_ZONE_R_ARM)
+ if(affected != null)
+ affected.dismember(damtype)
+ play_sound = TRUE
+ limbs_gone = "[limbs_gone], [affected]"
+ if(play_sound)
+ playsound(src, get_dismember_sound(), 80, TRUE)
+ target.visible_message("[chassis] rips [target]'s arms off!", \
+ "[chassis] rips your arms off!")
+ log_combat(source, M, "dismembered of[limbs_gone],", "[name]", "(INTENT: [uppertext(source.a_intent)]) (DAMTYPE: [uppertext(damtype)])")
+ else
+ target.visible_message("[chassis] rips [target]'s arms off!", \
+ "[chassis] rips your arms off!")
+ else
+ step_away(M,chassis)
+ target.visible_message("[chassis] tosses [target] like a piece of paper!", \
+ "[chassis] tosses you like a piece of paper!")
+ return ..()
+
+
+
+/obj/item/mecha_parts/mecha_equipment/extinguisher
+ name = "exosuit extinguisher"
+ desc = "Equipment for engineering exosuits. A rapid-firing high capacity fire extinguisher."
+ icon_state = "mecha_exting"
+ equip_cooldown = 5
+ energy_drain = 0
+ range = MECHA_MELEE|MECHA_RANGED
+ mech_flags = EXOSUIT_MODULE_WORKING
+
+/obj/item/mecha_parts/mecha_equipment/extinguisher/Initialize(mapload)
+ . = ..()
+ create_reagents(1000)
+ reagents.add_reagent(/datum/reagent/water, 1000)
+
+/obj/item/mecha_parts/mecha_equipment/extinguisher/action(mob/source, atom/target, params) //copypasted from extinguisher. TODO: Rewrite from scratch.//Still todo
+ if(!action_checks(target) || get_dist(chassis, target)>3)
+ return
+
+ if(istype(target, /obj/structure/reagent_dispensers/watertank) && get_dist(chassis,target) <= 1)
+ var/obj/structure/reagent_dispensers/watertank/WT = target
+ WT.reagents.trans_to(src, 1000)
+ to_chat(chassis.occupants,"Extinguisher refilled.")
+ playsound(chassis, 'sound/effects/refill.ogg', 50, 1, -6)
+ else
+ if(reagents.total_volume > 0)
+ playsound(chassis, 'sound/effects/extinguish.ogg', 75, 1, -3)
+ var/direction = get_dir(chassis,target)
+ var/turf/T = get_turf(target)
+ var/turf/T1 = get_step(T,turn(direction, 90))
+ var/turf/T2 = get_step(T,turn(direction, -90))
+
+ var/list/the_targets = list(T,T1,T2)
+ spawn(0)
+ for(var/a=0, a<5, a++)
+ var/obj/effect/particle_effect/water/W = new /obj/effect/particle_effect/water(get_turf(chassis))
+ if(!W)
+ return
+ var/turf/my_target = pick(the_targets)
+ var/datum/reagents/R = new/datum/reagents(5)
+ W.reagents = R
+ R.my_atom = W
+ reagents.trans_to(W,1)
+ for(var/b=0, b<4, b++)
+ if(!W)
+ return
+ step_towards(W,my_target)
+ if(!W)
+ return
+ var/turf/W_turf = get_turf(W)
+ W.reagents.reaction(W_turf)
+ for(var/atom/atm in W_turf)
+ W.reagents.reaction(atm)
+ if(W.loc == my_target)
+ break
+ sleep(2)
+ return 1
+
+/obj/item/mecha_parts/mecha_equipment/extinguisher/get_equip_info()
+ return "[..()] \[[src.reagents.total_volume]\]"
+
+/obj/item/mecha_parts/mecha_equipment/extinguisher/can_attach(obj/vehicle/sealed/mecha/working/M as obj)
+ if(..())
+ if(istype(M))
+ return 1
+ return 0
+
+
+
+/obj/item/mecha_parts/mecha_equipment/rcd
+ name = "mounted RCD"
+ desc = "An exosuit-mounted Rapid Construction Device."
+ icon_state = "mecha_rcd"
+ equip_cooldown = 10
+ energy_drain = 250
+ range = MECHA_MELEE|MECHA_RANGED
+ item_flags = NO_MAT_REDEMPTION
+ var/mode = 0 //0 - deconstruct, 1 - wall or floor, 2 - airlock.
+
+/obj/item/mecha_parts/mecha_equipment/rcd/Initialize(mapload)
+ . = ..()
+ GLOB.rcd_list += src
+
+/obj/item/mecha_parts/mecha_equipment/rcd/Destroy()
+ GLOB.rcd_list -= src
+ return ..()
+
+/obj/item/mecha_parts/mecha_equipment/rcd/action(mob/source, atom/target, params)
+ if(istype(target, /turf/open/space/transit))//>implying these are ever made -Sieve
+ return
+
+ if(!isturf(target) && !istype(target, /obj/machinery/door/airlock))
+ target = get_turf(target)
+ if(!action_checks(target) || get_dist(chassis, target)>3)
+ return
+ playsound(chassis, 'sound/machines/click.ogg', 50, TRUE)
+
+ switch(mode)
+ if(0)
+ if(iswallturf(target))
+ var/turf/closed/wall/W = target
+ to_chat(source, "[icon2html(src, source)]Deconstructing [W]...")
+ if(do_after_cooldown(W, source))
+ chassis.spark_system.start()
+ W.ScrapeAway(flags = CHANGETURF_INHERIT_AIR)
+ playsound(W, 'sound/items/deconstruct.ogg', 50, TRUE)
+ else if(isfloorturf(target))
+ var/turf/open/floor/F = target
+ to_chat(source, "[icon2html(src, source)]Deconstructing [F]...")
+ if(do_after_cooldown(target, source))
+ chassis.spark_system.start()
+ F.ScrapeAway(flags = CHANGETURF_INHERIT_AIR)
+ playsound(F, 'sound/items/deconstruct.ogg', 50, TRUE)
+ else if (istype(target, /obj/machinery/door/airlock))
+ to_chat(source, "[icon2html(src, source)]Deconstructing [target]...")
+ if(do_after_cooldown(target, source))
+ chassis.spark_system.start()
+ qdel(target)
+ playsound(target, 'sound/items/deconstruct.ogg', 50, TRUE)
+ if(1)
+ if(isspaceturf(target))
+ var/turf/open/space/S = target
+ to_chat(source, "[icon2html(src, source)]Building Floor...")
+ if(do_after_cooldown(S, source))
+ S.PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR)
+ playsound(S, 'sound/items/deconstruct.ogg', 50, TRUE)
+ chassis.spark_system.start()
+ else if(isfloorturf(target))
+ var/turf/open/floor/F = target
+ to_chat(source, "[icon2html(src, source)]Building Wall...")
+ if(do_after_cooldown(F, source))
+ F.PlaceOnTop(/turf/closed/wall)
+ playsound(F, 'sound/items/deconstruct.ogg', 50, TRUE)
+ chassis.spark_system.start()
+ if(2)
+ if(isfloorturf(target))
+ to_chat(source, "[icon2html(src, source)]Building Airlock...")
+ if(do_after_cooldown(target, source))
+ chassis.spark_system.start()
+ var/obj/machinery/door/airlock/T = new /obj/machinery/door/airlock(target)
+ T.autoclose = TRUE
+ playsound(target, 'sound/items/deconstruct.ogg', 50, TRUE)
+ playsound(target, 'sound/effects/sparks2.ogg', 50, TRUE)
+ return ..()
+
+/obj/item/mecha_parts/mecha_equipment/rcd/Topic(href,href_list)
+ ..()
+ if(href_list["mode"])
+ mode = text2num(href_list["mode"])
+ switch(mode)
+ if(0)
+ to_chat(chassis.occupants, "[icon2html(src, chassis.occupants)]Switched RCD to Deconstruct.")
+ energy_drain = initial(energy_drain)
+ if(1)
+ to_chat(chassis.occupants, "[icon2html(src, chassis.occupants)]Switched RCD to Construct.")
+ energy_drain = 2*initial(energy_drain)
+ if(2)
+ to_chat(chassis.occupants, "[icon2html(src, chassis.occupants)]Switched RCD to Construct Airlock.")
+ energy_drain = 2*initial(energy_drain)
+ return
+
+/obj/item/mecha_parts/mecha_equipment/rcd/get_equip_info()
+ return "[..()] \[D|C|A\]"
+
+//Dunno where else to put this so shrug
+/obj/item/mecha_parts/mecha_equipment/ripleyupgrade
+ name = "Ripley MK-II Conversion Kit"
+ desc = "A pressurized canopy attachment kit for an Autonomous Power Loader Unit \"Ripley\" MK-I mecha, to convert it to the slower, but space-worthy MK-II design. This kit cannot be removed, once applied."
+ icon_state = "tesla"
+ mech_flags = EXOSUIT_MODULE_RIPLEY
+
+/obj/item/mecha_parts/mecha_equipment/ripleyupgrade/can_attach(obj/vehicle/sealed/mecha/working/ripley/M)
+ if(M.type != /obj/vehicle/sealed/mecha/working/ripley)
+ to_chat(loc, "This conversion kit can only be applied to APLU MK-I models.")
+ return FALSE
+ if(M.cargo.len)
+ to_chat(loc, "[M]'s cargo hold must be empty before this conversion kit can be applied.")
+ return FALSE
+ if(!(M.mecha_flags & ADDING_MAINT_ACCESS_POSSIBLE)) //non-removable upgrade, so lets make sure the pilot or owner has their say.
+ to_chat(loc, "[M] must have maintenance protocols active in order to allow this conversion kit.")
+ return FALSE
+ if(LAZYLEN(M.occupants)) //We're actualy making a new mech and swapping things over, it might get weird if players are involved
+ to_chat(loc, "[M] must be unoccupied before this conversion kit can be applied.")
+ return FALSE
+ if(!M.cell) //Turns out things break if the cell is missing
+ to_chat(loc, "The conversion process requires a cell installed.")
+ return FALSE
+ return TRUE
+
+/obj/item/mecha_parts/mecha_equipment/ripleyupgrade/attach(obj/vehicle/sealed/mecha/M)
+ var/obj/vehicle/sealed/mecha/working/ripley/mkii/N = new /obj/vehicle/sealed/mecha/working/ripley/mkii(get_turf(M),1)
+ if(!N)
+ return
+ QDEL_NULL(N.cell)
+ if (M.cell)
+ N.cell = M.cell
+ M.cell.forceMove(N)
+ M.cell = null
+ QDEL_NULL(N.scanmod)
+ if (M.scanmod)
+ N.scanmod = M.scanmod
+ M.scanmod.forceMove(N)
+ M.scanmod = null
+ QDEL_NULL(N.capacitor)
+ if (M.capacitor)
+ N.capacitor = M.capacitor
+ M.capacitor.forceMove(N)
+ M.capacitor = null
+ N.update_part_values()
+ for(var/obj/item/mecha_parts/E in M.contents)
+ if(istype(E, /obj/item/mecha_parts/concealed_weapon_bay)) //why is the bay not just a variable change who did this
+ E.forceMove(N)
+ for(var/obj/item/mecha_parts/mecha_equipment/E in M.equipment) //Move the equipment over...
+ E.detach(M)
+ E.attach(N)
+ N.dna_lock = M.dna_lock
+ N.mecha_flags = M.mecha_flags
+ N.strafe = M.strafe
+ N.obj_integrity = M.obj_integrity //This is not a repair tool
+ if (M.name != "\improper APLU MK-I \"Ripley\"")
+ N.name = M.name
+ M.wreckage = 0
+ qdel(M)
+ playsound(get_turf(N),'sound/items/ratchet.ogg',50,TRUE)
+ return
diff --git a/code/game/mecha/equipment/weapons/mecha_ammo.dm b/code/modules/vehicles/mecha/equipment/weapons/mecha_ammo.dm
similarity index 94%
rename from code/game/mecha/equipment/weapons/mecha_ammo.dm
rename to code/modules/vehicles/mecha/equipment/weapons/mecha_ammo.dm
index 3253e6cbd6..edc2b4716e 100644
--- a/code/game/mecha/equipment/weapons/mecha_ammo.dm
+++ b/code/modules/vehicles/mecha/equipment/weapons/mecha_ammo.dm
@@ -9,7 +9,7 @@
var/rounds = 0
var/round_term = "round"
var/direct_load //For weapons where we re-load the weapon itself rather than adding to the ammo storage.
- var/load_audio = "sound/weapons/gun_magazine_insert_empty_1.ogg"
+ var/load_audio = 'sound/weapons/bulletinsert.ogg'
var/ammo_type
/obj/item/mecha_ammo/update_name()
@@ -62,7 +62,7 @@
rounds = 6
round_term = "missile"
direct_load = TRUE
- load_audio = "sound/weapons/bulletinsert.ogg"
+ load_audio = 'sound/weapons/bulletinsert.ogg'
ammo_type = "missiles_br"
/obj/item/mecha_ammo/missiles_he
@@ -72,7 +72,7 @@
rounds = 8
round_term = "missile"
direct_load = TRUE
- load_audio = "sound/weapons/bulletinsert.ogg"
+ load_audio = 'sound/weapons/bulletinsert.ogg'
ammo_type = "missiles_he"
diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/modules/vehicles/mecha/equipment/weapons/weapons.dm
similarity index 70%
rename from code/game/mecha/equipment/weapons/weapons.dm
rename to code/modules/vehicles/mecha/equipment/weapons/weapons.dm
index a9d7853187..1f1211a3a4 100644
--- a/code/game/mecha/equipment/weapons/weapons.dm
+++ b/code/modules/vehicles/mecha/equipment/weapons/weapons.dm
@@ -1,76 +1,61 @@
/obj/item/mecha_parts/mecha_equipment/weapon
name = "mecha weapon"
- range = RANGED
+ range = MECHA_RANGED
+ destroy_sound = 'sound/mecha/weapdestr.ogg'
var/projectile
var/fire_sound
var/projectiles_per_shot = 1
var/variance = 0
- var/randomspread = 0 //use random spread for machineguns, instead of shotgun scatter
+ var/randomspread = FALSE //use random spread for machineguns, instead of shotgun scatter
var/projectile_delay = 0
var/firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect //the visual effect appearing when the weapon is fired.
var/kickback = TRUE //Will using this weapon in no grav push mecha back.
mech_flags = EXOSUIT_MODULE_COMBAT
-/obj/item/mecha_parts/mecha_equipment/weapon/can_attach(obj/mecha/combat/M)
- if(..())
- if(istype(M))
- return 1
- return 0
+/obj/item/mecha_parts/mecha_equipment/weapon/can_attach(obj/vehicle/sealed/mecha/M)
+ if(!..())
+ return FALSE
+ if(istype(M, /obj/vehicle/sealed/mecha/combat))
+ return TRUE
+ if((locate(/obj/item/mecha_parts/concealed_weapon_bay) in M.contents) && !(locate(/obj/item/mecha_parts/mecha_equipment/weapon) in M.equipment))
+ return TRUE
+ return FALSE
-/obj/item/mecha_parts/mecha_equipment/weapon/proc/get_shot_amount()
- return projectiles_per_shot
-
-/obj/item/mecha_parts/mecha_equipment/weapon/action(atom/target, params)
+/obj/item/mecha_parts/mecha_equipment/weapon/action(mob/source, atom/target, params)
if(!action_checks(target))
- return 0
-
- var/turf/curloc = get_turf(chassis)
- var/turf/targloc = get_turf(target)
- if (!targloc || !istype(targloc) || !curloc)
- return 0
- if (targloc == curloc)
- return 0
-
- set_ready_state(0)
- for(var/i=1 to get_shot_amount())
- var/obj/item/projectile/A = new projectile(curloc)
- A.firer = chassis.occupant
- A.original = target
- if(!A.suppressed && firing_effect_type)
- new firing_effect_type(get_turf(src), chassis.dir)
-
+ return FALSE
+ var/newtonian_target = turn(chassis.dir,180)
+ . = ..()//start the cooldown early because of sleeps
+ for(var/i in 1 to projectiles_per_shot)
+ if(energy_drain && !chassis.has_charge(energy_drain))//in case we run out of energy mid-burst, such as emp
+ break
var/spread = 0
if(variance)
if(randomspread)
spread = round((rand() - 0.5) * variance)
else
spread = round((i / projectiles_per_shot - 0.5) * variance)
- A.preparePixelProjectile(target, chassis.occupant, params, spread)
+
+ var/obj/item/projectile/A = new projectile(get_turf(src))
+ A.preparePixelProjectile(target, source, params, spread)
A.fire()
- playsound(chassis, fire_sound, 50, 1)
+ if(!A.suppressed && firing_effect_type)
+ new firing_effect_type(get_turf(src), chassis.dir)
+ playsound(chassis, fire_sound, 50, TRUE)
sleep(max(0, projectile_delay))
- if(kickback)
- chassis.newtonian_move(turn(chassis.dir,180))
- chassis.mecha_log_message("Fired from [src.name], targeting [target].")
- return 1
-
+ if(kickback)
+ chassis.newtonian_move(newtonian_target)
+ chassis.log_message("Fired from [src.name], targeting [target].", LOG_MECHA)
+ return ..()
//Base energy weapon type
/obj/item/mecha_parts/mecha_equipment/weapon/energy
name = "general energy weapon"
firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect/energy
-/obj/item/mecha_parts/mecha_equipment/weapon/energy/get_shot_amount()
- return min(round(chassis.cell.charge / energy_drain), projectiles_per_shot)
-
-/obj/item/mecha_parts/mecha_equipment/weapon/energy/start_cooldown()
- set_ready_state(0)
- chassis.use_power(energy_drain*get_shot_amount())
- addtimer(CALLBACK(src, .proc/set_ready_state, 1), equip_cooldown)
-
/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser
equip_cooldown = 8
name = "\improper CH-PS \"Immolator\" laser"
@@ -81,6 +66,15 @@
fire_sound = 'sound/weapons/laser.ogg'
harmful = TRUE
+/obj/item/mecha_parts/mecha_equipment/weapon/energy/disabler
+ equip_cooldown = 8
+ name = "\improper CH-DS \"Peacemaker\" disabler"
+ desc = "A weapon for combat exosuits. Shoots basic disablers."
+ icon_state = "mecha_disabler"
+ energy_drain = 30
+ projectile = /obj/item/projectile/beam/disabler
+ fire_sound = 'sound/weapons/taser2.ogg'
+
/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy
equip_cooldown = 15
name = "\improper CH-LC \"Solaris\" laser cannon"
@@ -97,7 +91,7 @@
icon_state = "mecha_ion"
energy_drain = 120
projectile = /obj/item/projectile/ion
- fire_sound = 'sound/weapons/IonRifle.ogg'
+ fire_sound = 'sound/weapons/laser.ogg'
/obj/item/mecha_parts/mecha_equipment/weapon/energy/tesla
equip_cooldown = 35
@@ -124,7 +118,6 @@
name = "217-D Heavy Plasma Cutter"
desc = "A device that shoots resonant plasma bursts at extreme velocity. The blasts are capable of crushing rock and demolishing solid obstacles."
icon_state = "mecha_plasmacutter"
- item_state = "plasmacutter"
lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi'
energy_drain = 30
@@ -132,12 +125,12 @@
fire_sound = 'sound/weapons/plasma_cutter.ogg'
harmful = TRUE
-/obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma/can_attach(obj/mecha/working/M)
+/obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma/can_attach(obj/vehicle/sealed/mecha/M)
if(..()) //combat mech
- return 1
- else if(M.equipment.len < M.max_equip && istype(M))
- return 1
- return 0
+ return TRUE
+ else if(LAZYLEN(M.equipment) < M.max_equip)
+ return TRUE
+ return FALSE
/obj/item/mecha_parts/mecha_equipment/weapon/energy/taser
name = "\improper PBT \"Pacifier\" mounted taser"
@@ -155,47 +148,53 @@
icon_state = "mecha_honker"
energy_drain = 200
equip_cooldown = 150
- range = MELEE|RANGED
+ range = MECHA_MELEE|MECHA_RANGED
kickback = FALSE
+ mech_flags = EXOSUIT_MODULE_HONK
-/obj/item/mecha_parts/mecha_equipment/weapon/honker/can_attach(obj/mecha/combat/honker/M)
- if(..())
- if(istype(M))
- return 1
- return 0
+/obj/item/mecha_parts/mecha_equipment/weapon/honker/can_attach(obj/vehicle/sealed/mecha/mecha)
+ . = ..()
+ if(!.)
+ return
+ if(!istype(mecha, /obj/vehicle/sealed/mecha/combat/honker))
+ return FALSE
-/obj/item/mecha_parts/mecha_equipment/weapon/honker/action(target, params)
+
+/obj/item/mecha_parts/mecha_equipment/weapon/honker/action(mob/source, atom/target, params)
if(!action_checks(target))
return
- playsound(chassis, 'sound/items/airhorn.ogg', 100, 1)
- chassis.occupant_message("HONK")
+ playsound(chassis, 'sound/items/airhorn.ogg', 100, TRUE)
+ to_chat(source, "[icon2html(src, source)]HONK")
for(var/mob/living/carbon/M in ohearers(6, chassis))
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
- if(istype(H.ears, /obj/item/clothing/ears/earmuffs))
- continue
+ if(!M.can_hear())
+ continue
+ var/turf/turf_check = get_turf(M)
+ if(isspaceturf(turf_check) && !turf_check.Adjacent(src)) //in space nobody can hear you honk.
+ continue
to_chat(M, "HONK")
M.SetSleeping(0)
M.stuttering += 20
- M.adjustEarDamage(0, 30)
- M.DefaultCombatKnockdown(60)
+ var/obj/item/organ/ears/ears = M.getorganslot(ORGAN_SLOT_EARS)
+ if(ears)
+ ears.adjustEarDamage(0, 30)
+ M.Paralyze(60)
if(prob(30))
M.Stun(200)
M.Unconscious(80)
else
M.Jitter(500)
- mecha_log_message("Honked from [src.name]. HONK!")
+ log_message("Honked from [src.name]. HONK!", LOG_MECHA)
var/turf/T = get_turf(src)
- message_admins("[ADMIN_LOOKUPFLW(chassis.occupant)] used a Mecha Honker in [ADMIN_VERBOSEJMP(T)]")
- log_game("[key_name(chassis.occupant)] used a Mecha Honker in [AREACOORD(T)]")
- return 1
+ message_admins("[ADMIN_LOOKUPFLW(source)] used a Mecha Honker in [ADMIN_VERBOSEJMP(T)]")
+ log_game("[key_name(source)] used a Mecha Honker in [AREACOORD(T)]")
+ return ..()
//Base ballistic weapon type
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic
name = "general ballistic weapon"
- fire_sound = 'sound/weapons/lmgshot.ogg'
+ fire_sound = 'sound/weapons/shot.ogg'
var/projectiles
var/projectiles_cache //ammo to be loaded in, if possible.
var/projectiles_cache_max
@@ -203,15 +202,12 @@
var/disabledreload //For weapons with no cache (like the rockets) which are reloaded by hand
var/ammo_type
-/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/get_shot_amount()
- return min(projectiles, projectiles_per_shot)
-
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/action_checks(target)
if(!..())
- return 0
+ return FALSE
if(projectiles <= 0)
- return 0
- return 1
+ return FALSE
+ return TRUE
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/get_equip_info()
return "[..()] \[[src.projectiles][projectiles_cache_max &&!projectile_energy_cost?"/[projectiles_cache]":""]\][!disabledreload &&(src.projectiles < initial(src.projectiles))?" - Rearm":null]"
@@ -237,7 +233,8 @@
projectiles = projectiles + projectiles_cache
projectiles_cache = 0
- send_byjax(chassis.occupant,"exosuit.browser","[REF(src)]",src.get_equip_info())
+ send_byjax(chassis.occupants,"exosuit.browser","[REF(src)]",src.get_equip_info())
+ log_message("Rearmed [src.name].", LOG_MECHA)
return TRUE
@@ -252,11 +249,11 @@
src.rearm()
return
-/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/action(atom/target)
+/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/action(mob/source, atom/target, params)
if(..())
- projectiles -= get_shot_amount()
- send_byjax(chassis.occupant,"exosuit.browser","[REF(src)]",src.get_equip_info())
- return 1
+ projectiles -= projectiles_per_shot
+ send_byjax(chassis.occupants,"exosuit.browser","[REF(src)]",src.get_equip_info())
+ return ..()
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/carbine
@@ -274,7 +271,7 @@
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/silenced
name = "\improper S.H.H. \"Quietus\" Carbine"
desc = "A weapon for combat exosuits. A mime invention, field tests have shown that targets cannot even scream before going down."
- fire_sound = 'sound/weapons/gunshot_silenced.ogg'
+ fire_sound = 'sound/weapons/Gunshot_silenced.ogg'
icon_state = "mecha_mime"
equip_cooldown = 30
projectile = /obj/item/projectile/bullet/mime
@@ -285,7 +282,6 @@
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot
name = "\improper LBX AC 10 \"Scattershot\""
desc = "A weapon for combat exosuits. Shoots a spread of pellets."
- fire_sound = 'sound/weapons/gunshotshotgunshot.ogg'
icon_state = "mecha_scatter"
equip_cooldown = 20
projectile = /obj/item/projectile/bullet/scattershot
@@ -347,7 +343,7 @@
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/breaching
name = "\improper BRM-6 missile rack"
- desc = "A weapon for combat exosuits. Launches low-explosive breaching missiles designed to explode only when striking a sturdy target."
+ desc = "A weapon for combat exosuits. Launches high-explosive breaching missiles with a safety fuze designed to explode only when striking a sturdy target."
icon_state = "mecha_missilerack_six"
projectile = /obj/item/projectile/bullet/a84mm_br
fire_sound = 'sound/weapons/rocketlaunch.ogg'
@@ -365,19 +361,19 @@
var/missile_range = 30
var/diags_first = FALSE
-/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/action(target)
+/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/action(mob/source, atom/target, params)
if(!action_checks(target))
return
var/obj/O = new projectile(chassis.loc)
- playsound(chassis, fire_sound, 50, 1)
- mecha_log_message("Launched a [O.name] from [name], targeting [target].")
+ playsound(chassis, fire_sound, 50, TRUE)
+ log_message("Launched a [O.name] from [name], targeting [target].", LOG_MECHA)
projectiles--
- proj_init(O)
- O.throw_at(target, missile_range, missile_speed, chassis.occupant, FALSE, diagonals_first = diags_first)
- return 1
+ proj_init(O, source)
+ O.throw_at(target, missile_range, missile_speed, source, FALSE, diagonals_first = diags_first)
+ return TRUE
//used for projectile initilisation (priming flashbang) and additional logging
-/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/proc/proj_init(var/obj/O)
+/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/proc/proj_init(obj/O, mob/user)
return
@@ -395,10 +391,10 @@
var/det_time = 20
ammo_type = "flashbang"
-/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang/proj_init(var/obj/item/grenade/flashbang/F)
+/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang/proj_init(obj/item/grenade/flashbang/F, mob/user)
var/turf/T = get_turf(src)
- message_admins("[ADMIN_LOOKUPFLW(chassis.occupant)] fired a [src] in [ADMIN_VERBOSEJMP(T)]")
- log_game("[key_name(chassis.occupant)] fired a [src] in [AREACOORD(T)]")
+ message_admins("[ADMIN_LOOKUPFLW(user)] fired a [F] in [ADMIN_VERBOSEJMP(T)]")
+ log_game("[key_name(user)] fired a [F] in [AREACOORD(T)]")
addtimer(CALLBACK(F, /obj/item/grenade/flashbang.proc/prime), det_time)
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang/clusterbang //Because I am a heartless bastard -Sieve //Heartless? for making the poor man's honkblast? - Kaze
@@ -422,8 +418,9 @@
missile_speed = 1.5
projectile_energy_cost = 100
equip_cooldown = 20
+ mech_flags = EXOSUIT_MODULE_HONK
-/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/banana_mortar/can_attach(obj/mecha/combat/honker/M)
+/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/banana_mortar/can_attach(obj/vehicle/sealed/mecha/combat/honker/M)
if(..())
if(istype(M))
return 1
@@ -439,14 +436,15 @@
missile_speed = 1.5
projectile_energy_cost = 100
equip_cooldown = 10
+ mech_flags = EXOSUIT_MODULE_HONK
-/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/mousetrap_mortar/can_attach(obj/mecha/combat/honker/M)
+/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/mousetrap_mortar/can_attach(obj/vehicle/sealed/mecha/combat/honker/M)
if(..())
if(istype(M))
return 1
return 0
-/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/mousetrap_mortar/proj_init(var/obj/item/assembly/mousetrap/armed/M)
+/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/mousetrap_mortar/proj_init(obj/item/assembly/mousetrap/armed/M)
M.secured = 1
@@ -457,28 +455,58 @@
icon_state = "mecha_punching_glove"
energy_drain = 250
equip_cooldown = 20
- range = MELEE|RANGED
+ range = MECHA_MELEE|MECHA_RANGED
missile_range = 5
projectile = /obj/item/punching_glove
fire_sound = 'sound/items/bikehorn.ogg'
projectiles = 10
projectile_energy_cost = 500
+ harmful = TRUE
diags_first = TRUE
+ /// Damage done by the glove on contact. Also used to determine throw distance (damage / 5)
+ var/punch_damage = 35
+ /// TRUE - Can toggle between lethal and non-lethal || FALSE - Cannot toggle
+ var/can_toggle_lethal = TRUE
+ mech_flags = EXOSUIT_MODULE_HONK
-/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/punching_glove/can_attach(obj/mecha/combat/honker/M)
+/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/punching_glove/can_attach(obj/vehicle/sealed/mecha/combat/honker/M)
if(..())
if(istype(M))
return 1
return 0
-/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/punching_glove/action(target)
+/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/punching_glove/get_equip_info()
+ if(!chassis)
+ return
+
+ if(can_toggle_lethal)
+ return "[..()] [harmful?"Punch":"Pat"] mode"
+ else
+ return ..()
+
+/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/punching_glove/Topic(href, href_list)
+ ..()
+ if(href_list["lethalPunch"])
+ harmful = !harmful
+ if(harmful)
+ to_chat(usr, "[icon2html(src, usr)]Lethal Fisting Enabled.")
+ else
+ to_chat(usr, "[icon2html(src, usr)]Lethal Fisting Disabled.")
+
+/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/punching_glove/action(mob/source, atom/target, params)
. = ..()
if(.)
- chassis.occupant_message("HONK")
+ to_chat(usr, "[icon2html(src, usr)]HONK")
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/punching_glove/proj_init(obj/item/punching_glove/PG)
if(!istype(PG))
return
+
+ if(harmful)
+ PG.throwforce = punch_damage
+ else
+ PG.throwforce = 0
+
//has to be low sleep or it looks weird, the beam doesn't exist for very long so it's a non-issue
chassis.Beam(PG, icon_state = "chain", time = missile_range * 20, maxdistance = missile_range + 2, beam_sleep_time = 1)
@@ -492,5 +520,5 @@
if(!..())
if(ismovable(hit_atom))
var/atom/movable/AM = hit_atom
- AM.safe_throw_at(get_edge_target_turf(AM,get_dir(src, AM)), 7, 2)
+ AM.safe_throw_at(get_edge_target_turf(AM,get_dir(src, AM)), clamp(round(throwforce/5), 2, 20), 2) //Throws them equal to damage/5, with a min range of 2 and max range of 20
qdel(src)
diff --git a/code/game/mecha/mech_bay.dm b/code/modules/vehicles/mecha/mech_bay.dm
similarity index 86%
rename from code/game/mecha/mech_bay.dm
rename to code/modules/vehicles/mecha/mech_bay.dm
index e9f682e929..70fd27efef 100644
--- a/code/game/mecha/mech_bay.dm
+++ b/code/modules/vehicles/mecha/mech_bay.dm
@@ -5,7 +5,7 @@
icon_state = "recharge_floor" // Some people just want to watch the world burn i guess
/turf/open/floor/mech_bay_recharge_floor/break_tile()
- ScrapeAway()
+ ScrapeAway(flags = CHANGETURF_INHERIT_AIR)
/turf/open/floor/mech_bay_recharge_floor/airless
icon_state = "recharge_floor_asteroid"
@@ -19,14 +19,22 @@
icon = 'icons/mecha/mech_bay.dmi'
icon_state = "recharge_port"
circuit = /obj/item/circuitboard/machine/mech_recharger
- var/obj/mecha/recharging_mech
+ var/obj/vehicle/sealed/mecha/recharging_mech
var/obj/machinery/computer/mech_bay_power_console/recharge_console
var/max_charge = 50
var/on = FALSE
- var/repairability = 0
var/turf/recharging_turf = null
-/obj/machinery/mech_bay_recharge_port/Initialize()
+/obj/machinery/mech_bay_recharge_port/Initialize(mapload)
+ . = ..()
+ recharging_turf = get_step(loc, dir)
+
+/obj/machinery/mech_bay_recharge_port/Destroy()
+ if (recharge_console && recharge_console.recharge_port == src)
+ recharge_console.recharge_port = null
+ return ..()
+
+/obj/machinery/mech_bay_recharge_port/setDir(new_dir)
. = ..()
recharging_turf = get_step(loc, dir)
@@ -45,7 +53,7 @@
if(stat & NOPOWER || !recharge_console)
return
if(!recharging_mech)
- recharging_mech = locate(/obj/mecha) in recharging_turf
+ recharging_mech = locate(/obj/vehicle/sealed/mecha) in recharging_turf
if(recharging_mech)
recharge_console.update_icon()
if(recharging_mech && recharging_mech.cell)
@@ -78,8 +86,8 @@
icon_screen = "recharge_comp"
icon_keyboard = "rd_key"
circuit = /obj/item/circuitboard/computer/mech_bay_power_console
- var/obj/machinery/mech_bay_recharge_port/recharge_port
light_color = LIGHT_COLOR_PINK
+ var/obj/machinery/mech_bay_recharge_port/recharge_port
/obj/machinery/computer/mech_bay_power_console/ui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
@@ -133,6 +141,11 @@
return
. += "recharge_comp_on"
-/obj/machinery/computer/mech_bay_power_console/Initialize()
+/obj/machinery/computer/mech_bay_power_console/Initialize(mapload)
. = ..()
reconnect()
+
+/obj/machinery/computer/mech_bay_power_console/Destroy()
+ if (recharge_port && recharge_port.recharge_console == src)
+ recharge_port.recharge_console = null
+ return ..()
diff --git a/code/game/mecha/mech_fabricator.dm b/code/modules/vehicles/mecha/mech_fabricator.dm
similarity index 100%
rename from code/game/mecha/mech_fabricator.dm
rename to code/modules/vehicles/mecha/mech_fabricator.dm
diff --git a/code/modules/vehicles/mecha/mech_melee_attack.dm b/code/modules/vehicles/mecha/mech_melee_attack.dm
new file mode 100644
index 0000000000..2f5faea172
--- /dev/null
+++ b/code/modules/vehicles/mecha/mech_melee_attack.dm
@@ -0,0 +1,117 @@
+///Called when a mech melee attacks an atom
+/atom/proc/mech_melee_attack(obj/vehicle/sealed/mecha/mecha_attacker)
+ return
+
+/turf/closed/wall/mech_melee_attack(obj/vehicle/sealed/mecha/mecha_attacker)
+ mecha_attacker.do_attack_animation(src)
+ switch(mecha_attacker.damtype)
+ if(BRUTE)
+ playsound(src, 'sound/weapons/punch4.ogg', 50, TRUE)
+ mecha_attacker.visible_message("[mecha_attacker.name] hits [src]!", \
+ "You hit [src]!", null, COMBAT_MESSAGE_RANGE)
+ if(prob(hardness + mecha_attacker.force) && mecha_attacker.force > 20)
+ dismantle_wall(1)
+ playsound(src, 'sound/effects/meteorimpact.ogg', 100, TRUE)
+ else
+ add_dent(WALL_DENT_HIT)
+ if(BURN)
+ playsound(src, 'sound/items/welder.ogg', 100, TRUE)
+ if(TOX)
+ playsound(src, 'sound/effects/spray2.ogg', 100, TRUE)
+ return FALSE
+
+/obj/mech_melee_attack(obj/vehicle/sealed/mecha/mecha_attacker)
+ mecha_attacker.do_attack_animation(src)
+ var/play_soundeffect = 0
+ var/mech_damtype = mecha_attacker.damtype
+ if(mecha_attacker.selected)
+ mech_damtype = mecha_attacker.selected.damtype
+ play_soundeffect = 1
+ else
+ switch(mecha_attacker.damtype)
+ if(BRUTE)
+ playsound(src, 'sound/weapons/punch4.ogg', 50, TRUE)
+ if(BURN)
+ playsound(src, 'sound/items/welder.ogg', 50, TRUE)
+ if(TOX)
+ playsound(src, 'sound/effects/spray2.ogg', 50, TRUE)
+ return 0
+ else
+ return 0
+ mecha_attacker.visible_message("[mecha_attacker.name] hits [src]!", "You hit [src]!", null, COMBAT_MESSAGE_RANGE)
+ return take_damage(mecha_attacker.force * 3, mech_damtype, MELEE, play_soundeffect, get_dir(src, mecha_attacker)) // multiplied by 3 so we can hit objs hard but not be overpowered against mobs.
+
+/obj/structure/window/mech_melee_attack(obj/vehicle/sealed/mecha/mecha_attacker)
+ if(!can_be_reached())
+ return
+ return ..()
+
+/mob/living/mech_melee_attack(obj/vehicle/sealed/mecha/mecha_attacker, mob/user)
+ if(user.a_intent == INTENT_HARM)
+ if(HAS_TRAIT(user, TRAIT_PACIFISM))
+ to_chat(user, "You don't want to harm other living beings!")
+ return
+ mecha_attacker.do_attack_animation(src)
+ if(mecha_attacker.damtype == "brute")
+ step_away(src, mecha_attacker, 15)
+ switch(mecha_attacker.damtype)
+ if(BRUTE)
+ Unconscious(20)
+ take_overall_damage(rand(mecha_attacker.force/2, mecha_attacker.force))
+ playsound(src, 'sound/weapons/punch4.ogg', 50, TRUE)
+ if(BURN)
+ take_overall_damage(0, rand(mecha_attacker.force * 0.5, mecha_attacker.force))
+ playsound(src, 'sound/items/welder.ogg', 50, TRUE)
+ if(TOX)
+ mecha_attacker.mech_toxin_damage(src)
+ else
+ return
+ updatehealth()
+ visible_message("[mecha_attacker.name] hits [src]!", \
+ "[mecha_attacker.name] hits you!", "You hear a sickening sound of flesh hitting flesh!", COMBAT_MESSAGE_RANGE, mecha_attacker)
+ to_chat(mecha_attacker, "You hit [src]!")
+ log_combat(user, src, "attacked", mecha_attacker, "(INTENT: [uppertext(user.a_intent)]) (DAMTYPE: [uppertext(mecha_attacker.damtype)])")
+ else
+ step_away(src, mecha_attacker)
+ log_combat(user, src, "pushed", mecha_attacker)
+ visible_message("[mecha_attacker] pushes [src] out of the way.", \
+ "[mecha_attacker] pushes you out of the way.", "You hear aggressive shuffling!", 5, list(mecha_attacker))
+ to_chat(mecha_attacker, "You push [src] out of the way.")
+
+/mob/living/carbon/human/mech_melee_attack(obj/vehicle/sealed/mecha/mecha_attacker, mob/user)
+ if(user.a_intent == INTENT_HARM)
+ if(HAS_TRAIT(user, TRAIT_PACIFISM))
+ to_chat(user, "You don't want to harm other living beings!")
+ return
+ mecha_attacker.do_attack_animation(src)
+ if(mecha_attacker.damtype == BRUTE)
+ step_away(src, mecha_attacker, 15)
+ var/obj/item/bodypart/temp = get_bodypart(pick(BODY_ZONE_CHEST, BODY_ZONE_CHEST, BODY_ZONE_CHEST, BODY_ZONE_HEAD))
+ if(temp)
+ var/update = 0
+ var/dmg = rand(mecha_attacker.force * 0.5, mecha_attacker.force)
+ switch(mecha_attacker.damtype)
+ if(BRUTE)
+ if(mecha_attacker.force > 35) // durand and other heavy mechas
+ Unconscious(20)
+ else if(mecha_attacker.force > 20 && !IsKnockdown()) // lightweight mechas like gygax
+ Knockdown(40)
+ update |= temp.receive_damage(dmg, 0)
+ playsound(src, 'sound/weapons/punch4.ogg', 50, TRUE)
+ if(BURN)
+ update |= temp.receive_damage(0, dmg)
+ playsound(src, 'sound/items/welder.ogg', 50, TRUE)
+ if(TOX)
+ mecha_attacker.mech_toxin_damage(src)
+ else
+ return
+ if(update)
+ update_damage_overlays()
+ updatehealth()
+
+ visible_message("[mecha_attacker.name] hits [src]!", \
+ "[mecha_attacker.name] hits you!", "You hear a sickening sound of flesh hitting flesh!", COMBAT_MESSAGE_RANGE, list(mecha_attacker))
+ to_chat(mecha_attacker, "You hit [src]!")
+ log_combat(user, src, "attacked", mecha_attacker, "(INTENT: [uppertext(user.a_intent)]) (DAMTYPE: [uppertext(mecha_attacker.damtype)])")
+ else
+ return ..()
diff --git a/code/modules/vehicles/mecha/mecha_actions.dm b/code/modules/vehicles/mecha/mecha_actions.dm
new file mode 100644
index 0000000000..09ccaad2c2
--- /dev/null
+++ b/code/modules/vehicles/mecha/mecha_actions.dm
@@ -0,0 +1,275 @@
+/***************** MECHA ACTIONS *****************/
+
+/obj/vehicle/sealed/mecha/generate_action_type()
+ . = ..()
+ if(istype(., /datum/action/vehicle/sealed/mecha))
+ var/datum/action/vehicle/sealed/mecha/mecha = .
+ mecha.chassis = src
+
+
+/datum/action/vehicle/sealed/mecha
+ icon_icon = 'icons/mob/actions/actions_mecha.dmi'
+ var/obj/vehicle/sealed/mecha/chassis
+
+/datum/action/vehicle/sealed/mecha/Destroy()
+ chassis = null
+ return ..()
+
+/datum/action/vehicle/sealed/mecha/mech_eject
+ name = "Eject From Mech"
+ button_icon_state = "mech_eject"
+
+/datum/action/vehicle/sealed/mecha/mech_eject/Trigger()
+ if(!owner)
+ return
+ if(!chassis || !(owner in chassis.occupants))
+ return
+ chassis.container_resist(owner)
+
+/datum/action/vehicle/sealed/mecha/mech_toggle_internals
+ name = "Toggle Internal Airtank Usage"
+ button_icon_state = "mech_internals_off"
+
+/datum/action/vehicle/sealed/mecha/mech_toggle_internals/Trigger()
+ if(!owner || !chassis || !(owner in chassis.occupants))
+ return
+ chassis.use_internal_tank = !chassis.use_internal_tank
+ button_icon_state = "mech_internals_[chassis.use_internal_tank ? "on" : "off"]"
+ to_chat(chassis.occupants, "[icon2html(chassis, owner)]Now taking air from [chassis.use_internal_tank?"internal airtank":"environment"].")
+ chassis.log_message("Now taking air from [chassis.use_internal_tank?"internal airtank":"environment"].", LOG_MECHA)
+ UpdateButtonIcon()
+
+/datum/action/vehicle/sealed/mecha/mech_cycle_equip
+ name = "Cycle Equipment"
+ button_icon_state = "mech_cycle_equip_off"
+
+/datum/action/vehicle/sealed/mecha/mech_cycle_equip/Trigger()
+ if(!owner || !chassis || !(owner in chassis.occupants))
+ return
+
+ var/list/available_equipment = list()
+ for(var/e in chassis.equipment)
+ var/obj/item/mecha_parts/mecha_equipment/equipment = e
+ if(equipment.selectable)
+ available_equipment += equipment
+
+ if(available_equipment.len == 0)
+ to_chat(owner, "[icon2html(chassis, owner)]No equipment available!")
+ return
+ if(!chassis.selected)
+ chassis.selected = available_equipment[1]
+ to_chat(owner, "[icon2html(chassis, owner)]You select [chassis.selected].")
+ send_byjax(chassis.occupants,"exosuit.browser","eq_list",chassis.get_equipment_list())
+ button_icon_state = "mech_cycle_equip_on"
+ UpdateButtonIcon()
+ return
+ var/number = 0
+ for(var/equipment in available_equipment)
+ number++
+ if(equipment != chassis.selected)
+ continue
+ if(available_equipment.len == number)
+ chassis.selected = null
+ to_chat(owner, "[icon2html(chassis, owner)]You switch to no equipment.")
+ button_icon_state = "mech_cycle_equip_off"
+ else
+ chassis.selected = available_equipment[number+1]
+ to_chat(owner, "[icon2html(chassis, owner)]You switch to [chassis.selected].")
+ button_icon_state = "mech_cycle_equip_on"
+ send_byjax(chassis.occupants,"exosuit.browser","eq_list",chassis.get_equipment_list())
+ UpdateButtonIcon()
+ return
+
+
+/datum/action/vehicle/sealed/mecha/mech_toggle_lights
+ name = "Toggle Lights"
+ button_icon_state = "mech_lights_off"
+
+/datum/action/vehicle/sealed/mecha/mech_toggle_lights/Trigger()
+ if(!owner || !chassis || !(owner in chassis.occupants))
+ return
+ if(!(chassis.mecha_flags & HAS_LIGHTS))
+ to_chat(owner, "This mechs lights are destroyed!")
+ return
+ chassis.mecha_flags ^= LIGHTS_ON
+ if(chassis.mecha_flags & LIGHTS_ON)
+ button_icon_state = "mech_lights_on"
+ chassis.set_light(5, 5)
+ else
+ button_icon_state = "mech_lights_off"
+ chassis.set_light(0)
+ to_chat(owner, "[icon2html(chassis, owner)]Toggled lights [(chassis.mecha_flags & LIGHTS_ON)?"on":"off"].")
+ chassis.log_message("Toggled lights [(chassis.mecha_flags & LIGHTS_ON)?"on":"off"].", LOG_MECHA)
+ UpdateButtonIcon()
+
+/datum/action/vehicle/sealed/mecha/mech_view_stats
+ name = "View Stats"
+ button_icon_state = "mech_view_stats"
+
+/datum/action/vehicle/sealed/mecha/mech_view_stats/Trigger()
+ if(!owner || !chassis || !(owner in chassis.occupants))
+ return
+ var/datum/browser/popup = new(owner , "exosuit")
+ popup.set_content(chassis.get_stats_html(owner))
+ popup.open()
+
+
+/datum/action/vehicle/sealed/mecha/strafe
+ name = "Toggle Strafing. Disabled when Alt is held."
+ button_icon_state = "strafe"
+
+/datum/action/vehicle/sealed/mecha/strafe/Trigger()
+ if(!owner || !chassis || !(owner in chassis.occupants))
+ return
+ chassis.toggle_strafe()
+
+/obj/vehicle/sealed/mecha/AltClick(mob/living/user)
+ if(!(user in occupants) || !user.canUseTopic(src))
+ return
+ if(!(user in return_controllers_with_flag(VEHICLE_CONTROL_DRIVE)))
+ to_chat(user, "You're in the wrong seat to control movement.")
+ return
+
+ toggle_strafe()
+
+/obj/vehicle/sealed/mecha/proc/toggle_strafe()
+ strafe = !strafe
+
+ to_chat(occupants, "[icon2html(src, occupants)]Toggled strafing mode [strafe?"on":"off"].")
+ log_message("Toggled strafing mode [strafe?"on":"off"].", LOG_MECHA)
+
+ for(var/occupant in occupants)
+ var/datum/action/action = LAZYACCESSASSOC(occupant_actions, occupant, /datum/action/vehicle/sealed/mecha/strafe)
+ action?.UpdateButtonIcon()
+
+//////////////////////////////////////// Specific Ability Actions ///////////////////////////////////////////////
+//Need to be granted by the mech type, Not default abilities.
+
+/datum/action/vehicle/sealed/mecha/mech_defense_mode
+ name = "Toggle an energy shield that blocks all attacks from the faced direction at a heavy power cost."
+ button_icon_state = "mech_defense_mode_off"
+
+/datum/action/vehicle/sealed/mecha/mech_defense_mode/Trigger(forced_state = FALSE)
+ SEND_SIGNAL(chassis, COMSIG_MECHA_ACTION_TRIGGER, owner, args) //Signal sent to the mech, to be handed to the shield. See durand.dm for more details
+
+/datum/action/vehicle/sealed/mecha/mech_overload_mode
+ name = "Toggle leg actuators overload"
+ button_icon_state = "mech_overload_off"
+
+/datum/action/vehicle/sealed/mecha/mech_overload_mode/Trigger(forced_state = null)
+ if(!owner || !chassis || !(owner in chassis.occupants))
+ return
+ if(!isnull(forced_state))
+ chassis.leg_overload_mode = forced_state
+ else
+ chassis.leg_overload_mode = !chassis.leg_overload_mode
+ chassis.log_message("Toggled leg actuators overload.", LOG_MECHA)
+ if(!chassis.leg_overload_mode)
+ button_icon_state = "mech_overload_on"
+ chassis.bumpsmash = TRUE
+ chassis.movedelay = min(1, round(chassis.movedelay * 0.5))
+ chassis.step_energy_drain = max(chassis.overload_step_energy_drain_min,chassis.step_energy_drain*chassis.leg_overload_coeff)
+ to_chat(owner, "[icon2html(chassis, owner)]You enable leg actuators overload.")
+ else
+ button_icon_state = "mech_overload_off"
+ chassis.bumpsmash = FALSE
+ chassis.movedelay = initial(chassis.movedelay)
+ chassis.step_energy_drain = chassis.normal_step_energy_drain
+ to_chat(owner, "[icon2html(chassis, owner)]You disable leg actuators overload.")
+ UpdateButtonIcon()
+
+/datum/action/vehicle/sealed/mecha/mech_smoke
+ name = "Smoke"
+ button_icon_state = "mech_smoke"
+
+/datum/action/vehicle/sealed/mecha/mech_smoke/Trigger()
+ if(!owner || !chassis || !(owner in chassis.occupants))
+ return
+ if(!TIMER_COOLDOWN_CHECK(src, COOLDOWN_MECHA_SMOKE) && chassis.smoke_charges>0)
+ chassis.smoke_system.start()
+ chassis.smoke_charges--
+ TIMER_COOLDOWN_START(src, COOLDOWN_MECHA_SMOKE, chassis.smoke_cooldown)
+
+
+/datum/action/vehicle/sealed/mecha/mech_zoom
+ name = "Zoom"
+ button_icon_state = "mech_zoom_off"
+
+/datum/action/vehicle/sealed/mecha/mech_zoom/Trigger()
+ if(!owner || !chassis || !(owner in chassis.occupants))
+ return
+ if(owner.client)
+ chassis.zoom_mode = !chassis.zoom_mode
+ button_icon_state = "mech_zoom_[chassis.zoom_mode ? "on" : "off"]"
+ chassis.log_message("Toggled zoom mode.", LOG_MECHA)
+ to_chat(owner, "[icon2html(chassis, owner)]Zoom mode [chassis.zoom_mode?"en":"dis"]abled.")
+ if(chassis.zoom_mode)
+ owner.client.view_size.setTo(4.5)
+ SEND_SOUND(owner, sound('sound/mecha/imag_enh.ogg',volume=50))
+ else
+ owner.client.view_size.resetToDefault() //Let's not let this stack shall we?
+ UpdateButtonIcon()
+
+/datum/action/vehicle/sealed/mecha/mech_switch_damtype
+ name = "Reconfigure arm microtool arrays"
+ button_icon_state = "mech_damtype_brute"
+
+/datum/action/vehicle/sealed/mecha/mech_switch_damtype/Trigger()
+ if(!owner || !chassis || !(owner in chassis.occupants))
+ return
+ var/new_damtype
+ switch(chassis.damtype)
+ if("tox")
+ new_damtype = "brute"
+ to_chat(owner, "[icon2html(chassis, owner)]Your exosuit's hands form into fists.")
+ if("brute")
+ new_damtype = "fire"
+ to_chat(owner, "[icon2html(chassis, owner)]A torch tip extends from your exosuit's hand, glowing red.")
+ if("fire")
+ new_damtype = "tox"
+ to_chat(owner, "[icon2html(chassis, owner)]A bone-chillingly thick plasteel needle protracts from the exosuit's palm.")
+ chassis.damtype = new_damtype
+ button_icon_state = "mech_damtype_[new_damtype]"
+ playsound(chassis, 'sound/mecha/mechmove01.ogg', 50, TRUE)
+ UpdateButtonIcon()
+
+///swap seats, for two person mecha
+/datum/action/vehicle/sealed/mecha/swap_seat
+ name = "Switch Seats"
+ button_icon_state = "mech_seat_swap"
+
+/datum/action/vehicle/sealed/mecha/swap_seat/Trigger()
+ if(!owner || !chassis || !(owner in chassis.occupants))
+ return
+
+ if(chassis.occupants.len == chassis.max_occupants)
+ to_chat(owner, "The other seat is occupied!")
+ return
+ var/list/drivers = chassis.return_drivers()
+ to_chat(owner, "Switching seats...")
+ chassis.is_currently_ejecting = TRUE
+ if(!do_after(owner, chassis.has_gravity() ? chassis.exit_delay : 0 , target = chassis))
+ chassis.is_currently_ejecting = FALSE
+ return
+ chassis.is_currently_ejecting = FALSE
+ if(owner in drivers)
+ to_chat(owner, "You shift to the gunner seat!")
+ chassis.remove_control_flags(owner, VEHICLE_CONTROL_DRIVE|VEHICLE_CONTROL_SETTINGS)
+ chassis.add_control_flags(owner, VEHICLE_CONTROL_MELEE|VEHICLE_CONTROL_EQUIPMENT)
+ else
+ to_chat(owner, "You shift to the pilot seat!")
+ chassis.remove_control_flags(owner, VEHICLE_CONTROL_MELEE|VEHICLE_CONTROL_EQUIPMENT)
+ chassis.add_control_flags(owner, VEHICLE_CONTROL_DRIVE|VEHICLE_CONTROL_SETTINGS)
+ chassis.update_icon_state()
+
+/datum/action/vehicle/sealed/mecha/mech_toggle_phasing
+ name = "Toggle Phasing"
+ button_icon_state = "mech_phasing_off"
+
+/datum/action/vehicle/sealed/mecha/mech_toggle_phasing/Trigger()
+ if(!owner || !chassis || !(owner in chassis.occupants))
+ return
+ chassis.phasing = !chassis.phasing
+ button_icon_state = "mech_phasing_[chassis.phasing ? "on" : "off"]"
+ to_chat(owner, "[icon2html(chassis, owner)]En":"#f00\">Dis"]abled phasing.")
+ UpdateButtonIcon()
diff --git a/code/modules/vehicles/mecha/mecha_construction_paths.dm b/code/modules/vehicles/mecha/mecha_construction_paths.dm
new file mode 100644
index 0000000000..ca79d98a64
--- /dev/null
+++ b/code/modules/vehicles/mecha/mecha_construction_paths.dm
@@ -0,0 +1,1448 @@
+////////////////////////////////
+///// Construction datums //////
+////////////////////////////////
+/datum/component/construction/mecha
+ var/base_icon
+
+ // Component typepaths.
+ // most must be defined unless
+ // get_steps is overriden.
+
+ // Circuit board typepaths.
+ // circuit_control and circuit_periph must be defined
+ // unless get_circuit_steps is overriden.
+ var/circuit_control
+ var/circuit_periph
+ var/circuit_weapon
+
+ // Armor plating typepaths. both must be defined
+ // unless relevant step procs are overriden. amounts
+ // must be defined if using /obj/item/stack/sheet types
+ var/inner_plating
+ var/inner_plating_amount
+
+ var/outer_plating
+ var/outer_plating_amount
+
+/datum/component/construction/mecha/spawn_result()
+ if(!result)
+ return
+ // Remove default mech power cell, as we replace it with a new one.
+ var/obj/vehicle/sealed/mecha/M = new result(drop_location())
+ QDEL_NULL(M.cell)
+ QDEL_NULL(M.scanmod)
+ QDEL_NULL(M.capacitor)
+
+ var/obj/item/mecha_parts/chassis/parent_chassis = parent
+ M.CheckParts(parent_chassis.contents)
+
+ SSblackbox.record_feedback("tally", "mechas_created", 1, M.name)
+ QDEL_NULL(parent)
+
+// Default proc to generate mech steps.
+// Override if the mech needs an entirely custom process (See HONK mech)
+// Otherwise override specific steps as needed (Ripley, Clarke, Phazon)
+/datum/component/construction/mecha/proc/get_steps()
+ return get_frame_steps() + get_circuit_steps() + (circuit_weapon ? get_circuit_weapon_steps() : list()) + get_stockpart_steps() + get_inner_plating_steps() + get_outer_plating_steps()
+
+/datum/component/construction/mecha/update_parent(step_index)
+ steps = get_steps()
+ ..()
+ // By default, each step in mech construction has a single icon_state:
+ // "[base_icon][index - 1]"
+ // For example, Ripley's step 1 icon_state is "ripley0".
+ var/atom/parent_atom = parent
+ if(!steps[index]["icon_state"] && base_icon)
+ parent_atom.icon_state = "[base_icon][index - 1]"
+
+/datum/component/construction/unordered/mecha_chassis/custom_action(obj/item/I, mob/living/user, typepath)
+ . = user.transferItemToLoc(I, parent)
+ if(.)
+ var/atom/parent_atom = parent
+ user.visible_message("[user] connects [I] to [parent].", "You connect [I] to [parent].")
+ parent_atom.add_overlay(I.icon_state+"+o")
+ qdel(I)
+
+/datum/component/construction/unordered/mecha_chassis/spawn_result()
+ var/atom/parent_atom = parent
+ parent_atom.icon = 'icons/mecha/mech_construction.dmi'
+ parent_atom.density = TRUE
+ parent_atom.cut_overlays()
+ ..()
+
+// Default proc for the first steps of mech construction.
+/datum/component/construction/mecha/proc/get_frame_steps()
+ return list(
+ list(
+ "key" = TOOL_WRENCH,
+ "desc" = "The hydraulic systems are disconnected."
+ ),
+ list(
+ "key" = TOOL_SCREWDRIVER,
+ "back_key" = TOOL_WRENCH,
+ "desc" = "The hydraulic systems are connected."
+ ),
+ list(
+ "key" = /obj/item/stack/cable_coil,
+ "amount" = 5,
+ "back_key" = TOOL_SCREWDRIVER,
+ "desc" = "The hydraulic systems are active."
+ ),
+ list(
+ "key" = TOOL_WIRECUTTER,
+ "back_key" = TOOL_SCREWDRIVER,
+ "desc" = "The wiring is added."
+ )
+ )
+
+// Default proc for the circuit board steps of a mech.
+// Second set of steps by default.
+/datum/component/construction/mecha/proc/get_circuit_steps()
+ return list(
+ list(
+ "key" = circuit_control,
+ "action" = ITEM_DELETE,
+ "back_key" = TOOL_SCREWDRIVER,
+ "desc" = "The wiring is adjusted."
+ ),
+ list(
+ "key" = TOOL_SCREWDRIVER,
+ "back_key" = TOOL_CROWBAR,
+ "desc" = "Central control module is installed."
+ ),
+ list(
+ "key" = circuit_periph,
+ "action" = ITEM_DELETE,
+ "back_key" = TOOL_SCREWDRIVER,
+ "desc" = "Central control module is secured."
+ ),
+ list(
+ "key" = TOOL_SCREWDRIVER,
+ "back_key" = TOOL_CROWBAR,
+ "desc" = "Peripherals control module is installed."
+ )
+ )
+
+// Default proc for weapon circuitboard steps
+// Used by combat mechs
+/datum/component/construction/mecha/proc/get_circuit_weapon_steps()
+ return list(
+ list(
+ "key" = circuit_weapon,
+ "action" = ITEM_DELETE,
+ "back_key" = TOOL_SCREWDRIVER,
+ "desc" = "Peripherals control module is secured."
+ ),
+ list(
+ "key" = TOOL_SCREWDRIVER,
+ "back_key" = TOOL_CROWBAR,
+ "desc" = "Weapons control module is installed."
+ )
+ )
+
+// Default proc for stock part installation
+// Third set of steps by default
+/datum/component/construction/mecha/proc/get_stockpart_steps()
+ var/prevstep_text = circuit_weapon ? "Weapons control module is secured." : "Peripherals control module is secured."
+ return list(
+ list(
+ "key" = /obj/item/stock_parts/scanning_module,
+ "action" = ITEM_MOVE_INSIDE,
+ "back_key" = TOOL_SCREWDRIVER,
+ "desc" = prevstep_text
+ ),
+ list(
+ "key" = TOOL_SCREWDRIVER,
+ "back_key" = TOOL_CROWBAR,
+ "desc" = "Scanner module is installed."
+ ),
+ list(
+ "key" = /obj/item/stock_parts/capacitor,
+ "action" = ITEM_MOVE_INSIDE,
+ "back_key" = TOOL_SCREWDRIVER,
+ "desc" = "Scanner module is secured."
+ ),
+ list(
+ "key" = TOOL_SCREWDRIVER,
+ "back_key" = TOOL_CROWBAR,
+ "desc" = "Capacitor is installed."
+ ),
+ list(
+ "key" = /obj/item/stock_parts/cell,
+ "action" = ITEM_MOVE_INSIDE,
+ "back_key" = TOOL_SCREWDRIVER,
+ "desc" = "Capacitor is secured."
+ ),
+ list(
+ "key" = TOOL_SCREWDRIVER,
+ "back_key" = TOOL_CROWBAR,
+ "desc" = "The power cell is installed."
+ )
+ )
+
+// Default proc for inner armor plating
+// Fourth set of steps by default
+/datum/component/construction/mecha/proc/get_inner_plating_steps()
+ var/list/first_step
+ if(ispath(inner_plating, /obj/item/stack/sheet))
+ first_step = list(
+ list(
+ "key" = inner_plating,
+ "amount" = inner_plating_amount,
+ "back_key" = TOOL_SCREWDRIVER,
+ "desc" = "The power cell is secured."
+ )
+ )
+ else
+ first_step = list(
+ list(
+ "key" = inner_plating,
+ "action" = ITEM_DELETE,
+ "back_key" = TOOL_SCREWDRIVER,
+ "desc" = "The power cell is secured."
+ )
+ )
+
+ return first_step + list(
+ list(
+ "key" = TOOL_WRENCH,
+ "back_key" = TOOL_CROWBAR,
+ "desc" = "Inner plating is installed."
+ ),
+ list(
+ "key" = TOOL_WELDER,
+ "back_key" = TOOL_WRENCH,
+ "desc" = "Inner Plating is wrenched."
+ )
+ )
+
+// Default proc for outer armor plating
+// Fifth set of steps by default
+/datum/component/construction/mecha/proc/get_outer_plating_steps()
+ var/list/first_step
+ if(ispath(outer_plating, /obj/item/stack/sheet))
+ first_step = list(
+ list(
+ "key" = outer_plating,
+ "amount" = outer_plating_amount,
+ "back_key" = TOOL_WELDER,
+ "desc" = "Inner plating is welded."
+ )
+ )
+ else
+ first_step = list(
+ list(
+ "key" = outer_plating,
+ "action" = ITEM_DELETE,
+ "back_key" = TOOL_WELDER,
+ "desc" = "Inner plating is welded."
+ )
+ )
+
+ return first_step + list(
+ list(
+ "key" = TOOL_WRENCH,
+ "back_key" = TOOL_CROWBAR,
+ "desc" = "External armor is installed."
+ ),
+ list(
+ "key" = TOOL_WELDER,
+ "back_key" = TOOL_WRENCH,
+ "desc" = "External armor is wrenched."
+ )
+ )
+
+
+/datum/component/construction/unordered/mecha_chassis/ripley
+ result = /datum/component/construction/mecha/ripley
+ steps = list(
+ /obj/item/mecha_parts/part/ripley_torso,
+ /obj/item/mecha_parts/part/ripley_left_arm,
+ /obj/item/mecha_parts/part/ripley_right_arm,
+ /obj/item/mecha_parts/part/ripley_left_leg,
+ /obj/item/mecha_parts/part/ripley_right_leg
+ )
+
+/datum/component/construction/mecha/ripley
+ result = /obj/vehicle/sealed/mecha/working/ripley
+ base_icon = "ripley"
+
+ circuit_control = /obj/item/circuitboard/mecha/ripley/main
+ circuit_periph = /obj/item/circuitboard/mecha/ripley/peripherals
+
+ inner_plating=/obj/item/stack/sheet/metal
+ inner_plating_amount = 5
+
+ outer_plating=/obj/item/stack/rods
+ outer_plating_amount = 10
+
+/datum/component/construction/mecha/ripley/get_outer_plating_steps()
+ return list(
+ list(
+ "key" = /obj/item/stack/rods,
+ "amount" = 10,
+ "back_key" = TOOL_WELDER,
+ "desc" = "Outer Plating is welded."
+ ),
+ list(
+ "key" = TOOL_WELDER,
+ "back_key" = TOOL_WIRECUTTER,
+ "desc" = "Cockpit wire screen is installed."
+ ),
+ )
+
+/datum/component/construction/mecha/ripley/custom_action(obj/item/I, mob/living/user, diff)
+ if(!..())
+ return FALSE
+
+ switch(index)
+ if(1)
+ user.visible_message("[user] connects [parent] hydraulic systems.", "You connect [parent] hydraulic systems.")
+ if(2)
+ if(diff==FORWARD)
+ user.visible_message("[user] activates [parent] hydraulic systems.", "You activate [parent] hydraulic systems.")
+ else
+ user.visible_message("[user] disconnects [parent] hydraulic systems.", "You disconnect [parent] hydraulic systems.")
+ if(3)
+ if(diff==FORWARD)
+ user.visible_message("[user] adds the wiring to [parent].", "You add the wiring to [parent].")
+ else
+ user.visible_message("[user] deactivates [parent] hydraulic systems.", "You deactivate [parent] hydraulic systems.")
+ if(4)
+ if(diff==FORWARD)
+ user.visible_message("[user] adjusts the wiring of [parent].", "You adjust the wiring of [parent].")
+ else
+ user.visible_message("[user] removes the wiring from [parent].", "You remove the wiring from [parent].")
+ if(5)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ else
+ user.visible_message("[user] disconnects the wiring of [parent].", "You disconnect the wiring of [parent].")
+ if(6)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the mainboard.", "You secure the mainboard.")
+ else
+ user.visible_message("[user] removes the central control module from [parent].", "You remove the central computer mainboard from [parent].")
+ if(7)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ else
+ user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.")
+ if(8)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.")
+ else
+ user.visible_message("[user] removes the peripherals control module from [parent].", "You remove the peripherals control module from [parent].")
+ if(9)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ else
+ user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.")
+ if(10)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the scanner module.", "You secure the scanner module.")
+ else
+ user.visible_message("[user] removes the scanner module from [parent].", "You remove the scanner module from [parent].")
+ if(11)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs [I] to [parent].", "You install [I] to [parent].")
+ else
+ user.visible_message("[user] unfastens the scanner module.", "You unfasten the scanner module.")
+ if(12)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures [I].", "You secure [I].")
+ else
+ user.visible_message("[user] removes the capacitor from [parent].", "You remove the capacitor from [parent].")
+ if(13)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs [I].", "You install [I].")
+ else
+ user.visible_message("[user] unsecures the capacitor from [parent].", "You unsecure the capacitor from [parent].")
+ if(14)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the power cell.", "You secure the power cell.")
+ else
+ user.visible_message("[user] pries the power cell from [parent].", "You pry the power cell from [parent].")
+ if(15)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs the internal armor layer to [parent].", "You install the internal armor layer to [parent].")
+ else
+ user.visible_message("[user] unfastens the power cell.", "You unfasten the power cell.")
+ if(16)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the internal armor layer.", "You secure the internal armor layer.")
+ else
+ user.visible_message("[user] pries internal armor layer from [parent].", "You pry internal armor layer from [parent].")
+ if(17)
+ if(diff==FORWARD)
+ user.visible_message("[user] welds the internal armor layer to [parent].", "You weld the internal armor layer to [parent].")
+ else
+ user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.")
+ if(18)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs the external reinforced armor layer to [parent].", "You install the external reinforced armor layer to [parent].")
+ else
+ user.visible_message("[user] cuts the internal armor layer from [parent].", "You cut the internal armor layer from [parent].")
+ if(19)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the external armor layer.", "You secure the external reinforced armor layer.")
+ else
+ user.visible_message("[user] pries external armor layer from [parent].", "You pry external armor layer from [parent].")
+ if(20)
+ if(diff==FORWARD)
+ user.visible_message("[user] welds the external armor layer to [parent].", "You weld the external armor layer to [parent].")
+ else
+ user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.")
+ return TRUE
+
+/datum/component/construction/unordered/mecha_chassis/gygax
+ result = /datum/component/construction/mecha/gygax
+ steps = list(
+ /obj/item/mecha_parts/part/gygax_torso,
+ /obj/item/mecha_parts/part/gygax_left_arm,
+ /obj/item/mecha_parts/part/gygax_right_arm,
+ /obj/item/mecha_parts/part/gygax_left_leg,
+ /obj/item/mecha_parts/part/gygax_right_leg,
+ /obj/item/mecha_parts/part/gygax_head
+ )
+
+/datum/component/construction/mecha/gygax
+ result = /obj/vehicle/sealed/mecha/combat/gygax
+ base_icon = "gygax"
+
+ circuit_control = /obj/item/circuitboard/mecha/gygax/main
+ circuit_periph = /obj/item/circuitboard/mecha/gygax/peripherals
+ circuit_weapon = /obj/item/circuitboard/mecha/gygax/targeting
+
+ inner_plating = /obj/item/stack/sheet/metal
+ inner_plating_amount = 5
+
+ outer_plating=/obj/item/mecha_parts/part/gygax_armor
+ outer_plating_amount=1
+
+/datum/component/construction/mecha/gygax/custom_action(obj/item/I, mob/living/user, diff)
+ if(!..())
+ return FALSE
+
+ switch(index)
+ if(1)
+ user.visible_message("[user] connects [parent] hydraulic systems.", "You connect [parent] hydraulic systems.")
+ if(2)
+ if(diff==FORWARD)
+ user.visible_message("[user] activates [parent] hydraulic systems.", "You activate [parent] hydraulic systems.")
+ else
+ user.visible_message("[user] disconnects [parent] hydraulic systems.", "You disconnect [parent] hydraulic systems.")
+ if(3)
+ if(diff==FORWARD)
+ user.visible_message("[user] adds the wiring to [parent].", "You add the wiring to [parent].")
+ else
+ user.visible_message("[user] deactivates [parent] hydraulic systems.", "You deactivate [parent] hydraulic systems.")
+ if(4)
+ if(diff==FORWARD)
+ user.visible_message("[user] adjusts the wiring of [parent].", "You adjust the wiring of [parent].")
+ else
+ user.visible_message("[user] removes the wiring from [parent].", "You remove the wiring from [parent].")
+ if(5)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ else
+ user.visible_message("[user] disconnects the wiring of [parent].", "You disconnect the wiring of [parent].")
+ if(6)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the mainboard.", "You secure the mainboard.")
+ else
+ user.visible_message("[user] removes the central control module from [parent].", "You remove the central computer mainboard from [parent].")
+ if(7)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ else
+ user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.")
+ if(8)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.")
+ else
+ user.visible_message("[user] removes the peripherals control module from [parent].", "You remove the peripherals control module from [parent].")
+ if(9)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ else
+ user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.")
+ if(10)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the weapon control module.", "You secure the weapon control module.")
+ else
+ user.visible_message("[user] removes the weapon control module from [parent].", "You remove the weapon control module from [parent].")
+ if(11)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs [I] to [parent].", "You install [I] to [parent].")
+ else
+ user.visible_message("[user] unfastens the weapon control module.", "You unfasten the weapon control module.")
+ if(12)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the scanner module.", "You secure the scanner module.")
+ else
+ user.visible_message("[user] removes the scanner module from [parent].", "You remove the scanner module from [parent].")
+ if(13)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs [I] to [parent].", "You install [I] to [parent].")
+ else
+ user.visible_message("[user] unfastens the scanner module.", "You unfasten the scanner module.")
+ if(14)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the capacitor.", "You secure the capacitor.")
+ else
+ user.visible_message("[user] removes the capacitor from [parent].", "You remove the capacitor from [parent].")
+ if(15)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ else
+ user.visible_message("[user] unfastens the capacitor.", "You unfasten the capacitor.")
+ if(16)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the power cell.", "You secure the power cell.")
+ else
+ user.visible_message("[user] pries the power cell from [parent].", "You pry the power cell from [parent].")
+ if(17)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs the internal armor layer to [parent].", "You install the internal armor layer to [parent].")
+ else
+ user.visible_message("[user] unfastens the power cell.", "You unfasten the power cell.")
+ if(18)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the internal armor layer.", "You secure the internal armor layer.")
+ else
+ user.visible_message("[user] pries internal armor layer from [parent].", "You pry internal armor layer from [parent].")
+ if(19)
+ if(diff==FORWARD)
+ user.visible_message("[user] welds the internal armor layer to [parent].", "You weld the internal armor layer to [parent].")
+ else
+ user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.")
+ if(20)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs [I] to [parent].", "You install [I] to [parent].")
+ else
+ user.visible_message("[user] cuts the internal armor layer from [parent].", "You cut the internal armor layer from [parent].")
+ if(21)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures Gygax Armor Plates.", "You secure Gygax Armor Plates.")
+ else
+ user.visible_message("[user] pries Gygax Armor Plates from [parent].", "You pry Gygax Armor Plates from [parent].")
+ if(22)
+ if(diff==FORWARD)
+ user.visible_message("[user] welds Gygax Armor Plates to [parent].", "You weld Gygax Armor Plates to [parent].")
+ else
+ user.visible_message("[user] unfastens Gygax Armor Plates.", "You unfasten Gygax Armor Plates.")
+ return TRUE
+
+//Begin Medigax
+/datum/component/construction/unordered/mecha_chassis/medigax
+ result = /datum/component/construction/mecha/medigax
+ steps = list(
+ /obj/item/mecha_parts/part/medigax_torso,
+ /obj/item/mecha_parts/part/medigax_left_arm,
+ /obj/item/mecha_parts/part/medigax_right_arm,
+ /obj/item/mecha_parts/part/medigax_left_leg,
+ /obj/item/mecha_parts/part/medigax_right_leg,
+ /obj/item/mecha_parts/part/medigax_head
+ )
+
+/datum/component/construction/mecha/medigax
+ result = /obj/vehicle/sealed/mecha/medical/medigax
+ base_icon = "medigax"
+
+ circuit_control = /obj/item/circuitboard/mecha/gygax/main
+ circuit_periph = /obj/item/circuitboard/mecha/gygax/peripherals
+ circuit_weapon = /obj/item/circuitboard/mecha/gygax/targeting
+
+ inner_plating = /obj/item/stack/sheet/metal
+ inner_plating_amount = 5
+
+ outer_plating = /obj/item/mecha_parts/part/medigax_armor
+ outer_plating_amount = 1
+
+/datum/component/construction/mecha/medigax/custom_action(obj/item/I, mob/living/user, diff)
+ if(!..())
+ return FALSE
+
+ switch(index)
+ if(1)
+ user.visible_message("[user] connects [parent] hydraulic systems", "You connect [parent] hydraulic systems.")
+ if(2)
+ if(diff==FORWARD)
+ user.visible_message("[user] activates [parent] hydraulic systems.", "You activate [parent] hydraulic systems.")
+ else
+ user.visible_message("[user] disconnects [parent] hydraulic systems", "You disconnect [parent] hydraulic systems.")
+ if(3)
+ if(diff==FORWARD)
+ user.visible_message("[user] adds the wiring to [parent].", "You add the wiring to [parent].")
+ else
+ user.visible_message("[user] deactivates [parent] hydraulic systems.", "You deactivate [parent] hydraulic systems.")
+ if(4)
+ if(diff==FORWARD)
+ user.visible_message("[user] adjusts the wiring of [parent].", "You adjust the wiring of [parent].")
+ else
+ user.visible_message("[user] removes the wiring from [parent].", "You remove the wiring from [parent].")
+ if(5)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ else
+ user.visible_message("[user] disconnects the wiring of [parent].", "You disconnect the wiring of [parent].")
+ if(6)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the mainboard.", "You secure the mainboard.")
+ else
+ user.visible_message("[user] removes the central control module from [parent].", "You remove the central computer mainboard from [parent].")
+ if(7)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ else
+ user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.")
+ if(8)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.")
+ else
+ user.visible_message("[user] removes the peripherals control module from [parent].", "You remove the peripherals control module from [parent].")
+ if(9)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ else
+ user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.")
+ if(10)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the weapon control module.", "You secure the weapon control module.")
+ else
+ user.visible_message("[user] removes the weapon control module from [parent].", "You remove the weapon control module from [parent].")
+ if(11)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs [I] to [parent].", "You install [I] to [parent].")
+ else
+ user.visible_message("[user] unfastens the weapon control module.", "You unfasten the weapon control module.")
+ if(12)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the scanner module.", "You secure the scanner module.")
+ else
+ user.visible_message("[user] removes the scanner module from [parent].", "You remove the scanner module from [parent].")
+ if(13)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs [I] to [parent].", "You install [I] to [parent].")
+ else
+ user.visible_message("[user] unfastens the scanner module.", "You unfasten the scanner module.")
+ if(14)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the capacitor.", "You secure the capacitor.")
+ else
+ user.visible_message("[user] removes the capacitor from [parent].", "You remove the capacitor from [parent].")
+ if(15)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ else
+ user.visible_message("[user] unfastens the capacitor.", "You unfasten the capacitor.")
+ if(16)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the power cell.", "You secure the power cell.")
+ else
+ user.visible_message("[user] pries the power cell from [parent].", "You pry the power cell from [parent].")
+ if(17)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs the internal armor layer to [parent].", "You install the internal armor layer to [parent].")
+ else
+ user.visible_message("[user] unfastens the power cell.", "You unfasten the power cell.")
+ if(18)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the internal armor layer.", "You secure the internal armor layer.")
+ else
+ user.visible_message("[user] pries internal armor layer from [parent].", "You pry internal armor layer from [parent].")
+ if(19)
+ if(diff==FORWARD)
+ user.visible_message("[user] welds the internal armor layer to [parent].", "You weld the internal armor layer to [parent].")
+ else
+ user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.")
+ if(20)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs [I] to [parent].", "You install [I] to [parent].")
+ else
+ user.visible_message("[user] cuts the internal armor layer from [parent].", "You cut the internal armor layer from [parent].")
+ if(21)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures Gygax Armor Plates.", "You secure Medical Gygax Armor Plates.")
+ else
+ user.visible_message("[user] pries Gygax Armor Plates from [parent].", "You pry Medical Gygax Armor Plates from [parent].")
+ if(22)
+ if(diff==FORWARD)
+ user.visible_message("[user] welds Gygax Armor Plates to [parent].", "You weld Medical Gygax Armor Plates to [parent].")
+ else
+ user.visible_message("[user] unfastens Gygax Armor Plates.", "You unfasten Medical Gygax Armor Plates.")
+ return TRUE
+// End Medigax
+
+/datum/component/construction/unordered/mecha_chassis/firefighter
+ result = /datum/component/construction/mecha/firefighter
+ steps = list(
+ /obj/item/mecha_parts/part/ripley_torso,
+ /obj/item/mecha_parts/part/ripley_left_arm,
+ /obj/item/mecha_parts/part/ripley_right_arm,
+ /obj/item/mecha_parts/part/ripley_left_leg,
+ /obj/item/mecha_parts/part/ripley_right_leg
+ )
+
+/datum/component/construction/mecha/firefighter
+ result = /obj/vehicle/sealed/mecha/working/ripley/firefighter
+ base_icon = "fireripley"
+
+ circuit_control = /obj/item/circuitboard/mecha/ripley/main
+ circuit_periph = /obj/item/circuitboard/mecha/ripley/peripherals
+
+ inner_plating = /obj/item/clothing/suit/fire
+ inner_plating_amount = 1
+
+ outer_plating = /obj/item/stack/sheet/plasteel
+ outer_plating_amount = 10
+
+/datum/component/construction/mecha/firefighter/get_outer_plating_steps()
+ return list(
+ list(
+ "key" = /obj/item/stack/sheet/plasteel,
+ "amount" = 10,
+ "back_key" = TOOL_WELDER,
+ "desc" = "Outer plating is welded."
+ ),
+ list(
+ "key" = TOOL_WELDER,
+ "back_key" = TOOL_WRENCH,
+ "desc" = "Outer plating is complete."
+ ),
+ )
+
+/datum/component/construction/mecha/firefighter/custom_action(obj/item/I, mob/living/user, diff)
+ if(!..())
+ return FALSE
+
+ switch(index)
+ if(1)
+ user.visible_message("[user] connects [parent] hydraulic systems.", "You connect [parent] hydraulic systems.")
+ if(2)
+ if(diff==FORWARD)
+ user.visible_message("[user] activates [parent] hydraulic systems.", "You activate [parent] hydraulic systems.")
+ else
+ user.visible_message("[user] disconnects [parent] hydraulic systems.", "You disconnect [parent] hydraulic systems.")
+ if(3)
+ if(diff==FORWARD)
+ user.visible_message("[user] adds the wiring to [parent].", "You add the wiring to [parent].")
+ else
+ user.visible_message("[user] deactivates [parent] hydraulic systems.", "You deactivate [parent] hydraulic systems.")
+ if(4)
+ if(diff==FORWARD)
+ user.visible_message("[user] adjusts the wiring of [parent].", "You adjust the wiring of [parent].")
+ else
+ user.visible_message("[user] removes the wiring from [parent].", "You remove the wiring from [parent].")
+ if(5)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ else
+ user.visible_message("[user] disconnects the wiring of [parent].", "You disconnect the wiring of [parent].")
+ if(6)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the mainboard.", "You secure the mainboard.")
+ else
+ user.visible_message("[user] removes the central control module from [parent].", "You remove the central computer mainboard from [parent].")
+ if(7)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ else
+ user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.")
+ if(8)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.")
+ else
+ user.visible_message("[user] removes the peripherals control module from [parent].", "You remove the peripherals control module from [parent].")
+ if(9)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ else
+ user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.")
+ if(10)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the scanner module.", "You secure the scanner module.")
+ else
+ user.visible_message("[user] removes the scanner module from [parent].", "You remove the scanner module from [parent].")
+ if(11)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs [I] to [parent].", "You install [I] to [parent].")
+ else
+ user.visible_message("[user] unfastens the scanner module.", "You unfasten the scanner module.")
+ if(12)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures [I].", "You secure [I].")
+ else
+ user.visible_message("[user] removes the capacitor from [parent].", "You remove the capacitor from [parent].")
+ if(13)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs [I].", "You install [I].")
+ else
+ user.visible_message("[user] unsecures the capacitor from [parent].", "You unsecure the capacitor from [parent].")
+ if(14)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the power cell.", "You secure the power cell.")
+ else
+ user.visible_message("[user] pries the power cell from [parent].", "You pry the power cell from [parent].")
+ if(15)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs the internal armor layer to [parent].", "You install the internal armor layer to [parent].")
+ else
+ user.visible_message("[user] unfastens the power cell.", "You unfasten the power cell.")
+ if(16)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the internal armor layer.", "You secure the internal armor layer.")
+ else
+ user.visible_message("[user] pries internal armor layer from [parent].", "You pry internal armor layer from [parent].")
+ if(17)
+ if(diff==FORWARD)
+ user.visible_message("[user] welds the internal armor layer to [parent].", "You weld the internal armor layer to [parent].")
+ else
+ user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.")
+ if(18)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs the external reinforced armor layer to [parent].", "You install the external reinforced armor layer to [parent].")
+ else
+ user.visible_message("[user] cuts the internal armor layer from [parent].", "You cut the internal armor layer from [parent].")
+ if(19)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the external armor layer.", "You secure the external reinforced armor layer.")
+ else
+ user.visible_message("[user] pries external armor layer from [parent].", "You pry external armor layer from [parent].")
+ if(20)
+ if(diff==FORWARD)
+ user.visible_message("[user] welds the external armor layer to [parent].", "You weld the external armor layer to [parent].")
+ else
+ user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.")
+ return TRUE
+
+/datum/component/construction/unordered/mecha_chassis/honker
+ result = /datum/component/construction/mecha/honker
+ steps = list(
+ /obj/item/mecha_parts/part/honker_torso,
+ /obj/item/mecha_parts/part/honker_left_arm,
+ /obj/item/mecha_parts/part/honker_right_arm,
+ /obj/item/mecha_parts/part/honker_left_leg,
+ /obj/item/mecha_parts/part/honker_right_leg,
+ /obj/item/mecha_parts/part/honker_head
+ )
+
+/datum/component/construction/mecha/honker
+ result = /obj/vehicle/sealed/mecha/combat/honker
+ steps = list(
+ list(
+ "key" = /obj/item/bikehorn
+ ),
+ list(
+ "key" = /obj/item/circuitboard/mecha/honker/main,
+ "action" = ITEM_DELETE
+ ),
+ list(
+ "key" = /obj/item/bikehorn
+ ),
+ list(
+ "key" = /obj/item/circuitboard/mecha/honker/peripherals,
+ "action" = ITEM_DELETE
+ ),
+ list(
+ "key" = /obj/item/bikehorn
+ ),
+ list(
+ "key" = /obj/item/circuitboard/mecha/honker/targeting,
+ "action" = ITEM_DELETE
+ ),
+ list(
+ "key" = /obj/item/bikehorn
+ ),
+ list(
+ "key" = /obj/item/stock_parts/scanning_module,
+ "action" = ITEM_MOVE_INSIDE
+ ),
+ list(
+ "key" = /obj/item/bikehorn
+ ),
+ list(
+ "key" = /obj/item/stock_parts/capacitor,
+ "action" = ITEM_MOVE_INSIDE
+ ),
+ list(
+ "key" = /obj/item/bikehorn
+ ),
+ list(
+ "key" = /obj/item/stock_parts/cell,
+ "action" = ITEM_MOVE_INSIDE
+ ),
+ list(
+ "key" = /obj/item/bikehorn
+ ),
+ list(
+ "key" = /obj/item/clothing/mask/gas/clown_hat,
+ "action" = ITEM_DELETE
+ ),
+ list(
+ "key" = /obj/item/bikehorn
+ ),
+ list(
+ "key" = /obj/item/clothing/shoes/clown_shoes,
+ "action" = ITEM_DELETE
+ ),
+ list(
+ "key" = /obj/item/bikehorn
+ ),
+ )
+
+/datum/component/construction/mecha/honker/get_steps()
+ return steps
+
+// HONK doesn't have any construction step icons, so we just set an icon once.
+/datum/component/construction/mecha/honker/update_parent(step_index)
+ if(step_index == 1)
+ var/atom/parent_atom = parent
+ parent_atom.icon = 'icons/mecha/mech_construct.dmi'
+ parent_atom.icon_state = "honker_chassis"
+ ..()
+
+/datum/component/construction/mecha/honker/custom_action(obj/item/I, mob/living/user, diff)
+ if(!..())
+ return FALSE
+
+ if(istype(I, /obj/item/bikehorn))
+ playsound(parent, 'sound/items/bikehorn.ogg', 50, TRUE)
+ user.visible_message("HONK!")
+
+ //TODO: better messages.
+ switch(index)
+ if(2)
+ user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ if(4)
+ user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ if(6)
+ user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ if(8)
+ user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ if(10)
+ user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ if(12)
+ user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ if(14)
+ user.visible_message("[user] puts [I] on [parent].", "You put [I] on [parent].")
+ if(16)
+ user.visible_message("[user] puts [I] on [parent].", "You put [I] on [parent].")
+ return TRUE
+
+/datum/component/construction/unordered/mecha_chassis/durand
+ result = /datum/component/construction/mecha/durand
+ steps = list(
+ /obj/item/mecha_parts/part/durand_torso,
+ /obj/item/mecha_parts/part/durand_left_arm,
+ /obj/item/mecha_parts/part/durand_right_arm,
+ /obj/item/mecha_parts/part/durand_left_leg,
+ /obj/item/mecha_parts/part/durand_right_leg,
+ /obj/item/mecha_parts/part/durand_head
+ )
+
+/datum/component/construction/mecha/durand
+ result = /obj/vehicle/sealed/mecha/combat/durand
+ base_icon = "durand"
+
+ circuit_control = /obj/item/circuitboard/mecha/durand/main
+ circuit_periph = /obj/item/circuitboard/mecha/durand/peripherals
+ circuit_weapon = /obj/item/circuitboard/mecha/durand/targeting
+
+ inner_plating = /obj/item/stack/sheet/metal
+ inner_plating_amount = 5
+
+ outer_plating = /obj/item/mecha_parts/part/durand_armor
+ outer_plating_amount = 1
+
+/datum/component/construction/mecha/durand/custom_action(obj/item/I, mob/living/user, diff)
+ if(!..())
+ return FALSE
+
+ //TODO: better messages.
+ switch(index)
+ if(1)
+ user.visible_message("[user] connects [parent] hydraulic systems.", "You connect [parent] hydraulic systems.")
+ if(2)
+ if(diff==FORWARD)
+ user.visible_message("[user] activates [parent] hydraulic systems.", "You activate [parent] hydraulic systems.")
+ else
+ user.visible_message("[user] disconnects [parent] hydraulic systems.", "You disconnect [parent] hydraulic systems.")
+ if(3)
+ if(diff==FORWARD)
+ user.visible_message("[user] adds the wiring to [parent].", "You add the wiring to [parent].")
+ else
+ user.visible_message("[user] deactivates [parent] hydraulic systems.", "You deactivate [parent] hydraulic systems.")
+ if(4)
+ if(diff==FORWARD)
+ user.visible_message("[user] adjusts the wiring of [parent].", "You adjust the wiring of [parent].")
+ else
+ user.visible_message("[user] removes the wiring from [parent].", "You remove the wiring from [parent].")
+ if(5)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ else
+ user.visible_message("[user] disconnects the wiring of [parent].", "You disconnect the wiring of [parent].")
+ if(6)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the mainboard.", "You secure the mainboard.")
+ else
+ user.visible_message("[user] removes the central control module from [parent].", "You remove the central computer mainboard from [parent].")
+ if(7)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ else
+ user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.")
+ if(8)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.")
+ else
+ user.visible_message("[user] removes the peripherals control module from [parent].", "You remove the peripherals control module from [parent].")
+ if(9)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ else
+ user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.")
+ if(10)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the weapon control module.", "You secure the weapon control module.")
+ else
+ user.visible_message("[user] removes the weapon control module from [parent].", "You remove the weapon control module from [parent].")
+ if(11)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs [I] to [parent].", "You install [I] to [parent].")
+ else
+ user.visible_message("[user] unfastens the weapon control module.", "You unfasten the weapon control module.")
+ if(12)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the scanner module.", "You secure the scanner module.")
+ else
+ user.visible_message("[user] removes the scanner module from [parent].", "You remove the scanner module from [parent].")
+ if(13)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs [I] to [parent].", "You install [I] to [parent].")
+ else
+ user.visible_message("[user] unfastens the scanner module.", "You unfasten the scanner module.")
+ if(14)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the capacitor.", "You secure the capacitor.")
+ else
+ user.visible_message("[user] removes the capacitor from [parent].", "You remove the capacitor from [parent].")
+ if(15)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ else
+ user.visible_message("[user] unfastens the capacitor.", "You unfasten the capacitor.")
+ if(16)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the power cell.", "You secure the power cell.")
+ else
+ user.visible_message("[user] pries the power cell from [parent].", "You pry the power cell from [parent].")
+ if(17)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs the internal armor layer to [parent].", "You install the internal armor layer to [parent].")
+ else
+ user.visible_message("[user] unfastens the power cell.", "You unfasten the power cell.")
+ if(18)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the internal armor layer.", "You secure the internal armor layer.")
+ else
+ user.visible_message("[user] pries internal armor layer from [parent].", "You pry internal armor layer from [parent].")
+ if(19)
+ if(diff==FORWARD)
+ user.visible_message("[user] welds the internal armor layer to [parent].", "You weld the internal armor layer to [parent].")
+ else
+ user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.")
+ if(20)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs [I] to [parent].", "You install [I] to [parent].")
+ else
+ user.visible_message("[user] cuts the internal armor layer from [parent].", "You cut the internal armor layer from [parent].")
+ if(21)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures Durand Armor Plates.", "You secure Durand Armor Plates.")
+ else
+ user.visible_message("[user] pries Durand Armor Plates from [parent].", "You pry Durand Armor Plates from [parent].")
+ if(22)
+ if(diff==FORWARD)
+ user.visible_message("[user] welds Durand Armor Plates to [parent].", "You weld Durand Armor Plates to [parent].")
+ else
+ user.visible_message("[user] unfastens Durand Armor Plates.", "You unfasten Durand Armor Plates.")
+ return TRUE
+
+//PHAZON
+
+/datum/component/construction/unordered/mecha_chassis/phazon
+ result = /datum/component/construction/mecha/phazon
+ steps = list(
+ /obj/item/mecha_parts/part/phazon_torso,
+ /obj/item/mecha_parts/part/phazon_left_arm,
+ /obj/item/mecha_parts/part/phazon_right_arm,
+ /obj/item/mecha_parts/part/phazon_left_leg,
+ /obj/item/mecha_parts/part/phazon_right_leg,
+ /obj/item/mecha_parts/part/phazon_head
+ )
+
+/datum/component/construction/mecha/phazon
+ result = /obj/vehicle/sealed/mecha/combat/phazon
+ base_icon = "phazon"
+
+ circuit_control = /obj/item/circuitboard/mecha/phazon/main
+ circuit_periph = /obj/item/circuitboard/mecha/phazon/peripherals
+ circuit_weapon = /obj/item/circuitboard/mecha/phazon/targeting
+
+ inner_plating = /obj/item/stack/sheet/plasteel
+ inner_plating_amount = 5
+
+ outer_plating = /obj/item/mecha_parts/part/phazon_armor
+ outer_plating_amount = 1
+
+/datum/component/construction/mecha/phazon/get_stockpart_steps()
+ return list(
+ list(
+ "key" = /obj/item/stock_parts/scanning_module,
+ "action" = ITEM_MOVE_INSIDE,
+ "back_key" = TOOL_SCREWDRIVER,
+ "desc" = "Weapon control module is secured."
+ ),
+ list(
+ "key" = TOOL_SCREWDRIVER,
+ "back_key" = TOOL_CROWBAR,
+ "desc" = "Scanner module is installed."
+ ),
+ list(
+ "key" = /obj/item/stock_parts/capacitor,
+ "action" = ITEM_MOVE_INSIDE,
+ "back_key" = TOOL_SCREWDRIVER,
+ "desc" = "Scanner module is secured."
+ ),
+ list(
+ "key" = TOOL_SCREWDRIVER,
+ "back_key" = TOOL_CROWBAR,
+ "desc" = "Capacitor is installed."
+ ),
+ list(
+ "key" = /obj/item/stack/ore/bluespace_crystal,
+ "amount" = 1,
+ "back_key" = TOOL_SCREWDRIVER,
+ "desc" = "Capacitor is secured."
+ ),
+ list(
+ "key" = /obj/item/stack/cable_coil,
+ "amount" = 5,
+ "back_key" = TOOL_CROWBAR,
+ "desc" = "The bluespace crystal is installed."
+ ),
+ list(
+ "key" = TOOL_SCREWDRIVER,
+ "back_key" = TOOL_WIRECUTTER,
+ "desc" = "The bluespace crystal is connected."
+ ),
+ list(
+ "key" = /obj/item/stock_parts/cell,
+ "action" = ITEM_MOVE_INSIDE,
+ "back_key" = TOOL_SCREWDRIVER,
+ "desc" = "The bluespace crystal is engaged."
+ ),
+ list(
+ "key" = TOOL_SCREWDRIVER,
+ "back_key" = TOOL_CROWBAR,
+ "desc" = "The power cell is installed.",
+ "icon_state" = "phazon17"
+ // This is the point where a step icon is skipped, so "icon_state" had to be set manually starting from here.
+ )
+ )
+
+/datum/component/construction/mecha/phazon/get_outer_plating_steps()
+ return list(
+ list(
+ "key" = outer_plating,
+ "amount" = 1,
+ "action" = ITEM_DELETE,
+ "back_key" = TOOL_WELDER,
+ "desc" = "Internal armor is welded."
+ ),
+ list(
+ "key" = TOOL_WRENCH,
+ "back_key" = TOOL_CROWBAR,
+ "desc" = "External armor is installed."
+ ),
+ list(
+ "key" = TOOL_WELDER,
+ "back_key" = TOOL_WRENCH,
+ "desc" = "External armor is wrenched."
+ ),
+ list(
+ "key" = /obj/item/assembly/signaler/anomaly/bluespace,
+ "action" = ITEM_DELETE,
+ "back_key" = TOOL_WELDER,
+ "desc" = "Bluespace anomaly core socket is open.",
+ "icon_state" = "phazon24"
+ )
+ )
+
+/datum/component/construction/mecha/phazon/custom_action(obj/item/I, mob/living/user, diff)
+ if(!..())
+ return FALSE
+
+ //TODO: better messages.
+ switch(index)
+ if(1)
+ user.visible_message("[user] connects [parent] hydraulic systems.", "You connect [parent] hydraulic systems.")
+ if(2)
+ if(diff==FORWARD)
+ user.visible_message("[user] activates [parent] hydraulic systems.", "You activate [parent] hydraulic systems.")
+ else
+ user.visible_message("[user] disconnects [parent] hydraulic systems.", "You disconnect [parent] hydraulic systems.")
+ if(3)
+ if(diff==FORWARD)
+ user.visible_message("[user] adds the wiring to [parent].", "You add the wiring to [parent].")
+ else
+ user.visible_message("[user] deactivates [parent] hydraulic systems.", "You deactivate [parent] hydraulic systems.")
+ if(4)
+ if(diff==FORWARD)
+ user.visible_message("[user] adjusts the wiring of [parent].", "You adjust the wiring of [parent].")
+ else
+ user.visible_message("[user] removes the wiring from [parent].", "You remove the wiring from [parent].")
+ if(5)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ else
+ user.visible_message("[user] disconnects the wiring of [parent].", "You disconnect the wiring of [parent].")
+ if(6)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the mainboard.", "You secure the mainboard.")
+ else
+ user.visible_message("[user] removes the central control module from [parent].", "You remove the central computer mainboard from [parent].")
+ if(7)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ else
+ user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.")
+ if(8)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.")
+ else
+ user.visible_message("[user] removes the peripherals control module from [parent].", "You remove the peripherals control module from [parent].")
+ if(9)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ else
+ user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.")
+ if(10)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the weapon control module.", "You secure the weapon control module.")
+ else
+ user.visible_message("[user] removes the weapon control module from [parent].", "You remove the weapon control module from [parent].")
+ if(11)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs [I] to [parent].", "You install [I] to [parent].")
+ else
+ user.visible_message("[user] unfastens the weapon control module.", "You unfasten the weapon control module.")
+ if(12)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the scanner module.", "You secure the scanner module.")
+ else
+ user.visible_message("[user] removes the scanner module from [parent].", "You remove the scanner module from [parent].")
+ if(13)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs [I] to [parent].", "You install [I] to [parent].")
+ else
+ user.visible_message("[user] unfastens the scanner module.", "You unfasten the scanner module.")
+ if(14)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the capacitor.", "You secure the capacitor.")
+ else
+ user.visible_message("[user] removes the capacitor from [parent].", "You remove the capacitor from [parent].")
+ if(15)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs [I].", "You install [I].")
+ else
+ user.visible_message("[user] unsecures the capacitor from [parent].", "You unsecure the capacitor from [parent].")
+ if(16)
+ if(diff==FORWARD)
+ user.visible_message("[user] connects the bluespace crystal.", "You connect the bluespace crystal.")
+ else
+ user.visible_message("[user] removes the bluespace crystal from [parent].", "You remove the bluespace crystal from [parent].")
+ if(17)
+ if(diff==FORWARD)
+ user.visible_message("[user] engages the bluespace crystal.", "You engage the bluespace crystal.")
+ else
+ user.visible_message("[user] disconnects the bluespace crystal from [parent].", "You disconnect the bluespace crystal from [parent].")
+ if(18)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ else
+ user.visible_message("[user] disengages the bluespace crystal.", "You disengage the bluespace crystal.")
+ if(19)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the power cell.", "You secure the power cell.")
+ else
+ user.visible_message("[user] pries the power cell from [parent].", "You pry the power cell from [parent].")
+ if(20)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs the phase armor layer to [parent].", "You install the phase armor layer to [parent].")
+ else
+ user.visible_message("[user] unfastens the power cell.", "You unfasten the power cell.")
+ if(21)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the phase armor layer.", "You secure the phase armor layer.")
+ else
+ user.visible_message("[user] pries the phase armor layer from [parent].", "You pry the phase armor layer from [parent].")
+ if(22)
+ if(diff==FORWARD)
+ user.visible_message("[user] welds the phase armor layer to [parent].", "You weld the phase armor layer to [parent].")
+ else
+ user.visible_message("[user] unfastens the phase armor layer.", "You unfasten the phase armor layer.")
+ if(23)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs [I] to [parent].", "You install [I] to [parent].")
+ else
+ user.visible_message("[user] cuts phase armor layer from [parent].", "You cut the phase armor layer from [parent].")
+ if(24)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures Phazon Armor Plates.", "You secure Phazon Armor Plates.")
+ else
+ user.visible_message("[user] pries Phazon Armor Plates from [parent].", "You pry Phazon Armor Plates from [parent].")
+ if(25)
+ if(diff==FORWARD)
+ user.visible_message("[user] welds Phazon Armor Plates to [parent].", "You weld Phazon Armor Plates to [parent].")
+ else
+ user.visible_message("[user] unfastens Phazon Armor Plates.", "You unfasten Phazon Armor Plates.")
+ if(26)
+ if(diff==FORWARD)
+ user.visible_message("[user] carefully inserts the bluespace anomaly core into [parent] and secures it.",
+ "You slowly place the bluespace anomaly core into its socket and close its chamber.")
+ return TRUE
+
+//ODYSSEUS
+
+/datum/component/construction/unordered/mecha_chassis/odysseus
+ result = /datum/component/construction/mecha/odysseus
+ steps = list(
+ /obj/item/mecha_parts/part/odysseus_torso,
+ /obj/item/mecha_parts/part/odysseus_head,
+ /obj/item/mecha_parts/part/odysseus_left_arm,
+ /obj/item/mecha_parts/part/odysseus_right_arm,
+ /obj/item/mecha_parts/part/odysseus_left_leg,
+ /obj/item/mecha_parts/part/odysseus_right_leg
+ )
+
+/datum/component/construction/mecha/odysseus
+ result = /obj/vehicle/sealed/mecha/medical/odysseus
+ base_icon = "odysseus"
+
+ circuit_control = /obj/item/circuitboard/mecha/odysseus/main
+ circuit_periph = /obj/item/circuitboard/mecha/odysseus/peripherals
+
+ inner_plating = /obj/item/stack/sheet/metal
+ inner_plating_amount = 5
+
+ outer_plating = /obj/item/stack/sheet/plasteel
+ outer_plating_amount = 5
+
+/datum/component/construction/mecha/odysseus/custom_action(obj/item/I, mob/living/user, diff)
+ if(!..())
+ return FALSE
+
+ //TODO: better messages.
+ switch(index)
+ if(1)
+ user.visible_message("[user] connects [parent] hydraulic systems.", "You connect [parent] hydraulic systems.")
+ if(2)
+ if(diff==FORWARD)
+ user.visible_message("[user] activates [parent] hydraulic systems.", "You activate [parent] hydraulic systems.")
+ else
+ user.visible_message("[user] disconnects [parent] hydraulic systems.", "You disconnect [parent] hydraulic systems.")
+ if(3)
+ if(diff==FORWARD)
+ user.visible_message("[user] adds the wiring to [parent].", "You add the wiring to [parent].")
+ else
+ user.visible_message("[user] deactivates [parent] hydraulic systems.", "You deactivate [parent] hydraulic systems.")
+ if(4)
+ if(diff==FORWARD)
+ user.visible_message("[user] adjusts the wiring of [parent].", "You adjust the wiring of [parent].")
+ else
+ user.visible_message("[user] removes the wiring from [parent].", "You remove the wiring from [parent].")
+ if(5)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ else
+ user.visible_message("[user] disconnects the wiring of [parent].", "You disconnect the wiring of [parent].")
+ if(6)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the mainboard.", "You secure the mainboard.")
+ else
+ user.visible_message("[user] removes the central control module from [parent].", "You remove the central computer mainboard from [parent].")
+ if(7)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ else
+ user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.")
+ if(8)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.")
+ else
+ user.visible_message("[user] removes the peripherals control module from [parent].", "You remove the peripherals control module from [parent].")
+ if(9)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ else
+ user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.")
+ if(10)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the scanner module.", "You secure the scanner module.")
+ else
+ user.visible_message("[user] removes the scanner module from [parent].", "You remove the scanner module from [parent].")
+ if(11)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs [I] to [parent].", "You install [I] to [parent].")
+ else
+ user.visible_message("[user] unfastens the scanner module.", "You unfasten the scanner module.")
+ if(12)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the capacitor.", "You secure the capacitor.")
+ else
+ user.visible_message("[user] removes the capacitor from [parent].", "You remove the capacitor from [parent].")
+ if(13)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].")
+ else
+ user.visible_message("[user] unfastens the capacitor.", "You unfasten the capacitor.")
+ if(14)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the power cell.", "You secure the power cell.")
+ else
+ user.visible_message("[user] pries the power cell from [parent].", "You pry the power cell from [parent].")
+ if(15)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs the internal armor layer to [parent].", "You install the internal armor layer to [parent].")
+ else
+ user.visible_message("[user] unfastens the power cell.", "You unfasten the power cell.")
+ if(16)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the internal armor layer.", "You secure the internal armor layer.")
+ else
+ user.visible_message("[user] pries internal armor layer from [parent].", "You pry internal armor layer from [parent].")
+ if(17)
+ if(diff==FORWARD)
+ user.visible_message("[user] welds the internal armor layer to [parent].", "You weld the internal armor layer to [parent].")
+ else
+ user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.")
+ if(18)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs the external armor layer to [parent].", "You install the external reinforced armor layer to [parent].")
+ else
+ user.visible_message("[user] cuts the internal armor layer from [parent].", "You cut the internal armor layer from [parent].")
+ if(19)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the external armor layer.", "You secure the external reinforced armor layer.")
+ else
+ user.visible_message("[user] pries the external armor layer from [parent].", "You pry the external armor layer from [parent].")
+ if(20)
+ if(diff==FORWARD)
+ user.visible_message("[user] welds the external armor layer to [parent].", "You weld the external armor layer to [parent].")
+ else
+ user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.")
+ return TRUE
diff --git a/code/game/mecha/mecha_control_console.dm b/code/modules/vehicles/mecha/mecha_control_console.dm
similarity index 77%
rename from code/game/mecha/mecha_control_console.dm
rename to code/modules/vehicles/mecha/mecha_control_console.dm
index ab547f4ccd..38224fbbdd 100644
--- a/code/game/mecha/mecha_control_console.dm
+++ b/code/modules/vehicles/mecha/mecha_control_console.dm
@@ -16,29 +16,29 @@
var/list/data = list()
var/list/trackerlist = list()
- for(var/obj/mecha/MC in GLOB.mechas_list)
+ for(var/obj/vehicle/sealed/mecha/MC in GLOB.mechas_list)
trackerlist += MC.trackers
data["mechs"] = list()
for(var/obj/item/mecha_parts/mecha_tracking/MT in trackerlist)
if(!MT.chassis)
continue
- var/obj/mecha/M = MT.chassis
+ var/obj/vehicle/sealed/mecha/M = MT.chassis
var/list/mech_data = list(
name = M.name,
integrity = round((M.obj_integrity / M.max_integrity) * 100),
charge = M.cell ? round(M.cell.percent()) : null,
airtank = M.internal_tank ? M.return_pressure() : null,
- pilot = list(M.occupant),
+ pilot = M.return_drivers(),
location = get_area_name(M, TRUE),
active_equipment = M.selected,
emp_recharging = MT.recharging,
tracker_ref = REF(MT)
)
- if(istype(M, /obj/mecha/working/ripley))
- var/obj/mecha/working/ripley/RM = M
+ if(istype(M, /obj/vehicle/sealed/mecha/working/ripley))
+ var/obj/vehicle/sealed/mecha/working/ripley/RM = M
mech_data += list(
- cargo_space = round((LAZYLEN(RM.cargo) / RM.cargo_capacity) * 100)
+ cargo_space = round((RM.cargo.len / RM.cargo_capacity) * 100)
)
data["mechs"] += list(mech_data)
@@ -46,8 +46,7 @@
return data
/obj/machinery/computer/mecha/ui_act(action, params)
- . = ..()
- if(.)
+ if(..())
return
switch(action)
@@ -56,20 +55,20 @@
if(!istype(MT))
return
var/message = stripped_input(usr, "Input message", "Transmit message")
- var/obj/mecha/M = MT.chassis
+ var/obj/vehicle/sealed/mecha/M = MT.chassis
if(trim(message) && M)
- to_chat(M.occupant, message)
+ to_chat(M.occupants, message)
to_chat(usr, "Message sent.")
. = TRUE
if("shock")
var/obj/item/mecha_parts/mecha_tracking/MT = locate(params["tracker_ref"])
if(!istype(MT))
return
- var/obj/mecha/M = MT.chassis
+ var/obj/vehicle/sealed/mecha/M = MT.chassis
if(M)
MT.shock()
- log_game("[key_name(usr)] has activated remote EMP on exosuit [M], located at [loc_name(M)], which [M.occupant ? "has the occupants [M.occupant]." : "without a pilot."] ")
- message_admins("[key_name_admin(usr)][ADMIN_FLW(usr)] has activated remote EMP on exosuit [M][ADMIN_JMP(M)], which is currently [M.occupant ? "occupied by [M.occupant][ADMIN_FLW(M)]." : "without a pilot."] ")
+ log_game("[key_name(usr)] has activated remote EMP on exosuit [M], located at [loc_name(M)], which [M.occupants ? "has the occupants [M.occupants]." : "without a pilot."] ")
+ message_admins("[key_name_admin(usr)][ADMIN_FLW(usr)] has activated remote EMP on exosuit [M][ADMIN_JMP(M)], which is currently [M.occupants ? "occupied by [M.occupants][ADMIN_FLW(M)]." : "without a pilot."] ")
. = TRUE
/obj/item/mecha_parts/mecha_tracking
@@ -83,11 +82,11 @@
/// Cooldown variable for EMP pulsing
var/recharging = FALSE
/// The Mecha that this tracking beacon is attached to
- var/obj/mecha/chassis
+ var/obj/vehicle/sealed/mecha/chassis
/**
- * Returns a html formatted string describing attached mech status
- */
+ * Returns a html formatted string describing attached mech status
+ */
/obj/item/mecha_parts/mecha_tracking/proc/get_mecha_info()
if(!chassis)
return FALSE
@@ -97,12 +96,12 @@
Integrity: [round((chassis.obj_integrity/chassis.max_integrity * 100), 0.01)]%
Cell Charge: [isnull(cell_charge) ? "Not Found":"[chassis.cell.percent()]%"]
Airtank: [chassis.internal_tank ? "[round(chassis.return_pressure(), 0.01)]" : "Not Equipped"] kPa
- Pilot: [chassis.occupant || "None"]
+ Pilot: [chassis.return_drivers() || "None"]
Location: [get_area_name(chassis, TRUE) || "Unknown"]
Active Equipment: [chassis.selected || "None"]"}
- if(istype(chassis, /obj/mecha/working/ripley))
- var/obj/mecha/working/ripley/RM = chassis
- answer += " Used Cargo Space: [round((LAZYLEN(RM.cargo) / RM.cargo_capacity * 100), 0.01)]%"
+ if(istype(chassis, /obj/vehicle/sealed/mecha/working/ripley))
+ var/obj/vehicle/sealed/mecha/working/ripley/RM = chassis
+ answer += " Used Cargo Space: [round((RM.cargo.len / RM.cargo_capacity * 100), 0.01)]%"
return answer
@@ -118,7 +117,7 @@
chassis = null
return ..()
-/obj/item/mecha_parts/mecha_tracking/try_attach_part(mob/user, obj/mecha/M)
+/obj/item/mecha_parts/mecha_tracking/try_attach_part(mob/user, obj/vehicle/sealed/mecha/M)
if(!..())
return
M.trackers += src
@@ -126,8 +125,8 @@
chassis = M
/**
- * Attempts to EMP mech that the tracker is attached to, if there is one and tracker is not on cooldown
- */
+ * Attempts to EMP mech that the tracker is attached to, if there is one and tracker is not on cooldown
+ */
/obj/item/mecha_parts/mecha_tracking/proc/shock()
if(recharging)
return
@@ -137,8 +136,8 @@
recharging = TRUE
/**
- * Resets recharge variable, allowing tracker to be EMP pulsed again
- */
+ * Resets recharge variable, allowing tracker to be EMP pulsed again
+ */
/obj/item/mecha_parts/mecha_tracking/proc/recharge()
recharging = FALSE
diff --git a/code/modules/vehicles/mecha/mecha_defense.dm b/code/modules/vehicles/mecha/mecha_defense.dm
new file mode 100644
index 0000000000..78b4c7b441
--- /dev/null
+++ b/code/modules/vehicles/mecha/mecha_defense.dm
@@ -0,0 +1,390 @@
+/obj/vehicle/sealed/mecha/proc/get_armour_facing(relative_dir)
+ switch(relative_dir)
+ if(180) // BACKSTAB!
+ return facing_modifiers[MECHA_BACK_ARMOUR]
+ if(0, 45) // direct or 45 degrees off
+ return facing_modifiers[MECHA_FRONT_ARMOUR]
+ return facing_modifiers[MECHA_SIDE_ARMOUR] //if its not a front hit or back hit then assume its from the side
+
+/obj/vehicle/sealed/mecha/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir)
+ . = ..()
+ if(. && obj_integrity > 0)
+ spark_system.start()
+ switch(damage_flag)
+ if(FIRE)
+ check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL))
+ if(MELEE)
+ check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST))
+ else
+ check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST,MECHA_INT_SHORT_CIRCUIT))
+ if(. >= 5 || prob(33))
+ to_chat(occupants, "[icon2html(src, occupants)]Taking damage!")
+ log_message("Took [damage_amount] points of damage. Damage type: [damage_type]", LOG_MECHA)
+
+/obj/vehicle/sealed/mecha/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir)
+ . = ..()
+ if(!damage_amount)
+ return 0
+ var/booster_deflection_modifier = 1
+ var/booster_damage_modifier = 1
+ if(damage_flag == BULLET || damage_flag == LASER || damage_flag == ENERGY)
+ for(var/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/B in equipment)
+ if(B.projectile_react())
+ booster_deflection_modifier = B.deflect_coeff
+ booster_damage_modifier = B.damage_coeff
+ break
+ else if(damage_flag == MELEE)
+ for(var/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/B in equipment)
+ if(B.attack_react())
+ booster_deflection_modifier *= B.deflect_coeff
+ booster_damage_modifier *= B.damage_coeff
+ break
+
+ if(attack_dir)
+ var/facing_modifier = get_armour_facing(abs(dir2angle(dir) - dir2angle(attack_dir)))
+ booster_damage_modifier /= facing_modifier
+ booster_deflection_modifier *= facing_modifier
+ if(prob(deflect_chance * booster_deflection_modifier))
+ visible_message("[src]'s armour deflects the attack!")
+ log_message("Armor saved.", LOG_MECHA)
+ return 0
+ if(.)
+ . *= booster_damage_modifier
+
+/obj/vehicle/sealed/mecha/attack_hand(mob/living/user)
+ . = ..()
+ if(.)
+ return
+ user.do_attack_animation(src, ATTACK_EFFECT_PUNCH)
+ playsound(loc, 'sound/weapons/tap.ogg', 40, TRUE, -1)
+ user.visible_message("[user] hits [name]. Nothing happens.", null, null, COMBAT_MESSAGE_RANGE)
+ log_message("Attack by hand/paw. Attacker - [user].", LOG_MECHA, color="red")
+
+/obj/vehicle/sealed/mecha/attack_paw(mob/user as mob)
+ return attack_hand(user)
+
+/obj/vehicle/sealed/mecha/attack_alien(mob/living/user)
+ log_message("Attack by alien. Attacker - [user].", LOG_MECHA, color="red")
+ playsound(src.loc, 'sound/weapons/slash.ogg', 100, TRUE)
+ attack_generic(user, 15, BRUTE, MELEE, 0)
+
+/obj/vehicle/sealed/mecha/attack_animal(mob/living/simple_animal/user)
+ log_message("Attack by simple animal. Attacker - [user].", LOG_MECHA, color="red")
+ if(!user.melee_damage_upper && !user.obj_damage)
+ user.emote("custom", message = "[user.friendly_verb_continuous] [src].")
+ return 0
+ else
+ var/play_soundeffect = 1
+ if(user.environment_smash)
+ play_soundeffect = 0
+ playsound(src, 'sound/effects/bang.ogg', 50, TRUE)
+ var/animal_damage = rand(user.melee_damage_lower,user.melee_damage_upper)
+ if(user.obj_damage)
+ animal_damage = user.obj_damage
+ animal_damage = min(animal_damage, 20*user.environment_smash)
+ log_combat(user, src, "attacked")
+ attack_generic(user, animal_damage, user.melee_damage_type, MELEE, play_soundeffect)
+ return 1
+
+
+/obj/vehicle/sealed/mecha/hulk_damage()
+ return 15
+
+/obj/vehicle/sealed/mecha/attack_hulk(mob/living/carbon/human/user)
+ . = ..()
+ if(.)
+ log_message("Attack by hulk. Attacker - [user].", LOG_MECHA, color="red")
+ log_combat(user, src, "punched", "hulk powers")
+
+/obj/vehicle/sealed/mecha/blob_act(obj/structure/blob/B)
+ log_message("Attack by blob. Attacker - [B].", LOG_MECHA, color="red")
+ take_damage(30, BRUTE, MELEE, 0, get_dir(src, B))
+
+/obj/vehicle/sealed/mecha/attack_tk()
+ return
+
+/obj/vehicle/sealed/mecha/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum) //wrapper
+ log_message("Hit by [AM].", LOG_MECHA, color="red")
+ . = ..()
+
+/obj/vehicle/sealed/mecha/bullet_act(obj/item/projectile/Proj) //wrapper
+ if(!enclosed && LAZYLEN(occupants) && !(mecha_flags & SILICON_PILOT) && !Proj.force_hit && (Proj.def_zone == BODY_ZONE_HEAD || Proj.def_zone == BODY_ZONE_CHEST)) //allows bullets to hit the pilot of open-canopy mechs
+ for(var/m in occupants)
+ var/mob/living/hitmob = m
+ hitmob.bullet_act(Proj) //If the sides are open, the occupant can be hit
+ return BULLET_ACT_HIT
+ log_message("Hit by projectile. Type: [Proj.name]([Proj.flag]).", LOG_MECHA, color="red")
+ . = ..()
+
+/obj/vehicle/sealed/mecha/ex_act(severity, target)
+ log_message("Affected by explosion of severity: [severity].", LOG_MECHA, color="red")
+ if(prob(deflect_chance))
+ severity++
+ log_message("Armor saved, changing severity to [severity]", LOG_MECHA)
+ . = ..()
+
+
+/obj/vehicle/sealed/mecha/contents_explosion(severity, target, origin)
+ severity++
+ for(var/X in equipment)
+ var/obj/item/mecha_parts/mecha_equipment/ME = X
+ ME.ex_act(severity, target, origin)
+ for(var/Y in trackers)
+ var/obj/item/mecha_parts/mecha_tracking/MT = Y
+ MT.ex_act(severity, target, origin)
+ for(var/Z in occupants)
+ var/mob/living/occupant = Z
+ occupant.ex_act(severity, target, origin)
+
+/obj/vehicle/sealed/mecha/handle_atom_del(atom/A)
+ if(A in occupants)
+ LAZYREMOVE(occupants, A)
+ icon_state = initial(icon_state)+"-open"
+ setDir(dir_in)
+
+/obj/vehicle/sealed/mecha/emp_act(severity)
+ . = ..()
+ if (. & EMP_PROTECT_SELF)
+ return
+ if(get_charge())
+ use_power((cell.charge/3)*(severity*0.005))
+ take_damage(severity/3, BURN, ENERGY, 1)
+ log_message("EMP detected", LOG_MECHA, color="red")
+
+ if(istype(src, /obj/vehicle/sealed/mecha/combat))
+ mouse_pointer = 'icons/effects/mouse_pointers/mecha_mouse-disable.dmi'
+ for(var/occus in occupants)
+ var/mob/living/occupant = occus
+ occupant.update_mouse_pointer()
+ if(!equipment_disabled && occupants) //prevent spamming this message with back-to-back EMPs
+ to_chat(occupants, "Error -- Connection to equipment control unit has been lost.")
+ addtimer(CALLBACK(src, /obj/vehicle/sealed/mecha/proc/restore_equipment), 3 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE)
+ equipment_disabled = 1
+
+/obj/vehicle/sealed/mecha/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
+ if(exposed_temperature>max_temperature)
+ log_message("Exposed to dangerous temperature.", LOG_MECHA, color="red")
+ take_damage(5, BURN, 0, 1)
+
+/obj/vehicle/sealed/mecha/attackby(obj/item/W, mob/user, params)
+
+ if(istype(W, /obj/item/mmi))
+ if(mmi_move_inside(W,user))
+ to_chat(user, "[src]-[W] interface initialized successfully.")
+ else
+ to_chat(user, "[src]-[W] interface initialization failed.")
+ return
+
+ if(istype(W, /obj/item/mecha_ammo))
+ ammo_resupply(W, user)
+ return
+
+ if(W.GetID())
+ if((mecha_flags & ADDING_ACCESS_POSSIBLE) || (mecha_flags & ADDING_MAINT_ACCESS_POSSIBLE))
+ if(internals_access_allowed(user))
+ var/obj/item/card/id/id_card
+ if(istype(W, /obj/item/card/id))
+ id_card = W
+ else
+ var/obj/item/pda/pda = W
+ id_card = pda.id
+ output_maintenance_dialog(id_card, user)
+ return
+ to_chat(user, "Invalid ID: Access denied.")
+ return
+ to_chat(user, "Maintenance protocols disabled by operator.")
+ return
+
+ if(istype(W, /obj/item/stock_parts/cell))
+ if(construction_state == MECHA_OPEN_HATCH)
+ if(!cell)
+ if(!user.transferItemToLoc(W, src, silent = FALSE))
+ return
+ var/obj/item/stock_parts/cell/C = W
+ to_chat(user, "You install the power cell.")
+ playsound(src, 'sound/items/screwdriver2.ogg', 50, FALSE)
+ cell = C
+ log_message("Power cell installed", LOG_MECHA)
+ else
+ to_chat(user, "There's already a power cell installed!")
+ return
+
+ if(istype(W, /obj/item/stock_parts/scanning_module))
+ if(construction_state == MECHA_OPEN_HATCH)
+ if(!scanmod)
+ if(!user.transferItemToLoc(W, src))
+ return
+ to_chat(user, "You install the scanning module.")
+ playsound(src, 'sound/items/screwdriver2.ogg', 50, FALSE)
+ scanmod = W
+ log_message("[W] installed", LOG_MECHA)
+ update_part_values()
+ else
+ to_chat(user, "There's already a scanning module installed!")
+ return
+
+ if(istype(W, /obj/item/stock_parts/capacitor))
+ if(construction_state == MECHA_OPEN_HATCH)
+ if(!capacitor)
+ if(!user.transferItemToLoc(W, src))
+ return
+ to_chat(user, "You install the capacitor.")
+ playsound(src, 'sound/items/screwdriver2.ogg', 50, FALSE)
+ capacitor = W
+ log_message("[W] installed", LOG_MECHA)
+ update_part_values()
+ else
+ to_chat(user, "There's already a capacitor installed!")
+ return
+
+ if(istype(W, /obj/item/stack/cable_coil))
+ if(construction_state == MECHA_OPEN_HATCH && (internal_damage & MECHA_INT_SHORT_CIRCUIT))
+ var/obj/item/stack/cable_coil/CC = W
+ if(CC.use(2))
+ clearInternalDamage(MECHA_INT_SHORT_CIRCUIT)
+ to_chat(user, "You replace the fused wires.")
+ else
+ to_chat(user, "You need two lengths of cable to fix this mech!")
+ return
+
+ if(istype(W, /obj/item/mecha_parts))
+ var/obj/item/mecha_parts/P = W
+ P.try_attach_part(user, src)
+ return
+ if(istype(W, /obj/item/analyzer))
+ if(construction_state)
+ var/datum/gas_mixture/GasNux = internal_tank.return_air()
+ atmosanalyzer_scan(GasNux,user,src,TRUE)
+ else
+ atmosanalyzer_scan(cabin_air,user,src,TRUE)
+ return
+ log_message("Attacked by [W]. Attacker - [user]", LOG_MECHA)
+ return ..()
+
+/obj/vehicle/sealed/mecha/wrench_act(mob/living/user, obj/item/I)
+ ..()
+ . = TRUE
+ if(construction_state == MECHA_SECURE_BOLTS)
+ construction_state = MECHA_LOOSE_BOLTS
+ to_chat(user, "You undo the securing bolts.")
+ return
+ if(construction_state == MECHA_LOOSE_BOLTS)
+ construction_state = MECHA_SECURE_BOLTS
+ to_chat(user, "You tighten the securing bolts.")
+
+/obj/vehicle/sealed/mecha/crowbar_act(mob/living/user, obj/item/I)
+ ..()
+ . = TRUE
+ if(construction_state == MECHA_LOOSE_BOLTS)
+ construction_state = MECHA_OPEN_HATCH
+ to_chat(user, "You open the hatch to the power unit.")
+ return
+ if(construction_state == MECHA_OPEN_HATCH)
+ construction_state = MECHA_LOOSE_BOLTS
+ to_chat(user, "You close the hatch to the power unit.")
+
+/obj/vehicle/sealed/mecha/screwdriver_act(mob/living/user, obj/item/I)
+ ..()
+ . = TRUE
+ if(internal_damage & MECHA_INT_TEMP_CONTROL)
+ clearInternalDamage(MECHA_INT_TEMP_CONTROL)
+ to_chat(user, "You repair the damaged temperature controller.")
+ return
+
+/obj/vehicle/sealed/mecha/welder_act(mob/living/user, obj/item/W)
+ . = ..()
+ if(user.a_intent == INTENT_HARM)
+ return
+ . = TRUE
+ if(internal_damage & MECHA_INT_TANK_BREACH)
+ if(!W.use_tool(src, user, 0, volume=50, amount=1))
+ return
+ clearInternalDamage(MECHA_INT_TANK_BREACH)
+ to_chat(user, "You repair the damaged gas tank.")
+ return
+ if(obj_integrity < max_integrity)
+ if(!W.use_tool(src, user, 0, volume=50, amount=1))
+ return
+ user.visible_message("[user] repairs some damage to [name].", "You repair some damage to [src].")
+ obj_integrity += min(10, max_integrity-obj_integrity)
+ if(obj_integrity == max_integrity)
+ to_chat(user, "It looks to be fully repaired now.")
+ return
+ to_chat(user, "The [name] is at full integrity!")
+
+/obj/vehicle/sealed/mecha/proc/mech_toxin_damage(mob/living/target)
+ playsound(src, 'sound/effects/spray2.ogg', 50, TRUE)
+ if(target.reagents)
+ if(target.reagents.get_reagent_amount(/datum/reagent/cryptobiolin) + force < force*2)
+ target.reagents.add_reagent(/datum/reagent/cryptobiolin, force/2)
+ if(target.reagents.get_reagent_amount(/datum/reagent/toxin) + force < force*2)
+ target.reagents.add_reagent(/datum/reagent/toxin, force/2.5)
+
+
+/obj/vehicle/sealed/mecha/mech_melee_attack(obj/vehicle/sealed/mecha/M, mob/user)
+ if(!has_charge(melee_energy_drain))
+ return NONE
+ use_power(melee_energy_drain)
+ if(M.damtype == BRUTE || M.damtype == BURN)
+ log_combat(user, src, "attacked", M, "(INTENT: [uppertext(user.a_intent)]) (DAMTYPE: [uppertext(M.damtype)])")
+ . = ..()
+
+/obj/vehicle/sealed/mecha/proc/full_repair(charge_cell)
+ obj_integrity = max_integrity
+ if(cell && charge_cell)
+ cell.charge = cell.maxcharge
+ if(internal_damage & MECHA_INT_FIRE)
+ clearInternalDamage(MECHA_INT_FIRE)
+ if(internal_damage & MECHA_INT_TEMP_CONTROL)
+ clearInternalDamage(MECHA_INT_TEMP_CONTROL)
+ if(internal_damage & MECHA_INT_SHORT_CIRCUIT)
+ clearInternalDamage(MECHA_INT_SHORT_CIRCUIT)
+ if(internal_damage & MECHA_INT_TANK_BREACH)
+ clearInternalDamage(MECHA_INT_TANK_BREACH)
+ if(internal_damage & MECHA_INT_CONTROL_LOST)
+ clearInternalDamage(MECHA_INT_CONTROL_LOST)
+
+/obj/vehicle/sealed/mecha/narsie_act()
+ emp_act(80)
+
+/obj/vehicle/sealed/mecha/do_attack_animation(atom/A, visual_effect_icon, obj/item/used_item, no_effect)
+ if(!no_effect)
+ if(selected)
+ used_item = selected
+ else if(!visual_effect_icon)
+ visual_effect_icon = ATTACK_EFFECT_SMASH
+ if(damtype == BURN)
+ visual_effect_icon = ATTACK_EFFECT_MECHFIRE
+ else if(damtype == TOX)
+ visual_effect_icon = ATTACK_EFFECT_MECHTOXIN
+ ..()
+
+/obj/vehicle/sealed/mecha/obj_destruction()
+ if(wreckage)
+ var/mob/living/silicon/ai/AI
+ for(var/crew in occupants)
+ if(isAI(crew))
+ if(AI)
+ var/mob/living/silicon/ai/unlucky_ais = crew
+ unlucky_ais.gib()
+ continue
+ AI = crew
+ var/obj/structure/mecha_wreckage/WR = new wreckage(loc, AI)
+ for(var/obj/item/mecha_parts/mecha_equipment/E in equipment)
+ if(E.salvageable && prob(30))
+ WR.crowbar_salvage += E
+ E.detach(WR) //detaches from src into WR
+ E.equip_ready = 1
+ else
+ E.detach(loc)
+ qdel(E)
+ if(cell)
+ WR.crowbar_salvage += cell
+ cell.forceMove(WR)
+ cell.charge = rand(0, cell.charge)
+ cell = null
+ if(internal_tank)
+ WR.crowbar_salvage += internal_tank
+ internal_tank.forceMove(WR)
+ cell = null
+ . = ..()
diff --git a/code/game/mecha/mecha_parts.dm b/code/modules/vehicles/mecha/mecha_parts.dm
similarity index 94%
rename from code/game/mecha/mecha_parts.dm
rename to code/modules/vehicles/mecha/mecha_parts.dm
index 8a9e4e641f..a50c1414ae 100644
--- a/code/game/mecha/mecha_parts.dm
+++ b/code/modules/vehicles/mecha/mecha_parts.dm
@@ -9,20 +9,23 @@
w_class = WEIGHT_CLASS_GIGANTIC
flags_1 = CONDUCT_1
-/obj/item/mecha_parts/proc/try_attach_part(mob/user, obj/mecha/M) //For attaching parts to a finished mech
+/obj/item/mecha_parts/proc/try_attach_part(mob/user, obj/vehicle/sealed/mecha/M) //For attaching parts to a finished mech
if(!user.transferItemToLoc(src, M))
to_chat(user, "\The [src] is stuck to your hand, you cannot put it in \the [M]!")
return FALSE
user.visible_message("[user] attaches [src] to [M].", "You attach [src] to [M].")
return TRUE
-
+
+/obj/item/mecha_parts/part/try_attach_part(mob/user, obj/vehicle/sealed/mecha/M)
+ return
+
/obj/item/mecha_parts/chassis
name = "Mecha Chassis"
icon_state = "backbone"
interaction_flags_item = NONE //Don't pick us up!!
var/construct_type
-/obj/item/mecha_parts/chassis/Initialize()
+/obj/item/mecha_parts/chassis/Initialize(mapload)
. = ..()
if(construct_type)
AddComponent(construct_type)
@@ -58,6 +61,12 @@
desc = "A Ripley APLU right leg. Contains somewhat complex servodrives and balance maintaining systems."
icon_state = "ripley_r_leg"
+
+//Firefighter
+/obj/item/mecha_parts/chassis/firefighter
+ name = "\improper Firefighter chassis"
+ construct_type = /datum/component/construction/unordered/mecha_chassis/firefighter
+
///////// Odysseus
/obj/item/mecha_parts/chassis/odysseus
@@ -220,12 +229,6 @@
desc = "A set of armor plates for the Durand. Built heavy to resist an incredible amount of brute force."
icon_state = "durand_armor"
-////////// Firefighter
-
-/obj/item/mecha_parts/chassis/firefighter
- name = "\improper Firefighter chassis"
- construct_type = /datum/component/construction/unordered/mecha_chassis/firefighter
-
////////// HONK
@@ -270,6 +273,11 @@
name = "\improper Phazon chassis"
construct_type = /datum/component/construction/unordered/mecha_chassis/phazon
+/obj/item/mecha_parts/chassis/phazon/attackby(obj/item/I, mob/user, params)
+ . = ..()
+ if(istype(I, /obj/item/assembly/signaler/anomaly) && !istype(I, /obj/item/assembly/signaler/anomaly/bluespace))
+ to_chat(user, "The anomaly core socket only accepts bluespace anomaly cores!")
+
/obj/item/mecha_parts/part/phazon_torso
name="\improper Phazon torso"
desc="A Phazon torso part. The socket for the bluespace core that powers the exosuit's unique phase drives is located in the middle."
@@ -312,7 +320,6 @@
name = "exosuit circuit board"
icon = 'icons/obj/module.dmi'
icon_state = "std_mod"
- item_state = "electronic"
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
flags_1 = CONDUCT_1
@@ -385,3 +392,11 @@
/obj/item/circuitboard/mecha/phazon/main
name = "Phazon Central Control module (Exosuit Board)"
+
+/obj/item/circuitboard/mecha/clarke/peripherals
+ name = "Clarke Peripherals Control module (Exosuit Board)"
+ icon_state = "mcontroller"
+
+/obj/item/circuitboard/mecha/clarke/main
+ name = "Clarke Central Control module (Exosuit Board)"
+ icon_state = "mainboard"
diff --git a/code/modules/vehicles/mecha/mecha_topic.dm b/code/modules/vehicles/mecha/mecha_topic.dm
new file mode 100644
index 0000000000..eb7dcd01db
--- /dev/null
+++ b/code/modules/vehicles/mecha/mecha_topic.dm
@@ -0,0 +1,421 @@
+
+////////////////////////////////////
+///// Rendering stats window ///////
+////////////////////////////////////
+
+/obj/vehicle/sealed/mecha/proc/get_stats_html(mob/user)
+ . = {"
+
+
+ [name] data
+
+
+
+
+
+ [get_stats_part(user)]
+
+
+ [get_equipment_list()]
+
+
+
+ [get_commands()]
+
+
+
+ "}
+
+///Returns the status of the mech.
+/obj/vehicle/sealed/mecha/proc/get_stats_part(mob/user)
+ var/integrity = obj_integrity/max_integrity*100
+ var/cell_charge = get_charge()
+ var/datum/gas_mixture/int_tank_air = 0
+ var/tank_pressure = 0
+ var/tank_temperature = 0
+ var/cabin_pressure = 0
+ if (internal_tank)
+ int_tank_air = internal_tank.return_air()
+ tank_pressure = internal_tank ? round(int_tank_air.return_pressure(),0.01) : "None"
+ tank_temperature = internal_tank ? int_tank_air.return_temperature() : "Unknown"
+ cabin_pressure = round(return_pressure(),0.01)
+ . = {"[report_internal_damage()]
+ [integrity<30?"DAMAGE LEVEL CRITICAL ":null]
+ Integrity: [integrity]%
+ Power cell charge: [isnull(cell_charge)?"No power cell installed":"[cell.percent()]%"]
+ Air source: [internal_tank?"[use_internal_tank?"Internal Airtank":"Environment"]":"Environment"]
+ Airtank pressure: [internal_tank?"[tank_pressure]kPa":"N/A"]
+ Airtank temperature: [internal_tank?"[tank_temperature]°K|[tank_temperature - T0C]°C":"N/A"]
+ Cabin pressure: [internal_tank?"[cabin_pressure>WARNING_HIGH_PRESSURE ? "[cabin_pressure]": cabin_pressure]kPa":"N/A"]
+ Cabin temperature: [internal_tank?"[return_temperature()]°K|[return_temperature() - T0C]°C":"N/A"]
+ [dna_lock?"DNA-locked: [dna_lock] \[Reset\] ":""] "}
+ . += "[get_actions(user)] "
+
+///Returns HTML for mech actions. Ideally, this proc would be empty for the base mecha. Segmented for easy refactoring.
+/obj/vehicle/sealed/mecha/proc/get_actions(mob/user)
+ . = ""
+ . += "[LAZYACCESSASSOC(occupant_actions, user, /datum/action/vehicle/sealed/mecha/mech_defense_mode) ? "Defense Mode: [defense_mode ? "Enabled" : "Disabled"] " : ""]"
+ . += "[LAZYACCESSASSOC(occupant_actions, user, /datum/action/vehicle/sealed/mecha/mech_overload_mode) ? "Leg Actuators Overload: [leg_overload_mode ? "Enabled" : "Disabled"] " : ""]"
+ . += "[LAZYACCESSASSOC(occupant_actions, user, /datum/action/vehicle/sealed/mecha/mech_smoke) ? "Smoke Charges remaining: [smoke_charges] " : ""]"
+ . += "[LAZYACCESSASSOC(occupant_actions, user, /datum/action/vehicle/sealed/mecha/mech_zoom) ? "Zoom: [zoom_mode ? "Enabled" : "Disabled"] " : ""]"
+ . += "[LAZYACCESSASSOC(occupant_actions, user, /datum/action/vehicle/sealed/mecha/mech_switch_damtype) ? "Damtype: [damtype] " : ""]"
+ . += "[LAZYACCESSASSOC(occupant_actions, user, /datum/action/vehicle/sealed/mecha/mech_toggle_phasing) ? "Phase Modulator: [phasing ? "Enabled" : "Disabled"] " : ""]"
+
+///HTML for internal damage.
+/obj/vehicle/sealed/mecha/proc/report_internal_damage()
+ . = ""
+ var/list/dam_reports = list(
+ "[MECHA_INT_FIRE]" = "INTERNAL FIRE",
+ "[MECHA_INT_TEMP_CONTROL]" = "LIFE SUPPORT SYSTEM MALFUNCTION",
+ "[MECHA_INT_TANK_BREACH]" = "GAS TANK BREACH",
+ "[MECHA_INT_CONTROL_LOST]" = "COORDINATION SYSTEM CALIBRATION FAILURE - Recalibrate",
+ "[MECHA_INT_SHORT_CIRCUIT]" = "SHORT CIRCUIT"
+ )
+ for(var/tflag in dam_reports)
+ var/intdamflag = text2num(tflag)
+ if(internal_damage & intdamflag)
+ . += dam_reports[tflag]
+ . += " "
+ if(return_pressure() > WARNING_HIGH_PRESSURE)
+ . += "DANGEROUSLY HIGH CABIN PRESSURE "
+
+///HTML for list of equipment.
+/obj/vehicle/sealed/mecha/proc/get_equipment_list() //outputs mecha equipment list in html
+ if(!LAZYLEN(equipment))
+ return
+ . = "Equipment:"
+ for(var/obj/item/mecha_parts/mecha_equipment/MT in equipment)
+ . += " [MT.get_equip_info()] "
+ . += " "
+
+///HTML for commands.
+/obj/vehicle/sealed/mecha/proc/get_commands()
+ . = {"
+
+ "}
+
+
+/obj/vehicle/sealed/mecha/proc/get_equipment_menu() //outputs mecha html equipment menu
+ . = {"
+
+
+ "}
+ for(var/e in equipment)
+ var/obj/item/mecha_parts/mecha_equipment/equipment = e
+ . += "[equipment.name] [equipment.detachable ? " Detach" : "\[Non-removable\] "]"
+ . += {" Available equipment slots: [max_equip-LAZYLEN(equipment)]
+
+ "}
+
+/obj/vehicle/sealed/mecha/proc/output_access_dialog(obj/item/card/id/id_card, mob/user)
+ if(!id_card || !user)
+ return
+ . = {"
+
+
+
+
+
+ Following keycodes are present in this system:"}
+ for(var/a in operation_req_access)
+ . += "[get_access_desc(a)] - Delete "
+ . += "
Following keycodes were detected on portable device:"
+ for(var/a in id_card.access)
+ if(a in operation_req_access)
+ continue
+ var/a_name = get_access_desc(a)
+ if(!a_name)
+ continue //there's some strange access without a name
+ . += "[a_name] - Add "
+ . +={" Lock ID panel
+ (Warning! The ID upload panel can be unlocked only through Exosuit Interface.)
+
+ "}
+ user << browse(., "window=exosuit_add_access")
+ onclose(user, "exosuit_add_access")
+
+
+/obj/vehicle/sealed/mecha/proc/output_maintenance_dialog(obj/item/card/id/id_card,mob/user)
+ if(!id_card || !user)
+ return
+ . = {"
+
+
+
+
+
+ [(mecha_flags & ADDING_ACCESS_POSSIBLE)?"Edit operation keycodes":null]
+ [(mecha_flags & ADDING_MAINT_ACCESS_POSSIBLE)?"[(construction_state > MECHA_LOCKED) ? "Terminate" : "Initiate"] maintenance protocol":null]
+ [(construction_state == MECHA_OPEN_HATCH) ?"--------------------":null]
+ [(construction_state == MECHA_OPEN_HATCH) ?"[cell?"Drop power cell":"No cell installed"]":null]
+ [(construction_state == MECHA_OPEN_HATCH) ?"[scanmod?"Drop scanning module":"No scanning module installed"]":null]
+ [(construction_state == MECHA_OPEN_HATCH) ?"[capacitor?"Drop capacitor":"No capacitor installed"]":null]
+ [(construction_state == MECHA_OPEN_HATCH) ?"--------------------":null]
+ [(construction_state > MECHA_LOCKED) ?"Set Cabin Air Pressure":null]
+
+ "}
+ user << browse(., "window=exosuit_maint_console")
+ onclose(user, "exosuit_maint_console")
+
+
+
+
+/////////////////
+///// Topic /////
+/////////////////
+
+/obj/vehicle/sealed/mecha/Topic(href, href_list)
+ ..()
+
+ if(!usr)
+ return
+
+ if(href_list["close"])
+ return
+
+ if(usr.incapacitated())
+ return
+
+ if(in_range(src, usr))
+ //Start of ID requirements.
+ if(href_list["id_card"])
+ var/obj/item/card/id/id_card
+ id_card = locate(href_list["id_card"])
+ if(!istype(id_card))
+ return
+
+ if(href_list["req_access"])
+ if(!(mecha_flags & ADDING_ACCESS_POSSIBLE))
+ return
+ output_access_dialog(id_card,usr)
+ return
+
+ if(href_list["maint_access"])
+ if(!(mecha_flags & ADDING_MAINT_ACCESS_POSSIBLE))
+ return
+ if(construction_state == MECHA_LOCKED)
+ construction_state = MECHA_SECURE_BOLTS
+ to_chat(usr, "The securing bolts are now exposed.")
+ else if(construction_state == MECHA_SECURE_BOLTS)
+ construction_state = MECHA_LOCKED
+ to_chat(usr, "The securing bolts are now hidden.")
+ output_maintenance_dialog(id_card,usr)
+ return
+ if(href_list["drop_cell"])
+ if(construction_state == MECHA_OPEN_HATCH)
+ cell.forceMove(get_turf(src))
+ cell = null
+ output_maintenance_dialog(id_card,usr)
+ return
+ if(href_list["drop_scanmod"])
+ if(construction_state == MECHA_OPEN_HATCH)
+ scanmod.forceMove(get_turf(src))
+ scanmod = null
+ output_maintenance_dialog(id_card,usr)
+ return
+ if(href_list["drop_cap"])
+ if(construction_state == MECHA_OPEN_HATCH)
+ capacitor.forceMove(get_turf(src))
+ capacitor = null
+ output_maintenance_dialog(id_card,usr)
+ return
+
+ if(href_list["add_req_access"])
+ if(!(mecha_flags & ADDING_ACCESS_POSSIBLE))
+ return
+ operation_req_access += text2num(href_list["add_req_access"])
+ output_access_dialog(id_card,usr)
+ return
+
+ if(href_list["del_req_access"])
+ if(!(mecha_flags & ADDING_ACCESS_POSSIBLE))
+ return
+ operation_req_access -= text2num(href_list["del_req_access"])
+ output_access_dialog(id_card, usr)
+ return
+ return //Here end everything requiring an ID.
+
+ //Here ID access stuff goes to die.
+ if(href_list["finish_req_access"])
+ mecha_flags &= ~ADDING_ACCESS_POSSIBLE
+ usr << browse(null,"window=exosuit_add_access")
+ return
+
+ //Set pressure.
+ if(href_list["set_internal_tank_valve"] && construction_state)
+ var/new_pressure = input(usr,"Input new output pressure","Pressure setting",internal_tank_valve) as num|null
+ if(isnull(new_pressure) || usr.incapacitated() || !construction_state)
+ return
+ internal_tank_valve = new_pressure
+ to_chat(usr, "The internal pressure valve has been set to [internal_tank_valve]kPa.")
+ return
+
+ //Start of all internal topic stuff.
+ if(!locate(usr) in occupants)
+ return
+
+ if(href_list["update_content"])
+ send_byjax(usr,"exosuit.browser","content", get_stats_part())
+ return
+
+ //Selects the mech equipment/weapon.
+ if(href_list["select_equip"])
+ var/obj/item/mecha_parts/mecha_equipment/equip = locate(href_list["select_equip"]) in src
+ if(!equip || !equip.selectable)
+ return
+ selected = equip
+ to_chat(occupants, "[icon2html(src, occupants)]You switch to [equip].")
+ visible_message("[src] raises [equip].")
+ send_byjax(usr, "exosuit.browser", "eq_list", get_equipment_list())
+ return
+
+ //Toggles radio broadcasting
+ if(href_list["rmictoggle"])
+ radio.broadcasting = !radio.broadcasting
+ send_byjax(usr,"exosuit.browser","rmicstate",(radio.broadcasting?"Engaged":"Disengaged"))
+ return
+
+ //Toggles radio listening
+ if(href_list["rspktoggle"])
+ radio.listening = !radio.listening
+ send_byjax(usr,"exosuit.browser","rspkstate",(radio.listening?"Engaged":"Disengaged"))
+ return
+
+ //Changes radio freqency.
+ if(href_list["rfreq"])
+ var/new_frequency = radio.frequency + text2num(href_list["rfreq"])
+ radio.set_frequency(sanitize_frequency(new_frequency, radio.freerange))
+ send_byjax(usr,"exosuit.browser","rfreq","[format_frequency(radio.frequency)]")
+ return
+
+ //Changes the exosuit name.
+ if(href_list["change_name"])
+ var/userinput = stripped_input(usr, "Choose a new exosuit name.", "Rename exosuit", "", MAX_NAME_LEN)
+ if(!userinput || !locate(usr) in occupants || usr.incapacitated())
+ return
+ name = userinput
+ return
+
+ //Toggles ID upload.
+ if (href_list["toggle_id_upload"])
+ mecha_flags ^= ADDING_ACCESS_POSSIBLE
+ send_byjax(usr,"exosuit.browser","t_id_upload","[(mecha_flags & ADDING_ACCESS_POSSIBLE)?"L":"Unl"]ock ID upload panel")
+ return
+
+ //Toggles main access.
+ if(href_list["toggle_maint_access"])
+ if(construction_state)
+ to_chat(occupants, "[icon2html(src, occupants)]Maintenance protocols in effect")
+ return
+ mecha_flags ^= ADDING_MAINT_ACCESS_POSSIBLE
+ send_byjax(usr,"exosuit.browser","t_maint_access","[(mecha_flags & ADDING_MAINT_ACCESS_POSSIBLE)?"Forbid":"Permit"] maintenance protocols")
+ return
+
+ //Toggles connection port.
+ if (href_list["toggle_port_connection"])
+ if(internal_tank.connected_port)
+ if(internal_tank.disconnect())
+ to_chat(occupants, "[icon2html(src, occupants)]Disconnected from the air system port.")
+ log_message("Disconnected from gas port.", LOG_MECHA)
+ else
+ to_chat(occupants, "[icon2html(src, occupants)]Unable to disconnect from the air system port!")
+ return
+ else
+ var/obj/machinery/atmospherics/components/unary/portables_connector/possible_port = locate() in loc
+ if(internal_tank.connect(possible_port))
+ to_chat(occupants, "[icon2html(src, occupants)]Connected to the air system port.")
+ log_message("Connected to gas port.", LOG_MECHA)
+ else
+ to_chat(occupants, "[icon2html(src, occupants)]Unable to connect with air system port!")
+ return
+ send_byjax(occupants,"exosuit.browser","t_port_connection","[internal_tank.connected_port?"Disconnect from":"Connect to"] gas port")
+ return
+
+ //Turns on the DNA lock
+ if(href_list["dna_lock"])
+ var/mob/living/carbon/user = usr
+ if(!istype(user) || !user.dna)
+ to_chat(user, "[icon2html(src, occupants)]You can't create a DNA lock with no DNA!.")
+ return
+ dna_lock = user.dna.unique_enzymes
+ to_chat(user, "[icon2html(src, occupants)]You feel a prick as the needle takes your DNA sample.")
+ return
+
+ //Resets the DNA lock
+ if(href_list["reset_dna"])
+ dna_lock = null
+ return
+
+ //Repairs internal damage
+ if(href_list["repair_int_control_lost"])
+ to_chat(occupants, "[icon2html(src, occupants)]Recalibrating coordination system...")
+ log_message("Recalibration of coordination system started.", LOG_MECHA)
+ addtimer(CALLBACK(src, .proc/stationary_repair, loc), 100, TIMER_UNIQUE)
+
+///Repairs internal damage if the mech hasn't moved.
+/obj/vehicle/sealed/mecha/proc/stationary_repair(location)
+ if(location == loc)
+ clearInternalDamage(MECHA_INT_CONTROL_LOST)
+ to_chat(occupants, "[icon2html(src, occupants)]Recalibration successful.")
+ log_message("Recalibration of coordination system finished with 0 errors.", LOG_MECHA)
+ else
+ to_chat(occupants, "[icon2html(src, occupants)]Recalibration failed!")
+ log_message("Recalibration of coordination system failed with 1 error.", LOG_MECHA, color="red")
diff --git a/code/modules/vehicles/mecha/mecha_wreckage.dm b/code/modules/vehicles/mecha/mecha_wreckage.dm
new file mode 100644
index 0000000000..b9f299731a
--- /dev/null
+++ b/code/modules/vehicles/mecha/mecha_wreckage.dm
@@ -0,0 +1,222 @@
+///////////////////////////////////
+//////// Mecha wreckage ////////
+///////////////////////////////////
+
+
+/obj/structure/mecha_wreckage
+ name = "exosuit wreckage"
+ desc = "Remains of some unfortunate mecha. Completely irreparable, but perhaps something can be salvaged."
+ icon = 'icons/mecha/mecha.dmi'
+ density = TRUE
+ anchored = FALSE
+ opacity = FALSE
+ var/list/welder_salvage = list(/obj/item/stack/sheet/plasteel, /obj/item/stack/sheet/metal, /obj/item/stack/rods)
+ var/salvage_num = 5
+ var/list/crowbar_salvage = list()
+ var/wires_removed = FALSE
+ var/mob/living/silicon/ai/AI //AIs to be salvaged
+ var/list/parts
+
+/obj/structure/mecha_wreckage/Initialize(mapload, mob/living/silicon/ai/AI_pilot)
+ . = ..()
+ if(parts)
+ for(var/i in 1 to 2)
+ if(!parts.len)
+ break
+ if(prob(60))
+ continue
+ var/part = pick(parts)
+ welder_salvage += part
+ parts = null
+ if(!AI_pilot) //Type-checking for this is already done in mecha/Destroy()
+ return
+ AI = AI_pilot
+ AI.apply_damage(150, BURN) //Give the AI a bit of damage from the "shock" of being suddenly shut down
+ AI.death() //The damage is not enough to kill the AI, but to be 'corrupted files' in need of repair.
+ AI.forceMove(src) //Put the dead AI inside the wreckage for recovery
+ add_overlay(mutable_appearance('icons/obj/projectiles.dmi', "green_laser")) //Overlay for the recovery beacon
+ AI.controlled_mech = null
+ AI.remote_control = null
+
+/obj/structure/mecha_wreckage/Destroy()
+ if(AI)
+ QDEL_NULL(AI)
+ QDEL_LIST(crowbar_salvage)
+ return ..()
+
+/obj/structure/mecha_wreckage/examine(mob/user)
+ . = ..()
+ if(!AI)
+ return
+ . += "The AI recovery beacon is active."
+
+/obj/structure/mecha_wreckage/welder_act(mob/living/user, obj/item/I)
+ ..()
+ . = TRUE
+ if(salvage_num <= 0 || !length(welder_salvage))
+ to_chat(user, "You don't see anything that can be cut with [I]!")
+ return
+ if(!I.use_tool(src, user, 0, volume=50))
+ return
+ if(prob(30))
+ to_chat(user, "You fail to salvage anything valuable from [src]!")
+ return
+ var/type = pick(welder_salvage)
+ var/N = new type(get_turf(user))
+ user.visible_message("[user] cuts [N] from [src].", "You cut [N] from [src].")
+ if(!istype(N, /obj/item/stack))
+ welder_salvage -= type
+ salvage_num--
+
+/obj/structure/mecha_wreckage/wirecutter_act(mob/living/user, obj/item/I)
+ ..()
+ . = TRUE
+ if(wires_removed)
+ to_chat(user, "You don't see anything that can be cut with [I]!")
+ return
+ var/N = new /obj/item/stack/cable_coil(get_turf(user), rand(1,3))
+ user.visible_message("[user] cuts [N] from [src].", "You cut [N] from [src].")
+ wires_removed = TRUE
+
+/obj/structure/mecha_wreckage/crowbar_act(mob/living/user, obj/item/I)
+ ..()
+ . = TRUE
+ if(crowbar_salvage.len)
+ var/obj/S = pick(crowbar_salvage)
+ S.forceMove(user.drop_location())
+ user.visible_message("[user] pries [S] from [src].", "You pry [S] from [src].")
+ crowbar_salvage -= S
+ return
+ to_chat(user, "You don't see anything that can be cut with [I]!")
+
+/obj/structure/mecha_wreckage/transfer_ai(interaction, mob/user, null, obj/item/aicard/card)
+ if(!..())
+ return
+
+ //Proc called on the wreck by the AI card.
+ if(interaction != AI_TRANS_TO_CARD) //AIs can only be transferred in one direction, from the wreck to the card.
+ return
+ if(!AI) //No AI in the wreck
+ to_chat(user, "No AI backups found.")
+ return
+ cut_overlays() //Remove the recovery beacon overlay
+ AI.forceMove(card) //Move the dead AI to the card.
+ card.AI = AI
+ if(AI.client) //AI player is still in the dead AI and is connected
+ to_chat(AI, "The remains of your file system have been recovered on a mobile storage device.")
+ else //Give the AI a heads-up that it is probably going to get fixed.
+ AI.notify_ghost_cloning("You have been recovered from the wreckage!", source = card)
+ to_chat(user, "Backup files recovered: [AI.name] ([rand(1000,9999)].exe) salvaged from [name] and stored within local memory.")
+ AI = null
+
+/obj/structure/mecha_wreckage/gygax
+ name = "\improper Gygax wreckage"
+ icon_state = "gygax-broken"
+ parts = list(
+ /obj/item/mecha_parts/part/gygax_torso,
+ /obj/item/mecha_parts/part/gygax_head,
+ /obj/item/mecha_parts/part/gygax_left_arm,
+ /obj/item/mecha_parts/part/gygax_right_arm,
+ /obj/item/mecha_parts/part/gygax_left_leg,
+ /obj/item/mecha_parts/part/gygax_right_leg
+ )
+
+/obj/structure/mecha_wreckage/gygax/dark
+ name = "\improper Dark Gygax wreckage"
+ icon_state = "darkgygax-broken"
+
+/obj/structure/mecha_wreckage/marauder
+ name = "\improper Marauder wreckage"
+ icon_state = "marauder-broken"
+
+/obj/structure/mecha_wreckage/mauler
+ name = "\improper Mauler wreckage"
+ icon_state = "mauler-broken"
+ desc = "The syndicate won't be very happy about this..."
+
+/obj/structure/mecha_wreckage/seraph
+ name = "\improper Seraph wreckage"
+ icon_state = "seraph-broken"
+
+/obj/structure/mecha_wreckage/reticence
+ name = "\improper Reticence wreckage"
+ icon_state = "reticence-broken"
+ color = "#87878715"
+ desc = "..."
+
+/obj/structure/mecha_wreckage/ripley
+ name = "\improper Ripley wreckage"
+ icon_state = "ripley-broken"
+ parts = list(
+ /obj/item/mecha_parts/part/ripley_torso,
+ /obj/item/mecha_parts/part/ripley_left_arm,
+ /obj/item/mecha_parts/part/ripley_right_arm,
+ /obj/item/mecha_parts/part/ripley_left_leg,
+ /obj/item/mecha_parts/part/ripley_right_leg)
+
+/obj/structure/mecha_wreckage/ripley/mkii
+ name = "\improper Ripley MK-II wreckage"
+ icon_state = "ripleymkii-broken"
+
+/obj/structure/mecha_wreckage/ripley/deathripley
+ name = "\improper Death-Ripley wreckage"
+ icon_state = "deathripley-broken"
+ parts = null
+
+/obj/structure/mecha_wreckage/ripley/firefighter
+ name = "\improper Firefighter wreckage"
+ icon_state = "firefighter-broken"
+ parts = list(
+ /obj/item/mecha_parts/part/ripley_torso,
+ /obj/item/mecha_parts/part/ripley_left_arm,
+ /obj/item/mecha_parts/part/ripley_right_arm,
+ /obj/item/mecha_parts/part/ripley_left_leg,
+ /obj/item/mecha_parts/part/ripley_right_leg)
+
+
+/obj/structure/mecha_wreckage/honker
+ name = "\improper H.O.N.K wreckage"
+ icon_state = "honker-broken"
+ desc = "All is right in the universe."
+ parts = list(
+ /obj/item/mecha_parts/part/honker_torso,
+ /obj/item/mecha_parts/part/honker_head,
+ /obj/item/mecha_parts/part/honker_left_arm,
+ /obj/item/mecha_parts/part/honker_right_arm,
+ /obj/item/mecha_parts/part/honker_left_leg,
+ /obj/item/mecha_parts/part/honker_right_leg)
+
+/obj/structure/mecha_wreckage/durand
+ name = "\improper Durand wreckage"
+ icon_state = "durand-broken"
+ parts = list(
+ /obj/item/mecha_parts/part/durand_torso,
+ /obj/item/mecha_parts/part/durand_head,
+ /obj/item/mecha_parts/part/durand_left_arm,
+ /obj/item/mecha_parts/part/durand_right_arm,
+ /obj/item/mecha_parts/part/durand_left_leg,
+ /obj/item/mecha_parts/part/durand_right_leg)
+
+/obj/structure/mecha_wreckage/phazon
+ name = "\improper Phazon wreckage"
+ icon_state = "phazon-broken"
+ parts = list(
+ /obj/item/mecha_parts/part/phazon_torso,
+ /obj/item/mecha_parts/part/phazon_head,
+ /obj/item/mecha_parts/part/phazon_left_arm,
+ /obj/item/mecha_parts/part/phazon_right_arm,
+ /obj/item/mecha_parts/part/phazon_left_leg,
+ /obj/item/mecha_parts/part/phazon_right_leg)
+
+
+
+/obj/structure/mecha_wreckage/odysseus
+ name = "\improper Odysseus wreckage"
+ icon_state = "odysseus-broken"
+ parts = list(
+ /obj/item/mecha_parts/part/odysseus_torso,
+ /obj/item/mecha_parts/part/odysseus_head,
+ /obj/item/mecha_parts/part/odysseus_left_arm,
+ /obj/item/mecha_parts/part/odysseus_right_arm,
+ /obj/item/mecha_parts/part/odysseus_left_leg,
+ /obj/item/mecha_parts/part/odysseus_right_leg)
diff --git a/code/game/mecha/medical/odysseus.dm b/code/modules/vehicles/mecha/medical/odysseus.dm
similarity index 56%
rename from code/game/mecha/medical/odysseus.dm
rename to code/modules/vehicles/mecha/medical/odysseus.dm
index 6ed207a4c4..bd415cd64f 100644
--- a/code/game/mecha/medical/odysseus.dm
+++ b/code/modules/vehicles/mecha/medical/odysseus.dm
@@ -1,31 +1,33 @@
-/obj/mecha/medical/odysseus
+/obj/vehicle/sealed/mecha/medical/odysseus
desc = "These exosuits are developed and produced by Vey-Med. (© All rights reserved)."
name = "\improper Odysseus"
icon_state = "odysseus"
- step_in = 2
+ allow_diagonal_movement = TRUE
+ movedelay = 2
max_temperature = 15000
max_integrity = 120
wreckage = /obj/structure/mecha_wreckage/odysseus
internal_damage_threshold = 35
deflect_chance = 15
step_energy_drain = 6
+ internals_req_access = list(ACCESS_ROBOTICS, ACCESS_MEDICAL)
-/obj/mecha/medical/odysseus/moved_inside(mob/living/carbon/human/H)
+/obj/vehicle/sealed/mecha/medical/odysseus/moved_inside(mob/living/carbon/human/H)
. = ..()
if(.)
var/datum/atom_hud/hud = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED]
hud.add_hud_to(H)
-/obj/mecha/medical/odysseus/go_out()
- if(isliving(occupant))
- var/mob/living/carbon/human/L = occupant
+/obj/vehicle/sealed/mecha/medical/odysseus/remove_occupant(mob/M)
+ if(isliving(M))
+ var/mob/living/L = M
var/datum/atom_hud/hud = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED]
hud.remove_hud_from(L)
- ..()
+ return ..()
-/obj/mecha/medical/odysseus/mmi_moved_inside(obj/item/mmi/mmi_as_oc, mob/user)
+/obj/vehicle/sealed/mecha/medical/odysseus/mmi_moved_inside(obj/item/mmi/M, mob/user)
. = ..()
if(.)
var/datum/atom_hud/hud = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED]
- var/mob/living/brain/B = mmi_as_oc.brainmob
+ var/mob/living/brain/B = M.brainmob
hud.add_hud_to(B)
diff --git a/code/modules/vehicles/mecha/working/ripley.dm b/code/modules/vehicles/mecha/working/ripley.dm
new file mode 100644
index 0000000000..965cdbedd9
--- /dev/null
+++ b/code/modules/vehicles/mecha/working/ripley.dm
@@ -0,0 +1,218 @@
+/obj/vehicle/sealed/mecha/working/ripley
+ desc = "Autonomous Power Loader Unit MK-I. Designed primarily around heavy lifting, the Ripley can be outfitted with utility equipment to fill a number of roles."
+ name = "\improper APLU MK-I \"Ripley\""
+ icon_state = "ripley"
+ silicon_icon_state = "ripley-empty"
+ movedelay = 1.5 //Move speed, lower is faster.
+ /// How fast the mech is in low pressure
+ var/fast_pressure_step_in = 1.5
+ /// How fast the mech is in normal pressure
+ var/slow_pressure_step_in = 2
+ max_temperature = 20000
+ max_integrity = 200
+ lights_power = 7
+ deflect_chance = 15
+ armor = list(MELEE = 40, BULLET = 20, LASER = 10, ENERGY = 20, BOMB = 40, BIO = 0, RAD = 20, FIRE = 100, ACID = 100)
+ max_equip = 6
+ wreckage = /obj/structure/mecha_wreckage/ripley
+ internals_req_access = list(ACCESS_ENGINE, ACCESS_ROBOTICS, ACCESS_MINING)
+ enclosed = FALSE //Normal ripley has an open cockpit design
+ enter_delay = 10 //can enter in a quarter of the time of other mechs
+ exit_delay = 10
+ /// Amount of Goliath hides attached to the mech
+ var/hides = 0
+ /// List of all things in Ripley's Cargo Compartment
+ var/list/cargo = new
+ /// How much things Ripley can carry in their Cargo Compartment
+ var/cargo_capacity = 15
+
+/obj/vehicle/sealed/mecha/working/ripley/Move()
+ . = ..()
+ update_pressure()
+
+/obj/vehicle/sealed/mecha/working/ripley/check_for_internal_damage(list/possible_int_damage, ignore_threshold = FALSE)
+ if (!enclosed)
+ possible_int_damage -= (MECHA_INT_TEMP_CONTROL + MECHA_INT_TANK_BREACH) //if we don't even have an air tank, these two doesn't make a ton of sense.
+ . = ..()
+
+/obj/vehicle/sealed/mecha/working/ripley/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/armor_plate,3,/obj/item/stack/sheet/animalhide/goliath_hide,list(MELEE = 10, BULLET = 5, LASER = 5))
+
+/obj/vehicle/sealed/mecha/working/ripley/generate_actions()
+ initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/mech_eject)
+ if(enclosed)
+ initialize_controller_action_type(/datum/action/vehicle/sealed/mecha/mech_toggle_internals, VEHICLE_CONTROL_SETTINGS)
+ initialize_controller_action_type(/datum/action/vehicle/sealed/mecha/mech_cycle_equip, VEHICLE_CONTROL_EQUIPMENT)
+ initialize_controller_action_type(/datum/action/vehicle/sealed/mecha/mech_toggle_lights, VEHICLE_CONTROL_SETTINGS)
+ initialize_controller_action_type(/datum/action/vehicle/sealed/mecha/mech_view_stats, VEHICLE_CONTROL_SETTINGS)
+ initialize_controller_action_type(/datum/action/vehicle/sealed/mecha/strafe, VEHICLE_CONTROL_DRIVE)
+ if(max_occupants > 1)
+ initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/swap_seat)
+
+/obj/vehicle/sealed/mecha/working/ripley/Destroy()
+ for(var/atom/movable/A in cargo)
+ A.forceMove(drop_location())
+ step_rand(A)
+ cargo.Cut()
+ return ..()
+
+/obj/vehicle/sealed/mecha/working/ripley/mkii
+ desc = "Autonomous Power Loader Unit MK-II. This prototype Ripley is refitted with a pressurized cabin, trading its prior speed for atmospheric protection and armor."
+ name = "\improper APLU MK-II \"Ripley\""
+ icon_state = "ripleymkii"
+ fast_pressure_step_in = 2 //step_in while in low pressure conditions
+ slow_pressure_step_in = 4 //step_in while in normal pressure conditions
+ movedelay = 4
+ max_temperature = 30000
+ max_integrity = 250
+ armor = list(MELEE = 40, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 60, BIO = 0, RAD = 70, FIRE = 100, ACID = 100)
+ wreckage = /obj/structure/mecha_wreckage/ripley/mkii
+ enclosed = TRUE
+ enter_delay = 40
+ silicon_icon_state = null
+
+/obj/vehicle/sealed/mecha/working/ripley/firefighter
+ desc = "Autonomous Power Loader Unit MK-II-F. This model is refitted with additional thermal protection."
+ name = "\improper APLU \"Firefighter\""
+ icon_state = "firefighter"
+ movedelay = 4
+ fast_pressure_step_in = 2
+ slow_pressure_step_in = 4
+ max_temperature = 65000
+ max_integrity = 250
+ resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
+ armor = list(MELEE = 40, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 60, BIO = 0, RAD = 70, FIRE = 100, ACID = 100)
+ max_equip = 5 // More armor, less tools
+ enclosed = TRUE
+ enter_delay = 40
+
+/obj/vehicle/sealed/mecha/working/ripley/deathripley
+ desc = "OH SHIT IT'S THE DEATHSQUAD WE'RE ALL GONNA DIE"
+ name = "\improper DEATH-RIPLEY"
+ icon_state = "deathripley"
+ fast_pressure_step_in = 2 //step_in while in low pressure conditions
+ slow_pressure_step_in = 3 //step_in while in normal pressure conditions
+ movedelay = 4
+ lights_power = 7
+ wreckage = /obj/structure/mecha_wreckage/ripley/deathripley
+ step_energy_drain = 0
+ enclosed = TRUE
+ enter_delay = 40
+ silicon_icon_state = null
+
+/obj/vehicle/sealed/mecha/working/ripley/deathripley/Initialize(mapload)
+ . = ..()
+ var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/kill
+ ME.attach(src)
+
+/obj/vehicle/sealed/mecha/working/ripley/deathripley/real
+ desc = "OH SHIT IT'S THE DEATHSQUAD WE'RE ALL GONNA DIE. FOR REAL"
+
+/obj/vehicle/sealed/mecha/working/ripley/deathripley/real/Initialize(mapload)
+ . = ..()
+ for(var/obj/item/mecha_parts/mecha_equipment/E in equipment)
+ E.detach()
+ qdel(E)
+ LAZYCLEARLIST(equipment)
+ var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/kill/real
+ ME.attach(src)
+
+/obj/vehicle/sealed/mecha/working/ripley/mining
+ desc = "An old, dusty mining Ripley."
+ name = "\improper APLU \"Miner\""
+ obj_integrity = 75 //Low starting health
+
+/obj/vehicle/sealed/mecha/working/ripley/mining/Initialize(mapload)
+ . = ..()
+ if(cell)
+ cell.charge = FLOOR(cell.charge * 0.25, 1) //Starts at very low charge
+ if(prob(70)) //Maybe add a drill
+ if(prob(15)) //Possible diamond drill... Feeling lucky?
+ var/obj/item/mecha_parts/mecha_equipment/drill/diamonddrill/D = new
+ D.attach(src)
+ else
+ var/obj/item/mecha_parts/mecha_equipment/drill/D = new
+ D.attach(src)
+
+ else //Add plasma cutter if no drill
+ var/obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma/P = new
+ P.attach(src)
+
+ //Add ore box to cargo
+ cargo.Add(new /obj/structure/ore_box(src))
+
+ //Attach hydraulic clamp
+ var/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/HC = new
+ HC.attach(src)
+ for(var/obj/item/mecha_parts/mecha_tracking/B in trackers)//Deletes the beacon so it can't be found easily
+ qdel(B)
+
+ var/obj/item/mecha_parts/mecha_equipment/mining_scanner/scanner = new
+ scanner.attach(src)
+
+/obj/vehicle/sealed/mecha/working/ripley/Exit(atom/movable/O)
+ if(O in cargo)
+ return 0
+ return ..()
+
+/obj/vehicle/sealed/mecha/working/ripley/Topic(href, href_list)
+ ..()
+ if(href_list["drop_from_cargo"])
+ var/obj/O = locate(href_list["drop_from_cargo"]) in cargo
+ if(O)
+ to_chat(occupants, "[icon2html(src, occupants)]You unload [O].")
+ O.forceMove(drop_location())
+ cargo -= O
+ log_message("Unloaded [O]. Cargo compartment capacity: [cargo_capacity - src.cargo.len]", LOG_MECHA)
+ return
+
+
+/obj/vehicle/sealed/mecha/working/ripley/contents_explosion(severity, target, origin)
+ for(var/X in cargo)
+ var/obj/O = X
+ if(prob(30/severity))
+ cargo -= O
+ O.forceMove(drop_location())
+ . = ..()
+
+/obj/vehicle/sealed/mecha/working/ripley/get_stats_part()
+ var/output = ..()
+ output += "Cargo Compartment Contents:"
+ if(cargo.len)
+ for(var/obj/O in cargo)
+ output += " Unload : [O] "
+ else
+ output += "Nothing"
+ output += " "
+ return output
+
+/obj/vehicle/sealed/mecha/working/ripley/relay_container_resist(mob/living/user, obj/O)
+ to_chat(user, "You lean on the back of [O] and start pushing so it falls out of [src].")
+ if(do_after(user, 300, target = O))
+ if(!user || user.stat != CONSCIOUS || user.loc != src || O.loc != src )
+ return
+ to_chat(user, "You successfully pushed [O] out of [src]!")
+ O.forceMove(drop_location())
+ cargo -= O
+ else
+ if(user.loc == src) //so we don't get the message if we resisted multiple times and succeeded.
+ to_chat(user, "You fail to push [O] out of [src]!")
+
+/**
+ * Makes the mecha go faster and halves the mecha drill cooldown if in Lavaland pressure.
+ *
+ * Checks for Lavaland pressure, if that works out the mech's speed is equal to fast_pressure_step_in and the cooldown for the mecha drill is halved. If not it uses slow_pressure_step_in and drill cooldown is normal.
+ */
+/obj/vehicle/sealed/mecha/working/ripley/proc/update_pressure()
+ var/turf/T = get_turf(loc)
+
+ if(lavaland_equipment_pressure_check(T))
+ movedelay = fast_pressure_step_in
+ for(var/obj/item/mecha_parts/mecha_equipment/drill/drill in equipment)
+ drill.equip_cooldown = initial(drill.equip_cooldown) * 0.5
+
+ else
+ movedelay = slow_pressure_step_in
+ for(var/obj/item/mecha_parts/mecha_equipment/drill/drill in equipment)
+ drill.equip_cooldown = initial(drill.equip_cooldown)
diff --git a/code/modules/vehicles/mecha/working/working.dm b/code/modules/vehicles/mecha/working/working.dm
new file mode 100644
index 0000000000..c765e0f0e5
--- /dev/null
+++ b/code/modules/vehicles/mecha/working/working.dm
@@ -0,0 +1,28 @@
+/obj/vehicle/sealed/mecha/working
+ internal_damage_threshold = 60
+
+/obj/vehicle/sealed/mecha/working/Move()
+ . = ..()
+ if(.)
+ collect_ore()
+
+/**
+ * Handles collecting ore.
+ *
+ * Checks for a hydraulic clamp or ore box manager and if it finds an ore box inside them puts ore in the ore box.
+ */
+/obj/vehicle/sealed/mecha/working/proc/collect_ore()
+ if((locate(/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp) in equipment))
+ var/obj/structure/ore_box/ore_box = locate(/obj/structure/ore_box) in contents
+ if(ore_box)
+ for(var/obj/item/stack/ore/ore in range(1, src))
+ if(ore.Adjacent(src) && ((get_dir(src, ore) & dir) || ore.loc == loc)) //we can reach it and it's in front of us? grab it!
+ ore.forceMove(ore_box)
+
+/obj/vehicle/sealed/mecha/working/Bump(atom/obstacle)
+ if(istype(selected, /obj/item/mecha_parts/mecha_equipment/drill) && istype(obstacle, /turf/closed/mineral))
+ var/obj/item/mecha_parts/mecha_equipment/drill/thedrill = selected
+ for(var/mob/M in occupants)
+ thedrill.action(M, obstacle)
+ break
+ ..()
diff --git a/code/modules/vehicles/ridden.dm b/code/modules/vehicles/ridden.dm
index f71d9367d3..42b6d0dbf7 100644
--- a/code/modules/vehicles/ridden.dm
+++ b/code/modules/vehicles/ridden.dm
@@ -4,10 +4,11 @@
max_buckled_mobs = 1
buckle_lying = FALSE
default_driver_move = FALSE
+ pass_flags_self = PASSTABLE
var/legs_required = 1
var/arms_required = 0 //why not?
-/obj/vehicle/ridden/Initialize()
+/obj/vehicle/ridden/Initialize(mapload)
. = ..()
LoadComponent(/datum/component/riding)
diff --git a/code/modules/vehicles/scooter.dm b/code/modules/vehicles/scooter.dm
index d4a87a0f1e..13a614449a 100644
--- a/code/modules/vehicles/scooter.dm
+++ b/code/modules/vehicles/scooter.dm
@@ -3,7 +3,7 @@
desc = "A fun way to get around."
icon_state = "scooter"
-/obj/vehicle/ridden/scooter/Initialize()
+/obj/vehicle/ridden/scooter/Initialize(mapload)
. = ..()
var/datum/component/riding/D = LoadComponent(/datum/component/riding)
D.set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0), TEXT_SOUTH = list(-2), TEXT_EAST = list(0), TEXT_WEST = list( 2)))
@@ -57,7 +57,7 @@
///Stamina drain multiplier
var/instability = 10
-/obj/vehicle/ridden/scooter/skateboard/Initialize()
+/obj/vehicle/ridden/scooter/skateboard/Initialize(mapload)
. = ..()
var/datum/component/riding/D = LoadComponent(/datum/component/riding)
D.vehicle_move_delay = 1
@@ -253,7 +253,7 @@
icon = null
density = FALSE
-/obj/vehicle/ridden/scooter/wheelys/Initialize()
+/obj/vehicle/ridden/scooter/wheelys/Initialize(mapload)
. = ..()
var/datum/component/riding/D = LoadComponent(/datum/component/riding)
D.vehicle_move_delay = 1
diff --git a/code/modules/vehicles/sealed.dm b/code/modules/vehicles/sealed.dm
index 63c7c9f858..1a1858522a 100644
--- a/code/modules/vehicles/sealed.dm
+++ b/code/modules/vehicles/sealed.dm
@@ -47,10 +47,12 @@
mob_exit(M, silent, randomstep)
/obj/vehicle/sealed/proc/mob_exit(mob/M, silent = FALSE, randomstep = FALSE)
+ SIGNAL_HANDLER
if(!istype(M))
return FALSE
remove_occupant(M)
- M.forceMove(exit_location(M))
+ if(!isAI(M))//This is the ONE mob we dont want to be moved to the vehicle that should be handeled when used
+ M.forceMove(exit_location(M))
if(randomstep)
var/turf/target_turf = get_step(exit_location(M), pick(GLOB.cardinals))
M.throw_at(target_turf, 5, 10)
diff --git a/code/modules/vehicles/secway.dm b/code/modules/vehicles/secway.dm
index 8ad8b5f1ee..fffa872957 100644
--- a/code/modules/vehicles/secway.dm
+++ b/code/modules/vehicles/secway.dm
@@ -12,7 +12,7 @@
var/last_tick = 0
var/list/progressbars_by_rider = list()
-/obj/vehicle/ridden/secway/Initialize()
+/obj/vehicle/ridden/secway/Initialize(mapload)
. = ..()
var/datum/component/riding/D = LoadComponent(/datum/component/riding)
D.vehicle_move_delay = 1
@@ -43,7 +43,8 @@
. = ..(M, force, check_loc)
if(.)
if(progressbars_by_rider[M])
- qdel(progressbars_by_rider[M])
+ var/datum/progressbar/to_delete = progressbars_by_rider[M]
+ to_delete.end_progress()
var/datum/progressbar/D = new(M, chargemax, src)
D.update(charge)
progressbars_by_rider[M] = D
@@ -51,12 +52,14 @@
/obj/vehicle/ridden/secway/unbuckle_mob(mob/living/M, force)
. = ..(M, force)
if(.)
- qdel(progressbars_by_rider[M])
+ var/datum/progressbar/to_delete = progressbars_by_rider[M]
+ to_delete.end_progress()
progressbars_by_rider -= M
/obj/vehicle/ridden/secway/Destroy()
for(var/i in progressbars_by_rider)
- qdel(progressbars_by_rider[i])
+ var/datum/progressbar/to_delete = progressbars_by_rider[i]
+ to_delete.end_progress()
progressbars_by_rider.Cut()
STOP_PROCESSING(SSfastprocess, src)
return ..()
diff --git a/code/modules/vehicles/speedbike.dm b/code/modules/vehicles/speedbike.dm
index a560cbb8f3..d0b9c1fe96 100644
--- a/code/modules/vehicles/speedbike.dm
+++ b/code/modules/vehicles/speedbike.dm
@@ -2,7 +2,7 @@
/obj/vehicle/ridden/space
name = "Generic Space Vehicle!"
-/obj/vehicle/ridden/space/Initialize()
+/obj/vehicle/ridden/space/Initialize(mapload)
. = ..()
var/datum/component/riding/D = LoadComponent(/datum/component/riding)
D.override_allow_spacemove = TRUE
@@ -15,7 +15,7 @@
var/overlay_state = "cover_blue"
var/mutable_appearance/overlay
-/obj/vehicle/ridden/space/speedbike/Initialize()
+/obj/vehicle/ridden/space/speedbike/Initialize(mapload)
. = ..()
overlay = mutable_appearance(icon, overlay_state, ABOVE_MOB_LAYER)
add_overlay(overlay)
@@ -50,7 +50,7 @@
pixel_y = -48
pixel_x = -48
-/obj/vehicle/ridden/space/speedwagon/Initialize()
+/obj/vehicle/ridden/space/speedwagon/Initialize(mapload)
. = ..()
add_overlay(overlay)
var/datum/component/riding/D = LoadComponent(/datum/component/riding)
diff --git a/code/modules/vehicles/wheelchair.dm b/code/modules/vehicles/wheelchair.dm
index 28145ba8e1..cc432957f6 100644
--- a/code/modules/vehicles/wheelchair.dm
+++ b/code/modules/vehicles/wheelchair.dm
@@ -5,14 +5,14 @@
icon_state = "wheelchair"
layer = OBJ_LAYER
max_integrity = 100
- armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 30) //Wheelchairs aren't super tough yo
+ armor = list(MELEE = 10, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 10, BIO = 0, RAD = 0, FIRE = 20, ACID = 30) //Wheelchairs aren't super tough yo
legs_required = 0 //You'll probably be using this if you don't have legs
canmove = TRUE
density = FALSE //Thought I couldn't fix this one easily, phew
arms_required = 1
var/override_movespeed = FALSE
-/obj/vehicle/ridden/wheelchair/Initialize()
+/obj/vehicle/ridden/wheelchair/Initialize(mapload)
. = ..()
var/datum/component/riding/D = LoadComponent(/datum/component/riding)
D.vehicle_move_delay = 0
diff --git a/code/modules/vending/_vending.dm b/code/modules/vending/_vending.dm
index cea7502540..700a2fea7e 100644
--- a/code/modules/vending/_vending.dm
+++ b/code/modules/vending/_vending.dm
@@ -54,7 +54,7 @@
verb_exclaim = "beeps"
max_integrity = 300
integrity_failure = 0.33
- armor = list("melee" = 20, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 70)
+ armor = list(MELEE = 20, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 70)
circuit = /obj/item/circuitboard/machine/vendor
payment_department = ACCOUNT_SRV
light_power = 0.5
diff --git a/code/modules/vending/autodrobe.dm b/code/modules/vending/autodrobe.dm
index f1fbb95ff2..5a6c7c973f 100644
--- a/code/modules/vending/autodrobe.dm
+++ b/code/modules/vending/autodrobe.dm
@@ -171,7 +171,7 @@
payment_department = ACCOUNT_SRV
light_mask="theater-light-mask"
-/obj/machinery/vending/autodrobe/Initialize()
+/obj/machinery/vending/autodrobe/Initialize(mapload)
. = ..()
cost_multiplier_per_dept = list("[ACCESS_THEATRE]" = 0)
diff --git a/code/modules/vending/boozeomat.dm b/code/modules/vending/boozeomat.dm
index df57dadd2e..c3e5f6ce0e 100644
--- a/code/modules/vending/boozeomat.dm
+++ b/code/modules/vending/boozeomat.dm
@@ -79,7 +79,7 @@
age_restrictions = FALSE
payment_department = NO_FREEBIES
-/obj/machinery/vending/boozeomat/syndicate_access/Initialize()
+/obj/machinery/vending/boozeomat/syndicate_access/Initialize(mapload)
. = ..()
cost_multiplier_per_dept = list("[ACCESS_SYNDICATE]" = 0)
diff --git a/code/modules/vending/cartridge.dm b/code/modules/vending/cartridge.dm
index db8db77ad4..c4b35496c2 100644
--- a/code/modules/vending/cartridge.dm
+++ b/code/modules/vending/cartridge.dm
@@ -14,7 +14,7 @@
/obj/item/pda/heads = 10,
/obj/item/cartridge/captain = 3,
/obj/item/cartridge/quartermaster = 10)
- armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
+ armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 50)
refill_canister = /obj/item/vending_refill/cart
resistance_flags = FIRE_PROOF
default_price = PRICE_ALMOST_EXPENSIVE
diff --git a/code/modules/vending/cigarette.dm b/code/modules/vending/cigarette.dm
index 269e0aaa7b..e5655ac9e0 100644
--- a/code/modules/vending/cigarette.dm
+++ b/code/modules/vending/cigarette.dm
@@ -37,7 +37,7 @@
/obj/item/lighter/greyscale = 4,
/obj/item/storage/fancy/rollingpapers = 5)
-/obj/machinery/vending/cigarette/syndicate/Initialize()
+/obj/machinery/vending/cigarette/syndicate/Initialize(mapload)
. = ..()
cost_multiplier_per_dept = list("[ACCESS_SYNDICATE]" = 0)
diff --git a/code/modules/vending/cola.dm b/code/modules/vending/cola.dm
index 6bc5b9cb93..f60c3fc2fa 100644
--- a/code/modules/vending/cola.dm
+++ b/code/modules/vending/cola.dm
@@ -36,7 +36,7 @@
icon_state = "random_cola"
desc = "Uh oh!"
-/obj/machinery/vending/cola/random/Initialize()
+/obj/machinery/vending/cola/random/Initialize(mapload)
..()
var/T = pick(subtypesof(/obj/machinery/vending/cola) - /obj/machinery/vending/cola/random)
new T(loc)
diff --git a/code/modules/vending/dinnerware.dm b/code/modules/vending/dinnerware.dm
index 95fd8e04d8..2c326d8e2b 100644
--- a/code/modules/vending/dinnerware.dm
+++ b/code/modules/vending/dinnerware.dm
@@ -26,7 +26,7 @@
/obj/item/reagent_containers/syringe = 3)
premium = list(
/obj/item/reagent_containers/food/condiment/enzyme = 1)
- armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
+ armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 50)
refill_canister = /obj/item/vending_refill/dinnerware
resistance_flags = FIRE_PROOF
default_price = PRICE_REALLY_CHEAP
diff --git a/code/modules/vending/kinkmate.dm b/code/modules/vending/kinkmate.dm
index 6d8eea1782..02f3f30e4b 100644
--- a/code/modules/vending/kinkmate.dm
+++ b/code/modules/vending/kinkmate.dm
@@ -31,6 +31,7 @@
/obj/item/autosurgeon/testicles = 3,
/obj/item/storage/pill_bottle/penis_enlargement = 10,
/obj/item/storage/pill_bottle/breast_enlargement = 10,
+ /obj/item/storage/pill_bottle/butt_enlargement = 10,
/obj/item/reagent_containers/glass/bottle/crocin = 10,
/obj/item/reagent_containers/glass/bottle/camphor = 5,
/obj/item/storage/daki = 4
diff --git a/code/modules/vending/liberation_toy.dm b/code/modules/vending/liberation_toy.dm
index eea1150abf..21cc8e986a 100644
--- a/code/modules/vending/liberation_toy.dm
+++ b/code/modules/vending/liberation_toy.dm
@@ -22,7 +22,7 @@
/obj/item/toy/katana = 10,
/obj/item/dualsaber/toy = 5,
/obj/item/toy/cards/deck/syndicate = 10) //Gambling and it hurts, making it a +18 item
- armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
+ armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 50)
resistance_flags = FIRE_PROOF
refill_canister = /obj/item/vending_refill/donksoft
default_price = PRICE_ABOVE_NORMAL
diff --git a/code/modules/vending/magivend.dm b/code/modules/vending/magivend.dm
index 104f7b3c02..f5565eaa4c 100644
--- a/code/modules/vending/magivend.dm
+++ b/code/modules/vending/magivend.dm
@@ -14,7 +14,7 @@
/obj/item/clothing/shoes/sandal/magic = 1,
/obj/item/staff = 2)
contraband = list(/obj/item/reagent_containers/glass/bottle/wizarditis = 1) //No one can get to the machine to hack it anyways; for the lulz - Microwave
- armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50, "magic" = 100)
+ armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 50, MAGIC = 100)
resistance_flags = FIRE_PROOF
default_price = 0 //Just in case, since it's primary use is storage.
extra_price = PRICE_ABOVE_EXPENSIVE
diff --git a/code/modules/vending/snack.dm b/code/modules/vending/snack.dm
index edd4802dc2..efb6670496 100644
--- a/code/modules/vending/snack.dm
+++ b/code/modules/vending/snack.dm
@@ -41,7 +41,7 @@
icon_state = "random_snack"
desc = "Uh oh!"
-/obj/machinery/vending/snack/random/Initialize()
+/obj/machinery/vending/snack/random/Initialize(mapload)
..()
var/T = pick(subtypesof(/obj/machinery/vending/snack) - /obj/machinery/vending/snack/random)
new T(loc)
diff --git a/code/modules/vore/eating/belly_obj.dm b/code/modules/vore/eating/belly_obj.dm
index 474c912c23..3d8870d41a 100644
--- a/code/modules/vore/eating/belly_obj.dm
+++ b/code/modules/vore/eating/belly_obj.dm
@@ -147,7 +147,7 @@
//ommitted list
// "shrink_grow_size",
-/obj/belly/Initialize()
+/obj/belly/Initialize(mapload)
. = ..()
take_ownership(src.loc)
diff --git a/code/modules/vore/eating/living.dm b/code/modules/vore/eating/living.dm
index 1f4950eaa7..99c1236d9c 100644
--- a/code/modules/vore/eating/living.dm
+++ b/code/modules/vore/eating/living.dm
@@ -18,7 +18,7 @@
// Hook for generic creation of stuff on new creatures
//
/hook/living_new/proc/vore_setup(mob/living/M)
- add_verb(M, list(/mob/living/proc/preyloop_refresh, /mob/living/proc/lick, /mob/living/proc/smell, /mob/living/proc/escapeOOC))
+ add_verb(M, list(/mob/living/proc/preyloop_refresh, /mob/living/proc/lick, /mob/living/proc/smell_someone, /mob/living/proc/escapeOOC))
if(M.vore_flags & NO_VORE) //If the mob isn't supposed to have a stomach, let's not give it an insidepanel so it can make one for itself, or a stomach.
return TRUE
@@ -394,7 +394,7 @@
//
// Equally important as the above
//
-/mob/living/proc/smell()
+/mob/living/proc/smell_someone()
set name = "Smell Someone"
set category = "Vore"
set desc = "Smell someone nearby!"
diff --git a/code/modules/wiremod/components/abstract/compare.dm b/code/modules/wiremod/components/abstract/compare.dm
index ef6ba171b7..7523b7801a 100644
--- a/code/modules/wiremod/components/abstract/compare.dm
+++ b/code/modules/wiremod/components/abstract/compare.dm
@@ -21,7 +21,7 @@
var/list/datum/port/input/compare_ports = list()
-/obj/item/circuit_component/compare/Initialize()
+/obj/item/circuit_component/compare/Initialize(mapload)
. = ..()
for(var/port_id in 1 to input_port_amount)
var/letter = ascii2text(text2ascii("A") + (port_id-1))
diff --git a/code/modules/wiremod/components/abstract/module.dm b/code/modules/wiremod/components/abstract/module.dm
index a3c04b2a11..970b893ac3 100644
--- a/code/modules/wiremod/components/abstract/module.dm
+++ b/code/modules/wiremod/components/abstract/module.dm
@@ -93,7 +93,7 @@
attached_module = null
return ..()
-/obj/item/circuit_component/module/Initialize()
+/obj/item/circuit_component/module/Initialize(mapload)
. = ..()
internal_circuit = new(src)
internal_circuit.attached_module = src
diff --git a/code/modules/wiremod/components/action/light.dm b/code/modules/wiremod/components/action/light.dm
index 14427eae0e..11c40983c3 100644
--- a/code/modules/wiremod/components/action/light.dm
+++ b/code/modules/wiremod/components/action/light.dm
@@ -26,7 +26,7 @@
. = ..()
. += create_ui_notice("Maximum Brightness: [max_power]", "orange", "lightbulb")
-/obj/item/circuit_component/light/Initialize()
+/obj/item/circuit_component/light/Initialize(mapload)
. = ..()
red = add_input_port("Red", PORT_TYPE_NUMBER)
green = add_input_port("Green", PORT_TYPE_NUMBER)
diff --git a/code/modules/wiremod/components/action/mmi.dm b/code/modules/wiremod/components/action/mmi.dm
index 9c242059a6..b67f48f559 100644
--- a/code/modules/wiremod/components/action/mmi.dm
+++ b/code/modules/wiremod/components/action/mmi.dm
@@ -36,7 +36,7 @@
/// Maximum length of the message that can be sent to the MMI
var/max_length = 300
-/obj/item/circuit_component/mmi/Initialize()
+/obj/item/circuit_component/mmi/Initialize(mapload)
. = ..()
message = add_input_port("Message", PORT_TYPE_STRING)
send = add_input_port("Send Message", PORT_TYPE_SIGNAL)
diff --git a/code/modules/wiremod/components/action/pathfind.dm b/code/modules/wiremod/components/action/pathfind.dm
index 10856e0de8..744ae66dd7 100644
--- a/code/modules/wiremod/components/action/pathfind.dm
+++ b/code/modules/wiremod/components/action/pathfind.dm
@@ -33,7 +33,7 @@
. += create_ui_notice("Pathfinding Cooldown: [DisplayTimeText(different_path_cooldown)]", "orange", "stopwatch")
. += create_ui_notice("Maximum Range: [max_range] tiles", "orange", "info")
-/obj/item/circuit_component/pathfind/Initialize()
+/obj/item/circuit_component/pathfind/Initialize(mapload)
. = ..()
input_X = add_input_port("Target X", PORT_TYPE_NUMBER, FALSE)
input_Y = add_input_port("Target Y", PORT_TYPE_NUMBER, FALSE)
diff --git a/code/modules/wiremod/components/action/pull.dm b/code/modules/wiremod/components/action/pull.dm
index ecaa6bd3aa..89530ce787 100644
--- a/code/modules/wiremod/components/action/pull.dm
+++ b/code/modules/wiremod/components/action/pull.dm
@@ -11,7 +11,7 @@
var/datum/port/input/target
circuit_flags = CIRCUIT_FLAG_INPUT_SIGNAL|CIRCUIT_FLAG_OUTPUT_SIGNAL
-/obj/item/circuit_component/pull/Initialize()
+/obj/item/circuit_component/pull/Initialize(mapload)
. = ..()
target = add_input_port("Target", PORT_TYPE_ATOM)
diff --git a/code/modules/wiremod/components/action/radio.dm b/code/modules/wiremod/components/action/radio.dm
index 540b79f7cf..135cbdca0a 100644
--- a/code/modules/wiremod/components/action/radio.dm
+++ b/code/modules/wiremod/components/action/radio.dm
@@ -30,7 +30,7 @@
)
public_options = add_option_port("Encryption Options", component_options)
-/obj/item/circuit_component/radio/Initialize()
+/obj/item/circuit_component/radio/Initialize(mapload)
. = ..()
freq = add_input_port("Frequency", PORT_TYPE_NUMBER, default = FREQ_SIGNALER)
code = add_input_port("Code", PORT_TYPE_NUMBER, default = DEFAULT_SIGNALER_CODE)
diff --git a/code/modules/wiremod/components/action/soundemitter.dm b/code/modules/wiremod/components/action/soundemitter.dm
index 6d18978c53..1806030984 100644
--- a/code/modules/wiremod/components/action/soundemitter.dm
+++ b/code/modules/wiremod/components/action/soundemitter.dm
@@ -27,7 +27,7 @@
. += create_ui_notice("Sound Cooldown: [DisplayTimeText(sound_cooldown)]", "orange", "stopwatch")
-/obj/item/circuit_component/soundemitter/Initialize()
+/obj/item/circuit_component/soundemitter/Initialize(mapload)
. = ..()
volume = add_input_port("Volume", PORT_TYPE_NUMBER, default = 35)
frequency = add_input_port("Frequency", PORT_TYPE_NUMBER, default = 0)
diff --git a/code/modules/wiremod/components/action/speech.dm b/code/modules/wiremod/components/action/speech.dm
index 6732a2058a..fc8cb3a627 100644
--- a/code/modules/wiremod/components/action/speech.dm
+++ b/code/modules/wiremod/components/action/speech.dm
@@ -18,7 +18,7 @@
. = ..()
. += create_ui_notice("Speech Cooldown: [DisplayTimeText(speech_cooldown)]", "orange", "stopwatch")
-/obj/item/circuit_component/speech/Initialize()
+/obj/item/circuit_component/speech/Initialize(mapload)
. = ..()
message = add_input_port("Message", PORT_TYPE_STRING, FALSE)
diff --git a/code/modules/wiremod/components/admin/getvar.dm b/code/modules/wiremod/components/admin/getvar.dm
index cef8341f38..28d25cdb53 100644
--- a/code/modules/wiremod/components/admin/getvar.dm
+++ b/code/modules/wiremod/components/admin/getvar.dm
@@ -18,7 +18,7 @@
var/datum/port/output/output_value
-/obj/item/circuit_component/get_variable/Initialize()
+/obj/item/circuit_component/get_variable/Initialize(mapload)
. = ..()
entity = add_input_port("Target", PORT_TYPE_ATOM)
variable_name = add_input_port("Variable Name", PORT_TYPE_STRING)
diff --git a/code/modules/wiremod/components/admin/proccall.dm b/code/modules/wiremod/components/admin/proccall.dm
index 1349c81636..4f4d1c55d3 100644
--- a/code/modules/wiremod/components/admin/proccall.dm
+++ b/code/modules/wiremod/components/admin/proccall.dm
@@ -34,7 +34,7 @@
proccall_options = add_option_port("Proccall Options", component_options)
-/obj/item/circuit_component/proccall/Initialize()
+/obj/item/circuit_component/proccall/Initialize(mapload)
. = ..()
entity = add_input_port("Target", PORT_TYPE_ATOM)
proc_name = add_input_port("Proc Name", PORT_TYPE_STRING)
diff --git a/code/modules/wiremod/components/admin/sdql.dm b/code/modules/wiremod/components/admin/sdql.dm
index 871c3f247e..ed71414dd2 100644
--- a/code/modules/wiremod/components/admin/sdql.dm
+++ b/code/modules/wiremod/components/admin/sdql.dm
@@ -14,7 +14,7 @@
var/datum/port/output/results
-/obj/item/circuit_component/sdql_operation/Initialize()
+/obj/item/circuit_component/sdql_operation/Initialize(mapload)
. = ..()
sdql_operation = add_input_port("SDQL String", PORT_TYPE_STRING)
results = add_output_port("Result", PORT_TYPE_LIST)
diff --git a/code/modules/wiremod/components/admin/setvar.dm b/code/modules/wiremod/components/admin/setvar.dm
index 0c66450cc9..5319d7cdcb 100644
--- a/code/modules/wiremod/components/admin/setvar.dm
+++ b/code/modules/wiremod/components/admin/setvar.dm
@@ -18,7 +18,7 @@
var/datum/port/input/new_value
-/obj/item/circuit_component/set_variable/Initialize()
+/obj/item/circuit_component/set_variable/Initialize(mapload)
. = ..()
entity = add_input_port("Target", PORT_TYPE_ATOM)
variable_name = add_input_port("Variable Name", PORT_TYPE_STRING)
diff --git a/code/modules/wiremod/components/admin/spawn.dm b/code/modules/wiremod/components/admin/spawn.dm
index 2d3697598b..795a438a70 100644
--- a/code/modules/wiremod/components/admin/spawn.dm
+++ b/code/modules/wiremod/components/admin/spawn.dm
@@ -20,7 +20,7 @@
/// The result from the output
var/datum/port/output/spawned_atom
-/obj/item/circuit_component/spawn_atom/Initialize()
+/obj/item/circuit_component/spawn_atom/Initialize(mapload)
. = ..()
input_path = add_input_port("Type", PORT_TYPE_ANY)
spawn_at = add_input_port("Spawn At", PORT_TYPE_ATOM)
diff --git a/code/modules/wiremod/components/admin/to_type.dm b/code/modules/wiremod/components/admin/to_type.dm
index e4a34223bb..56a6b3a0e8 100644
--- a/code/modules/wiremod/components/admin/to_type.dm
+++ b/code/modules/wiremod/components/admin/to_type.dm
@@ -14,7 +14,7 @@
/// The type output
var/datum/port/output/type_output
-/obj/item/circuit_component/to_type/Initialize()
+/obj/item/circuit_component/to_type/Initialize(mapload)
. = ..()
input_path = add_input_port("Type", PORT_TYPE_STRING)
type_output = add_output_port("Typepath", PORT_TYPE_ANY)
diff --git a/code/modules/wiremod/components/atom/direction.dm b/code/modules/wiremod/components/atom/direction.dm
index 140720a2d3..b7437aca84 100644
--- a/code/modules/wiremod/components/atom/direction.dm
+++ b/code/modules/wiremod/components/atom/direction.dm
@@ -28,7 +28,7 @@
. = ..()
. += create_ui_notice("Maximum Range: [max_range] tiles", "orange", "info")
-/obj/item/circuit_component/direction/Initialize()
+/obj/item/circuit_component/direction/Initialize(mapload)
. = ..()
input_port = add_input_port("Organism", PORT_TYPE_ATOM)
diff --git a/code/modules/wiremod/components/atom/gps.dm b/code/modules/wiremod/components/atom/gps.dm
index cdf61385a0..ba807cb8a7 100644
--- a/code/modules/wiremod/components/atom/gps.dm
+++ b/code/modules/wiremod/components/atom/gps.dm
@@ -14,7 +14,7 @@
circuit_flags = CIRCUIT_FLAG_INPUT_SIGNAL|CIRCUIT_FLAG_OUTPUT_SIGNAL
-/obj/item/circuit_component/gps/Initialize()
+/obj/item/circuit_component/gps/Initialize(mapload)
. = ..()
x_pos = add_output_port("X", PORT_TYPE_NUMBER)
diff --git a/code/modules/wiremod/components/atom/health.dm b/code/modules/wiremod/components/atom/health.dm
index 7849180f9a..8c5095fb72 100644
--- a/code/modules/wiremod/components/atom/health.dm
+++ b/code/modules/wiremod/components/atom/health.dm
@@ -29,7 +29,7 @@
. = ..()
. += create_ui_notice("Maximum Range: [max_range] tiles", "orange", "info")
-/obj/item/circuit_component/health/Initialize()
+/obj/item/circuit_component/health/Initialize(mapload)
. = ..()
input_port = add_input_port("Organism", PORT_TYPE_ATOM)
diff --git a/code/modules/wiremod/components/atom/hear.dm b/code/modules/wiremod/components/atom/hear.dm
index 23fbba1e0a..1069110603 100644
--- a/code/modules/wiremod/components/atom/hear.dm
+++ b/code/modules/wiremod/components/atom/hear.dm
@@ -16,7 +16,7 @@
/// The trigger sent when this event occurs
var/datum/port/output/trigger_port
-/obj/item/circuit_component/hear/Initialize()
+/obj/item/circuit_component/hear/Initialize(mapload)
. = ..()
message_port = add_output_port("Message", PORT_TYPE_STRING)
language_port = add_output_port("Language", PORT_TYPE_STRING)
diff --git a/code/modules/wiremod/components/atom/self.dm b/code/modules/wiremod/components/atom/self.dm
index 7389a19f69..b1f469ff79 100644
--- a/code/modules/wiremod/components/atom/self.dm
+++ b/code/modules/wiremod/components/atom/self.dm
@@ -10,7 +10,7 @@
/// The shell this component is attached to.
var/datum/port/output/output
-/obj/item/circuit_component/self/Initialize()
+/obj/item/circuit_component/self/Initialize(mapload)
. = ..()
output = add_output_port("Self", PORT_TYPE_ATOM)
diff --git a/code/modules/wiremod/components/atom/species.dm b/code/modules/wiremod/components/atom/species.dm
index 9404a37697..2d865c4a73 100644
--- a/code/modules/wiremod/components/atom/species.dm
+++ b/code/modules/wiremod/components/atom/species.dm
@@ -15,7 +15,7 @@
circuit_flags = CIRCUIT_FLAG_INPUT_SIGNAL|CIRCUIT_FLAG_OUTPUT_SIGNAL
-/obj/item/circuit_component/species/Initialize()
+/obj/item/circuit_component/species/Initialize(mapload)
. = ..()
input_port = add_input_port("Organism", PORT_TYPE_ATOM)
diff --git a/code/modules/wiremod/components/hud/bar_overlay.dm b/code/modules/wiremod/components/hud/bar_overlay.dm
index f7ecfb1e1f..c275ab3147 100644
--- a/code/modules/wiremod/components/hud/bar_overlay.dm
+++ b/code/modules/wiremod/components/hud/bar_overlay.dm
@@ -17,7 +17,7 @@
var/overlay_limit = 10
-/obj/item/circuit_component/object_overlay/bar/Initialize()
+/obj/item/circuit_component/object_overlay/bar/Initialize(mapload)
. = ..()
bar_number = add_input_port("Number", PORT_TYPE_NUMBER)
diff --git a/code/modules/wiremod/components/hud/counter_overlay.dm b/code/modules/wiremod/components/hud/counter_overlay.dm
index ecce816e74..83d7acfd11 100644
--- a/code/modules/wiremod/components/hud/counter_overlay.dm
+++ b/code/modules/wiremod/components/hud/counter_overlay.dm
@@ -22,7 +22,7 @@
var/list/numbers = list()
var/counter_appearance
-/obj/item/circuit_component/counter_overlay/Initialize()
+/obj/item/circuit_component/counter_overlay/Initialize(mapload)
. = ..()
counter_number = add_input_port("Displayed Number", PORT_TYPE_NUMBER)
diff --git a/code/modules/wiremod/components/hud/object_overlay.dm b/code/modules/wiremod/components/hud/object_overlay.dm
index 2cab4a57fa..3b20e4f551 100644
--- a/code/modules/wiremod/components/hud/object_overlay.dm
+++ b/code/modules/wiremod/components/hud/object_overlay.dm
@@ -29,7 +29,7 @@
var/list/active_overlays = list()
var/list/options_map
-/obj/item/circuit_component/object_overlay/Initialize()
+/obj/item/circuit_component/object_overlay/Initialize(mapload)
. = ..()
target = add_input_port("Target", PORT_TYPE_ATOM)
diff --git a/code/modules/wiremod/components/hud/target_intercept.dm b/code/modules/wiremod/components/hud/target_intercept.dm
index 2a19264b00..d04dc2c946 100644
--- a/code/modules/wiremod/components/hud/target_intercept.dm
+++ b/code/modules/wiremod/components/hud/target_intercept.dm
@@ -16,7 +16,7 @@
var/obj/item/organ/cyberimp/bci/bci
var/intercept_cooldown = 1 SECONDS
-/obj/item/circuit_component/target_intercept/Initialize()
+/obj/item/circuit_component/target_intercept/Initialize(mapload)
. = ..()
trigger_input = add_input_port("Activate", PORT_TYPE_SIGNAL)
trigger_output = add_output_port("Triggered", PORT_TYPE_SIGNAL)
diff --git a/code/modules/wiremod/components/list/concat.dm b/code/modules/wiremod/components/list/concat.dm
index 32e16758d3..6574f1f02d 100644
--- a/code/modules/wiremod/components/list/concat.dm
+++ b/code/modules/wiremod/components/list/concat.dm
@@ -17,7 +17,7 @@
var/datum/port/output/output
circuit_flags = CIRCUIT_FLAG_INPUT_SIGNAL|CIRCUIT_FLAG_OUTPUT_SIGNAL
-/obj/item/circuit_component/concat_list/Initialize()
+/obj/item/circuit_component/concat_list/Initialize(mapload)
. = ..()
list_port = add_input_port("List", PORT_TYPE_LIST)
separator = add_input_port("Seperator", PORT_TYPE_STRING)
diff --git a/code/modules/wiremod/components/list/get_column.dm b/code/modules/wiremod/components/list/get_column.dm
index 07ff7ef11b..2b35951b1e 100644
--- a/code/modules/wiremod/components/list/get_column.dm
+++ b/code/modules/wiremod/components/list/get_column.dm
@@ -17,7 +17,7 @@
/// The filtered list
var/datum/port/output/output_list
-/obj/item/circuit_component/get_column/Initialize()
+/obj/item/circuit_component/get_column/Initialize(mapload)
. = ..()
received_table = add_input_port("Input", PORT_TYPE_TABLE)
column_name = add_input_port("Column Name", PORT_TYPE_STRING)
diff --git a/code/modules/wiremod/components/list/index.dm b/code/modules/wiremod/components/list/index.dm
index d51a60e2bf..2aaf1b6629 100644
--- a/code/modules/wiremod/components/list/index.dm
+++ b/code/modules/wiremod/components/list/index.dm
@@ -15,7 +15,7 @@
var/datum/port/output/output
circuit_flags = CIRCUIT_FLAG_INPUT_SIGNAL|CIRCUIT_FLAG_OUTPUT_SIGNAL
-/obj/item/circuit_component/index/Initialize()
+/obj/item/circuit_component/index/Initialize(mapload)
. = ..()
index_port = add_input_port("Index", PORT_TYPE_ANY)
list_port = add_input_port("List", PORT_TYPE_LIST)
diff --git a/code/modules/wiremod/components/list/index_table.dm b/code/modules/wiremod/components/list/index_table.dm
index 376bc46465..502073cf74 100644
--- a/code/modules/wiremod/components/list/index_table.dm
+++ b/code/modules/wiremod/components/list/index_table.dm
@@ -17,7 +17,7 @@
/// The filtered list
var/datum/port/output/output_list
-/obj/item/circuit_component/index_table/Initialize()
+/obj/item/circuit_component/index_table/Initialize(mapload)
. = ..()
received_table = add_input_port("Input", PORT_TYPE_TABLE)
target_index = add_input_port("Index", PORT_TYPE_NUMBER)
diff --git a/code/modules/wiremod/components/list/list_literal.dm b/code/modules/wiremod/components/list/list_literal.dm
index e9bd741606..c9dc3ea03d 100644
--- a/code/modules/wiremod/components/list/list_literal.dm
+++ b/code/modules/wiremod/components/list/list_literal.dm
@@ -51,7 +51,7 @@
index -= 1
entry_ports += add_input_port("Index [index+1]", PORT_TYPE_ANY, index = index+1)
-/obj/item/circuit_component/list_literal/Initialize()
+/obj/item/circuit_component/list_literal/Initialize(mapload)
. = ..()
set_list_size(default_list_size)
list_output = add_output_port("Value", PORT_TYPE_LIST)
diff --git a/code/modules/wiremod/components/list/select.dm b/code/modules/wiremod/components/list/select.dm
index 8eba84d034..19ddb51c03 100644
--- a/code/modules/wiremod/components/list/select.dm
+++ b/code/modules/wiremod/components/list/select.dm
@@ -35,7 +35,7 @@
)
comparison_options = add_option_port("Comparison Options", component_options)
-/obj/item/circuit_component/select/Initialize()
+/obj/item/circuit_component/select/Initialize(mapload)
. = ..()
received_table = add_input_port("Input", PORT_TYPE_TABLE)
column_name = add_input_port("Column Name", PORT_TYPE_STRING)
diff --git a/code/modules/wiremod/components/list/split.dm b/code/modules/wiremod/components/list/split.dm
index 27af366fac..444157342c 100644
--- a/code/modules/wiremod/components/list/split.dm
+++ b/code/modules/wiremod/components/list/split.dm
@@ -18,7 +18,7 @@
circuit_flags = CIRCUIT_FLAG_INPUT_SIGNAL|CIRCUIT_FLAG_OUTPUT_SIGNAL
-/obj/item/circuit_component/split/Initialize()
+/obj/item/circuit_component/split/Initialize(mapload)
. = ..()
input_port = add_input_port("Input", PORT_TYPE_STRING)
separator = add_input_port("Seperator", PORT_TYPE_STRING)
diff --git a/code/modules/wiremod/components/math/arithmetic.dm b/code/modules/wiremod/components/math/arithmetic.dm
index 77c8b93b25..9d7361c66b 100644
--- a/code/modules/wiremod/components/math/arithmetic.dm
+++ b/code/modules/wiremod/components/math/arithmetic.dm
@@ -37,7 +37,7 @@
)
arithmetic_option = add_option_port("Arithmetic Option", component_options)
-/obj/item/circuit_component/arithmetic/Initialize()
+/obj/item/circuit_component/arithmetic/Initialize(mapload)
. = ..()
arithmetic_ports = list()
for(var/port_id in 1 to input_port_amount)
diff --git a/code/modules/wiremod/components/math/length.dm b/code/modules/wiremod/components/math/length.dm
index d6702c9b5d..14bc58c998 100644
--- a/code/modules/wiremod/components/math/length.dm
+++ b/code/modules/wiremod/components/math/length.dm
@@ -14,7 +14,7 @@
var/datum/port/output/output
circuit_flags = CIRCUIT_FLAG_INPUT_SIGNAL|CIRCUIT_FLAG_OUTPUT_SIGNAL
-/obj/item/circuit_component/length/Initialize()
+/obj/item/circuit_component/length/Initialize(mapload)
. = ..()
input_port = add_input_port("Input", PORT_TYPE_ANY)
diff --git a/code/modules/wiremod/components/math/not.dm b/code/modules/wiremod/components/math/not.dm
index 6a55024b54..ad8a1d6791 100644
--- a/code/modules/wiremod/components/math/not.dm
+++ b/code/modules/wiremod/components/math/not.dm
@@ -14,7 +14,7 @@
var/datum/port/output/result
circuit_flags = CIRCUIT_FLAG_INPUT_SIGNAL|CIRCUIT_FLAG_OUTPUT_SIGNAL
-/obj/item/circuit_component/not/Initialize()
+/obj/item/circuit_component/not/Initialize(mapload)
. = ..()
input_port = add_input_port("Input", PORT_TYPE_ANY)
diff --git a/code/modules/wiremod/components/math/random.dm b/code/modules/wiremod/components/math/random.dm
index 548376ed8d..7e428f5ea6 100644
--- a/code/modules/wiremod/components/math/random.dm
+++ b/code/modules/wiremod/components/math/random.dm
@@ -17,7 +17,7 @@
/// The result from the output
var/datum/port/output/output
-/obj/item/circuit_component/random/Initialize()
+/obj/item/circuit_component/random/Initialize(mapload)
. = ..()
minimum = add_input_port("Minimum", PORT_TYPE_NUMBER, FALSE)
maximum = add_input_port("Maximum", PORT_TYPE_NUMBER, FALSE)
diff --git a/code/modules/wiremod/components/ntnet/ntnet_receive.dm b/code/modules/wiremod/components/ntnet/ntnet_receive.dm
index 0bcb1c5ed0..30bbaee855 100644
--- a/code/modules/wiremod/components/ntnet/ntnet_receive.dm
+++ b/code/modules/wiremod/components/ntnet/ntnet_receive.dm
@@ -20,7 +20,7 @@
var/datum/port/input/option/data_type_options
var/datum/port/input/option/secondary_data_type_options
-/obj/item/circuit_component/ntnet_receive/Initialize()
+/obj/item/circuit_component/ntnet_receive/Initialize(mapload)
. = ..()
data_package = add_output_port("Data Package", PORT_TYPE_ANY)
secondary_package = add_output_port("Secondary Package", PORT_TYPE_ANY)
diff --git a/code/modules/wiremod/components/ntnet/ntnet_send.dm b/code/modules/wiremod/components/ntnet/ntnet_send.dm
index 33d9370fae..44316f80ee 100644
--- a/code/modules/wiremod/components/ntnet/ntnet_send.dm
+++ b/code/modules/wiremod/components/ntnet/ntnet_send.dm
@@ -16,7 +16,7 @@
var/datum/port/input/secondary_package
var/datum/port/input/enc_key
-/obj/item/circuit_component/ntnet_send/Initialize()
+/obj/item/circuit_component/ntnet_send/Initialize(mapload)
. = ..()
data_package = add_input_port("Data Package", PORT_TYPE_ANY)
secondary_package = add_input_port("Secondary Package", PORT_TYPE_ANY)
diff --git a/code/modules/wiremod/components/sensors/pressuresensor.dm b/code/modules/wiremod/components/sensors/pressuresensor.dm
index 25f39b9c8e..f02642151a 100644
--- a/code/modules/wiremod/components/sensors/pressuresensor.dm
+++ b/code/modules/wiremod/components/sensors/pressuresensor.dm
@@ -12,7 +12,7 @@
/// The result from the output
var/datum/port/output/result
-/obj/item/circuit_component/pressuresensor/Initialize()
+/obj/item/circuit_component/pressuresensor/Initialize(mapload)
. = ..()
result = add_output_port("Result", PORT_TYPE_NUMBER)
diff --git a/code/modules/wiremod/components/sensors/tempsensor.dm b/code/modules/wiremod/components/sensors/tempsensor.dm
index bb2410ce77..caa76a8cb8 100644
--- a/code/modules/wiremod/components/sensors/tempsensor.dm
+++ b/code/modules/wiremod/components/sensors/tempsensor.dm
@@ -12,7 +12,7 @@
/// The result from the output
var/datum/port/output/result
-/obj/item/circuit_component/tempsensor/Initialize()
+/obj/item/circuit_component/tempsensor/Initialize(mapload)
. = ..()
result = add_output_port("Result", PORT_TYPE_NUMBER)
diff --git a/code/modules/wiremod/components/string/concat.dm b/code/modules/wiremod/components/string/concat.dm
index 55dd5530a1..10fcb1dd05 100644
--- a/code/modules/wiremod/components/string/concat.dm
+++ b/code/modules/wiremod/components/string/concat.dm
@@ -14,7 +14,7 @@
var/datum/port/output/output
circuit_flags = CIRCUIT_FLAG_INPUT_SIGNAL|CIRCUIT_FLAG_OUTPUT_SIGNAL
-/obj/item/circuit_component/concat/Initialize()
+/obj/item/circuit_component/concat/Initialize(mapload)
. = ..()
for(var/port_id in 1 to input_port_amount)
var/letter = ascii2text(text2ascii("A") + (port_id-1))
diff --git a/code/modules/wiremod/components/string/textcase.dm b/code/modules/wiremod/components/string/textcase.dm
index a021074433..9a01ae8765 100644
--- a/code/modules/wiremod/components/string/textcase.dm
+++ b/code/modules/wiremod/components/string/textcase.dm
@@ -27,7 +27,7 @@
)
textcase_options = add_option_port("Textcase Options", component_options)
-/obj/item/circuit_component/textcase/Initialize()
+/obj/item/circuit_component/textcase/Initialize(mapload)
. = ..()
input_port = add_input_port("Input", PORT_TYPE_STRING)
output = add_output_port("Output", PORT_TYPE_STRING)
diff --git a/code/modules/wiremod/components/string/tonumber.dm b/code/modules/wiremod/components/string/tonumber.dm
index 6012ab339d..6083940a16 100644
--- a/code/modules/wiremod/components/string/tonumber.dm
+++ b/code/modules/wiremod/components/string/tonumber.dm
@@ -15,7 +15,7 @@
circuit_flags = CIRCUIT_FLAG_INPUT_SIGNAL|CIRCUIT_FLAG_OUTPUT_SIGNAL
-/obj/item/circuit_component/tonumber/Initialize()
+/obj/item/circuit_component/tonumber/Initialize(mapload)
. = ..()
input_port = add_input_port("Input", PORT_TYPE_STRING)
diff --git a/code/modules/wiremod/components/string/tostring.dm b/code/modules/wiremod/components/string/tostring.dm
index bc044f157a..a4d30682ba 100644
--- a/code/modules/wiremod/components/string/tostring.dm
+++ b/code/modules/wiremod/components/string/tostring.dm
@@ -17,7 +17,7 @@
var/max_range = 5
-/obj/item/circuit_component/tostring/Initialize()
+/obj/item/circuit_component/tostring/Initialize(mapload)
. = ..()
input_port = add_input_port("Input", PORT_TYPE_ANY)
diff --git a/code/modules/wiremod/components/utility/clock.dm b/code/modules/wiremod/components/utility/clock.dm
index 4c570b0ec5..093aac90f4 100644
--- a/code/modules/wiremod/components/utility/clock.dm
+++ b/code/modules/wiremod/components/utility/clock.dm
@@ -17,7 +17,7 @@
. = ..()
. += create_ui_notice("Clock Interval: [DisplayTimeText(COMP_CLOCK_DELAY)]", "orange", "clock")
-/obj/item/circuit_component/clock/Initialize()
+/obj/item/circuit_component/clock/Initialize(mapload)
. = ..()
on = add_input_port("On", PORT_TYPE_NUMBER)
diff --git a/code/modules/wiremod/components/utility/delay.dm b/code/modules/wiremod/components/utility/delay.dm
index 37fa5a79f6..46d9e6f081 100644
--- a/code/modules/wiremod/components/utility/delay.dm
+++ b/code/modules/wiremod/components/utility/delay.dm
@@ -18,7 +18,7 @@
/// The output of the signal
var/datum/port/output/output
-/obj/item/circuit_component/delay/Initialize()
+/obj/item/circuit_component/delay/Initialize(mapload)
. = ..()
delay_amount = add_input_port("Delay", PORT_TYPE_NUMBER, FALSE)
trigger = add_input_port("Trigger", PORT_TYPE_SIGNAL)
diff --git a/code/modules/wiremod/components/utility/getter.dm b/code/modules/wiremod/components/utility/getter.dm
index 7bca3083da..30c3cb2ac1 100644
--- a/code/modules/wiremod/components/utility/getter.dm
+++ b/code/modules/wiremod/components/utility/getter.dm
@@ -26,7 +26,7 @@
variable_name.possible_options = null
return ..()
-/obj/item/circuit_component/getter/Initialize()
+/obj/item/circuit_component/getter/Initialize(mapload)
. = ..()
value = add_output_port("Value", PORT_TYPE_ANY)
diff --git a/code/modules/wiremod/components/utility/router.dm b/code/modules/wiremod/components/utility/router.dm
index 4086392f5b..bf9fdba0e0 100644
--- a/code/modules/wiremod/components/utility/router.dm
+++ b/code/modules/wiremod/components/utility/router.dm
@@ -35,7 +35,7 @@
)
router_options = add_option_port("Router Options", component_options)
-/obj/item/circuit_component/router/Initialize()
+/obj/item/circuit_component/router/Initialize(mapload)
. = ..()
current_type = router_options.value
if(input_port_amount > 1)
diff --git a/code/modules/wiremod/components/utility/setter.dm b/code/modules/wiremod/components/utility/setter.dm
index 614e700798..6b5658645c 100644
--- a/code/modules/wiremod/components/utility/setter.dm
+++ b/code/modules/wiremod/components/utility/setter.dm
@@ -30,7 +30,7 @@
variable_name.possible_options = null
return ..()
-/obj/item/circuit_component/setter/Initialize()
+/obj/item/circuit_component/setter/Initialize(mapload)
. = ..()
input_port = add_input_port("Input", PORT_TYPE_ANY)
trigger = add_input_port("Store", PORT_TYPE_SIGNAL)
diff --git a/code/modules/wiremod/components/utility/typecast.dm b/code/modules/wiremod/components/utility/typecast.dm
index ee204c332e..ebbb687da6 100644
--- a/code/modules/wiremod/components/utility/typecast.dm
+++ b/code/modules/wiremod/components/utility/typecast.dm
@@ -16,7 +16,7 @@
var/current_type
-/obj/item/circuit_component/typecast/Initialize()
+/obj/item/circuit_component/typecast/Initialize(mapload)
. = ..()
current_type = typecast_options.value
input_value = add_input_port("Input", PORT_TYPE_ANY)
diff --git a/code/modules/wiremod/core/component.dm b/code/modules/wiremod/core/component.dm
index 0939debc3c..579ab7645c 100644
--- a/code/modules/wiremod/core/component.dm
+++ b/code/modules/wiremod/core/component.dm
@@ -56,7 +56,7 @@
/obj/item/circuit_component/proc/add_option_port(name, list/list_to_use)
return add_input_port(name, PORT_TYPE_OPTION, port_type = /datum/port/input/option, extra_args = list("possible_options" = list_to_use))
-/obj/item/circuit_component/Initialize()
+/obj/item/circuit_component/Initialize(mapload)
. = ..()
if(name == COMPONENT_DEFAULT_NAME)
name = "[lowertext(display_name)] [COMPONENT_DEFAULT_NAME]"
diff --git a/code/modules/wiremod/core/component_printer.dm b/code/modules/wiremod/core/component_printer.dm
index 7400aafbf2..948ea080e7 100644
--- a/code/modules/wiremod/core/component_printer.dm
+++ b/code/modules/wiremod/core/component_printer.dm
@@ -144,7 +144,7 @@
density = TRUE
-/obj/machinery/debug_component_printer/Initialize()
+/obj/machinery/debug_component_printer/Initialize(mapload)
. = ..()
all_circuit_designs = list()
diff --git a/code/modules/wiremod/core/integrated_circuit.dm b/code/modules/wiremod/core/integrated_circuit.dm
index f69caa7542..b767615e87 100644
--- a/code/modules/wiremod/core/integrated_circuit.dm
+++ b/code/modules/wiremod/core/integrated_circuit.dm
@@ -69,14 +69,14 @@ GLOBAL_LIST_EMPTY_TYPED(integrated_circuits, /obj/item/integrated_circuit)
/// The Y position of the screen. Used for adding components.
var/screen_y = 0
-/obj/item/integrated_circuit/Initialize()
+/obj/item/integrated_circuit/Initialize(mapload)
. = ..()
GLOB.integrated_circuits += src
RegisterSignal(src, COMSIG_ATOM_USB_CABLE_TRY_ATTACH, .proc/on_atom_usb_cable_try_attach)
-/obj/item/integrated_circuit/loaded/Initialize()
+/obj/item/integrated_circuit/loaded/Initialize(mapload)
. = ..()
set_cell(new /obj/item/stock_parts/cell/high(src))
diff --git a/code/modules/wiremod/core/usb_cable.dm b/code/modules/wiremod/core/usb_cable.dm
index df0dec936c..ed0f1053a3 100644
--- a/code/modules/wiremod/core/usb_cable.dm
+++ b/code/modules/wiremod/core/usb_cable.dm
@@ -17,7 +17,7 @@
STOP_PROCESSING(SSobj, src)
return ..()
-/obj/item/usb_cable/Initialize()
+/obj/item/usb_cable/Initialize(mapload)
. = ..()
RegisterSignal(src, COMSIG_MOVABLE_MOVED, .proc/on_moved)
diff --git a/code/modules/wiremod/preset/hello_world.dm b/code/modules/wiremod/preset/hello_world.dm
index 9aee88a300..2b579a0d81 100644
--- a/code/modules/wiremod/preset/hello_world.dm
+++ b/code/modules/wiremod/preset/hello_world.dm
@@ -5,7 +5,7 @@
*/
/obj/item/integrated_circuit/loaded/hello_world
-/obj/item/integrated_circuit/loaded/hello_world/Initialize()
+/obj/item/integrated_circuit/loaded/hello_world/Initialize(mapload)
. = ..()
var/obj/item/circuit_component/speech/speech = new()
add_component(speech)
diff --git a/code/modules/wiremod/preset/speech_relay.dm b/code/modules/wiremod/preset/speech_relay.dm
index 5e5284bdeb..a1e66832c9 100644
--- a/code/modules/wiremod/preset/speech_relay.dm
+++ b/code/modules/wiremod/preset/speech_relay.dm
@@ -5,7 +5,7 @@
*/
/obj/item/integrated_circuit/loaded/speech_relay
-/obj/item/integrated_circuit/loaded/speech_relay/Initialize()
+/obj/item/integrated_circuit/loaded/speech_relay/Initialize(mapload)
. = ..()
var/obj/item/circuit_component/hear/hear = new()
add_component(hear)
diff --git a/code/modules/wiremod/shell/airlock.dm b/code/modules/wiremod/shell/airlock.dm
index b44bb40d02..6c342effa1 100644
--- a/code/modules/wiremod/shell/airlock.dm
+++ b/code/modules/wiremod/shell/airlock.dm
@@ -12,7 +12,7 @@
name = "circuit airlock"
autoclose = FALSE
-/obj/machinery/door/airlock/shell/Initialize()
+/obj/machinery/door/airlock/shell/Initialize(mapload)
. = ..()
AddComponent( \
/datum/component/shell, \
@@ -64,7 +64,7 @@
/// Called when the airlock is unbolted
var/datum/port/output/unbolted
-/obj/item/circuit_component/airlock/Initialize()
+/obj/item/circuit_component/airlock/Initialize(mapload)
. = ..()
// Input Signals
bolt = add_input_port("Bolt", PORT_TYPE_SIGNAL)
diff --git a/code/modules/wiremod/shell/bot.dm b/code/modules/wiremod/shell/bot.dm
index f3c9fcae8d..a7aee6a2c5 100644
--- a/code/modules/wiremod/shell/bot.dm
+++ b/code/modules/wiremod/shell/bot.dm
@@ -12,7 +12,7 @@
light_system = MOVABLE_LIGHT
light_on = FALSE
-/obj/structure/bot/Initialize()
+/obj/structure/bot/Initialize(mapload)
. = ..()
AddComponent( \
/datum/component/shell, \
@@ -30,7 +30,7 @@
/// The user who used the bot
var/datum/port/output/entity
-/obj/item/circuit_component/bot/Initialize()
+/obj/item/circuit_component/bot/Initialize(mapload)
. = ..()
entity = add_output_port("User", PORT_TYPE_ATOM)
signal = add_output_port("Signal", PORT_TYPE_SIGNAL)
diff --git a/code/modules/wiremod/shell/brain_computer_interface.dm b/code/modules/wiremod/shell/brain_computer_interface.dm
index d288edbc2d..f9723e115c 100644
--- a/code/modules/wiremod/shell/brain_computer_interface.dm
+++ b/code/modules/wiremod/shell/brain_computer_interface.dm
@@ -6,7 +6,7 @@
zone = BODY_ZONE_HEAD
w_class = WEIGHT_CLASS_TINY
-/obj/item/organ/cyberimp/bci/Initialize()
+/obj/item/organ/cyberimp/bci/Initialize(mapload)
. = ..()
AddComponent(/datum/component/shell, list(
@@ -167,7 +167,7 @@
var/datum/weakref/user
-/obj/item/circuit_component/bci_core/Initialize()
+/obj/item/circuit_component/bci_core/Initialize(mapload)
. = ..()
message = add_input_port("Message", PORT_TYPE_STRING)
@@ -341,7 +341,7 @@
COOLDOWN_DECLARE(message_cooldown)
-/obj/machinery/bci_implanter/Initialize()
+/obj/machinery/bci_implanter/Initialize(mapload)
. = ..()
occupant_typecache = typecacheof(/mob/living/carbon)
diff --git a/code/modules/wiremod/shell/compact_remote.dm b/code/modules/wiremod/shell/compact_remote.dm
index d5fe33e285..526567a92a 100644
--- a/code/modules/wiremod/shell/compact_remote.dm
+++ b/code/modules/wiremod/shell/compact_remote.dm
@@ -14,7 +14,7 @@
light_system = MOVABLE_LIGHT_DIRECTIONAL
light_on = FALSE
-/obj/item/compact_remote/Initialize()
+/obj/item/compact_remote/Initialize(mapload)
. = ..()
AddComponent(/datum/component/shell, list(
new /obj/item/circuit_component/compact_remote()
@@ -29,7 +29,7 @@
/// The user who used the bot
var/datum/port/output/entity
-/obj/item/circuit_component/compact_remote/Initialize()
+/obj/item/circuit_component/compact_remote/Initialize(mapload)
. = ..()
entity = add_output_port("User", PORT_TYPE_ATOM)
signal = add_output_port("Signal", PORT_TYPE_SIGNAL)
diff --git a/code/modules/wiremod/shell/controller.dm b/code/modules/wiremod/shell/controller.dm
index d3af0ca88e..9539a0521a 100644
--- a/code/modules/wiremod/shell/controller.dm
+++ b/code/modules/wiremod/shell/controller.dm
@@ -15,7 +15,7 @@
light_system = MOVABLE_LIGHT_DIRECTIONAL
light_on = FALSE
-/obj/item/controller/Initialize()
+/obj/item/controller/Initialize(mapload)
. = ..()
AddComponent(/datum/component/shell, list(
new /obj/item/circuit_component/controller()
@@ -33,7 +33,7 @@
/// The entity output
var/datum/port/output/entity
-/obj/item/circuit_component/controller/Initialize()
+/obj/item/circuit_component/controller/Initialize(mapload)
. = ..()
entity = add_output_port("User", PORT_TYPE_ATOM)
signal = add_output_port("Signal", PORT_TYPE_SIGNAL)
diff --git a/code/modules/wiremod/shell/drone.dm b/code/modules/wiremod/shell/drone.dm
index d091f20b65..0133f35230 100644
--- a/code/modules/wiremod/shell/drone.dm
+++ b/code/modules/wiremod/shell/drone.dm
@@ -11,7 +11,7 @@
light_system = MOVABLE_LIGHT_DIRECTIONAL
light_on = FALSE
-/mob/living/circuit_drone/Initialize()
+/mob/living/circuit_drone/Initialize(mapload)
. = ..()
AddComponent(/datum/component/shell, list(
new /obj/item/circuit_component/bot_circuit()
@@ -44,7 +44,7 @@
/// Delay between each movement
var/move_delay = 0.2 SECONDS
-/obj/item/circuit_component/bot_circuit/Initialize()
+/obj/item/circuit_component/bot_circuit/Initialize(mapload)
. = ..()
north = add_input_port("Move North", PORT_TYPE_SIGNAL)
east = add_input_port("Move East", PORT_TYPE_SIGNAL)
diff --git a/code/modules/wiremod/shell/moneybot.dm b/code/modules/wiremod/shell/moneybot.dm
index fe3cd30733..133f0a5e59 100644
--- a/code/modules/wiremod/shell/moneybot.dm
+++ b/code/modules/wiremod/shell/moneybot.dm
@@ -22,7 +22,7 @@
stored_money += to_add
SEND_SIGNAL(src, COMSIG_MONEYBOT_ADD_MONEY, to_add)
-/obj/structure/money_bot/Initialize()
+/obj/structure/money_bot/Initialize(mapload)
. = ..()
AddComponent(/datum/component/shell, list(
new /obj/item/circuit_component/money_bot(),
@@ -49,7 +49,7 @@
var/obj/structure/money_bot/attached_bot
-/obj/item/circuit_component/money_dispenser/Initialize()
+/obj/item/circuit_component/money_dispenser/Initialize(mapload)
. = ..()
dispense_amount = add_input_port("Amount", PORT_TYPE_NUMBER)
on_fail = add_output_port("On Failed", PORT_TYPE_SIGNAL)
@@ -93,7 +93,7 @@
/// The person who input the money
var/datum/port/output/entity
-/obj/item/circuit_component/money_bot/Initialize()
+/obj/item/circuit_component/money_bot/Initialize(mapload)
. = ..()
total_money = add_output_port("Total Money", PORT_TYPE_NUMBER)
money_input = add_output_port("Last Input Money", PORT_TYPE_NUMBER)
diff --git a/code/modules/wiremod/shell/scanner.dm b/code/modules/wiremod/shell/scanner.dm
index fd46910914..3120ac192a 100644
--- a/code/modules/wiremod/shell/scanner.dm
+++ b/code/modules/wiremod/shell/scanner.dm
@@ -14,7 +14,7 @@
light_system = MOVABLE_LIGHT_DIRECTIONAL
light_on = FALSE
-/obj/item/wiremod_scanner/Initialize()
+/obj/item/wiremod_scanner/Initialize(mapload)
. = ..()
AddComponent(/datum/component/shell, list(
new /obj/item/circuit_component/wiremod_scanner()
@@ -35,7 +35,7 @@
-/obj/item/circuit_component/wiremod_scanner/Initialize()
+/obj/item/circuit_component/wiremod_scanner/Initialize(mapload)
. = ..()
attacker = add_output_port("Scanner", PORT_TYPE_ATOM)
attacking = add_output_port("Scanned Entity", PORT_TYPE_ATOM)
diff --git a/code/modules/wiremod/shell/scanner_gate.dm b/code/modules/wiremod/shell/scanner_gate.dm
index 312c690bd8..b8484f3182 100644
--- a/code/modules/wiremod/shell/scanner_gate.dm
+++ b/code/modules/wiremod/shell/scanner_gate.dm
@@ -5,7 +5,7 @@
icon_state = "scangate_black"
var/scanline_timer
-/obj/structure/scanner_gate_shell/Initialize()
+/obj/structure/scanner_gate_shell/Initialize(mapload)
. = ..()
set_scanline("passive")
var/static/list/loc_connections = list(
@@ -45,7 +45,7 @@
var/obj/structure/scanner_gate_shell/attached_gate
-/obj/item/circuit_component/scanner_gate/Initialize()
+/obj/item/circuit_component/scanner_gate/Initialize(mapload)
. = ..()
scanned = add_output_port("Scanned Object", PORT_TYPE_ATOM)
diff --git a/code/modules/wiremod/shell/server.dm b/code/modules/wiremod/shell/server.dm
index 5e5a44f897..57c4945e2c 100644
--- a/code/modules/wiremod/shell/server.dm
+++ b/code/modules/wiremod/shell/server.dm
@@ -13,7 +13,7 @@
light_system = MOVABLE_LIGHT
light_on = FALSE
-/obj/structure/server/Initialize()
+/obj/structure/server/Initialize(mapload)
. = ..()
AddComponent(/datum/component/shell, null, SHELL_CAPACITY_VERY_LARGE, SHELL_FLAG_REQUIRE_ANCHOR|SHELL_FLAG_USB_PORT)
diff --git a/code/modules/zombie/items.dm b/code/modules/zombie/items.dm
index f208cafe4e..931c467c47 100644
--- a/code/modules/zombie/items.dm
+++ b/code/modules/zombie/items.dm
@@ -19,7 +19,7 @@
wound_bonus = -30
bare_wound_bonus = 15
-/obj/item/zombie_hand/Initialize()
+/obj/item/zombie_hand/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT)
@@ -39,7 +39,7 @@
else
if(istype(target, /obj)) //do far more damage to non mobs so we can get through airlocks
var/obj/target_object = target
- target_object.take_damage(force * 3, BRUTE, "melee", 0)
+ target_object.take_damage(force * 3, BRUTE, MELEE, 0)
else if(isliving(target))
if(ishuman(target))
try_to_zombie_infect(target)
diff --git a/code/modules/zombie/organs.dm b/code/modules/zombie/organs.dm
index a724d26314..d8908ee21a 100644
--- a/code/modules/zombie/organs.dm
+++ b/code/modules/zombie/organs.dm
@@ -13,7 +13,7 @@
var/revive_time_max = 700
var/timer_id
-/obj/item/organ/zombie_infection/Initialize()
+/obj/item/organ/zombie_infection/Initialize(mapload)
. = ..()
if(iscarbon(loc))
Insert(loc)
diff --git a/config/entries/admin.txt b/config/entries/admin.txt
index e583790b82..d7932bbe13 100644
--- a/config/entries/admin.txt
+++ b/config/entries/admin.txt
@@ -81,3 +81,17 @@ GUEST_BAN
## Allow admin hrefs that don't use the new token system, will eventually be removed
DEBUG_ADMIN_HREFS
+
+##
+## Those deadmin configs will lock admins this way, so it's not really recommended unless really needed
+##
+## Uncomment to automatically deadmin players when the game starts.
+#AUTO_DEADMIN_PLAYERS
+
+## Uncomment to automatically deadmin antagonists when they gain the role.
+#AUTO_DEADMIN_ANTAGONISTS
+
+## Uncomment to automatically deadmin specific role sets when a player joins the game.
+#AUTO_DEADMIN_HEADS
+#AUTO_DEADMIN_SECURITY
+#AUTO_DEADMIN_SILICONS
diff --git a/config/entries/fetish_content.txt b/config/entries/fetish_content.txt
index 6fabd095d8..1bc9ebe968 100644
--- a/config/entries/fetish_content.txt
+++ b/config/entries/fetish_content.txt
@@ -12,6 +12,10 @@ BREASTS_CUPS_PREFS h
PENIS_MIN_INCHES_PREFS 1
PENIS_MAX_INCHES_PREFS 24
+## Minimum and maximum limits for butt size from the character creation menu. If there's bigger butt sizes out there, change the max accordingly.
+BUTT_MIN_SIZE_PREFS 1
+BUTT_MAX_SIZE_PREFS 5
+
## Body size configs, the feature will be disabled if both min and max have the same value.
BODY_SIZE_MIN 0.9
BODY_SIZE_MAX 1.25
diff --git a/config/entries/logging.txt b/config/entries/logging.txt
index 6483a371f0..57588d7cd3 100644
--- a/config/entries/logging.txt
+++ b/config/entries/logging.txt
@@ -19,6 +19,9 @@ LOG_SUSPICIOUS_LOGIN
## log game actions (start of round, results, etc.)
LOG_GAME
+## log mecha actions
+LOG_MECHA
+
## log player votes
LOG_VOTE
diff --git a/config/entries/server.txt b/config/entries/server.txt
index 2b905810cd..0187c641ef 100644
--- a/config/entries/server.txt
+++ b/config/entries/server.txt
@@ -4,9 +4,19 @@
## Server name: This appears at the top of the screen in-game and in the BYOND hub. Uncomment and replace 'tgstation' with the name of your choice.
# SERVERNAME tgstation
+## Community short-name: This appears in parentheses after the server's active station name
+# COMMUNITYSHORTNAME tg???
+
+## Community link: Requires a community short-name defined. Attaches a link to the community's shortname, and requires a short-name defined.
+## You could alternatively just add raw HTML to the above, but this is more newbie-friendly
+# COMMUNITYLINK http://crouton.net
+
## Server tagline: This will appear right below the server's title.
# SERVERTAGLINE A generic TG-based server
+## Use tagline strings: Uncomment to have the server's tagline be randomly selected from taglines.txt
+# USETAGLINESTRINGS
+
## Server SQL name: This is the name used to identify the server to the SQL DB, distinct from SERVERNAME as it must be at most 32 characters.
# SERVERSQLNAME tgstation
diff --git a/config/server_taglines.txt b/config/server_taglines.txt
new file mode 100644
index 0000000000..53da7c8fa3
--- /dev/null
+++ b/config/server_taglines.txt
@@ -0,0 +1 @@
+Fill in your own community quotes and memery here!
diff --git a/dependencies.sh b/dependencies.sh
index 0a27dd623f..7943782996 100644
--- a/dependencies.sh
+++ b/dependencies.sh
@@ -21,7 +21,7 @@ export SPACEMAN_DMM_VERSION=suite-1.7
export PYTHON_VERSION=3.7.9
# Auxmos git tag
-export AUXMOS_VERSION=v0.3.0
+export AUXMOS_VERSION=v1.1.1
# Extools git tag
export EXTOOLS_VERSION=v0.0.7
diff --git a/html/changelogs/archive/2022-04.yml b/html/changelogs/archive/2022-04.yml
new file mode 100644
index 0000000000..64f12efa8f
--- /dev/null
+++ b/html/changelogs/archive/2022-04.yml
@@ -0,0 +1,54 @@
+2022-04-08:
+ SandPoot:
+ - bugfix: Make changelogs actually get added!
+2022-04-09:
+ AnthurK:
+ - bugfix: Fixes bots trying to path through dense corners.
+ Arturlang:
+ - rscadd: Adds stasis beds and related mechanics
+ - rscdel: Removed mapped in sleepers from station maps. Shuttles have it but centcomm
+ doesn't.
+2022-04-10:
+ SandPoot:
+ - bugfix: The action button for leaving mechs actually works!
+ - bugfix: The medigax no longer uses gygax armor plates to be built!
+ - bugfix: The firefighter ripley is now visible during construction.
+ - bugfix: Medigaxes can actually be built now.
+ Solaris-Shade:
+ - bugfix: fixed a few projectile lines
+ - code_imp: changed a large block of the projectile code
+ - refactor: refactored most of the projectile code
+ tiviplus, lolman360, SandPoot:
+ - refactor: /obj/mecha > /obj/vehicle/sealed/mecha
+2022-04-15:
+ BlueWildrose:
+ - rscadd: Added carcinisoprojection jelly, a limb regrowth chemical made from xenobiology's
+ slime mutation toxin & blood. Don't overdose!
+2022-04-16:
+ SandPoot:
+ - bugfix: Progressbars no longer stay after completing/failing their task.
+2022-04-17:
+ Putnam3145:
+ - bugfix: 'Fires are back on Linux tweak: Linux-only: plasma and trit fires work
+ as before'
+ SandPoot:
+ - bugfix: Fixes testicle shape saving.
+ - code_imp: Initialize(mapload)
+ - rscadd: Added deadminning preferences (only affects admins).
+ maxspells:
+ - expansion: Surgery steps play sound effects appropriate to the step
+2022-04-28:
+ Putnam3145:
+ - rscadd: 'Methane-based planetary atmospheres tweak: Advanced fire extinguishers
+ can now remove non-plasma flammable gases'
+ - rscadd: Nitric oxide (NO), with reactions associated
+ - rscadd: A maximum temperature above which all gases break down into quark matter,
+ which will break down into gases again if it goes below that temperature.
+ SandPoot:
+ - rscadd: The stasis beds can now be researched alongside being built.
+ - balance: Maps are now half stasis beds and half sleepers... only in medbay.
+ - bugfix: The stasis bed's examine now works.
+ - refactor: Generally updates stasis bed's code and adds cooldown defines (i learnt
+ how to use them)
+ timothyteakettle:
+ - spellcheck: trashcan quirk now uses correct grammar
diff --git a/html/changelogs/archive/2022-05.yml b/html/changelogs/archive/2022-05.yml
new file mode 100644
index 0000000000..92a19f4e1c
--- /dev/null
+++ b/html/changelogs/archive/2022-05.yml
@@ -0,0 +1,40 @@
+2022-05-03:
+ Putnam3145:
+ - bugfix: Round times are accurate now
+ SandPoot:
+ - bugfix: Actually fixes dragging storage items into themself.
+ timothyteakettle:
+ - rscadd: sodium sensitivity quirk
+2022-05-13:
+ Bhijn & Myr:
+ - rscadd: The server's hub tagline now has the option to pull random strings from
+ strings/server_taglines.txt!
+ LiteralMushroom:
+ - rscadd: alter form affects wings
+ - rscadd: Synths get to spark too.
+ SandPoot:
+ - rscadd: Status displays can now be built.
+ - rscadd: AIs can now quickly modify their status displays using an emote (*bsod)!
+ - rscadd: AIs can also modify their status displays by just clicking on the devices
+ (opens a radial wheel)!
+ - refactor: Status displays simply look a lot better now.
+ TomGarou:
+ - rscadd: Added Reprogramming to surgeries via Techweb under Alien surgery and Brainwashing
+ disk
+ - balance: Synths and non Synths can now be brainwashed equally
+ - bugfix: Brainwash surgery not working with synths due to metal heads
+2022-05-14:
+ Putnam3145:
+ - rscadd: Smelly gases (Bromine, methane, ammonia, nitric oxide and stimulum in
+ particular)
+ - rscadd: Easier-to-make-visible gases; gases made visible with this system are
+ bromine and hydrogen (plus nitryl, but that was already visible in the same
+ way)
+ - bugfix: 'Scrubbers scrub chems properly tweak: Air alarms now show all gases,
+ not just ones they''re hardcoded to show tweak: Contaminated now only removes
+ "dangerous" gases (this is actually a consequence of the hardcode reduction)
+ tweak: Water vapor is now counted as DANGEROUS (this makes it included in "contaminated"
+ and adds admin logging when people open water vapor cans)'
+2022-05-17:
+ timothyteakettle:
+ - rscadd: poly alt cloak can now be renamed/dedescriptioned in loadout
diff --git a/html/changelogs/example.yml b/html/changelogs/example.yml
index b0e660681d..f37fc68f54 100644
--- a/html/changelogs/example.yml
+++ b/html/changelogs/example.yml
@@ -11,16 +11,16 @@
# - (fixes bugs)
# wip
# - (work in progress)
-# qol
-# - (quality of life)
+# tweak
+# - (tweaks something)
# soundadd
# - (adds a sound)
# sounddel
# - (removes a sound)
-# rscadd
-# - (adds a feature)
# rscdel
# - (removes a feature)
+# rscadd
+# - (adds a feature)
# imageadd
# - (adds an image or sprite)
# imagedel
@@ -29,6 +29,8 @@
# - (fixes spelling or grammar)
# experiment
# - (experimental change)
+# tgs
+# - (messing around with tgs)
# balance
# - (balance changes)
# code_imp
@@ -41,6 +43,10 @@
# - (makes changes to administrator tools)
# server
# - (miscellaneous changes to server)
+# expansion
+# - (expands something)
+# qol
+# - (quality of life)
#################################
# Your name.
diff --git a/icons/effects/atmospherics.dmi b/icons/effects/atmospherics.dmi
index acf48a0bd0..6c2412c04b 100644
Binary files a/icons/effects/atmospherics.dmi and b/icons/effects/atmospherics.dmi differ
diff --git a/icons/mecha/durand_shield.dmi b/icons/mecha/durand_shield.dmi
new file mode 100644
index 0000000000..0600e352b3
Binary files /dev/null and b/icons/mecha/durand_shield.dmi differ
diff --git a/icons/mecha/mecha.dmi b/icons/mecha/mecha.dmi
index d75ae09c97..17e62c2d9e 100644
Binary files a/icons/mecha/mecha.dmi and b/icons/mecha/mecha.dmi differ
diff --git a/icons/mob/actions/actions_mecha.dmi b/icons/mob/actions/actions_mecha.dmi
index 81c706b22c..071305150e 100644
Binary files a/icons/mob/actions/actions_mecha.dmi and b/icons/mob/actions/actions_mecha.dmi differ
diff --git a/icons/obj/genitals/breasts_onmob.dmi b/icons/obj/genitals/breasts_onmob.dmi
index 3f3bcf5bd7..aa717be8f0 100644
Binary files a/icons/obj/genitals/breasts_onmob.dmi and b/icons/obj/genitals/breasts_onmob.dmi differ
diff --git a/icons/obj/genitals/butt.dmi b/icons/obj/genitals/butt.dmi
new file mode 100644
index 0000000000..304a8424bb
Binary files /dev/null and b/icons/obj/genitals/butt.dmi differ
diff --git a/icons/obj/genitals/butt_onmob.dmi b/icons/obj/genitals/butt_onmob.dmi
new file mode 100644
index 0000000000..95a75fa745
Binary files /dev/null and b/icons/obj/genitals/butt_onmob.dmi differ
diff --git a/icons/obj/genitals/testicles_onmob.dmi b/icons/obj/genitals/testicles_onmob.dmi
index 65eb24268f..febbd5b362 100644
Binary files a/icons/obj/genitals/testicles_onmob.dmi and b/icons/obj/genitals/testicles_onmob.dmi differ
diff --git a/icons/obj/machines/stasis.dmi b/icons/obj/machines/stasis.dmi
new file mode 100644
index 0000000000..21844b0f8d
Binary files /dev/null and b/icons/obj/machines/stasis.dmi differ
diff --git a/icons/obj/statue.dmi b/icons/obj/statue.dmi
index 0fe4f7f539..48368dda28 100644
Binary files a/icons/obj/statue.dmi and b/icons/obj/statue.dmi differ
diff --git a/icons/obj/wallframe.dmi b/icons/obj/wallframe.dmi
index 70149901e3..c447263db5 100644
Binary files a/icons/obj/wallframe.dmi and b/icons/obj/wallframe.dmi differ
diff --git a/modular_citadel/code/modules/client/loadout/neck.dm b/modular_citadel/code/modules/client/loadout/neck.dm
index b07ddf98db..dc7735de2b 100644
--- a/modular_citadel/code/modules/client/loadout/neck.dm
+++ b/modular_citadel/code/modules/client/loadout/neck.dm
@@ -98,7 +98,7 @@
/datum/gear/neck/altpolycloak
name = "Alternate Cloak"
path = /obj/item/clothing/neck/cloak/alt/polychromic
- loadout_flags = LOADOUT_CAN_COLOR_POLYCHROMIC
+ loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION | LOADOUT_CAN_COLOR_POLYCHROMIC
loadout_initial_colors = list("#FFFFFF", "#676767", "#4C4C4C")
/datum/gear/neck/cancloak
diff --git a/modular_citadel/code/modules/clothing/neck.dm b/modular_citadel/code/modules/clothing/neck.dm
index f57e2ae530..9507e65e0e 100644
--- a/modular_citadel/code/modules/clothing/neck.dm
+++ b/modular_citadel/code/modules/clothing/neck.dm
@@ -18,6 +18,6 @@
playsound(owner, 'sound/misc/souldeath.ogg', 100, FALSE)
-/obj/item/clothing/neck/undertale/Initialize()
+/obj/item/clothing/neck/undertale/Initialize(mapload)
..()
AddComponent(/datum/component/souldeath/neck)
diff --git a/modular_citadel/code/modules/clothing/trek.dm b/modular_citadel/code/modules/clothing/trek.dm
index cf422053c7..7272ea6c1a 100644
--- a/modular_citadel/code/modules/clothing/trek.dm
+++ b/modular_citadel/code/modules/clothing/trek.dm
@@ -27,7 +27,7 @@
/obj/item/reagent_containers/glass/bottle/vial,/obj/item/reagent_containers/glass/beaker,
/obj/item/reagent_containers/pill,/obj/item/storage/pill_bottle, /obj/item/restraints/handcuffs,/obj/item/hypospray
)
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0)
/obj/item/clothing/suit/storage/trek/ds9/admiral // Only for adminuz
name = "Admiral Overcoat"
@@ -35,7 +35,7 @@
icon_state = "trek_ds9_coat_adm"
item_state = "trek_ds9_coat_adm"
permeability_coefficient = 0.01
- armor = list("melee" = 50, "bullet" = 50, "laser" = 50,"energy" = 50, "bomb" = 50, "bio" = 50, "rad" = 50, "fire" = 50, "acid" = 50)
+ armor = list(MELEE = 50, BULLET = 50, LASER = 50,ENERGY = 50, BOMB = 50, BIO = 50, RAD = 50, FIRE = 50, ACID = 50)
//MODERN ish Joan sqrl sprites. I think
@@ -66,7 +66,7 @@
/obj/item/reagent_containers/glass/beaker,
/obj/item/storage/pill_bottle,
/obj/item/taperecorder)
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0)
var/unbuttoned = FALSE
/obj/item/clothing/suit/storage/fluff/fedcoat/verb/toggle()
@@ -122,7 +122,7 @@
/obj/item/reagent_containers/glass/bottle/vial,/obj/item/reagent_containers/glass/beaker,
/obj/item/reagent_containers/pill,/obj/item/storage/pill_bottle, /obj/item/restraints/handcuffs,/obj/item/hypospray
)
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0)
//Variants
/obj/item/clothing/suit/storage/fluff/modernfedcoat/medsci
@@ -139,7 +139,7 @@
/obj/item/clothing/head/caphat/formal/fedcover
name = "Federation Officer's Cap"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0)
desc = "An officer's cap that demands discipline from the one who wears it."
icon = 'modular_citadel/icons/obj/clothing/trek_item_icon.dmi'
icon_state = "fedcapofficer"
diff --git a/modular_citadel/code/modules/custom_loadout/custom_items.dm b/modular_citadel/code/modules/custom_loadout/custom_items.dm
index b8ee221e73..500db4453f 100644
--- a/modular_citadel/code/modules/custom_loadout/custom_items.dm
+++ b/modular_citadel/code/modules/custom_loadout/custom_items.dm
@@ -66,7 +66,7 @@
blood_overlay_type = "armor"
dog_fashion = /datum/dog_fashion/back
mutantrace_variation = NONE
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0)
/obj/item/lighter/gold
@@ -137,7 +137,7 @@
item_state = "satchel_carrot"
mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
-/obj/item/storage/backpack/satchel/carrot/Initialize()
+/obj/item/storage/backpack/satchel/carrot/Initialize(mapload)
. = ..()
AddComponent(/datum/component/squeak, list('sound/items/toysqueak1.ogg'=1), 50)
diff --git a/modular_citadel/code/modules/eventmaps/Spookystation/JTGSZwork.dm b/modular_citadel/code/modules/eventmaps/Spookystation/JTGSZwork.dm
index 85bbf109bf..a2ccc319d0 100644
--- a/modular_citadel/code/modules/eventmaps/Spookystation/JTGSZwork.dm
+++ b/modular_citadel/code/modules/eventmaps/Spookystation/JTGSZwork.dm
@@ -179,7 +179,7 @@
heavyfootstep = FOOTSTEP_GENERIC_HEAVY
var/turfverb = "dig out"
-/turf/open/floor/spooktime/nonspooktimegrass/Initialize() //Init rng icon.
+/turf/open/floor/spooktime/nonspooktimegrass/Initialize(mapload) //Init rng icon.
. = ..()
icon_state = "grass_[rand(1,3)]"
@@ -264,7 +264,7 @@
var/obj/structure/flora/turfDebris = null
-/turf/open/floor/spooktime/spooktimegrass/Initialize() //Considering adding dirtgen here too.
+/turf/open/floor/spooktime/spooktimegrass/Initialize(mapload) //Considering adding dirtgen here too.
. = ..()
if(prob(1))
icon_state = "smoothdarkdirt" //Sometimes we can be dirt.
@@ -590,7 +590,7 @@ GLOBAL_LIST_EMPTY(rain_sounds)
var/dyndial_cycle_ticker = 0 //How many
var/playchime = 1 //Procs will reset their vars.
-/obj/machinery/grandfatherclock/Initialize()
+/obj/machinery/grandfatherclock/Initialize(mapload)
. = ..()
update_icon() //We get it done
@@ -1030,7 +1030,7 @@ GLOBAL_LIST_EMPTY(rain_sounds)
w_class = WEIGHT_CLASS_SMALL
var/open = FALSE
-/obj/item/umbrella/Initialize()
+/obj/item/umbrella/Initialize(mapload)
..()
color = RANDOM_COLOUR
update_icon()
diff --git a/modular_citadel/code/modules/festive/wheelchair.dm b/modular_citadel/code/modules/festive/wheelchair.dm
index b4a1acd81c..80f9156cdd 100644
--- a/modular_citadel/code/modules/festive/wheelchair.dm
+++ b/modular_citadel/code/modules/festive/wheelchair.dm
@@ -1,4 +1,4 @@
-/obj/vehicle/sealed/vectorcraft/rideable/Initialize()
+/obj/vehicle/sealed/vectorcraft/rideable/Initialize(mapload)
. = ..()
/obj/vehicle/sealed/vectorcraft/rideable/post_unbuckle_mob(mob/living/M)
@@ -45,7 +45,7 @@
icon_state = "wheelchair"
layer = OBJ_LAYER
max_integrity = 100
- armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 30) //Wheelchairs aren't super tough yo
+ armor = list(MELEE = 10, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 10, BIO = 0, RAD = 0, FIRE = 20, ACID = 30) //Wheelchairs aren't super tough yo
canmove = TRUE
density = FALSE //Thought I couldn't fix this one easily, phew
diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/enlargement.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/enlargement.dm
index fb770d75d8..1296e7d686 100644
--- a/modular_citadel/code/modules/reagents/chemistry/reagents/enlargement.dm
+++ b/modular_citadel/code/modules/reagents/chemistry/reagents/enlargement.dm
@@ -37,7 +37,7 @@
if(volume >= 15) //To prevent monkey breast farms
var/turf/T = get_turf(M)
var/obj/item/organ/genital/breasts/B = new /obj/item/organ/genital/breasts(T)
- M.visible_message("A pair of breasts suddenly fly out of the [M]!")
+ M.visible_message("A pair of breasts suddenly fly out of [M]!")
var/T2 = get_random_station_turf()
M.adjustBruteLoss(25)
M.DefaultCombatKnockdown(50)
@@ -175,7 +175,7 @@
if(volume >= 15) //to prevent monkey penis farms
var/turf/T = get_turf(M)
var/obj/item/organ/genital/penis/P = new /obj/item/organ/genital/penis(T)
- M.visible_message("A penis suddenly flies out of the [M]!")
+ M.visible_message("A penis suddenly flies out of [M]!")
var/T2 = get_random_station_turf()
M.adjustBruteLoss(25)
M.DefaultCombatKnockdown(50)
@@ -283,3 +283,87 @@
else if(P.length < optimal_size)
P.modify_size(0.1, 0, optimal_size)
return ..()
+
+
+
+///Ass enhancer
+/datum/reagent/fermi/butt_enlarger
+ name = "Denbu Tincture" //on Hyper it was 'Denbu Draft' but this makes it more consistent with the rectifying chemical down below.
+ description = "A mixture of natural vitamins and valentines plant extract, causing butt enlargement in humanoids."
+ color = "#e8ff1b"
+ taste_description = "butter with a sweet aftertaste" //pass me the butter, OM NOM
+ overdose_threshold = 17
+ can_synth = FALSE
+
+/datum/reagent/fermi/butt_enlarger/on_mob_metabolize(mob/living/carbon/M)
+ . = ..()
+ if(!ishuman(M)) //leaving the monkey feature for those desperate for goon level comedy.
+ if(volume >= 15) //to prevent monkey butt farms
+ var/turf/T = get_turf(M)
+ var/obj/item/organ/genital/butt/B = new /obj/item/organ/genital/butt(T)
+ M.visible_message("An ass suddenly flies out of [M]!")
+ var/T2 = get_random_station_turf()
+ M.adjustBruteLoss(25)
+ M.DefaultCombatKnockdown(50)
+ M.Stun(50)
+ B.throw_at(T2, 8, 1)
+ M.reagents.del_reagent(type)
+ return
+ var/mob/living/carbon/human/H = M
+ if(!H.getorganslot(ORGAN_SLOT_BUTT) && H.emergent_genital_call())
+ H.genital_override = TRUE
+
+/datum/reagent/fermi/butt_enlarger/on_mob_life(mob/living/carbon/M) //Increases butt size
+ if(!ishuman(M))
+ return ..()
+ var/mob/living/carbon/human/H = M
+ if(!(H.client?.prefs.cit_toggles & BUTT_ENLARGEMENT))
+ return ..()
+ var/obj/item/organ/genital/butt/B = M.getorganslot(ORGAN_SLOT_BUTT)
+ if(!B) //If they don't have a butt. Give them one!
+ var/obj/item/organ/genital/butt/nB = new
+ nB.Insert(M)
+ if(nB)
+ if(M.dna.species.use_skintones && M.dna.features["genitals_use_skintone"])
+ nB.color = SKINTONE2HEX(H.skin_tone)
+ else if(M.dna.features["butt_color"])
+ nB.color = "#[M.dna.features["butt_color"]]"
+ else
+ nB.color = SKINTONE2HEX(H.skin_tone)
+ nB.size = 1
+ to_chat(M, "Your ass cheeks bulge outwards and feel more plush.")
+ M.reagents.remove_reagent(type, 5)
+ B = nB
+ //If they have, increase size.
+ if(B.size_cached < BUTT_SIZE_MAX) //just in case
+ B.modify_size(0.05)
+ ..()
+
+/datum/reagent/fermi/AEsmaller_hypo //"BEsmaller" already exists so using "AE" instead, A is for ass.
+ name = "Rectify tincture"
+ color = "#e8ff1b"
+ taste_description = "butter"
+ description = "A medicine used to treat organomegaly in a patient's ass."
+ metabolization_rate = 0.5
+ can_synth = TRUE
+
+/datum/reagent/fermi/AEsmaller_hypo/on_mob_metabolize(mob/living/M)
+ . = ..()
+ if(!ishuman(M))
+ return
+ var/mob/living/carbon/human/H = M
+ if(!H.getorganslot(ORGAN_SLOT_BUTT) && H.dna.features["has_butt"])
+ H.give_genital(/obj/item/organ/genital/butt)
+
+/datum/reagent/fermi/AEsmaller_hypo/on_mob_life(mob/living/carbon/M)
+ var/obj/item/organ/genital/butt/B = M.getorganslot(ORGAN_SLOT_BUTT)
+ if(!B)
+ return ..()
+ var/optimal_size = M.dna.features["butt_size"]
+ if(!optimal_size)//Fast fix for those who don't want it.
+ B.modify_size(-0.2)
+ else if(B.size > optimal_size)
+ B.modify_size(-0.1, optimal_size)
+ else if(B.size < optimal_size)
+ B.modify_size(0.1, 0, optimal_size)
+ return ..()
diff --git a/modular_citadel/code/modules/reagents/objects/clothes.dm b/modular_citadel/code/modules/reagents/objects/clothes.dm
index b6391ba82d..9b3b63d5af 100644
--- a/modular_citadel/code/modules/reagents/objects/clothes.dm
+++ b/modular_citadel/code/modules/reagents/objects/clothes.dm
@@ -6,7 +6,7 @@
icon = 'icons/obj/clothing/hats.dmi'
icon_state = "cowboy"
desc = "A synthesized hat. You feel compelled to keep it on all times."
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
+ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0)
//item_flags = NODROP //Tips their hat!
/obj/item/clothing/head/hattip/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags)
diff --git a/modular_citadel/code/modules/vectorcrafts/vectorcraft.dm b/modular_citadel/code/modules/vectorcrafts/vectorcraft.dm
index bbb0ff86e8..399a1c5f06 100644
--- a/modular_citadel/code/modules/vectorcrafts/vectorcraft.dm
+++ b/modular_citadel/code/modules/vectorcrafts/vectorcraft.dm
@@ -35,7 +35,7 @@
var/mob/living/carbon/human/driver
-/obj/vehicle/sealed/vectorcraft/Initialize()
+/obj/vehicle/sealed/vectorcraft/Initialize(mapload)
..()
i_m_acell = max_acceleration
i_m_decell = max_deceleration
diff --git a/modular_citadel/code/modules/vectorcrafts/vectortruck.dm b/modular_citadel/code/modules/vectorcrafts/vectortruck.dm
index ef02584510..c46a81df59 100644
--- a/modular_citadel/code/modules/vectorcrafts/vectortruck.dm
+++ b/modular_citadel/code/modules/vectorcrafts/vectortruck.dm
@@ -47,7 +47,7 @@
var/weewoo = FALSE
var/weewoocount = 0
-/obj/vehicle/sealed/vectorcraft/boot/ambulance/Initialize()
+/obj/vehicle/sealed/vectorcraft/boot/ambulance/Initialize(mapload)
. = ..()
Sl = new /obj/machinery/sleeper
diff --git a/sound/items/handling/screwdriver_drop.ogg b/sound/items/handling/screwdriver_drop.ogg
new file mode 100644
index 0000000000..d460fd0aed
Binary files /dev/null and b/sound/items/handling/screwdriver_drop.ogg differ
diff --git a/sound/items/handling/screwdriver_pickup.ogg b/sound/items/handling/screwdriver_pickup.ogg
new file mode 100644
index 0000000000..368f1bfd27
Binary files /dev/null and b/sound/items/handling/screwdriver_pickup.ogg differ
diff --git a/sound/items/taperecorder/tape_flip.ogg b/sound/items/taperecorder/tape_flip.ogg
new file mode 100644
index 0000000000..fae3e07373
Binary files /dev/null and b/sound/items/taperecorder/tape_flip.ogg differ
diff --git a/sound/items/taperecorder/taperecorder_close.ogg b/sound/items/taperecorder/taperecorder_close.ogg
new file mode 100644
index 0000000000..ab9f521c5f
Binary files /dev/null and b/sound/items/taperecorder/taperecorder_close.ogg differ
diff --git a/sound/items/taperecorder/taperecorder_hiss_mid.ogg b/sound/items/taperecorder/taperecorder_hiss_mid.ogg
new file mode 100644
index 0000000000..50ef4f2171
Binary files /dev/null and b/sound/items/taperecorder/taperecorder_hiss_mid.ogg differ
diff --git a/sound/items/taperecorder/taperecorder_hiss_start.ogg b/sound/items/taperecorder/taperecorder_hiss_start.ogg
new file mode 100644
index 0000000000..fa57041a72
Binary files /dev/null and b/sound/items/taperecorder/taperecorder_hiss_start.ogg differ
diff --git a/sound/items/taperecorder/taperecorder_open.ogg b/sound/items/taperecorder/taperecorder_open.ogg
new file mode 100644
index 0000000000..7b7110fa58
Binary files /dev/null and b/sound/items/taperecorder/taperecorder_open.ogg differ
diff --git a/sound/items/taperecorder/taperecorder_play.ogg b/sound/items/taperecorder/taperecorder_play.ogg
new file mode 100644
index 0000000000..1bf4d7a3bd
Binary files /dev/null and b/sound/items/taperecorder/taperecorder_play.ogg differ
diff --git a/sound/items/taperecorder/taperecorder_print.ogg b/sound/items/taperecorder/taperecorder_print.ogg
new file mode 100644
index 0000000000..7912d08dc9
Binary files /dev/null and b/sound/items/taperecorder/taperecorder_print.ogg differ
diff --git a/sound/items/taperecorder/taperecorder_stop.ogg b/sound/items/taperecorder/taperecorder_stop.ogg
new file mode 100644
index 0000000000..a3b0f65992
Binary files /dev/null and b/sound/items/taperecorder/taperecorder_stop.ogg differ
diff --git a/sound/mecha/mech_shield_deflect.ogg b/sound/mecha/mech_shield_deflect.ogg
new file mode 100644
index 0000000000..5c1970d872
Binary files /dev/null and b/sound/mecha/mech_shield_deflect.ogg differ
diff --git a/sound/mecha/mech_shield_drop.ogg b/sound/mecha/mech_shield_drop.ogg
new file mode 100644
index 0000000000..21c6cb5edb
Binary files /dev/null and b/sound/mecha/mech_shield_drop.ogg differ
diff --git a/sound/mecha/mech_shield_raise.ogg b/sound/mecha/mech_shield_raise.ogg
new file mode 100644
index 0000000000..65ad70ad14
Binary files /dev/null and b/sound/mecha/mech_shield_raise.ogg differ
diff --git a/sound/surgery/cautery1.ogg b/sound/surgery/cautery1.ogg
new file mode 100644
index 0000000000..fa714439e5
Binary files /dev/null and b/sound/surgery/cautery1.ogg differ
diff --git a/sound/surgery/cautery2.ogg b/sound/surgery/cautery2.ogg
new file mode 100644
index 0000000000..334c98f6cd
Binary files /dev/null and b/sound/surgery/cautery2.ogg differ
diff --git a/sound/surgery/hemostat1.ogg b/sound/surgery/hemostat1.ogg
new file mode 100644
index 0000000000..d68c82620d
Binary files /dev/null and b/sound/surgery/hemostat1.ogg differ
diff --git a/sound/surgery/organ1.ogg b/sound/surgery/organ1.ogg
new file mode 100644
index 0000000000..d6cdd6271f
Binary files /dev/null and b/sound/surgery/organ1.ogg differ
diff --git a/sound/surgery/organ2.ogg b/sound/surgery/organ2.ogg
new file mode 100644
index 0000000000..9199c7d1a2
Binary files /dev/null and b/sound/surgery/organ2.ogg differ
diff --git a/sound/surgery/retractor1.ogg b/sound/surgery/retractor1.ogg
new file mode 100644
index 0000000000..de7c31199e
Binary files /dev/null and b/sound/surgery/retractor1.ogg differ
diff --git a/sound/surgery/retractor2.ogg b/sound/surgery/retractor2.ogg
new file mode 100644
index 0000000000..620fafe035
Binary files /dev/null and b/sound/surgery/retractor2.ogg differ
diff --git a/sound/surgery/saw.ogg b/sound/surgery/saw.ogg
new file mode 100644
index 0000000000..8e7a47f0fa
Binary files /dev/null and b/sound/surgery/saw.ogg differ
diff --git a/sound/surgery/scalpel1.ogg b/sound/surgery/scalpel1.ogg
new file mode 100644
index 0000000000..6c0fe5dad9
Binary files /dev/null and b/sound/surgery/scalpel1.ogg differ
diff --git a/sound/surgery/scalpel2.ogg b/sound/surgery/scalpel2.ogg
new file mode 100644
index 0000000000..4976722393
Binary files /dev/null and b/sound/surgery/scalpel2.ogg differ
diff --git a/tgstation.dme b/tgstation.dme
index 70b88e8afd..00a8286bdc 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -73,6 +73,7 @@
#include "code\__DEFINES\materials.dm"
#include "code\__DEFINES\maths.dm"
#include "code\__DEFINES\MC.dm"
+#include "code\__DEFINES\mecha.dm"
#include "code\__DEFINES\melee.dm"
#include "code\__DEFINES\menu.dm"
#include "code\__DEFINES\misc.dm"
@@ -614,6 +615,7 @@
#include "code\datums\diseases\brainrot.dm"
#include "code\datums\diseases\cold.dm"
#include "code\datums\diseases\cold9.dm"
+#include "code\datums\diseases\crabcancer.dm"
#include "code\datums\diseases\dna_spread.dm"
#include "code\datums\diseases\fake_gbs.dm"
#include "code\datums\diseases\flu.dm"
@@ -924,6 +926,7 @@
#include "code\game\machinery\Sleeper.dm"
#include "code\game\machinery\slotmachine.dm"
#include "code\game\machinery\spaceheater.dm"
+#include "code\game\machinery\stasis.dm"
#include "code\game\machinery\status_display.dm"
#include "code\game\machinery\suit_storage_unit.dm"
#include "code\game\machinery\syndicatebeacon.dm"
@@ -1010,37 +1013,6 @@
#include "code\game\machinery\telecomms\machines\receiver.dm"
#include "code\game\machinery\telecomms\machines\relay.dm"
#include "code\game\machinery\telecomms\machines\server.dm"
-#include "code\game\mecha\mech_bay.dm"
-#include "code\game\mecha\mech_fabricator.dm"
-#include "code\game\mecha\mecha.dm"
-#include "code\game\mecha\mecha_actions.dm"
-#include "code\game\mecha\mecha_construction_paths.dm"
-#include "code\game\mecha\mecha_control_console.dm"
-#include "code\game\mecha\mecha_defense.dm"
-#include "code\game\mecha\mecha_parts.dm"
-#include "code\game\mecha\mecha_topic.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\five_stars.dm"
-#include "code\game\mecha\combat\gygax.dm"
-#include "code\game\mecha\combat\honker.dm"
-#include "code\game\mecha\combat\marauder.dm"
-#include "code\game\mecha\combat\neovgre.dm"
-#include "code\game\mecha\combat\phazon.dm"
-#include "code\game\mecha\combat\reticence.dm"
-#include "code\game\mecha\equipment\mecha_equipment.dm"
-#include "code\game\mecha\equipment\tools\medical_tools.dm"
-#include "code\game\mecha\equipment\tools\mining_tools.dm"
-#include "code\game\mecha\equipment\tools\other_tools.dm"
-#include "code\game\mecha\equipment\tools\work_tools.dm"
-#include "code\game\mecha\equipment\weapons\mecha_ammo.dm"
-#include "code\game\mecha\equipment\weapons\weapons.dm"
-#include "code\game\mecha\medical\medical.dm"
-#include "code\game\mecha\medical\medigax.dm"
-#include "code\game\mecha\medical\odysseus.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\items.dm"
@@ -1831,6 +1803,7 @@
#include "code\modules\arousal\genitals.dm"
#include "code\modules\arousal\genitals_sprite_accessories.dm"
#include "code\modules\arousal\organs\breasts.dm"
+#include "code\modules\arousal\organs\butt.dm"
#include "code\modules\arousal\organs\penis.dm"
#include "code\modules\arousal\organs\testicles.dm"
#include "code\modules\arousal\organs\vagina.dm"
@@ -2627,6 +2600,7 @@
#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\smell.dm"
#include "code\modules\mob\living\stamina_buffer.dm"
#include "code\modules\mob\living\status_procs.dm"
#include "code\modules\mob\living\taste.dm"
@@ -2765,6 +2739,7 @@
#include "code\modules\mob\living\silicon\ai\ai_defense.dm"
#include "code\modules\mob\living\silicon\ai\ai_portrait_picker.dm"
#include "code\modules\mob\living\silicon\ai\death.dm"
+#include "code\modules\mob\living\silicon\ai\emote.dm"
#include "code\modules\mob\living\silicon\ai\examine.dm"
#include "code\modules\mob\living\silicon\ai\laws.dm"
#include "code\modules\mob\living\silicon\ai\life.dm"
@@ -3614,6 +3589,7 @@
#include "code\modules\surgery\advanced\necrotic_revival.dm"
#include "code\modules\surgery\advanced\pacification.dm"
#include "code\modules\surgery\advanced\revival.dm"
+#include "code\modules\surgery\advanced\robot_brainwashing.dm"
#include "code\modules\surgery\advanced\toxichealing.dm"
#include "code\modules\surgery\advanced\viral_bonding.dm"
#include "code\modules\surgery\advanced\bioware\bioware.dm"
@@ -3717,6 +3693,37 @@
#include "code\modules\vehicles\wheelchair.dm"
#include "code\modules\vehicles\cars\car.dm"
#include "code\modules\vehicles\cars\clowncar.dm"
+#include "code\modules\vehicles\mecha\_mecha.dm"
+#include "code\modules\vehicles\mecha\mech_bay.dm"
+#include "code\modules\vehicles\mecha\mech_fabricator.dm"
+#include "code\modules\vehicles\mecha\mech_melee_attack.dm"
+#include "code\modules\vehicles\mecha\mecha_actions.dm"
+#include "code\modules\vehicles\mecha\mecha_construction_paths.dm"
+#include "code\modules\vehicles\mecha\mecha_control_console.dm"
+#include "code\modules\vehicles\mecha\mecha_defense.dm"
+#include "code\modules\vehicles\mecha\mecha_parts.dm"
+#include "code\modules\vehicles\mecha\mecha_topic.dm"
+#include "code\modules\vehicles\mecha\mecha_wreckage.dm"
+#include "code\modules\vehicles\mecha\combat\combat.dm"
+#include "code\modules\vehicles\mecha\combat\durand.dm"
+#include "code\modules\vehicles\mecha\combat\gygax.dm"
+#include "code\modules\vehicles\mecha\combat\honker.dm"
+#include "code\modules\vehicles\mecha\combat\marauder.dm"
+#include "code\modules\vehicles\mecha\combat\medigax.dm"
+#include "code\modules\vehicles\mecha\combat\neovgre.dm"
+#include "code\modules\vehicles\mecha\combat\phazon.dm"
+#include "code\modules\vehicles\mecha\combat\reticence.dm"
+#include "code\modules\vehicles\mecha\equipment\mecha_equipment.dm"
+#include "code\modules\vehicles\mecha\equipment\tools\medical_tools.dm"
+#include "code\modules\vehicles\mecha\equipment\tools\mining_tools.dm"
+#include "code\modules\vehicles\mecha\equipment\tools\other_tools.dm"
+#include "code\modules\vehicles\mecha\equipment\tools\weapon_bay.dm"
+#include "code\modules\vehicles\mecha\equipment\tools\work_tools.dm"
+#include "code\modules\vehicles\mecha\equipment\weapons\mecha_ammo.dm"
+#include "code\modules\vehicles\mecha\equipment\weapons\weapons.dm"
+#include "code\modules\vehicles\mecha\medical\odysseus.dm"
+#include "code\modules\vehicles\mecha\working\ripley.dm"
+#include "code\modules\vehicles\mecha\working\working.dm"
#include "code\modules\vending\_vending.dm"
#include "code\modules\vending\assist.dm"
#include "code\modules\vending\autodrobe.dm"
diff --git a/tgui/packages/tgui/interfaces/Changelog.js b/tgui/packages/tgui/interfaces/Changelog.js
index 56a94fdda7..6e6febb2a8 100644
--- a/tgui/packages/tgui/interfaces/Changelog.js
+++ b/tgui/packages/tgui/interfaces/Changelog.js
@@ -18,25 +18,24 @@ import yaml from 'js-yaml';
const icons = {
bugfix: { icon: 'bug', color: 'green' },
wip: { icon: 'hammer', color: 'orange' },
- qol: { icon: 'hand-holding-heart', color: 'green' },
+ tweak: { icon: 'wrench', color: 'green' },
soundadd: { icon: 'tg-sound-plus', color: 'green' },
sounddel: { icon: 'tg-sound-minus', color: 'red' },
- add: { icon: 'check-circle', color: 'green' },
- expansion: { icon: 'check-circle', color: 'green' },
- rscadd: { icon: 'check-circle', color: 'green' },
rscdel: { icon: 'times-circle', color: 'red' },
+ rscadd: { icon: 'check-circle', color: 'green' },
imageadd: { icon: 'tg-image-plus', color: 'green' },
imagedel: { icon: 'tg-image-minus', color: 'red' },
spellcheck: { icon: 'spell-check', color: 'green' },
experiment: { icon: 'radiation', color: 'yellow' },
+ tgs: { icon: 'toolbox', color: 'purple' },
balance: { icon: 'balance-scale-right', color: 'yellow' },
code_imp: { icon: 'code', color: 'green' },
refactor: { icon: 'tools', color: 'green' },
config: { icon: 'cogs', color: 'purple' },
admin: { icon: 'user-shield', color: 'purple' },
server: { icon: 'server', color: 'purple' },
- tgs: { icon: 'toolbox', color: 'purple' },
- tweak: { icon: 'wrench', color: 'green' },
+ expansion: { icon: 'check-circle', color: 'green' },
+ qol: { icon: 'hand-holding-heart', color: 'green' },
unknown: { icon: 'info-circle', color: 'label' },
};
diff --git a/tools/WebhookProcessor/github_webhook_processor.php b/tools/WebhookProcessor/github_webhook_processor.php
index da7e8445e5..506921487f 100644
--- a/tools/WebhookProcessor/github_webhook_processor.php
+++ b/tools/WebhookProcessor/github_webhook_processor.php
@@ -832,6 +832,9 @@ function checkchangelog($payload, $compile = true) {
$currentchangelogblock[] = array('type' => 'balance', 'body' => $item);
}
break;
+ case 'tgs':
+ $currentchangelogblock[] = array('type' => 'tgs', 'body' => $item);
+ break;
case 'code_imp':
case 'code':
if($item != 'changed some code'){
diff --git a/tools/ci/check_changelogs.sh b/tools/ci/check_changelogs.sh
index d90c93e35b..6bcd3514d4 100755
--- a/tools/ci/check_changelogs.sh
+++ b/tools/ci/check_changelogs.sh
@@ -1,5 +1,5 @@
#!/bin/bash
set -euo pipefail
-md5sum -c - <<< "4d783933c74290b3a219068790b2046f *html/changelogs/example.yml"
+md5sum -c - <<< "f7e6ca6705adbc0eb85fc381221557c4 *html/changelogs/example.yml"
python3 tools/ss13_genchangelog.py html/changelogs
diff --git a/tools/ss13_genchangelog.py b/tools/ss13_genchangelog.py
index b1f41ed5ae..a83b7ab3ac 100644
--- a/tools/ss13_genchangelog.py
+++ b/tools/ss13_genchangelog.py
@@ -46,22 +46,24 @@ all_changelog_entries = {}
validPrefixes = [
'bugfix',
'wip',
- 'qol',
+ 'tweak',
'soundadd',
'sounddel',
- 'rscadd',
'rscdel',
+ 'rscadd',
'imageadd',
'imagedel',
- 'expansion',
'spellcheck',
'experiment',
+ 'tgs',
'balance',
'code_imp',
'refactor',
'config',
'admin',
- 'server'
+ 'server',
+ 'expansion',
+ 'qol'
]
def dictToTuples(inp):
|