diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_alien_nest.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_alien_nest.dmm new file mode 100644 index 0000000000..0db0ddcf34 --- /dev/null +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_alien_nest.dmm @@ -0,0 +1,2016 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/turf/template_noop, +/area/template_noop) +"ab" = ( +/turf/open/lava/smooth/lava_land_surface, +/area/lavaland/surface/outdoors) +"ac" = ( +/obj/structure/alien/resin/wall, +/obj/structure/alien/weeds, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"ad" = ( +/obj/structure/alien/weeds, +/obj/effect/decal/cleanable/blood/gibs, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"ae" = ( +/obj/structure/alien/weeds, +/mob/living/simple_animal/hostile/alien/maid, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"af" = ( +/obj/structure/alien/weeds, +/obj/structure/alien/egg/burst, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"ag" = ( +/obj/structure/alien/weeds, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"ah" = ( +/obj/structure/bed/nest, +/obj/structure/alien/weeds, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"ai" = ( +/obj/structure/alien/weeds, +/obj/structure/alien/egg, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"aj" = ( +/obj/structure/alien/weeds, +/obj/structure/bed/nest, +/obj/item/clothing/mask/facehugger/impregnated, +/obj/item/storage/backpack/clown, +/obj/item/bikehorn, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"ak" = ( +/obj/structure/alien/resin/membrane, +/obj/structure/alien/weeds, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"al" = ( +/obj/structure/alien/weeds, +/mob/living/simple_animal/hostile/alien/drone, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"am" = ( +/obj/structure/alien/weeds, +/obj/structure/bed/nest, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"an" = ( +/turf/closed/mineral/volcanic/lava_land_surface, +/area/lavaland/surface/outdoors) +"ao" = ( +/obj/structure/alien/weeds/node, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"ap" = ( +/obj/structure/bed/nest, +/obj/structure/alien/weeds, +/obj/item/clothing/mask/facehugger/impregnated, +/obj/item/clothing/glasses/night, +/obj/item/clothing/gloves/combat, +/obj/effect/decal/cleanable/blood/old, +/obj/item/clothing/under/syndicate/tacticool, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"aq" = ( +/obj/structure/alien/weeds, +/obj/structure/alien/egg/burst, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"ar" = ( +/obj/structure/alien/weeds/node, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"as" = ( +/obj/structure/alien/resin/wall, +/obj/structure/alien/weeds, +/obj/structure/alien/weeds, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"at" = ( +/obj/structure/alien/weeds, +/obj/structure/alien/resin/wall, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"au" = ( +/obj/structure/alien/weeds, +/obj/item/grown/bananapeel, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"av" = ( +/obj/structure/alien/weeds, +/mob/living/simple_animal/hostile/alien/sentinel, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"aw" = ( +/obj/structure/alien/weeds, +/obj/structure/alien/resin/membrane, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"aA" = ( +/obj/structure/alien/weeds, +/obj/item/flamethrower, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"aB" = ( +/obj/structure/alien/weeds, +/obj/item/ammo_casing/c45, +/obj/effect/decal/cleanable/blood/gibs, +/mob/living/simple_animal/hostile/alien/sentinel, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"aC" = ( +/obj/structure/alien/weeds, +/obj/item/ammo_casing/c45{ + pixel_x = -6 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"aE" = ( +/obj/structure/alien/weeds, +/obj/effect/decal/cleanable/ash, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"aF" = ( +/obj/structure/alien/weeds, +/mob/living/simple_animal/hostile/alien, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"aG" = ( +/obj/structure/alien/weeds, +/obj/structure/mecha_wreckage/ripley, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"aH" = ( +/obj/structure/alien/weeds, +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"aI" = ( +/obj/structure/alien/weeds, +/obj/effect/decal/cleanable/vomit/old, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"aJ" = ( +/obj/structure/alien/weeds, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"aL" = ( +/obj/structure/alien/weeds, +/obj/item/tank/internals/plasma, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"aM" = ( +/obj/structure/alien/weeds, +/obj/effect/decal/cleanable/xenoblood, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"aQ" = ( +/obj/structure/alien/weeds, +/obj/structure/bed/nest, +/obj/item/clothing/mask/facehugger/impregnated, +/obj/item/clothing/suit/bio_suit/security, +/obj/item/clothing/head/bio_hood/security, +/obj/item/clothing/mask/breath, +/obj/item/flashlight/seclite, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"aS" = ( +/obj/structure/alien/weeds, +/obj/structure/bed/nest, +/obj/item/clothing/mask/facehugger/impregnated, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"aT" = ( +/obj/structure/alien/weeds, +/obj/item/twohanded/required/chainsaw, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"aU" = ( +/obj/structure/alien/weeds, +/obj/structure/bed/nest, +/obj/item/twohanded/fireaxe/boneaxe, +/obj/item/clothing/head/helmet/gladiator, +/obj/item/clothing/mask/facehugger/impregnated, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"aV" = ( +/obj/structure/alien/weeds, +/obj/structure/bed/nest, +/obj/item/clothing/mask/facehugger/impregnated, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"aW" = ( +/obj/structure/alien/resin/wall, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"aX" = ( +/obj/structure/alien/weeds, +/obj/effect/gibspawner/xeno, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"aY" = ( +/obj/structure/alien/weeds, +/obj/effect/decal/cleanable/blood/gibs, +/mob/living/simple_animal/hostile/alien/drone, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"aZ" = ( +/turf/closed/indestructible/riveted/boss, +/area/ruin/unpowered/xenonest) +"ba" = ( +/obj/structure/stone_tile/slab, +/turf/open/indestructible/boss/air, +/area/ruin/unpowered/xenonest) +"bb" = ( +/obj/structure/stone_tile/cracked{ + dir = 4 + }, +/obj/structure/stone_tile, +/obj/structure/stone_tile{ + dir = 1 + }, +/obj/structure/stone_tile{ + dir = 8 + }, +/obj/item/flashlight/lantern, +/turf/open/indestructible/boss/air, +/area/ruin/unpowered/xenonest) +"bc" = ( +/obj/structure/stone_tile/block, +/obj/structure/stone_tile{ + dir = 1 + }, +/obj/structure/stone_tile{ + dir = 4 + }, +/turf/open/indestructible/boss/air, +/area/ruin/unpowered/xenonest) +"bd" = ( +/obj/structure/stone_tile/block, +/obj/structure/stone_tile{ + dir = 4 + }, +/obj/structure/stone_tile/cracked{ + dir = 1 + }, +/obj/effect/decal/cleanable/xenoblood, +/turf/open/indestructible/boss/air, +/area/ruin/unpowered/xenonest) +"be" = ( +/obj/structure/stone_tile/block, +/obj/structure/stone_tile{ + dir = 4 + }, +/obj/structure/stone_tile{ + dir = 1 + }, +/turf/open/indestructible/boss/air, +/area/ruin/unpowered/xenonest) +"bf" = ( +/obj/structure/stone_tile, +/obj/structure/stone_tile{ + dir = 1 + }, +/obj/structure/stone_tile{ + dir = 8 + }, +/obj/structure/stone_tile{ + dir = 4 + }, +/obj/item/flashlight/lantern, +/turf/open/indestructible/boss/air, +/area/ruin/unpowered/xenonest) +"bg" = ( +/obj/structure/alien/weeds, +/obj/item/clothing/mask/facehugger/dead, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"bh" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 4 + }, +/obj/structure/stone_tile/cracked{ + dir = 4 + }, +/obj/structure/stone_tile{ + dir = 8 + }, +/turf/open/indestructible/boss/air, +/area/ruin/unpowered/xenonest) +"bi" = ( +/obj/structure/alien/weeds, +/obj/structure/bed/nest, +/obj/item/clothing/mask/facehugger/impregnated, +/obj/item/book_of_babel, +/obj/item/clothing/head/wizard/black, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"bj" = ( +/obj/structure/stone_tile/surrounding_tile/cracked, +/obj/structure/stone_tile/surrounding_tile{ + dir = 8 + }, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 1 + }, +/obj/structure/stone_tile/center/cracked, +/turf/open/chasm/lavaland, +/area/ruin/unpowered/xenonest) +"bk" = ( +/obj/structure/stone_tile/block, +/turf/open/chasm/lavaland, +/area/ruin/unpowered/xenonest) +"bl" = ( +/obj/structure/stone_tile/block{ + dir = 8 + }, +/obj/structure/stone_tile{ + dir = 1 + }, +/obj/structure/stone_tile, +/turf/open/indestructible/boss/air, +/area/ruin/unpowered/xenonest) +"bm" = ( +/obj/structure/stone_tile/slab/cracked, +/turf/open/indestructible/boss/air, +/area/ruin/unpowered/xenonest) +"bn" = ( +/obj/structure/stone_tile/block{ + dir = 4 + }, +/obj/structure/stone_tile{ + dir = 8 + }, +/obj/structure/stone_tile{ + dir = 4 + }, +/turf/open/indestructible/boss/air, +/area/ruin/unpowered/xenonest) +"bo" = ( +/obj/structure/stone_tile/surrounding_tile{ + dir = 8 + }, +/obj/structure/stone_tile/surrounding_tile{ + dir = 4 + }, +/obj/structure/stone_tile/surrounding_tile, +/obj/structure/stone_tile/center, +/turf/open/chasm/lavaland, +/area/ruin/unpowered/xenonest) +"bp" = ( +/obj/structure/stone_tile/block{ + dir = 4 + }, +/turf/open/chasm/lavaland, +/area/ruin/unpowered/xenonest) +"bq" = ( +/turf/open/chasm/lavaland, +/area/ruin/unpowered/xenonest) +"br" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 8 + }, +/obj/structure/stone_tile, +/obj/structure/stone_tile{ + dir = 1 + }, +/obj/effect/decal/cleanable/xenoblood, +/turf/open/indestructible/boss/air, +/area/ruin/unpowered/xenonest) +"bs" = ( +/obj/structure/stone_tile/block{ + dir = 8 + }, +/turf/open/chasm/lavaland, +/area/ruin/unpowered/xenonest) +"bt" = ( +/obj/structure/stone_tile/surrounding_tile{ + dir = 1 + }, +/obj/structure/stone_tile/surrounding_tile, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 4 + }, +/obj/structure/stone_tile/center, +/turf/open/chasm/lavaland, +/area/ruin/unpowered/xenonest) +"bu" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 1 + }, +/turf/open/chasm/lavaland, +/area/ruin/unpowered/xenonest) +"bv" = ( +/obj/structure/stone_tile/block{ + dir = 8 + }, +/obj/structure/stone_tile{ + dir = 1 + }, +/obj/structure/stone_tile/cracked, +/turf/open/indestructible/boss/air, +/area/ruin/unpowered/xenonest) +"bw" = ( +/obj/structure/stone_tile/cracked{ + dir = 4 + }, +/obj/structure/stone_tile/cracked, +/obj/structure/stone_tile{ + dir = 1 + }, +/obj/structure/stone_tile{ + dir = 8 + }, +/obj/item/flashlight/lantern, +/turf/open/indestructible/boss/air, +/area/ruin/unpowered/xenonest) +"bx" = ( +/obj/structure/stone_tile/block{ + dir = 1 + }, +/obj/structure/stone_tile, +/obj/structure/stone_tile{ + dir = 8 + }, +/obj/effect/decal/cleanable/xenoblood, +/turf/open/indestructible/boss/air, +/area/ruin/unpowered/xenonest) +"by" = ( +/obj/structure/stone_tile/block{ + dir = 1 + }, +/obj/structure/stone_tile, +/obj/structure/stone_tile/cracked{ + dir = 8 + }, +/turf/open/indestructible/boss/air, +/area/ruin/unpowered/xenonest) +"bz" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 1 + }, +/obj/structure/stone_tile/cracked, +/obj/structure/stone_tile{ + dir = 8 + }, +/turf/open/indestructible/boss/air, +/area/ruin/unpowered/xenonest) +"bA" = ( +/obj/structure/stone_tile/cracked{ + dir = 1 + }, +/obj/structure/stone_tile{ + dir = 4 + }, +/obj/structure/stone_tile{ + dir = 8 + }, +/obj/structure/stone_tile, +/obj/item/flashlight/lantern, +/turf/open/indestructible/boss/air, +/area/ruin/unpowered/xenonest) +"bB" = ( +/obj/structure/alien/weeds, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"bC" = ( +/obj/structure/alien/weeds, +/obj/structure/bed/nest, +/mob/living/simple_animal/hostile/alien, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"bD" = ( +/obj/structure/alien/weeds, +/turf/template_noop, +/area/ruin/unpowered/xenonest) +"bE" = ( +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 4 + }, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 8 + }, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 1 + }, +/obj/structure/stone_tile/center/cracked, +/turf/open/chasm/lavaland, +/area/ruin/unpowered/xenonest) +"dE" = ( +/obj/structure/alien/weeds, +/obj/structure/bed/nest, +/obj/item/healthanalyzer, +/obj/item/clothing/suit/bio_suit/scientist, +/obj/item/reagent_containers/hypospray/medipen, +/obj/item/clothing/mask/facehugger/impregnated, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"iA" = ( +/obj/structure/alien/weeds, +/obj/structure/bed/nest, +/obj/item/clothing/head/welding, +/obj/item/weldingtool/largetank, +/obj/item/clothing/mask/facehugger/impregnated, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"kp" = ( +/obj/structure/alien/weeds, +/obj/item/reagent_containers/syringe/alien, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"lG" = ( +/obj/structure/alien/weeds, +/obj/effect/mob_spawn/alien/corpse/humanoid/drone, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"pE" = ( +/obj/structure/alien/weeds/node, +/mob/living/simple_animal/hostile/alien/queen/large{ + desc = "A gigantic alien who is in charge of the hive and all of its loyal servants."; + name = "alien queen"; + pixel_x = -16; + plants_off = 1 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"yf" = ( +/obj/structure/alien/weeds/node, +/mob/living/simple_animal/hostile/alien/sentinel, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"Dd" = ( +/obj/structure/alien/weeds, +/obj/effect/decal/cleanable/blood/gibs, +/obj/item/storage/backpack/duffelbag/sec/surgery, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"JM" = ( +/obj/structure/alien/weeds/node, +/mob/living/simple_animal/hostile/alien/drone, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"Uh" = ( +/obj/structure/alien/weeds, +/obj/item/xenos_claw, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"Vi" = ( +/obj/structure/bed/nest, +/obj/structure/alien/weeds, +/obj/item/clothing/suit/space/hardsuit/mining, +/obj/item/clothing/gloves/color/black, +/obj/item/radio/headset/headset_cargo/mining, +/obj/item/clothing/mask/facehugger/impregnated, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"VZ" = ( +/obj/structure/alien/weeds, +/obj/effect/gibspawner/human, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) +"ZT" = ( +/obj/effect/mob_spawn/human/corpse/syndicatesoldier, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/xenonest) + +(1,1,1) = {" +aa +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(2,1,1) = {" +ab +ab +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(3,1,1) = {" +ab +ac +ac +aj +ac +am +ac +ac +ac +ac +ab +ab +ac +ac +ac +aU +ak +ag +ar +aH +aJ +ac +ac +ac +ac +aS +ak +am +ak +am +ac +ac +ac +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(4,1,1) = {" +ab +ac +ad +ad +af +ag +ak +ag +ag +ac +ac +ac +ac +ag +af +ag +aE +ag +aF +ac +ag +ag +aL +ag +ag +VZ +ag +ag +ag +ar +ag +af +ac +ac +ac +ac +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(5,1,1) = {" +ab +ac +ae +ak +ar +ag +au +ag +ag +av +ac +ag +ag +ag +ar +ag +ac +ac +ac +ac +ag +ag +ag +ar +ag +af +ac +ac +ac +ag +ag +ag +ag +ag +ag +ac +ac +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(6,1,1) = {" +ab +ac +af +ak +ag +al +ac +ac +ag +ar +ag +ag +aA +ag +ac +ac +ac +an +an +ac +ac +ac +aM +ag +ac +ac +ac +an +ac +al +ac +ag +ag +ao +ag +ag +ac +ac +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(7,1,1) = {" +ab +ac +ag +ag +ag +ag +ag +ag +ag +ag +ac +ac +ag +ac +ac +ac +an +an +an +an +an +ac +ag +ac +ac +an +an +an +ac +ac +ac +ac +ac +ZT +ac +ag +ag +ac +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(8,1,1) = {" +ab +ac +ac +am +ac +af +ar +ag +ac +ac +ac +am +ag +ag +ag +ac +ac +an +an +an +an +an +an +an +an +an +an +an +an +an +an +an +ac +ac +ac +ag +ag +ac +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(9,1,1) = {" +ab +ab +ac +ac +ac +ac +am +ac +ac +an +ac +ac +ag +ar +ag +ag +ac +ac +ac +an +an +an +an +an +an +an +ac +ac +ac +ac +an +an +an +an +ac +ac +ar +ac +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(10,1,1) = {" +aa +ab +ab +an +an +ac +ac +ac +an +an +an +ac +ac +ac +ag +ag +ag +ag +ac +an +an +an +an +an +ac +ac +ac +bi +aY +ac +ac +ac +an +an +ac +ag +ag +ac +ac +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(11,1,1) = {" +aa +ab +ab +ab +an +an +an +an +an +an +an +an +an +ac +ag +ac +ac +ar +ac +ac +an +an +an +ac +ac +am +ac +ac +aJ +ak +af +ac +ac +an +ac +ag +ag +ag +ac +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +"} +(12,1,1) = {" +aa +ab +ab +ab +ab +ab +an +an +an +an +an +an +an +ac +ac +ac +aF +ag +ag +ac +ac +an +an +ac +am +ag +ar +ag +ag +ag +ag +aF +ac +an +ac +ac +ag +ag +ac +ac +ac +ab +aa +aa +aa +aa +aa +aa +aa +"} +(13,1,1) = {" +aa +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +an +an +an +an +ac +ac +aG +ag +iA +ac +an +an +ac +ac +aJ +ag +ag +ac +ac +ar +ai +ac +an +an +ac +ag +ar +ag +ag +ac +ac +aa +aa +aa +aa +aa +aa +aa +"} +(14,1,1) = {" +ab +ab +ac +ac +af +ag +af +aw +ag +am +ac +an +an +an +an +an +ag +ag +ag +ak +ac +an +an +ac +Dd +ai +ak +ag +af +ac +lG +ac +ac +an +an +ac +ac +ag +ag +ag +dE +ac +aa +aa +aa +aa +aa +aa +aa +"} +(15,1,1) = {" +ab +ac +ac +ai +ag +at +ai +ac +ag +at +ac +ac +ac +ac +an +an +ac +ac +ar +af +ac +ac +an +ac +aV +ac +ac +ac +ac +av +ag +bg +ac +ac +an +an +ac +ac +ac +ag +ac +ac +aa +aa +aa +aa +aa +aa +aa +"} +(16,1,1) = {" +ab +ac +af +ag +ar +al +ag +ag +ag +ad +ag +ag +ag +ac +ac +an +an +ac +ag +aI +am +ac +an +ac +ac +ac +an +an +ac +ac +af +ag +ag +ac +an +an +an +an +ac +ar +bC +ac +aa +aa +aa +aa +aa +aa +aa +"} +(17,1,1) = {" +ab +ac +af +ag +af +ag +af +ac +ag +af +ao +aB +ag +ag +ac +an +an +ac +ag +ad +ac +ac +an +an +an +an +an +an +an +ac +ac +ac +ar +ac +an +an +an +ac +ac +ag +ak +ac +aa +aa +aa +aa +aa +aa +aa +"} +(18,1,1) = {" +ab +ac +ac +ag +ac +ak +ac +ac +ag +at +aQ +at +ag +aw +ac +ac +an +ac +ak +ag +ac +an +an +an +an +an +an +an +an +an +ac +ag +aX +ac +an +an +an +ac +ag +ag +am +ac +aa +aa +aa +aa +aa +aa +aa +"} +(19,1,1) = {" +ab +ac +ah +af +ah +JM +Vi +ak +ag +ag +at +ag +ag +ag +af +ac +ac +ac +yf +ag +ac +ac +an +an +an +an +an +an +an +ab +ab +ac +ag +ac +ab +ab +an +ac +ar +bB +ac +ac +aa +aa +aa +ac +bD +bD +aa +"} +(20,1,1) = {" +ab +ac +ac +ah +ac +ah +ag +ac +ag +ag +ag +ag +ag +ar +ag +ak +ar +ag +ag +ag +ag +ac +ac +ac +ac +ac +ac +an +ab +ab +ab +ac +ag +ac +ab +ab +ab +ac +ag +ag +ac +ac +aa +aa +aa +aa +ac +bD +aa +"} +(21,1,1) = {" +ab +ac +ah +ao +ah +ac +ag +ag +ag +ag +pE +ag +at +ag +aC +ak +ar +ag +ag +ag +ag +ag +ak +ag +ac +am +ac +an +ab +aZ +aZ +aZ +bm +aZ +aZ +aZ +ab +ac +ag +ag +ag +ac +ac +ac +aa +aa +ac +bD +bD +"} +(22,1,1) = {" +ab +ac +ac +ap +ac +ah +af +ac +at +ag +ag +ag +ag +ag +ag +ac +ac +ac +ac +ag +ag +ar +ag +ag +aT +af +ac +aW +ab +aZ +bb +bh +bn +bn +bw +aZ +ab +ac +ag +ag +ar +ag +af +ac +ac +ac +aW +bD +bD +"} +(23,1,1) = {" +ab +ac +ah +aq +ah +ar +ah +ak +kp +at +ag +ag +aw +af +ac +ac +ab +ab +ac +ac +ac +ac +ag +ag +ag +ar +ag +ac +ac +aZ +bc +bj +bp +bt +bx +aZ +ab +ac +ac +ag +ag +ag +ag +ag +ac +ar +ag +bD +bD +"} +(24,1,1) = {" +ab +ac +ac +ag +ac +ak +ac +ac +at +ag +av +ag +ac +ac +ac +ab +ab +ab +ab +ab +ab +ac +ac +ac +aF +ag +aX +ag +ag +ba +bd +bk +bq +bu +by +aZ +ab +ab +ac +ac +ac +ac +ag +ag +ac +ar +ag +bD +bD +"} +(25,1,1) = {" +ab +ac +ai +ag +JM +ag +ag +ac +ag +ar +ag +ai +ac +ab +ab +ab +aa +aa +aa +aa +ab +ab +ab +ac +ac +ac +ag +Uh +ag +aZ +be +bo +bs +bE +bz +aZ +ab +ab +ab +aa +aa +ac +ac +ac +ac +ac +ac +bD +bD +"} +(26,1,1) = {" +ab +ac +ac +af +ai +af +ag +ag +ag +ag +aw +am +ac +ab +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ac +ac +ac +ac +aZ +bf +bl +br +bv +bA +aZ +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +ac +ac +ac +"} +(27,1,1) = {" +ab +ab +ac +ac +as +at +at +ac +ac +ac +ac +ac +ac +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +aZ +aZ +aZ +aZ +aZ +aZ +aZ +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(28,1,1) = {" +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_ufo_crash.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_ufo_crash.dmm index 5f76cdb32c..ebad4a2c11 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_ufo_crash.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_ufo_crash.dmm @@ -16,12 +16,12 @@ team_number = 100 }, /turf/open/floor/plating/abductor{ - initial_gas_mix = "o2=16;n2=23;TEMP=300" + initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) "k" = ( /turf/open/floor/plating/abductor{ - initial_gas_mix = "o2=16;n2=23;TEMP=300" + initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) "l" = ( @@ -29,59 +29,59 @@ team_number = 100 }, /turf/open/floor/plating/abductor{ - initial_gas_mix = "o2=16;n2=23;TEMP=300" + initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) "o" = ( /obj/item/hemostat/alien, /turf/open/floor/plating/abductor{ - initial_gas_mix = "o2=16;n2=23;TEMP=300" + initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) "p" = ( /obj/effect/mob_spawn/human/abductor, /turf/open/floor/plating/abductor{ - initial_gas_mix = "o2=16;n2=23;TEMP=300" + initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) "q" = ( /obj/structure/closet/abductor, /turf/open/floor/plating/abductor{ - initial_gas_mix = "o2=16;n2=23;TEMP=300" + initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) "s" = ( /obj/structure/table/optable/abductor, /obj/item/cautery/alien, /turf/open/floor/plating/abductor{ - initial_gas_mix = "o2=16;n2=23;TEMP=300" + initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) "t" = ( /obj/structure/table/abductor, /obj/item/storage/box/alienhandcuffs, /turf/open/floor/plating/abductor{ - initial_gas_mix = "o2=16;n2=23;TEMP=300" + initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) "v" = ( /obj/item/scalpel/alien, /obj/item/surgical_drapes, /turf/open/floor/plating/abductor{ - initial_gas_mix = "o2=16;n2=23;TEMP=300" + initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) "w" = ( /obj/item/retractor/alien, /obj/item/paper/guides/antag/abductor, /turf/open/floor/plating/abductor{ - initial_gas_mix = "o2=16;n2=23;TEMP=300" + initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) "y" = ( /obj/machinery/abductor/gland_dispenser, /turf/open/floor/plating/abductor{ - initial_gas_mix = "o2=16;n2=23;TEMP=300" + initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) "z" = ( @@ -89,13 +89,13 @@ /obj/item/surgicaldrill/alien, /obj/item/circular_saw/alien, /turf/open/floor/plating/abductor{ - initial_gas_mix = "o2=16;n2=23;TEMP=300" + initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) "A" = ( /obj/structure/bed/abductor, /turf/open/floor/plating/abductor{ - initial_gas_mix = "o2=16;n2=23;TEMP=300" + initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -458,4 +458,4 @@ b b b a -"} +"} \ No newline at end of file diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm deleted file mode 100644 index de17c80b51..0000000000 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm +++ /dev/null @@ -1,1561 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/template_noop, -/area/template_noop) -"b" = ( -/obj/structure/alien/weeds, -/obj/structure/alien/resin/wall, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/xenonest) -"d" = ( -/obj/structure/alien/resin/wall, -/obj/structure/alien/weeds, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/xenonest) -"e" = ( -/obj/structure/alien/weeds, -/obj/structure/alien/egg/burst, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/xenonest) -"f" = ( -/obj/structure/alien/weeds, -/obj/structure/alien/weeds, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/xenonest) -"g" = ( -/obj/structure/alien/weeds, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/xenonest) -"i" = ( -/obj/structure/alien/weeds, -/obj/structure/bed/nest, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/xenonest) -"j" = ( -/obj/structure/alien/weeds, -/mob/living/simple_animal/hostile/alien, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/xenonest) -"l" = ( -/obj/structure/alien/weeds/node, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/xenonest) -"o" = ( -/obj/structure/alien/weeds, -/obj/structure/bed/nest, -/obj/effect/decal/cleanable/blood/gibs, -/obj/item/clothing/mask/facehugger/impregnated, -/obj/item/gun/ballistic/automatic/pistol, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/xenonest) -"r" = ( -/obj/structure/alien/weeds, -/obj/structure/alien/resin/wall, -/obj/structure/alien/resin/wall, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/xenonest) -"s" = ( -/obj/structure/alien/weeds, -/obj/structure/alien/egg, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/xenonest) -"t" = ( -/obj/structure/alien/weeds, -/mob/living/simple_animal/hostile/alien/sentinel, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/xenonest) -"u" = ( -/obj/structure/alien/weeds, -/obj/effect/decal/cleanable/blood/gibs, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/xenonest) -"v" = ( -/obj/structure/alien/weeds/node, -/obj/effect/decal/cleanable/blood, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/xenonest) -"w" = ( -/obj/structure/alien/weeds, -/obj/structure/bed/nest, -/obj/structure/alien/resin/wall, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/xenonest) -"y" = ( -/obj/structure/alien/weeds/node, -/obj/structure/alien/resin/wall, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/xenonest) -"z" = ( -/obj/structure/alien/weeds, -/obj/structure/bed/nest, -/obj/effect/decal/cleanable/blood/gibs, -/obj/item/clothing/mask/facehugger/impregnated, -/obj/item/clothing/under/rank/security, -/obj/item/clothing/suit/armor/vest, -/obj/item/melee/baton/loaded, -/obj/item/clothing/head/helmet, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/xenonest) -"B" = ( -/obj/structure/alien/weeds, -/obj/structure/alien/egg/burst, -/obj/effect/decal/cleanable/blood/gibs, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/xenonest) -"C" = ( -/obj/structure/alien/weeds, -/obj/structure/alien/egg/burst, -/obj/effect/decal/cleanable/blood, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/xenonest) -"E" = ( -/obj/structure/alien/weeds, -/mob/living/simple_animal/hostile/alien/drone{ - plants_off = 1 - }, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/xenonest) -"F" = ( -/obj/structure/alien/weeds, -/mob/living/simple_animal/hostile/alien/queen/large{ - desc = "A gigantic alien who is in charge of the hive and all of its loyal servants."; - name = "alien queen"; - pixel_x = -16; - plants_off = 1 - }, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/xenonest) -"G" = ( -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors) -"H" = ( -/obj/structure/alien/weeds, -/obj/effect/decal/cleanable/blood, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/xenonest) -"I" = ( -/obj/structure/alien/weeds, -/obj/structure/bed/nest, -/obj/effect/decal/cleanable/blood/gibs, -/obj/effect/decal/cleanable/blood, -/obj/item/clothing/mask/facehugger/impregnated, -/obj/item/clothing/under/syndicate, -/obj/item/clothing/glasses/night, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/xenonest) -"K" = ( -/obj/structure/alien/weeds/node, -/mob/living/simple_animal/hostile/alien, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/xenonest) -"L" = ( -/obj/structure/alien/weeds/node, -/mob/living/simple_animal/hostile/alien/drone{ - plants_off = 1 - }, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/xenonest) -"M" = ( -/obj/structure/alien/weeds, -/obj/structure/bed/nest, -/obj/effect/decal/cleanable/blood/gibs, -/obj/item/tank/internals/oxygen, -/obj/item/clothing/suit/space/syndicate/orange, -/obj/item/clothing/mask/gas, -/obj/item/clothing/head/helmet/space/syndicate/orange, -/obj/item/clothing/mask/facehugger/impregnated, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/xenonest) -"O" = ( -/obj/structure/alien/weeds/node, -/turf/template_noop, -/area/ruin/unpowered/xenonest) -"Q" = ( -/obj/structure/alien/weeds, -/obj/effect/decal/cleanable/blood, -/mob/living/simple_animal/hostile/alien/drone{ - plants_off = 1 - }, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/xenonest) -"R" = ( -/obj/structure/alien/weeds, -/turf/template_noop, -/area/ruin/unpowered/xenonest) - -(1,1,1) = {" -a -a -a -G -G -G -G -G -G -G -G -G -G -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(2,1,1) = {" -a -a -a -G -b -b -b -b -b -b -b -b -G -G -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(3,1,1) = {" -a -a -G -G -b -g -e -e -b -g -g -b -b -G -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(4,1,1) = {" -a -a -G -b -b -g -g -g -g -E -g -e -b -G -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(5,1,1) = {" -a -a -G -b -g -g -y -b -b -b -y -b -b -G -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(6,1,1) = {" -a -a -G -b -g -g -w -g -F -u -I -b -b -G -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(7,1,1) = {" -a -a -G -b -e -t -g -g -s -H -u -g -b -G -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(8,1,1) = {" -a -a -G -b -i -u -b -s -l -s -t -e -b -G -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(9,1,1) = {" -a -a -G -b -o -v -g -b -s -g -e -b -b -G -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(10,1,1) = {" -a -a -G -b -g -u -b -g -g -g -y -e -b -G -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(11,1,1) = {" -a -a -G -b -b -g -t -g -g -t -g -g -b -G -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -a -"} -(12,1,1) = {" -a -a -G -G -b -e -g -g -g -g -g -g -b -G -a -a -a -a -a -a -a -a -a -a -b -b -M -i -b -b -"} -(13,1,1) = {" -a -a -a -G -b -b -g -g -l -g -g -b -b -G -a -a -a -a -a -a -a -a -a -b -b -e -u -Q -g -b -"} -(14,1,1) = {" -a -a -a -G -G -b -b -g -g -g -b -b -G -G -a -a -a -a -a -a -a -a -a -b -i -g -l -g -e -b -"} -(15,1,1) = {" -a -a -a -a -G -G -b -b -b -b -b -G -G -a -a -a -a -a -a -a -a -b -b -b -g -g -g -i -b -b -"} -(16,1,1) = {" -a -a -a -a -a -G -b -l -l -b -G -G -a -a -a -a -a -a -a -a -b -b -g -j -g -e -b -b -b -a -"} -(17,1,1) = {" -a -a -a -a -a -a -b -E -g -b -b -G -b -b -b -b -b -b -b -b -b -g -g -b -b -b -b -a -a -a -"} -(18,1,1) = {" -a -a -a -a -a -a -b -g -g -E -b -b -b -g -g -g -g -g -g -b -b -g -b -b -a -a -a -a -a -a -"} -(19,1,1) = {" -a -a -a -a -a -a -b -b -g -g -g -b -g -g -g -g -g -g -l -g -g -g -b -a -a -a -a -a -a -a -"} -(20,1,1) = {" -b -b -b -b -a -a -a -b -b -g -l -g -g -g -b -b -b -b -g -g -g -b -b -a -a -a -a -a -a -a -"} -(21,1,1) = {" -b -e -i -b -b -b -b -b -b -g -g -g -g -b -b -a -a -b -b -g -g -b -a -a -a -a -a -a -a -a -"} -(22,1,1) = {" -d -f -j -g -b -b -g -g -g -g -g -g -b -b -a -a -a -b -g -g -g -b -a -a -a -a -a -a -a -a -"} -(23,1,1) = {" -d -g -e -l -g -g -g -b -b -g -b -b -b -a -a -a -a -b -g -g -b -b -a -a -a -a -a -a -a -a -"} -(24,1,1) = {" -b -b -i -i -b -b -b -b -b -g -b -a -a -a -a -a -a -b -g -g -b -a -a -a -a -a -a -a -a -a -"} -(25,1,1) = {" -a -b -b -b -b -a -a -a -b -E -b -b -a -a -a -a -a -b -g -L -b -b -b -a -a -a -a -a -a -b -"} -(26,1,1) = {" -a -a -a -a -a -a -a -a -b -g -g -b -a -a -a -a -a -b -g -g -g -g -b -b -b -a -a -a -b -b -"} -(27,1,1) = {" -a -a -a -a -a -a -b -b -b -g -g -b -b -a -a -a -a -b -b -g -g -g -g -g -b -b -b -b -y -g -"} -(28,1,1) = {" -a -a -a -a -a -b -b -B -g -g -l -e -b -a -a -a -b -b -g -g -b -b -g -g -g -b -O -R -g -g -"} -(29,1,1) = {" -a -a -a -a -a -b -z -C -j -g -e -i -b -a -a -a -b -g -g -b -b -b -b -g -l -b -O -R -g -g -"} -(30,1,1) = {" -a -a -a -a -a -b -i -u -g -i -i -b -b -a -a -a -b -g -b -b -a -a -b -b -b -b -b -y -g -g -"} -(31,1,1) = {" -a -a -a -a -a -b -b -b -g -b -b -b -a -a -a -a -b -g -b -b -a -a -a -a -a -a -a -b -g -g -"} -(32,1,1) = {" -a -a -a -a -a -a -a -b -g -b -a -a -a -a -a -a -b -g -g -b -a -a -a -a -a -a -a -b -g -g -"} -(33,1,1) = {" -a -a -a -a -a -a -a -b -g -b -a -a -a -a -a -a -b -b -l -b -a -a -a -a -a -a -b -b -g -a -"} -(34,1,1) = {" -a -a -a -a -a -a -a -b -l -b -a -a -a -a -a -a -a -b -g -b -a -a -a -a -a -a -b -a -a -a -"} -(35,1,1) = {" -a -a -a -a -a -a -a -b -g -b -a -a -a -a -a -a -a -b -g -b -a -a -a -a -a -a -a -a -a -a -"} -(36,1,1) = {" -a -a -a -a -a -a -a -b -g -b -a -a -a -a -a -a -b -b -g -b -a -a -a -a -a -a -a -a -a -a -"} -(37,1,1) = {" -a -a -a -a -a -a -a -b -g -b -a -a -a -a -a -b -b -g -g -b -a -a -a -a -a -a -a -a -a -a -"} -(38,1,1) = {" -a -a -a -a -a -a -b -b -g -b -b -b -b -b -b -b -g -g -b -b -a -a -a -a -a -a -a -a -a -a -"} -(39,1,1) = {" -a -a -a -a -a -b -b -g -g -e -b -b -g -g -K -g -g -b -b -a -a -a -a -a -a -a -a -a -a -a -"} -(40,1,1) = {" -a -a -a -a -a -b -i -E -g -g -g -g -g -b -b -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -"} -(41,1,1) = {" -a -a -a -a -b -b -e -g -l -g -e -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(42,1,1) = {" -a -a -a -a -b -e -g -g -i -i -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(43,1,1) = {" -a -a -a -a -r -b -b -b -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} diff --git a/_maps/RandomRuins/SpaceRuins/gasthelizards.dmm b/_maps/RandomRuins/SpaceRuins/gasthelizards.dmm index 9efbce19df..8956267108 100644 --- a/_maps/RandomRuins/SpaceRuins/gasthelizards.dmm +++ b/_maps/RandomRuins/SpaceRuins/gasthelizards.dmm @@ -136,20 +136,26 @@ dir = 1; layer = 2.9 }, -/turf/open/floor/plasteel{ - dir = 1; - icon_state = "blue" +/obj/effect/turf_decal/tile/blue{ + dir = 1 }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/turf/open/floor/plasteel, /area/ruin/space/has_grav/gasthelizard) "q" = ( /obj/machinery/door/window/brigdoor/northleft, /obj/machinery/atmospherics/components/binary/pump{ dir = 1 }, -/turf/open/floor/plasteel{ - dir = 1; - icon_state = "blue" +/obj/effect/turf_decal/tile/blue{ + dir = 1 }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/turf/open/floor/plasteel, /area/ruin/space/has_grav/gasthelizard) "r" = ( /turf/open/floor/plasteel/airless/dark, diff --git a/_maps/RandomRuins/SpaceRuins/turretedoutpost.dmm b/_maps/RandomRuins/SpaceRuins/turretedoutpost.dmm index 41f8a52f29..aa5126fb65 100644 --- a/_maps/RandomRuins/SpaceRuins/turretedoutpost.dmm +++ b/_maps/RandomRuins/SpaceRuins/turretedoutpost.dmm @@ -153,10 +153,17 @@ "aB" = ( /obj/structure/table/reinforced, /obj/item/clothing/head/ushanka, -/turf/open/floor/plasteel{ - dir = 4; - icon_state = "darkredfull" +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 4 }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/turf/open/floor/plasteel, /area/ruin/space/has_grav/turretedoutpost) "aC" = ( /obj/structure/table/reinforced, @@ -221,12 +228,6 @@ /obj/machinery/door/airlock/public/glass, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/turretedoutpost) -"aJ" = ( -/turf/open/floor/plasteel{ - dir = 4; - icon_state = "darkredfull" - }, -/area/ruin/space/has_grav/turretedoutpost) "aK" = ( /obj/structure/bed, /obj/item/bedsheet/orange, @@ -285,10 +286,17 @@ "aR" = ( /obj/structure/table/reinforced, /obj/item/paper/crumpled, -/turf/open/floor/plasteel{ - dir = 4; - icon_state = "darkredfull" +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 4 }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/turf/open/floor/plasteel, /area/ruin/space/has_grav/turretedoutpost) "aS" = ( /obj/structure/table/reinforced, @@ -360,6 +368,19 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/turretedoutpost) +"tK" = ( +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/turretedoutpost) "Nu" = ( /obj/machinery/door/airlock/external, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ @@ -598,8 +619,8 @@ ad ad ad aB -aJ -aJ +tK +tK aR ad al diff --git a/_maps/shuttles/emergency_asteroid.dmm b/_maps/shuttles/emergency_asteroid.dmm index a103c2345e..7687241791 100644 --- a/_maps/shuttles/emergency_asteroid.dmm +++ b/_maps/shuttles/emergency_asteroid.dmm @@ -402,6 +402,7 @@ /obj/item/retractor, /obj/item/hemostat, /obj/item/scalpel, +/obj/item/surgicaldrill, /turf/open/floor/mineral/titanium/white, /area/shuttle/escape) "bG" = ( diff --git a/_maps/shuttles/emergency_bar.dmm b/_maps/shuttles/emergency_bar.dmm index 06be2ca7f6..cf4f193491 100644 --- a/_maps/shuttles/emergency_bar.dmm +++ b/_maps/shuttles/emergency_bar.dmm @@ -305,11 +305,11 @@ /turf/open/floor/plasteel, /area/shuttle/escape) "aU" = ( -/mob/living/simple_animal/hostile/alien/maid/barmaid, /obj/effect/turf_decal/tile/bar, /obj/effect/turf_decal/tile/bar{ dir = 1 }, +/mob/living/simple_animal/hostile/alien/maid/barmaid, /turf/open/floor/plasteel, /area/shuttle/escape) "aW" = ( @@ -320,11 +320,11 @@ /obj/machinery/light{ dir = 4 }, -/mob/living/simple_animal/drone/snowflake/bardrone, /obj/effect/turf_decal/tile/bar, /obj/effect/turf_decal/tile/bar{ dir = 1 }, +/mob/living/simple_animal/drone/snowflake/bardrone, /turf/open/floor/plasteel, /area/shuttle/escape) "aY" = ( @@ -472,6 +472,8 @@ /obj/item/hemostat, /obj/item/retractor, /obj/item/scalpel, +/obj/item/surgicaldrill, +/obj/item/cautery, /turf/open/floor/mineral/titanium, /area/shuttle/escape) "bC" = ( diff --git a/_maps/shuttles/emergency_cere.dmm b/_maps/shuttles/emergency_cere.dmm index b9def0e69b..47ad888f11 100644 --- a/_maps/shuttles/emergency_cere.dmm +++ b/_maps/shuttles/emergency_cere.dmm @@ -525,7 +525,6 @@ /area/shuttle/escape) "bb" = ( /obj/machinery/mech_bay_recharge_port{ - icon_state = "recharge_port"; dir = 2 }, /turf/open/floor/plasteel, diff --git a/_maps/shuttles/emergency_clown.dmm b/_maps/shuttles/emergency_clown.dmm index 253801fe77..d2329af155 100644 --- a/_maps/shuttles/emergency_clown.dmm +++ b/_maps/shuttles/emergency_clown.dmm @@ -15,7 +15,7 @@ "ae" = ( /obj/structure/table, /obj/item/storage/firstaid/fire, -/turf/open/floor/noslip, +/turf/open/floor/mineral/bananium, /area/shuttle/escape) "af" = ( /obj/structure/chair/comfy/shuttle{ @@ -34,13 +34,13 @@ pixel_y = 3 }, /obj/item/crowbar, -/turf/open/floor/noslip, +/turf/open/floor/mineral/bananium, /area/shuttle/escape) "ai" = ( /obj/machinery/computer/atmos_alert{ dir = 4 }, -/turf/open/floor/noslip, +/turf/open/floor/mineral/bananium, /area/shuttle/escape) "aj" = ( /obj/structure/chair/comfy/shuttle{ @@ -62,13 +62,13 @@ /obj/machinery/computer/security{ dir = 8 }, -/turf/open/floor/noslip, +/turf/open/floor/mineral/bananium, /area/shuttle/escape) "an" = ( /obj/machinery/computer/crew{ dir = 4 }, -/turf/open/floor/noslip, +/turf/open/floor/mineral/bananium, /area/shuttle/escape) "ao" = ( /obj/structure/chair/comfy/shuttle{ @@ -96,10 +96,10 @@ /obj/machinery/computer/communications{ dir = 8 }, -/turf/open/floor/noslip, +/turf/open/floor/mineral/bananium, /area/shuttle/escape) "as" = ( -/obj/machinery/door/airlock/public/glass{ +/obj/machinery/door/airlock/bananium/glass{ name = "Emergency Shuttle Premium Lounge" }, /turf/open/floor/bluespace, @@ -115,15 +115,7 @@ /obj/machinery/light{ dir = 1 }, -/turf/open/floor/noslip, -/area/shuttle/escape) -"aw" = ( -/turf/open/floor/noslip, -/area/shuttle/escape) -"ax" = ( -/obj/structure/closet/emcloset, -/obj/item/toy/sword, -/turf/open/floor/noslip, +/turf/open/floor/mineral/bananium, /area/shuttle/escape) "ay" = ( /obj/structure/table, @@ -133,7 +125,7 @@ pixel_y = 3 }, /obj/item/crowbar, -/turf/open/floor/noslip, +/turf/open/floor/mineral/bananium, /area/shuttle/escape) "az" = ( /obj/item/greentext/quiet{ @@ -142,31 +134,25 @@ /turf/open/floor/mineral/plastitanium/red/brig, /area/shuttle/escape) "aA" = ( -/obj/machinery/door/airlock/public/glass{ +/obj/machinery/door/airlock/bananium/glass{ name = "Emergency Shuttle Greentext" }, /turf/open/floor/bluespace, /area/shuttle/escape) -"aB" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/turf/open/floor/noslip, -/area/shuttle/escape) "aC" = ( /obj/structure/chair/comfy/shuttle, -/turf/open/floor/noslip, +/turf/open/floor/mineral/bananium, /area/shuttle/escape) "aD" = ( /obj/structure/chair/comfy/shuttle{ dir = 4 }, -/turf/open/floor/noslip, +/turf/open/floor/mineral/bananium, /area/shuttle/escape) "aE" = ( /obj/structure/table, /obj/item/multitool/ai_detect, -/turf/open/floor/noslip, +/turf/open/floor/mineral/bananium, /area/shuttle/escape) "aF" = ( /turf/closed/wall/mineral/titanium/nodiagonal, @@ -177,15 +163,15 @@ /obj/machinery/light{ dir = 8 }, -/turf/open/floor/noslip, +/turf/open/floor/mineral/bananium, /area/shuttle/escape) "aH" = ( /obj/structure/table, /obj/item/toy/sword, -/turf/open/floor/noslip, +/turf/open/floor/mineral/bananium, /area/shuttle/escape) "aI" = ( -/obj/machinery/door/airlock/titanium{ +/obj/machinery/door/airlock/bananium{ name = "Emergency Shuttle Airlock" }, /obj/docking_port/mobile/emergency{ @@ -221,7 +207,7 @@ "aM" = ( /obj/structure/bed, /obj/item/bedsheet/random, -/turf/open/floor/noslip, +/turf/open/floor/mineral/bananium, /area/shuttle/escape) "aN" = ( /obj/structure/window/reinforced{ @@ -229,7 +215,7 @@ }, /obj/structure/bed, /obj/item/bedsheet/random, -/turf/open/floor/noslip, +/turf/open/floor/mineral/bananium, /area/shuttle/escape) "aO" = ( /obj/structure/window/reinforced{ @@ -237,7 +223,7 @@ }, /obj/structure/bed, /obj/item/bedsheet/random, -/turf/open/floor/noslip, +/turf/open/floor/mineral/bananium, /area/shuttle/escape) "aP" = ( /obj/structure/bed, @@ -245,10 +231,10 @@ /obj/structure/window/reinforced{ dir = 8 }, -/turf/open/floor/noslip, +/turf/open/floor/mineral/bananium, /area/shuttle/escape) "aQ" = ( -/obj/machinery/door/airlock/titanium{ +/obj/machinery/door/airlock/bananium{ name = "Emergency Shuttle Airlock" }, /turf/open/floor/plating, @@ -266,13 +252,13 @@ /turf/open/floor/bluespace, /area/shuttle/escape) "aT" = ( -/obj/machinery/door/airlock/titanium{ +/obj/machinery/door/airlock/bananium{ name = "Emergency Shuttle Cargo" }, /turf/open/floor/bluespace, /area/shuttle/escape) "aU" = ( -/obj/machinery/door/airlock/public/glass{ +/obj/machinery/door/airlock/bananium/glass{ name = "Emergency Shuttle Infirmary" }, /turf/open/floor/bluespace, @@ -290,7 +276,7 @@ /obj/machinery/sleeper{ dir = 8 }, -/turf/open/floor/noslip, +/turf/open/floor/mineral/bananium, /area/shuttle/escape) "aY" = ( /obj/machinery/light/small{ @@ -305,13 +291,6 @@ }, /turf/open/floor/mineral/bananium, /area/shuttle/escape) -"ba" = ( -/obj/machinery/light/small{ - brightness = 3; - dir = 8 - }, -/turf/open/floor/noslip, -/area/shuttle/escape) "bb" = ( /obj/structure/table, /obj/item/storage/firstaid/fire, @@ -326,7 +305,7 @@ /obj/machinery/light/small{ dir = 4 }, -/turf/open/floor/noslip, +/turf/open/floor/mineral/bananium, /area/shuttle/escape) "bc" = ( /obj/structure/closet/crate/trashcart{ @@ -359,6 +338,11 @@ /obj/structure/shuttle/engine/propulsion, /turf/open/floor/plating/airless, /area/shuttle/escape) +"Zf" = ( +/obj/structure/closet/emcloset, +/obj/item/toy/sword, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) (1,1,1) = {" aa @@ -522,9 +506,9 @@ aN aN ak ac -ax -ba -ax +Zf +aY +Zf bf bg "} @@ -534,7 +518,7 @@ ah al al at -aw +aV ak aE aH @@ -546,9 +530,9 @@ aO aO ak aU -aw -aw -aw +aV +aV +aV bf bg "} @@ -558,7 +542,7 @@ ad am ar ab -ax +Zf ak ak ak @@ -570,9 +554,9 @@ ak ak ak ac -aw -aw -aw +aV +aV +aV bf bg "} @@ -583,9 +567,9 @@ ab ab ab ay -aB -aw -aw +aZ +aV +aV aL aM aM diff --git a/_maps/shuttles/emergency_delta.dmm b/_maps/shuttles/emergency_delta.dmm index c9456b0d0f..53a5c7c5d9 100644 --- a/_maps/shuttles/emergency_delta.dmm +++ b/_maps/shuttles/emergency_delta.dmm @@ -176,6 +176,8 @@ /obj/effect/turf_decal/tile/blue{ dir = 8 }, +/obj/item/surgicaldrill, +/obj/item/cautery, /turf/open/floor/plasteel/white, /area/shuttle/escape) "an" = ( diff --git a/_maps/shuttles/emergency_imfedupwiththisworld.dmm b/_maps/shuttles/emergency_imfedupwiththisworld.dmm index 5bad93ae45..349918ef29 100644 --- a/_maps/shuttles/emergency_imfedupwiththisworld.dmm +++ b/_maps/shuttles/emergency_imfedupwiththisworld.dmm @@ -55,7 +55,9 @@ /obj/machinery/light{ dir = 4 }, -/obj/machinery/vending/boozeomat, +/obj/machinery/vending/boozeomat{ + req_access = null + }, /obj/effect/turf_decal/tile/bar, /obj/effect/turf_decal/tile/bar{ dir = 1 diff --git a/_maps/shuttles/emergency_meta.dmm b/_maps/shuttles/emergency_meta.dmm index 6328b80417..0a357d2308 100644 --- a/_maps/shuttles/emergency_meta.dmm +++ b/_maps/shuttles/emergency_meta.dmm @@ -593,6 +593,8 @@ name = "Station Intercom (General)"; pixel_x = -27 }, +/obj/item/surgicaldrill, +/obj/item/cautery, /turf/open/floor/mineral/titanium, /area/shuttle/escape) "bI" = ( diff --git a/_maps/shuttles/emergency_omega.dmm b/_maps/shuttles/emergency_omega.dmm index 5faf5c6acf..ad67d8678b 100644 --- a/_maps/shuttles/emergency_omega.dmm +++ b/_maps/shuttles/emergency_omega.dmm @@ -805,6 +805,8 @@ /obj/effect/turf_decal/tile/blue{ dir = 8 }, +/obj/item/cautery, +/obj/item/surgicaldrill, /turf/open/floor/plasteel/white, /area/shuttle/escape) "bo" = ( diff --git a/_maps/shuttles/emergency_raven.dmm b/_maps/shuttles/emergency_raven.dmm index 1a0142e5c2..a112bdd150 100644 --- a/_maps/shuttles/emergency_raven.dmm +++ b/_maps/shuttles/emergency_raven.dmm @@ -238,6 +238,8 @@ /obj/effect/turf_decal/tile/purple{ dir = 8 }, +/obj/item/surgicaldrill, +/obj/item/cautery, /turf/open/floor/plasteel/dark, /area/shuttle/escape) "aC" = ( @@ -440,9 +442,7 @@ /obj/effect/turf_decal/tile/yellow{ dir = 8 }, -/turf/open/floor/plasteel/dark{ - icon_state = "darkyellow" - }, +/turf/open/floor/plasteel/dark, /area/shuttle/escape) "bb" = ( /obj/item/clothing/suit/hazardvest{ @@ -553,9 +553,7 @@ /obj/effect/turf_decal/tile/yellow{ dir = 4 }, -/turf/open/floor/plasteel/dark{ - icon_state = "darkyellow" - }, +/turf/open/floor/plasteel/dark, /area/shuttle/escape) "bg" = ( /obj/structure/table/reinforced, @@ -592,9 +590,7 @@ /obj/effect/turf_decal/tile/yellow{ dir = 8 }, -/turf/open/floor/plasteel/dark{ - icon_state = "darkyellow" - }, +/turf/open/floor/plasteel/dark, /area/shuttle/escape) "bk" = ( /obj/machinery/suit_storage_unit/standard_unit, @@ -670,17 +666,17 @@ /turf/closed/wall/mineral/plastitanium, /area/shuttle/escape) "bp" = ( -/mob/living/simple_animal/bot/medbot{ - name = "\improper emergency medibot"; - pixel_x = -3; - pixel_y = 2 - }, /obj/effect/turf_decal/tile/purple{ dir = 1 }, /obj/effect/turf_decal/tile/purple{ dir = 8 }, +/mob/living/simple_animal/bot/medbot{ + name = "\improper emergency medibot"; + pixel_x = -3; + pixel_y = 2 + }, /turf/open/floor/plasteel/dark, /area/shuttle/escape) "bq" = ( diff --git a/_maps/shuttles/emergency_supermatter.dmm b/_maps/shuttles/emergency_supermatter.dmm index 86087cd230..fcdbf48a3d 100644 --- a/_maps/shuttles/emergency_supermatter.dmm +++ b/_maps/shuttles/emergency_supermatter.dmm @@ -68,10 +68,6 @@ }, /turf/open/floor/noslip, /area/shuttle/escape) -"aq" = ( -/obj/machinery/status_display/evac, -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) "ar" = ( /obj/structure/chair/comfy/shuttle{ dir = 8 @@ -313,6 +309,36 @@ }, /turf/open/floor/plating, /area/shuttle/escape) +"hD" = ( +/obj/structure/lattice/catwalk, +/turf/open/space, +/area/shuttle/escape) +"pb" = ( +/obj/structure/closet/radiation{ + anchored = 1 + }, +/obj/item/clothing/glasses/meson/engine, +/obj/machinery/status_display/evac{ + pixel_x = 32 + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/escape) +"Bi" = ( +/obj/structure/closet/radiation{ + anchored = 1 + }, +/obj/item/clothing/glasses/meson/engine, +/obj/machinery/status_display/evac{ + pixel_x = -32 + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/escape) +"UA" = ( +/obj/machinery/status_display/evac{ + pixel_y = -32 + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/escape) (1,1,1) = {" aa @@ -343,13 +369,13 @@ ae ae ad ac -aq +ae ad ax ai aD -ai -aq +UA +ae aa aa aN @@ -357,7 +383,7 @@ aM aR aU aX -at +aM ba bc be @@ -367,7 +393,7 @@ ac ag ag bi -ag +Bi ag ag ai @@ -376,12 +402,12 @@ ai ad aa aa -at +aM aa aS aV aY -at +aM ba bc be @@ -400,13 +426,13 @@ ar aI aw aa -at +aM aa aT aW aZ aa -aM +hD aa aa "} @@ -423,11 +449,11 @@ as as bk ad -at +aM aO aa aa -aM +hD aa aa aR @@ -449,11 +475,11 @@ at aL aM aM -aM -aM -aM -aM -aM +hD +hD +hD +hD +hD bb bd aY @@ -471,11 +497,11 @@ au au bl ad -at +aM aP aa aa -aM +hD aa aa aT @@ -496,13 +522,13 @@ av aI aw aa -at +aM aa aR aU aX aa -aM +hD aa aa "} @@ -511,7 +537,7 @@ ac ag ag bj -ag +pb ag ag ai @@ -520,12 +546,12 @@ ai ad aa aa -at +aM aa aS aV aY -at +aM ba bc be @@ -535,13 +561,13 @@ ae ae ad ac -aq +ae ad ax ai aE -ai -aq +UA +ae aa aa aQ @@ -549,7 +575,7 @@ aM aT aW aZ -at +aM ba bc be diff --git a/code/__DEFINES/components.dm b/code/__DEFINES/components.dm index 8eabc4e52b..c630fd0b2f 100644 --- a/code/__DEFINES/components.dm +++ b/code/__DEFINES/components.dm @@ -124,6 +124,11 @@ #define COMSIG_MOB_RECEIVE_MAGIC "mob_receive_magic" //from base of mob/anti_magic_check(): (magic, holy, protection_sources) #define COMPONENT_BLOCK_MAGIC 1 #define COMSIG_MOB_HUD_CREATED "mob_hud_created" //from base of mob/create_mob_hud(): () +#define COMSIG_MOB_ATTACK_HAND "mob_attack_hand" //from base of +#define COMSIG_MOB_ITEM_ATTACK "mob_item_attack" //from base of /obj/item/attack(): (mob/M, mob/user) +#define COMSIG_MOB_ITEM_AFTERATTACK "mob_item_afterattack" //from base of obj/item/afterattack(): (atom/target, mob/user, proximity_flag, click_parameters) +#define COMSIG_MOB_ATTACK_RANGED "mob_attack_ranged" //from base of mob/RangedAttack(): (atom/A, params) +#define COMSIG_MOB_THROW "mob_throw" //from base of /mob/throw_item(): (atom/target) // /mob/living signals #define COMSIG_LIVING_RESIST "living_resist" //from base of mob/living/resist() (/mob/living) diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index fac666700f..5451bd30e4 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -470,3 +470,6 @@ GLOBAL_LIST_INIT(pda_styles, list(MONO, VT, ORBITRON, SHARE)) #define CAMERA_SEE_GHOSTS_ORBIT 2 #define CLIENT_FROM_VAR(I) (ismob(I) ? I:client : (istype(I, /client) ? I : (istype(I, /datum/mind) ? I:current?:client : null))) + +#define AREASELECT_CORNERA "corner A" +#define AREASELECT_CORNERB "corner B" \ No newline at end of file diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm index 59598b9d7f..0c01468712 100644 --- a/code/_onclick/ai.dm +++ b/code/_onclick/ai.dm @@ -10,9 +10,6 @@ Note that AI have no need for the adjacency proc, and so this proc is a lot cleaner. */ /mob/living/silicon/ai/DblClickOn(var/atom/A, params) - if(check_click_intercept(params,A)) - return - if(control_disabled || incapacitated()) return diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 5ebd154843..3d6de49a6a 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -272,6 +272,7 @@ animals lunging, etc. */ /mob/proc/RangedAttack(atom/A, params) + SEND_SIGNAL(src, COMSIG_MOB_ATTACK_RANGED, A, params) /* Restrained ClickOn diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 1ace590efc..355b46850b 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -56,6 +56,7 @@ /obj/item/proc/attack(mob/living/M, mob/living/user) SEND_SIGNAL(src, COMSIG_ITEM_ATTACK, M, user) + SEND_SIGNAL(user, COMSIG_MOB_ITEM_ATTACK, M, user) if(item_flags & NOBLUDGEON) return @@ -139,7 +140,7 @@ // Click parameters is the params string from byond Click() code, see that documentation. /obj/item/proc/afterattack(atom/target, mob/user, proximity_flag, click_parameters) SEND_SIGNAL(src, COMSIG_ITEM_AFTERATTACK, target, user, proximity_flag, click_parameters) - + SEND_SIGNAL(user, COMSIG_MOB_ITEM_AFTERATTACK, target, user, proximity_flag, click_parameters) /obj/item/proc/get_clamped_volume() if(w_class) diff --git a/code/_onclick/observer.dm b/code/_onclick/observer.dm index 63e1a14aa6..6cacc90fcb 100644 --- a/code/_onclick/observer.dm +++ b/code/_onclick/observer.dm @@ -1,7 +1,4 @@ /mob/dead/observer/DblClickOn(var/atom/A, var/params) - if(check_click_intercept(params,A)) - return - if(can_reenter_corpse && mind && mind.current) if(A == mind.current || (mind.current in A)) // double click your corpse or whatever holds it reenter_corpse() // (cloning scanner, body bag, closet, mech, etc) diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm index 671aa81b79..30e6883d24 100644 --- a/code/_onclick/other_mobs.dm +++ b/code/_onclick/other_mobs.dm @@ -86,6 +86,7 @@ return 0 /mob/living/carbon/human/RangedAttack(atom/A, mouseparams) + . = ..() if(gloves) var/obj/item/clothing/gloves/G = gloves if(istype(G) && G.Touch(A,0)) // for magic gloves @@ -96,6 +97,7 @@ if(isturf(A) && get_dist(src,A) <= 1) src.Move_Pulled(A) + return /* Animals & All Unspecified diff --git a/code/datums/ruins/lavaland.dm b/code/datums/ruins/lavaland.dm index 4006c13a2c..18efae955e 100644 --- a/code/datums/ruins/lavaland.dm +++ b/code/datums/ruins/lavaland.dm @@ -154,13 +154,14 @@ suffix = "lavaland_surface_ufo_crash.dmm" cost = 5 +/* Replaced with Alien Nest Ruins /datum/map_template/ruin/lavaland/xeno_nest name = "Xenomorph Nest" id = "xeno-nest" description = "These xenomorphs got bored of horrifically slaughtering people on space stations, and have settled down on a nice lava filled hellscape to focus on what's really important in life. \ Quality memes." suffix = "lavaland_surface_xeno_nest.dmm" - cost = 20 + cost = 20 */ /datum/map_template/ruin/lavaland/fountain name = "Fountain Hall" diff --git a/code/game/machinery/telecomms/computers/logbrowser.dm b/code/game/machinery/telecomms/computers/logbrowser.dm index 97c508573b..5337c7a6f6 100644 --- a/code/game/machinery/telecomms/computers/logbrowser.dm +++ b/code/game/machinery/telecomms/computers/logbrowser.dm @@ -62,72 +62,63 @@ // If the log is a speech file if(C.input_type == "Speech File") - - dat += "
  • [C.name] \[X\]
    " + dat += "
  • [C.name] \[X\]
    " // -- Determine race of orator -- - var/race // The actual race of the mob - var/language = "Human" // MMIs, pAIs, Cyborgs and humans all speak Human var/mobtype = C.parameters["mobtype"] + var/race // The actual race of the mob - var/list/humans = typesof(/mob/living/carbon/human, /mob/living/brain) - var/list/monkeys = typesof(/mob/living/carbon/monkey) - var/list/silicons = typesof(/mob/living/silicon) - var/list/slimes = typesof(/mob/living/simple_animal/slime) - var/list/animals = typesof(/mob/living/simple_animal) - - if(mobtype in humans) + if(ispath(mobtype, /mob/living/carbon/human) || ispath(mobtype, /mob/living/brain)) race = "Humanoid" - language = race - else if(mobtype in slimes) // NT knows a lot about slimes, but not aliens. Can identify slimes + // NT knows a lot about slimes, but not aliens. Can identify slimes + else if(ispath(mobtype, /mob/living/simple_animal/slime)) race = "Slime" - language = race - else if(mobtype in monkeys) + else if(ispath(mobtype, /mob/living/carbon/monkey)) race = "Monkey" - language = race - else if(mobtype in silicons || C.parameters["job"] == "AI") // sometimes M gets deleted prematurely for AIs... just check the job + // sometimes M gets deleted prematurely for AIs... just check the job + else if(ispath(mobtype, /mob/living/silicon) || C.parameters["job"] == "AI") race = "Artificial Life" - language = "Humanoid" //Ais and borgs speak human, and binary isnt picked up. else if(isobj(mobtype)) race = "Machinery" - language = race - else if(mobtype in animals) + else if(ispath(mobtype, )) race = "Domestic Animal" - language = race else race = "Unidentifiable" - language = race - // -- If the orator is a human, or universal translate is active, OR mob has universal speech on -- + dat += "Data type: [C.input_type]
    " + dat += "Source: [C.parameters["name"]] (Job: [C.parameters["job"]])
    " + dat += "Class: [race]
    " + var/message = C.parameters["message"] + var/language = C.parameters["language"] - if(language == "Humanoid" || universal_translate || C.parameters["uspeech"]) - dat += "Data type: [C.input_type]
    " - dat += "Source: [C.parameters["name"]] (Job: [C.parameters["job"]])
    " - dat += "Class: [race]
    " - dat += "Contents: \"[C.parameters["message"]]\"
    " - - - // -- Orator is not human and universal translate not active -- - - else - dat += "Data type: Audio File
    " - dat += "Source: Unidentifiable
    " - dat += "Class: [race]
    " - dat += "Contents: Unintelligible
    " + // based on [/atom/movable/proc/lang_treat] + if (universal_translate || user.has_language(language)) + message = "\"[message]\"" + else if (!user.has_language(language)) + var/datum/language/D = GLOB.language_datum_instances[language] + message = "\"[D.scramble(message)]\"" + else if (language) + message = "(unintelligible)" + dat += "Contents: [message]
    " dat += "

  • " else if(C.input_type == "Execution Error") + dat += "
  • [C.name] \[X\]
    " + dat += "Error: \"[C.parameters["message"]]\"
    " + dat += "

  • " - dat += "
  • [C.name] \[X\]
    " - dat += "Output: \"[C.parameters["message"]]\"
    " + else + dat += "
  • [C.name] \[X\]
    " + dat += "Data type: [C.input_type]
    " + dat += "Contents: (unintelligible)
    " dat += "

  • " @@ -221,4 +212,4 @@ /obj/machinery/computer/telecomms/server/attackby() . = ..() - updateUsrDialog() + updateUsrDialog() \ No newline at end of file diff --git a/code/game/machinery/telecomms/machines/server.dm b/code/game/machinery/telecomms/machines/server.dm index 6bbd8cfd38..46b16252c5 100644 --- a/code/game/machinery/telecomms/machines/server.dm +++ b/code/game/machinery/telecomms/machines/server.dm @@ -36,6 +36,7 @@ log.parameters["name"] = signal.data["name"] log.parameters["job"] = signal.data["job"] log.parameters["message"] = signal.data["message"] + log.parameters["language"] = signal.language // If the signal is still compressed, make the log entry gibberish var/compression = signal.data["compression"] diff --git a/code/game/mecha/equipment/tools/mining_tools.dm b/code/game/mecha/equipment/tools/mining_tools.dm index b82c7c3617..d539e0a9d5 100644 --- a/code/game/mecha/equipment/tools/mining_tools.dm +++ b/code/game/mecha/equipment/tools/mining_tools.dm @@ -79,10 +79,8 @@ /turf/open/floor/plating/asteroid/drill_act(obj/item/mecha_parts/mecha_equipment/drill/drill) for(var/turf/open/floor/plating/asteroid/M in range(1, drill.chassis)) - if(get_dir(drill.chassis,M)&drill.chassis.dir) - for(var/I in GetComponents(/datum/component/archaeology)) - var/datum/component/archaeology/archy = I - archy.gets_dug() + if((get_dir(drill.chassis,M)&drill.chassis.dir) && !M.dug) + M.getDug() drill.log_message("Drilled through [src]") drill.move_ores() diff --git a/code/game/objects/items/clown_items.dm b/code/game/objects/items/clown_items.dm index 0d255a7d7f..1d302b409e 100644 --- a/code/game/objects/items/clown_items.dm +++ b/code/game/objects/items/clown_items.dm @@ -62,7 +62,6 @@ return //I couldn't feasibly fix the overlay bugs caused by cleaning items we are wearing. //So this is a workaround. This also makes more sense from an IC standpoint. ~Carn - SEND_SIGNAL(target, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_MEDIUM) if(user.client && ((target in user.client.screen) && !user.is_holding(target))) to_chat(user, "You need to take that [target.name] off before cleaning it!") else if(istype(target, /obj/effect/decal/cleanable)) @@ -89,7 +88,7 @@ var/obj/effect/decal/cleanable/C = locate() in target qdel(C) target.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) - SEND_SIGNAL(target, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) + SEND_SIGNAL(target, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_MEDIUM) target.wash_cream() return @@ -169,4 +168,4 @@ name = "Canned Laughter" desc = "Just looking at this makes you want to giggle." icon_state = "laughter" - list_reagents = list("laughter" = 50) + list_reagents = list("laughter" = 50) \ No newline at end of file diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 1cd23c26fa..f3363e135e 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -127,17 +127,19 @@ self_delay = 20 max_amount = 12 -/obj/item/stack/medical/gauze/wirecutter_act(mob/living/user, obj/item/I) - if(get_amount() < 2) - to_chat(user, "You need at least two gauze to do this!") - return - new /obj/item/stack/sheet/cloth(user.drop_location()) - user.visible_message("[user] cuts [src] into pieces of cloth with [I].", \ - "You cut [src] into pieces of cloth with [I].", \ - "You hear cutting.") - var/obj/item/stack/medical/gauze/R = src - src = null - R.use(2) + +/obj/item/stack/medical/gauze/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/wirecutters) || I.is_sharp()) + if(get_amount() < 2) + to_chat(user, "You need at least two gauzes to do this!") + return + new /obj/item/stack/sheet/cloth(user.drop_location()) + user.visible_message("[user] cuts [src] into pieces of cloth with [I].", \ + "You cut [src] into pieces of cloth with [I].", \ + "You hear cutting.") + use(2) + else + return ..() /obj/item/stack/medical/gauze/suicide_act(mob/living/user) user.visible_message("[user] begins tightening \the [src] around [user.p_their()] neck! It looks like [user.p_they()] forgot how to use medical supplies!") @@ -168,4 +170,4 @@ /obj/item/stack/medical/ointment/suicide_act(mob/living/user) user.visible_message("[user] is squeezing \the [src] into [user.p_their()] mouth! [user.p_do(TRUE)]n't [user.p_they()] know that stuff is toxic?") - return TOXLOSS + return TOXLOSS \ No newline at end of file diff --git a/code/game/turfs/open.dm b/code/game/turfs/open.dm index 77c658419c..f007c50394 100644 --- a/code/game/turfs/open.dm +++ b/code/game/turfs/open.dm @@ -4,7 +4,6 @@ var/postdig_icon_change = FALSE var/postdig_icon - var/list/archdrops var/wet var/footstep = null @@ -13,8 +12,6 @@ . = ..() if(wet) AddComponent(/datum/component/wet_floor, wet, INFINITY, 0, INFINITY, TRUE) - if(LAZYLEN(archdrops)) - AddComponent(/datum/component/archaeology, archdrops) /turf/open/indestructible name = "floor" diff --git a/code/game/turfs/simulated/floor/plating/asteroid.dm b/code/game/turfs/simulated/floor/plating/asteroid.dm index b8da9350a4..85969c61dc 100644 --- a/code/game/turfs/simulated/floor/plating/asteroid.dm +++ b/code/game/turfs/simulated/floor/plating/asteroid.dm @@ -13,8 +13,9 @@ var/environment_type = "asteroid" var/turf_type = /turf/open/floor/plating/asteroid //Because caves do whacky shit to revert to normal var/floor_variance = 20 //probability floor has a different icon state - archdrops = list(/obj/item/stack/ore/glass = list(ARCH_PROB = 100,ARCH_MAXDROP = 5)) attachment_holes = FALSE + var/obj/item/stack/digResult = /obj/item/stack/ore/glass/basalt + var/dug /turf/open/floor/plating/asteroid/Initialize() var/proper_name = name @@ -23,6 +24,14 @@ if(prob(floor_variance)) icon_state = "[environment_type][rand(0,12)]" +/turf/open/floor/plating/asteroid/proc/getDug() + new digResult(src, 5) + if(postdig_icon_change) + if(!postdig_icon) + icon_plating = "[environment_type]_dug" + icon_state = "[environment_type]_dug" + dug = TRUE + /turf/open/floor/plating/asteroid/try_replace_tile(obj/item/stack/tile/T, mob/user, params) return @@ -36,11 +45,26 @@ return /turf/open/floor/plating/asteroid/attackby(obj/item/W, mob/user, params) - if(..()) - return TRUE - if(istype(W, /obj/item/storage/bag/ore)) - for(var/obj/item/stack/ore/O in src) - SEND_SIGNAL(W, COMSIG_PARENT_ATTACKBY, O) + . = ..() + if(!.) + if(W.tool_behaviour == TOOL_SHOVEL || W.tool_behaviour == TOOL_MINING) + if(dug) + to_chat(user, "Looks like someone has dug here already.") + return TRUE + + if(!isturf(user.loc)) + return + + to_chat(user, "You start digging...") + + if(W.use_tool(src, user, 40, volume=50)) + to_chat(user, "You dig a hole.") + getDug() + SSblackbox.record_feedback("tally", "pick_used_mining", 1, W.type) + return TRUE + else if(istype(W, /obj/item/storage/bag/ore)) + for(var/obj/item/stack/ore/O in src) + SEND_SIGNAL(W, COMSIG_PARENT_ATTACKBY, O) /turf/open/floor/plating/asteroid/singularity_act() if(is_planet_level(z)) @@ -61,8 +85,8 @@ icon_state = "basalt" icon_plating = "basalt" environment_type = "basalt" - archdrops = list(/obj/item/stack/ore/glass/basalt = list(ARCH_PROB = 100,ARCH_MAXDROP = 5)) floor_variance = 15 + digResult = /obj/item/stack/ore/glass/basalt /turf/open/floor/plating/asteroid/basalt/lava //lava underneath baseturfs = /turf/open/lava/smooth @@ -73,9 +97,10 @@ /turf/open/floor/plating/asteroid/basalt/Initialize() . = ..() set_basalt_light(src) - GET_COMPONENT(arch, /datum/component/archaeology) - ASSERT(isnull(arch.callback)) - arch.callback = CALLBACK(src, /atom/proc/set_light, 0) + +/turf/open/floor/plating/asteroid/getDug() + set_light(0) + return ..() /proc/set_basalt_light(turf/open/floor/B) switch(B.icon_state) @@ -276,10 +301,10 @@ environment_type = "snow" flags_1 = NONE planetary_atmos = TRUE - archdrops = list(/obj/item/stack/sheet/mineral/snow = list(ARCH_PROB = 100, ARCH_MAXDROP = 5)) burnt_states = list("snow_dug") bullet_sizzle = TRUE bullet_bounce_sound = null + digResult = /obj/item/stack/sheet/mineral/snow /turf/open/floor/plating/asteroid/snow/burn_tile() if(!burnt) @@ -312,4 +337,4 @@ /turf/open/floor/plating/asteroid/snow/atmosphere initial_gas_mix = "o2=22;n2=82;TEMP=180" - planetary_atmos = FALSE + planetary_atmos = FALSE \ No newline at end of file diff --git a/code/modules/admin/verbs/buildmode.dm b/code/modules/admin/verbs/buildmode.dm deleted file mode 100644 index 1c8002943d..0000000000 --- a/code/modules/admin/verbs/buildmode.dm +++ /dev/null @@ -1,394 +0,0 @@ -#define BASIC_BUILDMODE 1 -#define ADV_BUILDMODE 2 -#define VAR_BUILDMODE 3 -#define THROW_BUILDMODE 4 -#define AREA_BUILDMODE 5 -#define COPY_BUILDMODE 6 -#define NUM_BUILDMODES 6 - -//Buildmode Shuttle -//Builmode Move - -/obj/screen/buildmode - icon = 'icons/misc/buildmode.dmi' - var/datum/buildmode/bd - -/obj/screen/buildmode/New(bd) - ..() - src.bd = bd - -/obj/screen/buildmode/Destroy() - bd.buttons -= src - bd = null - return ..() - -/obj/screen/buildmode/mode - icon_state = "buildmode1" - name = "Toggle Mode" - screen_loc = "NORTH,WEST" - -/obj/screen/buildmode/mode/Click(location, control, params) - var/list/pa = params2list(params) - - if(pa.Find("left")) - bd.toggle_modes() - else if(pa.Find("right")) - bd.change_settings(usr) - update_icon() - return 1 - -/obj/screen/buildmode/mode/update_icon() - icon_state = "buildmode[bd.mode]" - return - -/obj/screen/buildmode/help - icon_state = "buildhelp" - screen_loc = "NORTH,WEST+1" - name = "Buildmode Help" - -/obj/screen/buildmode/help/Click() - bd.show_help(usr) - return 1 - -/obj/screen/buildmode/bdir - icon_state = "build" - screen_loc = "NORTH,WEST+2" - name = "Change Dir" - - -/obj/screen/buildmode/bdir/update_icon() - setDir(bd.build_dir) - return - -/obj/screen/buildmode/quit - icon_state = "buildquit" - screen_loc = "NORTH,WEST+3" - name = "Quit Buildmode" - -/obj/screen/buildmode/quit/Click() - bd.quit() - return 1 - -/obj/screen/buildmode/bdir/Click() - bd.change_dir() - update_icon() - return 1 - -/datum/buildmode - var/mode = BASIC_BUILDMODE - var/client/holder = null - var/list/obj/screen/buttons = list() - var/build_dir = SOUTH - var/atom/movable/throw_atom = null - var/turf/cornerA = null - var/turf/cornerB = null - var/generator_path = null - var/varholder = "name" - var/valueholder = "derp" - var/objholder = /obj/structure/closet - var/atom/movable/stored = null - var/list/preview = list() - -/datum/buildmode/New(client/c) - create_buttons() - holder = c - holder.click_intercept = src - holder.show_popup_menus = 0 - holder.screen += buttons - -/datum/buildmode/proc/quit() - holder.screen -= buttons - holder.click_intercept = null - holder.show_popup_menus = 1 - usr.client.images -= preview - preview.Cut() - qdel(src) - return - -/datum/buildmode/Destroy() - stored = null - QDEL_LIST(buttons) - throw_atom = null - holder = null - preview.Cut() - cornerA = null - cornerB = null - return ..() - -/datum/buildmode/proc/create_buttons() - buttons += new /obj/screen/buildmode/mode(src) - buttons += new /obj/screen/buildmode/help(src) - buttons += new /obj/screen/buildmode/bdir(src) - buttons += new /obj/screen/buildmode/quit(src) - -/datum/buildmode/proc/toggle_modes() - mode = (mode % NUM_BUILDMODES) +1 - Reset() - return - -/datum/buildmode/proc/show_help(mob/user) - var/list/dat = list() - switch(mode) - if(BASIC_BUILDMODE) - dat += "***********************************************************" - dat += "Left Mouse Button = Construct / Upgrade" - dat += "Right Mouse Button = Deconstruct / Delete / Downgrade" - dat += "Left Mouse Button + ctrl = R-Window" - dat += "Left Mouse Button + alt = Airlock" - dat += "" - dat += "Use the button in the upper left corner to" - dat += "change the direction of built objects." - dat += "***********************************************************" - if(ADV_BUILDMODE) - dat += "***********************************************************" - dat += "Right Mouse Button on buildmode button = Set object type" - dat += "Left Mouse Button + alt on turf/obj = Copy object type" - dat += "Left Mouse Button on turf/obj = Place objects" - dat += "Right Mouse Button = Delete objects" - dat += "" - dat += "Use the button in the upper left corner to" - dat += "change the direction of built objects." - dat += "***********************************************************" - if(VAR_BUILDMODE) - dat += "***********************************************************" - dat += "Right Mouse Button on buildmode button = Select var(type) & value" - dat += "Left Mouse Button on turf/obj/mob = Set var(type) & value" - dat += "Right Mouse Button on turf/obj/mob = Reset var's value" - dat += "***********************************************************" - if(THROW_BUILDMODE) - dat += "***********************************************************" - dat += "Left Mouse Button on turf/obj/mob = Select" - dat += "Right Mouse Button on turf/obj/mob = Throw" - dat += "***********************************************************" - if(AREA_BUILDMODE) - dat += "***********************************************************" - dat += "Left Mouse Button on turf/obj/mob = Select corner" - dat += "Right Mouse Button on turf/obj/mob = Reset corner selection" - dat += "Right Mouse Button on buildmode button = Select generator" - dat += "***********************************************************" - if(COPY_BUILDMODE) - dat += "***********************************************************" - dat += "Left Mouse Button on obj/turf/mob = Spawn a Copy of selected target" - dat += "Right Mouse Button on obj/mob = Select target to copy" - dat += "***********************************************************" - to_chat(user, "[dat.Join("\n")]") - -/datum/buildmode/proc/change_settings(mob/user) - switch(mode) - if(BASIC_BUILDMODE) - return 1 - if(ADV_BUILDMODE) - var/target_path = input(user,"Enter typepath:" ,"Typepath","/obj/structure/closet") - objholder = text2path(target_path) - if(!ispath(objholder)) - objholder = pick_closest_path(target_path) - if(!objholder) - objholder = /obj/structure/closet - alert("That path is not allowed.") - else - if(ispath(objholder, /mob) && !check_rights(R_DEBUG,0)) - objholder = /obj/structure/closet - if(VAR_BUILDMODE) - var/list/locked = list("vars", "key", "ckey", "client", "firemut", "ishulk", "telekinesis", "xray", "virus", "viruses", "cuffed", "ka", "last_eaten", "urine") - - varholder = input(user,"Enter variable name:" ,"Name", "name") - if(varholder in locked && !check_rights(R_DEBUG,0)) - return 1 - var/thetype = input(user,"Select variable type:" ,"Type") in list("text","number","mob-reference","obj-reference","turf-reference") - if(!thetype) - return 1 - switch(thetype) - if("text") - valueholder = input(user,"Enter variable value:" ,"Value", "value") as text - if("number") - valueholder = input(user,"Enter variable value:" ,"Value", 123) as num - if("mob-reference") - valueholder = input(user,"Enter variable value:" ,"Value") as mob in GLOB.mob_list - if("obj-reference") - valueholder = input(user,"Enter variable value:" ,"Value") as obj in world - if("turf-reference") - valueholder = input(user,"Enter variable value:" ,"Value") as turf in world - if(AREA_BUILDMODE) - var/list/gen_paths = subtypesof(/datum/mapGenerator) - var/list/options = list() - for(var/path in gen_paths) - var/datum/mapGenerator/MP = path - options[initial(MP.buildmode_name)] = path - var/type = input(user,"Select Generator Type","Type") as null|anything in options - if(!type) - return - - generator_path = options[type] - cornerA = null - cornerB = null - -/datum/buildmode/proc/change_dir() - switch(build_dir) - if(NORTH) - build_dir = EAST - if(EAST) - build_dir = SOUTH - if(SOUTH) - build_dir = WEST - if(WEST) - build_dir = NORTHWEST - if(NORTHWEST) - build_dir = NORTH - return 1 - -/datum/buildmode/proc/Reset()//Reset temporary variables - cornerA = null - cornerB = null - -/proc/togglebuildmode(mob/M in GLOB.player_list) - set name = "Toggle Build Mode" - set category = "Special Verbs" - if(M.client) - if(istype(M.client.click_intercept, /datum/buildmode)) - var/datum/buildmode/B = M.client.click_intercept - B.quit() - log_admin("[key_name(usr)] has left build mode.") - else - new/datum/buildmode(M.client) - message_admins("[key_name(usr)] has entered build mode.") - log_admin("[key_name(usr)] has entered build mode.") - - -/datum/buildmode/proc/InterceptClickOn(user,params,atom/object) //Click Intercept - var/list/pa = params2list(params) - var/right_click = pa.Find("right") - var/left_click = pa.Find("left") - var/alt_click = pa.Find("alt") - var/ctrl_click = pa.Find("ctrl") - - //Clicking on UI elements shouldn't try to build things in nullspace. - if(istype(object,/obj/screen)) - return FALSE - - . = TRUE - switch(mode) - if(BASIC_BUILDMODE) - if(isturf(object) && left_click && !alt_click && !ctrl_click) - var/turf/T = object - if(isspaceturf(object)) - T.PlaceOnTop(/turf/open/floor/plating) - else if(isplatingturf(object)) - T.PlaceOnTop(/turf/open/floor/plasteel) - else if(isfloorturf(object)) - T.PlaceOnTop(/turf/closed/wall) - else if(iswallturf(object)) - T.PlaceOnTop(/turf/closed/wall/r_wall) - log_admin("Build Mode: [key_name(user)] built [T] at [AREACOORD(T)]") - return - else if(right_click) - log_admin("Build Mode: [key_name(user)] deleted [object] at [AREACOORD(object)]") - if(isturf(object)) - var/turf/T = object - T.ScrapeAway() - else if(isobj(object)) - qdel(object) - return - else if(isturf(object) && alt_click && left_click) - log_admin("Build Mode: [key_name(user)] built an airlock at [AREACOORD(object)]") - new/obj/machinery/door/airlock(get_turf(object)) - else if(isturf(object) && ctrl_click && left_click) - var/obj/structure/window/reinforced/window - if(build_dir == NORTHWEST) - window = new /obj/structure/window/reinforced/fulltile(get_turf(object)) - else - window = new /obj/structure/window/reinforced(get_turf(object)) - window.setDir(build_dir) - log_admin("Build Mode: [key_name(user)] built a window at [AREACOORD(object)]") - if(ADV_BUILDMODE) - if(left_click && alt_click) - objholder = object.type - to_chat(user, "[initial(object.name)] ([object.type]) selected.") - else if(left_click) - if(ispath(objholder, /turf)) - var/turf/T = get_turf(object) - log_admin("Build Mode: [key_name(user)] modified [T] in [AREACOORD(object)] to [objholder]") - T.PlaceOnTop(objholder) - else - var/obj/A = new objholder (get_turf(object)) - A.setDir(build_dir) - log_admin("Build Mode: [key_name(user)] modified [A]'s [COORD(A)] dir to [build_dir]") - else if(right_click) - if(isobj(object)) - log_admin("Build Mode: [key_name(user)] deleted [object] at [AREACOORD(object)]") - qdel(object) - - if(VAR_BUILDMODE) - if(left_click) //I cant believe this shit actually compiles. - if(object.vars.Find(varholder)) - if(object.vv_edit_var(varholder, valueholder)) - log_admin("Build Mode: [key_name(user)] modified [object.name]'s [varholder] to [valueholder]") - else - to_chat(user, "Varedit rejected") - else - to_chat(user, "[initial(object.name)] does not have a var called '[varholder]'") - if(right_click) - if(object.vars.Find(varholder)) - if(object.vv_edit_var(varholder, initial(object.vars[varholder]))) - log_admin("Build Mode: [key_name(user)] modified [object.name]'s [varholder] to [valueholder]") - else - to_chat(user, "Varedit rejected") - else - to_chat(user, "[initial(object.name)] does not have a var called '[varholder]'") - - if(THROW_BUILDMODE) - if(left_click) - if(isturf(object)) - return - throw_atom = object - if(right_click) - if(throw_atom) - throw_atom.throw_at(object, 10, 1,user) - log_admin("Build Mode: [key_name(user)] threw [throw_atom] at [object] in [AREACOORD(object)]") - if(AREA_BUILDMODE) - if(left_click) //rectangular - if(!cornerA) - cornerA = get_turf(object) - preview += image('icons/turf/overlays.dmi',cornerA,"greenOverlay") - usr.client.images -= preview - usr.client.images += preview - return - if(cornerA && !cornerB) - cornerB = get_turf(object) - preview += image('icons/turf/overlays.dmi',cornerB,"blueOverlay") - usr.client.images -= preview - usr.client.images += preview - to_chat(user, "Region selected, if you're happy with your selection left click again, otherwise right click.") - return - if(cornerA && cornerB) - if(!generator_path) - to_chat(user, "Select generator type first.") - return - var/datum/mapGenerator/G = new generator_path - if(istype(G, /datum/mapGenerator/repair/reload_station_map)) - if(GLOB.reloading_map) - to_chat(user, "You are already reloading an area! Please wait for it to fully finish loading before trying to load another!") - return - G.defineRegion(cornerA, cornerB, 1) - for(var/t in G.map) - preview += image('icons/turf/overlays.dmi', t ,"redOverlay") - usr.client.images -= preview - usr.client.images += preview - var/confirm = alert("Are you sure you want run the map generator?", "Run generator", "Yes", "No") - if(confirm == "Yes") - G.generate() - cornerA = null - cornerB = null - usr.client.images -= preview - preview.Cut() - return - //Something wrong - Reset - cornerA = null - cornerB = null - if(COPY_BUILDMODE) - if(left_click) - var/turf/T = get_turf(object) - if(stored) - DuplicateObject(stored,perfectcopy=1,newloc=T) - else if(right_click) - if(ismovableatom(object)) // No copying turfs for now. - stored = object diff --git a/code/modules/admin/verbs/modifyvariables.dm b/code/modules/admin/verbs/modifyvariables.dm index ace5e09a14..5b74ae7c5b 100644 --- a/code/modules/admin/verbs/modifyvariables.dm +++ b/code/modules/admin/verbs/modifyvariables.dm @@ -517,6 +517,25 @@ GLOBAL_PROTECT(VVpixelmovement) log_admin("[key_name(src)] modified [original_name]'s [objectvar]: [original_var]=[new_var]") message_admins("[key_name_admin(src)] modified [original_name]'s varlist [objectvar]: [original_var]=[new_var]") +/proc/vv_varname_lockcheck(param_var_name) + if(param_var_name in GLOB.VVlocked) + if(!check_rights(R_DEBUG)) + return FALSE + if(param_var_name in GLOB.VVckey_edit) + if(!check_rights(R_SPAWN|R_DEBUG)) + return FALSE + if(param_var_name in GLOB.VVicon_edit_lock) + if(!check_rights(R_FUN|R_DEBUG)) + return FALSE + if(param_var_name in GLOB.VVpixelmovement) + if(!check_rights(R_DEBUG)) + return FALSE + var/prompt = alert(usr, "Editing this var may irreparably break tile gliding for the rest of the round. THIS CAN'T BE UNDONE", "DANGER", "ABORT ", "Continue", " ABORT") + if (prompt != "Continue") + return FALSE + return TRUE + + /client/proc/modify_variables(atom/O, param_var_name = null, autodetect_class = 0) if(!check_rights(R_VAREDIT)) return @@ -546,26 +565,12 @@ GLOBAL_PROTECT(VVpixelmovement) return var_value = O.vars[variable] - - if(variable in GLOB.VVlocked) - if(!check_rights(R_DEBUG)) - return - if(variable in GLOB.VVckey_edit) - if(!check_rights(R_SPAWN|R_DEBUG)) - return - if(variable in GLOB.VVicon_edit_lock) - if(!check_rights(R_FUN|R_DEBUG)) - return + if(!vv_varname_lockcheck(variable)) + return if(istype(O, /datum/armor)) var/prompt = alert(src, "Editing this var changes this value on potentially thousands of items that share the same combination of armor values. If you want to edit the armor of just one item, use the \"Modify armor values\" dropdown item", "DANGER", "ABORT ", "Continue", " ABORT") if (prompt != "Continue") return - if(variable in GLOB.VVpixelmovement) - if(!check_rights(R_DEBUG)) - return - var/prompt = alert(src, "Editing this var may irreparably break tile gliding for the rest of the round. THIS CAN'T BE UNDONE", "DANGER", "ABORT ", "Continue", " ABORT") - if (prompt != "Continue") - return var/default = vv_get_class(variable, var_value) @@ -636,4 +641,4 @@ GLOBAL_PROTECT(VVpixelmovement) var/msg = "[key_name_admin(src)] modified [original_name]'s [variable] from [var_value] to [var_new]" message_admins(msg) admin_ticket_log(O, msg) - return TRUE + return TRUE \ No newline at end of file diff --git a/code/modules/antagonists/revenant/revenant.dm b/code/modules/antagonists/revenant/revenant.dm index e421e7fad8..87794993a7 100644 --- a/code/modules/antagonists/revenant/revenant.dm +++ b/code/modules/antagonists/revenant/revenant.dm @@ -25,6 +25,7 @@ healable = FALSE spacewalk = TRUE sight = SEE_SELF + throwforce = 0 see_in_dark = 8 lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE diff --git a/code/modules/atmospherics/gasmixtures/reactions.dm b/code/modules/atmospherics/gasmixtures/reactions.dm index 1c39e9a584..9cfcc24557 100644 --- a/code/modules/atmospherics/gasmixtures/reactions.dm +++ b/code/modules/atmospherics/gasmixtures/reactions.dm @@ -257,7 +257,7 @@ reaction_energy += gases_fused * FUSION_RELEASE_ENERGY_SUPER * (power_ratio / FUSION_ENERGY_DIVISOR_SUPER) cached_gases[/datum/gas/tritium][MOLES] += gases_fused * FUSION_GAS_CREATION_FACTOR_TRITIUM //60% of the gas is converted to energy, 40% to trit fusion_prepare_to_die_edition_rng = 100 //Wait a minute.. - do_explosion = TRUE + do_explosion = TRUE zap_range = FUSION_ZAP_RANGE_SUPER else if (power_ratio > FUSION_HIGH_TIER_THRESHOLD) //power ratio 20-50; High tier. The reaction is so energized that it fuses into a small amount of stimulum, and some pluoxium. Very dangerous, but super cool and super useful. @@ -433,7 +433,7 @@ var/new_heat_capacity = air.heat_capacity() if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) air.temperature = max(((air.temperature*old_heat_capacity - energy_taken)/new_heat_capacity),TCMB) - + /datum/gas_reaction/miaster //dry heat sterilization: clears out pathogens in the air priority = -10 //after all the heating from fires etc. is done @@ -449,9 +449,8 @@ /datum/gas_reaction/miaster/react(datum/gas_mixture/air, datum/holder) var/list/cached_gases = air.gases // As the name says it, it needs to be dry - if(/datum/gas/water_vapor in cached_gases) - if(cached_gases[/datum/gas/water_vapor]/air.total_moles() > 0.1) - return + if(cached_gases[/datum/gas/water_vapor] && cached_gases[/datum/gas/water_vapor][MOLES]/air.total_moles() > 0.1) + return //Replace miasma with oxygen var/cleaned_air = min(cached_gases[/datum/gas/miasma][MOLES], 20 + (air.temperature - FIRE_MINIMUM_TEMPERATURE_TO_EXIST - 70) / 20) diff --git a/code/modules/buildmode/README.md b/code/modules/buildmode/README.md new file mode 100644 index 0000000000..1bdb6e0758 --- /dev/null +++ b/code/modules/buildmode/README.md @@ -0,0 +1,215 @@ +# Buildmode + +## Code layout + +### Buildmode + +Manager for buildmode modes. Contains logic to manage switching between each mode, and presenting a suitable user interface. + +### Effects + +Special graphics used by buildmode modes for user interface purposes. + +### Buildmode Mode + +Implementer of buildmode behaviors. + +Existing varieties: + ++ Basic + + **Description**: + + Allows creation of simple structures consisting of floors, walls, windows, and airlocks. + + **Controls**: + + + *Left click a turf*: + + "Upgrades" the turf based on the following rules below: + + + Space -> Tiled floor + + Simulated floor -> Regular wall + + Wall -> Reinforced wall + + + *Right click a turf*: + + "Downgrades" the turf based on the following rules below: + + + Reinforced wall -> Regular wall + + Wall -> Tiled floor + + Simulated floor -> Space + + + *Right click an object*: + + Deletes the clicked object. + + + *Alt+Left click a location*: + + Places an airlock at the clicked location. + + + *Ctrl+Left click a location*: + + Places a window at the clicked location. + ++ Advanced + + **Description**: + + Creates an instance of a configurable atom path where you click. + + **Controls**: + + + *Right click on the mode selector*: + + Choose a path to spawn. + + + *Left click a location* (requires chosen path): + + Place an instance of the chosen path at the location. + + + *Right click an object*: + + Delete the object. + ++ Fill + + **Description**: + + Creates an instance of an atom path on every tile in a chosen region. + + With a special control input, instead deletes everything within the region. + + **Controls**: + + + *Right click on the mode selector*: + + Choose a path to spawn. + + + *Left click on a region* (requires chosen path): + + Fill the region with the chosen path. + + + *Alt+Left click on a region*: + + Deletes everything within the region. + + + *Right click during region selection*: + + Cancel region selection. + ++ Copy + + **Description**: + + Take an existing object in the world, and place duplicates with identical attributes where you click. + + May not always work nicely - "deep" variables such as lists or datums may malfunction. + + **Controls**: + + + *Right click an existing object*: + + Select the clicked object as a template. + + + *Left click a location* (Requires a selected object as template): + + Place a duplicate of the template at the clicked location. + ++ Area Edit + + **Description**: + + Modifies and creates areas. + + The active area will be highlighted in yellow. + + **Controls**: + + + *Right click the mode selector*: + + Create a new area, and make it active. + + + *Right click an existing area*: + + Make the clicked area active. + + + *Left click a turf*: + + When an area is active, adds the turf to the active area. + ++ Var Edit + + **Description**: + + Allows for setting and resetting variables of objects with a click. + + If the object does not have the var, will do nothing and print a warning message. + + **Controls**: + + + *Right click the mode selector*: + + Choose which variable to set, and what to set it to. + + + *Left click an atom*: + + Change the clicked atom's variables as configured. + + + *Right click an atom*: + + Reset the targeted variable to its original value in the code. + ++ Map Generator + + **Description**: + + Fills rectangular regions with algorithmically generated content. Right click during region selection to cancel. + + See the `procedural_mapping` module for the generators themselves. + + **Controls**: + + + *Right-click on the mode selector*: + + Select a map generator from all the generators present in the codebase. + + + *Left click two corners of an area*: + + Use the generator to populate the region. + + + *Right click during region selection*: + + Cancel region selection. + ++ Throwing + + **Description**: + + Select an object with left click, and right click to throw it towards where you clicked. + + **Controls**: + + + *Left click on a movable atom*: + + Select the atom for throwing. + + + *Right click on a location*: + + Throw the selected atom towards that location. + ++ Boom + + **Description**: + + Make explosions where you click. + + **Controls**: + + + *Right click the mode selector*: + + Configure the explosion size. + + + *Left click a location*: + + Cause an explosion where you clicked. \ No newline at end of file diff --git a/code/modules/buildmode/bm_mode.dm b/code/modules/buildmode/bm_mode.dm new file mode 100644 index 0000000000..0c7d640fc0 --- /dev/null +++ b/code/modules/buildmode/bm_mode.dm @@ -0,0 +1,91 @@ +/datum/buildmode_mode + var/key = "oops" + + var/datum/buildmode/BM + + // would corner selection work better as a component? + var/use_corner_selection = FALSE + var/list/preview + var/turf/cornerA + var/turf/cornerB + +/datum/buildmode_mode/New(datum/buildmode/BM) + src.BM = BM + preview = list() + return ..() + +/datum/buildmode_mode/Destroy() + cornerA = null + cornerB = null + QDEL_LIST(preview) + preview = null + return ..() + +/datum/buildmode_mode/proc/enter_mode(datum/buildmode/BM) + return + +/datum/buildmode_mode/proc/exit_mode(datum/buildmode/BM) + return + +/datum/buildmode_mode/proc/get_button_iconstate() + return "buildmode_[key]" + +/datum/buildmode_mode/proc/show_help(client/c) + CRASH("No help defined, yell at a coder") + +/datum/buildmode_mode/proc/change_settings(client/c) + to_chat(c, "There is no configuration available for this mode") + return + +/datum/buildmode_mode/proc/Reset() + deselect_region() + +/datum/buildmode_mode/proc/select_tile(turf/T, corner_to_select) + var/overlaystate + BM.holder.images -= preview + switch(corner_to_select) + if(AREASELECT_CORNERA) + overlaystate = "greenOverlay" + if(AREASELECT_CORNERB) + overlaystate = "blueOverlay" + + var/image/I = image('icons/turf/overlays.dmi', T, overlaystate) + I.plane = ABOVE_LIGHTING_PLANE + preview += I + BM.holder.images += preview + return T + +/datum/buildmode_mode/proc/highlight_region(region) + BM.holder.images -= preview + for(var/t in region) + var/image/I = image('icons/turf/overlays.dmi', t, "redOverlay") + I.plane = ABOVE_LIGHTING_PLANE + preview += I + BM.holder.images += preview + +/datum/buildmode_mode/proc/deselect_region() + BM.holder.images -= preview + preview.Cut() + cornerA = null + cornerB = null + +/datum/buildmode_mode/proc/handle_click(client/c, params, object) + var/list/pa = params2list(params) + var/left_click = pa.Find("left") + if(use_corner_selection) + if(left_click) + if(!cornerA) + cornerA = select_tile(get_turf(object), AREASELECT_CORNERA) + return + if(cornerA && !cornerB) + cornerB = select_tile(get_turf(object), AREASELECT_CORNERB) + to_chat(c, "Region selected, if you're happy with your selection left click again, otherwise right click.") + return + handle_selected_area(c, params) + deselect_region() + else + to_chat(c, "Region selection canceled!") + deselect_region() + return + +/datum/buildmode_mode/proc/handle_selected_area(client/c, params) \ No newline at end of file diff --git a/code/modules/buildmode/buildmode.dm b/code/modules/buildmode/buildmode.dm new file mode 100644 index 0000000000..b232bd212c --- /dev/null +++ b/code/modules/buildmode/buildmode.dm @@ -0,0 +1,161 @@ +#define BM_SWITCHSTATE_NONE 0 +#define BM_SWITCHSTATE_MODE 1 +#define BM_SWITCHSTATE_DIR 2 + +/datum/buildmode + var/build_dir = SOUTH + var/datum/buildmode_mode/mode + var/client/holder + + // login callback + var/li_cb + + // SECTION UI + var/list/buttons + + // Switching management + var/switch_state = BM_SWITCHSTATE_NONE + var/switch_width = 5 + // modeswitch UI + var/obj/screen/buildmode/mode/modebutton + var/list/modeswitch_buttons = list() + // dirswitch UI + var/obj/screen/buildmode/bdir/dirbutton + var/list/dirswitch_buttons = list() + +/datum/buildmode/New(client/c) + mode = new /datum/buildmode_mode/basic(src) + holder = c + buttons = list() + li_cb = CALLBACK(src, .proc/post_login) + holder.player_details.post_login_callbacks += li_cb + holder.show_popup_menus = FALSE + create_buttons() + holder.screen += buttons + holder.click_intercept = src + mode.enter_mode(src) + +/datum/buildmode/proc/quit() + mode.exit_mode(src) + holder.screen -= buttons + holder.click_intercept = null + holder.show_popup_menus = TRUE + qdel(src) + +/datum/buildmode/Destroy() + close_switchstates() + holder.player_details.post_login_callbacks -= li_cb + holder = null + QDEL_NULL(mode) + QDEL_LIST(modeswitch_buttons) + QDEL_LIST(dirswitch_buttons) + return ..() + +/datum/buildmode/proc/post_login() + // since these will get wiped upon login + holder.screen += buttons + // re-open the according switch mode + switch(switch_state) + if(BM_SWITCHSTATE_MODE) + open_modeswitch() + if(BM_SWITCHSTATE_DIR) + open_dirswitch() + +/datum/buildmode/proc/create_buttons() + // keep a reference so we can update it upon mode switch + modebutton = new /obj/screen/buildmode/mode(src) + buttons += modebutton + buttons += new /obj/screen/buildmode/help(src) + // keep a reference so we can update it upon dir switch + dirbutton = new /obj/screen/buildmode/bdir(src) + buttons += dirbutton + buttons += new /obj/screen/buildmode/quit(src) + // build the lists of switching buttons + build_options_grid(subtypesof(/datum/buildmode_mode), modeswitch_buttons, /obj/screen/buildmode/modeswitch) + build_options_grid(list(SOUTH,EAST,WEST,NORTH,NORTHWEST), dirswitch_buttons, /obj/screen/buildmode/dirswitch) + +// this creates a nice offset grid for choosing between buildmode options, +// because going "click click click ah hell" sucks. +/datum/buildmode/proc/build_options_grid(list/elements, list/buttonslist, buttontype) + var/pos_idx = 0 + for(var/thing in elements) + var/x = pos_idx % switch_width + var/y = FLOOR(pos_idx / switch_width, 1) + var/obj/screen/buildmode/B = new buttontype(src, thing) + // extra .5 for a nice offset look + B.screen_loc = "NORTH-[(1 + 0.5 + y*1.5)],WEST+[0.5 + x*1.5]" + buttonslist += B + pos_idx++ + +/datum/buildmode/proc/close_switchstates() + switch(switch_state) + if(BM_SWITCHSTATE_MODE) + close_modeswitch() + if(BM_SWITCHSTATE_DIR) + close_dirswitch() + +/datum/buildmode/proc/toggle_modeswitch() + if(switch_state == BM_SWITCHSTATE_MODE) + close_modeswitch() + else + close_switchstates() + open_modeswitch() + +/datum/buildmode/proc/open_modeswitch() + switch_state = BM_SWITCHSTATE_MODE + holder.screen += modeswitch_buttons + +/datum/buildmode/proc/close_modeswitch() + switch_state = BM_SWITCHSTATE_NONE + holder.screen -= modeswitch_buttons + +/datum/buildmode/proc/toggle_dirswitch() + if(switch_state == BM_SWITCHSTATE_DIR) + close_dirswitch() + else + close_switchstates() + open_dirswitch() + +/datum/buildmode/proc/open_dirswitch() + switch_state = BM_SWITCHSTATE_DIR + holder.screen += dirswitch_buttons + +/datum/buildmode/proc/close_dirswitch() + switch_state = BM_SWITCHSTATE_NONE + holder.screen -= dirswitch_buttons + +/datum/buildmode/proc/change_mode(newmode) + mode.exit_mode(src) + QDEL_NULL(mode) + close_switchstates() + mode = new newmode(src) + mode.enter_mode(src) + modebutton.update_icon() + +/datum/buildmode/proc/change_dir(newdir) + build_dir = newdir + close_dirswitch() + dirbutton.update_icon() + return 1 + +/datum/buildmode/proc/InterceptClickOn(mob/user, params, atom/object) + mode.handle_click(user.client, params, object) + 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 + B.quit() + log_admin("[key_name(usr)] has left build mode.") + else + new /datum/buildmode(M.client) + message_admins("[key_name_admin(usr)] has entered build mode.") + log_admin("[key_name(usr)] has entered build mode.") + +#undef BM_SWITCHSTATE_NONE +#undef BM_SWITCHSTATE_MODE +#undef BM_SWITCHSTATE_DIR \ No newline at end of file diff --git a/code/modules/buildmode/buttons.dm b/code/modules/buildmode/buttons.dm new file mode 100644 index 0000000000..e72dbde064 --- /dev/null +++ b/code/modules/buildmode/buttons.dm @@ -0,0 +1,90 @@ +/obj/screen/buildmode + icon = 'icons/misc/buildmode.dmi' + var/datum/buildmode/bd + // If we don't do this, we get occluded by item action buttons + layer = ABOVE_HUD_LAYER + +/obj/screen/buildmode/New(bld) + bd = bld + return ..() + +/obj/screen/buildmode/Destroy() + bd = null + return ..() + +/obj/screen/buildmode/mode + name = "Toggle Mode" + icon_state = "buildmode_basic" + screen_loc = "NORTH,WEST" + +/obj/screen/buildmode/mode/Click(location, control, params) + var/list/pa = params2list(params) + + if(pa.Find("left")) + bd.toggle_modeswitch() + else if(pa.Find("right")) + bd.mode.change_settings(usr.client) + update_icon() + return 1 + +/obj/screen/buildmode/mode/update_icon() + icon_state = bd.mode.get_button_iconstate() + +/obj/screen/buildmode/help + icon_state = "buildhelp" + screen_loc = "NORTH,WEST+1" + name = "Buildmode Help" + +/obj/screen/buildmode/help/Click(location, control, params) + bd.mode.show_help(usr.client) + return 1 + +/obj/screen/buildmode/bdir + icon_state = "build" + screen_loc = "NORTH,WEST+2" + name = "Change Dir" + +/obj/screen/buildmode/bdir/update_icon() + dir = bd.build_dir + return + +/obj/screen/buildmode/bdir/Click() + bd.toggle_dirswitch() + update_icon() + return 1 + +// used to switch between modes +/obj/screen/buildmode/modeswitch + var/datum/buildmode_mode/modetype + +/obj/screen/buildmode/modeswitch/New(bld, mt) + modetype = mt + icon_state = "buildmode_[initial(modetype.key)]" + name = initial(modetype.key) + return ..(bld) + +/obj/screen/buildmode/modeswitch/Click() + bd.change_mode(modetype) + return 1 + +// used to switch between dirs +/obj/screen/buildmode/dirswitch + icon_state = "build" + +/obj/screen/buildmode/dirswitch/New(bld, dir) + src.dir = dir + name = dir2text(dir) + return ..(bld) + +/obj/screen/buildmode/dirswitch/Click() + bd.change_dir(dir) + return 1 + +/obj/screen/buildmode/quit + icon_state = "buildquit" + screen_loc = "NORTH,WEST+3" + name = "Quit Buildmode" + +/obj/screen/buildmode/quit/Click() + bd.quit() + return 1 \ No newline at end of file diff --git a/code/modules/buildmode/effects/line.dm b/code/modules/buildmode/effects/line.dm new file mode 100644 index 0000000000..60191de934 --- /dev/null +++ b/code/modules/buildmode/effects/line.dm @@ -0,0 +1,28 @@ +/obj/effect/buildmode_line + var/image/I + var/client/cl + +/obj/effect/buildmode_line/New(client/C, atom/atom_a, atom/atom_b, linename) + name = linename + loc = get_turf(atom_a) + I = image('icons/misc/mark.dmi', src, "line", 19.0) + var/x_offset = ((atom_b.x * 32) + atom_b.pixel_x) - ((atom_a.x * 32) + atom_a.pixel_x) + var/y_offset = ((atom_b.y * 32) + atom_b.pixel_y) - ((atom_a.y * 32) + atom_a.pixel_y) + + var/matrix/mat = matrix() + mat.Translate(0, 16) + mat.Scale(1, sqrt((x_offset * x_offset) + (y_offset * y_offset)) / 32) + mat.Turn(90 - ATAN2(x_offset, y_offset)) // So... You pass coords in order x,y to this version of atan2. It should be called acsc2. + mat.Translate(atom_a.pixel_x, atom_a.pixel_y) + + transform = mat + cl = C + cl.images += I + +/obj/effect/buildmode_line/Destroy() + if(I) + if(istype(cl)) + cl.images -= I + cl = null + QDEL_NULL(I) + return ..() \ No newline at end of file diff --git a/code/modules/buildmode/submodes/advanced.dm b/code/modules/buildmode/submodes/advanced.dm new file mode 100644 index 0000000000..22eb998cdf --- /dev/null +++ b/code/modules/buildmode/submodes/advanced.dm @@ -0,0 +1,50 @@ +/datum/buildmode_mode/advanced + key = "advanced" + var/objholder = null + +// FIXME: add logic which adds a button displaying the icon +// of the currently selected path + +/datum/buildmode_mode/advanced/show_help(client/c) + to_chat(c, "***********************************************************") + to_chat(c, "Right Mouse Button on buildmode button = Set object type") + to_chat(c, "Left Mouse Button on turf/obj = Place objects") + to_chat(c, "Right Mouse Button = Delete objects") + to_chat(c, "") + to_chat(c, "Use the button in the upper left corner to") + to_chat(c, "change the direction of built objects.") + to_chat(c, "***********************************************************") + +/datum/buildmode_mode/advanced/change_settings(client/c) + var/target_path = input(c, "Enter typepath:", "Typepath", "/obj/structure/closet") + objholder = text2path(target_path) + if(!ispath(objholder)) + objholder = pick_closest_path(target_path) + if(!objholder) + alert("No path was selected") + return + else if(ispath(objholder, /area)) + objholder = null + alert("That path is not allowed.") + return + +/datum/buildmode_mode/advanced/handle_click(client/c, params, obj/object) + var/list/pa = params2list(params) + var/left_click = pa.Find("left") + var/right_click = pa.Find("right") + if(left_click) + if(ispath(objholder,/turf)) + var/turf/T = get_turf(object) + log_admin("Build Mode: [key_name(c)] modified [T] in [AREACOORD(object)] to [objholder]") + T.ChangeTurf(objholder) + else if(!isnull(objholder)) + var/obj/A = new objholder (get_turf(object)) + A.setDir(BM.build_dir) + log_admin("Build Mode: [key_name(c)] modified [A]'s [COORD(A)] dir to [BM.build_dir]") + else + to_chat(c, "Select object type first.") + else if(right_click) + if(isobj(object)) + log_admin("Build Mode: [key_name(c)] deleted [object] at [AREACOORD(object)]") + qdel(object) + \ No newline at end of file diff --git a/code/modules/buildmode/submodes/area_edit.dm b/code/modules/buildmode/submodes/area_edit.dm new file mode 100644 index 0000000000..19f536e073 --- /dev/null +++ b/code/modules/buildmode/submodes/area_edit.dm @@ -0,0 +1,61 @@ +/datum/buildmode_mode/area_edit + key = "areaedit" + var/area/storedarea + var/image/areaimage + +/datum/buildmode_mode/area_edit/New() + areaimage = image('icons/turf/areas.dmi', null, "yellow") + ..() + +/datum/buildmode_mode/area_edit/enter_mode(datum/buildmode/BM) + BM.holder.images += areaimage + +/datum/buildmode_mode/area_edit/exit_mode(datum/buildmode/BM) + areaimage.loc = null // de-color the area + BM.holder.images -= areaimage + return ..() + +/datum/buildmode_mode/area_edit/Destroy() + QDEL_NULL(areaimage) + storedarea = null + return ..() + +/datum/buildmode_mode/area_edit/show_help(client/c) + to_chat(c, "***********************************************************") + to_chat(c, "Left Mouse Button on obj/turf/mob = Paint area") + to_chat(c, "Right Mouse Button on obj/turf/mob = Select area to paint") + to_chat(c, "Right Mouse Button on buildmode button = Create new area") + to_chat(c, "***********************************************************") + +/datum/buildmode_mode/area_edit/change_settings(client/c) + var/target_path = input(c, "Enter typepath:", "Typepath", "/area") + var/areatype = text2path(target_path) + if(ispath(areatype,/area)) + var/areaname = input(c, "Enter area name:", "Area name", "Area") + if(!areaname || !length(areaname)) + return + storedarea = new areatype + storedarea.power_equip = 0 + storedarea.power_light = 0 + storedarea.power_environ = 0 + storedarea.always_unpowered = 0 + storedarea.name = areaname + areaimage.loc = storedarea // color our area + +/datum/buildmode_mode/area_edit/handle_click(client/c, params, object) + var/list/pa = params2list(params) + var/left_click = pa.Find("left") + var/right_click = pa.Find("right") + + if(left_click) + if(!storedarea) + to_chat(c, "Configure or select the area you want to paint first!") + return + var/turf/T = get_turf(object) + if(get_area(T) != storedarea) + log_admin("Build Mode: [key_name(c)] added [AREACOORD(T)] to [storedarea]") + storedarea.contents.Add(T) + else if(right_click) + var/turf/T = get_turf(object) + storedarea = get_area(T) + areaimage.loc = storedarea // color our area diff --git a/code/modules/buildmode/submodes/basic.dm b/code/modules/buildmode/submodes/basic.dm new file mode 100644 index 0000000000..4f7b176691 --- /dev/null +++ b/code/modules/buildmode/submodes/basic.dm @@ -0,0 +1,52 @@ +/datum/buildmode_mode/basic + key = "basic" + +/datum/buildmode_mode/basic/show_help(client/c) + to_chat(c, "***********************************************************") + to_chat(c, "Left Mouse Button = Construct / Upgrade") + to_chat(c, "Right Mouse Button = Deconstruct / Delete / Downgrade") + to_chat(c, "Left Mouse Button + ctrl = R-Window") + to_chat(c, "Left Mouse Button + alt = Airlock") + to_chat(c, "") + to_chat(c, "Use the button in the upper left corner to") + to_chat(c, "change the direction of built objects.") + to_chat(c, "***********************************************************") + +/datum/buildmode_mode/basic/handle_click(client/c, params, obj/object) + var/list/pa = params2list(params) + var/left_click = pa.Find("left") + var/right_click = pa.Find("right") + var/ctrl_click = pa.Find("ctrl") + var/alt_click = pa.Find("alt") + + if(istype(object,/turf) && left_click && !alt_click && !ctrl_click) + var/turf/T = object + if(isspaceturf(object)) + T.PlaceOnTop(/turf/open/floor/plating) + else if(isplatingturf(object)) + T.PlaceOnTop(/turf/open/floor/plasteel) + else if(isfloorturf(object)) + T.PlaceOnTop(/turf/closed/wall) + else if(iswallturf(object)) + T.PlaceOnTop(/turf/closed/wall/r_wall) + log_admin("Build Mode: [key_name(c)] built [T] at [AREACOORD(T)]") + return + else if(right_click) + log_admin("Build Mode: [key_name(c)] deleted [object] at [AREACOORD(object)]") + if(isturf(object)) + var/turf/T = object + T.ScrapeAway() + else if(isobj(object)) + qdel(object) + return + else if(istype(object,/turf) && alt_click && left_click) + log_admin("Build Mode: [key_name(c)] built an airlock at [AREACOORD(object)]") + new/obj/machinery/door/airlock(get_turf(object)) + else if(istype(object,/turf) && ctrl_click && left_click) + var/obj/structure/window/reinforced/window + if(BM.build_dir == NORTHWEST) + window = new /obj/structure/window/reinforced/fulltile(get_turf(object)) + else + window = new /obj/structure/window/reinforced(get_turf(object)) + window.setDir(BM.build_dir) + log_admin("Build Mode: [key_name(c)] built a window at [AREACOORD(object)]") diff --git a/code/modules/buildmode/submodes/boom.dm b/code/modules/buildmode/submodes/boom.dm new file mode 100644 index 0000000000..710352fdfc --- /dev/null +++ b/code/modules/buildmode/submodes/boom.dm @@ -0,0 +1,38 @@ +/datum/buildmode_mode/boom + key = "boom" + + var/devastation = -1 + var/heavy = -1 + var/light = -1 + var/flash = -1 + var/flames = -1 + +/datum/buildmode_mode/boom/show_help(client/c) + to_chat(c, "***********************************************************") + to_chat(c, "Mouse Button on obj = Kaboom") + to_chat(c, "***********************************************************") + +/datum/buildmode_mode/boom/change_settings(client/c) + devastation = input(c, "Range of total devastation. -1 to none", text("Input")) as num|null + if(devastation == null) + devastation = -1 + heavy = input(c, "Range of heavy impact. -1 to none", text("Input")) as num|null + if(heavy == null) + heavy = -1 + light = input(c, "Range of light impact. -1 to none", text("Input")) as num|null + if(light == null) + light = -1 + flash = input(c, "Range of flash. -1 to none", text("Input")) as num|null + if(flash == null) + flash = -1 + flames = input(c, "Range of flames. -1 to none", text("Input")) as num|null + if(flames == null) + flames = -1 + +/datum/buildmode_mode/boom/handle_click(client/c, params, obj/object) + var/list/pa = params2list(params) + var/left_click = pa.Find("left") + + if(left_click) + explosion(object, devastation, heavy, light, flash, FALSE, TRUE, flames) + log_admin("Build Mode: [key_name(c)] caused an explosion(dev=[devastation], hvy=[heavy], lgt=[light], flash=[flash], flames=[flames]) at [AREACOORD(object)]") diff --git a/code/modules/buildmode/submodes/copy.dm b/code/modules/buildmode/submodes/copy.dm new file mode 100644 index 0000000000..ba415c50fc --- /dev/null +++ b/code/modules/buildmode/submodes/copy.dm @@ -0,0 +1,28 @@ +/datum/buildmode_mode/copy + key = "copy" + var/atom/movable/stored = null + +/datum/buildmode_mode/copy/Destroy() + stored = null + return ..() + +/datum/buildmode_mode/copy/show_help(client/c) + to_chat(c, "***********************************************************") + to_chat(c, "Left Mouse Button on obj/turf/mob = Spawn a Copy of selected target") + to_chat(c, "Right Mouse Button on obj/mob = Select target to copy") + to_chat(c, "***********************************************************") + +/datum/buildmode_mode/copy/handle_click(client/c, params, obj/object) + var/list/pa = params2list(params) + var/left_click = pa.Find("left") + var/right_click = pa.Find("right") + + if(left_click) + var/turf/T = get_turf(object) + if(stored) + DuplicateObject(stored, perfectcopy=1, sameloc=0,newloc=T) + log_admin("Build Mode: [key_name(c)] copied [stored] to [AREACOORD(object)]") + else if(right_click) + if(ismovableatom(object)) // No copying turfs for now. + to_chat(c, "[object] set as template.") + stored = object diff --git a/code/modules/buildmode/submodes/fill.dm b/code/modules/buildmode/submodes/fill.dm new file mode 100644 index 0000000000..58320cff7b --- /dev/null +++ b/code/modules/buildmode/submodes/fill.dm @@ -0,0 +1,62 @@ +/datum/buildmode_mode/fill + key = "fill" + + use_corner_selection = TRUE + var/objholder = null + +/datum/buildmode_mode/fill/show_help(client/c) + to_chat(c, "***********************************************************") + to_chat(c, "Left Mouse Button on turf/obj/mob = Select corner") + to_chat(c, "Left Mouse Button + Alt on turf/obj/mob = Delete region") + to_chat(c, "Right Mouse Button on buildmode button = Select object type") + to_chat(c, "***********************************************************") + +/datum/buildmode_mode/fill/change_settings(client/c) + var/target_path = input(c, "Enter typepath:" ,"Typepath","/obj/structure/closet") + objholder = text2path(target_path) + if(!ispath(objholder)) + objholder = pick_closest_path(target_path) + if(!objholder) + alert("No path has been selected.") + return + else if(ispath(objholder, /area)) + objholder = null + alert("Area paths are not supported for this mode, use the area edit mode instead.") + return + deselect_region() + +/datum/buildmode_mode/fill/handle_click(client/c, params, obj/object) + if(isnull(objholder)) + to_chat(c, "Select an object type first.") + deselect_region() + return + ..() + +/datum/buildmode_mode/fill/handle_selected_area(client/c, params) + var/list/pa = params2list(params) + var/left_click = pa.Find("left") + var/alt_click = pa.Find("alt") + + if(left_click) //rectangular + if(alt_click) + var/list/deletion_area = block(get_turf(cornerA),get_turf(cornerB)) + for(var/beep in deletion_area) + var/turf/T = beep + for(var/atom/movable/AM in T) + qdel(AM) + // extreme haircut + T.ScrapeAway(INFINITY, CHANGETURF_DEFER_CHANGE) + for(var/beep in deletion_area) + var/turf/T = beep + T.AfterChange() + log_admin("Build Mode: [key_name(c)] deleted turfs from [AREACOORD(cornerA)] through [AREACOORD(cornerB)]") + // if there's an analogous proc for this on tg lmk + // empty_region(block(get_turf(cornerA),get_turf(cornerB))) + else + for(var/turf/T in block(get_turf(cornerA),get_turf(cornerB))) + if(ispath(objholder,/turf)) + T.PlaceOnTop(objholder) + else + var/obj/A = new objholder(T) + A.setDir(BM.build_dir) + log_admin("Build Mode: [key_name(c)] with path [objholder], filled the region from [AREACOORD(cornerA)] through [AREACOORD(cornerB)]") \ No newline at end of file diff --git a/code/modules/buildmode/submodes/mapgen.dm b/code/modules/buildmode/submodes/mapgen.dm new file mode 100644 index 0000000000..2b57ec1180 --- /dev/null +++ b/code/modules/buildmode/submodes/mapgen.dm @@ -0,0 +1,48 @@ +/datum/buildmode_mode/mapgen + key = "mapgen" + + use_corner_selection = TRUE + var/generator_path + +/datum/buildmode_mode/mapgen/show_help(client/c) + to_chat(c, "***********************************************************") + to_chat(c, "Left Mouse Button on turf/obj/mob = Select corner") + to_chat(c, "Right Mouse Button on buildmode button = Select generator") + to_chat(c, "***********************************************************") + +/datum/buildmode_mode/mapgen/change_settings(client/c) + var/list/gen_paths = subtypesof(/datum/mapGenerator) + var/list/options = list() + for(var/path in gen_paths) + var/datum/mapGenerator/MP = path + options[initial(MP.buildmode_name)] = path + var/type = input(c,"Select Generator Type","Type") as null|anything in options + if(!type) + return + + generator_path = options[type] + deselect_region() + +/datum/buildmode_mode/mapgen/handle_click(client/c, params, obj/object) + if(isnull(generator_path)) + to_chat(c, "Select generator type first.") + deselect_region() + return + ..() + +/datum/buildmode_mode/mapgen/handle_selected_area(client/c, params) + var/list/pa = params2list(params) + var/left_click = pa.Find("left") + if(left_click) + var/datum/mapGenerator/G = new generator_path + if(istype(G, /datum/mapGenerator/repair/reload_station_map)) + if(GLOB.reloading_map) + to_chat(c, "You are already reloading an area! Please wait for it to fully finish loading before trying to load another!") + deselect_region() + return + G.defineRegion(cornerA, cornerB, 1) + highlight_region(G.map) + var/confirm = alert("Are you sure you want run the map generator?", "Run generator", "Yes", "No") + if(confirm == "Yes") + G.generate() + log_admin("Build Mode: [key_name(c)] ran the map generator '[G.buildmode_name]' in the region from [AREACOORD(cornerA)] to [AREACOORD(cornerB)]") \ No newline at end of file diff --git a/code/modules/buildmode/submodes/throwing.dm b/code/modules/buildmode/submodes/throwing.dm new file mode 100644 index 0000000000..6d578c9c46 --- /dev/null +++ b/code/modules/buildmode/submodes/throwing.dm @@ -0,0 +1,29 @@ +/datum/buildmode_mode/throwing + key = "throw" + + var/atom/movable/throw_atom = null + +/datum/buildmode_mode/throwing/Destroy() + throw_atom = null + return ..() + +/datum/buildmode_mode/throwing/show_help(client/c) + to_chat(c, "***********************************************************") + to_chat(c, "Left Mouse Button on turf/obj/mob = Select") + to_chat(c, "Right Mouse Button on turf/obj/mob = Throw") + to_chat(c, "***********************************************************") + +/datum/buildmode_mode/throwing/handle_click(client/c, params, obj/object) + var/list/pa = params2list(params) + var/left_click = pa.Find("left") + var/right_click = pa.Find("right") + + if(left_click) + if(isturf(object)) + return + throw_atom = object + to_chat(c, "Selected object '[throw_atom]'") + if(right_click) + if(throw_atom) + throw_atom.throw_at(object, 10, 1, c.mob) + log_admin("Build Mode: [key_name(c)] threw [throw_atom] at [object] ([AREACOORD(object)])") diff --git a/code/modules/buildmode/submodes/variable_edit.dm b/code/modules/buildmode/submodes/variable_edit.dm new file mode 100644 index 0000000000..ac4c1ef66a --- /dev/null +++ b/code/modules/buildmode/submodes/variable_edit.dm @@ -0,0 +1,62 @@ +/datum/buildmode_mode/varedit + key = "edit" + // Varedit mode + var/varholder = null + var/valueholder = null + +/datum/buildmode_mode/varedit/Destroy() + varholder = null + valueholder = null + return ..() + +/datum/buildmode_mode/varedit/show_help(client/c) + to_chat(c, "***********************************************************") + to_chat(c, "Right Mouse Button on buildmode button = Select var(type) & value") + to_chat(c, "Left Mouse Button on turf/obj/mob = Set var(type) & value") + to_chat(c, "Right Mouse Button on turf/obj/mob = Reset var's value") + to_chat(c, "***********************************************************") + +/datum/buildmode_mode/varedit/Reset() + . = ..() + varholder = null + valueholder = null + +/datum/buildmode_mode/varedit/change_settings(client/c) + varholder = input(c, "Enter variable name:" ,"Name", "name") + + if(!vv_varname_lockcheck(varholder)) + return + + var/temp_value = c.vv_get_value() + if(isnull(temp_value["class"])) + Reset() + to_chat(c, "Variable unset.") + return + valueholder = temp_value["value"] + +/datum/buildmode_mode/varedit/handle_click(client/c, params, obj/object) + var/list/pa = params2list(params) + var/left_click = pa.Find("left") + var/right_click = pa.Find("right") + + if(isnull(varholder)) + to_chat(c, "Choose a variable to modify first.") + return + if(left_click) + if(object.vars.Find(varholder)) + if(object.vv_edit_var(varholder, valueholder) == FALSE) + to_chat(c, "Your edit was rejected by the object.") + return + log_admin("Build Mode: [key_name(c)] modified [object.name]'s [varholder] to [valueholder]") + else + to_chat(c, "[initial(object.name)] does not have a var called '[varholder]'") + if(right_click) + if(object.vars.Find(varholder)) + var/reset_value = initial(object.vars[varholder]) + if(object.vv_edit_var(varholder, reset_value) == FALSE) + to_chat(c, "Your edit was rejected by the object.") + return + log_admin("Build Mode: [key_name(c)] modified [object.name]'s [varholder] to [reset_value]") + else + to_chat(c, "[initial(object.name)] does not have a var called '[varholder]'") + diff --git a/code/modules/cargo/bounties/item.dm b/code/modules/cargo/bounties/item.dm index edaf5d96fc..b2586d7c5b 100644 --- a/code/modules/cargo/bounties/item.dm +++ b/code/modules/cargo/bounties/item.dm @@ -28,7 +28,11 @@ /datum/bounty/item/ship(obj/O) if(!applies_to(O)) return - shipped_count += 1 + if(istype(O,/obj/item/stack)) + var/obj/item/stack/O_is_a_stack = O + shipped_count += O_is_a_stack.amount + else + shipped_count += 1 /datum/bounty/item/compatible_with(datum/other_bounty) return type != other_bounty.type diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm index aae783ac33..d7cc7a3adf 100644 --- a/code/modules/cargo/packs.dm +++ b/code/modules/cargo/packs.dm @@ -158,6 +158,18 @@ crate_value -= I.cost new I.item(C) +/datum/supply_pack/emergency/plasma_spacesuit + name = "Plasmaman Space Envirosuits" + desc = "Contains two space-worthy envirosuits for Plasmamen. Order now and we'll throw in two free helmets! Requires EVA access to open." + cost = 4000 + access = ACCESS_EVA + contains = list(/obj/item/clothing/suit/space/eva/plasmaman, + /obj/item/clothing/suit/space/eva/plasmaman, + /obj/item/clothing/head/helmet/space/plasmaman, + /obj/item/clothing/head/helmet/space/plasmaman) + crate_name = "plasmaman EVA crate" + crate_type = /obj/structure/closet/crate/secure + /datum/supply_pack/emergency/plasmaman name = "Plasmaman Supply Kit" desc = "Keep those Plasmamen alive with two sets of Plasmaman outfits. Each set contains a plasmaman jumpsuit, internals tank, and helmet." diff --git a/code/modules/client/player_details.dm b/code/modules/client/player_details.dm index ac5a14a555..814000ce48 100644 --- a/code/modules/client/player_details.dm +++ b/code/modules/client/player_details.dm @@ -1,4 +1,6 @@ /datum/player_details var/list/player_actions = list() var/list/logging = list() + var/list/post_login_callbacks = list() + var/list/post_logout_callbacks = list() var/byond_version = "Unknown" \ No newline at end of file diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index e60a63616b..84b949014c 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -142,6 +142,7 @@ hud_used.throw_icon.icon_state = "act_throw_on" /mob/proc/throw_item(atom/target) + SEND_SIGNAL(src, COMSIG_MOB_THROW, target) return /mob/living/carbon/throw_item(atom/target) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 036185f539..5a37007271 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1470,6 +1470,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) log_combat(M, H, "attempted to touch") H.visible_message("[M] attempted to touch [H]!") return 0 + SEND_SIGNAL(M, COMSIG_MOB_ATTACK_HAND, M, H, attacker_style) switch(M.a_intent) if("help") help(M, H, attacker_style) diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm index 611139bbf9..8d1b4b18d4 100644 --- a/code/modules/mob/login.dm +++ b/code/modules/mob/login.dm @@ -41,12 +41,14 @@ update_client_colour() update_mouse_pointer() if(client) - client.click_intercept = null - client.change_view(CONFIG_GET(string/default_view)) // Resets the client.view in case it was changed. if(client.player_details.player_actions.len) for(var/datum/action/A in client.player_details.player_actions) A.Grant(src) + for(var/foo in client.player_details.post_login_callbacks) + var/datum/callback/CB = foo + CB.Invoke() + log_message("Client [key_name(src)] has taken ownership of mob [src]([src.type])", LOG_OWNERSHIP) diff --git a/code/modules/mob/logout.dm b/code/modules/mob/logout.dm index 031cb1b58d..3f68f3e7a2 100644 --- a/code/modules/mob/logout.dm +++ b/code/modules/mob/logout.dm @@ -9,4 +9,9 @@ if(loc) loc.on_log(FALSE) + if(client) + for(var/foo in client.player_details.post_logout_callbacks) + var/datum/callback/CB = foo + CB.Invoke() + return TRUE diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index a32d8dca45..1c05b6c11a 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -604,7 +604,7 @@ else prot = 1 - if(prot > 0) + if(prot > 0 || user.has_trait(TRAIT_RESISTHEAT) || user.has_trait(TRAIT_RESISTHEATHANDS)) to_chat(user, "You remove the light [fitting].") else if(istype(user) && user.dna.check_mutation(TK)) to_chat(user, "You telekinetically remove the light [fitting].") diff --git a/code/modules/research/nanites/nanite_programs/buffing.dm b/code/modules/research/nanites/nanite_programs/buffing.dm index a26cb7bd68..578e7731bb 100644 --- a/code/modules/research/nanites/nanite_programs/buffing.dm +++ b/code/modules/research/nanites/nanite_programs/buffing.dm @@ -32,7 +32,7 @@ host_mob.SetStun(0) host_mob.SetKnockdown(0) host_mob.SetUnconscious(0) - host_mob.adjustStaminaLoss(-75) + host_mob.adjustStaminaLoss(-10) //stimulants give stamina heal now host_mob.lying = 0 host_mob.update_canmove() host_mob.reagents.add_reagent("stimulants", 1.5) diff --git a/code/modules/vehicles/cars/car.dm b/code/modules/vehicles/cars/car.dm index 9e9b41bd80..d4437e17d5 100644 --- a/code/modules/vehicles/cars/car.dm +++ b/code/modules/vehicles/cars/car.dm @@ -1,18 +1,34 @@ /obj/vehicle/sealed/car layer = ABOVE_MOB_LAYER anchored = TRUE + default_driver_move = FALSE var/car_traits = NONE //Bitflag for special behavior such as kidnapping var/engine_sound = 'sound/vehicles/carrev.ogg' var/last_enginesound_time var/engine_sound_length = 20 //Set this to the length of the engine sound var/escape_time = 200 //Time it takes to break out of the car +/obj/vehicle/sealed/car/Initialize() + . = ..() + LoadComponent(/datum/component/riding) + /obj/vehicle/sealed/car/generate_actions() . = ..() initialize_controller_action_type(/datum/action/vehicle/sealed/remove_key, VEHICLE_CONTROL_DRIVE) if(car_traits & CAN_KIDNAP) initialize_controller_action_type(/datum/action/vehicle/sealed/DumpKidnappedMobs, VEHICLE_CONTROL_DRIVE) +/obj/vehicle/sealed/car/driver_move(mob/user, direction) + if(key_type && !is_key(inserted_key)) + to_chat(user, "[src] has no key inserted!") + return FALSE + var/datum/component/riding/R = GetComponent(/datum/component/riding) + R.handle_ride(user, direction) + if(world.time < last_enginesound_time + engine_sound_length) + return + last_enginesound_time = world.time + playsound(src, engine_sound, 100, TRUE) + /obj/vehicle/sealed/car/MouseDrop_T(atom/dropping, mob/M) if(!M.canmove || M.stat || M.restrained()) return FALSE @@ -33,12 +49,6 @@ mob_exit(M, silent) return TRUE -/obj/vehicle/sealed/car/after_move(direction) - if(world.time < last_enginesound_time + engine_sound_length) - return - last_enginesound_time = world.time - playsound(src, engine_sound, 100, TRUE) - /obj/vehicle/sealed/car/attacked_by(obj/item/I, mob/living/user) if(!I.force) return @@ -52,7 +62,7 @@ if(!(car_traits & CAN_KIDNAP)) return if(occupants[user]) - return + return to_chat(user, "You start opening [src]'s trunk.") if(do_after(user, 30)) if(return_amount_of_controllers_with_flag(VEHICLE_CONTROL_KIDNAPPED)) @@ -75,4 +85,4 @@ if(!silent) M.visible_message("[M] is forced into \the [src]!") M.forceMove(src) - add_occupant(M, VEHICLE_CONTROL_KIDNAPPED) + add_occupant(M, VEHICLE_CONTROL_KIDNAPPED) \ No newline at end of file diff --git a/code/modules/vehicles/cars/clowncar.dm b/code/modules/vehicles/cars/clowncar.dm index 3485c0f378..63ef4fda5a 100644 --- a/code/modules/vehicles/cars/clowncar.dm +++ b/code/modules/vehicles/cars/clowncar.dm @@ -127,4 +127,4 @@ icon_state = initial(icon_state) /obj/vehicle/sealed/car/clowncar/proc/StopDroppingOil() - droppingoil = FALSE + droppingoil = FALSE \ No newline at end of file diff --git a/code/modules/vehicles/entered.dm b/code/modules/vehicles/sealed.dm similarity index 100% rename from code/modules/vehicles/entered.dm rename to code/modules/vehicles/sealed.dm diff --git a/icons/misc/buildmode.dmi b/icons/misc/buildmode.dmi index 649a772656..f0de428b6c 100644 Binary files a/icons/misc/buildmode.dmi and b/icons/misc/buildmode.dmi differ diff --git a/modular_citadel/code/modules/mining/mining_ruins.dm b/modular_citadel/code/modules/mining/mining_ruins.dm new file mode 100644 index 0000000000..f1cc55b420 --- /dev/null +++ b/modular_citadel/code/modules/mining/mining_ruins.dm @@ -0,0 +1,25 @@ +/datum/map_template/ruin/lavaland/alien_nest + name = "Alien Nest" + id = "alien-nest" + description = "Not even Necropolis is safe from alien infestation. The competition for hosts has locked the legion and aliens in an endless conflict that can only be resolved by a PKA." + suffix = "lavaland_surface_alien_nest.dmm" + cost = 20 + +//Aliens for the alien nest space ruin. +/obj/effect/mob_spawn/alien/corpse/humanoid/drone + mob_type = /mob/living/carbon/alien/humanoid/drone + death = TRUE + name = "alien drone" + mob_name = "alien drone" + /obj/effect/mob_spawn/alien/corpse/humanoid/queen + mob_type = /mob/living/carbon/alien/humanoid/royal/queen + death = TRUE + name = "alien queen" + mob_name = "alien queen" + +/obj/item/reagent_containers/syringe/alien + name = "Hive's Blessing" + desc = "A syringe filled with a strange viscous liquid. It might be best to leave it alone." + amount_per_transfer_from_this = 1 + volume = 1 + list_reagents = list("xenomicrobes" = 1) \ No newline at end of file diff --git a/tgstation.dme b/tgstation.dme index 356acba267..d5e6ef47a0 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -332,7 +332,6 @@ #include "code\datums\brain_damage\split_personality.dm" #include "code\datums\components\_component.dm" #include "code\datums\components\anti_magic.dm" -#include "code\datums\components\archaeology.dm" #include "code\datums\components\armor_plate.dm" #include "code\datums\components\butchering.dm" #include "code\datums\components\caltrop.dm" @@ -1101,7 +1100,6 @@ #include "code\modules\admin\verbs\bluespacearty.dm" #include "code\modules\admin\verbs\borgpanel.dm" #include "code\modules\admin\verbs\BrokenInhands.dm" -#include "code\modules\admin\verbs\buildmode.dm" #include "code\modules\admin\verbs\cinematic.dm" #include "code\modules\admin\verbs\deadsay.dm" #include "code\modules\admin\verbs\debug.dm" @@ -1385,6 +1383,19 @@ #include "code\modules\awaymissions\mission_code\undergroundoutpost45.dm" #include "code\modules\awaymissions\mission_code\wildwest.dm" #include "code\modules\bsql\includes.dm" +#include "code\modules\buildmode\bm_mode.dm" +#include "code\modules\buildmode\buildmode.dm" +#include "code\modules\buildmode\buttons.dm" +#include "code\modules\buildmode\effects\line.dm" +#include "code\modules\buildmode\submodes\advanced.dm" +#include "code\modules\buildmode\submodes\area_edit.dm" +#include "code\modules\buildmode\submodes\basic.dm" +#include "code\modules\buildmode\submodes\boom.dm" +#include "code\modules\buildmode\submodes\copy.dm" +#include "code\modules\buildmode\submodes\fill.dm" +#include "code\modules\buildmode\submodes\mapgen.dm" +#include "code\modules\buildmode\submodes\throwing.dm" +#include "code\modules\buildmode\submodes\variable_edit.dm" #include "code\modules\cargo\bounty.dm" #include "code\modules\cargo\bounty_console.dm" #include "code\modules\cargo\console.dm" @@ -2693,11 +2704,11 @@ #include "code\modules\vehicles\_vehicle.dm" #include "code\modules\vehicles\atv.dm" #include "code\modules\vehicles\bicycle.dm" -#include "code\modules\vehicles\entered.dm" #include "code\modules\vehicles\lavaboat.dm" #include "code\modules\vehicles\pimpin_ride.dm" #include "code\modules\vehicles\ridden.dm" #include "code\modules\vehicles\scooter.dm" +#include "code\modules\vehicles\sealed.dm" #include "code\modules\vehicles\secway.dm" #include "code\modules\vehicles\speedbike.dm" #include "code\modules\vehicles\vehicle_actions.dm" @@ -2892,6 +2903,7 @@ #include "modular_citadel\code\modules\mentor\mentorpm.dm" #include "modular_citadel\code\modules\mentor\mentorsay.dm" #include "modular_citadel\code\modules\mining\mine_items.dm" +#include "modular_citadel\code\modules\mining\mining_ruins.dm" #include "modular_citadel\code\modules\mob\cit_emotes.dm" #include "modular_citadel\code\modules\mob\mob.dm" #include "modular_citadel\code\modules\mob\dead\new_player\sprite_accessories.dm"