diff --git a/_maps/map_files/MetaStation.v39K.dmm b/_maps/map_files/MetaStation.v39K.dmm
index 036beee3a6f..18d69f234ca 100644
--- a/_maps/map_files/MetaStation.v39K.dmm
+++ b/_maps/map_files/MetaStation.v39K.dmm
@@ -8921,7 +8921,7 @@
"dpC" = (/obj/structure/rack,/obj/item/stack/cable_coil{pixel_x = -1; pixel_y = -3},/obj/item/weapon/wrench,/obj/item/device/flashlight/seclite,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"})
"dpD" = (/obj/machinery/door/airlock/maintenance{name = "Mining Station Maintenance"; req_access_txt = "54"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/mine/west_outpost)
"dpE" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating{tag = "icon-panelscorched"; icon_state = "panelscorched"},/area/maintenance/aft{name = "Aft Maintenance"})
-"dpF" = (/obj/structure/closet/crate{icon_state = "crateopen"; opened = 1},/obj/item/weapon/ore/clown,/turf/simulated/floor/airless,/area/space)
+"dpF" = (/obj/structure/closet/crate{icon_state = "crateopen"; opened = 1},/obj/item/weapon/ore/bananium,/turf/simulated/floor/airless,/area/space)
"dpG" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating{tag = "icon-platingdmg2"; icon_state = "platingdmg2"},/area/maintenance/aft{name = "Aft Maintenance"})
"dpH" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/mine/production)
"dpI" = (/obj/structure/disposalpipe/junction{icon_state = "pipe-j1"; dir = 4},/turf/simulated/floor{dir = 4; icon_state = "whitehall"},/area/medical/medbay3{name = "Medbay Aft"})
@@ -8972,7 +8972,7 @@
"dqB" = (/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored)
"dqC" = (/obj/machinery/door/airlock{id_tag = "miningdorm2"; name = "Room 2"},/turf/simulated/floor{dir = 2; icon_state = "carpet"},/area/mine/living_quarters)
"dqD" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/mine/living_quarters)
-"dqE" = (/obj/structure/closet/crate,/obj/item/weapon/ore/clown,/obj/item/weapon/ore/clown,/obj/item/weapon/ore/clown,/obj/item/weapon/ore/clown,/obj/item/weapon/ore/clown,/turf/simulated/floor/airless,/area/space)
+"dqE" = (/obj/structure/closet/crate,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/turf/simulated/floor/airless,/area/space)
"dqF" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/mine/west_outpost)
"dqG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/toxins/mixing{name = "\improper Toxins Lab"})
"dqH" = (/obj/structure/disposalpipe/segment,/obj/structure/sign/deathsposal,/turf/simulated/wall,/area/mine/living_quarters)
@@ -8993,7 +8993,7 @@
"dqW" = (/obj/structure/table,/obj/machinery/microwave,/turf/simulated/floor,/area/mine/west_outpost)
"dqX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/mine/west_outpost)
"dqY" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"; dir = 8},/turf/space,/area/space)
-"dqZ" = (/obj/item/weapon/ore/clown,/turf/simulated/floor/airless,/area/space)
+"dqZ" = (/obj/item/weapon/ore/bananium,/turf/simulated/floor/airless,/area/space)
"dra" = (/obj/item/weapon/shard{icon_state = "small"},/turf/simulated/floor/plating/asteroid/airless,/area/space)
"drb" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/toxins/mixing{name = "\improper Toxins Lab"})
"drc" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/mine/west_outpost)
@@ -9113,14 +9113,14 @@
"dtm" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor,/area/mine/production)
"dtn" = (/obj/structure/disposalpipe/segment,/obj/structure/table/woodentable/poker,/obj/item/weapon/lighter/zippo,/obj/item/clothing/mask/cigarette/cigar,/turf/simulated/floor/wood,/area/crew_quarters/bar{name = "\improper Maltese Falcon"})
"dto" = (/obj/machinery/hydroponics/constructable,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor,/area/hydroponics)
-"dtp" = (/obj/structure/closet/crate,/obj/item/weapon/ore/clown,/obj/item/weapon/ore/clown,/obj/item/weapon/ore/clown,/obj/item/weapon/ore/clown,/turf/simulated/floor/airless,/area/space)
+"dtp" = (/obj/structure/closet/crate,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/turf/simulated/floor/airless,/area/space)
"dtq" = (/obj/structure/cable,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/power/port_gen/pacman{anchored = 1},/turf/simulated/floor/plating,/area/mine/living_quarters)
"dtr" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"})
"dts" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold{pipe_color = "blue"; dir = 1; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/turf/simulated/floor/plating{icon_plating = "warnplate"; icon_state = "warnplate"},/area/maintenance/aft{name = "Aft Maintenance"})
"dtt" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/maintenance/aft{name = "Aft Maintenance"})
"dtu" = (/obj/structure/plasticflaps,/obj/machinery/conveyor{dir = 2; id = "gulag"},/turf/simulated/floor{icon_state = "floorgrime"; temperature = 273.15},/area/mine/laborcamp)
"dtv" = (/obj/structure/ore_box,/turf/simulated/floor{tag = "icon-asteroidwarning (WEST)"; icon_state = "asteroidwarning"; dir = 8; temperature = 273.15},/area/mine/explored)
-"dtw" = (/obj/structure/closet/crate,/obj/item/weapon/ore/clown,/obj/item/weapon/ore/clown,/obj/item/weapon/ore/clown,/obj/item/weapon/ore/clown,/obj/item/weapon/ore/clown,/obj/item/clothing/shoes/clown_shoes{desc = "These shoes appear var-edited!."; name = "uhangi's shoes"; slowdown = -1},/turf/simulated/floor/airless,/area/space)
+"dtw" = (/obj/structure/closet/crate,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/clothing/shoes/clown_shoes{desc = "These shoes appear var-edited!."; name = "uhangi's shoes"; slowdown = -1},/turf/simulated/floor/airless,/area/space)
"dtx" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"; dir = 8},/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"; dir = 8},/turf/space,/area/space)
"dty" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "swall_f5"; dir = 2},/area/space)
"dtz" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/bluegrid,/area/mine/maintenance)
diff --git a/_maps/map_files/MiniStation/MiniStation.dmm b/_maps/map_files/MiniStation/MiniStation.dmm
index 3a2272ec5b4..f4cf2562df9 100644
--- a/_maps/map_files/MiniStation/MiniStation.dmm
+++ b/_maps/map_files/MiniStation/MiniStation.dmm
@@ -2487,12 +2487,12 @@
"aVQ" = (/turf/simulated/floor/plating/asteroid/airless,/turf/simulated/shuttle/wall{icon_state = "swall_f9"; dir = 2},/area/space)
"aVR" = (/obj/effect/landmark/corpse/clown,/turf/simulated/floor/airless,/area/space)
"aVS" = (/turf/simulated/floor/airless,/area/space)
-"aVT" = (/obj/structure/closet/crate,/obj/item/weapon/ore/clown,/obj/item/weapon/ore/clown,/obj/item/weapon/ore/clown,/obj/item/weapon/ore/clown,/obj/item/weapon/ore/clown,/turf/simulated/floor/airless,/area/space)
-"aVU" = (/obj/structure/closet/crate{icon_state = "crateopen"; opened = 1},/obj/item/weapon/ore/clown,/turf/simulated/floor/airless,/area/space)
+"aVT" = (/obj/structure/closet/crate,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/turf/simulated/floor/airless,/area/space)
+"aVU" = (/obj/structure/closet/crate{icon_state = "crateopen"; opened = 1},/obj/item/weapon/ore/bananium,/turf/simulated/floor/airless,/area/space)
"aVV" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/space)
"aVW" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"; dir = 8},/obj/structure/shuttle/engine/propulsion{icon_state = "burst_r"; dir = 8},/turf/space,/area/space)
"aVX" = (/obj/item/weapon/shard{icon_state = "small"},/turf/simulated/floor/plating/asteroid/airless,/area/space)
-"aVY" = (/obj/item/weapon/ore/clown,/turf/simulated/floor/airless,/area/space)
+"aVY" = (/obj/item/weapon/ore/bananium,/turf/simulated/floor/airless,/area/space)
"aVZ" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"; dir = 8},/turf/space,/area/space)
"aWa" = (/obj/item/weapon/shard{icon_state = "medium"},/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plating/asteroid/airless,/area/space)
"aWb" = (/obj/effect/landmark/corpse/clown{name = "Clown Pilot"},/turf/simulated/floor/airless,/area/space)
@@ -2503,8 +2503,8 @@
"aWg" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "swall_f5"; dir = 2},/area/space)
"aWh" = (/turf/simulated/floor/airless,/turf/simulated/shuttle/wall{icon_state = "swall_f10"; dir = 2},/area/space)
"aWi" = (/obj/item/weapon/pickaxe,/turf/simulated/floor/airless,/area/space)
-"aWj" = (/obj/structure/closet/crate,/obj/item/weapon/ore/clown,/obj/item/weapon/ore/clown,/obj/item/weapon/ore/clown,/obj/item/weapon/ore/clown,/turf/simulated/floor/airless,/area/space)
-"aWk" = (/obj/structure/closet/crate,/obj/item/weapon/ore/clown,/obj/item/weapon/ore/clown,/obj/item/weapon/ore/clown,/obj/item/weapon/ore/clown,/obj/item/weapon/ore/clown,/obj/item/clothing/shoes/clown_shoes{desc = "These shoes appear var-edited!."; name = "uhangi's shoes"; slowdown = -1},/turf/simulated/floor/airless,/area/space)
+"aWj" = (/obj/structure/closet/crate,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/turf/simulated/floor/airless,/area/space)
+"aWk" = (/obj/structure/closet/crate,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/clothing/shoes/clown_shoes{desc = "These shoes appear var-edited!."; name = "uhangi's shoes"; slowdown = -1},/turf/simulated/floor/airless,/area/space)
"aWl" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"; dir = 8},/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"; dir = 8},/turf/space,/area/space)
"aWm" = (/turf/simulated/shuttle/wall{icon_state = "swall_s5"; dir = 2},/area/space)
"aWn" = (/turf/simulated/shuttle/wall{icon_state = "swall_s9"; dir = 2},/area/space)
diff --git a/_maps/map_files/MiniStation/uplink_item.dm b/_maps/map_files/MiniStation/uplink_item.dm
index 8d6d1a3a154..7816f01cf7a 100644
--- a/_maps/map_files/MiniStation/uplink_item.dm
+++ b/_maps/map_files/MiniStation/uplink_item.dm
@@ -24,7 +24,7 @@
..()
cost = 5
-/datum/uplink_item/device_tools/plastic_explosives/New()
+/datum/uplink_item/device_tools/c4/New()
..()
item = null // Disabled
diff --git a/_maps/map_files/tgstation.2.1.3.dmm b/_maps/map_files/tgstation.2.1.3.dmm
index 01ddeaf29ea..d8158b9dcab 100644
--- a/_maps/map_files/tgstation.2.1.3.dmm
+++ b/_maps/map_files/tgstation.2.1.3.dmm
@@ -5663,7 +5663,7 @@
"ceU" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"ceV" = (/obj/structure/disposalpipe/segment,/obj/structure/lattice,/turf/space,/area/space)
"ceW" = (/obj/structure/closet/emcloset,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
-"ceX" = (/obj/structure/closet/crate{icon_state = "crateopen"; opened = 1},/obj/item/weapon/ore/clown,/turf/simulated/floor/mineral/bananium/airless,/area/space)
+"ceX" = (/obj/structure/closet/crate{icon_state = "crateopen"; opened = 1},/obj/item/weapon/ore/bananium,/turf/simulated/floor/mineral/bananium/airless,/area/space)
"ceY" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"ceZ" = (/obj/machinery/atmospherics/pipe/tank/air,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"cfa" = (/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor{dir = 2; icon_state = "bot"},/area/toxins/misc_lab)
@@ -5802,7 +5802,7 @@
"chD" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"chE" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall,/area/maintenance/asmaint2)
"chF" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
-"chG" = (/obj/structure/closet/crate,/obj/item/weapon/ore/clown,/obj/item/weapon/ore/clown,/obj/item/weapon/ore/clown,/obj/item/weapon/ore/clown,/obj/item/weapon/ore/clown,/turf/simulated/floor/mineral/bananium/airless,/area/space)
+"chG" = (/obj/structure/closet/crate,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/turf/simulated/floor/mineral/bananium/airless,/area/space)
"chH" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"chI" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/rack{dir = 1},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"chJ" = (/obj/machinery/door/airlock/maintenance{name = "Research Delivery access"; req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
@@ -5860,7 +5860,7 @@
"ciJ" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"ciK" = (/obj/structure/reagent_dispensers/watertank,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold{pipe_color = "blue"; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"ciL" = (/obj/structure/grille,/obj/structure/window/reinforced/tinted{dir = 1},/obj/structure/window/reinforced/tinted,/obj/structure/window/reinforced/tinted{dir = 4; icon_state = "twindow"},/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
-"ciM" = (/obj/item/weapon/ore/clown,/turf/simulated/floor/mineral/bananium/airless,/area/space)
+"ciM" = (/obj/item/weapon/ore/bananium,/turf/simulated/floor/mineral/bananium/airless,/area/space)
"ciN" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"ciO" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"ciP" = (/obj/item/weapon/paper{info = "The call has gone out! Our ancestral home has been rediscovered! Not a small patch of land, but a true clown nation, a true Clown Planet! We're on our way home at last!"},/turf/simulated/floor/mineral/bananium/airless,/area/space)
@@ -5957,7 +5957,7 @@
"ckC" = (/obj/machinery/atmospherics/binary/pump{dir = 2; icon_state = "intact_on"; name = "Waste Out"; on = 1},/turf/simulated/floor/plating,/area/maintenance/asmaint)
"ckD" = (/obj/structure/transit_tube{icon_state = "N-S"},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/engine/engineering)
"ckE" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
-"ckF" = (/obj/structure/closet/crate,/obj/item/weapon/ore/clown,/obj/item/weapon/ore/clown,/obj/item/weapon/ore/clown,/obj/item/weapon/ore/clown,/turf/simulated/floor/mineral/bananium/airless,/area/space)
+"ckF" = (/obj/structure/closet/crate,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/turf/simulated/floor/mineral/bananium/airless,/area/space)
"ckG" = (/turf/simulated/wall/r_wall,/area/maintenance/starboardsolar)
"ckH" = (/obj/machinery/door/airlock/engineering{name = "Aft Starboard Solar Access"; req_access_txt = "10"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
"ckI" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 0},/turf/simulated/wall/r_wall,/area/maintenance/starboardsolar)
@@ -5992,7 +5992,7 @@
"cll" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; external_pressure_bound = 0; frequency = 1443; icon_state = "in"; id_tag = "air_out"; internal_pressure_bound = 2000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/atmos)
"clm" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint)
"cln" = (/obj/structure/transit_tube{tag = "icon-N-SE"; icon_state = "N-SE"},/turf/space,/area/space)
-"clo" = (/obj/structure/closet/crate,/obj/item/weapon/ore/clown,/obj/item/weapon/ore/clown,/obj/item/weapon/ore/clown,/obj/item/weapon/ore/clown,/obj/item/weapon/ore/clown,/obj/item/clothing/shoes/clown_shoes{desc = "These shoes appear var-edited!."; name = "uhangi's shoes"; slowdown = -1},/turf/simulated/floor/mineral/bananium/airless,/area/space)
+"clo" = (/obj/structure/closet/crate,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/clothing/shoes/clown_shoes{desc = "These shoes appear var-edited!."; name = "uhangi's shoes"; slowdown = -1},/turf/simulated/floor/mineral/bananium/airless,/area/space)
"clp" = (/mob/living/simple_animal/mouse,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"clq" = (/obj/machinery/power/apc{dir = 8; name = "Aft Starboard Solar APC"; pixel_x = -26; pixel_y = 3},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
"clr" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
@@ -6229,25 +6229,31 @@
"cpO" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/table,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/item/clothing/mask/breath{step_x = 0; step_y = 0},/turf/simulated/floor{icon_state = "yellow"},/area/engine/engineering)
"cpP" = (/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/turretid{control_area = "\improper AI Satellite Antechamber"; enabled = 1; icon_state = "control_standby"; name = "Antechamber Turret Control"; pixel_x = 0; pixel_y = -24; req_access = list(65)},/turf/simulated/floor,/area/aisat)
"cpQ" = (/obj/machinery/door_control{id = "Singularity"; name = "Shutters Control"; pixel_x = -25; pixel_y = 0; req_access_txt = "11"},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/engine/engineering)
-"cpR" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/closet/ammunitionlocker,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/ai_monitored/security/armory)
+"cpR" = (/turf/unsimulated/wall,/area/tdome/arena_source)
"cpS" = (/obj/structure/particle_accelerator/fuel_chamber,/turf/simulated/floor/plating,/area/engine/engineering)
"cpT" = (/obj/machinery/door_control{id = "Singularity"; name = "Shutters Control"; pixel_x = 25; pixel_y = 0; req_access_txt = "11"},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/engine/engineering)
+"cpU" = (/obj/structure/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/sneakers/brown,/obj/item/clothing/suit/armor/vest,/obj/item/clothing/head/helmet/swat,/obj/item/weapon/gun/energy/laser,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena_source)
+"cpV" = (/obj/structure/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/sneakers/brown,/obj/item/clothing/suit/armor/vest,/obj/item/clothing/head/helmet/swat,/obj/item/weapon/gun/energy/laser,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena_source)
"cpW" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/mask/gas{pixel_x = 3; pixel_y = 3},/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas{pixel_x = -3; pixel_y = -3},/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/engine/engineering)
"cpX" = (/obj/machinery/light,/turf/simulated/floor,/area/engine/engineering)
+"cpY" = (/obj/machinery/door/poddoor{id = "thunderdome"; name = "Thunderdome Blast Door"},/turf/unsimulated/floor{name = "plating"},/area/tdome/arena_source)
"cpZ" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/simulated/shuttle/wall{icon_state = "swall_f5"; dir = 2},/area/shuttle/escape_pod4/station)
"cqa" = (/turf/simulated/shuttle/wall{icon_state = "swall_s9"; dir = 2},/area/shuttle/escape_pod4/station)
"cqb" = (/obj/structure/lattice,/obj/structure/grille,/turf/space,/area/space)
"cqc" = (/obj/structure/lattice,/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/space,/area/space)
"cqd" = (/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/plating,/area/maintenance/aft)
"cqe" = (/obj/structure/table,/obj/item/stack/sheet/plasteel{amount = 10},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor,/area/engine/engineering)
+"cqf" = (/obj/structure/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/sneakers/brown,/obj/item/clothing/suit/armor/tdome/red,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/energy/sword/red,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena_source)
"cqg" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/external{name = "Engineering External Access"; req_access = null; req_access_txt = "10;13"},/turf/simulated/floor/plating,/area/engine/engineering)
"cqh" = (/obj/machinery/door/poddoor/shutters/preopen{id = "Singularity"; name = "radiation shutters"},/turf/simulated/floor/plating,/area/engine/engineering)
+"cqi" = (/obj/machinery/door/poddoor{id = "thunderdomegen"; name = "General Supply"},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena_source)
"cqj" = (/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = -7},/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = -7},/obj/item/weapon/crowbar,/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/engine/engineering)
"cqk" = (/obj/structure/stool,/turf/simulated/floor,/area/engine/engineering)
"cql" = (/obj/structure/particle_accelerator/power_box,/turf/simulated/floor/plating,/area/engine/engineering)
"cqm" = (/obj/item/weapon/screwdriver,/turf/simulated/floor,/area/engine/engineering)
"cqn" = (/obj/machinery/door/airlock/external{name = "Engineering External Access"; req_access = null; req_access_txt = "10;13"},/turf/simulated/floor/plating,/area/engine/engineering)
"cqo" = (/obj/structure/cable,/turf/simulated/floor/plating/airless,/area/solar/starboard)
+"cqp" = (/turf/simulated/floor,/area/tdome/arena_source)
"cqq" = (/obj/structure/stool/bed/chair,/turf/simulated/floor/plating,/area/maintenance/aft)
"cqr" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft)
"cqs" = (/obj/structure/table,/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = -7},/obj/item/stack/cable_coil,/obj/item/weapon/airlock_electronics,/obj/item/weapon/airlock_electronics,/turf/simulated/floor,/area/engine/engineering)
@@ -6258,6 +6264,9 @@
"cqx" = (/obj/machinery/light/small{dir = 8},/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/engine/engineering)
"cqy" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 32},/turf/simulated/floor/plating,/area/engine/engineering)
"cqz" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/engine/engineering)
+"cqA" = (/turf/simulated/floor{icon_state = "red"; dir = 8},/area/tdome/arena_source)
+"cqB" = (/turf/simulated/floor{icon_state = "green"; dir = 4},/area/tdome/arena_source)
+"cqC" = (/obj/structure/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/sneakers/brown,/obj/item/clothing/suit/armor/tdome/green,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/energy/sword/green,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena_source)
"cqD" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/engine/engineering)
"cqE" = (/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/engine/engineering)
"cqF" = (/obj/structure/particle_accelerator/particle_emitter/left,/turf/simulated/floor/plating,/area/engine/engineering)
@@ -6273,6 +6282,7 @@
"cqP" = (/turf/simulated/floor/plating/airless,/area/solar/starboard)
"cqQ" = (/obj/structure/table,/obj/item/device/taperecorder{pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/aft)
"cqR" = (/obj/structure/table,/obj/item/weapon/storage/box/matches,/obj/item/weapon/storage/fancy/cigarettes,/turf/simulated/floor/plating,/area/maintenance/aft)
+"cqS" = (/turf/simulated/floor/bluegrid,/area/tdome/arena_source)
"cqT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/space)
"cqU" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating/airless,/area/space)
"cqV" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/space)
@@ -6288,6 +6298,7 @@
"crf" = (/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/engine/engineering)
"crg" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/engine/engineering)
"crh" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/engine/engineering)
+"cri" = (/obj/machinery/door/poddoor{id = "thunderdomehea"; name = "Heavy Supply"},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena_source)
"crj" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating/airless,/area/solar/starboard)
"crk" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating/airless,/area/solar/starboard)
"crl" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating/airless,/area/solar/starboard)
@@ -6451,6 +6462,7 @@
"cun" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"cuo" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/brig)
"cup" = (/obj/machinery/door/window/brigdoor{id = "Cell 4"; name = "Cell 4"; req_access_txt = "2"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "red"},/area/security/brig)
+"cuq" = (/obj/machinery/igniter,/turf/simulated/floor,/area/tdome/arena_source)
"cur" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1; name = "thrower_leftnostop"},/turf/space/transit/east/shuttlespace_ew2,/area/space)
"cus" = (/turf/space/transit/east/shuttlespace_ew14,/area/shuttle/escape_pod4/transit)
"cut" = (/turf/space/transit/east/shuttlespace_ew15,/area/shuttle/escape_pod4/transit)
@@ -7045,8 +7057,10 @@
"cFK" = (/obj/structure/stool/bed/chair,/obj/effect/landmark{name = "tdomeobserve"},/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 2},/area/tdome/tdomeobserve)
"cFL" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'FOURTH WALL'."; name = "\improper FOURTH WALL"; pixel_x = -32},/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/area/syndicate_mothership)
"cFM" = (/obj/structure/table,/obj/item/device/aicard,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start)
+"cFN" = (/obj/machinery/flasher{id = "tdomeflash"; name = "Thunderdome Flash"},/turf/simulated/floor/bluegrid,/area/tdome/arena_source)
"cFO" = (/obj/effect/landmark{name = "Syndicate-Spawn"},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/syndicate_mothership)
"cFP" = (/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/syndicate_mothership)
+"cFQ" = (/obj/structure/table,/obj/machinery/door_control{id = "thunderdome"; name = "Main Blast Doors Control"; pixel_y = 0; req_access_txt = "102"},/turf/unsimulated/floor{icon_state = "floor"},/area/tdome/tdomeadmin)
"cFR" = (/obj/structure/mopbucket,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership)
"cFS" = (/turf/unsimulated/wall/fakedoor{name = "Thunderdome"},/area/tdome/tdomeobserve)
"cFT" = (/obj/machinery/computer/security/telescreen,/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 2},/area/tdome/tdomeobserve)
@@ -7071,9 +7085,9 @@
"cGm" = (/obj/structure/dresser,/obj/item/weapon/storage/backpack/satchel,/turf/unsimulated/floor{dir = 9; icon_state = "carpetside"},/area/wizard_station)
"cGn" = (/obj/structure/mirror{pixel_y = 28},/turf/unsimulated/floor{dir = 1; icon_state = "carpetside"},/area/wizard_station)
"cGo" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/wiz,/turf/unsimulated/floor{dir = 5; icon_state = "carpetside"},/area/wizard_station)
-"cGp" = (/turf/unsimulated/wall,/area/tdome)
-"cGq" = (/obj/machinery/igniter,/turf/simulated/floor,/area/tdome)
-"cGr" = (/turf/simulated/floor,/area/tdome)
+"cGp" = (/turf/unsimulated/wall,/area/tdome/arena)
+"cGq" = (/obj/structure/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/sneakers/brown,/obj/item/clothing/suit/armor/vest,/obj/item/clothing/head/helmet/swat,/obj/item/weapon/gun/energy/laser,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena)
+"cGr" = (/obj/structure/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/sneakers/brown,/obj/item/clothing/suit/armor/vest,/obj/item/clothing/head/helmet/swat,/obj/item/weapon/gun/energy/laser,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena)
"cGs" = (/obj/machinery/recharge_station,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start)
"cGt" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start)
"cGu" = (/obj/machinery/atmospherics/pipe/simple,/obj/structure/table,/obj/item/stack/medical/bruise_pack,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start)
@@ -7086,14 +7100,14 @@
"cGB" = (/turf/unsimulated/floor{dir = 8; icon_state = "carpetside"},/area/wizard_station)
"cGC" = (/obj/effect/landmark/start{name = "wizard"},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/wizard_station)
"cGD" = (/turf/unsimulated/floor{dir = 4; icon_state = "carpetside"},/area/wizard_station)
-"cGE" = (/obj/structure/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/sneakers/brown,/obj/item/clothing/suit/armor/tdome/red,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/energy/sword/red,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
-"cGF" = (/obj/machinery/door/poddoor{id = "thunderdomegen"; name = "General Supply"},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
+"cGE" = (/obj/structure/stool/bed/chair/comfy/brown{dir = 1},/turf/unsimulated/floor{icon_state = "redyellowfull"},/area/tdome/tdomeadmin)
+"cGF" = (/obj/machinery/flasher_button{id = "tdomeflash"; pixel_x = 0; pixel_y = 0},/obj/structure/table,/turf/unsimulated/floor{icon_state = "redyellowfull"},/area/tdome/tdomeadmin)
"cGG" = (/obj/effect/landmark{name = "tdome2"},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome2)
-"cGH" = (/obj/machinery/door/poddoor{id = "thunderdome"; name = "Thunderdome Blast Door"},/turf/unsimulated/floor{name = "plating"},/area/tdome)
-"cGI" = (/turf/simulated/floor{icon_state = "red"; dir = 8},/area/tdome)
-"cGJ" = (/turf/simulated/floor{icon_state = "green"; dir = 4},/area/tdome)
+"cGH" = (/obj/structure/table,/obj/machinery/computer/security/telescreen{pixel_y = 0},/turf/unsimulated/floor{icon_state = "redyellowfull"},/area/tdome/tdomeadmin)
+"cGI" = (/obj/machinery/door/poddoor{id = "thunderdomegen"; name = "General Supply"},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena)
+"cGJ" = (/obj/structure/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/sneakers/brown,/obj/item/clothing/suit/armor/tdome/red,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/energy/sword/red,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena)
"cGK" = (/obj/effect/landmark{name = "tdome1"},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome1)
-"cGL" = (/obj/structure/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/sneakers/brown,/obj/item/clothing/suit/armor/tdome/green,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/energy/sword/green,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
+"cGL" = (/turf/simulated/floor,/area/tdome/arena)
"cGM" = (/obj/machinery/door/window{dir = 4; name = "Infirmary"; req_access_txt = "150"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start)
"cGN" = (/obj/machinery/door/window/westright{name = "Tool Storage"; req_access_txt = "150"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start)
"cGO" = (/obj/structure/table,/obj/item/device/sbeacondrop/bomb,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start)
@@ -7111,8 +7125,8 @@
"cHa" = (/obj/structure/stool/bed/chair,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
"cHb" = (/turf/unsimulated/floor{icon_state = "grimy"},/area/wizard_station)
"cHc" = (/obj/machinery/camera{pixel_x = 11; pixel_y = -9; network = list("thunder"); c_tag = "Red Team"},/obj/effect/landmark{name = "tdome2"},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome2)
-"cHd" = (/turf/simulated/floor/bluegrid,/area/tdome)
-"cHe" = (/obj/machinery/flasher{id = "flash"; name = "Thunderdome Flash"},/turf/simulated/floor/bluegrid,/area/tdome)
+"cHd" = (/obj/machinery/door/poddoor{id = "thunderdome"; name = "Thunderdome Blast Door"},/turf/unsimulated/floor{name = "plating"},/area/tdome/arena)
+"cHe" = (/turf/simulated/floor{icon_state = "red"; dir = 8},/area/tdome/arena)
"cHf" = (/obj/machinery/camera{pixel_x = 12; pixel_y = -10; network = list("thunder"); c_tag = "Green Team"},/obj/effect/landmark{name = "tdome1"},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome1)
"cHg" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 6; pixel_y = -5},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start)
"cHh" = (/obj/item/weapon/weldingtool,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start)
@@ -7124,7 +7138,7 @@
"cHn" = (/obj/structure/table/woodentable,/obj/item/weapon/dice/d20,/obj/item/weapon/dice,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
"cHo" = (/obj/structure/rack,/obj/item/clothing/suit/wizrobe/marisa,/obj/item/clothing/shoes/sandal/marisa,/obj/item/clothing/head/wizard/marisa,/obj/item/weapon/staff/broom,/turf/unsimulated/floor{icon_state = "grimy"},/area/wizard_station)
"cHp" = (/obj/structure/rack,/obj/item/clothing/suit/wizrobe/magusblue,/obj/item/clothing/head/wizard/magus,/obj/item/weapon/staff,/turf/unsimulated/floor{icon_state = "grimy"},/area/wizard_station)
-"cHq" = (/obj/machinery/camera{pixel_x = 10; network = list("thunder"); c_tag = "Arena"},/turf/simulated/floor/bluegrid,/area/tdome)
+"cHq" = (/obj/structure/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/sneakers/brown,/obj/item/clothing/suit/armor/tdome/green,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/energy/sword/green,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena)
"cHr" = (/obj/machinery/telecomms/allinone{intercept = 1},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start)
"cHs" = (/obj/effect/landmark{name = "Nuclear-Bomb"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start)
"cHt" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/snacks/chips,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
@@ -7136,7 +7150,7 @@
"cHz" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating,/area/syndicate_station/start)
"cHA" = (/obj/machinery/teleport/station,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start)
"cHB" = (/obj/machinery/teleport/hub/syndicate,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start)
-"cHC" = (/obj/machinery/door/poddoor{id = "thunderdomegen"; name = "General Supply"},/turf/unsimulated/floor{icon_state = "floor"},/area/tdome)
+"cHC" = (/turf/simulated/floor{icon_state = "green"; dir = 4},/area/tdome/arena)
"cHD" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"},/turf/space,/area/syndicate_station/start)
"cHE" = (/obj/structure/shuttle/engine/propulsion,/turf/space,/area/syndicate_station/start)
"cHF" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_r"},/turf/space,/area/syndicate_station/start)
@@ -7148,19 +7162,19 @@
"cHL" = (/obj/structure/table/reinforced,/obj/structure/kitchenspike,/turf/unsimulated/floor{dir = 4; icon_state = "chapel"},/area/wizard_station)
"cHM" = (/obj/structure/table/reinforced,/obj/structure/kitchenspike,/turf/unsimulated/floor{dir = 1; icon_state = "chapel"},/area/wizard_station)
"cHN" = (/obj/effect/decal/cleanable/cobweb2,/obj/structure/showcase{desc = "A strange machine supposedly from another world. The Wizard Federation has been meddling with it for years."; icon_state = "processor"; name = "byond random number generator"},/turf/unsimulated/floor{dir = 4; icon_state = "chapel"},/area/wizard_station)
-"cHO" = (/obj/machinery/door/poddoor{id = "thunderdomehea"; name = "Heavy Supply"},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
+"cHO" = (/obj/machinery/door/poddoor{id = "thunderdomehea"; name = "Heavy Supply"},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena)
"cHP" = (/obj/effect/decal/remains/human,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/wizard_station)
"cHQ" = (/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/wizard_station)
"cHR" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows2"; dir = 1},/area/wizard_station)
"cHS" = (/turf/unsimulated/floor{dir = 8; icon_state = "chapel"},/area/wizard_station)
"cHT" = (/obj/effect/decal/cleanable/blood,/mob/living/carbon/monkey,/turf/unsimulated/floor{icon_state = "chapel"},/area/wizard_station)
"cHU" = (/turf/unsimulated/floor{icon_state = "chapel"},/area/wizard_station)
-"cHV" = (/obj/structure/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/sneakers/brown,/obj/item/clothing/suit/armor/vest,/obj/item/clothing/head/helmet/swat,/obj/item/weapon/gun/energy/laser,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
+"cHV" = (/obj/machinery/igniter,/turf/simulated/floor,/area/tdome/arena)
"cHW" = (/turf/unsimulated/wall,/area/tdome/tdomeadmin)
"cHX" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 8},/area/tdome/tdomeadmin)
"cHY" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows2"; dir = 8},/area/tdome/tdomeadmin)
"cHZ" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 4},/area/tdome/tdomeadmin)
-"cIa" = (/obj/structure/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/sneakers/brown,/obj/item/clothing/suit/armor/vest,/obj/item/clothing/head/helmet/swat,/obj/item/weapon/gun/energy/laser,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
+"cIa" = (/turf/simulated/floor/bluegrid,/area/tdome/arena)
"cIb" = (/mob/living/simple_animal/hostile/creature{name = "Experiment 35b"},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/wizard_station)
"cIc" = (/turf/unsimulated/floor{dir = 1; icon_state = "chapel"},/area/wizard_station)
"cId" = (/turf/unsimulated/floor{dir = 4; icon_state = "chapel"},/area/wizard_station)
@@ -7175,9 +7189,9 @@
"cIm" = (/turf/unsimulated/floor{icon_state = "floor"},/area/tdome/tdomeadmin)
"cIn" = (/turf/unsimulated/wall/fakedoor{name = "Thunderdome Admin"},/area/tdome/tdomeadmin)
"cIo" = (/obj/structure/table,/obj/machinery/door_control{id = "thunderdomehea"; name = "Heavy Supply Control"; pixel_y = 0; req_access_txt = "102"},/turf/unsimulated/floor{icon_state = "floor"},/area/tdome/tdomeadmin)
-"cIp" = (/obj/structure/stool/bed/chair/office/dark,/turf/unsimulated/floor{icon_state = "floor"},/area/tdome/tdomeadmin)
+"cIp" = (/obj/machinery/camera{pixel_x = 10; network = list("thunder"); c_tag = "Arena"},/turf/simulated/floor/bluegrid,/area/tdome/arena)
"cIq" = (/obj/structure/table,/obj/machinery/door_control{id = "thunderdomegen"; name = "General Supply Control"; pixel_y = 0; req_access_txt = "102"},/turf/unsimulated/floor{icon_state = "floor"},/area/tdome/tdomeadmin)
-"cIr" = (/obj/structure/table,/obj/machinery/door_control{id = "thunderdome"; name = "Main Blast Doors Control"; pixel_y = 0; req_access_txt = "102"},/obj/machinery/computer/security/telescreen{pixel_y = -32},/turf/unsimulated/floor{icon_state = "floor"},/area/tdome/tdomeadmin)
+"cIr" = (/obj/machinery/flasher{id = "tdomeflash"; name = "Thunderdome Flash"},/turf/simulated/floor/bluegrid,/area/tdome/arena)
"cIs" = (/obj/structure/table,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/holding)
"cIt" = (/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/holding)
"cIu" = (/obj/structure/closet/secure_closet/bar{req_access_txt = "25"},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/holding)
@@ -8840,6 +8854,7 @@
"doL" = (/turf/simulated/floor{icon_state = "dark"},/area/security/prison)
"doM" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/security/prison)
"doN" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/wood,/area/crew_quarters/captain)
+"doO" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/closet/ammunitionlocker,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/ai_monitored/security/armory)
"doP" = (/obj/structure/closet/crate,/obj/item/device/aicard,/obj/item/device/multitool,/obj/item/weapon/weldingtool,/obj/item/weapon/wrench,/obj/item/weapon/circuitboard/teleporter,/turf/simulated/floor/plating/airless,/area/AIsattele)
"doQ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/ai_monitored/security/armory)
"doR" = (/obj/machinery/light/small,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "dark"},/area/security/prison)
@@ -9175,7 +9190,7 @@ ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlah
ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlabddoVdoWaojdoYdpoabddppaaiaaSaaqaaqaaTaaqaaqaaqaaUaaqaaKaaqaaVaaWaaiahjahlahlahlahlahlahlahlablafmabBadTagYaaNcuUaaYaaZcOndpdaaNahlahlahlahjahlahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahldpXahjabcahjdpXahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaaeahlahlaaHaaHdpXaaHaaHahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlabdabddpedpqdphdoLabddpgaaiabdabeabdabfabdabgabdabhabdabiabdabdabjaaiahjahlahjahjahjahjahlahjabkabCabBadUafmaaNdnDdpkaboabobmDaaNahlahjabqahjahlahjahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahldpXdpXdpXdpXdpXahlahlahlabrahlahlahldpXdpXaaHaaHaaHahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaaHahlahjahlaaRahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahjdpmdoLdpfdoLabddpiaaiabsaaqabtabfabuaaqabvabhabwaaKabxabdabyaaiabzabzabzabzabzabzabzabzabzabAabBacuafmabDaXPaXMdoIabobwDaaNahlahjabIabJabIahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaaRahlahlahjahjahjahlahlabrahjahjahlahjahjahlahlaaHahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahldpXahjabKahjdpXahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahjahjahjdpmdoTdoRdoSagjdpnaaiabLaaqabMabNabOaaqabPabhabQaaKabPabdabRaaiabSabTabVabVabWabXabYcpRabzacaabBacuafmacdacebGrbPhabobQsaaNahjahjabIaciabIahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahldpXahjacjacjacjacjacjahjackahjacjacjacjacjacjahjdpXahlahlahlaaeahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahldpXahjabKahjdpXahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahjahjahjdpmdoTdoRdoSagjdpnaaiabLaaqabMabNabOaaqabPabhabQaaKabPabdabRaaiabSabTabVabVabWabXabYdoOabzacaabBacuafmacdacebGrbPhabobQsaaNahjahjabIaciabIahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahldpXahjacjacjacjacjacjahjackahjacjacjacjacjacjahjdpXahlahlahlaaeahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaaHaaHaaHdpXdpXahlahlahlaclahlahlahldpXdpXaaHaaHaaHahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlabddowdoxdosdoydozaaiabhacmabdabfabhacnabfabhabhacoabfabdabdaaiabSacpacqacqacqacqdoCdoAabzacsabBacuafmaaNadRacvacwacxacyaaNafOabkacBabJabIabIacCahlahlahlahlahlahlahlahlahlahlahlahlahlahlahldpXahjacDacEacEacEacEacFacGacHacIacIacIacIacJahjdpXahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaaHahlahlahjahjahlahlahlaclahjahjahlahjahjahlahlaaHahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahldoMdoKdoDdoHacPacMacNdpaacPacQacRacSacPacTacUacVacWaaiacXacYdoEdoFagpdoGdoQdoZbYgabBadfadgabkaaNadhaaNadiaaNadjaaNdoaajBabkadnadoadpadpadqahlahlahlahlaaeahlahlahlahlahlahlahlahlahldpXahjadradradradradrahjacGahjadradradradradrahjdpXahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahldpXahjadsadsadsadsadsahjadtahjadsadsadsadsadsahjdpXahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaKubRDcdladzamJadwaliadBadzadAadBadzadzadCajwadEadFaaiadGamfadIadJadJadKalbakZalaacfaksadVabkaemaepadWabEaevaeJadWaftajaadXadYadZaeaaohaecahlahlahlahlahlahlahlahlahlahlahlahlahlahlaaHahlahlahlahjahlahlahjacGahlahlahlahjahlahlahlaaHahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
@@ -9382,16 +9397,16 @@ csyctictqctdctectkcthcwdcuIcuxcuKcuWcvlcuJcuAcuJcuAcuHcvkcwBctdctlctpctectrctncs
csBctectnctgctlctmctqcwscuAcuHcuXcvAcuycuWcuKcuWcuKcuVcuzcwFctgcthctfctlctdctkcspcsGcsHcsIctscttctuctvcsNctwctxctycsCcsDcsEcsFcsGcsHcsIctscttctuctvctzctwctxctycsCcsDcsEcsFcsGcsWcsYahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlctAcwucwucvocwwcwwctCcwGcwGcwGcwGcwGctCcwxcvtcvtcvtcwyctCcwzcvwcvwcvwcwActI
csoctlctkctjcthctpctncwBcuKcuVcvkcuxcuIcvAcuXcvAcuXcvzcuJcwHctjctqctocthctgctmcsvctycsCcsDcsEcsFcsGcsHcsXctscttctuctvctzctwctxctycsCcsDcsEcsFcsGcsHcsIctscttctuctvctzctwctxctycsRcsYahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlctAcwIcwIcwJcwKcwKctCcwLcwLcwLcwLcwLctCcwMcwNcwNcwNcwOctCcwPcwQcwQcwQcwRctI
csrcthctmctictqctfctkcwFcuXcvzcuzcuHcuAcuxcvkcuxcvkcvlcuWcwSctictnctrctqctjctpcssctwctxctycsCcsDcsEcsFcsVcsHcsIctscttctuctvctzctwctxctycsCcsDcsEcsFcsGcsHcsIctscttctuctvctzctwcsPcsYahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcwTcwUcwUcwUcwUcwUcwVcwUcwUcwUcwUcwUcwVcwUcwUcwUcwUcwUcwVcwUcwUcwUcwUcwUcwW
-csuctqctpctectnctoctmcwHcvkcvlcuJcuVcuKcuHcuzcuHcuzcuycvAcwXctectkctdctnctictfcsAcsHcsIctscttctuctvctzcsOctxctycsCcsDcsEcsFcsGcsHcsIctscttctuctvctzctwctxctycsCcsDcsEcsFcsGcsHcsXcsYahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-cstctnctfctlctkctrctpcwScuzcuycuWcvzcuXcuVcuJcuVcuJcuIcuxcwYctlctmctgctkctectocsxcttctuctvctzctwctxctycsRcsDcsEcsFcsGcsHcsIctscttctuctvctzctwctxctycsCcsDcsEcsFcsGcsHcsIctscttcsLcsYahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-cspctkctocthctmctdctfcwXcuJcuIcvAcvlcvkcvzcuWcvzcuWcuAcuHcwZcthctpctjctmctlctrcsncsFcsGcsHcsIctscttctucsMcsNcsOcsPcsQcsRcsScsTcsUcsVcsWcsXcsJcsKcsLcsMcsNcsOcsPcsQcsRcsScsTcsUcsVcsYahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-csvctmctrctqctpctgctocwYcuWcuAcuxcuycuzcvlcvAcvlcvAcuKcuVcvjctqctfctictpcthctdcswcsYcsYcsYcsYcsYcsYcsYcsYcsYcsYcsYcsYcsYcsYcsYcsYcsYcsYcsYcsYcsYcsYcsYcsYcsYcsYcsYcsYcsYcsYcsYcsYcsYahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-cssctpctdctnctfctjctrcwZcvAcuKcuHcuIcuJcuycuxcuycuxcuXcvzcvyctnctoctectfctqctgcszcsYcsncsocspcsqcsrcsscstcsucsncsvcswcsxcsycszcsAcsBcstcsscswcspcsqcsucsxcsrcszcsvcsBcsYahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-csActfctgctkctoctictdcvjcuxcuXcuVcuAcuWcuIcuHcuIcuHcvkcvlcvmctkctrctlctoctnctjcsqcsYcswctdctectfctgcthctictjctkctlctmctnctoctpctqctrcticthctmctectfctjctnctgctpctlcsocsYahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-csxctoctjctmctrctectgcvycuHcvkcvzcuKcvAcuAcuVcuAcuVcuzcuycvBctmctdcthctrctkcticsycsYcszctgctlctoctjctqctectictmcthctpctkctrctfctnctdctectqctpctlctoctictkctjctfcthcsrcsYahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-csnctrctictpctdctlctjctgcvGcuVcuxcuycvzcvAcuIcvAcuIcvkcvMctictpctgctqctdctmctecsBcsYcsqctjcthctrctictnctlctectpctqctfctmctdctoctkctgctlctnctfcthctrctectmctictoctqcsucsYahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-cswctdctectfctgcthctictjctkcwdcwScwFcwZcwXcwBcvjcvGcwsctmctectfctjctnctgctpctlcsocsYcsyctictqctdctectkcthctlctfctnctoctpctgctrctmctjcthctkctoctqctdctlctpctectrctncstcsYahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-cszctgctlctoctjctqctectictmcthctpctkctrctfctnctdctectqctpctlctoctictkctjctfcthcsrcsYcsBctectnctgctlctmctqcthctoctkctrctfctjctdctpctictqctmctrctnctgcthctfctlctdctkcspcsYahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+csuctqctpctectnctoctmcwHcvkcvlcuJcuVcuKcuHcuzcuHcuzcuycvAcwXctectkctdctnctictfcsAcsHcsIctscttctuctvctzcsOctxctycsCcsDcsEcsFcsGcsHcsIctscttctuctvctzctwctxctycsCcsDcsEcsFcsGcsHcsXcsYahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcpRcpRcpRcpRcpRcpRcpRcpRcpRcuqcqpcqpcqpcqpcqpcqpcqpcqpcqpcqpcqpcqpcqpcuqcpRcpRcpRcpRcpRcpRcpRcpRcpR
+cstctnctfctlctkctrctpcwScuzcuycuWcvzcuXcuVcuJcuVcuJcuIcuxcwYctlctmctgctkctectocsxcttctuctvctzctwctxctycsRcsDcsEcsFcsGcsHcsIctscttctuctvctzctwctxctycsCcsDcsEcsFcsGcsHcsIctscttcsLcsYahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcpRcqfcqicuScuScuScuScuScpYcqAcqpcqpcqpcqpcqpcqpcqpcqpcqpcqpcqpcqpcqpcqBcpYcuScuScuScuScuScqicqCcpR
+cspctkctocthctmctdctfcwXcuJcuIcvAcvlcvkcvzcuWcvzcuWcuAcuHcwZcthctpctjctmctlctrcsncsFcsGcsHcsIctscttctucsMcsNcsOcsPcsQcsRcsScsTcsUcsVcsWcsXcsJcsKcsLcsMcsNcsOcsPcsQcsRcsScsTcsUcsVcsYahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcpRcqfcqicuScuScuScuScuScpYcqAcqpcqpcqpcqpcqpcqpcqpcqpcqpcqpcqpcqpcqpcqBcpYcuScuScuScuScuScqicqCcpR
+csvctmctrctqctpctgctocwYcuWcuAcuxcuycuzcvlcvAcvlcvAcuKcuVcvjctqctfctictpcthctdcswcsYcsYcsYcsYcsYcsYcsYcsYcsYcsYcsYcsYcsYcsYcsYcsYcsYcsYcsYcsYcsYcsYcsYcsYcsYcsYcsYcsYcsYcsYcsYcsYcsYahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcpRcqfcqicuScuScuScuScuScpYcqAcqpcqpcqpcqpcqpcqScFNcqScqpcqpcqpcqpcqpcqBcpYcuScuScuScuScuScqicqCcpR
+cssctpctdctnctfctjctrcwZcvAcuKcuHcuIcuJcuycuxcuycuxcuXcvzcvyctnctoctectfctqctgcszcsYcsncsocspcsqcsrcsscstcsucsncsvcswcsxcsycszcsAcsBcstcsscswcspcsqcsucsxcsrcszcsvcsBcsYahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcpRcqfcqicuScuScuScuScuScpYcqAcqpcqpcqpcqpcqpcqScqScqScqpcqpcqpcqpcqpcqBcpYcuScuScuScuScuScqicqCcpR
+csActfctgctkctoctictdcvjcuxcuXcuVcuAcuWcuIcuHcuIcuHcvkcvlcvmctkctrctlctoctnctjcsqcsYcswctdctectfctgcthctictjctkctlctmctnctoctpctqctrcticthctmctectfctjctnctgctpctlcsocsYahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcpRcqfcqicuScuScuScuScuScpYcqAcqpcqpcqpcqpcqpcqpcqpcqpcqpcqpcqpcqpcqpcqBcpYcuScuScuScuScuScqicqCcpR
+csxctoctjctmctrctectgcvycuHcvkcvzcuKcvAcuAcuVcuAcuVcuzcuycvBctmctdcthctrctkcticsycsYcszctgctlctoctjctqctectictmcthctpctkctrctfctnctdctectqctpctlctoctictkctjctfcthcsrcsYahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcpRcqfcqicuScuScuScuScuScpYcqAcqpcqpcqpcqpcqpcqpcqpcqpcqpcqpcqpcqpcqpcqBcpYcuScuScuScuScuScqicqCcpR
+csnctrctictpctdctlctjctgcvGcuVcuxcuycvzcvAcuIcvAcuIcvkcvMctictpctgctqctdctmctecsBcsYcsqctjcthctrctictnctlctectpctqctfctmctdctoctkctgctlctnctfcthctrctectmctictoctqcsucsYahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcpRcpRcpRcricricricricricpRcuqcqpcqpcqpcqpcqpcqpcqpcqpcqpcqpcqpcqpcqpcuqcpRcricricricricricpRcpRcpR
+cswctdctectfctgcthctictjctkcwdcwScwFcwZcwXcwBcvjcvGcwsctmctectfctjctnctgctpctlcsocsYcsyctictqctdctectkcthctlctfctnctoctpctgctrctmctjcthctkctoctqctdctlctpctectrctncstcsYahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcpRcpUcpUcpUcpUcpUcpRcuScuScuScuScuScuScuScuScuScuScuScuScuScuScuScpRcpVcpVcpVcpVcpVcpRahlahl
+cszctgctlctoctjctqctectictmcthctpctkctrctfctnctdctectqctpctlctoctictkctjctfcthcsrcsYcsBctectnctgctlctmctqcthctoctkctrctfctjctdctpctictqctmctrctnctgcthctfctlctdctkcspcsYahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcpRcpRcpRcpRcpRcpRcpRahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcpRcpRcpRcpRcpRcpRcpRahlahl
csqctjcthctrctictnctlctectpctqctfctmctdctoctkctgctlctnctfcthctrctectmctictoctqcsucsYcsoctlctkctjcthctpctnctqctrctmctdctoctictgctfctectnctpctdctkctjctqctocthctgctmcsvcsYahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
csyctictqctdctectkcthctlctfctnctoctpctgctrctmctjcthctkctoctqctdctlctpctectrctncstcsYcsrcthctmctictqctfctkctnctdctpctgctrctectjctoctlctkctfctgctmctictnctrctqctjctpcsscsYahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
csBctectnctgctlctmctqcthctoctkctrctfctjctdctpctictqctmctrctnctgcthctfctlctdctkcspcsYcsuctqctpctectnctoctmctkcxactXctYctZcuacubcuccudcuecufcxbctpctectkctdctnctictfcsAcsYahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
@@ -9534,20 +9549,20 @@ ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlah
ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcCEcFLcCPcDBcEAcDPcFycFMcDBcDPcDPcDPcDBcDPcDPcDPcDBcEKcCEcFPcFOcFPcFPcdicEBcEBcEBcCEcFRdtccFIcCEahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcFScFJcFJcFJcFTcFJcFJcFJcFJcFJcFJcFJcFTcFJcFJcFJcFSahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcCEcCPcCPcDBcEAcDPcDPcDPcFUcDPcDPcDPcFVcDPcDPcDPcDBcEmcCEcCEcFbcFWcFXcFYcCEcCEcCEcCEcCEcCEcCEcCEahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcDGcFJcFKcFKcFKcFKcFKcFJcFJcFJcFKcFKcFKcFKcFKcFJcDGahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcCEcCPcCPcDBcEAcDPcDPcDPcFZcDPcDPcDPcGacDPcDPcGbcDBcGccFCcCEcCEcCEcCEcCEcCEahlahlahlahlahlahlahlahlahlcGdcGdcGdcGdcGdcGdcGdcGdcGdcGdcGdcGdahlahlahlahlahlahlahlahlahlahlcDGcDKcGecGecGecGecGecGecGecGecGecGecGecGecGecDIcDGahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcCEcCPcDAcDBcDBcDBcDBcDBcDBcGfcDPcDPcDBcDBcDBcDBcDBcDBcDFcFCcCEahlahlahlahlahlahlahlahlahlahlahlahlahlcGdcGgcGhcGicGjcGkcGlcGdcGmcGncGocGdahlahlcGpcGpcGpcGpcGpcGpcGpcGpcGpcGqcGrcGrcGrcGrcGrcGrcGrcGrcGrcGrcGrcGrcGrcGqcGpcGpcGpcGpcGpcGpcGpcGpcGpahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcCEcCPcDBcGscGscGtcGucGvcDBcDPcDPcDPcDBcGwcGxcGycGzcGAcDBcEmcCEahlahlahlahlahlahlahlahlahlahlahlahlahlcGdcGicGicGicGicGicGicGicGBcGCcGDcGdahlahlcGpcGEcGFcGGcGGcGGcGGcGGcGHcGIcGrcGrcGrcGrcGrcGrcGrcGrcGrcGrcGrcGrcGrcGJcGHcGKcGKcGKcGKcGKcGFcGLcGpahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcCEcCPcDBcDPcDPcDPcDPcDPcGMcDPcDPcDPcGNcDPcDPcDPcDPcGOcDBcEmcCEahlahlahlahlahlahlahlahlahlahlahlahlahlcGdcGPcGPcGicGicGicGQcGdcGRcGScGTcGdahlahlcGpcGEcGFcGGcGUcGGcGUcGGcGHcGIcGrcGrcGrcGrcGrcGrcGrcGrcGrcGrcGrcGrcGrcGJcGHcGKcGVcGKcGVcGKcGFcGLcGpahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcCEcCPcDBcGWcDPcDPcDPcDPcGXcDPcDPcDPcGYcDPcDPcDPcDPcGZcDBcCPcCEahlahlahlahlahlahlahlahlahlahlahlahlahlcGdcGicGicGicGicHacHacGdcGdcHbcGdcGdahlahlcGpcGEcGFcGGcGGcHccGGcGGcGHcGIcGrcGrcGrcGrcGrcHdcHecHdcGrcGrcGrcGrcGrcGJcGHcGKcGKcHfcGKcGKcGFcGLcGpahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcCEcCPcDBcGWcDPcDPcHgcEUcDBcHhcHicHjcDBcGOcGZcDPcDPcDPcDBcCPcCEahlahlahlahlahlahlahlahlahlahlahlahlahlcGdcHkcHkcGicHlcHmcHncGdcHocHbcHpcGdahlahlcGpcGEcGFcGGcGGcGGcGGcGGcGHcGIcGrcGrcGrcGrcGrcHdcHqcHdcGrcGrcGrcGrcGrcGJcGHcGKcGKcGKcGKcGKcGFcGLcGpahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcCEcCPcDBcDPcDPcDPcDBcDBcDBcHrcHscDPcDBcDBcDBcDPcDPcDPcDBcCPcCEahlahlahlahlahlahlahlahlahlahlahlahlahlcGdcGicGicGicHlcHtcHucGdcHvcHbcHwcGdahlahlcGpcGEcGFcGGcGUcGGcGUcGGcGHcGIcGrcGrcGrcGrcGrcGrcGrcGrcGrcGrcGrcGrcGrcGJcGHcGKcGVcGKcGVcGKcGFcGLcGpahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcCEcCPcDBcEUcHxcHycDBcCPcDBcHzcHzcHzcDBcCPcDBcDTcHAcHBcDBcCPcCEahlahlahlahlahlahlahlahlahlahlahlahlahlcGdcGicGicGicGicGicGdcGdcGdcGdcGdcGdahlahlcGpcGEcHCcGGcGGcGGcGGcGGcGHcGIcGrcGrcGrcGrcGrcGrcGrcGrcGrcGrcGrcGrcGrcGJcGHcGKcGKcGKcGKcGKcHCcGLcGpahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcCEcCPcDBcHzcHzcHzcDBcCPcEHcHDcHEcHFcEJcCPcDBcHzcHzcHzcDBcCPcCEahlahlahlahlahlahlahlahlahlahlahlahlahlcGdcHGcHHcHIcGicGicHJcHKcHLcHMcHNcGdahlahlcGpcGpcGpcHOcHOcHOcHOcHOcGpcGqcGrcGrcGrcGrcGrcGrcGrcGrcGrcGrcGrcGrcGrcGqcGpcHOcHOcHOcHOcHOcGpcGpcGpahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcCEcCPcEHcHDcHEcHFcEJcCPcCPcCPcCPcCPcCPcCPcEHcHDcHEcHFcEJcCPcCEahlahlahlahlahlahlahlahlahlahlahlahlahlcGdcHPcHQcHRcGicGicGicHScHTcHScHUcGdahlahlahlahlcGpcHVcHVcHVcHVcHVcHWcHXcHYcHYcHYcHYcHYcHYcHYcHYcHYcHYcHYcHYcHYcHZcHWcIacIacIacIacIacGpahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcCEcCPcCPcCPcCPcCPcCPcCPcCPcCPcCPcCPcCPcCPcCPcCPcCPcCPcCPcCPcCEahlahlahlahlahlahlahlahlahlahlahlahlahlcGdcHQcIbcHRcGicGicGicIccIdcIccIdcGdahlahlahlahlcGpcGpcGpcGpcGpcGpcHWcIecIfcIfcIfcIfcIfcIecIecIecIfcIfcIfcIfcIfcIecHWcGpcGpcGpcGpcGpcGpahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcCEcCPcDAcDBcDBcDBcDBcDBcDBcGfcDPcDPcDBcDBcDBcDBcDBcDBcDFcFCcCEahlahlahlahlahlahlahlahlahlahlahlahlahlcGdcGgcGhcGicGjcGkcGlcGdcGmcGncGocGdahlahlcGpcGpcGpcGpcGpcGpcGpcGpcGpcHVcGLcGLcGLcGLcGLcGLcGLcGLcGLcGLcGLcGLcGLcHVcGpcGpcGpcGpcGpcGpcGpcGpcGpahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcCEcCPcDBcGscGscGtcGucGvcDBcDPcDPcDPcDBcGwcGxcGycGzcGAcDBcEmcCEahlahlahlahlahlahlahlahlahlahlahlahlahlcGdcGicGicGicGicGicGicGicGBcGCcGDcGdahlahlcGpcGJcGIcGGcGGcGGcGGcGGcHdcHecGLcGLcGLcGLcGLcGLcGLcGLcGLcGLcGLcGLcGLcHCcHdcGKcGKcGKcGKcGKcGIcHqcGpahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcCEcCPcDBcDPcDPcDPcDPcDPcGMcDPcDPcDPcGNcDPcDPcDPcDPcGOcDBcEmcCEahlahlahlahlahlahlahlahlahlahlahlahlahlcGdcGPcGPcGicGicGicGQcGdcGRcGScGTcGdahlahlcGpcGJcGIcGGcGUcGGcGUcGGcHdcHecGLcGLcGLcGLcGLcGLcGLcGLcGLcGLcGLcGLcGLcHCcHdcGKcGVcGKcGVcGKcGIcHqcGpahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcCEcCPcDBcGWcDPcDPcDPcDPcGXcDPcDPcDPcGYcDPcDPcDPcDPcGZcDBcCPcCEahlahlahlahlahlahlahlahlahlahlahlahlahlcGdcGicGicGicGicHacHacGdcGdcHbcGdcGdahlahlcGpcGJcGIcGGcGGcHccGGcGGcHdcHecGLcGLcGLcGLcGLcIacIrcIacGLcGLcGLcGLcGLcHCcHdcGKcGKcHfcGKcGKcGIcHqcGpahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcCEcCPcDBcGWcDPcDPcHgcEUcDBcHhcHicHjcDBcGOcGZcDPcDPcDPcDBcCPcCEahlahlahlahlahlahlahlahlahlahlahlahlahlcGdcHkcHkcGicHlcHmcHncGdcHocHbcHpcGdahlahlcGpcGJcGIcGGcGGcGGcGGcGGcHdcHecGLcGLcGLcGLcGLcIacIpcIacGLcGLcGLcGLcGLcHCcHdcGKcGKcGKcGKcGKcGIcHqcGpahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcCEcCPcDBcDPcDPcDPcDBcDBcDBcHrcHscDPcDBcDBcDBcDPcDPcDPcDBcCPcCEahlahlahlahlahlahlahlahlahlahlahlahlahlcGdcGicGicGicHlcHtcHucGdcHvcHbcHwcGdahlahlcGpcGJcGIcGGcGUcGGcGUcGGcHdcHecGLcGLcGLcGLcGLcGLcGLcGLcGLcGLcGLcGLcGLcHCcHdcGKcGVcGKcGVcGKcGIcHqcGpahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcCEcCPcDBcEUcHxcHycDBcCPcDBcHzcHzcHzcDBcCPcDBcDTcHAcHBcDBcCPcCEahlahlahlahlahlahlahlahlahlahlahlahlahlcGdcGicGicGicGicGicGdcGdcGdcGdcGdcGdahlahlcGpcGJcGIcGGcGGcGGcGGcGGcHdcHecGLcGLcGLcGLcGLcGLcGLcGLcGLcGLcGLcGLcGLcHCcHdcGKcGKcGKcGKcGKcGIcHqcGpahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcCEcCPcDBcHzcHzcHzcDBcCPcEHcHDcHEcHFcEJcCPcDBcHzcHzcHzcDBcCPcCEahlahlahlahlahlahlahlahlahlahlahlahlahlcGdcHGcHHcHIcGicGicHJcHKcHLcHMcHNcGdahlahlcGpcGpcGpcHOcHOcHOcHOcHOcGpcHVcGLcGLcGLcGLcGLcGLcGLcGLcGLcGLcGLcGLcGLcHVcGpcHOcHOcHOcHOcHOcGpcGpcGpahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcCEcCPcEHcHDcHEcHFcEJcCPcCPcCPcCPcCPcCPcCPcEHcHDcHEcHFcEJcCPcCEahlahlahlahlahlahlahlahlahlahlahlahlahlcGdcHPcHQcHRcGicGicGicHScHTcHScHUcGdahlahlahlahlcGpcGrcGrcGrcGrcGrcGpcHXcHYcHYcHYcHYcHYcHYcHYcHYcHYcHYcHYcHYcHYcHZcGpcGqcGqcGqcGqcGqcGpahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcCEcCPcCPcCPcCPcCPcCPcCPcCPcCPcCPcCPcCPcCPcCPcCPcCPcCPcCPcCPcCEahlahlahlahlahlahlahlahlahlahlahlahlahlcGdcHQcIbcHRcGicGicGicIccIdcIccIdcGdahlahlahlahlcGpcGpcGpcGpcGpcGpcGpcIecIfcIfcIfcIfcIfcGHcGEcGFcIfcIfcIfcIfcIfcIecGpcGpcGpcGpcGpcGpcGpahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEcCEahlahlahlahlahlahlahlahlahlahlahlahlahlcGdcHPcIgcIhcGicGicHJcIicHUcIjcIkcGdahlahlahlahlahlahlahlahlahlahlcHWcIecIecIecIlcIecImcImcImcImcImcIecIlcIecIecIecHWahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcGdcGdcGdcGdcGdcGdcGdcGdcGdcGdcGdcGdahlahlahlahlahlahlahlahlahlahlcHWcHWcIncHWcHWcHWcHWcIocIpcIqcHWcHWcHWcHWcIncHWcHWahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcHWcHWcIrcHWcHWahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcHWcHWcHWahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcGdcGdcGdcGdcGdcGdcGdcGdcGdcGdcGdcGdahlahlahlahlahlahlahlahlahlahlcHWcHWcIncHWcHWcHWcHWcIocFQcIqcHWcHWcHWcHWcIncHWcHWahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcHWcHWcHWcHWcHWahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcDpcDpcDpcDpcDpcDpcDpcDpcDpcDpcDpcDpcDpcDpcDpcDpcDpcDpcDpahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcDpcIscItcIucIvcIvcItcIwcIxcIycIzcIAcIBcICcIBcIBcIBcIDcDpahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcDpcIscItcItcItcItcItcIEcIAcIAcIAcIFcIBcIBcIBcIGcIBcIBcDpahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
diff --git a/code/__DEFINES/preferences.dm b/code/__DEFINES/preferences.dm
index 1472a045d2d..a8b240c4743 100644
--- a/code/__DEFINES/preferences.dm
+++ b/code/__DEFINES/preferences.dm
@@ -29,3 +29,4 @@
#define BE_BLOB 512
#define BE_NINJA 1024
#define BE_MONKEY 2048
+#define BE_GANG 4096
diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm
index 440a907e527..256aee3b322 100644
--- a/code/__HELPERS/game.dm
+++ b/code/__HELPERS/game.dm
@@ -143,17 +143,17 @@
if(A.flags & HEAR)
found_mobs |= A
-
+
for(var/atom/B in A)
if(!processed_list[B])
processing_list |= B
processing_list.Cut(1, 2)
processed_list[A] = A
-
+
return found_mobs
// Better recursive loop, technically sort of not actually recursive cause that shit is retarded, enjoy.
-//No need for a recursive limit either
+//No need for a recursive limit either
/proc/recursive_mob_check(var/atom/O,var/client_check=1,var/sight_check=1,var/include_radio=1)
var/list/processing_list = list(O)
@@ -193,7 +193,7 @@
return found_mobs
-
+
/proc/get_hearers_in_view(var/R, var/atom/source)
// Returns a list of hearers in range of R from source. Used in saycode.
var/turf/T = get_turf(source)
@@ -269,7 +269,7 @@
return 1
#undef SIGN
-
+
/proc/isInSight(var/atom/A, var/atom/B)
var/turf/Aturf = get_turf(A)
var/turf/Bturf = get_turf(B)
diff --git a/code/__HELPERS/names.dm b/code/__HELPERS/names.dm
index f7caa812336..810db1dd6c5 100644
--- a/code/__HELPERS/names.dm
+++ b/code/__HELPERS/names.dm
@@ -139,6 +139,20 @@ var/syndicate_name = null
syndicate_name = name
return name
+var/gang_A_name = null
+var/gang_B_name = null
+/proc/gang_name(var/gang)
+ if(!gang_A_name || !gang_B_name)
+ var/gang_name_pool = list("Clandestine", "Prima", "Blue", "Zero-G", "Max", "Blasto", "Waffle", "North", "Omni", "Newton", "Cyber", "Donk", "Gene", "Gib", "Tunnel")
+ gang_A_name = pick(gang_name_pool)
+ gang_name_pool -= gang_A_name
+ gang_B_name = pick(gang_name_pool)
+
+ if(gang == "A")
+ return gang_A_name
+ if(gang == "B")
+ return gang_B_name
+
//Traitors and traitor silicons will get these. Revs will not.
var/syndicate_code_phrase//Code phrase for traitors.
@@ -305,4 +319,4 @@ var/syndicate_code_response//Code response for traitors.
if(5)
return
-*/
\ No newline at end of file
+*/
diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm
index 7450d98fcb8..4a2f23792b3 100644
--- a/code/__HELPERS/unsorted.dm
+++ b/code/__HELPERS/unsorted.dm
@@ -1230,36 +1230,42 @@ var/global/list/common_tools = list(
return 0
/proc/is_hot(obj/item/W as obj)
- switch(W.type)
- if(/obj/item/weapon/weldingtool)
- var/obj/item/weapon/weldingtool/WT = W
- if(WT.isOn())
- return 3800
- else
- return 0
- if(/obj/item/weapon/lighter)
- if(W:lit)
- return 1500
- else
- return 0
- if(/obj/item/weapon/match)
- if(W:lit)
- return 1000
- else
- return 0
- if(/obj/item/clothing/mask/cigarette)
- if(W:lit)
- return 1000
- else
- return 0
- if(/obj/item/weapon/pickaxe/plasmacutter)
+ if(istype(W, /obj/item/weapon/weldingtool))
+ var/obj/item/weapon/weldingtool/O = W
+ if(O.isOn())
return 3800
- if(/obj/item/weapon/melee/energy)
+ else
+ return 0
+ if(istype(W, /obj/item/weapon/lighter))
+ var/obj/item/weapon/lighter/O = W
+ if(O.lit)
+ return 1500
+ else
+ return 0
+ if(istype(W, /obj/item/weapon/match))
+ var/obj/item/weapon/match/O = W
+ if(O.lit)
+ return 1000
+ else
+ return 0
+ if(istype(W, /obj/item/clothing/mask/cigarette))
+ var/obj/item/clothing/mask/cigarette/O = W
+ if(O.lit)
+ return 1000
+ else
+ return 0
+ if(istype(W, /obj/item/weapon/pickaxe/plasmacutter))
+ return 3800
+ if(istype(W, /obj/item/weapon/melee/energy))
+ var/obj/item/weapon/melee/energy/O = W
+ if(O.active)
return 3500
else
return 0
-
- return 0
+ if(istype(W, /obj/item/device/assembly/igniter))
+ return 1000
+ else
+ return 0
//Is this even used for anything besides balloons? Yes I took out the W:lit stuff because : really shouldnt be used.
/proc/is_sharp(obj/item/W as obj) // For the record, WHAT THE HELL IS THIS METHOD OF DOING IT?
diff --git a/code/_globalvars/configuration.dm b/code/_globalvars/configuration.dm
index 5d3a5f8030b..062be18c68d 100644
--- a/code/_globalvars/configuration.dm
+++ b/code/_globalvars/configuration.dm
@@ -45,5 +45,6 @@ var/list/be_special_flags = list(
"Cultist" = BE_CULTIST,
"Blob" = BE_BLOB,
"Ninja" = BE_NINJA,
- "Monkey" = BE_MONKEY
+ "Monkey" = BE_MONKEY,
+ "Gang" = BE_GANG
)
diff --git a/code/controllers/supply_shuttle.dm b/code/controllers/supply_shuttle.dm
index 3f8238177f0..13ad8725cd2 100644
--- a/code/controllers/supply_shuttle.dm
+++ b/code/controllers/supply_shuttle.dm
@@ -525,7 +525,7 @@ var/global/datum/controller/supply_shuttle/supply_shuttle
temp += "Main Menu "
else if (href_list["viewrequests"])
- temp = "Main Menu Current requests: "
+ temp = "Current requests: "
for(var/S in supply_shuttle.requestlist)
var/datum/supply_order/SO = S
temp += "#[SO.ordernum] - [SO.object.name] requested by [SO.orderedby] "
@@ -722,12 +722,11 @@ var/global/datum/controller/supply_shuttle/supply_shuttle
supply_shuttle.requestlist.Cut(i,i+1)
supply_shuttle.points -= P.cost
supply_shuttle.shoppinglist += O
- temp = "Thanks for your order. "
- temp += "Back Main Menu "
+ temp = "Thanks for your order."
else
- temp = "Not enough supply points. "
- temp += "Back Main Menu "
+ temp = "Not enough supply points."
break
+ temp += "Back Main Menu "
else if (href_list["vieworders"])
temp = "Main Menu Current approved orders: "
@@ -748,7 +747,7 @@ var/global/datum/controller/supply_shuttle/supply_shuttle
temp += "Main Menu "
*/
else if (href_list["viewrequests"])
- temp = "Main Menu Current requests: "
+ temp = "Current requests: "
for(var/S in supply_shuttle.requestlist)
var/datum/supply_order/SO = S
temp += "#[SO.ordernum] - [SO.object.name] requested by [SO.orderedby] [supply_shuttle.moving ? "":supply_shuttle.at_station ? "":"Approve Remove "] "
diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm
index e98fec043ed..4f8b2e771e7 100644
--- a/code/datums/datacore.dm
+++ b/code/datums/datacore.dm
@@ -81,7 +81,7 @@
var/record_id_num = 1001
/obj/effect/datacore/proc/manifest_inject(var/mob/living/carbon/human/H)
- if(H.mind && (H.mind.assigned_role != "MODE"))
+ if(H.mind && (H.mind.need_job_assign))
var/assignment
if(H.mind.assigned_role)
assignment = H.mind.assigned_role
diff --git a/code/datums/disease.dm b/code/datums/disease.dm
index 84267f8631d..d7d98405710 100644
--- a/code/datums/disease.dm
+++ b/code/datums/disease.dm
@@ -206,7 +206,7 @@ var/list/diseases = typesof(/datum/disease) - /datum/disease
/datum/disease/proc/GetDiseaseID()
return src.type
-/*
+
/datum/disease/Del()
active_diseases.Remove(src)
-*/
+ ..()
diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index ce9d2325ad2..58a3b600d7a 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -37,6 +37,7 @@
var/memory
+ var/need_job_assign = 1 //Whether the job controller should give them a job
var/assigned_role
var/special_role
@@ -161,6 +162,11 @@
remove_objectives()
remove_antag_equip()
+
+/datum/mind/proc/remove_gang()
+ ticker.mode.remove_gangster(src,0,1)
+ remove_objectives()
+
/datum/mind/proc/remove_malf()
if(src in ticker.mode.malf_ai)
ticker.mode.malf_ai -= src
@@ -196,6 +202,7 @@
remove_cultist()
remove_rev()
remove_malf()
+ remove_gang()
/datum/mind/proc/show_memory(mob/recipient, window=1)
if(!recipient)
@@ -224,6 +231,7 @@
var/list/sections = list(
"revolution",
+ "gang",
"cult",
"wizard",
"changeling",
@@ -256,16 +264,54 @@
else
text += "."
- text += " Reequip (gives traitor uplink)."
+ /** GANG ***/
+ text = "gang"
+ if (ticker.mode.config_tag=="gang")
+ text = uppertext(text)
+ text = "[text] : "
+ if (src in ticker.mode.A_bosses)
+ text += "loyal|none |(A) gangster BOSS |(B) gangster boss "
+ text += " Flash & Recaller: give "
+
+ var/list/L = current.get_contents()
+ var/obj/item/device/flash/flash = locate() in L
+ if (flash)
+ if(!flash.broken)
+ text += "|take equipment ."
+ else
+ text += "|take equipment |repair flash ."
+ else
+ text += "."
+
if (objectives.len==0)
- text += " Objectives are empty! Set to kill all heads ."
+ text += " Objectives are empty! Set to kill all rival gang leaders ."
+
+ else if (src in ticker.mode.B_bosses)
+ text += "loyal|none |(A) gangster boss |(B) gangster BOSS "
+ text += " Flash & Recaller: give "
+
+ var/list/L = current.get_contents()
+ var/obj/item/device/flash/flash = locate() in L
+ if (flash)
+ if(!flash.broken)
+ text += "take equipment ."
+ else
+ text += "take equipment |repair flash ."
+ else
+ text += "."
+
+ if (objectives.len==0)
+ text += " Objectives are empty! Set to kill all rival gang leaders ."
+
+ else if (src in ticker.mode.A_gangsters)
+ text += "loyal|none |(A) GANGSTER boss |(B) gangster boss "
+ else if (src in ticker.mode.B_gangsters)
+ text += "loyal|none |(A) gangster boss |(B) GANGSTER boss "
else if(isloyal(current))
- text += "head|LOYAL |employee|headrev |rev"
- else if (src in ticker.mode.revolutionaries)
- text += "head|loyal|employee |headrev |REV "
+ text += "LOYAL |none|(A) gangster boss |(B) gangster boss "
else
- text += "head|loyal|EMPLOYEE |headrev |rev "
- sections["revolution"] = text
+ text += "loyal|NONE |(A) gangster boss |(B) gangster boss "
+ sections["gang"] = text
/** CULT ***/
text = "cult"
@@ -448,7 +494,7 @@
out += "Announce objectives "
- usr << browse(out, "window=edit_memory[src]")
+ usr << browse(out, "window=edit_memory[src];size=400x500")
/datum/mind/Topic(href, href_list)
if(!check_rights(R_ADMIN)) return
@@ -679,16 +725,83 @@
else
flash.broken = 0
- if("reequip")
+ else if (href_list["gang"])
+ switch(href_list["gang"])
+ if("clear")
+ remove_gang()
+ message_admins("[key_name_admin(usr)] has de-gang'ed [current].")
+ log_admin("[key_name(usr)] has de-gang'ed [current].")
+
+ if("agang")
+ if(src in ticker.mode.A_gangsters)
+ return
+ ticker.mode.remove_gangster(src, 0, 2)
+ ticker.mode.add_gangster(src,"A",0)
+ message_admins("[key_name_admin(usr)] has added [current] to the [gang_name("A")] Gang (A).")
+ log_admin("[key_name(usr)] has added [current] to the [gang_name("A")] Gang (A).")
+
+ if("aboss")
+ if(src in ticker.mode.A_bosses)
+ return
+ ticker.mode.remove_gangster(src, 0, 2)
+ ticker.mode.A_bosses += src
+ src.special_role = "[gang_name("A")] Gang (A) Boss"
+ ticker.mode.update_gang_icons_added(src, "A")
+ current << "You are a [gang_name("A")] Gang Boss! "
+ message_admins("[key_name_admin(usr)] has added [current] to the [gang_name("A")] Gang (A) leadership.")
+ log_admin("[key_name(usr)] has added [current] to the [gang_name("A")] Gang (A) leadership.")
+
+ if("bgang")
+ if(src in ticker.mode.B_gangsters)
+ return
+ ticker.mode.remove_gangster(src, 0, 2)
+ ticker.mode.add_gangster(src,"B",0)
+ message_admins("[key_name_admin(usr)] has added [current] to the [gang_name("B")] Gang (B).")
+ log_admin("[key_name(usr)] has added [current] to the [gang_name("B")] Gang (B).")
+
+ if("bboss")
+ if(src in ticker.mode.B_bosses)
+ return
+ ticker.mode.remove_gangster(src, 0, 2)
+ ticker.mode.B_bosses += src
+ src.special_role = "[gang_name("B")] Gang (B) Boss"
+ ticker.mode.update_gang_icons_added(src, "B")
+ current << "You are a [gang_name("B")] Gang Boss! "
+ message_admins("[key_name_admin(usr)] has added [current] to the [gang_name("B")] Gang (B) leadership.")
+ log_admin("[key_name(usr)] has added [current] to the [gang_name("B")] Gang (B) leadership.")
+
+ if("autoobjective")
+ ticker.mode.forge_gang_objectives(src)
+ ticker.mode.greet_gang(src,0)
+ usr << "Unable to equip flash! "
+ if(1)
+ usr << "Unable to equip recaller! "
+ if(0)
+ usr << "Unable to equip both flash and recaller! "
+
+ if("takeequip")
var/list/L = current.get_contents()
var/obj/item/device/flash/flash = locate() in L
+ if (!flash)
+ usr << "Deleting flash failed! "
qdel(flash)
- take_uplink()
- var/fail = 0
- fail |= !ticker.mode.equip_traitor(current, 1)
- fail |= !ticker.mode.equip_revolutionary(current)
- if (fail)
- usr << "Reequipping revolutionary goes wrong! "
+ var/obj/item/device/recaller/recaller = locate() in L
+ if (!recaller)
+ usr << "Deleting recaller failed! "
+ qdel(recaller)
+
+ if("repairflash")
+ var/list/L = current.get_contents()
+ var/obj/item/device/flash/flash = locate() in L
+ if (!flash)
+ usr << "Repairing flash failed! "
+ else
+ flash.broken = 0
else if (href_list["cult"])
switch(href_list["cult"])
@@ -999,7 +1112,6 @@
ticker.mode.syndicates += src
ticker.mode.update_synd_icons_added(src)
special_role = "Syndicate"
- assigned_role = "MODE"
ticker.mode.forge_syndicate_objectives(src)
ticker.mode.greet_syndicate(src)
@@ -1039,7 +1151,6 @@
if(!(src in ticker.mode.wizards))
ticker.mode.wizards += src
special_role = "Wizard"
- assigned_role = "MODE"
//ticker.mode.learn_basic_spells(current)
if(!wizardstart.len)
current.loc = pick(latejoin)
@@ -1119,6 +1230,13 @@
fail |= !ticker.mode.equip_revolutionary(current)
+/datum/mind/proc/make_Gang(var/gang)
+ special_role = "[(gang=="A") ? "[gang_name("A")] Gang (A)" : "[gang_name("B")] Gang (B)"] Boss"
+ ticker.mode.update_gang_icons_added(src, gang)
+ ticker.mode.forge_gang_objectives(src, gang)
+ ticker.mode.greet_gang(src)
+ ticker.mode.equip_gang(current)
+
/mob/proc/sync_mind()
mind_initialize() //updates the mind (or creates and initializes one if one doesn't exist)
mind.active = 1 //indicates that the mind is currently synced with a client
@@ -1149,11 +1267,13 @@
//slime
/mob/living/carbon/slime/mind_initialize()
..()
+ mind.special_role = "slime"
mind.assigned_role = "slime"
//XENO
/mob/living/carbon/alien/mind_initialize()
..()
+ mind.special_role = "Alien"
mind.assigned_role = "Alien"
//XENO HUMANOID
/mob/living/carbon/alien/humanoid/queen/mind_initialize()
@@ -1201,14 +1321,17 @@
/mob/living/simple_animal/mind_initialize()
..()
mind.assigned_role = "Animal"
+ mind.special_role = "Animal"
/mob/living/simple_animal/corgi/mind_initialize()
..()
mind.assigned_role = "Corgi"
+ mind.special_role = "Corgi"
/mob/living/simple_animal/shade/mind_initialize()
..()
mind.assigned_role = "Shade"
+ mind.special_role = "Shade"
/mob/living/simple_animal/construct/mind_initialize()
..()
diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm
index fa6d850888e..729929193ad 100644
--- a/code/datums/uplink_item.dm
+++ b/code/datums/uplink_item.dm
@@ -368,11 +368,11 @@ var/list/uplink_items = list()
item = /obj/item/weapon/aiModule/syndicate
cost = 7
-/datum/uplink_item/device_tools/plastic_explosives
+/datum/uplink_item/device_tools/c4
name = "Composition C-4"
desc = "C-4 is plastic explosive of the common variety Composition C. You can use it to breach walls or connect a signaler to its wiring to make it remotely detonable. \
It has a modifiable timer with a minimum setting of 10 seconds."
- item = /obj/item/weapon/plastique
+ item = /obj/item/weapon/c4
cost = 1
/datum/uplink_item/device_tools/powersink
diff --git a/code/datums/wires/explosive.dm b/code/datums/wires/explosive.dm
index 5ba362ba2fd..7a43c1bde8d 100644
--- a/code/datums/wires/explosive.dm
+++ b/code/datums/wires/explosive.dm
@@ -17,16 +17,16 @@ var/const/WIRE_EXPLODE = 1
if(!mended)
explode()
-/datum/wires/explosive/plastic
- holder_type = /obj/item/weapon/plastique
+/datum/wires/explosive/c4
+ holder_type = /obj/item/weapon/c4
-/datum/wires/explosive/plastic/CanUse(var/mob/living/L)
- var/obj/item/weapon/plastique/P = holder
+/datum/wires/explosive/c4/CanUse(var/mob/living/L)
+ var/obj/item/weapon/c4/P = holder
if(P.open_panel)
return 1
return 0
-/datum/wires/explosive/plastic/explode()
- var/obj/item/weapon/plastique/P = holder
+/datum/wires/explosive/c4/explode()
+ var/obj/item/weapon/c4/P = holder
P.explode(get_turf(P))
diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm
index 2dfcc6f3c9c..21a38a9ccef 100644
--- a/code/game/area/Space Station 13 areas.dm
+++ b/code/game/area/Space Station 13 areas.dm
@@ -380,17 +380,25 @@ proc/process_ghost_teleport_locs()
/area/tdome
name = "\improper Thunderdome"
- icon_state = "thunder"
+ icon_state = "yellow"
requires_power = 0
has_gravity = 1
+/area/tdome/arena
+ name = "\improper Thunderdome Arena"
+ icon_state = "thunder"
+
+/area/tdome/arena_source
+ name = "\improper Thunderdome Arena Template"
+ icon_state = "thunder"
+
/area/tdome/tdome1
name = "\improper Thunderdome (Team 1)"
icon_state = "green"
/area/tdome/tdome2
name = "\improper Thunderdome (Team 2)"
- icon_state = "yellow"
+ icon_state = "green"
/area/tdome/tdomeadmin
name = "\improper Thunderdome (Admin.)"
diff --git a/code/game/gamemodes/blob/blob.dm b/code/game/gamemodes/blob/blob.dm
index 903a983e7df..9bcc166edfd 100644
--- a/code/game/gamemodes/blob/blob.dm
+++ b/code/game/gamemodes/blob/blob.dm
@@ -16,6 +16,7 @@ var/list/blob_nodes = list()
recommended_enemies = 1
restricted_jobs = list("Cyborg", "AI")
+ pre_setup_before_jobs = 1
var/declared = 0
diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm
index fcfa5d99dd8..896507294d0 100644
--- a/code/game/gamemodes/changeling/changeling.dm
+++ b/code/game/gamemodes/changeling/changeling.dm
@@ -13,6 +13,7 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
required_players = 15
required_enemies = 1
recommended_enemies = 4
+ pre_setup_before_jobs = 1
var/const/prob_int_murder_target = 50 // intercept names the assassination target half the time
@@ -77,7 +78,7 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
return
/datum/game_mode/changeling/make_antag_chance(var/mob/living/carbon/human/character) //Assigns changeling to latejoiners
- var/changelingcap = min( round(num_players()/(config.changeling_scaling_coeff*2))+2, round(num_players()/config.changeling_scaling_coeff) )
+ var/changelingcap = min( round(joined_player_list.len/(config.changeling_scaling_coeff*2))+2, round(joined_player_list.len/config.changeling_scaling_coeff) )
if(changelings.len >= changelingcap) //Caps number of latejoin antagonists
return
if(changelings.len <= (changelingcap - 2) || prob(100 - (config.changeling_scaling_coeff*2)))
diff --git a/code/game/gamemodes/changeling/traitor_chan.dm b/code/game/gamemodes/changeling/traitor_chan.dm
index 615cf29383c..7f6e843c85b 100644
--- a/code/game/gamemodes/changeling/traitor_chan.dm
+++ b/code/game/gamemodes/changeling/traitor_chan.dm
@@ -61,7 +61,7 @@
return
/datum/game_mode/traitor/changeling/make_antag_chance(var/mob/living/carbon/human/character) //Assigns changeling to latejoiners
- var/changelingcap = min( round(num_players()/(config.changeling_scaling_coeff*4))+2, round(num_players()/(config.changeling_scaling_coeff*2)) )
+ var/changelingcap = min( round(joined_player_list.len/(config.changeling_scaling_coeff*4))+2, round(joined_player_list.len/(config.changeling_scaling_coeff*2)) )
if(changelings.len >= changelingcap) //Caps number of latejoin antagonists
..()
return
diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm
index 894e84f6ec9..3c8b922bb94 100644
--- a/code/game/gamemodes/cult/cult.dm
+++ b/code/game/gamemodes/cult/cult.dm
@@ -29,6 +29,7 @@
required_players = 20
required_enemies = 6
recommended_enemies = 6
+ pre_setup_before_jobs = 1
var/finished = 0
diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm
index 517ccae3a06..7974819cefb 100644
--- a/code/game/gamemodes/game_mode.dm
+++ b/code/game/gamemodes/game_mode.dm
@@ -218,6 +218,7 @@
if(BE_OPERATIVE) roletext="operative"
if(BE_WIZARD) roletext="wizard"
if(BE_REV) roletext="revolutionary"
+ if(BE_GANG) roletext="gangster"
if(BE_CULTIST) roletext="cultist"
if(BE_MONKEY) roletext="monkey"
@@ -400,4 +401,4 @@ proc/display_roundstart_logout_report()
text += "body destroyed"
text += ")"
- return text
+ return text
diff --git a/code/game/gamemodes/gameticker.dm b/code/game/gamemodes/gameticker.dm
index fc67d9f723a..8e2a9c15a14 100644
--- a/code/game/gamemodes/gameticker.dm
+++ b/code/game/gamemodes/gameticker.dm
@@ -275,11 +275,12 @@ var/round_start_time = 0
/datum/controller/gameticker/proc/equip_characters()
var/captainless=1
for(var/mob/living/carbon/human/player in player_list)
+ if(!player.mind.need_job_assign)
+ continue
if(player && player.mind && player.mind.assigned_role)
if(player.mind.assigned_role == "Captain")
captainless=0
- if(player.mind.assigned_role != "MODE")
- job_master.EquipRank(player, player.mind.assigned_role, 0)
+ job_master.EquipRank(player, player.mind.assigned_role, 0)
if(captainless)
for(var/mob/M in player_list)
if(!istype(M,/mob/new_player))
diff --git a/code/game/gamemodes/gang/gang.dm b/code/game/gamemodes/gang/gang.dm
new file mode 100644
index 00000000000..11fa69970ec
--- /dev/null
+++ b/code/game/gamemodes/gang/gang.dm
@@ -0,0 +1,442 @@
+//gang.dm
+//Gang War Game Mode
+
+/datum/game_mode
+ var/list/datum/mind/A_bosses = list() //gang A bosses
+ var/list/datum/mind/A_gangsters = list() //gang A Members
+ var/list/datum/mind/B_bosses = list() //gang B bosses
+ var/list/datum/mind/B_gangsters = list() //gang B Members
+
+/datum/game_mode/gang
+ name = "gang war"
+ config_tag = "gang"
+ antag_flag = BE_GANG
+ restricted_jobs = list("Security Officer", "Warden", "Detective", "AI", "Cyborg","Captain", "Head of Personnel", "Head of Security", "Chief Engineer", "Research Director", "Chief Medical Officer")
+ required_players = 20
+ required_enemies = 2
+ recommended_enemies = 4
+
+ var/finished = 0
+ var/checkwin_counter = 0
+///////////////////////////
+//Announces the game type//
+///////////////////////////
+/datum/game_mode/gang/announce()
+ world << "The current game mode is - Gang War! "
+ world << "A violent turf war has erupted on the station! Gangsters - Take over the station by killing the rival gang's bosses! Recruit gangsters by flashing them! Security - Protect the Crew! Identify and stop the mob bosses! "
+
+
+///////////////////////////////////////////////////////////////////////////////
+//Gets the round setup, cancelling if there's not enough players at the start//
+///////////////////////////////////////////////////////////////////////////////
+/datum/game_mode/gang/pre_setup()
+ if(config.protect_roles_from_antagonist)
+ restricted_jobs += protected_jobs
+
+ for(var/datum/mind/player in antag_candidates)
+ for(var/job in restricted_jobs)//Removing heads and such from the list
+ if(player.assigned_role == job)
+ antag_candidates -= player
+
+ if(antag_candidates.len > 2)
+ assign_bosses()
+ if(antag_candidates.len > 20)
+ assign_bosses()
+
+ if(!A_bosses.len || !B_bosses.len)
+ return 0
+
+ return 1
+
+
+/datum/game_mode/gang/post_setup()
+ spawn(rand(10,100))
+ for(var/datum/mind/boss_mind in A_bosses)
+ update_gang_icons_added(boss_mind, "A")
+ forge_gang_objectives(boss_mind, "A")
+ greet_gang(boss_mind)
+ equip_gang(boss_mind.current)
+
+ for(var/datum/mind/boss_mind in B_bosses)
+ update_gang_icons_added(boss_mind, "B")
+ forge_gang_objectives(boss_mind, "B")
+ greet_gang(boss_mind)
+ equip_gang(boss_mind.current)
+
+ modePlayer += A_bosses
+ modePlayer += B_bosses
+ ..()
+
+
+/datum/game_mode/gang/process()
+ checkwin_counter++
+ if(checkwin_counter >= 5)
+ if(!finished)
+ ticker.mode.check_win()
+ checkwin_counter = 0
+ return 0
+
+/datum/game_mode/gang/proc/assign_bosses()
+ var/datum/mind/boss = pick(antag_candidates)
+ A_bosses += boss
+ antag_candidates -= boss
+ boss.special_role = "[gang_name("A")] Gang (A) Boss"
+ log_game("[boss.key] has been selected as a boss for the [gang_name("A")] Gang (A)")
+
+ boss = pick(antag_candidates)
+ B_bosses += boss
+ antag_candidates -= boss
+ boss.special_role = "[gang_name("B")] Gang (B) Boss"
+ log_game("[boss.key] has been selected as a boss for the [gang_name("B")] Gang (B)")
+
+/datum/game_mode/proc/forge_gang_objectives(var/datum/mind/boss_mind)
+ var/datum/objective/rival_obj = new
+ rival_obj.owner = boss_mind
+ rival_obj.explanation_text = "Assassinate or exile the [(boss_mind in A_bosses) ? gang_name("B") : gang_name("A")] Gang's bosses."
+ boss_mind.objectives += rival_obj
+
+
+/datum/game_mode/proc/greet_gang(var/datum/mind/boss_mind, var/you_are=1)
+ var/obj_count = 1
+ if (you_are)
+ boss_mind.current << "You are a [(boss_mind in A_bosses) ? gang_name("A") : gang_name("B")] Gang Boss! "
+ for(var/datum/objective/objective in boss_mind.objectives)
+ boss_mind.current << "Objective #[obj_count] : [objective.explanation_text]"
+ obj_count++
+
+///////////////////////////////////////////////////////////////////////////
+//This equips the bosses with their gear, and makes the clown not clumsy//
+///////////////////////////////////////////////////////////////////////////
+/datum/game_mode/proc/equip_gang(mob/living/carbon/human/mob)
+ if(!istype(mob))
+ return
+
+ if (mob.mind)
+ if (mob.mind.assigned_role == "Clown")
+ mob << "Your training has allowed you to overcome your clownish nature, allowing you to wield weapons without harming yourself."
+ mob.mutations.Remove(CLUMSY)
+
+
+ var/obj/item/device/flash/T = new(mob)
+ var/obj/item/device/recaller/recaller = new(mob)
+
+ var/list/slots = list (
+ "backpack" = slot_in_backpack,
+ "left pocket" = slot_l_store,
+ "right pocket" = slot_r_store,
+ "left hand" = slot_l_hand,
+ "right hand" = slot_r_hand,
+ )
+
+ . = 0
+
+ var/where2 = mob.equip_in_one_of_slots(recaller, slots)
+ if (!where2)
+ mob << "Your Syndicate benefactors were unfortunately unable to get you a Recaller."
+ else
+ mob << "The Recaller in your [where2] will allow you to prevent the station from prematurely evacuating. Use it to recall the emergency shuttle from anywhere on the station."
+ . += 2
+
+ var/where = mob.equip_in_one_of_slots(T, slots)
+ if (!where)
+ mob << "Your Syndicate benefactors were unfortunately unable to get you a flash."
+ else
+ mob << "The flash in your [where] will help you to persuade the crew to work for you. Keep in mind that your underlings can only identify their bosses, but not each other."
+ . += 1
+
+ mob.update_icons()
+
+ return .
+
+/////////////////////////////////////////////
+//Checks if the either gang have won or not//
+/////////////////////////////////////////////
+/datum/game_mode/gang/check_win()
+ var/A_victory = check_gang_victory(B_bosses) //Check if B bosses are dead or exiled
+ var/B_victory = check_gang_victory(A_bosses) //Check if A bosses are dead or exiled
+
+ if(A_victory && B_victory)
+ finished = "Draw" //Both teams fail. Allow for draws in case they're all incapacitated at the same time.
+
+ else if(A_victory)
+ finished = "A" //Gang A wins
+
+ else if(B_victory)
+ finished = "B" //Gang B wins
+
+///////////////////////////////
+//Checks if the round is over//
+///////////////////////////////
+/datum/game_mode/gang/check_finished()
+ if(finished) //Check for Gang Boss death
+ return 1
+ return ..() //Check for evacuation/nuke
+
+///////////////////////////////////////////
+//Deals with converting players to a gang//
+///////////////////////////////////////////
+/datum/game_mode/proc/add_gangster(datum/mind/gangster_mind, var/gang, var/check = 1)
+ if(check && isloyal(gangster_mind.current)) //Check to see if the potential gangster is implanted
+ return 0
+ if((gangster_mind in A_bosses) || (gangster_mind in A_gangsters) || (gangster_mind in B_bosses) || (gangster_mind in B_gangsters))
+ return 0
+ if(gang == "A")
+ A_gangsters += gangster_mind
+ else
+ B_gangsters += gangster_mind
+ gangster_mind.current << "You are now a member of the [gang=="A" ? gang_name("A") : gang_name("B")] Gang! "
+ gangster_mind.current << "Help your bosses take over the station by defeating their rivals. You can identify your bosses by the brown \"B\" icons, but only they know who is in your gang! Work with your boss to avoid attacking your own gang. "
+ gangster_mind.current.attack_log += "\[[time_stamp()]\] Has been converted to the [gang=="A" ? "[gang_name("A")] Gang (A)" : "[gang_name("B")] Gang (B)"]! "
+ gangster_mind.special_role = "[gang=="A" ? "[gang_name("A")] Gang (A)" : "[gang_name("B")] Gang (B)"]"
+ update_gang_icons_added(gangster_mind,gang)
+ return 1
+//////////////////////////////////////////////////////////////
+//Deals with players going straight (Not a gangster anymore)//
+//////////////////////////////////////////////////////////////
+/datum/game_mode/proc/remove_gangster(datum/mind/gangster_mind, var/beingborged, var/silent)
+ var/gang
+
+ if(gangster_mind in A_bosses)
+ A_bosses -= gangster_mind
+ gang = "A"
+
+ else if(gangster_mind in A_gangsters)
+ A_gangsters -= gangster_mind
+ gang = "A"
+
+ else if(gangster_mind in B_bosses)
+ B_bosses -= gangster_mind
+ gang = "B"
+
+ else if(gangster_mind in B_gangsters)
+ B_gangsters -= gangster_mind
+ gang = "B"
+
+ if(!gang) //not a valid gangster
+ return
+
+ gangster_mind.special_role = null
+ if(silent < 2)
+ gangster_mind.current.attack_log += "\[[time_stamp()]\] Has reformed and defected from the [gang=="A" ? "[gang_name("A")] Gang (A)" : "[gang_name("B")] Gang (B)"]! "
+
+ if(beingborged)
+ if(!silent)
+ gangster_mind.current.visible_message("The frame beeps contentedly from the MMI before initalizing it.")
+ gangster_mind.current << "The frame's firmware detects and deletes your criminal behavior! You are no longer a gangster! "
+ message_admins("[key_name_admin(gangster_mind.current)] ? has been borged while being a member of the [gang=="A" ? "[gang_name("A")] Gang (A)" : "[gang_name("B")] Gang (B)"] Gang. They are no longer a gangster.")
+ else
+ if(!silent)
+ gangster_mind.current.visible_message("[gangster_mind.current] looks like they've given up the life of crime!")
+ gangster_mind.current << "You have been reformed! You are no longer a gangster! "
+
+ update_gang_icons_removed(gangster_mind)
+
+
+/////////////////////////////////////////////////////////////////////////////////////////////////
+//Keeps track of players having the correct icons////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////////////////
+/datum/game_mode/proc/update_all_gang_icons()
+ spawn(0)
+ var/list/all_gangsters = A_bosses + B_bosses + A_gangsters + B_gangsters
+
+ //Delete all gang icons
+ for(var/datum/mind/gang_mind in all_gangsters)
+ if(gang_mind.current)
+ if(gang_mind.current.client)
+ for(var/image/I in gang_mind.current.client.images)
+ if(I.icon_state == "gangster" || I.icon_state == "gang_boss")
+ del(I)
+
+ update_gang_icons("A")
+ update_gang_icons("B")
+
+/datum/game_mode/proc/update_gang_icons(var/gang)
+ var/list/bosses
+ var/list/gangsters
+ if(gang == "A")
+ bosses = A_bosses
+ gangsters = A_gangsters
+ else if(gang == "B")
+ bosses = B_bosses
+ gangsters = B_gangsters
+ else
+ world << "ERROR: Invalid gang in update_gang_icons()"
+
+ //Update gang icons for boss' visions
+ for(var/datum/mind/boss_mind in bosses)
+ if(boss_mind.current)
+ if(boss_mind.current.client)
+ for(var/datum/mind/gangster_mind in gangsters)
+ if(gangster_mind.current)
+ var/I = image('icons/mob/mob.dmi', loc = gangster_mind.current, icon_state = "gangster")
+ boss_mind.current.client.images += I
+ for(var/datum/mind/boss2_mind in bosses)
+ if(boss2_mind.current)
+ var/I = image('icons/mob/mob.dmi', loc = boss2_mind.current, icon_state = "gang_boss")
+ boss_mind.current.client.images += I
+
+ //Update boss and self icons for gangsters' visions
+ for(var/datum/mind/gangster_mind in gangsters)
+ if(gangster_mind.current)
+ if(gangster_mind.current.client)
+ for(var/datum/mind/boss_mind in bosses)
+ if(boss_mind.current)
+ var/I = image('icons/mob/mob.dmi', loc = boss_mind.current, icon_state = "gang_boss")
+ gangster_mind.current.client.images += I
+ //Tag themselves to see
+ var/K
+ if(gangster_mind in bosses) //If the new gangster is a boss himself
+ K = image('icons/mob/mob.dmi', loc = gangster_mind.current, icon_state = "gang_boss")
+ else
+ K = image('icons/mob/mob.dmi', loc = gangster_mind.current, icon_state = "gangster")
+ gangster_mind.current.client.images += K
+
+/////////////////////////////////////////////////
+//Assigns icons when a new gangster is recruited//
+/////////////////////////////////////////////////
+/datum/game_mode/proc/update_gang_icons_added(datum/mind/recruit_mind, var/gang)
+ var/list/bosses
+ if(gang == "A")
+ bosses = A_bosses
+ else if(gang == "B")
+ bosses = B_bosses
+ if(!gang)
+ world << "ERROR: Invalid gang in update_gang_icons_added()"
+
+ spawn(0)
+ for(var/datum/mind/boss_mind in bosses)
+ //Tagging the new gangster for the bosses to see
+ if(boss_mind.current)
+ if(boss_mind.current.client)
+ var/I
+ if(recruit_mind in bosses) //If the new gangster is a boss himself
+ I = image('icons/mob/mob.dmi', loc = recruit_mind.current, icon_state = "gang_boss")
+ else
+ I = image('icons/mob/mob.dmi', loc = recruit_mind.current, icon_state = "gangster")
+ boss_mind.current.client.images += I
+ //Tagging every boss for the new gangster to see
+ if(recruit_mind.current)
+ if(recruit_mind.current.client)
+ var/image/J = image('icons/mob/mob.dmi', loc = boss_mind.current, icon_state = "gang_boss")
+ recruit_mind.current.client.images += J
+ //Tag themselves to see
+ if(recruit_mind.current)
+ if(recruit_mind.current.client)
+ var/K
+ if(recruit_mind in bosses) //If the new gangster is a boss himself
+ K = image('icons/mob/mob.dmi', loc = recruit_mind.current, icon_state = "gang_boss")
+ else
+ K = image('icons/mob/mob.dmi', loc = recruit_mind.current, icon_state = "gangster")
+ recruit_mind.current.client.images += K
+
+////////////////////////////////////////
+//Keeps track of deconverted gangsters//
+////////////////////////////////////////
+/datum/game_mode/proc/update_gang_icons_removed(datum/mind/defector_mind)
+ var/list/all_gangsters = A_bosses + B_bosses + A_gangsters + B_gangsters
+
+ spawn(0)
+ //Remove defector's icon from gangsters' visions
+ for(var/datum/mind/boss_mind in all_gangsters)
+ if(boss_mind.current)
+ if(boss_mind.current.client)
+ for(var/image/I in boss_mind.current.client.images)
+ if((I.icon_state == "gangster" || I.icon_state == "gang_boss") && I.loc == defector_mind.current)
+ del(I)
+
+ //Remove gang icons from defector's vision
+ if(defector_mind.current)
+ if(defector_mind.current.client)
+ for(var/image/I in defector_mind.current.client.images)
+ if(I.icon_state == "gangster" || I.icon_state == "gang_boss")
+ del(I)
+
+///////////////////////////
+//Checks for gang victory//
+///////////////////////////
+/datum/game_mode/gang/proc/check_gang_victory(var/list/boss_list)
+ if(!boss_list.len)
+ return 0
+ for(var/datum/mind/boss_mind in boss_list)
+ if(boss_mind.current)
+ if(boss_mind.current.stat == DEAD || !ishuman(boss_mind.current) || !boss_mind.current.ckey || !boss_mind.current.client)
+ return 1
+ var/turf/T = get_turf(boss_mind.current)
+ if(T && (T.z != 1)) //If they leave the station they count as dead for this
+ return 1
+ return 0
+ return 1
+
+//////////////////////////////////////////////////////////////////////
+//Announces the end of the game with all relavent information stated//
+//////////////////////////////////////////////////////////////////////
+/datum/game_mode/gang/declare_completion()
+ if(!finished)
+ world << "The station was [station_was_nuked ? "destroyed!" : "evacuated before either gang could claim it!"] "
+ if(finished == "Draw")
+ world << "All gang bosses have been killed or exiled! "
+ else
+ world << "The [finished=="A" ? gang_name("A") : gang_name("B")] Gang defeated their rivals! "
+ ..()
+ return 1
+
+/datum/game_mode/proc/auto_declare_completion_gang()
+ var/winner
+ var/datum/game_mode/gang/game_mode = ticker.mode
+ if(istype(game_mode))
+ winner = game_mode.finished
+
+ var/num_ganga = 0
+ var/list/agang = A_gangsters + A_bosses
+ for(var/datum/mind/agangster in agang)
+ if(agangster.current)
+ if(agangster.current in living_mob_list)
+ num_ganga++
+
+ var/num_gangb = 0
+ var/list/bgang = B_gangsters + B_bosses
+ for(var/datum/mind/bgangster in bgang)
+ if(bgangster.current)
+ if(bgangster.current in living_mob_list)
+ num_gangb++
+
+ var/num_survivors = 0
+ for(var/mob/living/carbon/survivor in living_mob_list)
+ if(survivor.key)
+ num_survivors++
+
+ if(A_bosses.len || A_gangsters.len)
+ if(winner == "A" || winner == "B")
+ world << "The [gang_name("A")] Gang was [winner=="A" ? "victorious " : "defeated "] with [round((num_ganga/num_survivors)*100, 0.1)]% strength. "
+ world << "The [gang_name("A")] Gang bosses were: "
+ gang_membership_report(A_bosses)
+ world << "The [gang_name("A")] Gangsters were: "
+ gang_membership_report(A_gangsters)
+
+ if(B_bosses.len || B_gangsters.len)
+ if(winner == "A" || winner == "B")
+ world << "The [gang_name("B")] Gang was [winner=="B" ? "victorious " : "defeated "] with [round((num_gangb/num_survivors)*100, 0.1)]% strength "
+ world << "The [gang_name("B")] Gang bosses were: "
+ gang_membership_report(B_bosses)
+ world << "The [gang_name("B")] Gangsters were: "
+ gang_membership_report(B_gangsters)
+
+/datum/game_mode/proc/gang_membership_report(var/list/membership)
+ var/text = ""
+ for(var/datum/mind/gang_mind in membership)
+ text += "[gang_mind.key] was [gang_mind.name] ("
+ if(gang_mind.current)
+ if(gang_mind.current.stat == DEAD || isbrain(gang_mind.current))
+ text += "died"
+ else if(gang_mind.current.z != 1)
+ text += "fled the station"
+ else
+ text += "survived"
+ if(gang_mind.current.real_name != gang_mind.name)
+ text += " as [gang_mind.current.real_name] "
+ else
+ text += "body destroyed"
+ text += ")"
+ text += " "
+
+ world << text
diff --git a/code/game/gamemodes/intercept_report.dm b/code/game/gamemodes/intercept_report.dm
index 05ab6f49f63..2be2b45d984 100644
--- a/code/game/gamemodes/intercept_report.dm
+++ b/code/game/gamemodes/intercept_report.dm
@@ -61,6 +61,10 @@
src.text = ""
src.build_rev(correct_person)
return src.text
+ if("gang")
+ src.text = ""
+ src.build_gang(correct_person)
+ return src.text
if("cult")
src.text = ""
src.build_cult(correct_person)
@@ -220,6 +224,10 @@
src.text += " However, if this information is acted on without substantial evidence, those responsible will face severe repercussions."
*/
+/datum/intercept_text/proc/build_gang(datum/mind/correct_person)
+ src.text += " Syndicate forces may be supplying opposing criminal organizations within your sector in an attempt at destabilizing our operations."
+ src.text += "Ensure law and order is maintained on the station and be on the lookout for violent confrontations between station factions."
+ src.text += "Forced labor on the mining asteroid is recommended for anyone convicted of heading a criminal organization."
/datum/intercept_text/proc/build_wizard(datum/mind/correct_person)
var/SWF_desc = pick(SWF_names)
diff --git a/code/game/gamemodes/malfunction/malfunction.dm b/code/game/gamemodes/malfunction/malfunction.dm
index 675940e85d2..5e154994457 100644
--- a/code/game/gamemodes/malfunction/malfunction.dm
+++ b/code/game/gamemodes/malfunction/malfunction.dm
@@ -48,7 +48,7 @@
if (malf_ai.len < required_enemies)
return 0
for(var/datum/mind/ai_mind in malf_ai)
- ai_mind.assigned_role = "MODE" //So they aren't chosen for other jobs.
+ ai_mind.need_job_assign = 0
ai_mind.special_role = "malfunctioning AI"//So they actually have a special role/N
log_game("[ai_mind.key] (ckey) has been selected as a malf AI")
return 1
diff --git a/code/game/gamemodes/monkey/monkey.dm b/code/game/gamemodes/monkey/monkey.dm
index 266a7c35e06..c12ba003926 100644
--- a/code/game/gamemodes/monkey/monkey.dm
+++ b/code/game/gamemodes/monkey/monkey.dm
@@ -11,6 +11,7 @@
recommended_enemies = 1
restricted_jobs = list("Cyborg", "AI")
+ pre_setup_before_jobs = 1
var/carriers_to_make = 1
var/list/carriers = list()
diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm
index 3f98e8f1ee2..2a4c246d7bd 100644
--- a/code/game/gamemodes/nuclear/nuclear.dm
+++ b/code/game/gamemodes/nuclear/nuclear.dm
@@ -40,7 +40,7 @@
agent_number--
for(var/datum/mind/synd_mind in syndicates)
- synd_mind.assigned_role = "MODE" //So they aren't chosen for other jobs.
+ synd_mind.need_job_assign = 0
synd_mind.special_role = "Syndicate"//So they actually have a special role/N
log_game("[synd_mind.key] (ckey) has been selected as a nuclear operative")
return 1
diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm
index e0b45a6fc85..8e8c6a4f021 100644
--- a/code/game/gamemodes/objective.dm
+++ b/code/game/gamemodes/objective.dm
@@ -90,7 +90,7 @@ datum/objective/mutiny/check_completion()
datum/objective/mutiny/update_explanation_text()
..()
if(target && target.current)
- explanation_text = "Assassinate [target.current.real_name], the [!target_role_type ? target.assigned_role : target.special_role]."
+ explanation_text = "Assassinate or exile [target.current.real_name], the [!target_role_type ? target.assigned_role : target.special_role]."
else
explanation_text = "Free Objective"
diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm
index 35dff74d813..e850f817e52 100644
--- a/code/game/gamemodes/revolution/revolution.dm
+++ b/code/game/gamemodes/revolution/revolution.dm
@@ -19,10 +19,13 @@
required_players = 20
required_enemies = 3
recommended_enemies = 3
+ pre_setup_before_jobs = 1
var/finished = 0
- var/checkwin_counter = 0
- var/const/max_headrevs = 3
+ var/check_counter = 0
+ var/max_headrevs = 3
+ var/list/datum/mind/heads_to_kill = list()
+
///////////////////////////
//Announces the game type//
///////////////////////////
@@ -50,6 +53,10 @@
if(player.assigned_role == job)
antag_candidates -= player
+ var/list/heads = get_living_heads()
+ if(heads.len < max_headrevs)
+ max_headrevs = heads.len
+
for (var/i=1 to max_headrevs)
if (antag_candidates.len==0)
break
@@ -67,18 +74,17 @@
/datum/game_mode/revolution/post_setup()
var/list/heads = get_living_heads()
+ heads_to_kill = heads
+
for(var/datum/mind/rev_mind in head_revolutionaries)
for(var/datum/mind/head_mind in heads)
- var/datum/objective/mutiny/rev_obj = new
- rev_obj.owner = rev_mind
- rev_obj.target = head_mind
- rev_obj.explanation_text = "Assassinate [head_mind.name], the [head_mind.assigned_role]."
- rev_mind.objectives += rev_obj
+ mark_for_death(rev_mind, head_mind)
- // equip_traitor(rev_mind.current, 1) //changing how revs get assigned their uplink so they can get PDA uplinks. --NEO
- // Removing revolutionary uplinks. -Pete
- equip_revolutionary(rev_mind.current)
- update_rev_icons_added(rev_mind)
+ spawn(rand(10,100))
+ // equip_traitor(rev_mind.current, 1) //changing how revs get assigned their uplink so they can get PDA uplinks. --NEO
+ // Removing revolutionary uplinks. -Pete
+ equip_revolutionary(rev_mind.current)
+ update_rev_icons_added(rev_mind)
for(var/datum/mind/rev_mind in head_revolutionaries)
greet_revolutionary(rev_mind)
@@ -89,11 +95,12 @@
/datum/game_mode/revolution/process()
- checkwin_counter++
- if(checkwin_counter >= 5)
+ check_counter++
+ if(check_counter >= 5)
if(!finished)
+ check_heads()
ticker.mode.check_win()
- checkwin_counter = 0
+ check_counter = 0
return 0
@@ -103,7 +110,7 @@
var/datum/objective/mutiny/rev_obj = new
rev_obj.owner = rev_mind
rev_obj.target = head_mind
- rev_obj.explanation_text = "Assassinate [head_mind.name], the [head_mind.assigned_role]."
+ rev_obj.explanation_text = "Assassinate or exile [head_mind.name], the [head_mind.assigned_role]."
rev_mind.objectives += rev_obj
/datum/game_mode/proc/greet_revolutionary(var/datum/mind/rev_mind, var/you_are=1)
@@ -145,6 +152,44 @@
mob.update_icons()
return 1
+/////////////////////////////////
+//Gives head revs their targets//
+/////////////////////////////////
+/datum/game_mode/revolution/proc/mark_for_death(var/datum/mind/rev_mind, var/datum/mind/head_mind)
+ var/datum/objective/mutiny/rev_obj = new
+ rev_obj.owner = rev_mind
+ rev_obj.target = head_mind
+ rev_obj.explanation_text = "Assassinate [head_mind.name], the [head_mind.assigned_role]."
+ rev_mind.objectives += rev_obj
+
+////////////////////////////////////////////
+//Checks if new heads have joined midround//
+////////////////////////////////////////////
+/datum/game_mode/revolution/proc/check_heads()
+ var/list/heads = get_all_heads()
+ if(heads_to_kill.len < heads.len)
+ var/list/new_heads = heads - heads_to_kill
+ for(var/datum/mind/head_mind in new_heads)
+ for(var/datum/mind/rev_mind in head_revolutionaries)
+ mark_for_death(rev_mind, head_mind)
+
+ if(max_headrevs < initial(max_headrevs) && max_headrevs < heads.len)
+ latejoin_headrev()
+
+///////////////////////////////
+//Adds a new headrev midround//
+///////////////////////////////
+/datum/game_mode/revolution/proc/latejoin_headrev()
+ if(revolutionaries) //Head Revs are not in this list
+ var/datum/mind/stalin = pick(revolutionaries)
+ revolutionaries -= stalin
+ head_revolutionaries += stalin
+ log_game("[stalin.key] (ckey) has been promoted to a head rev")
+ equip_revolutionary(stalin.current)
+ forge_revolutionary_objectives(stalin)
+ greet_revolutionary(stalin)
+ ++max_headrevs
+
//////////////////////////////////////
//Checks if the revs have won or not//
//////////////////////////////////////
@@ -196,7 +241,8 @@
rev_mind.current.attack_log += "\[[time_stamp()]\] Has renounced the revolution! "
if(beingborged)
- rev_mind.current << "The frame's firmware detects and deletes your neural reprogramming! You remember nothing from the moment you were flashed until now. "
+ rev_mind.current << "The frame's firmware detects and deletes your neural reprogramming! You remember nothing but the name of the one who flashed you. "
+ message_admins("[key_name_admin(rev_mind.current)] ? has been borged while being a member of the revolution.")
else
rev_mind.current << "You have been brainwashed! You are no longer a revolutionary! Your memory is hazy from the time you were a rebel...the only thing you remember is the name of the one who brainwashed you... "
@@ -264,20 +310,36 @@
/datum/game_mode/proc/update_rev_icons_added(datum/mind/rev_mind)
spawn(0)
for(var/datum/mind/head_rev_mind in head_revolutionaries)
+
+ //Tagging the new rev for revheads to see
if(head_rev_mind.current)
if(head_rev_mind.current.client)
- var/I = image('icons/mob/mob.dmi', loc = rev_mind.current, icon_state = "rev")
+ var/I
+ if(rev_mind in head_revolutionaries) //If the new rev is a head rev
+ I = image('icons/mob/mob.dmi', loc = rev_mind.current, icon_state = "rev_head")
+ else
+ I = image('icons/mob/mob.dmi', loc = rev_mind.current, icon_state = "rev")
head_rev_mind.current.client.images += I
+
+ //Tagging the revheads for new rev to see
if(rev_mind.current)
if(rev_mind.current.client)
var/image/J = image('icons/mob/mob.dmi', loc = head_rev_mind.current, icon_state = "rev_head")
rev_mind.current.client.images += J
for(var/datum/mind/rev_mind_1 in revolutionaries)
+
+ //Tagging the new rev for fellow revs to see
if(rev_mind_1.current)
if(rev_mind_1.current.client)
- var/I = image('icons/mob/mob.dmi', loc = rev_mind.current, icon_state = "rev")
+ var/I
+ if(rev_mind in head_revolutionaries) //If the new rev is a head rev
+ I = image('icons/mob/mob.dmi', loc = rev_mind.current, icon_state = "rev_head")
+ else
+ I = image('icons/mob/mob.dmi', loc = rev_mind.current, icon_state = "rev")
rev_mind_1.current.client.images += I
+
+ //Tagging fellow revs for the new rev to see
if(rev_mind.current)
if(rev_mind.current.client)
var/image/J = image('icons/mob/mob.dmi', loc = rev_mind_1.current, icon_state = "rev")
@@ -336,22 +398,10 @@
/datum/game_mode/revolution/declare_completion()
if(finished == 1)
feedback_set_details("round_end_result","win - heads killed")
- world << "The heads of staff were killed or abandoned the station! The revolutionaries win! "
+ world << "The heads of staff were killed or exiled! The revolutionaries win! "
else if(finished == 2)
feedback_set_details("round_end_result","loss - rev heads killed")
world << "The heads of staff managed to stop the revolution! "
-
- var/num_revs = 0
- for(var/mob/living/carbon/mob in living_mob_list)
- if(mob.mind)
- if(mob.mind in head_revolutionaries || mob.mind in revolutionaries)
- num_revs++
- var/num_survivors = 0
- for(var/mob/living/carbon/survivor in living_mob_list)
- if(survivor.key)
- num_survivors++
-
- world << "[TAB]Command's Approval Rating: [100 - round((num_revs/num_survivors)*100, 0.1)]% " // % of loyal crew
..()
return 1
@@ -359,6 +409,18 @@
var/list/targets = list()
if(head_revolutionaries.len || istype(ticker.mode,/datum/game_mode/revolution))
+ var/num_revs = 0
+ var/num_survivors = 0
+ for(var/mob/living/carbon/survivor in living_mob_list)
+ if(survivor.ckey)
+ num_survivors++
+ if(survivor.mind)
+ if((survivor.mind in head_revolutionaries) || (survivor.mind in revolutionaries))
+ num_revs++
+
+ if(num_survivors)
+ world << "[TAB]Command's Approval Rating: [100 - round((num_revs/num_survivors)*100, 0.1)]% " // % of loyal crew
+
var/text = "The head revolutionaries were: "
for(var/datum/mind/headrev in head_revolutionaries)
@@ -388,7 +450,7 @@
for(var/datum/mind/rev in revolutionaries)
text += "[rev.key] was [rev.name] ("
if(rev.current)
- if(rev.current.stat == DEAD)
+ if(rev.current.stat == DEAD || isbrain(rev.current))
text += "died"
else if(rev.current.z != 1)
text += "fled the station"
@@ -414,7 +476,7 @@
text += ""
text += "[head.key] was [head.name] ("
if(head.current)
- if(head.current.stat == DEAD)
+ if(head.current.stat == DEAD || isbrain(head.current))
text += "died"
else if(head.current.z != 1)
text += "fled the station"
@@ -429,10 +491,4 @@
text += " "
text += " "
- world << text
-
-/proc/is_convertable_to_rev(datum/mind/mind)
- return istype(mind) && \
- istype(mind.current, /mob/living/carbon/human) && \
- !(mind.assigned_role in command_positions) && \
- !(mind.assigned_role in list("Security Officer", "Detective", "Warden"))
+ world << text
diff --git a/code/game/gamemodes/traitor/double_agents.dm b/code/game/gamemodes/traitor/double_agents.dm
index b252b7a6aba..4c8f7b4c086 100644
--- a/code/game/gamemodes/traitor/double_agents.dm
+++ b/code/game/gamemodes/traitor/double_agents.dm
@@ -5,6 +5,7 @@
required_players = 25
required_enemies = 5
recommended_enemies = 8
+ pre_setup_before_jobs = 1
traitor_name = "double agent"
diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm
index f26ebec359c..e2768ed59b2 100644
--- a/code/game/gamemodes/traitor/traitor.dm
+++ b/code/game/gamemodes/traitor/traitor.dm
@@ -15,6 +15,7 @@
required_players = 0
required_enemies = 1
recommended_enemies = 4
+ pre_setup_before_jobs = 1
var/traitors_possible = 4 //hard limit on traitors if scaling is turned off
var/scale_modifier = 1 // Used for gamemodes, that are a child of traitor, that need more than the usual.
@@ -70,7 +71,7 @@
return 1
/datum/game_mode/traitor/make_antag_chance(var/mob/living/carbon/human/character) //Assigns traitor to latejoiners
- var/traitorcap = round(joined_player_list.len / (config.traitor_scaling_coeff * scale_modifier * 2))
+ var/traitorcap = min(round(joined_player_list.len / (config.traitor_scaling_coeff * scale_modifier * 2)) + 2, round(joined_player_list.len/config.traitor_scaling_coeff*scale_modifier) )
if(traitors.len >= traitorcap) //Upper cap for number of latejoin antagonists
return
if(traitors.len <= (traitorcap - 2) || prob(100 / (config.traitor_scaling_coeff * scale_modifier * 2)))
diff --git a/code/game/gamemodes/wizard/rightandwrong.dm b/code/game/gamemodes/wizard/rightandwrong.dm
index 04b837c7d0a..5c6e9ff06f7 100644
--- a/code/game/gamemodes/wizard/rightandwrong.dm
+++ b/code/game/gamemodes/wizard/rightandwrong.dm
@@ -136,16 +136,10 @@
/mob/proc/summonevents()
if(events) //if there isn't something is very wrong
- if(!events.wizardmode) //lets get this party started
- events.control = list() //out with the old
- for(var/type in typesof(/datum/round_event_control/wizard) - /datum/round_event_control/wizard) //in with the new
- var/datum/round_event_control/wizard/W = new type()
- if(!W.typepath)
- continue //don't want this one! leave it for the garbage collector
- events.control += W //add it to the list of all events (controls)
+ if(!events.wizardmode)
+ events.toggleWizardmode()
events.frequency_lower = 600 //1 minute lower bound
events.frequency_upper = 3000 //5 minutes upper bound
- events.wizardmode = 1
events.reschedule()
else //Speed it up
diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm
index 245a827c3bf..ef97dcc54cf 100644
--- a/code/game/gamemodes/wizard/wizard.dm
+++ b/code/game/gamemodes/wizard/wizard.dm
@@ -21,7 +21,7 @@
var/datum/mind/wizard = pick(antag_candidates)
wizards += wizard
modePlayer += wizard
- wizard.assigned_role = "MODE" //So they aren't chosen for other jobs.
+ wizard.need_job_assign = 0
wizard.special_role = "Wizard"
if(wizardstart.len == 0)
wizard.current << "A starting location for you could not be found, please report this bug! "
diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm
index 25b63f923bd..9146370d5b6 100644
--- a/code/game/jobs/job_controller.dm
+++ b/code/game/jobs/job_controller.dm
@@ -46,6 +46,9 @@ var/global/datum/controller/occupations/job_master
if(!job) return 0
if(jobban_isbanned(player, rank)) return 0
if(!job.player_old_enough(player.client)) return 0
+ if(player.mind.special_role && ticker && ticker.mode && (job.title in ticker.mode.restricted_jobs))
+ return 0
+
var/position_limit = job.total_positions
if(!latejoin)
position_limit = job.spawn_positions
@@ -72,9 +75,15 @@ var/global/datum/controller/occupations/job_master
if(flag && (!player.client.prefs.be_special & flag))
Debug("FOC flag failed, Player: [player], Flag: [flag], ")
continue
+
if(config.enforce_human_authority && (job.title in command_positions) && player.client.prefs.pref_species.id != "human")
Debug("FOC non-human failed, Player: [player]")
continue
+
+ if(player.mind.special_role && ticker && ticker.mode && (job.title in ticker.mode.restricted_jobs))
+ Debug("FOC player has a special role and this job is blocked from this special role")
+ continue
+
if(player.client.prefs.GetJobDepartment(job, level) & job.flag)
Debug("FOC pass, Player: [player], Level:[level]")
candidates += player
@@ -104,6 +113,10 @@ var/global/datum/controller/occupations/job_master
Debug("GRJ non-human failed, Player: [player]")
continue
+ if(player.mind.special_role && ticker && ticker.mode && (job.title in ticker.mode.restricted_jobs))
+ Debug("GRJ player has a special role and this job is blocked from this special role")
+ continue
+
if((job.current_positions < job.spawn_positions) || job.spawn_positions == -1)
Debug("GRJ Random job given, Player: [player], Job: [job]")
AssignRole(player, job.title)
@@ -259,6 +272,10 @@ var/global/datum/controller/occupations/job_master
Debug("DO non-human failed, Player: [player], Job:[job.title]")
continue
+ if(player.mind.special_role && ticker && ticker.mode && (job.title in ticker.mode.restricted_jobs))
+ Debug("DO player has a special role and this job is blocked from that special role")
+ continue
+
// If the player wants that job on this level, then try give it to him.
if(player.client.prefs.GetJobDepartment(job, level) & job.flag)
diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm
index afa65e0f8ad..ba6c745cf26 100644
--- a/code/game/machinery/Sleeper.dm
+++ b/code/game/machinery/Sleeper.dm
@@ -174,13 +174,17 @@
else
dat += "DEAD "
dat += " "
- dat += "
Health:
[occupant.health]%
"
+ dat += "Health:
[occupant.stat > 1 ? "" : "[occupant.health]%"]
"
dat += "\> Brute Damage:
[occupant.getBruteLoss()]%
"
dat += "\> Resp. Damage:
[occupant.getOxyLoss()]%
"
dat += "\> Toxin Content:
[occupant.getToxLoss()]%
"
dat += "\> Burn Severity:
[occupant.getFireLoss()]%
"
dat += "Paralysis Summary:
[round(occupant.paralysis)]% [occupant.paralysis ? "([round(occupant.paralysis / 4)] seconds left)" : ""]
"
+ if(occupant.getCloneLoss())
+ dat += "Subject appears to have been imperfectly cloned.
"
+ if(occupant.getBrainLoss())
+ dat += "Significant brain damage detected.
"
if(occupant.reagents.reagent_list.len)
for(var/datum/reagent/R in occupant.reagents.reagent_list)
dat += text("", round(R.volume, 0.1))
diff --git a/code/game/machinery/bots/medbot.dm b/code/game/machinery/bots/medbot.dm
index 76c315270aa..a9754377d85 100644
--- a/code/game/machinery/bots/medbot.dm
+++ b/code/game/machinery/bots/medbot.dm
@@ -285,12 +285,10 @@
src.patient = C
src.oldpatient = C
src.last_found = world.time
- spawn(0)
- if((src.last_newpatient_speak + 100) < world.time) //Don't spam these messages!
- var/message = pick("Hey, you! Hold on, I'm coming.","Wait! I want to help!","You appear to be injured!")
- src.speak(message)
- src.last_newpatient_speak = world.time
- src.visible_message("[src] points at [C.name]!")
+ if((src.last_newpatient_speak + 300) < world.time) //Don't spam these messages!
+ var/message = pick("Hey, [C.name]! Hold on, I'm coming.","Wait [C.name]! I want to help!","[C.name], you appear to be injured!")
+ src.speak(message)
+ src.last_newpatient_speak = world.time
break
else
continue
@@ -451,9 +449,10 @@
spawn(30)
if ((get_dist(src, src.patient) <= 1) && (src.on))
- if((reagent_id == "internal_beaker") && (src.reagent_glass) && (src.reagent_glass.reagents.total_volume))
- src.reagent_glass.reagents.trans_to(src.patient,src.injection_amount) //Inject from beaker instead.
- src.reagent_glass.reagents.reaction(src.patient, 2)
+ if(reagent_id == "internal_beaker")
+ if(src.use_beaker && src.reagent_glass && src.reagent_glass.reagents.total_volume)
+ src.reagent_glass.reagents.trans_to(src.patient,src.injection_amount) //Inject from beaker instead.
+ src.reagent_glass.reagents.reaction(src.patient, 2)
else
src.patient.reagents.add_reagent(reagent_id,src.injection_amount)
C.visible_message("[src] injects [src.patient] with the syringe! ", \
diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index 37922f4529a..dc12c7dec60 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -175,17 +175,15 @@
// -- Mode/mind specific stuff goes here
- switch(ticker.mode.name)
- if("revolution")
- if((H.mind in ticker.mode:revolutionaries) || (H.mind in ticker.mode:head_revolutionaries))
- ticker.mode.update_all_rev_icons() //So the icon actually appears
- if("nuclear emergency")
- if(H.mind in ticker.mode.syndicates)
- ticker.mode.update_all_synd_icons()
- if("cult")
- if (H.mind in ticker.mode.cult)
- ticker.mode.add_cultist(src.occupant.mind)
- ticker.mode.update_all_cult_icons() //So the icon actually appears
+ if((H.mind in ticker.mode.revolutionaries) || (H.mind in ticker.mode.head_revolutionaries))
+ ticker.mode.update_all_rev_icons() //So the icon actually appears
+ if((H.mind in ticker.mode.A_bosses) || ((H.mind in ticker.mode.A_gangsters) || (H.mind in ticker.mode.B_bosses)) || (H.mind in ticker.mode.B_gangsters))
+ ticker.mode.update_all_gang_icons()
+ if(H.mind in ticker.mode.syndicates)
+ ticker.mode.update_all_synd_icons()
+ if (H.mind in ticker.mode.cult)
+ ticker.mode.add_cultist(src.occupant.mind)
+ ticker.mode.update_all_cult_icons() //So the icon actually appears
// -- End mode specific stuff
diff --git a/code/game/machinery/computer/ai_core.dm b/code/game/machinery/computer/ai_core.dm
index 311cc72910c..959e93bec35 100644
--- a/code/game/machinery/computer/ai_core.dm
+++ b/code/game/machinery/computer/ai_core.dm
@@ -143,6 +143,7 @@
ticker.mode.remove_cultist(M.brainmob.mind, 1)
ticker.mode.remove_revolutionary(M.brainmob.mind, 1)
+ ticker.mode.remove_gangster(M.brainmob.mind, 1)
user.drop_item()
M.loc = src
diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm
index 78876d2c060..31be4f0c434 100644
--- a/code/game/machinery/computer/camera.dm
+++ b/code/game/machinery/computer/camera.dm
@@ -15,7 +15,6 @@
if((istype(user,/mob/living/silicon/robot)) && (!(viewing.Find(user))))
return null
user.reset_view(current)
- attack_hand(user)
return 1
@@ -45,10 +44,10 @@
D["Cancel"] = "Cancel"
for(var/obj/machinery/camera/C in L)
if(!C.network)
- world.log << "[C.c_tag] has no camera network."
+ ERROR("[C.c_tag] has no camera network.")
continue
if(!(istype(C.network,/list)))
- world.log << "[C.c_tag]'s camera network is not a list!"
+ ERROR("[C.c_tag]'s camera network is not a list!")
continue
var/list/tempnetwork = C.network&network
if(tempnetwork.len)
diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm
index af90f9b35cc..bb6d6a5972c 100644
--- a/code/game/machinery/computer/card.dm
+++ b/code/game/machinery/computer/card.dm
@@ -30,9 +30,7 @@ var/time_last_changed_position = 0
"Captain",
"Head of Personnel",
"Head of Security",
- "Warden",
"Chief Engineer",
- "Quartermaster",
"Research Director",
"Chief Medical Officer",
"Chaplain")
diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm
index c0f658cb15c..bca82949746 100644
--- a/code/game/machinery/computer/communications.dm
+++ b/code/game/machinery/computer/communications.dm
@@ -622,6 +622,7 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
emergency_shuttle.recall(signal_origin)
log_game("[key_name(user)] has recalled the shuttle.")
message_admins("[key_name_admin(user)] has recalled the shuttle.", 1)
+ return 1
return
/obj/machinery/computer/communications/proc/post_status(var/command, var/data1, var/data2)
diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm
index cabf12e4188..ad296e20065 100644
--- a/code/game/machinery/computer/security.dm
+++ b/code/game/machinery/computer/security.dm
@@ -219,7 +219,9 @@
dat += "Comments/Log "
var/counter = 1
while(active2.fields[text("com_[]", counter)])
- dat += text("[]Delete Entry ", active2.fields[text("com_[]", counter)], src, counter)
+ dat += (active2.fields[text("com_[]", counter)] + " ")
+ if(active2.fields[text("com_[]", counter)] != "Deleted ")
+ dat += text("Delete Entry ", src, counter)
counter++
dat += text("Add Entry ", src)
dat += text("Delete Record (Security Only) ", src)
diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm
index 0a56ed5aa4b..552d52f599c 100644
--- a/code/game/mecha/equipment/tools/medical_tools.dm
+++ b/code/game/mecha/equipment/tools/medical_tools.dm
@@ -106,7 +106,7 @@
if(output)
var/temp = ""
if(occupant)
- temp = " \[Occupant: [occupant] (Health: [occupant.health]%)\]View stats |Eject "
+ temp = " \[Occupant: [occupant] ([occupant.stat > 1 ? "*DECEASED*" : "Health: [occupant.health]%"])\]View stats |Eject "
return "[output] [temp]"
return
@@ -163,12 +163,14 @@
t1 = "*dead*"
else
t1 = "Unknown"
- return {"Health: [occupant.health]% ([t1])
+ return {"Health: [occupant.stat > 1 ? "[t1]" : "[occupant.health]% ([t1])"]
Core Temperature: [src.occupant.bodytemperature-T0C]°C ([src.occupant.bodytemperature*1.8-459.67]°F)
Brute Damage: [occupant.getBruteLoss()]%
Respiratory Damage: [occupant.getOxyLoss()]%
Toxin Content: [occupant.getToxLoss()]%
Burn Severity: [occupant.getFireLoss()]%
+ [occupant.getCloneLoss() ? "Subject appears to have been imperfectly cloned." : ""]
+ [occupant.getBrainLoss() ? "Significant brain damage detected." : ""]
"}
/obj/item/mecha_parts/mecha_equipment/tool/sleeper/proc/get_occupant_reagents()
diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm
index 3da9e78669a..0447d2cd81e 100644
--- a/code/game/mecha/mech_fabricator.dm
+++ b/code/game/mecha/mech_fabricator.dm
@@ -724,7 +724,7 @@
if("uranium")
type = /obj/item/stack/sheet/mineral/uranium
if("bananium")
- type = /obj/item/stack/sheet/mineral/clown
+ type = /obj/item/stack/sheet/mineral/bananium
else
return 0
var/result = 0
@@ -785,7 +785,7 @@
G.amount = min(sheet_conversion, G.max_amount)
src.resources["diamond"] -= (G.amount * MINERAL_MATERIAL_AMOUNT)
while(src.resources["bananium"] >= MINERAL_MATERIAL_AMOUNT)
- var/obj/item/stack/sheet/mineral/clown/G = new /obj/item/stack/sheet/mineral/clown(src.loc)
+ var/obj/item/stack/sheet/mineral/bananium/G = new /obj/item/stack/sheet/mineral/bananium(src.loc)
var/sheet_conversion = round(src.resources["bananium"] / MINERAL_MATERIAL_AMOUNT)
G.amount = min(sheet_conversion, G.max_amount)
src.resources["bananium"] -= (G.amount * MINERAL_MATERIAL_AMOUNT)
@@ -812,7 +812,7 @@
material = "metal"
if(/obj/item/stack/sheet/glass)
material = "glass"
- if(/obj/item/stack/sheet/mineral/clown)
+ if(/obj/item/stack/sheet/mineral/bananium)
material = "bananium"
if(/obj/item/stack/sheet/mineral/uranium)
material = "uranium"
diff --git a/code/game/mecha/medical/odysseus.dm b/code/game/mecha/medical/odysseus.dm
index 3ae3bc488ad..acb94ea5e6d 100644
--- a/code/game/mecha/medical/odysseus.dm
+++ b/code/game/mecha/medical/odysseus.dm
@@ -85,7 +85,8 @@
var/foundVirus = 0
for(var/datum/disease/D in patient.viruses)
if(!D.hidden[SCANNER])
- foundVirus++
+ if(D.severity != D.non_threat)
+ foundVirus++
//if(patient.virus2)
// foundVirus++
diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm
index c719a49a664..f418c40a72b 100644
--- a/code/game/objects/items/devices/flash.dm
+++ b/code/game/objects/items/devices/flash.dm
@@ -74,20 +74,26 @@
flick("e_flash", M.flash)
if(ishuman(M) && ishuman(user) && M.stat != DEAD)
- if(user.mind && user.mind in ticker.mode.head_revolutionaries)
+ if(user.mind && ((user.mind in ticker.mode.head_revolutionaries) || (user.mind in ticker.mode.A_bosses) || (user.mind in ticker.mode.B_bosses)))
if(M.client)
if(M.stat == CONSCIOUS)
- var/revsafe = 0
- if(isloyal(M))
- revsafe = 1
M.mind_initialize() //give them a mind datum if they don't have one.
-// if(M.mind.has_been_rev)
-// revsafe = 2
- if(!revsafe)
+ M.mind.has_been_rev = 1
+ var/resisted
+ if(isloyal(M))
+ resisted = 1
+ else if(user.mind in ticker.mode.head_revolutionaries)
+ if(!ticker.mode.add_revolutionary(M.mind))
+ resisted = 1
+ else if(user.mind in ticker.mode.A_bosses)
+ if(!ticker.mode.add_gangster(M.mind,"A"))
+ resisted = 1
+ else if(user.mind in ticker.mode.B_bosses)
+ if(!ticker.mode.add_gangster(M.mind,"B"))
+ resisted = 1
+ if(!resisted)
M.mind.has_been_rev = 1
ticker.mode.add_revolutionary(M.mind)
- else if(revsafe == 1)
- user << "Something seems to be blocking the flash! "
else
user << "This mind seems resistant to the flash! "
else
diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm
index 482db3a9d23..fe503966e2a 100644
--- a/code/game/objects/items/devices/radio/electropack.dm
+++ b/code/game/objects/items/devices/radio/electropack.dm
@@ -11,6 +11,13 @@
m_amt = 10000
var/code = 2
+/obj/item/device/radio/electropack/initialize()
+ radio_controller.add_object(src, frequency, RADIO_CHAT)
+
+/obj/item/device/radio/electropack/New()
+ if(radio_controller)
+ radio_controller.add_object(src, frequency, RADIO_CHAT)
+
/obj/item/device/radio/electropack/attack_hand(mob/user)
if(iscarbon(user))
var/mob/living/carbon/C = user
diff --git a/code/game/objects/items/devices/recaller.dm b/code/game/objects/items/devices/recaller.dm
new file mode 100644
index 00000000000..72ec1e64b08
--- /dev/null
+++ b/code/game/objects/items/devices/recaller.dm
@@ -0,0 +1,38 @@
+//Recaller device
+//Allows gang leaders to recall the shuttle
+/obj/item/device/recaller
+ name = "suspicious device"
+ desc = "A strange device of sorts. Hard to really make out what it actually does just by looking."
+ icon_state = "recaller"
+ item_state = "walkietalkie"
+ throwforce = 0
+ w_class = 1.0
+ throw_speed = 3
+ throw_range = 7
+ flags = CONDUCT
+ var/recalling = 0
+
+/obj/item/device/recaller/attack_self(mob/user)
+ if(recalling)
+ return
+ if((user.mind in ticker.mode.A_bosses) || (user.mind in ticker.mode.B_bosses))
+ var/turf/userturf = get_turf(user)
+ if(userturf.z != 1)
+ user << "\icon[src]Error: Device out of range of station communication arrays. "
+ return
+
+ if(emergency_shuttle.location==0)
+ if (emergency_shuttle.online)
+ recalling = 1
+ loc << "\icon[src]Generating shuttle recall order with codes retrieved from last call signal... "
+ sleep(rand(10,30))
+ loc << "\icon[src]Shuttle recall order generated. Accessing station long-range communication arrays... "
+ sleep(rand(10,30))
+ loc << "\icon[src]Comm arrays accessed. Broadcasting recall signal... "
+ sleep(rand(10,30))
+ recalling = 0
+ if(!cancel_call_proc(user))
+ loc << "\icon[src]No response recieved. Emergency shuttle cannot be recalled at this time. "
+ return
+
+ user << "\icon[src]Emergency shuttle cannot be recalled at this time. "
\ No newline at end of file
diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm
index 26ad543c980..3deee5d8cdc 100644
--- a/code/game/objects/items/robot/robot_parts.dm
+++ b/code/game/objects/items/robot/robot_parts.dm
@@ -196,7 +196,7 @@
user << "Sticking a dead brain into the frame would sort of defeat the purpose. "
return
- if(M.brainmob.mind in ticker.mode.head_revolutionaries)
+ if((M.brainmob.mind in ticker.mode.head_revolutionaries) || (M.brainmob.mind in ticker.mode.A_bosses) || (M.brainmob.mind in ticker.mode.B_bosses))
user << "The frame's firmware lets out a shrill sound, and flashes 'Abnormal Memory Engram'. It refuses to accept the MMI. "
return
diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm
index 57a6c9f460f..069b0cc091a 100644
--- a/code/game/objects/items/stacks/sheets/mineral.dm
+++ b/code/game/objects/items/stacks/sheets/mineral.dm
@@ -193,7 +193,7 @@ var/global/list/datum/stack_recipe/silver_recipes = list ( \
/*
* Clown
*/
-/obj/item/stack/sheet/mineral/clown
+/obj/item/stack/sheet/mineral/bananium
name = "bananium"
icon_state = "sheet-clown"
singular_name = "bananium sheet"
@@ -210,7 +210,7 @@ var/global/list/datum/stack_recipe/clown_recipes = list ( \
new/datum/stack_recipe("Clown Statue", /obj/structure/statue/bananium/clown, 5, one_per_turf = 1, on_floor = 1), \
)
-/obj/item/stack/sheet/mineral/clown/New(var/loc, var/amount=null)
+/obj/item/stack/sheet/mineral/bananium/New(var/loc, var/amount=null)
recipes = clown_recipes
pixel_x = rand(0,4)-4
pixel_y = rand(0,4)-4
diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm
index 80fc7c2ec0b..9921a1ea472 100644
--- a/code/game/objects/items/stacks/stack.dm
+++ b/code/game/objects/items/stacks/stack.dm
@@ -29,6 +29,7 @@
return // Not supposed to be destroyed
if (usr && usr.machine==src)
usr << browse(null, "window=stack")
+ src.loc = null
..()
/obj/item/stack/examine()
@@ -135,23 +136,32 @@
usr << "Building [R.title] ... "
if (!do_after(usr, R.time))
return
- if (src.get_amount() < R.req_amount*multiplier)
- return
+ if (src.get_amount() < R.req_amount*multiplier)
+ return
+
var/atom/O = new R.result_type( usr.loc )
O.dir = usr.dir
+ use(R.req_amount * multiplier)
+
+ //is it a stack ?
if (R.max_res_amount > 1)
var/obj/item/stack/new_item = O
new_item.amount = R.res_amount*multiplier
- new_item.add_to_stacks(usr)
- use(R.req_amount * multiplier)
+ new_item.add_to_stacks(usr) //try to merge with existing stacks on current tile
+
+ if(new_item.amount <= 0)//if the stack is empty, i.e it has been merged with an existing stack and has been garbage collected
+ return
+
if (istype(O,/obj/item))
usr.put_in_hands(O)
O.add_fingerprint(usr)
+
//BubbleWrap - so newly formed boxes are empty
if ( istype(O, /obj/item/weapon/storage) )
for (var/obj/item/I in O)
qdel(I)
//BubbleWrap END
+
if (src && usr.machine==src) //do not reopen closed window
spawn( 0 )
src.interact(usr)
@@ -188,7 +198,7 @@
continue
oldsrc.attackby(item, usr)
usr << "You add new [item.singular_name] to the stack. It now contains [item.amount] [item.singular_name]\s."
- if(!oldsrc)
+ if(oldsrc.amount <= 0)
break
/obj/item/stack/attack_hand(mob/user as mob)
@@ -206,7 +216,7 @@
return
/obj/item/stack/attackby(obj/item/W as obj, mob/user as mob)
- ..()
+
if (istype(W, src.type))
var/obj/item/stack/S = W
if (S.is_cyborg)
@@ -231,7 +241,9 @@
src.use(to_transfer)
if (src && usr.machine==src)
spawn(0) src.interact(usr)
- else return ..()
+
+ else
+ ..()
/obj/item/stack/proc/copy_evidences(obj/item/stack/from as obj)
src.blood_DNA = from.blood_DNA
diff --git a/code/game/objects/items/stacks/tiles/plasteel.dm b/code/game/objects/items/stacks/tiles/plasteel.dm
index a76a3e35da4..5e922c9a6c5 100644
--- a/code/game/objects/items/stacks/tiles/plasteel.dm
+++ b/code/game/objects/items/stacks/tiles/plasteel.dm
@@ -25,7 +25,7 @@
return
/obj/item/stack/tile/plasteel/attackby(obj/item/W as obj, mob/user as mob)
- ..()
+
if (istype(W, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/WT = W
@@ -45,7 +45,8 @@
if (!R && replace)
user.put_in_hands(new_item)
return
- ..()
+ else
+ ..()
/*
/obj/item/stack/tile/plasteel/attack_self(mob/user as mob)
diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm
index 0059be158c8..6d7cb64a37f 100644
--- a/code/game/objects/items/weapons/explosives.dm
+++ b/code/game/objects/items/weapons/explosives.dm
@@ -1,7 +1,7 @@
-//In this file: Plastic explosives (C4) and Syndicate Bombs
+//In this file: C4 and Syndicate Bombs
-/obj/item/weapon/plastique
- name = "plastic explosives"
+/obj/item/weapon/c4
+ name = "C-4"
desc = "Used to put holes in specific areas without too much extra hole."
gender = PLURAL
icon = 'icons/obj/assemblies.dmi'
@@ -10,20 +10,20 @@
flags = NOBLUDGEON
w_class = 2.0
origin_tech = "syndicate=2"
- var/datum/wires/explosive/plastic/wires = null
+ var/datum/wires/explosive/c4/wires = null
var/timer = 10
var/atom/target = null
var/open_panel = 0
var/image_overlay = null
-/obj/item/weapon/plastique/New()
+/obj/item/weapon/c4/New()
wires = new(src)
image_overlay = image('icons/obj/assemblies.dmi', "plastic-explosive2")
..()
-/obj/item/weapon/plastique/suicide_act(var/mob/user)
+/obj/item/weapon/c4/suicide_act(var/mob/user)
. = BRUTELOSS
- user.visible_message("[user] activates the C4 and holds it above his head! It looks like \he's going out with a bang! ")
+ user.visible_message("[user] activates the [src.name] and holds it above his head! It looks like \he's going out with a bang! ")
var/message_say = "FOR NO RAISIN!"
if(user.mind)
if(user.mind.special_role)
@@ -36,11 +36,11 @@
message_say = "FOR NARSIE!"
user.say(message_say)
target = user
- message_admins("[key_name(user, user.client)](? ) suicided with C4 at ([x],[y],[z] - JMP )",0,1)
+ message_admins("[key_name(user, user.client)](? ) suicided with [src.name] at ([x],[y],[z] - JMP )",0,1)
explode(get_turf(user))
return .
-/obj/item/weapon/plastique/attackby(var/obj/item/I, var/mob/user)
+/obj/item/weapon/c4/attackby(var/obj/item/I, var/mob/user)
if(istype(I, /obj/item/weapon/screwdriver))
open_panel = !open_panel
user << "You [open_panel ? "open" : "close"] the wire panel. "
@@ -49,14 +49,14 @@
else
..()
-/obj/item/weapon/plastique/attack_self(mob/user as mob)
+/obj/item/weapon/c4/attack_self(mob/user as mob)
var/newtime = input(usr, "Please set the timer.", "Timer", 10) as num
if(user.get_active_hand() == src)
newtime = Clamp(newtime, 10, 60000)
timer = newtime
user << "Timer set for [timer] seconds."
-/obj/item/weapon/plastique/afterattack(atom/movable/target, mob/user, flag)
+/obj/item/weapon/c4/afterattack(atom/movable/target, mob/user, flag)
if (!flag)
return
if (ismob(target) || istype(target, /turf/unsimulated) || istype(target, /turf/simulated/shuttle) || istype(target, /obj/item/weapon/storage/))
@@ -71,19 +71,19 @@
if (ismob(target))
add_logs(user, target, "planted [name] on")
user.visible_message("[user.name] finished planting an explosive on [target.name]! ")
- message_admins("[key_name(user, user.client)](? ) planted C4 on [key_name(target)](? ) with [timer] second fuse",0,1)
- log_game("[key_name(user)] planted C4 on [key_name(target)] with [timer] second fuse")
+ message_admins("[key_name(user, user.client)](? ) planted [src.name] on [key_name(target)](? ) with [timer] second fuse",0,1)
+ log_game("[key_name(user)] planted [src.name] on [key_name(target)] with [timer] second fuse")
else
- message_admins("[key_name(user, user.client)](? ) planted C4 on [target.name] at ([target.x],[target.y],[target.z] - JMP ) with [timer] second fuse",0,1)
- log_game("[key_name(user)] planted C4 on [target.name] at ([target.x],[target.y],[target.z]) with [timer] second fuse")
+ message_admins("[key_name(user, user.client)](? ) planted [src.name] on [target.name] at ([target.x],[target.y],[target.z] - JMP ) with [timer] second fuse",0,1)
+ log_game("[key_name(user)] planted [src.name] on [target.name] at ([target.x],[target.y],[target.z]) with [timer] second fuse")
target.overlays += image_overlay
user << "Bomb has been planted. Timer counting down from [timer]."
spawn(timer*10)
explode(get_turf(target))
-/obj/item/weapon/plastique/proc/explode(var/location)
+/obj/item/weapon/c4/proc/explode(var/location)
if(!target)
target = get_atom_on_turf(src)
if(!target)
@@ -101,5 +101,5 @@
target.overlays -= image_overlay
qdel(src)
-/obj/item/weapon/plastique/attack(mob/M as mob, mob/user as mob, def_zone)
+/obj/item/weapon/c4/attack(mob/M as mob, mob/user as mob, def_zone)
return
diff --git a/code/game/objects/items/weapons/grenades/flashbang.dm b/code/game/objects/items/weapons/grenades/flashbang.dm
index c566f3b347b..4d74030235a 100644
--- a/code/game/objects/items/weapons/grenades/flashbang.dm
+++ b/code/game/objects/items/weapons/grenades/flashbang.dm
@@ -8,14 +8,10 @@
/obj/item/weapon/grenade/flashbang/prime()
update_mob()
var/flashbang_turf = get_turf(src)
- for(var/obj/structure/closet/L in get_hear(7, flashbang_turf))
- for(var/mob/living/M in L)
- bang(get_turf(M), M)
-
- for(var/mob/living/M in hearers(7, flashbang_turf))
+ for(var/mob/living/M in get_hearers_in_view(7, flashbang_turf))
bang(get_turf(M), M)
- for(var/obj/effect/blob/B in view(8,flashbang_turf)) //Blob damage here
+ for(var/obj/effect/blob/B in get_hear(8,flashbang_turf)) //Blob damage here
var/damage = round(30/(get_dist(B,get_turf(src))+1))
B.health -= damage
B.update_icon()
diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm
index b8664ed01e6..54474aac5a5 100644
--- a/code/game/objects/items/weapons/storage/uplink_kits.dm
+++ b/code/game/objects/items/weapons/storage/uplink_kits.dm
@@ -36,7 +36,7 @@
new /obj/item/weapon/gun/projectile/revolver(src)
new /obj/item/ammo_box/a357(src)
new /obj/item/weapon/card/emag(src)
- new /obj/item/weapon/plastique(src)
+ new /obj/item/weapon/c4(src)
return
if("murder")
diff --git a/code/game/objects/structures/crates_lockers/closets/syndicate.dm b/code/game/objects/structures/crates_lockers/closets/syndicate.dm
index d0aed1ca894..214d38da7e1 100644
--- a/code/game/objects/structures/crates_lockers/closets/syndicate.dm
+++ b/code/game/objects/structures/crates_lockers/closets/syndicate.dm
@@ -121,7 +121,7 @@
/obj/item/stack/sheet/mineral/plasma,
/obj/item/stack/sheet/mineral/uranium,
/obj/item/stack/sheet/mineral/diamond,
- /obj/item/stack/sheet/mineral/clown,
+ /obj/item/stack/sheet/mineral/bananium,
/obj/item/stack/sheet/plasteel,
/obj/item/stack/rods
)
diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm
index 3e626648f71..3b9747ba171 100644
--- a/code/game/objects/structures/tables_racks.dm
+++ b/code/game/objects/structures/tables_racks.dm
@@ -699,7 +699,7 @@ Destroy type values:
..()
/obj/structure/table/MouseDrop_T(mob/target, mob/living/carbon/human/user)
- if(istype(target) && user == target)
+ if(istype(target) && user == target && istype(user))
if(user.canmove)
climb_table(user)
@@ -708,7 +708,9 @@ Destroy type values:
user.visible_message("[user] starts climbing onto [src]. ", \
"[user] starts climbing onto [src]. ")
if(do_mob(user, user, 20))
- user.loc = src.loc
+ user.pass_flags += PASSTABLE
+ step(user,get_dir(user,src.loc))
+ user.pass_flags -= PASSTABLE
user.visible_message("[user] climbs onto [src]. ", \
"[user] climbs onto [src]. ")
add_logs(user, src, "climbed onto")
diff --git a/code/modules/admin/DB ban/functions.dm b/code/modules/admin/DB ban/functions.dm
index db40748eec3..7cdce2e281a 100644
--- a/code/modules/admin/DB ban/functions.dm
+++ b/code/modules/admin/DB ban/functions.dm
@@ -365,7 +365,7 @@ datum/admins/proc/DB_ban_unban_by_id(var/id)
output += "[j] "
for(var/j in nonhuman_positions)
output += "[j] "
- for(var/j in list("traitor","changeling","operative","revolutionary","cultist","wizard"))
+ for(var/j in list("traitor","changeling","operative","revolutionary", "gangster","cultist","wizard"))
output += "[j] "
output += ""
output += "Reason: "
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index 3f811920e73..2f00ae34b70 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -433,6 +433,7 @@ var/global/floorIsLava = 0
dat += {"
Fun Secrets
+ Reset Thunderdome to default state
Trigger a Virus Outbreak
Turn all humans into monkeys
Change the species of all humans
diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm
index e5237aba5f5..0c85ba713a6 100644
--- a/code/modules/admin/player_panel.dm
+++ b/code/modules/admin/player_panel.dm
@@ -430,6 +430,38 @@
dat += "Head not found! "
dat += ""
+ if(ticker.mode.A_bosses.len || ticker.mode.A_gangsters.len)
+ dat += "[gang_name("A")] Gang Members "
+ for(var/datum/mind/N in ticker.mode.A_bosses)
+ var/mob/M = N.current
+ if(!M)
+ dat += "Gang Boss not found! "
+ else
+ dat += "[M.real_name] (Boss) [M.client ? "" : " (logged out) "][M.stat == 2 ? " (DEAD) " : ""] "
+ dat += "PM "
+ for(var/datum/mind/N in ticker.mode.A_gangsters)
+ var/mob/M = N.current
+ if(M)
+ dat += "[M.real_name] [M.client ? "" : " (logged out) "][M.stat == 2 ? " (DEAD) " : ""] "
+ dat += "PM "
+ dat += "
"
+
+ if(ticker.mode.B_bosses.len || ticker.mode.B_gangsters.len)
+ dat += "[gang_name("B")] Gang Members "
+ for(var/datum/mind/N in ticker.mode.B_bosses)
+ var/mob/M = N.current
+ if(!M)
+ dat += "Gang Boss not found! "
+ else
+ dat += "[M.real_name] (Boss) [M.client ? "" : " (logged out) "][M.stat == 2 ? " (DEAD) " : ""] "
+ dat += "PM "
+ for(var/datum/mind/N in ticker.mode.B_gangsters)
+ var/mob/M = N.current
+ if(M)
+ dat += "[M.real_name] [M.client ? "" : " (logged out) "][M.stat == 2 ? " (DEAD) " : ""] "
+ dat += "PM "
+ dat += "
"
+
if(ticker.mode.changelings.len > 0)
dat += "Changelings "
for(var/datum/mind/changeling in ticker.mode.changelings)
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index a51591a7f15..54ca285ed53 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -56,12 +56,17 @@
log_admin("[key_name(usr)] created a death squad.")
if(!src.makeDeathsquad())
usr << "Unfortunatly there were not enough candidates available. "
-
if("11")
var/strength = input("Set Blob Strength (1=Weak, 2=Strong, 3=Full)","Set Strength",1) as num
message_admins("[key_name(usr)] spawned a blob with strength [strength].")
log_admin("[key_name(usr)] spawned a blob with strength [strength].")
new/datum/round_event/blob(strength)
+ if("12")
+ message_admins("[key_name(usr)] started a gang war.")
+ log_admin("[key_name(usr)] started a gang war.")
+ if(!src.makeGangsters())
+ usr << "Unfortunatly there were not enough candidates available. "
+
else if(href_list["forceevent"])
var/datum/round_event_control/E = locate(href_list["forceevent"]) in events.control
@@ -579,6 +584,12 @@
jobs += "" //Breaking it up so it fits nicer on the screen every 5 entries
+ //Gangster
+ if(jobban_isbanned(M, "gangster") || isbanned_dept)
+ jobs += "[replacetext("Gangster", " ", " ")] "
+ else
+ jobs += "[replacetext("Gangster", " ", " ")] "
+
//Cultist
if(jobban_isbanned(M, "cultist") || isbanned_dept)
jobs += "[replacetext("Cultist", " ", " ")] "
@@ -1597,6 +1608,25 @@
var/datum/round_event/E
var/ok = 0
switch(href_list["secretsfun"])
+ if("tdomereset")
+ var/delete_mobs = alert("Clear all mobs?","Confirm","Yes","No","Cancel")
+ if(delete_mobs == "Cancel")
+ return
+
+ var/area/thunderdome = locate(/area/tdome/arena)
+ if(delete_mobs == "Yes")
+ for(var/mob/living/mob in thunderdome)
+ qdel(mob) //Clear mobs
+ for(var/obj/obj in thunderdome)
+ if(!istype(obj,/obj/machinery/camera))
+ qdel(obj) //Clear objects
+
+ var/area/template = locate(/area/tdome/arena_source)
+ template.copy_contents_to(thunderdome)
+
+ log_admin("[key_name(usr)] reset the thunderdome to default with delete_mobs==[delete_mobs].", 1)
+ message_admins("[key_name_admin(usr)] reset the thunderdome to default with delete_mobs==[delete_mobs]. ", 1)
+
if("monkey")
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","M")
@@ -2202,4 +2232,4 @@
else if(href_list["ac_set_signature"])
src.admincaster_signature = adminscrub(input(usr, "Provide your desired signature", "Network Identity Handler", ""))
- src.access_news_network()
\ No newline at end of file
+ src.access_news_network()
diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm
index 151f2a1a8f6..89e92bc079b 100644
--- a/code/modules/admin/verbs/debug.dm
+++ b/code/modules/admin/verbs/debug.dm
@@ -822,7 +822,7 @@ var/global/list/g_fancy_list_of_safe_types = null
sec_briefcase.contents += new /obj/item/weapon/gun/energy/crossbow
sec_briefcase.contents += new /obj/item/weapon/gun/projectile/revolver/mateba
sec_briefcase.contents += new /obj/item/ammo_box/a357
- sec_briefcase.contents += new /obj/item/weapon/plastique
+ sec_briefcase.contents += new /obj/item/weapon/c4
M.equip_to_slot_or_del(sec_briefcase, slot_l_hand)
var/obj/item/device/pda/heads/pda = new(M)
@@ -1102,7 +1102,7 @@ var/global/list/g_fancy_list_of_safe_types = null
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/flashbangs(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/device/flashlight(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/weapon/plastique(M), slot_in_backpack)
+ M.equip_to_slot_or_del(new /obj/item/weapon/c4(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword(M), slot_l_store)
M.equip_to_slot_or_del(new /obj/item/weapon/shield/energy(M), slot_r_store)
diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm
index 21875856b58..5f55666e9de 100644
--- a/code/modules/admin/verbs/one_click_antag.dm
+++ b/code/modules/admin/verbs/one_click_antag.dm
@@ -17,6 +17,7 @@ client/proc/one_click_antag()
Make Cult
Make Malf AI
Make Blob
+ Make Gangsters
Make Wizard (Requires Ghosts)
Make Nuke Team (Requires Ghosts)
Make Deathsquad (Requires Ghosts)
@@ -382,6 +383,37 @@ client/proc/one_click_antag()
return
+
+/datum/admins/proc/makeGangsters()
+
+ var/datum/game_mode/gang/temp = new
+ if(config.protect_roles_from_antagonist)
+ temp.restricted_jobs += temp.protected_jobs
+
+ var/list/mob/living/carbon/human/candidates = list()
+ var/mob/living/carbon/human/H = null
+
+ for(var/mob/living/carbon/human/applicant in player_list)
+ if(applicant.client.prefs.be_special & BE_GANG)
+ if(applicant.stat == CONSCIOUS)
+ if(applicant.mind)
+ if(!applicant.mind.special_role)
+ if(!jobban_isbanned(applicant, "gangster") && !jobban_isbanned(applicant, "Syndicate"))
+ if(!(applicant.job in temp.restricted_jobs))
+ candidates += applicant
+
+ if(candidates.len >= 2)
+ H = pick(candidates)
+ H.mind.make_Gang("A")
+ candidates.Remove(H)
+ H = pick(candidates)
+ H.mind.make_Gang("B")
+ candidates.Remove(H)
+ return 1
+
+ return 0
+
+
/datum/admins/proc/makeBody(var/mob/dead/observer/G_found) // Uses stripped down and bastardized code from respawn character
if(!G_found || !G_found.key) return
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 7d3b28c5049..2ad54d17ca7 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -16,7 +16,8 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set
"pAI candidate" = 1, // 7
"cultist" = IS_MODE_COMPILED("cult"), // 8
"blob" = IS_MODE_COMPILED("blob"), // 9
- "monkey" = IS_MODE_COMPILED("monkey") // 10
+ "monkey" = IS_MODE_COMPILED("monkey"), // 10
+ "gangster" = IS_MODE_COMPILED("gang") // 11
)
diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm
index 1a21cda6535..40f373d19e0 100644
--- a/code/modules/clothing/masks/gasmask.dm
+++ b/code/modules/clothing/masks/gasmask.dm
@@ -195,6 +195,11 @@
var/voice = "Unknown"
var/vchange = 0//This didn't do anything before. It now checks if the mask has special functions/N
origin_tech = "syndicate=4"
+ action_button_name = "Toggle mask"
+
+/obj/item/clothing/mask/gas/voice/attack_self(mob/user)
+ vchange = !vchange
+ user << "The voice changer is now [vchange ? "on" : "off"]! "
/obj/item/clothing/mask/gas/voice/space_ninja
name = "ninja mask"
diff --git a/code/modules/events/event.dm b/code/modules/events/event.dm
index 20ec857ef56..ca9c11ec386 100644
--- a/code/modules/events/event.dm
+++ b/code/modules/events/event.dm
@@ -15,7 +15,10 @@
var/holidayID //string which should match the events.holiday variable if you wish this event to be holiday-specific
//anything with a (non-null) holidayID which does not match holiday, cannot run.
+ var/wizardevent = 0
+/datum/round_event_control/wizard
+ wizardevent = 1
/datum/round_event_control/proc/runEvent()
if(!ispath(typepath,/datum/round_event))
diff --git a/code/modules/events/event_manager.dm b/code/modules/events/event_manager.dm
index 41196389a01..c2035b0e378 100644
--- a/code/modules/events/event_manager.dm
+++ b/code/modules/events/event_manager.dm
@@ -21,8 +21,10 @@ var/datum/controller/event/events
for(var/type in typesof(/datum/round_event_control))
var/datum/round_event_control/E = new type()
- if(!E.typepath || E.typepath in typesof(/datum/round_event/wizard/))
+ if(!E.typepath)
continue //don't want this one! leave it for the garbage collector
+ if(E.wizardevent && !wizardmode)
+ E.weight = 0
control += E //add it to the list of all events (controls)
reschedule()
getHoliday()
@@ -254,3 +256,10 @@ var/datum/controller/event/events
holiday = "Friday the 13th"
world.update_status()
+
+/datum/controller/event/proc/toggleWizardmode()
+ wizardmode = !wizardmode
+ for(var/datum/round_event_control/E in control)
+ E.weight = initial(E.weight)
+ if((E.wizardevent && !wizardmode) || (!E.wizardevent && wizardmode))
+ E.weight = 0
\ No newline at end of file
diff --git a/code/modules/events/ninja.dm b/code/modules/events/ninja.dm
index 746d1010d0f..cb58098d54f 100644
--- a/code/modules/events/ninja.dm
+++ b/code/modules/events/ninja.dm
@@ -376,8 +376,8 @@ ________________________________________________________________________________
equip_to_slot_or_del(new /obj/item/clothing/mask/gas/voice/space_ninja(src), slot_wear_mask)
equip_to_slot_or_del(new /obj/item/clothing/glasses/night(src), slot_glasses)
equip_to_slot_or_del(new /obj/item/device/flashlight(src), slot_belt)
- equip_to_slot_or_del(new /obj/item/weapon/plastique(src), slot_r_store)
- equip_to_slot_or_del(new /obj/item/weapon/plastique(src), slot_l_store)
+ equip_to_slot_or_del(new /obj/item/weapon/c4(src), slot_r_store)
+ equip_to_slot_or_del(new /obj/item/weapon/c4(src), slot_l_store)
equip_to_slot_or_del(new /obj/item/weapon/tank/emergency_oxygen(src), slot_s_store)
equip_to_slot_or_del(new /obj/item/weapon/tank/jetpack/carbondioxide(src), slot_back)
diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm
index 32692b64771..3f884fcac54 100644
--- a/code/modules/flufftext/Hallucination.dm
+++ b/code/modules/flufftext/Hallucination.dm
@@ -344,7 +344,7 @@ var/list/non_fakeattack_weapons = list(/obj/item/weapon/gun/projectile, /obj/ite
/obj/item/clothing/mask/gas/voice, /obj/item/clothing/glasses/thermal,\
/obj/item/device/chameleon, /obj/item/weapon/card/emag,\
/obj/item/weapon/storage/toolbox/syndicate, /obj/item/weapon/aiModule,\
- /obj/item/device/radio/headset/syndicate, /obj/item/weapon/plastique,\
+ /obj/item/device/radio/headset/syndicate, /obj/item/weapon/c4,\
/obj/item/device/powersink, /obj/item/weapon/storage/box/syndie_kit,\
/obj/item/toy/syndicateballoon, /obj/item/weapon/gun/energy/laser/captain,\
/obj/item/weapon/hand_tele, /obj/item/weapon/rcd, /obj/item/weapon/tank/jetpack,\
diff --git a/code/modules/food&drinks/recipes/microwave/recipes_soup.dm b/code/modules/food&drinks/recipes/microwave/recipes_soup.dm
index 655d420ba3b..c5b717f3822 100644
--- a/code/modules/food&drinks/recipes/microwave/recipes_soup.dm
+++ b/code/modules/food&drinks/recipes/microwave/recipes_soup.dm
@@ -87,7 +87,7 @@
reagents = list("water" = 10)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/grown/banana,
- /obj/item/weapon/ore/clown,
+ /obj/item/weapon/ore/bananium,
)
result = /obj/item/weapon/reagent_containers/food/snacks/clownstears
diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm
index 56c26ec1530..54fb349d79d 100644
--- a/code/modules/hydroponics/hydroponics.dm
+++ b/code/modules/hydroponics/hydroponics.dm
@@ -817,20 +817,19 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob)
mind.transfer_to(podman)
mind.active = oldactive
// -- Mode/mind specific stuff goes here. TODO! Broken :( Should be merged into mob/living/Login
- switch(ticker.mode.name)
- if("revolution")
- if(podman.mind in ticker.mode:revolutionaries)
- ticker.mode:add_revolutionary(podman.mind)
- ticker.mode:update_all_rev_icons() //So the icon actually appears
- if(podman.mind in ticker.mode:head_revolutionaries)
- ticker.mode:update_all_rev_icons()
- if("nuclear emergency")
- if(podman.mind in ticker.mode:syndicates)
- ticker.mode:update_all_synd_icons()
- if("cult")
- if(podman.mind in ticker.mode:cult)
- ticker.mode:add_cultist(podman.mind)
- ticker.mode:update_all_cult_icons() //So the icon actually appears
+ if((podman.mind in ticker.mode.A_bosses) || (podman.mind in ticker.mode.A_gangsters) || (podman.mind in ticker.mode.B_bosses) || (podman.mind in ticker.mode.B_gangsters))
+ ticker.mode.update_all_gang_icons()
+ if(podman.mind in ticker.mode:revolutionaries)
+ ticker.mode.add_revolutionary(podman.mind)
+ ticker.mode.update_all_rev_icons() //So the icon actually appears
+ if(podman.mind in ticker.mode:head_revolutionaries)
+ ticker.mode.add_revolutionary(podman.mind)
+ ticker.mode.update_all_rev_icons()
+ if(podman.mind in ticker.mode:syndicates)
+ ticker.mode:update_all_synd_icons()
+ if(podman.mind in ticker.mode:cult)
+ ticker.mode:add_cultist(podman.mind)
+ ticker.mode:update_all_cult_icons() //So the icon actually appears
// -- End mode specific stuff
diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm
index 3bcd85faca7..8aa2b1b019f 100644
--- a/code/modules/mining/equipment_locker.dm
+++ b/code/modules/mining/equipment_locker.dm
@@ -41,7 +41,8 @@
D.createmessage("Ore Redemption Machine", "New minerals available!", msg, 1, 0)
var/obj/item/stack/sheet/storage = stack_list[processed_sheet]
storage.amount += 1 //Stack the sheets
- O.loc = null //Let the old sheet garbage collect
+ O.loc = null //Let the old sheet...
+ qdel(O) //... garbage collect
/obj/machinery/mineral/ore_redemption/process()
if(!panel_open) //If the machine is partially dissassembled, it should not process minerals
@@ -76,9 +77,7 @@
return
if(panel_open)
if(istype(W, /obj/item/weapon/crowbar))
- for (var/obj/O in src.contents)
- O.loc = src.loc //Drop item to the floor
- O.layer = initial(O.layer)
+ empty_content()
default_deconstruction_crowbar(W)
return 1
if(default_deconstruction_screwdriver(user, "ore_redemption-open", "ore_redemption", W))
@@ -197,18 +196,27 @@
s.start()
if(severity == 1)
if(prob(50))
- for (var/obj/O in src.contents)
- O.loc = src.loc //Drop item to the floor
- O.layer = initial(O.layer)
+ empty_content()
qdel(src)
else if(severity == 2)
if(prob(25))
- for (var/obj/O in src.contents)
- O.loc = src.loc //Drop item to the floor
- O.layer = initial(O.layer)
+ empty_content()
qdel(src)
return
+//empty the redemption machine by stacks of at most max_amount (50 at this time) size
+/obj/machinery/mineral/ore_redemption/proc/empty_content()
+ var/obj/item/stack/sheet/s
+
+ for(var/O in stack_list)
+ s = stack_list[O]
+ while(s.amount > s.max_amount)
+ new s.type(loc,s.max_amount)
+ s.use(s.max_amount)
+ s.loc = loc
+ s.layer = initial(s.layer)
+
+
/**********************Mining Equipment Vendor**************************/
/obj/machinery/mineral/equipment_vendor
@@ -576,7 +584,7 @@
projectilesound = 'sound/weapons/Gunshot4.ogg'
wanted_objects = list(/obj/item/weapon/ore/diamond, /obj/item/weapon/ore/gold, /obj/item/weapon/ore/silver,
/obj/item/weapon/ore/plasma, /obj/item/weapon/ore/uranium, /obj/item/weapon/ore/iron,
- /obj/item/weapon/ore/clown)
+ /obj/item/weapon/ore/bananium)
/mob/living/simple_animal/hostile/mining_drone/attackby(obj/item/I as obj, mob/user as mob)
if(istype(I, /obj/item/weapon/weldingtool))
diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm
index 3dfcec72548..9aacac2f023 100644
--- a/code/modules/mining/machine_processing.dm
+++ b/code/modules/mining/machine_processing.dm
@@ -271,7 +271,7 @@
if (selected_glass == 0 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 0 && selected_clown == 1)
if (ore_clown > 0)
ore_clown--;
- generate_mineral(/obj/item/stack/sheet/mineral/clown)
+ generate_mineral(/obj/item/stack/sheet/mineral/bananium)
else
on = 0
continue
@@ -385,7 +385,7 @@
ore_uranium++
O.loc = null
continue
- if (istype(O,/obj/item/weapon/ore/clown))
+ if (istype(O,/obj/item/weapon/ore/bananium))
ore_clown++
O.loc = null
continue
diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm
index 8ce2cf50a52..eb3820ee4db 100644
--- a/code/modules/mining/mine_turfs.dm
+++ b/code/modules/mining/mine_turfs.dm
@@ -417,7 +417,7 @@
if (src.mineralName == "Diamond")
new /obj/item/weapon/ore/diamond(src)
if (src.mineralName == "Clown")
- new /obj/item/weapon/ore/clown(src)
+ new /obj/item/weapon/ore/bananium(src)
var/turf/simulated/floor/plating/asteroid/airless/N = ChangeTurf(/turf/simulated/floor/plating/asteroid/airless)
N.fullUpdateMineralOverlays()
return
diff --git a/code/modules/mining/mint.dm b/code/modules/mining/mint.dm
index 9ae9d7bd63d..b7d3df5920b 100644
--- a/code/modules/mining/mint.dm
+++ b/code/modules/mining/mint.dm
@@ -43,7 +43,7 @@
if (istype(O, /obj/item/stack/sheet/metal))
amt_iron += 100 * O.amount
O.loc = null
- if (istype(O, /obj/item/stack/sheet/mineral/clown))
+ if (istype(O, /obj/item/stack/sheet/mineral/bananium))
amt_clown += 100 * O.amount
O.loc = null
if (istype(O, /obj/item/stack/sheet/mineral/adamantine))
diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm
index c0e88d1df5b..2da6f078895 100644
--- a/code/modules/mining/ores_coins.dm
+++ b/code/modules/mining/ores_coins.dm
@@ -85,12 +85,12 @@
points = 36
refined_type = /obj/item/stack/sheet/mineral/diamond
-/obj/item/weapon/ore/clown
+/obj/item/weapon/ore/bananium
name = "Bananium ore"
icon_state = "Clown ore"
origin_tech = "materials=4"
points = 27
- refined_type = /obj/item/stack/sheet/mineral/clown
+ refined_type = /obj/item/stack/sheet/mineral/bananium
/obj/item/weapon/ore/slag
name = "Slag"
diff --git a/code/modules/mining/satchel_ore_boxdm.dm b/code/modules/mining/satchel_ore_boxdm.dm
index 794efb49ec8..20636dabd5f 100644
--- a/code/modules/mining/satchel_ore_boxdm.dm
+++ b/code/modules/mining/satchel_ore_boxdm.dm
@@ -45,7 +45,7 @@
amt_gold++;
if (istype(C,/obj/item/weapon/ore/uranium))
amt_uranium++;
- if (istype(C,/obj/item/weapon/ore/clown))
+ if (istype(C,/obj/item/weapon/ore/bananium))
amt_clown++;
var/dat = text("The contents of the ore box reveal... ")
diff --git a/code/modules/mob/living/carbon/alien/humanoid/life.dm b/code/modules/mob/living/carbon/alien/humanoid/life.dm
index 0f9b45ee478..424f9a1bb52 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/life.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/life.dm
@@ -4,7 +4,7 @@
oxygen_alert = 0
toxins_alert = 0
fire_alert = 0
-
+ pass_flags = PASSTABLE
var/temperature_alert = 0
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index 7766c7548e0..15d91bfb4ed 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -268,7 +268,11 @@
if(R)
criminal = R.fields["criminal"]
- msg += "Criminal status: \[[criminal]\] \n"
+ msg += "Criminal status: \[[criminal]\] \n"
+ msg += "Security record: \[View\] "
+ msg += "\[Add crime\] "
+ msg += "\[View comment log\] "
+ msg += "\[Add comment\] \n"
msg += "*---------*"
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index fe05d3e038c..7958b17f47e 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -461,7 +461,6 @@
src << "You feel your [pocket_side] pocket being fumbled with! "
..()
- return
if(href_list["criminal"])
@@ -471,38 +470,106 @@
if(usr.stat || usr == src) //|| !usr.canmove || usr.restrained()) Fluff: Sechuds have eye-tracking technology and sets 'arrest' to people that the wearer looks and blinks at.
return //Non-fluff: This allows sec to set people to arrest as they get disarmed or beaten
// Checks the user has security clearence before allowing them to change arrest status via hud, comment out to enable all access
- var/allowed_access = 0
+ var/allowed_access = null
var/obj/item/clothing/glasses/G = H.glasses
if (!G.emagged)
if(H.wear_id)
var/list/access = H.wear_id.GetAccess()
if(access_sec_doors in access)
- allowed_access = 1
+ allowed_access = H.get_authentification_name()
else
- allowed_access = 1
+ allowed_access = "@%&ERROR_%$*"
if(!allowed_access)
H << "ERROR: Invalid Access "
return
-
- var/modified = 0
var/perpname = get_face_name(get_id_name(""))
if(perpname)
var/datum/data/record/R = find_record("name", perpname, data_core.security)
if(R)
- var/setcriminal = input(usr, "Specify a new criminal status for this person.", "Security HUD", R.fields["criminal"]) in list("None", "*Arrest*", "Incarcerated", "Parolled", "Discharged", "Cancel")
- if(R)
- if(istype(H.glasses, /obj/item/clothing/glasses/hud/security) || istype(H.glasses, /obj/item/clothing/glasses/hud/security/sunglasses))
- if(setcriminal != "Cancel")
- R.fields["criminal"] = setcriminal
- modified = 1
+ if(href_list["status"])
+ var/setcriminal = input(usr, "Specify a new criminal status for this person.", "Security HUD", R.fields["criminal"]) in list("None", "*Arrest*", "Incarcerated", "Parolled", "Discharged", "Cancel")
+ if(R)
+ if(istype(H.glasses, /obj/item/clothing/glasses/hud/security) || istype(H.glasses, /obj/item/clothing/glasses/hud/security/sunglasses))
+ if(setcriminal != "Cancel")
+ R.fields["criminal"] = setcriminal
- spawn()
+ spawn()
H.handle_regular_hud_updates()
+ return
- if(!modified)
+ if(href_list["view"])
+ if(R)
+ if(usr.stat || H.weakened || H.stunned || H.restrained() || !istype(H.glasses, /obj/item/clothing/glasses/hud/security) || !istype(H.glasses, /obj/item/clothing/glasses/hud/security/sunglasses))
+ return
+ usr << "Name: [R.fields["name"]] Criminal Status: [R.fields["criminal"]]"
+ usr << "Minor Crimes: "
+ for(var/datum/data/crime/c in R.fields["mi_crim"])
+ usr << "Crime: [c.crimeName]"
+ usr << "Details: [c.crimeDetails]"
+ usr << "Added by [c.author] at [c.time]"
+ usr << "----------"
+ usr << "Major Crimes: "
+ for(var/datum/data/crime/c in R.fields["ma_crim"])
+ usr << "Crime: [c.crimeName]"
+ usr << "Details: [c.crimeDetails]"
+ usr << "Added by [c.author] at [c.time]"
+ usr << "----------"
+ usr << "Notes: [R.fields["notes"]]"
+ return
+
+ if(href_list["add_crime"])
+ switch(alert("What crime would you like to add?","Security HUD","Minor Crime","Major Crime","Cancel"))
+ if("Minor Crime")
+ if(R)
+ var/t1 = copytext(sanitize(input("Please input minor crime names:", "Security HUD", "", null) as text),1,MAX_MESSAGE_LEN)
+ var/t2 = copytext(sanitize(input("Please input minor crime details:", "Security HUD", "", null) as message),1,MAX_MESSAGE_LEN)
+ if(R)
+ if (!t1 || !t2 || !allowed_access || H.stat || H.weakened || H.stunned || H.restrained() || !istype(H.glasses, /obj/item/clothing/glasses/hud/security) || !istype(H.glasses, /obj/item/clothing/glasses/hud/security/sunglasses))
+ return
+ var/crime = data_core.createCrimeEntry(t1, t2, allowed_access, worldtime2text())
+ data_core.addMinorCrime(R.fields["id"], crime)
+ usr << "Successfully added a minor crime. "
+ return
+ if("Major Crime")
+ if(R)
+ var/t1 = copytext(sanitize(input("Please input major crime names:", "Security HUD", "", null) as text),1,MAX_MESSAGE_LEN)
+ var/t2 = copytext(sanitize(input("Please input major crime details:", "Security HUD", "", null) as message),1,MAX_MESSAGE_LEN)
+ if(R)
+ if (!t1 || !t2 || !allowed_access || H.stat || H.weakened || H.stunned || H.restrained() || !istype(H.glasses, /obj/item/clothing/glasses/hud/security) || !istype(H.glasses, /obj/item/clothing/glasses/hud/security/sunglasses))
+ return
+ var/crime = data_core.createCrimeEntry(t1, t2, allowed_access, worldtime2text())
+ data_core.addMajorCrime(R.fields["id"], crime)
+ usr << "Successfully added a major crime. "
+ return
+ else return
+
+ if(href_list["view_comment"])
+ if(R)
+ if(H.stat || H.weakened || H.stunned || H.restrained() || !istype(H.glasses, /obj/item/clothing/glasses/hud/security) || !istype(H.glasses, /obj/item/clothing/glasses/hud/security/sunglasses))
+ return
+ usr << "Comments/Log: "
+ var/counter = 1
+ while(R.fields[text("com_[]", counter)])
+ usr << R.fields[text("com_[]", counter)]
+ usr << "----------"
+ counter++
+ return
+
+ if(href_list["add_comment"])
+ if(R)
+ var/t1 = copytext(sanitize(input("Add Comment:", "Secure. records", null, null) as message),1,MAX_MESSAGE_LEN)
+ if(R)
+ if (!t1 || !allowed_access || H.stat || H.weakened || H.stunned || H.restrained() || !istype(H.glasses, /obj/item/clothing/glasses/hud/security) || !istype(H.glasses, /obj/item/clothing/glasses/hud/security/sunglasses))
+ return
+ var/counter = 1
+ while(R.fields[text("com_[]", counter)])
+ counter++
+ R.fields[text("com_[]", counter)] = text("Made by [] on [] [], [] []", allowed_access, worldtime2text(), time2text(world.realtime, "MMM DD"), year_integer+540, t1,)
+ usr << "Successfully added comment. "
+ return
usr << "Unable to locate a data core entry for this person. "
/mob/living/carbon/human/proc/play_xylophone()
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index 35afcd97f8d..35682a33ed6 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -183,6 +183,7 @@ emp_act
apply_effect(20, PARALYZE, armor)
if(src != user && I.damtype == BRUTE)
ticker.mode.remove_revolutionary(mind)
+ ticker.mode.remove_gangster(mind)
if(bloody) //Apply blood
if(wear_mask)
wear_mask.add_blood(src)
diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm
index 1d1faa53c25..9eb619a907f 100644
--- a/code/modules/mob/living/carbon/human/say.dm
+++ b/code/modules/mob/living/carbon/human/say.dm
@@ -47,10 +47,14 @@
return message
/mob/living/carbon/human/GetVoice()
- if(istype(src.wear_mask, /obj/item/clothing/mask/gas/voice))
- var/obj/item/clothing/mask/gas/voice/V = src.wear_mask
- if(V.vchange)
- return V.voice
+ if(istype(wear_mask, /obj/item/clothing/mask/gas/voice))
+ var/obj/item/clothing/mask/gas/voice/V = wear_mask
+ if(V.vchange && wear_id)
+ var/obj/item/weapon/card/id/idcard = wear_id.GetID()
+ if(istype(idcard))
+ return idcard.registered_name
+ else
+ return real_name
else
return real_name
if(mind && mind.changeling && mind.changeling.mimicing)
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index 9a11c2eebe9..f0c5fe46444 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -853,6 +853,7 @@
H.apply_effect(20, PARALYZE, armor)
if(H != user && I.damtype == BRUTE)
ticker.mode.remove_revolutionary(H.mind)
+ ticker.mode.remove_gangster(H.mind)
if(bloody) //Apply blood
if(H.wear_mask)
diff --git a/code/modules/mob/living/login.dm b/code/modules/mob/living/login.dm
index d19335d1f3e..0d2e5ad541b 100644
--- a/code/modules/mob/living/login.dm
+++ b/code/modules/mob/living/login.dm
@@ -12,6 +12,11 @@
if("revolution")
if((mind in ticker.mode.revolutionaries) || (src.mind in ticker.mode:head_revolutionaries))
ticker.mode.update_rev_icons_added(src.mind)
+ if("gang")
+ if((mind in ticker.mode.A_bosses) || (mind in ticker.mode.A_gangsters))
+ ticker.mode.update_gang_icons_added(src.mind,"A")
+ if((mind in ticker.mode.B_bosses) || (mind in ticker.mode.B_gangsters))
+ ticker.mode.update_gang_icons_added(src.mind,"B")
if("cult")
if(mind in ticker.mode:cult)
ticker.mode.update_cult_icons_added(src.mind)
diff --git a/code/modules/mob/living/silicon/login.dm b/code/modules/mob/living/silicon/login.dm
index 677d8fea567..f8bed180209 100644
--- a/code/modules/mob/living/silicon/login.dm
+++ b/code/modules/mob/living/silicon/login.dm
@@ -2,4 +2,5 @@
if(mind && ticker && ticker.mode)
ticker.mode.remove_cultist(mind, 0)
ticker.mode.remove_revolutionary(mind, 0)
+ ticker.mode.remove_gangster(mind, 0)
..()
\ No newline at end of file
diff --git a/code/modules/mob/living/silicon/robot/login.dm b/code/modules/mob/living/silicon/robot/login.dm
index 99e69a84c53..3a8a144d0eb 100644
--- a/code/modules/mob/living/silicon/robot/login.dm
+++ b/code/modules/mob/living/silicon/robot/login.dm
@@ -4,6 +4,7 @@
regenerate_icons()
show_laws(0)
if(mind) ticker.mode.remove_revolutionary(mind)
+ if(mind) ticker.mode.remove_gangster(mind)
/mob/living/silicon/robot/update_hotkey_mode()
winset(src, null, "mainwindow.macro=borghotkeymode hotkey_toggle.is-checked=true mapwindow.map.focus=true input.background-color=#F0F0F0")
diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm
index 9ad3606dcb7..71ab8197d12 100644
--- a/code/modules/mob/living/simple_animal/friendly/corgi.dm
+++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm
@@ -127,7 +127,7 @@
if(!item_to_add)
usr.visible_message("[usr] pets [src] ","You rest your hand on [src]'s back for a moment. ")
return
- if(istype(item_to_add,/obj/item/weapon/plastique)) // last thing he ever wears, I guess
+ if(istype(item_to_add,/obj/item/weapon/c4)) // last thing he ever wears, I guess
item_to_add.afterattack(src,usr,1)
return
@@ -169,7 +169,7 @@
//Many hats added, Some will probably be removed, just want to see which ones are popular.
/mob/living/simple_animal/corgi/proc/place_on_head(obj/item/item_to_add)
- if(istype(item_to_add,/obj/item/weapon/plastique)) // last thing he ever wears, I guess
+ if(istype(item_to_add,/obj/item/weapon/c4)) // last thing he ever wears, I guess
item_to_add.afterattack(src,usr,1)
return
diff --git a/code/modules/projectiles/projectile/energy.dm b/code/modules/projectiles/projectile/energy.dm
index fba3302ac90..4f1060ea6ad 100644
--- a/code/modules/projectiles/projectile/energy.dm
+++ b/code/modules/projectiles/projectile/energy.dm
@@ -23,7 +23,7 @@
..()
/obj/item/projectile/energy/declone
- name = "declown"
+ name = "radiation beam"
icon_state = "declone"
nodamage = 1
damage_type = CLONE
diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm
index 7f0078bb44f..daeab3aac5f 100644
--- a/code/modules/reagents/Chemistry-Machinery.dm
+++ b/code/modules/reagents/Chemistry-Machinery.dm
@@ -826,7 +826,7 @@ obj/machinery/computer/pandemic/proc/replicator_cooldown(var/waittime)
/obj/item/stack/sheet/glass = list("silicon" = 20),
/obj/item/stack/sheet/rglass = list("silicon" = 20, "iron" = 20),
/obj/item/stack/sheet/mineral/uranium = list("uranium" = 20),
- /obj/item/stack/sheet/mineral/clown = list("banana" = 20),
+ /obj/item/stack/sheet/mineral/bananium = list("banana" = 20),
/obj/item/stack/sheet/mineral/silver = list("silver" = 20),
/obj/item/stack/sheet/mineral/gold = list("gold" = 20),
/obj/item/weapon/grown/nettle = list("sacid" = 0),
diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm
index a115295a9e9..3dce51e7c62 100644
--- a/code/modules/reagents/Chemistry-Recipes.dm
+++ b/code/modules/reagents/Chemistry-Recipes.dm
@@ -321,23 +321,14 @@ silicate
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(2, 1, location)
s.start()
- for(var/mob/living/carbon/M in viewers(world.view, location))
- switch(get_dist(M, location))
- if(0 to 3)
- if(hasvar(M, "glasses"))
- if(istype(M:glasses, /obj/item/clothing/glasses/sunglasses))
- continue
-
- flick("e_flash", M.flash)
- M.Weaken(5)
-
- if(4 to 5)
- if(hasvar(M, "glasses"))
- if(istype(M:glasses, /obj/item/clothing/glasses/sunglasses))
- continue
-
- flick("e_flash", M.flash)
- M.Stun(5)
+ for(var/mob/living/carbon/C in get_hearers_in_view(5, location))
+ if(C.eyecheck())
+ continue
+ flick("e_flash", C.flash)
+ if(get_dist(C, location) < 4)
+ C.Weaken(5)
+ continue
+ C.Stun(5)
/datum/chemical_reaction/napalm
name = "Napalm"
diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm
index d20af1f36a6..8a0d9a45373 100644
--- a/code/modules/research/protolathe.dm
+++ b/code/modules/research/protolathe.dm
@@ -118,7 +118,7 @@ Note: Must be placed west/left of and R&D console to function.
var/obj/item/stack/sheet/mineral/diamond/G = new /obj/item/stack/sheet/mineral/diamond(src.loc)
G.amount = round(diamond_amount / G.perunit)
if(clown_amount >= MINERAL_MATERIAL_AMOUNT)
- var/obj/item/stack/sheet/mineral/clown/G = new /obj/item/stack/sheet/mineral/clown(src.loc)
+ var/obj/item/stack/sheet/mineral/bananium/G = new /obj/item/stack/sheet/mineral/bananium(src.loc)
G.amount = round(clown_amount / G.perunit)
if(adamantine_amount >= MINERAL_MATERIAL_AMOUNT)
var/obj/item/stack/sheet/mineral/adamantine/G = new /obj/item/stack/sheet/mineral/adamantine(src.loc)
@@ -177,7 +177,7 @@ Note: Must be placed west/left of and R&D console to function.
uranium_amount += amount * MINERAL_MATERIAL_AMOUNT
else if(istype(stack, /obj/item/stack/sheet/mineral/diamond))
diamond_amount += amount * MINERAL_MATERIAL_AMOUNT
- else if(istype(stack, /obj/item/stack/sheet/mineral/clown))
+ else if(istype(stack, /obj/item/stack/sheet/mineral/bananium))
clown_amount += amount * MINERAL_MATERIAL_AMOUNT
else if(istype(stack, /obj/item/stack/sheet/mineral/adamantine))
adamantine_amount += amount * MINERAL_MATERIAL_AMOUNT
diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm
index 96b6bce013e..44d17074cbe 100644
--- a/code/modules/research/rdconsole.dm
+++ b/code/modules/research/rdconsole.dm
@@ -503,7 +503,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
type = /obj/item/stack/sheet/mineral/diamond
res_amount = "diamond_amount"
if("clown")
- type = /obj/item/stack/sheet/mineral/clown
+ type = /obj/item/stack/sheet/mineral/bananium
res_amount = "clown_amount"
if(ispath(type) && hasvar(linked_lathe, res_amount))
var/obj/item/stack/sheet/sheet = new type(linked_lathe.loc)
diff --git a/code/modules/surgery/limb augmentation.dm b/code/modules/surgery/limb augmentation.dm
index 2fc12830566..f9a26f9f49a 100644
--- a/code/modules/surgery/limb augmentation.dm
+++ b/code/modules/surgery/limb augmentation.dm
@@ -46,10 +46,10 @@
if(L)
if(ishuman(target))
var/mob/living/carbon/human/H = target
- user.visible_message("[user] successfully augments [target]'s [parse_zone(user.zone_sel.selecting)]! ")
+ user.visible_message("[user] successfully augments [target]'s [parse_zone(target_zone)]! ")
L.loc = get_turf(target)
H.organs -= L
- switch(user.zone_sel.selecting) //for the surgery to progress this MUST still be the original "location" so it's safe to do this.
+ switch(target_zone)
if("r_leg")
H.organs += new /obj/item/organ/limb/robot/r_leg(src)
if("l_leg")
@@ -70,7 +70,7 @@
qdel(tool)
H.update_damage_overlays(0)
H.update_augments() //Gives them the Cyber limb overlay
- add_logs(user, target, "augmented", addition="by giving him new [parse_zone(user.zone_sel.selecting)] INTENT: [uppertext(user.a_intent)]")
+ add_logs(user, target, "augmented", addition="by giving him new [parse_zone(target_zone)] INTENT: [uppertext(user.a_intent)]")
else
- user.visible_message("[user] [target] has no organic [parse_zone(user.zone_sel.selecting)] there! ")
+ user.visible_message("[user] [target] has no organic [parse_zone(target_zone)] there! ")
return 1
diff --git a/code/modules/surgery/surgery_step.dm b/code/modules/surgery/surgery_step.dm
index 4ceed4b0d5e..07140e8596d 100644
--- a/code/modules/surgery/surgery_step.dm
+++ b/code/modules/surgery/surgery_step.dm
@@ -29,7 +29,7 @@
initiate(user, target, target_zone, tool, surgery)
return 1
else
- user << "You need to expose [target]'s [target_zone] to perform surgery on it! "
+ user << "You need to expose [target]'s [parse_zone(target_zone)] to perform surgery on it! "
return 1 //returns 1 so we don't stab the guy in the dick or wherever.
return 0
@@ -77,7 +77,7 @@
if(ishuman(target))
var/mob/living/carbon/human/H = target
H.apply_damage(75,"brute","[target_zone]")
- user.visible_message("[user] saws [target]'s [target_zone] open!")
+ user.visible_message("[user] saws [target]'s [parse_zone(target_zone)] open!")
return 1
/datum/surgery_step/proc/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
diff --git a/code/unused/mining/datum_processing_recipe.dm b/code/unused/mining/datum_processing_recipe.dm
index 0a1f5e1eda0..f44516f2c80 100644
--- a/code/unused/mining/datum_processing_recipe.dm
+++ b/code/unused/mining/datum_processing_recipe.dm
@@ -19,5 +19,5 @@ var/list/datum/material_recipe/MATERIAL_RECIPES = list(
new/datum/material_recipe("Silver",list(/obj/item/weapon/ore/silver),/obj/item/stack/sheet/mineral/silver),
new/datum/material_recipe("Diamond",list(/obj/item/weapon/ore/diamond),/obj/item/stack/sheet/mineral/diamond),
new/datum/material_recipe("Plasma",list(/obj/item/weapon/ore/plasma),/obj/item/stack/sheet/mineral/plasma),
- new/datum/material_recipe("Bananium",list(/obj/item/weapon/ore/clown),/obj/item/stack/sheet/mineral/clown),
+ new/datum/material_recipe("Bananium",list(/obj/item/weapon/ore/bananium),/obj/item/stack/sheet/mineral/bananium),
)
\ No newline at end of file
diff --git a/code/unused/mining/machine_craftlathe_unused.dm b/code/unused/mining/machine_craftlathe_unused.dm
index dc4ca5b3af0..29ddbc26576 100644
--- a/code/unused/mining/machine_craftlathe_unused.dm
+++ b/code/unused/mining/machine_craftlathe_unused.dm
@@ -176,7 +176,7 @@ proc/check_craftlathe_recipe(var/list/param_recipe)
CRAFT_ITEMS += new/datum/craftlathe_item("DIAMOND","Diamond",1,1,list("","","","","","","","",""),/obj/item/stack/sheet/mineral/diamond)
CRAFT_ITEMS += new/datum/craftlathe_item("PLASMA","Plasma",1,1,list("","","","","","","","",""),/obj/item/stack/sheet/mineral/plasma)
CRAFT_ITEMS += new/datum/craftlathe_item("URANIUM","Uranium",1,1,list("","","","","","","","",""),/obj/item/weapon/ore/mineral/uranium)
- CRAFT_ITEMS += new/datum/craftlathe_item("CLOWN","Bananium",1,1,list("","","","","","","","",""),/obj/item/stack/sheet/mineral/clown)
+ CRAFT_ITEMS += new/datum/craftlathe_item("CLOWN","Bananium",1,1,list("","","","","","","","",""),/obj/item/stack/sheet/mineral/bananium)
CRAFT_ITEMS += new/datum/craftlathe_item("ADMAMANTINE","Adamantine",1,1,list("","","","","","","","",""),/obj/item/stack/sheet/mineral/adamantine)
CRAFT_ITEMS += new/datum/craftlathe_item("SCREWS","Screws",9,9,list("","","","","METAL","","","METAL",""))
CRAFT_ITEMS += new/datum/craftlathe_item("COGS","Cogs",9,9,list("","METAL","","METAL","METAL","METAL","","METAL",""))
diff --git a/code/unused/specops.dm b/code/unused/specops.dm
index bc620d37421..5843b1e9771 100644
--- a/code/unused/specops.dm
+++ b/code/unused/specops.dm
@@ -145,7 +145,7 @@ var/global/sent_strike_team = 0
equip_to_slot_or_del(new /obj/item/weapon/storage/box/flashbangs(src), slot_in_backpack)
equip_to_slot_or_del(new /obj/item/device/flashlight(src), slot_in_backpack)
if (!leader_selected)
- equip_to_slot_or_del(new /obj/item/weapon/plastique(src), slot_in_backpack)
+ equip_to_slot_or_del(new /obj/item/weapon/c4(src), slot_in_backpack)
else
equip_to_slot_or_del(new /obj/item/weapon/pinpointer(src), slot_in_backpack)
equip_to_slot_or_del(new /obj/item/weapon/disk/nuclear(src), slot_in_backpack)
diff --git a/html/changelogs/Ikarrus.yml b/html/changelogs/Ikarrus.yml
new file mode 100644
index 00000000000..84834636dc0
--- /dev/null
+++ b/html/changelogs/Ikarrus.yml
@@ -0,0 +1,7 @@
+author: Ikarrus
+
+#delete-after: True
+
+changes:
+ - wip: Adds Gang War, a new game mode still in alpha development.
+ - experiment: Developer Note: Gang mode is still in development and is not ready to be played reguarly in secret rotations. Server operators are asked to keep Gang mode's probability at 0, and only run it only as a playtest.
\ No newline at end of file
diff --git a/html/changelogs/Incoming5643-PR-4846.yml b/html/changelogs/Incoming5643-PR-4846.yml
new file mode 100644
index 00000000000..093b431a350
--- /dev/null
+++ b/html/changelogs/Incoming5643-PR-4846.yml
@@ -0,0 +1,8 @@
+author: Incoming5643
+
+delete-after: True
+
+changes:
+ - tweak: After a public relations nightmare in which a horde of 30 assistants violently dismembered a sole commander the revolution has begin tactically reducing their initial presence in stations with weak command structures. Should stations add to their command staff during the shift additional support will be provided.
+
+ - tweak: Too many instances of crying CMOs hiding in the lockers of supposedly secured revoulutionary stations has lead to a crackdown on revolutionary policy. You must kill or maroon the entire command staff, reguardless of when they reached the station.
\ No newline at end of file
diff --git a/html/changelogs/Miauw-PR-4909.yml b/html/changelogs/Miauw-PR-4909.yml
new file mode 100644
index 00000000000..f76ab32c763
--- /dev/null
+++ b/html/changelogs/Miauw-PR-4909.yml
@@ -0,0 +1,7 @@
+author: Miauw
+
+delete-after: True
+
+changes:
+ - bugfix: Voice changer masks work again.
+ - tweak: You can now turn voice changer masks on/off by activating them in your hand. They start off.
diff --git a/icons/PSD files/locker_template.psd b/icons/PSD files/locker_template.psd
new file mode 100644
index 00000000000..9e88ad90eda
Binary files /dev/null and b/icons/PSD files/locker_template.psd differ
diff --git a/icons/mob/back.dmi b/icons/mob/back.dmi
index 5c0f93e93d8..01a89c9c23b 100644
Binary files a/icons/mob/back.dmi and b/icons/mob/back.dmi differ
diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi
index eebb5300d0b..e0bf5ed4cb0 100644
Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ
diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi
index 5530db7dc60..648866f97d7 100644
Binary files a/icons/mob/hud.dmi and b/icons/mob/hud.dmi differ
diff --git a/icons/mob/items_righthand.dmi b/icons/mob/items_righthand.dmi
index afea8e24f3e..d2105f4c920 100644
Binary files a/icons/mob/items_righthand.dmi and b/icons/mob/items_righthand.dmi differ
diff --git a/icons/mob/mob.dmi b/icons/mob/mob.dmi
index 28451ff9fc2..2cfaf2b0015 100644
Binary files a/icons/mob/mob.dmi and b/icons/mob/mob.dmi differ
diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi
index 6b212898009..f4292641d52 100644
Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ
diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi
index 45948418d9e..e68aa0b2318 100644
Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ
diff --git a/tgstation.dme b/tgstation.dme
index 859dcada271..5ee02581787 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -283,6 +283,7 @@
#include "code\game\gamemodes\cult\runes.dm"
#include "code\game\gamemodes\cult\talisman.dm"
#include "code\game\gamemodes\extended\extended.dm"
+#include "code\game\gamemodes\gang\gang.dm"
#include "code\game\gamemodes\malfunction\Malf_Modules.dm"
#include "code\game\gamemodes\malfunction\malfunction.dm"
#include "code\game\gamemodes\meteor\meteor.dm"
@@ -508,6 +509,7 @@
#include "code\game\objects\items\devices\multitool.dm"
#include "code\game\objects\items\devices\paicard.dm"
#include "code\game\objects\items\devices\powersink.dm"
+#include "code\game\objects\items\devices\recaller.dm"
#include "code\game\objects\items\devices\scanners.dm"
#include "code\game\objects\items\devices\taperecorder.dm"
#include "code\game\objects\items\devices\traitordevices.dm"