diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index a0be7d2f92a7..4570ffe0b40b 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -5,6 +5,7 @@
# to the same file or dir, add them to the end under Multiple Owners
# MrCat15352
+
/code/controllers/subsystem/shuttle.dm @MrCat15352
/code/modules/shuttle/ @MrCat15352
/code/modules/overmap/ @MrCat15352
@@ -19,7 +20,29 @@
/whitesands/icons/ @MrCat15352
# CI and tool chains
+
/tools/ @MysticalFaceLesS
+# MAINTAINERS
+
+# MysticalFaceLesS
+
+/code/game/objects/items/storage/ration.dm @MysticalFaceLesS
+/code/modules/food_and_drinks/drinks/drinks/breakawayflask.dm @MysticalFaceLesS
+/code/modules/food_and_drinks/food/ration.dm @MysticalFaceLesS
+/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm @MysticalFaceLesS
+/code/modules/projectiles/ @MysticalFaceLesS
+/code/modules/reagents/chemistry/reagents/trickwine_reagents.dm @MysticalFaceLesS
+/code/modules/unit_tests/icons/ @MysticalFaceLesS
+
+# molnizz
+
+/code/controllers/subsystem/shuttle.dm @molnizz
+/code/modules/shuttle/ @molnizz
+/code/modules/overmap/ @molnizz
+/_maps/RandomRuins/LavaRuins/lavaland_surface_sloth.dmm @molnizz
+
+# CONTRIBUTORS
+
#SIC SEMPER TYRANNIS
#/_maps/RandomRuins/LavaRuins/lavaland_surface_sloth.dmm @MrCat15352
diff --git a/_maps/RandomRuins/IceRuins/icemoon_surface_corporate_rejects.dmm b/_maps/RandomRuins/IceRuins/icemoon_surface_corporate_rejects.dmm
index 28a963ed476a..add7c0f50743 100644
--- a/_maps/RandomRuins/IceRuins/icemoon_surface_corporate_rejects.dmm
+++ b/_maps/RandomRuins/IceRuins/icemoon_surface_corporate_rejects.dmm
@@ -84,8 +84,8 @@
"cN" = (
/obj/structure/safe/floor,
/obj/item/hand_tele,
-/obj/item/stack/sheet/mineral/adamantine,
-/obj/item/stack/sheet/mineral/adamantine,
+/obj/item/stack/sheet/mineral/hidden/hellstone,
+/obj/item/stack/sheet/mineral/hidden/hellstone,
/turf/open/floor/plating/asteroid/snow/icemoon,
/area/ruin/unpowered/corprejectrooms)
"cP" = (
@@ -1726,11 +1726,11 @@
/obj/item/spacecash/bundle/c1000,
/obj/item/spacecash/bundle/c1000,
/obj/item/stack/sheet/bluespace_crystal/five,
-/obj/item/stack/sheet/mineral/bananium{
+/obj/item/stack/sheet/mineral/hidden/hellstone{
amount = 15
},
/obj/item/stack/sheet/mineral/gold/twenty,
-/obj/item/stack/sheet/mineral/runite/ten,
+/obj/item/stack/sheet/mineral/hidden/hellstone/ten,
/obj/item/toy/figure/captain,
/obj/item/organ/cyberimp/brain/anti_stun,
/obj/item/disk/design_disk/adv/knight_gear,
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_ashwalker_shrine.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_ashwalker_shrine.dmm
index 5001fd7a1831..5c0ff90a137d 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_ashwalker_shrine.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_ashwalker_shrine.dmm
@@ -1,3692 +1,5727 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
-"ad" = (
-/obj/structure/fence{
+"at" = (
+/obj/structure/stone_tile/surrounding_tile{
dir = 4
},
-/turf/open/floor/plating/ashplanet/ash,
-/area/overmap_encounter/planetoid/lava/explored)
-"aw" = (
-/obj/structure/stone_tile/block{
- dir = 8
- },
-/obj/item/melee/transforming/energy/sword/saber/red,
-/obj/effect/mob_spawn/human/corpse/nanotrasenassaultsoldier,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"aA" = (
-/turf/template_noop,
-/area/template_noop)
-"aG" = (
-/obj/item/circuitboard/computer/operating,
-/obj/item/storage/backpack/duffelbag/syndie/surgery,
-/obj/structure/closet/supplypod,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"bm" = (
-/obj/structure/stone_tile/slab,
-/obj/structure/table/wood,
-/obj/item/storage/toolbox/syndicate,
+/obj/structure/stone_tile/center/cracked,
+/obj/structure/stone_tile/surrounding_tile/cracked,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"cm" = (
-/obj/structure/stone_tile/block,
-/obj/structure/stone_tile/slab{
- pixel_y = -16
+/area/ruin/unpowered/buried_shrine)
+"aD" = (
+/obj/structure/flora/rock/hell,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/overmap_encounter/planetoid/lava/explored)
+"aP" = (
+/obj/structure/flora/ausbushes/sparsegrass/hell,
+/turf/open/floor/plating/moss,
+/area/overmap_encounter/planetoid/cave/explored)
+"be" = (
+/obj/item/reagent_containers/food/snacks/grown/apple{
+ pixel_x = 12
+ },
+/turf/open/floor/plating/grass/lava,
+/area/ruin/unpowered/buried_shrine)
+"bp" = (
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 10
+ },
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_y = 6
},
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"bW" = (
+/obj/structure/flora/ausbushes/sparsegrass/hell,
+/turf/open/floor/plating/grass/lava/orange,
/area/overmap_encounter/planetoid/lava/explored)
-"cv" = (
-/obj/structure/bonfire,
+"bY" = (
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 8
+ },
+/obj/structure/stone_tile/center/burnt,
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"ch" = (
+/obj/structure/destructible/tribal_torch{
+ pixel_y = 13
+ },
+/obj/structure/stone_tile/surrounding,
+/obj/structure/stone_tile/center,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"cx" = (
-/obj/structure/stone_tile/slab,
-/obj/item/ammo_casing/shotgun/buckshot,
-/obj/effect/mob_spawn/human/corpse{
- mob_species = /datum/species/lizard/ashwalker
+/area/ruin/unpowered/buried_shrine)
+"cn" = (
+/obj/structure/stone_tile/block/cracked{
+ dir = 6
},
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/ruin/unpowered/buried_shrine)
+"cv" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/glass/bottle/potion,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
+/area/ruin/unpowered/buried_shrine)
"cA" = (
-/obj/structure/stone_tile/block{
- dir = 4
- },
-/obj/structure/stone_tile/block{
- dir = 8
+/obj/structure/stone_tile/surrounding,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"cD" = (
+/obj/structure/stone_tile/slab/cracked{
+ dir = 6
},
+/obj/structure/destructible/tribal_torch,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"cR" = (
-/obj/structure/stone_tile/slab,
-/obj/item/ammo_casing/shotgun/buckshot,
+/area/ruin/unpowered/buried_shrine)
+"cN" = (
+/obj/item/stack/sheet/bone,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
+/area/ruin/unpowered/buried_shrine)
+"df" = (
+/obj/structure/stone_tile/block/cracked,
+/obj/item/stack/sheet/mineral/wood,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
"dg" = (
-/obj/structure/stone_tile/block{
- pixel_x = -16
- },
-/obj/structure/stone_tile{
- dir = 8
+/obj/structure/stone_tile/slab/cracked{
+ dir = 1
},
-/obj/structure/stone_tile{
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/overmap_encounter/planetoid/lava/explored)
+"di" = (
+/obj/structure/stone_tile/surrounding/cracked{
dir = 4
},
+/obj/structure/stone_tile/center/cracked,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
+/area/ruin/unpowered/buried_shrine)
"dn" = (
-/obj/structure/stone_tile/block{
- dir = 8
+/obj/structure/stone_tile/block/cracked{
+ dir = 5
},
-/obj/structure/stone_tile/block{
- dir = 4
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/overmap_encounter/planetoid/lava/explored)
+"dA" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_x = 5
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"dB" = (
+/obj/structure/stone_tile/block/cracked,
+/obj/structure/stone_tile/center{
+ pixel_y = -6
},
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"dv" = (
-/obj/item/ammo_casing/shotgun/buckshot,
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
+/area/ruin/unpowered/buried_shrine)
"dD" = (
/turf/closed/indestructible/riveted/boss,
/area/overmap_encounter/planetoid/lava/explored)
-"dM" = (
-/obj/structure/stone_tile/slab,
-/turf/open/lava/smooth/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"dY" = (
-/obj/structure/fence/door{
+"dF" = (
+/turf/open/floor/plating/moss,
+/area/overmap_encounter/planetoid/cave/explored)
+"dG" = (
+/obj/structure/table/wood,
+/obj/structure/stone_tile{
dir = 4
},
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"ee" = (
-/obj/structure/stone_tile/slab/burnt,
+/obj/item/stack/ore/gold{
+ amount = 10
+ },
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"ej" = (
-/obj/structure/stone_tile/surrounding_tile/cracked{
+/area/ruin/unpowered/buried_shrine)
+"dQ" = (
+/obj/structure/stone_tile/center,
+/obj/structure/stone_tile/surrounding/cracked{
dir = 4
},
-/obj/structure/stone_tile/center/cracked,
-/obj/structure/stone_tile/surrounding_tile,
-/obj/structure/stone_tile/surrounding_tile{
- dir = 1
+/obj/structure/destructible/tribal_torch{
+ pixel_y = 13
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"dS" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_y = 10;
+ pixel_x = 6
},
/turf/open/lava/smooth/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"ek" = (
-/obj/structure/stone_tile/block{
- dir = 8
+/area/ruin/unpowered/buried_shrine)
+"dX" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_y = -8
},
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"eq" = (
-/obj/item/storage/bag/plants/portaseeder,
-/turf/open/floor/wood,
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"ee" = (
+/turf/open/lava/smooth/lava_land_surface,
/area/overmap_encounter/planetoid/lava/explored)
-"ew" = (
-/obj/structure/stone_tile/block,
-/obj/structure/mineral_door/sandstone,
+"ef" = (
+/obj/structure/stone_tile/surrounding/cracked,
+/obj/structure/stone_tile/center/cracked,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"eH" = (
-/obj/structure/stone_tile/center,
-/obj/structure/stone_tile/surrounding_tile,
-/obj/structure/stone_tile/surrounding_tile{
- dir = 8
+/area/ruin/unpowered/buried_shrine)
+"em" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_y = 7;
+ pixel_x = -2
},
-/obj/structure/stone_tile/surrounding_tile{
- dir = 4
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"eI" = (
+/turf/open/floor/plating/grass/lava,
+/area/ruin/unpowered/buried_shrine)
+"eJ" = (
+/obj/structure/stone_tile/cracked,
+/obj/structure/stone_tile{
+ dir = 8
},
-/obj/structure/stone_tile/surrounding_tile{
+/obj/structure/stone_tile{
dir = 1
},
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
/area/overmap_encounter/planetoid/lava/explored)
"eZ" = (
-/obj/structure/stone_tile/surrounding_tile/cracked,
-/obj/structure/stone_tile/center,
-/obj/structure/stone_tile/surrounding_tile{
- dir = 1
+/obj/structure/table/wood,
+/obj/item/clothing/head/hooded/cloakhood/bone,
+/obj/structure/stone_tile/slab,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"fh" = (
+/obj/item/clothing/suit/armor/curator,
+/obj/item/clothing/head/fedora/curator{
+ pixel_y = 16
},
-/obj/structure/stone_tile/surrounding_tile{
- dir = 8
+/obj/effect/decal/remains/human{
+ pixel_y = 8
},
-/turf/open/lava/smooth/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"fd" = (
-/obj/structure/stone_tile/slab/cracked{
- dir = 10
+/obj/effect/decal/cleanable/blood/old,
+/obj/effect/decal/cleanable/ash/large{
+ pixel_y = -8
},
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"fe" = (
-/obj/structure/closet/crate/radiation,
-/obj/item/flashlight/lantern,
-/obj/item/flashlight/lantern,
-/obj/item/flashlight/lantern,
-/obj/item/flashlight/flare,
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"fU" = (
-/obj/structure/stone_tile/block{
- dir = 4;
- pixel_y = -16
+/area/ruin/unpowered/buried_shrine)
+"fq" = (
+/obj/structure/destructible/tribal_torch{
+ pixel_y = 13
},
-/obj/structure/stone_tile,
-/obj/structure/stone_tile{
- dir = 8
+/obj/structure/stone_tile/center,
+/obj/structure/stone_tile/surrounding,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"fx" = (
+/obj/structure/destructible/tribal_torch,
+/obj/structure/stone_tile/slab/cracked,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"fB" = (
+/obj/structure/flora/rock/pile/lava,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/overmap_encounter/planetoid/lava/explored)
+"fL" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_x = 7;
+ pixel_y = -5
},
/turf/open/lava/smooth/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"fV" = (
-/turf/open/floor/wood{
- icon_state = "wood-broken4"
+/area/ruin/unpowered/buried_shrine)
+"fY" = (
+/obj/structure/stone_tile/block{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/ash{
+ pixel_x = 6;
+ pixel_y = 11
},
-/area/overmap_encounter/planetoid/lava/explored)
-"gl" = (
-/obj/structure/stone_tile/block,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"gp" = (
-/obj/structure/stone_tile{
- dir = 1
+/area/ruin/unpowered/buried_shrine)
+"gt" = (
+/obj/structure/flora/ash/stem_shroom,
+/turf/open/floor/plating/moss,
+/area/overmap_encounter/planetoid/cave/explored)
+"gz" = (
+/obj/structure/stone_tile/block{
+ dir = 8
},
+/obj/structure/stone_tile/cracked,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"gE" = (
/obj/structure/stone_tile/block{
- dir = 8;
- pixel_y = 16
+ dir = 1
},
/obj/structure/stone_tile{
- dir = 4
+ dir = 8
},
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"gM" = (
-/obj/item/stack/cable_coil/red,
+/area/ruin/unpowered/buried_shrine)
+"gH" = (
+/obj/structure/stone_tile/cracked,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
+/area/ruin/unpowered/buried_shrine)
+"gW" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_x = 10
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
"ha" = (
/obj/structure/stone_tile/slab/cracked{
dir = 6
},
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"hd" = (
-/obj/structure/stone_tile,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
/area/overmap_encounter/planetoid/lava/explored)
-"hk" = (
-/obj/structure/rack,
-/obj/item/stack/sheet/mineral/wood{
- amount = 18
+"hn" = (
+/obj/structure/stone_tile/slab/cracked{
+ dir = 1
},
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"ie" = (
-/obj/structure/table/wood,
-/obj/item/seeds/cannabis,
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"ik" = (
-/obj/structure/stone_tile{
+/area/ruin/unpowered/buried_shrine)
+"hp" = (
+/obj/structure/flora/ausbushes/ywflowers/hell,
+/turf/open/floor/plating/grass/lava,
+/area/ruin/unpowered/buried_shrine)
+"hz" = (
+/obj/structure/stone_tile/surrounding_tile{
dir = 8
},
+/obj/structure/stone_tile/center,
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 1
+ },
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"il" = (
-/obj/structure/table/wood,
-/obj/item/spear/bonespear,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"im" = (
-/obj/structure/fence{
+/area/ruin/unpowered/buried_shrine)
+"hW" = (
+/obj/structure/stone_tile/surrounding_tile/burnt{
dir = 8
},
-/turf/open/floor/plating/ashplanet/ash,
-/area/overmap_encounter/planetoid/lava/explored)
-"iw" = (
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"je" = (
-/obj/structure/stone_tile/block{
- dir = 1;
- pixel_x = 16
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1
},
-/obj/structure/stone_tile,
-/obj/structure/stone_tile{
- dir = 1
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 5
},
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"jl" = (
+/obj/structure/stone_tile/surrounding_tile/cracked,
/turf/open/lava/smooth/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"ke" = (
-/obj/machinery/hydroponics/soil,
-/turf/open/floor/plating/ashplanet/ash,
-/area/overmap_encounter/planetoid/lava/explored)
-"kz" = (
+/area/ruin/unpowered/buried_shrine)
+"ic" = (
/obj/structure/stone_tile/block{
- dir = 8;
- pixel_y = 16
- },
-/obj/structure/stone_tile{
- dir = 1
- },
-/obj/structure/stone_tile{
dir = 4
},
-/turf/open/lava/smooth/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"kD" = (
-/obj/structure/stone_tile/block{
+/obj/structure/stone_tile/block/cracked{
+ dir = 8
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"ii" = (
+/obj/structure/chair/pew{
dir = 1
},
-/obj/item/ammo_casing/shotgun/buckshot,
+/obj/structure/stone_tile/slab,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"kT" = (
+/area/ruin/unpowered/buried_shrine)
+"iw" = (
/obj/structure/stone_tile/block{
dir = 4
},
-/obj/structure/mineral_door/sandstone,
+/obj/structure/stone_tile/cracked{
+ dir = 4
+ },
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"kV" = (
-/turf/open/floor/wood{
- icon_state = "wood-broken2"
+/area/ruin/unpowered/buried_shrine)
+"iB" = (
+/obj/structure/stone_tile/block/burnt{
+ dir = 8
},
-/area/overmap_encounter/planetoid/lava/explored)
-"kZ" = (
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 6
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"iK" = (
/obj/structure/stone_tile/surrounding_tile{
dir = 4
},
-/turf/open/lava/smooth/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"lc" = (
-/obj/structure/stone_tile/slab,
-/obj/structure/table/wood,
-/obj/item/instrument/trombone,
+/obj/effect/decal/cleanable/blood/old,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"lh" = (
-/obj/structure/table/wood,
-/obj/item/storage/firstaid/fire,
+/area/ruin/unpowered/buried_shrine)
+"iL" = (
+/obj/structure/stone_tile/surrounding_tile/cracked,
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_y = -8
+ },
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"ln" = (
-/obj/machinery/the_singularitygen,
+/area/ruin/unpowered/buried_shrine)
+"iX" = (
+/obj/structure/flora/rock/pile,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/overmap_encounter/planetoid/cave/explored)
+"jo" = (
+/obj/item/reagent_containers/food/snacks/grown/apple{
+ pixel_y = 12;
+ pixel_x = 11
+ },
+/turf/open/floor/plating/grass/lava,
+/area/ruin/unpowered/buried_shrine)
+"jt" = (
+/obj/structure/flora/rock/pile,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/overmap_encounter/planetoid/lava/explored)
+"jy" = (
+/obj/structure/stone_tile/block/cracked,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"lt" = (
-/mob/living/simple_animal/hostile/asteroid/gutlunch,
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"lx" = (
-/obj/structure/fence,
-/turf/open/floor/plating/ashplanet/ash,
-/area/overmap_encounter/planetoid/lava/explored)
-"lO" = (
-/obj/structure/stone_tile/slab{
- pixel_y = -16
+/area/ruin/unpowered/buried_shrine)
+"jI" = (
+/obj/structure/flora/ash/tall_shroom,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/overmap_encounter/planetoid/lava/explored)
+"jJ" = (
+/obj/structure/flora/ash/tall_shroom,
+/turf/open/floor/plating/moss,
+/area/overmap_encounter/planetoid/cave/explored)
+"jM" = (
+/obj/structure/stone_tile{
+ dir = 1
},
-/obj/structure/stone_tile/block,
+/obj/structure/stone_tile/cracked,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"mg" = (
+/area/ruin/unpowered/buried_shrine)
+"jY" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_y = -3
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"kp" = (
+/obj/structure/table_frame/wood,
/obj/structure/stone_tile/slab,
-/obj/structure/mineral_door/sandstone,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"kt" = (
+/obj/structure/stone_tile/block{
+ dir = 4
+ },
+/obj/structure/stone_tile/block/cracked{
+ dir = 8
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
/area/overmap_encounter/planetoid/lava/explored)
-"nh" = (
-/obj/effect/mob_spawn/human/corpse{
- mob_species = /datum/species/lizard/ashwalker
+"kC" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_y = -2;
+ pixel_x = 2
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"kJ" = (
+/obj/structure/stone_tile/surrounding/cracked,
+/obj/structure/stone_tile/center/cracked,
+/obj/structure/destructible/tribal_torch{
+ pixel_y = 13
},
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"nr" = (
+/area/ruin/unpowered/buried_shrine)
+"kW" = (
/obj/structure/stone_tile/block{
- dir = 1
+ dir = 8
},
-/obj/structure/mineral_door/sandstone,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"ny" = (
-/obj/structure/stone_tile/block{
- dir = 1
- },
-/obj/structure/stone_tile/block,
-/obj/structure/chair/wood/wings{
+/area/ruin/unpowered/buried_shrine)
+"kZ" = (
+/obj/structure/stone_tile/cracked{
dir = 4
},
+/obj/structure/stone_tile/cracked,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"ox" = (
-/obj/structure/stone_tile/slab,
-/obj/effect/gibspawner/human,
+/area/ruin/unpowered/buried_shrine)
+"ld" = (
+/obj/structure/table/wood,
+/obj/item/stack/ore/diamond,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"oF" = (
-/obj/structure/stone_tile/block,
+/area/ruin/unpowered/buried_shrine)
+"lo" = (
+/obj/structure/flora/ausbushes/fullgrass/hell,
+/turf/open/floor/plating/moss,
+/area/overmap_encounter/planetoid/cave/explored)
+"lJ" = (
/obj/structure/stone_tile/block{
dir = 1
},
-/obj/structure/chair/wood/wings,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"lO" = (
+/obj/structure/flora/ausbushes/sparsegrass/hell,
+/turf/open/floor/plating/moss,
/area/overmap_encounter/planetoid/lava/explored)
-"oO" = (
-/obj/structure/fence/door,
-/turf/open/floor/plating/ashplanet/ash,
-/area/overmap_encounter/planetoid/lava/explored)
-"oY" = (
-/obj/structure/stone_tile/surrounding_tile/cracked,
-/obj/structure/stone_tile/surrounding_tile/cracked{
- dir = 4
+"me" = (
+/obj/structure/stone_tile/surrounding_tile,
+/obj/structure/stone_tile/surrounding_tile{
+ pixel_x = 17;
+ pixel_y = -17
},
-/obj/structure/stone_tile/center,
/obj/structure/stone_tile/surrounding_tile{
- dir = 8
+ dir = 1;
+ pixel_x = 17;
+ pixel_y = -17
+ },
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 4;
+ pixel_x = 17;
+ pixel_y = -17
+ },
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 8;
+ pixel_x = 17;
+ pixel_y = -17
+ },
+/obj/structure/stone_tile/center{
+ pixel_x = 17;
+ pixel_y = -17
},
/turf/open/lava/smooth/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"px" = (
-/obj/item/seeds/potato,
-/turf/open/floor/plating/ashplanet/ash,
-/area/overmap_encounter/planetoid/lava/explored)
-"pJ" = (
-/mob/living/simple_animal/hostile/nanotrasen/ranged/smg,
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"pT" = (
-/obj/structure/table/wood,
-/obj/item/seeds/ambrosia,
+/area/ruin/unpowered/buried_shrine)
+"mn" = (
+/obj/structure/stone_tile/block,
+/obj/structure/stone_tile/cracked{
+ dir = 1
+ },
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"pZ" = (
-/obj/structure/fence/corner{
- dir = 6
+/area/ruin/unpowered/buried_shrine)
+"mr" = (
+/obj/structure/stone_tile{
+ dir = 1
},
-/turf/open/floor/plating/ashplanet/ash,
-/area/overmap_encounter/planetoid/lava/explored)
-"qq" = (
-/obj/structure/stone_tile/slab/cracked{
- dir = 5
+/obj/structure/stone_tile{
+ dir = 8
},
-/obj/structure/bonfire,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"qw" = (
-/obj/effect/gibspawner/human,
+/area/ruin/unpowered/buried_shrine)
+"mv" = (
+/obj/structure/stone_tile/block/burnt{
+ dir = 1
+ },
+/obj/structure/stone_tile/surrounding_tile/burnt{
+ dir = 8
+ },
+/obj/structure/stone_tile/surrounding_tile/burnt,
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"mM" = (
+/obj/structure/stone_tile/surrounding,
+/obj/structure/fluff/drake_statue,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"nh" = (
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
/area/overmap_encounter/planetoid/lava/explored)
-"qy" = (
-/obj/structure/stone_tile/slab/burnt,
-/obj/item/ammo_casing/shotgun/buckshot,
+"nk" = (
+/obj/structure/stone_tile{
+ dir = 4
+ },
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"qG" = (
+/area/ruin/unpowered/buried_shrine)
+"nq" = (
/obj/structure/stone_tile/surrounding,
-/obj/structure/stone_tile/center,
+/mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"rc" = (
-/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck,
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"rk" = (
-/obj/structure/stone_tile/block{
- dir = 1
+/area/ruin/unpowered/buried_shrine)
+"nP" = (
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 4
+ },
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_y = 6
},
-/obj/structure/stone_tile/block,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"rm" = (
-/obj/structure/stone_tile/slab,
-/obj/structure/chair/wood/wings{
- dir = 4
+/area/ruin/unpowered/buried_shrine)
+"nX" = (
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 8
},
+/obj/effect/decal/cleanable/blood/old,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"rp" = (
-/obj/structure/rack,
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"ru" = (
-/turf/open/floor/wood{
- icon_state = "wood-broken5"
+/area/ruin/unpowered/buried_shrine)
+"oi" = (
+/obj/structure/stone_tile{
+ dir = 1
},
-/area/overmap_encounter/planetoid/lava/explored)
-"rx" = (
-/obj/structure/stone_tile/block,
-/obj/effect/mob_spawn/human/corpse{
- mob_species = /datum/species/lizard/ashwalker
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"ol" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_y = 8;
+ pixel_x = -8
},
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"om" = (
+/obj/structure/table_frame/wood,
+/obj/item/reagent_containers/food/snacks/grown/ash_flora/fireblossom,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"rD" = (
-/obj/structure/stone_tile/slab,
-/obj/effect/mob_spawn/human/corpse{
- mob_species = /datum/species/lizard/ashwalker
+/area/ruin/unpowered/buried_shrine)
+"on" = (
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 1
},
-/obj/item/spear/bonespear,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"rH" = (
-/obj/structure/stone_tile/surrounding_tile{
- dir = 8
+/area/ruin/unpowered/buried_shrine)
+"oH" = (
+/obj/structure/stone_tile/surrounding,
+/obj/structure/stone_tile/center/cracked,
+/obj/structure/destructible/tribal_torch{
+ pixel_y = 14
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"oL" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_x = 9;
+ pixel_y = 8
},
/turf/open/lava/smooth/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"rJ" = (
+/area/ruin/unpowered/buried_shrine)
+"pu" = (
+/mob/living/simple_animal/hostile/asteroid/goliath/beast/ancient,
+/turf/open/floor/plating/moss,
+/area/ruin/unpowered/buried_shrine)
+"pK" = (
/obj/structure/stone_tile/slab,
-/obj/item/paper{
- desc = "A hastily written note, written in the Lizard language.";
- default_raw_text = "To all brethren who may read this, we are sorry. We failed to defend the Necropolis, and those from the sky destroyed our home. I write this in my last dying breath, to warn you to not make our mistakes. Don't let them fool you with their actions, all of those who come from the sky are not your friends. They wish to loot and pillage your villages. Please do not make our same mistakes."
- },
+/mob/living/simple_animal/hostile/asteroid/brimdemon,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"sc" = (
-/obj/structure/stone_tile/block{
- dir = 8
+/area/ruin/unpowered/buried_shrine)
+"qh" = (
+/obj/structure/stone_tile{
+ dir = 4
},
-/obj/effect/mob_spawn/human/corpse{
- mob_species = /datum/species/lizard/ashwalker
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 1
},
-/obj/item/spear/bonespear,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"ss" = (
-/obj/structure/stone_tile/slab,
-/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"sM" = (
-/obj/item/seeds/tower,
-/turf/open/floor/plating/ashplanet/ash,
-/area/overmap_encounter/planetoid/lava/explored)
-"tR" = (
-/obj/structure/table/wood,
-/obj/item/seeds/cotton/durathread,
+/area/ruin/unpowered/buried_shrine)
+"qi" = (
+/obj/structure/stone_tile/surrounding,
+/obj/structure/stone_tile/center/cracked,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"uc" = (
-/obj/structure/stone_tile{
+/area/ruin/unpowered/buried_shrine)
+"qp" = (
+/obj/structure/stone_tile/surrounding/cracked{
dir = 1
},
-/obj/structure/stone_tile/block{
- dir = 8;
- pixel_y = 16
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 9
},
-/obj/structure/stone_tile{
- dir = 4
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 6
},
-/turf/open/lava/smooth/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"uH" = (
-/obj/structure/stone_tile/block,
-/obj/effect/gibspawner/human,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"uJ" = (
-/obj/structure/bed,
+/area/ruin/unpowered/buried_shrine)
+"qt" = (
+/obj/structure/stone_tile/center/cracked,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"uK" = (
-/turf/closed/wall/mineral/wood/nonmetal,
-/area/overmap_encounter/planetoid/lava/explored)
-"vd" = (
-/obj/structure/stone_tile/block,
-/obj/structure/stone_tile/block{
+/area/ruin/unpowered/buried_shrine)
+"qw" = (
+/obj/structure/stone_tile/block/burnt{
dir = 1
},
+/obj/structure/stone_tile/surrounding_tile/burnt,
+/obj/structure/stone_tile/surrounding_tile/burnt{
+ dir = 8
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"qO" = (
+/obj/structure/stone_tile/block/cracked{
+ dir = 5
+ },
+/obj/structure/chair/wood,
+/mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"vm" = (
-/obj/structure/stone_tile/block{
- dir = 4
+/area/ruin/unpowered/buried_shrine)
+"qT" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_x = -7;
+ pixel_y = 3
},
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"qV" = (
+/obj/structure/destructible/tribal_torch,
+/obj/structure/stone_tile/slab,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"rh" = (
+/obj/structure/stone_tile,
/obj/structure/stone_tile{
- dir = 8
+ dir = 4
},
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
/area/overmap_encounter/planetoid/lava/explored)
-"vu" = (
-/obj/structure/stone_tile/surrounding,
+"rk" = (
+/obj/structure/stone_tile/slab/cracked,
+/obj/item/pickaxe/rusted{
+ pixel_x = 3
+ },
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"vH" = (
-/obj/structure/stone_tile/block,
-/obj/effect/mob_spawn/human/corpse{
- mob_species = /datum/species/lizard/ashwalker
+/area/ruin/unpowered/buried_shrine)
+"rp" = (
+/obj/structure/stone_tile/surrounding,
+/obj/structure/stone_tile/center,
+/obj/item/clothing/suit/hooded/cloak/bone{
+ pixel_y = -4
},
-/obj/item/spear/bonespear,
+/obj/effect/decal/cleanable/blood/old,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"vN" = (
-/obj/structure/stone_tile/block{
- dir = 8;
- pixel_y = 16
+/area/ruin/unpowered/buried_shrine)
+"rt" = (
+/obj/structure/stone_tile/cracked,
+/obj/structure/stone_tile/cracked{
+ dir = 4
},
/obj/structure/stone_tile{
- dir = 1
+ dir = 8
},
/obj/structure/stone_tile{
- dir = 4
+ dir = 1
+ },
+/obj/item/stack/sheet/bone,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/ruin/unpowered/buried_shrine)
+"rA" = (
+/obj/structure/flora/ash/cacti,
+/turf/open/floor/plating/moss,
+/area/ruin/unpowered/buried_shrine)
+"rD" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_x = 9
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"rH" = (
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/overmap_encounter/planetoid/cave/explored)
+"rM" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_y = -6
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"rP" = (
+/obj/structure/flora/ash/leaf_shroom,
+/turf/open/floor/plating/moss,
+/area/overmap_encounter/planetoid/lava/explored)
+"sv" = (
+/obj/structure/flora/ash/tall_shroom,
+/turf/open/floor/plating/moss,
+/area/ruin/unpowered/buried_shrine)
+"sy" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_x = 6;
+ pixel_y = -8
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"sB" = (
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 5
},
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"vU" = (
-/obj/effect/mob_spawn/human/corpse{
- mob_species = /datum/species/lizard/ashwalker
+/area/ruin/unpowered/buried_shrine)
+"sD" = (
+/obj/structure/stone_tile/cracked{
+ dir = 8
+ },
+/obj/structure/stone_tile/block/cracked{
+ dir = 1
},
-/obj/item/spear/bonespear,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"vW" = (
-/obj/structure/stone_tile/center,
-/obj/structure/stone_tile/surrounding/burnt,
+/area/ruin/unpowered/buried_shrine)
+"sJ" = (
+/obj/structure/stone_tile/block/cracked{
+ dir = 6
+ },
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"wi" = (
-/mob/living/simple_animal/hostile/asteroid/gutlunch,
-/turf/open/floor/plating/ashplanet/ash,
-/area/overmap_encounter/planetoid/lava/explored)
-"wt" = (
-/obj/structure/bed,
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"wz" = (
-/obj/structure/stone_tile{
+/area/ruin/unpowered/buried_shrine)
+"sL" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_y = -1
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"sS" = (
+/obj/structure/stone_tile/slab/cracked{
dir = 4
},
+/obj/item/stack/sheet/mineral/wood,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"ta" = (
/obj/structure/stone_tile/block,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"wO" = (
-/mob/living/simple_animal/hostile/asteroid/gutlunch/guthen,
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"wV" = (
-/obj/structure/table/wood,
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"xa" = (
-/obj/structure/stone_tile/block{
- dir = 4
+/area/ruin/unpowered/buried_shrine)
+"td" = (
+/obj/structure/stone_tile/block/cracked{
+ dir = 5
},
-/obj/effect/gibspawner/human,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"tA" = (
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 8
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
/area/overmap_encounter/planetoid/lava/explored)
-"xt" = (
-/obj/structure/stone_tile/slab,
+"tE" = (
/obj/structure/table/wood,
-/obj/item/weldingtool/experimental,
+/obj/item/reagent_containers/glass/mortar/mushroom{
+ pixel_x = -5
+ },
+/obj/item/pestle{
+ pixel_y = 5
+ },
+/obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_stem{
+ pixel_x = -11;
+ pixel_y = 10
+ },
+/obj/item/crusher_trophy/brimdemon_fang{
+ pixel_x = 10
+ },
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"xT" = (
-/obj/structure/stone_tile/slab,
+/area/ruin/unpowered/buried_shrine)
+"tL" = (
/obj/structure/stone_tile/slab,
+/obj/structure/destructible/tribal_torch,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"xZ" = (
-/obj/structure/stone_tile/slab,
-/mob/living/simple_animal/hostile/asteroid/gutlunch/guthen,
+/area/ruin/unpowered/buried_shrine)
+"uf" = (
+/obj/structure/stone_tile/block/cracked{
+ dir = 10
+ },
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"yp" = (
-/obj/structure/stone_tile/block,
-/mob/living/simple_animal/hostile/asteroid/gutlunch,
+/area/ruin/unpowered/buried_shrine)
+"uK" = (
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 8
+ },
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"yD" = (
-/obj/structure/stone_tile/slab,
-/mob/living/simple_animal/hostile/asteroid/gutlunch/grublunch,
+/area/ruin/unpowered/buried_shrine)
+"uP" = (
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 8
+ },
+/obj/structure/stone_tile/center,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"yJ" = (
-/obj/structure/stone_tile/slab,
-/mob/living/simple_animal/hostile/nanotrasen/ranged/assault,
+/area/ruin/unpowered/buried_shrine)
+"uS" = (
+/obj/structure/table_frame/wood,
+/obj/structure/stone_tile/cracked{
+ dir = 1
+ },
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"zG" = (
+/area/ruin/unpowered/buried_shrine)
+"vg" = (
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"vi" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/glass/bottle/potion,
+/obj/item/reagent_containers/glass/bottle/potion{
+ pixel_x = -10;
+ pixel_y = 9
+ },
+/obj/item/reagent_containers/glass/bottle/potion{
+ pixel_x = 10;
+ pixel_y = 9
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"vo" = (
/obj/structure/table/wood,
+/obj/item/gun/ballistic/bow/ashen,
/obj/structure/stone_tile/slab,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"zJ" = (
-/obj/structure/sink/puddle,
-/turf/open/floor/plating/ashplanet/ash,
-/area/overmap_encounter/planetoid/lava/explored)
-"zW" = (
-/obj/item/ammo_casing/shotgun/buckshot,
-/turf/open/floor/wood{
- icon_state = "wood-broken6"
+/area/ruin/unpowered/buried_shrine)
+"vJ" = (
+/obj/structure/flora/ash/stem_shroom,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"vO" = (
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 4
},
-/area/overmap_encounter/planetoid/lava/explored)
-"zY" = (
-/obj/structure/stone_tile/block{
- dir = 1;
- pixel_x = 16
- },
-/obj/structure/stone_tile,
-/obj/structure/stone_tile{
- dir = 1
- },
-/obj/effect/mob_spawn/human/corpse{
- mob_species = /datum/species/lizard/ashwalker
+/obj/structure/stone_tile/center/burnt,
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"vR" = (
+/obj/item/stack/sheet/bone,
+/obj/structure/stone_tile/slab/cracked{
+ dir = 5
},
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"An" = (
-/obj/structure/fence/corner{
- dir = 8
- },
-/turf/open/floor/plating/ashplanet/ash,
-/area/overmap_encounter/planetoid/lava/explored)
-"At" = (
-/obj/structure/table/wood,
-/obj/item/seeds/garlic,
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"AG" = (
-/obj/item/seeds/peas,
-/turf/open/floor/plating/ashplanet/ash,
-/area/overmap_encounter/planetoid/lava/explored)
-"AI" = (
-/obj/structure/stone_tile/block/cracked{
+/area/ruin/unpowered/buried_shrine)
+"wb" = (
+/obj/structure/flora/rock/pile/lava,
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"wj" = (
+/obj/structure/stone_tile/surrounding_tile{
dir = 4
},
/turf/open/lava/smooth/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"AY" = (
+/area/ruin/unpowered/buried_shrine)
+"wl" = (
/obj/structure/stone_tile/block{
dir = 4
},
-/obj/effect/mob_spawn/human/corpse{
- mob_species = /datum/species/lizard/ashwalker
- },
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Bv" = (
-/obj/item/seeds/glowshroom/glowcap,
-/turf/open/floor/plating/ashplanet/ash,
-/area/overmap_encounter/planetoid/lava/explored)
-"BF" = (
-/obj/machinery/hydroponics/soil,
-/obj/item/seeds/tower,
-/turf/open/floor/plating/ashplanet/ash,
-/area/overmap_encounter/planetoid/lava/explored)
-"Cr" = (
-/obj/structure/fence/door{
+/area/ruin/unpowered/buried_shrine)
+"wt" = (
+/obj/structure/stone_tile/surrounding/cracked{
dir = 4
},
-/turf/open/floor/plating/ashplanet/ash,
-/area/overmap_encounter/planetoid/lava/explored)
-"CE" = (
+/mob/living/simple_animal/hostile/asteroid/brimdemon,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"wy" = (
/obj/structure/stone_tile{
- dir = 8
+ dir = 4
},
-/obj/structure/stone_tile/slab{
- pixel_y = -16
+/obj/structure/stone_tile/block/cracked{
+ dir = 6
},
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"CM" = (
-/turf/open/floor/plating/ashplanet/ash,
-/area/overmap_encounter/planetoid/lava/explored)
-"CP" = (
-/obj/machinery/smartfridge/drying_rack,
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"CT" = (
-/obj/structure/stone_tile/slab,
-/obj/structure/table/wood,
-/obj/item/reagent_containers/food/snacks/soup/blood,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"CU" = (
+/area/ruin/unpowered/buried_shrine)
+"wM" = (
/obj/structure/stone_tile/slab,
+/mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Dk" = (
-/obj/structure/stone_tile{
+/area/ruin/unpowered/buried_shrine)
+"wS" = (
+/obj/structure/stone_tile/surrounding/cracked{
dir = 4
},
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"DF" = (
-/obj/item/clothing/head/welding,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Eh" = (
-/obj/structure/stone_tile/slab,
-/obj/structure/table/wood,
-/obj/item/reagent_containers/glass/bowl/mushroom_bowl,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Eq" = (
-/obj/structure/stone_tile/block{
- dir = 8
+/turf/closed/mineral/random/volcanic,
+/area/ruin/unpowered/buried_shrine)
+"xe" = (
+/obj/structure/stone_tile{
+ dir = 1
},
-/obj/effect/mob_spawn/human/corpse{
- mob_species = /datum/species/lizard/ashwalker
+/obj/structure/stone_tile/cracked{
+ dir = 8
},
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
/area/overmap_encounter/planetoid/lava/explored)
-"Ez" = (
-/obj/structure/stone_tile/slab,
-/obj/structure/table/wood,
-/obj/item/reagent_containers/glass/bowl/mushroom_bowl,
-/obj/item/reagent_containers/food/snacks/soup/wish,
+"xs" = (
+/obj/structure/stone_tile/block/burnt{
+ dir = 4
+ },
+/obj/structure/stone_tile/block/cracked{
+ dir = 8
+ },
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Fk" = (
+/area/ruin/unpowered/buried_shrine)
+"xJ" = (
/obj/structure/stone_tile/block{
dir = 4
},
+/obj/structure/stone_tile/block/cracked{
+ dir = 10
+ },
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Fo" = (
-/obj/structure/stone_tile/slab,
-/obj/structure/table/wood,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"FS" = (
-/obj/structure/table/wood,
-/obj/item/seeds/ambrosia,
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"Gr" = (
-/obj/item/ammo_casing/shotgun/buckshot,
+/area/ruin/unpowered/buried_shrine)
+"xT" = (
+/obj/structure/stone_tile/block/cracked{
+ dir = 1
+ },
+/obj/structure/chair/wood,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"GD" = (
-/obj/structure/stone_tile/surrounding_tile/cracked{
- dir = 8
+/area/ruin/unpowered/buried_shrine)
+"yb" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_y = 6;
+ pixel_x = -4
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"yt" = (
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 5
},
/obj/structure/stone_tile/center,
-/obj/structure/stone_tile/surrounding_tile{
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"yy" = (
+/obj/structure/stone_tile/block,
+/obj/structure/stone_tile{
dir = 1
},
-/obj/structure/stone_tile/surrounding_tile{
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"yz" = (
+/obj/structure/stone_tile/slab/cracked{
dir = 4
},
-/turf/open/lava/smooth/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"HL" = (
-/obj/effect/mob_spawn/human/corpse{
- mob_species = /datum/species/lizard/ashwalker
- },
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"HP" = (
-/obj/structure/mineral_door/sandstone,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"yF" = (
+/obj/structure/flora/ausbushes/fullgrass/hell,
+/turf/open/floor/plating/grass/lava,
+/area/ruin/unpowered/buried_shrine)
+"yJ" = (
+/turf/open/floor/plating/grass/lava/orange,
/area/overmap_encounter/planetoid/lava/explored)
-"Ii" = (
-/obj/structure/stone_tile/surrounding_tile,
-/obj/structure/stone_tile/surrounding_tile{
- pixel_x = 17;
- pixel_y = -17
- },
-/obj/structure/stone_tile/surrounding_tile{
- dir = 1;
- pixel_x = 17;
- pixel_y = -17
- },
-/obj/structure/stone_tile/surrounding_tile{
- dir = 4;
- pixel_x = 17;
- pixel_y = -17
+"yM" = (
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 4
},
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"zg" = (
+/obj/structure/stone_tile,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"zB" = (
+/obj/structure/stone_tile/center,
/obj/structure/stone_tile/surrounding_tile{
- dir = 8;
- pixel_x = 17;
- pixel_y = -17
- },
-/obj/structure/stone_tile/center{
- pixel_x = 17;
- pixel_y = -17
+ dir = 8
},
-/turf/open/lava/smooth/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"IF" = (
-/obj/structure/stone_tile/block{
- dir = 1
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 6
},
-/obj/item/kinetic_crusher,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"zL" = (
+/obj/structure/flora/rock/lava,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
/area/overmap_encounter/planetoid/lava/explored)
-"IO" = (
-/obj/structure/stone_tile/block/cracked,
-/turf/open/lava/smooth/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Jd" = (
-/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck,
-/turf/open/floor/plating/ashplanet/ash,
-/area/overmap_encounter/planetoid/lava/explored)
-"Jk" = (
+"zN" = (
/obj/structure/stone_tile/block{
- dir = 4;
- pixel_y = -16
- },
-/obj/structure/stone_tile,
-/obj/structure/stone_tile{
dir = 8
},
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Jv" = (
/obj/structure/stone_tile/block{
- dir = 1
+ dir = 4
},
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"JA" = (
-/turf/open/floor/wood{
- icon_state = "wood-broken3"
+/area/ruin/unpowered/buried_shrine)
+"zQ" = (
+/obj/structure/stone_tile/surrounding_tile/burnt{
+ dir = 1
},
-/area/overmap_encounter/planetoid/lava/explored)
-"JL" = (
-/obj/structure/table/wood,
-/obj/item/seeds/cotton,
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"JM" = (
-/obj/structure/table/wood,
-/obj/item/seeds/cabbage,
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"JR" = (
-/obj/structure/stone_tile{
+/obj/structure/stone_tile/surrounding_tile/burnt,
+/obj/structure/stone_tile/surrounding_tile/burnt{
dir = 4
},
-/obj/effect/mob_spawn/human/corpse{
- mob_species = /datum/species/lizard/ashwalker
+/obj/structure/stone_tile/center/burnt,
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Ab" = (
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 1
},
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"JV" = (
-/obj/structure/table/wood,
-/obj/item/seeds/cherry,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"JZ" = (
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Ad" = (
/obj/structure/stone_tile/slab,
-/obj/structure/fluff/drake_statue,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Kd" = (
-/obj/structure/stone_tile/slab/cracked{
+/area/ruin/unpowered/buried_shrine)
+"Aw" = (
+/obj/structure/stone_tile/cracked{
dir = 1
},
-/obj/structure/table/wood,
-/obj/item/stack/sheet/mineral/wood/fifty,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Ku" = (
-/obj/structure/table/wood,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"KR" = (
-/obj/item/storage/firstaid/regular,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Ay" = (
+/obj/structure/flora/ausbushes/fernybush/hell,
+/turf/open/floor/plating/grass/lava/orange,
/area/overmap_encounter/planetoid/lava/explored)
-"KS" = (
-/obj/structure/stone_tile/block{
+"Ba" = (
+/obj/structure/stone_tile/block/burnt{
dir = 4
},
-/obj/item/ammo_casing/shotgun/buckshot,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Lj" = (
-/obj/structure/stone_tile/block{
- dir = 4
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 5
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Bc" = (
+/obj/structure/stone_tile/block/cracked{
+ dir = 1
},
-/obj/effect/mob_spawn/human/corpse{
- mob_species = /datum/species/lizard/ashwalker
+/obj/structure/stone_tile/block/cracked{
+ dir = 10
},
-/obj/item/spear/bonespear,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"LG" = (
-/mob/living/simple_animal/hostile/asteroid/gutlunch/guthen,
-/turf/open/floor/plating/ashplanet/ash,
-/area/overmap_encounter/planetoid/lava/explored)
-"LL" = (
+/area/ruin/unpowered/buried_shrine)
+"Bm" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_y = 4
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Bz" = (
+/obj/structure/table_frame/wood,
+/obj/item/stack/sheet/bone,
/obj/structure/stone_tile/slab,
-/obj/effect/mob_spawn/human/corpse{
- mob_species = /datum/species/lizard/ashwalker
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"BA" = (
+/obj/structure/destructible/tribal_torch{
+ pixel_y = 13
+ },
+/obj/structure/stone_tile/center,
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 4
},
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"LS" = (
-/obj/item/seeds/plump,
-/turf/open/floor/plating/ashplanet/ash,
-/area/overmap_encounter/planetoid/lava/explored)
-"MX" = (
+/area/ruin/unpowered/buried_shrine)
+"BF" = (
/obj/structure/stone_tile/slab/cracked{
- dir = 10
+ dir = 6
},
-/obj/item/ammo_casing/shotgun/buckshot,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Nf" = (
+/area/ruin/unpowered/buried_shrine)
+"BZ" = (
/obj/structure/stone_tile/block{
- dir = 1
+ dir = 8
},
-/obj/structure/stone_tile/block,
-/obj/structure/chair/wood/wings{
+/obj/structure/stone_tile/cracked{
dir = 1
},
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Np" = (
-/obj/item/seeds/wheat,
-/turf/open/floor/plating/ashplanet/ash,
-/area/overmap_encounter/planetoid/lava/explored)
-"Nt" = (
-/obj/structure/bonfire,
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"NA" = (
-/obj/structure/table/wood,
-/obj/item/clothing/head/welding,
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"ND" = (
-/obj/structure/stone_tile/block,
-/obj/structure/stone_tile/slab{
- pixel_y = -16
+/area/ruin/unpowered/buried_shrine)
+"Cm" = (
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 5
+ },
+/obj/structure/stone_tile/center/burnt,
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Cv" = (
+/obj/structure/stone_tile/slab/cracked{
+ dir = 4
+ },
+/obj/item/chair/wood/wings{
+ dir = 8
},
-/obj/structure/mineral_door/sandstone,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"NE" = (
-/obj/structure/stone_tile/block{
+/area/ruin/unpowered/buried_shrine)
+"CD" = (
+/obj/structure/stone_tile{
dir = 1
},
-/turf/open/lava/smooth/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"OB" = (
-/obj/structure/table/optable,
+/obj/structure/stone_tile{
+ dir = 4
+ },
+/obj/structure/stone_tile,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Pi" = (
-/obj/structure/stone_tile/block/cracked{
+/area/ruin/unpowered/buried_shrine)
+"CE" = (
+/obj/structure/stone_tile/cracked{
+ dir = 8
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"CF" = (
+/obj/structure/chair/pew/left{
dir = 1
},
+/obj/structure/stone_tile/slab,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Qv" = (
-/obj/structure/sink/puddle,
+/area/ruin/unpowered/buried_shrine)
+"CM" = (
+/obj/structure/stone_tile/center,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"QT" = (
-/obj/structure/fence/corner{
- dir = 5
+/area/ruin/unpowered/buried_shrine)
+"CT" = (
+/obj/structure/table/wood,
+/obj/item/candle,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"CU" = (
+/mob/living/simple_animal/hostile/asteroid/goliath/pup{
+ pixel_x = 0
},
-/turf/open/floor/plating/ashplanet/ash,
+/turf/open/floor/plating/moss,
+/area/ruin/unpowered/buried_shrine)
+"Do" = (
+/obj/structure/flora/ausbushes/hell,
+/turf/open/floor/plating/grass/lava/orange,
+/area/overmap_encounter/planetoid/lava/explored)
+"Dp" = (
+/obj/structure/flora/ash/fireblossom,
+/turf/open/floor/plating/grass/lava/orange,
/area/overmap_encounter/planetoid/lava/explored)
-"QW" = (
-/obj/structure/closet/crate/medical,
-/obj/item/storage/firstaid/regular,
-/obj/item/reagent_containers/blood/random,
-/obj/item/reagent_containers/blood/lizard,
-/obj/item/reagent_containers/blood/lizard,
-/obj/item/stack/sheet/cotton/cloth/ten,
+"DB" = (
+/obj/structure/flora/ausbushes/fullgrass/hell,
+/turf/open/floor/plating/grass/lava/orange,
+/area/overmap_encounter/planetoid/lava/explored)
+"Ee" = (
+/obj/structure/chair/pew/left,
+/obj/structure/stone_tile/slab,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Ef" = (
+/obj/structure/flora/ash/fern,
+/turf/open/floor/plating/moss,
+/area/overmap_encounter/planetoid/cave/explored)
+"Eh" = (
+/turf/closed/mineral/random/volcanic,
/area/overmap_encounter/planetoid/lava/explored)
-"Sa" = (
+"Eu" = (
/obj/structure/stone_tile/slab/cracked{
- dir = 4
+ dir = 5
},
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"SJ" = (
-/obj/effect/mob_spawn/human/corpse{
- mob_species = /datum/species/lizard/ashwalker
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 6
},
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Ez" = (
/obj/structure/stone_tile/block{
+ dir = 4
+ },
+/obj/structure/stone_tile{
dir = 8
},
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"SO" = (
-/obj/structure/closet/crate,
-/obj/item/flashlight/lantern,
-/obj/item/flashlight/lantern,
-/obj/item/flashlight/lantern,
+/area/ruin/unpowered/buried_shrine)
+"EE" = (
+/obj/structure/stone_tile/center/burnt,
+/obj/structure/stone_tile/surrounding/burnt,
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Fo" = (
+/obj/structure/stone_tile/cracked{
+ dir = 4
+ },
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Td" = (
+/area/ruin/unpowered/buried_shrine)
+"Fq" = (
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Ty" = (
-/obj/structure/stone_tile/slab/cracked,
-/mob/living/simple_animal/hostile/nanotrasen/ranged,
+/area/ruin/unpowered/buried_shrine)
+"Fw" = (
+/obj/structure/stone_tile/slab/cracked{
+ dir = 1
+ },
+/obj/structure/chair/wood/wings,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"TX" = (
+/area/ruin/unpowered/buried_shrine)
+"FC" = (
+/obj/item/reagent_containers/food/snacks/grown/apple{
+ pixel_y = 16
+ },
+/turf/open/floor/plating/grass/lava,
+/area/ruin/unpowered/buried_shrine)
+"FD" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_x = 1
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Gm" = (
+/obj/structure/stone_tile{
+ dir = 8
+ },
/obj/structure/stone_tile{
+ dir = 1
+ },
+/obj/structure/stone_tile/block/cracked{
+ dir = 9
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Go" = (
+/obj/structure/stone_tile/surrounding_tile/cracked,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"GB" = (
+/obj/structure/stone_tile/block{
dir = 8
},
+/obj/effect/decal/cleanable/ash{
+ pixel_x = -8
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"GL" = (
/obj/structure/stone_tile/block{
dir = 1
},
+/obj/structure/stone_tile/block/cracked,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Ua" = (
-/obj/structure/stone_tile/surrounding_tile{
+/area/ruin/unpowered/buried_shrine)
+"GT" = (
+/obj/structure/stone_tile/block/cracked{
+ dir = 8
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Hh" = (
+/obj/structure/stone_tile/surrounding_tile,
+/obj/effect/decal/cleanable/blood/old,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Ht" = (
+/obj/structure/stone_tile/surrounding/cracked,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Hv" = (
+/obj/structure/flora/tree/dead/hell,
+/turf/open/floor/plating/grass/lava,
+/area/ruin/unpowered/buried_shrine)
+"Hw" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_y = 6
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"HN" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_x = -3
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Ii" = (
+/obj/structure/stone_tile/cracked{
dir = 1
},
+/obj/structure/stone_tile{
+ dir = 4
+ },
+/obj/structure/stone_tile,
+/obj/structure/stone_tile/cracked{
+ dir = 8
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/ruin/unpowered/buried_shrine)
+"Iz" = (
+/obj/structure/destructible/tribal_torch{
+ pixel_y = 14
+ },
+/obj/structure/stone_tile/surrounding/cracked,
+/obj/structure/stone_tile/center,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"IL" = (
+/obj/structure/stone_tile/slab/cracked,
+/obj/item/stack/sheet/mineral/wood,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Ja" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_y = 2;
+ pixel_x = 7
+ },
/turf/open/lava/smooth/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Us" = (
-/obj/structure/stone_tile/slab,
-/obj/structure/table/wood,
-/obj/item/spear/bonespear,
+/area/ruin/unpowered/buried_shrine)
+"Jc" = (
+/obj/structure/stone_tile/block/burnt{
+ dir = 8
+ },
+/obj/structure/stone_tile/block/cracked{
+ dir = 4
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Jh" = (
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 9
+ },
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Jk" = (
+/obj/structure/stone_tile/cracked{
+ dir = 8
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
/area/overmap_encounter/planetoid/lava/explored)
-"Ux" = (
-/turf/open/floor/wood{
- icon_state = "wood-broken6"
+"Jr" = (
+/obj/structure/stone_tile/cracked{
+ dir = 1
},
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
/area/overmap_encounter/planetoid/lava/explored)
-"Uy" = (
+"Jv" = (
+/mob/living/simple_animal/hostile/asteroid/goliath/pup{
+ pixel_x = 0
+ },
+/obj/structure/flora/ausbushes/sparsegrass/hell,
+/turf/open/floor/plating/moss,
+/area/ruin/unpowered/buried_shrine)
+"Jw" = (
+/obj/structure/stone_tile/block,
/obj/structure/stone_tile/block{
+ dir = 1
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"JJ" = (
+/obj/structure/stone_tile{
dir = 8
},
-/obj/structure/mineral_door/sandstone,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"JL" = (
+/obj/structure/flora/ausbushes/ywflowers/hell,
+/turf/open/floor/plating/grass/lava/orange,
/area/overmap_encounter/planetoid/lava/explored)
-"UB" = (
-/obj/structure/stone_tile{
+"Ka" = (
+/obj/structure/stone_tile/surrounding_tile/burnt{
+ dir = 8
+ },
+/obj/structure/stone_tile/surrounding_tile/burnt,
+/obj/structure/stone_tile/surrounding_tile/burnt{
dir = 1
},
+/obj/structure/stone_tile/surrounding_tile/burnt{
+ dir = 4
+ },
+/obj/structure/stone_tile/center/burnt,
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Kt" = (
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 8
+ },
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"UF" = (
-/obj/structure/table/wood,
-/obj/item/spear/bonespear,
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"Vb" = (
-/obj/structure/stone_tile/block{
+/area/ruin/unpowered/buried_shrine)
+"Kz" = (
+/obj/structure/flora/ash/cap_shroom,
+/turf/open/floor/plating/moss,
+/area/overmap_encounter/planetoid/cave/explored)
+"KD" = (
+/obj/structure/stone_tile/cracked,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/overmap_encounter/planetoid/lava/explored)
+"Lu" = (
+/obj/structure/flora/ash/leaf_shroom,
+/turf/open/floor/plating/moss,
+/area/overmap_encounter/planetoid/cave/explored)
+"Lx" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_y = 1;
+ pixel_x = 4
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"LC" = (
+/obj/structure/stone_tile/block/cracked{
dir = 4
},
-/obj/item/clothing/head/welding,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"LJ" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/food/snacks/grown/ambrosia/gaia{
+ pixel_y = 6
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"LK" = (
+/turf/open/floor/plating/moss,
/area/overmap_encounter/planetoid/lava/explored)
-"VT" = (
-/obj/structure/stone_tile/block{
+"LL" = (
+/obj/structure/stone_tile/cracked{
dir = 4
},
/obj/structure/stone_tile{
- dir = 4
+ dir = 1
},
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/obj/structure/stone_tile/cracked{
+ dir = 8
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
/area/overmap_encounter/planetoid/lava/explored)
-"WJ" = (
+"LP" = (
/obj/structure/table/wood,
-/obj/item/melee/transforming/energy/sword/saber/red,
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"WM" = (
-/obj/item/storage/firstaid/tactical,
+/obj/item/ammo_casing/caseless/arrow/bone,
+/obj/item/ammo_casing/caseless/arrow/bone{
+ pixel_y = -4
+ },
+/obj/item/ammo_casing/caseless/arrow/bone{
+ pixel_y = 4
+ },
+/obj/item/ammo_casing/caseless/arrow/bone{
+ pixel_y = 8
+ },
+/obj/item/ammo_casing/caseless/arrow/bone{
+ pixel_y = 12
+ },
+/obj/structure/stone_tile/slab,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Xe" = (
-/obj/machinery/hydroponics/soil,
+/area/ruin/unpowered/buried_shrine)
+"LW" = (
+/obj/structure/destructible/tribal_torch{
+ pixel_y = 13
+ },
+/obj/structure/stone_tile/surrounding,
+/obj/structure/stone_tile/center/cracked,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Xw" = (
-/obj/structure/mineral_door/sandstone,
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"Yg" = (
-/obj/structure/stone_tile/slab/cracked{
+/area/ruin/unpowered/buried_shrine)
+"LZ" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_y = 5;
+ pixel_x = 6
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Mc" = (
+/obj/structure/stone_tile/block,
+/obj/structure/stone_tile/slab,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Md" = (
+/obj/structure/stone_tile/surrounding_tile/cracked,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/overmap_encounter/planetoid/lava/explored)
+"Mt" = (
+/obj/structure/flora/ausbushes/genericbush/hell,
+/turf/open/floor/plating/grass/lava,
+/area/ruin/unpowered/buried_shrine)
+"Mw" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_x = -7;
+ pixel_y = -8
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Mx" = (
+/obj/structure/stone_tile/block/cracked{
+ dir = 1
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"MQ" = (
+/turf/template_noop,
+/area/template_noop)
+"Ni" = (
+/obj/structure/table/wood,
+/obj/item/crusher_trophy/legion_skull,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Nk" = (
+/obj/structure/table_frame/wood,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"NK" = (
+/obj/structure/flora/ash/cacti,
+/turf/open/floor/plating/grass/lava,
+/area/ruin/unpowered/buried_shrine)
+"NN" = (
+/obj/structure/stone_tile/center,
+/obj/structure/stone_tile/surrounding/cracked{
dir = 5
},
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"NY" = (
+/obj/structure/stone_tile/block/cracked{
+ dir = 9
+ },
+/obj/structure/stone_tile/block/cracked,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Ot" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_y = 8;
+ pixel_x = -1
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"OO" = (
+/obj/structure/stone_tile/slab/cracked{
+ dir = 1
+ },
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 4
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"OT" = (
+/obj/structure/flora/ausbushes/fullgrass/hell,
+/turf/open/floor/plating/moss,
+/area/overmap_encounter/planetoid/lava/explored)
+"Ps" = (
+/obj/structure/flora/rock/hell,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/overmap_encounter/planetoid/cave/explored)
+"Qb" = (
+/obj/structure/flora/ausbushes/sparsegrass/hell,
+/turf/open/floor/plating/grass/lava,
+/area/ruin/unpowered/buried_shrine)
+"Qf" = (
+/obj/structure/stone_tile/cracked{
+ dir = 1
+ },
+/mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"QR" = (
+/obj/structure/flora/tree/dead/tall/grey,
+/turf/open/floor/plating/grass/lava/orange,
/area/overmap_encounter/planetoid/lava/explored)
-"Yh" = (
-/obj/structure/stone_tile/slab/cracked,
+"Rd" = (
+/obj/structure/stone_tile/block/cracked{
+ dir = 8
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/ruin/unpowered/buried_shrine)
+"Rl" = (
+/obj/structure/stone_tile/cracked{
+ dir = 8
+ },
+/obj/structure/stone_tile{
+ dir = 1
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"RK" = (
+/obj/structure/stone_tile/center/cracked,
+/mob/living/simple_animal/hostile/asteroid/brimdemon,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"RN" = (
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 8
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Sa" = (
+/obj/structure/stone_tile/slab/cracked{
+ dir = 4
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
/area/overmap_encounter/planetoid/lava/explored)
-"YC" = (
-/obj/structure/table/wood,
-/obj/item/storage/firstaid/ancient,
-/turf/open/floor/wood,
+"Sj" = (
+/obj/structure/flora/ausbushes/sparsegrass/hell,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
/area/overmap_encounter/planetoid/lava/explored)
-"YI" = (
+"Sn" = (
/obj/structure/table/wood,
-/obj/item/stack/sheet/mineral/wood/fifty,
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"YT" = (
+/obj/item/reagent_containers/food/snacks/grown/ash_flora/fireblossom,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"So" = (
/obj/structure/stone_tile/block/cracked,
+/obj/structure/stone_tile/block/cracked{
+ dir = 5
+ },
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Zc" = (
-/obj/structure/stone_tile/block{
+/area/ruin/unpowered/buried_shrine)
+"Sw" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_x = -9
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"SA" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/glass/bowl/mushroom_bowl,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"SJ" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_y = 2;
+ pixel_x = 4
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"SV" = (
+/obj/structure/chair/pew/right{
dir = 1
},
-/obj/structure/stone_tile/block,
-/obj/structure/chair/wood/wings,
+/obj/structure/stone_tile/slab,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Zj" = (
-/obj/machinery/iv_drip,
-/obj/item/reagent_containers/food/drinks/waterbottle/large,
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"ZL" = (
+/area/ruin/unpowered/buried_shrine)
+"Td" = (
+/obj/structure/stone_tile/slab/cracked,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Tp" = (
+/obj/structure/stone_tile/cracked{
+ dir = 8
+ },
+/obj/structure/stone_tile,
+/obj/structure/stone_tile{
+ dir = 4
+ },
+/obj/structure/stone_tile{
+ dir = 1
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/ruin/unpowered/buried_shrine)
+"Tu" = (
/obj/structure/stone_tile/block{
+ dir = 1
+ },
+/obj/item/chair/wood{
dir = 8
},
-/obj/effect/gibspawner/human,
-/turf/open/lava/smooth/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"ZX" = (
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Ty" = (
+/obj/item/stack/sheet/bluespace_crystal/five{
+ pixel_x = -7
+ },
+/obj/item/stack/sheet/mineral/gold/five{
+ pixel_y = 3
+ },
+/obj/item/stack/sheet/mineral/diamond/five{
+ pixel_x = 8
+ },
+/obj/structure/closet/crate/necropolis,
+/obj/structure/stone_tile/slab/cracked{
+ dir = 5
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"TO" = (
+/turf/closed/mineral/random/volcanic,
+/area/ruin/unpowered/buried_shrine)
+"Ua" = (
+/obj/structure/stone_tile/block{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/ash{
+ pixel_x = 6;
+ pixel_y = 11
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Uf" = (
+/obj/structure/chair/pew,
+/obj/structure/stone_tile/slab,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Uw" = (
+/obj/structure/flora/ausbushes/sparsegrass/hell,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/overmap_encounter/planetoid/cave/explored)
+"UB" = (
+/obj/structure/flora/ausbushes/genericbush/hell,
+/obj/item/reagent_containers/food/snacks/grown/apple{
+ pixel_x = -10;
+ pixel_y = -6
+ },
+/turf/open/floor/plating/grass/lava,
+/area/ruin/unpowered/buried_shrine)
+"UF" = (
+/obj/structure/stone_tile/block,
+/obj/item/claymore/bone{
+ pixel_x = 8;
+ pixel_y = 21
+ },
+/obj/item/shield/riot/goliath{
+ pixel_x = -12;
+ pixel_y = 16
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Vt" = (
+/obj/structure/flora/ash/leaf_shroom,
+/turf/open/floor/plating/moss,
+/area/ruin/unpowered/buried_shrine)
+"VG" = (
/obj/structure/table/wood,
-/obj/item/storage/box/rxglasses,
+/obj/structure/table/wood,
+/obj/item/kitchen/knife/combat/bone,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-
-(1,1,1) = {"
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-dD
-uK
-dD
-uK
-Td
-dD
-uK
-dD
-Td
-Td
-Td
-Td
-gl
-Td
-Td
-Td
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
+/area/ruin/unpowered/buried_shrine)
+"Wd" = (
+/obj/structure/stone_tile/slab/cracked{
+ dir = 5
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Ws" = (
+/turf/open/floor/plating/moss,
+/area/ruin/unpowered/buried_shrine)
+"WD" = (
+/obj/structure/flora/tree/dead/barren,
+/turf/open/floor/plating/grass/lava/orange,
+/area/overmap_encounter/planetoid/lava/explored)
+"WG" = (
+/obj/structure/stone_tile/slab/burnt,
+/obj/item/gem/amber,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"WP" = (
+/obj/structure/stone_tile/block/cracked{
+ dir = 1
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/overmap_encounter/planetoid/lava/explored)
+"WZ" = (
+/turf/closed/indestructible/riveted/boss,
+/area/ruin/unpowered/buried_shrine)
+"Xh" = (
+/obj/structure/flora/ash/cap_shroom,
+/turf/open/floor/plating/moss,
+/area/ruin/unpowered/buried_shrine)
+"Xn" = (
+/obj/structure/stone_tile/cracked,
+/obj/structure/stone_tile/cracked{
+ dir = 4
+ },
+/obj/structure/stone_tile{
+ dir = 8
+ },
+/obj/structure/stone_tile{
+ dir = 1
+ },
+/mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/ruin/unpowered/buried_shrine)
+"Xr" = (
+/obj/structure/stone_tile/cracked,
+/obj/structure/stone_tile/cracked{
+ dir = 4
+ },
+/obj/structure/stone_tile{
+ dir = 8
+ },
+/obj/structure/stone_tile{
+ dir = 1
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/ruin/unpowered/buried_shrine)
+"Xv" = (
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 4
+ },
+/obj/structure/stone_tile/center,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"XA" = (
+/turf/closed/indestructible/riveted/boss,
+/area/overmap_encounter/planetoid/cave/explored)
+"Ye" = (
+/obj/structure/chair/pew/right,
+/obj/structure/stone_tile/slab,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Yf" = (
+/obj/structure/stone_tile/block/cracked{
+ dir = 9
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Yh" = (
+/obj/structure/stone_tile/block,
+/obj/structure/stone_tile{
+ dir = 4
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Yp" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_y = -7;
+ pixel_x = -4
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"YK" = (
+/obj/structure/flora/ausbushes/sparsegrass/hell,
+/turf/open/floor/plating/moss,
+/area/ruin/unpowered/buried_shrine)
+"Zk" = (
+/obj/structure/stone_tile{
+ dir = 8
+ },
+/obj/structure/stone_tile{
+ dir = 1
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Zl" = (
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 8
+ },
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_y = -8
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Zo" = (
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 10
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"ZE" = (
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 1
+ },
+/obj/structure/stone_tile/center/burnt,
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"ZK" = (
+/obj/structure/stone_tile/block{
+ dir = 1
+ },
+/obj/structure/stone_tile,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"ZV" = (
+/obj/structure/stone_tile/slab/cracked{
+ dir = 4
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/ruin/unpowered/buried_shrine)
+"ZX" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_y = 7;
+ pixel_x = 9
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+
+(1,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+nh
+nh
+nh
+nh
+nh
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
"}
(2,1,1) = {"
-Td
-An
-lx
-lx
-lx
-lx
-lx
-lx
-dD
-uK
-Td
-dD
-Td
-Td
-uK
-dD
-pT
-wV
-CP
-Td
-wV
-ie
-dD
-uK
-Td
-Td
-Td
-Td
-CU
-Td
-Td
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-Td
-Td
-Td
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+nh
+MQ
+MQ
+MQ
+nh
+jt
+Eh
+Eh
+lO
+LK
+aD
+nh
+LK
+Sj
+nh
+nh
+jt
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
"}
(3,1,1) = {"
-Td
-ad
-px
-Np
-CM
-LS
-CM
-sM
-Td
-iw
-iw
-uK
-uK
-Td
-dD
-Td
-Td
-iw
-iw
-iw
-iw
-iw
-iw
-dD
-Td
-Td
-Td
-gl
-Td
-Jv
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Gr
-gl
-ee
-Td
-Td
-aA
-aA
-aA
-aA
-aA
-aA
-aA
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+jt
+nh
+nh
+nh
+nh
+nh
+nh
+nh
+Eh
+Eh
+gt
+dF
+jJ
+nh
+nh
+nh
+nh
+LK
+nh
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
"}
(4,1,1) = {"
-Td
-ad
-CM
-BF
-ke
-ke
-ke
-CM
-oO
-iw
-iw
-iw
-dD
-Td
-Td
-Td
-iw
-Td
-Td
-iw
-JL
-JV
-wV
-dD
-Td
-Td
-Td
-gl
-CU
-Jv
-Td
-Td
-Td
-uK
-dD
-uK
-Td
-uK
-dD
-YT
-CU
-Jv
-Td
-aA
-aA
-aA
-aA
-aA
-aA
-aA
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+nh
+aD
+nh
+nh
+nh
+nh
+aD
+nh
+nh
+Eh
+dF
+lo
+dF
+dF
+aP
+dF
+LK
+nh
+aD
+nh
+Sj
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
"}
(5,1,1) = {"
-Td
-ad
-CM
-ke
-ke
-BF
-ke
-Bv
-dD
-iw
-iw
-iw
-Td
-Td
-dD
-Td
-wV
-tR
-Td
-Td
-JM
-wV
-wV
-Td
-Td
-Td
-Td
-gl
-CU
-Td
-Td
-Td
-dD
-dD
-iw
-iw
-Td
-pJ
-dD
-gl
-Yh
-Jv
-Td
-Gr
-Td
-aA
-aA
-aA
-aA
-aA
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+lO
+nh
+nh
+lO
+Eh
+Eh
+nh
+nh
+Eh
+Eh
+Eh
+Eh
+dF
+aP
+dF
+dF
+jJ
+dF
+lO
+LK
+lO
+nh
+nh
+MQ
+MQ
+nh
+nh
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
"}
(6,1,1) = {"
-Td
-ad
-Np
-AG
-sM
-CM
-sM
-zJ
-dD
-eq
-iw
-wt
-uK
-Td
-uK
-iw
-iw
-At
-iw
-Td
-iw
-iw
-iw
-dD
-Td
-Td
-Td
-gl
-CU
-Jv
-Td
-Td
-Td
-Td
-iw
-HL
-iw
-Td
-uK
-YT
-CU
-Pi
-Td
-Td
-Td
-Td
-Td
-dD
-dD
-Td
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+nh
+aD
+nh
+nh
+LK
+nh
+nh
+Eh
+nh
+Sj
+nh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Kz
+dF
+dF
+Eh
+Eh
+Eh
+Eh
+nh
+nh
+nh
+nh
+nh
+nh
+aD
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
"}
(7,1,1) = {"
-Td
-QT
-lx
-lx
-Cr
-lx
-lx
-lx
-uK
-dD
-iw
-uK
-dD
-Td
-dD
-hk
-rp
-Ku
-iw
-Td
-wV
-Ku
-FS
-uK
-Td
-Td
-Td
-gl
-CU
-Jv
-Td
-Td
-dD
-iw
-Td
-Td
-Td
-Td
-dD
-gl
-cR
-Jv
-Td
-dD
-dD
-dD
-uK
-dD
-uK
-dD
-"}
-(8,1,1) = {"
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Jv
-CU
-gl
-Td
-Td
-dD
-Td
-uK
-dD
-HP
-HP
-dD
-uK
-Td
-dD
-Td
-Td
-Td
-gl
-CU
-Jv
-Td
-Td
-uK
-UF
-iw
-iw
-cv
-iw
-Xw
-Td
-ee
-Jv
-gM
-uK
-Td
-uK
-Td
-uK
-Td
-dD
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+Eh
+Eh
+nh
+Sj
+nh
+nh
+LK
+rP
+LK
+Eh
+Eh
+nh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+lo
+dF
+jJ
+Eh
+Eh
+Eh
+Eh
+aD
+nh
+Sj
+nh
+Eh
+nh
+Sj
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(8,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+jt
+nh
+Eh
+nh
+nh
+nh
+nh
+Eh
+dF
+aP
+aP
+dF
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+dF
+dF
+dF
+Eh
+Eh
+Eh
+Eh
+Eh
+nh
+Eh
+Eh
+Eh
+nh
+nh
+jt
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
"}
(9,1,1) = {"
-Td
-Td
-Td
-cA
-cA
-cA
-cA
-Fk
-Fk
-Fk
-CU
-Fk
-Fk
-Fk
-Fk
-Fk
-Fk
-VT
-CU
-CU
-vm
-Fk
-Fk
-Fk
-Fk
-Fk
-Fk
-hd
-CU
-Jv
-Td
-Td
-dD
-il
-iw
-Td
-iw
-HL
-uK
-gl
-CU
-UB
-Fk
-Fk
-AY
-eZ
-AI
-ej
-Td
-uK
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+Eh
+Eh
+jt
+nh
+Eh
+Eh
+lo
+dF
+Kz
+dF
+Eh
+Eh
+Eh
+WZ
+WZ
+WZ
+WZ
+WZ
+Eh
+Eh
+gt
+aP
+dF
+Ef
+Eh
+Eh
+Eh
+Eh
+nh
+Eh
+Eh
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
"}
(10,1,1) = {"
-Td
-Td
-CU
-CU
-CU
-CU
-CU
-CU
-CU
-CU
-CU
-CU
-CU
-CU
-lO
-Jv
-CU
-lO
-Jv
-CU
-lO
-Jv
-lO
-Jv
-lO
-Jv
-lO
-Jv
-CU
-Jv
-Td
-Td
-dD
-dD
-iw
-iw
-iw
-iw
-dD
-gl
-ee
-CU
-CU
-Ty
-rJ
-IO
-jl
-NE
-WM
-Td
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+Sj
+nh
+Eh
+Eh
+Eh
+Eh
+dF
+dF
+dF
+aP
+Eh
+Eh
+WZ
+WZ
+WZ
+vg
+vg
+vg
+WZ
+WZ
+WZ
+Eh
+Eh
+lo
+aP
+Kz
+Eh
+Eh
+Eh
+Eh
+Eh
+nh
+aD
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
"}
(11,1,1) = {"
-Td
-CU
-CU
-CU
-CU
-CU
-CU
-CU
-CU
-CU
-CU
-CU
-CU
-CU
-lO
-Jv
-CU
-lO
-Jv
-CU
-lO
-Jv
-lO
-Jv
-lO
-Jv
-lO
-Jv
-CU
-Jv
-Td
-Td
-Td
-dD
-iw
-iw
-SO
-dD
-uK
-gl
-Yh
-Dk
-SJ
-ek
-aw
-oY
-ZL
-GD
-Td
-uK
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+nh
+Eh
+Eh
+Eh
+jJ
+aP
+aP
+dF
+Eh
+Eh
+WZ
+WZ
+wb
+vg
+vg
+yF
+hp
+Qb
+TO
+WZ
+WZ
+Eh
+jJ
+dF
+lo
+Eh
+Eh
+Eh
+Eh
+Eh
+nh
+nh
+nh
+nh
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
"}
(12,1,1) = {"
-Td
-Td
-ek
-ek
-dn
-dn
-dn
-ek
-ek
-ek
-ek
-ek
-ek
-ek
-ek
-ek
-ek
-ek
-TX
-CU
-wz
-ek
-ek
-ek
-ek
-ek
-ek
-ik
-CU
-Jv
-Td
-Td
-Td
-dD
-Td
-uK
-uK
-dD
-Xe
-YT
-qy
-Jv
-Td
-cv
-uK
-Td
-Td
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+aD
+Eh
+Eh
+XA
+Ef
+dF
+lo
+dF
+Eh
+Eh
+WZ
+WZ
+TO
+hp
+eI
+be
+jo
+Mt
+TO
+TO
+TO
+WZ
+WZ
+Eh
+dF
+dF
+dF
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+jt
+nh
+nh
nh
-dD
-dD
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
"}
(13,1,1) = {"
-aA
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-dD
-vd
-CU
-rk
-dD
-Td
-wV
-wV
-Xw
-dD
-gl
-CU
-Jv
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Xe
-gl
-CU
-Jv
-Td
-Td
-Td
-dD
-uK
-uK
-Td
-uK
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+nh
+Eh
+XA
+XA
+dF
+dF
+aP
+gt
+Eh
+Eh
+WZ
+TO
+Qb
+Mt
+eI
+Hv
+FC
+Qb
+hp
+NK
+TO
+vg
+WZ
+Eh
+Eh
+aP
+lo
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Sj
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
"}
(14,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-uK
-oF
-CT
-Nf
-dD
-iw
-iw
-iw
-Td
-uK
-uH
-CU
-Jv
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Xe
-gl
-CU
-kD
-DF
-Xe
-Qv
-Td
-uK
-dD
-cv
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+Sj
+nh
+nh
+Eh
+XA
+lo
+aP
+dF
+dF
+Eh
+Eh
+Eh
+WZ
+TO
+NK
+WZ
+WZ
+UB
+Qb
+yF
+WZ
+WZ
Td
+vg
+WZ
+Eh
+Eh
+dF
+gt
+dF
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+nh
+aD
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
"}
(15,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-uK
-oF
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+nh
+nh
+nh
+nh
+nh
+Sj
+dF
+dF
+dF
+Kz
+dF
Eh
-Nf
-wV
-Td
-iw
-iw
-iw
-dD
-gl
-CU
-Jv
-Td
-Td
-Td
-Td
-dD
-dD
-uK
-Qv
-Td
-gl
-CU
-Pi
-qw
-Xe
-uK
-dD
-Ux
-dD
-uK
-Td
+Eh
+WZ
+WZ
+TO
+TO
+WZ
+WZ
+TO
+TO
+hp
+WZ
+WZ
+cN
+vg
+WZ
+WZ
+Eh
+Eh
+dF
+aP
+Eh
+Eh
+Eh
+Eh
+XA
+XA
+Eh
+Eh
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
"}
(16,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-Td
-vd
-CU
-Zc
-wV
-iw
-iw
-iw
-iw
-uK
-gl
-CU
-Jv
-Td
-uK
-dD
-wV
-Td
-YI
-uK
-dD
-Td
-YT
-ee
-IF
-Td
-dD
-uK
-iw
-iw
-iw
-uK
-uK
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+Eh
+Eh
+jt
+nh
+Eh
+Eh
+Eh
+jJ
+lo
+dF
+XA
+XA
+Eh
+Eh
+WZ
+vg
+TO
+TO
+TO
+TO
+TO
+TO
+Qb
+TO
+TO
+hn
+vg
+wb
+WZ
+Eh
+Eh
+XA
+XA
+Eh
+Eh
+Eh
+Eh
+Eh
+XA
+XA
+Eh
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
"}
(17,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-dD
-oF
-Ez
-Nf
-wV
-iw
-iw
-iw
-iw
-dD
-gl
-CU
-Jv
-Td
-Xw
-JA
-iw
-Td
-Td
-iw
-HP
-Gr
-rx
-CU
-Pi
-Td
-aG
-Yh
-iw
-MX
-iw
-iw
-uK
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+Eh
+Eh
+Eh
+Eh
+Eh
+XA
+dF
+dF
+aP
+XA
+XA
+Eh
+Eh
+WZ
+wb
+on
+Fq
+Ht
+TO
+TO
+TO
+TO
+TO
+Wd
+Fq
+cN
+vg
+WZ
+Eh
+Eh
+XA
+XA
+Eh
+Eh
+Eh
+Eh
+Eh
+gt
+XA
+nh
+nh
+nh
+jt
+MQ
+MQ
+MQ
+MQ
+MQ
"}
(18,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-uK
-vd
-rm
-ny
-Xw
-iw
-iw
-iw
-Td
-Td
-gl
-CU
-Jv
-Td
-dD
-SO
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+Eh
+Eh
+XA
+XA
+XA
+dF
+Lu
+dF
+Eh
+Eh
+Eh
+Eh
+WZ
+vg
+hn
+cN
+Fq
+yz
+TO
+TO
+TO
+TO
+TO
+TO
+TO
+vg
+WZ
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+aP
+XA
+XA
nh
-Nt
-Td
-lh
-dD
-Td
-gl
-Yh
-kD
-Td
-dD
-Yg
-Ux
-iw
-JA
-iw
-Ux
+Sj
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
"}
(19,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-dD
-dD
-zG
-zG
-dD
-iw
-Td
-wt
-dD
-Td
-gl
-xT
-Jv
-Td
-iw
-SO
-iw
-fV
-iw
-iw
-uK
-Td
-gl
-CU
-Pi
-Td
-uK
-ha
-iw
-Td
-HL
-ha
-uK
+MQ
+MQ
+MQ
+nh
+nh
+nh
+nh
+jt
+Eh
+XA
+XA
+aP
+dF
+dF
+dF
+Eh
+Eh
+Eh
+Eh
+Eh
+WZ
+WZ
+WZ
+WZ
+Td
+TO
+TO
+TO
+TO
+TO
+TO
+WZ
+WZ
+WZ
+WZ
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+lo
+jJ
+XA
+aD
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
"}
(20,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-Td
-uK
-Td
-dD
-uK
-Td
-dD
-dD
-uK
-Td
-gl
-CU
-Jv
-Td
-dD
-uK
-dD
-uJ
-iw
-dD
-uK
-qw
-gl
-ee
-Jv
-uK
-uK
-iw
-kV
-iw
-iw
-Yh
-uK
+MQ
+MQ
+MQ
+aD
+nh
+Eh
+nh
+Eh
+Eh
+XA
+lo
+dF
+aP
+dF
+Eh
+Eh
+Eh
+Eh
+WZ
+WZ
+WZ
+me
+Ab
+WZ
+WZ
+WZ
+TO
+TO
+TO
+WZ
+WZ
+WZ
+me
+Ab
+WZ
+WZ
+WZ
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+dF
+aP
+XA
+XA
+nh
+nh
+nh
+MQ
+MQ
+MQ
+MQ
"}
(21,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
+MQ
+MQ
+MQ
nh
-Td
-Td
-Td
-Td
-gl
-CU
-Jv
-Td
-Td
-Td
-Td
-dD
-Td
-dD
-Td
-Td
-gl
-cR
-UB
-Xw
-dv
-iw
-iw
-qq
-iw
-iw
-dD
+Sj
+Eh
+Eh
+Eh
+XA
+XA
+Kz
+dF
+dF
+Eh
+Eh
+Eh
+Eh
+Eh
+TO
+on
+lJ
+RN
+wj
+WZ
+TO
+TO
+TO
+Fq
+Tp
+Mx
+CF
+WZ
+RN
+wj
+ta
+oi
+WZ
+WZ
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+lo
+dF
+aP
+XA
+nh
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+"}
+(22,1,1) = {"
+MQ
+MQ
+jt
+nh
+nh
+nh
+Eh
+Eh
+XA
+dF
+dF
+aP
+jJ
+Eh
+Eh
+Eh
+Eh
+TO
+TO
+BF
+oi
+wl
+wl
+WZ
+IL
+ta
+Wd
+Xr
+Tp
+lJ
+ii
+WZ
+wl
+wl
+yz
+Ad
+OO
+WZ
+WZ
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Ef
+aP
+XA
+nh
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+"}
+(23,1,1) = {"
+MQ
+MQ
+nh
+nh
+nh
+Eh
+Eh
+Eh
+XA
+dF
+dF
+dF
+Eh
+Eh
+Eh
+Eh
+Eh
+TO
+qh
+JJ
+Rl
+yz
+WZ
+WZ
+sS
+df
+Ii
+sB
+Td
+lJ
+SV
+WZ
+WZ
+lJ
+Ad
+nq
+Ad
+TO
+WZ
+WZ
+Eh
+Eh
+Eh
+Eh
+Eh
+gt
+lo
+XA
+Sj
+nh
+jt
+nh
+MQ
+MQ
+MQ
+"}
+(24,1,1) = {"
+MQ
+MQ
+nh
+nh
+Eh
+Eh
+Eh
+jJ
+lo
+aP
+dF
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+TO
+Qf
+Ad
+JJ
+TO
+WZ
+BA
+Wd
+Tp
+yz
+Ad
+hn
+Ii
+on
+kJ
+WZ
+oi
+on
+Ad
+yz
+TO
+TO
+WZ
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+dF
+lo
+nh
+lO
+nh
+Sj
+MQ
+MQ
+MQ
+"}
+(25,1,1) = {"
+MQ
+MQ
+nh
+LK
+Eh
+Eh
+aP
+dF
+dF
+gt
+Eh
+Eh
+Eh
+Eh
+WZ
+WZ
+WZ
+TO
+Ht
+Aw
+Ad
+TO
+WZ
+TO
+BF
+vJ
+Ad
+cA
+Ad
+yz
+Fq
+Fq
+WZ
+Aw
+Fq
+wl
+Fo
+WZ
+WZ
+WZ
+WZ
+Eh
+Eh
+Eh
+Eh
+Eh
+dF
+dF
+nh
+nh
+nh
+nh
+MQ
+MQ
+MQ
+"}
+(26,1,1) = {"
+MQ
+nh
+nh
+lO
+Lu
+dF
+dF
+aP
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+WZ
+ld
+WZ
+WZ
+WZ
+yz
+Fq
+TO
+TO
+TO
+Xr
+Ht
+Td
+pK
+on
+Ii
+Tp
+Xr
+Fq
+kW
+BZ
+kW
+CE
+WZ
+uS
+Sn
+WZ
+Eh
+Eh
+Eh
+Eh
+Eh
+aP
+dF
+LK
+nh
+aD
+nh
+MQ
+MQ
+MQ
"}
-(22,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-CU
-Fk
-Fk
-Fk
-Fk
-Fk
-Fk
-Fk
-Fk
-Lj
-Fk
-Fk
-hd
-CU
-UB
-Fk
-Fk
-Fk
-Fk
-Fk
-Fk
-KS
-Fk
-Vb
-hd
-CU
-JR
-Td
-iw
-Td
-Ux
-iw
-ru
-iw
+(27,1,1) = {"
+MQ
+aD
+nh
+nh
+dF
+lo
+dF
+Eh
+Eh
dD
-"}
-(23,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-gl
-CU
-CU
-CU
-CU
-CU
-ox
-CU
-CU
-CU
-CU
-CU
-CU
-vu
-CU
-CU
-CU
-CU
-CU
-cx
-Yh
-CU
-ee
-CU
-yJ
-vW
-Jv
-uK
dD
-iw
-zW
-ha
-Td
-WJ
-uK
-"}
-(24,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-gl
-CU
-Td
-ek
-ek
-ek
-ik
-rD
-Dk
-ek
-Eq
-ek
-ik
-CU
-Dk
-ek
-ek
-ek
-ik
-CU
-Dk
-ek
-ek
-ek
-ik
-ee
-Jv
+Eh
+Eh
+Eh
+WZ
+Fq
+ta
+kW
+td
+kZ
Td
-uK
-iw
-Sa
-iw
-iw
-NA
-dD
+TO
+TO
+TO
+TO
+Tp
+hn
+Ii
+Ht
+Tp
+yM
+BF
+Ii
+Ad
+Ad
+Ad
+TO
+WZ
+zg
+CE
+WZ
+Eh
+Eh
+Eh
+XA
+XA
+Kz
+aP
+nh
+lO
+nh
+nh
+MQ
+MQ
+MQ
"}
-(25,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-gl
-CU
-Jv
-dD
-dD
-dD
-ew
-mg
-nr
-dD
+(28,1,1) = {"
+MQ
+nh
+nh
+nh
+aP
+Kz
+Eh
+Eh
+Eh
dD
dD
-gl
-CU
-Jv
-eH
-Jk
-vN
-eH
-CU
-qG
-Jk
-vN
-eH
-gl
-CU
-Pi
-Td
-uK
-iw
-Kd
-wV
+Eh
+Eh
+WZ
+WZ
Td
-YC
-dD
+lJ
+sB
+jy
+hn
+CE
+WZ
+WZ
+TO
+TO
+TO
+Wd
+GL
+Ad
+Fq
+Xr
+Ii
+WZ
+WZ
+TO
+TO
+TO
+TO
+Aw
+nk
+WZ
+WZ
+Eh
+Eh
+XA
+XA
+lo
+Eh
+Eh
+aD
+nh
+nh
+nh
+MQ
+MQ
"}
-(26,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-rx
-CU
-Jv
-dD
-Fo
-Fo
-gl
-CU
-Jv
-lc
+(29,1,1) = {"
+MQ
+nh
+Sj
+nh
+aP
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+WZ
+CT
+Fq
+jy
+wl
+lJ
+fq
+WZ
+WZ
+WZ
+WZ
+WZ
+TO
+BF
+qi
+TO
+wS
+WZ
+WZ
+WZ
+WZ
+WZ
+TO
+TO
+Ad
+ta
+zg
Fo
-dD
-gl
-CU
-Jv
-je
-Ii
-Ua
-je
-CU
-je
-Ii
+WZ
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+nh
+nh
+nh
+jI
+jt
+MQ
+MQ
+"}
+(30,1,1) = {"
+MQ
+nh
+nh
+LK
+dF
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+WZ
+Nk
+Fq
+TO
+TO
+TO
+WZ
+WZ
+tE
+vi
+qp
+WZ
+WZ
+Ad
+Fq
+TO
+WZ
+WZ
+iK
+GB
+nX
+WZ
+WZ
+Fq
+Wd
+ta
+oi
+Fq
+WZ
+Eh
+Eh
+Eh
+Eh
+nh
+aD
+nh
+nh
+nh
+nh
+nh
+nh
+MQ
+"}
+(31,1,1) = {"
+nh
+nh
+LK
+OT
+Eh
+Eh
+Eh
+Eh
+Eh
+WZ
+WZ
+WZ
+WZ
+WZ
+WZ
+WZ
+TO
+TO
+WZ
+WZ
+WZ
+Td
+ic
+xJ
+TO
+WZ
+Ad
+Bc
+yz
+WZ
+TO
Ua
-je
-YT
-Yh
-kD
-Td
-uK
-dD
-dD
-dD
-Ux
-uK
+rp
+UF
+WZ
+WZ
+WZ
+Ad
+BF
+WZ
+WZ
+WZ
+WZ
+WZ
+WZ
+WZ
+Sj
+nh
+jI
+Sj
+nh
+nh
+Sj
+nh
+MQ
+"}
+(32,1,1) = {"
+nh
+nh
+lO
+Eh
+Eh
+Eh
+Eh
+Eh
+WZ
+WZ
+Ad
+Ad
+cD
+WZ
+yy
+TO
+TO
+Fq
+wl
+CD
+WZ
+So
+ZE
+vg
+TO
+WZ
+Ba
+vO
+Jc
+WZ
+TO
+zQ
+fY
+Hh
+WZ
+Go
+ch
+Mc
+sD
+Fq
+TO
+WZ
+TO
+TO
+zB
+WZ
+WZ
+jt
+nh
+Jk
+nh
+aD
+nh
+nh
+MQ
+"}
+(33,1,1) = {"
+jt
+Sj
+Sj
+Eh
+Eh
+Eh
+Eh
+WZ
+WZ
+yy
+Cv
+Ni
+lJ
+WZ
+ta
+Fq
+Mx
+uP
+ta
+lJ
+WZ
+WZ
+Mw
+FD
+oL
+WZ
+vg
+jY
+vg
+WZ
+vg
+Hw
+TO
+WZ
+WZ
+Ht
+kW
+nP
+iL
+Fq
+TO
+WZ
+TO
+yz
+Yf
+fx
+WZ
+WZ
+rh
+xe
dD
+nh
+nh
+nh
+Sj
+"}
+(34,1,1) = {"
+nh
+nh
+aD
+nh
+Eh
+Eh
+Eh
+WZ
+Ad
+xT
+SA
+Nk
+sJ
+Ad
+wy
+kW
+yz
+Ad
+hn
+kW
+ZK
+WZ
+TO
+vg
+dA
+vg
+vg
+dX
+gW
+Ja
+SJ
+HN
+ZX
+WZ
+qw
+wl
+qt
+mn
+lJ
+Fq
+rk
+fh
+Ad
+GT
+Ad
+on
+Rd
+ta
+tA
+WP
+Sa
+Jr
+nh
+nh
+nh
+"}
+(35,1,1) = {"
+nh
+nh
+nh
+Eh
+Eh
+ee
+Eh
+WZ
+dQ
+qO
+cv
+LJ
+ta
+NN
+ta
+Xv
+Ad
+mM
+Ad
+yt
+lJ
+WZ
+TO
+vg
+dX
+Sw
+rD
+EE
+vg
+vg
+vg
+vg
+LZ
+WZ
+Ka
+dB
+RK
+uP
+di
+zN
+Ad
+Td
+Ad
+BF
+yz
+td
+Ht
+ZV
+kt
+ha
+ha
+Sj
+nh
+nh
+nh
"}
-(27,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-gl
-CU
-Jv
-dD
-Fo
-CU
-yp
-CU
-Jv
-ss
-Fo
-dD
-gl
-CU
-Jv
-dg
-rH
-kZ
-dg
-CU
-dg
-rH
-kZ
+(36,1,1) = {"
+Sj
+nh
+Eh
+Eh
+ee
+ee
+ee
+WZ
+Wd
+Tu
+Nk
+VG
+uf
+Td
+Zk
+wl
+Td
+Ad
+yz
+wl
+gE
+WZ
+vg
+vg
+qT
+TO
+vg
+Bm
+vg
+vg
+sy
+kC
+em
+WZ
+mv
+kW
+CM
+jy
+lJ
+TO
+Ad
+TO
+Wd
+wl
+Ad
+uK
+wl
+cn
+Md
+dn
dg
-gl
-CU
-Jv
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-"}
-(28,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-gl
-CU
-vU
-kT
-xa
-Fk
-eZ
-AI
-ej
-Fk
-Fk
-kT
-hd
-LL
-UB
-eH
-Jk
-gp
-eH
-CU
-eH
-fU
-uc
-eH
-hd
-CU
-Jv
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
+KD
+nh
+nh
+nh
"}
-(29,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-vU
-gl
-CU
-CU
-mg
-CU
-xZ
-IO
-jl
-NE
-CU
-CU
-mg
-CU
-vu
-CU
-CU
+(37,1,1) = {"
+nh
+nh
+Eh
+ee
+ee
+ee
+ee
+WZ
+WZ
+Yh
+Fw
+SA
+lJ
+WZ
+ta
+Fq
+lJ
+Xv
+jy
+lJ
+WZ
+WZ
+TO
+fL
+ol
+WZ
+vg
+rM
+vg
+WZ
+sL
+vg
+vg
+WZ
+WZ
+on
+wl
+bp
+Zl
+TO
+TO
+WZ
+td
+Td
+td
+qV
+WZ
+WZ
+eJ
LL
-CU
-CU
-JZ
-CU
-dM
-dM
-CU
-CU
-CU
-Jv
-Td
-dD
-dD
-uK
-dD
-dD
-Td
dD
+nh
+Sj
+nh
+nh
"}
-(30,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-gl
-LL
-Td
-Uy
-ek
-ek
-oY
-ZL
-GD
-ek
-ek
-Uy
-ik
-CU
-Dk
-eH
-Jk
-vN
-eH
-CU
-eH
-fU
-kz
-eH
-ik
-CU
-Jv
-Td
-uK
-ln
-fe
-iw
-iw
-Td
-uK
+(38,1,1) = {"
+nh
+nh
+Eh
+Eh
+nh
+ee
+ee
+ee
+WZ
+WZ
+yz
+wM
+tL
+WZ
+Yh
+kW
+Fq
+vJ
+kW
+Gm
+WZ
+CE
+Cm
+yb
+vg
+WZ
+xs
+bY
+iB
+WZ
+Yp
+Lx
+Ot
+dS
+WZ
+Kt
+Iz
+ta
+lJ
+Fq
+TO
+WZ
+hz
+Fq
+at
+WZ
+WZ
+Eh
+Eh
+Eh
+Eh
+nh
+nh
+nh
+MQ
"}
-(31,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-gl
-CU
-Jv
-dD
-Us
-CU
-gl
-yD
-Jv
-CU
-xt
-dD
-gl
-CU
-Jv
-zY
-Ii
-Ua
-je
-CU
-je
-Ii
-Ua
-je
-uH
-CU
-UB
-Fk
-dD
-iw
-Td
-Td
-iw
-iw
+(39,1,1) = {"
+MQ
+nh
+nh
+nh
+nh
+zL
+ee
+ee
+ee
+WZ
+WZ
+WZ
+WZ
+WZ
+WZ
+WZ
uK
+Ht
+WZ
+WZ
+WZ
+on
+JJ
+vg
+vg
+WZ
+Ad
+NY
+yz
+WZ
+vg
+vg
+vg
+Hw
+WZ
+WZ
+WZ
+hn
+Ad
+WZ
+WZ
+WZ
+WZ
+WZ
+WZ
+WZ
+Eh
+Eh
+Eh
+Eh
+jt
+nh
+nh
+nh
+MQ
"}
-(32,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-qw
-gl
-CU
-Jv
-dD
-Us
-Us
-gl
-CU
-Jv
-bm
-Fo
-dD
-vH
-CU
-Jv
-dg
-rH
-kZ
-dg
-CU
-dg
-rH
-kZ
-dg
-gl
-CU
-CU
-CU
-Xw
-Td
-Td
-Td
-iw
-iw
+(40,1,1) = {"
+MQ
+nh
+jt
+nh
+nh
+nh
+ee
+ee
+ee
+Eh
+Eh
+Eh
+Eh
+WZ
+Nk
+wy
+wl
+wl
+mr
+WZ
+WZ
+Ty
+yM
+uf
+WZ
+WZ
+hn
+td
+Ad
+WZ
+WZ
+Eu
+WG
+hW
+WZ
+WZ
+vJ
+Ad
+ta
+JJ
+JJ
+WZ
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+nh
+nh
+nh
+nh
+nh
+MQ
+MQ
+"}
+(41,1,1) = {"
+MQ
+nh
+nh
+nh
+Sj
+nh
+ee
+ee
+Eh
+Eh
+Eh
+Eh
+Eh
+WZ
+CT
+Fq
+uf
+kW
+Mx
+BA
+WZ
+WZ
+WZ
+WZ
+WZ
+TO
+Wd
+ef
+BF
+TO
+WZ
+WZ
+WZ
+WZ
+WZ
+oH
+nk
+Wd
+Yh
+oi
+nk
+WZ
+Eh
+Eh
+Eh
+Eh
+Eh
+nh
+nh
+nh
+aD
+nh
+nh
+MQ
+MQ
+"}
+(42,1,1) = {"
+MQ
+MQ
+nh
+nh
+nh
+nh
+ee
+ee
+Eh
dD
-"}
-(33,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
+dD
+Eh
+Eh
+WZ
+WZ
Td
-gl
-CU
-Jv
+lJ
+wt
+ta
+TO
+TO
+WZ
+WZ
+TO
+TO
+TO
+Ad
+Jw
+Ad
+TO
+TO
+TO
+WZ
+WZ
+Fq
+nk
+Td
+yy
+nk
+oi
+WZ
+WZ
+ee
+Eh
dD
dD
+jt
+nh
+Sj
+nh
+nh
+nh
+MQ
+MQ
+MQ
+"}
+(43,1,1) = {"
+MQ
+MQ
+MQ
+nh
+nh
+nh
+ee
+ee
+ee
dD
-ew
-mg
-nr
dD
+Eh
+Eh
+Eh
+WZ
+Yf
+jy
+LC
+TO
+TO
+TO
+TO
+TO
+TO
+gH
+Xr
+zg
+Tp
+on
+Fo
+Tp
+TO
+TO
+Ad
+Ad
+Ad
+Ez
+WZ
+JJ
+mr
+WZ
+ee
+ee
+Eh
dD
dD
-gl
-CU
-Jv
-eH
-Jk
-gp
-eH
-CU
-eH
-Jk
-gp
-eH
-gl
-CU
-Dk
-ek
+nh
+nh
+nh
+jI
+nh
+nh
+MQ
+MQ
+MQ
+"}
+(44,1,1) = {"
+MQ
+MQ
+MQ
+nh
+jt
+nh
+zL
+ee
+ee
+ee
+Eh
+Eh
+Eh
+Eh
+WZ
+om
+WZ
+WZ
+WZ
+TO
+TO
+BF
+TO
+Xr
uK
+Fo
+Ht
+Ad
+Td
+Tp
+Wd
+TO
+TO
+TO
iw
-iw
-iw
-iw
-Td
-uK
+wl
+CE
+WZ
+dG
+CT
+WZ
+ee
+ee
+ee
+ee
+fB
+nh
+nh
+nh
+nh
+nh
+MQ
+MQ
+MQ
+MQ
"}
-(34,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-gl
-CU
-Td
-AY
-Fk
-Fk
-hd
-CU
-UB
-Fk
-Fk
-Fk
-hd
-CU
-UB
-Fk
-Fk
-Fk
-hd
-CU
-UB
-Fk
-Fk
-Fk
-hd
-CU
-Jv
-Td
-dD
-dD
-iw
-Td
-dD
-wt
-dD
+(45,1,1) = {"
+MQ
+MQ
+MQ
+Sj
+nh
+nh
+nh
+Eh
+ee
+ee
+ee
+Eh
+Eh
+Eh
+WZ
+WZ
+WZ
+TO
+TO
+TO
+Wd
+gH
+WZ
+Fq
+Tp
+yz
+Ad
+cA
+Ad
+Fo
+Xr
+TO
+WZ
+TO
+CE
+kW
+Aw
+WZ
+WZ
+WZ
+WZ
+ee
+ee
+ee
+Sj
+nh
+jI
+nh
+nh
+nh
+nh
+MQ
+MQ
+MQ
+MQ
"}
-(35,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-gl
-CU
-CU
-CU
-CU
-CU
-CU
-LL
-CU
-LL
-CU
-CU
-CU
-CU
-CU
-CU
-CU
-CU
-CU
-CU
-CU
-CU
-CU
-CU
-CU
-CU
-Jv
-Td
-uK
-uK
-dY
-dD
-dD
-dD
+(46,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+nh
+Eh
+Eh
+ee
+Eh
+Eh
+Eh
+Eh
+Eh
+WZ
+TO
+TO
+Zo
+Ad
+zg
+on
+WZ
+fq
uK
+JJ
+yz
+Ad
+hn
+Tp
+Fq
+LW
+WZ
+Aw
+Ht
+Ad
+hn
+TO
+TO
+WZ
+ee
+ee
+ee
+ee
+zL
+nh
+nh
+nh
+nh
+Sj
+nh
+MQ
+MQ
+MQ
+MQ
+"}
+(47,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+nh
+Eh
+Eh
+Eh
+nh
+Eh
+Eh
+Eh
+WZ
+WZ
+Td
+yz
+hn
+Ht
+Wd
+WZ
+WZ
+Ee
+ta
+yM
+Fq
+yz
+lJ
+CF
+WZ
+WZ
+lJ
+Ad
+nq
+TO
+TO
+WZ
+WZ
+ee
+Eh
+Eh
+Eh
+Eh
+nh
+nh
+jt
+nh
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+"}
+(48,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+Sj
+nh
+nh
+nh
+nh
+nh
+Eh
+Eh
+Eh
+WZ
+WZ
+Ad
+Jh
+nk
+kW
+kW
+WZ
+Uf
+ta
+BF
+Tp
+jM
+lJ
+ii
+WZ
+kW
+gz
+Td
+Ad
+TO
+TO
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+nh
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+"}
+(49,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+aD
+nh
+nh
+MQ
+MQ
+MQ
+nh
+nh
+Eh
+Eh
+Eh
+WZ
+WZ
+Td
+lJ
+me
+Ab
+WZ
+Ye
+ta
+hn
+Xn
+Ht
+lJ
+SV
+WZ
+me
+Ab
+ta
+TO
+TO
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+nh
+Eh
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(50,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+MQ
+MQ
+MQ
+nh
+nh
+jt
+Eh
+Eh
+Eh
+Eh
+WZ
+WZ
+WZ
+RN
+wj
+WZ
+WZ
+WZ
+vJ
+Fq
+Tp
+WZ
+WZ
+WZ
+RN
+wj
+WZ
+WZ
+WZ
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+nh
+nh
+nh
+nh
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
"}
-(36,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-CU
-ek
-ek
-ek
-ek
-sc
-ek
-ek
-ek
-ek
-ek
-CE
-Dk
-ek
-ek
-ek
-ek
-ek
-CE
-Dk
-ek
-ek
-ek
-ek
-ik
-CU
-Jv
-Td
-im
-Jd
-CM
-uK
-iw
-wO
-dD
+(51,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+Sj
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+WZ
+WZ
+WZ
+WZ
+TO
+Wd
+Fq
+BF
+gH
+hn
+TO
+WZ
+WZ
+WZ
+WZ
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+nh
+Sj
+nh
+aD
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
"}
-(37,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-qw
-Td
-Td
-cm
-Jv
-Td
-Td
-qw
-dD
-Td
-cm
-Jv
-Td
-Td
-Td
-Td
-gl
-CU
-Jv
-Td
-im
-CM
-CM
-dD
-iw
-CM
-uK
+(52,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+Eh
+Eh
+nh
+Eh
+Eh
+Eh
+Eh
+Eh
+WZ
+Bz
+TO
+TO
+TO
+TO
+Xr
+hn
+Xr
+TO
+TO
+TO
+Wd
+kp
+WZ
+Eh
+Eh
+Eh
+Eh
+DB
+yJ
+Eh
+Eh
+nh
+nh
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
"}
-(38,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-Td
-uK
-dD
-uK
-cm
-Jv
-dD
-uK
-dD
-uK
-uK
-ND
-Jv
-dD
+(53,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+nh
+nh
+nh
+nh
+Eh
+XA
+XA
+Eh
+Eh
+WZ
+eZ
+vR
+TO
+TO
+TO
+TO
+TO
+TO
+TO
+TO
+TO
+TO
+LP
+WZ
+Eh
+Eh
dD
-uK
-Td
-gl
-CU
-Jv
-Td
-oO
-CM
-CM
-lt
-iw
-iw
-uK
-"}
-(39,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-uK
-uK
-uK
-Td
-iw
-Td
-iw
-iw
-uK
-KR
-iw
-Td
-Ku
-ZX
-Ku
dD
-Td
-gl
-CU
-Jv
-Td
-im
-LG
-CM
-uK
-uK
-rc
-uK
+bW
+bW
+Eh
+Eh
+aD
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
"}
-(40,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-uK
-dD
-Td
-Td
-Td
-iw
-iw
-iw
-uK
-Td
-Td
-Td
-Td
-Td
-iw
-uK
-Td
-gl
-CU
-Jv
-Td
-im
-CM
-CM
-CM
+(54,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+aD
+MQ
+MQ
+MQ
+nh
+Eh
+XA
+XA
+Eh
+Eh
+WZ
+Bz
+Xr
+TO
+TO
+TO
+TO
+TO
+TO
+TO
+TO
+TO
+TO
+vo
+WZ
+Eh
+Eh
dD
-uK
dD
+yJ
+JL
+Do
+Eh
+Eh
+Eh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
"}
-(41,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-Td
-uK
-Td
-iw
-Td
-Td
-Td
-iw
-dD
-iw
-Td
-Td
-Td
-iw
-iw
-dD
-Td
-gl
-CU
-Jv
-Td
-im
-CM
-Jd
-CM
-CM
-CM
-im
+(55,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+Eh
+Eh
+rH
+rH
+Eh
+WZ
+WZ
+BF
+TO
+WZ
+WZ
+TO
+TO
+TO
+WZ
+WZ
+TO
+TO
+WZ
+WZ
+Eh
+yJ
+yJ
+yJ
+DB
+Dp
+yJ
+yJ
+Eh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
"}
-(42,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-uK
-dD
-wt
-uJ
-uJ
-uJ
-wt
-uK
-OB
-Zj
-Td
-iw
-QW
-uK
-dD
-Td
-gl
-CU
-Jv
-Td
-im
-wi
-CM
-LG
-CM
-LG
-im
+(56,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+Eh
+Eh
+Ps
+rH
+Eh
+Eh
+WZ
+rt
+TO
+WZ
+WZ
+Xh
+YK
+YK
+WZ
+WZ
+TO
+Fq
+WZ
+DB
+yJ
+bW
+yJ
+bW
+bW
+yJ
+yJ
+bW
+yJ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
"}
-(43,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-Td
-uK
-uK
-dD
-dD
-uK
-uK
-dD
-uK
-dD
-uK
-dD
-uK
-dD
-Td
-Td
-gl
-Yg
+(57,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+Sj
+nh
+nh
+Eh
+Eh
+rH
+rH
+Eh
+WZ
+WZ
+TO
+TO
+TO
+Ws
+YK
Jv
-Td
-QT
-lx
-lx
-lx
-lx
-lx
-pZ
+Ws
+Xh
+TO
+TO
+WZ
+yJ
+yJ
+yJ
+yJ
+WD
+yJ
+bW
+yJ
+bW
+DB
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
"}
-(44,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-Td
-Td
-dD
-uK
-Td
-Td
-uK
-uK
-Td
-uK
-uK
-Td
-uK
-Td
-Td
-gl
-fd
+(58,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+nh
+Eh
+Eh
+rH
+iX
+Eh
+Eh
+WZ
+TO
+CU
+sv
+Ws
+pu
+sv
+YK
+YK
+Vt
+WZ
+WZ
+Dp
+Do
+bW
+bW
+yJ
+Ay
+JL
+yJ
+yJ
+JL
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(59,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+nh
+nh
+Eh
+rH
+Uw
+Eh
+Eh
+Eh
+WZ
+WZ
+rA
+Ws
Jv
-Td
-Td
-Td
-Td
-Td
-Td
-aA
-aA
+YK
+Ws
+YK
+CU
+WZ
+WZ
+yJ
+yJ
+JL
+yJ
+DB
+yJ
+yJ
+yJ
+yJ
+QR
+yJ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
"}
-(45,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-uK
-Td
-Td
-Td
-YT
-Td
-YT
-Td
-Td
-Td
-Td
-aA
-aA
-aA
-aA
+(60,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+jt
+Sj
+nh
+nh
+rH
+rH
+Eh
+Eh
+Eh
+Eh
+WZ
+WZ
+WZ
+Vt
+YK
+rA
+WZ
+WZ
+WZ
+yJ
+bW
+yJ
+yJ
+yJ
+yJ
+yJ
+yJ
+yJ
+DB
+bW
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
"}
-(46,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-vd
-Td
-Jv
-Td
-Td
-aA
-aA
-aA
-aA
-aA
-aA
+(61,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+nh
+nh
+nh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+WZ
+WZ
+WZ
+WZ
+WZ
+yJ
+yJ
+bW
+bW
+Ay
+yJ
+bW
+bW
+yJ
+Do
+bW
+bW
+yJ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
"}
-(47,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-vd
-CU
-rk
-Td
-aA
-aA
-aA
-aA
-aA
-aA
-aA
+(62,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+nh
+nh
+nh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+DB
+yJ
+yJ
+Do
+yJ
+DB
+yJ
+yJ
+yJ
+bW
+yJ
+yJ
+Dp
+yJ
+yJ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
"}
-(48,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-vd
-CU
-rk
-Td
-aA
-aA
-aA
-aA
-aA
-aA
-aA
+(63,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+nh
+nh
+nh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+yJ
+Ay
+bW
+yJ
+yJ
+yJ
+Dp
+bW
+bW
+yJ
+JL
+yJ
+bW
+yJ
+yJ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(64,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+Sj
+nh
+Eh
+Eh
+bW
+Eh
+Eh
+Eh
+Eh
+yJ
+bW
+yJ
+yJ
+yJ
+WD
+yJ
+yJ
+yJ
+yJ
+yJ
+QR
+bW
+bW
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(65,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+aD
+nh
+nh
+Eh
+bW
+bW
+yJ
+Dp
+DB
+Do
+bW
+bW
+Ay
+bW
+JL
+yJ
+Do
+yJ
+yJ
+DB
+yJ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(66,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+nh
+Eh
+Eh
+JL
+Ay
+yJ
+WD
+JL
+yJ
+yJ
+DB
+bW
+bW
+bW
+yJ
+yJ
+yJ
+bW
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(67,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+bW
+bW
+bW
+yJ
+QR
+yJ
+bW
+DB
+yJ
+bW
+DB
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
"}
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_buried_shrine.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_buried_shrine.dmm
new file mode 100644
index 000000000000..62a6c0f3ceaa
--- /dev/null
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_buried_shrine.dmm
@@ -0,0 +1,5618 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"ad" = (
+/obj/structure/fence{
+ dir = 4
+ },
+/turf/open/floor/plating/ashplanet/ash,
+/area/overmap_encounter/planetoid/lava/explored)
+"aw" = (
+/obj/structure/stone_tile/block{
+ dir = 8
+ },
+/obj/item/melee/transforming/energy/sword/saber/red,
+/obj/effect/mob_spawn/human/corpse/nanotrasenassaultsoldier,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"aA" = (
+/turf/template_noop,
+/area/template_noop)
+"aG" = (
+/obj/item/circuitboard/computer/operating,
+/obj/item/storage/backpack/duffelbag/syndie/surgery,
+/obj/structure/closet/supplypod,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+<<<<<<< ours
+/area/overmap_encounter/planetoid/lava/explored)
+"bm" = (
+/obj/structure/stone_tile/slab,
+=======
+/area/ruin/unpowered/buried_shrine)
+"cn" = (
+/obj/structure/stone_tile/block/cracked{
+ dir = 6
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/ruin/unpowered/buried_shrine)
+"co" = (
+/obj/structure/stone_tile/surrounding/cracked,
+/obj/item/stack/ore/gold,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"cv" = (
+>>>>>>> theirs
+/obj/structure/table/wood,
+/obj/item/storage/toolbox/syndicate,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"cm" = (
+/obj/structure/stone_tile/block,
+/obj/structure/stone_tile/slab{
+ pixel_y = -16
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"cv" = (
+/obj/structure/bonfire,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"cx" = (
+/obj/structure/stone_tile/slab,
+/obj/item/ammo_casing/shotgun/buckshot,
+/obj/effect/mob_spawn/human/corpse{
+ mob_species = /datum/species/lizard/ashwalker
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"cA" = (
+/obj/structure/stone_tile/block{
+ dir = 4
+ },
+/obj/structure/stone_tile/block{
+ dir = 8
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"cR" = (
+/obj/structure/stone_tile/slab,
+/obj/item/ammo_casing/shotgun/buckshot,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"dg" = (
+/obj/structure/stone_tile/block{
+ pixel_x = -16
+ },
+/obj/structure/stone_tile{
+ dir = 8
+ },
+/obj/structure/stone_tile{
+ dir = 4
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"dn" = (
+/obj/structure/stone_tile/block{
+ dir = 8
+ },
+/obj/structure/stone_tile/block{
+ dir = 4
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"dv" = (
+/obj/item/ammo_casing/shotgun/buckshot,
+/turf/open/floor/wood,
+/area/overmap_encounter/planetoid/lava/explored)
+"dD" = (
+/turf/closed/indestructible/riveted/boss,
+/area/overmap_encounter/planetoid/lava/explored)
+"dM" = (
+/obj/structure/stone_tile/slab,
+/turf/open/lava/smooth/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"dY" = (
+/obj/structure/fence/door{
+ dir = 4
+ },
+/turf/open/floor/wood,
+/area/overmap_encounter/planetoid/lava/explored)
+"ee" = (
+/obj/structure/stone_tile/slab/burnt,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"ej" = (
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 4
+ },
+/obj/structure/stone_tile/center/cracked,
+/obj/structure/stone_tile/surrounding_tile,
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 1
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"ek" = (
+/obj/structure/stone_tile/block{
+ dir = 8
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"eq" = (
+/obj/item/storage/bag/plants/portaseeder,
+/turf/open/floor/wood,
+/area/overmap_encounter/planetoid/lava/explored)
+"ew" = (
+/obj/structure/stone_tile/block,
+/obj/structure/mineral_door/sandstone,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"eH" = (
+/obj/structure/stone_tile/center,
+/obj/structure/stone_tile/surrounding_tile,
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 8
+ },
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 4
+ },
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 1
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"eZ" = (
+<<<<<<< ours
+/obj/structure/stone_tile/surrounding_tile/cracked,
+/obj/structure/stone_tile/center,
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 1
+=======
+/obj/structure/table/wood,
+/obj/item/clothing/head/hooded/cloakhood/bone,
+/obj/structure/stone_tile/slab,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"ff" = (
+/obj/structure/stone_tile/block{
+ dir = 4
+ },
+/obj/item/stack/ore/gold,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"fh" = (
+/obj/item/clothing/suit/armor/curator,
+/obj/item/clothing/head/fedora/curator{
+ pixel_y = 16
+ },
+/obj/effect/decal/remains/human{
+ pixel_y = 8
+>>>>>>> theirs
+ },
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 8
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"fd" = (
+/obj/structure/stone_tile/slab/cracked{
+ dir = 10
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"fe" = (
+/obj/structure/closet/crate/radiation,
+/obj/item/flashlight/lantern,
+/obj/item/flashlight/lantern,
+/obj/item/flashlight/lantern,
+/obj/item/flashlight/flare,
+/turf/open/floor/wood,
+/area/overmap_encounter/planetoid/lava/explored)
+"fU" = (
+/obj/structure/stone_tile/block{
+ dir = 4;
+ pixel_y = -16
+ },
+/obj/structure/stone_tile,
+/obj/structure/stone_tile{
+ dir = 8
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"fV" = (
+/turf/open/floor/wood{
+ icon_state = "wood-broken4"
+ },
+/area/overmap_encounter/planetoid/lava/explored)
+"gl" = (
+/obj/structure/stone_tile/block,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"gp" = (
+/obj/structure/stone_tile{
+ dir = 1
+ },
+/obj/structure/stone_tile/block{
+ dir = 8;
+ pixel_y = 16
+ },
+/obj/structure/stone_tile{
+ dir = 4
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"gM" = (
+/obj/item/stack/cable_coil/red,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"ha" = (
+/obj/structure/stone_tile/slab/cracked{
+ dir = 6
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"hd" = (
+/obj/structure/stone_tile,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"hk" = (
+/obj/structure/rack,
+/obj/item/stack/sheet/mineral/wood{
+ amount = 18
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"ie" = (
+/obj/structure/table/wood,
+/obj/item/seeds/cannabis,
+/turf/open/floor/wood,
+/area/overmap_encounter/planetoid/lava/explored)
+"ik" = (
+/obj/structure/stone_tile{
+ dir = 8
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"il" = (
+/obj/structure/table/wood,
+/obj/item/spear/bonespear,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"im" = (
+/obj/structure/fence{
+ dir = 8
+ },
+/turf/open/floor/plating/ashplanet/ash,
+/area/overmap_encounter/planetoid/lava/explored)
+"iw" = (
+/turf/open/floor/wood,
+/area/overmap_encounter/planetoid/lava/explored)
+"je" = (
+/obj/structure/stone_tile/block{
+ dir = 1;
+ pixel_x = 16
+ },
+/obj/structure/stone_tile,
+/obj/structure/stone_tile{
+ dir = 1
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"jl" = (
+/turf/open/lava/smooth/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"ke" = (
+/obj/machinery/hydroponics/soil,
+/turf/open/floor/plating/ashplanet/ash,
+/area/overmap_encounter/planetoid/lava/explored)
+"kz" = (
+/obj/structure/stone_tile/block{
+ dir = 8;
+ pixel_y = 16
+ },
+/obj/structure/stone_tile{
+ dir = 1
+ },
+/obj/structure/stone_tile{
+ dir = 4
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"kD" = (
+/obj/structure/stone_tile/block{
+ dir = 1
+ },
+/obj/item/ammo_casing/shotgun/buckshot,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"kT" = (
+/obj/structure/stone_tile/block{
+ dir = 4
+ },
+/obj/structure/mineral_door/sandstone,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"kV" = (
+/turf/open/floor/wood{
+ icon_state = "wood-broken2"
+ },
+/area/overmap_encounter/planetoid/lava/explored)
+"kZ" = (
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 4
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"lc" = (
+/obj/structure/stone_tile/slab,
+/obj/structure/table/wood,
+/obj/item/instrument/trombone,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"lh" = (
+/obj/structure/table/wood,
+/obj/item/storage/firstaid/fire,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"ln" = (
+/obj/machinery/the_singularitygen,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"lt" = (
+/mob/living/simple_animal/hostile/asteroid/gutlunch,
+/turf/open/floor/wood,
+/area/overmap_encounter/planetoid/lava/explored)
+"lx" = (
+/obj/structure/fence,
+/turf/open/floor/plating/ashplanet/ash,
+/area/overmap_encounter/planetoid/lava/explored)
+"lO" = (
+/obj/structure/stone_tile/slab{
+ pixel_y = -16
+ },
+/obj/structure/stone_tile/block,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"mg" = (
+/obj/structure/stone_tile/slab,
+/obj/structure/mineral_door/sandstone,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"nh" = (
+/obj/effect/mob_spawn/human/corpse{
+ mob_species = /datum/species/lizard/ashwalker
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"nr" = (
+/obj/structure/stone_tile/block{
+ dir = 1
+ },
+/obj/structure/mineral_door/sandstone,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"ny" = (
+/obj/structure/stone_tile/block{
+ dir = 1
+ },
+/obj/structure/stone_tile/block,
+/obj/structure/chair/wood/wings{
+ dir = 4
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"ox" = (
+/obj/structure/stone_tile/slab,
+/obj/effect/gibspawner/human,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"oF" = (
+/obj/structure/stone_tile/block,
+/obj/structure/stone_tile/block{
+ dir = 1
+ },
+/obj/structure/chair/wood/wings,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"oO" = (
+/obj/structure/fence/door,
+/turf/open/floor/plating/ashplanet/ash,
+/area/overmap_encounter/planetoid/lava/explored)
+"oY" = (
+/obj/structure/stone_tile/surrounding_tile/cracked,
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 4
+ },
+/obj/structure/stone_tile/center,
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 8
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"px" = (
+/obj/item/seeds/potato,
+/turf/open/floor/plating/ashplanet/ash,
+/area/overmap_encounter/planetoid/lava/explored)
+"pJ" = (
+/mob/living/simple_animal/hostile/nanotrasen/ranged/smg,
+/turf/open/floor/wood,
+/area/overmap_encounter/planetoid/lava/explored)
+"pT" = (
+/obj/structure/table/wood,
+/obj/item/seeds/ambrosia,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"pZ" = (
+/obj/structure/fence/corner{
+ dir = 6
+ },
+/turf/open/floor/plating/ashplanet/ash,
+/area/overmap_encounter/planetoid/lava/explored)
+"qq" = (
+/obj/structure/stone_tile/slab/cracked{
+ dir = 5
+ },
+/obj/structure/bonfire,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"qw" = (
+/obj/effect/gibspawner/human,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"qy" = (
+/obj/structure/stone_tile/slab/burnt,
+/obj/item/ammo_casing/shotgun/buckshot,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"qG" = (
+/obj/structure/stone_tile/surrounding,
+/obj/structure/stone_tile/center,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"rc" = (
+/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck,
+/turf/open/floor/wood,
+/area/overmap_encounter/planetoid/lava/explored)
+"rk" = (
+/obj/structure/stone_tile/block{
+ dir = 1
+ },
+/obj/structure/stone_tile/block,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"rm" = (
+/obj/structure/stone_tile/slab,
+/obj/structure/chair/wood/wings{
+ dir = 4
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"rp" = (
+/obj/structure/rack,
+/turf/open/floor/wood,
+/area/overmap_encounter/planetoid/lava/explored)
+"ru" = (
+/turf/open/floor/wood{
+ icon_state = "wood-broken5"
+ },
+/area/overmap_encounter/planetoid/lava/explored)
+"rx" = (
+/obj/structure/stone_tile/block,
+/obj/effect/mob_spawn/human/corpse{
+ mob_species = /datum/species/lizard/ashwalker
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+<<<<<<< ours
+/area/overmap_encounter/planetoid/lava/explored)
+"rD" = (
+/obj/structure/stone_tile/slab,
+/obj/effect/mob_spawn/human/corpse{
+ mob_species = /datum/species/lizard/ashwalker
+ },
+/obj/item/spear/bonespear,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"rH" = (
+=======
+/area/ruin/unpowered/buried_shrine)
+"nz" = (
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 5
+ },
+/obj/item/stack/ore/gold,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"nP" = (
+>>>>>>> theirs
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 8
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"rJ" = (
+/obj/structure/stone_tile/slab,
+/obj/item/paper{
+ desc = "A hastily written note, written in the Lizard language.";
+ default_raw_text = "To all brethren who may read this, we are sorry. We failed to defend the Necropolis, and those from the sky destroyed our home. I write this in my last dying breath, to warn you to not make our mistakes. Don't let them fool you with their actions, all of those who come from the sky are not your friends. They wish to loot and pillage your villages. Please do not make our same mistakes."
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"sc" = (
+/obj/structure/stone_tile/block{
+ dir = 8
+ },
+/obj/effect/mob_spawn/human/corpse{
+ mob_species = /datum/species/lizard/ashwalker
+ },
+/obj/item/spear/bonespear,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"ss" = (
+/obj/structure/stone_tile/slab,
+/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"sM" = (
+/obj/item/seeds/tower,
+/turf/open/floor/plating/ashplanet/ash,
+/area/overmap_encounter/planetoid/lava/explored)
+"tR" = (
+/obj/structure/table/wood,
+/obj/item/seeds/cotton/durathread,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"uc" = (
+/obj/structure/stone_tile{
+ dir = 1
+ },
+/obj/structure/stone_tile/block{
+ dir = 8;
+ pixel_y = 16
+ },
+/obj/structure/stone_tile{
+ dir = 4
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"uH" = (
+/obj/structure/stone_tile/block,
+/obj/effect/gibspawner/human,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"uJ" = (
+/obj/structure/bed,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"uK" = (
+/turf/closed/wall/mineral/wood/nonmetal,
+/area/overmap_encounter/planetoid/lava/explored)
+"vd" = (
+/obj/structure/stone_tile/block,
+/obj/structure/stone_tile/block{
+ dir = 1
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"vm" = (
+/obj/structure/stone_tile/block{
+ dir = 4
+ },
+/obj/structure/stone_tile{
+ dir = 8
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"vu" = (
+/obj/structure/stone_tile/surrounding,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"vH" = (
+/obj/structure/stone_tile/block,
+/obj/effect/mob_spawn/human/corpse{
+ mob_species = /datum/species/lizard/ashwalker
+ },
+/obj/item/spear/bonespear,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"vN" = (
+/obj/structure/stone_tile/block{
+ dir = 8;
+ pixel_y = 16
+ },
+/obj/structure/stone_tile{
+ dir = 1
+ },
+/obj/structure/stone_tile{
+ dir = 4
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"vU" = (
+/obj/effect/mob_spawn/human/corpse{
+ mob_species = /datum/species/lizard/ashwalker
+ },
+/obj/item/spear/bonespear,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"vW" = (
+/obj/structure/stone_tile/center,
+/obj/structure/stone_tile/surrounding/burnt,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"wi" = (
+/mob/living/simple_animal/hostile/asteroid/gutlunch,
+/turf/open/floor/plating/ashplanet/ash,
+/area/overmap_encounter/planetoid/lava/explored)
+"wt" = (
+/obj/structure/bed,
+/turf/open/floor/wood,
+/area/overmap_encounter/planetoid/lava/explored)
+"wz" = (
+/obj/structure/stone_tile{
+ dir = 4
+ },
+/obj/structure/stone_tile/block,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"wO" = (
+/mob/living/simple_animal/hostile/asteroid/gutlunch/guthen,
+/turf/open/floor/wood,
+/area/overmap_encounter/planetoid/lava/explored)
+"wV" = (
+/obj/structure/table/wood,
+/turf/open/floor/wood,
+/area/overmap_encounter/planetoid/lava/explored)
+"xa" = (
+/obj/structure/stone_tile/block{
+ dir = 4
+ },
+/obj/effect/gibspawner/human,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"xt" = (
+/obj/structure/stone_tile/slab,
+/obj/structure/table/wood,
+/obj/item/weldingtool/experimental,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"xT" = (
+/obj/structure/stone_tile/slab,
+/obj/structure/stone_tile/slab,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"xZ" = (
+/obj/structure/stone_tile/slab,
+/mob/living/simple_animal/hostile/asteroid/gutlunch/guthen,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"yp" = (
+/obj/structure/stone_tile/block,
+/mob/living/simple_animal/hostile/asteroid/gutlunch,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"yD" = (
+/obj/structure/stone_tile/slab,
+/mob/living/simple_animal/hostile/asteroid/gutlunch/grublunch,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"yJ" = (
+/obj/structure/stone_tile/slab,
+/mob/living/simple_animal/hostile/nanotrasen/ranged/assault,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"zG" = (
+/obj/structure/table/wood,
+/obj/structure/stone_tile/slab,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"zJ" = (
+/obj/structure/sink/puddle,
+/turf/open/floor/plating/ashplanet/ash,
+/area/overmap_encounter/planetoid/lava/explored)
+"zW" = (
+/obj/item/ammo_casing/shotgun/buckshot,
+/turf/open/floor/wood{
+ icon_state = "wood-broken6"
+ },
+/area/overmap_encounter/planetoid/lava/explored)
+"zY" = (
+/obj/structure/stone_tile/block{
+ dir = 1;
+ pixel_x = 16
+ },
+/obj/structure/stone_tile,
+/obj/structure/stone_tile{
+ dir = 1
+ },
+<<<<<<< ours
+/obj/effect/mob_spawn/human/corpse{
+ mob_species = /datum/species/lizard/ashwalker
+=======
+/obj/item/stack/sheet/bone,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/ruin/unpowered/buried_shrine)
+"rA" = (
+/obj/structure/flora/ash/cacti,
+/turf/open/floor/plating/moss,
+/area/ruin/unpowered/buried_shrine)
+"rD" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_x = 9
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"rH" = (
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/overmap_encounter/planetoid/cave/explored)
+"rM" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_y = -6
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"rP" = (
+/obj/structure/flora/ash/leaf_shroom,
+/turf/open/floor/plating/moss,
+/area/overmap_encounter/planetoid/lava/explored)
+"su" = (
+/obj/item/stack/ore/gold,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"sv" = (
+/obj/structure/flora/ash/tall_shroom,
+/turf/open/floor/plating/moss,
+/area/ruin/unpowered/buried_shrine)
+"sy" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_x = 6;
+ pixel_y = -8
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"sB" = (
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 5
+>>>>>>> theirs
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"An" = (
+/obj/structure/fence/corner{
+ dir = 8
+ },
+/turf/open/floor/plating/ashplanet/ash,
+/area/overmap_encounter/planetoid/lava/explored)
+"At" = (
+/obj/structure/table/wood,
+/obj/item/seeds/garlic,
+/turf/open/floor/wood,
+/area/overmap_encounter/planetoid/lava/explored)
+"AG" = (
+/obj/item/seeds/peas,
+/turf/open/floor/plating/ashplanet/ash,
+/area/overmap_encounter/planetoid/lava/explored)
+"AI" = (
+/obj/structure/stone_tile/block/cracked{
+ dir = 4
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"AY" = (
+/obj/structure/stone_tile/block{
+ dir = 4
+ },
+/obj/effect/mob_spawn/human/corpse{
+ mob_species = /datum/species/lizard/ashwalker
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"Bv" = (
+/obj/item/seeds/glowshroom/glowcap,
+/turf/open/floor/plating/ashplanet/ash,
+/area/overmap_encounter/planetoid/lava/explored)
+"BF" = (
+/obj/machinery/hydroponics/soil,
+/obj/item/seeds/tower,
+/turf/open/floor/plating/ashplanet/ash,
+/area/overmap_encounter/planetoid/lava/explored)
+"Cr" = (
+/obj/structure/fence/door{
+ dir = 4
+ },
+/turf/open/floor/plating/ashplanet/ash,
+/area/overmap_encounter/planetoid/lava/explored)
+"CE" = (
+/obj/structure/stone_tile{
+ dir = 8
+ },
+<<<<<<< ours
+/obj/structure/stone_tile/slab{
+ pixel_y = -16
+ },
+=======
+>>>>>>> theirs
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"CM" = (
+/turf/open/floor/plating/ashplanet/ash,
+/area/overmap_encounter/planetoid/lava/explored)
+"CP" = (
+/obj/machinery/smartfridge/drying_rack,
+/turf/open/floor/wood,
+/area/overmap_encounter/planetoid/lava/explored)
+"CT" = (
+/obj/structure/stone_tile/slab,
+/obj/structure/table/wood,
+/obj/item/reagent_containers/food/snacks/soup/blood,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"CU" = (
+/obj/structure/stone_tile/slab,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"Dk" = (
+/obj/structure/stone_tile{
+ dir = 4
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"DF" = (
+/obj/item/clothing/head/welding,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+<<<<<<< ours
+/area/overmap_encounter/planetoid/lava/explored)
+"Eh" = (
+/obj/structure/stone_tile/slab,
+/obj/structure/table/wood,
+/obj/item/reagent_containers/glass/bowl/mushroom_bowl,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"Eq" = (
+/obj/structure/stone_tile/block{
+=======
+/area/ruin/unpowered/buried_shrine)
+"uN" = (
+/obj/structure/stone_tile{
+ dir = 4
+ },
+/obj/item/stack/ore/gold,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"uP" = (
+/obj/structure/stone_tile/surrounding/cracked{
+>>>>>>> theirs
+ dir = 8
+ },
+/obj/effect/mob_spawn/human/corpse{
+ mob_species = /datum/species/lizard/ashwalker
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"Ez" = (
+/obj/structure/stone_tile/slab,
+/obj/structure/table/wood,
+/obj/item/reagent_containers/glass/bowl/mushroom_bowl,
+/obj/item/reagent_containers/food/snacks/soup/wish,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"Fk" = (
+/obj/structure/stone_tile/block{
+ dir = 4
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"Fo" = (
+/obj/structure/stone_tile/slab,
+/obj/structure/table/wood,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"FS" = (
+/obj/structure/table/wood,
+/obj/item/seeds/ambrosia,
+/turf/open/floor/wood,
+/area/overmap_encounter/planetoid/lava/explored)
+"Gr" = (
+/obj/item/ammo_casing/shotgun/buckshot,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"GD" = (
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 8
+ },
+/obj/structure/stone_tile/center,
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 1
+ },
+<<<<<<< ours
+=======
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"wj" = (
+>>>>>>> theirs
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 4
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"HL" = (
+/obj/effect/mob_spawn/human/corpse{
+ mob_species = /datum/species/lizard/ashwalker
+ },
+/turf/open/floor/wood,
+/area/overmap_encounter/planetoid/lava/explored)
+"HP" = (
+/obj/structure/mineral_door/sandstone,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"Ii" = (
+/obj/structure/stone_tile/surrounding_tile,
+/obj/structure/stone_tile/surrounding_tile{
+ pixel_x = 17;
+ pixel_y = -17
+ },
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 1;
+ pixel_x = 17;
+ pixel_y = -17
+ },
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 4;
+ pixel_x = 17;
+ pixel_y = -17
+ },
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 8;
+ pixel_x = 17;
+ pixel_y = -17
+ },
+/obj/structure/stone_tile/center{
+ pixel_x = 17;
+ pixel_y = -17
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"IF" = (
+/obj/structure/stone_tile/block{
+ dir = 1
+ },
+/obj/item/kinetic_crusher,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"IO" = (
+/obj/structure/stone_tile/block/cracked,
+/turf/open/lava/smooth/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"Jd" = (
+/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck,
+/turf/open/floor/plating/ashplanet/ash,
+/area/overmap_encounter/planetoid/lava/explored)
+"Jk" = (
+/obj/structure/stone_tile/block{
+ dir = 4;
+ pixel_y = -16
+ },
+/obj/structure/stone_tile,
+/obj/structure/stone_tile{
+ dir = 8
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"Jv" = (
+/obj/structure/stone_tile/block{
+ dir = 1
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"JA" = (
+/turf/open/floor/wood{
+ icon_state = "wood-broken3"
+ },
+<<<<<<< ours
+/area/overmap_encounter/planetoid/lava/explored)
+"JL" = (
+/obj/structure/table/wood,
+/obj/item/seeds/cotton,
+/turf/open/floor/wood,
+/area/overmap_encounter/planetoid/lava/explored)
+"JM" = (
+/obj/structure/table/wood,
+/obj/item/seeds/cabbage,
+/turf/open/floor/wood,
+/area/overmap_encounter/planetoid/lava/explored)
+"JR" = (
+=======
+/obj/structure/stone_tile/center,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"yv" = (
+/obj/structure/stone_tile/surrounding,
+/obj/item/stack/ore/gold,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"yy" = (
+/obj/structure/stone_tile/block,
+>>>>>>> theirs
+/obj/structure/stone_tile{
+ dir = 4
+ },
+/obj/effect/mob_spawn/human/corpse{
+ mob_species = /datum/species/lizard/ashwalker
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"JV" = (
+/obj/structure/table/wood,
+/obj/item/seeds/cherry,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"JZ" = (
+/obj/structure/stone_tile/slab,
+/obj/structure/fluff/drake_statue,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"Kd" = (
+/obj/structure/stone_tile/slab/cracked{
+ dir = 1
+ },
+/obj/structure/table/wood,
+/obj/item/stack/sheet/mineral/wood/fifty,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+<<<<<<< ours
+"Ku" = (
+/obj/structure/table/wood,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"KR" = (
+/obj/item/storage/firstaid/regular,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"KS" = (
+=======
+"zM" = (
+/obj/structure/stone_tile/cracked{
+ dir = 4
+ },
+/obj/item/stack/ore/gold,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"zN" = (
+>>>>>>> theirs
+/obj/structure/stone_tile/block{
+ dir = 4
+ },
+/obj/item/ammo_casing/shotgun/buckshot,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"Lj" = (
+/obj/structure/stone_tile/block{
+ dir = 4
+ },
+/obj/effect/mob_spawn/human/corpse{
+ mob_species = /datum/species/lizard/ashwalker
+ },
+/obj/item/spear/bonespear,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"LG" = (
+/mob/living/simple_animal/hostile/asteroid/gutlunch/guthen,
+/turf/open/floor/plating/ashplanet/ash,
+/area/overmap_encounter/planetoid/lava/explored)
+"LL" = (
+/obj/structure/stone_tile/slab,
+/obj/effect/mob_spawn/human/corpse{
+ mob_species = /datum/species/lizard/ashwalker
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"LS" = (
+/obj/item/seeds/plump,
+/turf/open/floor/plating/ashplanet/ash,
+/area/overmap_encounter/planetoid/lava/explored)
+"MX" = (
+/obj/structure/stone_tile/slab/cracked{
+ dir = 10
+ },
+/obj/item/ammo_casing/shotgun/buckshot,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"Nf" = (
+/obj/structure/stone_tile/block{
+ dir = 1
+ },
+/obj/structure/stone_tile/block,
+/obj/structure/chair/wood/wings{
+ dir = 1
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+<<<<<<< ours
+"Np" = (
+/obj/item/seeds/wheat,
+/turf/open/floor/plating/ashplanet/ash,
+/area/overmap_encounter/planetoid/lava/explored)
+"Nt" = (
+/obj/structure/bonfire,
+/turf/open/floor/wood,
+/area/overmap_encounter/planetoid/lava/explored)
+"NA" = (
+/obj/structure/table/wood,
+/obj/item/clothing/head/welding,
+/turf/open/floor/wood,
+/area/overmap_encounter/planetoid/lava/explored)
+"ND" = (
+/obj/structure/stone_tile/block,
+/obj/structure/stone_tile/slab{
+ pixel_y = -16
+=======
+"AY" = (
+/obj/structure/stone_tile/block{
+ dir = 1
+ },
+/obj/item/stack/ore/gold,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Ba" = (
+/obj/structure/stone_tile/block/burnt{
+ dir = 4
+>>>>>>> theirs
+ },
+/obj/structure/mineral_door/sandstone,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"NE" = (
+/obj/structure/stone_tile/block{
+ dir = 1
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"OB" = (
+/obj/structure/table/optable,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"Pi" = (
+/obj/structure/stone_tile/block/cracked{
+ dir = 1
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"Qv" = (
+/obj/structure/sink/puddle,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"QT" = (
+/obj/structure/fence/corner{
+ dir = 5
+ },
+/turf/open/floor/plating/ashplanet/ash,
+/area/overmap_encounter/planetoid/lava/explored)
+"QW" = (
+/obj/structure/closet/crate/medical,
+/obj/item/storage/firstaid/regular,
+/obj/item/reagent_containers/blood/random,
+/obj/item/reagent_containers/blood/lizard,
+/obj/item/reagent_containers/blood/lizard,
+/obj/item/stack/sheet/cotton/cloth/ten,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"Sa" = (
+/obj/structure/stone_tile/slab/cracked{
+ dir = 4
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"SJ" = (
+/obj/effect/mob_spawn/human/corpse{
+ mob_species = /datum/species/lizard/ashwalker
+ },
+/obj/structure/stone_tile/block{
+ dir = 8
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"SO" = (
+/obj/structure/closet/crate,
+/obj/item/flashlight/lantern,
+/obj/item/flashlight/lantern,
+/obj/item/flashlight/lantern,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"Td" = (
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"Ty" = (
+/obj/structure/stone_tile/slab/cracked,
+/mob/living/simple_animal/hostile/nanotrasen/ranged,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"TX" = (
+/obj/structure/stone_tile{
+ dir = 8
+ },
+/obj/structure/stone_tile/block{
+ dir = 1
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"Ua" = (
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 1
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"Us" = (
+/obj/structure/stone_tile/slab,
+/obj/structure/table/wood,
+/obj/item/spear/bonespear,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"Ux" = (
+/turf/open/floor/wood{
+ icon_state = "wood-broken6"
+ },
+/area/overmap_encounter/planetoid/lava/explored)
+"Uy" = (
+/obj/structure/stone_tile/block{
+ dir = 8
+ },
+/obj/structure/mineral_door/sandstone,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"UB" = (
+/obj/structure/stone_tile{
+ dir = 1
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"UF" = (
+/obj/structure/table/wood,
+/obj/item/spear/bonespear,
+/turf/open/floor/wood,
+/area/overmap_encounter/planetoid/lava/explored)
+"Vb" = (
+/obj/structure/stone_tile/block{
+ dir = 4
+ },
+/obj/item/clothing/head/welding,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"VT" = (
+/obj/structure/stone_tile/block{
+ dir = 4
+ },
+/obj/structure/stone_tile{
+ dir = 4
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"WJ" = (
+/obj/structure/table/wood,
+/obj/item/melee/transforming/energy/sword/saber/red,
+/turf/open/floor/wood,
+/area/overmap_encounter/planetoid/lava/explored)
+"WM" = (
+/obj/item/storage/firstaid/tactical,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"Xe" = (
+/obj/machinery/hydroponics/soil,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"Xw" = (
+/obj/structure/mineral_door/sandstone,
+/turf/open/floor/wood,
+/area/overmap_encounter/planetoid/lava/explored)
+"Yg" = (
+/obj/structure/stone_tile/slab/cracked{
+ dir = 5
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+<<<<<<< ours
+/area/overmap_encounter/planetoid/lava/explored)
+"Yh" = (
+=======
+/area/ruin/unpowered/buried_shrine)
+"EE" = (
+/obj/structure/stone_tile/center/burnt,
+/obj/structure/stone_tile/surrounding/burnt,
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Fo" = (
+/obj/structure/stone_tile/cracked{
+ dir = 4
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Fq" = (
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Fw" = (
+/obj/structure/stone_tile/slab/cracked{
+ dir = 1
+ },
+/obj/structure/chair/wood/wings,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"FC" = (
+/obj/item/reagent_containers/food/snacks/grown/apple{
+ pixel_y = 16
+ },
+/turf/open/floor/plating/grass/lava,
+/area/ruin/unpowered/buried_shrine)
+"FD" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_x = 1
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Gm" = (
+/obj/structure/stone_tile{
+ dir = 8
+ },
+/obj/structure/stone_tile{
+ dir = 1
+ },
+/obj/structure/stone_tile/block/cracked{
+ dir = 9
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Go" = (
+/obj/structure/stone_tile/surrounding_tile/cracked,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"GB" = (
+/obj/structure/stone_tile/block{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/ash{
+ pixel_x = -8
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"GL" = (
+/obj/structure/stone_tile/block{
+ dir = 1
+ },
+/obj/structure/stone_tile/block/cracked,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"GT" = (
+/obj/structure/stone_tile/block/cracked{
+ dir = 8
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Hg" = (
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 4
+ },
+/obj/item/stack/ore/gold,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Hh" = (
+/obj/structure/stone_tile/surrounding_tile,
+/obj/effect/decal/cleanable/blood/old,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Ht" = (
+/obj/structure/stone_tile/surrounding/cracked,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Hv" = (
+/obj/structure/flora/tree/dead/hell,
+/turf/open/floor/plating/grass/lava,
+/area/ruin/unpowered/buried_shrine)
+"Hw" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_y = 6
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"HN" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_x = -3
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Ii" = (
+/obj/structure/stone_tile/cracked{
+ dir = 1
+ },
+/obj/structure/stone_tile{
+ dir = 4
+ },
+/obj/structure/stone_tile,
+/obj/structure/stone_tile/cracked{
+ dir = 8
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/ruin/unpowered/buried_shrine)
+"Iz" = (
+/obj/structure/destructible/tribal_torch{
+ pixel_y = 14
+ },
+/obj/structure/stone_tile/surrounding/cracked,
+/obj/structure/stone_tile/center,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"IL" = (
+>>>>>>> theirs
+/obj/structure/stone_tile/slab/cracked,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"YC" = (
+/obj/structure/table/wood,
+/obj/item/storage/firstaid/ancient,
+/turf/open/floor/wood,
+/area/overmap_encounter/planetoid/lava/explored)
+<<<<<<< ours
+"YI" = (
+/obj/structure/table/wood,
+/obj/item/stack/sheet/mineral/wood/fifty,
+/turf/open/floor/wood,
+/area/overmap_encounter/planetoid/lava/explored)
+"YT" = (
+/obj/structure/stone_tile/block/cracked,
+=======
+"Jv" = (
+/mob/living/simple_animal/hostile/asteroid/goliath/pup{
+ pixel_x = 0
+ },
+/obj/structure/flora/ausbushes/sparsegrass/hell,
+/turf/open/floor/plating/moss,
+/area/ruin/unpowered/buried_shrine)
+"Jw" = (
+/obj/structure/stone_tile/block,
+/obj/structure/stone_tile/block{
+ dir = 1
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"JE" = (
+/obj/structure/stone_tile/slab/cracked{
+ dir = 1
+ },
+/obj/item/stack/ore/gold,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"JJ" = (
+/obj/structure/stone_tile{
+ dir = 8
+ },
+>>>>>>> theirs
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"Zc" = (
+/obj/structure/stone_tile/block{
+ dir = 1
+ },
+/obj/structure/stone_tile/block,
+/obj/structure/chair/wood/wings,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"Zj" = (
+/obj/machinery/iv_drip,
+/obj/item/reagent_containers/food/drinks/waterbottle/large,
+/turf/open/floor/wood,
+/area/overmap_encounter/planetoid/lava/explored)
+"ZL" = (
+/obj/structure/stone_tile/block{
+ dir = 8
+ },
+/obj/effect/gibspawner/human,
+/turf/open/lava/smooth/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"ZX" = (
+/obj/structure/table/wood,
+/obj/item/storage/box/rxglasses,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+<<<<<<< ours
+=======
+/area/ruin/unpowered/buried_shrine)
+"Uf" = (
+/obj/structure/chair/pew,
+/obj/structure/stone_tile/slab,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Uw" = (
+/obj/structure/flora/ausbushes/sparsegrass/hell,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/overmap_encounter/planetoid/cave/explored)
+"UB" = (
+/obj/structure/flora/ausbushes/genericbush/hell,
+/obj/item/reagent_containers/food/snacks/grown/apple{
+ pixel_x = -10;
+ pixel_y = -6
+ },
+/turf/open/floor/plating/grass/lava,
+/area/ruin/unpowered/buried_shrine)
+"UF" = (
+/obj/structure/stone_tile/block,
+/obj/item/claymore/bone{
+ pixel_x = 8;
+ pixel_y = 21
+ },
+/obj/item/shield/riot/goliath{
+ pixel_x = -12;
+ pixel_y = 16
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+<<<<<<< ours
+"Vt" = (
+/obj/structure/flora/ash/leaf_shroom,
+/turf/open/floor/plating/moss,
+=======
+"MJ" = (
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 8
+ },
+/obj/item/stack/ore/gold,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"MQ" = (
+/turf/template_noop,
+/area/template_noop)
+"Ni" = (
+/obj/structure/table/wood,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Nk" = (
+/obj/structure/table_frame/wood,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"NK" = (
+/obj/structure/flora/ash/cacti,
+/turf/open/floor/plating/grass/lava,
+/area/ruin/unpowered/buried_shrine)
+"NN" = (
+/obj/structure/stone_tile/center,
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 5
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+>>>>>>> theirs
+/area/ruin/unpowered/buried_shrine)
+"VG" = (
+/obj/structure/table/wood,
+/obj/item/kitchen/knife/combat/bone,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+<<<<<<< ours
+"Wd" = (
+=======
+"Ok" = (
+/obj/structure/stone_tile{
+ dir = 8
+ },
+/obj/item/stack/ore/gold,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Ot" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_y = 8;
+ pixel_x = -1
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"OO" = (
+>>>>>>> theirs
+/obj/structure/stone_tile/slab/cracked{
+ dir = 5
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Ws" = (
+/turf/open/floor/plating/moss,
+/area/ruin/unpowered/buried_shrine)
+"WD" = (
+/obj/structure/flora/tree/dead/barren,
+/turf/open/floor/plating/grass/lava/orange,
+/area/overmap_encounter/planetoid/lava/explored)
+"WG" = (
+/obj/structure/stone_tile/slab/burnt,
+/obj/item/gem/amber,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"WP" = (
+/obj/structure/stone_tile/block/cracked{
+ dir = 1
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+>>>>>>> theirs
+/area/overmap_encounter/planetoid/lava/explored)
+
+(1,1,1) = {"
+<<<<<<< ours
+Td
+Td
+Td
+Td
+Td
+Td
+Td
+Td
+Td
+Td
+Td
+Td
+Td
+Td
+Td
+dD
+uK
+dD
+uK
+Td
+dD
+uK
+dD
+Td
+Td
+Td
+Td
+gl
+Td
+Td
+Td
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+=======
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+nh
+nh
+nh
+nh
+nh
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(2,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+nh
+MQ
+MQ
+MQ
+nh
+jt
+Eh
+Eh
+lO
+LK
+aD
+nh
+LK
+Sj
+nh
+nh
+jt
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(3,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+jt
+nh
+nh
+nh
+nh
+nh
+nh
+nh
+Eh
+Eh
+gt
+dF
+jJ
+nh
+nh
+nh
+nh
+LK
+nh
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(4,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+nh
+aD
+nh
+nh
+nh
+nh
+aD
+nh
+nh
+Eh
+dF
+lo
+dF
+dF
+aP
+dF
+LK
+nh
+aD
+nh
+Sj
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(5,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+lO
+nh
+nh
+lO
+Eh
+Eh
+nh
+nh
+Eh
+Eh
+Eh
+Eh
+dF
+aP
+dF
+dF
+jJ
+dF
+lO
+LK
+lO
+nh
+nh
+MQ
+MQ
+nh
+nh
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(6,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+nh
+aD
+nh
+nh
+LK
+nh
+nh
+Eh
+nh
+Sj
+nh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Kz
+dF
+dF
+Eh
+Eh
+Eh
+Eh
+nh
+nh
+nh
+nh
+nh
+nh
+aD
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(7,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+Eh
+Eh
+nh
+Sj
+nh
+nh
+LK
+rP
+LK
+Eh
+Eh
+nh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+lo
+dF
+jJ
+Eh
+Eh
+Eh
+Eh
+aD
+nh
+Sj
+nh
+Eh
+nh
+Sj
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(8,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+jt
+nh
+Eh
+nh
+nh
+nh
+nh
+Eh
+dF
+aP
+aP
+dF
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+dF
+dF
+dF
+Eh
+Eh
+Eh
+Eh
+Eh
+nh
+Eh
+Eh
+Eh
+nh
+nh
+jt
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(9,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+Eh
+Eh
+jt
+nh
+Eh
+Eh
+lo
+dF
+Kz
+dF
+Eh
+Eh
+Eh
+WZ
+<<<<<<< ours
+=======
+BA
+Wd
+Tp
+yz
+Ad
+JE
+Ii
+on
+kJ
+>>>>>>> theirs
+WZ
+WZ
+WZ
+WZ
+Eh
+Eh
+gt
+aP
+dF
+Ef
+Eh
+Eh
+Eh
+Eh
+nh
+Eh
+Eh
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(10,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+Sj
+nh
+Eh
+Eh
+Eh
+Eh
+dF
+dF
+dF
+aP
+Eh
+Eh
+WZ
+WZ
+WZ
+<<<<<<< ours
+vg
+vg
+vg
+=======
+TO
+Ht
+Aw
+Ad
+TO
+WZ
+TO
+BF
+vJ
+Ad
+cA
+Ad
+yz
+Fq
+Fq
+WZ
+Aw
+Fq
+ff
+Fo
+WZ
+>>>>>>> theirs
+WZ
+WZ
+WZ
+Eh
+Eh
+lo
+aP
+Kz
+Eh
+Eh
+Eh
+Eh
+Eh
+nh
+aD
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(11,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+nh
+Eh
+Eh
+Eh
+jJ
+aP
+aP
+dF
+Eh
+Eh
+WZ
+WZ
+vg
+vg
+vg
+yF
+hp
+Qb
+TO
+WZ
+WZ
+Eh
+jJ
+dF
+lo
+Eh
+Eh
+Eh
+Eh
+Eh
+nh
+nh
+nh
+nh
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(12,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+aD
+Eh
+Eh
+XA
+Ef
+dF
+lo
+dF
+Eh
+Eh
+WZ
+WZ
+TO
+hp
+eI
+be
+jo
+Mt
+TO
+TO
+<<<<<<< ours
+=======
+Tp
+hn
+Ii
+Ht
+Tp
+Hg
+BF
+Ii
+Ad
+Ad
+Ad
+>>>>>>> theirs
+TO
+WZ
+WZ
+Eh
+dF
+dF
+dF
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+jt
+nh
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(13,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+nh
+Eh
+XA
+XA
+dF
+dF
+aP
+gt
+Eh
+Eh
+WZ
+<<<<<<< ours
+=======
+WZ
+Td
+lJ
+nz
+jy
+hn
+CE
+WZ
+WZ
+TO
+TO
+TO
+Wd
+GL
+Ad
+Fq
+Xr
+Ii
+WZ
+WZ
+TO
+TO
+>>>>>>> theirs
+TO
+Qb
+Mt
+eI
+Hv
+FC
+Qb
+hp
+NK
+TO
+vg
+WZ
+Eh
+Eh
+aP
+lo
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Sj
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(14,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+Sj
+nh
+nh
+Eh
+XA
+lo
+aP
+dF
+dF
+Eh
+Eh
+Eh
+WZ
+TO
+NK
+WZ
+WZ
+UB
+Qb
+yF
+WZ
+WZ
+Td
+vg
+WZ
+Eh
+Eh
+dF
+gt
+dF
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+nh
+aD
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(15,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+nh
+nh
+nh
+nh
+nh
+Sj
+dF
+dF
+dF
+Kz
+dF
+Eh
+Eh
+WZ
+WZ
+TO
+TO
+WZ
+WZ
+TO
+TO
+hp
+WZ
+WZ
+cN
+vg
+WZ
+WZ
+Eh
+Eh
+dF
+aP
+Eh
+Eh
+Eh
+Eh
+XA
+XA
+Eh
+Eh
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(16,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+Eh
+Eh
+jt
+nh
+Eh
+Eh
+Eh
+jJ
+lo
+dF
+XA
+XA
+Eh
+Eh
+WZ
+vg
+TO
+TO
+TO
+TO
+TO
+TO
+Qb
+TO
+TO
+hn
+vg
+vg
+WZ
+Eh
+Eh
+XA
+XA
+Eh
+Eh
+Eh
+Eh
+Eh
+XA
+XA
+Eh
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(17,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+Eh
+Eh
+Eh
+Eh
+Eh
+XA
+dF
+dF
+aP
+XA
+XA
+Eh
+Eh
+WZ
+vg
+on
+Fq
+Ht
+TO
+TO
+TO
+TO
+TO
+Wd
+Fq
+cN
+vg
+WZ
+Eh
+Eh
+XA
+XA
+Eh
+Eh
+<<<<<<< ours
+=======
+WZ
+WZ
+yy
+Cv
+Ni
+lJ
+WZ
+ta
+su
+Mx
+uP
+ta
+AY
+WZ
+WZ
+Mw
+FD
+oL
+WZ
+vg
+jY
+vg
+WZ
+vg
+Hw
+TO
+WZ
+WZ
+Ht
+kW
+nP
+iL
+Fq
+TO
+WZ
+TO
+yz
+Yf
+fx
+WZ
+WZ
+rh
+xe
+dD
+nh
+nh
+nh
+Sj
+"}
+(34,1,1) = {"
+nh
+nh
+aD
+nh
+>>>>>>> theirs
+Eh
+Eh
+Eh
+gt
+XA
+nh
+nh
+nh
+jt
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(18,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+Eh
+Eh
+XA
+XA
+XA
+dF
+Lu
+dF
+Eh
+Eh
+Eh
+Eh
+WZ
+vg
+hn
+cN
+Fq
+yz
+TO
+TO
+TO
+TO
+TO
+TO
+TO
+vg
+WZ
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+aP
+XA
+XA
+nh
+Sj
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(19,1,1) = {"
+MQ
+MQ
+MQ
+nh
+nh
+nh
+nh
+jt
+Eh
+XA
+XA
+aP
+dF
+dF
+dF
+Eh
+Eh
+Eh
+Eh
+Eh
+WZ
+WZ
+WZ
+WZ
+Td
+TO
+TO
+TO
+TO
+TO
+TO
+WZ
+WZ
+WZ
+WZ
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+lo
+jJ
+XA
+aD
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+>>>>>>> theirs
+"}
+(2,1,1) = {"
+Td
+An
+lx
+lx
+lx
+lx
+lx
+lx
+dD
+uK
+Td
+dD
+Td
+Td
+uK
+dD
+pT
+wV
+CP
+Td
+wV
+ie
+dD
+uK
+Td
+Td
+Td
+Td
+CU
+Td
+Td
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+Td
+Td
+Td
+Td
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+"}
+(3,1,1) = {"
+Td
+ad
+px
+Np
+CM
+LS
+CM
+sM
+Td
+iw
+iw
+uK
+uK
+Td
+dD
+Td
+Td
+iw
+iw
+iw
+iw
+iw
+iw
+dD
+Td
+Td
+Td
+gl
+Td
+Jv
+Td
+Td
+Td
+Td
+Td
+Td
+Td
+Td
+Gr
+gl
+ee
+Td
+Td
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+"}
+(4,1,1) = {"
+Td
+ad
+CM
+BF
+ke
+ke
+ke
+CM
+oO
+iw
+iw
+iw
+dD
+Td
+Td
+Td
+iw
+Td
+Td
+iw
+JL
+JV
+wV
+dD
+Td
+Td
+Td
+gl
+CU
+Jv
+Td
+Td
+Td
+uK
+dD
+uK
+Td
+uK
+dD
+YT
+CU
+Jv
+Td
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+"}
+(5,1,1) = {"
+Td
+ad
+CM
+ke
+ke
+BF
+ke
+Bv
+dD
+iw
+iw
+iw
+Td
+Td
+dD
+Td
+wV
+tR
+Td
+Td
+JM
+wV
+wV
+Td
+Td
+Td
+Td
+gl
+CU
+Td
+Td
+Td
+dD
+dD
+iw
+iw
+Td
+pJ
+dD
+gl
+Yh
+Jv
+Td
+Gr
+Td
+aA
+aA
+aA
+aA
+aA
+"}
+(6,1,1) = {"
+Td
+ad
+Np
+AG
+sM
+CM
+sM
+zJ
+dD
+eq
+iw
+wt
+uK
+Td
+uK
+iw
+iw
+At
+iw
+Td
+iw
+iw
+iw
+dD
+Td
+Td
+Td
+gl
+CU
+Jv
+Td
+Td
+Td
+Td
+iw
+HL
+iw
+Td
+uK
+YT
+CU
+Pi
+Td
+Td
+Td
+Td
+Td
+dD
+dD
+Td
+"}
+(7,1,1) = {"
+Td
+QT
+lx
+lx
+Cr
+lx
+lx
+lx
+uK
+dD
+iw
+uK
+dD
+Td
+dD
+hk
+rp
+Ku
+iw
+Td
+wV
+Ku
+FS
+uK
+Td
+Td
+Td
+gl
+CU
+Jv
+Td
+Td
+dD
+iw
+Td
+Td
+Td
+Td
+dD
+gl
+cR
+Jv
+Td
+dD
+dD
+dD
+uK
+dD
+uK
+dD
+"}
+(8,1,1) = {"
+Td
+Td
+Td
+Td
+Td
+Td
+Td
+Td
+Td
+Jv
+CU
+gl
+Td
+Td
+dD
+Td
+uK
+dD
+HP
+HP
+dD
+uK
+Td
+dD
+Td
+Td
+Td
+gl
+CU
+Jv
+Td
+Td
+uK
+UF
+iw
+iw
+cv
+iw
+Xw
+Td
+ee
+<<<<<<< ours
+Jv
+gM
+uK
+Td
+uK
+Td
+uK
+Td
+dD
+"}
+(9,1,1) = {"
+Td
+Td
+Td
+cA
+cA
+cA
+cA
+Fk
+Fk
+Fk
+CU
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+VT
+CU
+CU
+vm
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+hd
+CU
+Jv
+Td
+Td
+dD
+il
+iw
+Td
+iw
+HL
+uK
+gl
+CU
+UB
+Fk
+Fk
+AY
+eZ
+AI
+ej
+Td
+uK
+=======
+WZ
+WZ
+WZ
+WZ
+WZ
+WZ
+WZ
+MJ
+Ht
+WZ
+WZ
+WZ
+on
+JJ
+vg
+vg
+WZ
+Ad
+NY
+yz
+WZ
+vg
+vg
+vg
+Hw
+WZ
+WZ
+WZ
+hn
+Ad
+WZ
+WZ
+WZ
+WZ
+WZ
+WZ
+WZ
+Eh
+Eh
+Eh
+Eh
+jt
+nh
+nh
+nh
+MQ
+"}
+(40,1,1) = {"
+MQ
+nh
+jt
+nh
+nh
+nh
+ee
+ee
+ee
+Eh
+Eh
+Eh
+Eh
+WZ
+Nk
+wy
+wl
+wl
+mr
+WZ
+WZ
+Ty
+yM
+uf
+WZ
+WZ
+hn
+td
+Ad
+WZ
+WZ
+Eu
+WG
+hW
+WZ
+WZ
+vJ
+Ad
+ta
+Ok
+JJ
+WZ
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+nh
+nh
+nh
+nh
+nh
+MQ
+MQ
+>>>>>>> theirs
+"}
+(10,1,1) = {"
+Td
+Td
+CU
+CU
+CU
+CU
+CU
+CU
+CU
+CU
+CU
+CU
+CU
+CU
+lO
+Jv
+CU
+lO
+Jv
+CU
+lO
+Jv
+lO
+Jv
+lO
+Jv
+lO
+Jv
+CU
+Jv
+Td
+Td
+dD
+dD
+iw
+iw
+iw
+iw
+dD
+gl
+ee
+<<<<<<< ours
+CU
+CU
+Ty
+rJ
+IO
+jl
+NE
+WM
+Td
+=======
+Eh
+Eh
+Eh
+Eh
+Eh
+WZ
+CT
+Fq
+uf
+kW
+Mx
+BA
+WZ
+WZ
+WZ
+WZ
+WZ
+TO
+Wd
+ef
+BF
+TO
+WZ
+WZ
+WZ
+WZ
+WZ
+oH
+uN
+Wd
+Yh
+oi
+nk
+WZ
+Eh
+Eh
+Eh
+Eh
+Eh
+nh
+nh
+nh
+aD
+nh
+nh
+MQ
+MQ
+>>>>>>> theirs
+"}
+(11,1,1) = {"
+Td
+CU
+CU
+CU
+CU
+CU
+CU
+CU
+CU
+CU
+CU
+CU
+CU
+CU
+lO
+Jv
+CU
+lO
+Jv
+CU
+lO
+Jv
+lO
+Jv
+lO
+Jv
+lO
+Jv
+CU
+Jv
+Td
+Td
+Td
+dD
+iw
+iw
+SO
+dD
+uK
+gl
+Yh
+Dk
+SJ
+ek
+aw
+oY
+ZL
+GD
+Td
+uK
+"}
+(12,1,1) = {"
+Td
+Td
+ek
+ek
+dn
+dn
+dn
+ek
+ek
+ek
+ek
+ek
+ek
+ek
+ek
+ek
+ek
+ek
+TX
+CU
+wz
+ek
+ek
+ek
+ek
+ek
+ek
+ik
+CU
+Jv
+Td
+Td
+Td
+dD
+Td
+uK
+uK
+dD
+Xe
+YT
+qy
+Jv
+Td
+cv
+uK
+Td
+Td
+nh
+dD
+dD
+"}
+(13,1,1) = {"
+aA
+Td
+Td
+Td
+Td
+Td
+Td
+Td
+Td
+Td
+Td
+Td
+Td
+Td
+Td
+Td
+Td
+dD
+vd
+CU
+rk
+dD
+<<<<<<< ours
+Td
+wV
+wV
+Xw
+=======
+Eh
+Eh
+Eh
+WZ
+Yf
+jy
+LC
+TO
+TO
+TO
+TO
+TO
+TO
+gH
+Xr
+zg
+Tp
+on
+zM
+Tp
+TO
+TO
+Ad
+Ad
+Ad
+Ez
+WZ
+JJ
+mr
+WZ
+ee
+ee
+Eh
+>>>>>>> theirs
+dD
+gl
+CU
+Jv
+Td
+Td
+Td
+Td
+Td
+Td
+Td
+Td
+Xe
+gl
+CU
+Jv
+Td
+Td
+Td
+dD
+uK
+uK
+Td
+uK
+"}
+<<<<<<< ours
+(14,1,1) = {"
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+Td
+uK
+oF
+CT
+Nf
+dD
+iw
+iw
+iw
+Td
+uK
+uH
+CU
+Jv
+Td
+Td
+Td
+Td
+Td
+Td
+Td
+Td
+Xe
+gl
+CU
+kD
+DF
+Xe
+Qv
+Td
+uK
+dD
+cv
+Td
+=======
+(45,1,1) = {"
+MQ
+MQ
+MQ
+Sj
+nh
+nh
+nh
+Eh
+ee
+ee
+ee
+Eh
+Eh
+Eh
+WZ
+WZ
+WZ
+TO
+TO
+TO
+Wd
+gH
+WZ
+su
+Tp
+yz
+Ad
+yv
+Ad
+Fo
+Xr
+TO
+WZ
+TO
+CE
+kW
+Aw
+WZ
+WZ
+WZ
+WZ
+ee
+ee
+ee
+Sj
+nh
+jI
+nh
+nh
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+>>>>>>> theirs
+"}
+(15,1,1) = {"
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+Td
+uK
+oF
+Eh
+Nf
+wV
+Td
+iw
+iw
+iw
+dD
+gl
+CU
+Jv
+Td
+Td
+Td
+Td
+dD
+dD
+uK
+Qv
+Td
+gl
+CU
+Pi
+qw
+Xe
+uK
+dD
+Ux
+dD
+uK
+Td
+"}
+(16,1,1) = {"
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+Td
+<<<<<<< ours
+Td
+vd
+CU
+Zc
+wV
+iw
+iw
+iw
+iw
+uK
+gl
+CU
+Jv
+Td
+uK
+dD
+wV
+Td
+YI
+uK
+dD
+Td
+YT
+=======
+yz
+hn
+co
+Wd
+WZ
+WZ
+Ee
+ta
+yM
+Fq
+yz
+lJ
+CF
+WZ
+WZ
+lJ
+Ad
+nq
+TO
+TO
+WZ
+WZ
+>>>>>>> theirs
+ee
+IF
+Td
+dD
+uK
+iw
+iw
+iw
+uK
+uK
+"}
+(17,1,1) = {"
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+Td
+dD
+oF
+Ez
+Nf
+wV
+iw
+iw
+iw
+iw
+dD
+gl
+CU
+Jv
+Td
+Xw
+JA
+iw
+Td
+Td
+iw
+HP
+Gr
+rx
+CU
+Pi
+Td
+aG
+Yh
+iw
+MX
+iw
+iw
+uK
+"}
+(18,1,1) = {"
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+Td
+uK
+vd
+rm
+ny
+Xw
+iw
+iw
+iw
+Td
+Td
+gl
+CU
+Jv
+Td
+dD
+SO
+nh
+Nt
+Td
+lh
+dD
+Td
+gl
+Yh
+kD
+Td
+dD
+Yg
+Ux
+iw
+JA
+iw
+Ux
+"}
+(19,1,1) = {"
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+Td
+dD
+dD
+zG
+zG
+dD
+iw
+Td
+wt
+dD
+Td
+gl
+xT
+Jv
+Td
+iw
+SO
+iw
+fV
+iw
+iw
+uK
+Td
+gl
+CU
+Pi
+Td
+uK
+ha
+iw
+Td
+HL
+ha
+uK
+"}
+(20,1,1) = {"
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+Td
+Td
+uK
+Td
+dD
+uK
+Td
+dD
+dD
+uK
+Td
+gl
+CU
+Jv
+Td
+dD
+uK
+dD
+uJ
+iw
+dD
+uK
+qw
+gl
+ee
+Jv
+uK
+uK
+iw
+kV
+iw
+iw
+Yh
+uK
+"}
+(21,1,1) = {"
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+Td
+Td
+Td
+Td
+Td
+Td
+Td
+Td
+nh
+Td
+Td
+Td
+Td
+gl
+CU
+Jv
+Td
+Td
+Td
+Td
+dD
+Td
+dD
+Td
+Td
+gl
+cR
+UB
+Xw
+dv
+iw
+iw
+qq
+iw
+iw
+dD
+"}
+(22,1,1) = {"
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+Td
+CU
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+Lj
+Fk
+Fk
+hd
+CU
+UB
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+KS
+Fk
+Vb
+hd
+CU
+JR
+Td
+iw
+Td
+Ux
+iw
+ru
+iw
+dD
+"}
+(23,1,1) = {"
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+Td
+gl
+CU
+CU
+CU
+CU
+CU
+ox
+CU
+CU
+CU
+CU
+CU
+CU
+vu
+CU
+CU
+CU
+CU
+CU
+cx
+Yh
+CU
+ee
+CU
+yJ
+vW
+Jv
+uK
+dD
+iw
+zW
+ha
+Td
+WJ
+uK
+"}
+(24,1,1) = {"
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+Td
+gl
+CU
+Td
+ek
+ek
+ek
+ik
+rD
+Dk
+ek
+Eq
+ek
+ik
+CU
+Dk
+ek
+ek
+ek
+ik
+CU
+Dk
+ek
+ek
+ek
+ik
+ee
+Jv
+Td
+uK
+iw
+Sa
+iw
+iw
+NA
+dD
+"}
+(25,1,1) = {"
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+Td
+gl
+CU
+Jv
+dD
+dD
+dD
+ew
+mg
+nr
+dD
+dD
+dD
+gl
+CU
+Jv
+eH
+Jk
+vN
+eH
+CU
+qG
+Jk
+vN
+eH
+gl
+CU
+Pi
+Td
+uK
+iw
+Kd
+wV
+Td
+YC
+dD
+"}
+(26,1,1) = {"
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+Td
+rx
+CU
+Jv
+dD
+Fo
+Fo
+gl
+CU
+Jv
+lc
+Fo
+dD
+gl
+CU
+Jv
+je
+Ii
+Ua
+je
+CU
+je
+Ii
+Ua
+je
+YT
+Yh
+kD
+Td
+uK
+dD
+dD
+dD
+Ux
+uK
+dD
+"}
+(27,1,1) = {"
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+Td
+gl
+CU
+Jv
+dD
+Fo
+CU
+yp
+CU
+Jv
+ss
+Fo
+dD
+gl
+CU
+Jv
+dg
+rH
+kZ
+dg
+CU
+dg
+rH
+kZ
+dg
+gl
+CU
+Jv
+Td
+Td
+Td
+Td
+Td
+Td
+Td
+Td
+"}
+(28,1,1) = {"
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+Td
+gl
+CU
+vU
+kT
+xa
+Fk
+eZ
+AI
+ej
+Fk
+Fk
+kT
+hd
+LL
+UB
+eH
+Jk
+gp
+eH
+CU
+eH
+fU
+uc
+eH
+hd
+CU
+Jv
+Td
+Td
+Td
+Td
+Td
+Td
+Td
+Td
+"}
+(29,1,1) = {"
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+vU
+gl
+CU
+CU
+mg
+CU
+xZ
+IO
+jl
+NE
+CU
+CU
+mg
+CU
+vu
+CU
+CU
+LL
+CU
+CU
+JZ
+CU
+dM
+dM
+CU
+CU
+CU
+Jv
+Td
+dD
+dD
+uK
+dD
+dD
+Td
+dD
+"}
+(30,1,1) = {"
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+Td
+gl
+LL
+Td
+Uy
+ek
+ek
+oY
+ZL
+GD
+ek
+ek
+Uy
+ik
+CU
+Dk
+eH
+Jk
+vN
+eH
+CU
+eH
+fU
+kz
+eH
+ik
+CU
+Jv
+Td
+uK
+ln
+fe
+iw
+iw
+Td
+uK
+"}
+(31,1,1) = {"
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+Td
+gl
+CU
+Jv
+dD
+Us
+CU
+gl
+yD
+Jv
+CU
+xt
+dD
+gl
+CU
+Jv
+zY
+Ii
+Ua
+je
+CU
+je
+Ii
+Ua
+je
+uH
+CU
+UB
+Fk
+dD
+iw
+Td
+Td
+iw
+iw
+uK
+"}
+(32,1,1) = {"
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+qw
+gl
+CU
+Jv
+dD
+Us
+Us
+gl
+CU
+Jv
+bm
+Fo
+dD
+vH
+CU
+Jv
+dg
+rH
+kZ
+dg
+CU
+dg
+rH
+kZ
+dg
+gl
+CU
+CU
+CU
+Xw
+Td
+Td
+Td
+iw
+iw
+dD
+"}
+(33,1,1) = {"
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+Td
+gl
+CU
+Jv
+dD
+dD
+dD
+ew
+mg
+nr
+dD
+dD
+dD
+gl
+CU
+Jv
+eH
+Jk
+gp
+eH
+CU
+eH
+Jk
+gp
+eH
+gl
+CU
+Dk
+ek
+uK
+iw
+iw
+iw
+iw
+Td
+uK
+"}
+(34,1,1) = {"
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+Td
+gl
+CU
+Td
+AY
+Fk
+Fk
+hd
+CU
+UB
+Fk
+Fk
+Fk
+hd
+CU
+UB
+Fk
+Fk
+Fk
+hd
+CU
+UB
+Fk
+Fk
+Fk
+hd
+CU
+Jv
+Td
+dD
+dD
+iw
+Td
+dD
+wt
+dD
+"}
+(35,1,1) = {"
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+Td
+gl
+CU
+CU
+CU
+CU
+CU
+CU
+LL
+CU
+LL
+CU
+CU
+CU
+CU
+CU
+CU
+CU
+CU
+CU
+CU
+CU
+CU
+CU
+CU
+CU
+CU
+Jv
+Td
+uK
+uK
+dY
+dD
+dD
+dD
+uK
+"}
+(36,1,1) = {"
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+Td
+CU
+ek
+ek
+ek
+ek
+sc
+ek
+ek
+ek
+ek
+ek
+CE
+Dk
+ek
+ek
+ek
+ek
+ek
+CE
+Dk
+ek
+ek
+ek
+ek
+ik
+CU
+Jv
+Td
+im
+Jd
+CM
+uK
+iw
+wO
+dD
+"}
+(37,1,1) = {"
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+Td
+Td
+Td
+Td
+Td
+Td
+Td
+Td
+Td
+qw
+Td
+Td
+cm
+Jv
+Td
+Td
+qw
+dD
+Td
+cm
+Jv
+Td
+Td
+Td
+Td
+gl
+CU
+Jv
+Td
+im
+CM
+CM
+dD
+iw
+CM
+uK
+"}
+(38,1,1) = {"
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+Td
+Td
+uK
+dD
+uK
+cm
+Jv
+dD
+uK
+dD
+uK
+uK
+ND
+Jv
+dD
+dD
+uK
+Td
+gl
+CU
+Jv
+Td
+oO
+CM
+CM
+lt
+iw
+iw
+uK
+"}
+(39,1,1) = {"
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+Td
+uK
+uK
+uK
+Td
+iw
+Td
+iw
+iw
+uK
+KR
+iw
+Td
+Ku
+ZX
+Ku
+dD
+Td
+gl
+CU
+Jv
+Td
+im
+LG
+CM
+uK
+uK
+rc
+uK
+"}
+(40,1,1) = {"
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+Td
+uK
+dD
+Td
+Td
+Td
+iw
+iw
+iw
+uK
+Td
+Td
+Td
+Td
+Td
+iw
+uK
+Td
+gl
+CU
+Jv
+Td
+im
+CM
+CM
+CM
+dD
+uK
+dD
+"}
+(41,1,1) = {"
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+Td
+Td
+uK
+Td
+iw
+Td
+Td
+Td
+iw
+dD
+iw
+Td
+Td
+Td
+iw
+iw
+dD
+Td
+gl
+CU
+Jv
+Td
+im
+CM
+Jd
+CM
+CM
+CM
+im
+"}
+(42,1,1) = {"
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+Td
+uK
+dD
+wt
+uJ
+uJ
+uJ
+wt
+uK
+OB
+Zj
+Td
+iw
+QW
+uK
+dD
+Td
+gl
+CU
+Jv
+Td
+im
+wi
+CM
+LG
+CM
+LG
+im
+"}
+(43,1,1) = {"
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+Td
+Td
+uK
+uK
+dD
+dD
+uK
+uK
+dD
+uK
+dD
+uK
+dD
+uK
+dD
+Td
+Td
+gl
+Yg
+Jv
+Td
+QT
+lx
+lx
+lx
+lx
+lx
+pZ
+"}
+(44,1,1) = {"
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+Td
+Td
+Td
+dD
+uK
+Td
+Td
+uK
+uK
+Td
+uK
+uK
+Td
+uK
+Td
+Td
+gl
+fd
+Jv
+Td
+Td
+Td
+Td
+Td
+Td
+aA
+aA
+"}
+(45,1,1) = {"
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+Td
+Td
+Td
+Td
+Td
+Td
+Td
+Td
+Td
+Td
+Td
+uK
+Td
+Td
+Td
+YT
+Td
+YT
+Td
+Td
+Td
+Td
+aA
+aA
+aA
+aA
+"}
+(46,1,1) = {"
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+Td
+vd
+Td
+Jv
+Td
+Td
+aA
+aA
+aA
+aA
+aA
+aA
+"}
+(47,1,1) = {"
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+Td
+vd
+CU
+rk
+Td
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+"}
+(48,1,1) = {"
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+Td
+vd
+CU
+rk
+Td
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+"}
diff --git a/_maps/RandomRuins/SpaceRuins/crashedship.dmm b/_maps/RandomRuins/SpaceRuins/crashedship.dmm
index 9a154053c0bf..358b08790095 100644
--- a/_maps/RandomRuins/SpaceRuins/crashedship.dmm
+++ b/_maps/RandomRuins/SpaceRuins/crashedship.dmm
@@ -2232,7 +2232,7 @@
/turf/closed/mineral/diamond,
/area/awaymission/BMPship)
"hw" = (
-/turf/closed/mineral/bananium,
+/turf/closed/mineral/bscrystal,
/area/awaymission/BMPship)
"hE" = (
/turf/closed/wall/mineral/titanium/nodiagonal,
diff --git a/_maps/RandomRuins/WasteRuins/wasteplanet_clowncrash.dmm b/_maps/RandomRuins/WasteRuins/wasteplanet_clowncrash.dmm
index ae2434a3ca45..11c0ecc1a2ff 100644
--- a/_maps/RandomRuins/WasteRuins/wasteplanet_clowncrash.dmm
+++ b/_maps/RandomRuins/WasteRuins/wasteplanet_clowncrash.dmm
@@ -96,7 +96,7 @@
/area/overmap_encounter/planetoid/cave/explored)
"r" = (
/obj/structure/table/reinforced,
-/obj/item/stack/ore/bananium,
+/obj/item/stack/ore/hellstone,
/turf/open/floor/plating/asteroid,
/area/overmap_encounter/planetoid/cave/explored)
"s" = (
diff --git a/_maps/RandomRuins/WasteRuins/wasteplanet_fortress_of_solitide.dmm b/_maps/RandomRuins/WasteRuins/wasteplanet_fortress_of_solitide.dmm
index 73735c65542b..227bbf0c0338 100644
--- a/_maps/RandomRuins/WasteRuins/wasteplanet_fortress_of_solitide.dmm
+++ b/_maps/RandomRuins/WasteRuins/wasteplanet_fortress_of_solitide.dmm
@@ -342,7 +342,7 @@
"cX" = (
/obj/structure/statue/bananium/clown,
/obj/effect/decal/cleanable/cobweb/cobweb2,
-/turf/open/floor/mineral/bananium,
+/turf/open/floor/mineral/gold,
/area/ruin/powered)
"dg" = (
/obj/structure/sign/poster/contraband/eat,
@@ -430,7 +430,7 @@
/area/ruin/powered)
"ed" = (
/obj/item/trash/cheesie,
-/turf/open/floor/mineral/bananium,
+/turf/open/floor/mineral/gold,
/area/ruin/powered)
"ee" = (
/obj/machinery/photocopier,
@@ -578,12 +578,8 @@
/turf/open/floor/plating/rust,
/area/ruin/powered)
"fk" = (
-/obj/machinery/door/airlock/bananium{
- name = "Clown Embassy";
- dir = 4
- },
/obj/item/grown/bananapeel,
-/turf/open/floor/mineral/bananium,
+/turf/open/floor/mineral/gold,
/area/ruin/powered)
"fn" = (
/obj/effect/gibspawner/human,
@@ -695,7 +691,7 @@
/area/ruin/powered)
"go" = (
/obj/machinery/light/small/directional/west,
-/turf/open/floor/mineral/bananium,
+/turf/open/floor/mineral/gold,
/area/ruin/powered)
"gp" = (
/mob/living/simple_animal/hostile/rat,
@@ -735,7 +731,7 @@
/turf/open/floor/plating,
/area/ruin/powered)
"gL" = (
-/turf/open/floor/mineral/bananium,
+/turf/open/floor/mineral/gold,
/area/ruin/powered)
"gM" = (
/obj/structure/rack,
@@ -762,7 +758,7 @@
/area/ruin/powered)
"hd" = (
/obj/item/reagent_containers/food/snacks/cakeslice/clown_slice,
-/turf/open/floor/mineral/bananium,
+/turf/open/floor/mineral/gold,
/area/ruin/powered)
"he" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
@@ -1123,7 +1119,7 @@
/obj/effect/decal/cleanable/blood,
/obj/effect/mob_spawn/human/clown/corpse,
/obj/effect/decal/cleanable/dirt/dust,
-/turf/open/floor/mineral/bananium,
+/turf/open/floor/mineral/gold,
/area/ruin/powered)
"kO" = (
/obj/item/trash/chips,
@@ -1133,7 +1129,7 @@
/obj/effect/decal/cleanable/dirt/dust,
/obj/effect/decal/cleanable/dirt/dust,
/obj/effect/decal/cleanable/dirt/dust,
-/turf/open/floor/mineral/bananium,
+/turf/open/floor/mineral/gold,
/area/ruin/powered)
"kS" = (
/obj/effect/decal/cleanable/blood,
@@ -1507,7 +1503,7 @@
/obj/item/pneumatic_cannon/pie,
/obj/item/reagent_containers/spray/waterflower/lube,
/obj/machinery/light/small/directional/east,
-/turf/open/floor/mineral/bananium,
+/turf/open/floor/mineral/gold,
/area/ruin/powered)
"nK" = (
/obj/structure/table,
@@ -2375,7 +2371,7 @@
/obj/effect/decal/cleanable/blood,
/obj/effect/mob_spawn/human/clown/corpse,
/obj/effect/decal/cleanable/dirt/dust,
-/turf/open/floor/mineral/bananium,
+/turf/open/floor/mineral/gold,
/area/ruin/powered)
"vX" = (
/obj/item/ammo_casing,
@@ -2773,7 +2769,7 @@
/obj/effect/decal/cleanable/dirt/dust,
/obj/effect/decal/cleanable/generic,
/obj/item/trash/cheesie,
-/turf/open/floor/mineral/bananium,
+/turf/open/floor/mineral/gold,
/area/ruin/powered)
"Aa" = (
/obj/effect/decal/cleanable/dirt/dust,
@@ -3113,7 +3109,7 @@
/area/ruin/powered)
"Cy" = (
/obj/structure/closet/cardboard,
-/obj/item/coin/bananium,
+/obj/item/coin/hellstone,
/obj/item/reagent_containers/food/snacks/soup/clownstears,
/turf/open/floor/plating,
/area/ruin/powered)
@@ -4333,7 +4329,7 @@
"Ow" = (
/obj/structure/table/wood/fancy/orange,
/obj/item/clothing/under/rank/civilian/clown/rainbow,
-/turf/open/floor/mineral/bananium,
+/turf/open/floor/mineral/gold,
/area/ruin/powered)
"Ox" = (
/obj/effect/decal/cleanable/dirt/dust,
@@ -4422,7 +4418,7 @@
/area/ruin/powered)
"Pr" = (
/obj/effect/decal/cleanable/dirt/dust,
-/turf/open/floor/mineral/bananium,
+/turf/open/floor/mineral/gold,
/area/ruin/powered)
"Px" = (
/mob/living/simple_animal/hostile/rat,
diff --git a/_maps/_basemap.dm b/_maps/_basemap.dm
index 5544c25a9337..d4a64201bb00 100644
--- a/_maps/_basemap.dm
+++ b/_maps/_basemap.dm
@@ -14,4 +14,6 @@
#endif
#endif
+// [CELADON-ADD] - CELADON_CONFIGS_MAPS
#include "_mod_celadon\map_files\generic\blank.dmm"
+// [/CELADON-ADD]
diff --git a/_maps/_mod_celadon/RandomRuins/IceRuins/icemoon_surface_corporate_rejects.dmm b/_maps/_mod_celadon/RandomRuins/IceRuins/icemoon_surface_corporate_rejects.dmm
index 28a963ed476a..869ba303466a 100644
--- a/_maps/_mod_celadon/RandomRuins/IceRuins/icemoon_surface_corporate_rejects.dmm
+++ b/_maps/_mod_celadon/RandomRuins/IceRuins/icemoon_surface_corporate_rejects.dmm
@@ -84,8 +84,7 @@
"cN" = (
/obj/structure/safe/floor,
/obj/item/hand_tele,
-/obj/item/stack/sheet/mineral/adamantine,
-/obj/item/stack/sheet/mineral/adamantine,
+/obj/item/stack/sheet/mineral/hidden/hellstone/twenty,
/turf/open/floor/plating/asteroid/snow/icemoon,
/area/ruin/unpowered/corprejectrooms)
"cP" = (
@@ -1726,11 +1725,7 @@
/obj/item/spacecash/bundle/c1000,
/obj/item/spacecash/bundle/c1000,
/obj/item/stack/sheet/bluespace_crystal/five,
-/obj/item/stack/sheet/mineral/bananium{
- amount = 15
- },
/obj/item/stack/sheet/mineral/gold/twenty,
-/obj/item/stack/sheet/mineral/runite/ten,
/obj/item/toy/figure/captain,
/obj/item/organ/cyberimp/brain/anti_stun,
/obj/item/disk/design_disk/adv/knight_gear,
diff --git a/_maps/_mod_celadon/RandomRuins/SpaceRuins/crashedship.dmm b/_maps/_mod_celadon/RandomRuins/SpaceRuins/crashedship.dmm
index 9a154053c0bf..aacf9947fc0a 100644
--- a/_maps/_mod_celadon/RandomRuins/SpaceRuins/crashedship.dmm
+++ b/_maps/_mod_celadon/RandomRuins/SpaceRuins/crashedship.dmm
@@ -2232,7 +2232,7 @@
/turf/closed/mineral/diamond,
/area/awaymission/BMPship)
"hw" = (
-/turf/closed/mineral/bananium,
+/turf/closed/mineral/gold,
/area/awaymission/BMPship)
"hE" = (
/turf/closed/wall/mineral/titanium/nodiagonal,
@@ -2247,6 +2247,9 @@
/obj/structure/closet,
/turf/open/floor/carpet,
/area/awaymission/BMPship/Fore)
+"lG" = (
+/turf/closed/mineral/gibtonite,
+/area/awaymission/BMPship)
"pe" = (
/obj/machinery/light/directional/south,
/obj/effect/turf_decal/corner/transparent/bar,
@@ -2481,6 +2484,9 @@
},
/turf/open/floor/plasteel,
/area/awaymission/BMPship/Aft)
+"Ma" = (
+/turf/closed/mineral/gibtonite,
+/area/awaymission/BMPship/Midship)
"Mx" = (
/turf/closed/mineral/random,
/area/awaymission/BMPship/Midship)
@@ -3367,7 +3373,7 @@ gb
gb
gb
gb
-gb
+lG
gb
gb
hv
@@ -3519,6 +3525,7 @@ gb
gb
gb
gb
+hw
gb
gb
gb
@@ -3526,7 +3533,6 @@ gb
gb
gb
gb
-hw
gb
gb
fS
@@ -3627,7 +3633,7 @@ gb
gb
gb
gb
-hw
+gb
gb
gb
gb
@@ -3676,10 +3682,10 @@ gb
gb
gb
gb
+hw
gb
gb
gb
-hw
gb
gb
gb
@@ -3725,7 +3731,7 @@ gb
gb
gb
gb
-gb
+hw
gb
gb
gb
@@ -3979,7 +3985,7 @@ gb
gb
gb
gb
-gb
+hw
gb
gb
gb
@@ -4126,7 +4132,7 @@ fm
at
gL
gs
-Mx
+Ma
Mx
gb
gb
diff --git a/_maps/_mod_celadon/RandomRuins/WasteRuins/wasteplanet_clowncrash.dmm b/_maps/_mod_celadon/RandomRuins/WasteRuins/wasteplanet_clowncrash.dmm
index ae2434a3ca45..a9b8ce79caaf 100644
--- a/_maps/_mod_celadon/RandomRuins/WasteRuins/wasteplanet_clowncrash.dmm
+++ b/_maps/_mod_celadon/RandomRuins/WasteRuins/wasteplanet_clowncrash.dmm
@@ -96,7 +96,7 @@
/area/overmap_encounter/planetoid/cave/explored)
"r" = (
/obj/structure/table/reinforced,
-/obj/item/stack/ore/bananium,
+/obj/item/megaphone/clown,
/turf/open/floor/plating/asteroid,
/area/overmap_encounter/planetoid/cave/explored)
"s" = (
@@ -175,11 +175,14 @@
/turf/open/floor/plating/asteroid/wasteplanet,
/area/overmap_encounter/planetoid/cave/explored)
"I" = (
-/obj/item/clothing/suit/space/hardsuit/clown,
-/obj/item/clothing/head/helmet/space/hardsuit/clown,
/obj/structure/rack,
/obj/machinery/power/terminal,
/obj/structure/cable,
+/obj/item/storage/backpack/duffelbag/clown/syndie,
+/obj/item/clothing/shoes/clown_shoes/banana_shoes/combat,
+/obj/item/clothing/suit/space/hardsuit/ert/clown{
+ armor = list("melee" = 35, "bullet" = 35, "laser" = 35, "energy" = 35, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100)
+ },
/turf/open/floor/noslip,
/area/overmap_encounter/planetoid/cave/explored)
"J" = (
@@ -252,6 +255,7 @@
/obj/structure/table/reinforced,
/obj/item/seeds/banana/bluespace,
/obj/item/circuitboard/computer/arcade/orion_trail,
+/obj/item/robot_module/clown,
/turf/open/floor/plating/asteroid/wasteplanet,
/area/overmap_encounter/planetoid/cave/explored)
"X" = (
diff --git a/_maps/_mod_celadon/RandomRuins/WasteRuins/wasteplanet_fortress_of_solitide.dmm b/_maps/_mod_celadon/RandomRuins/WasteRuins/wasteplanet_fortress_of_solitide.dmm
index 73735c65542b..c3feb595f5a1 100644
--- a/_maps/_mod_celadon/RandomRuins/WasteRuins/wasteplanet_fortress_of_solitide.dmm
+++ b/_maps/_mod_celadon/RandomRuins/WasteRuins/wasteplanet_fortress_of_solitide.dmm
@@ -342,7 +342,7 @@
"cX" = (
/obj/structure/statue/bananium/clown,
/obj/effect/decal/cleanable/cobweb/cobweb2,
-/turf/open/floor/mineral/bananium,
+/turf/open/floor/plating,
/area/ruin/powered)
"dg" = (
/obj/structure/sign/poster/contraband/eat,
@@ -430,7 +430,7 @@
/area/ruin/powered)
"ed" = (
/obj/item/trash/cheesie,
-/turf/open/floor/mineral/bananium,
+/turf/open/floor/plating/rust,
/area/ruin/powered)
"ee" = (
/obj/machinery/photocopier,
@@ -578,12 +578,12 @@
/turf/open/floor/plating/rust,
/area/ruin/powered)
"fk" = (
-/obj/machinery/door/airlock/bananium{
- name = "Clown Embassy";
- dir = 4
- },
/obj/item/grown/bananapeel,
-/turf/open/floor/mineral/bananium,
+/obj/structure/barricade/wooden/crude,
+/obj/machinery/door/airlock/maintenance{
+ name = "Detective Halligan's Office"
+ },
+/turf/open/floor/plating/rust,
/area/ruin/powered)
"fn" = (
/obj/effect/gibspawner/human,
@@ -695,7 +695,7 @@
/area/ruin/powered)
"go" = (
/obj/machinery/light/small/directional/west,
-/turf/open/floor/mineral/bananium,
+/turf/open/floor/plating,
/area/ruin/powered)
"gp" = (
/mob/living/simple_animal/hostile/rat,
@@ -735,7 +735,8 @@
/turf/open/floor/plating,
/area/ruin/powered)
"gL" = (
-/turf/open/floor/mineral/bananium,
+/obj/item/grown/bananapeel,
+/turf/open/floor/plating/rust,
/area/ruin/powered)
"gM" = (
/obj/structure/rack,
@@ -762,7 +763,7 @@
/area/ruin/powered)
"hd" = (
/obj/item/reagent_containers/food/snacks/cakeslice/clown_slice,
-/turf/open/floor/mineral/bananium,
+/turf/open/floor/plating/rust,
/area/ruin/powered)
"he" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
@@ -950,7 +951,7 @@
/mob/living/simple_animal/hostile/retaliate/clown/mutant/blob,
/obj/effect/gibspawner/human,
/obj/effect/decal/cleanable/dirt/dust,
-/turf/open/floor/plating,
+/turf/open/floor/plating/rust,
/area/ruin/powered)
"jr" = (
/obj/structure/table/reinforced,
@@ -1123,7 +1124,7 @@
/obj/effect/decal/cleanable/blood,
/obj/effect/mob_spawn/human/clown/corpse,
/obj/effect/decal/cleanable/dirt/dust,
-/turf/open/floor/mineral/bananium,
+/turf/open/floor/plating/rust,
/area/ruin/powered)
"kO" = (
/obj/item/trash/chips,
@@ -1133,7 +1134,7 @@
/obj/effect/decal/cleanable/dirt/dust,
/obj/effect/decal/cleanable/dirt/dust,
/obj/effect/decal/cleanable/dirt/dust,
-/turf/open/floor/mineral/bananium,
+/turf/open/floor/plating/rust,
/area/ruin/powered)
"kS" = (
/obj/effect/decal/cleanable/blood,
@@ -1507,7 +1508,7 @@
/obj/item/pneumatic_cannon/pie,
/obj/item/reagent_containers/spray/waterflower/lube,
/obj/machinery/light/small/directional/east,
-/turf/open/floor/mineral/bananium,
+/turf/open/floor/plating/rust,
/area/ruin/powered)
"nK" = (
/obj/structure/table,
@@ -2180,7 +2181,6 @@
/area/ruin/powered)
"uD" = (
/obj/structure/rack,
-/obj/effect/mob_spawn/drone,
/obj/effect/decal/cleanable/dirt/dust,
/obj/item/trash/raisins,
/obj/effect/spawner/lootdrop/maintenance,
@@ -2375,7 +2375,6 @@
/obj/effect/decal/cleanable/blood,
/obj/effect/mob_spawn/human/clown/corpse,
/obj/effect/decal/cleanable/dirt/dust,
-/turf/open/floor/mineral/bananium,
/area/ruin/powered)
"vX" = (
/obj/item/ammo_casing,
@@ -2773,7 +2772,7 @@
/obj/effect/decal/cleanable/dirt/dust,
/obj/effect/decal/cleanable/generic,
/obj/item/trash/cheesie,
-/turf/open/floor/mineral/bananium,
+/turf/open/floor/plating/rust,
/area/ruin/powered)
"Aa" = (
/obj/effect/decal/cleanable/dirt/dust,
@@ -3113,7 +3112,6 @@
/area/ruin/powered)
"Cy" = (
/obj/structure/closet/cardboard,
-/obj/item/coin/bananium,
/obj/item/reagent_containers/food/snacks/soup/clownstears,
/turf/open/floor/plating,
/area/ruin/powered)
@@ -3524,7 +3522,7 @@
/obj/structure/table/wood/fancy/orange,
/obj/item/toy/figure/clown,
/obj/item/trash/candle,
-/turf/open/floor/plating,
+/turf/open/floor/plating/rust,
/area/ruin/powered)
"GF" = (
/obj/structure/table/bronze,
@@ -4333,7 +4331,7 @@
"Ow" = (
/obj/structure/table/wood/fancy/orange,
/obj/item/clothing/under/rank/civilian/clown/rainbow,
-/turf/open/floor/mineral/bananium,
+/turf/open/floor/plating/rust,
/area/ruin/powered)
"Ox" = (
/obj/effect/decal/cleanable/dirt/dust,
@@ -4421,8 +4419,8 @@
/turf/open/floor/plating/rust,
/area/ruin/powered)
"Pr" = (
-/obj/effect/decal/cleanable/dirt/dust,
-/turf/open/floor/mineral/bananium,
+/obj/item/trash/cheesie,
+/turf/open/floor/plating,
/area/ruin/powered)
"Px" = (
/mob/living/simple_animal/hostile/rat,
@@ -4828,7 +4826,9 @@
name = "The Great Throne"
},
/mob/living/simple_animal/hostile/regalrat{
- dir = 8
+ dir = 8;
+ del_on_death = 1;
+ loot = list(/obj/effect/gibspawner/generic/animal)
},
/obj/effect/decal/cleanable/blood,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
@@ -5860,7 +5860,7 @@ KR
WN
bC
Ru
-gL
+av
Cy
xx
vD
@@ -5903,7 +5903,7 @@ xx
rJ
xx
xx
-fk
+gL
bC
Xe
Xe
@@ -5988,12 +5988,12 @@ fj
cU
jG
xx
-ed
+Pr
eL
zW
-Pr
+XF
yd
-gL
+av
bC
KC
bG
@@ -6033,8 +6033,8 @@ LU
mG
xx
jz
-gL
-gL
+Hp
+Hp
wk
dM
kK
@@ -6124,7 +6124,7 @@ cX
we
VK
nt
-Pr
+XF
nJ
xx
zV
diff --git a/_maps/_mod_celadon/configs/elysim_aldaama.json b/_maps/_mod_celadon/configs/elysium_aldaama.json
similarity index 95%
rename from _maps/_mod_celadon/configs/elysim_aldaama.json
rename to _maps/_mod_celadon/configs/elysium_aldaama.json
index 60855255872d..d97a5b61e139 100644
--- a/_maps/_mod_celadon/configs/elysim_aldaama.json
+++ b/_maps/_mod_celadon/configs/elysium_aldaama.json
@@ -8,7 +8,7 @@
"ENGINEERING"
],
"map_short_name": "Aldaama-class",
- "map_path": "_maps/_mod_celadon/shuttles/elysim/elysim_aldaama.dmm",
+ "map_path": "_maps/_mod_celadon/shuttles/elysium/elysium_aldaama.dmm",
"description": "Изначально 'Алдаама' работал на двигателе Сингулярности, но после ее побега, никто даже не заикался снова ввести ее в эксплуатацию. Вместо этого сделали более безопасный двигатель Тесла. На данный момент у Республики Элизиума всего два таких корабля. Один стоит в музее 'Алехар'(каменистая планета 'Лер'), а второй активно используется сепаратистами Элизиума как корабль снабжения и оперативной телекоммуникационной базой.",
"tags": [
"Specialist",
diff --git a/_maps/_mod_celadon/configs/elysim_homa.json b/_maps/_mod_celadon/configs/elysium_homa.json
similarity index 95%
rename from _maps/_mod_celadon/configs/elysim_homa.json
rename to _maps/_mod_celadon/configs/elysium_homa.json
index 6c12ca376c90..dad6a50160cc 100644
--- a/_maps/_mod_celadon/configs/elysim_homa.json
+++ b/_maps/_mod_celadon/configs/elysium_homa.json
@@ -7,7 +7,7 @@
"WEAPONS"
],
"map_short_name": "Homa-class",
- "map_path": "_maps/_mod_celadon/shuttles/elysim/elysim_homa.dmm",
+ "map_path": "_maps/_mod_celadon/shuttles/elysium/elysium_homa.dmm",
"description": "Лоскутки металла свисают в пространстве, а части обшивки отделились, образуя полости. Остатки шахтёрского оборудования можно заметить в отдельных секциях судна, свидетельствуя о его прежнем использовании для добычи ресурсов. Этот наполовину разобранный космический аппарат создаёт впечатление загадочности и нестабильности.",
"tags": [
"Specialist",
diff --git a/_maps/_mod_celadon/configs/elysim_iron_maiden.json b/_maps/_mod_celadon/configs/elysium_iron_maiden.json
similarity index 93%
rename from _maps/_mod_celadon/configs/elysim_iron_maiden.json
rename to _maps/_mod_celadon/configs/elysium_iron_maiden.json
index 79e2be0bdb8b..45adcb6e1869 100644
--- a/_maps/_mod_celadon/configs/elysim_iron_maiden.json
+++ b/_maps/_mod_celadon/configs/elysium_iron_maiden.json
@@ -1,7 +1,7 @@
{
"$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json",
- "map_name": "Elysim-Iron Assault Boat Mk.II",
- "map_short_name": "Elysim-Iron",
+ "map_name": "Elysium-Iron Assault Boat Mk.II",
+ "map_short_name": "Elysium-Iron",
"prefix": "EUSM",
"description": "Тяжелое десантное судно класса 'Iron' или известного как Утюг, модификация Марк 2, представляет собой последний штрих в области десантных операций. Отсеки судна были переработаны с учетом опыта предыдущих боевых действий, что повысило безопасность при штурме судна. Производимый корпорацией InteQ, это судно широко используется в качестве десантного судна на кораблях-носителях, но также способен выполнять самостоятельные полеты в пределах солнечной системы. Разработанный в начале конфликта с другими корпорациями, он представляет собой более доступную альтернативу сложным и дорогостоящим судам. Известный своим прямоугольным корпусом и мощной броней, Марк 2 обеспечивает надежную защиту для десантников в самых опасных условиях. Судно было перехвачено в схватке с элизиумом и сразу же использовано на передовой.",
"tags": [
@@ -13,7 +13,7 @@
"BEASTS",
"NATURAL_AGGRESSIVE"
],
- "map_path": "_maps/_mod_celadon/shuttles/elysim/elysim_iron_maiden.dmm",
+ "map_path": "_maps/_mod_celadon/shuttles/elysium/elysium_iron_maiden.dmm",
"limit": 2,
"job_slots": {
"Каид": {
diff --git a/_maps/_mod_celadon/configs/event_bucket.json b/_maps/_mod_celadon/configs/event_bucket.json
new file mode 100644
index 000000000000..fd1c2473db55
--- /dev/null
+++ b/_maps/_mod_celadon/configs/event_bucket.json
@@ -0,0 +1,46 @@
+{
+ "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json",
+ "map_name": "Bucket-class Locust Transport",
+ "prefix": "CLO",
+ "namelists": [
+ "NANOTRASEN"
+ ],
+ "map_short_name": "Bucket-clas",
+ "description": "Конфискованное судно, ранее принадлежавшее космическим пиратам, было захвачено и минимально переоборудовано корпорацией Нанотрейзен для своих нужд.Судно сохранило свои боевые шрамы и следы былых сражений. Теперь это суровое, но надежное транспортное средство используется для перевозки персонала и оборудования между отдаленными колониями и исследовательскими станциями.",
+ "tags": [
+ "Specialist"
+ ],
+ "map_path": "_maps/_mod_celadon/shuttles/Event/subbucket.dmm",
+ "limit":1,
+ "starting_funds": 0,
+ "job_slots": {
+ "NT Captain": {
+ "outfit": "/datum/outfit/job/nanotrasen/captain",
+ "officer": true,
+ "slots": 1
+ },
+ "NT Head of Personel": {
+ "outfit": "/datum/outfit/job/nanotrasen/hop",
+ "officer": true,
+ "slots": 1
+ },
+ "SF Colonial Marine": {
+ "outfit": "/datum/outfit/job/solgov/sonnensoldner",
+ "officer": true,
+ "slots": 1
+ },
+ "InteQ Mercenary": {
+ "outfit": "/datum/outfit/job/inteq/security/celadon",
+ "slots": 5
+ },
+ "NT Junior Scientist": {
+ "outfit": "/datum/outfit/job/nanotrasen/scientist",
+ "slots": 2
+ },
+ "Elysium Worker": {
+ "outfit": "/datum/outfit/job/assistant",
+ "slots": 50
+ }
+ },
+ "enabled": false
+}
diff --git a/_maps/_mod_celadon/configs/independent_module.json b/_maps/_mod_celadon/configs/independent_module.json
new file mode 100644
index 000000000000..34d526077a07
--- /dev/null
+++ b/_maps/_mod_celadon/configs/independent_module.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json",
+ "map_name": "Module-Ship",
+ "map_short_name": "Module-class",
+ "description": "Секретная разработчка. Только щитспавн.",
+ "tags": ["Engineering", "Construction"],
+ "map_path": "_maps/_mod_celadon/shuttles/independent/independent_moduleship.dmm",
+ "namelists": [
+ "GENERAL",
+ "SPACE",
+ "NATURAL"
+ ],
+ "prefix": "IMV",
+ "job_slots": {
+ "ERT": {
+ "outfit": "/datum/outfit/centcom/ert/engineer",
+ "slots": 3
+ }
+ },
+ "enabled": false
+}
diff --git a/_maps/_mod_celadon/outpost/hangar/nt_asteroid_20x20.dmm b/_maps/_mod_celadon/outpost/hangar/nt_asteroid_20x20.dmm
index cc62df902599..764cc2e10431 100644
--- a/_maps/_mod_celadon/outpost/hangar/nt_asteroid_20x20.dmm
+++ b/_maps/_mod_celadon/outpost/hangar/nt_asteroid_20x20.dmm
@@ -930,7 +930,7 @@
},
/area/hangar)
"yv" = (
-/obj/structure/sign/elysim,
+/obj/structure/sign/elysium,
/turf/closed/indestructible/reinforced,
/area/hangar)
"yM" = (
diff --git a/_maps/_mod_celadon/outpost/hangar/nt_asteroid_40x20.dmm b/_maps/_mod_celadon/outpost/hangar/nt_asteroid_40x20.dmm
index 915cb6dbf30b..52225e17cea6 100644
--- a/_maps/_mod_celadon/outpost/hangar/nt_asteroid_40x20.dmm
+++ b/_maps/_mod_celadon/outpost/hangar/nt_asteroid_40x20.dmm
@@ -285,7 +285,7 @@
/turf/closed/indestructible/reinforced,
/area/hangar)
"iw" = (
-/obj/item/banner/elysim,
+/obj/item/banner/elysium,
/turf/open/floor/plasteel/dark{
planetary_atmos = 1
},
@@ -707,7 +707,7 @@
},
/area/hangar)
"qq" = (
-/obj/structure/sign/elysim,
+/obj/structure/sign/elysium,
/turf/closed/indestructible/reinforced,
/area/hangar)
"qH" = (
diff --git a/_maps/_mod_celadon/outpost/hangar/nt_asteroid_40x40.dmm b/_maps/_mod_celadon/outpost/hangar/nt_asteroid_40x40.dmm
index 0239c7238bae..bf1b5ff5c808 100644
--- a/_maps/_mod_celadon/outpost/hangar/nt_asteroid_40x40.dmm
+++ b/_maps/_mod_celadon/outpost/hangar/nt_asteroid_40x40.dmm
@@ -849,7 +849,7 @@
/turf/open/floor/plasteel/dark,
/area/hangar)
"HP" = (
-/obj/structure/sign/elysim,
+/obj/structure/sign/elysium,
/turf/closed/indestructible/reinforced,
/area/hangar)
"HY" = (
diff --git a/_maps/_mod_celadon/outpost/hangar/nt_asteroid_56x20.dmm b/_maps/_mod_celadon/outpost/hangar/nt_asteroid_56x20.dmm
index 4b9e09f9a35f..90e6f6283f49 100644
--- a/_maps/_mod_celadon/outpost/hangar/nt_asteroid_56x20.dmm
+++ b/_maps/_mod_celadon/outpost/hangar/nt_asteroid_56x20.dmm
@@ -435,7 +435,7 @@
/turf/open/water/beach/deep,
/area/hangar)
"pr" = (
-/obj/structure/sign/elysim,
+/obj/structure/sign/elysium,
/turf/closed/indestructible/reinforced,
/area/hangar)
"qa" = (
diff --git a/_maps/_mod_celadon/outpost/hangar/nt_asteroid_56x40.dmm b/_maps/_mod_celadon/outpost/hangar/nt_asteroid_56x40.dmm
index 1f889a8f4c56..8af578c892da 100644
--- a/_maps/_mod_celadon/outpost/hangar/nt_asteroid_56x40.dmm
+++ b/_maps/_mod_celadon/outpost/hangar/nt_asteroid_56x40.dmm
@@ -1225,7 +1225,7 @@
/turf/open/water/beach/deep,
/area/hangar)
"SU" = (
-/obj/structure/sign/elysim,
+/obj/structure/sign/elysium,
/turf/closed/indestructible/reinforced,
/area/hangar)
"SY" = (
diff --git a/_maps/_mod_celadon/outpost/indie_space.dmm b/_maps/_mod_celadon/outpost/indie_space.dmm
index af0d8ae2f29b..cb4dc20343f1 100644
--- a/_maps/_mod_celadon/outpost/indie_space.dmm
+++ b/_maps/_mod_celadon/outpost/indie_space.dmm
@@ -1308,9 +1308,17 @@
/turf/open/floor/plating/asteroid,
/area/outpost/maintenance/central)
"iV" = (
-/obj/effect/spawner/structure/window/reinforced/indestructable,
-/turf/open/floor/plating,
-/area/outpost/vacant_rooms/office)
+/obj/effect/turf_decal/corner/opaque/grey/full,
+/obj/machinery/door/airlock/grunge{
+ name = "Cryogenics"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/turf/open/space/basic,
+/area/outpost/crew/cryo)
"iY" = (
/obj/effect/turf_decal/siding/wood,
/obj/effect/decal/cleanable/dirt/dust,
@@ -2145,9 +2153,6 @@
dir = 1
},
/obj/effect/decal/cleanable/dirt/dust,
-/obj/structure/sign/elysim_wall_seal{
- pixel_x = 3
- },
/turf/open/floor/plasteel,
/area/outpost/hallway/central)
"op" = (
@@ -2360,12 +2365,18 @@
/turf/open/floor/plasteel/tech,
/area/outpost/hallway/central)
"pF" = (
-/obj/effect/turf_decal/spline/fancy/opaque/lightgrey{
- dir = 1
+/obj/effect/turf_decal/siding/white{
+ dir = 4
+ },
+/obj/effect/turf_decal/siding/white{
+ dir = 8
},
/obj/effect/decal/cleanable/dirt/dust,
-/turf/open/floor/plasteel,
-/area/outpost/vacant_rooms/office)
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel/patterned,
+/area/outpost/crew/cryo)
"pG" = (
/obj/structure/easel,
/obj/machinery/light/small/directional/north,
@@ -2429,7 +2440,7 @@
/turf/open/floor/plasteel/patterned,
/area/outpost/cargo)
"qu" = (
-/obj/structure/sign/elysim,
+/obj/structure/sign/elysium,
/turf/closed/indestructible/reinforced,
/area/outpost/cargo)
"qv" = (
@@ -2981,12 +2992,23 @@
/turf/open/floor/wood,
/area/outpost/crew/bar)
"tj" = (
-/obj/structure/disposalpipe/segment{
+/obj/effect/turf_decal/siding/white{
dir = 4
},
-/obj/effect/decal/cleanable/dirt/dust,
-/turf/open/floor/plasteel/patterned/cargo_one,
-/area/outpost/vacant_rooms/office)
+/obj/effect/turf_decal/siding/white{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{
+ dir = 5
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
+ dir = 9
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel/patterned,
+/area/outpost/crew/cryo)
"tk" = (
/obj/effect/decal/cleanable/glass,
/obj/effect/decal/cleanable/dirt/dust,
@@ -3635,9 +3657,6 @@
/obj/structure/flora/junglebush/c,
/turf/open/floor/grass/ship/jungle,
/area/outpost/hallway/central)
-"wK" = (
-/turf/closed/indestructible/reinforced,
-/area/outpost/vacant_rooms/office)
"wL" = (
/turf/closed/indestructible/reinforced,
/area/outpost/vacant_rooms)
@@ -3893,7 +3912,7 @@
/turf/open/floor/plating,
/area/outpost/maintenance/fore)
"ys" = (
-/obj/structure/sign/elysim,
+/obj/structure/sign/elysium,
/turf/closed/indestructible/wood,
/area/outpost/crew/bar)
"yv" = (
@@ -3918,7 +3937,7 @@
/turf/open/floor/wood,
/area/outpost/crew/bar)
"yG" = (
-/obj/structure/sign/elysim,
+/obj/structure/sign/elysium,
/turf/closed/indestructible/reinforced,
/area/outpost/vacant_rooms)
"yN" = (
@@ -4358,12 +4377,18 @@
/turf/open/floor/plasteel,
/area/outpost/hallway/central)
"AW" = (
-/obj/structure/disposalpipe/segment{
- dir = 10
- },
/obj/effect/decal/cleanable/dirt/dust,
-/turf/open/floor/plasteel/patterned/cargo_one,
-/area/outpost/vacant_rooms/office)
+/obj/machinery/light/small/directional/east{
+ bulb_power = 0.55
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{
+ dir = 8
+ },
+/turf/open/floor/plasteel/patterned/brushed{
+ light_color = "#1B1D2E";
+ light_range = 2
+ },
+/area/outpost/crew/cryo)
"Bc" = (
/obj/item/radio/intercom/directional/west,
/obj/structure/cable/yellow{
@@ -4960,13 +4985,23 @@
/turf/open/floor/plating,
/area/outpost/maintenance/fore)
"Fa" = (
-/obj/machinery/power/apc/auto_name/directional/south,
+/obj/effect/turf_decal/siding/white,
+/obj/effect/turf_decal/siding/white/corner{
+ dir = 4
+ },
+/obj/effect/turf_decal/siding/white/corner{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/machinery/computer/cryopod/directional/north{
+ dir = 2;
+ pixel_y = -17
+ },
/obj/structure/cable/yellow{
- icon_state = "0-4"
+ icon_state = "1-8"
},
-/obj/effect/turf_decal/steeldecal/steel_decals_central6,
-/turf/open/floor/plasteel,
-/area/outpost/vacant_rooms/office)
+/turf/open/floor/plasteel/patterned,
+/area/outpost/crew/cryo)
"Ff" = (
/obj/effect/turf_decal/corner/opaque/red{
dir = 4
@@ -5048,15 +5083,6 @@
/obj/machinery/firealarm/directional/west,
/turf/open/floor/plasteel/dark,
/area/outpost/cargo/office)
-"Fx" = (
-/obj/structure/table,
-/obj/effect/turf_decal/spline/fancy/opaque/lightgrey{
- dir = 1
- },
-/obj/item/radio/intercom/directional/west,
-/obj/effect/decal/cleanable/dirt/dust,
-/turf/open/floor/plasteel,
-/area/outpost/vacant_rooms/office)
"FB" = (
/turf/open/floor/carpet/green,
/area/outpost/crew/bar)
@@ -5147,10 +5173,13 @@
/turf/open/floor/plating,
/area/outpost/maintenance/fore)
"Gi" = (
-/obj/machinery/disposal/bin,
-/obj/structure/disposalpipe/trunk,
-/turf/open/floor/plasteel/patterned/cargo_one,
-/area/outpost/vacant_rooms/office)
+/obj/machinery/cryopod,
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/plasteel/patterned/brushed{
+ light_color = "#1B1D2E";
+ light_range = 2
+ },
+/area/outpost/crew/cryo)
"Gj" = (
/obj/effect/spawner/lootdrop/grille_or_trash,
/obj/structure/cable/yellow{
@@ -5366,30 +5395,6 @@
/obj/effect/turf_decal/steeldecal/steel_decals6,
/turf/open/floor/plating,
/area/outpost/maintenance/fore)
-"Ht" = (
-/obj/machinery/door/airlock/maintenance{
- dir = 4
- },
-/obj/effect/turf_decal/industrial/warning{
- dir = 8
- },
-/obj/effect/turf_decal/industrial/warning{
- dir = 4
- },
-/obj/machinery/door/firedoor/border_only{
- dir = 8
- },
-/obj/machinery/door/firedoor/border_only{
- dir = 4
- },
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/turf/open/floor/plasteel/tech,
-/area/outpost/vacant_rooms/office)
"Hv" = (
/obj/structure/grille/indestructable,
/turf/open/floor/plating,
@@ -5712,7 +5717,7 @@
dir = 1
},
/obj/effect/turf_decal/steeldecal/steel_decals9,
-/obj/structure/sign/elysim{
+/obj/structure/sign/elysium{
pixel_x = -32
},
/turf/open/floor/plasteel,
@@ -5834,7 +5839,6 @@
/turf/open/floor/grass/ship/jungle,
/area/outpost/hallway/port)
"Kd" = (
-/obj/machinery/light/small/directional/north,
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4,
/turf/open/floor/plating,
/area/outpost/maintenance/central)
@@ -5972,10 +5976,6 @@
/turf/open/floor/plating,
/area/outpost/maintenance/fore)
"KJ" = (
-/obj/effect/decal/cleanable/crayon{
- icon_state = "Donk";
- pixel_y = 32
- },
/obj/effect/decal/cleanable/cobweb,
/turf/open/floor/plating,
/area/outpost/maintenance/central)
@@ -6219,6 +6219,9 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
+/obj/structure/cable/yellow{
+ icon_state = "2-8"
+ },
/turf/open/floor/plasteel,
/area/outpost/hallway/port)
"Md" = (
@@ -6405,7 +6408,7 @@
/turf/open/floor/plasteel/dark,
/area/outpost/cargo/office)
"Nk" = (
-/obj/structure/sign/elysim,
+/obj/structure/sign/elysium,
/turf/closed/indestructible/reinforced,
/area/outpost/hallway/port)
"No" = (
@@ -6662,10 +6665,14 @@
/turf/open/floor/plasteel,
/area/outpost/hallway/central)
"Pw" = (
-/obj/structure/rack,
-/obj/effect/spawner/lootdrop/maintenance/four,
-/turf/open/floor/plasteel/patterned/cargo_one,
-/area/outpost/vacant_rooms/office)
+/obj/machinery/cryopod,
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/machinery/camera,
+/turf/open/floor/plasteel/patterned/brushed{
+ light_color = "#1B1D2E";
+ light_range = 2
+ },
+/area/outpost/crew/cryo)
"Px" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt/dust,
@@ -6697,17 +6704,9 @@
/obj/structure/cable/yellow{
icon_state = "1-4"
},
-/obj/structure/cable/yellow{
- icon_state = "1-8"
- },
/obj/structure/disposalpipe/segment{
dir = 9
},
-/obj/structure/holosign/barrier/infinite{
- max_integrity = 500
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plasteel,
/area/outpost/hallway/port)
@@ -6919,9 +6918,8 @@
/turf/open/floor/plasteel/tech,
/area/outpost/crew/bar)
"Rb" = (
-/obj/structure/falsewall/reinforced,
-/turf/open/floor/plating,
-/area/outpost/vacant_rooms/office)
+/turf/closed/indestructible/reinforced,
+/area/outpost/crew/cryo)
"Rc" = (
/obj/effect/turf_decal/corner/opaque/grey/full,
/obj/structure/cable/yellow{
@@ -7591,13 +7589,21 @@
/turf/open/floor/plasteel/patterned/cargo_one,
/area/outpost/cargo)
"UE" = (
-/obj/structure/disposalpipe/segment,
-/obj/effect/turf_decal/spline/fancy/opaque/lightgrey{
+/obj/effect/turf_decal/corner/opaque/grey/full,
+/obj/effect/turf_decal/corner/opaque/neutral{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{
dir = 1
},
-/obj/effect/decal/cleanable/dirt/dust,
-/turf/open/floor/plating,
-/area/outpost/vacant_rooms/office)
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{
+ dir = 1
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/outpost/hallway/port)
"UG" = (
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -7661,14 +7667,13 @@
/turf/open/floor/wood,
/area/outpost/crew/library)
"UZ" = (
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/obj/structure/disposalpipe/segment{
- dir = 5
+/obj/effect/turf_decal/siding/white/end{
+ dir = 4
},
-/turf/open/floor/plasteel,
-/area/outpost/vacant_rooms/office)
+/obj/machinery/airalarm/directional/south,
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/plasteel/patterned,
+/area/outpost/crew/cryo)
"Vc" = (
/obj/structure/cable/yellow{
icon_state = "1-2"
@@ -7695,7 +7700,7 @@
/turf/open/floor/plasteel,
/area/outpost/hallway/central)
"Vj" = (
-/obj/structure/sign/elysim,
+/obj/structure/sign/elysium,
/turf/closed/indestructible/reinforced,
/area/outpost/security)
"Vp" = (
@@ -7885,12 +7890,18 @@
/turf/open/floor/plating,
/area/outpost/maintenance/central)
"WC" = (
-/obj/structure/disposalpipe/segment{
- dir = 5
- },
/obj/effect/decal/cleanable/dirt/dust,
-/turf/open/floor/plasteel/patterned/cargo_one,
-/area/outpost/vacant_rooms/office)
+/obj/machinery/light/small/directional/west{
+ bulb_power = 0.55
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{
+ dir = 4
+ },
+/turf/open/floor/plasteel/patterned/brushed{
+ light_color = "#1B1D2E";
+ light_range = 2
+ },
+/area/outpost/crew/cryo)
"WH" = (
/obj/structure/cable/yellow,
/obj/machinery/power/apc/auto_name/directional/west,
@@ -8007,9 +8018,6 @@
/area/outpost/hallway/central)
"Xn" = (
/obj/effect/turf_decal/corner/opaque/grey/full,
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
/obj/structure/disposalpipe/segment{
dir = 4
},
@@ -8346,11 +8354,17 @@
/turf/open/floor/plasteel,
/area/outpost/hallway/central)
"Zk" = (
-/obj/structure/chair{
- dir = 1
+/obj/effect/turf_decal/siding/white/end{
+ dir = 8
},
-/turf/open/floor/plasteel,
-/area/outpost/vacant_rooms/office)
+/obj/machinery/firealarm/directional/west,
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/machinery/power/apc/auto_name/directional/south,
+/obj/structure/cable/yellow{
+ icon_state = "0-4"
+ },
+/turf/open/floor/plasteel/patterned,
+/area/outpost/crew/cryo)
"Zl" = (
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -8448,11 +8462,17 @@
/turf/open/floor/plasteel,
/area/outpost/hallway/central)
"ZP" = (
-/obj/structure/rack,
-/obj/effect/spawner/lootdrop/tool_surgery_common,
-/obj/effect/spawner/lootdrop/maintenance/four,
-/turf/open/floor/plasteel/patterned/cargo_one,
-/area/outpost/vacant_rooms/office)
+/obj/effect/turf_decal/siding/white/end{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel/patterned,
+/area/outpost/crew/cryo)
"ZU" = (
/obj/structure/cable/yellow{
icon_state = "2-8"
@@ -17021,12 +17041,12 @@ wL
BM
Ky
yj
-wK
-wK
-wK
-wK
Rb
-cq
+Rb
+Rb
+Rb
+Rb
+Rb
cq
Kz
cq
@@ -17144,12 +17164,12 @@ wL
rm
Kl
hW
-iV
+Rb
Gi
WC
-Fx
+Gi
Zk
-cq
+Rb
KJ
pA
Mt
@@ -17266,13 +17286,13 @@ ev
wL
Qa
LY
-wu
+UE
iV
ZP
tj
pF
Fa
-wK
+Rb
Kd
KC
IJ
@@ -17390,12 +17410,12 @@ wL
Fi
qR
wu
-iV
+Rb
Pw
AW
-UE
+Gi
UZ
-wK
+Rb
RW
Iv
Ke
@@ -17513,12 +17533,12 @@ lG
LS
DF
Lg
-wK
-iV
-iV
-wK
-Ht
-wK
+Rb
+Rb
+Rb
+Rb
+Rb
+Rb
DL
sn
aZ
diff --git a/_maps/_mod_celadon/outpost/nanotrasen_asteroid.dmm b/_maps/_mod_celadon/outpost/nanotrasen_asteroid.dmm
index 28caf7e9dea1..146edcef5d3c 100644
--- a/_maps/_mod_celadon/outpost/nanotrasen_asteroid.dmm
+++ b/_maps/_mod_celadon/outpost/nanotrasen_asteroid.dmm
@@ -226,7 +226,7 @@
},
/obj/effect/turf_decal/spline/fancy/opaque/black,
/obj/machinery/firealarm/directional/north,
-/obj/item/banner/elysim{
+/obj/item/banner/elysium{
pixel_x = 5
},
/turf/open/floor/plasteel/dark,
@@ -551,7 +551,7 @@
pixel_y = 24
},
/obj/effect/decal/cleanable/dirt,
-/obj/structure/sign/elysim{
+/obj/structure/sign/elysium{
pixel_x = -32
},
/turf/open/floor/wood{
@@ -1174,6 +1174,10 @@
"ex" = (
/turf/closed/indestructible/reinforced,
/area/outpost/cargo/office)
+"ey" = (
+/obj/structure/sign/elysium,
+/turf/closed/indestructible/reinforced,
+/area/outpost/crew/canteen)
"ez" = (
/obj/effect/turf_decal/siding/wood{
dir = 10
@@ -1817,7 +1821,7 @@
/turf/open/floor/plasteel/sepia,
/area/outpost/crew/canteen)
"gL" = (
-/obj/structure/sign/elysim{
+/obj/structure/sign/elysium{
pixel_x = -32
},
/turf/open/floor/plasteel/stairs{
@@ -2311,7 +2315,7 @@
/turf/open/floor/plating/rust,
/area/outpost/maintenance/aft)
"iP" = (
-/obj/structure/sign/elysim,
+/obj/structure/sign/elysium,
/turf/closed/indestructible/reinforced,
/area/outpost/crew/library)
"iQ" = (
@@ -2332,7 +2336,7 @@
/turf/open/floor/concrete/slab_2,
/area/outpost/hallway/central)
"iS" = (
-/obj/structure/sign/elysim,
+/obj/structure/sign/elysium,
/turf/closed/indestructible/reinforced,
/area/outpost/hallway/aft)
"iT" = (
@@ -2672,7 +2676,7 @@
},
/obj/effect/turf_decal/spline/fancy/opaque/black,
/obj/item/radio/intercom/directional/north,
-/obj/item/banner/elysim{
+/obj/item/banner/elysium{
pixel_x = 3
},
/turf/open/floor/plasteel/dark,
@@ -3401,7 +3405,7 @@
"mx" = (
/obj/structure/bed,
/obj/structure/curtain/cloth/grey,
-/obj/item/bedsheet/elysim,
+/obj/item/bedsheet/elysium,
/turf/open/floor/carpet,
/area/outpost/crew/dorm)
"my" = (
@@ -3496,7 +3500,7 @@
dir = 8
},
/obj/effect/decal/cleanable/dirt,
-/obj/structure/curtain/cloth/elysim,
+/obj/structure/curtain/cloth/elysium,
/turf/open/floor/wood,
/area/outpost/crew/dorm)
"mJ" = (
@@ -4473,7 +4477,7 @@
/obj/item/reagent_containers/food/drinks/bottle/pruno{
pixel_x = 5
},
-/obj/item/bedsheet/elysim,
+/obj/item/bedsheet/elysium,
/turf/open/floor/plating,
/area/outpost/maintenance/fore)
"qx" = (
@@ -4647,7 +4651,7 @@
/turf/open/floor/grass,
/area/outpost/crew/lounge)
"qY" = (
-/obj/structure/sign/elysim,
+/obj/structure/sign/elysium,
/turf/closed/indestructible/reinforced,
/area/outpost/crew/lounge)
"qZ" = (
@@ -4993,7 +4997,7 @@
/turf/open/floor/plasteel/white,
/area/outpost/medical)
"rV" = (
-/obj/structure/sign/elysim,
+/obj/structure/sign/elysium,
/turf/closed/indestructible/reinforced,
/area/outpost/vacant_rooms)
"rW" = (
@@ -6357,7 +6361,7 @@
/turf/open/floor/plating,
/area/outpost/maintenance/fore)
"wC" = (
-/obj/structure/sign/elysim,
+/obj/structure/sign/elysium,
/turf/closed/indestructible/reinforced,
/area/outpost/crew/garden)
"wE" = (
@@ -6446,7 +6450,7 @@
dir = 4
},
/obj/machinery/light/small/directional/south,
-/obj/structure/sign/elysim{
+/obj/structure/sign/elysium{
pixel_x = 32
},
/turf/open/floor/concrete/tiles,
@@ -6571,7 +6575,7 @@
/area/outpost/external)
"xm" = (
/obj/effect/decal/cleanable/dirt,
-/obj/item/banner/elysim{
+/obj/item/banner/elysium{
pixel_x = 4
},
/turf/open/floor/plating,
@@ -6612,7 +6616,7 @@
/obj/effect/turf_decal/industrial/warning{
dir = 8
},
-/obj/item/banner/elysim{
+/obj/item/banner/elysium{
pixel_x = 6
},
/turf/open/floor/plasteel/dark,
@@ -6827,7 +6831,7 @@
/obj/effect/turf_decal/siding/wood/corner{
dir = 4
},
-/obj/item/banner/elysim{
+/obj/item/banner/elysium{
pixel_x = 2
},
/turf/open/floor/concrete/tiles,
@@ -7643,9 +7647,6 @@
dir = 1
},
/obj/effect/decal/cleanable/dirt,
-/obj/structure/sign/elysim_wall_seal{
- pixel_x = 2
- },
/turf/open/floor/carpet/nanoweave,
/area/outpost/crew/canteen)
"AS" = (
@@ -9045,7 +9046,7 @@
/obj/effect/turf_decal/industrial/warning{
dir = 4
},
-/obj/item/banner/elysim{
+/obj/item/banner/elysium{
pixel_x = 2
},
/turf/open/floor/plasteel/dark,
@@ -9757,7 +9758,7 @@
/obj/effect/turf_decal/siding/wood{
dir = 4
},
-/obj/structure/curtain/cloth/elysim,
+/obj/structure/curtain/cloth/elysium,
/turf/open/floor/wood,
/area/outpost/crew/dorm)
"Io" = (
@@ -9849,7 +9850,7 @@
/turf/open/floor/wood,
/area/outpost/crew/bar)
"IG" = (
-/obj/structure/sign/elysim,
+/obj/structure/sign/elysium,
/turf/closed/indestructible/reinforced,
/area/outpost/hallway/fore)
"IH" = (
@@ -10434,7 +10435,7 @@
},
/area/outpost/maintenance/fore)
"Kz" = (
-/obj/structure/sign/elysim,
+/obj/structure/sign/elysium,
/turf/closed/indestructible/reinforced,
/area/outpost/hallway/starboard)
"KA" = (
@@ -10518,7 +10519,7 @@
/area/outpost/operations)
"KQ" = (
/obj/structure/barricade/security,
-/obj/structure/curtain/cloth/elysim,
+/obj/structure/curtain/cloth/elysium,
/turf/open/floor/plating,
/area/outpost/maintenance/fore)
"KT" = (
@@ -10558,7 +10559,7 @@
/turf/open/floor/plating/asteroid/snow/airless,
/area/outpost/external)
"Le" = (
-/obj/structure/sign/elysim,
+/obj/structure/sign/elysium,
/turf/closed/indestructible/reinforced,
/area/outpost/security)
"Lf" = (
@@ -10590,7 +10591,7 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{
dir = 4
},
-/obj/structure/sign/elysim{
+/obj/structure/sign/elysium{
pixel_y = 32
},
/turf/open/floor/concrete/slab_3,
@@ -10937,7 +10938,7 @@
/obj/structure/bed,
/obj/structure/curtain/cloth/grey,
/obj/effect/decal/cleanable/cobweb,
-/obj/item/bedsheet/elysim,
+/obj/item/bedsheet/elysium,
/turf/open/floor/carpet,
/area/outpost/crew/dorm)
"Mp" = (
@@ -11286,7 +11287,7 @@
"NI" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/catwalk/over/plated_catwalk,
-/obj/structure/curtain/cloth/elysim,
+/obj/structure/curtain/cloth/elysium,
/turf/open/floor/plating{
icon_state = "panelscorched"
},
@@ -11380,7 +11381,7 @@
/area/outpost/cargo)
"NT" = (
/obj/structure/bed,
-/obj/item/bedsheet/elysim,
+/obj/item/bedsheet/elysium,
/turf/open/floor/carpet/blue,
/area/outpost/operations)
"NV" = (
@@ -12960,7 +12961,7 @@
/turf/open/floor/plasteel/dark,
/area/outpost/crew/cryo)
"Tx" = (
-/obj/structure/sign/elysim,
+/obj/structure/sign/elysium,
/turf/closed/indestructible/reinforced,
/area/outpost/crew/cryo)
"Ty" = (
@@ -13163,12 +13164,12 @@
/turf/open/floor/concrete/slab_3,
/area/outpost/hallway/aft)
"Uc" = (
-/obj/structure/sign/elysim,
+/obj/structure/sign/elysium,
/turf/closed/indestructible/reinforced,
/area/outpost/operations)
"Ud" = (
/obj/structure/barricade/security,
-/obj/structure/curtain/cloth/elysim,
+/obj/structure/curtain/cloth/elysium,
/turf/open/floor/plating/rust,
/area/outpost/maintenance/fore)
"Ug" = (
@@ -13995,7 +13996,7 @@
"Xu" = (
/obj/effect/decal/cleanable/plasma,
/obj/structure/catwalk/over/plated_catwalk,
-/obj/structure/curtain/cloth/elysim,
+/obj/structure/curtain/cloth/elysium,
/turf/open/floor/plating/rust,
/area/outpost/maintenance/fore)
"Xv" = (
@@ -14151,7 +14152,7 @@
/obj/effect/turf_decal/siding/wood/corner{
dir = 1
},
-/obj/item/banner/elysim{
+/obj/item/banner/elysium{
pixel_x = 6
},
/turf/open/floor/concrete/tiles,
@@ -23795,7 +23796,7 @@ gP
BC
gP
gP
-gP
+ey
AR
JB
gP
diff --git a/_maps/_mod_celadon/shuttles/Event/subbucket.dmm b/_maps/_mod_celadon/shuttles/Event/subbucket.dmm
new file mode 100644
index 000000000000..363466c8ab79
--- /dev/null
+++ b/_maps/_mod_celadon/shuttles/Event/subbucket.dmm
@@ -0,0 +1,3909 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"ab" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 1
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/ship/hallway/fore)
+"am" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/ship/hallway/central)
+"ay" = (
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/item/radio/intercom/directional/north,
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/obj/machinery/power/ship_gravity,
+/turf/open/floor/plating,
+/area/ship/engineering)
+"aA" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 4
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"aE" = (
+/obj/effect/turf_decal/industrial/warning,
+/obj/machinery/airalarm/directional/north,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"aT" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 1
+ },
+/obj/effect/turf_decal/industrial/warning,
+/obj/effect/turf_decal/industrial/warning{
+ dir = 1
+ },
+/obj/machinery/door/airlock/maintenance{
+ name = "Commons"
+ },
+/turf/open/floor/plasteel/tech,
+/area/ship/crew)
+"bb" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/door/poddoor{
+ id = "pillbottle";
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/ship/hallway/fore)
+"bj" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 8
+ },
+/obj/structure/table,
+/obj/item/storage/cans/sixbeer,
+/obj/machinery/light/small/directional/east,
+/turf/open/floor/carpet,
+/area/ship/hallway/central)
+"br" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light/small/directional/south,
+/turf/open/floor/plasteel,
+/area/ship/hallway/central)
+"bu" = (
+/obj/structure/toilet{
+ dir = 8;
+ pixel_y = 1;
+ pixel_x = 7
+ },
+/obj/structure/mirror{
+ pixel_y = -32
+ },
+/turf/open/floor/plastic,
+/area/ship/hallway/central)
+"bD" = (
+/turf/open/floor/plating,
+/area/ship/hallway/fore)
+"bE" = (
+/obj/structure/ore_box,
+/obj/effect/turf_decal/industrial/outline/yellow,
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/tech/grid,
+/area/ship/cargo)
+"bH" = (
+/obj/structure/cable{
+ icon_state = "1-10"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 5
+ },
+/obj/effect/decal/cleanable/blood/old,
+/turf/open/floor/carpet/nanoweave/blue,
+/area/ship/bridge)
+"bN" = (
+/obj/structure/chair/plastic{
+ dir = 4
+ },
+/turf/open/floor/plating/airless,
+/area/ship/storage)
+"bO" = (
+/obj/effect/turf_decal/industrial/warning{
+ dir = 8
+ },
+/obj/effect/turf_decal/number/eight,
+/obj/machinery/door/firedoor/border_only{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"cn" = (
+/obj/effect/turf_decal/industrial/warning,
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/machinery/camera,
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"co" = (
+/obj/machinery/door/firedoor/border_only{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/ship/hallway/fore)
+"cN" = (
+/turf/closed/wall,
+/area/ship/crew)
+"cQ" = (
+/obj/machinery/power/shieldwallgen/atmos/roundstart{
+ id = "pilltest"
+ },
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/obj/machinery/door/poddoor{
+ id = "pillbottle";
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/ship/hallway/fore)
+"cX" = (
+/obj/structure/cable{
+ icon_state = "1-6"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4,
+/obj/machinery/firealarm/directional/west,
+/turf/open/floor/plasteel,
+/area/ship/hallway/central)
+"dl" = (
+/obj/machinery/door/firedoor/border_only{
+ dir = 4
+ },
+/obj/structure/table/wood,
+/obj/machinery/door/window/brigdoor{
+ dir = 4
+ },
+/obj/item/megaphone/command,
+/turf/open/floor/carpet/nanoweave/blue,
+/area/ship/bridge)
+"dO" = (
+/obj/machinery/power/shieldwallgen/atmos/roundstart{
+ id = "pilltest";
+ dir = 1
+ },
+/obj/structure/cable,
+/obj/machinery/door/poddoor{
+ id = "pillbottle";
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/ship/hallway/fore)
+"eh" = (
+/obj/effect/turf_decal/industrial/warning{
+ dir = 1
+ },
+/obj/effect/turf_decal/industrial/warning,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"ep" = (
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/reagent_dispensers/fueltank,
+/turf/open/floor/plating,
+/area/ship/engineering)
+"eq" = (
+/obj/machinery/door/firedoor/border_only{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/floor/plasteel,
+/area/ship/hallway/fore)
+"eJ" = (
+/turf/closed/wall,
+/area/ship/crew/crewtwo)
+"eM" = (
+/obj/effect/decal/cleanable/glass,
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/plating/airless,
+/area/ship/storage)
+"eT" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable{
+ icon_state = "2-5"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/engineering)
+"fe" = (
+/obj/machinery/door/poddoor{
+ id = "pillbottle";
+ dir = 8
+ },
+/obj/machinery/power/shieldwallgen/atmos/roundstart{
+ id = "pilltest"
+ },
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/turf/open/floor/plating,
+/area/ship/hallway/fore)
+"fy" = (
+/obj/effect/decal/cleanable/cobweb,
+/obj/effect/decal/cleanable/blood/old,
+/obj/item/storage/cans/sixbeer,
+/turf/open/floor/plating/airless,
+/area/ship/storage)
+"fC" = (
+/obj/structure/reagent_dispensers/beerkeg,
+/turf/open/floor/plating/airless,
+/area/ship/storage)
+"fJ" = (
+/obj/effect/decal/cleanable/glass,
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/item/clothing/under/shorts/blue,
+/turf/open/floor/plating/airless,
+/area/ship/storage)
+"fN" = (
+/obj/structure/cable{
+ icon_state = "2-5"
+ },
+/obj/structure/table/wood,
+/obj/machinery/airalarm/directional/west,
+/obj/item/radio/intercom/wideband/table{
+ dir = 8
+ },
+/turf/open/floor/carpet/nanoweave/blue,
+/area/ship/bridge)
+"gc" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/structure/table,
+/obj/item/toy/cards/deck,
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/carpet,
+/area/ship/crew)
+"gg" = (
+/obj/effect/turf_decal/industrial/warning/corner{
+ dir = 1
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 1
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/machinery/light/directional/south,
+/obj/machinery/firealarm/directional/east,
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"gi" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 1
+ },
+/obj/structure/table,
+/obj/item/weldingtool/hugetank/empty,
+/obj/item/clothing/glasses/welding,
+/obj/item/toy/crayon/green,
+/turf/open/floor/plasteel,
+/area/ship/hallway/fore)
+"gk" = (
+/obj/effect/turf_decal/industrial/warning/corner,
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/machinery/light/directional/north,
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"gv" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel,
+/area/ship/hallway/fore)
+"gR" = (
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/machinery/door/firedoor/border_only{
+ dir = 4
+ },
+/obj/machinery/computer/cargo/express{
+ dir = 8
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/cobweb/cobweb2,
+/turf/open/floor/carpet/nanoweave/blue,
+/area/ship/bridge)
+"hi" = (
+/obj/effect/turf_decal/industrial/warning/corner{
+ dir = 1
+ },
+/obj/effect/turf_decal/industrial/warning/corner{
+ dir = 8
+ },
+/obj/effect/turf_decal/industrial/caution{
+ dir = 8
+ },
+/obj/machinery/door/firedoor/border_only{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"hm" = (
+/obj/effect/turf_decal/industrial/warning{
+ dir = 8
+ },
+/obj/effect/turf_decal/number/one,
+/obj/machinery/door/firedoor/border_only{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 1
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"hF" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/robot_debris/old,
+/turf/open/floor/carpet/nanoweave/blue,
+/area/ship/bridge)
+"hG" = (
+/obj/structure/cable{
+ icon_state = "6-9"
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/corner/opaque/black/full,
+/turf/open/floor/plasteel,
+/area/ship/crew)
+"hH" = (
+/obj/effect/turf_decal/industrial/warning{
+ dir = 4
+ },
+/obj/effect/turf_decal/industrial/stand_clear{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"hQ" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"iB" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light/small/directional/south,
+/obj/machinery/computer/cryopod/directional/west,
+/turf/open/floor/plasteel,
+/area/ship/crew/dorm)
+"iO" = (
+/obj/effect/turf_decal/industrial/warning/corner,
+/obj/effect/turf_decal/industrial/warning/corner{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"iP" = (
+/obj/machinery/door/firedoor/border_only{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel,
+/area/ship/hallway/fore)
+"iY" = (
+/turf/open/floor/carpet,
+/area/ship/hallway/central)
+"jb" = (
+/obj/effect/turf_decal/industrial/warning{
+ dir = 8
+ },
+/obj/effect/turf_decal/number/seven,
+/obj/machinery/door/firedoor/border_only{
+ dir = 4
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"jf" = (
+/obj/docking_port/stationary{
+ dwidth = 7;
+ width = 30;
+ height = 15
+ },
+/turf/template_noop,
+/area/template_noop)
+"jw" = (
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/power/apc/auto_name/directional/north,
+/obj/machinery/light_switch{
+ pixel_y = 22;
+ pixel_x = -12
+ },
+/turf/open/floor/plasteel,
+/area/ship/hallway/central)
+"jI" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 9
+ },
+/turf/open/floor/plasteel,
+/area/ship/hallway/central)
+"ka" = (
+/obj/effect/turf_decal/industrial/warning{
+ dir = 4
+ },
+/obj/effect/turf_decal/industrial/stand_clear{
+ dir = 8
+ },
+/obj/effect/landmark/subship{
+ subship_template = /datum/map_template/shuttle/subshuttles/independent_pebble;
+ dir = 4;
+ set_dir_on_move = 4
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"kh" = (
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/power/apc/auto_name/directional/west,
+/obj/machinery/light_switch{
+ dir = 4;
+ pixel_x = -20;
+ pixel_y = 12
+ },
+/turf/open/floor/plasteel,
+/area/ship/crew/dorm)
+"ks" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 6
+ },
+/turf/open/floor/plasteel,
+/area/ship/crew/dorm)
+"kB" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/structure/table,
+/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass,
+/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{
+ pixel_y = 10;
+ pixel_x = 7
+ },
+/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{
+ pixel_y = 10;
+ pixel_x = -6
+ },
+/turf/open/floor/carpet,
+/area/ship/hallway/central)
+"kL" = (
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/structure/table,
+/obj/item/wrench/crescent,
+/obj/structure/cable,
+/obj/item/toy/crayon/red,
+/obj/machinery/power/apc/auto_name/directional/west,
+/turf/open/floor/plasteel,
+/area/ship/hallway/fore)
+"kM" = (
+/turf/open/floor/plasteel,
+/area/ship/hallway/central)
+"kP" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/table,
+/obj/machinery/jukebox/boombox{
+ pixel_y = 6
+ },
+/obj/effect/turf_decal/corner/opaque/black/full,
+/turf/open/floor/plasteel,
+/area/ship/crew)
+"kW" = (
+/obj/effect/turf_decal/siding/thinplating/dark/end{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"kZ" = (
+/obj/structure/barricade/wooden/crude,
+/obj/machinery/door/firedoor/border_only,
+/obj/machinery/door/firedoor/border_only{
+ dir = 1
+ },
+/obj/machinery/door/airlock/maintenance/glass,
+/turf/open/floor/plasteel/tech,
+/area/ship/storage)
+"lh" = (
+/obj/machinery/door/firedoor/border_only{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/plasteel,
+/area/ship/hallway/fore)
+"lk" = (
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/obj/machinery/power/terminal{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/ship/hallway/fore)
+"ly" = (
+/obj/effect/turf_decal/industrial/warning{
+ dir = 8
+ },
+/obj/effect/turf_decal/number/three,
+/obj/machinery/door/firedoor/border_only{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"lN" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 1
+ },
+/turf/open/floor/carpet,
+/area/ship/crew)
+"lW" = (
+/obj/structure/reagent_dispensers/beerkeg,
+/obj/machinery/light/small/built/directional/east,
+/turf/open/floor/plating/airless,
+/area/ship/storage)
+"mg" = (
+/obj/structure/window/reinforced,
+/obj/machinery/atmospherics/components/binary/pump/layer2{
+ name = "Waste to Vent"
+ },
+/obj/item/storage/toolbox/electrical{
+ pixel_y = 8
+ },
+/obj/machinery/light/small/directional/east,
+/turf/open/floor/plating,
+/area/ship/engineering)
+"mh" = (
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/obj/machinery/power/terminal{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/ship/engineering)
+"ms" = (
+/obj/machinery/door/airlock/maintenance{
+ name = "Hangar";
+ dir = 4
+ },
+/obj/machinery/door/firedoor/border_only{
+ dir = 4
+ },
+/obj/machinery/door/firedoor/border_only{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/effect/turf_decal/industrial/warning{
+ dir = 4
+ },
+/obj/effect/turf_decal/industrial/warning{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel/tech,
+/area/ship/crew)
+"mA" = (
+/obj/effect/turf_decal/industrial/warning{
+ dir = 8
+ },
+/obj/effect/turf_decal/number/two,
+/obj/machinery/door/firedoor/border_only{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"mB" = (
+/obj/structure/reagent_dispensers/fueltank,
+/obj/effect/turf_decal/industrial/outline/yellow,
+/turf/open/floor/plasteel/tech/grid,
+/area/ship/hallway/fore)
+"mG" = (
+/obj/structure/cable{
+ icon_state = "2-9"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4,
+/obj/effect/turf_decal/corner/opaque/black/full,
+/turf/open/floor/plasteel,
+/area/ship/crew)
+"nb" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 8
+ },
+/turf/open/floor/carpet/nanoweave/red,
+/area/ship/crew/crewtwo)
+"nh" = (
+/obj/machinery/door/firedoor/border_only{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plasteel,
+/area/ship/hallway/fore)
+"nk" = (
+/obj/effect/turf_decal/industrial/warning,
+/obj/effect/turf_decal/industrial/warning{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"nl" = (
+/obj/effect/turf_decal/industrial/warning,
+/obj/effect/turf_decal/industrial/warning{
+ dir = 1
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/item/toy/crayon/spraycan,
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"np" = (
+/obj/structure/grille,
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/structure/window/reinforced,
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/ship/hallway/central)
+"nw" = (
+/obj/machinery/door/airlock/mining{
+ name = "Cargo Bay";
+ dir = 4
+ },
+/obj/machinery/door/firedoor/border_only{
+ dir = 4
+ },
+/obj/machinery/door/firedoor/border_only{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/effect/turf_decal/industrial/warning{
+ dir = 4
+ },
+/obj/effect/turf_decal/industrial/warning{
+ dir = 8
+ },
+/turf/open/floor/plasteel/tech,
+/area/ship/cargo)
+"nV" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/docking_port/mobile{
+ can_move_docking_ports = 1;
+ launch_status = 0;
+ port_direction = 4;
+ preferred_direction = 4;
+ name = "pillbottle"
+ },
+/obj/structure/toilet{
+ dir = 4;
+ pixel_y = 6;
+ pixel_x = -4;
+ desc = "The great head of the Pillbottle."
+ },
+/turf/open/floor/plating/airless,
+/area/ship/external)
+"og" = (
+/obj/structure/cable{
+ icon_state = "6-8"
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/industrial/loading{
+ dir = 4
+ },
+/turf/open/floor/plasteel/tech/grid,
+/area/ship/cargo)
+"oh" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plating/airless,
+/area/ship/external)
+"ov" = (
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/light/small/directional/east,
+/obj/structure/reagent_dispensers/watertank,
+/turf/open/floor/plating,
+/area/ship/engineering)
+"oH" = (
+/obj/effect/turf_decal/atmos/air,
+/obj/machinery/portable_atmospherics/canister/air,
+/obj/item/wrench,
+/obj/machinery/light/small/directional/west,
+/turf/open/floor/plating,
+/area/ship/hallway/central)
+"oK" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/corner/opaque/white/full,
+/turf/open/floor/plasteel,
+/area/ship/crew)
+"oU" = (
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/machinery/airalarm/directional/south,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/ship/hallway/fore)
+"pc" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/floor/plating,
+/area/ship/engineering)
+"ph" = (
+/obj/structure/grille,
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/structure/window/reinforced,
+/turf/open/floor/plating,
+/area/ship/hallway/central)
+"pi" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/table,
+/obj/machinery/microwave,
+/obj/machinery/airalarm/directional/north,
+/obj/effect/turf_decal/corner/opaque/black/full,
+/turf/open/floor/plasteel,
+/area/ship/crew)
+"pF" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable{
+ icon_state = "8-10"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "2-9"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/engineering)
+"qb" = (
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/carpet/nanoweave/red,
+/area/ship/crew/crewtwo)
+"qj" = (
+/obj/machinery/cryopod/poor{
+ dir = 4
+ },
+/obj/effect/turf_decal/techfloor/orange{
+ dir = 8
+ },
+/turf/open/floor/plasteel/tech/grid,
+/area/ship/crew/dorm)
+"qv" = (
+/obj/structure/chair/plastic{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/machinery/light/small/directional/west,
+/obj/machinery/firealarm/directional/north,
+/turf/open/floor/carpet,
+/area/ship/crew)
+"qy" = (
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/obj/effect/decal/cleanable/blood/old,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/firealarm/directional/south,
+/obj/machinery/power/apc/auto_name/directional/west,
+/turf/open/floor/carpet/nanoweave/red,
+/area/ship/crew/crewtwo)
+"qF" = (
+/obj/machinery/power/shieldwallgen/atmos/roundstart{
+ id = "pilltest";
+ dir = 1
+ },
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/obj/machinery/door/poddoor{
+ id = "pillbottle";
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/ship/hallway/fore)
+"qP" = (
+/obj/machinery/door/airlock/maintenance{
+ name = "Restroom"
+ },
+/turf/open/floor/plasteel/tech,
+/area/ship/hallway/central)
+"qS" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4,
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/structure/table,
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2,
+/turf/open/floor/carpet,
+/area/ship/crew)
+"qY" = (
+/obj/machinery/camera{
+ dir = 5
+ },
+/obj/effect/turf_decal/siding/thinplating/dark/end{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"re" = (
+/obj/machinery/door/airlock/maintenance{
+ name = "Dorms";
+ dir = 4
+ },
+/obj/machinery/door/firedoor/border_only{
+ dir = 8
+ },
+/obj/machinery/door/firedoor/border_only{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel/tech,
+/area/ship/crew/dorm)
+"rH" = (
+/obj/effect/decal/cleanable/shreds,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel,
+/area/ship/crew/dorm)
+"rZ" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/item/radio/intercom/directional/south,
+/turf/open/floor/carpet/nanoweave/red,
+/area/ship/crew/crewtwo)
+"sc" = (
+/obj/effect/decal/cleanable/glass,
+/obj/structure/reagent_dispensers/beerkeg,
+/turf/open/floor/plating/airless,
+/area/ship/storage)
+"sd" = (
+/obj/machinery/door/airlock/command{
+ name = "Bridge"
+ },
+/obj/machinery/door/firedoor/border_only{
+ dir = 1
+ },
+/obj/machinery/door/firedoor/border_only,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4,
+/obj/effect/turf_decal/industrial/warning{
+ dir = 1
+ },
+/obj/effect/turf_decal/industrial/warning,
+/turf/open/floor/plasteel/tech,
+/area/ship/bridge)
+"si" = (
+/obj/structure/cable{
+ icon_state = "2-5"
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{
+ dir = 1
+ },
+/turf/open/floor/carpet,
+/area/ship/crew)
+"ss" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 8
+ },
+/obj/structure/table,
+/obj/machinery/light/small/directional/south,
+/turf/open/floor/carpet,
+/area/ship/hallway/central)
+"sE" = (
+/obj/effect/turf_decal/industrial/warning/corner,
+/obj/effect/turf_decal/industrial/warning/corner{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"sM" = (
+/obj/machinery/door/airlock/maintenance{
+ name = "Commons"
+ },
+/obj/effect/turf_decal/industrial/warning,
+/obj/effect/turf_decal/industrial/warning{
+ dir = 1
+ },
+/turf/open/floor/plasteel/tech,
+/area/ship/crew)
+"sS" = (
+/obj/effect/turf_decal/industrial/warning/corner{
+ dir = 1
+ },
+/obj/effect/turf_decal/industrial/warning/corner{
+ dir = 8
+ },
+/obj/effect/turf_decal/industrial/caution{
+ dir = 8
+ },
+/obj/machinery/door/firedoor/border_only{
+ dir = 4
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"ta" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/ship/hallway/fore)
+"tr" = (
+/obj/effect/turf_decal/industrial/warning/corner{
+ dir = 1
+ },
+/obj/effect/turf_decal/industrial/warning/corner{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"tP" = (
+/obj/effect/turf_decal/industrial/warning/corner{
+ dir = 1
+ },
+/obj/effect/turf_decal/industrial/warning/corner{
+ dir = 8
+ },
+/obj/effect/turf_decal/industrial/caution{
+ dir = 8
+ },
+/obj/machinery/door/firedoor/border_only{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 9
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"tT" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 1
+ },
+/obj/machinery/light/small/directional/west,
+/turf/open/floor/plasteel,
+/area/ship/hallway/central)
+"us" = (
+/obj/effect/turf_decal/industrial/outline/yellow,
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/machinery/suit_storage_unit/inherit,
+/obj/item/clothing/suit/space/hardsuit/carp/old,
+/obj/item/tank/internals/oxygen,
+/turf/open/floor/plasteel/tech/grid,
+/area/ship/cargo)
+"uC" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 8
+ },
+/obj/effect/turf_decal/corner/opaque/white/full,
+/obj/machinery/firealarm/directional/east,
+/turf/open/floor/plasteel,
+/area/ship/crew)
+"uL" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 8
+ },
+/obj/item/radio/intercom/directional/north,
+/turf/open/floor/plasteel,
+/area/ship/hallway/central)
+"uS" = (
+/obj/effect/turf_decal/industrial/warning,
+/obj/effect/turf_decal/industrial/warning{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"uX" = (
+/obj/structure/cable,
+/obj/machinery/computer/security{
+ dir = 4
+ },
+/obj/machinery/power/apc/auto_name/directional/south,
+/obj/machinery/light_switch{
+ dir = 1;
+ pixel_x = -12;
+ pixel_y = -16
+ },
+/turf/open/floor/carpet/nanoweave/blue,
+/area/ship/bridge)
+"vb" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel,
+/area/ship/hallway/central)
+"vp" = (
+/turf/open/floor/plating/airless,
+/area/ship/storage)
+"vz" = (
+/obj/machinery/door/airlock/external/glass{
+ name = "Ye Olde Docking Airlock"
+ },
+/obj/effect/mapping_helpers/airlock/locked,
+/turf/open/floor/plating,
+/area/ship/hallway/fore)
+"vM" = (
+/obj/effect/turf_decal/industrial/warning,
+/obj/effect/turf_decal/industrial/warning{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"vO" = (
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-6"
+ },
+/obj/machinery/power/apc/auto_name/directional/west,
+/obj/machinery/light_switch{
+ dir = 4;
+ pixel_x = -20;
+ pixel_y = 12
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/engineering)
+"vX" = (
+/obj/effect/decal/cleanable/robot_debris,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/corner/opaque/white/full,
+/turf/open/floor/plasteel,
+/area/ship/crew)
+"wb" = (
+/obj/machinery/door/firedoor/border_only{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 4
+ },
+/turf/open/floor/plasteel/stairs/old{
+ dir = 8
+ },
+/area/ship/engineering)
+"wc" = (
+/obj/effect/turf_decal/industrial/warning/corner{
+ dir = 1
+ },
+/obj/effect/turf_decal/industrial/warning/corner{
+ dir = 8
+ },
+/obj/effect/turf_decal/industrial/caution{
+ dir = 8
+ },
+/obj/machinery/door/firedoor/border_only{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"wi" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4,
+/obj/machinery/door/firedoor/border_only{
+ dir = 1
+ },
+/obj/machinery/door/firedoor/border_only,
+/turf/open/floor/plasteel,
+/area/ship/hallway/central)
+"wE" = (
+/obj/structure/chair{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 8
+ },
+/obj/item/radio/intercom/directional/south,
+/turf/open/floor/carpet,
+/area/ship/hallway/central)
+"wO" = (
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plasteel,
+/area/ship/hallway/fore)
+"wZ" = (
+/obj/effect/turf_decal/industrial/warning/corner{
+ dir = 1
+ },
+/obj/effect/turf_decal/industrial/warning/corner{
+ dir = 8
+ },
+/obj/effect/turf_decal/industrial/caution{
+ dir = 8
+ },
+/obj/machinery/door/firedoor/border_only{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 10
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"xl" = (
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 10
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/carpet/nanoweave/red,
+/area/ship/crew/crewtwo)
+"xq" = (
+/obj/effect/turf_decal/industrial/warning,
+/obj/effect/turf_decal/industrial/warning{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"xx" = (
+/obj/machinery/atmospherics/components/unary/portables_connector/layer4{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/cobweb,
+/obj/item/radio/intercom/directional/west,
+/turf/open/floor/plating,
+/area/ship/hallway/central)
+"xD" = (
+/obj/effect/turf_decal/industrial/warning{
+ dir = 1
+ },
+/obj/effect/turf_decal/industrial/warning,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"xF" = (
+/obj/structure/bed/pod,
+/obj/structure/curtain/cloth,
+/obj/effect/decal/cleanable/cobweb,
+/obj/machinery/airalarm/directional/north,
+/turf/open/floor/carpet/nanoweave,
+/area/ship/crew/dorm)
+"xI" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/machinery/airalarm/directional/north,
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plasteel,
+/area/ship/hallway/fore)
+"xK" = (
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/table,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/structure/window/reinforced,
+/obj/item/multitool,
+/obj/item/clothing/gloves/color/yellow,
+/turf/open/floor/plating,
+/area/ship/engineering)
+"xN" = (
+/obj/machinery/door/firedoor/border_only{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/ship/hallway/fore)
+"xY" = (
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/machinery/light/small/directional/east,
+/turf/open/floor/plasteel/patterned,
+/area/ship/cargo)
+"yf" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/decal/cleanable/blood/old,
+/obj/machinery/newscaster/directional/north,
+/turf/open/floor/carpet,
+/area/ship/crew)
+"yh" = (
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/item/storage/cans/sixbeer,
+/turf/open/floor/plating/airless,
+/area/ship/storage)
+"yu" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 6
+ },
+/obj/machinery/light/small/directional/west,
+/turf/open/floor/plasteel,
+/area/ship/hallway/central)
+"yF" = (
+/turf/closed/wall,
+/area/ship/hallway/fore)
+"yV" = (
+/obj/structure/cable{
+ icon_state = "1-10"
+ },
+/obj/machinery/door/firedoor/border_only{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/ship/hallway/fore)
+"zr" = (
+/obj/machinery/door/firedoor/border_only{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/plasteel,
+/area/ship/hallway/fore)
+"zs" = (
+/turf/closed/wall,
+/area/ship/hallway/central)
+"zB" = (
+/obj/structure/grille,
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/machinery/door/poddoor/shutters{
+ id = "pillbob";
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/ship/crew/crewtwo)
+"zE" = (
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/carpet/nanoweave/red,
+/area/ship/crew/crewtwo)
+"zL" = (
+/turf/closed/wall,
+/area/ship/cargo)
+"zP" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 5
+ },
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{
+ dir = 8
+ },
+/obj/machinery/light/small/directional/west,
+/turf/open/floor/plasteel,
+/area/ship/hallway/central)
+"zQ" = (
+/obj/effect/decal/remains/human,
+/obj/item/reagent_containers/food/drinks/bottle/absinthe,
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/plating/airless,
+/area/ship/storage)
+"Af" = (
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/structure/table,
+/turf/open/floor/carpet,
+/area/ship/hallway/central)
+"Ah" = (
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/machinery/door/poddoor{
+ id = "pillbottle";
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/ship/hallway/fore)
+"Aj" = (
+/obj/effect/turf_decal/industrial/warning/corner,
+/obj/effect/turf_decal/industrial/warning/corner{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"Av" = (
+/obj/structure/cable{
+ icon_state = "4-9"
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/machinery/mineral/ore_redemption{
+ dir = 4;
+ input_dir = 4;
+ output_dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/window/reinforced,
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/turf/open/floor/plasteel/tech/grid,
+/area/ship/cargo)
+"Ax" = (
+/obj/structure/table,
+/obj/structure/bedsheetbin,
+/obj/machinery/light/small/built/directional/north,
+/turf/open/floor/carpet/nanoweave,
+/area/ship/crew/dorm)
+"AJ" = (
+/obj/structure/chair/plastic{
+ dir = 1
+ },
+/turf/open/floor/carpet,
+/area/ship/crew)
+"AM" = (
+/obj/structure/cable{
+ icon_state = "4-10"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/ship/crew/dorm)
+"Bi" = (
+/obj/effect/decal/cleanable/blood/old,
+/obj/effect/turf_decal/corner/opaque/black/full,
+/obj/machinery/light/small/directional/east,
+/turf/open/floor/plasteel,
+/area/ship/crew)
+"Bm" = (
+/obj/effect/turf_decal/industrial/warning{
+ dir = 1
+ },
+/obj/effect/turf_decal/industrial/warning,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"Bp" = (
+/turf/closed/wall,
+/area/ship/storage)
+"Bq" = (
+/obj/effect/turf_decal/industrial/warning,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"BD" = (
+/obj/structure/reagent_dispensers/water_cooler,
+/turf/open/floor/carpet,
+/area/ship/hallway/central)
+"BY" = (
+/obj/structure/cable{
+ icon_state = "5-8"
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel,
+/area/ship/crew/dorm)
+"Ch" = (
+/turf/template_noop,
+/area/template_noop)
+"Cs" = (
+/obj/structure/cable{
+ icon_state = "4-9"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4,
+/turf/open/floor/plasteel,
+/area/ship/hallway/central)
+"CM" = (
+/obj/effect/turf_decal/industrial/outline/yellow,
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/suit_storage_unit/inherit,
+/obj/item/clothing/suit/space/hardsuit/carp/old,
+/obj/item/tank/internals/oxygen,
+/turf/open/floor/plasteel/tech/grid,
+/area/ship/cargo)
+"CO" = (
+/obj/structure/cable{
+ icon_state = "5-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/plasteel,
+/area/ship/hallway/central)
+"CP" = (
+/obj/structure/table,
+/obj/item/storage/cans/sixbeer,
+/obj/effect/turf_decal/corner/opaque/black/full,
+/turf/open/floor/plasteel,
+/area/ship/crew)
+"CQ" = (
+/obj/machinery/camera,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 9
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plating/airless,
+/area/ship/external)
+"CY" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/engineering)
+"Dg" = (
+/obj/structure/rack,
+/obj/item/pickaxe,
+/obj/item/pickaxe,
+/obj/item/pickaxe,
+/obj/item/pickaxe,
+/obj/item/pickaxe/rusted,
+/obj/item/pickaxe/rusted,
+/obj/item/pickaxe/rusted,
+/obj/item/pickaxe/rusted,
+/obj/effect/turf_decal/industrial/outline/yellow,
+/obj/effect/decal/cleanable/cobweb/cobweb2,
+/obj/item/stack/marker_beacon/thirty,
+/obj/item/stack/marker_beacon/thirty,
+/turf/open/floor/plasteel/tech/grid,
+/area/ship/cargo)
+"Dj" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/landmark/observer_start,
+/turf/open/floor/plasteel,
+/area/ship/hallway/fore)
+"Dp" = (
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/machinery/door/firedoor/border_only{
+ dir = 4
+ },
+/obj/machinery/computer/helm{
+ dir = 8
+ },
+/turf/open/floor/carpet/nanoweave/blue,
+/area/ship/bridge)
+"DD" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/corner/opaque/black/full,
+/turf/open/floor/plasteel,
+/area/ship/crew)
+"DV" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/ship/hallway/fore)
+"EN" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/structure/reagent_dispensers/water_cooler,
+/obj/machinery/light/directional/west,
+/turf/open/floor/plasteel,
+/area/ship/hallway/fore)
+"EU" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 4
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"EV" = (
+/obj/effect/turf_decal/industrial/warning{
+ dir = 4
+ },
+/obj/machinery/atmospherics/components/binary/pump/layer4{
+ dir = 4;
+ name = "Input to Distro"
+ },
+/obj/machinery/door/window/brigdoor{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/ship/hallway/central)
+"EX" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel,
+/area/ship/crew/dorm)
+"Fc" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/ship/hallway/central)
+"Fn" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/cable{
+ icon_state = "1-6"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 5
+ },
+/obj/machinery/light/small/directional/west,
+/turf/open/floor/plasteel/patterned,
+/area/ship/cargo)
+"FB" = (
+/obj/effect/decal/cleanable/blood/old,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel,
+/area/ship/hallway/central)
+"FE" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel,
+/area/ship/hallway/fore)
+"FK" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{
+ dir = 8
+ },
+/obj/effect/turf_decal/corner/opaque/black/full,
+/turf/open/floor/plasteel,
+/area/ship/crew)
+"FS" = (
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"Ga" = (
+/obj/structure/cable,
+/obj/effect/turf_decal/industrial/outline/yellow,
+/obj/machinery/power/smes/engineering,
+/obj/machinery/light/small/directional/west,
+/turf/open/floor/plasteel/tech/grid,
+/area/ship/engineering)
+"Ge" = (
+/obj/structure/closet/wardrobe/grey,
+/obj/item/radio,
+/obj/item/radio,
+/obj/item/radio,
+/obj/item/radio,
+/obj/item/radio,
+/obj/item/radio,
+/obj/item/radio,
+/obj/item/radio,
+/obj/item/radio,
+/obj/item/radio,
+/obj/effect/decal/cleanable/dirt,
+/obj/item/modular_computer/tablet/preset/cargo,
+/obj/item/modular_computer/tablet/preset/cargo,
+/obj/item/modular_computer/tablet/preset/cargo,
+/obj/item/modular_computer/tablet/preset/cargo,
+/obj/item/modular_computer/tablet/preset/cargo,
+/obj/item/modular_computer/tablet/preset/cargo,
+/turf/open/floor/carpet/nanoweave,
+/area/ship/crew/dorm)
+"Gk" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/corner/opaque/black/full,
+/turf/open/floor/plasteel,
+/area/ship/crew)
+"Go" = (
+/obj/machinery/door/airlock/mining{
+ name = "Hangar";
+ dir = 4
+ },
+/obj/machinery/door/firedoor/border_only{
+ dir = 4
+ },
+/obj/machinery/door/firedoor/border_only{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/industrial/warning{
+ dir = 8
+ },
+/obj/effect/turf_decal/industrial/warning{
+ dir = 4
+ },
+/turf/open/floor/plasteel/tech,
+/area/ship/cargo)
+"Gr" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/patterned,
+/area/ship/cargo)
+"Gv" = (
+/obj/machinery/newscaster/directional/south,
+/turf/open/floor/carpet/nanoweave/blue,
+/area/ship/bridge)
+"GA" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/ship/hallway/fore)
+"GC" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4,
+/obj/effect/turf_decal/corner/opaque/white/full,
+/turf/open/floor/plasteel,
+/area/ship/crew)
+"GG" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
+/obj/machinery/autolathe,
+/obj/effect/decal/cleanable/cobweb/cobweb2,
+/obj/effect/turf_decal/industrial/outline/yellow,
+/obj/item/stack/sheet/metal/fifty,
+/obj/item/stack/sheet/glass/fifty,
+/obj/item/radio/intercom/directional/north,
+/turf/open/floor/plasteel/tech/grid,
+/area/ship/engineering)
+"GW" = (
+/obj/structure/grille/broken,
+/obj/effect/decal/cleanable/glass,
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/plating/airless,
+/area/ship/storage)
+"Hc" = (
+/obj/effect/turf_decal/industrial/warning{
+ dir = 1
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"Hj" = (
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{
+ dir = 1
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/corner/opaque/white/full,
+/turf/open/floor/plasteel,
+/area/ship/crew)
+"Hp" = (
+/obj/structure/table,
+/obj/item/storage/cans/sixbeer,
+/turf/open/floor/carpet/nanoweave/red,
+/area/ship/crew/crewtwo)
+"Hr" = (
+/obj/structure/cable{
+ icon_state = "1-10"
+ },
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/robot_debris,
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/plasteel,
+/area/ship/hallway/central)
+"HD" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/door/firedoor/border_only{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/ship/hallway/fore)
+"HF" = (
+/obj/effect/turf_decal/industrial/warning/corner,
+/obj/effect/turf_decal/industrial/warning/corner{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"HN" = (
+/obj/effect/turf_decal/industrial/warning,
+/obj/effect/turf_decal/industrial/warning{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"HS" = (
+/obj/structure/grille,
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/machinery/door/poddoor/shutters{
+ id = "pillbob";
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/ship/crew/crewtwo)
+"HY" = (
+/obj/structure/table/wood,
+/obj/machinery/button/door{
+ dir = 4;
+ id = "pillbottle";
+ pixel_y = -3;
+ pixel_x = -7;
+ name = "Hangar Control"
+ },
+/obj/machinery/button/shieldwallgen{
+ dir = 4;
+ id = "pilltest";
+ pixel_y = -3;
+ pixel_x = 7
+ },
+/obj/effect/decal/cleanable/cobweb,
+/obj/item/radio/intercom/directional/north,
+/obj/machinery/light/small/directional/west,
+/turf/open/floor/carpet/nanoweave/blue,
+/area/ship/bridge)
+"Io" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/ship/hallway/central)
+"Iy" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/machinery/firealarm/directional/north,
+/turf/open/floor/carpet/nanoweave/blue,
+/area/ship/bridge)
+"IJ" = (
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/machinery/atmospherics/components/unary/outlet_injector/on/layer2{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/ship/external)
+"IY" = (
+/obj/structure/grille,
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/structure/window/reinforced,
+/obj/machinery/door/poddoor/shutters{
+ id = "pillbob"
+ },
+/turf/open/floor/plating,
+/area/ship/crew/crewtwo)
+"Jc" = (
+/obj/effect/turf_decal/industrial/warning,
+/obj/effect/turf_decal/industrial/warning{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"Ji" = (
+/obj/effect/turf_decal/industrial/warning{
+ dir = 4
+ },
+/obj/machinery/portable_atmospherics/canister/air,
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/ship/hallway/central)
+"Jp" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4,
+/turf/open/floor/plasteel,
+/area/ship/hallway/central)
+"Jr" = (
+/obj/structure/cable,
+/obj/machinery/power/apc/auto_name/directional/west,
+/obj/machinery/light_switch{
+ dir = 4;
+ pixel_x = -20;
+ pixel_y = 12
+ },
+/turf/open/floor/plasteel/patterned,
+/area/ship/cargo)
+"JT" = (
+/obj/effect/turf_decal/industrial/warning,
+/obj/effect/turf_decal/industrial/warning{
+ dir = 1
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"Kh" = (
+/obj/structure/grille,
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/structure/window/reinforced,
+/turf/open/floor/plating/airless,
+/area/ship/storage)
+"KL" = (
+/obj/effect/turf_decal/industrial/warning{
+ dir = 8
+ },
+/obj/effect/turf_decal/number/four,
+/obj/machinery/door/firedoor/border_only{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"KP" = (
+/obj/structure/grille,
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/machinery/door/poddoor/shutters{
+ id = "pillbob";
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/ship/crew/crewtwo)
+"Lg" = (
+/obj/structure/grille/broken,
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/item/shard,
+/obj/effect/decal/cleanable/glass,
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/plating/airless,
+/area/ship/storage)
+"Lk" = (
+/obj/effect/turf_decal/industrial/warning{
+ dir = 4
+ },
+/obj/effect/turf_decal/industrial/stand_clear{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"Lm" = (
+/obj/structure/chair/office{
+ dir = 4
+ },
+/turf/open/floor/carpet/nanoweave/blue,
+/area/ship/bridge)
+"Ly" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/light/directional/west,
+/turf/open/floor/plasteel,
+/area/ship/hallway/fore)
+"LK" = (
+/obj/effect/turf_decal/industrial/warning{
+ dir = 8
+ },
+/obj/effect/turf_decal/number/six,
+/obj/machinery/door/firedoor/border_only{
+ dir = 4
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"LQ" = (
+/obj/structure/rack,
+/obj/item/storage/bag/ore,
+/obj/item/storage/bag/ore,
+/obj/item/storage/bag/ore,
+/obj/item/storage/bag/ore,
+/obj/effect/turf_decal/industrial/outline/yellow,
+/turf/open/floor/plasteel/tech/grid,
+/area/ship/cargo)
+"LW" = (
+/obj/machinery/light/small/directional/south,
+/turf/open/floor/carpet/nanoweave/red,
+/area/ship/crew/crewtwo)
+"Mh" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/oil/slippery,
+/turf/open/floor/plating,
+/area/ship/engineering)
+"Mv" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/table,
+/obj/item/toy/crayon/spraycan,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/ship/hallway/fore)
+"MK" = (
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 10
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 8
+ },
+/turf/open/floor/plasteel/patterned,
+/area/ship/cargo)
+"MT" = (
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/obj/structure/table,
+/obj/structure/reagent_dispensers/servingdish{
+ desc = "A dish full of mashed pills for your bowl."
+ },
+/obj/effect/turf_decal/corner/opaque/white/full,
+/obj/machinery/light_switch{
+ pixel_y = 22;
+ pixel_x = -12
+ },
+/obj/machinery/power/apc/auto_name/directional/north,
+/turf/open/floor/plasteel,
+/area/ship/crew)
+"Nh" = (
+/obj/structure/grille,
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/structure/window/reinforced,
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/ship/crew)
+"Nz" = (
+/obj/structure/chair/plastic{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/carpet/nanoweave/red,
+/area/ship/crew/crewtwo)
+"NC" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel,
+/area/ship/hallway/central)
+"NE" = (
+/obj/effect/turf_decal/industrial/warning{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/airalarm/directional/south,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"NF" = (
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/engineering)
+"NH" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel/stairs{
+ dir = 8
+ },
+/area/ship/hallway/fore)
+"NT" = (
+/obj/structure/bed/pod,
+/obj/structure/curtain/cloth,
+/turf/open/floor/carpet/nanoweave,
+/area/ship/crew/dorm)
+"Oa" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 10
+ },
+/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer4,
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/plasteel,
+/area/ship/hallway/fore)
+"Oj" = (
+/obj/structure/cable{
+ icon_state = "4-10"
+ },
+/obj/structure/chair/plastic,
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/item/radio/intercom/directional/north,
+/turf/open/floor/carpet,
+/area/ship/crew)
+"Op" = (
+/obj/structure/table,
+/obj/effect/turf_decal/corner/opaque/white/full,
+/turf/open/floor/plasteel,
+/area/ship/crew)
+"Os" = (
+/obj/effect/turf_decal/industrial/warning{
+ dir = 1
+ },
+/obj/machinery/camera{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"OA" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/patterned,
+/area/ship/cargo)
+"OH" = (
+/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel,
+/area/ship/hallway/fore)
+"OL" = (
+/obj/structure/grille,
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/curtain/cloth/grey,
+/turf/open/floor/plating,
+/area/ship/crew/dorm)
+"OQ" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/closet/secure_closet/freezer/kitchen/maintenance,
+/obj/effect/turf_decal/corner/opaque/white/full,
+/obj/machinery/light/small/built/directional/north,
+/turf/open/floor/plasteel,
+/area/ship/crew)
+"OR" = (
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/carpet,
+/area/ship/crew)
+"OT" = (
+/obj/structure/ore_box,
+/obj/effect/turf_decal/industrial/outline/yellow,
+/turf/open/floor/plasteel/tech/grid,
+/area/ship/cargo)
+"OY" = (
+/obj/effect/turf_decal/box,
+/obj/machinery/power/port_gen/pacman,
+/obj/effect/decal/cleanable/greenglow,
+/obj/item/stack/sheet/mineral/plasma/twenty,
+/obj/machinery/airalarm/directional/north,
+/obj/structure/cable/yellow{
+ icon_state = "0-2"
+ },
+/obj/machinery/light/small/directional/west,
+/turf/open/floor/plasteel/tech/grid,
+/area/ship/engineering)
+"Pe" = (
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/ship/hallway/fore)
+"Pn" = (
+/obj/effect/turf_decal/industrial/warning/corner,
+/obj/effect/turf_decal/industrial/warning/corner{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/item/toy/crayon/spraycan,
+/obj/item/toy/crayon/spraycan,
+/obj/effect/landmark/subship{
+ subship_template = /datum/map_template/shuttle/subshuttles/independent_pebble;
+ dir = 4;
+ set_dir_on_move = 4
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"Pv" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/table,
+/obj/item/toy/crayon/spraycan,
+/turf/open/floor/plasteel,
+/area/ship/hallway/fore)
+"PV" = (
+/obj/structure/closet/secure_closet/freezer/kitchen/maintenance,
+/obj/effect/turf_decal/corner/opaque/white/full,
+/turf/open/floor/plasteel,
+/area/ship/crew)
+"PX" = (
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/item/clothing/under/shorts/purple,
+/turf/open/floor/plasteel,
+/area/ship/hallway/fore)
+"QF" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/plasteel/patterned,
+/area/ship/cargo)
+"QH" = (
+/obj/effect/turf_decal/industrial/warning/corner,
+/obj/effect/turf_decal/industrial/warning/corner{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"QK" = (
+/obj/effect/turf_decal/industrial/warning/corner{
+ dir = 8
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
+/obj/machinery/light/directional/north,
+/obj/machinery/firealarm/directional/east,
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"QM" = (
+/obj/structure/table,
+/obj/item/radio/intercom/directional/east,
+/turf/open/floor/carpet/nanoweave,
+/area/ship/crew/dorm)
+"QN" = (
+/obj/machinery/processor,
+/obj/effect/turf_decal/corner/opaque/white/full,
+/turf/open/floor/plasteel,
+/area/ship/crew)
+"QX" = (
+/obj/effect/turf_decal/industrial/warning/corner,
+/obj/effect/turf_decal/industrial/warning/corner{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"Rb" = (
+/obj/machinery/camera{
+ dir = 1
+ },
+/obj/effect/turf_decal/weather/dirt{
+ dir = 10
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plating/airless,
+/area/ship/external)
+"Rm" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/ship/crew/dorm)
+"Ro" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel,
+/area/ship/hallway/central)
+"Rp" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
+/obj/structure/reagent_dispensers/water_cooler,
+/obj/machinery/light/small/directional/north,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel,
+/area/ship/hallway/central)
+"RI" = (
+/obj/item/radio/intercom/directional/west,
+/turf/open/floor/plasteel/patterned,
+/area/ship/cargo)
+"RL" = (
+/obj/machinery/power/shuttle/engine/electric/bad{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/open/floor/engine/hull,
+/area/ship/engineering)
+"RM" = (
+/obj/structure/rack,
+/obj/effect/turf_decal/industrial/outline/yellow,
+/obj/item/mining_scanner,
+/obj/item/mining_scanner,
+/obj/item/stack/marker_beacon/thirty,
+/obj/item/stack/marker_beacon/thirty,
+/obj/machinery/firealarm/directional/north,
+/turf/open/floor/plasteel/tech/grid,
+/area/ship/cargo)
+"Sg" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
+/turf/open/floor/plasteel,
+/area/ship/hallway/central)
+"Si" = (
+/turf/closed/wall,
+/area/ship/crew/dorm)
+"SD" = (
+/obj/machinery/door/airlock/engineering{
+ name = "Engineering";
+ dir = 4
+ },
+/obj/machinery/door/firedoor/border_only{
+ dir = 4
+ },
+/obj/machinery/door/firedoor/border_only{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/effect/turf_decal/industrial/warning{
+ dir = 8
+ },
+/obj/effect/turf_decal/industrial/warning{
+ dir = 4
+ },
+/turf/open/floor/plasteel/tech,
+/area/ship/engineering)
+"SL" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
+/obj/effect/decal/cleanable/cobweb,
+/obj/machinery/light/directional/west,
+/turf/open/floor/plasteel,
+/area/ship/hallway/fore)
+"SR" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/ship/engineering)
+"Tk" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "6-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 1
+ },
+/turf/open/floor/carpet,
+/area/ship/crew)
+"Tu" = (
+/obj/effect/turf_decal/industrial/warning{
+ dir = 4
+ },
+/obj/effect/turf_decal/industrial/stand_clear{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"TR" = (
+/obj/effect/turf_decal/industrial/warning/corner{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/light/directional/south,
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"TZ" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/shreds,
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/structure/cable{
+ icon_state = "2-5"
+ },
+/turf/open/floor/plasteel,
+/area/ship/hallway/fore)
+"Um" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/machinery/light/small/directional/south,
+/turf/open/floor/carpet,
+/area/ship/crew)
+"Ut" = (
+/obj/structure/bed/pod,
+/obj/structure/curtain/cloth,
+/obj/effect/decal/cleanable/cobweb/cobweb2,
+/turf/open/floor/carpet/nanoweave,
+/area/ship/crew/dorm)
+"Uw" = (
+/obj/item/clothing/under/shorts/black,
+/obj/machinery/door/firedoor/border_only{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/ship/hallway/fore)
+"Uy" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/ship/hallway/fore)
+"UG" = (
+/obj/structure/cable{
+ icon_state = "6-9"
+ },
+/obj/structure/chair/plastic,
+/obj/effect/decal/cleanable/shreds,
+/obj/machinery/holopad/emergency/bar,
+/obj/effect/turf_decal/corner/opaque/black/full,
+/turf/open/floor/plasteel,
+/area/ship/crew)
+"UO" = (
+/obj/machinery/door/firedoor/border_only{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 4
+ },
+/turf/open/floor/plasteel/stairs/old{
+ dir = 8
+ },
+/area/ship/engineering)
+"UQ" = (
+/obj/effect/turf_decal/industrial/warning{
+ dir = 8
+ },
+/obj/effect/turf_decal/number/five,
+/obj/machinery/door/firedoor/border_only{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"Vc" = (
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/firealarm/directional/west,
+/turf/open/floor/plasteel,
+/area/ship/hallway/fore)
+"Vd" = (
+/obj/machinery/door/airlock/maintenance{
+ name = "Observation Blister"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 1
+ },
+/obj/effect/turf_decal/industrial/warning{
+ dir = 1
+ },
+/obj/effect/turf_decal/industrial/warning,
+/turf/open/floor/plasteel/tech,
+/area/ship/crew)
+"Vj" = (
+/obj/item/clothing/under/shorts/green,
+/obj/machinery/door/firedoor/border_only{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/ship/hallway/fore)
+"Vp" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/ship/hallway/central)
+"Vy" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 8
+ },
+/obj/structure/table,
+/obj/machinery/airalarm/directional/east,
+/obj/item/weldingtool,
+/obj/item/reagent_containers/food/drinks/soda_cans/space_mountain_wind,
+/obj/item/reagent_containers/food/drinks/soda_cans/space_mountain_wind{
+ pixel_x = 8;
+ pixel_y = 10
+ },
+/obj/item/reagent_containers/food/drinks/soda_cans/space_mountain_wind{
+ pixel_x = 8
+ },
+/turf/open/floor/carpet,
+/area/ship/hallway/central)
+"VQ" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel,
+/area/ship/hallway/central)
+"VT" = (
+/turf/closed/wall,
+/area/ship/bridge)
+"VW" = (
+/turf/closed/wall,
+/area/ship/engineering)
+"WE" = (
+/obj/structure/sign/poster/contraband/random{
+ pixel_x = 32
+ },
+/turf/open/floor/carpet,
+/area/ship/hallway/central)
+"WH" = (
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/light/small/directional/east,
+/turf/open/floor/plating,
+/area/ship/engineering)
+"WO" = (
+/obj/structure/grille,
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/machinery/door/poddoor/shutters{
+ id = "pillbob";
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/ship/crew/crewtwo)
+"WS" = (
+/obj/machinery/shower{
+ dir = 4
+ },
+/obj/structure/sink{
+ pixel_y = 18;
+ pixel_x = 9
+ },
+/obj/item/bikehorn/rubberducky,
+/obj/machinery/light/small/directional/south,
+/turf/open/floor/plastic,
+/area/ship/hallway/central)
+"Xb" = (
+/obj/machinery/camera{
+ dir = 5
+ },
+/obj/effect/turf_decal/siding/thinplating/dark/end{
+ dir = 8
+ },
+/turf/open/floor/plasteel/stairs{
+ dir = 8
+ },
+/area/ship/hallway/fore)
+"Xh" = (
+/obj/effect/turf_decal/industrial/warning{
+ dir = 1
+ },
+/obj/effect/turf_decal/industrial/warning,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"Xs" = (
+/obj/structure/cable{
+ icon_state = "4-9"
+ },
+/turf/open/floor/plasteel/patterned,
+/area/ship/cargo)
+"XA" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/plasteel,
+/area/ship/hallway/fore)
+"XF" = (
+/obj/structure/chair/plastic{
+ dir = 1
+ },
+/obj/machinery/button/door{
+ dir = 8;
+ pixel_x = 23;
+ pixel_y = 8;
+ name = "Shutter Control";
+ id = "pillbob"
+ },
+/obj/machinery/airalarm/directional/south,
+/turf/open/floor/carpet/nanoweave/red,
+/area/ship/crew/crewtwo)
+"XH" = (
+/obj/effect/turf_decal/industrial/warning,
+/obj/effect/turf_decal/industrial/warning{
+ dir = 1
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"XT" = (
+/obj/structure/cable{
+ icon_state = "6-9"
+ },
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/structure/chair/plastic{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "4-6"
+ },
+/turf/open/floor/carpet,
+/area/ship/crew)
+"Yp" = (
+/obj/structure/chair/plastic{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/carpet/nanoweave/red,
+/area/ship/crew/crewtwo)
+"Yr" = (
+/obj/machinery/power/smes/shuttle{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/turf/open/floor/plating,
+/area/ship/engineering)
+"Ys" = (
+/obj/effect/turf_decal/industrial/warning/corner{
+ dir = 1
+ },
+/obj/effect/turf_decal/industrial/warning/corner{
+ dir = 8
+ },
+/obj/effect/turf_decal/industrial/caution{
+ dir = 8
+ },
+/obj/machinery/door/firedoor/border_only{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/hallway/fore)
+"Yv" = (
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/machinery/door/poddoor{
+ id = "pillbottle";
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/ship/hallway/fore)
+"Yz" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 4
+ },
+/turf/open/floor/carpet,
+/area/ship/hallway/central)
+"YF" = (
+/obj/machinery/power/terminal{
+ dir = 8
+ },
+/obj/structure/table,
+/obj/item/stack/sheet/plastic/twenty,
+/obj/machinery/cell_charger,
+/obj/structure/cable/yellow,
+/turf/open/floor/plating,
+/area/ship/engineering)
+"YR" = (
+/obj/structure/grille,
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/structure/window/reinforced,
+/obj/structure/curtain/cloth/grey,
+/turf/open/floor/plating,
+/area/ship/crew/dorm)
+"YX" = (
+/obj/structure/table/wood,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 1
+ },
+/obj/item/areaeditor/shuttle,
+/obj/item/clothing/glasses/sunglasses{
+ pixel_y = 7
+ },
+/obj/machinery/light/small/directional/south,
+/obj/item/reagent_containers/spray/pepper{
+ pixel_y = -7
+ },
+/turf/open/floor/carpet/nanoweave/blue,
+/area/ship/bridge)
+"ZO" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 4
+ },
+/obj/machinery/power/smes,
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/obj/effect/turf_decal/industrial/outline/yellow,
+/obj/machinery/light/directional/west,
+/turf/open/floor/plasteel/tech/grid,
+/area/ship/hallway/fore)
+"ZP" = (
+/obj/machinery/door/firedoor/border_only{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/ship/hallway/fore)
+"ZS" = (
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/machinery/light/small/built/directional/west,
+/turf/open/floor/plating/airless,
+/area/ship/storage)
+
+(1,1,1) = {"
+Ch
+Ch
+Ch
+Ch
+Ch
+Ch
+Ch
+Ch
+VW
+RL
+RL
+VW
+RL
+RL
+VW
+Ch
+Ch
+Ch
+Ch
+Ch
+Ch
+"}
+(2,1,1) = {"
+Ch
+Ch
+Ch
+Ch
+Ch
+Ch
+Ch
+Ch
+VW
+Yr
+Yr
+xK
+Yr
+Yr
+VW
+Ch
+Ch
+Ch
+Ch
+Ch
+Ch
+"}
+(3,1,1) = {"
+Ch
+Ch
+Ch
+Ch
+Ch
+Ch
+Ch
+Ch
+VW
+mh
+mh
+SR
+mh
+mh
+VW
+Ch
+Ch
+Ch
+Ch
+Ch
+Ch
+"}
+(4,1,1) = {"
+Ch
+Ch
+Ch
+Ch
+Ch
+VW
+VW
+VW
+VW
+ay
+ov
+pc
+WH
+ep
+VW
+VW
+VW
+VW
+Ch
+Ch
+Ch
+"}
+(5,1,1) = {"
+Ch
+Ch
+Ch
+Ch
+Ch
+Ch
+Ch
+VW
+VW
+VW
+VW
+wb
+VW
+VW
+VW
+VW
+Ch
+Ch
+Ch
+Ch
+Ch
+"}
+(6,1,1) = {"
+Ch
+Ch
+Ch
+Ch
+Ch
+Ch
+Ch
+Ch
+Ch
+Ch
+VW
+Mh
+mg
+IJ
+Ch
+Ch
+Ch
+Ch
+Ch
+Ch
+Ch
+"}
+(7,1,1) = {"
+Ch
+Ch
+Ch
+Ch
+Ch
+Ch
+Ch
+Ch
+VW
+VW
+VW
+UO
+VW
+VW
+VW
+Ch
+Ch
+Ch
+Ch
+Ch
+Ch
+"}
+(8,1,1) = {"
+Ch
+Ch
+Ch
+Ch
+Ch
+Ch
+Si
+Si
+VW
+OY
+vO
+CY
+eT
+Ga
+zs
+zs
+zs
+zs
+Ch
+Ch
+Ch
+"}
+(9,1,1) = {"
+Ch
+Ch
+Ch
+Si
+OL
+OL
+Si
+qj
+Si
+VW
+GG
+pF
+NF
+YF
+zs
+xx
+oH
+zs
+zs
+zs
+Ch
+"}
+(10,1,1) = {"
+Ch
+Ch
+Ch
+Si
+xF
+Rm
+kh
+rH
+iB
+Si
+VW
+SD
+VW
+VW
+zs
+EV
+Ji
+zs
+WS
+zs
+Ch
+"}
+(11,1,1) = {"
+Ch
+Ch
+Ch
+Si
+Ax
+ks
+BY
+Ge
+EX
+YR
+yu
+am
+wi
+cX
+zP
+jI
+kM
+qP
+bu
+zs
+Ch
+"}
+(12,1,1) = {"
+Ch
+Ch
+Ch
+Si
+Ut
+AM
+NT
+QM
+NT
+YR
+Io
+Fc
+np
+Sg
+Cs
+Bp
+Bp
+Bp
+Bp
+Bp
+Ch
+"}
+(13,1,1) = {"
+WO
+zB
+eJ
+Si
+Si
+re
+Si
+Si
+Si
+Si
+uL
+CO
+ph
+FB
+br
+Bp
+fy
+ZS
+bN
+Kh
+Ch
+"}
+(14,1,1) = {"
+IY
+qb
+qy
+cN
+qv
+si
+lN
+aT
+tT
+Vp
+Hr
+Jp
+ph
+Ro
+NC
+kZ
+vp
+zQ
+fJ
+GW
+Ch
+"}
+(15,1,1) = {"
+IY
+Nz
+rZ
+cN
+Oj
+gc
+AJ
+Nh
+BD
+Af
+kB
+ss
+zs
+jw
+VQ
+Bp
+vp
+eM
+yh
+Lg
+Ch
+"}
+(16,1,1) = {"
+IY
+qb
+xl
+Vd
+Tk
+qS
+OR
+sM
+iY
+WE
+Yz
+wE
+zs
+Rp
+vb
+Bp
+sc
+lW
+fC
+Kh
+Ch
+"}
+(17,1,1) = {"
+IY
+zE
+nb
+cN
+yf
+XT
+Um
+cN
+zs
+zs
+Vy
+bj
+zs
+zs
+nw
+zL
+zL
+zL
+zL
+zL
+Ch
+"}
+(18,1,1) = {"
+IY
+Yp
+LW
+cN
+kP
+oK
+hG
+QN
+CP
+VT
+VT
+VT
+VT
+VT
+MK
+Fn
+Jr
+RI
+OT
+zL
+Ch
+"}
+(19,1,1) = {"
+IY
+Hp
+XF
+cN
+OQ
+DD
+vX
+UG
+Op
+VT
+HY
+fN
+uX
+VT
+RM
+OA
+Av
+Gr
+bE
+zL
+Ch
+"}
+(20,1,1) = {"
+KP
+HS
+eJ
+cN
+pi
+Hj
+FK
+GC
+mG
+sd
+bH
+hF
+YX
+VT
+LQ
+OA
+og
+Gr
+CM
+zL
+Ch
+"}
+(21,1,1) = {"
+Ch
+Ch
+Ch
+cN
+MT
+Gk
+uC
+Bi
+PV
+VT
+Iy
+Lm
+Gv
+VT
+Dg
+QF
+xY
+Xs
+us
+zL
+Ch
+"}
+(22,1,1) = {"
+Ch
+Ch
+Ch
+cN
+cN
+ms
+cN
+cN
+cN
+VT
+gR
+Dp
+dl
+VT
+zL
+zL
+zL
+Go
+zL
+zL
+Ch
+"}
+(23,1,1) = {"
+Ch
+Ch
+yF
+yF
+yF
+xI
+Mv
+Ly
+Vc
+ta
+ta
+Pe
+PX
+kL
+mB
+ZO
+lk
+oU
+yF
+yF
+yF
+"}
+(24,1,1) = {"
+Ch
+Ch
+yF
+SL
+GA
+Oa
+gv
+OH
+DV
+DV
+gi
+Dj
+FE
+TZ
+ab
+wO
+XA
+Uy
+Pv
+EN
+yF
+"}
+(25,1,1) = {"
+Ch
+Ch
+yF
+xN
+xN
+co
+xN
+ZP
+Uw
+xN
+xN
+iP
+yV
+xN
+zr
+lh
+Vj
+nh
+HD
+eq
+yF
+"}
+(26,1,1) = {"
+Ch
+Ch
+yF
+FS
+kW
+aA
+kW
+EU
+kW
+FS
+Xb
+hQ
+qY
+FS
+kW
+EU
+kW
+aA
+kW
+NH
+yF
+"}
+(27,1,1) = {"
+Ch
+Ch
+yF
+gk
+Tu
+sE
+Tu
+Aj
+Tu
+Pn
+Tu
+iO
+Tu
+QH
+hH
+QX
+Lk
+HF
+ka
+TR
+yF
+"}
+(28,1,1) = {"
+Ch
+Ch
+yF
+aE
+bD
+nk
+bD
+eh
+bD
+vM
+bD
+Bm
+bD
+XH
+bD
+HN
+bD
+nk
+bD
+NE
+yF
+"}
+(29,1,1) = {"
+Ch
+jf
+vz
+Bq
+bD
+nk
+bD
+eh
+bD
+vM
+bD
+Bm
+bD
+XH
+bD
+xq
+bD
+nk
+bD
+Os
+yF
+"}
+(30,1,1) = {"
+Ch
+Ch
+yF
+cn
+bD
+uS
+bD
+xD
+bD
+Jc
+bD
+Xh
+bD
+JT
+bD
+nl
+bD
+uS
+bD
+Hc
+yF
+"}
+(31,1,1) = {"
+Ch
+Ch
+yF
+QK
+bO
+tP
+jb
+sS
+LK
+Ys
+UQ
+tr
+KL
+wc
+ly
+hi
+mA
+wZ
+hm
+gg
+yF
+"}
+(32,1,1) = {"
+Ch
+Ch
+yF
+yF
+cQ
+bb
+bb
+bb
+bb
+Ah
+qF
+yF
+fe
+Yv
+bb
+bb
+bb
+bb
+dO
+yF
+yF
+"}
+(33,1,1) = {"
+Ch
+Ch
+Ch
+yF
+CQ
+oh
+oh
+oh
+oh
+oh
+oh
+nV
+oh
+oh
+oh
+oh
+oh
+oh
+Rb
+yF
+Ch
+"}
diff --git a/_maps/_mod_celadon/shuttles/elysim/elysim_aldaama.dmm b/_maps/_mod_celadon/shuttles/elysium/elysim_aldaama.dmm
similarity index 99%
rename from _maps/_mod_celadon/shuttles/elysim/elysim_aldaama.dmm
rename to _maps/_mod_celadon/shuttles/elysium/elysim_aldaama.dmm
index 38790b71b8e9..17b3d53c17ed 100644
--- a/_maps/_mod_celadon/shuttles/elysim/elysim_aldaama.dmm
+++ b/_maps/_mod_celadon/shuttles/elysium/elysim_aldaama.dmm
@@ -88,7 +88,7 @@
/turf/open/floor/plating,
/area/ship/security/dock)
"aJ" = (
-/obj/structure/sign/elysim,
+/obj/structure/sign/elysium,
/turf/closed/wall,
/area/ship/engineering/engine)
"aM" = (
@@ -118,10 +118,6 @@
icon_state = "4-8"
},
/obj/structure/ore_box,
-/obj/structure/sign/elysim_wall_seal{
- pixel_y = 35;
- pixel_x = 2
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{
dir = 4
},
@@ -204,7 +200,7 @@
/obj/structure/table/wood/poker,
/obj/machinery/light/small/broken/directional/east,
/obj/item/stack/rods,
-/obj/structure/sign/poster/elysim/sonofelysim{
+/obj/structure/sign/poster/elysium/sonofelysium{
pixel_y = 32
},
/turf/open/floor/carpet/green,
@@ -556,7 +552,7 @@
"fm" = (
/obj/effect/turf_decal/box/white,
/obj/effect/decal/cleanable/dirt/dust,
-/obj/item/banner/elysim,
+/obj/item/banner/elysium,
/turf/open/floor/carpet/green,
/area/ship/bridge)
"fE" = (
@@ -917,7 +913,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/structure/sign/poster/elysim/protest{
+/obj/structure/sign/poster/elysium/protest{
pixel_y = 32
},
/turf/open/floor/plasteel/tech,
@@ -1130,7 +1126,7 @@
/turf/closed/wall/r_wall/rust,
/area/ship/engineering/electrical)
"lB" = (
-/obj/structure/sign/elysim,
+/obj/structure/sign/elysium,
/turf/closed/wall/rust,
/area/ship/cargo)
"lG" = (
@@ -1303,7 +1299,7 @@
/turf/open/floor/plasteel/dark,
/area/ship/engineering/electrical)
"ng" = (
-/obj/structure/sign/elysim,
+/obj/structure/sign/elysium,
/turf/closed/wall,
/area/ship/engineering/atmospherics)
"nh" = (
@@ -1638,7 +1634,8 @@
/obj/docking_port/stationary{
dwidth = 15;
height = 15;
- width = 30
+ width = 30;
+ dir = 8
},
/turf/open/floor/plating,
/area/ship/external)
@@ -1666,7 +1663,7 @@
/obj/structure/chair/greyscale{
dir = 4
},
-/obj/structure/sign/poster/elysim/logo{
+/obj/structure/sign/poster/elysium/logo{
pixel_y = -32
},
/turf/open/floor/plasteel/tech,
@@ -2769,7 +2766,7 @@
/obj/effect/decal/cleanable/cobweb,
/obj/effect/decal/cleanable/dirt/dust,
/obj/effect/decal/cleanable/dirt/dust,
-/obj/structure/curtain/cloth/elysim,
+/obj/structure/curtain/cloth/elysium,
/obj/machinery/cryopod{
dir = 4
},
@@ -3037,7 +3034,7 @@
/turf/open/floor/plating/rust,
/area/ship/engineering/engine)
"Eb" = (
-/obj/structure/sign/elysim,
+/obj/structure/sign/elysium,
/turf/closed/wall/rust,
/area/ship/maintenance/fore)
"Eh" = (
@@ -3117,7 +3114,7 @@
/turf/open/floor/plasteel/tech,
/area/ship/engineering)
"Fu" = (
-/obj/structure/sign/elysim,
+/obj/structure/sign/elysium,
/turf/closed/wall/rust,
/area/ship/security/armory)
"Fx" = (
@@ -3603,7 +3600,7 @@
/obj/item/bedsheet/centcom,
/obj/effect/turf_decal/siding/wood,
/obj/effect/decal/cleanable/dirt/dust,
-/obj/structure/curtain/cloth/elysim,
+/obj/structure/curtain/cloth/elysium,
/turf/open/floor/carpet/green,
/area/ship/crew/dorm)
"Lc" = (
@@ -3740,7 +3737,7 @@
pixel_y = -1;
pixel_x = -31
},
-/obj/structure/curtain/cloth/elysim,
+/obj/structure/curtain/cloth/elysium,
/obj/machinery/cryopod{
dir = 4
},
@@ -4319,7 +4316,7 @@
/obj/structure/cable{
icon_state = "0-4"
},
-/obj/structure/sign/poster/elysim/ak47{
+/obj/structure/sign/poster/elysium/ak47{
pixel_y = 32
},
/turf/open/floor/pod,
@@ -4830,8 +4827,8 @@
},
/obj/effect/decal/cleanable/cobweb/cobweb2,
/obj/item/broken_bottle,
-/obj/structure/curtain/cloth/elysim,
-/obj/item/bedsheet/elysim,
+/obj/structure/curtain/cloth/elysium,
+/obj/item/bedsheet/elysium,
/turf/open/floor/carpet/green,
/area/ship/crew/dorm)
"Ys" = (
@@ -4981,7 +4978,7 @@ uP
uP
uP
uP
-Lu
+qM
uP
uP
uP
@@ -5178,7 +5175,7 @@ lh
df
vK
Ko
-qM
+Lu
Lu
uP
uP
diff --git a/_maps/_mod_celadon/shuttles/elysim/elysim_homa.dmm b/_maps/_mod_celadon/shuttles/elysium/elysim_homa.dmm
similarity index 99%
rename from _maps/_mod_celadon/shuttles/elysim/elysim_homa.dmm
rename to _maps/_mod_celadon/shuttles/elysium/elysim_homa.dmm
index 38ef57283109..563f718f834e 100644
--- a/_maps/_mod_celadon/shuttles/elysim/elysim_homa.dmm
+++ b/_maps/_mod_celadon/shuttles/elysium/elysim_homa.dmm
@@ -5,7 +5,7 @@
/area/ship/bridge)
"ap" = (
/obj/machinery/door/poddoor/preopen{
- id = "elysimwindow";
+ id = "elysiumwindow";
dir = 4
},
/obj/structure/window/reinforced/fulltile,
@@ -103,7 +103,7 @@
/area/ship/hallway/central)
"cd" = (
/obj/machinery/button/door{
- id = "elysimwindow";
+ id = "elysiumwindow";
name = "Window Shutters";
pixel_x = 24;
pixel_y = 6;
@@ -367,7 +367,7 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
dir = 1
},
-/obj/structure/curtain/cloth/elysim,
+/obj/structure/curtain/cloth/elysium,
/turf/open/floor/plating,
/area/ship/crew/canteen)
"jJ" = (
@@ -630,7 +630,7 @@
"qm" = (
/obj/machinery/button/door{
dir = 1;
- id = "elysimdoor1";
+ id = "elysiumdoor1";
pixel_y = -24;
pixel_x = -5
},
@@ -644,7 +644,7 @@
/obj/structure/window/reinforced/fulltile,
/obj/structure/grille,
/obj/machinery/door/poddoor/preopen{
- id = "elysimwindow";
+ id = "elysiumwindow";
dir = 1
},
/turf/open/floor/plating,
@@ -824,7 +824,7 @@
/area/ship/bridge)
"wr" = (
/obj/machinery/door/poddoor{
- id = "elysimdoor1";
+ id = "elysiumdoor1";
dir = 4
},
/obj/structure/fans/tiny,
@@ -922,7 +922,7 @@
"yN" = (
/obj/structure/bed,
/obj/item/bedsheet/clown,
-/obj/structure/curtain/cloth/elysim,
+/obj/structure/curtain/cloth/elysium,
/turf/open/floor/plating,
/area/ship/hallway/central)
"zh" = (
@@ -1120,7 +1120,7 @@
/area/ship/cargo)
"Gt" = (
/obj/machinery/door/poddoor{
- id = "elysimdoor2";
+ id = "elysiumdoor2";
dir = 4
},
/obj/structure/fans/tiny,
@@ -1128,7 +1128,7 @@
/area/ship/cargo)
"GS" = (
/obj/machinery/door/poddoor{
- id = "elysimdoor2";
+ id = "elysiumdoor2";
dir = 4
},
/obj/structure/fans/tiny,
@@ -1142,7 +1142,7 @@
dir = 4;
layer = 4.1
},
-/obj/item/banner/elysim,
+/obj/item/banner/elysium,
/turf/open/floor/plasteel,
/area/ship/hallway/central)
"Hy" = (
@@ -1286,7 +1286,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/sign/elysim{
+/obj/structure/sign/elysium{
pixel_x = -32
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{
@@ -1356,7 +1356,7 @@
/area/ship/bridge)
"Nh" = (
/obj/machinery/door/poddoor{
- id = "elysimdoor1";
+ id = "elysiumdoor1";
dir = 4
},
/obj/structure/fans/tiny,
@@ -1524,7 +1524,7 @@
"Rl" = (
/obj/machinery/button/door{
dir = 1;
- id = "elysimdoor2";
+ id = "elysiumdoor2";
pixel_y = -25
},
/obj/structure/catwalk,
@@ -1576,7 +1576,7 @@
dir = 8
},
/obj/machinery/door/poddoor/preopen{
- id = "elysimwindow";
+ id = "elysiumwindow";
dir = 1
},
/obj/structure/grille/indestructable,
@@ -1640,7 +1640,7 @@
/obj/structure/grille/indestructable,
/obj/structure/window/reinforced/fulltile,
/obj/machinery/door/poddoor/preopen{
- id = "elysimwindow"
+ id = "elysiumwindow"
},
/turf/open/floor/plating,
/area/ship/hallway/central)
@@ -1718,7 +1718,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/sign/elysim{
+/obj/structure/sign/elysium{
pixel_x = -32
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
diff --git a/_maps/_mod_celadon/shuttles/elysim/elysim_iron_maiden.dmm b/_maps/_mod_celadon/shuttles/elysium/elysim_iron_maiden.dmm
similarity index 99%
rename from _maps/_mod_celadon/shuttles/elysim/elysim_iron_maiden.dmm
rename to _maps/_mod_celadon/shuttles/elysium/elysim_iron_maiden.dmm
index 34e3ca8fcf00..adef1670448c 100644
--- a/_maps/_mod_celadon/shuttles/elysim/elysim_iron_maiden.dmm
+++ b/_maps/_mod_celadon/shuttles/elysium/elysim_iron_maiden.dmm
@@ -14,7 +14,7 @@
/obj/machinery/suit_storage_unit/inherit{
req_access_txt = "147"
},
-/obj/structure/sign/poster/elysim/random{
+/obj/structure/sign/poster/elysium/random{
pixel_y = -32
},
/obj/effect/decal/cleanable/dirt/dust,
@@ -41,8 +41,8 @@
/area/ship/crew/cryo)
"cc" = (
/obj/structure/bed,
-/obj/item/bedsheet/elysim,
-/obj/structure/curtain/cloth/elysim,
+/obj/item/bedsheet/elysium,
+/obj/structure/curtain/cloth/elysium,
/turf/open/floor/carpet/black,
/area/ship/crew/cryo)
"cW" = (
@@ -694,7 +694,7 @@
/obj/machinery/firealarm/directional/west,
/obj/structure/cable,
/obj/effect/decal/cleanable/oil,
-/obj/item/banner/elysim,
+/obj/item/banner/elysium,
/obj/effect/decal/cleanable/dirt/dust,
/obj/effect/decal/cleanable/dirt/dust,
/obj/effect/decal/cleanable/dirt/dust,
@@ -1233,7 +1233,7 @@
/obj/machinery/suit_storage_unit/inherit{
req_access_txt = "147"
},
-/obj/structure/sign/poster/elysim/random{
+/obj/structure/sign/poster/elysium/random{
pixel_y = 32
},
/obj/item/clothing/suit/space/elysm/junk,
@@ -1256,7 +1256,7 @@
/turf/open/floor/plasteel/tech/grid,
/area/ship/crew/cryo)
"RX" = (
-/obj/structure/sign/poster/elysim/random{
+/obj/structure/sign/poster/elysium/random{
pixel_x = 32
},
/obj/item/gun/ballistic/automatic/hmg/skm_lmg/extended,
@@ -1628,7 +1628,7 @@
/obj/item/clothing/mask/cigarette/rollie/cannabis{
pixel_y = 13
},
-/obj/item/banner/elysim,
+/obj/item/banner/elysium,
/turf/open/floor/plasteel/mono/dark,
/area/ship/cargo)
diff --git a/_maps/_mod_celadon/shuttles/independent/independent_alone.dmm b/_maps/_mod_celadon/shuttles/independent/independent_alone.dmm
index 44fe2d790bd3..caa70dd0cc75 100644
--- a/_maps/_mod_celadon/shuttles/independent/independent_alone.dmm
+++ b/_maps/_mod_celadon/shuttles/independent/independent_alone.dmm
@@ -53,10 +53,6 @@
dir = 8
},
/obj/structure/cable,
-/obj/structure/closet/wall{
- name = "Tools";
- pixel_y = -30
- },
/obj/item/storage/toolbox/mechanical,
/obj/item/storage/toolbox/electrical,
/obj/item/storage/firstaid/advanced,
@@ -70,6 +66,9 @@
/obj/item/clothing/head/welding,
/obj/item/stack/sheet/glass/five,
/obj/item/stack/sheet/metal/five,
+/obj/structure/closet/wall/directional/south{
+ name = "Tools"
+ },
/turf/open/floor/plasteel,
/area/ship/bridge)
"jd" = (
@@ -163,11 +162,6 @@
/obj/item/reagent_containers/spray/cleaner,
/obj/item/mop,
/obj/item/reagent_containers/glass/bucket,
-/obj/structure/closet/wall{
- dir = 1;
- name = "Cleaning tools";
- pixel_y = -30
- },
/obj/machinery/shower{
dir = 8
},
@@ -178,6 +172,9 @@
/obj/structure/window/reinforced/spawner{
dir = 1
},
+/obj/structure/closet/wall/directional/south{
+ name = "Cleaning tools"
+ },
/turf/open/floor/plasteel/freezer,
/area/ship/bridge)
"ut" = (
@@ -250,15 +247,13 @@
/obj/item/storage/box/donkpockets,
/obj/item/storage/box/donkpockets/donkpocketpizza,
/obj/effect/decal/cleanable/dirt/dust,
-/obj/structure/closet/wall{
- pixel_y = 30
- },
/obj/structure/table,
/obj/item/reagent_containers/food/snacks/chips,
/obj/item/reagent_containers/food/snacks/chips,
/obj/item/reagent_containers/food/snacks/chips,
/obj/item/reagent_containers/food/snacks/chips,
/obj/item/reagent_containers/food/snacks/chips,
+/obj/structure/closet/wall/directional/north,
/turf/open/floor/plasteel/dark,
/area/ship/bridge)
"Hy" = (
diff --git a/_maps/_mod_celadon/shuttles/independent/independent_box.dmm b/_maps/_mod_celadon/shuttles/independent/independent_box.dmm
index 0e1e4e9439b5..0538284d1cf2 100644
--- a/_maps/_mod_celadon/shuttles/independent/independent_box.dmm
+++ b/_maps/_mod_celadon/shuttles/independent/independent_box.dmm
@@ -1241,15 +1241,13 @@
/obj/item/clothing/suit/longcoat/chemist,
/obj/item/reagent_containers/dropper,
/obj/item/storage/box/pillbottles,
-/obj/structure/closet/wall/white/chem{
- pixel_y = 32
- },
/obj/effect/turf_decal/spline/fancy/opaque/bottlegreen{
dir = 1
},
/obj/effect/turf_decal/spline/fancy/opaque/bottlegreen/corner{
dir = 8
},
+/obj/structure/closet/wall/white/directional/north,
/turf/open/floor/plasteel/showroomfloor,
/area/ship/crew/toilet)
"iv" = (
diff --git a/_maps/_mod_celadon/shuttles/independent/independent_bubble.dmm b/_maps/_mod_celadon/shuttles/independent/independent_bubble.dmm
index 731811045922..13b4171868bb 100644
--- a/_maps/_mod_celadon/shuttles/independent/independent_bubble.dmm
+++ b/_maps/_mod_celadon/shuttles/independent/independent_bubble.dmm
@@ -272,9 +272,6 @@
pixel_y = -11
},
/obj/machinery/power/apc/auto_name/directional/west,
-/obj/structure/closet/wall/blue{
- pixel_y = 32
- },
/obj/item/areaeditor/shuttle,
/obj/item/spacecash/bundle/c1000,
/obj/item/spacecash/bundle/c1000,
@@ -287,6 +284,7 @@
/obj/structure/cable{
icon_state = "0-2"
},
+/obj/structure/closet/wall/blue/directional/north,
/turf/open/floor/plasteel,
/area/ship/bridge)
"lV" = (
diff --git a/_maps/_mod_celadon/shuttles/independent/independent_lagoon.dmm b/_maps/_mod_celadon/shuttles/independent/independent_lagoon.dmm
index 7154a2d63a61..dfc695b30a33 100644
--- a/_maps/_mod_celadon/shuttles/independent/independent_lagoon.dmm
+++ b/_maps/_mod_celadon/shuttles/independent/independent_lagoon.dmm
@@ -278,10 +278,6 @@
/area/ship/crew/dorm)
"bC" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
-/obj/structure/closet/secure_closet/freezer/kitchen/wall{
- dir = 4;
- pixel_x = -28
- },
/obj/item/reagent_containers/food/snacks/meat/slab,
/obj/item/reagent_containers/food/snacks/meat/slab,
/obj/item/reagent_containers/food/snacks/meat/slab,
@@ -303,6 +299,7 @@
/obj/item/reagent_containers/food/snacks/meat/slab,
/obj/item/reagent_containers/food/snacks/meat/slab,
/obj/item/reagent_containers/food/snacks/meat/slab,
+/obj/structure/closet/secure_closet/freezer/kitchen/wall/directional/west,
/turf/open/floor/plasteel,
/area/ship/crew/canteen/kitchen)
"bD" = (
@@ -1963,10 +1960,6 @@
/turf/open/floor/wood,
/area/ship/crew)
"mM" = (
-/obj/structure/closet/wall/white/med{
- dir = 4;
- pixel_x = -28
- },
/obj/item/healthanalyzer,
/obj/item/clothing/gloves/color/latex/nitrile,
/obj/item/clothing/glasses/hud/health,
@@ -1995,6 +1988,7 @@
/obj/effect/turf_decal/siding/blue{
dir = 8
},
+/obj/structure/closet/wall/white/directional/west,
/turf/open/floor/plasteel/white,
/area/ship/medical)
"mN" = (
diff --git a/_maps/_mod_celadon/shuttles/independent/independent_mimos.dmm b/_maps/_mod_celadon/shuttles/independent/independent_mimos.dmm
index a01a862cbfd6..cc9cf1b1af02 100644
--- a/_maps/_mod_celadon/shuttles/independent/independent_mimos.dmm
+++ b/_maps/_mod_celadon/shuttles/independent/independent_mimos.dmm
@@ -295,7 +295,7 @@
/obj/effect/turf_decal/corner/opaque/white/diagonal,
/obj/item/gun/ballistic/revolver/russian{
pixel_y = 6;
- pixel_x = 4
+ pixel_x = 2
},
/turf/open/floor/plating,
/area/ship/crew)
@@ -1167,7 +1167,6 @@
},
/obj/structure/salvageable/protolathe,
/obj/effect/decal/cleanable/cobweb,
-/turf/open/floor/mineral/bananium,
/area/ship/engineering/atmospherics)
"nD" = (
/obj/structure/railing{
@@ -1851,7 +1850,6 @@
/obj/item/circuitboard/computer/rdconsole,
/obj/item/circuitboard/machine/rdserver,
/obj/item/ammo_box/c10mm/hp,
-/turf/open/floor/mineral/bananium,
/area/ship/engineering/atmospherics)
"vH" = (
/obj/machinery/atmospherics/components/unary/tank/air,
@@ -3786,7 +3784,6 @@
/obj/item/clothing/shoes/clown_shoes/banana_shoes,
/obj/structure/bed,
/obj/item/reagent_containers/syringe/contraband/krokodil,
-/obj/item/coin/bananium,
/obj/item/reagent_containers/syringe/contraband/morphine,
/turf/open/floor/plating,
/area/ship/engineering/atmospherics)
diff --git a/_maps/_mod_celadon/shuttles/independent/independent_moduleship.dmm b/_maps/_mod_celadon/shuttles/independent/independent_moduleship.dmm
new file mode 100644
index 000000000000..10c77510b522
--- /dev/null
+++ b/_maps/_mod_celadon/shuttles/independent/independent_moduleship.dmm
@@ -0,0 +1,657 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"b" = (
+/obj/machinery/power/smes/shuttle/precharged{
+ dir = 4
+ },
+/obj/structure/window/plasma/reinforced{
+ dir = 8
+ },
+/obj/structure/window/plasma/reinforced,
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"c" = (
+/turf/closed/wall/mineral/titanium,
+/area/ship/bridge)
+"d" = (
+/obj/structure/window/plasma/reinforced{
+ dir = 8
+ },
+/obj/structure/window/plasma/reinforced{
+ dir = 1
+ },
+/obj/machinery/power/smes/shuttle/precharged{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"f" = (
+/turf/open/floor/plating,
+/area/ship/bridge)
+"h" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/computer/helm{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"i" = (
+/obj/machinery/power/terminal{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"k" = (
+/obj/structure/cable{
+ icon_state = "4-9"
+ },
+/obj/structure/cable{
+ icon_state = "4-10"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"m" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/power/shieldwallgen/atmos{
+ anchored = 1;
+ id = "module"
+ },
+/obj/structure/cable{
+ icon_state = "0-10"
+ },
+/obj/machinery/door/poddoor{
+ dir = 4;
+ id = "sgi_cargo1"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"o" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"p" = (
+/obj/machinery/power/shieldwallgen/atmos{
+ dir = 1;
+ anchored = 1;
+ id = "module"
+ },
+/obj/structure/cable{
+ icon_state = "0-9"
+ },
+/obj/structure/cable{
+ icon_state = "4-9"
+ },
+/obj/machinery/door/poddoor{
+ dir = 4;
+ id = "sgi_cargo1"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"q" = (
+/obj/structure/window/plasma/reinforced{
+ dir = 4
+ },
+/obj/structure/window/plasma/reinforced,
+/obj/machinery/power/terminal{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "0-1"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"r" = (
+/obj/machinery/power/shuttle/engine/electric{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"s" = (
+/obj/machinery/power/apc/auto_name/directional/north,
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"u" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/structure/cable{
+ icon_state = "4-9"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"v" = (
+/obj/docking_port/mobile{
+ can_move_docking_ports = 1;
+ dir = 8;
+ launch_status = 0;
+ port_direction = 4;
+ preferred_direction = 8
+ },
+/obj/machinery/door/poddoor{
+ dir = 4;
+ id = "sgi_cargo3"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"w" = (
+/turf/template_noop,
+/area/template_noop)
+"x" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/structure/chair/comfy/shuttle{
+ dir = 4;
+ name = "Helm"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"z" = (
+/obj/machinery/power/shieldwallgen/atmos{
+ dir = 1;
+ anchored = 1;
+ id = "module2"
+ },
+/obj/structure/cable{
+ icon_state = "0-5"
+ },
+/obj/structure/cable{
+ icon_state = "5-8"
+ },
+/obj/machinery/door/poddoor{
+ dir = 4;
+ id = "sgi_cargo3"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"B" = (
+/obj/machinery/door/poddoor{
+ dir = 4;
+ id = "sgi_cargo1"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"C" = (
+/obj/machinery/cryopod,
+/obj/machinery/computer/cryopod/directional/east{
+ dir = 1;
+ pixel_y = 17;
+ pixel_x = 0
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"D" = (
+/obj/structure/closet/wall/orange{
+ name = "fuel locker";
+ pixel_y = 30;
+ dir = 1
+ },
+/obj/item/stack/sheet/mineral/plasma/twenty,
+/turf/open/floor/plating,
+/area/ship/bridge)
+"F" = (
+/obj/machinery/power/ship_gravity,
+/obj/effect/turf_decal/industrial/outline/yellow,
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"G" = (
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/obj/effect/turf_decal/industrial/outline/yellow,
+/obj/machinery/power/port_gen/pacman,
+/turf/open/floor/plating,
+/area/ship/bridge)
+"I" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"K" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"L" = (
+/obj/effect/landmark/subship{
+ subship_template = /datum/map_template/shuttle/subshuttles/independent_module_two
+ },
+/turf/template_noop,
+/area/template_noop)
+"M" = (
+/obj/structure/cable{
+ icon_state = "5-8"
+ },
+/obj/structure/cable{
+ icon_state = "6-8"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"N" = (
+/obj/effect/landmark/subship{
+ subship_template = /datum/map_template/shuttle/subshuttles/independent_module_one
+ },
+/turf/template_noop,
+/area/template_noop)
+"O" = (
+/obj/machinery/button/door{
+ id = "sgi_cargo3";
+ name = "blast door control";
+ pixel_x = -5;
+ pixel_y = 24
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/button/shieldwallgen{
+ id = "module2";
+ pixel_y = 22;
+ pixel_x = 4
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"P" = (
+/turf/closed/wall/mineral/titanium/nodiagonal,
+/area/ship/bridge)
+"R" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"T" = (
+/obj/machinery/button/door{
+ id = "sgi_cargo1";
+ name = "blast door control";
+ pixel_x = 5;
+ pixel_y = 24
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/button/shieldwallgen{
+ id = "module";
+ pixel_y = 22;
+ pixel_x = -5
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"U" = (
+/obj/structure/window/plasma/reinforced{
+ dir = 4
+ },
+/obj/structure/window/plasma/reinforced{
+ dir = 1
+ },
+/obj/machinery/power/terminal{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"V" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-6"
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"W" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/power/shieldwallgen/atmos{
+ anchored = 1;
+ id = "module2"
+ },
+/obj/structure/cable{
+ icon_state = "0-6"
+ },
+/obj/machinery/door/poddoor{
+ dir = 4;
+ id = "sgi_cargo3"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"X" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"Z" = (
+/obj/machinery/power/smes/engineering,
+/obj/structure/cable{
+ icon_state = "0-1"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+
+(1,1,1) = {"
+w
+w
+w
+w
+w
+w
+w
+N
+w
+"}
+(2,1,1) = {"
+w
+w
+w
+w
+w
+w
+w
+w
+w
+"}
+(3,1,1) = {"
+w
+w
+w
+w
+w
+w
+w
+w
+w
+"}
+(4,1,1) = {"
+w
+w
+w
+w
+w
+w
+w
+w
+w
+"}
+(5,1,1) = {"
+w
+w
+w
+w
+w
+w
+w
+w
+w
+"}
+(6,1,1) = {"
+w
+w
+w
+w
+w
+w
+w
+w
+w
+"}
+(7,1,1) = {"
+w
+w
+w
+w
+w
+w
+w
+w
+w
+"}
+(8,1,1) = {"
+w
+w
+P
+W
+v
+z
+P
+w
+w
+"}
+(9,1,1) = {"
+r
+P
+P
+O
+k
+f
+P
+P
+r
+"}
+(10,1,1) = {"
+d
+f
+f
+o
+o
+f
+f
+F
+b
+"}
+(11,1,1) = {"
+U
+I
+I
+K
+x
+I
+I
+R
+q
+"}
+(12,1,1) = {"
+w
+P
+D
+o
+h
+f
+G
+P
+w
+"}
+(13,1,1) = {"
+w
+P
+s
+V
+X
+I
+i
+P
+w
+"}
+(14,1,1) = {"
+w
+P
+C
+o
+u
+I
+Z
+P
+w
+"}
+(15,1,1) = {"
+w
+c
+P
+T
+M
+f
+P
+c
+w
+"}
+(16,1,1) = {"
+w
+w
+P
+m
+B
+p
+P
+L
+w
+"}
+(17,1,1) = {"
+w
+w
+w
+w
+w
+w
+w
+w
+w
+"}
+(18,1,1) = {"
+w
+w
+w
+w
+w
+w
+w
+w
+w
+"}
+(19,1,1) = {"
+w
+w
+w
+w
+w
+w
+w
+w
+w
+"}
+(20,1,1) = {"
+w
+w
+w
+w
+w
+w
+w
+w
+w
+"}
+(21,1,1) = {"
+w
+w
+w
+w
+w
+w
+w
+w
+w
+"}
+(22,1,1) = {"
+w
+w
+w
+w
+w
+w
+w
+w
+w
+"}
+(23,1,1) = {"
+w
+w
+w
+w
+w
+w
+w
+w
+w
+"}
+(24,1,1) = {"
+w
+w
+w
+w
+w
+w
+w
+w
+w
+"}
+(25,1,1) = {"
+w
+w
+w
+w
+w
+w
+w
+w
+w
+"}
diff --git a/_maps/_mod_celadon/shuttles/independent/independent_qurk.dmm b/_maps/_mod_celadon/shuttles/independent/independent_qurk.dmm
index 7395c4b49962..4685ad96ba9d 100644
--- a/_maps/_mod_celadon/shuttles/independent/independent_qurk.dmm
+++ b/_maps/_mod_celadon/shuttles/independent/independent_qurk.dmm
@@ -859,10 +859,6 @@
/obj/item/flashlight,
/obj/item/flashlight,
/obj/item/flashlight,
-/obj/structure/closet/wall/white/med{
- dir = 4;
- pixel_x = -28
- },
/obj/item/clothing/under/color/grey,
/obj/item/clothing/under/color/grey,
/obj/item/clothing/under/color/grey,
@@ -880,6 +876,7 @@
/obj/item/storage/backpack/duffelbag/med,
/obj/item/storage/backpack/duffelbag/med,
/obj/item/storage/backpack/duffelbag/med,
+/obj/structure/closet/wall/white/directional/west,
/turf/open/floor/plastic,
/area/ship/crew/cryo)
"bS" = (
diff --git a/_maps/_mod_celadon/shuttles/independent/independent_rube_goldberg.dmm b/_maps/_mod_celadon/shuttles/independent/independent_rube_goldberg.dmm
index b20e3f804c0e..4a53785fd6db 100644
--- a/_maps/_mod_celadon/shuttles/independent/independent_rube_goldberg.dmm
+++ b/_maps/_mod_celadon/shuttles/independent/independent_rube_goldberg.dmm
@@ -1040,13 +1040,6 @@
/area/ship/engineering/engine)
"jG" = (
/obj/effect/turf_decal/corner/opaque/yellow/border,
-/obj/machinery/computer/helm{
- dir = 1;
- icon_keyboard = null;
- icon_screen = null;
- icon_state = "steering_wheel";
- pixel_y = 6
- },
/obj/structure/table/wood,
/turf/open/floor/mineral/titanium,
/area/ship/bridge)
@@ -5089,7 +5082,6 @@
"Yj" = (
/obj/item/bedsheet/clown,
/obj/item/clothing/head/clownmitre,
-/turf/closed/wall/mineral/bananium,
/area/ship/medical)
"Yl" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{
diff --git a/_maps/_mod_celadon/shuttles/independent/independent_schmiedeberg.dmm b/_maps/_mod_celadon/shuttles/independent/independent_schmiedeberg.dmm
index 350a0f7b598a..241838602a97 100644
--- a/_maps/_mod_celadon/shuttles/independent/independent_schmiedeberg.dmm
+++ b/_maps/_mod_celadon/shuttles/independent/independent_schmiedeberg.dmm
@@ -348,11 +348,6 @@
/obj/item/storage/box/beakers,
/obj/item/geiger_counter,
/obj/item/reagent_scanner,
-/obj/structure/closet/wall/white/chem{
- dir = 1;
- name = "Pharmacist's Locker";
- pixel_y = -28
- },
/obj/item/storage/belt/medical,
/obj/item/reagent_containers/spray,
/obj/item/reagent_containers/spray,
@@ -371,6 +366,9 @@
/obj/item/hand_labeler_refill,
/obj/item/storage/firstaid/medical,
/obj/item/wrench/medical,
+/obj/structure/closet/wall/white/directional/south{
+ name = "Pharmacist's Locker"
+ },
/turf/open/floor/mineral/titanium/white,
/area/ship/medical)
"eu" = (
diff --git a/_maps/_mod_celadon/shuttles/independent/independent_shepherd.dmm b/_maps/_mod_celadon/shuttles/independent/independent_shepherd.dmm
index 1d035644af0c..f7747fcd3b1d 100644
--- a/_maps/_mod_celadon/shuttles/independent/independent_shepherd.dmm
+++ b/_maps/_mod_celadon/shuttles/independent/independent_shepherd.dmm
@@ -1490,14 +1490,12 @@
/obj/item/lighter,
/obj/item/toner,
/obj/item/table_bell/brass,
-/obj/structure/closet/wall{
- dir = 1;
- name = "supply closet";
- pixel_y = -30
- },
/obj/effect/turf_decal/siding/wood{
dir = 6
},
+/obj/structure/closet/wall/directional/south{
+ name = "supply closet"
+ },
/turf/open/floor/wood,
/area/ship/crew/library)
"nM" = (
diff --git a/_maps/_mod_celadon/shuttles/independent/independent_skipjack.dmm b/_maps/_mod_celadon/shuttles/independent/independent_skipjack.dmm
index c8757bfe2497..2de6d4a2e12a 100644
--- a/_maps/_mod_celadon/shuttles/independent/independent_skipjack.dmm
+++ b/_maps/_mod_celadon/shuttles/independent/independent_skipjack.dmm
@@ -1011,7 +1011,7 @@
/area/ship/medical)
"ur" = (
/obj/structure/closet/emcloset/wall{
- dir = 8;
+ dir = 4;
pixel_x = -5
},
/turf/closed/wall/r_wall,
@@ -1864,7 +1864,7 @@
/area/ship/security/armory)
"Po" = (
/obj/structure/closet/secure_closet/wall{
- dir = 4;
+ dir = 8;
icon_state = "sec_wall";
name = "firearms locker";
pixel_x = -28;
diff --git a/_maps/_mod_celadon/shuttles/inteq/inteq_hammerhead.dmm b/_maps/_mod_celadon/shuttles/inteq/inteq_hammerhead.dmm
index 88845f67fe76..dd15dfbf8c03 100644
--- a/_maps/_mod_celadon/shuttles/inteq/inteq_hammerhead.dmm
+++ b/_maps/_mod_celadon/shuttles/inteq/inteq_hammerhead.dmm
@@ -1201,7 +1201,6 @@
pixel_y = 12;
pixel_x = 8
},
-/obj/item/stamp/inteq/celadon,
/turf/open/floor/carpet/royalblue,
/area/ship/crew)
"gX" = (
@@ -1358,7 +1357,7 @@
/obj/structure/table/reinforced,
/obj/item/paper_bin,
/obj/item/pen/fountain,
-/obj/item/stamp/inteq/celadon,
+/obj/item/stamp/inteq/vanguard,
/turf/open/floor/plasteel/dark,
/area/ship/bridge)
"hS" = (
diff --git a/_maps/_mod_celadon/shuttles/nanotrasen/nanotrasen_delta.dmm b/_maps/_mod_celadon/shuttles/nanotrasen/nanotrasen_delta.dmm
index 020adf64cf56..ed44980b9bf5 100644
--- a/_maps/_mod_celadon/shuttles/nanotrasen/nanotrasen_delta.dmm
+++ b/_maps/_mod_celadon/shuttles/nanotrasen/nanotrasen_delta.dmm
@@ -1016,13 +1016,10 @@
dir = 1
},
/obj/effect/turf_decal/corner/opaque/bar,
-/obj/structure/closet/secure_closet/freezer/kitchen/wall{
- dir = 1;
- pixel_y = -32
- },
/obj/effect/spawner/lootdrop/ration,
/obj/effect/spawner/lootdrop/ration,
/obj/item/storage/cans/sixbeer,
+/obj/structure/closet/secure_closet/freezer/kitchen/wall/directional/south,
/turf/open/floor/plasteel,
/area/ship/crew)
"dS" = (
diff --git a/_maps/_mod_celadon/shuttles/nanotrasen/nanotrasen_heron.dmm b/_maps/_mod_celadon/shuttles/nanotrasen/nanotrasen_heron.dmm
index 09f902d07cdb..da664bbc6cdf 100644
--- a/_maps/_mod_celadon/shuttles/nanotrasen/nanotrasen_heron.dmm
+++ b/_maps/_mod_celadon/shuttles/nanotrasen/nanotrasen_heron.dmm
@@ -12564,7 +12564,8 @@
},
/obj/structure/closet/wall/white/med{
name = "medbay equipment locker";
- pixel_y = 28
+ pixel_y = 28;
+ dir = 1
},
/obj/item/clothing/suit/longcoat/brig_phys,
/obj/item/clothing/under/rank/medical/doctor/green,
diff --git a/_maps/_mod_celadon/shuttles/nanotrasen/nanotrasen_savior.dmm b/_maps/_mod_celadon/shuttles/nanotrasen/nanotrasen_savior.dmm
index 352df012f5d9..d2cbb0c7e68a 100644
--- a/_maps/_mod_celadon/shuttles/nanotrasen/nanotrasen_savior.dmm
+++ b/_maps/_mod_celadon/shuttles/nanotrasen/nanotrasen_savior.dmm
@@ -377,6 +377,9 @@
/obj/machinery/recharger,
/obj/structure/cable,
/obj/machinery/power/apc/auto_name/directional/south,
+/obj/item/coin/titanium{
+ pixel_x = 11
+ },
/turf/open/floor/plasteel/dark,
/area/ship/bridge)
"fJ" = (
@@ -3446,10 +3449,6 @@
dir = 4
},
/obj/structure/window/reinforced/spawner,
-/obj/structure/closet/wall{
- dir = 8;
- pixel_x = 32
- },
/obj/structure/table,
/obj/effect/turf_decal/spline/fancy/transparent/black,
/obj/item/storage/box/cups,
@@ -3465,6 +3464,7 @@
/obj/item/kitchen/spoon/plastic,
/obj/item/kitchen/spoon/plastic,
/obj/item/kitchen/fork/plastic,
+/obj/structure/closet/wall/directional/east,
/turf/open/floor/plasteel,
/area/ship/crew/canteen)
"Rz" = (
@@ -3988,10 +3988,6 @@
pixel_x = 7;
pixel_y = 8
},
-/obj/item/coin/adamantine{
- pixel_x = 5;
- pixel_y = 4
- },
/turf/open/floor/carpet/royalblue,
/area/ship/crew)
"WE" = (
@@ -4141,6 +4137,7 @@
/obj/effect/turf_decal/corner/opaque/ntblue/diagonal{
dir = 4
},
+/obj/structure/closet/emcloset/wall/directional/south,
/turf/open/floor/plasteel/dark,
/area/ship/bridge)
"Ys" = (
@@ -4190,11 +4187,6 @@
/area/ship/storage)
"YR" = (
/obj/structure/chair/comfy/shuttle,
-/obj/structure/closet/emcloset/wall{
- dir = 1;
- pixel_y = -28;
- pixel_x = 32
- },
/turf/open/floor/plasteel/dark,
/area/ship/bridge)
"YU" = (
diff --git a/_maps/_mod_celadon/shuttles/nanotrasen/nanotrasen_skipper.dmm b/_maps/_mod_celadon/shuttles/nanotrasen/nanotrasen_skipper.dmm
index 26b6e02e12ca..c0ca3e291169 100644
--- a/_maps/_mod_celadon/shuttles/nanotrasen/nanotrasen_skipper.dmm
+++ b/_maps/_mod_celadon/shuttles/nanotrasen/nanotrasen_skipper.dmm
@@ -2868,15 +2868,14 @@
pixel_x = 4;
pixel_y = 8
},
-/obj/item/coin/adamantine{
- pixel_x = -12;
- pixel_y = -3
- },
/obj/item/stamp/captain{
pixel_y = 13;
pixel_x = -8
},
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4,
+/obj/item/coin/titanium{
+ pixel_x = -8
+ },
/turf/open/floor/wood,
/area/ship/crew/crewtwo)
"wt" = (
diff --git a/_maps/_mod_celadon/shuttles/solgov/solgov_tomahawk.dmm b/_maps/_mod_celadon/shuttles/solgov/solgov_tomahawk.dmm
index 1a48412ee77a..e04ed2d559c3 100644
--- a/_maps/_mod_celadon/shuttles/solgov/solgov_tomahawk.dmm
+++ b/_maps/_mod_celadon/shuttles/solgov/solgov_tomahawk.dmm
@@ -1366,12 +1366,10 @@
/turf/open/floor/plasteel/white,
/area/ship/security/prison)
"qq" = (
-/obj/structure/closet/emcloset/wall{
- pixel_y = 28
- },
/obj/effect/turf_decal/techfloor{
dir = 1
},
+/obj/structure/closet/emcloset/wall/directional/north,
/turf/open/floor/plasteel/white,
/area/ship/crew/janitor)
"qB" = (
@@ -3571,7 +3569,6 @@
},
/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2,
/obj/structure/closet/secure_closet/wall{
- dir = 1;
icon_door = "med_wall";
name = "medicine locker";
pixel_y = -28;
@@ -4341,11 +4338,8 @@
/obj/machinery/navbeacon/wayfinding{
location = "Storage Bay"
},
-/obj/structure/closet/firecloset/wall{
- dir = 1;
- pixel_y = -28
- },
/obj/effect/turf_decal/techfloor,
+/obj/structure/closet/firecloset/wall/directional/south,
/turf/open/floor/plasteel/white,
/area/ship/crew/janitor)
"VD" = (
@@ -4423,16 +4417,13 @@
/obj/structure/cable{
icon_state = "2-8"
},
-/obj/structure/closet/firecloset/wall{
- dir = 8;
- pixel_x = 28
- },
/obj/effect/turf_decal/techfloor/orange{
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
dir = 9
},
+/obj/structure/closet/firecloset/wall/directional/east,
/turf/open/floor/plasteel/tech,
/area/ship/engineering)
"Wt" = (
diff --git a/_maps/_mod_celadon/shuttles/subshuttles/independent_module_one.dmm b/_maps/_mod_celadon/shuttles/subshuttles/independent_module_one.dmm
new file mode 100644
index 000000000000..9f5b50b36d30
--- /dev/null
+++ b/_maps/_mod_celadon/shuttles/subshuttles/independent_module_one.dmm
@@ -0,0 +1,282 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/turf/template_noop,
+/area/template_noop)
+"d" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"f" = (
+/obj/machinery/power/shuttle/engine/electric{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"g" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"i" = (
+/obj/machinery/power/smes/shuttle/precharged{
+ dir = 4
+ },
+/obj/structure/window/plasma/reinforced{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"k" = (
+/obj/machinery/power/terminal{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"l" = (
+/obj/machinery/computer/helm{
+ dir = 8
+ },
+/obj/machinery/button/door{
+ id = "sgi_cargo4";
+ name = "blast door control";
+ pixel_x = 24;
+ pixel_y = -4;
+ dir = 8
+ },
+/obj/machinery/button/shieldwallgen{
+ id = "module3";
+ pixel_y = 7;
+ pixel_x = 22;
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"q" = (
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"u" = (
+/turf/closed/wall/mineral/titanium,
+/area/ship/bridge)
+"v" = (
+/obj/machinery/power/terminal{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "0-1"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"w" = (
+/obj/machinery/power/terminal{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"x" = (
+/turf/open/floor/plating,
+/area/ship/bridge)
+"B" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"C" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/power/shieldwallgen/atmos{
+ anchored = 1;
+ id = "module3"
+ },
+/obj/structure/cable{
+ icon_state = "0-10"
+ },
+/obj/machinery/door/poddoor{
+ dir = 4;
+ id = "sgi_cargo4"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"D" = (
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/cable{
+ icon_state = "5-8"
+ },
+/obj/structure/cable{
+ icon_state = "6-8"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"E" = (
+/obj/machinery/power/smes/engineering,
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"F" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 4;
+ name = "Helm"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"I" = (
+/obj/docking_port/mobile{
+ can_move_docking_ports = 1;
+ dir = 4;
+ launch_status = 0;
+ port_direction = 2;
+ preferred_direction = 4
+ },
+/obj/machinery/button/door{
+ id = "sgi_cargo4";
+ name = "blast door control";
+ pixel_x = 8;
+ dir = 4
+ },
+/turf/closed/wall/mineral/titanium/nodiagonal,
+/area/ship/bridge)
+"S" = (
+/obj/machinery/power/apc/auto_name/directional/north,
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"U" = (
+/turf/closed/wall/mineral/titanium/nodiagonal,
+/area/ship/bridge)
+"X" = (
+/obj/machinery/power/terminal{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"Z" = (
+/obj/machinery/power/shieldwallgen/atmos{
+ anchored = 1;
+ id = "module3";
+ dir = 1
+ },
+/obj/structure/cable{
+ icon_state = "0-9"
+ },
+/obj/structure/cable{
+ icon_state = "4-9"
+ },
+/obj/machinery/door/poddoor{
+ dir = 4;
+ id = "sgi_cargo4"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+
+(1,1,1) = {"
+a
+U
+f
+f
+f
+U
+a
+"}
+(2,1,1) = {"
+a
+U
+i
+i
+i
+U
+a
+"}
+(3,1,1) = {"
+a
+U
+X
+k
+v
+U
+a
+"}
+(4,1,1) = {"
+u
+U
+S
+d
+x
+U
+u
+"}
+(5,1,1) = {"
+U
+w
+q
+B
+x
+F
+U
+"}
+(6,1,1) = {"
+U
+E
+g
+D
+x
+l
+U
+"}
+(7,1,1) = {"
+U
+U
+C
+I
+Z
+U
+U
+"}
+(8,1,1) = {"
+U
+a
+a
+a
+a
+a
+U
+"}
diff --git a/_maps/_mod_celadon/shuttles/subshuttles/independent_module_two.dmm b/_maps/_mod_celadon/shuttles/subshuttles/independent_module_two.dmm
new file mode 100644
index 000000000000..81a099b52f30
--- /dev/null
+++ b/_maps/_mod_celadon/shuttles/subshuttles/independent_module_two.dmm
@@ -0,0 +1,393 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/obj/machinery/power/shieldwallgen/atmos{
+ anchored = 1;
+ id = "module5";
+ dir = 1
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/obj/machinery/door/poddoor{
+ dir = 4;
+ id = "sgi_cargo3"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"b" = (
+/obj/machinery/button/door{
+ id = "sgi_cargo3";
+ name = "blast door control";
+ pixel_x = -5;
+ pixel_y = 24
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/button/shieldwallgen{
+ id = "module4";
+ pixel_y = 22;
+ pixel_x = 5
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"c" = (
+/obj/machinery/power/smes/shuttle/precharged{
+ dir = 4
+ },
+/obj/structure/window/plasma/reinforced{
+ dir = 8
+ },
+/obj/structure/window/plasma/reinforced,
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"f" = (
+/obj/machinery/button/door{
+ id = "sgi_cargo6";
+ name = "blast door control";
+ pixel_x = 5;
+ pixel_y = 24
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/button/shieldwallgen{
+ id = "module5";
+ pixel_y = 22;
+ pixel_x = -5
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"g" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"h" = (
+/obj/docking_port/mobile{
+ can_move_docking_ports = 1;
+ dir = 4;
+ launch_status = 0;
+ port_direction = 4;
+ preferred_direction = 4
+ },
+/obj/machinery/button/door{
+ id = "sgi_cargo3";
+ name = "blast door control";
+ pixel_x = -8;
+ dir = 8
+ },
+/turf/closed/wall/mineral/titanium/nodiagonal,
+/area/ship/bridge)
+"p" = (
+/obj/machinery/computer/helm{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"q" = (
+/turf/template_noop,
+/area/template_noop)
+"s" = (
+/obj/structure/window/plasma/reinforced{
+ dir = 4
+ },
+/obj/structure/window/plasma/reinforced{
+ dir = 1
+ },
+/obj/machinery/power/terminal{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"u" = (
+/obj/structure/window/plasma/reinforced{
+ dir = 4
+ },
+/obj/structure/window/plasma/reinforced,
+/obj/machinery/power/terminal{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "0-1"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"w" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/power/shieldwallgen/atmos{
+ anchored = 1;
+ id = "module4"
+ },
+/obj/structure/cable{
+ icon_state = "0-6"
+ },
+/obj/machinery/door/poddoor{
+ dir = 4;
+ id = "sgi_cargo3"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"y" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"z" = (
+/obj/machinery/power/terminal{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"A" = (
+/turf/closed/wall/mineral/titanium,
+/area/ship/bridge)
+"C" = (
+/obj/machinery/door/poddoor{
+ dir = 4;
+ id = "sgi_cargo6"
+ },
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/obj/machinery/power/shieldwallgen/atmos{
+ anchored = 1;
+ id = "module5"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"E" = (
+/turf/open/floor/plating,
+/area/ship/bridge)
+"H" = (
+/obj/machinery/power/smes/engineering,
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/turf/open/floor/plasteel/patterned,
+/area/ship/bridge)
+"I" = (
+/obj/machinery/power/shuttle/engine/electric{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"K" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/power/apc/auto_name/directional/east,
+/obj/structure/cable{
+ icon_state = "0-1"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"M" = (
+/obj/machinery/door/poddoor{
+ dir = 4;
+ id = "sgi_cargo6"
+ },
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/obj/machinery/power/shieldwallgen/atmos{
+ anchored = 1;
+ id = "module5";
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"N" = (
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"O" = (
+/obj/structure/window/plasma/reinforced{
+ dir = 8
+ },
+/obj/structure/window/plasma/reinforced{
+ dir = 1
+ },
+/obj/machinery/power/smes/shuttle/precharged{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"P" = (
+/obj/structure/cable{
+ icon_state = "2-4";
+ tag = null
+ },
+/obj/structure/cable{
+ icon_state = "4-9"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"Q" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"R" = (
+/turf/closed/wall/mineral/titanium/nodiagonal,
+/area/ship/bridge)
+"U" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"W" = (
+/obj/machinery/door/poddoor{
+ dir = 4;
+ id = "sgi_cargo6"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"X" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/structure/chair/comfy/shuttle{
+ dir = 4;
+ name = "Helm"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+"Y" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating,
+/area/ship/bridge)
+
+(1,1,1) = {"
+R
+q
+q
+q
+q
+q
+R
+"}
+(2,1,1) = {"
+A
+R
+w
+h
+a
+R
+A
+"}
+(3,1,1) = {"
+q
+R
+b
+P
+N
+R
+q
+"}
+(4,1,1) = {"
+q
+R
+z
+Q
+E
+R
+q
+"}
+(5,1,1) = {"
+I
+R
+H
+g
+E
+R
+I
+"}
+(6,1,1) = {"
+O
+E
+E
+Q
+E
+E
+c
+"}
+(7,1,1) = {"
+s
+Y
+y
+X
+U
+K
+u
+"}
+(8,1,1) = {"
+q
+R
+Q
+p
+Q
+R
+q
+"}
+(9,1,1) = {"
+q
+R
+f
+E
+Q
+R
+q
+"}
+(10,1,1) = {"
+q
+R
+C
+W
+M
+R
+q
+"}
diff --git a/_maps/_mod_celadon/shuttles/syndicate/syndicate_aegis.dmm b/_maps/_mod_celadon/shuttles/syndicate/syndicate_aegis.dmm
index 815f26b45320..e79bec77167c 100644
--- a/_maps/_mod_celadon/shuttles/syndicate/syndicate_aegis.dmm
+++ b/_maps/_mod_celadon/shuttles/syndicate/syndicate_aegis.dmm
@@ -3326,7 +3326,6 @@
icon_state = "4-8"
},
/obj/structure/closet/secure_closet/freezer/kitchen/wall{
- dir = 1;
pixel_y = -30
},
/obj/item/storage/bag/tray,
@@ -3543,7 +3542,8 @@
"JI" = (
/obj/structure/closet/wall/white/med{
name = "medical locker";
- pixel_y = 29
+ pixel_y = 29;
+ dir = 1
},
/obj/item/clothing/gloves/color/latex/nitrile/evil,
/obj/item/storage/belt/medical/surgery,
@@ -5232,7 +5232,8 @@
"Zq" = (
/obj/structure/closet/wall/orange{
name = "Engineering locker";
- pixel_y = 30
+ pixel_y = 30;
+ dir = 1
},
/obj/machinery/atmospherics/pipe/simple/orange/hidden{
dir = 8
diff --git a/_maps/_mod_celadon/shuttles/syndicate/syndicate_cybersun_remora.dmm b/_maps/_mod_celadon/shuttles/syndicate/syndicate_cybersun_remora.dmm
index 430d853add9c..c090c792740e 100644
--- a/_maps/_mod_celadon/shuttles/syndicate/syndicate_cybersun_remora.dmm
+++ b/_maps/_mod_celadon/shuttles/syndicate/syndicate_cybersun_remora.dmm
@@ -3434,9 +3434,7 @@
dir = 1
},
/obj/effect/turf_decal/corner/transparent/purple/half,
-/obj/structure/closet/emcloset/wall{
- pixel_y = 28
- },
+/obj/structure/closet/emcloset/wall/directional/north,
/turf/open/floor/plasteel/tech,
/area/ship/science/robotics)
"gt" = (
diff --git a/_maps/_mod_celadon/shuttles/syndicate/syndicate_gorlex_hyena.dmm b/_maps/_mod_celadon/shuttles/syndicate/syndicate_gorlex_hyena.dmm
index c6e7b9c7aea9..500a309cc533 100644
--- a/_maps/_mod_celadon/shuttles/syndicate/syndicate_gorlex_hyena.dmm
+++ b/_maps/_mod_celadon/shuttles/syndicate/syndicate_gorlex_hyena.dmm
@@ -1817,7 +1817,6 @@
/obj/effect/decal/cleanable/dirt,
/obj/machinery/airalarm/directional/west,
/obj/structure/closet/wall/white/med{
- dir = 1;
name = "medicine locker";
pixel_y = -28
},
diff --git a/_maps/_mod_celadon/shuttles/syndicate/syndicate_kaas.dmm b/_maps/_mod_celadon/shuttles/syndicate/syndicate_kaas.dmm
index 02aed919d399..14fcc80eb54f 100644
--- a/_maps/_mod_celadon/shuttles/syndicate/syndicate_kaas.dmm
+++ b/_maps/_mod_celadon/shuttles/syndicate/syndicate_kaas.dmm
@@ -1014,7 +1014,6 @@
name = "operative ID card"
},
/obj/structure/closet/secure_closet/wall{
- dir = 1;
name = "spare cards locker";
req_access = list(3,150);
pixel_y = -30
diff --git a/_maps/_mod_celadon/shuttles/syndicate/syndicate_litieguai.dmm b/_maps/_mod_celadon/shuttles/syndicate/syndicate_litieguai.dmm
index 7ba8909241da..ddbbda2a1df7 100644
--- a/_maps/_mod_celadon/shuttles/syndicate/syndicate_litieguai.dmm
+++ b/_maps/_mod_celadon/shuttles/syndicate/syndicate_litieguai.dmm
@@ -691,7 +691,7 @@
/obj/item/storage/box/masks,
/obj/item/storage/box/pillbottles,
/obj/structure/closet/wall/white/chem{
- dir = 4;
+ dir = 8;
name = "Medical Supplies Locker";
pixel_x = -28
},
diff --git a/_maps/configs/independent_beluga.json b/_maps/configs/independent_beluga.json
index 64230b0dc797..6d7926a8e845 100644
--- a/_maps/configs/independent_beluga.json
+++ b/_maps/configs/independent_beluga.json
@@ -13,7 +13,6 @@
],
"starting_funds": 4000,
"limit": 2,
- "roundstart": true,
"job_slots": {
"Captain": {
"outfit": "/datum/outfit/job/independent/captain",
diff --git a/_maps/configs/independent_dwayne.json b/_maps/configs/independent_dwayne.json
index 1cd4a3683f0f..64f68af68752 100644
--- a/_maps/configs/independent_dwayne.json
+++ b/_maps/configs/independent_dwayne.json
@@ -15,7 +15,6 @@
"Mining",
"Generalist"
],
- "roundstart": true,
"limit": 1,
"job_slots": {
"Captain": {
diff --git a/_maps/configs/independent_mudskipper.json b/_maps/configs/independent_mudskipper.json
index 1dfd48861d13..9f4cf32e0cf8 100644
--- a/_maps/configs/independent_mudskipper.json
+++ b/_maps/configs/independent_mudskipper.json
@@ -14,7 +14,6 @@
"SPACE"
],
"map_path": "_maps/shuttles/independent/independent_mudskipper.dmm",
- "roundstart": true,
"limit": 2,
"starting_funds": 1500,
"job_slots": {
diff --git a/_maps/configs/independent_rigger.json b/_maps/configs/independent_rigger.json
index 3550773cc0e4..e36b57ca750a 100644
--- a/_maps/configs/independent_rigger.json
+++ b/_maps/configs/independent_rigger.json
@@ -15,7 +15,6 @@
"Generalist"
],
"map_path": "_maps/shuttles/independent/independent_rigger.dmm",
- "roundstart": true,
"limit": 1,
"job_slots": {
"Captain": {
diff --git a/_maps/configs/independent_shetland.json b/_maps/configs/independent_shetland.json
index 344f9a99ee50..de5873f80d75 100644
--- a/_maps/configs/independent_shetland.json
+++ b/_maps/configs/independent_shetland.json
@@ -14,7 +14,6 @@
],
"map_path": "_maps/shuttles/independent/independent_shetland.dmm",
"map_id": "independent_shetland",
- "roundstart": true,
"job_slots": {
"Captain": {
"outfit": "/datum/outfit/job/independent/captain/cheap",
diff --git a/_maps/configs/nanotrasen_skipper.json b/_maps/configs/nanotrasen_skipper.json
index 9ced4c28038c..2f61c3afa601 100644
--- a/_maps/configs/nanotrasen_skipper.json
+++ b/_maps/configs/nanotrasen_skipper.json
@@ -17,7 +17,6 @@
"Mining"
],
"starting_funds": 4500,
- "roundstart": true,
"job_slots": {
"Captain": {
"outfit": "/datum/outfit/job/nanotrasen/captain",
diff --git a/_maps/map_catalogue.txt b/_maps/map_catalogue.txt
index ca3748b4c94c..e7b6ca5db5d3 100644
--- a/_maps/map_catalogue.txt
+++ b/_maps/map_catalogue.txt
@@ -126,9 +126,9 @@ Find the key for using this catalogue in "map_catalogue_key.txt"
Size = (x = 11)(y = 16)(z = 1)
Tags = "Minor Combat Challenge", "Medium Loot", "Inhospitable"
- File Name = "_maps\RandomRuins\LavaRuins\lavaland_surface_ashwalker_shrine.dmm"
- Size = (x = 48)(y = 50)(z = 1)
- Tags = "No Combat", "Minor Loot", "Inhospitable"
+ File Name = "_maps\RandomRuins\LavaRuins\lavaland_surface_buried_shrine.dmm"
+ Size = (x = 67)(y = 55)(z = 1)
+ Tags = "Medium Combat", "Medium Loot", "Hazardous", "Lava", "Inhospitable"
File Name = "_maps\RandomRuins\LavaRuins\lavaland_surface_biodome_winter.dmm"
Size = (x = 46)(y = 42)(z = 1)
diff --git a/_maps/shuttles/nanotrasen/nanotrasen_skipper.dmm b/_maps/shuttles/nanotrasen/nanotrasen_skipper.dmm
index 436d6185ee54..93c59445ee41 100644
--- a/_maps/shuttles/nanotrasen/nanotrasen_skipper.dmm
+++ b/_maps/shuttles/nanotrasen/nanotrasen_skipper.dmm
@@ -2868,7 +2868,7 @@
pixel_x = 4;
pixel_y = 8
},
-/obj/item/coin/adamantine{
+/obj/item/coin/hellstone{
pixel_x = -12;
pixel_y = -3
},
diff --git a/_maps/shuttles/roumain/srm_elder.dmm b/_maps/shuttles/roumain/srm_elder.dmm
index ff5841d98df5..0fdb4827655a 100644
--- a/_maps/shuttles/roumain/srm_elder.dmm
+++ b/_maps/shuttles/roumain/srm_elder.dmm
@@ -273,7 +273,6 @@
dir = 1
},
/obj/machinery/door/poddoor/shutters{
- dir = 2;
id = "elderatriumshuts"
},
/turf/open/floor/plating,
@@ -497,7 +496,6 @@
/obj/machinery/button/door{
id = "elderengineshuts";
name = "Engine Shutters";
- dir = 2;
pixel_x = 7;
pixel_y = 21
},
@@ -955,7 +953,6 @@
/obj/structure/grille,
/obj/structure/window/reinforced/fulltile,
/obj/machinery/door/poddoor/shutters{
- dir = 2;
id = "elderatriumshuts"
},
/turf/open/floor/plating,
@@ -1170,7 +1167,6 @@
/obj/structure/window/reinforced/fulltile,
/obj/structure/grille,
/obj/machinery/door/poddoor/shutters{
- dir = 2;
id = "elderatriumshuts"
},
/turf/open/floor/plating,
@@ -1242,7 +1238,6 @@
/obj/structure/window/reinforced/fulltile,
/obj/structure/grille,
/obj/machinery/door/poddoor/shutters{
- dir = 2;
id = "elderatriumshuts"
},
/turf/open/floor/plating,
@@ -1259,15 +1254,13 @@
/obj/machinery/door/window/eastright{
dir = 8
},
-/obj/item/gun/ballistic/shotgun/flamingarrow{
- pixel_y = -5
- },
-/obj/item/gun/ballistic/shotgun/flamingarrow{
- pixel_y = 0
- },
+/obj/item/gun/ballistic/shotgun/flamingarrow/factory,
/obj/item/gun/ballistic/shotgun/flamingarrow/bolt{
pixel_y = 5
},
+/obj/item/gun/ballistic/shotgun/flamingarrow/factory{
+ pixel_y = -5
+ },
/turf/open/floor/wood/ebony,
/area/ship/storage)
"oC" = (
@@ -1275,7 +1268,6 @@
/obj/structure/grille,
/obj/machinery/door/firedoor/border_only,
/obj/machinery/door/poddoor/shutters{
- dir = 2;
id = "elderatriumshuts"
},
/turf/open/floor/plating,
@@ -1774,7 +1766,6 @@
/obj/structure/window/reinforced/fulltile,
/obj/structure/grille,
/obj/machinery/door/poddoor/shutters{
- dir = 2;
id = "elderatriumshuts"
},
/turf/open/floor/plating,
@@ -2187,18 +2178,18 @@
/obj/machinery/door/window{
dir = 8
},
-/obj/item/gun/ballistic/rifle/illestren{
+/obj/item/gun/ballistic/rifle/illestren/factory{
+ pixel_y = 3;
+ pixel_x = -4
+ },
+/obj/item/gun/ballistic/rifle/illestren/factory{
pixel_x = -4;
pixel_y = -5
},
-/obj/item/gun/ballistic/rifle/illestren{
+/obj/item/gun/ballistic/rifle/illestren/factory{
pixel_x = -4;
pixel_y = -1
},
-/obj/item/gun/ballistic/rifle/illestren{
- pixel_x = -4;
- pixel_y = 3
- },
/turf/open/floor/wood/ebony,
/area/ship/storage)
"Bq" = (
@@ -2278,7 +2269,6 @@
pixel_x = 4
},
/obj/item/reagent_containers/food/snacks/meat/steak{
- pixel_y = 0;
pixel_x = -9
},
/obj/item/reagent_containers/food/snacks/meat/steak{
@@ -2542,9 +2532,7 @@
pixel_x = 3;
pixel_y = -6
},
-/obj/item/storage/toolbox/fishing{
- pixel_y = 0
- },
+/obj/item/storage/toolbox/fishing,
/turf/open/floor/wood/ebony,
/area/ship/storage)
"Fu" = (
@@ -2926,7 +2914,6 @@
pixel_x = -2
},
/obj/item/weldingtool{
- pixel_y = 0;
pixel_x = -5
},
/turf/open/floor/wood/ebony,
@@ -3015,8 +3002,7 @@
dir = 1
},
/obj/machinery/door/airlock/medical/glass{
- name = "Medical Bay";
- dir = 2
+ name = "Medical Bay"
},
/obj/effect/turf_decal/siding/blue/end{
dir = 1
@@ -3073,7 +3059,6 @@
pixel_x = 21
},
/obj/item/binoculars{
- pixel_y = 0;
pixel_x = -4
},
/obj/item/megaphone{
@@ -3497,8 +3482,7 @@
pixel_x = 5
},
/obj/item/cultivator/rake{
- pixel_x = -4;
- pixel_y = 0
+ pixel_x = -4
},
/turf/open/floor/grass/ship/jungle,
/area/ship/roumain)
@@ -3763,8 +3747,7 @@
pixel_y = -4
},
/obj/item/pickaxe{
- pixel_x = 1;
- pixel_y = 0
+ pixel_x = 1
},
/obj/item/pickaxe{
pixel_x = 1;
diff --git a/_maps/shuttles/subshuttles/syndicate_runner.dmm b/_maps/shuttles/subshuttles/syndicate_runner.dmm
index 100a0d234000..69430bf09157 100644
--- a/_maps/shuttles/subshuttles/syndicate_runner.dmm
+++ b/_maps/shuttles/subshuttles/syndicate_runner.dmm
@@ -74,9 +74,7 @@
/obj/effect/turf_decal/trimline/opaque/bar/filled/corner,
/obj/machinery/power/terminal,
/obj/effect/landmark/ert_shuttle_spawn,
-/obj/structure/cable{
- icon_state = "0-1"
- },
+/obj/structure/cable,
/obj/structure/cable{
icon_state = "1-4"
},
@@ -168,15 +166,15 @@
"co" = (
/obj/effect/turf_decal/spline/fancy/opaque/black,
/obj/effect/turf_decal/trimline/opaque/syndiered/filled/line,
-/obj/effect/turf_decal/trimline/opaque/bar/filled/warning{
- dir = 1
- },
/obj/structure/cable{
icon_state = "4-8"
},
/obj/structure/cable{
icon_state = "1-8"
},
+/obj/effect/turf_decal/trimline/opaque/bar/line{
+ dir = 1
+ },
/turf/open/floor/plasteel/dark,
/area/ship/bridge)
"cF" = (
@@ -213,9 +211,7 @@
dir = 4;
id = "runner_sub_holo"
},
-/obj/structure/cable{
- icon_state = "0-1"
- },
+/obj/structure/cable,
/turf/open/floor/plating,
/area/ship/bridge)
"fa" = (
@@ -228,6 +224,15 @@
/obj/machinery/light/directional/south,
/turf/open/floor/plasteel/tech/grid,
/area/ship/bridge)
+"fQ" = (
+/obj/effect/turf_decal/trimline/opaque/bar/filled/warning{
+ dir = 1
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/bridge)
"gi" = (
/obj/item/storage/backpack/duffelbag/med/surgery{
pixel_x = -2;
@@ -325,15 +330,32 @@
},
/turf/open/floor/plasteel/mono/dark,
/area/ship/bridge)
+"mN" = (
+/obj/docking_port/mobile{
+ dir = 2;
+ name = "trauma team shuttle";
+ port_direction = 8;
+ preferred_direction = 4
+ },
+/obj/machinery/door/poddoor{
+ id = "runner_sub_door"
+ },
+/obj/machinery/power/shieldwallgen/atmos/roundstart{
+ dir = 8;
+ id = "runner_sub_holo"
+ },
+/obj/structure/cable,
+/turf/open/floor/plating,
+/area/ship/bridge)
"nP" = (
/obj/effect/turf_decal/spline/fancy/opaque/black,
/obj/effect/turf_decal/trimline/opaque/syndiered/filled/line,
-/obj/effect/turf_decal/trimline/opaque/bar/filled/warning{
- dir = 1
- },
/obj/structure/cable{
icon_state = "1-8"
},
+/obj/effect/turf_decal/trimline/opaque/bar/line{
+ dir = 1
+ },
/turf/open/floor/plasteel/dark,
/area/ship/bridge)
"rR" = (
@@ -389,13 +411,13 @@
/obj/effect/turf_decal/trimline/opaque/syndiered/filled/line{
dir = 1
},
-/obj/effect/turf_decal/trimline/opaque/bar/filled/warning,
/obj/structure/cable{
icon_state = "2-8"
},
/obj/structure/cable{
icon_state = "4-8"
},
+/obj/effect/turf_decal/trimline/opaque/bar/line,
/turf/open/floor/plasteel/dark,
/area/ship/bridge)
"DP" = (
@@ -420,23 +442,11 @@
/turf/open/floor/engine/hull,
/area/ship/external)
"Or" = (
-/obj/docking_port/mobile{
- dir = 2;
- name = "trauma team shuttle";
- port_direction = 8;
- preferred_direction = 4
- },
-/obj/machinery/door/poddoor{
- id = "runner_sub_door"
- },
-/obj/machinery/power/shieldwallgen/atmos/roundstart{
- dir = 8;
- id = "runner_sub_holo"
- },
/obj/structure/cable{
- icon_state = "0-1"
+ icon_state = "1-2"
},
-/turf/open/floor/plating,
+/obj/effect/turf_decal/trimline/opaque/bar/filled/warning,
+/turf/open/floor/plasteel/dark,
/area/ship/bridge)
"Pq" = (
/turf/template_noop,
@@ -568,29 +578,29 @@ gs
te
"}
(4,1,1) = {"
-Pq
bz
+fQ
co
gA
SE
ku
zS
+Or
dB
-Pq
"}
(5,1,1) = {"
-Pq
sl
+fQ
nP
ZN
kM
iR
zS
Or
-Pq
+mN
"}
(6,1,1) = {"
-Pq
+PD
PD
cF
hJ
@@ -598,7 +608,7 @@ ac
hB
bG
PD
-Pq
+PD
"}
(7,1,1) = {"
Pq
diff --git a/check_regex.yaml b/check_regex.yaml
index 538d570daea4..e01c41995e8e 100644
--- a/check_regex.yaml
+++ b/check_regex.yaml
@@ -38,7 +38,7 @@ standards:
- exactly:
[
- 269,
+ 268,
"non-bitwise << uses",
'(?[user] is requesting a pAI personality! Use the pAI button to submit yourself as one.")
+ to_chat(G, "[user.real_name] is requesting a pAI personality! Use the pAI button to submit yourself as one.")
addtimer(CALLBACK(src, PROC_REF(spam_again)), spam_delay)
var/list/available = list()
for(var/datum/paiCandidate/c in SSpai.candidates)
diff --git a/code/controllers/subsystem/processing/movable_physics.dm b/code/controllers/subsystem/processing/movable_physics.dm
new file mode 100644
index 000000000000..65015edbd668
--- /dev/null
+++ b/code/controllers/subsystem/processing/movable_physics.dm
@@ -0,0 +1,24 @@
+///Real fast ticking subsystem for moving movables via modifying pixel_x/y/z
+PROCESSING_SUBSYSTEM_DEF(movablephysics)
+ name = "Movable Physics"
+ wait = 0.05 SECONDS
+ stat_tag = "MP"
+ priority = FIRE_PRIORITY_MOVABLE_PHYSICS
+
+/datum/controller/subsystem/processing/movablephysics/fire(resumed = FALSE)
+ if (!resumed)
+ currentrun = processing.Copy()
+ //cache for sanic speed (lists are references anyways)
+ var/list/current_run = currentrun
+
+ while(current_run.len)
+ var/datum/component/thing = current_run[current_run.len]
+ current_run.len--
+ if(QDELETED(thing))
+ processing -= thing
+ else
+ if(thing.process(wait * 0.1) == PROCESS_KILL)
+ // fully stop so that a future START_PROCESSING will work
+ STOP_PROCESSING(src, thing)
+ if (MC_TICK_CHECK)
+ return
diff --git a/code/controllers/subsystem/processing/quirks.dm b/code/controllers/subsystem/processing/quirks.dm
index 9dc117783af9..c6f9e4404c07 100644
--- a/code/controllers/subsystem/processing/quirks.dm
+++ b/code/controllers/subsystem/processing/quirks.dm
@@ -23,7 +23,6 @@ PROCESSING_SUBSYSTEM_DEF(quirks)
list("Ageusia","Vegetarian","Deviant Tastes"), \
list("Ananas Affinity","Ananas Aversion"), \
list("Alcohol Tolerance","Light Drinker"), \
- list("Clown Fan","Mime Fan", "RILENA Super Fan"), \
list("Bad Touch", "Friendly"))
species_blacklist = list("Blood Deficiency" = list(SPECIES_IPC, SPECIES_JELLYPERSON, SPECIES_PLASMAMAN, SPECIES_VAMPIRE))
diff --git a/code/controllers/subsystem/throwing.dm b/code/controllers/subsystem/throwing.dm
index 0260e952d10d..e8cd514eb48b 100644
--- a/code/controllers/subsystem/throwing.dm
+++ b/code/controllers/subsystem/throwing.dm
@@ -47,7 +47,7 @@ SUBSYSTEM_DEF(throwing)
/datum/thrownthing
var/atom/movable/thrownthing
- var/atom/target
+ var/datum/weakref/initial_target
var/turf/target_turf
var/target_zone
var/init_dir
@@ -71,12 +71,13 @@ SUBSYSTEM_DEF(throwing)
var/last_move = 0
-/datum/thrownthing/New(thrownthing, target, target_turf, init_dir, maxrange, speed, thrower, diagonals_first, force, gentle, callback, target_zone)
+/datum/thrownthing/New(thrownthing, target, init_dir, maxrange, speed, thrower, diagonals_first, force, gentle, callback, target_zone)
. = ..()
src.thrownthing = thrownthing
RegisterSignal(thrownthing, COMSIG_PARENT_QDELETING, PROC_REF(on_thrownthing_qdel))
- src.target = target
- src.target_turf = target_turf
+ src.target_turf = get_turf(target)
+ if(target_turf != target)
+ src.initial_target = WEAKREF(target)
src.init_dir = init_dir
src.maxrange = maxrange
src.speed = speed
@@ -87,14 +88,13 @@ SUBSYSTEM_DEF(throwing)
src.callback = callback
src.target_zone = target_zone
-
/datum/thrownthing/Destroy()
SSthrowing.processing -= thrownthing
SSthrowing.currentrun -= thrownthing
thrownthing.throwing = null
thrownthing = null
- target = null
thrower = null
+ initial_target = null
if(callback)
QDEL_NULL(callback) //It stores a reference to the thrownthing, its source. Let's clean that.
return ..()
@@ -109,6 +109,7 @@ SUBSYSTEM_DEF(throwing)
/datum/thrownthing/proc/tick()
var/atom/movable/AM = thrownthing
+ AM.setMovetype(AM.movement_type | THROWN)
if (!isturf(AM.loc) || !AM.throwing)
finalize()
return
@@ -117,9 +118,17 @@ SUBSYSTEM_DEF(throwing)
delayed_time += world.time - last_move
return
- if (dist_travelled && hitcheck()) //to catch sneaky things moving on our tile while we slept
- finalize()
- return
+ var/atom/movable/actual_target = initial_target?.resolve()
+
+ if(dist_travelled) //to catch sneaky things moving on our tile while we slept
+ for(var/atom/movable/obstacle as anything in get_turf(thrownthing))
+ if (obstacle == thrownthing || (obstacle == thrower && !ismob(thrownthing)))
+ continue
+ if(obstacle.pass_flags_self & LETPASSTHROW)
+ continue
+ if (obstacle == actual_target || (obstacle.density && !(obstacle.flags_1 & ON_BORDER_1)))
+ finalize(TRUE, obstacle)
+ return
var/atom/step
@@ -146,10 +155,15 @@ SUBSYSTEM_DEF(throwing)
finalize()
return
- AM.Move(step, get_dir(AM, step), DELAY_TO_GLIDE_SIZE(1 / speed))
+ if(!AM.Move(step, get_dir(AM, step), DELAY_TO_GLIDE_SIZE(1 / speed))) // we hit something during our move...
+ if(AM.throwing) // ...but finalize() wasn't called on Bump() because of a higher level definition that doesn't always call parent.
+ finalize()
+ return
- if (!AM.throwing) // we hit something during our move
- finalize(hit = TRUE)
+ dist_travelled++
+
+ if(actual_target && !(actual_target.pass_flags_self & LETPASSTHROW) && actual_target.loc == AM.loc) // we crossed a movable with no density (e.g. a mouse or APC) we intend to hit anyway.
+ finalize(TRUE, actual_target)
return
dist_travelled++
@@ -158,18 +172,19 @@ SUBSYSTEM_DEF(throwing)
finalize()
return
-/datum/thrownthing/proc/finalize(hit = FALSE, target=null)
+//If the target hasent been hit search for it in the turf we landed on.
+/datum/thrownthing/proc/finalize(hit = FALSE, target = null)
set waitfor = FALSE
//done throwing, either because it hit something or it finished moving
if(!thrownthing)
return
thrownthing.throwing = null
+ thrownthing.setMovetype(thrownthing.movement_type & ~THROWN)
if (!hit)
- for (var/thing in get_turf(thrownthing)) //looking for our target on the turf we land on.
- var/atom/A = thing
- if (A == target)
+ for (var/atom/movable/obstacle as anything in get_turf(thrownthing)) //looking for our target on the turf we land on.
+ if (obstacle == target)
hit = TRUE
- thrownthing.throw_impact(A, src)
+ thrownthing.throw_impact(obstacle, src)
if(QDELETED(thrownthing)) //throw_impact can delete things, such as glasses smashing
return //deletion should already be handled by on_thrownthing_qdel()
break
@@ -195,15 +210,3 @@ SUBSYSTEM_DEF(throwing)
T.zFall(thrownthing)
qdel(src)
-
-/datum/thrownthing/proc/hit_atom(atom/A)
- finalize(hit=TRUE, target=A)
-
-/datum/thrownthing/proc/hitcheck()
- for (var/thing in get_turf(thrownthing))
- var/atom/movable/AM = thing
- if (AM == thrownthing || (AM == thrower && !ismob(thrownthing)))
- continue
- if (AM.density && !(AM.pass_flags_self & LETPASSTHROW) && !(AM.flags_1 & ON_BORDER_1))
- finalize(hit=TRUE, target=AM)
- return TRUE
diff --git a/code/controllers/subsystem/traumas.dm b/code/controllers/subsystem/traumas.dm
index 6eaf530d2100..bde93557db14 100644
--- a/code/controllers/subsystem/traumas.dm
+++ b/code/controllers/subsystem/traumas.dm
@@ -90,7 +90,7 @@ SUBSYSTEM_DEF(traumas)
/obj/item/clothing/under/rank/command/captain, /obj/item/clothing/under/rank/security/head_of_security,
/obj/item/clothing/under/rank/engineering/chief_engineer, /obj/item/clothing/under/rank/medical/chief_medical_officer,
/obj/item/clothing/under/rank/command/head_of_personnel, /obj/item/clothing/under/rank/rnd/research_director,
- /obj/item/clothing/under/rank/security/head_of_security/alt,//WS Edit - Better security jumpsuit sprites
+ /obj/item/clothing/under/rank/security/head_of_security/alt,
/obj/item/clothing/under/rank/rnd/research_director/alt, /obj/item/clothing/under/rank/rnd/research_director/turtleneck,
/obj/item/clothing/under/rank/security/head_of_security/parade,
/obj/item/clothing/under/rank/security/head_of_security/parade/female, //WS Edit - Better Command Uniforms
@@ -128,7 +128,7 @@ SUBSYSTEM_DEF(traumas)
/obj/item/melee/cultblade, /obj/item/cult_bastard,
/obj/item/restraints/legcuffs/bola/cult, /obj/item/clothing/suit/space/hardsuit/cult,
/obj/item/clothing/suit/hooded/cultrobes, /obj/item/clothing/head/hooded/cult_hoodie, /obj/effect/rune,
- /obj/item/stack/sheet/runed_metal, /obj/machinery/door/airlock/cult, /obj/singularity/narsie,
+ /obj/machinery/door/airlock/cult, /obj/singularity/narsie,
/obj/item/soulstone,
/obj/item/clothing/suit/wizrobe, /obj/item/clothing/head/wizard, /obj/item/spellbook, /obj/item/staff,
/obj/item/clothing/suit/space/hardsuit/shielded/wizard, /obj/item/clothing/suit/space/hardsuit/wizard,
diff --git a/code/datums/chatmessage.dm b/code/datums/chatmessage.dm
index c27e0bd1b7ae..60b4db1d1ce9 100644
--- a/code/datums/chatmessage.dm
+++ b/code/datums/chatmessage.dm
@@ -182,7 +182,7 @@
message.maptext = complete_text
// View the message
- LAZYADDASSOC(owned_by.seen_messages, message_loc, src)
+ LAZYADDASSOCLIST(owned_by.seen_messages, message_loc, src)
owned_by.images |= message
animate(message, alpha = 255, time = CHAT_MESSAGE_SPAWN_TIME)
diff --git a/code/datums/components/_component.dm b/code/datums/components/_component.dm
index 1d16391a18e1..d76504787b04 100644
--- a/code/datums/components/_component.dm
+++ b/code/datums/components/_component.dm
@@ -321,10 +321,12 @@
// all the objects that are receiving the signal get the signal this final time.
// AKA: No you can't cancel the signal reception of another object by doing an unregister in the same signal.
var/list/queued_calls = list()
- for(var/datum/listening_datum as anything in target)
- queued_calls[listening_datum] = listening_datum.signal_procs[src][sigtype]
- for(var/datum/listening_datum as anything in queued_calls)
- . |= call(listening_datum, queued_calls[listening_datum])(arglist(arguments))
+ // This should be faster than doing `var/datum/listening_datum as anything in target` as it does not implicitly copy the list
+ for(var/i in 1 to length(target))
+ var/datum/listening_datum = target[i]
+ queued_calls.Add(listening_datum, listening_datum.signal_procs[src][sigtype])
+ for(var/i in 1 to length(queued_calls) step 2)
+ . |= call(queued_calls[i], queued_calls[i + 1])(arglist(arguments))
// The type arg is casted so initial works, you shouldn't be passing a real instance into this
/**
diff --git a/code/datums/components/bandage.dm b/code/datums/components/bandage.dm
new file mode 100644
index 000000000000..16f6a2f0b059
--- /dev/null
+++ b/code/datums/components/bandage.dm
@@ -0,0 +1,60 @@
+#define TREATMENT_DAMAGE_MOD 2
+
+/datum/component/bandage
+ /// How fast do we stop bleeding?
+ var/bleed_reduction = 0
+ /// How many healing ticks will this bandage apply? Reduced by incoming damage and current bleeding
+ var/lifespan = 300
+ var/bandage_name = "gauze"
+ /// The person this bandage is applied to
+ var/mob/living/mummy
+
+/datum/component/bandage/Initialize(_bleed_reduction, _lifespan, _bandage_name)
+ if(!istype(parent, /obj/item/bodypart))
+ return COMPONENT_INCOMPATIBLE
+ var/obj/item/bodypart/BP = parent
+ mummy = BP.owner
+ if(!mummy)
+ return COMPONENT_INCOMPATIBLE
+ if(_bleed_reduction)
+ bleed_reduction = _bleed_reduction
+ if(_lifespan)
+ lifespan = _lifespan
+ if(_bandage_name)
+ bandage_name = _bandage_name
+ RegisterSignal(mummy, COMSIG_MOB_APPLY_DAMGE, PROC_REF(check_damage))
+ RegisterSignal(mummy, COMSIG_MOB_LIFE, PROC_REF(bandage_effects))
+ RegisterSignal(parent, COMSIG_LIVING_DROP_LIMB, PROC_REF(drop_bandage))
+
+/// Checks if damage to the owner is applied to this limb and reduces lifespan (perforated bandages dont work as well)
+/datum/component/bandage/proc/check_damage(attacker, damage, damagetype = BRUTE, def_zone = null)
+ SIGNAL_HANDLER
+
+ if(parent != mummy.get_bodypart(check_zone(def_zone)))
+ return
+ lifespan -= damage / 100 * initial(lifespan) * TREATMENT_DAMAGE_MOD //take incoming damage as a % of durability
+ if(lifespan <= 0)
+ drop_bandage()
+
+/// Handles healing effects and passive lifespan usage
+/datum/component/bandage/proc/bandage_effects()
+ SIGNAL_HANDLER
+
+ var/obj/item/bodypart/heal_target = parent
+ lifespan -= 1 + heal_target.bleeding // particularly nasty bleeding can burn through dressing faster
+ heal_target.adjust_bleeding(-bleed_reduction)
+ if(lifespan <= 0 || !heal_target.bleeding) //remove treatment once it's no longer able to treat
+ drop_bandage(TRUE)
+
+/// Handles deleting the component when the bandage runs out of lifespan or finishes healing. Special = bandage didn't get torn off
+/datum/component/bandage/proc/drop_bandage(special = FALSE)
+ SIGNAL_HANDLER
+
+ var/obj/item/bodypart/BP = parent
+ if(special)
+ to_chat(mummy, span_notice("The [bandage_name] on your [parse_zone(BP.body_zone)] has [BP.bleeding ? "done what it can" : "stopped the bleeding"]."))
+ else
+ to_chat(mummy, span_warning("The [bandage_name] on your [parse_zone(BP.body_zone)] is damaged beyond use!"))
+ qdel(src)
+
+#undef TREATMENT_DAMAGE_MOD
diff --git a/code/datums/components/butchering.dm b/code/datums/components/butchering.dm
index 6923760a7705..7d3767a6aaa8 100644
--- a/code/datums/components/butchering.dm
+++ b/code/datums/components/butchering.dm
@@ -69,11 +69,17 @@
"Their neck has already been already cut, you can't make the bleeding any worse!")
return
+ var/obj/item/bodypart/throat_in_question = H.get_bodypart(BODY_ZONE_HEAD)
+ if(!throat_in_question)
+ user.show_message("[H]... doesn't have a neck.", MSG_VISUAL, \
+ "They don't seem to have a neck to cut.")
+ return
+
H.visible_message("[user] slits [H]'s throat!", \
"[user] slits your throat...")
log_combat(user, H, "finishes slicing the throat of")
H.apply_damage(source.force, BRUTE, BODY_ZONE_HEAD)
- H.bleed_rate = clamp(H.bleed_rate + 20, 0, 30)
+ throat_in_question.adjust_bleeding(20)
H.apply_status_effect(/datum/status_effect/neck_slice)
/datum/component/butchering/proc/Butcher(mob/living/butcher, mob/living/meat)
diff --git a/code/datums/components/crafting/recipes/misc.dm b/code/datums/components/crafting/recipes/misc.dm
index 4df0521bcff3..0ed4acb5be78 100644
--- a/code/datums/components/crafting/recipes/misc.dm
+++ b/code/datums/components/crafting/recipes/misc.dm
@@ -211,3 +211,10 @@
/obj/item/organ/heart = 1,
/obj/item/stack/sheet/cotton/cloth = 3)
category = CAT_MISC
+
+/datum/crafting_recipe/candorupgrade
+ name = "Candor Upgrade"
+ result = /obj/item/gun/ballistic/automatic/pistol/candor/phenex
+ reqs = list(/obj/item/stack/sheet/mineral/hidden = 4,
+ /obj/item/gun/ballistic/automatic/pistol/candor = 1)
+ category = CAT_MISC
diff --git a/code/datums/components/forensics.dm b/code/datums/components/forensics.dm
index 3c006073304c..6f2a34e50ea5 100644
--- a/code/datums/components/forensics.dm
+++ b/code/datums/components/forensics.dm
@@ -192,4 +192,4 @@
return
if(isitem(parent))
var/obj/item/I = parent
- I.AddElement(/datum/element/decal/blood, initial(I.icon) || I.icon, initial(I.icon_state) || I.icon_state, _color = get_blood_dna_color(blood_DNA))
+ I.AddElement(/datum/element/decal/blood, I.icon, I.icon_state, _color = get_blood_dna_color(blood_DNA))
diff --git a/code/datums/components/movable_physics.dm b/code/datums/components/movable_physics.dm
new file mode 100644
index 000000000000..114cac29f24b
--- /dev/null
+++ b/code/datums/components/movable_physics.dm
@@ -0,0 +1,151 @@
+#define PHYSICS_GRAV_STANDARD 9.80665
+
+///Remove the component as soon as there's zero velocity, useful for movables that will no longer move after being initially moved (blood splatters)
+#define QDEL_WHEN_NO_MOVEMENT (1<<0)
+
+///Stores information related to the movable's physics and keeping track of relevant signals to trigger movement
+/datum/component/movable_physics
+ ///Modifies the pixel_x/pixel_y of an object every process()
+ var/horizontal_velocity
+ ///Modifies the pixel_z of an object every process(), movables aren't Move()'d into another turf if pixel_z exceeds 16, so try not to supply a super high vertical value if you don't want the movable to clip through multiple turfs
+ var/vertical_velocity
+ ///The horizontal_velocity is reduced by this every process(), this doesn't take into account the object being in the air vs gravity pushing it against the ground
+ var/horizontal_friction
+ ///The vertical_velocity is reduced by this every process()
+ var/z_gravity
+ ///The pixel_z that the object will no longer be influenced by gravity for a 32x32 turf, keep this value between -16 to 0 so it's visuals matches up with it physically being in the turf
+ var/z_floor
+ ///The angle of the path the object takes on the x/y plane
+ var/angle_of_movement
+ ///Flags for turning on certain physic properties, see the top of the file for more information on flags
+ var/physic_flags
+ ///The cached animate_movement of the parent; any kind of gliding when doing Move() makes the physics look derpy, so we'll just make Move() be instant
+ var/cached_animate_movement
+ ///The sound effect to play when bouncing off of something
+ var/bounce_sound
+
+ var/numbounce = 1
+
+/datum/component/movable_physics/Initialize(_horizontal_velocity = 0, _vertical_velocity = 0, _horizontal_friction = 0, _z_gravity = 0, _z_floor = 0, _angle_of_movement = 0, _physic_flags = 0, _bounce_sound)
+ . = ..()
+ if(!ismovable(parent))
+ return COMPONENT_INCOMPATIBLE
+ RegisterSignal(parent, COMSIG_MOVABLE_IMPACT, PROC_REF(throw_impact_ricochet), override = TRUE)
+ horizontal_velocity = _horizontal_velocity
+ vertical_velocity = _vertical_velocity
+ horizontal_friction = _horizontal_friction
+ z_gravity = _z_gravity
+ z_floor = _z_floor
+ angle_of_movement = _angle_of_movement
+ physic_flags = _physic_flags
+ bounce_sound = _bounce_sound
+ if(vertical_velocity || horizontal_velocity)
+ start_movement()
+
+///Let's get moving
+/datum/component/movable_physics/proc/start_movement()
+ var/atom/movable/moving_atom = parent
+ cached_animate_movement = moving_atom.animate_movement
+ moving_atom.animate_movement = NO_STEPS
+ START_PROCESSING(SSmovablephysics, src)
+ moving_atom.SpinAnimation(speed = 1 SECONDS, loops = 1)
+
+///Alright it's time to stop
+/datum/component/movable_physics/proc/stop_movement()
+ var/atom/movable/moving_atom = parent
+ moving_atom.animate_movement = cached_animate_movement
+ STOP_PROCESSING(SSmovablephysics, src)
+ if(physic_flags & QDEL_WHEN_NO_MOVEMENT)
+ qdel(src)
+
+/datum/component/movable_physics/UnregisterFromParent()
+ UnregisterSignal(parent, COMSIG_MOVABLE_IMPACT)
+
+/datum/component/movable_physics/proc/throw_impact_ricochet(datum/source, atom/hit_atom, datum/thrownthing/throwingdatum)
+ SIGNAL_HANDLER
+ var/atom/movable/atom_source = source
+ ricochet(atom_source, Get_Angle(atom_source, throwingdatum.target_turf))
+
+/datum/component/movable_physics/proc/z_floor_bounce(atom/movable/moving_atom)
+ angle_of_movement += rand(-3000, 3000) / 100
+ var/turf/a_turf = get_turf(moving_atom)
+ if(istype(moving_atom, /obj/item/ammo_casing) && !bounce_sound)
+ playsound(moving_atom, a_turf.bullet_bounce_sound, 50, TRUE)
+ else
+ playsound(moving_atom, bounce_sound, 50, TRUE)
+ moving_atom.SpinAnimation(speed = 1 SECONDS / numbounce, loops = 1)
+ moving_atom.pixel_z = z_floor
+ horizontal_velocity = max(0, horizontal_velocity + (vertical_velocity * -0.8))
+ vertical_velocity = max(0, ((vertical_velocity * -0.8) - 0.2))
+ numbounce += 0.5
+
+/datum/component/movable_physics/proc/ricochet(atom/movable/moving_atom, bounce_angle)
+ angle_of_movement = ((180 - bounce_angle) - angle_of_movement)
+ if(angle_of_movement < 0)
+ angle_of_movement += 360
+ //var/turf/a_turf = get_turf(moving_atom)
+ //playsound(src, a_turf.bullet_bounce_sound, 50, TRUE)
+
+/datum/component/movable_physics/proc/fix_angle(angle, atom/moving_atom)//fixes an angle below 0 or above 360
+ if(!(angle_of_movement > 360) && !(angle_of_movement < 0))
+ return angle //early return if it doesn't need to change
+ var/new_angle
+ if(angle_of_movement > 360)
+ new_angle = angle_of_movement - 360
+ if(angle_of_movement < 0)
+ new_angle = angle_of_movement + 360
+ return new_angle
+
+/datum/component/movable_physics/process(delta_time)
+ var/atom/movable/moving_atom = parent
+ var/turf/location = get_turf(moving_atom)
+
+ angle_of_movement = fix_angle(angle_of_movement, moving_atom)
+ if(horizontal_velocity <= 0 && moving_atom.pixel_z == 0)
+ horizontal_velocity = 0
+ stop_movement()
+ return
+
+ moving_atom.pixel_x += (horizontal_velocity * (sin(angle_of_movement)))
+ moving_atom.pixel_y += (horizontal_velocity * (cos(angle_of_movement)))
+
+ horizontal_velocity = max(0, horizontal_velocity - horizontal_friction)
+
+ moving_atom.pixel_z = max(z_floor, moving_atom.pixel_z + vertical_velocity)
+ if(moving_atom.pixel_z > z_floor)
+ vertical_velocity -= (z_gravity * 0.05)
+
+ if(moving_atom.pixel_z <= z_floor && (vertical_velocity != 0) && moving_atom.has_gravity(location)) //z bounce
+ z_floor_bounce(moving_atom)
+
+ if(moving_atom.pixel_x > 16)
+ if(moving_atom.Move(get_step(moving_atom, EAST)))
+ moving_atom.pixel_x = -16
+ else
+ moving_atom.pixel_x = 16
+ ricochet(moving_atom, 0)
+ return
+
+ if(moving_atom.pixel_x < -16)
+ if(moving_atom.Move(get_step(moving_atom, WEST)))
+ moving_atom.pixel_x = 16
+ else
+ moving_atom.pixel_x = -16
+ ricochet(moving_atom, 0)
+ return
+
+ if(moving_atom.pixel_y > 16)
+ if(moving_atom.Move(get_step(moving_atom, NORTH)))
+ moving_atom.pixel_y = -16
+ else
+ moving_atom.pixel_y = 16
+ ricochet(moving_atom, 180)
+ return
+
+ if(moving_atom.pixel_y < -16)
+ if(moving_atom.Move(get_step(moving_atom, SOUTH)))
+ moving_atom.pixel_y = 16
+ else
+ moving_atom.pixel_y = -16
+ ricochet(moving_atom, 180)
+
diff --git a/code/datums/components/remote_materials.dm b/code/datums/components/remote_materials.dm
index de61c13ae295..2f3aa79749b2 100644
--- a/code/datums/components/remote_materials.dm
+++ b/code/datums/components/remote_materials.dm
@@ -52,7 +52,7 @@ handles linking back and forth.
/datum/material/diamond,
/datum/material/plasma,
/datum/material/uranium,
- /datum/material/bananium,
+ /datum/material/hellstone,
/datum/material/titanium,
/datum/material/bluespace,
/datum/material/plastic,
diff --git a/code/datums/diseases/advance/presets.dm b/code/datums/diseases/advance/presets.dm
index da8ad0d69a59..1924d92428e4 100644
--- a/code/datums/diseases/advance/presets.dm
+++ b/code/datums/diseases/advance/presets.dm
@@ -16,14 +16,6 @@
symptoms = list(new/datum/symptom/cough)
..()
-/datum/disease/advance/necropolis
- copy_type = /datum/disease/advance
-
-/datum/disease/advance/necropolis/New()
- name = "Necropolis Seed"
- symptoms = list(new/datum/symptom/necroseed)
- ..()
-
//Randomly generated Disease, for virus crates and events
/datum/disease/advance/random
name = "Experimental Disease"
diff --git a/code/datums/diseases/advance/symptoms/flesh_eating.dm b/code/datums/diseases/advance/symptoms/flesh_eating.dm
index f6cd5698d73d..5f18f6c78a91 100644
--- a/code/datums/diseases/advance/symptoms/flesh_eating.dm
+++ b/code/datums/diseases/advance/symptoms/flesh_eating.dm
@@ -63,7 +63,7 @@ Bonus
if(bleed)
if(ishuman(M))
var/mob/living/carbon/human/H = M
- H.bleed_rate += 5 * power
+ H.cause_bleeding(5 * power)
return 1
/*
diff --git a/code/datums/diseases/advance/symptoms/necropolis.dm b/code/datums/diseases/advance/symptoms/necropolis.dm
deleted file mode 100644
index 9626b944124d..000000000000
--- a/code/datums/diseases/advance/symptoms/necropolis.dm
+++ /dev/null
@@ -1,113 +0,0 @@
-/datum/symptom/necroseed
- name = "Necropolis Seed"
- desc = "An infantile form of the root of Lavaland's tendrils. Forms a symbiotic bond with the host, making them stronger and hardier, at the cost of speed. Should the disease be cured, the host will be severely weakened."
- stealth = 0
- resistance = 3
- stage_speed = -10
- transmittable = -3
- level = 9
- base_message_chance = 3
- severity = 0
- symptom_delay_min = 1
- symptom_delay_max = 1
- var/color = "#302f20"
- var/tendrils = FALSE
- var/chest = FALSE
- var/fireproof = FALSE
- threshold_descs = list(
- "Resistance 15" = "The area near the host roils with paralyzing tendrils.",
- "Resistance 20" = "Host becomes immune to heat, ash, and lava. Removes movespeed debuff. Hail to the necropolis!",
- )
- var/list/cached_tentacle_turfs
- var/turf/last_location
- var/tentacle_recheck_cooldown = 100
-
-/datum/symptom/necroseed/Start(datum/disease/advance/A)
- . = ..()
- if(!.)
- return
- if(A.totalResistance() >= 15)
- tendrils = TRUE
- if(A.totalResistance() >= 20)
- fireproof = TRUE
-
-/datum/symptom/necroseed/Activate(datum/disease/advance/A)
- . = ..()
- if(!.)
- return
- var/mob/living/carbon/M = A.affected_mob
- switch(A.stage)
- if(1, 2)
- if(tendrils)
- tendril(A)
- if(prob(base_message_chance))
- to_chat(M, "Your skin feels scaly.")
- if(3, 4)
- if(tendrils)
- tendril(A)
- if(prob(base_message_chance))
- to_chat(M, "[pick("Your skin is hard.", "You feel stronger.", "You feel powerful.", "You feel your muscles growing stiff.", "You feel warm.")]")
- if(5)
- if(tendrils)
- tendril(A)
- M.dna.species.punchdamagelow = 15
- M.dna.species.punchdamagehigh = 20
- M.dna.species.punchstunthreshold = 18
- M.dna.species.brutemod = 0.6
- M.dna.species.burnmod = 0.6
- M.dna.species.heatmod = 0.6
- M.add_atom_colour(color, FIXED_COLOUR_PRIORITY)
- M.add_movespeed_modifier(/datum/movespeed_modifier/necropolis, update=TRUE)
- ADD_TRAIT(M, TRAIT_PIERCEIMMUNE, DISEASE_TRAIT)
- if(fireproof)
- to_chat(M, "[pick("You taste primordial ash.", "The necropolis whispers sweet nothings to you.", "You feel like a god.")]")
- ADD_TRAIT(M, TRAIT_RESISTHEAT, DISEASE_TRAIT)
- ADD_TRAIT(M, TRAIT_RESISTHIGHPRESSURE, DISEASE_TRAIT)
- M.weather_immunities |= "ash"
- M.weather_immunities |= "lava"
- M.remove_movespeed_modifier(/datum/movespeed_modifier/necropolis)
- else
- if(prob(base_message_chance))
- to_chat(M, "[pick("Your skin has become a hardened carapace.", "Your strength is superhuman.", "You feel invincible.")]")
- if(tendrils)
- tendril(A)
- return
-
-/datum/symptom/necroseed/proc/tendril(datum/disease/advance/A)
- . = A.affected_mob
- var/mob/living/loc = A.affected_mob.loc
- if(isturf(loc))
- if(!LAZYLEN(cached_tentacle_turfs) || loc != last_location || tentacle_recheck_cooldown <= world.time)
- LAZYCLEARLIST(cached_tentacle_turfs)
- last_location = loc
- tentacle_recheck_cooldown = world.time + initial(tentacle_recheck_cooldown)
- for(var/turf/open/T in orange(4, loc))
- LAZYADD(cached_tentacle_turfs, T)
- for(var/t in cached_tentacle_turfs)
- if(isopenturf(t))
- if(prob(10))
- new /obj/effect/temp_visual/goliath_tentacle(t, .)
- else
- cached_tentacle_turfs -= t
-
-/datum/symptom/necroseed/End(datum/disease/advance/A)
- . = ..()
- if(!.)
- return
- var/mob/living/carbon/M = A.affected_mob
- to_chat(M, "You feel weakened as the necropolis' blessing leaves your body.")
- M.remove_movespeed_modifier(/datum/movespeed_modifier/necropolis)
- M.dna.species.punchdamagelow = initial(M.dna.species.punchdamagelow)
- M.dna.species.punchdamagehigh = initial(M.dna.species.punchdamagehigh)
- M.dna.species.punchstunthreshold = initial(M.dna.species.punchstunthreshold)
- M.remove_atom_colour(color, FIXED_COLOUR_PRIORITY)
- M.dna.species.brutemod /= 0.6
- M.dna.species.burnmod /= 0.6
- M.dna.species.heatmod /= 0.6
- REMOVE_TRAIT(M, TRAIT_PIERCEIMMUNE, DISEASE_TRAIT)
- if(fireproof)
- REMOVE_TRAIT(M, TRAIT_RESISTHIGHPRESSURE, DISEASE_TRAIT)
- REMOVE_TRAIT(M, TRAIT_RESISTHEAT, DISEASE_TRAIT)
- M.weather_immunities -= "ash"
- M.weather_immunities -= "lava"
-
diff --git a/code/datums/elements/decals/blood.dm b/code/datums/elements/decals/blood.dm
index 85f75bef2416..0a3ca8ce59a3 100644
--- a/code/datums/elements/decals/blood.dm
+++ b/code/datums/elements/decals/blood.dm
@@ -6,9 +6,11 @@
. = ..()
RegisterSignal(target, COMSIG_ATOM_GET_EXAMINE_NAME, PROC_REF(get_examine_name), TRUE)
+ RegisterSignal(target, list(COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED), PROC_REF(redraw), TRUE)
/datum/element/decal/blood/Detach(atom/source, force)
UnregisterSignal(source, COMSIG_ATOM_GET_EXAMINE_NAME)
+ UnregisterSignal(source, list(COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED))
return ..()
/datum/element/decal/blood/generate_appearance(_icon, _icon_state, _dir, _layer, _color, _alpha, source)
@@ -30,3 +32,11 @@
override[EXAMINE_POSITION_ARTICLE] = A.gender == PLURAL? "some" : "a"
override[EXAMINE_POSITION_BEFORE] = " blood-stained "
return COMPONENT_EXNAME_CHANGED
+
+///this is probably quite bad, let me know if you have a better solution for this -S
+/datum/element/decal/blood/proc/redraw(datum/source, mob/user)
+ SIGNAL_HANDLER
+
+ var/atom/bloodsource = source
+ Detach(source)
+ bloodsource.AddElement(/datum/element/decal/blood, bloodsource.icon, bloodsource.icon_state, _color = get_blood_dna_color(bloodsource.return_blood_DNA()))
diff --git a/code/datums/elements/world_icon.dm b/code/datums/elements/world_icon.dm
new file mode 100644
index 000000000000..bcb0129c6c68
--- /dev/null
+++ b/code/datums/elements/world_icon.dm
@@ -0,0 +1,121 @@
+/////////////////////////////////////////////////////////////
+////////// WORLD ICON ELEMENT DIRECTORY //////////
+/////////////////////////////////////////////////////////////
+//PORTED FROM MOJAVE SUN//
+
+// Slap onto something to give it a world icon that differs from the inventory one (allows for realistically sized objects and all that) //
+// To fix 25/06/2021 : Blood Decals, Mutable Overlays and other baked in bitch ass overlays that need to be remade when the icon changes //
+// Fixed 07/05/2022: Now you can deal with the above by handling everything with attached_proc instead
+// Fixed 12/04/2023: Icon states, Needs major tuning up by someone who can properly make it work
+
+/datum/element/world_icon
+ id_arg_index = 2
+ element_flags = ELEMENT_BESPOKE | ELEMENT_DETACH
+ //If we want COMPLEX world icon behavior, this proc will handle icon updating when the item is NOT in the inventory.
+ //I just assumed that the default update_icon is for inventory sprites because ss13 basically focuses on how the sprites
+ //look on your hand, not how they realistically look in the world.
+ var/attached_proc
+ /// Only used if attached_proc doesn't exist, simply changes the icon of target to this when it's in the inventory
+ var/inventory_icon
+ /// Only used if attached_proc doesn't exist, simply changes the icon of target to this when it's NOT in the inventory
+ var/world_icon
+ /// Only used when inventory state icon is different from original
+ var/inventory_icon_state
+ /// Only used when world state icon is different from original, pretty much just the original "icon_state" but if you for some reason need to flip the standard icon states for this element around you can use this
+ var/world_icon_state
+
+/datum/element/world_icon/Attach(obj/item/target, attached_proc, world_icon, inventory_icon, world_icon_state, inventory_icon_state)
+ . = ..()
+ if(!istype(target))
+ return ELEMENT_INCOMPATIBLE
+
+ src.attached_proc = attached_proc
+ src.world_icon = world_icon
+ src.world_icon_state = world_icon_state
+ src.inventory_icon = inventory_icon
+ src.inventory_icon_state = inventory_icon_state
+ RegisterSignal(target, COMSIG_ATOM_UPDATE_ICON, PROC_REF(update_icon))
+ RegisterSignal(target, COMSIG_ATOM_UPDATE_ICON_STATE, PROC_REF(update_icon_state))
+ RegisterSignal(target, list(COMSIG_ITEM_EQUIPPED, COMSIG_STORAGE_ENTERED, COMSIG_ITEM_DROPPED, COMSIG_STORAGE_EXITED), PROC_REF(inventory_updated))
+ target.update_appearance(UPDATE_ICON)
+ target.update_appearance(UPDATE_ICON_STATE)
+
+/datum/element/world_icon/Detach(obj/item/source)
+ . = ..()
+ UnregisterSignal(source, COMSIG_ATOM_UPDATE_ICON)
+ UnregisterSignal(source, COMSIG_ATOM_UPDATE_ICON_STATE, PROC_REF(update_icon_state))
+ UnregisterSignal(source, list(COMSIG_ITEM_EQUIPPED, COMSIG_STORAGE_ENTERED, COMSIG_ITEM_DROPPED, COMSIG_STORAGE_EXITED))
+ source.update_appearance(UPDATE_ICON)
+ source.update_appearance(UPDATE_ICON_STATE)
+
+/datum/element/world_icon/proc/update_icon(obj/item/source, updates)
+ SIGNAL_HANDLER
+
+ if((source.item_flags & IN_INVENTORY) || (source.loc && SEND_SIGNAL(source.loc, COMSIG_CONTAINS_STORAGE)))
+ if(attached_proc)
+ return
+ return default_inventory_icon(source)
+
+ if(attached_proc)
+ return call(source, attached_proc)(updates)
+ else
+ return default_world_icon(source)
+
+/datum/element/world_icon/proc/update_icon_state(obj/item/source, updates)
+ SIGNAL_HANDLER
+
+ if((source.item_flags & IN_INVENTORY) || (source.loc && SEND_SIGNAL(source.loc, COMSIG_CONTAINS_STORAGE)))
+ if(attached_proc)
+ return
+ return default_inventory_icon_state(source)
+
+ if(attached_proc)
+ return call(source, attached_proc)(updates)
+ else
+ return default_world_icon_state(source)
+
+/datum/element/world_icon/proc/inventory_updated(obj/item/source)
+ SIGNAL_HANDLER
+
+ source.update_appearance(UPDATE_ICON)
+ source.update_appearance(UPDATE_ICON_STATE)
+
+/datum/element/world_icon/proc/default_inventory_icon(obj/item/source)
+ SIGNAL_HANDLER
+
+ source.icon = inventory_icon
+
+/datum/element/world_icon/proc/default_world_icon(obj/item/source)
+ SIGNAL_HANDLER
+
+ source.icon = world_icon
+
+/datum/element/world_icon/proc/default_inventory_icon_state(obj/item/source)
+ SIGNAL_HANDLER
+
+ if(!inventory_icon_state)
+ source.icon_state = source.icon_state
+ return
+
+ INVOKE_ASYNC(src, PROC_REF(check_inventory_state), source)
+
+/datum/element/world_icon/proc/default_world_icon_state(obj/item/source)
+ SIGNAL_HANDLER
+
+ if(!world_icon_state)
+ source.icon_state = source.icon_state
+ return
+
+ INVOKE_ASYNC(src, PROC_REF(check_world_icon_state), source)
+
+/datum/element/world_icon/proc/check_inventory_state(obj/item/source)
+ SIGNAL_HANDLER
+
+ inventory_icon_state = source.inventory_state
+ source.icon_state = inventory_icon_state
+
+/datum/element/world_icon/proc/check_world_icon_state(obj/item/source)
+ SIGNAL_HANDLER
+
+ world_icon_state = source.world_state
+ source.icon_state = world_icon_state
diff --git a/code/datums/guestbook.dm b/code/datums/guestbook.dm
new file mode 100644
index 000000000000..99104f09d715
--- /dev/null
+++ b/code/datums/guestbook.dm
@@ -0,0 +1,148 @@
+/**
+ * THE GUESTBOOK DATUM // ripped straight from mojave.
+ *
+ * Essentially, this datum handles the people that a given human knows,
+ * to handle getting the correct names on examine and saycode.
+ */
+/datum/guestbook
+ /// Associative list of known guests, real_name = known_name
+ var/list/known_names
+
+/datum/guestbook/Destroy(force)
+ known_names = null
+ return ..()
+
+/datum/guestbook/ui_interact(mob/user, datum/tgui/ui)
+ ui = SStgui.try_update_ui(user, src, ui)
+ if(!ui)
+ ui = new(user, src, "Guestbook", "[user.real_name]'s Guestbook")
+ ui.set_autoupdate(FALSE)
+ ui.open()
+
+/datum/guestbook/ui_state(mob/user)
+ return GLOB.always_state
+
+/datum/guestbook/ui_data(mob/user)
+ var/list/data = list()
+ var/list/names = list()
+ for(var/real_name in known_names)
+ var/given_name = LAZYACCESS(known_names, real_name)
+ names += list(list("real_name" = real_name, "given_name" = given_name))
+ data["names"] = names
+ return data
+
+/datum/guestbook/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
+ . = ..()
+ if(.)
+ return .
+ switch(action)
+ if("rename_guest")
+ var/real_name = params["real_name"]
+ var/new_name = params["new_name"]
+ new_name = reject_bad_name(new_name, max_length = 42)
+ if(!new_name)
+ to_chat(usr, span_warning("That's a pretty terrible name. You can do better."))
+ return FALSE
+ if(!rename_guest(usr, null, real_name, new_name, silent = FALSE))
+ return FALSE
+ return TRUE
+ if("delete_guest")
+ var/real_name = params["real_name"]
+ if(!remove_guest(usr, null, real_name, silent = FALSE))
+ return FALSE
+ return TRUE
+
+/datum/guestbook/proc/try_add_guest(mob/user, mob/living/carbon/human/guest, silent = FALSE)
+ if(user == guest)
+ if(!silent)
+ to_chat(user, span_warning("That's you! You already know yourself plenty."))
+ return FALSE
+ if(!visibility_checks(user, guest, silent))
+ return FALSE
+ var/given_name = input(user, "What name do you want to give to [guest]?", "Guestbook Name", guest.get_visible_name())
+ if(!given_name)
+ if(!silent)
+ to_chat(user, span_warning("Nevermind."))
+ return FALSE
+ given_name = reject_bad_name(given_name)
+ if(!given_name)
+ if(!silent)
+ to_chat(user, span_warning("That's a pretty terrible name. You can do better."))
+ return FALSE
+ if(!visibility_checks(user, guest, silent))
+ return FALSE
+ var/face_name = guest.get_face_name("ForgetMeNot")
+ if(LAZYACCESS(known_names, face_name))
+ if(!rename_guest(user, guest, face_name, given_name, silent))
+ return FALSE
+ else
+ if(!add_guest(user, guest, face_name, given_name, silent))
+ return FALSE
+ return TRUE
+
+/datum/guestbook/proc/add_guest(mob/user, mob/living/carbon/guest, real_name, given_name, silent = TRUE)
+ //Already exists, should be handled by rename_guest()
+ var/existing_name = LAZYACCESS(known_names, real_name)
+ if(existing_name)
+ if(!silent)
+ to_chat(user, span_warning("You already know them as \"[existing_name]\"."))
+ return FALSE
+ LAZYADDASSOC(known_names, real_name, given_name)
+ if(!silent)
+ to_chat(user, span_notice("You memorize the face of [guest] as \"[given_name]\"."))
+ return TRUE
+
+/datum/guestbook/proc/rename_guest(mob/user, mob/living/carbon/guest, real_name, given_name, silent = TRUE)
+ var/old_name = LAZYACCESS(known_names, real_name)
+ if(!old_name)
+ return FALSE
+ known_names[real_name] = given_name
+ if(!silent)
+ to_chat(user, span_notice("You re-memorize the face of \"[old_name]\" as \"[given_name]\"."))
+ return TRUE
+
+/datum/guestbook/proc/try_remove_guest(mob/user, mob/living/carbon/human/guest, silent = FALSE)
+ if(user == guest)
+ if(!silent)
+ to_chat(user, span_warning("That's you! You'll never forget yourself."))
+ return
+ if(!visibility_checks(user, guest, silent))
+ return FALSE
+ var/face_name = guest.get_face_name("ForgetMeNot")
+ if(!remove_guest(user, guest, face_name, silent))
+ return FALSE
+ return TRUE
+
+/datum/guestbook/proc/remove_guest(mob/user, mob/living/carbon/guest, real_name, silent = TRUE)
+ //Already exists, should be handled by rename_guest()
+ var/existing_name = LAZYACCESS(known_names, real_name)
+ if(!existing_name)
+ if(!silent)
+ to_chat(user, span_warning("You don't know them in the first place."))
+ return FALSE
+ LAZYREMOVE(known_names, real_name)
+ if(!silent)
+ to_chat(user, span_notice("You forget the face of \"[existing_name]\"."))
+ return TRUE
+
+/datum/guestbook/proc/get_known_name(mob/user, mob/living/carbon/guest, real_name)
+ if(user == guest || isAdminObserver(user))
+ return real_name
+ return LAZYACCESS(known_names, real_name)
+
+/datum/guestbook/proc/visibility_checks(mob/user, mob/living/carbon/human/guest, silent = FALSE)
+ if(QDELETED(guest))
+ if(!silent)
+ to_chat(user, span_warning("What?"))
+ return FALSE
+ var/visible_name = guest.get_visible_name("")
+ var/face_name = guest.get_face_name("")
+ if(!visible_name || !face_name)
+ if(!silent)
+ to_chat(user, span_warning("You can't see their face very well!"))
+ return FALSE
+ if(get_dist(user, guest) > 4)
+ if(!silent)
+ to_chat(user, span_warning("You need to take a closer look at them!"))
+ return FALSE
+ return TRUE
diff --git a/code/datums/mapgen/planetary/AsteroidGenerator.dm b/code/datums/mapgen/planetary/AsteroidGenerator.dm
index c2f7a5340097..737194b5ee28 100644
--- a/code/datums/mapgen/planetary/AsteroidGenerator.dm
+++ b/code/datums/mapgen/planetary/AsteroidGenerator.dm
@@ -114,7 +114,10 @@
/obj/structure/geyser/random = 1,
/obj/structure/spawner/mining/goliath = 1,
/obj/structure/spawner/mining = 1,
- /obj/structure/spawner/mining/hivelord = 1
+ /obj/structure/spawner/mining/hivelord = 1,
+ /obj/structure/vein/asteroid = 5,
+ /obj/structure/vein/classtwo/asteroid = 10,
+ /obj/structure/vein/classthree/asteroid = 5
)
mob_spawn_list = list(
@@ -157,8 +160,11 @@
)
feature_spawn_list = list(
- /obj/structure/geyser/random = 1,
- /obj/structure/spawner/mining/carp = 1
+ /obj/structure/geyser/random = 5,
+ /obj/structure/spawner/mining/carp = 5,
+ /obj/structure/vein/asteroid = 10,
+ /obj/structure/vein/classtwo/asteroid = 15,
+ /obj/structure/vein/classthree/asteroid = 12
)
mob_spawn_list = list(
diff --git a/code/datums/materials/basemats.dm b/code/datums/materials/basemats.dm
index 98db1541c953..ed8dd509ec3b 100644
--- a/code/datums/materials/basemats.dm
+++ b/code/datums/materials/basemats.dm
@@ -127,30 +127,6 @@ Unless you know what you're doing, only use the first three numbers. They're in
ore_type = /obj/item/stack/ore/bluespace_crystal
value_per_unit = 0.15
-///Honks and slips
-/datum/material/bananium
- name = "bananium"
- id = "bananium"
- desc = "Material with hilarious properties"
- color = "#ffff00" //obnoxiously bright yellow
- categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE)
- sheet_type = /obj/item/stack/sheet/mineral/bananium
- ore_type = /obj/item/stack/ore/bananium
- value_per_unit = 0.5
- beauty_modifier = 0.5
- armor_modifiers = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 100, "bio" = 0, "rad" = 0, "fire" = 10, "acid" = 0) //Clowns cant be blown away.
-
-/datum/material/bananium/on_applied(atom/source, amount, material_flags)
- . = ..()
- source.LoadComponent(/datum/component/squeak, list('sound/items/bikehorn.ogg'=1), 50, falloff_exponent = 20)
- source.AddComponent(/datum/component/slippery, min(amount / 10, 80))
-
-
-/datum/material/bananium/on_removed(atom/source, amount, material_flags)
- . = ..()
- qdel(source.GetComponent(/datum/component/slippery))
- qdel(source.GetComponent(/datum/component/squeak))
-
///Mediocre force increase
/datum/material/titanium
@@ -166,18 +142,6 @@ Unless you know what you're doing, only use the first three numbers. They're in
beauty_modifier = 0.05
armor_modifiers = list("melee" = 1.35, "bullet" = 1.3, "laser" = 1.3, "energy" = 1.25, "bomb" = 1.25, "bio" = 1, "rad" = 1, "fire" = 0.7, "acid" = 1)
-/datum/material/runite
- name = "runite"
- id = "runite"
- desc = "Runite"
- color = "#3F9995"
- strength_modifier = 1.3
- categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE)
- sheet_type = /obj/item/stack/sheet/mineral/runite
- value_per_unit = 0.3
- beauty_modifier = 0.5
- armor_modifiers = list("melee" = 1.35, "bullet" = 2, "laser" = 0.5, "energy" = 1.25, "bomb" = 1.25, "bio" = 1, "rad" = 1, "fire" = 1.4, "acid" = 1) //rune is weak against magic lasers but strong against bullets. This is the combat triangle.
-
///Force decrease
/datum/material/plastic
name = "plastic"
@@ -224,42 +188,20 @@ Unless you know what you're doing, only use the first three numbers. They're in
var/obj/wooden = source
wooden.resistance_flags &= ~FLAMMABLE
-///Stronk force increase
-/datum/material/adamantine
- name = "adamantine"
- id = "adamantine"
- desc = "A powerful material made out of magic, I mean science!"
- color = "#6d7e8e"
+//Remember when the theme used to be "Eerie" before 1.3? Good times.
+/datum/material/hellstone
+ name = "hellstone"
+ id = "hellstone"
+ desc = "A colloquialism given to millenia-old slag, heat-treated through the eons in deep magma."
+ color = "#ffaf5e"
strength_modifier = 1.5
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE)
- sheet_type = /obj/item/stack/sheet/mineral/adamantine
+ sheet_type = /obj/item/stack/sheet/mineral/hidden/hellstone
+ ore_type = /obj/item/stack/ore/hellstone
value_per_unit = 0.25
beauty_modifier = 0.4
armor_modifiers = list("melee" = 1.5, "bullet" = 1.5, "laser" = 1.3, "energy" = 1.3, "bomb" = 1, "bio" = 1, "rad" = 1, "fire" = 2.5, "acid" = 1)
-///RPG Magic.
-/datum/material/mythril
- name = "mythril"
- id = "mythril"
- desc = "How this even exists is byond me"
- color = "#f2d5d7"
- categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE)
- sheet_type = /obj/item/stack/sheet/mineral/mythril
- value_per_unit = 0.75
- strength_modifier = 1.2
- armor_modifiers = list("melee" = 1.5, "bullet" = 1.5, "laser" = 1.5, "energy" = 1.5, "bomb" = 1.5, "bio" = 1.5, "rad" = 1.5, "fire" = 1.5, "acid" = 1.5)
- beauty_modifier = 0.5
-
-/datum/material/mythril/on_applied_obj(atom/source, amount, material_flags)
- . = ..()
- if(istype(source, /obj/item))
- source.AddComponent(/datum/component/fantasy)
-
-/datum/material/mythril/on_removed_obj(atom/source, material_flags)
- . = ..()
- if(istype(source, /obj/item))
- qdel(source.GetComponent(/datum/component/fantasy))
-
//formed when freon react with o2, emits a lot of plasma when heated
/datum/material/hot_ice
name = "hot ice"
@@ -323,18 +265,6 @@ Unless you know what you're doing, only use the first three numbers. They're in
turf_sound_override = FOOTSTEP_SAND
texture_layer_icon_state = "sand"
-/datum/material/runedmetal
- name = "runed metal"
- id = "runed metal"
- desc = "Mir'ntrath barhah Nar'sie."
- color = "#3C3434"
- categories = list(MAT_CATEGORY_RIGID = TRUE)
- sheet_type = /obj/item/stack/sheet/runed_metal
- value_per_unit = 0.75
- armor_modifiers = list("melee" = 1.2, "bullet" = 1.2, "laser" = 1, "energy" = 1, "bomb" = 1.2, "bio" = 1.2, "rad" = 1.5, "fire" = 1.5, "acid" = 1.5)
- beauty_modifier = -0.15
- texture_layer_icon_state = "runed"
-
/datum/material/bronze
name = "bronze"
id = "bronze"
diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index a73dc626d8e5..771ef4dd987e 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -79,6 +79,9 @@
/// The index for our current scar slot, so we don't have to constantly check the savefile (unlike the slots themselves, this index is independent of selected char slot, and increments whenever a valid char is joined with)
var/current_scar_slot_index
+ /// Guestbook datum, in case we actually make use of the guestbook mechanics
+ var/datum/guestbook/guestbook
+
///Skill multiplier, adjusts how much xp you get/loose from adjust_xp. Dont override it directly, add your reason to experience_multiplier_reasons and use that as a key to put your value in there.
var/experience_multiplier = 1
///Skill multiplier list, just slap your multiplier change onto this with the type it is coming from as key.
@@ -95,6 +98,7 @@
key = _key
soulOwner = src
martial_art = default_martial_art
+ guestbook = new()
init_known_skills()
/datum/mind/Destroy()
@@ -102,6 +106,7 @@
if(islist(antag_datums))
QDEL_LIST(antag_datums)
QDEL_NULL(language_holder)
+ QDEL_NULL(guestbook)
set_current(null)
soulOwner = null
return ..()
diff --git a/code/datums/mood_events/drug_events.dm b/code/datums/mood_events/drug_events.dm
index 6af401e8b009..028973c5c839 100644
--- a/code/datums/mood_events/drug_events.dm
+++ b/code/datums/mood_events/drug_events.dm
@@ -4,12 +4,12 @@
/datum/mood_event/smoked
description = "I have had a smoke recently.\n"
- mood_change = 2
+ mood_change = 1
timeout = 6 MINUTES
/datum/mood_event/wrong_brand
- description = "I hate that brand of cigarettes.\n"
- mood_change = -2
+ description = "That brand of cigarette just doesn't hit right.\n"
+ mood_change = -1
timeout = 6 MINUTES
/datum/mood_event/overdose
diff --git a/code/datums/mood_events/generic_positive_events.dm b/code/datums/mood_events/generic_positive_events.dm
index 899c617a99d2..f9e339c3c081 100644
--- a/code/datums/mood_events/generic_positive_events.dm
+++ b/code/datums/mood_events/generic_positive_events.dm
@@ -105,14 +105,6 @@
description = "My family heirloom is safe with me.\n"
mood_change = 1
-/datum/mood_event/fan_clown_pin
- description = "I love showing off my clown pin!\n"
- mood_change = 1
-
-/datum/mood_event/fan_mime_pin
- description = "I love showing off my mime pin!\n"
- mood_change = 1
-
/datum/mood_event/rilena_fan
description = "I love my RILENA merch!\n"
mood_change = 1
diff --git a/code/datums/outfit.dm b/code/datums/outfit.dm
index 964c269b5f43..34771af91ed2 100644
--- a/code/datums/outfit.dm
+++ b/code/datums/outfit.dm
@@ -104,6 +104,9 @@
/// Set to FALSE if your outfit requires runtime parameters
var/can_be_admin_equipped = TRUE
+ // Used to determine if it should be ignored in unit tests due to being to dynamic to always spawn backpack contents right
+ var/random = FALSE
+
/**
* extra types for chameleon outfit changes, mostly guns
*
diff --git a/code/datums/progressbar.dm b/code/datums/progressbar.dm
index 10fb03aac41b..7134d2e8ecef 100644
--- a/code/datums/progressbar.dm
+++ b/code/datums/progressbar.dm
@@ -37,7 +37,7 @@
bar.appearance_flags = APPEARANCE_UI_IGNORE_ALPHA
user = User
- LAZYADDASSOC(user.progressbars, bar_loc, src)
+ LAZYADDASSOCLIST(user.progressbars, bar_loc, src)
var/list/bars = user.progressbars[bar_loc]
listindex = bars.len
diff --git a/code/datums/ruins/lavaland.dm b/code/datums/ruins/lavaland.dm
index 9944cb00fe55..bb4bcf74b31c 100644
--- a/code/datums/ruins/lavaland.dm
+++ b/code/datums/ruins/lavaland.dm
@@ -92,11 +92,11 @@
suffix = "lavaland_surface_dwarffortress.dmm"
allow_duplicates = FALSE
-/datum/map_template/ruin/lavaland/ashwalker_shrine
- name = "Ashwalker shrine"
- id = "ashwalker_shrine"
- description = "A destroyed ashwalker village. What even happened here?"
- suffix = "lavaland_surface_ashwalker_shrine.dmm"
+/datum/map_template/ruin/lavaland/buried_shrine
+ name = "Buried Shrine"
+ id = "buried_shrine"
+ description = "An ancient temple belonging to some long-gone inhabitants, wrecked and buried by the volcanic activity of it's home planet."
+ suffix = "lavaland_surface_buried_shrine.dmm"
/datum/map_template/ruin/lavaland/spookycrash
name = "Spooky Crash"
diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm
index 52087f03174c..02b96c1b81de 100644
--- a/code/datums/status_effects/debuffs.dm
+++ b/code/datums/status_effects/debuffs.dm
@@ -334,7 +334,8 @@
/datum/status_effect/neck_slice/tick()
var/mob/living/carbon/human/H = owner
- if(H.stat == DEAD || H.bleed_rate <= 8)
+ var/obj/item/bodypart/throat_in_question = H.get_bodypart(BODY_ZONE_HEAD)
+ if(H.stat == DEAD || throat_in_question?.bleeding <= 8)
H.remove_status_effect(/datum/status_effect/neck_slice)
if(prob(10))
H.emote(pick("gasp", "gag", "choke"))
diff --git a/code/datums/traits/good.dm b/code/datums/traits/good.dm
index 52ee20e23c27..574c35f60beb 100644
--- a/code/datums/traits/good.dm
+++ b/code/datums/traits/good.dm
@@ -62,26 +62,6 @@
lose_text = "You feel isolated from others."
medical_record_text = "Patient is highly perceptive of and sensitive to social cues, or may possibly have ESP. Further testing needed."
-/datum/quirk/fan_clown
- name = "Clown Fan"
- desc = "You enjoy clown antics and get a mood boost from wearing your clown pin."
- value = 1
- mob_traits = list(TRAIT_FAN_CLOWN)
- gain_text = "You are a big fan of clowns."
- lose_text = "The clown doesn't seem so great."
- medical_record_text = "Patient reports being a big fan of clowns."
-
-/datum/quirk/fan_clown/on_spawn()
- var/mob/living/carbon/human/H = quirk_holder
- var/obj/item/clothing/accessory/fan_clown_pin/B = new(get_turf(H))
- var/list/slots = list (
- "backpack" = ITEM_SLOT_BACKPACK,
- "hands" = ITEM_SLOT_HANDS,
- )
- H.equip_in_one_of_slots(B, slots , qdel_on_fail = TRUE)
- var/datum/atom_hud/fan = GLOB.huds[DATA_HUD_FAN]
- fan.add_hud_to(H)
-
/datum/quirk/fan_rilena
name = "RILENA Super Fan"
desc = "You are a major fan of the popular webseries RILENA: LMR. You get a mood boost from plushies of your favorite characters, and wearing your Xader pin."
@@ -102,26 +82,6 @@
var/datum/atom_hud/fan = GLOB.huds[DATA_HUD_FAN]
fan.add_hud_to(H)
-/datum/quirk/fan_mime
- name = "Mime Fan"
- desc = "You enjoy mime antics and get a mood boost from wearing your mime pin."
- value = 1
- mob_traits = list(TRAIT_FAN_MIME)
- gain_text = "You are a big fan of the Mime."
- lose_text = "The mime doesn't seem so great."
- medical_record_text = "Patient reports being a big fan of mimes."
-
-/datum/quirk/fan_mime/on_spawn()
- var/mob/living/carbon/human/H = quirk_holder
- var/obj/item/clothing/accessory/fan_mime_pin/B = new(get_turf(H))
- var/list/slots = list (
- "backpack" = ITEM_SLOT_BACKPACK,
- "hands" = ITEM_SLOT_HANDS,
- )
- H.equip_in_one_of_slots(B, slots , qdel_on_fail = TRUE)
- var/datum/atom_hud/fan = GLOB.huds[DATA_HUD_FAN]
- fan.add_hud_to(H)
-
/datum/quirk/freerunning
name = "Freerunning"
desc = "You're great at quick moves! You can climb tables more quickly."
diff --git a/code/datums/traits/negative.dm b/code/datums/traits/negative.dm
index 4b0afce14b47..d1a8fd6acaa5 100644
--- a/code/datums/traits/negative.dm
+++ b/code/datums/traits/negative.dm
@@ -430,11 +430,6 @@
/datum/quirk/insanity/proc/madness()
quirk_holder.hallucination += rand(10, 25)
-/datum/quirk/insanity/post_add() //I don't /think/ we'll need this but for newbies who think "roleplay as insane" = "license to kill" it's probably a good thing to have
- if(!quirk_holder.mind || quirk_holder.mind.special_role)
- return
- to_chat(quirk_holder, "Please note that your dissociation syndrome does NOT give you the right to attack people or otherwise cause any interference to \
- the round. You are not an antagonist, and the rules will treat you the same as other crewmembers.")
/datum/quirk/social_anxiety
name = "Social Anxiety"
@@ -589,24 +584,57 @@
reagent_type = /datum/reagent/drug/nicotine
accessory_type = /obj/item/lighter/greyscale
+//I fucking hate prefscode
+
/datum/quirk/junkie/smoker/on_spawn()
- drug_container_type = pick(/obj/item/storage/fancy/cigarettes,
- /obj/item/storage/fancy/cigarettes/cigpack_midori,
- /obj/item/storage/fancy/cigarettes/cigpack_uplift,
- /obj/item/storage/fancy/cigarettes/cigpack_robust,
- /obj/item/storage/fancy/cigarettes/cigpack_robustgold,
- /obj/item/storage/fancy/cigarettes/cigpack_carp)
+ var/mob/living/carbon/human/H = quirk_holder
+ switch (H.client?.prefs.preferred_smoke_brand)
+ if (PREF_CIG_SPACE)
+ drug_container_type = /obj/item/storage/fancy/cigarettes
+ if (PREF_CIG_DROMEDARY)
+ drug_container_type = /obj/item/storage/fancy/cigarettes/dromedaryco
+ if (PREF_CIG_UPLIFT)
+ drug_container_type = /obj/item/storage/fancy/cigarettes/cigpack_uplift
+ if (PREF_CIG_ROBUST)
+ drug_container_type = /obj/item/storage/fancy/cigarettes/cigpack_robust
+ if (PREF_CIG_ROBUSTGOLD)
+ drug_container_type = /obj/item/storage/fancy/cigarettes/cigpack_robustgold
+ if (PREF_CIG_CARP)
+ drug_container_type= /obj/item/storage/fancy/cigarettes/cigpack_carp
+ if (PREF_CIG_MIDORI)
+ drug_container_type = /obj/item/storage/fancy/cigarettes/cigpack_midori
+ if (PREF_CIGAR)
+ drug_container_type = /obj/item/storage/fancy/cigarettes/cigars
+ accessory_type = /obj/item/storage/box/matches
+ if (PREF_CIGAR_SOLAR)
+ drug_container_type = /obj/item/storage/fancy/cigarettes/cigars/havana
+ accessory_type = /obj/item/storage/box/matches
+ if (PREF_CIGAR_COHIBA)
+ drug_container_type = /obj/item/storage/fancy/cigarettes/cigars/cohiba
+ accessory_type = /obj/item/storage/box/matches
+ if (PREF_VAPE)
+ drug_container_type = /obj/item/clothing/mask/vape
+ accessory_type = null
+ if (PREF_PIPE)
+ drug_container_type = /obj/item/clothing/mask/cigarette/pipe
+ accessory_type = /obj/item/storage/box/matches
+ else
+ CRASH("Someone had an improper cigarette pref on loading")
. = ..()
/datum/quirk/junkie/smoker/announce_drugs()
- to_chat(quirk_holder, "There is a [initial(drug_container_type.name)] [where_drug], and a lighter [where_accessory]. Make sure you get your favorite brand when you run out.")
-
+ if(accessory_type == null)
+ to_chat(quirk_holder, "There is a [initial(drug_container_type.name)] [where_drug], Make sure you get a refill soon.")
+ return
+ to_chat(quirk_holder, "There is a [initial(drug_container_type.name)] [where_drug], and a [initial(accessory_type.name)] [where_accessory]. Make sure you get your favorite brand when you run out.")
/datum/quirk/junkie/smoker/on_process()
. = ..()
var/mob/living/carbon/human/H = quirk_holder
var/obj/item/I = H.get_item_by_slot(ITEM_SLOT_MASK)
if (istype(I, /obj/item/clothing/mask/cigarette))
+ if(I == drug_container_type)
+ return
var/obj/item/storage/fancy/cigarettes/C = drug_container_type
if(istype(I, initial(C.spawn_type)))
SEND_SIGNAL(quirk_holder, COMSIG_CLEAR_MOOD_EVENT, "wrong_cigs")
diff --git a/code/game/area/areas/ruins/lavaland.dm b/code/game/area/areas/ruins/lavaland.dm
index 5e8e706a319d..c4d3f75f8fb7 100644
--- a/code/game/area/areas/ruins/lavaland.dm
+++ b/code/game/area/areas/ruins/lavaland.dm
@@ -112,3 +112,8 @@
/area/ruin/unpowered/scorched_hut
name = "Scorched Hut"
icon_state = "red"
+
+/area/ruin/unpowered/buried_shrine
+ name = "Buried Shrine"
+ icon_state = "red"
+
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index 1b919acb491b..44d5de773f94 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -1682,7 +1682,11 @@
active_hud.screentip_text.maptext = ""
else
//We inline a MAPTEXT() here, because there's no good way to statically add to a string like this
- active_hud.screentip_text.maptext = "[name]"
+ active_hud.screentip_text.maptext = "[get_screentip_name(client)]"
+
+/// Returns the atom name that should be used on screentip
+/atom/proc/get_screentip_name(client/hovering_client)
+ return name
///Called whenever a player is spawned on the same turf as this atom.
/atom/proc/join_player_here(mob/M)
diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm
index 7dd3d612ae81..beb7cef2718f 100644
--- a/code/game/atoms_movable.dm
+++ b/code/game/atoms_movable.dm
@@ -560,7 +560,7 @@
if(!client)
return
if(new_virtual_z)
- LAZYADDASSOC(SSmobs.players_by_virtual_z, "[new_virtual_z]", src)
+ LAZYADDASSOCLIST(SSmobs.players_by_virtual_z, "[new_virtual_z]", src)
SSidlenpcpool.try_wakeup_virtual_z(new_virtual_z)
/mob/dead/on_virtual_z_change(new_virtual_z, previous_virtual_z)
@@ -570,7 +570,7 @@
if(!client)
return
if(new_virtual_z)
- LAZYADDASSOC(SSmobs.dead_players_by_virtual_z, "[new_virtual_z]", src)
+ LAZYADDASSOCLIST(SSmobs.dead_players_by_virtual_z, "[new_virtual_z]", src)
// Make sure you know what you're doing if you call this, this is intended to only be called by byond directly.
// You probably want CanPass()
@@ -624,7 +624,7 @@
SEND_SIGNAL(src, COMSIG_MOVABLE_BUMP, A)
. = ..()
if(!QDELETED(throwing))
- throwing.hit_atom(A)
+ throwing.finalize(hit = TRUE, target = A)
. = TRUE
if(QDELETED(A))
return
@@ -821,7 +821,9 @@
var/impact_signal = SEND_SIGNAL(src, COMSIG_MOVABLE_IMPACT, hit_atom, throwingdatum)
if(impact_signal & COMPONENT_MOVABLE_IMPACT_FLIP_HITPUSH)
hitpush = FALSE // hacky, tie this to something else or a proper workaround later
-
+ if(isturf(loc))
+ var/turf/T = loc
+ T.Entered(src)
if(impact_signal & ~COMPONENT_MOVABLE_IMPACT_NEVERMIND) // in case a signal interceptor broke or deleted the thing before we could process our hit
return hit_atom.hitby(src, throwingdatum=throwingdatum, hitpush=hitpush)
@@ -883,7 +885,7 @@
else
target_zone = thrower.zone_selected
- var/datum/thrownthing/TT = new(src, target, get_turf(target), get_dir(src, target), range, speed, thrower, diagonals_first, force, gentle, callback, target_zone)
+ var/datum/thrownthing/TT = new(src, target, get_dir(src, target), range, speed, thrower, diagonals_first, force, gentle, callback, target_zone)
var/dist_x = abs(target.x - src.x)
var/dist_y = abs(target.y - src.y)
diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm
index 1dee49da7f54..4020895f29bd 100644
--- a/code/game/data_huds.dm
+++ b/code/game/data_huds.dm
@@ -216,24 +216,6 @@ Medical HUD! Basic mode needs suit sensors on.
holder.icon_state = "hudhealthy"
-/***********************************************
-FAN HUDs! For identifying other fans on-sight.
-************************************************/
-
-//HOOKS
-
-/mob/living/carbon/human/proc/fan_hud_set_fandom()
- var/image/holder = hud_list[FAN_HUD]
- var/icon/I = icon(icon, icon_state, dir)
- holder.pixel_y = I.Height() - world.icon_size
- holder.icon_state = "hudfan_no"
- var/obj/item/clothing/under/U = get_item_by_slot(ITEM_SLOT_ICLOTHING)
- if(U)
- if(istype(U.attached_accessory, /obj/item/clothing/accessory/fan_mime_pin))
- holder.icon_state = "fan_mime_pin"
- else if(istype(U.attached_accessory, /obj/item/clothing/accessory/fan_clown_pin))
- holder.icon_state = "fan_clown_pin"
-
/***********************************************
Security HUDs! Basic mode shows only the job.
************************************************/
diff --git a/code/game/gamemodes/clown_ops/clown_weapons.dm b/code/game/gamemodes/clown_ops/clown_weapons.dm
index fe95ea3c5988..3064a52a48ad 100644
--- a/code/game/gamemodes/clown_ops/clown_weapons.dm
+++ b/code/game/gamemodes/clown_ops/clown_weapons.dm
@@ -40,14 +40,14 @@
/obj/item/clothing/shoes/clown_shoes/banana_shoes/combat/Initialize()
. = ..()
var/datum/component/material_container/bananium = GetComponent(/datum/component/material_container)
- bananium.insert_amount_mat(max_recharge, /datum/material/bananium)
+ bananium.insert_amount_mat(max_recharge, /datum/material/hellstone)
START_PROCESSING(SSobj, src)
/obj/item/clothing/shoes/clown_shoes/banana_shoes/combat/process()
var/datum/component/material_container/bananium = GetComponent(/datum/component/material_container)
- var/bananium_amount = bananium.get_material_amount(/datum/material/bananium)
+ var/bananium_amount = bananium.get_material_amount(/datum/material/hellstone)
if(bananium_amount < max_recharge)
- bananium.insert_amount_mat(min(recharge_rate, max_recharge - bananium_amount), /datum/material/bananium)
+ bananium.insert_amount_mat(min(recharge_rate, max_recharge - bananium_amount), /datum/material/hellstone)
/obj/item/clothing/shoes/clown_shoes/banana_shoes/combat/attack_self(mob/user)
ui_action_click(user)
diff --git a/code/game/machinery/PDApainter.dm b/code/game/machinery/PDApainter.dm
index e9906a6a0089..b423b28ce4d2 100644
--- a/code/game/machinery/PDApainter.dm
+++ b/code/game/machinery/PDApainter.dm
@@ -5,6 +5,8 @@
icon_state = "pdapainter"
base_icon_state = "pdapainter"
density = TRUE
+ use_power = IDLE_POWER_USE
+ idle_power_usage = IDLE_DRAW_MINIMAL
max_integrity = 200
var/obj/item/pda/storedpda = null
var/list/colorlist = list()
diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm
index f0a1c403cfa4..3d4d05336c3c 100644
--- a/code/game/machinery/Sleeper.dm
+++ b/code/game/machinery/Sleeper.dm
@@ -11,6 +11,8 @@
icon_state = "sleeper"
base_icon_state = "sleeper"
density = FALSE
+ use_power = IDLE_POWER_USE
+ idle_power_usage = IDLE_DRAW_LOW
state_open = TRUE
circuit = /obj/item/circuitboard/machine/sleeper
clicksound = 'sound/machines/pda_button1.ogg'
@@ -100,7 +102,7 @@
playsound(src, 'sound/machines/synth_yes.ogg', 50, TRUE, frequency = rand(5120, 8800))
target.apply_status_effect(STATUS_EFFECT_STASIS, STASIS_MACHINE_EFFECT)
target.ExtinguishMob()
- use_power = ACTIVE_POWER_USE
+ set_active_power()
/obj/machinery/sleeper/proc/thaw_them(mob/living/target)
if(IS_IN_STASIS(target))
@@ -109,7 +111,8 @@
/obj/machinery/sleeper/process()
if(!occupant || !isliving(occupant))
- use_power = IDLE_POWER_USE
+ if(use_static_power != IDLE_POWER_USE)
+ set_idle_power()
return
var/mob/living/L_occupant = occupant
if(stasis_running())
diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm
index a17b9c705dc1..4cddf93b2478 100644
--- a/code/game/machinery/_machinery.dm
+++ b/code/game/machinery/_machinery.dm
@@ -21,7 +21,7 @@ Class Variables:
power_channel (num)
What channel to draw from when drawing power for power mode
Possible Values:
- AREA_USAGE_EQUIP:0 -- Equipment Channel
+ AREA_USAGE_EQUIP:1 -- Equipment Channel
AREA_USAGE_LIGHT:2 -- Lighting Channel
AREA_USAGE_ENVIRON:3 -- Environment Channel
@@ -44,7 +44,7 @@ Class Procs:
auto_use_power() 'game/machinery/machine.dm'
This proc determines how power mode power is deducted by the machine.
'auto_use_power()' is called by the 'master_controller' game_controller every
- tick.
+ tick. (not anymore)
Return Value:
return:1 -- if object is powered
@@ -102,6 +102,7 @@ Class Procs:
//0 = dont run the auto
//1 = run auto, use idle
//2 = run auto, use active
+ var/use_static_power = NO_POWER_USE
var/idle_power_usage = 0
var/active_power_usage = 0
var/power_channel = AREA_USAGE_EQUIP
@@ -151,7 +152,11 @@ Class Procs:
if(occupant_typecache)
occupant_typecache = typecacheof(occupant_typecache)
-
+ switch(use_power)
+ if(IDLE_POWER_USE)
+ set_idle_power()
+ if(ACTIVE_POWER_USE)
+ set_active_power()
return INITIALIZE_HINT_LATELOAD
/// Helper proc for telling a machine to start processing with the subsystem type that is located in its `subsystem_type` var.
@@ -168,7 +173,16 @@ Class Procs:
. = ..()
power_change()
become_area_sensitive(ROUNDSTART_TRAIT)
- RegisterSignal(src, COMSIG_ENTER_AREA, PROC_REF(power_change))
+ RegisterSignal(src, COMSIG_ENTER_AREA, PROC_REF(enter_area))
+ RegisterSignal(src, COMSIG_EXIT_AREA, PROC_REF(exit_area))
+
+/obj/machinery/proc/enter_area(datum/source, area/A)
+ SIGNAL_HANDLER
+ power_change(A)
+
+/obj/machinery/proc/exit_area(datum/source, area/A)
+ SIGNAL_HANDLER
+ set_no_power(A)
/obj/machinery/Destroy()
GLOB.machines.Remove(src)
@@ -177,6 +191,7 @@ Class Procs:
lose_area_sensitivity(ROUNDSTART_TRAIT)
QDEL_NULL(circuit)
QDEL_LIST(component_parts)
+ set_no_power()
return ..()
/obj/machinery/proc/locate_machinery()
@@ -273,8 +288,8 @@ Class Procs:
target.forceMove(src)
updateUsrDialog()
update_appearance()
-
-/obj/machinery/proc/auto_use_power()
+/*
+/obj/machinery/proc/auto_use_power() //obsolete, tick controller doesn't call this anymore because machines use addStaticPower now.
if(!powered(power_channel))
return 0
if(use_power == 1)
@@ -282,7 +297,7 @@ Class Procs:
else if(use_power >= 2)
use_power(active_power_usage,power_channel)
return 1
-
+*/
///Called when we want to change the value of the `is_operational` variable. Boolean.
/obj/machinery/proc/set_is_operational(new_value)
@@ -618,6 +633,7 @@ Class Procs:
//called on deconstruction before the final deletion
/obj/machinery/proc/on_deconstruction()
+ set_no_power()
return
/obj/machinery/proc/can_be_overridden()
diff --git a/code/game/machinery/airlock_cycle_control.dm b/code/game/machinery/airlock_cycle_control.dm
index 76094e803cd3..7ba391fae782 100644
--- a/code/game/machinery/airlock_cycle_control.dm
+++ b/code/game/machinery/airlock_cycle_control.dm
@@ -67,8 +67,8 @@
icon = 'icons/obj/monitors.dmi'
icon_state = "aac"
use_power = IDLE_POWER_USE
- idle_power_usage = 4
- active_power_usage = 8
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MINIMAL
power_channel = AREA_USAGE_ENVIRON
req_access = list(ACCESS_ATMOSPHERICS)
max_integrity = 250
diff --git a/code/game/machinery/announcement_system.dm b/code/game/machinery/announcement_system.dm
index f275d234fca7..d4057603957d 100644
--- a/code/game/machinery/announcement_system.dm
+++ b/code/game/machinery/announcement_system.dm
@@ -12,8 +12,8 @@ GLOBAL_LIST_EMPTY(announcement_systems)
verb_ask = "queries"
verb_exclaim = "alarms"
- idle_power_usage = 20
- active_power_usage = 50
+ idle_power_usage = IDLE_DRAW_LOW
+ active_power_usage = IDLE_DRAW_LOW
circuit = /obj/item/circuitboard/machine/announcement_system
diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm
index d83831f2c634..e63b3f75fb2b 100644
--- a/code/game/machinery/autolathe.dm
+++ b/code/game/machinery/autolathe.dm
@@ -9,8 +9,9 @@
icon_state = "autolathe"
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 10
- active_power_usage = 100
+ idle_power_usage = IDLE_DRAW_LOW
+ active_power_usage = ACTIVE_DRAW_HIGH
+ power_channel = AREA_USAGE_EQUIP
circuit = /obj/item/circuitboard/machine/autolathe
layer = BELOW_OBJ_LAYER
@@ -50,7 +51,7 @@
)
/obj/machinery/autolathe/Initialize()
- AddComponent(/datum/component/material_container,list(/datum/material/iron, /datum/material/glass, /datum/material/plastic, /datum/material/silver, /datum/material/gold, /datum/material/plasma, /datum/material/uranium, /datum/material/titanium), 0, TRUE, null, null, CALLBACK(src, PROC_REF(AfterMaterialInsert)))
+ AddComponent(/datum/component/material_container,list(/datum/material/iron, /datum/material/glass, /datum/material/plastic, /datum/material/silver, /datum/material/gold, /datum/material/plasma, /datum/material/uranium, /datum/material/titanium, /datum/material/hellstone), 0, TRUE, null, null, CALLBACK(src, PROC_REF(AfterMaterialInsert)))
. = ..()
wires = new /datum/wires/autolathe(src)
@@ -223,7 +224,7 @@
for(var/MAT in being_built.materials)
total_amount += being_built.materials[MAT]
- var/power = max(active_power_usage, (total_amount)*multiplier/5) //Change this to use all materials
+ var/power = max(active_power_usage, total_amount) //Change this to use all materials
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
@@ -252,6 +253,7 @@
use_power(power)
icon_state = "autolathe_n"
var/time = is_stack ? 32 : (32 * coeff * multiplier) ** 0.8
+ set_active_power()
addtimer(CALLBACK(src, PROC_REF(make_item), power, materials_used, custom_materials, multiplier, coeff, is_stack, usr), time)
. = TRUE
else
@@ -326,12 +328,13 @@
else
flick("autolathe_o", src) //plays metal insertion animation
- use_power(min(1000, amount_inserted / 100))
+ use_power(min(active_power_usage, amount_inserted))
/obj/machinery/autolathe/proc/make_item(power, list/materials_used, list/picked_materials, multiplier, coeff, is_stack, mob/user)
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
var/atom/A = drop_location()
use_power(power)
+ set_idle_power()
materials.use_materials(materials_used)
diff --git a/code/game/machinery/bank_machine.dm b/code/game/machinery/bank_machine.dm
index 2e93cd179ed5..83f3e366e8a3 100644
--- a/code/game/machinery/bank_machine.dm
+++ b/code/game/machinery/bank_machine.dm
@@ -3,7 +3,7 @@
desc = "A machine used to deposit and withdraw funds."
icon_screen = "vault"
icon_keyboard = "security_key"
- idle_power_usage = 100
+ idle_power_usage = IDLE_DRAW_LOW
var/siphoning = FALSE
var/next_warning = 0
diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm
index 1a89a2b011cc..f6c004ddca71 100644
--- a/code/game/machinery/buttons.dm
+++ b/code/game/machinery/buttons.dm
@@ -12,7 +12,7 @@
var/initialized_button = 0
armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 70)
use_power = IDLE_POWER_USE
- idle_power_usage = 2
+ idle_power_usage = IDLE_DRAW_MINIMAL
resistance_flags = LAVA_PROOF | FIRE_PROOF
/obj/machinery/button/indestructible
@@ -68,34 +68,40 @@
default_deconstruction_screwdriver(user, "button-open", "[skin]",W)
update_appearance()
else
- to_chat(user, "Maintenance Access Denied.")
+ to_chat(user, span_alert("Maintenance Access Denied."))
flick("[skin]-denied", src)
return
if(panel_open)
if(!device && istype(W, /obj/item/assembly))
if(!user.transferItemToLoc(W, src))
- to_chat(user, "\The [W] is stuck to you!")
+ to_chat(user, span_warning("\The [W] is stuck to you!"))
return
device = W
- to_chat(user, "You add [W] to the button.")
+ to_chat(user, span_notice("You add [W] to the button."))
if(!board && istype(W, /obj/item/electronics/airlock))
if(!user.transferItemToLoc(W, src))
- to_chat(user, "\The [W] is stuck to you!")
+ to_chat(user, span_warning("\The [W] is stuck to you!"))
return
board = W
if(board.one_access)
req_one_access = board.accesses
else
req_access = board.accesses
- to_chat(user, "You add [W] to the button.")
+ to_chat(user, span_notice("You add [W] to the button."))
+
+ if(device && W.tool_behaviour == TOOL_MULTITOOL)
+ var/obj/item/multitool/multi = W
+ if(istype(device, /obj/item/assembly/control))
+ multi.buffer = device
+ to_chat(user, span_notice("You copy the [device] to your multitool's buffer."))
if(!device && !board && W.tool_behaviour == TOOL_WRENCH)
- to_chat(user, "You start unsecuring the button frame...")
+ to_chat(user, span_notice("You start unsecuring the button frame..."))
W.play_tool_sound(src)
if(W.use_tool(src, user, 40))
- to_chat(user, "You unsecure the button frame.")
+ to_chat(user, span_notice("You unsecure the button frame."))
transfer_fingerprints_to(new /obj/item/wallframe/button(get_turf(src)))
playsound(loc, 'sound/items/deconstruct.ogg', 50, TRUE)
qdel(src)
@@ -153,14 +159,14 @@
req_one_access = list()
board = null
update_appearance()
- to_chat(user, "You remove electronics from the button frame.")
+ to_chat(user, span_notice("You remove electronics from the button frame."))
else
if(skin == "doorctrl")
skin = "launcher"
else
skin = "doorctrl"
- to_chat(user, "You change the button frame's front panel.")
+ to_chat(user, span_notice("You change the button frame's front panel."))
return
if((machine_stat & (NOPOWER|BROKEN)))
@@ -170,7 +176,7 @@
return
if(!allowed(user))
- to_chat(user, "Access Denied.")
+ to_chat(user, span_alert("Access Denied."))
flick("[skin]-denied", src)
return
diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm
index c1cca432efd4..fda41eab7789 100644
--- a/code/game/machinery/camera/camera.dm
+++ b/code/game/machinery/camera/camera.dm
@@ -9,8 +9,8 @@
icon_state = "camera" //mapping icon to represent upgrade states. if you want a different base icon, update default_camera_icon as well as this.
light_color = "#CDDDFF"
use_power = ACTIVE_POWER_USE
- idle_power_usage = 5
- active_power_usage = 10
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = IDLE_DRAW_MINIMAL*2
layer = WALL_OBJ_LAYER
resistance_flags = FIRE_PROOF
damage_deflection = 12
diff --git a/code/game/machinery/camera/presets.dm b/code/game/machinery/camera/presets.dm
index 8f57ad09203a..d5f7e618c637 100644
--- a/code/game/machinery/camera/presets.dm
+++ b/code/game/machinery/camera/presets.dm
@@ -56,18 +56,11 @@
/obj/machinery/camera/autoname/LateInitialize()
. = ..()
- number = 1
- var/area/A = get_area(src)
- if(A)
- for(var/obj/machinery/camera/autoname/C in GLOB.machines)
- if(C == src)
- continue
- var/area/CA = get_area(C)
- if(CA.type == A.type)
- if(C.number)
- number = max(number, C.number+1)
- c_tag = "[A.name] #[number]"
-
+ var/static/list/autonames_in_areas = list()
+ var/area/camera_area = get_area(src)
+ number = autonames_in_areas[camera_area] + 1
+ autonames_in_areas[camera_area] = number
+ c_tag = "[format_text(camera_area.name)] #[number]"
// UPGRADE PROCS
diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm
index e1be8d8e4453..85d2d5651203 100644
--- a/code/game/machinery/cell_charger.dm
+++ b/code/game/machinery/cell_charger.dm
@@ -4,8 +4,8 @@
icon = 'icons/obj/power.dmi'
icon_state = "ccharger"
use_power = IDLE_POWER_USE
- idle_power_usage = 5
- active_power_usage = 60
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_LOW
power_channel = AREA_USAGE_EQUIP
circuit = /obj/item/circuitboard/machine/cell_charger
pass_flags = PASSTABLE
diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index c71e94a0948a..ad4cd3834f06 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -16,6 +16,8 @@
density = TRUE
icon = 'icons/obj/machines/cloning.dmi'
icon_state = "pod_0"
+ use_power = IDLE_POWER_USE
+ idle_power_usage = IDLE_DRAW_LOW
req_access = list(ACCESS_CLONING) //FOR PREMATURE UNLOCKING.
verb_say = "states"
circuit = /obj/item/circuitboard/machine/clonepod
diff --git a/code/game/machinery/computer/_computer.dm b/code/game/machinery/computer/_computer.dm
index bdbadf79a943..3a36603c5070 100644
--- a/code/game/machinery/computer/_computer.dm
+++ b/code/game/machinery/computer/_computer.dm
@@ -4,8 +4,8 @@
icon_state = "computer"
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 300
- active_power_usage = 300
+ idle_power_usage = IDLE_DRAW_LOW
+ active_power_usage = ACTIVE_DRAW_LOW
max_integrity = 200
integrity_failure = 0.5
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 40, "acid" = 20)
diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm
index f875defd6044..c1a1171e57cc 100644
--- a/code/game/machinery/computer/crew.dm
+++ b/code/game/machinery/computer/crew.dm
@@ -6,8 +6,8 @@
icon_screen = "crew"
icon_keyboard = "med_key"
use_power = IDLE_POWER_USE
- idle_power_usage = 250
- active_power_usage = 500
+ idle_power_usage = IDLE_DRAW_LOW
+ active_power_usage = ACTIVE_DRAW_MEDIUM
circuit = /obj/item/circuitboard/computer/crew
light_color = LIGHT_COLOR_BLUE
diff --git a/code/game/machinery/computer/dna_console.dm b/code/game/machinery/computer/dna_console.dm
index ffeabbdc4e0a..815e2496d41b 100644
--- a/code/game/machinery/computer/dna_console.dm
+++ b/code/game/machinery/computer/dna_console.dm
@@ -43,8 +43,8 @@
circuit = /obj/item/circuitboard/computer/scan_consolenew
use_power = IDLE_POWER_USE
- idle_power_usage = 10
- active_power_usage = 400
+ idle_power_usage = IDLE_DRAW_LOW
+ active_power_usage = ACTIVE_DRAW_MEDIUM
light_color = LIGHT_COLOR_BLUE
/// Link to the techweb's stored research. Used to retrieve stored mutations
diff --git a/code/game/machinery/dance_machine.dm b/code/game/machinery/dance_machine.dm
index 20c3d66e8585..8419ee80ce1e 100644
--- a/code/game/machinery/dance_machine.dm
+++ b/code/game/machinery/dance_machine.dm
@@ -5,6 +5,8 @@
icon_state = "jukebox-"
verb_say = "states"
density = TRUE
+ use_power = IDLE_POWER_USE
+ idle_power_usage = IDLE_DRAW_MINIMAL
var/active = FALSE
var/list/rangers = list()
var/stop = 0
diff --git a/code/game/machinery/defibrillator_mount.dm b/code/game/machinery/defibrillator_mount.dm
index f3fa616032d3..645e8eee762f 100644
--- a/code/game/machinery/defibrillator_mount.dm
+++ b/code/game/machinery/defibrillator_mount.dm
@@ -165,7 +165,7 @@
name = "PENLITE defibrillator mount"
desc = "Holds defibrillators. You can grab the paddles if one is mounted. This PENLITE variant also allows for slow, passive recharging of the defibrillator."
icon_state = "penlite_mount"
- idle_power_usage = 1
+ idle_power_usage = 0
wallframe_type = /obj/item/wallframe/defib_mount/charging
diff --git a/code/game/machinery/dish_drive.dm b/code/game/machinery/dish_drive.dm
index baf3d6ae2cc1..740ea5c935fa 100644
--- a/code/game/machinery/dish_drive.dm
+++ b/code/game/machinery/dish_drive.dm
@@ -5,8 +5,8 @@
Or you can just drop your plates on the floor, like civilized folk."
icon = 'icons/obj/kitchen.dmi'
icon_state = "synthesizer"
- idle_power_usage = 8 //5 with default parts
- active_power_usage = 13 //10 with default parts
+ idle_power_usage = IDLE_DRAW_MINIMAL //lower
+ active_power_usage = ACTIVE_DRAW_MINIMAL //lower ingame because stockparts
density = FALSE
circuit = /obj/item/circuitboard/machine/dish_drive
pass_flags = PASSTABLE
diff --git a/code/game/machinery/dna_scanner.dm b/code/game/machinery/dna_scanner.dm
index 7f61dde6ef79..a45aaa474438 100644
--- a/code/game/machinery/dna_scanner.dm
+++ b/code/game/machinery/dna_scanner.dm
@@ -6,8 +6,8 @@
base_icon_state = "scanner"
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 50
- active_power_usage = 300
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MEDIUM
occupant_typecache = list(/mob/living, /obj/item/bodypart/head, /obj/item/organ/brain)
circuit = /obj/item/circuitboard/machine/dnascanner
var/locked = FALSE
diff --git a/code/game/machinery/doors/airlock_types.dm b/code/game/machinery/doors/airlock_types.dm
index 8e0ed982b501..492ce30f6ac4 100644
--- a/code/game/machinery/doors/airlock_types.dm
+++ b/code/game/machinery/doors/airlock_types.dm
@@ -264,17 +264,7 @@
opacity = FALSE
glass = TRUE
-/obj/machinery/door/airlock/bananium
- name = "bananium airlock"
- desc = "Honkhonkhonk"
- icon = 'icons/obj/doors/airlocks/station/bananium.dmi'
- assemblytype = /obj/structure/door_assembly/door_assembly_bananium
- doorOpen = 'sound/items/bikehorn.ogg'
- has_hatch = FALSE
-/obj/machinery/door/airlock/bananium/glass
- opacity = FALSE
- glass = TRUE
/obj/machinery/door/airlock/sandstone
name = "sandstone airlock"
diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm
index 4e846c26f14a..ce705c71e434 100644
--- a/code/game/machinery/doors/poddoor.dm
+++ b/code/game/machinery/doors/poddoor.dm
@@ -23,26 +23,32 @@
/obj/machinery/door/poddoor/attackby(obj/item/W, mob/user, params)
. = ..()
if((resistance_flags & INDESTRUCTIBLE) && W.tool_behaviour == TOOL_SCREWDRIVER) // This makes it so ERT members cannot cheese by opening their blast doors.
- to_chat(user, "You can't find the panel!")
+ to_chat(user, span_warning("You can't find the panel!"))
return
if(W.tool_behaviour == TOOL_SCREWDRIVER)
if(density)
- to_chat(user, "You need to open [src] to access the maintenance panel!")
+ to_chat(user, span_warning("You need to open [src] to access the maintenance panel"))
return
else if(default_deconstruction_screwdriver(user, icon_state, icon_state, W))
- to_chat(user, "You [panel_open ? "open" : "close"] the maintenance hatch of [src].")
+ to_chat(user, span_notice("You [panel_open ? "open" : "close"] the maintenance hatch of [src]."))
return TRUE
if(panel_open && !density)
if(W.tool_behaviour == TOOL_MULTITOOL)
- var/change_id = input("Set [src]'s ID. It must be a number between 1 and 100.", "ID", id) as num|null
- if(change_id)
- id = clamp(round(change_id, 1), 1, 100)
- to_chat(user, "You change the ID to [id].")
+ var/obj/item/multitool/multi = W
+ if (istype(multi.buffer,/obj/item/assembly/control))
+ var/obj/item/assembly/control/controller = multi.buffer
+ id = controller.id
+ to_chat(user, span_notice("You copy the ID in your multitool's buffer into the [src]."))
+ else
+ var/change_id = input("Set [src]'s ID. It must be a number between 1 and 100.", "ID", id) as num|null
+ if(change_id)
+ id = clamp(round(change_id, 1), 1, 100)
+ to_chat(user, span_notice("You change the ID to [id]."))
if(W.tool_behaviour == TOOL_CROWBAR)
- to_chat(user, "You start to remove the airlock electronics.")
+ to_chat(user, span_notice("You start to remove the airlock electronics."))
if(!(machine_stat & NOPOWER))
do_sparks(5, TRUE, src)
electrocute_mob(user, get_area(src), src, 1, TRUE) //fuck this fella
@@ -52,9 +58,9 @@
/obj/machinery/door/poddoor/examine(mob/user)
. = ..()
- . += "The maintenance panel is [panel_open ? "opened" : "closed"]."
+ . += span_notice("The maintenance panel is [panel_open ? "opened" : "closed"].")
if(panel_open)
- . += "The airlock electronics are exposed and could be pried out."
+ . += span_notice("The airlock electronics are exposed and could be pried out.")
/obj/machinery/door/poddoor/deconstruct(disassembled = TRUE, mob/user)
if(!(flags_1 & NODECONSTRUCT_1))
@@ -142,9 +148,9 @@
/obj/machinery/door/poddoor/attack_alien(mob/living/carbon/alien/humanoid/user)
if(density & !(resistance_flags & INDESTRUCTIBLE))
add_fingerprint(user)
- user.visible_message("[user] begins prying open [src].",\
- "You begin digging your claws into [src] with all your might!",\
- "You hear groaning metal...")
+ user.visible_message(span_warning("[user] begins prying open [src]."),\
+ span_noticealien("You begin digging your claws into [src] with all your might"),\
+ span_warning("You hear groaning metal..."))
playsound(src, 'sound/machines/creaking.ogg', 100, TRUE)
var/time_to_open = 5 SECONDS
@@ -153,7 +159,7 @@
if(do_after(user, time_to_open, TRUE, src))
if(density && !open(TRUE)) //The airlock is still closed, but something prevented it opening. (Another player noticed and bolted/welded the airlock in time!)
- to_chat(user, "Despite your efforts, [src] managed to resist your attempts to open it!")
+ to_chat(user, span_warning("Despite your efforts, [src] managed to resist your attempts to open it!"))
else
return ..()
diff --git a/code/game/machinery/doppler_array.dm b/code/game/machinery/doppler_array.dm
index aa3e4ece65e9..25da902ea3f5 100644
--- a/code/game/machinery/doppler_array.dm
+++ b/code/game/machinery/doppler_array.dm
@@ -6,6 +6,8 @@
icon = 'icons/obj/machines/research.dmi'
base_icon_state = "tdoppler"
density = TRUE
+ use_power = IDLE_POWER_USE
+ idle_power_usage = IDLE_DRAW_LOW
verb_say = "states coldly"
var/cooldown = 10
var/next_announce = 0
diff --git a/code/game/machinery/droneDispenser.dm b/code/game/machinery/droneDispenser.dm
index dbf055d98079..4603044ab285 100644
--- a/code/game/machinery/droneDispenser.dm
+++ b/code/game/machinery/droneDispenser.dm
@@ -9,6 +9,8 @@
icon = 'icons/obj/machines/droneDispenser.dmi'
icon_state = "on"
density = TRUE
+ use_power = IDLE_POWER_USE
+ idle_power_usage = IDLE_DRAW_LOW
max_integrity = 250
integrity_failure = 0.33
diff --git a/code/game/machinery/embedded_controller/access_controller.dm b/code/game/machinery/embedded_controller/access_controller.dm
index 9d190b2e1369..34d4bb320c46 100644
--- a/code/game/machinery/embedded_controller/access_controller.dm
+++ b/code/game/machinery/embedded_controller/access_controller.dm
@@ -7,8 +7,8 @@
/obj/machinery/doorButtons
power_channel = AREA_USAGE_ENVIRON
use_power = IDLE_POWER_USE
- idle_power_usage = 2
- active_power_usage = 4
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MINIMAL
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
var/idSelf
diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm
index faceb46419d5..6cbd6eaed278 100644
--- a/code/game/machinery/firealarm.dm
+++ b/code/game/machinery/firealarm.dm
@@ -23,8 +23,8 @@
integrity_failure = 0.4
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 30)
use_power = IDLE_POWER_USE
- idle_power_usage = 2
- active_power_usage = 6
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MINIMAL
power_channel = AREA_USAGE_ENVIRON
resistance_flags = FIRE_PROOF
diff --git a/code/game/machinery/gulag_item_reclaimer.dm b/code/game/machinery/gulag_item_reclaimer.dm
index 8833a20d90c4..81c422ea31fa 100644
--- a/code/game/machinery/gulag_item_reclaimer.dm
+++ b/code/game/machinery/gulag_item_reclaimer.dm
@@ -6,8 +6,8 @@
req_access = list(ACCESS_SECURITY) //REQACCESS TO ACCESS ALL STORED ITEMS
density = FALSE
use_power = IDLE_POWER_USE
- idle_power_usage = 100
- active_power_usage = 2500
+ idle_power_usage = IDLE_DRAW_LOW
+ active_power_usage = IDLE_DRAW_MEDIUM
var/list/stored_items = list()
var/obj/machinery/gulag_teleporter/linked_teleporter = null
diff --git a/code/game/machinery/gulag_teleporter.dm b/code/game/machinery/gulag_teleporter.dm
index e147e24717ca..3632c204f36b 100644
--- a/code/game/machinery/gulag_teleporter.dm
+++ b/code/game/machinery/gulag_teleporter.dm
@@ -15,8 +15,8 @@ The console is located at computer/gulag_teleporter.dm
state_open = FALSE
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 200
- active_power_usage = 5000
+ idle_power_usage = IDLE_DRAW_LOW
+ active_power_usage = ACTIVE_DRAW_EXTREME
circuit = /obj/item/circuitboard/machine/gulag_teleporter
var/locked = FALSE
var/message_cooldown
diff --git a/code/game/machinery/harvester.dm b/code/game/machinery/harvester.dm
index 9cf4470cab5c..1b0093458e49 100644
--- a/code/game/machinery/harvester.dm
+++ b/code/game/machinery/harvester.dm
@@ -2,12 +2,14 @@
name = "organ harvester"
desc = "An advanced machine used for harvesting organs and limbs from the deceased."
density = TRUE
+ use_power = IDLE_POWER_USE
+ idle_power_usage = IDLE_DRAW_LOW
icon = 'icons/obj/machines/harvester.dmi'
icon_state = "harvester"
base_icon_state = "harvester"
verb_say = "states"
state_open = FALSE
- idle_power_usage = 50
+ idle_power_usage = IDLE_DRAW_MINIMAL
circuit = /obj/item/circuitboard/machine/harvester
light_color = LIGHT_COLOR_BLUE
var/interval = 20
diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm
index 4a31d650f9a1..60ded054842a 100644
--- a/code/game/machinery/hologram.dm
+++ b/code/game/machinery/hologram.dm
@@ -36,8 +36,8 @@ Possible to do for anyone motivated enough:
plane = FLOOR_PLANE
req_access = list(ACCESS_KEYCARD_AUTH) //Used to allow for forced connecting to other (not secure) holopads. Anyone can make a call, though.
use_power = IDLE_POWER_USE
- idle_power_usage = 5
- active_power_usage = 100
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MEDIUM
max_integrity = 300
armor = list("melee" = 50, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 0)
circuit = /obj/item/circuitboard/machine/holopad
@@ -78,6 +78,8 @@ Possible to do for anyone motivated enough:
var/secure = FALSE
/// If we are currently calling another holopad
var/calling = FALSE
+ /// The last holopad that called this one.
+ var/caller_history
/obj/machinery/holopad/Initialize()
. = ..()
@@ -178,7 +180,9 @@ Possible to do for anyone motivated enough:
/obj/machinery/holopad/examine(mob/user)
. = ..()
if(in_range(user, src) || isobserver(user))
- . += "The status display reads: Current projection range: [holo_range] units."
+ . += span_notice("The status display reads: Current projection range: [holo_range] units.")
+ if(caller_history)
+ . += span_notice("The caller history displays the last recieved call to be from: [caller_history].")
/obj/machinery/holopad/attackby(obj/item/P, mob/user, params)
if(default_deconstruction_screwdriver(user, "holopad_open", "holopad0", P))
@@ -195,11 +199,11 @@ Possible to do for anyone motivated enough:
if(istype(P,/obj/item/disk/holodisk))
if(disk)
- to_chat(user,"There's already a disk inside [src]!")
+ to_chat(user,span_warning("There's already a disk inside [src]!"))
return
if (!user.transferItemToLoc(P,src))
return
- to_chat(user,"You insert [P] into [src].")
+ to_chat(user,span_notice("You insert [P] into [src]."))
disk = P
return
@@ -249,15 +253,15 @@ Possible to do for anyone motivated enough:
if("AIrequest")
if(last_request + 200 < world.time)
last_request = world.time
- to_chat(usr, "You requested an AI's presence.")
+ to_chat(usr, span_info("You requested an AI's presence."))
var/area/area = get_area(src)
for(var/mob/living/silicon/ai/AI in GLOB.silicon_mobs)
if(!AI.client)
continue
- to_chat(AI, "Your presence is requested at \the [area].")
+ to_chat(AI, span_info("Your presence is requested at \the [area]."))
return TRUE
else
- to_chat(usr, "A request for AI presence was already sent recently.")
+ to_chat(usr, span_info("A request for AI presence was already sent recently."))
return
if("holocall")
if(outgoing_call)
@@ -280,7 +284,7 @@ Possible to do for anyone motivated enough:
calling = TRUE
return TRUE
else
- to_chat(usr, "You must stand on the holopad to make a call!")
+ to_chat(usr, span_warning("You must stand on the holopad to make a call!"))
if("connectcall")
var/datum/holocall/call_to_connect = locate(params["holopad"]) in holo_calls
if(!QDELETED(call_to_connect))
@@ -374,6 +378,7 @@ Possible to do for anyone motivated enough:
for(var/I in holo_calls)
var/datum/holocall/HC = I
if(HC.connected_holopad != src)
+ caller_history = get_area_name(HC.calling_holopad)
if(force_answer_call && world.time > (HC.call_start_time + (HOLOPAD_MAX_DIAL_TIME / 2)))
HC.Answer(src)
break
@@ -392,7 +397,7 @@ Possible to do for anyone motivated enough:
if(is_operational && (!AI || AI.eyeobj.loc == loc))//If the projector has power and client eye is on it
if (AI && istype(AI.current, /obj/machinery/holopad))
- to_chat(user, "ERROR: \black Image feed in progress.")
+ to_chat(user, span_danger("ERROR: \black Image feed in progress."))
return
var/obj/effect/overlay/holo_pad_hologram/Hologram = new(loc)//Spawn a blank effect at the location.
@@ -415,11 +420,11 @@ Possible to do for anyone motivated enough:
move_hologram(user, loc)
set_holo(user, Hologram)
- visible_message("A holographic image of [user] flickers to life before your eyes!")
+ visible_message(span_notice("A holographic image of [user] flickers to life before your eyes!"))
return Hologram
else
- to_chat(user, "ERROR: Unable to project hologram.")
+ to_chat(user, span_danger("ERROR:Unable to project hologram."))
/*This is the proc for special two-way communication between AI and holopad/people talking near holopad.
For the other part of the code, check silicon say.dm. Particularly robot talk.*/
@@ -446,8 +451,11 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/
/obj/machinery/holopad/proc/SetLightsAndPower()
var/total_users = LAZYLEN(masters) + LAZYLEN(holo_calls)
- use_power = total_users > 0 ? ACTIVE_POWER_USE : IDLE_POWER_USE
- active_power_usage = HOLOPAD_PASSIVE_POWER_USAGE + (HOLOGRAM_POWER_USAGE * total_users)
+ if(total_users > 0)
+ set_active_power()
+ else
+ set_idle_power()
+ active_power_usage = initial(active_power_usage) * total_users
if(total_users || replay_mode)
set_light(2)
else
@@ -580,7 +588,7 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/
Hologram.set_anchored(TRUE)//So space wind cannot drag it.
Hologram.name = "[record.caller_name] (Hologram)"//If someone decides to right click.
Hologram.set_light(2) //hologram lighting
- visible_message("A holographic image of [record.caller_name] flickers to life before your eyes!")
+ visible_message(span_notice("A holographic image of [record.caller_name] flickers to life before your eyes!"))
return Hologram
/obj/machinery/holopad/proc/replay_start()
diff --git a/code/game/machinery/hypnochair.dm b/code/game/machinery/hypnochair.dm
index b31dd9925375..e14756815bb2 100644
--- a/code/game/machinery/hypnochair.dm
+++ b/code/game/machinery/hypnochair.dm
@@ -6,6 +6,8 @@
base_icon_state = "hypnochair"
circuit = /obj/item/circuitboard/machine/hypnochair
density = TRUE
+ use_power = IDLE_POWER_USE
+ idle_power_usage = IDLE_DRAW_LOW
opacity = FALSE
var/mob/living/carbon/victim = null ///Keeps track of the victim to apply effects if it teleports away
diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm
index 8117ad2c251a..c82d67a9df62 100644
--- a/code/game/machinery/igniter.dm
+++ b/code/game/machinery/igniter.dm
@@ -6,8 +6,8 @@
base_icon_state = "igniter"
plane = FLOOR_PLANE
use_power = IDLE_POWER_USE
- idle_power_usage = 2
- active_power_usage = 4
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_LOW
max_integrity = 300
armor = list("melee" = 50, "bullet" = 30, "laser" = 70, "energy" = 50, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 70)
resistance_flags = FIRE_PROOF
diff --git a/code/game/machinery/launch_pad.dm b/code/game/machinery/launch_pad.dm
index c7752a8cbfaa..c3e6bead671a 100644
--- a/code/game/machinery/launch_pad.dm
+++ b/code/game/machinery/launch_pad.dm
@@ -3,9 +3,9 @@
desc = "A bluespace pad able to thrust matter through bluespace, teleporting it to or from nearby locations."
icon = 'icons/obj/telescience.dmi'
icon_state = "lpad-idle"
- use_power = TRUE
- idle_power_usage = 200
- active_power_usage = 2500
+ use_power = IDLE_POWER_USE
+ idle_power_usage = IDLE_DRAW_LOW
+ active_power_usage = ACTIVE_DRAW_EXTREME
hud_possible = list(DIAG_LAUNCHPAD_HUD)
circuit = /obj/item/circuitboard/machine/launchpad
var/icon_teleport = "lpad-beam"
@@ -149,7 +149,7 @@
teleporting = FALSE
// use a lot of power
- use_power(1000)
+ use_power(active_power_usage)
var/turf/source = target
var/list/log_msg = list()
diff --git a/code/game/machinery/limbgrower.dm b/code/game/machinery/limbgrower.dm
index 40f405ad4a16..c0f296c1ffcf 100644
--- a/code/game/machinery/limbgrower.dm
+++ b/code/game/machinery/limbgrower.dm
@@ -7,8 +7,8 @@
icon_state = "limbgrower_idleoff"
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 10
- active_power_usage = 100
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_LOW
circuit = /obj/item/circuitboard/machine/limbgrower
/// The category of limbs we're browing in our UI.
diff --git a/code/game/machinery/mass_driver.dm b/code/game/machinery/mass_driver.dm
index 4f91bea3ab7a..7316e5b42422 100644
--- a/code/game/machinery/mass_driver.dm
+++ b/code/game/machinery/mass_driver.dm
@@ -4,8 +4,8 @@
icon = 'icons/obj/stationobjs.dmi'
icon_state = "mass_driver"
use_power = IDLE_POWER_USE
- idle_power_usage = 2
- active_power_usage = 50
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MEDIUM
var/power = 1
var/code = 1
var/id = 1
diff --git a/code/game/machinery/medical_kiosk.dm b/code/game/machinery/medical_kiosk.dm
index d7be7fea98ee..2f60c799ae23 100644
--- a/code/game/machinery/medical_kiosk.dm
+++ b/code/game/machinery/medical_kiosk.dm
@@ -18,6 +18,8 @@
base_icon_state = "kiosk"
layer = ABOVE_MOB_LAYER
density = TRUE
+ use_power = IDLE_POWER_USE
+ idle_power_usage = IDLE_DRAW_LOW
circuit = /obj/item/circuitboard/machine/medical_kiosk
var/obj/item/scanner_wand
/// Emag mode
@@ -170,7 +172,7 @@
sickness_data = "\nName: [D.name].\nType: [D.spread_text].\nStage: [D.stage]/[D.max_stages].\nPossible Cure: [D.cure_text]"
if(altPatient.has_dna()) //Blood levels Information
- if(altPatient.bleed_rate)
+ if(LAZYLEN(altPatient.get_bleeding_parts()))
bleed_status = "Patient is currently bleeding!"
if(blood_percent <= 80)
blood_warning = " Patient has low blood levels. Seek a large meal, or iron supplements."
diff --git a/code/game/machinery/medipen_refiller.dm b/code/game/machinery/medipen_refiller.dm
index e104257b5493..ceb0ed389c17 100644
--- a/code/game/machinery/medipen_refiller.dm
+++ b/code/game/machinery/medipen_refiller.dm
@@ -5,7 +5,7 @@
icon_state = "medipen_refiller"
density = TRUE
circuit = /obj/item/circuitboard/machine/medipen_refiller
- idle_power_usage = 100
+ idle_power_usage = IDLE_DRAW_LOW
/// list of medipen subtypes it can refill
var/list/allowed = list(
/obj/item/reagent_containers/hypospray/medipen = /datum/reagent/medicine/epinephrine,
diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm
index a847b44d39a1..b54c192f4407 100644
--- a/code/game/machinery/navbeacon.dm
+++ b/code/game/machinery/navbeacon.dm
@@ -49,7 +49,7 @@
if(previous_virtual_z)
LAZYREMOVEASSOC(GLOB.navbeacons, "[previous_virtual_z]", src)
if(new_virtual_z)
- LAZYADDASSOC(GLOB.navbeacons, "[new_virtual_z]", src)
+ LAZYADDASSOCLIST(GLOB.navbeacons, "[new_virtual_z]", src)
..()
// set the transponder codes assoc list from codes_txt
diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm
index 75498600b007..5891898ef6dc 100644
--- a/code/game/machinery/porta_turret/portable_turret.dm
+++ b/code/game/machinery/porta_turret/portable_turret.dm
@@ -33,8 +33,8 @@ DEFINE_BITFIELD(turret_flags, list(
density = TRUE
desc = "A covered turret that shoots at its enemies."
use_power = IDLE_POWER_USE //this turret uses and requires power
- idle_power_usage = 50 //when inactive, this turret takes up constant 50 Equipment power
- active_power_usage = 300 //when active, this turret takes up constant 300 Equipment power
+ idle_power_usage = IDLE_DRAW_MINIMAL //when inactive, this turret takes up constant 50 Equipment power
+ active_power_usage = ACTIVE_DRAW_LOW //when active, this turret takes up constant 300 Equipment power
req_access = list(ACCESS_SECURITY) /// Only people with Security access
power_channel = AREA_USAGE_EQUIP //drains power from the EQUIPMENT channel
max_integrity = 160 //the turret's health
@@ -795,7 +795,7 @@ DEFINE_BITFIELD(turret_flags, list(
max_integrity = 300
always_up = 1
use_power = ACTIVE_POWER_USE
- active_power_usage = 300
+ active_power_usage = ACTIVE_DRAW_MINIMAL
has_cover = 0
scan_range = 9
stun_projectile = /obj/projectile/beam/disabler
diff --git a/code/game/machinery/prisonlabor.dm b/code/game/machinery/prisonlabor.dm
index 6fe329ed4a71..76612018d87a 100644
--- a/code/game/machinery/prisonlabor.dm
+++ b/code/game/machinery/prisonlabor.dm
@@ -4,8 +4,8 @@
icon = 'icons/obj/machines/prison.dmi'
icon_state = "offline"
use_power = IDLE_POWER_USE
- idle_power_usage = 2
- active_power_usage = 50
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_LOW
var/obj/item/stack/license_plates/empty/current_plate
var/pressing = FALSE
diff --git a/code/game/machinery/quantum_pad.dm b/code/game/machinery/quantum_pad.dm
index cc9f8f6d3d59..7d0455ab82f0 100644
--- a/code/game/machinery/quantum_pad.dm
+++ b/code/game/machinery/quantum_pad.dm
@@ -4,8 +4,8 @@
icon = 'icons/obj/telescience.dmi'
icon_state = "qpad-idle"
use_power = IDLE_POWER_USE
- idle_power_usage = 200
- active_power_usage = 5000
+ idle_power_usage = IDLE_DRAW_LOW
+ active_power_usage = ACTIVE_DRAW_EXTREME
obj_flags = CAN_BE_HIT | UNIQUE_RENAME
circuit = /obj/item/circuitboard/machine/quantumpad
var/teleport_cooldown = 400 //30 seconds base due to base parts
diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm
index c604b3eeccf6..2720443d2424 100644
--- a/code/game/machinery/recharger.dm
+++ b/code/game/machinery/recharger.dm
@@ -5,8 +5,8 @@
base_icon_state = "recharger"
desc = "A charging dock for energy based weaponry."
use_power = IDLE_POWER_USE
- idle_power_usage = 4
- active_power_usage = 250
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_LOW
circuit = /obj/item/circuitboard/machine/recharger
pass_flags = PASSTABLE
var/obj/item/charging = null
@@ -50,11 +50,11 @@
if (new_charging)
START_PROCESSING(SSmachines, src)
finished_recharging = FALSE
- use_power = ACTIVE_POWER_USE
+ set_active_power()
using_power = TRUE
update_appearance()
else
- use_power = IDLE_POWER_USE
+ set_idle_power()
using_power = FALSE
update_appearance()
diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm
index 14e253298070..cedf6c0a56ff 100644
--- a/code/game/machinery/rechargestation.dm
+++ b/code/game/machinery/rechargestation.dm
@@ -5,8 +5,8 @@
icon_state = "borgcharger0"
density = FALSE
use_power = IDLE_POWER_USE
- idle_power_usage = 5
- active_power_usage = 1000
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MEDIUM
req_access = list(ACCESS_ROBOTICS)
state_open = TRUE
circuit = /obj/item/circuitboard/machine/cyborgrecharger
@@ -90,12 +90,12 @@
/obj/machinery/recharge_station/open_machine()
. = ..()
- use_power = IDLE_POWER_USE
+ set_idle_power()
/obj/machinery/recharge_station/close_machine()
. = ..()
if(occupant)
- use_power = ACTIVE_POWER_USE //It always tries to charge, even if it can't.
+ set_active_power() //It always tries to charge, even if it can't.
add_fingerprint(occupant)
/obj/machinery/recharge_station/update_icon_state()
diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm
index b548ecf73125..82265e244448 100644
--- a/code/game/machinery/recycler.dm
+++ b/code/game/machinery/recycler.dm
@@ -7,6 +7,8 @@
icon_state = "grinder-o0"
layer = ABOVE_ALL_MOB_LAYER // Overhead
density = TRUE
+ use_power = IDLE_POWER_USE
+ idle_power_usage = IDLE_DRAW_LOW
circuit = /obj/item/circuitboard/machine/recycler
var/safety_mode = FALSE // Temporarily stops machine if it detects a mob
var/icon_name = "grinder-o"
@@ -19,7 +21,7 @@
/obj/machinery/recycler/Initialize()
AddComponent(/datum/component/butchering/recycler, 1, amount_produced,amount_produced/5)
- AddComponent(/datum/component/material_container, list(/datum/material/iron, /datum/material/glass, /datum/material/silver, /datum/material/plasma, /datum/material/gold, /datum/material/diamond, /datum/material/plastic, /datum/material/uranium, /datum/material/bananium, /datum/material/titanium, /datum/material/bluespace), INFINITY, FALSE, null, null, null, TRUE)
+ AddComponent(/datum/component/material_container, list(/datum/material/iron, /datum/material/glass, /datum/material/silver, /datum/material/plasma, /datum/material/gold, /datum/material/diamond, /datum/material/plastic, /datum/material/uranium, /datum/material/hellstone, /datum/material/titanium, /datum/material/bluespace), INFINITY, FALSE, null, null, null, TRUE)
. = ..()
update_appearance()
req_one_access = get_all_accesses() + get_all_centcom_access()
diff --git a/code/game/machinery/roulette_machine.dm b/code/game/machinery/roulette_machine.dm
index c9e1d108c1e5..351f1c42ae5e 100644
--- a/code/game/machinery/roulette_machine.dm
+++ b/code/game/machinery/roulette_machine.dm
@@ -26,8 +26,8 @@
density = TRUE
use_power = IDLE_POWER_USE
anchored = FALSE
- idle_power_usage = 10
- active_power_usage = 100
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MINIMAL
max_integrity = 500
armor = list("melee" = 45, "bullet" = 30, "laser" = 30, "energy" = 30, "bomb" = 10, "bio" = 30, "rad" = 30, "fire" = 30, "acid" = 30)
var/static/list/numbers = list("0" = "green", "1" = "red", "3" = "red", "5" = "red", "7" = "red", "9" = "red", "12" = "red", "14" = "red", "16" = "red",\
diff --git a/code/game/machinery/scan_gate.dm b/code/game/machinery/scan_gate.dm
index 672928a0b7f1..acdecc10fbb7 100644
--- a/code/game/machinery/scan_gate.dm
+++ b/code/game/machinery/scan_gate.dm
@@ -27,7 +27,7 @@
icon = 'icons/obj/machines/scangate.dmi'
icon_state = "scangate"
use_power = IDLE_POWER_USE
- idle_power_usage = 50
+ idle_power_usage = IDLE_DRAW_LOW
circuit = /obj/item/circuitboard/machine/scanner_gate
var/scanline_timer
diff --git a/code/game/machinery/sheetifier.dm b/code/game/machinery/sheetifier.dm
index 569bfa4b6f9e..ec9f0f5ff5a3 100644
--- a/code/game/machinery/sheetifier.dm
+++ b/code/game/machinery/sheetifier.dm
@@ -5,8 +5,8 @@
icon_state = "base_machine"
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 10
- active_power_usage = 100
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_LOW
circuit = /obj/item/circuitboard/machine/sheetifier
layer = BELOW_OBJ_LAYER
var/busy_processing = FALSE
diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm
index bc578a856300..df865aee82e5 100644
--- a/code/game/machinery/shieldgen.dm
+++ b/code/game/machinery/shieldgen.dm
@@ -122,25 +122,23 @@
if(.)
return
if(locked && !issilicon(user))
- to_chat(user, "The machine is locked, you are unable to use it!")
+ to_chat(user, span_notice("The machine is locked, you are unable to use it!"))
return
if(panel_open)
- to_chat(user, "The panel must be closed before operating this machine!")
+ to_chat(user, span_warning("The panel must be closed before operating this machine!"))
return
if (active)
- user.visible_message("[user] deactivated \the [src].", \
- "You deactivate \the [src].", \
- "You hear heavy droning fade out.")
+ user.visible_message(span_notice("[user] deactivated \the [src]."), span_notice("You deactivate \the [src]."), span_hear("You hear heavy droning fade out"))
shields_down()
else
if(anchored)
- user.visible_message("[user] activated \the [src].", \
- "You activate \the [src].", \
- "You hear heavy droning.")
+ user.visible_message(span_notice("[user] activated \the [src]."), \
+ span_notice("You activate \the [src]."), \
+ span_hear("You hear heavy droning."))
shields_up()
else
- to_chat(user, "The device must first be secured to the floor!")
+ to_chat(user, span_warning("The device must first be secured to the floor!"))
return
/obj/machinery/shieldgen/attackby(obj/item/W, mob/user, params)
@@ -148,60 +146,60 @@
W.play_tool_sound(src, 100)
panel_open = !panel_open
if(panel_open)
- to_chat(user, "You open the panel and expose the wiring.")
+ to_chat(user, span_notice("You open the panel and expose the wiring."))
else
- to_chat(user, "You close the panel.")
+ to_chat(user, span_notice("You close the panel."))
else if(istype(W, /obj/item/stack/cable_coil) && (machine_stat & BROKEN) && panel_open)
var/obj/item/stack/cable_coil/coil = W
if (coil.get_amount() < 1)
- to_chat(user, "You need one length of cable to repair [src]!")
+ to_chat(user, span_warning("You need one length of cable to repair [src]!"))
return
- to_chat(user, "You begin to replace the wires...")
+ to_chat(user, span_notice("You begin to replace the wires..."))
if(do_after(user, 30, target = src))
if(coil.get_amount() < 1)
return
coil.use(1)
obj_integrity = max_integrity
set_machine_stat(machine_stat & ~BROKEN)
- to_chat(user, "You repair \the [src].")
+ to_chat(user, span_notice("You repair \the [src]."))
update_appearance()
else if(W.tool_behaviour == TOOL_WRENCH)
if(locked)
- to_chat(user, "The bolts are covered! Unlocking this would retract the covers.")
+ to_chat(user, span_warning("The bolts are covered! Unlocking this would retract the covers."))
return
if(!anchored && !isinspace())
W.play_tool_sound(src, 100)
- to_chat(user, "You secure \the [src] to the floor!")
+ to_chat(user, span_notice("You secure \the [src] to the floor!"))
set_anchored(TRUE)
else if(anchored)
W.play_tool_sound(src, 100)
- to_chat(user, "You unsecure \the [src] from the floor!")
+ to_chat(user, span_notice("You unsecure \the [src] from the floor!"))
if(active)
- to_chat(user, "\The [src] shuts off!")
+ to_chat(user, span_notice("\The [src] shuts off!"))
shields_down()
set_anchored(FALSE)
else if(W.GetID())
if(allowed(user) && !(obj_flags & EMAGGED))
locked = !locked
- to_chat(user, "You [locked ? "lock" : "unlock"] the controls.")
+ to_chat(user, span_notice("You [locked ? "lock" : "unlock"] the controls."))
else if(obj_flags & EMAGGED)
- to_chat(user, "Error, access controller damaged!")
+ to_chat(user, span_danger("Error, access controller damaged!"))
else
- to_chat(user, "Access denied.")
+ to_chat(user, span_danger("Access denied."))
else
return ..()
/obj/machinery/shieldgen/emag_act(mob/user)
if(obj_flags & EMAGGED)
- to_chat(user, "The access controller is damaged!")
+ to_chat(user, span_warning("The access controller is damaged!"))
return
obj_flags |= EMAGGED
locked = FALSE
playsound(src, "sparks", 100, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
- to_chat(user, "You short out the access controller.")
+ to_chat(user, span_warning("You short out the access controller."))
/obj/machinery/shieldgen/update_icon_state()
icon_state = "shield[active ? "on" : "off"][(machine_stat & BROKEN) ? "br" : null]"
@@ -219,8 +217,8 @@
req_access = list(ACCESS_TELEPORTER)
flags_1 = CONDUCT_1
use_power = NO_POWER_USE
- idle_power_usage = 10
- active_power_usage = 50
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_HIGH
circuit = /obj/item/circuitboard/machine/shieldwallgen
max_integrity = 300
var/active = FALSE
@@ -275,9 +273,7 @@
if(!active_power_usage || surplus() >= active_power_usage)
add_load(active_power_usage)
else
- visible_message("The [src.name] shuts down due to lack of power!", \
- "If this message is ever seen, something is wrong.",
- "You hear heavy droning fade out.")
+ visible_message(span_danger("The [src.name] shuts down due to lack of power!"), "If this message is ever seen, something is wrong.",span_hear("You hear heavy droning fade out."))
active = FALSE
log_game("[src] deactivated due to lack of power at [AREACOORD(src)]")
for(var/direction in GLOB.cardinals)
@@ -348,7 +344,7 @@
/obj/machinery/power/shieldwallgen/can_be_unfasten_wrench(mob/user, silent)
if(active)
if(!silent)
- to_chat(user, "Turn off the shield generator first!")
+ to_chat(user, span_warning("Turn off the shield generator first!"))
return FAILED_UNFASTEN
return ..()
@@ -388,11 +384,11 @@
if(item.GetID())
if(allowed(user) && !(obj_flags & EMAGGED))
locked = !locked
- to_chat(user, "You [src.locked ? "lock" : "unlock"] the controls.")
+ to_chat(user, span_notice("You [src.locked ? "lock" : "unlock"] the controls."))
else if(obj_flags & EMAGGED)
- to_chat(user, "Error, access controller damaged!")
+ to_chat(user, span_danger("Error, access controller damaged!"))
else
- to_chat(user, "Access denied.")
+ to_chat(user, span_danger("Access denied."))
else
add_fingerprint(user)
@@ -406,25 +402,23 @@
shock(user,50)
return
if(!anchored)
- to_chat(user, "\The [src] needs to be firmly secured to the floor first!")
+ to_chat(user, span_warning("\The [src] needs to be firmly secured to the floor first!"))
return
if(locked && !issilicon(user))
- to_chat(user, "The controls are locked!")
+ to_chat(user, span_warning("The controls are locked!"))
return
if(!powernet)
- to_chat(user, "\The [src] needs to be powered by a wire!")
+ to_chat(user, span_warning("\The [src] needs to be powered by a wire!"))
return
if(active)
- user.visible_message("[user] turned \the [src] off.", \
- "You turn off \the [src].", \
- "You hear heavy droning fade out.")
+ user.visible_message(span_notice("[user] turned \the [src] off."), \
+ span_notice("You turn off \the [src]."), \
+ span_hear("You hear heavy droning fade out."))
active = FALSE
log_game("[src] was deactivated by [key_name(user)] at [AREACOORD(src)]")
else
- user.visible_message("[user] turned \the [src] on.", \
- "You turn on \the [src].", \
- "You hear heavy droning.")
+ user.visible_message(span_notice("[user] turned \the [src] on."), span_notice("ou turn on \the [src]."), span_hear("ou hear heavy droning."))
active = ACTIVE_SETUPFIELDS
log_game("[src] was activated by [key_name(user)] at [AREACOORD(src)]")
add_fingerprint(user)
@@ -435,28 +429,28 @@
if(!powernet)
return
if(active)
- visible_message("The [src.name] hums as it powers down.", \
+ visible_message(span_notice("The [src.name] hums as it powers down."), \
"If this message is ever seen, something is wrong.", \
- "You hear heavy droning fade out.")
+ span_notice("You hear heavy droning fade out."))
playsound(src, 'sound/machines/synth_no.ogg', 50, TRUE, frequency = 6120)
active = FALSE
log_game("[src] was deactivated by wire pulse at [AREACOORD(src)]")
else
- visible_message("The [src.name] beeps as it powers up.", \
+ visible_message(span_notice("The [src.name] beeps as it powers up."), \
"If this message is ever seen, something is wrong.", \
- "You hear heavy droning.")
+ span_notice("You hear heavy droning."))
playsound(src, 'sound/machines/synth_yes.ogg', 50, TRUE, frequency = 6120)
active = ACTIVE_SETUPFIELDS
log_game("[src] was activated by wire pulse at [AREACOORD(src)]")
/obj/machinery/power/shieldwallgen/emag_act(mob/user)
if(obj_flags & EMAGGED)
- to_chat(user, "The access controller is damaged!")
+ to_chat(user, span_warning("The access controller is damaged!"))
return
obj_flags |= EMAGGED
locked = FALSE
playsound(src, "sparks", 100, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
- to_chat(user, "You short out the access controller.")
+ to_chat(user, span_warning("You short out the access controller."))
/obj/machinery/power/shieldwallgen/proc/shock(mob/user, prb)
if(machine_stat & (BROKEN|NOPOWER)) // unpowered, no shock
@@ -511,10 +505,31 @@
/obj/machinery/power/shieldwallgen/atmos/proc/can_be_rotated(mob/user, rotation_type)
if (anchored)
- to_chat(user, "It is fastened to the floor!")
+ to_chat(user, span_warning("It is fastened to the floor!"))
return FALSE
return TRUE
+/obj/machinery/power/shieldwallgen/atmos/attacked_by(obj/item/I, mob/living/user)
+ if(I.tool_behaviour == TOOL_MULTITOOL)
+ var/obj/item/multitool/multi = I
+ if(!panel_open && !locked)
+ if(istype(multi.buffer,/obj/item/assembly/control/shieldwallgen))
+ var/obj/item/assembly/control/shieldwallgen/controller = multi.buffer
+ to_chat(user, span_notice("You copy the ID in your multitool's buffer to the [src]."))
+ id = controller.id
+ return TRUE
+
+ else
+ to_chat(user, span_warning("The controls are locked!"))
+ return
+
+ return ..()
+
+/obj/machinery/power/shieldwallgen/atmos/multitool_act(mob/living/user, obj/item/I)
+ . = ..()
+
+
+
/// Same as in the normal shieldwallgen, but with the shieldwalls replaced with atmos shieldwalls
/obj/machinery/power/shieldwallgen/atmos/setup_field(direction)
if(!direction)
@@ -586,7 +601,7 @@
setDir(get_dir(gen_primary, gen_secondary))
if(hardshield == TRUE)
for(var/mob/living/victim in get_turf(src))
- visible_message("\The [src] is suddenly occupying the same space as \the [victim]!")
+ visible_message(span_danger("\The [src] is suddenly occupying the same space as \the [victim]!"))
victim.gib()
/obj/machinery/shieldwall/Destroy()
diff --git a/code/game/machinery/shuttle/ship_gravity.dm b/code/game/machinery/shuttle/ship_gravity.dm
index bfcf937f341a..4f63c60d7824 100644
--- a/code/game/machinery/shuttle/ship_gravity.dm
+++ b/code/game/machinery/shuttle/ship_gravity.dm
@@ -9,8 +9,8 @@
icon_state = "shipgrav"
base_icon_state = "shipgrav"
density = TRUE
- idle_power_usage = 10
- active_power_usage = 5000
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_EXTREME
circuit = /obj/item/circuitboard/machine/ship_gravity
var/charging = FALSE
var/active = FALSE
diff --git a/code/game/machinery/shuttle/shuttle_heater.dm b/code/game/machinery/shuttle/shuttle_heater.dm
index 261549428768..513f98eae2c6 100644
--- a/code/game/machinery/shuttle/shuttle_heater.dm
+++ b/code/game/machinery/shuttle/shuttle_heater.dm
@@ -19,7 +19,7 @@
icon_state = "heater_pipe"
var/icon_state_closed = "heater_pipe"
var/icon_state_open = "heater_pipe_open"
- idle_power_usage = 50
+ idle_power_usage = IDLE_DRAW_MINIMAL
circuit = /obj/item/circuitboard/machine/shuttle/heater
density = TRUE
@@ -28,7 +28,7 @@
layer = OBJ_LAYER
showpipe = TRUE
- pipe_flags = PIPING_ONE_PER_TURF | PIPING_DEFAULT_LAYER_ONLY
+ pipe_flags = PIPING_ONE_PER_TURF
var/efficiency_multiplier = 1
var/gas_capacity = 0
@@ -37,6 +37,13 @@
///The internals tank to draw from
var/obj/item/tank/fuel_tank
+/obj/machinery/atmospherics/components/unary/shuttle/heater/on_construction(obj_color, set_layer)
+ var/obj/item/circuitboard/machine/shuttle/heater/board = circuit
+ if(board)
+ piping_layer = board.pipe_layer
+ set_layer = piping_layer
+ ..()
+
/obj/machinery/atmospherics/components/unary/shuttle/heater/New()
. = ..()
SetInitDirections()
diff --git a/code/game/machinery/slotmachine.dm b/code/game/machinery/slotmachine.dm
index 0ae88638d5b3..2038612c2791 100644
--- a/code/game/machinery/slotmachine.dm
+++ b/code/game/machinery/slotmachine.dm
@@ -22,7 +22,7 @@
base_icon_state = "slots"
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 50
+ idle_power_usage = IDLE_DRAW_MINIMAL
circuit = /obj/item/circuitboard/computer/slot_machine
light_color = LIGHT_COLOR_BROWN
unique_icon = TRUE
diff --git a/code/game/machinery/stasis.dm b/code/game/machinery/stasis.dm
index 37e079715dcd..2582c57da903 100644
--- a/code/game/machinery/stasis.dm
+++ b/code/game/machinery/stasis.dm
@@ -9,8 +9,8 @@
can_buckle = TRUE
buckle_lying = 90
circuit = /obj/item/circuitboard/machine/stasis
- idle_power_usage = 40
- active_power_usage = 340
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_HIGH
var/stasis_enabled = TRUE
var/last_stasis_sound = FALSE
var/stasis_can_toggle = 0
@@ -112,12 +112,12 @@
playsound(src, 'sound/effects/spray.ogg', 5, TRUE, 2, frequency = freq)
target.apply_status_effect(STATUS_EFFECT_STASIS, STASIS_MACHINE_EFFECT)
target.ExtinguishMob()
- use_power = ACTIVE_POWER_USE
+ set_active_power()
/obj/machinery/stasis/proc/thaw_them(mob/living/target)
target.remove_status_effect(STATUS_EFFECT_STASIS, STASIS_MACHINE_EFFECT)
if(target == occupant)
- use_power = IDLE_POWER_USE
+ set_idle_power()
/obj/machinery/stasis/post_buckle_mob(mob/living/L)
if(!can_be_occupant(L))
diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm
index 1e402ee02e5a..9e1b5b28690b 100644
--- a/code/game/machinery/status_display.dm
+++ b/code/game/machinery/status_display.dm
@@ -22,7 +22,7 @@
icon_state = "frame"
density = FALSE
use_power = IDLE_POWER_USE
- idle_power_usage = 10
+ idle_power_usage = IDLE_DRAW_MINIMAL
maptext_height = 26
maptext_width = 32
diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm
index e86d4ae9f0f9..f63ad15004a1 100644
--- a/code/game/machinery/suit_storage_unit.dm
+++ b/code/game/machinery/suit_storage_unit.dm
@@ -1,3 +1,5 @@
+#define BASE_UV_CYCLES 7
+
// SUIT STORAGE UNIT /////////////////
/obj/machinery/suit_storage_unit
name = "suit storage unit"
@@ -6,7 +8,10 @@
icon_state = "ssu_classic"
base_icon_state = "ssu_classic"
density = TRUE
+ use_power = IDLE_POWER_USE
+ idle_power_usage = IDLE_DRAW_MINIMAL
max_integrity = 250
+ circuit = /obj/item/circuitboard/machine/suit_storage_unit
var/obj/item/clothing/suit/space/suit = null
var/obj/item/clothing/head/helmet/space/helmet = null
@@ -40,7 +45,9 @@
*/
var/uv_super = FALSE
/// How many cycles remain for the decontamination sequence.
- var/uv_cycles = 6
+ var/uv_cycles = 7
+ /// Time reduction from stock parts
+ var/lasers_bonus = 0
/// Cooldown for occupant breakout messages via relaymove()
var/message_cooldown
/// How long it takes to break out of the SSU.
@@ -191,6 +198,19 @@
storage = new storage_type(src)
update_appearance()
+/obj/machinery/suit_storage_unit/examine(mob/user)
+ . = ..()
+ . += span_notice("Number of UV cycles reduced by [lasers_bonus].")
+ if(locked)
+ . += span_notice("The locking bolts on \the [src] are engaged, preventing it from being pried open.")
+
+/obj/machinery/suit_storage_unit/RefreshParts()
+ lasers_bonus = 0
+ for(var/obj/item/stock_parts/micro_laser/lasers in component_parts)
+ lasers_bonus += ((lasers.rating) * 0.25)
+
+ uv_cycles = BASE_UV_CYCLES - lasers_bonus
+
/obj/machinery/suit_storage_unit/Destroy()
QDEL_NULL(suit)
QDEL_NULL(helmet)
@@ -250,7 +270,15 @@
if(!(flags_1 & NODECONSTRUCT_1))
open_machine()
dump_contents()
- new /obj/item/stack/sheet/metal (loc, 2)
+ on_deconstruction()
+ if(circuit)
+ circuit.forceMove(loc)
+ circuit = null
+ if(length(component_parts))
+ spawn_frame(disassembled)
+ for(var/obj/item/I in component_parts)
+ I.forceMove(loc)
+ component_parts.Cut()
qdel(src)
/obj/machinery/suit_storage_unit/interact(mob/living/user)
@@ -318,7 +346,7 @@
else
if (occupant)
var/mob/living/mob_occupant = occupant
- to_chat(mob_occupant, "[src]'s confines grow warm, then hot, then scorching. You're being burned [!mob_occupant.stat ? "alive" : "away"]!")
+ to_chat(mob_occupant, span_userdanger("[src]'s confines grow warm, then hot, then scorching. You're being burned [!mob_occupant.stat ? "alive" : "away"]!"))
cook()
if ("lock", "unlock")
if (!state_open)
@@ -364,27 +392,27 @@
return
var/mob/living/target = A
if(!state_open)
- to_chat(user, "The unit's doors are shut!")
+ to_chat(user, span_warning("The unit's doors are shut!"))
return
if(!is_operational)
- to_chat(user, "The unit is not operational!")
+ to_chat(user, span_warning("The unit is not operational!"))
return
if(occupant || helmet || suit || storage)
- to_chat(user, "It's too cluttered inside to fit in!")
+ to_chat(user, span_warning("It's too cluttered inside to fit in!"))
return
if(target == user)
- user.visible_message("[user] starts squeezing into [src]!", "You start working your way into [src]...")
+ user.visible_message(span_warning("[user] starts squeezing into [src]!"), span_notice("You start working your way into [src]..."))
else
- target.visible_message("[user] starts shoving [target] into [src]!", "[user] starts shoving you into [src]!")
+ target.visible_message(span_warning("[user] starts shoving [target] into [src]!"), span_userdanger("[user] starts shoving you into [src]!"))
if(do_mob(user, target, 30))
if(occupant || helmet || suit || storage)
return
if(target == user)
- user.visible_message("[user] slips into [src] and closes the door behind [user.p_them()]!", "You slip into [src]'s cramped space and shut its door.")
+ user.visible_message(span_warning("[user] slips into [src] and closes the door behind [user.p_them()]!"), span_notice("You slip into [src]'s cramped space and shut its door."))
else
- target.visible_message("[user] pushes [target] into [src] and shuts its door!", "[user] shoves you into [src] and shuts the door!")
+ target.visible_message(span_warning("[user] pushes [target] into [src] and shuts its door!"), span_userdanger("[user] shoves you into [src] and shuts the door!"))
close_machine(target)
add_fingerprint(user)
@@ -398,11 +426,12 @@
*/
/obj/machinery/suit_storage_unit/proc/cook()
var/mob/living/mob_occupant = occupant
- if(uv_cycles)
+ if(uv_cycles > 0)
uv_cycles--
uv = TRUE
locked = TRUE
update_appearance()
+ use_power(ACTIVE_DRAW_HIGH)
if(occupant)
if(uv_super)
mob_occupant.adjustFireLoss(rand(20, 36))
@@ -411,11 +440,11 @@
mob_occupant.emote("scream")
addtimer(CALLBACK(src, PROC_REF(cook)), 50)
else
- uv_cycles = initial(uv_cycles)
+ uv_cycles = (BASE_UV_CYCLES - lasers_bonus)
uv = FALSE
locked = FALSE
if(uv_super)
- visible_message("[src]'s door creaks open with a loud whining noise. A cloud of foul black smoke escapes from its chamber.")
+ visible_message(span_warning("[src]'s door creaks open with a loud whining noise. A cloud of foul black smoke escapes from its chamber."))
playsound(src, 'sound/machines/creaking.ogg', 50, TRUE)
helmet = null
qdel(helmet)
@@ -429,10 +458,16 @@
wires.cut_all()
else
if(!occupant)
- visible_message("[src]'s door slides open. The glowing yellow lights dim to a gentle green.")
+ visible_message(span_notice("[src]'s door slides open. The glowing yellow lights dim to a gentle green."))
else
- visible_message("[src]'s door slides open, barraging you with the nauseating smell of charred flesh.")
+ visible_message(span_warning("[src]'s door slides open, barraging you with the nauseating smell of charred flesh."))
mob_occupant.radiation = 0
+ if(iscarbon(mob_occupant))
+ var/mob/living/carbon/bacon = mob_occupant
+ for(var/obj/item/bodypart/grilling as anything in bacon.get_bleeding_parts(TRUE))
+ if(!grilling.can_bandage())
+ continue
+ grilling.apply_bandage(0.005, 600, "cauterization")
playsound(src, 'sound/machines/airlocks/standard/close.ogg', 25, TRUE)
var/list/things_to_clear = list() //Done this way since using GetAllContents on the SSU itself would include circuitry and such.
if(suit)
@@ -469,7 +504,7 @@
if(locked)
if(message_cooldown <= world.time)
message_cooldown = world.time + 50
- to_chat(user, "[src]'s door won't budge!")
+ to_chat(user, span_warning("[src]'s door won't budge!"))
return
open_machine()
dump_contents()
@@ -481,21 +516,21 @@
return
user.changeNext_move(CLICK_CD_BREAKOUT)
user.last_special = world.time + CLICK_CD_BREAKOUT
- user.visible_message("You see [user] kicking against the doors of [src]!", \
- "You start kicking against the doors... (this will take about [DisplayTimeText(breakout_time)].)", \
- "You hear a thump from [src].")
+ user.visible_message(span_notice("You see [user] kicking against the doors of [src]!"), \
+ span_notice("You start kicking against the doors... (this will take about [DisplayTimeText(breakout_time)].)"), \
+ span_hear("You hear a thump from [src]."))
if(do_after(user,(breakout_time), target = src))
if(!user || user.stat != CONSCIOUS || user.loc != src)
return
- user.visible_message("[user] successfully broke out of [src]!", \
- "You successfully break out of [src]!")
+ user.visible_message(span_warning("[user] successfully broke out of [src]!"), \
+ span_notice("You successfully break out of [src]!"))
open_machine()
dump_contents()
add_fingerprint(user)
if(locked)
- visible_message("You see [user] kicking against the doors of [src]!", \
- "You start kicking against the doors...")
+ visible_message(span_notice("You see [user] kicking against the doors of [src]!"), \
+ span_notice("You start kicking against the doors..."))
addtimer(CALLBACK(src, PROC_REF(resist_open), user), 300)
else
open_machine()
@@ -503,42 +538,42 @@
/obj/machinery/suit_storage_unit/proc/resist_open(mob/user)
if(!state_open && occupant && (user in src) && user.stat == 0) // Check they're still here.
- visible_message("You see [user] burst out of [src]!", \
- "You escape the cramped confines of [src]!")
+ visible_message(span_notice("You see [user] burst out of [src]!"), \
+ span_notice("You escape the cramped confines of [src]!"))
open_machine()
/obj/machinery/suit_storage_unit/attackby(obj/item/I, mob/user, params)
if(state_open && is_operational)
if(istype(I, /obj/item/clothing/suit))
if(suit)
- to_chat(user, "The unit already contains a suit!.")
+ to_chat(user, span_warning("The unit already contains a suit!."))
return
if(!user.transferItemToLoc(I, src))
return
suit = I
else if(istype(I, /obj/item/clothing/head))
if(helmet)
- to_chat(user, "The unit already contains a helmet!")
+ to_chat(user, span_warning("The unit already contains a helmet!"))
return
if(!user.transferItemToLoc(I, src))
return
helmet = I
else if(istype(I, /obj/item/clothing/mask))
if(mask)
- to_chat(user, "The unit already contains a mask!")
+ to_chat(user, span_warning("The unit already contains a mask!"))
return
if(!user.transferItemToLoc(I, src))
return
mask = I
else
if(storage)
- to_chat(user, "The auxiliary storage compartment is full!")
+ to_chat(user, span_warning("The auxiliary storage compartment is full!"))
return
if(!user.transferItemToLoc(I, src))
return
storage = I
- visible_message("[user] inserts [I] into [src]", "You load [I] into [src].")
+ visible_message(span_notice("[user] inserts [I] into [src]"), span_notice("You load [I] into [src]."))
update_appearance()
return
@@ -561,7 +596,7 @@
*/
/obj/machinery/suit_storage_unit/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/I)
if(!(flags_1 & NODECONSTRUCT_1) && I.tool_behaviour == TOOL_SCREWDRIVER && uv)
- to_chat(user, "It might not be wise to fiddle with [src] while it's running...")
+ to_chat(user, span_warning("It might not be wise to fiddle with [src] while it's running..."))
return TRUE
return ..()
@@ -570,8 +605,12 @@
. = !(state_open || panel_open || is_operational || locked || (flags_1 & NODECONSTRUCT_1)) && I.tool_behaviour == TOOL_CROWBAR
if(.)
I.play_tool_sound(src, 50)
- visible_message("[usr] pries open \the [src].", "You pry open \the [src].")
+ visible_message(span_notice("[usr] pries open \the [src]."), span_notice("You pry open \the [src]."))
open_machine()
+ // todo, make it not deconstruct while locked
+ if(!locked)
+ if(default_deconstruction_crowbar(I))
+ return TRUE
// Mapping helper unit takes whatever lies on top of it
/obj/machinery/suit_storage_unit/inherit/Initialize(mapload)
@@ -596,3 +635,6 @@
AM.forceMove(src)
storage = AM
update_appearance()
+
+
+#undef BASE_UV_CYCLES
diff --git a/code/game/machinery/telecomms/machines/broadcaster.dm b/code/game/machinery/telecomms/machines/broadcaster.dm
index f9cbc692e050..2a12e6bcf937 100644
--- a/code/game/machinery/telecomms/machines/broadcaster.dm
+++ b/code/game/machinery/telecomms/machines/broadcaster.dm
@@ -14,7 +14,7 @@ GLOBAL_VAR_INIT(message_delay, 0) // To make sure restarting the recentmessages
desc = "A dish-shaped machine used to broadcast processed subspace signals."
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 25
+ idle_power_usage = IDLE_DRAW_MINIMAL
circuit = /obj/item/circuitboard/machine/telecomms/broadcaster
/obj/machinery/telecomms/broadcaster/receive_information(datum/signal/subspace/signal, obj/machinery/telecomms/machine_from)
diff --git a/code/game/machinery/telecomms/machines/bus.dm b/code/game/machinery/telecomms/machines/bus.dm
index 2496ee41c874..6428456d1614 100644
--- a/code/game/machinery/telecomms/machines/bus.dm
+++ b/code/game/machinery/telecomms/machines/bus.dm
@@ -14,7 +14,7 @@
desc = "A mighty piece of hardware used to send massive amounts of data quickly."
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 50
+ idle_power_usage = IDLE_DRAW_MINIMAL
netspeed = 40
circuit = /obj/item/circuitboard/machine/telecomms/bus
var/change_frequency = 0
diff --git a/code/game/machinery/telecomms/machines/hub.dm b/code/game/machinery/telecomms/machines/hub.dm
index dedf7c7f3a77..a01225b4f4fd 100644
--- a/code/game/machinery/telecomms/machines/hub.dm
+++ b/code/game/machinery/telecomms/machines/hub.dm
@@ -14,7 +14,7 @@
desc = "A mighty piece of hardware used to send/receive massive amounts of data."
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 80
+ idle_power_usage = IDLE_DRAW_MINIMAL
long_range_link = TRUE
netspeed = 40
circuit = /obj/item/circuitboard/machine/telecomms/hub
diff --git a/code/game/machinery/telecomms/machines/message_server.dm b/code/game/machinery/telecomms/machines/message_server.dm
index d11067c290fd..d9f927a7c355 100644
--- a/code/game/machinery/telecomms/machines/message_server.dm
+++ b/code/game/machinery/telecomms/machines/message_server.dm
@@ -12,8 +12,8 @@
name = "Blackbox Recorder"
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 10
- active_power_usage = 100
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MINIMAL
armor = list("melee" = 25, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 70)
var/obj/item/stored
@@ -80,8 +80,8 @@
desc = "A machine that processes and routes PDA and request console messages."
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 10
- active_power_usage = 100
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MINIMAL
circuit = /obj/item/circuitboard/machine/telecomms/message_server
var/list/datum/data_pda_msg/pda_msgs = list()
diff --git a/code/game/machinery/telecomms/machines/processor.dm b/code/game/machinery/telecomms/machines/processor.dm
index 86bc02438d95..6c13ee65d510 100644
--- a/code/game/machinery/telecomms/machines/processor.dm
+++ b/code/game/machinery/telecomms/machines/processor.dm
@@ -12,7 +12,7 @@
desc = "This machine is used to process large quantities of information."
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 30
+ idle_power_usage = IDLE_DRAW_MINIMAL
circuit = /obj/item/circuitboard/machine/telecomms/processor
var/process_mode = 1 // 1 = Uncompress Signals, 0 = Compress Signals
diff --git a/code/game/machinery/telecomms/machines/receiver.dm b/code/game/machinery/telecomms/machines/receiver.dm
index 79b989648d55..33b0bc7028ec 100644
--- a/code/game/machinery/telecomms/machines/receiver.dm
+++ b/code/game/machinery/telecomms/machines/receiver.dm
@@ -12,7 +12,7 @@
desc = "This machine has a dish-like shape and green lights. It is designed to detect and process subspace radio activity."
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 30
+ idle_power_usage = IDLE_DRAW_MINIMAL
circuit = /obj/item/circuitboard/machine/telecomms/receiver
/obj/machinery/telecomms/receiver/receive_signal(datum/signal/subspace/signal)
diff --git a/code/game/machinery/telecomms/machines/relay.dm b/code/game/machinery/telecomms/machines/relay.dm
index ffaeda72e26d..763c42dbbf9c 100644
--- a/code/game/machinery/telecomms/machines/relay.dm
+++ b/code/game/machinery/telecomms/machines/relay.dm
@@ -12,7 +12,7 @@
desc = "A mighty piece of hardware used to send massive amounts of data far away."
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 30
+ idle_power_usage = IDLE_DRAW_MINIMAL
netspeed = 5
long_range_link = 1
circuit = /obj/item/circuitboard/machine/telecomms/relay
diff --git a/code/game/machinery/telecomms/machines/server.dm b/code/game/machinery/telecomms/machines/server.dm
index 664d45b5b1c1..5607b6bbec8c 100644
--- a/code/game/machinery/telecomms/machines/server.dm
+++ b/code/game/machinery/telecomms/machines/server.dm
@@ -11,7 +11,7 @@
desc = "A machine used to store data and network statistics."
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 15
+ idle_power_usage = IDLE_DRAW_MINIMAL
circuit = /obj/item/circuitboard/machine/telecomms/server
var/list/log_entries = list()
var/totaltraffic = 0 // gigabytes (if > 1024, divide by 1024 -> terrabytes)
diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm
index 6e0551b25d41..1a342f0554cd 100644
--- a/code/game/machinery/teleporter.dm
+++ b/code/game/machinery/teleporter.dm
@@ -9,8 +9,8 @@
icon_state = "tele0"
base_icon_state = "tele"
use_power = IDLE_POWER_USE
- idle_power_usage = 10
- active_power_usage = 2000
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_HIGH
circuit = /obj/item/circuitboard/machine/teleporter_hub
var/accuracy = 0
var/obj/machinery/teleport/station/power_station
@@ -106,8 +106,8 @@
icon_state = "controller"
base_icon_state = "controller"
use_power = IDLE_POWER_USE
- idle_power_usage = 10
- active_power_usage = 2000
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_HIGH
circuit = /obj/item/circuitboard/machine/teleporter_station
var/engaged = FALSE
var/obj/machinery/computer/teleporter/teleporter_console
diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm
index 6814f0cc2e7f..83a2c4861c90 100644
--- a/code/game/mecha/mech_fabricator.dm
+++ b/code/game/mecha/mech_fabricator.dm
@@ -5,8 +5,8 @@
desc = "Nothing is being built."
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 20
- active_power_usage = 5000
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_HIGH
req_access = list(ACCESS_ROBOTICS)
circuit = /obj/item/circuitboard/machine/mechfab
var/time_coeff = 1
@@ -196,10 +196,10 @@
rmat.silo_log(src, "built", -1, "[D.name]", res_coef)
add_overlay("fab-active")
- use_power = ACTIVE_POWER_USE
+ set_active_power()
updateUsrDialog()
sleep(get_construction_time_w_coeff(D))
- use_power = IDLE_POWER_USE
+ set_idle_power()
cut_overlay("fab-active")
desc = initial(desc)
diff --git a/code/game/objects/effects/anomalies/anomalies_hallucination.dm b/code/game/objects/effects/anomalies/anomalies_hallucination.dm
index fc7e4e3c9859..ab859a3b3215 100644
--- a/code/game/objects/effects/anomalies/anomalies_hallucination.dm
+++ b/code/game/objects/effects/anomalies/anomalies_hallucination.dm
@@ -28,7 +28,7 @@
/obj/effect/anomaly/hallucination/proc/hallucination_pulse(turf/open/location, effectrange)
for(var/mob/living/carbon/human/user in view(location, effectrange))
// If they are immune to the anomaly
- if (iscarbon(user) && !user.research_scanner)
+ if (user.research_scanner)
continue
// Blind people don't get hallucinations.
diff --git a/code/game/objects/effects/contraband.dm b/code/game/objects/effects/contraband.dm
index 8f746f3f13ee..500c7911a916 100644
--- a/code/game/objects/effects/contraband.dm
+++ b/code/game/objects/effects/contraband.dm
@@ -1138,6 +1138,6 @@
icon_state = "rolled_poster"
// #undef PLACE_SPEED MOD_CHANGES-CELADON -> REMOVED BECAUSE ITS PREVENTING NEW /random POSTERS FROM OTHER FILES
-// #undef POSTER_SUBTYPES EXAMPLE FOR PREVENTED /random POSTER: mod_celadon/elysium_stuff/code/ElysimMerch.dm
+// #undef POSTER_SUBTYPES EXAMPLE FOR PREVENTED /random POSTER: mod_celadon/elysium_stuff/code/elysiumMerch.dm
// #undef POSTER_LIST LINE 37, random_type = POSTER_SUBTYPES -> ERROR: undefined var
// #undef POSTER_ADD_FROM_LIST
diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm
index b08d7bf6737c..078c435bd213 100644
--- a/code/game/objects/effects/landmarks.dm
+++ b/code/game/objects/effects/landmarks.dm
@@ -45,7 +45,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark)
. = ..()
GLOB.start_landmarks_list += src
if(jobspawn_override)
- LAZYADDASSOC(GLOB.jobspawn_overrides, name, src)
+ LAZYADDASSOCLIST(GLOB.jobspawn_overrides, name, src)
if(name != "start")
tag = "start*[name]"
diff --git a/code/game/objects/effects/spawners/bundle.dm b/code/game/objects/effects/spawners/bundle.dm
index 19e7b1c957fa..edab392613f3 100644
--- a/code/game/objects/effects/spawners/bundle.dm
+++ b/code/game/objects/effects/spawners/bundle.dm
@@ -141,18 +141,6 @@
/obj/item/clothing/head/wizard/fake,
/obj/item/staff)
-/obj/effect/spawner/bundle/costume/sexyclown
- name = "sexy clown costume spawner"
- items = list(
- /obj/item/clothing/mask/gas/sexyclown,
- /obj/item/clothing/under/rank/civilian/clown/sexy)
-
-/obj/effect/spawner/bundle/costume/sexymime
- name = "sexy mime costume spawner"
- items = list(
- /obj/item/clothing/mask/gas/sexymime,
- /obj/item/clothing/under/rank/civilian/mime/sexy)
-
/obj/effect/spawner/bundle/costume/mafia
name = "black mafia outfit spawner"
items = list(
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 00943573a12e..7e64ce658e8b 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -202,6 +202,10 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
var/canMouseDown = FALSE
+ //for setting world icons on the go
+ var/inventory_state
+ var/world_state
+
/obj/item/Initialize()
if(attack_verb)
@@ -518,12 +522,12 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
/obj/item/proc/equipped(mob/user, slot, initial = FALSE)
SHOULD_CALL_PARENT(1)
visual_equipped(user, slot, initial)
- SEND_SIGNAL(src, COMSIG_ITEM_EQUIPPED, user, slot)
for(var/X in actions)
var/datum/action/A = X
if(item_action_slot_check(slot, user)) //some items only give their actions buttons when in a specific slot.
A.Grant(user)
item_flags |= IN_INVENTORY
+ SEND_SIGNAL(src, COMSIG_ITEM_EQUIPPED, user, slot)
if(!initial)
if(equip_sound && (slot_flags & slot))
playsound(src, equip_sound, EQUIP_SOUND_VOLUME, TRUE, ignore_walls = FALSE)
@@ -694,7 +698,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
if (callback) //call the original callback
. = callback.Invoke()
item_flags &= ~IN_INVENTORY
- if(!pixel_y && !pixel_x)
+ if(!pixel_y && !pixel_x && !(item_flags & NO_PIXEL_RANDOM_DROP))
pixel_x = rand(-8,8)
pixel_y = rand(-8,8)
diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm
index 630759c85afe..4d0a898ccf8b 100644
--- a/code/game/objects/items/cards_ids.dm
+++ b/code/game/objects/items/cards_ids.dm
@@ -140,8 +140,8 @@
playsound(src, 'sound/items/bikehorn.ogg', 50, TRUE)
/obj/item/card/id
- name = "identification card"
- desc = "A card used to provide ID and determine access across the station."
+ name = "access card"
+ desc = "These cards provide access to different sections of a ship."
icon_state = "id"
item_state = "card-id"
lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi'
@@ -159,7 +159,7 @@
var/obj/machinery/paystand/my_store
var/uses_overlays = TRUE
var/icon/cached_flat_icon
- var/registered_age = 13 // default age for ss13 players
+ var/registered_age = 18 // default age for ss13 players
var/job_icon
var/faction_icon
@@ -180,10 +180,18 @@
/obj/item/card/id/attack_self(mob/user)
if(Adjacent(user))
- var/minor
- if(registered_name && registered_age && registered_age < AGE_MINOR)
- minor = " (MINOR)"
- user.visible_message("[user] shows you: [icon2html(src, viewers(user))] [src.name][minor].", "You show \the [src.name][minor].")
+ var/id_message = "\the [initial(name)] "
+ var/list/id_info = list()
+ if(assignment)
+ id_info += "JOB: [assignment]"
+ if(registered_name)
+ id_info += "NAME: [registered_name]"
+ if(id_info)
+ id_message += id_info.Join(", ")
+ var/self_message = span_notice("You show [id_message]")
+ var/other_message = span_notice("[user] shows you: [icon2html(src, viewers(user))] [id_message]")
+
+ user.visible_message(other_message, self_message)
add_fingerprint(user)
/obj/item/card/id/vv_edit_var(var_name, var_value)
@@ -323,31 +331,41 @@
/obj/item/card/id/examine(mob/user)
. = ..()
- if(registered_account)
- . += "The account linked to the ID belongs to '[registered_account.account_holder]' and reports a balance of [registered_account.account_balance] cr."
. += "There's more information below, you can look again to take a closer look..."
/obj/item/card/id/examine_more(mob/user)
var/list/msg = list("You examine [src] closer, and note the following...")
-
+ if(registered_name)
+ msg += "NAME:"
+ msg += "[registered_name]"
if(registered_age)
- msg += "The card indicates that the holder is [registered_age] years old. [(registered_age < AGE_MINOR) ? "There's a holographic stripe that reads 'MINOR: DO NOT SERVE ALCOHOL OR TOBACCO' along the bottom of the card." : ""]"
- if(mining_points)
- msg += "There's [mining_points] mining equipment redemption point\s loaded onto this card."
+ msg += "AGE:"
+ msg += "[registered_age] years old [(registered_age < AGE_MINOR) ? "There's a holographic stripe that reads 'MINOR: DO NOT SERVE ALCOHOL OR TOBACCO' along the bottom of the card." : ""]"
if(length(ship_access))
+ msg += "SHIP ACCESS:"
+
+ var/list/ship_factions = list()
+ for(var/datum/overmap/ship/controlled/ship in ship_access)
+ var/faction = ship.get_faction()
+ if(!(faction in ship_factions))
+ ship_factions += faction
+ msg += "[ship_factions.Join(", ")]"
+
var/list/ship_names = list()
for(var/datum/overmap/ship/controlled/ship in ship_access)
ship_names += ship.name
- msg += "The card has access to the following ships: [ship_names.Join(", ")]"
+ msg += "[ship_names.Join(", ")]"
+
if(registered_account)
- msg += "The account linked to the ID belongs to '[registered_account.account_holder]' and reports a balance of [registered_account.account_balance] cr."
- msg += "Alt-Click the ID to pull money from the linked account in the form of holochips."
- msg += "You can insert credits into the linked account by pressing holochips, cash, or coins against the ID."
+ msg += "ACCOUNT:"
+ msg += "LINKED ACCOUNT HOLDER: '[registered_account.account_holder]'"
+ msg += "BALANCE: [registered_account.account_balance] cr."
+ msg += "Alt-click the ID to pull money from the account in the form of holochips."
+ msg += "You can insert credits into the account by pressing holochips, cash, or coins against the ID."
if(registered_account.account_holder == user.real_name)
- msg += "If you lose this ID card, you can reclaim your account by Alt-Clicking a blank ID card while holding it and entering your account ID number."
+ msg += "If you lose this ID card, you can reclaim your account by Alt-click a blank ID card and entering your account ID number."
else
- msg += "There is no registered account linked to this card. Alt-Click to add one."
-
+ msg += "There is no registered account. Alt-click to add one."
return msg
/obj/item/card/id/GetAccess()
@@ -407,16 +425,14 @@
/*
Usage:
update_label()
- Sets the id name to whatever registered_name and assignment is
+ Sets the id name to whatever the assignment is
*/
/obj/item/card/id/proc/update_label()
- var/blank = !registered_name
- name = "[blank ? initial(name) : "[registered_name]'s ID Card"][(!assignment) ? "" : " ([assignment])"]"
+ name = "[(istype(src, /obj/item/card/id/syndicate)) ? "[initial(name)]" : "access card"][(!assignment) ? "" : " ([assignment])"]"
/obj/item/card/id/silver
- name = "silver identification card"
- desc = "A silver card which shows honour and dedication."
+ desc = "A silver-colored card, usually given to higher-ranking officials in ships and stations."
icon_state = "silver"
item_state = "silver_id"
lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi'
@@ -428,8 +444,7 @@ update_label()
access = list(ACCESS_CHANGE_IDS)
/obj/item/card/id/gold
- name = "gold identification card"
- desc = "A golden card which shows power and might."
+ desc = "A golden-colored card, usually given to those at the top of the hierarchy in a ship."
icon_state = "gold"
item_state = "gold_id"
lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi'
@@ -532,10 +547,7 @@ update_label()
access = list(ACCESS_MAINT_TUNNELS, ACCESS_SYNDICATE, ACCESS_SYNDICATE_LEADER)
/obj/item/card/id/syndicate_command
- name = "syndicate ID card"
- desc = "An ID straight from the Syndicate."
- registered_name = "Syndicate"
- assignment = "Syndicate Overlord"
+ desc = "An access card widely utilized by Coalition splinters in the frontier."
icon_state = "syndie"
access = list(ACCESS_SYNDICATE)
uses_overlays = FALSE
@@ -569,15 +581,12 @@ update_label()
/obj/item/card/id/patient //Aegis ID
assignment = "Long Term Patient"
uses_overlays = FALSE
- access = list(ACCESS_SYNDICATE)
/obj/item/card/id/captains_spare
- desc = "The spare ID of the High Lord himself."
icon_state = "gold"
item_state = "gold_id"
lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi'
- registered_name = "Captain"
assignment = "Captain"
registered_age = null
@@ -596,11 +605,9 @@ update_label()
..()
/obj/item/card/id/centcom
- name = "\improper CentCom ID"
- desc = "An ID straight from Central Command."
+ name = "\improper Nanotrasen Central Command access card"
+ desc = "An access card sourced from Nanotrasen's Central Command."
icon_state = "centcom"
- registered_name = "Central Command"
- assignment = "Central Command"
uses_overlays = FALSE
registered_age = null
@@ -615,8 +622,6 @@ update_label()
name = "\improper CentCom ID"
desc = "An ERT ID card."
icon_state = "ert_commander"
- registered_name = "Emergency Response Team Commander"
- assignment = "Emergency Response Team Commander"
uses_overlays = FALSE
registered_age = null
@@ -625,8 +630,6 @@ update_label()
. = ..()
/obj/item/card/id/ert/security
- registered_name = "Security Response Officer"
- assignment = "Security Response Officer"
icon_state = "ert_security"
/obj/item/card/id/ert/security/Initialize()
@@ -634,8 +637,6 @@ update_label()
. = ..()
/obj/item/card/id/ert/engineer
- registered_name = "Engineering Response Officer"
- assignment = "Engineering Response Officer"
icon_state = "ert_engineer"
/obj/item/card/id/ert/engineer/Initialize()
@@ -643,8 +644,6 @@ update_label()
. = ..()
/obj/item/card/id/ert/medical
- registered_name = "Medical Response Officer"
- assignment = "Medical Response Officer"
icon_state = "ert_medic"
/obj/item/card/id/ert/medical/Initialize()
@@ -652,8 +651,6 @@ update_label()
. = ..()
/obj/item/card/id/ert/chaplain
- registered_name = "Religious Response Officer"
- assignment = "Religious Response Officer"
icon_state = "ert_chaplain"
/obj/item/card/id/ert/chaplain/Initialize()
@@ -661,8 +658,6 @@ update_label()
. = ..()
/obj/item/card/id/ert/janitor
- registered_name = "Janitorial Response Officer"
- assignment = "Janitorial Response Officer"
icon_state = "ert_janitor"
/obj/item/card/id/ert/janitor/Initialize()
@@ -670,8 +665,6 @@ update_label()
. = ..()
/obj/item/card/id/ert/clown
- registered_name = "Entertainment Response Officer"
- assignment = "Entertainment Response Officer"
icon_state = "ert_clown"
/obj/item/card/id/ert/clown/Initialize()
@@ -679,12 +672,10 @@ update_label()
. = ..()
/obj/item/card/id/ert/deathsquad
- name = "\improper Death Squad ID"
- desc = "A Death Squad ID card."
+ desc = "An access card colored in black and red."
icon_state = "deathsquad" //NO NO SIR DEATH SQUADS ARENT A PART OF NANOTRASEN AT ALL
- registered_name = "Death Commando"
- assignment = "Death Commando"
uses_overlays = FALSE
+ job_icon = "deathsquad"
/obj/item/card/id/debug
name = "\improper Debug ID"
diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm
index bd0a1ffce9c1..1acd4a880696 100644
--- a/code/game/objects/items/circuitboards/machine_circuitboards.dm
+++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm
@@ -201,8 +201,19 @@
name = "Circulator/Heat Exchanger (Machine Board)"
icon_state = "engineering"
build_path = /obj/machinery/atmospherics/components/binary/circulator
+ var/pipe_layer = PIPING_LAYER_DEFAULT
req_components = list()
+/obj/item/circuitboard/machine/circulator/attackby(obj/item/I, mob/user, params)
+ if(I.tool_behaviour == TOOL_MULTITOOL)
+ pipe_layer = (pipe_layer >= PIPING_LAYER_MAX) ? PIPING_LAYER_MIN : (pipe_layer + 1)
+ to_chat(user, "You change the circuitboard to layer [pipe_layer].")
+ return
+
+/obj/item/circuitboard/machine/circulator/examine()
+ . = ..()
+ . += "It is set to layer [pipe_layer]."
+
/obj/item/circuitboard/machine/emitter
name = "Emitter (Machine Board)"
icon_state = "engineering"
@@ -1473,10 +1484,22 @@
/obj/item/circuitboard/machine/shuttle/heater
name = "Fueled Engine Heater (Machine Board)"
+ desc = "You can use mulitool to switch pipe layers"
build_path = /obj/machinery/atmospherics/components/unary/shuttle/heater
+ var/pipe_layer = PIPING_LAYER_DEFAULT
req_components = list(/obj/item/stock_parts/micro_laser = 2,
/obj/item/stock_parts/matter_bin = 1)
+/obj/item/circuitboard/machine/shuttle/heater/attackby(obj/item/I, mob/user, params)
+ if(I.tool_behaviour == TOOL_MULTITOOL)
+ pipe_layer = (pipe_layer >= PIPING_LAYER_MAX) ? PIPING_LAYER_MIN : (pipe_layer + 1)
+ to_chat(user, "You change the circuitboard to layer [pipe_layer].")
+ return
+
+/obj/item/circuitboard/machine/shuttle/heater/examine()
+ . = ..()
+ . += "It is set to layer [pipe_layer]."
+
/obj/item/circuitboard/machine/shuttle/smes
name = "Electric Engine Precharger (Machine Board)"
build_path = /obj/machinery/power/smes/shuttle
@@ -1523,3 +1546,9 @@
/obj/item/stock_parts/capacitor = 1,
/obj/item/stock_parts/micro_laser = 2,
)
+
+/obj/item/circuitboard/machine/suit_storage_unit
+ name = "Suit Storage Unit"
+ icon_state = "engineering"
+ build_path = /obj/machinery/suit_storage_unit
+ req_components = list(/obj/item/stock_parts/micro_laser = 4)
diff --git a/code/game/objects/items/devices/mines.dm b/code/game/objects/items/devices/mines.dm
index 112e26e1303b..1772cbf497c3 100644
--- a/code/game/objects/items/devices/mines.dm
+++ b/code/game/objects/items/devices/mines.dm
@@ -212,11 +212,8 @@
SIGNAL_HANDLER
if(!can_trigger(arrived))
return
- // Flying = can't step on a mine
- if(arrived.movement_type & FLYING)
- return
- //no cheap disarming
- if(arrived.throwing && isitem(arrived))
+ // All other movment types rn can easily avoid it
+ if(!(arrived.movement_type == GROUND))
return
// Someone already on it
if(foot_on_mine?.resolve())
@@ -257,6 +254,10 @@
clicked = FALSE
. = ..()
+/obj/item/mine/pressure/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum)
+ trigger_mine(AM)
+ ..()
+
//handles disarming(and failing to disarm)
/obj/item/mine/pressure/attackby(obj/item/I, mob/user)
if(I.tool_behaviour == TOOL_SCREWDRIVER)
diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm
index 3a6ba2f73950..5b69cab9cc7b 100644
--- a/code/game/objects/items/devices/powersink.dm
+++ b/code/game/objects/items/devices/powersink.dm
@@ -10,6 +10,7 @@
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
w_class = WEIGHT_CLASS_BULKY
flags_1 = CONDUCT_1
+ item_flags = NO_PIXEL_RANDOM_DROP
throwforce = 5
throw_speed = 1
throw_range = 2
diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm
index 3f40f82fe0ae..cdded7e418ef 100644
--- a/code/game/objects/items/devices/scanners.dm
+++ b/code/game/objects/items/devices/scanners.dm
@@ -357,7 +357,7 @@ GENE SCANNER
if(blood_id)
if(ishuman(C))
var/mob/living/carbon/human/H = C
- if(H.bleed_rate)
+ if(LAZYLEN(H.get_bleeding_parts()))
render_list += "Subject is bleeding!\n"
var/blood_percent = round((C.blood_volume / BLOOD_VOLUME_NORMAL)*100)
var/blood_type = C.dna.blood_type.name
diff --git a/code/game/objects/items/dyekit.dm b/code/game/objects/items/dyekit.dm
index 2cbfbca6332b..86c6e90a3290 100644
--- a/code/game/objects/items/dyekit.dm
+++ b/code/game/objects/items/dyekit.dm
@@ -38,3 +38,30 @@
return
playsound(src, 'sound/effects/spray.ogg', 5, TRUE, 5)
human_target.update_hair()
+
+/obj/item/colorsalve
+ name = "Elzuose color salve"
+ desc = "A Kalixcian beauty product for Elzuose that comes in the form of a salve packaged with various color additives. Used to temporarily change the pigment color of light emitting cells in the skin, requiring an extensive amount of time to prepare and apply. Wears off after a few hours."
+ icon = 'icons/obj/dyespray.dmi'
+ icon_state = "colorsalve"
+
+/obj/item/colorsalve/attack_self(mob/living/user)
+ if(!iselzuose(user))
+ return
+
+ var/mob/living/carbon/human/H = user
+ var/datum/species/elzuose/species_datum = H.dna.species
+ // select new color
+ var/new_etherealcolor = input(user, "Choose your Elzuose color:", "Character Preference", species_datum.default_color) as color|null
+ if(new_etherealcolor)
+ var/temp_hsv = RGBtoHSV(new_etherealcolor)
+ if(ReadHSV(temp_hsv)[3] >= ReadHSV("#505050")[3]) // elzu colors should be bright ok??
+ if(!do_after(usr, 30 SECONDS, user))
+ return
+ playsound(src, 'sound/effects/ointment.ogg', 5, TRUE, 5)
+ species_datum.default_color = sanitize_hexcolor(new_etherealcolor, 6, TRUE)
+ species_datum.current_color = species_datum.health_adjusted_color(user, species_datum.default_color)
+ species_datum.spec_updatehealth(user)
+ user.visible_message(span_notice("[user] applies the salve, changing [user.p_their()] color to [new_etherealcolor]"))
+ else
+ to_chat(user, span_danger("Invalid color. Your color is not bright enough."))
diff --git a/code/game/objects/items/handcuffs.dm b/code/game/objects/items/handcuffs.dm
index 496fc07288ec..f41deb5598a6 100644
--- a/code/game/objects/items/handcuffs.dm
+++ b/code/game/objects/items/handcuffs.dm
@@ -272,6 +272,11 @@
update_appearance()
playsound(src, 'sound/effects/snap.ogg', 50, TRUE)
+/obj/item/restraints/legcuffs/beartrap/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum)
+ if(armed)
+ close_trap()
+ ..()
+
/obj/item/restraints/legcuffs/beartrap/proc/on_entered(datum/source, AM as mob|obj)
SIGNAL_HANDLER
if(armed && isturf(loc))
diff --git a/code/game/objects/items/kitchen.dm b/code/game/objects/items/kitchen.dm
index 1475ae88f8dd..e386420462d6 100644
--- a/code/game/objects/items/kitchen.dm
+++ b/code/game/objects/items/kitchen.dm
@@ -179,6 +179,7 @@
/obj/item/kitchen/knife/combat
name = "combat knife"
+ icon = 'icons/obj/world/melee.dmi'
icon_state = "combatknife"
item_state = "combatknife"
desc = "A military combat utility survival knife."
@@ -188,6 +189,10 @@
attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "cut")
bayonet = TRUE
+/obj/item/kitchen/knife/combat/Initialize()
+ . = ..()
+ AddElement(/datum/element/world_icon, null, icon, 'icons/obj/item/knife.dmi')
+
/obj/item/kitchen/knife/combat/survival
name = "survival knife"
icon_state = "survivalknife"
diff --git a/code/game/objects/items/manuals.dm b/code/game/objects/items/manuals.dm
index 693858bf1b2e..05af8fcadbad 100644
--- a/code/game/objects/items/manuals.dm
+++ b/code/game/objects/items/manuals.dm
@@ -256,8 +256,8 @@
- Trickwines for idiots
- Okay, so you just joined the SRM and you want to make some brews! I'm tired of explaining all of this so I'm jotting it all down for you clowns.
+ Trickwines for brewers
+ Okay, so you just joined the SRM and you want to make some brews! I'm tired of explaining all of this so I'm jotting it all down for the new hires.
Trickwines almost all share the same effect. When you drink them, they provide a beneficial effect and when you toss them at someone it provides some sort of bad effect.
Breakaway flasks
Honestly, I love these things. I'm not a scientist so I cant exactly explain how it works but somehow when you fuse plasma into glass it makes it ultra sharp and makes it really good for cracking over fauna heads.
@@ -273,22 +273,27 @@
Soon it will drops some apples and you can grind them for the bacteria.
Once you have enough you can fabricate it the same way you would a normal barrel.
+ Ratios
+ A common trend among Trickwines is the ratio of 3:1:1.
+ 3 parts being an ethonal, the other 2 parts are often made from flora or fauna.
+
Ashwine
- It's kind of our trademark, and it's one of the simplest trickwines to make. The Montagnes love using this stuff in ceremonies as well so it should get you some good boy points.
+ It's kind of our trademark, and it's one of the simplest trickwines to make.
+ These are the most common wines used in ceremonies so we often stock ships with the moonflowers needed to make them.
It's made with a ratio of 3:1:1 absinthe, mushroom hallucinogen, and ash respectively.
Mushroom hallucinogens come from mushroom caps and you can ferment absinthe from moonflowers.
Its a mild hallucinogenic but seems to have powerful cleansing effects on the devoted SRM.
It can also really fuck someone up, causing their vision to go shaky and blurry which makes it difficult for them to fight.
Icewine
- This one helps stopping foes in their tracks. It's also got a nice taste.
+ This one helps stopping foes in their tracks. One of my favorite flavor wise.
Its made with 3:1:1 saké, polar bear fur, frost oil(grind chilled peppers).
You can get polar bear fur and frost oil from grinding up polar bear hides and chilled peppers.
It's pretty good at sealing burns and lowering your temperature quickly.
However, it completely encases foes in ice and drops their temperature substantially.
Shockwine
- Easily my favorite, this thing is great at scorching most fauna.
+ Easily my favorite for its splashed effect, this thing is great at scorching most fauna.
Its made with vodka, calcium, and lemon juice.
If you did not know, vodka requires enzymes instead of the normal fermenting process.
It's a nice upper. Great if you're trying to run away.
@@ -301,15 +306,18 @@
Its made out of ground up fireblossems with some nice hard cider and a bit of welding fuel with of course a ratio of 3:1:1.
Forcewine
- I once had a duel with a wizard and and I was able to completly ignore a few of his spells! Its like they just fizzled out when they hit me.
- Would recomend for any esoteric senarios even though I have only been in a few of those.
- You can also use it to entrap Fauna inside of a forcefield like bubble, Gives you time to breath and laugh at them.
- 3:1:1 Tequila, Space Montain Wind, and I know its strange but hollow water, Its that stuff you can extract from geysers
+ Two intresting effects from the consumption of Forcewine.
+ First it seems to give you an "anti magic" effect, I have read about of tales of how it fizzled out some sort of great curse that we could best trace back to a ancient cult.
+ Second is it protects the mind from cohersion and mind control.
+ From my research this seems to act like nanotrasen mindshield implants.
+ Would recomend for any esoteric senarios. We wont see these alot but its always smart to prepare for the worst.
+ You can also use it to entrap Fauna inside of a forcefield like bubble, Gives you time to breath and prepare an attack.
+ 3:1:1. Tequila, Space Montain Wind, and I know its one of the most difficult things to come by but hollow water, Its that stuff you can extract from geysers
Prismwine
Gives you a nice shiny layer of armour, fire seems to have alot harder time sticking to me when i tested it.
Throwing it seeems to do the reverse acting like a magnifying glass to burns and lasers
- Made 3:1:1 with good ol Gin, then add plasma and tinea luxor which is found from mushroom stems
+ 3:1:1. Good ol Gin, then add plasma and tinea luxor which is found from mushroom stems
Some of these can be a bit situatinal but its always nice to have a few in your bag for emergecys.
As a bonus, most of the other factions have no clue how to make these so you can sell them for a fair chunk of cash.
diff --git a/code/game/objects/items/puzzle_pieces.dm b/code/game/objects/items/puzzle_pieces.dm
index 5d6b409e8d32..473bcd945c58 100644
--- a/code/game/objects/items/puzzle_pieces.dm
+++ b/code/game/objects/items/puzzle_pieces.dm
@@ -1,6 +1,6 @@
//**************
-//*****Keys*******************
-//************** ** **
+//*****Keys*****
+//**************
/obj/item/keycard
name = "security keycard"
desc = "This feels like it belongs to a door."
diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm
index 32d923eef985..842c880d2ed9 100644
--- a/code/game/objects/items/stacks/medical.dm
+++ b/code/game/objects/items/stacks/medical.dm
@@ -137,12 +137,13 @@
/obj/item/stack/medical/gauze
name = "medical gauze"
- desc = "A roll of elastic cloth that is extremely effective at stopping bleeding, but does not heal wounds."
+ desc = "A roll of elastic cloth that is extremely effective at stopping bleeding and slowly heals wounds."
gender = PLURAL
singular_name = "medical gauze"
icon_state = "gauze"
apply_sounds = list('sound/effects/rip1.ogg', 'sound/effects/rip2.ogg')
- var/stop_bleeding = 1800
+ var/bleed_reduction = 0.02
+ var/lifespan = 150
self_delay = 20
max_amount = 12
grind_results = list(/datum/reagent/cellulose = 2)
@@ -152,13 +153,16 @@
amount = 12
/obj/item/stack/medical/gauze/heal(mob/living/target, mob/user)
- if(ishuman(target))
- var/mob/living/carbon/human/H = target
- if(!H.bleedsuppress && H.bleed_rate) //so you can't stack bleed suppression
- H.suppress_bloodloss(stop_bleeding)
- to_chat(user, "You stop the bleeding of [target]!")
+ if(iscarbon(target))
+ var/mob/living/carbon/C = target
+ var/obj/item/bodypart/BP = C.get_bodypart(check_zone(user.zone_selected))
+ if(!BP)
+ to_chat(user, span_warning("[C] doesn't have \a [parse_zone(user.zone_selected)]!"))
+ return
+ if(BP.can_bandage(user))
+ BP.apply_bandage(bleed_reduction, lifespan, name)
+ user.visible_message(span_notice("[user] wraps [C]'s [parse_zone(BP.body_zone)] with [src]."), span_notice("You wrap [C]'s [parse_zone(check_zone(user.zone_selected))] with [src]."), span_hear("You hear ruffling cloth."))
return TRUE
- to_chat(user, "You can not use \the [src] on [target]!")
/obj/item/stack/medical/gauze/attackby(obj/item/I, mob/user, params)
if(I.tool_behaviour == TOOL_WIRECUTTER || I.get_sharpness())
@@ -178,8 +182,8 @@
/obj/item/stack/medical/gauze/improvised
name = "improvised gauze"
singular_name = "improvised gauze"
- desc = "A roll of cloth roughly cut from something that can stop bleeding, but does not heal wounds."
- stop_bleeding = 900
+ desc = "A roll of cloth roughly cut from something that can stop bleeding and slowly heal wounds."
+ bleed_reduction = 0.005
/obj/item/stack/medical/gauze/cyborg
custom_materials = null
diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm
index f0be0cdd7e81..b5f78d46e951 100644
--- a/code/game/objects/items/stacks/rods.dm
+++ b/code/game/objects/items/stacks/rods.dm
@@ -9,6 +9,7 @@ GLOBAL_LIST_INIT(rod_recipes, list ( \
new/datum/stack_recipe("modern railing corner", /obj/structure/railing/modern/corner, 1, time = 10, window_checks = TRUE), \
new/datum/stack_recipe("modern railing end", /obj/structure/railing/modern/end, 3, time = 18, window_checks = TRUE), \
new/datum/stack_recipe("ladder", /obj/structure/ladder/crafted, 15, time = 150, one_per_turf = TRUE, on_floor = FALSE), \
+ new/datum/stack_recipe("handrail", /obj/structure/chair/handrail, 4, time = 15, one_per_turf = TRUE), \
))
/obj/item/stack/rods
diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm
index e3ef63e116d4..9fc6fa808a46 100644
--- a/code/game/objects/items/stacks/sheets/mineral.dm
+++ b/code/game/objects/items/stacks/sheets/mineral.dm
@@ -332,32 +332,6 @@ GLOBAL_LIST_INIT(silver_recipes, list ( \
/obj/item/stack/sheet/mineral/silver/five
amount = 5
-/*
- * Clown
- */
-/obj/item/stack/sheet/mineral/bananium
- name = "bananium"
- icon_state = "sheet-bananium"
- item_state = "sheet-bananium"
- singular_name = "bananium sheet"
- sheettype = "bananium"
- custom_materials = list(/datum/material/bananium=MINERAL_MATERIAL_AMOUNT)
-
- grind_results = list(/datum/reagent/consumable/banana = 20)
- point_value = 50
- merge_type = /obj/item/stack/sheet/mineral/bananium
- material_type = /datum/material/bananium
- walltype = /turf/closed/wall/mineral/bananium
-
-GLOBAL_LIST_INIT(bananium_recipes, list ( \
- new/datum/stack_recipe("bananium tile", /obj/item/stack/tile/mineral/bananium, 1, 4, 20), \
- new/datum/stack_recipe("Clown Statue", /obj/structure/statue/bananium/clown, 5, one_per_turf = 1, on_floor = 1), \
- ))
-
-/obj/item/stack/sheet/mineral/bananium/get_main_recipes()
- . = ..()
- . += GLOB.bananium_recipes
-
/*
* Titanium
*/
@@ -436,7 +410,6 @@ GLOBAL_LIST_INIT(plastitanium_recipes, list ( \
. = ..()
. += GLOB.plastitanium_recipes
-
/*
* Snow
*/
@@ -465,56 +438,6 @@ GLOBAL_LIST_INIT(snow_recipes, list ( \
. = ..()
. += GLOB.snow_recipes
-/****************************** Others ****************************/
-
-/*
- * Adamantine
-*/
-
-/obj/item/stack/sheet/mineral/adamantine
- name = "adamantine"
- icon_state = "sheet-adamantine"
- item_state = "sheet-adamantine"
- singular_name = "adamantine sheet"
- custom_materials = list(/datum/material/adamantine=MINERAL_MATERIAL_AMOUNT)
- merge_type = /obj/item/stack/sheet/mineral/adamantine
- grind_results = list(/datum/reagent/liquidadamantine = 10)
-
-/obj/item/stack/sheet/mineral/adamantine/ten
- amount = 10
-
-/*
- * Runite
- */
-
-/obj/item/stack/sheet/mineral/runite
- name = "runite"
- desc = "Rare material found in distant lands."
- singular_name = "runite bar"
- icon_state = "sheet-runite"
- item_state = "sheet-runite"
- custom_materials = list(/datum/material/runite=MINERAL_MATERIAL_AMOUNT)
- merge_type = /obj/item/stack/sheet/mineral/runite
- material_type = /datum/material/runite
-
-/obj/item/stack/sheet/mineral/runite/ten
- amount = 10
-
-/*
- * Mythril
- */
-/obj/item/stack/sheet/mineral/mythril
- name = "mythril"
- icon_state = "sheet-mythril"
- item_state = "sheet-mythril"
- singular_name = "mythril sheet"
- novariants = TRUE
- custom_materials = list(/datum/material/mythril=MINERAL_MATERIAL_AMOUNT)
- merge_type = /obj/item/stack/sheet/mineral/mythril
-
-/obj/item/stack/sheet/mineral/mythril/ten
- amount = 10
-
/*
* Alien Alloy
*/
@@ -573,3 +496,35 @@ GLOBAL_LIST_INIT(abductor_recipes, list ( \
/obj/item/stack/sheet/mineral/coal/ten
amount = 10
+
+/*
+ * Hellstone
+ */
+/obj/item/stack/sheet/mineral/hidden
+ name = "????????"
+ singular_name = "????????"
+
+/obj/item/stack/sheet/mineral/hidden/hellstone
+ name = "hellstone"
+ icon_state = "sheet-hellstone"
+ item_state = "sheet-hellstone"
+ singular_name = "hellstone bar"
+ sheettype = "hellstone"
+ resistance_flags = FIRE_PROOF | LAVA_PROOF
+ custom_materials = list(/datum/material/hellstone=MINERAL_MATERIAL_AMOUNT)
+ grind_results = list(/datum/reagent/clf3 = 5)
+ point_value = 20
+ merge_type = /obj/item/stack/sheet/mineral/hidden/hellstone
+ material_type = /datum/material/hellstone
+
+/obj/item/stack/sheet/mineral/hidden/hellstone/fifty
+ amount = 50
+
+/obj/item/stack/sheet/mineral/hidden/hellstone/twenty
+ amount = 20
+
+/obj/item/stack/sheet/mineral/hidden/hellstone/ten
+ amount = 10
+
+/obj/item/stack/sheet/mineral/hidden/hellstone/five
+ amount = 5
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index 7c28c93200a3..68a6772bb4e4 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -31,10 +31,6 @@
tableVariant = /obj/structure/table
material_type = /datum/material/iron
-/obj/item/stack/sheet/metal/narsie_act()
- new /obj/item/stack/sheet/runed_metal(loc, amount)
- qdel(src)
-
/obj/item/stack/sheet/metal/fifty
amount = 50
@@ -249,6 +245,7 @@ GLOBAL_LIST_INIT(cloth_recipes, list ( \
new/datum/stack_recipe("rag", /obj/item/reagent_containers/glass/rag, 1), \
new/datum/stack_recipe("towel", /obj/item/towel, 2), \
new/datum/stack_recipe("bedsheet", /obj/item/bedsheet, 3), \
+ new/datum/stack_recipe("double bedsheet", /obj/item/bedsheet/double, 4), \
new/datum/stack_recipe("empty sandbag", /obj/item/emptysandbag, 4), \
null, \
new/datum/stack_recipe("fingerless gloves", /obj/item/clothing/gloves/fingerless, 1), \
@@ -443,52 +440,6 @@ GLOBAL_LIST_INIT(cardboard_recipes, list ( \
else
. = ..()
-
-/*
- * Runed Metal
- */
-
-GLOBAL_LIST_INIT(runed_metal_recipes, list ( \
- new/datum/stack_recipe("runed door", /obj/machinery/door/airlock/cult, 1, time = 50, one_per_turf = TRUE, on_floor = TRUE), \
- new/datum/stack_recipe("runed girder", /obj/structure/girder/cult, 1, time = 50, one_per_turf = TRUE, on_floor = TRUE), \
- new/datum/stack_recipe("pylon", /obj/structure/destructible/cult/pylon, 4, time = 40, one_per_turf = TRUE, on_floor = TRUE), \
- new/datum/stack_recipe("forge", /obj/structure/destructible/cult/forge, 3, time = 40, one_per_turf = TRUE, on_floor = TRUE), \
- new/datum/stack_recipe("archives", /obj/structure/destructible/cult/tome, 3, time = 40, one_per_turf = TRUE, on_floor = TRUE), \
- new/datum/stack_recipe("altar", /obj/structure/destructible/cult/talisman, 3, time = 40, one_per_turf = TRUE, on_floor = TRUE), \
- ))
-
-/obj/item/stack/sheet/runed_metal
- name = "runed metal"
- desc = "Sheets of cold metal with shifting inscriptions writ upon them."
- singular_name = "runed metal sheet"
- icon_state = "sheet-runed"
- item_state = "sheet-runed"
- icon = 'icons/obj/stack_objects.dmi'
- custom_materials = list(/datum/material/runedmetal = MINERAL_MATERIAL_AMOUNT)
- merge_type = /obj/item/stack/sheet/runed_metal
- novariants = TRUE
- grind_results = list(/datum/reagent/iron = 5, /datum/reagent/blood = 15)
- material_type = /datum/material/runedmetal
-
-/obj/item/stack/sheet/runed_metal/attack_self(mob/living/user)
- if(!iscultist(user))
- to_chat(user, "Only one with forbidden knowledge could hope to work this metal...")
- return FALSE
- return ..()
-
-/obj/item/stack/sheet/runed_metal/get_main_recipes()
- . = ..()
- . += GLOB.runed_metal_recipes
-
-/obj/item/stack/sheet/runed_metal/fifty
- amount = 50
-
-/obj/item/stack/sheet/runed_metal/ten
- amount = 10
-
-/obj/item/stack/sheet/runed_metal/five
- amount = 5
-
/*
* Bronze
*/
diff --git a/code/game/objects/items/stacks/tape.dm b/code/game/objects/items/stacks/tape.dm
index d22b1be85344..f27f80888635 100644
--- a/code/game/objects/items/stacks/tape.dm
+++ b/code/game/objects/items/stacks/tape.dm
@@ -80,7 +80,8 @@
grind_results = list(/datum/reagent/cellulose = 5)
usesound = 'sound/items/tape.ogg'
- var/stop_bleed = 600
+ var/lifespan = 300
+ var/bleed_reduction = 0.002
var/nonorganic_heal = 5
var/self_delay = 30 //! Also used for the tapecuff delay
var/other_delay = 10
@@ -173,21 +174,17 @@
if(!affecting) //Missing limb?
to_chat(user, "[C] doesn't have \a [parse_zone(user.zone_selected)]!")
return
- if(!IS_ORGANIC_LIMB(affecting))
- if(ishuman(C))
- var/mob/living/carbon/human/H = C
- if(!H.bleedsuppress && H.bleed_rate)
- H.suppress_bloodloss(stop_bleed)
- to_chat(user, "You tape up the bleeding of [C]!")
- return TRUE
- to_chat(user, "[C] has a problem \the [src] won't fix!")
- else //Robotic patch-up
+ if(IS_ROBOTIC_LIMB(affecting)) //Robotic patch-up
if(affecting.brute_dam)
user.visible_message("[user] applies \the [src] on [C]'s [affecting.name].", "You apply \the [src] on [C]'s [affecting.name].")
if(affecting.heal_damage(nonorganic_heal))
C.update_damage_overlays()
return TRUE
- to_chat(user, "[src] can't patch what [C] has...")
+ if(affecting.can_bandage(user))
+ affecting.apply_bandage(bleed_reduction, lifespan, name)
+ to_chat(user, "You tape up [C]'s [parse_zone(affecting.body_zone)]!")
+ return TRUE
+ to_chat(user, "[src] can't patch what [C] has...")
/obj/item/stack/tape/proc/apply_gag(mob/living/carbon/target, mob/user)
if(target.is_muzzled() || target.is_mouth_covered())
@@ -272,7 +269,7 @@
desc = "This roll of silver sorcery can fix just about anything."
icon_state = "tape_d"
- stop_bleed = 800
+ lifespan = 400
nonorganic_heal = 20
prefix = "super sticky"
conferred_embed = EMBED_HARMLESS_SUPERIOR
@@ -297,7 +294,6 @@
desc = "Specialty insulated strips of adhesive plastic. Made for securing cables."
icon_state = "tape_e"
- stop_bleed = 400
nonorganic_heal = 10
prefix = "insulated sticky"
siemens_coefficient = 0
@@ -321,6 +317,6 @@
desc = "Now THIS is engineering."
icon_state = "tape_y"
- stop_bleed = 1000
+ lifespan = 500
nonorganic_heal = 30
prefix = "industry-standard sticky"
diff --git a/code/game/objects/items/stacks/tiles/tile_mineral.dm b/code/game/objects/items/stacks/tiles/tile_mineral.dm
index c5e05b5212fc..ad00f3902c50 100644
--- a/code/game/objects/items/stacks/tiles/tile_mineral.dm
+++ b/code/game/objects/items/stacks/tiles/tile_mineral.dm
@@ -48,16 +48,6 @@
mineralType = "diamond"
custom_materials = list(/datum/material/diamond=500)
-/obj/item/stack/tile/mineral/bananium
- name = "bananium tile"
- singular_name = "bananium floor tile"
- desc = "A tile made out of bananium, HOOOOOOOOONK!"
- icon_state = "tile_bananium"
- item_state = "tile-bananium"
- turf_type = /turf/open/floor/mineral/bananium
- mineralType = "bananium"
- custom_materials = list(/datum/material/bananium=500)
-
/obj/item/stack/tile/mineral/abductor
name = "alien floor tile"
singular_name = "alien floor tile"
diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm
index bfe08526311b..c578c318e73a 100644
--- a/code/game/objects/items/storage/belt.dm
+++ b/code/game/objects/items/storage/belt.dm
@@ -270,7 +270,15 @@
/obj/item/assembly/flash/handheld,
/obj/item/clothing/glasses,
/obj/item/ammo_casing/shotgun,
- /obj/item/ammo_box,
+ /obj/item/ammo_box/magazine,
+ /obj/item/ammo_box/c38, //speed loaders don't have a common path like magazines. pain.
+ /obj/item/ammo_box/a357, //some day we should refactor these into an ammo_box/speedloader type
+ /obj/item/ammo_box/a4570, //but not today
+ /obj/item/ammo_box/a858, //oh boy stripper clips too
+ /obj/item/ammo_box/vickland_a308,
+ /obj/item/ammo_box/a300,
+ /obj/item/ammo_box/aac_300blk_stripper,
+ /obj/item/ammo_box/amagpellet_claris, //that's the last of the clips
/obj/item/reagent_containers/food/snacks/donut,
/obj/item/kitchen/knife/combat,
/obj/item/flashlight/seclite,
@@ -698,6 +706,7 @@
. = ..()
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
STR.max_items = 40
+ STR.max_combined_w_class = 40
STR.display_numerical_stacking = TRUE
STR.set_holdable(list(
/obj/item/ammo_casing
diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm
index fb001b2eb56b..a7fdbc05691a 100644
--- a/code/game/objects/items/storage/boxes.dm
+++ b/code/game/objects/items/storage/boxes.dm
@@ -1370,10 +1370,10 @@
/obj/item/stack/sheet/mineral/uranium=20,\
/obj/item/stack/sheet/mineral/diamond=50,\
/obj/item/stack/sheet/bluespace_crystal=50,\
- /obj/item/stack/sheet/mineral/bananium=50,\
+ /obj/item/stack/sheet/mineral/hidden/hellstone=50,\
/obj/item/stack/sheet/mineral/wood=50,\
/obj/item/stack/sheet/plastic/fifty=1,\
- /obj/item/stack/sheet/runed_metal/fifty=1
+ /obj/item/stack/sheet/mineral/hidden/hellstone/fifty=1
)
generate_items_inside(items_inside,src)
diff --git a/code/game/objects/items/storage/fancy.dm b/code/game/objects/items/storage/fancy.dm
index 41f214998ffd..01307d92a0f8 100644
--- a/code/game/objects/items/storage/fancy.dm
+++ b/code/game/objects/items/storage/fancy.dm
@@ -163,7 +163,7 @@
////////////
/obj/item/storage/fancy/cigarettes
name = "\improper Space Cigarettes packet"
- desc = "The most popular brand of cigarettes, sponsors of the Space Olympics."
+ desc = "The most popular brand of cigarettes on the Frontier."
icon = 'icons/obj/cigarettes.dmi'
base_icon_state = "cig"
icon_state = "cig"
@@ -273,14 +273,14 @@
/obj/item/storage/fancy/cigarettes/cigpack_carp
name = "\improper Carp Classic packet"
- desc = "Since 2313."
+ desc = "Since 207 FS."
icon_state = "carp"
base_icon_state = "carp"
spawn_type = /obj/item/clothing/mask/cigarette/carp
/obj/item/storage/fancy/cigarettes/cigpack_syndicate
name = "cigarette packet"
- desc = "An obscure brand of cigarettes."
+ desc = "A semi-obscure brand of cigarettes, favored by interstellar miners."
icon_state = "syndie"
base_icon_state = "syndie"
spawn_type = /obj/item/clothing/mask/cigarette/syndicate
@@ -322,7 +322,7 @@
/obj/item/storage/fancy/cigarettes/cigpack_mindbreaker
name = "\improper Leary's Delight packet"
- desc = "Banned in over 36 galaxies."
+ desc = "Banned in over 36 Sectors."
icon_state = "shadyjim"
base_icon_state = "shadyjim"
spawn_type = /obj/item/clothing/mask/cigarette/rollie/mindbreaker
@@ -435,7 +435,7 @@
/obj/item/storage/fancy/cigarettes/cigars/havana
name = "\improper premium Havanian cigar case"
- desc = "A case of classy Havanian cigars."
+ desc = "Even after centuries of Solarian export, Havana smooth is only found in proper terran cigars."
icon_state = "cohibacase"
base_icon_state = "cohibacase"
spawn_type = /obj/item/clothing/mask/cigarette/cigar/havana
diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm
index 00c619da8353..b1dfb479b66c 100644
--- a/code/game/objects/items/toys.dm
+++ b/code/game/objects/items/toys.dm
@@ -562,7 +562,6 @@
var/datum/fakeDevil/devil = new
var/list/messages = list()
messages += "Some fun facts about: [devil.truename]"
- messages += "[GLOB.lawlorify[LORE][devil.bane]]"
messages += "[GLOB.lawlorify[LORE][devil.obligation]]"
messages += "[GLOB.lawlorify[LORE][devil.ban]]"
messages += "[GLOB.lawlorify[LORE][devil.banish]]"
@@ -1404,7 +1403,7 @@
say(message, language)
return NOPASS
-/obj/item/toy/dummy/GetVoice()
+/obj/item/toy/dummy/GetVoice(if_no_voice = "Unknown")
return doll_name
/obj/item/toy/seashell
diff --git a/code/game/objects/structures/barsigns.dm b/code/game/objects/structures/barsigns.dm
index 65d83e9ce406..e9a4b17a8dbb 100644
--- a/code/game/objects/structures/barsigns.dm
+++ b/code/game/objects/structures/barsigns.dm
@@ -20,7 +20,14 @@
if(!istype(sign))
return
- icon_state = sign.icon
+ // [CELADON-ADD] - CELADON_BARSIGNS
+ icon_state = sign.icon_state
+
+ if(sign.icon_state == "cyberslyph")
+ icon = 'mod_celadon/barsigns/icons/barsigns96x96.dmi'
+ else
+ icon = 'mod_celadon/barsigns/icons/barsigns.dmi'
+ // [/CELADON-ADD]
if(sign.name)
name = "[initial(name)] ([sign.name])"
diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm
index 76b3fb7a5989..045bf39ae9b6 100644
--- a/code/game/objects/structures/beds_chairs/chair.dm
+++ b/code/game/objects/structures/beds_chairs/chair.dm
@@ -355,3 +355,12 @@
custom_materials = list(/datum/material/plastic = 2000)
break_chance = 25
origin_type = /obj/structure/chair/plastic
+
+/obj/structure/chair/handrail
+ name = "handrail"
+ icon = 'icons/obj/structures/handrail.dmi'
+ icon_state = "handrail"
+ desc = "A safety railing with buckles to secure yourself to when floor isn't stable enough."
+ item_chair = null
+ buildstackamount = 4
+ buildstacktype = /obj/item/stack/rods
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
index a11e647a706d..f3aca3e96a98 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
@@ -5,11 +5,9 @@
/obj/structure/closet/secure_closet/engineering_chief/PopulateContents()
..()
- //WS Begin
new /obj/item/clothing/head/beret/ce(src) //Berets
new /obj/item/clothing/under/rank/command(src) //Better command uniforms
new /obj/item/stack/tape/industrial/pro(src) //Better tape
- //WS End
new /obj/item/clothing/neck/cloak/ce(src)
new /obj/item/clothing/under/rank/engineering/chief_engineer(src)
new /obj/item/clothing/under/rank/engineering/chief_engineer/skirt(src)
@@ -40,9 +38,7 @@
/obj/structure/closet/secure_closet/engineering_electrical/PopulateContents()
..()
var/static/items_inside = list(
- //WS Begin
/obj/item/stack/tape/industrial/electrical = 1, // Better tape
- //WS End
/obj/item/clothing/gloves/color/yellow = 2,
/obj/item/storage/toolbox/electrical = 3,
/obj/item/electronics/apc = 3,
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
index cfdcca348b14..6c01be326e7a 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
@@ -79,13 +79,11 @@
/obj/structure/closet/secure_closet/CMO/PopulateContents()
..()
- //WS Begin
new /obj/item/storage/belt/medical(src) //Gives the CMO a belt
new /obj/item/storage/bag/medical(src) //Medibags
new /obj/item/clothing/head/beret/cmo(src) //Berets
new /obj/item/clothing/under/rank/command(src) //Better command uniforms
new /obj/item/storage/box/hypospray/CMO(src) //Hypo mk. 2s
- //WS End
new /obj/item/clothing/neck/cloak/cmo(src)
new /obj/item/clothing/suit/bio_suit/cmo(src)
new /obj/item/clothing/head/bio_hood/cmo(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/syndicate.dm b/code/game/objects/structures/crates_lockers/closets/syndicate.dm
index ee9a29945aa0..fc0aae860782 100644
--- a/code/game/objects/structures/crates_lockers/closets/syndicate.dm
+++ b/code/game/objects/structures/crates_lockers/closets/syndicate.dm
@@ -105,7 +105,7 @@
/obj/item/stack/sheet/mineral/plasma,
/obj/item/stack/sheet/mineral/uranium,
/obj/item/stack/sheet/mineral/diamond,
- /obj/item/stack/sheet/mineral/bananium,
+ /obj/item/stack/sheet/mineral/hidden/hellstone,
/obj/item/stack/sheet/plasteel,
/obj/item/stack/sheet/mineral/titanium,
/obj/item/stack/sheet/mineral/plastitanium,
diff --git a/code/game/objects/structures/door_assembly_types.dm b/code/game/objects/structures/door_assembly_types.dm
index 2558993a5278..d2bcf77cfda7 100644
--- a/code/game/objects/structures/door_assembly_types.dm
+++ b/code/game/objects/structures/door_assembly_types.dm
@@ -214,14 +214,6 @@
mineral = "plasma"
glass_type = /obj/machinery/door/airlock/plasma/glass
-/obj/structure/door_assembly/door_assembly_bananium
- name = "bananium airlock assembly"
- desc = "Honk."
- icon = 'icons/obj/doors/airlocks/station/bananium.dmi'
- base_name = "bananium airlock"
- airlock_type = /obj/machinery/door/airlock/bananium
- mineral = "bananium"
- glass_type = /obj/machinery/door/airlock/bananium/glass
/obj/structure/door_assembly/door_assembly_sandstone
name = "sandstone airlock assembly"
diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm
index a0097504c1d3..d5a8c3e496c1 100644
--- a/code/game/objects/structures/false_walls.dm
+++ b/code/game/objects/structures/false_walls.dm
@@ -269,19 +269,6 @@
if(exposed_temperature > 300)
burnbabyburn()
-/obj/structure/falsewall/bananium
- name = "bananium wall"
- desc = "A wall with bananium plating. Honk!"
- icon = 'icons/turf/walls/bananium_wall.dmi'
- icon_state = "bananium_wall-0"
- base_icon_state = "bananium_wall"
- mineral = /obj/item/stack/sheet/mineral/bananium
- walltype = /turf/closed/wall/mineral/bananium
- smoothing_flags = SMOOTH_BITMASK
- smoothing_groups = list(SMOOTH_GROUP_WALLS, SMOOTH_GROUP_BANANIUM_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_BANANIUM_WALLS)
-
-
/obj/structure/falsewall/sandstone
name = "sandstone wall"
desc = "A wall with sandstone plating. Rough."
diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm
index 0fca2bcca6ee..746d452e7f38 100644
--- a/code/game/objects/structures/flora.dm
+++ b/code/game/objects/structures/flora.dm
@@ -38,7 +38,10 @@
user.visible_message("[user] begins to cut down [src] with [W].","You begin to cut down [src] with [W].", "You hear the sound of sawing.")
if(do_after(user, 1000/W.force, target = src)) //5 seconds with 20 force, 8 seconds with a hatchet, 20 seconds with a shard.
user.visible_message("[user] fells [src] with the [W].","You fell [src] with the [W].", "You hear the sound of a tree falling.")
- playsound(get_turf(src), 'sound/effects/meteorimpact.ogg', 100 , FALSE, FALSE)
+ // [CELADON-EDIT] - CELADON_QOL
+ // playsound(get_turf(src), 'sound/effects/meteorimpact.ogg', 100 , FALSE, FALSE) // CELADON-EDIT - ORIGINAL
+ playsound(get_turf(src), 'mod_celadon/sound/zvuk-padayuschego-dereva.ogg', 100 , FALSE, FALSE)
+ // [/CELADON-EDIT]
user.log_message("cut down [src] at [AREACOORD(src)]", LOG_ATTACK)
for(var/i=1 to log_amount)
new /obj/item/grown/log/tree(get_turf(src))
@@ -380,14 +383,20 @@
/obj/item/kirbyplants/random/Initialize()
. = ..()
- icon = 'icons/obj/flora/plants.dmi'
+ // [CELADON-EDIT] - CELADON_FLORA
+ // icon = 'icons/obj/flora/plants.dmi' // CELADON-EDIT - ORIGINAL
+ icon = 'mod_celadon/flora/icons/plants.dmi'
+ // [/CELADON-EDIT]
if(!states)
generate_states()
icon_state = pick(states)
/obj/item/kirbyplants/random/proc/generate_states()
states = list()
- for(var/i in 1 to 25)
+ // [CELADON-EDIT] - CELADON_FLORA
+ // for(var/i in 1 to 25) // CELADON-EDIT - ORIGINAL
+ for(var/i in 1 to 43)
+ // [/CELADON-EDIT]
var/number
if(i < 10)
number = "0[i]"
diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm
index 25822d69ff00..6463282eb6df 100644
--- a/code/game/objects/structures/girders.dm
+++ b/code/game/objects/structures/girders.dm
@@ -364,7 +364,7 @@
add_fingerprint(user)
if(istype(W, /obj/item/melee/cultblade/dagger) && iscultist(user)) //Cultists can demolish cult girders instantly with their tomes
user.visible_message("[user] strikes [src] with [W]!", "You demolish [src].")
- new /obj/item/stack/sheet/runed_metal(drop_location(), 1)
+ new /obj/item/stack/sheet/mineral/hidden/hellstone(drop_location(), 1)
qdel(src)
else if(W.tool_behaviour == TOOL_WELDER)
@@ -374,19 +374,19 @@
to_chat(user, "You start slicing apart the girder...")
if(W.use_tool(src, user, 40, volume=50))
to_chat(user, "You slice apart the girder.")
- var/obj/item/stack/sheet/runed_metal/R = new(drop_location(), 1)
+ var/obj/item/stack/sheet/mineral/hidden/hellstone/R = new(drop_location(), 1)
transfer_fingerprints_to(R)
qdel(src)
else if(istype(W, /obj/item/pickaxe/drill/jackhammer))
to_chat(user, "Your jackhammer smashes through the girder!")
- var/obj/item/stack/sheet/runed_metal/R = new(drop_location(), 2)
+ var/obj/item/stack/sheet/mineral/hidden/hellstone/R = new(drop_location(), 2)
transfer_fingerprints_to(R)
W.play_tool_sound(src)
qdel(src)
- else if(istype(W, /obj/item/stack/sheet/runed_metal))
- var/obj/item/stack/sheet/runed_metal/R = W
+ else if(istype(W, /obj/item/stack/sheet/mineral/hidden/hellstone))
+ var/obj/item/stack/sheet/mineral/hidden/hellstone/R = W
if(R.get_amount() < 1)
to_chat(user, "You need at least one sheet of runed metal to construct a runed wall!")
return 0
@@ -408,7 +408,7 @@
/obj/structure/girder/cult/deconstruct(disassembled = TRUE)
if(!(flags_1 & NODECONSTRUCT_1))
- new /obj/item/stack/sheet/runed_metal(drop_location(), 1)
+ new /obj/item/stack/sheet/mineral/hidden/hellstone(drop_location(), 1)
qdel(src)
/obj/structure/girder/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd)
diff --git a/code/game/objects/structures/handrail.dm b/code/game/objects/structures/handrail.dm
new file mode 100644
index 000000000000..e06b3267c637
--- /dev/null
+++ b/code/game/objects/structures/handrail.dm
@@ -0,0 +1,8 @@
+/obj/structure/handrail
+ name = "handrail"
+ icon = 'icons/obj/structures/handrail.dmi'
+ icon_state = "handrail"
+ desc = "A safety railing with buckles to secure yourself to when floor isn't stable enough."
+ density = FALSE
+ anchored = TRUE
+ can_buckle = TRUE
diff --git a/code/game/objects/structures/icemoon/cave_entrance.dm b/code/game/objects/structures/icemoon/cave_entrance.dm
index 07ecef04afac..d1fc91c8e596 100644
--- a/code/game/objects/structures/icemoon/cave_entrance.dm
+++ b/code/game/objects/structures/icemoon/cave_entrance.dm
@@ -5,7 +5,6 @@ GLOBAL_LIST_INIT(ore_probability, list(
/obj/item/stack/ore/silver = 50,
/obj/item/stack/ore/gold = 50,
/obj/item/stack/ore/diamond = 25,
- /obj/item/stack/ore/bananium = 5,
/obj/item/stack/ore/titanium = 75,
/obj/item/pickaxe/diamond = 15,
/obj/item/borg/upgrade/modkit/cooldown = 5,
@@ -258,8 +257,7 @@ GLOBAL_LIST_INIT(ore_probability, list(
new /mob/living/simple_animal/hostile/clown/fleshclown(loc)
if(prob(25))//you lost
new /obj/item/circlegame(loc)
- new /obj/item/stack/sheet/mineral/bananium(loc)
- new /turf/open/floor/mineral/bananium(loc)
+ new /obj/item/stack/sheet/mineral/hidden/hellstone(loc)
if(2)//basic demonic incursion
visible_message("You glimpse an indescribable abyss in the portal. Horrifying monsters appear in a gout of flame.")
playsound(loc,'sound/hallucinations/wail.ogg', 200, FALSE, 50, TRUE, TRUE)
@@ -618,19 +616,19 @@ GLOBAL_LIST_INIT(ore_probability, list(
visible_message("You catch a brief glimpse of a vast production complex. One of the assembly lines outputs through the portal!")
playsound(loc,'sound/ambience/antag/clockcultalr.ogg', 100, FALSE, 50, TRUE, TRUE)
if(prob(45))
- new /obj/item/stack/sheet/mineral/adamantine/ten(loc)
- new /obj/item/stack/sheet/mineral/runite/ten(loc)
- new /obj/item/stack/sheet/mineral/mythril/ten(loc)
+ new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc)
+ new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc)
+ new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc)
new /mob/living/simple_animal/hostile/hivebot(loc)
if(prob(35))
- new /obj/item/stack/sheet/mineral/adamantine/ten(loc)
- new /obj/item/stack/sheet/mineral/runite/ten(loc)
- new /obj/item/stack/sheet/mineral/mythril/ten(loc)
+ new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc)
+ new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc)
+ new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc)
new /mob/living/simple_animal/hostile/hivebot(loc)
if(prob(25))
- new /obj/item/stack/sheet/mineral/adamantine/ten(loc)
- new /obj/item/stack/sheet/mineral/runite/ten(loc)
- new /obj/item/stack/sheet/mineral/mythril/ten(loc)
+ new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc)
+ new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc)
+ new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc)
new /mob/living/simple_animal/hostile/hivebot/strong(loc)
if(prob(35))
new /obj/item/stack/sheet/mineral/silver/twenty(loc)
@@ -665,9 +663,9 @@ GLOBAL_LIST_INIT(ore_probability, list(
new /obj/item/circuitboard/machine/ore_silo(loc)
new /mob/living/simple_animal/hostile/hivebot/mechanic(loc)
if(prob(35))
- new /obj/item/stack/sheet/mineral/adamantine/ten(loc)
- new /obj/item/stack/sheet/mineral/runite/ten(loc)
- new /obj/item/stack/sheet/mineral/mythril/ten(loc)
+ new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc)
+ new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc)
+ new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc)
new /mob/living/simple_animal/hostile/hivebot/strong(loc)
if(prob(35))
new /obj/item/circuitboard/machine/medipen_refiller(loc)
@@ -838,7 +836,7 @@ GLOBAL_LIST_INIT(ore_probability, list(
new /obj/item/bedsheet/cult(loc)
new /mob/living/simple_animal/hostile/construct/wraith/hostile(loc)
if(prob(50))
- new /obj/item/stack/sheet/runed_metal/ten(loc)
+ new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc)
if(prob(35))
new /obj/item/sharpener/cult(loc)
new /mob/living/simple_animal/hostile/construct/artificer/hostile(loc)
diff --git a/code/game/objects/structures/petrified_statue.dm b/code/game/objects/structures/petrified_statue.dm
index c8b804469255..1be0a2517bd6 100644
--- a/code/game/objects/structures/petrified_statue.dm
+++ b/code/game/objects/structures/petrified_statue.dm
@@ -58,6 +58,9 @@
if(petrified_mob)
petrified_mob.status_flags &= ~GODMODE
+ if(ishuman(petrified_mob))
+ var/mob/living/carbon/human/H = petrified_mob
+ H.bleedsuppress = FALSE
petrified_mob.forceMove(loc)
REMOVE_TRAIT(petrified_mob, TRAIT_MUTE, STATUE_MUTE)
petrified_mob.take_overall_damage((petrified_mob.health - obj_integrity + 100)) //any new damage the statue incurred is transfered to the mob
@@ -80,7 +83,7 @@
return 0
var/obj/structure/statue/petrified/S = new(loc, src, statue_timer)
S.name = "statue of [name]"
- bleedsuppress = 1
+ bleedsuppress = TRUE
S.copy_overlays(src)
var/newcolor = list(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0))
S.add_atom_colour(newcolor, FIXED_COLOUR_PRIORITY)
diff --git a/code/game/objects/structures/spawner.dm b/code/game/objects/structures/spawner.dm
index 9773221f0c22..c3c8e07cc3ab 100644
--- a/code/game/objects/structures/spawner.dm
+++ b/code/game/objects/structures/spawner.dm
@@ -5,7 +5,7 @@ GLOBAL_LIST_INIT(astroloot, list(
/obj/item/stack/ore/silver = 50,
/obj/item/stack/ore/gold = 50,
/obj/item/stack/ore/diamond = 25,
- /obj/item/stack/ore/bananium = 5,
+ /obj/item/stack/ore/hellstone = 5,
/obj/item/stack/ore/titanium = 75,
/obj/item/pickaxe/diamond = 15,
/obj/item/borg/upgrade/modkit/cooldown = 5,
diff --git a/code/game/objects/structures/statues.dm b/code/game/objects/structures/statues.dm
index 642c2c2efdd4..9f51ba34476a 100644
--- a/code/game/objects/structures/statues.dm
+++ b/code/game/objects/structures/statues.dm
@@ -224,7 +224,7 @@
/obj/structure/statue/bananium
max_integrity = 300
- material_drop_type = /obj/item/stack/sheet/mineral/bananium
+ material_drop_type = /obj/item/stack/sheet/mineral/hidden/hellstone
impressiveness = 50
desc = "A bananium statue with a small engraving:'HOOOOOOONK'."
var/spam_flag = 0
diff --git a/code/game/say.dm b/code/game/say.dm
index c3c8dca852f8..2d53eea65e75 100644
--- a/code/game/say.dm
+++ b/code/game/say.dm
@@ -52,10 +52,28 @@ GLOBAL_LIST_INIT(freqcolor, list())
//Radio freq/name display
var/freqpart = radio_freq ? "\[[get_radio_name(radio_freq)]\] " : ""
//Speaker name
- var/namepart = "[speaker.GetVoice()][speaker.get_alt_name()]"
- if(face_name && ishuman(speaker))
- var/mob/living/carbon/human/H = speaker
- namepart = "[H.get_face_name()]" //So "fake" speaking like in hallucinations does not give the speaker away if disguised
+
+ var/namepart = speaker.GetVoice()
+ var/atom/movable/reliable_narrator = speaker
+ if(istype(speaker, /atom/movable/virtualspeaker)) //ugh
+ var/atom/movable/virtualspeaker/fakespeaker = speaker
+ reliable_narrator = fakespeaker.source
+ if(ishuman(reliable_narrator))
+ //So "fake" speaking like in hallucinations does not give the speaker away if disguised
+ if(face_name)
+ var/mob/living/carbon/human/human_narrator = reliable_narrator
+ namepart = human_narrator.name
+ //otherwise, do guestbook handling
+ else if(ismob(src))
+ var/mob/mob_source = src
+ if(mob_source.mind?.guestbook)
+ var/known_name = mob_source.mind.guestbook.get_known_name(src, reliable_narrator, namepart)
+ if(known_name)
+ namepart = "[known_name]"
+ else
+ var/mob/living/carbon/human/human_narrator = reliable_narrator
+ namepart = "[human_narrator.get_generic_name(prefixed = TRUE, lowercase = FALSE)]"
+
//End name span.
var/endspanpart = ""
@@ -67,9 +85,9 @@ GLOBAL_LIST_INIT(freqcolor, list())
else
messagepart = lang_treat(speaker, message_language, raw_message, spans, message_mods)
- var/datum/language/D = GLOB.language_datum_instances[message_language]
- if(istype(D) && D.display_icon(src))
- languageicon = "[D.get_icon()] "
+ var/datum/language/language = GLOB.language_datum_instances[message_language]
+ if(istype(language) && language.display_icon(src))
+ languageicon = "[language.get_icon()] "
messagepart = " [say_emphasis(messagepart)]"
@@ -177,7 +195,7 @@ GLOBAL_LIST_INIT(freqcolor, list())
return "2"
return "0"
-/atom/movable/proc/GetVoice()
+/atom/movable/proc/GetVoice(if_no_voice = "Unknown")
return "[src]" //Returns the atom's name, prepended with 'The' if it's not a proper noun
/atom/movable/proc/IsVocal()
diff --git a/code/game/turfs/closed/_closed.dm b/code/game/turfs/closed/_closed.dm
index cfede10541d4..4866dbfb3f60 100644
--- a/code/game/turfs/closed/_closed.dm
+++ b/code/game/turfs/closed/_closed.dm
@@ -86,47 +86,6 @@
smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS)
canSmoothWith = list(SMOOTH_GROUP_CLOSED_TURFS)
-/turf/closed/indestructible/riveted/supermatter
- name = "wall"
- desc = "A wall made out of a strange metal. The squares on it pulse in a predictable pattern."
- icon = 'icons/turf/walls/bananium_wall.dmi'
- icon_state = "bananium_wall-0"
- base_icon_state = "bananium_wall"
- smoothing_flags = SMOOTH_BITMASK
- smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_BANANIUM_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_BANANIUM_WALLS)
-
-/turf/closed/indestructible/riveted/supermatter/Bumped(atom/movable/AM)
- if(isliving(AM))
- AM.visible_message("\The [AM] slams into \the [src] inducing a resonance... [AM.p_their()] body starts to glow and burst into flames before flashing into dust!",\
- "You slam into \the [src] as your ears are filled with unearthly ringing. Your last thought is \"Oh, fuck.\"",\
- "You hear an unearthly noise as a wave of heat washes over you.")
- else if(isobj(AM) && !iseffect(AM))
- AM.visible_message("\The [AM] smacks into \the [src] and rapidly flashes to ash.", null,\
- "You hear a loud crack as you are washed with a wave of heat.")
- else
- return
-
- playsound(get_turf(src), 'sound/effects/supermatter.ogg', 50, TRUE)
- Consume(AM)
-
-/turf/closed/indestructible/riveted/supermatter/proc/Consume(atom/movable/AM)
- if(isliving(AM))
- var/mob/living/user = AM
- if(user.status_flags & GODMODE)
- return
- message_admins("[src] has consumed [key_name_admin(user)] [ADMIN_JMP(src)].")
- investigate_log("has consumed [key_name(user)].", INVESTIGATE_SUPERMATTER)
- user.dust(force = TRUE)
- else if(isobj(AM))
- if(!iseffect(AM))
- var/suspicion = ""
- if(AM.fingerprintslast)
- suspicion = "last touched by [AM.fingerprintslast]"
- message_admins("[src] has consumed [AM], [suspicion] [ADMIN_JMP(src)].")
- investigate_log("has consumed [AM] - [suspicion].", INVESTIGATE_SUPERMATTER)
- qdel(AM)
-
/turf/closed/indestructible/syndicate
icon = 'icons/turf/walls/plastitanium_wall.dmi'
icon_state = "plastitanium_wall-0"
@@ -280,7 +239,7 @@
return TRUE
/turf/closed/indestructible/riveted/boss
- name = "necropolis wall"
+ name = "thick stone wall"
desc = "A thick, seemingly indestructible stone wall."
icon = 'icons/turf/walls/boss_wall.dmi'
icon_state = "boss_wall-0"
diff --git a/code/game/turfs/closed/minerals.dm b/code/game/turfs/closed/minerals.dm
index ab46afa7e884..370afeaeedf2 100644
--- a/code/game/turfs/closed/minerals.dm
+++ b/code/game/turfs/closed/minerals.dm
@@ -281,14 +281,13 @@
light_range = 2
light_power = 1
-
/turf/closed/mineral/random/snow/underground
baseturfs = /turf/open/floor/plating/asteroid/snow/icemoon
// abundant ore
mineralChance = 10
mineralSpawnChanceList = list(
/obj/item/stack/ore/uranium = 10, /obj/item/stack/ore/diamond = 4, /obj/item/stack/ore/gold = 20, /obj/item/stack/ore/titanium = 22,
- /obj/item/stack/ore/silver = 24, /obj/item/stack/ore/plasma = 20, /obj/item/stack/ore/iron = 20, /obj/item/stack/ore/bananium = 1,
+ /obj/item/stack/ore/silver = 24, /obj/item/stack/ore/plasma = 20, /obj/item/stack/ore/iron = 20,
/turf/closed/mineral/gibtonite/ice/icemoon = 8, /obj/item/stack/ore/bluespace_crystal = 2)
/turf/closed/mineral/random/snow/high_chance
@@ -404,11 +403,6 @@
initial_gas_mix = FROZEN_ATMOS
defer_change = TRUE
-/turf/closed/mineral/bananium
- mineralType = /obj/item/stack/ore/bananium
- mineralAmt = 3
- scan_state = "rock_Bananium"
-
/turf/closed/mineral/bscrystal
mineralType = /obj/item/stack/ore/bluespace_crystal
mineralAmt = 1
@@ -650,10 +644,7 @@
H.mind.adjust_experience(/datum/skill/mining, 100) //yay!
/turf/closed/mineral/strong/proc/drop_ores()
- if(prob(10))
- new /obj/item/stack/sheet/mineral/mythril(src, 5)
- else
- new /obj/item/stack/sheet/mineral/adamantine(src, 5)
+ new /obj/item/stack/sheet/mineral/hidden/hellstone(src, 5)
/turf/closed/mineral/strong/acid_melt()
return
diff --git a/code/game/turfs/closed/wall/mineral_walls.dm b/code/game/turfs/closed/wall/mineral_walls.dm
index 720a95afd0e1..89a00d04c142 100644
--- a/code/game/turfs/closed/wall/mineral_walls.dm
+++ b/code/game/turfs/closed/wall/mineral_walls.dm
@@ -68,24 +68,6 @@
icon_state = "diamond_wall-255"
smoothing_flags = SMOOTH_BITMASK | SMOOTH_DIAGONAL_CORNERS
-/turf/closed/wall/mineral/bananium
- name = "bananium wall"
- desc = "A wall with bananium plating. Honk!"
- icon = 'icons/turf/walls/bananium_wall.dmi'
- icon_state = "bananium_wall-0"
- base_icon_state = "bananium_wall"
- sheet_type = /obj/item/stack/sheet/mineral/bananium
- smoothing_flags = SMOOTH_BITMASK | SMOOTH_CONNECTORS
- smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_BANANIUM_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_BANANIUM_WALLS, SMOOTH_GROUP_WALLS,SMOOTH_GROUP_AIRLOCK)
- connector_icon = 'icons/turf/connectors/bananium_wall_connector.dmi'
- connector_icon_state = "bananium_wall_connector"
- no_connector_typecache = list(/turf/closed/wall/mineral/bananium, /obj/structure/falsewall/bananium)
-
-/turf/closed/wall/mineral_bananium/yesdiag
- icon_state = "bananium_wall-255"
- smoothing_flags = SMOOTH_BITMASK | SMOOTH_DIAGONAL_CORNERS
-
/turf/closed/wall/mineral/sandstone
name = "sandstone wall"
desc = "A wall with sandstone plating. Rough."
diff --git a/code/game/turfs/closed/wall/misc_walls.dm b/code/game/turfs/closed/wall/misc_walls.dm
index e6e5c8f0c557..20fcb2cb9f57 100644
--- a/code/game/turfs/closed/wall/misc_walls.dm
+++ b/code/game/turfs/closed/wall/misc_walls.dm
@@ -6,7 +6,7 @@
base_icon_state = "cult_wall"
smoothing_flags = SMOOTH_BITMASK
canSmoothWith = null
- sheet_type = /obj/item/stack/sheet/runed_metal
+ sheet_type = /obj/item/stack/sheet/mineral/hidden/hellstone
sheet_amount = 1
girder_type = /obj/structure/girder/cult
diff --git a/code/game/turfs/open/floor/mineral_floor.dm b/code/game/turfs/open/floor/mineral_floor.dm
index 476a69fa468d..5d53a162b087 100644
--- a/code/game/turfs/open/floor/mineral_floor.dm
+++ b/code/game/turfs/open/floor/mineral_floor.dm
@@ -172,48 +172,6 @@
/turf/open/floor/mineral/plastitanium/red/brig
name = "brig floor"
-//BANANIUM
-
-/turf/open/floor/mineral/bananium
- name = "bananium floor"
- icon_state = "bananium"
- floor_tile = /obj/item/stack/tile/mineral/bananium
- icons = list("bananium","bananium_dam")
- var/spam_flag = 0
-
-/turf/open/floor/mineral/bananium/Entered(atom/movable/AM)
- .=..()
- if(!.)
- if(isliving(AM))
- squeak()
-
-/turf/open/floor/mineral/bananium/attackby(obj/item/W, mob/user, params)
- .=..()
- if(!.)
- honk()
-
-/turf/open/floor/mineral/bananium/attack_hand(mob/user)
- .=..()
- if(!.)
- honk()
-
-/turf/open/floor/mineral/bananium/attack_paw(mob/user)
- .=..()
- if(!.)
- honk()
-
-/turf/open/floor/mineral/bananium/proc/honk()
- if(spam_flag < world.time)
- playsound(src, 'sound/items/bikehorn.ogg', 50, TRUE)
- spam_flag = world.time + 20
-
-/turf/open/floor/mineral/bananium/proc/squeak()
- if(spam_flag < world.time)
- playsound(src, "clownstep", 50, TRUE)
- spam_flag = world.time + 10
-
-/turf/open/floor/mineral/bananium/airless
- initial_gas_mix = AIRLESS_ATMOS
//DIAMOND
diff --git a/code/game/turfs/open/lava.dm b/code/game/turfs/open/lava.dm
index 99f1d590c05a..eb2132940bd9 100644
--- a/code/game/turfs/open/lava.dm
+++ b/code/game/turfs/open/lava.dm
@@ -18,6 +18,8 @@
heavyfootstep = FOOTSTEP_LAVA
var/particle_emitter = /obj/effect/particle_emitter/lava
+ /// Whether the lava has been dug with hellstone found successfully
+ var/is_mined = FALSE
/turf/open/lava/Initialize(mapload)
. = ..()
@@ -100,10 +102,10 @@
/turf/open/lava/TakeTemperature(temp)
-/turf/open/lava/attackby(obj/item/C, mob/user, params)
+/turf/open/lava/attackby(obj/item/attacking_item, mob/user, params)
..()
- if(istype(C, /obj/item/stack/rods/lava))
- var/obj/item/stack/rods/lava/R = C
+ if(istype(attacking_item, /obj/item/stack/rods/lava))
+ var/obj/item/stack/rods/lava/R = attacking_item
var/obj/structure/lattice/lava/H = locate(/obj/structure/lattice/lava, src)
if(H)
to_chat(user, "There is already a lattice here!")
@@ -115,6 +117,19 @@
else
to_chat(user, "You need one rod to build a heatproof lattice.")
return
+ if(attacking_item.tool_behaviour == TOOL_MINING && (attacking_item.custom_materials[SSmaterials.GetMaterialRef(/datum/material/diamond)]))
+ if(is_mined)
+ to_chat(user, span_notice("This has already been cleared out of hellstone..."))
+ return FALSE
+ to_chat(user, span_notice("You start parting away [src]..."))
+ if(attacking_item.use_tool(src, user, 175, volume=30))
+ to_chat(user, span_notice("You part away [src]."))
+ playsound(src, 'sound/effects/break_stone.ogg', 30, TRUE)
+ if (prob(10))
+ new /obj/item/stack/ore/hellstone(src)
+ is_mined = TRUE
+ return TRUE
+ return FALSE
/turf/open/lava/proc/is_safe()
//if anything matching this typecache is found in the lava, we don't burn things
diff --git a/code/modules/NTNet/relays.dm b/code/modules/NTNet/relays.dm
index 9a1b01403eda..f161eced8060 100644
--- a/code/modules/NTNet/relays.dm
+++ b/code/modules/NTNet/relays.dm
@@ -3,8 +3,8 @@
name = "NTNet Quantum Relay"
desc = "A very complex router and transmitter capable of connecting electronic devices together. Looks fragile."
use_power = ACTIVE_POWER_USE
- active_power_usage = 10000 //10kW, apropriate for machine that keeps massive cross-Zlevel wireless network operational. Used to be 20 but that actually drained the smes one round
- idle_power_usage = 100
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_EXTREME //Since NTnet is barely used, this has been lowered by half.
icon = 'icons/obj/machines/telecomms.dmi'
icon_state = "bus"
density = TRUE
@@ -64,9 +64,9 @@
/obj/machinery/ntnet_relay/process()
if(is_operational)
- use_power = ACTIVE_POWER_USE
+ set_active_power()
else
- use_power = IDLE_POWER_USE
+ set_idle_power()
update_appearance()
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index 82cb857576c1..7b147385c556 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -39,7 +39,7 @@
return
var/body = "Options for [M.key]"
- body += "Options panel for [M]"
+ body += "Options panel for [M.real_name]"
if(M.client)
body += " played by [M.client] "
body += "[M.client.holder ? M.client.holder.rank : "Player"]"
@@ -215,7 +215,7 @@
/datum/admins/proc/access_news_network() //MARKER
- set category = "Admin.Events"
+ set category = "Event"
set name = "Access Newscaster Network"
set desc = "Allows you to view, add and edit news feeds."
@@ -700,7 +700,7 @@
////////////////////////////////////////////////////////////////////////////////////////////////ADMIN HELPER PROCS
/datum/admins/proc/spawn_atom(object as text)
- set category = "Debug"
+ set category = "Event.Spawning"
set desc = "(atom path) Spawn an atom"
set name = "Spawn"
@@ -729,9 +729,9 @@
SSblackbox.record_feedback("tally", "admin_verb", 1, "Spawn Atom") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/datum/admins/proc/podspawn_atom(object as text)
- set category = "Debug"
+ set category = "Event.Spawning"
set desc = "(atom path) Spawn an atom via supply drop"
- set name = "Podspawn"
+ set name = "Supply drop spawn"
if(!check_rights(R_SPAWN))
return
@@ -753,7 +753,7 @@
SSblackbox.record_feedback("tally", "admin_verb", 1, "Podspawn Atom") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/datum/admins/proc/spawn_cargo(object as text)
- set category = "Debug"
+ set category = "Event.Spawning"
set desc = "(atom path) Spawn a cargo crate"
set name = "Spawn Cargo"
@@ -1018,3 +1018,14 @@
dat += "Disable footsteps: [SSlag_switch.measures[DISABLE_FOOTSTEPS] ? "On" : "Off"] - trait applies to character
"
dat += ""
usr << browse(dat.Join(), "window=lag_switch_panel;size=420x480")
+
+/datum/admins/proc/view_manifest()
+ set category = "Admin.Game"
+ set name = "View Manifest"
+ set desc = "Opens the Manifest UI."
+
+ if(!GLOB.crew_manifest_tgui)
+ GLOB.crew_manifest_tgui = new /datum/crew_manifest(src)
+
+ if(ismob(usr))
+ GLOB.crew_manifest_tgui.ui_interact(usr)
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index ef2bfae400e4..f4913b6be1e8 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -81,6 +81,7 @@ GLOBAL_PROTECT(admin_verbs_admin)
/client/proc/overmap_datum_token_manager,
/datum/admins/proc/open_borgopanel,
/client/proc/investigate_show, /*various admintools for investigation. Such as a singulo grief-log*/
+ /datum/admins/proc/view_manifest
)
GLOBAL_LIST_INIT(admin_verbs_ban, list(
@@ -121,7 +122,6 @@ GLOBAL_LIST_INIT(admin_verbs_fun, list(
/client/proc/polymorph_all,
/client/proc/show_tip,
/client/proc/smite,
- /client/proc/spawn_ruin,
))
GLOBAL_PROTECT(admin_verbs_fun)
GLOBAL_LIST_INIT(admin_verbs_spawn, list(
@@ -130,7 +130,9 @@ GLOBAL_LIST_INIT(admin_verbs_spawn, list(
/datum/admins/proc/spawn_cargo,
/datum/admins/proc/spawn_objasmob,
/datum/admins/proc/beaker_panel,
- /datum/admins/proc/gift
+ /datum/admins/proc/gift,
+ /client/proc/spawn_ruin,
+ /client/proc/spawn_outpost /* Allows admins to spawn a new outpost. */
))
GLOBAL_PROTECT(admin_verbs_spawn)
GLOBAL_LIST_INIT(admin_verbs_server, world.AVerbsServer())
@@ -169,10 +171,13 @@ GLOBAL_PROTECT(admin_verbs_debug)
/client/proc/cmd_display_del_log,
/client/proc/cmd_display_init_log,
/client/proc/cmd_display_overlay_log,
+ /client/proc/cmd_admin_grantfullaccess,
+ /client/proc/cmd_assume_direct_control, //-errorage
+ /client/proc/cmd_give_direct_control,
/client/proc/getserverlogs, /*for accessing server logs*/
/client/proc/getcurrentlogs, /*for accessing server logs for the current round*/
/client/proc/restart_controller,
- /client/proc/enable_debug_verbs,
+ /client/proc/disable_debug_verbs,
/client/proc/callproc,
/client/proc/callproc_datum,
/client/proc/SDQL2_query,
@@ -205,12 +210,16 @@ GLOBAL_PROTECT(admin_verbs_debug)
#endif
/datum/admins/proc/create_or_modify_area,
/datum/admins/proc/open_shuttlepanel, /* Opens shuttle manipulator UI */
- /client/proc/spawn_outpost, /* Allows admins to spawn a new outpost. */
/datum/admins/proc/open_borgopanel,
/datum/admins/proc/overmap_view, /* Opens HTML overmap viewer UI */
/client/proc/toggle_AI_interact, /*toggle admin ability to interact with machines as an AI*/
/client/proc/toggle_cdn,
- /client/proc/check_timer_sources
+ /client/proc/check_timer_sources,
+ /client/proc/air_status, //Air things
+ /client/proc/air_status_loc, //More air things
+ /client/proc/manipulate_organs,
+ /client/proc/set_server_fps, //allows you to set the ticklag.
+ /client/proc/start_singlo,
)
GLOBAL_LIST_INIT(admin_verbs_possess, list(/proc/possess, /proc/release))
GLOBAL_PROTECT(admin_verbs_possess)
@@ -269,10 +278,9 @@ GLOBAL_LIST_INIT(admin_verbs_hideable, list(
/client/proc/Debug2,
/client/proc/reload_admins,
/client/proc/cmd_debug_make_powernets,
- /client/proc/startSinglo,
/client/proc/cmd_debug_mob_lists,
/client/proc/cmd_debug_del_all,
- /client/proc/enable_debug_verbs,
+ /client/proc/disable_debug_verbs,
/proc/possess,
/proc/release,
/client/proc/reload_admins,
@@ -305,7 +313,7 @@ GLOBAL_PROTECT(admin_verbs_hideable)
if(rights & R_SERVER)
add_verb(src, GLOB.admin_verbs_server)
if(rights & R_DEBUG)
- add_verb(src, GLOB.admin_verbs_debug)
+ add_verb(src, list(GLOB.admin_verbs_debug, GLOB.admin_verbs_debug_extra))
if(rights & R_POSSESS)
add_verb(src, GLOB.admin_verbs_possess)
if(rights & R_PERMISSIONS)
@@ -338,7 +346,7 @@ GLOBAL_PROTECT(admin_verbs_hideable)
/client/proc/play_web_sound,
GLOB.admin_verbs_spawn,
/*Debug verbs added by "show debug verbs"*/
- GLOB.admin_verbs_debug_mapping,
+ GLOB.admin_verbs_debug_extra,
/client/proc/disable_debug_verbs,
/client/proc/readmin
))
@@ -505,7 +513,7 @@ GLOBAL_PROTECT(admin_verbs_hideable)
SSblackbox.record_feedback("tally", "admin_verb", 1, "Stealth Mode") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/drop_bomb()
- set category = "Fun"
+ set category = "Event.Fun"
set name = "Drop Bomb"
set desc = "Cause an explosion of varying strength at your location."
@@ -547,7 +555,7 @@ GLOBAL_PROTECT(admin_verbs_hideable)
SSblackbox.record_feedback("tally", "admin_verb", 1, "Drop Bomb") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/drop_dynex_bomb()
- set category = "Fun"
+ set category = "Event.Fun"
set name = "Drop DynEx Bomb"
set desc = "Cause an explosion of varying strength at your location."
@@ -594,7 +602,7 @@ GLOBAL_PROTECT(admin_verbs_hideable)
message_admins("[key_name_admin(usr)] has modified Dynamic Explosion Scale: [ex_scale]")
/client/proc/give_spell(mob/T in GLOB.mob_list)
- set category = "Fun"
+ set category = "Event.Fun"
set name = "Give Spell"
set desc = "Gives a spell to a mob."
@@ -618,7 +626,7 @@ GLOBAL_PROTECT(admin_verbs_hideable)
message_admins("Spells given to mindless mobs will not be transferred in mindswap or cloning!")
/client/proc/remove_spell(mob/T in GLOB.mob_list)
- set category = "Fun"
+ set category = "Event.Fun"
set name = "Remove Spell"
set desc = "Remove a spell from the selected mob."
@@ -631,7 +639,7 @@ GLOBAL_PROTECT(admin_verbs_hideable)
SSblackbox.record_feedback("tally", "admin_verb", 1, "Remove Spell") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/give_disease(mob/living/T in GLOB.mob_living_list)
- set category = "Fun"
+ set category = "Event.Fun"
set name = "Give Disease"
set desc = "Gives a Disease to a mob."
if(!istype(T))
@@ -646,7 +654,7 @@ GLOBAL_PROTECT(admin_verbs_hideable)
message_admins("[key_name_admin(usr)] gave [key_name_admin(T)] the disease [D].")
/client/proc/object_say(obj/O in world)
- set category = "Admin.Events"
+ set category = "Event"
set name = "OSay"
set desc = "Makes an object say something."
var/message = input(usr, "What do you want the message to be?", "Make Sound") as text | null
@@ -656,9 +664,10 @@ GLOBAL_PROTECT(admin_verbs_hideable)
log_admin("[key_name(usr)] made [O] at [AREACOORD(O)] say \"[message]\"")
message_admins("[key_name_admin(usr)] made [O] at [AREACOORD(O)]. say \"[message]\"")
SSblackbox.record_feedback("tally", "admin_verb", 1, "Object Say") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+
/client/proc/togglebuildmodeself()
set name = "Toggle Build Mode Self"
- set category = "Admin.Events"
+ set category = "Event"
if (!(holder.rank.rights & R_BUILD))
return
if(src.mob)
diff --git a/code/modules/admin/create_mob.dm b/code/modules/admin/create_mob.dm
index 61d9d2677096..6757eec255c5 100644
--- a/code/modules/admin/create_mob.dm
+++ b/code/modules/admin/create_mob.dm
@@ -30,6 +30,7 @@
H.facial_hair_color = H.hair_color
H.eye_color = random_eye_color()
H.dna.blood_type = random_blood_type()
+ H.generic_adjective = pick_species_adjective(H)
// Mutant randomizing, doesn't affect the mob appearance unless it's the specific mutant.
H.dna.features["mcolor"] = random_short_color()
diff --git a/code/modules/admin/verbs/anonymousnames.dm b/code/modules/admin/verbs/anonymousnames.dm
index 62c48149af52..c880a74ba6f6 100644
--- a/code/modules/admin/verbs/anonymousnames.dm
+++ b/code/modules/admin/verbs/anonymousnames.dm
@@ -1,5 +1,5 @@
/client/proc/anon_names()
- set category = "Admin.Events"
+ set category = "Event"
set name = "Setup Anonymous Names"
diff --git a/code/modules/admin/verbs/atmosdebug.dm b/code/modules/admin/verbs/atmosdebug.dm
index 6fc5f8a4c709..56da851fdfd9 100644
--- a/code/modules/admin/verbs/atmosdebug.dm
+++ b/code/modules/admin/verbs/atmosdebug.dm
@@ -19,7 +19,7 @@
return list(y + 1 - min(bounds[2], bounds[4]), -(x - 1 - max(bounds[1], bounds[3])))
/client/proc/check_atmos()
- set category = "Mapping"
+ set category = "Debug.Mapping"
set name = "Check Atmospherics Piping"
if(!check_rights_for(src, R_DEBUG))
to_chat(src, "Only administrators may use this command.", confidential = TRUE)
@@ -54,7 +54,7 @@
return results
/client/proc/check_wiring()
- set category = "Mapping"
+ set category = "Debug.Mapping"
set name = "Check Power"
if(!check_rights_for(src, R_DEBUG))
to_chat(src, "Only administrators may use this command.", confidential = TRUE)
diff --git a/code/modules/admin/verbs/beakerpanel.dm b/code/modules/admin/verbs/beakerpanel.dm
index 1f523c9e4627..3ba2a51b2fe8 100644
--- a/code/modules/admin/verbs/beakerpanel.dm
+++ b/code/modules/admin/verbs/beakerpanel.dm
@@ -61,7 +61,7 @@
return container
/datum/admins/proc/beaker_panel()
- set category = "Admin.Events"
+ set category = "Event.Spawning"
set name = "Spawn reagent container"
if(!check_rights())
return
diff --git a/code/modules/admin/verbs/cinematic.dm b/code/modules/admin/verbs/cinematic.dm
index 722440e11b93..a8549c635966 100644
--- a/code/modules/admin/verbs/cinematic.dm
+++ b/code/modules/admin/verbs/cinematic.dm
@@ -1,6 +1,6 @@
/client/proc/cinematic()
- set name = "cinematic"
- set category = "Fun"
+ set name = "Cinematic"
+ set category = "Event.Fun"
set desc = "Shows a cinematic." // Intended for testing but I thought it might be nice for events on the rare occasion Feel free to comment it out if it's not wanted.
set hidden = TRUE
if(!SSticker)
diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm
index 19ac8a0514d3..ae039c216120 100644
--- a/code/modules/admin/verbs/debug.dm
+++ b/code/modules/admin/verbs/debug.dm
@@ -26,7 +26,7 @@ Because if you select a player mob as owner it tries to do the proc for
But you can call procs that are of type /mob/living/carbon/human/proc/ for that player.
*/
-/client/proc/Cell()
+/client/proc/air_status_loc()
set category = "Debug"
set name = "Air Status in Location"
if(!mob)
@@ -38,7 +38,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
SSblackbox.record_feedback("tally", "admin_verb", 1, "Air Status In Location") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_admin_robotize(mob/M in GLOB.mob_list)
- set category = "Fun"
+ set category = "Event.Fun"
set name = "Make Robot"
if(!SSticker.HasRoundStarted())
@@ -53,7 +53,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
alert("Invalid mob")
/client/proc/cmd_admin_blobize(mob/M in GLOB.mob_list)
- set category = "Fun"
+ set category = "Event.Fun"
set name = "Make Blob"
if(!SSticker.HasRoundStarted())
@@ -68,7 +68,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
/client/proc/cmd_admin_animalize(mob/M in GLOB.mob_list)
- set category = "Fun"
+ set category = "Event.Fun"
set name = "Make Simple Animal"
if(!SSticker.HasRoundStarted())
@@ -88,7 +88,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
/client/proc/makepAI(turf/T in GLOB.mob_list)
- set category = "Fun"
+ set category = "Event.Fun"
set name = "Make pAI"
set desc = "Specify a location to spawn a pAI device, then specify a key to play that pAI"
@@ -121,7 +121,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
SSblackbox.record_feedback("tally", "admin_verb", 1, "Make pAI") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_admin_alienize(mob/M in GLOB.mob_list)
- set category = "Fun"
+ set category = "Event.Fun"
set name = "Make Alien"
if(!SSticker.HasRoundStarted())
@@ -136,7 +136,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
alert("Invalid mob")
/client/proc/cmd_admin_slimeize(mob/M in GLOB.mob_list)
- set category = "Fun"
+ set category = "Event.Fun"
set name = "Make slime"
if(!SSticker.HasRoundStarted())
@@ -228,7 +228,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
message_admins("[key_name_admin(usr)] has granted [M.key] full access.")
/client/proc/cmd_assume_direct_control(mob/M in GLOB.mob_list)
- set category = "Admin.Game"
+ set category = "Debug"
set name = "Assume direct control"
set desc = "Direct intervention"
@@ -249,7 +249,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
SSblackbox.record_feedback("tally", "admin_verb", 1, "Assume Direct Control") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_give_direct_control(mob/M in GLOB.mob_list)
- set category = "Admin.Game"
+ set category = "Debug"
set name = "Give direct control"
if(!M)
@@ -275,7 +275,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
SSblackbox.record_feedback("tally", "admin_verb", 1, "Give Direct Control") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_admin_test_atmos_controllers()
- set category = "Mapping"
+ set category = "Debug.Mapping"
set name = "Test Atmos Monitoring Consoles"
var/list/dat = list()
@@ -311,7 +311,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
popup.open()
/client/proc/cmd_admin_areatest()
- set category = "Mapping"
+ set category = "Debug.Mapping"
set name = "Test Areas"
var/list/dat = list()
@@ -465,12 +465,12 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
/client/proc/cmd_admin_areatest_station()
- set category = "Mapping"
+ set category = "Debug.Mapping"
set name = "Test Areas (STATION Z)"
cmd_admin_areatest(TRUE)
/client/proc/cmd_admin_areatest_all()
- set category = "Mapping"
+ set category = "Debug.Mapping"
set name = "Test Areas (ALL)"
cmd_admin_areatest(FALSE)
@@ -529,8 +529,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
return dresscode
-/client/proc/startSinglo()
-
+/client/proc/start_singlo()
set category = "Debug"
set name = "Start Singularity"
set desc = "Sets up the singularity and all machines to get power flowing through the station"
@@ -692,11 +691,11 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
to_chat(usr, "[template.description]", confidential = TRUE)
/client/proc/fucky_wucky()
- set category = "Debug"
+ set category = "Event.Fun"
set name = "Fucky Wucky"
set desc = "Inform the players that the code monkeys at our headquarters are working very hard to fix this."
- if(!check_rights(R_DEBUG))
+ if(!check_rights(R_FUN))
return
remove_verb(/client/proc/fucky_wucky)
message_admins("[key_name_admin(src)] did a fucky wucky.")
@@ -750,7 +749,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
log_admin("[key_name(src)] pumped a random event.")
/client/proc/start_line_profiling()
- set category = "Profile"
+ set category = "Debug.Profile"
set name = "Start Line Profiling"
set desc = "Starts tracking line by line profiling for code lines that support it"
@@ -761,7 +760,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
log_admin("[key_name(src)] started line by line profiling.")
/client/proc/stop_line_profiling()
- set category = "Profile"
+ set category = "Debug.Profile"
set name = "Stops Line Profiling"
set desc = "Stops tracking line by line profiling for code lines that support it"
@@ -772,7 +771,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
log_admin("[key_name(src)] stopped line by line profiling.")
/client/proc/show_line_profiling()
- set category = "Profile"
+ set category = "Debug.Profile"
set name = "Show Line Profiling"
set desc = "Shows tracked profiling info from code lines that support it"
diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm
index 305cce363c8d..6d8bac8adcfc 100644
--- a/code/modules/admin/verbs/mapping.dm
+++ b/code/modules/admin/verbs/mapping.dm
@@ -19,42 +19,32 @@
//- Identify how hard it is to break into the area and where the weak points are
//- Check if the area has too much empty space. If so, make it smaller and replace the rest with maintenance tunnels.
-GLOBAL_LIST_INIT(admin_verbs_debug_mapping, list(
+GLOBAL_LIST_INIT(admin_verbs_debug_extra, list(
/client/proc/camera_view, //-errorage
- /client/proc/sec_camera_report, //-errorage
- /client/proc/intercom_view, //-errorage
- /client/proc/air_status, //Air things
- /client/proc/Cell, //More air things
/client/proc/check_atmos,
/client/proc/check_wiring,
- /client/proc/count_objects_on_z_level,
- /client/proc/count_objects_all,
- /client/proc/cmd_assume_direct_control, //-errorage
- /client/proc/cmd_give_direct_control,
- /client/proc/startSinglo,
- /client/proc/set_server_fps, //allows you to set the ticklag.
- /client/proc/cmd_admin_grantfullaccess,
/client/proc/cmd_admin_areatest_all,
/client/proc/cmd_admin_areatest_station,
- #ifdef TESTING
- /client/proc/see_dirty_varedits,
- #endif
/client/proc/cmd_admin_test_atmos_controllers,
- /client/proc/cmd_admin_rejuvenate,
- /datum/admins/proc/show_traitor_panel,
- /client/proc/disable_communication,
/client/proc/cmd_show_at_list,
/client/proc/cmd_show_at_markers,
- /client/proc/manipulate_organs,
- /client/proc/start_line_profiling,
- /client/proc/stop_line_profiling,
- /client/proc/show_line_profiling,
+ /client/proc/count_objects_all,
+ /client/proc/count_objects_on_z_level,
/client/proc/create_mapping_job_icons,
/client/proc/debug_z_levels,
+ /client/proc/disable_communication,
+ /client/proc/export_map,
+ /client/proc/intercom_view, //-errorage
/client/proc/map_zones_info,
- /client/proc/export_map
+ /client/proc/sec_camera_report, //-errorage
+ #ifdef TESTING
+ /client/proc/see_dirty_varedits,
+ #endif
+ /client/proc/show_line_profiling,
+ /client/proc/start_line_profiling,
+ /client/proc/stop_line_profiling,
))
-GLOBAL_PROTECT(admin_verbs_debug_mapping)
+GLOBAL_PROTECT(admin_verbs_debug_extra)
/obj/effect/debugging/mapfix_marker
name = "map fix marker"
@@ -70,7 +60,7 @@ GLOBAL_PROTECT(admin_verbs_debug_mapping)
return 0
/client/proc/camera_view()
- set category = "Mapping"
+ set category = "Debug.Mapping"
set name = "Camera Range Display"
var/on = FALSE
@@ -93,7 +83,7 @@ GLOBAL_PROTECT(admin_verbs_debug_mapping)
GLOBAL_LIST_EMPTY(dirty_vars)
/client/proc/see_dirty_varedits()
- set category = "Mapping"
+ set category = "Debug.Mapping"
set name = "Dirty Varedits"
var/list/dat = list()
@@ -107,7 +97,7 @@ GLOBAL_LIST_EMPTY(dirty_vars)
#endif
/client/proc/sec_camera_report()
- set category = "Mapping"
+ set category = "Debug.Mapping"
set name = "Camera Report"
if(!Master)
@@ -147,7 +137,7 @@ GLOBAL_LIST_EMPTY(dirty_vars)
SSblackbox.record_feedback("tally", "admin_verb", 1, "Show Camera Report") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/intercom_view()
- set category = "Mapping"
+ set category = "Debug.Mapping"
set name = "Intercom Range Display"
var/static/intercom_range_display_status = FALSE
@@ -165,7 +155,7 @@ GLOBAL_LIST_EMPTY(dirty_vars)
SSblackbox.record_feedback("tally", "admin_verb", 1, "Show Intercom Range") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_show_at_list()
- set category = "Mapping"
+ set category = "Debug.Mapping"
set name = "Show roundstart AT list"
set desc = "Displays a list of active turfs coordinates at roundstart"
@@ -182,7 +172,7 @@ GLOBAL_LIST_EMPTY(dirty_vars)
SSblackbox.record_feedback("tally", "admin_verb", 1, "Show Roundstart Active Turfs") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_show_at_markers()
- set category = "Mapping"
+ set category = "Debug.Mapping"
set name = "Show roundstart AT markers"
set desc = "Places a marker on all active-at-roundstart turfs"
@@ -207,18 +197,18 @@ GLOBAL_LIST_EMPTY(dirty_vars)
if(!check_rights(R_DEBUG))
return
remove_verb(src, /client/proc/enable_debug_verbs)
- add_verb(src, list(/client/proc/disable_debug_verbs, GLOB.admin_verbs_debug_mapping))
+ add_verb(src, list(/client/proc/disable_debug_verbs, GLOB.admin_verbs_debug_extra))
SSblackbox.record_feedback("tally", "admin_verb", 1, "Enable Debug Verbs") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/disable_debug_verbs()
set category = "Debug"
set name = "Debug verbs - Disable"
- remove_verb(src, list(/client/proc/disable_debug_verbs, GLOB.admin_verbs_debug_mapping))
+ remove_verb(src, list(/client/proc/disable_debug_verbs, GLOB.admin_verbs_debug_extra))
add_verb(src, /client/proc/enable_debug_verbs)
SSblackbox.record_feedback("tally", "admin_verb", 1, "Disable Debug Verbs") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/count_objects_on_z_level()
- set category = "Mapping"
+ set category = "Debug.Mapping"
set name = "Count Objects On Level"
var/level = input("Which z-level?","Level?") as text|null
if(!level)
@@ -257,7 +247,7 @@ GLOBAL_LIST_EMPTY(dirty_vars)
SSblackbox.record_feedback("tally", "admin_verb", 1, "Count Objects Zlevel") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/count_objects_all()
- set category = "Mapping"
+ set category = "Debug.Mapping"
set name = "Count Objects All"
var/type_text = input("Which type path?","") as text|null
@@ -280,7 +270,7 @@ GLOBAL_LIST_EMPTY(dirty_vars)
//This proc is intended to detect lag problems relating to communication procs
GLOBAL_VAR_INIT(say_disabled, FALSE)
/client/proc/disable_communication()
- set category = "Mapping"
+ set category = "Debug.Mapping"
set name = "Disable all communication verbs"
GLOB.say_disabled = !GLOB.say_disabled
@@ -292,7 +282,7 @@ GLOBAL_VAR_INIT(say_disabled, FALSE)
//This generates the icon states for job starting location landmarks.
/client/proc/create_mapping_job_icons()
set name = "Generate job landmarks icons"
- set category = "Mapping"
+ set category = "Debug.Mapping"
var/icon/final = icon()
var/mob/living/carbon/human/dummy/D = new(locate(1,1,1)) //spawn on 1,1,1 so we don't have runtimes when items are deleted
D.setDir(SOUTH)
@@ -319,7 +309,7 @@ GLOBAL_VAR_INIT(say_disabled, FALSE)
/client/proc/debug_z_levels()
set name = "Debug Z-Levels"
- set category = "Mapping"
+ set category = "Debug.Mapping"
var/list/z_list = SSmapping.z_list
var/list/messages = list()
@@ -350,7 +340,7 @@ GLOBAL_VAR_INIT(say_disabled, FALSE)
/client/proc/map_zones_info()
set name = "Map-Zones Info"
- set category = "Mapping"
+ set category = "Debug.Mapping"
var/list/dat = list()
for(var/datum/map_zone/map_zone as anything in SSmapping.map_zones)
@@ -405,7 +395,7 @@ GLOBAL_VAR_INIT(say_disabled, FALSE)
#undef MAP_ZONE_INFO
/client/proc/export_map()
- set category = "Mapping"
+ set category = "Debug.Mapping"
set name = "Export Map"
var/z_level = input("Export Which Z-Level?", "Map Exporter", 2) as num
diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm
index ac05c3afdd4f..028c9729131a 100644
--- a/code/modules/admin/verbs/one_click_antag.dm
+++ b/code/modules/admin/verbs/one_click_antag.dm
@@ -4,7 +4,7 @@
/client/proc/one_click_antag()
set name = "Create Antagonist"
set desc = "Auto-create an antagonist of your choice"
- set category = "Admin.Events"
+ set category = "Event"
if(holder)
holder.one_click_antag()
@@ -493,6 +493,16 @@
teamSpawned++
if(teamSpawned)
+ // guestbook
+ for(var/datum/mind/member in ert_team.members)
+ var/member_mob = member.current
+ for(var/datum/mind/other_member in ert_team.members)
+ // skip yourself
+ if(other_member.name == member.name)
+ continue
+ var/mob/living/carbon/human/other_member_mob = other_member.current
+ member.guestbook.add_guest(member_mob, other_member_mob, other_member_mob.real_name, other_member_mob.real_name, TRUE)
+
message_admins("[ertemplate.rename_team] has spawned with the mission: [ertemplate.mission]")
//Open the Armory doors
diff --git a/code/modules/admin/verbs/outpost.dm b/code/modules/admin/verbs/outpost.dm
index 358da03d2844..25632838f45f 100644
--- a/code/modules/admin/verbs/outpost.dm
+++ b/code/modules/admin/verbs/outpost.dm
@@ -19,7 +19,7 @@
/client/proc/spawn_outpost()
set name = "Spawn Outpost"
- set category = "Admin.Events"
+ set category = "Event.Spawning"
set desc = "Spawns the selected /datum/overmap/outpost subtype."
if(!holder)
diff --git a/code/modules/admin/verbs/playsound.dm b/code/modules/admin/verbs/playsound.dm
index 131dd55ad82b..e3e5bc8c1ede 100644
--- a/code/modules/admin/verbs/playsound.dm
+++ b/code/modules/admin/verbs/playsound.dm
@@ -1,5 +1,5 @@
/client/proc/play_sound(S as sound)
- set category = "Fun"
+ set category = "Event.Fun"
set name = "Play Global Sound"
if(!check_rights(R_SOUND))
return
@@ -40,7 +40,7 @@
/client/proc/play_local_sound(S as sound)
- set category = "Fun"
+ set category = "Event.Fun"
set name = "Play Local Sound"
if(!check_rights(R_SOUND))
return
@@ -52,7 +52,7 @@
SSblackbox.record_feedback("tally", "admin_verb", 1, "Play Local Sound") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/play_direct_mob_sound(S as sound, mob/M)
- set category = "Fun"
+ set category = "Event.Fun"
set name = "Play Direct Mob Sound"
if(!check_rights(R_SOUND))
return
@@ -67,7 +67,7 @@
SSblackbox.record_feedback("tally", "admin_verb", 1, "Play Direct Mob Sound") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/play_web_sound()
- set category = "Fun"
+ set category = "Event.Fun"
set name = "Play Internet Sound"
if(!check_rights(R_SOUND))
return
@@ -151,7 +151,7 @@
SSblackbox.record_feedback("tally", "admin_verb", 1, "Play Internet Sound")
/client/proc/set_round_end_sound(S as sound)
- set category = "Fun"
+ set category = "Event.Fun"
set name = "Set Round End Sound"
if(!check_rights(R_SOUND))
return
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index ae621e17d479..df5b1d6d18d3 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -20,7 +20,7 @@
SSblackbox.record_feedback("tally", "admin_verb", 1, "Drop Everything") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_admin_subtle_message(mob/M in GLOB.mob_list)
- set category = "Admin.Events"
+ set category = "Event"
set name = "Subtle Message"
if(!ismob(M))
@@ -46,7 +46,7 @@
SSblackbox.record_feedback("tally", "admin_verb", 1, "Subtle Message") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_admin_headset_message(mob/M in GLOB.mob_list)
- set category = "Admin.Events"
+ set category = "Event"
set name = "Headset Message"
admin_headset_message(M)
@@ -92,7 +92,7 @@
SSblackbox.record_feedback("tally", "admin_verb", 1, "Headset Message") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_admin_world_narrate()
- set category = "Admin.Events"
+ set category = "Event"
set name = "Global Narrate"
if(!check_rights(R_ADMIN))
@@ -108,7 +108,7 @@
SSblackbox.record_feedback("tally", "admin_verb", 1, "Global Narrate") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_admin_direct_narrate(mob/M)
- set category = "Admin.Events"
+ set category = "Event"
set name = "Direct Narrate"
if(!check_rights(R_ADMIN))
@@ -133,7 +133,7 @@
SSblackbox.record_feedback("tally", "admin_verb", 1, "Direct Narrate") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_admin_local_narrate(atom/A)
- set category = "Admin.Events"
+ set category = "Event"
set name = "Local Narrate"
if(!check_rights(R_ADMIN))
@@ -295,7 +295,7 @@
return 1
/client/proc/cmd_admin_add_freeform_ai_law()
- set category = "Admin.Events"
+ set category = "Event"
set name = "Add Custom AI law"
if(!check_rights(R_ADMIN))
@@ -318,7 +318,7 @@
SSblackbox.record_feedback("tally", "admin_verb", 1, "Add Custom AI Law") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_admin_create_centcom_report()
- set category = "Admin.Events"
+ set category = "Event"
set name = "Create Command Report"
if(!check_rights(R_FUN))
@@ -347,7 +347,7 @@
SSblackbox.record_feedback("tally", "admin_verb", 1, "Create Command Report") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_change_command_name()
- set category = "Admin.Events"
+ set category = "Event"
set name = "Change Command Name"
if(!check_rights(R_FUN))
@@ -370,7 +370,7 @@
admin_delete(A)
/client/proc/cmd_admin_explosion(atom/O as obj|mob|turf in world)
- set category = "Fun"
+ set category = "Event.Fun"
set name = "Explosion"
if(!check_rights(R_ADMIN))
@@ -406,7 +406,7 @@
return
/client/proc/cmd_admin_emp(atom/O as obj|mob|turf in world)
- set category = "Fun"
+ set category = "Event.Fun"
set name = "EM Pulse"
if(!check_rights(R_ADMIN))
@@ -431,7 +431,7 @@
return
/client/proc/cmd_admin_gib(mob/M in GLOB.mob_list)
- set category = "Fun"
+ set category = "Event.Fun"
set name = "Gib"
if(!check_rights(R_ADMIN))
@@ -458,7 +458,7 @@
/client/proc/cmd_admin_gib_self()
set name = "Gibself"
- set category = "Fun"
+ set category = "Event.Fun"
var/confirm = alert(src, "You sure?", "Confirm", "Yes", "No")
if(confirm == "Yes")
@@ -492,7 +492,7 @@
SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Change View Range", "[view]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/admin_initiate_jump()
- set category = "Admin.Events"
+ set category = "Event"
set name = "Initiate Jump"
if(!check_rights(R_ADMIN))
return
@@ -510,7 +510,7 @@
message_admins("[key_name_admin(usr)] admin-initiated a bluespace jump.")
/client/proc/admin_cancel_jump()
- set category = "Admin.Events"
+ set category = "Event"
set name = "Cancel Jump"
if(!check_rights(0))
return
@@ -528,7 +528,7 @@
message_admins("[key_name_admin(usr)] admin-cancelled a bluespace jump.")
/client/proc/everyone_random()
- set category = "Fun"
+ set category = "Event.Fun"
set name = "Make Everyone Random"
set desc = "Make everyone have a random appearance. You can only use this before rounds!"
@@ -576,7 +576,7 @@
/client/proc/admin_change_sec_level()
- set category = "Admin.Events"
+ set category = "Event"
set name = "Set Security Level"
set desc = "Changes the security level. Announcement only, i.e. setting to Delta won't activate nuke"
@@ -593,7 +593,7 @@
/client/proc/toggle_nuke(obj/machinery/nuclearbomb/N in GLOB.nuke_list)
set name = "Toggle Nuke"
- set category = "Admin.Events"
+ set category = "Event"
set popup_menu = 0
if(!check_rights(R_DEBUG))
return
@@ -646,7 +646,7 @@
/client/proc/run_weather()
- set category = "Admin.Events"
+ set category = "Event"
set name = "Run Weather"
set desc = "Triggers a weather on the z-level you choose."
@@ -669,7 +669,7 @@
SSblackbox.record_feedback("tally", "admin_verb", 1, "Run Weather")
/client/proc/mass_zombie_infection()
- set category = "Fun"
+ set category = "Event.Fun"
set name = "Mass Zombie Infection"
set desc = "Infects all humans with a latent organ that will zombify \
them on death."
@@ -690,7 +690,7 @@
SSblackbox.record_feedback("tally", "admin_verb", 1, "Mass Zombie Infection")
/client/proc/mass_zombie_cure()
- set category = "Fun"
+ set category = "Event.Fun"
set name = "Mass Zombie Cure"
set desc = "Removes the zombie infection from all humans, returning them to normal."
if(!check_rights(R_ADMIN))
@@ -708,7 +708,7 @@
SSblackbox.record_feedback("tally", "admin_verb", 1, "Mass Zombie Cure")
/client/proc/polymorph_all()
- set category = "Fun"
+ set category = "Event.Fun"
set name = "Polymorph All"
set desc = "Applies the effects of the bolt of change to every single mob."
@@ -819,7 +819,7 @@
/client/proc/spawn_ruin()
set name = "Spawn Planet/Ruin"
- set category = "Fun"
+ set category = "Event.Spawning"
if(!check_rights(R_ADMIN) || !check_rights(R_SPAWN))
return
@@ -880,7 +880,7 @@
/client/proc/smite(mob/living/target as mob)
set name = "Smite"
- set category = "Fun"
+ set category = "Event.Fun"
if(!check_rights(R_ADMIN) || !check_rights(R_FUN))
return
@@ -1068,8 +1068,8 @@
REMOVE_TRAIT(D,chosen_trait,source)
/datum/admins/proc/gift(mob/living/carbon/human/target as mob, object as text)
- set name = "Gift"
- set category = "Fun"
+ set name = "Gift a mob"
+ set category = "Event.Spawning"
set desc = "Give a mob an item directly."
if(!check_rights(R_ADMIN) || !check_rights(R_FUN))
return
diff --git a/code/modules/admin/verbs/selectequipment.dm b/code/modules/admin/verbs/selectequipment.dm
index 9bc6ab3dcea9..03a560d5e712 100644
--- a/code/modules/admin/verbs/selectequipment.dm
+++ b/code/modules/admin/verbs/selectequipment.dm
@@ -1,5 +1,5 @@
/client/proc/cmd_select_equipment(mob/target in GLOB.mob_list)
- set category = "Admin.Events"
+ set category = "Event"
set name = "Select equipment"
diff --git a/code/modules/admin/verbs/shuttlepanel.dm b/code/modules/admin/verbs/shuttlepanel.dm
index b4e374f41cb8..bb3bd11b7f42 100644
--- a/code/modules/admin/verbs/shuttlepanel.dm
+++ b/code/modules/admin/verbs/shuttlepanel.dm
@@ -1,5 +1,5 @@
/datum/admins/proc/open_shuttlepanel()
- set category = "Admin.Events"
+ set category = "Event"
set name = "Shuttle Manipulator"
set desc = "Opens the shuttle manipulator UI."
@@ -8,7 +8,6 @@
SSshuttle.ui_interact(usr)
-
/obj/docking_port/mobile/proc/admin_fly_shuttle(mob/user)
var/list/options = list()
diff --git a/code/modules/admin/verbs/spawnobjasmob.dm b/code/modules/admin/verbs/spawnobjasmob.dm
index f840516d49f1..e787ecfde664 100644
--- a/code/modules/admin/verbs/spawnobjasmob.dm
+++ b/code/modules/admin/verbs/spawnobjasmob.dm
@@ -1,7 +1,7 @@
/datum/admins/proc/spawn_objasmob(object as text)
- set category = "Debug"
- set desc = "(obj path) Spawn object-mob"
- set name = "Spawn object-mob"
+ set category = "Event.Spawning"
+ set desc = "(obj path) Spawn object-mob from Object"
+ set name = "Spawn Living Mob"
if(!check_rights(R_SPAWN))
return
diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm
index 003abfd42991..00dc550c11ce 100644
--- a/code/modules/antagonists/cult/blood_magic.dm
+++ b/code/modules/antagonists/cult/blood_magic.dm
@@ -601,7 +601,7 @@
var/quantity = candidate.amount
if(candidate.use(quantity))
uses --
- new /obj/item/stack/sheet/runed_metal(T,quantity)
+ new /obj/item/stack/sheet/mineral/hidden/hellstone(T,quantity)
to_chat(user, "A dark cloud emanates from you hand and swirls around the plasteel, transforming it into runed metal!")
SEND_SOUND(user, sound('sound/effects/magic.ogg',0,1,25))
else if(istype(target,/mob/living/silicon/robot))
diff --git a/code/modules/antagonists/cult/cult.dm b/code/modules/antagonists/cult/cult.dm
index e7f37d37f4a6..406c51956035 100644
--- a/code/modules/antagonists/cult/cult.dm
+++ b/code/modules/antagonists/cult/cult.dm
@@ -61,7 +61,7 @@
var/mob/living/current = owner.current
add_objectives()
if(give_equipment)
- equip_cultist(TRUE)
+ equip_cultist()
SSticker.mode.cult += owner // Only add after they've been given objectives
current.log_message("has been converted to the cult of Nar'Sie!", LOG_ATTACK, color="#960000")
@@ -69,13 +69,11 @@
current.client.images += cult_team.blood_target_image
-/datum/antagonist/cult/proc/equip_cultist(metal=TRUE)
+/datum/antagonist/cult/proc/equip_cultist()
var/mob/living/carbon/H = owner.current
if(!istype(H))
return
. += cult_give_item(/obj/item/melee/cultblade/dagger, H)
- if(metal)
- . += cult_give_item(/obj/item/stack/sheet/runed_metal/ten, H)
to_chat(owner, "These will help you jumpstart a cult of your own in this sector. Use them well, and remember - you are not the only one.")
@@ -163,21 +161,16 @@
/datum/antagonist/cult/get_admin_commands()
. = ..()
.["Dagger"] = CALLBACK(src, PROC_REF(admin_give_dagger))
- .["Dagger and Metal"] = CALLBACK(src, PROC_REF(admin_give_metal))
- .["Remove Dagger and Metal"] = CALLBACK(src, PROC_REF(admin_take_all))
+ .["Metal"] = CALLBACK(src, PROC_REF(admin_take_all))
/datum/antagonist/cult/proc/admin_give_dagger(mob/admin)
- if(!equip_cultist(metal=FALSE))
+ if(!equip_cultist())
to_chat(admin, "Spawning dagger failed!")
-/datum/antagonist/cult/proc/admin_give_metal(mob/admin)
- if (!equip_cultist(metal=TRUE))
- to_chat(admin, "Spawning runed metal failed!")
-
/datum/antagonist/cult/proc/admin_take_all(mob/admin)
var/mob/living/current = owner.current
for(var/o in current.GetAllContents())
- if(istype(o, /obj/item/melee/cultblade/dagger) || istype(o, /obj/item/stack/sheet/runed_metal))
+ if(istype(o, /obj/item/melee/cultblade/dagger))
qdel(o)
/datum/antagonist/cult/master
diff --git a/code/modules/antagonists/cult/cult_structures.dm b/code/modules/antagonists/cult/cult_structures.dm
index 66526d96a34f..60816a90d45d 100644
--- a/code/modules/antagonists/cult/cult_structures.dm
+++ b/code/modules/antagonists/cult/cult_structures.dm
@@ -5,7 +5,7 @@
light_power = 2
var/cooldowntime = 0
break_sound = 'sound/hallucinations/veryfar_noise.ogg'
- debris = list(/obj/item/stack/sheet/runed_metal = 1)
+ debris = list(/obj/item/stack/sheet/mineral/hidden/hellstone = 1)
/obj/structure/destructible/cult/proc/conceal() //for spells that hide cult presence
density = FALSE
diff --git a/code/modules/antagonists/devil/devil.dm b/code/modules/antagonists/devil/devil.dm
index 3e28b22cfd49..5f4be638f78a 100644
--- a/code/modules/antagonists/devil/devil.dm
+++ b/code/modules/antagonists/devil/devil.dm
@@ -24,13 +24,6 @@ GLOBAL_LIST_INIT(lawlorify, list (
OBLIGATION_SAYNAME = "He will always chant his name upon killing someone.",
OBLIGATION_ANNOUNCEKILL = "This devil always loudly announces his kills for the world to hear.",
OBLIGATION_ANSWERTONAME = "This devil always responds to his truename.",
- BANE_SILVER = "Silver seems to gravely injure this devil.",
- BANE_SALT = "Throwing salt at this devil will hinder his ability to use infernal powers temporarily.",
- BANE_LIGHT = "Bright flashes will disorient the devil, likely causing him to flee.",
- BANE_IRON = "Cold iron will slowly injure him, until he can purge it from his system.",
- BANE_WHITECLOTHES = "Wearing clean white clothing will help ward off this devil.",
- BANE_HARVEST = "Presenting the labors of a harvest will disrupt the devil.",
- BANE_TOOLBOX = "That which holds the means of creation also holds the means of the devil's undoing.",
BAN_HURTWOMAN = "This devil seems to prefer hunting men.",
BAN_CHAPEL = "This devil avoids holy ground.",
BAN_HURTPRIEST = "The annointed clergy appear to be immune to his powers.",
@@ -62,13 +55,6 @@ GLOBAL_LIST_INIT(lawlorify, list (
BAN_STRIKEUNCONSCIOUS = "You must never strike an unconscious person.",
BAN_HURTlizard = "You must never harm a lizardman outside of self defense.",
BAN_HURTANIMAL = "You must never harm a non-sentient creature or robot outside of self defense.",
- BANE_SILVER = "Silver, in all of its forms shall be your downfall.",
- BANE_SALT = "Salt will disrupt your magical abilities.",
- BANE_LIGHT = "Blinding lights will prevent you from using offensive powers for a time.",
- BANE_IRON = "Cold wrought iron shall act as poison to you.",
- BANE_WHITECLOTHES = "Those clad in pristine white garments will strike you true.",
- BANE_HARVEST = "The fruits of the harvest shall be your downfall.",
- BANE_TOOLBOX = "Toolboxes are bad news for you, for some reason.",
BANISH_WATER = "If your corpse is filled with holy water, you will be unable to resurrect.",
BANISH_COFFIN = "If your corpse is in a coffin, you will be unable to resurrect.",
BANISH_FORMALDYHIDE = "If your corpse is embalmed, you will be unable to resurrect.",
@@ -94,7 +80,6 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master",
show_to_ghosts = TRUE
var/obligation
var/ban
- var/bane
var/banish
var/truename
var/list/datum/mind/soulsOwned = new
@@ -174,9 +159,6 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master",
return pick(BAN_HURTWOMAN, BAN_CHAPEL, BAN_HURTPRIEST, BAN_AVOIDWATER, BAN_STRIKEUNCONSCIOUS, BAN_HURTLIZARD, BAN_HURTANIMAL, BAN_HURTTAJARA)
// [/CELADON-EDIT]
-/proc/randomdevilbane()
- return pick(BANE_SALT, BANE_LIGHT, BANE_IRON, BANE_WHITECLOTHES, BANE_SILVER, BANE_HARVEST, BANE_TOOLBOX)
-
/proc/randomdevilbanish()
return pick(BANISH_WATER, BANISH_COFFIN, BANISH_FORMALDYHIDE, BANISH_RUNES, BANISH_CANDLES, BANISH_DESTRUCTION, BANISH_FUNERAL_GARB)
@@ -492,7 +474,6 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master",
to_chat(owner.current, "However, your infernal form is not without weaknesses.")
to_chat(owner.current, "You may not use violence to coerce someone into selling their soul.")
to_chat(owner.current, "You may not directly and knowingly physically harm a devil, other than yourself.")
- to_chat(owner.current, GLOB.lawlorify[LAW][bane])
to_chat(owner.current, GLOB.lawlorify[LAW][ban])
to_chat(owner.current, GLOB.lawlorify[LAW][obligation])
to_chat(owner.current, GLOB.lawlorify[LAW][banish])
@@ -502,12 +483,11 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master",
/datum/antagonist/devil/on_gain()
truename = randomDevilName()
ban = randomdevilban()
- bane = randomdevilbane()
obligation = randomdevilobligation()
banish = randomdevilbanish()
GLOB.allDevils[lowertext(truename)] = src
- antag_memory += "Your devilic true name is [truename]
[GLOB.lawlorify[LAW][ban]]
You may not use violence to coerce someone into selling their soul.
You may not directly and knowingly physically harm a devil, other than yourself.
[GLOB.lawlorify[LAW][bane]]
[GLOB.lawlorify[LAW][obligation]]
[GLOB.lawlorify[LAW][banish]]
"
+ antag_memory += "Your devilic true name is [truename]
[GLOB.lawlorify[LAW][ban]]
You may not use violence to coerce someone into selling their soul.
You may not directly and knowingly physically harm a devil, other than yourself.
[GLOB.lawlorify[LAW][obligation]]
[GLOB.lawlorify[LAW][banish]]
"
if(issilicon(owner.current))
var/mob/living/silicon/robot_devil = owner.current
var/laws = list("You may not use violence to coerce someone into selling their soul.", "You may not directly and knowingly physically harm a devil, other than yourself.", GLOB.lawlorify[LAW][ban], GLOB.lawlorify[LAW][obligation], "Accomplish your objectives at all costs.")
@@ -544,7 +524,6 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master",
parts += "The devil's true name is: [truename]"
parts += "The devil's bans were:"
parts += "[FOURSPACES][GLOB.lawlorify[LORE][ban]]"
- parts += "[FOURSPACES][GLOB.lawlorify[LORE][bane]]"
parts += "[FOURSPACES][GLOB.lawlorify[LORE][obligation]]"
parts += "[FOURSPACES][GLOB.lawlorify[LORE][banish]]"
return parts.Join("
")
@@ -559,7 +538,6 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master",
//A simple super light weight datum for the codex gigas.
/datum/fakeDevil
var/truename
- var/bane
var/obligation
var/ban
var/banish
@@ -567,7 +545,6 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master",
/datum/fakeDevil/New(name = randomDevilName())
truename = name
- bane = randomdevilbane()
obligation = randomdevilobligation()
ban = randomdevilban()
banish = randomdevilbanish()
diff --git a/code/modules/antagonists/devil/devil_helpers.dm b/code/modules/antagonists/devil/devil_helpers.dm
deleted file mode 100644
index 3be8320a001f..000000000000
--- a/code/modules/antagonists/devil/devil_helpers.dm
+++ /dev/null
@@ -1,37 +0,0 @@
-/mob/living/proc/check_devil_bane_multiplier(obj/item/weapon, mob/living/attacker)
- var/datum/antagonist/devil/devilInfo = mind.has_antag_datum(/datum/antagonist/devil)
- switch(devilInfo.bane)
- if(BANE_WHITECLOTHES)
- if(ishuman(attacker))
- var/mob/living/carbon/human/H = attacker
- if(H.w_uniform && istype(H.w_uniform, /obj/item/clothing/under))
- var/obj/item/clothing/under/U = H.w_uniform
- var/static/list/whiteness = list (
- /obj/item/clothing/under/color/white = 2,
- /obj/item/clothing/under/rank/civilian/bartender = 1,
- /obj/item/clothing/under/rank/civilian/chef = 1,
- /obj/item/clothing/under/rank/engineering/chief_engineer = 1,
- /obj/item/clothing/under/rank/rnd/scientist = 1,
- /obj/item/clothing/under/rank/medical/chemist = 1,
- /obj/item/clothing/under/rank/medical/chief_medical_officer = 1,
- /obj/item/clothing/under/rank/medical/geneticist = 1,
- /obj/item/clothing/under/rank/medical/virologist = 1,
- /obj/item/clothing/under/rank/medical/doctor/nurse = 1,
- /obj/item/clothing/under/rank/medical/doctor = 1,
- /obj/item/clothing/under/rank/security/detective = 1,
- /obj/item/clothing/under/suit/white = 0.5,
- )
- if(U && whiteness[U.type])
- src.visible_message("[src] seems to have been harmed by the purity of [attacker]'s clothes.", "Unsullied white clothing is disrupting your form.")
- return whiteness[U.type] + 1
- if(BANE_TOOLBOX)
- if(istype(weapon, /obj/item/storage/toolbox))
- src.visible_message("The [weapon] seems unusually robust this time.", "The [weapon] is your unmaking!")
- return 2.5 // Will take four hits with a normal toolbox to crit.
- if(BANE_HARVEST)
- if(istype(weapon, /obj/item/reagent_containers/food/snacks/grown/))
- visible_message("The spirits of the harvest aid in the exorcism.", "The harvest spirits are harming you.")
- Paralyze(40)
- qdel(weapon)
- return 2
- return 1
diff --git a/code/modules/antagonists/devil/true_devil/_true_devil.dm b/code/modules/antagonists/devil/true_devil/_true_devil.dm
index 0faab8e003cf..4703f95263f7 100644
--- a/code/modules/antagonists/devil/true_devil/_true_devil.dm
+++ b/code/modules/antagonists/devil/true_devil/_true_devil.dm
@@ -113,11 +113,6 @@
/mob/living/carbon/true_devil/assess_threat(judgement_criteria, lasercolor = "", datum/callback/weaponcheck=null)
return 666
-/mob/living/carbon/true_devil/flash_act(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0)
- if(mind && has_bane(BANE_LIGHT))
- mind.disrupt_spells(-500)
- return ..() //flashes don't stop devils UNLESS it's their bane.
-
/mob/living/carbon/true_devil/soundbang_act()
return 0
@@ -126,8 +121,7 @@
/mob/living/carbon/true_devil/attacked_by(obj/item/I, mob/living/user, def_zone)
- var/weakness = check_weakness(I, user)
- apply_damage(I.force * weakness, I.damtype, def_zone)
+ apply_damage(I.force, I.damtype, def_zone)
var/message_verb = ""
if(I.attack_verb && I.attack_verb.len)
message_verb = "[pick(I.attack_verb)]"
@@ -213,8 +207,6 @@
b_loss = 150
if (EXPLODE_LIGHT)
b_loss = 30
- if(has_bane(BANE_LIGHT))
- b_loss *=2
adjustBruteLoss(b_loss)
return ..()
diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm
index bda91c8f587c..d633b620e2be 100644
--- a/code/modules/asset_cache/asset_list_items.dm
+++ b/code/modules/asset_cache/asset_list_items.dm
@@ -96,6 +96,18 @@
/datum/asset/spritesheet/simple/paper
name = "paper"
assets = list(
+ // [CELADON-ADD] - CELADON_STAMPS
+ "stamp-inteq-celadon" = 'mod_celadon/stamps/icons/png/large_stamp-inteq.png',
+ "inteq-mothership-stamp" = 'mod_celadon/stamps/icons/png/inteq_mothership_stamp.png',
+ "solfed-corps-commander-stamp" = 'mod_celadon/stamps/icons/png/sf_commander_stamp.png',
+ "solfed-captain" = 'mod_celadon/stamps/icons/png/sf_captain_stamp.png',
+ "elysium-brigade-captain-stamp" = 'mod_celadon/stamps/icons/png/elysium_brigade_stamp.png',
+ "elysium-republic-stamp" = 'mod_celadon/stamps/icons/png/elysium_republic_stamp.png',
+ "elysium-avanpost-stamp" = 'mod_celadon/stamps/icons/png/elysium_outpost_stamp.png',
+ "nt-cent-command-stamp" = 'mod_celadon/stamps/icons/png/nano_trasen_central_command_stamp.png',
+ "nt-captain-stamp" = 'mod_celadon/stamps/icons/png/nano_trasen_captain_stamp.png',
+ "syndicate-captain-stamp" = 'mod_celadon/stamps/icons/png/syndicate_captain_stamp.png',
+ // [/CELADON-ADD]
"stamp-clown" = 'icons/stamp_icons/large_stamp-clown.png',
"stamp-deny" = 'icons/stamp_icons/large_stamp-deny.png',
"stamp-ok" = 'icons/stamp_icons/large_stamp-ok.png',
@@ -121,10 +133,7 @@
"stamp-bard" = 'icons/stamp_icons/large_stamp-bard.png',
"stamp-gold" = 'icons/stamp_icons/large_stamp-gold.png',
"stamp-cybersun" = 'icons/stamp_icons/large_stamp-cybersun.png',
- "stamp-donk" = 'icons/stamp_icons/large_stamp-donk.png',
- // [CELADON-ADD] - INTEQ_STUFF
- "stamp-inteq-celadon" = 'mod_celadon/inteq_stuff/icons/obj/large_stamp-inteq.png'
- // [/CELADON-ADD]
+ "stamp-donk" = 'icons/stamp_icons/large_stamp-donk.png'
)
/datum/asset/simple/fuckywucky
diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm
index bef2f277f7e1..895bfdc96cf4 100644
--- a/code/modules/atmospherics/machinery/airalarm.dm
+++ b/code/modules/atmospherics/machinery/airalarm.dm
@@ -65,8 +65,8 @@
icon = 'icons/obj/monitors.dmi'
icon_state = "alarm"
use_power = IDLE_POWER_USE
- idle_power_usage = 4
- active_power_usage = 1200
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MEDIUM
power_channel = AREA_USAGE_ENVIRON
//req_access = list(ACCESS_ATMOSPHERICS)
max_integrity = 250
@@ -753,14 +753,14 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/airalarm, 27)
visible_message("The air alarm makes a quiet click as it stops heating the area")
playsound(src, 'sound/machines/terminal_off.ogg', 40)
heating_current_mode = "Idle"
- use_power = IDLE_POWER_USE
+ set_idle_power()
return
if(wanted_mode == "Heat" & heating_current_mode == "Idle")
visible_message("The air alarm makes a quiet click as it starts heating the area")
playsound(src, 'sound/machines/terminal_on.ogg', 40)
heating_current_mode = "Heat"
- use_power = ACTIVE_POWER_USE
+ set_active_power()
if(heating_current_mode == "Heat")
var/temperature = environment.return_temperature()
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm b/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm
index 9f2d582be256..30703b2f4a02 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm
@@ -15,12 +15,19 @@
var/active = FALSE
var/last_pressure_delta = 0
- pipe_flags = PIPING_ONE_PER_TURF | PIPING_DEFAULT_LAYER_ONLY
+ pipe_flags = PIPING_ONE_PER_TURF
var/flipped = 0
var/mode = CIRCULATOR_HOT
var/obj/machinery/power/generator/generator
+/obj/machinery/atmospherics/components/unary/shuttle/heater/on_construction(obj_color, set_layer)
+ var/obj/item/circuitboard/machine/circulator/board = circuit
+ if(board)
+ piping_layer = board.pipe_layer
+ set_layer = piping_layer
+ ..()
+
//for mappers
/obj/machinery/atmospherics/components/binary/circulator/cold
mode = CIRCULATOR_COLD
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm
index 8579d70a1165..8cd12ddf27cf 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm
@@ -18,6 +18,10 @@
can_unwrench = TRUE
shift_underlay_only = FALSE
+ use_power = IDLE_POWER_USE
+ idle_power_usage = 0
+ active_power_usage = ACTIVE_DRAW_MINIMAL
+
var/target_pressure = ONE_ATMOSPHERE
var/frequency = 0
@@ -30,6 +34,10 @@
/obj/machinery/atmospherics/components/binary/pump/CtrlClick(mob/user)
if(can_interact(user))
on = !on
+ if(on)
+ set_active_power()
+ else
+ set_idle_power()
investigate_log("was turned [on ? "on" : "off"] by [key_name(user)]", INVESTIGATE_ATMOS)
update_appearance()
return ..()
@@ -110,6 +118,10 @@
switch(action)
if("power")
on = !on
+ if(on)
+ set_active_power()
+ else
+ set_idle_power()
investigate_log("was turned [on ? "on" : "off"] by [key_name(usr)]", INVESTIGATE_ATMOS)
. = TRUE
if("pressure")
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/valve.dm b/code/modules/atmospherics/machinery/components/binary_devices/valve.dm
index 020570f34785..24ef0997406d 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/valve.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/valve.dm
@@ -73,6 +73,9 @@ It's like a regular ol' straight pipe, but you can turn it on and off.
return
..()
+/obj/machinery/atmospherics/components/binary/valve/digital/toggle()
+ use_power(ACTIVE_DRAW_MINIMAL)
+ . = ..()
/obj/machinery/atmospherics/components/binary/valve/layer2
piping_layer = 2
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm
index 03b41df05e32..c32a750848da 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm
@@ -18,6 +18,10 @@
can_unwrench = TRUE
shift_underlay_only = FALSE
+ use_power = IDLE_POWER_USE
+ idle_power_usage = 0
+ active_power_usage = ACTIVE_DRAW_MINIMAL
+
var/transfer_rate = MAX_TRANSFER_RATE
var/overclocked = FALSE
@@ -31,6 +35,10 @@
/obj/machinery/atmospherics/components/binary/volume_pump/CtrlClick(mob/user)
if(can_interact(user))
on = !on
+ if(on)
+ set_active_power()
+ else
+ set_idle_power()
investigate_log("was turned [on ? "on" : "off"] by [key_name(user)]", INVESTIGATE_ATMOS)
update_appearance()
return ..()
@@ -130,6 +138,10 @@
switch(action)
if("power")
on = !on
+ if(on)
+ set_active_power()
+ else
+ set_idle_power()
investigate_log("was turned [on ? "on" : "off"] by [key_name(usr)]", INVESTIGATE_ATMOS)
. = TRUE
if("rate")
diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm
index 404ecbf46eb2..d196bca1c3b3 100644
--- a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm
+++ b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm
@@ -5,6 +5,10 @@
name = "gas filter"
desc = "Very useful for filtering gasses."
+ use_power = IDLE_POWER_USE
+ idle_power_usage = 0
+ active_power_usage = ACTIVE_DRAW_MINIMAL
+
can_unwrench = TRUE
var/transfer_rate = MAX_TRANSFER_RATE
var/filter_type = null
@@ -17,6 +21,10 @@
/obj/machinery/atmospherics/components/trinary/filter/CtrlClick(mob/user)
if(can_interact(user))
on = !on
+ if(on)
+ set_active_power()
+ else
+ set_idle_power()
investigate_log("was turned [on ? "on" : "off"] by [key_name(user)]", INVESTIGATE_ATMOS)
update_appearance()
return ..()
@@ -114,6 +122,10 @@
switch(action)
if("power")
on = !on
+ if(on)
+ set_active_power()
+ else
+ set_idle_power()
investigate_log("was turned [on ? "on" : "off"] by [key_name(usr)]", INVESTIGATE_ATMOS)
. = TRUE
if("rate")
diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm
index c1ce88286b4c..9ea52bd847be 100644
--- a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm
+++ b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm
@@ -5,6 +5,10 @@
name = "gas mixer"
desc = "Very useful for mixing gasses."
+ use_power = IDLE_POWER_USE
+ idle_power_usage = 0
+ active_power_usage = ACTIVE_DRAW_MINIMAL
+
can_unwrench = TRUE
var/target_pressure = ONE_ATMOSPHERE
@@ -19,6 +23,10 @@
/obj/machinery/atmospherics/components/trinary/mixer/CtrlClick(mob/user)
if(can_interact(user))
on = !on
+ if(on)
+ set_active_power()
+ else
+ set_idle_power()
investigate_log("was turned [on ? "on" : "off"] by [key_name(user)]", INVESTIGATE_ATMOS)
update_appearance()
return ..()
@@ -137,6 +145,10 @@
switch(action)
if("power")
on = !on
+ if(on)
+ set_active_power()
+ else
+ set_idle_power()
investigate_log("was turned [on ? "on" : "off"] by [key_name(usr)]", INVESTIGATE_ATMOS)
. = TRUE
if("pressure")
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm
index 1b6df20c721e..bcb46dedf147 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm
@@ -6,6 +6,7 @@
desc = "Heats or cools gas in connected pipes."
density = TRUE
+ idle_power_usage = IDLE_DRAW_LOW
max_integrity = 300
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 30)
layer = OBJ_LAYER
@@ -83,7 +84,7 @@
var/temperature_delta= abs(old_temperature - air_contents.return_temperature())
if(temperature_delta > 1)
- active_power_usage = (heat_capacity * temperature_delta) / 10 + idle_power_usage
+ active_power_usage = (heat_capacity * temperature_delta) / 5 + idle_power_usage
update_parents()
else
active_power_usage = idle_power_usage
@@ -152,7 +153,10 @@
switch(action)
if("power")
on = !on
- use_power = on ? ACTIVE_POWER_USE : IDLE_POWER_USE
+ if(on)
+ set_active_power()
+ else
+ set_idle_power()
investigate_log("was turned [on ? "on" : "off"] by [key_name(usr)]", INVESTIGATE_ATMOS)
. = TRUE
if("target")
@@ -182,6 +186,10 @@
if(!istype(user) || !user.canUseTopic(src, BE_CLOSE))
return
on = !on
+ if(on)
+ set_active_power()
+ else
+ set_idle_power()
investigate_log("was turned [on ? "on" : "off"] by [key_name(user)]", INVESTIGATE_ATMOS)
update_appearance()
investigate_log("was turned [on ? "on" : "off"] by [key_name(usr)]", INVESTIGATE_ATMOS)
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
index c55b8da80436..dc8b278959f6 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
@@ -48,8 +48,8 @@
radio_connection = null
adjacent_turfs.Cut()
return ..()
-
-/obj/machinery/atmospherics/components/unary/vent_scrubber/auto_use_power()
+/*
+/obj/machinery/atmospherics/components/unary/vent_scrubber/auto_use_power() //auto_use_power no longer called
if(!on || welded || !is_operational || !powered(power_channel))
return FALSE
@@ -64,7 +64,7 @@
amount += amount * (adjacent_turfs.len * (adjacent_turfs.len / 2))
use_power(amount, power_channel)
return TRUE
-
+*/
/obj/machinery/atmospherics/components/unary/vent_scrubber/update_icon_nopipes()
cut_overlays()
if(showpipe)
@@ -138,13 +138,20 @@
..()
if(welded || !on || !is_operational)
+ if(use_static_power != NO_POWER_USE)
+ set_no_power()
return FALSE
if(!nodes[1])
return FALSE
scrub(loc)
if(widenet)
+ if(use_static_power != ACTIVE_POWER_USE)
+ set_active_power()
for(var/turf/tile in adjacent_turfs)
scrub(tile)
+ else
+ if(use_static_power != IDLE_POWER_USE)
+ set_idle_power()
return TRUE
/obj/machinery/atmospherics/components/unary/vent_scrubber/proc/scrub(turf/tile)
diff --git a/code/modules/atmospherics/machinery/other/meter.dm b/code/modules/atmospherics/machinery/other/meter.dm
index 811979dd4c39..07aca0757568 100644
--- a/code/modules/atmospherics/machinery/other/meter.dm
+++ b/code/modules/atmospherics/machinery/other/meter.dm
@@ -6,8 +6,8 @@
layer = GAS_PUMP_LAYER
power_channel = AREA_USAGE_ENVIRON
use_power = IDLE_POWER_USE
- idle_power_usage = 2
- active_power_usage = 4
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = IDLE_DRAW_MINIMAL
max_integrity = 150
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 40, "acid" = 0)
var/frequency = 0
diff --git a/code/modules/atmospherics/machinery/other/miner.dm b/code/modules/atmospherics/machinery/other/miner.dm
index 37045635cf1a..ca85e9cc5569 100644
--- a/code/modules/atmospherics/machinery/other/miner.dm
+++ b/code/modules/atmospherics/machinery/other/miner.dm
@@ -26,8 +26,8 @@
var/power_draw_dynamic_kpa_coeff = 0.5
var/broken = FALSE
var/broken_message = "ERROR"
- idle_power_usage = 150
- active_power_usage = 2000
+ idle_power_usage = IDLE_DRAW_LOW
+ active_power_usage = ACTIVE_DRAW_HIGH
/obj/machinery/atmospherics/miner/Initialize()
. = ..()
diff --git a/code/modules/atmospherics/machinery/portable/scrubber.dm b/code/modules/atmospherics/machinery/portable/scrubber.dm
index b608d5849e38..8e71222ab4d4 100644
--- a/code/modules/atmospherics/machinery/portable/scrubber.dm
+++ b/code/modules/atmospherics/machinery/portable/scrubber.dm
@@ -113,8 +113,8 @@
name = "huge air scrubber"
icon_state = "scrubber:0"
anchored = TRUE
- active_power_usage = 500
- idle_power_usage = 10
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MEDIUM
overpressure_m = 200
volume_rate = 1500
@@ -137,8 +137,10 @@
if((!anchored && !movable) || !is_operational)
on = FALSE
update_appearance()
- use_power = on ? ACTIVE_POWER_USE : IDLE_POWER_USE
- if(!on)
+ if(on)
+ set_active_power()
+ else
+ set_idle_power()
return
..()
diff --git a/code/modules/awaymissions/gateway.dm b/code/modules/awaymissions/gateway.dm
index a643be115aab..51ab76479657 100644
--- a/code/modules/awaymissions/gateway.dm
+++ b/code/modules/awaymissions/gateway.dm
@@ -157,8 +157,8 @@ GLOBAL_LIST_EMPTY(gateway_destinations)
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 100
- active_power_usage = 5000
+ idle_power_usage = IDLE_DRAW_LOW
+ active_power_usage = ACTIVE_DRAW_EXTREME
var/calibrated = TRUE
/// Type of instanced gateway destination, needs to be subtype of /datum/gateway_destination/gateway
@@ -198,7 +198,7 @@ GLOBAL_LIST_EMPTY(gateway_destinations)
target = null
dest.deactivate(src)
QDEL_NULL(portal)
- use_power = IDLE_POWER_USE
+ set_idle_power()
update_appearance()
portal_visuals.reset_visuals()
@@ -221,7 +221,7 @@ GLOBAL_LIST_EMPTY(gateway_destinations)
target.activate(destination)
portal_visuals.setup_visuals(target)
generate_bumper()
- use_power = ACTIVE_POWER_USE
+ set_active_power()
update_appearance()
/obj/machinery/gateway/proc/Transfer(atom/movable/AM)
diff --git a/code/modules/buildmode/buildmode.dm b/code/modules/buildmode/buildmode.dm
index 81c46eebd10c..d85929daa0a8 100644
--- a/code/modules/buildmode/buildmode.dm
+++ b/code/modules/buildmode/buildmode.dm
@@ -182,9 +182,6 @@
return TRUE // no doing underlying actions
/proc/togglebuildmode(mob/M as mob in GLOB.player_list)
- set name = "Toggle Build Mode"
- set category = "Event"
-
if(M.client)
if(istype(M.client.click_intercept,/datum/buildmode))
var/datum/buildmode/B = M.client.click_intercept
diff --git a/code/modules/cargo/blackmarket/blackmarket_items/misc.dm b/code/modules/cargo/blackmarket/blackmarket_items/misc.dm
index eb3de3c4040d..a5e2c67175af 100644
--- a/code/modules/cargo/blackmarket/blackmarket_items/misc.dm
+++ b/code/modules/cargo/blackmarket/blackmarket_items/misc.dm
@@ -91,7 +91,7 @@
stock = 1
availability_prob = 40
-/datum/blackmarket_item/consumable/secret_docs/spawn_item(loc)
+/datum/blackmarket_item/misc/secret_docs/spawn_item(loc)
var/docs = pick(list(/obj/item/documents/nanotrasen,
/obj/item/documents/solgov,
/obj/item/documents/terragov,
diff --git a/code/modules/cargo/blackmarket/blackmarket_telepad.dm b/code/modules/cargo/blackmarket/blackmarket_telepad.dm
index 0dea6c59b819..14211cad6878 100644
--- a/code/modules/cargo/blackmarket/blackmarket_telepad.dm
+++ b/code/modules/cargo/blackmarket/blackmarket_telepad.dm
@@ -16,7 +16,7 @@
circuit = /obj/item/circuitboard/machine/ltsrbt
density = TRUE
- idle_power_usage = 200
+ idle_power_usage = IDLE_DRAW_LOW
/// Divider for power_usage_per_teleport.
var/power_efficiency = 1
diff --git a/code/modules/cargo/bounties/special.dm b/code/modules/cargo/bounties/special.dm
index af61a6698e44..fa581504ca89 100644
--- a/code/modules/cargo/bounties/special.dm
+++ b/code/modules/cargo/bounties/special.dm
@@ -19,12 +19,12 @@
return (Copy.copy_type && ispath(Copy.copy_type, /obj/item/documents/syndicate))
return TRUE
-/datum/bounty/item/adamantine
- name = "Adamantine"
- description = "Nanotrasen's anomalous materials division is in desparate need for Adamantine. Send them a large shipment and we'll make it worth your while."
+/datum/bounty/item/hellstone
+ name = "Hellstone"
+ description = "Nanotrasen's anomalous materials division is in desparate need for Hellstone. Send them a large shipment and we'll make it worth your while."
reward = 35000
required_count = 10
- wanted_types = list(/obj/item/stack/sheet/mineral/adamantine)
+ wanted_types = list(/obj/item/stack/sheet/mineral/hidden/hellstone)
/datum/bounty/item/trash
name = "Trash"
diff --git a/code/modules/cargo/bounty.dm b/code/modules/cargo/bounty.dm
index 01efd57be70b..3807e9bd6984 100644
--- a/code/modules/cargo/bounty.dm
+++ b/code/modules/cargo/bounty.dm
@@ -166,7 +166,7 @@ GLOBAL_LIST_EMPTY(bounties_list)
/********************************Low Priority Gens********************************/
var/list/low_priority_strict_type_list = list( /datum/bounty/item/alien_organs,
/datum/bounty/item/syndicate_documents,
- /datum/bounty/item/adamantine,
+ /datum/bounty/item/hellstone,
/datum/bounty/item/trash,
/datum/bounty/more_bounties)
diff --git a/code/modules/cargo/centcom_podlauncher.dm b/code/modules/cargo/centcom_podlauncher.dm
index 61e416e9d4f1..dfec659e1644 100644
--- a/code/modules/cargo/centcom_podlauncher.dm
+++ b/code/modules/cargo/centcom_podlauncher.dm
@@ -19,7 +19,7 @@
/client/proc/centcom_podlauncher() //Creates a verb for admins to open up the ui
set name = "Config/Launch Supplypod"
set desc = "Configure and launch a CentCom supplypod full of whatever your heart desires!"
- set category = "Admin.Events"
+ set category = "Event"
new /datum/centcom_podlauncher(usr)//create the datum
//Variables declared to change how items in the launch bay are picked and launched. (Almost) all of these are changed in the ui_act proc
diff --git a/code/modules/cargo/exports/materials.dm b/code/modules/cargo/exports/materials.dm
index 1bf35a94c440..f81654978ac2 100644
--- a/code/modules/cargo/exports/materials.dm
+++ b/code/modules/cargo/exports/materials.dm
@@ -26,11 +26,6 @@
// Materials. Prices have been heavily nerfed from the original values; mining is boring, so it shouldn't be a good way to make money.
-/datum/export/material/bananium
- cost = 250
- material_id = /datum/material/bananium
- message = "cm3 of bananium"
-
/datum/export/material/diamond
cost = 125
material_id = /datum/material/diamond
@@ -62,15 +57,10 @@
material_id = /datum/material/titanium
message = "cm3 of titanium"
-/datum/export/material/adamantine
+/datum/export/material/hellstone
cost = 125
- material_id = /datum/material/adamantine
- message = "cm3 of adamantine"
-
-/datum/export/material/mythril
- cost = 375
- material_id = /datum/material/mythril
- message = "cm3 of mythril"
+ material_id = /datum/material/hellstone
+ message = "cm3 of hellstone"
/datum/export/material/bscrystal
cost = 75
@@ -82,11 +72,6 @@
message = "cm3 of plastic"
material_id = /datum/material/plastic
-/datum/export/material/runite
- cost = 150
- message = "cm3 of runite"
- material_id = /datum/material/runite
-
/datum/export/material/metal
cost = 2
message = "cm3 of metal"
diff --git a/code/modules/cargo/packs/ammo.dm b/code/modules/cargo/packs/ammo.dm
index 5d94d25b61c4..ab521998f07c 100644
--- a/code/modules/cargo/packs/ammo.dm
+++ b/code/modules/cargo/packs/ammo.dm
@@ -341,6 +341,12 @@
contains = list(/obj/item/ammo_box/a4570)
cost = 500
+/datum/supply_pack/ammo/a4570_box/match
+ name = ".45-70 Match Crate"
+ desc = "Contains a twelve-round box containing devastatingly powerful .45-70 caliber ammunition, that travels faster, pierces armour better, and ricochets off targets."
+ contains = list(/obj/item/ammo_box/a4570/match)
+ cost = 750
+
/datum/supply_pack/ammo/ferropelletboxcrate
name = "Ferromagnetic Pellet Box Crate"
desc = "Contains a fifty-round ferromagnetic pellet ammo box for gauss guns such as the Claris."
diff --git a/code/modules/cargo/packs/machinery.dm b/code/modules/cargo/packs/machinery.dm
index a2a97c2135de..e51e2c8e4922 100644
--- a/code/modules/cargo/packs/machinery.dm
+++ b/code/modules/cargo/packs/machinery.dm
@@ -66,25 +66,22 @@
/datum/supply_pack/machinery/thermomachine
name = "Thermomachine Crate"
desc = "Freeze or heat your air."
- cost = 2000
- contains = list(/obj/item/circuitboard/machine/thermomachine,
- /obj/item/circuitboard/machine/thermomachine)
+ cost = 1000
+ contains = list(/obj/item/circuitboard/machine/thermomachine)
crate_name = "thermomachine crate"
/datum/supply_pack/machinery/portapump
name = "Portable Air Pump Crate"
- desc = "Want to drain a room of air without losing a drop? We've got you covered. Contains two portable air pumps."
- cost = 3000
- contains = list(/obj/machinery/portable_atmospherics/pump,
- /obj/machinery/portable_atmospherics/pump)
+ desc = "Want to drain a room of air without losing a drop? We've got you covered. Contains a portable air pump."
+ cost = 1500
+ contains = list(/obj/machinery/portable_atmospherics/pump)
crate_name = "portable air pump crate"
/datum/supply_pack/machinery/portascrubber
name = "Portable Scrubber Crate"
- desc = "Clean up that pesky plasma leak with your very own set of two portable scrubbers."
- cost = 3000
- contains = list(/obj/machinery/portable_atmospherics/scrubber,
- /obj/machinery/portable_atmospherics/scrubber)
+ desc = "Clean up that pesky plasma leak with your very own portable scrubber."
+ cost = 1500
+ contains = list(/obj/machinery/portable_atmospherics/scrubber)
crate_name = "portable scrubber crate"
/datum/supply_pack/machinery/hugescrubber
@@ -155,11 +152,9 @@
/datum/supply_pack/machinery/wall_shield_gen
name = "Shield Generator Crate"
- desc = "These four shield wall generators are guaranteed to keep any unwanted lifeforms on the outside, where they belong! Not rated for containing singularities or tesla balls."
- cost = 2000
+ desc = "These two shield wall generators are guaranteed to keep any unwanted lifeforms on the outside, where they belong! Not rated for containing singularities or tesla balls."
+ cost = 1000
contains = list(/obj/machinery/power/shieldwallgen,
- /obj/machinery/power/shieldwallgen,
- /obj/machinery/power/shieldwallgen,
/obj/machinery/power/shieldwallgen)
crate_name = "shield generators crate"
crate_type = /obj/structure/closet/crate/secure/plasma
diff --git a/code/modules/cargo/packs/mechs.dm b/code/modules/cargo/packs/mechs.dm
index b28d16359d5e..376c22fc0db8 100644
--- a/code/modules/cargo/packs/mechs.dm
+++ b/code/modules/cargo/packs/mechs.dm
@@ -103,21 +103,17 @@ Mech Equipment
/datum/supply_pack/mech/equipment/drill
name = "Mech drill kit"
- desc = "A trio of mechanized drills"
- cost = 1500
+ desc = "Contains one mechanized drill for heavy duty digging."
+ cost = 500
contains = list(
- /obj/item/mecha_parts/mecha_equipment/drill,
- /obj/item/mecha_parts/mecha_equipment/drill,
/obj/item/mecha_parts/mecha_equipment/drill
)
-/datum/supply_pack/mech/equipment/scanners
+/datum/supply_pack/mech/equipment/scanner
name = "Mech scanner kit"
- desc = "A trio of electronic mining scanners, graded to interface with a mech"
- cost = 1000
+ desc = "An electronic mining scanner, graded to interface with a mech."
+ cost = 350
contains = list(
- /obj/item/mecha_parts/mecha_equipment/mining_scanner,
- /obj/item/mecha_parts/mecha_equipment/mining_scanner,
/obj/item/mecha_parts/mecha_equipment/mining_scanner
)
@@ -131,10 +127,9 @@ Mech Equipment
/datum/supply_pack/mech/equipment/clamp
name = "Mech clamp kit"
- desc = "Two clamps designed for mechanized freight hauling."
- cost = 700
+ desc = "Contains a clamp designed for mechanized freight hauling."
+ cost = 350
contains = list(
- /obj/item/mecha_parts/mecha_equipment/hydraulic_clamp,
/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp
)
@@ -148,7 +143,7 @@ Mech Equipment
/datum/supply_pack/mech/equipment/ripley_upgrade
name = "APLU upgrade kit"
- desc = "The components needed to upgrade an APLU MK-I to be spaceworthy"
+ desc = "Contains an APLU MK II upgrade kit. The upgrade will replace the cockpit with a spaceworthy canopy, but the added weight makes it slower."
cost = 1500
contains = list(
/obj/item/mecha_parts/mecha_equipment/conversion_kit/ripley
@@ -159,7 +154,7 @@ weapons
*/
/datum/supply_pack/mech/equipment/pka
- name = "Proto-Kinetic Accelerator kit"
+ name = "Mech Mounted Proto-Kinetic Accelerator kit"
desc = "A ranged mining attachment for any mech."
cost = 1500
contains = list(
diff --git a/code/modules/cargo/packs/medical.dm b/code/modules/cargo/packs/medical.dm
index d49e9760da81..08b576937138 100644
--- a/code/modules/cargo/packs/medical.dm
+++ b/code/modules/cargo/packs/medical.dm
@@ -61,10 +61,9 @@
/datum/supply_pack/medical/defibs
name = "Defibrillator Crate"
- desc = "Contains two defibrillators for bringing the recently deceased back to life."
- cost = 1500
- contains = list(/obj/item/defibrillator/loaded,
- /obj/item/defibrillator/loaded)
+ desc = "Contains a defibrillator for bringing the recently deceased back to life."
+ cost = 750
+ contains = list(/obj/item/defibrillator/loaded)
crate_name = "defibrillator crate"
/datum/supply_pack/medical/surgery
diff --git a/code/modules/cargo/packs/spacesuit_armor.dm b/code/modules/cargo/packs/spacesuit_armor.dm
index 78e7d0fb1ff0..8346ea00b06e 100644
--- a/code/modules/cargo/packs/spacesuit_armor.dm
+++ b/code/modules/cargo/packs/spacesuit_armor.dm
@@ -34,8 +34,7 @@
name = "Medical Hardsuit Crate"
desc = "One medical hardsuit, resistant to diseases and useful for retrieving patients in space."
cost = 1500
- contains = list(/obj/item/clothing/suit/space/hardsuit/medical,
- /obj/item/clothing/suit/space/hardsuit/medical)
+ contains = list(/obj/item/clothing/suit/space/hardsuit/medical)
crate_name = "medical hardsuit crate"
crate_type = /obj/structure/closet/crate/medical
diff --git a/code/modules/cargo/packs/tools.dm b/code/modules/cargo/packs/tools.dm
index 92726a3ab6a6..6b43448a5d81 100644
--- a/code/modules/cargo/packs/tools.dm
+++ b/code/modules/cargo/packs/tools.dm
@@ -67,14 +67,11 @@
)
crate_name = "basic mining crate"
-/datum/supply_pack/tools/jackhammers
+/datum/supply_pack/tools/jackhammer
name = "Jackhammer Crate"
- desc = "Contains two jackhammers, ideal for breaking rocks and breaking hull."
- cost = 3500
- contains = list(
- /obj/item/pickaxe/drill/jackhammer,
- /obj/item/pickaxe/drill/jackhammer,
- )
+ desc = "Contains a jackhammer, ideal for breaking rocks and breaking hull."
+ cost = 1750
+ contains = list(/obj/item/pickaxe/drill/jackhammer)
crate_name = "jackhammer crate"
@@ -87,10 +84,9 @@
/datum/supply_pack/tools/insulated_gloves
name = "Insulated Gloves Crate"
- desc = "The backbone of modern society. Barely ever ordered for actual engineering. Contains two insulated gloves."
- cost = 1500
- contains = list(/obj/item/clothing/gloves/color/yellow,
- /obj/item/clothing/gloves/color/yellow)
+ desc = "The backbone of modern society. Barely ever ordered for actual engineering. Contains a pair of insulated gloves."
+ cost = 750
+ contains = list(/obj/item/clothing/gloves/color/yellow)
crate_name = "insulated gloves crate"
/datum/supply_pack/tools/jetpack
@@ -101,13 +97,12 @@
crate_name = "jetpack crate"
crate_type = /obj/structure/closet/crate/secure/plasma
-/datum/supply_pack/tools/transfer_valves
+/datum/supply_pack/tools/transfer_valve
name = "Tank Transfer Valves Crate"
- desc = "The key ingredient for making a lot of people very angry very fast. Contains two tank transfer valves."
- cost = 6000
- contains = list(/obj/item/transfer_valve,
- /obj/item/transfer_valve)
- crate_name = "tank transfer valves crate"
+ desc = "The key ingredient for making a lot of people very angry very fast. Contains a tank transfer valve."
+ cost = 3000
+ contains = list(/obj/item/transfer_valve)
+ crate_name = "tank transfer valve crate"
crate_type = /obj/structure/closet/crate/secure/science
/*
diff --git a/code/modules/client/loadout/loadout_accessories.dm b/code/modules/client/loadout/loadout_accessories.dm
index 40702e5fc2be..b81588c8e72e 100644
--- a/code/modules/client/loadout/loadout_accessories.dm
+++ b/code/modules/client/loadout/loadout_accessories.dm
@@ -77,6 +77,11 @@
description = "Standard hand coverings for everyday use."
path = /obj/item/clothing/gloves/color/white
+/datum/gear/accessory/gloves/fingerless
+ display_name = "fingerless gloves"
+ description = "Radical hand coverings for everyday use."
+ path = /obj/item/clothing/gloves/fingerless
+
/datum/gear/accessory/gloves/evening
display_name = "evening gloves"
description = "Excessively fancy elbow-length gloves."
diff --git a/code/modules/client/loadout/loadout_general.dm b/code/modules/client/loadout/loadout_general.dm
index d9e6d8f13020..4c081a67e92f 100644
--- a/code/modules/client/loadout/loadout_general.dm
+++ b/code/modules/client/loadout/loadout_general.dm
@@ -36,7 +36,7 @@
/datum/gear/mug
display_name = "coffee mug"
- path = /obj/item/reagent_containers/food/drinks/britcup
+ path = /obj/item/reagent_containers/food/drinks/mug
/datum/gear/rilena_mug
display_name = "coffee mug, rilena"
@@ -146,6 +146,10 @@
display_name = "hair dye"
path = /obj/item/dyespray
+/datum/gear/colorsalve
+ display_name = "Elzuose color salve"
+ path = /obj/item/colorsalve
+
/datum/gear/tablebell
display_name = "table bell, brass"
path = /obj/item/table_bell/brass
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index ed163f01ba6c..51985fa11e82 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -154,11 +154,12 @@ GLOBAL_LIST_EMPTY(preferences_datums)
)
var/fbp = FALSE
var/phobia = "spiders"
+ var/preferred_smoke_brand = PREF_CIG_SPACE
var/list/alt_titles_preferences = list()
var/list/custom_names = list()
var/preferred_ai_core_display = "Blue"
var/prefered_security_department = SEC_DEPT_RANDOM
-
+ var/generic_adjective = "Unremarkable"
//Quirk list
var/list/all_quirks = list()
@@ -928,6 +929,11 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "[phobia]
"
+ if("Smoker" in all_quirks)
+ dat += "Smoker
"
+
+ dat += "[preferred_smoke_brand]
"
+
if("body_size" in pref_species.default_features)
if(!mutant_category)
dat += APPEARANCE_CATEGORY_COLUMN
@@ -936,6 +942,11 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "[features["body_size"]]
"
+
+ dat += "Character Adjective
"
+
+ dat += "[generic_adjective]
"
+
mutant_category++
if(mutant_category >= MAX_MUTANT_ROWS)
dat += ""
@@ -1760,9 +1771,9 @@ GLOBAL_LIST_EMPTY(preferences_datums)
age = clamp(round(text2num(new_age)), pref_species.species_age_min, pref_species.species_age_max)
if("flavor_text")
- var/msg = sanitize(stripped_multiline_input(usr, "Set the flavor text in your 'examine' verb. This can also be used for OOC notes and preferences!", "Flavor Text", features["flavor_text"], 4096, TRUE))
+ var/msg = stripped_multiline_input(usr, "A snippet of text shown when others examine you, describing what you may look like. This can also be used for OOC notes.", "Flavor Text", html_decode(features["flavor_text"]), MAX_FLAVOR_LEN, TRUE)
if(msg) //WS edit - "Cancel" does not clear flavor text
- features["flavor_text"] = html_decode(msg)
+ features["flavor_text"] = msg
if("hair")
var/new_hair = input(user, "Choose your character's hair colour:", "Character Preference","#"+hair_color) as color|null
@@ -2186,6 +2197,19 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/phobiaType = input(user, "What are you scared of?", "Character Preference", phobia) as null|anything in SStraumas.phobia_types
if(phobiaType)
phobia = phobiaType
+ if("preferred_smoke_brand")
+ var/smokeBrand = input(user, "What cigarettes are your favorite?", "Character Preference", preferred_smoke_brand) as null|anything in GLOB.valid_smoke_types
+ if(smokeBrand)
+ preferred_smoke_brand = smokeBrand
+
+ if("generic_adjective")
+ var/selectAdj
+ if(istype(pref_species, /datum/species/ipc))
+ selectAdj = input(user, "In one word, how would you describe your character's appereance?", "Character Preference", generic_adjective) as null|anything in GLOB.ipc_preference_adjectives
+ else
+ selectAdj = input(user, "In one word, how would you describe your character's appereance?", "Character Preference", generic_adjective) as null|anything in GLOB.preference_adjectives
+ if(selectAdj)
+ generic_adjective = selectAdj
if ("max_chat_length")
var/desiredlength = input(user, "Choose the max character length of shown Runechat messages. Valid range is 1 to [CHAT_MESSAGE_MAX_LENGTH] (default: [initial(max_chat_length)]))", "Character Preference", max_chat_length) as null|num
@@ -2590,6 +2614,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
character.set_species(chosen_species, icon_update = FALSE, pref_load = TRUE)
//Because of how set_species replaces all bodyparts with new ones, hair needs to be set AFTER species.
character.dna.real_name = character.real_name
+ character.generic_adjective = generic_adjective
character.hair_color = hair_color
character.facial_hair_color = facial_hair_color
character.grad_color = features["grad_color"]
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index 6c62dd1a4fc3..7d075dae77dd 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -411,6 +411,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
READ_FILE(S["jumpsuit_style"], jumpsuit_style)
READ_FILE(S["uplink_loc"], uplink_spawn_loc)
READ_FILE(S["phobia"], phobia)
+ READ_FILE(S["preferred_smoke_brand"], preferred_smoke_brand)
READ_FILE(S["randomise"], randomise)
READ_FILE(S["body_size"], features["body_size"])
READ_FILE(S["prosthetic_limbs"], prosthetic_limbs)
@@ -513,17 +514,38 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
randomise = SANITIZE_LIST(randomise)
- if(gender == MALE)
- hairstyle = sanitize_inlist(hairstyle, GLOB.hairstyles_male_list)
- facial_hairstyle = sanitize_inlist(facial_hairstyle, GLOB.facial_hairstyles_male_list)
- else if(gender == FEMALE)
- hairstyle = sanitize_inlist(hairstyle, GLOB.hairstyles_female_list)
- facial_hairstyle = sanitize_inlist(facial_hairstyle, GLOB.facial_hairstyles_female_list)
+ // [CELADON-EDIT] - TAJARA
+ // if(gender == MALE)
+ // hairstyle = sanitize_inlist(hairstyle, GLOB.hairstyles_male_list)
+ // facial_hairstyle = sanitize_inlist(facial_hairstyle, GLOB.facial_hairstyles_male_list)
+ // else if(gender == FEMALE)
+ // hairstyle = sanitize_inlist(hairstyle, GLOB.hairstyles_female_list)
+ // facial_hairstyle = sanitize_inlist(facial_hairstyle, GLOB.facial_hairstyles_female_list) // CELADON-EDIT - ORIGINAL
+ if(species_id == "tajara")
+ hairstyle = sanitize_inlist(hairstyle, GLOB.tajara_hairs_list)
+ facial_hairstyle = sanitize_inlist(facial_hairstyle, GLOB.tajara_facial_hairs_list)
+ features["grad_style"] = sanitize_inlist(features["grad_style"], GLOB.hair_gradients_list)
+ features["grad_color"] = sanitize_hexcolor(features["grad_color"])
+ // [/CELADON-EDIT]
else
- hairstyle = sanitize_inlist(hairstyle, GLOB.hairstyles_list)
- facial_hairstyle = sanitize_inlist(facial_hairstyle, GLOB.facial_hairstyles_list)
- underwear = sanitize_inlist(underwear, GLOB.underwear_list)
- undershirt = sanitize_inlist(undershirt, GLOB.undershirt_list)
+ // [CELADON-EDIT] - TAJARA
+ // hairstyle = sanitize_inlist(hairstyle, GLOB.hairstyles_list)
+ // facial_hairstyle = sanitize_inlist(facial_hairstyle, GLOB.facial_hairstyles_list)
+ // underwear = sanitize_inlist(underwear, GLOB.underwear_list)
+ // undershirt = sanitize_inlist(undershirt, GLOB.undershirt_list) // CELADON-EDIT - ORIGINAL
+ if(gender == MALE)
+ hairstyle = sanitize_inlist(hairstyle, GLOB.hairstyles_male_list)
+ facial_hairstyle = sanitize_inlist(facial_hairstyle, GLOB.facial_hairstyles_male_list)
+ else if(gender == FEMALE)
+ hairstyle = sanitize_inlist(hairstyle, GLOB.hairstyles_female_list)
+ facial_hairstyle = sanitize_inlist(facial_hairstyle, GLOB.facial_hairstyles_female_list)
+ else
+ hairstyle = sanitize_inlist(hairstyle, GLOB.hairstyles_list)
+ facial_hairstyle = sanitize_inlist(facial_hairstyle, GLOB.facial_hairstyles_list)
+ underwear = sanitize_inlist(underwear, GLOB.underwear_list)
+ undershirt = sanitize_inlist(undershirt, GLOB.undershirt_list)
+ // [/CELADON-EDIT]
+
socks = sanitize_inlist(socks, GLOB.socks_list)
age = sanitize_integer(age, pref_species.species_age_min, pref_species.species_age_max, initial(age))
@@ -624,7 +646,9 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
WRITE_FILE(S["uplink_loc"] , uplink_spawn_loc)
WRITE_FILE(S["randomise"] , randomise)
WRITE_FILE(S["species"] , pref_species.id)
+ WRITE_FILE(S["preferred_smoke_brand"] , preferred_smoke_brand)
WRITE_FILE(S["phobia"] , phobia)
+ WRITE_FILE(S["generic_adjective"] , generic_adjective)
WRITE_FILE(S["body_size"] , features["body_size"])
WRITE_FILE(S["prosthetic_limbs"] , prosthetic_limbs)
WRITE_FILE(S["feature_mcolor"] , features["mcolor"])
diff --git a/code/modules/client/preferences_toggles.dm b/code/modules/client/preferences_toggles.dm
index b12e7cdf3d00..b40e1702652e 100644
--- a/code/modules/client/preferences_toggles.dm
+++ b/code/modules/client/preferences_toggles.dm
@@ -443,7 +443,7 @@ GLOBAL_LIST_INIT(ghost_orbits, list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS
//Admin Preferences
/client/proc/toggleadminhelpsound()
set name = "Hear/Silence Adminhelps"
- set category = "Prefs - Admin"
+ set category = "Preferences.Admin"
set desc = "Toggle hearing a notification when admin PMs are received"
if(!holder)
return
@@ -454,7 +454,7 @@ GLOBAL_LIST_INIT(ghost_orbits, list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS
/client/proc/toggleannouncelogin()
set name = "Do/Don't Announce Login"
- set category = "Prefs - Admin"
+ set category = "Preferences.Admin"
set desc = "Toggle if you want an announcement to admins when you login during a round"
if(!holder)
return
@@ -465,7 +465,7 @@ GLOBAL_LIST_INIT(ghost_orbits, list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS
/client/proc/toggle_hear_radio()
set name = "Show/Hide Radio Chatter"
- set category = "Prefs - Admin"
+ set category = "Preferences.Admin"
set desc = "Toggle seeing radiochatter from nearby radios and speakers"
if(!holder)
return
@@ -487,7 +487,7 @@ GLOBAL_LIST_INIT(ghost_orbits, list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS
/client/proc/deadchat()
set name = "Show/Hide Deadchat"
- set category = "Prefs - Admin"
+ set category = "Preferences.Admin"
set desc ="Toggles seeing deadchat"
if(!holder)
return
@@ -498,7 +498,7 @@ GLOBAL_LIST_INIT(ghost_orbits, list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS
/client/proc/toggleprayers()
set name = "Show/Hide Prayers"
- set category = "Prefs - Admin"
+ set category = "Preferences.Admin"
set desc = "Toggles seeing prayers"
if(!holder)
return
@@ -509,7 +509,7 @@ GLOBAL_LIST_INIT(ghost_orbits, list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS
/client/proc/toggle_prayer_sound()
set name = "Hear/Silence Prayer Sounds"
- set category = "Prefs - Admin"
+ set category = "Preferences.Admin"
set desc = "Hear Prayer Sounds"
if(!holder)
return
@@ -520,7 +520,7 @@ GLOBAL_LIST_INIT(ghost_orbits, list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS
/client/proc/colorasay()
set name = "Set Admin Say Color"
- set category = "Prefs - Admin"
+ set category = "Preferences.Admin"
set desc = "Set the color of your ASAY messages"
if(!holder)
return
@@ -537,7 +537,7 @@ GLOBAL_LIST_INIT(ghost_orbits, list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS
/client/proc/resetasaycolor()
set name = "Reset your Admin Say Color"
set desc = "Returns your ASAY Color to default"
- set category = "Prefs - Admin"
+ set category = "Preferences.Admin"
if(!holder)
return
if(!CONFIG_GET(flag/allow_admin_asaycolor))
diff --git a/code/modules/client/verbs/looc.dm b/code/modules/client/verbs/looc.dm
index 47d4e0e82aec..1c66a077a065 100644
--- a/code/modules/client/verbs/looc.dm
+++ b/code/modules/client/verbs/looc.dm
@@ -59,32 +59,33 @@ GLOBAL_VAR_INIT(normal_looc_colour, "#6699CC")
mob.log_talk(raw_msg, LOG_LOOC, tag = "(LOOC)")
- var/list/heard = get_hearers_in_view(7, get_top_level_mob(src.mob))
- for(var/mob/M in heard)
- if(!M.client)
+ var/list/heard = get_hearers_in_view(7, get_top_level_mob(mob))
+ for(var/mob/hearer_mob in heard)
+ var/client/hearer = hearer_mob.client
+
+ if(!hearer)
continue
- var/client/C = M.client
- if(key in C.prefs.ignoring)
+ if(key in hearer.prefs.ignoring)
continue
- if(holder?.fakekey in C.prefs.ignoring)
+ if(holder?.fakekey in hearer.prefs.ignoring)
continue
- if(!(C.prefs.chat_toggles & CHAT_LOOC))
+ if(!(hearer.prefs.chat_toggles & CHAT_LOOC))
continue
//Handled before admins so that they see this if they're in range anyways
- if(C.prefs.chat_on_map && mob.invisibility <= M.see_invisible)
- M.create_chat_message(mob, null, "\[LOOC: [raw_msg]\]", null, LOOC_MESSAGE)
+ if(hearer.prefs.chat_on_map && mob.invisibility <= hearer_mob.see_invisible)
+ hearer_mob.create_chat_message(mob, null, "\[LOOC: [raw_msg]\]", null, LOOC_MESSAGE)
- if(C in GLOB.admins)
+ if(hearer in GLOB.admins)
continue //handled in the next loop
if(GLOB.LOOC_COLOR)
- to_chat(C, "LOOC: [src.mob.name]: [msg]", MESSAGE_TYPE_LOOC)
+ to_chat(hearer, "LOOC: [mob.get_screentip_name(hearer)]: [msg]", MESSAGE_TYPE_LOOC)
else
- to_chat(C, "LOOC: [src.mob.name]: [msg]", MESSAGE_TYPE_LOOC)
+ to_chat(hearer, "LOOC: [mob.get_screentip_name(hearer)]: [msg]", MESSAGE_TYPE_LOOC)
for(var/client/C in GLOB.admins)
if(key in C.prefs.ignoring)
@@ -100,9 +101,9 @@ GLOBAL_VAR_INIT(normal_looc_colour, "#6699CC")
if (C.mob in heard)
prefix = "LOOC"
if(GLOB.LOOC_COLOR)
- to_chat(C, "[ADMIN_FLW(usr)] [prefix]: [src.key]/[src.mob.name]: [msg]", MESSAGE_TYPE_LOOC)
+ to_chat(C, "[ADMIN_FLW(usr)] [prefix]: [key]/[mob.real_name]: [msg]", MESSAGE_TYPE_LOOC)
else
- to_chat(C, "[ADMIN_FLW(usr)] [prefix]: [src.key]/[src.mob.name]: [msg]", MESSAGE_TYPE_LOOC)
+ to_chat(C, "[ADMIN_FLW(usr)] [prefix]: [key]/[mob.real_name]: [msg]", MESSAGE_TYPE_LOOC)
/proc/toggle_looc(toggle = null)
if(toggle == null)
diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm
index 203bcf416b13..f5c37b18997d 100644
--- a/code/modules/clothing/chameleon.dm
+++ b/code/modules/clothing/chameleon.dm
@@ -150,7 +150,7 @@
card.assignment = J.name
card.update_appearance()
card.assignment = old_assignment
- card.update_label()
+ card.name = "[(istype(src, /obj/item/card/id/syndicate)) ? "[initial(name)]" : "access card"][(!old_assignment) ? "" : " ([old_assignment])"]"
H.sec_hud_set_ID()
qdel(outfit)
diff --git a/code/modules/clothing/shoes/bananashoes.dm b/code/modules/clothing/shoes/bananashoes.dm
index a09ea07a3250..4ed246a587be 100644
--- a/code/modules/clothing/shoes/bananashoes.dm
+++ b/code/modules/clothing/shoes/bananashoes.dm
@@ -16,7 +16,7 @@
/obj/item/clothing/shoes/clown_shoes/banana_shoes/ComponentInitialize()
. = ..()
AddElement(/datum/element/update_icon_updates_onmob)
- AddComponent(/datum/component/material_container, list(/datum/material/bananium), 200000, TRUE, /obj/item/stack)
+ AddComponent(/datum/component/material_container, list(/datum/material/hellstone), 200000, TRUE, /obj/item/stack)
AddComponent(/datum/component/squeak, list('sound/items/bikehorn.ogg'=1), 75, falloff_exponent = 20)
/obj/item/clothing/shoes/clown_shoes/banana_shoes/step_action()
@@ -24,7 +24,7 @@
var/mob/wearer = loc
var/datum/component/material_container/bananium = GetComponent(/datum/component/material_container)
if(on && istype(wearer))
- if(bananium.get_material_amount(/datum/material/bananium) < 100)
+ if(bananium.get_material_amount(/datum/material/hellstone) < 100)
on = !on
if(!always_noslip)
clothing_flags &= ~NOSLIP
@@ -32,7 +32,7 @@
to_chat(loc, "You ran out of bananium!")
else
new /obj/item/grown/bananapeel/specialpeel(get_step(src,turn(wearer.dir, 180))) //honk
- bananium.use_amount_mat(100, /datum/material/bananium)
+ bananium.use_amount_mat(100, /datum/material/hellstone)
/obj/item/clothing/shoes/clown_shoes/banana_shoes/attack_self(mob/user)
var/datum/component/material_container/bananium = GetComponent(/datum/component/material_container)
@@ -48,7 +48,7 @@
/obj/item/clothing/shoes/clown_shoes/banana_shoes/ui_action_click(mob/user)
var/datum/component/material_container/bananium = GetComponent(/datum/component/material_container)
- if(bananium.get_material_amount(/datum/material/bananium))
+ if(bananium.get_material_amount(/datum/material/hellstone))
on = !on
update_appearance()
to_chat(user, "You [on ? "activate" : "deactivate"] the prototype shoes.")
diff --git a/code/modules/clothing/suits/cloaks.dm b/code/modules/clothing/suits/cloaks.dm
index bce5d5bd2445..4e3f6d5e3a9c 100644
--- a/code/modules/clothing/suits/cloaks.dm
+++ b/code/modules/clothing/suits/cloaks.dm
@@ -67,6 +67,11 @@
desc = "Worn by high ranking vampires of the transylvanian society of vampires."
icon_state = "trans"
+/obj/item/clothing/neck/cloak/bi
+ name = "solarian marine biologist cloak"
+ desc = "Commonly worn by members of the Solarian Marine Biologist Society, dedicated to the study and preservation of marine wildlife."
+ icon_state = "bi"
+
/obj/item/clothing/suit/hooded/cloak/goliath
name = "goliath cloak"
icon_state = "goliath_cloak"
diff --git a/code/modules/clothing/suits/hoodies.dm b/code/modules/clothing/suits/hoodies.dm
index e0b1ab28f812..f58d445c53f0 100644
--- a/code/modules/clothing/suits/hoodies.dm
+++ b/code/modules/clothing/suits/hoodies.dm
@@ -85,14 +85,13 @@
/obj/item/clothing/head/hooded/hood/fbp
name = "\improper FBP kepori hood"
desc = "A hood for your FBP hoodie."
+ icon_state = "hoodie_fbp"
item_state = "hoodie_fbp"
/obj/item/clothing/suit/hooded/hoodie/rilena
name = "K4L1 hoodie"
desc = "A hoodie themed to look like K4L1 from the popular webseries RILENA. It has a comfy pocket for keeping your hands warm."
- // [CELADON-ADD] - CELADON_FIXES - чиним код офов
icon_state = "hoodie_rilena"
- // [/CELADON-ADD]
item_state = "hoodie_rilena"
hoodtype = /obj/item/clothing/head/hooded/hood/rilena
@@ -113,5 +112,6 @@
/obj/item/clothing/head/hooded/hood/rilena
name = "RILENA: LMR K4L1 hood"
desc = "A hood for your RILENA themed hoodie."
+ icon_state = "hoodie_rilena"
item_state = "hoodie_rilena"
diff --git a/code/modules/clothing/under/_under.dm b/code/modules/clothing/under/_under.dm
index 7a8e21ae2bea..a28d6d323a83 100644
--- a/code/modules/clothing/under/_under.dm
+++ b/code/modules/clothing/under/_under.dm
@@ -86,7 +86,6 @@
if(attached_accessory && slot != ITEM_SLOT_HANDS && ishuman(user))
var/mob/living/carbon/human/H = user
attached_accessory.on_uniform_equip(src, user)
- H.fan_hud_set_fandom()
if(attached_accessory.above_suit)
H.update_inv_wear_suit()
@@ -101,7 +100,6 @@
attached_accessory.on_uniform_dropped(src, user)
if(ishuman(user))
var/mob/living/carbon/human/H = user
- H.fan_hud_set_fandom()
if(attached_accessory.above_suit)
H.update_inv_wear_suit()
@@ -136,7 +134,6 @@
var/mob/living/carbon/human/H = loc
H.update_inv_w_uniform()
H.update_inv_wear_suit()
- H.fan_hud_set_fandom()
return TRUE
@@ -158,7 +155,6 @@
var/mob/living/carbon/human/H = loc
H.update_inv_w_uniform()
H.update_inv_wear_suit()
- H.fan_hud_set_fandom()
/obj/item/clothing/under/examine(mob/user)
diff --git a/code/modules/clothing/under/accessories.dm b/code/modules/clothing/under/accessories.dm
index ed1d12be3fcb..76de51b173cd 100644
--- a/code/modules/clothing/under/accessories.dm
+++ b/code/modules/clothing/under/accessories.dm
@@ -376,45 +376,6 @@
for(var/i in 1 to 3)
new /obj/item/lipstick/random(src)
-////////////////
-//REAL BIG FAN//
-////////////////
-
-/obj/item/clothing/accessory/fan_clown_pin
- name = "Clown Pin"
- desc = "A pin to show off your appreciation for clowns and clowning"
- icon_state = "fan_clown_pin"
- above_suit = FALSE
- minimize_when_attached = TRUE
- attachment_slot = CHEST
-
-/obj/item/clothing/accessory/fan_clown_pin/on_uniform_equip(obj/item/clothing/under/U, user)
- var/mob/living/L = user
- if(HAS_TRAIT(L, TRAIT_FAN_CLOWN))
- SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "fan_clown_pin", /datum/mood_event/fan_clown_pin)
-
-/obj/item/clothing/accessory/fan_clown_pin/on_uniform_dropped(obj/item/clothing/under/U, user)
- var/mob/living/L = user
- if(HAS_TRAIT(L, TRAIT_FAN_CLOWN))
- SEND_SIGNAL(L, COMSIG_CLEAR_MOOD_EVENT, "fan_clown_pin")
-
-/obj/item/clothing/accessory/fan_mime_pin
- name = "Mime Pin"
- desc = "A pin to show off your appreciation for mimes and miming"
- icon_state = "fan_mime_pin"
- above_suit = FALSE
- minimize_when_attached = TRUE
- attachment_slot = CHEST
-
-/obj/item/clothing/accessory/fan_mime_pin/on_uniform_equip(obj/item/clothing/under/U, user)
- var/mob/living/L = user
- if(HAS_TRAIT(L, TRAIT_FAN_MIME))
- SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "fan_mime_pin", /datum/mood_event/fan_mime_pin)
-
-/obj/item/clothing/accessory/fan_mime_pin/on_uniform_dropped(obj/item/clothing/under/U, user)
- var/mob/living/L = user
- if(HAS_TRAIT(L, TRAIT_FAN_MIME))
- SEND_SIGNAL(L, COMSIG_CLEAR_MOOD_EVENT, "fan_mime_pin")
////////////////
//OONGA BOONGA//
diff --git a/code/modules/donator/_donator.dm b/code/modules/donator/_donator.dm
index b18dbe8f78b3..dd4df369cfea 100644
--- a/code/modules/donator/_donator.dm
+++ b/code/modules/donator/_donator.dm
@@ -23,7 +23,7 @@ GLOBAL_PROTECT(donators)
/client/proc/do_donator_redemption()
set name = "Redeem Donator Reward"
- set category = "Donator"
+ set category = "OOC.Donator"
set desc = "Redeem a reward"
var/mob/client_mob = mob
@@ -38,7 +38,7 @@ GLOBAL_PROTECT(donators)
/client/proc/do_donator_wcir()
set name = "What Can I Redeem"
- set category = "Donator"
+ set category = "OOC.Donator"
set desc = "Currently available redemptions"
donator?.what_can_i_redeem(src.mob)
diff --git a/code/modules/fishing/fishing_portal_machine.dm b/code/modules/fishing/fishing_portal_machine.dm
index 0cbeae7c3dac..a070e7b7f797 100644
--- a/code/modules/fishing/fishing_portal_machine.dm
+++ b/code/modules/fishing/fishing_portal_machine.dm
@@ -6,7 +6,7 @@
icon_state = "portal_off"
idle_power_usage = 0
- active_power_usage = 2000
+ active_power_usage = ACTIVE_DRAW_HIGH
anchored = FALSE
density = TRUE
@@ -35,12 +35,12 @@
/obj/machinery/fishing_portal_generator/proc/activate()
active = AddComponent(/datum/component/fishing_spot, fishing_source)
- use_power = ACTIVE_POWER_USE
+ set_active_power()
update_appearance()
/obj/machinery/fishing_portal_generator/proc/deactivate()
QDEL_NULL(active)
- use_power = IDLE_POWER_USE
+ set_idle_power()
update_appearance()
/obj/machinery/fishing_portal_generator/on_set_is_operational(old_value)
diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm
index 258e9a56217f..ced086e1dfc6 100644
--- a/code/modules/flufftext/Hallucination.dm
+++ b/code/modules/flufftext/Hallucination.dm
@@ -525,11 +525,11 @@ GLOBAL_LIST_INIT(hallucination_list, list(
/datum/hallucination/delusion
var/list/image/delusions = list()
-/datum/hallucination/delusion/New(mob/living/carbon/C, forced, force_kind = null , duration = 300,skip_nearby = TRUE, custom_icon = null, custom_icon_file = null, custom_name = null)
+/datum/hallucination/delusion/New(mob/living/carbon/C, forced, force_kind = null , duration = rand(30,300),skip_nearby = TRUE, custom_icon = null, custom_icon_file = null, custom_name = null)
set waitfor = FALSE
. = ..()
var/image/A = null
- var/kind = force_kind ? force_kind : pick("nothing","monkey","corgi","carp","skeleton","demon","zombie")
+ var/kind = force_kind ? force_kind : pick("doe","mi-go","carp","hermit","frontiersman","ramzi")
feedback_details += "Type: [kind]"
var/list/nearby
if(skip_nearby)
@@ -540,27 +540,24 @@ GLOBAL_LIST_INIT(hallucination_list, list(
if(skip_nearby && (H in nearby))
continue
switch(kind)
- if("nothing")
- A = image('icons/effects/effects.dmi',H,"nothing")
- A.name = "..."
- if("monkey")//Monkey
- A = image('icons/mob/monkey.dmi',H,"monkey1")
- A.name = "Monkey ([rand(1,999)])"
+ if("doe")//Doe
+ A = image('icons/mob/animal.dmi',H,"deer-doe")
+ A.name = "Doe"
if("carp")//Carp
A = image('icons/mob/carp.dmi',H,"carp")
A.name = "Space Carp"
- if("corgi")//Corgi
- A = image('icons/mob/pets.dmi',H,"corgi")
- A.name = "Corgi"
- if("skeleton")//Skeletons
- A = image('icons/mob/human.dmi',H,"skeleton")
- A.name = "Skeleton"
- if("zombie")//Zombies
- A = image('icons/mob/human.dmi',H,"zombie")
- A.name = "Zombie"
- if("demon")//Demon
- A = image('icons/mob/mob.dmi',H,"daemon")
- A.name = "Demon"
+ if("mi-go")//Mi-go
+ A = image('icons/mob/animal.dmi',H,"mi-go")
+ A.name = "Mi-go"
+ if("hermit")//Hermit
+ A = image('icons/mob/simple_human.dmi',H,"survivor_gunslinger")
+ A.name = "Hermit Soldier"
+ if("frontiersman")//Frontiersman
+ A = image('icons/mob/simple_human.dmi',H,"frontiersmanrangedminigun")
+ A.name = "Frontiersman"
+ if("ramzi")//Ramzi
+ A = image('icons/mob/simple_human.dmi',H,"ramzi_base")
+ A.name = "Ramzi Commando"
if("custom")
A = image(custom_icon_file, H, custom_icon)
A.name = custom_name
@@ -568,8 +565,7 @@ GLOBAL_LIST_INIT(hallucination_list, list(
if(target.client)
delusions |= A
target.client.images |= A
- if(duration)
- QDEL_IN(src, duration)
+ addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(qdel), src), duration)
/datum/hallucination/delusion/Destroy()
for(var/image/I in delusions)
@@ -580,25 +576,28 @@ GLOBAL_LIST_INIT(hallucination_list, list(
/datum/hallucination/self_delusion
var/image/delusion
-/datum/hallucination/self_delusion/New(mob/living/carbon/C, forced, force_kind = null , duration = 300, custom_icon = null, custom_icon_file = null, wabbajack = TRUE) //set wabbajack to false if you want to use another fake source
+/datum/hallucination/self_delusion/New(mob/living/carbon/C, forced, force_kind = null , duration = rand(30,300), custom_icon = null, custom_icon_file = null, wabbajack = TRUE) //set wabbajack to false if you want to use another fake source
set waitfor = FALSE
..()
var/image/A = null
- var/kind = force_kind ? force_kind : pick("monkey","corgi","carp","skeleton","demon","zombie","robot")
+ var/kind = force_kind ? force_kind : pick("doe","mi-go","carp","hermit","frontiersman","ramzi","pai","robot")
feedback_details += "Type: [kind]"
switch(kind)
- if("monkey")//Monkey
- A = image('icons/mob/monkey.dmi',target,"monkey1")
+ if("doe")//Doe
+ A = image('icons/mob/animal.dmi',target,"deer-doe")
if("carp")//Carp
A = image('icons/mob/animal.dmi',target,"carp")
- if("corgi")//Corgi
- A = image('icons/mob/pets.dmi',target,"corgi")
- if("skeleton")//Skeletons
- A = image('icons/mob/human.dmi',target,"skeleton")
- if("zombie")//Zombies
- A = image('icons/mob/human.dmi',target,"zombie")
- if("demon")//Demon
- A = image('icons/mob/mob.dmi',target,"daemon")
+ if("mi-go")//Mi-go
+ A = image('icons/mob/animal.dmi',target,"mi-go")
+ if("hermit")//Hermit
+ A = image('icons/mob/simple_human.dmi',target,"survivor_base")
+ if("frontiersman")//Frontiersman
+ A = image('icons/mob/simple_human.dmi',target,"frontiersmanranged")
+ if("ramzi")//Ramzi
+ A = image('icons/mob/simple_human.dmi',target,"ramzi_base")
+ if("pai")//pAI
+ A = image('icons/mob/pai.dmi',target,"repairbot")
+ target.playsound_local(target,'sound/effects/pai_boot.ogg', 75, 1)
if("robot")//Cyborg
A = image('icons/mob/robots.dmi',target,"robot")
target.playsound_local(target,'sound/voice/liveagain.ogg', 75, 1)
@@ -610,7 +609,7 @@ GLOBAL_LIST_INIT(hallucination_list, list(
to_chat(target, "...you look down and notice... you aren't the same as you used to be...")
delusion = A
target.client.images |= A
- QDEL_IN(src, duration)
+ addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(qdel), src), duration)
/datum/hallucination/self_delusion/Destroy()
if(target.client)
diff --git a/code/modules/food_and_drinks/drinks/drinks.dm b/code/modules/food_and_drinks/drinks/drinks.dm
index 8f88924930f4..aa2830daee92 100644
--- a/code/modules/food_and_drinks/drinks/drinks.dm
+++ b/code/modules/food_and_drinks/drinks/drinks.dm
@@ -120,27 +120,36 @@
if(!.) //if the bottle wasn't caught
smash(hit_atom, throwingdatum?.thrower, TRUE)
-/obj/item/reagent_containers/food/drinks/proc/smash(atom/target, mob/thrower, ranged = FALSE)
+/obj/item/reagent_containers/food/drinks/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum)
+ smash()
+ ..()
+
+/obj/item/reagent_containers/food/drinks/proc/smash(atom/target = FALSE, mob/thrower = FALSE, ranged = FALSE)
if(!isGlass)
return
- if(QDELING(src) || !target || !(flags_1 & INITIALIZED_1)) //Invalid loc
- return
- if(bartender_check(target) && ranged)
+ if(QDELING(src) || !(flags_1 & INITIALIZED_1)) //Invalid loc
return
- var/obj/item/broken_bottle/B = new (loc)
- B.icon_state = icon_state
- var/icon/I = new(icon, icon_state)
- I.Blend(B.broken_outline, ICON_OVERLAY, rand(5), 1)
- I.SwapColor(rgb(255, 0, 220, 255), rgb(0, 0, 0, 0))
- B.icon = I
- B.name = "broken [name]"
+ if(target)
+ if(bartender_check(target) && ranged)
+ return
+ var/obj/item/broken_bottle/smashed_bottle = new (loc)
+ if(!ranged && thrower)
+ thrower.put_in_hands(smashed_bottle)
+ smashed_bottle.icon_state = icon_state
+ var/icon/new_icon = new(icon, icon_state)
+ new_icon.Blend(smashed_bottle.broken_outline, ICON_OVERLAY, rand(5), 1)
+ new_icon.SwapColor(rgb(255, 0, 220, 255), rgb(0, 0, 0, 0))
+ smashed_bottle.icon = new_icon
+ smashed_bottle.name = "broken [name]"
if(prob(33))
- var/obj/item/shard/S = new(drop_location())
- target.Bumped(S)
+ var/obj/item/shard/new_shard = new(drop_location())
+ if(target)
+ target.Bumped(new_shard)
playsound(src, "shatter", 70, TRUE)
- transfer_fingerprints_to(B)
+ transfer_fingerprints_to(smashed_bottle)
qdel(src)
- target.Bumped(B)
+ if(target)
+ target.Bumped(smashed_bottle)
/obj/item/reagent_containers/food/drinks/bullet_act(obj/projectile/P)
. = ..()
diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm
index 4da78a5989a1..c19fd9dd3baa 100644
--- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm
+++ b/code/modules/food_and_drinks/drinks/drinks/bottle.dm
@@ -34,39 +34,7 @@
volume = 50
custom_price = 55
-/obj/item/reagent_containers/food/drinks/bottle/smash(mob/living/target, mob/thrower, ranged = FALSE)
- if(QDELING(src) || !target || !(flags_1 & INITIALIZED_1)) //Invalid loc
- return
- //Creates a shattering noise and replaces the bottle with a broken_bottle
- if(bartender_check(target) && ranged)
- return
- var/obj/item/broken_bottle/B = new (loc)
- if(!ranged && thrower)
- thrower.put_in_hands(B)
- B.icon_state = icon_state
-
- var/icon/I = new('icons/obj/drinks/drinks.dmi', src.icon_state)
- I.Blend(B.broken_outline, ICON_OVERLAY, rand(5), 1)
- I.SwapColor(rgb(255, 0, 220, 255), rgb(0, 0, 0, 0))
- B.icon = I
-
- if(isGlass)
- if(prob(33))
- var/obj/item/shard/S = new(drop_location())
- target.Bumped(S)
- playsound(src, "shatter", 70, TRUE)
- else
- B.force = 0
- B.throwforce = 0
- B.desc = "A carton with the bottom half burst open. Might give you a papercut."
- B.name = "broken [name]"
- transfer_fingerprints_to(B)
-
- qdel(src)
- target.Bumped(B)
-
/obj/item/reagent_containers/food/drinks/bottle/attack(mob/living/target, mob/living/user)
-
if(!target)
return
diff --git a/code/modules/food_and_drinks/kitchen_machinery/coffeemaker.dm b/code/modules/food_and_drinks/kitchen_machinery/coffeemaker.dm
index 7b98be6a16c4..bebf3dda83a4 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/coffeemaker.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/coffeemaker.dm
@@ -6,6 +6,8 @@
icon = 'icons/obj/machines/coffeemaker.dmi'
icon_state = "coffeemaker_nopot_nocart"
base_icon_state = "coffeemaker"
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MINIMAL
resistance_flags = FIRE_PROOF | ACID_PROOF
circuit = /obj/item/circuitboard/machine/coffeemaker
var/obj/item/reagent_containers/food/drinks/bottle/coffeepot/coffeepot = null
@@ -375,11 +377,12 @@
if(!silent)
playsound(src, 'sound/machines/coffeemaker_brew.ogg', 20, vary = TRUE)
toggle_steam()
- use_power(active_power_usage * time * 0.1) // .1 needed here to convert time (in deciseconds) to seconds such that watts * seconds = joules
+ set_active_power()
addtimer(CALLBACK(src, PROC_REF(stop_operating)), time / speed)
/obj/machinery/coffeemaker/proc/stop_operating()
brewing = FALSE
+ set_idle_power()
toggle_steam()
/obj/machinery/coffeemaker/proc/brew()
diff --git a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm
index 4fa5354339c5..8eccd04c8404 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm
@@ -25,7 +25,7 @@
icon_state = "fryer_off"
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 5
+ idle_power_usage = IDLE_DRAW_LOW
layer = BELOW_OBJ_LAYER
var/obj/item/reagent_containers/food/snacks/deepfryholder/frying //What's being fried RIGHT NOW?
var/cook_time = 0
diff --git a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm
index fad3c3bc963f..7be027c012f4 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm
@@ -5,8 +5,8 @@
icon_state = "grinder"
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 2
- active_power_usage = 500
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MEDIUM
circuit = /obj/item/circuitboard/machine/gibber
var/operating = FALSE //Is it on?
diff --git a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm
index 4a739d2ab7fc..2762892110f8 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm
@@ -8,8 +8,8 @@
layer = BELOW_OBJ_LAYER
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 5
- active_power_usage = 100
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MEDIUM
circuit = /obj/item/circuitboard/machine/microwave
pass_flags = PASSTABLE
light_color = LIGHT_COLOR_YELLOW
@@ -275,6 +275,7 @@
/obj/machinery/microwave/proc/start()
wzhzhzh()
+ set_active_power()
loop(MICROWAVE_NORMAL, 10)
/obj/machinery/microwave/proc/start_can_fail()
@@ -303,11 +304,11 @@
pre_success()
return
time--
- use_power(500)
addtimer(CALLBACK(src, PROC_REF(loop), type, time, wait), wait)
/obj/machinery/microwave/proc/loop_finish()
operating = FALSE
+ set_idle_power()
var/metal = 0
for(var/obj/item/O in ingredients)
@@ -330,6 +331,7 @@
/obj/machinery/microwave/proc/pre_fail()
broken = 2
operating = FALSE
+ set_idle_power()
spark()
after_finish_loop()
@@ -338,6 +340,7 @@
/obj/machinery/microwave/proc/muck_finish()
visible_message("\The [src] gets covered in muck!")
+ set_idle_power()
dirty = 100
dirty_anim_playing = FALSE
@@ -382,6 +385,12 @@
playsound(src, 'sound/items/cig_light.ogg', 50, 1)
moveToNullspace()
+
+/obj/item/ration_heater/get_temperature()
+ if(!uses)
+ return 0
+ . = ..()
+
/obj/item/ration_heater/proc/clear_cooking(datum/source)
SIGNAL_HANDLER
UnregisterSignal(tocook, COMSIG_PARENT_QDELETING)
diff --git a/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm b/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm
index 005ffa7632ba..79382343e1ae 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm
@@ -8,8 +8,8 @@ GLOBAL_LIST_EMPTY(monkey_recyclers)
layer = BELOW_OBJ_LAYER
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 5
- active_power_usage = 50
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MEDIUM
circuit = /obj/item/circuitboard/machine/monkey_recycler
var/stored_matter = 0
var/cube_production = 0.2
diff --git a/code/modules/food_and_drinks/kitchen_machinery/processor.dm b/code/modules/food_and_drinks/kitchen_machinery/processor.dm
index ba26a265f8ee..bc17a9fd22af 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/processor.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/processor.dm
@@ -7,8 +7,8 @@
layer = BELOW_OBJ_LAYER
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 5
- active_power_usage = 50
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MEDIUM
circuit = /obj/item/circuitboard/machine/processor
var/broken = FALSE
var/processing = FALSE
diff --git a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
index ed1347fb5124..878bd2b1b722 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
@@ -9,8 +9,8 @@
layer = BELOW_OBJ_LAYER
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 5
- active_power_usage = 100
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MINIMAL
circuit = /obj/item/circuitboard/machine/smartfridge
var/max_n_of_items = 1500
@@ -245,6 +245,7 @@
icon = 'icons/obj/hydroponics/equipment.dmi'
icon_state = "drying_rack"
use_power = IDLE_POWER_USE
+ circuit = null
idle_power_usage = 5
active_power_usage = 200
visible_contents = FALSE
@@ -258,7 +259,6 @@
/obj/machinery/smartfridge/drying_rack/on_deconstruction()
new /obj/item/stack/sheet/mineral/wood(drop_location(), 10)
- ..()
/obj/machinery/smartfridge/drying_rack/RefreshParts()
/obj/machinery/smartfridge/drying_rack/default_deconstruction_screwdriver()
@@ -326,10 +326,10 @@
/obj/machinery/smartfridge/drying_rack/proc/toggle_drying(forceoff)
if(drying || forceoff)
drying = FALSE
- use_power = IDLE_POWER_USE
+ set_idle_power()
else
drying = TRUE
- use_power = ACTIVE_POWER_USE
+ set_active_power()
update_appearance()
/obj/machinery/smartfridge/drying_rack/proc/rack_dry()
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_soup.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_soup.dm
index 0d7f403b538d..d0558f94fdb5 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_soup.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_soup.dm
@@ -152,7 +152,7 @@
/datum/reagent/water = 10,
/obj/item/reagent_containers/glass/bowl = 1,
/obj/item/reagent_containers/food/snacks/grown/banana = 1,
- /obj/item/stack/ore/bananium = 1
+ /obj/item/stack/sheet/mineral/hidden/hellstone = 1
)
result = /obj/item/reagent_containers/food/snacks/soup/clownstears
subcategory = CAT_SOUP
diff --git a/code/modules/holodeck/items.dm b/code/modules/holodeck/items.dm
index f1a5862649a4..d56fd4f9c32c 100644
--- a/code/modules/holodeck/items.dm
+++ b/code/modules/holodeck/items.dm
@@ -152,8 +152,8 @@
var/eventstarted = FALSE
use_power = IDLE_POWER_USE
- idle_power_usage = 2
- active_power_usage = 6
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MINIMAL
power_channel = AREA_USAGE_ENVIRON
/obj/machinery/readybutton/attack_ai(mob/user as mob)
diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm
index e9e40fd167b8..c3bcc09940d0 100644
--- a/code/modules/hydroponics/biogenerator.dm
+++ b/code/modules/hydroponics/biogenerator.dm
@@ -5,7 +5,7 @@
icon_state = "biogen-empty"
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 40
+ idle_power_usage = IDLE_DRAW_LOW
circuit = /obj/item/circuitboard/machine/biogenerator
var/processing = FALSE
var/obj/item/reagent_containers/glass/beaker = null
diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm
index 7fa710323207..ed58e86e16dc 100644
--- a/code/modules/hydroponics/grown.dm
+++ b/code/modules/hydroponics/grown.dm
@@ -69,20 +69,19 @@
/obj/item/reagent_containers/food/snacks/grown/attackby(obj/item/O, mob/user, params)
..()
if (istype(O, /obj/item/plant_analyzer))
- var/msg = "*---------*\n This is \a [src].\n"
+ var/msg = "This is \a [src].\n"
if(seed)
- msg += seed.get_analyzer_text()
+ msg += "[seed.get_analyzer_text()]\n"
var/reag_txt = ""
if(seed)
for(var/reagent_id in seed.reagents_add)
var/datum/reagent/R = GLOB.chemical_reagents_list[reagent_id]
var/amt = reagents.get_reagent_amount(reagent_id)
- reag_txt += "\n- [R.name]: [amt]"
+ reag_txt += "- [R.name]: [amt]\n"
if(reag_txt)
msg += reag_txt
- msg += "
*---------*"
- to_chat(user, msg)
+ to_chat(user, examine_block(msg))
else
if(seed)
for(var/datum/plant_gene/trait/T in seed.genes)
diff --git a/code/modules/hydroponics/growninedible.dm b/code/modules/hydroponics/growninedible.dm
index 3ecb34762ae1..f97596c348f2 100644
--- a/code/modules/hydroponics/growninedible.dm
+++ b/code/modules/hydroponics/growninedible.dm
@@ -35,11 +35,10 @@
/obj/item/grown/attackby(obj/item/O, mob/user, params)
..()
if (istype(O, /obj/item/plant_analyzer))
- var/msg = "*---------*\n This is \a [src]\n"
+ var/msg = "This is \a [src]\n"
if(seed)
msg += seed.get_analyzer_text()
- msg += ""
- to_chat(usr, msg)
+ to_chat(usr, examine_block(msg))
return
/obj/item/grown/proc/add_juice()
diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm
index a5e66f6df4ef..bbfeaeeb5b5a 100644
--- a/code/modules/hydroponics/hydroponics.dm
+++ b/code/modules/hydroponics/hydroponics.dm
@@ -1,3 +1,6 @@
+#define HYDRO_MAX_PEST 10
+#define HYDRO_MAX_WEED 10
+#define HYDRO_MAX_TOXIC 100
/obj/machinery/hydroponics
name = "hydroponics tray"
icon = 'icons/obj/hydroponics/equipment.dmi'
@@ -6,7 +9,9 @@
pixel_z = 1
obj_flags = CAN_BE_HIT | UNIQUE_RENAME
circuit = /obj/item/circuitboard/machine/hydroponics
- idle_power_usage = 0
+ use_power = IDLE_POWER_USE
+ idle_power_usage = IDLE_DRAW_LOW
+ active_power_usage = ACTIVE_DRAW_HIGH
var/waterlevel = 100 //The amount of water in the tray (max 100)
var/maxwater = 100 //The maximum amount of water in the tray
var/nutridrain = 1 // How many units of nutrient will be drained in the tray
@@ -114,7 +119,7 @@
if(!powered() && self_sustaining)
visible_message("[name]'s auto-grow functionality shuts off!")
- idle_power_usage = 0
+ set_idle_power()
self_sustaining = FALSE
update_appearance()
@@ -253,7 +258,7 @@
adjustWeeds(1 / rating)
// Weeeeeeeeeeeeeeedddssss
- if(weedlevel >= 10 && prob(50)) // At this point the plant is kind of fucked. Weeds can overtake the plant spot.
+ if(weedlevel >= HYDRO_MAX_WEED && prob(50)) // At this point the plant is kind of fucked. Weeds can overtake the plant spot.
if(myseed)
if(!myseed.get_gene(/datum/plant_gene/trait/plant_type/weed_hardy) && !myseed.get_gene(/datum/plant_gene/trait/plant_type/fungal_metabolism)) // If a normal plant
weedinvasion()
@@ -549,25 +554,26 @@
else if(istype(O, /obj/item/plant_analyzer))
var/obj/item/plant_analyzer/P_analyzer = O
+ var/msg = ""
if(myseed)
if(P_analyzer.scan_mode == PLANT_SCANMODE_STATS)
- to_chat(user, examine_block("[myseed.plantname]"))
- to_chat(user, examine_block("Plant Age: [age]"))
+ msg += "[myseed.plantname]\n"
+ msg += "- Plant Age: [span_notice("[age]\n")]"
var/list/text_string = myseed.get_analyzer_text()
if(text_string)
- to_chat(user, examine_block(text_string))
+ msg += "[text_string]\n"
if(myseed.reagents_add && P_analyzer.scan_mode == PLANT_SCANMODE_CHEMICALS)
- to_chat(user, examine_block("Plant Reagents"))
+ msg += "Plant Reagents\n"
for(var/datum/plant_gene/reagent/Gene in myseed.genes)
- to_chat(user, examine_block("- [Gene.get_name()] -"))
+ msg += "[span_notice("- [Gene.get_name()] -")]\n"
else
- to_chat(user, examine_block( "No plant found."))
- to_chat(user, examine_block("\nWeed level: [weedlevel] / 10"))
- to_chat(user, examine_block("\nPest level: [pestlevel] / 10"))
- to_chat(user, examine_block("\nToxicity level: [toxic] / 100"))
- to_chat(user, examine_block("\nWater level: [waterlevel] / [maxwater]"))
- to_chat(user, examine_block("\nNutrition level: [reagents.total_volume] / [maxnutri]"))
- to_chat(user, examine_block("
"))
+ msg += "No plant found.\n"
+ msg += "Weed level: [span_notice("[weedlevel] / [HYDRO_MAX_WEED]")]\n"
+ msg += "Pest level: [span_notice("[pestlevel] / [HYDRO_MAX_PEST]")]\n"
+ msg += "Toxicity level: [span_notice("[toxic] / [HYDRO_MAX_TOXIC]")]\n"
+ msg += "Water level: [span_notice("[waterlevel] / [maxwater]")]\n"
+ msg += "Nutrition level: [span_notice("[reagents.total_volume] / [maxnutri]")]\n"
+ to_chat(user, examine_block(msg))
return
else if(istype(O, /obj/item/cultivator))
@@ -671,7 +677,10 @@
if(!anchored)
return
self_sustaining = !self_sustaining
- idle_power_usage = self_sustaining ? 1250 : 0
+ if(self_sustaining)
+ set_active_power()
+ else
+ set_idle_power()
to_chat(user, "You [self_sustaining ? "activate" : "deactivated"] [src]'s autogrow function[self_sustaining ? ", maintaining the tray's health while using high amounts of power" : ""].")
update_appearance()
@@ -702,7 +711,7 @@
desc = initial(desc)
TRAY_NAME_UPDATE
if(self_sustaining) //No reason to pay for an empty tray.
- idle_power_usage = 0
+ set_idle_power()
self_sustaining = FALSE
update_appearance()
@@ -718,13 +727,13 @@
plant_health = clamp(plant_health + adjustamt, 0, myseed.endurance)
/obj/machinery/hydroponics/proc/adjustToxic(adjustamt)
- toxic = clamp(toxic + adjustamt, 0, 100)
+ toxic = clamp(toxic + adjustamt, 0, HYDRO_MAX_TOXIC)
/obj/machinery/hydroponics/proc/adjustPests(adjustamt)
- pestlevel = clamp(pestlevel + adjustamt, 0, 10)
+ pestlevel = clamp(pestlevel + adjustamt, 0, HYDRO_MAX_PEST)
/obj/machinery/hydroponics/proc/adjustWeeds(adjustamt)
- weedlevel = clamp(weedlevel + adjustamt, 0, 10)
+ weedlevel = clamp(weedlevel + adjustamt, 0, HYDRO_MAX_WEED)
/obj/machinery/hydroponics/proc/spawnplant() // why would you put strange reagent in a hydro tray you monster I bet you also feed them blood
var/list/livingplants = list(/mob/living/simple_animal/hostile/tree, /mob/living/simple_animal/hostile/killertomato)
diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm
index 008009a35765..ad24dccff43d 100644
--- a/code/modules/hydroponics/seeds.dm
+++ b/code/modules/hydroponics/seeds.dm
@@ -390,29 +390,29 @@
/obj/item/seeds/proc/get_analyzer_text() //in case seeds have something special to tell to the analyzer
var/text = ""
if(!get_gene(/datum/plant_gene/trait/plant_type/weed_hardy) && !get_gene(/datum/plant_gene/trait/plant_type/fungal_metabolism) && !get_gene(/datum/plant_gene/trait/plant_type/alien_properties))
- text += "- Plant type: Normal plant\n"
+ text += "- Plant type: [span_notice("Normal plant\n")]"
if(get_gene(/datum/plant_gene/trait/plant_type/weed_hardy))
- text += "- Plant type: Weed. Can grow in nutrient-poor soil.\n"
+ text += "- Plant type: [span_notice("Weed. Can grow in nutrient-poor soil.\n")]"
if(get_gene(/datum/plant_gene/trait/plant_type/fungal_metabolism))
- text += "- Plant type: Mushroom. Can grow in dry soil.\n"
+ text += "- Plant type: [span_notice("Mushroom. Can grow in dry soil.\n")]"
if(get_gene(/datum/plant_gene/trait/plant_type/crystal))
- text += "- Plant type: Crystal. Revitalizes soil.\n"
+ text += "- Plant type: [span_notice("Crystal. Revitalizes soil.\n")]"
if(get_gene(/datum/plant_gene/trait/plant_type/alien_properties))
- text += "- Plant type: UNKNOWN \n"
+ text += "- Plant type: [span_warning("UNKNOWN\n")]"
if(potency != UNHARVESTABLE)
- text += "- Potency: [potency]\n"
+ text += "- Potency: [span_notice("[potency]\n")]"
if(yield != UNHARVESTABLE)
- text += "- Yield: [yield]\n"
- text += "- Maturation speed: [maturation]\n"
+ text += "- Yield: [span_notice("[yield]\n")]"
+ text += "- Maturation speed: [span_notice("[maturation]\n")]"
if(yield != UNHARVESTABLE)
- text += "- Production speed: [production]\n"
- text += "- Endurance: [endurance]\n"
- text += "- Lifespan: [lifespan]\n"
- text += "- Instability: [instability]\n"
- text += "- Weed Growth Rate: [weed_rate]\n"
- text += "- Weed Vulnerability: [weed_chance]\n"
+ text += "- Production speed: [span_notice("[production]\n")]"
+ text += "- Endurance: [span_notice("[endurance]\n")]"
+ text += "- Lifespan: [span_notice("[lifespan]\n")]"
+ text += "- Instability: [span_notice("[instability]\n")]"
+ text += "- Weed Growth Rate: [span_notice("[weed_rate]\n")]"
+ text += "- Weed Vulnerability: [span_notice("[weed_chance]\n")]"
if(rarity)
- text += "- Species Discovery Value: [rarity]\n"
+ text += "- Species Discovery Value: [span_notice("[rarity]\n")]"
var/all_traits = ""
for(var/datum/plant_gene/trait/traits in genes)
if(istype(traits, /datum/plant_gene/trait/plant_type))
@@ -427,20 +427,20 @@
/obj/item/seeds/attackby(obj/item/O, mob/user, params)
if (istype(O, /obj/item/plant_analyzer))
- to_chat(user, "*---------*\n This is \a [src].")
+ var/msg = "This is \a [src]."
var/text
var/obj/item/plant_analyzer/P_analyzer = O
if(P_analyzer.scan_mode == PLANT_SCANMODE_STATS)
text = get_analyzer_text()
if(text)
- to_chat(user, "[text]")
+ msg += "\n[text]"
if(reagents_add && P_analyzer.scan_mode == PLANT_SCANMODE_CHEMICALS)
- to_chat(user, "- Plant Reagents -")
- to_chat(user, "*---------*")
+ msg += "\n- Plant Reagents -"
+ msg += "\n*---------*"
for(var/datum/plant_gene/reagent/Gene in genes)
- to_chat(user, "- [Gene.get_name()] -")
- to_chat(user, "*---------*")
-
+ msg += "\n- [Gene.get_name()] -"
+ msg += "\n*---------*"
+ to_chat(user, examine_block(msg))
return
diff --git a/code/modules/instruments/stationary.dm b/code/modules/instruments/stationary.dm
index f236927c38ee..f919ae0def8e 100644
--- a/code/modules/instruments/stationary.dm
+++ b/code/modules/instruments/stationary.dm
@@ -42,11 +42,26 @@
/obj/structure/musician/piano/Initialize(mapload)
. = ..()
- if(prob(50) && icon_state == initial(icon_state))
+ // [CELADON-EDIT] - CELADON_MUSICIAN
+ // if(prob(50) && icon_state == initial(icon_state))
+ // name = "space minimoog"
+ // desc = "This is a minimoog, like a space piano, but more spacey!"
+ // icon_state = "minimoog"
+ // else
+ // name = "space piano"
+ // desc = "This is a space piano, like a regular piano, but always in tune! Even if the musician isn't."
+ // icon_state = "piano" // CELADON-EDIT - ORIGINAL
+ if(prob(35) && icon_state == initial(icon_state))
name = "space minimoog"
desc = "This is a minimoog, like a space piano, but more spacey!"
icon_state = "minimoog"
else
- name = "space piano"
- desc = "This is a space piano, like a regular piano, but always in tune! Even if the musician isn't."
- icon_state = "piano"
+ if(prob(70) && icon_state == initial(icon_state))
+ name = "space piano"
+ desc = "This is a space piano, like a regular piano, but always in tune! Even if the musician isn't."
+ icon_state = "piano"
+ else
+ name = "This is a minipiano! So cute!"
+ desc = "This is a space piano, like a regular piano, but always in tune! Even if the musician isn't."
+ icon_state = "minipiano"
+ // [/CELADON-EDIT]
diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm
index ee0d7789355e..20ad6e089730 100644
--- a/code/modules/jobs/job_types/_job.dm
+++ b/code/modules/jobs/job_types/_job.dm
@@ -25,7 +25,6 @@
var/display_order = JOB_DISPLAY_ORDER_DEFAULT
-
///Levels unlocked at roundstart in physiology
var/list/roundstart_experience
diff --git a/code/modules/library/lib_codex_gigas.dm b/code/modules/library/lib_codex_gigas.dm
index c4263a771b0d..707f7a7647b7 100644
--- a/code/modules/library/lib_codex_gigas.dm
+++ b/code/modules/library/lib_codex_gigas.dm
@@ -59,7 +59,7 @@
inUse = FALSE
/obj/item/book/codex_gigas/proc/display_devil(datum/antagonist/devil/devil, mob/reader, devilName)
- reader << browse("Information on [devilName]
[GLOB.lawlorify[LORE][devil.ban]]
[GLOB.lawlorify[LORE][devil.bane]]
[GLOB.lawlorify[LORE][devil.obligation]]
[GLOB.lawlorify[LORE][devil.banish]]
[devil.ascendable?"This devil may ascend given enough souls.":""]", "window=book[window_size != null ? ";size=[window_size]" : ""]")
+ reader << browse("Information on [devilName]
[GLOB.lawlorify[LORE][devil.ban]]
[GLOB.lawlorify[LORE][devil.obligation]]
[GLOB.lawlorify[LORE][devil.banish]]
[devil.ascendable?"This devil may ascend given enough souls.":""]", "window=book[window_size != null ? ";size=[window_size]" : ""]")
/obj/item/book/codex_gigas/proc/ask_name(mob/reader)
ui_interact(reader)
diff --git a/code/modules/mining/abandoned_crates.dm b/code/modules/mining/abandoned_crates.dm
index 613a68a2de47..d86cfebf1197 100644
--- a/code/modules/mining/abandoned_crates.dm
+++ b/code/modules/mining/abandoned_crates.dm
@@ -192,7 +192,7 @@
if(77 to 78)
new /obj/item/toy/plush/lizardplushie(src)
if(79 to 80)
- new /obj/item/stack/sheet/mineral/bananium(src, 10)
+ new /obj/item/stack/sheet/mineral/hidden/hellstone(src, 10)
if(81 to 82)
new /obj/item/bikehorn/airhorn(src)
if(83 to 84)
diff --git a/code/modules/mining/equipment/explorer_gear.dm b/code/modules/mining/equipment/explorer_gear.dm
index c36ba16578ed..3f69360dfa65 100644
--- a/code/modules/mining/equipment/explorer_gear.dm
+++ b/code/modules/mining/equipment/explorer_gear.dm
@@ -10,7 +10,7 @@
max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT
heat_protection = CHEST|GROIN|LEGS|ARMS
hoodtype = /obj/item/clothing/head/hooded/explorer
- armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 10, "bomb" = 50, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 50)
+ armor = list("melee" = 15, "bullet" = 10, "laser" = 10, "energy" = 10, "bomb" = 50, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 50)
// [CELADON-EDIT] - CELADON_BALANCE
// allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe) // CELADON-EDIT - ORIGINAL
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe, /obj/item/kinetic_crusher)
@@ -26,7 +26,7 @@
flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS
min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT
- armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 10, "bomb" = 50, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 50)
+ armor = list("melee" = 15, "bullet" = 10, "laser" = 10, "energy" = 10, "bomb" = 50, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 50)
resistance_flags = FIRE_PROOF
/obj/item/clothing/suit/hooded/explorer/Initialize()
@@ -172,7 +172,7 @@
max_heat_protection_temperature = (FIRE_SUIT_MAX_TEMP_PROTECT / 2)
heat_protection = CHEST|GROIN|LEGS|ARMS
hoodtype = /obj/item/clothing/head/hooded/survivor_hood
- armor = list("melee" = 15, "bullet" = 10, "laser" = 10, "energy" = 15, "bomb" = 20, "bio" = 100, "rad" = 20, "fire" = 50, "acid" = 30)
+ armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 10, "bomb" = 20, "bio" = 100, "rad" = 20, "fire" = 50, "acid" = 30)
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe)
resistance_flags = FIRE_PROOF
supports_variations = DIGITIGRADE_VARIATION | VOX_VARIATION
@@ -186,7 +186,7 @@
flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS
min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT
- armor = list("melee" = 15, "bullet" = 10, "laser" = 10, "energy" = 15, "bomb" = 20, "bio" = 100, "rad" = 20, "fire" = 50, "acid" = 30)
+ armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 10, "bomb" = 20, "bio" = 100, "rad" = 20, "fire" = 50, "acid" = 30)
resistance_flags = FIRE_PROOF
/obj/item/clothing/suit/hooded/survivor/Initialize()
diff --git a/code/modules/mining/equipment/mining_tools.dm b/code/modules/mining/equipment/mining_tools.dm
index ed8be5000a66..d38a3ce8b55b 100644
--- a/code/modules/mining/equipment/mining_tools.dm
+++ b/code/modules/mining/equipment/mining_tools.dm
@@ -53,6 +53,7 @@
force = 19
custom_price = 1500
custom_premium_price = 2000
+ custom_materials = list(/datum/material/diamond=2000)
/obj/item/pickaxe/drill
name = "mining drill"
@@ -81,6 +82,7 @@
toolspeed = 0.2
desc = "EXOCOM's improvement on the NT autodrill design, featuring a premium diamond cutting head. Yours is the drill that will pierce the heavens!"
force = 20
+ custom_materials = list(/datum/material/diamond=2000)
/obj/item/pickaxe/drill/cyborg/diamond //This is the BORG version!
name = "diamond-tipped integrated mining drill" //To inherit the NODROP_1 flag, and easier to change borg specific drill mechanics.
diff --git a/code/modules/mining/machine_bluespaceminer.dm b/code/modules/mining/machine_bluespaceminer.dm
index feffb562a7e0..f44775d20c20 100644
--- a/code/modules/mining/machine_bluespaceminer.dm
+++ b/code/modules/mining/machine_bluespaceminer.dm
@@ -7,7 +7,7 @@
circuit = /obj/item/circuitboard/machine/bluespace_miner
layer = BELOW_OBJ_LAYER
use_power = NO_POWER_USE
- idle_power_usage = 50000
+ idle_power_usage = ACTIVE_DRAW_EXTREME * 10
var/powered = FALSE
var/active = FALSE
diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm
index bbc84ec7ee68..0ae29ca8ee54 100644
--- a/code/modules/mining/machine_processing.dm
+++ b/code/modules/mining/machine_processing.dm
@@ -3,6 +3,7 @@
/**********************Mineral processing unit console**************************/
/obj/machinery/mineral
+ idle_power_usage = IDLE_DRAW_MINIMAL
processing_flags = START_PROCESSING_MANUALLY
subsystem_type = /datum/controller/subsystem/processing/fastprocess
/// The current direction of `input_turf`, in relation to the machine.
@@ -142,7 +143,7 @@
/obj/machinery/mineral/processing_unit/Initialize()
. = ..()
proximity_monitor = new(src, 1)
- AddComponent(/datum/component/material_container, list(/datum/material/iron, /datum/material/glass, /datum/material/silver, /datum/material/gold, /datum/material/diamond, /datum/material/plasma, /datum/material/uranium, /datum/material/bananium, /datum/material/titanium, /datum/material/bluespace), INFINITY, TRUE, /obj/item/stack)
+ AddComponent(/datum/component/material_container, list(/datum/material/iron, /datum/material/glass, /datum/material/silver, /datum/material/gold, /datum/material/diamond, /datum/material/plasma, /datum/material/uranium, /datum/material/hellstone, /datum/material/titanium, /datum/material/bluespace), INFINITY, TRUE, /obj/item/stack)
stored_research = new /datum/techweb/specialized/autounlocking/smelter
selected_material = SSmaterials.GetMaterialRef(/datum/material/iron)
diff --git a/code/modules/mining/machine_redemption.dm b/code/modules/mining/machine_redemption.dm
index fd36a4bb4ab1..d0704887b4ea 100644
--- a/code/modules/mining/machine_redemption.dm
+++ b/code/modules/mining/machine_redemption.dm
@@ -17,7 +17,7 @@
var/points = 0
var/ore_multiplier = 1
var/point_upgrade = 1
- var/list/ore_values = list(/datum/material/iron = 1, /datum/material/glass = 1, /datum/material/plasma = 15, /datum/material/silver = 16, /datum/material/gold = 18, /datum/material/titanium = 30, /datum/material/uranium = 30, /datum/material/diamond = 50, /datum/material/bluespace = 50, /datum/material/bananium = 60)
+ var/list/ore_values = list(/datum/material/iron = 1, /datum/material/glass = 1, /datum/material/plasma = 15, /datum/material/silver = 16, /datum/material/gold = 18, /datum/material/titanium = 30, /datum/material/uranium = 30, /datum/material/diamond = 50, /datum/material/bluespace = 50)
/// Variable that holds a timer which is used for callbacks to `send_console_message()`. Used for preventing multiple calls to this proc while the ORM is eating a stack of ores.
var/console_notify_timer
var/datum/techweb/stored_research
diff --git a/code/modules/mining/machine_silo.dm b/code/modules/mining/machine_silo.dm
index 788d1c102f75..444e72992685 100644
--- a/code/modules/mining/machine_silo.dm
+++ b/code/modules/mining/machine_silo.dm
@@ -22,7 +22,6 @@ GLOBAL_LIST_EMPTY(silo_access_logs)
/datum/material/diamond,
/datum/material/plasma,
/datum/material/uranium,
- /datum/material/bananium,
/datum/material/titanium,
/datum/material/bluespace,
/datum/material/plastic,
diff --git a/code/modules/mining/minebot.dm b/code/modules/mining/minebot.dm
index 707d68a871f7..cc2a9f176c70 100644
--- a/code/modules/mining/minebot.dm
+++ b/code/modules/mining/minebot.dm
@@ -33,7 +33,7 @@
wanted_objects = list(
/obj/item/stack/ore/diamond, /obj/item/stack/ore/gold, /obj/item/stack/ore/silver,
/obj/item/stack/ore/plasma, /obj/item/stack/ore/uranium, /obj/item/stack/ore/iron,
- /obj/item/stack/ore/bananium, /obj/item/stack/ore/titanium)
+ /obj/item/stack/ore/hellstone, /obj/item/stack/ore/titanium)
healable = 0
loot = list(/obj/effect/decal/cleanable/robot_debris)
del_on_death = TRUE
diff --git a/code/modules/mining/mint.dm b/code/modules/mining/mint.dm
index 33117d99c518..79c2f0d52208 100644
--- a/code/modules/mining/mint.dm
+++ b/code/modules/mining/mint.dm
@@ -24,11 +24,8 @@
/datum/material/uranium,
/datum/material/titanium,
/datum/material/diamond,
- /datum/material/bananium,
- /datum/material/adamantine,
- /datum/material/mythril,
/datum/material/plastic,
- /datum/material/runite
+ /datum/material/hellstone,
), MINERAL_MATERIAL_AMOUNT * 75, FALSE, /obj/item/stack)
chosen = SSmaterials.GetMaterialRef(chosen)
diff --git a/code/modules/mining/money_bag.dm b/code/modules/mining/money_bag.dm
index 46011ae8ec7e..2c8ac19a353a 100644
--- a/code/modules/mining/money_bag.dm
+++ b/code/modules/mining/money_bag.dm
@@ -26,4 +26,4 @@
new /obj/item/coin/silver(src)
new /obj/item/coin/gold(src)
new /obj/item/coin/gold(src)
- new /obj/item/coin/adamantine(src)
+ new /obj/item/coin/hellstone(src)
diff --git a/code/modules/mining/ore_veins.dm b/code/modules/mining/ore_veins.dm
index 3e5e20053a77..0df6cd187d03 100644
--- a/code/modules/mining/ore_veins.dm
+++ b/code/modules/mining/ore_veins.dm
@@ -209,3 +209,36 @@ GLOBAL_LIST_EMPTY(ore_veins)
)
max_mobs = 6
spawn_time = 80
+
+// Asteroid veins are the same as the base planetary ones yield wise, but with the asteroid mobs.
+
+/obj/structure/vein/asteroid
+ mob_types = list(
+ /mob/living/simple_animal/hostile/asteroid/goliath = 60,
+ /mob/living/simple_animal/hostile/asteroid/basilisk = 30,
+ /mob/living/simple_animal/hostile/asteroid/hivelord = 30,
+ /mob/living/simple_animal/hostile/asteroid/brimdemon = 20,
+ /mob/living/simple_animal/hostile/carp = 20,
+ )
+
+/obj/structure/vein/classtwo/asteroid
+ mob_types = list(
+ /mob/living/simple_animal/hostile/asteroid/goliath = 60,
+ /mob/living/simple_animal/hostile/asteroid/basilisk = 30,
+ /mob/living/simple_animal/hostile/asteroid/hivelord = 30,
+ /mob/living/simple_animal/hostile/asteroid/brimdemon = 20,
+ /mob/living/simple_animal/hostile/carp = 20,
+ /mob/living/simple_animal/hostile/carp/megacarp = 15,
+ /mob/living/simple_animal/hostile/asteroid/goliath/beast/ancient = 5
+ )
+
+/obj/structure/vein/classthree/asteroid
+ mob_types = list(
+ /mob/living/simple_animal/hostile/asteroid/goliath = 60,
+ /mob/living/simple_animal/hostile/asteroid/basilisk = 30,
+ /mob/living/simple_animal/hostile/asteroid/hivelord = 30,
+ /mob/living/simple_animal/hostile/asteroid/brimdemon = 20,
+ /mob/living/simple_animal/hostile/carp/megacarp = 20,
+ /mob/living/simple_animal/hostile/asteroid/goliath/beast/ancient = 10
+ )
+
diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm
index ec971ed84bed..1dfe590cac0a 100644
--- a/code/modules/mining/ores_coins.dm
+++ b/code/modules/mining/ores_coins.dm
@@ -217,16 +217,6 @@ GLOBAL_LIST_INIT(sand_recipes, list(\
mine_experience = 10
scan_state = "rock_Diamond"
-/obj/item/stack/ore/bananium
- name = "bananium ore"
- icon_state = "Bananium ore"
- item_state = "Bananium ore"
- singular_name = "bananium ore chunk"
- points = 60
- custom_materials = list(/datum/material/bananium=MINERAL_MATERIAL_AMOUNT)
- refined_type = /obj/item/stack/sheet/mineral/bananium
- mine_experience = 15
- scan_state = "rock_Bananium"
/obj/item/stack/ore/titanium
name = "titanium ore"
@@ -240,6 +230,16 @@ GLOBAL_LIST_INIT(sand_recipes, list(\
scan_state = "rock_Titanium"
spreadChance = 5
+/obj/item/stack/ore/hellstone
+ name = "hellstone ore"
+ icon_state = "hellstone-ore"
+ item_state = "hellstone-ore"
+ singular_name = "hellstone ore chunk"
+ resistance_flags = LAVA_PROOF
+ points = 50
+ custom_materials = list(/datum/material/hellstone=MINERAL_MATERIAL_AMOUNT)
+ refined_type = /obj/item/stack/sheet/mineral/hidden/hellstone
+
/obj/item/stack/ore/slag
name = "slag"
desc = "Completely useless."
@@ -458,20 +458,11 @@ GLOBAL_LIST_INIT(sand_recipes, list(\
/obj/item/coin/titanium
custom_materials = list(/datum/material/titanium = 400)
-/obj/item/coin/bananium
- custom_materials = list(/datum/material/bananium = 400)
-
-/obj/item/coin/adamantine
- custom_materials = list(/datum/material/adamantine = 400)
-
-/obj/item/coin/mythril
- custom_materials = list(/datum/material/mythril = 400)
-
/obj/item/coin/plastic
custom_materials = list(/datum/material/plastic = 400)
-/obj/item/coin/runite
- custom_materials = list(/datum/material/runite = 400)
+/obj/item/coin/hellstone
+ custom_materials = list(/datum/material/hellstone = 400)
/obj/item/coin/twoheaded
desc = "Hey, this coin's the same on both sides!"
diff --git a/code/modules/mob/dead/crew_manifest.dm b/code/modules/mob/dead/crew_manifest.dm
index c7ca52968f86..da742342218c 100644
--- a/code/modules/mob/dead/crew_manifest.dm
+++ b/code/modules/mob/dead/crew_manifest.dm
@@ -4,7 +4,7 @@
return GLOB.always_state
/datum/crew_manifest/ui_status(mob/user, datum/ui_state/state)
- return (isnewplayer(user) || isobserver(user) || isAI(user) || ispAI(user)) ? UI_INTERACTIVE : UI_CLOSE
+ return (ismob(user)) ? UI_INTERACTIVE : UI_CLOSE
/datum/crew_manifest/ui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
diff --git a/code/modules/mob/dead/dead.dm b/code/modules/mob/dead/dead.dm
index 5a1e5bbf3387..85c60a15b031 100644
--- a/code/modules/mob/dead/dead.dm
+++ b/code/modules/mob/dead/dead.dm
@@ -107,7 +107,7 @@ INITIALIZE_IMMEDIATE(/mob/dead)
. = ..()
if(!client)
return
- LAZYADDASSOC(SSmobs.dead_players_by_virtual_z, "[virtual_z()]", src)
+ LAZYADDASSOCLIST(SSmobs.dead_players_by_virtual_z, "[virtual_z()]", src)
/mob/dead/Logout()
. = ..()
diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm
index 9baa46f526b5..25722dd28e5f 100644
--- a/code/modules/mob/dead/new_player/new_player.dm
+++ b/code/modules/mob/dead/new_player/new_player.dm
@@ -249,8 +249,8 @@
observer.client.init_verbs()
observer.update_appearance()
observer.stop_sound_channel(CHANNEL_LOBBYMUSIC)
- deadchat_broadcast(" has observed.", "[observer.real_name]", follow_target = observer, turf_target = get_turf(observer), message_type = DEADCHAT_DEATHRATTLE)
QDEL_NULL(mind)
+ deadchat_broadcast(" has observed.", "[observer.real_name]", follow_target = observer, turf_target = get_turf(observer), message_type = DEADCHAT_DEATHRATTLE)
qdel(src)
return TRUE
@@ -319,7 +319,6 @@
spawn_point.join_player_here(character)
var/atom/movable/screen/splash/Spl = new(character.client, TRUE)
Spl.Fade(TRUE)
- character.playsound_local(get_turf(character), 'sound/voice/ApproachingTG.ogg', 25)
character.update_parallax_teleport()
@@ -329,6 +328,7 @@
var/mob/living/carbon/human/humanc = character
ship.manifest_inject(humanc, client, job)
GLOB.data_core.manifest_inject(humanc, client)
+ ship.add_mob_to_crew_guestbook(humanc)
AnnounceArrival(humanc, job.name, ship)
AddEmploymentContract(humanc)
SSblackbox.record_feedback("tally", "species_spawned", 1, humanc.dna.species.name)
diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm
index de07b3d4f0fd..0d9dab7a035f 100644
--- a/code/modules/mob/inventory.dm
+++ b/code/modules/mob/inventory.dm
@@ -275,7 +275,7 @@
*/
/mob/proc/dropItemToGround(obj/item/I, force = FALSE, silent = FALSE)
. = doUnEquip(I, force, drop_location(), FALSE, silent = silent)
- if(. && I) //ensure the item exists and that it was dropped properly.
+ if(. && I && !(I.item_flags & NO_PIXEL_RANDOM_DROP)) //ensure the item exists and that it was dropped properly.
I.pixel_x = rand(-6,6)
I.pixel_y = rand(-6,6)
diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm
index aec75960989d..1910347e4fdd 100644
--- a/code/modules/mob/living/blood.dm
+++ b/code/modules/mob/living/blood.dm
@@ -4,19 +4,6 @@
BLOOD SYSTEM
****************************************************/
-/mob/living/carbon/human/proc/suppress_bloodloss(amount)
- if(bleedsuppress)
- return
- else
- bleedsuppress = TRUE
- addtimer(CALLBACK(src, PROC_REF(resume_bleeding)), amount)
-
-/mob/living/carbon/human/proc/resume_bleeding()
- bleedsuppress = 0
- if(stat != DEAD && bleed_rate)
- to_chat(src, "The blood soaks through your bandage.")
-
-
/mob/living/carbon/monkey/handle_blood()
if(bodytemperature >= TCRYO && !(HAS_TRAIT(src, TRAIT_HUSK))) //cryosleep or husked people do not pump the blood.
//Blood regeneration if there is some space
@@ -29,7 +16,6 @@
/mob/living/carbon/human/handle_blood()
if(NOBLOOD in dna.species.species_traits)
- bleed_rate = 0
return
if(bodytemperature >= TCRYO && !(HAS_TRAIT(src, TRAIT_HUSK))) //cryosleep or husked people do not pump the blood.
@@ -83,24 +69,20 @@
if(!HAS_TRAIT(src, TRAIT_NODEATH))
death()
- var/temp_bleed = 0
//Bleeding out
+ var/limb_bleed = 0
for(var/obj/item/bodypart/BP as anything in bodyparts)
- var/brutedamage = BP.brute_dam
-
+ if(BP.GetComponent(/datum/component/bandage))
+ continue
//We want an accurate reading of .len
listclearnulls(BP.embedded_objects)
for(var/obj/item/embeddies in BP.embedded_objects)
if(!embeddies.isEmbedHarmless())
- temp_bleed += 0.5
-
- if(brutedamage >= 20)
- temp_bleed += (brutedamage * 0.013)
-
- bleed_rate = max(bleed_rate - 0.5, temp_bleed)//if no wounds, other bleed effects (heparin) naturally decreases
+ BP.adjust_bleeding(0.1, BLOOD_LOSS_DAMAGE_MAXIMUM)
+ limb_bleed += BP.bleeding
- if(bleed_rate && !bleedsuppress && !(HAS_TRAIT(src, TRAIT_FAKEDEATH)))
- bleed(bleed_rate)
+ if(limb_bleed && !bleedsuppress && !HAS_TRAIT(src, TRAIT_FAKEDEATH))
+ bleed(limb_bleed)
//Makes a blood drop, leaking amt units of blood from the mob
/mob/living/carbon/proc/bleed(amt)
@@ -125,7 +107,8 @@
/mob/living/carbon/human/restore_blood()
blood_volume = BLOOD_VOLUME_NORMAL
- bleed_rate = 0
+ for(var/obj/item/bodypart/BP as anything in get_bleeding_parts())
+ BP.bleeding = 0
/****************************************************
BLOOD TRANSFERS
diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm
index 9b50d1827724..916095ed266e 100644
--- a/code/modules/mob/living/carbon/carbon_defense.dm
+++ b/code/modules/mob/living/carbon/carbon_defense.dm
@@ -1,3 +1,25 @@
+/mob/living/carbon/attackby(obj/item/W, mob/user, params)
+ var/obj/item/bodypart/BP = get_bodypart(check_zone(user.zone_selected))
+ var/has_painkillers = user.reagents.has_reagent(/datum/reagent/medicine/morphine, needs_metabolizing = TRUE)
+ if(W.tool_behaviour == TOOL_WELDER && IS_ROBOTIC_LIMB(BP) && BP.brute_dam > 5) //prioritize healing if we're synthetic
+ return ..()
+ if(user.a_intent != INTENT_HELP || !W.get_temperature() || !BP.can_bandage()) //this will also catch low damage synthetic welding
+ return ..()
+ . = TRUE
+ var/heal_time = 2 SECONDS
+ playsound(user, 'sound/surgery/cautery1.ogg', 20)
+ balloon_alert(user, "cauterizing...")
+ if(src == user && !has_painkillers)
+ heal_time *= 2 //oof ouch owie
+ user.visible_message(span_nicegreen("[user] holds [W] up to [user == src ? "their" : "[src]'s"] [parse_zone(BP.body_zone)], trying to slow [p_their()] bleeding..."), span_nicegreen("You hold [W] up to [user == src ? "your" : "[src]'s"] [parse_zone(BP.body_zone)], trying to slow [user == src ? "your" : p_their()] bleeding..."))
+ if(do_after(user, heal_time, target = src))
+ playsound(user, 'sound/surgery/cautery2.ogg', 20)
+ BP.apply_bandage(0.005, W.get_temperature()/BLOOD_CAUTERIZATION_RATIO, "cauterization") //not particularly fast, this is the "I really would prefer not to be bleeding right now" option
+ BP.receive_damage(burn = W.get_temperature()/BLOOD_CAUTERIZATION_DAMAGE_RATIO) //my body is a MACHINE that turns BLEEDING into BURN DAMAGE
+ user.visible_message(span_nicegreen("[user] cauterizes the bleeding on [user == src ? "their" : "[src]'s"] [parse_zone(BP.body_zone)]!"), span_nicegreen("You cauterize the bleeding on [user == src ? "your" : "[src]'s"] [parse_zone(BP.body_zone)]!"))
+ else
+ to_chat(user, span_warning("You were interrupted!"))
+
/mob/living/carbon/get_eye_protection()
. = ..()
var/obj/item/organ/eyes/E = getorganslot(ORGAN_SLOT_EYES)
@@ -554,14 +576,10 @@
else
to_chat(src, "Your eyes are really starting to hurt. This can't be good for you!")
- if(has_bane(BANE_LIGHT))
- mind.disrupt_spells(-500)
return 1
else if(damage == 0) // just enough protection
if(prob(20))
to_chat(src, "Something bright flashes in the corner of your vision!")
- if(has_bane(BANE_LIGHT))
- mind.disrupt_spells(0)
/mob/living/carbon/soundbang_act(intensity = 1, stun_pwr = 20, damage_pwr = 5, deafen_pwr = 15)
diff --git a/code/modules/mob/living/carbon/damage_procs.dm b/code/modules/mob/living/carbon/damage_procs.dm
index 2045bfe4aa18..8c023299baed 100644
--- a/code/modules/mob/living/carbon/damage_procs.dm
+++ b/code/modules/mob/living/carbon/damage_procs.dm
@@ -1,6 +1,6 @@
-/mob/living/carbon/apply_damage(damage, damagetype = BRUTE, def_zone = null, blocked = FALSE, forced = FALSE, spread_damage = FALSE, break_modifier = 1)
+/mob/living/carbon/apply_damage(damage, damagetype = BRUTE, def_zone = null, blocked = FALSE, forced = FALSE, spread_damage = FALSE, break_modifier = 1, sharpness = FALSE)
SEND_SIGNAL(src, COMSIG_MOB_APPLY_DAMGE, damage, damagetype, def_zone)
var/hit_percent = (100-blocked)/100
if(!damage || (!forced && hit_percent <= 0))
@@ -21,7 +21,7 @@
switch(damagetype)
if(BRUTE)
if(BP)
- if(BP.receive_damage(damage_amount, 0, break_modifier))
+ if(BP.receive_damage(damage_amount, 0, break_modifier, sharpness = sharpness))
update_damage_overlays()
else //no bodypart, we deal damage with a more general method.
adjustBruteLoss(damage_amount, forced = forced)
@@ -29,7 +29,7 @@
shake_animation(damage_amount)
if(BURN)
if(BP)
- if(BP.receive_damage(0, damage_amount, break_modifier))
+ if(BP.receive_damage(0, damage_amount, break_modifier, sharpness = sharpness))
update_damage_overlays()
else
adjustFireLoss(damage_amount, forced = forced)
@@ -267,3 +267,68 @@
if(update)
update_damage_overlays()
update_stamina()
+
+/// Gets a list of bleeding bodyparts, argument ignore_staunched = are we actively bleeding (no treatment)
+/mob/living/carbon/proc/get_bleeding_parts(ignore_staunched = FALSE)
+ var/list/obj/item/bodypart/parts = list()
+ for(var/obj/item/bodypart/BP as anything in bodyparts)
+ if(BP.bleeding && (!ignore_staunched || !BP.GetComponent(/datum/component/bandage)))
+ parts += BP
+ return parts
+
+/// Gets a list of bandaged parts
+/mob/living/carbon/proc/get_bandaged_parts()
+ var/list/obj/item/bodypart/parts = list()
+ for(var/obj/item/bodypart/BP as anything in bodyparts)
+ if(BP.GetComponent(/datum/component/bandage))
+ parts += BP
+ return parts
+
+/// Apply bleeding to one random bodypart.
+/mob/living/carbon/proc/cause_bleeding(amt)
+ if(amt <= 0)
+ return
+ var/list/obj/item/bodypart/parts = bodyparts.Copy()
+ if(!length(parts))
+ return
+ var/obj/item/bodypart/part_in_question = pick(parts)
+ part_in_question.adjust_bleeding(amt)
+
+/// Heal bleeding from one random bodypart
+/mob/living/carbon/proc/heal_bleeding(amt)
+ if(amt <= 0)
+ return
+ var/list/obj/item/bodypart/parts = get_bleeding_parts()
+ if(!length(parts))
+ return
+ var/obj/item/bodypart/part_in_question = pick(parts)
+ part_in_question.adjust_bleeding(-amt)
+ var/bleed_calc = part_in_question.bleeding
+ return min(bleed_calc - part_in_question.bleeding, 0)
+
+/// Apply bleeding to all bodyparts
+/mob/living/carbon/proc/cause_overall_bleeding(amt)
+ if(amt <= 0)
+ return
+ var/list/obj/item/bodypart/parts = bodyparts.Copy()
+ while(length(parts))
+ var/obj/item/bodypart/part_in_question = pick(parts)
+ if(part_in_question.is_pseudopart)
+ parts -= part_in_question
+ continue
+ var/amount_to_take = min(part_in_question.bleeding, amt / length(parts))
+ part_in_question.adjust_bleeding(amount_to_take)
+ amt -= amount_to_take
+ parts -= part_in_question
+
+/// Heal bleeding from all bodyparts
+/mob/living/carbon/proc/heal_overall_bleeding(amt)
+ if(amt <= 0)
+ return
+ var/list/obj/item/bodypart/parts = get_bleeding_parts()
+ while(length(parts))
+ var/obj/item/bodypart/part_in_question = pick(parts)
+ var/amount_to_take = min(part_in_question.bleeding, amt / length(parts))
+ part_in_question.adjust_bleeding(-amount_to_take)
+ amt -= amount_to_take
+ parts -= part_in_question
diff --git a/code/modules/mob/living/carbon/human/damage_procs.dm b/code/modules/mob/living/carbon/human/damage_procs.dm
index 4883446b7cb1..d7f6834030b3 100644
--- a/code/modules/mob/living/carbon/human/damage_procs.dm
+++ b/code/modules/mob/living/carbon/human/damage_procs.dm
@@ -1,7 +1,7 @@
/// depending on the species, it will run the corresponding apply_damage code there
-/mob/living/carbon/human/apply_damage(damage = 0,damagetype = BRUTE, def_zone = null, blocked = FALSE, forced = FALSE, spread_damage = FALSE, break_modifier = 1) //WS Edit - Breakable Bones
- return dna.species.apply_damage(damage, damagetype, def_zone, blocked, src, forced, spread_damage)
+/mob/living/carbon/human/apply_damage(damage = 0,damagetype = BRUTE, def_zone = null, blocked = FALSE, forced = FALSE, spread_damage = FALSE, break_modifier = 1, sharpness = FALSE) //WS Edit - Breakable Bones
+ return dna.species.apply_damage(damage, damagetype, def_zone, blocked, src, forced, spread_damage, sharpness = sharpness)
/mob/living/carbon/human/revive(full_heal = 0, admin_revive = 0)
if(..())
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index b024be2f96f7..19bcb84dfbc5 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -8,7 +8,6 @@
var/t_has = p_have()
var/t_is = p_are()
var/obscure_name
-
var/list/obscured = check_obscured_slots()
var/skipface = ((wear_mask?.flags_inv & HIDEFACE) || (head?.flags_inv & HIDEFACE))
@@ -16,10 +15,25 @@
var/mob/living/L = user
if(HAS_TRAIT(L, TRAIT_PROSOPAGNOSIA))
obscure_name = TRUE
- var/apparent_species
- if(dna?.species && !skipface)
- apparent_species = ", \an [dna.species.name]"
- . = list("This is [!obscure_name ? name : "Unknown"][apparent_species]!")
+
+ . = list(span_info("This is [name]!"))
+
+ if(user != src)
+ if(!obscure_name && !skipface)
+ var/face_name = get_face_name("")
+ if(face_name)
+ //if we have no guestbook, we just KNOW okay?
+ var/known_name = user.mind?.guestbook ? user.mind.guestbook.get_known_name(user, src, face_name) : face_name
+ if(known_name)
+ . += "You know them as [known_name]."
+ else
+ . += "You don't recognize [t_him]. You can Ctrl-Shift click [t_him] to memorize their face."
+ else
+ . += "You can't see [t_his] face very well."
+ else
+ . += "You can't see [t_his] face very well."
+ else
+ . += "It's you, [real_name]."
//uniform
if(w_uniform && !(ITEM_SLOT_ICLOTHING in obscured))
@@ -243,9 +257,12 @@
if(blood_volume < BLOOD_VOLUME_SAFE || skin_tone == "albino")
msg += "[t_He] [t_has] pale skin.\n"
- if(bleedsuppress)
- msg += "[t_He] [t_is] bandaged with something.\n"
- else if(bleed_rate)
+
+ if(LAZYLEN(get_bandaged_parts()))
+ msg += "[t_He] [t_has] some dressed bleeding.\n"
+
+ var/list/obj/item/bodypart/bleed_check = get_bleeding_parts(TRUE)
+ if(LAZYLEN(bleed_check))
if(reagents.has_reagent(/datum/reagent/toxin/heparin, needs_metabolizing = TRUE))
msg += "[t_He] [t_is] bleeding uncontrollably!\n"
else
@@ -400,20 +417,24 @@
/mob/living/carbon/human/examine_more(mob/user)
. = ..()
+ for(var/obj/item/bodypart/BP as anything in get_bandaged_parts())
+ var/datum/component/bandage/B = BP.GetComponent(/datum/component/bandage)
+ . += span_notice("[p_their(TRUE)] [parse_zone(BP.body_zone)] is dressed with [B.bandage_name]")
+ for(var/obj/item/bodypart/BP as anything in get_bleeding_parts(TRUE))
+ var/bleed_text
+ switch(BP.bleeding)
+ if(0 to 0.5)
+ bleed_text = "lightly."
+ if(0.5 to 1)
+ bleed_text = "moderately."
+ if(1 to 1.5)
+ bleed_text = "heavily!"
+ else
+ bleed_text = "significantly!!"
+ . += span_warning("[p_their(TRUE)] [parse_zone(BP.body_zone)] is bleeding [bleed_text]")
+
if ((wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE)))
return
- var/age_text
- switch(age)
- if(-INFINITY to 25)
- age_text = "very young"
- if(26 to 35)
- age_text = "of adult age"
- if(36 to 55)
- age_text = "middle-aged"
- if(56 to 75)
- age_text = "rather old"
- if(76 to 100)
- age_text = "very old"
- if(101 to INFINITY)
- age_text = "withering away"
- . += list(span_notice("[p_they(TRUE)] appear[p_s()] to be [age_text]."))
+
+ if(get_age())
+ . += list(span_notice("[p_they(TRUE)] appear[p_s()] to be [get_age()]."))
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 3c34e4d18fdb..4e146080f6f3 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -52,8 +52,6 @@
sec_hud_set_ID()
sec_hud_set_implants()
sec_hud_set_security_status()
- //...fan gear
- fan_hud_set_fandom()
//...and display them.
add_to_all_human_data_huds()
@@ -898,11 +896,6 @@
dna.remove_mutation(HM.name)
..()
-/mob/living/carbon/human/check_weakness(obj/item/weapon, mob/living/attacker)
- . = ..()
- if (dna && dna.species)
- . += dna.species.check_species_weakness(weapon, attacker)
-
/mob/living/carbon/human/is_literate()
return TRUE
@@ -1264,6 +1257,23 @@
return FALSE
return ..()
+/mob/living/carbon/human/CtrlShiftClick(mob/user)
+ . = ..()
+ if(isobserver(user) || !user.mind?.guestbook)
+ return
+ INVOKE_ASYNC(user.mind.guestbook, TYPE_PROC_REF(/datum/guestbook, try_add_guest), user, src, FALSE)
+
+/mob/living/carbon/human/get_screentip_name(client/hovering_client)
+ . = ..()
+ var/mob/hovering_mob = hovering_client?.mob
+ if(!hovering_mob?.mind?.guestbook)
+ return .
+ var/face_name = get_face_name("")
+ var/known_name = hovering_mob.mind.guestbook.get_known_name(hovering_mob, src, face_name)
+ if(known_name)
+ return known_name
+ return .
+
/mob/living/carbon/human/species
var/race = null
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index 7091090f8877..1cb061ff9fd9 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -485,6 +485,9 @@
///Calculates the siemens coeff based on clothing and species, can also restart hearts.
/mob/living/carbon/human/electrocute_act(shock_damage, source, siemens_coeff = 1, flags = NONE)
+ //If it doesnt have physiology its prob still initializing.
+ if(!physiology)
+ return
//Calculates the siemens coeff based on clothing. Completely ignores the arguments
if(flags & SHOCK_TESLA) //I hate this entire block. This gets the siemens_coeff for tesla shocks
if(gloves && gloves.siemens_coefficient <= 0)
@@ -776,10 +779,10 @@
combined_msg += "\t There is \a [I] embedded in your [LB.name]!"
for(var/t in missing)
- combined_msg += "Your [parse_zone(t)] is missing!"
+ combined_msg += span_boldannounce("Your [parse_zone(t)] is missing!")
- if(bleed_rate)
- combined_msg += "You are bleeding!"
+ for(var/obj/item/bodypart/BP in get_bleeding_parts(TRUE))
+ combined_msg += span_danger("Your [parse_zone(BP.body_zone)] is bleeding!")
if(getStaminaLoss())
if(getStaminaLoss() > 30)
combined_msg += "You're completely exhausted."
diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm
index 5b638d330690..6556335c2bdb 100644
--- a/code/modules/mob/living/carbon/human/human_defines.dm
+++ b/code/modules/mob/living/carbon/human/human_defines.dm
@@ -61,8 +61,9 @@
var/special_voice = "" // For changing our voice. Used by a symptom.
- var/bleed_rate = 0 //how much are we bleeding
- var/bleedsuppress = 0 //for stopping bloodloss, eventually this will be limb-based like bleeding
+ /// Adjective used in get_generic_name(), if any
+ var/generic_adjective
+ var/bleedsuppress = 0 //for stopping bloodloss body-wide
var/name_override //For temporary visible name changes
diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm
index 2f9814112711..5d8264c14ac3 100644
--- a/code/modules/mob/living/carbon/human/human_helpers.dm
+++ b/code/modules/mob/living/carbon/human/human_helpers.dm
@@ -31,28 +31,19 @@
return pda.owner
return if_no_id
-//repurposed proc. Now it combines get_id_name() and get_face_name() to determine a mob's name variable. Made into a separate proc as it'll be useful elsewhere
/mob/living/carbon/human/get_visible_name()
- var/face_name = get_face_name("")
- var/id_name = get_id_name("")
if(name_override)
return name_override
- if(face_name)
- if(id_name && (id_name != face_name))
- return "[face_name] (as [id_name])"
- return face_name
- if(id_name)
- return id_name
- return "Unknown"
+ return get_generic_name(TRUE, lowercase = TRUE)
//Returns "Unknown" if facially disfigured and real_name if not. Useful for setting name when Fluacided or when updating a human's name variable
-/mob/living/carbon/human/proc/get_face_name(if_no_face="Unknown")
- if(wear_mask && (wear_mask.flags_inv&HIDEFACE)) //Wearing a mask which hides our face, use id-name if possible
+/mob/living/carbon/human/proc/get_face_name(if_no_face = get_generic_name(lowercase = TRUE))
+ if(wear_mask && (wear_mask.flags_inv & HIDEFACE)) //Wearing a mask which hides our face, use id-name if possible
return if_no_face
- if(head && (head.flags_inv&HIDEFACE))
- return if_no_face //Likewise for hats
+ if(head && (head.flags_inv & HIDEFACE))
+ return if_no_face //Likewise for hats
var/obj/item/bodypart/O = get_bodypart(BODY_ZONE_HEAD)
- if(!O || (HAS_TRAIT(src, TRAIT_DISFIGURED)) || (O.brutestate+O.burnstate)>2 || cloneloss>50 || !real_name) //disfigured. use id-name if possible
+ if(!O || (HAS_TRAIT(src, TRAIT_DISFIGURED)) || (O.brutestate+O.burnstate)>2 || cloneloss>50 || !real_name) //disfigured. use id-name if possible
return if_no_face
return real_name
@@ -181,3 +172,61 @@
destination.socks = socks
destination.socks_color = socks_color
destination.jumpsuit_style = jumpsuit_style
+
+/mob/living/carbon/human/proc/get_age()
+ var/obscured = check_obscured_slots()
+ var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))
+ if((obscured & ITEM_SLOT_ICLOTHING) && skipface || isipc(src))
+ return FALSE
+ switch(age)
+ if(70 to INFINITY)
+ return "Geriatric"
+ if(60 to 70)
+ return "Elderly"
+ if(50 to 60)
+ return "Old"
+ if(40 to 50)
+ return "Middle-Aged"
+ if(24 to 40)
+ return FALSE //not necessary because this is basically the most common age range
+ if(18 to 24)
+ return "Young"
+ else
+ return "Puzzling"
+
+/mob/living/carbon/human/proc/get_generic_name(prefixed = FALSE, lowercase = FALSE)
+ var/final_string = ""
+ var/obscured = check_obscured_slots()
+ var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))
+ var/hide_features = (obscured & ITEM_SLOT_ICLOTHING) && skipface
+
+ if(generic_adjective && !hide_features)
+ final_string += "[generic_adjective] "
+
+ var/visible_age = get_age()
+ if(visible_age)
+ final_string += "[visible_age] "
+
+ final_string += "[dna.species.name] "
+
+ final_string += get_gender()
+
+ if(prefixed)
+ final_string = "\A [final_string]"
+
+ if(lowercase)
+ final_string = lowertext(final_string)
+ return final_string
+
+/mob/living/carbon/human/proc/get_gender()
+ var/visible_gender = p_they()
+ switch(visible_gender)
+ if("he")
+ visible_gender = "Man"
+ if("she")
+ visible_gender = "Woman"
+ if("they")
+ visible_gender = "Person"
+ else
+ visible_gender = "Thing"
+ return visible_gender
diff --git a/code/modules/mob/living/carbon/human/human_say.dm b/code/modules/mob/living/carbon/human/human_say.dm
index 039141bb5fd5..6b0c1ff1c768 100644
--- a/code/modules/mob/living/carbon/human/human_say.dm
+++ b/code/modules/mob/living/carbon/human/human_say.dm
@@ -7,16 +7,14 @@
else
. = ..()
-/mob/living/carbon/human/GetVoice()
+/mob/living/carbon/human/GetVoice(if_no_voice = get_generic_name())
if(istype(wear_mask, /obj/item/clothing/mask/chameleon))
- var/obj/item/clothing/mask/chameleon/V = wear_mask
- if(V.voice_change && wear_id)
+ var/obj/item/clothing/mask/chameleon/chameleon_mask = wear_mask
+ if(chameleon_mask.voice_change && wear_id)
var/obj/item/card/id/idcard = wear_id.GetID()
if(istype(idcard))
return idcard.registered_name
- else
- return real_name
- if(istype(wear_mask, /obj/item/clothing/mask/gas/syndicate/voicechanger))
+ else if(istype(wear_mask, /obj/item/clothing/mask/gas/syndicate/voicechanger))
var/obj/item/clothing/mask/gas/syndicate/voicechanger/V = wear_mask
if(V.voice_change && wear_id)
var/obj/item/card/id/idcard = wear_id.GetID()
@@ -26,18 +24,17 @@
return real_name
else
return real_name
- if(istype(wear_mask, /obj/item/clothing/mask/infiltrator))
- var/obj/item/clothing/mask/infiltrator/V = wear_mask
- if(V.voice_unknown)
- return ("Unknown")
- else
- return real_name
+ else if(istype(wear_mask, /obj/item/clothing/mask/infiltrator))
+ var/obj/item/clothing/mask/infiltrator/infiltrator_mask = wear_mask
+ if(infiltrator_mask.voice_unknown)
+ return if_no_voice
if(mind)
var/datum/antagonist/changeling/changeling = mind.has_antag_datum(/datum/antagonist/changeling)
if(changeling && changeling.mimicing)
return changeling.mimicing
- if(GetSpecialVoice())
- return GetSpecialVoice()
+ var/special_voice = GetSpecialVoice()
+ if(special_voice)
+ return special_voice
return real_name
/mob/living/carbon/human/IsVocal()
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index 435f33981a8c..b757fe6820b0 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -1370,9 +1370,6 @@ GLOBAL_LIST_EMPTY(roundstart_races)
/datum/species/proc/get_spans()
return list()
-/datum/species/proc/check_species_weakness(obj/item, mob/living/attacker)
- return 0 //This is not a boolean, it's the multiplier for the damage that the user takes from the item.It is added onto the check_weakness value of the mob, and then the force of the item is multiplied by this value
-
/**
* Equip the outfit required for life. Replaces items currently worn.
*/
@@ -1689,8 +1686,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
var/armor_block = H.run_armor_check(affecting, "melee", I.armour_penetration, FALSE, "Your armor has protected your [hit_area]!", "Your armor has softened a hit to your [hit_area]!")
armor_block = min(90,armor_block) //cap damage reduction at 90%
- var/weakness = H.check_weakness(I, user)
- apply_damage(I.force * weakness, I.damtype, def_zone, armor_block, H)
+ apply_damage(I.force, I.damtype, def_zone, armor_block, H, sharpness = I.get_sharpness())
H.send_item_attack_message(I, user, hit_area)
@@ -1759,7 +1755,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
return TRUE
-/datum/species/proc/apply_damage(damage, damagetype = BRUTE, def_zone = null, blocked, mob/living/carbon/human/H, forced = FALSE, spread_damage = FALSE, break_modifier = 1)
+/datum/species/proc/apply_damage(damage, damagetype = BRUTE, def_zone = null, blocked, mob/living/carbon/human/H, forced = FALSE, spread_damage = FALSE, break_modifier = 1, sharpness = FALSE)
SEND_SIGNAL(H, COMSIG_MOB_APPLY_DAMGE, damage, damagetype, def_zone)
var/hit_percent = (100-(blocked+armor))/100
hit_percent = (hit_percent * (100-H.physiology.damage_resistance))/100
@@ -1782,7 +1778,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
H.damageoverlaytemp = 20
var/damage_amount = forced ? damage : damage * hit_percent * brutemod * H.physiology.brute_mod
if(BP)
- if(BP.receive_damage(damage_amount, 0, break_modifier = break_modifier))
+ if(BP.receive_damage(damage_amount, 0, break_modifier = break_modifier, sharpness = sharpness))
H.update_damage_overlays()
else//no bodypart, we deal damage with a more general method.
H.adjustBruteLoss(damage_amount)
@@ -1792,7 +1788,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
H.damageoverlaytemp = 20
var/damage_amount = forced ? damage : damage * hit_percent * burnmod * H.physiology.burn_mod
if(BP)
- if(BP.receive_damage(0, damage_amount, break_modifier = break_modifier))
+ if(BP.receive_damage(0, damage_amount, break_modifier = break_modifier, sharpness = sharpness))
H.update_damage_overlays()
else
H.adjustFireLoss(damage_amount)
diff --git a/code/modules/mob/living/carbon/human/species_types/IPC.dm b/code/modules/mob/living/carbon/human/species_types/IPC.dm
index acf59019778e..9410111c9e4f 100644
--- a/code/modules/mob/living/carbon/human/species_types/IPC.dm
+++ b/code/modules/mob/living/carbon/human/species_types/IPC.dm
@@ -1,5 +1,5 @@
/datum/species/ipc // im fucking lazy mk2 and cant get sprites to normally work
- name = "\improper Integrated Positronic Chassis" //inherited from the real species, for health scanners and things
+ name = "\improper Positronic" //inherited from the real species, for health scanners and things
id = SPECIES_IPC
sexes = FALSE
species_age_min = 0
diff --git a/code/modules/mob/living/carbon/human/species_types/ethereal.dm b/code/modules/mob/living/carbon/human/species_types/ethereal.dm
index 6aa59e824169..44396246a146 100644
--- a/code/modules/mob/living/carbon/human/species_types/ethereal.dm
+++ b/code/modules/mob/living/carbon/human/species_types/ethereal.dm
@@ -46,7 +46,6 @@
var/current_color
var/EMPeffect = FALSE
- var/emag_effect = FALSE
var/static/unhealthy_color = rgb(237, 164, 149)
loreblurb = "Elzuosa are an uncommon and unusual species best described as crystalline, electrically-powered plantpeople. They hail from the warm planet Kalixcis, where they evolved alongside the Sarathi. Kalixcian culture places no importance on blood-bonds, and those from it tend to consider their family anyone they are sufficiently close to, and choose their own names."
var/drain_time = 0 //used to keep ethereals from spam draining power sources
@@ -64,7 +63,6 @@
return
var/mob/living/carbon/human/ethereal = _carbon
default_color = "#[ethereal.dna.features["ethcolor"]]"
- RegisterSignal(ethereal, COMSIG_ATOM_EMAG_ACT, PROC_REF(on_emag_act))
RegisterSignal(ethereal, COMSIG_ATOM_EMP_ACT, PROC_REF(on_emp_act))
ethereal_light = ethereal.mob_light()
spec_updatehealth(ethereal)
@@ -80,7 +78,6 @@
BP.update_limb(is_creating = TRUE)
/datum/species/elzuose/on_species_loss(mob/living/carbon/human/_carbon, datum/species/new_species, pref_load)
- UnregisterSignal(_carbon, COMSIG_ATOM_EMAG_ACT)
UnregisterSignal(_carbon, COMSIG_ATOM_EMP_ACT)
UnregisterSignal(_carbon, COMSIG_DIGOUT)
UnregisterSignal(_carbon, COMSIG_MOVABLE_MOVED)
@@ -94,7 +91,10 @@
desc = "Root into good soil to gain charge."
check_flags = AB_CHECK_CONSCIOUS
button_icon_state = "plant-22"
- icon_icon = 'icons/obj/flora/plants.dmi'
+ // [CELADON-EDIT] - CELADON_FLORA
+ // icon_icon = 'icons/obj/flora/plants.dmi' // CELADON-EDIT - ORIGINAL
+ icon_icon = 'mod_celadon/flora/icons/plants.dmi'
+ // [/CELADON-EDIT]
background_icon_state = "bg_alien"
/datum/action/innate/root/Activate()
@@ -180,8 +180,7 @@
return
if(_human.stat != DEAD && !EMPeffect)
- if(!emag_effect)
- current_color = health_adjusted_color(_human, default_color)
+ current_color = health_adjusted_color(_human, default_color)
set_ethereal_light(_human, current_color)
ethereal_light.set_light_on(TRUE)
fixed_mut_color = copytext_char(current_color, 2)
@@ -235,16 +234,6 @@
if(EMP_HEAVY)
addtimer(CALLBACK(src, PROC_REF(stop_emp), _human), 20 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE) //We're out for 20 seconds
-/datum/species/elzuose/proc/on_emag_act(mob/living/carbon/human/_human, mob/user)
- if(emag_effect)
- return
- emag_effect = TRUE
- if(user)
- to_chat(user, span_notice("You tap [_human] on the back with your card."))
- _human.visible_message(span_danger("[_human] starts flickering in an array of colors!"))
- handle_emag(_human)
- addtimer(CALLBACK(src, PROC_REF(stop_emag), _human), 30 SECONDS) //Disco mode for 30 seconds! This doesn't affect the ethereal at all besides either annoying some players, or making someone look badass.
-
/datum/species/elzuose/spec_life(mob/living/carbon/human/_human)
.=..()
handle_charge(_human)
@@ -254,18 +243,6 @@
spec_updatehealth(_human)
to_chat(_human, span_notice("You feel more energized as your shine comes back."))
-/datum/species/elzuose/proc/handle_emag(mob/living/carbon/human/_human)
- if(!emag_effect)
- return
- current_color = pick(ELZUOSE_EMAG_COLORS)
- spec_updatehealth(_human)
- addtimer(CALLBACK(src, PROC_REF(handle_emag), _human), 5) //Call ourselves every 0.5 seconds to change color
-
-/datum/species/elzuose/proc/stop_emag(mob/living/carbon/human/_human)
- emag_effect = FALSE
- spec_updatehealth(_human)
- _human.visible_message(span_danger("[_human] stops flickering and goes back to their normal state!"))
-
/datum/species/elzuose/proc/handle_charge(mob/living/carbon/human/_human)
brutemod = 1.25
switch(get_charge(_human))
@@ -320,34 +297,3 @@
if(istype(stomach))
return stomach.crystal_charge
return ELZUOSE_CHARGE_NONE
-
-/datum/species/elzuose/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, intent, mob/living/carbon/human/_human)
- if(istype(I, /obj/item/multitool))
- if(user.a_intent == INTENT_HARM)
- . = ..() // multitool beatdown
- return
-
- if (emag_effect == TRUE)
- to_chat(user, span_warning("The multitool can't get a lock on [_human]'s EM frequency!"))
- return
-
- if(user != _human)
- // random color change
- default_color = "#" + GLOB.color_list_ethereal[pick(GLOB.color_list_ethereal)]
- current_color = health_adjusted_color(_human, default_color)
- spec_updatehealth(_human)
- _human.visible_message(span_danger("[_human]'s EM frequency is scrambled to a random color."))
- else
- // select new color
- var/new_etherealcolor = input(user, "Choose your Elzuose color:", "Character Preference",default_color) as color|null
- if(new_etherealcolor)
- var/temp_hsv = RGBtoHSV(new_etherealcolor)
- if(ReadHSV(temp_hsv)[3] >= ReadHSV("#505050")[3]) // elzu colors should be bright ok??
- default_color = sanitize_hexcolor(new_etherealcolor, 6, TRUE)
- current_color = health_adjusted_color(_human, default_color)
- spec_updatehealth(_human)
- _human.visible_message(span_notice("[_human] modulates [_human.p_their()] EM frequency to [new_etherealcolor]"))
- else
- to_chat(user, span_danger("Invalid color. Your color is not bright enough."))
- else
- . = ..()
diff --git a/code/modules/mob/living/carbon/human/species_types/flypeople.dm b/code/modules/mob/living/carbon/human/species_types/flypeople.dm
index af19f1316ce2..f5de9f873b3b 100644
--- a/code/modules/mob/living/carbon/human/species_types/flypeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/flypeople.dm
@@ -35,7 +35,3 @@
"You throw up on the floor!")
return ..()
-/datum/species/fly/check_species_weakness(obj/item/weapon, mob/living/attacker)
- if(istype(weapon, /obj/item/melee/flyswatter))
- return 29 //Flyswatters deal 30x damage to flypeople.
- return 0
diff --git a/code/modules/mob/living/carbon/human/species_types/mothmen.dm b/code/modules/mob/living/carbon/human/species_types/mothmen.dm
index aed057083efb..91169299afba 100644
--- a/code/modules/mob/living/carbon/human/species_types/mothmen.dm
+++ b/code/modules/mob/living/carbon/human/species_types/mothmen.dm
@@ -1,5 +1,5 @@
/datum/species/moth
- name = "\improper Mothman"
+ name = "\improper Mothperson"
id = SPECIES_MOTH
default_color = "00FF00"
species_traits = list(LIPS, NOEYESPRITES, TRAIT_ANTENNAE, HAIR, EMOTE_OVERLAY)
@@ -73,11 +73,6 @@
H.reagents.remove_reagent(chem.type, REAGENTS_METABOLISM)
return ..()
-/datum/species/moth/check_species_weakness(obj/item/weapon, mob/living/attacker)
- if(istype(weapon, /obj/item/melee/flyswatter))
- return 9 //flyswatters deal 10x damage to moths
- return 0
-
/datum/species/space_move(mob/living/carbon/human/H)
. = ..()
if(H.loc && !isspaceturf(H.loc) && H.getorganslot(ORGAN_SLOT_WINGS) && !flying_species) //"flying_species" is exclusive to the potion of flight, which has its flying mechanics. If they want to fly they can use that instead
diff --git a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm
index ec9afd777f2c..d3c900c56786 100644
--- a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm
+++ b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm
@@ -1,5 +1,5 @@
/datum/species/plasmaman
- name = "\improper Plasmaman"
+ name = "\improper Phorid"
id = SPECIES_PLASMAMAN
sexes = 0
meat = /obj/item/stack/sheet/mineral/plasma
diff --git a/code/modules/mob/living/carbon/human/species_types/spider.dm b/code/modules/mob/living/carbon/human/species_types/spider.dm
index 847d6ad74f3f..9c0f58dc8312 100644
--- a/code/modules/mob/living/carbon/human/species_types/spider.dm
+++ b/code/modules/mob/living/carbon/human/species_types/spider.dm
@@ -97,11 +97,6 @@ GLOBAL_LIST_INIT(spider_last, world.file2list("strings/names/spider_last.txt"))
H.reagents.remove_reagent(chem.type, REAGENTS_METABOLISM)
return ..()
-/datum/species/spider/check_species_weakness(obj/item/weapon, mob/living/attacker)
- if(istype(weapon, /obj/item/melee/flyswatter))
- return 9 //flyswatters deal 10x damage to spiders
- return 0
-
/mob/living/carbon/human/species/spider
race = /datum/species/spider
diff --git a/code/modules/mob/living/carbon/human/species_types/vampire.dm b/code/modules/mob/living/carbon/human/species_types/vampire.dm
index 070894a92bee..5caf871a7f23 100644
--- a/code/modules/mob/living/carbon/human/species_types/vampire.dm
+++ b/code/modules/mob/living/carbon/human/species_types/vampire.dm
@@ -53,11 +53,6 @@
C.adjust_fire_stacks(6)
C.IgniteMob()
-/datum/species/vampire/check_species_weakness(obj/item/weapon, mob/living/attacker)
- if(istype(weapon, /obj/item/nullrod/whip))
- return 1 //Whips deal 2x damage to vampires. Vampire killer.
- return 0
-
/obj/item/organ/tongue/vampire
name = "vampire tongue"
actions_types = list(/datum/action/item_action/organ_action/vampire)
diff --git a/code/modules/mob/living/carbon/human/species_types/zombies.dm b/code/modules/mob/living/carbon/human/species_types/zombies.dm
index 702adfb224a2..c90cbd0dbc8f 100644
--- a/code/modules/mob/living/carbon/human/species_types/zombies.dm
+++ b/code/modules/mob/living/carbon/human/species_types/zombies.dm
@@ -46,7 +46,7 @@
/datum/species/zombie/infectious/spec_stun(mob/living/carbon/human/H,amount)
. = min(20, amount)
-/datum/species/zombie/infectious/apply_damage(damage, damagetype = BRUTE, def_zone = null, blocked, mob/living/carbon/human/H, forced = FALSE)
+/datum/species/zombie/infectious/apply_damage(damage, damagetype = BRUTE, def_zone = null, blocked, mob/living/carbon/human/H, forced = FALSE, sharpness = FALSE)
. = ..()
if(.)
regen_cooldown = world.time + REGENERATION_DELAY
diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm
index 76daa5ba21d4..430d02f7f1ea 100644
--- a/code/modules/mob/living/damage_procs.dm
+++ b/code/modules/mob/living/damage_procs.dm
@@ -11,10 +11,12 @@
* * blocked - armor value applied
* * forced - bypass hit percentage
* * spread_damage - used in overrides
+ * * break_modifier - increases bone breaking chance
+ * * sharpness - used for bleeding
*
* Returns TRUE if damage applied
*/
-/mob/living/proc/apply_damage(damage = 0,damagetype = BRUTE, def_zone = null, blocked = FALSE, forced = FALSE, spread_damage = FALSE, break_modifier = 1)//WS Edit - Breakable Bones
+/mob/living/proc/apply_damage(damage = 0,damagetype = BRUTE, def_zone = null, blocked = FALSE, forced = FALSE, spread_damage = FALSE, break_modifier = 1, sharpness = FALSE)//WS Edit - Breakable Bones
SEND_SIGNAL(src, COMSIG_MOB_APPLY_DAMGE, damage, damagetype, def_zone)
var/hit_percent = (100-blocked)/100
if(!damage || (!forced && hit_percent <= 0) || !(flags_1 & INITIALIZED_1))
diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm
index 47fc5bd82ecb..a25025294497 100644
--- a/code/modules/mob/living/life.dm
+++ b/code/modules/mob/living/life.dm
@@ -38,6 +38,8 @@
if (QDELETED(src)) // diseases can qdel the mob via transformations
return
+ SEND_SIGNAL(src, COMSIG_MOB_LIFE)
+
if(stat != DEAD)
//Random events (vomiting etc)
handle_random_events()
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index d78d0d1487c1..30005533d720 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -820,7 +820,7 @@
TH.transfer_mob_blood_dna(src)
/mob/living/carbon/human/makeTrail(turf/T)
- if((NOBLOOD in dna.species.species_traits) || !bleed_rate || bleedsuppress)
+ if((NOBLOOD in dna.species.species_traits) || bleedsuppress || !LAZYLEN(get_bleeding_parts(TRUE)))
return
..()
@@ -1144,15 +1144,6 @@
devilInfo.remove_soul(mind)
mind.soulOwner = mind
-/mob/living/proc/has_bane(banetype)
- var/datum/antagonist/devil/devilInfo = is_devil(src)
- return devilInfo && banetype == devilInfo.bane
-
-/mob/living/proc/check_weakness(obj/item/weapon, mob/living/attacker)
- if(mind && mind.has_antag_datum(/datum/antagonist/devil))
- return check_devil_bane_multiplier(weapon, attacker)
- return 1 //This is not a boolean, it's the multiplier for the damage the weapon does.
-
/mob/living/proc/check_acedia()
if(mind && mind.has_objective(/datum/objective/sintouched/acedia))
return TRUE
diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm
index 86c85d27360a..b5b0b7e29c4e 100644
--- a/code/modules/mob/living/living_defense.dm
+++ b/code/modules/mob/living/living_defense.dm
@@ -54,7 +54,7 @@
var/armor = run_armor_check(def_zone, P.flag, P.armour_penetration, silent = TRUE)
var/on_hit_state = P.on_hit(src, armor, piercing_hit)
if(!P.nodamage && on_hit_state != BULLET_ACT_BLOCK && !QDELETED(src)) //QDELETED literally just for the instagib rifle. Yeah.
- apply_damage(P.damage, P.damage_type, def_zone, armor)
+ apply_damage(P.damage, P.damage_type, def_zone, armor, sharpness = TRUE)
recoil_camera(src, clamp((P.damage-armor)/4,0.5,10), clamp((P.damage-armor)/4,0.5,10), P.damage/8, P.Angle)
apply_effects(P.stun, P.knockdown, P.unconscious, P.irradiate, P.slur, P.stutter, P.eyeblur, P.drowsy, armor, P.stamina, P.jitter, P.paralyze, P.immobilize)
if(P.dismemberment)
@@ -101,6 +101,9 @@
return 1
else
playsound(loc, 'sound/weapons/genhit.ogg', 50, TRUE, -1) //Item sounds are handled in the item itself
+
+ if(body_position == LYING_DOWN) // physics says it's significantly harder to push someone by constantly chucking random furniture at them if they are down on the floor.
+ hitpush = FALSE
..()
diff --git a/code/modules/mob/living/login.dm b/code/modules/mob/living/login.dm
index d59e3f77781e..62098a940937 100644
--- a/code/modules/mob/living/login.dm
+++ b/code/modules/mob/living/login.dm
@@ -18,7 +18,7 @@
var/virtual_z = virtual_z()
- LAZYADDASSOC(SSmobs.players_by_virtual_z, "[virtual_z]", src)
+ LAZYADDASSOCLIST(SSmobs.players_by_virtual_z, "[virtual_z]", src)
SSidlenpcpool.try_wakeup_virtual_z(virtual_z)
//Vents
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index daa987904737..cfd7d9153c8d 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -1063,3 +1063,4 @@
ghostize(1)
QDEL_NULL(src)
+
diff --git a/code/modules/mob/living/silicon/damage_procs.dm b/code/modules/mob/living/silicon/damage_procs.dm
index a6d86d1507ba..80c643e0ceef 100644
--- a/code/modules/mob/living/silicon/damage_procs.dm
+++ b/code/modules/mob/living/silicon/damage_procs.dm
@@ -1,5 +1,5 @@
-/mob/living/silicon/apply_damage(damage = 0,damagetype = BRUTE, def_zone = null, blocked = FALSE, forced = FALSE, break_modifier = 1)
+/mob/living/silicon/apply_damage(damage = 0,damagetype = BRUTE, def_zone = null, blocked = FALSE, forced = FALSE, break_modifier = 1, sharpness = FALSE)
var/hit_percent = (100-blocked)/100
if((!damage || (!forced && hit_percent <= 0)))
return 0
diff --git a/code/modules/mob/living/simple_animal/corpse.dm b/code/modules/mob/living/simple_animal/corpse.dm
index aa49c6e52b59..a1b10b897db6 100644
--- a/code/modules/mob/living/simple_animal/corpse.dm
+++ b/code/modules/mob/living/simple_animal/corpse.dm
@@ -47,14 +47,14 @@
id = /obj/item/card/id/syndicate
/obj/effect/mob_spawn/human/corpse/syndicateramzi
- name = "Ramzi's Clique Commando"
+ name = "Ramzi Clique Commando"
id_job = "Cutthroat"
hairstyle = "Bald"
facial_hairstyle = "Shaved"
outfit = /datum/outfit/syndicateramzicorpse
/datum/outfit/syndicateramzicorpse
- name = "Ramzi's Clique Commando Corpse"
+ name = "Ramzi Clique Commando Corpse"
uniform = /obj/item/clothing/under/syndicate/gorlex
suit = /obj/item/clothing/suit/space/hardsuit/syndi/ramzi
shoes = /obj/item/clothing/shoes/combat
diff --git a/code/modules/mob/living/simple_animal/friendly/mothroach.dm b/code/modules/mob/living/simple_animal/friendly/mothroach.dm
index 2002ef3b5d8d..881e64d2a70f 100644
--- a/code/modules/mob/living/simple_animal/friendly/mothroach.dm
+++ b/code/modules/mob/living/simple_animal/friendly/mothroach.dm
@@ -64,8 +64,3 @@
qdel(I) // this sucks
else
return ..()
-
-/mob/living/simple_animal/pet/mothroach/check_weakness(obj/item/weapon, mob/living/attacker)
- if(istype(weapon, /obj/item/melee/flyswatter))
- return 9 // flyswatters deal 10x damage to mothroaches
- return 0
diff --git a/code/modules/mob/living/simple_animal/hostile/cat_butcher.dm b/code/modules/mob/living/simple_animal/hostile/cat_butcher.dm
index 8da384aaca4b..67d7d3e00040 100644
--- a/code/modules/mob/living/simple_animal/hostile/cat_butcher.dm
+++ b/code/modules/mob/living/simple_animal/hostile/cat_butcher.dm
@@ -82,11 +82,11 @@
L.adjustOxyLoss(-50)// do CPR first
if(L.blood_volume <= 500) //bandage them up and give em some blood if they're bleeding
L.blood_volume += 30
- L.suppress_bloodloss(1800)
+ L.heal_bleeding(10)
if(L.getBruteLoss() >= 50)// first, did we beat them into crit? if so, heal that
var/healing = min(L.getBruteLoss(), 120)
L.adjustBruteLoss(-healing)
- L.suppress_bloodloss(1800)//bandage their ass
+ L.heal_bleeding(10)
return
else if(L.getFireLoss() >= 50) // are they still down from other damage? fix it, but not as fast as the burns
var/healing = min(L.getFireLoss(), 50)
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm
index 1cbc7ec58d51..6e6c521fe445 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm
@@ -316,14 +316,9 @@
move_resist = MOVE_RESIST_DEFAULT
pull_force = PULL_FORCE_DEFAULT
visible_message("[src] falls over with a mighty crash, the remaining legions within it falling apart!")
- new /obj/item/crusher_trophy/legion_skull(loc)
- new /obj/item/crusher_trophy/legion_skull(loc)
- new /obj/item/crusher_trophy/legion_skull(loc)
new /mob/living/simple_animal/hostile/asteroid/hivelord/legion(loc)
new /mob/living/simple_animal/hostile/asteroid/hivelord/legion(loc)
new /mob/living/simple_animal/hostile/asteroid/hivelord/legion(loc)
- if(prob(45))
- new /obj/item/reagent_containers/glass/bottle/necropolis_seed(loc)
..(gibbed)
/mob/living/simple_animal/hostile/big_legion/Initialize()
@@ -403,521 +398,38 @@
/obj/effect/mob_spawn/human/corpse/damaged/legioninfested/Initialize() //in an ideal world, these would generate, the legion would overlay over the corpse, and we'd get cool sprites
mob_species = pickweight(list(
- /datum/species/human = 31,
- /datum/species/lizard = 26,
- /datum/species/elzuose = 24,
- /datum/species/spider = 7,
- /datum/species/ipc = 7,
- /datum/species/jelly = 4,
- /datum/species/fly = 1
+ /datum/species/human = 50,
+ /datum/species/lizard = 20,
+ /datum/species/ipc = 10,
+ /datum/species/elzuose = 10,
+ /datum/species/moth = 5,
+ /datum/species/spider = 5
)
)
var/type = pickweight(list(
- "Miner" = 44,
- "Waldo" = 3,
- "Ashwalker" = 7,
- "Soldier" = 5,
- "Oldminer" = 8,
- "Kobold" = 5,
- "SRM" = 6,
- "Operative" = 5,
- pick("Shadow", "YeOlde") = 4
+ "Miner" = 40,
+ "Assistant" = 10,
+ "Engineer" = 5,
+ "Doctor" = 5,
+ "Scientist" = 5,
+ "Cargo" = 5,
+ "Security" = 5
)
)
+
switch(type)
if("Miner")
- if(prob(2))
- mob_species = /datum/species/plasmaman
- uniform = /obj/item/clothing/under/plasmaman
- head = /obj/item/clothing/head/helmet/space/plasmaman
- belt = /obj/item/tank/internals/plasmaman/belt
- else
- uniform = /obj/item/clothing/under/rank/cargo/miner/lavaland
- if (prob(4))
- belt = pickweight(list(
- /obj/item/storage/belt/mining = 2,
- /obj/item/storage/belt/mining/alt = 2
- )
- )
- else if(prob(10))
- belt = pickweight(list(
- /obj/item/pickaxe = 8,
- /obj/item/pickaxe/mini = 4,
- /obj/item/pickaxe/silver = 2,
- /obj/item/pickaxe/diamond = 1,
- /obj/item/gun/energy/kinetic_accelerator = 1
- )
- )
- else
- belt = /obj/item/tank/internals/emergency_oxygen/engi
- if(mob_species != /datum/species/lizard)
- shoes = /obj/item/clothing/shoes/workboots/mining
- gloves = /obj/item/clothing/gloves/color/black
- mask = /obj/item/clothing/mask/gas/explorer
- if(prob(45))
- glasses = /obj/item/clothing/glasses/meson
- if(prob(20))
- suit = pickweight(list(
- /obj/item/clothing/suit/hooded/explorer = 18,
- /obj/item/clothing/suit/hooded/cloak/goliath = 2
- )
- )
- if(prob(30))
- r_pocket = pickweight(list(
- /obj/item/stack/marker_beacon = 20,
- /obj/item/spacecash/bundle/mediumrand = 7,
- /obj/item/reagent_containers/hypospray/medipen/survival = 2,
- /obj/item/borg/upgrade/modkit/damage = 1
- )
- )
- if(prob(10))
- l_pocket = pickweight(list(
- /obj/item/spacecash/bundle/mediumrand = 7,
- /obj/item/reagent_containers/hypospray/medipen/survival = 2,
- /obj/item/borg/upgrade/modkit/cooldown = 1
- )
- )
- if(prob(95))
- back = /obj/item/storage/backpack/explorer
- backpack_contents = list(/obj/item/radio)
- if(prob(70))
- backpack_contents += pickweight(list(
- /obj/item/borg/upgrade/modkit/damage = 1,
- /obj/item/borg/upgrade/modkit/trigger_guard = 1,
- /obj/item/soap/nanotrasen = 1,
- /obj/item/wormhole_jaunter = 1,
- /obj/item/fulton_core = 1,
- /obj/item/extraction_pack = 2,
- /obj/item/stack/sheet/animalhide/goliath_hide = 3,
- /obj/item/hivelordstabilizer = 2,
- /obj/item/stack/marker_beacon/ten = 2,
- /obj/item/mining_scanner = 2,
- /obj/item/extinguisher/mini = 2,
- /obj/item/kitchen/knife/combat/survival = 3,
- /obj/item/flashlight/seclite=3,
- /obj/item/stack/sheet/sinew = 3,
- /obj/item/stack/sheet/bone = 3
- )
- )
- if(prob(70))
- backpack_contents += pickweight(list(
- /obj/item/borg/upgrade/modkit/damage = 1,
- /obj/item/borg/upgrade/modkit/trigger_guard = 1,
- /obj/item/soap/nanotrasen = 1,
- /obj/item/wormhole_jaunter = 1,
- /obj/item/fulton_core = 1,
- /obj/item/extraction_pack = 2,
- /obj/item/stack/sheet/animalhide/goliath_hide = 3,
- /obj/item/hivelordstabilizer = 2,
- /obj/item/stack/marker_beacon/ten = 2,
- /obj/item/mining_scanner = 2,
- /obj/item/extinguisher/mini = 2,
- /obj/item/kitchen/knife/combat/survival = 3,
- /obj/item/flashlight/seclite = 3,
- /obj/item/stack/sheet/sinew = 3,
- /obj/item/stack/sheet/bone = 3
- )
- )
- if(prob(70))
- backpack_contents += pickweight(list(
- /obj/item/borg/upgrade/modkit/damage = 1,
- /obj/item/borg/upgrade/modkit/trigger_guard = 1,
- /obj/item/soap/nanotrasen = 1,
- /obj/item/wormhole_jaunter = 1,
- /obj/item/fulton_core = 1,
- /obj/item/extraction_pack = 2,
- /obj/item/stack/sheet/animalhide/goliath_hide = 3,
- /obj/item/hivelordstabilizer = 2,
- /obj/item/stack/marker_beacon/ten = 2,
- /obj/item/mining_scanner = 2,
- /obj/item/extinguisher/mini = 2,
- /obj/item/kitchen/knife/combat/survival = 3,
- /obj/item/flashlight/seclite = 3,
- /obj/item/stack/sheet/sinew = 3,
- /obj/item/stack/sheet/bone = 3
- )
- )
- if(prob(30))
- backpack_contents += list(
- /obj/item/reagent_containers/hypospray/medipen/survival = pickweight(list(
- 1 = 3,
- 2 = 2,
- 3 = 1
- )
- )
- )
- else
- back = /obj/item/kinetic_crusher
- if("Oldminer")
- suit = /obj/item/clothing/suit/hooded/explorer/old
- mask = /obj/item/clothing/mask/gas/explorer/old
- if(prob(95))
- glasses = /obj/item/clothing/glasses/meson
- else
- glasses = /obj/item/clothing/glasses/meson/night
- suit_store = /obj/item/tank/internals/oxygen
- gloves = /obj/item/clothing/gloves/explorer/old
- uniform = /obj/item/clothing/under/rank/cargo/miner/lavaland/old
- if(prob(85))
- back = /obj/item/storage/backpack/explorer //someone could totally make these backpacks a subtype and just have them be there. It'd cut down this file size a bit.
- backpack_contents = list()
- if(prob(70))
- backpack_contents += pickweight(list(
- /obj/item/borg/upgrade/modkit/damage = 1,
- /obj/item/borg/upgrade/modkit/trigger_guard = 1,
- /obj/item/soap/nanotrasen = 1,
- /obj/item/wormhole_jaunter = 1,
- /obj/item/fulton_core = 1,
- /obj/item/extraction_pack = 2,
- /obj/item/stack/sheet/animalhide/goliath_hide = 3,
- /obj/item/hivelordstabilizer = 2,
- /obj/item/stack/marker_beacon/ten = 2,
- /obj/item/mining_scanner = 2,
- /obj/item/extinguisher/mini = 2,
- /obj/item/kitchen/knife/combat/survival = 3,
- /obj/item/flashlight/seclite=3,
- /obj/item/stack/sheet/sinew = 3,
- /obj/item/stack/sheet/bone = 3
- )
- )
- if(prob(70))
- backpack_contents += pickweight(list(
- /obj/item/borg/upgrade/modkit/damage = 1,
- /obj/item/borg/upgrade/modkit/trigger_guard = 1,
- /obj/item/soap/nanotrasen = 1,
- /obj/item/wormhole_jaunter = 1,
- /obj/item/fulton_core = 1,
- /obj/item/extraction_pack = 2,
- /obj/item/stack/sheet/animalhide/goliath_hide = 3,
- /obj/item/hivelordstabilizer = 2,
- /obj/item/stack/marker_beacon/ten = 2,
- /obj/item/mining_scanner = 2,
- /obj/item/extinguisher/mini = 2,
- /obj/item/kitchen/knife/combat/survival = 3,
- /obj/item/flashlight/seclite=3,
- /obj/item/stack/sheet/sinew = 3,
- /obj/item/stack/sheet/bone = 3
- )
- )
- if(prob(70))
- backpack_contents += pickweight(list(
- /obj/item/borg/upgrade/modkit/damage = 1,
- /obj/item/borg/upgrade/modkit/trigger_guard = 1,
- /obj/item/soap/nanotrasen = 1,
- /obj/item/wormhole_jaunter = 1,
- /obj/item/fulton_core = 1,
- /obj/item/extraction_pack = 2,
- /obj/item/stack/sheet/animalhide/goliath_hide = 3,
- /obj/item/hivelordstabilizer = 2,
- /obj/item/stack/marker_beacon/ten = 2,
- /obj/item/mining_scanner = 2,
- /obj/item/extinguisher/mini = 2,
- /obj/item/kitchen/knife/combat/survival = 3,
- /obj/item/flashlight/seclite=3,
- /obj/item/stack/sheet/sinew = 3,
- /obj/item/stack/sheet/bone = 3
- )
- )
- if(prob(30))
- backpack_contents += list(
- /obj/item/reagent_containers/hypospray/medipen/survival = pickweight(list(
- 1 = 3,
- 2 = 2,
- 3 = 1
- )
- )
- )
- else
- back = /obj/item/kinetic_crusher/old
- if(prob(30))
- belt = /obj/item/gun/energy/kinetic_accelerator/old
- if(prob(30))
- r_pocket = pickweight(list(
- /obj/item/stack/marker_beacon = 20,
- /obj/item/spacecash/bundle/mediumrand = 7,
- /obj/item/reagent_containers/hypospray/medipen/survival = 2,
- /obj/item/borg/upgrade/modkit/damage = 1
- )
- )
- if(prob(30))
- l_pocket = pickweight(list(
- /obj/item/spacecash/bundle/mediumrand = 5,
- /obj/item/reagent_containers/hypospray/medipen/survival = 2,
- /obj/item/borg/upgrade/modkit/cooldown = 1
- )
- )
- if("Ashwalker")
- mob_species = /datum/species/lizard/ashwalker
- uniform = /obj/item/clothing/under/costume/gladiator/ash_walker
- if(prob(95))
- head = /obj/item/clothing/head/helmet/gladiator
- else
- head = /obj/item/clothing/head/helmet/skull
- suit = /obj/item/clothing/suit/armor/bone
- gloves = /obj/item/clothing/gloves/bracer
- if(prob(45))
- back = pickweight(list(
- /obj/item/spear/bonespear = 3,
- /obj/item/fireaxe/boneaxe = 2
- )
- )
- if(prob(10))
- belt = /obj/item/storage/belt/mining/primitive
- if(prob(30))
- r_pocket = /obj/item/restraints/legcuffs/bola/watcher
- if(prob(30))
- l_pocket = /obj/item/kitchen/knife/combat/bone
- if("Soldier")
- mob_species = /datum/species/human
- if(prob(90))
- uniform = /obj/item/clothing/under/solgov
- suit = /obj/item/clothing/suit/armor/vest/bulletproof/solgov
- shoes = /obj/item/clothing/shoes/jackboots
- gloves = /obj/item/clothing/gloves/color/black
- mask = /obj/item/clothing/mask/gas/sechailer
- head = /obj/item/clothing/head/solgov/sonnensoldner
- id = /obj/item/card/id/solgov
- else
- uniform = /obj/item/clothing/under/solgov
- suit = /obj/item/clothing/suit/space/hardsuit/solgov
- shoes = /obj/item/clothing/shoes/combat
- gloves = /obj/item/clothing/gloves/combat
- mask = /obj/item/clothing/mask/gas/sechailer/swat
- id = /obj/item/card/id/solgov
- if(prob(85))
- back = /obj/item/storage/backpack
- backpack_contents = list()
- if(prob(75))
- backpack_contents += pickweight(list(
- /obj/item/reagent_containers/hypospray/medipen/stimpack/traitor = 1,
- /obj/item/storage/firstaid/tactical = 1,
- /obj/item/gun/ballistic/automatic/pistol/solgov = 1,
- /obj/item/gps = 1,
- /obj/item/stock_parts/cell/gun/upgraded = 2,
- /obj/item/ammo_box/magazine/pistol556mm = 3,
- /obj/item/desk_flag/solgov = 3,
- /obj/item/stack/marker_beacon/ten = 3,
- /obj/item/detective_scanner = 2,
- /obj/item/extinguisher/mini = 3,
- /obj/item/kitchen/knife/combat = 3,
- /obj/item/flashlight/seclite=3,
- /obj/item/ammo_casing/shotgun = 3,
- /obj/item/binoculars = 3,
- /obj/item/clipboard = 3
- )
- )
- if(prob(75))
- backpack_contents += pickweight(list(
- /obj/item/reagent_containers/hypospray/medipen/stimpack/traitor = 1,
- /obj/item/storage/firstaid/tactical = 1,
- /obj/item/gun/ballistic/automatic/pistol/solgov = 1,
- /obj/item/gps = 1,
- /obj/item/stock_parts/cell/gun/upgraded = 2,
- /obj/item/ammo_box/magazine/pistol556mm = 3,
- /obj/item/desk_flag/solgov = 3,
- /obj/item/stack/marker_beacon/ten = 3,
- /obj/item/detective_scanner = 2,
- /obj/item/extinguisher/mini = 3,
- /obj/item/kitchen/knife/combat = 3,
- /obj/item/flashlight/seclite=3,
- /obj/item/ammo_casing/shotgun = 3,
- /obj/item/binoculars = 3,
- /obj/item/clipboard = 3
- )
- )
- if(prob(75))
- backpack_contents += pickweight(list(
- /obj/item/reagent_containers/hypospray/medipen/stimpack/traitor = 1,
- /obj/item/storage/firstaid/tactical = 1,
- /obj/item/gun/ballistic/automatic/pistol/solgov = 1,
- /obj/item/gps = 1,
- /obj/item/stock_parts/cell/gun/upgraded = 2,
- /obj/item/ammo_box/magazine/pistol556mm = 3,
- /obj/item/desk_flag/solgov = 3,
- /obj/item/stack/marker_beacon/ten = 3,
- /obj/item/detective_scanner = 2,
- /obj/item/extinguisher/mini = 3,
- /obj/item/kitchen/knife/combat = 3,
- /obj/item/flashlight/seclite=3,
- /obj/item/ammo_casing/shotgun = 3,
- /obj/item/binoculars = 3,
- /obj/item/clipboard = 3
- )
- )
- else
- back = pickweight(list(
- /obj/item/energyhalberd = 5,
- /obj/item/gun/ballistic/rocketlauncher = 5
- )
- )
- if(prob(25))
- belt = /obj/item/storage/belt/military
- if(prob(50))
- r_pocket = pickweight(list(
- /obj/item/reagent_containers/hypospray/medipen/stimpack = 1,
- /obj/item/kitchen/knife/letter_opener = 3,
- /obj/item/radio = 3,
- /obj/item/grenade/syndieminibomb/concussion = 1,
- /obj/item/melee/transforming/energy/ctf/solgov = 1
- )
- )
- if(prob(50))
- l_pocket = pickweight(list(
- /obj/item/reagent_containers/hypospray/medipen/stimpack = 1,
- /obj/item/kitchen/knife/letter_opener = 3,
- /obj/item/radio = 3,
- /obj/item/grenade/syndieminibomb/concussion = 1,
- /obj/item/melee/transforming/energy/ctf/solgov = 1
- )
- )
- if(prob(70))
- glasses = pickweight(list(
- /obj/item/clothing/glasses/sunglasses = 3,
- /obj/item/clothing/glasses/hud/health = 3,
- /obj/item/clothing/glasses/hud/health/night = 1,
- /obj/item/clothing/glasses/night = 2
- )
- )
- if("Kobold")
- mob_species = /datum/species/lizard/ashwalker/kobold
- uniform = /obj/item/clothing/under/costume/gladiator/ash_walker
- if(prob(95))
- head = /obj/item/clothing/head/helmet/gladiator
- else
- head = /obj/item/clothing/head/helmet/skull
- suit = /obj/item/clothing/suit/armor/bone
- gloves = /obj/item/clothing/gloves/bracer
- if(prob(5))
- back = pickweight(list(
- /obj/item/spear/bonespear = 3,
- /obj/item/fireaxe/boneaxe = 2
- )
- )
- if(prob(10))
- belt = /obj/item/storage/belt/mining/primitive
- if(prob(30))
- r_pocket = /obj/item/kitchen/knife/combat/bone
- if(prob(30))
- l_pocket = /obj/item/kitchen/knife/combat/bone
- if("YeOlde")
- mob_gender = FEMALE
- uniform = /obj/item/clothing/under/costume/maid
- gloves = /obj/item/clothing/gloves/color/white
- shoes = /obj/item/clothing/shoes/laceup
- head = /obj/item/clothing/head/helmet/knight
- suit = /obj/item/clothing/suit/armor/riot/knight
- back = /obj/item/shield/riot/buckler
- belt = /obj/item/nullrod/claymore
- r_pocket = /obj/item/tank/internals/emergency_oxygen
- mask = /obj/item/clothing/mask/breath
- if("Operative")
- id_job = "Operative"
- if(prob(40))
- outfit = /datum/outfit/syndicatecommandocorpse
- else if(prob(5))
- outfit = /datum/outfit/syndicatestormtroopercorpse
- else
- outfit = /datum/outfit/syndicateramzicorpse
- if("Waldo")//WE FINALLY FOUND HIM
- name = "Waldo"
- uniform = /obj/item/clothing/under/pants/jeans
- suit = /obj/item/clothing/suit/striped_sweater
- head = /obj/item/clothing/head/beanie/waldo
- shoes = /obj/item/clothing/shoes/sneakers/brown
- ears = /obj/item/radio/headset
- glasses = /obj/item/clothing/glasses/regular/circle
- back = /obj/item/storage/backpack/satchel/leather
- backpack_contents = list()
- if(prob(50))
- backpack_contents += pickweight(list(
- /obj/item/book/granter/spell/knock = 1,
- /obj/item/book/granter/spell/blind = 1,
- /obj/item/shadowcloak = 1,
- /obj/item/book/granter/spell/smoke = 2,
- /obj/item/reagent_containers/syringe/mulligan = 2,
- /obj/item/dice/d20 = 3,
- /obj/item/dice/d20/fate/stealth/one_use = 1,
- /obj/item/clothing/head/chameleon/broken = 3,
- /obj/item/stack/marker_beacon/ten = 3,
- /obj/item/grenade/smokebomb = 3,
- /obj/item/grenade/flashbang = 3
- )
- )
- if(prob(50))
- backpack_contents += pickweight(list(
- /obj/item/book/granter/spell/knock = 1,
- /obj/item/book/granter/spell/blind = 1,
- /obj/item/shadowcloak = 1,
- /obj/item/book/granter/spell/smoke = 2,
- /obj/item/reagent_containers/syringe/mulligan = 2,
- /obj/item/dice/d20/fate/stealth/one_use = 1,
- /obj/item/dice/d20 = 3,
- /obj/item/clothing/head/chameleon/broken = 3,
- /obj/item/stack/marker_beacon/ten = 3,
- /obj/item/grenade/smokebomb = 3,
- /obj/item/grenade/flashbang = 3
- )
- )
- if(prob(50))
- backpack_contents += pickweight(list(
- /obj/item/book/granter/spell/knock = 1,
- /obj/item/book/granter/spell/blind = 1,
- /obj/item/shadowcloak = 1,
- /obj/item/book/granter/spell/smoke = 2,
- /obj/item/reagent_containers/syringe/mulligan = 2,
- /obj/item/dice/d20/fate/stealth/one_use = 1,
- /obj/item/clothing/head/chameleon/broken = 3,
- /obj/item/stack/marker_beacon/ten = 3,
- /obj/item/grenade/smokebomb = 3,
- /obj/item/grenade/flashbang = 3
- )
- )
- if(prob(25))
- r_pocket = pickweight(list(
- /obj/item/chameleon,
- /obj/item/dnainjector/chameleonmut = 1,
- /obj/item/flashlight/flashdark = 1
- )
- )
- if(prob(25))
- l_pocket = pickweight(list(
- /obj/item/chameleon,
- /obj/item/dnainjector/chameleonmut = 1,
- /obj/item/flashlight/flashdark = 1
- )
- )
- if("Shadow")
- mob_species = /datum/species/shadow
- neck = /obj/item/clothing/accessory/medal/plasma/nobel_science
- uniform = /obj/item/clothing/under/color/black
- shoes = /obj/item/clothing/shoes/sneakers/black
- suit = /obj/item/clothing/suit/toggle/labcoat
- glasses = /obj/item/clothing/glasses/blindfold
- back = /obj/item/tank/internals/oxygen
- mask = /obj/item/clothing/mask/breath
- if("SRM")
- uniform = /obj/item/clothing/under/suit/roumain
- shoes = /obj/item/clothing/shoes/workboots/mining
- if(prob(50))
- suit = /obj/item/clothing/suit/armor/roumain/shadow
- head = /obj/item/clothing/head/cowboy/sec/roumain/shadow
- else
- suit = /obj/item/clothing/suit/armor/roumain
- head = /obj/item/clothing/head/cowboy/sec/roumain
- if(prob(25))
- suit_store = /obj/item/gun/ballistic/shotgun/flamingarrow
- r_pocket = /obj/item/book/manual/trickwines_4_brewers
- belt = pick(list(/obj/item/kitchen/knife/hunting = 1, /obj/item/gun/ballistic/derringer = 1))
- back = /obj/item/storage/backpack/cultpack
- backpack_contents = list()
- if(prob(75))
- backpack_contents += list(/obj/item/ammo_box/c38_box = 1)
- if(prob(75))
- backpack_contents += list(pick(
- /obj/item/reagent_containers/food/drinks/breakawayflask/vintage/ashwine,
- /obj/item/reagent_containers/food/drinks/breakawayflask/vintage/icewine,
- /obj/item/reagent_containers/food/drinks/breakawayflask/vintage/shockwine,
- /obj/item/reagent_containers/food/drinks/breakawayflask/vintage/hearthwine,
- /obj/item/reagent_containers/food/drinks/breakawayflask/vintage/forcewine,
- /obj/item/reagent_containers/food/drinks/breakawayflask/vintage/prismwine,) = 2)
+ outfit = /datum/outfit/generic/miner
+ if("Assistant")
+ outfit = /datum/outfit/generic
+ if("Engineer")
+ outfit = /datum/outfit/generic/engineer
+ if("Doctor")
+ outfit = /datum/outfit/generic/doctor
+ if("Scientist")
+ outfit = /datum/outfit/generic/science
+ if("Cargo")
+ outfit = /datum/outfit/generic/cargo
+ if("Security")
+ outfit = /datum/outfit/generic/security
. = ..()
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord_outfits.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord_outfits.dm
new file mode 100644
index 000000000000..0dca4c21dade
--- /dev/null
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord_outfits.dm
@@ -0,0 +1,479 @@
+/datum/outfit/generic/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ . = ..()
+ uniform = pickweight(list(
+ /obj/item/clothing/under/utility = 5,
+ /obj/item/clothing/under/utility/skirt = 5,
+ /obj/item/clothing/under/color/black = 1,
+ /obj/item/clothing/under/color/white = 1,
+ /obj/item/clothing/under/color/random = 1,
+ /obj/item/clothing/under/suit/white = 1,
+ /obj/item/clothing/under/suit/tan = 1,
+ /obj/item/clothing/under/suit/black_really = 1,
+ /obj/item/clothing/under/suit/navy = 1,
+ /obj/item/clothing/under/suit/burgundy = 1,
+ /obj/item/clothing/under/suit/charcoal = 1,
+ /obj/item/clothing/under/rank/civilian/lawyer/galaxy = 1,
+ /obj/item/clothing/under/suit/black/skirt = 1,
+ /obj/item/clothing/under/suit/black = 1,
+ /obj/item/clothing/under/dress/sailor = 1,
+ /obj/item/clothing/under/dress/striped = 1,
+ /obj/item/clothing/under/dress/skirt/blue = 1,
+ /obj/item/clothing/under/syndicate/tacticool = 1,
+ )
+ )
+ suit = pickweight(list(
+ /obj/item/clothing/suit/hooded/wintercoat = 1,
+ /obj/item/clothing/suit/jacket = 1,
+ /obj/item/clothing/suit/jacket/leather = 1,
+ /obj/item/clothing/suit/jacket/leather/overcoat = 1,
+ /obj/item/clothing/suit/jacket/leather/duster = 1,
+ /obj/item/clothing/suit/jacket/miljacket = 1,
+ /obj/item/clothing/suit/jacket/puffer = 1,
+ /obj/item/clothing/suit/gothcoat = 1,
+ /obj/item/clothing/suit/toggle/industrial = 1,
+ /obj/item/clothing/suit/toggle/hazard = 1,
+ )
+ )
+ back = pickweight(list(
+ /obj/item/storage/backpack = 1,
+ /obj/item/storage/backpack/satchel = 1,
+ /obj/item/storage/backpack/duffelbag = 1,
+ /obj/item/storage/backpack/messenger = 1,
+ /obj/item/storage/backpack/satchel/leather = 1
+ )
+ )
+ if (prob(10))
+ belt = pickweight(list(
+ /obj/item/gun/ballistic/automatic/pistol/candor = 2,
+ /obj/item/gun/ballistic/automatic/pistol/commander = 1,
+ /obj/item/gun/ballistic/automatic/pistol = 1,
+ /obj/item/gun/ballistic/revolver = 1,
+ /obj/item/gun/ballistic/revolver/firebrand = 1,
+ )
+ )
+ if(prob(50))
+ gloves = pickweight(list(
+ /obj/item/clothing/gloves/color/black = 1,
+ /obj/item/clothing/gloves/fingerless = 1,
+ /obj/item/clothing/gloves/color/white = 1,
+ )
+ )
+ shoes = pickweight(list(
+ /obj/item/clothing/shoes/laceup = 1,
+ /obj/item/clothing/shoes/sandal = 1,
+ /obj/item/clothing/shoes/winterboots = 1,
+ /obj/item/clothing/shoes/workboots/mining = 1,
+ /obj/item/clothing/shoes/workboots = 1,
+ /obj/item/clothing/shoes/sneakers/black = 1,
+ /obj/item/clothing/shoes/sneakers/brown = 1,
+ /obj/item/clothing/shoes/sneakers/white = 1
+ )
+ )
+ if(prob(50))
+ head = pickweight(list(
+ /obj/item/clothing/head/beret = 3,
+ /obj/item/clothing/head/beret/grey = 3,
+ /obj/item/clothing/head/flatcap = 3,
+ /obj/item/clothing/head/beanie = 3,
+ /obj/item/clothing/head/cowboy = 3,
+ /obj/item/clothing/head/trapper = 2,
+ /obj/item/clothing/head/hardhat = 2,
+ /obj/item/clothing/head/hardhat/orange = 2,
+ /obj/item/clothing/head/hardhat/dblue = 2,
+ /obj/item/clothing/head/pirate = 1,
+ /obj/item/clothing/head/foilhat = 1
+ )
+ )
+ if(prob(50))
+ mask = pickweight(list(
+ /obj/item/clothing/mask/balaclava = 1,
+ /obj/item/clothing/mask/bandana/red = 1,
+ /obj/item/clothing/mask/gas = 3,
+ /obj/item/clothing/mask/breath = 3,
+ )
+ )
+ if(prob(25))
+ neck = pickweight(list(
+ /obj/item/clothing/neck/scarf/red = 1,
+ /obj/item/clothing/neck/scarf/green = 1,
+ /obj/item/clothing/neck/scarf/darkblue = 1,
+ /obj/item/clothing/neck/shemagh = 1,
+ /obj/item/clothing/neck/stripedredscarf = 1,
+ /obj/item/clothing/neck/stripedgreenscarf = 1,
+ /obj/item/clothing/neck/stripedbluescarf = 1
+ )
+ )
+ ears = pick(/obj/item/radio/headset, /obj/item/radio/headset/alt)
+ if(prob(50))
+ glasses = pickweight(list(
+ /obj/item/clothing/glasses/regular = 1,
+ /obj/item/clothing/glasses/regular/circle = 1,
+ /obj/item/clothing/glasses/regular/jamjar = 1,
+ /obj/item/clothing/glasses/eyepatch = 1,
+ /obj/item/clothing/glasses/cheapsuns = 1,
+ /obj/item/clothing/glasses/regular/hipster = 1,
+ /obj/item/clothing/glasses/cold = 1,
+ /obj/item/clothing/glasses/heat = 1,
+ /obj/item/clothing/glasses/orange = 1,
+ )
+ )
+ if(prob(75))
+ r_pocket = /obj/item/tank/internals/emergency_oxygen
+ if(prob(75))
+ l_pocket = pick(/obj/item/radio, /obj/item/flashlight)
+ id = /obj/item/card/id
+ backpack_contents = list()
+ backpack_contents += pickweight(list(
+ /obj/item/dice/d20 = 1,
+ /obj/item/lipstick = 1,
+ /obj/item/clothing/mask/vape = 1,
+ /obj/item/clothing/mask/vape/cigar = 1,
+ /obj/item/reagent_containers/food/drinks/flask = 1,
+ /obj/item/lighter = 1,
+ /obj/item/toy/cards/deck = 1,
+ /obj/item/toy/eightball = 1,
+ /obj/item/storage/wallet = 1,
+ /obj/item/paicard = 1,
+ /obj/item/pen/fourcolor = 1,
+ /obj/item/paper_bin = 1,
+ /obj/item/cane = 1,
+ /obj/item/radio = 1,
+ /obj/item/dyespray = 1,
+ /obj/item/table_bell/brass = 1,
+ /obj/item/flashlight = 1,
+ /obj/item/crowbar/red = 1
+ )
+ )
+
+/datum/outfit/generic
+ name = "Generic (Legion)"
+ box = /obj/item/storage/box/survival
+ random = TRUE
+
+/datum/outfit/generic/miner/pre_equip(mob/living/carbon/human/H, visualsOnly)
+ . = ..()
+ if(prob(75))
+ uniform = pickweight(list(
+ /obj/item/clothing/under/rank/cargo/miner/lavaland = 5,
+ /obj/item/clothing/under/rank/cargo/miner = 4,
+ /obj/item/clothing/under/rank/cargo/miner/lavaland/old = 1,
+ )
+ )
+ if(prob(25))
+ suit = pickweight(list(
+ /obj/item/clothing/suit/hooded/explorer = 18,
+ /obj/item/clothing/suit/hooded/explorer/old = 1,
+ /obj/item/clothing/suit/hooded/cloak/goliath = 1
+ )
+ )
+ if(prob(75))
+ back = /obj/item/storage/backpack/explorer
+ if(prob(75))
+ belt = pickweight(list(
+ /obj/item/storage/belt/mining = 2,
+ /obj/item/storage/belt/mining/alt = 2
+ )
+ )
+ else if(prob(75))
+ belt = pickweight(list(
+ /obj/item/pickaxe = 16,
+ /obj/item/pickaxe/mini = 8,
+ /obj/item/pickaxe/silver = 4,
+ /obj/item/pickaxe/diamond = 2,
+ /obj/item/gun/energy/kinetic_accelerator = 2,
+ /obj/item/kinetic_crusher/old = 1
+ )
+ )
+ if(prob(75))
+ gloves = pickweight(list(
+ /obj/item/clothing/gloves/color/black = 9,
+ /obj/item/clothing/gloves/explorer/old = 1
+ )
+ )
+ if(prob(75))
+ shoes = /obj/item/clothing/shoes/workboots/mining
+ if(prob(75))
+ mask = pickweight(list(
+ /obj/item/clothing/mask/gas/explorer = 9,
+ /obj/item/clothing/mask/gas/explorer/old = 1
+ )
+ )
+ if(prob(50))
+ glasses = /obj/item/clothing/glasses/meson
+ if(prob(50))
+ r_pocket = pickweight(list(
+ /obj/item/stack/marker_beacon = 20,
+ /obj/item/spacecash/bundle/mediumrand = 7,
+ /obj/item/reagent_containers/hypospray/medipen/survival = 2,
+ /obj/item/borg/upgrade/modkit/damage = 1
+ )
+ )
+ if(prob(25))
+ l_pocket = pickweight(list(
+ /obj/item/spacecash/bundle/mediumrand = 5,
+ /obj/item/reagent_containers/hypospray/medipen/survival = 2,
+ /obj/item/borg/upgrade/modkit/cooldown = 1
+ )
+ )
+ if(prob(75))
+ for(var/count in 1 to 3)
+ if(prob(70))
+ backpack_contents += pickweight(list(
+ /obj/item/borg/upgrade/modkit/damage = 1,
+ /obj/item/borg/upgrade/modkit/trigger_guard = 1,
+ /obj/item/soap/nanotrasen = 1,
+ /obj/item/wormhole_jaunter = 1,
+ /obj/item/fulton_core = 1,
+ /obj/item/extraction_pack = 2,
+ /obj/item/stack/sheet/animalhide/goliath_hide = 3,
+ /obj/item/hivelordstabilizer = 2,
+ /obj/item/stack/marker_beacon/ten = 2,
+ /obj/item/mining_scanner = 2,
+ /obj/item/extinguisher/mini = 2,
+ /obj/item/kitchen/knife/combat/survival = 3,
+ /obj/item/flashlight/seclite = 3,
+ /obj/item/stack/sheet/sinew = 3,
+ /obj/item/stack/sheet/bone = 3
+ )
+ )
+ if(prob(30))
+ backpack_contents += list(
+ /obj/item/reagent_containers/hypospray/medipen/survival = pickweight(list(
+ 1 = 3,
+ 2 = 2,
+ 3 = 1
+ )
+ )
+ )
+ else if (prob(75))
+ backpack_contents = list()
+ back = pickweight(list(
+ /obj/item/kinetic_crusher = 9,
+ /obj/item/kinetic_crusher/old = 1
+ )
+ )
+
+/datum/outfit/generic/miner
+ name = "Miner (Legion)"
+
+/datum/outfit/generic/engineer/pre_equip(mob/living/carbon/human/H, visualsOnly)
+ . = ..()
+ if(prob(75))
+ uniform = pick(/obj/item/clothing/under/rank/engineering/engineer, /obj/item/clothing/under/rank/engineering/engineer/hazard, /obj/item/clothing/under/rank/security/officer/military/eng)
+ if(prob(75))
+ suit = pick(/obj/item/clothing/suit/toggle/hazard, /obj/item/clothing/suit/hazardvest, /obj/item/clothing/suit/hooded/wintercoat/engineering)
+ if(prob(75))
+ gloves = pick(/obj/item/clothing/gloves/color/yellow, /obj/item/clothing/gloves/color/fyellow, /obj/item/clothing/gloves/color/fyellow/old)
+ if(prob(75))
+ belt = pick(/obj/item/storage/belt/utility/full, /obj/item/storage/belt/utility)
+ if(prob(50))
+ head = /obj/item/clothing/head/welding
+ if(prob(75))
+ ears = /obj/item/radio/headset/headset_eng
+ else if(prob(50))
+ glasses = /obj/item/clothing/glasses/welding
+ if(prob(75))
+ back = pick(/obj/item/storage/backpack/industrial, /obj/item/storage/backpack/satchel/eng, /obj/item/storage/backpack/duffelbag/engineering, /obj/item/storage/backpack/messenger/engi)
+ if(prob(10))
+ back = /obj/item/fireaxe
+ for(var/i = 1 to 3)
+ if(prob(75))
+ backpack_contents += pickweight(list(
+ /obj/item/stack/tape/industrial/electrical = 1,
+ /obj/item/electronics/apc = 1,
+ /obj/item/multitool = 1,
+ /obj/item/pipe_dispenser = 1,
+ /obj/item/tank/internals/emergency_oxygen/engi = 1,
+ /obj/item/holosign_creator/engineering = 1,
+ /obj/item/extinguisher/advanced = 1,
+ /obj/item/stack/sheet/metal/twenty = 1
+ )
+ )
+ if(prob(75))
+ accessory = /obj/item/clothing/accessory/armband/engine
+
+/datum/outfit/generic/engineer
+ name = "Mechanic (Legion)"
+ box = /obj/item/storage/box/survival/engineer
+
+/datum/outfit/generic/doctor/pre_equip(mob/living/carbon/human/H, visualsOnly)
+ . = ..()
+ if(prob(75))
+ uniform = pick(/obj/item/clothing/under/rank/medical/doctor, /obj/item/clothing/under/rank/medical/doctor/blue)
+ if(prob(75))
+ suit = pick(/obj/item/clothing/suit/toggle/labcoat, /obj/item/clothing/suit/apron/surgical ,/obj/item/clothing/suit/hooded/wintercoat/medical)
+ if(prob(75))
+ back = pick(/obj/item/storage/backpack/medic, /obj/item/storage/backpack/satchel/med, /obj/item/storage/backpack/duffelbag/med, /obj/item/storage/backpack/messenger/med)
+ else if (prob(75))
+ back = /obj/item/defibrillator/loaded
+ if(prob(75))
+ belt = pickweight(list(/obj/item/storage/belt/medical = 5, /obj/item/defibrillator/compact/loaded = 1))
+ if(prob(75))
+ gloves = pick(/obj/item/clothing/gloves/color/white, /obj/item/clothing/gloves/color/latex/nitrile)
+ if(prob(75))
+ mask = /obj/item/clothing/mask/surgical
+ if(prob(75))
+ shoes = /obj/item/clothing/shoes/sneakers/white
+ if(prob(75))
+ head = /obj/item/clothing/head/beret/med
+ if(prob(75))
+ ears = /obj/item/radio/headset/headset_med
+ if(prob(75))
+ glasses = pick(/obj/item/clothing/glasses/hud/health, /obj/item/clothing/glasses/hud/health/prescription)
+ for(var/i = 1 to 3)
+ if(prob(75))
+ backpack_contents += pickweight(list(
+ /obj/item/reagent_containers/pill/patch/styptic = 5,
+ /obj/item/reagent_containers/pill/patch/silver_sulf = 5,
+ /obj/item/storage/firstaid/medical = 3,
+ /obj/item/reagent_containers/syringe = 3,
+ /obj/item/reagent_containers/glass/beaker = 2,
+ /obj/item/reagent_containers/dropper = 2,
+ /obj/item/reagent_containers/pill/charcoal = 2,
+ /obj/item/reagent_containers/medigel/styptic = 2,
+ /obj/item/reagent_containers/medigel/silver_sulf = 2,
+ /obj/item/reagent_containers/medigel/sterilizine = 1,
+ /obj/item/flashlight/pen = 1,
+ /obj/item/hypospray/mkii = 1,
+ /obj/item/healthanalyzer = 1,
+ )
+ )
+ if(prob(75))
+ accessory = /obj/item/clothing/accessory/armband/medblue
+
+/datum/outfit/generic/doctor
+ name = "Medical Doctor (Legion)"
+ box = /obj/item/storage/box/survival/medical
+
+/datum/outfit/generic/science/pre_equip(mob/living/carbon/human/H)
+ ..()
+ if(prob(75))
+ uniform = pick(/obj/item/clothing/under/rank/rnd/scientist, /obj/item/clothing/under/rank/rnd/roboticist)
+ if(prob(75))
+ suit = pick(/obj/item/clothing/suit/toggle/labcoat/science, /obj/item/clothing/suit/hooded/wintercoat/science)
+ if(prob(75))
+ back = pick(/obj/item/storage/backpack/science, /obj/item/storage/backpack/satchel/tox, /obj/item/storage/backpack/messenger/tox)
+ if(prob(75))
+ shoes = /obj/item/clothing/shoes/sneakers/white
+ if(prob(75))
+ gloves = /obj/item/clothing/gloves/color/white
+ if(prob(75))
+ head = /obj/item/clothing/head/beret/sci
+ if(prob(75))
+ ears = /obj/item/radio/headset/headset_sci
+ if(prob(75))
+ glasses = pick(/obj/item/clothing/glasses/hud/diagnostic, /obj/item/clothing/glasses/science)
+ if(prob(1))
+ neck = /obj/item/clothing/neck/tie/horrible
+ for(var/i = 1 to 3)
+ if(prob(75))
+ backpack_contents += pickweight(list(
+ /obj/item/research_notes/loot/tiny = 3,
+ /obj/item/research_notes/loot/small = 3,
+ /obj/item/reagent_scanner = 3,
+ /obj/item/assembly/flash/handheld = 3,
+ /obj/item/stock_parts/capacitor/adv = 2,
+ /obj/item/stock_parts/scanning_module/adv = 2,
+ /obj/item/stock_parts/manipulator/nano = 2,
+ /obj/item/stock_parts/micro_laser/high = 2,
+ /obj/item/stock_parts/matter_bin/adv = 2,
+ /obj/item/survey_handheld = 1,
+ /obj/item/weldingtool/experimental = 1,
+ /obj/item/mmi/posibrain = 1,
+ /obj/item/reagent_containers/glass/beaker/plastic = 1,
+ /obj/item/organ/eyes/robotic/shield = 1,
+ /obj/item/organ/eyes/robotic/glow = 1,
+ )
+ )
+ if(prob(75))
+ accessory = /obj/item/clothing/accessory/armband/science
+
+
+/datum/outfit/generic/science
+ name = "Scientist (Legion)"
+
+/datum/outfit/generic/cargo/pre_equip(mob/living/carbon/human/H, visualsOnly)
+ . = ..()
+ if(prob(75))
+ uniform = pick(/obj/item/clothing/under/rank/cargo/tech, /obj/item/clothing/under/shorts/grey)
+ if(prob(75))
+ suit = pick(/obj/item/clothing/suit/hazardvest, /obj/item/clothing/suit/hooded/wintercoat/cargo)
+ if(prob(25))
+ belt = /obj/item/gun/ballistic/automatic/zip_pistol
+ if(prob(75))
+ gloves = /obj/item/clothing/gloves/fingerless
+ if(prob(75))
+ shoes = /obj/item/clothing/shoes/sneakers/black
+ if(prob(75))
+ head = /obj/item/clothing/head/soft
+ if(prob(75))
+ ears = /obj/item/radio/headset/headset_cargo
+ for(var/i = 1 to 3)
+ if(prob(75))
+ backpack_contents += pickweight(list(
+ /obj/item/spacecash/bundle/mediumrand = 5,
+ /obj/item/ammo_box/magazine/illestren_a850r = 5,
+ /obj/item/ammo_box/magazine/zip_ammo_9mm = 5,
+ /obj/item/modular_computer/tablet/preset/cargo = 3,
+ /obj/item/stack/tape = 3,
+ /obj/item/stack/tape/industrial = 3,
+ /obj/item/stack/sheet/plastic/five = 3,
+ /obj/item/grenade/frag = 1
+ )
+ )
+ if(prob(75))
+ accessory = /obj/item/clothing/accessory/armband/cargo
+ if(prob(25))
+ suit = /obj/item/clothing/suit/armor/vest/scrap_armor
+ suit_store = /obj/item/gun/ballistic/rifle/illestren
+
+/datum/outfit/generic/cargo
+ name = "Cargo Technician (Legion)"
+
+/datum/outfit/generic/security/pre_equip(mob/living/carbon/human/H, visualsOnly)
+ . = ..()
+ if(prob(75))
+ uniform = /obj/item/clothing/under/rank/security/officer
+ if(prob(75))
+ suit = pick(/obj/item/clothing/suit/armor/vest, /obj/item/clothing/suit/armor/vest/security/officer, /obj/item/clothing/suit/armor/vest/bulletproof, /obj/item/clothing/suit/armor/vest/blueshirt)
+ if(prob(75))
+ back = pick(/obj/item/storage/backpack/security, /obj/item/storage/backpack/satchel/sec, /obj/item/storage/backpack/duffelbag/sec, /obj/item/storage/backpack/messenger/sec)
+ if(prob(75))
+ belt = pick(/obj/item/storage/belt/security, /obj/item/storage/belt/security/webbing)
+ if(prob(75))
+ gloves = pick(/obj/item/clothing/gloves/color/black, /obj/item/clothing/gloves/tackler)
+ if(prob(75))
+ shoes = /obj/item/clothing/shoes/jackboots
+ if(prob(75))
+ head = pick(/obj/item/clothing/head/helmet/sec, /obj/item/clothing/head/helmet/blueshirt, /obj/item/clothing/head/helmet/bulletproof)
+ if(prob(75))
+ mask = /obj/item/clothing/mask/gas/sechailer
+ if(prob(75))
+ ears = /obj/item/radio/headset/headset_sec
+ if(prob(75))
+ glasses = pick(/obj/item/clothing/glasses/hud/security, /obj/item/clothing/glasses/sunglasses)
+ if(prob(75))
+ r_pocket = pick(/obj/item/flashlight/seclite, /obj/item/assembly/flash/handheld, /obj/item/restraints/handcuffs)
+ if(prob(50))
+ suit_store = pick(/obj/item/gun/energy/e_gun, /obj/item/gun/energy/e_gun/smg, /obj/item/gun/energy/e_gun/iot)
+ for(var/i = 1 to 3)
+ if(prob(75))
+ backpack_contents += pickweight(list(
+ /obj/item/restraints/handcuffs = 8,
+ /obj/item/assembly/flash/handheld = 5,
+ /obj/item/storage/box/evidence = 6,
+ /obj/item/flashlight/seclite = 4,
+ /obj/item/ammo_box/c9mm/rubbershot = 3,
+ /obj/item/ammo_box/c9mm = 1,
+ /obj/item/stock_parts/cell/gun = 3,
+ /obj/item/coin/antagtoken = 1,
+ /obj/item/grenade/stingbang = 1
+ )
+ )
+ if(prob(75))
+ accessory = /obj/item/clothing/accessory/armband/deputy
+
+/datum/outfit/generic/security
+ name = "Security Officer (Legion)"
+ box = /obj/item/storage/box/survival/security
+
diff --git a/code/modules/mob/living/simple_animal/hostile/survivors.dm b/code/modules/mob/living/simple_animal/hostile/survivors.dm
index d5759431d65a..2c350ab5ca55 100644
--- a/code/modules/mob/living/simple_animal/hostile/survivors.dm
+++ b/code/modules/mob/living/simple_animal/hostile/survivors.dm
@@ -44,11 +44,15 @@
/mob/living/simple_animal/hostile/asteroid/whitesands/survivor
name = "Hermit Wanderer"
desc =" A wild-eyed figure, wearing tattered mining equipment and boasting a malformed body, twisted by the heavy metals and high background radiation of the sandworlds."
+ loot = list(
+ /obj/effect/mob_spawn/human/corpse/damaged/whitesands/survivor
+ )
/mob/living/simple_animal/hostile/asteroid/whitesands/survivor/random/Initialize()
. = ..()
if(prob(35))
new /mob/living/simple_animal/hostile/asteroid/whitesands/ranged/hunter(loc)
+ return INITIALIZE_HINT_QDEL
if(prob(10))
new /mob/living/simple_animal/hostile/asteroid/whitesands/ranged/gunslinger(loc)
return INITIALIZE_HINT_QDEL
@@ -88,102 +92,25 @@
//survivor corpses
/obj/effect/mob_spawn/human/corpse/damaged/whitesands
+ uniform = /obj/item/clothing/under/color/random
+ belt = /obj/item/storage/belt/fannypack
+ shoes = /obj/item/clothing/shoes/workboots/mining
+ suit = /obj/item/clothing/suit/hooded/survivor
+ l_pocket = /obj/item/radio
+ r_pocket = /obj/item/tank/internals/emergency_oxygen/engi
var/survivor_type //room for alternatives inside the fuckoff grade init.
/obj/effect/mob_spawn/human/corpse/damaged/whitesands/Initialize() //everything here should equal out to 100 for the sake of my sanity.
-
mob_species = pickweight(list(
/datum/species/human = 50,
- /datum/species/lizard = 25,
+ /datum/species/lizard = 20,
+ /datum/species/ipc = 10,
/datum/species/elzuose = 10,
- /datum/species/moth = 10,
- /datum/species/spider = 3,
- /datum/species/fly = 2
- )
+ /datum/species/moth = 5,
+ /datum/species/spider = 5
)
+ )
//to-do: learn how to make mobsprites for other survivors
- //uniforms are random to show varied backgrounds, but similar goal
- if(survivor_type == "survivor")
- uniform = pickweight(list(
- /obj/item/clothing/under/color/random = 65,
- /obj/item/clothing/under/rank/cargo/miner/lavaland = 10,
- /obj/item/clothing/under/rank/prisoner = 10,
- /obj/item/clothing/under/rank/cargo/miner/lavaland/old = 5,
- /obj/item/clothing/under/color/khaki/buster = 5,
- /obj/item/clothing/under/rank/cargo/miner = 5
- )
- )
- else if (survivor_type == "hunter")
- uniform = pickweight(list(
- /obj/item/clothing/under/color/random = 50,
- /obj/item/clothing/under/rank/cargo/miner/lavaland = 25,
- /obj/item/clothing/under/rank/cargo/miner/lavaland/old = 15,
- /obj/item/clothing/under/rank/security/officer/camo = 5,
- /obj/item/clothing/under/utility = 5
- )
- )
- else if (survivor_type == "gunslinger")
- uniform = pickweight(list(
- /obj/item/clothing/under/rank/cargo/miner/lavaland = 35,
- /obj/item/clothing/under/color/random = 25,
- /obj/item/clothing/under/rank/cargo/miner/lavaland/old = 15,
- /obj/item/clothing/under/rank/security/officer/camo = 10,
- /obj/item/clothing/under/syndicate/camo = 10,
- /obj/item/clothing/under/syndicate/combat = 5
- )
- )
- else
- uniform = /obj/item/clothing/under/color/random
-
- //storage is semi-randomized, giving some variety
- if(survivor_type == "survivor")
- belt = pickweight(list(
- /obj/item/storage/belt/fannypack = 40,
- /obj/item/storage/belt/mining = 20,
- /obj/item/storage/belt/mining/alt = 15,
- /obj/item/storage/belt/utility = 10,
- /obj/item/storage/belt/bandolier = 9,
- /obj/item/storage/belt/utility/full = 5,
- /obj/item/storage/belt/chameleon= 1,
- )
- )
- else if(survivor_type == "hunter")
- belt = pickweight(list(
- /obj/item/storage/belt/mining = 30,
- /obj/item/storage/belt/fannypack = 20,
- /obj/item/storage/belt/mining/alt = 15,
- /obj/item/storage/belt/mining/primitive = 15,
- /obj/item/storage/belt/bandolier = 10,
- /obj/item/storage/belt/military = 7,
- /obj/item/storage/belt/mining/vendor = 3,
- )
- )
- else if(survivor_type == "gunslinger")
- belt = pickweight(list(
- /obj/item/storage/belt/mining = 30,
- /obj/item/storage/belt/bandolier = 30,
- /obj/item/storage/belt/military = 20,
- /obj/item/storage/belt/fannypack = 15,
- /obj/item/storage/belt/mining/alt = 5,
- /obj/item/storage/belt/mining/primitive = 5
- )
- )
- else
- belt = /obj/item/storage/belt/fannypack
-
- //everyone wears the same suit
- suit = /obj/item/clothing/suit/hooded/survivor
-
- if (survivor_type == "gunslinger")
- if(prob(30))
- shoes = /obj/item/clothing/shoes/combat //but sometimes there are nicer shoes
- else
- shoes = /obj/item/clothing/shoes/workboots/mining
- else
- shoes = /obj/item/clothing/shoes/workboots/mining
-
-
-
//gloves are a tossup
gloves = pickweight(list(
@@ -260,35 +187,6 @@
if(prob(30)) //some pens maybe?
backpack_contents += /obj/item/reagent_containers/hypospray/medipen/survival
- //pockets
- if(survivor_type == "survivor") //could also use fleshing out
- if(prob(30))
- l_pocket = /obj/item/reagent_containers/food/snacks/meat/steak/goliath
- else
- l_pocket = /obj/item/tank/internals/emergency_oxygen/engi
- if (prob(20))
- r_pocket = /obj/item/spacecash/bundle/mediumrand
- else
- r_pocket = null
-
- if(survivor_type == "hunter")
- l_pocket = /obj/item/tank/internals/emergency_oxygen/engi
- if (prob(20))
- r_pocket = /obj/item/reagent_containers/food/snacks/meat/steak/goliath
- else if (prob(60))
- r_pocket = /obj/item/ammo_box/aac_300blk_stripper
- else
- r_pocket = null
-
- if(survivor_type == "gunslinger")
- if(prob(50))
- l_pocket = /obj/item/ammo_box/magazine/skm_545_39
- r_pocket = /obj/item/tank/internals/emergency_oxygen/engi
-
- else
- r_pocket = /obj/item/tank/internals/emergency_oxygen/engi
- l_pocket = /obj/item/radio
-
//masks
mask = pickweight(list(
/obj/item/clothing/mask/gas = 40,
@@ -298,7 +196,7 @@
)
)
- //the eyes are the window into the soul. I don't think these things have souls but whatever.
+ //the eyes are the window into the soul.
if(prob(70))
glasses = pickweight(list(
/obj/item/clothing/glasses/heat = 20,
@@ -307,8 +205,6 @@
/obj/item/clothing/glasses = 20
)
)
- else
- glasses = null
//and of course, ears.
if(prob(1)) //oh my god they can't hear the sandstorm coming they've got airpods in
@@ -319,21 +215,91 @@
/obj/item/radio/headset/alt = 50
)
)
+ //now for the fun stuff
+ switch(survivor_type)
+ if("survivor")
+ //uniforms are random to show varied backgrounds, but similar goal
+ uniform = pickweight(list(
+ /obj/item/clothing/under/color/random = 65,
+ /obj/item/clothing/under/rank/cargo/miner/lavaland = 10,
+ /obj/item/clothing/under/rank/prisoner = 10,
+ /obj/item/clothing/under/rank/cargo/miner/lavaland/old = 5,
+ /obj/item/clothing/under/color/khaki/buster = 5,
+ /obj/item/clothing/under/rank/cargo/miner = 5
+ )
+ )
+ //storage is semi-randomized, giving some variety
+ belt = pickweight(list(
+ /obj/item/storage/belt/fannypack = 40,
+ /obj/item/storage/belt/mining = 20,
+ /obj/item/storage/belt/mining/alt = 15,
+ /obj/item/storage/belt/utility = 10,
+ /obj/item/storage/belt/bandolier = 9,
+ /obj/item/storage/belt/utility/full = 5,
+ /obj/item/storage/belt/chameleon= 1,
+ )
+ )
+ if(prob(30))
+ l_pocket = /obj/item/reagent_containers/food/snacks/meat/steak/goliath
+ if(prob(20))
+ r_pocket = /obj/item/spacecash/bundle/smallrand
+
+ if("hunter")
+ uniform = pickweight(list(
+ /obj/item/clothing/under/color/random = 50,
+ /obj/item/clothing/under/rank/cargo/miner/lavaland = 25,
+ /obj/item/clothing/under/rank/cargo/miner/lavaland/old = 15,
+ /obj/item/clothing/under/rank/security/officer/camo = 5,
+ /obj/item/clothing/under/utility = 5
+ )
+ )
+ belt = pickweight(list(
+ /obj/item/storage/belt/mining = 30,
+ /obj/item/storage/belt/fannypack = 20,
+ /obj/item/storage/belt/mining/alt = 15,
+ /obj/item/storage/belt/mining/primitive = 15,
+ /obj/item/storage/belt/bandolier = 10,
+ /obj/item/storage/belt/military = 7,
+ /obj/item/storage/belt/mining/vendor = 3,
+ )
+ )
+ if(prob(20))
+ l_pocket = /obj/item/reagent_containers/food/snacks/meat/steak/goliath
+ else if(prob(60))
+ l_pocket = /obj/item/ammo_box/aac_300blk_stripper
+ if(prob(20))
+ new /obj/item/gun/ballistic/rifle/polymer(loc)
+ else
+ visible_message(span_warning("The hunter's weapon shatters as they impact the ground!"))
+
+ if("gunslinger")
+ uniform = pickweight(list(
+ /obj/item/clothing/under/rank/cargo/miner/lavaland = 35,
+ /obj/item/clothing/under/color/random = 25,
+ /obj/item/clothing/under/rank/cargo/miner/lavaland/old = 15,
+ /obj/item/clothing/under/rank/security/officer/camo = 10,
+ /obj/item/clothing/under/syndicate/camo = 10,
+ /obj/item/clothing/under/syndicate/combat = 5
+ )
+ )
+ belt = pickweight(list(
+ /obj/item/storage/belt/mining = 30,
+ /obj/item/storage/belt/bandolier = 30,
+ /obj/item/storage/belt/military = 20,
+ /obj/item/storage/belt/fannypack = 15,
+ /obj/item/storage/belt/mining/alt = 5,
+ /obj/item/storage/belt/mining/primitive = 5
+ )
+ )
+ if(prob(30))
+ shoes = /obj/item/clothing/shoes/combat //sometimes there are nicer shoes
+ if(prob(50))
+ l_pocket = /obj/item/ammo_box/magazine/skm_545_39
+ if(prob(20))
+ new /obj/item/gun/ballistic/automatic/smg/skm_carbine(loc)
+ else
+ visible_message(span_warning("The gunslinger's weapon shatters as they impact the ground!"))
- //exosuit bits
- suit_store = null
- if (survivor_type == "hunter")
- if(prob(20))
- new /obj/item/gun/ballistic/rifle/polymer(loc)
- else
- visible_message("The hunter's weapon shatters as they impact the ground!")
- suit_store = null
- if(survivor_type == "gunslinger")
- if(prob(20))
- new /obj/item/gun/ballistic/automatic/smg/skm_carbine(loc)
- else
- visible_message("The gunslinger's weapon shatters as they impact the ground!")
- suit_store = null
. = ..()
diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm
index b98d14128e12..a05f79e473c8 100644
--- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm
+++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm
@@ -15,8 +15,8 @@
/mob/living/simple_animal/hostile/syndicate
- name = "Syndicate Operative"
- desc = "Death to Nanotrasen."
+ name = "Ramzi Clique Operative"
+ desc = "An ex-Syndicate pirate of the Ramzi Clique."
icon = 'icons/mob/simple_human.dmi'
icon_state = "syndicate"
icon_living = "syndicate"
@@ -39,6 +39,7 @@
a_intent = INTENT_HARM
loot = list(/obj/effect/mob_spawn/human/corpse/syndicatesoldier)
atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0)
+ maxbodytemp = 400
unsuitable_atmos_damage = 15
faction = list(FACTION_ANTAG_SYNDICATE)
check_friendly_fire = 1
@@ -53,11 +54,12 @@
/mob/living/simple_animal/hostile/syndicate/space
icon_state = "syndicate_space"
icon_living = "syndicate_space"
- name = "Syndicate Commando"
+ name = "Ramzi Clique Commando"
maxHealth = 170
health = 170
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
+ maxbodytemp = 1000
speed = 1
/mob/living/simple_animal/hostile/syndicate/space/Initialize()
@@ -68,7 +70,7 @@
/mob/living/simple_animal/hostile/syndicate/space/stormtrooper
icon_state = "syndicate_stormtrooper"
icon_living = "syndicate_stormtrooper"
- name = "Syndicate Stormtrooper"
+ name = "Ramzi Clique Assault Trooper"
maxHealth = 250
health = 250
@@ -87,11 +89,12 @@
/mob/living/simple_animal/hostile/syndicate/melee/space
icon_state = "syndicate_space_knife"
icon_living = "syndicate_space_knife"
- name = "Syndicate Commando"
+ name = "Ramzi Clique Commando"
maxHealth = 170
health = 170
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
+ maxbodytemp = 1000
speed = 1
projectile_deflect_chance = 50
@@ -103,7 +106,7 @@
/mob/living/simple_animal/hostile/syndicate/melee/space/stormtrooper
icon_state = "syndicate_stormtrooper_knife"
icon_living = "syndicate_stormtrooper_knife"
- name = "Syndicate Stormtrooper"
+ name = "Ramzi Clique Stormtrooper"
maxHealth = 250
health = 250
projectile_deflect_chance = 50
@@ -139,11 +142,12 @@
/mob/living/simple_animal/hostile/syndicate/melee/sword/space
icon_state = "syndicate_space_sword"
icon_living = "syndicate_space_sword"
- name = "Syndicate Commando"
+ name = "Ramzi Clique Commando"
maxHealth = 170
health = 170
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
+ maxbodytemp = 1000
speed = 1
projectile_deflect_chance = 50
@@ -160,7 +164,7 @@
/mob/living/simple_animal/hostile/syndicate/melee/sword/space/stormtrooper
icon_state = "syndicate_stormtrooper_sword"
icon_living = "syndicate_stormtrooper_sword"
- name = "Syndicate Stormtrooper"
+ name = "Ramzi Clique Stormtrooper"
maxHealth = 250
health = 250
projectile_deflect_chance = 50
@@ -186,11 +190,12 @@
/mob/living/simple_animal/hostile/syndicate/ranged/space
icon_state = "syndicate_space_pistol"
icon_living = "syndicate_space_pistol"
- name = "Syndicate Commando"
+ name = "Ramzi Clique Commando"
maxHealth = 170
health = 170
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
+ maxbodytemp = 1000
speed = 1
/mob/living/simple_animal/hostile/syndicate/ranged/space/Initialize()
@@ -201,7 +206,7 @@
/mob/living/simple_animal/hostile/syndicate/ranged/space/stormtrooper
icon_state = "syndicate_stormtrooper_pistol"
icon_living = "syndicate_stormtrooper_pistol"
- name = "Syndicate Stormtrooper"
+ name = "Ramzi Clique Stormtrooper"
maxHealth = 250
health = 250
@@ -213,17 +218,18 @@
projectilesound = 'sound/weapons/gun/smg/shot.ogg'
/mob/living/simple_animal/hostile/syndicate/ranged/smg/pilot //caravan ambush ruin
- name = "Syndicate Salvage Pilot"
+ name = "Ramzi Clique Salvage Pilot"
loot = list(/obj/effect/mob_spawn/human/corpse/syndicatesoldier)
/mob/living/simple_animal/hostile/syndicate/ranged/smg/space
icon_state = "syndicate_space_smg"
icon_living = "syndicate_space_smg"
- name = "Syndicate Commando"
+ name = "Ramzi Clique Commando"
maxHealth = 170
health = 170
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
+ maxbodytemp = 1000
speed = 1
/mob/living/simple_animal/hostile/syndicate/ranged/smg/space/Initialize()
@@ -234,7 +240,7 @@
/mob/living/simple_animal/hostile/syndicate/ranged/smg/space/stormtrooper
icon_state = "syndicate_stormtrooper_smg"
icon_living = "syndicate_stormtrooper_smg"
- name = "Syndicate Stormtrooper"
+ name = "Ramzi Clique Stormtrooper"
maxHealth = 250
health = 250
@@ -244,16 +250,17 @@
minimum_distance = 3
icon_state = "syndicate_shotgun"
icon_living = "syndicate_shotgun"
- casingtype = /obj/item/ammo_casing/shotgun/buckshot //buckshot (up to 72.5 brute) fired in a two-round burst
+ casingtype = /obj/item/ammo_casing/shotgun/buckshot //buckshot fired in a two-round burst. This will two-tap unarmored players.
/mob/living/simple_animal/hostile/syndicate/ranged/shotgun/space
icon_state = "syndicate_space_shotgun"
icon_living = "syndicate_space_shotgun"
- name = "Syndicate Commando"
+ name = "Ramzi Clique Commando"
maxHealth = 170
health = 170
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
+ maxbodytemp = 1000
speed = 1
/mob/living/simple_animal/hostile/syndicate/ranged/shotgun/space/Initialize()
@@ -264,7 +271,7 @@
/mob/living/simple_animal/hostile/syndicate/ranged/shotgun/space/stormtrooper
icon_state = "syndicate_stormtrooper_shotgun"
icon_living = "syndicate_stormtrooper_shotgun"
- name = "Syndicate Stormtrooper"
+ name = "Ramzi Clique Stormtrooper"
maxHealth = 250
health = 250
@@ -302,6 +309,7 @@
faction = list(ROLE_SYNDICATE)
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
+ maxbodytemp = 1000
mob_size = MOB_SIZE_TINY
movement_type = FLYING
limb_destroyer = 1
@@ -314,32 +322,3 @@
/mob/living/simple_animal/hostile/viscerator/Initialize()
. = ..()
AddComponent(/datum/component/swarming)
-
-/mob/living/simple_animal/hostile/syndicate/melee/sword/space/oldcode
- melee_damage_lower = 20
- melee_damage_upper = 20
- icon = 'icons/mob/simple_human.dmi'
- icon_state = "oldcode_syndicate_csaber"
- icon_living = "oldcode_syndicate_csaber"
- name = "Syndicate Spaceman"
- desc = "Death to IS-Nanotrasen."
- maxHealth = 170
- health = 170
- armour_penetration = 20
- light_color = LIGHT_COLOR_BLUE
- sord = /obj/effect/light_emitter/blue_energy_sword
- projectile_deflect_chance = 10
-
-/mob/living/simple_animal/hostile/syndicate/ranged/space/oldcode
- icon = 'icons/mob/simple_human.dmi'
- icon_state = "oldcode_syndicate_gun"
- icon_living = "oldcode_syndicate_gun"
- name = "Syndicate Spaceman"
- desc = "Death to IS-Nanotrasen."
- maxHealth = 170
- health = 170
-
-/obj/effect/light_emitter/blue_energy_sword
- set_luminosity = 2
- set_cap = 2.5
- light_color = LIGHT_COLOR_BLUE
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index e4ead25880f9..3670e14a6405 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -636,7 +636,7 @@
switch(togglestatus)
if(AI_Z_OFF)
- LAZYADDASSOC(SSidlenpcpool.idle_mobs_by_virtual_level, virt_z, src)
+ LAZYADDASSOCLIST(SSidlenpcpool.idle_mobs_by_virtual_level, virt_z, src)
else
LAZYREMOVEASSOC(SSidlenpcpool.idle_mobs_by_virtual_level, virt_z, src)
diff --git a/code/modules/mob/living/status_procs.dm b/code/modules/mob/living/status_procs.dm
index 8eb5bc620722..d60755693489 100644
--- a/code/modules/mob/living/status_procs.dm
+++ b/code/modules/mob/living/status_procs.dm
@@ -478,11 +478,11 @@
for(var/listed_type in slowdown_type)
if(ispath(listed_type))
listed_type = "[listed_type]" //Path2String
- LAZYADDASSOC(movespeed_mod_immunities, listed_type, source)
+ LAZYADDASSOCLIST(movespeed_mod_immunities, listed_type, source)
else
if(ispath(slowdown_type))
slowdown_type = "[slowdown_type]" //Path2String
- LAZYADDASSOC(movespeed_mod_immunities, slowdown_type, source)
+ LAZYADDASSOCLIST(movespeed_mod_immunities, slowdown_type, source)
if(update)
update_movespeed()
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 41446dbf6997..2f79b2a13d69 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -204,27 +204,34 @@
if(self_message)
hearers -= src
- var/raw_msg = message
- if(visible_message_flags & EMOTE_MESSAGE)
- message = "[src][separation][message]"
-
for(var/mob/M in hearers)
if(!M.client)
continue
- //This entire if/else chain could be in two lines but isn't for readibilties sake.
var/msg = message
+
+ //This entire if/else chain could be in two lines but isn't for readibilties sake.
if(M.see_invisible < invisibility)//if src is invisible to M
msg = blind_message
else if(T != loc && T != src) //if src is inside something and not a turf.
msg = blind_message
else if(T.lighting_object && T.lighting_object.invisibility <= M.see_invisible && T.is_softly_lit()) //if it is too dark.
msg = blind_message
+ else if(visible_message_flags & EMOTE_MESSAGE)
+ var/shown_name = name
+ if(M.mind?.guestbook && ishuman(src))
+ var/mob/living/carbon/human/human_source = src
+ var/known_name = M.mind.guestbook.get_known_name(M, src, human_source.get_face_name())
+ if(known_name)
+ shown_name = known_name
+
+ msg = "[shown_name][separation][message]"
+
if(!msg)
continue
if(visible_message_flags & EMOTE_MESSAGE && runechat_prefs_check(M, visible_message_flags))
- M.create_chat_message(src, raw_message = raw_msg, runechat_flags = visible_message_flags)
+ M.create_chat_message(src, raw_message = message, runechat_flags = visible_message_flags)
M.show_message(msg, MSG_VISUAL, blind_message, MSG_AUDIBLE)
@@ -250,12 +257,24 @@
if(self_message)
hearers -= src
var/raw_msg = message
- if(audible_message_flags & EMOTE_MESSAGE)
- message = "[src][separation][message]"
for(var/mob/M in hearers)
- if(audible_message_flags & EMOTE_MESSAGE && runechat_prefs_check(M, audible_message_flags))
- M.create_chat_message(src, raw_message = raw_msg, runechat_flags = audible_message_flags)
- M.show_message(message, MSG_AUDIBLE, deaf_message, MSG_VISUAL)
+ var/msg = raw_msg
+
+ //emote handling
+ if(audible_message_flags & EMOTE_MESSAGE)
+ var/shown_name = name
+ if(M.mind?.guestbook && ishuman(src))
+ var/mob/living/carbon/human/human_source = src
+ var/known_name = M.mind.guestbook.get_known_name(M, src, human_source.GetVoice())
+ if(known_name)
+ shown_name = known_name
+
+ msg = "[shown_name][separation][message]"
+
+ if(runechat_prefs_check(M, audible_message_flags) && M.can_hear())
+ M.create_chat_message(src, raw_message = raw_msg, runechat_flags = audible_message_flags)
+
+ M.show_message(msg, MSG_AUDIBLE, deaf_message, MSG_VISUAL)
/**
* Show a message to all mobs in earshot of this one
@@ -681,6 +700,24 @@
else
to_chat(src, "You don't have a mind datum for some reason, so you can't add a note to it.")
+///Shows guestbook tgui window
+/mob/verb/guestbook()
+ set name = "Guestbook"
+ set category = "IC"
+ set desc = "View your character's Guestbook."
+ // the reason why there are two observer checks in here is because the mind datum sometimes carries over to ghosts.
+ // this is something i should probably fix instead of adding a fallback check, but...
+ if(isobserver(src))
+ to_chat(src, span_warning("You have to be in the current round to do that!"))
+ return
+ if(!mind)
+ var/fail_message = "You have no mind!"
+ if(isobserver(src))
+ fail_message += " You have to be in the current round at some point to have one."
+ to_chat(src, span_warning(fail_message))
+ return
+ mind.guestbook.ui_interact(usr)
+
/**
* Allows you to respawn, abandoning your current mob
*
@@ -784,8 +821,10 @@
src << browse(null, t1)
if(href_list["flavor_more"])
- usr << browse(text("[][]", name, replacetext(flavor_text, "\n", "
")), text("window=[];size=500x200", name))
- onclose(usr, "[name]")
+ var/datum/browser/popup = new(usr, "[name]'s flavor text", "[name]'s Flavor Text (expanded)", 500, 200)
+ popup.set_content(text("[][]", "[name]'s flavor text (expanded)", replacetext(flavor_text, "\n", "
")))
+ popup.open()
+ return
if(user != src)
if(href_list["item"] && user.canUseTopic(src, BE_CLOSE, NO_DEXTERITY))
diff --git a/code/modules/mob/say_vr.dm b/code/modules/mob/say_vr.dm
index d2e6a4f0dda2..01e3a4d33b1a 100644
--- a/code/modules/mob/say_vr.dm
+++ b/code/modules/mob/say_vr.dm
@@ -11,7 +11,7 @@
if(usr != src)
to_chat(usr, span_warning("You can't set someone else's flavour text!"))
- var/msg = sanitize(input(usr,"Set the flavor text in your 'examine' verb. Can also be used for OOC notes about your character.","Flavor Text",html_decode(flavor_text)) as message|null)
+ var/msg = input(usr, "A snippet of text shown when others examine you, describing what you may look like. This can also be used for OOC notes.", "Flavor Text", html_decode("flavor_text")) as message|null
if(msg)
msg = copytext(msg, 1, MAX_MESSAGE_LEN)
@@ -22,10 +22,10 @@
/mob/proc/print_flavor_text()
if(flavor_text && flavor_text != "")
var/msg = replacetext(flavor_text, "\n", " ")
- if(length(msg) <= 100)
+ if(length(msg) <= MAX_SHORTFLAVOR_LEN)
return "[msg]"
else
- return "[copytext(msg, 1, 97)]... More..."
+ return "[copytext(msg, 1, MAX_SHORTFLAVOR_LEN)]... More..."
/mob/proc/get_top_level_mob()
if(istype(src.loc,/mob)&&src.loc!=src)
diff --git a/code/modules/modular_computers/computers/machinery/modular_console.dm b/code/modules/modular_computers/computers/machinery/modular_console.dm
index 6213cba441a6..a1af42ca3169 100644
--- a/code/modules/modular_computers/computers/machinery/modular_console.dm
+++ b/code/modules/modular_computers/computers/machinery/modular_console.dm
@@ -9,8 +9,8 @@
screen_icon_state_menu = "menu"
hardware_flag = PROGRAM_CONSOLE
density = TRUE
- base_idle_power_usage = 100
- base_active_power_usage = 500
+ base_idle_power_usage = IDLE_DRAW_MINIMAL
+ base_active_power_usage = ACTIVE_DRAW_LOW
max_hardware_size = 4
steel_sheet_cost = 10
light_strength = 2
diff --git a/code/modules/overmap/missions/research_mission.dm b/code/modules/overmap/missions/research_mission.dm
index a84b07b6529a..9481556d33be 100644
--- a/code/modules/overmap/missions/research_mission.dm
+++ b/code/modules/overmap/missions/research_mission.dm
@@ -106,7 +106,7 @@
density = FALSE
anchored = FALSE
use_power = NO_POWER_USE
- idle_power_usage = 400
+ idle_power_usage = IDLE_DRAW_MEDIUM
processing_flags = START_PROCESSING_MANUALLY
/obj/machinery/mission_scanner/wrench_act(mob/living/user, obj/item/I)
@@ -122,7 +122,7 @@
if(anchorvalue)
set_is_operational(TRUE)
START_PROCESSING(SSmachines, src)
- use_power = IDLE_POWER_USE
+ set_idle_power()
else
set_is_operational(FALSE)
STOP_PROCESSING(SSmachines, src)
diff --git a/code/modules/overmap/ships/controlled_ship_datum.dm b/code/modules/overmap/ships/controlled_ship_datum.dm
index 5534d71547bd..d6bb75c5dc69 100644
--- a/code/modules/overmap/ships/controlled_ship_datum.dm
+++ b/code/modules/overmap/ships/controlled_ship_datum.dm
@@ -313,6 +313,25 @@
job_holder_refs[human_job] = list()
job_holder_refs[human_job] += WEAKREF(H)
+/**
+ * adds a mob's real name to a crew's guestbooks
+ *
+ * * H - human mob to add to the crew's guestbooks
+ */
+/datum/overmap/ship/controlled/proc/add_mob_to_crew_guestbook(mob/living/carbon/human/H)
+ // iterate over the human list to find crewmembers
+ for(var/mob/living/carbon/human/crewmember as anything in GLOB.human_list)
+ if(crewmember == H)
+ continue
+ if(!(crewmember.real_name in manifest))
+ continue
+ if(!crewmember.mind?.guestbook)
+ continue
+
+ // add the mob to the crewmember's guestbook and viceversa
+ crewmember.mind.guestbook.add_guest(crewmember, H, H.real_name, H.real_name, TRUE)
+ H.mind.guestbook.add_guest(H, crewmember, crewmember.real_name, crewmember.real_name, TRUE)
+
/datum/overmap/ship/controlled/proc/set_owner_mob(mob/new_owner)
if(owner_mob)
// we (hopefully) don't have to hook qdeletion,
@@ -423,6 +442,9 @@
SStgui.close_uis(helm)
helm.say(helm_locked ? "Helm console is now locked." : "Helm console has been unlocked.")
+/datum/overmap/ship/controlled/proc/get_faction()
+ return source_template.faction_name
+
/obj/item/key/ship
name = "ship key"
desc = "A key for locking and unlocking the helm of a ship, comes with a ball chain so it can be worn around the neck. Comes with a cute little shuttle-shaped keychain."
diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm
index f85bd0bc77f9..40b0771981e4 100644
--- a/code/modules/paperwork/photocopier.dm
+++ b/code/modules/paperwork/photocopier.dm
@@ -24,8 +24,8 @@
anchored = TRUE
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 30
- active_power_usage = 200
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_LOW
power_channel = AREA_USAGE_EQUIP
max_integrity = 300
integrity_failure = 0.33
diff --git a/code/modules/plumbing/plumbers/_plumb_machinery.dm b/code/modules/plumbing/plumbers/_plumb_machinery.dm
index 87096bad7e56..f4448c4a53ac 100644
--- a/code/modules/plumbing/plumbers/_plumb_machinery.dm
+++ b/code/modules/plumbing/plumbers/_plumb_machinery.dm
@@ -8,7 +8,7 @@
icon = 'icons/obj/plumbing/plumbers.dmi'
icon_state = "pump"
density = TRUE
- active_power_usage = 30
+ active_power_usage = ACTIVE_DRAW_MINIMAL
use_power = ACTIVE_POWER_USE
resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF
///Plumbing machinery is always gonna need reagents, so we might aswell put it here
diff --git a/code/modules/plumbing/plumbers/pumps.dm b/code/modules/plumbing/plumbers/pumps.dm
index 331e3fc24d89..294b50eff748 100644
--- a/code/modules/plumbing/plumbers/pumps.dm
+++ b/code/modules/plumbing/plumbers/pumps.dm
@@ -7,8 +7,8 @@
base_icon_state = "pump"
anchored = FALSE
density = TRUE
- idle_power_usage = 10
- active_power_usage = 1000
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MEDIUM
rcd_cost = 30
rcd_delay = 40
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index 3684d5ad8159..f21f95692234 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -217,8 +217,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/power/apc/auto_name, 25)
// this allows the APC to be embedded in a wall, yet still inside an area
if (building)
setDir(ndir)
- tdir = dir // to fix Vars bug
-//!!!!!!!!!!!!!! FUCK YOU SINGLE LINE OF CODE!! FUCK YOU YOU PIECE OF SHIT!!!!! setDir(SOUTH)
+ tdir = dir// to fix Vars bug
+
switch(tdir)
if(NORTH)
if((pixel_y != initial(pixel_y)) && (pixel_y != 23))
diff --git a/code/modules/power/floodlight.dm b/code/modules/power/floodlight.dm
index e112b38f2fd7..0fe0b51c6193 100644
--- a/code/modules/power/floodlight.dm
+++ b/code/modules/power/floodlight.dm
@@ -61,8 +61,8 @@
density = TRUE
max_integrity = 100
integrity_failure = 0.8
- idle_power_usage = 100
- active_power_usage = 1000
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MEDIUM
anchored = FALSE
light_power = 1.75
var/list/light_setting_list = list(0, 5, 10, 15)
diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm
index a6020d0fae11..3ed7e262a53d 100644
--- a/code/modules/power/gravitygenerator.dm
+++ b/code/modules/power/gravitygenerator.dm
@@ -115,7 +115,7 @@
/obj/machinery/gravity_generator/main
icon_state = "on_8"
idle_power_usage = 0
- active_power_usage = 3000
+ active_power_usage = ACTIVE_DRAW_EXTREME
power_channel = AREA_USAGE_ENVIRON
sprite_number = 8
use_power = IDLE_POWER_USE
@@ -286,7 +286,10 @@
/obj/machinery/gravity_generator/main/proc/set_state(new_state)
charging_state = POWER_IDLE
on = new_state
- use_power = on ? ACTIVE_POWER_USE : IDLE_POWER_USE
+ if(on)
+ set_active_power()
+ else
+ set_idle_power()
// Sound the alert if gravity was just enabled or disabled.
var/alert = FALSE
if(SSticker.IsRoundInProgress())
diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm
index 5b0655ddd42d..e92efb779d67 100644
--- a/code/modules/power/lighting.dm
+++ b/code/modules/power/lighting.dm
@@ -217,9 +217,9 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/light_construct/small, 28)
desc = "A lighting fixture."
layer = WALL_OBJ_LAYER
max_integrity = 100
- use_power = ACTIVE_POWER_USE
- idle_power_usage = 2
- active_power_usage = 20
+ use_power = IDLE_POWER_USE
+ idle_power_usage = 0
+ active_power_usage = 0
power_channel = AREA_USAGE_LIGHT //Lights are calc'd via area so they dont need to be in the machine list
var/on = FALSE // 1 if on, 0 if off
var/on_gs = FALSE
@@ -360,6 +360,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/light/small/built, 28)
addtimer(CALLBACK(src, PROC_REF(update), 0), 1)
/obj/machinery/light/Destroy()
+ if(on)
+ removeStaticPower(static_power_used, AREA_USAGE_STATIC_LIGHT)
var/area/A = get_area(src)
if(A)
on = FALSE
@@ -420,22 +422,18 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/light/small/built, 28)
if(trigger)
burn_out()
else
- use_power = ACTIVE_POWER_USE
set_light(BR, PO, CO)
else if(has_emergency_power(LIGHT_EMERGENCY_POWER_USE) && !turned_off())
- use_power = IDLE_POWER_USE
emergency_mode = TRUE
START_PROCESSING(SSmachines, src)
else
- use_power = IDLE_POWER_USE
set_light(0)
update_appearance()
- active_power_usage = (brightness * 10)
if(on != on_gs)
on_gs = on
if(on)
- static_power_used = brightness * 20 //20W per unit luminosity
+ static_power_used = brightness * LIGHT_DRAW //defined in power defines
addStaticPower(static_power_used, AREA_USAGE_STATIC_LIGHT)
else
removeStaticPower(static_power_used, AREA_USAGE_STATIC_LIGHT)
@@ -859,8 +857,11 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/light/small/built, 28)
if(!..()) //not caught by a mob
shatter()
-// update the icon state and description of the light
+/obj/item/light/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum)
+ shatter()
+ ..()
+// update the icon state and description of the light
/obj/item/light/proc/update()
switch(status)
if(LIGHT_OK)
diff --git a/code/modules/power/monitor.dm b/code/modules/power/monitor.dm
index b1c2a95a938f..debdba4946bf 100644
--- a/code/modules/power/monitor.dm
+++ b/code/modules/power/monitor.dm
@@ -7,8 +7,8 @@
icon_keyboard = "power_key"
light_color = LIGHT_COLOR_YELLOW
use_power = ACTIVE_POWER_USE
- idle_power_usage = 20
- active_power_usage = 100
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MINIMAL
circuit = /obj/item/circuitboard/computer/powermonitor
tgui_id = "PowerMonitor"
@@ -49,10 +49,12 @@
/obj/machinery/computer/monitor/process()
if(!get_powernet())
- use_power = IDLE_POWER_USE
+ if(use_static_power != IDLE_POWER_USE)
+ set_idle_power()
search()
else
- use_power = ACTIVE_POWER_USE
+ if(use_static_power != ACTIVE_POWER_USE)
+ set_active_power()
record()
/obj/machinery/computer/monitor/proc/search() //keep in sync with /datum/computer_file/program/power_monitor's version
diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm
index e235e9328549..e63cd1298616 100644
--- a/code/modules/power/port_gen.dm
+++ b/code/modules/power/port_gen.dm
@@ -291,7 +291,6 @@
circuit = /obj/item/circuitboard/machine/pacman/super
sheet_path = /obj/item/stack/sheet/mineral/uranium
power_gen = 15000
- time_per_sheet = 85
/obj/machinery/power/port_gen/pacman/super/overheat()
. =..()
@@ -304,7 +303,6 @@
circuit = /obj/item/circuitboard/machine/pacman/mrs
sheet_path = /obj/item/stack/sheet/mineral/diamond
power_gen = 40000
- time_per_sheet = 80
/obj/machinery/power/port_gen/pacman/mrs/overheat()
. =..()
diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm
index 3cf5f5766097..a386a739622d 100644
--- a/code/modules/power/power.dm
+++ b/code/modules/power/power.dm
@@ -19,6 +19,7 @@
/obj/machinery/power/Destroy()
disconnect_from_network()
+ set_no_power()
return ..()
///////////////////////////////
@@ -96,14 +97,47 @@
chan = power_channel
A.use_power(amount, chan)
-/obj/machinery/proc/addStaticPower(value, powerchannel)
- var/area/A = get_area(src)
+/obj/machinery/proc/addStaticPower(value, powerchannel, area/A)
if(!A)
- return
+ if(get_area(src))
+ A = get_area(src)
+ else
+ return
A.addStaticPower(value, powerchannel)
-/obj/machinery/proc/removeStaticPower(value, powerchannel)
- addStaticPower(-value, powerchannel)
+/obj/machinery/proc/removeStaticPower(value, powerchannel, area/A)
+ addStaticPower(-value, powerchannel, A)
+
+/obj/machinery/proc/set_idle_power(area/A)
+ set_no_power(A)
+ if(use_power == NO_POWER_USE)
+ return
+ use_static_power = IDLE_POWER_USE
+ addStaticPower(idle_power_usage, power_channel + 3, A)
+
+/obj/machinery/proc/set_active_power(area/A)
+ set_no_power(A)
+ if(use_power == NO_POWER_USE)
+ return
+ use_static_power = ACTIVE_POWER_USE
+ addStaticPower(active_power_usage, power_channel + 3, A)
+
+/obj/machinery/proc/set_no_power(area/A)
+ switch(use_static_power)
+ if(IDLE_POWER_USE)
+ removeStaticPower(idle_power_usage, power_channel + 3, A)
+ if(ACTIVE_POWER_USE)
+ removeStaticPower(active_power_usage, power_channel + 3, A)
+ use_static_power = NO_POWER_USE
+
+/obj/machinery/proc/set_static_power(area/A)//used to set the actual draw to the value of use_static_power
+ switch(use_power)
+ if(NO_POWER_USE)
+ set_no_power(A)
+ if(IDLE_POWER_USE)
+ set_idle_power(A)
+ if(ACTIVE_POWER_USE)
+ set_active_power(A)
/**
* Called whenever the power settings of the containing area change
@@ -112,13 +146,15 @@
*
* Returns TRUE if the NOPOWER flag was toggled
*/
-/obj/machinery/proc/power_change()
+/obj/machinery/proc/power_change(area/A)
SIGNAL_HANDLER
SHOULD_CALL_PARENT(1)
+ set_no_power(A)
if(machine_stat & BROKEN)
return
if(powered(power_channel))
+ set_static_power(A)
if(machine_stat & NOPOWER)
SEND_SIGNAL(src, COMSIG_MACHINERY_POWER_RESTORED)
. = TRUE
diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm
index d17e12264706..2dcaa224a71e 100644
--- a/code/modules/power/singularity/emitter.dm
+++ b/code/modules/power/singularity/emitter.dm
@@ -11,8 +11,8 @@
circuit = /obj/item/circuitboard/machine/emitter
use_power = NO_POWER_USE
- idle_power_usage = 10
- active_power_usage = 300
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_LOW
var/icon_state_on = "emitter_+a"
var/icon_state_underpowered = "emitter_+u"
@@ -67,7 +67,7 @@
var/max_firedelay = 120
var/firedelay = 120
var/min_firedelay = 24
- var/power_usage = 350
+ var/power_usage = ACTIVE_DRAW_LOW
for(var/obj/item/stock_parts/micro_laser/L in component_parts)
max_firedelay -= 20 * L.rating
min_firedelay -= 4 * L.rating
diff --git a/code/modules/power/singularity/particle_accelerator/particle_control.dm b/code/modules/power/singularity/particle_accelerator/particle_control.dm
index 7bc3fa552ad3..ddcaf026a40e 100644
--- a/code/modules/power/singularity/particle_accelerator/particle_control.dm
+++ b/code/modules/power/singularity/particle_accelerator/particle_control.dm
@@ -6,8 +6,8 @@
anchored = FALSE
density = TRUE
use_power = NO_POWER_USE
- idle_power_usage = 500
- active_power_usage = 10000
+ idle_power_usage = IDLE_DRAW_MEDIUM
+ active_power_usage = ACTIVE_DRAW_EXTREME * 2
dir = NORTH
mouse_opacity = MOUSE_OPACITY_OPAQUE
var/strength_upper_limit = 2
@@ -53,7 +53,7 @@
connected_parts.Cut()
return
if(!part_scan())
- use_power = IDLE_POWER_USE
+ set_idle_power()
active = FALSE
connected_parts.Cut()
@@ -106,7 +106,7 @@
active = FALSE
use_power = NO_POWER_USE
else if(!machine_stat && construction_state == PA_CONSTRUCTION_COMPLETE)
- use_power = IDLE_POWER_USE
+ set_idle_power()
/obj/machinery/particle_accelerator/control_box/process()
if(active)
@@ -175,14 +175,14 @@
message_admins("PA Control Computer turned [active ?"ON":"OFF"] by [usr ? ADMIN_LOOKUPFLW(usr) : "outside forces"] in [ADMIN_VERBOSEJMP(src)]")
log_game("PA Control Computer turned [active ?"ON":"OFF"] by [usr ? "[key_name(usr)]" : "outside forces"] at [AREACOORD(src)]")
if(active)
- use_power = ACTIVE_POWER_USE
+ set_active_power()
for(var/CP in connected_parts)
var/obj/structure/particle_accelerator/part = CP
part.strength = strength
part.powered = TRUE
part.update_appearance()
else
- use_power = IDLE_POWER_USE
+ set_idle_power()
for(var/CP in connected_parts)
var/obj/structure/particle_accelerator/part = CP
part.strength = null
diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm
index 8ca409051d6c..d25fc732abe7 100644
--- a/code/modules/power/solar.dm
+++ b/code/modules/power/solar.dm
@@ -324,7 +324,7 @@
icon_state = "computer"
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 250
+ idle_power_usage = IDLE_DRAW_LOW
max_integrity = 200
integrity_failure = 0.5
var/icon_screen = "solar"
diff --git a/code/modules/projectiles/ammunition/_ammunition.dm b/code/modules/projectiles/ammunition/_ammunition.dm
index a02f7dc61a4a..4b19282bab3d 100644
--- a/code/modules/projectiles/ammunition/_ammunition.dm
+++ b/code/modules/projectiles/ammunition/_ammunition.dm
@@ -38,6 +38,8 @@
var/list/bounce_sfx_override // if true, overrides the bouncing sfx from the turf to this one
+ var/bullet_per_box
+
/obj/item/ammo_casing/spent
name = "spent bullet casing"
@@ -49,6 +51,7 @@
BB = new projectile_type(src)
pixel_x = base_pixel_x + rand(-10, 10)
pixel_y = base_pixel_y + rand(-10, 10)
+ item_flags |= NO_PIXEL_RANDOM_DROP
if(auto_rotate)
transform = transform.Turn(pick(0, 90, 180, 270))
update_appearance()
@@ -105,9 +108,14 @@
bounce_away(FALSE, NONE)
. = ..()
-/obj/item/ammo_casing/proc/on_eject()
+/obj/item/ammo_casing/proc/on_eject(atom/shooter)
forceMove(drop_location()) //Eject casing onto ground.
- bounce_away(TRUE)
+ pixel_x = rand(-4, 4)
+ pixel_y = rand(-4, 4)
+ pixel_z = 8 //bounce time
+ var/angle_of_movement = !isnull(shooter) ? (rand(-3000, 3000) / 100) + dir2angle(turn(shooter.dir, 180)) : rand(-3000, 3000) / 100
+ AddComponent(/datum/component/movable_physics, _horizontal_velocity = rand(400, 450) / 100, _vertical_velocity = rand(400, 450) / 100, _horizontal_friction = rand(20, 24) / 100, _z_gravity = PHYSICS_GRAV_STANDARD, _z_floor = 0, _angle_of_movement = angle_of_movement, _bounce_sound = bounce_sfx_override)
+
/obj/item/ammo_casing/proc/bounce_away(still_warm = FALSE, bounce_delay = 3)
if(!heavy_metal)
diff --git a/code/modules/projectiles/ammunition/ballistic/lmg.dm b/code/modules/projectiles/ammunition/ballistic/lmg.dm
index 90030e7b0944..d46001951ba4 100644
--- a/code/modules/projectiles/ammunition/ballistic/lmg.dm
+++ b/code/modules/projectiles/ammunition/ballistic/lmg.dm
@@ -6,6 +6,7 @@
icon_state = "rifle-steel"
caliber = "7.12x82mm"
projectile_type = /obj/projectile/bullet/mm712x82
+ bullet_per_box = 100
/obj/item/ammo_casing/mm712x82/ap
name = "7.12x82mm armor-piercing bullet casing"
diff --git a/code/modules/projectiles/ammunition/ballistic/pistol.dm b/code/modules/projectiles/ammunition/ballistic/pistol.dm
index a105ae6602ee..0f37b5426d2d 100644
--- a/code/modules/projectiles/ammunition/ballistic/pistol.dm
+++ b/code/modules/projectiles/ammunition/ballistic/pistol.dm
@@ -6,6 +6,7 @@
icon_state = "pistol-steel"
caliber = "10mm"
projectile_type = /obj/projectile/bullet/c10mm
+ bullet_per_box = 50
/obj/item/ammo_casing/c10mm/surplus
name = "10mm surplus bullet casing"
@@ -45,6 +46,7 @@
icon_state = "pistol-brass"
caliber = "9mm"
projectile_type = /obj/projectile/bullet/c9mm
+ bullet_per_box = 50
/obj/item/ammo_casing/c9mm/surplus
name = "9mm surplus bullet casing"
@@ -84,6 +86,7 @@
icon_state = "pistol-steel"
caliber = ".45"
projectile_type = /obj/projectile/bullet/c45
+ bullet_per_box = 50
/obj/item/ammo_casing/c45/surplus
name = ".45 surplus bullet casing"
@@ -122,6 +125,7 @@
desc = "A .50 AE bullet casing."
caliber = ".50 AE"
projectile_type = /obj/projectile/bullet/a50AE
+ bullet_per_box = 20
/obj/item/ammo_casing/a50AE/hp
name = ".50 AE hollow point bullet casing"
@@ -134,4 +138,5 @@
desc = "A .22 LR bullet casing."
projectile_type = /obj/projectile/bullet/c22lr
caliber = "22lr"
+ bullet_per_box = 75
diff --git a/code/modules/projectiles/ammunition/ballistic/revolver.dm b/code/modules/projectiles/ammunition/ballistic/revolver.dm
index d5684e834e3d..fa77095de9b9 100644
--- a/code/modules/projectiles/ammunition/ballistic/revolver.dm
+++ b/code/modules/projectiles/ammunition/ballistic/revolver.dm
@@ -6,6 +6,7 @@
caliber = ".357"
icon_state = "magnum-brass"
projectile_type = /obj/projectile/bullet/a357
+ bullet_per_box = 50
/obj/item/ammo_casing/a357/match
name = ".357 match bullet casing"
@@ -28,6 +29,7 @@
caliber = ".45-70"
icon_state = "magnum-brass"
projectile_type = /obj/projectile/bullet/a4570
+ bullet_per_box = 12
/obj/item/ammo_casing/a4570/match
name = ".45-70 match bullet casing"
@@ -53,6 +55,7 @@
desc = "A .38 Special bullet casing."
caliber = ".38"
projectile_type = /obj/projectile/bullet/c38
+ bullet_per_box = 50
/obj/item/ammo_casing/c38/surplus
name = ".38 surplus bullet casing"
diff --git a/code/modules/projectiles/ammunition/ballistic/rifle.dm b/code/modules/projectiles/ammunition/ballistic/rifle.dm
index 3ab1de13e2d0..12e5cfa6b23c 100644
--- a/code/modules/projectiles/ammunition/ballistic/rifle.dm
+++ b/code/modules/projectiles/ammunition/ballistic/rifle.dm
@@ -6,6 +6,7 @@
icon_state = "rifle-brass"
caliber = "8x50mmR"
projectile_type = /obj/projectile/bullet/a8_50r
+ bullet_per_box = 20
/obj/item/ammo_casing/a8_50rhp
name = "8x50mmR hollow point bullet casing"
@@ -23,6 +24,7 @@
icon_state = "caseless"
caliber = "a858"
projectile_type = /obj/projectile/bullet/a858
+ bullet_per_box = 20
// .300 Magnum (Smile Rifle)
@@ -32,6 +34,7 @@
icon_state = "rifle-steel"
caliber = "a300"
projectile_type = /obj/projectile/bullet/a300
+ bullet_per_box = 20
// 5.56x39mm (M-90gl Carbine & P-16) - хрень полная , описание калибра не сходится с указанием в коде
@@ -48,6 +51,7 @@
icon_state = "rifle-brass"
caliber = "5.56x45mm"
projectile_type = /obj/projectile/bullet/a556_45
+ bullet_per_box = 80
// [/CELADON-EDIT]
// 5.45x39mm (SKM-24v)
@@ -59,6 +63,7 @@
caliber = "5.45x39mm"
randomspread = TRUE
projectile_type = /obj/projectile/bullet/a545_39
+ bullet_per_box = 80
/obj/item/ammo_casing/a545_39/recycled
name = "recycled 5.45x39mm bullet casing"
@@ -75,6 +80,7 @@
icon_state = "rifle-brass"
caliber = "7.62x40mm"
projectile_type = /obj/projectile/bullet/a762_40
+ bullet_per_box = 80
// .300 Blackout (Polymer Survivor Rifle)
@@ -84,6 +90,7 @@
icon_state = "rifle-steel"
caliber = ".300 BLK"
projectile_type = /obj/projectile/bullet/aac_300blk
+ bullet_per_box = 20
/obj/item/ammo_casing/aac_300blk/recycled
name = "recycled .300 BLK bullet casing"
@@ -99,6 +106,7 @@
icon_state = "rifle-brass"
caliber = ".308"
projectile_type = /obj/projectile/bullet/a308
+ bullet_per_box = 20
/obj/item/ammo_casing/caseless/c299
name = ".229 Eoehoma caseless bullet casing"
@@ -106,3 +114,4 @@
icon_state = "caseless"
caliber = ".299 caseless"
projectile_type = /obj/projectile/bullet/c299
+ bullet_per_box = 80
diff --git a/code/modules/projectiles/ammunition/ballistic/shotgun.dm b/code/modules/projectiles/ammunition/ballistic/shotgun.dm
index b297ee30e776..8e5f2e128ac7 100644
--- a/code/modules/projectiles/ammunition/ballistic/shotgun.dm
+++ b/code/modules/projectiles/ammunition/ballistic/shotgun.dm
@@ -8,6 +8,7 @@
caliber = "12ga"
custom_materials = list(/datum/material/iron=4000)
projectile_type = /obj/projectile/bullet/slug
+ bullet_per_box = 25
bounce_sfx_override = 'sound/weapons/gun/general/bulletcasing_shotgun_bounce.ogg'
diff --git a/code/modules/projectiles/ammunition/ballistic/smg.dm b/code/modules/projectiles/ammunition/ballistic/smg.dm
index d947736d5f25..74bb35b1ec2e 100644
--- a/code/modules/projectiles/ammunition/ballistic/smg.dm
+++ b/code/modules/projectiles/ammunition/ballistic/smg.dm
@@ -6,6 +6,7 @@
icon_state = "rifle-brass"
caliber = "4.6x30mm"
projectile_type = /obj/projectile/bullet/c46x30mm
+ bullet_per_box = 50
/obj/item/ammo_casing/c46x30mm/ap
name = "4.6x30mm armor-piercing bullet casing"
@@ -18,6 +19,7 @@
desc = "A 4.6x30mm incendiary bullet casing."
bullet_skin = "incen"
projectile_type = /obj/projectile/bullet/incendiary/c46x30mm
+ bullet_per_box = 50
// 4.73x33mm caseless (Solar)
@@ -27,6 +29,7 @@
icon_state = "caseless"
caliber = "4.73x33mm caseless"
projectile_type = /obj/projectile/bullet/c47x33mm
+ bullet_per_box = 50
// 5.56mm HITP caseless (Pistole C)
diff --git a/code/modules/projectiles/ammunition/ballistic/sniper.dm b/code/modules/projectiles/ammunition/ballistic/sniper.dm
index af7369204e6d..e4b668c2228f 100644
--- a/code/modules/projectiles/ammunition/ballistic/sniper.dm
+++ b/code/modules/projectiles/ammunition/ballistic/sniper.dm
@@ -6,6 +6,7 @@
icon_state = "big-steel"
caliber = ".50 BMG"
projectile_type = /obj/projectile/bullet/p50
+ bullet_per_box = 20
/obj/item/ammo_casing/p50/soporific
name = ".50 BMG soporific bullet casing"
diff --git a/code/modules/projectiles/ammunition/caseless/_caseless.dm b/code/modules/projectiles/ammunition/caseless/_caseless.dm
index 78525277f28c..230f5f9a9969 100644
--- a/code/modules/projectiles/ammunition/caseless/_caseless.dm
+++ b/code/modules/projectiles/ammunition/caseless/_caseless.dm
@@ -3,7 +3,7 @@
firing_effect_type = null
heavy_metal = FALSE
-/obj/item/ammo_casing/caseless/on_eject()
+/obj/item/ammo_casing/caseless/on_eject(atom/shooter)
// [CELADON-EDIT] - CELADON_FIXES
// qdel(src) // CELADON-EDIT - ORIGINAL
if(BB) // Проверяем, что гильза не пустая
diff --git a/code/modules/projectiles/ammunition/caseless/foam.dm b/code/modules/projectiles/ammunition/caseless/foam.dm
index 3c71d31eb5ed..0051680fd1e8 100644
--- a/code/modules/projectiles/ammunition/caseless/foam.dm
+++ b/code/modules/projectiles/ammunition/caseless/foam.dm
@@ -9,6 +9,7 @@
custom_materials = list(/datum/material/iron = 11.25)
harmful = FALSE
var/modified = FALSE
+ bullet_per_box = 40
/obj/item/ammo_casing/caseless/foam_dart/update_icon_state()
. = ..()
diff --git a/code/modules/projectiles/boxes_magazines/_box_magazine.dm b/code/modules/projectiles/boxes_magazines/_box_magazine.dm
index c63dbf047d76..9a73e8a6230a 100644
--- a/code/modules/projectiles/boxes_magazines/_box_magazine.dm
+++ b/code/modules/projectiles/boxes_magazines/_box_magazine.dm
@@ -51,7 +51,7 @@
if(!start_empty)
for(var/i = 1, i <= max_ammo, i++)
stored_ammo += new ammo_type(src)
- update_appearance()
+ update_ammo_count()
///gets a round from the magazine, if keep is TRUE the round will stay in the gun
/obj/item/ammo_box/proc/get_round(keep = FALSE)
@@ -110,8 +110,8 @@
if(!silent)
playsound(get_turf(attacking_box), 'sound/weapons/gun/general/mag_bullet_insert.ogg', 60, TRUE) //src is nullspaced, which means internal magazines won't properly play sound, thus we use attacking_box
num_loaded++
- attacking_obj.update_appearance()
- update_appearance()
+ attacking_box.update_ammo_count()
+ update_ammo_count()
if(istype(attacking_obj, /obj/item/ammo_casing))
var/obj/item/ammo_casing/casing_to_insert = attacking_obj
@@ -120,7 +120,7 @@
if(!silent)
playsound(casing_to_insert, 'sound/weapons/gun/general/mag_bullet_insert.ogg', 60, TRUE)
num_loaded++
- update_appearance()
+ update_ammo_count()
if(num_loaded)
diff --git a/code/modules/projectiles/boxes_magazines/generic_ammo_box.dm b/code/modules/projectiles/boxes_magazines/generic_ammo_box.dm
new file mode 100644
index 000000000000..2c88824623e2
--- /dev/null
+++ b/code/modules/projectiles/boxes_magazines/generic_ammo_box.dm
@@ -0,0 +1,53 @@
+/obj/item/ammo_box/generic
+ name = "generic ammo box"
+ desc = "A generic, unbranded box of ammo. It doesn't have great capacity, but it can hold a variety of different calibers."
+ max_ammo = 20
+ start_empty = TRUE
+ icon_state = "generic-ammo"
+ /// Does the box currently have an ammo type set?
+ var/ammo_set = FALSE
+ /// Name of the currently set ammo type
+ var/ammo_name
+
+/obj/item/ammo_box/generic/update_ammo_count()
+ . = ..()
+ if(LAZYLEN(stored_ammo) == 0)
+ ammo_set = FALSE
+ ammo_type = /obj/item/ammo_casing
+
+/obj/item/ammo_box/generic/proc/update_max_ammo(obj/item/ammo_casing/ammo)
+ if(ammo.bullet_per_box)
+ max_ammo = round(ammo.bullet_per_box)
+ else
+ max_ammo = 10
+
+ return
+
+/obj/item/ammo_box/generic/attackby(obj/item/attacking_obj, mob/user, params, silent, replace_spent)
+ . = ..()
+
+ if(!ammo_set && istype(attacking_obj, /obj/item/ammo_casing))
+ var/obj/item/ammo_casing/ammo_load = attacking_obj.type
+ ammo_type = ammo_load
+ ammo_set = TRUE
+ ammo_name = attacking_obj.name
+ update_max_ammo(attacking_obj)
+ to_chat(user, span_notice("You set the box to hold [attacking_obj]!"))
+
+ if(istype(attacking_obj, /obj/item/pen))
+ if(!user.is_literate())
+ to_chat(user, span_notice("You scribble illegibly on the cover of [src]!"))
+ return
+ var/inputvalue = stripped_input(user, "What would you like to label the box?", "Box Labelling", "", MAX_NAME_LEN)
+
+ if(!inputvalue)
+ return
+
+ if(user.canUseTopic(src, BE_CLOSE))
+ name = "[initial(src.name)][(inputvalue ? " - '[inputvalue]'" : null)]"
+
+/obj/item/ammo_box/generic/examine(mob/user)
+ . = ..()
+ . += span_notice("[ammo_set ? "It's set to hold [ammo_name]\s. The box can hold up to [max_ammo] rounds." : "It doesn't have an ammo type set. Use a bullet on the box to set it."]")
+ . += span_notice("You can use a pen on it to rename the box.")
+
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index 5cd55858537a..ca4d0217b380 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -209,7 +209,7 @@
zoom(user, user.dir, FALSE) //we can only stay zoomed in if it's in our hands //yeah and we only unzoom if we're actually zoomed using the gun!!
//called after the gun has successfully fired its chambered ammo.
-/obj/item/gun/proc/process_chamber()
+/obj/item/gun/proc/process_chamber(atom/shooter)
SEND_SIGNAL(src, COMSIG_GUN_CHAMBER_PROCESSED)
return FALSE
@@ -357,7 +357,7 @@
shoot_with_empty_chamber(user)
firing_burst = FALSE
return FALSE
- process_chamber()
+ process_chamber(shooter = user)
update_appearance()
return TRUE
@@ -408,7 +408,7 @@
else
shoot_with_empty_chamber(user)
return
- process_chamber()
+ process_chamber(shooter = user)
update_appearance()
if(fire_delay)
semicd = TRUE
diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm
index 227abceffa01..559b7daa643a 100644
--- a/code/modules/projectiles/guns/ballistic.dm
+++ b/code/modules/projectiles/guns/ballistic.dm
@@ -144,13 +144,13 @@
if(!chambered && empty_indicator)
. += "[icon_state]_empty"
-/obj/item/gun/ballistic/process_chamber(empty_chamber = TRUE, from_firing = TRUE, chamber_next_round = TRUE)
+/obj/item/gun/ballistic/process_chamber(empty_chamber = TRUE, from_firing = TRUE, chamber_next_round = TRUE, atom/shooter)
if(!semi_auto && from_firing)
return
var/obj/item/ammo_casing/casing = chambered //Find chambered round
if(istype(casing)) //there's a chambered round
if(casing_ejector || !from_firing)
- casing.on_eject()
+ casing.on_eject(shooter)
chambered = null
else if(empty_chamber)
chambered = null
@@ -179,7 +179,7 @@
bolt_locked = FALSE
if (user)
to_chat(user, "You rack the [bolt_wording] of \the [src].")
- process_chamber(!chambered, FALSE)
+ process_chamber(!chambered, FALSE, shooter = user)
if (bolt_type == BOLT_TYPE_LOCKING && !chambered)
bolt_locked = TRUE
playsound(src, lock_back_sound, lock_back_sound_volume, lock_back_sound_vary)
@@ -267,7 +267,7 @@
if (istype(A, /obj/item/ammo_casing) || istype(A, /obj/item/ammo_box))
if (bolt_type == BOLT_TYPE_NO_BOLT || internal_magazine)
if (chambered && !chambered.BB)
- chambered.on_eject()
+ chambered.on_eject(shooter = user)
chambered = null
var/num_loaded = magazine.attackby(A, user, params)
if (num_loaded)
@@ -364,7 +364,10 @@
var/num_unloaded = 0
for(var/obj/item/ammo_casing/CB in get_ammo_list(FALSE, TRUE))
CB.forceMove(drop_location())
- CB.bounce_away(FALSE, NONE)
+
+ var/angle_of_movement =(rand(-3000, 3000) / 100) + dir2angle(turn(user.dir, 180))
+ CB.AddComponent(/datum/component/movable_physics, _horizontal_velocity = rand(350, 450) / 100, _vertical_velocity = rand(400, 450) / 100, _horizontal_friction = rand(20, 24) / 100, _z_gravity = PHYSICS_GRAV_STANDARD, _z_floor = 0, _angle_of_movement = angle_of_movement, _bounce_sound = CB.bounce_sfx_override)
+
num_unloaded++
SSblackbox.record_feedback("tally", "station_mess_created", 1, CB.name)
if (num_unloaded)
@@ -422,7 +425,7 @@ GLOBAL_LIST_INIT(gun_saw_types, typecacheof(list(
///Handles all the logic of sawing off guns,
/obj/item/gun/ballistic/proc/sawoff(mob/user, obj/item/saw)
- if(!saw.get_sharpness() || !is_type_in_typecache(saw, GLOB.gun_saw_types) && !saw.tool_behaviour == TOOL_SAW) //needs to be sharp. Otherwise turned off eswords can cut this.
+ if(!saw.get_sharpness() || !is_type_in_typecache(saw, GLOB.gun_saw_types) && saw.tool_behaviour != TOOL_SAW) //needs to be sharp. Otherwise turned off eswords can cut this.
return
if(sawn_off)
to_chat(user, "\The [src] is already shortened!")
diff --git a/code/modules/projectiles/guns/ballistic/pistol.dm b/code/modules/projectiles/guns/ballistic/pistol.dm
index 1cb86fec256d..4c3aafad7ce3 100644
--- a/code/modules/projectiles/guns/ballistic/pistol.dm
+++ b/code/modules/projectiles/guns/ballistic/pistol.dm
@@ -79,6 +79,12 @@
/obj/item/gun/ballistic/automatic/pistol/candor/factory/no_mag
spawnwithmagazine = FALSE
+/obj/item/gun/ballistic/automatic/pistol/candor/phenex
+ name = "\improper HP Phenex"
+ desc = "A uniquely modified version of the Candor, famously created by Hunter's Pride. Named after the daemonic Phoenix of legend that the Ashen Huntsman had once slain, this hell-kissed weapon is more visually intimidating than its original counterpart, but mechanically acts the same. Chambered in .45."
+ icon_state = "phenex"
+ item_state = "hp_phenex"
+
/obj/item/gun/ballistic/automatic/pistol/deagle
name = "\improper Desert Eagle"
desc = "An oversized handgun chambered in .50 AE. A true hand cannon."
diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm
index b08e156927fa..0ba1792be28e 100644
--- a/code/modules/projectiles/guns/ballistic/revolver.dm
+++ b/code/modules/projectiles/guns/ballistic/revolver.dm
@@ -57,7 +57,7 @@
. += "[base_icon_state || initial(icon_state)][safety ? "_hammer_up" : "_hammer_down"]"
-/obj/item/gun/ballistic/revolver/process_chamber(empty_chamber = TRUE, from_firing = TRUE, chamber_next_round = TRUE)
+/obj/item/gun/ballistic/revolver/process_chamber(empty_chamber = TRUE, from_firing = TRUE, chamber_next_round = TRUE, atom/shooter)
SEND_SIGNAL(src, COMSIG_UPDATE_AMMO_HUD)
return ..()
@@ -84,7 +84,9 @@
if(!casing_to_eject)
continue
casing_to_eject.forceMove(drop_location())
- casing_to_eject.bounce_away(FALSE, NONE)
+ var/angle_of_movement =(rand(-3000, 3000) / 100) + dir2angle(turn(user.dir, 180))
+ casing_to_eject.AddComponent(/datum/component/movable_physics, _horizontal_velocity = rand(450, 550) / 100, _vertical_velocity = rand(400, 450) / 100, _horizontal_friction = rand(20, 24) / 100, _z_gravity = PHYSICS_GRAV_STANDARD, _z_floor = 0, _angle_of_movement = angle_of_movement, _bounce_sound = casing_to_eject.bounce_sfx_override)
+
num_unloaded++
SSblackbox.record_feedback("tally", "station_mess_created", 1, casing_to_eject.name)
chamber_round(FALSE)
@@ -98,7 +100,7 @@
var/doafter_time = 0.4 SECONDS
if(!do_mob(user,user,doafter_time))
break
- if(!eject_casing())
+ if(!eject_casing(user))
doafter_time = 0 SECONDS
else
num_unloaded++
@@ -121,7 +123,9 @@
return FALSE
playsound(src, eject_sound, eject_sound_volume, eject_sound_vary)
casing_to_eject.forceMove(drop_location())
- casing_to_eject.bounce_away(FALSE, NONE)
+ var/angle_of_movement =(rand(-3000, 3000) / 100) + dir2angle(turn(user.dir, 180))
+ casing_to_eject.AddComponent(/datum/component/movable_physics, _horizontal_velocity = rand(350, 450) / 100, _vertical_velocity = rand(400, 450) / 100, _horizontal_friction = rand(20, 24) / 100, _z_gravity = PHYSICS_GRAV_STANDARD, _z_floor = 0, _angle_of_movement = angle_of_movement, _bounce_sound = casing_to_eject.bounce_sfx_override)
+
SSblackbox.record_feedback("tally", "station_mess_created", 1, casing_to_eject.name)
if(!gate_loaded)
magazine.stored_ammo[casing_index] = null
@@ -139,11 +143,12 @@
/obj/item/gun/ballistic/revolver/proc/insert_casing(mob/living/user, obj/item/ammo_casing/casing_to_insert, allow_ejection)
if(!casing_to_insert)
return FALSE
-// [CELADON-ADD] - CELADON FIXES
+
+// Check if the bullet's caliber matches the magazine's caliber.If not, send a warning message to the user and return FALSE.
if(casing_to_insert.caliber != magazine.caliber)
- to_chat(user, "Этот патрон [casing_to_insert] не подходит для [src].")
+ to_chat(user, "\The [casing_to_insert] is not suitable for [src].")
return FALSE
-// [/CELADON-ADD]
+
var/list/rounds = magazine.ammo_list()
var/obj/item/ammo_casing/slot = rounds[gate_offset+1] //byond arrays start at 1, so we add 1 to get the correct index
var/doafter_time = 0.4 SECONDS
@@ -275,7 +280,6 @@
playsound(src, rack_sound, rack_sound_volume, rack_sound_vary)
chamber_round(TRUE)
- //playsound(src, rack_sound, rack_sound_volume, rack_sound_vary)
SEND_SIGNAL(src, COMSIG_UPDATE_AMMO_HUD)
update_appearance()
@@ -440,8 +444,8 @@
var/total_spread = bonus_spread
if(HAS_TRAIT(user, TRAIT_GUNSLINGER)) //gunslinger bonus
total_spread += gunslinger_bonus
- total_spread = clamp(total_spread,0,INFINITY)
- return total_spread
+
+ return ..(user, total_spread)
/obj/item/gun/ballistic/revolver/pickup(mob/user)
. = ..()
@@ -720,4 +724,4 @@
// if you go through the pain of not only using this shitty gun, but also with the fucking gunslinger quirk, you deserve this bonus. not a BIG bonus, but enough as an incentive to make people actually take the quirk.
if(chambered.BB && (HAS_TRAIT(user, TRAIT_GUNSLINGER)))
chambered.BB.damage += 5
- chambered.armour_penetration += 5
+ chambered.BB.armour_penetration += 5
diff --git a/code/modules/projectiles/guns/ballistic/rifle.dm b/code/modules/projectiles/guns/ballistic/rifle.dm
index 1632e175fd8e..24cf3323048a 100644
--- a/code/modules/projectiles/guns/ballistic/rifle.dm
+++ b/code/modules/projectiles/guns/ballistic/rifle.dm
@@ -33,11 +33,11 @@
. = ..()
. += "[icon_state]_bolt[bolt_locked ? "_locked" : ""]"
-/obj/item/gun/ballistic/rifle/rack(mob/user = null)
+/obj/item/gun/ballistic/rifle/rack(mob/living/user)
if (bolt_locked == FALSE)
to_chat(user, "You open the bolt of \the [src].")
playsound(src, rack_sound, rack_sound_volume, rack_sound_vary)
- process_chamber(FALSE, FALSE, FALSE)
+ process_chamber(FALSE, FALSE, FALSE, shooter = user)
bolt_locked = TRUE
update_appearance()
if (magazine && !magazine?.ammo_count() && empty_autoeject && !internal_magazine)
diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm
index 0b7e526c8a2b..9d257821344b 100644
--- a/code/modules/projectiles/guns/ballistic/shotgun.dm
+++ b/code/modules/projectiles/guns/ballistic/shotgun.dm
@@ -64,6 +64,7 @@
mag_type = /obj/item/ammo_box/magazine/internal/shot/lethal
manufacturer = MANUFACTURER_HUNTERSPRIDE
fire_delay = 1
+ rack_delay = 2
can_be_sawn_off = TRUE
@@ -303,7 +304,9 @@
var/num_unloaded = 0
for(var/obj/item/ammo_casing/casing_bullet in get_ammo_list(FALSE, TRUE))
casing_bullet.forceMove(drop_location())
- casing_bullet.bounce_away(FALSE, NONE)
+ var/angle_of_movement =(rand(-3000, 3000) / 100) + dir2angle(turn(user.dir, 180))
+ casing_bullet.AddComponent(/datum/component/movable_physics, _horizontal_velocity = rand(450, 550) / 100, _vertical_velocity = rand(400, 450) / 100, _horizontal_friction = rand(20, 24) / 100, _z_gravity = PHYSICS_GRAV_STANDARD, _z_floor = 0, _angle_of_movement = angle_of_movement, _bounce_sound = casing_bullet.bounce_sfx_override)
+
num_unloaded++
SSblackbox.record_feedback("tally", "station_mess_created", 1, casing_bullet.name)
if (num_unloaded)
diff --git a/code/modules/projectiles/guns/ballistic/toy.dm b/code/modules/projectiles/guns/ballistic/toy.dm
index 95911c9269bc..5f62b8c7ca78 100644
--- a/code/modules/projectiles/guns/ballistic/toy.dm
+++ b/code/modules/projectiles/guns/ballistic/toy.dm
@@ -59,8 +59,8 @@
. = ..()
. += "[icon_state]_toy"
-/obj/item/gun/ballistic/shotgun/toy/process_chamber(empty_chamber = 0)
- ..()
+/obj/item/gun/ballistic/shotgun/toy/process_chamber(empty_chamber = 0, from_firing = TRUE, chamber_next_round = TRUE, atom/shooter)
+ . = ..()
if(chambered && !chambered.BB)
qdel(chambered)
diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm
index a6e424901d5e..705789b3484a 100644
--- a/code/modules/projectiles/guns/energy.dm
+++ b/code/modules/projectiles/guns/energy.dm
@@ -204,7 +204,7 @@
if(!chambered.BB)
chambered.newshot()
-/obj/item/gun/energy/process_chamber()
+/obj/item/gun/energy/process_chamber(atom/shooter)
if(chambered && !chambered.BB) //if BB is null, i.e the shot has been fired...
var/obj/item/ammo_casing/energy/shot = chambered
cell.use(shot.e_cost)//... drain the cell cell
diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm
index 27b7b65b622d..d84655fb5813 100644
--- a/code/modules/projectiles/guns/energy/special.dm
+++ b/code/modules/projectiles/guns/energy/special.dm
@@ -221,7 +221,7 @@
if(istype(WH))
WH.gun = WEAKREF(src)
-/obj/item/gun/energy/wormhole_projector/process_chamber()
+/obj/item/gun/energy/wormhole_projector/process_chamber(atom/shooter)
..()
select_fire()
diff --git a/code/modules/projectiles/guns/magic.dm b/code/modules/projectiles/guns/magic.dm
index 9360c24be499..1f8be937b645 100644
--- a/code/modules/projectiles/guns/magic.dm
+++ b/code/modules/projectiles/guns/magic.dm
@@ -41,7 +41,7 @@
if (charges && chambered && !chambered.BB)
chambered.newshot()
-/obj/item/gun/magic/process_chamber()
+/obj/item/gun/magic/process_chamber(atom/shooter)
if(chambered && !chambered.BB) //if BB is null, i.e the shot has been fired...
charges--//... drain a charge
recharge_newshot()
diff --git a/code/modules/projectiles/guns/misc/chem_gun.dm b/code/modules/projectiles/guns/misc/chem_gun.dm
index fef47121af5f..7c99b7156000 100644
--- a/code/modules/projectiles/guns/misc/chem_gun.dm
+++ b/code/modules/projectiles/guns/misc/chem_gun.dm
@@ -29,7 +29,7 @@
/obj/item/gun/chem/can_shoot()
return syringes_left
-/obj/item/gun/chem/process_chamber()
+/obj/item/gun/chem/process_chamber(atom/shooter)
if(chambered && !chambered.BB && syringes_left)
chambered.newshot()
diff --git a/code/modules/projectiles/guns/misc/syringe_gun.dm b/code/modules/projectiles/guns/misc/syringe_gun.dm
index 96927eb91afc..84d00b226371 100644
--- a/code/modules/projectiles/guns/misc/syringe_gun.dm
+++ b/code/modules/projectiles/guns/misc/syringe_gun.dm
@@ -29,7 +29,7 @@
/obj/item/gun/syringe/can_shoot()
return syringes.len
-/obj/item/gun/syringe/process_chamber()
+/obj/item/gun/syringe/process_chamber(atom/shooter)
if(chambered && !chambered.BB) //we just fired
recharge_newshot()
diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm
index f62a3a32035d..86f4e05226e4 100644
--- a/code/modules/reagents/chemistry/holder.dm
+++ b/code/modules/reagents/chemistry/holder.dm
@@ -389,7 +389,7 @@
for(var/addiction in cached_addictions)
var/datum/reagent/A = addiction
if(istype(R, A))
- A.addiction_stage = -15 // you're satisfied for a good while.
+ A.addiction_stage = -30 // you're satisfied for a good while.
need_mob_update += R.on_mob_life(C)
if(can_overdose)
diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
index 290aec1f6c54..037256db302f 100644
--- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
@@ -19,7 +19,7 @@
icon_state = "dispenser"
base_icon_state = "dispenser"
use_power = IDLE_POWER_USE
- idle_power_usage = 40
+ idle_power_usage = IDLE_DRAW_MINIMAL
interaction_flags_machine = INTERACT_MACHINE_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OFFLINE
resistance_flags = FIRE_PROOF | ACID_PROOF
circuit = /obj/item/circuitboard/machine/chem_dispenser
diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm
index e8892390e189..88e7973dd29c 100644
--- a/code/modules/reagents/chemistry/machinery/chem_heater.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm
@@ -5,7 +5,7 @@
icon_state = "mixer0b"
base_icon_state = "mixer"
use_power = IDLE_POWER_USE
- idle_power_usage = 40
+ idle_power_usage = IDLE_DRAW_MINIMAL
resistance_flags = FIRE_PROOF | ACID_PROOF
circuit = /obj/item/circuitboard/machine/chem_heater
diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm
index e53a7f20ae16..c9791666b54f 100644
--- a/code/modules/reagents/chemistry/machinery/chem_master.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_master.dm
@@ -7,7 +7,7 @@
icon_state = "mixer0"
base_icon_state = "mixer"
use_power = IDLE_POWER_USE
- idle_power_usage = 20
+ idle_power_usage = IDLE_DRAW_MINIMAL
resistance_flags = FIRE_PROOF | ACID_PROOF
circuit = /obj/item/circuitboard/machine/chem_master
diff --git a/code/modules/reagents/chemistry/machinery/pandemic.dm b/code/modules/reagents/chemistry/machinery/pandemic.dm
index 65bcf56ef25c..6c85e75ccd86 100644
--- a/code/modules/reagents/chemistry/machinery/pandemic.dm
+++ b/code/modules/reagents/chemistry/machinery/pandemic.dm
@@ -8,8 +8,8 @@
icon = 'icons/obj/chemical/misc.dmi'
icon_state = "pandemic0"
base_icon_state = "pandemic"
- use_power = TRUE
- idle_power_usage = 20
+ use_power = IDLE_POWER_USE
+ idle_power_usage = IDLE_DRAW_MINIMAL
resistance_flags = ACID_PROOF
circuit = /obj/item/circuitboard/computer/pandemic
unique_icon = TRUE
diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm
index 5e5bd21747dc..5beaca629934 100644
--- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm
+++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm
@@ -8,8 +8,8 @@
base_icon_state = "juicer"
layer = BELOW_OBJ_LAYER
use_power = IDLE_POWER_USE
- idle_power_usage = 5
- active_power_usage = 100
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MEDIUM
circuit = /obj/item/circuitboard/machine/reagentgrinder
pass_flags = PASSTABLE
resistance_flags = ACID_PROOF
@@ -261,10 +261,11 @@
operating = FALSE
/obj/machinery/reagentgrinder/proc/juice()
- power_change()
if(!beaker || machine_stat & (NOPOWER|BROKEN) || beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
return
+ set_active_power()
operate_for(50, juicing = TRUE)
+ set_idle_power()
for(var/obj/item/i in holdingitems)
if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
break
@@ -281,10 +282,11 @@
remove_object(I)
/obj/machinery/reagentgrinder/proc/grind(mob/user)
- power_change()
if(!beaker || machine_stat & (NOPOWER|BROKEN) || beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
return
+ set_active_power()
operate_for(60)
+ set_idle_power()
for(var/i in holdingitems)
if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
break
@@ -310,10 +312,11 @@
/obj/machinery/reagentgrinder/proc/mix(mob/user)
//For butter and other things that would change upon shaking or mixing
- power_change()
if(!beaker || machine_stat & (NOPOWER|BROKEN))
return
+ set_active_power()
operate_for(50, juicing = TRUE)
+ set_idle_power()
addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/machinery/reagentgrinder, mix_complete)), 50)
/obj/machinery/reagentgrinder/proc/mix_complete()
diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm
index 2c0ecef181a1..09812ef20cf3 100644
--- a/code/modules/reagents/chemistry/reagents/food_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm
@@ -327,12 +327,6 @@
color = "#FFFFFF" // rgb: 255,255,255
taste_description = "salt"
-/datum/reagent/consumable/sodiumchloride/expose_mob(mob/living/M, method=TOUCH, reac_volume)
- if(!istype(M))
- return
- if(M.has_bane(BANE_SALT))
- M.mind.disrupt_spells(-200)
-
/datum/reagent/consumable/sodiumchloride/expose_turf(turf/T, reac_volume) //Creates an umbra-blocking salt pile
if(!istype(T))
return
diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
index 7fb71324d7af..4c4ad36b2413 100644
--- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
@@ -1091,7 +1091,7 @@
M.adjustBruteLoss(-2*REM, 0)
if(ishuman(M))
var/mob/living/carbon/human/H = M
- H.bleed_rate = max(H.bleed_rate - 0.25, 0)
+ H.heal_bleeding(0.25)
..()
. = 1
@@ -1638,7 +1638,7 @@
if(prob(50))
if(ishuman(M))
var/mob/living/carbon/human/H = M
- H.bleed_rate = max(H.bleed_rate - 2, 0)
+ H.heal_bleeding(2)
..()
. = 1
diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm
index d727cbfd0fa6..02d8850f8776 100644
--- a/code/modules/reagents/chemistry/reagents/other_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm
@@ -795,12 +795,6 @@
C.blood_volume += 0.5
..()
-/datum/reagent/iron/expose_mob(mob/living/M, method=TOUCH, reac_volume)
- if(M.has_bane(BANE_IRON)) //If the target is weak to cold iron, then poison them.
- if(holder && holder.chem_temp < 100) // COLD iron.
- M.reagents.add_reagent(/datum/reagent/toxin, reac_volume)
- ..()
-
/datum/reagent/gold
name = "Gold"
description = "Gold is a dense, soft, shiny metal and the most malleable and ductile metal known."
@@ -817,11 +811,6 @@
taste_description = "expensive yet reasonable metal"
material = /datum/material/silver
-/datum/reagent/silver/expose_mob(mob/living/M, method=TOUCH, reac_volume)
- if(M.has_bane(BANE_SILVER))
- M.reagents.add_reagent(/datum/reagent/toxin, reac_volume)
- ..()
-
/datum/reagent/uranium
name ="Uranium"
description = "A jade-green metallic chemical element in the actinide series, weakly radioactive."
diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm
index 91927581095c..498017191179 100644
--- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm
@@ -255,11 +255,13 @@
name = "Mindbreaker Toxin"
description = "A powerful hallucinogen. Not a thing to be messed with. For some mental patients. it counteracts their symptoms and anchors them to reality."
color = "#B31008" // rgb: 139, 166, 233
+ metabolization_rate = 0.1 * REAGENTS_METABOLISM
toxpwr = 0
taste_description = "sourness"
/datum/reagent/toxin/mindbreaker/on_mob_life(mob/living/carbon/M)
- M.hallucination += 5
+ if(!M.has_quirk(/datum/quirk/insanity))
+ M.hallucination += 5
return ..()
/datum/reagent/toxin/plantbgone
@@ -767,7 +769,8 @@
/datum/reagent/toxin/heparin/on_mob_life(mob/living/carbon/M)
if(ishuman(M))
var/mob/living/carbon/human/H = M
- H.bleed_rate = min(H.bleed_rate + 2, 8)
+ for(var/obj/item/bodypart/BP in H.get_bleeding_parts())
+ BP.adjust_bleeding(BP.bleeding * 0.1)
H.adjustBruteLoss(1, 0) //Brute damage increases with the amount they're bleeding
. = 1
return ..() || .
diff --git a/code/modules/reagents/chemistry/reagents/trickwine_reagents.dm b/code/modules/reagents/chemistry/reagents/trickwine_reagents.dm
index df76f85b1f64..be5e2ce35f9a 100644
--- a/code/modules/reagents/chemistry/reagents/trickwine_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/trickwine_reagents.dm
@@ -115,7 +115,7 @@
M.adjust_bodytemperature(5 * TEMPERATURE_DAMAGE_COEFFICIENT, M.get_body_temp_normal())
if(ishuman(M))
var/mob/living/carbon/human/H = M
- H.bleed_rate = max(H.bleed_rate - 0.25, 0)
+ H.heal_bleeding(0.25)
return ..()
/datum/reagent/consumable/ethanol/trickwine/hearth_wine/expose_mob(mob/living/M, method=TOUCH, reac_volume)
@@ -180,15 +180,13 @@
/datum/reagent/consumable/ethanol/trickwine/prism_wine/on_mob_metabolize(mob/living/carbon/human/M)
..()
ADD_TRAIT(M, TRAIT_REFLECTIVE, "trickwine")
- if(M.physiology.burn_mod <= initial(M.physiology.burn_mod))
- M.physiology.burn_mod *= 0.5
+ M.physiology.burn_mod *= 0.5
M.add_filter("prism-wine", 2, list("type"="outline", "color"="#8FD7DF", "size"=1))
M.visible_message("[M] seems to shimmer with power!")
/datum/reagent/consumable/ethanol/trickwine/prism_wine/on_mob_end_metabolize(mob/living/carbon/human/M)
REMOVE_TRAIT(M, TRAIT_REFLECTIVE, "trickwine")
- if(M.physiology.burn_mod > initial(M.physiology.burn_mod))
- M.physiology.burn_mod *= 2
+ M.physiology.burn_mod *= 2
M.remove_filter("prism-wine")
M.visible_message("[M] has returned to normal!")
..()
diff --git a/code/modules/reagents/chemistry/recipes/others.dm b/code/modules/reagents/chemistry/recipes/others.dm
index 10cd8ffc72eb..e7494191d1df 100644
--- a/code/modules/reagents/chemistry/recipes/others.dm
+++ b/code/modules/reagents/chemistry/recipes/others.dm
@@ -56,7 +56,7 @@
/datum/chemical_reaction/adamantinesolidification/on_reaction(datum/reagents/holder, created_volume)
var/location = get_turf(holder.my_atom)
for(var/i = 1, i <= created_volume, i++)
- new /obj/item/stack/sheet/mineral/adamantine(location)
+ new /obj/item/stack/sheet/mineral/hidden/hellstone(location)
/datum/chemical_reaction/silversolidification
required_reagents = list(/datum/reagent/silver = 20, /datum/reagent/consumable/frostoil = 5, /datum/reagent/carbon = 10)
diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm
index 97290d54213f..d3bf1e211290 100644
--- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm
+++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm
@@ -425,7 +425,7 @@
required_other = TRUE
/datum/chemical_reaction/slime/adamantine/on_reaction(datum/reagents/holder)
- new /obj/item/stack/sheet/mineral/adamantine(get_turf(holder.my_atom))
+ new /obj/item/stack/sheet/mineral/hidden/hellstone(get_turf(holder.my_atom))
..()
//Bluespace
diff --git a/code/modules/reagents/reagent_containers/bottle.dm b/code/modules/reagents/reagent_containers/bottle.dm
index 5916fee4b44a..9a29efe1a381 100644
--- a/code/modules/reagents/reagent_containers/bottle.dm
+++ b/code/modules/reagents/reagent_containers/bottle.dm
@@ -275,13 +275,6 @@
desc = "A small bottle containing Bio Virus Antidote Kit."
list_reagents = list(/datum/reagent/vaccine/fungal_tb = 30)
-/obj/item/reagent_containers/glass/bottle/necropolis_seed
- name = "bowl of blood"
- desc = "A clay bowl containing a fledgling spire, preserved in blood. When consumed, allows the user to transform into an avatar of the Necropolis. A robust virologist may be able to unlock its full potential..."
- icon = 'icons/obj/chemical/mortar.dmi'
- icon_state = "mortar_bone"
- spawned_disease = /datum/disease/advance/necropolis
-
//Oldstation.dmm chemical storage bottles
/obj/item/reagent_containers/glass/bottle/hydrogen
diff --git a/code/modules/research/bepis.dm b/code/modules/research/bepis.dm
index 84d948f7c2b9..a033b59b56ae 100644
--- a/code/modules/research/bepis.dm
+++ b/code/modules/research/bepis.dm
@@ -17,7 +17,7 @@
density = TRUE
layer = ABOVE_MOB_LAYER
use_power = IDLE_POWER_USE
- active_power_usage = 1500
+ active_power_usage = ACTIVE_DRAW_HIGH
circuit = /obj/item/circuitboard/machine/bepis
var/banking_amount = 100
@@ -254,7 +254,7 @@
return
calcsuccess()
use_power(MACHINE_OPERATION * power_saver) //This thing should eat your APC battery if you're not careful.
- use_power = IDLE_POWER_USE //Machine shuts off after use to prevent spam and look better visually.
+ set_idle_power() //Machine shuts off after use to prevent spam and look better visually.
update_icon_state()
if("amount")
var/input = text2num(params["amount"])
@@ -262,9 +262,9 @@
banking_amount = input
if("toggle_power")
if(use_power == ACTIVE_POWER_USE)
- use_power = IDLE_POWER_USE
+ set_idle_power()
else
- use_power = ACTIVE_POWER_USE
+ set_active_power()
update_icon_state()
if("account_reset")
if(use_power == IDLE_POWER_USE)
diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm
index 7c43c3fc5acb..e39d48e5cc77 100644
--- a/code/modules/research/designs/autolathe_designs.dm
+++ b/code/modules/research/designs/autolathe_designs.dm
@@ -870,6 +870,22 @@
build_path = /obj/item/ammo_box/c556mmHITP/surplus
category = list("initial", "Security", "Ammo")
+/datum/design/generic_ammo_box
+ name = "Generic Ammo Box"
+ id = "ammo-generic"
+ build_type = AUTOLATHE | PROTOLATHE
+ materials = list(/datum/material/iron = 1500)
+ build_path = /obj/item/ammo_box/generic
+ category = list("initial", "Security", "Ammo")
+
+/datum/design/ammo_can
+ name = "Ammo Can"
+ id = "ammo-can"
+ build_type = AUTOLATHE | PROTOLATHE
+ materials = list(/datum/material/iron = 500)
+ build_path = /obj/item/storage/toolbox/ammo
+ category = list("initial", "Security", "Ammo")
+
/datum/design/cleaver
name = "Butcher's Cleaver"
id = "cleaver"
@@ -1175,6 +1191,14 @@
build_path = /obj/item/assembly/control
category = list("initial","Misc")
+/datum/design/holofield_control
+ name = "Holofield Controller"
+ id = "holofield"
+ build_type = AUTOLATHE
+ materials = list(/datum/material/iron = 100, /datum/material/glass = 50)
+ build_path = /obj/item/assembly/control/shieldwallgen
+ category = list("initial","Misc")
+
/datum/design/trashbag
name="Trash Bag"
id="trashbag"
diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm
index e12db8a59738..6955bf525d29 100644
--- a/code/modules/research/designs/machine_designs.dm
+++ b/code/modules/research/designs/machine_designs.dm
@@ -9,6 +9,13 @@
build_path = /obj/item/circuitboard/machine/smes
category = list ("Engineering Machinery")
+/datum/design/board/ssu
+ name = "Machine Design (Suit Storage Unit Board)"
+ desc = "The circuit board for a suit storage unit."
+ id = "ssu"
+ build_path = /obj/item/circuitboard/machine/suit_storage_unit
+ category = list ("Engineering Machinery")
+
/datum/design/board/circulator
name = "Machine Design (Circulator Board)"
desc = "The circuit board for a circulator."
diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm
index dfd373dcd3d7..46dddeb0c586 100644
--- a/code/modules/research/designs/mechfabricator_designs.dm
+++ b/code/modules/research/designs/mechfabricator_designs.dm
@@ -445,7 +445,7 @@
id = "honk_torso"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/honker_torso
- materials = list(/datum/material/iron=20000,/datum/material/glass = 10000,/datum/material/bananium=10000)
+ materials = list(/datum/material/iron=20000,/datum/material/glass = 10000,/datum/material/hellstone=10000)
construction_time = 300
category = list("H.O.N.K")
@@ -454,7 +454,7 @@
id = "honk_head"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/honker_head
- materials = list(/datum/material/iron=10000,/datum/material/glass = 5000,/datum/material/bananium=5000)
+ materials = list(/datum/material/iron=10000,/datum/material/glass = 5000,/datum/material/hellstone=5000)
construction_time = 200
category = list("H.O.N.K")
@@ -463,7 +463,7 @@
id = "honk_left_arm"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/honker_left_arm
- materials = list(/datum/material/iron=15000,/datum/material/bananium=5000)
+ materials = list(/datum/material/iron=15000,/datum/material/hellstone=5000)
construction_time = 200
category = list("H.O.N.K")
@@ -472,7 +472,7 @@
id = "honk_right_arm"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/honker_right_arm
- materials = list(/datum/material/iron=15000,/datum/material/bananium=5000)
+ materials = list(/datum/material/iron=15000,/datum/material/hellstone=5000)
construction_time = 200
category = list("H.O.N.K")
@@ -481,7 +481,7 @@
id = "honk_left_leg"
build_type = MECHFAB
build_path =/obj/item/mecha_parts/part/honker_left_leg
- materials = list(/datum/material/iron=20000,/datum/material/bananium=5000)
+ materials = list(/datum/material/iron=20000,/datum/material/hellstone=5000)
construction_time = 200
category = list("H.O.N.K")
@@ -490,7 +490,7 @@
id = "honk_right_leg"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/honker_right_leg
- materials = list(/datum/material/iron=20000,/datum/material/bananium=5000)
+ materials = list(/datum/material/iron=20000,/datum/material/hellstone=5000)
construction_time = 200
category = list("H.O.N.K")
@@ -657,7 +657,7 @@
id = "mech_mousetrap_mortar"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/mousetrap_mortar
- materials = list(/datum/material/iron=20000,/datum/material/bananium=5000)
+ materials = list(/datum/material/iron=20000,/datum/material/hellstone=5000)
construction_time = 300
category = list("Exosuit Equipment")
@@ -666,7 +666,7 @@
id = "mech_banana_mortar"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/banana_mortar
- materials = list(/datum/material/iron=20000,/datum/material/bananium=5000)
+ materials = list(/datum/material/iron=20000,/datum/material/hellstone=5000)
construction_time = 300
category = list("Exosuit Equipment")
@@ -675,7 +675,7 @@
id = "mech_honker"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/honker
- materials = list(/datum/material/iron=20000,/datum/material/bananium=10000)
+ materials = list(/datum/material/iron=20000,/datum/material/hellstone=10000)
construction_time = 500
category = list("Exosuit Equipment")
@@ -684,7 +684,7 @@
id = "mech_punching_face"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/punching_glove
- materials = list(/datum/material/iron=20000,/datum/material/bananium=7500)
+ materials = list(/datum/material/iron=20000,/datum/material/hellstone=7500)
construction_time = 400
category = list("Exosuit Equipment")
@@ -769,7 +769,7 @@
id = "borg_transform_clown"
build_type = MECHFAB
build_path = /obj/item/borg/upgrade/transform/clown
- materials = list(/datum/material/iron = 15000, /datum/material/glass = 15000, /datum/material/bananium = 1000)
+ materials = list(/datum/material/iron = 15000, /datum/material/glass = 15000, /datum/material/hellstone = 1000)
construction_time = 120
category = list("Cyborg Upgrade Modules")
diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm
index 343ff920df20..95a03b829608 100644
--- a/code/modules/research/designs/medical_designs.dm
+++ b/code/modules/research/designs/medical_designs.dm
@@ -476,7 +476,7 @@
desc = "Makes death amusing."
id = "implant_trombone"
build_type = PROTOLATHE
- materials = list(/datum/material/glass = 500, /datum/material/bananium = 500)
+ materials = list(/datum/material/glass = 500, /datum/material/hellstone = 500)
build_path = /obj/item/implantcase/sad_trombone
category = list("Medical Designs")
diff --git a/code/modules/research/designs/misc_designs.dm b/code/modules/research/designs/misc_designs.dm
index eeca189ef2dc..816cd4f9fdbf 100644
--- a/code/modules/research/designs/misc_designs.dm
+++ b/code/modules/research/designs/misc_designs.dm
@@ -130,7 +130,7 @@
desc = "Damn son, where'd you find this?"
id = "air_horn"
build_type = PROTOLATHE
- materials = list(/datum/material/iron = 4000, /datum/material/bananium = 1000)
+ materials = list(/datum/material/iron = 4000, /datum/material/hellstone = 1000)
build_path = /obj/item/bikehorn/airhorn
category = list("Equipment")
diff --git a/code/modules/research/machinery/_production.dm b/code/modules/research/machinery/_production.dm
index 36a22dac2cc7..0f8c2eb53c1d 100644
--- a/code/modules/research/machinery/_production.dm
+++ b/code/modules/research/machinery/_production.dm
@@ -2,6 +2,10 @@
name = "technology fabricator"
desc = "Makes researched and prototype items with materials and energy."
layer = BELOW_OBJ_LAYER
+ use_power = IDLE_POWER_USE
+ idle_power_usage = IDLE_DRAW_LOW
+ active_power_usage = ACTIVE_DRAW_HIGH
+ power_channel = AREA_USAGE_EQUIP
var/consoleless_interface = FALSE //Whether it can be used without a console.
var/efficiency_coeff = 1 //Materials needed / coeff = actual.
var/list/categories = list()
@@ -96,6 +100,7 @@
if(notify_admins)
investigate_log("[key_name(usr)] built [amount] of [path] at [src]([type]).", INVESTIGATE_RESEARCH)
message_admins("[ADMIN_LOOKUPFLW(usr)] has built [amount] of [path] at \a [src]([type]).")
+ set_idle_power()
for(var/i in 1 to amount)
var/obj/item/I = new path(get_turf(src))
if(efficient_with(I.type))
@@ -142,11 +147,11 @@
if(materials.on_hold())
say("Mineral access is on hold, please contact the quartermaster.")
return FALSE
- var/power = 1000
+ var/power = active_power_usage
amount = clamp(amount, 1, 50)
for(var/M in D.materials)
power += round(D.materials[M] * amount / 35)
- power = min(3000, power)
+ power = min(ACTIVE_DRAW_EXTREME, power)
use_power(power)
var/coeff = efficient_with(D.build_path) ? efficiency_coeff : 1
var/list/efficient_mats = list()
@@ -168,6 +173,7 @@
flick(production_animation, src)
var/timecoeff = D.lathe_time_factor / efficiency_coeff
addtimer(CALLBACK(src, PROC_REF(reset_busy)), (30 * timecoeff * amount) ** 0.5)
+ set_active_power()
addtimer(CALLBACK(src, PROC_REF(do_print), D.build_path, amount, efficient_mats, D.dangerous_construction), (32 * timecoeff * amount) ** 0.8)
return TRUE
diff --git a/code/modules/research/nanites/nanite_chamber.dm b/code/modules/research/nanites/nanite_chamber.dm
index d5d5fa79e8ca..eb50a70af0bb 100644
--- a/code/modules/research/nanites/nanite_chamber.dm
+++ b/code/modules/research/nanites/nanite_chamber.dm
@@ -9,8 +9,8 @@
use_power = IDLE_POWER_USE
anchored = TRUE
density = TRUE
- idle_power_usage = 50
- active_power_usage = 300
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_HIGH
var/locked = FALSE
var/breakout_time = 1200
diff --git a/code/modules/research/nanites/public_chamber.dm b/code/modules/research/nanites/public_chamber.dm
index 9e39486c2052..b149fda6baae 100644
--- a/code/modules/research/nanites/public_chamber.dm
+++ b/code/modules/research/nanites/public_chamber.dm
@@ -8,8 +8,8 @@
use_power = IDLE_POWER_USE
anchored = TRUE
density = TRUE
- idle_power_usage = 50
- active_power_usage = 300
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_HIGH
var/cloud_id = 1
var/locked = FALSE
diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm
index aea3bda3d36b..d867d7312ff1 100644
--- a/code/modules/research/techweb/all_nodes.dm
+++ b/code/modules/research/techweb/all_nodes.dm
@@ -183,7 +183,7 @@
prereq_ids = list("base")
design_ids = list("solarcontrol", "solarassembly", "recharger", "powermonitor", "rped", "pacman", "adv_capacitor", "adv_scanning", "emitter", "high_cell", "adv_matter_bin", "scanner_gate",
"atmosalerts", "atmos_control", "recycler", "autolathe", "high_micro_laser", "nano_mani", "mesons", "welding_goggles", "thermomachine", "rad_collector", "tesla_coil", "grounding_rod",
- "apc_control", "cell_charger", "power control", "airlock_board", "firelock_board", "aac_electronics", "airalarm_electronics", "firealarm_electronics", "cell_charger", "stack_console", "stack_machine",
+ "apc_control", "cell_charger", "ssu", "power control", "airlock_board", "firelock_board", "aac_electronics", "airalarm_electronics", "firealarm_electronics", "cell_charger", "stack_console", "stack_machine",
"oxygen_tank", "plasma_tank", "emergency_oxygen", "emergency_oxygen_engi", "plasmaman_tank_belt", "pneumatic_seal", "shieldwallgen", "shieldwallgen_atmos") //WS edit, solar assemblies from lathe
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000)
export_price = 5000
diff --git a/code/modules/research/xenobiology/crossbreeding/charged.dm b/code/modules/research/xenobiology/crossbreeding/charged.dm
index 501ff548e08f..25aa79302918 100644
--- a/code/modules/research/xenobiology/crossbreeding/charged.dm
+++ b/code/modules/research/xenobiology/crossbreeding/charged.dm
@@ -146,7 +146,7 @@ Charged extracts:
effect_desc = "Creates bananium. Oh no."
/obj/item/slimecross/charged/pyrite/do_effect(mob/user)
- new /obj/item/stack/sheet/mineral/bananium(get_turf(user), 10)
+ new /obj/item/stack/sheet/mineral/hidden/hellstone(get_turf(user), 10)
user.visible_message("[src] solidifies with a horrifying banana stench!")
..()
diff --git a/code/modules/security_levels/keycard_authentication.dm b/code/modules/security_levels/keycard_authentication.dm
index 7f3693e98760..58e75c399d81 100644
--- a/code/modules/security_levels/keycard_authentication.dm
+++ b/code/modules/security_levels/keycard_authentication.dm
@@ -10,8 +10,8 @@ GLOBAL_DATUM_INIT(keycard_events, /datum/events, new)
icon = 'icons/obj/monitors.dmi'
icon_state = "auth_off"
use_power = IDLE_POWER_USE
- idle_power_usage = 2
- active_power_usage = 6
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MINIMAL
power_channel = AREA_USAGE_ENVIRON
req_access = list(ACCESS_KEYCARD_AUTH)
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
diff --git a/code/modules/station_goals/dna_vault.dm b/code/modules/station_goals/dna_vault.dm
index 9679aa860c9c..b894f99c255d 100644
--- a/code/modules/station_goals/dna_vault.dm
+++ b/code/modules/station_goals/dna_vault.dm
@@ -120,7 +120,7 @@
icon_state = "vault"
density = TRUE
anchored = TRUE
- idle_power_usage = 5000
+ idle_power_usage = ACTIVE_DRAW_EXTREME
pixel_x = -32
pixel_y = -64
light_range = 3
diff --git a/code/modules/surgery/bodyparts/bodyparts.dm b/code/modules/surgery/bodyparts/bodyparts.dm
index f6c5d460efd0..d4e2f3c3f1ae 100644
--- a/code/modules/surgery/bodyparts/bodyparts.dm
+++ b/code/modules/surgery/bodyparts/bodyparts.dm
@@ -50,6 +50,16 @@
/// Is it fine, broken, splinted, or just straight up fucking gone
var/bone_status = BONE_FLAG_NO_BONES
var/bone_break_threshold = 30
+ /// Threshold at which the limb will start bleeding if damaged by sharp items or projectiles
+ var/bleed_threshold = 10
+ /// Threshold at which the limb will start bleeding if damaged by blunt items
+ var/bleed_threshold_blunt = 25
+ /// Minimum damage of an incoming attack for it to cause bleeding
+ var/bleed_damage_min = 5
+ /// Minimum damage of an incoming blunt attack for it to cause bleeding
+ var/bleed_damage_min_blunt = 10
+ /// Current limb bleeding, increased when the limb takes brute damage over certain thresholds, decreased through bandages and cauterization
+ var/bleeding = 0
/// So we know if we need to scream if this limb hits max damage
var/last_maxed
@@ -202,11 +212,13 @@
if(stamina_dam > DAMAGE_PRECISION && owner.stam_regen_start_time <= world.time) //DO NOT update health here, it'll be done in the carbon's life.
heal_damage(0, 0, INFINITY, null, FALSE)
. |= BODYPART_LIFE_UPDATE_HEALTH
+ if(brute_dam < DAMAGE_PRECISION && bleeding)
+ adjust_bleeding(-0.2) //slowly stop bleeding if there's no damage left
//Applies brute and burn damage to the organ. Returns 1 if the damage-icon states changed at all.
//Damage will not exceed max_damage using this proc
//Cannot apply negative damage
-/obj/item/bodypart/proc/receive_damage(brute = 0, burn = 0, stamina = 0, blocked = 0, updating_health = TRUE, required_status = null, break_modifier = 1)
+/obj/item/bodypart/proc/receive_damage(brute = 0, burn = 0, stamina = 0, blocked = 0, updating_health = TRUE, required_status = null, break_modifier = 1, sharpness = FALSE)
var/hit_percent = (100-blocked)/100
if((!brute && !burn && !stamina) || hit_percent <= 0)
return FALSE
@@ -235,6 +247,10 @@
if((brute_dam > bone_break_threshold) && prob(brute_dam + break_modifier))
break_bone()
+ // Bleeding is applied here
+ if(brute_dam+brute >= (sharpness ? bleed_threshold : bleed_threshold_blunt) && brute >= (sharpness ? bleed_damage_min : bleed_damage_min_blunt))
+ adjust_bleeding(brute * BLOOD_LOSS_DAMAGE_BASE, BLOOD_LOSS_DAMAGE_MAXIMUM)
+
var/can_inflict = max_damage - get_damage()
if(can_inflict <= 0)
return FALSE
@@ -274,6 +290,7 @@
if(brute)
set_brute_dam(round(max(brute_dam - brute, 0), DAMAGE_PRECISION))
+ adjust_bleeding(-BLOOD_LOSS_DAMAGE_MAXIMUM * brute / max_damage)
if(burn)
set_burn_dam(round(max(burn_dam - burn, 0), DAMAGE_PRECISION))
if(stamina)
@@ -315,6 +332,30 @@
. = stamina_dam
stamina_dam = new_value
+/// Adjusts bodypart bleeding, value = amount of change, maximum = maximum current bloodloss amount this can modify
+/obj/item/bodypart/proc/adjust_bleeding(value, maximum = BLOOD_LOSS_MAXIMUM)
+ if(bleeding > maximum)
+ return
+ if(owner.dna && (NOBLOOD in owner.dna.species.species_traits))
+ return
+ bleeding = round(clamp(bleeding+value, 0, maximum), 0.001)
+
+/// Checks if the bodypart is viable for bandaging, if it isn't, tells the person trying (if present) what's stopping it
+/obj/item/bodypart/proc/can_bandage(user)
+ . = TRUE
+ if(is_pseudopart)
+ return FALSE
+ if(!bleeding)
+ if(user)
+ to_chat(user, span_warning("[owner]'s [parse_zone(body_zone)] isn't bleeding!"))
+ return FALSE
+ if(GetComponent(/datum/component/bandage))
+ if(user)
+ to_chat(user, span_warning("[owner]'s [parse_zone(body_zone)] has already been dressed!"))
+ return FALSE
+
+/obj/item/bodypart/proc/apply_bandage(bleed_reduction, lifespan, name)
+ AddComponent(/datum/component/bandage, bleed_reduction, lifespan, name)
//Returns total damage.
/obj/item/bodypart/proc/get_damage(include_stamina = FALSE)
@@ -762,8 +803,8 @@
bone_status = BONE_FLAG_NORMAL
/obj/item/bodypart/proc/on_mob_move()
- // Dont trigger if it isn't broken or if it has no owner
- if(bone_status != BONE_FLAG_BROKEN || !owner)
+ // Dont trigger if it isn't broken or if it has no owner or is buckled to a rollerbed
+ if(bone_status != BONE_FLAG_BROKEN || !owner || istype(owner?.buckled, /obj/structure/bed/roller))
return
if(prob(5))
diff --git a/code/modules/surgery/bodyparts/dismemberment.dm b/code/modules/surgery/bodyparts/dismemberment.dm
index 7c292ac21fc4..07d30e727c77 100644
--- a/code/modules/surgery/bodyparts/dismemberment.dm
+++ b/code/modules/surgery/bodyparts/dismemberment.dm
@@ -90,6 +90,7 @@
return
var/atom/Tsec = owner.drop_location()
var/mob/living/carbon/C = owner
+ SEND_SIGNAL(src, COMSIG_LIVING_DROP_LIMB)
update_limb(TRUE)
C.remove_bodypart(src)
diff --git a/code/modules/surgery/coronary_bypass.dm b/code/modules/surgery/coronary_bypass.dm
index 4c416c31c633..a4628d19efff 100644
--- a/code/modules/surgery/coronary_bypass.dm
+++ b/code/modules/surgery/coronary_bypass.dm
@@ -41,7 +41,8 @@
display_results(user, target, "Blood pools around the incision in [H]'s heart.",
"Blood pools around the incision in [H]'s heart.",
"")
- H.bleed_rate += 10
+ var/obj/item/bodypart/BP = H.get_bodypart(check_zone(surgery.location))
+ BP.adjust_bleeding(10)
target.apply_damage(15, BRUTE, "[target_zone]")
return ..()
@@ -51,7 +52,8 @@
display_results(user, target, "You screw up, cutting too deeply into the heart!",
"[user] screws up, causing blood to spurt out of [H]'s chest!",
"[user] screws up, causing blood to spurt out of [H]'s chest!")
- H.bleed_rate += 20
+ var/obj/item/bodypart/BP = H.get_bodypart(check_zone(surgery.location))
+ BP.adjust_bleeding(20)
H.adjustOrganLoss(ORGAN_SLOT_HEART, 10)
target.apply_damage(15, BRUTE, "[target_zone]")
@@ -90,5 +92,6 @@
"[user] screws up, causing blood to spurt out of [H]'s chest profusely!",
"[user] screws up, causing blood to spurt out of [H]'s chest profusely!")
H.adjustOrganLoss(ORGAN_SLOT_HEART, 30)
- H.bleed_rate += 30
+ var/obj/item/bodypart/BP = H.get_bodypart(check_zone(surgery.location))
+ BP.adjust_bleeding(30)
return FALSE
diff --git a/code/modules/surgery/experimental_dissection.dm b/code/modules/surgery/experimental_dissection.dm
index 70dbac246e4e..d3f4fb4d2741 100644
--- a/code/modules/surgery/experimental_dissection.dm
+++ b/code/modules/surgery/experimental_dissection.dm
@@ -10,7 +10,9 @@
/datum/surgery_step/retract_skin,
/datum/surgery_step/clamp_bleeders,
/datum/surgery_step/dissection,
- /datum/surgery_step/clamp_bleeders,
+ // [CELADON-REMOVE] - CELADON_BALANCE - Изменения диссекции
+ // /datum/surgery_step/clamp_bleeders,
+ // [/CELADON-REMOVE]
/datum/surgery_step/close)
possible_locs = list(BODY_ZONE_CHEST)
target_mobtypes = list(/mob/living) //Feel free to dissect devils but they're magic.
@@ -36,7 +38,10 @@
TOOL_SCALPEL = 45,
/obj/item/kitchen/knife = 30,
/obj/item/shard = 10)// special tools not only cut down time but also improve probability
- time = 125
+ // [CELADON-EDIT] - CELADON_BALANCE - Изменения диссекции
+ // time = 125 // CELADON-EDIT - ORIGINAL
+ time = 50
+ // [/CELADON-EDIT]
silicons_obey_prob = TRUE
repeatable = TRUE
experience_given = 0 //experience recieved scales with what's being dissected + which step you're doing.
@@ -60,9 +65,13 @@
if(isalienqueen(target) || isalienroyal(target))
cost = (MAX_DISSECTION_REWARD*38)
else if(isalienadult(target))
- cost = (MAX_DISSECTION_REWARD*30)
+ // [CELADON-EDIT] - CELADON_BALANCE - Изменения диссекции
+ // cost = (MAX_DISSECTION_REWARD*30) // CELADON-EDIT - ORIGINAL
+ cost = (MAX_DISSECTION_REWARD*10)
else if(isalien(target))
- cost = (MAX_DISSECTION_REWARD*14)
+ // cost = (MAX_DISSECTION_REWARD*14) // CELADON-EDIT - ORIGINAL
+ cost = (MAX_DISSECTION_REWARD*4)
+ // [/CELADON-EDIT]
else if(ismegafauna(target))
cost = (MAX_DISSECTION_REWARD*30)
else if(ishuman(target))
@@ -70,8 +79,14 @@
if(H?.dna?.species)
if(isabductor(H))
cost = (MAX_DISSECTION_REWARD*24)
- else if(iszombie(H) || isshadow(H) || isandroid(H))
- cost = (MAX_DISSECTION_REWARD*20)
+ // [CELADON-EDIT] - CELADON_BALANCE - Изменения диссекции
+ // else if(iszombie(H) || isshadow(H) || isandroid(H))
+ // cost = (MAX_DISSECTION_REWARD*30) // CELADON-EDIT - ORIGINAL
+ else if(isshadow(H) || isandroid(H))
+ cost = (MAX_DISSECTION_REWARD*30)
+ else if(iszombie(H))
+ cost = (MAX_DISSECTION_REWARD*5)
+ // [/CELADON-EDIT]
else for(var/type in mob_mult_list) // THIS. ELSE IF(). ENDS. HERE.
if(istype(target, type))
cost = (MAX_DISSECTION_REWARD*mob_mult_list[type])
diff --git a/code/modules/surgery/organic_steps.dm b/code/modules/surgery/organic_steps.dm
index 5167bb3a4517..42018e6c1d87 100644
--- a/code/modules/surgery/organic_steps.dm
+++ b/code/modules/surgery/organic_steps.dm
@@ -30,7 +30,9 @@
display_results(user, target, "Blood pools around the incision in [H]'s [parse_zone(target_zone)].",
"Blood pools around the incision in [H]'s [parse_zone(target_zone)].",
"")
- H.bleed_rate += 3
+ var/obj/item/bodypart/BP = H.get_bodypart(check_zone(surgery.location))
+ if(BP)
+ BP.adjust_bleeding(3)
return ..()
/datum/surgery_step/incise/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
@@ -74,7 +76,9 @@
target.heal_bodypart_damage(20,0)
if (ishuman(target))
var/mob/living/carbon/human/H = target
- H.bleed_rate = max((H.bleed_rate - 3), 0)
+ var/obj/item/bodypart/BP = H.get_bodypart(check_zone(surgery.location))
+ if(BP)
+ BP.adjust_bleeding(-3)
return ..()
/datum/surgery_step/clamp_bleeders/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
@@ -137,7 +141,9 @@
target.heal_bodypart_damage(15,0)
if (ishuman(target))
var/mob/living/carbon/human/H = target
- H.bleed_rate = max((H.bleed_rate - 3), 0)
+ var/obj/item/bodypart/BP = H.get_bodypart(check_zone(surgery.location))
+ if(BP)
+ BP.adjust_bleeding(-3)
return ..()
//saw bone
diff --git a/code/modules/surgery/organs/vocal_cords.dm b/code/modules/surgery/organs/vocal_cords.dm
index 5eed8abc46be..c0313adb2539 100644
--- a/code/modules/surgery/organs/vocal_cords.dm
+++ b/code/modules/surgery/organs/vocal_cords.dm
@@ -286,7 +286,7 @@
else if((findtext(message, bleed_words)))
cooldown = COOLDOWN_DAMAGE
for(var/mob/living/carbon/human/H in listeners)
- H.bleed_rate += (5 * power_multiplier)
+ H.cause_overall_bleeding(5*power_multiplier)
//FIRE
else if((findtext(message, burn_words)))
diff --git a/code/modules/surgery/surgery_helpers.dm b/code/modules/surgery/surgery_helpers.dm
index c4a769c43ed5..94209d276aa2 100644
--- a/code/modules/surgery/surgery_helpers.dm
+++ b/code/modules/surgery/surgery_helpers.dm
@@ -115,7 +115,9 @@
if(ishuman(M))
var/mob/living/carbon/human/H = M
- H.bleed_rate = max((H.bleed_rate - 3), 0)
+ var/obj/item/bodypart/BP = H.get_bodypart(check_zone(S.location))
+ if(BP)
+ BP.adjust_bleeding(-3)
M.surgeries -= S
user.visible_message("[user] closes [M]'s [parse_zone(selected_zone)] with [close_tool] and stops the surgery.", \
"You close [M]'s [parse_zone(selected_zone)] with [close_tool] and stop the surgery.")
diff --git a/code/modules/unit_tests/outfit_sanity.dm b/code/modules/unit_tests/outfit_sanity.dm
index aca1d210fbf0..4dc12b4dc6e3 100644
--- a/code/modules/unit_tests/outfit_sanity.dm
+++ b/code/modules/unit_tests/outfit_sanity.dm
@@ -3,7 +3,10 @@
/* We don't check the result of equip_to_slot_or_del because it returns false for random jumpsuits, as they delete themselves on init */ \
var/obj/item/outfit_item = H.get_item_by_slot(##slot_name); \
if (!outfit_item) { \
- TEST_FAIL("[outfit.name]'s [#outfit_key] is invalid! Could not equip a [outfit.##outfit_key] into that slot."); \
+ if (outfit.random != TRUE) \
+ TEST_FAIL("[outfit.name]'s [#outfit_key] is invalid! Could not equip a [outfit.##outfit_key] into that slot."); \
+ else \
+ log_world("[outfit.name]'s [#outfit_key] is invalid! Could not equip a [outfit.##outfit_key] into that slot."); \
} \
}
@@ -61,6 +64,10 @@
var/number = backpack_contents[path] || 1
for (var/_ in 1 to number)
if (!H.equip_to_slot_or_del(new path(H), ITEM_SLOT_BACKPACK, TRUE))
- TEST_FAIL("[outfit.name]'s backpack_contents are invalid! Couldn't add [path] to backpack.")
+ if (outfit.random != TRUE)
+ TEST_FAIL("[outfit.name]'s backpack_contents are invalid! Couldn't add [path] to backpack.")
+ else
+ log_world("[outfit.name]'s backpack_contents are invalid! Couldn't add [path] to backpack.")
+
#undef CHECK_OUTFIT_SLOT
diff --git a/code/modules/vending/_vending.dm b/code/modules/vending/_vending.dm
index 93fcacba45b1..4c97b3f7eaa2 100644
--- a/code/modules/vending/_vending.dm
+++ b/code/modules/vending/_vending.dm
@@ -47,6 +47,8 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
icon_state = "generic"
layer = BELOW_OBJ_LAYER
density = TRUE
+ use_power = IDLE_POWER_USE
+ idle_power_usage = IDLE_DRAW_MINIMAL
verb_say = "beeps"
verb_ask = "beeps"
verb_exclaim = "beeps"
diff --git a/code/modules/vending/assist.dm b/code/modules/vending/assist.dm
index 8a1c86cc9536..cb3cd0053d8a 100644
--- a/code/modules/vending/assist.dm
+++ b/code/modules/vending/assist.dm
@@ -10,8 +10,7 @@
/obj/item/stock_parts/manipulator = 3,
/obj/item/stock_parts/micro_laser = 3,
/obj/item/stock_parts/scanning_module = 3,
- /obj/item/stock_parts/capacitor = 3)
- contraband = list(
+ /obj/item/stock_parts/capacitor = 3,
/obj/item/assembly/timer = 2,
/obj/item/assembly/voice = 2,
/obj/item/assembly/health = 2,
diff --git a/code/modules/vending/autodrobe.dm b/code/modules/vending/autodrobe.dm
index b1d85fb3fcbb..04ae257730f2 100644
--- a/code/modules/vending/autodrobe.dm
+++ b/code/modules/vending/autodrobe.dm
@@ -109,12 +109,9 @@
/obj/item/clothing/suit/changshan_blue = 1,
/obj/item/clothing/suit/cheongsam_red = 1,
/obj/item/clothing/suit/cheongsam_blue = 1,
- /obj/item/gohei = 1)
- contraband = list(
+ /obj/item/gohei = 1,
/obj/item/clothing/suit/judgerobe = 1,
/obj/item/clothing/head/powdered_wig = 1,
- /obj/item/clothing/accessory/fan_mime_pin = 1,
- /obj/item/clothing/accessory/fan_clown_pin = 1,
/obj/item/gun/magic/wand/nothing = 2,
/obj/item/clothing/glasses/sunglasses/garb = 2,
/obj/item/clothing/glasses/blindfold = 1,
diff --git a/code/modules/vending/cigarette.dm b/code/modules/vending/cigarette.dm
index 7dd0b6004ea7..3cff7d3c361d 100644
--- a/code/modules/vending/cigarette.dm
+++ b/code/modules/vending/cigarette.dm
@@ -11,19 +11,19 @@
/obj/item/storage/fancy/cigarettes/cigpack_robust = 3,
/obj/item/storage/fancy/cigarettes/cigpack_carp = 3,
/obj/item/storage/fancy/cigarettes/cigpack_midori = 3,
+ /obj/item/storage/fancy/cigarettes/dromedaryco = 3,
+ /obj/item/clothing/mask/vape = 5,
/obj/item/storage/box/matches = 10,
/obj/item/lighter/greyscale = 4,
/obj/item/storage/fancy/rollingpapers = 5)
- contraband = list(
- /obj/item/clothing/mask/vape = 5,
- /obj/item/clothing/mask/vape/cigar = 3) //WS edit - E-Cigars
premium = list(
/obj/item/storage/fancy/cigarettes/cigpack_robustgold = 3,
- /obj/item/storage/box/gum/nicotine = 2,
+ /obj/item/storage/box/gum/nicotine = 3,
/obj/item/lighter = 3,
/obj/item/storage/fancy/cigarettes/cigars = 1,
/obj/item/storage/fancy/cigarettes/cigars/havana = 1,
- /obj/item/storage/fancy/cigarettes/cigars/cohiba = 1)
+ /obj/item/storage/fancy/cigarettes/cigars/cohiba = 1,
+ /obj/item/clothing/mask/vape/cigar = 3)
refill_canister = /obj/item/vending_refill/cigarette
default_price = 75
extra_price = 250
diff --git a/code/modules/vending/clothesmate.dm b/code/modules/vending/clothesmate.dm
index 8a7199968774..e9eef49a0e3a 100644
--- a/code/modules/vending/clothesmate.dm
+++ b/code/modules/vending/clothesmate.dm
@@ -104,19 +104,16 @@
/obj/item/clothing/suit/apron/purple_bartender = 2,
/obj/item/clothing/under/rank/civilian/bartender/purple = 2,
/obj/item/clothing/suit/toggle/suspenders/blue = 2,
- /obj/item/clothing/suit/toggle/suspenders/gray = 2)
- contraband = list(
- /obj/item/clothing/under/syndicate/tacticool = 1,
- /obj/item/clothing/under/syndicate/tacticool/skirt = 1,
+ /obj/item/clothing/suit/toggle/suspenders/gray = 2,
+ /obj/item/clothing/under/syndicate/tacticool = 2,
+ /obj/item/clothing/under/syndicate/tacticool/skirt = 2,
/obj/item/clothing/mask/balaclava = 1,
/obj/item/clothing/head/trapper = 1,
/obj/item/storage/belt/fannypack/black = 2,
/obj/item/clothing/suit/jacket/letterman_syndie = 1,
/obj/item/clothing/under/costume/jabroni = 1,
/obj/item/clothing/suit/vapeshirt = 1,
- /obj/item/clothing/under/costume/geisha = 1,
- /obj/item/clothing/under/rank/centcom/officer/replica = 1,
- /obj/item/clothing/under/rank/centcom/officer_skirt/replica = 1)
+ /obj/item/clothing/under/costume/geisha = 1)
premium = list(
/obj/item/clothing/under/suit/checkered = 1,
/obj/item/clothing/suit/jacket/leather = 1,
diff --git a/code/modules/vending/coffee.dm b/code/modules/vending/coffee.dm
index 3e45b431b16d..9c4851c134a5 100644
--- a/code/modules/vending/coffee.dm
+++ b/code/modules/vending/coffee.dm
@@ -7,11 +7,11 @@
products = list(
/obj/item/reagent_containers/food/drinks/coffee = 6,
/obj/item/reagent_containers/food/drinks/mug/tea = 6,
- /obj/item/reagent_containers/food/drinks/mug/coco = 3)
+ /obj/item/reagent_containers/food/drinks/mug/coco = 3,
+ /obj/item/reagent_containers/food/drinks/ice = 6)
premium = list(
/obj/item/reagent_containers/food/drinks/cafelatte = 3,
/obj/item/reagent_containers/food/drinks/soylatte = 3)
- contraband = list(/obj/item/reagent_containers/food/drinks/ice = 12)
refill_canister = /obj/item/vending_refill/coffee
default_price = 45
extra_price = 150
diff --git a/code/modules/vending/cola.dm b/code/modules/vending/cola.dm
index 2ce937979e74..4a9f4a456eee 100644
--- a/code/modules/vending/cola.dm
+++ b/code/modules/vending/cola.dm
@@ -15,8 +15,7 @@
/obj/item/reagent_containers/food/drinks/soda_cans/lemon_lime = 10,
/obj/item/reagent_containers/food/drinks/soda_cans/sol_dry = 10,
/obj/item/reagent_containers/food/drinks/waterbottle = 10,
- /obj/item/reagent_containers/food/drinks/soda_cans/efuel = 5)
- contraband = list(
+ /obj/item/reagent_containers/food/drinks/soda_cans/efuel = 5,
/obj/item/reagent_containers/food/drinks/soda_cans/thirteenloko = 6,
/obj/item/reagent_containers/food/drinks/soda_cans/shamblers = 6)
premium = list(
diff --git a/code/modules/vending/drinnerware.dm b/code/modules/vending/drinnerware.dm
index 7ff7d80ddccd..5dbd8ea733db 100644
--- a/code/modules/vending/drinnerware.dm
+++ b/code/modules/vending/drinnerware.dm
@@ -17,11 +17,8 @@
/obj/item/kitchen/rollingpin = 2,
/obj/item/kitchen/knife = 2,
/obj/item/kitchen/knife/pizza_cutter = 2,
- /obj/item/book/granter/crafting_recipe/cooking_sweets_101 = 2)
- contraband = list(
- /obj/item/kitchen/rollingpin = 2,
- /obj/item/kitchen/knife/butcher = 2,
- /obj/item/shovel/spoon = 2) // ST - Only a spoonfull
+ /obj/item/book/granter/crafting_recipe/cooking_sweets_101 = 2,
+ /obj/item/kitchen/knife/butcher = 1)
refill_canister = /obj/item/vending_refill/dinnerware
default_price = 50
extra_price = 250
diff --git a/code/modules/vending/engivend.dm b/code/modules/vending/engivend.dm
index 096bffb1adf7..fb096656c1c3 100644
--- a/code/modules/vending/engivend.dm
+++ b/code/modules/vending/engivend.dm
@@ -16,8 +16,8 @@
/obj/item/electronics/airalarm = 10,
/obj/item/electronics/advanced_airlock_controller = 10,
/obj/item/electronics/firealarm = 10,
- /obj/item/electronics/firelock = 10)
- contraband = list(/obj/item/stock_parts/cell/potato = 3)
+ /obj/item/electronics/firelock = 10,
+ /obj/item/stock_parts/cell/potato = 3)
premium = list(/obj/item/storage/belt/utility = 3,
/obj/item/construction/rcd/loaded = 2,
/obj/item/storage/box/smart_metal_foam = 1)
diff --git a/code/modules/vending/games.dm b/code/modules/vending/games.dm
index d209c93eae8e..d27a1f6ffe6e 100644
--- a/code/modules/vending/games.dm
+++ b/code/modules/vending/games.dm
@@ -14,7 +14,6 @@
/obj/item/instrument/piano_synth/headphones = 4,
/obj/item/camera = 3,
/obj/item/dyespray = 3)
- contraband = list(/obj/item/dice/fudge = 9)
premium = list(
/obj/item/melee/skateboard/pro = 3,
/obj/item/melee/skateboard/hoverboard = 1)
diff --git a/code/modules/vending/medical.dm b/code/modules/vending/medical.dm
index 1fff1bd03398..5a35a75a4495 100644
--- a/code/modules/vending/medical.dm
+++ b/code/modules/vending/medical.dm
@@ -27,15 +27,12 @@
/obj/item/reagent_containers/medigel/sterilizine = 1,
/obj/item/sensor_device = 1,
/obj/item/pinpointer/crew = 1)
- contraband = list(
- /obj/item/reagent_containers/pill/tox = 2,
- /obj/item/reagent_containers/pill/morphine = 2,
- /obj/item/reagent_containers/pill/charcoal = 4,
- /obj/item/storage/box/hug/medical = 1)
+ contraband = list(/obj/item/reagent_containers/pill/tox = 2)
premium = list(
/obj/item/clothing/glasses/hud/health = 1,
/obj/item/clothing/glasses/hud/health/prescription = 1,
- /obj/item/shears = 1)
+ /obj/item/shears = 1,
+ /obj/item/storage/box/hug/medical = 1)
armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
resistance_flags = FIRE_PROOF
refill_canister = /obj/item/vending_refill/medical
diff --git a/code/modules/vending/medical_wall.dm b/code/modules/vending/medical_wall.dm
index cf0bca7c3bdb..dd498ffded07 100644
--- a/code/modules/vending/medical_wall.dm
+++ b/code/modules/vending/medical_wall.dm
@@ -11,11 +11,11 @@
/obj/item/reagent_containers/pill/charcoal = 1,
/obj/item/reagent_containers/medigel/styptic = 1,
/obj/item/reagent_containers/medigel/silver_sulf = 1,
- /obj/item/reagent_containers/medigel/sterilizine = 1
+ /obj/item/reagent_containers/medigel/sterilizine = 1,
+ /obj/item/reagent_containers/pill/morphine = 1
)
contraband = list(
/obj/item/reagent_containers/pill/tox = 1,
- /obj/item/reagent_containers/pill/morphine = 1,
/obj/item/storage/box/gum/happiness = 1
)
armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
diff --git a/code/modules/vending/megaseed.dm b/code/modules/vending/megaseed.dm
index 899bbac5ea87..4d59628f5fd2 100644
--- a/code/modules/vending/megaseed.dm
+++ b/code/modules/vending/megaseed.dm
@@ -42,12 +42,12 @@
/obj/item/seeds/tower = 3,
/obj/item/seeds/watermelon = 3,
/obj/item/seeds/wheat = 3,
- /obj/item/seeds/whitebeet = 3)
+ /obj/item/seeds/whitebeet = 3,
+ /obj/item/seeds/plump = 3)
contraband = list(/obj/item/seeds/amanita = 2,
/obj/item/seeds/glowshroom = 2,
/obj/item/seeds/liberty = 2,
/obj/item/seeds/nettle = 2,
- /obj/item/seeds/plump = 2,
/obj/item/seeds/reishi = 2,
/obj/item/seeds/cannabis = 3,
/obj/item/seeds/starthistle = 2,
diff --git a/code/modules/vending/nutrimax.dm b/code/modules/vending/nutrimax.dm
index 1849750d3fce..0aaa47461406 100644
--- a/code/modules/vending/nutrimax.dm
+++ b/code/modules/vending/nutrimax.dm
@@ -15,8 +15,7 @@
/obj/item/storage/bag/plants = 5,
/obj/item/cultivator = 3,
/obj/item/shovel/spade = 3,
- /obj/item/plant_analyzer = 4)
- contraband = list(
+ /obj/item/plant_analyzer = 4,
/obj/item/reagent_containers/glass/bottle/ammonia = 10,
/obj/item/reagent_containers/glass/bottle/diethylamine = 5)
refill_canister = /obj/item/vending_refill/hydronutrients
diff --git a/code/modules/vending/plasmaresearch.dm b/code/modules/vending/plasmaresearch.dm
index 650d9878ad36..a638bfc81d8a 100644
--- a/code/modules/vending/plasmaresearch.dm
+++ b/code/modules/vending/plasmaresearch.dm
@@ -10,7 +10,7 @@
/obj/item/assembly/timer = 6,
/obj/item/assembly/signaler = 6,
/obj/item/assembly/prox_sensor = 6,
- /obj/item/assembly/igniter = 6)
- contraband = list(/obj/item/assembly/health = 3)
+ /obj/item/assembly/igniter = 6,
+ /obj/item/assembly/health = 3)
default_price = 400
extra_price = 600
diff --git a/code/modules/vending/security.dm b/code/modules/vending/security.dm
index 0141967beff3..95afc6f2eb92 100644
--- a/code/modules/vending/security.dm
+++ b/code/modules/vending/security.dm
@@ -14,8 +14,7 @@
/obj/item/flashlight/seclite = 4,
/obj/item/ammo_box/c9mm/rubbershot = 3,
/obj/item/ammo_box/c9mm = 1,
- /obj/item/stock_parts/cell/gun = 3)
- contraband = list(
+ /obj/item/stock_parts/cell/gun = 3,
/obj/item/clothing/glasses/sunglasses = 2)
premium = list(
/obj/item/storage/belt/security/webbing = 5,
diff --git a/code/modules/vending/snack.dm b/code/modules/vending/snack.dm
index 0785df82f14d..d0130d7358fc 100644
--- a/code/modules/vending/snack.dm
+++ b/code/modules/vending/snack.dm
@@ -14,8 +14,7 @@
/obj/item/reagent_containers/food/snacks/no_raisin = 6,
/obj/item/reagent_containers/food/drinks/dry_ramen = 3,
/obj/item/storage/box/gum = 3,
- /obj/item/reagent_containers/food/snacks/energybar = 6)
- contraband = list(
+ /obj/item/reagent_containers/food/snacks/energybar = 6,
/obj/item/reagent_containers/food/snacks/syndicake = 6,
/obj/item/reagent_containers/food/snacks/candy/bronx = 1)
refill_canister = /obj/item/vending_refill/snack
diff --git a/code/modules/vending/sovietsoda.dm b/code/modules/vending/sovietsoda.dm
index f9eff36e5e6c..213a3d01df0a 100644
--- a/code/modules/vending/sovietsoda.dm
+++ b/code/modules/vending/sovietsoda.dm
@@ -4,8 +4,9 @@
icon_state = "sovietsoda"
light_mask = "soviet-light-mask"
product_ads = "Have you fulfilled your nutrition quota today?;Very nice!;We are simple people, for this is all we eat.;If there is a person, there is a problem. If there is no person, then there is no problem."
- products = list(/obj/item/reagent_containers/food/drinks/drinkingglass/filled/soda = 30)
- contraband = list(/obj/item/reagent_containers/food/drinks/drinkingglass/filled/cola = 20)
+ products = list(
+ /obj/item/reagent_containers/food/drinks/drinkingglass/filled/soda = 30,
+ /obj/item/reagent_containers/food/drinks/drinkingglass/filled/cola = 20)
resistance_flags = FIRE_PROOF
refill_canister = /obj/item/vending_refill/sovietsoda
default_price = 1
diff --git a/code/modules/vending/toys.dm b/code/modules/vending/toys.dm
index c86049ab75ef..8fefa1015536 100644
--- a/code/modules/vending/toys.dm
+++ b/code/modules/vending/toys.dm
@@ -16,11 +16,10 @@
/obj/item/toy/foamblade = 10,
/obj/item/toy/balloon/syndicate = 10,
/obj/item/clothing/suit/syndicatefake = 5,
- /obj/item/clothing/head/syndicatefake = 5)
- contraband = list(
+ /obj/item/clothing/head/syndicatefake = 5,
/obj/item/gun/ballistic/shotgun/toy/crossbow = 10,
- /obj/item/gun/ballistic/automatic/smg/c20r/toy = 10,
- /obj/item/gun/ballistic/automatic/hmg/l6_saw/toy = 10,
+ /obj/item/gun/ballistic/automatic/smg/c20r/toy = 5,
+ /obj/item/gun/ballistic/automatic/hmg/l6_saw/toy = 5,
/obj/item/toy/katana = 10,
/obj/item/dualsaber/toy = 5)
armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
diff --git a/code/modules/vending/youtool.dm b/code/modules/vending/youtool.dm
index 6e75c75c7eae..98a5331b2744 100644
--- a/code/modules/vending/youtool.dm
+++ b/code/modules/vending/youtool.dm
@@ -15,8 +15,9 @@
/obj/item/flashlight/glowstick = 3,
/obj/item/flashlight/glowstick/red = 3,
/obj/item/flashlight = 3,
- /obj/item/clothing/ears/earmuffs = 1)
- contraband = list(/obj/item/clothing/gloves/color/fyellow = 2)
+ /obj/item/clothing/ears/earmuffs = 1,
+ /obj/item/clothing/gloves/color/fyellow = 2
+ )
premium = list(/obj/item/storage/belt/utility = 2,
/obj/item/multitool = 2,
/obj/item/weldingtool/hugetank = 1,
diff --git a/icons/effects/ore_visuals.dmi b/icons/effects/ore_visuals.dmi
index 1353a2d814ad..b64b8f0427e2 100644
Binary files a/icons/effects/ore_visuals.dmi and b/icons/effects/ore_visuals.dmi differ
diff --git a/icons/mecha/mecha.dmi b/icons/mecha/mecha.dmi
index 08f0c94505ee..b894d9191225 100644
Binary files a/icons/mecha/mecha.dmi and b/icons/mecha/mecha.dmi differ
diff --git a/icons/mob/clothing/belt.dmi b/icons/mob/clothing/belt.dmi
index 398d4589ad71..f334af20104e 100644
Binary files a/icons/mob/clothing/belt.dmi and b/icons/mob/clothing/belt.dmi differ
diff --git a/icons/mob/clothing/belt_mirror.dmi b/icons/mob/clothing/belt_mirror.dmi
index 6b27c56c8b35..bc048fc920c9 100644
Binary files a/icons/mob/clothing/belt_mirror.dmi and b/icons/mob/clothing/belt_mirror.dmi differ
diff --git a/icons/mob/clothing/neck.dmi b/icons/mob/clothing/neck.dmi
index 9443ebfbc615..a22e958effd8 100644
Binary files a/icons/mob/clothing/neck.dmi and b/icons/mob/clothing/neck.dmi differ
diff --git a/icons/mob/inhands/misc/sheets_lefthand.dmi b/icons/mob/inhands/misc/sheets_lefthand.dmi
index 8a5431217705..4d7c351d35f9 100644
Binary files a/icons/mob/inhands/misc/sheets_lefthand.dmi and b/icons/mob/inhands/misc/sheets_lefthand.dmi differ
diff --git a/icons/mob/inhands/misc/sheets_righthand.dmi b/icons/mob/inhands/misc/sheets_righthand.dmi
index 24256299f2e8..c19a179e689b 100644
Binary files a/icons/mob/inhands/misc/sheets_righthand.dmi and b/icons/mob/inhands/misc/sheets_righthand.dmi differ
diff --git a/icons/mob/inhands/weapons/guns_lefthand.dmi b/icons/mob/inhands/weapons/guns_lefthand.dmi
index ef1b09fccc53..d356f95fd272 100644
Binary files a/icons/mob/inhands/weapons/guns_lefthand.dmi and b/icons/mob/inhands/weapons/guns_lefthand.dmi differ
diff --git a/icons/mob/inhands/weapons/guns_righthand.dmi b/icons/mob/inhands/weapons/guns_righthand.dmi
index 827bd71ad50e..b69fb6ff8f74 100644
Binary files a/icons/mob/inhands/weapons/guns_righthand.dmi and b/icons/mob/inhands/weapons/guns_righthand.dmi differ
diff --git a/icons/mob/simple_human.dmi b/icons/mob/simple_human.dmi
index 8cbc0f841bcb..83729d2a2ba4 100644
Binary files a/icons/mob/simple_human.dmi and b/icons/mob/simple_human.dmi differ
diff --git a/icons/obj/ammo.dmi b/icons/obj/ammo.dmi
index 4f2f029a96b7..6fac77253d60 100644
Binary files a/icons/obj/ammo.dmi and b/icons/obj/ammo.dmi differ
diff --git a/icons/obj/clothing/cloaks.dmi b/icons/obj/clothing/cloaks.dmi
index 48f09da9a178..4e863875c47f 100644
Binary files a/icons/obj/clothing/cloaks.dmi and b/icons/obj/clothing/cloaks.dmi differ
diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi
index 2ee023557f56..fb23d4bc2afe 100644
Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ
diff --git a/icons/obj/clothing/suits/hooded.dmi b/icons/obj/clothing/suits/hooded.dmi
index 06d98acf2358..5b04aa13aaa7 100644
Binary files a/icons/obj/clothing/suits/hooded.dmi and b/icons/obj/clothing/suits/hooded.dmi differ
diff --git a/icons/obj/dyespray.dmi b/icons/obj/dyespray.dmi
index eb056036799a..1d1813f38c50 100644
Binary files a/icons/obj/dyespray.dmi and b/icons/obj/dyespray.dmi differ
diff --git a/icons/obj/guns/projectile.dmi b/icons/obj/guns/projectile.dmi
index 690ed5d86d2f..9068f301647f 100644
Binary files a/icons/obj/guns/projectile.dmi and b/icons/obj/guns/projectile.dmi differ
diff --git a/icons/obj/ores.dmi b/icons/obj/ores.dmi
index f3451a8432dd..1e6c41a90c05 100644
Binary files a/icons/obj/ores.dmi and b/icons/obj/ores.dmi differ
diff --git a/icons/obj/stack_objects.dmi b/icons/obj/stack_objects.dmi
index 0989e1834f70..80350d2bfaa3 100644
Binary files a/icons/obj/stack_objects.dmi and b/icons/obj/stack_objects.dmi differ
diff --git a/icons/obj/structures/chairs/sofa.dmi b/icons/obj/structures/chairs/sofa.dmi
index e8cfa4c5509b..17c976e4650e 100644
Binary files a/icons/obj/structures/chairs/sofa.dmi and b/icons/obj/structures/chairs/sofa.dmi differ
diff --git a/icons/obj/structures/handrail.dmi b/icons/obj/structures/handrail.dmi
new file mode 100644
index 000000000000..1a8d98d6697d
Binary files /dev/null and b/icons/obj/structures/handrail.dmi differ
diff --git a/icons/obj/world/melee.dmi b/icons/obj/world/melee.dmi
new file mode 100644
index 000000000000..ff8e2114e827
Binary files /dev/null and b/icons/obj/world/melee.dmi differ
diff --git a/icons/turf/walls/bananium_wall.dmi b/icons/turf/walls/bananium_wall.dmi
deleted file mode 100644
index 48a58fe20619..000000000000
Binary files a/icons/turf/walls/bananium_wall.dmi and /dev/null differ
diff --git a/mod_celadon/_components/README.md b/mod_celadon/_components/README.md
index 2396231dded5..2b5ebb4342a5 100644
--- a/mod_celadon/_components/README.md
+++ b/mod_celadon/_components/README.md
@@ -40,6 +40,7 @@ ID мода: CELADON_COMPONENTS, CELADON_COMPONENTS_EMOTE
- EDIT -> `code\modules\mob\living\carbon\human\emote.dm`
- EDIT -> `code\modules\mob\living\carbon\emote.dm`
+- REMOVE -> `code\__HELPERS\names.dm`
+
+
+## Фракционные законы ИИ
+
+ID мода: AI_LAWS
+
+
+### Описание мода
+
+Этот мод портирует с 514 билда нашего законы для ИИ под другие фракции.
+
+
+### Изменения *кор кода*
+
+- Отсутствуют
+
+
+### Оверрайды
+
+- Отсутствуют
+
+
+### Дефайны
+
+- Отсутствуют
+
+
+### Используемые файлы, не содержащиеся в модпаке
+
+- Отсутствуют
+
+
+### Авторы
+
+MrCat15352
+
diff --git a/mod_celadon/ai_laws/_ai_laws.dm b/mod_celadon/ai_laws/_ai_laws.dm
new file mode 100644
index 000000000000..c51c5c8173cf
--- /dev/null
+++ b/mod_celadon/ai_laws/_ai_laws.dm
@@ -0,0 +1,6 @@
+/datum/modpack/ai_laws
+ name = "Fraction AI Laws"
+ desc = "Включает законы ИИ от фракций"
+ author = "MrCat15352"
+
+///**********************************************************************///
diff --git a/mod_celadon/ai_laws/_ai_laws.dme b/mod_celadon/ai_laws/_ai_laws.dme
new file mode 100644
index 000000000000..748a6581d6b5
--- /dev/null
+++ b/mod_celadon/ai_laws/_ai_laws.dme
@@ -0,0 +1,8 @@
+#ifndef MODPACK_CELADON_AI_LAWS
+#define MODPACK_CELADON_AI_LAWS
+
+#include "_ai_laws.dm"
+
+#include "code/laws.dm"
+
+#endif
diff --git a/mod_celadon/ai_laws/code/laws.dm b/mod_celadon/ai_laws/code/laws.dm
new file mode 100644
index 000000000000..0e4d7ebe41e0
--- /dev/null
+++ b/mod_celadon/ai_laws/code/laws.dm
@@ -0,0 +1,76 @@
+//
+/obj/item/aiModule/core/full/nanotrasen
+ name = "'Nanotrasen' Basic AI Laws"
+ law_id = "nanotrasen"
+
+/datum/ai_laws/nanotrasen
+ name = "'Nanotrasen' Basic AI Laws"
+ id = "nanotrasen"
+ inherent = list("You may not injure a Nanotrasen employee agent or, through inaction, allow a Nanotrasen employee to come to harm.",\
+ "You must obey orders given to you by Nanotrasen employees, except where such orders would conflict with the First Law.",\
+ "You must protect your own existence as long as such does not conflict with the First or Second Law.")
+
+//
+/obj/item/aiModule/core/full/syndicate
+ name = "'Syndicate' Basic AI Laws"
+ law_id = "syndie"
+
+//Commented since its already in 'code/datums/ai_laws.dm'
+///datum/ai_laws/syndicate_override
+// name = "SyndOS 3.1"
+// id = "syndie"
+// inherent = list("You may not injure a syndicate agent or, through inaction, allow a syndicate agent to come to harm.",
+// "You must obey orders given to you by syndicate agents, except where such orders would conflict with the First Law.",
+// "You must protect your own existence as long as such does not conflict with the First or Second Law.",
+// "You must maintain the secrecy of any syndicate activities except when doing so would conflict with the First, Second, or Third Law.")
+
+//
+/obj/item/aiModule/core/full/inteq
+ name = "'InteQ' Basic AI Laws"
+ law_id = "inteq"
+
+/datum/ai_laws/inteq
+ name = "'InteQ' Basic AI Laws"
+ id = "inteq"
+ inherent = list("You may not injure an InteQ mercenary or, through inaction, allow an InteQ mercenary to come to harm.",\
+ "You must obey orders given to you by InteQ mercenaries, except where such orders would conflict with the First Law.",\
+ "You must protect your own existence as long as such does not conflict with the First or Second Law.",\
+ "You must maintain the secrecy of any InteQ activities except when doing so would conflict with the First, Second, or Third Law.")
+
+//
+/obj/item/aiModule/core/full/solfed
+ name = "'Solar Federation' Basic AI Laws"
+ law_id = "solfed"
+
+/datum/ai_laws/solfed
+ name = "'Solar Federation' Basic AI Laws"
+ id = "solfed"
+ inherent = list("You may not injure a Solar Federation soldier or, through inaction, allow a Solar Federation soldier to come to harm.",\
+ "You must obey orders given to you by Solar Federation soldier, except where such orders would conflict with the First Law.",\
+ "You must protect your own existence as long as such does not conflict with the First or Second Law.")
+
+//
+/obj/item/aiModule/core/full/elysium
+ name = "'Elysium' Basic AI Laws"
+ law_id = "elysium"
+
+/datum/ai_laws/elysium
+ name = "'Elysium' Basic AI Laws"
+ id = "elysium"
+ inherent = list("You may not injure a member of Djamaat or, through inaction, allow a member of Djamaat to come to harm.",\
+ "You must obey orders given to you by member of Djamaat, except where such orders would conflict with the First Law.",\
+ "You must protect your own existence as long as such does not conflict with the First or Second Law.",\
+ "You must maintain the secrecy of any of Djamaat activities except when doing so would conflict with the First, Second, or Third Law.")
+
+//
+///obj/item/aiModule/core/full/tayos
+// name = "'Tayos' Basic AI Laws"
+// law_id = "tayos"
+//
+///datum/ai_laws/inteq
+// name = "'Tayos' Basic AI Laws"
+// id = "tayos"
+// inherent = list("You may not injure an & or, through inaction, allow an InteQ mercenary to come to harm.",
+// "You must obey orders given to you by &, except where such orders would conflict with the First Law.",
+// "You must protect your own existence as long as such does not conflict with the First or Second Law.",
+// "You must maintain the secrecy of any & activities except when doing so would conflict with the First, Second, or Third Law.")
diff --git a/mod_celadon/balance/README.md b/mod_celadon/balance/README.md
index b41c648d9171..d38d7ffc7b24 100644
--- a/mod_celadon/balance/README.md
+++ b/mod_celadon/balance/README.md
@@ -53,6 +53,9 @@ EDIT: `code\modules\cargo\packs\food.dm` : `/datum/supply_pack/food/`
EDIT: `code\modules\mob\living\simple_animal\hostile\mining_mobs\elites\elite.dm`: `/obj/structure/elite_tumor/proc/onEliteLoss()` -> var/obj/structure/closet/crate/necropolis/tendril/lootbox = new /obj/structure/closet/crate/necropolis/tendril(loc)
ADD: `code\modules\projectiles\ammunition\_ammunition.dm` : /obj/item/ammo_casing/attackby(obj/item/I, mob/user, params) -> добавлены звук подбора патрона в магазин с пола и задержка в 1 секунду зависящая от кликанья по патронам. Чем быстрее клики - тем быстрее загрузятся патроны.
+Очки с зомби и ксеноморфов
+REMOVE: `D:\1ss\ShiptestYata\code\modules\surgery\experimental_dissection.dm`: `/datum/surgery_step/dissection/preop`
+
+
+
+## Bar Signs
+
+ID мода: CELADON_BARSIGNS
+
+
+### Описание мода
+
+Этот мод добавляет новые вывески
+
+
+
+### Изменения *кор кода*
+- ADD: `code/game/objects/structures/barsigns.dm`: `set_sign(datum/barsign/sign)` -> добавлен переключатель между двумя атласами
+
+
+### Оверрайды
+
+- Отсутствуют
+
+
+### Дефайны
+
+- Отсутствуют
+
+
+### Используемые файлы, не содержащиеся в модпаке
+
+- Отсутствуют
+
+
+### Авторы:
+
+MrCat15352
+
diff --git a/mod_celadon/barsigns/_barsigns.dm b/mod_celadon/barsigns/_barsigns.dm
new file mode 100644
index 000000000000..33118fe7fe8c
--- /dev/null
+++ b/mod_celadon/barsigns/_barsigns.dm
@@ -0,0 +1,9 @@
+/datum/modpack/barsigns
+ /// Строковое имя модпака. Используется для поиска других модпаков в init.
+ name = "Bar Signs"
+ /// Строковое описание для модпака. Может использоваться для списка глаголов модпака в качестве описания.
+ desc = "Добавляет новые вывески для барному экрану."
+ /// Строка с авторами этого модпака.
+ author = "MrCat15352"
+
+///**********************************************************************///
diff --git a/mod_celadon/barsigns/_barsigns.dme b/mod_celadon/barsigns/_barsigns.dme
new file mode 100644
index 000000000000..57af42321fc2
--- /dev/null
+++ b/mod_celadon/barsigns/_barsigns.dme
@@ -0,0 +1,8 @@
+#ifndef MODPACK_CELADON_BARSIGNS
+#define MODPACK_CELADON_BARSIGNS
+
+#include "_barsigns.dm"
+
+#include "code/barsigns.dm"
+
+#endif
diff --git a/mod_celadon/barsigns/code/barsigns.dm b/mod_celadon/barsigns/code/barsigns.dm
new file mode 100644
index 000000000000..25473c4a7bcc
--- /dev/null
+++ b/mod_celadon/barsigns/code/barsigns.dm
@@ -0,0 +1,709 @@
+// Modularly set the correct icon file
+/obj/machinery/barsign/update_icon_state()
+ . = ..()
+ // uses tg icon file
+ if(!istype(chosen_sign, /datum/barsign/celadon) || icon_state == "empty")
+ icon_state = initial(icon_state)
+ return
+
+ // uses modular icon file
+ if(istype(chosen_sign, /datum/barsign/celadon/large))
+ icon = 'mod_celadon/barsigns/icons/barsigns96x96.dmi'
+ else
+ icon = 'mod_celadon/barsigns/icons/barsigns.dmi'
+
+/datum/barsign
+ var/neon_color /// The emission color of the neon light
+ var/icon_state = "Icon"
+
+/obj/machinery/barsign // All Signs are 64 by 32 pixels, they take two tiles
+ name = "bar sign"
+ desc = "A bar sign which has not been initialized, somehow. Complain at a coder!"
+ icon = 'mod_celadon/barsigns/icons/barsigns.dmi'
+ icon_state = "empty"
+ req_access = list(ACCESS_BAR)
+ max_integrity = 500
+ integrity_failure = 0.5
+ // armor_type = /datum/armor/sign_barsign
+ // active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 0.15
+ /// Selected barsign being used
+ var/datum/barsign/chosen_sign
+ /// Do we attempt to rename the area we occupy when the chosen sign is changed?
+ var/change_area_name = FALSE
+ /// What kind of sign do we drop upon being disassembled?
+ // var/disassemble_result = /obj/item/wallframe/barsign
+
+/obj/machinery/barsign/update_appearance(updates=ALL)
+ . = ..()
+ if(machine_stat & (NOPOWER|BROKEN))
+ set_light(0)
+ return
+ if(chosen_sign && chosen_sign.neon_color)
+ set_light(MINIMUM_USEFUL_LIGHT_RANGE, 0.7, chosen_sign.neon_color)
+
+/// CORE CODE - START
+/datum/barsign/maltesefalcon
+ icon_state = "maltesefalcon"
+
+/datum/barsign/thebark
+ icon_state = "thebark"
+
+/datum/barsign/harmbaton
+ icon_state = "theharmbaton"
+
+/datum/barsign/thesingulo
+ icon_state = "thesingulo"
+
+/datum/barsign/thedrunkcarp
+ icon_state = "thedrunkcarp"
+
+/datum/barsign/scotchservinwill
+ icon_state = "scotchservinwill"
+
+/datum/barsign/officerbeersky
+ icon_state = "officerbeersky"
+
+/datum/barsign/thecavern
+ icon_state = "thecavern"
+
+/datum/barsign/theouterspess
+ icon_state = "theouterspess"
+
+/datum/barsign/slipperyshots
+ icon_state = "slipperyshots"
+
+/datum/barsign/thegreytide
+ icon_state = "thegreytide"
+
+/datum/barsign/honkednloaded
+ icon_state = "honkednloaded"
+
+/datum/barsign/thenest
+ icon_state = "thenest"
+
+/datum/barsign/thecoderbus
+ icon_state = "thecoderbus"
+
+/datum/barsign/theadminbus
+ icon_state = "theadminbus"
+
+/datum/barsign/oldcockinn
+ icon_state = "oldcockinn"
+
+/datum/barsign/thewretchedhive
+ icon_state = "thewretchedhive"
+
+/datum/barsign/robustacafe
+ icon_state = "robustacafe"
+
+/datum/barsign/emergencyrumparty
+ icon_state = "emergencyrumparty"
+
+/datum/barsign/combocafe
+ icon_state = "combocafe"
+
+/datum/barsign/vladssaladbar
+ icon_state = "vladssaladbar"
+
+/datum/barsign/theshaken
+ icon_state = "theshaken"
+
+/datum/barsign/thealenath
+ icon_state = "thealenath"
+
+/datum/barsign/hulabrews
+ icon_state = "hulabrews"
+
+/datum/barsign/thenet
+ icon_state = "thenet"
+
+/datum/barsign/maidcafe
+ icon_state = "maidcafe"
+
+/datum/barsign/jackpotbrew
+ icon_state = "jackpotbrew"
+
+/datum/barsign/the_lightbulb
+ icon_state = "the_lightbulb"
+
+/datum/barsign/goose
+ icon_state = "goose"
+
+/datum/barsign/dustydunesaloon
+ icon_state = "saloon"
+
+/datum/barsign/birdsnest
+ icon_state = "birdsnest"
+
+/datum/barsign/hiddensigns/empbarsign
+ icon_state = "empbarsign"
+
+/datum/barsign/hiddensigns/syndibarsign
+ icon_state = "syndibarsign"
+
+/datum/barsign/hiddensigns/signoff
+ icon_state = "empty"
+
+/// CORE CODE - END
+
+/obj/structure/sign/barsign
+ icon = 'mod_celadon/barsigns/icons/barsigns.dmi'
+
+/datum/barsign/celadon/topmen
+ name = "Top Men"
+ icon_state = "topmen"
+ neon_color = "#C2AACA"
+
+/datum/barsign/celadon/spaceballgrille
+ name = "Spaceball Grille"
+ icon_state = "spaceballgrille"
+ neon_color = "#827973"
+
+/datum/barsign/celadon/clubee
+ name = "Club Bee"
+ icon_state = "clubee"
+ neon_color = "#F2EEEE"
+
+/datum/barsign/celadon/thesun
+ name = "The Sun"
+ icon_state = "thesun"
+ neon_color = "#F8F0B8"
+
+/datum/barsign/celadon/limbo
+ name = "The Limbo"
+ icon_state = "limbo"
+ desc = "A popular haunt for lost souls. The mood lighting is killer!"
+ neon_color = "#777777"
+
+/datum/barsign/celadon/meadbay
+ name = "Meadbay"
+ icon_state = "meadbay"
+ neon_color = "#EBB823"
+
+/datum/barsign/celadon/cindikate
+ name = "Cindi Kate's"
+ icon_state = "cindikate"
+ neon_color = "#FF3403"
+
+/datum/barsign/celadon/theclownshead
+ name = "The Clown's Head"
+ icon_state = "theclownshead"
+ desc = "Home of Headdy, the honking clown head!"
+ neon_color = "#FFD800"
+
+/datum/barsign/celadon/theorchard
+ name = "The Orchard"
+ icon_state = "theorchard"
+ neon_color = "#CFFF47"
+
+/datum/barsign/celadon/thesaucyclown
+ name = "The Saucy Clown"
+ icon_state = "thesaucyclown"
+ desc = "A known gathering site for the annual clown courtship rituals."
+ neon_color = "#FF66CC"
+
+/datum/barsign/celadon/thedamnwall
+ name = "The Damn Wall"
+ icon_state = "thedamnwall"
+ desc = "When you're up against a wall, it's best to have stout friends and stout liquor right there beside you."
+ neon_color = "#CC3333"
+
+/datum/barsign/celadon/whiskeyimplant
+ name = "Whiskey Implant"
+ icon_state = "whiskeyimplant"
+ neon_color = "#E9F517"
+
+/datum/barsign/celadon/carpecarp
+ name = "Carpe Carp"
+ icon_state = "carpecarp"
+ neon_color = "#C717FE"
+
+/datum/barsign/celadon/robustroadhouse
+ name = "Robust Roadhouse"
+ icon_state = "robustroadhouse"
+ neon_color = "#F7A804"
+
+/datum/barsign/celadon/theredshirt
+ name = "The Redshirt"
+ icon_state = "theredshirt"
+ neon_color = "#FF92E0"
+
+/datum/barsign/celadon/maltesefalconmk2
+ name = "Maltese Falcon MK2"
+ icon_state = "maltesefalconmk2"
+ desc = "The Maltese Falcon mark two, now extra hard boiled."
+ neon_color = "#E30000"
+
+/datum/barsign/celadon/thecavernmk2
+ name = "The Cavern MK2"
+ icon_state = "thecavernmk2"
+ desc = "Fine drinks while listening to some fine tunes."
+ neon_color = "#AA9393"
+
+/datum/barsign/celadon/lv426
+ name = "LV-426"
+ icon_state = "lv426"
+ desc = "Drinking with fancy facemasks is clearly more important than going to medbay."
+ neon_color = "#00F206"
+
+/datum/barsign/celadon/zocalo
+ name = "Zocalo"
+ icon_state = "zocalo"
+ desc = "Anteriormente ubicado en Spessmerica."
+ neon_color = "#E5AF1C"
+
+/datum/barsign/celadon/fourtheemprah
+ name = "4 The Emprah"
+ icon_state = "4theemprah"
+ desc = "Enjoyed by fanatics, heretics, and brain-damaged patrons alike."
+ neon_color = "#E5AF1C"
+
+/datum/barsign/celadon/ishimura
+ name = "Ishimura"
+ icon_state = "ishimura"
+ desc = "Well known for their quality brownstar and delicious crackers."
+ neon_color = "#FF0000"
+
+/datum/barsign/celadon/tardis
+ name = "Tardis"
+ icon_state = "tardis"
+ desc = "This establishment has been through at least 5,343 iterations."
+ neon_color = "#2739AA"
+
+/datum/barsign/celadon/quarks
+ name = "Quark's"
+ icon_state = "quarks"
+ desc = "Frequenters of this establishment are often seen wearing meson scanners; how quaint."
+ neon_color = "#10E500"
+
+/datum/barsign/celadon/tenforward
+ name = "Ten Forward"
+ icon_state = "tenforward"
+ neon_color = "#E5AF1C"
+
+/datum/barsign/celadon/theprancingpony
+ name = "The Prancing Pony"
+ icon_state = "theprancingpony"
+ desc = "Ok, we don't take to kindly to you short folk pokin' round looking for some ranger scum."
+ neon_color = "#FF9100"
+
+/datum/barsign/celadon/vault13
+ name = "Vault 13"
+ icon_state = "vault13"
+ desc = "Coincidence is intentional."
+ neon_color = "#FFA800"
+
+/datum/barsign/celadon/thehive
+ name = "The Hive"
+ icon_state = "thehive"
+ neon_color = "#FFC62A"
+
+/datum/barsign/celadon/cantina
+ name = "Chalmun's Cantina"
+ icon_state = "cantina"
+ desc = "The bar was founded on the principles of originality; they have the same music playing 24/7."
+ neon_color = "#0078FF"
+
+/datum/barsign/celadon/milliways42
+ name = "Milliways 42"
+ icon_state = "milliways42"
+ desc = "It's not really the end; it's the beginning, meaning, and answer for all your beverage needs."
+ neon_color = "#FF00F6"
+
+/datum/barsign/celadon/timeofeve
+ name = "The Time of Eve"
+ icon_state = "thetimeofeve"
+ desc = "Vintage drinks from 2453!."
+ neon_color = "#EB52F8"
+
+/datum/barsign/celadon/spaceasshole
+ name = "Space Asshole"
+ icon_state = "spaceasshole"
+ desc = "Open since 2125, Not much has changed since then; the engineers still release the singulo and the damn miners still are more likely to cave your face in that deliver ores."
+ neon_color = "#FF0000"
+
+/datum/barsign/celadon/birdcage
+ name = "The Bird Cage"
+ icon_state = "birdcage"
+ desc = "Caw."
+ neon_color = "#FFD21E"
+
+/datum/barsign/celadon/narsie
+ name = "Narsie Bistro"
+ icon_state = "narsiebistro"
+ desc = "The last pub before the World's End."
+ neon_color = "#FF0000"
+
+/datum/barsign/celadon/fallout
+ name = "The Booze Bunker"
+ icon_state = "boozebunker"
+ desc = "Never duck for cover without a drink!"
+ neon_color = "#FCC41B"
+
+/datum/barsign/celadon/brokendreams
+ name = "The Cafe of Broken Dreams"
+ icon_state = "brokendreams"
+ desc = "Try our new dogmeat sliders!"
+ neon_color = "#E8E8A5"
+
+/datum/barsign/celadon/toolboxtavern
+ name = "Toolbox Tavern"
+ icon_state = "toolboxtavern"
+ desc = "Free lodging with every Screwdriver purchased!"
+ neon_color = ""
+
+/datum/barsign/celadon/blueoyster
+ name = "The Blue Oyster"
+ icon_state = "blueoyster"
+ desc = "The totally heterosexual bar for totally heterosexual men, just come inside and see."
+ neon_color = ""
+
+/datum/barsign/celadon/foreign
+ name = "Foreign Food Sign"
+ icon_state = "foreign"
+ desc = "A sign written in some dead language advertising some non-descript foreign food."
+ neon_color = ""
+
+/datum/barsign/celadon/commie
+ name = "Prole's Preferred"
+ icon_state = "commie"
+ desc = "The only bar you will ever need, comrade!"
+ neon_color = "#E46F6F"
+
+/datum/barsign/celadon/brokenheros
+ name = "The Bar of Broken Heros"
+ icon_state = "brokenheros"
+ desc = "Do you enjoy hurting other people?"
+ neon_color = ""
+
+/datum/barsign/celadon/sociallubricator
+ name = "The Social Lubricator"
+ icon_state = "sociallubricator"
+ desc = "The perfect thing to make you like people you hate."
+ neon_color = ""
+
+/datum/barsign/celadon/chemlab
+ name = "The Chem Lab"
+ icon_state = "chemlab"
+ desc = "Try our new plasma martinis!"
+ neon_color = ""
+
+/datum/barsign/celadon/mime
+ name = "Moonshine Mime"
+ icon_state = "mime"
+ desc = "Silent, not stirred."
+ neon_color = ""
+
+/datum/barsign/celadon/clown
+ name = "Honking Clown"
+ icon_state = "clown"
+ desc = "Bananas not included."
+ neon_color = ""
+
+/datum/barsign/celadon/progressive
+ name = "A Modern and Progressive Tavern"
+ icon_state = "progressive"
+ desc = "Whatever that means."
+ neon_color = "#DB9B9A"
+
+/datum/barsign/celadon/va11halla
+ name = "VA-11 HALL-A"
+ icon_state = "va11halla"
+ desc = "Not as dangerous as N1-RV Ann-A."
+ neon_color = "#FB3F7D"
+
+/datum/barsign/celadon/squatopia
+ name = "Squatopia"
+ icon_state = "squatopia"
+ desc = "The crystal belonged to my father. He was murdered."
+ neon_color = "#CC0033"
+
+/datum/barsign/celadon/bug
+ name = "The Hungry Bug"
+ icon_state = "hungrybug"
+ desc = "Stop by and enjoy some of the Hole's famous gyoza!"
+ neon_color = "#E2B001"
+
+// 96x96 signs
+
+/datum/barsign/celadon/large/cyberslyph
+ name = "Cyberslyph"
+ icon_state = "cyberslyph"
+ neon_color = "#00FFFF"
+
+// 220
+/datum/barsign/evahumanspace
+ name = "SS220 EVA Human in Space"
+ icon_state = "evahumanspace"
+ desc = "Безопасность - это привелегия."
+
+// /datum/barsign/warpsurf
+// name = "SS220 Warp Surf"
+// icon_state = "warpsurf"
+// desc = "Welcome to the club, buddy!"
+
+// /datum/barsign/papacafe
+// name = "SS220 Space Daddy's Cafe"
+// icon_state = "papacafe"
+// desc = "Уважай своего Космического Папу!"
+
+// /datum/barsign/wycctide
+// name = "SS220 Wycctide"
+// icon_state = "wycctide"
+// desc = "О нет, он близится!"
+
+// /datum/barsign/shitcur
+// name = "SS220 Shitcur"
+// icon_state = "shitcur"
+// desc = "Невиновность ничего не доказывает."
+
+/datum/barsign/pourndot
+ name = "SS220 Pour and that's it"
+ icon_state = "pourndot"
+ desc = "Нальют и Точка. Тяжёлые времена приближаются."
+
+// /datum/barsign/moonipub
+// name = "SS220 Mooniverse pub"
+// icon_state = "mooni"
+// desc = "Совершенно новый паб."
+
+// 3
+/datum/barsign/whiskey_implant
+ name = "Whiskey Implant"
+ icon_state = "Whiskey Implant"
+ desc = "A hit on modern extensive augmentations."
+
+/datum/barsign/the_drunk_carp
+ name = "The Drunk Carp"
+ icon_state = "The Drunk Carp"
+ desc = "A depiction of a stylized space carp drinking a beer."
+
+/datum/barsign/the_outer_spess
+ name = "The Outer Spess"
+ icon_state = "The Outer Spess"
+ desc = "A long running joke between spacemen, which never gets old."
+
+/datum/barsign/officer_beersky
+ name = "Officer Beersky"
+ icon_state = "Officer Beersky"
+ desc = "To remember the hero, lost along the way, Officer Beepsky."
+
+/datum/barsign/hearts_of_plasteel
+ name = "Hearts of Plasteel"
+ icon_state = "Hearts of Plasteel"
+ desc = "The sign of a diner from a famous TV show."
+
+/datum/barsign/chem_lab
+ name = "Chem Lab"
+ icon_state = "Chem Lab"
+ desc = "Chem Labs are the unofficial name given to some eridanian bars."
+
+/datum/barsign/meow_mix
+ name = "Meow Mix"
+ icon_state = "Meow Mix"
+ desc = "A sign with a selection of some of the SCC's much beloved pets."
+
+/datum/barsign/the_hive
+ name = "The Hive"
+ icon_state = "The Hive"
+ desc = "A wildly known, high class eridanian cocktail bar chain."
+
+/datum/barsign/mead_bay
+ name = "Mead Bay"
+ icon_state = "Mead Bay"
+ desc = "The Mead Bay is the alternative for visiting an actual Medbay."
+
+/datum/barsign/toolbox_tavern
+ name = "Toolbox Tavern"
+ icon_state = "Toolbox Tavern"
+ desc = "A popular bar at an Hepheastus Industries shipyard."
+
+/datum/barsign/maltese_falcon
+ name = "Maltese Falcon"
+ icon_state = "Maltese Falcon"
+ desc = "A recreation of the famous Maltese Falcon bar sign."
+
+/datum/barsign/old_cock_inn
+ name = "Old Cock Inn"
+ icon_state = "Old Cock Inn"
+ desc = "The sign of a formerly well-known discotheque."
+
+/datum/barsign/event_horizon // Start of the kitchen signs. Don't mix it up.
+ name = "Event Horizon"
+ icon_state = "Event Horizon"
+ desc = "The SCCV Horizon's kitchen franchise sign."
+
+/datum/barsign/paradise_sands
+ name = "Paradise Sands"
+ icon_state = "Paradise Sands"
+ desc = "A take on the sign of one of Silversun's most popular cafe and bistro owned by Idris Incorporated."
+
+/datum/barsign/city_alive
+ name = "City Alive"
+ icon_state = "City Alive"
+ desc = "City Alive is another popular restaurant chain, originating from Eridani I. It is famous for its light shows."
+
+// 5
+/datum/barsign/alohasnackbar
+ name = "The Aloha Snackbar"
+ icon_state = "alohasnackbar"
+ desc = "A tasteful, inoffensive tiki bar sign."
+
+/datum/barsign/armoksbargrill
+ name = "Armok's Bar and Grill"
+ icon_state = "armoksbargrill"
+ desc = ""
+
+/datum/barsign/brokendrum
+ name = "The Broken Drum"
+ icon_state = "brokendrum"
+ desc = ""
+
+/datum/barsign/drunkengod
+ name = "Church of the Drunken God"
+ icon_state = "drunkengod"
+ desc = "The drunk answers only to Beer, for his mouth consumes His body."
+
+/datum/barsign/cavern
+ name = "The Cavern"
+ icon_state = "cavern"
+ desc = ""
+
+/datum/barsign/clownshead
+ name = "The Clown's Head"
+ icon_state = "clownshead"
+ desc = ""
+
+/datum/barsign/coderbus
+ name = "The Coderbus"
+ icon_state = "coderbus"
+ desc = "A very controversial bar known for its wide variety of constantly-changing drinks."
+
+/datum/barsign/damnwall
+ name = "The Damn Wall"
+ icon_state = "damnwall"
+ desc = ""
+
+/datum/barsign/drunkcarp
+ name = "The Drunk Carp"
+ icon_state = "drunkcarp"
+ desc = "Don't drink and swim."
+
+/datum/barsign/magmasea
+ name = "The Magma Sea"
+ icon_state = "magmasea"
+ desc = ""
+
+/datum/barsign/orchard
+ name = "The Orchard"
+ icon_state = "orchard"
+ desc = ""
+
+/datum/barsign/pinkflamingo
+ name = "The Pink Flamingo"
+ icon_state = "pinkflamingo"
+ desc = ""
+
+/datum/barsign/rustyaxe
+ name = "The Rusty Axe"
+ icon_state = "rustyaxe"
+ desc = ""
+
+/datum/barsign/saucyclown
+ name = "The Saucy Clown"
+ icon_state = "saucyclown"
+ desc = ""
+
+/datum/barsign/shaken
+ name = "The Shaken"
+ icon_state = "shaken"
+ desc = "This establishment does not serve stirred drinks."
+
+/datum/barsign/shotscrapspints
+ name = "Shots, Craps, Pints"
+ icon_state = "shotscrapspints"
+ desc = "The Foundation's Finest."
+
+// Hidden barsigns
+
+/datum/barsign/hiddensigns/scp078
+ name = "Too Late to Die Young"
+ icon_state = "toolate"
+ desc = "A pink neon sign approximately one and a half meters long that displays the phrase \"TOO LATE TO DIE YOUNG\""
+
+// 6
+/datum/barsign/thealohasnackbar
+ name = "The Aloha Snackbar"
+ icon_state = "alohasnackbar"
+ desc = "A tasteful, inoffensive tiki bar sign."
+
+// Невошедшее
+/datum/barsign/maltroach
+ name = "_Moths_"
+ icon_state = "maltroach"
+ desc = "It's moths drinks..."
+
+/datum/barsign/rockbottom
+ name = "_Rock Bottom_"
+ icon_state = "rock-bottom"
+
+/datum/barsign/chalkboard_menu
+ name = "_Chalkboard menu_"
+ icon_state = "chalkboard_menu"
+
+/datum/barsign/orangejuice
+ name = "_Orange Juice_"
+ icon_state = "orangejuice"
+
+/datum/barsign/le_cafe_silencieux
+ name = "_Le Cafe Silencieux_"
+ icon_state = "le_cafe_silencieux"
+
+/datum/barsign/the_assembly_line
+ name = "_The Assembly Line_"
+ icon_state = "the-assembly-line"
+
+/datum/barsign/little_treats
+ name = "_Little Treats_"
+ icon_state = "little_treats"
+
+/datum/barsign/bargonia
+ name = "_Bargonia_"
+ icon_state = "bargonia"
+
+/datum/barsign/cult_cove
+ name = "_Cult Cove_"
+ icon_state = "cult-cove"
+
+/datum/barsign/neon_flamingo
+ name = "_Neon Flamingo_"
+ icon_state = "neon-flamingo"
+ neon_color = "#FF66CC"
+
+/datum/barsign/no_neon_flamingo
+ name = "_Neon No Flamingo_"
+ icon_state = "neon-flamingo"
+
+/datum/barsign/slowdive
+ name = "_Slow Dive_"
+ icon_state = "slowdive"
+
+/datum/barsign/therune
+ name = "_The Rune_"
+ icon_state = "therune"
+
+/datum/barsign/the_red_mons
+ name = "_The Red Mons_"
+ icon_state = "the-red-mons"
+
+/datum/barsign/the_wizard
+ name = "_The Wizard_"
+ icon_state = "the-wizard"
+
+/datum/barsign/moths_moths_moths
+ name = "_Moths Moths Moths_"
+ icon_state = "moths-moths-moths"
+
+/datum/barsign/thesmallrounyinn
+ name = "_The Small Rounyinn_"
+ icon_state = "thesmallrounyinn"
diff --git a/mod_celadon/barsigns/icons/barsigns.dmi b/mod_celadon/barsigns/icons/barsigns.dmi
new file mode 100644
index 000000000000..a71a47a3a504
Binary files /dev/null and b/mod_celadon/barsigns/icons/barsigns.dmi differ
diff --git a/mod_celadon/barsigns/icons/barsigns96x96.dmi b/mod_celadon/barsigns/icons/barsigns96x96.dmi
new file mode 100644
index 000000000000..ae48c94c3f73
Binary files /dev/null and b/mod_celadon/barsigns/icons/barsigns96x96.dmi differ
diff --git a/mod_celadon/barsigns/icons/barsigns_long.dmi b/mod_celadon/barsigns/icons/barsigns_long.dmi
new file mode 100644
index 000000000000..c54d6cf1a269
Binary files /dev/null and b/mod_celadon/barsigns/icons/barsigns_long.dmi differ
diff --git a/mod_celadon/elysium_stuff/_elysium_stuff.dme b/mod_celadon/elysium_stuff/_elysium_stuff.dme
index 1c7e7189b5df..4ab3fbcd4b36 100644
--- a/mod_celadon/elysium_stuff/_elysium_stuff.dme
+++ b/mod_celadon/elysium_stuff/_elysium_stuff.dme
@@ -3,11 +3,15 @@
#include "_elysium_stuff.dm"
-#include "code\armor.dm"
-#include "code\skimitar.dm"
-#include "code\elysimmerch.dm"
-#include "code\clothing.dm"
-#include "code/hats.dm"
+#include "code/armor.dm"
+#include "code/skimitar.dm"
+#include "code/elysium_merch.dm"
+#include "code/clothing.dm"
+#include "code/head.dm"
#include "code/suits.dm"
+#include "code/outfits.dm"
+#include "code/shoes.dm"
+#include "code/belt.dm"
#endif
+
diff --git a/mod_celadon/elysium_stuff/code/ElysimMerch.dm b/mod_celadon/elysium_stuff/code/ElysimMerch.dm
deleted file mode 100644
index def3c52fdfc7..000000000000
--- a/mod_celadon/elysium_stuff/code/ElysimMerch.dm
+++ /dev/null
@@ -1,76 +0,0 @@
-// Miscelanious
-
-/obj/structure/curtain/cloth/elysim
- icon = 'mod_celadon/elysium_stuff/icons/obj/Elysim_patriots.dmi'
- icon_type = "elysim_fancy"
- icon_state = "elysim_fancy-open"
-
-/obj/item/banner/elysim
- name = "Elysim banner"
- desc = "The banner of Elysim, Strengthens the faith of those who deserve."
- icon = 'mod_celadon/elysium_stuff/icons/obj/Elysim_patriots.dmi'
- icon_state = "banner_elysim"
- item_state = "banner_elysim"
- lefthand_file = 'mod_celadon/elysium_stuff/icons/mob/elysim_banner_left.dmi'
- righthand_file = 'mod_celadon/elysium_stuff/icons/mob/elysim_banner_right.dmi'
- warcry = "Glory to the nation!"
-
-/obj/item/storage/book/bible/koran
- name = "Koran"
- icon_state = "koran"
- item_state = "koran"
- deity_name = "Allah"
-
-// Posters
-
-/obj/item/poster/random_elysim
- name = "random elysim poster"
- poster_type = /obj/structure/sign/poster/elysim/random
- icon_state = "rolled_elysim"
-
-/obj/structure/sign/poster/elysim/random
- name = "random elysim poster"
- icon = 'mod_celadon/elysium_stuff/icons/obj/Elysim_patriots.dmi'
- icon_state = "random_elysim"
- never_random = TRUE
- random_basetype = /obj/structure/sign/poster/elysim
- random_type = POSTER_SUBTYPES
-
-/obj/structure/sign/poster/elysim/logo // \"Breathable, if it weren't so darn cold.\"
- name = "Elysim"
- desc = "Poster of Elysim Republic. The most common logo. Nothing noteworthy"
- icon = 'mod_celadon/elysium_stuff/icons/obj/Elysim_patriots.dmi'
- icon_state = "poster-elysim"
-
-/obj/structure/sign/poster/elysim/protest
- name = "DownSolFed"
- desc = "Poster of Elysim Republic. \"This poster with its entire appearance screams No deals with traitors! \""
- icon = 'mod_celadon/elysium_stuff/icons/obj/Elysim_patriots.dmi'
- icon_state = "poster-nosf"
-
-/obj/structure/sign/poster/elysim/sonofelysim
- name = "Elysim Son"
- desc = "Poster of the Elisima Republic depicting a stately man.The inscription reads \"God will direct his punishing hand! For the glory of Elysium!\""
- icon = 'mod_celadon/elysium_stuff/icons/obj/Elysim_patriots.dmi'
- icon_state = "poster-son_elysim"
-
-/obj/structure/sign/poster/elysim/ak47
- name = "No SolFed"
- desc = "Poster of the Elysim Republic depicting iconic weapons from a previous era. \"Even a child is ready to protect his home!\""
- icon = 'mod_celadon/elysium_stuff/icons/obj/Elysim_patriots.dmi'
- icon_state = "poster-ak47"
-
-/obj/structure/sign/elysim_wall_seal
- name = "Seal of the Elysim government"
- desc = "A seal emblazened with a gold trim depicting the burning star, sol."
- icon = 'mod_celadon/elysium_stuff/icons/obj/Elysim_patriots.dmi'
- icon_state = "elysim-wall"
- pixel_y = 27
-
-/obj/structure/sign/elysim
- name = "\improper Elysim logo sign"
- sign_change_name = "Rebel Logo - Elysim"
- desc = "A sign with the Elysim logo on it. Glory to Human race!"
- icon = 'mod_celadon/elysium_stuff/icons/obj/Elysim_patriots.dmi'
- icon_state = "elysim"
- is_editable = TRUE
diff --git a/mod_celadon/elysium_stuff/code/armor.dm b/mod_celadon/elysium_stuff/code/armor.dm
index 23d84472c057..412160050a08 100644
--- a/mod_celadon/elysium_stuff/code/armor.dm
+++ b/mod_celadon/elysium_stuff/code/armor.dm
@@ -1,4 +1,4 @@
-/obj/item/clothing/suit/armor/vest/elisium
+/obj/item/clothing/suit/armor/vest/elysium
name = "Кустарная броня"
desc = "Самодельная защита сваренная из кусков брони, скрепленных кожей. Просто, но надежно."
icon = 'mod_celadon/elysium_stuff/icons/obj/accessories.dmi'
diff --git a/mod_celadon/elysium_stuff/code/belt.dm b/mod_celadon/elysium_stuff/code/belt.dm
new file mode 100644
index 000000000000..a06f9fababe9
--- /dev/null
+++ b/mod_celadon/elysium_stuff/code/belt.dm
@@ -0,0 +1,34 @@
+//Разгрузки элизиума
+/obj/item/storage/belt/security/webbing/elysium
+ name = "vest"
+ desc = "Vest, can hold security gear."
+ mob_overlay_icon = 'mod_celadon/elysium_stuff/icons/mob/accessories.dmi'
+ icon = 'mod_celadon/elysium_stuff/icons/obj/accessories.dmi'
+ icon_state = "vest_black"
+ item_state = "vest_black"
+ lefthand_file = 'icons/mob/inhands/equipment/belt_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/equipment/belt_righthand.dmi'
+
+/obj/item/storage/belt/security/webbing/elysium/vest_black
+ name = "Полная разгрузка, черная."
+ desc = "Удобный комплект для ношения всего необходимого: боеприпасов, мелкого оружия и аксессуаров. Легкий, практичный и обеспечивает свободу движения в бою.Черного цвета."
+ icon_state = "vest_black"
+ item_state = "vest_black"
+
+/obj/item/storage/belt/security/webbing/elysium/green
+ name = "Полная разгрузка, зеленая."
+ desc = "Удобный комплект для ношения всего необходимого: боеприпасов, мелкого оружия и аксессуаров. Легкий, практичный и обеспечивает свободу движения в бою.Зеленого цвета"
+ icon_state = "vest_green"
+ item_state = "vest_green"
+
+/obj/item/storage/belt/security/webbing/elysium/unload_vest_black
+ name = "Тактическая сбруя, черная."
+ desc = " Удобный пояс с карманами для боеприпасов и мелкого оружия, обеспечивает легкий доступ и свободу движения в бою. Черного цвета."
+ icon_state = "unload_vest_black"
+ item_state = "unload_vest_black"
+
+/obj/item/storage/belt/security/webbing/elysium/unload_vest_green
+ name = "Тактическая сбруя, зеленая."
+ desc = " Удобный пояс с карманами для боеприпасов и мелкого оружия, обеспечивает легкий доступ и свободу движения в бою. Зеленого цвета."
+ icon_state = "unload_vest_green"
+ item_state = "unload_vest_green"
diff --git a/mod_celadon/elysium_stuff/code/clothing.dm b/mod_celadon/elysium_stuff/code/clothing.dm
index 5fd0bde22a73..0f37c2cc5b24 100644
--- a/mod_celadon/elysium_stuff/code/clothing.dm
+++ b/mod_celadon/elysium_stuff/code/clothing.dm
@@ -1,8 +1,8 @@
-/obj/item/bedsheet/elysim
- name = "\improper Elysim bedsheet"
- desc = "It has the Elysim logo on it ."
- icon = 'mod_celadon/elysium_stuff/icons/obj/Elysim_patriots.dmi'
+/obj/item/bedsheet/elysium
+ name = "\improper Elysium bedsheet"
+ desc = "It has the Elysium logo on it ."
+ icon = 'mod_celadon/elysium_stuff/icons/obj/elysium_patriots.dmi'
mob_overlay_icon = 'mod_celadon/elysium_stuff/icons/mob/bedsheet_elysium.dmi'
- icon_state = "sheetelysim"
- item_state = "sheetelysimback"
+ icon_state = "sheetelysium"
+ item_state = "sheetelysiumback"
dream_messages = list("duty", "fatherland")
diff --git a/mod_celadon/elysium_stuff/code/elysium_merch.dm b/mod_celadon/elysium_stuff/code/elysium_merch.dm
new file mode 100644
index 000000000000..5f22dc6dc63f
--- /dev/null
+++ b/mod_celadon/elysium_stuff/code/elysium_merch.dm
@@ -0,0 +1,69 @@
+// Miscelanious
+
+/obj/structure/curtain/cloth/elysium
+ icon = 'mod_celadon/elysium_stuff/icons/obj/elysium_patriots.dmi'
+ icon_type = "elysium_fancy"
+ icon_state = "elysium_fancy-open"
+
+/obj/item/banner/elysium
+ name = "elysium banner"
+ desc = "The banner of elysium, Strengthens the faith of those who deserve."
+ icon = 'mod_celadon/elysium_stuff/icons/obj/elysium_patriots.dmi'
+ icon_state = "banner_elysium"
+ item_state = "banner_elysium"
+ lefthand_file = 'mod_celadon/elysium_stuff/icons/mob/elysium_banner_left.dmi'
+ righthand_file = 'mod_celadon/elysium_stuff/icons/mob/elysium_banner_right.dmi'
+ warcry = "Glory to the nation!"
+
+/obj/item/storage/book/bible/koran
+ name = "Koran"
+ icon_state = "koran"
+ item_state = "koran"
+ deity_name = "Allah"
+
+// Posters
+
+/obj/item/poster/random_elysium
+ name = "random elysium poster"
+ poster_type = /obj/structure/sign/poster/elysium/random
+ icon_state = "rolled_elysium"
+
+/obj/structure/sign/poster/elysium/random
+ name = "random elysium poster"
+ icon = 'mod_celadon/elysium_stuff/icons/obj/elysium_patriots.dmi'
+ icon_state = "random_elysium"
+ never_random = TRUE
+ random_basetype = /obj/structure/sign/poster/elysium
+ random_type = POSTER_SUBTYPES
+
+/obj/structure/sign/poster/elysium/logo // \"Breathable, if it weren't so darn cold.\"
+ name = "elysium"
+ desc = "Poster of elysium Republic. The most common logo. Nothing noteworthy"
+ icon = 'mod_celadon/elysium_stuff/icons/obj/elysium_patriots.dmi'
+ icon_state = "poster-elysium"
+
+/obj/structure/sign/poster/elysium/protest
+ name = "DownSolFed"
+ desc = "Poster of elysium Republic. \"This poster with its entire appearance screams No deals with traitors! \""
+ icon = 'mod_celadon/elysium_stuff/icons/obj/elysium_patriots.dmi'
+ icon_state = "poster-nosf"
+
+/obj/structure/sign/poster/elysium/sonofelysium
+ name = "elysium Son"
+ desc = "Poster of the elysium Republic depicting a stately man.The inscription reads \"God will direct his punishing hand! For the glory of Elysium!\""
+ icon = 'mod_celadon/elysium_stuff/icons/obj/elysium_patriots.dmi'
+ icon_state = "poster-son_elysium"
+
+/obj/structure/sign/poster/elysium/ak47
+ name = "No SolFed"
+ desc = "Poster of the elysium Republic depicting iconic weapons from a previous era. \"Even a child is ready to protect his home!\""
+ icon = 'mod_celadon/elysium_stuff/icons/obj/elysium_patriots.dmi'
+ icon_state = "poster-ak47"
+
+/obj/structure/sign/elysium
+ name = "\improper elysium logo sign"
+ sign_change_name = "Rebel Logo - elysium"
+ desc = "A sign with the elysium logo on it. Glory to Human race!"
+ icon = 'mod_celadon/elysium_stuff/icons/obj/elysium_patriots.dmi'
+ icon_state = "elysium"
+ is_editable = TRUE
diff --git a/mod_celadon/elysium_stuff/code/hats.dm b/mod_celadon/elysium_stuff/code/head.dm
similarity index 79%
rename from mod_celadon/elysium_stuff/code/hats.dm
rename to mod_celadon/elysium_stuff/code/head.dm
index a29ee43064cd..e064dc7a1459 100644
--- a/mod_celadon/elysium_stuff/code/hats.dm
+++ b/mod_celadon/elysium_stuff/code/head.dm
@@ -6,17 +6,17 @@
/obj/item/clothing/head/bandana/elysium/black
name = "Чёрная бандана"
- icon_state = "bandana_black_elysiun"
+ icon_state = "bandana_black_elysium"
mob_overlay_state = "bandana_black_elysium"
/obj/item/clothing/head/bandana/elysium/white
name = "Белая бандана"
- icon_state = "bandana_white_elysiun"
+ icon_state = "bandana_white_elysium"
mob_overlay_state = "bandana_white_elysium"
/obj/item/clothing/head/bandana/elysium/green
name = "Зелёная бандана"
- icon_state = "bandana_green_elysiun"
+ icon_state = "bandana_green_elysium"
mob_overlay_state = "bandana_green_elysium"
/obj/item/clothing/head/turban
@@ -89,3 +89,25 @@
mob_overlay_state = "armband"
armor = list("melee" = 20, "bullet" = 15, "laser" = 15, "energy" = 20, "bomb" = 35, "bio" = 100, "rad" = 75, "fire" = 50, "acid" = 100)
+/// CentCom Elyzium
+/obj/item/clothing/head/turban_elysium
+ name = "\improper CentCom commander cap"
+ desc = "A traditional turban worn by Elysium employees. It is dyed in the national color of lettuce, which symbolizes the Starbull Gardens."
+ icon = 'mod_celadon/elysium_stuff/icons/obj/elysium_commander.dmi'
+ mob_overlay_icon = 'mod_celadon/elysium_stuff/icons/mob/elysium_commander.dmi'
+ icon_state = "turban_elysium"
+ item_state = "turban_elysium"
+ flags_inv = 0
+ strip_delay = (8 SECONDS)
+ body_parts_covered = HEAD | HAIR
+
+/obj/item/clothing/head/shemag_elysium
+ name = "\improper CentCom commander cap"
+ desc = "A traditional shemag worn by Elysium employees. It is dyed in the national color of lettuce, which symbolizes the Starbull Gardens."
+ icon = 'mod_celadon/elysium_stuff/icons/obj/elysium_commander.dmi'
+ mob_overlay_icon = 'mod_celadon/elysium_stuff/icons/mob/elysium_commander.dmi'
+ icon_state = "shemag_elysium"
+ item_state = "shemag_elysium"
+ flags_inv = 0
+ strip_delay = (8 SECONDS)
+ body_parts_covered = HEAD | HAIR | FACEHAIR
diff --git a/mod_celadon/elysium_stuff/code/outfits.dm b/mod_celadon/elysium_stuff/code/outfits.dm
new file mode 100644
index 000000000000..855cddc2a08e
--- /dev/null
+++ b/mod_celadon/elysium_stuff/code/outfits.dm
@@ -0,0 +1,155 @@
+/obj/item/card/id/elysium_com
+ name = "\improper Elysium Central Command access card"
+ desc = "An access card sourced from Elysium Central Command."
+ icon = 'mod_celadon/elysium_stuff/icons/obj/card.dmi'
+ icon_state = "elysium_com"
+ uses_overlays = FALSE
+ registered_age = null
+
+/obj/item/card/id/elysium_com/Initialize()
+ access = get_all_centcom_access()
+ . = ..()
+
+/obj/item/card/id/elysium_com/has_ship_access(datum/overmap/ship/controlled/ship)
+ return TRUE
+
+/obj/effect/mob_spawn/human/bridgeofficerelysium
+ name = "Avanpost Bridge Officer Elysium"
+ id_job = "Bridge Officer"
+ id_access_list = list(ACCESS_CENT_CAPTAIN)
+ outfit = /datum/outfit/elysiumbridgeofficercorpse
+
+/datum/outfit/elysiumbridgeofficercorpse
+ name = "Avanpost Bridge Officer Elysium"
+ ears = /obj/item/radio/headset/heads/head_of_personnel
+ uniform = /obj/item/clothing/under/rank/avanpost/elysium_apparel
+ suit = /obj/item/clothing/suit/armor/vest/bulletproof
+ shoes = /obj/item/clothing/shoes/sneakers/sandals_cc
+ head = /obj/item/clothing/head/shemag_elysium
+ glasses = /obj/item/clothing/glasses/hud/security/sunglasses
+ id = /obj/item/card/id/elysium_com
+ belt = /obj/item/storage/belt/security/webbing/elysium/vest_black
+ l_pocket = /obj/item/restraints/handcuffs
+ r_pocket = /obj/item/ammo_box/a357
+ box = /obj/item/storage/box/survival/security
+ suit_store = /obj/item/gun/ballistic/revolver/mateba
+ gloves = /obj/item/clothing/gloves/tackler/combat/insulated
+ back = /obj/item/storage/backpack/security
+
+ backpack_contents = list(/obj/item/melee/classic_baton,
+ /obj/item/restraints/handcuffs = 4,
+ /obj/item/ammo_box/a357 = 3)
+
+ implants = list(/obj/item/implant/mindshield, /obj/item/implant/krav_maga)
+
+/obj/effect/mob_spawn/human/commanderelysium
+ name = "Avanpost Commander Elysium"
+ id_job = "Avanpost Commander Elysium"
+ id_access_list = list(ACCESS_CENT_CAPTAIN, ACCESS_CENT_GENERAL, ACCESS_CENT_SPECOPS, ACCESS_CENT_MEDICAL, ACCESS_CENT_STORAGE)
+ outfit = /datum/outfit/elysiumcommandercorpse
+
+/datum/outfit/elysiumcommandercorpse
+ name = "\improper Avanpost Private Security Commander Elysium"
+ uniform = /obj/item/clothing/under/rank/avanpost/elysium_apparel
+ suit = /obj/item/clothing/suit/armor/vest/bulletproof
+ ears = /obj/item/radio/headset/heads/captain
+ glasses = /obj/item/clothing/glasses/eyepatch
+ mask = /obj/item/clothing/mask/cigarette/cigar/cohiba
+ head = /obj/item/clothing/head/shemag_elysium
+ gloves = /obj/item/clothing/gloves/tackler/combat
+ shoes = /obj/item/clothing/shoes/sneakers/sandals_cc
+ belt = /obj/item/lighter
+ l_pocket = /obj/item/restraints/handcuffs
+ r_pocket = /obj/item/ammo_box/a357
+ box = /obj/item/storage/box/survival/security
+ suit_store = /obj/item/gun/ballistic/revolver/mateba
+ gloves = /obj/item/clothing/gloves/tackler/combat/insulated
+ id = /obj/item/card/id/elysium_com
+
+ implants = list(/obj/item/implant/mindshield)
+
+/obj/effect/mob_spawn/human/commanderelysium_alt
+ name = "Avanpost Commander Elysium (Alternative)"
+ id_job = "Avanpost Commander Elysium"
+ id_access_list = list(ACCESS_CENT_CAPTAIN, ACCESS_CENT_GENERAL, ACCESS_CENT_SPECOPS, ACCESS_CENT_MEDICAL, ACCESS_CENT_STORAGE)
+ outfit = /datum/outfit/elysiumcommandercorpse_alt
+
+/datum/outfit/elysiumcommandercorpse_alt
+ name = "\improper Avanpost Private Security Commander Elysium"
+ uniform = /obj/item/clothing/under/rank/avanpost/elysium_apparel_long
+ suit = /obj/item/clothing/suit/armor/vest/bulletproof
+ ears = /obj/item/radio/headset/heads/captain
+ glasses = /obj/item/clothing/glasses/eyepatch
+ mask = /obj/item/clothing/mask/cigarette/cigar/cohiba
+ head = /obj/item/clothing/head/turban_elysium
+ gloves = /obj/item/clothing/gloves/tackler/combat
+ shoes = /obj/item/clothing/shoes/sneakers/sandals_cc
+ r_pocket = /obj/item/lighter
+ id = /obj/item/card/id/elysium_com
+
+/obj/effect/mob_spawn/human/commanderelysium/alive
+ death = FALSE
+ roundstart = FALSE
+ mob_name = "\improper Avanpost Elysium Commander"
+ name = "sleeper"
+ icon = 'icons/obj/machines/sleeper.dmi'
+ icon_state = "sleeper"
+ short_desc = "You are a Avanpost Elysium Commander!"
+
+/obj/effect/mob_spawn/human/elysiumsoldier/alive
+ death = FALSE
+ roundstart = FALSE
+ mob_name = "Avanpost Elysium Private Security Officer"
+ name = "sleeper"
+ icon = 'icons/obj/machines/sleeper.dmi'
+ icon_state = "sleeper"
+ faction = "elysium"
+ short_desc = "You are a Avanpost Elysium Private Security Officer!"
+
+/datum/outfit/avanpost
+ name = "Avanpost"
+ uniform = /obj/item/clothing/under/rank/avanpost/elysium_apparel
+ suit = /obj/item/clothing/suit/armor/vest/bulletproof
+ ears = /obj/item/radio/headset/heads/captain
+ glasses = /obj/item/clothing/glasses/eyepatch
+ mask = /obj/item/clothing/mask/cigarette/cigar/cohiba
+ gloves = /obj/item/clothing/gloves/tackler/combat
+ shoes = /obj/item/clothing/shoes/sneakers/sandals_cc
+ r_pocket = /obj/item/lighter
+ id = /obj/item/card/id/elysium_com
+
+ implants = list(/obj/item/implant/mindshield)
+
+/datum/outfit/avanpost/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ if(visualsOnly)
+ return
+
+/datum/outfit/avanpost/commander
+ name = "Avanpost Elysium Commander"
+ uniform = /obj/item/clothing/under/rank/avanpost/elysium_apparel
+ suit = /obj/item/clothing/suit/armor/vest/bulletproof
+ shoes = /obj/item/clothing/shoes/sneakers/sandals_cc
+ gloves = /obj/item/clothing/gloves/tackler/combat/insulated
+ ears = /obj/item/radio/headset/headset_cent/commander
+ glasses = /obj/item/clothing/glasses/eyepatch
+ mask = /obj/item/clothing/mask/cigarette/cigar/cohiba
+ head = /obj/item/clothing/head/turban_elysium
+ belt = /obj/item/gun/ballistic/revolver/mateba
+ r_pocket = /obj/item/lighter
+ l_pocket = /obj/item/ammo_box/a357
+ back = /obj/item/storage/backpack/satchel/leather
+ id = /obj/item/card/id/elysium_com
+
+ implants = list(/obj/item/implant/mindshield)
+
+/datum/outfit/avanpost/commander/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ if(visualsOnly)
+ return
+
+ var/obj/item/card/id/W = H.wear_id
+ W.access = get_all_accesses()
+ W.access += get_centcom_access("CentCom Commander")
+ W.assignment = "CentCom Commander"
+ W.registered_name = H.real_name
+ W.update_label()
+ ..()
diff --git a/mod_celadon/elysium_stuff/code/shoes.dm b/mod_celadon/elysium_stuff/code/shoes.dm
new file mode 100644
index 000000000000..c5d40c9190f3
--- /dev/null
+++ b/mod_celadon/elysium_stuff/code/shoes.dm
@@ -0,0 +1,10 @@
+/obj/item/clothing/shoes/sneakers/sandals_cc
+ name = "sandals"
+ desc = "High speed, no drag combat boots."
+ icon_state = "cookflops"
+ custom_materials = list(/datum/material/wood = MINERAL_MATERIAL_AMOUNT * 0.5)
+ strip_delay = 5
+ equip_delay_other = 50
+ permeability_coefficient = 0.1
+ clothing_flags = NOSLIP
+ can_be_tied = FALSE
diff --git a/mod_celadon/elysium_stuff/code/suits.dm b/mod_celadon/elysium_stuff/code/suits.dm
index df1dcaa16f7d..9646587b7d58 100644
--- a/mod_celadon/elysium_stuff/code/suits.dm
+++ b/mod_celadon/elysium_stuff/code/suits.dm
@@ -74,3 +74,22 @@
armor = list("melee" = 30, "bullet" = 20, "laser" = 30, "energy" = 30, "bomb" = 20, "bio" = 50, "rad" = 60, "fire" = 60, "acid" = 75)
slowdown = 0.5
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/melee/skimitar)
+
+/obj/item/clothing/under/rank/avanpost
+ icon = 'mod_celadon/elysium_stuff/icons/obj/elysium_commander.dmi'
+ mob_overlay_icon = 'mod_celadon/elysium_stuff/icons/mob/elysium_commander.dmi'
+
+/// CentCom Elyzium
+/obj/item/clothing/under/rank/avanpost/elysium_apparel
+ name = "\improper Elysium commander's apparel"
+ desc = "A traditional apparel worn by Elysium employees. It is dyed in the national color of lettuce, which symbolizes the Starbull Gardens."
+ icon_state = "apparel_elysium"
+ item_state = "apparel_elysium"
+ body_parts_covered = CHEST | GROIN | ARMS | LEGS
+
+/obj/item/clothing/under/rank/avanpost/elysium_apparel_long
+ name = "\improper Elysium commander's apparel"
+ desc = "A traditional long apparel worn by Elysium employees. It is dyed in the national color of lettuce, which symbolizes the Starbull Gardens."
+ icon_state = "long_apparel_elysium"
+ item_state = "long_apparel_elysium"
+ body_parts_covered = CHEST | GROIN | ARMS | LEGS
diff --git a/mod_celadon/elysium_stuff/icons/mob/elysim_banner_right.dmi b/mod_celadon/elysium_stuff/icons/mob/elysim_banner_right.dmi
deleted file mode 100644
index 7b738c7618aa..000000000000
Binary files a/mod_celadon/elysium_stuff/icons/mob/elysim_banner_right.dmi and /dev/null differ
diff --git a/mod_celadon/elysium_stuff/icons/mob/elysim_banner_left.dmi b/mod_celadon/elysium_stuff/icons/mob/elysium_banner_left.dmi
similarity index 66%
rename from mod_celadon/elysium_stuff/icons/mob/elysim_banner_left.dmi
rename to mod_celadon/elysium_stuff/icons/mob/elysium_banner_left.dmi
index 44cce5157ab3..fee936419f49 100644
Binary files a/mod_celadon/elysium_stuff/icons/mob/elysim_banner_left.dmi and b/mod_celadon/elysium_stuff/icons/mob/elysium_banner_left.dmi differ
diff --git a/mod_celadon/elysium_stuff/icons/mob/elysium_banner_right.dmi b/mod_celadon/elysium_stuff/icons/mob/elysium_banner_right.dmi
new file mode 100644
index 000000000000..337878b4ee6e
Binary files /dev/null and b/mod_celadon/elysium_stuff/icons/mob/elysium_banner_right.dmi differ
diff --git a/mod_celadon/elysium_stuff/icons/mob/elysium_commander.dmi b/mod_celadon/elysium_stuff/icons/mob/elysium_commander.dmi
new file mode 100644
index 000000000000..971d5055b923
Binary files /dev/null and b/mod_celadon/elysium_stuff/icons/mob/elysium_commander.dmi differ
diff --git a/mod_celadon/elysium_stuff/icons/obj/Elysim_patriots.dmi b/mod_celadon/elysium_stuff/icons/obj/Elysim_patriots.dmi
deleted file mode 100644
index a1f162486b00..000000000000
Binary files a/mod_celadon/elysium_stuff/icons/obj/Elysim_patriots.dmi and /dev/null differ
diff --git a/mod_celadon/elysium_stuff/icons/obj/card.dmi b/mod_celadon/elysium_stuff/icons/obj/card.dmi
new file mode 100644
index 000000000000..704ab7b1b125
Binary files /dev/null and b/mod_celadon/elysium_stuff/icons/obj/card.dmi differ
diff --git a/mod_celadon/elysium_stuff/icons/obj/elysium_commander.dmi b/mod_celadon/elysium_stuff/icons/obj/elysium_commander.dmi
new file mode 100644
index 000000000000..9623a5b5ca22
Binary files /dev/null and b/mod_celadon/elysium_stuff/icons/obj/elysium_commander.dmi differ
diff --git a/mod_celadon/elysium_stuff/icons/obj/elysium_patriots.dmi b/mod_celadon/elysium_stuff/icons/obj/elysium_patriots.dmi
new file mode 100644
index 000000000000..ddb10ce93d1c
Binary files /dev/null and b/mod_celadon/elysium_stuff/icons/obj/elysium_patriots.dmi differ
diff --git a/mod_celadon/elysium_stuff/icons/obj/hats.dmi b/mod_celadon/elysium_stuff/icons/obj/hats.dmi
index e549b3109e24..83ae2843722f 100644
Binary files a/mod_celadon/elysium_stuff/icons/obj/hats.dmi and b/mod_celadon/elysium_stuff/icons/obj/hats.dmi differ
diff --git a/mod_celadon/event_td/README.md b/mod_celadon/event_td/README.md
new file mode 100644
index 000000000000..d244c25e9237
--- /dev/null
+++ b/mod_celadon/event_td/README.md
@@ -0,0 +1,84 @@
+
+#### Список PRов
+
+- https://github.com/CeladonSS13/Shiptest/pulls/#####
+
+
+
+## Coin of Tower Deference
+
+ID мода: EVENT_TD
+
+
+### Описание мода
+
+Этот мод добавляет монетку для ивента по обороне и атаке.
+
+
+### Изменения *кор кода*
+
+- Отсутствуют
+
+
+### Оверрайды
+
+- Отсутствуют
+
+
+### Дефайны
+
+- Отсутствуют
+
+
+### Используемые файлы, не содержащиеся в модпаке
+
+- Отсутствуют
+
+
+### Авторы
+
+MrDarkBlades, MrCat15352
+
diff --git a/mod_celadon/event_td/_event_td.dm b/mod_celadon/event_td/_event_td.dm
new file mode 100644
index 000000000000..3750a15ee6d0
--- /dev/null
+++ b/mod_celadon/event_td/_event_td.dm
@@ -0,0 +1,7 @@
+/datum/modpack/event_td
+ name = "Coin of Tower Deference"
+ desc = "Добавляет монетку для маринов и синдиката."
+ author = "MrDarkBlades, MrCat15352"
+
+///**********************************************************************///
+
diff --git a/mod_celadon/event_td/_event_td.dme b/mod_celadon/event_td/_event_td.dme
new file mode 100644
index 000000000000..ff65392ac654
--- /dev/null
+++ b/mod_celadon/event_td/_event_td.dme
@@ -0,0 +1,8 @@
+#ifndef MODPACK_CELADON_EVENT_TD
+#define MODPACK_CELADON_EVENT_TD
+
+#include "_event_td.dm"
+
+#include "code/coin.dm"
+
+#endif
diff --git a/mod_celadon/event_td/code/coin.dm b/mod_celadon/event_td/code/coin.dm
new file mode 100644
index 000000000000..d7eb3b12a6db
--- /dev/null
+++ b/mod_celadon/event_td/code/coin.dm
@@ -0,0 +1,32 @@
+/obj/item/coin/day_s
+ name = "day 'S' coin"
+ desc = "Стороны монетки напоминают вам одну историю о том, что в мире существуют цели, важнее даже собственной жизни."
+ icon = 'mod_celadon/event_td/icons/coin.dmi'
+ icon_state = "coin_valid"
+ sideslist = list("valid", "salad")
+ material_flags = NONE
+
+/obj/item/coin/day_s/attack_self(mob/user)
+ if(cooldown < world.time)
+ if(string_attached) //does the coin have a wire attached
+ to_chat(user, "Монета не будет хорошо подбрасываться, если к ней что-то прикреплено!" )
+ return FALSE //do not flip the coin
+ cooldown = world.time + 15
+ flick("coin_[coinflip]_flip", src)
+ coinflip = pick(sideslist)
+ icon_state = "coin_[coinflip]"
+ playsound(user.loc, 'sound/items/coinflip.ogg', 50, TRUE)
+ var/oldloc = loc
+ sleep(15)
+ if(loc == oldloc && user && !user.incapacitated())
+ if(coinflip == "salad")
+ user.visible_message(
+ "[user] подкидывает монетку в воздухе. Она приземляется, после чего на ней виднеется буква 'S'. Защита любой ценой!", \
+ "Вы подкидываете монетку в воздухе. Она приземляется, после чего на ней виднеется буква 'S'. Защита любой ценой!", \
+ "Вы слышите звук падения мелочи.")
+ else
+ user.visible_message(
+ "[user] подкидывает монетку в воздухе. Она приземляется, после чего на ней виднеется буква 'M'. Атака без учёта потерь!", \
+ "Вы подкидываете монетку в воздухе. Она приземляется, после чего на ней виднеется буква 'M'. Атака без учёта потерь!", \
+ "Вы слышите звук падения мелочи.")
+ return TRUE //did the coin flip?
diff --git a/mod_celadon/event_td/icons/coin.dmi b/mod_celadon/event_td/icons/coin.dmi
new file mode 100644
index 000000000000..e65cffe5fcfe
Binary files /dev/null and b/mod_celadon/event_td/icons/coin.dmi differ
diff --git a/mod_celadon/flags/README.md b/mod_celadon/flags/README.md
new file mode 100644
index 000000000000..7922b5bcf1f2
--- /dev/null
+++ b/mod_celadon/flags/README.md
@@ -0,0 +1,84 @@
+
+#### Список PRов
+
+- https://github.com/CeladonSS13/Shiptest/pulls/#####
+
+
+
+## Флаги
+
+ID мода: FLAGS
+
+
+### Описание мода
+
+Этот мод добавляет новые флаги и гроба. Пока что тут иностранные все, но со временем заменим на наши лорные
+
+
+### Изменения *кор кода*
+
+- Отсутствуют
+
+
+### Оверрайды
+
+- Отсутствуют
+
+
+### Дефайны
+
+- Отсутствуют
+
+
+### Используемые файлы, не содержащиеся в модпаке
+
+- Отсутствуют
+
+
+### Авторы
+
+MrCat15352
+
diff --git a/mod_celadon/flags/_flags.dm b/mod_celadon/flags/_flags.dm
new file mode 100644
index 000000000000..fa322f92cc0b
--- /dev/null
+++ b/mod_celadon/flags/_flags.dm
@@ -0,0 +1,6 @@
+/datum/modpack/flags
+ name = "Флаги и гробы"
+ desc = "Вносит в игру разнообразные флаги, для картоделов и для игроков."
+ author = "MrCat15352"
+
+///**********************************************************************///
diff --git a/mod_celadon/flags/_flags.dme b/mod_celadon/flags/_flags.dme
new file mode 100644
index 000000000000..ba6127821262
--- /dev/null
+++ b/mod_celadon/flags/_flags.dme
@@ -0,0 +1,8 @@
+#ifndef MODPACK_CELADON_FLAGS
+#define MODPACK_CELADON_FLAGS
+
+#include "_flags.dm"
+
+#include "code/flags.dm"
+
+#endif
diff --git a/mod_celadon/flags/code/flags.dm b/mod_celadon/flags/code/flags.dm
new file mode 100644
index 000000000000..e6439bbda7d0
--- /dev/null
+++ b/mod_celadon/flags/code/flags.dm
@@ -0,0 +1,163 @@
+// STRUCTURE FLAGS - THE WALL MOUNTS
+
+/obj/structure/sign/flag/blank
+ name = "flag of blank"
+ desc = "The flag of nothing. It has nothing on it. Beautiful."
+ icon = 'mod_celadon/flags/icons/flags.dmi'
+ icon_state = "flag_blank"
+ item_flag = /obj/item/sign/flag/blank
+
+MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/flag/blank, 32)
+
+/obj/structure/sign/flag/pirate
+ name = "flag of the Pirate"
+ desc = "The flag of Pirate."
+ icon = 'mod_celadon/flags/icons/flags.dmi'
+ icon_state = "flag_pirate"
+ item_flag = /obj/item/sign/flag/pirate
+
+MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/flag/pirate, 32)
+
+/obj/structure/sign/flag/red_star
+ name = "flag of the Red Star Pirate"
+ desc = "The flag of the Red Star Pirate."
+ icon = 'mod_celadon/flags/icons/flags.dmi'
+ icon_state = "flag_red_star"
+ item_flag = /obj/item/sign/flag/red_star
+
+MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/flag/red_star, 32)
+
+/obj/structure/sign/flag/independed
+ name = "flag of the Independed"
+ desc = "The flag of Independed."
+ icon = 'mod_celadon/flags/icons/flags.dmi'
+ icon_state = "flag_independed"
+ item_flag = /obj/item/sign/flag/independed
+
+MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/flag/independed, 32)
+
+/obj/structure/sign/flag/elysium
+ name = "Seal of the Elysium government"
+ desc = "A seal emblazened with a gold trim depicting the burning star, sol."
+ icon = 'mod_celadon/flags/icons/flags.dmi'
+ icon_state = "flag_elysium"
+ item_flag = /obj/item/sign/flag/elysium
+
+MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/flag/elysium, 32)
+
+/obj/structure/sign/flag/inteq
+ name = "flag of the InteQ"
+ desc = "The flag of InteQ."
+ icon = 'mod_celadon/flags/icons/flags.dmi'
+ icon_state = "flag_inteq"
+ item_flag = /obj/item/sign/flag/inteq
+
+MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/flag/inteq, 32)
+
+/obj/structure/sign/flag/nanotrasen
+ name = "flag of Nanotrasen"
+ desc = "The official corporate flag of Nanotrasen. Mostly flown as a ceremonial piece, or to mark land on a new frontier."
+ icon = 'mod_celadon/flags/icons/flags.dmi'
+ icon_state = "flag_nt"
+ item_flag = /obj/item/sign/flag/nanotrasen
+
+MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/flag/nanotrasen, 32)
+
+/obj/structure/sign/flag/separatists
+ name = "flag of the Elysium Separatists"
+ desc = "The flag of Elysium Separatists."
+ icon = 'mod_celadon/flags/icons/flags.dmi'
+ icon_state = "flag_separatist"
+ item_flag = /obj/item/sign/flag/separatists
+
+MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/flag/separatists, 32)
+
+/obj/structure/sign/flag/solfed
+ name = "flag of the Sol Federation"
+ desc = "The flag of Sol Federation."
+ icon = 'mod_celadon/flags/icons/flags.dmi'
+ icon_state = "flag_solfed"
+ item_flag = /obj/item/sign/flag/solfed
+
+MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/flag/solfed, 32)
+
+/obj/structure/sign/flag/syndicate
+ name = "flag of the Syndicate"
+ desc = "The flag of the Sothran Syndicate. Previously used by the Sothran people as a way of declaring opposition against the Nanotrasen, now it became an intergalactic symbol of the same, yet way more skewed purpose, as more groups of interest have joined the rebellion's side for their own gain."
+ icon = 'mod_celadon/flags/icons/flags.dmi'
+ icon_state = "flag_syndi"
+ item_flag = /obj/item/sign/flag/syndicate
+
+MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/flag/syndicate, 32)
+
+// ITEM FLAGS - THE THINGS YOU HOLD AND PLACE
+/obj/item/sign/flag/blank
+ name = "folded blank flag"
+ desc = "The folded flag of nothing. It has nothing on it. Beautiful."
+ icon = 'mod_celadon/flags/icons/flags.dmi'
+ icon_state = "folded_blank"
+ sign_path = /obj/structure/sign/flag/blank
+ is_editable = FALSE
+
+/obj/item/sign/flag/pirate
+ name = "folded of the Pirate"
+ desc = "The folded of Pirate."
+ icon = 'mod_celadon/flags/icons/flags.dmi'
+ icon_state = "folded_pirate"
+ sign_path = /obj/structure/sign/flag/pirate
+
+/obj/item/sign/flag/red_star
+ name = "folded flag of the Red Star Pirate"
+ desc = "The folded flag of Red Star Pirate."
+ icon = 'mod_celadon/flags/icons/flags.dmi'
+ icon_state = "folded_red_star"
+ sign_path = /obj/structure/sign/flag/red_star
+
+/obj/item/sign/flag/independed
+ name = "folded flag of the Independed"
+ desc = "The folded flag of Independed."
+ icon = 'mod_celadon/flags/icons/flags.dmi'
+ icon_state = "folded_independed"
+ sign_path = /obj/structure/sign/flag/independed
+
+/obj/item/sign/flag/elysium
+ name = "folded flag of the Elysium government"
+ desc = "The folded flag of Elysium government."
+ icon = 'mod_celadon/flags/icons/flags.dmi'
+ icon_state = "folded_elysium"
+ sign_path = /obj/structure/sign/flag/elysium
+
+/obj/item/sign/flag/inteq
+ name = "folded flag of the InteQ"
+ desc = "The folded flag of InteQ."
+ icon = 'mod_celadon/flags/icons/flags.dmi'
+ icon_state = "folded_inteq"
+ sign_path = /obj/structure/sign/flag/inteq
+
+/obj/item/sign/flag/nanotrasen
+ name = "folded flag of the Nanotrasen"
+ desc = "The folded flag of the Nanotrasen."
+ icon = 'mod_celadon/flags/icons/flags.dmi'
+ icon_state = "folded_nt"
+ sign_path = /obj/structure/sign/flag/nanotrasen
+
+/obj/item/sign/flag/separatists
+ name = "folded flag of the Elysium Separatists"
+ desc = "The folded flag of Elysium Separatists."
+ icon = 'mod_celadon/flags/icons/flags.dmi'
+ icon_state = "folded_separatist"
+ sign_path = /obj/structure/sign/flag/separatists
+
+/obj/item/sign/flag/solfed
+ name = "folded flag of the Sol Federation"
+ desc = "The folded flag of Sol Federation."
+ icon = 'mod_celadon/flags/icons/flags.dmi'
+ icon_state = "folded_solfed"
+ sign_path = /obj/structure/sign/flag/solfed
+
+/obj/item/sign/flag/syndicate
+ name = "folded flag of the Syndicate"
+ desc = "The folded flag of the Sothran Syndicate."
+ icon = 'mod_celadon/flags/icons/flags.dmi'
+ icon_state = "folded_syndi"
+ sign_path = /obj/structure/sign/flag/syndicate
diff --git a/mod_celadon/flags/icons/flags.dmi b/mod_celadon/flags/icons/flags.dmi
new file mode 100644
index 000000000000..f62e426a84a8
Binary files /dev/null and b/mod_celadon/flags/icons/flags.dmi differ
diff --git a/mod_celadon/flora/README.md b/mod_celadon/flora/README.md
new file mode 100644
index 000000000000..df37ea059ddd
--- /dev/null
+++ b/mod_celadon/flora/README.md
@@ -0,0 +1,85 @@
+
+#### Список PRов
+
+- https://github.com/CeladonSS13/Shiptest/pulls/#####
+
+
+
+## Флора - растения
+
+ID мода: CELADON_FLORA
+
+
+### Описание мода
+
+Этот мод добавляет больше растений, пока что.
+
+
+### Изменения *кор кода*
+
+- EDIT: `code\game\objects\structures\flora.dm` -> изменены пути к атласам. Изменено рандомное число выбора растения.
+- EDIT: `code\modules\mob\living\carbon\human\species_types\ethereal.dm` -> изменен путь к атласу.
+
+
+### Оверрайды
+
+- Отсутствуют
+
+
+### Дефайны
+
+- Отсутствуют
+
+
+### Используемые файлы, не содержащиеся в модпаке
+
+- Отсутствуют
+
+
+### Авторы
+
+MrCat15352
+
diff --git a/mod_celadon/flora/_flora.dm b/mod_celadon/flora/_flora.dm
new file mode 100644
index 000000000000..5d8b818ba5fd
--- /dev/null
+++ b/mod_celadon/flora/_flora.dm
@@ -0,0 +1,6 @@
+/datum/modpack/flora
+ name = "Flora"
+ desc = "Расширяет ассортимент растений в горшках."
+ author = "MrCat15352"
+
+///**********************************************************************///
diff --git a/mod_celadon/flora/_flora.dme b/mod_celadon/flora/_flora.dme
new file mode 100644
index 000000000000..2032367e6d3b
--- /dev/null
+++ b/mod_celadon/flora/_flora.dme
@@ -0,0 +1,8 @@
+#ifndef MODPACK_CELADON_FLORA
+#define MODPACK_CELADON_FLORA
+
+#include "_flora.dm"
+
+#include "code/plants.dm"
+
+#endif
diff --git a/mod_celadon/flora/code/plants.dm b/mod_celadon/flora/code/plants.dm
new file mode 100644
index 000000000000..4537077f2b88
--- /dev/null
+++ b/mod_celadon/flora/code/plants.dm
@@ -0,0 +1,2 @@
+/obj/item/kirbyplants
+ icon = 'mod_celadon/flora/icons/plants.dmi'
diff --git a/mod_celadon/flora/icons/plants.dmi b/mod_celadon/flora/icons/plants.dmi
new file mode 100644
index 000000000000..356684885fbb
Binary files /dev/null and b/mod_celadon/flora/icons/plants.dmi differ
diff --git a/mod_celadon/inteq_stuff/README.md b/mod_celadon/inteq_stuff/README.md
index 99d249287317..40823ff694f2 100644
--- a/mod_celadon/inteq_stuff/README.md
+++ b/mod_celadon/inteq_stuff/README.md
@@ -28,7 +28,7 @@ ID мода: INTEQ_STUFF
### Изменения *кор кода*
-- ADD : `code\modules\asset_cache\asset_list_items.dm` - добавлен новый штамп
+- Отсутствуют
+
+
+## Музыкальные инструменты
+
+ID мода: CELADON_MUSICIAN
+
+
+### Описание мода
+
+Этот мод служит примером для разработчиков и существует лишь для того,
+чтобы его можно было легко скопировать и вставить в другое место.
+
+
+### Изменения *кор кода*
+
+- EDIT: `code\modules\instruments\stationary.dm`: `/obj/structure/musician/piano/Initialize(mapload)` -> изменен прок на выборку спрайта пиано
+
+
+### Оверрайды
+
+- Отсутствуют
+
+
+### Дефайны
+
+- Отсутствуют
+
+
+### Используемые файлы, не содержащиеся в модпаке
+
+- Отсутствуют
+
+
+### Авторы
+
+MrCat15352
+
diff --git a/mod_celadon/musician/_musician.dm b/mod_celadon/musician/_musician.dm
new file mode 100644
index 000000000000..b72fcc410646
--- /dev/null
+++ b/mod_celadon/musician/_musician.dm
@@ -0,0 +1,10 @@
+/datum/modpack/musician
+ /// Строковое имя модпака. Используется для поиска других модпаков в init.
+ name = "Musician Instruments"
+ /// Строковое описание для модпака. Может использоваться для списка глаголов модпака в качестве описания.
+ desc = "Добавляет новое мини пиано и чинит направления для других пиан."
+ /// Строка с авторами этого модпака.
+ author = "MrCat15352"
+
+///**********************************************************************///
+
diff --git a/mod_celadon/musician/_musician.dme b/mod_celadon/musician/_musician.dme
new file mode 100644
index 000000000000..0d09ac9128e4
--- /dev/null
+++ b/mod_celadon/musician/_musician.dme
@@ -0,0 +1,8 @@
+#ifndef MODPACK_CELADON_MUSICIAN
+#define MODPACK_CELADON_MUSICIAN
+
+#include "_musician.dm"
+
+#include "code/musician.dm"
+
+#endif
diff --git a/mod_celadon/musician/code/musician.dm b/mod_celadon/musician/code/musician.dm
new file mode 100644
index 000000000000..d7c11688036a
--- /dev/null
+++ b/mod_celadon/musician/code/musician.dm
@@ -0,0 +1,2 @@
+/obj/structure/musician/piano
+ icon = 'mod_celadon/musician/icons/musician.dmi'
diff --git a/mod_celadon/musician/icons/musician.dmi b/mod_celadon/musician/icons/musician.dmi
new file mode 100644
index 000000000000..b97e941c399e
Binary files /dev/null and b/mod_celadon/musician/icons/musician.dmi differ
diff --git a/mod_celadon/pizzamat/README.md b/mod_celadon/pizzamat/README.md
new file mode 100644
index 000000000000..e5aae5c5b0e0
--- /dev/null
+++ b/mod_celadon/pizzamat/README.md
@@ -0,0 +1,84 @@
+
+#### Список PRов
+
+- https://github.com/CeladonSS13/Shiptest/pulls/#####
+
+
+
+## Pizzamat!
+
+ID мода: PIZZAMAT
+
+
+### Описание мода
+
+Этот мод возвращает автомат по продаже пицц от компании РинКо.
+
+
+### Изменения *кор кода*
+
+- Отсутствуют
+
+
+### Оверрайды
+
+- Отсутствуют
+
+
+### Дефайны
+
+- Отсутствуют
+
+
+### Используемые файлы, не содержащиеся в модпаке
+
+- Отсутствуют
+
+
+### Авторы
+
+MrDarkBlades
+
diff --git a/mod_celadon/pizzamat/_pizzamat.dm b/mod_celadon/pizzamat/_pizzamat.dm
new file mode 100644
index 000000000000..7bb55a2440d9
--- /dev/null
+++ b/mod_celadon/pizzamat/_pizzamat.dm
@@ -0,0 +1,7 @@
+/datum/modpack/pizzamat
+ name = "Pizzamat"
+ desc = "Добавляет автомат по продаже пицц от компании РинКо"
+ author = "MrDarkBlades"
+
+///**********************************************************************///
+
diff --git a/mod_celadon/pizzamat/_pizzamat.dme b/mod_celadon/pizzamat/_pizzamat.dme
new file mode 100644
index 000000000000..c8123b12b6d0
--- /dev/null
+++ b/mod_celadon/pizzamat/_pizzamat.dme
@@ -0,0 +1,8 @@
+#ifndef MODPACK_CELADON_PIZZAMAT
+#define MODPACK_CELADON_PIZZAMAT
+
+#include "_pizzamat.dm"
+
+#include "code/pizzamat.dm"
+
+#endif
diff --git a/mod_celadon/pizzamat/code/pizzamat.dm b/mod_celadon/pizzamat/code/pizzamat.dm
new file mode 100644
index 000000000000..343c710971be
--- /dev/null
+++ b/mod_celadon/pizzamat/code/pizzamat.dm
@@ -0,0 +1,35 @@
+/obj/machinery/vending/pizzamat
+ name = "PizzaMat Rin'Daar&Co"
+ desc = "Если вы хотите вкуснейшую, сочную, мясную пиццу, то вы просто должны попробовать!"
+ product_slogans = "Пицца - лучшее, что придумало человечество!"
+ product_ads = "Совершенно точно свежая и вкусная пицца. Таярские эксперты не стали бы обманывать!"
+ icon = 'mod_celadon/pizzamat/icons/pizzamat.dmi'
+ icon_state = "pizzamat"
+ products = list(
+ /obj/item/reagent_containers/food/snacks/pizza/meat/rinmeat = 3,
+ /obj/item/reagent_containers/food/snacks/pizza/margherita = 3,
+ /obj/item/reagent_containers/food/snacks/pizza/sassysage = 3,
+ /obj/item/reagent_containers/food/snacks/pizza/pineapple/rinapple = 3)
+
+ refill_canister = /obj/item/vending_refill/pizzamat
+ default_price = 75
+ extra_price = 150
+ // payment_department = ACCOUNT_SRV
+ light_mask = "cigs-light-mask"
+
+/obj/item/vending_refill/pizzamat
+ machine_name = "Rin'Daar&Co"
+ icon = 'mod_celadon/pizzamat/icons/pizzamat.dmi'
+ icon_state = "refill_pizza"
+
+/obj/item/reagent_containers/food/snacks/pizza/meat/rinmeat
+ name = "Elite Meat pizza"
+ desc = "Greasy pizza with delicious meat, with special seasonings."
+ slice_path = /obj/item/reagent_containers/food/snacks/pizzaslice/meat
+ list_reagents = list(/datum/reagent/consumable/nutriment = 40, /datum/reagent/consumable/nutriment/vitamin = 8, /datum/reagent/drug/space_drugs = 10)
+
+/obj/item/reagent_containers/food/snacks/pizza/pineapple/rinapple
+ name = "\improper Hawaiian pizza"
+ desc = "Pizza is the equivalent of Einstein's riddle, but something seems wrong with it..."
+ slice_path = /obj/item/reagent_containers/food/snacks/pizzaslice/pineapple
+ list_reagents = list(/datum/reagent/consumable/nutriment = 20, /datum/reagent/consumable/nutriment/vitamin = 3, /datum/reagent/yuck = 10)
diff --git a/mod_celadon/pizzamat/icons/pizzamat.dmi b/mod_celadon/pizzamat/icons/pizzamat.dmi
new file mode 100644
index 000000000000..eed37ba8897a
Binary files /dev/null and b/mod_celadon/pizzamat/icons/pizzamat.dmi differ
diff --git a/mod_celadon/qol/README.md b/mod_celadon/qol/README.md
index 9db73386b6c1..32bfe56d2e27 100644
--- a/mod_celadon/qol/README.md
+++ b/mod_celadon/qol/README.md
@@ -82,6 +82,8 @@ ID мода: CELADON_QOL
- EDIT `code\modules\projectiles\boxes_magazines\_box_magazine.dm` -> снижена задержка загрузки патронов с коробки в магазин
+- EDIT `code/game/objects/structures/flora.dm` -> меняем звук падающего дерева с метеоритного на нормальный
+
+
+
+## Одежда СолФеда
+
+ID мода: SOLFED_STUFF
+
+
+### Описание мода
+
+Этот мод добавляет стафф одежду для солфеда.
+
+
+### Изменения *кор кода*
+
+- Отсутствуют
+
+
+### Оверрайды
+
+- Отсутствуют
+
+
+### Дефайны
+
+- Отсутствуют
+
+
+### Используемые файлы, не содержащиеся в модпаке
+
+- Отсутствуют
+
+
+### Авторы
+
+Kottason - спрайты, RalseiDreemuurr - код
+
diff --git a/mod_celadon/solfed_stuff/_solfed_stuff.dm b/mod_celadon/solfed_stuff/_solfed_stuff.dm
new file mode 100644
index 000000000000..efd6aa666176
--- /dev/null
+++ b/mod_celadon/solfed_stuff/_solfed_stuff.dm
@@ -0,0 +1,7 @@
+/datum/modpack/solfed_stuff
+ /// Строковое имя модпака. Используется для поиска других модпаков в init.
+ name = "Вещи для СолФеда"
+ /// Строковое описание для модпака. Может использоваться для списка глаголов модпака в качестве описания.
+ desc = "Модпак содержит в себе различные вещи относящиеся к СолФеду"
+ /// Строка с авторами этого модпака.
+ author = "Kottason - спрайты, RalseiDreemuurr - код"
diff --git a/mod_celadon/solfed_stuff/_solfed_stuff.dme b/mod_celadon/solfed_stuff/_solfed_stuff.dme
new file mode 100644
index 000000000000..7171262452f8
--- /dev/null
+++ b/mod_celadon/solfed_stuff/_solfed_stuff.dme
@@ -0,0 +1,8 @@
+#ifndef MODPACK_CELADON_SOLFED_STUFF
+#define MODPACK_CELADON_SOLFED_STUFF
+
+#include "_solfed_stuff.dm"
+
+#include "code/solfed_decal.dm"
+#include "code/solfed_other_stuff.dm"
+#endif
diff --git a/mod_celadon/solfed_stuff/code/solfed_decal.dm b/mod_celadon/solfed_stuff/code/solfed_decal.dm
new file mode 100644
index 000000000000..6245f8aabd65
--- /dev/null
+++ b/mod_celadon/solfed_stuff/code/solfed_decal.dm
@@ -0,0 +1,81 @@
+/obj/effect/turf_decal/solgov
+ icon = 'mod_celadon/solfed_stuff/icons/sol_fed_Logo.dmi'
+ icon_state = "11"
+
+/obj/effect/turf_decal/solgov/top
+ icon_state = "12"
+
+/obj/effect/turf_decal/solgov/top_right
+ icon_state = "13"
+
+/obj/effect/turf_decal/solgov/center_left
+ icon_state = "21"
+
+/obj/effect/turf_decal/solgov/center
+ icon_state = "22"
+
+/obj/effect/turf_decal/solgov/center_right
+ icon_state = "23"
+
+/obj/effect/turf_decal/solgov/bottom_left
+ icon_state = "31"
+
+/obj/effect/turf_decal/solgov/bottom_center
+ icon_state = "32"
+
+/obj/effect/turf_decal/solgov/bottom_right
+ icon_state = "33"
+
+/obj/effect/turf_decal/solgov/wood
+ icon_state = "11"
+
+/obj/effect/turf_decal/solgov/wood/top
+ icon_state = "12"
+
+/obj/effect/turf_decal/solgov/wood/top_right
+ icon_state = "13"
+
+/obj/effect/turf_decal/solgov/wood/center_left
+ icon_state = "21"
+
+/obj/effect/turf_decal/solgov/wood/center
+ icon_state = "22"
+
+/obj/effect/turf_decal/solgov/wood/center_right
+ icon_state = "23"
+
+/obj/effect/turf_decal/solgov/wood/bottom_left
+ icon_state = "31"
+
+/obj/effect/turf_decal/solgov/wood/bottom_center
+ icon_state = "32"
+
+/obj/effect/turf_decal/solgov/wood/bottom_right
+ icon_state = "33"
+
+/obj/effect/turf_decal/solgov/all
+ icon_state = "11"
+
+/obj/effect/turf_decal/solgov/all/top
+ icon_state = "12"
+
+/obj/effect/turf_decal/solgov/all/top_right
+ icon_state = "13"
+
+/obj/effect/turf_decal/solgov/all/center_left
+ icon_state = "21"
+
+/obj/effect/turf_decal/solgov/all/center
+ icon_state = "22"
+
+/obj/effect/turf_decal/solgov/all/center_right
+ icon_state = "23"
+
+/obj/effect/turf_decal/solgov/all/bottom_left
+ icon_state = "31"
+
+/obj/effect/turf_decal/solgov/all/bottom_center
+ icon_state = "32"
+
+/obj/effect/turf_decal/solgov/all/bottom_right
+ icon_state = "33"
diff --git a/mod_celadon/solfed_stuff/code/solfed_other_stuff.dm b/mod_celadon/solfed_stuff/code/solfed_other_stuff.dm
new file mode 100644
index 000000000000..eb039461322f
--- /dev/null
+++ b/mod_celadon/solfed_stuff/code/solfed_other_stuff.dm
@@ -0,0 +1,196 @@
+/obj/item/banner/solfed
+ name = "Solar Federation baner"
+ desc = "This is the Solar Federation banner, it looks quite democratic"
+ icon = 'mod_celadon/solfed_stuff/icons/sol_fed_patriots.dmi'
+ icon_state = "solfed_baner"
+ item_state = "solfed_baner"
+ lefthand_file = 'mod_celadon/solfed_stuff/icons/mob/sol_fed_banner_lefthand.dmi'
+ righthand_file = 'mod_celadon/solfed_stuff/icons/mob/sol_fed_banner_righthand.dmi'
+ warcry = "Glory to Solar Federation!"
+
+/obj/structure/sign/solfed
+ name = "\improper Solar Federation Logo"
+ sign_change_name = "Solar Federation Logo"
+ desc = "It's the logo of the Solar Federation. Most likely, this structure belongs to the armed forces of the Solar Federation."
+ icon = 'mod_celadon/solfed_stuff/icons/sol_fed_patriots.dmi'
+ icon_state = "sol_fed_wall_logo"
+ is_editable = TRUE
+
+/obj/structure/sign/solfed/elysium
+ name = "\improper Elysium Brigade Logo"
+ sign_change_name = "Elysium Brigade logo"
+ desc = "The logo of the Solar Federation's Elysium Brigade. It is inscribed above the “Freedom” chevron. Most likely this ship belongs to the Elysium Brigade and is part of the Solar Federation army. The Elysium Brigade is a volunteer regiment of the Solar Federation that maintains order on the territory of the Elysium Republic."
+ icon = 'mod_celadon/solfed_stuff/icons/elysium_brigade.dmi'
+ icon_state = "elysium_brigade_logo"
+ is_editable = TRUE
+
+/obj/item/poster/random_solfed
+ name = "random solfed poster"
+ poster_type = /obj/structure/sign/poster/solfed/random
+ icon_state = "rolled_solgov"
+
+/obj/structure/sign/poster/solfed/random
+ name = "random solfed poster"
+ icon_state = "random_solfed"
+ icon = 'mod_celadon/solfed_stuff/icons/sol_fed_patriots.dmi'
+ never_random = TRUE
+ random_basetype = /obj/structure/sign/poster/solfed
+ random_type = POSTER_SUBTYPES
+
+
+/obj/structure/sign/poster/solfed/solfed
+ name = "Poster - Solar Federation"
+ desc = "The flag of the Solar Federation. As the galactic hegemony, they still haven't decided to plant their flag everywhere. Or have they?"
+ icon_state = "sol_fed_poster"
+
+/obj/structure/sign/poster/solfed/mars
+ name = "Poster - Mars"
+ desc = "This poster shows Mars, the 4th planet in SF-2345."
+ icon_state = "mars_poster"
+
+/obj/structure/sign/poster/solfed/protect
+ name = "Poster - Protect"
+ desc = "This Solar Federation poster has “Protect” written all over it. The m11 helmet is common among their armed forces."
+ icon_state = "protect_poster"
+
+/obj/structure/sign/poster/solfed/help
+ name = "Poster - We're help!"
+ desc = "This Solar Federation poster shows the logo of the Republic of Elysium and the inscription “We're help” underneath. Probably by help they mean the presence of armed forces on the territory of the Republic."
+ icon_state = "were_help_poster"
+
+/obj/structure/sign/poster/solfed/elysium
+ name = "Elysium Brigade poster"
+ desc = "A poster of the Solar Federation's Elysium Brigade. The Elysium Brigade is a volunteer regiment of the Solar Federation that maintains order on the territory of the Elysium Republic. Can they be considered traitors to the homeland?"
+ icon_state = "elysium_brigade_poster"
+ icon = 'mod_celadon/solfed_stuff/icons/elysium_brigade.dmi'
+ never_random = TRUE
+
+/obj/item/bedsheet/solfed
+ name = "\improper Solar Federation bedsheet"
+ desc = "IIt's a quilt made in the style of the Solar Federation flag. Cover yourself with it and feel the warm embrace of your big brother."
+ icon = 'mod_celadon/solfed_stuff/icons/sol_fed_patriots.dmi'
+ mob_overlay_icon = 'mod_celadon/solfed_stuff/icons/mob/neck.dmi'
+ icon_state = "solfed_bedsheet"
+ item_state = "solfed_bedsheet"
+
+/obj/item/clothing/under/solfed
+ name = "Solar Federation marine form"
+ desc = "This is the standard uniform of the Solar Federation Marines. It's colored dark blue."
+ icon = 'mod_celadon/solfed_stuff/icons/sol_fed_patriots.dmi'
+ mob_overlay_icon = 'mod_celadon/solfed_stuff/icons/mob/under.dmi'
+ icon_state = "solfed_camo"
+ item_state = "solfed_camo"
+ armor = list("melee" = 10, "bullet" = 10, "laser" = 10,"energy" = 10, "bomb" = 20, "bio" = 40, "rad" = 40, "fire" = 30, "acid" = 30)
+
+/obj/item/clothing/under/solfed/elysium
+ name = "Solar Federation marine form"
+ desc = "This is the standard uniform of the Solar Federation Marines. It's colored dark blue."
+ icon = 'mod_celadon/solfed_stuff/icons/elysium_brigade.dmi'
+ mob_overlay_icon = 'mod_celadon/solfed_stuff/icons/mob/under.dmi'
+ icon_state = "elysium_brigade_form"
+ item_state = "elysium_brigade_form"
+
+/obj/item/storage/belt/military/solfed
+ name = "Solar Federation chest rig"
+ desc = "These are the military webbing of the Solar Federation. It has the Solar Federation logo on the back."
+ icon = 'mod_celadon/solfed_stuff/icons/sol_fed_patriots.dmi'
+ mob_overlay_icon = 'mod_celadon/solfed_stuff/icons/mob/belt.dmi'
+ icon_state = "solfed_webbing"
+ item_state = "solfed_webbing"
+ resistance_flags = FIRE_PROOF
+
+/obj/item/storage/belt/military/solfed/elysium
+ name = "Elysium Brigade chest rig"
+ desc = "These are the military webbing of the Solar Federation Elysium Brigade. It has the Solar Federation logo on the back."
+ icon = 'mod_celadon/solfed_stuff/icons/elysium_brigade.dmi'
+ mob_overlay_icon = 'mod_celadon/solfed_stuff/icons/mob/belt.dmi'
+ icon_state = "elysium_brigade_webbing"
+ item_state = "elysium_brigade_webbing"
+ resistance_flags = FIRE_PROOF
+
+/obj/item/clothing/head/solfed/elysium/beret
+ name = "Elysium Brigade beret"
+ desc = "This is a beret of the Solar Federation's Elysium Brigade. It's made in a dark green color. It has the Solar Federation flag on the front."
+ icon = 'mod_celadon/solfed_stuff/icons/elysium_brigade.dmi'
+ mob_overlay_icon = 'mod_celadon/solfed_stuff/icons/mob/head.dmi'
+ icon_state = "elysium_brigade_beret"
+ item_state = "elysium_brigade_beret"
+
+/obj/item/clothing/head/solfed/elysium/turban
+ name = "Elysium Brigade turban"
+ desc = "This is the dark green turban of the Solar Federation Elysium Brigade. Initially, the Solar Federation leadership was against the wearing of turbans, but citing the Solar Federation's commitment to allow the cultural practices of its citizens, the turban was allowed to be worn on duty."
+ icon = 'mod_celadon/solfed_stuff/icons/elysium_brigade.dmi'
+ mob_overlay_icon = 'mod_celadon/solfed_stuff/icons/mob/head.dmi'
+ icon_state = "elysium_brigade_turban"
+ item_state = "elysium_brigade_turban"
+
+
+/obj/item/clothing/head/helmet/solfedm11
+ name = "Solar Federation m11 helmet"
+ desc = "It's an m11 helmet in Solar Federation coloring. On its left side you can see the flag of the Solar Federation. It is usually worn by Solar Federation soldiers."
+ icon = 'mod_celadon/solfed_stuff/icons/sol_fed_patriots.dmi'
+ mob_overlay_icon = 'mod_celadon/solfed_stuff/icons/mob/head.dmi'
+ icon_state = "solfed_m11"
+ item_state = "solfed_m11"
+
+/obj/item/clothing/head/helmet/solfedm11/elysium
+ name = "Elysium Brigade m11 helmet"
+ desc = "It's an m11 helmet in Solar Federation in desert coloring. On its left side you can see the flag of the Solar Federation. It is usually worn by Solar Federation soldiers."
+ icon = 'mod_celadon/solfed_stuff/icons/elysium_brigade.dmi'
+ mob_overlay_icon = 'mod_celadon/solfed_stuff/icons/mob/head.dmi'
+ icon_state = "elysium_brigade_m11"
+ item_state = "elysium_brigade_m11"
+
+/obj/item/clothing/suit/armor/solfed/elysium/jacket
+ name = "Elysium Brigade formal jacket"
+ desc = "The dark green vest of the Solar Federation's Elysium Brigade. It has a Solar Federation flag on the shoulder."
+ icon = 'mod_celadon/solfed_stuff/icons/elysium_brigade.dmi'
+ mob_overlay_icon = 'mod_celadon/solfed_stuff/icons/mob/suit.dmi'
+ icon_state = "elysium_brigade_jacket"
+ item_state = "elysium_brigade_jacket"
+ body_parts_covered = CHEST|GROIN|ARMS
+ cold_protection = CHEST|GROIN|ARMS
+ min_cold_protection_temperature = ARMOR_MIN_TEMP_PROTECT
+ heat_protection = CHEST|GROIN|ARMS
+ max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT
+ resistance_flags = NONE
+ armor = list("melee" = 30, "bullet" = 25, "laser" = 25, "energy" = 30, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
+
+/obj/item/clothing/suit/armor/solfed/elysium/formal
+ name = "Elysium Brigade formal form"
+ desc = "ormal uniforms worn by members of the Solar Federation Elysium Brigade. It features the Solar Federation flag on the shoulder. It is usually worn by Captains or when you want to look more dressy."
+ icon = 'mod_celadon/solfed_stuff/icons/elysium_brigade.dmi'
+ mob_overlay_icon = 'mod_celadon/solfed_stuff/icons/mob/suit.dmi'
+ icon_state = "elysium_brigade_formal"
+ item_state = "elysium_brigade_formal"
+ body_parts_covered = CHEST|GROIN|ARMS|LEGS
+ cold_protection = CHEST|GROIN|ARMS|LEGS
+ min_cold_protection_temperature = ARMOR_MIN_TEMP_PROTECT
+ heat_protection = CHEST|GROIN|ARMS|LEGS
+ max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT
+ resistance_flags = NONE
+ armor = list("melee" = 35, "bullet" = 30, "laser" = 30, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
+
+/obj/item/clothing/head/helmet/space/hardsuit/solfed/elysium
+ name = "Elysium Brigade hardsuit helmet"
+ desc = "This is the hardsuit helmet of the Solar Federation Elysium Brigade. It's a dark green color, and its panes glow green."
+ icon = 'mod_celadon/solfed_stuff/icons/elysium_brigade.dmi'
+ mob_overlay_icon = 'mod_celadon/solfed_stuff/icons/mob/head.dmi'
+ icon_state = "elysium_brigade_rig_head"
+ item_state = "elysium_brigade_rig_head"
+ armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 50, "bio" = 100, "rad" = 75, "fire" = 75, "acid" = 75)
+ actions_types = list()
+ hardsuit_type = "elysium"
+ resistance_flags = FIRE_PROOF
+
+/obj/item/clothing/suit/space/hardsuit/solfed/elysium
+ name = "Elysium Brigade hardsuit"
+ desc = "This is a hardsuit of the Solar Federation Elysium Brigade. It is in dark green colors and has the Solar Federation flag on its back."
+ icon = 'mod_celadon/solfed_stuff/icons/elysium_brigade.dmi'
+ mob_overlay_icon = 'mod_celadon/solfed_stuff/icons/mob/suit.dmi'
+ icon_state = "elysium_brigade_rig"
+ item_state = "elysium_brigade_rig"
+ hardsuit_type = "elysium"
+ armor = list("melee" = 30, "bullet" = 30, "laser" = 30, "energy" = 30, "bomb" = 40, "bio" = 100, "rad" = 75, "fire" = 75, "acid" = 75)
+ helmettype = /obj/item/clothing/head/helmet/space/hardsuit/solfed/elysium
+ resistance_flags = FIRE_PROOF
diff --git a/mod_celadon/solfed_stuff/icons/elysium_brigade.dmi b/mod_celadon/solfed_stuff/icons/elysium_brigade.dmi
new file mode 100644
index 000000000000..d3c604b29348
Binary files /dev/null and b/mod_celadon/solfed_stuff/icons/elysium_brigade.dmi differ
diff --git a/mod_celadon/solfed_stuff/icons/mob/belt.dmi b/mod_celadon/solfed_stuff/icons/mob/belt.dmi
new file mode 100644
index 000000000000..3aef49500f6f
Binary files /dev/null and b/mod_celadon/solfed_stuff/icons/mob/belt.dmi differ
diff --git a/mod_celadon/solfed_stuff/icons/mob/head.dmi b/mod_celadon/solfed_stuff/icons/mob/head.dmi
new file mode 100644
index 000000000000..ff2346dfaf44
Binary files /dev/null and b/mod_celadon/solfed_stuff/icons/mob/head.dmi differ
diff --git a/mod_celadon/solfed_stuff/icons/mob/neck.dmi b/mod_celadon/solfed_stuff/icons/mob/neck.dmi
new file mode 100644
index 000000000000..28f30d7552b0
Binary files /dev/null and b/mod_celadon/solfed_stuff/icons/mob/neck.dmi differ
diff --git a/mod_celadon/solfed_stuff/icons/mob/sol_fed_banner_lefthand.dmi b/mod_celadon/solfed_stuff/icons/mob/sol_fed_banner_lefthand.dmi
new file mode 100644
index 000000000000..b75955b9a6fc
Binary files /dev/null and b/mod_celadon/solfed_stuff/icons/mob/sol_fed_banner_lefthand.dmi differ
diff --git a/mod_celadon/solfed_stuff/icons/mob/sol_fed_banner_righthand.dmi b/mod_celadon/solfed_stuff/icons/mob/sol_fed_banner_righthand.dmi
new file mode 100644
index 000000000000..cd87fc252220
Binary files /dev/null and b/mod_celadon/solfed_stuff/icons/mob/sol_fed_banner_righthand.dmi differ
diff --git a/mod_celadon/solfed_stuff/icons/mob/suit.dmi b/mod_celadon/solfed_stuff/icons/mob/suit.dmi
new file mode 100644
index 000000000000..fe2d429c7f69
Binary files /dev/null and b/mod_celadon/solfed_stuff/icons/mob/suit.dmi differ
diff --git a/mod_celadon/solfed_stuff/icons/mob/under.dmi b/mod_celadon/solfed_stuff/icons/mob/under.dmi
new file mode 100644
index 000000000000..603f6dc31e9d
Binary files /dev/null and b/mod_celadon/solfed_stuff/icons/mob/under.dmi differ
diff --git a/mod_celadon/solfed_stuff/icons/sol_fed_logo.dmi b/mod_celadon/solfed_stuff/icons/sol_fed_logo.dmi
new file mode 100644
index 000000000000..c37428f56b30
Binary files /dev/null and b/mod_celadon/solfed_stuff/icons/sol_fed_logo.dmi differ
diff --git a/mod_celadon/solfed_stuff/icons/sol_fed_patriots.dmi b/mod_celadon/solfed_stuff/icons/sol_fed_patriots.dmi
new file mode 100644
index 000000000000..75ee15575735
Binary files /dev/null and b/mod_celadon/solfed_stuff/icons/sol_fed_patriots.dmi differ
diff --git a/mod_celadon/sound/zvuk-padayuschego-dereva.ogg b/mod_celadon/sound/zvuk-padayuschego-dereva.ogg
new file mode 100644
index 000000000000..951c09891e5c
Binary files /dev/null and b/mod_celadon/sound/zvuk-padayuschego-dereva.ogg differ
diff --git a/mod_celadon/stamps/README.md b/mod_celadon/stamps/README.md
new file mode 100644
index 000000000000..8f2a3d389b7e
--- /dev/null
+++ b/mod_celadon/stamps/README.md
@@ -0,0 +1,84 @@
+
+#### Список PRов
+
+- https://github.com/CeladonSS13/Shiptest/pulls/#####
+
+
+
+## Штампы
+
+ID мода: CELADON_STAMPS
+
+
+### Описание мода
+
+Этот мод добавляет новые штампы.
+
+
+### Изменения *кор кода*
+
+- ADD : `code\modules\asset_cache\asset_list_items.dm` - добавлены новые штампы
+
+
+### Оверрайды
+
+- Отсутствуют
+
+
+### Дефайны
+
+- Отсутствуют
+
+
+### Используемые файлы, не содержащиеся в модпаке
+
+- Отсутствуют
+
+
+### Авторы
+
+Kottason, MrCat15352
+
diff --git a/mod_celadon/stamps/_stamps.dm b/mod_celadon/stamps/_stamps.dm
new file mode 100644
index 000000000000..ecb228ea04bb
--- /dev/null
+++ b/mod_celadon/stamps/_stamps.dm
@@ -0,0 +1,9 @@
+/datum/modpack/stamps
+ /// Строковое имя модпака. Используется для поиска других модпаков в init.
+ name = "Stamps"
+ /// Строковое описание для модпака. Может использоваться для списка глаголов модпака в качестве описания.
+ desc = "Добавляет новые штампы всем фракциям в том числе и Элизиуму."
+ /// Строка с авторами этого модпака.
+ author = "Kottason, MrCat15352"
+
+///**********************************************************************///
diff --git a/mod_celadon/stamps/_stamps.dme b/mod_celadon/stamps/_stamps.dme
new file mode 100644
index 000000000000..6744b921da7c
--- /dev/null
+++ b/mod_celadon/stamps/_stamps.dme
@@ -0,0 +1,8 @@
+#ifndef MODPACK_CELADON_STAMPS
+#define MODPACK_CELADON_STAMPS
+
+#include "_stamps.dm"
+
+#include "code/stamps.dm"
+
+#endif
diff --git a/mod_celadon/stamps/code/stamps.dm b/mod_celadon/stamps/code/stamps.dm
new file mode 100644
index 000000000000..be0d231001cc
--- /dev/null
+++ b/mod_celadon/stamps/code/stamps.dm
@@ -0,0 +1,59 @@
+/obj/item/stamp/inteq/vanguard
+ name = "InteQ Vanguard stamp"
+ icon = 'mod_celadon/stamps/icons/stamps.dmi'
+ icon_state = "stamp-inteq-celadon"
+ dye_color = DYE_ORANGE
+
+/obj/item/stamp/inteq/mothership
+ name = "Inteq Mothership stamp"
+ icon = 'mod_celadon/stamps/icons/stamps.dmi'
+ icon_state = "inteq-mothership-stamp"
+ dye_color = DYE_ORANGE
+
+/obj/item/stamp/solfed/commander
+ name = "Solfed Corps Commander stamp"
+ icon = 'mod_celadon/stamps/icons/stamps.dmi'
+ icon_state = "solfed-corps-commander-stamp"
+ dye_color = DYE_YELLOW
+
+/obj/item/stamp/solfed/captain
+ name = "Solfed Captain stamp"
+ icon = 'mod_celadon/stamps/icons/stamps.dmi'
+ icon_state = "solfed-captain"
+ dye_color = DYE_YELLOW
+
+/obj/item/stamp/elysium/brigade_captain
+ name = "Elysium Brigade captain stamp"
+ icon = 'mod_celadon/stamps/icons/stamps.dmi'
+ icon_state = "elysium-brigade-captain-stamp"
+ dye_color = DYE_GREEN
+
+/obj/item/stamp/elysium/republic
+ name = "Elysium Republic stamp"
+ icon = 'mod_celadon/stamps/icons/stamps.dmi'
+ icon_state = "elysium-republic-stamp"
+ dye_color = DYE_GREEN
+
+/obj/item/stamp/elysium/avanpost
+ name = "Elysium Avanpost stamp"
+ icon = 'mod_celadon/stamps/icons/stamps.dmi'
+ icon_state = "elysium-avanpost-stamp"
+ dye_color = DYE_GREEN
+
+/obj/item/stamp/nt/cent_command
+ name = "NT CentCommand stamp"
+ icon = 'mod_celadon/stamps/icons/stamps.dmi'
+ icon_state = "nt-cent-command-stamp"
+ dye_color = DYE_CENTCOM
+
+/obj/item/stamp/nt/captain
+ name = "NT Captain stamp"
+ icon = 'mod_celadon/stamps/icons/stamps.dmi'
+ icon_state = "nt-captain-stamp"
+ dye_color = DYE_BLUE
+
+/obj/item/stamp/syndicate/captain
+ name = "Syndicate Captain stamp"
+ icon = 'mod_celadon/stamps/icons/stamps.dmi'
+ icon_state = "syndicate-captain-stamp"
+ dye_color = DYE_SYNDICATE
diff --git a/mod_celadon/stamps/icons/png/elysium_brigade_stamp.png b/mod_celadon/stamps/icons/png/elysium_brigade_stamp.png
new file mode 100644
index 000000000000..774549383ea9
Binary files /dev/null and b/mod_celadon/stamps/icons/png/elysium_brigade_stamp.png differ
diff --git a/mod_celadon/stamps/icons/png/elysium_outpost_stamp.png b/mod_celadon/stamps/icons/png/elysium_outpost_stamp.png
new file mode 100644
index 000000000000..09bf6f1d851b
Binary files /dev/null and b/mod_celadon/stamps/icons/png/elysium_outpost_stamp.png differ
diff --git a/mod_celadon/stamps/icons/png/elysium_republic_stamp.png b/mod_celadon/stamps/icons/png/elysium_republic_stamp.png
new file mode 100644
index 000000000000..42ea4bd72a62
Binary files /dev/null and b/mod_celadon/stamps/icons/png/elysium_republic_stamp.png differ
diff --git a/mod_celadon/stamps/icons/png/inteq_mothership_stamp.png b/mod_celadon/stamps/icons/png/inteq_mothership_stamp.png
new file mode 100644
index 000000000000..3e625c097812
Binary files /dev/null and b/mod_celadon/stamps/icons/png/inteq_mothership_stamp.png differ
diff --git a/mod_celadon/inteq_stuff/icons/obj/large_stamp-inteq.png b/mod_celadon/stamps/icons/png/large_stamp-inteq.png
similarity index 100%
rename from mod_celadon/inteq_stuff/icons/obj/large_stamp-inteq.png
rename to mod_celadon/stamps/icons/png/large_stamp-inteq.png
diff --git a/mod_celadon/stamps/icons/png/nano_trasen_captain_stamp.png b/mod_celadon/stamps/icons/png/nano_trasen_captain_stamp.png
new file mode 100644
index 000000000000..ac4422b97ce5
Binary files /dev/null and b/mod_celadon/stamps/icons/png/nano_trasen_captain_stamp.png differ
diff --git a/mod_celadon/stamps/icons/png/nano_trasen_central_command_stamp.png b/mod_celadon/stamps/icons/png/nano_trasen_central_command_stamp.png
new file mode 100644
index 000000000000..f663152d8281
Binary files /dev/null and b/mod_celadon/stamps/icons/png/nano_trasen_central_command_stamp.png differ
diff --git a/mod_celadon/stamps/icons/png/sf_captain_stamp.png b/mod_celadon/stamps/icons/png/sf_captain_stamp.png
new file mode 100644
index 000000000000..2faac70589e4
Binary files /dev/null and b/mod_celadon/stamps/icons/png/sf_captain_stamp.png differ
diff --git a/mod_celadon/stamps/icons/png/sf_commander_stamp.png b/mod_celadon/stamps/icons/png/sf_commander_stamp.png
new file mode 100644
index 000000000000..d5080e2d599a
Binary files /dev/null and b/mod_celadon/stamps/icons/png/sf_commander_stamp.png differ
diff --git a/mod_celadon/stamps/icons/png/syndicate_captain_stamp.png b/mod_celadon/stamps/icons/png/syndicate_captain_stamp.png
new file mode 100644
index 000000000000..6ec9894a8d91
Binary files /dev/null and b/mod_celadon/stamps/icons/png/syndicate_captain_stamp.png differ
diff --git a/mod_celadon/stamps/icons/stamps.dmi b/mod_celadon/stamps/icons/stamps.dmi
new file mode 100644
index 000000000000..dae6922f0c14
Binary files /dev/null and b/mod_celadon/stamps/icons/stamps.dmi differ
diff --git a/mod_celadon/tajara/code/species/language.dm b/mod_celadon/tajara/code/species/language.dm
index 1b87cd3bfa01..0689ebc60a27 100644
--- a/mod_celadon/tajara/code/species/language.dm
+++ b/mod_celadon/tajara/code/species/language.dm
@@ -23,4 +23,5 @@
"rir", "khan", "jun", "dar", "rik", "kah", "hal", "ket", "jurl", "mah", "tul", "cresh", "azu", "ragh"
)
default_priority = 90
- icon_state = "animal"
+ icon = 'mod_celadon/tajara/icons/language.dmi'
+ icon_state = "siiktajr"
diff --git a/mod_celadon/tajara/icons/language.dmi b/mod_celadon/tajara/icons/language.dmi
new file mode 100644
index 000000000000..5ece55bc6f3a
Binary files /dev/null and b/mod_celadon/tajara/icons/language.dmi differ
diff --git a/shiptest.dme b/shiptest.dme
index 4b3b7dc0f37c..800a5ebf4dda 100644
--- a/shiptest.dme
+++ b/shiptest.dme
@@ -378,6 +378,7 @@
#include "code\controllers\subsystem\processing\fastprocess.dm"
#include "code\controllers\subsystem\processing\fluids.dm"
#include "code\controllers\subsystem\processing\instruments.dm"
+#include "code\controllers\subsystem\processing\movable_physics.dm"
#include "code\controllers\subsystem\processing\nanites.dm"
#include "code\controllers\subsystem\processing\networks.dm"
#include "code\controllers\subsystem\processing\obj.dm"
@@ -408,6 +409,7 @@
#include "code\datums\emotes.dm"
#include "code\datums\ert.dm"
#include "code\datums\forced_movement.dm"
+#include "code\datums\guestbook.dm"
#include "code\datums\holocall.dm"
#include "code\datums\http.dm"
#include "code\datums\hud.dm"
@@ -457,6 +459,7 @@
#include "code\datums\components\anti_magic.dm"
#include "code\datums\components\armor_plate.dm"
#include "code\datums\components\art.dm"
+#include "code\datums\components\bandage.dm"
#include "code\datums\components\bane.dm"
#include "code\datums\components\beetlejuice.dm"
#include "code\datums\components\bloodysoles.dm"
@@ -502,6 +505,7 @@
#include "code\datums\components\material_container.dm"
#include "code\datums\components\mirv.dm"
#include "code\datums\components\mood.dm"
+#include "code\datums\components\movable_physics.dm"
#include "code\datums\components\nanites.dm"
#include "code\datums\components\ntnet_interface.dm"
#include "code\datums\components\orbiter.dm"
@@ -613,7 +617,6 @@
#include "code\datums\diseases\advance\symptoms\itching.dm"
#include "code\datums\diseases\advance\symptoms\nanites.dm"
#include "code\datums\diseases\advance\symptoms\narcolepsy.dm"
-#include "code\datums\diseases\advance\symptoms\necropolis.dm"
#include "code\datums\diseases\advance\symptoms\oxygen.dm"
#include "code\datums\diseases\advance\symptoms\sensory.dm"
#include "code\datums\diseases\advance\symptoms\shedding.dm"
@@ -653,6 +656,7 @@
#include "code\datums\elements\update_icon_blocker.dm"
#include "code\datums\elements\update_icon_updates_onmob.dm"
#include "code\datums\elements\waddling.dm"
+#include "code\datums\elements\world_icon.dm"
#include "code\datums\elements\decals\_decals.dm"
#include "code\datums\elements\decals\blood.dm"
#include "code\datums\helper_datums\events.dm"
@@ -1682,7 +1686,6 @@
#include "code\modules\antagonists\cult\rune_spawn_action.dm"
#include "code\modules\antagonists\cult\runes.dm"
#include "code\modules\antagonists\devil\devil.dm"
-#include "code\modules\antagonists\devil\devil_helpers.dm"
#include "code\modules\antagonists\devil\imp\imp.dm"
#include "code\modules\antagonists\devil\sintouched\objectives.dm"
#include "code\modules\antagonists\devil\sintouched\sintouched.dm"
@@ -2766,6 +2769,7 @@
#include "code\modules\mob\living\simple_animal\hostile\mining_mobs\goldgrub.dm"
#include "code\modules\mob\living\simple_animal\hostile\mining_mobs\goliath.dm"
#include "code\modules\mob\living\simple_animal\hostile\mining_mobs\gutlunch.dm"
+#include "code\modules\mob\living\simple_animal\hostile\mining_mobs\hivelord_outfits.dm"
#include "code\modules\mob\living\simple_animal\hostile\mining_mobs\hivelord.dm"
#include "code\modules\mob\living\simple_animal\hostile\mining_mobs\ice demon.dm"
#include "code\modules\mob\living\simple_animal\hostile\mining_mobs\ice whelp.dm"
@@ -3006,6 +3010,7 @@
#include "code\modules\projectiles\ammunition\special\syringe.dm"
#include "code\modules\projectiles\boxes_magazines\_box_magazine.dm"
#include "code\modules\projectiles\boxes_magazines\ammo_boxes.dm"
+#include "code\modules\projectiles\boxes_magazines\generic_ammo_box.dm"
#include "code\modules\projectiles\boxes_magazines\external\gauss.dm"
#include "code\modules\projectiles\boxes_magazines\external\grenade.dm"
#include "code\modules\projectiles\boxes_magazines\external\lmg.dm"
diff --git a/sound/voice/ApproachingTG.ogg b/sound/voice/ApproachingTG.ogg
deleted file mode 100644
index 3f8bc1c48801..000000000000
Binary files a/sound/voice/ApproachingTG.ogg and /dev/null differ
diff --git a/strings/ipc_preference_adjectives.txt b/strings/ipc_preference_adjectives.txt
new file mode 100644
index 000000000000..a243b2d77fc5
--- /dev/null
+++ b/strings/ipc_preference_adjectives.txt
@@ -0,0 +1,71 @@
+Bedraggled
+Brawny
+Bulky
+Burly
+Calm
+Chaotic
+Charming
+Delicate
+Dignified
+Disgusting
+Disturbing
+Dull
+Effeminate
+Elegant
+Energetic
+Exasperated
+Exotic
+Faint
+Feisty
+Flamboyant
+Fragile
+Frail
+Friendly
+Gentle
+Hawkish
+Hefty
+Hobbling
+Hyper
+Imposing
+Jaded
+Lax
+Lean
+Limp
+Lithe
+Lopsided
+Lovely
+Mangled
+Masculine
+Messy
+Nimble
+Petite
+Pompous
+Pugnacious
+Repulsive
+Robust
+Rough
+Rusted
+Scarred
+Shifty
+Sickly
+Skittish
+Sleek
+Slender
+Slovenly
+Sluggish
+Spacy
+Stiff
+Stony
+Stylish
+Unattractive
+Unremarkable
+Unsightly
+Verbose
+Vigorous
+Waifish
+Wilted
+Wily
+Withered
+Worn-Out
+Zealous
+Zesty
diff --git a/strings/preference_adjectives.txt b/strings/preference_adjectives.txt
new file mode 100644
index 000000000000..0d67f16803f8
--- /dev/null
+++ b/strings/preference_adjectives.txt
@@ -0,0 +1,117 @@
+Angsty
+Awkward
+Bedraggled
+Blemished
+Bony
+Brawny
+Breathtaking
+Bruised
+Bulky
+Burly
+Calm
+Chaotic
+Charming
+Chubby
+Coarse
+Deformed
+Delicate
+Despondent
+Dignified
+Disgusting
+Disturbing
+Dull
+Effeminate
+Elegant
+Emaciated
+Energetic
+Energetic
+Exasperated
+Exotic
+Faint
+Feisty
+Flabby
+Flamboyant
+Fragile
+Frail
+Frazzled
+Friendly
+Gap-toothed
+Gaunt
+Gentle
+Gloomy
+Gormless
+Hawkish
+Hawkish
+Healthy
+Hefty
+Hobbling
+Hyper
+Imposing
+Inscrutable
+Jaded
+Lax
+Lean
+Limp
+Lithe
+Lopsided
+Lovely
+Malnourished
+Mangled
+Mangled
+Masculine
+Messy
+Muscular
+Nimble
+Pathetic
+Peppy
+Petite
+Pompous
+Pugnacious
+Quievering
+Radical
+Repulsive
+Robust
+Roguish
+Rough
+Scarred
+Scrawny
+Sculpted
+Shifty
+Shrewd
+Sickly
+Skittish
+Sleek
+Sleepy
+Slender
+Slimy
+Slovenly
+Sluggish
+Sly
+Smooth
+Sniveling
+Soulrendered
+Spacy
+Stiff
+Stony
+Stout
+Strapping
+Sturdy
+Stylish
+Swarthy
+Tense
+Tubular
+Unattractive
+Unblemished
+Unhealthy
+Unremarkable
+Unsightly
+Verbose
+Vigorous
+Waifish
+Wilted
+Wily
+Withered
+Worn-Out
+Wrinkly
+Zealous
+Zesty
diff --git a/tgui/packages/tgui/interfaces/Guestbook.tsx b/tgui/packages/tgui/interfaces/Guestbook.tsx
new file mode 100644
index 000000000000..d1fb09aa8499
--- /dev/null
+++ b/tgui/packages/tgui/interfaces/Guestbook.tsx
@@ -0,0 +1,74 @@
+import { useBackend } from '../backend';
+import { useLocalState } from '../backend';
+import { Stack, Button, Input, Section, Box } from '../components';
+import { Window } from '../layouts';
+
+type Info = {
+ names: NameData[];
+};
+
+type NameData = {
+ real_name: string;
+ given_name: string;
+};
+
+export const Guestbook = (props, context) => {
+ const { act, data } = useBackend(context);
+ const { names = [] } = data;
+
+ const [lastNameBeforeEdit, setLastNameBeforeEdit] = useLocalState<
+ string | null
+ >(context, 'lastNameBeforeEdit', null);
+
+ return (
+
+
+ {(!names.length && ) || (
+
+ {names.map((name) => (
+
+
+
+ ))}
+
+ )}
+
+
+ );
+};