diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_ashwalker_shrine.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_ashwalker_shrine.dmm deleted file mode 100644 index b3d7e439a805..000000000000 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_ashwalker_shrine.dmm +++ /dev/null @@ -1,3692 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"ad" = ( -/obj/structure/fence{ - dir = 4 - }, -/turf/open/floor/plating/ashplanet/ash, -/area/overmap_encounter/planetoid/lava/explored) -"aw" = ( -/obj/structure/stone_tile/block{ - dir = 8 - }, -/obj/item/melee/transforming/energy/sword/saber/red, -/obj/effect/mob_spawn/human/corpse/nanotrasenassaultsoldier, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"aA" = ( -/turf/template_noop, -/area/template_noop) -"aG" = ( -/obj/item/circuitboard/computer/operating, -/obj/item/storage/backpack/duffelbag/syndie/surgery, -/obj/structure/closet/supplypod, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"bm" = ( -/obj/structure/stone_tile/slab, -/obj/structure/table/wood, -/obj/item/storage/toolbox/syndicate, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"cm" = ( -/obj/structure/stone_tile/block, -/obj/structure/stone_tile/slab{ - pixel_y = -16 - }, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"cv" = ( -/obj/structure/bonfire, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"cx" = ( -/obj/structure/stone_tile/slab, -/obj/item/ammo_casing/shotgun/buckshot, -/obj/effect/mob_spawn/human/corpse{ - mob_species = /datum/species/lizard/ashwalker - }, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"cA" = ( -/obj/structure/stone_tile/block{ - dir = 4 - }, -/obj/structure/stone_tile/block{ - dir = 8 - }, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"cR" = ( -/obj/structure/stone_tile/slab, -/obj/item/ammo_casing/shotgun/buckshot, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"dg" = ( -/obj/structure/stone_tile/block{ - pixel_x = -16 - }, -/obj/structure/stone_tile{ - dir = 8 - }, -/obj/structure/stone_tile{ - dir = 4 - }, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"dn" = ( -/obj/structure/stone_tile/block{ - dir = 8 - }, -/obj/structure/stone_tile/block{ - dir = 4 - }, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"dv" = ( -/obj/item/ammo_casing/shotgun/buckshot, -/turf/open/floor/wood, -/area/overmap_encounter/planetoid/lava/explored) -"dD" = ( -/turf/closed/indestructible/riveted/boss, -/area/overmap_encounter/planetoid/lava/explored) -"dM" = ( -/obj/structure/stone_tile/slab, -/turf/open/lava/smooth/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"dY" = ( -/obj/structure/fence/door{ - dir = 4 - }, -/turf/open/floor/wood, -/area/overmap_encounter/planetoid/lava/explored) -"ee" = ( -/obj/structure/stone_tile/slab/burnt, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"ej" = ( -/obj/structure/stone_tile/surrounding_tile/cracked{ - dir = 4 - }, -/obj/structure/stone_tile/center/cracked, -/obj/structure/stone_tile/surrounding_tile, -/obj/structure/stone_tile/surrounding_tile{ - dir = 1 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"ek" = ( -/obj/structure/stone_tile/block{ - dir = 8 - }, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"eq" = ( -/obj/item/storage/bag/plants/portaseeder, -/turf/open/floor/wood, -/area/overmap_encounter/planetoid/lava/explored) -"ew" = ( -/obj/structure/stone_tile/block, -/obj/structure/mineral_door/sandstone, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"eH" = ( -/obj/structure/stone_tile/center, -/obj/structure/stone_tile/surrounding_tile, -/obj/structure/stone_tile/surrounding_tile{ - dir = 8 - }, -/obj/structure/stone_tile/surrounding_tile{ - dir = 4 - }, -/obj/structure/stone_tile/surrounding_tile{ - dir = 1 - }, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"eZ" = ( -/obj/structure/stone_tile/surrounding_tile/cracked, -/obj/structure/stone_tile/center, -/obj/structure/stone_tile/surrounding_tile{ - dir = 1 - }, -/obj/structure/stone_tile/surrounding_tile{ - dir = 8 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"fd" = ( -/obj/structure/stone_tile/slab/cracked{ - dir = 10 - }, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"fe" = ( -/obj/structure/closet/crate/radiation, -/obj/item/flashlight/lantern, -/obj/item/flashlight/lantern, -/obj/item/flashlight/lantern, -/obj/item/flashlight/flare, -/turf/open/floor/wood, -/area/overmap_encounter/planetoid/lava/explored) -"fU" = ( -/obj/structure/stone_tile/block{ - dir = 4; - pixel_y = -16 - }, -/obj/structure/stone_tile, -/obj/structure/stone_tile{ - dir = 8 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"fV" = ( -/turf/open/floor/wood{ - icon_state = "wood-broken4" - }, -/area/overmap_encounter/planetoid/lava/explored) -"gl" = ( -/obj/structure/stone_tile/block, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"gp" = ( -/obj/structure/stone_tile{ - dir = 1 - }, -/obj/structure/stone_tile/block{ - dir = 8; - pixel_y = 16 - }, -/obj/structure/stone_tile{ - dir = 4 - }, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"gM" = ( -/obj/item/stack/cable_coil/red, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"ha" = ( -/obj/structure/stone_tile/slab/cracked{ - dir = 6 - }, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"hd" = ( -/obj/structure/stone_tile, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"hk" = ( -/obj/structure/rack, -/obj/item/stack/sheet/mineral/wood{ - amount = 18 - }, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"ie" = ( -/obj/structure/table/wood, -/obj/item/seeds/cannabis, -/turf/open/floor/wood, -/area/overmap_encounter/planetoid/lava/explored) -"ik" = ( -/obj/structure/stone_tile{ - dir = 8 - }, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"il" = ( -/obj/structure/table/wood, -/obj/item/spear/bonespear, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"im" = ( -/obj/structure/fence{ - dir = 8 - }, -/turf/open/floor/plating/ashplanet/ash, -/area/overmap_encounter/planetoid/lava/explored) -"iw" = ( -/turf/open/floor/wood, -/area/overmap_encounter/planetoid/lava/explored) -"je" = ( -/obj/structure/stone_tile/block{ - dir = 1; - pixel_x = 16 - }, -/obj/structure/stone_tile, -/obj/structure/stone_tile{ - dir = 1 - }, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"jl" = ( -/turf/open/lava/smooth/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"ke" = ( -/obj/machinery/hydroponics/soil, -/turf/open/floor/plating/ashplanet/ash, -/area/overmap_encounter/planetoid/lava/explored) -"kz" = ( -/obj/structure/stone_tile/block{ - dir = 8; - pixel_y = 16 - }, -/obj/structure/stone_tile{ - dir = 1 - }, -/obj/structure/stone_tile{ - dir = 4 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"kD" = ( -/obj/structure/stone_tile/block{ - dir = 1 - }, -/obj/item/ammo_casing/shotgun/buckshot, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"kT" = ( -/obj/structure/stone_tile/block{ - dir = 4 - }, -/obj/structure/mineral_door/sandstone, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"kV" = ( -/turf/open/floor/wood{ - icon_state = "wood-broken2" - }, -/area/overmap_encounter/planetoid/lava/explored) -"kZ" = ( -/obj/structure/stone_tile/surrounding_tile{ - dir = 4 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"lc" = ( -/obj/structure/stone_tile/slab, -/obj/structure/table/wood, -/obj/item/instrument/trombone, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"lh" = ( -/obj/structure/table/wood, -/obj/item/storage/firstaid/fire, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"ln" = ( -/obj/machinery/the_singularitygen, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"lt" = ( -/mob/living/simple_animal/hostile/asteroid/gutlunch, -/turf/open/floor/wood, -/area/overmap_encounter/planetoid/lava/explored) -"lx" = ( -/obj/structure/fence, -/turf/open/floor/plating/ashplanet/ash, -/area/overmap_encounter/planetoid/lava/explored) -"lO" = ( -/obj/structure/stone_tile/slab{ - pixel_y = -16 - }, -/obj/structure/stone_tile/block, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"mg" = ( -/obj/structure/stone_tile/slab, -/obj/structure/mineral_door/sandstone, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"nh" = ( -/obj/effect/mob_spawn/human/corpse{ - mob_species = /datum/species/lizard/ashwalker - }, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"nr" = ( -/obj/structure/stone_tile/block{ - dir = 1 - }, -/obj/structure/mineral_door/sandstone, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"ny" = ( -/obj/structure/stone_tile/block{ - dir = 1 - }, -/obj/structure/stone_tile/block, -/obj/structure/chair/wood/wings{ - dir = 4 - }, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"ox" = ( -/obj/structure/stone_tile/slab, -/obj/effect/gibspawner/human, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"oF" = ( -/obj/structure/stone_tile/block, -/obj/structure/stone_tile/block{ - dir = 1 - }, -/obj/structure/chair/wood/wings, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"oO" = ( -/obj/structure/fence/door, -/turf/open/floor/plating/ashplanet/ash, -/area/overmap_encounter/planetoid/lava/explored) -"oY" = ( -/obj/structure/stone_tile/surrounding_tile/cracked, -/obj/structure/stone_tile/surrounding_tile/cracked{ - dir = 4 - }, -/obj/structure/stone_tile/center, -/obj/structure/stone_tile/surrounding_tile{ - dir = 8 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"px" = ( -/obj/item/seeds/potato, -/turf/open/floor/plating/ashplanet/ash, -/area/overmap_encounter/planetoid/lava/explored) -"pJ" = ( -/mob/living/simple_animal/hostile/human/nanotrasen/ranged/smg, -/turf/open/floor/wood, -/area/overmap_encounter/planetoid/lava/explored) -"pT" = ( -/obj/structure/table/wood, -/obj/item/seeds/ambrosia, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"pZ" = ( -/obj/structure/fence/corner{ - dir = 6 - }, -/turf/open/floor/plating/ashplanet/ash, -/area/overmap_encounter/planetoid/lava/explored) -"qq" = ( -/obj/structure/stone_tile/slab/cracked{ - dir = 5 - }, -/obj/structure/bonfire, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"qw" = ( -/obj/effect/gibspawner/human, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"qy" = ( -/obj/structure/stone_tile/slab/burnt, -/obj/item/ammo_casing/shotgun/buckshot, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"qG" = ( -/obj/structure/stone_tile/surrounding, -/obj/structure/stone_tile/center, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"rc" = ( -/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck, -/turf/open/floor/wood, -/area/overmap_encounter/planetoid/lava/explored) -"rk" = ( -/obj/structure/stone_tile/block{ - dir = 1 - }, -/obj/structure/stone_tile/block, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"rm" = ( -/obj/structure/stone_tile/slab, -/obj/structure/chair/wood/wings{ - dir = 4 - }, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"rp" = ( -/obj/structure/rack, -/turf/open/floor/wood, -/area/overmap_encounter/planetoid/lava/explored) -"ru" = ( -/turf/open/floor/wood{ - icon_state = "wood-broken5" - }, -/area/overmap_encounter/planetoid/lava/explored) -"rx" = ( -/obj/structure/stone_tile/block, -/obj/effect/mob_spawn/human/corpse{ - mob_species = /datum/species/lizard/ashwalker - }, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"rD" = ( -/obj/structure/stone_tile/slab, -/obj/effect/mob_spawn/human/corpse{ - mob_species = /datum/species/lizard/ashwalker - }, -/obj/item/spear/bonespear, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"rH" = ( -/obj/structure/stone_tile/surrounding_tile{ - dir = 8 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"rJ" = ( -/obj/structure/stone_tile/slab, -/obj/item/paper{ - desc = "A hastily written note, written in the Lizard language."; - default_raw_text = "To all brethren who may read this, we are sorry. We failed to defend the Necropolis, and those from the sky destroyed our home. I write this in my last dying breath, to warn you to not make our mistakes. Don't let them fool you with their actions, all of those who come from the sky are not your friends. They wish to loot and pillage your villages. Please do not make our same mistakes." - }, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"sc" = ( -/obj/structure/stone_tile/block{ - dir = 8 - }, -/obj/effect/mob_spawn/human/corpse{ - mob_species = /datum/species/lizard/ashwalker - }, -/obj/item/spear/bonespear, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"ss" = ( -/obj/structure/stone_tile/slab, -/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"sM" = ( -/obj/item/seeds/tower, -/turf/open/floor/plating/ashplanet/ash, -/area/overmap_encounter/planetoid/lava/explored) -"tR" = ( -/obj/structure/table/wood, -/obj/item/seeds/cotton/durathread, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"uc" = ( -/obj/structure/stone_tile{ - dir = 1 - }, -/obj/structure/stone_tile/block{ - dir = 8; - pixel_y = 16 - }, -/obj/structure/stone_tile{ - dir = 4 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"uH" = ( -/obj/structure/stone_tile/block, -/obj/effect/gibspawner/human, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"uJ" = ( -/obj/structure/bed, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"uK" = ( -/turf/closed/wall/mineral/wood/nonmetal, -/area/overmap_encounter/planetoid/lava/explored) -"vd" = ( -/obj/structure/stone_tile/block, -/obj/structure/stone_tile/block{ - dir = 1 - }, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"vm" = ( -/obj/structure/stone_tile/block{ - dir = 4 - }, -/obj/structure/stone_tile{ - dir = 8 - }, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"vu" = ( -/obj/structure/stone_tile/surrounding, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"vH" = ( -/obj/structure/stone_tile/block, -/obj/effect/mob_spawn/human/corpse{ - mob_species = /datum/species/lizard/ashwalker - }, -/obj/item/spear/bonespear, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"vN" = ( -/obj/structure/stone_tile/block{ - dir = 8; - pixel_y = 16 - }, -/obj/structure/stone_tile{ - dir = 1 - }, -/obj/structure/stone_tile{ - dir = 4 - }, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"vU" = ( -/obj/effect/mob_spawn/human/corpse{ - mob_species = /datum/species/lizard/ashwalker - }, -/obj/item/spear/bonespear, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"vW" = ( -/obj/structure/stone_tile/center, -/obj/structure/stone_tile/surrounding/burnt, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"wi" = ( -/mob/living/simple_animal/hostile/asteroid/gutlunch, -/turf/open/floor/plating/ashplanet/ash, -/area/overmap_encounter/planetoid/lava/explored) -"wt" = ( -/obj/structure/bed, -/turf/open/floor/wood, -/area/overmap_encounter/planetoid/lava/explored) -"wz" = ( -/obj/structure/stone_tile{ - dir = 4 - }, -/obj/structure/stone_tile/block, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"wO" = ( -/mob/living/simple_animal/hostile/asteroid/gutlunch/guthen, -/turf/open/floor/wood, -/area/overmap_encounter/planetoid/lava/explored) -"wV" = ( -/obj/structure/table/wood, -/turf/open/floor/wood, -/area/overmap_encounter/planetoid/lava/explored) -"xa" = ( -/obj/structure/stone_tile/block{ - dir = 4 - }, -/obj/effect/gibspawner/human, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"xt" = ( -/obj/structure/stone_tile/slab, -/obj/structure/table/wood, -/obj/item/weldingtool/experimental, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"xT" = ( -/obj/structure/stone_tile/slab, -/obj/structure/stone_tile/slab, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"xZ" = ( -/obj/structure/stone_tile/slab, -/mob/living/simple_animal/hostile/asteroid/gutlunch/guthen, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"yp" = ( -/obj/structure/stone_tile/block, -/mob/living/simple_animal/hostile/asteroid/gutlunch, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"yD" = ( -/obj/structure/stone_tile/slab, -/mob/living/simple_animal/hostile/asteroid/gutlunch/grublunch, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"yJ" = ( -/obj/structure/stone_tile/slab, -/mob/living/simple_animal/hostile/human/nanotrasen/ranged/assault, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"zG" = ( -/obj/structure/table/wood, -/obj/structure/stone_tile/slab, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"zJ" = ( -/obj/structure/sink/puddle, -/turf/open/floor/plating/ashplanet/ash, -/area/overmap_encounter/planetoid/lava/explored) -"zW" = ( -/obj/item/ammo_casing/shotgun/buckshot, -/turf/open/floor/wood{ - icon_state = "wood-broken6" - }, -/area/overmap_encounter/planetoid/lava/explored) -"zY" = ( -/obj/structure/stone_tile/block{ - dir = 1; - pixel_x = 16 - }, -/obj/structure/stone_tile, -/obj/structure/stone_tile{ - dir = 1 - }, -/obj/effect/mob_spawn/human/corpse{ - mob_species = /datum/species/lizard/ashwalker - }, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"An" = ( -/obj/structure/fence/corner{ - dir = 8 - }, -/turf/open/floor/plating/ashplanet/ash, -/area/overmap_encounter/planetoid/lava/explored) -"At" = ( -/obj/structure/table/wood, -/obj/item/seeds/garlic, -/turf/open/floor/wood, -/area/overmap_encounter/planetoid/lava/explored) -"AG" = ( -/obj/item/seeds/peas, -/turf/open/floor/plating/ashplanet/ash, -/area/overmap_encounter/planetoid/lava/explored) -"AI" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 4 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"AY" = ( -/obj/structure/stone_tile/block{ - dir = 4 - }, -/obj/effect/mob_spawn/human/corpse{ - mob_species = /datum/species/lizard/ashwalker - }, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"Bv" = ( -/obj/item/seeds/glowshroom/glowcap, -/turf/open/floor/plating/ashplanet/ash, -/area/overmap_encounter/planetoid/lava/explored) -"BF" = ( -/obj/machinery/hydroponics/soil, -/obj/item/seeds/tower, -/turf/open/floor/plating/ashplanet/ash, -/area/overmap_encounter/planetoid/lava/explored) -"Cr" = ( -/obj/structure/fence/door{ - dir = 4 - }, -/turf/open/floor/plating/ashplanet/ash, -/area/overmap_encounter/planetoid/lava/explored) -"CE" = ( -/obj/structure/stone_tile{ - dir = 8 - }, -/obj/structure/stone_tile/slab{ - pixel_y = -16 - }, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"CM" = ( -/turf/open/floor/plating/ashplanet/ash, -/area/overmap_encounter/planetoid/lava/explored) -"CP" = ( -/obj/machinery/smartfridge/drying_rack, -/turf/open/floor/wood, -/area/overmap_encounter/planetoid/lava/explored) -"CT" = ( -/obj/structure/stone_tile/slab, -/obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/soup/blood, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"CU" = ( -/obj/structure/stone_tile/slab, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"Dk" = ( -/obj/structure/stone_tile{ - dir = 4 - }, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"DF" = ( -/obj/item/clothing/head/welding, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"Eh" = ( -/obj/structure/stone_tile/slab, -/obj/structure/table/wood, -/obj/item/reagent_containers/glass/bowl/mushroom_bowl, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"Eq" = ( -/obj/structure/stone_tile/block{ - dir = 8 - }, -/obj/effect/mob_spawn/human/corpse{ - mob_species = /datum/species/lizard/ashwalker - }, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"Ez" = ( -/obj/structure/stone_tile/slab, -/obj/structure/table/wood, -/obj/item/reagent_containers/glass/bowl/mushroom_bowl, -/obj/item/reagent_containers/food/snacks/soup/wish, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"Fk" = ( -/obj/structure/stone_tile/block{ - dir = 4 - }, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"Fo" = ( -/obj/structure/stone_tile/slab, -/obj/structure/table/wood, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"FS" = ( -/obj/structure/table/wood, -/obj/item/seeds/ambrosia, -/turf/open/floor/wood, -/area/overmap_encounter/planetoid/lava/explored) -"Gr" = ( -/obj/item/ammo_casing/shotgun/buckshot, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"GD" = ( -/obj/structure/stone_tile/surrounding_tile/cracked{ - dir = 8 - }, -/obj/structure/stone_tile/center, -/obj/structure/stone_tile/surrounding_tile{ - dir = 1 - }, -/obj/structure/stone_tile/surrounding_tile{ - dir = 4 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"HL" = ( -/obj/effect/mob_spawn/human/corpse{ - mob_species = /datum/species/lizard/ashwalker - }, -/turf/open/floor/wood, -/area/overmap_encounter/planetoid/lava/explored) -"HP" = ( -/obj/structure/mineral_door/sandstone, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"Ii" = ( -/obj/structure/stone_tile/surrounding_tile, -/obj/structure/stone_tile/surrounding_tile{ - pixel_x = 17; - pixel_y = -17 - }, -/obj/structure/stone_tile/surrounding_tile{ - dir = 1; - pixel_x = 17; - pixel_y = -17 - }, -/obj/structure/stone_tile/surrounding_tile{ - dir = 4; - pixel_x = 17; - pixel_y = -17 - }, -/obj/structure/stone_tile/surrounding_tile{ - dir = 8; - pixel_x = 17; - pixel_y = -17 - }, -/obj/structure/stone_tile/center{ - pixel_x = 17; - pixel_y = -17 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"IF" = ( -/obj/structure/stone_tile/block{ - dir = 1 - }, -/obj/item/kinetic_crusher, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"IO" = ( -/obj/structure/stone_tile/block/cracked, -/turf/open/lava/smooth/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"Jd" = ( -/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck, -/turf/open/floor/plating/ashplanet/ash, -/area/overmap_encounter/planetoid/lava/explored) -"Jk" = ( -/obj/structure/stone_tile/block{ - dir = 4; - pixel_y = -16 - }, -/obj/structure/stone_tile, -/obj/structure/stone_tile{ - dir = 8 - }, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"Jv" = ( -/obj/structure/stone_tile/block{ - dir = 1 - }, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"JA" = ( -/turf/open/floor/wood{ - icon_state = "wood-broken3" - }, -/area/overmap_encounter/planetoid/lava/explored) -"JL" = ( -/obj/structure/table/wood, -/obj/item/seeds/cotton, -/turf/open/floor/wood, -/area/overmap_encounter/planetoid/lava/explored) -"JM" = ( -/obj/structure/table/wood, -/obj/item/seeds/cabbage, -/turf/open/floor/wood, -/area/overmap_encounter/planetoid/lava/explored) -"JR" = ( -/obj/structure/stone_tile{ - dir = 4 - }, -/obj/effect/mob_spawn/human/corpse{ - mob_species = /datum/species/lizard/ashwalker - }, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"JV" = ( -/obj/structure/table/wood, -/obj/item/seeds/cherry, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"JZ" = ( -/obj/structure/stone_tile/slab, -/obj/structure/fluff/drake_statue, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"Kd" = ( -/obj/structure/stone_tile/slab/cracked{ - dir = 1 - }, -/obj/structure/table/wood, -/obj/item/stack/sheet/mineral/wood/fifty, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"Ku" = ( -/obj/structure/table/wood, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"KR" = ( -/obj/item/storage/firstaid/regular, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"KS" = ( -/obj/structure/stone_tile/block{ - dir = 4 - }, -/obj/item/ammo_casing/shotgun/buckshot, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"Lj" = ( -/obj/structure/stone_tile/block{ - dir = 4 - }, -/obj/effect/mob_spawn/human/corpse{ - mob_species = /datum/species/lizard/ashwalker - }, -/obj/item/spear/bonespear, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"LG" = ( -/mob/living/simple_animal/hostile/asteroid/gutlunch/guthen, -/turf/open/floor/plating/ashplanet/ash, -/area/overmap_encounter/planetoid/lava/explored) -"LL" = ( -/obj/structure/stone_tile/slab, -/obj/effect/mob_spawn/human/corpse{ - mob_species = /datum/species/lizard/ashwalker - }, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"LS" = ( -/obj/item/seeds/plump, -/turf/open/floor/plating/ashplanet/ash, -/area/overmap_encounter/planetoid/lava/explored) -"MX" = ( -/obj/structure/stone_tile/slab/cracked{ - dir = 10 - }, -/obj/item/ammo_casing/shotgun/buckshot, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"Nf" = ( -/obj/structure/stone_tile/block{ - dir = 1 - }, -/obj/structure/stone_tile/block, -/obj/structure/chair/wood/wings{ - dir = 1 - }, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"Np" = ( -/obj/item/seeds/wheat, -/turf/open/floor/plating/ashplanet/ash, -/area/overmap_encounter/planetoid/lava/explored) -"Nt" = ( -/obj/structure/bonfire, -/turf/open/floor/wood, -/area/overmap_encounter/planetoid/lava/explored) -"NA" = ( -/obj/structure/table/wood, -/obj/item/clothing/head/welding, -/turf/open/floor/wood, -/area/overmap_encounter/planetoid/lava/explored) -"ND" = ( -/obj/structure/stone_tile/block, -/obj/structure/stone_tile/slab{ - pixel_y = -16 - }, -/obj/structure/mineral_door/sandstone, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"NE" = ( -/obj/structure/stone_tile/block{ - dir = 1 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"OB" = ( -/obj/structure/table/optable, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"Pi" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 1 - }, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"Qv" = ( -/obj/structure/sink/puddle, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"QT" = ( -/obj/structure/fence/corner{ - dir = 5 - }, -/turf/open/floor/plating/ashplanet/ash, -/area/overmap_encounter/planetoid/lava/explored) -"QW" = ( -/obj/structure/closet/crate/medical, -/obj/item/storage/firstaid/regular, -/obj/item/reagent_containers/blood/random, -/obj/item/reagent_containers/blood/lizard, -/obj/item/reagent_containers/blood/lizard, -/obj/item/stack/sheet/cotton/cloth/ten, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"Sa" = ( -/obj/structure/stone_tile/slab/cracked{ - dir = 4 - }, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"SJ" = ( -/obj/effect/mob_spawn/human/corpse{ - mob_species = /datum/species/lizard/ashwalker - }, -/obj/structure/stone_tile/block{ - dir = 8 - }, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"SO" = ( -/obj/structure/closet/crate, -/obj/item/flashlight/lantern, -/obj/item/flashlight/lantern, -/obj/item/flashlight/lantern, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"Td" = ( -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"Ty" = ( -/obj/structure/stone_tile/slab/cracked, -/mob/living/simple_animal/hostile/human/nanotrasen/ranged, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"TX" = ( -/obj/structure/stone_tile{ - dir = 8 - }, -/obj/structure/stone_tile/block{ - dir = 1 - }, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"Ua" = ( -/obj/structure/stone_tile/surrounding_tile{ - dir = 1 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"Us" = ( -/obj/structure/stone_tile/slab, -/obj/structure/table/wood, -/obj/item/spear/bonespear, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"Ux" = ( -/turf/open/floor/wood{ - icon_state = "wood-broken6" - }, -/area/overmap_encounter/planetoid/lava/explored) -"Uy" = ( -/obj/structure/stone_tile/block{ - dir = 8 - }, -/obj/structure/mineral_door/sandstone, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"UB" = ( -/obj/structure/stone_tile{ - dir = 1 - }, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"UF" = ( -/obj/structure/table/wood, -/obj/item/spear/bonespear, -/turf/open/floor/wood, -/area/overmap_encounter/planetoid/lava/explored) -"Vb" = ( -/obj/structure/stone_tile/block{ - dir = 4 - }, -/obj/item/clothing/head/welding, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"VT" = ( -/obj/structure/stone_tile/block{ - dir = 4 - }, -/obj/structure/stone_tile{ - dir = 4 - }, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"WJ" = ( -/obj/structure/table/wood, -/obj/item/melee/transforming/energy/sword/saber/red, -/turf/open/floor/wood, -/area/overmap_encounter/planetoid/lava/explored) -"WM" = ( -/obj/item/storage/firstaid/tactical, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"Xe" = ( -/obj/machinery/hydroponics/soil, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"Xw" = ( -/obj/structure/mineral_door/sandstone, -/turf/open/floor/wood, -/area/overmap_encounter/planetoid/lava/explored) -"Yg" = ( -/obj/structure/stone_tile/slab/cracked{ - dir = 5 - }, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"Yh" = ( -/obj/structure/stone_tile/slab/cracked, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"YC" = ( -/obj/structure/table/wood, -/obj/item/storage/firstaid/ancient, -/turf/open/floor/wood, -/area/overmap_encounter/planetoid/lava/explored) -"YI" = ( -/obj/structure/table/wood, -/obj/item/stack/sheet/mineral/wood/fifty, -/turf/open/floor/wood, -/area/overmap_encounter/planetoid/lava/explored) -"YT" = ( -/obj/structure/stone_tile/block/cracked, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"Zc" = ( -/obj/structure/stone_tile/block{ - dir = 1 - }, -/obj/structure/stone_tile/block, -/obj/structure/chair/wood/wings, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"Zj" = ( -/obj/machinery/iv_drip, -/obj/item/reagent_containers/food/drinks/waterbottle/large, -/turf/open/floor/wood, -/area/overmap_encounter/planetoid/lava/explored) -"ZL" = ( -/obj/structure/stone_tile/block{ - dir = 8 - }, -/obj/effect/gibspawner/human, -/turf/open/lava/smooth/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) -"ZX" = ( -/obj/structure/table/wood, -/obj/item/storage/box/rxglasses, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/lava/explored) - -(1,1,1) = {" -Td -Td -Td -Td -Td -Td -Td -Td -Td -Td -Td -Td -Td -Td -Td -dD -uK -dD -uK -Td -dD -uK -dD -Td -Td -Td -Td -gl -Td -Td -Td -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -"} -(2,1,1) = {" -Td -An -lx -lx -lx -lx -lx -lx -dD -uK -Td -dD -Td -Td -uK -dD -pT -wV -CP -Td -wV -ie -dD -uK -Td -Td -Td -Td -CU -Td -Td -aA -aA -aA -aA -aA -aA -aA -Td -Td -Td -Td -aA -aA -aA -aA -aA -aA -aA -aA -"} -(3,1,1) = {" -Td -ad -px -Np -CM -LS -CM -sM -Td -iw -iw -uK -uK -Td -dD -Td -Td -iw -iw -iw -iw -iw -iw -dD -Td -Td -Td -gl -Td -Jv -Td -Td -Td -Td -Td -Td -Td -Td -Gr -gl -ee -Td -Td -aA -aA -aA -aA -aA -aA -aA -"} -(4,1,1) = {" -Td -ad -CM -BF -ke -ke -ke -CM -oO -iw -iw -iw -dD -Td -Td -Td -iw -Td -Td -iw -JL -JV -wV -dD -Td -Td -Td -gl -CU -Jv -Td -Td -Td -uK -dD -uK -Td -uK -dD -YT -CU -Jv -Td -aA -aA -aA -aA -aA -aA -aA -"} -(5,1,1) = {" -Td -ad -CM -ke -ke -BF -ke -Bv -dD -iw -iw -iw -Td -Td -dD -Td -wV -tR -Td -Td -JM -wV -wV -Td -Td -Td -Td -gl -CU -Td -Td -Td -dD -dD -iw -iw -Td -pJ -dD -gl -Yh -Jv -Td -Gr -Td -aA -aA -aA -aA -aA -"} -(6,1,1) = {" -Td -ad -Np -AG -sM -CM -sM -zJ -dD -eq -iw -wt -uK -Td -uK -iw -iw -At -iw -Td -iw -iw -iw -dD -Td -Td -Td -gl -CU -Jv -Td -Td -Td -Td -iw -HL -iw -Td -uK -YT -CU -Pi -Td -Td -Td -Td -Td -dD -dD -Td -"} -(7,1,1) = {" -Td -QT -lx -lx -Cr -lx -lx -lx -uK -dD -iw -uK -dD -Td -dD -hk -rp -Ku -iw -Td -wV -Ku -FS -uK -Td -Td -Td -gl -CU -Jv -Td -Td -dD -iw -Td -Td -Td -Td -dD -gl -cR -Jv -Td -dD -dD -dD -uK -dD -uK -dD -"} -(8,1,1) = {" -Td -Td -Td -Td -Td -Td -Td -Td -Td -Jv -CU -gl -Td -Td -dD -Td -uK -dD -HP -HP -dD -uK -Td -dD -Td -Td -Td -gl -CU -Jv -Td -Td -uK -UF -iw -iw -cv -iw -Xw -Td -ee -Jv -gM -uK -Td -uK -Td -uK -Td -dD -"} -(9,1,1) = {" -Td -Td -Td -cA -cA -cA -cA -Fk -Fk -Fk -CU -Fk -Fk -Fk -Fk -Fk -Fk -VT -CU -CU -vm -Fk -Fk -Fk -Fk -Fk -Fk -hd -CU -Jv -Td -Td -dD -il -iw -Td -iw -HL -uK -gl -CU -UB -Fk -Fk -AY -eZ -AI -ej -Td -uK -"} -(10,1,1) = {" -Td -Td -CU -CU -CU -CU -CU -CU -CU -CU -CU -CU -CU -CU -lO -Jv -CU -lO -Jv -CU -lO -Jv -lO -Jv -lO -Jv -lO -Jv -CU -Jv -Td -Td -dD -dD -iw -iw -iw -iw -dD -gl -ee -CU -CU -Ty -rJ -IO -jl -NE -WM -Td -"} -(11,1,1) = {" -Td -CU -CU -CU -CU -CU -CU -CU -CU -CU -CU -CU -CU -CU -lO -Jv -CU -lO -Jv -CU -lO -Jv -lO -Jv -lO -Jv -lO -Jv -CU -Jv -Td -Td -Td -dD -iw -iw -SO -dD -uK -gl -Yh -Dk -SJ -ek -aw -oY -ZL -GD -Td -uK -"} -(12,1,1) = {" -Td -Td -ek -ek -dn -dn -dn -ek -ek -ek -ek -ek -ek -ek -ek -ek -ek -ek -TX -CU -wz -ek -ek -ek -ek -ek -ek -ik -CU -Jv -Td -Td -Td -dD -Td -uK -uK -dD -Xe -YT -qy -Jv -Td -cv -uK -Td -Td -nh -dD -dD -"} -(13,1,1) = {" -aA -Td -Td -Td -Td -Td -Td -Td -Td -Td -Td -Td -Td -Td -Td -Td -Td -dD -vd -CU -rk -dD -Td -wV -wV -Xw -dD -gl -CU -Jv -Td -Td -Td -Td -Td -Td -Td -Td -Xe -gl -CU -Jv -Td -Td -Td -dD -uK -uK -Td -uK -"} -(14,1,1) = {" -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -Td -uK -oF -CT -Nf -dD -iw -iw -iw -Td -uK -uH -CU -Jv -Td -Td -Td -Td -Td -Td -Td -Td -Xe -gl -CU -kD -DF -Xe -Qv -Td -uK -dD -cv -Td -"} -(15,1,1) = {" -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -Td -uK -oF -Eh -Nf -wV -Td -iw -iw -iw -dD -gl -CU -Jv -Td -Td -Td -Td -dD -dD -uK -Qv -Td -gl -CU -Pi -qw -Xe -uK -dD -Ux -dD -uK -Td -"} -(16,1,1) = {" -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -Td -Td -vd -CU -Zc -wV -iw -iw -iw -iw -uK -gl -CU -Jv -Td -uK -dD -wV -Td -YI -uK -dD -Td -YT -ee -IF -Td -dD -uK -iw -iw -iw -uK -uK -"} -(17,1,1) = {" -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -Td -dD -oF -Ez -Nf -wV -iw -iw -iw -iw -dD -gl -CU -Jv -Td -Xw -JA -iw -Td -Td -iw -HP -Gr -rx -CU -Pi -Td -aG -Yh -iw -MX -iw -iw -uK -"} -(18,1,1) = {" -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -Td -uK -vd -rm -ny -Xw -iw -iw -iw -Td -Td -gl -CU -Jv -Td -dD -SO -nh -Nt -Td -lh -dD -Td -gl -Yh -kD -Td -dD -Yg -Ux -iw -JA -iw -Ux -"} -(19,1,1) = {" -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -Td -dD -dD -zG -zG -dD -iw -Td -wt -dD -Td -gl -xT -Jv -Td -iw -SO -iw -fV -iw -iw -uK -Td -gl -CU -Pi -Td -uK -ha -iw -Td -HL -ha -uK -"} -(20,1,1) = {" -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -Td -Td -uK -Td -dD -uK -Td -dD -dD -uK -Td -gl -CU -Jv -Td -dD -uK -dD -uJ -iw -dD -uK -qw -gl -ee -Jv -uK -uK -iw -kV -iw -iw -Yh -uK -"} -(21,1,1) = {" -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -Td -Td -Td -Td -Td -Td -Td -Td -nh -Td -Td -Td -Td -gl -CU -Jv -Td -Td -Td -Td -dD -Td -dD -Td -Td -gl -cR -UB -Xw -dv -iw -iw -qq -iw -iw -dD -"} -(22,1,1) = {" -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -Td -CU -Fk -Fk -Fk -Fk -Fk -Fk -Fk -Fk -Lj -Fk -Fk -hd -CU -UB -Fk -Fk -Fk -Fk -Fk -Fk -KS -Fk -Vb -hd -CU -JR -Td -iw -Td -Ux -iw -ru -iw -dD -"} -(23,1,1) = {" -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -Td -gl -CU -CU -CU -CU -CU -ox -CU -CU -CU -CU -CU -CU -vu -CU -CU -CU -CU -CU -cx -Yh -CU -ee -CU -yJ -vW -Jv -uK -dD -iw -zW -ha -Td -WJ -uK -"} -(24,1,1) = {" -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -Td -gl -CU -Td -ek -ek -ek -ik -rD -Dk -ek -Eq -ek -ik -CU -Dk -ek -ek -ek -ik -CU -Dk -ek -ek -ek -ik -ee -Jv -Td -uK -iw -Sa -iw -iw -NA -dD -"} -(25,1,1) = {" -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -Td -gl -CU -Jv -dD -dD -dD -ew -mg -nr -dD -dD -dD -gl -CU -Jv -eH -Jk -vN -eH -CU -qG -Jk -vN -eH -gl -CU -Pi -Td -uK -iw -Kd -wV -Td -YC -dD -"} -(26,1,1) = {" -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -Td -rx -CU -Jv -dD -Fo -Fo -gl -CU -Jv -lc -Fo -dD -gl -CU -Jv -je -Ii -Ua -je -CU -je -Ii -Ua -je -YT -Yh -kD -Td -uK -dD -dD -dD -Ux -uK -dD -"} -(27,1,1) = {" -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -Td -gl -CU -Jv -dD -Fo -CU -yp -CU -Jv -ss -Fo -dD -gl -CU -Jv -dg -rH -kZ -dg -CU -dg -rH -kZ -dg -gl -CU -Jv -Td -Td -Td -Td -Td -Td -Td -Td -"} -(28,1,1) = {" -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -Td -gl -CU -vU -kT -xa -Fk -eZ -AI -ej -Fk -Fk -kT -hd -LL -UB -eH -Jk -gp -eH -CU -eH -fU -uc -eH -hd -CU -Jv -Td -Td -Td -Td -Td -Td -Td -Td -"} -(29,1,1) = {" -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -vU -gl -CU -CU -mg -CU -xZ -IO -jl -NE -CU -CU -mg -CU -vu -CU -CU -LL -CU -CU -JZ -CU -dM -dM -CU -CU -CU -Jv -Td -dD -dD -uK -dD -dD -Td -dD -"} -(30,1,1) = {" -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -Td -gl -LL -Td -Uy -ek -ek -oY -ZL -GD -ek -ek -Uy -ik -CU -Dk -eH -Jk -vN -eH -CU -eH -fU -kz -eH -ik -CU -Jv -Td -uK -ln -fe -iw -iw -Td -uK -"} -(31,1,1) = {" -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -Td -gl -CU -Jv -dD -Us -CU -gl -yD -Jv -CU -xt -dD -gl -CU -Jv -zY -Ii -Ua -je -CU -je -Ii -Ua -je -uH -CU -UB -Fk -dD -iw -Td -Td -iw -iw -uK -"} -(32,1,1) = {" -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -qw -gl -CU -Jv -dD -Us -Us -gl -CU -Jv -bm -Fo -dD -vH -CU -Jv -dg -rH -kZ -dg -CU -dg -rH -kZ -dg -gl -CU -CU -CU -Xw -Td -Td -Td -iw -iw -dD -"} -(33,1,1) = {" -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -Td -gl -CU -Jv -dD -dD -dD -ew -mg -nr -dD -dD -dD -gl -CU -Jv -eH -Jk -gp -eH -CU -eH -Jk -gp -eH -gl -CU -Dk -ek -uK -iw -iw -iw -iw -Td -uK -"} -(34,1,1) = {" -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -Td -gl -CU -Td -AY -Fk -Fk -hd -CU -UB -Fk -Fk -Fk -hd -CU -UB -Fk -Fk -Fk -hd -CU -UB -Fk -Fk -Fk -hd -CU -Jv -Td -dD -dD -iw -Td -dD -wt -dD -"} -(35,1,1) = {" -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -Td -gl -CU -CU -CU -CU -CU -CU -LL -CU -LL -CU -CU -CU -CU -CU -CU -CU -CU -CU -CU -CU -CU -CU -CU -CU -CU -Jv -Td -uK -uK -dY -dD -dD -dD -uK -"} -(36,1,1) = {" -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -Td -CU -ek -ek -ek -ek -sc -ek -ek -ek -ek -ek -CE -Dk -ek -ek -ek -ek -ek -CE -Dk -ek -ek -ek -ek -ik -CU -Jv -Td -im -Jd -CM -uK -iw -wO -dD -"} -(37,1,1) = {" -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -Td -Td -Td -Td -Td -Td -Td -Td -Td -qw -Td -Td -cm -Jv -Td -Td -qw -dD -Td -cm -Jv -Td -Td -Td -Td -gl -CU -Jv -Td -im -CM -CM -dD -iw -CM -uK -"} -(38,1,1) = {" -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -Td -Td -uK -dD -uK -cm -Jv -dD -uK -dD -uK -uK -ND -Jv -dD -dD -uK -Td -gl -CU -Jv -Td -oO -CM -CM -lt -iw -iw -uK -"} -(39,1,1) = {" -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -Td -uK -uK -uK -Td -iw -Td -iw -iw -uK -KR -iw -Td -Ku -ZX -Ku -dD -Td -gl -CU -Jv -Td -im -LG -CM -uK -uK -rc -uK -"} -(40,1,1) = {" -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -Td -uK -dD -Td -Td -Td -iw -iw -iw -uK -Td -Td -Td -Td -Td -iw -uK -Td -gl -CU -Jv -Td -im -CM -CM -CM -dD -uK -dD -"} -(41,1,1) = {" -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -Td -Td -uK -Td -iw -Td -Td -Td -iw -dD -iw -Td -Td -Td -iw -iw -dD -Td -gl -CU -Jv -Td -im -CM -Jd -CM -CM -CM -im -"} -(42,1,1) = {" -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -Td -uK -dD -wt -uJ -uJ -uJ -wt -uK -OB -Zj -Td -iw -QW -uK -dD -Td -gl -CU -Jv -Td -im -wi -CM -LG -CM -LG -im -"} -(43,1,1) = {" -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -Td -Td -uK -uK -dD -dD -uK -uK -dD -uK -dD -uK -dD -uK -dD -Td -Td -gl -Yg -Jv -Td -QT -lx -lx -lx -lx -lx -pZ -"} -(44,1,1) = {" -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -Td -Td -Td -dD -uK -Td -Td -uK -uK -Td -uK -uK -Td -uK -Td -Td -gl -fd -Jv -Td -Td -Td -Td -Td -Td -aA -aA -"} -(45,1,1) = {" -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -Td -Td -Td -Td -Td -Td -Td -Td -Td -Td -Td -uK -Td -Td -Td -YT -Td -YT -Td -Td -Td -Td -aA -aA -aA -aA -"} -(46,1,1) = {" -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -Td -vd -Td -Jv -Td -Td -aA -aA -aA -aA -aA -aA -"} -(47,1,1) = {" -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -Td -vd -CU -rk -Td -aA -aA -aA -aA -aA -aA -aA -"} -(48,1,1) = {" -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -Td -vd -CU -rk -Td -aA -aA -aA -aA -aA -aA -aA -"} diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_buried_shrine.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_buried_shrine.dmm new file mode 100644 index 000000000000..e5756e7dbdf5 --- /dev/null +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_buried_shrine.dmm @@ -0,0 +1,5795 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"at" = ( +/obj/structure/stone_tile/surrounding_tile{ + dir = 4 + }, +/obj/structure/stone_tile/center/cracked, +/obj/structure/stone_tile/surrounding_tile/cracked, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"aD" = ( +/obj/structure/flora/rock/hell, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit, +/area/overmap_encounter/planetoid/lava/explored) +"aP" = ( +/obj/structure/flora/ausbushes/sparsegrass/hell, +/turf/open/floor/plating/moss, +/area/overmap_encounter/planetoid/cave/explored) +"be" = ( +/obj/item/reagent_containers/food/snacks/grown/apple{ + pixel_x = 12 + }, +/turf/open/floor/plating/grass/lava, +/area/ruin/unpowered/buried_shrine) +"bp" = ( +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 10 + }, +/obj/structure/stone_tile/center/burnt{ + fall_on_cross = 1; + pixel_y = 6 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"bW" = ( +/obj/structure/flora/ausbushes/sparsegrass/hell, +/turf/open/floor/plating/grass/lava/orange, +/area/overmap_encounter/planetoid/lava/explored) +"bY" = ( +/obj/structure/stone_tile/surrounding/cracked{ + dir = 8 + }, +/obj/structure/stone_tile/center/burnt, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"ch" = ( +/obj/structure/destructible/tribal_torch{ + pixel_y = 13 + }, +/obj/structure/stone_tile/surrounding, +/obj/structure/stone_tile/center, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"cn" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 6 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit, +/area/ruin/unpowered/buried_shrine) +"co" = ( +/obj/structure/stone_tile/surrounding/cracked, +/obj/item/stack/ore/gold, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"cv" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/glass/bottle/potion, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"cA" = ( +/obj/structure/stone_tile/surrounding, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"cD" = ( +/obj/structure/stone_tile/slab/cracked{ + dir = 6 + }, +/obj/structure/destructible/tribal_torch, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"cN" = ( +/obj/item/stack/sheet/bone, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"df" = ( +/obj/structure/stone_tile/block/cracked, +/obj/item/stack/sheet/mineral/wood, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"dg" = ( +/obj/structure/stone_tile/slab/cracked{ + dir = 1 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit, +/area/overmap_encounter/planetoid/lava/explored) +"di" = ( +/obj/structure/stone_tile/surrounding/cracked{ + dir = 4 + }, +/obj/structure/stone_tile/center/cracked, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"dn" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 5 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit, +/area/overmap_encounter/planetoid/lava/explored) +"dA" = ( +/obj/structure/stone_tile/center/burnt{ + fall_on_cross = 1; + pixel_x = 5 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"dB" = ( +/obj/structure/stone_tile/block/cracked, +/obj/structure/stone_tile/center{ + pixel_y = -6 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"dD" = ( +/turf/closed/indestructible/riveted/boss, +/area/overmap_encounter/planetoid/lava/explored) +"dF" = ( +/turf/open/floor/plating/moss, +/area/overmap_encounter/planetoid/cave/explored) +"dG" = ( +/obj/structure/table/wood, +/obj/structure/stone_tile{ + dir = 4 + }, +/obj/item/stack/ore/gold{ + amount = 10 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"dQ" = ( +/obj/structure/stone_tile/center, +/obj/structure/stone_tile/surrounding/cracked{ + dir = 4 + }, +/obj/structure/destructible/tribal_torch{ + pixel_y = 13 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"dS" = ( +/obj/structure/stone_tile/center/burnt{ + fall_on_cross = 1; + pixel_y = 10; + pixel_x = 6 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"dX" = ( +/obj/structure/stone_tile/center/burnt{ + fall_on_cross = 1; + pixel_y = -8 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"ee" = ( +/turf/open/lava/smooth/lava_land_surface, +/area/overmap_encounter/planetoid/lava/explored) +"ef" = ( +/obj/structure/stone_tile/surrounding/cracked, +/obj/structure/stone_tile/center/cracked, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"em" = ( +/obj/structure/stone_tile/center/burnt{ + fall_on_cross = 1; + pixel_y = 7; + pixel_x = -2 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"eI" = ( +/turf/open/floor/plating/grass/lava, +/area/ruin/unpowered/buried_shrine) +"eJ" = ( +/obj/structure/stone_tile/cracked, +/obj/structure/stone_tile{ + dir = 8 + }, +/obj/structure/stone_tile{ + dir = 1 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit, +/area/overmap_encounter/planetoid/lava/explored) +"eZ" = ( +/obj/structure/table/wood, +/obj/item/clothing/head/hooded/cloakhood/bone, +/obj/structure/stone_tile/slab, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"ff" = ( +/obj/structure/stone_tile/block{ + dir = 4 + }, +/obj/item/stack/ore/gold, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"fh" = ( +/obj/item/clothing/suit/armor/curator, +/obj/item/clothing/head/fedora/curator{ + pixel_y = 16 + }, +/obj/effect/decal/remains/human{ + pixel_y = 8 + }, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/ash/large{ + pixel_y = -8 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"fq" = ( +/obj/structure/destructible/tribal_torch{ + pixel_y = 13 + }, +/obj/structure/stone_tile/center, +/obj/structure/stone_tile/surrounding, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"fx" = ( +/obj/structure/destructible/tribal_torch, +/obj/structure/stone_tile/slab/cracked, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"fB" = ( +/obj/structure/flora/rock/pile/lava, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit, +/area/overmap_encounter/planetoid/lava/explored) +"fL" = ( +/obj/structure/stone_tile/center/burnt{ + fall_on_cross = 1; + pixel_x = 7; + pixel_y = -5 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"fY" = ( +/obj/structure/stone_tile/block{ + dir = 4 + }, +/obj/effect/decal/cleanable/ash{ + pixel_x = 6; + pixel_y = 11 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"gt" = ( +/obj/structure/flora/ash/stem_shroom, +/turf/open/floor/plating/moss, +/area/overmap_encounter/planetoid/cave/explored) +"gz" = ( +/obj/structure/stone_tile/block{ + dir = 8 + }, +/obj/structure/stone_tile/cracked, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"gE" = ( +/obj/structure/stone_tile/block{ + dir = 1 + }, +/obj/structure/stone_tile{ + dir = 8 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"gH" = ( +/obj/structure/stone_tile/cracked, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"gW" = ( +/obj/structure/stone_tile/center/burnt{ + fall_on_cross = 1; + pixel_x = 10 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"ha" = ( +/obj/structure/stone_tile/slab/cracked{ + dir = 6 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit, +/area/overmap_encounter/planetoid/lava/explored) +"hn" = ( +/obj/structure/stone_tile/slab/cracked{ + dir = 1 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"hp" = ( +/obj/structure/flora/ausbushes/ywflowers/hell, +/turf/open/floor/plating/grass/lava, +/area/ruin/unpowered/buried_shrine) +"hz" = ( +/obj/structure/stone_tile/surrounding_tile{ + dir = 8 + }, +/obj/structure/stone_tile/center, +/obj/structure/stone_tile/surrounding_tile{ + dir = 1 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"hW" = ( +/obj/structure/stone_tile/surrounding_tile/burnt{ + dir = 8 + }, +/obj/structure/stone_tile/center/burnt{ + fall_on_cross = 1 + }, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 5 + }, +/obj/structure/stone_tile/surrounding_tile/cracked, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"ic" = ( +/obj/structure/stone_tile/block{ + dir = 4 + }, +/obj/structure/stone_tile/block/cracked{ + dir = 8 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"ii" = ( +/obj/structure/chair/pew{ + dir = 1 + }, +/obj/structure/stone_tile/slab, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"iw" = ( +/obj/structure/stone_tile/block{ + dir = 4 + }, +/obj/structure/stone_tile/cracked{ + dir = 4 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"iB" = ( +/obj/structure/stone_tile/block/burnt{ + dir = 8 + }, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 6 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"iK" = ( +/obj/structure/stone_tile/surrounding_tile{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"iL" = ( +/obj/structure/stone_tile/surrounding_tile/cracked, +/obj/structure/stone_tile/center/burnt{ + fall_on_cross = 1; + pixel_y = -8 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"iX" = ( +/obj/structure/flora/rock/pile, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit, +/area/overmap_encounter/planetoid/cave/explored) +"jo" = ( +/obj/item/reagent_containers/food/snacks/grown/apple{ + pixel_y = 12; + pixel_x = 11 + }, +/turf/open/floor/plating/grass/lava, +/area/ruin/unpowered/buried_shrine) +"jt" = ( +/obj/structure/flora/rock/pile, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit, +/area/overmap_encounter/planetoid/lava/explored) +"jy" = ( +/obj/structure/stone_tile/block/cracked, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"jI" = ( +/obj/structure/flora/ash/tall_shroom, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit, +/area/overmap_encounter/planetoid/lava/explored) +"jJ" = ( +/obj/structure/flora/ash/tall_shroom, +/turf/open/floor/plating/moss, +/area/overmap_encounter/planetoid/cave/explored) +"jM" = ( +/obj/structure/stone_tile{ + dir = 1 + }, +/obj/structure/stone_tile/cracked, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"jY" = ( +/obj/structure/stone_tile/center/burnt{ + fall_on_cross = 1; + pixel_y = -3 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"kp" = ( +/obj/structure/table_frame/wood, +/obj/structure/stone_tile/slab, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"kt" = ( +/obj/structure/stone_tile/block{ + dir = 4 + }, +/obj/structure/stone_tile/block/cracked{ + dir = 8 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit, +/area/overmap_encounter/planetoid/lava/explored) +"kC" = ( +/obj/structure/stone_tile/center/burnt{ + fall_on_cross = 1; + pixel_y = -2; + pixel_x = 2 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"kJ" = ( +/obj/structure/stone_tile/surrounding/cracked, +/obj/structure/stone_tile/center/cracked, +/obj/structure/destructible/tribal_torch{ + pixel_y = 13 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"kW" = ( +/obj/structure/stone_tile/block{ + dir = 8 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"kZ" = ( +/obj/structure/stone_tile/cracked{ + dir = 4 + }, +/obj/structure/stone_tile/cracked, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"ld" = ( +/obj/structure/table/wood, +/obj/item/stack/ore/diamond, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"lo" = ( +/obj/structure/flora/ausbushes/fullgrass/hell, +/turf/open/floor/plating/moss, +/area/overmap_encounter/planetoid/cave/explored) +"lJ" = ( +/obj/structure/stone_tile/block{ + dir = 1 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"lO" = ( +/obj/structure/flora/ausbushes/sparsegrass/hell, +/turf/open/floor/plating/moss, +/area/overmap_encounter/planetoid/lava/explored) +"me" = ( +/obj/structure/stone_tile/surrounding_tile, +/obj/structure/stone_tile/surrounding_tile{ + pixel_x = 17; + pixel_y = -17 + }, +/obj/structure/stone_tile/surrounding_tile{ + dir = 1; + pixel_x = 17; + pixel_y = -17 + }, +/obj/structure/stone_tile/surrounding_tile{ + dir = 4; + pixel_x = 17; + pixel_y = -17 + }, +/obj/structure/stone_tile/surrounding_tile{ + dir = 8; + pixel_x = 17; + pixel_y = -17 + }, +/obj/structure/stone_tile/center{ + pixel_x = 17; + pixel_y = -17 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"mn" = ( +/obj/structure/stone_tile/block, +/obj/structure/stone_tile/cracked{ + dir = 1 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"mr" = ( +/obj/structure/stone_tile{ + dir = 1 + }, +/obj/structure/stone_tile{ + dir = 8 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"mv" = ( +/obj/structure/stone_tile/block/burnt{ + dir = 1 + }, +/obj/structure/stone_tile/surrounding_tile/burnt{ + dir = 8 + }, +/obj/structure/stone_tile/surrounding_tile/burnt, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"mM" = ( +/obj/structure/stone_tile/surrounding, +/obj/structure/fluff/drake_statue, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"nh" = ( +/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit, +/area/overmap_encounter/planetoid/lava/explored) +"nk" = ( +/obj/structure/stone_tile{ + dir = 4 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"nq" = ( +/obj/structure/stone_tile/surrounding, +/mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"nz" = ( +/obj/structure/stone_tile/surrounding/cracked{ + dir = 5 + }, +/obj/item/stack/ore/gold, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"nP" = ( +/obj/structure/stone_tile/surrounding_tile{ + dir = 4 + }, +/obj/structure/stone_tile/center/burnt{ + fall_on_cross = 1; + pixel_y = 6 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"nX" = ( +/obj/structure/stone_tile/surrounding_tile{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"oi" = ( +/obj/structure/stone_tile{ + dir = 1 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"ol" = ( +/obj/structure/stone_tile/center/burnt{ + fall_on_cross = 1; + pixel_y = 8; + pixel_x = -8 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"om" = ( +/obj/structure/table_frame/wood, +/obj/item/reagent_containers/food/snacks/grown/ash_flora/fireblossom, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"on" = ( +/obj/structure/stone_tile/surrounding/cracked{ + dir = 1 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"oH" = ( +/obj/structure/stone_tile/surrounding, +/obj/structure/stone_tile/center/cracked, +/obj/structure/destructible/tribal_torch{ + pixel_y = 14 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"oL" = ( +/obj/structure/stone_tile/center/burnt{ + fall_on_cross = 1; + pixel_x = 9; + pixel_y = 8 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"pu" = ( +/mob/living/simple_animal/hostile/asteroid/goliath/beast/ancient, +/turf/open/floor/plating/moss, +/area/ruin/unpowered/buried_shrine) +"pK" = ( +/obj/structure/stone_tile/slab, +/mob/living/simple_animal/hostile/asteroid/brimdemon, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"qh" = ( +/obj/structure/stone_tile{ + dir = 4 + }, +/obj/structure/stone_tile/surrounding/cracked{ + dir = 1 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"qi" = ( +/obj/structure/stone_tile/surrounding, +/obj/structure/stone_tile/center/cracked, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"qp" = ( +/obj/structure/stone_tile/surrounding/cracked{ + dir = 1 + }, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 9 + }, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 6 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"qt" = ( +/obj/structure/stone_tile/center/cracked, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"qw" = ( +/obj/structure/stone_tile/block/burnt{ + dir = 1 + }, +/obj/structure/stone_tile/surrounding_tile/burnt, +/obj/structure/stone_tile/surrounding_tile/burnt{ + dir = 8 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"qO" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 5 + }, +/obj/structure/chair/wood, +/mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"qT" = ( +/obj/structure/stone_tile/center/burnt{ + fall_on_cross = 1; + pixel_x = -7; + pixel_y = 3 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"qV" = ( +/obj/structure/destructible/tribal_torch, +/obj/structure/stone_tile/slab, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"rh" = ( +/obj/structure/stone_tile, +/obj/structure/stone_tile{ + dir = 4 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit, +/area/overmap_encounter/planetoid/lava/explored) +"rk" = ( +/obj/structure/stone_tile/slab/cracked, +/obj/item/pickaxe/rusted{ + pixel_x = 3 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"rp" = ( +/obj/structure/stone_tile/surrounding, +/obj/structure/stone_tile/center, +/obj/item/clothing/suit/hooded/cloak/bone{ + pixel_y = -4 + }, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"rt" = ( +/obj/structure/stone_tile/cracked, +/obj/structure/stone_tile/cracked{ + dir = 4 + }, +/obj/structure/stone_tile{ + dir = 8 + }, +/obj/structure/stone_tile{ + dir = 1 + }, +/obj/item/stack/sheet/bone, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit, +/area/ruin/unpowered/buried_shrine) +"rA" = ( +/obj/structure/flora/ash/cacti, +/turf/open/floor/plating/moss, +/area/ruin/unpowered/buried_shrine) +"rD" = ( +/obj/structure/stone_tile/center/burnt{ + fall_on_cross = 1; + pixel_x = 9 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"rH" = ( +/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit, +/area/overmap_encounter/planetoid/cave/explored) +"rM" = ( +/obj/structure/stone_tile/center/burnt{ + fall_on_cross = 1; + pixel_y = -6 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"rP" = ( +/obj/structure/flora/ash/leaf_shroom, +/turf/open/floor/plating/moss, +/area/overmap_encounter/planetoid/lava/explored) +"su" = ( +/obj/item/stack/ore/gold, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"sv" = ( +/obj/structure/flora/ash/tall_shroom, +/turf/open/floor/plating/moss, +/area/ruin/unpowered/buried_shrine) +"sy" = ( +/obj/structure/stone_tile/center/burnt{ + fall_on_cross = 1; + pixel_x = 6; + pixel_y = -8 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"sB" = ( +/obj/structure/stone_tile/surrounding/cracked{ + dir = 5 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"sD" = ( +/obj/structure/stone_tile/cracked{ + dir = 8 + }, +/obj/structure/stone_tile/block/cracked{ + dir = 1 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"sJ" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 6 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"sL" = ( +/obj/structure/stone_tile/center/burnt{ + fall_on_cross = 1; + pixel_y = -1 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"sS" = ( +/obj/structure/stone_tile/slab/cracked{ + dir = 4 + }, +/obj/item/stack/sheet/mineral/wood, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"ta" = ( +/obj/structure/stone_tile/block, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"td" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 5 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"tA" = ( +/obj/structure/stone_tile/surrounding_tile{ + dir = 8 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit, +/area/overmap_encounter/planetoid/lava/explored) +"tE" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/glass/mortar/mushroom{ + pixel_x = -5 + }, +/obj/item/pestle{ + pixel_y = 5 + }, +/obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_stem{ + pixel_x = -11; + pixel_y = 10 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"tL" = ( +/obj/structure/stone_tile/slab, +/obj/structure/destructible/tribal_torch, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"uf" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 10 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"uK" = ( +/obj/structure/stone_tile/surrounding/cracked{ + dir = 8 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"uN" = ( +/obj/structure/stone_tile{ + dir = 4 + }, +/obj/item/stack/ore/gold, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"uP" = ( +/obj/structure/stone_tile/surrounding/cracked{ + dir = 8 + }, +/obj/structure/stone_tile/center, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"uS" = ( +/obj/structure/table_frame/wood, +/obj/structure/stone_tile/cracked{ + dir = 1 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"vg" = ( +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"vi" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/glass/bottle/potion, +/obj/item/reagent_containers/glass/bottle/potion{ + pixel_x = -10; + pixel_y = 9 + }, +/obj/item/reagent_containers/glass/bottle/potion{ + pixel_x = 10; + pixel_y = 9 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"vo" = ( +/obj/structure/table/wood, +/obj/item/gun/ballistic/bow/ashen, +/obj/structure/stone_tile/slab, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"vJ" = ( +/obj/structure/flora/ash/stem_shroom, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"vO" = ( +/obj/structure/stone_tile/surrounding/cracked{ + dir = 4 + }, +/obj/structure/stone_tile/center/burnt, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"vR" = ( +/obj/item/stack/sheet/bone, +/obj/structure/stone_tile/slab/cracked{ + dir = 5 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"wj" = ( +/obj/structure/stone_tile/surrounding_tile{ + dir = 4 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"wl" = ( +/obj/structure/stone_tile/block{ + dir = 4 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"wt" = ( +/obj/structure/stone_tile/surrounding/cracked{ + dir = 4 + }, +/mob/living/simple_animal/hostile/asteroid/brimdemon, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"wy" = ( +/obj/structure/stone_tile{ + dir = 4 + }, +/obj/structure/stone_tile/block/cracked{ + dir = 6 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"wM" = ( +/obj/structure/stone_tile/slab, +/mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"wS" = ( +/obj/structure/stone_tile/surrounding/cracked{ + dir = 4 + }, +/turf/closed/mineral/random/volcanic, +/area/ruin/unpowered/buried_shrine) +"xe" = ( +/obj/structure/stone_tile{ + dir = 1 + }, +/obj/structure/stone_tile/cracked{ + dir = 8 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit, +/area/overmap_encounter/planetoid/lava/explored) +"xs" = ( +/obj/structure/stone_tile/block/burnt{ + dir = 4 + }, +/obj/structure/stone_tile/block/cracked{ + dir = 8 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"xJ" = ( +/obj/structure/stone_tile/block{ + dir = 4 + }, +/obj/structure/stone_tile/block/cracked{ + dir = 10 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"xT" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 1 + }, +/obj/structure/chair/wood, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"yb" = ( +/obj/structure/stone_tile/center/burnt{ + fall_on_cross = 1; + pixel_y = 6; + pixel_x = -4 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"yt" = ( +/obj/structure/stone_tile/surrounding/cracked{ + dir = 5 + }, +/obj/structure/stone_tile/center, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"yv" = ( +/obj/structure/stone_tile/surrounding, +/obj/item/stack/ore/gold, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"yy" = ( +/obj/structure/stone_tile/block, +/obj/structure/stone_tile{ + dir = 1 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"yz" = ( +/obj/structure/stone_tile/slab/cracked{ + dir = 4 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"yF" = ( +/obj/structure/flora/ausbushes/fullgrass/hell, +/turf/open/floor/plating/grass/lava, +/area/ruin/unpowered/buried_shrine) +"yJ" = ( +/turf/open/floor/plating/grass/lava/orange, +/area/overmap_encounter/planetoid/lava/explored) +"yM" = ( +/obj/structure/stone_tile/surrounding/cracked{ + dir = 4 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"zg" = ( +/obj/structure/stone_tile, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"zB" = ( +/obj/structure/stone_tile/center, +/obj/structure/stone_tile/surrounding_tile{ + dir = 8 + }, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 6 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"zL" = ( +/obj/structure/flora/rock/lava, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit, +/area/overmap_encounter/planetoid/lava/explored) +"zM" = ( +/obj/structure/stone_tile/cracked{ + dir = 4 + }, +/obj/item/stack/ore/gold, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"zN" = ( +/obj/structure/stone_tile/block{ + dir = 8 + }, +/obj/structure/stone_tile/block{ + dir = 4 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"zQ" = ( +/obj/structure/stone_tile/surrounding_tile/burnt{ + dir = 1 + }, +/obj/structure/stone_tile/surrounding_tile/burnt, +/obj/structure/stone_tile/surrounding_tile/burnt{ + dir = 4 + }, +/obj/structure/stone_tile/center/burnt, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Ab" = ( +/obj/structure/stone_tile/surrounding_tile{ + dir = 1 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Ad" = ( +/obj/structure/stone_tile/slab, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Aw" = ( +/obj/structure/stone_tile/cracked{ + dir = 1 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Ay" = ( +/obj/structure/flora/ausbushes/fernybush/hell, +/turf/open/floor/plating/grass/lava/orange, +/area/overmap_encounter/planetoid/lava/explored) +"AY" = ( +/obj/structure/stone_tile/block{ + dir = 1 + }, +/obj/item/stack/ore/gold, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Ba" = ( +/obj/structure/stone_tile/block/burnt{ + dir = 4 + }, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 5 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Bc" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 1 + }, +/obj/structure/stone_tile/block/cracked{ + dir = 10 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Bm" = ( +/obj/structure/stone_tile/center/burnt{ + fall_on_cross = 1; + pixel_y = 4 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Bz" = ( +/obj/structure/table_frame/wood, +/obj/item/stack/sheet/bone, +/obj/structure/stone_tile/slab, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"BA" = ( +/obj/structure/destructible/tribal_torch{ + pixel_y = 13 + }, +/obj/structure/stone_tile/center, +/obj/structure/stone_tile/surrounding/cracked{ + dir = 4 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"BF" = ( +/obj/structure/stone_tile/slab/cracked{ + dir = 6 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"BZ" = ( +/obj/structure/stone_tile/block{ + dir = 8 + }, +/obj/structure/stone_tile/cracked{ + dir = 1 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Cm" = ( +/obj/structure/stone_tile/surrounding/cracked{ + dir = 5 + }, +/obj/structure/stone_tile/center/burnt, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Cv" = ( +/obj/structure/stone_tile/slab/cracked{ + dir = 4 + }, +/obj/item/chair/wood/wings{ + dir = 8 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"CD" = ( +/obj/structure/stone_tile{ + dir = 1 + }, +/obj/structure/stone_tile{ + dir = 4 + }, +/obj/structure/stone_tile, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"CE" = ( +/obj/structure/stone_tile/cracked{ + dir = 8 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"CF" = ( +/obj/structure/chair/pew/left{ + dir = 1 + }, +/obj/structure/stone_tile/slab, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"CM" = ( +/obj/structure/stone_tile/center, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"CT" = ( +/obj/structure/table/wood, +/obj/item/candle, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"CU" = ( +/mob/living/simple_animal/hostile/asteroid/goliath/pup{ + pixel_x = 0 + }, +/turf/open/floor/plating/moss, +/area/ruin/unpowered/buried_shrine) +"Do" = ( +/obj/structure/flora/ausbushes/hell, +/turf/open/floor/plating/grass/lava/orange, +/area/overmap_encounter/planetoid/lava/explored) +"Dp" = ( +/obj/structure/flora/ash/fireblossom, +/turf/open/floor/plating/grass/lava/orange, +/area/overmap_encounter/planetoid/lava/explored) +"DB" = ( +/obj/structure/flora/ausbushes/fullgrass/hell, +/turf/open/floor/plating/grass/lava/orange, +/area/overmap_encounter/planetoid/lava/explored) +"Ee" = ( +/obj/structure/chair/pew/left, +/obj/structure/stone_tile/slab, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Ef" = ( +/obj/structure/flora/ash/fern, +/turf/open/floor/plating/moss, +/area/overmap_encounter/planetoid/cave/explored) +"Eh" = ( +/turf/closed/mineral/random/volcanic, +/area/overmap_encounter/planetoid/lava/explored) +"Eu" = ( +/obj/structure/stone_tile/slab/cracked{ + dir = 5 + }, +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 6 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Ez" = ( +/obj/structure/stone_tile/block{ + dir = 4 + }, +/obj/structure/stone_tile{ + dir = 8 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"EE" = ( +/obj/structure/stone_tile/center/burnt, +/obj/structure/stone_tile/surrounding/burnt, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Fo" = ( +/obj/structure/stone_tile/cracked{ + dir = 4 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Fq" = ( +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Fw" = ( +/obj/structure/stone_tile/slab/cracked{ + dir = 1 + }, +/obj/structure/chair/wood/wings, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"FC" = ( +/obj/item/reagent_containers/food/snacks/grown/apple{ + pixel_y = 16 + }, +/turf/open/floor/plating/grass/lava, +/area/ruin/unpowered/buried_shrine) +"FD" = ( +/obj/structure/stone_tile/center/burnt{ + fall_on_cross = 1; + pixel_x = 1 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Gm" = ( +/obj/structure/stone_tile{ + dir = 8 + }, +/obj/structure/stone_tile{ + dir = 1 + }, +/obj/structure/stone_tile/block/cracked{ + dir = 9 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Go" = ( +/obj/structure/stone_tile/surrounding_tile/cracked, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"GB" = ( +/obj/structure/stone_tile/block{ + dir = 8 + }, +/obj/effect/decal/cleanable/ash{ + pixel_x = -8 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"GL" = ( +/obj/structure/stone_tile/block{ + dir = 1 + }, +/obj/structure/stone_tile/block/cracked, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"GT" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 8 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Hg" = ( +/obj/structure/stone_tile/surrounding/cracked{ + dir = 4 + }, +/obj/item/stack/ore/gold, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Hh" = ( +/obj/structure/stone_tile/surrounding_tile, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Ht" = ( +/obj/structure/stone_tile/surrounding/cracked, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Hv" = ( +/obj/structure/flora/tree/dead/hell, +/turf/open/floor/plating/grass/lava, +/area/ruin/unpowered/buried_shrine) +"Hw" = ( +/obj/structure/stone_tile/center/burnt{ + fall_on_cross = 1; + pixel_y = 6 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"HN" = ( +/obj/structure/stone_tile/center/burnt{ + fall_on_cross = 1; + pixel_x = -3 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Ii" = ( +/obj/structure/stone_tile/cracked{ + dir = 1 + }, +/obj/structure/stone_tile{ + dir = 4 + }, +/obj/structure/stone_tile, +/obj/structure/stone_tile/cracked{ + dir = 8 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit, +/area/ruin/unpowered/buried_shrine) +"Iz" = ( +/obj/structure/destructible/tribal_torch{ + pixel_y = 14 + }, +/obj/structure/stone_tile/surrounding/cracked, +/obj/structure/stone_tile/center, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"IL" = ( +/obj/structure/stone_tile/slab/cracked, +/obj/item/stack/sheet/mineral/wood, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Ja" = ( +/obj/structure/stone_tile/center/burnt{ + fall_on_cross = 1; + pixel_y = 2; + pixel_x = 7 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Jc" = ( +/obj/structure/stone_tile/block/burnt{ + dir = 8 + }, +/obj/structure/stone_tile/block/cracked{ + dir = 4 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Jh" = ( +/obj/structure/stone_tile/surrounding/cracked{ + dir = 9 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Jk" = ( +/obj/structure/stone_tile/cracked{ + dir = 8 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit, +/area/overmap_encounter/planetoid/lava/explored) +"Jr" = ( +/obj/structure/stone_tile/cracked{ + dir = 1 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit, +/area/overmap_encounter/planetoid/lava/explored) +"Jv" = ( +/mob/living/simple_animal/hostile/asteroid/goliath/pup{ + pixel_x = 0 + }, +/obj/structure/flora/ausbushes/sparsegrass/hell, +/turf/open/floor/plating/moss, +/area/ruin/unpowered/buried_shrine) +"Jw" = ( +/obj/structure/stone_tile/block, +/obj/structure/stone_tile/block{ + dir = 1 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"JE" = ( +/obj/structure/stone_tile/slab/cracked{ + dir = 1 + }, +/obj/item/stack/ore/gold, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"JJ" = ( +/obj/structure/stone_tile{ + dir = 8 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"JL" = ( +/obj/structure/flora/ausbushes/ywflowers/hell, +/turf/open/floor/plating/grass/lava/orange, +/area/overmap_encounter/planetoid/lava/explored) +"Ka" = ( +/obj/structure/stone_tile/surrounding_tile/burnt{ + dir = 8 + }, +/obj/structure/stone_tile/surrounding_tile/burnt, +/obj/structure/stone_tile/surrounding_tile/burnt{ + dir = 1 + }, +/obj/structure/stone_tile/surrounding_tile/burnt{ + dir = 4 + }, +/obj/structure/stone_tile/center/burnt, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Kt" = ( +/obj/structure/stone_tile/surrounding_tile/cracked{ + dir = 8 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Kz" = ( +/obj/structure/flora/ash/cap_shroom, +/turf/open/floor/plating/moss, +/area/overmap_encounter/planetoid/cave/explored) +"KD" = ( +/obj/structure/stone_tile/cracked, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit, +/area/overmap_encounter/planetoid/lava/explored) +"Lu" = ( +/obj/structure/flora/ash/leaf_shroom, +/turf/open/floor/plating/moss, +/area/overmap_encounter/planetoid/cave/explored) +"Lx" = ( +/obj/structure/stone_tile/center/burnt{ + fall_on_cross = 1; + pixel_y = 1; + pixel_x = 4 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"LC" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 4 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"LJ" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/food/snacks/grown/ambrosia/gaia{ + pixel_y = 6 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"LK" = ( +/turf/open/floor/plating/moss, +/area/overmap_encounter/planetoid/lava/explored) +"LL" = ( +/obj/structure/stone_tile/cracked{ + dir = 4 + }, +/obj/structure/stone_tile{ + dir = 1 + }, +/obj/structure/stone_tile/cracked{ + dir = 8 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit, +/area/overmap_encounter/planetoid/lava/explored) +"LP" = ( +/obj/structure/table/wood, +/obj/item/ammo_casing/caseless/arrow/bone, +/obj/item/ammo_casing/caseless/arrow/bone{ + pixel_y = -4 + }, +/obj/item/ammo_casing/caseless/arrow/bone{ + pixel_y = 4 + }, +/obj/item/ammo_casing/caseless/arrow/bone{ + pixel_y = 8 + }, +/obj/item/ammo_casing/caseless/arrow/bone{ + pixel_y = 12 + }, +/obj/structure/stone_tile/slab, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"LW" = ( +/obj/structure/destructible/tribal_torch{ + pixel_y = 13 + }, +/obj/structure/stone_tile/surrounding, +/obj/structure/stone_tile/center/cracked, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"LZ" = ( +/obj/structure/stone_tile/center/burnt{ + fall_on_cross = 1; + pixel_y = 5; + pixel_x = 6 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Mc" = ( +/obj/structure/stone_tile/block, +/obj/structure/stone_tile/slab, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Md" = ( +/obj/structure/stone_tile/surrounding_tile/cracked, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit, +/area/overmap_encounter/planetoid/lava/explored) +"Mt" = ( +/obj/structure/flora/ausbushes/genericbush/hell, +/turf/open/floor/plating/grass/lava, +/area/ruin/unpowered/buried_shrine) +"Mw" = ( +/obj/structure/stone_tile/center/burnt{ + fall_on_cross = 1; + pixel_x = -7; + pixel_y = -8 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Mx" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 1 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"MJ" = ( +/obj/structure/stone_tile/surrounding/cracked{ + dir = 8 + }, +/obj/item/stack/ore/gold, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"MQ" = ( +/turf/template_noop, +/area/template_noop) +"Ni" = ( +/obj/structure/table/wood, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Nk" = ( +/obj/structure/table_frame/wood, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"NK" = ( +/obj/structure/flora/ash/cacti, +/turf/open/floor/plating/grass/lava, +/area/ruin/unpowered/buried_shrine) +"NN" = ( +/obj/structure/stone_tile/center, +/obj/structure/stone_tile/surrounding/cracked{ + dir = 5 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"NY" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 9 + }, +/obj/structure/stone_tile/block/cracked, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Ok" = ( +/obj/structure/stone_tile{ + dir = 8 + }, +/obj/item/stack/ore/gold, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Ot" = ( +/obj/structure/stone_tile/center/burnt{ + fall_on_cross = 1; + pixel_y = 8; + pixel_x = -1 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"OO" = ( +/obj/structure/stone_tile/slab/cracked{ + dir = 1 + }, +/obj/structure/stone_tile/surrounding/cracked{ + dir = 4 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"OT" = ( +/obj/structure/flora/ausbushes/fullgrass/hell, +/turf/open/floor/plating/moss, +/area/overmap_encounter/planetoid/lava/explored) +"Ps" = ( +/obj/structure/flora/rock/hell, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit, +/area/overmap_encounter/planetoid/cave/explored) +"Qb" = ( +/obj/structure/flora/ausbushes/sparsegrass/hell, +/turf/open/floor/plating/grass/lava, +/area/ruin/unpowered/buried_shrine) +"Qf" = ( +/obj/structure/stone_tile/cracked{ + dir = 1 + }, +/mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"QR" = ( +/obj/structure/flora/tree/dead/tall/grey, +/turf/open/floor/plating/grass/lava/orange, +/area/overmap_encounter/planetoid/lava/explored) +"Rd" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 8 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit, +/area/ruin/unpowered/buried_shrine) +"Rl" = ( +/obj/structure/stone_tile/cracked{ + dir = 8 + }, +/obj/structure/stone_tile{ + dir = 1 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"RK" = ( +/obj/structure/stone_tile/center/cracked, +/mob/living/simple_animal/hostile/asteroid/brimdemon, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"RN" = ( +/obj/structure/stone_tile/surrounding_tile{ + dir = 8 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Sa" = ( +/obj/structure/stone_tile/slab/cracked{ + dir = 4 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit, +/area/overmap_encounter/planetoid/lava/explored) +"Sj" = ( +/obj/structure/flora/ausbushes/sparsegrass/hell, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit, +/area/overmap_encounter/planetoid/lava/explored) +"Sn" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/food/snacks/grown/ash_flora/fireblossom, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"So" = ( +/obj/structure/stone_tile/block/cracked, +/obj/structure/stone_tile/block/cracked{ + dir = 5 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Sw" = ( +/obj/structure/stone_tile/center/burnt{ + fall_on_cross = 1; + pixel_x = -9 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"SA" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/glass/bowl/mushroom_bowl, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"SJ" = ( +/obj/structure/stone_tile/center/burnt{ + fall_on_cross = 1; + pixel_y = 2; + pixel_x = 4 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"SV" = ( +/obj/structure/chair/pew/right{ + dir = 1 + }, +/obj/structure/stone_tile/slab, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Td" = ( +/obj/structure/stone_tile/slab/cracked, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Tp" = ( +/obj/structure/stone_tile/cracked{ + dir = 8 + }, +/obj/structure/stone_tile, +/obj/structure/stone_tile{ + dir = 4 + }, +/obj/structure/stone_tile{ + dir = 1 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit, +/area/ruin/unpowered/buried_shrine) +"Tu" = ( +/obj/structure/stone_tile/block{ + dir = 1 + }, +/obj/item/chair/wood{ + dir = 8 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Ty" = ( +/obj/item/stack/sheet/bluespace_crystal/five{ + pixel_x = -7 + }, +/obj/item/stack/sheet/mineral/gold/five{ + pixel_y = 3 + }, +/obj/item/stack/sheet/mineral/diamond/five{ + pixel_x = 8 + }, +/obj/structure/closet/crate/necropolis, +/obj/structure/stone_tile/slab/cracked{ + dir = 5 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"TO" = ( +/turf/closed/mineral/random/volcanic, +/area/ruin/unpowered/buried_shrine) +"Ua" = ( +/obj/structure/stone_tile/block{ + dir = 1 + }, +/obj/effect/decal/cleanable/ash{ + pixel_x = 6; + pixel_y = 11 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Uf" = ( +/obj/structure/chair/pew, +/obj/structure/stone_tile/slab, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Uw" = ( +/obj/structure/flora/ausbushes/sparsegrass/hell, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit, +/area/overmap_encounter/planetoid/cave/explored) +"UB" = ( +/obj/structure/flora/ausbushes/genericbush/hell, +/obj/item/reagent_containers/food/snacks/grown/apple{ + pixel_x = -10; + pixel_y = -6 + }, +/turf/open/floor/plating/grass/lava, +/area/ruin/unpowered/buried_shrine) +"UF" = ( +/obj/structure/stone_tile/block, +/obj/item/claymore/bone{ + pixel_x = 8; + pixel_y = 21 + }, +/obj/item/shield/riot/goliath{ + pixel_x = -12; + pixel_y = 16 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Vt" = ( +/obj/structure/flora/ash/leaf_shroom, +/turf/open/floor/plating/moss, +/area/ruin/unpowered/buried_shrine) +"VG" = ( +/obj/structure/table/wood, +/obj/item/kitchen/knife/combat/bone, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Wd" = ( +/obj/structure/stone_tile/slab/cracked{ + dir = 5 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Ws" = ( +/turf/open/floor/plating/moss, +/area/ruin/unpowered/buried_shrine) +"WD" = ( +/obj/structure/flora/tree/dead/barren, +/turf/open/floor/plating/grass/lava/orange, +/area/overmap_encounter/planetoid/lava/explored) +"WG" = ( +/obj/structure/stone_tile/slab/burnt, +/obj/item/gem/amber, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"WP" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 1 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit, +/area/overmap_encounter/planetoid/lava/explored) +"WZ" = ( +/turf/closed/indestructible/riveted/boss, +/area/ruin/unpowered/buried_shrine) +"Xh" = ( +/obj/structure/flora/ash/cap_shroom, +/turf/open/floor/plating/moss, +/area/ruin/unpowered/buried_shrine) +"Xn" = ( +/obj/structure/stone_tile/cracked, +/obj/structure/stone_tile/cracked{ + dir = 4 + }, +/obj/structure/stone_tile{ + dir = 8 + }, +/obj/structure/stone_tile{ + dir = 1 + }, +/mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit, +/area/ruin/unpowered/buried_shrine) +"Xr" = ( +/obj/structure/stone_tile/cracked, +/obj/structure/stone_tile/cracked{ + dir = 4 + }, +/obj/structure/stone_tile{ + dir = 8 + }, +/obj/structure/stone_tile{ + dir = 1 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit, +/area/ruin/unpowered/buried_shrine) +"Xv" = ( +/obj/structure/stone_tile/surrounding/cracked{ + dir = 4 + }, +/obj/structure/stone_tile/center, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"XA" = ( +/turf/closed/indestructible/riveted/boss, +/area/overmap_encounter/planetoid/cave/explored) +"Ye" = ( +/obj/structure/chair/pew/right, +/obj/structure/stone_tile/slab, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Yf" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 9 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Yh" = ( +/obj/structure/stone_tile/block, +/obj/structure/stone_tile{ + dir = 4 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Yp" = ( +/obj/structure/stone_tile/center/burnt{ + fall_on_cross = 1; + pixel_y = -7; + pixel_x = -4 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"YK" = ( +/obj/structure/flora/ausbushes/sparsegrass/hell, +/turf/open/floor/plating/moss, +/area/ruin/unpowered/buried_shrine) +"Zk" = ( +/obj/structure/stone_tile{ + dir = 8 + }, +/obj/structure/stone_tile{ + dir = 1 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Zl" = ( +/obj/structure/stone_tile/surrounding_tile{ + dir = 8 + }, +/obj/structure/stone_tile/center/burnt{ + fall_on_cross = 1; + pixel_y = -8 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"Zo" = ( +/obj/structure/stone_tile/surrounding/cracked{ + dir = 10 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"ZE" = ( +/obj/structure/stone_tile/surrounding/cracked{ + dir = 1 + }, +/obj/structure/stone_tile/center/burnt, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"ZK" = ( +/obj/structure/stone_tile/block{ + dir = 1 + }, +/obj/structure/stone_tile, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_shrine) +"ZV" = ( +/obj/structure/stone_tile/slab/cracked{ + dir = 4 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit, +/area/ruin/unpowered/buried_shrine) +"ZX" = ( +/obj/structure/stone_tile/center/burnt{ + fall_on_cross = 1; + pixel_y = 7; + pixel_x = 9 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered/buried_shrine) + +(1,1,1) = {" +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +nh +nh +nh +nh +nh +nh +nh +nh +nh +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +"} +(2,1,1) = {" +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +nh +nh +nh +MQ +MQ +MQ +nh +jt +Eh +Eh +lO +LK +aD +nh +LK +Sj +nh +nh +jt +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +"} +(3,1,1) = {" +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +jt +nh +nh +nh +nh +nh +nh +nh +Eh +Eh +gt +dF +jJ +nh +nh +nh +nh +LK +nh +nh +nh +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +"} +(4,1,1) = {" +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +nh +nh +nh +aD +nh +nh +nh +nh +aD +nh +nh +Eh +dF +lo +dF +dF +aP +dF +LK +nh +aD +nh +Sj +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +"} +(5,1,1) = {" +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +nh +nh +lO +nh +nh +lO +Eh +Eh +nh +nh +Eh +Eh +Eh +Eh +dF +aP +dF +dF +jJ +dF +lO +LK +lO +nh +nh +MQ +MQ +nh +nh +nh +nh +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +"} +(6,1,1) = {" +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +nh +nh +nh +aD +nh +nh +LK +nh +nh +Eh +nh +Sj +nh +Eh +Eh +Eh +Eh +Eh +Eh +Kz +dF +dF +Eh +Eh +Eh +Eh +nh +nh +nh +nh +nh +nh +aD +nh +nh +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +"} +(7,1,1) = {" +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +nh +Eh +Eh +nh +Sj +nh +nh +LK +rP +LK +Eh +Eh +nh +Eh +Eh +Eh +Eh +Eh +Eh +Eh +Eh +lo +dF +jJ +Eh +Eh +Eh +Eh +aD +nh +Sj +nh +Eh +nh +Sj +nh +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +"} +(8,1,1) = {" +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +jt +nh +Eh +nh +nh +nh +nh +Eh +dF +aP +aP +dF +Eh +Eh +Eh +Eh +Eh +Eh +Eh +Eh +Eh +Eh +dF +dF +dF +Eh +Eh +Eh +Eh +Eh +nh +Eh +Eh +Eh +nh +nh +jt +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +"} +(9,1,1) = {" +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +nh +nh +Eh +Eh +jt +nh +Eh +Eh +lo +dF +Kz +dF +Eh +Eh +Eh +WZ +WZ +WZ +WZ +WZ +Eh +Eh +gt +aP +dF +Ef +Eh +Eh +Eh +Eh +nh +Eh +Eh +nh +nh +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +"} +(10,1,1) = {" +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +nh +Sj +nh +Eh +Eh +Eh +Eh +dF +dF +dF +aP +Eh +Eh +WZ +WZ +WZ +vg +vg +vg +WZ +WZ +WZ +Eh +Eh +lo +aP +Kz +Eh +Eh +Eh +Eh +Eh +nh +aD +nh +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +"} +(11,1,1) = {" +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +nh +nh +nh +Eh +Eh +Eh +jJ +aP +aP +dF +Eh +Eh +WZ +WZ +vg +vg +vg +yF +hp +Qb +TO +WZ +WZ +Eh +jJ +dF +lo +Eh +Eh +Eh +Eh +Eh +nh +nh +nh +nh +nh +nh +MQ +MQ +MQ +MQ +MQ +MQ +MQ +"} +(12,1,1) = {" +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +nh +aD +Eh +Eh +XA +Ef +dF +lo +dF +Eh +Eh +WZ +WZ +TO +hp +eI +be +jo +Mt +TO +TO +TO +WZ +WZ +Eh +dF +dF +dF +Eh +Eh +Eh +Eh +Eh +Eh +Eh +jt +nh +nh +nh +MQ +MQ +MQ +MQ +MQ +MQ +"} +(13,1,1) = {" +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +nh +nh +nh +Eh +XA +XA +dF +dF +aP +gt +Eh +Eh +WZ +TO +Qb +Mt +eI +Hv +FC +Qb +hp +NK +TO +vg +WZ +Eh +Eh +aP +lo +Eh +Eh +Eh +Eh +Eh +Eh +Eh +Eh +Sj +nh +nh +MQ +MQ +MQ +MQ +MQ +MQ +"} +(14,1,1) = {" +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +Sj +nh +nh +Eh +XA +lo +aP +dF +dF +Eh +Eh +Eh +WZ +TO +NK +WZ +WZ +UB +Qb +yF +WZ +WZ +Td +vg +WZ +Eh +Eh +dF +gt +dF +Eh +Eh +Eh +Eh +Eh +Eh +Eh +nh +aD +nh +MQ +MQ +MQ +MQ +MQ +MQ +"} +(15,1,1) = {" +MQ +MQ +MQ +MQ +MQ +nh +nh +nh +nh +nh +nh +nh +Sj +dF +dF +dF +Kz +dF +Eh +Eh +WZ +WZ +TO +TO +WZ +WZ +TO +TO +hp +WZ +WZ +cN +vg +WZ +WZ +Eh +Eh +dF +aP +Eh +Eh +Eh +Eh +XA +XA +Eh +Eh +nh +nh +MQ +MQ +MQ +MQ +MQ +MQ +"} +(16,1,1) = {" +MQ +MQ +MQ +MQ +nh +nh +Eh +Eh +jt +nh +Eh +Eh +Eh +jJ +lo +dF +XA +XA +Eh +Eh +WZ +vg +TO +TO +TO +TO +TO +TO +Qb +TO +TO +hn +vg +vg +WZ +Eh +Eh +XA +XA +Eh +Eh +Eh +Eh +Eh +XA +XA +Eh +nh +nh +MQ +MQ +MQ +MQ +MQ +MQ +"} +(17,1,1) = {" +MQ +MQ +MQ +MQ +MQ +nh +nh +Eh +Eh +Eh +Eh +Eh +XA +dF +dF +aP +XA +XA +Eh +Eh +WZ +vg +on +Fq +Ht +TO +TO +TO +TO +TO +Wd +Fq +cN +vg +WZ +Eh +Eh +XA +XA +Eh +Eh +Eh +Eh +Eh +gt +XA +nh +nh +nh +jt +MQ +MQ +MQ +MQ +MQ +"} +(18,1,1) = {" +MQ +MQ +MQ +MQ +MQ +MQ +nh +nh +Eh +Eh +XA +XA +XA +dF +Lu +dF +Eh +Eh +Eh +Eh +WZ +vg +hn +cN +Fq +yz +TO +TO +TO +TO +TO +TO +TO +vg +WZ +Eh +Eh +Eh +Eh +Eh +Eh +Eh +Eh +Eh +aP +XA +XA +nh +Sj +nh +MQ +MQ +MQ +MQ +MQ +"} +(19,1,1) = {" +MQ +MQ +MQ +nh +nh +nh +nh +jt +Eh +XA +XA +aP +dF +dF +dF +Eh +Eh +Eh +Eh +Eh +WZ +WZ +WZ +WZ +Td +TO +TO +TO +TO +TO +TO +WZ +WZ +WZ +WZ +Eh +Eh +Eh +Eh +Eh +Eh +Eh +Eh +Eh +lo +jJ +XA +aD +nh +nh +MQ +MQ +MQ +MQ +MQ +"} +(20,1,1) = {" +MQ +MQ +MQ +aD +nh +Eh +nh +Eh +Eh +XA +lo +dF +aP +dF +Eh +Eh +Eh +Eh +WZ +WZ +WZ +me +Ab +WZ +WZ +WZ +TO +TO +TO +WZ +WZ +WZ +me +Ab +WZ +WZ +WZ +Eh +Eh +Eh +Eh +Eh +Eh +Eh +dF +aP +XA +XA +nh +nh +nh +MQ +MQ +MQ +MQ +"} +(21,1,1) = {" +MQ +MQ +MQ +nh +Sj +Eh +Eh +Eh +XA +XA +Kz +dF +dF +Eh +Eh +Eh +Eh +Eh +TO +on +lJ +RN +wj +WZ +TO +TO +TO +Fq +Tp +Mx +CF +WZ +RN +wj +ta +oi +WZ +WZ +Eh +Eh +Eh +Eh +Eh +Eh +lo +dF +aP +XA +nh +nh +nh +MQ +MQ +MQ +MQ +"} +(22,1,1) = {" +MQ +MQ +jt +nh +nh +nh +Eh +Eh +XA +dF +dF +aP +jJ +Eh +Eh +Eh +Eh +TO +TO +BF +oi +wl +wl +WZ +IL +ta +Wd +Xr +Tp +lJ +ii +WZ +wl +wl +yz +Ad +OO +WZ +WZ +Eh +Eh +Eh +Eh +Eh +Eh +Ef +aP +XA +nh +nh +nh +MQ +MQ +MQ +MQ +"} +(23,1,1) = {" +MQ +MQ +nh +nh +nh +Eh +Eh +Eh +XA +dF +dF +dF +Eh +Eh +Eh +Eh +Eh +TO +qh +JJ +Rl +yz +WZ +WZ +sS +df +Ii +sB +Td +lJ +SV +WZ +WZ +lJ +Ad +nq +Ad +TO +WZ +WZ +Eh +Eh +Eh +Eh +Eh +gt +lo +XA +Sj +nh +jt +nh +MQ +MQ +MQ +"} +(24,1,1) = {" +MQ +MQ +nh +nh +Eh +Eh +Eh +jJ +lo +aP +dF +Eh +Eh +Eh +Eh +Eh +Eh +TO +Qf +Ad +JJ +TO +WZ +BA +Wd +Tp +yz +Ad +JE +Ii +on +kJ +WZ +oi +on +Ad +yz +TO +TO +WZ +Eh +Eh +Eh +Eh +Eh +Eh +dF +lo +nh +lO +nh +Sj +MQ +MQ +MQ +"} +(25,1,1) = {" +MQ +MQ +nh +LK +Eh +Eh +aP +dF +dF +gt +Eh +Eh +Eh +Eh +WZ +WZ +WZ +TO +Ht +Aw +Ad +TO +WZ +TO +BF +vJ +Ad +cA +Ad +yz +Fq +Fq +WZ +Aw +Fq +ff +Fo +WZ +WZ +WZ +WZ +Eh +Eh +Eh +Eh +Eh +dF +dF +nh +nh +nh +nh +MQ +MQ +MQ +"} +(26,1,1) = {" +MQ +nh +nh +lO +Lu +dF +dF +aP +Eh +Eh +Eh +Eh +Eh +Eh +WZ +ld +WZ +WZ +WZ +yz +Fq +TO +TO +TO +Xr +Ht +Td +pK +on +Ii +Tp +Xr +Fq +kW +BZ +kW +CE +WZ +uS +Sn +WZ +Eh +Eh +Eh +Eh +Eh +aP +dF +LK +nh +aD +nh +MQ +MQ +MQ +"} +(27,1,1) = {" +MQ +aD +nh +nh +dF +lo +dF +Eh +Eh +dD +dD +Eh +Eh +Eh +WZ +Fq +ta +kW +td +kZ +Td +TO +TO +TO +TO +Tp +hn +Ii +Ht +Tp +Hg +BF +Ii +Ad +Ad +Ad +TO +WZ +zg +CE +WZ +Eh +Eh +Eh +XA +XA +Kz +aP +nh +lO +nh +nh +MQ +MQ +MQ +"} +(28,1,1) = {" +MQ +nh +nh +nh +aP +Kz +Eh +Eh +Eh +dD +dD +Eh +Eh +WZ +WZ +Td +lJ +nz +jy +hn +CE +WZ +WZ +TO +TO +TO +Wd +GL +Ad +Fq +Xr +Ii +WZ +WZ +TO +TO +TO +TO +Aw +nk +WZ +WZ +Eh +Eh +XA +XA +lo +Eh +Eh +aD +nh +nh +nh +MQ +MQ +"} +(29,1,1) = {" +MQ +nh +Sj +nh +aP +Eh +Eh +Eh +Eh +Eh +Eh +Eh +Eh +WZ +CT +Fq +jy +wl +lJ +fq +WZ +WZ +WZ +WZ +WZ +TO +BF +qi +TO +wS +WZ +WZ +WZ +WZ +WZ +TO +TO +Ad +ta +zg +Fo +WZ +Eh +Eh +Eh +Eh +Eh +Eh +nh +nh +nh +jI +jt +MQ +MQ +"} +(30,1,1) = {" +MQ +nh +nh +LK +dF +Eh +Eh +Eh +Eh +Eh +Eh +Eh +Eh +WZ +Nk +Fq +TO +TO +TO +WZ +WZ +tE +vi +qp +WZ +WZ +Ad +Fq +TO +WZ +WZ +iK +GB +nX +WZ +WZ +Fq +Wd +ta +oi +Fq +WZ +Eh +Eh +Eh +Eh +nh +aD +nh +nh +nh +nh +nh +nh +MQ +"} +(31,1,1) = {" +nh +nh +LK +OT +Eh +Eh +Eh +Eh +Eh +WZ +WZ +WZ +WZ +WZ +WZ +WZ +TO +TO +WZ +WZ +WZ +Td +ic +xJ +TO +WZ +Ad +Bc +yz +WZ +TO +Ua +rp +UF +WZ +WZ +WZ +Ad +BF +WZ +WZ +WZ +WZ +WZ +WZ +WZ +Sj +nh +jI +Sj +nh +nh +Sj +nh +MQ +"} +(32,1,1) = {" +nh +nh +lO +Eh +Eh +Eh +Eh +Eh +WZ +WZ +Ad +Ad +cD +WZ +yy +TO +TO +Fq +wl +CD +WZ +So +ZE +vg +TO +WZ +Ba +vO +Jc +WZ +TO +zQ +fY +Hh +WZ +Go +ch +Mc +sD +Fq +TO +WZ +TO +TO +zB +WZ +WZ +jt +nh +Jk +nh +aD +nh +nh +MQ +"} +(33,1,1) = {" +jt +Sj +Sj +Eh +Eh +Eh +Eh +WZ +WZ +yy +Cv +Ni +lJ +WZ +ta +su +Mx +uP +ta +AY +WZ +WZ +Mw +FD +oL +WZ +vg +jY +vg +WZ +vg +Hw +TO +WZ +WZ +Ht +kW +nP +iL +Fq +TO +WZ +TO +yz +Yf +fx +WZ +WZ +rh +xe +dD +nh +nh +nh +Sj +"} +(34,1,1) = {" +nh +nh +aD +nh +Eh +Eh +Eh +WZ +Ad +xT +SA +Nk +sJ +Ad +wy +kW +yz +Ad +hn +kW +ZK +WZ +TO +vg +dA +vg +vg +dX +gW +Ja +SJ +HN +ZX +WZ +qw +wl +qt +mn +lJ +Fq +rk +fh +Ad +GT +Ad +on +Rd +ta +tA +WP +Sa +Jr +nh +nh +nh +"} +(35,1,1) = {" +nh +nh +nh +Eh +Eh +ee +Eh +WZ +dQ +qO +cv +LJ +ta +NN +ta +Xv +Ad +mM +Ad +yt +lJ +WZ +TO +vg +dX +Sw +rD +EE +vg +vg +vg +vg +LZ +WZ +Ka +dB +RK +uP +di +zN +Ad +Td +Ad +BF +yz +td +Ht +ZV +kt +ha +ha +Sj +nh +nh +nh +"} +(36,1,1) = {" +Sj +nh +Eh +Eh +ee +ee +ee +WZ +Wd +Tu +Nk +VG +uf +Td +Zk +wl +Td +Ad +yz +wl +gE +WZ +vg +vg +qT +TO +vg +Bm +vg +vg +sy +kC +em +WZ +mv +kW +CM +jy +lJ +TO +Ad +TO +Wd +wl +Ad +uK +wl +cn +Md +dn +dg +KD +nh +nh +nh +"} +(37,1,1) = {" +nh +nh +Eh +ee +ee +ee +ee +WZ +WZ +Yh +Fw +SA +lJ +WZ +ta +Fq +lJ +Xv +jy +lJ +WZ +WZ +TO +fL +ol +WZ +vg +rM +vg +WZ +sL +vg +vg +WZ +WZ +on +wl +bp +Zl +TO +TO +WZ +td +Td +td +qV +WZ +WZ +eJ +LL +dD +nh +Sj +nh +nh +"} +(38,1,1) = {" +nh +nh +Eh +Eh +nh +ee +ee +ee +WZ +WZ +yz +wM +tL +WZ +Yh +kW +Fq +vJ +kW +Gm +WZ +CE +Cm +yb +vg +WZ +xs +bY +iB +WZ +Yp +Lx +Ot +dS +WZ +Kt +Iz +ta +lJ +Fq +TO +WZ +hz +Fq +at +WZ +WZ +Eh +Eh +Eh +Eh +nh +nh +nh +MQ +"} +(39,1,1) = {" +MQ +nh +nh +nh +nh +zL +ee +ee +ee +WZ +WZ +WZ +WZ +WZ +WZ +WZ +MJ +Ht +WZ +WZ +WZ +on +JJ +vg +vg +WZ +Ad +NY +yz +WZ +vg +vg +vg +Hw +WZ +WZ +WZ +hn +Ad +WZ +WZ +WZ +WZ +WZ +WZ +WZ +Eh +Eh +Eh +Eh +jt +nh +nh +nh +MQ +"} +(40,1,1) = {" +MQ +nh +jt +nh +nh +nh +ee +ee +ee +Eh +Eh +Eh +Eh +WZ +Nk +wy +wl +wl +mr +WZ +WZ +Ty +yM +uf +WZ +WZ +hn +td +Ad +WZ +WZ +Eu +WG +hW +WZ +WZ +vJ +Ad +ta +Ok +JJ +WZ +Eh +Eh +Eh +Eh +Eh +Eh +nh +nh +nh +nh +nh +MQ +MQ +"} +(41,1,1) = {" +MQ +nh +nh +nh +Sj +nh +ee +ee +Eh +Eh +Eh +Eh +Eh +WZ +CT +Fq +uf +kW +Mx +BA +WZ +WZ +WZ +WZ +WZ +TO +Wd +ef +BF +TO +WZ +WZ +WZ +WZ +WZ +oH +uN +Wd +Yh +oi +nk +WZ +Eh +Eh +Eh +Eh +Eh +nh +nh +nh +aD +nh +nh +MQ +MQ +"} +(42,1,1) = {" +MQ +MQ +nh +nh +nh +nh +ee +ee +Eh +dD +dD +Eh +Eh +WZ +WZ +Td +lJ +wt +ta +TO +TO +WZ +WZ +TO +TO +TO +Ad +Jw +Ad +TO +TO +TO +WZ +WZ +Fq +nk +Td +yy +nk +oi +WZ +WZ +ee +Eh +dD +dD +jt +nh +Sj +nh +nh +nh +MQ +MQ +MQ +"} +(43,1,1) = {" +MQ +MQ +MQ +nh +nh +nh +ee +ee +ee +dD +dD +Eh +Eh +Eh +WZ +Yf +jy +LC +TO +TO +TO +TO +TO +TO +gH +Xr +zg +Tp +on +zM +Tp +TO +TO +Ad +Ad +Ad +Ez +WZ +JJ +mr +WZ +ee +ee +Eh +dD +dD +nh +nh +nh +jI +nh +nh +MQ +MQ +MQ +"} +(44,1,1) = {" +MQ +MQ +MQ +nh +jt +nh +zL +ee +ee +ee +Eh +Eh +Eh +Eh +WZ +om +WZ +WZ +WZ +TO +TO +BF +TO +Xr +uK +Fo +Ht +Ad +Td +Tp +Wd +TO +TO +TO +iw +wl +CE +WZ +dG +CT +WZ +ee +ee +ee +ee +fB +nh +nh +nh +nh +nh +MQ +MQ +MQ +MQ +"} +(45,1,1) = {" +MQ +MQ +MQ +Sj +nh +nh +nh +Eh +ee +ee +ee +Eh +Eh +Eh +WZ +WZ +WZ +TO +TO +TO +Wd +gH +WZ +su +Tp +yz +Ad +yv +Ad +Fo +Xr +TO +WZ +TO +CE +kW +Aw +WZ +WZ +WZ +WZ +ee +ee +ee +Sj +nh +jI +nh +nh +nh +nh +MQ +MQ +MQ +MQ +"} +(46,1,1) = {" +MQ +MQ +MQ +MQ +nh +nh +nh +Eh +Eh +ee +Eh +Eh +Eh +Eh +Eh +WZ +TO +TO +Zo +Ad +zg +on +WZ +fq +uK +JJ +yz +Ad +hn +Tp +Fq +LW +WZ +Aw +Ht +Ad +hn +TO +TO +WZ +ee +ee +ee +ee +zL +nh +nh +nh +nh +Sj +nh +MQ +MQ +MQ +MQ +"} +(47,1,1) = {" +MQ +MQ +MQ +MQ +MQ +nh +nh +nh +Eh +Eh +Eh +nh +Eh +Eh +Eh +WZ +WZ +Td +yz +hn +co +Wd +WZ +WZ +Ee +ta +yM +Fq +yz +lJ +CF +WZ +WZ +lJ +Ad +nq +TO +TO +WZ +WZ +ee +Eh +Eh +Eh +Eh +nh +nh +jt +nh +nh +nh +MQ +MQ +MQ +MQ +"} +(48,1,1) = {" +MQ +MQ +MQ +MQ +MQ +nh +nh +Sj +nh +nh +nh +nh +nh +Eh +Eh +Eh +WZ +WZ +Ad +Jh +nk +kW +kW +WZ +Uf +ta +BF +Tp +jM +lJ +ii +WZ +kW +gz +Td +Ad +TO +TO +Eh +Eh +Eh +Eh +Eh +Eh +Eh +Eh +Eh +Eh +nh +nh +nh +MQ +MQ +MQ +MQ +"} +(49,1,1) = {" +MQ +MQ +MQ +MQ +MQ +MQ +aD +nh +nh +MQ +MQ +MQ +nh +nh +Eh +Eh +Eh +WZ +WZ +Td +lJ +me +Ab +WZ +Ye +ta +hn +Xn +Ht +lJ +SV +WZ +me +Ab +ta +TO +TO +Eh +Eh +Eh +Eh +Eh +Eh +Eh +Eh +Eh +nh +Eh +nh +nh +MQ +MQ +MQ +MQ +MQ +"} +(50,1,1) = {" +MQ +MQ +MQ +MQ +MQ +MQ +MQ +nh +MQ +MQ +MQ +nh +nh +jt +Eh +Eh +Eh +Eh +WZ +WZ +WZ +RN +wj +WZ +WZ +WZ +vJ +Fq +Tp +WZ +WZ +WZ +RN +wj +WZ +WZ +WZ +Eh +Eh +Eh +Eh +Eh +Eh +nh +nh +nh +nh +nh +nh +MQ +MQ +MQ +MQ +MQ +MQ +"} +(51,1,1) = {" +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +nh +Sj +Eh +Eh +Eh +Eh +Eh +Eh +Eh +WZ +WZ +WZ +WZ +TO +Wd +Fq +BF +gH +hn +TO +WZ +WZ +WZ +WZ +Eh +Eh +Eh +Eh +Eh +Eh +Eh +nh +Sj +nh +aD +nh +nh +MQ +MQ +MQ +MQ +MQ +MQ +MQ +"} +(52,1,1) = {" +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +nh +nh +Eh +Eh +nh +Eh +Eh +Eh +Eh +Eh +WZ +Bz +TO +TO +TO +TO +Xr +hn +Xr +TO +TO +TO +Wd +kp +WZ +Eh +Eh +Eh +Eh +DB +yJ +Eh +Eh +nh +nh +nh +nh +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +"} +(53,1,1) = {" +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +nh +nh +nh +nh +nh +nh +Eh +XA +XA +Eh +Eh +WZ +eZ +vR +TO +TO +TO +TO +TO +TO +TO +TO +TO +TO +LP +WZ +Eh +Eh +dD +dD +bW +bW +Eh +Eh +aD +nh +nh +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +"} +(54,1,1) = {" +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +nh +aD +MQ +MQ +MQ +nh +Eh +XA +XA +Eh +Eh +WZ +Bz +Xr +TO +TO +TO +TO +TO +TO +TO +TO +TO +TO +vo +WZ +Eh +Eh +dD +dD +yJ +JL +Do +Eh +Eh +Eh +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +"} +(55,1,1) = {" +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +nh +Eh +Eh +rH +rH +Eh +WZ +WZ +BF +TO +WZ +WZ +TO +TO +TO +WZ +WZ +TO +TO +WZ +WZ +Eh +yJ +yJ +yJ +DB +Dp +yJ +yJ +Eh +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +"} +(56,1,1) = {" +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +nh +Eh +Eh +Ps +rH +Eh +Eh +WZ +rt +TO +WZ +WZ +Xh +YK +YK +WZ +WZ +TO +Fq +WZ +DB +yJ +bW +yJ +bW +bW +yJ +yJ +bW +yJ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +"} +(57,1,1) = {" +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +Sj +nh +nh +Eh +Eh +rH +rH +Eh +WZ +WZ +TO +TO +TO +Ws +YK +Jv +Ws +Xh +TO +TO +WZ +yJ +yJ +yJ +yJ +WD +yJ +bW +yJ +bW +DB +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +"} +(58,1,1) = {" +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +nh +nh +nh +Eh +Eh +rH +iX +Eh +Eh +WZ +TO +CU +sv +Ws +pu +sv +YK +YK +Vt +WZ +WZ +Dp +Do +bW +bW +yJ +Ay +JL +yJ +yJ +JL +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +"} +(59,1,1) = {" +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +nh +nh +nh +nh +Eh +rH +Uw +Eh +Eh +Eh +WZ +WZ +rA +Ws +Jv +YK +Ws +YK +CU +WZ +WZ +yJ +yJ +JL +yJ +DB +yJ +yJ +yJ +yJ +QR +yJ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +"} +(60,1,1) = {" +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +nh +jt +Sj +nh +nh +rH +rH +Eh +Eh +Eh +Eh +WZ +WZ +WZ +Vt +YK +rA +WZ +WZ +WZ +yJ +bW +yJ +yJ +yJ +yJ +yJ +yJ +yJ +DB +bW +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +"} +(61,1,1) = {" +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +nh +nh +nh +nh +nh +Eh +Eh +Eh +Eh +Eh +Eh +Eh +WZ +WZ +WZ +WZ +WZ +yJ +yJ +bW +bW +Ay +yJ +bW +bW +yJ +Do +bW +bW +yJ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +"} +(62,1,1) = {" +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +nh +nh +nh +nh +nh +Eh +Eh +Eh +Eh +Eh +Eh +Eh +Eh +DB +yJ +yJ +Do +yJ +DB +yJ +yJ +yJ +bW +yJ +yJ +Dp +yJ +yJ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +"} +(63,1,1) = {" +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +nh +nh +nh +nh +nh +Eh +Eh +Eh +Eh +Eh +Eh +yJ +Ay +bW +yJ +yJ +yJ +Dp +bW +bW +yJ +JL +yJ +bW +yJ +yJ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +"} +(64,1,1) = {" +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +nh +Sj +nh +Eh +Eh +bW +Eh +Eh +Eh +Eh +yJ +bW +yJ +yJ +yJ +WD +yJ +yJ +yJ +yJ +yJ +QR +bW +bW +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +"} +(65,1,1) = {" +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +nh +aD +nh +nh +Eh +bW +bW +yJ +Dp +DB +Do +bW +bW +Ay +bW +JL +yJ +Do +yJ +yJ +DB +yJ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +"} +(66,1,1) = {" +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +nh +nh +nh +Eh +Eh +JL +Ay +yJ +WD +JL +yJ +yJ +DB +bW +bW +bW +yJ +yJ +yJ +bW +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +"} +(67,1,1) = {" +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +nh +nh +MQ +MQ +MQ +MQ +bW +bW +bW +yJ +QR +yJ +bW +DB +yJ +bW +DB +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +"} diff --git a/_maps/map_catalogue.txt b/_maps/map_catalogue.txt index ca3748b4c94c..e7b6ca5db5d3 100644 --- a/_maps/map_catalogue.txt +++ b/_maps/map_catalogue.txt @@ -126,9 +126,9 @@ Find the key for using this catalogue in "map_catalogue_key.txt" Size = (x = 11)(y = 16)(z = 1) Tags = "Minor Combat Challenge", "Medium Loot", "Inhospitable" - File Name = "_maps\RandomRuins\LavaRuins\lavaland_surface_ashwalker_shrine.dmm" - Size = (x = 48)(y = 50)(z = 1) - Tags = "No Combat", "Minor Loot", "Inhospitable" + File Name = "_maps\RandomRuins\LavaRuins\lavaland_surface_buried_shrine.dmm" + Size = (x = 67)(y = 55)(z = 1) + Tags = "Medium Combat", "Medium Loot", "Hazardous", "Lava", "Inhospitable" File Name = "_maps\RandomRuins\LavaRuins\lavaland_surface_biodome_winter.dmm" Size = (x = 46)(y = 42)(z = 1) diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index 19b41ef8018f..0f8565b7ecec 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -3045,11 +3045,6 @@ /area/wizard_station) "aEX" = ( /obj/structure/table/wood, -/obj/item/gun/magic/wand{ - desc = "Used in emergencies to reignite magma engines."; - max_charges = 0; - name = "wand of emergency engine ignition" - }, /turf/open/floor/plasteel, /area/wizard_station) "aEY" = ( diff --git a/code/__DEFINES/DNA.dm b/code/__DEFINES/DNA.dm index 30bcd4e253c8..8b05ccacd1fe 100644 --- a/code/__DEFINES/DNA.dm +++ b/code/__DEFINES/DNA.dm @@ -31,7 +31,6 @@ #define GLOWY /datum/mutation/human/glow #define ANTIGLOWY /datum/mutation/human/glow/anti #define TELEPATHY /datum/mutation/human/telepathy -#define FIREBREATH /datum/mutation/human/firebreath #define VOID /datum/mutation/human/void #define TONGUESPIKE /datum/mutation/human/tonguespike #define TONGUESPIKECHEM /datum/mutation/human/tongue_spike/chem diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm index 7df3a453acfb..ad0754c85b21 100644 --- a/code/__DEFINES/combat.dm +++ b/code/__DEFINES/combat.dm @@ -133,52 +133,6 @@ GLOBAL_LIST_INIT(shove_disarming_types, typecacheof(list(/obj/item/gun))) #define EMBED_POINTY list("ignore_throwspeed_threshold" = TRUE) #define EMBED_POINTY_SUPERIOR list("embed_chance" = 100, "ignore_throwspeed_threshold" = TRUE) -//Gun weapon weight -/// Allows you to dual wield this gun and your offhand gun -#define WEAPON_LIGHT 1 -/// Does not allow you to dual wield with this gun and your offhand gun -#define WEAPON_MEDIUM 2 -/// You must wield the gun to fire this gun -#define WEAPON_HEAVY 3 -//Gun trigger guards -#define TRIGGER_GUARD_ALLOW_ALL -1 -#define TRIGGER_GUARD_NONE 0 -#define TRIGGER_GUARD_NORMAL 1 -//Gun bolt types -///Gun has a bolt, it stays closed while not cycling. The gun must be racked to have a bullet chambered when a mag is inserted. -/// Example: c20, shotguns, m90 -#define BOLT_TYPE_STANDARD 1 -///Gun has a bolt, it is open when ready to fire. The gun can never have a chambered bullet with no magazine, but the bolt stays ready when a mag is removed. -/// Example: Some SMGs, the L6 -#define BOLT_TYPE_OPEN 2 -///Gun has no moving bolt mechanism, it cannot be racked. Also dumps the entire contents when emptied instead of a magazine. -/// Example: Break action shotguns, revolvers -#define BOLT_TYPE_NO_BOLT 3 -///Gun has a bolt, it locks back when empty. It can be released to chamber a round if a magazine is in. -/// Example: Pistols with a slide lock, some SMGs -#define BOLT_TYPE_LOCKING 4 -//Sawn off nerfs -///accuracy penalty of sawn off guns -#define SAWN_OFF_ACC_PENALTY 25 -///added recoil of sawn off guns -#define SAWN_OFF_RECOIL 1 - -//ammo box sprite defines -///ammo box will always use provided icon state -#define AMMO_BOX_ONE_SPRITE 0 -///ammo box will have a different state for each bullet; - -#define AMMO_BOX_PER_BULLET 1 -///ammo box will have a different state for full and empty; -max_ammo and -0 -#define AMMO_BOX_FULL_EMPTY 2 - -#define SUPPRESSED_NONE 0 -#define SUPPRESSED_QUIET 1 ///standard suppressed -#define SUPPRESSED_VERY 2 /// no message - -//Projectile Reflect -#define REFLECT_NORMAL (1<<0) -#define REFLECT_FAKEPROJECTILE (1<<1) - //Object/Item sharpness #define IS_BLUNT 0 #define IS_SHARP 1 @@ -214,23 +168,3 @@ GLOBAL_LIST_INIT(shove_disarming_types, typecacheof(list(/obj/item/gun))) //We will round to this value in damage calculations. #define DAMAGE_PRECISION 0.1 - -//bullet_act() return values -#define BULLET_ACT_HIT "HIT" //It's a successful hit, whatever that means in the context of the thing it's hitting. -#define BULLET_ACT_BLOCK "BLOCK" //It's a blocked hit, whatever that means in the context of the thing it's hitting. -#define BULLET_ACT_FORCE_PIERCE "PIERCE" //It pierces through the object regardless of the bullet being piercing by default. - -#define NICE_SHOT_RICOCHET_BONUS 10 //if the shooter has the NICE_SHOT trait and they fire a ricocheting projectile, add this to the ricochet chance and auto aim angle - -//Autofire component -/// Compatible firemode is in the gun. Wait until it's held in the user hands. -#define AUTOFIRE_STAT_IDLE (1<<0) -/// Gun is active and in the user hands. Wait until user does a valid click. -#define AUTOFIRE_STAT_ALERT (1<<1) -/// Gun is shooting. -#define AUTOFIRE_STAT_FIRING (1<<2) - -#define COMSIG_AUTOFIRE_ONMOUSEDOWN "autofire_onmousedown" - #define COMPONENT_AUTOFIRE_ONMOUSEDOWN_BYPASS (1<<0) -#define COMSIG_AUTOFIRE_SHOT "autofire_shot" - #define COMPONENT_AUTOFIRE_SHOT_SUCCESS (1<<0) diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index 42f21252213c..f7267a7af8d3 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -774,6 +774,10 @@ /// send when enabling/diabling an autofire component #define COMSIG_GUN_DISABLE_AUTOFIRE "disable_autofire" #define COMSIG_GUN_ENABLE_AUTOFIRE "enable_autofire" +#define COMSIG_GUN_SET_AUTOFIRE_SPEED "set_autofire_speed" + +///sent when guns need to notify the gun hud to update. mostly for revolvers. +#define COMSIG_UPDATE_AMMO_HUD "update_ammo_hud" ///called in /obj/item/gun/process_chamber (src) #define COMSIG_GUN_CHAMBER_PROCESSED "gun_chamber_processed" diff --git a/code/__DEFINES/guns.dm b/code/__DEFINES/guns.dm index 0256ed11bedd..dba7ce93afaf 100644 --- a/code/__DEFINES/guns.dm +++ b/code/__DEFINES/guns.dm @@ -1,4 +1,61 @@ -//weapon manufacturers +//Gun weapon weight +/// Allows you to dual wield this gun and your offhand gun +#define WEAPON_LIGHT 1 +/// Does not allow you to dual wield with this gun and your offhand gun +#define WEAPON_MEDIUM 2 +/// You must wield the gun to fire this gun +#define WEAPON_HEAVY 3 +/// You must FULLY wield (wait the full wield delay) the gun to fire this gun +#define WEAPON_VERY_HEAVY 4 +//Gun trigger guards +#define TRIGGER_GUARD_ALLOW_ALL -1 +#define TRIGGER_GUARD_NONE 0 +#define TRIGGER_GUARD_NORMAL 1 +//Gun bolt types +///The gun has a closed bolt, when resting it's closed, and must be racked to get a bullet from a magazine. see: Every Fucking Videogame Gun Ever +#define BOLT_TYPE_STANDARD 1 +///Gun has a bolt, it is open when ready to fire. The gun can never have a chambered bullet with no magazine, but the bolt stays ready when a mag is removed. +/// Example: Some SMGs, the L6 +#define BOLT_TYPE_OPEN 2 +///Gun has no moving bolt mechanism, it cannot be racked. Also dumps the entire contents when emptied instead of a magazine. +/// Example: Break action shotguns, revolvers +#define BOLT_TYPE_NO_BOLT 3 +///Gun has a bolt, it locks back when empty. It can be released to chamber a round if a magazine is in. +/// Example: Pistols with a slide lock, some SMGs +#define BOLT_TYPE_LOCKING 4 +//Sawn off nerfs +///accuracy penalty of sawn off guns +#define SAWN_OFF_ACC_PENALTY 25 +///added recoil of sawn off guns +#define SAWN_OFF_RECOIL 1 + +//ammo box sprite defines +///ammo box will always use provided icon state +#define AMMO_BOX_ONE_SPRITE 0 +///ammo box will have a different state for each bullet; - +#define AMMO_BOX_PER_BULLET 1 +///ammo box will have a different state for full and empty; -max_ammo and -0 +#define AMMO_BOX_FULL_EMPTY 2 + +#define SUPPRESSED_NONE 0 +#define SUPPRESSED_QUIET 1 ///standard suppressed +#define SUPPRESSED_VERY 2 /// no message + +//Autofire component +/// Compatible firemode is in the gun. Wait until it's held in the user hands. +#define AUTOFIRE_STAT_IDLE (1<<0) +/// Gun is active and in the user hands. Wait until user does a valid click. +#define AUTOFIRE_STAT_ALERT (1<<1) +/// Gun is shooting. +#define AUTOFIRE_STAT_FIRING (1<<2) + +#define COMSIG_AUTOFIRE_ONMOUSEDOWN "autofire_onmousedown" + #define COMPONENT_AUTOFIRE_ONMOUSEDOWN_BYPASS (1<<0) +#define COMSIG_AUTOFIRE_SHOT "autofire_shot" + #define COMPONENT_AUTOFIRE_SHOT_SUCCESS (1<<0) + +#define DUALWIELD_PENALTY_EXTRA_MULTIPLIER 1.6 + #define MANUFACTURER_NONE null #define MANUFACTURER_SHARPLITE "the Sharplite Defense logo" #define MANUFACTURER_SHARPLITE_NEW "the Nanotrasen-Sharplite logo" @@ -14,3 +71,28 @@ #define MANUFACTURER_DONKCO "the Donk! Co. logo" #define MANUFACTURER_PGF "the Etherbor Industries emblem" #define MANUFACTURER_IMPORT "Lanchester Import Co." + + +///////////////// +// PROJECTILES // +///////////////// + +//bullet_act() return values +#define BULLET_ACT_HIT "HIT" //It's a successful hit, whatever that means in the context of the thing it's hitting. +#define BULLET_ACT_BLOCK "BLOCK" //It's a blocked hit, whatever that means in the context of the thing it's hitting. +#define BULLET_ACT_FORCE_PIERCE "PIERCE" //It pierces through the object regardless of the bullet being piercing by default. + +#define NICE_SHOT_RICOCHET_BONUS 10 //if the shooter has the NICE_SHOT trait and they fire a ricocheting projectile, add this to the ricochet chance and auto aim angle + +//Projectile Reflect +#define REFLECT_NORMAL (1<<0) +#define REFLECT_FAKEPROJECTILE (1<<1) + +#define MOVES_HITSCAN -1 //Not actually hitscan but close as we get without actual hitscan. +#define MUZZLE_EFFECT_PIXEL_INCREMENT 17 //How many pixels to move the muzzle flash up so your character doesn't look like they're shitting out lasers. + +#define FIREMODE_SEMIAUTO "single" +#define FIREMODE_BURST "burst" +#define FIREMODE_FULLAUTO "auto" +#define FIREMODE_OTHER "other" +#define FIREMODE_OTHER_TWO "other2" diff --git a/code/__DEFINES/inventory.dm b/code/__DEFINES/inventory.dm index 8cd775c06f77..64aa6aa52627 100644 --- a/code/__DEFINES/inventory.dm +++ b/code/__DEFINES/inventory.dm @@ -174,5 +174,4 @@ GLOBAL_LIST_INIT(security_wintercoat_allowed, typecacheof(list( /obj/item/tank/internals/plasmaman, /obj/item/toy))) -//WS Port - Internals checker #define GET_INTERNAL_SLOTS(C) list(C.head, C.wear_mask) diff --git a/code/__DEFINES/species_clothing_defines.dm b/code/__DEFINES/species_clothing_defines.dm index c74a20877348..517579192634 100644 --- a/code/__DEFINES/species_clothing_defines.dm +++ b/code/__DEFINES/species_clothing_defines.dm @@ -31,12 +31,12 @@ #define KEPORI_UNIFORM_PATH 'icons/mob/species/kepori/onmob_uniform_kepori.dmi' #define KEPORI_SHOES_PATH 'icons/mob/species/kepori/onmob_feet_kepori.dmi' #define KEPORI_SUIT_PATH 'icons/mob/species/kepori/onmob_suit_kepori.dmi' -//#define KEPORI_EARS_PATH 'icons/mob/species/kepori/onmob_ears_kepori.dmi' +#define KEPORI_EARS_PATH 'icons/mob/species/kepori/onmob_ears_kepori.dmi' #define KEPORI_MASK_PATH 'icons/mob/species/kepori/onmob_mask_kepori.dmi' #define KEPORI_HEAD_PATH 'icons/mob/species/kepori/onmob_head_kepori.dmi' +#define KEPORI_GLASSES_PATH 'icons/mob/species/kepori/onmob_eyes_kepori.dmi' #define KEPORI_GLOVES_PATH 'icons/mob/species/kepori/onmob_hands_kepori.dmi' -//#define KEPORI_BELT_PATH 'icons/mob/species/kepori/onmob_belt_kepori.dmi' -//#define KEPORI_GLASSES_PATH 'icons/mob/species/kepori/onmob_eyes_kepori.dmi' -#define KEPORI_UNDERWEAR_TORSO_PATH 'icons/mob/clothing/underwear/species/underwear_torso_kepori.dmi' -#define KEPORI_UNDERWEAR_LEGS_PATH 'icons/mob/clothing/underwear/species/underwear_legs_kepori.dmi' -#define KEPORI_UNDERWEAR_SOCKS_PATH 'icons/mob/clothing/underwear/species/underwear_socks_kepori.dmi' +#define KEPORI_BELT_PATH 'icons/mob/species/kepori/onmob_belt_kepori.dmi' +#define KEPORI_UNDERWEAR_TORSO_PATH 'icons/mob/clothing/underwear/species/kepori/underwear_torso_kepori.dmi' +#define KEPORI_UNDERWEAR_LEGS_PATH 'icons/mob/clothing/underwear/species/kepori/underwear_legs_kepori.dmi' +#define KEPORI_UNDERWEAR_SOCKS_PATH 'icons/mob/clothing/underwear/species/kepori/underwear_socks_kepori.dmi' diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index e44755574eea..5eb2686b2118 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -42,6 +42,7 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/spider_spinneret, GLOB.spider_spinneret_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/kepori_feathers, GLOB.kepori_feathers_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/kepori_body_feathers, GLOB.kepori_body_feathers_list) + init_sprite_accessory_subtypes(/datum/sprite_accessory/kepori_head_feathers, GLOB.kepori_head_feathers_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/kepori_tail_feathers, GLOB.kepori_tail_feathers_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/vox_head_quills, GLOB.vox_head_quills_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/vox_neck_quills, GLOB.vox_neck_quills_list) diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 63990e61ee33..6a3028443dcc 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -108,6 +108,7 @@ "ipc_chassis" = pick(GLOB.ipc_chassis_list), "ipc_screen" = pick(GLOB.ipc_screens_list), "kepori_body_feathers" = pick(GLOB.kepori_body_feathers_list), + "kepori_head_feathers" = pick(GLOB.kepori_head_feathers_list), "kepori_feathers" = pick(GLOB.kepori_feathers_list), "kepori_tail_feathers" = pick(GLOB.kepori_tail_feathers_list), "legs" = "Normal Legs", diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm index f4f000be6d57..f9edbc500142 100644 --- a/code/_globalvars/lists/flavor_misc.dm +++ b/code/_globalvars/lists/flavor_misc.dm @@ -46,6 +46,7 @@ GLOBAL_LIST_EMPTY(spider_legs_list) GLOBAL_LIST_EMPTY(spider_spinneret_list) GLOBAL_LIST_EMPTY(kepori_feathers_list) GLOBAL_LIST_EMPTY(kepori_body_feathers_list) +GLOBAL_LIST_EMPTY(kepori_head_feathers_list) GLOBAL_LIST_EMPTY(kepori_tail_feathers_list) GLOBAL_LIST_EMPTY(vox_head_quills_list) GLOBAL_LIST_EMPTY(vox_neck_quills_list) diff --git a/code/controllers/subsystem/traumas.dm b/code/controllers/subsystem/traumas.dm index 3dc5553b7381..25ae750eb0d3 100644 --- a/code/controllers/subsystem/traumas.dm +++ b/code/controllers/subsystem/traumas.dm @@ -132,7 +132,6 @@ SUBSYSTEM_DEF(traumas) /obj/item/soulstone, /obj/item/clothing/suit/wizrobe, /obj/item/clothing/head/wizard, /obj/item/spellbook, /obj/item/staff, /obj/item/clothing/suit/space/hardsuit/shielded/wizard, /obj/item/clothing/suit/space/hardsuit/wizard, - /obj/item/gun/magic/staff, /obj/item/gun/magic/wand, /obj/item/nullrod, /obj/item/clothing/under/rank/civilian/chaplain)), "aliens" = typecacheof(list( diff --git a/code/datums/action.dm b/code/datums/action.dm index ff03b689085d..de13fc002dde 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -207,6 +207,7 @@ /datum/action/item_action/toggle_firemode name = "Toggle Firemode" + icon_icon = 'icons/mob/actions/actions_items.dmi' /datum/action/item_action/rcl_col name = "Change Cable Color" diff --git a/code/datums/components/fantasy/suffixes.dm b/code/datums/components/fantasy/suffixes.dm index ec1ee58735f9..8cabee42d21c 100644 --- a/code/datums/components/fantasy/suffixes.dm +++ b/code/datums/components/fantasy/suffixes.dm @@ -131,11 +131,7 @@ /obj/projectile/bullet/honker = 15, /obj/projectile/temp = 15, /obj/projectile/ion = 15, - /obj/projectile/magic/door = 15, - /obj/projectile/magic/locker = 15, - /obj/projectile/magic/fetch = 15, /obj/projectile/beam/emitter = 15, - /obj/projectile/magic/flying = 15, /obj/projectile/energy/net = 15, /obj/projectile/bullet/incendiary/c9mm = 15, /obj/projectile/temp/hot = 15, diff --git a/code/datums/components/fullauto.dm b/code/datums/components/fullauto.dm index 177093a49fef..f3050c7ab76c 100644 --- a/code/datums/components/fullauto.dm +++ b/code/datums/components/fullauto.dm @@ -8,7 +8,7 @@ var/turf/target_loc //For dealing with locking on targets due to BYOND engine limitations (the mouse input only happening when mouse moves). var/autofire_stat = AUTOFIRE_STAT_IDLE var/mouse_parameters - var/autofire_shot_delay = 0.3 SECONDS //Time between individual shots. + var/autofire_shot_delay = 0.1 SECONDS //Time between individual shots. var/mouse_status = AUTOFIRE_MOUSEUP //This seems hacky but there can be two MouseDown() without a MouseUp() in between if the user holds click and uses alt+tab, printscreen or similar. var/enabled = TRUE @@ -22,6 +22,7 @@ RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, PROC_REF(wake_up)) RegisterSignal(parent, COMSIG_GUN_DISABLE_AUTOFIRE, PROC_REF(disable_autofire)) RegisterSignal(parent, COMSIG_GUN_ENABLE_AUTOFIRE, PROC_REF(enable_autofire)) + RegisterSignal(parent, COMSIG_GUN_SET_AUTOFIRE_SPEED, PROC_REF(set_autofire_speed)) if(_autofire_shot_delay) autofire_shot_delay = _autofire_shot_delay if(autofire_stat == AUTOFIRE_STAT_IDLE && ismob(gun.loc)) @@ -161,7 +162,7 @@ if(isgun(parent)) var/obj/item/gun/shoota = parent - if(!shoota.on_autofire_start(shooter)) //This is needed because the minigun has a do_after before firing and signals are async. + if(!shoota.on_autofire_start(shooter=shooter)) //This is needed because the minigun has a do_after before firing and signals are async. stop_autofiring() return if(autofire_stat != AUTOFIRE_STAT_FIRING) @@ -242,12 +243,12 @@ // Gun procs. -/obj/item/gun/proc/on_autofire_start(mob/living/shooter) - if(semicd || shooter.stat || !can_trigger_gun(shooter)) - return FALSE - if(!can_shoot()) - shoot_with_empty_chamber(shooter) +/obj/item/gun/proc/on_autofire_start(datum/source, atom/target, mob/living/shooter, params) + if(current_cooldown || shooter.stat) return FALSE + if(!can_shoot()) //we call pre_fire so bolts/slides work correctly + INVOKE_ASYNC(src, PROC_REF(do_autofire_shot), source, target, shooter, params) + return NONE if(weapon_weight == WEAPON_HEAVY && (!wielded)) to_chat(shooter, "You need a more secure grip to fire [src]!") return FALSE @@ -262,32 +263,29 @@ /obj/item/gun/proc/do_autofire(datum/source, atom/target, mob/living/shooter, params) SIGNAL_HANDLER - if(semicd || shooter.incapacitated()) + if(current_cooldown || shooter.incapacitated()) return NONE if(weapon_weight == WEAPON_HEAVY && (!wielded)) to_chat(shooter, "You need a more secure grip to fire [src]!") return NONE - if(!can_shoot()) - shoot_with_empty_chamber(shooter) + if(!can_shoot()) //we stop if we cant shoot but also calling pre_fire so the bolt works correctly if it's a weird open bolt weapon. + INVOKE_ASYNC(src, PROC_REF(do_autofire_shot), source, target, shooter, params) return NONE INVOKE_ASYNC(src, PROC_REF(do_autofire_shot), source, target, shooter, params) return COMPONENT_AUTOFIRE_SHOT_SUCCESS //All is well, we can continue shooting. /obj/item/gun/proc/do_autofire_shot(datum/source, atom/target, mob/living/shooter, params) - var/obj/item/gun/akimbo_gun = shooter.get_inactive_held_item() - var/bonus_spread = 0 - if(istype(akimbo_gun) && weapon_weight < WEAPON_MEDIUM) - if(akimbo_gun.weapon_weight < WEAPON_MEDIUM && akimbo_gun.can_trigger_gun(shooter)) - bonus_spread = dual_wield_spread - addtimer(CALLBACK(akimbo_gun, TYPE_PROC_REF(/obj/item/gun, process_fire), target, shooter, TRUE, params, null, bonus_spread), 1) - process_fire(target, shooter, TRUE, params, null, bonus_spread) - -/datum/component/automatic_fire/proc/disable_autofire() + pre_fire(target, shooter, TRUE, params, null) //dual wielding is handled here + +/datum/component/automatic_fire/proc/disable_autofire(datum/source) enabled = FALSE -/datum/component/automatic_fire/proc/enable_autofire() +/datum/component/automatic_fire/proc/enable_autofire(datum/source) enabled = TRUE +/datum/component/automatic_fire/proc/set_autofire_speed(datum/source, newspeed) + autofire_shot_delay = newspeed + #undef AUTOFIRE_MOUSEUP #undef AUTOFIRE_MOUSEDOWN diff --git a/code/datums/components/gunpoint.dm b/code/datums/components/gunpoint.dm index 0aa1a5a1e8cc..85701e9c7626 100644 --- a/code/datums/components/gunpoint.dm +++ b/code/datums/components/gunpoint.dm @@ -126,7 +126,7 @@ if(weapon.chambered && weapon.chambered.BB) weapon.chambered.BB.damage *= damage_mult - weapon.process_fire(target, shooter) + weapon.pre_fire(target, shooter) qdel(src) /datum/component/gunpoint/proc/cancel() diff --git a/code/datums/dna.dm b/code/datums/dna.dm index dde90dd5dbe8..abd20fd29212 100644 --- a/code/datums/dna.dm +++ b/code/datums/dna.dm @@ -659,8 +659,6 @@ O.Remove(src) visible_message("[src] vomits up their [O.name]!", "You vomit up your [O.name]") //no "vomit up your the heart" O.forceMove(drop_location()) - if(prob(20)) - O.animate_atom_living() if(9 to 10) ForceContractDisease(new/datum/disease/gastrolosis()) to_chat(src, "Oh, I actually feel quite alright!") diff --git a/code/datums/mutations/actions.dm b/code/datums/mutations/actions.dm index f2ffe7c25fd2..53080247b827 100644 --- a/code/datums/mutations/actions.dm +++ b/code/datums/mutations/actions.dm @@ -88,67 +88,6 @@ if(direction_text) to_chat(user,"You consider [tracking_target]'s scent. The trail leads [direction_text].") -/datum/mutation/human/firebreath - name = "Fire Breath" - desc = "An ancient mutation that gives lizards breath of fire." - quality = POSITIVE - difficulty = 12 - locked = TRUE - text_gain_indication = "Your throat is burning!" - text_lose_indication = "Your throat is cooling down." - power = /obj/effect/proc_holder/spell/aimed/firebreath - instability = 30 - energy_coeff = 1 - power_coeff = 1 - -/datum/mutation/human/firebreath/modify() - if(power) - var/obj/effect/proc_holder/spell/aimed/firebreath/S = power - S.strength = GET_MUTATION_POWER(src) - -/obj/effect/proc_holder/spell/aimed/firebreath - name = "Fire Breath" - desc = "You can breathe fire at a target." - school = "evocation" - charge_max = 600 - clothes_req = FALSE - range = 20 - projectile_type = /obj/projectile/magic/aoe/fireball/firebreath - base_icon_state = "fireball" - action_icon_state = "fireball0" - sound = 'sound/magic/demon_dies.ogg' //horrifying lizard noises - active_msg = "You built up heat in your mouth." - deactive_msg = "You swallow the flame." - var/strength = 1 - -/obj/effect/proc_holder/spell/aimed/firebreath/before_cast(list/targets) - . = ..() - if(iscarbon(usr)) - var/mob/living/carbon/C = usr - if(C.is_mouth_covered()) - C.adjust_fire_stacks(2) - C.IgniteMob() - to_chat(C,"Something in front of your mouth caught fire!") - return FALSE - -/obj/effect/proc_holder/spell/aimed/firebreath/ready_projectile(obj/projectile/P, atom/target, mob/user, iteration) - if(!istype(P, /obj/projectile/magic/aoe/fireball)) - return - var/obj/projectile/magic/aoe/fireball/F = P - switch(strength) - if(1 to 3) - F.exp_light = strength-1 - if(4 to INFINITY) - F.exp_heavy = strength-3 - F.exp_fire += strength - -/obj/projectile/magic/aoe/fireball/firebreath - name = "fire breath" - exp_heavy = 0 - exp_light = 0 - exp_flash = 0 - exp_fire= 4 - /datum/mutation/human/void name = "Void Magnet" desc = "A rare genome that attracts odd forces not usually observed." diff --git a/code/datums/ruins/lavaland.dm b/code/datums/ruins/lavaland.dm index 9944cb00fe55..bb4bcf74b31c 100644 --- a/code/datums/ruins/lavaland.dm +++ b/code/datums/ruins/lavaland.dm @@ -92,11 +92,11 @@ suffix = "lavaland_surface_dwarffortress.dmm" allow_duplicates = FALSE -/datum/map_template/ruin/lavaland/ashwalker_shrine - name = "Ashwalker shrine" - id = "ashwalker_shrine" - description = "A destroyed ashwalker village. What even happened here?" - suffix = "lavaland_surface_ashwalker_shrine.dmm" +/datum/map_template/ruin/lavaland/buried_shrine + name = "Buried Shrine" + id = "buried_shrine" + description = "An ancient temple belonging to some long-gone inhabitants, wrecked and buried by the volcanic activity of it's home planet." + suffix = "lavaland_surface_buried_shrine.dmm" /datum/map_template/ruin/lavaland/spookycrash name = "Spooky Crash" diff --git a/code/game/area/areas/ruins/lavaland.dm b/code/game/area/areas/ruins/lavaland.dm index 5e8e706a319d..c4d3f75f8fb7 100644 --- a/code/game/area/areas/ruins/lavaland.dm +++ b/code/game/area/areas/ruins/lavaland.dm @@ -112,3 +112,8 @@ /area/ruin/unpowered/scorched_hut name = "Scorched Hut" icon_state = "red" + +/area/ruin/unpowered/buried_shrine + name = "Buried Shrine" + icon_state = "red" + diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 82735ff9d522..65e161f2176b 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -883,31 +883,6 @@ GLOBAL_LIST_EMPTY(possible_items_special) explanation_text = "Steal at least five guns!" wanted_items = list(/obj/item/gun) -/datum/objective/steal_five_of_type/summon_magic - name = "steal magic" - explanation_text = "Steal at least five magical artefacts!" - wanted_items = list() - -/datum/objective/steal_five_of_type/summon_magic/New() - wanted_items = GLOB.summoned_magic_objectives - ..() - -/datum/objective/steal_five_of_type/summon_magic/check_completion() - var/list/datum/mind/owners = get_owners() - var/stolen_count = 0 - for(var/datum/mind/M in owners) - if(!isliving(M.current)) - continue - var/list/all_items = M.current.GetAllContents() //this should get things in cheesewheels, books, etc. - for(var/obj/I in all_items) //Check for wanted items - if(istype(I, /obj/item/book/granter/spell)) - var/obj/item/book/granter/spell/spellbook = I - if(!spellbook.used || !spellbook.oneuse) //if the book still has powers... - stolen_count++ //it counts. nice. - else if(is_type_in_typecache(I, wanted_items)) - stolen_count++ - return stolen_count >= 5 - //Created by admin tools /datum/objective/custom name = "custom" diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index 2720443d2424..b0e030206a0f 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -21,6 +21,7 @@ /obj/item/ammo_box/magazine/recharge, /obj/item/modular_computer, /obj/item/gun/ballistic/automatic/powered, + /obj/item/gun/ballistic/automatic/assault/e40, )) /obj/machinery/recharger/RefreshParts() diff --git a/code/game/objects/items/chrono_eraser.dm b/code/game/objects/items/chrono_eraser.dm index f63a5e9dd45a..baa541662e20 100644 --- a/code/game/objects/items/chrono_eraser.dm +++ b/code/game/objects/items/chrono_eraser.dm @@ -51,7 +51,7 @@ item_flags = DROPDEL ammo_type = list(/obj/item/ammo_casing/energy/chrono_beam) can_charge = FALSE - fire_delay = 50 + fire_delay = 5 SECONDS var/obj/item/chrono_eraser/TED = null var/obj/structure/chrono_field/field = null var/turf/startpos = null diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm index bf08b704beb0..61486cf07bf2 100644 --- a/code/game/objects/items/devices/paicard.dm +++ b/code/game/objects/items/devices/paicard.dm @@ -85,7 +85,7 @@ pai.master_dna = M.dna.unique_enzymes to_chat(pai, "You have been bound to a new master.") pai.laws.set_zeroth_law("Serve your master.") - pai.emittersemicd = FALSE + pai.emittercurrent_cooldown = FALSE if(href_list["wipe"]) var/confirm = input("Are you CERTAIN you wish to delete the current personality? This action cannot be undone.", "Personality Wipe") in list("Yes", "No") if(confirm == "Yes") diff --git a/code/game/objects/items/dna_injector.dm b/code/game/objects/items/dna_injector.dm index 1f78839ae40f..a11539595805 100644 --- a/code/game/objects/items/dna_injector.dm +++ b/code/game/objects/items/dna_injector.dm @@ -90,11 +90,6 @@ desc = "This will make you big and strong, but give you a bad skin condition." add_mutations = list(HULK) -/obj/item/dnainjector/firebreath - name = "\improper DNA injector (Fire Breath)" - desc = "Restores the dragon ancestry." - add_mutations = list(FIREBREATH) - /obj/item/dnainjector/xraymut name = "\improper DNA injector (X-ray)" desc = "Finally you can see what the Captain does." diff --git a/code/game/objects/items/granters.dm b/code/game/objects/items/granters.dm index 0681892fd47e..f3cdfb068944 100644 --- a/code/game/objects/items/granters.dm +++ b/code/game/objects/items/granters.dm @@ -247,19 +247,6 @@ user.Stun(40, ignore_canstun = TRUE) user.petrify(30) -/obj/item/book/granter/spell/cards - spell = /obj/effect/proc_holder/spell/aimed/spell_cards - spellname = "spellcards" - icon_state ="bookspellcards" - desc = "The ultimate card trick, for users ten and up." - remarks = list("It's all about the razzmataz.", "...I don't think I'll actually be sawing anyone in half", "These are pretty flimsy, most armor would defeat them.", "They do burn damage? Weird.", "Why the dumb stance? It's just a flick of the hand...", "Are these cards? They feel stiffer then pages.", "Best performed using a top hat...") - -/obj/item/book/granter/spell/cards/recoil(mob/living/user) - ..() - to_chat(user,"The cards are against you!") - user.Stun(40, ignore_canstun = TRUE) - user.petrify(30) - /obj/item/book/granter/spell/shapechange spell = /obj/effect/proc_holder/spell/targeted/shapeshift spellname = "shapechange" diff --git a/code/game/objects/items/kitchen.dm b/code/game/objects/items/kitchen.dm index c8c9a0f96b96..e386420462d6 100644 --- a/code/game/objects/items/kitchen.dm +++ b/code/game/objects/items/kitchen.dm @@ -191,7 +191,7 @@ /obj/item/kitchen/knife/combat/Initialize() . = ..() - AddElement(/datum/element/world_icon, null, icon, 'icons/obj/kitchen.dmi') + AddElement(/datum/element/world_icon, null, icon, 'icons/obj/item/knife.dmi') /obj/item/kitchen/knife/combat/survival name = "survival knife" diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm index f8bb97d3a411..5d87b42b78e5 100644 --- a/code/game/objects/items/storage/backpack.dm +++ b/code/game/objects/items/storage/backpack.dm @@ -226,7 +226,7 @@ /obj/item/storage/backpack/satchel/leather name = "leather satchel" desc = "It's a very fancy satchel made with fine leather." - icon = 'icons/obj/storage.dmi' //WS Edit - Suitcases + icon = 'icons/obj/storage.dmi' icon_state = "satchel" item_state = "satchel" diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index c578c318e73a..0e2a945de0be 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -600,33 +600,6 @@ /obj/item/multitool = 1) generate_items_inside(items_inside,src) - -/obj/item/storage/belt/wands - name = "wand belt" - desc = "A belt designed to hold various rods of power. A veritable fanny pack of exotic magic." - icon_state = "soulstone" - item_state = "soulstone" - -/obj/item/storage/belt/wands/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 6 - STR.set_holdable(list( - /obj/item/gun/magic/wand - )) - -/obj/item/storage/belt/wands/full/PopulateContents() - new /obj/item/gun/magic/wand/death(src) - new /obj/item/gun/magic/wand/resurrection(src) - new /obj/item/gun/magic/wand/polymorph(src) - new /obj/item/gun/magic/wand/teleport(src) - new /obj/item/gun/magic/wand/door(src) - new /obj/item/gun/magic/wand/fireball(src) - - for(var/obj/item/gun/magic/wand/W in contents) //All wands in this pack come in the best possible condition - W.max_charges = initial(W.max_charges) - W.charges = W.max_charges - /obj/item/storage/belt/janitor name = "janibelt" desc = "A belt used to hold most janitorial supplies." diff --git a/code/game/objects/structures/fugitive_role_spawners.dm b/code/game/objects/structures/fugitive_role_spawners.dm deleted file mode 100644 index 4f98e919ffc5..000000000000 --- a/code/game/objects/structures/fugitive_role_spawners.dm +++ /dev/null @@ -1,58 +0,0 @@ - - -/obj/effect/mob_spawn/human/fugitive - assignedrole = "Fugitive Hunter" - flavour_text = "" //the flavor text will be the backstory argument called on the antagonist's greet, see hunter.dm for details - roundstart = FALSE - death = FALSE - random = TRUE - show_flavour = FALSE - density = TRUE - var/back_story = "error" - -/obj/effect/mob_spawn/human/fugitive/Initialize(mapload) - . = ..() - notify_ghosts("Hunters are waking up looking for refugees!", source = src, action=NOTIFY_ATTACK, flashwindow = FALSE, ignore_key = POLL_IGNORE_FUGITIVE) - -/obj/effect/mob_spawn/human/fugitive/spacepol - name = "police pod" - desc = "A small sleeper typically used to put people to sleep for briefing on the mission." - mob_name = "a spacepol officer" - flavour_text = "Justice has arrived. I am a member of the Spacepol!" - back_story = "space cop" - outfit = /datum/outfit/spacepol - icon = 'icons/obj/machines/sleeper.dmi' - icon_state = "sleeper" - -/obj/effect/mob_spawn/human/fugitive/russian - name = "russian pod" - flavour_text = "Ay blyat. I am a space-russian smuggler! We were mid-flight when our cargo was beamed off our ship!" - back_story = "russian" - desc = "A small sleeper typically used to make long distance travel a bit more bearable." - mob_name = "russian" - outfit = /datum/outfit/frontier/hunter - icon = 'icons/obj/machines/sleeper.dmi' - icon_state = "sleeper" - -/obj/effect/mob_spawn/human/fugitive/bounty - name = "bounty hunter pod" - flavour_text = "We got a new bounty on some fugitives, dead or alive." - back_story = "bounty hunters" - desc = "A small sleeper typically used to make long distance travel a bit more bearable." - mob_name = "bounty hunter" - icon = 'icons/obj/machines/sleeper.dmi' - icon_state = "sleeper" - -/obj/effect/mob_spawn/human/fugitive/bounty/Destroy() - var/obj/structure/fluff/empty_sleeper/S = new(drop_location()) - S.setDir(dir) - return ..() - -/obj/effect/mob_spawn/human/fugitive/bounty/armor - outfit = /datum/outfit/bountyarmor - -/obj/effect/mob_spawn/human/fugitive/bounty/hook - outfit = /datum/outfit/bountyhook - -/obj/effect/mob_spawn/human/fugitive/bounty/synth - outfit = /datum/outfit/bountysynth diff --git a/code/game/objects/structures/icemoon/cave_entrance.dm b/code/game/objects/structures/icemoon/cave_entrance.dm index 2a7a8c5f4a38..47ac972b1c20 100644 --- a/code/game/objects/structures/icemoon/cave_entrance.dm +++ b/code/game/objects/structures/icemoon/cave_entrance.dm @@ -743,7 +743,6 @@ GLOBAL_LIST_INIT(ore_probability, list( new /obj/item/clothing/suit/space/hardsuit/carp(loc) new /mob/living/simple_animal/hostile/carp(loc) if(prob(45)) - new /obj/item/gun/magic/hook(loc) new /mob/living/simple_animal/hostile/carp(loc) if(prob(45)) new /obj/item/reagent_containers/food/snacks/fishmeat/carp(loc) @@ -1045,7 +1044,6 @@ GLOBAL_LIST_INIT(ore_probability, list( if(prob(45)) new /obj/item/dnainjector/dwarf(loc) if(prob(35)) - new /obj/item/dnainjector/firebreath(loc) new /mob/living/simple_animal/hostile/gorilla(loc) if(prob(35)) new /mob/living/simple_animal/hostile/gorilla(loc) diff --git a/code/game/turfs/closed/_closed.dm b/code/game/turfs/closed/_closed.dm index bb5d6f7311c0..4866dbfb3f60 100644 --- a/code/game/turfs/closed/_closed.dm +++ b/code/game/turfs/closed/_closed.dm @@ -239,7 +239,7 @@ return TRUE /turf/closed/indestructible/riveted/boss - name = "necropolis wall" + name = "thick stone wall" desc = "A thick, seemingly indestructible stone wall." icon = 'icons/turf/walls/boss_wall.dmi' icon_state = "boss_wall-0" diff --git a/code/modules/admin/create_mob.dm b/code/modules/admin/create_mob.dm index 7d5dfccf2804..3b8c5191c9b6 100644 --- a/code/modules/admin/create_mob.dm +++ b/code/modules/admin/create_mob.dm @@ -42,6 +42,7 @@ H.dna.features["squid_face"] = pick(GLOB.squid_face_list) H.dna.features["kepori_feathers"] = pick(GLOB.kepori_feathers_list) H.dna.features["kepori_body_feathers"] = pick(GLOB.kepori_body_feathers_list) + H.dna.features["kepori_head_feathers"] = pick(GLOB.kepori_head_feathers_list) H.dna.features["vox_head_quills"] = pick(GLOB.vox_head_quills_list) H.dna.features["vox_neck_quills"] = pick(GLOB.vox_neck_quills_list) H.dna.features["elzu_horns"] = pick(GLOB.elzu_horns_list) diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index df5b1d6d18d3..f189fdf6106d 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -735,8 +735,6 @@ M.audible_message("...wabbajack...wabbajack...") playsound(M.loc, 'sound/magic/staff_change.ogg', 50, TRUE, -1) - wabbajack(M) - message_admins("Mass polymorph started by [who_did_it] is complete.") diff --git a/code/modules/antagonists/abductor/equipment/abduction_gear.dm b/code/modules/antagonists/abductor/equipment/abduction_gear.dm index 1245e2585462..5bce8014babe 100644 --- a/code/modules/antagonists/abductor/equipment/abduction_gear.dm +++ b/code/modules/antagonists/abductor/equipment/abduction_gear.dm @@ -384,7 +384,7 @@ ammo_type = list(/obj/item/ammo_casing/energy/shrink) item_state = "shrink_ray" icon_state = "shrink_ray" - fire_delay = 30 + fire_delay = 3 SECONDS selfcharge = 1//shot costs 200 energy, has a max capacity of 1000 for 5 shots. self charge returns 25 energy every couple ticks, so about 1 shot charged every 12~ seconds trigger_guard = TRIGGER_GUARD_ALLOW_ALL// variable-size trigger, get it? (abductors need this to be set so the gun is usable for them) diff --git a/code/modules/antagonists/changeling/powers/mutations.dm b/code/modules/antagonists/changeling/powers/mutations.dm index f32c0dcc215b..28a4ae06d16b 100644 --- a/code/modules/antagonists/changeling/powers/mutations.dm +++ b/code/modules/antagonists/changeling/powers/mutations.dm @@ -211,185 +211,6 @@ if(can_drop) new /obj/item/melee/synthetic_arm_blade(get_turf(user)) -/***************************************\ -|***********COMBAT TENTACLES*************| -\***************************************/ - -/datum/action/changeling/weapon/tentacle - name = "Tentacle" - desc = "We ready a tentacle to grab items or victims with. Costs 10 chemicals." - helptext = "We can use it once to retrieve a distant item. If used on living creatures, the effect depends on the intent: \ - Help will simply drag them closer, Disarm will grab whatever they're holding instead of them, Grab will put the victim in our hold after catching it, \ - and Harm will pull it in and stab it if we're also holding a sharp weapon. Cannot be used while in lesser form." - button_icon_state = "tentacle" - chemical_cost = 10 - dna_cost = 2 - req_human = 1 - weapon_type = /obj/item/gun/magic/tentacle - weapon_name_simple = "tentacle" - silent = TRUE - -/obj/item/gun/magic/tentacle - name = "tentacle" - desc = "A fleshy tentacle that can stretch out and grab things or people." - icon = 'icons/obj/changeling_items.dmi' - icon_state = "tentacle" - item_state = "tentacle" - lefthand_file = 'icons/mob/inhands/antag/changeling_lefthand.dmi' - righthand_file = 'icons/mob/inhands/antag/changeling_righthand.dmi' - item_flags = NEEDS_PERMIT | ABSTRACT | DROPDEL | NOBLUDGEON - flags_1 = NONE - w_class = WEIGHT_CLASS_HUGE - slot_flags = NONE - ammo_type = /obj/item/ammo_casing/magic/tentacle - fire_sound = 'sound/effects/splat.ogg' - force = 0 - max_charges = 1 - fire_delay = 1 - throwforce = 0 //Just to be on the safe side - throw_range = 0 - throw_speed = 0 - -/obj/item/gun/magic/tentacle/Initialize(mapload, silent) - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT) - if(ismob(loc)) - if(!silent) - loc.visible_message("[loc.name]\'s arm starts stretching inhumanly!", "Our arm twists and mutates, transforming it into a tentacle.", "You hear organic matter ripping and tearing!") - else - to_chat(loc, "You prepare to extend a tentacle.") - - -/obj/item/gun/magic/tentacle/shoot_with_empty_chamber(mob/living/user as mob|obj) - to_chat(user, "The [name] is not ready yet.") - -/obj/item/gun/magic/tentacle/process_fire() - . = ..() - if(charges == 0) - qdel(src) - -/obj/item/ammo_casing/magic/tentacle - name = "tentacle" - desc = "A tentacle." - projectile_type = /obj/projectile/tentacle - caliber = "tentacle" - icon_state = "arrow" - firing_effect_type = null - var/obj/item/gun/magic/tentacle/gun //the item that shot it - -/obj/item/ammo_casing/magic/tentacle/Initialize() - gun = loc - . = ..() - -/obj/item/ammo_casing/magic/tentacle/Destroy() - gun = null - return ..() - -/obj/projectile/tentacle - name = "tentacle" - icon_state = "tentacle_end" - pass_flags = PASSTABLE - damage = 0 - damage_type = BRUTE - range = 8 - hitsound = 'sound/weapons/thudswoosh.ogg' - var/chain - var/obj/item/ammo_casing/magic/tentacle/source //the item that shot it - -/obj/projectile/tentacle/Initialize() - source = loc - . = ..() - -/obj/projectile/tentacle/fire(setAngle) - if(firer) - chain = firer.Beam(src, icon_state = "tentacle", emissive = FALSE) - ..() - -/obj/projectile/tentacle/proc/reset_throw(mob/living/carbon/human/H) - if(H.throw_mode) - H.throw_mode_off() //Don't annoy the changeling if he doesn't catch the item - -/obj/projectile/tentacle/proc/tentacle_grab(mob/living/carbon/human/H, mob/living/carbon/C) - if(H.Adjacent(C)) - if(H.get_active_held_item() && !H.get_inactive_held_item()) - H.swap_hand() - if(H.get_active_held_item()) - return - C.grabbedby(H) - C.grippedby(H, instant = TRUE) //instant aggro grab - -/obj/projectile/tentacle/proc/tentacle_stab(mob/living/carbon/human/H, mob/living/carbon/C) - if(H.Adjacent(C)) - for(var/obj/item/I in H.held_items) - if(I.get_sharpness()) - C.visible_message("[H] impales [C] with [H.p_their()] [I.name]!", "[H] impales you with [H.p_their()] [I.name]!") - C.apply_damage(I.force, BRUTE, BODY_ZONE_CHEST) - H.do_item_attack_animation(C, used_item = I) - H.add_mob_blood(C) - playsound(get_turf(H),I.hitsound,75,TRUE) - return - -/obj/projectile/tentacle/on_hit(atom/target, blocked = FALSE) - var/mob/living/carbon/human/H = firer - if(blocked >= 100) - return BULLET_ACT_BLOCK - if(isitem(target)) - var/obj/item/I = target - if(!I.anchored) - to_chat(firer, "You pull [I] towards yourself.") - H.throw_mode_on() - I.throw_at(H, 10, 2) - . = BULLET_ACT_HIT - - else if(isliving(target)) - var/mob/living/L = target - if(!L.anchored && !L.throwing)//avoid double hits - if(iscarbon(L)) - var/mob/living/carbon/C = L - var/firer_intent = INTENT_HARM - var/mob/M = firer - if(istype(M)) - firer_intent = M.a_intent - switch(firer_intent) - if(INTENT_HELP) - C.visible_message("[L] is pulled by [H]'s tentacle!","A tentacle grabs you and pulls you towards [H]!") - C.throw_at(get_step_towards(H,C), 8, 2) - return BULLET_ACT_HIT - - if(INTENT_DISARM) - var/obj/item/I = C.get_active_held_item() - if(I) - if(C.dropItemToGround(I)) - C.visible_message("[I] is yanked off [C]'s hand by [src]!","A tentacle pulls [I] away from you!") - on_hit(I) //grab the item as if you had hit it directly with the tentacle - return BULLET_ACT_HIT - else - to_chat(firer, "You can't seem to pry [I] off [C]'s hands!") - return BULLET_ACT_BLOCK - else - to_chat(firer, "[C] has nothing in hand to disarm!") - return BULLET_ACT_HIT - - if(INTENT_GRAB) - C.visible_message("[L] is grabbed by [H]'s tentacle!","A tentacle grabs you and pulls you towards [H]!") - C.throw_at(get_step_towards(H,C), 8, 2, H, TRUE, TRUE, callback=CALLBACK(src, PROC_REF(tentacle_grab), H, C)) - return BULLET_ACT_HIT - - if(INTENT_HARM) - C.visible_message("[L] is thrown towards [H] by a tentacle!","A tentacle grabs you and throws you towards [H]!") - C.throw_at(get_step_towards(H,C), 8, 2, H, TRUE, TRUE, callback=CALLBACK(src, PROC_REF(tentacle_stab), H, C)) - return BULLET_ACT_HIT - else - L.visible_message("[L] is pulled by [H]'s tentacle!","A tentacle grabs you and pulls you towards [H]!") - L.throw_at(get_step_towards(H,L), 8, 2) - . = BULLET_ACT_HIT - -/obj/projectile/tentacle/Destroy() - qdel(chain) - source = null - return ..() - - /***************************************\ |****************SHIELD*****************| \***************************************/ diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm index cf1562d8c289..c9232857a547 100644 --- a/code/modules/antagonists/cult/blood_magic.dm +++ b/code/modules/antagonists/cult/blood_magic.dm @@ -812,7 +812,7 @@ /obj/item/melee/blood_magic/manipulator/attack_self(mob/living/user) if(iscultist(user)) - var/list/options = list("Blood Spear (150)", "Blood Bolt Barrage (300)", "Blood Beam (500)") + var/list/options = list("Blood Spear (150)", "Blood Beam (500)") var/choice = input(user, "Choose a greater blood rite...", "Greater Blood Rites") as null|anything in options if(!choice) to_chat(user, "You decide against conducting a greater blood rite.") @@ -835,18 +835,6 @@ user.visible_message( "A [rite.name] appears at [user]'s feet!", \ "A [rite.name] materializes at your feet.") - if("Blood Bolt Barrage (300)") - if(uses < BLOOD_BARRAGE_COST) - to_chat(user, "You need [BLOOD_BARRAGE_COST] charges to perform this rite.") - else - var/obj/rite = new /obj/item/gun/ballistic/rifle/illestren/enchanted/arcane_barrage/blood() - uses -= BLOOD_BARRAGE_COST - qdel(src) - if(user.put_in_hands(rite)) - to_chat(user, "Your hands glow with power!") - else - to_chat(user, "You need a free hand for this rite!") - qdel(rite) if("Blood Beam (500)") if(uses < BLOOD_BEAM_COST) to_chat(user, "You need [BLOOD_BEAM_COST] charges to perform this rite.") diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm index 6eed283b02f1..53d17bf325aa 100644 --- a/code/modules/antagonists/cult/cult_items.dm +++ b/code/modules/antagonists/cult/cult_items.dm @@ -703,47 +703,6 @@ L.visible_message("An unseen force pulls the blood spear from [L]'s hands!") spear.throw_at(owner, 10, 2, owner) - -/obj/item/gun/ballistic/rifle/illestren/enchanted/arcane_barrage/blood - name = "blood bolt barrage" - desc = "Blood for blood." - color = "#ff0000" - guns_left = 24 - mag_type = /obj/item/ammo_box/magazine/internal/boltaction/enchanted/arcane_barrage/blood - fire_sound = 'sound/magic/wand_teleport.ogg' - - -/obj/item/ammo_box/magazine/internal/boltaction/enchanted/arcane_barrage/blood - ammo_type = /obj/item/ammo_casing/magic/arcane_barrage/blood - -/obj/item/ammo_casing/magic/arcane_barrage/blood - projectile_type = /obj/projectile/magic/arcane_barrage/blood - firing_effect_type = /obj/effect/temp_visual/cult/sparks - -/obj/projectile/magic/arcane_barrage/blood - name = "blood bolt" - icon_state = "mini_leaper" - nondirectional_sprite = TRUE - damage_type = BRUTE - impact_effect_type = /obj/effect/temp_visual/dir_setting/bloodsplatter - -/obj/projectile/magic/arcane_barrage/blood/Bump(atom/target) - var/turf/T = get_turf(target) - playsound(T, 'sound/effects/splat.ogg', 50, TRUE) - if(iscultist(target)) - if(ishuman(target)) - var/mob/living/carbon/human/H = target - if(H.stat != DEAD) - H.reagents.add_reagent(/datum/reagent/fuel/unholywater, 4) - if(isshade(target) || isconstruct(target)) - var/mob/living/simple_animal/M = target - if(M.health+5 < M.maxHealth) - M.adjustHealth(-5) - new /obj/effect/temp_visual/cult/sparks(T) - qdel(src) - else - ..() - /obj/item/blood_beam name = "\improper magical aura" desc = "Sinister looking aura that distorts the flow of reality around it." diff --git a/code/modules/antagonists/fugitive/fugitive_outfits.dm b/code/modules/antagonists/fugitive/fugitive_outfits.dm deleted file mode 100644 index df784813df40..000000000000 --- a/code/modules/antagonists/fugitive/fugitive_outfits.dm +++ /dev/null @@ -1,154 +0,0 @@ -/datum/outfit/prisoner - name = "Prison Escapee" - uniform = /obj/item/clothing/under/rank/prisoner - shoes = /obj/item/clothing/shoes/sneakers/orange - r_pocket = /obj/item/kitchen/knife/shiv - -/datum/outfit/prisoner/post_equip(mob/living/carbon/human/H, visualsOnly=FALSE) - if(visualsOnly) - return - H.fully_replace_character_name(null,"NTP #CC-0[rand(111,999)]") //same as the lavaland prisoner transport, but this time they are from CC, or CentCom - -/datum/outfit/yalp_cultist - name = "Cultist of Yalp Elor" - uniform = /obj/item/clothing/under/rank/civilian/chaplain - suit = /obj/item/clothing/suit/chaplainsuit/holidaypriest - gloves = /obj/item/clothing/gloves/color/red - shoes = /obj/item/clothing/shoes/sneakers/black - mask = /obj/item/clothing/mask/gas/tiki_mask/yalp_elor - -/datum/outfit/waldo - name = "Waldo" - uniform = /obj/item/clothing/under/pants/jeans - suit = /obj/item/clothing/suit/striped_sweater - head = /obj/item/clothing/head/beanie/waldo - shoes = /obj/item/clothing/shoes/sneakers/brown - ears = /obj/item/radio/headset - glasses = /obj/item/clothing/glasses/regular/circle - -/datum/outfit/waldo/post_equip(mob/living/carbon/human/H, visualsOnly=FALSE) - if(visualsOnly) - return - H.fully_replace_character_name(null,"Waldo") - H.eye_color = "000" - H.gender = MALE - H.skin_tone = "caucasian3" - H.hairstyle = "Business Hair 3" - H.facial_hairstyle = "Shaved" - H.hair_color = "000" - H.facial_hair_color = H.hair_color - H.update_body() - if(H.mind) - H.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/knock(null)) - var/list/no_drops = list() - no_drops += H.get_item_by_slot(ITEM_SLOT_FEET) - no_drops += H.get_item_by_slot(ITEM_SLOT_ICLOTHING) - no_drops += H.get_item_by_slot(ITEM_SLOT_OCLOTHING) - no_drops += H.get_item_by_slot(ITEM_SLOT_HEAD) - no_drops += H.get_item_by_slot(ITEM_SLOT_EYES) - for(var/i in no_drops) - var/obj/item/I = i - ADD_TRAIT(I, TRAIT_NODROP, CURSED_ITEM_TRAIT) - -/datum/outfit/synthetic - name = "Factory Error Synth" - uniform = /obj/item/clothing/under/color/white - ears = /obj/item/radio/headset - -/datum/outfit/synthetic/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - if(visualsOnly) - return - var/obj/item/organ/eyes/robotic/glow/eyes = new() - eyes.Insert(src, drop_if_replaced = FALSE) - -/datum/outfit/spacepol - name = "Spacepol Officer" - uniform = /obj/item/clothing/under/rank/security/officer/beatcop - suit = /obj/item/clothing/suit/armor/vest/blueshirt - belt = /obj/item/gun/ballistic/automatic/pistol/candor - head = /obj/item/clothing/head/helmet/police - gloves = /obj/item/clothing/gloves/tackler/combat - shoes = /obj/item/clothing/shoes/jackboots - mask = /obj/item/clothing/mask/gas/sechailer/swat/spacepol - glasses = /obj/item/clothing/glasses/sunglasses - ears = /obj/item/radio/headset - l_pocket = /obj/item/ammo_box/magazine/m45 - r_pocket = /obj/item/restraints/handcuffs - id = /obj/item/card/id - -/datum/outfit/spacepol/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - if(visualsOnly) - return - var/obj/item/card/id/W = H.wear_id - W.assignment = "Police Officer" - W.registered_name = H.real_name - W.update_label() - -/datum/outfit/frontier/hunter - name = "Frontiersman Corpse (Hunter)" - ears = /obj/item/radio/headset - r_hand = /obj/item/gun/ballistic/rifle/illestren - -/datum/outfit/frontier/hunter/pre_equip(mob/living/carbon/human/H) - if(prob(50)) - head = /obj/item/clothing/head/trapper - -/datum/outfit/bountyarmor - name = "Bounty Hunter - Armored" - uniform = /obj/item/clothing/under/rank/prisoner - head = /obj/item/clothing/head/hunter - suit = /obj/item/clothing/suit/space/hunter - gloves = /obj/item/clothing/gloves/tackler/combat - shoes = /obj/item/clothing/shoes/jackboots - mask = /obj/item/clothing/mask/gas/hunter - glasses = /obj/item/clothing/glasses/sunglasses/garb - ears = /obj/item/radio/headset - l_pocket = /obj/item/tank/internals/emergency_oxygen - r_pocket = /obj/item/restraints/handcuffs/cable - id = /obj/item/card/id - r_hand = /obj/item/flamethrower/full/tank - -/datum/outfit/bountyarmor/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - if(visualsOnly) - return - var/obj/item/card/id/W = H.wear_id - W.assignment = "Bounty Hunter" - W.registered_name = H.real_name - W.update_label() - -/datum/outfit/bountyhook - name = "Bounty Hunter - Hook" - uniform = /obj/item/clothing/under/rank/prisoner - back = /obj/item/storage/backpack - head = /obj/item/clothing/head/scarecrow_hat - gloves = /obj/item/clothing/gloves/botanic_leather - ears = /obj/item/radio/headset - shoes = /obj/item/clothing/shoes/jackboots - mask = /obj/item/clothing/mask/scarecrow - r_pocket = /obj/item/restraints/handcuffs/cable - id = /obj/item/card/id - r_hand = /obj/item/gun/ballistic/shotgun/doublebarrel/hook - - backpack_contents = list( - /obj/item/ammo_casing/shotgun/incapacitate = 6 - ) - -/datum/outfit/bountyhook/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - if(visualsOnly) - return - var/obj/item/card/id/W = H.wear_id - W.assignment = "Bounty Hunter" - W.registered_name = H.real_name - W.update_label() - -/datum/outfit/bountysynth - name = "Bounty Hunter - Synth" - uniform = /obj/item/clothing/under/rank/prisoner - back = /obj/item/storage/backpack - suit = /obj/item/clothing/suit/armor/riot - shoes = /obj/item/clothing/shoes/jackboots - glasses = /obj/item/clothing/glasses/eyepatch - r_pocket = /obj/item/restraints/handcuffs/cable - ears = /obj/item/radio/headset - id = /obj/item/card/id - r_hand = /obj/item/storage/firstaid/regular diff --git a/code/modules/antagonists/survivalist/survivalist.dm b/code/modules/antagonists/survivalist/survivalist.dm index 0e38dc57105d..1fb457eea64b 100644 --- a/code/modules/antagonists/survivalist/survivalist.dm +++ b/code/modules/antagonists/survivalist/survivalist.dm @@ -26,17 +26,3 @@ guns.owner = owner objectives += guns ..() - -/datum/antagonist/survivalist/magic - name = "Amateur Magician" - greet_message = "Grow your newfound talent! Grab as many magical artefacts as possible, by any means necessary. Kill anyone who gets in your way." - -/datum/antagonist/survivalist/magic/greet() - ..() - to_chat(owner, "As a wonderful magician, you should remember that spellbooks don't mean anything if they are used up.") - -/datum/antagonist/survivalist/magic/forge_objectives() - var/datum/objective/steal_five_of_type/summon_magic/magic = new - magic.owner = owner - objectives += magic - ..() diff --git a/code/modules/antagonists/wizard/equipment/spellbook.dm b/code/modules/antagonists/wizard/equipment/spellbook.dm index 58e397a64d40..69ff4bcfc2f5 100644 --- a/code/modules/antagonists/wizard/equipment/spellbook.dm +++ b/code/modules/antagonists/wizard/equipment/spellbook.dm @@ -106,10 +106,6 @@ name = "Fireball" spell_type = /obj/effect/proc_holder/spell/aimed/fireball -/datum/spellbook_entry/spell_cards - name = "Spell Cards" - spell_type = /obj/effect/proc_holder/spell/aimed/spell_cards - /datum/spellbook_entry/rod_form name = "Rod Form" spell_type = /obj/effect/proc_holder/spell/targeted/rod_form @@ -223,18 +219,6 @@ . = ..() REMOVE_TRAIT(user, TRAIT_TESLA_SHOCKIMMUNE, "lightning_bolt_spell") -/datum/spellbook_entry/infinite_guns - name = "Lesser Summon Guns" - spell_type = /obj/effect/proc_holder/spell/targeted/infinite_guns/gun - cost = 3 - no_coexistance_typecache = /obj/effect/proc_holder/spell/targeted/infinite_guns/arcane_barrage - -/datum/spellbook_entry/arcane_barrage - name = "Arcane Barrage" - spell_type = /obj/effect/proc_holder/spell/targeted/infinite_guns/arcane_barrage - cost = 3 - no_coexistance_typecache = /obj/effect/proc_holder/spell/targeted/infinite_guns/gun - /datum/spellbook_entry/barnyard name = "Barnyard Curse" spell_type = /obj/effect/proc_holder/spell/pointed/barnyardcurse @@ -291,47 +275,6 @@ dat += "[surplus] left.
" return dat -/datum/spellbook_entry/item/staffchange - name = "Staff of Change" - desc = "An artefact that spits bolts of coruscating energy which cause the target's very form to reshape itself." - item_path = /obj/item/gun/magic/staff/change - -/datum/spellbook_entry/item/staffanimation - name = "Staff of Animation" - desc = "An arcane staff capable of shooting bolts of eldritch energy which cause inanimate objects to come to life. This magic doesn't affect machines." - item_path = /obj/item/gun/magic/staff/animate - category = "Assistance" - -/datum/spellbook_entry/item/staffchaos - name = "Staff of Chaos" - desc = "A caprious tool that can fire all sorts of magic without any rhyme or reason. Using it on people you care about is not recommended." - item_path = /obj/item/gun/magic/staff/chaos - -/datum/spellbook_entry/item/spellblade - name = "Spellblade" - desc = "A sword capable of firing blasts of energy which rip targets limb from limb." - item_path = /obj/item/gun/magic/staff/spellblade - -/datum/spellbook_entry/item/staffdoor - name = "Staff of Door Creation" - desc = "A particular staff that can mold solid walls into ornate doors. Useful for getting around in the absence of other transportation. Does not work on glass." - item_path = /obj/item/gun/magic/staff/door - cost = 1 - category = "Mobility" - -/datum/spellbook_entry/item/staffhealing - name = "Staff of Healing" - desc = "An altruistic staff that can heal the lame and raise the dead." - item_path = /obj/item/gun/magic/staff/healing - cost = 1 - category = "Defensive" - -/datum/spellbook_entry/item/lockerstaff - name = "Staff of the Locker" - desc = "A staff that shoots lockers. It eats anyone it hits on its way, leaving a welded locker with your victims behind." - item_path = /obj/item/gun/magic/staff/locker - category = "Defensive" - /datum/spellbook_entry/item/scryingorb name = "Scrying Orb" desc = "An incandescent orb of crackling energy. Using it will allow you to release your ghost while alive, allowing you to spy upon others and talk to the deceased. In addition, buying it will permanently grant you X-ray vision." @@ -356,12 +299,6 @@ item_path = /obj/item/necromantic_stone category = "Assistance" -/datum/spellbook_entry/item/wands - name = "Wand Assortment" - desc = "A collection of wands that allow for a wide variety of utility. Wands have a limited number of charges, so be conservative with their use. Comes in a handy belt." - item_path = /obj/item/storage/belt/wands/full - category = "Defensive" - /datum/spellbook_entry/item/armor name = "Mastercrafted Armor Set" desc = "An artefact suit of armor that allows you to cast spells while providing more protection against attacks and the void of space." diff --git a/code/modules/antagonists/wizard/wizard.dm b/code/modules/antagonists/wizard/wizard.dm index 14cf56d51ae0..96a41b2ac07b 100644 --- a/code/modules/antagonists/wizard/wizard.dm +++ b/code/modules/antagonists/wizard/wizard.dm @@ -204,7 +204,6 @@ if(APPRENTICE_HEALING) owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/charge(null)) owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/forcewall(null)) - H.put_in_hands(new /obj/item/gun/magic/staff/healing(H)) to_chat(owner, "Your service has not gone unrewarded, however. Studying under [master.current.real_name], you have learned life-saving survival spells. You are able to cast charge and forcewall.") if(APPRENTICE_ROBELESS) owner.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/knock(null)) diff --git a/code/modules/awaymissions/mission_code/snowdin.dm b/code/modules/awaymissions/mission_code/snowdin.dm index c7aa46af728b..b64a2abf02de 100644 --- a/code/modules/awaymissions/mission_code/snowdin.dm +++ b/code/modules/awaymissions/mission_code/snowdin.dm @@ -487,7 +487,6 @@ /obj/item/shield/energy = 6, /obj/item/shield/riot/tele = 12, /obj/item/dnainjector/lasereyesmut = 7, - /obj/item/gun/magic/wand/fireball/inert = 3, /obj/item/pneumatic_cannon = 15, /obj/item/melee/transforming/energy/sword = 7, /obj/item/book/granter/spell/knock = 15, @@ -515,8 +514,6 @@ /obj/item/dualsaber = 15, /obj/item/organ/heart/demon = 7, /obj/item/gun/ballistic/automatic/smg/c20r = 16, - /obj/item/gun/magic/wand/resurrection/inert = 15, - /obj/item/gun/magic/wand/resurrection = 10, /obj/item/uplink/old = 2, /obj/item/book/granter/spell/charge = 12, /obj/item/grenade/clusterbuster/spawner_manhacks = 15, @@ -556,16 +553,6 @@ desc = "High speed, low drag combat boots, now with an added layer of insulation." min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT -/obj/item/gun/magic/wand/fireball/inert - name = "weakened wand of fireball" - desc = "This wand shoots scorching balls of fire that explode into destructive flames. The years of the cold have weakened the magic inside the wand." - max_charges = 4 - -/obj/item/gun/magic/wand/resurrection/inert - name = "weakened wand of healing" - desc = "This wand uses healing magics to heal and revive. The years of the cold have weakened the magic inside the wand." - max_charges = 5 - /obj/effect/mob_spawn/human/syndicatesoldier/coldres name = "Syndicate Snow Operative" outfit = /datum/outfit/snowsyndie/corpse diff --git a/code/modules/cargo/blackmarket/blackmarket_items/weapons.dm b/code/modules/cargo/blackmarket/blackmarket_items/weapons.dm index 8832729e58af..83740509f2d7 100644 --- a/code/modules/cargo/blackmarket/blackmarket_items/weapons.dm +++ b/code/modules/cargo/blackmarket/blackmarket_items/weapons.dm @@ -122,8 +122,8 @@ pair_item = /datum/blackmarket_item/weapon/e40_mag price_min = 7000 - price_max = 13000 - stock = 1 + price_max = 15000 + stock_max = 2 availability_prob = 20 /datum/blackmarket_item/weapon/e40_mag @@ -134,7 +134,7 @@ price_min = 750 price_max = 1250 stock_min = 2 - stock_max = 4 + stock_max = 6 availability_prob = 0 /datum/blackmarket_item/weapon/e50 diff --git a/code/modules/cargo/exports/lavaland.dm b/code/modules/cargo/exports/lavaland.dm index b330b0ec4bdc..4779886622a4 100644 --- a/code/modules/cargo/exports/lavaland.dm +++ b/code/modules/cargo/exports/lavaland.dm @@ -7,7 +7,6 @@ unit_name = "minor lava planet artifact" export_types = list(/obj/item/immortality_talisman, /obj/item/book_of_babel, - /obj/item/gun/magic/hook, /obj/item/wisp_lantern, /obj/item/reagent_containers/glass/bottle/potion/flight, /obj/item/katana/cursed, @@ -23,9 +22,7 @@ /obj/item/lava_staff, /obj/item/ship_in_a_bottle, /obj/item/clothing/shoes/clown_shoes/banana_shoes, - /obj/item/gun/magic/staff/honk, /obj/item/kitchen/knife/envy, - /obj/item/gun/ballistic/revolver/russian/soul, /obj/item/veilrender/vealrender, /obj/item/nullrod/scythe/talking/necro, /obj/item/clothing/suit/armor/ascetic) @@ -55,8 +52,7 @@ /obj/machinery/anomalous_crystal, /obj/item/mayhem, /obj/item/blood_contract, - /obj/item/guardiancreator/miner/choose,//this is basically the most valulable mining loot so good luck getting a miner to part ways - /obj/item/gun/magic/staff/spellblade, + /obj/item/guardiancreator/miner/choose//this is basically the most valulable mining loot so good luck getting a miner to part ways ) /* /datum/export/lavaland/trophycommon diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 662a549ca631..b9a4fb8f0ca3 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -114,9 +114,10 @@ GLOBAL_LIST_EMPTY(preferences_datums) "ipc_tail" = "None", "ipc_chassis" = "Morpheus Cyberkinetics (Custom)", "ipc_brain" = "Posibrain", - "kepori_feathers" = "Plain", - "kepori_body_feathers" = "Plain", - "kepori_tail_feathers" = "Fan", + "kepori_feathers" = "None", + "kepori_body_feathers" = "None", + "kepori_head_feathers" = "None", + "kepori_tail_feathers" = "None", "vox_head_quills" = "Plain", "vox_neck_quills" = "Plain", "elzu_horns" = "None", @@ -244,7 +245,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) return #define APPEARANCE_CATEGORY_COLUMN "" -#define MAX_MUTANT_ROWS 4 +#define MAX_MUTANT_ROWS 5 /datum/preferences/proc/ShowChoices(mob/user) show_loadout = (current_tab != 1) ? show_loadout : FALSE @@ -728,6 +729,19 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "" mutant_category = 0 + if("kepori_head_feathers" in pref_species.default_features) + if(!mutant_category) + dat += APPEARANCE_CATEGORY_COLUMN + + dat += "

Head Feathers

" + dat += "[features["kepori_head_feathers"]]
" + dat += "    Change
" + + mutant_category++ + if(mutant_category >= MAX_MUTANT_ROWS) + dat += "" + mutant_category = 0 + if("kepori_body_feathers" in pref_species.default_features) if(!mutant_category) dat += APPEARANCE_CATEGORY_COLUMN @@ -836,10 +850,17 @@ GLOBAL_LIST_EMPTY(preferences_datums) //Adds a thing to select which phobia because I can't be assed to put that in the quirks window if("Phobia" in all_quirks) + if(!mutant_category) + dat += APPEARANCE_CATEGORY_COLUMN dat += "

Phobia

" dat += "[phobia]
" + mutant_category++ + if(mutant_category >= MAX_MUTANT_ROWS) + dat += "" + mutant_category = 0 + if("Smoker" in all_quirks) dat += "

Smoker

" @@ -853,6 +874,14 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "[features["body_size"]]
" + mutant_category++ + if(mutant_category >= MAX_MUTANT_ROWS) + dat += "" + mutant_category = 0 + + if(generic_adjective) + if(!mutant_category) + dat += APPEARANCE_CATEGORY_COLUMN dat += "

Character Adjective

" @@ -1970,6 +1999,12 @@ GLOBAL_LIST_EMPTY(preferences_datums) if (new_kepori_feathers) features["kepori_feathers"] = new_kepori_feathers + if("kepori_head_feathers") + var/new_kepori_feathers + new_kepori_feathers = input(user, "Choose your character's head feathers:", "Character Preference") as null|anything in GLOB.kepori_head_feathers_list + if (new_kepori_feathers) + features["kepori_head_feathers"] = new_kepori_feathers + if("kepori_body_feathers") var/new_kepori_feathers new_kepori_feathers = input(user, "Choose your character's body feathers:", "Character Preference") as null|anything in GLOB.kepori_body_feathers_list diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index b53d761c41da..3c3040f03906 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -438,6 +438,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car READ_FILE(S["feature_ipc_brain"], features["ipc_brain"]) READ_FILE(S["feature_kepori_feathers"], features["kepori_feathers"]) READ_FILE(S["feature_kepori_body_feathers"], features["kepori_body_feathers"]) + READ_FILE(S["feature_kepori_head_feathers"], features["kepori_head_feathers"]) READ_FILE(S["feature_kepori_tail_feathers"], features["kepori_tail_feathers"]) READ_FILE(S["feature_vox_head_quills"], features["vox_head_quills"]) READ_FILE(S["feature_vox_neck_quills"], features["vox_neck_quills"]) @@ -548,8 +549,9 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car features["ipc_chassis"] = sanitize_inlist(features["ipc_chassis"], GLOB.ipc_chassis_list) features["ipc_brain"] = sanitize_inlist(features["ipc_brain"], GLOB.ipc_brain_list) features["kepori_feathers"] = sanitize_inlist(features["kepori_feathers"], GLOB.kepori_feathers_list, "Plain") - features["kepori_body_feathers"] = sanitize_inlist(features["kepori_body_feathers"], GLOB.kepori_body_feathers_list, "Plain") - features["kepori_tail_feathers"] = sanitize_inlist(features["kepori_tail_feathers"], GLOB.kepori_tail_feathers_list, "Fan") + features["kepori_body_feathers"] = sanitize_inlist(features["kepori_body_feathers"], GLOB.kepori_body_feathers_list, "None") + features["kepori_head_feathers"] = sanitize_inlist(features["kepori_head_feathers"], GLOB.kepori_head_feathers_list, "None") + features["kepori_tail_feathers"] = sanitize_inlist(features["kepori_tail_feathers"], GLOB.kepori_tail_feathers_list, "None") features["vox_head_quills"] = sanitize_inlist(features["vox_head_quills"], GLOB.vox_head_quills_list, "None") features["vox_neck_quills"] = sanitize_inlist(features["vox_neck_quills"], GLOB.vox_neck_quills_list, "None") features["elzu_horns"] = sanitize_inlist(features["elzu_horns"], GLOB.elzu_horns_list) @@ -629,6 +631,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["feature_ipc_brain"] , features["ipc_brain"]) WRITE_FILE(S["feature_kepori_feathers"] , features["kepori_feathers"]) WRITE_FILE(S["feature_kepori_body_feathers"], features["kepori_body_feathers"]) + WRITE_FILE(S["feature_kepori_head_feathers"], features["feature_kepori_head_feathers"]) WRITE_FILE(S["feature_kepori_tail_feathers"], features["kepori_tail_feathers"]) WRITE_FILE(S["feature_vox_head_quills"] , features["vox_head_quills"]) WRITE_FILE(S["feature_vox_neck_quills"] , features["vox_neck_quills"]) diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index b1e1cc1f2105..166f437dc3af 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -286,7 +286,7 @@ if("[layer]" in mob_species.offset_clothing) // This code taken from Baystation 12 - var/icon/final_I = icon('icons/blanks/32x32.dmi', "nothing") + var/icon/final_I = icon('icons/blanks/64x64.dmi', "nothing") var/list/shifts = mob_species.offset_clothing["[layer]"] // Apply all pixel shifts for each direction. @@ -294,9 +294,10 @@ var/list/facing_list = shifts[shift_facing] var/use_dir = text2num(shift_facing) var/icon/equip = icon(file2use, icon_state = state2use, dir = use_dir) - var/icon/canvas = icon('icons/blanks/32x32.dmi', "nothing") + var/icon/canvas = icon('icons/blanks/64x64.dmi', "nothing") canvas.Blend(equip, ICON_OVERLAY, facing_list["x"]+1, facing_list["y"]+1) final_I.Insert(canvas, dir = use_dir) + final_I = fcopy_rsc(final_I) GLOB.species_clothing_icons[mob_species.id]["[file2use]-[state2use]"] = final_I return TRUE diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index 385baa647432..0698981207bf 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -248,7 +248,6 @@ tint = 1 glass_colour_type = /datum/client_colour/glass_colour/gray - /obj/item/clothing/glasses/hud/spacecop/hidden // for the undercover cop name = "sunglasses" desc = "These sunglasses are special, and let you view potential criminals." @@ -274,4 +273,3 @@ desc = "A heads-up display that scans the humanoids in view and provides accurate data about their ID status and security records. This pair also corrects nearsightedness." icon_state = "prescriptionsecurityhud" vision_correction = 1 - diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm index 06bd05a45795..cbac3e0e8901 100644 --- a/code/modules/clothing/gloves/color.dm +++ b/code/modules/clothing/gloves/color.dm @@ -220,7 +220,7 @@ icon_state = "nitrile" transfer_prints = FALSE carrytrait = TRAIT_QUICKER_CARRY - supports_variations = KEPORI_VARIATION + //supports_variations = KEPORI_VARIATION /obj/item/clothing/gloves/color/latex/nitrile/evil name = "red nitrile gloves" @@ -240,10 +240,8 @@ desc = "Overdesigned engineering gloves that have automated construction subrutines dialed in, allowing for faster construction while worn." icon = 'icons/obj/clothing/clockwork_garb.dmi' icon_state = "clockwork_gauntlets" - siemens_coefficient = 0 //WS Station eddit "Tinkers Gloves Insuls" - permeability_coefficient = 0.05 //WS Station eddit "Tinkers Gloves Insuls" - //siemens_coefficient = 0.8 WS Station eddit "Tinkers Gloves Insuls" - //permeability_coefficient = 0.3 WS Station eddit "Tinkers Gloves Insuls" + siemens_coefficient = 0 + permeability_coefficient = 0.05 carrytrait = TRAIT_QUICK_BUILD custom_materials = list(/datum/material/iron=2000, /datum/material/silver=1500, /datum/material/gold = 1000) @@ -276,7 +274,8 @@ /obj/item/clothing/gloves/color/light_brown = 1, /obj/item/clothing/gloves/color/brown = 1, /obj/item/clothing/gloves/color/white = 1, - /obj/item/clothing/gloves/color/rainbow = 1) + /obj/item/clothing/gloves/color/rainbow = 1, + ) /obj/item/clothing/gloves/maid name = "maid arm covers" diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index 314af8aaf44a..9d8db3c035d8 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -38,7 +38,7 @@ max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT resistance_flags = NONE armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 50) - supports_variations = KEPORI_VARIATION + //supports_variations = KEPORI_VARIATION /obj/item/clothing/gloves/combat/maid name = "combat maid sleeves" diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index dee6b0d0c9ee..6648f6341196 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -500,6 +500,7 @@ icon_state = "inteq_swat" item_state = "inteq_swat" flags_inv = HIDEHAIR + supports_variations = KEPORI_VARIATION content_overlays = TRUE /obj/item/clothing/head/helmet/inteq @@ -508,6 +509,7 @@ icon_state = "inteq_helmet" icon_state = "inteq_helmet" can_flashlight = TRUE + supports_variations = KEPORI_VARIATION content_overlays = TRUE /obj/item/clothing/head/solgov diff --git a/code/modules/clothing/outfits/standard.dm b/code/modules/clothing/outfits/standard.dm index d039d06dae35..100cc7ff0f52 100644 --- a/code/modules/clothing/outfits/standard.dm +++ b/code/modules/clothing/outfits/standard.dm @@ -226,8 +226,6 @@ backpack_contents = list( /obj/item/melee/transforming/energy/axe=1,\ /obj/item/storage/part_replacer/bluespace/tier4=1,\ - /obj/item/gun/magic/wand/resurrection/debug=1,\ - /obj/item/gun/magic/wand/death/debug=1,\ /obj/item/debug/human_spawner=1,\ /obj/item/debug/omnitool=1 ) diff --git a/code/modules/clothing/spacesuits/_spacesuits.dm b/code/modules/clothing/spacesuits/_spacesuits.dm index bd1817e1bf45..cb98f607089c 100644 --- a/code/modules/clothing/spacesuits/_spacesuits.dm +++ b/code/modules/clothing/spacesuits/_spacesuits.dm @@ -40,7 +40,7 @@ slowdown = 1 armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 50, "fire" = 80, "acid" = 70) flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - cold_protection = CHEST | GROIN | LEGS | FEET | ARMS | HANDS + cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 889bcc0420f2..47ce052d5bec 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -34,7 +34,7 @@ desc = "A Type I armored vest that provides decent protection against most types of damage." icon_state = "armor_alt" item_state = "armoralt" - supports_variations = KEPORI_VARIATION + //supports_variations = KEPORI_VARIATION /obj/item/clothing/suit/armor/vest/marine name = "light tactical armor vest" @@ -326,7 +326,7 @@ desc = "A luxurious brown coat made from a crossweave of kevlar and ballistic fibre, the collar and wrist trims are made from genuine wolf fur. as protective as it is stylish." icon_state = "armor_inteq_battlecoat" item_state = "inteq_battlecoat" - supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION | KEPORI_VARIATION + supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION /obj/item/clothing/suit/armor/hos/inteq/honorable //Basically CC higherup clothing for inteq name = "honorable vanguard battlecoat" @@ -334,7 +334,7 @@ icon_state = "armor_inteq_honorable_battlecoat" item_state = "inteq_honorable_battlecoat" armor = list("melee" = 40, "bullet" = 50, "laser" = 50, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 90) - supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | KEPORI_VARIATION + supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON /obj/item/clothing/suit/armor/inteq/corpsman name = "inteq corpsman vest" diff --git a/code/modules/clothing/suits/wintercoats.dm b/code/modules/clothing/suits/wintercoats.dm index 588a8f1600de..9b141148e5a2 100644 --- a/code/modules/clothing/suits/wintercoats.dm +++ b/code/modules/clothing/suits/wintercoats.dm @@ -1,5 +1,7 @@ // WINTER COATS +//Someone please make the allowed lists globals or something + /obj/item/clothing/suit/hooded/wintercoat name = "winter coat" desc = "A heavy jacket made from 'synthetic' animal furs." @@ -10,14 +12,14 @@ body_parts_covered = CHEST|GROIN|ARMS cold_protection = CHEST|GROIN|ARMS min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0) - allowed = list( /obj/item/flashlight, - /obj/item/tank/internals/emergency_oxygen, - /obj/item/tank/internals/plasmaman, - /obj/item/toy, - /obj/item/storage/fancy/cigarettes, - /obj/item/lighter, - ) + allowed = list( + /obj/item/flashlight, + /obj/item/tank/internals/emergency_oxygen, + /obj/item/tank/internals/plasmaman, + /obj/item/toy, + /obj/item/storage/fancy/cigarettes, + /obj/item/lighter, + ) /obj/item/clothing/head/hooded/winterhood name = "winter hood" @@ -29,13 +31,11 @@ cold_protection = HEAD min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT flags_inv = HIDEHAIR|HIDEEARS - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0) /obj/item/clothing/suit/hooded/wintercoat/captain name = "captain's winter coat" icon_state = "coatcaptain" item_state = "coatcaptain" - armor = list("melee" = 25, "bullet" = 30, "laser" = 30, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 50) hoodtype = /obj/item/clothing/head/hooded/winterhood/captain /obj/item/clothing/suit/hooded/wintercoat/captain/Initialize() @@ -44,13 +44,11 @@ /obj/item/clothing/head/hooded/winterhood/captain icon_state = "hood_captain" - armor = list("melee" = 25, "bullet" = 30, "laser" = 30, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 50) /obj/item/clothing/suit/hooded/wintercoat/security name = "security winter coat" icon_state = "coatsecurity" item_state = "coatsecurity" - armor = list("melee" = 25, "bullet" = 15, "laser" = 30, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 45) hoodtype = /obj/item/clothing/head/hooded/winterhood/security /obj/item/clothing/suit/hooded/wintercoat/security/Initialize() @@ -59,19 +57,37 @@ /obj/item/clothing/head/hooded/winterhood/security icon_state = "hood_security" - armor = list("melee" = 25, "bullet" = 15, "laser" = 30, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 45) /obj/item/clothing/suit/hooded/wintercoat/medical name = "medical winter coat" icon_state = "coatmedical" item_state = "coatmedical" - allowed = list(/obj/item/analyzer, /obj/item/sensor_device, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 50, "rad" = 0, "fire" = 0, "acid" = 45) hoodtype = /obj/item/clothing/head/hooded/winterhood/medical + allowed = list( + /obj/item/analyzer, + /obj/item/sensor_device, + /obj/item/stack/medical, + /obj/item/dnainjector, + /obj/item/reagent_containers/dropper, + /obj/item/reagent_containers/syringe, + /obj/item/reagent_containers/hypospray, + /obj/item/healthanalyzer, + /obj/item/flashlight/pen, + /obj/item/reagent_containers/glass/bottle, + /obj/item/reagent_containers/glass/beaker, + /obj/item/reagent_containers/pill, + /obj/item/storage/pill_bottle, + /obj/item/paper, + /obj/item/melee/classic_baton/telescopic, + /obj/item/toy, + /obj/item/storage/fancy/cigarettes, + /obj/item/lighter, + /obj/item/tank/internals/emergency_oxygen, + /obj/item/tank/internals/plasmaman, + ) /obj/item/clothing/head/hooded/winterhood/medical icon_state = "hood_medical" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 50, "rad" = 0, "fire" = 0, "acid" = 45) /obj/item/clothing/suit/hooded/wintercoat/medical/paramedic name = "paramedic winter coat" @@ -86,25 +102,52 @@ name = "science winter coat" icon_state = "coatscience" item_state = "coatscience" - allowed = list(/obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) hoodtype = /obj/item/clothing/head/hooded/winterhood/science + allowed = list( + /obj/item/analyzer, + /obj/item/stack/medical, + /obj/item/dnainjector, + /obj/item/reagent_containers/dropper, + /obj/item/reagent_containers/syringe, + /obj/item/reagent_containers/hypospray, + /obj/item/healthanalyzer, + /obj/item/flashlight/pen, + /obj/item/reagent_containers/glass/bottle, + /obj/item/reagent_containers/glass/beaker, + /obj/item/reagent_containers/pill, + /obj/item/storage/pill_bottle, + /obj/item/paper, + /obj/item/melee/classic_baton/telescopic, + /obj/item/toy, + /obj/item/storage/fancy/cigarettes, + /obj/item/lighter, + /obj/item/tank/internals/emergency_oxygen, + /obj/item/tank/internals/plasmaman, + ) /obj/item/clothing/head/hooded/winterhood/science icon_state = "hood_science" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) /obj/item/clothing/suit/hooded/wintercoat/engineering name = "engineering winter coat" icon_state = "coatengineer" item_state = "coatengineer" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 20, "fire" = 30, "acid" = 45) - allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/t_scanner, /obj/item/construction/rcd, /obj/item/pipe_dispenser, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter) hoodtype = /obj/item/clothing/head/hooded/winterhood/engineering + allowed = list( + /obj/item/flashlight, + /obj/item/tank/internals/emergency_oxygen, + /obj/item/tank/internals/plasmaman, + /obj/item/t_scanner, + /obj/item/construction/rcd, + /obj/item/pipe_dispenser, + /obj/item/toy, + /obj/item/storage/fancy/cigarettes, + /obj/item/lighter, + ) + /obj/item/clothing/head/hooded/winterhood/engineering icon_state = "hood_engineer" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 20, "fire" = 30, "acid" = 45) /obj/item/clothing/suit/hooded/wintercoat/engineering/atmos name = "atmospherics winter coat" @@ -119,8 +162,22 @@ name = "hydroponics winter coat" icon_state = "coathydro" item_state = "coathydro" - allowed = list(/obj/item/reagent_containers/spray/plantbgone, /obj/item/plant_analyzer, /obj/item/seeds, /obj/item/reagent_containers/glass/bottle, /obj/item/cultivator, /obj/item/reagent_containers/spray/pestspray, /obj/item/hatchet, /obj/item/storage/bag/plants, /obj/item/toy, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/storage/fancy/cigarettes, /obj/item/lighter) hoodtype = /obj/item/clothing/head/hooded/winterhood/hydro + allowed = list( + /obj/item/reagent_containers/spray/plantbgone, + /obj/item/plant_analyzer, + /obj/item/seeds, + /obj/item/reagent_containers/glass/bottle, + /obj/item/cultivator, + /obj/item/reagent_containers/spray/pestspray, + /obj/item/hatchet, + /obj/item/storage/bag/plants, + /obj/item/toy, + /obj/item/tank/internals/emergency_oxygen, + /obj/item/tank/internals/plasmaman, + /obj/item/storage/fancy/cigarettes, + /obj/item/lighter, + ) /obj/item/clothing/head/hooded/winterhood/hydro icon_state = "hood_hydro" @@ -138,13 +195,18 @@ name = "mining winter coat" icon_state = "coatminer" item_state = "coatminer" - allowed = list(/obj/item/pickaxe, /obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter) - armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) hoodtype = /obj/item/clothing/head/hooded/winterhood/miner + allowed = list( + /obj/item/pickaxe, + /obj/item/flashlight, + /obj/item/tank/internals/emergency_oxygen, + /obj/item/toy, + /obj/item/storage/fancy/cigarettes, + /obj/item/lighter, + ) /obj/item/clothing/head/hooded/winterhood/miner icon_state = "hood_miner" - armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) // Inteq @@ -154,18 +216,17 @@ icon_state = "coatinteq" item_state = "coatinteq" hoodtype = /obj/item/clothing/head/hooded/winterhood/security/inteq - supports_variations = KEPORI_VARIATION + //supports_variations = KEPORI_VARIATION /obj/item/clothing/head/hooded/winterhood/security/inteq icon_state = "hood_inteq" - supports_variations = KEPORI_VARIATION + //supports_variations = KEPORI_VARIATION /obj/item/clothing/suit/hooded/wintercoat/security/inteq/alt name = "inteq hooded coat" desc = "A hooded coat with a fur trim around the hood, comfy! It has a small 'IRMG' embroidered onto the shoulder." icon_state = "coatinteq_alt" item_state = "coatinteq_alt" - armor = list("melee" = 25, "bullet" = 15, "laser" = 30, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 45) hoodtype = /obj/item/clothing/head/hooded/winterhood/security/inteq/alt /obj/item/clothing/head/hooded/winterhood/security/inteq/alt @@ -173,15 +234,14 @@ desc = "A comfortable looking brown hood." icon_state = "hood_inteq_alt" item_state = "hood_inteq_alt" - armor = list("melee" = 25, "bullet" = 15, "laser" = 30, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 45) // CentCom + /obj/item/clothing/suit/hooded/wintercoat/centcom name = "centcom winter coat" desc = "A luxurious winter coat woven in the bright green and gold colours of Central Command. It has a small pin in the shape of the Nanotrasen logo for a zipper." icon_state = "coatcentcom" item_state = "coatcentcom" - armor = list("melee" = 35, "bullet" = 40, "laser" = 40, "energy" = 50, "bomb" = 35, "bio" = 10, "rad" = 10, "fire" = 10, "acid" = 60) hoodtype = /obj/item/clothing/head/hooded/winterhood/centcom /obj/item/clothing/suit/hooded/wintercoat/centcom/Initialize(mapload) @@ -190,7 +250,6 @@ /obj/item/clothing/head/hooded/winterhood/centcom icon_state = "hood_centcom" - armor = list("melee" = 35, "bullet" = 40, "laser" = 40, "energy" = 50, "bomb" = 35, "bio" = 10, "rad" = 10, "fire" = 10, "acid" = 60) // SolGov @@ -199,9 +258,7 @@ desc = "An environment-resistant wintercoat in the colors of the Solarian Confederation." icon_state = "coatsolgov" item_state = "coatsolgov" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 20, "fire" = 30, "acid" = 45) hoodtype = /obj/item/clothing/head/hooded/winterhood/solgov /obj/item/clothing/head/hooded/winterhood/solgov icon_state = "hood_solgov" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 20, "fire" = 30, "acid" = 45) diff --git a/code/modules/clothing/under/jobs/cargo.dm b/code/modules/clothing/under/jobs/cargo.dm index 2341da5567a9..0af578bfd452 100644 --- a/code/modules/clothing/under/jobs/cargo.dm +++ b/code/modules/clothing/under/jobs/cargo.dm @@ -1,7 +1,7 @@ /obj/item/clothing/under/rank/cargo icon = 'icons/obj/clothing/under/cargo.dmi' mob_overlay_icon = 'icons/mob/clothing/under/cargo.dmi' - supports_variations = KEPORI_VARIATION + //supports_variations = KEPORI_VARIATION /obj/item/clothing/under/rank/cargo/qm name = "quartermaster's jumpsuit" @@ -16,7 +16,7 @@ item_state = "lb_suit" body_parts_covered = CHEST|GROIN|ARMS can_adjust = FALSE - supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION | KEPORI_VARIATION + supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION /obj/item/clothing/under/rank/cargo/tech name = "cargo technician's jumpsuit" @@ -24,7 +24,7 @@ icon_state = "cargotech" item_state = "lb_suit" body_parts_covered = CHEST|GROIN|ARMS - supports_variations = DIGITIGRADE_VARIATION | VOX_VARIATION | KEPORI_VARIATION + supports_variations = DIGITIGRADE_VARIATION | VOX_VARIATION alt_covers_chest = TRUE /obj/item/clothing/under/rank/cargo/tech/skirt @@ -33,7 +33,7 @@ icon_state = "cargo_skirt" item_state = "lb_suit" body_parts_covered = CHEST|GROIN|ARMS - supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION | KEPORI_VARIATION + supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION can_adjust = FALSE /obj/item/clothing/under/rank/cargo/miner @@ -43,7 +43,7 @@ item_state = "miner" armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 0) resistance_flags = NONE - supports_variations = KEPORI_VARIATION + //supports_variations = KEPORI_VARIATION /obj/item/clothing/under/rank/cargo/miner/lavaland desc = "A light uniform for operating in hazardous environments, manufactured en-masse by EXOCOM for the profitable frontier prospector market. Adventurous khaki jeans included." @@ -51,14 +51,14 @@ icon_state = "explorer" item_state = "explorer" can_adjust = TRUE - supports_variations = DIGITIGRADE_VARIATION | VOX_VARIATION | KEPORI_VARIATION + supports_variations = DIGITIGRADE_VARIATION | VOX_VARIATION /obj/item/clothing/under/rank/cargo/miner/hazard desc = "A thick jumpsuit with reflective stripes for hazardous, low-visibility environments. It's coated in a thick layer of asteroid dust." name = "asteroid miner's jumpsuit" icon_state = "hazard" item_state = "hazard" - supports_variations = DIGITIGRADE_VARIATION | KEPORI_VARIATION + supports_variations = DIGITIGRADE_VARIATION /obj/item/clothing/under/rank/cargo/miner/lavaland/old icon_state = "explorerold" diff --git a/code/modules/clothing/under/jobs/medical.dm b/code/modules/clothing/under/jobs/medical.dm index bf462c7fda4d..183e957d2338 100644 --- a/code/modules/clothing/under/jobs/medical.dm +++ b/code/modules/clothing/under/jobs/medical.dm @@ -174,7 +174,7 @@ desc = "A light white gown that allows easy access to any patient who wears this." icon_state = "gownwhite" item_state = "gownwhite" - supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION | KEPORI_VARIATION + supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION can_adjust = FALSE /obj/item/clothing/under/rank/medical/gown/green diff --git a/code/modules/clothing/under/skirt_dress.dm b/code/modules/clothing/under/skirt_dress.dm index 1dabceb6db24..f74748f71fbb 100644 --- a/code/modules/clothing/under/skirt_dress.dm +++ b/code/modules/clothing/under/skirt_dress.dm @@ -93,4 +93,4 @@ desc = "A pretty red dress with big pink ribbons attached. Intended to be worn by Kepori cosplayers, but also fits other species." icon_state = "rilena_dress" item_state = "rilena_dress" - supports_variations = KEPORI_VARIATION + //supports_variations = KEPORI_VARIATION diff --git a/code/modules/clothing/under/syndicate.dm b/code/modules/clothing/under/syndicate.dm index 9eb76ee6bf5e..85c9996489e2 100644 --- a/code/modules/clothing/under/syndicate.dm +++ b/code/modules/clothing/under/syndicate.dm @@ -7,7 +7,7 @@ alt_covers_chest = TRUE icon = 'icons/obj/clothing/under/syndicate.dmi' mob_overlay_icon = 'icons/mob/clothing/under/syndicate.dmi' - supports_variations = DIGITIGRADE_VARIATION | VOX_VARIATION | KEPORI_VARIATION + supports_variations = DIGITIGRADE_VARIATION | VOX_VARIATION /obj/item/clothing/under/syndicate/skirt name = "tactical skirtleneck" @@ -17,7 +17,7 @@ armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40) alt_covers_chest = TRUE can_adjust = FALSE - supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION | KEPORI_VARIATION + supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION /obj/item/clothing/under/syndicate/bloodred name = "blood-red sneaksuit" @@ -27,7 +27,7 @@ armor = list("melee" = 10, "bullet" = 10, "laser" = 10,"energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 10, "fire" = 50, "acid" = 40) resistance_flags = FIRE_PROOF | ACID_PROOF can_adjust = FALSE - supports_variations = DIGITIGRADE_VARIATION | KEPORI_VARIATION + supports_variations = DIGITIGRADE_VARIATION /obj/item/clothing/under/syndicate/bloodred/sleepytime name = "blood-red pajamas" @@ -35,7 +35,7 @@ icon_state = "bloodred_pajamas" item_state = "bl_suit" armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40) - supports_variations = DIGITIGRADE_VARIATION | KEPORI_VARIATION + supports_variations = DIGITIGRADE_VARIATION /obj/item/clothing/under/syndicate/tacticool name = "tacticool turtleneck" @@ -43,7 +43,7 @@ icon_state = "tactifool" item_state = "bl_suit" armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40) - supports_variations = DIGITIGRADE_VARIATION | VOX_VARIATION | KEPORI_VARIATION + supports_variations = DIGITIGRADE_VARIATION | VOX_VARIATION /obj/item/clothing/under/syndicate/tacticool/skirt name = "tacticool skirtleneck" @@ -52,7 +52,7 @@ item_state = "bl_suit" armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40) can_adjust = FALSE - supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | KEPORI_VARIATION + supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON /obj/item/clothing/under/syndicate/sniper name = "Tactical turtleneck suit" @@ -75,7 +75,7 @@ desc = "With a suit lined with this many pockets, you are ready to operate." icon_state = "syndicate_combat" can_adjust = FALSE - supports_variations = DIGITIGRADE_VARIATION | KEPORI_VARIATION + supports_variations = DIGITIGRADE_VARIATION /obj/item/clothing/under/syndicate/rus_army name = "advanced military tracksuit" @@ -100,7 +100,7 @@ can_adjust = FALSE armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40) alt_covers_chest = TRUE - supports_variations = DIGITIGRADE_VARIATION | KEPORI_VARIATION + supports_variations = DIGITIGRADE_VARIATION /obj/item/clothing/under/syndicate/cybersun name = "cybersun jumpsuit" @@ -115,7 +115,7 @@ icon_state = "cybersun" armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 100) alt_covers_chest = TRUE - supports_variations = DIGITIGRADE_VARIATION | KEPORI_VARIATION + supports_variations = DIGITIGRADE_VARIATION /obj/item/clothing/under/syndicate/cybersun/officer name = "cybersun officer's suit" @@ -130,7 +130,7 @@ icon_state = "cybersun_med" permeability_coefficient = 0.5 armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0) - supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION | KEPORI_VARIATION + supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION /obj/item/clothing/under/syndicate/medic/skirt name = "Cybersun medical jumpskirt" @@ -138,7 +138,7 @@ icon_state = "cybersun_med_skirt" body_parts_covered = CHEST|GROIN|ARMS can_adjust = FALSE - supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION | KEPORI_VARIATION + supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION /obj/item/clothing/under/syndicate/donk name = "Donk! Co. employee uniform" @@ -148,14 +148,14 @@ armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40) body_parts_covered = CHEST|GROIN|ARMS alt_covers_chest = TRUE - supports_variations = DIGITIGRADE_VARIATION | KEPORI_VARIATION + supports_variations = DIGITIGRADE_VARIATION /obj/item/clothing/under/syndicate/donk/qm name = "Donk! Co. manager uniform" desc = "The standard uniform of Donk Co. managers. Direct all complaints here." icon_state = "donk_qm" body_parts_covered = CHEST|GROIN|LEGS|ARMS - supports_variations = DIGITIGRADE_VARIATION | KEPORI_VARIATION + supports_variations = DIGITIGRADE_VARIATION /obj/item/clothing/suit/hazardvest/donk name = "Donk! Co. employee vest" diff --git a/code/modules/events/wizard/magicarp.dm b/code/modules/events/wizard/magicarp.dm deleted file mode 100644 index 68a38f0479e1..000000000000 --- a/code/modules/events/wizard/magicarp.dm +++ /dev/null @@ -1,75 +0,0 @@ -/datum/round_event_control/wizard/magicarp //these fish is loaded - name = "Magicarp" - weight = 1 - typepath = /datum/round_event/wizard/magicarp - max_occurrences = 1 - earliest_start = 0 MINUTES - -/datum/round_event/wizard/magicarp - announceWhen = 3 - startWhen = 50 - -/datum/round_event/wizard/magicarp/setup() - startWhen = rand(40, 60) - -/datum/round_event/wizard/magicarp/announce(fake) - priority_announce("Unknown magical entities have been detected near [station_name()], please stand-by.", "Lifesign Alert") - -/datum/round_event/wizard/magicarp/start() - for(var/obj/effect/landmark/carpspawn/C in GLOB.landmarks_list) - if(prob(5)) - new /mob/living/simple_animal/hostile/carp/ranged/chaos(C.loc) - else - new /mob/living/simple_animal/hostile/carp/ranged(C.loc) - -/mob/living/simple_animal/hostile/carp/ranged - name = "magicarp" - desc = "50% magic, 50% carp, 100% horrible." - icon_state = "magicarp" - icon_living = "magicarp" - icon_dead = "magicarp_dead" - icon_gib = "magicarp_gib" - ranged = 1 - retreat_distance = 2 - minimum_distance = 0 //Between shots they can and will close in to nash - projectiletype = /obj/projectile/magic - projectilesound = 'sound/weapons/emitter.ogg' - maxHealth = 50 - health = 50 - gold_core_spawnable = NO_SPAWN - random_color = FALSE - food_type = list() - tame_chance = 0 - bonus_tame_chance = 0 - var/allowed_projectile_types = list(/obj/projectile/magic/change, /obj/projectile/magic/animate, /obj/projectile/magic/resurrection, - /obj/projectile/magic/death, /obj/projectile/magic/teleport, /obj/projectile/magic/door, /obj/projectile/magic/aoe/fireball, - /obj/projectile/magic/spellblade, /obj/projectile/magic/arcane_barrage) - -/mob/living/simple_animal/hostile/carp/ranged/Initialize() - projectiletype = pick(allowed_projectile_types) - . = ..() - -/mob/living/simple_animal/hostile/carp/ranged/chaos - name = "chaos magicarp" - desc = "50% carp, 100% magic, 150% horrible." - color = "#00FFFF" - maxHealth = 75 - health = 75 - gold_core_spawnable = NO_SPAWN - -/mob/living/simple_animal/hostile/carp/ranged/chaos/Shoot() - projectiletype = pick(allowed_projectile_types) - ..() - -/mob/living/simple_animal/hostile/carp/ranged/xenobiology // these are for the xenobio gold slime pool - gold_core_spawnable = HOSTILE_SPAWN - allowed_projectile_types = list(/obj/projectile/magic/animate, /obj/projectile/magic/teleport, - /obj/projectile/magic/door, /obj/projectile/magic/aoe/fireball, /obj/projectile/magic/spellblade, /obj/projectile/magic/arcane_barrage, - /obj/projectile/magic/spell/magic_missile, /obj/projectile/magic/aoe/lightning, /obj/projectile/magic/locker) //thanks Lett1 /finally, we can synthesize the lockerfish - -/mob/living/simple_animal/hostile/carp/ranged/chaos/xenobiology - gold_core_spawnable = HOSTILE_SPAWN - allowed_projectile_types = list(/obj/projectile/magic/change, /obj/projectile/magic/animate, /obj/projectile/magic/resurrection, - /obj/projectile/magic/death, /obj/projectile/magic/teleport, /obj/projectile/magic/door, /obj/projectile/magic/aoe/fireball, - /obj/projectile/magic/spellblade, /obj/projectile/magic/arcane_barrage, /obj/projectile/magic/locker, /obj/projectile/magic/nothing, - /obj/projectile/magic/aoe/lightning, /obj/projectile/magic/necropotence, /obj/projectile/magic/fortify, /obj/projectile/magic/spell/magic_missile)//now THIS is chaos diff --git a/code/modules/mining/equipment/survival_pod.dm b/code/modules/mining/equipment/survival_pod.dm index 817970a00602..7ba30d327444 100644 --- a/code/modules/mining/equipment/survival_pod.dm +++ b/code/modules/mining/equipment/survival_pod.dm @@ -315,10 +315,6 @@ /obj/item/hierophant_club, /obj/item/gun/energy/minigun, /obj/item/gun/ballistic/automatic/hmg/l6_saw, - /obj/item/gun/magic/staff/chaos, - /obj/item/gun/magic/staff/spellblade, - /obj/item/gun/magic/wand/death, - /obj/item/gun/magic/wand/fireball, /obj/item/stack/telecrystal/twenty, /obj/item/nuke_core, /obj/item/phylactery, diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 36d556bc5f42..7b80559d2691 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -66,8 +66,6 @@ new /obj/item/wisp_lantern(src) if(20) new /obj/item/immortality_talisman(src) - if(21) - new /obj/item/gun/magic/hook(src) if(22) new /obj/item/voodoo(src) if(23) @@ -143,8 +141,6 @@ new /obj/item/wisp_lantern(src) if(20) new /obj/item/immortality_talisman(src) - if(21) - new /obj/item/gun/magic/hook(src) if(22) new /obj/item/voodoo(src) if(23) @@ -481,91 +477,6 @@ /obj/effect/warp_cube/ex_act(severity, target) return -//Meat Hook -/obj/item/gun/magic/hook - name = "meat hook" - desc = "A light hooked blade, attached by the handle to a long chain. Can be used to make quick strikes in hand, or thrown at enemies, magically dragging them to the user. Get over here!" - ammo_type = /obj/item/ammo_casing/magic/hook - icon_state = "hook" - item_state = "hook" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - fire_sound = 'sound/weapons/batonextend.ogg' - max_charges = 1 - item_flags = NEEDS_PERMIT - force = 15 - sharpness = IS_SHARP - block_chance = 5//A pittance, but might be worth something in a scuffle - hitsound = 'sound/weapons/chainhit.ogg' - -/obj/item/gun/magic/hook/melee_attack_chain(mob/user, atom/target, params) - ..() - user.changeNext_move(CLICK_CD_MELEE * 0.5)//quick to swing. 15 force can be quite something with this attack frequency. - -/obj/item/gun/magic/hook/Initialize() - . = ..() - AddComponent(/datum/component/butchering, 15, 130, 0, hitsound) - -/obj/item/ammo_casing/magic/hook - name = "hook" - desc = "A hook." - projectile_type = /obj/projectile/hook - caliber = "hook" - icon_state = "arrow" - -/obj/projectile/hook - name = "hook" - icon_state = "hook" - icon = 'icons/obj/lavaland/artefacts.dmi' - pass_flags = PASSTABLE - damage = 20 - stamina = 20 - armour_penetration = 60 - damage_type = BRUTE - hitsound = 'sound/effects/splat.ogg' - var/chain - var/knockdown_time = (0.5 SECONDS) - -/obj/projectile/hook/fire(setAngle) - if(firer) - chain = firer.Beam(src, icon_state = "chain", emissive = FALSE) - ..() - //TODO: root the firer until the chain returns - -/obj/projectile/hook/on_hit(atom/target) - . = ..() - if(ismovable(target)) - var/atom/movable/A = target - if(A.anchored) - return - A.visible_message("[A] is snagged by [firer]'s hook!") - new /datum/forced_movement(A, get_turf(firer), 5, TRUE) - if (isliving(target)) - var/mob/living/fresh_meat = target - fresh_meat.Knockdown(knockdown_time) - return - //TODO: keep the chain beamed to A - //TODO: needs a callback to delete the chain - -/obj/projectile/hook/Destroy() - qdel(chain) - return ..() - -//just a nerfed version of the real thing for the bounty hunters. -/obj/item/gun/magic/hook/bounty - name = "hook" - ammo_type = /obj/item/ammo_casing/magic/hook/bounty - -/obj/item/gun/magic/hook/bounty/shoot_with_empty_chamber(mob/living/user) - to_chat(user, "The [src] isn't ready to fire yet!") - -/obj/item/ammo_casing/magic/hook/bounty - projectile_type = /obj/projectile/hook/bounty - -/obj/projectile/hook/bounty - damage = 0 - stamina = 40 - //Immortality Talisman: Now with state-of-the-art panic button technology /obj/item/immortality_talisman name = "\improper Immortality Talisman" @@ -957,6 +868,7 @@ return COMPONENT_NO_ATTACK_OBJ //A version of the Cave Story refrence that a deranged scientist got their hands on. Better? Not really. Different? Definitely. +//TODO: replace with a proper polar star and spur, not to mention a proper sprite /obj/item/gun/energy/spur name = "Slowpoke" desc = "The work of a truly genius gunsmith, altered and \"improved\" by a truly deranged Nanotrasen scientist, using components from a kinetic accelerator and beam rifle. Draw, partner!" @@ -965,11 +877,10 @@ righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi' icon_state = "spur" item_state = "spur" - fire_delay = 0.5 //BRATATAT! This is a cowboy's six-shooter after all. selfcharge = 1 charge_delay = 1 slot_flags = ITEM_SLOT_BELT - fire_delay = 1 + fire_delay = 0.1 SECONDS recoil = 1 cell_type = /obj/item/stock_parts/cell/gun ammo_type = list(/obj/item/ammo_casing/energy/spur) @@ -1303,7 +1214,6 @@ new /obj/item/lava_staff(src) if(3) new /obj/item/book/granter/spell/sacredflame(src) - new /obj/item/gun/magic/wand/fireball(src) if(4) new /obj/item/dragons_blood(src) @@ -1519,14 +1429,12 @@ /obj/structure/closet/crate/necropolis/bubblegum/PopulateContents() new /obj/item/clothing/suit/space/hostile_environment(src) new /obj/item/clothing/head/helmet/space/hostile_environment(src) - var/loot = rand(1,3) + var/loot = rand(1,2) switch(loot) if(1) new /obj/item/mayhem(src) if(2) new /obj/item/blood_contract(src) - if(3) - new /obj/item/gun/magic/staff/spellblade(src) /obj/item/mayhem name = "mayhem in a bottle" diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index 25722dd28e5f..8fbf9c32a38e 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -335,8 +335,6 @@ if(GLOB.summon_guns_triggered) give_guns(humanc) - if(GLOB.summon_magic_triggered) - give_magic(humanc) if(GLOB.curse_of_madness_triggered) give_madness(humanc, GLOB.curse_of_madness_triggered) if(CONFIG_GET(flag/roundstart_traits)) diff --git a/code/modules/mob/dead/new_player/sprite_accessories/kepori.dm b/code/modules/mob/dead/new_player/sprite_accessories/kepori.dm index 4ed949c63ef8..9fd4579e46f8 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/kepori.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/kepori.dm @@ -1,10 +1,9 @@ -//Kepori mutant parts - -//Start head feathers +// "Hair" feathers /datum/sprite_accessory/kepori_feathers color_src = HAIR - icon = 'icons/mob/kepori_parts.dmi' + body_zone = BODY_ZONE_HEAD + icon = 'icons/mob/species/kepori/kepori_parts.dmi' /datum/sprite_accessory/kepori_feathers/none name = "None" @@ -37,10 +36,6 @@ name = "Spikey" icon_state = "spikey" -/datum/sprite_accessory/kepori_feathers/soap - name = "Soap" - icon_state = "soap" - /datum/sprite_accessory/kepori_feathers/crowned name = "Crowned" icon_state = "crowned" @@ -57,40 +52,60 @@ name = "Bun" icon_state = "bun" -//Start body feathers +// Head/Face feathers + +/datum/sprite_accessory/kepori_head_feathers + color_src = MUTCOLORS_SECONDARY + body_zone = BODY_ZONE_HEAD + icon = 'icons/mob/species/kepori/kepori_parts.dmi' + +/datum/sprite_accessory/kepori_head_feathers/none + name = "None" + +/datum/sprite_accessory/kepori_head_feathers/full + name = "Full" + icon_state = "full" + +/datum/sprite_accessory/kepori_head_feathers/half + name = "Half" + icon_state = "half" + +// Body feathers /datum/sprite_accessory/kepori_body_feathers color_src = MUTCOLORS_SECONDARY - icon = 'icons/mob/kepori_parts.dmi' + body_zone = BODY_ZONE_CHEST + icon = 'icons/mob/species/kepori/kepori_parts.dmi' /datum/sprite_accessory/kepori_body_feathers/none name = "None" -/datum/sprite_accessory/kepori_body_feathers/aftik - name = "Aftik" - icon_state = "aftik" - /datum/sprite_accessory/kepori_body_feathers/belly name = "Belly" icon_state = "belly" -/datum/sprite_accessory/kepori_body_feathers/shirt - name = "Shirt" - icon_state = "shirt" +/datum/sprite_accessory/kepori_body_feathers/belly_wings + name = "Belly + Wings" + icon_state = "bwings" /datum/sprite_accessory/kepori_body_feathers/soap name = "Soap" icon_state = "soap" +/datum/sprite_accessory/kepori_body_feathers/soap_wings + name = "Soap + Wings" + icon_state = "swings" + /datum/sprite_accessory/kepori_body_feathers/wings name = "Wings" icon_state = "wings" -//Start tail feathers +// Tail feathers /datum/sprite_accessory/kepori_tail_feathers color_src = MUTCOLORS_SECONDARY - icon = 'icons/mob/kepori_parts.dmi' + body_zone = BODY_ZONE_CHEST + icon = 'icons/mob/species/kepori/kepori_parts.dmi' /datum/sprite_accessory/kepori_tail_feathers/none name = "None" diff --git a/code/modules/mob/living/carbon/human/consistent_human.dm b/code/modules/mob/living/carbon/human/consistent_human.dm index e63adffeee48..86e6e08c4367 100644 --- a/code/modules/mob/living/carbon/human/consistent_human.dm +++ b/code/modules/mob/living/carbon/human/consistent_human.dm @@ -31,6 +31,7 @@ dna.features["spider_spinneret"] = GLOB.spider_spinneret_list[hex2num(copytext(seed, 11, 12)) % length(GLOB.spider_spinneret_list) + 1] dna.features["kepori_feathers"] = GLOB.kepori_feathers_list[hex2num(copytext(seed, 12, 13)) % length(GLOB.kepori_feathers_list) + 1] dna.features["kepori_body_feathers"] = GLOB.kepori_body_feathers_list[hex2num(copytext(seed, 13, 14)) % length(GLOB.kepori_body_feathers_list) + 1] + dna.features["kepori_head_feathers"] = GLOB.kepori_head_feathers_list[hex2num(copytext(seed, 13, 14)) % length(GLOB.kepori_head_feathers_list) + 1] dna.features["vox_head_quills"] = GLOB.vox_head_quills_list[hex2num(copytext(seed, 14, 15)) % length(GLOB.vox_head_quills_list) + 1] dna.features["vox_neck_quills"] = GLOB.vox_neck_quills_list[hex2num(copytext(seed, 15, 16)) % length(GLOB.vox_neck_quills_list) + 1] dna.features["elzu_horns"] = GLOB.elzu_horns_list[hex2num(copytext(seed, 16, 17)) % length(GLOB.elzu_horns_list) + 1] diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 166d2d4e83a0..e848bc01d251 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -688,16 +688,27 @@ GLOBAL_LIST_EMPTY(roundstart_races) var/obj/item/organ/eyes/eyes = H.getorganslot(ORGAN_SLOT_EYES) var/mutable_appearance/eye_overlay var/mutable_appearance/sclera_overlay + if(eyes) if(!HAS_TRAIT(H, TRAIT_EYESCLOSED) && !(H.stat == DEAD)) - eye_overlay = mutable_appearance(species_eye_path || 'icons/mob/human_face.dmi', eyes.eye_icon_state, -BODYPARTS_LAYER) - sclera_overlay = mutable_appearance('icons/mob/human_face.dmi', eyes.sclera_icon_state, -BODYPARTS_LAYER) + + if(iskepori(H)) // Kepori need sclera but don't fit the normal silhouette, so this needs changing. Make better later. + eye_overlay = mutable_appearance('icons/mob/species/kepori/kepori_eyes.dmi', eyes.eye_icon_state, -BODYPARTS_LAYER) + sclera_overlay = mutable_appearance('icons/mob/species/kepori/kepori_eyes.dmi', eyes.sclera_icon_state, -BODYPARTS_LAYER) + + else + eye_overlay = mutable_appearance(species_eye_path || 'icons/mob/human_face.dmi', eyes.eye_icon_state, -BODYPARTS_LAYER) + sclera_overlay = mutable_appearance('icons/mob/human_face.dmi', eyes.sclera_icon_state, -BODYPARTS_LAYER) + if((EYECOLOR in species_traits) && eyes) eye_overlay.color = "#" + H.eye_color + if((SCLERA in species_traits) && eyes) sclera_overlay.color = "#" + H.sclera_color standing += sclera_overlay + standing += eye_overlay + if(EMOTE_OVERLAY in species_traits) // blush if (HAS_TRAIT(H, TRAIT_BLUSHING)) // Caused by either the *blush emote or the "drunk" mood event @@ -939,6 +950,8 @@ GLOBAL_LIST_EMPTY(roundstart_races) S = GLOB.spider_spinneret_list[H.dna.features["spider_spinneret"]] if("kepori_body_feathers") S = GLOB.kepori_body_feathers_list[H.dna.features["kepori_body_feathers"]] + if("kepori_head_feathers") + S = GLOB.kepori_head_feathers_list[H.dna.features["kepori_head_feathers"]] if("kepori_tail_feathers") S = GLOB.kepori_tail_feathers_list[H.dna.features["kepori_tail_feathers"]] if("kepori_feathers") diff --git a/code/modules/mob/living/carbon/human/species_types/kepori.dm b/code/modules/mob/living/carbon/human/species_types/kepori.dm index 5693c646cf3f..3278d3d77c1e 100644 --- a/code/modules/mob/living/carbon/human/species_types/kepori.dm +++ b/code/modules/mob/living/carbon/human/species_types/kepori.dm @@ -2,10 +2,10 @@ name = "\improper Kepori" id = SPECIES_KEPORI default_color = "6060FF" - species_traits = list(MUTCOLORS, EYECOLOR, MUTCOLORS_SECONDARY) + species_traits = list(SCLERA, MUTCOLORS, EYECOLOR, MUTCOLORS_SECONDARY) inherent_traits = list(TRAIT_SCOOPABLE) - mutant_bodyparts = list("kepori_body_feathers", "kepori_tail_feathers", "kepori_feathers") - default_features = list("mcolor" = "0F0", "wings" = "None", "kepori_feathers" = "Plain", "kepori_body_feathers" = "Plain", "kepori_tail_feathers" = "Fan", "body_size" = "Normal") + mutant_bodyparts = list("kepori_body_feathers", "kepori_head_feathers", "kepori_tail_feathers", "kepori_feathers") + default_features = list("mcolor" = "0F0", "wings" = "None", "kepori_feathers" = "None", "kepori_head_feathers" = "None", "kepori_body_feathers" = "None", "kepori_tail_feathers" = "None") meat = /obj/item/reagent_containers/food/snacks/meat/slab/chicken disliked_food = FRIED | GROSS | CLOTH liked_food = MEAT | GORE @@ -15,7 +15,7 @@ attack_sound = 'sound/weapons/slash.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' species_clothing_path = 'icons/mob/clothing/species/kepori.dmi' - species_eye_path = 'icons/mob/kepori_parts.dmi' + species_eye_path = 'icons/mob/species/kepori/kepori_eyes.dmi' heatmod = 0.67 coldmod = 1.5 brutemod = 1.5 @@ -57,17 +57,64 @@ species_robotic_l_leg = /obj/item/bodypart/leg/left/robot/surplus/kepori species_robotic_r_leg = /obj/item/bodypart/leg/right/robot/surplus/kepori + robotic_eyes = /obj/item/organ/eyes/robotic/kepori + /datum/species/kepori/New() . = ..() // This is in new because "[HEAD_LAYER]" etc. is NOT a constant compile-time value. For some reason. // Why not just use HEAD_LAYER? Well, because HEAD_LAYER is a number, and if you try to use numbers as indexes, // BYOND will try to make it an ordered list. So, we have to use a string. This is annoying, but it's the only way to do it smoothly. offset_clothing = list( - "[HEAD_LAYER]" = list("[NORTH]" = list("x" = 0, "y" = -4), "[EAST]" = list("x" = 4, "y" = -4), "[SOUTH]" = list("x" = 0, "y" = -4), "[WEST]" = list("x" = -4, "y" = -4)), - "[GLASSES_LAYER]" = list("[NORTH]" = list("x" = 0, "y" = -4), "[EAST]" = list("x" = 4, "y" = -4), "[SOUTH]" = list("x" = 0, "y" = -4), "[WEST]" = list("x" = -4, "y" = -4)), - "[FACEMASK_LAYER]" = list("[NORTH]" = list("x" = 0, "y" = -5), "[EAST]" = list("x" = 4, "y" = -5), "[SOUTH]" = list("x" = 0, "y" = -5), "[WEST]" = list("x" = -4, "y" = -5)), + "[HEAD_LAYER]" = list( + "[NORTH]" = list("x" = 8, "y" = -3), + "[EAST]" = list("x" = 19, "y" = -3), //ISSUE: The head sprites seem to be cut off when given an offset this large, combined with kepori offset + "[SOUTH]" = list("x" = 8, "y" = -3), + "[WEST]" = list("x" = -3, "y" = -3) + ), + "[GLASSES_LAYER]" = list( + "[NORTH]" = list("x" = 8, "y" = -3), + "[EAST]" = list("x" = 19, "y" = -3), + "[SOUTH]" = list("x" = 8, "y" = -3), + "[WEST]" = list("x" = -3, "y" = -3) + ), + "[FACEMASK_LAYER]" = list( + "[NORTH]" = list("x" = 8, "y" = -3), + "[EAST]" = list("x" = 19, "y" = -3), + "[SOUTH]" = list("x" = 8, "y" = -3), + "[WEST]" = list("x" = -3, "y" = -3) + ), + "[BELT_LAYER]" = list( + "[NORTH]" = list("x" = 8, "y" = -1), + "[EAST]" = list("x" = 8, "y" = -1), + "[SOUTH]" = list("x" = 8, "y" = -1), + "[WEST]" = list("x" = 9, "y" = -1) + ), + "[EARS_LAYER]" = list( + "[NORTH]" = list("x" = 8, "y" = -3), + "[EAST]" = list("x" = 19, "y" = -3), + "[SOUTH]" = list("x" = 8, "y" = -3), + "[WEST]" = list("x" = -3, "y" = -3) + ), + "[SUIT_STORE_LAYER]" = list( + "[NORTH]" = list("x" = 8, "y" = -1), + "[EAST]" = list("x" = 8, "y" = -1), + "[SOUTH]" = list("x" = 8, "y" = -1), + "[WEST]" = list("x" = -8, "y" = -1) + ), ) +// First list is left hand, second list is right hand. This is used for inhand offsets. +/datum/species/kepori/get_item_offsets_for_dir(dir, hand) + //LEFT/RIGHT + if(dir & NORTH) + return list(list("x" = 9, "y" = -1), list("x" = 7, "y" = -1)) + if(dir & SOUTH) + return list(list("x" = 7, "y" = -1), list("x" = 9, "y" = -1)) + if(dir & EAST) + return list(list("x" = 18, "y" = -2), list("x" = 21, "y" = -2)) //("x" = 18, "y" = 2), list("x" = 21, "y" = -1)) + if(dir & WEST) + return list(list("x" = -4, "y" = -2), list("x" = -1, "y" = -2)) //("x" = -5, "y" = -1), list("x" = -1, "y" = 2)) + /datum/species/kepori/random_name(gender,unique,lastname) if(unique) return random_unique_kepori_name() @@ -86,17 +133,27 @@ return equip_delay_self_check(I, H, bypass_equip_delay_self) /datum/species/kepori/on_species_gain(mob/living/carbon/C, datum/species/old_species, pref_load) - ..() + . = ..() + + C.base_pixel_x -= 8 + C.pixel_x = C.base_pixel_x + C.update_hands_on_rotate() + if(ishuman(C)) keptackle = new keptackle.Grant(C) /datum/species/kepori/on_species_loss(mob/living/carbon/human/C, datum/species/new_species, pref_load) + . = ..() + + C.base_pixel_x += 8 + C.pixel_x = C.base_pixel_x + C.stop_updating_hands() + if(keptackle) keptackle.Remove(C) - qdel(C.GetComponent(/datum/component/tackler)) - ..() + qdel(C.GetComponent(/datum/component/tackler)) /datum/action/innate/keptackle name = "Pounce" diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm index 6cb15357cc64..c34a70b3afde 100644 --- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm @@ -21,7 +21,6 @@ exotic_bloodtype = "L" disliked_food = GRAIN | DAIRY | CLOTH | GROSS liked_food = GORE | MEAT - inert_mutation = FIREBREATH deathsound = 'sound/voice/lizard/deathsound.ogg' wings_icons = list("Dragon") species_language_holder = /datum/language_holder/lizard diff --git a/code/modules/mob/living/carbon/human/species_types/vox.dm b/code/modules/mob/living/carbon/human/species_types/vox.dm index fd03e184b9ba..b9cc8306762e 100644 --- a/code/modules/mob/living/carbon/human/species_types/vox.dm +++ b/code/modules/mob/living/carbon/human/species_types/vox.dm @@ -67,14 +67,29 @@ /datum/species/vox/New() . = ..() + // This is in new because "[HEAD_LAYER]" etc. is NOT a constant compile-time value. For some reason. + // Why not just use HEAD_LAYER? Well, because HEAD_LAYER is a number, and if you try to use numbers as indexes, + // BYOND will try to make it an ordered list. So, we have to use a string. This is annoying, but it's the only way to do it smoothly. + offset_clothing = list( + "[SUIT_STORE_LAYER]" = list( + "[NORTH]" = list("x" = 8, "y" = 0), + "[EAST]" = list("x" = 8, "y" = 0), + "[SOUTH]" = list("x" = 8, "y" = 0), + "[WEST]" = list("x" = -8, "y" = 0) + ), + "[EARS_LAYER]" = list( + "[NORTH]" = list("x" = 8, "y" = 0), + "[EAST]" = list("x" = 8, "y" = 0), + "[SOUTH]" = list("x" = 8, "y" = 0), + "[WEST]" = list("x" = -8, "y" = 0) + ), + ) /datum/species/vox/random_name(gender,unique,lastname) if(unique) return random_unique_vox_name() return vox_name() - - /datum/species/vox/on_species_gain(mob/living/carbon/C, datum/species/old_species, pref_load) . = ..() C.base_pixel_x -= 9 diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index be99a1e4d547..beecda12b083 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -1,5 +1,4 @@ #define RESOLVE_ICON_STATE(I) (I.mob_overlay_state || I.icon_state) -#define CHECK_USE_AUTOGEN (handled_by_bodytype ? null : dna.species) //Is this gross overuse of macros? Yes. Fuck you. /////////////////////// //UPDATE_ICONS SYSTEM// @@ -111,9 +110,6 @@ There are several things that need to be remembered: if(wear_suit && (wear_suit.flags_inv & HIDEJUMPSUIT)) return - var/target_overlay = U.icon_state - if(U.adjusted == ALT_STYLE) - target_overlay = "[target_overlay]_d" var/t_color = U.item_color @@ -122,10 +118,18 @@ There are several things that need to be remembered: if(U.adjusted == ALT_STYLE) t_color = "[t_color]_d" + ///The final thing we overlay. Set on build_worn_icon. var/mutable_appearance/uniform_overlay + ///icon file of the clothing var/icon_file = U.mob_overlay_icon - var/handled_by_bodytype = TRUE + ///The icon state to overlay + var/target_overlay = U.icon_state + if(U.adjusted == ALT_STYLE) + target_overlay = "[target_overlay]_d" + /// Does this clothing need to be generated via greyscale? + var/handled_by_bodytype = FALSE + if(!uniform_overlay) //Kapu's autistic attempt at digitigrade handling //Hi Kapu @@ -135,21 +139,29 @@ There are several things that need to be remembered: icon_file = U.mob_overlay_icon target_overlay = "[target_overlay]_digi" - else if((dna.species.bodytype & BODYTYPE_VOX) && (U.supports_variations & VOX_VARIATION)) - icon_file = VOX_UNIFORM_PATH - if(U.vox_override_icon) - icon_file = U.vox_override_icon + else if(dna.species.bodytype & BODYTYPE_VOX) + if(U.supports_variations & VOX_VARIATION) + icon_file = VOX_UNIFORM_PATH + if(U.vox_override_icon) + icon_file = U.vox_override_icon + else + handled_by_bodytype = TRUE + + else if(dna.species.bodytype & BODYTYPE_KEPORI) + if(U.supports_variations & KEPORI_VARIATION) + icon_file = KEPORI_UNIFORM_PATH + if(U.kepoi_override_icon) + icon_file = U.kepoi_override_icon + else + handled_by_bodytype = TRUE - else if((dna.species.bodytype & BODYTYPE_KEPORI) && (U.supports_variations & KEPORI_VARIATION)) - icon_file = KEPORI_UNIFORM_PATH - if(U.kepoi_override_icon) - icon_file = U.kepoi_override_icon if(!(icon_exists(icon_file, RESOLVE_ICON_STATE(U)))) - handled_by_bodytype = FALSE + handled_by_bodytype = TRUE icon_file = U.mob_overlay_icon || DEFAULT_UNIFORM_PATH - uniform_overlay = U.build_worn_icon(default_layer = UNIFORM_LAYER, default_icon_file = icon_file, override_file = icon_file, isinhands = FALSE, override_file = icon_file, override_state = target_overlay, mob_species = CHECK_USE_AUTOGEN) + var/use_autogen = handled_by_bodytype ? dna.species : null + uniform_overlay = U.build_worn_icon(default_layer = UNIFORM_LAYER, default_icon_file = icon_file, override_file = icon_file, isinhands = FALSE, override_file = icon_file, override_state = target_overlay, mob_species = use_autogen) if(!uniform_overlay) return @@ -176,7 +188,8 @@ There are several things that need to be remembered: var/handled_by_bodytype //TODO: add an icon file for ID slot stuff, so it's less snowflakey - id_overlay = I.build_worn_icon(default_layer = ID_LAYER, default_icon_file = 'icons/mob/mob.dmi', mob_species = CHECK_USE_AUTOGEN) + var/use_autogen = handled_by_bodytype ? dna.species : null + id_overlay = I.build_worn_icon(default_layer = ID_LAYER, default_icon_file = 'icons/mob/mob.dmi', mob_species = use_autogen) if(!id_overlay) return @@ -206,29 +219,41 @@ There are several things that need to be remembered: //Bloody hands end - var/mutable_appearance/gloves_overlay + if(gloves) var/obj/item/I = gloves update_hud_gloves(I) - var/handled_by_bodytype = TRUE + ///The final thing we overlay. Set on build_worn_icon. + var/mutable_appearance/gloves_overlay + + ///icon file of the clothing var/icon_file = I.mob_overlay_icon + /// Does this clothing need to be generated via greyscale? + var/handled_by_bodytype = FALSE - if((dna.species.bodytype & BODYTYPE_VOX) && (I.supports_variations & VOX_VARIATION)) - icon_file = VOX_GLOVES_PATH - if(I.vox_override_icon) - icon_file = I.vox_override_icon + if(dna.species.bodytype & BODYTYPE_VOX) + if(I.supports_variations & VOX_VARIATION) + icon_file = VOX_GLOVES_PATH + if(I.vox_override_icon) + icon_file = I.vox_override_icon + else + handled_by_bodytype = TRUE - if((dna.species.bodytype & BODYTYPE_KEPORI) && (I.supports_variations & KEPORI_VARIATION)) - icon_file = KEPORI_GLOVES_PATH - if(I.kepoi_override_icon) - icon_file = I.kepoi_override_icon + else if(dna.species.bodytype & BODYTYPE_KEPORI) + if(I.supports_variations & KEPORI_VARIATION) + icon_file = KEPORI_GLOVES_PATH + if(I.kepoi_override_icon) + icon_file = I.kepoi_override_icon + else + handled_by_bodytype = TRUE if(!(icon_exists(icon_file, RESOLVE_ICON_STATE(I)))) - handled_by_bodytype = FALSE + handled_by_bodytype = TRUE icon_file = DEFAULT_GLOVES_PATH - gloves_overlay = I.build_worn_icon(default_layer = GLOVES_LAYER, default_icon_file = icon_file, override_file = icon_file, mob_species = CHECK_USE_AUTOGEN) + var/use_autogen = handled_by_bodytype ? dna.species : null + gloves_overlay = I.build_worn_icon(default_layer = GLOVES_LAYER, default_icon_file = icon_file, override_file = icon_file, mob_species = use_autogen) if(!gloves_overlay) return @@ -250,25 +275,37 @@ There are several things that need to be remembered: var/obj/item/I = glasses update_hud_glasses(I) if(!(head?.flags_inv & HIDEEYES) && !(wear_mask?.flags_inv & HIDEEYES)) + ///The final thing we overlay. Set on build_worn_icon. var/mutable_appearance/glasses_overlay - var/handled_by_bodytype = TRUE + + ///icon file of the clothing var/icon_file = I.mob_overlay_icon - if((dna.species.bodytype & BODYTYPE_VOX) && (I.supports_variations & VOX_VARIATION)) - icon_file = VOX_GLASSES_PATH - if(I.vox_override_icon) - icon_file = I.vox_override_icon -/*uncomment post kepori resprite - if((dna.species.bodytype & BODYTYPE_KEPORI) && (I.supports_variations & KEPORI_VARIATION)) - icon_file = KEPORI_GLASSES_PATH - if(I.kepoi_override_icon) - icon_file = I.kepoi_override_icon -*/ + /// Does this clothing need to be generated via greyscale? + var/handled_by_bodytype = FALSE + + if(dna.species.bodytype & BODYTYPE_VOX) + if(I.supports_variations & VOX_VARIATION) + icon_file = VOX_GLASSES_PATH + if(I.vox_override_icon) + icon_file = I.vox_override_icon + else + handled_by_bodytype = TRUE + + else if(dna.species.bodytype & BODYTYPE_KEPORI) + if(I.supports_variations & KEPORI_VARIATION) + icon_file = KEPORI_GLASSES_PATH + if(I.kepoi_override_icon) + icon_file = I.kepoi_override_icon + else + handled_by_bodytype = TRUE + if(!(icon_exists(icon_file, RESOLVE_ICON_STATE(I)))) - handled_by_bodytype = FALSE + handled_by_bodytype = TRUE icon_file = DEFAULT_GLASSES_PATH - glasses_overlay = I.build_worn_icon(default_layer = GLASSES_LAYER, default_icon_file = icon_file, override_file = icon_file, mob_species = CHECK_USE_AUTOGEN) + var/use_autogen = handled_by_bodytype ? dna.species : null + glasses_overlay = I.build_worn_icon(default_layer = GLASSES_LAYER, default_icon_file = icon_file, override_file = icon_file, mob_species = use_autogen) if(!glasses_overlay) return @@ -288,27 +325,38 @@ There are several things that need to be remembered: if(ears) var/obj/item/I = ears - var/mutable_appearance/ears_overlay update_hud_ears(I) - var/handled_by_bodytype = TRUE + ///The final thing we overlay. Set on build_worn_icon. + var/mutable_appearance/ears_overlay + + ///icon file of the clothing var/icon_file = I.mob_overlay_icon + /// Does this clothing need to be generated via greyscale? + var/handled_by_bodytype = FALSE + + if(dna.species.bodytype & BODYTYPE_VOX) + if(I.supports_variations & VOX_VARIATION) + icon_file = VOX_EARS_PATH + if(I.vox_override_icon) + icon_file = I.vox_override_icon + else + handled_by_bodytype = TRUE + + else if(dna.species.bodytype & BODYTYPE_KEPORI) + if(I.supports_variations & KEPORI_VARIATION) + icon_file = KEPORI_EARS_PATH + if(I.kepoi_override_icon) + icon_file = I.kepoi_override_icon + else + handled_by_bodytype = TRUE - if((dna.species.bodytype & BODYTYPE_VOX) && (I.supports_variations & VOX_VARIATION)) - icon_file = VOX_EARS_PATH - if(I.vox_override_icon) - icon_file = I.vox_override_icon -/*uncomment post kepori resprite - if((dna.species.bodytype & BODYTYPE_KEPORI) && (I.supports_variations & KEPORI_VARIATION)) - icon_file = KEPORI_EARS_PATH - if(I.kepoi_override_icon) - icon_file = I.kepoi_override_icon -*/ if(!(icon_exists(icon_file, RESOLVE_ICON_STATE(I)))) - handled_by_bodytype = FALSE + handled_by_bodytype = TRUE icon_file = DEFAULT_EARS_PATH - ears_overlay = I.build_worn_icon(default_layer = EARS_LAYER, override_file = icon_file, mob_species = CHECK_USE_AUTOGEN) + var/use_autogen = handled_by_bodytype ? dna.species : null + ears_overlay = I.build_worn_icon(default_layer = EARS_LAYER, override_file = icon_file, mob_species = use_autogen) if(!ears_overlay) return @@ -328,11 +376,17 @@ There are several things that need to be remembered: if(shoes) var/obj/item/I = shoes + update_hud_shoes(I) + ///The final thing we overlay. Set on build_worn_icon. var/mutable_appearance/shoes_overlay + + ///icon file of the clothing var/icon_file = I.mob_overlay_icon + ///The icon state to overlay var/target_overlay = I.icon_state - update_hud_shoes(I) - var/handled_by_bodytype = TRUE + + /// Does this clothing need to be generated via greyscale? + var/handled_by_bodytype = FALSE if((dna.species.bodytype & BODYTYPE_DIGITIGRADE) && ((I.supports_variations & DIGITIGRADE_VARIATION) || (I.supports_variations & DIGITIGRADE_VARIATION_SAME_ICON_FILE))) var/obj/item/bodypart/leg = src.get_bodypart(BODY_ZONE_L_LEG) @@ -342,21 +396,28 @@ There are several things that need to be remembered: icon_file = I.mob_overlay_icon target_overlay = "[target_overlay]_digi" - if((dna.species.bodytype & BODYTYPE_VOX) && (I.supports_variations & VOX_VARIATION)) - icon_file = VOX_SHOES_PATH - if(I.vox_override_icon) - icon_file = I.vox_override_icon + else if(dna.species.bodytype & BODYTYPE_VOX) + if(I.supports_variations & VOX_VARIATION) + icon_file = VOX_SHOES_PATH + if(I.vox_override_icon) + icon_file = I.vox_override_icon + else + handled_by_bodytype = TRUE - if((dna.species.bodytype & BODYTYPE_KEPORI) && (I.supports_variations & KEPORI_VARIATION)) - icon_file = KEPORI_SHOES_PATH - if(I.kepoi_override_icon) - icon_file = I.kepoi_override_icon + else if(dna.species.bodytype & BODYTYPE_KEPORI) + if(I.supports_variations & KEPORI_VARIATION) + icon_file = KEPORI_SHOES_PATH + if(I.kepoi_override_icon) + icon_file = I.kepoi_override_icon + else + handled_by_bodytype = TRUE if(!(icon_exists(icon_file, RESOLVE_ICON_STATE(I)))) - handled_by_bodytype = FALSE + handled_by_bodytype = TRUE icon_file = DEFAULT_SHOES_PATH - shoes_overlay = I.build_worn_icon(default_layer = SHOES_LAYER, default_icon_file = icon_file, override_file = icon_file, isinhands = FALSE, mob_species = CHECK_USE_AUTOGEN, override_state = target_overlay) + var/use_autogen = handled_by_bodytype ? dna.species : null + shoes_overlay = I.build_worn_icon(default_layer = SHOES_LAYER, default_icon_file = icon_file, override_file = icon_file, isinhands = FALSE, mob_species = use_autogen, override_state = target_overlay) if(!shoes_overlay) return @@ -394,31 +455,44 @@ There are several things that need to be remembered: inv.update_appearance() if(head) var/obj/item/I = head - var/mutable_appearance/head_overlay update_hud_head(I) - var/handled_by_bodytype = TRUE + ///The final thing we overlay. Set on build_worn_icon. + var/mutable_appearance/head_overlay + + ///icon file of the clothing var/icon_file = I.mob_overlay_icon + ///The icon state to overlay var/target_overlay = I.icon_state + /// Does this clothing need to be generated via greyscale? + var/handled_by_bodytype = FALSE + var/obj/item/bodypart/head_bodypart = src.get_bodypart(BODY_ZONE_HEAD) if((head_bodypart.bodytype & BODYTYPE_SNOUT) && (I.supports_variations & SNOUTED_VARIATION)) target_overlay = "[target_overlay]_snouted" - if((dna.species.bodytype & BODYTYPE_VOX) && (I.supports_variations & VOX_VARIATION)) - icon_file = VOX_HEAD_PATH - if(I.vox_override_icon) - icon_file = I.vox_override_icon + else if(dna.species.bodytype & BODYTYPE_VOX) + if(I.supports_variations & VOX_VARIATION) + icon_file = VOX_HEAD_PATH + if(I.vox_override_icon) + icon_file = I.vox_override_icon + else + handled_by_bodytype = TRUE - if((dna.species.bodytype & BODYTYPE_KEPORI) && (I.supports_variations & KEPORI_VARIATION)) - icon_file = KEPORI_HEAD_PATH - if(I.kepoi_override_icon) - icon_file = I.kepoi_override_icon + else if(dna.species.bodytype & BODYTYPE_KEPORI) + if(I.supports_variations & KEPORI_VARIATION) + icon_file = KEPORI_HEAD_PATH + if(I.kepoi_override_icon) + icon_file = I.kepoi_override_icon + else + handled_by_bodytype = TRUE if(!(icon_exists(icon_file, RESOLVE_ICON_STATE(I)))) - handled_by_bodytype = FALSE + handled_by_bodytype = TRUE icon_file = DEFAULT_HEAD_PATH - head_overlay = I.build_worn_icon(default_layer = HEAD_LAYER, default_icon_file = icon_file, override_file = icon_file, isinhands = FALSE, mob_species = CHECK_USE_AUTOGEN, override_state = target_overlay) + var/use_autogen = handled_by_bodytype ? dna.species : null + head_overlay = I.build_worn_icon(default_layer = HEAD_LAYER, default_icon_file = icon_file, override_file = icon_file, isinhands = FALSE, mob_species = use_autogen, override_state = target_overlay) if(!head_overlay) return @@ -436,26 +510,39 @@ There are several things that need to be remembered: if(belt) var/obj/item/I = belt - var/mutable_appearance/belt_overlay update_hud_belt(I) - var/handled_by_bodytype + ///The final thing we overlay. Set on build_worn_icon. + var/mutable_appearance/belt_overlay + + ///icon file of the clothing var/icon_file = I.mob_overlay_icon - if((I.supports_variations & VOX_VARIATION) && (dna.species.bodytype & BODYTYPE_VOX)) - icon_file = VOX_BELT_PATH - if(I.vox_override_icon) - icon_file = I.vox_override_icon + /// Does this clothing need to be generated via greyscale? + var/handled_by_bodytype = FALSE + - //if((I.supports_variations & KEPORI_VARIATION) && (dna.species.bodytype & BODYTYPE_KEPORI)) - //icon_file = KEPORI_BELT_PATH - //if(I.kepoi_override_icon) -// icon_file = I.kepoi_override_icon + if(dna.species.bodytype & BODYTYPE_VOX) + if(I.supports_variations & VOX_VARIATION) + icon_file = VOX_BELT_PATH + if(I.vox_override_icon) + icon_file = I.vox_override_icon + else + handled_by_bodytype = TRUE + + else if(dna.species.bodytype & BODYTYPE_KEPORI) + if(I.supports_variations & KEPORI_VARIATION) + icon_file = KEPORI_BELT_PATH + if(I.kepoi_override_icon) + icon_file = I.kepoi_override_icon + else + handled_by_bodytype = TRUE if(!(icon_exists(icon_file, RESOLVE_ICON_STATE(I)))) - handled_by_bodytype = FALSE + handled_by_bodytype = TRUE icon_file = DEFAULT_BELT_PATH - belt_overlay = I.build_worn_icon(default_layer = BELT_LAYER, default_icon_file = icon_file, override_file = icon_file, mob_species = CHECK_USE_AUTOGEN) + var/use_autogen = handled_by_bodytype ? dna.species : null + belt_overlay = I.build_worn_icon(default_layer = BELT_LAYER, default_icon_file = icon_file, override_file = icon_file, mob_species = use_autogen) if(!belt_overlay) return @@ -474,33 +561,46 @@ There are several things that need to be remembered: if(wear_suit) var/obj/item/I = wear_suit - var/mutable_appearance/suit_overlay update_hud_wear_suit(I) + ///The final thing we overlay. Set on build_worn_icon. + var/mutable_appearance/suit_overlay + + ///icon file of the clothing var/icon_file = I.mob_overlay_icon + ///The icon state to overlay var/target_overlay = I.icon_state - var/handled_by_bodytype = TRUE + /// Does this clothing need to be generated via greyscale? + var/handled_by_bodytype = FALSE + if((dna.species.bodytype & BODYTYPE_DIGITIGRADE) && ((I.supports_variations & DIGITIGRADE_VARIATION) || (I.supports_variations & DIGITIGRADE_VARIATION_SAME_ICON_FILE))) icon_file = DIGITIGRADE_SUIT_PATH if((I.supports_variations & DIGITIGRADE_VARIATION_SAME_ICON_FILE)) icon_file = I.mob_overlay_icon target_overlay = "[target_overlay]_digi" - else if((dna.species.bodytype & BODYTYPE_VOX) && (I.supports_variations & VOX_VARIATION)) - icon_file = VOX_SUIT_PATH - if(I.vox_override_icon) - icon_file = I.vox_override_icon + else if(dna.species.bodytype & BODYTYPE_VOX) + if(I.supports_variations & VOX_VARIATION) + icon_file = VOX_SUIT_PATH + if(I.vox_override_icon) + icon_file = I.vox_override_icon + else + handled_by_bodytype = TRUE - else if((dna.species.bodytype & BODYTYPE_KEPORI) && (I.supports_variations & KEPORI_VARIATION)) - icon_file = KEPORI_SUIT_PATH - if(I.kepoi_override_icon) - icon_file = I.kepoi_override_icon + else if(dna.species.bodytype & BODYTYPE_KEPORI) + if(I.supports_variations & KEPORI_VARIATION) + icon_file = KEPORI_SUIT_PATH + if(I.kepoi_override_icon) + icon_file = I.kepoi_override_icon + else + handled_by_bodytype = TRUE if(!(icon_exists(icon_file, RESOLVE_ICON_STATE(I)))) - handled_by_bodytype = FALSE + handled_by_bodytype = TRUE icon_file = I.mob_overlay_icon - suit_overlay = wear_suit.build_worn_icon(default_layer = SUIT_LAYER, override_file = icon_file, mob_species = CHECK_USE_AUTOGEN, override_state = target_overlay) + var/use_autogen = handled_by_bodytype ? dna.species : null + suit_overlay = wear_suit.build_worn_icon(default_layer = SUIT_LAYER, override_file = icon_file, mob_species = use_autogen, override_state = target_overlay) if(!suit_overlay) return @@ -546,31 +646,44 @@ There are several things that need to be remembered: if(wear_mask) var/obj/item/I = wear_mask update_hud_wear_mask(I) + ///The final thing we overlay. Set on build_worn_icon. var/mutable_appearance/mask_overlay + + ///icon file of the clothing var/icon_file = I.mob_overlay_icon + ///The icon state to overlay var/target_overlay = I.icon_state - var/handled_by_bodytype = TRUE + + /// Does this clothing need to be generated via greyscale? + var/handled_by_bodytype = FALSE if(!(ITEM_SLOT_MASK in check_obscured_slots())) var/obj/item/bodypart/head_bodypart = src.get_bodypart(BODY_ZONE_HEAD) if((head_bodypart.bodytype & BODYTYPE_SNOUT) && (I.supports_variations & SNOUTED_VARIATION)) target_overlay = "[target_overlay]_snouted" - if((dna.species.bodytype & BODYTYPE_VOX) && (I.supports_variations & VOX_VARIATION)) - icon_file = VOX_MASK_PATH - if(I.vox_override_icon) - icon_file = I.vox_override_icon - - if((dna.species.bodytype & BODYTYPE_KEPORI) && (I.supports_variations & KEPORI_VARIATION)) - icon_file = KEPORI_MASK_PATH - if(I.kepoi_override_icon) - icon_file = I.kepoi_override_icon + if(dna.species.bodytype & BODYTYPE_VOX) + if(I.supports_variations & VOX_VARIATION) + icon_file = VOX_MASK_PATH + if(I.vox_override_icon) + icon_file = I.vox_override_icon + else + handled_by_bodytype = TRUE + + else if(dna.species.bodytype & BODYTYPE_KEPORI) + if(I.supports_variations & KEPORI_VARIATION) + icon_file = KEPORI_MASK_PATH + if(I.kepoi_override_icon) + icon_file = I.kepoi_override_icon + else + handled_by_bodytype = TRUE if(!(icon_exists(icon_file, RESOLVE_ICON_STATE(I)))) icon_file = DEFAULT_MASK_PATH - handled_by_bodytype = FALSE + handled_by_bodytype = TRUE - mask_overlay = I.build_worn_icon(default_layer = FACEMASK_LAYER, default_icon_file = icon_file, override_file = icon_file, mob_species = CHECK_USE_AUTOGEN, override_state = target_overlay) + var/use_autogen = handled_by_bodytype ? dna.species : null + mask_overlay = I.build_worn_icon(default_layer = FACEMASK_LAYER, default_icon_file = icon_file, override_file = icon_file, mob_species = use_autogen, override_state = target_overlay) if(!mask_overlay) return @@ -588,17 +701,48 @@ There are several things that need to be remembered: if(wear_neck) var/obj/item/I = wear_neck + ///The final thing we overlay. Set on build_worn_icon. + var/mutable_appearance/neck_overlay + + ///icon file of the clothing + var/icon_file = I.mob_overlay_icon + ///The icon state to overlay + var/target_overlay = I.icon_state + + /// Does this clothing need to be generated via greyscale? + var/handled_by_bodytype = FALSE + + update_hud_neck(I) if(!(ITEM_SLOT_NECK in check_obscured_slots())) - var/icon_file = I.mob_overlay_icon - var/handled_by_bodytype = TRUE + + if(dna.species.bodytype & BODYTYPE_VOX) // there is neither a vox or kepori neck path, we just tell it to greyscale no matter what +// if(I.supports_variations & VOX_VARIATION) +// icon_file = VOX_NECK_PATH +// if(I.vox_override_icon) +// icon_file = I.vox_override_icon +// else + handled_by_bodytype = TRUE + + else if(dna.species.bodytype & BODYTYPE_KEPORI) +// if(I.supports_variations & KEPORI_VARIATION) +// icon_file = KEPORI_NECK_PATH +// if(I.kepoi_override_icon) +// icon_file = I.kepoi_override_icon +// else + handled_by_bodytype = TRUE if(!(icon_exists(icon_file, RESOLVE_ICON_STATE(I)))) - handled_by_bodytype = FALSE + handled_by_bodytype = TRUE icon_file = DEFAULT_NECK_PATH - overlays_standing[NECK_LAYER] = wear_neck.build_worn_icon(default_layer = NECK_LAYER, default_icon_file = icon_file, override_file = icon_file, mob_species = CHECK_USE_AUTOGEN) + var/use_autogen = handled_by_bodytype ? dna.species : null + neck_overlay = I.build_worn_icon(default_layer = NECK_LAYER, default_icon_file = icon_file, override_file = icon_file, isinhands = FALSE, mob_species = use_autogen, override_state = target_overlay) + if(!neck_overlay) + return + + overlays_standing[NECK_LAYER] = neck_overlay apply_overlay(NECK_LAYER) @@ -611,23 +755,42 @@ There are several things that need to be remembered: if(back) var/obj/item/I = back - var/mutable_appearance/back_overlay update_hud_back(I) - var/icon_file = I.mob_overlay_icon - var/handled_by_bodytype = TRUE - if((dna.species.bodytype & BODYTYPE_VOX) && (I.supports_variations & VOX_VARIATION)) - icon_file = VOX_BACK_PATH + ///The final thing we overlay. Set on build_worn_icon. + var/mutable_appearance/back_overlay - if(!icon_exists(icon_file, RESOLVE_ICON_STATE(I))) - icon_file = DEFAULT_BACK_PATH - handled_by_bodytype = FALSE + ///icon file of the clothing + var/icon_file = I.mob_overlay_icon - back_overlay = I.build_worn_icon(default_layer = BACK_LAYER, default_icon_file = icon_file, override_file = icon_file, isinhands = FALSE, override_file = icon_file, mob_species = CHECK_USE_AUTOGEN) + /// Does this clothing need to be generated via greyscale + var/handled_by_bodytype = FALSE if(!back_overlay) - return - overlays_standing[BACK_LAYER] = back_overlay - apply_overlay(BACK_LAYER) + if(dna.species.bodytype & BODYTYPE_VOX) + if(I.supports_variations & VOX_VARIATION) + icon_file = VOX_BACK_PATH + else + handled_by_bodytype = TRUE + + else if(dna.species.bodytype & BODYTYPE_KEPORI) +// if(I.supports_variations & KEPORI_VARIATION) +// icon_file = KEPORI_BACK_PATH +// else + handled_by_bodytype = TRUE + + if(!icon_exists(icon_file, RESOLVE_ICON_STATE(I))) + icon_file = DEFAULT_BACK_PATH + handled_by_bodytype = TRUE + + var/use_autogen = handled_by_bodytype ? dna.species : null + back_overlay = I.build_worn_icon(default_layer = BACK_LAYER, default_icon_file = icon_file, override_file = icon_file, isinhands = FALSE, override_file = icon_file, mob_species = use_autogen) + + if(!back_overlay) + return + overlays_standing[BACK_LAYER] = back_overlay + + if(back_overlay) //This is faster fuck you + apply_overlay(BACK_LAYER) /mob/living/carbon/human/update_inv_legcuffed() remove_overlay(LEGCUFF_LAYER) @@ -768,6 +931,7 @@ in this situation default_icon_file is expected to match either the lefthand_ or ^this female part sucks and will be fully ripped out ideally */ +// Note: if handled_by_bodytype is TRUE before calling this, it makes species use greyscale /obj/item/proc/build_worn_icon(default_layer = 0, default_icon_file = null, isinhands = FALSE, override_state = null, override_file = null, datum/species/mob_species = null, direction = null) // WS Edit Start - Worn Icon State diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 1f574f08a450..9f3b85fd4a92 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -74,7 +74,7 @@ var/emitterregen = 0.25 var/emittercd = 50 var/emitteroverloadcd = 100 - var/emittersemicd = FALSE + var/emittercurrent_cooldown = FALSE var/overload_ventcrawl = 0 var/overload_bulletblock = 0 //Why is this a good idea? @@ -125,7 +125,7 @@ . = ..() - emittersemicd = TRUE + emittercurrent_cooldown = TRUE addtimer(CALLBACK(src, PROC_REF(emittercool)), 600) if(!holoform) diff --git a/code/modules/mob/living/silicon/pai/pai_shell.dm b/code/modules/mob/living/silicon/pai/pai_shell.dm index 31a807b319b2..8d50f4a389f4 100644 --- a/code/modules/mob/living/silicon/pai/pai_shell.dm +++ b/code/modules/mob/living/silicon/pai/pai_shell.dm @@ -12,11 +12,11 @@ . = fold_in(force) return - if(emittersemicd) + if(emittercurrent_cooldown) to_chat(src, "Error: Holochassis emitters recycling. Please try again later.") return FALSE - emittersemicd = TRUE + emittercurrent_cooldown = TRUE addtimer(CALLBACK(src, PROC_REF(emittercool)), emittercd) REMOVE_TRAIT(src, TRAIT_IMMOBILIZED, PAI_FOLDED) REMOVE_TRAIT(src, TRAIT_HANDS_BLOCKED, PAI_FOLDED) @@ -42,10 +42,10 @@ holoform = TRUE /mob/living/silicon/pai/proc/emittercool() - emittersemicd = FALSE + emittercurrent_cooldown = FALSE /mob/living/silicon/pai/proc/fold_in(force = FALSE) - emittersemicd = TRUE + emittercurrent_cooldown = TRUE if(!force) addtimer(CALLBACK(src, PROC_REF(emittercool)), emittercd) else diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/codename_claw.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/codename_claw.dm index 77b4544a6dbb..3a4506b62562 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/codename_claw.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/codename_claw.dm @@ -315,3 +315,102 @@ empulse(src, 5, 8) new /obj/effect/gibspawner/human(get_turf(src)) qdel(src) + +/obj/projectile/tentacle + name = "tentacle" + icon_state = "tentacle_end" + pass_flags = PASSTABLE + damage = 0 + damage_type = BRUTE + range = 8 + hitsound = 'sound/weapons/thudswoosh.ogg' + var/chain + +/obj/projectile/tentacle/fire(setAngle) + if(firer) + chain = firer.Beam(src, icon_state = "tentacle", emissive = FALSE) + ..() + +/obj/projectile/tentacle/proc/reset_throw(mob/living/carbon/human/H) + if(H.throw_mode) + H.throw_mode_off() //Don't annoy the changeling if he doesn't catch the item + +/obj/projectile/tentacle/proc/tentacle_grab(mob/living/carbon/human/H, mob/living/carbon/C) + if(H.Adjacent(C)) + if(H.get_active_held_item() && !H.get_inactive_held_item()) + H.swap_hand() + if(H.get_active_held_item()) + return + C.grabbedby(H) + C.grippedby(H, instant = TRUE) //instant aggro grab + +/obj/projectile/tentacle/proc/tentacle_stab(mob/living/carbon/human/H, mob/living/carbon/C) + if(H.Adjacent(C)) + for(var/obj/item/I in H.held_items) + if(I.get_sharpness()) + C.visible_message("[H] impales [C] with [H.p_their()] [I.name]!", "[H] impales you with [H.p_their()] [I.name]!") + C.apply_damage(I.force, BRUTE, BODY_ZONE_CHEST) + H.do_item_attack_animation(C, used_item = I) + H.add_mob_blood(C) + playsound(get_turf(H),I.hitsound,75,TRUE) + return + +/obj/projectile/tentacle/on_hit(atom/target, blocked = FALSE) + var/mob/living/carbon/human/H = firer + if(blocked >= 100) + return BULLET_ACT_BLOCK + if(isitem(target)) + var/obj/item/I = target + if(!I.anchored) + to_chat(firer, "You pull [I] towards yourself.") + H.throw_mode_on() + I.throw_at(H, 10, 2) + . = BULLET_ACT_HIT + + else if(isliving(target)) + var/mob/living/L = target + if(!L.anchored && !L.throwing)//avoid double hits + if(iscarbon(L)) + var/mob/living/carbon/C = L + var/firer_intent = INTENT_HARM + var/mob/M = firer + if(istype(M)) + firer_intent = M.a_intent + switch(firer_intent) + if(INTENT_HELP) + C.visible_message("[L] is pulled by [H]'s tentacle!","A tentacle grabs you and pulls you towards [H]!") + C.throw_at(get_step_towards(H,C), 8, 2) + return BULLET_ACT_HIT + + if(INTENT_DISARM) + var/obj/item/I = C.get_active_held_item() + if(I) + if(C.dropItemToGround(I)) + C.visible_message("[I] is yanked off [C]'s hand by [src]!","A tentacle pulls [I] away from you!") + on_hit(I) //grab the item as if you had hit it directly with the tentacle + return BULLET_ACT_HIT + else + to_chat(firer, "You can't seem to pry [I] off [C]'s hands!") + return BULLET_ACT_BLOCK + else + to_chat(firer, "[C] has nothing in hand to disarm!") + return BULLET_ACT_HIT + + if(INTENT_GRAB) + C.visible_message("[L] is grabbed by [H]'s tentacle!","A tentacle grabs you and pulls you towards [H]!") + C.throw_at(get_step_towards(H,C), 8, 2, H, TRUE, TRUE, callback=CALLBACK(src, PROC_REF(tentacle_grab), H, C)) + return BULLET_ACT_HIT + + if(INTENT_HARM) + C.visible_message("[L] is thrown towards [H] by a tentacle!","A tentacle grabs you and throws you towards [H]!") + C.throw_at(get_step_towards(H,C), 8, 2, H, TRUE, TRUE, callback=CALLBACK(src, PROC_REF(tentacle_stab), H, C)) + return BULLET_ACT_HIT + else + L.visible_message("[L] is pulled by [H]'s tentacle!","A tentacle grabs you and pulls you towards [H]!") + L.throw_at(get_step_towards(H,L), 8, 2) + . = BULLET_ACT_HIT + +/obj/projectile/tentacle/Destroy() + qdel(chain) + return ..() + diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm index ca595d4d682f..0568533c1e0c 100644 --- a/code/modules/mob/living/simple_animal/hostile/mimic.dm +++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm @@ -205,7 +205,6 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca /mob/living/simple_animal/hostile/mimic/copy/ranged var/obj/item/gun/TrueGun = null - var/obj/item/gun/magic/Zapstick var/obj/item/gun/ballistic/Pewgun var/obj/item/gun/energy/Zapgun @@ -223,10 +222,6 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca move_to_delay = 2 * G.w_class + 1 projectilesound = G.fire_sound TrueGun = G - if(istype(G, /obj/item/gun/magic)) - Zapstick = G - var/obj/item/ammo_casing/magic/M = Zapstick.ammo_type - projectiletype = initial(M.projectile_type) if(istype(G, /obj/item/gun/ballistic)) Pewgun = G var/obj/item/ammo_box/magazine/M = Pewgun.mag_type @@ -245,11 +240,6 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca Zapgun.cell.use(shot.e_cost) Zapgun.update_appearance() ..() - else if(Zapstick) - if(Zapstick.charges) - Zapstick.charges-- - Zapstick.update_appearance() - ..() else if(Pewgun) if(Pewgun.chambered) if(Pewgun.chambered.BB) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 3684d5ad8159..f21f95692234 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -217,8 +217,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/power/apc/auto_name, 25) // this allows the APC to be embedded in a wall, yet still inside an area if (building) setDir(ndir) - tdir = dir // to fix Vars bug -//!!!!!!!!!!!!!! FUCK YOU SINGLE LINE OF CODE!! FUCK YOU YOU PIECE OF SHIT!!!!! setDir(SOUTH) + tdir = dir// to fix Vars bug + switch(tdir) if(NORTH) if((pixel_y != initial(pixel_y)) && (pixel_y != 23)) diff --git a/code/modules/projectiles/ammunition/_firing.dm b/code/modules/projectiles/ammunition/_firing.dm index ee155db4e719..93fa4208d571 100644 --- a/code/modules/projectiles/ammunition/_firing.dm +++ b/code/modules/projectiles/ammunition/_firing.dm @@ -18,8 +18,6 @@ if(click_cooldown_override) user.changeNext_move(click_cooldown_override) - else - user.changeNext_move(CLICK_CD_RANGE) user.newtonian_move(get_dir(target, user)) update_appearance() diff --git a/code/modules/projectiles/ammunition/ballistic/rifle.dm b/code/modules/projectiles/ammunition/ballistic/rifle.dm index 57592185aff6..b3875292fba2 100644 --- a/code/modules/projectiles/ammunition/ballistic/rifle.dm +++ b/code/modules/projectiles/ammunition/ballistic/rifle.dm @@ -106,4 +106,4 @@ icon_state = "caseless" caliber = ".299 caseless" projectile_type = /obj/projectile/bullet/c299 - bullet_per_box = 80 + bullet_per_box = 100 diff --git a/code/modules/projectiles/ammunition/caseless/_caseless.dm b/code/modules/projectiles/ammunition/caseless/_caseless.dm index 0d364cc93f5a..9e9dafb8d806 100644 --- a/code/modules/projectiles/ammunition/caseless/_caseless.dm +++ b/code/modules/projectiles/ammunition/caseless/_caseless.dm @@ -3,8 +3,10 @@ firing_effect_type = null heavy_metal = FALSE -/obj/item/ammo_casing/caseless/on_eject(atom/shooter) - qdel(src) +/obj/item/ammo_casing/caseless/fire_casing(atom/target, mob/living/user, params, distro, quiet, zone_override, spread, atom/fired_from) + . = ..() + if(.) + qdel(src) // Overridden; caseless ammo does not distinguish between "live" and "empty"/"spent" icon states (because it has no casing). /obj/item/ammo_casing/caseless/update_icon_state() diff --git a/code/modules/projectiles/ammunition/energy/laser.dm b/code/modules/projectiles/ammunition/energy/laser.dm index 6320cb24b0c6..d0334e8d8acc 100644 --- a/code/modules/projectiles/ammunition/energy/laser.dm +++ b/code/modules/projectiles/ammunition/energy/laser.dm @@ -31,7 +31,7 @@ projectile_type = /obj/projectile/beam/laser/weak/negative_ap e_cost = 799 //12 shots with a normal power cell, 25 with an upgraded select_name = "kill" - delay = 0.1 SECONDS + delay = 0.13 SECONDS /obj/item/ammo_casing/energy/lasergun/old projectile_type = /obj/projectile/beam/laser diff --git a/code/modules/projectiles/ammunition/energy/stun.dm b/code/modules/projectiles/ammunition/energy/stun.dm index 917e1c8c8189..1f74196eb83b 100644 --- a/code/modules/projectiles/ammunition/energy/stun.dm +++ b/code/modules/projectiles/ammunition/energy/stun.dm @@ -46,4 +46,4 @@ /obj/item/ammo_casing/energy/disabler/smg projectile_type = /obj/projectile/beam/disabler/weak/negative_ap e_cost = 330 - delay = 0.1 SECONDS + delay = 0.13 SECONDS diff --git a/code/modules/projectiles/ammunition/special/magic.dm b/code/modules/projectiles/ammunition/special/magic.dm index e38df896bed1..046ae7dbc078 100644 --- a/code/modules/projectiles/ammunition/special/magic.dm +++ b/code/modules/projectiles/ammunition/special/magic.dm @@ -4,68 +4,3 @@ projectile_type = /obj/projectile/magic firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect/magic heavy_metal = FALSE - -/obj/item/ammo_casing/magic/change - projectile_type = /obj/projectile/magic/change - -/obj/item/ammo_casing/magic/animate - projectile_type = /obj/projectile/magic/animate - -/obj/item/ammo_casing/magic/heal - projectile_type = /obj/projectile/magic/resurrection - harmful = FALSE - -/obj/item/ammo_casing/magic/death - projectile_type = /obj/projectile/magic/death - -/obj/item/ammo_casing/magic/teleport - projectile_type = /obj/projectile/magic/teleport - harmful = FALSE - -/obj/item/ammo_casing/magic/safety - projectile_type = /obj/projectile/magic/safety - harmful = FALSE - -/obj/item/ammo_casing/magic/door - projectile_type = /obj/projectile/magic/door - harmful = FALSE - -/obj/item/ammo_casing/magic/fireball - projectile_type = /obj/projectile/magic/aoe/fireball - -/obj/item/ammo_casing/magic/chaos - projectile_type = /obj/projectile/magic - -/obj/item/ammo_casing/magic/spellblade - projectile_type = /obj/projectile/magic/spellblade - -/obj/item/ammo_casing/magic/arcane_barrage - projectile_type = /obj/projectile/magic/arcane_barrage - -/obj/item/ammo_casing/magic/honk - projectile_type = /obj/projectile/bullet/honker - -/obj/item/ammo_casing/magic/locker - projectile_type = /obj/projectile/magic/locker - -/obj/item/ammo_casing/magic/flying - projectile_type = /obj/projectile/magic/flying - -/obj/item/ammo_casing/magic/bounty - projectile_type = /obj/projectile/magic/bounty - -/obj/item/ammo_casing/magic/antimagic - projectile_type = /obj/projectile/magic/antimagic - -/obj/item/ammo_casing/magic/sapping - projectile_type = /obj/projectile/magic/sapping - -/obj/item/ammo_casing/magic/necropotence - projectile_type = /obj/projectile/magic/necropotence - -/obj/item/ammo_casing/magic/wipe - projectile_type = /obj/projectile/magic/wipe - -/obj/item/ammo_casing/magic/nothing - projectile_type = /obj/projectile/magic/nothing - harmful = FALSE diff --git a/code/modules/projectiles/boxes_magazines/internal/misc.dm b/code/modules/projectiles/boxes_magazines/internal/misc.dm index 1d4316560e92..55b749ac3333 100644 --- a/code/modules/projectiles/boxes_magazines/internal/misc.dm +++ b/code/modules/projectiles/boxes_magazines/internal/misc.dm @@ -1,9 +1,3 @@ -/obj/item/ammo_box/magazine/internal/hook - name = "hook internal tube" - ammo_type = /obj/item/ammo_casing/magic/hook - caliber = "hook" - max_ammo = 1 - /obj/item/ammo_box/magazine/internal/bow name = "bowstring" ammo_type = /obj/item/ammo_casing/caseless/arrow diff --git a/code/modules/projectiles/boxes_magazines/internal/rifle.dm b/code/modules/projectiles/boxes_magazines/internal/rifle.dm index 921ff98293a1..4f2f8c537958 100644 --- a/code/modules/projectiles/boxes_magazines/internal/rifle.dm +++ b/code/modules/projectiles/boxes_magazines/internal/rifle.dm @@ -6,13 +6,6 @@ max_ammo = 5 instant_load = TRUE -/obj/item/ammo_box/magazine/internal/boltaction/enchanted - max_ammo = 1 - ammo_type = /obj/item/ammo_casing/a8_50r - -/obj/item/ammo_box/magazine/internal/boltaction/enchanted/arcane_barrage - ammo_type = /obj/item/ammo_casing/magic/arcane_barrage - /obj/item/ammo_box/magazine/internal/boltaction/solgov name = "SSG-669C internal magazine" ammo_type = /obj/item/ammo_casing/caseless/a858 diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 892a914b88c5..3edfd1382cf4 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -1,6 +1,3 @@ - -#define DUALWIELD_PENALTY_EXTRA_MULTIPLIER 1.6 - /obj/item/gun name = "gun" desc = "It's a gun. It's pretty terrible, though." @@ -27,25 +24,55 @@ var/vary_fire_sound = TRUE var/fire_sound_volume = 50 var/dry_fire_sound = 'sound/weapons/gun/general/dry_fire.ogg' - var/dry_fire_text = "click" //change this on non-gun things - var/suppressed = null //whether or not a message is displayed when fired + ///Text showed when attempting to fire with no round or empty round. + var/dry_fire_text = "click" + ///whether or not a message is displayed when fired + var/suppressed = null var/can_suppress = FALSE var/suppressed_sound = 'sound/weapons/gun/general/heavy_shot_suppressed.ogg' var/suppressed_volume = 60 var/can_unsuppress = TRUE var/obj/item/ammo_casing/chambered = null - trigger_guard = TRIGGER_GUARD_NORMAL //trigger guard on the weapon, hulks can't fire them with their big meaty fingers - var/sawn_desc = null //description change if weapon is sawn-off + ///trigger guard on the weapon. Used for hulk mutations and ashies. I honestly dont know how usefult his is, id avoid touching it + trigger_guard = TRIGGER_GUARD_NORMAL + ///Set the description of the gun to this when sawed off + var/sawn_desc = null + ///This triggers some sprite behavior in shotguns and prevents further sawoff, note that can_be_sawn_off is on gun/ballistic and not here, wtf. var/sawn_off = FALSE - var/burst_size = 1 //how large a burst is - var/fire_delay = 0 //rate of fire for burst firing and semi auto - var/firing_burst = 0 //Prevent the weapon from firing again while already firing - var/semicd = 0 //cooldown handler + + /// how many shots per burst, Ex: most machine pistols, M90, some ARs are 3rnd burst, while others like the GAR and laser minigun are 2 round burst. + var/burst_size = 3 + ///The rate of fire when firing in a burst. Not the delay between bursts + var/burst_delay = 0.15 SECONDS + ///The rate of fire when firing full auto and semi auto, and between bursts; for bursts its fire delay + burst_delay after every burst + var/fire_delay = 0.2 SECONDS + + /// after initializing, we set the firemode to this + var/default_firemode = FIREMODE_SEMIAUTO + ///Firemode index, due to code shit this is the currently selected firemode + var/firemode_index + /// Our firemodes, subtract and add to this list as needed. NOTE that the autofire component is given on init when FIREMODE_FULLAUTO is here. + var/list/gun_firemodes = list(FIREMODE_SEMIAUTO, FIREMODE_BURST, FIREMODE_FULLAUTO, FIREMODE_OTHER, FIREMODE_OTHER_TWO) + /// A acoc list that determines the names of firemodes. Use if you wanna be weird and set the name of say, FIREMODE_OTHER to "Underbarrel grenade launcher" for example. + var/list/gun_firenames = list(FIREMODE_SEMIAUTO = "single", FIREMODE_BURST = "burst fire", FIREMODE_FULLAUTO = "full auto", FIREMODE_OTHER = "misc. fire", FIREMODE_OTHER_TWO = "very misc. fire") + ///BASICALLY: the little button you select firing modes from? this is jsut the prefix of the icon state of that. For example, if we set it as "laser", the fire select will use "laser_single" and so on. + var/fire_select_icon_state_prefix = "" + ///If true, we put "safety_" before fire_select_icon_state_prefix's prefix. ex. "safety_laser_single" + var/adjust_fire_select_icon_state_on_safety = FALSE + + ///Are we firing a burst? If so, dont fire again until burst is done + var/currently_firing_burst = FALSE + ///This prevents gun from firing until the coodown is done, affected by lag + var/current_cooldown = 0 + ///affects if you can fire it unwielded or even dual wield it. LIGHT means dual wield allowed, HEAVY and higher means you have to wield to fire var/weapon_weight = WEAPON_LIGHT - var/dual_wield_spread = 24 //additional spread when dual wielding - var/randomspread = 1 //Set to 0 for shotguns. This is used for weapons that don't fire all their bullets at once. + ///If dual wielding, add this to the spread + var/dual_wield_spread = 24 + /// ???, no clue what this is. Original desc: //Set to 0 for shotguns. This is used for weapons that don't fire all their bullets at once. + var/randomspread = 1 - var/projectile_damage_multiplier = 1 //Alters projectile damage multiplicatively based on this value. Use it for "better" or "worse" weapons that use the same ammo. + ///Alters projectile damage multiplicatively based on this value. Use it for "better" or "worse" weapons that use the same ammo. + var/projectile_damage_multiplier = 1 lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi' @@ -127,6 +154,7 @@ alight = new(src) muzzle_flash = new(src, muzzleflash_iconstate) build_zooming() + build_firemodes() /obj/item/gun/ComponentInitialize() . = ..() @@ -152,8 +180,10 @@ ) ) wielded_fully = TRUE + return TRUE else wielded_fully = TRUE + return TRUE /obj/item/gun/proc/is_wielded() return wielded @@ -217,6 +247,51 @@ if(zoomed && user.get_active_held_item() != src) zoom(user, user.dir, FALSE) //we can only stay zoomed in if it's in our hands //yeah and we only unzoom if we're actually zoomed using the gun!! +/obj/item/gun/attack(mob/M as mob, mob/user) + if(user.a_intent == INTENT_HARM) //Flogging + if(bayonet) + M.attackby(bayonet, user) + return + else + return ..() + return + +/obj/item/gun/attack_obj(obj/O, mob/user) + if(user.a_intent == INTENT_HARM) + if(bayonet) + O.attackby(bayonet, user) + return + return ..() + +/obj/item/gun/attackby(obj/item/I, mob/user, params) + if(user.a_intent == INTENT_HARM) + return ..() + else if(istype(I, /obj/item/flashlight/seclite)) + if(!can_flashlight) + return ..() + var/obj/item/flashlight/seclite/S = I + if(!gun_light) + if(!user.transferItemToLoc(I, src)) + return + to_chat(user, "You click [S] into place on [src].") + set_gun_light(S) + update_gunlight() + alight = new(src) + if(loc == user) + alight.Grant(user) + else if(istype(I, /obj/item/kitchen/knife)) + var/obj/item/kitchen/knife/K = I + if(!can_bayonet || !K.bayonet || bayonet) //ensure the gun has an attachment point available, and that the knife is compatible with it. + return ..() + if(!user.transferItemToLoc(I, src)) + return + to_chat(user, "You attach [K] to [src]'s bayonet lug.") + bayonet = K + update_appearance() + + else + return ..() + //called after the gun has successfully fired its chambered ammo. /obj/item/gun/proc/process_chamber(atom/shooter) SEND_SIGNAL(src, COMSIG_GUN_CHAMBER_PROCESSED) @@ -229,252 +304,277 @@ return FALSE return TRUE -/obj/item/gun/proc/shoot_with_empty_chamber(mob/living/user as mob|obj) - if(!safety) - to_chat(user, "*[dry_fire_text]*") - playsound(src, dry_fire_sound, 30, TRUE) - return - to_chat(user, "Safeties are active on the [src]! Turn them off to fire!") - - -/obj/item/gun/proc/shoot_live_shot(mob/living/user, pointblank = 0, atom/pbtarget = null, message = 1) - var/actual_angle = get_angle_with_scatter((user || get_turf(src)), pbtarget, rand(-recoil_deviation, recoil_deviation) + 180) - var/muzzle_angle = Get_Angle(get_turf(src), pbtarget) - if(muzzle_flash && !muzzle_flash.applied) - handle_muzzle_flash(user, muzzle_angle) - - if(wielded_fully) - simulate_recoil(user, recoil, actual_angle) - else if(!wielded_fully) - simulate_recoil(user, recoil_unwielded, actual_angle) - - if(suppressed) - playsound(user, suppressed_sound, suppressed_volume, vary_fire_sound, ignore_walls = FALSE, extrarange = SILENCED_SOUND_EXTRARANGE, falloff_distance = 0) - else - playsound(user, fire_sound, fire_sound_volume, vary_fire_sound) - if(message) - if(pointblank) - user.visible_message( - span_danger("[user] fires [src] point blank at [pbtarget]!"), - span_danger("You fire [src] point blank at [pbtarget]!"), - span_hear("You hear a gunshot!"), COMBAT_MESSAGE_RANGE, pbtarget - ) - to_chat(pbtarget, "[user] fires [src] point blank at you!") - if(pb_knockback > 0 && ismob(pbtarget)) - var/mob/PBT = pbtarget - var/atom/throw_target = get_edge_target_turf(PBT, user.dir) - PBT.throw_at(throw_target, pb_knockback, 2) - else - user.visible_message( - span_danger("[user] fires [src]!"), - blind_message = span_hear("You hear a gunshot!"), - vision_distance = COMBAT_MESSAGE_RANGE, - ignored_mobs = user - ) - /obj/item/gun/emp_act(severity) . = ..() if(!(. & EMP_PROTECT_CONTENTS)) for(var/obj/O in contents) O.emp_act(severity) + +/obj/item/gun/proc/recharge_newshot() + return + /obj/item/gun/afterattack(atom/target, mob/living/user, flag, params) . = ..() + //No target? Why are we even firing anyways... if(!target) return - if(firing_burst) + //If we are burst firing, don't fire, obviously + if(currently_firing_burst) return - if(flag) //It's adjacent, is the user, or is on the user's person + //This var happens when we are either clicking someone next to us or ourselves. Check if we don't want to fire... + if(flag) if(target in user.contents) //can't shoot stuff inside us. return if(!ismob(target) || user.a_intent == INTENT_HARM) //melee attack return if(target == user && user.zone_selected != BODY_ZONE_PRECISE_MOUTH) //so we can't shoot ourselves (unless mouth selected) return +/* TODO: gunpointing is very broken, port the old skyrat gunpointing? its much better, usablity wise and rp wise? if(ismob(target) && user.a_intent == INTENT_GRAB) if(user.GetComponent(/datum/component/gunpoint)) to_chat(user, "You are already holding someone up!") return user.AddComponent(/datum/component/gunpoint, target, src) return +*/ + // Good job, but we have exta checks to do... + return pre_fire(target, user, TRUE, flag, params, null) + +/obj/item/gun/proc/pre_fire(atom/target, mob/living/user, message = TRUE, flag, params = null, zone_override = "", bonus_spread = 0, dual_wielded_gun = FALSE) + add_fingerprint(user) + + // If we have a cooldown, don't do anything, obviously + if(current_cooldown) + return - if(istype(user))//Check if the user can use the gun, if the user isn't alive(turrets) assume it can. - var/mob/living/L = user - if(!can_trigger_gun(L)) + //We check if the user can even use the gun, if not, we assume the user isn't alive(turrets) so we go ahead. + if(istype(user)) + var/mob/living/living_user = user + if(!can_trigger_gun(living_user)) return + //If targetting the mouth, we do suicide instead. if(flag) if(user.zone_selected == BODY_ZONE_PRECISE_MOUTH) handle_suicide(user, target, params) return - if(!can_shoot()) //Just because you can pull the trigger doesn't mean it can shoot. + //Just because we can pull the trigger doesn't mean it can fire. Mostly for safties. + if(!can_shoot()) shoot_with_empty_chamber(user) return + //we then check our weapon weight vs if we are being wielded... + if(weapon_weight == WEAPON_VERY_HEAVY && (!wielded_fully)) + to_chat(user, "You need a fully secure grip to fire [src]!") + return + if(weapon_weight == WEAPON_HEAVY && (!wielded)) to_chat(user, "You need a more secure grip to fire [src]!") return - //DUAL (or more!) WIELDING - var/bonus_spread = 0 + //If we have the pacifist trait and a chambered round, don't fire. Honestly, pacifism quirk is pretty stupid, and as such we check again in process_fire() anyways + if(chambered) + if(HAS_TRAIT(user, TRAIT_PACIFISM)) // If the user has the pacifist trait, then they won't be able to fire [src] if the round chambered inside of [src] is lethal. + if(chambered.harmful) // Is the bullet chambered harmful? + to_chat(user, "[src] is lethally chambered! You don't want to risk harming anyone...") + return + + //Dual wielding handling. Not the biggest fan of this, but it's here. Dual berettas not included var/loop_counter = 0 - if(ishuman(user) && user.a_intent == INTENT_HARM) - var/mob/living/carbon/human/H = user - for(var/obj/item/gun/G in H.held_items) - if(G == src || G.weapon_weight >= WEAPON_MEDIUM) + if(ishuman(user) && user.a_intent == INTENT_HARM && !dual_wielded_gun) + var/mob/living/carbon/human/our_cowboy = user + for(var/obj/item/gun/found_gun in our_cowboy.held_items) + if(found_gun == src || found_gun.weapon_weight >= WEAPON_MEDIUM) continue - else if(G.can_trigger_gun(user)) + else if(found_gun.can_trigger_gun(user)) bonus_spread += dual_wield_spread loop_counter++ - addtimer(CALLBACK(G, TYPE_PROC_REF(/obj/item/gun, process_fire), target, user, TRUE, params, null, bonus_spread), loop_counter) + addtimer(CALLBACK(found_gun, TYPE_PROC_REF(/obj/item/gun, pre_fire), target, user, TRUE, params, null, bonus_spread), loop_counter) + + //get current firemode + var/current_firemode = gun_firemodes[firemode_index] + //FIREMODE_OTHER and its sister directs you to another proc for special handling + if(current_firemode == FIREMODE_OTHER) + return process_other(target, user, message, flag, params, zone_override, bonus_spread) + if(current_firemode == FIREMODE_OTHER_TWO) + return process_other_two(target, user, message, flag, params, zone_override, bonus_spread) + //if all of that succeded, we finally get to process firing return process_fire(target, user, TRUE, params, null, bonus_spread) -/obj/item/gun/proc/recharge_newshot() - return +/obj/item/gun/proc/process_other(atom/target, mob/living/user, message = TRUE, flag, params = null, zone_override = "", bonus_spread = 0) + return //use this for 'underbarrels!! + +/obj/item/gun/proc/process_other_two(atom/target, mob/living/user, message = TRUE, flag, params = null, zone_override = "", bonus_spread = 0) + return //reserved in case another fire mode is needed, if you need special behavior, put it here then call process_fire, or call process_fire and have the special behavior there + +/** + * Handles everything involving firing. + * * gun.dm is still a fucking mess, and I will document everything next time i get to it... for now this will suffice. + * + * Returns TRUE or FALSE depending on if it actually fired a shot. + * Arguments: + * * target - The atom we are trying to hit. + * * user - The living mob firing the gun, if any. + * * message - Do we show the usual messages? eg. "x fires the y!" + * * params - Is the params string from byond [/atom/proc/Click] code, see that documentation. + * * zone_override - The bodypart we attempt to hit, sometimes hits another. + * * bonus_spread - Adds this value to spread, in this case used by dual wielding. + * * burst_firing - Not to be confused with currently_firing_burst. This var is TRUE when we are doing a burst except for the first shot in a burst, as to override the spam burst checks. + * * spread_override - Bullet spread is forcibly set to this. This is usually because of bursts attempting to share the same burst trajectory. + * * iteration - Which shot in a burst are we in. + */ +/obj/item/gun/proc/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0, burst_firing = FALSE, spread_override = 0, iteration = 0) + //OKAY, this prevents us from firing until our cooldown is done + if(!burst_firing) //if we're firing a burst, dont interfere to avoid issues + if(current_cooldown) + return FALSE -/obj/item/gun/proc/process_burst(mob/living/user, atom/target, message = TRUE, params=null, zone_override = "", sprd = 0, randomized_gun_spread = 0, randomized_bonus_spread = 0, rand_spr = 0, iteration = 0) - if(!user || !firing_burst) - firing_burst = FALSE + //Check one last time for safeties... + if(!can_shoot()) + shoot_with_empty_chamber(user) + currently_firing_burst = FALSE return FALSE - if(!issilicon(user)) - if(iteration > 1 && !(user.is_holding(src))) //for burst firing - firing_burst = FALSE + + //special hahnding for burst firing + if(burst_firing) + if(!user || !currently_firing_burst) + currently_firing_burst = FALSE return FALSE - if(chambered && chambered.BB) + if(!issilicon(user)) + //If we aren't holding the gun, what are we doing, stop firing! + if(iteration > 1 && !(user.is_holding(src))) + currently_firing_burst = FALSE + return FALSE + + //Do we have a round? If not, stop the whole chain, and if we do, check if the gun is chambered. Pacisim is pretty lame anyways. + if(chambered) if(HAS_TRAIT(user, TRAIT_PACIFISM)) // If the user has the pacifist trait, then they won't be able to fire [src] if the round chambered inside of [src] is lethal. if(chambered.harmful) // Is the bullet chambered harmful? to_chat(user, "[src] is lethally chambered! You don't want to risk harming anyone...") - return - if(randomspread) - sprd = round((rand() - 0.5) * DUALWIELD_PENALTY_EXTRA_MULTIPLIER * (randomized_gun_spread + randomized_bonus_spread)) - else //Smart spread - sprd = round((((rand_spr/burst_size) * iteration) - (0.5 + (rand_spr * 0.25))) * (randomized_gun_spread + randomized_bonus_spread)) - before_firing(target,user) - if(!chambered.fire_casing(target, user, params, ,suppressed, zone_override, sprd, src)) - shoot_with_empty_chamber(user) - firing_burst = FALSE - return FALSE - else - if(get_dist(user, target) <= 1) //Making sure whether the target is in vicinity for the pointblank shot - shoot_live_shot(user, 1, target, message) - else - shoot_live_shot(user, 0, target, message) - if (iteration >= burst_size) - firing_burst = FALSE + currently_firing_burst = FALSE //no burst 4 u + return FALSE + else + shoot_with_empty_chamber(user) + currently_firing_burst = FALSE + return FALSE + + // we hold the total spread in this var + var/sprd + // if we ARE burst firing and don't have "randomspread", we add the burst's penalty on top of it. + if(burst_firing && !randomspread) + bonus_spread += burst_size * iteration + + //override spread? usually happens only in bursts + if(spread_override && !randomspread) + sprd = spread_override else + //Calculate spread + sprd = calculate_spread(user, bonus_spread) + + before_firing(target,user) + //If we cant fire the round, just end the proc here. Otherwise, continue + if(!chambered.fire_casing(target, user, params, , suppressed, zone_override, sprd, src)) shoot_with_empty_chamber(user) - firing_burst = FALSE + currently_firing_burst = FALSE return FALSE + //Are we PBing someone? If so, set pointblank to TRUE + shoot_live_shot(user, (get_dist(user, target) <= 1), target, message) //Making sure whether the target is in vicinity for the pointblank shot + + //process the chamber... process_chamber(shooter = user) update_appearance() - return TRUE - -/obj/item/gun/proc/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0) + //get our current firemode... + var/current_firemode = gun_firemodes[firemode_index] + + //If we are set to burst fire, then we burst fire! + if(burst_size > 1 && (current_firemode == FIREMODE_BURST) && !burst_firing) + currently_firing_burst = TRUE + for(var/i = 2 to burst_size) //we fire the first burst normally, hence why its 2 + addtimer(CALLBACK(src, PROC_REF(process_fire), target, user, message, params, zone_override, 0, TRUE, sprd, i), burst_delay * (i - 1)) + + //if we have a fire delay, set up a cooldown + if(fire_delay && (!burst_firing && !currently_firing_burst)) + current_cooldown = TRUE + addtimer(CALLBACK(src, PROC_REF(reset_current_cooldown)), fire_delay) + if(burst_firing && iteration >= burst_size) + current_cooldown = TRUE + addtimer(CALLBACK(src, PROC_REF(reset_current_cooldown)), fire_delay+burst_delay) + currently_firing_burst = FALSE + + // update our inhands... if(user) - SEND_SIGNAL(user, COMSIG_MOB_FIRED_GUN, user, target, params, zone_override) + user.update_inv_hands() - add_fingerprint(user) + SSblackbox.record_feedback("tally", "gun_fired", 1, type) + return TRUE - if(semicd) +/obj/item/gun/proc/reset_current_cooldown() + current_cooldown = FALSE +/obj/item/gun/proc/shoot_with_empty_chamber(mob/living/user as mob|obj) + if(!safety) + to_chat(user, "*[dry_fire_text]*") + playsound(src, dry_fire_sound, 30, TRUE) return + to_chat(user, "Safeties are active on the [src]! Turn them off to fire!") - var/sprd = 0 - var/randomized_gun_spread = 0 - var/rand_spr = rand() - if(wielded_fully && spread) - randomized_gun_spread = rand(0,spread) - else if(!wielded_fully && spread_unwielded) - randomized_gun_spread = rand(0,spread_unwielded) +/obj/item/gun/proc/shoot_live_shot(mob/living/user, pointblank = FALSE, atom/pbtarget = null, message = TRUE) + var/actual_angle = get_angle_with_scatter((user || get_turf(src)), pbtarget, rand(-recoil_deviation, recoil_deviation) + 180) + var/muzzle_angle = Get_Angle(get_turf(src), pbtarget) - if(HAS_TRAIT(user, TRAIT_POOR_AIM)) //nice shootin' tex - bonus_spread += 25 - var/randomized_bonus_spread = rand(0, bonus_spread) + user.changeNext_move(clamp(fire_delay, 0, CLICK_CD_RANGE)) + + if(muzzle_flash && !muzzle_flash.applied) + handle_muzzle_flash(user, muzzle_angle) + + if(wielded_fully) + simulate_recoil(user, recoil, actual_angle) + else if(!wielded_fully) + simulate_recoil(user, recoil_unwielded, actual_angle) - if(burst_size > 1) - firing_burst = TRUE - for(var/i = 1 to burst_size) - addtimer(CALLBACK(src, PROC_REF(process_burst), user, target, message, params, zone_override, sprd, randomized_gun_spread, randomized_bonus_spread, rand_spr, i), fire_delay * (i - 1)) + if(suppressed) + playsound(user, suppressed_sound, suppressed_volume, vary_fire_sound, ignore_walls = FALSE, extrarange = SILENCED_SOUND_EXTRARANGE, falloff_distance = 0) else - if(chambered) - if(HAS_TRAIT(user, TRAIT_PACIFISM)) // If the user has the pacifist trait, then they won't be able to fire [src] if the round chambered inside of [src] is lethal. - if(chambered.harmful) // Is the bullet chambered harmful? - to_chat(user, "[src] is lethally chambered! You don't want to risk harming anyone...") - return - sprd = round((rand() - 0.5) * DUALWIELD_PENALTY_EXTRA_MULTIPLIER * (randomized_gun_spread + randomized_bonus_spread)) - sprd = calculate_spread(user, sprd) - - before_firing(target,user) - if(!chambered.fire_casing(target, user, params, , suppressed, zone_override, sprd, src)) - shoot_with_empty_chamber(user) - return + playsound(user, fire_sound, fire_sound_volume, vary_fire_sound) + if(message) + if(pointblank) + user.visible_message( + span_danger("[user] fires [src] point blank at [pbtarget]!"), + span_danger("You fire [src] point blank at [pbtarget]!"), + span_hear("You hear a gunshot!"), COMBAT_MESSAGE_RANGE, pbtarget + ) + to_chat(pbtarget, "[user] fires [src] point blank at you!") + if(pb_knockback > 0 && ismob(pbtarget)) + var/mob/PBT = pbtarget + var/atom/throw_target = get_edge_target_turf(PBT, user.dir) + PBT.throw_at(throw_target, pb_knockback, 2) else - if(get_dist(user, target) <= 1) //Making sure whether the target is in vicinity for the pointblank shot - shoot_live_shot(user, TRUE, target, message) - else - shoot_live_shot(user, FALSE, target, message) - else - shoot_with_empty_chamber(user) - return - process_chamber(shooter = user) - update_appearance() - if(fire_delay) - semicd = TRUE - addtimer(CALLBACK(src, PROC_REF(reset_semicd)), fire_delay) + user.visible_message( + span_danger("[user] fires [src]!"), + blind_message = span_hear("You hear a gunshot!"), + vision_distance = COMBAT_MESSAGE_RANGE, + ignored_mobs = user + ) - if(user) - user.update_inv_hands() - SSblackbox.record_feedback("tally", "gun_fired", 1, type) - return TRUE + //cloudy sent a meme in the discord. i dont know if its true, but i made this piece of code in honor of it + var/mob/living/carbon/human/living_human = user + if(istype(living_human)) + if(!living_human.wear_neck) + return //if nothing on the neck, don't do anything + var/current_month = text2num(time2text(world.timeofday, "MM")) + var/static/regex/bian = regex("(?:^\\W*lesbian)", "i") -/obj/item/gun/proc/reset_semicd() - semicd = FALSE + if(current_month == JUNE) + return //if it isn't june, don't do this easter egg -/obj/item/gun/attack(mob/M as mob, mob/user) - if(user.a_intent == INTENT_HARM) //Flogging - if(bayonet) - M.attackby(bayonet, user) - return - else - return ..() - return + if(!findtext(bian, living_human.generic_adjective)) + return //dont bother if we already are affected by it -/obj/item/gun/attack_obj(obj/O, mob/user) - if(user.a_intent == INTENT_HARM) - if(bayonet) - O.attackby(bayonet, user) - return - return ..() - -/obj/item/gun/attackby(obj/item/I, mob/user, params) - if(user.a_intent == INTENT_HARM) - return ..() - else if(istype(I, /obj/item/flashlight/seclite)) - if(!can_flashlight) - return ..() - var/obj/item/flashlight/seclite/S = I - if(!gun_light) - if(!user.transferItemToLoc(I, src)) - return - to_chat(user, "You click [S] into place on [src].") - set_gun_light(S) - update_gunlight() - alight = new(src) - if(loc == user) - alight.Grant(user) - else if(istype(I, /obj/item/kitchen/knife)) - var/obj/item/kitchen/knife/K = I - if(!can_bayonet || !K.bayonet || bayonet) //ensure the gun has an attachment point available, and that the knife is compatible with it. - return ..() - if(!user.transferItemToLoc(I, src)) - return - to_chat(user, "You attach [K] to [src]'s bayonet lug.") - bayonet = K - update_appearance() - - else - return ..() + if(istype(living_human.wear_neck, /obj/item/clothing/neck/tie/lesbian) || living_human.wear_neck.icon_state == "lesbian") + var/use_space = "[living_human.generic_adjective ? " " : ""]" + living_human.generic_adjective = "lesbian[use_space][living_human.generic_adjective]" //i actually don't remember the meme. it was something like lesbians will stop working if they see another with a gun. or something. /obj/item/gun/CtrlClick(mob/user) . = ..() @@ -666,7 +766,7 @@ if(!ishuman(user) || !ishuman(target)) return - if(semicd) + if(current_cooldown) return if(!can_shoot()) //Just because you can pull the trigger doesn't mean it can shoot. @@ -680,7 +780,7 @@ target.visible_message(span_warning("[user] points [src] at [target]'s head, ready to pull the trigger..."), \ span_userdanger("[user] points [src] at your head, ready to pull the trigger...")) - semicd = TRUE + current_cooldown = TRUE if(!bypass_timer && (!do_after(user, 100, target) || user.zone_selected != BODY_ZONE_PRECISE_MOUTH)) if(user) @@ -688,17 +788,18 @@ user.visible_message(span_notice("[user] decided not to shoot.")) else if(target && target.Adjacent(user)) target.visible_message(span_notice("[user] has decided to spare [target]."), span_notice("[user] has decided to spare your life!")) - semicd = FALSE + current_cooldown = FALSE return - semicd = FALSE + current_cooldown = FALSE target.visible_message(span_warning("[user] pulls the trigger!"), span_userdanger("[(user == target) ? "You pull" : "[user] pulls"] the trigger!")) if(chambered && chambered.BB && can_trigger_gun(user)) chambered.BB.damage *= 3 //Check is here for safeties and such, brain will be removed after - process_fire(target, user, TRUE, params, BODY_ZONE_HEAD) + if(!pre_fire(target, user, TRUE, params, BODY_ZONE_HEAD)) + return var/obj/item/organ/brain/brain_to_blast = target.getorganslot(ORGAN_SLOT_BRAIN) if(brain_to_blast) @@ -732,10 +833,55 @@ // We do it like this in case theres some specific gun behavior for adjusting spread, like bipods or folded stocks /obj/item/gun/proc/calculate_spread(mob/user, bonus_spread) - return bonus_spread + ///our final spread value + var/sprd = 0 + ///our randomized value after checking if we are wielded or not + var/randomized_gun_spread = 0 + ///bonus + var/randomized_bonus_spread + // do we have poor aim + var/poor_aim = FALSE + + //do we have bonus_spread ? If so, set sprd to it because it means a subtype's proc messed with it + sprd += bonus_spread + + //reset bonus_spread for poor aim... + bonus_spread = 0 + + // if we have poor aim, we fuck the shooter over + if(HAS_TRAIT(user, TRAIT_POOR_AIM)) + bonus_spread += 25 + poor_aim = TRUE + // then we randomize the bonus spread + randomized_bonus_spread = rand(poor_aim ? 10 : 0, bonus_spread) //poor aim is no longer just a nusiance + + //then, we mutiply previous bonus spread as it means dual wielding usually, it also means poor aim is also even more severe + randomized_bonus_spread *= DUALWIELD_PENALTY_EXTRA_MULTIPLIER + + // we will then calculate gun spread depending on if we are fully wielding (after do_after) the gun or not + randomized_gun_spread = rand(0, wielded_fully ? spread : spread_unwielded) + + //finally, we put it all together including if sprd has a value + sprd += randomized_gun_spread + randomized_bonus_spread + + //clamp it down to avoid guns with negative spread to have worse recoil... + sprd = clamp(sprd, 0, INFINITY) + + // im not sure what this does, i beleive its meant to make it so bullet spread goes in the opposite direction? get back to me on this - update,i have commented it out, however it appears be dapening spread. weird. + //sprd *= (rand() - 0.5) + + //coin flip if we mutiply output by -1 so spread isn't JUST to the right + if(prob(50)) + sprd *= -1 + + // then we round it up and send it! + sprd = round(sprd) + + return sprd /obj/item/gun/proc/simulate_recoil(mob/living/user, recoil_bonus = 0, firing_angle) var/total_recoil = calculate_recoil(user, recoil_bonus) + total_recoil = clamp(total_recoil, 0 , INFINITY) var/actual_angle = firing_angle + rand(-recoil_deviation, recoil_deviation) + 180 if(actual_angle > 360) @@ -747,6 +893,7 @@ /obj/item/gun/proc/handle_muzzle_flash(mob/living/user, firing_angle) var/atom/movable/flash_loc = user var/prev_light = light_range + if(!light_on && (light_range <= muzzle_flash_lum)) set_light_range(muzzle_flash_lum) set_light_color(muzzle_flash_color) @@ -895,4 +1042,58 @@ azoom = new() azoom.gun = src -#undef DUALWIELD_PENALTY_EXTRA_MULTIPLIER +/obj/item/gun/proc/build_firemodes() + if(FIREMODE_FULLAUTO in gun_firemodes) + AddComponent(/datum/component/automatic_fire, fire_delay) + SEND_SIGNAL(src, COMSIG_GUN_DISABLE_AUTOFIRE) + var/datum/action/item_action/our_action + + if(gun_firemodes.len > 1) + our_action = new /datum/action/item_action/toggle_firemode(src) + + for(var/i=1, i <= gun_firemodes.len+1, i++) + if(default_firemode == gun_firemodes[i]) + firemode_index = i + if(gun_firemodes[i] == FIREMODE_FULLAUTO) + SEND_SIGNAL(src, COMSIG_GUN_ENABLE_AUTOFIRE) + if(our_action) + our_action.UpdateButtonIcon() + return + + firemode_index = 1 + CRASH("default_firemode isn't in the gun_firemodes list of [src.type]!! Defaulting to 1!!") + +/obj/item/gun/ui_action_click(mob/user, actiontype) + if(istype(actiontype, /datum/action/item_action/toggle_firemode)) + fire_select(user) + else + ..() + +/obj/item/gun/proc/fire_select(mob/living/carbon/human/user) + + //gun_firemodes = list(FIREMODE_SEMIAUTO, FIREMODE_BURST, FIREMODE_FULLAUTO, FIREMODE_OTHER) + + firemode_index++ + if(firemode_index > gun_firemodes.len) + firemode_index = 1 //reset to the first index if it's over the limit. Byond arrays start at 1 instead of 0, hence why its set to 1. + + var/current_firemode = gun_firemodes[firemode_index] + if(current_firemode == FIREMODE_FULLAUTO) + SEND_SIGNAL(src, COMSIG_GUN_ENABLE_AUTOFIRE) + else + SEND_SIGNAL(src, COMSIG_GUN_DISABLE_AUTOFIRE) +//wawa + to_chat(user, "Switched to [gun_firenames[current_firemode]].") + playsound(user, 'sound/weapons/gun/general/selector.ogg', 100, TRUE) + update_appearance() + for(var/datum/action/current_action as anything in actions) + current_action.UpdateButtonIcon() + +/datum/action/item_action/toggle_firemode/UpdateButtonIcon(status_only = FALSE, force = FALSE) + var/obj/item/gun/our_gun = target + + var/current_firemode = our_gun.gun_firemodes[our_gun.firemode_index] + //tldr; if we have adjust_fire_select_icon_state_on_safety as true, we append "safety_" to the prefix, otherwise nothing. + var/safety_prefix = "[our_gun.adjust_fire_select_icon_state_on_safety ? "[our_gun.safety ? "safety_" : ""]" : ""]" + button_icon_state = "[safety_prefix][our_gun.fire_select_icon_state_prefix][current_firemode]" + return ..() diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm index 37b8ceea801c..e5345c0eab45 100644 --- a/code/modules/projectiles/guns/ballistic.dm +++ b/code/modules/projectiles/guns/ballistic.dm @@ -58,9 +58,9 @@ ///Compatible magazines with the gun var/mag_type = /obj/item/ammo_box/magazine/m10mm //Removes the need for max_ammo and caliber info ///Whether the sprite has a visible magazine or not - var/mag_display = FALSE + var/show_magazine_on_sprite = FALSE ///Whether the sprite has a visible ammo display or not - var/mag_display_ammo = FALSE + var/show_magazine_on_sprite_ammo = FALSE ///Whether the sprite has a visible indicator for being empty or not. var/empty_indicator = FALSE ///Whether the gun alarms when empty or not. @@ -68,7 +68,7 @@ ///Do we eject the magazine upon runing out of ammo? var/empty_autoeject = FALSE ///Whether the gun supports multiple special mag types - var/special_mags = FALSE + var/unique_mag_sprites_for_variants = FALSE ///The bolt type of the gun, affects quite a bit of functionality, see combat.dm defines for bolt types: BOLT_TYPE_STANDARD; BOLT_TYPE_LOCKING; BOLT_TYPE_OPEN; BOLT_TYPE_NO_BOLT var/bolt_type = BOLT_TYPE_STANDARD ///Used for locking bolt and open bolt guns. Set a bit differently for the two but prevents firing when true for both. @@ -126,7 +126,7 @@ if (suppressed) . += "[icon_state]_suppressor" if (magazine) - if (special_mags) + if (unique_mag_sprites_for_variants) . += "[icon_state]_mag_[magazine.base_icon_state]" if (!magazine.ammo_count()) . += "[icon_state]_mag_empty" @@ -191,6 +191,7 @@ else playsound(src, rack_sound, rack_sound_volume, rack_sound_vary) update_appearance() + SEND_SIGNAL(src, COMSIG_UPDATE_AMMO_HUD) ///Drops the bolt from a locked position /obj/item/gun/ballistic/proc/drop_bolt(mob/user = null) @@ -217,6 +218,7 @@ if (bolt_type == BOLT_TYPE_OPEN && !bolt_locked) chamber_round(TRUE) update_appearance() + SEND_SIGNAL(src, COMSIG_UPDATE_AMMO_HUD) return TRUE else to_chat(user, "You cannot seem to get \the [src] out of your hands!") @@ -237,6 +239,7 @@ if (display_message) to_chat(user, "You pull the [magazine_wording] out of \the [src].") update_appearance() + SEND_SIGNAL(src, COMSIG_UPDATE_AMMO_HUD) if (tac_load) if(do_after(user, tactical_reload_delay, TRUE, src)) if (insert_magazine(user, tac_load, FALSE)) @@ -249,6 +252,7 @@ if(user) user.put_in_hands(old_mag) update_appearance() + SEND_SIGNAL(src, COMSIG_UPDATE_AMMO_HUD) /obj/item/gun/ballistic/can_shoot() if(safety) @@ -303,11 +307,6 @@ return return FALSE -/obj/item/gun/ballistic/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0) - if (sawn_off) - bonus_spread += SAWN_OFF_ACC_PENALTY - . = ..() - ///Installs a new suppressor, assumes that the suppressor is already in the contents of src /obj/item/gun/ballistic/proc/install_suppressor(obj/item/suppressor/S) suppressed = S @@ -351,8 +350,11 @@ bolt_locked = TRUE update_appearance() -/obj/item/gun/ballistic/afterattack() +/obj/item/gun/ballistic/pre_fire(atom/target, mob/living/user, message = TRUE, flag, params = null, zone_override = "", bonus_spread = 0, dual_wielded_gun = FALSE) prefire_empty_checks() + return ..() + +/obj/item/gun/ballistic/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0, burst_firing = FALSE, spread_override = 0, iteration = 0) . = ..() //The gun actually firing postfire_empty_checks(.) diff --git a/code/modules/projectiles/guns/ballistic/assault.dm b/code/modules/projectiles/guns/ballistic/assault.dm index d0b69480a106..9d97dc627bd4 100644 --- a/code/modules/projectiles/guns/ballistic/assault.dm +++ b/code/modules/projectiles/guns/ballistic/assault.dm @@ -1,10 +1,10 @@ /obj/item/gun/ballistic/automatic/assault - burst_size = 1 - actions_types = list() - wield_delay = 0.7 SECONDS + gun_firemodes = list(FIREMODE_SEMIAUTO, FIREMODE_FULLAUTO) + default_firemode = FIREMODE_SEMIAUTO + wield_delay = 0.8 SECONDS wield_slowdown = 0.6 - fire_delay = 1 + fire_delay = 0.2 SECONDS load_sound = 'sound/weapons/gun/rifle/ar_reload.ogg' load_empty_sound = 'sound/weapons/gun/rifle/ar_reload.ogg' @@ -17,18 +17,20 @@ /obj/item/gun/ballistic/automatic/assault/calculate_recoil(mob/user, recoil_bonus = 0) var/gunslinger_bonus = 2 var/total_recoil = recoil_bonus + if(HAS_TRAIT(user, TRAIT_GUNSLINGER)) //gunslinger penalty total_recoil += gunslinger_bonus - total_recoil = clamp(total_recoil,0,INFINITY) - return total_recoil + + return ..(user, total_recoil) /obj/item/gun/ballistic/automatic/assault/calculate_spread(mob/user, bonus_spread) - var/gunslinger_bonus = 8 + var/gunslinger_bonus = 16 var/total_spread = bonus_spread + if(HAS_TRAIT(user, TRAIT_GUNSLINGER)) //gunslinger penalty total_spread += gunslinger_bonus - total_spread = clamp(total_spread,0,INFINITY) - return total_spread + + return ..(user, total_spread) /obj/item/gun/ballistic/automatic/assault/skm name = "\improper SKM-24" @@ -44,8 +46,8 @@ icon_state = "skm" item_state = "skm" - mag_display = TRUE - special_mags = TRUE + show_magazine_on_sprite = TRUE + unique_mag_sprites_for_variants = TRUE weapon_weight = WEAPON_MEDIUM w_class = WEIGHT_CLASS_BULKY slot_flags = ITEM_SLOT_BACK @@ -55,9 +57,7 @@ spread = 1 wield_delay = 0.7 SECONDS -/obj/item/gun/ballistic/automatic/assault/skm/ComponentInitialize() - . = ..() - AddComponent(/datum/component/automatic_fire, 0.2 SECONDS) + fire_delay = 0.2 SECONDS /obj/item/gun/ballistic/automatic/assault/skm/pirate name = "\improper Chopper" @@ -82,22 +82,21 @@ fire_sound = 'sound/weapons/gun/rifle/m16.ogg' icon_state = "p16" item_state = "p16" - mag_display = TRUE + show_magazine_on_sprite = TRUE w_class = WEIGHT_CLASS_BULKY slot_flags = ITEM_SLOT_BACK mag_type = /obj/item/ammo_box/magazine/p16 spread = 2 wield_delay = 0.5 SECONDS + + fire_delay = 0.18 SECONDS + rack_sound = 'sound/weapons/gun/rifle/m16_cocked.ogg' load_sound = 'sound/weapons/gun/rifle/m16_reload.ogg' load_empty_sound = 'sound/weapons/gun/rifle/m16_reload.ogg' eject_sound = 'sound/weapons/gun/rifle/m16_unload.ogg' eject_empty_sound = 'sound/weapons/gun/rifle/m16_unload.ogg' -/obj/item/gun/ballistic/automatic/assault/p16/ComponentInitialize() - . = ..() - AddComponent(/datum/component/automatic_fire, 0.2 SECONDS) - /obj/item/gun/ballistic/automatic/assault/p16/minutemen name = "\improper CM-16" desc = "The standard-issue rifle of CLIP and an extensively modified reproduction of the P-16. Chambered in 5.56mm." @@ -106,72 +105,56 @@ /obj/item/gun/ballistic/automatic/assault/swiss_cheese name = "\improper Swiss Cheese" - desc = "An ancient longarm famous for its boxy, modular design. The DMA on this unit is, sadly, broken. Uses 5.56mm ammunition for Matter mode." + desc = "An ancient longarm famous for its boxy, modular design. Mass produced by the Terran Confederation in ages past, these often mutiple century old designs have survied due to their sheer ruggedness. The DMA on this unit is sadly broken, but these rifles are known for their excellent burst fire. Uses 5.56mm ammunition for Matter mode." icon = 'icons/obj/guns/48x32guns.dmi' fire_sound = 'sound/weapons/gun/rifle/swiss.ogg' icon_state = "swiss" item_state = "swiss" - mag_display = TRUE + show_magazine_on_sprite = TRUE empty_indicator = TRUE burst_size = 3 - fire_delay = 1.5 + burst_delay = 0.08 SECONDS + fire_delay = 0.25 SECONDS spread = 8 weapon_weight = WEAPON_MEDIUM + gun_firenames = list(FIREMODE_SEMIAUTO = "matter semi-auto", FIREMODE_BURST = "matter burst fire", FIREMODE_FULLAUTO = "matter full auto", FIREMODE_OTHER = "hybrid") + gun_firemodes = list(FIREMODE_SEMIAUTO, FIREMODE_BURST, FIREMODE_FULLAUTO, FIREMODE_OTHER) + + fire_select_icon_state_prefix = "swisschesse_" + w_class = WEIGHT_CLASS_BULKY slot_flags = ITEM_SLOT_BACK mag_type = /obj/item/ammo_box/magazine/swiss - actions_types = list(/datum/action/item_action/toggle_firemode) manufacturer = MANUFACTURER_SOLARARMORIES spread = 8 spread_unwielded = 15 -/obj/item/gun/ballistic/automatic/assault/swiss_cheese/ComponentInitialize() - . = ..() - AddComponent(/datum/component/automatic_fire, 0.65 SECONDS) - -/obj/item/gun/ballistic/automatic/assault/swiss_cheese/afterattack(atom/target, mob/living/user, flag, params) - if(select == 2) - to_chat(user, "You hear a strange sound from the DMA unit. It doesn't appear to be operational.") - return - else - return ..() - -/obj/item/gun/ballistic/automatic/assault/swiss_cheese/burst_select() - var/mob/living/carbon/human/user = usr - switch(select) - if(1) - select = 2 - to_chat(user, "You switch to Hybrid.") - if(2) - select = 1 - burst_size = initial(burst_size) - fire_delay = initial(fire_delay) - to_chat(user, "You switch to [burst_size]-rnd Matter.") - - playsound(user, 'sound/weapons/gun/general/selector.ogg', 100, TRUE) - update_appearance() - for(var/datum/action/action as anything in actions) - action.UpdateButtonIcon() - -#define E40_BALLISTIC_MODE 1 -#define E40_LASER_MODE 2 +/obj/item/gun/ballistic/automatic/assault/swiss_cheese/process_other(atom/target, mob/living/user, message = TRUE, flag, params = null, zone_override = "", bonus_spread = 0) + to_chat(user, "You hear a strange sound from the DMA unit. It doesn't appear to be operational.") /obj/item/gun/ballistic/automatic/assault/e40 name = "\improper E-40 Hybrid Rifle" - desc = "A Hybrid Assault Rifle, best known for being having a dual ballistic and laser system. Chambered in .229 Eoehoma caseless, and uses energy for lasers." + desc = "A Hybrid Assault Rifle, best known for being having a dual ballistic/laser system along with an advanced ammo counter. Once an icon for bounty hunters, age has broken most down, so these end up in collector's hands or as shoddy Frontiersmen laser SMG conversions when in their inheritted stockpiles. But if one were to find one in working condition, it would be just as formidable as back then. Chambered in .229 Eoehoma caseless, and uses energy for lasers." icon = 'icons/obj/guns/48x32guns.dmi' icon_state = "e40" item_state = "e40" mag_type = /obj/item/ammo_box/magazine/e40 can_suppress = FALSE - actions_types = list(/datum/action/item_action/toggle_firemode) var/obj/item/gun/energy/laser/e40_laser_secondary/secondary + fire_select_icon_state_prefix = "e40_" + + fire_delay = 0.18 SECONDS + recoil_unwielded = 3 + + gun_firenames = list(FIREMODE_FULLAUTO = "full auto ballistic", FIREMODE_OTHER = "full auto laser") + gun_firemodes = list(FIREMODE_FULLAUTO, FIREMODE_OTHER) + default_firemode = FIREMODE_OTHER weapon_weight = WEAPON_MEDIUM w_class = WEIGHT_CLASS_BULKY slot_flags = ITEM_SLOT_BACK - mag_display = TRUE + show_magazine_on_sprite = TRUE empty_indicator = TRUE fire_sound = 'sound/weapons/gun/laser/e40_bal.ogg' manufacturer = MANUFACTURER_EOEHOMA @@ -179,56 +162,84 @@ /obj/item/gun/ballistic/automatic/assault/e40/Initialize() . = ..() secondary = new /obj/item/gun/energy/laser/e40_laser_secondary(src) - AddComponent(/datum/component/automatic_fire, 0.2 SECONDS) RegisterSignal(secondary, COMSIG_ATOM_UPDATE_ICON, PROC_REF(secondary_update_icon)) SEND_SIGNAL(secondary, COMSIG_GUN_DISABLE_AUTOFIRE) update_appearance() +/obj/item/gun/ballistic/automatic/assault/e40/ComponentInitialize() + . = ..() + AddComponent(/datum/component/ammo_hud/eoehoma) // at long last... the ammo counter on the side of the sprite is functional... + /obj/item/gun/ballistic/automatic/assault/e40/do_autofire(datum/source, atom/target, mob/living/shooter, params) - if(select == E40_LASER_MODE) - secondary.do_autofire(source, target, shooter, params) - else + var/current_firemode = gun_firemodes[firemode_index] + if(current_firemode != FIREMODE_OTHER) return ..() + return secondary.do_autofire(source, target, shooter, params) /obj/item/gun/ballistic/automatic/assault/e40/do_autofire_shot(datum/source, atom/target, mob/living/shooter, params) - if(select == E40_LASER_MODE) - secondary.do_autofire_shot(source, target, shooter, params) - else + var/current_firemode = gun_firemodes[firemode_index] + if(current_firemode != FIREMODE_OTHER) return ..() + return secondary.do_autofire_shot(source, target, shooter, params) /obj/item/gun/ballistic/automatic/assault/e40/process_fire(atom/target, mob/living/user, message, params, zone_override, bonus_spread) - if(select == E40_LASER_MODE) - secondary.process_fire(target, user, message, params, zone_override, bonus_spread) - else + var/current_firemode = gun_firemodes[firemode_index] + if(current_firemode != FIREMODE_OTHER) return ..() + return secondary.process_fire(target, user, message, params, zone_override, bonus_spread) /obj/item/gun/ballistic/automatic/assault/e40/can_shoot() - if(select == E40_LASER_MODE) - return secondary.can_shoot() - else + var/current_firemode = gun_firemodes[firemode_index] + if(current_firemode != FIREMODE_OTHER) return ..() + return secondary.can_shoot() /obj/item/gun/ballistic/automatic/assault/e40/afterattack(atom/target, mob/living/user, flag, params) - if(select == E40_LASER_MODE) - secondary.afterattack(target, user, flag, params) - else + var/current_firemode = gun_firemodes[firemode_index] + if(current_firemode != FIREMODE_OTHER) return ..() + return secondary.afterattack(target, user, flag, params) /obj/item/gun/ballistic/automatic/assault/e40/attackby(obj/item/attack_obj, mob/user, params) if(istype(attack_obj, /obj/item/stock_parts/cell/gun)) - secondary.attackby(attack_obj, user, params) + return secondary.attackby(attack_obj, user, params) if(istype(attack_obj, /obj/item/screwdriver)) - secondary.screwdriver_act(user, attack_obj,) - else - ..() + return secondary.screwdriver_act(user, attack_obj,) + return ..() + /obj/item/gun/ballistic/automatic/assault/e40/can_shoot() - if(select == E40_LASER_MODE) - return secondary.can_shoot() - return ..() + var/current_firemode = gun_firemodes[firemode_index] + if(current_firemode != FIREMODE_OTHER) + return ..() + return secondary.can_shoot() + +/obj/item/gun/ballistic/automatic/assault/e40/on_wield(obj/item/source, mob/user) + wielded = TRUE + secondary.wielded = TRUE + INVOKE_ASYNC(src, .proc.do_wield, user) + +/obj/item/gun/ballistic/automatic/assault/e40/do_wield(mob/user) + . = ..() + secondary.wielded_fully = wielded_fully + +/// triggered on unwield of two handed item +/obj/item/gun/ballistic/automatic/assault/e40/on_unwield(obj/item/source, mob/user) + . = ..() + secondary.wielded_fully = FALSE + secondary.wielded = FALSE + /obj/item/gun/ballistic/automatic/assault/e40/proc/secondary_update_icon() - update_icon() + update_appearance() + SEND_SIGNAL(src, COMSIG_UPDATE_AMMO_HUD) + +/obj/item/gun/ballistic/automatic/assault/e40/process_other(atom/target, mob/living/user, message = TRUE, flag, params = null, zone_override = "", bonus_spread = 0) + secondary.pre_fire(target, user, message, flag, params, zone_override, bonus_spread) + + +/obj/item/gun/ballistic/automatic/powered/get_cell() + return cell /obj/item/gun/ballistic/automatic/assault/e40/update_overlays() . = ..() @@ -244,41 +255,33 @@ . += "[icon_state]_cell" -/obj/item/gun/ballistic/automatic/assault/e40/burst_select() - var/mob/living/carbon/human/user = usr - switch(select) - if(NONE) - select = E40_BALLISTIC_MODE - to_chat(user, "You switch to full automatic ballistic.") - if(E40_BALLISTIC_MODE) - select = E40_LASER_MODE - to_chat(user, "You switch to full auto laser.") - SEND_SIGNAL(src, COMSIG_GUN_DISABLE_AUTOFIRE) - SEND_SIGNAL(secondary, COMSIG_GUN_ENABLE_AUTOFIRE) - if(E40_LASER_MODE) - select = E40_BALLISTIC_MODE - to_chat(user, "You switch to full automatic ballistic.") - SEND_SIGNAL(src, COMSIG_GUN_ENABLE_AUTOFIRE) - SEND_SIGNAL(secondary, COMSIG_GUN_DISABLE_AUTOFIRE) - playsound(user, 'sound/weapons/empty.ogg', 100, TRUE) - update_icon() - return - - - /obj/item/gun/ballistic/automatic/assault/e40/toggle_safety(mob/user, silent=FALSE) . = ..() secondary.toggle_safety(user, silent=TRUE) +/obj/item/gun/ballistic/automatic/assault/e40/fire_select(mob/living/carbon/human/user) + . = ..() + var/current_firemode = gun_firemodes[firemode_index] + if(current_firemode == FIREMODE_OTHER) + SEND_SIGNAL(src, COMSIG_GUN_ENABLE_AUTOFIRE) + SEND_SIGNAL(src, COMSIG_GUN_SET_AUTOFIRE_SPEED, secondary.fire_delay) + else + SEND_SIGNAL(src, COMSIG_GUN_SET_AUTOFIRE_SPEED, fire_delay) + SEND_SIGNAL(src, COMSIG_UPDATE_AMMO_HUD) + //laser /obj/item/gun/energy/laser/e40_laser_secondary name = "secondary e40 laser gun" - desc = "The laser component of a E-40 Hybrid Rifle. You probably shouldn't see this." + desc = "The laser component of a E-40 Hybrid Rifle. You probably shouldn't see this. If you can though, you should probably know lorewise, this is primary, the ballistic compontent in universe is secondary. Unfortunately, we cannot simulate this, So codewise this is secondary." fire_sound = 'sound/weapons/gun/laser/e40_las.ogg' w_class = WEIGHT_CLASS_NORMAL ammo_type = list(/obj/item/ammo_casing/energy/laser/assault) - fire_delay = 2 + fire_delay = 0.2 SECONDS + gun_firemodes = list(FIREMODE_FULLAUTO) + default_firemode = FIREMODE_FULLAUTO + + spread_unwielded = 20 //techinically a battle rifle, i'm putting it here for organisation sake @@ -294,12 +297,13 @@ internal_magazine = TRUE mag_type = /obj/item/ammo_box/magazine/internal/vickland fire_sound = 'sound/weapons/gun/rifle/vickland.ogg' - burst_size = 0 actions_types = list() manufacturer = MANUFACTURER_HUNTERSPRIDE rack_sound = 'sound/weapons/gun/rifle/ar_cock.ogg' + fire_delay = 0.4 SECONDS + spread_unwielded = 25 recoil = 0 recoil_unwielded = 4 diff --git a/code/modules/projectiles/guns/ballistic/automatic.dm b/code/modules/projectiles/guns/ballistic/automatic.dm index abc0bcbc9bcb..c0ccf71d513e 100644 --- a/code/modules/projectiles/guns/ballistic/automatic.dm +++ b/code/modules/projectiles/guns/ballistic/automatic.dm @@ -1,10 +1,10 @@ + /obj/item/gun/ballistic/automatic w_class = WEIGHT_CLASS_NORMAL - var/select = 1 can_suppress = TRUE - burst_size = 3 - fire_delay = 2 - actions_types = list(/datum/action/item_action/toggle_firemode) + + gun_firemodes = list(FIREMODE_SEMIAUTO) + default_firemode = FIREMODE_SEMIAUTO semi_auto = TRUE fire_sound = 'sound/weapons/gun/smg/shot.ogg' fire_sound_volume = 90 @@ -14,6 +14,7 @@ weapon_weight = WEAPON_MEDIUM pickup_sound = 'sound/items/handling/rifle_pickup.ogg' + fire_delay = 0.4 SECONDS wield_delay = 1 SECONDS spread = 0 spread_unwielded = 13 @@ -21,36 +22,6 @@ recoil_unwielded = 4 wield_slowdown = 0.35 -/obj/item/gun/ballistic/automatic/update_overlays() - . = ..() - if(!select) - . += "[initial(icon_state)]_semi" - if(select == 1) - . += "[initial(icon_state)]_burst" - -/obj/item/gun/ballistic/automatic/ui_action_click(mob/user, actiontype) - if(istype(actiontype, /datum/action/item_action/toggle_firemode)) - burst_select() - else - ..() - -/obj/item/gun/ballistic/automatic/proc/burst_select() - var/mob/living/carbon/human/user = usr - select = !select - if(!select) - burst_size = 1 - fire_delay = 0 - to_chat(user, "You switch to semi-automatic.") - else - burst_size = initial(burst_size) - fire_delay = initial(fire_delay) - to_chat(user, "You switch to [burst_size]-rnd burst.") - - playsound(user, 'sound/weapons/gun/general/selector.ogg', 100, TRUE) - update_appearance() - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon() // SNIPER // @@ -68,7 +39,6 @@ recoil = 2 weapon_weight = WEAPON_HEAVY mag_type = /obj/item/ammo_box/magazine/sniper_rounds - fire_delay = 40 burst_size = 1 w_class = WEIGHT_CLASS_NORMAL zoomable = TRUE @@ -76,13 +46,13 @@ zoom_out_amt = 5 slot_flags = ITEM_SLOT_BACK actions_types = list() - mag_display = TRUE + show_magazine_on_sprite = TRUE manufacturer = MANUFACTURER_SCARBOROUGH spread = -5 spread_unwielded = 20 - recoil = 0 - recoil_unwielded = 4 + recoil = 5 + recoil_unwielded = 50 wield_slowdown = 1 wield_delay = 1.3 SECONDS @@ -96,38 +66,36 @@ EMPTY_GUN_HELPER(automatic/sniper_rifle/syndicate) // Old Semi-Auto Rifle // -/obj/item/gun/ballistic/automatic/surplus +/obj/item/gun/ballistic/automatic/surplus //TODO: NEEDS TO BE REPLACED WITH PISTOL CARBINES OR LOWCAL SEMI-AUTO RIFLES name = "surplus rifle" desc = "One of countless cheap, obsolete rifles found throughout the Frontier. Its lack of lethality renders it mostly a deterrent. Chambered in 10mm." icon_state = "surplus" item_state = "moistnugget" weapon_weight = WEAPON_HEAVY mag_type = /obj/item/ammo_box/magazine/m10mm/rifle - fire_delay = 10 + fire_delay = 0.5 SECONDS burst_size = 1 can_unsuppress = TRUE can_suppress = TRUE w_class = WEIGHT_CLASS_HUGE slot_flags = ITEM_SLOT_BACK - actions_types = list() - mag_display = TRUE + show_magazine_on_sprite = TRUE // Laser rifle (rechargeable magazine) // -/obj/item/gun/ballistic/automatic/laser +/obj/item/gun/ballistic/automatic/laser //TODO: REMOVE name = "laser rifle" desc = "Though sometimes mocked for the relatively weak firepower of their energy weapons, the logistic miracle of rechargeable ammunition has given Nanotrasen a decisive edge over many a foe." icon_state = "oldrifle" item_state = "arg" mag_type = /obj/item/ammo_box/magazine/recharge - fire_delay = 2 + fire_delay = 0.2 SECONDS can_suppress = FALSE burst_size = 0 - actions_types = list() fire_sound = 'sound/weapons/laser.ogg' casing_ejector = FALSE -/obj/item/gun/ballistic/automatic/ebr +/obj/item/gun/ballistic/automatic/ebr //fuck this gun, its getting wiped soon enough name = "\improper M514 EBR" desc = "A reliable, high-powered battle rifle often found in the hands of Syndicate personnel and remnants, chambered in .308. Effective against personnel and armor alike." icon = 'icons/obj/guns/48x32guns.dmi' @@ -136,13 +104,12 @@ EMPTY_GUN_HELPER(automatic/sniper_rifle/syndicate) icon_state = "ebr" item_state = "ebr" zoomable = TRUE - mag_display = TRUE + show_magazine_on_sprite = TRUE weapon_weight = WEAPON_MEDIUM w_class = WEIGHT_CLASS_BULKY mag_type = /obj/item/ammo_box/magazine/ebr fire_sound = 'sound/weapons/gun/rifle/shot_alt2.ogg' burst_size = 0 - actions_types = list() manufacturer = MANUFACTURER_SCARBOROUGH wield_slowdown = 2 @@ -158,7 +125,7 @@ EMPTY_GUN_HELPER(automatic/ebr) icon_state = "gal" item_state = "gal" zoomable = TRUE - mag_display = TRUE + show_magazine_on_sprite = TRUE weapon_weight = WEAPON_MEDIUM w_class = WEIGHT_CLASS_BULKY mag_type = /obj/item/ammo_box/magazine/gal @@ -169,6 +136,8 @@ EMPTY_GUN_HELPER(automatic/ebr) wield_slowdown = 2 spread = -4 + fire_select_icon_state_prefix = "clip_" + adjust_fire_select_icon_state_on_safety = TRUE /obj/item/gun/ballistic/automatic/gal/inteq name = "\improper SsG-04" @@ -185,5 +154,5 @@ EMPTY_GUN_HELPER(automatic/ebr) can_suppress = FALSE actions_types = list() can_bayonet = FALSE - mag_display = TRUE + show_magazine_on_sprite = TRUE weapon_weight = WEAPON_LIGHT diff --git a/code/modules/projectiles/guns/ballistic/gauss.dm b/code/modules/projectiles/guns/ballistic/gauss.dm index 8fce353d8b22..c50f906e4eba 100644 --- a/code/modules/projectiles/guns/ballistic/gauss.dm +++ b/code/modules/projectiles/guns/ballistic/gauss.dm @@ -9,9 +9,9 @@ load_sound = 'sound/weapons/gun/gauss/rifle_reload.ogg' can_suppress = FALSE burst_size = 1 - fire_delay = 3 + fire_delay = 0.3 SECONDS spread = 0 - mag_display = TRUE + show_magazine_on_sprite = TRUE empty_indicator = TRUE weapon_weight = WEAPON_MEDIUM w_class = WEIGHT_CLASS_BULKY @@ -25,6 +25,7 @@ recoil_unwielded = 4 wield_slowdown = 0.75 wield_delay = 1 SECONDS + fire_select_icon_state_prefix = "pellet_" /obj/item/gun/ballistic/automatic/powered/gauss/modelh name = "Model H" @@ -37,14 +38,15 @@ cell_type = /obj/item/stock_parts/cell/gun/solgov slot_flags = ITEM_SLOT_BELT w_class = WEIGHT_CLASS_SMALL - fire_delay = 0 //pistol - mag_display = FALSE + fire_delay = 0.6 SECONDS //pistol, but heavy caliber. + show_magazine_on_sprite = FALSE empty_indicator = FALSE manufacturer = MANUFACTURER_SOLARARMORIES - recoil = 1 + recoil = 2 recoil_unwielded = 4 - spread = 3 + spread = 6 spread_unwielded = 12 + fire_select_icon_state_prefix = "slug_" /obj/item/gun/ballistic/automatic/powered/gauss/modelh/suns desc = "A standard-issue pistol exported from the Solarian Confederation. It fires slow flesh-rending ferromagnetic slugs at a high energy cost, however they are ineffective on any armor. It is painted in the colors of SUNS." @@ -62,13 +64,13 @@ fire_sound = 'sound/weapons/gun/gauss/claris.ogg' load_sound = 'sound/weapons/gun/gauss/sniper_reload.ogg' cell_type = /obj/item/stock_parts/cell/gun/solgov - fire_delay = 2 + fire_delay = 0.4 SECONDS bolt_type = BOLT_TYPE_NO_BOLT internal_magazine = TRUE - casing_ejector = FALSE - mag_display = FALSE + show_magazine_on_sprite = FALSE empty_indicator = FALSE manufacturer = MANUFACTURER_SOLARARMORIES + fire_select_icon_state_prefix = "pellet_" /obj/item/gun/ballistic/automatic/powered/gauss/claris/suns desc = "An antiquated Solarian rifle. Chambered in ferromagnetic pellets, just as the founding Solarians intended. Evidently, SUNS' founders echo the sentiment, as it appears to be painted in their colors." @@ -85,17 +87,19 @@ fire_sound = 'sound/weapons/gun/gauss/gar.ogg' load_sound = 'sound/weapons/gun/gauss/rifle_reload.ogg' cell_type = /obj/item/stock_parts/cell/gun/solgov - burst_size = 2 - fire_delay = 1 + burst_size = 1 + + fire_delay = 0.2 SECONDS + actions_types = list() empty_indicator = FALSE manufacturer = MANUFACTURER_SOLARARMORIES - wield_delay = 0.7 SECONDS + gun_firemodes = list(FIREMODE_SEMIAUTO, FIREMODE_FULLAUTO) + default_firemode = FIREMODE_SEMIAUTO -/obj/item/gun/ballistic/automatic/powered/gauss/gar/ComponentInitialize() - . = ..() - AddComponent(/datum/component/automatic_fire, 0.2 SECONDS) + wield_delay = 0.7 SECONDS + fire_select_icon_state_prefix = "lance_" /obj/item/gun/ballistic/automatic/powered/gauss/gar/suns desc = "A Solarian carbine, unusually modern for its producers. It's just modern enough for SUNS, however, who have painted the weapon in their colors. Launches ferromagnetic lances at alarming speeds." diff --git a/code/modules/projectiles/guns/ballistic/hmg.dm b/code/modules/projectiles/guns/ballistic/hmg.dm index 359a9e13e31e..4e9abd0cd70c 100644 --- a/code/modules/projectiles/guns/ballistic/hmg.dm +++ b/code/modules/projectiles/guns/ballistic/hmg.dm @@ -7,7 +7,10 @@ burst_size = 1 actions_types = list(/datum/action/item_action/deploy_bipod) //this is on hmg, as I need the same mechanics for a future gun. ideally, this would be an attachment, but that's still pending drag_slowdown = 1.5 - fire_delay = 1 + fire_delay = 0.1 SECONDS + + gun_firemodes = list(FIREMODE_FULLAUTO) + default_firemode = FIREMODE_FULLAUTO spread = 4 spread_unwielded = 80 @@ -114,24 +117,26 @@ retract_bipod(user=user) /obj/item/gun/ballistic/automatic/hmg/calculate_recoil(mob/user, recoil_bonus = 0) - var/gunslinger_bonus = 1 + var/gunslinger_bonus = 2 var/total_recoil = recoil_bonus + if(bipod_deployed) total_recoil += deploy_recoil_bonus if(HAS_TRAIT(user, TRAIT_GUNSLINGER)) //gunslinger penalty total_recoil += gunslinger_bonus - total_recoil = clamp(total_recoil,0,INFINITY) - return total_recoil + + return ..(user, total_recoil) /obj/item/gun/ballistic/automatic/hmg/calculate_spread(mob/user, bonus_spread) - var/gunslinger_bonus = 4 + var/gunslinger_bonus = 20 var/total_spread = bonus_spread + if(bipod_deployed) total_spread += deploy_spread_bonus if(HAS_TRAIT(user, TRAIT_GUNSLINGER)) //gunslinger penalty total_spread += gunslinger_bonus - total_spread = clamp(total_spread,0,INFINITY) - return total_spread + + return ..(user, total_spread) /obj/item/gun/ballistic/automatic/hmg/update_icon_state() @@ -155,9 +160,12 @@ mag_type = /obj/item/ammo_box/magazine/mm712x82 can_suppress = FALSE spread = 7 + + fire_delay = 0.1 SECONDS + bolt_type = BOLT_TYPE_OPEN - mag_display = TRUE - mag_display_ammo = TRUE + show_magazine_on_sprite = TRUE + show_magazine_on_sprite_ammo = TRUE tac_reloads = FALSE fire_sound = 'sound/weapons/gun/l6/shot.ogg' rack_sound = 'sound/weapons/gun/l6/l6_rack.ogg' @@ -165,10 +173,6 @@ manufacturer = MANUFACTURER_SCARBOROUGH var/cover_open = FALSE -/obj/item/gun/ballistic/automatic/hmg/l6_saw/ComponentInitialize() - . = ..() - AddComponent(/datum/component/automatic_fire, 0.1 SECONDS) - /obj/item/gun/ballistic/automatic/hmg/l6_saw/examine(mob/user) . = ..() . += "alt + click to [cover_open ? "close" : "open"] the dust cover." @@ -217,16 +221,17 @@ item_state = "arg" mag_type = /obj/item/ammo_box/magazine/rifle47x33mm spread = 7 + + fire_delay = 0.1 SECONDS + + fire_select_icon_state_prefix = "caseless_" + can_suppress = FALSE can_bayonet = FALSE - mag_display = TRUE + show_magazine_on_sprite = TRUE w_class = WEIGHT_CLASS_BULKY manufacturer = MANUFACTURER_SOLARARMORIES -/obj/item/gun/ballistic/automatic/hmg/solar/ComponentInitialize() - . = ..() - AddComponent(/datum/component/automatic_fire, 0.1 SECONDS) - /obj/item/gun/ballistic/automatic/hmg/skm_lmg name = "\improper SKM-24u" desc = "What appears to be a standard SKM-24 at first glance is actually a light machine gun conversion, with an extended, heavy barrel and overhauled internals. Its weight, bulk, and robust fire rate make it difficult to handle without using the bipod in a prone position or against appropriate cover such as a table. Chambered in 7.62x40mm CLIP." @@ -242,15 +247,18 @@ eject_sound = 'sound/weapons/gun/rifle/skm_unload.ogg' eject_empty_sound = 'sound/weapons/gun/rifle/skm_unload.ogg' + gun_firemodes = list(FIREMODE_SEMIAUTO, FIREMODE_FULLAUTO) + default_firemode = FIREMODE_SEMIAUTO - mag_display = TRUE - special_mags = TRUE + show_magazine_on_sprite = TRUE + unique_mag_sprites_for_variants = TRUE weapon_weight = WEAPON_MEDIUM w_class = WEIGHT_CLASS_BULKY slot_flags = ITEM_SLOT_BACK manufacturer = MANUFACTURER_IMPORT mag_type = /obj/item/ammo_box/magazine/skm_762_40 + fire_delay = 0.13 SECONDS spread = 7 //you can hipfire, but why? spread_unwielded = 25 @@ -265,7 +273,6 @@ /obj/item/gun/ballistic/automatic/hmg/skm_lmg/ComponentInitialize() . = ..() - AddComponent(/datum/component/automatic_fire, 0.13 SECONDS) //slower than other lmgs but faster than skm and most smgs AddElement(/datum/element/update_icon_updates_onmob) /obj/item/gun/ballistic/automatic/hmg/skm_lmg/extended //spawns with the proper extended magazine, for erts diff --git a/code/modules/projectiles/guns/ballistic/launchers.dm b/code/modules/projectiles/guns/ballistic/launchers.dm index 01644cd6e9bb..5619b039d488 100644 --- a/code/modules/projectiles/guns/ballistic/launchers.dm +++ b/code/modules/projectiles/guns/ballistic/launchers.dm @@ -11,7 +11,11 @@ fire_sound = 'sound/weapons/gun/general/grenade_launch.ogg' w_class = WEIGHT_CLASS_NORMAL bolt_type = BOLT_TYPE_NO_BOLT - fire_delay = 10 + fire_delay = 1 SECONDS + semi_auto = TRUE + has_safety = FALSE + safety = FALSE + gate_offset = 0 /obj/item/gun/ballistic/revolver/grenadelauncher/attackby(obj/item/A, mob/user, params) ..() @@ -35,7 +39,7 @@ fire_sound = 'sound/weapons/gun/general/grenade_launch.ogg' mag_type = /obj/item/ammo_box/magazine/m75 burst_size = 1 - fire_delay = 0 + fire_delay = 0.4 SECONDS actions_types = list() casing_ejector = FALSE @@ -50,7 +54,7 @@ w_class = WEIGHT_CLASS_BULKY can_suppress = FALSE burst_size = 1 - fire_delay = 0 + fire_delay = 0.4 SECONDS casing_ejector = FALSE weapon_weight = WEAPON_HEAVY bolt_type = BOLT_TYPE_NO_BOLT diff --git a/code/modules/projectiles/guns/ballistic/pistol.dm b/code/modules/projectiles/guns/ballistic/pistol.dm index 11aad5203361..c4d505bcb10c 100644 --- a/code/modules/projectiles/guns/ballistic/pistol.dm +++ b/code/modules/projectiles/guns/ballistic/pistol.dm @@ -5,8 +5,6 @@ w_class = WEIGHT_CLASS_SMALL mag_type = /obj/item/ammo_box/magazine/m10mm can_suppress = TRUE - burst_size = 1 - fire_delay = 0 //spam it as fast as you can actions_types = list() bolt_type = BOLT_TYPE_LOCKING fire_sound = 'sound/weapons/gun/pistol/shot.ogg' @@ -24,12 +22,16 @@ bolt_wording = "slide" weapon_weight = WEAPON_LIGHT pickup_sound = 'sound/items/handling/gun_pickup.ogg' - fire_delay = 1 manufacturer = MANUFACTURER_SCARBOROUGH + recoil = 0.5 // apogee wants bloom, this is a placeholder until then to simulate the same concept. + recoil_unwielded = 3 + recoil_backtime_multiplier = 1 + wield_delay = 0.2 SECONDS - spread = 2 - spread_unwielded = 5 + fire_delay = 0.2 SECONDS + spread = 5 + spread_unwielded = 7 wield_slowdown = 0.15 muzzleflash_iconstate = "muzzle_flash_light" @@ -62,7 +64,6 @@ EMPTY_GUN_HELPER(automatic/pistol) load_empty_sound = 'sound/weapons/gun/pistol/candor_reload.ogg' eject_sound = 'sound/weapons/gun/pistol/candor_unload.ogg' eject_empty_sound = 'sound/weapons/gun/pistol/candor_unload.ogg' - recoil = -2 EMPTY_GUN_HELPER(automatic/pistol/candor) @@ -89,7 +90,7 @@ EMPTY_GUN_HELPER(automatic/pistol/candor/factory) force = 14 mag_type = /obj/item/ammo_box/magazine/m50 can_suppress = FALSE - mag_display = TRUE + show_magazine_on_sprite = TRUE fire_sound = 'sound/weapons/gun/pistol/deagle.ogg' rack_sound = 'sound/weapons/gun/pistol/rack.ogg' lock_back_sound = 'sound/weapons/gun/pistol/slide_lock.ogg' @@ -99,11 +100,13 @@ EMPTY_GUN_HELPER(automatic/pistol/candor/factory) load_empty_sound = 'sound/weapons/gun/pistol/deagle_reload.ogg' eject_sound = 'sound/weapons/gun/pistol/deagle_unload.ogg' eject_empty_sound = 'sound/weapons/gun/pistol/deagle_unload.ogg' - fire_delay = 0.7 SECONDS - recoil = 1 - recoil_unwielded = 2 - spread = 4 - spread_unwielded = 7 + fire_delay = 0.6 SECONDS + recoil = 2 + recoil_unwielded = 5 + recoil_backtime_multiplier = 2 + + spread = 7 + spread_unwielded = 14 /obj/item/gun/ballistic/automatic/pistol/deagle/gold desc = "A gold-plated Desert Eagle folded over a million times by superior Martian gunsmiths. Uses .50 AE ammo." @@ -123,25 +126,11 @@ EMPTY_GUN_HELPER(automatic/pistol/candor/factory) mag_type = /obj/item/ammo_box/magazine/pistolm9mm can_suppress = FALSE burst_size = 3 - fire_delay = 2 - actions_types = list(/datum/action/item_action/toggle_firemode) + burst_delay = 0.1 SECONDS + fire_delay = 0.4 SECONDS + gun_firemodes = list(FIREMODE_SEMIAUTO, FIREMODE_BURST) + default_firemode = FIREMODE_SEMIAUTO -/obj/item/gun/ballistic/automatic/pistol/stickman - name = "flat gun" - desc = "A 2 dimensional gun.. what?" - icon_state = "flatgun" - manufacturer = MANUFACTURER_NONE - -/obj/item/gun/ballistic/automatic/pistol/stickman/pickup(mob/living/user) - SHOULD_CALL_PARENT(0) - to_chat(user, "As you try to pick up [src], it slips out of your grip..") - if(prob(50)) - to_chat(user, "..and vanishes from your vision! Where the hell did it go?") - qdel(src) - user.update_icons() - else - to_chat(user, "..and falls into view. Whew, that was a close one.") - user.dropItemToGround(src) /obj/item/gun/ballistic/automatic/pistol/commander name = "\improper Commander" @@ -236,6 +225,8 @@ EMPTY_GUN_HELPER(automatic/pistol/commander/inteq) eject_sound = 'sound/weapons/gun/pistol/mag_release.ogg' eject_empty_sound = 'sound/weapons/gun/pistol/mag_release.ogg' + fire_select_icon_state_prefix = "caseless_" + /obj/item/gun/ballistic/automatic/pistol/solgov/old icon_state = "pistole-c-old" @@ -246,7 +237,7 @@ EMPTY_GUN_HELPER(automatic/pistol/commander/inteq) weapon_weight = WEAPON_LIGHT w_class = WEIGHT_CLASS_SMALL mag_type = /obj/item/ammo_box/magazine/tec9 - mag_display = TRUE + show_magazine_on_sprite = TRUE load_sound = 'sound/weapons/gun/pistol/mag_insert.ogg' load_empty_sound = 'sound/weapons/gun/pistol/mag_insert.ogg' eject_sound = 'sound/weapons/gun/pistol/mag_release.ogg' @@ -273,12 +264,6 @@ EMPTY_GUN_HELPER(automatic/pistol/commander/inteq) to_chat(user, "Theres no magazine to replace!") return -/obj/item/gun/ballistic/automatic/pistol/disposable/pizza - name = "pizza disposable gun" - desc = "How horrible. Whoever you point at with this won't be very cheesed to meet you." //this is a warcrime against italians // IF YOU'RE GOING TO DO US DIRTY SPELL IT RIGHT - icon_state = "disposable_pizza" - custom_materials = list(/datum/material/pizza=2000) - //not technically a pistol but whatever /obj/item/gun/ballistic/derringer name = ".38 Derringer" diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm index 27c3d124906a..756a8aa9ca26 100644 --- a/code/modules/projectiles/guns/ballistic/revolver.dm +++ b/code/modules/projectiles/guns/ballistic/revolver.dm @@ -25,7 +25,7 @@ var/spin_delay = 10 var/recent_spin = 0 manufacturer = MANUFACTURER_SCARBOROUGH - fire_delay = 2 + fire_delay = 0.4 SECONDS spread_unwielded = 15 recoil = 0.5 recoil_unwielded = 2 @@ -35,6 +35,9 @@ dry_fire_text = "snap" wield_slowdown = 0.3 + gun_firemodes = list(FIREMODE_SEMIAUTO) + default_firemode = FIREMODE_SEMIAUTO + safety_wording = "hammer" var/gate_loaded = FALSE //for stupid wild west shit @@ -279,7 +282,8 @@ to_chat(user, "You rack the [bolt_wording] of \the [src].") playsound(src, rack_sound, rack_sound_volume, rack_sound_vary) - chamber_round(TRUE) + if((!safety && !semi_auto) || (!safety && !semi_auto)) + chamber_round(TRUE) SEND_SIGNAL(src, COMSIG_UPDATE_AMMO_HUD) update_appearance() @@ -411,11 +415,14 @@ var/fan = FALSE if(HAS_TRAIT(user, TRAIT_GUNSLINGER) && !semi_auto && !wielded && loc == user && !safety && !user.get_inactive_held_item()) fan = TRUE + fire_delay = 0 SECONDS . = ..() + fire_delay = src::fire_delay if(fan) rack() to_chat(user, "You fan the [bolt_wording] of \the [src]!") - user.changeNext_move(CLICK_CD_RAPID) + balloon_alert_to_viewers("fans revolver!") + fire_delay = 0 SECONDS /obj/item/gun/ballistic/revolver/shoot_live_shot(mob/living/user, pointblank, atom/pbtarget, message) . = ..() @@ -434,18 +441,21 @@ /obj/item/gun/ballistic/revolver/calculate_recoil(mob/user, recoil_bonus = 0) var/gunslinger_bonus = -1 var/total_recoil = recoil_bonus + if(HAS_TRAIT(user, TRAIT_GUNSLINGER)) //gunslinger bonus total_recoil += gunslinger_bonus total_recoil = clamp(total_recoil,0,INFINITY) - return total_recoil + + return ..(user, total_recoil) /obj/item/gun/ballistic/revolver/calculate_spread(mob/user, bonus_spread) - var/gunslinger_bonus = -4 + var/gunslinger_bonus = -8 var/total_spread = bonus_spread + if(HAS_TRAIT(user, TRAIT_GUNSLINGER)) //gunslinger bonus total_spread += gunslinger_bonus - total_spread = clamp(total_spread,0,INFINITY) - return total_spread + + return ..(user, total_spread) /obj/item/gun/ballistic/revolver/pickup(mob/user) . = ..() @@ -454,12 +464,6 @@ /obj/item/gun/ballistic/revolver/proc/tryflip(mob/living/user) if(HAS_TRAIT(user, TRAIT_GUNSLINGER)) if(COOLDOWN_FINISHED(src, flip_cooldown)) - if(HAS_TRAIT(user, TRAIT_CLUMSY) && prob(40)) - to_chat(user, "While trying to flip the [src] you pull the trigger and accidently shoot yourself!") - var/flip_mistake = pick(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG, BODY_ZONE_HEAD, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_CHEST) - process_fire(user, user, FALSE, flip_mistake) - user.dropItemToGround(src, TRUE) - return COOLDOWN_START(src, flip_cooldown, 0.3 SECONDS) SpinAnimation(5,1) user.visible_message("[user] spins the [src] around their finger by the trigger. That’s pretty badass.") @@ -486,14 +490,15 @@ manufacturer = MANUFACTURER_HUNTERSPRIDE recoil = 0 //weaker than normal revolver, no recoil + fire_delay = 0.2 SECONDS EMPTY_GUN_HELPER(revolver/detective) /obj/item/gun/ballistic/revolver/detective/ComponentInitialize() . = ..() AddComponent(/datum/component/ammo_hud/revolver) //note that the hud at the moment only supports 6 round revolvers, 7 or 5 isn't supported rn - -/obj/item/gun/ballistic/revolver/detective/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0) +//...why...? +/obj/item/gun/ballistic/revolver/detective/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0, burst_firing = FALSE, spread_override = 0, iteration = 0) if(magazine.caliber != initial(magazine.caliber)) if(prob(100 - (magazine.ammo_count() * 5))) //minimum probability of 70, maximum of 95 playsound(user, fire_sound, fire_sound_volume, vary_fire_sound) @@ -580,19 +585,22 @@ EMPTY_GUN_HELPER(revolver/detective) fire_sound = 'sound/weapons/gun/revolver/shot_hunting.ogg' manufacturer = MANUFACTURER_HUNTERSPRIDE gate_loaded = TRUE + fire_delay = 0.6 SECONDS wield_slowdown = 0.5 - spread_unwielded = 5 - spread = 2 + spread_unwielded = 20 + spread = 6 recoil = 2 recoil_unwielded = 4 -// A gun to play Russian Roulette! -// You can spin the chamber to randomize the position of the bullet. - /obj/item/gun/ballistic/revolver/ashhand/ComponentInitialize() . = ..() AddComponent(/datum/component/ammo_hud/revolver) +// A gun to play Russian Roulette! +// You can spin the chamber to randomize the position of the bullet. + +//TODO: this is stupid, but used in ONE fucking ruin. Remember to remove when you aren't afraid to do a ton of path changes. + /obj/item/gun/ballistic/revolver/russian name = "\improper Russian revolver" desc = "A Solarian revolver for particularly lethal drinking games. It has a mechanism requiring you to spin the chamber before each trigger pull. Uses .357 ammo." @@ -670,18 +678,6 @@ EMPTY_GUN_HELPER(revolver/detective) user.apply_damage(300, BRUTE, affecting) user.visible_message("[user.name] fires [src] at [user.p_their()] head!", "You fire [src] at your head!", "You hear a gunshot!") -/obj/item/gun/ballistic/revolver/russian/soul - name = "cursed Russian revolver" - desc = "To play with this revolver requires wagering your very soul." - -/obj/item/gun/ballistic/revolver/russian/soul/shoot_self(mob/living/user) - ..() - var/obj/item/soulstone/anybody/revolver/SS = new /obj/item/soulstone/anybody/revolver(get_turf(src)) - if(!SS.transfer_soul("FORCE", user)) //Something went wrong - qdel(SS) - return - user.visible_message("[user.name]'s soul is captured by \the [src]!", "You've lost the gamble! Your soul is forfeit!") - /obj/item/gun/ballistic/revolver/firebrand name = "\improper HP Firebrand" desc = "An archaic precursor to revolver-type firearms, this gun was rendered completely obsolete millennia ago. While fast to fire, it is extremely inaccurate. Uses .357 ammo." @@ -691,7 +687,7 @@ EMPTY_GUN_HELPER(revolver/detective) spread = 20 manufacturer = MANUFACTURER_HUNTERSPRIDE spread_unwielded = 50 - fire_delay = 0 + fire_delay = 0 SECONDS gate_offset = 4 semi_auto = TRUE safety_wording = "safety" @@ -717,6 +713,7 @@ EMPTY_GUN_HELPER(revolver/detective) ) recoil = 0 //weaker than normal revolver, no recoil + spread_unwielded = 10 /obj/item/gun/ballistic/revolver/shadow/ComponentInitialize() . = ..() diff --git a/code/modules/projectiles/guns/ballistic/rifle.dm b/code/modules/projectiles/guns/ballistic/rifle.dm index 24cf3323048a..45b1e8b2debd 100644 --- a/code/modules/projectiles/guns/ballistic/rifle.dm +++ b/code/modules/projectiles/guns/ballistic/rifle.dm @@ -22,8 +22,11 @@ weapon_weight = WEAPON_MEDIUM pickup_sound = 'sound/items/handling/rifle_pickup.ogg' + gun_firemodes = list(FIREMODE_SEMIAUTO) + default_firemode = FIREMODE_SEMIAUTO + spread = -1 - spread_unwielded = 12 + spread_unwielded = 48 recoil = -3 recoil_unwielded = 4 wield_slowdown = 1 @@ -67,10 +70,6 @@ . = ..() . += "The bolt is [bolt_locked ? "open" : "closed"]." -/////////////////////// -// BOLT ACTION RIFLE // -/////////////////////// - /obj/item/gun/ballistic/rifle/illestren name = "\improper HP Illestren" desc = "A sturdy and conventional bolt-action rifle. One of Hunter's Pride's most successful firearms, the Illestren is popular among colonists, pirates, snipers, and countless others. Chambered in 8x50mmR." @@ -89,18 +88,18 @@ /obj/item/gun/ballistic/rifle/illestren/sawoff(mob/user) . = ..() if(.) - spread = 36 - spread_unwielded = 108 + spread = 24 + spread_unwielded = 30 can_bayonet = FALSE item_state = "illestren_sawn" mob_overlay_state = item_state weapon_weight = WEAPON_MEDIUM //you can fire it onehanded, makes it worse than worse than useless onehanded, but you can /obj/item/gun/ballistic/rifle/illestren/blow_up(mob/user) - . = 0 + . = FALSE if(chambered && chambered.BB) process_fire(user, user, FALSE) - . = 1 + . = TRUE /obj/item/gun/ballistic/rifle/illestren/factory desc = "A sturdy and conventional bolt-action rifle. One of Hunter's Pride's most successful firearms, this example has been kept in excellent shape and may as well be fresh out of the workshop. Chambered in 8x50mmR." @@ -160,57 +159,6 @@ manufacturer = MANUFACTURER_HUNTERSPRIDE -/obj/item/gun/ballistic/rifle/illestren/enchanted - name = "enchanted bolt-action rifle" - desc = "Careful not to lose your head." - var/guns_left = 30 - mag_type = /obj/item/ammo_box/magazine/internal/boltaction/enchanted - can_be_sawn_off = FALSE - manufacturer = MANUFACTURER_NONE - -/obj/item/gun/ballistic/rifle/illestren/enchanted/arcane_barrage - name = "arcane barrage" - desc = "Pew Pew Pew." - fire_sound = 'sound/weapons/emitter.ogg' - icon = 'icons/obj/guns/projectile.dmi' - lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi' - icon_state = "arcane_barrage" - item_state = "arcane_barrage" - slot_flags = null - can_bayonet = FALSE - item_flags = NEEDS_PERMIT | DROPDEL | ABSTRACT | NOBLUDGEON - flags_1 = NONE - trigger_guard = TRIGGER_GUARD_ALLOW_ALL - - mag_type = /obj/item/ammo_box/magazine/internal/boltaction/enchanted/arcane_barrage - -/obj/item/gun/ballistic/rifle/illestren/enchanted/dropped() - . = ..() - guns_left = 0 - -/obj/item/gun/ballistic/rifle/illestren/enchanted/proc/discard_gun(mob/living/user) - user.throw_item(pick(oview(7,get_turf(user)))) - -/obj/item/gun/ballistic/rifle/illestren/enchanted/arcane_barrage/discard_gun(mob/living/user) - qdel(src) - -/obj/item/gun/ballistic/rifle/illestren/enchanted/attack_self() - return - -/obj/item/gun/ballistic/rifle/illestren/enchanted/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0) - . = ..() - if(!.) - return - if(guns_left) - var/obj/item/gun/ballistic/rifle/illestren/enchanted/gun = new type - gun.guns_left = guns_left - 1 - discard_gun(user) - user.swap_hand() - user.put_in_hands(gun) - else - user.dropItemToGround(src, TRUE) - /obj/item/gun/ballistic/rifle/polymer name = "polymer survivor rifle" desc = "A bolt-action rifle made of scrap, desperation, and luck. Likely to shatter at any moment. Chambered in .300 Blackout." diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm index 4b3d8c7687f0..bfe2e88bf804 100644 --- a/code/modules/projectiles/guns/ballistic/shotgun.dm +++ b/code/modules/projectiles/guns/ballistic/shotgun.dm @@ -19,10 +19,14 @@ cartridge_wording = "shell" tac_reloads = FALSE pickup_sound = 'sound/items/handling/shotgun_pickup.ogg' - fire_delay = 7 + fire_delay = 0.7 SECONDS pb_knockback = 2 manufacturer = MANUFACTURER_HUNTERSPRIDE + gun_firemodes = list(FIREMODE_SEMIAUTO) + default_firemode = FIREMODE_SEMIAUTO + fire_select_icon_state_prefix = "sg_" + wield_slowdown = 0.45 wield_delay = 0.8 SECONDS @@ -48,7 +52,8 @@ if(HAS_TRAIT(user, TRAIT_GUNSLINGER)) //gunslinger bonus total_recoil += gunslinger_bonus total_recoil = clamp(total_recoil,0,INFINITY) - return total_recoil + + return ..(user, total_recoil) // BRIMSTONE SHOTGUN // @@ -61,18 +66,17 @@ icon_state = "brimstone" item_state = "brimstone" + gun_firemodes = list(FIREMODE_FULLAUTO) + default_firemode = FIREMODE_FULLAUTO + mag_type = /obj/item/ammo_box/magazine/internal/shot/lethal manufacturer = MANUFACTURER_HUNTERSPRIDE - fire_delay = 1 - rack_delay = 2 + fire_delay = 0.05 SECONDS //slamfire + rack_delay = 0.2 SECONDS can_be_sawn_off = TRUE -/obj/item/gun/ballistic/shotgun/brimstone/ComponentInitialize() - . = ..() - AddComponent(/datum/component/automatic_fire, 0.1 SECONDS) - /obj/item/gun/ballistic/shotgun/brimstone/sawoff(mob/user) . = ..() if(.) @@ -99,7 +103,7 @@ sawn_desc = "Come with me if you want to live." can_be_sawn_off = TRUE rack_sound = 'sound/weapons/gun/shotgun/rack_alt.ogg' - fire_delay = 1 + fire_delay = 0.1 SECONDS /obj/item/gun/ballistic/shotgun/hellfire/sawoff(mob/user) . = ..() @@ -140,7 +144,7 @@ desc = "A semi-automatic shotgun with tactical furniture and six-shell capacity underneath." icon_state = "cshotgun" item_state = "shotgun_combat" - fire_delay = 5 + fire_delay = 0.5 SECONDS mag_type = /obj/item/ammo_box/magazine/internal/shot/com w_class = WEIGHT_CLASS_HUGE @@ -197,7 +201,7 @@ // Bulldog shotgun // -/obj/item/gun/ballistic/shotgun/bulldog +/obj/item/gun/ballistic/shotgun/bulldog //TODO: REPATH TO LIKE /obj/item/gun/ballistic/shotgun/automatic/bulldog name = "\improper Bulldog Shotgun" desc = "A semi-automatic, magazine-fed shotgun designed for combat in tight quarters, manufactured by Scarborough Arms. A historical favorite of various Syndicate factions, especially the Gorlex Marauders." icon = 'icons/obj/guns/48x32guns.dmi' @@ -211,13 +215,12 @@ mag_type = /obj/item/ammo_box/magazine/m12g can_suppress = FALSE burst_size = 1 - fire_delay = 0 + fire_delay = 0.4 SECONDS // this NEEDS the old delay. fire_sound = 'sound/weapons/gun/shotgun/bulldog.ogg' - actions_types = list() - mag_display = TRUE + show_magazine_on_sprite = TRUE empty_indicator = TRUE empty_alarm = TRUE - special_mags = TRUE + unique_mag_sprites_for_variants = TRUE semi_auto = TRUE internal_magazine = FALSE casing_ejector = TRUE @@ -225,6 +228,13 @@ pickup_sound = 'sound/items/handling/rifle_pickup.ogg' manufacturer = MANUFACTURER_SCARBOROUGH + load_sound = 'sound/weapons/gun/rifle/ar_reload.ogg' + load_empty_sound = 'sound/weapons/gun/rifle/ar_reload.ogg' + eject_sound = 'sound/weapons/gun/rifle/ar_unload.ogg' + eject_empty_sound = 'sound/weapons/gun/rifle/ar_unload.ogg' + + rack_sound = 'sound/weapons/gun/rifle/ar_cock.ogg' + spread = 4 spread_unwielded = 16 recoil = 1 @@ -259,8 +269,10 @@ EMPTY_GUN_HELPER(shotgun/bulldog/inteq) item_state = "cm15" empty_alarm = FALSE empty_indicator = FALSE - special_mags = FALSE + unique_mag_sprites_for_variants = FALSE manufacturer = MANUFACTURER_MINUTEMAN + fire_select_icon_state_prefix = "clip_" + adjust_fire_select_icon_state_on_safety = TRUE ///////////////////////////// // DOUBLE BARRELED SHOTGUN // @@ -440,52 +452,6 @@ EMPTY_GUN_HELPER(shotgun/bulldog/inteq) sawn_off = TRUE slot_flags = ITEM_SLOT_BELT -/obj/item/gun/ballistic/shotgun/doublebarrel/hook - name = "hook modified sawn-off shotgun" - desc = "Range isn't an issue when you can bring your victim to you." - icon_state = "hookshotgun" - icon = 'icons/obj/guns/projectile.dmi' - item_state = "shotgun" - load_sound = 'sound/weapons/gun/shotgun/insert_shell.ogg' - mag_type = /obj/item/ammo_box/magazine/internal/shot/bounty - w_class = WEIGHT_CLASS_BULKY - weapon_weight = WEAPON_MEDIUM - can_be_sawn_off = FALSE - force = 16 //it has a hook on it - attack_verb = list("slashed", "hooked", "stabbed") - hitsound = 'sound/weapons/bladeslice.ogg' - //our hook gun! - var/obj/item/gun/magic/hook/bounty/hook - var/toggled = FALSE - -/obj/item/gun/ballistic/shotgun/doublebarrel/hook/Initialize() - . = ..() - hook = new /obj/item/gun/magic/hook/bounty(src) - -/obj/item/gun/ballistic/shotgun/doublebarrel/hook/AltClick(mob/user) - if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) - return - if(toggled) - to_chat(user,"You switch to the shotgun.") - fire_sound = initial(fire_sound) - else - to_chat(user,"You switch to the hook.") - fire_sound = 'sound/weapons/batonextend.ogg' - toggled = !toggled - -/obj/item/gun/ballistic/shotgun/doublebarrel/hook/examine(mob/user) - . = ..() - if(toggled) - . += "Alt-click to switch to the shotgun." - else - . += "Alt-click to switch to the hook." - -/obj/item/gun/ballistic/shotgun/doublebarrel/hook/afterattack(atom/target, mob/living/user, flag, params) - if(toggled) - hook.afterattack(target, user, flag, params) - else - return ..() - /obj/item/gun/ballistic/shotgun/automatic/combat/compact/compact name = "compact compact combat shotgun" desc = "A compact version of the compact version of the semi automatic combat shotgun. For when you want a gun the same size as your brain." @@ -548,7 +514,7 @@ EMPTY_GUN_HELPER(shotgun/bulldog/inteq) attack_verb = list("bludgeoned", "smashed") mag_type = /obj/item/ammo_box/magazine/internal/shot/sex burst_size = 6 - fire_delay = 0.8 + fire_delay = 0.08 SECONDS //?? very weird number pb_knockback = 12 unique_reskin = null recoil = 10 @@ -581,7 +547,7 @@ EMPTY_GUN_HELPER(shotgun/bulldog/inteq) base_icon_state = "shotgun_e" icon_state = "shotgun_e" burst_size = 100 - fire_delay = 0.1 + fire_delay = 0.01 SECONDS pb_knockback = 40 recoil = 100 recoil_unwielded = 200 @@ -743,10 +709,10 @@ EMPTY_GUN_HELPER(shotgun/bulldog/inteq) wield_slowdown = 0.5 wield_delay = 0.5 SECONDS - spread_unwielded = 5 //mostly the hunting revolver stats - spread = 2 + spread_unwielded = 20 //mostly the hunting revolver stats + spread = 6 recoil = 2 - recoil_unwielded = 3 + recoil_unwielded = 4 /obj/item/gun/ballistic/shotgun/doublebarrel/beacon/factory desc = "A single-shot break-action rifle made by Hunter's Pride and sold to civilian hunters. This example has been kept in excellent shape and may as well be fresh out of the workshop. Uses .45-70 ammo." diff --git a/code/modules/projectiles/guns/ballistic/smg.dm b/code/modules/projectiles/guns/ballistic/smg.dm index a6739a79776e..5e8896ab10ec 100644 --- a/code/modules/projectiles/guns/ballistic/smg.dm +++ b/code/modules/projectiles/guns/ballistic/smg.dm @@ -1,14 +1,18 @@ /obj/item/gun/ballistic/automatic/smg - burst_size = 1 + burst_size = 2 actions_types = list() - fire_delay = 1 - spread = 4 + fire_delay = 0.13 SECONDS + + spread = 6 spread_unwielded = 10 wield_slowdown = 0.35 recoil_unwielded = 4 w_class = WEIGHT_CLASS_BULKY - wield_delay = 0.4 SECONDS + gun_firemodes = list(FIREMODE_SEMIAUTO, FIREMODE_FULLAUTO) + default_firemode = FIREMODE_SEMIAUTO + + wield_delay = 0.5 SECONDS load_sound = 'sound/weapons/gun/smg/smg_reload.ogg' load_empty_sound = 'sound/weapons/gun/smg/smg_reload.ogg' @@ -16,20 +20,24 @@ eject_empty_sound = 'sound/weapons/gun/smg/smg_unload.ogg' /obj/item/gun/ballistic/automatic/smg/calculate_recoil(mob/user, recoil_bonus = 0) - var/gunslinger_bonus = 1 - var/total_recoil = recoil_bonus + var/gunslinger_bonus = 2 + var/total_recoil + if(.) + total_recoil += . if(HAS_TRAIT(user, TRAIT_GUNSLINGER)) //gunslinger penalty total_recoil += gunslinger_bonus - total_recoil = clamp(total_recoil,0,INFINITY) - return total_recoil + . = total_recoil + return ..() /obj/item/gun/ballistic/automatic/smg/calculate_spread(mob/user, bonus_spread) - var/gunslinger_bonus = 4 + var/gunslinger_bonus = 16 var/total_spread = bonus_spread + if(.) + total_spread += . if(HAS_TRAIT(user, TRAIT_GUNSLINGER)) //gunslinger penalty total_spread += gunslinger_bonus - total_spread = clamp(total_spread,0,INFINITY) - return total_spread + . = total_spread + return ..() /obj/item/gun/ballistic/automatic/smg/proto name = "\improper Nanotrasen Saber SMG" @@ -37,14 +45,11 @@ icon_state = "saber" actions_types = list() mag_type = /obj/item/ammo_box/magazine/smgm9mm + bolt_type = BOLT_TYPE_LOCKING - mag_display = TRUE + show_magazine_on_sprite = TRUE manufacturer = MANUFACTURER_NANOTRASEN_OLD -/obj/item/gun/ballistic/automatic/smg/proto/ComponentInitialize() - . = ..() - AddComponent(/datum/component/automatic_fire, 0.13 SECONDS) - /obj/item/gun/ballistic/automatic/smg/c20r name = "\improper C-20r SMG" desc = "A bullpup .45 SMG designated 'C-20r.' Its buttstamp reads 'Scarborough Arms - Per falcis, per pravitas.'" @@ -55,17 +60,13 @@ can_suppress = FALSE knife_x_offset = 26 knife_y_offset = 12 - mag_display = TRUE - mag_display_ammo = TRUE + show_magazine_on_sprite = TRUE + show_magazine_on_sprite_ammo = TRUE empty_indicator = TRUE manufacturer = MANUFACTURER_SCARBOROUGH EMPTY_GUN_HELPER(automatic/smg/c20r) -/obj/item/gun/ballistic/automatic/smg/c20r/ComponentInitialize() - . = ..() - AddComponent(/datum/component/automatic_fire, 0.13 SECONDS) - /obj/item/gun/ballistic/automatic/smg/c20r/Initialize() . = ..() update_appearance() @@ -89,28 +90,23 @@ EMPTY_GUN_HELPER(automatic/smg/c20r) item_state = "arg" mag_type = /obj/item/ammo_box/magazine/wt550m9 can_suppress = FALSE - burst_size = 1 actions_types = list() can_bayonet = TRUE knife_x_offset = 25 knife_y_offset = 12 - mag_display = TRUE - mag_display_ammo = TRUE + show_magazine_on_sprite = TRUE + show_magazine_on_sprite_ammo = TRUE empty_indicator = TRUE manufacturer = MANUFACTURER_NANOTRASEN_OLD fire_sound = 'sound/weapons/gun/smg/smg_heavy.ogg' -/obj/item/gun/ballistic/automatic/smg/wt550/ComponentInitialize() - . = ..() - AddComponent(/datum/component/automatic_fire, 0.13 SECONDS) - /obj/item/gun/ballistic/automatic/smg/mini_uzi name = "\improper Type U3 Uzi" desc = "A lightweight submachine gun, for when you really want someone dead. Uses 9mm rounds." icon_state = "uzi" mag_type = /obj/item/ammo_box/magazine/uzim9mm bolt_type = BOLT_TYPE_OPEN - mag_display = TRUE + show_magazine_on_sprite = TRUE fire_sound = 'sound/weapons/gun/smg/uzi.ogg' rack_sound = 'sound/weapons/gun/smg/uzi_cocked.ogg' @@ -124,10 +120,7 @@ EMPTY_GUN_HELPER(automatic/smg/c20r) spread_unwielded = 8 wield_slowdown = 0.25 wield_delay = 0.2 SECONDS - -/obj/item/gun/ballistic/automatic/smg/mini_uzi/ComponentInitialize() - . = ..() - AddComponent(/datum/component/automatic_fire, 0.1 SECONDS) + fire_delay = 0.1 SECONDS /obj/item/gun/ballistic/automatic/smg/vector name = "\improper Vector carbine" @@ -136,14 +129,10 @@ EMPTY_GUN_HELPER(automatic/smg/c20r) item_state = "vector" mag_type = /obj/item/ammo_box/magazine/smgm9mm //you guys remember when the autorifle was chambered in 9mm bolt_type = BOLT_TYPE_LOCKING - mag_display = TRUE + show_magazine_on_sprite = TRUE weapon_weight = WEAPON_LIGHT fire_sound = 'sound/weapons/gun/smg/vector_fire.ogg' -/obj/item/gun/ballistic/automatic/smg/vector/ComponentInitialize() - . = ..() - AddComponent(/datum/component/automatic_fire, 0.13 SECONDS) - /obj/item/gun/ballistic/automatic/smg/m90 name = "\improper M-90gl Carbine" desc = "A three-round burst 5.56 toploading carbine, designated 'M-90gl'. Has an attached underbarrel grenade launcher which can be toggled on and off." @@ -151,67 +140,76 @@ EMPTY_GUN_HELPER(automatic/smg/c20r) item_state = "m90" mag_type = /obj/item/ammo_box/magazine/m556 can_suppress = FALSE - actions_types = list(/datum/action/item_action/toggle_firemode) - var/obj/item/gun/ballistic/revolver/grenadelauncher/underbarrel - burst_size = 3 - fire_delay = 2 - mag_display = TRUE + gun_firenames = list(FIREMODE_SEMIAUTO = "single", FIREMODE_BURST = "burst fire", FIREMODE_FULLAUTO = "full auto", FIREMODE_OTHER = "underbarrel grenade launcher") + gun_firemodes = list(FIREMODE_SEMIAUTO, FIREMODE_BURST, FIREMODE_OTHER) + default_firemode = FIREMODE_SEMIAUTO + var/obj/item/gun/ballistic/revolver/grenadelauncher/secondary + show_magazine_on_sprite = TRUE empty_indicator = TRUE fire_sound = 'sound/weapons/gun/rifle/shot_alt.ogg' manufacturer = MANUFACTURER_SCARBOROUGH + burst_size = 3 + burst_delay = 0.1 SECONDS + fire_delay = 0.2 SECONDS spread = 1 spread_unwielded = 8 wield_slowdown = 0.4 /obj/item/gun/ballistic/automatic/smg/m90/Initialize() . = ..() - underbarrel = new /obj/item/gun/ballistic/revolver/grenadelauncher(src) + secondary = new /obj/item/gun/ballistic/revolver/grenadelauncher(src) + RegisterSignal(secondary, COMSIG_ATOM_UPDATE_ICON, PROC_REF(secondary_update_icon)) update_appearance() +/obj/item/gun/ballistic/automatic/smg/m90/process_other(atom/target, mob/living/user, message = TRUE, flag, params = null, zone_override = "", bonus_spread = 0) + return secondary.pre_fire(target, user, message, params, zone_override, bonus_spread) + +/obj/item/gun/ballistic/automatic/smg/m90/can_shoot() + var/current_firemode = gun_firemodes[firemode_index] + if(current_firemode != FIREMODE_OTHER) + return ..() + return secondary.can_shoot() + /obj/item/gun/ballistic/automatic/smg/m90/afterattack(atom/target, mob/living/user, flag, params) - if(select == 2) - underbarrel.afterattack(target, user, flag, params) - else + var/current_firemode = gun_firemodes[firemode_index] + if(current_firemode != FIREMODE_OTHER) return ..() + return secondary.afterattack(target, user, flag, params) + +/obj/item/gun/ballistic/automatic/smg/m90/attackby(obj/item/attack_obj, mob/user, params) + if(istype(attack_obj, secondary.magazine.ammo_type)) + secondary.unique_action() + return secondary.attackby(attack_obj, user, params) + return ..() -/obj/item/gun/ballistic/automatic/smg/m90/attackby(obj/item/A, mob/user, params) - if(istype(A, /obj/item/ammo_casing)) - if(istype(A, underbarrel.magazine.ammo_type)) - underbarrel.attack_self() - underbarrel.attackby(A, user, params) - else - ..() -/obj/item/gun/ballistic/automatic/smg/m90/update_overlays() +/obj/item/gun/ballistic/automatic/smg/m90/can_shoot() + var/current_firemode = gun_firemodes[firemode_index] + if(current_firemode != FIREMODE_OTHER) + return ..() + return secondary.can_shoot() + +/obj/item/gun/ballistic/automatic/smg/m90/on_wield(obj/item/source, mob/user) + wielded = TRUE + secondary.wielded = TRUE + INVOKE_ASYNC(src, .proc.do_wield, user) + +/obj/item/gun/ballistic/automatic/smg/m90/do_wield(mob/user) . = ..() - switch(select) - if(0) - . += "[initial(icon_state)]_semi" - if(1) - . += "[initial(icon_state)]_burst" - if(2) - . += "[initial(icon_state)]_gren" - -/obj/item/gun/ballistic/automatic/smg/m90/burst_select() - var/mob/living/carbon/human/user = usr - switch(select) - if(0) - select = 1 - burst_size = initial(burst_size) - fire_delay = initial(fire_delay) - to_chat(user, "You switch to [burst_size]-rnd burst.") - if(1) - select = 2 - to_chat(user, "You switch to grenades.") - if(2) - select = 0 - burst_size = 1 - fire_delay = 0 - to_chat(user, "You switch to semi-auto.") - playsound(user, 'sound/weapons/gun/general/selector.ogg', 100, TRUE) + secondary.wielded_fully = wielded_fully + +/// triggered on unwield of two handed item +/obj/item/gun/ballistic/automatic/smg/m90/on_unwield(obj/item/source, mob/user) + . = ..() + secondary.wielded_fully = FALSE + secondary.wielded = FALSE + + +/obj/item/gun/ballistic/automatic/smg/m90/proc/secondary_update_icon() update_appearance() - return + SEND_SIGNAL(src, COMSIG_UPDATE_AMMO_HUD) + /obj/item/gun/ballistic/automatic/smg/firestorm //weapon designed by Apogee-dev name = "HP Firestorm" @@ -221,20 +219,18 @@ EMPTY_GUN_HELPER(automatic/smg/c20r) item_state = "firestorm" mag_type = /obj/item/ammo_box/magazine/c45_firestorm_mag can_suppress = FALSE - special_mags = TRUE + unique_mag_sprites_for_variants = TRUE burst_size = 1 actions_types = list() - fire_delay = 1 + fire_delay = 0.13 SECONDS + bolt_type = BOLT_TYPE_OPEN rack_sound = 'sound/weapons/gun/smg/uzi_cocked.ogg' fire_sound = 'sound/weapons/gun/smg/firestorm.ogg' + manufacturer = MANUFACTURER_HUNTERSPRIDE wield_slowdown = 0.4 -/obj/item/gun/ballistic/automatic/smg/firestorm/Initialize() - . = ..() - AddComponent(/datum/component/automatic_fire, 0.13 SECONDS) - /obj/item/gun/ballistic/automatic/smg/firestorm/pan //spawns with pan magazine, can take sticks instead of just drums, not sure where this would be used, maybe erts? spawnwithmagazine = FALSE @@ -253,11 +249,10 @@ EMPTY_GUN_HELPER(automatic/smg/c20r) fire_sound = 'sound/weapons/gun/smg/smg_heavy.ogg' manufacturer = MANUFACTURER_MINUTEMAN -EMPTY_GUN_HELPER(automatic/smg/cm5) + fire_select_icon_state_prefix = "clip_" + adjust_fire_select_icon_state_on_safety = TRUE -/obj/item/gun/ballistic/automatic/smg/cm5/ComponentInitialize() - . = ..() - AddComponent(/datum/component/automatic_fire, 0.13 SECONDS) +EMPTY_GUN_HELPER(automatic/smg/cm5) /obj/item/gun/ballistic/automatic/smg/cm5/compact name = "\improper CM-5c" @@ -266,15 +261,13 @@ EMPTY_GUN_HELPER(automatic/smg/cm5) spread = 25 spread_unwielded = 40 + fire_delay = 0.08 SECONDS + recoil = 1 recoil_unwielded = 2 wield_delay = 0.2 SECONDS wield_slowdown = 0.15 -/obj/item/gun/ballistic/automatic/smg/cm5/compact/ComponentInitialize() - . = ..() - AddComponent(/datum/component/automatic_fire, 0.8 SECONDS) - /obj/item/gun/ballistic/automatic/smg/skm_carbine name = "\improper SKM-24v" desc = "The SKM-24v was a carbine modification of the SKM-24 during the Frontiersmen War. This, however, is just a shoddy imitation of that carbine, effectively an SKM-24 with a sawed down barrel and a folding wire stock. Can be fired with the stock folded, though accuracy suffers. Chambered in 4.6x30mm." @@ -322,7 +315,6 @@ EMPTY_GUN_HELPER(automatic/smg/cm5) /obj/item/gun/ballistic/automatic/smg/skm_carbine/ComponentInitialize() . = ..() - AddComponent(/datum/component/automatic_fire, 0.13 SECONDS) AddElement(/datum/element/update_icon_updates_onmob) /datum/action/item_action/fold_stock @@ -356,26 +348,19 @@ EMPTY_GUN_HELPER(automatic/smg/cm5) /obj/item/gun/ballistic/automatic/smg/skm_carbine/calculate_recoil(mob/user, recoil_bonus = 0) - var/gunslinger_bonus = 1 var/total_recoil = recoil_bonus if(!stock_folded) total_recoil += stock_recoil_bonus - if(HAS_TRAIT(user, TRAIT_GUNSLINGER)) //gunslinger penalty - total_recoil += gunslinger_bonus - total_recoil = clamp(total_recoil,0,INFINITY) - return total_recoil + return ..(user, total_recoil) /obj/item/gun/ballistic/automatic/smg/skm_carbine/calculate_spread(mob/user, bonus_spread) - var/gunslinger_bonus = 4 var/total_spread = bonus_spread + if(!stock_folded) total_spread += stock_spread_bonus - if(HAS_TRAIT(user, TRAIT_GUNSLINGER)) //gunslinger penalty - total_spread += gunslinger_bonus - total_spread = clamp(total_spread,0,INFINITY) - return total_spread + return ..(user, total_spread) /obj/item/gun/ballistic/automatic/smg/skm_carbine/update_icon_state() . = ..() @@ -418,8 +403,3 @@ EMPTY_GUN_HELPER(automatic/smg/cm5) unfolded_slowdown = 0.35 unfolded_wield_delay = 0.4 SECONDS - - -/obj/item/gun/ballistic/automatic/smg/skm_carbine/inteq/ComponentInitialize() - . = ..() - AddComponent(/datum/component/automatic_fire, 0.13 SECONDS) diff --git a/code/modules/projectiles/guns/ballistic/toy.dm b/code/modules/projectiles/guns/ballistic/toy.dm index 5f62b8c7ca78..796a62dd9427 100644 --- a/code/modules/projectiles/guns/ballistic/toy.dm +++ b/code/modules/projectiles/guns/ballistic/toy.dm @@ -29,7 +29,7 @@ mag_type = /obj/item/ammo_box/magazine/toy/pistol fire_sound = 'sound/items/syringeproj.ogg' burst_size = 1 - fire_delay = 0 + fire_delay = 0.2 SECONDS actions_types = list() recoil = -10 //its a toy... recoil_unwielded = -10 diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index 705789b3484a..d06ad71d206d 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -10,6 +10,11 @@ has_safety = TRUE safety = TRUE + gun_firemodes = list(FIREMODE_SEMIAUTO) + default_firemode = FIREMODE_SEMIAUTO + + fire_select_icon_state_prefix = "laser_" + var/obj/item/stock_parts/cell/gun/cell //What type of power cell this uses var/cell_type = /obj/item/stock_parts/cell/gun var/modifystate = 0 @@ -217,11 +222,6 @@ process_chamber() // If the gun was drained and then recharged, load a new shot. return ..() -/obj/item/gun/energy/process_burst(mob/living/user, atom/target, message = TRUE, params = null, zone_override="", sprd = 0, randomized_gun_spread = 0, randomized_bonus_spread = 0, rand_spr = 0, iteration = 0) - if(!chambered && can_shoot()) - process_chamber() // Ditto. - return ..() - /obj/item/gun/energy/proc/select_fire(mob/living/user) select++ if (select > ammo_type.len) diff --git a/code/modules/projectiles/guns/energy/energy_gun.dm b/code/modules/projectiles/guns/energy/energy_gun.dm index f2c504f07f84..f1188f76701f 100644 --- a/code/modules/projectiles/guns/energy/energy_gun.dm +++ b/code/modules/projectiles/guns/energy/energy_gun.dm @@ -52,14 +52,15 @@ w_class = WEIGHT_CLASS_BULKY slot_flags = ITEM_SLOT_BACK + gun_firemodes = list(FIREMODE_SEMIAUTO, FIREMODE_FULLAUTO) + default_firemode = FIREMODE_SEMIAUTO + + fire_delay = 0.2 SECONDS + wield_delay = 0.7 SECONDS wield_slowdown = 0.6 spread_unwielded = 20 -/obj/item/gun/energy/e_gun/hades/Initialize() - . = ..() - AddComponent(/datum/component/automatic_fire, 0.2 SECONDS) - /obj/item/gun/energy/e_gun/old name = "prototype energy gun" desc = "NT-P:01 Prototype Energy Gun. Early stage development of a unique laser rifle that has a multifaceted energy lens, allowing the gun to alter the form of projectile it fires on command. The project was a dud, and Nanotrasen later acquired Sharplite to suit its laser weapon needs." @@ -224,9 +225,10 @@ charge_sections = 3 weapon_weight = WEAPON_LIGHT -/obj/item/gun/energy/e_gun/smg/Initialize() - . = ..() - AddComponent(/datum/component/automatic_fire, 0.13 SECONDS) + fire_delay = 0.13 SECONDS + + gun_firemodes = list(FIREMODE_SEMIAUTO, FIREMODE_FULLAUTO) + default_firemode = FIREMODE_SEMIAUTO /obj/item/gun/energy/e_gun/iot name = "\improper E-SG 500 Second Edition" diff --git a/code/modules/projectiles/guns/energy/laser_gatling.dm b/code/modules/projectiles/guns/energy/laser_gatling.dm index b21e176b92e8..22e6e57d8817 100644 --- a/code/modules/projectiles/guns/energy/laser_gatling.dm +++ b/code/modules/projectiles/guns/energy/laser_gatling.dm @@ -105,6 +105,12 @@ icon_state = "minigun_spin" item_state = "minigun" slowdown = 1 + + fire_delay = 0.1 SECONDS + + gun_firemodes = list(FIREMODE_FULLAUTO) + default_firemode = FIREMODE_FULLAUTO + slot_flags = null w_class = WEIGHT_CLASS_HUGE custom_materials = null @@ -121,7 +127,6 @@ ammo_pack = loc AddElement(/datum/element/update_icon_blocker) - AddComponent(/datum/component/automatic_fire, 0.15 SECONDS) return ..() /obj/item/gun/energy/minigun/Destroy() diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index d84655fb5813..73d9104833fb 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -277,10 +277,14 @@ can_charge = FALSE use_cyborg_cell = TRUE + fire_delay = 0.3 SECONDS + + gun_firemodes = list(FIREMODE_FULLAUTO) + default_firemode = FIREMODE_FULLAUTO + /obj/item/gun/energy/printer/ComponentInitialize() . = ..() AddElement(/datum/element/update_icon_blocker) - AddComponent(/datum/component/automatic_fire, 0.3 SECONDS) /obj/item/gun/energy/printer/emp_act() return @@ -391,9 +395,9 @@ shaded_charge = TRUE weapon_weight = WEAPON_HEAVY -/obj/item/gun/energy/tesla_cannon/ComponentInitialize() - . = ..() - AddComponent(/datum/component/automatic_fire, 0.1 SECONDS) + fire_delay = 0.1 SECONDS + gun_firemodes = list(FIREMODE_SEMIAUTO, FIREMODE_FULLAUTO) + default_firemode = FIREMODE_SEMIAUTO /obj/item/gun/energy/buster name = "replica buster cannon" diff --git a/code/modules/projectiles/guns/faction/gezena/energy_gunsword.dm b/code/modules/projectiles/guns/faction/gezena/energy_gunsword.dm index aea05fb8fe51..20a301a1396c 100644 --- a/code/modules/projectiles/guns/faction/gezena/energy_gunsword.dm +++ b/code/modules/projectiles/guns/faction/gezena/energy_gunsword.dm @@ -11,6 +11,8 @@ modifystate = TRUE + fire_delay = 0.16 SECONDS + wield_delay = 0.7 SECONDS wield_slowdown = 0.35 @@ -50,10 +52,6 @@ cell_type = /obj/item/stock_parts/cell/gun/pgf ammo_type = list(/obj/item/ammo_casing/energy/pgf , /obj/item/ammo_casing/energy/disabler/hitscan) -/obj/item/gun/energy/kalix/pgf/ComponentInitialize() - . = ..() - AddComponent(/datum/component/automatic_fire, 0.16 SECONDS) - /obj/projectile/beam/hitscan/kalix/pgf name = "concentrated energy" tracer_type = /obj/effect/projectile/tracer/pgf @@ -105,6 +103,11 @@ modifystate = FALSE + gun_firemodes = list(FIREMODE_SEMIAUTO, FIREMODE_FULLAUTO) + default_firemode = FIREMODE_SEMIAUTO + + fire_delay = 0.2 SECONDS + wield_delay = 0.7 SECONDS wield_slowdown = 0.6 @@ -113,10 +116,6 @@ ammo_type = list(/obj/item/ammo_casing/energy/pgf/assault, /obj/item/ammo_casing/energy/pgf/sniper) -/obj/item/gun/energy/kalix/pgf/heavy/ComponentInitialize() - . = ..() - AddComponent(/datum/component/automatic_fire, 0.2 SECONDS) - /obj/item/ammo_casing/energy/pgf/assault select_name = "AR" projectile_type = /obj/projectile/beam/hitscan/kalix/pgf/assault diff --git a/code/modules/projectiles/guns/gunhud.dm b/code/modules/projectiles/guns/gunhud.dm index 9d1a40db8bb6..3dad98f54219 100644 --- a/code/modules/projectiles/guns/gunhud.dm +++ b/code/modules/projectiles/guns/gunhud.dm @@ -18,9 +18,6 @@ // Ammo counter #define ui_ammocounter "EAST-1:28,CENTER+1:25" -///The gun needs to update the gun hud! -#define COMSIG_UPDATE_AMMO_HUD "update_ammo_hud" - /datum/hud var/atom/movable/screen/ammo_counter @@ -233,6 +230,7 @@ /datum/component/ammo_hud/laser/cybersun prefix = "cybersun_" +//please be aware, this only supports 6 round revolvers. It is comically easy to support more or less rounds,like in game there are 7 round and 5 round revolvers, but that requires sprites, and i'm lasy /datum/component/ammo_hud/revolver prefix = "revolver_" @@ -285,3 +283,55 @@ round_images += current_bullet_image hud.update_overlays(round_images) + +/datum/component/ammo_hud/eoehoma + backing_color = "#cb001a" + +/datum/component/ammo_hud/eoehoma/update_hud() + var/obj/item/gun/ballistic/automatic/assault/e40/pew = parent + var/obj/item/gun/energy/laser/e40_laser_secondary/pew_secondary = pew.secondary + hud.maptext = null + hud.icon_state = "[prefix]backing" + + var/indicator + var/rounds = num2text(get_accurate_ammo_count(pew)) + var/oth_o + var/oth_t + var/oth_h + + var/current_firemode = pew.gun_firemodes[pew.firemode_index] + if(current_firemode == FIREMODE_FULLAUTO) + if(!pew.magazine) + hud.set_hud(backing_color, "[prefix]oe", "[prefix]te", "[prefix]he", "[prefix]no_mag") + return + if(!pew.get_ammo()) + hud.set_hud(backing_color, "[prefix]oe", "[prefix]te", "[prefix]he", "[prefix]empty_flash") + return + rounds = num2text(get_accurate_ammo_count(pew)) + indicator = "bullet" + else + if(!pew_secondary.cell) + hud.set_hud(backing_color, "[prefix]oe", "[prefix]te", "[prefix]he", "[prefix]no_mag") + return + if(!get_accurate_laser_count(pew_secondary)) + hud.set_hud(backing_color, "[prefix]oe", "[prefix]te", "[prefix]he", "[prefix]empty_flash_laser") + return + rounds = num2text(get_accurate_laser_count(pew_secondary)) + indicator = "laser" + + + switch(length(rounds)) + if(1) + oth_o = "[prefix]o[rounds[1]]" + if(2) + oth_o = "[prefix]o[rounds[2]]" + oth_t = "[prefix]t[rounds[1]]" + if(3) + oth_o = "[prefix]o[rounds[3]]" + oth_t = "[prefix]t[rounds[2]]" + oth_h = "[prefix]h[rounds[1]]" + else + oth_o = "[prefix]o9" + oth_t = "[prefix]t9" + oth_h = "[prefix]h9" + hud.set_hud(backing_color, oth_o, oth_t, oth_h, indicator) diff --git a/code/modules/projectiles/guns/magic.dm b/code/modules/projectiles/guns/magic.dm deleted file mode 100644 index 1f8be937b645..000000000000 --- a/code/modules/projectiles/guns/magic.dm +++ /dev/null @@ -1,85 +0,0 @@ -/obj/item/gun/magic - name = "staff of nothing" - desc = "This staff is boring to watch because even though it came first you've seen everything it can do in other staves for years." - icon = 'icons/obj/guns/magic.dmi' - icon_state = "staffofnothing" - item_state = "staff" - lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' //not really a gun and some toys use these inhands - righthand_file = 'icons/mob/inhands/items_righthand.dmi' - fire_sound = 'sound/weapons/emitter.ogg' - flags_1 = CONDUCT_1 - w_class = WEIGHT_CLASS_HUGE - var/checks_antimagic = TRUE - var/max_charges = 6 - var/charges = 0 - var/recharge_rate = 4 - var/charge_tick = 0 - var/can_charge = TRUE - var/ammo_type - var/no_den_usage - trigger_guard = TRIGGER_GUARD_ALLOW_ALL // Has no trigger at all, uses magic instead - -/obj/item/gun/magic/process_fire(atom/target, mob/living/user, message, params, zone_override, bonus_spread) - if(no_den_usage) - var/area/A = get_area(user) - if(istype(A, /area/wizard_station)) - add_fingerprint(user) - to_chat(user, "You know better than to violate the security of The Den, best wait until you leave to use [src].") - return - else - no_den_usage = 0 - if(checks_antimagic && user.anti_magic_check(TRUE, FALSE, FALSE, 0, TRUE)) - add_fingerprint(user) - to_chat(user, "Something is interfering with [src].") - return - . = ..() - -/obj/item/gun/magic/can_shoot() - return charges - -/obj/item/gun/magic/recharge_newshot() - if (charges && chambered && !chambered.BB) - chambered.newshot() - -/obj/item/gun/magic/process_chamber(atom/shooter) - if(chambered && !chambered.BB) //if BB is null, i.e the shot has been fired... - charges--//... drain a charge - recharge_newshot() - -/obj/item/gun/magic/Initialize() - . = ..() - charges = max_charges - if(ammo_type) - chambered = new ammo_type(src) - if(can_charge) - START_PROCESSING(SSobj, src) - - -/obj/item/gun/magic/Destroy() - if(can_charge) - STOP_PROCESSING(SSobj, src) - return ..() - - -/obj/item/gun/magic/process() - if (charges >= max_charges) - charge_tick = 0 - return - charge_tick++ - if(charge_tick < recharge_rate) - return 0 - charge_tick = 0 - charges++ - if(charges == 1) - recharge_newshot() - return 1 - - -/obj/item/gun/magic/shoot_with_empty_chamber(mob/living/user as mob|obj) - to_chat(user, "The [name] whizzles quietly.") - -/obj/item/gun/magic/vv_edit_var(var_name, var_value) - . = ..() - switch(var_name) - if(NAMEOF(src, charges)) - recharge_newshot() diff --git a/code/modules/projectiles/guns/magic/staff.dm b/code/modules/projectiles/guns/magic/staff.dm deleted file mode 100644 index e8f1683d21a1..000000000000 --- a/code/modules/projectiles/guns/magic/staff.dm +++ /dev/null @@ -1,142 +0,0 @@ -/obj/item/gun/magic/staff - slot_flags = ITEM_SLOT_BACK - lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi' - item_flags = NEEDS_PERMIT | NO_MAT_REDEMPTION - -/obj/item/gun/magic/staff/change - name = "staff of change" - desc = "An artefact that spits bolts of coruscating energy which cause the target's very form to reshape itself." - fire_sound = 'sound/magic/staff_change.ogg' - ammo_type = /obj/item/ammo_casing/magic/change - icon_state = "staffofchange" - item_state = "staffofchange" - -/obj/item/gun/magic/staff/animate - name = "staff of animation" - desc = "An artefact that spits bolts of life-force which causes objects which are hit by it to animate and come to life! This magic doesn't affect machines." - fire_sound = 'sound/magic/staff_animation.ogg' - ammo_type = /obj/item/ammo_casing/magic/animate - icon_state = "staffofanimation" - item_state = "staffofanimation" - -/obj/item/gun/magic/staff/healing - name = "staff of healing" - desc = "An artefact that spits bolts of restoring magic which can remove ailments of all kinds and even raise the dead." - fire_sound = 'sound/magic/staff_healing.ogg' - ammo_type = /obj/item/ammo_casing/magic/heal - icon_state = "staffofhealing" - item_state = "staffofhealing" - -/obj/item/gun/magic/staff/healing/handle_suicide() //Stops people trying to commit suicide to heal themselves - return - -/obj/item/gun/magic/staff/chaos - name = "staff of chaos" - desc = "An artefact that spits bolts of chaotic magic that can potentially do anything." - fire_sound = 'sound/magic/staff_chaos.ogg' - ammo_type = /obj/item/ammo_casing/magic/chaos - icon_state = "staffofchaos" - item_state = "staffofchaos" - max_charges = 10 - recharge_rate = 2 - no_den_usage = 1 - var/allowed_projectile_types = list(/obj/projectile/magic/change, /obj/projectile/magic/animate, /obj/projectile/magic/resurrection, - /obj/projectile/magic/death, /obj/projectile/magic/teleport, /obj/projectile/magic/door, /obj/projectile/magic/aoe/fireball, - /obj/projectile/magic/spellblade, /obj/projectile/magic/arcane_barrage, /obj/projectile/magic/locker, /obj/projectile/magic/flying, - /obj/projectile/magic/bounty, /obj/projectile/magic/antimagic, /obj/projectile/magic/fetch, /obj/projectile/magic/sapping, - /obj/projectile/magic/necropotence, /obj/projectile/magic, /obj/projectile/temp/chill, /obj/projectile/magic/wipe) - -/obj/item/gun/magic/staff/chaos/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0) - chambered.projectile_type = pick(allowed_projectile_types) - . = ..() - -/obj/item/gun/magic/staff/door - name = "staff of door creation" - desc = "An artefact that spits bolts of transformative magic that can create doors in walls." - fire_sound = 'sound/magic/staff_door.ogg' - ammo_type = /obj/item/ammo_casing/magic/door - icon_state = "staffofdoor" - item_state = "staffofdoor" - max_charges = 10 - recharge_rate = 2 - no_den_usage = 1 - -/obj/item/gun/magic/staff/honk - name = "staff of the honkmother" - desc = "Honk." - fire_sound = 'sound/items/airhorn.ogg' - ammo_type = /obj/item/ammo_casing/magic/honk - icon_state = "honker" - item_state = "honker" - max_charges = 4 - recharge_rate = 8 - -/obj/item/gun/magic/staff/spellblade - name = "spellblade" - desc = "A deadly combination of laziness and boodlust, this blade allows the user to dismember their enemies without all the hard work of actually swinging the sword." - fire_sound = 'sound/magic/fireball.ogg' - ammo_type = /obj/item/ammo_casing/magic/spellblade - icon_state = "spellblade" - item_state = "spellblade" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - hitsound = 'sound/weapons/rapierhit.ogg' - force = 20 - armour_penetration = 75 - block_chance = 50 - sharpness = IS_SHARP - max_charges = 4 - -/obj/item/gun/magic/staff/spellblade/Initialize() - . = ..() - AddComponent(/datum/component/butchering, 15, 125, 0, hitsound) - -/obj/item/gun/magic/staff/spellblade/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(attack_type == PROJECTILE_ATTACK) - final_block_chance = 0 - return ..() - -/obj/item/gun/magic/staff/locker - name = "staff of the locker" - desc = "An artefact that expells encapsulating bolts, for incapacitating thy enemy." - fire_sound = 'sound/magic/staff_change.ogg' - ammo_type = /obj/item/ammo_casing/magic/locker - icon_state = "locker" - item_state = "locker" - max_charges = 6 - recharge_rate = 4 - -//yes, they don't have sounds. they're admin staves, and their projectiles will play the chaos bolt sound anyway so why bother? - -/obj/item/gun/magic/staff/flying - name = "staff of flying" - desc = "An artefact that spits bolts of graceful magic that can make something fly." - fire_sound = 'sound/magic/staff_healing.ogg' - ammo_type = /obj/item/ammo_casing/magic/flying - icon_state = "staffofflight" - item_state = "staffofflight" - -/obj/item/gun/magic/staff/sapping - name = "staff of sapping" - desc = "An artefact that spits bolts of sapping magic that can make something sad." - fire_sound = 'sound/magic/staff_change.ogg' - ammo_type = /obj/item/ammo_casing/magic/sapping - icon_state = "staffofsapping" - item_state = "staffofsapping" - -/obj/item/gun/magic/staff/necropotence - name = "staff of necropotence" - desc = "An artefact that spits bolts of death magic that can repurpose the soul." - fire_sound = 'sound/magic/staff_change.ogg' - ammo_type = /obj/item/ammo_casing/magic/necropotence - icon_state = "staffofnecropotence" - item_state = "staffofnecropotence" - -/obj/item/gun/magic/staff/wipe - name = "staff of possession" - desc = "An artefact that spits bolts of mind-unlocking magic that can let ghosts invade the victim's mind." - fire_sound = 'sound/magic/staff_change.ogg' - ammo_type = /obj/item/ammo_casing/magic/wipe - icon_state = "staffofwipe" - item_state = "staffofwipe" diff --git a/code/modules/projectiles/guns/magic/wand.dm b/code/modules/projectiles/guns/magic/wand.dm deleted file mode 100644 index c6a25127878a..000000000000 --- a/code/modules/projectiles/guns/magic/wand.dm +++ /dev/null @@ -1,266 +0,0 @@ -//For use in prob() to determine if an empty wand will shoot once then break. -#define WAND_WREST_CHANCE (1/121) - -/obj/item/gun/magic/wand - name = "wand" - desc = "You shouldn't have this." - ammo_type = /obj/item/ammo_casing/magic - icon_state = "nothingwand" - item_state = "wand" - base_icon_state = "nothingwand" - w_class = WEIGHT_CLASS_SMALL - can_charge = FALSE - max_charges = 100 //100, 50, 50, 34 (max charge distribution by 25%ths) - var/variable_charges = TRUE - -/obj/item/gun/magic/wand/Initialize() - if(prob(75) && variable_charges) //25% chance of listed max charges, 50% chance of 1/2 max charges, 25% chance of 1/3 max charges - if(prob(33)) - max_charges = CEILING(max_charges / 3, 1) - else - max_charges = CEILING(max_charges / 2, 1) - return ..() - -/obj/item/gun/magic/wand/examine(mob/user) - . = ..() - . += "Has [charges] charge\s remaining." - -/obj/item/gun/magic/wand/update_icon_state() - icon_state = "[base_icon_state][charges ? null : "-drained"]" - return ..() - -/obj/item/gun/magic/wand/attack(atom/target, mob/living/user) - if(target == user) - return - ..() - -/obj/item/gun/magic/wand/afterattack(atom/target, mob/living/user) - var/wrested = FALSE - if(!charges) - wrested = shoot_with_empty_chamber(user) - if(!wrested) - return - if(target == user) - if(no_den_usage) - var/area/A = get_area(user) - if(istype(A, /area/wizard_station)) - to_chat(user, "You know better than to violate the security of The Den, best wait until you leave to use [src].") - return - else - no_den_usage = 0 - zap_self(user) - else - . = ..() - if(wrested) - to_chat(user,"[src] overloads and disintegrates.") - qdel(src) - return - update_appearance() - -/obj/item/gun/magic/wand/shoot_with_empty_chamber(mob/living/user) - if(prob(100*WAND_WREST_CHANCE)) - to_chat(user,"You manage to activate [src] one last time.") - charges++ - recharge_newshot() - return TRUE - return ..() - -/obj/item/gun/magic/wand/proc/zap_self(mob/living/user) - user.visible_message("[user] zaps [user.p_them()]self with [src].") - playsound(user, fire_sound, 50, TRUE) - user.log_message("zapped [user.p_them()]self with a [src]", LOG_ATTACK) - - -///////////////////////////////////// -//WAND OF DEATH -///////////////////////////////////// - -/obj/item/gun/magic/wand/death - name = "wand of death" - desc = "This deadly wand overwhelms the victim's body with pure energy, slaying them without fail." - fire_sound = 'sound/magic/wandodeath.ogg' - ammo_type = /obj/item/ammo_casing/magic/death - icon_state = "deathwand" - base_icon_state = "deathwand" - max_charges = 3 //3, 2, 2, 1 - -/obj/item/gun/magic/wand/death/zap_self(mob/living/user) - ..() - charges-- - if(user.anti_magic_check()) - user.visible_message("[src] has no effect on [user]!") - return - if(isliving(user)) - var/mob/living/L = user - if(L.mob_biotypes & MOB_UNDEAD) //negative energy heals the undead - user.revive(full_heal = TRUE, admin_revive = TRUE) - to_chat(user, "You feel great!") - return - to_chat(user, "You irradiate yourself with pure negative energy! \ - [pick("Do not pass go. Do not collect 200 zorkmids.","You feel more confident in your spell casting skills.","You Die...","Do you want your possessions identified?")]\ - ") - user.death(FALSE) - -/obj/item/gun/magic/wand/death/debug - desc = "In some obscure circles, this is known as the 'cloning tester's friend'." - max_charges = 500 - variable_charges = FALSE - can_charge = TRUE - recharge_rate = 1 - - -///////////////////////////////////// -//WAND OF HEALING -///////////////////////////////////// - -/obj/item/gun/magic/wand/resurrection - name = "wand of healing" - desc = "This wand uses healing magics to heal and revive. They are rarely utilized within the Wizard Federation for some reason." - ammo_type = /obj/item/ammo_casing/magic/heal - fire_sound = 'sound/magic/staff_healing.ogg' - icon_state = "revivewand" - base_icon_state = "revivewand" - max_charges = 10 //10, 5, 5, 4 - -/obj/item/gun/magic/wand/resurrection/zap_self(mob/living/user) - ..() - charges-- - if(user.anti_magic_check()) - user.visible_message("[src] has no effect on [user]!") - return - if(isliving(user)) - var/mob/living/L = user - if(L.mob_biotypes & MOB_UNDEAD) //positive energy harms the undead - to_chat(user, "You irradiate yourself with pure positive energy! \ - [pick("Do not pass go. Do not collect 200 zorkmids.","You feel more confident in your spell casting skills.","You Die...","Do you want your possessions identified?")]\ - ") - user.death(0) - return - user.revive(full_heal = TRUE, admin_revive = TRUE) - to_chat(user, "You feel great!") - -/obj/item/gun/magic/wand/resurrection/debug //for testing - desc = "Is it possible for something to be even more powerful than regular magic? This wand is." - max_charges = 500 - variable_charges = FALSE - can_charge = TRUE - recharge_rate = 1 - -///////////////////////////////////// -//WAND OF POLYMORPH -///////////////////////////////////// - -/obj/item/gun/magic/wand/polymorph - name = "wand of polymorph" - desc = "This wand is attuned to chaos and will radically alter the victim's form." - ammo_type = /obj/item/ammo_casing/magic/change - icon_state = "polywand" - base_icon_state = "polywand" - fire_sound = 'sound/magic/staff_change.ogg' - max_charges = 10 //10, 5, 5, 4 - -/obj/item/gun/magic/wand/polymorph/zap_self(mob/living/user) - ..() //because the user mob ceases to exists by the time wabbajack fully resolves - - wabbajack(user) - charges-- - -///////////////////////////////////// -//WAND OF TELEPORTATION -///////////////////////////////////// - -/obj/item/gun/magic/wand/teleport - name = "wand of teleportation" - desc = "This wand will wrench targets through space and time to move them somewhere else." - ammo_type = /obj/item/ammo_casing/magic/teleport - fire_sound = 'sound/magic/wand_teleport.ogg' - icon_state = "telewand" - base_icon_state = "telewand" - max_charges = 10 //10, 5, 5, 4 - no_den_usage = TRUE - -/obj/item/gun/magic/wand/teleport/zap_self(mob/living/user) - if(do_teleport(user, user, 10, channel = TELEPORT_CHANNEL_MAGIC)) - var/datum/effect_system/smoke_spread/smoke = new - smoke.set_up(3, user.loc) - smoke.start() - charges-- - ..() - -/obj/item/gun/magic/wand/safety - name = "wand of safety" - desc = "This wand will use the lightest of bluespace currents to gently place the target somewhere safe." - ammo_type = /obj/item/ammo_casing/magic/safety - fire_sound = 'sound/magic/wand_teleport.ogg' - icon_state = "telewand" - base_icon_state = "telewand" - max_charges = 10 //10, 5, 5, 4 - no_den_usage = FALSE - -/obj/item/gun/magic/wand/safety/zap_self(mob/living/user) - var/turf/origin = get_turf(user) - var/turf/destination = find_safe_turf() - - if(do_teleport(user, destination, channel=TELEPORT_CHANNEL_MAGIC)) - for(var/t in list(origin, destination)) - var/datum/effect_system/smoke_spread/smoke = new - smoke.set_up(0, t) - smoke.start() - ..() - -/obj/item/gun/magic/wand/safety/debug - desc = "This wand has 'find_safe_turf()' engraved into its blue wood. Perhaps it's a secret message?" - max_charges = 500 - variable_charges = FALSE - can_charge = TRUE - recharge_rate = 1 - - -///////////////////////////////////// -//WAND OF DOOR CREATION -///////////////////////////////////// - -/obj/item/gun/magic/wand/door - name = "wand of door creation" - desc = "This particular wand can create doors in any wall for the unscrupulous wizard who shuns teleportation magics." - ammo_type = /obj/item/ammo_casing/magic/door - icon_state = "doorwand" - base_icon_state = "doorwand" - fire_sound = 'sound/magic/staff_door.ogg' - max_charges = 20 //20, 10, 10, 7 - no_den_usage = 1 - -/obj/item/gun/magic/wand/door/zap_self(mob/living/user) - to_chat(user, "You feel vaguely more open with your feelings.") - charges-- - ..() - -///////////////////////////////////// -//WAND OF FIREBALL -///////////////////////////////////// - -/obj/item/gun/magic/wand/fireball - name = "wand of fireball" - desc = "This wand shoots scorching balls of fire that explode into destructive flames." - fire_sound = 'sound/magic/fireball.ogg' - ammo_type = /obj/item/ammo_casing/magic/fireball - icon_state = "firewand" - base_icon_state = "firewand" - max_charges = 8 //8, 4, 4, 3 - -/obj/item/gun/magic/wand/fireball/zap_self(mob/living/user) - ..() - explosion(user.loc, -1, 0, 2, 3, 0, flame_range = 2) - charges-- - -///////////////////////////////////// -//WAND OF NOTHING -///////////////////////////////////// - -/obj/item/gun/magic/wand/nothing - name = "wand of nothing" - desc = "It's not just a stick, it's a MAGIC stick?" - ammo_type = /obj/item/ammo_casing/magic/nothing - - -#undef WAND_WREST_CHANCE diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 829393d4d115..0b9bcb8da4f7 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -1,7 +1,3 @@ - -#define MOVES_HITSCAN -1 //Not actually hitscan but close as we get without actual hitscan. -#define MUZZLE_EFFECT_PIXEL_INCREMENT 17 //How many pixels to move the muzzle flash up so your character doesn't look like they're shitting out lasers. - /obj/projectile name = "projectile" icon = 'icons/obj/projectiles.dmi' diff --git a/code/modules/projectiles/projectile/bullets/gauss.dm b/code/modules/projectiles/projectile/bullets/gauss.dm index 0955745ed798..6011adb61c88 100644 --- a/code/modules/projectiles/projectile/bullets/gauss.dm +++ b/code/modules/projectiles/projectile/bullets/gauss.dm @@ -5,7 +5,8 @@ icon_state = "gauss-pellet" damage = 25 range = 35 - light_color = COLOR_SOFT_RED + light_system = 2 + light_color = MOVABLE_LIGHT light_range = 3 // Ferromagnetic Lance (GAR AR) diff --git a/code/modules/projectiles/projectile/bullets/rifle.dm b/code/modules/projectiles/projectile/bullets/rifle.dm index ddd3319122c7..f7b963cff94b 100644 --- a/code/modules/projectiles/projectile/bullets/rifle.dm +++ b/code/modules/projectiles/projectile/bullets/rifle.dm @@ -77,5 +77,5 @@ /obj/projectile/bullet/c299 name = ".229 Eoehoma caseless bullet" - damage = 25 - armour_penetration = 20 + damage = 20 + armour_penetration = 10 diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm deleted file mode 100644 index 6ca85ca933ec..000000000000 --- a/code/modules/projectiles/projectile/magic.dm +++ /dev/null @@ -1,734 +0,0 @@ -/obj/projectile/magic - name = "bolt" - icon_state = "energy" - damage = 0 - damage_type = OXY - nodamage = TRUE - armour_penetration = 100 - flag = "magic" - -/obj/projectile/magic/death - name = "bolt of death" - icon_state = "pulse1_bl" - -/obj/projectile/magic/death/on_hit(target) - . = ..() - if(ismob(target)) - var/mob/M = target - if(M.anti_magic_check()) - M.visible_message("[src] vanishes on contact with [target]!") - return BULLET_ACT_BLOCK - if(isliving(M)) - var/mob/living/L = M - if(L.mob_biotypes & MOB_UNDEAD) //negative energy heals the undead - if(L.hellbound && L.stat == DEAD) - return BULLET_ACT_BLOCK - if(L.revive(full_heal = TRUE, admin_revive = TRUE)) - L.grab_ghost(force = TRUE) - to_chat(L, "You rise with a start, you're undead!!!") - else if(L.stat != DEAD) - to_chat(L, "You feel great!") - else - L.death(0) - else - M.death(0) - -/obj/projectile/magic/resurrection - name = "bolt of resurrection" - icon_state = "ion" - damage = 0 - damage_type = OXY - nodamage = TRUE - -/obj/projectile/magic/resurrection/on_hit(mob/living/carbon/target) - . = ..() - if(isliving(target)) - if(target.anti_magic_check()) - target.visible_message("[src] vanishes on contact with [target]!") - return BULLET_ACT_BLOCK - if(target.mob_biotypes & MOB_UNDEAD) //positive energy harms the undead - target.death(0) - else - if(target.hellbound && target.stat == DEAD) - return BULLET_ACT_BLOCK - if(target.revive(full_heal = TRUE, admin_revive = TRUE)) - target.grab_ghost(force = TRUE) // even suicides - to_chat(target, "You rise with a start, you're alive!!!") - else if(target.stat != DEAD) - to_chat(target, "You feel great!") - -/obj/projectile/magic/teleport - name = "bolt of teleportation" - icon_state = "bluespace" - damage = 0 - damage_type = OXY - nodamage = TRUE - var/inner_tele_radius = 0 - var/outer_tele_radius = 6 - -/obj/projectile/magic/teleport/on_hit(mob/target) - . = ..() - if(ismob(target)) - var/mob/M = target - if(M.anti_magic_check()) - M.visible_message("[src] fizzles on contact with [target]!") - return BULLET_ACT_BLOCK - var/teleammount = 0 - var/teleloc = target - if(!isturf(target)) - teleloc = target.loc - for(var/atom/movable/stuff in teleloc) - if(!stuff.anchored && stuff.loc && !isobserver(stuff)) - if(do_teleport(stuff, stuff, 10, channel = TELEPORT_CHANNEL_MAGIC)) - teleammount++ - var/datum/effect_system/smoke_spread/smoke = new - smoke.set_up(max(round(4 - teleammount),0), stuff.loc) //Smoke drops off if a lot of stuff is moved for the sake of sanity - smoke.start() - -/obj/projectile/magic/safety - name = "bolt of safety" - icon_state = "bluespace" - damage = 0 - damage_type = OXY - nodamage = TRUE - -/obj/projectile/magic/safety/on_hit(atom/target) - . = ..() - if(ismob(target)) - var/mob/M = target - if(M.anti_magic_check()) - M.visible_message("[src] fizzles on contact with [target]!") - return BULLET_ACT_BLOCK - if(isturf(target)) - return BULLET_ACT_HIT - - var/turf/origin_turf = get_turf(target) - var/turf/destination_turf = find_safe_turf() - - if(do_teleport(target, destination_turf, channel=TELEPORT_CHANNEL_MAGIC)) - for(var/t in list(origin_turf, destination_turf)) - var/datum/effect_system/smoke_spread/smoke = new - smoke.set_up(0, t) - smoke.start() - -/obj/projectile/magic/door - name = "bolt of door creation" - icon_state = "energy" - damage = 0 - damage_type = OXY - nodamage = TRUE - var/list/door_types = list(/obj/structure/mineral_door/wood, /obj/structure/mineral_door/iron, /obj/structure/mineral_door/silver, /obj/structure/mineral_door/gold, /obj/structure/mineral_door/uranium, /obj/structure/mineral_door/sandstone, /obj/structure/mineral_door/transparent/plasma, /obj/structure/mineral_door/transparent/diamond) - -/obj/projectile/magic/door/on_hit(atom/target) - . = ..() - if(istype(target, /obj/machinery/door)) - OpenDoor(target) - else - var/turf/T = get_turf(target) - if(isclosedturf(T) && !isindestructiblewall(T)) - CreateDoor(T) - -/obj/projectile/magic/door/proc/CreateDoor(turf/T) - var/door_type = pick(door_types) - var/obj/structure/mineral_door/D = new door_type(T) - T.ChangeTurf(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) - D.Open() - -/obj/projectile/magic/door/proc/OpenDoor(obj/machinery/door/D) - if(istype(D, /obj/machinery/door/airlock)) - var/obj/machinery/door/airlock/A = D - A.locked = FALSE - D.open() - -/obj/projectile/magic/change - name = "bolt of change" - icon_state = "ice_1" - damage = 0 - damage_type = BURN - nodamage = TRUE - -/obj/projectile/magic/change/on_hit(atom/change) - . = ..() - if(ismob(change)) - var/mob/M = change - if(M.anti_magic_check()) - M.visible_message("[src] fizzles on contact with [M]!") - qdel(src) - return BULLET_ACT_BLOCK - wabbajack(change) - qdel(src) - -/proc/wabbajack(mob/living/M) - if(!istype(M) || M.stat == DEAD || M.notransform || (GODMODE & M.status_flags)) - return - - M.notransform = TRUE - ADD_TRAIT(M, TRAIT_IMMOBILIZED, MAGIC_TRAIT) - ADD_TRAIT(M, TRAIT_HANDS_BLOCKED, MAGIC_TRAIT) - M.icon = null - M.cut_overlays() - M.invisibility = INVISIBILITY_ABSTRACT - - var/list/contents = M.contents.Copy() - - if(iscyborg(M)) - var/mob/living/silicon/robot/Robot = M - // Disconnect AI's in shells - if(Robot.connected_ai) - Robot.connected_ai.disconnect_shell() - if(Robot.mmi) - qdel(Robot.mmi) - Robot.notify_ai(NEW_BORG) - else - for(var/obj/item/W in contents) - if(!M.dropItemToGround(W)) - qdel(W) - - var/mob/living/new_mob - - var/randomize = pick("monkey","robot","slime","xeno","humanoid","animal") - switch(randomize) - if("monkey") - new_mob = new /mob/living/carbon/monkey(M.loc) - - if("robot") - var/robot = pick(200;/mob/living/silicon/robot, - /mob/living/silicon/robot/modules/syndicate, - /mob/living/silicon/robot/modules/syndicate/medical, - /mob/living/silicon/robot/modules/syndicate/saboteur, - 200;/mob/living/simple_animal/drone/polymorphed) - new_mob = new robot(M.loc) - if(issilicon(new_mob)) - new_mob.gender = M.gender - new_mob.invisibility = 0 - new_mob.job = "Cyborg" - var/mob/living/silicon/robot/Robot = new_mob - Robot.lawupdate = FALSE - Robot.connected_ai = null - Robot.mmi.transfer_identity(M) //Does not transfer key/client. - Robot.clear_inherent_laws(0) - Robot.clear_zeroth_law(0) - - if("slime") - new_mob = new /mob/living/simple_animal/slime/random(M.loc) - - if("xeno") - var/Xe - if(M.ckey) - Xe = pick(/mob/living/carbon/alien/humanoid/hunter,/mob/living/carbon/alien/humanoid/sentinel) - else - Xe = pick(/mob/living/carbon/alien/humanoid/hunter,/mob/living/simple_animal/hostile/alien/sentinel) - new_mob = new Xe(M.loc) - - if("animal") - var/path = pick(/mob/living/simple_animal/hostile/carp, - /mob/living/simple_animal/hostile/bear, - /mob/living/simple_animal/hostile/mushroom, - /mob/living/simple_animal/hostile/statue, - /mob/living/simple_animal/hostile/retaliate/bat, - /mob/living/simple_animal/hostile/retaliate/goat, - /mob/living/simple_animal/hostile/killertomato, - /mob/living/simple_animal/hostile/poison/giant_spider, - /mob/living/simple_animal/hostile/poison/giant_spider/hunter, - /mob/living/simple_animal/hostile/blob/blobbernaut/independent, - /mob/living/simple_animal/hostile/carp/ranged, - /mob/living/simple_animal/hostile/carp/ranged/chaos, - /mob/living/simple_animal/hostile/asteroid/basilisk/watcher, - /mob/living/simple_animal/hostile/asteroid/goliath/beast, - /mob/living/simple_animal/hostile/headcrab, - /mob/living/simple_animal/hostile/morph, - /mob/living/simple_animal/hostile/megafauna/dragon/lesser, - /mob/living/simple_animal/hostile/gorilla, - /mob/living/simple_animal/parrot, - /mob/living/simple_animal/pet/dog/corgi, - /mob/living/simple_animal/crab, - /mob/living/simple_animal/pet/dog/pug, - /mob/living/simple_animal/pet/cat, - /mob/living/simple_animal/mouse, - /mob/living/simple_animal/chicken, - /mob/living/simple_animal/cow, - /mob/living/simple_animal/hostile/lizard, - /mob/living/simple_animal/pet/fox, - /mob/living/simple_animal/butterfly, - /mob/living/simple_animal/pet/cat/cak, - /mob/living/simple_animal/chick) - new_mob = new path(M.loc) - - if("humanoid") - new_mob = new /mob/living/carbon/human(M.loc) - - if(prob(50)) - var/list/chooseable_races = list() - for(var/speciestype in subtypesof(/datum/species)) - var/datum/species/S = speciestype - if(initial(S.changesource_flags) & WABBAJACK) - chooseable_races += speciestype - - if(chooseable_races.len) - new_mob.set_species(pick(chooseable_races)) - - var/datum/preferences/A = new() //Randomize appearance for the human - A.copy_to(new_mob, icon_updates=0) - - var/mob/living/carbon/human/H = new_mob - H.update_hair() - H.update_body_parts(TRUE) - H.dna.update_dna_identity() - - if(!new_mob) - return - - // Some forms can still wear some items - for(var/obj/item/W in contents) - new_mob.equip_to_appropriate_slot(W) - - M.log_message("became [new_mob.real_name]", LOG_ATTACK, color="orange") - - new_mob.a_intent = INTENT_HARM - - M.wabbajack_act(new_mob) - - to_chat(new_mob, "Your form morphs into that of a [randomize].") - - var/poly_msg = get_policy(POLICY_POLYMORPH) - if(poly_msg) - to_chat(new_mob, poly_msg) - - M.transfer_observers_to(new_mob) - - qdel(M) - return new_mob - -/obj/projectile/magic/animate - name = "bolt of animation" - icon_state = "red_1" - damage = 0 - damage_type = BURN - nodamage = TRUE - -/obj/projectile/magic/animate/on_hit(atom/target, blocked = FALSE) - target.animate_atom_living(firer) - ..() - -/atom/proc/animate_atom_living(mob/living/owner = null) - if((isitem(src) || isstructure(src)) && !is_type_in_list(src, GLOB.protected_objects)) - if(istype(src, /obj/structure/statue/petrified)) - var/obj/structure/statue/petrified/P = src - if(P.petrified_mob) - var/mob/living/L = P.petrified_mob - var/mob/living/simple_animal/hostile/statue/S = new(P.loc, owner) - S.name = "statue of [L.name]" - if(owner) - S.faction = list("[REF(owner)]") - S.icon = P.icon - S.icon_state = P.icon_state - S.copy_overlays(P, TRUE) - S.color = P.color - S.atom_colours = P.atom_colours.Copy() - if(L.mind) - L.mind.transfer_to(S) - if(owner) - to_chat(S, "You are an animate statue. You cannot move when monitored, but are nearly invincible and deadly when unobserved! Do not harm [owner], your creator.") - P.forceMove(S) - return - else - var/obj/O = src - if(istype(O, /obj/item/gun)) - new /mob/living/simple_animal/hostile/mimic/copy/ranged(loc, src, owner) - else - new /mob/living/simple_animal/hostile/mimic/copy(loc, src, owner) - - else if(istype(src, /mob/living/simple_animal/hostile/mimic/copy)) - // Change our allegiance! - var/mob/living/simple_animal/hostile/mimic/copy/C = src - if(owner) - C.ChangeOwner(owner) - -/obj/projectile/magic/spellblade - name = "blade energy" - icon_state = "lavastaff" - damage = 15 - damage_type = BURN - flag = "magic" - dismemberment = 50 - nodamage = FALSE - -/obj/projectile/magic/spellblade/on_hit(target) - if(ismob(target)) - var/mob/M = target - if(M.anti_magic_check()) - M.visible_message("[src] vanishes on contact with [target]!") - qdel(src) - return BULLET_ACT_BLOCK - . = ..() - -/obj/projectile/magic/arcane_barrage - name = "arcane bolt" - icon_state = "arcane_barrage" - damage = 20 - damage_type = BURN - nodamage = FALSE - armour_penetration = 0 - flag = "magic" - hitsound = 'sound/weapons/barragespellhit.ogg' - -/obj/projectile/magic/arcane_barrage/on_hit(target) - if(ismob(target)) - var/mob/M = target - if(M.anti_magic_check()) - M.visible_message("[src] vanishes on contact with [target]!") - qdel(src) - return BULLET_ACT_BLOCK - . = ..() - - -/obj/projectile/magic/locker - name = "locker bolt" - icon_state = "locker" - nodamage = TRUE - flag = "magic" - var/weld = TRUE - var/created = FALSE //prevents creation of more then one locker if it has multiple hits - var/locker_suck = TRUE - var/obj/structure/closet/locker_temp_instance = /obj/structure/closet/decay - -/obj/projectile/magic/locker/Initialize() - . = ..() - locker_temp_instance = new(src) - -/obj/projectile/magic/locker/prehit_pierce(atom/A) - . = ..() - if(isliving(A) && locker_suck) - var/mob/living/M = A - if(M.anti_magic_check()) // no this doesn't check if ..() returned to phase through do I care no it's magic ain't gotta explain shit - M.visible_message("[src] vanishes on contact with [A]!") - return PROJECTILE_DELETE_WITHOUT_HITTING - if(!locker_temp_instance.insertion_allowed(M)) - return - M.forceMove(src) - return PROJECTILE_PIERCE_PHASE - -/obj/projectile/magic/locker/on_hit(target) - if(created) - return ..() - if(LAZYLEN(contents)) - for(var/atom/movable/AM in contents) - locker_temp_instance.insert(AM) - locker_temp_instance.welded = weld - locker_temp_instance.update_appearance() - created = TRUE - return ..() - -/obj/projectile/magic/locker/Destroy() - locker_suck = FALSE - RemoveElement(/datum/element/connect_loc, projectile_connections) //We do this manually so the forcemoves don't "hit" us. This behavior is kinda dumb, someone refactor this - for(var/atom/movable/AM in contents) - AM.forceMove(get_turf(src)) - . = ..() - -/obj/structure/closet/decay - breakout_time = 600 - icon_welded = null - var/magic_icon = "cursed" - var/weakened_icon = "decursed" - var/auto_destroy = TRUE - -/obj/structure/closet/decay/Initialize() - . = ..() - if(auto_destroy) - addtimer(CALLBACK(src, PROC_REF(bust_open)), 5 MINUTES) - addtimer(CALLBACK(src, PROC_REF(magicly_lock)), 5) - -/obj/structure/closet/decay/proc/magicly_lock() - if(!welded) - return - icon_state = magic_icon - update_appearance() - -/obj/structure/closet/decay/after_weld(weld_state) - if(weld_state) - unmagify() - -/obj/structure/closet/decay/proc/decay() - animate(src, alpha = 0, time = 30) - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(qdel), src), 30) - -/obj/structure/closet/decay/open(mob/living/user, force = FALSE) - . = ..() - if(.) - if(icon_state == magic_icon) //check if we used the magic icon at all before giving it the lesser magic icon - unmagify() - else - addtimer(CALLBACK(src, PROC_REF(decay)), 15 SECONDS) - -/obj/structure/closet/decay/proc/unmagify() - icon_state = weakened_icon - update_appearance() - addtimer(CALLBACK(src, PROC_REF(decay)), 15 SECONDS) - icon_welded = "welded" - -/obj/projectile/magic/flying - name = "bolt of flying" - icon_state = "flight" - -/obj/projectile/magic/flying/on_hit(target) - . = ..() - if(isliving(target)) - var/mob/living/L = target - if(L.anti_magic_check()) - L.visible_message("[src] vanishes on contact with [target]!") - return BULLET_ACT_BLOCK - var/atom/throw_target = get_edge_target_turf(L, angle2dir(Angle)) - L.throw_at(throw_target, 200, 4) - -/obj/projectile/magic/bounty - name = "bolt of bounty" - icon_state = "bounty" - -/obj/projectile/magic/bounty/on_hit(target) - . = ..() - if(isliving(target)) - var/mob/living/L = target - if(L.anti_magic_check() || !firer) - L.visible_message("[src] vanishes on contact with [target]!") - return BULLET_ACT_BLOCK - L.apply_status_effect(STATUS_EFFECT_BOUNTY, firer) - -/obj/projectile/magic/antimagic - name = "bolt of antimagic" - icon_state = "antimagic" - -/obj/projectile/magic/antimagic/on_hit(target) - . = ..() - if(isliving(target)) - var/mob/living/L = target - if(L.anti_magic_check()) - L.visible_message("[src] vanishes on contact with [target]!") - return BULLET_ACT_BLOCK - L.apply_status_effect(STATUS_EFFECT_ANTIMAGIC) - -/obj/projectile/magic/fetch - name = "bolt of fetching" - icon_state = "fetch" - -/obj/projectile/magic/fetch/on_hit(target) - . = ..() - if(isliving(target)) - var/mob/living/L = target - if(L.anti_magic_check() || !firer) - L.visible_message("[src] vanishes on contact with [target]!") - return BULLET_ACT_BLOCK - var/atom/throw_target = get_edge_target_turf(L, get_dir(L, firer)) - L.throw_at(throw_target, 200, 4) - -/obj/projectile/magic/sapping - name = "bolt of sapping" - icon_state = "sapping" - -/obj/projectile/magic/sapping/on_hit(target) - . = ..() - if(ismob(target)) - var/mob/M = target - if(M.anti_magic_check()) - M.visible_message("[src] vanishes on contact with [target]!") - return BULLET_ACT_BLOCK - SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, src, /datum/mood_event/sapped) - -/obj/projectile/magic/necropotence - name = "bolt of necropotence" - icon_state = "necropotence" - -/obj/projectile/magic/necropotence/on_hit(target) - . = ..() - if(isliving(target)) - var/mob/living/L = target - if(L.anti_magic_check() || !L.mind || !L.mind.hasSoul) - L.visible_message("[src] vanishes on contact with [target]!") - return BULLET_ACT_BLOCK - to_chat(L, "Your body feels drained and there is a burning pain in your chest.") - L.maxHealth -= 20 - L.health = min(L.health, L.maxHealth) - if(L.maxHealth <= 0) - to_chat(L, "Your weakened soul is completely consumed by the [src]!") - L.mind.hasSoul = FALSE - for(var/obj/effect/proc_holder/spell/spell in L.mind.spell_list) - spell.charge_counter = spell.charge_max - spell.recharging = FALSE - spell.update_appearance() - -/obj/projectile/magic/fortify - name = "bolt of light" - icon_state = "spark" - -/obj/projectile/magic/fortify/on_hit(target) - . = ..() - if(isliving(target)) - var/mob/living/L = target - if(L.anti_magic_check() || !L.mind || !L.mind.hasSoul) - L.visible_message("[src] vanishes on contact with [target]!") - return BULLET_ACT_BLOCK - to_chat(L, "You feel your body flood with magical strength! Your flesh feels cleansed, and somehow... tougher.") - L.maxHealth += 20 - L.heal_overall_damage(20, 20) - L.apply_damage(-200, CLONE)//cleanses cellular damage - if(L.mind.hasSoul == FALSE)//restores consumed souls - to_chat(L, "You feel a warm light in your chest... the [src] has restored something you'd long forgotten.") - L.mind.hasSoul = TRUE - if(L.hellbound == 1) - L.hellbound = 0//devil economy in shambles - for(var/obj/effect/proc_holder/spell/spell in L.mind.spell_list) - spell.charge_counter = spell.charge_max - spell.recharging = FALSE - spell.update_appearance() - -/obj/projectile/magic/wipe - name = "bolt of possession" - icon_state = "wipe" - -/obj/projectile/magic/wipe/on_hit(target) - . = ..() - if(iscarbon(target)) - var/mob/living/carbon/M = target - if(M.anti_magic_check()) - M.visible_message("[src] vanishes on contact with [target]!") - return BULLET_ACT_BLOCK - for(var/x in M.get_traumas())//checks to see if the victim is already going through possession - if(istype(x, /datum/brain_trauma/special/imaginary_friend/trapped_owner)) - M.visible_message("[src] vanishes on contact with [target]!") - return BULLET_ACT_BLOCK - to_chat(M, "Your mind has been opened to possession!") - possession_test(M) - return BULLET_ACT_HIT - -/obj/projectile/magic/wipe/proc/possession_test(mob/living/carbon/M) - var/datum/brain_trauma/special/imaginary_friend/trapped_owner/trauma = M.gain_trauma(/datum/brain_trauma/special/imaginary_friend/trapped_owner) - var/poll_message = "Do you want to play as [M.real_name]?" - if(M.mind && M.mind.assigned_role) - poll_message = "[poll_message] Job:[M.mind.assigned_role]." - if(M.mind && M.mind.special_role) - poll_message = "[poll_message] Status:[M.mind.special_role]." - else if(M.mind) - var/datum/antagonist/A = M.mind.has_antag_datum(/datum/antagonist/) - if(A) - poll_message = "[poll_message] Status:[A.name]." - var/list/mob/dead/observer/candidates = pollCandidatesForMob(poll_message, ROLE_PAI, null, FALSE, 100, M) - if(M.stat == DEAD)//boo. - return - if(LAZYLEN(candidates)) - var/mob/dead/observer/C = pick(candidates) - to_chat(M, "You have been noticed by a ghost and it has possessed you!") - var/oldkey = M.key - M.ghostize(0) - M.key = C.key - trauma.friend.key = oldkey - trauma.friend.reset_perspective(null) - trauma.friend.Show() - trauma.friend_initialized = TRUE - else - to_chat(M, "Your mind has managed to go unnoticed in the spirit world.") - qdel(trauma) - -/obj/projectile/magic/aoe - name = "Area Bolt" - desc = "What the fuck does this do?!" - damage = 0 - var/proxdet = TRUE - -/obj/projectile/magic/aoe/Range() - if(proxdet) - for(var/mob/living/L in range(1, get_turf(src))) - if(L.stat != DEAD && L != firer && !L.anti_magic_check()) - return Bump(L) - ..() - - -/obj/projectile/magic/aoe/lightning - name = "lightning bolt" - icon_state = "tesla_projectile" //Better sprites are REALLY needed and appreciated!~ - damage = 15 - damage_type = BURN - nodamage = FALSE - speed = 0.3 - flag = "magic" - - var/zap_power = 20000 - var/zap_range = 15 - var/zap_flags = ZAP_MOB_DAMAGE | ZAP_MOB_STUN | ZAP_OBJ_DAMAGE - var/chain - var/mob/living/caster - -/obj/projectile/magic/aoe/lightning/fire(setAngle) - if(caster) - chain = caster.Beam(src, icon_state = "lightning[rand(1, 12)]", time = INFINITY, maxdistance = INFINITY) - ..() - -/obj/projectile/magic/aoe/lightning/on_hit(target) - . = ..() - if(ismob(target)) - var/mob/M = target - if(M.anti_magic_check()) - visible_message("[src] fizzles on contact with [target]!") - qdel(src) - return BULLET_ACT_BLOCK - tesla_zap(src, zap_range, zap_power, zap_flags) - qdel(src) - -/obj/projectile/magic/aoe/lightning/Destroy() - qdel(chain) - . = ..() - -/obj/projectile/magic/aoe/fireball - name = "bolt of fireball" - icon_state = "fireball" - damage = 10 - damage_type = BRUTE - nodamage = FALSE - - //explosion values - var/exp_heavy = 0 - var/exp_light = 2 - var/exp_flash = 3 - var/exp_fire = 2 - -/obj/projectile/magic/aoe/fireball/on_hit(target) - . = ..() - if(ismob(target)) - var/mob/living/M = target - if(M.anti_magic_check()) - visible_message("[src] vanishes into smoke on contact with [target]!") - return BULLET_ACT_BLOCK - M.take_overall_damage(0,10) //between this 10 burn, the 10 brute, the explosion brute, and the onfire burn, your at about 65 damage if you stop drop and roll immediately - var/turf/T = get_turf(target) - explosion(T, -1, exp_heavy, exp_light, exp_flash, 0, flame_range = exp_fire) - -/obj/projectile/magic/aoe/fireball/infernal - name = "infernal fireball" - exp_heavy = -1 - exp_light = -1 - exp_flash = 4 - exp_fire= 5 - -/obj/projectile/magic/aoe/fireball/infernal/on_hit(target) - . = ..() - if(ismob(target)) - var/mob/living/M = target - if(M.anti_magic_check()) - return BULLET_ACT_BLOCK - var/turf/T = get_turf(target) - for(var/i=0, i<50, i+=10) - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(explosion), T, -1, exp_heavy, exp_light, exp_flash, FALSE, FALSE, exp_fire), i) - -//still magic related, but a different path - -/obj/projectile/temp/chill - name = "bolt of chills" - icon_state = "ice_2" - damage = 0 - damage_type = BURN - nodamage = FALSE - armour_penetration = 100 - temperature = -200 // Cools you down greatly per hit - flag = "magic" - -/obj/projectile/magic/nothing - name = "bolt of nothing" diff --git a/code/modules/projectiles/projectile/magic/spellcard.dm b/code/modules/projectiles/projectile/magic/spellcard.dm deleted file mode 100644 index 464586d2f8a4..000000000000 --- a/code/modules/projectiles/projectile/magic/spellcard.dm +++ /dev/null @@ -1,6 +0,0 @@ -/obj/projectile/spellcard - name = "enchanted card" - desc = "A piece of paper enchanted to give it extreme durability and stiffness, along with a very hot burn to anyone unfortunate enough to get hit by a charged one." - icon_state = "spellcard" - damage_type = BURN - damage = 2 diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index 9bdc513289e1..5e45c756c881 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -138,16 +138,15 @@ other types of metals and chemistry for reagents). blueprints[1] = new /datum/design/c10mm() -/obj/item/disk/design_disk/adv/disposable_gun +/obj/item/disk/design_disk/disposable_gun name = "design disk - disposable gun" desc = "A design disk containing designs for a cheap and disposable gun." illustration = "gun" max_blueprints = 2 -/obj/item/disk/design_disk/adv/disposable_gun/Initialize() +/obj/item/disk/design_disk/disposable_gun/Initialize() . = ..() blueprints[1] = new /datum/design/disposable_gun() - blueprints[2] = new /datum/design/pizza_disposable_gun() /obj/item/disk/design_disk/clip_mechs name = "design disk - CLIP mecha modifications" diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index 5edbb4df1158..45d65ebf0753 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -650,14 +650,6 @@ build_path = /obj/item/gun/ballistic/automatic/pistol/disposable category = list("Imported") -/datum/design/pizza_disposable_gun - name = "Pizza Disposable Gun" - id = "disposable_pizza" - build_type = AUTOLATHE - materials = list(/datum/material/pizza = 4000) - build_path = /obj/item/gun/ballistic/automatic/pistol/disposable/pizza - category = list("Imported") - //SRM Ballistics /datum/design/doublebarrel name = "Double Barrel Shotgun" diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index 9016d60515e7..ce473ad739cb 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -355,16 +355,6 @@ C.name = "Cup of Suspicious Liquid" C.desc = "It has a large hazard symbol printed on the side in fading ink." investigate_log("Experimentor has made a cup of [chosenchem] coffee.", INVESTIGATE_EXPERIMENTOR) - else if(prob(EFFECT_PROB_VERYLOW-badThingCoeff)) - var/turf/start = get_turf(src) - var/mob/M = locate(/mob/living) in view(src, 3) - var/turf/MT = get_turf(M) - if(MT) - visible_message("[src] dangerously overheats, launching a flaming fuel orb!") - investigate_log("Experimentor has launched a fireball at [M]!", INVESTIGATE_EXPERIMENTOR) - var/obj/projectile/magic/aoe/fireball/FB = new /obj/projectile/magic/aoe/fireball(start) - FB.preparePixelProjectile(MT, start) - FB.fire() else if(prob(EFFECT_PROB_LOW-badThingCoeff)) visible_message("[src] malfunctions, melting [exp_on] and releasing a burst of flame!") explosion(loc, -1, 0, 0, 0, 0, flame_range = 2) diff --git a/code/modules/research/xenobiology/crossbreeding/_weapons.dm b/code/modules/research/xenobiology/crossbreeding/_weapons.dm index 29ea3fbd4298..ac663059d0c0 100644 --- a/code/modules/research/xenobiology/crossbreeding/_weapons.dm +++ b/code/modules/research/xenobiology/crossbreeding/_weapons.dm @@ -65,54 +65,3 @@ Slimecrossing Weapons /obj/item/shield/adamantineshield/ComponentInitialize() . = ..() AddComponent(/datum/component/two_handed, require_twohands=TRUE, force_wielded=15) - -//Bloodchiller - Chilling Green -/obj/item/gun/magic/bloodchill - name = "blood chiller" - desc = "A horrifying weapon made of your own bone and blood vessels. It shoots slowing globules of your own blood. Ech." - icon = 'icons/obj/slimecrossing.dmi' - icon_state = "bloodgun" - item_state = "bloodgun" - lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi' - item_flags = ABSTRACT | DROPDEL - w_class = WEIGHT_CLASS_HUGE - slot_flags = NONE - force = 5 - max_charges = 1 //Recharging costs blood. - recharge_rate = 1 - ammo_type = /obj/item/ammo_casing/magic/bloodchill - fire_sound = 'sound/effects/attackblob.ogg' - -/obj/item/gun/magic/bloodchill/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT) - -/obj/item/gun/magic/bloodchill/process() - charge_tick++ - if(charge_tick < recharge_rate || charges >= max_charges) - return 0 - charge_tick = 0 - var/mob/living/M = loc - if(istype(M) && M.blood_volume >= 20) - charges++ - M.blood_volume -= 20 - if(charges == 1) - recharge_newshot() - return 1 - -/obj/item/ammo_casing/magic/bloodchill - projectile_type = /obj/projectile/magic/bloodchill - -/obj/projectile/magic/bloodchill - name = "blood ball" - icon_state = "pulse0_bl" - damage = 0 - damage_type = OXY - nodamage = TRUE - hitsound = 'sound/effects/splat.ogg' - -/obj/projectile/magic/bloodchill/on_hit(mob/living/target) - . = ..() - if(isliving(target)) - target.apply_status_effect(/datum/status_effect/bloodchill) diff --git a/code/modules/research/xenobiology/crossbreeding/chilling.dm b/code/modules/research/xenobiology/crossbreeding/chilling.dm index 89fa16cca7f5..9fe7857c073b 100644 --- a/code/modules/research/xenobiology/crossbreeding/chilling.dm +++ b/code/modules/research/xenobiology/crossbreeding/chilling.dm @@ -235,29 +235,6 @@ Chilling extracts: user.visible_message("[src] lets out a peaceful ring as it shatters, but nothing happens...") ..() -/obj/item/slimecross/chilling/green - colour = "green" - effect_desc = "Creates a bone gun in the hand it is used in, which uses blood as ammo." - -/obj/item/slimecross/chilling/green/do_effect(mob/user) - var/which_hand = "l_hand" - if(!(user.active_hand_index % 2)) - which_hand = "r_hand" - var/mob/living/L = user - if(!istype(user)) - return - var/obj/item/held = L.get_active_held_item() //This should be itself, but just in case... - L.dropItemToGround(held) - var/obj/item/gun/magic/bloodchill/gun = new(user) - if(!L.put_in_hands(gun)) - qdel(gun) - user.visible_message("[src] flash-freezes [user]'s arm, cracking the flesh horribly!") - else - user.visible_message("[src] chills and snaps off the front of the bone on [user]'s arm, leaving behind a strange, gun-like structure!") - user.emote("scream") - L.apply_damage(30,BURN,which_hand) - ..() - /obj/item/slimecross/chilling/pink colour = "pink" effect_desc = "Creates a slime corgi puppy." diff --git a/code/modules/ruins/icemoonruin_code/hotsprings.dm b/code/modules/ruins/icemoonruin_code/hotsprings.dm deleted file mode 100644 index dd4d39e91a20..000000000000 --- a/code/modules/ruins/icemoonruin_code/hotsprings.dm +++ /dev/null @@ -1,56 +0,0 @@ -GLOBAL_LIST_EMPTY(cursed_minds) - -/** - * Turns whoever enters into a mob or random person - * - * If mob is chosen, turns the person into a random animal type - * If appearance is chosen, turns the person into a random human with a random species - * This changes name, and changes their DNA as well - * Random species is same as wizard swap event so people don't get killed ex: plasmamen - * Once the spring is used, it cannot be used by the same mind ever again - * After usage, teleports the user back to a random safe turf (so mobs are not killed by ice moon atmosphere) - * - */ - -/turf/open/water/cursed_spring - baseturfs = /turf/open/water/cursed_spring - planetary_atmos = TRUE - initial_gas_mix = ICEMOON_DEFAULT_ATMOS - -/turf/open/water/cursed_spring/Entered(atom/movable/thing, atom/oldLoc) - . = ..() - if(!isliving(thing)) - return - var/mob/living/L = thing - if(!L.client) - return - if(GLOB.cursed_minds[L.mind]) - return - GLOB.cursed_minds[L.mind] = TRUE - RegisterSignal(L.mind, COMSIG_PARENT_QDELETING, PROC_REF(remove_from_cursed)) - var/random_choice = pick("Mob", "Appearance") - switch(random_choice) - if("Mob") - L = wabbajack(L, "animal") - if("Appearance") - var/mob/living/carbon/human/H = wabbajack(L, "humanoid") - randomize_human(H) - var/list/all_species = list() - for(var/stype in subtypesof(/datum/species)) - var/datum/species/S = stype - if(initial(S.changesource_flags) & RACE_SWAP) - all_species += stype - var/random_race = pick(all_species) - H.set_species(random_race) - H.dna.unique_enzymes = H.dna.generate_unique_enzymes() - L = H - var/turf/T = find_safe_turf() - L.forceMove(T) - to_chat(L, "You blink and find yourself in [get_area_name(T)].") - -/** - * Deletes minds from the cursed minds list after their deletion - * - */ -/turf/open/water/cursed_spring/proc/remove_from_cursed(datum/mind/M) - GLOB.cursed_minds -= M diff --git a/code/modules/shuttle/special.dm b/code/modules/shuttle/special.dm index 2603d9ea3e24..1ddb26efba88 100644 --- a/code/modules/shuttle/special.dm +++ b/code/modules/shuttle/special.dm @@ -1,134 +1,5 @@ // Special objects for shuttle templates go here if nowhere else -// Wabbajack statue, a sleeping frog statue that shoots bolts of change if -// living carbons are put on its altar/tables - -/obj/machinery/power/emitter/energycannon/magical - name = "wabbajack statue" - desc = "Who am I? What is my purpose in life? What do I mean by who am I?" - projectile_type = /obj/projectile/magic/change - icon = 'icons/obj/machines/magic_emitter.dmi' - icon_state = "wabbajack_statue" - icon_state_on = "wabbajack_statue_on" - base_icon_state = "wabbajack_statue" - active = FALSE - allow_switch_interact = FALSE - var/list/active_tables = list() - var/tables_required = 2 - -/obj/machinery/power/emitter/energycannon/magical/Initialize() - . = ..() - if(prob(50)) - desc = "Oh no, not again." - update_appearance() - -/obj/machinery/power/emitter/energycannon/magical/update_icon_state() - . = ..() - icon_state = active ? icon_state_on : initial(icon_state) - -/obj/machinery/power/emitter/energycannon/magical/process() - . = ..() - if(active_tables.len >= tables_required) - if(!active) - visible_message("\ - [src] opens its eyes.") - active = TRUE - else - if(active) - visible_message("\ - [src] closes its eyes.") - active = FALSE - update_appearance() - -/obj/machinery/power/emitter/energycannon/magical/attackby(obj/item/W, mob/user, params) - return - -/obj/machinery/power/emitter/energycannon/magical/ex_act(severity) - return - -/obj/machinery/power/emitter/energycannon/magical/emag_act(mob/user) - return - -/obj/structure/table/abductor/wabbajack - name = "wabbajack altar" - desc = "Whether you're sleeping or waking, it's going to be quite chaotic." - max_integrity = 1000 - verb_say = "chants" - var/obj/machinery/power/emitter/energycannon/magical/our_statue - var/list/mob/living/sleepers = list() - var/never_spoken = TRUE - flags_1 = NODECONSTRUCT_1 - -/obj/structure/table/abductor/wabbajack/Initialize(mapload) - . = ..() - START_PROCESSING(SSobj, src) - -/obj/structure/table/abductor/wabbajack/Destroy() - STOP_PROCESSING(SSobj, src) - . = ..() - -/obj/structure/table/abductor/wabbajack/process() - var/area = orange(4, src) - if(!our_statue) - for(var/obj/machinery/power/emitter/energycannon/magical/M in area) - our_statue = M - break - - if(!our_statue) - name = "inert [initial(name)]" - return - else - name = initial(name) - - var/turf/T = get_turf(src) - var/list/found = list() - for(var/mob/living/carbon/C in T) - if(C.stat != DEAD) - found += C - - // New sleepers - for(var/i in found - sleepers) - var/mob/living/L = i - L.add_atom_colour("#800080", TEMPORARY_COLOUR_PRIORITY) - L.visible_message("A strange purple glow wraps itself around [L] as [L.p_they()] suddenly fall[L.p_s()] unconscious.", - "[desc]") - // Don't let them sit suround unconscious forever - addtimer(CALLBACK(src, PROC_REF(sleeper_dreams), L), 100) - - // Existing sleepers - for(var/i in found) - var/mob/living/L = i - L.SetSleeping(200) - - // Missing sleepers - for(var/i in sleepers - found) - var/mob/living/L = i - L.remove_atom_colour(TEMPORARY_COLOUR_PRIORITY, "#800080") - L.visible_message("The glow from [L] fades \ - away.") - L.grab_ghost() - - sleepers = found - - if(sleepers.len) - our_statue.active_tables |= src - if(never_spoken || prob(5)) - say(desc) - never_spoken = FALSE - else - our_statue.active_tables -= src - -/obj/structure/table/abductor/wabbajack/proc/sleeper_dreams(mob/living/sleeper) - if(sleeper in sleepers) - to_chat(sleeper, "While you slumber, you have the strangest dream, like you can see yourself from the outside.") - sleeper.ghostize(TRUE) - -/obj/structure/table/abductor/wabbajack/left - desc = "You sleep so it may wake." - -/obj/structure/table/abductor/wabbajack/right - desc = "It wakes so you may sleep." - // Bar staff, GODMODE mobs(as long as they stay in the shuttle) that just want to make sure people have drinks // and a good time. diff --git a/code/modules/spells/spell_types/aimed.dm b/code/modules/spells/spell_types/aimed.dm index 9e30c708774d..46737c5b5a99 100644 --- a/code/modules/spells/spell_types/aimed.dm +++ b/code/modules/spells/spell_types/aimed.dm @@ -2,7 +2,7 @@ /obj/effect/proc_holder/spell/aimed name = "aimed projectile spell" base_icon_state = "projectile" - var/projectile_type = /obj/projectile/magic/teleport + var/projectile_type = /obj/projectile var/deactive_msg = "You discharge your projectile..." var/active_msg = "You charge your projectile!" var/active_icon_state = "projectile" @@ -106,7 +106,7 @@ projectile_var_overrides = list("zap_range" = 15, "zap_power" = 20000, "zap_flags" = ZAP_MOB_DAMAGE) active_msg = "You energize your hands with arcane lightning!" deactive_msg = "You let the energy flow out of your hands back into yourself..." - projectile_type = /obj/projectile/magic/aoe/lightning + projectile_type = /obj/projectile/magic /obj/effect/proc_holder/spell/aimed/fireball name = "Fireball" @@ -118,7 +118,7 @@ invocation_type = INVOCATION_SHOUT range = 20 cooldown_min = 20 //10 deciseconds reduction per rank - projectile_type = /obj/projectile/magic/aoe/fireball + projectile_type = /obj/projectile/magic base_icon_state = "fireball" action_icon_state = "fireball0" sound = 'sound/magic/fireball.ogg' @@ -130,60 +130,3 @@ var/range = 6 + 2*spell_level projectile_var_overrides = list("range" = range) return ..() - -/obj/effect/proc_holder/spell/aimed/spell_cards - name = "Spell Cards" - desc = "Blazing hot rapid-fire homing cards. Send your foes to the shadow realm with their mystical power!" - school = "evocation" - charge_max = 50 - clothes_req = FALSE - invocation = "Sigi'lu M'Fan 'Tasia" - invocation_type = INVOCATION_SHOUT - range = 40 - cooldown_min = 10 - projectile_amount = 5 - projectiles_per_fire = 7 - projectile_type = /obj/projectile/spellcard - base_icon_state = "spellcard" - action_icon_state = "spellcard0" - var/datum/weakref/current_target_weakref - var/projectile_turnrate = 10 - var/projectile_pixel_homing_spread = 32 - var/projectile_initial_spread_amount = 30 - var/projectile_location_spread_amount = 12 - var/datum/component/lockon_aiming/lockon_component - ranged_clickcd_override = TRUE - -/obj/effect/proc_holder/spell/aimed/spell_cards/on_activation(mob/M) - QDEL_NULL(lockon_component) - lockon_component = M.AddComponent(/datum/component/lockon_aiming, 5, typecacheof(list(/mob/living)), 1, null, CALLBACK(src, PROC_REF(on_lockon_component))) - -/obj/effect/proc_holder/spell/aimed/spell_cards/proc/on_lockon_component(list/locked_weakrefs) - if(!length(locked_weakrefs)) - current_target_weakref = null - return - current_target_weakref = locked_weakrefs[1] - var/atom/A = current_target_weakref.resolve() - if(A) - var/mob/M = lockon_component.parent - M.face_atom(A) - -/obj/effect/proc_holder/spell/aimed/spell_cards/on_deactivation(mob/M) - QDEL_NULL(lockon_component) - -/obj/effect/proc_holder/spell/aimed/spell_cards/ready_projectile(obj/projectile/P, atom/target, mob/user, iteration) - if(current_target_weakref) - var/atom/A = current_target_weakref.resolve() - if(A && get_dist(A, user) < 7) - P.homing_turn_speed = projectile_turnrate - P.homing_inaccuracy_min = projectile_pixel_homing_spread - P.homing_inaccuracy_max = projectile_pixel_homing_spread - P.set_homing_target(current_target_weakref.resolve()) - var/rand_spr = rand() - var/total_angle = projectile_initial_spread_amount * 2 - var/adjusted_angle = total_angle - ((projectile_initial_spread_amount / projectiles_per_fire) * 0.5) - var/one_fire_angle = adjusted_angle / projectiles_per_fire - var/current_angle = iteration * one_fire_angle * rand_spr - (projectile_initial_spread_amount / 2) - P.pixel_x = rand(-projectile_location_spread_amount, projectile_location_spread_amount) - P.pixel_y = rand(-projectile_location_spread_amount, projectile_location_spread_amount) - P.preparePixelProjectile(target, user, null, current_angle) diff --git a/code/modules/spells/spell_types/charge.dm b/code/modules/spells/spell_types/charge.dm index 57325e685f4d..225c36580e49 100644 --- a/code/modules/spells/spell_types/charge.dm +++ b/code/modules/spells/spell_types/charge.dm @@ -51,20 +51,6 @@ I.used = FALSE charged_item = I break - else if(istype(item, /obj/item/gun/magic)) - var/obj/item/gun/magic/I = item - if(prob(80) && !I.can_charge) - I.max_charges-- - if(I.max_charges <= 0) - I.max_charges = 0 - burnt_out = TRUE - I.charges = I.max_charges - if(istype(item, /obj/item/gun/magic/wand) && I.max_charges != 0) - var/obj/item/gun/magic/W = item - W.icon_state = initial(W.icon_state) - I.recharge_newshot() - charged_item = I - break else if(istype(item, /obj/item/stock_parts/cell)) var/obj/item/stock_parts/cell/C = item if(!C.self_recharge) diff --git a/code/modules/spells/spell_types/devil.dm b/code/modules/spells/spell_types/devil.dm index b7da88dfe790..421b7f40f11c 100644 --- a/code/modules/spells/spell_types/devil.dm +++ b/code/modules/spells/spell_types/devil.dm @@ -84,7 +84,7 @@ invocation_type = INVOCATION_SHOUT range = 2 - projectile_type = /obj/projectile/magic/aoe/fireball/infernal + projectile_type = /obj/projectile/magic action_background_icon_state = "bg_demon" diff --git a/code/modules/spells/spell_types/infinite_guns.dm b/code/modules/spells/spell_types/infinite_guns.dm deleted file mode 100644 index 3f400a8fb4bc..000000000000 --- a/code/modules/spells/spell_types/infinite_guns.dm +++ /dev/null @@ -1,27 +0,0 @@ -/obj/effect/proc_holder/spell/targeted/infinite_guns - name = "Lesser Summon Guns" - desc = "Why reload when you have infinite guns? Summons an unending stream of bolt action rifles that deal little damage, but will knock targets down. Requires both hands free to use. Learning this spell makes you unable to learn Arcane Barrage." - invocation_type = "none" - include_user = TRUE - range = -1 - - school = "conjuration" - charge_max = 750 - clothes_req = TRUE - cooldown_min = 10 //Gun wizard - action_icon_state = "bolt_action" - var/summon_path = /obj/item/gun/ballistic/rifle/illestren/enchanted - -/obj/effect/proc_holder/spell/targeted/infinite_guns/cast(list/targets, mob/user = usr) - for(var/mob/living/carbon/C in targets) - C.drop_all_held_items() - var/GUN = new summon_path - C.put_in_hands(GUN) - -/obj/effect/proc_holder/spell/targeted/infinite_guns/gun - -/obj/effect/proc_holder/spell/targeted/infinite_guns/arcane_barrage - name = "Arcane Barrage" - desc = "Fire a torrent of arcane energy at your foes with this (powerful) spell. Deals much more damage than Lesser Summon Guns, but won't knock targets down. Requires both hands free to use. Learning this spell makes you unable to learn Lesser Summon Gun." - action_icon_state = "arcane_barrage" - summon_path = /obj/item/gun/ballistic/rifle/illestren/enchanted/arcane_barrage diff --git a/code/modules/spells/spell_types/rightandwrong.dm b/code/modules/spells/spell_types/rightandwrong.dm index e79ffb8a491e..ed6d9a9b957d 100644 --- a/code/modules/spells/spell_types/rightandwrong.dm +++ b/code/modules/spells/spell_types/rightandwrong.dm @@ -49,60 +49,8 @@ GLOBAL_LIST_INIT(summoned_guns, list( /obj/item/gun/energy/laser/scatter, /obj/item/gun/energy/gravity_gun)) -//if you add anything that isn't covered by the typepaths below, add it to summon_magic_objective_types -GLOBAL_LIST_INIT(summoned_magic, list( - /obj/item/book/granter/spell/fireball, - /obj/item/book/granter/spell/smoke, - /obj/item/book/granter/spell/blind, - /obj/item/book/granter/spell/mindswap, - /obj/item/book/granter/spell/forcewall, - /obj/item/book/granter/spell/knock, - /obj/item/book/granter/spell/barnyard, - /obj/item/book/granter/spell/charge, - /obj/item/book/granter/spell/summonitem, - /obj/item/gun/magic/wand/nothing, - /obj/item/gun/magic/wand/death, - /obj/item/gun/magic/wand/resurrection, - /obj/item/gun/magic/wand/polymorph, - /obj/item/gun/magic/wand/teleport, - /obj/item/gun/magic/wand/door, - /obj/item/gun/magic/wand/fireball, - /obj/item/gun/magic/staff/healing, - /obj/item/gun/magic/staff/door, - /obj/item/scrying, - /obj/item/voodoo, - /obj/item/warpwhistle, - /obj/item/clothing/suit/space/hardsuit/shielded/wizard, - /obj/item/immortality_talisman, - /obj/item/melee/ghost_sword)) - -GLOBAL_LIST_INIT(summoned_special_magic, list( - /obj/item/gun/magic/staff/change, - /obj/item/gun/magic/staff/animate, - /obj/item/storage/belt/wands/full, - /obj/item/antag_spawner/contract, - /obj/item/gun/magic/staff/chaos, - /obj/item/necromantic_stone, - /obj/item/blood_contract)) - -//everything above except for single use spellbooks, because they are counted separately (and are for basic bitches anyways) -GLOBAL_LIST_INIT(summoned_magic_objectives, list( - /obj/item/antag_spawner/contract, - /obj/item/blood_contract, - /obj/item/clothing/suit/space/hardsuit/shielded/wizard, - /obj/item/gun/magic, - /obj/item/immortality_talisman, - /obj/item/melee/ghost_sword, - /obj/item/necromantic_stone, - /obj/item/scrying, - /obj/item/spellbook, - /obj/item/storage/belt/wands/full, - /obj/item/voodoo, - /obj/item/warpwhistle)) - // If true, it's the probability of triggering "survivor" antag. GLOBAL_VAR_INIT(summon_guns_triggered, FALSE) -GLOBAL_VAR_INIT(summon_magic_triggered, FALSE) /proc/give_guns(mob/living/carbon/human/H) if(H.stat == DEAD || !(H.client)) @@ -125,54 +73,19 @@ GLOBAL_VAR_INIT(summon_magic_triggered, FALSE) to_chat(H, "\A [G] appears [in_hand ? "in your hand" : "at your feet"]!") -/proc/give_magic(mob/living/carbon/human/H) - if(H.stat == DEAD || !(H.client)) - return - if(H.mind) - if(iswizard(H) || H.mind.has_antag_datum(/datum/antagonist/survivalist/magic)) - return - - if(prob(GLOB.summon_magic_triggered) && !(H.mind.has_antag_datum(/datum/antagonist))) - H.mind.add_antag_datum(/datum/antagonist/survivalist/magic) - H.log_message("was made into a survivalist, and trusts no one!", LOG_ATTACK, color="red") - - var/magic_type = pick(GLOB.summoned_magic) - var/lucky = FALSE - if(prob(SPECIALIST_MAGIC_PROB)) - magic_type = pick(GLOB.summoned_special_magic) - lucky = TRUE - - var/obj/item/M = new magic_type(get_turf(H)) - playsound(get_turf(H),'sound/magic/summon_magic.ogg', 50, TRUE) - - var/in_hand = H.put_in_hands(M) - - to_chat(H, "\A [M] appears [in_hand ? "in your hand" : "at your feet"]!") - if(lucky) - to_chat(H, "You feel incredibly lucky.") - - -/proc/rightandwrong(summon_type, mob/user, survivor_probability) - if(user) //in this case either someone holding a spellbook or a badmin - to_chat(user, "You summoned [summon_type]!") - message_admins("[ADMIN_LOOKUPFLW(user)] summoned [summon_type]!") - log_game("[key_name(user)] summoned [summon_type]!") +/proc/rightandwrong(mob/user, survivor_probability) + if(user) //in this case someone is a badmin + to_chat(user, "You summoned guns!") + message_admins("[ADMIN_LOOKUPFLW(user)] summoned guns!") + log_game("[key_name(user)] summoned guns!") - if(summon_type == SUMMON_MAGIC) - GLOB.summon_magic_triggered = survivor_probability - else if(summon_type == SUMMON_GUNS) - GLOB.summon_guns_triggered = survivor_probability - else - CRASH("Bad summon_type given: [summon_type]") + GLOB.summon_guns_triggered = survivor_probability for(var/mob/living/carbon/human/H in GLOB.player_list) var/turf/T = get_turf(H) if(T && is_away_level(T)) continue - if(summon_type == SUMMON_MAGIC) - give_magic(H) - else - give_guns(H) + give_guns(H) /proc/summonevents() if(!SSevents.wizardmode) diff --git a/code/modules/spells/spell_types/shapeshift.dm b/code/modules/spells/spell_types/shapeshift.dm index 65eb0cebb2b3..254a43dc23af 100644 --- a/code/modules/spells/spell_types/shapeshift.dm +++ b/code/modules/spells/spell_types/shapeshift.dm @@ -19,7 +19,6 @@ var/mob/living/shapeshift_type var/list/possible_shapes = list(/mob/living/simple_animal/mouse,\ /mob/living/simple_animal/pet/dog/corgi,\ - /mob/living/simple_animal/hostile/carp/ranged/chaos,\ /mob/living/simple_animal/bot/secbot/ed209,\ /mob/living/simple_animal/hostile/poison/giant_spider/hunter/viper,\ /mob/living/simple_animal/hostile/construct/juggernaut) diff --git a/code/modules/surgery/bodyparts/robot_bodyparts.dm b/code/modules/surgery/bodyparts/robot_bodyparts.dm index 398d937cc586..61bbb88ab545 100644 --- a/code/modules/surgery/bodyparts/robot_bodyparts.dm +++ b/code/modules/surgery/bodyparts/robot_bodyparts.dm @@ -137,7 +137,6 @@ var/wired = FALSE var/obj/item/stock_parts/cell/cell = null - /obj/item/bodypart/chest/robot/handle_atom_del(atom/A) if(A == cell) cell = null @@ -191,7 +190,6 @@ cell.forceMove(drop_location()) cell = null - /obj/item/bodypart/chest/robot/examine(mob/user) . = ..() if(cell) @@ -214,7 +212,6 @@ cell = null ..() - /obj/item/bodypart/head/robot name = "cyborg head" desc = "A standard reinforced braincase, with spine-plugged neural socket and sensor gimbals." @@ -304,7 +301,6 @@ to_chat(user, "There is no flash to remove from [src].") return TRUE - /obj/item/bodypart/head/robot/drop_organs(mob/user, violent_removal) if(flash1) flash1.forceMove(user.loc) @@ -314,9 +310,6 @@ flash2 = null ..() - - - /obj/item/bodypart/l_arm/robot/surplus name = "surplus prosthetic left arm" desc = "A skeletal, robotic limb. Outdated and fragile, but it's still better than nothing." diff --git a/code/modules/surgery/organs/eyes.dm b/code/modules/surgery/organs/eyes.dm index 0c200df9f6b1..283ee77971eb 100644 --- a/code/modules/surgery/organs/eyes.dm +++ b/code/modules/surgery/organs/eyes.dm @@ -149,6 +149,9 @@ /obj/item/organ/eyes/robotic/lizard eye_icon_state = "eyes_synth" +/obj/item/organ/eyes/robotic/kepori + eye_icon_state = "eyes_kepori_synth" + /obj/item/organ/eyes/robotic/emp_act(severity) . = ..() if(!owner || . & EMP_PROTECT_SELF) diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm index f58f94df84dd..eaa0a631ec5d 100644 --- a/code/modules/uplink/uplink_items.dm +++ b/code/modules/uplink/uplink_items.dm @@ -1712,13 +1712,6 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) item = /obj/item/flashlight/lantern/syndicate restricted_species = list("moth") //End WS edit -/datum/uplink_item/race_restricted/syndigenetics - name = "Fire Breath" - desc = "One of our subsidiaries, 23AndMe, have recently found the formula of backtracking lizard's genetic trail and giving them the ability to breathe fire, much like their dragon ancestors." - cost = 5 - item = /obj/item/dnainjector/firebreath - restricted_species = list("lizard") - /datum/uplink_item/race_restricted/razorwing name = "Razorwing Implant" desc = "Put those wings to good use! This implant makes your wingtips razor sharp and gives you the ability to flourish them, slicing anyone in range." diff --git a/code/modules/vending/autodrobe.dm b/code/modules/vending/autodrobe.dm index 04ae257730f2..367c309d59a1 100644 --- a/code/modules/vending/autodrobe.dm +++ b/code/modules/vending/autodrobe.dm @@ -112,7 +112,6 @@ /obj/item/gohei = 1, /obj/item/clothing/suit/judgerobe = 1, /obj/item/clothing/head/powdered_wig = 1, - /obj/item/gun/magic/wand/nothing = 2, /obj/item/clothing/glasses/sunglasses/garb = 2, /obj/item/clothing/glasses/blindfold = 1, /obj/item/clothing/mask/muzzle = 2) diff --git a/html/changelogs/archive/2024-06.yml b/html/changelogs/archive/2024-06.yml index b6d113723f62..ee60e5a1fb00 100644 --- a/html/changelogs/archive/2024-06.yml +++ b/html/changelogs/archive/2024-06.yml @@ -118,3 +118,28 @@ 2024-06-06: SomeguyManperson: - bugfix: melee hermits have had their immortal snail deals revoked +2024-06-07: + Sun-Soaked: + - bugfix: combat knives and their subtypes now once again have sprites. + Zevotech: + - rscadd: remapped and renamed ashwalker_shrine into lavaland_surface_buried_shrine + - rscadd: Necropolis walls have been renamed to thick stone walls. + rye-rice: + - rscadd: Changing firemodes on guns now have new sprites + - bugfix: The E-40 now works as intended! + - rscadd: The E-40 now has an ammo counter + - balance: The P16 shoots slightly faster. + - balance: Two E-40s max are obtainable from the black market should it spawn. Blank + market price cap of the E-40 has also increased +2024-06-08: + Apogee-dev: + - bugfix: fixed an incorrect sprite state on corpo sofas + FalloutFalcon: + - rscdel: Removed alot of magic cruft + - code_imp: Sorts gun defines into there own file + SomeguyManperson: + - bugfix: gunslinger applies its spread reduction effect to revolvers + Sun-Soaked: + - bugfix: removes a comment from apc.dm that was causing strange errors. + thgvr: + - imageadd: Kepori have been given a full visual overhaul. diff --git a/icons/blanks/64x64.dmi b/icons/blanks/64x64.dmi new file mode 100644 index 000000000000..6bfbd471e5db Binary files /dev/null and b/icons/blanks/64x64.dmi differ diff --git a/icons/hud/gun_hud.dmi b/icons/hud/gun_hud.dmi index a24f7f2964f3..d108a6088e8f 100644 Binary files a/icons/hud/gun_hud.dmi and b/icons/hud/gun_hud.dmi differ diff --git a/icons/mob/actions/actions_items.dmi b/icons/mob/actions/actions_items.dmi index c52e55c475a6..9baf5cdde9b3 100644 Binary files a/icons/mob/actions/actions_items.dmi and b/icons/mob/actions/actions_items.dmi differ diff --git a/icons/mob/augmentation/augments_kepori.dmi b/icons/mob/augmentation/augments_kepori.dmi index 56e56dd22db5..e86bdfd9cf2d 100644 Binary files a/icons/mob/augmentation/augments_kepori.dmi and b/icons/mob/augmentation/augments_kepori.dmi differ diff --git a/icons/mob/augmentation/augments_keporiOLD.dmi b/icons/mob/augmentation/augments_keporiOLD.dmi new file mode 100644 index 000000000000..56e56dd22db5 Binary files /dev/null and b/icons/mob/augmentation/augments_keporiOLD.dmi differ diff --git a/icons/mob/clothing/species/kepori.dmi b/icons/mob/clothing/species/kepori.dmi index cfa1f108dc68..1586e80e9b19 100644 Binary files a/icons/mob/clothing/species/kepori.dmi and b/icons/mob/clothing/species/kepori.dmi differ diff --git a/icons/mob/clothing/underwear/species/kepori/underwear_legs_kepori.dmi b/icons/mob/clothing/underwear/species/kepori/underwear_legs_kepori.dmi new file mode 100644 index 000000000000..166e1a7624d9 Binary files /dev/null and b/icons/mob/clothing/underwear/species/kepori/underwear_legs_kepori.dmi differ diff --git a/icons/mob/clothing/underwear/species/underwear_legs_kepori.dmi b/icons/mob/clothing/underwear/species/kepori/underwear_legs_keporiOLD.dmi similarity index 100% rename from icons/mob/clothing/underwear/species/underwear_legs_kepori.dmi rename to icons/mob/clothing/underwear/species/kepori/underwear_legs_keporiOLD.dmi diff --git a/icons/mob/clothing/underwear/species/kepori/underwear_socks_kepori.dmi b/icons/mob/clothing/underwear/species/kepori/underwear_socks_kepori.dmi new file mode 100644 index 000000000000..6fe4e042f679 Binary files /dev/null and b/icons/mob/clothing/underwear/species/kepori/underwear_socks_kepori.dmi differ diff --git a/icons/mob/clothing/underwear/species/underwear_socks_kepori.dmi b/icons/mob/clothing/underwear/species/kepori/underwear_socks_keporiOLD.dmi similarity index 100% rename from icons/mob/clothing/underwear/species/underwear_socks_kepori.dmi rename to icons/mob/clothing/underwear/species/kepori/underwear_socks_keporiOLD.dmi diff --git a/icons/mob/clothing/underwear/species/kepori/underwear_torso_kepori.dmi b/icons/mob/clothing/underwear/species/kepori/underwear_torso_kepori.dmi new file mode 100644 index 000000000000..1a6a59cd5241 Binary files /dev/null and b/icons/mob/clothing/underwear/species/kepori/underwear_torso_kepori.dmi differ diff --git a/icons/mob/clothing/underwear/species/underwear_torso_kepori.dmi b/icons/mob/clothing/underwear/species/kepori/underwear_torso_keporiOLD.dmi similarity index 100% rename from icons/mob/clothing/underwear/species/underwear_torso_kepori.dmi rename to icons/mob/clothing/underwear/species/kepori/underwear_torso_keporiOLD.dmi diff --git a/icons/mob/kepori_parts.dmi b/icons/mob/kepori_parts.dmi deleted file mode 100644 index 8f9d7e56043e..000000000000 Binary files a/icons/mob/kepori_parts.dmi and /dev/null differ diff --git a/icons/mob/species/kepori/bodyparts.dmi b/icons/mob/species/kepori/bodyparts.dmi index f19aaeacbe08..058d315d7bd8 100644 Binary files a/icons/mob/species/kepori/bodyparts.dmi and b/icons/mob/species/kepori/bodyparts.dmi differ diff --git a/icons/mob/species/kepori/kepori_eyes.dmi b/icons/mob/species/kepori/kepori_eyes.dmi new file mode 100644 index 000000000000..3e1617315755 Binary files /dev/null and b/icons/mob/species/kepori/kepori_eyes.dmi differ diff --git a/icons/mob/species/kepori/kepori_parts.dmi b/icons/mob/species/kepori/kepori_parts.dmi new file mode 100644 index 000000000000..76d1819c9dd8 Binary files /dev/null and b/icons/mob/species/kepori/kepori_parts.dmi differ diff --git a/icons/mob/species/kepori/onmob_belt_kepori.dmi b/icons/mob/species/kepori/onmob_belt_kepori.dmi index cf74d73796c8..4a5a4ba7b32a 100644 Binary files a/icons/mob/species/kepori/onmob_belt_kepori.dmi and b/icons/mob/species/kepori/onmob_belt_kepori.dmi differ diff --git a/icons/mob/species/kepori/onmob_belt_keporiOLD.dmi b/icons/mob/species/kepori/onmob_belt_keporiOLD.dmi new file mode 100644 index 000000000000..cf74d73796c8 Binary files /dev/null and b/icons/mob/species/kepori/onmob_belt_keporiOLD.dmi differ diff --git a/icons/mob/species/kepori/onmob_ears_kepori.dmi b/icons/mob/species/kepori/onmob_ears_kepori.dmi new file mode 100644 index 000000000000..4a5a4ba7b32a Binary files /dev/null and b/icons/mob/species/kepori/onmob_ears_kepori.dmi differ diff --git a/icons/mob/species/kepori/onmob_eyes_kepori.dmi b/icons/mob/species/kepori/onmob_eyes_kepori.dmi index 2cfe52f4630d..1b6c6f68a3a5 100644 Binary files a/icons/mob/species/kepori/onmob_eyes_kepori.dmi and b/icons/mob/species/kepori/onmob_eyes_kepori.dmi differ diff --git a/icons/mob/species/kepori/onmob_eyes_keporiOLD.dmi b/icons/mob/species/kepori/onmob_eyes_keporiOLD.dmi new file mode 100644 index 000000000000..2cfe52f4630d Binary files /dev/null and b/icons/mob/species/kepori/onmob_eyes_keporiOLD.dmi differ diff --git a/icons/mob/species/kepori/onmob_feet_kepori.dmi b/icons/mob/species/kepori/onmob_feet_kepori.dmi index 7af39a1f676d..93bb6ee443d5 100644 Binary files a/icons/mob/species/kepori/onmob_feet_kepori.dmi and b/icons/mob/species/kepori/onmob_feet_kepori.dmi differ diff --git a/icons/mob/species/kepori/onmob_feet_keporiOLD.dmi b/icons/mob/species/kepori/onmob_feet_keporiOLD.dmi new file mode 100644 index 000000000000..f352a422378a Binary files /dev/null and b/icons/mob/species/kepori/onmob_feet_keporiOLD.dmi differ diff --git a/icons/mob/species/kepori/onmob_hands_kepori.dmi b/icons/mob/species/kepori/onmob_hands_kepori.dmi index 6dff1607ef57..1cd287411171 100644 Binary files a/icons/mob/species/kepori/onmob_hands_kepori.dmi and b/icons/mob/species/kepori/onmob_hands_kepori.dmi differ diff --git a/icons/mob/species/kepori/onmob_hands_keporiOLD.dmi b/icons/mob/species/kepori/onmob_hands_keporiOLD.dmi new file mode 100644 index 000000000000..6dff1607ef57 Binary files /dev/null and b/icons/mob/species/kepori/onmob_hands_keporiOLD.dmi differ diff --git a/icons/mob/species/kepori/onmob_head_kepori.dmi b/icons/mob/species/kepori/onmob_head_kepori.dmi index 4109e981c603..b4631838b75a 100644 Binary files a/icons/mob/species/kepori/onmob_head_kepori.dmi and b/icons/mob/species/kepori/onmob_head_kepori.dmi differ diff --git a/icons/mob/species/kepori/onmob_head_keporiOLD.dmi b/icons/mob/species/kepori/onmob_head_keporiOLD.dmi new file mode 100644 index 000000000000..31db76896ba2 Binary files /dev/null and b/icons/mob/species/kepori/onmob_head_keporiOLD.dmi differ diff --git a/icons/mob/species/kepori/onmob_mask_kepori.dmi b/icons/mob/species/kepori/onmob_mask_kepori.dmi index 610c62338c18..d455cf0bd3e5 100644 Binary files a/icons/mob/species/kepori/onmob_mask_kepori.dmi and b/icons/mob/species/kepori/onmob_mask_kepori.dmi differ diff --git a/icons/mob/species/kepori/onmob_mask_keporiOLD.dmi b/icons/mob/species/kepori/onmob_mask_keporiOLD.dmi new file mode 100644 index 000000000000..610c62338c18 Binary files /dev/null and b/icons/mob/species/kepori/onmob_mask_keporiOLD.dmi differ diff --git a/icons/mob/species/kepori/onmob_suit_kepori.dmi b/icons/mob/species/kepori/onmob_suit_kepori.dmi index 4d5eaaab1196..6182a9612547 100644 Binary files a/icons/mob/species/kepori/onmob_suit_kepori.dmi and b/icons/mob/species/kepori/onmob_suit_kepori.dmi differ diff --git a/icons/mob/species/kepori/onmob_suit_keporiOLD.dmi b/icons/mob/species/kepori/onmob_suit_keporiOLD.dmi new file mode 100644 index 000000000000..4d5eaaab1196 Binary files /dev/null and b/icons/mob/species/kepori/onmob_suit_keporiOLD.dmi differ diff --git a/icons/mob/species/kepori/onmob_uniform_kepori.dmi b/icons/mob/species/kepori/onmob_uniform_kepori.dmi index d9bec6e95185..d6f011cef312 100644 Binary files a/icons/mob/species/kepori/onmob_uniform_kepori.dmi and b/icons/mob/species/kepori/onmob_uniform_kepori.dmi differ diff --git a/icons/mob/species/kepori/onmob_uniform_keporiOLD.dmi b/icons/mob/species/kepori/onmob_uniform_keporiOLD.dmi new file mode 100644 index 000000000000..66fa497129f6 Binary files /dev/null and b/icons/mob/species/kepori/onmob_uniform_keporiOLD.dmi differ diff --git a/icons/obj/structures/chairs/sofa.dmi b/icons/obj/structures/chairs/sofa.dmi index e8cfa4c5509b..17c976e4650e 100644 Binary files a/icons/obj/structures/chairs/sofa.dmi and b/icons/obj/structures/chairs/sofa.dmi differ diff --git a/shiptest.dme b/shiptest.dme index b8df46bc4017..630c5d479767 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -1352,7 +1352,6 @@ #include "code\game\objects\structures\fireplace.dm" #include "code\game\objects\structures\flora.dm" #include "code\game\objects\structures\fluff.dm" -#include "code\game\objects\structures\fugitive_role_spawners.dm" #include "code\game\objects\structures\ghost_role_spawners.dm" #include "code\game\objects\structures\girders.dm" #include "code\game\objects\structures\grille.dm" @@ -1704,7 +1703,6 @@ #include "code\modules\antagonists\ert\nanotrasen.dm" #include "code\modules\antagonists\ert\solgov.dm" #include "code\modules\antagonists\ert\syndicate.dm" -#include "code\modules\antagonists\fugitive\fugitive_outfits.dm" #include "code\modules\antagonists\gang\outfits.dm" #include "code\modules\antagonists\greentext\greentext.dm" #include "code\modules\antagonists\magic_servant\servant.dm" @@ -2133,7 +2131,6 @@ #include "code\modules\events\wizard\invincible.dm" #include "code\modules\events\wizard\lava.dm" #include "code\modules\events\wizard\madness.dm" -#include "code\modules\events\wizard\magicarp.dm" #include "code\modules\events\wizard\petsplosion.dm" #include "code\modules\events\wizard\race.dm" #include "code\modules\events\wizard\rpgloot.dm" @@ -3031,7 +3028,6 @@ #include "code\modules\projectiles\guns\ballistic.dm" #include "code\modules\projectiles\guns\energy.dm" #include "code\modules\projectiles\guns\gunhud.dm" -#include "code\modules\projectiles\guns\magic.dm" #include "code\modules\projectiles\guns\powered.dm" #include "code\modules\projectiles\guns\ballistic\assault.dm" #include "code\modules\projectiles\guns\ballistic\automatic.dm" @@ -3054,8 +3050,6 @@ #include "code\modules\projectiles\guns\energy\special.dm" #include "code\modules\projectiles\guns\energy\stun.dm" #include "code\modules\projectiles\guns\faction\gezena\energy_gunsword.dm" -#include "code\modules\projectiles\guns\magic\staff.dm" -#include "code\modules\projectiles\guns\magic\wand.dm" #include "code\modules\projectiles\guns\misc\beam_rifle.dm" #include "code\modules\projectiles\guns\misc\blastcannon.dm" #include "code\modules\projectiles\guns\misc\bow.dm" @@ -3065,7 +3059,6 @@ #include "code\modules\projectiles\guns\misc\syringe_gun.dm" #include "code\modules\projectiles\projectile\beams.dm" #include "code\modules\projectiles\projectile\bullets.dm" -#include "code\modules\projectiles\projectile\magic.dm" #include "code\modules\projectiles\projectile\bullets\_incendiary.dm" #include "code\modules\projectiles\projectile\bullets\dart_syringe.dm" #include "code\modules\projectiles\projectile\bullets\dnainjector.dm" @@ -3087,7 +3080,6 @@ #include "code\modules\projectiles\projectile\energy\nuclear_particle.dm" #include "code\modules\projectiles\projectile\energy\stun.dm" #include "code\modules\projectiles\projectile\energy\tesla.dm" -#include "code\modules\projectiles\projectile\magic\spellcard.dm" #include "code\modules\projectiles\projectile\reusable\_reusable.dm" #include "code\modules\projectiles\projectile\reusable\arrow.dm" #include "code\modules\projectiles\projectile\reusable\foam_dart.dm" @@ -3255,7 +3247,6 @@ #include "code\modules\research\xenobiology\crossbreeding\stabilized.dm" #include "code\modules\ruins\lavaland_ruin_code.dm" #include "code\modules\ruins\rockplanet_ruin_code.dm" -#include "code\modules\ruins\icemoonruin_code\hotsprings.dm" #include "code\modules\ruins\icemoonruin_code\hydroponicslab.dm" #include "code\modules\ruins\icemoonruin_code\library.dm" #include "code\modules\ruins\icemoonruin_code\wrath.dm" @@ -3315,7 +3306,6 @@ #include "code\modules\spells\spell_types\forcewall.dm" #include "code\modules\spells\spell_types\genetic.dm" #include "code\modules\spells\spell_types\godhand.dm" -#include "code\modules\spells\spell_types\infinite_guns.dm" #include "code\modules\spells\spell_types\inflict_handler.dm" #include "code\modules\spells\spell_types\knock.dm" #include "code\modules\spells\spell_types\lichdom.dm"