diff --git a/_maps/map_files/Vampire/runtimetown.dmm b/_maps/map_files/Vampire/runtimetown.dmm index 8cb8bb00248a..d54060d37796 100644 --- a/_maps/map_files/Vampire/runtimetown.dmm +++ b/_maps/map_files/Vampire/runtimetown.dmm @@ -24,6 +24,10 @@ }, /turf/open/floor/plating/concrete, /area/vtm/interior/shop) +"ay" = ( +/obj/structure/werewolf_totem/children_of_gaia, +/turf/open/floor/plating/sidewalk, +/area/vtm/interior/cog/caern) "aM" = ( /obj/effect/spawner/random/trash/rat, /turf/open/misc/beach/vamp, @@ -350,7 +354,7 @@ /obj/lombard/blackmarket, /obj/structure/platform/lowwall/rich/old, /turf/open/floor/plating/rough, -/area/vtm/interior/cog) +/area/vtm/interior/cog/pantry) "hF" = ( /obj/structure/table, /obj/structure/platform/lowwall/brick, @@ -482,8 +486,9 @@ /turf/open/floor/plating/rough, /area/vtm/interior/supply) "jr" = ( +/obj/effect/turf_decal/trimline/brown/filled/warning, /turf/open/floor/plating/sidewalk, -/area/vtm/interior/techshop) +/area/vtm/interior/cog/caern/bawn) "jw" = ( /obj/effect/decal/cleanable/trash{ icon_state = "trash7" @@ -623,7 +628,7 @@ /area/vtm/outside/pacificheights) "lv" = ( /turf/closed/wall/vampwall/rich/old, -/area/vtm/interior/cog) +/area/vtm/interior/cog/caern/bawn) "lC" = ( /obj/structure/railing, /obj/structure/lattice/grate, @@ -962,7 +967,7 @@ /obj/item/soil_sack/vermaculite, /obj/item/soil_sack/worm, /turf/open/floor/plating/sidewalk, -/area/vtm/interior/cog) +/area/vtm/interior/cog/pantry) "rB" = ( /turf/closed/indestructible/the_matrix, /area/vtm) @@ -1104,7 +1109,7 @@ /obj/machinery/smartfridge/drying/rack, /obj/machinery/light/directional/north, /turf/open/floor/plating/sidewalk, -/area/vtm/interior/cog) +/area/vtm/interior/cog/pantry) "tu" = ( /obj/darkpack_car/track/volkswagen{ dir = 4; @@ -1247,7 +1252,7 @@ "vm" = ( /obj/machinery/hydroponics/simple/wooden, /turf/open/floor/plating/sidewalk, -/area/vtm/interior/cog) +/area/vtm/interior/cog/pantry) "vs" = ( /obj/effect/landmark/npcbeacon, /obj/effect/turf_decal/bordur/corner, @@ -1293,7 +1298,7 @@ "vT" = ( /obj/machinery/hydroponics/soil, /turf/open/floor/plating/sidewalk, -/area/vtm/interior/cog) +/area/vtm/interior/cog/pantry) "wb" = ( /obj/structure/table, /obj/item/storage/medkit/darkpack/brute, @@ -1334,7 +1339,7 @@ "xd" = ( /obj/structure/closet/crate/wooden/communitygardens/tools, /turf/open/floor/plating/sidewalk, -/area/vtm/interior/cog) +/area/vtm/interior/cog/pantry) "xh" = ( /obj/effect/turf_decal/bordur{ dir = 1 @@ -1449,7 +1454,7 @@ pixel_x = 10 }, /turf/open/floor/plating/sidewalk, -/area/vtm/interior/cog) +/area/vtm/interior/cog/pantry) "zd" = ( /turf/open/floor/wood/smooth/old, /area/vtm/interior/sewer) @@ -1495,7 +1500,7 @@ /area/vtm/interior/sewer) "zQ" = ( /turf/open/floor/plating/sidewalk, -/area/vtm/interior/cog) +/area/vtm/interior/cog/caern) "zX" = ( /obj/effect/decal/wallpaper/red, /turf/closed/wall/vampwall/market, @@ -1741,7 +1746,7 @@ pixel_y = 10 }, /turf/open/floor/plating/sidewalk, -/area/vtm/interior/cog) +/area/vtm/interior/cog/pantry) "DS" = ( /obj/effect/decal/pallet, /obj/effect/abstract/cargo_landing_spot, @@ -1825,13 +1830,13 @@ /obj/item/seeds/cannabis, /obj/item/seeds/cannabis, /turf/open/floor/plating/sidewalk, -/area/vtm/interior/cog) +/area/vtm/interior/cog/pantry) "Fe" = ( /obj/structure/table, /obj/lombard, /obj/structure/platform/lowwall/rich/old, /turf/open/floor/plating/rough, -/area/vtm/interior/cog) +/area/vtm/interior/cog/pantry) "Ff" = ( /obj/effect/spawner/random/trash/grime{ spawn_loot_count = 30; @@ -1842,6 +1847,10 @@ "Fg" = ( /turf/closed/wall/vampwall/brick, /area/vtm/interior/shop) +"Fj" = ( +/obj/effect/landmark/bawn_entrance/gaia/children_of_gaia, +/turf/open/openspace, +/area/vtm/interior/techshop) "Fs" = ( /obj/effect/turf_decal/bordur{ dir = 1 @@ -1896,7 +1905,7 @@ "Gf" = ( /obj/machinery/hydroponics/simple/plastic, /turf/open/floor/plating/sidewalk, -/area/vtm/interior/cog) +/area/vtm/interior/cog/pantry) "Gj" = ( /obj/effect/gibspawner/human, /turf/open/floor/city/toilet, @@ -2078,7 +2087,7 @@ /obj/item/food/grown/cannabis, /obj/item/food/grown/cannabis, /turf/open/floor/plating/sidewalk, -/area/vtm/interior/cog) +/area/vtm/interior/cog/pantry) "IA" = ( /obj/structure/railing{ dir = 10 @@ -2153,7 +2162,7 @@ "JE" = ( /obj/structure/closet/crate/wooden/communitygardens/seeds, /turf/open/floor/plating/sidewalk, -/area/vtm/interior/cog) +/area/vtm/interior/cog/pantry) "JG" = ( /obj/structure/table, /obj/item/ammo_box/magazine/glock9mm, @@ -2421,7 +2430,7 @@ /obj/structure/table/wood, /obj/machinery/light/directional/south, /turf/open/floor/plating/sidewalk, -/area/vtm/interior/cog) +/area/vtm/interior/cog/pantry) "MF" = ( /obj/structure/table/wood, /obj/machinery/radio_tranceiver/camarilla, @@ -2782,9 +2791,9 @@ /turf/open/floor/wood/smooth/old, /area/vtm/interior/sewer) "RV" = ( -/obj/structure/werewolf_totem/generic/weaver, +/obj/effect/realistic_fog/bawn/children_of_gaia, /turf/open/floor/plating/sidewalk, -/area/vtm/interior/techshop) +/area/vtm/interior/cog/caern/bawn) "Sf" = ( /obj/structure/sign/city/police_department/directional/north{ icon_state = "police4" @@ -2903,7 +2912,7 @@ "Uw" = ( /obj/structure/sink/directional/east, /turf/open/floor/plating/sidewalk, -/area/vtm/interior/cog) +/area/vtm/interior/cog/pantry) "UC" = ( /obj/effect/turf_decal/bordur{ dir = 8 @@ -3001,7 +3010,7 @@ "VW" = ( /obj/structure/toiletbong, /turf/open/floor/plating/sidewalk, -/area/vtm/interior/cog) +/area/vtm/interior/cog/pantry) "Wa" = ( /turf/open/misc/dirt, /area/vtm/outside/supply) @@ -3072,6 +3081,9 @@ /obj/structure/transport/linear/public, /turf/open/floor/plating/elevatorshaft, /area/vtm/outside/pacificheights) +"WO" = ( +/turf/closed/wall/vampwall/rich/old, +/area/vtm/interior/cog/pantry) "WR" = ( /obj/structure/lamppost/one, /turf/open/misc/beach/vamp, @@ -3241,12 +3253,15 @@ /area/vtm/interior/techshop) "Zj" = ( /obj/machinery/light/directional/north, -/obj/structure/werewolf_totem/children_of_gaia, +/obj/structure/werewolf_totem/generic/gaia, /turf/open/floor/plating/sidewalk, -/area/vtm/interior/cog) +/area/vtm/interior/cog/pantry) "Zs" = ( /turf/closed/wall/vampwall/brick_old, /area/vtm/outside/pacificheights) +"Zt" = ( +/turf/open/floor/plating/sidewalk, +/area/vtm/interior/cog/pantry) "Zz" = ( /turf/open/misc/grass/random/grass, /area/vtm/outside/pacificheights) @@ -8112,12 +8127,12 @@ GJ "} (6,1,2) = {" GJ -ZU -ZU -ZU -ZU -ZU -ZU +lv +lv +lv +lv +lv +lv md ZU ZU @@ -8180,12 +8195,12 @@ GJ "} (7,1,2) = {" GJ -ZU -jr -jr -jr -jr -ZU +lv +zQ +zQ +zQ +zQ +RV WW ZF nj @@ -8248,16 +8263,16 @@ GJ "} (8,1,2) = {" GJ -ZU -jr +lv +ay +zQ +zQ +zQ RV -jr -jr -ZU Au lC nj -nj +Fj nj nj nj @@ -8316,12 +8331,12 @@ GJ "} (9,1,2) = {" GJ -ZU -jr -jr -jr -jr -ZU +lv +zQ +zQ +zQ +zQ +lv tc lC nj @@ -8384,11 +8399,11 @@ GJ "} (10,1,2) = {" GJ -ZU -jr -jr -jr -jr +lv +zQ +zQ +zQ +zQ jr Au lC @@ -8520,12 +8535,12 @@ GJ "} (12,1,2) = {" GJ -lv +WO VW Uw Uw rx -lv +WO Au lC nj @@ -8588,12 +8603,12 @@ GJ "} (13,1,2) = {" GJ -lv +WO vm -zQ -zQ +Zt +Zt vT -lv +WO WW ZF nj @@ -8656,12 +8671,12 @@ GJ "} (14,1,2) = {" GJ -lv +WO vm -zQ -zQ +Zt +Zt vT -lv +WO WW NM Zi @@ -8724,12 +8739,12 @@ GJ "} (15,1,2) = {" GJ -lv +WO Zj -zQ -zQ +Zt +Zt Mr -lv +WO oP ZF nj @@ -8792,12 +8807,12 @@ GJ "} (16,1,2) = {" GJ -lv +WO vm -zQ -zQ +Zt +Zt Gf -lv +WO Au lC nj @@ -8860,12 +8875,12 @@ GJ "} (17,1,2) = {" GJ -lv +WO vm -zQ -zQ +Zt +Zt Gf -lv +WO Au lC nj @@ -8928,12 +8943,12 @@ GJ "} (18,1,2) = {" GJ -lv +WO Fa -zQ -zQ +Zt +Zt JE -lv +WO Au FE nj @@ -8996,12 +9011,12 @@ GJ "} (19,1,2) = {" GJ -lv +WO Fa -zQ -zQ +Zt +Zt JE -lv +WO Au lC nj @@ -9064,12 +9079,12 @@ GJ "} (20,1,2) = {" GJ -lv +WO Ii -zQ -zQ +Zt +Zt xd -lv +WO Au lC nj @@ -9132,12 +9147,12 @@ GJ "} (21,1,2) = {" GJ -lv +WO ti -zQ -zQ +Zt +Zt xd -lv +WO oP ZF nj @@ -9200,12 +9215,12 @@ GJ "} (22,1,2) = {" GJ -lv +WO yX -zQ -zQ -zQ -zQ +Zt +Zt +Zt +Zt WW WW nj @@ -9268,12 +9283,12 @@ GJ "} (23,1,2) = {" GJ -lv +WO DP -zQ -zQ -zQ -zQ +Zt +Zt +Zt +Zt WW WW nj @@ -9336,12 +9351,12 @@ GJ "} (24,1,2) = {" GJ -lv +WO Fe hD -lv -lv -lv +WO +WO +WO md md ZU diff --git a/code/__DEFINES/~darkpack/traits/declarations.dm b/code/__DEFINES/~darkpack/traits/declarations.dm index 419d5dcca57b..3f80f22fb43b 100644 --- a/code/__DEFINES/~darkpack/traits/declarations.dm +++ b/code/__DEFINES/~darkpack/traits/declarations.dm @@ -146,6 +146,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_NO_LYING_ANGLE "no_lying_angle" // Expensive but allows us to ensure there resting gets updated. #define TRAIT_TRANSFORM_UPDATES_ICON "transform_updates_icon" +#define TRAIT_OPENS_MOONGATES "opens_moongates" +/// Friends and allowed to interact with the main gaian caern +#define TRAIT_GAIA_CAERN_FRIEND "gaia_caern_friend" // Fera both grants a flight ability, and has the sprites to support such a thing. (Presently only designed to supprot feral form.) #define TRAIT_FERA_FLIGHT "fera_flight" #define TRAIT_SILVER_WEAKNESS "silver_weakness" diff --git a/code/__DEFINES/~darkpack/traits/sources.dm b/code/__DEFINES/~darkpack/traits/sources.dm index 7f873747748c..80bfe711b295 100644 --- a/code/__DEFINES/~darkpack/traits/sources.dm +++ b/code/__DEFINES/~darkpack/traits/sources.dm @@ -1,7 +1,7 @@ #define NPC_ITEM_TRAIT "npc_item" -/// Trait given by a vampire's Clan -#define CLAN_TRAIT "clan" +/// Trait given by a splat's subsplat +#define SUBSPLAT_TRAIT "subsplat" #define GIFT_TRAIT "gift" diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index 44ae6dace8fa..bde50d68504c 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -702,6 +702,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_BLOODY_SUCKER" = TRAIT_BLOODY_SUCKER, // DARKPACK EDIT ADD "TRAIT_BLUSH_OF_HEALTH" = TRAIT_BLUSH_OF_HEALTH, // DARKPACK EDIT ADD "TRAIT_BOND_WITHIN_THE_MOUNTAIN" = TRAIT_BOND_WITHIN_THE_MOUNTAIN, // DARKPACK EDIT ADD - POWERS - (Visceratika) + "TRAIT_BRASSKNUCKLES" = TRAIT_BRASSKNUCKLES, // DARKPACK EDIT ADD - CLOTHES "TRAIT_CALM_HEART" = TRAIT_CALM_HEART, // DARKPACK EDIT ADD - MERITS_FLAWS "TRAIT_CANNOT_RESIST_MIND_CONTROL" = TRAIT_CANNOT_RESIST_MIND_CONTROL, // DARKPACK EDIT ADD "TRAIT_CAN_ENTER_TORPOR" = TRAIT_CAN_ENTER_TORPOR, // DARKPACK EDIT ADD @@ -723,11 +724,11 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_FEEDING_RESTRICTION" = TRAIT_FEEDING_RESTRICTION, // DARKPACK EDIT ADD "TRAIT_FERA_FLIGHT" = TRAIT_FERA_FLIGHT, // DARKPACK EDIT ADD - WEREWOLF "TRAIT_FERA_FORMS" = TRAIT_FERA_FORMS, // DARKPACK EDIT ADD - WEREWOLF - "TRAIT_POSSIBLE_WYRM" = TRAIT_POSSIBLE_WYRM, // DARKPACK EDIT ADD - WEREWOLF "TRAIT_FERA_FUR" = TRAIT_FERA_FUR, // DARKPACK EDIT ADD - WEREWOLF "TRAIT_FERA_RENOWN" = TRAIT_FERA_RENOWN, // DARKPACK EDIT ADD - WEREWOLF "TRAIT_FORCED_EMOTION" = TRAIT_FORCED_EMOTION, // DARKPACK EDIT ADD - Melpominee "TRAIT_FRENETIC_AURA" = TRAIT_FRENETIC_AURA, // DARKPACK EDIT ADD + "TRAIT_GAIA_CAERN_FRIEND" = TRAIT_GAIA_CAERN_FRIEND, // DARKPACK EDIT ADD - WEREWOLF "TRAIT_GHOST_VISION" = TRAIT_GHOST_VISION, // DARKPACK EDIT ADD - POWERS - (Necromancy) "TRAIT_GLOWING_EYES" = TRAIT_GLOWING_EYES, // DARKPACK EDIT ADD - MERITS_FLAWS - PHYSICAL FLAWS "TRAIT_GOLD_WEAKNESS" = TRAIT_GOLD_WEAKNESS, // DARKPACK EDIT ADD - WEREWOLF - (corax) @@ -762,12 +763,14 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_NO_EYE_CONTACT" = TRAIT_NO_EYE_CONTACT, // DARKPACK EDIT ADD "TRAIT_NO_LYING_ANGLE" = TRAIT_NO_LYING_ANGLE, // DARKPACK EDIT ADD - WEREWOLF "TRAIT_OBFUSCATED" = TRAIT_OBFUSCATED, // DARKPACK EDIT ADD + "TRAIT_OPENS_MOONGATES" = TRAIT_OPENS_MOONGATES, // DARKPACK EDIT ADD - WEREWOLF "TRAIT_ORGANOVORE" = TRAIT_ORGANOVORE, // DARKPACK EDIT ADD - Nagaraja "TRAIT_PAINFUL_VAMPIRE_KISS" = TRAIT_PAINFUL_VAMPIRE_KISS, // DARKPACK EDIT ADD "TRAIT_PALE_AURA" = TRAIT_PALE_AURA, // DARKPACK EDIT ADD - MERITS_FLAWS "TRAIT_PASS_THROUGH_WALLS" = TRAIT_PASS_THROUGH_WALLS, // DARKPACK EDIT ADD "TRAIT_PERMAFANGS" = TRAIT_PERMAFANGS, // DARKPACK EDIT ADD - MERITS_FLAWS "TRAIT_PIERCED_VEIL" = TRAIT_PIERCED_VEIL, // DARKPACK EDIT ADD - MERITS_FLAWS + "TRAIT_POSSIBLE_WYRM" = TRAIT_POSSIBLE_WYRM, // DARKPACK EDIT ADD - WEREWOLF "TRAIT_PREY_EXCLUSION" = TRAIT_PREY_EXCLUSION, // DARKPACK EDIT ADD - MERITS_FLAWS "TRAIT_PROMETHEAN_CLAY" = TRAIT_PROMETHEAN_CLAY, // DARKPACK EDIT ADD - MERITS_FLAWS "TRAIT_RAZOR_CLAWS" = TRAIT_RAZOR_CLAWS, // DARKPACK EDIT ADD - WEREWOLF @@ -810,7 +813,6 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_WEAK_WILLED" = TRAIT_WEAK_WILLED, // DARKPACK EDIT ADD - MERITS_FLAWS "TRAIT_WYRMTAINTED" = TRAIT_WYRMTAINTED, // DARKPACK EDIT ADD - WEREWOLF "TRAIT_WYRMTAINTED_SPRITE" = TRAIT_WYRMTAINTED_SPRITE, // DARKPACK EDIT ADD - WEREWOLF - "TRAIT_BRASSKNUCKLES" = TRAIT_BRASSKNUCKLES, // DARKPACK EDIT ADD - CLOTHES ), /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 acafc5920a96..a178aca36c82 100644 --- a/code/_globalvars/traits/admin_tooling.dm +++ b/code/_globalvars/traits/admin_tooling.dm @@ -396,6 +396,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_FERA_FUR" = TRAIT_FERA_FUR, // DARKPACK EDIT ADD - WEREWOLF "TRAIT_FERA_RENOWN" = TRAIT_FERA_RENOWN, // DARKPACK EDIT ADD - WEREWOLF "TRAIT_FRENETIC_AURA" = TRAIT_FRENETIC_AURA, // DARKPACK EDIT ADD + "TRAIT_GAIA_CAERN_FRIEND" = TRAIT_GAIA_CAERN_FRIEND, // DARKPACK EDIT ADD - WEREWOLF "TRAIT_GHOST_VISION" = TRAIT_GHOST_VISION, // DARKPACK EDIT ADD - POWERS - (Necromancy) "TRAIT_GLOWING_EYES" = TRAIT_GLOWING_EYES, // DARKPACK EDIT ADD - MERITS_FLAWS - PHYSICAL FLAWS "TRAIT_GOLD_WEAKNESS" = TRAIT_GOLD_WEAKNESS, // DARKPACK EDIT ADD - WEREWOLF - (corax) @@ -427,6 +428,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_NO_EYE_CONTACT" = TRAIT_NO_EYE_CONTACT, // DARKPACK EDIT ADD "TRAIT_NO_LYING_ANGLE" = TRAIT_NO_LYING_ANGLE, // DARKPACK EDIT ADD - WEREWOLF "TRAIT_OBFUSCATED" = TRAIT_OBFUSCATED, // DARKPACK EDIT ADD + "TRAIT_OPENS_MOONGATES" = TRAIT_OPENS_MOONGATES, // DARKPACK EDIT ADD - WEREWOLF "TRAIT_PAINFUL_VAMPIRE_KISS" = TRAIT_PAINFUL_VAMPIRE_KISS, // DARKPACK EDIT ADD "TRAIT_PALE_AURA" = TRAIT_PALE_AURA, // DARKPACK EDIT ADD - MERITS_FLAWS "TRAIT_PASS_THROUGH_WALLS" = TRAIT_PASS_THROUGH_WALLS, // DARKPACK EDIT ADD diff --git a/code/modules/power/lighting/light_mapping_helpers.dm b/code/modules/power/lighting/light_mapping_helpers.dm index f8b27d62ea13..43dd8e46fa06 100644 --- a/code/modules/power/lighting/light_mapping_helpers.dm +++ b/code/modules/power/lighting/light_mapping_helpers.dm @@ -119,9 +119,12 @@ /obj/machinery/light/prince/ghost/Initialize(mapload) . = ..() - RegisterSignal(src, COMSIG_ATOM_ENTERED, PROC_REF(jumpscare)) + var/static/list/loc_connections = list( + COMSIG_ATOM_ENTERED = PROC_REF(jumpscare), + ) + AddElement(/datum/element/connect_loc, loc_connections) -/obj/machinery/light/prince/ghost/proc/jumpscare(atom/movable/arrived, atom/old_loc, list/atom/old_locs) +/obj/machinery/light/prince/ghost/proc/jumpscare(datum/source, atom/movable/arrived, atom/old_loc, list/atom/old_locs) SIGNAL_HANDLER if(ishuman(arrived)) diff --git a/modular_darkpack/modules/areas/code/interiors/garou.dm b/modular_darkpack/modules/areas/code/interiors/garou.dm index 62f5291725d2..53ca10b7ed49 100644 --- a/modular_darkpack/modules/areas/code/interiors/garou.dm +++ b/modular_darkpack/modules/areas/code/interiors/garou.dm @@ -6,6 +6,13 @@ zone_type = ZONE_ELYSIUM gauntlet_rating = 5 +/area/vtm/interior/cog/caern/bawn + name = "Children of Gaia Bawn" + +/area/vtm/interior/cog/caern/bawn/LateInitialize() + . = ..() + AddComponent(/datum/component/bawn_area, /obj/structure/werewolf_totem/children_of_gaia) + /area/vtm/interior/cog/pantry name = "Earth's Bounty Food Pantry" icon_state = "cog_pantry" diff --git a/modular_darkpack/modules/merits_flaws/code/positive_quirks/giovanni_sanguine_incongruity.dm b/modular_darkpack/modules/merits_flaws/code/positive_quirks/giovanni_sanguine_incongruity.dm index a7e279b11981..13e138e49c20 100644 --- a/modular_darkpack/modules/merits_flaws/code/positive_quirks/giovanni_sanguine_incongruity.dm +++ b/modular_darkpack/modules/merits_flaws/code/positive_quirks/giovanni_sanguine_incongruity.dm @@ -20,7 +20,7 @@ var/datum/splat/vampire/kindred/kindred = get_kindred_splat(human_holder) if(kindred) if(istype(kindred.clan, /datum/subsplat/vampire_clan/giovanni)) - REMOVE_TRAIT(human_holder, TRAIT_PAINFUL_VAMPIRE_KISS, CLAN_TRAIT) + REMOVE_TRAIT(human_holder, TRAIT_PAINFUL_VAMPIRE_KISS, SUBSPLAT_TRAIT) if(human_holder.chronological_age >= 300) human_holder.rot_body(2) diff --git a/modular_darkpack/modules/merits_flaws/code/positive_quirks/stillness_of_death.dm b/modular_darkpack/modules/merits_flaws/code/positive_quirks/stillness_of_death.dm index 59354b7445cc..3e7bfe741b63 100644 --- a/modular_darkpack/modules/merits_flaws/code/positive_quirks/stillness_of_death.dm +++ b/modular_darkpack/modules/merits_flaws/code/positive_quirks/stillness_of_death.dm @@ -43,7 +43,7 @@ active = TRUE ADD_TRAIT(owner, TRAIT_IMMOBILIZED, "statue_form") ADD_TRAIT(owner, TRAIT_MUTE, "statue_form") - REMOVE_TRAIT(owner, TRAIT_MASQUERADE_VIOLATING_FACE, CLAN_TRAIT) + REMOVE_TRAIT(owner, TRAIT_MASQUERADE_VIOLATING_FACE, SUBSPLAT_TRAIT) owner.name = "Statue of a Gargoyle" var/newcolor = list(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0)) owner.add_atom_colour(newcolor, FIXED_COLOUR_PRIORITY) @@ -58,7 +58,7 @@ REMOVE_TRAIT(owner, TRAIT_IMMOBILIZED, "statue_form") REMOVE_TRAIT(owner, TRAIT_MUTE, "statue_form") - ADD_TRAIT(owner, TRAIT_MASQUERADE_VIOLATING_FACE, CLAN_TRAIT) + ADD_TRAIT(owner, TRAIT_MASQUERADE_VIOLATING_FACE, SUBSPLAT_TRAIT) owner.remove_atom_colour(FIXED_COLOUR_PRIORITY) owner.name = original_name diff --git a/modular_darkpack/modules/powers/code/discipline/obfuscate/obfuscate.dm b/modular_darkpack/modules/powers/code/discipline/obfuscate/obfuscate.dm index 48b32ed9f725..b0e817b3c4ca 100644 --- a/modular_darkpack/modules/powers/code/discipline/obfuscate/obfuscate.dm +++ b/modular_darkpack/modules/powers/code/discipline/obfuscate/obfuscate.dm @@ -276,10 +276,10 @@ if(target_splat?.clan?.alt_sprite) owner.set_body_sprite(target_splat.clan.alt_sprite, target_splat.clan.alt_sprite_greyscale, TRUE) else - if(owner_splat.clan && (TRAIT_MASQUERADE_VIOLATING_FACE in owner_splat.clan.clan_traits)) - REMOVE_TRAIT(owner, TRAIT_MASQUERADE_VIOLATING_FACE, CLAN_TRAIT) - if(owner_splat.clan && (TRAIT_MASQUERADE_VIOLATING_EYES in owner_splat.clan.clan_traits)) - REMOVE_TRAIT(owner, TRAIT_MASQUERADE_VIOLATING_EYES, CLAN_TRAIT) + if(owner_splat.clan && (TRAIT_MASQUERADE_VIOLATING_FACE in owner_splat.clan.subsplat_traits)) + REMOVE_TRAIT(owner, TRAIT_MASQUERADE_VIOLATING_FACE, SUBSPLAT_TRAIT) + if(owner_splat.clan && (TRAIT_MASQUERADE_VIOLATING_EYES in owner_splat.clan.subsplat_traits)) + REMOVE_TRAIT(owner, TRAIT_MASQUERADE_VIOLATING_EYES, SUBSPLAT_TRAIT) if(original_sprite == "rotten4" || original_sprite == "rotten3") REMOVE_TRAIT(owner, TRAIT_MASQUERADE_VIOLATING_FACE, MAGIC_TRAIT) owner.set_body_sprite(SPECIES_HUMAN, TRUE, TRUE) @@ -296,10 +296,10 @@ original_dna.copy_dna(owner.dna, 0) owner.name = original_name - if(owner_splat.clan && (TRAIT_MASQUERADE_VIOLATING_FACE in owner_splat.clan.clan_traits)) - ADD_TRAIT(owner, TRAIT_MASQUERADE_VIOLATING_FACE, CLAN_TRAIT) - if(owner_splat.clan && (TRAIT_MASQUERADE_VIOLATING_EYES in owner_splat.clan.clan_traits)) - ADD_TRAIT(owner, TRAIT_MASQUERADE_VIOLATING_EYES, CLAN_TRAIT) + if(owner_splat.clan && (TRAIT_MASQUERADE_VIOLATING_FACE in owner_splat.clan.subsplat_traits)) + ADD_TRAIT(owner, TRAIT_MASQUERADE_VIOLATING_FACE, SUBSPLAT_TRAIT) + if(owner_splat.clan && (TRAIT_MASQUERADE_VIOLATING_EYES in owner_splat.clan.subsplat_traits)) + ADD_TRAIT(owner, TRAIT_MASQUERADE_VIOLATING_EYES, SUBSPLAT_TRAIT) if(original_sprite == "rotten4" || original_sprite == "rotten3") ADD_TRAIT(owner, TRAIT_MASQUERADE_VIOLATING_FACE, MAGIC_TRAIT) diff --git a/modular_darkpack/modules/splats/code/subsplat/_subsplat.dm b/modular_darkpack/modules/splats/code/subsplat/_subsplat.dm index 6b655a62c6e0..783cc964389a 100644 --- a/modular_darkpack/modules/splats/code/subsplat/_subsplat.dm +++ b/modular_darkpack/modules/splats/code/subsplat/_subsplat.dm @@ -21,6 +21,9 @@ /// ID for trait sources and whatnot var/id + /// List of traits that are applied to members of this subsplat + var/list/subsplat_traits = list() + /// Typepath of keys for this subsplats's exclusive hideout var/obj/item/vamp/keys/subsplat_keys /// If we check the list of ids of city doors before granting the subsplat key @@ -34,6 +37,10 @@ RegisterSignal(gaining_mob, COMSIG_MOB_LOGIN, PROC_REF(on_join_round)) RegisterSignal(gaining_mob, COMSIG_HUMAN_CHARACTER_SETUP_FINISHED, PROC_REF(apply_after_setup)) + // Add unique subsplat features as traits + for (var/trait in subsplat_traits) + ADD_TRAIT(gaining_mob, trait, SUBSPLAT_TRAIT) + /** * Undoes the effects of on_gain more or less * remove the effects of gaining the subsplat. @@ -44,6 +51,11 @@ /datum/subsplat/proc/on_lose(mob/living/carbon/human/losing_mob) SHOULD_CALL_PARENT(TRUE) UnregisterSignal(losing_mob, list(COMSIG_MOB_LOGIN, COMSIG_HUMAN_CHARACTER_SETUP_FINISHED)) + + // Remove unique subsplat feature traits + for (var/trait in subsplat_traits) + REMOVE_TRAIT(losing_mob, trait, SUBSPLAT_TRAIT) + return 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 1b3d5652bd9a..d9e4953a4b4e 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 @@ -9,8 +9,6 @@ var/list/clan_disciplines = list() /// List of Disciplines that are rejected by this Clan var/list/restricted_disciplines = list() - /// List of traits that are applied to members of this Clan - var/list/clan_traits = list() /// The Clan's unique body sprite var/alt_sprite @@ -69,20 +67,12 @@ if (no_facial) gaining_mob.set_facial_hairstyle("Shaved", update = FALSE) - // Add unique Clan features as traits - for (var/trait in clan_traits) - ADD_TRAIT(gaining_mob, trait, CLAN_TRAIT) - // Mostly for summons to not kill you. gaining_mob.add_faction(id) /datum/subsplat/vampire_clan/on_lose(mob/living/carbon/human/losing_mob) . = ..() - // Remove unique Clan feature traits - for (var/trait in clan_traits) - REMOVE_TRAIT(losing_mob, trait, CLAN_TRAIT) - // Sets the losing_mob back to their default body sprite if (alt_sprite) losing_mob.set_body_sprite(ignore_clan = 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 6592c682fcf4..12b4a2218f92 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 @@ -11,7 +11,7 @@ /datum/discipline/daimoinon ) - clan_traits = list( + subsplat_traits = list( TRAIT_REPELLED_BY_HOLINESS ) male_clothes = /obj/item/clothing/under/vampire/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 28bbb25556c7..2c58d48af7c7 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 @@ -11,7 +11,7 @@ /datum/discipline/obfuscate, /datum/discipline/quietus ) - clan_traits = list( + subsplat_traits = list( TRAIT_VITAE_ADDICTION ) male_clothes = /obj/item/clothing/under/vampire/bandit @@ -34,4 +34,4 @@ /datum/discipline/auspex, /datum/discipline/quietus ) - clan_traits = list() + subsplat_traits = list() 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 87d5d7c3f4c9..80b89b09e90c 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 @@ -11,7 +11,7 @@ /datum/discipline/potence, /datum/discipline/presence ) - clan_traits = list( + subsplat_traits = list( TRAIT_DIFFICULT_FRENZY ) male_clothes = /obj/item/clothing/under/vampire/brujah 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 788d248182a2..955cc8dcf51d 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 @@ -10,7 +10,7 @@ /datum/discipline/potence, /datum/discipline/visceratika ) - clan_traits = list( + subsplat_traits = list( TRAIT_CANNOT_RESIST_MIND_CONTROL, TRAIT_MASQUERADE_VIOLATING_FACE, TRAIT_WEAK_TO_DOMINATE, 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 b686a391e96a..65fbcb79a8a4 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 @@ -10,7 +10,7 @@ /datum/discipline/dominate, /datum/discipline/necromancy ) - clan_traits = list( + subsplat_traits = list( TRAIT_PAINFUL_VAMPIRE_KISS ) male_clothes = /obj/item/clothing/under/vampire/suit diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/healer_salubri.dm b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/healer_salubri.dm index 26e27aff97a1..5c484179a988 100644 --- a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/healer_salubri.dm +++ b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/healer_salubri.dm @@ -10,7 +10,7 @@ /datum/discipline/fortitude, /datum/discipline/obeah ) - clan_traits = list( + subsplat_traits = list( TRAIT_CONSENSUAL_FEEDING_ONLY, TRAIT_IRRESISTIBLE_VITAE ) 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 a480f1d5f3e0..272515282347 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 @@ -10,7 +10,7 @@ /datum/discipline/obtenebration, /datum/discipline/mytherceria ) - clan_traits = list( + subsplat_traits = list( TRAIT_MASQUERADE_VIOLATING_EYES ) alt_sprite = "kiasyd" 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 4b07f6300532..e57d67c04d00 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 @@ -10,7 +10,7 @@ /datum/discipline/dominate, /datum/discipline/obtenebration ) - clan_traits = list( + subsplat_traits = list( TRAIT_REJECTED_BY_TECHNOLOGY, TRAIT_NO_MIRROR_REFLECTION, TRAIT_INVISIBLE_TO_CAMERA diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/nagaraja.dm b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/nagaraja.dm index 2dc50c8fff9b..37b335b9fdbd 100644 --- a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/nagaraja.dm +++ b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/nagaraja.dm @@ -10,7 +10,7 @@ /datum/discipline/dominate, /datum/discipline/necromancy ) - clan_traits = list(TRAIT_ORGANOVORE) + subsplat_traits = list(TRAIT_ORGANOVORE) male_clothes = /obj/item/clothing/under/vampire/emo female_clothes = /obj/item/clothing/under/vampire/emo whitelisted = FALSE 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 07a2d212a235..1f523cae864a 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 @@ -12,7 +12,7 @@ /datum/discipline/potence, /datum/discipline/obfuscate ) - clan_traits = list( + subsplat_traits = list( TRAIT_MASQUERADE_VIOLATING_FACE, TRAIT_VENTCRAWLER_ALWAYS ) diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/samedi.dm b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/samedi.dm index 0e479e724f8f..2f058021a9a1 100644 --- a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/samedi.dm +++ b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/samedi.dm @@ -10,7 +10,7 @@ /datum/discipline/thanatosis ) alt_sprite = "rotten4" - clan_traits = list( + subsplat_traits = list( TRAIT_MASQUERADE_VIOLATING_FACE ) whitelisted = TRUE 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 e27355e23dd6..e8ec28d871a3 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 @@ -11,7 +11,7 @@ /datum/discipline/presence, /datum/discipline/serpentis ) - clan_traits = list( + subsplat_traits = list( TRAIT_LIGHT_WEAKNESS ) male_clothes = /obj/item/clothing/under/vampire/slickback 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 2172029569e0..3030135e459b 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 @@ -11,7 +11,7 @@ /datum/discipline/celerity, /datum/discipline/presence ) - clan_traits = list( + subsplat_traits = list( TRAIT_SENSITIVE_HUMANITY ) male_clothes = /obj/item/clothing/under/vampire/toreador 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 ccff6123a40a..51f6195d8135 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 @@ -11,7 +11,7 @@ /datum/discipline/fortitude, /datum/discipline/presence ) - clan_traits = list( + subsplat_traits = list( TRAIT_FEEDING_RESTRICTION ) male_clothes = /obj/item/clothing/under/vampire/ventrue diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/warrior_salubri.dm b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/warrior_salubri.dm index 380911b0355e..5159cf3664b9 100644 --- a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/warrior_salubri.dm +++ b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clans/warrior_salubri.dm @@ -9,7 +9,7 @@ /datum/discipline/fortitude, /datum/discipline/valeren ) - clan_traits = list() + subsplat_traits = list() male_clothes = /obj/item/clothing/under/vampire/salubri female_clothes = /obj/item/clothing/under/vampire/salubri/female enlightenment = FALSE diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/caern/bawn.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/caern/bawn.dm new file mode 100644 index 000000000000..4511d0cca9d7 --- /dev/null +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/caern/bawn.dm @@ -0,0 +1,124 @@ +// A bawn is the border around a caern. +/obj/effect/realistic_fog/bawn + name = "dizzying fog" + alpha_lower = 20 + alpha_upper = 80 + var/linked_totem_path + var/obj/structure/werewolf_totem/linked_totem + +/obj/effect/realistic_fog/bawn/Initialize(mapload) + . = ..() + var/static/list/loc_connections = list( + COMSIG_ATOM_ENTERED = PROC_REF(check_allow_through), + ) + AddElement(/datum/element/connect_loc, loc_connections) + return INITIALIZE_HINT_LATELOAD + +/obj/effect/realistic_fog/bawn/LateInitialize() + for(var/obj/structure/werewolf_totem/totem in GLOB.totems) + if(istype(linked_totem, linked_totem_path)) + linked_totem = totem + RegisterSignal(totem, COMSIG_QDELETING, PROC_REF(on_totem_death)) + break + +/obj/effect/realistic_fog/bawn/proc/check_allow_through(datum/source, atom/movable/arrived, atom/old_loc, list/atom/old_locs) + SIGNAL_HANDLER + + if(!allow_pass(arrived)) + linked_totem.kick_out(arrived) + +/obj/effect/realistic_fog/bawn/proc/allow_pass(atom/movable/mover) + if(!isliving(mover)) + return TRUE + + if(is_friend_of_caern(mover)) + return TRUE + + for(var/mob/living/friend in range(3, mover)) + if(is_friend_of_caern(friend)) + return TRUE + + return FALSE + +/obj/effect/realistic_fog/bawn/proc/is_friend_of_caern(mob/living/potential_friend) + if(linked_totem) + return linked_totem.is_friend_of_totem(potential_friend) + + return TRUE + +/obj/effect/realistic_fog/bawn/gaia + linked_totem_path = /obj/structure/werewolf_totem/generic/gaia + +/obj/effect/realistic_fog/bawn/children_of_gaia + linked_totem_path = /obj/structure/werewolf_totem/children_of_gaia + +/obj/effect/realistic_fog/bawn/proc/on_totem_death(atom/source) + SIGNAL_HANDLER + + qdel(src) + + +/// Area component that makes all movement inside get tracked by motion sensitive cameras +/datum/component/bawn_area + dupe_mode = COMPONENT_DUPE_UNIQUE // Only one area will ever exist, so only one component will ever exist + + var/obj/structure/werewolf_totem/linked_totem + +/datum/component/bawn_area/Initialize(linked_totem_path) + // By the way, this component should be added in LateInitialize(). + if(!isarea(parent)) + return COMPONENT_INCOMPATIBLE + + for(var/obj/structure/werewolf_totem/totem in GLOB.totems) + if(istype(totem, linked_totem_path)) + linked_totem = totem + RegisterSignal(totem, COMSIG_QDELETING, PROC_REF(on_totem_death)) + break + + if(!linked_totem) + return COMPONENT_INCOMPATIBLE + +/datum/component/bawn_area/RegisterWithParent() + RegisterSignal(parent, COMSIG_AREA_ENTERED, PROC_REF(on_entered)) + +/datum/component/bawn_area/UnregisterFromParent() + UnregisterSignal(parent, COMSIG_AREA_ENTERED) + +/datum/component/bawn_area/proc/on_entered(area/_source, atom/movable/gain, area/_old_area) + SIGNAL_HANDLER + + if(!allow_pass(gain)) + linked_totem.kick_out(gain) + +/datum/component/bawn_area/proc/on_totem_death(atom/source) + SIGNAL_HANDLER + qdel(src) + +/datum/component/bawn_area/proc/allow_pass(atom/movable/mover) + if(!isliving(mover)) + return TRUE + + if(is_friend_of_caern(mover)) + return TRUE + + for(var/mob/living/friend in range(3, mover)) + if(is_friend_of_caern(friend)) + return TRUE + + return FALSE + +/datum/component/bawn_area/proc/is_friend_of_caern(mob/living/potential_friend) + if(linked_totem) + return linked_totem.is_friend_of_totem(potential_friend) + + return TRUE + + +/obj/effect/landmark/bawn_entrance + var/linked_totem_path + +/obj/effect/landmark/bawn_entrance/gaia + linked_totem_path = /obj/structure/werewolf_totem/generic/gaia + +/obj/effect/landmark/bawn_entrance/gaia/children_of_gaia + linked_totem_path = /obj/structure/werewolf_totem/children_of_gaia diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/totems.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/caern/totems.dm similarity index 73% rename from modular_darkpack/modules/werewolf_the_apocalypse/code/totems.dm rename to modular_darkpack/modules/werewolf_the_apocalypse/code/caern/totems.dm index 0844e4ddd124..50344232822e 100644 --- a/modular_darkpack/modules/werewolf_the_apocalypse/code/totems.dm +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/caern/totems.dm @@ -16,7 +16,8 @@ light_power = 0.5 damage_deflection = 5 - var/tribes = list() + var/friendly_trait + var/friendly_tribes COOLDOWN_DECLARE(rage_notify_cd) @@ -28,8 +29,8 @@ . = ..() var/list/candidates = list() for(var/obj/effect/landmark/teleport_mark/T in GLOB.landmarks_list) - for(var/entry in T.tribes) - if(entry in tribes) + for(var/entry in T.friendly_tribes) + if(entry in friendly_tribes) candidates += T break @@ -110,27 +111,29 @@ if(damage_change < 0) if(broken) - to_chat(human, span_userdanger("YOUR TOTEM IS DESTROYED")) + to_chat(human, span_userdanger("A TOTEM'S SPIRIT WEEPS IN PAIN AS IT'S TOTEM SHATTERS.")) SEND_SOUND(human, sound('sound/effects/tendril_destroyed.ogg', volume = 50)) - shifter_splat.adjust_gnosis(-5, FALSE) + shifter_splat.adjust_rage(3, FALSE) else - to_chat(human, span_userdanger("YOUR TOTEM IS BREAKING DOWN")) + to_chat(human, span_userdanger("A TOTEM's CRY CAN BE HEARD ACROSS THE CITY.")) SEND_SOUND(human, sound('modular_darkpack/modules/werewolf_the_apocalypse/sounds/bumps.ogg', volume = 50)) shifter_splat.adjust_rage(1, FALSE) else - to_chat(human, span_boldnotice("YOUR TOTEM IS RESTORED")) + to_chat(human, span_boldnotice("A TOTEM'S SPIRIT THANKS ITS ALLIES.")) SEND_SOUND(human, sound('modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/inspire.ogg', volume = 50)) shifter_splat.adjust_gnosis(1, FALSE) /// Returns true or false wether or not the totems benificial affects will target this mob /obj/structure/werewolf_totem/proc/is_friend_of_totem(mob/living/potential_friend) - var/datum/splat/werewolf/friends_splat = get_werewolf_splat(potential_friend) - if(!friends_splat) // RN the only totem effect relys on a werewolf splat - return FALSE - if(!friends_splat.tribe) // Dont fuck over tribeless fera. Prob need a better way to determine freinds tho + if(friendly_trait && HAS_TRAIT(potential_friend, friendly_trait)) return TRUE - if(!(friends_splat.tribe.name in tribes)) - return FALSE + + if(friendly_tribes) + var/datum/splat/werewolf/friends_splat = get_werewolf_splat(potential_friend) + if(!friends_splat) // RN the only totem effect relys on a werewolf splat + return FALSE + if(!(friends_splat.tribe.name in friendly_tribes)) + return FALSE return TRUE @@ -147,16 +150,16 @@ return var/obj/umbra_portal/prev = locate() in get_step(src, SOUTH) if(!prev) - if(shifter_splat.auspice?.name == AUSPICE_THEURGE) + if(HAS_TRAIT(user, TRAIT_OPENS_MOONGATES)) if(!opening) opening = TRUE if(do_after(user, 10 SECONDS, src)) spawn_portal() opening = FALSE else - to_chat(user, span_warning("You need a Theurge to open the Moon Gates!")) + to_chat(user, span_warning("You need someone who can open the Moon Gates!")) else - if(shifter_splat.auspice?.name == AUSPICE_THEURGE) + if(HAS_TRAIT(user, TRAIT_OPENS_MOONGATES)) collapse_portal(prev) /obj/structure/werewolf_totem/proc/spawn_portal() @@ -166,7 +169,9 @@ playsound(src, 'modular_darkpack/modules/deprecated/sounds/portal.ogg', 50, FALSE) var/obj/umbra_portal/U = new (get_step(src, SOUTH)) // New code doesnt relay on ID for these two's connections buy why not. - U.id = "[pick(tribes)][rand(1, 999)]" + U.id = "[rand(1, 999)]" + if(length(friendly_tribes)) + U.id += "[pick(friendly_tribes)]" var/obj/umbra_portal/P = new (teleport_turf) P.id = U.id U.link_portal(P) @@ -176,27 +181,41 @@ qdel(old_portal.exit) qdel(old_portal) +/obj/structure/werewolf_totem/proc/kick_out(mob/living/stinky_guy) + if(!istype(stinky_guy)) + return + + stinky_guy.set_confusion_if_lower(10 SECONDS) + stinky_guy.set_eye_blur_if_lower(30 SECONDS) + to_chat(stinky_guy, span_boldwarning("You get turned around and mixed up in a strange fog.")) + for(var/obj/effect/landmark/bawn_entrance/landmark in GLOB.landmarks_list) + if(!istype(src, landmark.linked_totem_path)) + continue + var/turf/kickout_turf = get_turf(landmark) + stinky_guy.forceMove(kickout_turf) + break + /obj/structure/werewolf_totem/wendigo name = "\improper " + TRIBE_GALESTALKERS + " totem" - tribes = list(TRIBE_GALESTALKERS) + friendly_tribes = list(TRIBE_GALESTALKERS) light_color = "#81ff4f" /obj/structure/werewolf_totem/children_of_gaia name = "\improper " + TRIBE_CHILDREN_OF_GAIA + " totem" - tribes = list(TRIBE_CHILDREN_OF_GAIA) + friendly_tribes = list(TRIBE_CHILDREN_OF_GAIA) light_color = "#00CEC8" /obj/structure/werewolf_totem/bone_gnawer name = "\improper " + TRIBE_BONE_GNAWERS + " totem" light_color = "#FFA500" - tribes = list(TRIBE_BONE_GNAWERS) + friendly_tribes = list(TRIBE_BONE_GNAWERS) /obj/structure/werewolf_totem/glasswalker name = "\improper " + TRIBE_GLASS_WALKERS + " totem" icon_state = "glassw" base_icon_state = "glassw" light_color = "#35b0ff" - tribes = list(TRIBE_GLASS_WALKERS) + friendly_tribes = list(TRIBE_GLASS_WALKERS) /obj/structure/werewolf_totem/spiral name = "spiral totem" @@ -204,51 +223,54 @@ icon_state = "spiral" base_icon_state = "spiral" light_color = "#ff5235" - tribes = list(TRIBE_BLACK_SPIRAL_DANCERS) - + friendly_tribes = list(TRIBE_BLACK_SPIRAL_DANCERS) /obj/structure/werewolf_totem/generic + abstract_type = /obj/structure/werewolf_totem/generic + +/obj/structure/werewolf_totem/generic/gaia light_color = "#81ff4f" - tribes = TRIBE_LIST_GAIA + friendly_tribes = TRIBE_LIST_GAIA + friendly_trait = TRAIT_GAIA_CAERN_FRIEND /obj/structure/werewolf_totem/generic/wyld light_color = "#81ff4f" - tribes = TRIBE_LIST_WYLD + friendly_tribes = TRIBE_LIST_WYLD /obj/structure/werewolf_totem/generic/weaver icon_state = "glassw" base_icon_state = "glassw" light_color = "#35b0ff" - tribes = TRIBE_LIST_WEAVER + friendly_tribes = TRIBE_LIST_WEAVER /obj/structure/werewolf_totem/generic/wyrm icon = 'modular_darkpack/modules/werewolf_the_apocalypse/icons/spiral_totem.dmi' icon_state = "spiral" base_icon_state = "spiral" light_color = "#ff5235" - tribes = TRIBE_LIST_WYRM + friendly_tribes = TRIBE_LIST_WYRM /obj/structure/werewolf_totem/generic/alltribes - tribes = TRIBE_LIST_ALL + friendly_tribes = TRIBE_LIST_ALL // This things type path sucks /obj/effect/landmark/teleport_mark name = "totem Exit Mark" icon_state = "portal_exit" - var/tribes = list() + var/friendly_tribes /obj/effect/landmark/teleport_mark/gaia - tribes = TRIBE_LIST_GAIA + friendly_tribes = TRIBE_LIST_GAIA /obj/effect/landmark/teleport_mark/wyld - tribes = TRIBE_LIST_WYLD + friendly_tribes = TRIBE_LIST_WYLD /obj/effect/landmark/teleport_mark/weaver - tribes = TRIBE_LIST_WEAVER + friendly_tribes = TRIBE_LIST_WEAVER /obj/effect/landmark/teleport_mark/wyrm - tribes = TRIBE_LIST_WYRM + friendly_tribes = TRIBE_LIST_WYRM /obj/effect/landmark/teleport_mark/alltribes - tribes = TRIBE_LIST_ALL + friendly_tribes = TRIBE_LIST_ALL diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/splats/fera_splat.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/splats/fera_splat.dm index 4685c8a89eb6..9c6e3a294e12 100644 --- a/modular_darkpack/modules/werewolf_the_apocalypse/code/splats/fera_splat.dm +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/splats/fera_splat.dm @@ -79,6 +79,7 @@ splat_traits = list( TRAIT_FERA_RENOWN, + TRAIT_GAIA_CAERN_FRIEND, // Without them having there own tribes or declared alligence. This is the best way to determine. ) // incompatible_splats = list(/datum/splat/werewolf/shifter) // TODO: Becoming a shifter should get rid of your kinfolk splat diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/subsplats/auspices/garou.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/subsplats/auspices/garou.dm index e43fa49cdae7..6e4d1cc3bc5c 100644 --- a/modular_darkpack/modules/werewolf_the_apocalypse/code/subsplats/auspices/garou.dm +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/subsplats/auspices/garou.dm @@ -91,6 +91,7 @@ /datum/subsplat/werewolf/auspice/garou/theurge name = AUSPICE_THEURGE desc = "The Crescent Moons can be strange and enigmatic, prone to falling into the convoluted symbolic logic of the spirits they truck with rather than the more familiar logic of humanity. Those Theurges born under the waning moon frequently have a harsher, more adversarial relationship with the spirit world - they tend to excel at binding and forcing spirits to their will, and are more vicious when battling spirits. Theurges born under the waxing moon tend to be more generous and open with the spirits, charming and cajoling rather than intimidating and threatening." + subsplat_traits = list(TRAIT_OPENS_MOONGATES) start_rage = 2 gifts_provided = list( /datum/action/cooldown/power/gift/mothers_touch, diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/subsplats/tribes/garou.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/subsplats/tribes/garou.dm index 02f75b986c38..2af705e6e7c7 100644 --- a/modular_darkpack/modules/werewolf_the_apocalypse/code/subsplats/tribes/garou.dm +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/subsplats/tribes/garou.dm @@ -116,7 +116,7 @@ // /datum/action/cooldown/power/gift/resist_pain, // DARKPACK TODO - (Selectable Gifts) // /datum/action/cooldown/power/gift/sense_wyrm, // DARKPACK TODO - (Selectable Gifts) ) - // tribe_trait = TRAIT_WYRMTAINTED_SPRITE + subsplat_traits = list(TRAIT_WYRMTAINTED) /datum/subsplat/werewolf/tribe/garou/blackspiraldancers/psychomania_effect(mob/living/target, mob/living/owner) target.playsound_local(target, "modular_darkpack/modules/powers/sounds/daimonion_laughs/demonlaugh3.ogg", 50, FALSE) diff --git a/tgstation.dme b/tgstation.dme index 7bfa24ca222c..4cc55707df74 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -8238,7 +8238,6 @@ #include "modular_darkpack\modules\werewolf_the_apocalypse\code\glyphs.dm" #include "modular_darkpack\modules\werewolf_the_apocalypse\code\hud.dm" #include "modular_darkpack\modules\werewolf_the_apocalypse\code\silver_damage.dm" -#include "modular_darkpack\modules\werewolf_the_apocalypse\code\totems.dm" #include "modular_darkpack\modules\werewolf_the_apocalypse\code\werewolf_globals.dm" #include "modular_darkpack\modules\werewolf_the_apocalypse\code\basic_mobs\wolf.dm" #include "modular_darkpack\modules\werewolf_the_apocalypse\code\basic_mobs\banes\_banes.dm" @@ -8246,6 +8245,8 @@ #include "modular_darkpack\modules\werewolf_the_apocalypse\code\basic_mobs\banes\suffocating.dm" #include "modular_darkpack\modules\werewolf_the_apocalypse\code\basic_mobs\corvid\_bird.dm" #include "modular_darkpack\modules\werewolf_the_apocalypse\code\basic_mobs\corvid\bird_ai.dm" +#include "modular_darkpack\modules\werewolf_the_apocalypse\code\caern\bawn.dm" +#include "modular_darkpack\modules\werewolf_the_apocalypse\code\caern\totems.dm" #include "modular_darkpack\modules\werewolf_the_apocalypse\code\changing_breeds\corax.dm" #include "modular_darkpack\modules\werewolf_the_apocalypse\code\gifts\_gift.dm" #include "modular_darkpack\modules\werewolf_the_apocalypse\code\gifts\auspices\ahroun.dm"