diff --git a/_maps/map_files/Vampire/runtimetown.dmm b/_maps/map_files/Vampire/runtimetown.dmm index 8e176ba7fbf2..d853c93dfada 100644 --- a/_maps/map_files/Vampire/runtimetown.dmm +++ b/_maps/map_files/Vampire/runtimetown.dmm @@ -1,14 +1,8 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/obj/structure/guncase, -/obj/item/gun/ballistic/shotgun/vampire, -/obj/item/flashlight/lantern/on{ - pixel_x = -7; - pixel_y = 19 +"an" = ( +/obj/structure/vampfence/corner/rich{ + dir = 8 }, -/turf/open/floor/plating/rough, -/area/vtm/graveyard/interior) -"ag" = ( /turf/open/misc/dirt, /area/vtm/graveyard) "av" = ( @@ -19,6 +13,13 @@ /obj/item/gun/ballistic/automatic/pistol/darkpack/m1911, /turf/open/floor/plating/rough, /area/vtm/interior/anarch) +"aw" = ( +/obj/machinery/light/directional/north, +/obj/structure/rack/tall/store_shelf_metal{ + dir = 4 + }, +/turf/open/floor/plating/concrete, +/area/vtm/interior/shop) "aM" = ( /obj/effect/spawner/random/trash/rat, /turf/open/misc/beach/vamp, @@ -29,12 +30,6 @@ }, /turf/open/floor/plating/sidewalk, /area/vtm/outside/pacificheights) -"ba" = ( -/obj/structure/retail/clothing_store, -/obj/structure/table, -/obj/structure/platform/lowwall/brick, -/turf/open/floor/plating/rough, -/area/vtm/interior/shop) "bj" = ( /obj/structure/closet/secure_closet/freezer, /turf/open/floor/city/toilet, @@ -50,10 +45,6 @@ /obj/structure/roadsign/crosswalk, /turf/open/floor/plating/sidewalk/poor, /area/vtm/outside/pacificheights) -"bA" = ( -/obj/structure/werewolf_totem/generic/weaver, -/turf/open/floor/plating/sidewalk, -/area/vtm/interior/techshop) "bB" = ( /obj/structure/chair/wood/darkpack/red, /turf/open/floor/plating/rough, @@ -69,14 +60,10 @@ /obj/structure/closet/secure_closet/medical2, /turf/open/floor/plating/rough, /area/vtm/interior/clinic) -"bD" = ( -/obj/structure/table/wood, -/obj/effect/spawner/random/engineering/toolbox{ - pixel_x = 2; - pixel_y = 2 - }, -/turf/open/floor/plating/rough, -/area/vtm/graveyard/interior) +"bJ" = ( +/obj/structure/sign/flag/pride/lesbian/directional/north, +/turf/open/floor/plating/rough/cave, +/area/vtm/interior/techshop) "bK" = ( /obj/machinery/fax/admin/camarilla, /obj/structure/table/wood, @@ -141,12 +128,6 @@ }, /turf/open/floor/plating/rough, /area/vtm/interior/techshop) -"cz" = ( -/obj/structure/table, -/obj/lombard/blackmarket, -/obj/structure/platform/lowwall/rich/old, -/turf/open/floor/plating/rough, -/area/vtm/interior/cog) "cQ" = ( /obj/structure/table, /obj/item/storage/medkit/darkpack/ifak, @@ -175,9 +156,8 @@ /obj/machinery/light/directional/north, /turf/open/floor/plating/concrete, /area/vtm/interior/shop) -"dE" = ( -/obj/structure/railing, -/turf/open/floor/plating/canal, +"dK" = ( +/turf/closed/wall/vampwall/brick_old, /area/vtm/interior/techshop) "dN" = ( /obj/item/clothing/head/cone, @@ -198,21 +178,17 @@ /obj/structure/sign/city/order/directional/north, /turf/open/misc/beach/vamp, /area/vtm/outside/pacificheights) -"el" = ( -/obj/structure/table/countertop/bubway, -/obj/structure/retail/bubway_menu, -/turf/open/floor/plating/concrete, -/area/vtm/interior/shop) "en" = ( /obj/item/vamp/keys/camarilla, /turf/open/floor/plating/asphalt, /area/vtm/outside/pacificheights) -"ew" = ( -/obj/structure/vampfence/corner/rich{ +"et" = ( +/obj/structure/retail/library{ dir = 8 }, -/turf/open/misc/dirt, -/area/vtm/graveyard) +/obj/structure/table/countertop/red, +/turf/open/floor/plating/concrete, +/area/vtm/interior/shop) "eG" = ( /obj/machinery/light/directional/north, /turf/open/floor/plating/rough, @@ -223,6 +199,11 @@ }, /turf/open/floor/plating/concrete, /area/vtm/interior/shop) +"eL" = ( +/obj/structure/table/wood, +/obj/item/scythe/vamp, +/turf/open/floor/plating/rough, +/area/vtm/graveyard/interior) "eQ" = ( /turf/open/floor/plating/sidewalk, /area/vtm/outside/pacificheights) @@ -270,10 +251,6 @@ /obj/effect/spawner/random/trash/hobo_squat, /turf/open/floor/plating/sidewalk/poor, /area/vtm/outside/ghetto) -"fZ" = ( -/obj/structure/fire_barrel, -/turf/open/floor/plating/sidewalk/poor, -/area/vtm/outside/ghetto) "gb" = ( /obj/effect/decal/cleanable/cardboard, /obj/structure/closet/cardboard, @@ -334,10 +311,6 @@ /obj/machinery/sprinkler/area_managed, /turf/open/floor/plating/rough, /area/vtm/interior/techshop) -"hp" = ( -/obj/structure/tzijelly, -/turf/open/floor/plating/rough/cave, -/area/vtm/interior/techshop) "hu" = ( /obj/effect/decal/pallet, /obj/item/ammo_box/darkpack/arrows, @@ -352,9 +325,28 @@ /obj/structure/table/countertop/beige, /turf/open/floor/plating/rough, /area/vtm/interior/shop) +"hD" = ( +/obj/structure/table, +/obj/lombard/blackmarket, +/obj/structure/platform/lowwall/rich/old, +/turf/open/floor/plating/rough, +/area/vtm/interior/cog) "hF" = ( -/turf/open/openspace, -/area/vtm/interior/techshop) +/obj/structure/table, +/obj/structure/platform/lowwall/brick, +/obj/structure/retail/costume_store{ + pixel_x = 2; + pixel_y = -4; + dir = 8; + icon_state = "menu" + }, +/obj/structure/retail/hot_ishu{ + pixel_y = 10; + dir = 8; + icon_state = "menu" + }, +/turf/open/floor/plating/rough, +/area/vtm/interior/shop) "hH" = ( /obj/effect/decal/cleanable/trash{ icon_state = "trash5" @@ -424,6 +416,10 @@ }, /turf/open/floor/plating/rough, /area/vtm/interior/techshop) +"iU" = ( +/obj/structure/tzijelly, +/turf/open/floor/plating/rough/cave, +/area/vtm/interior/techshop) "iV" = ( /obj/darkpack_car/track{ access = "supply"; @@ -457,6 +453,9 @@ /obj/structure/platform/lowwall/brick, /turf/open/floor/plating/rough, /area/vtm/interior/supply) +"jr" = ( +/turf/open/floor/plating/sidewalk, +/area/vtm/interior/techshop) "jw" = ( /obj/effect/decal/cleanable/trash{ icon_state = "trash7" @@ -474,12 +473,21 @@ }, /turf/open/floor/plating/elevatorshaft, /area/vtm/outside/pacificheights) +"jH" = ( +/turf/closed/wall/vampwall/brick, +/area/vtm/graveyard/interior) "jK" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 }, /turf/open/misc/dirt, /area/vtm/outside/supply) +"jQ" = ( +/obj/structure/vampfence/rich{ + dir = 4 + }, +/turf/open/misc/dirt, +/area/vtm/graveyard) "jR" = ( /obj/machinery/button/elevator/directional/north{ id = "DebugElevator2"; @@ -510,6 +518,12 @@ }, /turf/open/floor/plating/asphalt, /area/vtm/outside/pacificheights) +"kg" = ( +/obj/structure/vampfence/rich{ + dir = 4 + }, +/turf/open/misc/grass, +/area/vtm/graveyard) "ki" = ( /obj/structure/fluff/tv/order/three{ pixel_x = -10; @@ -525,6 +539,14 @@ /obj/effect/turf_decal/stripes/line, /turf/open/misc/dirt, /area/vtm/outside/supply) +"kl" = ( +/obj/structure/table/wood, +/obj/item/storage/toolbox/mechanical{ + pixel_x = -4; + pixel_y = 14 + }, +/turf/open/floor/plating/rough, +/area/vtm/graveyard/interior) "kn" = ( /obj/structure/table, /obj/item/molotov, @@ -532,16 +554,6 @@ /obj/item/molotov, /turf/open/floor/plating/sidewalk, /area/vtm/outside/pacificheights) -"kx" = ( -/obj/structure/vampfence/corner/rich{ - dir = 4 - }, -/turf/open/misc/dirt, -/area/vtm/graveyard) -"kO" = ( -/obj/structure/toiletbong, -/turf/open/floor/plating/sidewalk, -/area/vtm/interior/cog) "kS" = ( /turf/closed/wall/vampwall/market, /area/vtm/interior/shop) @@ -551,12 +563,6 @@ }, /turf/open/floor/plating/asphalt, /area/vtm/outside/pacificheights) -"lf" = ( -/obj/structure/chair/greyscale{ - dir = 8 - }, -/turf/open/floor/plating/rough/cave, -/area/vtm/interior/techshop) "lk" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -574,9 +580,14 @@ }, /turf/open/misc/beach/vamp, /area/vtm/outside/pacificheights) -"lx" = ( -/turf/open/floor/plating/sidewalk, +"lv" = ( +/turf/closed/wall/vampwall/rich/old, /area/vtm/interior/cog) +"lC" = ( +/obj/structure/railing, +/obj/structure/lattice/grate, +/turf/open/openspace, +/area/vtm/interior/techshop) "lM" = ( /obj/effect/decal/cleanable/trash, /obj/effect/spawner/random/occult/artifact, @@ -599,42 +610,30 @@ }, /turf/open/misc/dirt, /area/vtm/outside/supply) -"mb" = ( -/obj/effect/landmark/teleport_mark/alltribes, -/turf/open/floor/plating/rough/cave, +"md" = ( +/obj/structure/vampdoor{ + dir = 4 + }, +/turf/open/floor/plating/canal, /area/vtm/interior/techshop) -"mf" = ( -/obj/structure/table/wood, -/obj/item/scythe/vamp, -/turf/open/floor/plating/rough, -/area/vtm/graveyard/interior) -"mm" = ( -/obj/structure/table/reinforced, -/obj/machinery/computer/order_console/mining/restricted/police, -/obj/structure/platform/lowwall/brick, -/turf/open/floor/plating/rough, -/area/vtm/interior/shop) "mn" = ( /obj/structure/barrels/rand, /turf/open/misc/dirt, /area/vtm/outside/supply) -"mr" = ( -/turf/open/floor/plating/canal, -/area/vtm/interior/techshop) "mw" = ( /obj/structure/ladder/manhole/up, /turf/open/misc/beach/vamp, /area/vtm/outside/pacificheights) -"mT" = ( -/obj/structure/table/wood, -/obj/item/seeds/cannabis, -/obj/item/seeds/cannabis, -/obj/item/seeds/cannabis, -/obj/item/seeds/cannabis, -/obj/item/seeds/cannabis, -/obj/item/seeds/cannabis, -/turf/open/floor/plating/sidewalk, -/area/vtm/interior/cog) +"mG" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/plating/rough/cave, +/area/vtm/interior/techshop) +"mL" = ( +/obj/structure/rack/tall/store_shelf_metal{ + dir = 8 + }, +/turf/open/floor/plating/concrete, +/area/vtm/interior/shop) "mW" = ( /obj/item/storage/box/syringes, /obj/item/storage/box/masks, @@ -649,42 +648,9 @@ /obj/structure/table/wood, /turf/open/misc/beach/vamp, /area/vtm/outside/pacificheights) -"nk" = ( -/obj/structure/table/wood, -/obj/structure/retail/hardware_store, -/obj/item/kirbyplants/darkpack/random{ - pixel_x = 10; - pixel_y = 17 - }, -/obj/item/kirbyplants/darkpack/random{ - pixel_x = -11; - pixel_y = -21 - }, -/obj/item/kirbyplants/darkpack/random{ - pixel_x = 4; - pixel_y = -14 - }, -/obj/item/kirbyplants/darkpack/random{ - pixel_y = 18 - }, -/obj/item/kirbyplants/darkpack/random{ - pixel_x = 12; - pixel_y = 9 - }, -/obj/item/kirbyplants/darkpack/random{ - pixel_x = 10; - pixel_y = -16 - }, -/obj/item/kirbyplants/darkpack/random{ - pixel_x = -5; - pixel_y = -13 - }, -/obj/item/kirbyplants/darkpack/random{ - pixel_x = -9; - pixel_y = 16 - }, -/turf/open/misc/beach/vamp, -/area/vtm/outside/pacificheights) +"nj" = ( +/turf/open/openspace, +/area/vtm/interior/techshop) "nm" = ( /obj/effect/decal/pallet, /obj/item/ammo_box/darkpack/c9mm/silver, @@ -705,6 +671,13 @@ /obj/effect/decal/cleanable/cardboard, /turf/open/misc/beach/vamp, /area/vtm/outside/pacificheights) +"nC" = ( +/obj/structure/table/wood, +/obj/structure/retail/flower_shop{ + dir = 4 + }, +/turf/open/misc/beach/vamp, +/area/vtm/outside/pacificheights) "nD" = ( /obj/structure/fluff/tv/order/one{ pixel_y = 12; @@ -717,14 +690,10 @@ /obj/structure/sign/city/store/bacotell/directional/north, /turf/open/floor/plating/concrete, /area/vtm/interior/shop) -"nZ" = ( -/obj/structure/vampfence/corner/rich, -/turf/open/misc/dirt, +"nT" = ( +/obj/structure/vampfence/rich, +/turf/open/misc/grass, /area/vtm/graveyard) -"od" = ( -/obj/structure/sign/flag/pride/trans/directional/north, -/turf/open/floor/plating/rough/cave, -/area/vtm/interior/techshop) "of" = ( /obj/item/storage/medkit/darkpack/standard, /obj/item/storage/medkit/darkpack/standard, @@ -759,6 +728,20 @@ "oM" = ( /turf/open/floor/plating/sidewalk, /area/vtm/interior/supply) +"oN" = ( +/obj/machinery/light/directional/east, +/turf/open/floor/plating/rough/cave, +/area/vtm/interior/techshop) +"oP" = ( +/obj/machinery/light/directional/north, +/turf/open/floor/plating/canal, +/area/vtm/interior/techshop) +"oT" = ( +/obj/structure/vampfence/corner/rich{ + dir = 4 + }, +/turf/open/misc/dirt, +/area/vtm/graveyard) "oV" = ( /obj/weapon_showcase, /obj/structure/sign/flag/usa/directional/north, @@ -773,6 +756,22 @@ }, /turf/open/floor/plating/sidewalk, /area/vtm/outside/pacificheights) +"oZ" = ( +/obj/structure/table/wood, +/obj/item/shovel/vamp{ + pixel_x = 2; + pixel_y = 1 + }, +/obj/item/shovel/vamp{ + pixel_x = -4; + pixel_y = 7 + }, +/obj/item/melee/vamp/tire{ + pixel_x = 1; + pixel_y = 14 + }, +/turf/open/floor/plating/rough, +/area/vtm/graveyard/interior) "pg" = ( /obj/structure/vampfence/rich{ dir = 4; @@ -781,10 +780,11 @@ /obj/structure/platform/lowwall/brick_old, /turf/open/floor/plating/rough, /area/vtm/outside/pacificheights) -"pv" = ( -/obj/machinery/light/directional/west, -/turf/open/floor/plating/rough/cave, -/area/vtm/interior/techshop) +"pm" = ( +/obj/machinery/light/dim/directional/east, +/obj/effect/spawner/random/decoration/flower, +/turf/open/misc/dirt, +/area/vtm/graveyard) "pz" = ( /obj/darkpack_car/rand{ locked = 0; @@ -799,10 +799,6 @@ }, /turf/open/floor/plating/sidewalk, /area/vtm/outside/pacificheights) -"pI" = ( -/obj/structure/lattice/grate, -/turf/open/openspace, -/area/vtm/interior/techshop) "pN" = ( /turf/open/floor/plating/rough, /area/vtm/interior/clinic) @@ -858,6 +854,10 @@ }, /turf/open/floor/plating/elevatorshaft, /area/vtm/outside/pacificheights) +"qF" = ( +/obj/item/clothing/head/collectable/pirate, +/turf/open/floor/wood/rough, +/area/vtm/interior/techshop) "qN" = ( /obj/structure/chair/comfy/shuttle, /turf/open/floor/plating/rough, @@ -879,6 +879,14 @@ /obj/structure/table/countertop/purple, /turf/open/floor/plating/concrete, /area/vtm/interior/shop) +"rn" = ( +/obj/structure/retail/clothing_store{ + dir = 8 + }, +/obj/structure/table, +/obj/structure/platform/lowwall/brick, +/turf/open/floor/plating/rough, +/area/vtm/interior/shop) "rs" = ( /obj/machinery/fax/camarilla, /obj/structure/table/wood, @@ -888,6 +896,16 @@ /obj/effect/landmark/observer_start, /turf/open/misc/beach/vamp, /area/vtm/outside/pacificheights) +"rx" = ( +/obj/structure/table/wood, +/obj/item/soil_sack, +/obj/item/soil_sack/coir, +/obj/item/soil_sack/gel, +/obj/item/soil_sack/rich, +/obj/item/soil_sack/vermaculite, +/obj/item/soil_sack/worm, +/turf/open/floor/plating/sidewalk, +/area/vtm/interior/cog) "rB" = ( /turf/closed/indestructible/the_matrix, /area/vtm) @@ -897,12 +915,6 @@ }, /turf/open/floor/plating/sidewalk, /area/vtm/outside/pacificheights) -"rI" = ( -/obj/effect/vip_barrier/endron/endron_lab{ - dir = 8 - }, -/turf/open/floor/plating/rough, -/area/vtm/interior/techshop) "rK" = ( /obj/item/storage/pill_bottle/ephedrine, /obj/item/storage/pill_bottle/ephedrine, @@ -1015,6 +1027,11 @@ /obj/effect/turf_decal/bordur, /turf/open/floor/plating/sidewalk, /area/vtm/outside/pacificheights) +"tc" = ( +/obj/machinery/light/directional/north, +/obj/structure/lattice/grate, +/turf/open/openspace, +/area/vtm/interior/techshop) "tf" = ( /obj/effect/turf_decal/bordur{ dir = 10 @@ -1022,10 +1039,15 @@ /obj/structure/lamppost/four, /turf/open/floor/plating/sidewalk, /area/vtm/outside/pacificheights) -"to" = ( -/obj/structure/vampgate, -/turf/open/misc/dirt, -/area/vtm/graveyard) +"tg" = ( +/obj/structure/vampdoor, +/turf/open/floor/plating/rough/cave, +/area/vtm/interior/techshop) +"ti" = ( +/obj/machinery/smartfridge/drying/rack, +/obj/machinery/light/directional/north, +/turf/open/floor/plating/sidewalk, +/area/vtm/interior/cog) "tu" = ( /obj/darkpack_car/track/volkswagen{ dir = 4; @@ -1043,15 +1065,6 @@ }, /turf/open/floor/plating/asphalt, /area/vtm/outside/pacificheights) -"tJ" = ( -/obj/machinery/smartfridge/drying/rack, -/obj/machinery/light/directional/north, -/turf/open/floor/plating/sidewalk, -/area/vtm/interior/cog) -"tL" = ( -/obj/structure/vampfence/rich, -/turf/open/misc/grass, -/area/vtm/graveyard) "tO" = ( /obj/effect/gibspawner/human, /obj/structure/sign/city/store/gummaguts/directional/north, @@ -1065,9 +1078,13 @@ }, /turf/open/misc/beach/vamp, /area/vtm/outside/pacificheights) -"tR" = ( -/turf/closed/wall/vampwall/rich/old, -/area/vtm/interior/cog) +"tU" = ( +/obj/structure/retail/bacotell_menu{ + dir = 1 + }, +/obj/structure/table/countertop/bacotell, +/turf/open/floor/plating/concrete, +/area/vtm/interior/shop) "tW" = ( /obj/darkpack_car/police/ranger, /turf/open/floor/plating/asphalt, @@ -1082,10 +1099,6 @@ }, /turf/open/floor/iron/smooth_large, /area/vtm/outside/pacificheights) -"uh" = ( -/obj/structure/vampfence/corner/rich, -/turf/open/misc/grass, -/area/vtm/graveyard) "ut" = ( /obj/structure/chair/comfy/darkpack/green{ dir = 1 @@ -1132,19 +1145,25 @@ /obj/effect/landmark/navigate_destination, /turf/open/floor/plating/rough, /area/vtm/interior/clinic) +"uZ" = ( +/obj/vampgrave{ + spawn_interval = 300; + max_zombies_per_grave = 1; + name = "upturned grave" + }, +/turf/open/misc/dirt, +/area/vtm/graveyard) "va" = ( /obj/structure/table/wood, /obj/item/vtm_artifact/fae_charm, /turf/open/floor/wood/smooth/old, /area/vtm/interior/sewer) -"vf" = ( -/turf/open/floor/wood/rough, -/area/vtm/interior/techshop) "vi" = ( -/obj/structure/vampdoor/wood{ - dir = 4 +/obj/structure/table/wood, +/obj/effect/spawner/random/engineering/toolbox{ + pixel_x = 2; + pixel_y = 2 }, -/obj/effect/mapping_helpers/door/access/graveyard, /turf/open/floor/plating/rough, /area/vtm/graveyard/interior) "vl" = ( @@ -1156,28 +1175,50 @@ }, /turf/open/floor/plating/sidewalk/rich, /area/vtm/outside/pacificheights) +"vm" = ( +/obj/machinery/hydroponics/simple/wooden, +/turf/open/floor/plating/sidewalk, +/area/vtm/interior/cog) "vs" = ( /obj/effect/landmark/npcbeacon, /obj/effect/turf_decal/bordur/corner, /turf/open/floor/plating/sidewalk/rich, /area/vtm/outside/pacificheights) +"vu" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/bureaucracy/paper{ + pixel_x = 7; + pixel_y = -2 + }, +/turf/open/floor/plating/rough, +/area/vtm/graveyard/interior) "vD" = ( /mob/living/carbon/human/npc/shop, /turf/open/floor/city/toilet, /area/vtm/interior/shop) -"vG" = ( -/obj/machinery/smartfridge/drying/rack, -/obj/item/food/grown/cannabis, -/obj/item/food/grown/cannabis, -/obj/item/food/grown/cannabis, -/turf/open/floor/plating/sidewalk, -/area/vtm/interior/cog) "vH" = ( /obj/structure/sign/city/police_department/directional/north{ icon_state = "police3" }, /turf/open/misc/beach/vamp, /area/vtm/outside/pacificheights) +"vJ" = ( +/obj/effect/decal/cleanable/litter, +/obj/structure/rack/tall/store_shelf_metal{ + dir = 8 + }, +/turf/open/floor/plating/concrete, +/area/vtm/interior/shop) +"vO" = ( +/obj/structure/chair/greyscale{ + dir = 8 + }, +/turf/open/floor/plating/rough/cave, +/area/vtm/interior/techshop) +"vT" = ( +/obj/machinery/hydroponics/soil, +/turf/open/floor/plating/sidewalk, +/area/vtm/interior/cog) "wb" = ( /obj/structure/table, /obj/item/storage/medkit/darkpack/brute, @@ -1185,24 +1226,6 @@ /obj/item/storage/medkit/darkpack/brute, /turf/open/floor/plating/rough, /area/vtm/interior/clinic) -"wh" = ( -/obj/structure/table/wood, -/obj/item/food/grown/cannabis, -/obj/item/food/grown/cannabis, -/obj/item/food/grown/cannabis, -/obj/item/food/grown/cannabis, -/obj/item/food/grown/cannabis, -/obj/item/food/grown/cannabis, -/obj/item/bong{ - pixel_y = 10; - pixel_x = 10 - }, -/obj/item/bong{ - pixel_y = 2; - pixel_x = 10 - }, -/turf/open/floor/plating/sidewalk, -/area/vtm/interior/cog) "wj" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -1218,10 +1241,18 @@ /obj/effect/decal/cleanable/trash, /turf/open/misc/beach/vamp, /area/vtm/outside/pacificheights) +"wX" = ( +/obj/structure/bonfire/prelit/fire_barrel, +/turf/open/floor/plating/sidewalk/poor, +/area/vtm/outside/ghetto) "xc" = ( /obj/weapon_showcase, /turf/open/floor/wood/smooth/old, /area/vtm/interior/shop) +"xd" = ( +/obj/structure/closet/crate/wooden/communitygardens/tools, +/turf/open/floor/plating/sidewalk, +/area/vtm/interior/cog) "xh" = ( /obj/effect/turf_decal/bordur{ dir = 1 @@ -1241,20 +1272,19 @@ }, /turf/open/floor/plating/sidewalk, /area/vtm/outside/pacificheights) -"xt" = ( -/obj/machinery/hydroponics/soil, -/turf/open/floor/plating/sidewalk, -/area/vtm/interior/cog) -"xC" = ( -/obj/effect/decal/cleanable/litter, -/turf/open/floor/plating/concrete, -/area/vtm/interior/shop) "xE" = ( /obj/structure/table, /obj/item/storage/medkit/darkpack/advanced, /obj/item/storage/medkit/darkpack/advanced, /turf/open/floor/plating/rough, /area/vtm/interior/clinic) +"xF" = ( +/obj/structure/vampdoor/wood{ + dir = 4 + }, +/obj/effect/mapping_helpers/door/access/graveyard, +/turf/open/floor/plating/rough, +/area/vtm/graveyard/interior) "xH" = ( /obj/lombard, /obj/structure/table/countertop/beige, @@ -1268,16 +1298,6 @@ /obj/item/gun/ballistic/automatic/darkpack/thompson, /turf/open/floor/plating/rough, /area/vtm/interior/anarch) -"xY" = ( -/obj/structure/table/wood, -/obj/item/soil_sack, -/obj/item/soil_sack/coir, -/obj/item/soil_sack/gel, -/obj/item/soil_sack/rich, -/obj/item/soil_sack/vermaculite, -/obj/item/soil_sack/worm, -/turf/open/floor/plating/sidewalk, -/area/vtm/interior/cog) "xZ" = ( /obj/machinery/light/floor, /turf/open/floor/plating/rough, @@ -1289,10 +1309,6 @@ "yk" = ( /turf/closed/wall/vampwall/brick, /area/vtm/interior/supply) -"yo" = ( -/obj/structure/table/wood, -/turf/open/floor/plating/rough, -/area/vtm/graveyard/interior) "yq" = ( /obj/structure/barrels/rand, /obj/structure/sign/city/chinese/alt2/directional/west, @@ -1329,14 +1345,23 @@ /turf/open/misc/grass, /area/vtm/outside/pacificheights) "yX" = ( -/obj/structure/railing, -/obj/structure/ladder/manhole/up{ - connect_down = 1; - connect_up = 0 +/obj/structure/table/wood, +/obj/item/food/grown/cannabis, +/obj/item/food/grown/cannabis, +/obj/item/food/grown/cannabis, +/obj/item/food/grown/cannabis, +/obj/item/food/grown/cannabis, +/obj/item/food/grown/cannabis, +/obj/item/bong{ + pixel_y = 10; + pixel_x = 10 }, -/obj/structure/lattice/grate, -/turf/open/openspace, -/area/vtm/interior/techshop) +/obj/item/bong{ + pixel_y = 2; + pixel_x = 10 + }, +/turf/open/floor/plating/sidewalk, +/area/vtm/interior/cog) "zd" = ( /turf/open/floor/wood/smooth/old, /area/vtm/interior/sewer) @@ -1367,9 +1392,6 @@ /obj/effect/spawner/random/stray_animal, /turf/open/misc/beach/vamp, /area/vtm/outside/pacificheights) -"zD" = ( -/turf/open/floor/plating/rough/cave, -/area/vtm/interior/techshop) "zF" = ( /obj/structure/table/wood, /obj/item/vtm_artifact/weekapaug_thistle, @@ -1380,15 +1402,13 @@ /obj/structure/table/wood, /turf/open/floor/wood/smooth/old, /area/vtm/interior/sewer) +"zQ" = ( +/turf/open/floor/plating/sidewalk, +/area/vtm/interior/cog) "zX" = ( /obj/effect/decal/wallpaper/red, /turf/closed/wall/vampwall/market, /area/vtm/interior/shop) -"Af" = ( -/obj/structure/retail/junkfood_menu, -/obj/structure/table/countertop/teal, -/turf/open/floor/plating/concrete, -/area/vtm/interior/shop) "Ag" = ( /obj/effect/decal/cleanable/litter, /obj/effect/spawner/random/stray_animal, @@ -1400,13 +1420,14 @@ }, /turf/open/floor/plating/asphalt, /area/vtm/outside/pacificheights) -"Ay" = ( -/obj/structure/vampdoor/wood{ - dir = 1 - }, -/obj/effect/mapping_helpers/door/access/graveyard, -/turf/open/floor/plating/rough, -/area/vtm/graveyard/interior) +"Aq" = ( +/obj/structure/vampfence/corner/rich, +/turf/open/misc/dirt, +/area/vtm/graveyard) +"Au" = ( +/obj/structure/lattice/grate, +/turf/open/openspace, +/area/vtm/interior/techshop) "AE" = ( /obj/structure/bookcase/random/adult, /turf/open/floor/plating/concrete, @@ -1420,12 +1441,6 @@ }, /turf/open/floor/plating/sidewalk, /area/vtm/outside/pacificheights) -"Bb" = ( -/obj/structure/vampfence/rich{ - dir = 4 - }, -/turf/open/misc/grass, -/area/vtm/graveyard) "Be" = ( /obj/structure/vampdoor/simple, /obj/effect/mapping_helpers/door/access/supply, @@ -1471,18 +1486,6 @@ }, /turf/open/floor/plating/elevatorshaft, /area/vtm/outside/pacificheights) -"BH" = ( -/obj/structure/table/wood, -/obj/item/ammo_box/darkpack/c12g{ - pixel_x = 6; - pixel_y = 8 - }, -/obj/item/ammo_box/darkpack/c12g{ - pixel_x = -6; - pixel_y = 11 - }, -/turf/open/floor/plating/rough, -/area/vtm/graveyard/interior) "BL" = ( /mob/living/carbon/human/npc/shop, /turf/open/floor/plating/concrete, @@ -1501,11 +1504,6 @@ /obj/item/gun/ballistic/automatic/darkpack/sniper, /turf/open/floor/plating/rough, /area/vtm/interior/anarch) -"Cg" = ( -/obj/structure/retail/library, -/obj/structure/table/countertop/red, -/turf/open/floor/plating/concrete, -/area/vtm/interior/shop) "Ct" = ( /obj/structure/lamppost/one{ dir = 1 @@ -1525,8 +1523,25 @@ /obj/structure/extinguisher_cabinet/directional/north, /turf/open/floor/plating/rough, /area/vtm/interior/techshop) -"CO" = ( -/obj/structure/platform/lowwall/brick/window/reinforced, +"CF" = ( +/obj/structure/guncase, +/obj/item/gun/ballistic/shotgun/vampire, +/obj/item/flashlight/lantern/on{ + pixel_x = -7; + pixel_y = 19 + }, +/turf/open/floor/plating/rough, +/area/vtm/graveyard/interior) +"CP" = ( +/obj/structure/table/wood, +/obj/item/ammo_box/darkpack/c12g{ + pixel_x = 6; + pixel_y = 8 + }, +/obj/item/ammo_box/darkpack/c12g{ + pixel_x = -6; + pixel_y = 11 + }, /turf/open/floor/plating/rough, /area/vtm/graveyard/interior) "Df" = ( @@ -1550,8 +1565,11 @@ /turf/open/floor/plating/sidewalk/poor, /area/vtm/outside/pacificheights) "Dj" = ( +/obj/effect/vip_barrier/endron/endron_lab{ + dir = 8 + }, /turf/open/floor/plating/rough, -/area/vtm/graveyard/interior) +/area/vtm/interior/techshop) "Dp" = ( /obj/structure/table, /obj/item/storage/medkit/darkpack/oxy, @@ -1602,11 +1620,17 @@ }, /turf/open/floor/plating/concrete, /area/vtm/interior/shop) -"DS" = ( -/obj/machinery/light/dim/directional/east, -/obj/effect/spawner/random/decoration/flower, -/turf/open/misc/dirt, -/area/vtm/graveyard) +"DP" = ( +/obj/structure/table/wood, +/obj/item/storage/fancy/rollingpapers{ + pixel_x = -6 + }, +/obj/item/storage/box/matches{ + pixel_x = 6; + pixel_y = 10 + }, +/turf/open/floor/plating/sidewalk, +/area/vtm/interior/cog) "DT" = ( /obj/machinery/fax/endron, /obj/structure/table/wood, @@ -1624,27 +1648,25 @@ /obj/structure/lamppost/one, /turf/open/floor/plating/sidewalk/rich, /area/vtm/outside/pacificheights) +"Eb" = ( +/obj/structure/retail/gun_store{ + dir = 1 + }, +/obj/structure/table, +/obj/structure/platform/lowwall/market, +/turf/open/floor/plating/rough, +/area/vtm/interior/shop) "Ef" = ( /turf/closed/wall/vampwall/rich/old, /area/vtm/interior/sewer) -"Eg" = ( -/obj/structure/table/wood, -/obj/item/storage/fancy/rollingpapers{ - pixel_x = -6 - }, -/obj/item/storage/box/matches{ - pixel_x = 6; - pixel_y = 10 - }, -/turf/open/floor/plating/sidewalk, -/area/vtm/interior/cog) "Em" = ( /obj/structure/cargo_put, /turf/open/misc/dirt, /area/vtm/outside/supply) -"Eq" = ( -/obj/structure/vampfence/rich{ - dir = 4 +"Ep" = ( +/obj/item/flashlight/lantern/on{ + pixel_x = -8; + pixel_y = 8 }, /turf/open/misc/dirt, /area/vtm/graveyard) @@ -1671,10 +1693,6 @@ /obj/machinery/light/directional/west, /turf/open/misc/dirt, /area/vtm/outside/supply) -"EI" = ( -/obj/structure/vampfence/rich, -/turf/open/misc/dirt, -/area/vtm/graveyard) "EL" = ( /obj/structure/platform/lowwall/rich/old/window, /turf/open/floor/plating/rough, @@ -1682,6 +1700,22 @@ "EY" = ( /turf/closed/wall/vampwall/rich, /area/vtm/outside/pacificheights) +"Fa" = ( +/obj/structure/table/wood, +/obj/item/seeds/cannabis, +/obj/item/seeds/cannabis, +/obj/item/seeds/cannabis, +/obj/item/seeds/cannabis, +/obj/item/seeds/cannabis, +/obj/item/seeds/cannabis, +/turf/open/floor/plating/sidewalk, +/area/vtm/interior/cog) +"Fe" = ( +/obj/structure/table, +/obj/lombard, +/obj/structure/platform/lowwall/rich/old, +/turf/open/floor/plating/rough, +/area/vtm/interior/cog) "Ff" = ( /obj/effect/spawner/random/trash/grime{ spawn_loot_count = 30; @@ -1698,6 +1732,10 @@ }, /turf/open/floor/plating/sidewalk/poor, /area/vtm/outside/pacificheights) +"Fz" = ( +/obj/structure/sign/flag/pride/directional/north, +/turf/open/floor/plating/rough/cave, +/area/vtm/interior/techshop) "FB" = ( /obj/effect/turf_decal/stock{ dir = 1 @@ -1708,6 +1746,12 @@ /obj/machinery/vending/boozeomat, /turf/open/misc/beach/vamp, /area/vtm/outside/pacificheights) +"FE" = ( +/obj/structure/railing, +/obj/structure/lattice/grate, +/obj/structure/ladder/manhole, +/turf/open/openspace, +/area/vtm/interior/techshop) "FG" = ( /obj/effect/decal/cleanable/cardboard, /obj/effect/decal/graffiti/large, @@ -1733,6 +1777,10 @@ /obj/cargocrate, /turf/open/misc/dirt/rails, /area/vtm/outside/supply) +"Gf" = ( +/obj/machinery/hydroponics/simple/plastic, +/turf/open/floor/plating/sidewalk, +/area/vtm/interior/cog) "Gj" = ( /obj/effect/gibspawner/human, /turf/open/floor/city/toilet, @@ -1791,6 +1839,10 @@ }, /turf/open/floor/plating/rough, /area/vtm/interior/techshop) +"GV" = ( +/obj/structure/vampfence/rich, +/turf/open/misc/dirt, +/area/vtm/graveyard) "GX" = ( /obj/structure/barrels/rand, /obj/machinery/light/directional/north, @@ -1845,14 +1897,6 @@ }, /turf/open/misc/beach/vamp, /area/vtm/outside/pacificheights) -"Hv" = ( -/obj/structure/table/wood, -/obj/effect/spawner/random/bureaucracy/paper{ - pixel_x = 7; - pixel_y = -2 - }, -/turf/open/floor/plating/rough, -/area/vtm/graveyard/interior) "Hy" = ( /obj/machinery/atm{ dir = 8; @@ -1868,6 +1912,10 @@ /obj/effect/turf_decal/stock, /turf/open/floor/plating/asphalt, /area/vtm/outside/pacificheights) +"HK" = ( +/obj/structure/vampgate, +/turf/open/misc/dirt, +/area/vtm/graveyard) "HO" = ( /obj/effect/landmark/npcbeacon, /obj/effect/turf_decal/bordur{ @@ -1888,16 +1936,24 @@ }, /turf/open/floor/plating/sidewalk/rich, /area/vtm/outside/pacificheights) +"If" = ( +/obj/structure/toilet{ + dir = 8 + }, +/turf/open/floor/plating/rough, +/area/vtm/interior/techshop) "Ig" = ( /obj/effect/turf_decal/bordur, /obj/structure/roadblock, /turf/open/floor/plating/sidewalk/poor, /area/vtm/outside/pacificheights) -"Ip" = ( -/obj/structure/retail/black_market, -/obj/structure/table/countertop/black, -/turf/open/floor/plating/rough, -/area/vtm/interior/shop) +"Ii" = ( +/obj/machinery/smartfridge/drying/rack, +/obj/item/food/grown/cannabis, +/obj/item/food/grown/cannabis, +/obj/item/food/grown/cannabis, +/turf/open/floor/plating/sidewalk, +/area/vtm/interior/cog) "IA" = ( /obj/structure/railing{ dir = 10 @@ -1905,35 +1961,22 @@ /obj/structure/transport/linear/public, /turf/open/floor/plating/elevatorshaft, /area/vtm/outside/pacificheights) +"IC" = ( +/obj/structure/table/wood, +/turf/open/floor/plating/rough, +/area/vtm/graveyard/interior) "ID" = ( /turf/closed/wall/vampwall/market, /area/vtm/outside/pacificheights) -"IE" = ( -/obj/structure/sign/flag/pride/lesbian/directional/north, -/turf/open/floor/plating/rough/cave, -/area/vtm/interior/techshop) "IL" = ( /obj/structure/ladder/manhole/up, /turf/open/floor/plating/rough, /area/vtm/interior/techshop) -"IQ" = ( -/obj/machinery/light/dim/directional/east, -/turf/open/floor/plating/rough, -/area/vtm/graveyard/interior) -"IU" = ( -/obj/machinery/light/directional/north, -/turf/open/floor/plating/canal, -/area/vtm/interior/techshop) "IZ" = ( /obj/machinery/fax/aasimites, /obj/structure/table/wood, /turf/open/misc/beach/vamp, /area/vtm/outside/pacificheights) -"Je" = ( -/obj/machinery/light/directional/north, -/obj/structure/werewolf_totem/children_of_gaia, -/turf/open/floor/plating/sidewalk, -/area/vtm/interior/cog) "Jf" = ( /obj/machinery/door/airlock/elevator/left{ dir = 8; @@ -1973,6 +2016,10 @@ /obj/machinery/light/directional/east, /turf/open/floor/wood/smooth/old, /area/vtm/interior/shop) +"JE" = ( +/obj/structure/closet/crate/wooden/communitygardens/seeds, +/turf/open/floor/plating/sidewalk, +/area/vtm/interior/cog) "JG" = ( /obj/structure/table, /obj/item/ammo_box/magazine/glock9mm, @@ -1997,9 +2044,6 @@ /obj/effect/spawner/random/trash/rat, /turf/open/misc/beach/vamp, /area/vtm/outside/pacificheights) -"JX" = ( -/turf/open/floor/plating/sidewalk, -/area/vtm/interior/techshop) "Kc" = ( /obj/effect/turf_decal/bordur, /obj/effect/landmark/npc_spawn_point, @@ -2015,25 +2059,19 @@ "Kk" = ( /turf/closed/wall/vampwall/brick_old, /area/vtm/outside/ghetto) -"Kn" = ( -/obj/structure/table, -/obj/lombard, -/obj/structure/platform/lowwall/rich/old, -/turf/open/floor/plating/rough, -/area/vtm/interior/cog) "Ko" = ( /obj/effect/landmark/npcbeacon/directed{ dir = 8 }, /turf/open/floor/plating/sidewalk, /area/vtm/outside/pacificheights) -"Kq" = ( -/obj/item/flashlight/lantern/on{ - pixel_x = -8; - pixel_y = 8 +"Kp" = ( +/obj/structure/retail/junkfood_menu{ + dir = 4 }, -/turf/open/misc/dirt, -/area/vtm/graveyard) +/obj/structure/table/countertop/teal, +/turf/open/floor/plating/concrete, +/area/vtm/interior/shop) "Kr" = ( /obj/structure/table, /obj/item/stack/dollar/thousand, @@ -2041,11 +2079,6 @@ /obj/item/stack/dollar/thousand, /turf/open/floor/plating/sidewalk/poor, /area/vtm/outside/supply) -"Kt" = ( -/obj/structure/retail/pharmacy, -/obj/structure/table/countertop/purple, -/turf/open/floor/plating/concrete, -/area/vtm/interior/shop) "Kz" = ( /obj/structure/table/wood, /obj/item/vtm_artifact/heart_of_eliza, @@ -2060,6 +2093,13 @@ /obj/fusebox, /turf/open/floor/plating/rough, /area/vtm/interior/anarch) +"KD" = ( +/obj/structure/retail/pharmacy{ + dir = 8 + }, +/obj/structure/table/countertop/purple, +/turf/open/floor/plating/concrete, +/area/vtm/interior/shop) "KF" = ( /mob/living/carbon/human/npc/shop, /turf/open/floor/plating/sidewalk, @@ -2122,12 +2162,16 @@ /obj/item/vtm_artifact/daimonori, /turf/open/floor/wood/smooth/old, /area/vtm/interior/sewer) +"LL" = ( +/obj/structure/vampfence/corner/rich, +/turf/open/misc/grass, +/area/vtm/graveyard) "LN" = ( -/obj/structure/toilet{ - dir = 8 +/obj/structure/chair/wood/darkpack/red{ + dir = 1 }, /turf/open/floor/plating/rough, -/area/vtm/interior/techshop) +/area/vtm/graveyard/interior) "LP" = ( /obj/structure/vampdoor/simple, /obj/effect/mapping_helpers/door/access/police, @@ -2155,6 +2199,45 @@ /obj/structure/table/wood, /turf/open/misc/beach/vamp, /area/vtm/outside/pacificheights) +"LZ" = ( +/obj/structure/table/wood, +/obj/item/kirbyplants/darkpack/random{ + pixel_x = 10; + pixel_y = 17 + }, +/obj/item/kirbyplants/darkpack/random{ + pixel_x = -11; + pixel_y = -21 + }, +/obj/item/kirbyplants/darkpack/random{ + pixel_x = 4; + pixel_y = -14 + }, +/obj/item/kirbyplants/darkpack/random{ + pixel_y = 18 + }, +/obj/item/kirbyplants/darkpack/random{ + pixel_x = 12; + pixel_y = 9 + }, +/obj/item/kirbyplants/darkpack/random{ + pixel_x = 10; + pixel_y = -16 + }, +/obj/item/kirbyplants/darkpack/random{ + pixel_x = -5; + pixel_y = -13 + }, +/obj/item/kirbyplants/darkpack/random{ + pixel_x = -9; + pixel_y = 16 + }, +/obj/structure/retail/hardware_store{ + dir = 4; + icon_state = "menu" + }, +/turf/open/misc/beach/vamp, +/area/vtm/outside/pacificheights) "Mf" = ( /obj/structure/vampdoor{ dir = 4 @@ -2179,22 +2262,11 @@ }, /turf/open/misc/dirt, /area/vtm/outside/supply) -"My" = ( -/obj/structure/retail/costume_store{ - pixel_x = 2; - pixel_y = -4 - }, -/obj/structure/table, -/obj/structure/retail/hot_ishu{ - pixel_y = 10 - }, -/obj/structure/platform/lowwall/brick, -/turf/open/floor/plating/rough, -/area/vtm/interior/shop) -"MD" = ( -/obj/machinery/light/directional/east, -/turf/open/floor/plating/rough/cave, -/area/vtm/interior/techshop) +"Mr" = ( +/obj/structure/table/wood, +/obj/machinery/light/directional/south, +/turf/open/floor/plating/sidewalk, +/area/vtm/interior/cog) "MF" = ( /obj/structure/table/wood, /obj/machinery/radio_tranceiver/camarilla, @@ -2250,11 +2322,10 @@ /obj/structure/chair/darkpack/red, /turf/open/floor/plating/rough, /area/vtm/interior/techshop) -"NI" = ( -/obj/structure/retail/bacotell_menu, -/obj/structure/table/countertop/bacotell, -/turf/open/floor/plating/concrete, -/area/vtm/interior/shop) +"NM" = ( +/obj/structure/railing/corner, +/turf/open/floor/plating/canal, +/area/vtm/interior/techshop) "NO" = ( /obj/structure/table/wood/fancy/red, /obj/item/storage/bag/books, @@ -2273,10 +2344,6 @@ "NR" = ( /turf/open/misc/beach/vamp, /area/vtm/outside/pacificheights) -"NW" = ( -/obj/structure/sign/flag/pride/directional/north, -/turf/open/floor/plating/rough/cave, -/area/vtm/interior/techshop) "NX" = ( /obj/effect/decal/pallet, /obj/machinery/light/directional/west, @@ -2305,14 +2372,20 @@ /mob/living/carbon/human/npc/shop, /turf/open/floor/plating/rough, /area/vtm/interior/shop) +"Op" = ( +/turf/open/misc/dirt, +/area/vtm/graveyard) "Oq" = ( /obj/structure/extinguisher_cabinet/directional/east, /turf/open/misc/beach/vamp, /area/vtm/outside/pacificheights) -"Oz" = ( -/obj/structure/sink/directional/east, -/turf/open/floor/plating/sidewalk, -/area/vtm/interior/cog) +"Ov" = ( +/obj/structure/vampdoor/wood{ + dir = 1 + }, +/obj/effect/mapping_helpers/door/access/graveyard, +/turf/open/floor/plating/rough, +/area/vtm/graveyard/interior) "OB" = ( /obj/darkpack_car/police{ locked = 0 @@ -2372,12 +2445,10 @@ /obj/item/kirbyplants/random, /turf/open/floor/wood/smooth/old, /area/vtm/interior/shop) -"Pg" = ( -/obj/structure/retail/gun_store, -/obj/structure/table, -/obj/structure/platform/lowwall/market, +"Po" = ( +/obj/structure/platform/lowwall/brick/window/reinforced, /turf/open/floor/plating/rough, -/area/vtm/interior/shop) +/area/vtm/graveyard/interior) "Pr" = ( /obj/structure/roofstuff/vent_end, /turf/open/misc/grass, @@ -2386,10 +2457,6 @@ /obj/machinery/computer/operating, /turf/open/floor/plating/rough, /area/vtm/interior/clinic) -"Pw" = ( -/obj/structure/closet/crate/wooden/communitygardens/tools, -/turf/open/floor/plating/sidewalk, -/area/vtm/interior/cog) "Pz" = ( /obj/structure/transport/linear/public, /obj/machinery/elevator_control_panel/directional/north{ @@ -2401,20 +2468,10 @@ }, /turf/open/floor/plating/elevatorshaft, /area/vtm/outside/pacificheights) -"PA" = ( -/mob/living/carbon/human/npc/bouncer/endron/endron_lab, -/turf/open/floor/plating/rough, -/area/vtm/interior/clinic) "PC" = ( /obj/structure/roofstuff/vent, /turf/open/misc/grass, /area/vtm/outside/pacificheights) -"PK" = ( -/obj/structure/vampdoor{ - dir = 4 - }, -/turf/open/floor/plating/canal, -/area/vtm/interior/techshop) "PL" = ( /obj/effect/landmark/latejoin, /turf/open/misc/beach/vamp, @@ -2441,6 +2498,17 @@ /obj/effect/turf_decal/asphaltline/alt, /turf/open/floor/plating/asphalt, /area/vtm/outside/pacificheights) +"Qj" = ( +/obj/structure/table/countertop/bubway, +/obj/structure/retail/bubway_menu{ + dir = 1 + }, +/turf/open/floor/plating/concrete, +/area/vtm/interior/shop) +"Qk" = ( +/obj/effect/landmark/teleport_mark/alltribes, +/turf/open/floor/plating/rough/cave, +/area/vtm/interior/techshop) "Ql" = ( /obj/item/kirbyplants/darkpack/random{ pixel_x = -6; @@ -2452,16 +2520,22 @@ }, /turf/open/misc/beach/vamp, /area/vtm/outside/pacificheights) -"Qv" = ( -/obj/structure/retail/smoke_menu, -/obj/structure/table/countertop/teal, -/turf/open/floor/plating/concrete, +"Qr" = ( +/obj/structure/retail/black_market{ + dir = 8 + }, +/obj/structure/table/countertop/black, +/turf/open/floor/plating/rough, /area/vtm/interior/shop) "QD" = ( /obj/machinery/light/directional/north, /obj/effect/decal/cleanable/trash, /turf/open/floor/wood/smooth/old, /area/vtm/interior/sewer) +"QJ" = ( +/obj/structure/sign/flag/pride/trans/directional/north, +/turf/open/floor/plating/rough/cave, +/area/vtm/interior/techshop) "QK" = ( /obj/effect/turf_decal/bordur, /obj/effect/turf_decal/bordur{ @@ -2505,15 +2579,14 @@ }, /turf/open/misc/dirt/rails, /area/vtm/outside/supply) -"Rf" = ( -/obj/item/clothing/head/collectable/pirate, -/turf/open/floor/wood/rough, -/area/vtm/interior/techshop) -"Rg" = ( -/obj/structure/table/wood, -/obj/structure/retail/flower_shop, -/turf/open/misc/beach/vamp, -/area/vtm/outside/pacificheights) +"Rh" = ( +/obj/structure/table, +/obj/structure/retail/gummaguts_menu{ + dir = 8 + }, +/obj/structure/platform/lowwall/market, +/turf/open/floor/plating/rough, +/area/vtm/interior/shop) "Ri" = ( /obj/structure/table, /obj/item/surgery_tray/full, @@ -2527,20 +2600,6 @@ /obj/machinery/radio_tranceiver/clinic, /turf/open/misc/beach/vamp, /area/vtm/outside/pacificheights) -"Ro" = ( -/obj/structure/table, -/obj/structure/retail/gummaguts_menu, -/obj/structure/platform/lowwall/market, -/turf/open/floor/plating/rough, -/area/vtm/interior/shop) -"Rs" = ( -/turf/closed/wall/vampwall/brick, -/area/vtm/graveyard/interior) -"Rv" = ( -/obj/structure/table/wood, -/obj/machinery/light/directional/south, -/turf/open/floor/plating/sidewalk, -/area/vtm/interior/cog) "Rx" = ( /obj/effect/landmark/npcbeacon, /obj/effect/turf_decal/bordur/corner{ @@ -2555,6 +2614,10 @@ /obj/effect/spawner/random/occult/artifact, /turf/open/floor/wood/smooth/old, /area/vtm/interior/sewer) +"RV" = ( +/obj/structure/werewolf_totem/generic/weaver, +/turf/open/floor/plating/sidewalk, +/area/vtm/interior/techshop) "Sf" = ( /obj/structure/sign/city/police_department/directional/north{ icon_state = "police4" @@ -2609,6 +2672,10 @@ /obj/machinery/iv_drip, /turf/open/floor/plating/rough, /area/vtm/interior/clinic) +"Td" = ( +/mob/living/carbon/human/npc/bouncer/endron/endron_lab, +/turf/open/floor/plating/rough, +/area/vtm/interior/clinic) "Ti" = ( /obj/structure/transport/linear/public, /obj/effect/landmark/transport/transport_id{ @@ -2647,27 +2714,11 @@ /obj/item/gun/ballistic/automatic/pistol/darkpack/deagle, /turf/open/floor/plating/rough, /area/vtm/interior/anarch) -"TT" = ( -/obj/structure/railing/corner, -/turf/open/floor/plating/canal, -/area/vtm/interior/techshop) -"TY" = ( -/obj/structure/rack/food{ - dir = 4; - pixel_x = 7 - }, -/turf/open/floor/plating/concrete, -/area/vtm/interior/shop) "Uq" = ( /obj/machinery/fax/admin/anarch, /obj/structure/table/wood, /turf/open/misc/beach/vamp, /area/vtm/outside/pacificheights) -"Us" = ( -/obj/machinery/light/directional/north, -/obj/structure/lattice/grate, -/turf/open/openspace, -/area/vtm/interior/techshop) "Ut" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -2682,6 +2733,10 @@ /obj/item/gun/ballistic/automatic/darkpack/mp5, /turf/open/floor/plating/rough, /area/vtm/interior/anarch) +"Uw" = ( +/obj/structure/sink/directional/east, +/turf/open/floor/plating/sidewalk, +/area/vtm/interior/cog) "UC" = ( /obj/item/paper_bin, /obj/item/pen/fourcolor, @@ -2706,12 +2761,6 @@ /obj/structure/transport/linear/public, /turf/open/floor/plating/elevatorshaft, /area/vtm/outside/pacificheights) -"Va" = ( -/obj/machinery/computer/order_console/mining/restricted/hospital, -/obj/structure/table/reinforced, -/obj/structure/platform/lowwall/brick, -/turf/open/floor/plating/rough, -/area/vtm/interior/shop) "Vg" = ( /obj/structure/table, /obj/item/melee/vamp/tire, @@ -2773,39 +2822,28 @@ }, /turf/open/floor/plating/sidewalk, /area/vtm/outside/pacificheights) -"VP" = ( -/obj/machinery/light/directional/north, -/turf/open/floor/plating/concrete, -/area/vtm/interior/shop) "VQ" = ( /obj/effect/turf_decal/asphaltline{ dir = 8 }, /turf/open/floor/plating/asphalt, /area/vtm/outside/pacificheights) +"VW" = ( +/obj/structure/toiletbong, +/turf/open/floor/plating/sidewalk, +/area/vtm/interior/cog) "Wa" = ( /turf/open/misc/dirt, /area/vtm/outside/supply) +"Wb" = ( +/turf/open/floor/plating/rough/cave, +/area/vtm/interior/techshop) "We" = ( /obj/effect/turf_decal/bordur{ dir = 4 }, /turf/open/floor/plating/sidewalk/rich, /area/vtm/outside/pacificheights) -"Wh" = ( -/obj/vampgrave{ - spawn_interval = 300; - max_zombies_per_grave = 1; - name = "upturned grave" - }, -/turf/open/misc/dirt, -/area/vtm/graveyard) -"Wk" = ( -/obj/structure/chair/wood/darkpack/red{ - dir = 1 - }, -/turf/open/floor/plating/rough, -/area/vtm/graveyard/interior) "Wl" = ( /obj/structure/table, /obj/item/ammo_box/magazine/darkpack556, @@ -2839,9 +2877,8 @@ /turf/open/floor/wood/smooth/old, /area/vtm/interior/sewer) "WH" = ( -/obj/structure/vampdoor, -/turf/open/floor/plating/rough/cave, -/area/vtm/interior/techshop) +/turf/open/floor/plating/rough, +/area/vtm/graveyard/interior) "WJ" = ( /obj/structure/transport/linear/public, /turf/open/floor/plating/elevatorshaft, @@ -2850,6 +2887,9 @@ /obj/structure/lamppost/one, /turf/open/misc/beach/vamp, /area/vtm/outside/pacificheights) +"WW" = ( +/turf/open/floor/plating/canal, +/area/vtm/interior/techshop) "WZ" = ( /obj/structure/lamppost/one{ dir = 8 @@ -2912,6 +2952,13 @@ /obj/structure/fence/door, /turf/open/misc/beach/vamp, /area/vtm/outside/pacificheights) +"XG" = ( +/obj/structure/retail/smoke_menu{ + dir = 4 + }, +/obj/structure/table/countertop/teal, +/turf/open/floor/plating/concrete, +/area/vtm/interior/shop) "XJ" = ( /obj/effect/turf_decal/bordur, /turf/open/floor/plating/sidewalk, @@ -2929,6 +2976,10 @@ /mob/living/carbon/human/npc/hobo, /turf/open/floor/plating/sidewalk, /area/vtm/outside/pacificheights) +"XX" = ( +/obj/machinery/light/dim/directional/east, +/turf/open/floor/plating/rough, +/area/vtm/graveyard/interior) "XY" = ( /obj/structure/lamppost/three, /turf/open/floor/plating/sidewalk, @@ -2938,31 +2989,21 @@ /mob/living/carbon/human/npc/incel, /turf/open/misc/beach/vamp, /area/vtm/outside/pacificheights) -"Yb" = ( -/obj/structure/table/wood, -/obj/item/storage/toolbox/mechanical{ - pixel_x = -4; - pixel_y = 14 +"Yk" = ( +/obj/structure/rack/tall/store_shelf_metal{ + dir = 4 }, -/turf/open/floor/plating/rough, -/area/vtm/graveyard/interior) +/turf/open/floor/plating/concrete, +/area/vtm/interior/shop) "Ys" = ( /turf/open/openspace, /area/vtm/outside/pacificheights) -"Yw" = ( -/obj/structure/railing, -/obj/structure/lattice/grate, -/turf/open/openspace, -/area/vtm/interior/techshop) "Yz" = ( /obj/structure/chair/office{ dir = 8 }, /turf/open/floor/plating/sidewalk/poor, /area/vtm/outside/supply) -"YA" = ( -/turf/closed/wall/vampwall/brick_old, -/area/vtm/interior/techshop) "YB" = ( /obj/machinery/fax/admin/endron, /obj/structure/table/wood, @@ -2982,10 +3023,6 @@ /obj/structure/roadsign/speedlimit, /turf/open/floor/plating/sidewalk/poor, /area/vtm/outside/pacificheights) -"YM" = ( -/obj/machinery/hydroponics/simple/wooden, -/turf/open/floor/plating/sidewalk, -/area/vtm/interior/cog) "YY" = ( /obj/structure/table/reinforced, /obj/item/ritual_tome/arcane, @@ -2997,36 +3034,24 @@ }, /turf/open/floor/plating/sidewalk, /area/vtm/outside/pacificheights) -"Zk" = ( -/obj/structure/table/wood, -/obj/item/shovel/vamp{ - pixel_x = 2; - pixel_y = 1 - }, -/obj/item/shovel/vamp{ - pixel_x = -4; - pixel_y = 7 - }, -/obj/item/melee/vamp/tire{ - pixel_x = 1; - pixel_y = 14 - }, -/turf/open/floor/plating/rough, -/area/vtm/graveyard/interior) +"Zi" = ( +/turf/open/floor/wood/rough, +/area/vtm/interior/techshop) +"Zj" = ( +/obj/machinery/light/directional/north, +/obj/structure/werewolf_totem/children_of_gaia, +/turf/open/floor/plating/sidewalk, +/area/vtm/interior/cog) "Zs" = ( /turf/closed/wall/vampwall/brick_old, /area/vtm/outside/pacificheights) -"Zt" = ( -/obj/structure/closet/crate/wooden/communitygardens/seeds, -/turf/open/floor/plating/sidewalk, -/area/vtm/interior/cog) "Zz" = ( /turf/open/misc/grass/random/grass, /area/vtm/outside/pacificheights) -"ZH" = ( -/obj/machinery/hydroponics/simple/plastic, -/turf/open/floor/plating/sidewalk, -/area/vtm/interior/cog) +"ZF" = ( +/obj/structure/railing, +/turf/open/floor/plating/canal, +/area/vtm/interior/techshop) "ZS" = ( /obj/structure/table, /obj/item/gun/ballistic/shotgun/toy/crossbow/vampire{ @@ -4416,7 +4441,7 @@ Tb pN pN pN -PA +Td Id sw Id @@ -4485,7 +4510,7 @@ SG pN pN SK -rI +Dj ZU rN Id @@ -4553,7 +4578,7 @@ Tb pN pN SK -LN +If ZU rN Id @@ -4960,15 +4985,15 @@ zA NR iD bo -Cg +et iD ri -Kt +KD iD NR Fg sY -Ip +Qr Fg xH hz @@ -5230,18 +5255,18 @@ GF zX nD BL -NI +tU NR NR NR Fg -Qv -Af +XG +Kp Fg -Va +GH GH Fg -mm +GH GH Fg sX @@ -5371,8 +5396,8 @@ eg NR NR Wy -xC -TY +vJ +mL Fg dA oW @@ -5439,8 +5464,8 @@ NR NR NR Fg -VP -oW +aw +Yk Fg kS kS @@ -5502,7 +5527,7 @@ GF Hp Vv BL -el +Qj NR NR NR @@ -5643,12 +5668,12 @@ NR NR NR Fg -My -ba +hF +rn Gu kS BX -Ro +Rh zx kS kS @@ -5774,7 +5799,7 @@ GF jW xc eU -Pg +Eb NR NR NR @@ -5989,8 +6014,8 @@ Nd FH Nd NR -nk -Rg +LZ +nC sU NR NR @@ -6737,11 +6762,11 @@ oD oD oD NR -nZ -EI -EI -EI -ew +Aq +GV +GV +GV +an cj ik VQ @@ -6802,14 +6827,14 @@ Zz oD oD Zz -uh -tL -EI -kx -ag -ag -ag -Eq +LL +nT +GV +oT +Op +Op +Op +jQ cj ik VQ @@ -6870,14 +6895,14 @@ Oi Zz oD Oi -Bb -Wh -ag -ag -ag -ag -ag -ag +kg +uZ +Op +Op +Op +Op +Op +Op cj FB VQ @@ -6938,14 +6963,14 @@ Oi oD oD Oi -Eq -ag -ag -Wh -ag -ag -ag -to +jQ +Op +Op +uZ +Op +Op +Op +HK cj ik VQ @@ -7006,14 +7031,14 @@ Oi oD oD Oi -Eq -Wh -DS -ag -ag -ag -ag -ag +jQ +uZ +pm +Op +Op +Op +Op +Op Bq ik VQ @@ -7073,15 +7098,15 @@ oD Oi oD oD -Rs -CO -CO -Rs -Kq -ag -ag -ag -Eq +jH +Po +Po +jH +Ep +Op +Op +Op +jQ cj ik VQ @@ -7141,15 +7166,15 @@ oD Oi oD Zz -Rs -Hv -mf -Rs -ag -ag -ag -ag -Eq +jH +vu +eL +jH +Op +Op +Op +Op +jQ Ig ik VQ @@ -7209,15 +7234,15 @@ oD Zs yW oD -Rs -Zk -Dj -Rs -CO -vi -Rs -Rs -kx +jH +oZ +WH +jH +Po +xF +jH +jH +oT cj kc Cz @@ -7277,15 +7302,15 @@ oD Zs XD Jf -Rs -BH -Wk -Dj -Dj -Dj -Dj -Ay -ag +jH +CP +LN +WH +WH +WH +WH +Ov +Op cj ik VQ @@ -7345,14 +7370,14 @@ oD Zs Pz WJ -Rs -aa -Dj -IQ -Dj -Dj -Dj -Rs +jH +CF +WH +XX +WH +WH +WH +jH Ny Ny rB @@ -7413,14 +7438,14 @@ Ny Ny Ny Ny -Rs -Rs -Rs -Rs -bD -Yb -yo -Rs +jH +jH +jH +jH +vi +kl +IC +jH GF Ny rB @@ -7677,10 +7702,10 @@ GJ (3,1,2) = {" GJ ZU -IE -pv -zD -zD +bJ +mG +Wb +Wb ZU Mm Ys @@ -7745,10 +7770,10 @@ GJ (4,1,2) = {" GJ ZU -od -hp -mb -zD +QJ +iU +Qk +Wb ZU tY Ys @@ -7813,11 +7838,11 @@ GJ (5,1,2) = {" GJ ZU -NW -MD -lf -zD -WH +Fz +oN +vO +Wb +tg tY Ys Ys @@ -7886,7 +7911,7 @@ ZU ZU ZU ZU -PK +md ZU ZU ZU @@ -7949,19 +7974,19 @@ GJ (7,1,2) = {" GJ ZU -JX -JX -JX -JX +jr +jr +jr +jr ZU -mr -dE -hF -hF -hF -hF -hF -pI +WW +ZF +nj +nj +nj +nj +nj +Au GN lX lX @@ -8017,19 +8042,19 @@ GJ (8,1,2) = {" GJ ZU -JX -bA -JX -JX +jr +RV +jr +jr ZU -pI -Yw -hF -hF -hF -hF -hF -pI +Au +lC +nj +nj +nj +nj +nj +Au GN lX lX @@ -8085,19 +8110,19 @@ GJ (9,1,2) = {" GJ ZU -JX -JX -JX -JX +jr +jr +jr +jr ZU -Us -Yw -hF -hF -hF -hF -hF -pI +tc +lC +nj +nj +nj +nj +nj +Au GN lX lX @@ -8153,19 +8178,19 @@ GJ (10,1,2) = {" GJ ZU -JX -JX -JX -JX -JX -pI -Yw -hF -hF -hF -hF -hF -pI +jr +jr +jr +jr +jr +Au +lC +nj +nj +nj +nj +nj +Au GN lX lX @@ -8220,20 +8245,20 @@ GJ "} (11,1,2) = {" GJ -tR -tR -tR -tR -tR -tR -pI -Yw -hF -hF -hF -hF -hF -pI +lv +lv +lv +lv +lv +lv +Au +lC +nj +nj +nj +nj +nj +Au GN lX lX @@ -8288,20 +8313,20 @@ GJ "} (12,1,2) = {" GJ -tR -kO -Oz -Oz -xY -tR -pI -Yw -hF -hF -hF -hF -hF -pI +lv +VW +Uw +Uw +rx +lv +Au +lC +nj +nj +nj +nj +nj +Au GN lX lX @@ -8356,20 +8381,20 @@ GJ "} (13,1,2) = {" GJ -tR -YM -lx -lx -xt -tR -mr -dE -hF -hF -hF -hF -hF -pI +lv +vm +zQ +zQ +vT +lv +WW +ZF +nj +nj +nj +nj +nj +Au GN lX lX @@ -8424,20 +8449,20 @@ GJ "} (14,1,2) = {" GJ -tR -YM -lx -lx -xt -tR -mr -TT -vf -Rf -hF -hF -hF -pI +lv +vm +zQ +zQ +vT +lv +WW +NM +Zi +qF +nj +nj +nj +Au LU lX lX @@ -8492,20 +8517,20 @@ GJ "} (15,1,2) = {" GJ -tR -Je -lx -lx -Rv -tR -IU -dE -hF -hF -hF -hF -hF -pI +lv +Zj +zQ +zQ +Mr +lv +oP +ZF +nj +nj +nj +nj +nj +Au LU lX lX @@ -8560,20 +8585,20 @@ GJ "} (16,1,2) = {" GJ -tR -YM -lx -lx -ZH -tR -pI -Yw -hF -hF -hF -hF -hF -pI +lv +vm +zQ +zQ +Gf +lv +Au +lC +nj +nj +nj +nj +nj +Au GN lX lX @@ -8628,20 +8653,20 @@ GJ "} (17,1,2) = {" GJ -tR -YM -lx -lx -ZH -tR -pI -Yw -hF -hF -hF -hF -hF -pI +lv +vm +zQ +zQ +Gf +lv +Au +lC +nj +nj +nj +nj +nj +Au GN lX lX @@ -8696,20 +8721,20 @@ GJ "} (18,1,2) = {" GJ -tR -mT -lx -lx -Zt -tR -pI -yX -hF -hF -hF -hF -hF -pI +lv +Fa +zQ +zQ +JE +lv +Au +FE +nj +nj +nj +nj +nj +Au GN lX lX @@ -8764,26 +8789,26 @@ GJ "} (19,1,2) = {" GJ -tR -mT -lx -lx -Zt -tR -pI -Yw -hF -hF -hF -hF -hF -pI +lv +Fa +zQ +zQ +JE +lv +Au +lC +nj +nj +nj +nj +nj +Au GN lX lX lX lX -fZ +wX lX ca eQ @@ -8832,20 +8857,20 @@ GJ "} (20,1,2) = {" GJ -tR -vG -lx -lx -Pw -tR -pI -Yw -hF -hF -hF -hF -hF -pI +lv +Ii +zQ +zQ +xd +lv +Au +lC +nj +nj +nj +nj +nj +Au LU lX lX @@ -8900,20 +8925,20 @@ GJ "} (21,1,2) = {" GJ -tR -tJ -lx -lx -Pw -tR -IU -dE -hF -hF -hF -hF -hF -pI +lv +ti +zQ +zQ +xd +lv +oP +ZF +nj +nj +nj +nj +nj +Au LU lX lX @@ -8968,20 +8993,20 @@ GJ "} (22,1,2) = {" GJ -tR -wh -lx -lx -lx -lx -mr -mr -hF -hF -hF -hF -hF -pI +lv +yX +zQ +zQ +zQ +zQ +WW +WW +nj +nj +nj +nj +nj +Au GN lX lX @@ -9036,20 +9061,20 @@ GJ "} (23,1,2) = {" GJ -tR -Eg -lx -lx -lx -lx -mr -mr -hF -hF -hF -hF -hF -pI +lv +DP +zQ +zQ +zQ +zQ +WW +WW +nj +nj +nj +nj +nj +Au GN lX lX @@ -9104,20 +9129,20 @@ GJ "} (24,1,2) = {" GJ -tR -Kn -cz -tR -tR -tR -PK -PK +lv +Fe +hD +lv +lv +lv +md +md ZU ZU -YA -YA -YA -YA +dK +dK +dK +dK Kk Mg SJ diff --git a/_maps/map_files/Vampire/westfield_mall/westfield_mall.dmm b/_maps/map_files/Vampire/westfield_mall/westfield_mall.dmm index 54712988dedc..99c6b3bd724d 100644 --- a/_maps/map_files/Vampire/westfield_mall/westfield_mall.dmm +++ b/_maps/map_files/Vampire/westfield_mall/westfield_mall.dmm @@ -3044,7 +3044,9 @@ /turf/open/floor/city/plating_mono, /area/vtm/westfield_mall/interior) "akl" = ( -/obj/structure/retail/pharmacy, +/obj/structure/retail/pharmacy{ + dir = 8 + }, /obj/structure/platform/lowwall/painted, /turf/open/floor/plating/rough, /area/vtm/westfield_mall/interior/vet_clinic) @@ -3283,8 +3285,8 @@ /turf/open/floor/carpet/darkpack/orangesilver, /area/vtm/interior/supply) "alc" = ( -/obj/structure/table/wood, /obj/effect/spawner/random/food_or_drink/plant_produce, +/obj/structure/rack/fruit_stand, /turf/open/floor/city/circled, /area/vtm/interior/shop) "ald" = ( @@ -3742,7 +3744,7 @@ /obj/structure/flora/bush/flowers_yw/style_random{ pixel_y = 2 }, -/obj/structure/railing, +/obj/structure/railing/darkpack/wood, /turf/open/misc/dirt, /area/vtm/interior/sewer/nosferatu_town) "amD" = ( @@ -3918,7 +3920,8 @@ /area/vtm/interior/shop) "ang" = ( /obj/structure/chair/comfy/teal{ - dir = 4 + dir = 4; + pixel_y = 1 }, /turf/open/floor/wood/smooth/old, /area/vtm/interior/clinic) @@ -4367,9 +4370,9 @@ /turf/open/floor/city/plating, /area/vtm/westfield_mall/interior/hot_ishu) "aoG" = ( -/obj/structure/table/wood, /obj/effect/spawner/random/food_or_drink/plant_produce, /obj/effect/turf_decal/siding/white, +/obj/structure/rack/fruit_stand, /turf/open/floor/city/circled, /area/vtm/interior/shop) "aoH" = ( @@ -4468,7 +4471,8 @@ "aoV" = ( /obj/structure/table/countertop/red, /obj/structure/retail/gummaguts_menu{ - pixel_y = 6 + pixel_y = 6; + dir = 1 }, /obj/effect/turf_decal/siding/dark{ dir = 10 @@ -5153,7 +5157,10 @@ /area/vtm/westfield_mall/interior/anarch) "arc" = ( /obj/structure/table, -/obj/structure/retail/flower_shop, +/obj/structure/retail/flower_shop{ + dir = 4; + icon_state = "menu" + }, /turf/open/floor/wood/smooth/old, /area/vtm/interior/shop) "ard" = ( @@ -5344,7 +5351,9 @@ /area/vtm/interior/police) "arP" = ( /obj/structure/table/wood, -/obj/structure/retail/skate_shop, +/obj/structure/retail/skate_shop{ + dir = 1 + }, /turf/open/floor/plating/concrete, /area/vtm/westfield_mall/interior/skatepark) "arQ" = ( @@ -6187,10 +6196,10 @@ /turf/open/floor/wood/smooth/old, /area/vtm/interior/mansion) "auo" = ( -/obj/effect/turf_decal/weather/dirt{ +/obj/structure/extinguisher_cabinet/directional/north, +/obj/effect/turf_decal/darkpack/dirt{ dir = 9 }, -/obj/structure/extinguisher_cabinet/directional/north, /turf/open/floor/plating/stone, /area/vtm/interior/sewer/nosferatu_town) "aup" = ( @@ -6564,12 +6573,16 @@ /area/vtm/interior/police) "avC" = ( /obj/structure/table/modern, -/obj/structure/retail/smoke_menu, +/obj/structure/retail/smoke_menu{ + dir = 1 + }, /turf/open/floor/wood/smooth/old, /area/vtm/westfield_mall/interior/smokeshop) "avD" = ( /obj/structure/table/modern, -/obj/structure/retail/smoke_menu, +/obj/structure/retail/smoke_menu{ + dir = 8 + }, /turf/open/floor/city/plating, /area/vtm/westfield_mall/interior/anarch) "avE" = ( @@ -6652,7 +6665,9 @@ /area/vtm/westfield_mall/skatepark) "avT" = ( /obj/structure/vampfence/rich, -/obj/structure/retail/black_market, +/obj/structure/retail/black_market{ + dir = 4 + }, /obj/structure/platform/lowwall/brick_old, /turf/open/floor/plating/rough, /area/vtm/interior/sewer) @@ -6825,8 +6840,8 @@ }, /obj/structure/flora/bush/sparsegrass/style_random, /obj/structure/flora/bush/style_random, -/obj/structure/railing, /obj/machinery/light/blacklight/directional/west, +/obj/structure/railing/darkpack/wood, /turf/open/misc/dirt, /area/vtm/interior/sewer/nosferatu_town) "awu" = ( @@ -7015,7 +7030,9 @@ /area/vtm/westfield_mall/interior/supply) "axe" = ( /obj/structure/table/countertop/teal, -/obj/structure/retail/deli, +/obj/structure/retail/deli{ + dir = 1 + }, /turf/open/floor/city/bacotell, /area/vtm/interior/shop) "axf" = ( @@ -9506,7 +9523,9 @@ /area/vtm/westfield_mall/interior) "aFm" = ( /obj/structure/table/countertop/teal, -/obj/structure/retail/grocery_store, +/obj/structure/retail/grocery_store{ + dir = 1 + }, /turf/open/floor/city/bacotell, /area/vtm/interior/shop) "aFn" = ( @@ -10104,7 +10123,9 @@ /area/vtm/westfield_mall/parking_lot) "aHm" = ( /obj/structure/table/wood, -/obj/structure/retail/library, +/obj/structure/retail/library{ + dir = 8 + }, /turf/open/floor/wood/smooth/old, /area/vtm/westfield_mall/interior/chantry) "aHn" = ( @@ -11359,10 +11380,14 @@ /area/vtm/westfield_mall/interior/vet_clinic) "aLB" = ( /obj/structure/retail/pharmacy{ - pixel_y = 10 + pixel_y = 10; + dir = 8 }, -/obj/structure/retail/gas_station, /obj/structure/table/countertop/black, +/obj/structure/retail/gas_station{ + dir = 8; + icon_state = "menu" + }, /turf/open/floor/wood/smooth, /area/vtm/interior/clinic) "aLC" = ( @@ -11775,7 +11800,8 @@ "aMV" = ( /obj/structure/table/countertop/bacotell, /obj/structure/retail/bacotell_menu{ - pixel_y = 6 + pixel_y = 6; + dir = 1 }, /obj/effect/turf_decal/siding/dark{ dir = 10 @@ -12429,7 +12455,9 @@ /area/vtm/westfield_mall/interior/camarilla) "aPc" = ( /obj/structure/table, -/obj/structure/retail/hardware_store, +/obj/structure/retail/hardware_store{ + dir = 4 + }, /turf/open/floor/wood/smooth/old, /area/vtm/interior/shop) "aPd" = ( @@ -12708,11 +12736,10 @@ /obj/structure/flora/bush/flowers_yw/style_random{ pixel_y = 2 }, -/obj/structure/railing, -/obj/structure/railing{ - dir = 4 - }, /obj/effect/decal/graffiti, +/obj/structure/railing/darkpack/wood{ + dir = 6 + }, /turf/open/misc/dirt, /area/vtm/interior/sewer/nosferatu_town) "aPX" = ( @@ -14012,7 +14039,8 @@ "aUr" = ( /obj/structure/table/countertop/bubway, /obj/structure/retail/bubway_menu{ - pixel_y = 6 + pixel_y = 6; + dir = 1 }, /obj/effect/turf_decal/siding/dark{ dir = 10 @@ -14516,10 +14544,10 @@ /area/vtm/westfield_mall/interior/cave) "aWe" = ( /obj/effect/decal/cleanable/trash, -/obj/effect/turf_decal/weather/dirt{ - dir = 9 - }, /obj/machinery/camera/directional/west, +/obj/effect/turf_decal/darkpack/dirt{ + dir = 1 + }, /turf/open/floor/plating/rough/cave, /area/vtm/interior/sewer/nosferatu_town) "aWf" = ( @@ -14963,7 +14991,7 @@ /turf/open/floor/city/circled/large, /area/vtm/westfield_mall/interior/foodcourt/restaurant) "aXv" = ( -/obj/effect/turf_decal/weather/dirt{ +/obj/effect/turf_decal/darkpack/dirt{ dir = 1 }, /turf/open/floor/plating/rough/cave, @@ -15100,7 +15128,7 @@ /area/vtm/westfield_mall/interior/techshop) "aXU" = ( /obj/effect/decal/cleanable/trash, -/obj/effect/turf_decal/weather/dirt{ +/obj/effect/turf_decal/darkpack/dirt{ dir = 1 }, /turf/open/floor/plating/rough/cave, @@ -15208,7 +15236,9 @@ /area/vtm/westfield_mall/interior) "aYm" = ( /obj/structure/table/wood, -/obj/structure/retail/coffee_shop, +/obj/structure/retail/coffee_shop{ + dir = 8 + }, /obj/effect/turf_decal/siding/wood/light{ dir = 4 }, @@ -15563,7 +15593,9 @@ /area/vtm/interior/police) "aZu" = ( /obj/structure/table/wood, -/obj/structure/retail/clothing_store, +/obj/structure/retail/clothing_store{ + dir = 8 + }, /turf/open/floor/wood/old, /area/vtm/westfield_mall/interior/clothing_store) "aZv" = ( @@ -16448,8 +16480,8 @@ "fSa" = ( /obj/structure/filingcabinet/chestdrawer, /obj/item/flashlight/lamp{ - pixel_x = -2; - pixel_y = 10 + pixel_x = -4; + pixel_y = 9 }, /turf/open/floor/iron/dark, /area/vtm/westfield_mall/interior/art_store) @@ -16503,7 +16535,9 @@ /area/vtm/westfield_mall/interior/law_office) "gqY" = ( /obj/structure/table/modern, -/obj/structure/retail/gun_store, +/obj/structure/retail/gun_store{ + dir = 1 + }, /turf/open/floor/wood/smooth/old, /area/vtm/westfield_mall/interior) "gra" = ( @@ -17121,6 +17155,7 @@ dir = 4 }, /obj/effect/mapping_helpers/door/access/federal, +/obj/effect/mapping_helpers/door/autoname, /turf/open/floor/iron/grimy, /area/vtm/westfield_mall/interior/art_store) "lra" = ( @@ -17819,6 +17854,10 @@ /obj/effect/mapping_helpers/door/autoname, /turf/open/floor/plating/concrete, /area/vtm/westfield_mall/interior/skatepark) +"rzY" = ( +/obj/effect/turf_decal/darkpack/dirt/corner, +/turf/open/floor/plating/rough/cave, +/area/vtm/interior/sewer/nosferatu_town) "rAl" = ( /obj/machinery/light/dim/directional/east, /turf/open/floor/carpet/darkpack/purplegold, @@ -17933,8 +17972,8 @@ /obj/item/clothing/under/rank/civilian/lawyer/bluesuit/skirt, /obj/item/clothing/under/suit/waiter, /obj/item/clothing/shoes/vampire/jackboots/work{ - pixel_x = 9; - pixel_y = 10 + pixel_x = 1; + pixel_y = 7 }, /obj/item/clothing/head/beret, /turf/open/floor/iron/dark, @@ -18170,6 +18209,10 @@ /obj/effect/decal/wallpaper/light, /turf/closed/wall/vampwall/painted, /area/vtm/westfield_mall/interior/law_office) +"uxX" = ( +/obj/structure/ladder/manhole/down, +/turf/open/floor/plating/sidewalk/poor, +/area/vtm/westfield_mall/skatepark) "uBf" = ( /obj/machinery/light/cold/directional/east, /turf/open/floor/iron/dark, @@ -23666,7 +23709,7 @@ acb aeA axQ azE -aco +ahc aPP adV azz @@ -25020,7 +25063,7 @@ auw auw auw auo -akX +rzY aLV aTj aqM @@ -27356,8 +27399,8 @@ aeW aeW aeW aeW -aeW -aeW +aVv +aVv aeW aeW aeW @@ -27508,10 +27551,10 @@ aeW aeW aeW aeW -aeW -aeW -aeW -aeW +aVv +aVv +aVv +aVv aeW aeW aeW @@ -27661,10 +27704,10 @@ aeW aeW aeW aeW -aeW -aeW -aeW -aeW +aVv +aVv +aVv +aVv aeW aeW aLD @@ -27814,11 +27857,11 @@ aeW aeW aeW aeW -aeW -aeW -aeW -aeW -aeW +aVv +aVv +aVv +aVv +aVv aLD aLD aLD @@ -27968,9 +28011,9 @@ aeW aeW aeW aeW -aeW -aeW -aeW +aVv +aVv +aVv aLD aLD aLD @@ -28122,7 +28165,7 @@ aeW aeW aeW aeW -aeW +aVv aLD aLD aLD @@ -46467,7 +46510,7 @@ adg adg aqX ahL -ahL +uxX ahL ahL aoR diff --git a/code/__DEFINES/clothing.dm b/code/__DEFINES/clothing.dm index 805d3eccb38e..c726686c0004 100644 --- a/code/__DEFINES/clothing.dm +++ b/code/__DEFINES/clothing.dm @@ -45,9 +45,9 @@ //Suit/Skirt /// Preference: Jumpsuit -#define PREF_SUIT "Jumpsuit" +#define PREF_SUIT "Suit" // DARKPACK EDIT CHANGE /// Preference: Jumpskirt -#define PREF_SKIRT "Jumpskirt" +#define PREF_SKIRT "Skirt" // DARKPACK EDIT CHANGE // Types of backpack /// Backpack type: Department themed backpack diff --git a/code/__DEFINES/~darkpack/keybindings.dm b/code/__DEFINES/~darkpack/keybindings.dm index 4205e7e62cb0..95651d835c0c 100644 --- a/code/__DEFINES/~darkpack/keybindings.dm +++ b/code/__DEFINES/~darkpack/keybindings.dm @@ -2,12 +2,12 @@ #define COMSIG_KB_HUMAN_BITE_DOWN "keybinding_human_bite_down" // Pixelshifting -#define COMSIG_KB_MOB_PIXEL_SHIFT_DOWN "keybinding_mob_pixel_shift_down" -#define COMSIG_KB_MOB_PIXEL_SHIFT_UP "keybinding_mob_pixel_shift_up" -#define COMSIG_KB_MOB_ITEM_PIXEL_SHIFT_DOWN "keybinding_mob_item_pixelshift_down" -#define COMSIG_KB_MOB_ITEM_PIXEL_SHIFT_UP "keybinding_mob_item_pixelshift_up" -#define COMSIG_KB_MOB_PIXEL_TILT_DOWN "keybinding_mob_pixeltilt_down" -#define COMSIG_KB_MOB_PIXEL_TILT_UP "keybinding_mob_pixeltilt_up" +#define COMSIG_KB_LIVING_PIXEL_SHIFT_DOWN "keybinding_living_pixel_shift_down" +#define COMSIG_KB_LIVING_PIXEL_SHIFT_UP "keybinding_living_pixel_shift_up" +#define COMSIG_KB_LIVING_ITEM_PIXEL_SHIFT_DOWN "keybinding_living_item_pixelshift_down" +#define COMSIG_KB_LIVING_ITEM_PIXEL_SHIFT_UP "keybinding_living_item_pixelshift_up" +#define COMSIG_KB_LIVING_PIXEL_TILT_DOWN "keybinding_living_pixeltilt_down" +#define COMSIG_KB_LIVING_PIXEL_TILT_UP "keybinding_living_pixeltilt_up" // LOOC #define COMSIG_KB_CLIENT_LOOC_DOWN "keybinding_client_looc_down" diff --git a/code/__DEFINES/~darkpack/storyteller_dice.dm b/code/__DEFINES/~darkpack/storyteller_dice.dm index f1ae455292c4..6364fc02fa62 100644 --- a/code/__DEFINES/~darkpack/storyteller_dice.dm +++ b/code/__DEFINES/~darkpack/storyteller_dice.dm @@ -10,6 +10,8 @@ #define ROLL_PUBLIC "public" /// Output is only shown to the roller #define ROLL_PRIVATE "private" +/// Output is shown to both the roller and the target +#define ROLL_PRIVATE_AND_TARGET "roller+target" /// Output of the roll to admins + you #define ROLL_PRIVATE_ADMIN "private+admin" /// Output of the roll to admins only diff --git a/code/_globalvars/lists/clothing.dm b/code/_globalvars/lists/clothing.dm index 92bf067e0017..93c216263607 100644 --- a/code/_globalvars/lists/clothing.dm +++ b/code/_globalvars/lists/clothing.dm @@ -1,8 +1,10 @@ GLOBAL_LIST_INIT(backpacklist, list( + /* // DARKPACK EDIT REMOVAL DBACKPACK, DDUFFELBAG, DSATCHEL, DMESSENGER, + */ GBACKPACK, GDUFFELBAG, GSATCHEL, diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index 04f7eed6098b..fe4db9796e5c 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -136,13 +136,13 @@ GLOBAL_LIST_INIT(traits_by_type, list( "STATION_TRAIT_UNIQUE_AI" = STATION_TRAIT_UNIQUE_AI, "STATION_TRAIT_UNNATURAL_ATMOSPHERE" = STATION_TRAIT_UNNATURAL_ATMOSPHERE, "STATION_TRAIT_SPIKED_DRINKS" = STATION_TRAIT_SPIKED_DRINKS, + "STATION_TRAIT_SPAWN_WEAKPOINTS" = STATION_TRAIT_SPAWN_WEAKPOINTS, "STATION_TRAIT_RED_STAR" = STATION_TRAIT_RED_STAR, // DARKPACK EDIT ADD START - CITY_TRAITS "STATION_TRAIT_WILD_MASQUERADE" = STATION_TRAIT_WILD_MASQUERADE, "STATION_TRAIT_INFESTATION" = STATION_TRAIT_INFESTATION, "STATION_TRAIT_PEST_CONTROL" = STATION_TRAIT_PEST_CONTROL, "STATION_TRAIT_STRAY_MIGRATION" = STATION_TRAIT_STRAY_MIGRATION, "STATION_TRAIT_COSPLAY_CONVENTION" = STATION_TRAIT_COSPLAY_CONVENTION, // DARKPACK EDIT ADD END - "STATION_TRAIT_SPAWN_WEAKPOINTS" = STATION_TRAIT_SPAWN_WEAKPOINTS, ), /datum/deathmatch_lobby = list( "TRAIT_DEATHMATCH_EXPLOSIVE_IMPLANTS" = TRAIT_DEATHMATCH_EXPLOSIVE_IMPLANTS, @@ -205,10 +205,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_BLOODSHOT_EYES" = TRAIT_BLOODSHOT_EYES, "TRAIT_BLOODY_MESS" = TRAIT_BLOODY_MESS, "TRAIT_BLOOD_CLANS" = TRAIT_BLOOD_CLANS, - "TRAIT_BLOOD_DRINKER" = TRAIT_BLOOD_DRINKER, // DARKPACK EDIT ADD "TRAIT_BLOOD_FOUNTAIN" = TRAIT_BLOOD_FOUNTAIN, - "TRAIT_BLOODY_LOVER" = TRAIT_BLOODY_LOVER, // DARKPACK EDIT ADD - "TRAIT_BLOODY_SUCKER" = TRAIT_BLOODY_SUCKER, // DARKPACK EDIT ADD "TRAIT_BLOOD_HUD" = TRAIT_BLOOD_HUD, "TRAIT_BLOOD_WORM_HOST" = TRAIT_BLOOD_WORM_HOST, "TRAIT_BOMBIMMUNE" = TRAIT_BOMBIMMUNE, @@ -226,7 +223,6 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_CANNOT_CRYSTALIZE" = TRAIT_CANNOT_CRYSTALIZE, "TRAIT_CANNOT_OPEN_PRESENTS" = TRAIT_CANNOT_OPEN_PRESENTS, "TRAIT_CANT_RIDE" = TRAIT_CANT_RIDE, - "TRAIT_CAN_ENTER_TORPOR" = TRAIT_CAN_ENTER_TORPOR, // DARKPACK EDIT ADD "TRAIT_CAN_GET_AI_TRACKING_MESSAGE" = TRAIT_CAN_GET_AI_TRACKING_MESSAGE, "TRAIT_CAN_HOLD_ITEMS" = TRAIT_CAN_HOLD_ITEMS, "TRAIT_CAN_MOUNT_CYBORGS" = TRAIT_CAN_MOUNT_CYBORGS, @@ -235,10 +231,8 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_CAN_STRIP" = TRAIT_CAN_STRIP, "TRAIT_CAN_THROW_ITEMS" = TRAIT_CAN_THROW_ITEMS, "TRAIT_CAN_USE_NUKE" = TRAIT_CAN_USE_NUKE, - "TRAIT_CANNOT_RESIST_MIND_CONTROL" = TRAIT_CANNOT_RESIST_MIND_CONTROL, // DARKPACK EDIT ADD "TRAIT_CATLIKE_GRACE" = TRAIT_CATLIKE_GRACE, "TRAIT_CHANGELING_HIVEMIND_MUTE" = TRAIT_CHANGELING_HIVEMIND_MUTE, - "TRAIT_CHARMER" = TRAIT_CHARMER, // DARKPACK EDIT ADD "TRAIT_CHASM_DESTROYED" = TRAIT_CHASM_DESTROYED, "TRAIT_CHEF_KISS" = TRAIT_CHEF_KISS, "TRAIT_CHUNKYFINGERS" = TRAIT_CHUNKYFINGERS, @@ -249,11 +243,9 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_CLOWN_ENJOYER" = TRAIT_CLOWN_ENJOYER, "TRAIT_CLUMSY" = TRAIT_CLUMSY, "TRAIT_COAGULATING" = TRAIT_COAGULATING, - "TRAIT_COFFIN_THERAPY" = TRAIT_COFFIN_THERAPY, // DARKPACK EDIT ADD "TRAIT_COLORBLIND" = TRAIT_COLORBLIND, "TRAIT_COMBAT_MODE_LOCK" = TRAIT_COMBAT_MODE_LOCK, "TRAIT_CONNECTED_TO_CIRCUIT" = TRAIT_CONNECTED_TO_CIRCUIT, - "TRAIT_CONSENSUAL_FEEDING_ONLY" = TRAIT_CONSENSUAL_FEEDING_ONLY, // DARKPACK EDIT ADD "TRAIT_CORPSELOCKED" = TRAIT_CORPSELOCKED, "TRAIT_CRITICAL_CONDITION" = TRAIT_CRITICAL_CONDITION, "TRAIT_CULT_HALO" = TRAIT_CULT_HALO, @@ -262,13 +254,10 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_DEAF" = TRAIT_DEAF, "TRAIT_DEATHCOMA" = TRAIT_DEATHCOMA, "TRAIT_DEFIB_BLACKLISTED" = TRAIT_DEFIB_BLACKLISTED, - "TRAIT_DEFICIENT_VITAE" = TRAIT_DEFICIENT_VITAE, // DARKPACK EDIT ADD "TRAIT_DESIGNATED_TARGET" = TRAIT_DESIGNATED_TARGET, "TRAIT_DETECTIVES_TASTE" = TRAIT_DETECTIVES_TASTE, "TRAIT_DETECT_STORM" = TRAIT_DETECT_STORM, - "TRAIT_DIABLERIE" = TRAIT_DIABLERIE, // DARKPACK EDIT ADD "TRAIT_DIAGNOSTIC_HUD" = TRAIT_DIAGNOSTIC_HUD, - "TRAIT_DISCO_DANCER" = TRAIT_DISCO_DANCER, // DARKPACK EDIT ADD "TRAIT_DISCOORDINATED_TOOL_USER" = TRAIT_DISCOORDINATED_TOOL_USER, "TRAIT_DISCO_DANCER" = TRAIT_DISCO_DANCER, "TRAIT_DISEASELIKE_SEVERITY_HIGH" = TRAIT_DISEASELIKE_SEVERITY_HIGH, @@ -293,7 +282,6 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_ELDRITCH_PAINTING_EXAMINE" = TRAIT_ELDRITCH_PAINTING_EXAMINE, "TRAIT_ELITE_CHALLENGER" = TRAIT_ELITE_CHALLENGER, "TRAIT_EMOTEMUTE" = TRAIT_EMOTEMUTE, - "TRAIT_ENHANCED_MELEE_DODGE" = TRAIT_ENHANCED_MELEE_DODGE, // DARKPACK EDIT ADD "TRAIT_ENTRAILS_READER" = TRAIT_ENTRAILS_READER, "TRAIT_EVIL" = TRAIT_EVIL, "TRAIT_EXAMINE_DEEPER_FISH" = TRAIT_EXAMINE_DEEPER_FISH, @@ -304,7 +292,6 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_EXPERT_FISHER" = TRAIT_EXPERT_FISHER, "TRAIT_EXTROVERT" = TRAIT_EXTROVERT, "TRAIT_FACE_COVERED" = TRAIT_FACE_COVERED, - "TRAIT_FAKE_SOULLESS" = TRAIT_FAKE_SOULLESS, // DARKPACK EDIT ADD "TRAIT_FAKEDEATH" = TRAIT_FAKEDEATH, "TRAIT_FASTMED" = TRAIT_FASTMED, "TRAIT_FAST_CUFFING" = TRAIT_FAST_CUFFING, @@ -312,7 +299,6 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_FAT" = TRAIT_FAT, "TRAIT_GLUTTON" = TRAIT_GLUTTON, "TRAIT_FEARLESS" = TRAIT_FEARLESS, - "TRAIT_FEEDING_RESTRICTION" = TRAIT_FEEDING_RESTRICTION, // DARKPACK EDIT ADD "TRAIT_FENCE_CLIMBER" = TRAIT_FENCE_CLIMBER, "TRAIT_FERAL_BITER" = TRAIT_FERAL_BITER, "TRAIT_FINGERPRINT_PASSTHROUGH" = TRAIT_FINGERPRINT_PASSTHROUGH, @@ -343,7 +329,6 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_GRABRESISTANCE" = TRAIT_GRABRESISTANCE, "TRAIT_GRABWEAKNESS" = TRAIT_GRABWEAKNESS, "TRAIT_GREENTEXT_CURSED" = TRAIT_GREENTEXT_CURSED, - "TRAIT_GULLET" = TRAIT_GULLET, // DARKPACK EDIT ADD "TRAIT_GUNFLIP" = TRAIT_GUNFLIP, "TRAIT_GUN_NATURAL" = TRAIT_GUN_NATURAL, "TRAIT_HALLUCINATION_IMMUNE" = TRAIT_HALLUCINATION_IMMUNE, @@ -363,12 +348,9 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_HIDE_EXTERNAL_ORGANS" = TRAIT_HIDE_EXTERNAL_ORGANS, "TRAIT_HIGH_VALUE_RANSOM" = TRAIT_HIGH_VALUE_RANSOM, "TRAIT_HOLY" = TRAIT_HOLY, - "TRAIT_HOMOSEXUAL" = TRAIT_HOMOSEXUAL, // DARKPACK EDIT ADD "TRAIT_HOPELESSLY_ADDICTED" = TRAIT_HOPELESSLY_ADDICTED, "TRAIT_HOT_SPRING_CURSED" = TRAIT_HOT_SPRING_CURSED, "TRAIT_HULK" = TRAIT_HULK, - "TRAIT_HUNGRY" = TRAIT_HUNGRY, // DARKPACK EDIT ADD - "TRAIT_HUNTED" = TRAIT_HUNTED, // DARKPACK EDIT ADD "TRAIT_HUSK" = TRAIT_HUSK, "TRAIT_HYPOTHERMIC" = TRAIT_HYPOTHERMIC, "TRAIT_ID_APPRAISER" = TRAIT_ID_APPRAISER, @@ -383,11 +365,8 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_INTROVERT" = TRAIT_INTROVERT, "TRAIT_INVISIBILITY_BLOCKED" = TRAIT_INVISIBILITY_BLOCKED, "TRAIT_INVISIBLE_MAN" = TRAIT_INVISIBLE_MAN, - "TRAIT_INVISIBLE_TO_CAMERA" = TRAIT_INVISIBLE_TO_CAMERA, // DARKPACK EDIT ADD "TRAIT_INVISIMIN" = TRAIT_INVISIMIN, "TRAIT_IN_CALL" = TRAIT_IN_CALL, - "TRAIT_IN_FRENZY" = TRAIT_IN_FRENZY, // DARKPACK EDIT ADD - "TRAIT_IRRESISTIBLE_VITAE" = TRAIT_IRRESISTIBLE_VITAE, // DARKPACK EDIT ADD "TRAIT_IS_WET" = TRAIT_IS_WET, "TRAIT_IWASBATONED" = TRAIT_IWASBATONED, "TRAIT_KISS_OF_DEATH" = TRAIT_KISS_OF_DEATH, @@ -397,13 +376,11 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_KNOW_ENGI_WIRES" = TRAIT_KNOW_ENGI_WIRES, "TRAIT_KNOW_ROBO_WIRES" = TRAIT_KNOW_ROBO_WIRES, "TRAIT_LIGHTBULB_REMOVER" = TRAIT_LIGHTBULB_REMOVER, - "TRAIT_LAZY" = TRAIT_LAZY, // DARKPACK EDIT ADD "TRAIT_LIGHT_DRINKER" = TRAIT_LIGHT_DRINKER, "TRAIT_LIGHT_STEP" = TRAIT_LIGHT_STEP, "TRAIT_LIMBATTACHMENT" = TRAIT_LIMBATTACHMENT, "TRAIT_LITERATE" = TRAIT_LITERATE, "TRAIT_LIVERLESS_METABOLISM" = TRAIT_LIVERLESS_METABOLISM, - "TRAIT_LONGER_FRENZY" = TRAIT_LONGER_FRENZY, // DARKPACK EDIT ADD "TRAIT_LOUD_BINARY" = TRAIT_LOUD_BINARY, "TRAIT_LUMINESCENT_EYES" = TRAIT_LUMINESCENT_EYES, "TRAIT_MADNESS_IMMUNE" = TRAIT_MADNESS_IMMUNE, @@ -412,8 +389,6 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_MAGICALLY_PHASED" = TRAIT_MAGICALLY_PHASED, "TRAIT_MARTIAL_ARTS_IMMUNE" = TRAIT_MARTIAL_ARTS_IMMUNE, "TRAIT_MANSUS_TOUCHED" = TRAIT_MANSUS_TOUCHED, - "TRAIT_MASQUERADE_VIOLATING_EYES" = TRAIT_MASQUERADE_VIOLATING_EYES, // DARKPACK EDIT ADD - "TRAIT_MASQUERADE_VIOLATING_FACE" = TRAIT_MASQUERADE_VIOLATING_FACE, // DARKPACK EDIT ADD "TRAIT_MEDICAL_HUD" = TRAIT_MEDICAL_HUD, "TRAIT_MEDICAL_HUD_SENSOR_ONLY" = TRAIT_MEDICAL_HUD_SENSOR_ONLY, "TRAIT_MESON_VISION" = TRAIT_MESON_VISION, @@ -497,9 +472,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_NO_WITHDRAWALS" = TRAIT_NO_WITHDRAWALS, "TRAIT_NO_ZOMBIFY" = TRAIT_NO_ZOMBIFY, "TRAIT_HIPPOCRATIC_OATH" = TRAIT_HIPPOCRATIC_OATH, - "TRAIT_NON_INT" = TRAIT_NON_INT, // DARKPACK EDIT ADD "TRAIT_NUKEIMMUNE" = TRAIT_NUKEIMMUNE, - "TRAIT_OBFUSCATED" = TRAIT_OBFUSCATED, // DARKPACK EDIT ADD "TRAIT_OFF_BALANCE_TACKLER" = TRAIT_OFF_BALANCE_TACKLER, "TRAIT_OIL_FRIED" = TRAIT_OIL_FRIED, "TRAIT_ORBITING_FORBIDDEN" = TRAIT_ORBITING_FORBIDDEN, @@ -507,14 +480,12 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_OVERWATCHED" = TRAIT_OVERWATCHED, "TRAIT_OVERWATCH_IMMUNE" = TRAIT_OVERWATCH_IMMUNE, "TRAIT_PACIFISM" = TRAIT_PACIFISM, - "TRAIT_PAINFUL_VAMPIRE_KISS" = TRAIT_PAINFUL_VAMPIRE_KISS, // DARKPACK EDIT ADD "TRAIT_PAPER_MASTER" = TRAIT_PAPER_MASTER, "TRAIT_PARALYSIS_L_ARM" = TRAIT_PARALYSIS_L_ARM, "TRAIT_PARALYSIS_L_LEG" = TRAIT_PARALYSIS_L_LEG, "TRAIT_PARALYSIS_R_ARM" = TRAIT_PARALYSIS_R_ARM, "TRAIT_PARALYSIS_R_LEG" = TRAIT_PARALYSIS_R_LEG, "TRAIT_PARROT_PERCHED" = TRAIT_PARROT_PERCHED, - "TRAIT_PASS_THROUGH_WALLS" = TRAIT_PASS_THROUGH_WALLS, // DARKPACK EDIT ADD "TRAIT_PASSTABLE" = TRAIT_PASSTABLE, "TRAIT_PASSWINDOW" = TRAIT_PASSWINDOW, "TRAIT_PERCEIVED_AS_CLOWN" = TRAIT_PERCEIVED_AS_CLOWN, @@ -545,10 +516,8 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_RECENTLY_TREATED" = TRAIT_RECENTLY_TREATED, "TRAIT_REFLECTIVE_EYES" = TRAIT_REFLECTIVE_EYES, "TRAIT_REGEN_SHIELD" = TRAIT_REGEN_SHIELD, - "TRAIT_REJECTED_BY_TECHNOLOGY" = TRAIT_REJECTED_BY_TECHNOLOGY, // DARKPACK EDIT ADD "TRAIT_RELAYING_ATTACKER" = TRAIT_RELAYING_ATTACKER, "TRAIT_REMOTE_TASTING" = TRAIT_REMOTE_TASTING, - "TRAIT_REPELLED_BY_HOLINESS" = TRAIT_REPELLED_BY_HOLINESS, // DARKPACK EDIT ADD "TRAIT_RESEARCH_SCANNER" = TRAIT_RESEARCH_SCANNER, "TRAIT_RESISTCOLD" = TRAIT_RESISTCOLD, "TRAIT_RESISTHEAT" = TRAIT_RESISTHEAT, @@ -565,7 +534,6 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_ROCK_STONER" = TRAIT_ROCK_STONER, "TRAIT_ROD_SUPLEX" = TRAIT_ROD_SUPLEX, "TRAIT_ROUGHRIDER" = TRAIT_ROUGHRIDER, - "TRAIT_RUBICON" = TRAIT_RUBICON, // DARKPACK EDIT ADD "TRAIT_SABRAGE_PRO" = TRAIT_SABRAGE_PRO, "TRAIT_SECURITY_HUD" = TRAIT_SECURITY_HUD, "TRAIT_SECURITY_HUD_ID_ONLY" = TRAIT_SECURITY_HUD_ID_ONLY, @@ -573,7 +541,6 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_SEE_WORN_COLOURS" = TRAIT_SEE_WORN_COLOURS, "TRAIT_SELF_AWARE" = TRAIT_SELF_AWARE, "TRAIT_SELF_SURGERY" = TRAIT_SELF_SURGERY, - "TRAIT_SENSITIVE_HUMANITY" = TRAIT_SENSITIVE_HUMANITY, // DARKPACK EDIT ADD "TRAIT_SETTLER" = TRAIT_SETTLER, "TRAIT_SHAPESHIFTED" = TRAIT_SHAPESHIFTED, "TRAIT_SHAVED" = TRAIT_SHAVED, @@ -607,9 +574,6 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_SPRAY_PAINTABLE" = TRAIT_SPRAY_PAINTABLE, "TRAIT_STABLEHEART" = TRAIT_STABLEHEART, "TRAIT_STABLELIVER" = TRAIT_STABLELIVER, - "TRAIT_STAKE_RESISTANT" = TRAIT_STAKE_RESISTANT, // DARKPACK EDIT ADD - "TRAIT_STAKE_IMMUNE" = TRAIT_STAKE_IMMUNE, // DARKPACK EDIT ADD - "TRAIT_STAKED" = TRAIT_STAKED, // DARKPACK EDIT ADD "TRAIT_STASIS" = TRAIT_STASIS, "TRAIT_STIMMED" = TRAIT_STIMMED, "TRAIT_STIMULATED" = TRAIT_STIMULATED, @@ -640,8 +604,6 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_THROWINGARM" = TRAIT_THROWINGARM, "TRAIT_TIME_STOP_IMMUNE" = TRAIT_TIME_STOP_IMMUNE, "TRAIT_TOO_TALL" = TRAIT_TOO_TALL, - "TRAIT_TORPOR" = TRAIT_TORPOR, // DARKPACK EDIT ADD - "TRAIT_TOUGH_FLESH" = TRAIT_TOUGH_FLESH, // DARKPACK EDIT ADD "TRAIT_TOWER_OF_BABEL" = TRAIT_TOWER_OF_BABEL, "TRAIT_TOXIMMUNE" = TRAIT_TOXIMMUNE, "TRAIT_TOXINLOVER" = TRAIT_TOXINLOVER, @@ -649,8 +611,6 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_TUMOR_SUPPRESSED" = TRAIT_TUMOR_SUPPRESSED, "TRAIT_TUMOR_SUPPRESSION" = TRAIT_TUMOR_SUPPRESSED, "TRAIT_UI_BLOCKED" = TRAIT_UI_BLOCKED, - "TRAIT_UNAGING" = TRAIT_UNAGING, // DARKPACK EDIT ADD - "TRAIT_UNBONDABLE" = TRAIT_UNBONDABLE, // DARKPACK EDIT ADD "TRAIT_UNBREAKABLE" = TRAIT_UNBREAKABLE, "TRAIT_UNCONVERTABLE" = TRAIT_UNCONVERTABLE, "TRAIT_UNDENSE" = TRAIT_UNDENSE, @@ -658,7 +618,6 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_UNINTELLIGIBLE_SPEECH" = TRAIT_UNINTELLIGIBLE_SPEECH, "TRAIT_UNKNOWN_APPEARANCE" = TRAIT_UNKNOWN_APPEARANCE, "TRAIT_UNKNOWN_VOICE" = TRAIT_UNKNOWN_VOICE, - "TRAIT_UNMASQUERADE" = TRAIT_UNMASQUERADE, // DARKPACK EDIT ADD "TRAIT_UNNATURAL_RED_GLOWY_EYES" = TRAIT_UNNATURAL_RED_GLOWY_EYES, "TRAIT_UNOBSERVANT" = TRAIT_UNOBSERVANT, "TRAIT_UNSTABLE" = TRAIT_UNSTABLE, @@ -670,16 +629,9 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_VENTCRAWLER_ALWAYS" = TRAIT_VENTCRAWLER_ALWAYS, "TRAIT_VENTCRAWLER_NUDE" = TRAIT_VENTCRAWLER_NUDE, "TRAIT_VIRUSIMMUNE" = TRAIT_VIRUSIMMUNE, - "TRAIT_VIOLATOR" = TRAIT_VIOLATOR, // DARKPACK EDIT ADD "TRAIT_VIRUS_RESISTANCE" = TRAIT_VIRUS_RESISTANCE, - "TRAIT_VITAE_ADDICTION" = TRAIT_VITAE_ADDICTION, // DARKPACK EDIT ADD "TRAIT_VOICE_MATCHES_ID" = TRAIT_VOICE_MATCHES_ID, "TRAIT_VORACIOUS" = TRAIT_VORACIOUS, - "TRAIT_VTM_CLANS" = TRAIT_VTM_CLANS, // DARKPACK EDIT ADD - "TRAIT_VTM_MORALITY" = TRAIT_VTM_MORALITY, // DARKPACK EDIT ADD - "TRAIT_WTA_GAROU_AUSPICE" = TRAIT_WTA_GAROU_AUSPICE, // DARKPACK EDIT ADD - "TRAIT_WTA_GAROU_BREED" = TRAIT_WTA_GAROU_BREED, // DARKPACK EDIT ADD - "TRAIT_WTA_GAROU_TRIBE" = TRAIT_WTA_GAROU_TRIBE, // DARKPACK EDIT ADD "TRAIT_WAS_EVOLVED" = TRAIT_WAS_EVOLVED, "TRAIT_WATER_ADAPTATION" = TRAIT_WATER_ADAPTATION, "TRAIT_WATER_HATER" = TRAIT_WATER_HATER, @@ -691,7 +643,6 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_WING_BUFFET" = TRAIT_WING_BUFFET, "TRAIT_WING_BUFFET_TIRED" = TRAIT_WING_BUFFET_TIRED, "TRAIT_WOUND_LICKER" = TRAIT_WOUND_LICKER, - "TRAIT_WYRMTAINTED" = TRAIT_WYRMTAINTED, // DARKPACK EDIT ADD "TRAIT_XENO_HOST" = TRAIT_XENO_HOST, "TRAIT_XENO_IMMUNE" = TRAIT_XENO_IMMUNE, "TRAIT_XRAY_HEARING" = TRAIT_XRAY_HEARING, @@ -713,28 +664,77 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_FAT_IGNORE_SLOWDOWN" = TRAIT_FAT_IGNORE_SLOWDOWN, "TRAIT_SPACE_ANT_IMMUNITY" = TRAIT_SPACE_ANT_IMMUNITY, "TRAIT_BRAIN_TRAUMA_IMMUNITY" = TRAIT_BRAIN_TRAUMA_IMMUNITY, + "TRAIT_NECROPOLIS_WORSHIP" = TRAIT_NECROPOLIS_WORSHIP, + "TRAIT_BLOODY_LOVER" = TRAIT_BLOODY_LOVER, // DARKPACK EDIT ADD + "TRAIT_BLOODY_SUCKER" = TRAIT_BLOODY_SUCKER, // DARKPACK EDIT ADD + "TRAIT_BLOOD_DRINKER" = TRAIT_BLOOD_DRINKER, // DARKPACK EDIT ADD "TRAIT_BLUSH_OF_HEALTH" = TRAIT_BLUSH_OF_HEALTH, // DARKPACK EDIT ADD - "TRAIT_GHOST_VISION" = TRAIT_GHOST_VISION, // DARKPACK EDIT ADD - POWERS - (Necromancy) + "TRAIT_CANNOT_RESIST_MIND_CONTROL" = TRAIT_CANNOT_RESIST_MIND_CONTROL, // DARKPACK EDIT ADD + "TRAIT_CAN_ENTER_TORPOR" = TRAIT_CAN_ENTER_TORPOR, // DARKPACK EDIT ADD + "TRAIT_CHARMER" = TRAIT_CHARMER, // DARKPACK EDIT ADD + "TRAIT_COFFIN_THERAPY" = TRAIT_COFFIN_THERAPY, // DARKPACK EDIT ADD "TRAIT_COLD_AURA" = TRAIT_COLD_AURA, // DARKPACK EDIT ADD - "TRAIT_WARM_AURA" = TRAIT_WARM_AURA, // DARKPACK EDIT ADD + "TRAIT_CONSENSUAL_FEEDING_ONLY" = TRAIT_CONSENSUAL_FEEDING_ONLY, // DARKPACK EDIT ADD + "TRAIT_DEFICIENT_VITAE" = TRAIT_DEFICIENT_VITAE, // DARKPACK EDIT ADD + "TRAIT_DIABLERIE" = TRAIT_DIABLERIE, // DARKPACK EDIT ADD + "TRAIT_DISCO_DANCER" = TRAIT_DISCO_DANCER, // DARKPACK EDIT ADD + "TRAIT_ENHANCED_MELEE_DODGE" = TRAIT_ENHANCED_MELEE_DODGE, // DARKPACK EDIT ADD + "TRAIT_FAKE_SOULLESS" = TRAIT_FAKE_SOULLESS, // DARKPACK EDIT ADD + "TRAIT_FEEDING_RESTRICTION" = TRAIT_FEEDING_RESTRICTION, // DARKPACK EDIT ADD + "TRAIT_FERA_FUR" = TRAIT_FERA_FUR, // DARKPACK EDIT ADD - WEREWOLF "TRAIT_FRENETIC_AURA" = TRAIT_FRENETIC_AURA, // DARKPACK EDIT ADD - "TRAIT_THAUMATURGY_KNOWLEDGE" = TRAIT_THAUMATURGY_KNOWLEDGE, // DARKPACK EDIT ADD - "TRAIT_VICISSITUDE_KNOWLEDGE" = TRAIT_VICISSITUDE_KNOWLEDGE, // DARKPACK EDIT ADD + "TRAIT_GHOST_VISION" = TRAIT_GHOST_VISION, // DARKPACK EDIT ADD - POWERS - (Necromancy) + "TRAIT_GULLET" = TRAIT_GULLET, // DARKPACK EDIT ADD + "TRAIT_HOMOSEXUAL" = TRAIT_HOMOSEXUAL, // DARKPACK EDIT ADD + "TRAIT_HUNGRY" = TRAIT_HUNGRY, // DARKPACK EDIT ADD + "TRAIT_HUNTED" = TRAIT_HUNTED, // DARKPACK EDIT ADD + "TRAIT_ILLEGAL_IDENTITY" = TRAIT_ILLEGAL_IDENTITY, // DARKPACK EDIT ADD - GOVERMENT + "TRAIT_INVISIBLE_TO_CAMERA" = TRAIT_INVISIBLE_TO_CAMERA, // DARKPACK EDIT ADD + "TRAIT_IN_FRENZY" = TRAIT_IN_FRENZY, // DARKPACK EDIT ADD + "TRAIT_IRRESISTIBLE_VITAE" = TRAIT_IRRESISTIBLE_VITAE, // DARKPACK EDIT ADD + "TRAIT_LAZY" = TRAIT_LAZY, // DARKPACK EDIT ADD + "TRAIT_LONGER_FRENZY" = TRAIT_LONGER_FRENZY, // DARKPACK EDIT ADD + "TRAIT_LOUD_HOWLER" = TRAIT_LOUD_HOWLER, // DARKPACK EDIT ADD - WEREWOLF + "TRAIT_MASQUERADE_VIOLATING_EYES" = TRAIT_MASQUERADE_VIOLATING_EYES, // DARKPACK EDIT ADD + "TRAIT_MASQUERADE_VIOLATING_FACE" = TRAIT_MASQUERADE_VIOLATING_FACE, // DARKPACK EDIT ADD "TRAIT_MYSTICISM_KNOWLEDGE" = TRAIT_MYSTICISM_KNOWLEDGE, // DARKPACK EDIT ADD "TRAIT_NECROMANCY_KNOWLEDGE" = TRAIT_NECROMANCY_KNOWLEDGE, // DARKPACK EDIT ADD + "TRAIT_NEEDS_BLOOD" = TRAIT_NEEDS_BLOOD, //DARKPACK EDIT ADD - Hunger and Frenzy + "TRAIT_NON_INT" = TRAIT_NON_INT, // DARKPACK EDIT ADD + "TRAIT_NO_LYING_ANGLE" = TRAIT_NO_LYING_ANGLE, // DARKPACK EDIT ADD - WEREWOLF + "TRAIT_OBFUSCATED" = TRAIT_OBFUSCATED, // DARKPACK EDIT ADD + "TRAIT_PAINFUL_VAMPIRE_KISS" = TRAIT_PAINFUL_VAMPIRE_KISS, // DARKPACK EDIT ADD "TRAIT_PASSDOOR" = TRAIT_PASSDOOR, // DARKPACK EDIT ADD - "TRAIT_TIMEWARPER" = TRAIT_TIMEWARPER, // DARKPACK EDIT ADD + "TRAIT_PASS_THROUGH_WALLS" = TRAIT_PASS_THROUGH_WALLS, // DARKPACK EDIT ADD + "TRAIT_REJECTED_BY_TECHNOLOGY" = TRAIT_REJECTED_BY_TECHNOLOGY, // DARKPACK EDIT ADD + "TRAIT_REPELLED_BY_HOLINESS" = TRAIT_REPELLED_BY_HOLINESS, // DARKPACK EDIT ADD + "TRAIT_RUBICON" = TRAIT_RUBICON, // DARKPACK EDIT ADD + "TRAIT_SENSITIVE_HUMANITY" = TRAIT_SENSITIVE_HUMANITY, // DARKPACK EDIT ADD "TRAIT_SERPENTIS_SKIN" = TRAIT_SERPENTIS_SKIN, // DARKPACK EDIT ADD - POWERS - (Serpentis) - "TRAIT_NEEDS_BLOOD" = TRAIT_NEEDS_BLOOD, //DARKPACK EDIT ADD - Hunger and Frenzy "TRAIT_SILENCED" = TRAIT_SILENCED, // DARKPACK EDIT ADD - POWERS - (Quietus) - "TRAIT_WEAK_TO_DOMINATE" = TRAIT_WEAK_TO_DOMINATE, // DARKPACK EDIT ADD - POWERS - (Dominate) - "TRAIT_ILLEGAL_IDENTITY" = TRAIT_ILLEGAL_IDENTITY, // DARKPACK EDIT ADD - GOVERMENT - "TRAIT_NO_LYING_ANGLE" = TRAIT_NO_LYING_ANGLE, // DARKPACK EDIT ADD - WEREWOLF - "TRAIT_TRANSFORM_UPDATES_ICON" = TRAIT_TRANSFORM_UPDATES_ICON, // DARKPACK EDIT ADD - WEREWOLF - "TRAIT_LOUD_HOWLER" = TRAIT_LOUD_HOWLER, // DARKPACK EDIT ADD - WEREWOLF - "TRAIT_FERA_FUR" = TRAIT_FERA_FUR, // DARKPACK EDIT ADD - WEREWOLF "TRAIT_SMALL_HANDS" = TRAIT_SMALL_HANDS, // DARKPACK EDIT ADD - WEREWOLF - "TRAIT_NECROPOLIS_WORSHIP" = TRAIT_NECROPOLIS_WORSHIP, + "TRAIT_STAKED" = TRAIT_STAKED, // DARKPACK EDIT ADDn. + "TRAIT_STAKE_IMMUNE" = TRAIT_STAKE_IMMUNE, // DARKPACK EDIT ADD + "TRAIT_STAKE_RESISTANT" = TRAIT_STAKE_RESISTANT, // DARKPACK EDIT ADD + "TRAIT_THAUMATURGY_KNOWLEDGE" = TRAIT_THAUMATURGY_KNOWLEDGE, // DARKPACK EDIT ADD + "TRAIT_TIMEWARPER" = TRAIT_TIMEWARPER, // DARKPACK EDIT ADD + "TRAIT_TORPOR" = TRAIT_TORPOR, // DARKPACK EDIT ADD + "TRAIT_TOUGH_FLESH" = TRAIT_TOUGH_FLESH, // DARKPACK EDIT ADD + "TRAIT_TRANSFORM_UPDATES_ICON" = TRAIT_TRANSFORM_UPDATES_ICON, // DARKPACK EDIT ADD - WEREWOLF + "TRAIT_UNAGING" = TRAIT_UNAGING, // DARKPACK EDIT ADD + "TRAIT_UNBONDABLE" = TRAIT_UNBONDABLE, // DARKPACK EDIT ADD + "TRAIT_UNMASQUERADE" = TRAIT_UNMASQUERADE, // DARKPACK EDIT ADD + "TRAIT_VICISSITUDE_KNOWLEDGE" = TRAIT_VICISSITUDE_KNOWLEDGE, // DARKPACK EDIT ADD + "TRAIT_VIOLATOR" = TRAIT_VIOLATOR, // DARKPACK EDIT ADD + "TRAIT_VITAE_ADDICTION" = TRAIT_VITAE_ADDICTION, // DARKPACK EDIT ADD + "TRAIT_VTM_CLANS" = TRAIT_VTM_CLANS, // DARKPACK EDIT ADD + "TRAIT_VTM_MORALITY" = TRAIT_VTM_MORALITY, // DARKPACK EDIT ADD + "TRAIT_WARM_AURA" = TRAIT_WARM_AURA, // DARKPACK EDIT ADD + "TRAIT_WEAK_TO_DOMINATE" = TRAIT_WEAK_TO_DOMINATE, // DARKPACK EDIT ADD - POWERS - (Dominate) + "TRAIT_WTA_GAROU_AUSPICE" = TRAIT_WTA_GAROU_AUSPICE, // DARKPACK EDIT ADD + "TRAIT_WTA_GAROU_BREED" = TRAIT_WTA_GAROU_BREED, // DARKPACK EDIT ADD + "TRAIT_WTA_GAROU_TRIBE" = TRAIT_WTA_GAROU_TRIBE, // DARKPACK EDIT ADD + "TRAIT_WYRMTAINTED" = TRAIT_WYRMTAINTED, // DARKPACK EDIT ADD ), /mob/living/carbon = list( "TRAIT_BRAINLESS_CARBON" = TRAIT_BRAINLESS_CARBON, diff --git a/code/_globalvars/traits/admin_tooling.dm b/code/_globalvars/traits/admin_tooling.dm index a5e9ce27bdd6..65a95b899142 100644 --- a/code/_globalvars/traits/admin_tooling.dm +++ b/code/_globalvars/traits/admin_tooling.dm @@ -355,9 +355,76 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_LEFT_EYE_SCAR" = TRAIT_LEFT_EYE_SCAR, "TRAIT_RIGHT_EYE_SCAR" = TRAIT_RIGHT_EYE_SCAR, "TRAIT_CARPOTOXIN_IMMUNE" = TRAIT_CARPOTOXIN_IMMUNE, + "TRAIT_BLOODY_LOVER" = TRAIT_BLOODY_LOVER, // DARKPACK EDIT ADD + "TRAIT_BLOODY_SUCKER" = TRAIT_BLOODY_SUCKER, // DARKPACK EDIT ADD + "TRAIT_BLOOD_DRINKER" = TRAIT_BLOOD_DRINKER, // DARKPACK EDIT ADD + "TRAIT_BLUSH_OF_HEALTH" = TRAIT_BLUSH_OF_HEALTH, // DARKPACK EDIT ADD + "TRAIT_CANNOT_RESIST_MIND_CONTROL" = TRAIT_CANNOT_RESIST_MIND_CONTROL, // DARKPACK EDIT ADD + "TRAIT_CAN_ENTER_TORPOR" = TRAIT_CAN_ENTER_TORPOR, // DARKPACK EDIT ADD + "TRAIT_CHARMER" = TRAIT_CHARMER, // DARKPACK EDIT ADD + "TRAIT_COFFIN_THERAPY" = TRAIT_COFFIN_THERAPY, // DARKPACK EDIT ADD + "TRAIT_COLD_AURA" = TRAIT_COLD_AURA, // DARKPACK EDIT ADD + "TRAIT_CONSENSUAL_FEEDING_ONLY" = TRAIT_CONSENSUAL_FEEDING_ONLY, // DARKPACK EDIT ADD + "TRAIT_DEFICIENT_VITAE" = TRAIT_DEFICIENT_VITAE, // DARKPACK EDIT ADD + "TRAIT_DIABLERIE" = TRAIT_DIABLERIE, // DARKPACK EDIT ADD + "TRAIT_DISCO_DANCER" = TRAIT_DISCO_DANCER, // DARKPACK EDIT ADD + "TRAIT_ENHANCED_MELEE_DODGE" = TRAIT_ENHANCED_MELEE_DODGE, // DARKPACK EDIT ADD + "TRAIT_FAKE_SOULLESS" = TRAIT_FAKE_SOULLESS, // DARKPACK EDIT ADD + "TRAIT_FEEDING_RESTRICTION" = TRAIT_FEEDING_RESTRICTION, // DARKPACK EDIT ADD + "TRAIT_FERA_FUR" = TRAIT_FERA_FUR, // DARKPACK EDIT ADD - WEREWOLF + "TRAIT_FRENETIC_AURA" = TRAIT_FRENETIC_AURA, // DARKPACK EDIT ADD + "TRAIT_GHOST_VISION" = TRAIT_GHOST_VISION, // DARKPACK EDIT ADD - POWERS - (Necromancy) + "TRAIT_GULLET" = TRAIT_GULLET, // DARKPACK EDIT ADD + "TRAIT_HOMOSEXUAL" = TRAIT_HOMOSEXUAL, // DARKPACK EDIT ADD + "TRAIT_HUNGRY" = TRAIT_HUNGRY, // DARKPACK EDIT ADD + "TRAIT_HUNTED" = TRAIT_HUNTED, // DARKPACK EDIT ADD + "TRAIT_ILLEGAL_IDENTITY" = TRAIT_ILLEGAL_IDENTITY, // DARKPACK EDIT ADD - GOVERMENT + "TRAIT_INVISIBLE_TO_CAMERA" = TRAIT_INVISIBLE_TO_CAMERA, // DARKPACK EDIT ADD + "TRAIT_IN_FRENZY" = TRAIT_IN_FRENZY, // DARKPACK EDIT ADD + "TRAIT_IRRESISTIBLE_VITAE" = TRAIT_IRRESISTIBLE_VITAE, // DARKPACK EDIT ADD + "TRAIT_LAZY" = TRAIT_LAZY, // DARKPACK EDIT ADD + "TRAIT_LONGER_FRENZY" = TRAIT_LONGER_FRENZY, // DARKPACK EDIT ADD + "TRAIT_LOUD_HOWLER" = TRAIT_LOUD_HOWLER, // DARKPACK EDIT ADD - WEREWOLF + "TRAIT_MASQUERADE_VIOLATING_EYES" = TRAIT_MASQUERADE_VIOLATING_EYES, // DARKPACK EDIT ADD + "TRAIT_MASQUERADE_VIOLATING_FACE" = TRAIT_MASQUERADE_VIOLATING_FACE, // DARKPACK EDIT ADD + "TRAIT_MYSTICISM_KNOWLEDGE" = TRAIT_MYSTICISM_KNOWLEDGE, // DARKPACK EDIT ADD + "TRAIT_NECROMANCY_KNOWLEDGE" = TRAIT_NECROMANCY_KNOWLEDGE, // DARKPACK EDIT ADD + "TRAIT_NEEDS_BLOOD" = TRAIT_NEEDS_BLOOD, //DARKPACK EDIT ADD - Hunger and Frenzy + "TRAIT_NON_INT" = TRAIT_NON_INT, // DARKPACK EDIT ADD + "TRAIT_NO_LYING_ANGLE" = TRAIT_NO_LYING_ANGLE, // DARKPACK EDIT ADD - WEREWOLF + "TRAIT_OBFUSCATED" = TRAIT_OBFUSCATED, // DARKPACK EDIT ADD + "TRAIT_PAINFUL_VAMPIRE_KISS" = TRAIT_PAINFUL_VAMPIRE_KISS, // DARKPACK EDIT ADD + "TRAIT_PASSDOOR" = TRAIT_PASSDOOR, // DARKPACK EDIT ADD + "TRAIT_PASS_THROUGH_WALLS" = TRAIT_PASS_THROUGH_WALLS, // DARKPACK EDIT ADD + "TRAIT_REJECTED_BY_TECHNOLOGY" = TRAIT_REJECTED_BY_TECHNOLOGY, // DARKPACK EDIT ADD + "TRAIT_REPELLED_BY_HOLINESS" = TRAIT_REPELLED_BY_HOLINESS, // DARKPACK EDIT ADD + "TRAIT_RUBICON" = TRAIT_RUBICON, // DARKPACK EDIT ADD + "TRAIT_SENSITIVE_HUMANITY" = TRAIT_SENSITIVE_HUMANITY, // DARKPACK EDIT ADD + "TRAIT_SERPENTIS_SKIN" = TRAIT_SERPENTIS_SKIN, // DARKPACK EDIT ADD - POWERS - (Serpentis) + "TRAIT_SILENCED" = TRAIT_SILENCED, // DARKPACK EDIT ADD - POWERS - (Quietus) + "TRAIT_SMALL_HANDS" = TRAIT_SMALL_HANDS, // DARKPACK EDIT ADD - WEREWOLF + "TRAIT_STAKED" = TRAIT_STAKED, // DARKPACK EDIT ADDn. + "TRAIT_STAKE_IMMUNE" = TRAIT_STAKE_IMMUNE, // DARKPACK EDIT ADD + "TRAIT_STAKE_RESISTANT" = TRAIT_STAKE_RESISTANT, // DARKPACK EDIT ADD "TRAIT_THAUMATURGY_KNOWLEDGE" = TRAIT_THAUMATURGY_KNOWLEDGE, // DARKPACK EDIT ADD + "TRAIT_TIMEWARPER" = TRAIT_TIMEWARPER, // DARKPACK EDIT ADD + "TRAIT_TORPOR" = TRAIT_TORPOR, // DARKPACK EDIT ADD + "TRAIT_TOUGH_FLESH" = TRAIT_TOUGH_FLESH, // DARKPACK EDIT ADD + "TRAIT_TRANSFORM_UPDATES_ICON" = TRAIT_TRANSFORM_UPDATES_ICON, // DARKPACK EDIT ADD - WEREWOLF + "TRAIT_UNAGING" = TRAIT_UNAGING, // DARKPACK EDIT ADD + "TRAIT_UNBONDABLE" = TRAIT_UNBONDABLE, // DARKPACK EDIT ADD + "TRAIT_UNMASQUERADE" = TRAIT_UNMASQUERADE, // DARKPACK EDIT ADD "TRAIT_VICISSITUDE_KNOWLEDGE" = TRAIT_VICISSITUDE_KNOWLEDGE, // DARKPACK EDIT ADD - "TRAIT_MYSTICISM_KNOWLEDGE" = TRAIT_MYSTICISM_KNOWLEDGE, // DARKPACK EDIT ADD + "TRAIT_VIOLATOR" = TRAIT_VIOLATOR, // DARKPACK EDIT ADD + "TRAIT_VITAE_ADDICTION" = TRAIT_VITAE_ADDICTION, // DARKPACK EDIT ADD + "TRAIT_VTM_CLANS" = TRAIT_VTM_CLANS, // DARKPACK EDIT ADD + "TRAIT_VTM_MORALITY" = TRAIT_VTM_MORALITY, // DARKPACK EDIT ADD + "TRAIT_WARM_AURA" = TRAIT_WARM_AURA, // DARKPACK EDIT ADD + "TRAIT_WEAK_TO_DOMINATE" = TRAIT_WEAK_TO_DOMINATE, // DARKPACK EDIT ADD - POWERS - (Dominate) + "TRAIT_WTA_GAROU_AUSPICE" = TRAIT_WTA_GAROU_AUSPICE, // DARKPACK EDIT ADD + "TRAIT_WTA_GAROU_BREED" = TRAIT_WTA_GAROU_BREED, // DARKPACK EDIT ADD + "TRAIT_WTA_GAROU_TRIBE" = TRAIT_WTA_GAROU_TRIBE, // DARKPACK EDIT ADD + "TRAIT_WYRMTAINTED" = TRAIT_WYRMTAINTED, // DARKPACK EDIT ADD ), /obj/item = list( "TRAIT_APC_SHOCKING" = TRAIT_APC_SHOCKING, diff --git a/code/controllers/subsystem/processing/quirks.dm b/code/controllers/subsystem/processing/quirks.dm index 99c725a7d609..63effdc09f57 100644 --- a/code/controllers/subsystem/processing/quirks.dm +++ b/code/controllers/subsystem/processing/quirks.dm @@ -68,10 +68,14 @@ PROCESSING_SUBSYSTEM_DEF(quirks) /datum/controller/subsystem/processing/quirks/proc/SetupQuirks() // Sort by Positive, Negative, Neutral; and then by name - var/list/quirk_list = sort_list(subtypesof(/datum/quirk/darkpack), GLOBAL_PROC_REF(cmp_quirk_asc)) // DARKPACK EDIT CHANGE - Original : var/list/quirk_list = sort_list(subtypesof(/datum/quirk), GLOBAL_PROC_REF(cmp_quirk_asc)) + var/list/quirk_list = sort_list(valid_subtypesof(/datum/quirk), GLOBAL_PROC_REF(cmp_quirk_asc)) // DARKPACK EDIT CHANGE - (Filter abstracts) for(var/type in quirk_list) var/datum/quirk/quirk_type = type + // DARKPACK EDIT ADD START - MERITS/FLAWS + if(!quirk_type::darkpack_allowed) + continue + // DARKPACK EDIT ADD END quirk_prototypes[type] = new type quirks[initial(quirk_type.name)] = quirk_type diff --git a/code/datums/components/crafting/crafting.dm b/code/datums/components/crafting/crafting.dm index 1eaa5f0c8663..41404e06137e 100644 --- a/code/datums/components/crafting/crafting.dm +++ b/code/datums/components/crafting/crafting.dm @@ -245,7 +245,7 @@ human_crafter = crafter if(CONFIG_GET(flag/punishing_zero_dots) && human_crafter.st_get_stat(STAT_CRAFTS) < 1) return ", you dont know how to craft!" - recipe_time = recipe_time / human_crafter.st_get_stat(STAT_CRAFTS) + recipe_time = recipe_time / max(human_crafter.st_get_stat(STAT_CRAFTS), 1) // DARKPACK EDIT ADD END if(!do_after(crafter, round(recipe_time, 0.1 SECONDS), target = crafter)) diff --git a/code/datums/mapgen/JungleGenerator.dm b/code/datums/mapgen/JungleGenerator.dm index 61c641923a10..202b4ca20dbf 100644 --- a/code/datums/mapgen/JungleGenerator.dm +++ b/code/datums/mapgen/JungleGenerator.dm @@ -6,7 +6,7 @@ var/list/possible_biomes = list( BIOME_LOW_HEAT = list( BIOME_LOW_HUMIDITY = /datum/biome/plains, - BIOME_LOWMEDIUM_HUMIDITY = /datum/biome/mudlands, + BIOME_LOWMEDIUM_HUMIDITY = /datum/biome/plains, BIOME_HIGHMEDIUM_HUMIDITY = /datum/biome/mudlands, BIOME_HIGH_HUMIDITY = /datum/biome/water ), diff --git a/code/datums/mapgen/biomes/_biome.dm b/code/datums/mapgen/biomes/_biome.dm index cf0b7afd5bc2..b9dff758f7bb 100644 --- a/code/datums/mapgen/biomes/_biome.dm +++ b/code/datums/mapgen/biomes/_biome.dm @@ -191,14 +191,14 @@ /datum/biome/plains turf_type = /turf/open/misc/grass flora_types = list( - /obj/effect/spawner/random/flora/grass = 25, - /obj/effect/spawner/random/flora/bushes = 10, + /obj/effect/spawner/random/flora/grass = 50, + /obj/effect/spawner/random/flora/bushes = 15, /obj/structure/flora/tree/vamp/pine = 1, /obj/structure/flora/rock/pile/darkpack = 1, /obj/structure/flora/rock/darkpack = 1, /obj/effect/mine/stick = 2, ) - flora_density = 60 + flora_density = 70 fauna_types = list( /mob/living/basic/butterfly = 40, /mob/living/basic/deer = 20, @@ -215,13 +215,13 @@ turf_type = /turf/open/misc/grass flora_types = list( /obj/effect/spawner/random/flora/grass = 5, - /obj/effect/spawner/random/flora/bushes = 2, + /obj/effect/spawner/random/flora/flowers = 2, /obj/structure/flora/tree/vamp/pine = 3, /obj/structure/flora/rock/pile/darkpack = 1, /obj/structure/flora/rock/darkpack = 1, /obj/effect/mine/stick = 3, ) - flora_density = 30 + flora_density = 40 fauna_types = list( /mob/living/basic/butterfly = 40, /mob/living/basic/deer = 20, @@ -235,7 +235,7 @@ fauna_density = 1 /datum/biome/jungle/deep - flora_density = 50 + flora_density = 60 /datum/biome/wasteland turf_type = /turf/open/misc/dirt diff --git a/code/datums/quirks/positive_quirks/bilingual.dm b/code/datums/quirks/positive_quirks/bilingual.dm index 991d5653741f..eadac48a96e5 100644 --- a/code/datums/quirks/positive_quirks/bilingual.dm +++ b/code/datums/quirks/positive_quirks/bilingual.dm @@ -1,12 +1,13 @@ /datum/quirk/bilingual - name = "Bilingual" + name = "Language" // DARKPACK EDIT CHANGE - MERITS/FLAWS desc = "Over the years you've picked up an extra language!" icon = FA_ICON_GLOBE - value = 4 + value = 1 // DARKPACK EDIT CHANGE - MERITS/FLAWS gain_text = span_notice("Some of the words of the people around you certainly aren't common. Good thing you studied for this.") lose_text = span_notice("You seem to have forgotten your second language.") medical_record_text = "Patient speaks multiple languages." mail_goodies = list(/obj/item/taperecorder, /obj/item/clothing/head/beret/frenchberet, /obj/item/clothing/mask/fakemoustache/italian) + darkpack_allowed = TRUE // DARKPACK EDIT ADD - MERITS/FLAWS /datum/quirk_constant_data/bilingual associated_typepath = /datum/quirk/bilingual diff --git a/code/game/objects/items/handcuffs.dm b/code/game/objects/items/handcuffs.dm index cd986a7e4517..75da4a5e2ed0 100644 --- a/code/game/objects/items/handcuffs.dm +++ b/code/game/objects/items/handcuffs.dm @@ -39,6 +39,7 @@ inhand_icon_state = "handcuff" lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' + ONFLOOR_ICON_HELPER('modular_darkpack/modules/deprecated/icons/onfloor.dmi') // DARKPACK EDIT ADD obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_HANDCUFFED throwforce = 0 @@ -179,6 +180,8 @@ */ /obj/item/restraints/handcuffs/alien icon_state = "handcuffAlien" + ONFLOOR_ICON_HELPER(null) // DARKPACK EDIT ADD + icon = 'icons/obj/weapons/restraints.dmi' // DARKPACK EDIT ADD /** * @@ -393,6 +396,8 @@ breakouttime = 45 SECONDS icon_state = "cult_shackles" flags_1 = NONE + ONFLOOR_ICON_HELPER(null) // DARKPACK EDIT ADD + icon = 'icons/obj/weapons/restraints.dmi' // DARKPACK EDIT ADD /obj/item/restraints/handcuffs/cult/on_uncuffed(datum/source, mob/living/wearer) . = ..() diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 475d6baf4a04..dd29a850e154 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -317,7 +317,7 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \ new/datum/stack_recipe("winged wooden chair", /obj/structure/chair/wood/wings, 3, time = 1 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ new/datum/stack_recipe("wooden barricade", /obj/structure/barricade/wooden, 5, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_STRUCTURE), \ new/datum/stack_recipe("wooden stairs frame", /obj/structure/stairs_frame/wood, 10, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_STRUCTURE), \ - new/datum/stack_recipe("wooden fence", /obj/structure/railing/wooden_fence, 2, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("wooden fence", /obj/structure/railing/darkpack/wood, 2, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_STRUCTURE), \ new/datum/stack_recipe("cat house", /obj/structure/cat_house, 5, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_STRUCTURE), \ new/datum/stack_recipe("coffin", /obj/structure/closet/crate/coffin, 5, time = 1.5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ new/datum/stack_recipe("book case", /obj/structure/bookcase, 4, time = 1.5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ diff --git a/code/game/objects/structures/bonfire.dm b/code/game/objects/structures/bonfire.dm index f05d8f646f4c..25f38f9c3de5 100644 --- a/code/game/objects/structures/bonfire.dm +++ b/code/game/objects/structures/bonfire.dm @@ -10,7 +10,7 @@ /obj/structure/bonfire name = "bonfire" desc = "For grilling, broiling, charring, smoking, heating, roasting, toasting, simmering, searing, melting, and occasionally burning things." - icon = 'modular_darkpack/master_files/icons/obj/service/hydroponics/equipment.dmi' // DARKPACK EDIT CHANGE + icon = 'modular_darkpack/modules/decor/icons/fires.dmi' // DARKPACK EDIT CHANGE icon_state = "bonfire" base_icon_state = "bonfire" // DARKPACK EDIT ADD light_color = LIGHT_COLOR_FIRE @@ -207,8 +207,26 @@ base_icon_state = "campfire" /obj/structure/bonfire/prelit/alt - icon_state = "campfire" + icon_state = "campfire_on_fire" base_icon_state = "campfire" + +/obj/structure/bonfire/alt2 + icon_state = "campfire_alt" + base_icon_state = "campfire_alt" + +/obj/structure/bonfire/prelit/alt2 + icon_state = "campfire_alt_on_fire" + base_icon_state = "campfire_alt" + +/obj/structure/bonfire/fire_barrel + icon_state = "fire_barrel" + base_icon_state = "fire_barrel" + density = TRUE + +/obj/structure/bonfire/prelit/fire_barrel + icon_state = "fire_barrel_on_fire" + base_icon_state = "fire_barrel" + density = TRUE // DARKPACK EDIT ADD END #undef BONFIRE_FIRE_STACK_STRENGTH diff --git a/code/game/objects/structures/ladders.dm b/code/game/objects/structures/ladders.dm index 1405f2b36d5f..20e21d7113a3 100644 --- a/code/game/objects/structures/ladders.dm +++ b/code/game/objects/structures/ladders.dm @@ -81,7 +81,7 @@ RegisterSignal(loc, COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(add_ladder_rim)) loc.add_filter(SOURCE_LADDER(ladder), 1, alpha_mask_filter( x = ladder.pixel_x + ladder.pixel_w, - y = ladder.pixel_y + ladder.pixel_z, + y = ladder.pixel_y + ladder.pixel_z + 8, // DARKPACK EDIT CHANGE render_source = "*[SOURCE_LADDER(ladder)]", flags = MASK_INVERSE, )) @@ -137,8 +137,10 @@ /obj/structure/ladder/proc/make_base_transparent() if(!SSmapping.level_trait(z, ZTRAIT_DOWN)) // Ladders which are actually teleporting you to another z level return + /* DARKPACK EDIT REMOVAL base_pixel_z = initial(base_pixel_z) + 12 pixel_z = base_pixel_z + */ new /obj/effect/abstract/ladder_hole(loc, src) /// Clears any ladder holes created by this ladder diff --git a/code/game/objects/structures/stairs.dm b/code/game/objects/structures/stairs.dm index fb1d58f0d58e..61b80bcc4fa8 100644 --- a/code/game/objects/structures/stairs.dm +++ b/code/game/objects/structures/stairs.dm @@ -27,7 +27,7 @@ /// Upstairs turf. Is observed for changes if force_open_above is TRUE (to re-open if necessary) VAR_FINAL/turf/directly_above /// If TRUE, we have left/middle/right sprites. - var/has_merged_sprites = TRUE + var/has_merged_sprites = FALSE // DARKPACK EDIT CHANGE /// Lazyassoc list of weakef to mob viewing stair indicators to their images VAR_PRIVATE/list/mob_to_image diff --git a/code/game/objects/structures/table_frames.dm b/code/game/objects/structures/table_frames.dm index 0bd0b81fe0da..40ca34fe5269 100644 --- a/code/game/objects/structures/table_frames.dm +++ b/code/game/objects/structures/table_frames.dm @@ -12,7 +12,7 @@ /obj/structure/table_frame name = "table frame" desc = "Four metal legs with four framing rods for a table. You could easily pass through this." - icon = 'icons/obj/structures.dmi' + icon = 'modular_darkpack/master_files/icons/obj/structures.dmi' // DARKPACK EDIT CHANGE icon_state = "table_frame" density = FALSE anchored = FALSE diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 8f490102cadd..e8907126282d 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -1461,7 +1461,16 @@ building = TRUE to_chat(user, span_notice("You start constructing a rack...")) // DARKPACK EDIT ADD START - var/obj/structure/rack/rack_choice = tgui_input_list(user, "Choose rack type", "Rack Choice", list(/obj/structure/rack, /obj/structure/rack/clothing, /obj/structure/rack/clothing_hanger, /obj/structure/rack/food)) + var/obj/structure/rack/rack_choice = tgui_input_list(user, "Choose rack type", "Rack Choice", list( + /obj/structure/rack, + /obj/structure/rack/clothing, + /obj/structure/rack/clothing_hanger, + /obj/structure/rack/tall/wood_shelf, + /obj/structure/rack/tall/wood_shelf/alt, + /obj/structure/rack/tall/metal_shelf, + /obj/structure/rack/tall/store_shelf, + /obj/structure/rack/tall/store_shelf_metal, + )) if(!rack_choice) return // DARKPACK EDIT ADD END diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm index 0599862a6d44..cad9cd405bc2 100644 --- a/code/modules/admin/verbs/mapping.dm +++ b/code/modules/admin/verbs/mapping.dm @@ -193,34 +193,30 @@ ADMIN_VERB(disable_communication, R_DEBUG, "Disable all communication verbs", "D else message_admins("[key_name_admin(user)] used 'Disable all communication verbs', restoring all communication methods.") +// DARKPACK EDIT CHANGE START ADMIN_VERB_VISIBILITY(create_mapping_job_icons, ADMIN_VERB_VISIBLITY_FLAG_MAPPING_DEBUG) ADMIN_VERB(create_mapping_job_icons, R_DEBUG, "Generate job landmarks icons", "Generates job starting location landmarks.", ADMIN_CATEGORY_MAPPING) var/icon/final = icon() var/mob/living/carbon/human/dummy/consistent/mannequin = new(get_turf(usr)) mannequin.setDir(SOUTH) - for(var/job_type in valid_subtypesof(/datum/job)) + for(var/job_type in valid_subtypesof(/datum/job/vampire)) var/datum/job/job_datum = SSjob.get_job_type(job_type) - switch(job_datum.title) - if(JOB_AI) - final.Insert(icon('icons/mob/silicon/ai.dmi', "ai", SOUTH, 1), JOB_AI) - if(JOB_CYBORG) - final.Insert(icon('icons/mob/silicon/robots.dmi', "robot", SOUTH, 1), JOB_CYBORG) - else - if(!job_datum.outfit) - continue - mannequin.delete_equipment() - mannequin.dress_up_as_job( - equipping = job_datum, - visual_only = TRUE, - consistent = TRUE, - ) - var/icon/job_icon = get_flat_existing_human_icon(mannequin, list(SOUTH)) - final.Insert(job_icon, job_datum.title, frame = 1) + if(!job_datum.outfit) + continue + mannequin.delete_equipment() + mannequin.dress_up_as_job( + equipping = job_datum, + visual_only = TRUE, + consistent = TRUE, + ) + var/icon/job_icon = get_flat_existing_human_icon(mannequin, list(SOUTH)) + final.Insert(job_icon, job_datum.title, frame = 1) qdel(mannequin) - //Also add the x - for(var/x_number in 1 to 4) - final.Insert(icon('icons/hud/screen_gen.dmi', "x[x_number == 1 ? "" : x_number]"), "x[x_number == 1 ? "" : x_number]") - fcopy(final, "icons/mob/landmarks.dmi") + final.Insert(icon('modular_darkpack/modules/jobs/icons/landmarks_static.dmi', "x"), "x") + final.Insert(icon('icons/hud/screen_gen.dmi', "x", "")) + + fcopy(final, "modular_darkpack/modules/jobs/icons/landmarks.dmi") +// DARKPACK EDIT CHANGE END ADMIN_VERB_VISIBILITY(debug_z_levels, ADMIN_VERB_VISIBLITY_FLAG_MAPPING_DEBUG) ADMIN_VERB(debug_z_levels, R_DEBUG, "Debug Z-Levels", "Displays a list of all z-levels and their linkages.", ADMIN_CATEGORY_MAPPING) diff --git a/code/modules/antagonists/abductor/equipment/gear/abductor_items.dm b/code/modules/antagonists/abductor/equipment/gear/abductor_items.dm index fd75708e57f1..213c6f6f257f 100644 --- a/code/modules/antagonists/abductor/equipment/gear/abductor_items.dm +++ b/code/modules/antagonists/abductor/equipment/gear/abductor_items.dm @@ -480,6 +480,8 @@ Return to step 11 of normal process."} icon_state = "cuff" // Needs sprite breakouttime = 45 SECONDS flags_1 = NONE + ONFLOOR_ICON_HELPER(null) // DARKPACK EDIT ADD + icon = 'icons/obj/weapons/restraints.dmi' // DARKPACK EDIT ADD /obj/item/restraints/handcuffs/energy/on_uncuffed(datum/source, mob/living/wearer) . = ..() diff --git a/code/modules/client/preferences/clothing.dm b/code/modules/client/preferences/clothing.dm index 50ede0ed3934..25872ba5ed4c 100644 --- a/code/modules/client/preferences/clothing.dm +++ b/code/modules/client/preferences/clothing.dm @@ -27,14 +27,16 @@ LSATCHEL, GDUFFELBAG, GMESSENGER, + /* DARKPACK EDIT REMOVAL DBACKPACK, DSATCHEL, DDUFFELBAG, DMESSENGER, + */ ) /datum/preference/choiced/backpack/create_default_value() - return DBACKPACK + return GBACKPACK // DARKPACK EDIT CHANGE /datum/preference/choiced/backpack/icon_for(value) switch (value) @@ -70,7 +72,7 @@ savefile_key = "jumpsuit_style" savefile_identifier = PREFERENCE_CHARACTER priority = PREFERENCE_PRIORITY_BODY_TYPE - main_feature_name = "Jumpsuit" + main_feature_name = "Suit or Skirt" // DARKPACK EDIT CHANGE category = PREFERENCE_CATEGORY_CLOTHING should_generate_icons = TRUE @@ -86,9 +88,9 @@ /datum/preference/choiced/jumpsuit/icon_for(value) switch (value) if (PREF_SUIT) - return /obj/item/clothing/under/color/grey + return /obj/item/clothing/under/vampire/baali // DARKPACK EDIT CHANGE if (PREF_SKIRT) - return /obj/item/clothing/under/color/jumpskirt/grey + return /obj/item/clothing/under/vampire/baali/female // DARKPACK EDIT CHANGE /datum/preference/choiced/jumpsuit/apply_to_human(mob/living/carbon/human/target, value) target.jumpsuit_style = value diff --git a/code/modules/client/preferences/middleware/quirks.dm b/code/modules/client/preferences/middleware/quirks.dm index 061ab6c4b806..92eb2bfb6cbc 100644 --- a/code/modules/client/preferences/middleware/quirks.dm +++ b/code/modules/client/preferences/middleware/quirks.dm @@ -191,13 +191,13 @@ /datum/preference_middleware/quirks/proc/get_clan_compatibility() var/list/clan_blacklist = list() - var/clan_name = preferences.read_preference(/datum/preference/choiced/vampire_clan) + var/clan_name = preferences.read_preference(/datum/preference/choiced/subsplat/vampire_clan) if(!clan_name) return clan_blacklist //clan_name is clan.name which is "Brujah" vampire clan list is "name" ("Brujah") = typepath, vampire_clans is typepath = datum. we need the datum for the id, which is... just a lowercase name... - var/datum/vampire_clan/clan = GLOB.vampire_clans[GLOB.vampire_clan_list[clan_name]] + var/datum/subsplat/vampire_clan/clan = GLOB.vampire_clans[GLOB.vampire_clan_list[clan_name]] for(var/quirk_path in SSquirks.quirk_prototypes) var/datum/quirk/quirk_prototype = SSquirks.quirk_prototypes[quirk_path] diff --git a/code/modules/mob/living/basic/basic_defense.dm b/code/modules/mob/living/basic/basic_defense.dm index 636021dac1ac..30523655e778 100644 --- a/code/modules/mob/living/basic/basic_defense.dm +++ b/code/modules/mob/living/basic/basic_defense.dm @@ -21,32 +21,122 @@ if(HAS_TRAIT(user, TRAIT_PACIFISM)) to_chat(user, span_warning("You don't want to hurt [src]!")) return TRUE - // DARKPACK EDIT CHANGE START - STORYTELLER_STATS - // ROLL TO HIT // DARKPACK TODO - // var/successes = SSroll.storyteller_roll(user.st_get_stat(STAT_DEXTERITY) + user.st_get_stat(STAT_BRAWL), 6, user) - // ROLL TO DAMAGE - var/damage_output - if(HAS_TRAIT(user, TRAIT_PERFECT_ATTACKER)) - damage_output = user.st_get_stat(STAT_STRENGTH) + if(check_block(user, 0, "[user]'s punch", UNARMED_ATTACK)) + return + + var/obj/item/bodypart/attacking_bodypart = user.get_attacking_limb(src) + if(!attacking_bodypart) + user.balloon_alert(user, "can't attack!") + return FALSE + + var/atk_verb_index = rand(1, length(attacking_bodypart.unarmed_attack_verbs)) + var/atk_verb = attacking_bodypart.unarmed_attack_verbs[atk_verb_index] + var/atk_verb_continuous = "[atk_verb]s" + if (length(attacking_bodypart.unarmed_attack_verbs_continuous) >= atk_verb_index) // Just in case + atk_verb_continuous = attacking_bodypart.unarmed_attack_verbs_continuous[atk_verb_index] + + var/atk_effect = attacking_bodypart.unarmed_attack_effect + + var/attack_roll_type = /datum/storyteller_roll/attack/punch + var/damage_roll_type = /datum/storyteller_roll/damage/punch + + var/attack_difficulty_bonus = 0 + var/attack_bonus_dice = 0 + var/damage_difficulty_bonus = 0 + var/damage_bonus_dice = 0 + + if(atk_effect == ATTACK_EFFECT_BITE) + attack_roll_type = /datum/storyteller_roll/attack/bite + damage_roll_type = /datum/storyteller_roll/damage/bite + damage_bonus_dice++ + else if(atk_effect == ATTACK_EFFECT_KICK) + attack_roll_type = /datum/storyteller_roll/attack/kick + damage_roll_type = /datum/storyteller_roll/damage/kick + damage_bonus_dice++ + + user.do_attack_animation(src, atk_effect) + + //has our src been shoved recently? If so, they're staggered and we get an easy hit. + var/staggered = has_status_effect(/datum/status_effect/staggered) + + //Someone in a grapple is much more vulnerable to being harmed by punches. + var/grappled = (pulledby && pulledby.grab_state >= GRAB_AGGRESSIVE) + + // Limb sharpness determines the type of wounds this unarmed strike could possibly roll. By default, most limbs are blunt and have no sharpness. + var/limb_sharpness = attacking_bodypart.unarmed_sharpness + + if(grappled) + var/pummel_bonus = attacking_bodypart.unarmed_pummeling_bonus + attack_bonus_dice += round(1 * pummel_bonus) + + if(body_position == LYING_DOWN) + attack_bonus_dice++ + if(staggered) + attack_bonus_dice++ + + var/attack_landed = FALSE + if(HAS_TRAIT(user, TRAIT_PERFECT_ATTACKER) || grappled) + attack_landed = TRUE else - var/datum/storyteller_roll/damage/damage_roll = new() - damage_output = damage_roll.st_roll(user, src) - var/damage = (basic_mob_flags & IMMUNE_TO_FISTS) ? 0 : damage_output TTRPG_DAMAGE // DARKPACK EDIT CHANGE - STORYTELLER_STATS + var/datum/storyteller_roll/attack/attack_roll = new attack_roll_type() + attack_roll.difficulty += attack_difficulty_bonus + if(attack_roll.st_roll(user, src, attack_bonus_dice) == ROLL_SUCCESS) + attack_landed = TRUE + + var/damage = 0 + if(attack_landed) + if(HAS_TRAIT(user, TRAIT_PERFECT_ATTACKER)) + damage = user.st_get_stat(STAT_STRENGTH) TTRPG_DAMAGE + else + var/datum/storyteller_roll/damage/damage_roll = new damage_roll_type() + damage_roll.difficulty += damage_difficulty_bonus + damage = damage_roll.st_roll(user, src, damage_bonus_dice) TTRPG_DAMAGE + damage = (basic_mob_flags & IMMUNE_TO_FISTS) ? 0 : damage + + if(damage <= 0 || !attack_landed) + playsound(loc, attacking_bodypart.unarmed_miss_sound, 25, TRUE, -1) + visible_message(span_danger("[user]'s [atk_verb] misses [src]!"), \ + span_danger("You avoid [user]'s [atk_verb]!"), span_hear("You hear a swoosh!"), COMBAT_MESSAGE_RANGE, user) + to_chat(user, span_warning("Your [atk_verb] misses [src]!")) + log_combat(user, src, "attempted to punch") + return FALSE + + var/armor_block = run_armor_check(attack_flag = MELEE) + + playsound(loc, attacking_bodypart.unarmed_attack_sound, 25, TRUE, -1) + + if(grappled && attacking_bodypart.grappled_attack_verb) + atk_verb = attacking_bodypart.grappled_attack_verb + atk_verb_continuous = attacking_bodypart.grappled_attack_verb_continuous + + visible_message(span_danger("[user] [atk_verb_continuous] [src]!"), \ + span_userdanger("[user] [atk_verb_continuous] you!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), COMBAT_MESSAGE_RANGE, user) + to_chat(user, span_danger("You [atk_verb] [src]!")) + + lastattacker = user.real_name + lastattackerckey = user.ckey + + var/attack_direction = get_dir(user, src) + var/attack_type = attacking_bodypart.attack_type + var/kicking = (atk_effect == ATTACK_EFFECT_KICK) + var/biting = (atk_effect == ATTACK_EFFECT_BITE) + + apply_damage(damage, attack_type, null, armor_block, attack_direction = attack_direction, sharpness = limb_sharpness) + if(grappled) + log_combat(user, src, "grapple punched") + else if(kicking) + log_combat(user, src, "kicked") + else if(biting) + log_combat(user, src, "bit") + else + log_combat(user, src, "punched") + + if(biting && (mob_biotypes & MOB_ORGANIC)) //Good for you. You probably just ate someone alive. + var/datum/reagents/tasty_meal = new() + tasty_meal.add_reagent(/datum/reagent/consumable/nutriment/protein, round(damage/3, 1)) + tasty_meal.trans_to(user, tasty_meal.total_volume, transferred_by = user, methods = INGEST) // DARKPACK EDIT CHANGE END - if(check_block(user, damage, "[user]'s punch", UNARMED_ATTACK, 0, BRUTE)) - return - user.do_attack_animation(src, ATTACK_EFFECT_PUNCH) - visible_message( - span_danger("[user] [response_harm_continuous] [src]!"), - span_userdanger("[user] [response_harm_continuous] you!"), - vision_distance = COMBAT_MESSAGE_RANGE, - ignored_mobs = user, - ) - to_chat(user, span_danger("You [response_harm_simple] [src]!")) - playsound(loc, attacked_sound, 25, TRUE, -1) - apply_damage(damage) - log_combat(user, src, "attacked") updatehealth() return TRUE diff --git a/code/modules/mob/living/carbon/human/_species.dm b/code/modules/mob/living/carbon/human/_species.dm index 4c2a0e8ab5ac..3b175bf89c0c 100644 --- a/code/modules/mob/living/carbon/human/_species.dm +++ b/code/modules/mob/living/carbon/human/_species.dm @@ -771,17 +771,17 @@ GLOBAL_LIST_EMPTY(features_by_species) user.do_cpr(target) +// DARKPACK EDIT CHANGE START - STORYTELLER_DICE - (This proc required a MAJOR rewrite to be more ttrpg accurate and use dice) ///This proc handles punching damage. IMPORTANT: Our owner is the TARGET and not the USER in this proc. For whatever reason... /datum/species/proc/harm(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style) if(HAS_TRAIT(user, TRAIT_PACIFISM) && !attacker_style?.pacifist_style) to_chat(user, span_warning("You don't want to harm [target]!")) return FALSE - var/obj/item/organ/brain/brain = user.get_organ_slot(ORGAN_SLOT_BRAIN) - var/obj/item/bodypart/attacking_bodypart = attacker_style?.get_attacking_limb(user, target) || brain?.get_attacking_limb(target) || user.get_active_hand() - - // Whether or not we get some protein for a successful attack. Nom. - var/biting = FALSE + var/obj/item/bodypart/attacking_bodypart = user.get_attacking_limb(target, attacker_style) + if(!attacking_bodypart) + user.balloon_alert(user, "can't attack!") + return FALSE var/atk_verb_index = rand(1, length(attacking_bodypart.unarmed_attack_verbs)) var/atk_verb = attacking_bodypart.unarmed_attack_verbs[atk_verb_index] @@ -791,20 +791,22 @@ GLOBAL_LIST_EMPTY(features_by_species) var/atk_effect = attacking_bodypart.unarmed_attack_effect + var/attack_roll_type = /datum/storyteller_roll/attack/punch + var/damage_roll_type = /datum/storyteller_roll/damage/punch + + var/attack_difficulty_bonus = 0 + var/attack_bonus_dice = 0 + var/damage_difficulty_bonus = 0 + var/damage_bonus_dice = 0 + if(atk_effect == ATTACK_EFFECT_BITE) - if(!user.is_mouth_covered(ITEM_SLOT_MASK)) - biting = TRUE - else if(user.get_active_hand()) //In the event we can't bite, emergency swap to see if we can attack with a hand. - attacking_bodypart = user.get_active_hand() - atk_verb_index = rand(1, length(attacking_bodypart.unarmed_attack_verbs)) - atk_verb = attacking_bodypart.unarmed_attack_verbs[atk_verb_index] - atk_verb_continuous = "[atk_verb]s" - if (length(attacking_bodypart.unarmed_attack_verbs_continuous) >= atk_verb_index) // Just in case - atk_verb_continuous = attacking_bodypart.unarmed_attack_verbs_continuous[atk_verb_index] - atk_effect = attacking_bodypart.unarmed_attack_effect - else //Nothing? Okay. Fail. - user.balloon_alert(user, "can't attack!") - return FALSE + attack_roll_type = /datum/storyteller_roll/attack/bite + damage_roll_type = /datum/storyteller_roll/damage/bite + damage_bonus_dice++ + else if(atk_effect == ATTACK_EFFECT_KICK) + attack_roll_type = /datum/storyteller_roll/attack/kick + damage_roll_type = /datum/storyteller_roll/damage/kick + damage_bonus_dice++ user.do_attack_animation(target, atk_effect) @@ -814,20 +816,6 @@ GLOBAL_LIST_EMPTY(features_by_species) //Someone in a grapple is much more vulnerable to being harmed by punches. var/grappled = (target.pulledby && target.pulledby.grab_state >= GRAB_AGGRESSIVE) - // DARKPACK EDIT CHANGE START - STORYTELLER_STATS - // ROLL TO HIT // DARKPACK TODO - // var/successes = SSroll.storyteller_roll(user.st_get_stat(STAT_DEXTERITY) + user.st_get_stat(STAT_BRAWL), 6, list(user), user) - // ROLL TO DAMAGE - var/damage_output - if(HAS_TRAIT(user, TRAIT_PERFECT_ATTACKER)) - damage_output = user.st_get_stat(STAT_STRENGTH) - else - var/datum/storyteller_roll/damage/damage_roll = new() - damage_output = damage_roll.st_roll(user, target) - // DARKPACK EDIT CHANGE END - - // The actual damage roll. May still be augmented by further factors. - var/damage = damage_output TTRPG_DAMAGE // DARKPACK EDIT CHANGE - STORYTELLER_STATS // Limb accuracy is used to determine miss probabilities (higher the value, the less likely you are to miss), armor penetration (if entitled) and the possible result from a stagger combo hit. var/limb_accuracy = attacking_bodypart.unarmed_effectiveness // Limb sharpness determines the type of wounds this unarmed strike could possibly roll. By default, most limbs are blunt and have no sharpness. @@ -835,11 +823,7 @@ GLOBAL_LIST_EMPTY(features_by_species) if(grappled) var/pummel_bonus = attacking_bodypart.unarmed_pummeling_bonus - damage = floor(damage * pummel_bonus) - limb_accuracy = floor(limb_accuracy * pummel_bonus) - - //Get our puncher's combined brute and burn damage. - var/puncher_brute_and_burn = (user.get_fire_loss() + user.get_brute_loss()) + attack_bonus_dice += round(1 * pummel_bonus) //Get our targets combined brute and burn damage. var/target_brute_and_burn = (target.get_fire_loss() + target.get_brute_loss()) @@ -850,32 +834,49 @@ GLOBAL_LIST_EMPTY(features_by_species) if(user_drunkenness) if(HAS_TRAIT(user, TRAIT_DRUNKEN_BRAWLER)) // Drunken brawlers only need to be intoxicated, doesn't matter how much - limb_accuracy += clamp(puncher_brute_and_burn / 2, 10, 200) - damage += damage * clamp(puncher_brute_and_burn / 100, 0.3, 2) //Basically a multiplier of how much extra damage you get based on how low your health is overall. A floor of about a 30%. + attack_bonus_dice++ + damage_bonus_dice++ var/drunken_martial_descriptor = pick("Drunken", "Intoxicated", "Tipsy", "Inebriated", "Delirious", "Day-Drinker's", "Firegut", "Blackout") atk_verb = "[drunken_martial_descriptor] [capitalize(atk_verb)]" atk_verb_continuous = "[drunken_martial_descriptor] [capitalize(atk_verb_continuous)]" else if(user_drunkenness >= 60) - limb_accuracy = -limb_accuracy // good luck landing a punch now, you drunk fuck + attack_difficulty_bonus++ // good luck landing a punch now, you drunk fuck user.adjust_disgust(5) else if(user_drunkenness >= 30) - limb_accuracy *= 1.2 user.adjust_disgust(2) // Select a zone to hit, blacklisting the part we're attacking with if we're attacking ourselves. var/hit_zone = target.get_random_valid_zone(user.zone_selected, blacklisted_parts = (user == target ? list(attacking_bodypart.body_zone) : null)) var/obj/item/bodypart/affecting = target.get_bodypart(hit_zone) - var/miss_chance = 100//calculate the odds that a punch misses entirely. considers stamina and brute damage of the puncher. punches miss by default to prevent weird cases - if(damage) // DARKPACK EDIT CHANGE - STORYTELLER_STATS - if((target.body_position == LYING_DOWN) || HAS_TRAIT(user, TRAIT_PERFECT_ATTACKER) || staggered || user_drunkenness && HAS_TRAIT(user, TRAIT_DRUNKEN_BRAWLER)) //kicks and attacks against staggered targets never miss (provided your species deals more than 0 damage). Drunken brawlers while drunk also don't miss - miss_chance = 0 + if(target.body_position == LYING_DOWN) + attack_bonus_dice++ + if(staggered) + attack_bonus_dice++ + if(user_drunkenness && HAS_TRAIT(user, TRAIT_DRUNKEN_BRAWLER)) + attack_bonus_dice++ + + var/attack_landed = FALSE + if(HAS_TRAIT(user, TRAIT_PERFECT_ATTACKER) || grappled) + attack_landed = TRUE + else + var/datum/storyteller_roll/attack/attack_roll = new attack_roll_type() + attack_roll.difficulty += attack_difficulty_bonus + if(attack_roll.st_roll(user, target, attack_bonus_dice) == ROLL_SUCCESS) + attack_landed = TRUE + + var/damage = 0 + if(attack_landed) + if(HAS_TRAIT(user, TRAIT_PERFECT_ATTACKER)) + damage = user.st_get_stat(STAT_STRENGTH) TTRPG_DAMAGE else - miss_chance = clamp(UNARMED_MISS_CHANCE_BASE - limb_accuracy + (puncher_brute_and_burn / 2), 0, UNARMED_MISS_CHANCE_MAX) //Limb miss chance + various damage. capped at 80 so there is at least a chance to land a hit. + var/datum/storyteller_roll/damage/damage_roll = new damage_roll_type() + damage_roll.difficulty += damage_difficulty_bonus + damage = damage_roll.st_roll(user, target, damage_bonus_dice) TTRPG_DAMAGE - if(!damage || !affecting || prob(miss_chance))//future-proofing for species that have 0 damage/weird cases where no zone is targeted + if(damage <= 0 || !affecting || !attack_landed) playsound(target.loc, attacking_bodypart.unarmed_miss_sound, 25, TRUE, -1) target.visible_message(span_danger("[user]'s [atk_verb] misses [target]!"), \ span_danger("You avoid [user]'s [atk_verb]!"), span_hear("You hear a swoosh!"), COMBAT_MESSAGE_RANGE, user) @@ -920,17 +921,18 @@ GLOBAL_LIST_EMPTY(features_by_species) var/attack_direction = get_dir(user, target) var/attack_type = attacking_bodypart.attack_type var/kicking = (atk_effect == ATTACK_EFFECT_KICK) - var/final_armor_block = armor_block - if(kicking || grappled) //kicks and punches when grappling bypass armor slightly. - if(damage >= 9) - target.force_say() - log_combat(user, target, grappled ? "grapple punched" : "kicked") - final_armor_block -= limb_accuracy - target.apply_damage(damage, attack_type, affecting, final_armor_block, attack_direction = attack_direction, sharpness = limb_sharpness) - else // Normal attacks do not gain the benefit of armor penetration. - target.apply_damage(damage, attack_type, affecting, armor_block, attack_direction = attack_direction, sharpness = limb_sharpness) - if(damage >= 9) - target.force_say() + var/biting = (atk_effect == ATTACK_EFFECT_BITE) + + if(damage >= 1 TTRPG_DAMAGE) + target.force_say() + target.apply_damage(damage, attack_type, affecting, armor_block, attack_direction = attack_direction, sharpness = limb_sharpness) + if(grappled) + log_combat(user, target, "grapple punched") + else if(kicking) + log_combat(user, target, "kicked") + else if(biting) + log_combat(user, target, "bit") + else log_combat(user, target, "punched") if(user != target && biting && (target.mob_biotypes & MOB_ORGANIC)) //Good for you. You probably just ate someone alive. @@ -938,24 +940,8 @@ GLOBAL_LIST_EMPTY(features_by_species) tasty_meal.add_reagent(/datum/reagent/consumable/nutriment/protein, round(damage/3, 1)) tasty_meal.trans_to(user, tasty_meal.total_volume, transferred_by = user, methods = INGEST) - SEND_SIGNAL(target, COMSIG_HUMAN_GOT_PUNCHED, user, damage, attack_type, affecting, final_armor_block, kicking, limb_sharpness) - SEND_SIGNAL(user, COMSIG_HUMAN_PUNCHED, target, damage, attack_type, affecting, final_armor_block, kicking, limb_sharpness) - - // DARKPACK EDIT ADD START - (Knockdown chance system from old harm proc) - if((target.stat != DEAD) && (!target.IsKnockdown())) - var/roll = SSroll.storyteller_roll( - dice = user.st_get_stat(STAT_STRENGTH), - difficulty = target.st_get_stat(STAT_DEXTERITY), - roller = user) - - if(roll == ROLL_SUCCESS) - target.visible_message(span_danger("[user] knocks [target] down!"), \ - span_userdanger("You're knocked down by [user]!"), \ - span_hear("You hear aggressive shuffling followed by a loud thud!"), COMBAT_MESSAGE_RANGE, user) - to_chat(user, span_danger("You knock [target] down!")) - target.apply_effect(2 SECONDS, EFFECT_KNOCKDOWN, armor_block) - log_combat(user, target, "got a stun punch with their previous punch") - // DARKPACK EDIT ADD END + SEND_SIGNAL(target, COMSIG_HUMAN_GOT_PUNCHED, user, damage, attack_type, affecting, armor_block, kicking, limb_sharpness) + SEND_SIGNAL(user, COMSIG_HUMAN_PUNCHED, target, damage, attack_type, affecting, armor_block, kicking, limb_sharpness) // If our target is staggered and has sustained enough damage, we can apply a randomly determined status effect to inflict when we punch them. // The effects are based on the punching effectiveness of our attacker. Some effects are not reachable by the average human, and require augmentation to reach or being a species with a heavy punch effectiveness. @@ -967,6 +953,7 @@ GLOBAL_LIST_EMPTY(features_by_species) var/effective_armor = max(armor_block, UNARMED_COMBO_HIT_HEALTH_BASE) - limb_accuracy if(staggered && target_brute_and_burn >= clamp(effective_armor, 0, 200)) stagger_combo(user, target, atk_verb, limb_accuracy, armor_block) +// DARKPACK EDIT CHANGE END /// Handles the stagger combo effect of our punch. Follows the same logic as the above proc, target is our owner, user is our attacker. /datum/species/proc/stagger_combo(mob/living/carbon/human/user, mob/living/carbon/human/target, atk_verb = "hit", limb_accuracy = 0, armor_block = 0) diff --git a/code/modules/paperwork/paper_cutter.dm b/code/modules/paperwork/paper_cutter.dm index 705ab33837ca..c8f4ceef5ef1 100644 --- a/code/modules/paperwork/paper_cutter.dm +++ b/code/modules/paperwork/paper_cutter.dm @@ -1,7 +1,7 @@ /obj/item/papercutter name = "paper cutter" desc = "Standard office equipment. Precisely cuts paper using a large blade." - icon = 'icons/obj/service/bureaucracy.dmi' + icon = 'modular_darkpack/modules/deprecated/icons/props.dmi' // DARKPACK EDIT CHANGE icon_state = "papercutter" force = 5 throwforce = 5 diff --git a/code/modules/surgery/bodyparts/helpers.dm b/code/modules/surgery/bodyparts/helpers.dm index c5fc38a8b6ca..bb7a93f362d9 100644 --- a/code/modules/surgery/bodyparts/helpers.dm +++ b/code/modules/surgery/bodyparts/helpers.dm @@ -132,6 +132,23 @@ return dna.species.bodypart_overrides.Copy() return ..() +// DARKPACK EDIT ADD START +/mob/proc/get_attacking_limb(atom/target, datum/martial_art/attacker_style) + RETURN_TYPE(/obj/item/bodypart) + return FALSE + +/mob/living/carbon/get_attacking_limb(atom/target, datum/martial_art/attacker_style) + var/obj/item/organ/brain/brain = get_organ_slot(ORGAN_SLOT_BRAIN) + var/obj/item/bodypart/attacking_bodypart = attacker_style?.get_attacking_limb(src, target) || brain?.get_attacking_limb(target) || get_active_hand() + + if(attacking_bodypart.unarmed_attack_effect == ATTACK_EFFECT_BITE) + if(is_mouth_covered(ITEM_SLOT_MASK)) + attacking_bodypart = get_active_hand() + + return attacking_bodypart + +// DARKPACK EDIT ADD END + ///Returns a list of all missing limbs this mob should have on them, but don't. /mob/living/carbon/proc/get_missing_limbs() as /list RETURN_TYPE(/list) diff --git a/code/modules/unit_tests/quirks.dm b/code/modules/unit_tests/quirks.dm index 3fe8c465b158..4c0c99714f69 100644 --- a/code/modules/unit_tests/quirks.dm +++ b/code/modules/unit_tests/quirks.dm @@ -86,12 +86,19 @@ // Assigning this manually as config is empty GLOB.uncommon_roundstart_languages = list(/datum/language/uncommon) - for (var/datum/quirk/darkpack/quirk_type as anything in valid_subtypesof(/datum/quirk/darkpack)) // DARKPACK EDIT CHANGE - Original: for (var/datum/quirk/quirk_type as anything in valid_subtypesof(/datum/quirk)) + for (var/datum/quirk/quirk_type as anything in valid_subtypesof(/datum/quirk)) // DARKPACK EDIT ADD START - MERITS/FLAWS - var/list/forbidden_splats_test = quirk_type.forbidden_splats - var/list/allowed_splats_test = quirk_type.allowed_splats - var/list/excluded_clans_test = quirk_type.excluded_clans - // DARKPACK EDIT ADD END - MERITS/FLAWS + if(!quirk_type::darkpack_allowed) + continue + var/list/forbidden_splats_test + var/list/allowed_splats_test + var/list/excluded_clans_test + if(ispath(quirk_type, /datum/quirk/darkpack)) + var/datum/quirk/darkpack/darkpack_quirk = quirk_type + forbidden_splats_test = darkpack_quirk.forbidden_splats + allowed_splats_test = darkpack_quirk.allowed_splats + excluded_clans_test = darkpack_quirk.excluded_clans + // DARKPACK EDIT ADD END var/mob/dead/new_player/abstract_player = allocate(/mob/dead/new_player) var/datum/client_interface/roundstart_mock_client = new() abstract_player.mock_client = roundstart_mock_client diff --git a/code/modules/unit_tests/screenshots/screenshot_antag_icons_abductor.png b/code/modules/unit_tests/screenshots/screenshot_antag_icons_abductor.png index f0c65200ba11..bd7cf6d72611 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_antag_icons_abductor.png and b/code/modules/unit_tests/screenshots/screenshot_antag_icons_abductor.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_antag_icons_bloodbrother.png b/code/modules/unit_tests/screenshots/screenshot_antag_icons_bloodbrother.png index 20e2bbf3a854..2e43f63f16a1 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_antag_icons_bloodbrother.png and b/code/modules/unit_tests/screenshots/screenshot_antag_icons_bloodbrother.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_antag_icons_headrevolutionary.png b/code/modules/unit_tests/screenshots/screenshot_antag_icons_headrevolutionary.png index ac27e523905b..bbb76e2f0a63 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_antag_icons_headrevolutionary.png and b/code/modules/unit_tests/screenshots/screenshot_antag_icons_headrevolutionary.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_antag_icons_provocateur.png b/code/modules/unit_tests/screenshots/screenshot_antag_icons_provocateur.png index ac27e523905b..bbb76e2f0a63 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_antag_icons_provocateur.png and b/code/modules/unit_tests/screenshots/screenshot_antag_icons_provocateur.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_antag_icons_wizard.png b/code/modules/unit_tests/screenshots/screenshot_antag_icons_wizard.png index c2f21160052f..6f54b8fa66ba 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_antag_icons_wizard.png and b/code/modules/unit_tests/screenshots/screenshot_antag_icons_wizard.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_antag_icons_wizardmidround.png b/code/modules/unit_tests/screenshots/screenshot_antag_icons_wizardmidround.png index c2f21160052f..6f54b8fa66ba 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_antag_icons_wizardmidround.png and b/code/modules/unit_tests/screenshots/screenshot_antag_icons_wizardmidround.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_digi_leg_test.png b/code/modules/unit_tests/screenshots/screenshot_digi_leg_test.png index 594d20ecd439..cd2bed113601 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_digi_leg_test.png and b/code/modules/unit_tests/screenshots/screenshot_digi_leg_test.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_high_luminosity_eyes_light_emissive.png b/code/modules/unit_tests/screenshots/screenshot_high_luminosity_eyes_light_emissive.png index fbfcfadc2537..d798b1dc3e1c 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_high_luminosity_eyes_light_emissive.png and b/code/modules/unit_tests/screenshots/screenshot_high_luminosity_eyes_light_emissive.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_high_luminosity_eyes_light_on.png b/code/modules/unit_tests/screenshots/screenshot_high_luminosity_eyes_light_on.png index 1b7d8f18a24f..c521268c7987 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_high_luminosity_eyes_light_on.png and b/code/modules/unit_tests/screenshots/screenshot_high_luminosity_eyes_light_on.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_abductor.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_abductor.png index 1ad767d2b642..9881af2549ee 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_abductor.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_abductor.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_android.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_android.png index 20addbcdf8ec..f1a230eefa9f 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_android.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_android.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_dullahan.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_dullahan.png index 2b9149259edd..eafcc2cb84ed 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_dullahan.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_dullahan.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_ethereal.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_ethereal.png index 06def1164125..acd5e31f6fdb 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_ethereal.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_ethereal.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_ethereal_lustrous.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_ethereal_lustrous.png index 5e827763c69f..ccf23bf4c139 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_ethereal_lustrous.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_ethereal_lustrous.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_fly.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_fly.png index 5eb33850ae42..d81f26e21cb3 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_fly.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_fly.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_ghost.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_ghost.png index c43c67f12a8b..5b08e042a023 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_ghost.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_ghost.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_golem.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_golem.png index 32b4590ff5c4..ace4897a96e3 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_golem.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_golem.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_human_felinid.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_human_felinid.png index 8d359ec7b115..319389a2ddd1 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_human_felinid.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_human_felinid.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_human_krokodil_addict.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_human_krokodil_addict.png index 06a23dff00a1..6be487b3a46c 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_human_krokodil_addict.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_human_krokodil_addict.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_human_shifter_bestial.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_human_shifter_bestial.png index 456a5ce1a860..1509dd9d172f 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_human_shifter_bestial.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_human_shifter_bestial.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_human_shifter_homid.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_human_shifter_homid.png index 18687734ab1f..6fcc3ae7c3f6 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_human_shifter_homid.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_human_shifter_homid.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_human_vampire.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_human_vampire.png index 5d0a43e88516..9874eece7a84 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_human_vampire.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_human_vampire.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_lizard_ashwalker.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_lizard_ashwalker.png index 9c05ab07e5ff..e73da136933e 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_lizard_ashwalker.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_lizard_ashwalker.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_lizard_silverscale.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_lizard_silverscale.png index f7f6ddf47d57..61c3aa6ec7b2 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_lizard_silverscale.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_lizard_silverscale.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_monkey.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_monkey.png index 5fd259a0ed4f..32ebda3ffe7a 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_monkey.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_monkey.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_mush.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_mush.png index 1985d06b1532..7543ea6e47ff 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_mush.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_mush.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_plasmaman.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_plasmaman.png index 309d1a6e8485..6c329ba0ae54 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_plasmaman.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_plasmaman.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_pod.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_pod.png index b12d5f4f72f7..929717d3c62f 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_pod.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_pod.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_shadow.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_shadow.png index 70beeb061b9f..30cc0f0c8105 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_shadow.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_shadow.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_shadow_nightmare.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_shadow_nightmare.png index 7490e063de0b..e9363c72d426 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_shadow_nightmare.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_shadow_nightmare.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_skeleton.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_skeleton.png index 54625a5dd049..09e00ce79706 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_skeleton.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_skeleton.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_zombie.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_zombie.png index 06a23dff00a1..6be487b3a46c 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_zombie.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_zombie.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_zombie_infectious.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_zombie_infectious.png index 06a23dff00a1..6be487b3a46c 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_zombie_infectious.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_zombie_infectious.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_saturnx_invisibility.png b/code/modules/unit_tests/screenshots/screenshot_saturnx_invisibility.png index 8bffe88816fc..0fc5cdc97884 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_saturnx_invisibility.png and b/code/modules/unit_tests/screenshots/screenshot_saturnx_invisibility.png differ diff --git a/html/changelogs/AutoChangeLog-pr-489.yml b/html/changelogs/AutoChangeLog-pr-489.yml deleted file mode 100644 index 55ad941befe3..000000000000 --- a/html/changelogs/AutoChangeLog-pr-489.yml +++ /dev/null @@ -1,13 +0,0 @@ -author: "FalloutFalcon" -delete-after: True -changes: - - rscadd: "Readds garou" - - rscadd: "Moon phase is calculated mostly accurately based on in-game day" - - rscadd: "Rage gained from looking at the moon is now based on phase" - - rscadd: "Howl emote that can be used by dogs, dogs (garou), or dogs (gangrel)" - - rscadd: "Re-implements 1 gift for each auspice" - - bugfix: "Blood-pool icon is properly updated when its added to you" - - admin: "Adjustments to stats and important prefs can be properly viewed in the log viewers" - - balance: "Makes generic helpers to represent \"Heal this amount of \"dots\" of damage\". Gives this to garou at 1 dot every \"turn\" (5 seconds at the time of writing)" - - balance: "Punching basic mobs and humans now calculate damage based on strength" - - balance: "W20 silver bullet handling. No agg damage in breed form. 5 bullets are a guaranteed loss of gnosis." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-542.yml b/html/changelogs/AutoChangeLog-pr-542.yml deleted file mode 100644 index b6b359cac6d3..000000000000 --- a/html/changelogs/AutoChangeLog-pr-542.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "chazzyjazzy" -delete-after: True -changes: - - code_imp: "makes the basic structure for merits and flaws" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-549.yml b/html/changelogs/AutoChangeLog-pr-549.yml deleted file mode 100644 index 504a168d77bb..000000000000 --- a/html/changelogs/AutoChangeLog-pr-549.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "chazzyjazzy, INFARED_BARON" -delete-after: True -changes: - - rscadd: "reimplements SWAT and NG ERTs with new roles" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-560.yml b/html/changelogs/AutoChangeLog-pr-560.yml new file mode 100644 index 000000000000..7113b257824a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-560.yml @@ -0,0 +1,4 @@ +author: "FalloutFalcon, INFARED_BARON, Other spriters im presently finding hard to track down" +delete-after: True +changes: + - image: "Ports alot of sprites from mojave sun, mostly fluff props" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-619.yml b/html/changelogs/AutoChangeLog-pr-619.yml deleted file mode 100644 index d7d8de36391b..000000000000 --- a/html/changelogs/AutoChangeLog-pr-619.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "FalloutFalcon" -delete-after: True -changes: - - qol: "you can set how many turns blood power is active for with right click" - - balance: "bonus to damage from bloodpower is based entirely on the stat buffs it grants" - - balance: "allows you to set buff granted by blood power according to your gen spending limit" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-637.yml b/html/changelogs/AutoChangeLog-pr-637.yml new file mode 100644 index 000000000000..4f9a6bbb2d80 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-637.yml @@ -0,0 +1,4 @@ +author: "buffyuwu" +delete-after: True +changes: + - refactor: "redesigned the phone, added texting, a settings app, etc." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-654.yml b/html/changelogs/AutoChangeLog-pr-654.yml deleted file mode 100644 index dc9b3f3305e9..000000000000 --- a/html/changelogs/AutoChangeLog-pr-654.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "FalloutFalcon" -delete-after: True -changes: - - rscadd: "Readds old interactions of Lasombra's tech bane" - - balance: "Computers require at-least 1 dot in computer to not have a do_after" - - qol: "Candles last a full hour" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-661.yml b/html/changelogs/AutoChangeLog-pr-661.yml new file mode 100644 index 000000000000..27df92ad34cc --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-661.yml @@ -0,0 +1,5 @@ +author: "chazzyjazzy" +delete-after: True +changes: + - rscadd: "Auspex Telepathy now offers the user to pick between mind reading and implanting thoughts" + - rscadd: "Adds rolls to Telepathy, reducing the free loophole to having to whisper" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-668.yml b/html/changelogs/AutoChangeLog-pr-668.yml deleted file mode 100644 index 00b829cd6c48..000000000000 --- a/html/changelogs/AutoChangeLog-pr-668.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "FalloutFalcon" -delete-after: True -changes: - - rscadd: "Particle effect when phones are ringing" - - image: "Tweaks smartphone onworld" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-671.yml b/html/changelogs/AutoChangeLog-pr-671.yml deleted file mode 100644 index 55d48c175e95..000000000000 --- a/html/changelogs/AutoChangeLog-pr-671.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "FalloutFalcon" -delete-after: True -changes: - - image: "Adds onfloors for berets" - - code_imp: "Onfloor sprites now support GAGS" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-674.yml b/html/changelogs/AutoChangeLog-pr-674.yml new file mode 100644 index 000000000000..e45628212e84 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-674.yml @@ -0,0 +1,6 @@ +author: "chazzyjazzy" +delete-after: True +changes: + - rscadd: "Presence 5 (Majesty) now grants the pacifism trait to all those affected after a timeframe based on a roll as people often use this ability to end fights" + - balance: "lowered cooldowns and duration lengths across a few Presence abilities including Summon and Majesty" + - rscdel: "Removed the 'Resist Presence' willpower roll button to nullify any use of Presence" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-675.yml b/html/changelogs/AutoChangeLog-pr-675.yml deleted file mode 100644 index ba2dac3e5a9e..000000000000 --- a/html/changelogs/AutoChangeLog-pr-675.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "FalloutFalcon" -delete-after: True -changes: - - rscadd: "Pool tables has balls and cue's that creates a little 8-Ball mini-game." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-680.yml b/html/changelogs/AutoChangeLog-pr-680.yml new file mode 100644 index 000000000000..16ae4c45db4b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-680.yml @@ -0,0 +1,6 @@ +author: "FalloutFalcon" +delete-after: True +changes: + - balance: "punching things is mostly ttrpg accurate" + - balance: "punching basic mobs has mostly the same behavior as humans" + - code_imp: "adds a dice result output for you and the target." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-681.yml b/html/changelogs/AutoChangeLog-pr-681.yml deleted file mode 100644 index db7dd41a0c28..000000000000 --- a/html/changelogs/AutoChangeLog-pr-681.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "chazzyjazzy" -delete-after: True -changes: - - rscadd: "Readds character height customization as a numerical preference slider" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-682.yml b/html/changelogs/AutoChangeLog-pr-682.yml deleted file mode 100644 index f95a381049d8..000000000000 --- a/html/changelogs/AutoChangeLog-pr-682.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "FalloutFalcon" -delete-after: True -changes: - - rscadd: "Readds the funny cardboard box waddle and sound effect" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-684.yml b/html/changelogs/AutoChangeLog-pr-684.yml deleted file mode 100644 index 37e6829e5068..000000000000 --- a/html/changelogs/AutoChangeLog-pr-684.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "FalloutFalcon" -delete-after: True -changes: - - rscadd: "re-adds reporting masquerade violations and reinforcements" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-687.yml b/html/changelogs/AutoChangeLog-pr-687.yml new file mode 100644 index 000000000000..9259434aa536 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-687.yml @@ -0,0 +1,4 @@ +author: "FalloutFalcon" +delete-after: True +changes: + - refactor: "Subtypes vampire clans under the same type as werewolf tribes, auspices, and breeds." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-678.yml b/html/changelogs/AutoChangeLog-pr-706.yml similarity index 54% rename from html/changelogs/AutoChangeLog-pr-678.yml rename to html/changelogs/AutoChangeLog-pr-706.yml index 7af55ea813c0..64190b45db79 100644 --- a/html/changelogs/AutoChangeLog-pr-678.yml +++ b/html/changelogs/AutoChangeLog-pr-706.yml @@ -1,4 +1,4 @@ author: "FalloutFalcon" delete-after: True changes: - - bugfix: "Fixes final death sprite issue" \ No newline at end of file + - rscadd: "Readds Language quirk" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-707.yml b/html/changelogs/AutoChangeLog-pr-707.yml new file mode 100644 index 000000000000..41165841ebd6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-707.yml @@ -0,0 +1,4 @@ +author: "FalloutFalcon" +delete-after: True +changes: + - admin: "darkpack traits can properly be added to mobs as an admin" \ No newline at end of file diff --git a/html/changelogs/archive/2026-02.yml b/html/changelogs/archive/2026-02.yml index b6ddf6665193..3d32fc2d2577 100644 --- a/html/changelogs/archive/2026-02.yml +++ b/html/changelogs/archive/2026-02.yml @@ -99,3 +99,47 @@ - rscadd: PSG1 magazine and ammo - code_imp: gun code organization - rscadd: undense bin +2026-02-23: + FalloutFalcon: + - bugfix: Fixes final death sprite issue + - rscadd: Readds the funny cardboard box waddle and sound effect + - rscadd: Readds old interactions of Lasombra's tech bane + - balance: Computers require at-least 1 dot in computer to not have a do_after + - qol: Candles last a full hour + - rscadd: Pool tables has balls and cue's that creates a little 8-Ball mini-game. + - rscadd: re-adds reporting masquerade violations and reinforcements + - qol: you can set how many turns blood power is active for with right click + - balance: bonus to damage from bloodpower is based entirely on the stat buffs it + grants + - balance: allows you to set buff granted by blood power according to your gen spending + limit + - image: Swaps backpacks to the old vtm sprites + - bugfix: Snapping sticks trigger on botch + - rscadd: Particle effect when phones are ringing + - image: Tweaks smartphone onworld + - bugfix: Pixel shifting is no longer fucked + - rscadd: Readds garou + - rscadd: Moon phase is calculated mostly accurately based on in-game day + - rscadd: Rage gained from looking at the moon is now based on phase + - rscadd: Howl emote that can be used by dogs, dogs (garou), or dogs (gangrel) + - rscadd: Re-implements 1 gift for each auspice + - bugfix: Blood-pool icon is properly updated when its added to you + - admin: Adjustments to stats and important prefs can be properly viewed in the + log viewers + - balance: Makes generic helpers to represent "Heal this amount of "dots" of damage". + Gives this to garou at 1 dot every "turn" (5 seconds at the time of writing) + - balance: Punching basic mobs and humans now calculate damage based on strength + - balance: W20 silver bullet handling. No agg damage in breed form. 5 bullets are + a guaranteed loss of gnosis. + - bugfix: fixed infinite crafting recursion + - image: Adds onfloors for berets + - code_imp: Onfloor sprites now support GAGS + - balance: whispering does not break obfuscate + SELFHELL: + - bugfix: Necromancy tomes will properly spawn for Capo/La Squadra Roles + - rscadd: Unique SWAT Helmets + Armor + chazzyjazzy: + - rscadd: Readds character height customization as a numerical preference slider + - code_imp: makes the basic structure for merits and flaws + chazzyjazzy, INFARED_BARON: + - rscadd: reimplements SWAT and NG ERTs with new roles diff --git a/icons/mob/landmarks.dmi b/icons/mob/landmarks.dmi index 9a0b54af275d..7d1253b14934 100644 Binary files a/icons/mob/landmarks.dmi and b/icons/mob/landmarks.dmi differ diff --git a/icons/obj/storage/backpack.dmi b/icons/obj/storage/backpack.dmi index d464ee689faa..0603bbf44c0c 100644 Binary files a/icons/obj/storage/backpack.dmi and b/icons/obj/storage/backpack.dmi differ diff --git a/modular_darkpack/master_files/code/datums/quirks/_quirk.dm b/modular_darkpack/master_files/code/datums/quirks/_quirk.dm new file mode 100644 index 000000000000..9bc8517ac97f --- /dev/null +++ b/modular_darkpack/master_files/code/datums/quirks/_quirk.dm @@ -0,0 +1,2 @@ +/datum/quirk + var/darkpack_allowed = FALSE // MERITS/FLAWS diff --git a/modular_darkpack/master_files/code/game/objects/items/storage/backpack.dm b/modular_darkpack/master_files/code/game/objects/items/storage/backpack.dm new file mode 100644 index 000000000000..b16709e2dceb --- /dev/null +++ b/modular_darkpack/master_files/code/game/objects/items/storage/backpack.dm @@ -0,0 +1,4 @@ +/obj/item/storage/backpack + icon = 'modular_darkpack/master_files/icons/obj/storage/backpack.dmi' + ONFLOOR_ICON_HELPER('modular_darkpack/master_files/icons/obj/storage/backpack_onfloor.dmi') + worn_icon = 'modular_darkpack/master_files/icons/mob/clothing/back/backpack.dmi' diff --git a/modular_darkpack/master_files/code/game/objects/structures/ladders.dm b/modular_darkpack/master_files/code/game/objects/structures/ladders.dm index cbb609deca03..ad2236881498 100644 --- a/modular_darkpack/master_files/code/game/objects/structures/ladders.dm +++ b/modular_darkpack/master_files/code/game/objects/structures/ladders.dm @@ -1,4 +1,5 @@ /obj/structure/ladder + icon = 'modular_darkpack/modules/z_travel/icons/ladders.dmi' /// Played after the do_after is finished var/travel_sound // Requires a sister ladder to link up with us else we runtime diff --git a/modular_darkpack/master_files/icons/mob/clothing/back/backpack.dmi b/modular_darkpack/master_files/icons/mob/clothing/back/backpack.dmi new file mode 100644 index 000000000000..3c3b4e2817e1 Binary files /dev/null and b/modular_darkpack/master_files/icons/mob/clothing/back/backpack.dmi differ diff --git a/modular_darkpack/master_files/icons/obj/lighting_onfoor.dmi b/modular_darkpack/master_files/icons/obj/lighting_onfoor.dmi index ad8f0e0308f1..f85296b8f508 100644 Binary files a/modular_darkpack/master_files/icons/obj/lighting_onfoor.dmi and b/modular_darkpack/master_files/icons/obj/lighting_onfoor.dmi differ diff --git a/modular_darkpack/master_files/icons/obj/service/hydroponics/equipment.dmi b/modular_darkpack/master_files/icons/obj/service/hydroponics/equipment.dmi deleted file mode 100644 index 405cb37835a6..000000000000 Binary files a/modular_darkpack/master_files/icons/obj/service/hydroponics/equipment.dmi and /dev/null differ diff --git a/modular_darkpack/master_files/icons/obj/storage/backpack.dmi b/modular_darkpack/master_files/icons/obj/storage/backpack.dmi new file mode 100644 index 000000000000..6b185e096603 Binary files /dev/null and b/modular_darkpack/master_files/icons/obj/storage/backpack.dmi differ diff --git a/modular_darkpack/master_files/icons/obj/storage/backpack_onfloor.dmi b/modular_darkpack/master_files/icons/obj/storage/backpack_onfloor.dmi new file mode 100644 index 000000000000..3193ecf47308 Binary files /dev/null and b/modular_darkpack/master_files/icons/obj/storage/backpack_onfloor.dmi differ diff --git a/modular_darkpack/master_files/icons/obj/structures.dmi b/modular_darkpack/master_files/icons/obj/structures.dmi index 19d5a5b90fcf..6abb55f17356 100644 Binary files a/modular_darkpack/master_files/icons/obj/structures.dmi and b/modular_darkpack/master_files/icons/obj/structures.dmi differ diff --git a/modular_darkpack/modules/clothes/icons/clothing_onfloor.dmi b/modular_darkpack/modules/clothes/icons/clothing_onfloor.dmi index c7f87b733003..a9dc58f1ef66 100644 Binary files a/modular_darkpack/modules/clothes/icons/clothing_onfloor.dmi and b/modular_darkpack/modules/clothes/icons/clothing_onfloor.dmi differ diff --git a/modular_darkpack/modules/clothes/icons/worn.dmi b/modular_darkpack/modules/clothes/icons/worn.dmi index 2f94c37b3afc..a74dd40acb18 100644 Binary files a/modular_darkpack/modules/clothes/icons/worn.dmi and b/modular_darkpack/modules/clothes/icons/worn.dmi differ diff --git a/modular_darkpack/modules/decor/code/decor.dm b/modular_darkpack/modules/decor/code/decor.dm index 9e2303d42538..c08764aaa47b 100644 --- a/modular_darkpack/modules/decor/code/decor.dm +++ b/modular_darkpack/modules/decor/code/decor.dm @@ -501,14 +501,13 @@ /obj/structure/fire_barrel name = "barrel" desc = "Some kind of light and warm source..." - icon = 'modular_darkpack/modules/decor/icons/barrels.dmi' - icon_state = "firebarrel" + icon = 'modular_darkpack/modules/decor/icons/fires.dmi' + icon_state = "fire_barrel_on_fire" anchored = TRUE density = TRUE - -/obj/structure/fire_barrel/Initialize(mapload) - . = ..() - set_light(3, 2, "#ffa800") + light_range = 3 + light_power = 2 + light_color = "#ffa800" /obj/structure/fountain name = "fountain" @@ -547,7 +546,7 @@ name = "hide carpet" pixel_w = -16 pixel_z = -16 - icon = 'modular_darkpack/modules/deprecated/icons/64x64.dmi' + icon = 'modular_darkpack/modules/decor/icons/rugs64x64.dmi' icon_state = "kopatich" /obj/effect/decal/baalirune @@ -637,7 +636,7 @@ name = "carpet" pixel_w = -16 pixel_z = -16 - icon = 'modular_darkpack/modules/deprecated/icons/64x64.dmi' + icon = 'modular_darkpack/modules/decor/icons/rugs64x64.dmi' icon_state = "kover" /obj/structure/bury_pit diff --git a/modular_darkpack/modules/decor/code/flora.dm b/modular_darkpack/modules/decor/code/flora.dm index a2d95a2412c1..20ecf6d5e73e 100644 --- a/modular_darkpack/modules/decor/code/flora.dm +++ b/modular_darkpack/modules/decor/code/flora.dm @@ -203,5 +203,55 @@ /obj/structure/flora/bush/lavendergrass/style_random = 1, /obj/structure/flora/bush/flowers_yw/style_random = 1, /obj/structure/flora/bush/flowers_br/style_random = 1, - /obj/structure/flora/bush/flowers_pp/style_random = 1 + /obj/structure/flora/bush/flowers_pp/style_random = 1, + /obj/effect/spawner/random/flora/flowers/unique = 1, ) + +/obj/effect/spawner/random/flora/flowers/unique + loot = list( + /obj/structure/flora/darkpack_flower/marigold, + /obj/structure/flora/darkpack_flower/flax, + /obj/structure/flora/darkpack_flower/bluestar, + /obj/structure/flora/darkpack_flower/primrose, + /obj/structure/flora/darkpack_flower/turtleback, + /obj/structure/flora/darkpack_flower/yerba, + /obj/structure/flora/darkpack_flower/paintbrush + ) + +/obj/structure/flora/darkpack_flower + icon = 'modular_darkpack/modules/decor/icons/flowers.dmi' + desc = "A common wildflower." + abstract_type = /obj/structure/flora/darkpack_flower + flora_flags = FLORA_HERBAL + +/obj/structure/flora/darkpack_flower/Initialize(mapload) + . = ..() + AddElement(/datum/element/swaying, sway_angle = 4, sway_time = 2 SECONDS) + +/obj/structure/flora/darkpack_flower/marigold + name = "marigold" + icon_state = "marigold" + +/obj/structure/flora/darkpack_flower/flax + name = "prairie flax" + icon_state = "prairie_flax" + +/obj/structure/flora/darkpack_flower/bluestar + name = "wooly bluestar" + icon_state = "wooly_bluestar" + +/obj/structure/flora/darkpack_flower/primrose + name = "evening primrose" + icon_state = "evening_primrose" + +/obj/structure/flora/darkpack_flower/turtleback + name = "velvet turtleback" + icon_state = "velvet_turtleback" + +/obj/structure/flora/darkpack_flower/yerba + name = "yerba mansa" + icon_state = "yerba_mansa" + +/obj/structure/flora/darkpack_flower/paintbrush + name = "indian paintbrush" + icon_state = "indian_paintbrush" diff --git a/modular_darkpack/modules/decor/code/racks.dm b/modular_darkpack/modules/decor/code/racks.dm index bf2b3d64f9a3..a94250fd566a 100644 --- a/modular_darkpack/modules/decor/code/racks.dm +++ b/modular_darkpack/modules/decor/code/racks.dm @@ -1,7 +1,7 @@ /obj/structure/rack/clothing name = "clothing rack" desc = "Have some clothes." - icon = 'modular_darkpack/modules/deprecated/icons/props.dmi' + icon = 'modular_darkpack/modules/decor/icons/rack.dmi' icon_state = "rack" /obj/structure/rack/clothing/rand @@ -15,7 +15,7 @@ /obj/structure/rack/clothing_hanger name = "clothing hanger" desc = "Have some clothes." - icon = 'modular_darkpack/modules/deprecated/icons/props.dmi' + icon = 'modular_darkpack/modules/decor/icons/rack.dmi' icon_state = "hanger1" /obj/structure/rack/clothing_hanger/rand @@ -25,7 +25,13 @@ . = ..() icon_state = "hanger[rand(1, 4)]" +/obj/structure/rack/fruit_stand + name = "frust stand" + icon = 'modular_darkpack/modules/decor/icons/rack.dmi' + icon_state = "fruit_stand" + +// Soft deprecated. /obj/structure/rack/food name = "food rack" desc = "Have some food." @@ -39,3 +45,65 @@ /obj/structure/rack/food/rand/Initialize(mapload) . = ..() icon_state = "rack[rand(1, 5)]" + + +/obj/structure/rack/tall + abstract_type = /obj/structure/rack/tall + icon_state = null + icon = 'modular_darkpack/modules/decor/icons/rack32x64.dmi' + +/obj/structure/rack/tall/wood_shelf + icon_state = "wood_shelf" + +/obj/structure/rack/tall/wood_shelf/alt + icon_state = "wood_shelf-alt" + +/obj/structure/rack/tall/metal_shelf + icon_state = "metal_shelf" + +/obj/structure/rack/tall/store_shelf + icon_state = "store_shelf" + +/obj/structure/rack/tall/store_shelf_metal + icon_state = "store_shelf_metal" + + +/obj/structure/rack/wide + icon_state = null + icon = 'modular_darkpack/modules/decor/icons/rack64x64.dmi' + abstract_type = /obj/structure/rack/wide + + +/obj/structure/rack/wide/Initialize(mapload) + . = ..() + switch(dir) + if(SOUTH, NORTH) + bound_width = 64 + bound_height = 32 + if(EAST, WEST) + bound_width = 32 + bound_height = 64 + +/obj/structure/rack/wide/clothing_rack + icon_state = "clothing_rack" + +/obj/structure/rack/wide/metal_shelf + icon_state = "metal_shelf" + +/obj/structure/rack/wide/wood_shelf + icon_state = "wood_shelf" + +/obj/structure/rack/wide/wood_shelf/alt + icon_state = "wood_shelf-alt" + +/obj/structure/rack/wide/store_shelf + icon_state = "store_shelf" + +/obj/structure/rack/wide/med_shelf + icon_state = "med_shelf" + +/obj/structure/rack/wide/wood_shelf_big + icon_state = "wood_shelf_big" + +/obj/structure/rack/wide/showcase + icon_state = "showcase" diff --git a/modular_darkpack/modules/decor/code/railing.dm b/modular_darkpack/modules/decor/code/railing.dm new file mode 100644 index 000000000000..482cd870d68a --- /dev/null +++ b/modular_darkpack/modules/decor/code/railing.dm @@ -0,0 +1,56 @@ +/obj/structure/railing/darkpack + icon_state = null + icon = 'modular_darkpack/modules/decor/icons/railings.dmi' + abstract_type = /obj/structure/railing/darkpack + +/obj/structure/railing/darkpack/metal + name = "guard rail" + desc = "A sturdy rail setup with multiple functions, including but not limited to: ensuring you dont fly off the top of a four story tall building" + icon_state = "civ_full" + +/obj/structure/railing/darkpack/metal/solo + icon_state = "civ_solo" + +/obj/structure/railing/darkpack/metal/industrial + desc = "A sturdy rail setup with multiple functions, including but not limited to: ensuring you dont fly off the top of a four story tall building. It's got a slick orange taint, so you know it's to workplace regulations." + icon_state = "indus_full" + +/obj/structure/railing/darkpack/metal/industrial/solo + icon_state = "indus_solo" + +/obj/structure/railing/darkpack/sewer + name = "guard rail" + desc = "A rusty guard rail used to prevent you from falling into the region's sewage. Thank the lord it's there." + icon_state = "railings_sewer" + +/obj/structure/railing/darkpack/wood + name = "wooden fence" + desc = "A classic wooden fence. It doesn't get more homely than this." + icon_state = "wood_full" + base_icon_state = "wood_full" + item_deconstruct = /obj/item/stack/sheet/mineral/wood + custom_materials = list(/datum/material/wood = SHEET_MATERIAL_AMOUNT * 2) + +/obj/structure/railing/darkpack/wood/Initialize(mapload) + . = ..() + if(check_holidays(FESTIVE_SEASON)) + var/area/my_area = get_area(src) + if(istype(my_area) && my_area.outdoors) + icon_state = "[base_icon_state]_snow" + +/obj/structure/railing/darkpack/wood/ending + icon_state = "wood_end" + base_icon_state = "wood_end" + +/obj/structure/railing/darkpack/wood/single + icon_state = "wood_solo" + base_icon_state = "wood_solo" + +/obj/structure/railing/darkpack/wood/snow + icon_state = "wood_snow_full" + +/obj/structure/railing/darkpack/wood/snow/ending + icon_state = "wood_snow_end" + +/obj/structure/railing/darkpack/wood/snow/single + icon_state = "wood_snow_solo" diff --git a/modular_darkpack/modules/decor/code/stick.dm b/modular_darkpack/modules/decor/code/stick.dm index e068f41a54ac..1d8ae1f18702 100644 --- a/modular_darkpack/modules/decor/code/stick.dm +++ b/modular_darkpack/modules/decor/code/stick.dm @@ -46,7 +46,7 @@ var/datum/storyteller_roll/step_roll = new() step_roll.applicable_stats = list(STAT_PERCEPTION, STAT_STEALTH) var/roll_result = step_roll.st_roll(triggerer, src) - if(!roll_result == ROLL_SUCCESS) + if(roll_result != ROLL_SUCCESS) mineEffect(triggerer) if(isitem(triggerer)) diff --git a/modular_darkpack/modules/decor/icons/barrels.dmi b/modular_darkpack/modules/decor/icons/barrels.dmi index dded7dffd318..0d09e73dae18 100644 Binary files a/modular_darkpack/modules/decor/icons/barrels.dmi and b/modular_darkpack/modules/decor/icons/barrels.dmi differ diff --git a/modular_darkpack/modules/decor/icons/fires.dmi b/modular_darkpack/modules/decor/icons/fires.dmi new file mode 100644 index 000000000000..32fd87685c27 Binary files /dev/null and b/modular_darkpack/modules/decor/icons/fires.dmi differ diff --git a/modular_darkpack/modules/decor/icons/flowers.dmi b/modular_darkpack/modules/decor/icons/flowers.dmi new file mode 100644 index 000000000000..6326bb4bdac0 Binary files /dev/null and b/modular_darkpack/modules/decor/icons/flowers.dmi differ diff --git a/modular_darkpack/modules/decor/icons/rack.dmi b/modular_darkpack/modules/decor/icons/rack.dmi new file mode 100644 index 000000000000..9f03e310d954 Binary files /dev/null and b/modular_darkpack/modules/decor/icons/rack.dmi differ diff --git a/modular_darkpack/modules/decor/icons/rack32x64.dmi b/modular_darkpack/modules/decor/icons/rack32x64.dmi new file mode 100644 index 000000000000..434909d17f71 Binary files /dev/null and b/modular_darkpack/modules/decor/icons/rack32x64.dmi differ diff --git a/modular_darkpack/modules/decor/icons/rack64x64.dmi b/modular_darkpack/modules/decor/icons/rack64x64.dmi new file mode 100644 index 000000000000..3a794444ee49 Binary files /dev/null and b/modular_darkpack/modules/decor/icons/rack64x64.dmi differ diff --git a/modular_darkpack/modules/decor/icons/railings.dmi b/modular_darkpack/modules/decor/icons/railings.dmi new file mode 100644 index 000000000000..ef00f10f7c28 Binary files /dev/null and b/modular_darkpack/modules/decor/icons/railings.dmi differ diff --git a/modular_darkpack/modules/decor/icons/rugs64x64.dmi b/modular_darkpack/modules/decor/icons/rugs64x64.dmi new file mode 100644 index 000000000000..1c3942d6b565 Binary files /dev/null and b/modular_darkpack/modules/decor/icons/rugs64x64.dmi differ diff --git a/modular_darkpack/modules/decor/icons/stand_deli.dmi b/modular_darkpack/modules/decor/icons/stand_deli.dmi new file mode 100644 index 000000000000..72a029f8ce25 Binary files /dev/null and b/modular_darkpack/modules/decor/icons/stand_deli.dmi differ diff --git a/modular_darkpack/modules/decor/icons/television.dmi b/modular_darkpack/modules/decor/icons/television.dmi index 5cfc37b2b5c7..f244e6fbc8ac 100644 Binary files a/modular_darkpack/modules/decor/icons/television.dmi and b/modular_darkpack/modules/decor/icons/television.dmi differ diff --git a/modular_darkpack/modules/deprecated/icons/64x64.dmi b/modular_darkpack/modules/deprecated/icons/64x64.dmi index 5e6f366dc3cc..a1ff60bfb5e8 100644 Binary files a/modular_darkpack/modules/deprecated/icons/64x64.dmi and b/modular_darkpack/modules/deprecated/icons/64x64.dmi differ diff --git a/modular_darkpack/modules/deprecated/icons/onfloor.dmi b/modular_darkpack/modules/deprecated/icons/onfloor.dmi index 617f3f077bc2..e98035d0cf00 100644 Binary files a/modular_darkpack/modules/deprecated/icons/onfloor.dmi and b/modular_darkpack/modules/deprecated/icons/onfloor.dmi differ diff --git a/modular_darkpack/modules/deprecated/icons/props.dmi b/modular_darkpack/modules/deprecated/icons/props.dmi index 990637ecb4d7..32981c55cb67 100644 Binary files a/modular_darkpack/modules/deprecated/icons/props.dmi and b/modular_darkpack/modules/deprecated/icons/props.dmi differ diff --git a/modular_darkpack/modules/deprecated/icons/railing.dmi b/modular_darkpack/modules/deprecated/icons/railing.dmi deleted file mode 100644 index cd37b297f86b..000000000000 Binary files a/modular_darkpack/modules/deprecated/icons/railing.dmi and /dev/null differ diff --git a/modular_darkpack/modules/deprecated/icons/standalone_tables.dmi b/modular_darkpack/modules/deprecated/icons/standalone_tables.dmi new file mode 100644 index 000000000000..99edc4fead84 Binary files /dev/null and b/modular_darkpack/modules/deprecated/icons/standalone_tables.dmi differ diff --git a/modular_darkpack/modules/deprecated/icons/storage.dmi b/modular_darkpack/modules/deprecated/icons/storage.dmi index 2ee659bb4aad..9fe0df3539a2 100644 Binary files a/modular_darkpack/modules/deprecated/icons/storage.dmi and b/modular_darkpack/modules/deprecated/icons/storage.dmi differ diff --git a/modular_darkpack/modules/deprecated/icons/storage_objs.dmi b/modular_darkpack/modules/deprecated/icons/storage_objs.dmi new file mode 100644 index 000000000000..f25d78d6cfd3 Binary files /dev/null and b/modular_darkpack/modules/deprecated/icons/storage_objs.dmi differ diff --git a/modular_darkpack/modules/deprecated/icons/tank.dmi b/modular_darkpack/modules/deprecated/icons/tank.dmi new file mode 100644 index 000000000000..38c944314cad Binary files /dev/null and b/modular_darkpack/modules/deprecated/icons/tank.dmi differ diff --git a/modular_darkpack/modules/deprecated/icons/tank_large.dmi b/modular_darkpack/modules/deprecated/icons/tank_large.dmi new file mode 100644 index 000000000000..fd425daabbdc Binary files /dev/null and b/modular_darkpack/modules/deprecated/icons/tank_large.dmi differ diff --git a/modular_darkpack/modules/ert/code/items/swat_items.dm b/modular_darkpack/modules/ert/code/items/swat_items.dm index 8d3d906504ca..4ba8e5491631 100644 --- a/modular_darkpack/modules/ert/code/items/swat_items.dm +++ b/modular_darkpack/modules/ert/code/items/swat_items.dm @@ -41,3 +41,25 @@ ONFLOOR_ICON_HELPER('modular_darkpack/modules/ert/icons/badges_onfloor.dmi') worn_icon = 'modular_darkpack/modules/jobs/icons/id_worn.dmi' worn_icon_state = "grey_id" + +/obj/item/clothing/suit/vampire/darkpack_ert/swat_armor + name = "\improper SWAT vest" + desc = "Highly protective vest marked for SWAT usage. Make sure to throw the flashbang BEFORE you breach the room." + icon_state = "swatvest" + inhand_icon_state = null + w_class = WEIGHT_CLASS_BULKY + armor_type = /datum/armor/highly_protective_vest + body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS + cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS + heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS + clothing_traits = list(TRAIT_BRAWLING_KNOCKDOWN_BLOCKED) + +/obj/item/clothing/head/vampire/darkpack_ert/swat_helmet + name = "\improper SWAT Helmet" + desc = "Modified SFPD helmet with improved performance. Isnt it great to be on the good side of police militarization?" + icon_state = "swathelmet" + armor_type = /datum/armor/army_helmet + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEHAIR + visor_flags_inv = HIDEFACE|HIDESNOUT + flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF + visor_flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF diff --git a/modular_darkpack/modules/ert/code/loadout.dm b/modular_darkpack/modules/ert/code/outfits/first_team_outfits.dm similarity index 100% rename from modular_darkpack/modules/ert/code/loadout.dm rename to modular_darkpack/modules/ert/code/outfits/first_team_outfits.dm diff --git a/modular_darkpack/modules/ert/code/outfits/swat_outfits.dm b/modular_darkpack/modules/ert/code/outfits/swat_outfits.dm index 34ca0575474f..4fb451e56570 100644 --- a/modular_darkpack/modules/ert/code/outfits/swat_outfits.dm +++ b/modular_darkpack/modules/ert/code/outfits/swat_outfits.dm @@ -7,8 +7,8 @@ suit_store = /obj/item/flashlight/seclite shoes = /obj/item/clothing/shoes/vampire/jackboots belt = /obj/item/storage/belt/police/swat/full - suit = /obj/item/clothing/suit/vampire/vest - head = /obj/item/clothing/head/vampire/helmet + suit = /obj/item/clothing/suit/vampire/darkpack_ert/swat_armor + head = /obj/item/clothing/head/vampire/darkpack_ert/swat_helmet id = /obj/item/card/swat r_hand = /obj/item/gun/ballistic/automatic/darkpack/ar15 backpack_contents = list( @@ -24,13 +24,13 @@ name = "Swat Lieutenant" ears = /obj/item/radio/headset/darkpack/police glasses = /obj/item/clothing/glasses/vampire/sun - uniform = /obj/item/clothing/under/vampire/police/utility + uniform = /obj/item/clothing/under/vampire/police/turtleneck gloves = /obj/item/clothing/gloves/fingerless l_pocket = /obj/item/vamp/keys/police/secure/captain suit_store = /obj/item/flashlight/seclite shoes = /obj/item/clothing/shoes/vampire/jackboots belt = /obj/item/storage/belt/police/swat/full - suit = /obj/item/clothing/suit/vampire/trench/armored + suit = /obj/item/clothing/suit/vampire/darkpack_ert/swat_armor head = /obj/item/clothing/head/hats/hos/beret id = /obj/item/card/lieutenant r_hand = /obj/item/gun/ballistic/automatic/pistol/darkpack/deagle/c50 @@ -54,11 +54,11 @@ shoes = /obj/item/clothing/shoes/vampire/jackboots belt = /obj/item/defibrillator/compact/loaded suit = /obj/item/clothing/suit/vampire/labcoat - head = /obj/item/clothing/head/vampire/helmet + head = /obj/item/clothing/head/vampire/darkpack_ert/swat_helmet id = /obj/item/card/first_aid - r_hand = /obj/item/gun/ballistic/automatic/darkpack/mp5 + r_hand = /obj/item/gun/ballistic/automatic/darkpack/mp7 backpack_contents = list( - /obj/item/ammo_box/magazine/darkpack9mp5 = 2, + /obj/item/ammo_box/magazine/darkpack/c46pdw/ext = 2, /obj/item/storage/medkit/darkpack/doctor = 1, /obj/item/storage/medkit/darkpack/combat = 1, /obj/item/storage/medkit/darkpack/burn = 1, @@ -72,11 +72,11 @@ l_pocket = /obj/item/vamp/keys/police shoes = /obj/item/clothing/shoes/vampire id = /obj/item/card/swat - r_hand = /obj/item/gun/ballistic/automatic/darkpack/sniper // for when negotiations go south. + r_hand = /obj/item/gun/ballistic/automatic/darkpack/autosniper // for when negotiations go south. backpack_contents = list( /obj/item/clothing/under/vampire/suit/female = 1, /obj/item/stack/dollar/thousand = 1, - /obj/item/ammo_box/darkpack/c50 = 1, + /obj/item/ammo_box/magazine/vamp762x51PSG1 = 2, /obj/item/reagent_containers/cup/glass/coffee/vampire = 1, /obj/item/food/cookie = 1, // cookies but no milk. these are gonna be some hard negotiations. /obj/item/megaphone = 1, diff --git a/modular_darkpack/modules/ert/icons/clothing.dmi b/modular_darkpack/modules/ert/icons/clothing.dmi index 13460812df4c..052622eb423b 100644 Binary files a/modular_darkpack/modules/ert/icons/clothing.dmi and b/modular_darkpack/modules/ert/icons/clothing.dmi differ diff --git a/modular_darkpack/modules/ert/icons/onfloor.dmi b/modular_darkpack/modules/ert/icons/onfloor.dmi index 02f64283c486..f579ab1996fa 100644 Binary files a/modular_darkpack/modules/ert/icons/onfloor.dmi and b/modular_darkpack/modules/ert/icons/onfloor.dmi differ diff --git a/modular_darkpack/modules/ert/icons/worn.dmi b/modular_darkpack/modules/ert/icons/worn.dmi index fe186cde68a9..bd0d5c906a26 100644 Binary files a/modular_darkpack/modules/ert/icons/worn.dmi and b/modular_darkpack/modules/ert/icons/worn.dmi differ diff --git a/modular_darkpack/modules/graveyard/icons/graves.dmi b/modular_darkpack/modules/graveyard/icons/graves.dmi index ef896e3ddabd..18e2f11c7c84 100644 Binary files a/modular_darkpack/modules/graveyard/icons/graves.dmi and b/modular_darkpack/modules/graveyard/icons/graves.dmi differ diff --git a/modular_darkpack/modules/human_visuals/code/extra_human_sprites.dm b/modular_darkpack/modules/human_visuals/code/extra_human_sprites.dm index 7a03eb93a3de..04dcd813e778 100644 --- a/modular_darkpack/modules/human_visuals/code/extra_human_sprites.dm +++ b/modular_darkpack/modules/human_visuals/code/extra_human_sprites.dm @@ -14,7 +14,7 @@ // If no base sprite is supplied, get a default from either the species or the Clan if (!sprite_name) - var/datum/vampire_clan/clan = get_clan() + var/datum/subsplat/vampire_clan/clan = get_clan() if (clan?.alt_sprite && !ignore_clan) sprite_name = clan.alt_sprite greyscale = clan.alt_sprite_greyscale diff --git a/modular_darkpack/modules/jobs/code/_job_assignment.dm b/modular_darkpack/modules/jobs/code/_job_assignment.dm index fd67e95f75a1..a491cf841a27 100644 --- a/modular_darkpack/modules/jobs/code/_job_assignment.dm +++ b/modular_darkpack/modules/jobs/code/_job_assignment.dm @@ -51,7 +51,7 @@ job_debug("[debug_prefix] Error: [get_job_unavailable_error_message(JOB_UNAVAILABLE_KINDRED_GENERATION, possible_job.title)], Player: [player][add_job_to_log ? ", Job: [possible_job]" : ""]") return JOB_UNAVAILABLE_KINDRED_GENERATION - var/datum/vampire_clan/clan = get_vampire_clan(player_client.prefs.read_preference(/datum/preference/choiced/vampire_clan)) + var/datum/subsplat/vampire_clan/clan = get_vampire_clan(player_client.prefs.read_preference(/datum/preference/choiced/subsplat/vampire_clan)) if(possible_job.allowed_clans && !(clan.id in possible_job.allowed_clans)) job_debug("[debug_prefix] Error: [get_job_unavailable_error_message(JOB_UNAVAILABLE_KINDRED_CLAN, possible_job.title)], Player: [player][add_job_to_log ? ", Job: [possible_job]" : ""]") return JOB_UNAVAILABLE_KINDRED_CLAN diff --git a/modular_darkpack/modules/jobs/code/giovanni/capo.dm b/modular_darkpack/modules/jobs/code/giovanni/capo.dm index 40ade8f21a6a..e70669df1218 100644 --- a/modular_darkpack/modules/jobs/code/giovanni/capo.dm +++ b/modular_darkpack/modules/jobs/code/giovanni/capo.dm @@ -29,4 +29,4 @@ shoes = /obj/item/clothing/shoes/vampire l_pocket = /obj/item/smartphone/giovanni_capo r_pocket = /obj/item/vamp/keys/capo - backpack_contents = list(/obj/item/card/credit/giovanniboss=1) + backpack_contents = list(/obj/item/card/credit/giovanniboss=1, /obj/item/ritual_tome/necromancy=1) diff --git a/modular_darkpack/modules/jobs/code/giovanni/la_squadra.dm b/modular_darkpack/modules/jobs/code/giovanni/la_squadra.dm index 2ee63358a3c5..5cdf8adc54b0 100644 --- a/modular_darkpack/modules/jobs/code/giovanni/la_squadra.dm +++ b/modular_darkpack/modules/jobs/code/giovanni/la_squadra.dm @@ -29,4 +29,4 @@ shoes = /obj/item/clothing/shoes/vampire l_pocket = /obj/item/smartphone/giovanni_squadra r_pocket = /obj/item/vamp/keys/giovanni - backpack_contents = list(/obj/item/card/credit/rich=1) + backpack_contents = list(/obj/item/card/credit/rich=1, /obj/item/ritual_tome/necromancy=1) diff --git a/modular_darkpack/modules/jobs/icons/landmarks.dmi b/modular_darkpack/modules/jobs/icons/landmarks.dmi index 6fde2048afe7..6ca55a600355 100644 Binary files a/modular_darkpack/modules/jobs/icons/landmarks.dmi and b/modular_darkpack/modules/jobs/icons/landmarks.dmi differ diff --git a/modular_darkpack/modules/jobs/icons/landmarks_static.dmi b/modular_darkpack/modules/jobs/icons/landmarks_static.dmi new file mode 100644 index 000000000000..ade896e7136f Binary files /dev/null and b/modular_darkpack/modules/jobs/icons/landmarks_static.dmi differ diff --git a/modular_darkpack/modules/merits_flaws/code/_darkpack_quirk.dm b/modular_darkpack/modules/merits_flaws/code/_darkpack_quirk.dm index 18680a0b25b2..bc12ccab4758 100644 --- a/modular_darkpack/modules/merits_flaws/code/_darkpack_quirk.dm +++ b/modular_darkpack/modules/merits_flaws/code/_darkpack_quirk.dm @@ -1,5 +1,6 @@ /datum/quirk/darkpack abstract_type = /datum/quirk/darkpack + darkpack_allowed = TRUE /// List of splats (vampire clans/types) this quirk is allowed for. Null = all allowed var/list/allowed_splats /// List of splats this quirk is explicitly forbidden for @@ -57,7 +58,7 @@ return TRUE -/datum/quirk/darkpack/proc/is_clan_appropriate(datum/vampire_clan/clan) +/datum/quirk/darkpack/proc/is_clan_appropriate(datum/subsplat/vampire_clan/clan) if(!excluded_clans) return TRUE diff --git a/modular_darkpack/modules/phones/code/_phone.dm b/modular_darkpack/modules/phones/code/_phone.dm index 059c9a96152f..8fc9f6217484 100644 --- a/modular_darkpack/modules/phones/code/_phone.dm +++ b/modular_darkpack/modules/phones/code/_phone.dm @@ -10,7 +10,6 @@ item_flags = NOBLUDGEON w_class = WEIGHT_CLASS_SMALL resistance_flags = FIRE_PROOF | ACID_PROOF - // Who owns this phone on initialization? var/datum/weakref/owner_weakref // There's a radio in my phone that calls me stud muffin. @@ -58,6 +57,12 @@ var/list/contact_networks = null var/important_contact_of = null custom_price = 100 + //texting stuff + var/list/conversations = list() + var/current_viewed_conversation = null + var/phone_background = "" + var/custom_background = null // ori's request to add a custom background URL + var/endpost_username = null //username for the endpost app /obj/item/smartphone/Initialize(mapload) . = ..() @@ -74,6 +79,7 @@ become_hearing_sensitive(ROUNDSTART_TRAIT) RegisterSignal(src, COMSIG_MOVABLE_HEAR, PROC_REF(handle_hearing)) AddComponent(/datum/component/violation_observer, FALSE) + phone_background = "BG_[rand(1,18)]" // pick a random phone background when spawned /// Index to a define to point at a runtime-global list at compile-time. #define NETWORK_ID 1 @@ -163,6 +169,7 @@ return CLICK_ACTION_BLOCKING if(do_after(user, 2 SECONDS, src)) balloon_alert(user, "you remove \the [sim_card]!") + log_phone("[key_name(usr)] removed a SIM card with the number [sim_card.phone_number].") switch(current_state) if(PHONE_CALLING) hang_up_phone_call(dialed_number) @@ -187,8 +194,9 @@ user.transferItemToLoc(tool, src) sim_card.phone_weakref = WEAKREF(src) phone_flags &= ~PHONE_NO_SIM - return ITEM_INTERACT_SUCCESS - return NONE + log_phone("[key_name(usr)] inserted a SIM card with the number [sim_card.phone_number].") + return TRUE + return ..() /obj/item/smartphone/ui_status(mob/user, datum/ui_state/state) if(!(phone_flags & PHONE_OPEN)) @@ -197,12 +205,15 @@ /obj/item/smartphone/ui_interact(mob/user, datum/tgui/ui) . = ..() + var/datum/asset/background_files = get_asset_datum(/datum/asset/simple/phone_assets) + if(user.client) + background_files.send(user.client) ui = SStgui.try_update_ui(user, src, ui) if(!ui) ui = new(user, src, "Telephone") ui.open() -/obj/item/smartphone/ui_data(mob/user) +/obj/item/smartphone/ui_data(mob/living/user) var/list/data = list() data["my_number"] = sim_card ? sim_card.phone_number : "No SIM card inserted." data["no_sim_card"] = (phone_flags & PHONE_NO_SIM) ? TRUE : FALSE @@ -222,6 +233,8 @@ )) published_numbers = sort_list(published_numbers) data["published_numbers"] = published_numbers + data["sim_published"] = sim_card.published + data["sim_published_name"] = sim_card.published_name var/list/our_contacts = list() for(var/datum/phonecontact/contact in contacts) @@ -254,8 +267,48 @@ data["calling_user"] = get_number_contact_name() - data["time"] = time_to_twelve_hour(station_time(), format = "hh:mm") + data["time"] = station_time_timestamp("hh:mm") data["date"] = station_time_timestamp("Day, Month DD, ") + "[CURRENT_STATION_YEAR]" + data["background_url"] = phone_background + + var/list/conversations_list = list() + for(var/datum/phone_conversation/convo in conversations) + var/contact_name = convo.contact_number + + for(var/datum/phonecontact/contact in contacts) + if(contact.number == convo.contact_number) + contact_name = contact.name + break + + if(contact_name == convo.contact_number && (convo.contact_number in SSphones.published_phone_numbers)) + contact_name = SSphones.published_phone_numbers[convo.contact_number] + + var/last_msg = "" + var/last_timestamp = 0 + if(length(convo.messages) > 0) + var/datum/phone_message/last_message = convo.messages[length(convo.messages)] + last_msg = last_message.message_text // replaces the phone number under the name + last_timestamp = last_message.timestamp + + UNTYPED_LIST_ADD(conversations_list, list( + "contact_name" = contact_name, + "number" = convo.contact_number, + "last_message_text" = last_msg, + "last_timestamp" = last_timestamp, + )) + + data["conversations"] = conversations_list + + if(current_viewed_conversation) + data["current_conversation_messages"] = format_conversation(current_viewed_conversation) + else + data["current_conversation_messages"] = list() + + data["posts"] = SSphones.endpost_posts + data["endpost_username"] = endpost_username + data["show_endpost_registration"] = !endpost_username || user.st_get_stat(STAT_TECHNOLOGY) >= 3 //only let big brains change their usernames + data["is_admin"] = is_admin(user) + return data /obj/item/smartphone/ui_act(action, params, datum/tgui/ui) @@ -265,6 +318,7 @@ switch(action) if("call") start_phone_call(usr, params["number"]) + log_phone("[key_name(usr)] called [params["number"]].") return TRUE if("hang") @@ -276,16 +330,19 @@ if("accept") accept_phone_call(usr) + log_phone("[key_name(usr)] answered a phone call.") return TRUE if("decline") decline_phone_call() + log_phone("[key_name(usr)] declined a phone call.") return TRUE if("publish_number") - var/name = tgui_input_text(usr, "Input name", "Publish Number") + to_chat(usr, span_notice("This text will represent you in the phonebook. example: Jane Doe | Anarchy Rose Manager")) + var/name = tgui_input_text(usr, "Phonebook Name", "Publish Number") if(!name) - to_chat(usr, span_danger("You must input a name to publish your number.")) + to_chat(usr, span_danger("You must input text to publish your number.")) return if(!sim_card) to_chat(usr, span_danger("You must insert a SIM card to publish your number.")) @@ -297,41 +354,69 @@ return TRUE SSphones.published_phone_numbers[name] = sim_card.phone_number to_chat(usr, span_notice("Your number is now published.")) + sim_card.published = TRUE + sim_card.published_name = name + log_phone("[key_name(usr)] published their number ([name])/[sim_card.phone_number] to the phonebook.") + return TRUE + + if("unpublish_number") + for(var/contact as anything in SSphones.published_phone_numbers) + if(SSphones.published_phone_numbers[contact] == sim_card.phone_number) + log_phone("[key_name(usr)] unpublished their number ([contact])/[sim_card.phone_number] from the phonebook.") + SSphones.published_phone_numbers.Remove(contact) + sim_card.published = FALSE + sim_card.published_name = null + to_chat(usr, span_notice("Your number is now unpublished.")) + return TRUE + + if("custom_background") + to_chat(usr, span_danger("Do NOT use images that can be considered offensive or obscene, or that contain references to something that happened after the year [CURRENT_STATION_YEAR]. Recommended image dimensions: 400x600 ")) + custom_background = tgui_input_text(usr, "Input background image URL", "Custom Background") + if(!custom_background) + to_chat(usr, span_danger("You must input a URL to set a custom background.")) + return + phone_background = custom_background + log_phone("[key_name(usr)] set a custom background image on [src]: [custom_background]") return TRUE if("add_contact") - var/number = params["number"] + var/number = tgui_input_text(usr, "Input number", "Add Contact") if(length(number) > 15) to_chat(usr, span_danger("Entered number is too long")) - return + return FALSE var/stripped_number = replacetext(number, " ", "") // remove spaces var/new_contact_name = tgui_input_text(usr, "Input name", "Add Contact") - if(!new_contact_name) - to_chat(usr, span_danger("You must input a name to add a contact.")) - return + if(!new_contact_name || !number) + to_chat(usr, span_danger("You must provide both a name and a number.")) + return FALSE var/datum/phonecontact/new_contact = new() new_contact.number = "[stripped_number]" new_contact.name = "[new_contact_name]" contacts += new_contact - + log_phone("[key_name(usr)] added a new contact: [new_contact_name] ([stripped_number])") return TRUE if("remove_contact") - var/name = params["name"] + var/number = tgui_input_text(usr, "Input number", "Remove Contact") + if(length(number) > 15) + to_chat(usr, span_danger("Entered number is too long")) + return FALSE for(var/datum/phonecontact/contact in contacts) - if(contact.name == name) + if(contact.number == number) contacts -= contact + log_phone("[key_name(usr)] removed a contact with number: [number]") return TRUE return FALSE if("block") - var/block_number = params["number"] + var/block_number = tgui_input_text(usr, "Input number to block", "Block Contact") if(!block_number) to_chat(usr, span_warning("You must provide a number.")) + return FALSE if(length(block_number) > 15) to_chat(usr, span_warning("Invalid number.")) - return + return FALSE var/datum/phonecontact/blocked_contact = new() block_number = replacetext(block_number, " ", "") @@ -341,7 +426,10 @@ return TRUE if("unblock") - var/result = params["name"] + var/result = tgui_input_text(usr, "Input number to unblock", "Unblock Contact") + if(!result) + to_chat(usr, span_warning("You must provide a number.")) + return FALSE for(var/datum/phonecontact/unblocked_contact in blocked_contacts) if(unblocked_contact.name == result) blocked_contacts -= unblocked_contact @@ -351,7 +439,7 @@ if("delete_call_history") if(!length(phone_history_list)) to_chat(usr, span_danger("You have no call history to delete.")) - return + return FALSE to_chat(usr, "Your total amount of history saved is: [length(phone_history_list)]") var/number_of_deletions = tgui_input_number(usr, "Input the amount that you want to delete", "Deletion Amount", max_value = length(phone_history_list)) @@ -395,6 +483,10 @@ balloon_alert(usr, "speaker off!") return TRUE + if("set_background") + phone_background = params["background_url"] + return TRUE + if("mute") muted = !muted phone_radio.set_listening(!muted) @@ -402,8 +494,106 @@ if("wiki") wiki_book.display_content(usr) + + if("view_conversation") + current_viewed_conversation = params["contact_number"] + var/datum/phone_conversation/conversation = get_conversation(current_viewed_conversation) + if(!conversation) + conversation = new(current_viewed_conversation) + return TRUE + + if("submit_post") + submit_post(params["body"]) + return TRUE + + if("endpost_registration") + endpost_registration() + return TRUE + + if("remove_endpost") + var/post_index = text2num(params["post_index"]) + if(!post_index) + to_chat(usr, "Invalid post index.") + return FALSE + var/list/selected_post = SSphones.endpost_posts[post_index] + SSphones.endpost_posts.Cut(post_index, post_index + 1) + to_chat(usr, "Post '[selected_post["body"]]' by [selected_post["author"]] removed.") + log_phone("[key_name(usr)] removed an endpost: [selected_post["body"]] by [selected_post["author"]]", list("author" = selected_post["author"], "body" = selected_post["body"])) + return TRUE + + if("keyboard_click") + if(ringer) + playsound(loc, 'modular_darkpack/modules/phones/sounds/keyboard_click.ogg', 8, TRUE) + return TRUE + + if("send_message") + var/contact_number = params["contact_number"] + var/message_text = params["message_text"] + if(!contact_number || !message_text) + return FALSE + send_text_message(contact_number, message_text) + if(ringer) + playsound(loc, 'modular_darkpack/modules/phones/sounds/text_send.ogg', 10, TRUE) + return TRUE + return FALSE +/obj/item/smartphone/proc/get_conversation(contact_number) + for(var/datum/phone_conversation/convo in conversations) + if(convo.contact_number == contact_number) + return convo + +/obj/item/smartphone/proc/send_text_message(contact_number, message_text) + if(!contact_number || !message_text) + return FALSE + + var/contact_name = get_number_contact_name() + var/datum/phone_conversation/conversation = get_conversation(contact_number) + + if(!conversation) + conversation = new(contact_name, contact_number) + conversations += conversation + + conversation.add_message(message_text, TRUE) + + var/obj/item/smartphone/receiving_phone = SSphones.get_phone_from_number(contact_number) + if(receiving_phone) + var/recv_contact_name = receiving_phone.get_number_contact_name() + var/datum/phone_conversation/recv_conversation = receiving_phone.get_conversation(sim_card.phone_number) + if(!recv_conversation) + recv_conversation = new(recv_contact_name, sim_card.phone_number) + receiving_phone.conversations += recv_conversation + recv_conversation.add_message(message_text, FALSE) + addtimer(CALLBACK(receiving_phone, PROC_REF(after_text_received)), rand(2 SECONDS, 6 SECONDS)) //simulate random delay before sending an audible/visible alert + receiving_phone.after_text_received() + log_phone("[key_name(usr)] sent a text to [contact_number]: [message_text]", list("sender" = contact_name, "receiver" = recv_contact_name, "message" = message_text)) + return TRUE + +//stuff to do after a text is received +/obj/item/smartphone/proc/after_text_received() + if(ringer) //only play the receive sound if sounds are on + playsound(loc, 'modular_darkpack/modules/phones/sounds/text_receive.ogg', 10, TRUE) + balloon_alert_to_viewers(message = "New Message!", vision_distance = SAMETILE_MESSAGE_RANGE) + return TRUE + +/obj/item/smartphone/proc/format_conversation(contact_number) + var/datum/phone_conversation/conversation = get_conversation(contact_number) + + if(!conversation) + conversation = new("Unknown", contact_number) + + var/list/formatted_messages = list() + for(var/datum/phone_message/msg in conversation.messages) + UNTYPED_LIST_ADD(formatted_messages, list( + "contact_name" = msg.contact_name, + "number" = msg.number, + "message_text" = msg.message_text, + "time" = msg.time, + "is_outgoing" = msg.is_outgoing, + )) + + return formatted_messages + /obj/item/smartphone/proc/toggle_screen(mob/user) if(phone_flags & PHONE_OPEN) phone_flags &= ~PHONE_OPEN @@ -412,3 +602,31 @@ icon_state = (phone_flags & PHONE_OPEN) ? "phone_on" : "phone" inhand_icon_state = (phone_flags & PHONE_OPEN) ? "phone_on" : "phone" update_icon() + +/obj/item/smartphone/proc/submit_post(body) + if(!body) + return FALSE + + if(!endpost_username) + return FALSE + + var/new_post = list( + "body" = trim(body), + "date" = station_time_timestamp("Day, Month DD, ") + "[CURRENT_STATION_YEAR]", + "time" = station_time_timestamp("hh:mm"), + "author" = endpost_username + ) + + UNTYPED_LIST_ADD(SSphones.endpost_posts, new_post) + log_phone("[key_name(usr)] submitted a new endpost: [trim(body)] as [endpost_username]") + + return TRUE + +/obj/item/smartphone/proc/endpost_registration() + var/new_username = tgui_input_text(usr, "Choose your username:", "EndPost Registration", "", 14) //max size of 14 chars or it starts bumping elements around + log_phone("[key_name(usr)] [endpost_username ? "updated" : "registered"] their username as [new_username]") + endpost_username = new_username + return TRUE + +/proc/log_phone(text, list/data) + logger.Log(LOG_CATEGORY_PDA_CHAT, text, data) diff --git a/modular_darkpack/modules/phones/code/phone_assets.dm b/modular_darkpack/modules/phones/code/phone_assets.dm new file mode 100644 index 000000000000..e91fd4948bcb --- /dev/null +++ b/modular_darkpack/modules/phones/code/phone_assets.dm @@ -0,0 +1,25 @@ + +/datum/asset/simple/phone_assets + legacy = TRUE + assets = list( + "ahmetyuksek_snowy_mountain_9987520_1280.webp" = 'modular_darkpack/modules/phones/icons/backgrounds/ahmetyuksek_snowy_mountain_9987520_1280.webp', + "andre_h_dog_5632005_1280.webp" = 'modular_darkpack/modules/phones/icons/backgrounds/andre_h_dog_5632005_1280.webp', + "camera_man_waves_8260746_1280.webp" = 'modular_darkpack/modules/phones/icons/backgrounds/camera_man_waves_8260746_1280.webp', + "daga_roszkowska_cat_3038243_1280.webp" = 'modular_darkpack/modules/phones/icons/backgrounds/daga_roszkowska_cat_3038243_1280.webp', + "duerken_dog_7937282_1280.webp" = 'modular_darkpack/modules/phones/icons/backgrounds/duerken_dog_7937282_1280.webp', + "flo222_nature_3194001_1920.webp" = 'modular_darkpack/modules/phones/icons/backgrounds/flo222_nature_3194001_1920.webp', + "ilonaburschl_cat_9734651_1280.webp" = 'modular_darkpack/modules/phones/icons/backgrounds/ilonaburschl_cat_9734651_1280.webp', + "irenna_cat_7274205_1280.webp" = 'modular_darkpack/modules/phones/icons/backgrounds/irenna_cat_7274205_1280.webp', + "lucioliu_dog_4988986_1280.webp" = 'modular_darkpack/modules/phones/icons/backgrounds/lucioliu_dog_4988986_1280.webp', + "moremilu_golden_gate_6907401_1920.webp" = 'modular_darkpack/modules/phones/icons/backgrounds/moremilu_golden_gate_6907401_1920.webp', + "pexels_fir_trees_1835402_1920.webp" = 'modular_darkpack/modules/phones/icons/backgrounds/pexels_fir_trees_1835402_1920.webp', + "pintari_police_bikes_3711598_1280.webp" = 'modular_darkpack/modules/phones/icons/backgrounds/pintari_police_bikes_3711598_1280.webp', + "pixel1_background_975028_1280.webp" = 'modular_darkpack/modules/phones/icons/backgrounds/pixel1_background_975028_1280.webp', + "rwgusev_cat_7866716_1280.webp" = 'modular_darkpack/modules/phones/icons/backgrounds/rwgusev_cat_7866716_1280.webp', + "sonyuser_snow_4668099_1280.webp" = 'modular_darkpack/modules/phones/icons/backgrounds/sonyuser_snow_4668099_1280.webp', + "stocksnap_bokeh_lights_2592859_1280.webp" = 'modular_darkpack/modules/phones/icons/backgrounds/stocksnap_bokeh_lights_2592859_1280.webp', + "tarry_not_phone_wallpaper_7336374_1280.webp" = 'modular_darkpack/modules/phones/icons/backgrounds/tarry_not_phone_wallpaper_7336374_1280.webp', + "thewhiteclouds_trees_9124293_1280.webp" = 'modular_darkpack/modules/phones/icons/backgrounds/thewhiteclouds_trees_9124293_1280.webp', + //browser assets + "endron_logo.webp" = 'modular_darkpack/modules/phones/icons/browser/endron_logo.webp', + ) diff --git a/modular_darkpack/modules/phones/code/phone_subsystem.dm b/modular_darkpack/modules/phones/code/phone_subsystem.dm index 5afabaa20153..0722a45b9962 100644 --- a/modular_darkpack/modules/phones/code/phone_subsystem.dm +++ b/modular_darkpack/modules/phones/code/phone_subsystem.dm @@ -12,6 +12,8 @@ SUBSYSTEM_DEF(phones) var/list/frequencies_in_use = list() // Published phone numbers, with the key being what the user named the number. var/list/published_phone_numbers = list() + // Posts for the endpost feed + var/list/endpost_posts = list() // Generates a random phone number from the available ranges, ten digits, starts with a 415 or 628. /datum/controller/subsystem/phones/proc/random_number() diff --git a/modular_darkpack/modules/phones/code/phone_texting.dm b/modular_darkpack/modules/phones/code/phone_texting.dm new file mode 100644 index 000000000000..0e2ba2d41888 --- /dev/null +++ b/modular_darkpack/modules/phones/code/phone_texting.dm @@ -0,0 +1,30 @@ + +/datum/phone_message + var/contact_name = "" + var/number = "" + var/message_text = "" + var/time = "" + var/timestamp = 0 + var/is_outgoing = FALSE + +/datum/phone_message/New(contact_name, number, message_text, is_outgoing = FALSE) + src.contact_name = contact_name + src.number = number + src.message_text = message_text + src.is_outgoing = is_outgoing + src.timestamp = station_time() + src.time = station_time_timestamp("hh:mm") + +/datum/phone_conversation + var/contact_name = "" + var/contact_number = "" + var/list/messages = list() + +/datum/phone_conversation/proc/add_message(message_text, is_outgoing = FALSE) + var/datum/phone_message/new_message = new /datum/phone_message(contact_name, contact_number, message_text, is_outgoing) + messages += new_message + return new_message + +/datum/phone_conversation/New(contact_name, contact_number) + src.contact_name = contact_name + src.contact_number = contact_number diff --git a/modular_darkpack/modules/phones/code/sim_card.dm b/modular_darkpack/modules/phones/code/sim_card.dm index ebf0f4407844..37475d1e2eb7 100644 --- a/modular_darkpack/modules/phones/code/sim_card.dm +++ b/modular_darkpack/modules/phones/code/sim_card.dm @@ -7,6 +7,8 @@ item_flags = NOBLUDGEON w_class = WEIGHT_CLASS_SMALL resistance_flags = FIRE_PROOF | ACID_PROOF + var/published = FALSE + var/published_name = "" //the published number listing for this sim var/phone_number = "" var/datum/weakref/phone_weakref = null diff --git a/modular_darkpack/modules/phones/icons/backgrounds/ahmetyuksek_snowy_mountain_9987520_1280.webp b/modular_darkpack/modules/phones/icons/backgrounds/ahmetyuksek_snowy_mountain_9987520_1280.webp new file mode 100644 index 000000000000..a4e6bff643b9 Binary files /dev/null and b/modular_darkpack/modules/phones/icons/backgrounds/ahmetyuksek_snowy_mountain_9987520_1280.webp differ diff --git a/modular_darkpack/modules/phones/icons/backgrounds/andre_h_dog_5632005_1280.webp b/modular_darkpack/modules/phones/icons/backgrounds/andre_h_dog_5632005_1280.webp new file mode 100644 index 000000000000..0e5630783a6d Binary files /dev/null and b/modular_darkpack/modules/phones/icons/backgrounds/andre_h_dog_5632005_1280.webp differ diff --git a/modular_darkpack/modules/phones/icons/backgrounds/camera_man_waves_8260746_1280.webp b/modular_darkpack/modules/phones/icons/backgrounds/camera_man_waves_8260746_1280.webp new file mode 100644 index 000000000000..84d67b44d663 Binary files /dev/null and b/modular_darkpack/modules/phones/icons/backgrounds/camera_man_waves_8260746_1280.webp differ diff --git a/modular_darkpack/modules/phones/icons/backgrounds/credit.txt b/modular_darkpack/modules/phones/icons/backgrounds/credit.txt new file mode 100644 index 000000000000..da3571372fdf --- /dev/null +++ b/modular_darkpack/modules/phones/icons/backgrounds/credit.txt @@ -0,0 +1,25 @@ +/* +A warm thank you to all of the artists who upload royalty free images! + +The images in this directory decode to the original works of the following pixabay.com users who graciously made them royalty-free: + +Ahmetyuksek +AndreH +CameraMan +Daga_Roszko +Duerken +Flo222 +IlonaBursch +Irenna +Lucioliu +Moremilu +Pexels +Pintari +Pixel1 +rwgusev +sonyuser +stocksnap +tarry_not +thewhiteclouds +TomHill +*/ diff --git a/modular_darkpack/modules/phones/icons/backgrounds/daga_roszkowska_cat_3038243_1280.webp b/modular_darkpack/modules/phones/icons/backgrounds/daga_roszkowska_cat_3038243_1280.webp new file mode 100644 index 000000000000..484e24bcf86b Binary files /dev/null and b/modular_darkpack/modules/phones/icons/backgrounds/daga_roszkowska_cat_3038243_1280.webp differ diff --git a/modular_darkpack/modules/phones/icons/backgrounds/duerken_dog_7937282_1280.webp b/modular_darkpack/modules/phones/icons/backgrounds/duerken_dog_7937282_1280.webp new file mode 100644 index 000000000000..53dae39f646f Binary files /dev/null and b/modular_darkpack/modules/phones/icons/backgrounds/duerken_dog_7937282_1280.webp differ diff --git a/modular_darkpack/modules/phones/icons/backgrounds/flo222_nature_3194001_1920.webp b/modular_darkpack/modules/phones/icons/backgrounds/flo222_nature_3194001_1920.webp new file mode 100644 index 000000000000..ab0ffbce40ce Binary files /dev/null and b/modular_darkpack/modules/phones/icons/backgrounds/flo222_nature_3194001_1920.webp differ diff --git a/modular_darkpack/modules/phones/icons/backgrounds/ilonaburschl_cat_9734651_1280.webp b/modular_darkpack/modules/phones/icons/backgrounds/ilonaburschl_cat_9734651_1280.webp new file mode 100644 index 000000000000..593543f143b2 Binary files /dev/null and b/modular_darkpack/modules/phones/icons/backgrounds/ilonaburschl_cat_9734651_1280.webp differ diff --git a/modular_darkpack/modules/phones/icons/backgrounds/irenna_cat_7274205_1280.webp b/modular_darkpack/modules/phones/icons/backgrounds/irenna_cat_7274205_1280.webp new file mode 100644 index 000000000000..d248262ad179 Binary files /dev/null and b/modular_darkpack/modules/phones/icons/backgrounds/irenna_cat_7274205_1280.webp differ diff --git a/modular_darkpack/modules/phones/icons/backgrounds/lucioliu_dog_4988986_1280.webp b/modular_darkpack/modules/phones/icons/backgrounds/lucioliu_dog_4988986_1280.webp new file mode 100644 index 000000000000..9bb357156af5 Binary files /dev/null and b/modular_darkpack/modules/phones/icons/backgrounds/lucioliu_dog_4988986_1280.webp differ diff --git a/modular_darkpack/modules/phones/icons/backgrounds/moremilu_golden_gate_6907401_1920.webp b/modular_darkpack/modules/phones/icons/backgrounds/moremilu_golden_gate_6907401_1920.webp new file mode 100644 index 000000000000..28016b933bfa Binary files /dev/null and b/modular_darkpack/modules/phones/icons/backgrounds/moremilu_golden_gate_6907401_1920.webp differ diff --git a/modular_darkpack/modules/phones/icons/backgrounds/pexels_fir_trees_1835402_1920.webp b/modular_darkpack/modules/phones/icons/backgrounds/pexels_fir_trees_1835402_1920.webp new file mode 100644 index 000000000000..ead5b017d53c Binary files /dev/null and b/modular_darkpack/modules/phones/icons/backgrounds/pexels_fir_trees_1835402_1920.webp differ diff --git a/modular_darkpack/modules/phones/icons/backgrounds/pintari_police_bikes_3711598_1280.webp b/modular_darkpack/modules/phones/icons/backgrounds/pintari_police_bikes_3711598_1280.webp new file mode 100644 index 000000000000..9e6e6d338c98 Binary files /dev/null and b/modular_darkpack/modules/phones/icons/backgrounds/pintari_police_bikes_3711598_1280.webp differ diff --git a/modular_darkpack/modules/phones/icons/backgrounds/pixel1_background_975028_1280.webp b/modular_darkpack/modules/phones/icons/backgrounds/pixel1_background_975028_1280.webp new file mode 100644 index 000000000000..9a01c0970eae Binary files /dev/null and b/modular_darkpack/modules/phones/icons/backgrounds/pixel1_background_975028_1280.webp differ diff --git a/modular_darkpack/modules/phones/icons/backgrounds/rwgusev_cat_7866716_1280.webp b/modular_darkpack/modules/phones/icons/backgrounds/rwgusev_cat_7866716_1280.webp new file mode 100644 index 000000000000..7cd545d56e58 Binary files /dev/null and b/modular_darkpack/modules/phones/icons/backgrounds/rwgusev_cat_7866716_1280.webp differ diff --git a/modular_darkpack/modules/phones/icons/backgrounds/sonyuser_snow_4668099_1280.webp b/modular_darkpack/modules/phones/icons/backgrounds/sonyuser_snow_4668099_1280.webp new file mode 100644 index 000000000000..22789ddc14f7 Binary files /dev/null and b/modular_darkpack/modules/phones/icons/backgrounds/sonyuser_snow_4668099_1280.webp differ diff --git a/modular_darkpack/modules/phones/icons/backgrounds/stocksnap_bokeh_lights_2592859_1280.webp b/modular_darkpack/modules/phones/icons/backgrounds/stocksnap_bokeh_lights_2592859_1280.webp new file mode 100644 index 000000000000..90093fc39fec Binary files /dev/null and b/modular_darkpack/modules/phones/icons/backgrounds/stocksnap_bokeh_lights_2592859_1280.webp differ diff --git a/modular_darkpack/modules/phones/icons/backgrounds/tarry_not_phone_wallpaper_7336374_1280.webp b/modular_darkpack/modules/phones/icons/backgrounds/tarry_not_phone_wallpaper_7336374_1280.webp new file mode 100644 index 000000000000..4fec8d1b9b79 Binary files /dev/null and b/modular_darkpack/modules/phones/icons/backgrounds/tarry_not_phone_wallpaper_7336374_1280.webp differ diff --git a/modular_darkpack/modules/phones/icons/backgrounds/thewhiteclouds_trees_9124293_1280.webp b/modular_darkpack/modules/phones/icons/backgrounds/thewhiteclouds_trees_9124293_1280.webp new file mode 100644 index 000000000000..94b4e82872d2 Binary files /dev/null and b/modular_darkpack/modules/phones/icons/backgrounds/thewhiteclouds_trees_9124293_1280.webp differ diff --git a/modular_darkpack/modules/phones/icons/backgrounds/timhill_mam_tor_5393686_1920.webp b/modular_darkpack/modules/phones/icons/backgrounds/timhill_mam_tor_5393686_1920.webp new file mode 100644 index 000000000000..048916d412cd Binary files /dev/null and b/modular_darkpack/modules/phones/icons/backgrounds/timhill_mam_tor_5393686_1920.webp differ diff --git a/modular_darkpack/modules/phones/icons/browser/endron_logo.webp b/modular_darkpack/modules/phones/icons/browser/endron_logo.webp new file mode 100644 index 000000000000..9dafec362135 Binary files /dev/null and b/modular_darkpack/modules/phones/icons/browser/endron_logo.webp differ diff --git a/modular_darkpack/modules/phones/sounds/keyboard_click.ogg b/modular_darkpack/modules/phones/sounds/keyboard_click.ogg new file mode 100644 index 000000000000..3540fc8b8250 Binary files /dev/null and b/modular_darkpack/modules/phones/sounds/keyboard_click.ogg differ diff --git a/modular_darkpack/modules/phones/sounds/text_receive.ogg b/modular_darkpack/modules/phones/sounds/text_receive.ogg new file mode 100644 index 000000000000..31a42171892b Binary files /dev/null and b/modular_darkpack/modules/phones/sounds/text_receive.ogg differ diff --git a/modular_darkpack/modules/phones/sounds/text_send.ogg b/modular_darkpack/modules/phones/sounds/text_send.ogg new file mode 100644 index 000000000000..d2a4820cb55d Binary files /dev/null and b/modular_darkpack/modules/phones/sounds/text_send.ogg differ diff --git a/modular_darkpack/modules/pixel_shift/code/pixel_shift_component.dm b/modular_darkpack/modules/pixel_shift/code/pixel_shift_component.dm index 8cdba0afe1ec..78238a1ac2c7 100644 --- a/modular_darkpack/modules/pixel_shift/code/pixel_shift_component.dm +++ b/modular_darkpack/modules/pixel_shift/code/pixel_shift_component.dm @@ -14,6 +14,10 @@ var/maximum_pixel_shift = 16 //If we are shifted var/is_shifted = FALSE + //Amount of shift in the X axis + var/shift_x = 0 + //Amount of shift in the Y axis + var/shift_y = 0 //Allows atoms entering Parent's turf to pass through freely from given directions var/passthroughable = NONE //Amount of shifting necessary to make the parent passthroughable @@ -25,23 +29,23 @@ return COMPONENT_INCOMPATIBLE /datum/component/pixel_shift/RegisterWithParent() - RegisterSignal(parent, COMSIG_KB_MOB_ITEM_PIXEL_SHIFT_DOWN, PROC_REF(item_pixel_shift_down)) - RegisterSignal(parent, COMSIG_KB_MOB_ITEM_PIXEL_SHIFT_UP, PROC_REF(item_pixel_shift_up)) - RegisterSignal(parent, COMSIG_KB_MOB_PIXEL_SHIFT_DOWN, PROC_REF(pixel_shift_down)) - RegisterSignal(parent, COMSIG_KB_MOB_PIXEL_SHIFT_UP, PROC_REF(pixel_shift_up)) - RegisterSignal(parent, COMSIG_KB_MOB_PIXEL_TILT_DOWN, PROC_REF(pixel_tilt_down)) - RegisterSignal(parent, COMSIG_KB_MOB_PIXEL_TILT_UP, PROC_REF(pixel_tilt_up)) + RegisterSignal(parent, COMSIG_KB_LIVING_ITEM_PIXEL_SHIFT_DOWN, PROC_REF(item_pixel_shift_down)) + RegisterSignal(parent, COMSIG_KB_LIVING_ITEM_PIXEL_SHIFT_UP, PROC_REF(item_pixel_shift_up)) + RegisterSignal(parent, COMSIG_KB_LIVING_PIXEL_SHIFT_DOWN, PROC_REF(pixel_shift_down)) + RegisterSignal(parent, COMSIG_KB_LIVING_PIXEL_SHIFT_UP, PROC_REF(pixel_shift_up)) + RegisterSignal(parent, COMSIG_KB_LIVING_PIXEL_TILT_DOWN, PROC_REF(pixel_tilt_down)) + RegisterSignal(parent, COMSIG_KB_LIVING_PIXEL_TILT_UP, PROC_REF(pixel_tilt_up)) RegisterSignals(parent, list(COMSIG_LIVING_RESET_PULL_OFFSETS, COMSIG_LIVING_SET_PULL_OFFSET, COMSIG_MOVABLE_MOVED), PROC_REF(unpixel_shift)) RegisterSignal(parent, COMSIG_MOB_CLIENT_PRE_LIVING_MOVE, PROC_REF(pre_move_check)) RegisterSignal(parent, COMSIG_LIVING_CAN_ALLOW_THROUGH, PROC_REF(check_passable)) /datum/component/pixel_shift/UnregisterFromParent() UnregisterSignal(parent, list( - COMSIG_KB_MOB_ITEM_PIXEL_SHIFT_DOWN, - COMSIG_KB_MOB_ITEM_PIXEL_SHIFT_UP, - COMSIG_KB_MOB_PIXEL_TILT_DOWN, - COMSIG_KB_MOB_PIXEL_TILT_UP, - COMSIG_KB_MOB_PIXEL_SHIFT_DOWN, - COMSIG_KB_MOB_PIXEL_SHIFT_UP, + COMSIG_KB_LIVING_ITEM_PIXEL_SHIFT_DOWN, + COMSIG_KB_LIVING_ITEM_PIXEL_SHIFT_UP, + COMSIG_KB_LIVING_PIXEL_TILT_DOWN, + COMSIG_KB_LIVING_PIXEL_TILT_UP, + COMSIG_KB_LIVING_PIXEL_SHIFT_DOWN, + COMSIG_KB_LIVING_PIXEL_SHIFT_UP, COMSIG_MOB_CLIENT_PRE_LIVING_MOVE, COMSIG_LIVING_RESET_PULL_OFFSETS, COMSIG_LIVING_SET_PULL_OFFSET, @@ -133,24 +137,24 @@ if(SHIFTING_PARENT) switch(direct) if(NORTH) - if(owner.pixel_y <= maximum_pixel_shift) - owner.pixel_y++ - owner.add_offsets(type, y_add = owner.pixel_y) + if(shift_y <= maximum_pixel_shift) + shift_y++ + owner.add_offsets(type, y_add = shift_y) is_shifted = TRUE if(EAST) - if(owner.pixel_x <= maximum_pixel_shift) - owner.pixel_x++ - owner.add_offsets(type, x_add = owner.pixel_x) + if(shift_x <= maximum_pixel_shift) + shift_x++ + owner.add_offsets(type, x_add = shift_x) is_shifted = TRUE if(SOUTH) - if(owner.pixel_y >= -maximum_pixel_shift) - owner.pixel_y-- - owner.add_offsets(type, y_add = owner.pixel_y) + if(shift_y >= -maximum_pixel_shift) + shift_y-- + owner.add_offsets(type, y_add = shift_y) is_shifted = TRUE if(WEST) - if(owner.pixel_x >= -maximum_pixel_shift) - owner.pixel_x-- - owner.add_offsets(type, x_add = owner.pixel_x) + if(shift_x >= -maximum_pixel_shift) + shift_x-- + owner.add_offsets(type, x_add = shift_x) is_shifted = TRUE if(TILTING_PARENT) switch(direct) @@ -167,13 +171,13 @@ // Yes, I know this sets it to true for everything if more than one is matched. // Movement doesn't check diagonals, and instead just checks EAST or WEST, depending on where you are for those. - if(owner.pixel_y > passthrough_threshold) + if(shift_y > passthrough_threshold) passthroughable |= EAST | SOUTH | WEST - else if(owner.pixel_y < -passthrough_threshold) + else if(shift_y < -passthrough_threshold) passthroughable |= NORTH | EAST | WEST - if(owner.pixel_x > passthrough_threshold) + if(shift_x > passthrough_threshold) passthroughable |= NORTH | SOUTH | WEST - else if(owner.pixel_x < -passthrough_threshold) + else if(shift_x < -passthrough_threshold) passthroughable |= NORTH | EAST | SOUTH #undef SHIFTING_ITEMS diff --git a/modular_darkpack/modules/pixel_shift/code/pixel_shift_keybind.dm b/modular_darkpack/modules/pixel_shift/code/pixel_shift_keybind.dm index e6a1c666eea2..6f777f237da1 100644 --- a/modular_darkpack/modules/pixel_shift/code/pixel_shift_keybind.dm +++ b/modular_darkpack/modules/pixel_shift/code/pixel_shift_keybind.dm @@ -1,56 +1,56 @@ -/datum/keybinding/mob/item_pixel_shift +/datum/keybinding/living/item_pixel_shift hotkey_keys = list("Unbound") name = "item_pixel_shift" full_name = "Item Pixel Shift" description = "Shift a pulled item's offset" category = CATEGORY_MISC - keybind_signal = COMSIG_KB_MOB_ITEM_PIXEL_SHIFT_DOWN + keybind_signal = COMSIG_KB_LIVING_ITEM_PIXEL_SHIFT_DOWN -/datum/keybinding/mob/item_pixel_shift/down(client/user) +/datum/keybinding/living/item_pixel_shift/down(client/user) . = ..() if(.) return user.mob.AddComponent(/datum/component/pixel_shift) - SEND_SIGNAL(user.mob, COMSIG_KB_MOB_ITEM_PIXEL_SHIFT_DOWN) + SEND_SIGNAL(user.mob, COMSIG_KB_LIVING_ITEM_PIXEL_SHIFT_DOWN) -/datum/keybinding/mob/item_pixel_shift/up(client/user) +/datum/keybinding/living/item_pixel_shift/up(client/user) . = ..() - SEND_SIGNAL(user.mob, COMSIG_KB_MOB_ITEM_PIXEL_SHIFT_UP) + SEND_SIGNAL(user.mob, COMSIG_KB_LIVING_ITEM_PIXEL_SHIFT_UP) -/datum/keybinding/mob/pixel_shift +/datum/keybinding/living/pixel_shift hotkey_keys = list("Unbound") name = "pixel_shift" full_name = "Pixel Shift" description = "Shift your characters offset." category = CATEGORY_MOVEMENT - keybind_signal = COMSIG_KB_MOB_PIXEL_SHIFT_DOWN + keybind_signal = COMSIG_KB_LIVING_PIXEL_SHIFT_DOWN -/datum/keybinding/mob/pixel_shift/down(client/user) +/datum/keybinding/living/pixel_shift/down(client/user) . = ..() if(.) return user.mob.AddComponent(/datum/component/pixel_shift) - SEND_SIGNAL(user.mob, COMSIG_KB_MOB_PIXEL_SHIFT_DOWN) + SEND_SIGNAL(user.mob, COMSIG_KB_LIVING_PIXEL_SHIFT_DOWN) -/datum/keybinding/mob/pixel_shift/up(client/user) +/datum/keybinding/living/pixel_shift/up(client/user) . = ..() - SEND_SIGNAL(user.mob, COMSIG_KB_MOB_PIXEL_SHIFT_UP) + SEND_SIGNAL(user.mob, COMSIG_KB_LIVING_PIXEL_SHIFT_UP) -/datum/keybinding/mob/pixel_tilting +/datum/keybinding/living/pixel_tilting hotkey_keys = list("Unbound") name = "Pixel Tilting" full_name = "Pixel Tilt" description = "Shift a mob's rotational value" category = CATEGORY_MOVEMENT - keybind_signal = COMSIG_KB_MOB_PIXEL_TILT_DOWN + keybind_signal = COMSIG_KB_LIVING_PIXEL_TILT_DOWN -/datum/keybinding/mob/pixel_tilting/down(client/user) +/datum/keybinding/living/pixel_tilting/down(client/user) . = ..() if(.) return user.mob.AddComponent(/datum/component/pixel_shift) - SEND_SIGNAL(user.mob, COMSIG_KB_MOB_PIXEL_TILT_DOWN) + SEND_SIGNAL(user.mob, COMSIG_KB_LIVING_PIXEL_TILT_DOWN) -/datum/keybinding/mob/pixel_tilting/up(client/user) +/datum/keybinding/living/pixel_tilting/up(client/user) . = ..() - SEND_SIGNAL(user.mob, COMSIG_KB_MOB_PIXEL_TILT_UP) + SEND_SIGNAL(user.mob, COMSIG_KB_LIVING_PIXEL_TILT_UP) diff --git a/modular_darkpack/modules/powers/code/discipline/auspex/auspex.dm b/modular_darkpack/modules/powers/code/discipline/auspex/auspex.dm index 48a88e37241c..14d01eee1903 100644 --- a/modular_darkpack/modules/powers/code/discipline/auspex/auspex.dm +++ b/modular_darkpack/modules/powers/code/discipline/auspex/auspex.dm @@ -3,6 +3,8 @@ #define SENSE_SMELL "Smell" #define SENSE_TASTE "Taste" #define SENSE_TOUCH "Touch" +#define TELEPATHY_MIND_READING "Mind Reading" +#define TELEPATHY_IMPLANT_THOUGHT "Implant Thoughts" /datum/discipline/auspex name = "Auspex" @@ -239,24 +241,124 @@ vitae_cost = 0 cooldown_length = 1 TURNS range = 7 + var/telepathy_types = list(TELEPATHY_MIND_READING, TELEPATHY_IMPLANT_THOUGHT) + var/telepathy_type_selected + var/successes + var/disguised_voice + var/datum/storyteller_roll/telepathy_success/telepathy_roll + var/datum/storyteller_roll/disguise_voice_roll/disguise_roll + +/datum/storyteller_roll/telepathy_success + bumper_text = "mind reading" + applicable_stats = list(STAT_INTELLIGENCE, STAT_SUBTERFUGE) + numerical = TRUE + roll_output_type = ROLL_PRIVATE + +/datum/storyteller_roll/disguise_voice_roll + bumper_text = "disguise voice" + applicable_stats = list(STAT_MANIPULATION, STAT_SUBTERFUGE) + numerical = FALSE + roll_output_type = ROLL_PRIVATE + +/datum/discipline_power/auspex/telepathy/pre_activation_checks(mob/living/target) + . = ..() + if(!telepathy_roll) + telepathy_roll = new() + telepathy_roll.difficulty = target.st_get_stat(STAT_TEMPORARY_WILLPOWER) + successes = telepathy_roll.st_roll(owner, target) + if(successes > 0) + // need linebreaks... but \n and
arent working... + var/telepathy_type = tgui_input_list(owner, "What kind of Telepathy would you like to perform? Reading the minds of supernaturals requires expending one temporary willpower point.", "Telepathy Type Selection", telepathy_types, TELEPATHY_IMPLANT_THOUGHT) + switch(telepathy_type) + if(TELEPATHY_MIND_READING) + //var/supernatural_splat = issupernatural(target)??? the current issupernatural just checks for a single splat, which doesnt qualify for the -1 willpower, think its just other 'undead' p137 V20 + if(iskindred(target) || isshifter(target)) + owner.st_set_stat(STAT_TEMPORARY_WILLPOWER, owner.st_get_stat(STAT_TEMPORARY_WILLPOWER) - 1) + if(TELEPATHY_IMPLANT_THOUGHT) + var/disguise_voice_prompt = tgui_input_list(owner, "Attempt to disguise the origin of the implanted thought? Requires a Manipulation + Subterfuge roll at the difficulty of the target's Perception + Awareness", "Disguise Voice", list("Yes", "No"), "No") + switch(disguise_voice_prompt) + if("Yes") + if(!disguise_roll) + disguise_roll = new() + disguise_roll.difficulty = target.st_get_stat(STAT_PERCEPTION) + target.st_get_stat(STAT_AWARENESS) + switch(disguise_roll.st_roll(owner, target)) + if(ROLL_SUCCESS) + disguised_voice = tgui_input_text(owner, "What will be the 'voice' of this implanted thought?", "Implanted Voice Selection") + if(ROLL_FAILURE, ROLL_BOTCH) + to_chat(span_danger("You fail to disguise your voice - the subject hears your voice in their head!")) + disguised_voice = owner.name + if("No") + disguised_voice = owner.name + telepathy_type_selected = telepathy_type + return TRUE + return FALSE + /datum/discipline_power/auspex/telepathy/activate(mob/living/target) . = ..() - var/input_message = tgui_input_text(owner, "What message will you project to them?", max_length = MAX_MESSAGE_LEN, encode = FALSE) - if (!input_message) - return - + var/input_message + var/specific_search + switch(telepathy_type_selected) + if(TELEPATHY_IMPLANT_THOUGHT) + input_message = tgui_input_text(owner, "What message will you project to them?", "Telepathic Message") + if(!input_message) + return + + if(!sanitize_input_message(input_message)) + return + + log_directed_talk(owner, target, input_message, LOG_SAY, "Telepathy") + to_chat(owner, span_notice("You project your thoughts into [target]'s mind: \"[input_message]\"")) + to_chat(target, span_boldannounce("You hear the voice of [disguised_voice] in your thoughts: \"[input_message]\"")) + + if(TELEPATHY_MIND_READING) + var/flavor_text_telepathy = "Someone nearby reads your mind without your knowing..." + get_flavor_text(successes) + var/mind_reading_search = tgui_input_list(owner, "Are you searching their mind for specific information? Deeper secrets and long-past memories require more successes.", "Mind Reading Specifics", list("Yes", "No"), "No") + if(mind_reading_search == "Yes") + specific_search = tgui_input_text(owner, "What are you trying to mind read from your victim?", "Mind Reading Search Input", max_length = MAX_MESSAGE_LEN) + if(!specific_search) + specific_search = "something specific" + + var/prompt_message = flavor_text_telepathy + if(specific_search) + prompt_message += "The telepath specifically scans your mind for : [specific_search]" + else + prompt_message += "The telepath searches your recent thoughts and emotions..." + + input_message = tgui_input_text(target, prompt_message, "Mind Being Read") + if(!input_message) + input_message = "Fragmented, unclear thoughts and impressions." + + if(!sanitize_input_message(input_message)) + return + + log_directed_talk(target, owner, input_message, LOG_SAY, "Telepathy (Mind Reading)") + to_chat(owner, span_notice("You read [target]'s thoughts with [successes] successes: [input_message]")) + +/datum/discipline_power/auspex/telepathy/proc/get_flavor_text(successes) + var/message = "As your mind is read with [successes] successes, " + switch(successes) + if(1) + message += "the most surface-level thoughts or unspoken comments are easily read, but if your character was expecting their mind to be read, they can make an effort to obfuscate their true thoughts..." + if(2) + message += "the person reading your mind begins to probe deeper into your subconcious, revealing deeper, or clearer, thoughts..." + if(3) + message += "your mind begins to be probed at a deep level, revealing verbatim thoughts, details, secrets and recent memories..." + if(4) + message += "your mind is being deeply invaded. Hidden thoughts, suppressed emotions, and secrets you've tried to bury begin to surface. The attacker can access memories and feelings you may have forgotten without you ever knowing..." + if(5 to INFINITY) + message += "your deepest secrets and most buried memories are laid bare. The telepath can access traumatic experiences, long-forgotten events, and the darkest corners of your psyche. Nothing is hidden..." + return message + +/datum/discipline_power/auspex/telepathy/proc/sanitize_input_message(input_message) //sanitisation! input_message = CAN_BYPASS_FILTER(owner) ? strip_html_full(input_message, MAX_MESSAGE_LEN) : input_message var/list/filter_result = CAN_BYPASS_FILTER(owner) ? null : is_ooc_filtered(input_message) if(filter_result) REPORT_CHAT_FILTER_TO_USER(owner, filter_result) log_filter("OOC", input_message, filter_result) - return - - log_directed_talk(owner, target, input_message, LOG_SAY, "Telepathy") - to_chat(owner, span_notice("You project your thoughts into [target]'s mind: [input_message]")) - to_chat(target, span_boldannounce("You hear a voice in your head: [input_message]")) + return FALSE + return TRUE //PSYCHIC PROJECTION /datum/discipline_power/auspex/psychic_projection @@ -277,6 +379,8 @@ else to_chat(owner, span_warning("Your mind fails to leave your body.")) +#undef TELEPATHY_MIND_READING +#undef TELEPATHY_IMPLANT_THOUGHT #undef SENSE_VISION #undef SENSE_HEARING #undef SENSE_SMELL diff --git a/modular_darkpack/modules/powers/code/discipline/obfuscate/obfuscate.dm b/modular_darkpack/modules/powers/code/discipline/obfuscate/obfuscate.dm index 99e25cd1bbcb..f1f104a7572f 100644 --- a/modular_darkpack/modules/powers/code/discipline/obfuscate/obfuscate.dm +++ b/modular_darkpack/modules/powers/code/discipline/obfuscate/obfuscate.dm @@ -21,7 +21,6 @@ COMSIG_PROJECTILE_PREHIT, COMSIG_ATOM_ATTACKBY, COMSIG_MOB_ITEM_ATTACK, - COMSIG_MOVABLE_SAY_QUOTE, COMSIG_LIVING_GRAB ) @@ -37,6 +36,19 @@ deltimer(cooldown_timer) cooldown_timer = addtimer(CALLBACK(src, PROC_REF(cooldown_expire)), COMBAT_COOLDOWN_LENGTH, TIMER_STOPPABLE | TIMER_DELETE_ME) +/datum/discipline_power/obfuscate/proc/on_talk(datum/source, list/speech_args) + SIGNAL_HANDLER + + // This is a soft reveal as only as you would only be revealed to the person next to you. (which we are missing implementation of rn) + if(speech_args[SPEECH_MODS][WHISPER_MODE] == MODE_WHISPER) + return + + to_chat(owner, span_danger("Your Obfuscation falls away as you reveal yourself!")) + try_deactivate(direct = TRUE) + + deltimer(cooldown_timer) + cooldown_timer = addtimer(CALLBACK(src, PROC_REF(cooldown_expire)), COMBAT_COOLDOWN_LENGTH, TIMER_STOPPABLE | TIMER_DELETE_ME) + /datum/discipline_power/obfuscate/proc/on_combat_signal(datum/source) SIGNAL_HANDLER @@ -87,6 +99,7 @@ RegisterSignals(owner, aggressive_signals, PROC_REF(on_combat_signal)) RegisterSignal(owner, COMSIG_MOVABLE_MOVED, PROC_REF(handle_move)) RegisterSignal(owner, COMSIG_POWER_ACTIVATE, PROC_REF(on_discipline_activation)) + RegisterSignal(owner, COMSIG_MOB_SAY, PROC_REF(on_talk)) for(var/mob/living/carbon/human/npc/NPC in GLOB.npc_list) if (NPC.danger_source == owner) @@ -97,7 +110,7 @@ . = ..() UnregisterSignal(owner, aggressive_signals) UnregisterSignal(owner, COMSIG_MOVABLE_MOVED) - UnregisterSignal(owner, COMSIG_POWER_ACTIVATE) + UnregisterSignal(owner, list(COMSIG_POWER_ACTIVATE, COMSIG_MOB_SAY)) REMOVE_TRAIT(owner, TRAIT_OBFUSCATED, OBFUSCATE_TRAIT) @@ -136,6 +149,7 @@ RegisterSignals(owner, aggressive_signals, PROC_REF(on_combat_signal)) RegisterSignal(owner, COMSIG_MOVABLE_MOVED, PROC_REF(handle_move)) RegisterSignal(owner, COMSIG_POWER_ACTIVATE, PROC_REF(on_discipline_activation)) + RegisterSignal(owner, COMSIG_MOB_SAY, PROC_REF(on_talk)) for(var/mob/living/carbon/human/npc/NPC in GLOB.npc_list) if (NPC.danger_source == owner) @@ -147,7 +161,7 @@ . = ..() UnregisterSignal(owner, aggressive_signals) UnregisterSignal(owner, COMSIG_MOVABLE_MOVED) - UnregisterSignal(owner, COMSIG_POWER_ACTIVATE) + UnregisterSignal(owner, list(COMSIG_POWER_ACTIVATE, COMSIG_MOB_SAY)) REMOVE_TRAIT(owner, TRAIT_OBFUSCATED, OBFUSCATE_TRAIT) @@ -308,6 +322,7 @@ . = ..() RegisterSignals(owner, aggressive_signals, PROC_REF(on_combat_signal)) RegisterSignal(owner, COMSIG_POWER_ACTIVATE, PROC_REF(on_discipline_activation)) + RegisterSignal(owner, COMSIG_MOB_SAY, PROC_REF(on_talk)) for(var/mob/living/carbon/human/npc/NPC in GLOB.npc_list) if (NPC.danger_source == owner) @@ -320,7 +335,7 @@ /datum/discipline_power/obfuscate/vanish_from_the_minds_eye/deactivate() . = ..() UnregisterSignal(owner, aggressive_signals) - UnregisterSignal(owner, COMSIG_POWER_ACTIVATE) + UnregisterSignal(owner, list(COMSIG_POWER_ACTIVATE, COMSIG_MOB_SAY)) REMOVE_TRAIT(owner, TRAIT_OBFUSCATED, OBFUSCATE_TRAIT) @@ -345,6 +360,7 @@ . = ..() RegisterSignals(owner, aggressive_signals, PROC_REF(on_combat_signal)) RegisterSignal(owner, COMSIG_POWER_ACTIVATE, PROC_REF(on_discipline_activation)) + RegisterSignal(owner, COMSIG_MOB_SAY, PROC_REF(on_talk)) for(var/mob/living/carbon/human/npc/NPC in GLOB.npc_list) if (NPC.danger_source == owner) @@ -354,7 +370,7 @@ /datum/discipline_power/obfuscate/cloak_the_gathering/deactivate() . = ..() UnregisterSignal(owner, aggressive_signals) - UnregisterSignal(owner, COMSIG_POWER_ACTIVATE) + UnregisterSignal(owner, list(COMSIG_POWER_ACTIVATE, COMSIG_MOB_SAY)) REMOVE_TRAIT(owner, TRAIT_OBFUSCATED, OBFUSCATE_TRAIT) diff --git a/modular_darkpack/modules/powers/code/discipline/presence/presence.dm b/modular_darkpack/modules/powers/code/discipline/presence/presence.dm index aed2b15ab46b..848065417565 100644 --- a/modular_darkpack/modules/powers/code/discipline/presence/presence.dm +++ b/modular_darkpack/modules/powers/code/discipline/presence/presence.dm @@ -41,7 +41,7 @@ //number of successes is rather critical for the efficacy of the power return successes -/datum/discipline_power/presence/proc/apply_presence_overlay(mob/living/carbon/target, resist_timer = 30 SECONDS) +/datum/discipline_power/presence/proc/apply_presence_overlay(mob/living/carbon/target) target.remove_overlay(MUTATIONS_LAYER) var/mutable_appearance/presence_overlay = mutable_appearance('modular_darkpack/modules/powers/icons/presence.dmi', "presence", -MUTATIONS_LAYER) presence_overlay.pixel_z = 1 @@ -49,14 +49,7 @@ target.apply_overlay(MUTATIONS_LAYER) SEND_SOUND(target, sound('modular_darkpack/modules/powers/sounds/presence_activate.ogg')) - // resist presence button - note to self, in the future, V20 states that the resister must continue to spend willpower if in the presence of the vamp - var/datum/action/resist_presence/resist_action = new(target) - resist_action.Grant(target) - - // remove the action after 20 seconds - addtimer(CALLBACK(resist_action, TYPE_PROC_REF(/datum/action, Remove), target), resist_timer) - -//used in awe - V20 book states that awe affects the targets of lowest willpower first if affecting multiple targets. +//used in awe - v20 book states that awe affects the targets of lowest willpower first if affecting multiple targets. /datum/discipline_power/presence/proc/sort_targets_by_willpower(list/targets) var/list/sorted = list() for(var/mob/living/carbon/target in targets) @@ -74,42 +67,6 @@ sorted += target return sorted -//datum/action to resist presence powers by burning a willpower point and making a difficulty 8 roll -/datum/action/resist_presence - name = "Resist Presence" - desc = "Burn a point of your temporary willpower to resist the effects of Presence." - button_icon = 'modular_darkpack/master_files/icons/hud/actions.dmi' - button_icon_state = "presence" - check_flags = AB_CHECK_CONSCIOUS - -/datum/action/resist_presence/Trigger(trigger_flags) - . = ..() - if(!.) - return FALSE - - var/mob/living/carbon/human/user = owner - if(!ishuman(user)) - return FALSE - - if(user.st_get_stat(STAT_TEMPORARY_WILLPOWER) <= 0) - to_chat(user, span_warning("You don't have any temporary willpower left to resist!")) - return FALSE - - user.st_set_stat(STAT_TEMPORARY_WILLPOWER, max((user.st_get_stat(STAT_TEMPORARY_WILLPOWER) - 1),0)) - to_chat(user, span_warning("You burn a point of willpower to resist the supernatural influence...")) - - var/roll_success = SSroll.storyteller_roll(user.st_get_stat(STAT_TEMPORARY_WILLPOWER), difficulty = 8, roller = user) - - if(roll_success) - user.remove_overlay(MUTATIONS_LAYER) - user.clear_alert("entrancement") - to_chat(user, span_notice("You have succeeded in resisting the effects of Presence.")) - Remove(user) - return TRUE - else - to_chat(user, span_warning("Despite your efforts, the supernatural influence remains too strong!")) - return FALSE - // AWE /datum/discipline_power/presence/awe name = "Awe" @@ -251,10 +208,10 @@ target.throw_alert("entrancement", /atom/movable/screen/alert/entrancement) log_combat(owner, target, "Used Presence Entrancement") - apply_presence_overlay(target, successes * 10 MINUTES) + apply_presence_overlay(target, successes * 1 MINUTES) to_chat(target, span_hypnophrase("You find yourself becoming completely entraced by [owner]. You are now their willing servant.")) to_chat(target, span_info("You are now the willing servant of [owner]. You will seek to please them and fulfill their every desire, but this desire will fade soon.")) - addtimer(CALLBACK(src, PROC_REF(end_entrancement), target), successes * 30 MINUTES) // might be alot considering 5 successes is 5 ingame hours which is... most of a round. + addtimer(CALLBACK(src, PROC_REF(end_entrancement), target), successes * 10 MINUTES) /datum/discipline_power/presence/entrancement/proc/end_entrancement(mob/living/carbon/human/target) to_chat(target, span_hypnophrase("Your desire to fulfill [owner]'s every desire fades.")) @@ -272,7 +229,7 @@ check_flags = DISC_CHECK_CAPABLE | DISC_CHECK_SPEAK range = 7 multi_activate = TRUE - cooldown_length = 20 MINUTES //i can already see people using this ability to summon and kill upon arrival. this cooldown should help with that. + cooldown_length = 10 MINUTES duration_length = 5 SECONDS vitae_cost = 1 var/successes = 0 @@ -341,9 +298,10 @@ check_flags = DISC_CHECK_CAPABLE | DISC_CHECK_SPEAK range = 7 multi_activate = TRUE - cooldown_length = 12 MINUTES - duration_length = 3 MINUTES - //willpower_cost = 1 + cooldown_length = 3 MINUTES + duration_length = 2 MINUTES + willpower_cost = 1 + violates_masquerade = TRUE var/list/affected_targets = list() /datum/discipline_power/presence/majesty/pre_activation_checks(mob/living/target) @@ -363,7 +321,17 @@ apply_presence_overlay(hearer, 3 MINUTES) affected_targets[hearer] = hearer_successes - to_chat(hearer, span_hypnophrase("You find yourself completely submitting to the Majesty of [owner]. Their every word is your utmost priority, every frown of displeasure crushing your soul. You find yourself humbling yourself entirely in their overwhelming presence.")) + to_chat(hearer, span_hypnophrase("You find yourself completely submitting to the Majesty of [owner]. Their every word is your utmost priority, every frown of displeasure crushing your soul. You find yourself humbled entirely in their overwhelming presence.")) + + // this ability is often used to end combat scenes but it often ignored. + var/pacifism_delay = hearer_successes * 10 SECONDS + if(hearer_successes > 0) + to_chat(hearer, span_info("Despite the overwhelming presence, your will allows you to resist for [pacifism_delay / 10] seconds before you're forced into pacifism.")) + addtimer(CALLBACK(src, PROC_REF(apply_pacifism), hearer), pacifism_delay) + else + ADD_TRAIT(hearer, TRAIT_PACIFISM, "Majesty") + to_chat(hearer, span_info("You are completely unable to act against [owner].")) + ADD_TRAIT(owner, TRAIT_PACIFISM, "Majesty") if(hearer_successes > 0) to_chat(hearer, span_info("Despite the overwhelming presence, your will allows you to make [hearer_successes] contradictory action\s until youre allowed to leave [owner]'s company.")) @@ -376,12 +344,19 @@ /datum/discipline_power/presence/majesty/deactivate(mob/living/carbon/human/target) . = ..() + REMOVE_TRAIT(owner, TRAIT_PACIFISM, "Majesty") for(var/mob/living/carbon/human/affected_target in affected_targets) if(affected_target) affected_target.remove_overlay(MUTATIONS_LAYER) to_chat(affected_target, span_hypnophrase("The overwhelming presence of [owner] fades, and your will returns to normal.")) + REMOVE_TRAIT(affected_target, TRAIT_PACIFISM, "Majesty") affected_targets.Cut() +/datum/discipline_power/presence/majesty/proc/apply_pacifism(mob/living/carbon/human/hearer) + if(hearer && (hearer in affected_targets)) + ADD_TRAIT(hearer, TRAIT_PACIFISM, "Majesty") + to_chat(hearer, span_warning("Your resistance crumbles - you can no longer bring yourself to act against [owner]!")) + // LOVE /datum/discipline_power/presence/love name = "Love" diff --git a/modular_darkpack/modules/powers/code/discipline/protean/beast_form.dm b/modular_darkpack/modules/powers/code/discipline/protean/beast_form.dm index 09e15acbb917..5757d87c5344 100644 --- a/modular_darkpack/modules/powers/code/discipline/protean/beast_form.dm +++ b/modular_darkpack/modules/powers/code/discipline/protean/beast_form.dm @@ -28,7 +28,7 @@ . = ..() if(ishuman(grant_to)) var/mob/living/carbon/human/grant_to_human = grant_to - if(grant_to_human.is_clan(/datum/vampire_clan/gangrel)) + if(grant_to_human.is_clan(/datum/subsplat/vampire_clan/gangrel)) possible_shapes += list( /mob/living/basic/bear/vampire/protean ) diff --git a/modular_darkpack/modules/powers/code/discipline_gain.dm b/modular_darkpack/modules/powers/code/discipline_gain.dm index 15dba8e908c7..3b94796ade6a 100644 --- a/modular_darkpack/modules/powers/code/discipline_gain.dm +++ b/modular_darkpack/modules/powers/code/discipline_gain.dm @@ -30,8 +30,8 @@ return TRUE //next, go through all Clans to check if they have access to any with the Discipline - for (var/clan_type in subtypesof(/datum/vampire_clan)) - var/datum/vampire_clan/clan_checking = new clan_type + for (var/clan_type in subtypesof(/datum/subsplat/vampire_clan)) + var/datum/subsplat/vampire_clan/clan_checking = new clan_type //skip this if they can't access it due to whitelists // DARKPACK TODO - reimplement whitelisting diff --git a/modular_darkpack/modules/retail/code/_retail.dm b/modular_darkpack/modules/retail/code/_retail.dm index 690ac5264a79..4747e3b51b38 100644 --- a/modular_darkpack/modules/retail/code/_retail.dm +++ b/modular_darkpack/modules/retail/code/_retail.dm @@ -6,9 +6,10 @@ name = "retail outlet" desc = "A counter for partaking in wretched capitalism. Takes cash or card." icon = 'modular_darkpack/modules/retail/icons/vendors_shops.dmi' - icon_state = "menu" + icon_state = "register" density = FALSE anchored = TRUE + anchored_tabletop_offset = 6 var/owner_needed = TRUE //Does an npc need to be here for this var/mob/living/carbon/human/npc/my_owner //tracks existence of owner var/is_gun_store = FALSE diff --git a/modular_darkpack/modules/retail/icons/vendors_shops.dmi b/modular_darkpack/modules/retail/icons/vendors_shops.dmi index ca2d28f94424..a64644e13778 100644 Binary files a/modular_darkpack/modules/retail/icons/vendors_shops.dmi and b/modular_darkpack/modules/retail/icons/vendors_shops.dmi differ diff --git a/modular_darkpack/modules/ritual_abyss_mysticism/code/abyss_tome.dm b/modular_darkpack/modules/ritual_abyss_mysticism/code/abyss_tome.dm index f964ed5abff4..e67351d81238 100644 --- a/modular_darkpack/modules/ritual_abyss_mysticism/code/abyss_tome.dm +++ b/modular_darkpack/modules/ritual_abyss_mysticism/code/abyss_tome.dm @@ -3,7 +3,7 @@ desc = "The secrets of Abyss Mysticism..." icon_state = "mystic" icon = 'modular_darkpack/modules/ritual_abyss_mysticism/icons/abyss_mysticism_tome.dmi' - onflooricon = 'modular_darkpack/modules/ritual_abyss_mysticism/icons/abyss_mysticism_onfloor.dmi' + ONFLOOR_ICON_HELPER('modular_darkpack/modules/ritual_abyss_mysticism/icons/abyss_mysticism_onfloor.dmi') rune_type = /obj/ritual_rune/abyss /obj/item/ritual_tome/abyss/attack_self(mob/user) diff --git a/modular_darkpack/modules/ritual_necromancy/code/necromancy_tome.dm b/modular_darkpack/modules/ritual_necromancy/code/necromancy_tome.dm index 867e24c951ed..7aabae65ad42 100644 --- a/modular_darkpack/modules/ritual_necromancy/code/necromancy_tome.dm +++ b/modular_darkpack/modules/ritual_necromancy/code/necromancy_tome.dm @@ -3,7 +3,7 @@ desc = "An old tome bound in peculiar leather." icon_state = "necronomicon" icon = 'modular_darkpack/modules/ritual_necromancy/icons/necromancy_tome.dmi' - onflooricon = 'modular_darkpack/modules/ritual_necromancy/icons/necromancy_tome_onfloor.dmi' + ONFLOOR_ICON_HELPER('modular_darkpack/modules/ritual_necromancy/icons/necromancy_tome_onfloor.dmi') rune_type = /obj/ritual_rune/necromancy var/list/products_list = list( // placeholder, idea is that its similar to thaumaturgy archives diff --git a/modular_darkpack/modules/ritual_thaumaturgy/arcane_tome.dm b/modular_darkpack/modules/ritual_thaumaturgy/arcane_tome.dm index bc7f56887572..ee07ed08586c 100644 --- a/modular_darkpack/modules/ritual_thaumaturgy/arcane_tome.dm +++ b/modular_darkpack/modules/ritual_thaumaturgy/arcane_tome.dm @@ -3,7 +3,7 @@ desc = "The secrets of Blood Magic..." icon_state = "arcane" icon = 'modular_darkpack/modules/ritual_thaumaturgy/icons/arcane_tome.dmi' - onflooricon = 'modular_darkpack/modules/ritual_thaumaturgy/icons/arcane_tome_onfloor.dmi' + ONFLOOR_ICON_HELPER('modular_darkpack/modules/ritual_thaumaturgy/icons/arcane_tome_onfloor.dmi') rune_type = /obj/ritual_rune/thaumaturgy /obj/item/ritual_tome/arcane/attack_self(mob/user) diff --git a/modular_darkpack/modules/ritual_thaumaturgy/rituals/gargoyle_transformation.dm b/modular_darkpack/modules/ritual_thaumaturgy/rituals/gargoyle_transformation.dm index 30511d558035..0465847e8db2 100644 --- a/modular_darkpack/modules/ritual_thaumaturgy/rituals/gargoyle_transformation.dm +++ b/modular_darkpack/modules/ritual_thaumaturgy/rituals/gargoyle_transformation.dm @@ -15,7 +15,7 @@ if(H == usr) to_chat(usr, span_warning("You may not turn yourself into a Gargoyle!")) return - else if(H.is_clan(/datum/vampire_clan/gargoyle)) + else if(H.is_clan(/datum/subsplat/vampire_clan/gargoyle)) to_chat(usr, span_warning("You may not use this ritual on a Gargoyle!")) return else if(H.stat > SOFT_CRIT) @@ -126,7 +126,7 @@ // Revive the specimen and turn them into a gargoyle kindred target_body.revive(TRUE) target_body.adjust_agg_loss(-100) - target_body.set_clan(/datum/vampire_clan/gargoyle) + target_body.set_clan(/datum/subsplat/vampire_clan/gargoyle) target_body.blood_bond(usr) target_body.real_name = old_name // the ritual for some reason is deleting their old name and replacing it with a random name. target_body.name = old_name diff --git a/modular_darkpack/modules/splats/code/subsplat/pref.dm b/modular_darkpack/modules/splats/code/subsplat/pref.dm new file mode 100644 index 000000000000..62c260938ab9 --- /dev/null +++ b/modular_darkpack/modules/splats/code/subsplat/pref.dm @@ -0,0 +1,7 @@ +/datum/preference/choiced/subsplat + abstract_type = /datum/preference/choiced/subsplat + savefile_identifier = PREFERENCE_CHARACTER + category = PREFERENCE_CATEGORY_FEATURES + priority = PREFERENCE_PRIORITY_WORLD_OF_DARKNESS + must_have_relevant_trait = TRUE + should_generate_icons = TRUE diff --git a/modular_darkpack/modules/storyteller_dice/code/roll_datum.dm b/modular_darkpack/modules/storyteller_dice/code/roll_datum.dm index 1d2620324593..7621113087d1 100644 --- a/modular_darkpack/modules/storyteller_dice/code/roll_datum.dm +++ b/modular_darkpack/modules/storyteller_dice/code/roll_datum.dm @@ -67,7 +67,7 @@ title += " - [bumper_text] [span_tinynoticeital(roll_output_type)]" var/output_combined = fieldset_block(title, jointext(last_output_text, "
"), "boxed_message") - for(var/mob/player_mob in get_mobs_to_show(roller)) + for(var/mob/player_mob in get_mobs_to_show(roller, target)) var/roll_important_to_me = FALSE if(!spammy_roll && (player_mob == roller || target)) roll_important_to_me = TRUE @@ -88,12 +88,17 @@ return output -/datum/storyteller_roll/proc/get_mobs_to_show(mob/living/roller) +/datum/storyteller_roll/proc/get_mobs_to_show(mob/living/roller, atom/target) switch(roll_output_type) if(ROLL_PUBLIC) return viewers(DEFAULT_MESSAGE_RANGE, roller) if(ROLL_PRIVATE) return list(roller) + if(ROLL_PRIVATE_AND_TARGET) + if(roller == target || !isliving(target)) + return list(roller) + else + return list(roller, target) if(ROLL_PRIVATE_ADMIN) return GLOB.admins + roller if(ROLL_ADMIN) diff --git a/modular_darkpack/modules/storyteller_dice/code/roll_subtypes.dm b/modular_darkpack/modules/storyteller_dice/code/roll_subtypes.dm index 1bfa854c810d..1a06bc1ddfe8 100644 --- a/modular_darkpack/modules/storyteller_dice/code/roll_subtypes.dm +++ b/modular_darkpack/modules/storyteller_dice/code/roll_subtypes.dm @@ -10,6 +10,52 @@ // Mostly TTRPG accurate rolls +// Combat +/datum/storyteller_roll/attack + bumper_text = "attack" + spammy_roll = TRUE + applicable_stats = list(STAT_DEXTERITY, STAT_BRAWL) + +/datum/storyteller_roll/attack/punch + bumper_text = "attack (punch)" + +/datum/storyteller_roll/attack/bite + bumper_text = "attack (bite)" + difficulty = 5 + +/datum/storyteller_roll/attack/kick + bumper_text = "attack (kick)" + difficulty = 7 + +/datum/storyteller_roll/attack/claw + bumper_text = "attack (claw)" + +/datum/storyteller_roll/attack/sweep + bumper_text = "attack (sweep)" + difficulty = 8 + + +/datum/storyteller_roll/damage + bumper_text = "damage" + numerical = TRUE + spammy_roll = TRUE + applicable_stats = list(STAT_STRENGTH) + +/datum/storyteller_roll/damage/punch + bumper_text = "damage (punch)" + +/datum/storyteller_roll/damage/bite + bumper_text = "damage (bite)" + // + 1 + +/datum/storyteller_roll/damage/kick + bumper_text = "damage (kick)" + // + 1 + +/datum/storyteller_roll/damage/claw + bumper_text = "damage (claw)" + // + 2 + // Physical Feats /datum/storyteller_roll/lockpick bumper_text = "lockpicking" diff --git a/modular_darkpack/modules/taser/code/taser.dm b/modular_darkpack/modules/taser/code/taser.dm index f7b703b09bef..373b27fa9238 100644 --- a/modular_darkpack/modules/taser/code/taser.dm +++ b/modular_darkpack/modules/taser/code/taser.dm @@ -2,8 +2,9 @@ name = "V26 taser" desc = "A less-than-lethal stun gun. Fires an electrode pair that will impale and electrocute noncompliant suspects." icon = 'modular_darkpack/modules/taser/icons/taser.dmi' - icon_state = "taser_wod" + icon_state = "taser" inhand_icon_state = null // TODO: Make inhands for these + ONFLOOR_ICON_HELPER('modular_darkpack/modules/taser/icons/taser_onfloor.dmi') ammo_type = list(/obj/item/ammo_casing/energy/electrode/darkpack) charge_sections = 2 @@ -21,6 +22,7 @@ base_icon_state = "handtaser" inhand_icon_state = null // TODO: Make inhands for these // worn_icon_state = "baton" // TODO: make an onmob for this + ONFLOOR_ICON_HELPER('modular_darkpack/modules/taser/icons/taser_onfloor.dmi') force = 4 armor_type = /datum/armor/none throwforce = 2 diff --git a/modular_darkpack/modules/taser/icons/taser.dmi b/modular_darkpack/modules/taser/icons/taser.dmi index 71fc874efccf..6016323b62e1 100644 Binary files a/modular_darkpack/modules/taser/icons/taser.dmi and b/modular_darkpack/modules/taser/icons/taser.dmi differ diff --git a/modular_darkpack/modules/taser/icons/taser_onfloor.dmi b/modular_darkpack/modules/taser/icons/taser_onfloor.dmi new file mode 100644 index 000000000000..982230c01adc Binary files /dev/null and b/modular_darkpack/modules/taser/icons/taser_onfloor.dmi differ diff --git a/modular_darkpack/modules/unit_tests/apply_all_clans.dm b/modular_darkpack/modules/unit_tests/apply_all_clans.dm index 2eb58711e47e..0bd3148e4ef6 100644 --- a/modular_darkpack/modules/unit_tests/apply_all_clans.dm +++ b/modular_darkpack/modules/unit_tests/apply_all_clans.dm @@ -7,13 +7,13 @@ human.mock_client = new /datum/client_interface() human.make_kindred() - for(var/type in valid_subtypesof(/datum/vampire_clan)) + for(var/type in valid_subtypesof(/datum/subsplat/vampire_clan)) human.set_clan(type) TEST_ASSERT(human.is_clan(type), "[type] was somehow not applied to the human") // Verify there is no extra bugs when missing a client human.mock_client = null - for(var/type in valid_subtypesof(/datum/vampire_clan)) + for(var/type in valid_subtypesof(/datum/subsplat/vampire_clan)) human.set_clan(type) TEST_ASSERT(human.is_clan(type), "[type] was somehow not applied to the human without a client") diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/preferences/clan.dm b/modular_darkpack/modules/vampire_the_masquerade/code/preferences/clan.dm deleted file mode 100644 index 285083c7407a..000000000000 --- a/modular_darkpack/modules/vampire_the_masquerade/code/preferences/clan.dm +++ /dev/null @@ -1,19 +0,0 @@ -/datum/preference/choiced/vampire_clan - savefile_key = "vampire_clan" - savefile_identifier = PREFERENCE_CHARACTER - category = PREFERENCE_CATEGORY_FEATURES - priority = PREFERENCE_PRIORITY_WORLD_OF_DARKNESS - main_feature_name = "Clan" - relevant_inherent_trait = TRAIT_VTM_CLANS - must_have_relevant_trait = TRUE - should_generate_icons = TRUE - -/datum/preference/choiced/vampire_clan/init_possible_values() - // DARKPACK TODO - implement whitelisting - return assoc_to_keys(GLOB.vampire_clan_list) - -/datum/preference/choiced/vampire_clan/icon_for(value) - return uni_icon('modular_darkpack/modules/vampire_the_masquerade/icons/vampire_clans.dmi', get_vampire_clan(value).id) - -/datum/preference/choiced/vampire_clan/apply_to_human(mob/living/carbon/human/target, value) - target.set_clan(value, TRUE) diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/splats/kindred_splat/kindred_splat.dm b/modular_darkpack/modules/vampire_the_masquerade/code/splats/kindred_splat/kindred_splat.dm index 9569e1c51c06..175de38ea834 100644 --- a/modular_darkpack/modules/vampire_the_masquerade/code/splats/kindred_splat/kindred_splat.dm +++ b/modular_darkpack/modules/vampire_the_masquerade/code/splats/kindred_splat/kindred_splat.dm @@ -32,7 +32,7 @@ /// How quickly they can spend vitae. Depends on Generation and affects abilities like bloodheal var/vitae_spending_rate /// Which vampiric bloodline or Clan they fall into. Determines natural Disciplines. Singleton reference, never modify - var/datum/vampire_clan/clan + var/datum/subsplat/vampire_clan/clan /// Which morality they follow, Humanity if false and Enlightenment if true var/enlightenment /// The Kindred who created this Kindred, null unless Embraced in-round diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/splats/kindred_splat/make_kindred.dm b/modular_darkpack/modules/vampire_the_masquerade/code/splats/kindred_splat/make_kindred.dm index 44421fb3e4b5..637fbe7fdab2 100644 --- a/modular_darkpack/modules/vampire_the_masquerade/code/splats/kindred_splat/make_kindred.dm +++ b/modular_darkpack/modules/vampire_the_masquerade/code/splats/kindred_splat/make_kindred.dm @@ -1,7 +1,7 @@ /** * Makes the mob a Kindred with the given Generation, Clan, morality, and sire. */ -/mob/living/proc/make_kindred(generation = DEFAULT_GENERATION, datum/vampire_clan/clan, enlightenment, mob/living/sire) +/mob/living/proc/make_kindred(generation = DEFAULT_GENERATION, datum/subsplat/vampire_clan/clan, enlightenment, mob/living/sire) RETURN_TYPE(/datum/splat/vampire/kindred) return add_splat(/datum/splat/vampire/kindred, generation, clan, enlightenment, sire) @@ -21,9 +21,9 @@ var/datum/splat/vampire/kindred/sire_splat = iskindred(sire) - var/datum/vampire_clan/childe_clan = sire_splat.clan + var/datum/subsplat/vampire_clan/childe_clan = sire_splat.clan // 5% chance of childer being Caitiff instead of their sire's Clan if (!always_same_clan && prob(5)) - childe_clan = GLOB.vampire_clans[/datum/vampire_clan/caitiff] + childe_clan = GLOB.vampire_clans[/datum/subsplat/vampire_clan/caitiff] return make_kindred(sire_splat.generation + 1, childe_clan, FALSE, sire) diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/__vampire_clan.dm b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/__vampire_clan.dm index 2b2f8760e71f..f003e59fc87a 100644 --- a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/__vampire_clan.dm +++ b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/__vampire_clan.dm @@ -1,11 +1,5 @@ -/datum/vampire_clan - abstract_type = /datum/vampire_clan - /// Name of the Clan - var/name - /// Identifier in sprites for the Clan - var/id - /// Description of the Clan - var/desc +/datum/subsplat/vampire_clan + abstract_type = /datum/subsplat/vampire_clan /// The icon for this clan. Used in preferences. var/icon /// Description of the Clan's supernatural curse @@ -61,8 +55,8 @@ * * vampire - Human being given the Clan * * joining_round - If this Clan is being applied as the mob joins the round */ -/datum/vampire_clan/proc/on_gain(mob/living/carbon/human/vampire, joining_round) - SHOULD_CALL_PARENT(TRUE) +/datum/subsplat/vampire_clan/on_gain(mob/living/carbon/human/vampire, joining_round) + . = ..() // Apply alternative sprites if (alt_sprite) @@ -98,8 +92,8 @@ * Arguments: * * vampire - Human losing the Clan. */ -/datum/vampire_clan/proc/on_lose(mob/living/carbon/human/vampire) - SHOULD_CALL_PARENT(TRUE) +/datum/subsplat/vampire_clan/on_lose(mob/living/carbon/human/vampire) + . = ..() // Remove unique Clan feature traits for (var/trait in clan_traits) @@ -130,7 +124,7 @@ * Arguments: * * vampire - Human with this Clan joining the round. */ -/datum/vampire_clan/proc/on_join_round(mob/living/carbon/human/vampire) +/datum/subsplat/vampire_clan/proc/on_join_round(mob/living/carbon/human/vampire) SIGNAL_HANDLER SHOULD_CALL_PARENT(TRUE) @@ -159,10 +153,10 @@ * * joining_round - If this Clan is being given at roundstart and should call on_join_round */ /mob/living/carbon/human/proc/set_clan(setting_clan, joining_round) - var/datum/vampire_clan/previous_clan = get_clan() + var/datum/subsplat/vampire_clan/previous_clan = get_clan() // Convert IDs and typepaths to singletons, or just directly assign if already singleton - var/datum/vampire_clan/new_clan = get_vampire_clan(setting_clan) + var/datum/subsplat/vampire_clan/new_clan = get_vampire_clan(setting_clan) // Handle losing Clan previous_clan?.on_lose(src) @@ -181,7 +175,7 @@ kindred.clan.on_gain(src, joining_round) /mob/living/proc/get_clan() - RETURN_TYPE(/datum/vampire_clan) + RETURN_TYPE(/datum/subsplat/vampire_clan) return iskindred(src)?.clan diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clan_globals.dm b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clan_globals.dm index 220d9e72d5f4..9526255d3735 100644 --- a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clan_globals.dm +++ b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clan_globals.dm @@ -1,15 +1,8 @@ /// Associative list of Clan names to typepaths -GLOBAL_LIST_INIT(vampire_clan_list, init_vampire_clan_list()) - -/proc/init_vampire_clan_list() - var/list/clan_list = list() - for (var/datum/vampire_clan/clan_type as anything in valid_subtypesof(/datum/vampire_clan)) - clan_list[clan_type::name] = clan_type - clan_list = sort_list(clan_list) - return clan_list +GLOBAL_LIST_INIT(vampire_clan_list, init_subsplat_list(/datum/subsplat/vampire_clan)) /// Associative list of Clan typepaths to singletons -GLOBAL_LIST_INIT_TYPED(vampire_clans, /datum/vampire_clan, init_subtypes_w_path_keys(/datum/vampire_clan, list())) +GLOBAL_LIST_INIT_TYPED(vampire_clans, /datum/subsplat/vampire_clan, init_subtypes_w_path_keys(/datum/subsplat/vampire_clan, list())) /// All frenzied players GLOBAL_LIST_EMPTY(frenzy_list) diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clan_helpers.dm b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clan_helpers.dm index d444a23aa710..2722fbb79dea 100644 --- a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clan_helpers.dm +++ b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clan_helpers.dm @@ -7,7 +7,7 @@ * * clan_identifier - Name, typepath, or singleton of the Clan being retrieved */ /proc/get_vampire_clan(clan_identifier) - RETURN_TYPE(/datum/vampire_clan) + RETURN_TYPE(/datum/subsplat/vampire_clan) if (ispath(clan_identifier)) return GLOB.vampire_clans[clan_identifier] diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clan_mark_pref.dm b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clan_mark_pref.dm index 90b12e5b1ca9..cf50d39779dc 100644 --- a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clan_mark_pref.dm +++ b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clan_mark_pref.dm @@ -9,8 +9,8 @@ . = ..() if(!.) // Make sure we acctually can select clan in the first place return FALSE - var/clan_type = preferences.read_preference(/datum/preference/choiced/vampire_clan) - var/datum/vampire_clan/clan = get_vampire_clan(clan_type) + var/clan_type = preferences.read_preference(/datum/preference/choiced/subsplat/vampire_clan) + var/datum/subsplat/vampire_clan/clan = get_vampire_clan(clan_type) if(!clan) return FALSE if(clan.accessories) @@ -19,8 +19,8 @@ /datum/preference/external_choiced/clan_mark/get_choices(datum/preferences/preferences) if(!preferences) return list("none") - var/clan_type = preferences.read_preference(/datum/preference/choiced/vampire_clan) - var/datum/vampire_clan/clan = get_vampire_clan(clan_type) + var/clan_type = preferences.read_preference(/datum/preference/choiced/subsplat/vampire_clan) + var/datum/subsplat/vampire_clan/clan = get_vampire_clan(clan_type) if(!clan || !clan.accessories) return list("none") return clan.accessories @@ -31,7 +31,7 @@ /datum/preference/external_choiced/clan_mark/apply_to_human(mob/living/carbon/human/target, value) if(!value) return - var/datum/vampire_clan/clan = target.get_clan() + var/datum/subsplat/vampire_clan/clan = target.get_clan() if(!length(clan?.accessories)) return target.remove_overlay(clan.accessories_layers[value]) diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clan_pref.dm b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clan_pref.dm new file mode 100644 index 000000000000..e0eb7a7a9c54 --- /dev/null +++ b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clan_pref.dm @@ -0,0 +1,14 @@ +/datum/preference/choiced/subsplat/vampire_clan + savefile_key = "vampire_clan" + main_feature_name = "Clan" + relevant_inherent_trait = TRAIT_VTM_CLANS + +/datum/preference/choiced/subsplat/vampire_clan/init_possible_values() + // DARKPACK TODO - implement whitelisting + return assoc_to_keys(GLOB.vampire_clan_list) + +/datum/preference/choiced/subsplat/vampire_clan/icon_for(value) + return uni_icon('modular_darkpack/modules/vampire_the_masquerade/icons/vampire_clans.dmi', get_vampire_clan(value).id) + +/datum/preference/choiced/subsplat/vampire_clan/apply_to_human(mob/living/carbon/human/target, value) + target.set_clan(value, TRUE) diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/baali/baali.dm b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/baali/baali.dm index c5587ac585c1..254e75e1a62f 100644 --- a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/baali/baali.dm +++ b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/baali/baali.dm @@ -1,4 +1,4 @@ -/datum/vampire_clan/baali +/datum/subsplat/vampire_clan/baali name = "Baali" id = VAMPIRE_CLAN_BAALI desc = "The Baali are a bloodline of vampires associated with demon worship. Because of their affinity with the unholy, the Baali are particularly vulnerable to holy iconography, holy ground and holy water. They are highly vulnerable to True Faith." @@ -20,7 +20,7 @@ whitelisted = TRUE clan_keys = /obj/item/vamp/keys/baali -/datum/vampire_clan/baali/on_gain(mob/living/carbon/human/H) +/datum/subsplat/vampire_clan/baali/on_gain(mob/living/carbon/human/H) . = ..() H.add_faction(VAMPIRE_CLAN_BAALI) diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/banu_haqim.dm b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/banu_haqim.dm index 173dfa30a5df..8267d376e392 100644 --- a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/banu_haqim.dm +++ b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/banu_haqim.dm @@ -1,4 +1,4 @@ -/datum/vampire_clan/banu_haqim +/datum/subsplat/vampire_clan/banu_haqim name = "Banu Haqim" id = VAMPIRE_CLAN_BANU_HAQIM desc = "Banu Haqim, also known as Assamites, are traditionally seen by Western Kindred as dangerous assassins and diablerists, but in truth they are guardians, warriors, and scholars who seek to distance themselves from the Jyhad." diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/brujah.dm b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/brujah.dm index 805920fed25e..fe5ffca57dbe 100644 --- a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/brujah.dm +++ b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/brujah.dm @@ -1,4 +1,4 @@ -/datum/vampire_clan/brujah +/datum/subsplat/vampire_clan/brujah name = "Brujah" id = VAMPIRE_CLAN_BRUJAH desc = "The Brujah are a clan of radicals and troublemakers, Embracing those willing to put someone in their place if the situation calls for it. Most see themselves as warriors with a cause, and these Rebels are guided by their passions, strength, and dedication to their ideals — whatever those may be." diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/caitiff.dm b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/caitiff.dm index 4e72da1d616c..96f66546d826 100644 --- a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/caitiff.dm +++ b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/caitiff.dm @@ -1,4 +1,4 @@ -/datum/vampire_clan/caitiff +/datum/subsplat/vampire_clan/caitiff name = "Caitiff" id = VAMPIRE_CLAN_CAITIFF desc = "Caitiffs are rare Cainites who do not officially belong to any clan. These vampires have no inherent clan weakness, but no inherent disciplines as well. None of the typical clan markers apply to them. Although the Caitiff have manifested throughout history, they tend to do so more frequently among the higher generations, such that the terms \"Caitiff\" and \"Thin-blooded\" are often considered synonymous. While there is considerable overlap, not all Caitiff are thin-bloods." diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/cappadocian.dm b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/cappadocian.dm index f1d3ae52b17c..5be725366b46 100644 --- a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/cappadocian.dm +++ b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/cappadocian.dm @@ -1,4 +1,4 @@ -/datum/vampire_clan/cappadocian +/datum/subsplat/vampire_clan/cappadocian name = "Cappadocian" id = VAMPIRE_CLAN_CAPPADOCIAN desc = "A presumed-to-be-extinct Clan of necromancers, the Cappadocians studied death specifically in the physical world. The Giovanni were Embraced into their line to help further their studies into the underworld. They were rewarded with Diablerie and the destruction of their Clan and founder." @@ -14,7 +14,7 @@ whitelisted = TRUE -/datum/vampire_clan/cappadocian/on_gain(mob/living/carbon/human/H) +/datum/subsplat/vampire_clan/cappadocian/on_gain(mob/living/carbon/human/H) . = ..() var/years_undead = H.chronological_age - H.age @@ -28,7 +28,7 @@ if (500 to INFINITY) H.rot_body(4) -/datum/vampire_clan/cappadocian/on_join_round(mob/living/carbon/human/H) +/datum/subsplat/vampire_clan/cappadocian/on_join_round(mob/living/carbon/human/H) . = ..() // Only old, skeletonised Cappadocians need the robes and mask diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/doc.dm b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/doc.dm index 888cebebe4b5..1cf96f9a5c19 100644 --- a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/doc.dm +++ b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/doc.dm @@ -1,4 +1,4 @@ -/datum/vampire_clan/daughters_of_cacophony +/datum/subsplat/vampire_clan/daughters_of_cacophony name = "Daughters of Cacophony" id = VAMPIRE_CLAN_DAUGHTERS_OF_CACOPHONY desc = "Currently composed mostly of women (due to the associated difficulty in educating someone with the vocal range of most males), the Daughters practice Melpominee, a Discipline which allows the Daughters to invoke strange effects through singing. The Daughters are the choralistes par excellence of the undead, and hosting a gathering of them is worth high prestige for the Toreador." diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/gangrel.dm b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/gangrel.dm index 5b7b49b55d23..3773f4706b82 100644 --- a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/gangrel.dm +++ b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/gangrel.dm @@ -1,4 +1,4 @@ -/datum/vampire_clan/gangrel +/datum/subsplat/vampire_clan/gangrel name = "Gangrel" id = VAMPIRE_CLAN_GANGREL desc = "Often closer to beasts than other vampires, the Gangrel style themselves apex predators. These Ferals prowl the wilds as easily as the urban jungle, and no clan of vampires can match their ability to endure, survive, and thrive in any environment. Often fiercely territorial, their shapeshifting abilities even give the undead pause." @@ -14,7 +14,7 @@ accessories = list("beast_legs", "beast_tail", "beast_tail_and_legs", "none") accessories_layers = list("beast_legs" = BODY_ADJ_LAYER, "beast_tail" = BODY_ADJ_LAYER, "beast_tail_and_legs" = BODY_ADJ_LAYER, "none" = BODY_ADJ_LAYER) -/datum/vampire_clan/gangrel/city +/datum/subsplat/vampire_clan/gangrel/city name = "City Gangrel" id = VAMPIRE_CLAN_CITY_GANGREL icon = "city_gangrel" diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/gargoyle.dm b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/gargoyle.dm index 1f23fcfaf039..35a58180f285 100644 --- a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/gargoyle.dm +++ b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/gargoyle.dm @@ -1,4 +1,4 @@ -/datum/vampire_clan/gargoyle +/datum/subsplat/vampire_clan/gargoyle name = "Gargoyle" id = VAMPIRE_CLAN_GARGOYLE desc = "The Gargoyles are a vampiric bloodline created by the Tremere as their servitors. Although technically not a Tremere bloodline, the bloodline is largely under their control. In the Final Nights, Gargoyle populations seem to be booming; this is largely because older, free Gargoyles are coming out of hiding to join the Camarilla, because more indentured Gargoyles break free from the clutches of the Tremere, and because the free Gargoyles have also begun to Embrace more mortals on their own." @@ -39,7 +39,7 @@ ) whitelisted = TRUE -/datum/vampire_clan/gargoyle/on_gain(mob/living/carbon/human/H) +/datum/subsplat/vampire_clan/gargoyle/on_gain(mob/living/carbon/human/H) . = ..() //H.dna.species.wings_icon = "Gargoyle" diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/giovanni.dm b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/giovanni.dm index c176a7a922d9..354d5a6c4d81 100644 --- a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/giovanni.dm +++ b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/giovanni.dm @@ -1,4 +1,4 @@ -/datum/vampire_clan/giovanni +/datum/subsplat/vampire_clan/giovanni name = "Giovanni" id = VAMPIRE_CLAN_GIOVANNI desc = "The Giovanni are the usurpers of Clan Cappadocian and one of the youngest clans. The Giovanni has historically been both a clan and a family. They Embrace almost exclusively within their family, and are heavily focused on the goals of money and necromantic power." @@ -15,7 +15,7 @@ male_clothes = /obj/item/clothing/under/vampire/suit female_clothes = /obj/item/clothing/under/vampire/suit/female -/datum/vampire_clan/giovanni/on_join_round(mob/living/carbon/human/H) +/datum/subsplat/vampire_clan/giovanni/on_join_round(mob/living/carbon/human/H) . = ..() //H.grant_language(/datum/language/italian) // DARKPACK TODO - LANGUAGES diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/kiasyd/kiasyd.dm b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/kiasyd/kiasyd.dm index 83944f36d595..8c92be05a4c6 100644 --- a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/kiasyd/kiasyd.dm +++ b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/kiasyd/kiasyd.dm @@ -1,4 +1,4 @@ -/datum/vampire_clan/kiasyd +/datum/subsplat/vampire_clan/kiasyd name = "Kiasyd" id = VAMPIRE_CLAN_KIASYD desc = "The Kiasyd are a bloodline of the Lasombra founded after a mysterious \"accident\" involving the Lasombra Marconius of Strasbourg. The \"accident\", involving faeries and the blood of \"Zeernebooch, a god of the Underworld\", resulted in Marconius gaining several feet in height, turning chalky white and developing large, elongated black eyes." @@ -21,7 +21,7 @@ accessories = list("fae_ears", "none") accessories_layers = list("fae_ears" = BODY_FRONT_LAYER, "none" = BODY_FRONT_LAYER) -/datum/vampire_clan/kiasyd/on_gain(mob/living/carbon/human/vampire, joining_round) +/datum/subsplat/vampire_clan/kiasyd/on_gain(mob/living/carbon/human/vampire, joining_round) . = ..() /* // Kiasyd are made taller and thinner @@ -34,7 +34,7 @@ var/obj/item/organ/eyes/kiasyd/weird_eyes = new() weird_eyes.Insert(vampire, TRUE, DELETE_IF_REPLACED) -/datum/vampire_clan/kiasyd/on_lose(mob/living/carbon/human/vampire) +/datum/subsplat/vampire_clan/kiasyd/on_lose(mob/living/carbon/human/vampire) . = ..() /* @@ -46,7 +46,7 @@ vampire.update_body() -/datum/vampire_clan/kiasyd/on_join_round(mob/living/carbon/human/H) +/datum/subsplat/vampire_clan/kiasyd/on_join_round(mob/living/carbon/human/H) . = ..() //give them sunglasses to hide their freakish eyes diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/lasombra/lasombra.dm b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/lasombra/lasombra.dm index 4a4465184637..0b4de0e48d55 100644 --- a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/lasombra/lasombra.dm +++ b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/lasombra/lasombra.dm @@ -1,4 +1,4 @@ -/datum/vampire_clan/lasombra +/datum/subsplat/vampire_clan/lasombra name = "Lasombra" id = VAMPIRE_CLAN_LASOMBRA desc = "The Lasombra exist for their own success, fighting for personal victories rather than solely for a crown to wear or a throne to sit upon. They believe that might makes right, and are willing to sacrifice anything to achieve their goals. A clan that uses spirituality as a tool rather than seeking honest enlightenment, their fickle loyalties are currently highlighted by half their clan's defection from the Sabbat." @@ -18,7 +18,7 @@ enlightenment = TRUE clan_keys = /obj/item/vamp/keys/lasombra -/datum/vampire_clan/lasombra/on_gain(mob/living/carbon/human/H) +/datum/subsplat/vampire_clan/lasombra/on_gain(mob/living/carbon/human/H) . = ..() H.vis_flags |= VIS_HIDE diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/malkavian/malkavian.dm b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/malkavian/malkavian.dm index 952b1eef03cf..650df4dd9f15 100644 --- a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/malkavian/malkavian.dm +++ b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/malkavian/malkavian.dm @@ -1,4 +1,4 @@ -/datum/vampire_clan/malkavian +/datum/subsplat/vampire_clan/malkavian name = "Malkavian" id = VAMPIRE_CLAN_MALKAVIAN desc = "Derided as Lunatics by other vampires, the Blood of the Malkavians lets them perceive and foretell truths hidden from others. Like the �wise madmen� of poetry their fractured perspective stems from seeing too much of the world at once, from understanding too deeply, and feeling emotions that are just too strong to bear." @@ -14,7 +14,7 @@ clan_keys = /obj/item/vamp/keys/malkav var/list/mob/living/madness_network -/datum/vampire_clan/malkavian/on_gain(mob/living/carbon/human/vampire) +/datum/subsplat/vampire_clan/malkavian/on_gain(mob/living/carbon/human/vampire) . = ..() var/datum/action/cooldown/malk_hivemind/hivemind = new(vampire) @@ -28,7 +28,7 @@ RegisterSignal(vampire, COMSIG_MOB_SAY, PROC_REF(handle_say), override = TRUE) RegisterSignal(vampire, COMSIG_MOVABLE_HEAR, PROC_REF(handle_hear), override = TRUE) -/datum/vampire_clan/malkavian/on_lose(mob/living/carbon/human/vampire) +/datum/subsplat/vampire_clan/malkavian/on_lose(mob/living/carbon/human/vampire) . = ..() for (var/datum/action/cooldown/malkavian_action in vampire.actions) @@ -41,7 +41,7 @@ UnregisterSignal(vampire, COMSIG_MOB_SAY) UnregisterSignal(vampire, COMSIG_MOVABLE_HEAR) -/datum/vampire_clan/malkavian/proc/handle_say(mob/living/source, list/speech_args) +/datum/subsplat/vampire_clan/malkavian/proc/handle_say(mob/living/source, list/speech_args) SIGNAL_HANDLER if (!prob(20)) @@ -49,7 +49,7 @@ say_in_madness_network(speech_args[SPEECH_MESSAGE]) -/datum/vampire_clan/malkavian/proc/handle_hear(mob/living/source, list/hearing_args) +/datum/subsplat/vampire_clan/malkavian/proc/handle_hear(mob/living/source, list/hearing_args) SIGNAL_HANDLER if(!prob(3)) @@ -57,7 +57,7 @@ say_in_madness_network(hearing_args[HEARING_RAW_MESSAGE]) -/datum/vampire_clan/malkavian/proc/say_in_madness_network(message) +/datum/subsplat/vampire_clan/malkavian/proc/say_in_madness_network(message) for (var/mob/living/malkavian in madness_network) to_chat(malkavian, span_ghostalert(message)) @@ -73,9 +73,9 @@ /datum/action/cooldown/malk_hivemind/Trigger(mob/clicker, trigger_flags, atom/target) . = ..() var/mob/living/carbon/human/malk = clicker - if (!malk.is_clan(/datum/vampire_clan/malkavian)) + if (!malk.is_clan(/datum/subsplat/vampire_clan/malkavian)) return - var/datum/vampire_clan/malkavian/clan_malkavian = malk.get_clan() + var/datum/subsplat/vampire_clan/malkavian/clan_malkavian = malk.get_clan() var/new_thought = tgui_input_text(clicker, "Malkavian Hivemind") if(!new_thought) return diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/nosferatu.dm b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/nosferatu.dm index b92a34b6176e..2173a1e0d487 100644 --- a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/nosferatu.dm +++ b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/nosferatu.dm @@ -1,4 +1,4 @@ -/datum/vampire_clan/nosferatu +/datum/subsplat/vampire_clan/nosferatu name = "Nosferatu" id = VAMPIRE_CLAN_NOSFERATU desc = "The Nosferatu wear their curse on the outside. Their bodies horribly twisted and deformed through the Embrace, they lurk on the fringes of most cities, acting as spies and brokers of information. Using animals and their own supernatural capacity to hide, nothing escapes the eyes of the so-called Sewer Rats." diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/old_clan_tzimisce.dm b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/old_clan_tzimisce.dm index cdbaab74e797..5589ab78ec97 100644 --- a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/old_clan_tzimisce.dm +++ b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/old_clan_tzimisce.dm @@ -1,4 +1,4 @@ -/datum/vampire_clan/old_clan_tzimisce +/datum/subsplat/vampire_clan/old_clan_tzimisce name = "Old Clan Tzimisce" id = VAMPIRE_CLAN_OLD_CLAN_TZIMISCE desc = "The Old Clan Tzimisce are a small group of Fiends who predate the use of fleshcrafting. They regard Vicissitude as a disease of the soul, and refuse to learn or employ it. In most other respects, though, they resemble the rest of the Clan." @@ -15,7 +15,7 @@ //restricted_disciplines = list(/datum/discipline/vicissitude) whitelisted = FALSE -/datum/vampire_clan/old_clan_tzimisce/on_join_round(mob/living/carbon/human/H) +/datum/subsplat/vampire_clan/old_clan_tzimisce/on_join_round(mob/living/carbon/human/H) . = ..() var/obj/item/ground_heir/heirloom = new(get_turf(H)) diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/salubri.dm b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/salubri.dm index afb4b00d3df6..e04d9741fc44 100644 --- a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/salubri.dm +++ b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/salubri.dm @@ -1,4 +1,4 @@ -/datum/vampire_clan/salubri +/datum/subsplat/vampire_clan/salubri name = "Salubri" id = VAMPIRE_CLAN_SALUBRI desc = "The Salubri are one of the original 13 clans of the vampiric descendants of Caine. Salubri believe that vampiric existence is torment from which Golconda or death is the only escape. Consequently, the modern Salubri would Embrace, teach a childe the basics of the route, leave clues for the childe to follow to achieve Golconda, and then have their childe diablerize them." diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/setite.dm b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/setite.dm index 71b296a58e51..f07f0bc2bfb0 100644 --- a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/setite.dm +++ b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/setite.dm @@ -1,4 +1,4 @@ -/datum/vampire_clan/setite +/datum/subsplat/vampire_clan/setite name = "Setite" id = VAMPIRE_CLAN_SETITE desc = "The Followers of Set, also called the Ministry of Set, Ministry, or Setites, are a clan of vampires who believe their founder was the Egyptian god Set." @@ -12,7 +12,7 @@ male_clothes = /obj/item/clothing/under/vampire/slickback female_clothes = /obj/item/clothing/under/vampire/burlesque -/datum/vampire_clan/setite/on_gain(mob/living/carbon/human/vampire, joining_round) +/datum/subsplat/vampire_clan/setite/on_gain(mob/living/carbon/human/vampire, joining_round) . = ..() //vampire.add_quirk(/datum/quirk/lightophobia) diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/toreador.dm b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/toreador.dm index 6455df31f0ba..b5a22d677065 100644 --- a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/toreador.dm +++ b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/toreador.dm @@ -1,4 +1,4 @@ -/datum/vampire_clan/toreador +/datum/subsplat/vampire_clan/toreador name = "Toreador" id = VAMPIRE_CLAN_TOREADOR desc = "Known for their seductive nature, enthralling demeanor, and eloquent grace to the point of obsession, Toreador vampires Embrace artists and lovers into their ranks, forever trying to stir their own deadened hearts. Supernaturally graceful and charming, the Divas are always looking for the next thrill, leaving a detritus of discarded lovers and victims in their wake." diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/tremere.dm b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/tremere.dm index 4d0186f461ea..3014c6308f29 100644 --- a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/tremere.dm +++ b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/tremere.dm @@ -1,4 +1,4 @@ -/datum/vampire_clan/tremere +/datum/subsplat/vampire_clan/tremere name = "Tremere" id = VAMPIRE_CLAN_TREMERE desc = "The arcane Clan Tremere were once a house of mortal mages who sought immortality but found only undeath. As vampires, they’ve perfected ways to bend their own Blood to their will, employing their sorceries to master and ensorcel both the mortal and vampire world. Their power makes them valuable, but few vampires trust their scheming ways." diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/true_brujah.dm b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/true_brujah.dm index 42fb68a33ddd..ce657335b858 100644 --- a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/true_brujah.dm +++ b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/true_brujah.dm @@ -1,4 +1,4 @@ -/datum/vampire_clan/true_brujah +/datum/subsplat/vampire_clan/true_brujah name = "True Brujah" id = VAMPIRE_CLAN_TRUE_BRUJAH desc = "The True Brujah are a bloodline of Clan Brujah that claim to be descendants of the original Antediluvian founder of the lineage and not his diablerist/childe Troile. They are also noted for their calm, detached behavior, which puts them in contrast to the main lineage who are known for their rather short, violent tempers and anti-establishment attitudes. " diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/tzimisce/tzimisce.dm b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/tzimisce/tzimisce.dm index 166b2881454d..992e8a55d86d 100644 --- a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/tzimisce/tzimisce.dm +++ b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/tzimisce/tzimisce.dm @@ -1,4 +1,4 @@ -/datum/vampire_clan/tzimisce +/datum/subsplat/vampire_clan/tzimisce name = "Tzimisce" id = VAMPIRE_CLAN_TZIMISCE desc = "If someone were to call a Tzimisce inhuman and sadistic, the Tzimisce would probably commend them for their perspicacity, and then demonstrate that their mortal definition of sadism was laughably inadequate. The Tzimisce have left the human condition behind gladly, and now focus on transcending the limitations of the vampiric state. At a casual glance or a brief conversation, a Tzimisce appears to be one of the more pleasant vampires. Polite, intelligent, and inquisitive, they seem a stark contrast to the howling Sabbat mobs or even the apparently more humane Brujah or Nosferatu. However, upon closer inspection, it becomes clear that this is merely a mask hiding something alien and monstrous." @@ -34,7 +34,7 @@ die_with_shapeshifted_form = FALSE possible_shapes = list(/mob/living/basic/bloodcrawler) -/datum/vampire_clan/tzimisce/on_join_round(mob/living/carbon/human/H) +/datum/subsplat/vampire_clan/tzimisce/on_join_round(mob/living/carbon/human/H) . = ..() var/obj/item/ground_heir/heirloom = new(get_turf(H)) diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/ventrue.dm b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/ventrue.dm index ccaf48b65d00..59f4b10cddd9 100644 --- a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/ventrue.dm +++ b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/ventrue.dm @@ -1,4 +1,4 @@ -/datum/vampire_clan/ventrue +/datum/subsplat/vampire_clan/ventrue name = "Ventrue" id = VAMPIRE_CLAN_VENTRUE desc = "The Ventrue are not called the Clan of Kings for nothing. Carefully choosing their progeny from mortals familiar with power, wealth, and influence, the Ventrue style themselves the aristocrats of the vampire world. Their members are expected to assume command wherever possible, and they’re willing to endure storms for the sake of leading from the front." diff --git a/modular_darkpack/modules/weapons/code/melee.dm b/modular_darkpack/modules/weapons/code/melee.dm index d4e078f62808..0c9cfeedbaeb 100644 --- a/modular_darkpack/modules/weapons/code/melee.dm +++ b/modular_darkpack/modules/weapons/code/melee.dm @@ -329,6 +329,7 @@ desc = "Blunt instrument of justice." icon = 'modular_darkpack/modules/weapons/icons/weapons.dmi' icon_state = "baton" + ONFLOOR_ICON_HELPER('modular_darkpack/modules/weapons/icons/weapons_onfloor.dmi') custom_materials = list(/datum/material/wood = SHEET_MATERIAL_AMOUNT * 2) /obj/item/switchblade/vamp diff --git a/modular_darkpack/modules/weapons/code/sheath.dm b/modular_darkpack/modules/weapons/code/sheath.dm index e4386538fca6..6f82046799e3 100644 --- a/modular_darkpack/modules/weapons/code/sheath.dm +++ b/modular_darkpack/modules/weapons/code/sheath.dm @@ -8,7 +8,6 @@ //lefthand_file = 'modular_darkpack/modules/deprecated/icons/lefthand.dmi' //righthand_file = 'modular_darkpack/modules/deprecated/icons/righthand.dmi' worn_icon = 'modular_darkpack/modules/weapons/icons/worn_melee.dmi' - ONFLOOR_ICON_HELPER('modular_darkpack/modules/weapons/icons/weapons_onfloor.dmi') custom_price = 1200 /obj/item/storage/belt/sheath/vamp/sabre diff --git a/modular_darkpack/modules/weapons/icons/weapons_onfloor.dmi b/modular_darkpack/modules/weapons/icons/weapons_onfloor.dmi index da3a69967226..6fea198d2926 100644 Binary files a/modular_darkpack/modules/weapons/icons/weapons_onfloor.dmi and b/modular_darkpack/modules/weapons/icons/weapons_onfloor.dmi differ diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/emotes.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/emotes.dm index 24795cf5a1fa..dc36f3a8533e 100644 --- a/modular_darkpack/modules/werewolf_the_apocalypse/code/emotes.dm +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/emotes.dm @@ -53,7 +53,7 @@ message = "caws!" if(isgarou(user)) return pick(howl_sounds) - if(user.is_clan(/datum/vampire_clan/gangrel)) + if(user.is_clan(/datum/subsplat/vampire_clan/gangrel)) return pick(howl_sounds) /datum/emote/living/howl/get_range(mob/living/user) @@ -66,5 +66,5 @@ message = "caws!" if(isgarou(user)) return 15 - if(user.is_clan(/datum/vampire_clan/gangrel)) + if(user.is_clan(/datum/subsplat/vampire_clan/gangrel)) return 7 diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/auspice.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/auspice.dm index 7c767bd00f21..db45980897af 100644 --- a/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/auspice.dm +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/auspice.dm @@ -1,20 +1,15 @@ -/datum/preference/choiced/garou_auspice +/datum/preference/choiced/subsplat/garou_auspice savefile_key = "garou_auspice" - savefile_identifier = PREFERENCE_CHARACTER - category = PREFERENCE_CATEGORY_FEATURES - priority = PREFERENCE_PRIORITY_WORLD_OF_DARKNESS main_feature_name = "Auspice" relevant_inherent_trait = TRAIT_WTA_GAROU_AUSPICE - must_have_relevant_trait = TRUE - should_generate_icons = TRUE -/datum/preference/choiced/garou_auspice/init_possible_values() +/datum/preference/choiced/subsplat/garou_auspice/init_possible_values() return assoc_to_keys(GLOB.auspices_list) // This would be inclusive of ALL auspices so many need to be reworked when adding other fera -/datum/preference/choiced/garou_auspice/icon_for(value) +/datum/preference/choiced/subsplat/garou_auspice/icon_for(value) var/datum/universal_icon/auspice_icon = uni_icon('icons/effects/effects.dmi', "nothing") auspice_icon.blend_icon(uni_icon('modular_darkpack/modules/werewolf_the_apocalypse/icons/auspices.dmi', replacetext(LOWER_TEXT(value), " ", "_")), ICON_OVERLAY) return auspice_icon -/datum/preference/choiced/garou_auspice/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/subsplat/garou_auspice/apply_to_human(mob/living/carbon/human/target, value) target.set_auspice(value, TRUE) diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/breed.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/breed.dm index f07ab142ad4e..e04d37001693 100644 --- a/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/breed.dm +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/breed.dm @@ -1,17 +1,12 @@ -/datum/preference/choiced/garou_breed +/datum/preference/choiced/subsplat/garou_breed savefile_key = "garou_breed" - savefile_identifier = PREFERENCE_CHARACTER - category = PREFERENCE_CATEGORY_FEATURES - priority = PREFERENCE_PRIORITY_WORLD_OF_DARKNESS main_feature_name = "Breed" relevant_inherent_trait = TRAIT_WTA_GAROU_BREED - must_have_relevant_trait = TRUE - should_generate_icons = TRUE -/datum/preference/choiced/garou_breed/init_possible_values() +/datum/preference/choiced/subsplat/garou_breed/init_possible_values() return assoc_to_keys(GLOB.breed_forms_list) -/datum/preference/choiced/garou_breed/icon_for(value) +/datum/preference/choiced/subsplat/garou_breed/icon_for(value) var/datum/universal_icon/garou_icon = uni_icon('icons/effects/effects.dmi', "nothing") switch(value) if(BREED_HOMID) @@ -36,5 +31,5 @@ garou_icon.blend_icon(breed_crinos, ICON_OVERLAY) return garou_icon -/datum/preference/choiced/garou_breed/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/subsplat/garou_breed/apply_to_human(mob/living/carbon/human/target, value) target.set_breed_form(value, TRUE) diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/tribe.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/tribe.dm index e5fe60606149..df8194d4c87e 100644 --- a/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/tribe.dm +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/tribe.dm @@ -1,20 +1,15 @@ -/datum/preference/choiced/garou_tribe +/datum/preference/choiced/subsplat/garou_tribe savefile_key = "garou_tribe" - savefile_identifier = PREFERENCE_CHARACTER - category = PREFERENCE_CATEGORY_FEATURES - priority = PREFERENCE_PRIORITY_WORLD_OF_DARKNESS main_feature_name = "Tribe" relevant_inherent_trait = TRAIT_WTA_GAROU_TRIBE - must_have_relevant_trait = TRUE - should_generate_icons = TRUE -/datum/preference/choiced/garou_tribe/init_possible_values() +/datum/preference/choiced/subsplat/garou_tribe/init_possible_values() return assoc_to_keys(GLOB.tribes_list) // This would be inclusive of ALL tribes so many need to be reworked when adding other fera -/datum/preference/choiced/garou_tribe/icon_for(value) +/datum/preference/choiced/subsplat/garou_tribe/icon_for(value) var/datum/universal_icon/tribe_icon = uni_icon('icons/effects/effects.dmi', "nothing") tribe_icon.blend_icon(uni_icon('modular_darkpack/modules/werewolf_the_apocalypse/icons/tribes.dmi', replacetext(LOWER_TEXT(value), " ", "_")), ICON_OVERLAY) return tribe_icon -/datum/preference/choiced/garou_tribe/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/subsplat/garou_tribe/apply_to_human(mob/living/carbon/human/target, value) target.set_fera_tribe(value, TRUE) diff --git a/modular_darkpack/modules/z_travel/code/manhole.dm b/modular_darkpack/modules/z_travel/code/manhole.dm index 7bd98cb5338a..f66b9039ddae 100644 --- a/modular_darkpack/modules/z_travel/code/manhole.dm +++ b/modular_darkpack/modules/z_travel/code/manhole.dm @@ -1,26 +1,22 @@ /obj/structure/ladder/manhole - icon = 'modular_darkpack/modules/z_travel/icons/z_travel.dmi' - icon_state = "manhole" - plane = GAME_PLANE - layer = ABOVE_NORMAL_TURF_LAYER - anchored = TRUE resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF - travel_time = 5 SECONDS - travel_sound = 'modular_darkpack/modules/z_travel/sounds/manhole.ogg' + travel_time = 3 SECONDS // Big ass manhole cover you have to move. requires_friend = TRUE - static_appearance = TRUE /obj/structure/ladder/manhole/up name = "ladder" - icon_state = "ladder" + icon_state = "ladder10" base_icon_state = "ladder" connect_down = FALSE + static_appearance = TRUE /obj/structure/ladder/manhole/down name = "manhole" - icon_state = "manhole" + icon_state = "manhole_closed" base_icon_state = "manhole" + travel_sound = 'modular_darkpack/modules/z_travel/sounds/manhole.ogg' connect_up = FALSE + static_appearance = TRUE /obj/structure/ladder/manhole/down/Initialize(mapload) . = ..() @@ -37,3 +33,23 @@ var/area/my_area = get_area(src) if(istype(my_area) && my_area.outdoors) icon_state = "[base_icon_state]-snow" + +/obj/structure/ladder/manhole/down/start_travelling(mob/user, going_up) + icon_state = "[base_icon_state]_open" + . = ..() + +/obj/structure/ladder/manhole/down/travel(mob/user, going_up, is_ghost, grant_exp) + icon_state = "[base_icon_state]_closed" + . = ..() + + +/obj/structure/ladder/rope + icon_state = "rope" + base_icon_state = "rope" + pixel_y = 15 + travel_time = 5 SECONDS + static_appearance = TRUE + +/obj/structure/ladder/rope/upwards + icon_state = "rope_down" + pixel_y = -10 diff --git a/modular_darkpack/modules/z_travel/icons/ladders.dmi b/modular_darkpack/modules/z_travel/icons/ladders.dmi new file mode 100644 index 000000000000..bbbd68b9e345 Binary files /dev/null and b/modular_darkpack/modules/z_travel/icons/ladders.dmi differ diff --git a/modular_darkpack/modules/z_travel/icons/z_travel.dmi b/modular_darkpack/modules/z_travel/icons/z_travel.dmi index 930f0cc0e1e3..2609812b2ece 100644 Binary files a/modular_darkpack/modules/z_travel/icons/z_travel.dmi and b/modular_darkpack/modules/z_travel/icons/z_travel.dmi differ diff --git a/modular_darkpack/modules/z_travel/sounds/ladder1.ogg b/modular_darkpack/modules/z_travel/sounds/ladder1.ogg new file mode 100644 index 000000000000..7872c8a68a03 Binary files /dev/null and b/modular_darkpack/modules/z_travel/sounds/ladder1.ogg differ diff --git a/modular_darkpack/modules/z_travel/sounds/ladder2.ogg b/modular_darkpack/modules/z_travel/sounds/ladder2.ogg new file mode 100644 index 000000000000..1af48947f97a Binary files /dev/null and b/modular_darkpack/modules/z_travel/sounds/ladder2.ogg differ diff --git a/modular_darkpack/modules/z_travel/sounds/ladder3.ogg b/modular_darkpack/modules/z_travel/sounds/ladder3.ogg new file mode 100644 index 000000000000..5d10cd6bcde9 Binary files /dev/null and b/modular_darkpack/modules/z_travel/sounds/ladder3.ogg differ diff --git a/modular_darkpack/modules/z_travel/sounds/ladder4.ogg b/modular_darkpack/modules/z_travel/sounds/ladder4.ogg new file mode 100644 index 000000000000..94790afb9f74 Binary files /dev/null and b/modular_darkpack/modules/z_travel/sounds/ladder4.ogg differ diff --git a/tgstation.dme b/tgstation.dme index 2c9465302ad7..718b13fd362a 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -6920,6 +6920,7 @@ #include "modular_darkpack\master_files\code\datums\components\dejavu.dm" #include "modular_darkpack\master_files\code\datums\mapgen\woods_generator.dm" #include "modular_darkpack\master_files\code\datums\mind\_mind.dm" +#include "modular_darkpack\master_files\code\datums\quirks\_quirk.dm" #include "modular_darkpack\master_files\code\datums\station_traits\_station_trait.dm" #include "modular_darkpack\master_files\code\game\area\areas.dm" #include "modular_darkpack\master_files\code\game\objects\items.dm" @@ -6927,6 +6928,7 @@ #include "modular_darkpack\master_files\code\game\objects\items\weaponry.dm" #include "modular_darkpack\master_files\code\game\objects\items\devices\radio\radio.dm" #include "modular_darkpack\master_files\code\game\objects\items\food\snacks.dm" +#include "modular_darkpack\master_files\code\game\objects\items\storage\backpack.dm" #include "modular_darkpack\master_files\code\game\objects\items\storage\fancy.dm" #include "modular_darkpack\master_files\code\game\objects\structures\flora.dm" #include "modular_darkpack\master_files\code\game\objects\structures\ladders.dm" @@ -7073,6 +7075,7 @@ #include "modular_darkpack\modules\decor\code\flora.dm" #include "modular_darkpack\modules\decor\code\posters.dm" #include "modular_darkpack\modules\decor\code\racks.dm" +#include "modular_darkpack\modules\decor\code\railing.dm" #include "modular_darkpack\modules\decor\code\road_signs.dm" #include "modular_darkpack\modules\decor\code\signs_city.dm" #include "modular_darkpack\modules\decor\code\stick.dm" @@ -7121,13 +7124,13 @@ #include "modular_darkpack\modules\electricity\code\fusebox.dm" #include "modular_darkpack\modules\electricity\code\generator.dm" #include "modular_darkpack\modules\elevators\code\elevator.dm" -#include "modular_darkpack\modules\ert\code\loadout.dm" #include "modular_darkpack\modules\ert\code\national_guard.dm" #include "modular_darkpack\modules\ert\code\pentex_ert_roles.dm" #include "modular_darkpack\modules\ert\code\swat.dm" #include "modular_darkpack\modules\ert\code\team.dm" #include "modular_darkpack\modules\ert\code\items\first_team.dm" #include "modular_darkpack\modules\ert\code\items\swat_items.dm" +#include "modular_darkpack\modules\ert\code\outfits\first_team_outfits.dm" #include "modular_darkpack\modules\ert\code\outfits\national_guard_outfits.dm" #include "modular_darkpack\modules\ert\code\outfits\swat_outfits.dm" #include "modular_darkpack\modules\fire\code\fire.dm" @@ -7373,6 +7376,7 @@ #include "modular_darkpack\modules\paths\code\spellbooks\thaumaturgy\lure_of_flames_spellbooks.dm" #include "modular_darkpack\modules\paths\code\spellbooks\thaumaturgy\research_spellbooks.dm" #include "modular_darkpack\modules\phones\code\_phone.dm" +#include "modular_darkpack\modules\phones\code\phone_assets.dm" #include "modular_darkpack\modules\phones\code\phone_book.dm" #include "modular_darkpack\modules\phones\code\phone_contact.dm" #include "modular_darkpack\modules\phones\code\phone_effects.dm" @@ -7380,6 +7384,7 @@ #include "modular_darkpack\modules\phones\code\phone_procs.dm" #include "modular_darkpack\modules\phones\code\phone_subsystem.dm" #include "modular_darkpack\modules\phones\code\phone_subtypes.dm" +#include "modular_darkpack\modules\phones\code\phone_texting.dm" #include "modular_darkpack\modules\phones\code\sim_card.dm" #include "modular_darkpack\modules\phones\code\stationary_subtypes.dm" #include "modular_darkpack\modules\piano\code\stationary_pianos.dm" @@ -7533,6 +7538,7 @@ #include "modular_darkpack\modules\splats\code\prefrences\splat_middleware.dm" #include "modular_darkpack\modules\splats\code\prefrences\splat_pref.dm" #include "modular_darkpack\modules\splats\code\subsplat\_subsplat.dm" +#include "modular_darkpack\modules\splats\code\subsplat\pref.dm" #include "modular_darkpack\modules\stock_market\code\stockexchange.dm" #include "modular_darkpack\modules\storage\code\firstaidkit.dm" #include "modular_darkpack\modules\storyteller_dice\code\roll_datum.dm" @@ -7575,7 +7581,6 @@ #include "modular_darkpack\modules\vampire_the_masquerade\code\kindred\give_vitae.dm" #include "modular_darkpack\modules\vampire_the_masquerade\code\kindred\humanity.dm" #include "modular_darkpack\modules\vampire_the_masquerade\code\kindred\torpor.dm" -#include "modular_darkpack\modules\vampire_the_masquerade\code\preferences\clan.dm" #include "modular_darkpack\modules\vampire_the_masquerade\code\preferences\diablerist.dm" #include "modular_darkpack\modules\vampire_the_masquerade\code\preferences\generation.dm" #include "modular_darkpack\modules\vampire_the_masquerade\code\preferences\immortal_age.dm" @@ -7594,6 +7599,7 @@ #include "modular_darkpack\modules\vampire_the_masquerade\code\vampire_clan\clan_globals.dm" #include "modular_darkpack\modules\vampire_the_masquerade\code\vampire_clan\clan_helpers.dm" #include "modular_darkpack\modules\vampire_the_masquerade\code\vampire_clan\clan_mark_pref.dm" +#include "modular_darkpack\modules\vampire_the_masquerade\code\vampire_clan\clan_pref.dm" #include "modular_darkpack\modules\vampire_the_masquerade\code\vampire_clan\clans\banu_haqim.dm" #include "modular_darkpack\modules\vampire_the_masquerade\code\vampire_clan\clans\brujah.dm" #include "modular_darkpack\modules\vampire_the_masquerade\code\vampire_clan\clans\caitiff.dm" diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/QuirksPage.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/QuirksPage.tsx index 0ffe9e20b8af..e7f085d5b018 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/QuirksPage.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/QuirksPage.tsx @@ -344,7 +344,7 @@ function QuirkPage() { } }); - let balance = data.freebie_points ?? 0; // DARKPACK EDIT CHANGE - Original : let balance = -data.default_quirk_balance; + const balance = data.freebie_points ?? 0; // DARKPACK EDIT CHANGE - Original : let balance = -data.default_quirk_balance; let positiveQuirks = 0; for (const selectedQuirkName of selectedQuirks) { diff --git a/tgui/packages/tgui/interfaces/Telephone/ScreenBackgrounds.tsx b/tgui/packages/tgui/interfaces/Telephone/ScreenBackgrounds.tsx new file mode 100644 index 000000000000..b3fa518dfa20 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Telephone/ScreenBackgrounds.tsx @@ -0,0 +1,175 @@ +// THIS IS A DARKPACK UI FILE +import { useBackend } from 'tgui/backend'; +import { resolveAsset } from 'tgui/assets'; +import { Box, Icon, Stack } from 'tgui-core/components'; +import { type Data, NavigableApps } from '.'; +import { backgrounds } from './backgroundImages'; + +export const ScreenBackgrounds = (props: { + setApp: React.Dispatch>; +}) => { + const { act, data } = useBackend(); + const { setApp } = props; + + const choices = [ + { + name: 'Snowy Mountain', + key: 'BG_1', + }, + { + name: 'Dog in Nature', + key: 'BG_2', + }, + { + name: 'Waves', + key: 'BG_3', + }, + { + name: 'Relaxing Cat', + key: 'BG_4', + }, + { + name: 'Happy Dog', + key: 'BG_5', + }, + { + name: 'Natural Landscape', + key: 'BG_6', + }, + { + name: 'Mr. Mittens', + key: 'BG_7', + }, + { + name: 'Lazy Cat', + key: 'BG_8', + }, + { + name: 'Dozerine', + key: 'BG_9', + }, + { + name: 'Golden Gate Bridge', + key: 'BG_10', + }, + { + name: 'Forest of Firs', + key: 'BG_11', + }, + { + name: 'Police Motorcycles', + key: 'BG_12', + }, + { + name: 'Pixel Art', + key: 'BG_13', + }, + { + name: 'Sleepy Cat', + key: 'BG_14', + }, + { + name: 'Snowy Landscape', + key: 'BG_15', + }, + { + name: 'Bokeh Lights', + key: 'BG_16', + }, + { + name: 'Modern Wallpaper', + key: 'BG_17', + }, + { + name: 'Tree Canopy', + key: 'BG_18', + }, + { + name: 'Custom', + key: 'custom_background', + }, + /* + // see backgroundImages.ts for adding backgrounds here + { + name: 'Example Background', + key: 'example_key', + }, + */ + ]; + + const setBackground = (key: string) => { + if (key === 'custom_background') { + act('custom_background'); + setApp(null); + } else { + act('set_background', { background_url: key }); + setApp(null); + } + }; + + return ( + + + + setApp(NavigableApps.Settings)} + style={{ cursor: 'pointer' }} + /> + Backgrounds + + + + + {choices.slice(0, -1).map((background, index) => ( + + setBackground(background.key)} + style={{ cursor: 'pointer' }} + > + + + + + {background.name} + + + + ))} + + setBackground('custom_background')} + style={{ cursor: 'pointer' }} + > + + Custom + + + + + + + + + + + + + + ); +}; diff --git a/tgui/packages/tgui/interfaces/Telephone/ScreenBrowser.tsx b/tgui/packages/tgui/interfaces/Telephone/ScreenBrowser.tsx new file mode 100644 index 000000000000..4df28a07d322 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Telephone/ScreenBrowser.tsx @@ -0,0 +1,196 @@ +// THIS IS A DARKPACK UI FILE +import { useState, useEffect, useMemo, useRef, memo } from 'react'; +import { Box, Icon, Stack } from 'tgui-core/components'; +import type { NavigableApps } from '.'; + +// web pages. just html in a `` block in a typescript file. sue me. +import { browser_home } from './pages/home'; +import { browser_endron } from './pages/endron'; +import { browserStyles } from './pages/browserStyles'; +import { browser_gooble } from './pages/gooble'; +import { browser_endbook } from './pages/endbook'; +import { browser_404 } from './pages/404'; + +export const ScreenBrowser = memo((props: { +setApp: React.Dispatch>; +}) => { +const { setApp } = props; + +const [currentSite, setCurrentSite] = useState('Enter a URL'); +const [urlInput, setUrlInput] = useState(''); +const [goobleShowResults, setGoobleShowResults] = useState(false); +const [goobleSearchQuery, setGoobleSearchQuery] = useState(''); +const endronContentRef = useRef(null); +const contentBoxRef = useRef(null); + +useEffect(() => { + (window as any).goobleSearch = () => { + const input = document.getElementById('searchInput') as HTMLInputElement; + const query = input?.value || 'your search'; + setGoobleSearchQuery(query); + setGoobleShowResults(true); + }; + + (window as any).goobleHome = () => { + setGoobleShowResults(false); + }; + + return () => { + delete (window as any).goobleSearch; + delete (window as any).goobleHome; + }; +}, []); + +useEffect(() => { + if (currentSite !== 'www.gooble.com') { + setGoobleShowResults(false); + setGoobleSearchQuery(''); + } + if (currentSite === 'Enter a URL' || currentSite === 'Home') { + setUrlInput(''); + } +}, [currentSite]); + +const websites = useMemo(() => ({ + 'Home': browser_home, + 'Enter a URL': browser_home, + 'www.gooble.com': () => browser_gooble(goobleShowResults, goobleSearchQuery), + 'www.endbook.com': browser_endbook, + 'www.endron-international.com': () => { + if (!endronContentRef.current) { + endronContentRef.current = browser_endron(); + } + return endronContentRef.current; + }, +}), [goobleShowResults, goobleSearchQuery]); + +const handleNavigate = () => { + if (urlInput.trim()) { + setCurrentSite(urlInput.trim()); + setUrlInput(`https://${urlInput.trim()}`); // pretend to be a real browser! + } +}; + +const handleKeyPress = (e: React.KeyboardEvent) => { + if (e.key === 'Enter') { + handleNavigate(); + } +}; + +const siteContent = useMemo(() => { + const site = websites[currentSite]; + if (typeof site === 'function') { + return site(); + } + return site || browser_404(currentSite); +}, [currentSite, websites]); + +const backgroundGradient = useMemo(() => { + if (currentSite === 'www.gooble.com' || currentSite === 'www.endbook.com') { + return 'linear-gradient(135deg, #ffffff 0%, #f5f5f5 25%, #e8e8e8 50%, #f5f5f5 75%, #ffffff 100%)'; + } + return 'linear-gradient(180deg, rgb(0, 166, 172) 0%, rgb(0, 166, 172) 20%, rgb(0, 166, 172) 35%, #00a6ac 50%, #3c8c8f 65%, #93f7fb 80%, #ffffff 90%, #ffffff 100%)'; +}, [currentSite]); + +useEffect(() => { + if (contentBoxRef.current) { + contentBoxRef.current.innerHTML = siteContent; + if (currentSite === 'www.gooble.com') { + (window as any).goobleSearch = () => { + const input = document.getElementById('searchInput') as HTMLInputElement; + const query = input?.value || 'your search'; + setGoobleSearchQuery(query); + setGoobleShowResults(true); + }; + + (window as any).goobleHome = () => { + setGoobleShowResults(false); + }; + } + } +}, [siteContent, currentSite]); + +return ( + + + + + { + if (currentSite === 'Enter a URL') { + setApp(null); + } else { + setCurrentSite('Enter a URL'); + } + setUrlInput(''); + }} + style={{ cursor: 'pointer' }} + /> + EndBrowser v1.0.1 + + + + + + + setUrlInput(e.target.value)} + onKeyDown={(e) => handleKeyPress(e as React.KeyboardEvent)} + style={{ + width: '100%', + padding: '0.5em', + borderRadius: '4px', + border: '1px solid #ccc', + fontSize: '0.9em', + boxSizing: 'border-box', + }} + /> + + + + Go + + + + + + +
+ + + + + +); +}); diff --git a/tgui/packages/tgui/interfaces/Telephone/ScreenContacts.tsx b/tgui/packages/tgui/interfaces/Telephone/ScreenContacts.tsx index f42fba4a7cc9..aa3e1749dceb 100644 --- a/tgui/packages/tgui/interfaces/Telephone/ScreenContacts.tsx +++ b/tgui/packages/tgui/interfaces/Telephone/ScreenContacts.tsx @@ -1,8 +1,14 @@ // THIS IS A DARKPACK UI FILE import { useState } from 'react'; -import { Box, Icon, Stack, Tooltip } from 'tgui-core/components'; - -import { useBackend } from '../../backend'; +import { useBackend } from 'tgui/backend'; +import { + Box, + Collapsible, + Icon, + MenuBar, + Stack, + Tooltip, +} from 'tgui-core/components'; import { type Contact, type Data, NavigableApps } from '.'; export const ContactElement = (props: { @@ -13,21 +19,28 @@ export const ContactElement = (props: { historyIcon?: string | null; time?: string | null; historyTooltip?: string | null; + messageIcon?: string | null; + onMessage?: () => void; + isUnread?: boolean; }) => { - const { contact, onClick, deleteIcon, onDelete, historyIcon, time, historyTooltip } = props; - const { act } = useBackend(); + const { + contact, + onClick, + deleteIcon, + onDelete, + historyIcon, + time, + historyTooltip, + messageIcon, + onMessage, + isUnread, + } = props; + const { act, data } = useBackend(); return ( - + - + {contact.name} - {time ? (time) : (contact.number || 'Unknown Number')} + + {time ? time : contact.number || 'Unknown Number'} + @@ -58,13 +76,14 @@ export const ContactElement = (props: { ) : null} {historyIcon ? ( - + ) : null} + {messageIcon ? ( + + + + ) : null} ); }; @@ -80,12 +99,14 @@ export const ScreenContacts = (props: { data; const [showSettings, setShowSettings] = useState(false); + const [openMenuBar, setOpenMenuBar] = useState(null); + const [openOnHover, setOpenOnHover] = useState(false); return ( + + } + entry="publishmenu" + openMenuBar={openMenuBar} + setOpenMenuBar={setOpenMenuBar} + openOnHover={openOnHover} + setOpenOnHover={setOpenOnHover} + openWidth="22rem" + > + { + act( + data.sim_published + ? 'unpublish_number' + : 'publish_number', + ); + }} + /> + { + act('add_contact'); + }} + /> + { + act('remove_contact'); + }} + /> + + Contacts - setShowSettings((x) => !x)} - > - - + + {data.sim_published_name + ? `Published as: ${data.sim_published_name}` + : 'Currently Unpublished'} + {showSettings ? ( @@ -110,59 +170,63 @@ export const ScreenContacts = (props: { This Phone's Number: {my_number} - act('publish_number')} - className="Telephone__ContactsElement" - > - > Publish Number - ) : ( - - - My Contacts - - {our_contacts.map((contact) => ( - { - setEnteredNumber(contact.number); - setApp(NavigableApps.Phone); - }} - onDelete={() => act('remove_contact', { name: contact.name })} - /> - ))} - - Published Numbers - - {published_numbers.map((contact) => ( - { - setEnteredNumber(contact.number); - setApp(NavigableApps.Phone); - }} - /> - ))} - - Blocked Numbers - - {our_blocked_contacts.map((contact) => ( - { - setEnteredNumber(contact.number); - setApp(NavigableApps.Phone); - }} - onDelete={() => act('unblock', { name: contact.name })} - /> - ))} + + + {our_contacts + .filter((contact) => contact.number !== my_number) + .map((contact) => ( + { + setEnteredNumber(contact.number); + setApp(NavigableApps.Phone); + }} + onDelete={() => act('remove_contact', { name: contact.name })} + onMessage={() => { + setEnteredNumber(contact.number); + setApp(NavigableApps.Messages); // opens a text conversation + }} + /> + ))} + + + {published_numbers + .filter((contact) => contact.number !== my_number) + .map((contact) => ( + { + setEnteredNumber(contact.number); + setApp(NavigableApps.Phone); + }} + onMessage={() => { + setEnteredNumber(contact.number); + setApp(NavigableApps.Messages); + }} + /> + ))} + + + {our_blocked_contacts.map((contact) => ( + { + setEnteredNumber(contact.number); + setApp(NavigableApps.Phone); + }} + onDelete={() => act('unblock', { name: contact.name })} + /> + ))} + )} diff --git a/tgui/packages/tgui/interfaces/Telephone/ScreenEndpost.tsx b/tgui/packages/tgui/interfaces/Telephone/ScreenEndpost.tsx new file mode 100644 index 000000000000..15d8d0d6fbfb --- /dev/null +++ b/tgui/packages/tgui/interfaces/Telephone/ScreenEndpost.tsx @@ -0,0 +1,223 @@ +// THIS IS A DARKPACK UI FILE +import { useState, useEffect } from 'react'; +import { useBackend } from 'tgui/backend'; +import { Box, Button, Stack, Icon } from 'tgui-core/components'; +import type { NavigableApps } from '.'; + +interface BackendData { +endpost_username?: string; +show_endpost_registration?: boolean; +posts?: Array<{ + body: string; + date: string; + author: string; + time: string; +}>; +is_admin?: boolean; +} + +export const ScreenEndpost = (props: { +setApp: React.Dispatch>; +}) => { +const { setApp } = props; +const { act, data } = useBackend(); +const { is_admin } = data; +const convertTo12Hour = (timeStr: string) => { + if (!timeStr || !timeStr.includes(':')) return timeStr || ''; + const [hourStr, minute] = timeStr.split(':'); + const hour = parseInt(hourStr, 10); + const period = hour >= 12 ? 'PM' : 'AM'; + const displayHour = hour % 12 || 12; + return `${displayHour}:${minute} ${period}`; + }; + + +const [body, setBody] = useState(''); +const [composing, setComposing] = useState(false); +const [submitted, setSubmitted] = useState(false); +const [askedForUsername, toldToRegister] = useState(false); +const username = (data as any).endpost_username; +const posts = (data as any).posts || []; + +useEffect(() => { + if (askedForUsername && username) {//hacky but works. will probably refactor later + setComposing(true); + toldToRegister(false); + } +}, [username, askedForUsername]); + +const handleNewPost = () => { + if (!username) { + toldToRegister(true); + act('endpost_registration'); + } else { + setComposing(true); + } +}; + +const handleSubmit = () => { + if (!body.trim()) { + return; + } + + act('submit_post', { + body: body, + }); + + setSubmitted(true); + setBody(''); + setTimeout(() => { + setSubmitted(false); + setComposing(false); + }, 1500); +}; + +return ( + + + + setApp(null)} style={{ cursor: 'pointer' }}> + + + EndPost + {(data as any).show_endpost_registration && !composing ? ( + + ) : `${username}`} + {!composing && ( + + )} + + + {composing && ( + + + + + {username ? `Posting as: ${username}` : 'Registration required before posting'} + + + + + +