diff --git a/.github/workflows/rerun_flaky_tests.yml b/.github/workflows/rerun_flaky_tests.yml index 03fba398d5f9..908106bfd295 100644 --- a/.github/workflows/rerun_flaky_tests.yml +++ b/.github/workflows/rerun_flaky_tests.yml @@ -4,12 +4,12 @@ on: workflows: [CI Suite] types: - completed -# DARKPACK ADDITION START +# DARKPACK EDIT ADD START permissions: actions: write contents: write issues: write -# DARKPACK ADDITION END +# DARKPACK EDIT ADD END jobs: rerun_flaky_tests: runs-on: ubuntu-24.04 diff --git a/.github/workflows/run_linters.yml b/.github/workflows/run_linters.yml index 023cc283cb4b..0ec8f4bb82ae 100644 --- a/.github/workflows/run_linters.yml +++ b/.github/workflows/run_linters.yml @@ -65,7 +65,7 @@ jobs: if: steps.linter-setup.conclusion == 'success' && !cancelled() run: | bash tools/ci/check_grep.sh - bash modular_darkpack/tools/darkpack_check_grep.sh # DARKPACK EDIT ADDITION - checking modular_darkpack code + bash modular_darkpack/tools/darkpack_check_grep.sh # DARKPACK EDIT ADD - checking modular_darkpack code - name: Ticked File Enforcement if: steps.linter-setup.conclusion == 'success' && !cancelled() run: | diff --git a/SQL/database_changelog.md b/SQL/database_changelog.md index 3afbc73e77f4..55ddc8b80c8b 100644 --- a/SQL/database_changelog.md +++ b/SQL/database_changelog.md @@ -5,13 +5,13 @@ Make sure to also update `DB_MAJOR_VERSION` and `DB_MINOR_VERSION`, which can be The latest database version is 5.35; The query to update the schema revision table is: ```sql -INSERT INTO `schema_revision` (`major`, `minor`) VALUES (5, 35); /* DARKPACK EDIT, ORIGINAL: INSERT INTO `schema_revision` (`major`, `minor`) VALUES (5, 34); */ +INSERT INTO `schema_revision` (`major`, `minor`) VALUES (5, 35); /* DARKPACK EDIT CHANGE - ORIGINAL: INSERT INTO `schema_revision` (`major`, `minor`) VALUES (5, 34); */ ``` or ```sql -INSERT INTO `SS13_schema_revision` (`major`, `minor`) VALUES (5, 35); /* DARKPACK EDIT, ORIGINAL: INSERT INTO `SS13_schema_revision` (`major`, `minor`) VALUES (5, 34); */ +INSERT INTO `SS13_schema_revision` (`major`, `minor`) VALUES (5, 35); /* DARKPACK EDIT CHANGE - ORIGINAL: INSERT INTO `SS13_schema_revision` (`major`, `minor`) VALUES (5, 34); */ ``` In any query remember to add a prefix to the table names if you use one. diff --git a/SQL/tgstation_schema.sql b/SQL/tgstation_schema.sql index 5806da0b8ad3..9558fd9c2686 100644 --- a/SQL/tgstation_schema.sql +++ b/SQL/tgstation_schema.sql @@ -261,7 +261,7 @@ CREATE TABLE `library` ( `author` varchar(45) NOT NULL, `title` varchar(45) NOT NULL, `content` text NOT NULL, - `category` VARCHAR(255) NOT NULL, /* DARKPACK EDIT, ORIGINAL: `category` enum('Any','Fiction','Non-Fiction','Adult','Reference','Religion') NOT NULL, */ + `category` VARCHAR(255) NOT NULL, /* DARKPACK EDIT CHANGE - ORIGINAL: `category` enum('Any','Fiction','Non-Fiction','Adult','Reference','Religion') NOT NULL, */ `ckey` varchar(32) NOT NULL DEFAULT 'LEGACY', `datetime` datetime NOT NULL, `deleted` tinyint(1) unsigned DEFAULT NULL, diff --git a/SQL/tgstation_schema_prefixed.sql b/SQL/tgstation_schema_prefixed.sql index 992070c0dbbf..3556af1a3612 100644 --- a/SQL/tgstation_schema_prefixed.sql +++ b/SQL/tgstation_schema_prefixed.sql @@ -260,7 +260,7 @@ CREATE TABLE `SS13_library` ( `author` varchar(45) NOT NULL, `title` varchar(45) NOT NULL, `content` text NOT NULL, - `category` VARCHAR(255) NOT NULL, /* DARKPACK EDIT, ORIGINAL: `category` enum('Any','Fiction','Non-Fiction','Adult','Reference','Religion') NOT NULL, */ + `category` VARCHAR(255) NOT NULL, /* DARKPACK EDIT CHANGE - ORIGINAL: `category` enum('Any','Fiction','Non-Fiction','Adult','Reference','Religion') NOT NULL, */ `ckey` varchar(32) NOT NULL DEFAULT 'LEGACY', `datetime` datetime NOT NULL, `deleted` tinyint(1) unsigned DEFAULT NULL, diff --git a/_maps/map_files/Vampire/runtimetown.dmm b/_maps/map_files/Vampire/runtimetown.dmm index a4e63b216ee6..5f3288e3573b 100644 --- a/_maps/map_files/Vampire/runtimetown.dmm +++ b/_maps/map_files/Vampire/runtimetown.dmm @@ -45,6 +45,13 @@ /obj/structure/roadsign/crosswalk, /turf/open/floor/plating/sidewalk/poor, /area/vtm/outside/pacificheights) +"bs" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/abstract/cargo_landing_spot, +/turf/open/misc/dirt, +/area/vtm/outside/supply) "bB" = ( /obj/structure/chair/wood/darkpack/red, /turf/open/floor/plating/rough, @@ -354,7 +361,6 @@ /obj/effect/decal/cleanable/trash{ icon_state = "trash5" }, -/obj/effect/spawner/random/occult/artifact, /turf/open/floor/wood/smooth/old, /area/vtm/interior/sewer) "hK" = ( @@ -400,7 +406,7 @@ /turf/closed/wall/vampwall/painted, /area/vtm/interior/shop) "iJ" = ( -/obj/effect/spawner/random/occult/artifact, +/mob/living/basic/pet/cat/darkpack/cain, /turf/open/floor/wood/smooth/old, /area/vtm/interior/sewer) "iK" = ( @@ -483,6 +489,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 5 }, +/obj/effect/abstract/cargo_landing_spot, /turf/open/misc/dirt, /area/vtm/outside/supply) "jQ" = ( @@ -593,7 +600,6 @@ /area/vtm/interior/techshop) "lM" = ( /obj/effect/decal/cleanable/trash, -/obj/effect/spawner/random/occult/artifact, /turf/open/floor/wood/smooth/old, /area/vtm/interior/sewer) "lN" = ( @@ -601,7 +607,10 @@ /area/vtm/outside/supply) "lU" = ( /obj/structure/table/wood, -/obj/item/vtm_artifact/key_of_alamut, +/obj/item/occult_artifact/vampire/key_of_alamut{ + pixel_x = -2; + pixel_y = 3 + }, /turf/open/floor/wood/smooth/old, /area/vtm/interior/sewer) "lX" = ( @@ -611,6 +620,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 10 }, +/obj/effect/abstract/cargo_landing_spot, /turf/open/misc/dirt, /area/vtm/outside/supply) "md" = ( @@ -875,7 +885,14 @@ /area/vtm/outside/pacificheights) "qY" = ( /obj/structure/table/wood, -/obj/item/vtm_artifact/bloodstar, +/obj/item/occult_artifact/vampire/bloodstone{ + pixel_x = 9; + pixel_y = 5 + }, +/obj/item/occult_artifact/vampire/daimonori{ + pixel_x = -5; + pixel_y = 4 + }, /turf/open/floor/wood/smooth/old, /area/vtm/interior/sewer) "ri" = ( @@ -1095,6 +1112,10 @@ "tY" = ( /turf/open/floor/plating/canal, /area/vtm/outside/pacificheights) +"uf" = ( +/obj/effect/turf_decal/bordur, +/turf/open/floor/plating/sidewalk/poor, +/area/vtm/outside/baywalk) "ug" = ( /obj/machinery/door/airlock/elevator/right{ elevator_mode = 1; @@ -1158,7 +1179,15 @@ /area/vtm/graveyard) "va" = ( /obj/structure/table/wood, -/obj/item/vtm_artifact/fae_charm, +/obj/effect/spawner/random/occult/artifact/werewolf_only{ + pixel_y = 4 + }, +/obj/effect/spawner/random/occult/artifact/werewolf_only{ + pixel_x = -6 + }, +/obj/effect/spawner/random/occult/artifact/werewolf_only{ + pixel_x = 7 + }, /turf/open/floor/wood/smooth/old, /area/vtm/interior/sewer) "vi" = ( @@ -1237,7 +1266,14 @@ /area/vtm/outside/supply) "wr" = ( /obj/structure/table/wood, -/obj/item/vtm_artifact/odious_chalice, +/obj/item/occult_artifact/vampire/odious_chalice{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/occult_artifact/vampire/bloodstar{ + pixel_x = 12; + pixel_y = 4 + }, /turf/open/floor/wood/smooth/old, /area/vtm/interior/sewer) "wO" = ( @@ -1397,7 +1433,10 @@ /area/vtm/outside/pacificheights) "zF" = ( /obj/structure/table/wood, -/obj/item/vtm_artifact/weekapaug_thistle, +/obj/item/occult_artifact/vampire/weekapaug_thistle{ + pixel_x = -1; + pixel_y = 2 + }, /obj/machinery/light/directional/north, /turf/open/floor/wood/smooth/old, /area/vtm/interior/sewer) @@ -1507,6 +1546,13 @@ /obj/item/gun/ballistic/automatic/darkpack/sniper, /turf/open/floor/plating/rough, /area/vtm/interior/anarch) +"Ce" = ( +/obj/effect/turf_decal/bordur{ + dir = 1 + }, +/obj/fusebox/transformer, +/turf/open/floor/plating/sidewalk/poor, +/area/vtm/outside/baywalk) "Ct" = ( /obj/structure/lamppost/one{ dir = 1 @@ -1634,6 +1680,11 @@ }, /turf/open/floor/plating/sidewalk, /area/vtm/interior/cog) +"DS" = ( +/obj/effect/decal/pallet, +/obj/effect/abstract/cargo_landing_spot, +/turf/open/misc/dirt, +/area/vtm/outside/supply) "DT" = ( /obj/machinery/fax/endron, /obj/structure/table/wood, @@ -1792,6 +1843,9 @@ /obj/structure/vampdoor/prison, /turf/open/floor/plating/rough, /area/vtm/interior/shop) +"Gr" = ( +/turf/open/floor/plating/asphalt, +/area/vtm/outside/baywalk) "Gt" = ( /obj/structure/table, /obj/item/storage/medkit/darkpack/tox, @@ -2084,7 +2138,14 @@ /area/vtm/outside/supply) "Kz" = ( /obj/structure/table/wood, -/obj/item/vtm_artifact/heart_of_eliza, +/obj/item/occult_artifact/vampire/heart_of_eliza{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/occult_artifact/vampire/fae_charm{ + pixel_x = 7; + pixel_y = 7 + }, /turf/open/floor/wood/smooth/old, /area/vtm/interior/sewer) "KB" = ( @@ -2160,9 +2221,21 @@ }, /turf/open/floor/plating/asphalt, /area/vtm/outside/pacificheights) +"LC" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/abstract/cargo_landing_spot, +/turf/open/misc/dirt, +/area/vtm/outside/supply) "LG" = ( /obj/structure/table/wood, -/obj/item/vtm_artifact/daimonori, +/obj/item/occult_artifact/werewolf/dagger_of_retribution{ + pixel_x = -2; + pixel_y = 1 + }, +/obj/item/occult_artifact/werewolf/nyxs_bangle{ + pixel_x = 6; + pixel_y = 6 + }, /turf/open/floor/wood/smooth/old, /area/vtm/interior/sewer) "LL" = ( @@ -2285,8 +2358,10 @@ /area/vtm/outside/pacificheights) "Nb" = ( /obj/structure/table/wood, -/obj/item/vtm_artifact/tarulfang, -/mob/living/basic/pet/cat/darkpack/cain, +/obj/item/occult_artifact/vampire/tarulfang{ + pixel_x = 4; + pixel_y = 5 + }, /turf/open/floor/wood/smooth/old, /area/vtm/interior/sewer) "Nd" = ( @@ -2389,6 +2464,11 @@ /obj/effect/mapping_helpers/door/access/graveyard, /turf/open/floor/plating/rough, /area/vtm/graveyard/interior) +"OA" = ( +/obj/effect/turf_decal/bordur, +/obj/structure/lamppost/one, +/turf/open/floor/plating/sidewalk/poor, +/area/vtm/outside/baywalk) "OB" = ( /obj/darkpack_car/police{ locked = 0 @@ -2533,6 +2613,8 @@ "QD" = ( /obj/machinery/light/directional/north, /obj/effect/decal/cleanable/trash, +/obj/effect/spawner/random/occult/artifact, +/obj/ritual_rune/thaumaturgy/identification, /turf/open/floor/wood/smooth/old, /area/vtm/interior/sewer) "QJ" = ( @@ -2548,7 +2630,6 @@ /area/vtm/outside/pacificheights) "QN" = ( /obj/effect/decal/cleanable/litter, -/obj/effect/spawner/random/occult/artifact, /turf/open/floor/wood/smooth/old, /area/vtm/interior/sewer) "QR" = ( @@ -2568,6 +2649,11 @@ }, /turf/open/floor/plating/sidewalk, /area/vtm/outside/pacificheights) +"QU" = ( +/obj/effect/turf_decal/bordur, +/obj/structure/lamppost/one, +/turf/open/floor/plating/sidewalk/poor, +/area/vtm/outside/financialdistrict) "QW" = ( /obj/machinery/light/directional/north, /obj/effect/spawner/random/vending/snackvend, @@ -2614,7 +2700,6 @@ /obj/effect/decal/cleanable/trash{ icon_state = "trash7" }, -/obj/effect/spawner/random/occult/artifact, /turf/open/floor/wood/smooth/old, /area/vtm/interior/sewer) "RV" = ( @@ -2800,7 +2885,10 @@ /area/vtm/outside/pacificheights) "VH" = ( /obj/structure/table/wood, -/obj/item/vtm_artifact/galdjum, +/obj/item/occult_artifact/vampire/galdjum{ + pixel_x = 5; + pixel_y = 2 + }, /turf/open/floor/wood/smooth/old, /area/vtm/interior/sewer) "VJ" = ( @@ -2856,6 +2944,13 @@ /obj/machinery/light/directional/west, /turf/open/floor/plating/rough, /area/vtm/interior/anarch) +"Wn" = ( +/obj/effect/turf_decal/bordur{ + dir = 1 + }, +/obj/fusebox/transformer, +/turf/open/floor/plating/sidewalk/poor, +/area/vtm/outside/financialdistrict) "Ws" = ( /obj/structure/table, /obj/vampire_computer, @@ -2872,11 +2967,23 @@ /area/vtm/interior/clinic) "WB" = ( /obj/structure/table/wood, -/obj/item/vtm_artifact/mummywrap_fetish, +/obj/item/occult_artifact/vampire/mummywrap_fetish{ + pixel_x = -6; + pixel_y = 3 + }, /turf/open/floor/wood/smooth/old, /area/vtm/interior/sewer) "WD" = ( /obj/structure/table/reinforced, +/obj/effect/spawner/random/occult/artifact/vampire_only, +/obj/effect/spawner/random/occult/artifact/vampire_only{ + pixel_x = 7; + pixel_y = -3 + }, +/obj/effect/spawner/random/occult/artifact/vampire_only{ + pixel_x = -9; + pixel_y = -2 + }, /turf/open/floor/wood/smooth/old, /area/vtm/interior/sewer) "WH" = ( @@ -3028,7 +3135,17 @@ /area/vtm/outside/pacificheights) "YY" = ( /obj/structure/table/reinforced, -/obj/item/ritual_tome/arcane, +/obj/item/ritual_tome/arcane{ + pixel_y = 6 + }, +/obj/item/ritual_tome/necromancy{ + pixel_x = -4; + pixel_y = 2 + }, +/obj/item/ritual_tome/abyss{ + pixel_x = 4; + pixel_y = 2 + }, /turf/open/floor/wood/smooth/old, /area/vtm/interior/sewer) "Zc" = ( @@ -3051,6 +3168,11 @@ "Zz" = ( /turf/open/misc/grass/random/grass, /area/vtm/outside/pacificheights) +"ZC" = ( +/obj/effect/turf_decal/bordur, +/obj/structure/roadsign/street, +/turf/open/floor/plating/sidewalk/poor, +/area/vtm/outside/pacificheights) "ZF" = ( /obj/structure/railing, /turf/open/floor/plating/canal, @@ -3216,7 +3338,7 @@ GF (3,1,1) = {" GF Ef -qY +zM LG va zM @@ -3420,9 +3542,9 @@ GF (6,1,1) = {" GF Ef -zM +qY RP -iJ +zd lU Ef JH @@ -3489,7 +3611,7 @@ GF GF Ef Nb -iJ +zd QN WB Ef @@ -3557,8 +3679,8 @@ GF GF Ef zF -iJ -iJ +zd +zd zd OP PO @@ -4730,7 +4852,7 @@ UJ NR Hy NR -cj +ZC ik VQ ik @@ -5750,11 +5872,11 @@ NR NR NR NR -cj -ik +uf +Gr VQ ik -Fs +Ce qt FO Wa @@ -5818,8 +5940,8 @@ NR NR NR NR -Bq -ik +OA +Gr VQ ik Fs @@ -6301,7 +6423,7 @@ HJ Fs Wa Wa -Mn +bs Lb kj Wa @@ -6369,7 +6491,7 @@ ik Fs Wa Wa -Mn +bs Lb kj Wa @@ -6430,16 +6552,16 @@ NR NR NR NR -Bq +QU ik VQ ik -Fs +Wn Wa Wa Mn Lb -kj +LC Wa Lb Wa @@ -6507,7 +6629,7 @@ Wa Wa Mn Lb -kj +LC Wa Lb sR @@ -6780,7 +6902,7 @@ Wa Wa Lb Wa -sR +DS Lb Wa Wa @@ -6848,7 +6970,7 @@ Wa Wa Lb Wa -sR +DS Lb Wa Wa diff --git a/_maps/map_files/Vampire/westfield_mall/westfield_mall.dmm b/_maps/map_files/Vampire/westfield_mall/westfield_mall.dmm index a8ab591c1819..fd44ab2adb89 100644 --- a/_maps/map_files/Vampire/westfield_mall/westfield_mall.dmm +++ b/_maps/map_files/Vampire/westfield_mall/westfield_mall.dmm @@ -10389,6 +10389,7 @@ /area/vtm/interior/sewer/nosferatu_town) "aIg" = ( /obj/effect/turf_decal/loading_area, +/obj/effect/abstract/cargo_landing_spot, /turf/open/misc/dirt, /area/vtm/westfield_mall/interior/supply) "aIh" = ( @@ -17832,6 +17833,10 @@ /obj/effect/decal/rugs, /turf/open/floor/iron/dark, /area/vtm/westfield_mall/interior/art_store) +"rtM" = ( +/obj/effect/abstract/cargo_landing_spot, +/turf/open/floor/plating/concrete, +/area/vtm/westfield_mall/interior/supply) "rus" = ( /obj/machinery/sprinkler, /turf/open/floor/wood/smooth/old, @@ -17909,6 +17914,11 @@ }, /turf/open/floor/plating/roofwalk, /area/vtm/westfield_mall) +"rSA" = ( +/obj/effect/decal/pallet, +/obj/effect/abstract/cargo_landing_spot, +/turf/open/floor/plating/concrete, +/area/vtm/westfield_mall/interior/supply) "rSN" = ( /obj/effect/turf_decal/bordur{ dir = 8 @@ -26043,11 +26053,11 @@ aFc (49,1,1) = {" aFc aOe -ars +rtM aZf aaV aZf -ars +rtM agx ars aNJ @@ -27263,7 +27273,7 @@ ars aZf aaV aZf -aiq +rSA aOe aeW aVT @@ -28171,7 +28181,7 @@ aFc (63,1,1) = {" aFc aOe -aiq +rSA aZf aaV aZf @@ -28783,7 +28793,7 @@ ars aZf aaV aZf -aiq +rSA aOe aeW aeW @@ -29999,7 +30009,7 @@ ars aZf aaV aIg -ars +rtM apX aOe aeW @@ -30151,7 +30161,7 @@ ars aZf aaV aIg -ars +rtM apX aOe aeW @@ -30455,7 +30465,7 @@ ars aXD aaV aZf -aiq +rSA aOe aeW aeW @@ -30907,7 +30917,7 @@ aFc (81,1,1) = {" aFc aOe -aiq +rSA aZf aaV aZf @@ -31667,7 +31677,7 @@ aFc (86,1,1) = {" aFc aOe -ars +rtM aZf aaV aZf @@ -32579,7 +32589,7 @@ aFc (92,1,1) = {" aFc aOe -ars +rtM aZf aaV aZf @@ -32731,7 +32741,7 @@ aFc (93,1,1) = {" aFc aOe -ars +rtM aZf aaV aZf diff --git a/code/__DEFINES/jobs.dm b/code/__DEFINES/jobs.dm index a5a3319b53e7..a372cc8e9020 100644 --- a/code/__DEFINES/jobs.dm +++ b/code/__DEFINES/jobs.dm @@ -17,12 +17,16 @@ #define JOB_UNAVAILABLE_SPLAT_SLOTS 9 /// Checks for character whitelist. #define JOB_UNAVAILABLE_WHITELIST 10 -/// Checks for character kindred age. -#define JOB_UNAVAILABLE_KINDRED_AGE 11 +/// Checks for character kindred age. (Minium age) +#define JOB_UNAVAILABLE_KINDRED_AGE_MIN 11 +/// Checks for character kindred age. (Maximum age) +#define JOB_UNAVAILABLE_KINDRED_AGE_MAX 12 /// Checks for character kindred generation. -#define JOB_UNAVAILABLE_KINDRED_GENERATION 12 +#define JOB_UNAVAILABLE_KINDRED_GENERATION 13 /// Checks for character clan. -#define JOB_UNAVAILABLE_KINDRED_CLAN 13 +#define JOB_UNAVAILABLE_KINDRED_CLAN 14 +#define JOB_UNAVAILABLE_FERA_TRIBE 15 +#define JOB_UNAVAILABLE_FERA_AUSPICE 16 // DARKPACK EDIT ADD END @@ -284,7 +288,7 @@ DEFINE_BITFIELD(job_flags, list( )) /// Combination flag for jobs which are considered regular crew members of the station. -#define STATION_JOB_FLAGS (JOB_ANNOUNCE_ARRIVAL|JOB_CREW_MANIFEST|JOB_EQUIP_RANK|JOB_CREW_MEMBER|JOB_HIDE_WHEN_EMPTY|JOB_LATEJOIN_ONLY|JOB_CANNOT_OPEN_SLOTS|JOB_REOPEN_ON_ROUNDSTART_LOSS|JOB_ASSIGN_QUIRKS|JOB_CAN_BE_INTERN) // DARKPACK EDIT, ORIGINAL: #define STATION_JOB_FLAGS (JOB_ANNOUNCE_ARRIVAL|JOB_CREW_MANIFEST|JOB_EQUIP_RANK|JOB_CREW_MEMBER|JOB_NEW_PLAYER_JOINABLE|JOB_REOPEN_ON_ROUNDSTART_LOSS|JOB_ASSIGN_QUIRKS|JOB_CAN_BE_INTERN) +#define STATION_JOB_FLAGS (JOB_ANNOUNCE_ARRIVAL|JOB_CREW_MANIFEST|JOB_EQUIP_RANK|JOB_CREW_MEMBER|JOB_HIDE_WHEN_EMPTY|JOB_LATEJOIN_ONLY|JOB_CANNOT_OPEN_SLOTS|JOB_REOPEN_ON_ROUNDSTART_LOSS|JOB_ASSIGN_QUIRKS|JOB_CAN_BE_INTERN) // DARKPACK EDIT CHANGE - ORIGINAL: #define STATION_JOB_FLAGS (JOB_ANNOUNCE_ARRIVAL|JOB_CREW_MANIFEST|JOB_EQUIP_RANK|JOB_CREW_MEMBER|JOB_NEW_PLAYER_JOINABLE|JOB_REOPEN_ON_ROUNDSTART_LOSS|JOB_ASSIGN_QUIRKS|JOB_CAN_BE_INTERN) /// Combination flag for jobs which are considered heads of staff. #define HEAD_OF_STAFF_JOB_FLAGS (JOB_BOLD_SELECT_TEXT|JOB_CANNOT_OPEN_SLOTS|JOB_HEAD_OF_STAFF) /// Combination flag for jobs which are enabled by station traits. diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 5dbe80719730..6eab221d0160 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -197,7 +197,7 @@ #define SPECIES_SKELETON "skeleton" #define SPECIES_SNAIL "snail" #define SPECIES_VAMPIRE "vampire" -#define SPECIES_ZOMBIE "rotten2" // DARKPACK EDIT -- Original : #define SPECIES_ZOMBIE "zombie" +#define SPECIES_ZOMBIE "rotten2" // DARKPACK EDIT CHANGE - ORIGINAL: #define SPECIES_ZOMBIE "zombie" #define SPECIES_ZOMBIE_INFECTIOUS "memezombie" #define SPECIES_ZOMBIE_INFECTIOUS_MINDLESS "mindless_memezombie" #define SPECIES_ZOMBIE_KROKODIL "krokodil_zombie" diff --git a/code/__DEFINES/~darkpack/blooper.dm b/code/__DEFINES/~darkpack/blooper.dm new file mode 100644 index 000000000000..42ed9a533c7d --- /dev/null +++ b/code/__DEFINES/~darkpack/blooper.dm @@ -0,0 +1,19 @@ +#define PREFERENCE_CATEGORY_VOCALS "vocals" + +//BLOOPER defines +#define BLOOPER_DEFAULT_MINPITCH 0.4 +#define BLOOPER_DEFAULT_MAXPITCH 2 +#define BLOOPER_DEFAULT_MINVARY 0.1 +#define BLOOPER_DEFAULT_MAXVARY 0.8 +#define BLOOPER_DEFAULT_MINSPEED 2 +#define BLOOPER_DEFAULT_MAXSPEED 16 + +#define BLOOPER_SPEED_BASELINE 4 //Used to calculate delay between BLOOPERs, any BLOOPER speeds below this feature higher BLOOPER density, any speeds above feature lower BLOOPER density. Keeps BLOOPERing length consistent + +#define BLOOPER_TRANSMIT_VOLUME 55 +#define BLOOPER_MAX_BLOOPERS 24 +#define BLOOPER_MAX_TIME (1.5 SECONDS) // More or less the amount of time the above takes to process through with a BLOOPER speed of 2. + +#define BLOOPER_DO_VARY(pitch, variance) (rand(((pitch * 100) - (variance*50)), ((pitch*100) + (variance*50))) / 100) + +#define BLOOPER_SOUND_FALLOFF_EXPONENT 0.5 //At lower ranges, we want the exponent to be below 1 so that whispers don't sound too awkward. At higher ranges, we want the exponent fairly high to make yelling less obnoxious diff --git a/code/__DEFINES/~darkpack/branding.dm b/code/__DEFINES/~darkpack/branding.dm index 774626bc4970..3bb9d0dde720 100644 --- a/code/__DEFINES/~darkpack/branding.dm +++ b/code/__DEFINES/~darkpack/branding.dm @@ -2,17 +2,18 @@ #define CITY_POLICE_DEPARTMENT CITY_NAME + " Police Department" #define NEWSPAPER_COMPANY "Angel Times" +#define PRIMARY_NIGHTCLUB_COMPANY "Dora" #define SEPT_NAME "Sept of the Western Eye" -#define EVIL_COMPANY "Pentex" +#define EVIL_COMPANY "Pentex Group" #define MAIN_EVIL_COMPANY EVIL_OIL_COMPANY // Only effects Pentex job slots // Treated as subsidary of EVIL_COMPANY /* MAJOR COMPANIES - Currently or at one time held the Top 21 Company title */ #define EVIL_TRASH_COMPANY "Ardus Enterprises" -#define EVIL_TOY_COMPANY "Avalon Incorporated." +#define EVIL_TOY_COMPANY "Avalon Incorporated" #define EVIL_CIGARETTE_COMPANY "Circinus Brands" #define EVIL_INVESTMENT_COMPANY "Consolidex Worldwide" #define EVIL_OIL_COMPANY "Endron International" @@ -20,6 +21,7 @@ #define EVIL_MINING_COMPANY "Harold and Harold Mining, Incorporated" #define EVIL_PAPER_COMPANY "Good House International" #define EVIL_FISHING_COMPANY "Hallahan Fishing Company" +#define EVIL_HANDGUN_COMPANY "Herculean Firearms Incorporated" #define EVIL_GROCERY_COMPANY "Herrick's" #define EVIL_LIQUOR_COMPANY "King Breweries and Distilleries" #define EVIL_PHARMA_COMPANY "Magadon, Incorporated" @@ -41,7 +43,7 @@ #define EVIL_EGYPTIAN_OIL_COMPANY "EGPC" /* HAROLD AND HAROLD SUBSIDIARIES */ -#define EVIL_EGYPTIAN_MINING_COMPANY "Kaulet Mining" +#define EVIL_EGYPTIAN_MINING_COMPANY "Kauket Mining" /* KING BREWERIES SUBSIDIARIES */ #define EVIL_WATERWAY_COMPANY "AquaClear Foundation" @@ -82,13 +84,12 @@ #define EVIL_COSMETICS_COMPANY_3 "Pangloss Cosmetics" // Subsidiary of Siren Cosmetics #define EVIL_WEAPON_COMPANY "Full Force Solutions" #define EVIL_PR_COMPANY "Gaia Research Company" -#define EVIL_HANDGUN_COMPANY "Herculean Firearms Incorporated" #define EVIL_CONSTRUCTION_COMPANY "Hi-Quality Builders" #define EVIL_LAW_COMPANY "Meyers, Feinstein and Hargrett" #define EVIL_TECH_COMPANY "NikNak Computing" #define EVIL_GAMING_COMPANY "Deep Dive Games" // Subsidiary of NikNak #define EVIL_NEWS_COMPANY "RED Network" -#define EVIL_CONTSTRUCTION_COMPANY_2 "Safe Haven Construction" +#define EVIL_CONSTRUCTION_COMPANY_2 "Safe Haven Construction" #define EVIL_INTEL_COMPANY "Shade, Inc." #define EVIL_HORROR_COMPANY "Slaughterhouse Video" #define EVIL_CONSULTING_COMPANY "Southeastern Tech Management" diff --git a/code/__DEFINES/~darkpack/colors.dm b/code/__DEFINES/~darkpack/colors.dm index ba63b538ad1b..ec2b32ba0e7c 100644 --- a/code/__DEFINES/~darkpack/colors.dm +++ b/code/__DEFINES/~darkpack/colors.dm @@ -1 +1,22 @@ -#define COLOR_ENDRON_GREEN "#015334" +#define COLOR_CORP_PENTEX "#3B2033" + +#define COLOR_CORP_ARDUS "#9BADB7" +#define COLOR_CORP_AVALON "#6556ED" +#define COLOR_CORP_CIRCINUS "#FFBF82" +#define COLOR_CORP_CONSOLIDEX "#DD28FF" +#define COLOR_CORP_ENDRON "#015334" +#define COLOR_CORP_HAROLD_HAROLD "#92483B" +#define COLOR_CORP_GOOD_HOUSE "#B297BB" +#define COLOR_CORP_HALLAHAN "#460DD1" +#define COLOR_CORP_HERCULEAN "#FF1010" +#define COLOR_CORP_HERRICKS "#9009BB" +#define COLOR_CORP_KING "#CDAF58" +#define COLOR_CORP_MAGADON "#45F7FF" +#define COLOR_CORP_NASTRUM "#FF7DA2" +#define COLOR_CORP_OMNI_TV "#ED795E" +#define COLOR_CORP_OTOLLEYS "#8FEDC5" +#define COLOR_CORP_BLACK_DOG "#E3EBFF" +#define COLOR_CORP_RAINBOW_INC "#FFB6EE" +#define COLOR_CORP_TELLUS "#66FF28" +#define COLOR_CORP_VESUVIUS "#E7E8C7" +#define COLOR_CORP_YOUNG_SMITH "#A5BB97" diff --git a/code/__DEFINES/~darkpack/factions.dm b/code/__DEFINES/~darkpack/factions.dm index a50f6a29f635..edfa94b41185 100644 --- a/code/__DEFINES/~darkpack/factions.dm +++ b/code/__DEFINES/~darkpack/factions.dm @@ -4,8 +4,10 @@ #define FACTION_ANARCHS "anarchs" #define FACTION_CAMARILLA "camarilla" #define FACTION_SABBAT "sabbat" +#define FACTION_GIOVANNI "giovanni-faction" // City faction #define FACTION_CITY "city" #define FACTION_GAIA "gaia" +#define FACTION_PENTEX "pentex" diff --git a/code/__DEFINES/~darkpack/fera/fera.dm b/code/__DEFINES/~darkpack/fera/fera.dm index 5eb76a3149ab..6a2f0b7a33f9 100644 --- a/code/__DEFINES/~darkpack/fera/fera.dm +++ b/code/__DEFINES/~darkpack/fera/fera.dm @@ -25,4 +25,5 @@ GLOBAL_LIST_INIT(garou_fur_colors, list( "brown" = "brown" )) +#define STATUS_EFFECT_DELIRIUM /datum/status_effect/delirium #define STATUS_EFFECT_SILVER_BULLET_STACKS /datum/status_effect/stacking/silver_bullets diff --git a/code/__DEFINES/~darkpack/fera/werewolf_tribe.dm b/code/__DEFINES/~darkpack/fera/werewolf_tribe.dm index 6c040cf46c96..e9bfd5a7b088 100644 --- a/code/__DEFINES/~darkpack/fera/werewolf_tribe.dm +++ b/code/__DEFINES/~darkpack/fera/werewolf_tribe.dm @@ -18,8 +18,8 @@ #define TRIBE_CORAX "Corax" // DARKPACK TODO - CORAX -#define TRIBE_ALL list(TRIBE_RONIN, TRIBE_GALESTALKERS, TRIBE_CHILDREN_OF_GAIA, TRIBE_UKTENA, TRIBE_FIANNA, TRIBE_GET_OF_FENRIS, TRIBE_BLACK_FURIES, TRIBE_SILVER_FANGS, TRIBE_SILENT_STRIDERS, TRIBE_RED_TALONS, TRIBE_STARGAZERS, TRIBE_GLASS_WALKERS, TRIBE_BONE_GNAWERS, TRIBE_SHADOW_LORDS, TRIBE_BLACK_SPIRAL_DANCERS, TRIBE_CORAX) -#define TRIBE_GAIA list(TRIBE_GALESTALKERS, TRIBE_CHILDREN_OF_GAIA, TRIBE_UKTENA, TRIBE_FIANNA, TRIBE_GET_OF_FENRIS, TRIBE_BLACK_FURIES, TRIBE_SILVER_FANGS, TRIBE_SILENT_STRIDERS, TRIBE_RED_TALONS, TRIBE_STARGAZERS, TRIBE_GLASS_WALKERS, TRIBE_BONE_GNAWERS, TRIBE_SHADOW_LORDS, TRIBE_CORAX) -#define TRIBE_WYLD list(TRIBE_GALESTALKERS, TRIBE_CHILDREN_OF_GAIA, TRIBE_UKTENA, TRIBE_FIANNA, TRIBE_GET_OF_FENRIS, TRIBE_BLACK_FURIES, TRIBE_SILVER_FANGS, TRIBE_SILENT_STRIDERS, TRIBE_RED_TALONS, TRIBE_STARGAZERS, TRIBE_SHADOW_LORDS, TRIBE_CORAX) -#define TRIBE_WEAVER list(TRIBE_GLASS_WALKERS, TRIBE_BONE_GNAWERS) -#define TRIBE_WYRM list(TRIBE_BLACK_SPIRAL_DANCERS) +#define TRIBE_LIST_ALL list(TRIBE_RONIN, TRIBE_GALESTALKERS, TRIBE_CHILDREN_OF_GAIA, TRIBE_UKTENA, TRIBE_FIANNA, TRIBE_GET_OF_FENRIS, TRIBE_BLACK_FURIES, TRIBE_SILVER_FANGS, TRIBE_SILENT_STRIDERS, TRIBE_RED_TALONS, TRIBE_STARGAZERS, TRIBE_GLASS_WALKERS, TRIBE_BONE_GNAWERS, TRIBE_SHADOW_LORDS, TRIBE_BLACK_SPIRAL_DANCERS, TRIBE_CORAX) +#define TRIBE_LIST_GAIA list(TRIBE_GALESTALKERS, TRIBE_CHILDREN_OF_GAIA, TRIBE_UKTENA, TRIBE_FIANNA, TRIBE_GET_OF_FENRIS, TRIBE_BLACK_FURIES, TRIBE_SILVER_FANGS, TRIBE_SILENT_STRIDERS, TRIBE_RED_TALONS, TRIBE_STARGAZERS, TRIBE_GLASS_WALKERS, TRIBE_BONE_GNAWERS, TRIBE_SHADOW_LORDS, TRIBE_CORAX) +#define TRIBE_LIST_WYLD list(TRIBE_GALESTALKERS, TRIBE_CHILDREN_OF_GAIA, TRIBE_UKTENA, TRIBE_FIANNA, TRIBE_GET_OF_FENRIS, TRIBE_BLACK_FURIES, TRIBE_SILVER_FANGS, TRIBE_SILENT_STRIDERS, TRIBE_RED_TALONS, TRIBE_STARGAZERS, TRIBE_SHADOW_LORDS, TRIBE_CORAX) +#define TRIBE_LIST_WEAVER list(TRIBE_GLASS_WALKERS, TRIBE_BONE_GNAWERS) +#define TRIBE_LIST_WYRM list(TRIBE_BLACK_SPIRAL_DANCERS) diff --git a/code/__DEFINES/~darkpack/jobs.dm b/code/__DEFINES/~darkpack/jobs.dm index e0068c35ce96..d234471e43d7 100644 --- a/code/__DEFINES/~darkpack/jobs.dm +++ b/code/__DEFINES/~darkpack/jobs.dm @@ -103,6 +103,12 @@ #define JOB_PENTEX_SEC "Security Agent" #define JOB_PENTEX_EMPLOYEE "Employee" +// Society of Leopold +#define JOB_NOVICE "Novice" +#define JOB_ABBE "Abbe" +#define JOB_CONDOTTIERI "Condottieri" +#define JOB_INQUISITOR "Inquisitor" + ////////////////////////////////////////////////// #define JOB_DISPLAY_ORDER_CITIZEN 1 @@ -172,6 +178,11 @@ #define JOB_DISPLAY_ORDER_PENTEX_SEC 52 #define JOB_DISPLAY_ORDER_EMPLOYEE 53 +#define JOB_DISPLAY_ORDER_ABBE 54 +#define JOB_DISPLAY_ORDER_INQUISITOR 55 +#define JOB_DISPLAY_ORDER_CONDOTTIERI 56 +#define JOB_DISPLAY_ORDER_NOVICE 57 + ////////////////////////////////////////////////// #define DEPARTMENT_BITFLAG_CITIZEN (1<<0) @@ -206,6 +217,8 @@ #define DEPARTMENT_PENTEX "Pentex" #define DEPARTMENT_BITFLAG_GAIA (1<<15) #define DEPARTMENT_GAIA "Garou_Nation" +#define DEPARTMENT_BITFLAG_SOCIETY_OF_LEOPOLD (1<<16) +#define DEPARTMENT_SOCIETY_OF_LEOPOLD "Society_of_Leopold" DEFINE_BITFIELD(departments_bitflags, list( "CITIZEN" = DEPARTMENT_BITFLAG_CITIZEN, @@ -224,6 +237,7 @@ DEFINE_BITFIELD(departments_bitflags, list( "CHANTRY" = DEPARTMENT_BITFLAG_CHANTRY, "MANOR" = DEPARTMENT_BITFLAG_MANOR, "CITY_SERVICES" = DEPARTMENT_BITFLAG_CITY_SERVICES, + "SOCIETY_OF_LEOPOLD" = DEPARTMENT_BITFLAG_SOCIETY_OF_LEOPOLD, )) /// Combination flag for jobs which are considered regular crew members of the station. @@ -237,13 +251,14 @@ DEFINE_BITFIELD(departments_bitflags, list( #define SUPERVISOR_PRIMOGEN_BANU_HAQIM "the Banu Haqim Primogen" #define SUPERVISOR_BARON "the Baron" #define SUPERVISOR_CLINIC_DIRECTOR "the Clinic Director" -#define SUPERVISOR_CLUB_DIRECTOR "the Strip Club Owner" +#define SUPERVISOR_CLUB_DIRECTOR PRIMARY_NIGHTCLUB_COMPANY + " Night Club Owner" #define SUPERVISOR_POLICE_CAPTAIN "the Police Captain" #define SUPERVISOR_POLICE_CAPTAIN_AND_SERGEANT "the Police Captain and Sergeant" #define SUPERVISOR_CAMARILLA "the Camarilla" #define SUPERVISOR_REGENT "the Regent" #define SUPERVISOR_SENESCHAL_PUBLIC "the COO" #define SUPERVISOR_BARON_PUBLIC "the Bar's Owner" +#define SUPERVISOR_SOCIETY_OF_LEOPOLD "the Society of Leopold, the Inquisition, the local Provincial, and God" // Playtime tracking system, see jobs_exp.dm #define EXP_TYPE_KINDRED "Kindred" diff --git a/code/__DEFINES/~darkpack/names.dm b/code/__DEFINES/~darkpack/names.dm index fcf4b82a1120..39632426b3d8 100644 --- a/code/__DEFINES/~darkpack/names.dm +++ b/code/__DEFINES/~darkpack/names.dm @@ -2,3 +2,4 @@ GLOBAL_LIST_INIT(bahari_quotes, world.file2list("strings/quotes/bahari.txt")) GLOBAL_LIST_INIT(noddist_quotes, world.file2list("strings/quotes/noddist.txt")) GLOBAL_LIST_INIT(quran_quotes, world.file2list("strings/quotes/islam.txt")) +GLOBAL_LIST_INIT(bible_quotes, world.file2list("strings/quotes/bible.txt")) diff --git a/code/__DEFINES/~darkpack/phones.dm b/code/__DEFINES/~darkpack/phones.dm index ae4540f4924f..a9ddc0216cee 100644 --- a/code/__DEFINES/~darkpack/phones.dm +++ b/code/__DEFINES/~darkpack/phones.dm @@ -1,6 +1,7 @@ #define TIME_TO_RING 10 SECONDS #define USABLE_RADIO_FREQUENCY_FOR_PHONE_RANGE 2000 +#define MAX_RADIO_FREQUENCY_FOR_PHONE_RANGE 3000 #define PHONE_AVAILABLE 0 #define PHONE_RINGING 1 diff --git a/code/__DEFINES/~darkpack/spirit_defines.dm b/code/__DEFINES/~darkpack/spirit_defines.dm new file mode 100644 index 000000000000..e440e8468f7f --- /dev/null +++ b/code/__DEFINES/~darkpack/spirit_defines.dm @@ -0,0 +1,45 @@ +#define SPIRIT_ATHERIAL "aetherial" +#define SPIRIT_ANAMAE "anamae" +#define SPIRIT_ANCESTOR "ancestor spirit" +#define SPIRIT_ANIMAL "animal" +#define SPIRIT_AUTOMATA "automata" +#define SPIRIT_CHIMERA "chimera's brood" +#define SPIRIT_COCKROACH "cockroach's brood" +#define SPIRIT_CONSOR "consor" +#define SPIRIT_DARKNESS "darkness" +#define SPIRIT_DEMON "demon" +#define SPIRIT_DJINN "djinn" +#define SPIRIT_DREAM "dream" +#define SPIRIT_ELEMENTAL "elemental" +#define SPIRIT_ELEMENTAL_WYRM "wyrm elemental" +#define SPIRIT_ENIGMATIC "enigmatic" +#define SPIRIT_EPIHLING "epiphling" +#define SPIRIT_FALCON "falcon's brood" +#define SPIRIT_FENRIS "fenris's brood" +#define SPIRIT_GRANDFATHER_THUNDER "grandfather thunder's brood" +#define SPIRIT_GRIFFIN "griffin's brood" +#define SPIRIT_GUARDIAN "guardian" +#define SPIRIT_MIDREALM "midrealm" +#define SPIRIT_MINION "minion" +#define SPIRIT_NATURAE "naturae" +#define SPIRIT_NIGHT "night" +#define SPIRIT_OTHER "other" +#define SPIRIT_OWL "owl's brood" +#define SPIRIT_PARADOX "paradox" +#define SPIRIT_PEGASUS "pegasus's brood" +#define SPIRIT_PRECEPTOR "preceptor" +#define SPIRIT_RAT "rat's brood" +#define SPIRIT_SEA "sea" +#define SPIRIT_STAG "stag's brood" +#define SPIRIT_STORM_BORN "storm-born" +#define SPIRIT_UKTENA "uktena's brood" +#define SPIRIT_UMBROOD_LORD "umbrood lord" +#define SPIRIT_UNICORN "unicorn's brood" +#define SPIRIT_VENGEANCE "vengeance" +#define SPIRIT_VIRTUE "virtue" +#define SPIRIT_WEAVER "weaver" +#define SPIRIT_AMAROK "amarok's brood" +#define SPIRIT_WYLD "wyld" +#define SPIRIT_WYRM "wyrm" +#define SPIRIT_YANG "yang" +#define SPIRIT_YIN "yin" diff --git a/code/__DEFINES/~darkpack/storyteller_dice.dm b/code/__DEFINES/~darkpack/storyteller_dice.dm index 6364fc02fa62..b0a197ada00e 100644 --- a/code/__DEFINES/~darkpack/storyteller_dice.dm +++ b/code/__DEFINES/~darkpack/storyteller_dice.dm @@ -2,10 +2,6 @@ #define ROLL_FAILURE 0 #define ROLL_SUCCESS 1 -//Used for /datum/preference/choiced/dice_output -#define DICE_OUTPUT_BALLOON "Balloon" -#define DICE_OUTPUT_CHAT "Chat" - /// Output is shown to everyone near you #define ROLL_PUBLIC "public" /// Output is only shown to the roller diff --git a/code/__DEFINES/~darkpack/traits/declarations.dm b/code/__DEFINES/~darkpack/traits/declarations.dm index f673c31426c4..5fc637e1b77b 100644 --- a/code/__DEFINES/~darkpack/traits/declarations.dm +++ b/code/__DEFINES/~darkpack/traits/declarations.dm @@ -71,8 +71,10 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_REPELLED_BY_HOLINESS "repelled_by_holiness" /// Any changes in this Kindred's Humanity will be doubled #define TRAIT_SENSITIVE_HUMANITY "sensitive_humanity" -/// Duration of frenzy is doubled -#define TRAIT_LONGER_FRENZY "longer_frenzy" +/// Difficulty rolls to resist or guide frenzy are two higher. They can also never spend willpower to avoid frenzy +#define TRAIT_DIFFICULT_FRENZY "difficult_frenzy" +/// Difficulty rolls to rage roles are one higher. +#define TRAIT_DIFFICULT_RAGE "difficult_rage" // Setite weakness, sunlight is particularly bad bad. #define TRAIT_LIGHT_WEAKNESS "light_weakness" // DARKPACK TODO - refactor these traits into mutant bodyparts and a component maybe @@ -96,10 +98,11 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_SERPENTIS_SKIN "serpent_skin" // Is the mob melted into a wall via Visceratika? #define TRAIT_BOND_WITHIN_THE_MOUNTAIN "bond_within_the_mountain" +// Is the mob unable to be cuffed? (For Tzimisce zulo form and others) +#define TRAIT_NO_CUFF "no_cuff" //Used for uncuffable forms such as Tenebrous and Blood form. // Allows the user to pass through doors -#define TRAIT_PASSDOOR "trait_passdoor" // DARKPACK EDIT ADD - Obtenebration & Mysticism Rework #define TRAIT_IN_FRENZY "in_frenzy" // Is the mob silenced (by Quietus 1 for example) @@ -160,6 +163,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_MONSTROUS "monstrous" #define TRAIT_HORRIFIC_APPEARANCE "horrific_appearance" #define TRAIT_STILLNESS_OF_DEATH "stillness_of_death" +#define TRAIT_THIRD_EYE "third_eye" #define TRAIT_PREY_EXCLUSION "prey_exclusion" #define TRAIT_VICTIM_OF_THE_MASQUERADE "victim_of_the_masquerade" #define TRAIT_VAMPIRE_TERRITORIAL "territorial" @@ -173,6 +177,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_METAMORPH "metamorph" #define TRAIT_MERIT_UNTAMABLE "merit_untamable" #define TRAIT_FAIR_GLABRO "fair_glabro" +#define TRAIT_EAT_FOOD "eat_food" // END TRAIT DEFINES diff --git a/code/__DEFINES/~darkpack/traits/sources.dm b/code/__DEFINES/~darkpack/traits/sources.dm index 4af017a33555..7f873747748c 100644 --- a/code/__DEFINES/~darkpack/traits/sources.dm +++ b/code/__DEFINES/~darkpack/traits/sources.dm @@ -12,3 +12,7 @@ // used by the obfuscate ability #define OBFUSCATE_TRAIT "obfuscate_trait" + +#define FRENZY_TRAIT "frenzy" // FRENZY + +#define ZONE_TRAIT "zone_trait" diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index b2331131b54a..63f3ed1c066b 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -24,16 +24,16 @@ var/list/global_stack_recipes = list( /obj/item/stack/sheet/glass = GLOB.glass_recipes, - /* /obj/item/stack/sheet/plasmaglass = GLOB.pglass_recipes, */ // DARKPACK EDIT REMOVE + /* /obj/item/stack/sheet/plasmaglass = GLOB.pglass_recipes, */ // DARKPACK EDIT REMOVAL /obj/item/stack/sheet/rglass = GLOB.reinforced_glass_recipes, - /* /obj/item/stack/sheet/plasmarglass = GLOB.prglass_recipes, */ // DARKPACK EDIT REMOVE - /* /obj/item/stack/sheet/animalhide/gondola = GLOB.gondola_recipes, */ // DARKPACK EDIT REMOVE - /* /obj/item/stack/sheet/animalhide/corgi = GLOB.corgi_recipes, */ // DARKPACK EDIT REMOVE - /* /obj/item/stack/sheet/animalhide/carbon/monkey = GLOB.monkey_recipes, */ // DARKPACK EDIT REMOVE - /* /obj/item/stack/sheet/animalhide/xeno = GLOB.xeno_recipes, */ // DARKPACK EDIT REMOVE + /* /obj/item/stack/sheet/plasmarglass = GLOB.prglass_recipes, */ // DARKPACK EDIT REMOVAL + /* /obj/item/stack/sheet/animalhide/gondola = GLOB.gondola_recipes, */ // DARKPACK EDIT REMOVAL + /* /obj/item/stack/sheet/animalhide/corgi = GLOB.corgi_recipes, */ // DARKPACK EDIT REMOVAL + /* /obj/item/stack/sheet/animalhide/carbon/monkey = GLOB.monkey_recipes, */ // DARKPACK EDIT REMOVAL + /* /obj/item/stack/sheet/animalhide/xeno = GLOB.xeno_recipes, */ // DARKPACK EDIT REMOVAL /obj/item/stack/sheet/leather = GLOB.leather_recipes, /obj/item/stack/sheet/sinew = GLOB.sinew_recipes, - /* /obj/item/stack/sheet/animalhide/carp = GLOB.carp_recipes, */ // DARKPACK EDIT REMOVE + /* /obj/item/stack/sheet/animalhide/carp = GLOB.carp_recipes, */ // DARKPACK EDIT REMOVAL /obj/item/stack/sheet/mineral/sandstone = GLOB.sandstone_recipes, /obj/item/stack/sheet/mineral/sandbags = GLOB.sandbag_recipes, /obj/item/stack/sheet/mineral/diamond = GLOB.diamond_recipes, @@ -46,13 +46,13 @@ /obj/item/stack/sheet/mineral/plastitanium = GLOB.plastitanium_recipes, /obj/item/stack/sheet/mineral/snow = GLOB.snow_recipes, /obj/item/stack/sheet/mineral/adamantine = GLOB.adamantine_recipes, - /* /obj/item/stack/sheet/mineral/abductor = GLOB.abductor_recipes, */ // DARKPACK EDIT REMOVE + /* /obj/item/stack/sheet/mineral/abductor = GLOB.abductor_recipes, */ // DARKPACK EDIT REMOVAL /obj/item/stack/sheet/iron = GLOB.metal_recipes, /obj/item/stack/sheet/plasteel = GLOB.plasteel_recipes, /obj/item/stack/sheet/mineral/wood = GLOB.wood_recipes, /obj/item/stack/sheet/mineral/bamboo = GLOB.bamboo_recipes, /obj/item/stack/sheet/cloth = GLOB.cloth_recipes, - /* /obj/item/stack/sheet/durathread = GLOB.durathread_recipes,*/ // DARKPACK EDIT REMOVE + /* /obj/item/stack/sheet/durathread = GLOB.durathread_recipes,*/ // DARKPACK EDIT REMOVAL /obj/item/stack/sheet/cardboard = GLOB.cardboard_recipes, /obj/item/stack/sheet/bronze = GLOB.bronze_recipes, /obj/item/stack/sheet/plastic = GLOB.plastic_recipes, @@ -196,7 +196,7 @@ GLOBAL_LIST_INIT(allowed_money, typecacheof(list( /obj/item/coin, /obj/item/holochip, /obj/item/stack/spacecash, - /obj/item/stack/dollar, // DARKPACK EDIT ADD - Dollar Compat + /obj/item/stack/dollar, // DARKPACK EDIT ADD - (Dollar Compat) ))) /// Inits GLOB.plant_traits diff --git a/code/__HELPERS/names.dm b/code/__HELPERS/names.dm index 81c4a7c83299..fb825d98199c 100644 --- a/code/__HELPERS/names.dm +++ b/code/__HELPERS/names.dm @@ -113,7 +113,7 @@ GLOBAL_VAR(command_name) SEND_GLOBAL_SIGNAL(COMSIG_GLOB_STATION_NAME_CHANGED, new_name, old_name) /proc/new_station_name() - return "[CITY_NAME] [CURRENT_STATION_YEAR]" + return "[CITY_NAME] [CURRENT_STATION_YEAR]" // DARKPACK EDIT CHANGE /* // DARKPACK EDIT REMOVAL - This aint no station var/random = rand(1,5) var/name = "" diff --git a/code/_compile_options.dm b/code/_compile_options.dm index 12c85badc7f2..3424c4bbbc35 100644 --- a/code/_compile_options.dm +++ b/code/_compile_options.dm @@ -151,7 +151,7 @@ #ifdef LOWMEMORYMODE #ifndef ABSOLUTE_MINIMUM -#define FORCE_MAP "runtimetown" // DARKPACK EDIT, ORIGINAL: #define FORCE_MAP "runtimestation" +#define FORCE_MAP "runtimetown" // DARKPACK EDIT CHANGE - ORIGINAL: #define FORCE_MAP "runtimestation" #else #define FORCE_MAP "runtimestation_minimal" #endif diff --git a/code/_globalvars/darkpack/lists/phone_contacts.dm b/code/_globalvars/darkpack/lists/phone_contacts.dm index dbb5cf9bcb8e..d762a4914634 100644 --- a/code/_globalvars/darkpack/lists/phone_contacts.dm +++ b/code/_globalvars/darkpack/lists/phone_contacts.dm @@ -14,6 +14,7 @@ GLOBAL_LIST_EMPTY(anarch_network) GLOBAL_LIST_EMPTY(supply_network) GLOBAL_LIST_EMPTY(vampire_leader_network) GLOBAL_LIST_EMPTY(endron_network) +GLOBAL_LIST_EMPTY(society_network) #define MILLENIUM_TOWER_NETWORK 1 #define LASOMBRA_NETWORK 2 @@ -24,6 +25,7 @@ GLOBAL_LIST_EMPTY(endron_network) #define SUPPLY_NETWORK 7 #define VAMPIRE_LEADER_NETWORK 8 #define ENDRON_NETWORK 9 +#define SOCIETY_OF_LEOPOLD_NETWORK 10 // An indexed list of all the different phone networks that connect the phones that are part of them together. GLOBAL_LIST_INIT(contact_networks, alist( @@ -36,4 +38,5 @@ GLOBAL_LIST_INIT(contact_networks, alist( SUPPLY_NETWORK = GLOB.supply_network, VAMPIRE_LEADER_NETWORK = GLOB.vampire_leader_network, ENDRON_NETWORK = GLOB.endron_network, + SOCIETY_OF_LEOPOLD_NETWORK = GLOB.society_network, )) diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index 9e8a1b0bfc82..ce73e59955f3 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -670,8 +670,8 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_SPACE_ANT_IMMUNITY" = TRAIT_SPACE_ANT_IMMUNITY, "TRAIT_BRAIN_TRAUMA_IMMUNITY" = TRAIT_BRAIN_TRAUMA_IMMUNITY, "TRAIT_NECROPOLIS_WORSHIP" = TRAIT_NECROPOLIS_WORSHIP, - "TRAIT_ANIMAL_MUSK" = TRAIT_ANIMAL_MUSK, // DARKPACK EDIT ADD - MERITS/FLAWS - "TRAIT_BETRAYERS_MARK" = TRAIT_BETRAYERS_MARK, // DARKPACK EDIT ADD - MERITS/FLAWS - (Tremere) + "TRAIT_ANIMAL_MUSK" = TRAIT_ANIMAL_MUSK, // DARKPACK EDIT ADD - MERITS_FLAWS + "TRAIT_BETRAYERS_MARK" = TRAIT_BETRAYERS_MARK, // DARKPACK EDIT ADD - MERITS_FLAWS - (Tremere) "TRAIT_BLOODY_LOVER" = TRAIT_BLOODY_LOVER, // DARKPACK EDIT ADD "TRAIT_BLOODY_SUCKER" = TRAIT_BLOODY_SUCKER, // DARKPACK EDIT ADD "TRAIT_BLUSH_OF_HEALTH" = TRAIT_BLUSH_OF_HEALTH, // DARKPACK EDIT ADD @@ -684,19 +684,22 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_DECEPTIVE_AURA" = TRAIT_DECEPTIVE_AURA, // DARKPACK EDIT ADD "TRAIT_DEFICIENT_VITAE" = TRAIT_DEFICIENT_VITAE, // DARKPACK EDIT ADD "TRAIT_DIABLERIE" = TRAIT_DIABLERIE, // DARKPACK EDIT ADD + "TRAIT_DIFFICULT_FRENZY" = TRAIT_DIFFICULT_FRENZY, // DARKPACK EDIT ADD - FRENZY + "TRAIT_DIFFICULT_RAGE" = TRAIT_DIFFICULT_RAGE, // DARKPACK EDIT ADD - FRENZY "TRAIT_DISCO_DANCER" = TRAIT_DISCO_DANCER, // DARKPACK EDIT ADD "TRAIT_DULLFANGS" = TRAIT_DULLFANGS, // DARKPACK EDIT ADD - MERITS/FLAWS + "TRAIT_EAT_FOOD" = TRAIT_EAT_FOOD, // DARKPACK EDIT ADD - MERITS/FLAWS "TRAIT_EFFICIENT_DIGESTION" = TRAIT_EFFICIENT_DIGESTION, //DARKPACK EDIT ADD "TRAIT_ENHANCED_MELEE_DODGE" = TRAIT_ENHANCED_MELEE_DODGE, // DARKPACK EDIT ADD - "TRAIT_FAIR_GLABRO" = TRAIT_FAIR_GLABRO, // DARKPACK EDIT ADD - MERITS/FLAWS + "TRAIT_FAIR_GLABRO" = TRAIT_FAIR_GLABRO, // DARKPACK EDIT ADD - MERITS_FLAWS "TRAIT_FEEDING_RESTRICTION" = TRAIT_FEEDING_RESTRICTION, // DARKPACK EDIT ADD "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_GHOST_VISION" = TRAIT_GHOST_VISION, // DARKPACK EDIT ADD - POWERS - (Necromancy) - "TRAIT_GULLET" = TRAIT_GULLET, // DARKPACK EDIT ADD "TRAIT_GRIP_OF_THE_DAMNED" = TRAIT_GRIP_OF_THE_DAMNED, // DARKPACK EDIT ADD + "TRAIT_GULLET" = TRAIT_GULLET, // DARKPACK EDIT ADD "TRAIT_HOMOSEXUAL" = TRAIT_HOMOSEXUAL, // DARKPACK EDIT ADD "TRAIT_HORRIFIC_APPEARANCE" = TRAIT_HORRIFIC_APPEARANCE, // DARKPACK EDIT ADD - Cappadocian Quirk "TRAIT_HUNGRY" = TRAIT_HUNGRY, // DARKPACK EDIT ADD @@ -708,26 +711,25 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_LAZY" = TRAIT_LAZY, // DARKPACK EDIT ADD "TRAIT_LIGHT_WEAKNESS" = TRAIT_LIGHT_WEAKNESS, // DARKPACK EDIT ADD - Setite Flaw "TRAIT_LOCAL_SIXTHSENSE" = TRAIT_LOCAL_SIXTHSENSE, // 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_MERIT_UNTAMABLE" = TRAIT_MERIT_UNTAMABLE, // DARKPACK EDIT ADD - MERITS/FLAWS - "TRAIT_METAMORPH" = TRAIT_METAMORPH, // DARKPACK EDIT ADD - MERITS/FLAWS - "TRAIT_MONSTROUS" = TRAIT_MONSTROUS, // DARKPACK EDIT ADD - MERITS/FLAWS - "TRAIT_NEEDS_BLOOD" = TRAIT_NEEDS_BLOOD, //DARKPACK EDIT ADD - Hunger and Frenzy + "TRAIT_MERIT_UNTAMABLE" = TRAIT_MERIT_UNTAMABLE, // DARKPACK EDIT ADD - MERITS_FLAWS + "TRAIT_METAMORPH" = TRAIT_METAMORPH, // DARKPACK EDIT ADD - MERITS_FLAWS + "TRAIT_MONSTROUS" = TRAIT_MONSTROUS, // DARKPACK EDIT ADD - MERITS_FLAWS + "TRAIT_NEEDS_BLOOD" = TRAIT_NEEDS_BLOOD, // DARKPACK EDIT ADD - Hunger and Frenzy "TRAIT_NON_INT" = TRAIT_NON_INT, // DARKPACK EDIT ADD + "TRAIT_NO_CUFF" = TRAIT_NO_CUFF, // DARKPACK EDIT ADD "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_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_PASSDOOR" = TRAIT_PASSDOOR, // 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_PREY_EXCLUSION" = TRAIT_PREY_EXCLUSION, // DARKPACK EDIT ADD - MERITS/FLAWS + "TRAIT_PERMAFANGS" = TRAIT_PERMAFANGS, // DARKPACK EDIT ADD - MERITS_FLAWS + "TRAIT_PIERCED_VEIL" = TRAIT_PIERCED_VEIL, // DARKPACK EDIT ADD - MERITS_FLAWS + "TRAIT_PREY_EXCLUSION" = TRAIT_PREY_EXCLUSION, // DARKPACK EDIT ADD - MERITS_FLAWS "TRAIT_RAZOR_CLAWS" = TRAIT_RAZOR_CLAWS, // DARKPACK EDIT ADD - WEREWOLF "TRAIT_REJECTED_BY_TECHNOLOGY" = TRAIT_REJECTED_BY_TECHNOLOGY, // DARKPACK EDIT ADD "TRAIT_REPELLED_BY_HOLINESS" = TRAIT_REPELLED_BY_HOLINESS, // DARKPACK EDIT ADD @@ -741,24 +743,26 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_STAKE_IMMUNE" = TRAIT_STAKE_IMMUNE, // DARKPACK EDIT ADD "TRAIT_STAKE_RESISTANT" = TRAIT_STAKE_RESISTANT, // DARKPACK EDIT ADD "TRAIT_THE_LARGEST_MAW" = TRAIT_THE_LARGEST_MAW, // DARKPACK EDIT ADD - MERITS/FLAWS + "TRAIT_THIRD_EYE" = TRAIT_THIRD_EYE, // DARKPACK EDIT ADD - Tremere & Salubri Quirk "TRAIT_STILLNESS_OF_DEATH" = TRAIT_STILLNESS_OF_DEATH, // DARKPACK EDIT ADD - Gargoyle Quirk + "TRAIT_THE_LARGEST_MAW" = TRAIT_THE_LARGEST_MAW, // DARKPACK EDIT ADD - MERITS/FLAWS "TRAIT_TIMEWARPER" = TRAIT_TIMEWARPER, // DARKPACK EDIT ADD - "TRAIT_TIME_SENSE" = TRAIT_TIME_SENSE, // DARKPACK EDIT ADD - MERITS/FLAWS + "TRAIT_TIME_SENSE" = TRAIT_TIME_SENSE, // DARKPACK EDIT ADD - MERITS_FLAWS "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_VAMPIRE_TERRITORIAL" = TRAIT_VAMPIRE_TERRITORIAL, // DARKPACK EDIT ADD - MERITS/FLAWS - "TRAIT_VICTIM_OF_THE_MASQUERADE" = TRAIT_VICTIM_OF_THE_MASQUERADE, // DARKPACK EDIT ADD - MERITS/FLAWS + "TRAIT_VAMPIRE_TERRITORIAL" = TRAIT_VAMPIRE_TERRITORIAL, // DARKPACK EDIT ADD - MERITS_FLAWS + "TRAIT_VICTIM_OF_THE_MASQUERADE" = TRAIT_VICTIM_OF_THE_MASQUERADE, // DARKPACK EDIT ADD - MERITS_FLAWS "TRAIT_VIOLATOR" = TRAIT_VIOLATOR, // DARKPACK EDIT ADD "TRAIT_VIRTUOSA" = TRAIT_VIRTUOSA, // DARKPACK EDIT ADD - Melpominee "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_WEAK_TO_DOMINATE" = TRAIT_WEAK_TO_DOMINATE, // DARKPACK EDIT ADD - POWERS - (Dominate) - "TRAIT_WEAK_WILLED" = TRAIT_WEAK_WILLED, // DARKPACK EDIT ADD - MERITS/FLAWS + "TRAIT_WEAK_WILLED" = TRAIT_WEAK_WILLED, // DARKPACK EDIT ADD - MERITS_FLAWS "TRAIT_WTA_GAROU_AUSPICE" = TRAIT_WTA_GAROU_AUSPICE, // DARKPACK EDIT ADD - WEREWOLF "TRAIT_WTA_GAROU_BREED" = TRAIT_WTA_GAROU_BREED, // DARKPACK EDIT ADD - WEREWOLF "TRAIT_WTA_GAROU_TRIBE" = TRAIT_WTA_GAROU_TRIBE, // DARKPACK EDIT ADD - WEREWOLF diff --git a/code/_globalvars/traits/admin_tooling.dm b/code/_globalvars/traits/admin_tooling.dm index 9ea21674c8db..1c3ea433381f 100644 --- a/code/_globalvars/traits/admin_tooling.dm +++ b/code/_globalvars/traits/admin_tooling.dm @@ -362,7 +362,7 @@ 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_ANIMAL_MUSK" = TRAIT_ANIMAL_MUSK, // DARKPACK EDIT ADD - MERITS/FLAWS + "TRAIT_ANIMAL_MUSK" = TRAIT_ANIMAL_MUSK, // DARKPACK EDIT ADD - MERITS_FLAWS "TRAIT_BLOODY_LOVER" = TRAIT_BLOODY_LOVER, // DARKPACK EDIT ADD "TRAIT_BLOODY_SUCKER" = TRAIT_BLOODY_SUCKER, // DARKPACK EDIT ADD "TRAIT_BLUSH_OF_HEALTH" = TRAIT_BLUSH_OF_HEALTH, // DARKPACK EDIT ADD @@ -374,18 +374,20 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_DECEPTIVE_AURA" = TRAIT_DECEPTIVE_AURA, // DARKPACK EDIT ADD "TRAIT_DEFICIENT_VITAE" = TRAIT_DEFICIENT_VITAE, // DARKPACK EDIT ADD "TRAIT_DIABLERIE" = TRAIT_DIABLERIE, // DARKPACK EDIT ADD + "TRAIT_DIFFICULT_FRENZY" = TRAIT_DIFFICULT_FRENZY, // DARKPACK EDIT ADD - FRENZY + "TRAIT_DIFFICULT_RAGE" = TRAIT_DIFFICULT_RAGE, // DARKPACK EDIT ADD - FRENZY "TRAIT_DISCO_DANCER" = TRAIT_DISCO_DANCER, // DARKPACK EDIT ADD - "TRAIT_DULLFANGS" = TRAIT_DULLFANGS, // DARKPACK EDIT ADD - MERITS/FLAWS - "TRAIT_EFFICIENT_DIGESTION" = TRAIT_EFFICIENT_DIGESTION, //DARKPACK EDIT ADD + "TRAIT_DULLFANGS" = TRAIT_DULLFANGS, // DARKPACK EDIT ADD - MERITS_FLAWS + "TRAIT_EFFICIENT_DIGESTION" = TRAIT_EFFICIENT_DIGESTION, // DARKPACK EDIT ADD "TRAIT_ENHANCED_MELEE_DODGE" = TRAIT_ENHANCED_MELEE_DODGE, // DARKPACK EDIT ADD - "TRAIT_FAIR_GLABRO" = TRAIT_FAIR_GLABRO, // DARKPACK EDIT ADD - MERITS/FLAWS + "TRAIT_FAIR_GLABRO" = TRAIT_FAIR_GLABRO, // DARKPACK EDIT ADD - MERITS_FLAWS "TRAIT_FEEDING_RESTRICTION" = TRAIT_FEEDING_RESTRICTION, // DARKPACK EDIT ADD "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_GHOST_VISION" = TRAIT_GHOST_VISION, // DARKPACK EDIT ADD - POWERS - (Necromancy) - "TRAIT_GULLET" = TRAIT_GULLET, // DARKPACK EDIT ADD "TRAIT_GRIP_OF_THE_DAMNED" = TRAIT_GRIP_OF_THE_DAMNED, // DARKPACK EDIT ADD + "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 @@ -396,23 +398,22 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_LAZY" = TRAIT_LAZY, // DARKPACK EDIT ADD "TRAIT_LIGHT_WEAKNESS" = TRAIT_LIGHT_WEAKNESS, // DARKPACK EDIT ADD - Setite Flaw "TRAIT_LOCAL_SIXTHSENSE" = TRAIT_LOCAL_SIXTHSENSE, // 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_MERIT_UNTAMABLE" = TRAIT_MERIT_UNTAMABLE, // DARKPACK EDIT ADD - MERITS/FLAWS - "TRAIT_METAMORPH" = TRAIT_METAMORPH, // DARKPACK EDIT ADD - MERITS/FLAWS - "TRAIT_NEEDS_BLOOD" = TRAIT_NEEDS_BLOOD, //DARKPACK EDIT ADD - Hunger and Frenzy + "TRAIT_MERIT_UNTAMABLE" = TRAIT_MERIT_UNTAMABLE, // DARKPACK EDIT ADD - MERITS_FLAWS + "TRAIT_METAMORPH" = TRAIT_METAMORPH, // DARKPACK EDIT ADD - MERITS_FLAWS + "TRAIT_NEEDS_BLOOD" = TRAIT_NEEDS_BLOOD, // DARKPACK EDIT ADD - Hunger and Frenzy "TRAIT_NON_INT" = TRAIT_NON_INT, // DARKPACK EDIT ADD + "TRAIT_NO_CUFF" = TRAIT_NO_CUFF, // DARKPACK EDIT ADD "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_PAINFUL_VAMPIRE_KISS" = TRAIT_PAINFUL_VAMPIRE_KISS, // DARKPACK EDIT ADD - "TRAIT_PALE_AURA" = TRAIT_PALE_AURA, // DARKPACK EDIT ADD - MERITS/FLAWS - "TRAIT_PASSDOOR" = TRAIT_PASSDOOR, // 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_PERMAFANGS" = TRAIT_PERMAFANGS, // DARKPACK EDIT ADD - MERITS_FLAWS + "TRAIT_PIERCED_VEIL" = TRAIT_PIERCED_VEIL, // DARKPACK EDIT ADD - MERITS_FLAWS "TRAIT_RAZOR_CLAWS" = TRAIT_RAZOR_CLAWS, // DARKPACK EDIT ADD - WEREWOLF "TRAIT_REJECTED_BY_TECHNOLOGY" = TRAIT_REJECTED_BY_TECHNOLOGY, // DARKPACK EDIT ADD "TRAIT_REPELLED_BY_HOLINESS" = TRAIT_REPELLED_BY_HOLINESS, // DARKPACK EDIT ADD @@ -426,7 +427,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_STAKE_RESISTANT" = TRAIT_STAKE_RESISTANT, // DARKPACK EDIT ADD "TRAIT_THE_LARGEST_MAW" = TRAIT_THE_LARGEST_MAW, // DARKPACK EDIT ADD "TRAIT_TIMEWARPER" = TRAIT_TIMEWARPER, // DARKPACK EDIT ADD - "TRAIT_TIME_SENSE" = TRAIT_TIME_SENSE, // DARKPACK EDIT ADD - MERITS/FLAWS + "TRAIT_TIME_SENSE" = TRAIT_TIME_SENSE, // DARKPACK EDIT ADD - MERITS_FLAWS "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 @@ -438,7 +439,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_VTM_CLANS" = TRAIT_VTM_CLANS, // DARKPACK EDIT ADD "TRAIT_VTM_MORALITY" = TRAIT_VTM_MORALITY, // DARKPACK EDIT ADD "TRAIT_WEAK_TO_DOMINATE" = TRAIT_WEAK_TO_DOMINATE, // DARKPACK EDIT ADD - POWERS - (Dominate) - "TRAIT_WEAK_WILLED" = TRAIT_WEAK_WILLED, // DARKPACK EDIT ADD - MERITS/FLAWS + "TRAIT_WEAK_WILLED" = TRAIT_WEAK_WILLED, // DARKPACK EDIT ADD - MERITS_FLAWS "TRAIT_WTA_GAROU_AUSPICE" = TRAIT_WTA_GAROU_AUSPICE, // DARKPACK EDIT ADD - WEREWOLF "TRAIT_WTA_GAROU_BREED" = TRAIT_WTA_GAROU_BREED, // DARKPACK EDIT ADD - WEREWOLF "TRAIT_WTA_GAROU_TRIBE" = TRAIT_WTA_GAROU_TRIBE, // DARKPACK EDIT ADD - WEREWOLF diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 8c15fc8affe7..b81f8ed1b206 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -478,7 +478,7 @@ /atom/movable/screen/click_catcher/Click(location, control, params) var/list/modifiers = params2list(params) - // DARKPACK EDIT REMOVAL START - remove middle click swapping hands. + // DARKPACK EDIT REMOVAL START - (remove middle click swapping hands.) /* if(LAZYACCESS(modifiers, MIDDLE_CLICK) && iscarbon(usr)) var/mob/living/carbon/C = usr diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index a11a404efeb6..7d40e246792f 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -6,8 +6,8 @@ // The default UI style is the first one in the list GLOBAL_LIST_INIT(available_ui_styles, list( - "World of Darkness" = 'modular_darkpack/master_files/icons/hud/screen_darkness_new.dmi', // DARKPACK EDIT ADD - Put at the top because it has almost full coverage now! - "Pentex-Knox" = 'modular_darkpack/master_files/icons/hud/screen_pentexknox.dmi', // DARKPACK EDIT ADD - Trasen-Knox logo with a Pentex logo + "World of Darkness" = 'modular_darkpack/master_files/icons/hud/screen_darkness_new.dmi', // DARKPACK EDIT ADD - (Put at the top because it has almost full coverage now!) + "Pentex-Knox" = 'modular_darkpack/master_files/icons/hud/screen_pentexknox.dmi', // DARKPACK EDIT ADD - (Trasen-Knox logo with a Pentex logo) "Midnight" = 'icons/hud/screen_midnight.dmi', "Retro" = 'icons/hud/screen_retro.dmi', "Plasmafire" = 'icons/hud/screen_plasmafire.dmi', @@ -15,7 +15,7 @@ GLOBAL_LIST_INIT(available_ui_styles, list( "Operative" = 'icons/hud/screen_operative.dmi', "Clockwork" = 'icons/hud/screen_clockwork.dmi', "Glass" = 'icons/hud/screen_glass.dmi', - // "Trasen-Knox" = 'icons/hud/screen_trasenknox.dmi', // DARKPACK EDIT REMOVE - Pentex-Knox instead + // "Trasen-Knox" = 'icons/hud/screen_trasenknox.dmi', // DARKPACK EDIT REMOVAL - (Pentex-Knox instead) "Detective" = 'icons/hud/screen_detective.dmi' )) diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index e9aa04c1e073..c31048f21afd 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -36,7 +36,7 @@ // DARKPACK EDIT ADD START add_screen_object(/atom/movable/screen/bloodpool, HUD_MOB_BLOODPOOL, HUD_GROUP_INFO) - add_screen_object(/atom/movable/screen/zone_hud, HUD_MOB_ZONE, HUD_GROUP_INFO) + add_screen_object(/atom/movable/screen/zone_hud, HUD_MOB_ZONE, HUD_GROUP_INFO) // AREAS - (Zone hud) var/mob/living/carbon/human/human_mob = astype(mymob) if(human_mob?.splats) for(var/datum/splat/splat in human_mob.splats) diff --git a/code/_onclick/hud/living.dm b/code/_onclick/hud/living.dm index 673619285df5..6dbd540a857d 100644 --- a/code/_onclick/hud/living.dm +++ b/code/_onclick/hud/living.dm @@ -10,7 +10,7 @@ // DARKPACK EDIT ADD START add_screen_object(/atom/movable/screen/bloodpool, HUD_MOB_BLOODPOOL, HUD_GROUP_INFO) - add_screen_object(/atom/movable/screen/zone_hud, HUD_MOB_ZONE, HUD_GROUP_INFO) + add_screen_object(/atom/movable/screen/zone_hud, HUD_MOB_ZONE, HUD_GROUP_INFO) // AREAS - (Zone hud) var/mob/living/carbon/human/human_mob = astype(mymob) if(human_mob?.splats) for(var/datum/splat/splat in human_mob.splats) diff --git a/code/_onclick/hud/new_player.dm b/code/_onclick/hud/new_player.dm index 2aad4564842f..ec6104f1670d 100644 --- a/code/_onclick/hud/new_player.dm +++ b/code/_onclick/hud/new_player.dm @@ -25,7 +25,7 @@ lobbyscreen.RegisterSignal(src, COMSIG_HUD_LOBBY_COLLAPSED, TYPE_PROC_REF(/atom/movable/screen/lobby, collapse_button)) lobbyscreen.RegisterSignal(src, COMSIG_HUD_LOBBY_EXPANDED, TYPE_PROC_REF(/atom/movable/screen/lobby, expand_button)) - if (!owner?.client?.is_localhost()) // DARKPACK EDIT, ORIGINAL: if (!owner.client.is_localhost()) + if (!owner?.client?.is_localhost()) // DARKPACK EDIT CHANGE - ORIGINAL: if (!owner.client.is_localhost()) return var/atom/movable/screen/lobby/button/start_now/start_button = add_screen_object(/atom/movable/screen/lobby/button/start_now, HUD_NEW_PLAYER_START_NOW) diff --git a/code/_onclick/hud/screen_objects/new_player.dm b/code/_onclick/hud/screen_objects/new_player.dm index 18440824314c..41a6f1f6d265 100644 --- a/code/_onclick/hud/screen_objects/new_player.dm +++ b/code/_onclick/hud/screen_objects/new_player.dm @@ -581,7 +581,8 @@ . = ..() if(!. || !usr.client.is_localhost() || !check_rights_for(usr.client, R_SERVER)) return - SEND_SOUND(hud.mymob, sound('modular_darkpack/master_files/sounds/start_now.ogg', volume = 100)) // DARKPACK EDIT CHANGE + if(SSticker.start_immediately != TRUE) // DARKPACK EDIT ADD + SEND_SOUND(hud.mymob, sound('modular_darkpack/master_files/sounds/start_now.ogg', volume = 50)) // DARKPACK EDIT CHANGE SSticker.start_immediately = TRUE if(SSticker.current_state == GAME_STATE_STARTUP) to_chat(usr, span_admin("The server is still setting up, but the round will be started as soon as possible.")) diff --git a/code/controllers/subsystem/disease.dm b/code/controllers/subsystem/disease.dm index 7573ad8694e0..e3d1475a3946 100644 --- a/code/controllers/subsystem/disease.dm +++ b/code/controllers/subsystem/disease.dm @@ -11,7 +11,7 @@ SUBSYSTEM_DEF(disease) /datum/controller/subsystem/disease/PreInit() if(!diseases) diseases = subtypesof(/datum/disease) - diseases = list() // DARKPACK EDIT ADDITION + diseases = list() // DARKPACK EDIT ADD /datum/controller/subsystem/disease/Initialize() var/list/all_common_diseases = diseases - typesof(/datum/disease/advance) diff --git a/code/controllers/subsystem/dynamic/dynamic.dm b/code/controllers/subsystem/dynamic/dynamic.dm index 7700e70e5c0f..6afbfb8a6570 100644 --- a/code/controllers/subsystem/dynamic/dynamic.dm +++ b/code/controllers/subsystem/dynamic/dynamic.dm @@ -57,13 +57,13 @@ SUBSYSTEM_DEF(dynamic) /// Rulesets in this list will be excluded from the roundend report var/list/datum/dynamic_ruleset/unreported_rulesets = list() /// Whether random events that spawn antagonists or modify dynamic are enabled - var/antag_events_enabled = FALSE // DARKPACK EDIT, ORIGINAL: var/antag_events_enabled = TRUE + var/antag_events_enabled = FALSE // DARKPACK EDIT CHANGE - ORIGINAL: var/antag_events_enabled = TRUE -// DARKPACK EDIT ADDITION START +// DARKPACK EDIT ADD START /datum/controller/subsystem/dynamic/Initialize() admin_disabled_rulesets |= subtypesof(/datum/dynamic_ruleset) return SS_INIT_SUCCESS -// DARKPACK EDIT ADDITION END +// DARKPACK EDIT ADD END /datum/controller/subsystem/dynamic/fire(resumed) if(!COOLDOWN_FINISHED(src, midround_cooldown) || EMERGENCY_PAST_POINT_OF_NO_RETURN) diff --git a/code/controllers/subsystem/events.dm b/code/controllers/subsystem/events.dm index 1aea336e3752..5a9bd31b568c 100644 --- a/code/controllers/subsystem/events.dm +++ b/code/controllers/subsystem/events.dm @@ -24,8 +24,12 @@ SUBSYSTEM_DEF(events) var/wizardmode = FALSE /datum/controller/subsystem/events/Initialize() - for(var/type in typesof(/datum/round_event_control)) - var/datum/round_event_control/event = new type() + // DARKPACK EDIT CHANGE START - EVENTS + for(var/datum/round_event_control/event_typepath as anything in valid_subtypesof(/datum/round_event_control)) + if(!event_typepath::darkpack_allowed) + continue + var/datum/round_event_control/event = new event_typepath() + // DARKPACK EDIT CHANGE END if(!event.typepath) continue if(!event.valid_for_map()) diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index 096a56e42364..80c3ab35e9c2 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -31,7 +31,7 @@ SUBSYSTEM_DEF(job) var/list/prioritized_jobs = list() var/list/latejoin_trackers = list() - var/datum/job/overflow_role = /datum/job/vampire/citizen // DARKPACK EDIT, ORIGINAL: var/datum/job/overflow_role = /datum/job/assistant + var/datum/job/overflow_role = /datum/job/vampire/citizen // DARKPACK EDIT CHANGE - ORIGINAL: var/datum/job/overflow_role = /datum/job/assistant var/list/level_order = list(JP_HIGH, JP_MEDIUM, JP_LOW) @@ -599,10 +599,10 @@ SUBSYSTEM_DEF(job) //Gives the player the stuff he should have with his rank /datum/controller/subsystem/job/proc/equip_rank(mob/living/equipping, datum/job/job, client/player_client) - // DARKPACK EDIT ADDITION BEGIN - ALTERNATIVE_JOB_TITLES + // DARKPACK EDIT ADD START - ALTERNATIVE_JOB_TITLES // The alt job title, if user picked one, or the default var/alt_title = player_client?.prefs.alt_job_titles?[job.title] || job.title - // DARKPACK EDIT ADDITION END + // DARKPACK EDIT ADD END equipping.job = job.title SEND_SIGNAL(equipping, COMSIG_JOB_RECEIVED, job) @@ -992,7 +992,7 @@ SUBSYSTEM_DEF(job) job_debug("[debug_prefix]: Player is qdeleted, Player: [player][add_job_to_log ? ", Job: [possible_job]" : ""]") return JOB_UNAVAILABLE_GENERIC - return check_job_eligibility_darkpack(player, possible_job, debug_prefix, add_job_to_log) // DARKPACK EDIT, ORIGINAL: return JOB_AVAILABLE + return check_job_eligibility_darkpack(player, possible_job, debug_prefix, add_job_to_log) // DARKPACK EDIT CHANGE - ORIGINAL: return JOB_AVAILABLE /** * Check if the station manifest has at least a certain amount of this staff type. diff --git a/code/controllers/subsystem/materials.dm b/code/controllers/subsystem/materials.dm index c450bfbdea40..0e9a771cbc87 100644 --- a/code/controllers/subsystem/materials.dm +++ b/code/controllers/subsystem/materials.dm @@ -21,7 +21,7 @@ SUBSYSTEM_DEF(materials) new /datum/stack_recipe("Toilet", /obj/structure/toilet/greyscale, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND | CRAFT_SKIP_MATERIALS_PARITY, category = CAT_FURNITURE), new /datum/stack_recipe("Sink Frame", /obj/item/wallframe/sinkframe, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND | CRAFT_SKIP_MATERIALS_PARITY, category = CAT_FURNITURE), new /datum/stack_recipe("Material floor tile", /obj/item/stack/tile/material, 1, 4, 20, crafting_flags = CRAFT_SKIP_MATERIALS_PARITY, category = CAT_TILES), - /* new /datum/stack_recipe("Material airlock assembly", /obj/structure/door_assembly/door_assembly_material, 4, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND | CRAFT_SKIP_MATERIALS_PARITY, category = CAT_DOORS), */ // DARKPACK EDIT REMOVE + /* new /datum/stack_recipe("Material airlock assembly", /obj/structure/door_assembly/door_assembly_material, 4, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND | CRAFT_SKIP_MATERIALS_PARITY, category = CAT_DOORS), */ // DARKPACK EDIT REMOVAL new /datum/stack_recipe("Material platform", /obj/structure/platform/material, 2, time = 3 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND | CRAFT_SKIP_MATERIALS_PARITY, trait_booster = TRAIT_QUICK_BUILD, trait_modifier = 0.75, category = CAT_STRUCTURE), \ ) /// List of stackcrafting recipes for materials using rigid recipes diff --git a/code/controllers/subsystem/processing/quirks.dm b/code/controllers/subsystem/processing/quirks.dm index 4dd0a1825806..fbbe8a62c997 100644 --- a/code/controllers/subsystem/processing/quirks.dm +++ b/code/controllers/subsystem/processing/quirks.dm @@ -27,8 +27,8 @@ GLOBAL_LIST_INIT_TYPED(quirk_blacklist, /list/datum/quirk, list( list(/datum/quirk/numb, /datum/quirk/selfaware), list(/datum/quirk/empath, /datum/quirk/evil), list(/datum/quirk/keen_nose, /datum/quirk/item_quirk/anosmia), - list(/datum/quirk/darkpack/weak_willed, /datum/quirk/darkpack/untamable), // DARKPACK EDIT ADD - MERITS/FLAWS - list(/datum/quirk/darkpack/permafangs, /datum/quirk/darkpack/dulled_bite), // DARKPACK EDIT ADD - MERITS/FLAWS + list(/datum/quirk/darkpack/weak_willed, /datum/quirk/darkpack/untamable), // DARKPACK EDIT ADD - MERITS_FLAWS + list(/datum/quirk/darkpack/permafangs, /datum/quirk/darkpack/dulled_bite), // DARKPACK EDIT ADD - MERITS_FLAWS )) GLOBAL_LIST_INIT(quirk_string_blacklist, generate_quirk_string_blacklist()) @@ -75,9 +75,11 @@ PROCESSING_SUBSYSTEM_DEF(quirks) for(var/type in quirk_list) var/datum/quirk/quirk_type = type - // DARKPACK EDIT ADD START - MERITS/FLAWS + // DARKPACK EDIT ADD START - MERITS_FLAWS if(!quirk_type::darkpack_allowed) continue + if(quirk_type::roleplay_only && !CONFIG_GET(flag/roleplay_only_merits)) + continue // DARKPACK EDIT ADD END quirk_prototypes[type] = new type diff --git a/code/controllers/subsystem/statpanel.dm b/code/controllers/subsystem/statpanel.dm index be30f01c3800..6b814820753f 100644 --- a/code/controllers/subsystem/statpanel.dm +++ b/code/controllers/subsystem/statpanel.dm @@ -39,7 +39,7 @@ SUBSYSTEM_DEF(statpanels) "Round ID: [GLOB.round_id ? GLOB.round_id : "NULL"]", "Server Time: [time2text(world.timeofday, "YYYY-MM-DD hh:mm:ss", world.timezone)]", "Round Time: [ROUND_TIME()]", - // "Station Time: [station_time_timestamp()]", // DARKPACK EDIT REMOVAL - MERITS/FLAWS - (Time sense) + // "Station Time: [station_time_timestamp()]", // DARKPACK EDIT REMOVAL - MERITS_FLAWS - (Time sense) "Time Dilation: [round(SStime_track.time_dilation_current,1)]% AVG:([round(SStime_track.time_dilation_avg_fast,1)]%, [round(SStime_track.time_dilation_avg,1)]%, [round(SStime_track.time_dilation_avg_slow,1)]%)", "\n", // DARKPACK EDIT ADD "Canon: [GLOB.canon_event ? "Yes" : "No"]", // DARKPACK EDIT ADD diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index c355a47f1e2e..d0d7ccc37a81 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -377,7 +377,7 @@ SUBSYSTEM_DEF(ticker) iter_human.increment_scar_slot() iter_human.load_persistent_scars() - iter_human.load_guestbook() // DARKPACK EDIT ADDITION + iter_human.load_guestbook() // DARKPACK EDIT ADD if(!iter_human.hardcore_survival_score) continue diff --git a/code/datums/brain_damage/imaginary_friend.dm b/code/datums/brain_damage/imaginary_friend.dm index a078719445e7..dd24e9919101 100644 --- a/code/datums/brain_damage/imaginary_friend.dm +++ b/code/datums/brain_damage/imaginary_friend.dm @@ -222,7 +222,7 @@ owner.imaginary_group -= src return ..() -/mob/eye/imaginary_friend/Hear(atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, freq_name, freq_color, list/spans, list/message_mods = list(), message_range, source) // DARKPACK EDIT, ORIGINAL: /mob/eye/imaginary_friend/Hear(atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, freq_name, freq_color, list/spans, list/message_mods = list(), message_range) +/mob/eye/imaginary_friend/Hear(atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, freq_name, freq_color, list/spans, list/message_mods = list(), message_range, source) // DARKPACK EDIT CHANGE - ORIGINAL: /mob/eye/imaginary_friend/Hear(atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, freq_name, freq_color, list/spans, list/message_mods = list(), message_range) if (safe_read_pref(client, /datum/preference/toggle/enable_runechat) && (safe_read_pref(client, /datum/preference/toggle/enable_runechat_non_mobs) || ismob(speaker))) create_chat_message(speaker, message_language, raw_message, spans) to_chat(src, compose_message(speaker, message_language, raw_message, radio_freq, freq_name, freq_color, spans, message_mods)) diff --git a/code/datums/components/crafting/atmospheric.dm b/code/datums/components/crafting/atmospheric.dm index 34c33b23fb1c..e2eca28aeef1 100644 --- a/code/datums/components/crafting/atmospheric.dm +++ b/code/datums/components/crafting/atmospheric.dm @@ -1,4 +1,4 @@ -/* /datum/crafting_recipe/bluespace_vendor_mount // DARKPACK EDIT REMOVE +/* /datum/crafting_recipe/bluespace_vendor_mount // DARKPACK EDIT REMOVAL name = "Bluespace Vendor Wall Mount" result = /obj/item/wallframe/bluespace_vendor_mount time = 6 SECONDS diff --git a/code/datums/components/crafting/containers.dm b/code/datums/components/crafting/containers.dm index f3a22cd2f6e2..28e103eb6321 100644 --- a/code/datums/components/crafting/containers.dm +++ b/code/datums/components/crafting/containers.dm @@ -11,7 +11,7 @@ time = 1 SECONDS reqs = list(/obj/item/paper = 2) category = CAT_CONTAINERS -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/boh name = "Bag of Holding" reqs = list( diff --git a/code/datums/components/crafting/entertainment.dm b/code/datums/components/crafting/entertainment.dm index de38f153a3f0..a69cbaef175f 100644 --- a/code/datums/components/crafting/entertainment.dm +++ b/code/datums/components/crafting/entertainment.dm @@ -1,4 +1,4 @@ -/* /datum/crafting_recipe/moffers // DARKPACK EDIT REMOVE +/* /datum/crafting_recipe/moffers // DARKPACK EDIT REMOVAL name = "Moffers" result = /obj/item/clothing/shoes/clown_shoes/moffers time = 6 SECONDS //opportunity to rethink your life @@ -178,7 +178,7 @@ ) tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WRENCH, TOOL_WELDER) category = CAT_ENTERTAINMENT -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/toiletbong name = "Toiletbong" category = CAT_ENTERTAINMENT diff --git a/code/datums/components/crafting/equipment.dm b/code/datums/components/crafting/equipment.dm index 4623739a1679..8c5f1798dce7 100644 --- a/code/datums/components/crafting/equipment.dm +++ b/code/datums/components/crafting/equipment.dm @@ -1,4 +1,4 @@ -/* /datum/crafting_recipe/strobeshield // DARKPACK EDIT REMOVE +/* /datum/crafting_recipe/strobeshield // DARKPACK EDIT REMOVAL name = "Strobe Shield" result = /obj/item/shield/riot/flash reqs = list( @@ -45,7 +45,7 @@ radio_types_blacklist = typecacheof(list(/obj/item/radio/headset, /obj/item/radio/intercom)) blacklist = radio_types_blacklist return ..() -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/radio_containing/radiogloves name = "Radio Gloves" result = /obj/item/clothing/gloves/radio @@ -156,7 +156,7 @@ /obj/item/stack/rods = 1, ) category = CAT_EQUIPMENT -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/flashlight_eyes name = "Flashlight Eyes" result = /obj/item/organ/eyes/robotic/flashlight @@ -278,7 +278,7 @@ ) category = CAT_EQUIPMENT tool_behaviors = list(TOOL_WELDER, TOOL_WIRECUTTER) -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/tether_anchor name = "Tether Anchor" result = /obj/item/tether_anchor diff --git a/code/datums/components/crafting/guncrafting.dm b/code/datums/components/crafting/guncrafting.dm index 9c5e5d4304b6..21e50694f138 100644 --- a/code/datums/components/crafting/guncrafting.dm +++ b/code/datums/components/crafting/guncrafting.dm @@ -18,7 +18,7 @@ icon_state = "receiver" custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 5.5, /datum/material/cardboard = SHEET_MATERIAL_AMOUNT) -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /obj/item/weaponcrafting/receiver/create_slapcraft_component() var/static/list/slapcraft_recipe_list = list(/datum/crafting_recipe/pipegun) @@ -34,7 +34,7 @@ resistance_flags = FLAMMABLE icon = 'icons/obj/weapons/improvised.dmi' icon_state = "riflestock" -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /obj/item/weaponcrafting/stock/create_slapcraft_component() var/static/list/slapcraft_recipe_list = list(/datum/crafting_recipe/smoothbore_disabler, /datum/crafting_recipe/laser_musket) @@ -48,7 +48,7 @@ desc = "Illegal parts to make a giant like wrench commonly known as a Big Slappy." icon = 'icons/obj/weapons/improvised.dmi' icon_state = "weaponkit_gw" -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /obj/item/weaponcrafting/giant_wrench/create_slapcraft_component() // slappycraft var/static/list/slapcraft_recipe_list = list(/datum/crafting_recipe/giant_wrench) diff --git a/code/datums/components/crafting/melee_weapon.dm b/code/datums/components/crafting/melee_weapon.dm index 4237e89505c0..0072348341ce 100644 --- a/code/datums/components/crafting/melee_weapon.dm +++ b/code/datums/components/crafting/melee_weapon.dm @@ -8,7 +8,7 @@ ) time = 4 SECONDS category = CAT_WEAPON_MELEE -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/teleprod name = "Teleprod" result = /obj/item/melee/baton/security/cattleprod/teleprod @@ -155,7 +155,7 @@ time = 2 SECONDS category = CAT_WEAPON_MELEE -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/toysword name = "Toy Sword" reqs = list( @@ -209,7 +209,7 @@ time = 10 SECONDS category = CAT_WEAPON_MELEE crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/giant_wrench name = "Big Slappy" result = /obj/item/shovel/giant_wrench @@ -253,7 +253,7 @@ ) time = 8 SECONDS category = CAT_WEAPON_MELEE -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/sm_sword name = "Supermatter Sword" result = /obj/item/melee/supermatter_sword diff --git a/code/datums/components/crafting/misc.dm b/code/datums/components/crafting/misc.dm index fa2f4f3bfdf7..cfc3cb1e1917 100644 --- a/code/datums/components/crafting/misc.dm +++ b/code/datums/components/crafting/misc.dm @@ -45,7 +45,7 @@ ) tool_behaviors = list(TOOL_WIRECUTTER) category = CAT_MISC -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/cardboard_id name = "Cardboard ID Card" tool_behaviors = list(TOOL_WIRECUTTER) diff --git a/code/datums/components/crafting/ranged_weapon.dm b/code/datums/components/crafting/ranged_weapon.dm index fcc39ce26399..87b7dea50398 100644 --- a/code/datums/components/crafting/ranged_weapon.dm +++ b/code/datums/components/crafting/ranged_weapon.dm @@ -7,7 +7,7 @@ ) time = 2 SECONDS //faster than crafting them by hand! category = CAT_WEAPON_RANGED -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/gonbola name = "Gonbola" result = /obj/item/restraints/legcuffs/bola/gonbola @@ -311,7 +311,7 @@ time = 5 SECONDS category = CAT_WEAPON_RANGED crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/pipe_organ_gun name = "Pipe Organ Gun" tool_behaviors = list(TOOL_WELDER, TOOL_SCREWDRIVER) @@ -382,7 +382,7 @@ ) category = CAT_WEAPON_RANGED crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/laser_musket name = "Laser Musket" result = /obj/item/gun/energy/laser/musket @@ -413,7 +413,7 @@ time = 30 SECONDS //contemplate for a bit category = CAT_WEAPON_RANGED crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/smoothbore_disabler name = "Smoothbore Disabler" result = /obj/item/gun/energy/disabler/smoothbore @@ -457,7 +457,7 @@ time = 30 SECONDS category = CAT_WEAPON_RANGED crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/ashenbow name = "Ashen Bow" result = /obj/item/gun/ballistic/bow/ashenbow diff --git a/code/datums/components/crafting/robot.dm b/code/datums/components/crafting/robot.dm index 0dc92b4f64f6..053151673bc4 100644 --- a/code/datums/components/crafting/robot.dm +++ b/code/datums/components/crafting/robot.dm @@ -1,4 +1,4 @@ -/* /datum/crafting_recipe/ed209 // DARKPACK EDIT REMOVE +/* /datum/crafting_recipe/ed209 // DARKPACK EDIT REMOVAL name = "ED209" result = /mob/living/simple_animal/bot/secbot/ed209 reqs = list( diff --git a/code/datums/components/crafting/structures.dm b/code/datums/components/crafting/structures.dm index b047daabcdaf..a6cc8b868b47 100644 --- a/code/datums/components/crafting/structures.dm +++ b/code/datums/components/crafting/structures.dm @@ -51,7 +51,7 @@ ) category = CAT_STRUCTURE -/*// DARKPACK EDIT REMOVE +/*// DARKPACK EDIT REMOVAL /datum/crafting_recipe/mechcabinet name = "Mech Removal Cabinet" result = /obj/item/wallframe/fireaxecabinet/mechremoval @@ -73,7 +73,7 @@ ) category = CAT_STRUCTURE crafting_flags = CRAFT_CHECK_DENSITY -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/adam_pedestal name = "Adamantine Pedestal" result = /obj/item/adamantine_pedestal diff --git a/code/datums/components/crafting/tailoring.dm b/code/datums/components/crafting/tailoring.dm index 0b2b98129934..8e74e63331b4 100644 --- a/code/datums/components/crafting/tailoring.dm +++ b/code/datums/components/crafting/tailoring.dm @@ -1,4 +1,4 @@ -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/durathread_vest name = "Durathread Vest" result = /obj/item/clothing/suit/armor/vest/durathread @@ -135,7 +135,7 @@ time = 4 SECONDS category = CAT_CONTAINERS -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/gunsheath name = "Gun Powered Sabre Sheath" result = /obj/item/storage/belt/sheath/sabre/gunpowered @@ -245,7 +245,7 @@ tool_behaviors = list(TOOL_WIRECUTTER) reqs = list(/obj/item/bedsheet = 1) category = CAT_CLOTHING -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/lizardboots name = "Lizard Skin Boots" result = /obj/item/clothing/shoes/cowboy/lizard @@ -315,7 +315,7 @@ /obj/item/stack/sheet/animalhide/goliath_hide = 3, ) category = CAT_CLOTHING -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/bonetalisman name = "Bone Talisman" result = /obj/item/clothing/accessory/talisman @@ -385,7 +385,7 @@ time = 3 SECONDS reqs = list(/obj/item/stack/sheet/bone = 4) category = CAT_CLOTHING -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/goliathcloak name = "Goliath Cloak" result = /obj/item/clothing/suit/hooded/cloak/goliath @@ -557,7 +557,7 @@ ) category = CAT_CLOTHING -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/atmospherics_gas_mask name = "atmospherics gas mask" result = /obj/item/clothing/mask/gas/atmos @@ -579,7 +579,7 @@ /obj/item/paper = 1, ) category = CAT_CLOTHING -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/biohood_sec name = "security biohood" result = /obj/item/clothing/head/bio_hood/security diff --git a/code/datums/components/crafting/tiles.dm b/code/datums/components/crafting/tiles.dm index b6dc1ea614ed..8344bb8163a5 100644 --- a/code/datums/components/crafting/tiles.dm +++ b/code/datums/components/crafting/tiles.dm @@ -17,7 +17,7 @@ /obj/item/stack/cable_coil = 5, ) category = CAT_TILES -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/circuit name = "Circuit Tile" result = /obj/item/stack/tile/circuit diff --git a/code/datums/components/crafting/tools.dm b/code/datums/components/crafting/tools.dm index 13ad48a3e9b0..964a2be5d556 100644 --- a/code/datums/components/crafting/tools.dm +++ b/code/datums/components/crafting/tools.dm @@ -1,4 +1,4 @@ -/*// DARKPACK EDIT REMOVE +/*// DARKPACK EDIT REMOVAL /datum/crafting_recipe/gold_horn name = "Golden Bike Horn" result = /obj/item/bikehorn/golden @@ -57,7 +57,7 @@ ) result = /obj/item/stack/medical/bandage/makeshift category = CAT_TOOLS -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/bone_rod name = "Bone Fishing Rod" result = /obj/item/fishing_rod/bone diff --git a/code/datums/components/crafting/weapon_ammo.dm b/code/datums/components/crafting/weapon_ammo.dm index 76b0528f97a1..82617af66c1d 100644 --- a/code/datums/components/crafting/weapon_ammo.dm +++ b/code/datums/components/crafting/weapon_ammo.dm @@ -1,4 +1,4 @@ -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/meteorslug name = "Meteorslug Shell" result = /obj/item/ammo_casing/shotgun/meteorslug @@ -32,7 +32,7 @@ time = 0.1 SECONDS category = CAT_WEAPON_AMMO crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/healium_bolt name = "healium crystal crossbow bolt" result = /obj/item/ammo_casing/rebar/healium diff --git a/code/datums/components/food/edible.dm b/code/datums/components/food/edible.dm index 82ad8a20d77b..93b68d78eae3 100644 --- a/code/datums/components/food/edible.dm +++ b/code/datums/components/food/edible.dm @@ -704,7 +704,7 @@ Behavior that's still missing from this component that original food items had t SEND_SIGNAL(parent, COMSIG_FOOD_CONSUMED, eater, feeder) SEND_SIGNAL(eater, COMSIG_LIVING_FINISH_EAT, parent, feeder) - // DARKPACK EDIT ADD START - MERITS/FLAWS - (Organovore) + // DARKPACK EDIT ADD START - MERITS_FLAWS - (Organovore) if(HAS_TRAIT(eater, TRAIT_ORGANOVORE) && (foodtypes & GORE)) if(get_kindred_splat(eater)) eater.adjust_blood_pool(1, FALSE) diff --git a/code/datums/components/food/ice_cream_holder.dm b/code/datums/components/food/ice_cream_holder.dm index 59ee6cdc95b9..f6a0adebb6df 100644 --- a/code/datums/components/food/ice_cream_holder.dm +++ b/code/datums/components/food/ice_cream_holder.dm @@ -315,10 +315,10 @@ GLOBAL_LIST_INIT_TYPED(ice_cream_flavours, /datum/ice_cream_flavour, init_ice_cr ingredients = list(/datum/reagent/consumable/milk, /datum/reagent/consumable/ice, /datum/reagent/consumable/peachjuice) reagent_type = /datum/reagent/consumable/peachjuice -/*/datum/ice_cream_flavour/vanilla/korta // DARKPACK EDIT REMOVE START - No lizzers +/*/datum/ice_cream_flavour/vanilla/korta // DARKPACK EDIT REMOVAL START - No lizzers name = ICE_CREAM_KORTA_VANILLA desc = "filled with vanilla ice cream made with korta milk. Lizards love it!" - ingredients = list(/datum/reagent/consumable/korta_milk, /datum/reagent/consumable/ice, /datum/reagent/consumable/vanilla)*/ // DARKPACK EDIT REMOVE END - No lizzers + ingredients = list(/datum/reagent/consumable/korta_milk, /datum/reagent/consumable/ice, /datum/reagent/consumable/vanilla)*/ // DARKPACK EDIT REMOVAL END - No lizzers /datum/ice_cream_flavour/cherry_chocolate name = ICE_CREAM_CHERRY_CHOCOLATE @@ -343,11 +343,11 @@ GLOBAL_LIST_INIT_TYPED(ice_cream_flavours, /datum/ice_cream_flavour, init_ice_cr ingredients_text = "optional flavorings" takes_custom_ingredients = TRUE -/*/datum/ice_cream_flavour/custom/korta // DARKPACK EDIT REMOVE START - No lizzers +/*/datum/ice_cream_flavour/custom/korta // DARKPACK EDIT REMOVAL START - No lizzers name = ICE_CREAM_KORTA_CUSTOM desc = "filled with artisanal lizard-friendly ice cream. Made with real $CUSTOM_NAME. Ain't that something." ingredients = list(/datum/reagent/consumable/korta_milk, /datum/reagent/consumable/ice) - ingredients_text = "optional flavorings"*/ // DARKPACK EDIT REMOVE END - No lizzers + ingredients_text = "optional flavorings"*/ // DARKPACK EDIT REMOVAL END - No lizzers /datum/ice_cream_flavour/custom/add_flavour(datum/component/ice_cream_holder/target, datum/reagents/custom_ingredients) if(!custom_ingredients || custom_ingredients.total_volume < 4) //consumable reagents have stronger taste so higher volume are required to allow non-food flavourings to break through better. diff --git a/code/datums/diseases/advance/advance.dm b/code/datums/diseases/advance/advance.dm index 413047debb87..36569c119bba 100644 --- a/code/datums/diseases/advance/advance.dm +++ b/code/datums/diseases/advance/advance.dm @@ -32,7 +32,7 @@ var/list/symptoms = list() // The symptoms of the disease. var/id = "" var/processing = FALSE - var/mutable = FALSE //set to FALSE to prevent most in-game methods of altering the disease via virology // DARKPACK EDIT, ORIGINAL: ar/mutable = TRUE //set to FALSE to prevent most in-game methods of altering the disease via virology + var/mutable = FALSE //set to FALSE to prevent most in-game methods of altering the disease via virology // DARKPACK EDIT CHANGE - ORIGINAL: ar/mutable = TRUE //set to FALSE to prevent most in-game methods of altering the disease via virology /* diff --git a/code/datums/dna/blocks/dna_identity_block.dm b/code/datums/dna/blocks/dna_identity_block.dm index 90f353779793..2c7cd2f4b342 100644 --- a/code/datums/dna/blocks/dna_identity_block.dm +++ b/code/datums/dna/blocks/dna_identity_block.dm @@ -133,11 +133,13 @@ /// Heights above the highest and below the lowest are locked to traits/mutations/species /// Actual DNA Height is stored as "index in dna_heights list" var/list/dna_heights = list( + HUMAN_HEIGHT_DWARF, // DARKPACK EDIT ADD HUMAN_HEIGHT_SHORTEST, HUMAN_HEIGHT_SHORT, HUMAN_HEIGHT_MEDIUM, HUMAN_HEIGHT_TALL, HUMAN_HEIGHT_TALLER, + HUMAN_HEIGHT_TALLEST, // DARKPACK EDIT ADD ) /datum/dna_block/identity/height/create_unique_block(mob/living/carbon/human/target) diff --git a/code/datums/dna/dna.dm b/code/datums/dna/dna.dm index 537a48c09257..bed1baa6f67a 100644 --- a/code/datums/dna/dna.dm +++ b/code/datums/dna/dna.dm @@ -83,7 +83,7 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) return ..() ///Copies the variables of a dna datum onto another. -/datum/dna/proc/copy_dna(datum/dna/new_dna, transfer_flags = COPY_DNA_SE|COPY_DNA_SPECIES|COPY_DNA_BLOOD_TYPE) // DARKPACK EDIT CHANGE - added '|COPY_DNA_BLOOD_TYPE', original : /datum/dna/proc/copy_dna(datum/dna/new_dna, transfer_flags = COPY_DNA_SE|COPY_DNA_SPECIES) +/datum/dna/proc/copy_dna(datum/dna/new_dna, transfer_flags = COPY_DNA_SE|COPY_DNA_SPECIES|COPY_DNA_BLOOD_TYPE) // DARKPACK EDIT CHANGE - added '|COPY_DNA_BLOOD_TYPE', ORIGINAL: /datum/dna/proc/copy_dna(datum/dna/new_dna, transfer_flags = COPY_DNA_SE|COPY_DNA_SPECIES) new_dna.unique_enzymes = unique_enzymes new_dna.unique_identity = unique_identity new_dna.unique_features = unique_features @@ -100,10 +100,10 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) if(transfer_flags & COPY_DNA_SPECIES) new_dna.holder.set_species(species.type, icon_update = FALSE) else - //DARKPACK EDIT CHANGE START - flag for copying blood type, we don't want to remove vampire blood from vampires using certain abilities + // DARKPACK EDIT CHANGE START - flag for copying blood type, we don't want to remove vampire blood from vampires using certain abilities if(transfer_flags & COPY_DNA_BLOOD_TYPE) new_dna.blood_type = blood_type - //DARKPACK EDIT CHANGE END + // DARKPACK EDIT CHANGE END if(transfer_flags & COPY_DNA_SPECIES) new_dna.species = new species.type if(transfer_flags & COPY_DNA_MUTATIONS && holder?.can_mutate()) diff --git a/code/datums/emotes.dm b/code/datums/emotes.dm index 60b961d38291..aa1947ce0439 100644 --- a/code/datums/emotes.dm +++ b/code/datums/emotes.dm @@ -149,22 +149,22 @@ runechat_flags = EMOTE_MESSAGE, ) else if(is_important) - to_chat(viewer, span_emote("[GET_GUESTBOOK_NAME(viewer, user)][space][msg]")) // DARKPACK EDIT, ORIGINAL: to_chat(viewer, span_emote("[user] [msg]")) + to_chat(viewer, span_emote("[GET_GUESTBOOK_NAME(viewer, user)][space][msg]")) // DARKPACK EDIT CHANGE - ORIGINAL: to_chat(viewer, span_emote("[user] [msg]")) else if(is_audible && is_visual) viewer.show_message( - span_emote("[GET_GUESTBOOK_NAME(viewer, user)][space][msg]"), MSG_AUDIBLE, // DARKPACK EDIT, ORIGINAL: span_emote("[user] [msg]"), MSG_AUDIBLE, - span_emote("You see how [GET_GUESTBOOK_NAME(viewer, user)][space][msg]"), MSG_VISUAL, // DARKPACK EDIT, ORIGINAL: span_emote("You see how [user] [msg]"), MSG_VISUAL, + span_emote("[GET_GUESTBOOK_NAME(viewer, user)][space][msg]"), MSG_AUDIBLE, // DARKPACK EDIT CHANGE - ORIGINAL: span_emote("[user] [msg]"), MSG_AUDIBLE, + span_emote("You see how [GET_GUESTBOOK_NAME(viewer, user)][space][msg]"), MSG_VISUAL, // DARKPACK EDIT CHANGE - ORIGINAL: span_emote("You see how [user] [msg]"), MSG_VISUAL, ) else if(is_audible) - viewer.show_message(span_emote("[GET_GUESTBOOK_NAME(viewer, user)][space][msg]"), MSG_AUDIBLE) // DARKPACK EDIT, ORIGINAL: viewer.show_message(span_emote("[user] [msg]"), MSG_AUDIBLE) + viewer.show_message(span_emote("[GET_GUESTBOOK_NAME(viewer, user)][space][msg]"), MSG_AUDIBLE) // DARKPACK EDIT CHANGE - ORIGINAL: viewer.show_message(span_emote("[user] [msg]"), MSG_AUDIBLE) else if(is_visual) - viewer.show_message(span_emote("[GET_GUESTBOOK_NAME(viewer, user)][space][msg]"), MSG_VISUAL) // DARKPACK EDIT, ORIGINAL: viewer.show_message(span_emote("[user] [msg]"), MSG_VISUAL) + viewer.show_message(span_emote("[GET_GUESTBOOK_NAME(viewer, user)][space][msg]"), MSG_VISUAL) // DARKPACK EDIT CHANGE - ORIGINAL: viewer.show_message(span_emote("[user] [msg]"), MSG_VISUAL) return // Early exit so no dchat message // The emote has some important information, and should always be shown to the user else if(is_important) for(var/mob/viewer as anything in viewers(user)) - to_chat(viewer, span_emote("[GET_GUESTBOOK_NAME(viewer, user)][space][msg]")) // DARKPACK EDIT, ORIGINAL: to_chat(viewer, span_emote("[user][space][msg]")) + to_chat(viewer, span_emote("[GET_GUESTBOOK_NAME(viewer, user)][space][msg]")) // DARKPACK EDIT CHANGE - ORIGINAL: to_chat(viewer, span_emote("[user][space][msg]")) if(user.runechat_prefs_check(viewer, EMOTE_MESSAGE)) viewer.create_chat_message( speaker = user, @@ -204,7 +204,7 @@ continue if(!(get_chat_toggles(ghost.client) & CHAT_GHOSTSIGHT)) continue - var/dchatmsg = "[GET_GUESTBOOK_NAME(ghost, user)][space][msg]" // DARKPACK EDIT ADDITION + var/dchatmsg = "[GET_GUESTBOOK_NAME(ghost, user)][space][msg]" // DARKPACK EDIT ADD to_chat(ghost, span_emote("[FOLLOW_LINK(ghost, user)][space][dchatmsg]")) // DARKPACK EDIT CHANGE END diff --git a/code/datums/keybinding/living.dm b/code/datums/keybinding/living.dm index c4b8d6a356a1..7a8b28cad2f9 100644 --- a/code/datums/keybinding/living.dm +++ b/code/datums/keybinding/living.dm @@ -31,7 +31,7 @@ owner.hud_used.screen_objects[HUD_MOB_RESIST].icon_state = owner.hud_used.screen_objects[HUD_MOB_RESIST].base_icon_state /datum/keybinding/living/look_up - hotkey_keys = list("P") // DARKPACK EDIT, ORIGINAL: hotkey_keys = list("L") + hotkey_keys = list("P") // DARKPACK EDIT CHANGE - ORIGINAL: hotkey_keys = list("L") name = "look up" full_name = "Look Up" description = "Look up at the next z-level. Only works if directly below open space." diff --git a/code/datums/quirks/negative_quirks/scarred_eye.dm b/code/datums/quirks/negative_quirks/scarred_eye.dm index e7920e767c22..a0a0b6807be7 100644 --- a/code/datums/quirks/negative_quirks/scarred_eye.dm +++ b/code/datums/quirks/negative_quirks/scarred_eye.dm @@ -1,5 +1,5 @@ /datum/quirk/item_quirk/scarred_eye - name = "One Eye" // DARKPACK EDIT CHANGE - MERITS/FLAWS + name = "One Eye" // DARKPACK EDIT CHANGE - MERITS_FLAWS desc = "An accident in your past has cost you one of your eyes, but you got a cool eyepatch. Yarr!" icon = FA_ICON_EYE_SLASH value = -2 @@ -9,7 +9,7 @@ hardcore_value = 2 quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_CHANGES_APPEARANCE mail_goodies = list(/obj/item/reagent_containers/cup/glass/bottle/rum, /obj/item/clothing/mask/bandana/red) - darkpack_allowed = TRUE // DARKPACK EDIT ADD - MERITS/FLAWS + darkpack_allowed = TRUE // DARKPACK EDIT ADD - MERITS_FLAWS /datum/quirk_constant_data/eye_scarring associated_typepath = /datum/quirk/item_quirk/scarred_eye diff --git a/code/datums/quirks/positive_quirks/bilingual.dm b/code/datums/quirks/positive_quirks/bilingual.dm index eadac48a96e5..8b678fd0f444 100644 --- a/code/datums/quirks/positive_quirks/bilingual.dm +++ b/code/datums/quirks/positive_quirks/bilingual.dm @@ -1,13 +1,13 @@ /datum/quirk/bilingual - name = "Language" // DARKPACK EDIT CHANGE - MERITS/FLAWS + name = "Language" // DARKPACK EDIT CHANGE - MERITS_FLAWS desc = "Over the years you've picked up an extra language!" icon = FA_ICON_GLOBE - value = 1 // DARKPACK EDIT CHANGE - MERITS/FLAWS + 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 + darkpack_allowed = TRUE // DARKPACK EDIT ADD - MERITS_FLAWS /datum/quirk_constant_data/bilingual associated_typepath = /datum/quirk/bilingual diff --git a/code/datums/records/manifest.dm b/code/datums/records/manifest.dm index 4876872eb9b3..16ea2fd2324c 100644 --- a/code/datums/records/manifest.dm +++ b/code/datums/records/manifest.dm @@ -36,10 +36,10 @@ GLOBAL_DATUM_INIT(manifest, /datum/manifest, new) var/name = target.name var/rank = target.rank // user-visible job var/trim = target.trim // internal jobs by trim type - // DARKPACK EDIT ADDITION START - bare minimum data the station records need to possess to show up on the crew manifest + // DARKPACK EDIT ADD START - bare minimum data the station records need to possess to show up on the crew manifest if((name == "Unknown") || (rank == "Unassigned" || rank == "Unknown")) // records are unassigned by default, but if edited without input becomes unknown continue - // DARKPACK EDIT ADDITION END + // DARKPACK EDIT ADD END var/datum/job/job = SSjob.get_job(trim) if(!job || !(job.job_flags & JOB_CREW_MANIFEST) || !LAZYLEN(job.departments_list)) // In case an unlawful custom rank is added. var/list/misc_list = manifest_out[DEPARTMENT_UNASSIGNED] diff --git a/code/datums/records/record.dm b/code/datums/records/record.dm index ba3d8aadf632..fd2f02ec1aed 100644 --- a/code/datums/records/record.dm +++ b/code/datums/records/record.dm @@ -267,7 +267,7 @@ if(alias != name) final_paper_text += "Alias: [alias]
" - final_paper_text += "Fingerprint: [fingerprint]
Wanted Status: [wanted_status]

" // DARKPACK EDIT, ORIGINAL: final_paper_text += "Species: [species]
Fingerprint: [fingerprint]
Wanted Status: [wanted_status]

" + final_paper_text += "Fingerprint: [fingerprint]
Wanted Status: [wanted_status]

" // DARKPACK EDIT CHANGE - ORIGINAL: final_paper_text += "Species: [species]
Fingerprint: [fingerprint]
Wanted Status: [wanted_status]

" final_paper_text += "
Security Data


" diff --git a/code/game/atom/atom_examine.dm b/code/game/atom/atom_examine.dm index 3d618f8c6860..9116a8b23977 100644 --- a/code/game/atom/atom_examine.dm +++ b/code/game/atom/atom_examine.dm @@ -191,7 +191,7 @@ return "\a [src]" /mob/living/get_examine_name(mob/user) - var/visible_name = get_visible_name(examiner = user) // DARKPACK EDIT, ORIGINAL: var/visible_name = get_visible_name() + var/visible_name = get_visible_name(examiner = user) // DARKPACK EDIT CHANGE - ORIGINAL: var/visible_name = get_visible_name() var/list/name_override = list(visible_name) if(SEND_SIGNAL(user, COMSIG_LIVING_PERCEIVE_EXAMINE_NAME, src, visible_name, name_override) & COMPONENT_EXAMINE_NAME_OVERRIDEN) return name_override[1] @@ -231,5 +231,5 @@ * * add_id_name - If TRUE, ID information such as honorifics or name (if mismatched) are appended * * force_real_name - If TRUE, will always return real_name and add (as face_name/id_name) if it doesn't match their appearance */ -/atom/proc/get_visible_name(add_id_name = TRUE, force_real_name = FALSE, mob/examiner) // DARKPACK EDIT, ORIGINAL: /atom/proc/get_visible_name(add_id_name = TRUE, force_real_name = FALSE) +/atom/proc/get_visible_name(add_id_name = TRUE, force_real_name = FALSE, mob/examiner) // DARKPACK EDIT CHANGE - ORIGINAL: /atom/proc/get_visible_name(add_id_name = TRUE, force_real_name = FALSE) return name diff --git a/code/game/machinery/doors/passworddoor.dm b/code/game/machinery/doors/passworddoor.dm index 9998c5c7a21a..1261bdbb9a85 100644 --- a/code/game/machinery/doors/passworddoor.dm +++ b/code/game/machinery/doors/passworddoor.dm @@ -44,7 +44,7 @@ /obj/machinery/door/password/get_save_vars() return ..() + NAMEOF(src, password) -/obj/machinery/door/password/Hear(atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range, source) // DARKPACK EDIT, ORIGINAL: /obj/machinery/door/password/Hear(atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range) +/obj/machinery/door/password/Hear(atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range, source) // DARKPACK EDIT CHANGE - ORIGINAL: /obj/machinery/door/password/Hear(atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range) . = ..() if(!density || !voice_activated || radio_freq) return diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index 662f1f74d3c9..66daee76e7d1 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -576,7 +576,7 @@ Possible to do for anyone motivated enough: /*This is the proc for special two-way communication between AI and holopad/people talking near holopad. For the other part of the code, check silicon say.dm. Particularly robot talk.*/ -/obj/machinery/holopad/Hear(atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range, source) // DARKPACK EDIT, ORIGINAL: /obj/machinery/holopad/Hear(atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range) +/obj/machinery/holopad/Hear(atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range, source) // DARKPACK EDIT CHANGE - ORIGINAL: /obj/machinery/holopad/Hear(atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range) . = ..() if(speaker && LAZYLEN(masters) && !radio_freq)//Master is mostly a safety in case lag hits or something. Radio_freq so AIs dont hear holopad stuff through radios. for(var/mob/living/silicon/ai/master in masters) diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index 780d4b678a47..a74c2cb3c394 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -40,7 +40,7 @@ Buildable meters pipe_color = ATMOS_COLOR_OMNI setDir(crafter.dir) update() - */ // DARKPACK EDIT REMOVE + */ // DARKPACK EDIT REMOVAL /obj/item/pipe/directional RPD_type = PIPE_UNARY @@ -170,7 +170,7 @@ Buildable meters // Only 'normal' pipes if(type != /obj/item/pipe/quaternary) - return ..()/* // DARKPACK EDIT REMOVE + return ..()/* // DARKPACK EDIT REMOVAL var/static/list/slapcraft_recipe_list = list(/datum/crafting_recipe/ghettojetpack, /datum/crafting_recipe/pipegun, /datum/crafting_recipe/smoothbore_disabler, /datum/crafting_recipe/improvised_pneumatic_cannon) AddElement( diff --git a/code/game/machinery/telecomms/broadcasting.dm b/code/game/machinery/telecomms/broadcasting.dm index ad3a0a80db1c..68e469d1db96 100644 --- a/code/game/machinery/telecomms/broadcasting.dm +++ b/code/game/machinery/telecomms/broadcasting.dm @@ -180,7 +180,7 @@ stack_trace("null found in the hearers list returned by the spatial grid. this is bad") continue spans -= blacklisted_spans - hearer.Hear(virt, language, message, frequency, data["frequency_name"], data["frequency_color"], spans, message_mods, message_range = INFINITY, source = source) // DARKPACK EDIT, ORIGINAL: hearer.Hear(virt, language, message, frequency, data["frequency_name"], data["frequency_color"], spans, message_mods, message_range = INFINITY) + hearer.Hear(virt, language, message, frequency, data["frequency_name"], data["frequency_color"], spans, message_mods, message_range = INFINITY, source = source) // DARKPACK EDIT CHANGE - ORIGINAL: hearer.Hear(virt, language, message, frequency, data["frequency_name"], data["frequency_color"], spans, message_mods, message_range = INFINITY) // This following recording is intended for research and feedback in the use of department radio channels if(length(receive)) diff --git a/code/game/objects/effects/decals/cleanable/mess.dm b/code/game/objects/effects/decals/cleanable/mess.dm index 6c6c20975fe4..be640e2b5b5b 100644 --- a/code/game/objects/effects/decals/cleanable/mess.dm +++ b/code/game/objects/effects/decals/cleanable/mess.dm @@ -362,20 +362,20 @@ GLOBAL_LIST_EMPTY(nebula_vomits) beauty = -150 clean_type = CLEAN_TYPE_HARD_DECAL -// DARKPACK EDIT ADDITION START +// DARKPACK EDIT ADD START /obj/effect/decal/cleanable/garbage/NeverShouldHaveComeHere(turf/here_turf) return isclosedturf(here_turf) -// DARKPACK EDIT ADDITION END +// DARKPACK EDIT ADD END /obj/effect/decal/cleanable/garbage/Initialize(mapload) . = ..() icon_state = "garbage[rand(1, 6)]" // DARKPACK EDIT ADD AddElement(/datum/element/swabable, CELL_LINE_TABLE_SLUDGE, CELL_VIRUS_TABLE_GENERIC, rand(2,4), 15) -// DARKPACK EDIT ADDITION START +// DARKPACK EDIT ADD START /obj/effect/decal/cleanable/garbage/NeverShouldHaveComeHere(turf/here_turf) return isclosedturf(here_turf) -// DARKPACK EDIT ADDITION END +// DARKPACK EDIT ADD END /obj/effect/decal/cleanable/rubble name = "rubble" diff --git a/code/game/objects/effects/decals/structure.dm b/code/game/objects/effects/decals/structure.dm index bb31953f31e4..0dcc9798490d 100644 --- a/code/game/objects/effects/decals/structure.dm +++ b/code/game/objects/effects/decals/structure.dm @@ -5,7 +5,7 @@ icon_state = "lattice-255" density = TRUE -// DARKPACK EDIT ADDITION START +// DARKPACK EDIT ADD START /obj/effect/decal/fakelattice/NeverShouldHaveComeHere(turf/here_turf) return isclosedturf(here_turf) -// DARKPACK EDIT ADDITION END +// DARKPACK EDIT ADD END diff --git a/code/game/objects/items/cigarettes.dm b/code/game/objects/items/cigarettes.dm index 4478aabaa2f3..d0f9dad00f74 100644 --- a/code/game/objects/items/cigarettes.dm +++ b/code/game/objects/items/cigarettes.dm @@ -464,6 +464,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM var/mob/living/carbon/smoker = loc if(src == smoker.wear_mask) make_mob_smoke(smoker) + smoker.trigger_rotschreck(src, 3) // DARKPACK EDIT ADD - FRENZY /obj/item/cigarette/extinguish() . = ..() diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 9b208798f60b..14e5095bf7d7 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -60,7 +60,7 @@ init_slapcrafting() /obj/item/flashlight/proc/init_slapcrafting() -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL var/static/list/slapcraft_recipe_list = list(/datum/crafting_recipe/flashlight_eyes) AddElement( diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index 7462c5b2a5ce..00daa2ac91b7 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -154,7 +154,7 @@ return TRUE -/obj/item/radio/intercom/Hear(atom/movable/speaker, message_langs, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range, source) // DARKPACK EDIT, ORIGINAL: /obj/item/radio/intercom/Hear(atom/movable/speaker, message_langs, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range) +/obj/item/radio/intercom/Hear(atom/movable/speaker, message_langs, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range, source) // DARKPACK EDIT CHANGE - ORIGINAL: /obj/item/radio/intercom/Hear(atom/movable/speaker, message_langs, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range) if(message_mods[RADIO_EXTENSION] == MODE_INTERCOM) return // Avoid hearing the same thing twice return ..() diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 3fd3361d62e3..47f9fae2f2b3 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -2,7 +2,7 @@ /obj/item/radio icon = 'icons/obj/devices/voice.dmi' - name = "city bounced radio" // DARKPACK EDIT, ORIGINAL: name = "station bounced radio" + name = "city bounced radio" // DARKPACK EDIT CHANGE - ORIGINAL: name = "station bounced radio" icon_state = "walkietalkie" inhand_icon_state = "walkietalkie" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' @@ -373,7 +373,7 @@ var/datum/signal/subspace/vocal/signal = new(src, freq, speaker, language, radio_message, spans, message_mods) // Independent radios, on the CentCom frequency, reach all independent radios - if ((special_channels & RADIO_SPECIAL_CENTCOM) && (freq == FREQ_CENTCOM || freq == FREQ_STATUS_DISPLAYS || freq == FREQ_MILITARY)) // DARKPACK EDIT, ORIGINAL: if ((special_channels & RADIO_SPECIAL_CENTCOM) && (freq == FREQ_CENTCOM || freq == FREQ_STATUS_DISPLAYS)) + if ((special_channels & RADIO_SPECIAL_CENTCOM) && (freq == FREQ_CENTCOM || freq == FREQ_STATUS_DISPLAYS || freq == FREQ_MILITARY)) // DARKPACK EDIT CHANGE - ORIGINAL: if ((special_channels & RADIO_SPECIAL_CENTCOM) && (freq == FREQ_CENTCOM || freq == FREQ_STATUS_DISPLAYS)) signal.data["compression"] = 0 signal.transmission_method = TRANSMISSION_SUPERSPACE signal.levels = list(0) @@ -411,7 +411,7 @@ signal.levels = SSmapping.get_connected_levels(T) signal.broadcast() -/obj/item/radio/Hear(atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range, source) // DARKPACK EDIT, ORIGINAL: /obj/item/radio/Hear(atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range) +/obj/item/radio/Hear(atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range, source) // DARKPACK EDIT CHANGE - ORIGINAL: /obj/item/radio/Hear(atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range) . = ..() if(radio_freq || !broadcasting || get_dist(src, speaker) > canhear_range || message_mods[MODE_RELAY]) return diff --git a/code/game/objects/items/devices/scanners/gas_analyzer.dm b/code/game/objects/items/devices/scanners/gas_analyzer.dm index b7a7ce648068..738edcb3c457 100644 --- a/code/game/objects/items/devices/scanners/gas_analyzer.dm +++ b/code/game/objects/items/devices/scanners/gas_analyzer.dm @@ -41,7 +41,7 @@ AddElement( /datum/element/slapcrafting,\ slapcraft_recipes = slapcraft_recipe_list,\ - ) */ // DARKPACK EDIT REMOVE + ) */ // DARKPACK EDIT REMOVAL /obj/item/analyzer/grind_results() return list(/datum/reagent/mercury = 5, /datum/reagent/iron = 5, /datum/reagent/silicon = 5) diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm index 0da09ec2fc05..880d949d238b 100644 --- a/code/game/objects/items/devices/taperecorder.dm +++ b/code/game/objects/items/devices/taperecorder.dm @@ -152,7 +152,7 @@ return ..() -/obj/item/taperecorder/Hear(atom/movable/speaker, message_langs, raw_message, radio_freq, radio_freq_name, radio_freq_color, spans, list/message_mods = list(), message_range, source) // DARKPACK EDIT, ORIGINAL: /obj/item/taperecorder/Hear(atom/movable/speaker, message_langs, raw_message, radio_freq, radio_freq_name, radio_freq_color, spans, list/message_mods = list(), message_range) +/obj/item/taperecorder/Hear(atom/movable/speaker, message_langs, raw_message, radio_freq, radio_freq_name, radio_freq_color, spans, list/message_mods = list(), message_range, source) // DARKPACK EDIT CHANGE - ORIGINAL: /obj/item/taperecorder/Hear(atom/movable/speaker, message_langs, raw_message, radio_freq, radio_freq_name, radio_freq_color, spans, list/message_mods = list(), message_range) . = ..() if(message_mods[MODE_RELAY] || !mytape || istype(speaker, /obj/item/taperecorder)) return diff --git a/code/game/objects/items/dyespray.dm b/code/game/objects/items/dyespray.dm index 7f925a03dd86..a120846a2628 100644 --- a/code/game/objects/items/dyespray.dm +++ b/code/game/objects/items/dyespray.dm @@ -3,6 +3,7 @@ desc = "A spray to dye your hair any gradients you'd like." w_class = WEIGHT_CLASS_TINY icon = 'icons/obj/cosmetic.dmi' + ONFLOOR_ICON_HELPER('modular_darkpack/modules/deprecated/icons/onfloor.dmi') icon_state = "dyespray" /obj/item/dyespray/attack_self(mob/user) diff --git a/code/game/objects/items/handcuffs.dm b/code/game/objects/items/handcuffs.dm index 3e756bc7bce0..6fe265d6b56b 100644 --- a/code/game/objects/items/handcuffs.dm +++ b/code/game/objects/items/handcuffs.dm @@ -101,6 +101,12 @@ victim.balloon_alert(user, "can't be handcuffed!") return +// DARKPACK EDIT ADD START + if(HAS_TRAIT(victim, TRAIT_NO_CUFF)) + victim.balloon_alert(user, "you can't handcuff [victim]!") + return +// DARKPACK EDIT ADD END + victim.visible_message( span_danger("[user] is trying to put [src] on [victim]!"), span_userdanger("[user] is trying to put [src] on you!"), @@ -233,7 +239,7 @@ if(new_color) set_cable_color(new_color) - var/static/list/slapcraft_recipe_list = list(/datum/crafting_recipe/bola,/*/datum/crafting_recipe/gonbola */) // DARKPACK EDIT REMOVE + var/static/list/slapcraft_recipe_list = list(/datum/crafting_recipe/bola,/*/datum/crafting_recipe/gonbola */) // DARKPACK EDIT REMOVAL AddElement( /datum/element/slapcrafting,\ diff --git a/code/game/objects/items/implants/implant_storage.dm b/code/game/objects/items/implants/implant_storage.dm index 986bf33832ea..e5d91bf39247 100644 --- a/code/game/objects/items/implants/implant_storage.dm +++ b/code/game/objects/items/implants/implant_storage.dm @@ -17,7 +17,7 @@ for (var/obj/item/stored in contents) stored.add_mob_blood(implantee) atom_storage.remove_all() - implantee.visible_message(span_warning("Some items fall to the floor around [implantee]...")) // DARKPACK EDIT CHANGE - Original : implantee.visible_message(span_warning("A bluespace pocket opens around [src] as it exits [implantee], spewing out its contents and rupturing the surrounding tissue!")) + implantee.visible_message(span_warning("Some items fall to the floor around [implantee]...")) // DARKPACK EDIT CHANGE - ORIGINAL: implantee.visible_message(span_warning("A bluespace pocket opens around [src] as it exits [implantee], spewing out its contents and rupturing the surrounding tissue!")) implantee.apply_damage(20, BRUTE, BODY_ZONE_CHEST) QDEL_NULL(atom_storage) return ..() diff --git a/code/game/objects/items/skub.dm b/code/game/objects/items/skub.dm index 12e6da344d0b..e9eee0ccc3ff 100644 --- a/code/game/objects/items/skub.dm +++ b/code/game/objects/items/skub.dm @@ -6,6 +6,7 @@ w_class = WEIGHT_CLASS_BULKY attack_verb_continuous = list("skubs") attack_verb_simple = list("skub") + brand = "badcode" // DARKPACK EDIT ADD - COMPANY_LOGOS - Proof of concept. I kinda like it. Leave it? /obj/item/skub/Initialize(mapload) . = ..() diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index 2c05ff7f2f63..52d8f2fefbd9 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -81,7 +81,7 @@ GLOBAL_LIST_INIT(glass_recipes, list ( \ to_chat(user, span_warning("You need one rod and one sheet of glass to make reinforced glass!")) return return ..() -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL GLOBAL_LIST_INIT(pglass_recipes, list ( \ new/datum/stack_recipe("directional window", /obj/structure/window/plasma/unanchored, time = 0.5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ON_SOLID_GROUND | CRAFT_CHECK_DIRECTION, category = CAT_WINDOWS), \ new/datum/stack_recipe("fulltile window", /obj/structure/window/plasma/fulltile/unanchored, 2, time = 2 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ON_SOLID_GROUND | CRAFT_IS_FULLTILE, category = CAT_WINDOWS), \ @@ -111,7 +111,7 @@ GLOBAL_LIST_INIT(pglass_recipes, list ( \ /datum/armor/sheet_plasmaglass fire = 75 acid = 100 -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /obj/item/stack/sheet/plasmaglass/get_main_recipes() . = ..() . += GLOB.pglass_recipes @@ -181,7 +181,7 @@ GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \ /obj/item/stack/sheet/rglass/get_main_recipes() . = ..() . += GLOB.reinforced_glass_recipes -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL GLOBAL_LIST_INIT(prglass_recipes, list ( \ new/datum/stack_recipe("directional reinforced window", /obj/structure/window/reinforced/plasma/unanchored, time = 0.5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ON_SOLID_GROUND | CRAFT_CHECK_DIRECTION, category = CAT_WINDOWS), \ new/datum/stack_recipe("fulltile reinforced window", /obj/structure/window/reinforced/plasma/fulltile/unanchored, 2, time = 2 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ON_SOLID_GROUND | CRAFT_IS_FULLTILE, category = CAT_WINDOWS), \ @@ -217,7 +217,7 @@ GLOBAL_LIST_INIT(prglass_recipes, list ( \ /obj/item/stack/sheet/plasmarglass/fifty amount = 50 -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /obj/item/stack/sheet/plasmarglass/get_main_recipes() . = ..() . += GLOB.prglass_recipes @@ -248,7 +248,7 @@ GLOBAL_LIST_INIT(titaniumglass_recipes, list( /datum/armor/sheet_titaniumglass fire = 80 acid = 100 -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /obj/item/stack/sheet/titaniumglass/get_main_recipes() . = ..() . += GLOB.titaniumglass_recipes @@ -280,7 +280,7 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list( /datum/armor/sheet_plastitaniumglass fire = 80 acid = 100 -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /obj/item/stack/sheet/plastitaniumglass/get_main_recipes() . = ..() . += GLOB.plastitaniumglass_recipes diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm index a923f202159e..5318e95b839f 100644 --- a/code/game/objects/items/stacks/sheets/leather.dm +++ b/code/game/objects/items/stacks/sheets/leather.dm @@ -93,7 +93,7 @@ GLOBAL_LIST_INIT(human_recipes, list( \ /obj/item/stack/sheet/animalhide/mothroach/five amount = 5 -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL GLOBAL_LIST_INIT(gondola_recipes, list ( \ new/datum/stack_recipe("gondola mask", /obj/item/clothing/mask/gondola, 1, crafting_flags = NONE, category = CAT_CLOTHING), \ new/datum/stack_recipe("gondola suit", /obj/item/clothing/under/costume/gondola, 2, crafting_flags = NONE, category = CAT_CLOTHING), \ @@ -108,7 +108,7 @@ GLOBAL_LIST_INIT(gondola_recipes, list ( \ inhand_icon_state = null merge_type = /obj/item/stack/sheet/animalhide/gondola -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /obj/item/stack/sheet/animalhide/gondola/get_main_recipes() . = ..() . += GLOB.gondola_recipes @@ -139,7 +139,7 @@ GLOBAL_LIST_INIT(corgi_recipes, list ( \ icon_state = "sheet-monkey" inhand_icon_state = null merge_type = /obj/item/stack/sheet/animalhide/carbon/monkey -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL GLOBAL_LIST_INIT(monkey_recipes, list ( \ new/datum/stack_recipe("monkey mask", /obj/item/clothing/mask/gas/monkeymask, 1, crafting_flags = NONE, category = CAT_CLOTHING), \ new/datum/stack_recipe("monkey suit", /obj/item/clothing/suit/costume/monkeysuit, 2, crafting_flags = NONE, category = CAT_CLOTHING), \ @@ -174,7 +174,7 @@ GLOBAL_LIST_INIT(monkey_recipes, list ( \ icon_state = "sheet-xeno" inhand_icon_state = null merge_type = /obj/item/stack/sheet/animalhide/xeno -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL GLOBAL_LIST_INIT(xeno_recipes, list ( \ new/datum/stack_recipe("alien helmet", /obj/item/clothing/head/costume/xenos, 1, crafting_flags = NONE, category = CAT_CLOTHING), \ new/datum/stack_recipe("alien suit", /obj/item/clothing/suit/costume/xenos, 2, crafting_flags = NONE, category = CAT_CLOTHING), \ @@ -194,7 +194,7 @@ GLOBAL_LIST_INIT(xeno_recipes, list ( \ icon_state = "sheet-carp" inhand_icon_state = null merge_type = /obj/item/stack/sheet/animalhide/carp -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL GLOBAL_LIST_INIT(carp_recipes, list ( \ new/datum/stack_recipe("carp costume", /obj/item/clothing/suit/hooded/carp_costume, 4, crafting_flags = NONE, category = CAT_CLOTHING), \ new/datum/stack_recipe("carp mask", /obj/item/clothing/mask/gas/carp, 1, crafting_flags = NONE, category = CAT_CLOTHING), \ @@ -293,7 +293,7 @@ GLOBAL_LIST_INIT(leather_recipes, list ( \ // As bone and sinew have just a little too many recipes for this, we'll just split them up. // Sinew slapcrafting will mostly-sinew recipes, and bones will have mostly-bones recipes. -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL var/static/list/slapcraft_recipe_list = list(\ /datum/crafting_recipe/goliathcloak, /datum/crafting_recipe/skilt, /datum/crafting_recipe/drakecloak,\ ) @@ -352,7 +352,7 @@ GLOBAL_LIST_INIT(sinew_recipes, list ( \ w_class = WEIGHT_CLASS_NORMAL layer = MOB_LAYER merge_type = /obj/item/stack/sheet/animalhide/ashdrake -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /obj/item/stack/sheet/animalhide/ashdrake/Initialize(mapload, new_amount, merge, list/mat_override, mat_amt) . = ..() diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index 6cfab3eeb938..878b0830a9a9 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -24,7 +24,7 @@ Mineral Sheets */ GLOBAL_LIST_INIT(sandstone_recipes, list ( \ - /* new/datum/stack_recipe("sandstone door", /obj/structure/mineral_door/sandstone, 10, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_DOORS), \ */ // DARKPACK EDIT REMOVE + /* new/datum/stack_recipe("sandstone door", /obj/structure/mineral_door/sandstone, 10, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_DOORS), \ */ // DARKPACK EDIT REMOVAL new/datum/stack_recipe("sandstone platform", /obj/structure/platform/sandstone, 2, time = 3 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, trait_booster = TRAIT_QUICK_BUILD, trait_modifier = 0.75, category = CAT_STRUCTURE), \ new/datum/stack_recipe("Breakdown into sand", /obj/item/stack/ore/glass, 1, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ON_SOLID_GROUND | CRAFT_NO_MATERIALS, category = CAT_MISC), \ )) @@ -47,7 +47,7 @@ GLOBAL_LIST_INIT(sandstone_recipes, list ( \ material_type = /datum/material/sandstone drop_sound = SFX_STONE_DROP pickup_sound = SFX_STONE_PICKUP -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /obj/item/stack/sheet/mineral/sandstone/get_main_recipes() . = ..() . += GLOB.sandstone_recipes @@ -187,10 +187,10 @@ GLOBAL_LIST_INIT(uranium_recipes, list ( \ return TOXLOSS//dont you kids know that stuff is toxic? GLOBAL_LIST_INIT(plasma_recipes, list ( \ - /* new/datum/stack_recipe("plasma door", /obj/structure/mineral_door/transparent/plasma, 10, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_DOORS), \ */ // DARKPACK EDIT REMOVE + /* new/datum/stack_recipe("plasma door", /obj/structure/mineral_door/transparent/plasma, 10, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_DOORS), \ */ // DARKPACK EDIT REMOVAL new/datum/stack_recipe("plasma tile", /obj/item/stack/tile/mineral/plasma, 1, 4, 20, crafting_flags = NONE, category = CAT_TILES), \ )) -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /obj/item/stack/sheet/mineral/plasma/get_main_recipes() . = ..() . += GLOB.plasma_recipes @@ -220,14 +220,14 @@ GLOBAL_LIST_INIT(plasma_recipes, list ( \ walltype = /turf/closed/wall/mineral/gold GLOBAL_LIST_INIT(gold_recipes, list ( \ - /* new/datum/stack_recipe("golden door", /obj/structure/mineral_door/gold, 10, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_DOORS), \ */ // DARKPACK EDIT REMOVE + /* new/datum/stack_recipe("golden door", /obj/structure/mineral_door/gold, 10, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_DOORS), \ */ // DARKPACK EDIT REMOVAL new/datum/stack_recipe("golden platform", /obj/structure/platform/gold, 2, time = 3 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, trait_booster = TRAIT_QUICK_BUILD, trait_modifier = 0.75, category = CAT_STRUCTURE), \ new/datum/stack_recipe("gold tile", /obj/item/stack/tile/mineral/gold, 1, 4, 20, crafting_flags = NONE, category = CAT_TILES), \ new/datum/stack_recipe("blank plaque", /obj/item/plaque, 1, crafting_flags = NONE, category = CAT_FURNITURE), \ new/datum/stack_recipe("Simple Crown", /obj/item/clothing/head/costume/crown, 5, crafting_flags = NONE, category = CAT_CLOTHING), \ )) -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /obj/item/stack/sheet/mineral/gold/get_main_recipes() . = ..() . += GLOB.gold_recipes @@ -252,13 +252,13 @@ GLOBAL_LIST_INIT(gold_recipes, list ( \ walltype = /turf/closed/wall/mineral/silver GLOBAL_LIST_INIT(silver_recipes, list ( \ - /* new/datum/stack_recipe("silver door", /obj/structure/mineral_door/silver, 10, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_DOORS), \ */ // DARKPACK EDIT REMOVE + /* new/datum/stack_recipe("silver door", /obj/structure/mineral_door/silver, 10, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_DOORS), \ */ // DARKPACK EDIT REMOVAL new/datum/stack_recipe("silver platform", /obj/structure/platform/silver, 2, time = 3 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, trait_booster = TRAIT_QUICK_BUILD, trait_modifier = 0.75, category = CAT_STRUCTURE), \ new/datum/stack_recipe("silver tile", /obj/item/stack/tile/mineral/silver, 1, 4, 20, crafting_flags = NONE, category = CAT_TILES), \ )) -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /obj/item/stack/sheet/mineral/silver/get_main_recipes() . = ..() . += GLOB.silver_recipes @@ -285,7 +285,7 @@ GLOBAL_LIST_INIT(bananium_recipes, list ( \ new/datum/stack_recipe("bananium tile", /obj/item/stack/tile/mineral/bananium, 1, 4, 20, crafting_flags = NONE, category = CAT_TILES), \ )) -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /obj/item/stack/sheet/mineral/bananium/get_main_recipes() . = ..() . += GLOB.bananium_recipes @@ -317,9 +317,9 @@ GLOBAL_LIST_INIT(titanium_recipes, list ( \ new /datum/stack_recipe("Titanium tile", /obj/item/stack/tile/mineral/titanium, 1, 4, 20, crafting_flags = NONE, category = CAT_TILES), \ new/datum/stack_recipe("Titanium Platform", /obj/structure/platform/titanium, 2, time = 3 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, trait_booster = TRAIT_QUICK_BUILD, trait_modifier = 0.75, category = CAT_STRUCTURE), \ /* new /datum/stack_recipe("Shuttle seat", /obj/structure/chair/comfy/shuttle, 2, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ - new /datum/stack_recipe("Tram door assembly", /obj/structure/door_assembly/multi_tile/door_assembly_tram, 8, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_DOORS), \ */ // DARKPACK EDIT REMOVE + new /datum/stack_recipe("Tram door assembly", /obj/structure/door_assembly/multi_tile/door_assembly_tram, 8, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_DOORS), \ */ // DARKPACK EDIT REMOVAL )) -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /obj/item/stack/sheet/mineral/titanium/get_main_recipes() . = ..() . += GLOB.titanium_recipes @@ -367,7 +367,7 @@ GLOBAL_LIST_INIT(titanium_recipes, list ( \ merge_type = /obj/item/stack/sheet/mineral/plastitanium material_flags = NONE walltype = /turf/closed/wall/mineral/plastitanium -// DARKPACK EDIT REMOVE START +// DARKPACK EDIT REMOVAL START GLOBAL_LIST_INIT(plastitanium_recipes, list ( \ new/datum/stack_recipe("plastitanium tile", /obj/item/stack/tile/mineral/plastitanium, 1, 4, 20, crafting_flags = NONE, category = CAT_TILES), \ )) @@ -428,7 +428,7 @@ GLOBAL_LIST_INIT(adamantine_recipes, list( singular_name = "adamantine sheet" mats_per_unit = list(/datum/material/adamantine=SHEET_MATERIAL_AMOUNT) merge_type = /obj/item/stack/sheet/mineral/adamantine -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /obj/item/stack/sheet/mineral/adamantine/get_main_recipes() . = ..() . += GLOB.adamantine_recipes @@ -474,7 +474,7 @@ GLOBAL_LIST_INIT(adamantine_recipes, list( merge_type = /obj/item/stack/sheet/mineral/abductor material_type = /datum/material/alloy/alien walltype = /turf/closed/wall/mineral/abductor -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL GLOBAL_LIST_INIT(abductor_recipes, list ( \ new/datum/stack_recipe("alien bed", /obj/structure/bed/abductor, 2, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ new/datum/stack_recipe("alien locker", /obj/structure/closet/abductor, 2, time = 2 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ @@ -547,7 +547,7 @@ GLOBAL_LIST_INIT(metalhydrogen_recipes, list( merge_type = /obj/item/stack/sheet/mineral/metal_hydrogen armor_type = /datum/armor/metal_hydrogen_sheet -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /obj/item/stack/sheet/mineral/metal_hydrogen/get_main_recipes() . = ..() . += GLOB.metalhydrogen_recipes diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index d30af5e5bcb9..c2a8ad3a4dd7 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -521,7 +521,7 @@ GLOBAL_LIST_INIT(cloth_recipes, list ( \ /obj/item/stack/sheet/cloth/five amount = 5 -// DARKPACK EDIT REMOVE +// DARKPACK EDIT REMOVAL /obj/item/stack/sheet/durathread name = "durathread" desc = "A fabric sown from incredibly durable threads, known for its usefulness in armor production." @@ -534,7 +534,7 @@ GLOBAL_LIST_INIT(cloth_recipes, list ( \ merge_type = /obj/item/stack/sheet/durathread drop_sound = 'sound/items/handling/cloth/cloth_drop1.ogg' pickup_sound = 'sound/items/handling/cloth/cloth_pickup1.ogg' -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /obj/item/stack/sheet/durathread/Initialize(mapload) . = ..() var/static/list/slapcraft_recipe_list = list(/datum/crafting_recipe/durathread_helmet, /datum/crafting_recipe/durathread_vest) @@ -672,7 +672,7 @@ GLOBAL_LIST_INIT(cardboard_recipes, list ( \ material_type = /datum/material/cardboard pickup_sound = 'sound/items/handling/materials/cardboard_pick_up.ogg' drop_sound = 'sound/items/handling/materials/cardboard_drop.ogg' -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /obj/item/stack/sheet/cardboard/Initialize(mapload, new_amount, merge, list/mat_override, mat_amt) . = ..() var/static/list/slapcraft_recipe_list = list(/datum/crafting_recipe/cardboard_id) diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm index 02f2ebf9feb6..82e689e64cf8 100644 --- a/code/game/objects/items/storage/backpack.dm +++ b/code/game/objects/items/storage/backpack.dm @@ -48,7 +48,7 @@ w_class = WEIGHT_CLASS_BULKY resistance_flags = FIRE_PROOF item_flags = NO_MAT_REDEMPTION -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /obj/item/bag_of_holding_inert/Initialize(mapload) . = ..() var/static/list/recipes = list(/datum/crafting_recipe/boh) diff --git a/code/game/objects/items/storage/dufflebags.dm b/code/game/objects/items/storage/dufflebags.dm index ecb822fba77c..ad62356d6015 100644 --- a/code/game/objects/items/storage/dufflebags.dm +++ b/code/game/objects/items/storage/dufflebags.dm @@ -189,10 +189,10 @@ /obj/item/storage/backpack/duffelbag/sec/surgery name = "surgical duffel bag" desc = "A large duffel bag for holding extra supplies - this one has a material inlay with space for various sharp-looking tools." -//DARKPACK EDIT START - Duffelbags & Gun Bulk (We want these to give med bag icon) +// DARKPACK EDIT START - Duffelbags & Gun Bulk (We want these to give med bag icon) icon_state = "duffel-medical" inhand_icon_state = "duffel-med" -//DARKPACK EDIT END +// DARKPACK EDIT END /obj/item/storage/backpack/duffelbag/sec/surgery/PopulateContents() new /obj/item/scalpel(src) diff --git a/code/game/objects/items/tools/engineering/wirecutters.dm b/code/game/objects/items/tools/engineering/wirecutters.dm index 7e3d3d39cd53..914d4833e7b1 100644 --- a/code/game/objects/items/tools/engineering/wirecutters.dm +++ b/code/game/objects/items/tools/engineering/wirecutters.dm @@ -36,7 +36,7 @@ toolspeed = 1 armor_type = /datum/armor/item_wirecutters /// If the item should be assigned a random color - var/random_color = FALSE // DARKPACK EDIT - ORIGINAL: var/random_color = TRUE + var/random_color = FALSE // DARKPACK EDIT CHANGE - ORIGINAL: var/random_color = TRUE /// List of possible random colors var/static/list/wirecutter_colors = list( COLOR_TOOL_BLUE, diff --git a/code/game/objects/items/tools/extinguisher.dm b/code/game/objects/items/tools/extinguisher.dm index 14bff716ea97..5fb3d6984479 100644 --- a/code/game/objects/items/tools/extinguisher.dm +++ b/code/game/objects/items/tools/extinguisher.dm @@ -62,7 +62,7 @@ /datum/element/slapcrafting,\ slapcraft_recipes = slapcraft_recipe_list,\ ) - */ // DARKPACK EDIT REMOVE + */ // DARKPACK EDIT REMOVAL register_context() /obj/item/extinguisher/add_context(atom/source, list/context, obj/item/held_item, mob/user) diff --git a/code/game/objects/items/tools/medical/cane.dm b/code/game/objects/items/tools/medical/cane.dm index 132f03a9b378..01945568187f 100644 --- a/code/game/objects/items/tools/medical/cane.dm +++ b/code/game/objects/items/tools/medical/cane.dm @@ -13,6 +13,7 @@ custom_materials = list(/datum/material/iron= SMALL_MATERIAL_AMOUNT * 0.5) attack_verb_continuous = list("bludgeons", "whacks", "disciplines", "thrashes") attack_verb_simple = list("bludgeon", "whack", "discipline", "thrash") + custom_price = 50 // DARKPACK EDIT ADD - ECONOMY /obj/item/cane/examine(mob/user, thats) . = ..() diff --git a/code/game/objects/items/weaponry/shields.dm b/code/game/objects/items/weaponry/shields.dm index 8a102cdfccf1..167480f4467b 100644 --- a/code/game/objects/items/weaponry/shields.dm +++ b/code/game/objects/items/weaponry/shields.dm @@ -178,7 +178,7 @@ /obj/item/shield/riot/Initialize(mapload) . = ..() - /* var/static/list/slapcraft_recipe_list = list(/datum/crafting_recipe/strobeshield) // DARKPACK EDIT REMOVE + /* var/static/list/slapcraft_recipe_list = list(/datum/crafting_recipe/strobeshield) // DARKPACK EDIT REMOVAL AddElement( /datum/element/slapcrafting,\ diff --git a/code/game/objects/structures/shower.dm b/code/game/objects/structures/shower.dm index 4b8bc1cb1e51..4a944034ea01 100644 --- a/code/game/objects/structures/shower.dm +++ b/code/game/objects/structures/shower.dm @@ -48,7 +48,7 @@ GLOBAL_LIST_INIT(shower_mode_descriptions, list( ///How much reagent capacity should the shower begin with when built. var/reagent_capacity = 200 ///How many units the shower refills every second. - var/refill_rate = 50 // DARKPACK EDIT, ORIGINAL: var/reclaim_rate = 0.5 + var/refill_rate = 50 // DARKPACK EDIT CHANGE - ORIGINAL: var/reclaim_rate = 0.5 ///Does the shower have a water recycler to recollect its water supply? var/has_water_reclaimer = TRUE ///Which mode the shower is operating in. diff --git a/code/game/objects/structures/water_structures/sink.dm b/code/game/objects/structures/water_structures/sink.dm index 92f698f44532..511a898d88d6 100644 --- a/code/game/objects/structures/water_structures/sink.dm +++ b/code/game/objects/structures/water_structures/sink.dm @@ -19,7 +19,7 @@ ///Does the sink have a water recycler to recollect its water supply? var/has_water_reclaimer = TRUE ///Units of water to reclaim per second - var/reclaim_rate = 50 // DARKPACK EDIT, ORIGINAL: var/reclaim_rate = 0.5 + var/reclaim_rate = 50 // DARKPACK EDIT CHANGE - ORIGINAL: var/reclaim_rate = 0.5 MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sink, (-14)) diff --git a/code/game/objects/structures/water_structures/toilet.dm b/code/game/objects/structures/water_structures/toilet.dm index 956e09dc6fcc..e54d8e41cfec 100644 --- a/code/game/objects/structures/water_structures/toilet.dm +++ b/code/game/objects/structures/water_structures/toilet.dm @@ -25,7 +25,7 @@ /// Does the toilet have a water recycler to recollect its water supply? var/has_water_reclaimer = TRUE /// Units of water to reclaim per second - var/reclaim_rate = 50 // DARKPACK EDIT, ORIGINAL: var/reclaim_rate = 0.5 + var/reclaim_rate = 50 // DARKPACK EDIT CHANGE - ORIGINAL: var/reclaim_rate = 0.5 /// What reagent does the toilet flush with var/reagent_id = /datum/reagent/water /// How much reagent can the cistern contain diff --git a/code/game/say.dm b/code/game/say.dm index 698a03aa3ab1..739e95f9c1ed 100644 --- a/code/game/say.dm +++ b/code/game/say.dm @@ -76,7 +76,7 @@ GLOBAL_LIST_INIT(freqtospan, list( /// Called when this movable hears a message from a source. /// Returns TRUE if the message was received and understood. -/atom/movable/proc/Hear(atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range=0, source) // DARKPACK EDIT, ORIGINAL: /atom/movable/proc/Hear(atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range=0) +/atom/movable/proc/Hear(atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range=0, source) // DARKPACK EDIT CHANGE - ORIGINAL: /atom/movable/proc/Hear(atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range=0) SEND_SIGNAL(src, COMSIG_MOVABLE_HEAR, args) return TRUE @@ -147,7 +147,7 @@ GLOBAL_LIST_INIT(freqtospan, list( if (!CONFIG_GET(flag/tts_no_whisper) || (CONFIG_GET(flag/tts_no_whisper) && !message_mods[WHISPER_MODE])) INVOKE_ASYNC(SStts, TYPE_PROC_REF(/datum/controller/subsystem/tts, queue_tts_message), src, html_decode(tts_message_to_use), message_language, voice, filter.Join(","), listened, message_range = range, pitch = pitch) -/atom/movable/proc/compose_message(atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), visible_name = FALSE, source) // DARKPACK EDIT, ORIGINAL: /atom/movable/proc/compose_message(atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), visible_name = FALSE) +/atom/movable/proc/compose_message(atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), visible_name = FALSE, source) // DARKPACK EDIT CHANGE - ORIGINAL: /atom/movable/proc/compose_message(atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), visible_name = FALSE) //This proc uses [] because it is faster than continually appending strings. Thanks BYOND. //Basic span var/freq_color = get_radio_color(radio_freq, radio_freq_color) @@ -196,7 +196,7 @@ GLOBAL_LIST_INIT(freqtospan, list( var/obj/item/radio/radio = source // DARKPACK EDIT ADD var/radio_id = radio?.radio_id ? "\[[radio?.radio_id]\] " : null // DARKPACK EDIT ADD - return "[spanpart1][spanpart2][freqpart][radio_id][languageicon][compose_track_href(speaker, namepart)][namepart][compose_job(speaker, message_language, raw_message, radio_freq)][endspanpart][messagepart]" // DARKPACK EDIT, ORIGINAL: return "[spanpart1][spanpart2][freqpart][languageicon][compose_track_href(speaker, namepart)][namepart][compose_job(speaker, message_language, raw_message, radio_freq)][endspanpart][messagepart]" + return "[spanpart1][spanpart2][freqpart][radio_id][languageicon][compose_track_href(speaker, namepart)][namepart][compose_job(speaker, message_language, raw_message, radio_freq)][endspanpart][messagepart]" // DARKPACK EDIT CHANGE - ORIGINAL: return "[spanpart1][spanpart2][freqpart][languageicon][compose_track_href(speaker, namepart)][namepart][compose_job(speaker, message_language, raw_message, radio_freq)][endspanpart][messagepart]" /atom/movable/proc/compose_track_href(atom/movable/speaker, message_langs, raw_message, radio_freq) return "" diff --git a/code/game/sound/sound.dm b/code/game/sound/sound.dm index 5cea9ea1066e..f8af564b25a3 100644 --- a/code/game/sound/sound.dm +++ b/code/game/sound/sound.dm @@ -32,7 +32,7 @@ if (!turf_source) return - //DARKPACK EDIT START - Quietus + // DARKPACK EDIT START - POWERS - (Quietus) // Check if the source or its loc is silenced if(HAS_TRAIT(source, TRAIT_SILENCED)) return @@ -42,7 +42,7 @@ return //if(isturf(source)) because unarmed attacks playsound(turf) rather than playsound(mob) or whatever as others do //what about grenades and bullet impact noises? - //DARKPACK EDIT END + // DARKPACK EDIT END //allocate a channel if necessary now so its the same for everyone channel = channel || SSsounds.random_available_channel() diff --git a/code/modules/admin/verbs/ert.dm b/code/modules/admin/verbs/ert.dm index 0f1147cdc283..c48ea6397928 100644 --- a/code/modules/admin/verbs/ert.dm +++ b/code/modules/admin/verbs/ert.dm @@ -82,7 +82,7 @@ var/list/settings = list( "preview_callback" = CALLBACK(src, PROC_REF(makeERTPreviewIcon)), "mainsettings" = list( - "template" = list("desc" = "Template", "callback" = CALLBACK(src, PROC_REF(makeERTTemplateModified)), "type" = "datum", "path" = "/datum/ert/darkpack", "subtypesonly" = TRUE, "value" = ertemplate.type), // DARKPACK EDIT CHANGE - Original : "template" = list("desc" = "Template", "callback" = CALLBACK(src, PROC_REF(makeERTTemplateModified)), "type" = "datum", "path" = "/datum/ert", "subtypesonly" = TRUE, "value" = ertemplate.type), + "template" = list("desc" = "Template", "callback" = CALLBACK(src, PROC_REF(makeERTTemplateModified)), "type" = "datum", "path" = "/datum/ert/darkpack", "subtypesonly" = TRUE, "value" = ertemplate.type), // DARKPACK EDIT CHANGE - ORIGINAL: "template" = list("desc" = "Template", "callback" = CALLBACK(src, PROC_REF(makeERTTemplateModified)), "type" = "datum", "path" = "/datum/ert", "subtypesonly" = TRUE, "value" = ertemplate.type), "teamsize" = list("desc" = "Team Size", "type" = "number", "value" = ertemplate.teamsize), "mission" = list("desc" = "Mission", "type" = "string", "value" = ertemplate.mission), "polldesc" = list("desc" = "Ghost poll description", "type" = "string", "value" = ertemplate.polldesc), diff --git a/code/modules/antagonists/changeling/changeling.dm b/code/modules/antagonists/changeling/changeling.dm index 1fdf17ef8d7d..4d5099f40a3e 100644 --- a/code/modules/antagonists/changeling/changeling.dm +++ b/code/modules/antagonists/changeling/changeling.dm @@ -551,6 +551,12 @@ new_profile.underwear_color = target.underwear_color new_profile.undershirt = target.undershirt new_profile.socks = target.socks + // DARKPACK EDIT ADD START + new_profile.blooper = target.blooper + new_profile.blooper_speed = target.blooper_speed + new_profile.blooper_pitch = target.blooper_pitch + new_profile.blooper_pitch_range = target.blooper_pitch_range + // DARKPACK EDIT ADD END // Grab skillchips they have new_profile.skillchips = target.clone_skillchip_list(TRUE) @@ -780,6 +786,12 @@ user.mind?.set_level(/datum/skill/athletics, chosen_profile.athletics_level, silent = TRUE) user.voice = chosen_profile.voice user.voice_filter = chosen_profile.voice_filter + // DARKPACK EDIT ADDITION START + user.blooper = chosen_profile.blooper + user.blooper_speed = chosen_profile.blooper_speed + user.blooper_pitch = chosen_profile.blooper_pitch + user.blooper_pitch_range = chosen_profile.blooper_pitch_range + // DARKPACK EDIT ADDITION END chosen_dna.copy_dna(user.dna, COPY_DNA_SE|COPY_DNA_SPECIES) @@ -970,6 +982,12 @@ new_profile.quirks = quirks.Copy() new_profile.voice = voice new_profile.voice_filter = voice_filter + // DARKPACK EDIT ADDITION START + new_profile.blooper = blooper + new_profile.blooper_speed = blooper_speed + new_profile.blooper_pitch = blooper_pitch + new_profile.blooper_pitch_range = blooper_pitch_range + // DARKPACK EDIT ADDITION END /datum/antagonist/changeling/roundend_report() var/list/parts = list() diff --git a/code/modules/antagonists/ert/ert.dm b/code/modules/antagonists/ert/ert.dm index baa59a14dfd1..fc08ebe64cf9 100644 --- a/code/modules/antagonists/ert/ert.dm +++ b/code/modules/antagonists/ert/ert.dm @@ -251,7 +251,7 @@ to_chat(owner, "You are the [name].") - var/missiondesc = "Your squad is being sent on a mission to [station_name()]." // DARKPACK EDIT CHANGE - Original : var/missiondesc = "Your squad is being sent on a mission to [station_name()] by Nanotrasen's Security Division." + var/missiondesc = "Your squad is being sent on a mission to [station_name()]." // DARKPACK EDIT CHANGE - ORIGINAL: var/missiondesc = "Your squad is being sent on a mission to [station_name()] by Nanotrasen's Security Division." if(leader) //If Squad Leader missiondesc += " Lead your squad to ensure the completion of the mission. Board the shuttle when your team is ready." else diff --git a/code/modules/antagonists/nukeop/equipment/nuclear_bomb/beer_nuke.dm b/code/modules/antagonists/nukeop/equipment/nuclear_bomb/beer_nuke.dm index 66798ae798c6..73915938adac 100644 --- a/code/modules/antagonists/nukeop/equipment/nuclear_bomb/beer_nuke.dm +++ b/code/modules/antagonists/nukeop/equipment/nuclear_bomb/beer_nuke.dm @@ -17,7 +17,10 @@ overflow_control = locate(/datum/round_event_control/scrubber_overflow/every_vent) in SSevents.control /obj/machinery/nuclearbomb/beer/Destroy() - UnregisterSignal(overflow_control, COMSIG_CREATED_ROUND_EVENT) + // DARKPACK EDIT CHANGE - this was causing runtimes as overflow_control is null if the associated event is not in SSevents + if(!isnull(overflow_control)) + UnregisterSignal(overflow_control, COMSIG_CREATED_ROUND_EVENT) + // DARKPACK EDIT CHANGE END . = ..() /obj/machinery/nuclearbomb/beer/examine(mob/user) diff --git a/code/modules/assembly/voice.dm b/code/modules/assembly/voice.dm index 7d3acb19f169..e52de6ef3122 100644 --- a/code/modules/assembly/voice.dm +++ b/code/modules/assembly/voice.dm @@ -33,7 +33,7 @@ . = ..() . += span_notice("Use a multitool to swap between \"inclusive\", \"exclusive\", \"recognizer\", and \"voice sensor\" mode.") -/obj/item/assembly/voice/Hear(atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range, source) // DARKPACK EDIT, ORIGINAL: /obj/item/assembly/voice/Hear(atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range) +/obj/item/assembly/voice/Hear(atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range, source) // DARKPACK EDIT CHANGE - ORIGINAL: /obj/item/assembly/voice/Hear(atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range) . = ..() if(message_mods[WHISPER_MODE] || message_mods[MODE_RELAY]) //Too quiet lad return FALSE diff --git a/code/modules/cargo/expressconsole.dm b/code/modules/cargo/expressconsole.dm index 2ee0f3eee2a8..94c732c8702c 100644 --- a/code/modules/cargo/expressconsole.dm +++ b/code/modules/cargo/expressconsole.dm @@ -1,6 +1,22 @@ #define EXPRESS_EMAG_DISCOUNT 0.72 #define BEACON_PRINT_COOLDOWN 10 SECONDS +// DARKPACK EDIT ADD START +GLOBAL_LIST_EMPTY(cargo_landing_spots) +/obj/effect/abstract/cargo_landing_spot + icon = 'icons/effects/landmarks_static.dmi' + icon_state = "x2" + invisibility = INVISIBILITY_ABSTRACT + +/obj/effect/abstract/cargo_landing_spot/Initialize(mapload) + . = ..() + GLOB.cargo_landing_spots += src + +/obj/effect/abstract/cargo_landing_spot/Destroy(force) + . = ..() + GLOB.cargo_landing_spots -= src +// DARKPACK EDIT ADD END + /obj/machinery/computer/cargo/express name = "express supply console" desc = "This console allows the user to purchase a package \ @@ -36,7 +52,6 @@ if (isnull(landingzone)) WARNING("[src] couldnt find a Quartermaster/Storage (aka cargobay) area on the station, and as such it has set the supplypod landingzone to the area it resides in.") landingzone = get_area(src) - RegisterSignal(src, COMSIG_CLICK_ALT, PROC_REF(withdraw_money)) // DARKPACK EDIT ADD - Putting cash into the Cargo console /obj/machinery/computer/cargo/express/on_construction(mob/user) . = ..() @@ -73,7 +88,7 @@ to_chat(user, span_alert("[src] is already linked to [beacon].")) return ITEM_INTERACT_FAILURE - // DARKPACK EDIT ADD START - Putting cash into the cargo console + // DARKPACK EDIT ADD START - (Putting cash into the cargo console) if(istype(tool, /obj/item/stack/dollar)) var/datum/bank_account/account = SSeconomy.get_dep_account(cargo_account) if(isnull(account)) @@ -81,15 +96,15 @@ var/obj/item/stack/dollar/cash = tool var/amount = cash.amount account.adjust_money(amount) - to_chat(user, span_notice("You deposit [amount] dollar\s into the cargo account.")) + to_chat(user, span_notice("You deposit [amount] [MONEY_NAME_AUTOPURAL(amount)] into the cargo account.")) qdel(cash) return ITEM_INTERACT_SUCCESS - // DARKPACK EDIT ADD END - Putting cash into the cargo console + // DARKPACK EDIT ADD END return NONE // DARKPACK EDIT ADD START - (Putting cash into the cargo console) -/obj/machinery/computer/cargo/express/proc/withdraw_money(mob/living/user) +/obj/machinery/computer/cargo/express/click_alt(mob/user) var/datum/bank_account/account = SSeconomy.get_dep_account(cargo_account) if(isnull(account)) return @@ -103,7 +118,7 @@ var/stack_amount = min(amount, 1000) new /obj/item/stack/dollar(T, stack_amount) amount -= stack_amount - to_chat(user, span_notice("You withdraw [account.account_balance] dollar\s from the cargo account.")) + to_chat(user, span_notice("You withdraw [account.account_balance] [MONEY_NAME_AUTOPURAL(amount)] from the cargo account.")) // DRAKPACK EDIT ADD END /obj/machinery/computer/cargo/express/emag_act(mob/user, obj/item/card/emag/emag_card) @@ -243,14 +258,23 @@ var/list/prefered_turfs = list() // DARKPACK EDIT ADD if (!istype(beacon) || !using_beacon || (obj_flags & EMAGGED)) empty_turfs = list() - for(var/turf/open/open_turf in landingzone.get_turfs_from_all_zlevels()) // DARKPACK EDIT CHANGE - (removes floor so it can include DIRT) + // DARKPACK EDIT ADD START + for(var/obj/effect/abstract/cargo_landing_spot/spot in GLOB.cargo_landing_spots) + var/turf/open/open_turf = get_turf(spot) + if(!astype(open_turf)) + stack_trace("[spot] is not in an open turf. Turf is [open_turf]") if(!open_turf.is_blocked_turf()) - empty_turfs += open_turf - // DARKPACK EDIT ADD START - var/obj/effect/decal/pallet/cool_spot = locate() in open_turf - if(cool_spot) - prefered_turfs += open_turf - // DARKPACK EDIT ADD END + empty_turfs |= open_turf + // DARKPACK EDIT ADD END + // DARKPACK EDIT CHANGE START + if(!length(empty_turfs)) // We ran out of hand-mapped markers, resort to pallets and the ground, but we cannot ensure super sane spawns + for(var/turf/open/open_turf in landingzone.get_turfs_from_all_zlevels()) + if(!open_turf.is_blocked_turf()) + empty_turfs |= open_turf + var/obj/effect/decal/pallet/cool_spot = locate() in open_turf + if(cool_spot) + prefered_turfs += open_turf + // DARKPACK EDIT CHANGE END if (!length(empty_turfs)) return diff --git a/code/modules/client/preferences/middleware/jobs.dm b/code/modules/client/preferences/middleware/jobs.dm index 14c86046c5ce..3a7083710830 100644 --- a/code/modules/client/preferences/middleware/jobs.dm +++ b/code/modules/client/preferences/middleware/jobs.dm @@ -18,8 +18,10 @@ if (isnull(job)) return FALSE + /* DARKPACK EDIT REMOVAL - Factions - note: why do these lines even exist? if (job.faction != FACTION_CITY) // DARKPACK EDIT, ORGINAL: if (job.faction != FACTION_STATION) return FALSE + */ if (!preferences.set_job_preference_level(job, level)) return FALSE @@ -28,7 +30,7 @@ return TRUE -// DARKPACK EDIT ADDITION START - ALTERNATIVE_JOB_TITLES +// DARKPACK EDIT ADD START - ALTERNATIVE_JOB_TITLES /datum/preference_middleware/jobs/proc/set_job_title(list/params, mob/user) var/job_title = params["job"] var/new_job_title = params["new_title"] @@ -44,7 +46,7 @@ preferences.alt_job_titles[job_title] = new_job_title return TRUE -// DARKPACK EDIT ADDITION END +// DARKPACK EDIT ADD END /datum/preference_middleware/jobs/get_constant_data() var/list/data = list() diff --git a/code/modules/client/preferences/middleware/quirks.dm b/code/modules/client/preferences/middleware/quirks.dm index 27040f88eed5..9a2e1f866952 100644 --- a/code/modules/client/preferences/middleware/quirks.dm +++ b/code/modules/client/preferences/middleware/quirks.dm @@ -62,9 +62,9 @@ data["default_quirk_balance"] = CONFIG_GET(number/default_quirk_points) data["species_disallowed_quirks"] = get_species_compatibility() data["splat_disallowed_quirks"] = get_splat_compatibility() // DARKPACK EDIT ADD - SPLATS - data["quirk_balance"] = get_quirk_balance() // DARKPACK EDIT ADD - MERITS/FLAWS - data["freebie_points"] = get_freebie_points() // DARKPACK EDIT ADD - MERITS/FLAWS - data["clan_disallowed_quirks"] = get_clan_compatibility() // DARKPACK EDIT ADD - MERITS/FLAWS + data["quirk_balance"] = get_quirk_balance() // DARKPACK EDIT ADD - MERITS_FLAWS + data["freebie_points"] = get_freebie_points() // DARKPACK EDIT ADD - MERITS_FLAWS + data["clan_disallowed_quirks"] = get_clan_compatibility() // DARKPACK EDIT ADD - MERITS_FLAWS return data @@ -76,8 +76,8 @@ data["selected_quirks"] = get_selected_quirks() data["species_disallowed_quirks"] = get_species_compatibility() data["splat_disallowed_quirks"] = get_splat_compatibility() // DARKPACK EDIT ADD - SPLATS - data["freebie_points"] = get_freebie_points() // DARKPACK EDIT ADD - MERITS/FLAWS - data["clan_disallowed_quirks"] = get_clan_compatibility() // DARKPACK EDIT ADD - MERITS/FLAWS + data["freebie_points"] = get_freebie_points() // DARKPACK EDIT ADD - MERITS_FLAWS + data["clan_disallowed_quirks"] = get_clan_compatibility() // DARKPACK EDIT ADD - MERITS_FLAWS return data @@ -117,11 +117,11 @@ /datum/preference_middleware/quirks/proc/give_quirk(list/params, mob/user) var/quirk_name = params["quirk"] - // DARKPACK EDIT ADD - MERITS/FLAWS + // DARKPACK EDIT ADD - MERITS_FLAWS var/datum/st_stat/freebie/freebie_points = preferences.preference_storyteller_stats[STAT_FREEBIE_POINTS] var/datum/quirk/quirk_type = SSquirks.quirks[quirk_name] freebie_points.decrease_points(quirk_type.value) - // DARKPACK EDIT END - MERITS/FLAWS + // DARKPACK EDIT END - MERITS_FLAWS preferences.validate_quirks() var/list/new_quirks = preferences.all_quirks | quirk_name if (SSquirks.filter_invalid_quirks(new_quirks) != new_quirks) @@ -139,11 +139,11 @@ /datum/preference_middleware/quirks/proc/remove_quirk(list/params, mob/user) var/quirk_name = params["quirk"] - // DARKPACK EDIT ADD - MERITS/FLAWS + // DARKPACK EDIT ADD - MERITS_FLAWS var/datum/st_stat/freebie/freebie_points = preferences.preference_storyteller_stats[STAT_FREEBIE_POINTS] var/datum/quirk/quirk_type = SSquirks.quirks[quirk_name] freebie_points.increase_points(quirk_type.value) - // DARKPACK EDIT END - MERITS/FLAWS + // DARKPACK EDIT END - MERITS_FLAWS var/list/new_quirks = preferences.all_quirks - quirk_name if ( \ !(quirk_name in preferences.all_quirks) \ @@ -169,7 +169,7 @@ return selected_quirks -//DARKPACK EDIT ADD - MERITS/FLAWS +// DARKPACK EDIT ADD - MERITS_FLAWS /datum/preference_middleware/quirks/proc/get_freebie_points() var/datum/st_stat/freebie/freebie_stat = preferences.preference_storyteller_stats[STAT_FREEBIE_POINTS] @@ -211,4 +211,4 @@ return clan_blacklist -//DARKPACK EDIT END - MERITS/FLAWS +// DARKPACK EDIT END - MERITS_FLAWS diff --git a/code/modules/client/preferences/names.dm b/code/modules/client/preferences/names.dm index fc03311847d8..338fc17c9ca0 100644 --- a/code/modules/client/preferences/names.dm +++ b/code/modules/client/preferences/names.dm @@ -46,7 +46,7 @@ /datum/preference/name/real_name/apply_to_human(mob/living/carbon/human/target, value) target.real_name = value - target.update_visible_name() // DARKPACK EDIT, ORIGINAL: target.name = value + target.update_visible_name() // DARKPACK EDIT CHANGE - ORIGINAL: target.name = value target.log_mob_tag("TAG: [target.tag] RENAMED: [key_name(target)]") /datum/preference/name/real_name/create_informed_default_value(datum/preferences/preferences) diff --git a/code/modules/client/preferences/pda.dm b/code/modules/client/preferences/pda.dm index 1cdae7ee4be1..58db844d3b34 100644 --- a/code/modules/client/preferences/pda.dm +++ b/code/modules/client/preferences/pda.dm @@ -5,7 +5,7 @@ */ /datum/preference/text/pda_ringtone savefile_key = "pda_ringtone" - category = null // DARKPACK EDIT CHANGE - Original : category = PREFERENCE_CATEGORY_NON_CONTEXTUAL + category = null // DARKPACK EDIT CHANGE - ORIGINAL: category = PREFERENCE_CATEGORY_NON_CONTEXTUAL savefile_identifier = PREFERENCE_CHARACTER maximum_value_length = MESSENGER_RINGTONE_MAX_LENGTH should_update_preview = FALSE @@ -23,7 +23,7 @@ */ /datum/preference/choiced/pda_theme savefile_key = "pda_theme" - category = null // DARKPACK EDIT CHANGE - Original : category = PREFERENCE_CATEGORY_NON_CONTEXTUAL + category = null // DARKPACK EDIT CHANGE - ORIGINAL: category = PREFERENCE_CATEGORY_NON_CONTEXTUAL savefile_identifier = PREFERENCE_CHARACTER should_update_preview = FALSE diff --git a/code/modules/client/preferences/persistent_scars.dm b/code/modules/client/preferences/persistent_scars.dm index 60a4343a687a..e80c6cc7c39f 100644 --- a/code/modules/client/preferences/persistent_scars.dm +++ b/code/modules/client/preferences/persistent_scars.dm @@ -1,5 +1,5 @@ /datum/preference/toggle/persistent_scars - category = PREFERENCE_CATEGORY_SECONDARY_FEATURES // DARKPACK EDIT, ORIGINAL: category = PREFERENCE_CATEGORY_NON_CONTEXTUAL + category = PREFERENCE_CATEGORY_SECONDARY_FEATURES // DARKPACK EDIT CHANGE - ORIGINAL: category = PREFERENCE_CATEGORY_NON_CONTEXTUAL savefile_key = "persistent_scars" savefile_identifier = PREFERENCE_CHARACTER should_update_preview = FALSE diff --git a/code/modules/client/preferences/security_department.dm b/code/modules/client/preferences/security_department.dm index 882262a7062e..97bd71b69f72 100644 --- a/code/modules/client/preferences/security_department.dm +++ b/code/modules/client/preferences/security_department.dm @@ -1,6 +1,6 @@ /// Which department to put security officers in, when the config is enabled /datum/preference/choiced/security_department - category = null // DARKPACK EDIT CHANGE - Original : category = PREFERENCE_CATEGORY_NON_CONTEXTUAL + category = null // DARKPACK EDIT CHANGE - ORIGINAL: category = PREFERENCE_CATEGORY_NON_CONTEXTUAL can_randomize = FALSE savefile_identifier = PREFERENCE_CHARACTER savefile_key = "prefered_security_department" diff --git a/code/modules/client/preferences/silicon_gender.dm b/code/modules/client/preferences/silicon_gender.dm index 12ce150b260c..63b49c84927b 100644 --- a/code/modules/client/preferences/silicon_gender.dm +++ b/code/modules/client/preferences/silicon_gender.dm @@ -4,7 +4,7 @@ #define SILICON_NEUTER "It/Its" /datum/preference/choiced/silicon_gender - category = null // DARKPACK EDIT CHANGE - Original : category = PREFERENCE_CATEGORY_NON_CONTEXTUAL + category = null // DARKPACK EDIT CHANGE - ORIGINAL: category = PREFERENCE_CATEGORY_NON_CONTEXTUAL savefile_identifier = PREFERENCE_CHARACTER savefile_key = "silicon_gender" should_update_preview = FALSE diff --git a/code/modules/client/preferences/uplink_location.dm b/code/modules/client/preferences/uplink_location.dm index 4c9a90a2df24..e545a2f005a2 100644 --- a/code/modules/client/preferences/uplink_location.dm +++ b/code/modules/client/preferences/uplink_location.dm @@ -1,5 +1,5 @@ /datum/preference/choiced/uplink_location - category = null //DARKPACK EDIT CHANGE - Original: category = PREFERENCE_CATEGORY_NON_CONTEXTUAL + category = null // DARKPACK EDIT CHANGE - ORIGINAL: category = PREFERENCE_CATEGORY_NON_CONTEXTUAL savefile_identifier = PREFERENCE_CHARACTER savefile_key = "uplink_loc" can_randomize = FALSE diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index b6682c49cfcd..cd4308485e53 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -386,7 +386,7 @@ tint = 1 glass_colour_type = /datum/client_colour/glass_colour/gray dog_fashion = /datum/dog_fashion/head -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /obj/item/clothing/glasses/sunglasses/Initialize(mapload) . = ..() add_glasses_slapcraft_component() @@ -412,7 +412,7 @@ clothing_traits = list(TRAIT_REAGENT_SCANNER, TRAIT_RESEARCH_SCANNER) custom_materials = list(/datum/material/glass = SHEET_MATERIAL_AMOUNT * 0.55, /datum/material/iron = SMALL_MATERIAL_AMOUNT / 2) -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /obj/item/clothing/glasses/sunglasses/chemical/add_glasses_slapcraft_component() var/static/list/slapcraft_recipe_list = list(/datum/crafting_recipe/scienceglassesremoval) diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index 7a594a969d29..ae19ca8d3ec4 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -104,7 +104,7 @@ glass_colour_type = /datum/client_colour/glass_colour/blue custom_materials = list(/datum/material/glass = SHEET_MATERIAL_AMOUNT * 0.55, /datum/material/iron = SMALL_MATERIAL_AMOUNT / 2) -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /obj/item/clothing/glasses/hud/health/sunglasses/Initialize(mapload) . = ..() var/static/list/slapcraft_recipe_list = list(/datum/crafting_recipe/hudsunmedremoval) @@ -148,7 +148,7 @@ tint = 1 custom_materials = list(/datum/material/glass = SHEET_MATERIAL_AMOUNT * 0.55, /datum/material/iron = SMALL_MATERIAL_AMOUNT / 2) -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /obj/item/clothing/glasses/hud/diagnostic/sunglasses/Initialize(mapload) . = ..() var/static/list/slapcraft_recipe_list = list(/datum/crafting_recipe/hudsundiagremoval) @@ -194,7 +194,7 @@ glass_colour_type = /datum/client_colour/glass_colour/darkred custom_materials = list(/datum/material/glass = SHEET_MATERIAL_AMOUNT * 0.55, /datum/material/iron = SMALL_MATERIAL_AMOUNT / 2) -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /obj/item/clothing/glasses/hud/security/sunglasses/Initialize(mapload) . = ..() var/static/list/slapcraft_recipe_list = list(/datum/crafting_recipe/hudsunsecremoval) diff --git a/code/modules/clothing/gloves/boxing.dm b/code/modules/clothing/gloves/boxing.dm index 64d4217d4804..fe1335ccfc85 100644 --- a/code/modules/clothing/gloves/boxing.dm +++ b/code/modules/clothing/gloves/boxing.dm @@ -13,7 +13,7 @@ var/extrapower = FALSE /obj/item/clothing/gloves/boxing/Initialize(mapload) - . = ..()/* // DARKPACK EDIT REMOVE + . = ..()/* // DARKPACK EDIT REMOVAL var/static/list/slapcraft_recipe_list = list(/datum/crafting_recipe/extendohand_l, /datum/crafting_recipe/extendohand_r) AddElement( diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm index da42221a61d9..3dc3491f1a9f 100644 --- a/code/modules/clothing/gloves/color.dm +++ b/code/modules/clothing/gloves/color.dm @@ -9,7 +9,7 @@ max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT resistance_flags = NONE cut_type = /obj/item/clothing/gloves/fingerless -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /obj/item/clothing/gloves/color/black/Initialize(mapload) . = ..() var/static/list/slapcraft_recipe_list = list(/datum/crafting_recipe/radio_containing/radiogloves) @@ -44,7 +44,7 @@ /obj/item/clothing/gloves/fingerless/Initialize(mapload) . = ..() AddElement(/datum/element/adjust_fishing_difficulty, -4) - /* // DARKPACK EDIT REMOVE + /* // DARKPACK EDIT REMOVAL var/static/list/slapcraft_recipe_list = list(/datum/crafting_recipe/gripperoffbrand) AddElement( diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index fdeca9b30389..fc65e2f2e63c 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -301,7 +301,7 @@ var/obj/item/found_item = items_by_regex[found_regex] . += span_notice("[icon2html(found_item, user)] You can remove [found_item] by saying \"[prefix] [found_phrase]\"!") -/obj/item/clothing/head/fedora/inspector_hat/Hear(atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range, source) // DARKPACK EDIT, ORIGINAL: /obj/item/clothing/head/fedora/inspector_hat/Hear(atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range) +/obj/item/clothing/head/fedora/inspector_hat/Hear(atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range, source) // DARKPACK EDIT CHANGE - ORIGINAL: /obj/item/clothing/head/fedora/inspector_hat/Hear(atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range) . = ..() var/mob/living/carbon/wearer = loc if(!istype(wearer) || speaker != wearer) //if we are worn diff --git a/code/modules/detectivework/detective_scanner_data/detective_scanner_log_entry.dm b/code/modules/detectivework/detective_scanner_data/detective_scanner_log_entry.dm index 5f0db12b7365..338b5d76b20e 100644 --- a/code/modules/detectivework/detective_scanner_data/detective_scanner_log_entry.dm +++ b/code/modules/detectivework/detective_scanner_data/detective_scanner_log_entry.dm @@ -51,7 +51,7 @@ /// Called in `/obj/item/detective_scanner/proc/print_report()` /datum/detective_scanner_log/proc/generate_report_text() var/list/report_text = list() - report_text += "

[capitalize(scan_target)] scan

" + (scan_time ? "

at [scan_time]

" : null) // DARKPACK EDIT, ORIGINAL: report_text += "

[capitalize(scan_target)] scan at [scan_time]

" + report_text += "

[capitalize(scan_target)] scan

" + (scan_time ? "

at [scan_time]

" : null) // DARKPACK EDIT CHANGE - ORIGINAL: report_text += "

[capitalize(scan_target)] scan at [scan_time]

" if(!length(data_entries)) report_text += "No forensic traces found." else diff --git a/code/modules/events/_event.dm b/code/modules/events/_event.dm index 76fe9d365490..98b7e92c5180 100644 --- a/code/modules/events/_event.dm +++ b/code/modules/events/_event.dm @@ -38,6 +38,8 @@ /// Flags dictating whether this event should be run on certain kinds of map var/map_flags = NONE + var/darkpack_allowed = FALSE // DARKPACK EDIT ADD - EVENTS + /datum/round_event_control/New() if(!length(admin_setup)) return diff --git a/code/modules/food_and_drinks/machinery/icecream_vat.dm b/code/modules/food_and_drinks/machinery/icecream_vat.dm index 6e20c2a50d4b..4c6515b48ef4 100644 --- a/code/modules/food_and_drinks/machinery/icecream_vat.dm +++ b/code/modules/food_and_drinks/machinery/icecream_vat.dm @@ -32,9 +32,9 @@ ///List of all reagenets the icecream vat will spawn with, if preinstall_reagents is TRUE. var/static/list/icecream_vat_reagents = list( /datum/reagent/consumable/milk = 6, -// /datum/reagent/consumable/korta_milk = 6, // DARKPACK EDIT REMOVE +// /datum/reagent/consumable/korta_milk = 6, // DARKPACK EDIT REMOVAL /datum/reagent/consumable/flour = 6, -// /datum/reagent/consumable/korta_flour = 6, // DARKPACK EDIT REMOVE +// /datum/reagent/consumable/korta_flour = 6, // DARKPACK EDIT REMOVAL /datum/reagent/consumable/sugar = 6, /datum/reagent/consumable/ice = 6, /datum/reagent/consumable/coco = 6, diff --git a/code/modules/food_and_drinks/machinery/smartfridge.dm b/code/modules/food_and_drinks/machinery/smartfridge.dm index 3d9578218747..31a6e85075d1 100644 --- a/code/modules/food_and_drinks/machinery/smartfridge.dm +++ b/code/modules/food_and_drinks/machinery/smartfridge.dm @@ -537,6 +537,7 @@ desc = "A wooden contraption, used to dry plant products, food and hide." icon_state = "drying-rack" base_icon_state = "drying-rack" + icon = 'modular_darkpack/master_files/icons/obj/machines/smartfridge.dmi' // DARKPACK EDIT ADD resistance_flags = FLAMMABLE visible_contents = FALSE base_build_path = /obj/machinery/smartfridge/drying/rack @@ -586,7 +587,18 @@ if(drying) . += "[base_icon_state]-drying" if(contents.len) - . += "[base_icon_state]-filled" + // DARKPACK EDIT CHANGE START + var/still_drying = FALSE + for(var/obj/item/item_iterator in src) + if(!accept_check(item_iterator)) + continue + still_drying = TRUE + break + if(still_drying) + . += "[base_icon_state]-filled" + else + . += "[base_icon_state]-filled-dried" + // DARKPACK EDIT CHANGE END // ---------------------------- // Bar drink smartfridge diff --git a/code/modules/food_and_drinks/recipes/soup_guide.dm b/code/modules/food_and_drinks/recipes/soup_guide.dm index a930fa204d75..8dba0dddc48c 100644 --- a/code/modules/food_and_drinks/recipes/soup_guide.dm +++ b/code/modules/food_and_drinks/recipes/soup_guide.dm @@ -51,7 +51,7 @@ /datum/crafting_recipe/food/reaction/soup/coldchili reaction = /datum/chemical_reaction/food/soup/coldchili -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/food/reaction/soup/clownchili reaction = /datum/chemical_reaction/food/soup/clownchili */ @@ -72,7 +72,7 @@ /datum/crafting_recipe/food/reaction/soup/misosoup reaction = /datum/chemical_reaction/food/soup/misosoup -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/food/reaction/soup/slimesoup reaction = /datum/chemical_reaction/food/soup/slimesoup @@ -84,7 +84,7 @@ */ /datum/crafting_recipe/food/reaction/soup/mysterysoup reaction = /datum/chemical_reaction/food/soup/mysterysoup -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/food/reaction/soup/monkey reaction = /datum/chemical_reaction/food/soup/monkey */ @@ -111,7 +111,7 @@ /datum/crafting_recipe/food/reaction/soup/bungocurry reaction = /datum/chemical_reaction/food/soup/bungocurry -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/food/reaction/soup/electron reaction = /datum/chemical_reaction/food/soup/electron */ diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm index f015297e994e..a882fb1d81cd 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm @@ -13,7 +13,7 @@ result = /obj/item/food/bread/meat dish_category = DISH_BREAD -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/food/xenomeatbread name = "Xenomeat bread" reqs = list( @@ -77,7 +77,7 @@ result = /obj/item/food/bread/creamcheese dish_category = DISH_BREAD -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/food/mimanabread name = "Mimana bread" reqs = list( @@ -162,7 +162,7 @@ result = /obj/item/food/croissant/throwing dish_category = DISH_BREAD crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/food/breaddog name = "Living dog/bread hybrid" reqs = list( @@ -234,7 +234,7 @@ added_foodtypes = GROSS dish_category = DISH_BREAD -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/food/breadcat name = "Bread cat/bread hybrid" reqs = list( diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm index 48df54b35a7e..854ea1002f59 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm @@ -33,7 +33,7 @@ result = /obj/item/food/burger/corgi dish_category = DISH_BURGER -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/food/appendixburger name = "Appendix burger" reqs = list( @@ -92,7 +92,7 @@ result = /obj/item/food/burger/tofu dish_category = DISH_BURGER -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/food/ghostburger name = "Ghost burger" reqs = list( @@ -239,7 +239,7 @@ removed_foodtypes = BREAKFAST dish_category = DISH_BURGER -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/food/slimeburger name = "Jelly burger" reqs = list( @@ -280,7 +280,7 @@ result = /obj/item/food/burger/rat dish_category = DISH_BURGER -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/food/baseballburger name = "Home run baseball burger" reqs = list( @@ -302,7 +302,7 @@ result = /obj/item/food/burger/baconburger removed_foodtypes = BREAKFAST dish_category = DISH_BURGER -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/food/empoweredburger name = "Empowered Burger" @@ -348,7 +348,7 @@ result = /obj/item/food/burger/cheese dish_category = DISH_BURGER -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/food/soylentburger name = "Soylent Burger" reqs = list( @@ -390,7 +390,7 @@ result = /obj/item/food/burger/chicken dish_category = DISH_BURGER -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/food/crazyhamburger name = "Crazy hamburger" reqs = list( @@ -418,7 +418,7 @@ result = /obj/item/food/burger/sloppy_moe dish_category = DISH_BURGER -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/food/kortaburger name = "Plain Rootburger" reqs = list( diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm index 426f8405cb9e..9bcaf51c56a2 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm @@ -86,7 +86,7 @@ dish_category = DISH_CAKE meal_category = MEAL_DESSERT -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/food/energycake name = "Energy cake" reqs = list( @@ -130,7 +130,7 @@ dish_category = DISH_CAKE meal_category = MEAL_DESSERT -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/food/holycake name = "Angel food cake" reqs = list( @@ -152,7 +152,7 @@ dish_category = DISH_CAKE meal_category = MEAL_DESSERT -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/food/hardwarecake name = "Hardware cake" reqs = list( @@ -250,7 +250,7 @@ dish_category = DISH_CAKE meal_category = MEAL_DESSERT -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/food/cak name = "Living cat/cake hybrid" reqs = list( diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_drink.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_drink.dm index f1e53cbfa191..5dfb0c86d58d 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_drink.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_drink.dm @@ -1,7 +1,7 @@ // This is the home of drink related tablecrafting recipes, I have opted to only let players bottle fancy boozes to reduce the number of entries. ///////////////// Booze & Bottles /////////////////// -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/lizardwine name = "Lizard Wine" time = 4 SECONDS diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_frozen.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_frozen.dm index 5c55c9983d64..14ec0805373e 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_frozen.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_frozen.dm @@ -50,7 +50,7 @@ dish_category = DISH_FROZEN meal_category = MEAL_DESSERT -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/food/honkdae name ="Honkdae" reqs = list( diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_guide.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_guide.dm index 6e28e6357b6e..f7bb48571616 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_guide.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_guide.dm @@ -12,7 +12,7 @@ non_craftable = TRUE steps = list("Use cloth on a glass shard of any type") -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/runed_metal reqs = list(/obj/item/stack/sheet/plasteel = 1) requirements_mats_blacklist = list(/obj/item/stack/sheet/plasteel) // runed metal has its own material @@ -48,7 +48,7 @@ qdel(chemical_reaction) ..() -/* // DARKPACK EDIT REMOVE* +/* // DARKPACK EDIT REMOVAL* * Sets up information for our recipe based on the chemical reaction we have set. */ /datum/crafting_recipe/food/reaction/proc/setup_chemical_reaction_details(datum/chemical_reaction/chemical_reaction) @@ -815,7 +815,7 @@ /datum/crafting_recipe/food/oven/bread reqs = list(/obj/item/food/dough = 1) result = /obj/item/food/bread/plain -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/food/oven/rootbread reqs = list(/obj/item/food/rootdough = 1) result = /obj/item/food/bread/root @@ -947,7 +947,7 @@ reqs = list(/obj/item/food/cheese/cheese_curds = 1) result = /obj/item/food/cheese/firm_cheese -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/food/drying/headcheese reqs = list(/obj/item/food/raw_headcheese = 1) result = /obj/item/food/headcheese diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm index f70ba30bac1b..6c338148c4af 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm @@ -29,7 +29,7 @@ result = /obj/item/food/kebab/tofu dish_category = DISH_MEAT -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/food/tailkebab name = "Lizard tail kebab" reqs = list( @@ -53,7 +53,7 @@ dish_category = DISH_MEAT ////////////////////////////////////////////////MR SPIDER//////////////////////////////////////////////// -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/food/spidereggsham name = "Spider eggs ham" reqs = list( @@ -276,7 +276,7 @@ removed_foodtypes = BREAKFAST dish_category = DISH_MEAT -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/food/korta_wellington name = "Korta Wellington" reqs = list( @@ -313,7 +313,7 @@ added_foodtypes = GRAIN dish_category = DISH_MEAT -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/food/full_roast_lizzy name = "Grain-Free Roast Chicken Dinner" reqs = list( diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_mexican.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_mexican.dm index c6107484012d..bd3240a06eae 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_mexican.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_mexican.dm @@ -115,7 +115,7 @@ cuisine_category = CUISINE_MEXICAN dish_category = DISH_BURRITO -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/food/stuffedlegion name = "Stuffed legion" time = 4 SECONDS diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm index f175243fbd02..94f1409046ba 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm @@ -14,7 +14,7 @@ dish_category = DISH_CANDY meal_category = MEAL_DESSERT -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/food/spiderlollipop name = "Spider Lollipop" reqs = list(/obj/item/stack/rods = 1, @@ -117,7 +117,7 @@ added_foodtypes = SUGAR dish_category = DISH_UNCATEGORIZED -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/food/powercrepe name = "Powercrepe" time = 4 SECONDS @@ -169,7 +169,7 @@ removed_foodtypes = BREAKFAST dish_category = DISH_SALAD -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/food/butterbear //ITS ALIVEEEEEE! name = "Living bear/butter hybrid" reqs = list( @@ -201,7 +201,7 @@ removed_foodtypes = RAW meal_category = MEAL_APPETIZER -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/food/royalcheese name = "Royal Cheese" reqs = list( diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_moth.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_moth.dm index f657c3973f51..d7a4bc41c326 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_moth.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_moth.dm @@ -1,4 +1,4 @@ -/* /datum/crafting_recipe/food/herby_cheese // DARKPACK EDIT REMOVE +/* /datum/crafting_recipe/food/herby_cheese // DARKPACK EDIT REMOVAL name = "Herby cheese" reqs = list( /obj/item/food/cheese/curd_cheese = 1, diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm index 44384e7a6531..ced52c61149c 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm @@ -306,7 +306,7 @@ result = /obj/item/food/soylenviridians // they look like waffles dish_category = DISH_PASTRY -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/food/soylentgreen name = "Soylent green" reqs = list( @@ -407,7 +407,7 @@ added_foodtypes = FRUIT|SUGAR dish_category = DISH_PASTRY -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/food/donkpocket/gondola time = 1.5 SECONDS name = "Gondola-pocket" diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pie.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pie.dm index cd38856e9b49..5059f99f7833 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pie.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pie.dm @@ -37,7 +37,7 @@ dish_category = DISH_PIE meal_category = MEAL_DESSERT -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/food/xenopie name = "Xeno pie" reqs = list( @@ -273,7 +273,7 @@ dish_category = DISH_PIE meal_category = MEAL_DESSERT -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/food/asdfpie name = "Pie-flavored pie" reqs = list( diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pizza.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pizza.dm index e2a6d5adf364..73f1c3266124 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pizza.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pizza.dm @@ -99,7 +99,7 @@ ) result = /obj/item/food/pizzaslice/ants added_foodtypes = BUGS -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/food/pizza/energy reqs = list( /obj/item/food/flatdough = 1, diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_sandwich.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_sandwich.dm index 7e16d4dc1af1..44ab3f2cf8de 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_sandwich.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_sandwich.dm @@ -25,7 +25,7 @@ ) result = /obj/item/food/sandwich/cheese dish_category = DISH_SANDWICH -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/food/slimesandwich name = "Jelly sandwich" reqs = list( diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_spaghetti.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_spaghetti.dm index 0592dd6a51cd..5e79f79b2a81 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_spaghetti.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_spaghetti.dm @@ -13,7 +13,7 @@ dish_category = DISH_NOODLES cuisine_category = CUISINE_ITALIAN -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /datum/crafting_recipe/food/copypasta name = "Copypasta" reqs = list( diff --git a/code/modules/holiday/holidays.dm b/code/modules/holiday/holidays.dm index ddf0b30145f5..45f8a346b203 100644 --- a/code/modules/holiday/holidays.dm +++ b/code/modules/holiday/holidays.dm @@ -115,6 +115,7 @@ GLOBAL_LIST_INIT(holiday_mail, list()) // JANUARY +/* // DARKPACK EDIT REMOVAL - (TG lore cruft) //Fleet Day is celebrated on Jan 19th, the date on which moths were merged (#34498) /datum/holiday/fleet_day name = "Fleet Day" @@ -127,6 +128,7 @@ GLOBAL_LIST_INIT(holiday_mail, list()) /datum/holiday/fleet_day/getStationPrefix() return pick("Moth", "Fleet", "Nomadic") +*/ // FEBRUARY @@ -363,6 +365,7 @@ GLOBAL_LIST_INIT(holiday_mail, list()) holiday_hat = /obj/item/clothing/head/utility/hardhat no_mail_holiday = TRUE +/* // DARKPACK EDIT REMOVAL - (TG lore cruft) //Draconic Day is celebrated on May 3rd, the date on which the Draconic language was merged (#26780) /datum/holiday/draconic_day name = "Draconic Language Day" @@ -374,6 +377,7 @@ GLOBAL_LIST_INIT(holiday_mail, list()) /datum/holiday/draconic_day/getStationPrefix() return pick("Draconic", "Literature", "Reading") +*/ /datum/holiday/firefighter name = "Firefighter's Day" @@ -418,6 +422,7 @@ GLOBAL_LIST_INIT(holiday_mail, list()) // JUNE +/* // DARKPACK EDIT REMOVAL - (TG lore cruft) //The Festival of Atrakor's Might (Tizira's Moon) is celebrated on June 15th, the date on which the lizard visual revamp was merged (#9808) /datum/holiday/atrakor_festival name = "Festival of Atrakor's Might" @@ -429,6 +434,7 @@ GLOBAL_LIST_INIT(holiday_mail, list()) /datum/holiday/atrakor_festival/getStationPrefix() return pick("Moon", "Night Sky", "Celebration") +*/ /// Garbage DAYYYYY /// Huh?.... NOOOO @@ -603,6 +609,7 @@ GLOBAL_LIST_INIT(holiday_mail, list()) // SEPTEMBER +/* // DARKPACK EDIT REMOVAL - (TG lore cruft) //Tiziran Unification Day is celebrated on Sept 1st, the day on which lizards were made a roundstart race /datum/holiday/tiziran_unification name = "Tiziran Unification Day" @@ -616,7 +623,9 @@ GLOBAL_LIST_INIT(holiday_mail, list()) /datum/holiday/tiziran_unification/getStationPrefix() return pick("Tizira", "Lizard", "Imperial") +*/ +/* // DARKPACK EDIT REMOVAL - (TG lore cruft) /datum/holiday/ianbirthday name = IAN_HOLIDAY //github.com/tgstation/tgstation/commit/de7e4f0de0d568cd6e1f0d7bcc3fd34700598acb begin_month = SEPTEMBER @@ -638,6 +647,7 @@ GLOBAL_LIST_INIT(holiday_mail, list()) /datum/holiday/ianbirthday/getStationPrefix() return pick("Ian", "Corgi", "Erro") +*/ /datum/holiday/pirate name = "Talk-Like-a-Pirate Day" @@ -793,6 +803,7 @@ GLOBAL_LIST_INIT(holiday_mail, list()) /datum/holiday/hello/greet() return "[pick(list("Aloha", "Bonjour", "Hello", "Hi", "Greetings", "Salutations", "Bienvenidos", "Hola", "Howdy", "Ni hao", "Guten Tag", "Konnichiwa", "G'day cunt"))]! " + ..() +/* // DARKPACK EDIT REMOVAL - (TG lore cruft) //The Festival of Holy Lights is celebrated on Nov 28th, the date on which ethereals were merged (#40995) /datum/holiday/holy_lights name = "Festival of Holy Lights" @@ -809,6 +820,7 @@ GLOBAL_LIST_INIT(holiday_mail, list()) /datum/holiday/holy_lights/getStationPrefix() return pick("Ethereal", "Lantern", "Holy") +*/ // DECEMBER diff --git a/code/modules/jobs/job_types/ai.dm b/code/modules/jobs/job_types/ai.dm index b4a5346e1a5d..96f9c484dc90 100644 --- a/code/modules/jobs/job_types/ai.dm +++ b/code/modules/jobs/job_types/ai.dm @@ -19,7 +19,7 @@ /datum/job_department/silicon, ) random_spawns_possible = FALSE - job_flags = JOB_EQUIP_RANK | JOB_BOLD_SELECT_TEXT | JOB_CANNOT_OPEN_SLOTS // DARKPACK EDIT, ORIGINAL: job_flags = JOB_NEW_PLAYER_JOINABLE | JOB_EQUIP_RANK | JOB_BOLD_SELECT_TEXT | JOB_CANNOT_OPEN_SLOTS + job_flags = JOB_EQUIP_RANK | JOB_BOLD_SELECT_TEXT | JOB_CANNOT_OPEN_SLOTS // DARKPACK EDIT CHANGE - ORIGINAL: job_flags = JOB_NEW_PLAYER_JOINABLE | JOB_EQUIP_RANK | JOB_BOLD_SELECT_TEXT | JOB_CANNOT_OPEN_SLOTS config_tag = "AI" diff --git a/code/modules/jobs/job_types/cyborg.dm b/code/modules/jobs/job_types/cyborg.dm index e67ea5d1c5fd..07425e8b17e0 100644 --- a/code/modules/jobs/job_types/cyborg.dm +++ b/code/modules/jobs/job_types/cyborg.dm @@ -19,7 +19,7 @@ /datum/job_department/silicon, ) random_spawns_possible = FALSE - job_flags = JOB_EQUIP_RANK | JOB_CANNOT_OPEN_SLOTS // DARKPACK EDIT, ORIGINAL: job_flags = JOB_NEW_PLAYER_JOINABLE | JOB_EQUIP_RANK | JOB_CANNOT_OPEN_SLOTS + job_flags = JOB_EQUIP_RANK | JOB_CANNOT_OPEN_SLOTS // DARKPACK EDIT CHANGE - ORIGINAL: job_flags = JOB_NEW_PLAYER_JOINABLE | JOB_EQUIP_RANK | JOB_CANNOT_OPEN_SLOTS /datum/job/cyborg/after_spawn(mob/living/spawned, client/player_client) diff --git a/code/modules/jobs/job_types/station_trait/bridge_assistant.dm b/code/modules/jobs/job_types/station_trait/bridge_assistant.dm index a62f2b33200d..e52e4814cfa1 100644 --- a/code/modules/jobs/job_types/station_trait/bridge_assistant.dm +++ b/code/modules/jobs/job_types/station_trait/bridge_assistant.dm @@ -31,7 +31,7 @@ ) rpg_title = "Royal Guard" allow_bureaucratic_error = FALSE - job_flags = NONE // DARKPACK EDIT, ORIGINAL: job_flags = STATION_JOB_FLAGS | STATION_TRAIT_JOB_FLAGS | JOB_ANTAG_PROTECTED + job_flags = NONE // DARKPACK EDIT CHANGE - ORIGINAL: job_flags = STATION_JOB_FLAGS | STATION_TRAIT_JOB_FLAGS | JOB_ANTAG_PROTECTED human_authority = JOB_AUTHORITY_NON_HUMANS_ALLOWED /datum/job/bridge_assistant/after_spawn(mob/living/spawned, client/player_client) diff --git a/code/modules/jobs/job_types/station_trait/cargo_gorilla.dm b/code/modules/jobs/job_types/station_trait/cargo_gorilla.dm index ce33e255fc06..19fba20c410c 100644 --- a/code/modules/jobs/job_types/station_trait/cargo_gorilla.dm +++ b/code/modules/jobs/job_types/station_trait/cargo_gorilla.dm @@ -15,7 +15,7 @@ ) rpg_title = "Beast of Burden" allow_bureaucratic_error = FALSE - job_flags = NONE // DARKPACK EDIT, ORIGINAL: job_flags = STATION_TRAIT_JOB_FLAGS | JOB_ANNOUNCE_ARRIVAL | JOB_NEW_PLAYER_JOINABLE | JOB_EQUIP_RANK |JOB_ANTAG_BLACKLISTED + job_flags = NONE // DARKPACK EDIT CHANGE - ORIGINAL: job_flags = STATION_TRAIT_JOB_FLAGS | JOB_ANNOUNCE_ARRIVAL | JOB_NEW_PLAYER_JOINABLE | JOB_EQUIP_RANK |JOB_ANTAG_BLACKLISTED /datum/job/cargo_gorilla/get_roundstart_spawn_point() if (length(GLOB.gorilla_start)) diff --git a/code/modules/jobs/job_types/station_trait/human_ai.dm b/code/modules/jobs/job_types/station_trait/human_ai.dm index 59d0a534e385..1c53cd75597a 100644 --- a/code/modules/jobs/job_types/station_trait/human_ai.dm +++ b/code/modules/jobs/job_types/station_trait/human_ai.dm @@ -38,7 +38,7 @@ rpg_title = "Omnissiah" random_spawns_possible = FALSE allow_bureaucratic_error = FALSE - job_flags = NONE // DARKPACK EDIT, ORIGINAL: job_flags = STATION_JOB_FLAGS | STATION_TRAIT_JOB_FLAGS | JOB_ANTAG_PROTECTED + job_flags = NONE // DARKPACK EDIT CHANGE - ORIGINAL: job_flags = STATION_JOB_FLAGS | STATION_TRAIT_JOB_FLAGS | JOB_ANTAG_PROTECTED human_authority = JOB_AUTHORITY_NON_HUMANS_ALLOWED //we can safely assume NT doesn't care what species AIs are made of, much less if they can't even afford an AI. /datum/job/human_ai/get_roundstart_spawn_point() diff --git a/code/modules/jobs/job_types/station_trait/pun_pun.dm b/code/modules/jobs/job_types/station_trait/pun_pun.dm index 6571c4629010..4c61355a89a8 100644 --- a/code/modules/jobs/job_types/station_trait/pun_pun.dm +++ b/code/modules/jobs/job_types/station_trait/pun_pun.dm @@ -24,7 +24,7 @@ ) rpg_title = "Homunculus" allow_bureaucratic_error = FALSE - job_flags = NONE // DARKPACK EDIT, ORIGINAL: job_flags = (STATION_JOB_FLAGS|STATION_TRAIT_JOB_FLAGS)&~JOB_ASSIGN_QUIRKS + job_flags = NONE // DARKPACK EDIT CHANGE - ORIGINAL: job_flags = (STATION_JOB_FLAGS|STATION_TRAIT_JOB_FLAGS)&~JOB_ASSIGN_QUIRKS /datum/job/pun_pun/get_spawn_mob(client/player_client, atom/spawn_point) if (!player_client) diff --git a/code/modules/jobs/job_types/station_trait/veteran_advisor.dm b/code/modules/jobs/job_types/station_trait/veteran_advisor.dm index 2e188ce58b7d..c487967c5ed9 100644 --- a/code/modules/jobs/job_types/station_trait/veteran_advisor.dm +++ b/code/modules/jobs/job_types/station_trait/veteran_advisor.dm @@ -34,7 +34,7 @@ ) rpg_title = "Royal Advisor" allow_bureaucratic_error = FALSE - job_flags = NONE // DARKPACK EDIT, ORIGINAL: job_flags = STATION_JOB_FLAGS | STATION_TRAIT_JOB_FLAGS | JOB_ANTAG_PROTECTED + job_flags = NONE // DARKPACK EDIT CHANGE - ORIGINAL: job_flags = STATION_JOB_FLAGS | STATION_TRAIT_JOB_FLAGS | JOB_ANTAG_PROTECTED /datum/job/veteran_advisor/get_default_roundstart_spawn_point() for(var/obj/effect/landmark/start/spawn_point as anything in GLOB.start_landmarks_list) diff --git a/code/modules/library/bookcase.dm b/code/modules/library/bookcase.dm index 373fc6aa3e5d..56cf9de94753 100644 --- a/code/modules/library/bookcase.dm +++ b/code/modules/library/bookcase.dm @@ -23,7 +23,7 @@ var/category_prob = 25 /// How many random books to generate. var/books_to_load = 0 - //DARKPACK EDIT START - bookshelf generation + // DARKPACK EDIT START - bookshelf generation // What books we don't want to generate on not their respective bookshelves var/restricted_categories = list( BOOK_CATEGORY_ADULT, @@ -31,7 +31,7 @@ BOOK_CATEGORY_LUPINE, BOOK_CATEGORY_KUEIJIN, ) - //DARKPACK EDIT END + // DARKPACK EDIT END /datum/armor/structure_bookcase fire = 50 @@ -66,7 +66,7 @@ if(load_random_books) var/randomizing_categories = prob(category_prob) || random_category == BOOK_CATEGORY_RANDOM // We only need to run this special logic if we're randomizing a non-adult bookshelf - if(randomizing_categories && !(random_category in restricted_categories)) // DARKPACK EDIT CHANGE - Original : if(randomizing_categories && random_category != BOOK_CATEGORY_ADULT) + if(randomizing_categories && !(random_category in restricted_categories)) // DARKPACK EDIT CHANGE - ORIGINAL: if(randomizing_categories && random_category != BOOK_CATEGORY_ADULT) // Category is manually randomized rather than using BOOK_CATEGORY_RANDOM // So we can exclude adult books in non-adult bookshelves // And also weight the prime category more heavily @@ -92,7 +92,7 @@ var/area/our_area = get_area(src) - //DARKPACK ADDITION START - Paths + // DARKPACK EDIT ADD START - Paths // Check if we're NOT in a chantry area and roll for occult book spawn. This is so that non-Chantry Thaumaturgists can access the paths feature if(!istype(our_area, /area/vtm/interior/chantry) && prob(15)) // 15% chance to spawn in a bookcase thats not the library. May need balance tweaking for maps w/ more or less bookshelves. @@ -111,7 +111,7 @@ /obj/item/path_spellbook/levinbolt/level5) new occult_book_type(src) update_appearance() - //DARKPACK ADDITION END - Paths + // DARKPACK EDIT ADD END - Paths var/area_type = our_area.type //Save me from the dark diff --git a/code/modules/loadout/categories/pocket.dm b/code/modules/loadout/categories/pocket.dm index 0beab6885563..476ec6575612 100644 --- a/code/modules/loadout/categories/pocket.dm +++ b/code/modules/loadout/categories/pocket.dm @@ -275,7 +275,7 @@ // The wallet loadout item is special, and puts the player's ID and other small items into it on initialize (fancy!) /datum/loadout_item/pocket_items/wallet name = "Wallet" - item_path = /obj/item/storage/wallet/darkpack // DARKPACK EDIT CHANGE - Original : item_path = /obj/item/storage/wallet + item_path = /obj/item/storage/wallet/darkpack // DARKPACK EDIT CHANGE - ORIGINAL: item_path = /obj/item/storage/wallet /datum/loadout_item/pocket_items/wallet/insert_path_into_outfit(datum/outfit/outfit, mob/living/carbon/human/equipper, visuals_only = FALSE) return @@ -292,11 +292,11 @@ UnregisterSignal(source, COMSIG_HUMAN_CHARACTER_SETUP_FINISHED) /datum/loadout_item/pocket_items/wallet/proc/equip_wallet(mob/living/carbon/human/equipper) - var/obj/item/card/id_card = equipper.get_item_by_slot(ITEM_SLOT_ID) // DARKPACK EDIT CHANGE - Original : var/obj/item/card/id/advanced/id_card = equipper.get_item_by_slot(ITEM_SLOT_ID) - if(istype(id_card, /obj/item/storage/wallet/darkpack)) // Wallets station trait guard // DARKPACK EDIT CHANGE - Original : if(istype(id_card, /obj/item/storage/wallet)) // Wallets station trait guard + var/obj/item/card/id_card = equipper.get_item_by_slot(ITEM_SLOT_ID) // DARKPACK EDIT CHANGE - ORIGINAL: var/obj/item/card/id/advanced/id_card = equipper.get_item_by_slot(ITEM_SLOT_ID) + if(istype(id_card, /obj/item/storage/wallet/darkpack)) // Wallets station trait guard // DARKPACK EDIT CHANGE - ORIGINAL: if(istype(id_card, /obj/item/storage/wallet)) // Wallets station trait guard return - var/obj/item/storage/wallet/darkpack/wallet = new(equipper) // DARKPACK EDIT CHANGE - Original : var/obj/item/storage/wallet/wallet = new(equipper) + var/obj/item/storage/wallet/darkpack/wallet = new(equipper) // DARKPACK EDIT CHANGE - ORIGINAL: var/obj/item/storage/wallet/wallet = new(equipper) if(!istype(id_card)) // They must have a PDA or some other thing in their ID slot, abort if(!equipper.equip_to_storage(wallet, ITEM_SLOT_BACK, indirect_action = TRUE)) diff --git a/code/modules/mining/lavaland/mining_loot/megafauna/colossus.dm b/code/modules/mining/lavaland/mining_loot/megafauna/colossus.dm index c3368019ed20..7d4d87d13bd7 100644 --- a/code/modules/mining/lavaland/mining_loot/megafauna/colossus.dm +++ b/code/modules/mining/lavaland/mining_loot/megafauna/colossus.dm @@ -112,7 +112,7 @@ . += observer_desc . += "It is activated by [activation_method]." -/obj/machinery/anomalous_crystal/Hear(atom/movable/speaker, message_langs, raw_message, radio_freq, radio_freq_name, radio_freq_color, spans, list/message_mods = list(), message_range, source) // DARKPACK EDIT, ORIGINAL: /obj/machinery/anomalous_crystal/Hear(atom/movable/speaker, message_langs, raw_message, radio_freq, radio_freq_name, radio_freq_color, spans, list/message_mods = list(), message_range) +/obj/machinery/anomalous_crystal/Hear(atom/movable/speaker, message_langs, raw_message, radio_freq, radio_freq_name, radio_freq_color, spans, list/message_mods = list(), message_range, source) // DARKPACK EDIT CHANGE - ORIGINAL: /obj/machinery/anomalous_crystal/Hear(atom/movable/speaker, message_langs, raw_message, radio_freq, radio_freq_name, radio_freq_color, spans, list/message_mods = list(), message_range) . = ..() if(isliving(speaker)) ActivationReaction(speaker, ACTIVATE_SPEECH) diff --git a/code/modules/mob/dead/new_player/latejoin_menu.dm b/code/modules/mob/dead/new_player/latejoin_menu.dm index 1fd9e6650ce5..0f74236b7c65 100644 --- a/code/modules/mob/dead/new_player/latejoin_menu.dm +++ b/code/modules/mob/dead/new_player/latejoin_menu.dm @@ -166,7 +166,7 @@ GLOBAL_DATUM_INIT(latejoin_menu, /datum/latejoin_menu, new) tgui_alert(owner, "The server is full!", "Oh No!") return TRUE - //DARKPACK EDIT ADD START - (prevents players from joining with negative freebie points) + // DARKPACK EDIT ADD START - (prevents players from joining with negative freebie points) var/datum/st_stat/freebie/freebie_stat = owner.client?.prefs?.preference_storyteller_stats[STAT_FREEBIE_POINTS] if(freebie_stat && freebie_stat.get_points() < 0) tgui_alert(owner, "You cannot join with negative freebie points! Please fix your character preferences.", "Oh No!") diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index 615783cf095e..9d8977e9cf9f 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -139,12 +139,18 @@ return "[jobtitle] doesn't have any free splat slots for you. (This can include human)" if(JOB_UNAVAILABLE_WHITELIST) return "You aren't whitelisted for [jobtitle]." - if(JOB_UNAVAILABLE_KINDRED_AGE) + if(JOB_UNAVAILABLE_KINDRED_AGE_MIN) return "Your character is too young for [jobtitle]." + if(JOB_UNAVAILABLE_KINDRED_AGE_MAX) + return "Your character is too old for [jobtitle]." if(JOB_UNAVAILABLE_KINDRED_GENERATION) return "Your character's generation is too high for [jobtitle]." if(JOB_UNAVAILABLE_KINDRED_CLAN) return "Your character's clan is incompatible for [jobtitle]." + if(JOB_UNAVAILABLE_FERA_TRIBE) + return "Your character's tribe is incompatible for [jobtitle]." + if(JOB_UNAVAILABLE_FERA_AUSPICE) + return "Your character's auspice is incompatible for [jobtitle]." // DARKPACK EDIT END return GENERIC_JOB_UNAVAILABLE_ERROR @@ -221,7 +227,7 @@ var/is_captain = IS_NOT_CAPTAIN var/captain_sound = 'sound/announcer/notice/notice2.ogg' // If we already have a captain, are they a "Captain" rank and are we allowing multiple of them to be assigned? - if(is_prince_job(job)) // DARKPACK EDIT, ORIGINAL: if(is_captain_job(job)) + if(is_prince_job(job)) // DARKPACK EDIT CHANGE - ORIGINAL: if(is_captain_job(job)) is_captain = IS_FULL_CAPTAIN captain_sound = 'sound/announcer/announcement/announce.ogg' // If we don't have an assigned cap yet, check if this person qualifies for some from of captaincy. @@ -241,7 +247,7 @@ humanc = character //Let's retypecast the var to be human, if(humanc) //These procs all expect humans - var/chosen_rank = humanc.client?.prefs.alt_job_titles?[rank] || rank // DARKPACK EDIT ADDITION - ALTERNATIVE_JOB_TITLES + var/chosen_rank = humanc.client?.prefs.alt_job_titles?[rank] || rank // DARKPACK EDIT ADD - ALTERNATIVE_JOB_TITLES if(SSshuttle.arrivals) SSshuttle.arrivals.QueueAnnounce(humanc, chosen_rank) // DARKPACK EDIT CHANGE - ALTERNATIVE_JOB_TITLES - ORIGINAL: SSshuttle.arrivals.QueueAnnounce(humanc, rank) else @@ -250,7 +256,7 @@ humanc.increment_scar_slot() humanc.load_persistent_scars() - humanc.load_guestbook() // DARKPACK EDIT ADDITION + humanc.load_guestbook() // DARKPACK EDIT ADD if(GLOB.curse_of_madness_triggered) give_madness(humanc, GLOB.curse_of_madness_triggered) diff --git a/code/modules/mob/dead/new_player/preferences_setup.dm b/code/modules/mob/dead/new_player/preferences_setup.dm index c110d53703d8..bf5178969ea9 100644 --- a/code/modules/mob/dead/new_player/preferences_setup.dm +++ b/code/modules/mob/dead/new_player/preferences_setup.dm @@ -94,7 +94,7 @@ return preview_job /datum/preferences/proc/render_new_preview_appearance(mob/living/carbon/human/dummy/mannequin, show_job_clothes = TRUE) - var/datum/job/no_job = SSjob.get_job_type(/datum/job/vampire/unassigned) // DARKPACK EDIT, ORIGINAL: var/datum/job/no_job = SSjob.get_job_type(/datum/job/unassigned) + var/datum/job/no_job = SSjob.get_job_type(/datum/job/vampire/unassigned) // DARKPACK EDIT CHANGE - ORIGINAL: var/datum/job/no_job = SSjob.get_job_type(/datum/job/unassigned) var/datum/job/preview_job = get_highest_priority_job() || no_job if(preview_job) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 0435890acd89..cd069dd8ae61 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -11,7 +11,7 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) plane = GHOST_PLANE stat = DEAD density = FALSE - see_invisible = OBSERVER_SIGHT //DARKPACK EDIT, Original : see_invisible = SEE_INVISIBLE_OBSERVER + see_invisible = OBSERVER_SIGHT // DARKPACK EDIT CHANGE - ORIGINAL: see_invisible = SEE_INVISIBLE_OBSERVER lighting_cutoff = LIGHTING_CUTOFF_MEDIUM invisibility = INVISIBILITY_OBSERVER hud_type = /datum/hud/ghost @@ -713,7 +713,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(!(ghost_hud_flags & GHOST_VISION)) set_invis_see(SEE_INVISIBLE_LIVING) else - set_invis_see(OBSERVER_SIGHT) //DARKPACK EDIT, Original : see_invisible = SEE_INVISIBLE_OBSERVER + set_invis_see(OBSERVER_SIGHT) // DARKPACK EDIT CHANGE - ORIGINAL: see_invisible = SEE_INVISIBLE_OBSERVER updateghostimages() ..() diff --git a/code/modules/mob/dead/observer/observer_say.dm b/code/modules/mob/dead/observer/observer_say.dm index 60d4111927c2..86c277f2fb57 100644 --- a/code/modules/mob/dead/observer/observer_say.dm +++ b/code/modules/mob/dead/observer/observer_say.dm @@ -58,7 +58,7 @@ . = say_dead(message) -/mob/dead/observer/Hear(atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range, source) // DARKPACK EDIT, ORIGINAL: /mob/dead/observer/Hear(atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range) +/mob/dead/observer/Hear(atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range, source) // DARKPACK EDIT CHANGE - ORIGINAL: /mob/dead/observer/Hear(atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range) . = ..() var/atom/movable/to_follow = speaker if(radio_freq) diff --git a/code/modules/mob/living/basic/basic_defense.dm b/code/modules/mob/living/basic/basic_defense.dm index 30523655e778..fe19aad2b6c5 100644 --- a/code/modules/mob/living/basic/basic_defense.dm +++ b/code/modules/mob/living/basic/basic_defense.dm @@ -54,6 +54,10 @@ attack_roll_type = /datum/storyteller_roll/attack/kick damage_roll_type = /datum/storyteller_roll/damage/kick damage_bonus_dice++ + else if(atk_effect == ATTACK_EFFECT_CLAW) + attack_roll_type = /datum/storyteller_roll/attack/claw + damage_roll_type = /datum/storyteller_roll/damage/claw + damage_bonus_dice += 2 user.do_attack_animation(src, atk_effect) @@ -132,10 +136,12 @@ else log_combat(user, src, "punched") + /* // DARKPACK EDIT REMOVAL - (A decent amount of combat involves biting here which creates issue from being getting fat from combat) 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 updatehealth() return TRUE diff --git a/code/modules/mob/living/basic/pets/cat/cat.dm b/code/modules/mob/living/basic/pets/cat/cat.dm index 560d61af23c2..4d489d3987df 100644 --- a/code/modules/mob/living/basic/pets/cat/cat.dm +++ b/code/modules/mob/living/basic/pets/cat/cat.dm @@ -172,6 +172,7 @@ AddComponent(\ /datum/component/breed,\ can_breed_with = typecacheof(list(/mob/living/basic/pet/cat)),\ + breed_timer = 30 MINUTES, /* DARKPACK EDIT ADD - (Less baby spam)*/\ baby_paths = baby_types,\ post_birth = post_birth_callback,\ ) diff --git a/code/modules/mob/living/basic/pets/dog/_dog.dm b/code/modules/mob/living/basic/pets/dog/_dog.dm index aabcfd6440e2..927faa23c963 100644 --- a/code/modules/mob/living/basic/pets/dog/_dog.dm +++ b/code/modules/mob/living/basic/pets/dog/_dog.dm @@ -36,14 +36,14 @@ attack_vis_effect = ATTACK_EFFECT_BITE melee_attack_cooldown = 0.8 SECONDS /// Instructions you can give to dogs - /* // DARKPACK EDIT REMOVE START - NPC - (Moving this into a proc so we can have subtypes with different commands) + /* // DARKPACK EDIT REMOVAL START - NPC - (Moving this into a proc so we can have subtypes with different commands) var/static/list/pet_commands = list( /datum/pet_command/idle, /datum/pet_command/free, /datum/pet_command/move, /datum/pet_command/good_boy/dog, /datum/pet_command/follow/dog, -// /datum/pet_command/perform_trick_sequence // DARKPACK EDIT REMOVE - Might be usable later - NPC +// /datum/pet_command/perform_trick_sequence // DARKPACK EDIT REMOVAL - Might be usable later - NPC /datum/pet_command/attack/dog, /datum/pet_command/fetch, /datum/pet_command/play_dead, @@ -123,7 +123,7 @@ ) AddElement(/datum/element/ai_flee_while_injured) // DARKPACK EDIT ADD - NPC AddComponent(/datum/component/tameable, food_types = food_types, tame_chance = 30, bonus_tame_chance = 15, unique = FALSE) -// AddComponent(/datum/component/obeys_commands, pet_commands) // DARKPACK EDIT REMOVE - npc +// AddComponent(/datum/component/obeys_commands, pet_commands) // DARKPACK EDIT REMOVAL - npc add_obey_commands() var/dog_area = get_area(src) for(var/obj/structure/bed/dogbed/dog_bed in dog_area) @@ -132,7 +132,7 @@ // DARKPACK EDIT ADD START - NPC - (snowflake obeys_commands abstraction proc) /mob/living/basic/pet/dog/proc/add_obey_commands() - var/static/list/pet_commands = list( // DARKPACK EDIT REMOVE START - npc - Moving this into a proc so we can have subtypes with different commands + var/static/list/pet_commands = list( /datum/pet_command/idle, /datum/pet_command/free, /datum/pet_command/move, diff --git a/code/modules/mob/living/basic/pets/dog/corgi.dm b/code/modules/mob/living/basic/pets/dog/corgi.dm index 028015535ae8..0cf4b48e52c4 100644 --- a/code/modules/mob/living/basic/pets/dog/corgi.dm +++ b/code/modules/mob/living/basic/pets/dog/corgi.dm @@ -76,6 +76,7 @@ AddComponent(\ /datum/component/breed,\ can_breed_with = typecacheof(list(/mob/living/basic/pet/dog/corgi)),\ + breed_timer = 30 MINUTES, /* DARKPACK EDIT ADD - (Less baby spam)*/\ baby_paths = baby_paths,\ ) diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm index e02cf2986030..a42799967653 100644 --- a/code/modules/mob/living/brain/brain_item.dm +++ b/code/modules/mob/living/brain/brain_item.dm @@ -724,11 +724,27 @@ return found_head || active_hand // If we are a feral biter, return a usable head. if(target.pulledby == owner) // if we're grabbing our target we're beating them to death with our bare hands return active_hand - if(target.body_position == LYING_DOWN && owner.usable_legs) + if(should_kick(target) && target.body_position == LYING_DOWN && owner.usable_legs) // DARKPACK EDIT CHANGE var/obj/item/bodypart/found_bodypart = owner.get_bodypart(IS_LEFT_INDEX(active_hand.held_index) ? BODY_ZONE_L_LEG : BODY_ZONE_R_LEG) return found_bodypart || active_hand return active_hand +// DARKPACK EDIT ADD START +/obj/item/organ/brain/proc/should_kick(mob/living/carbon/human/target) + var/obj/item/bodypart/arm/active_hand = owner.get_active_hand() + var/obj/item/bodypart/leg/active_leg = owner.get_bodypart(IS_LEFT_INDEX(active_hand.held_index) ? BODY_ZONE_L_LEG : BODY_ZONE_R_LEG) + if(!active_hand) + return TRUE + if(!active_leg) + return FALSE + // Now lets acctually compare them + if(active_hand.attack_type == AGGRAVATED) + return FALSE // AGG damage is gonna almost always be better dps or more desired.. + if(active_hand.unarmed_attack_effect == ATTACK_EFFECT_CLAW) + return FALSE // Claws get an extra bonus dice compared to kicking + return TRUE // Otherwise, kicking is PROBALLY better as it gets a +1 bonus to damage compared to punches. +// DARKPACK EDIT ADD END + /// Brains REALLY like ghosting people. we need special tricks to avoid that, namely removing the old brain with no_id_transfer /obj/item/organ/brain/replace_into(mob/living/carbon/new_owner) var/obj/item/organ/brain/old_brain = new_owner.get_organ_slot(ORGAN_SLOT_BRAIN) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 65e4c7fa5d4a..068db7caf721 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -474,7 +474,7 @@ set_sight(initial(sight)) else set_sight(SEE_TURFS|SEE_MOBS|SEE_OBJS) - set_invis_see(OBSERVER_SIGHT) // DARKPACK EDIT, Original : set_invis_see(SEE_INVISIBLE_OBSERVER) + set_invis_see(OBSERVER_SIGHT) // DARKPACK EDIT CHANGE - ORIGINAL: set_invis_see(SEE_INVISIBLE_OBSERVER) return var/new_sight = initial(sight) diff --git a/code/modules/mob/living/carbon/human/_species.dm b/code/modules/mob/living/carbon/human/_species.dm index 4c848c2870d9..d56e98ba1aeb 100644 --- a/code/modules/mob/living/carbon/human/_species.dm +++ b/code/modules/mob/living/carbon/human/_species.dm @@ -811,6 +811,10 @@ GLOBAL_LIST_EMPTY(features_by_species) attack_roll_type = /datum/storyteller_roll/attack/kick damage_roll_type = /datum/storyteller_roll/damage/kick damage_bonus_dice++ + else if(atk_effect == ATTACK_EFFECT_CLAW) + attack_roll_type = /datum/storyteller_roll/attack/claw + damage_roll_type = /datum/storyteller_roll/damage/claw + damage_bonus_dice += 2 user.do_attack_animation(target, atk_effect) diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 27ffa1df3e54..edb52ef85761 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -20,7 +20,7 @@ /datum/emote/living/carbon/human/glasses/can_run_emote(mob/user, status_check = TRUE, intentional, params) var/obj/eyes_slot = user.get_item_by_slot(ITEM_SLOT_EYES) - if(istype(eyes_slot, /obj/item/clothing/glasses) || istype(eyes_slot, /obj/item/clothing/glasses/sunglasses)) // DARKPACK EDIT CHANGE - Original : if(istype(eyes_slot, /obj/item/clothing/glasses/regular) || istype(eyes_slot, /obj/item/clothing/glasses/sunglasses)) + if(istype(eyes_slot, /obj/item/clothing/glasses) || istype(eyes_slot, /obj/item/clothing/glasses/sunglasses)) // DARKPACK EDIT CHANGE - ORIGINAL: if(istype(eyes_slot, /obj/item/clothing/glasses/regular) || istype(eyes_slot, /obj/item/clothing/glasses/sunglasses)) return ..() return FALSE diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm index cac94283d815..be7c9c052ae6 100644 --- a/code/modules/mob/living/carbon/human/human_helpers.dm +++ b/code/modules/mob/living/carbon/human/human_helpers.dm @@ -40,7 +40,7 @@ name = get_visible_name() /// Combines get_id_name() and get_face_name() to determine a mob's name variable. Made into a separate proc as it'll be useful elsewhere -/mob/living/carbon/human/get_visible_name(add_id_name = TRUE, force_real_name = FALSE, mob/examiner) // DARKPACK EDIT, ORIGINAL: /mob/living/carbon/human/get_visible_name(add_id_name = TRUE, force_real_name = FALSE) +/mob/living/carbon/human/get_visible_name(add_id_name = TRUE, force_real_name = FALSE, mob/examiner) // DARKPACK EDIT CHANGE - ORIGINAL: /mob/living/carbon/human/get_visible_name(add_id_name = TRUE, force_real_name = FALSE) var/list/identity = list(null, null, null) SEND_SIGNAL(src, COMSIG_HUMAN_GET_VISIBLE_NAME, identity) var/signal_face = LAZYACCESS(identity, VISIBLE_NAME_FACE) @@ -49,7 +49,7 @@ if(force_set) // our name is overriden by something return signal_face // no need to null-check, because force_set will always set a signal_face - var/face_name = isnull(signal_face) ? get_face_name() : signal_face // DARKPACK EDIT, ORIGINAL: var/face_name = isnull(signal_face) ? get_face_name("") : signal_face + var/face_name = isnull(signal_face) ? get_face_name() : signal_face // DARKPACK EDIT CHANGE - ORIGINAL: var/face_name = isnull(signal_face) ? get_face_name("") : signal_face var/id_name = isnull(signal_id) ? get_id_name("", honorifics = add_id_name) : signal_id // We need to account for real name @@ -59,7 +59,7 @@ // We're just some unknown guy if(HAS_TRAIT(src, TRAIT_UNKNOWN_APPEARANCE) || HAS_TRAIT(src, TRAIT_INVISIBLE_MAN)) - return get_generic_name(prefixed = TRUE, lowercase = TRUE) // DARKPACK EDIT, ORIGINAL: return "Unknown" + return get_generic_name(prefixed = TRUE, lowercase = TRUE) // DARKPACK EDIT CHANGE - ORIGINAL: return "Unknown" // We have a face and an ID if(face_name && id_name) @@ -74,7 +74,7 @@ // DARKPACK EDIT ADD END // Just go down the list of stuff we recorded - return known_name || face_name || id_name || get_generic_name(prefixed = TRUE, lowercase = TRUE) // DARKPACK EDIT, ORIGINAL: return face_name || id_name || "Unknown" + return known_name || face_name || id_name || get_generic_name(prefixed = TRUE, lowercase = TRUE) // DARKPACK EDIT CHANGE - ORIGINAL: return face_name || id_name || "Unknown" /** * Gets what the face of this mob looks like @@ -82,12 +82,12 @@ * * if_no_face - What to return if we have no face or our face is obscured/disfigured */ /mob/living/carbon/proc/get_face_name(if_no_face = "Unknown") - return // DARKPACK EDIT, ORIGINAL: return real_name + return // DARKPACK EDIT CHANGE - ORIGINAL: return real_name /mob/living/carbon/human/get_face_name(if_no_face = "Unknown") if(!real_name || is_face_obscured()) return if_no_face - return // DARKPACK EDIT, ORIGINAL: return real_name + return // DARKPACK EDIT CHANGE - ORIGINAL: return real_name /mob/living/carbon/human/proc/is_face_obscured() if(HAS_TRAIT(src, TRAIT_UNKNOWN_APPEARANCE)) diff --git a/code/modules/mob/living/carbon/human/human_say.dm b/code/modules/mob/living/carbon/human/human_say.dm index cbd8742b5106..4c0343190102 100644 --- a/code/modules/mob/living/carbon/human/human_say.dm +++ b/code/modules/mob/living/carbon/human/human_say.dm @@ -39,7 +39,7 @@ return override_voice if(add_id_name && real_name == id_name) // Allows for "Captain John" to have the voice "Captain Join" and not "John" return get_id_name("", honorifics = TRUE) - return name // DARKPACK EDIT, ORIGINAL: return real_name + return name // DARKPACK EDIT CHANGE - ORIGINAL: return real_name /mob/living/carbon/human/get_message_voice(visible_name) . = ..() diff --git a/code/modules/mob/living/carbon/human/init_signals.dm b/code/modules/mob/living/carbon/human/init_signals.dm index 923ec33f2128..55ab5d6b6b82 100644 --- a/code/modules/mob/living/carbon/human/init_signals.dm +++ b/code/modules/mob/living/carbon/human/init_signals.dm @@ -14,10 +14,6 @@ RegisterSignals(src, list(SIGNAL_ADDTRAIT(TRAIT_HUSK), SIGNAL_REMOVETRAIT(TRAIT_HUSK)), PROC_REF(refresh_obscured)) RegisterSignals(src, list(SIGNAL_ADDTRAIT(TRAIT_INVISIBLE_MAN), SIGNAL_REMOVETRAIT(TRAIT_INVISIBLE_MAN)), PROC_REF(invisible_man_toggle)) - //DARKPACK EDIT ADD START - POWERS - (Obfuscate Discipline) - RegisterSignal(src, SIGNAL_ADDTRAIT(TRAIT_OBFUSCATED), PROC_REF(make_invisible)) - RegisterSignal(src, SIGNAL_REMOVETRAIT(TRAIT_OBFUSCATED), PROC_REF(make_visible)) - //DARKPACK EDIT ADD END /// Gaining or losing [TRAIT_DWARF] updates our height and grants passtable /mob/living/carbon/human/proc/on_dwarf_trait(datum/source) diff --git a/code/modules/mob/living/carbon/human/physiology.dm b/code/modules/mob/living/carbon/human/physiology.dm index 507f1eb60947..a94e9d76fd46 100644 --- a/code/modules/mob/living/carbon/human/physiology.dm +++ b/code/modules/mob/living/carbon/human/physiology.dm @@ -41,7 +41,7 @@ var/datum/armor/armor // internal armor datum - var/hunger_mod = 0.2 //% of hunger rate taken per tick. //DARKPACK EDIT CHANGE - Original : var/hunger_mod = 1 + var/hunger_mod = 0.2 //% of hunger rate taken per tick. // DARKPACK EDIT CHANGE - ORIGINAL: var/hunger_mod = 1 /datum/physiology/New() armor = new diff --git a/code/modules/mob/living/carbon/human/species_types/dullahan.dm b/code/modules/mob/living/carbon/human/species_types/dullahan.dm index 2c9c1127edf2..59bd21e22143 100644 --- a/code/modules/mob/living/carbon/human/species_types/dullahan.dm +++ b/code/modules/mob/living/carbon/human/species_types/dullahan.dm @@ -276,7 +276,7 @@ detached_head.copy_appearance_from(headless, overwrite_eyes = TRUE) detached_head.update_icon_dropped() -/obj/item/dullahan_relay/Hear(atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range, source) // DARKPACK EDIT, ORIGINAL: /obj/item/dullahan_relay/Hear(atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range) +/obj/item/dullahan_relay/Hear(atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range, source) // DARKPACK EDIT CHANGE - ORIGINAL: /obj/item/dullahan_relay/Hear(atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range) . = ..() var/dist = get_dist(speaker, src) - message_range if(dist > 0 && dist <= EAVESDROP_EXTRA_RANGE) diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 06e5e4d4c7fd..879544411f0e 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -477,7 +477,7 @@ return var/datum/blood_type/blood_type = get_bloodtype() - if(!(blood_type.reagent_type in typesof(chem.type))) // DARKPACK EDIT, ORIGINAL: if(blood_type.reagent_type != chem.type) + if(!(blood_type.reagent_type in typesof(chem.type))) // DARKPACK EDIT CHANGE - ORIGINAL: if(blood_type.reagent_type != chem.type) return var/cached_blood_volume = get_blood_volume() diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 63e601e472b3..02cd45cdae9c 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -666,7 +666,7 @@ /mob/living/proc/get_bank_account() RETURN_TYPE(/datum/bank_account) var/datum/bank_account/account - var/obj/item/card/credit/I = get_creditcard() // DARKPACK EDIT - ORIGINAL: var/obj/item/card/id/I = get_idcard() + var/obj/item/card/credit/I = get_creditcard() // DARKPACK EDIT CHANGE - ORIGINAL: var/obj/item/card/id/I = get_idcard() if(I?.registered_account) account = I.registered_account diff --git a/code/modules/mob/living/living_say.dm b/code/modules/mob/living/living_say.dm index 6547b91a7ebf..f8a998adb744 100644 --- a/code/modules/mob/living/living_say.dm +++ b/code/modules/mob/living/living_say.dm @@ -274,7 +274,7 @@ GLOBAL_LIST_INIT(message_modes_stat_limits, list( return TRUE -/mob/living/Hear(atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range=0, source) // DARKPACK EDIT, ORIGINAL: /mob/living/Hear(atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range=0) +/mob/living/Hear(atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range=0, source) // DARKPACK EDIT CHANGE - ORIGINAL: /mob/living/Hear(atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range=0) if((SEND_SIGNAL(src, COMSIG_MOVABLE_PRE_HEAR, args) & COMSIG_MOVABLE_CANCEL_HEARING) || !GET_CLIENT(src)) return FALSE @@ -383,7 +383,7 @@ GLOBAL_LIST_INIT(message_modes_stat_limits, list( create_chat_message(speaker, message_language, raw_message, spans) // Recompose message for AI hrefs, language incomprehension. - message = compose_message(speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, spans, message_mods, source = source) // DARKPACK EDIT, ORIGINAL: message = compose_message(speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, spans, message_mods) + message = compose_message(speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, spans, message_mods, source = source) // DARKPACK EDIT CHANGE - ORIGINAL: message = compose_message(speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, spans, message_mods) var/show_message_success = show_message(message, MSG_AUDIBLE, deaf_message, deaf_type, avoid_highlight) return understood && show_message_success diff --git a/code/modules/mob/living/silicon/ai/freelook/eye.dm b/code/modules/mob/living/silicon/ai/freelook/eye.dm index 40ffef06fc7d..8e245b45d7c1 100644 --- a/code/modules/mob/living/silicon/ai/freelook/eye.dm +++ b/code/modules/mob/living/silicon/ai/freelook/eye.dm @@ -220,7 +220,7 @@ acceleration = !acceleration to_chat(usr, "Camera acceleration has been toggled [acceleration ? "on" : "off"].") -/mob/eye/camera/ai/Hear(atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range, source) // DARKPACK EDIT, ORIGINAL: /mob/eye/camera/ai/Hear(atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range) +/mob/eye/camera/ai/Hear(atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range, source) // DARKPACK EDIT CHANGE - ORIGINAL: /mob/eye/camera/ai/Hear(atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range) . = ..() if(relay_speech && speaker && ai && !radio_freq && speaker != ai && SScameras.is_visible_by_cameras(speaker)) ai.relay_speech(speaker, message_language, raw_message, radio_freq, spans, message_mods) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 30e9f956aa58..dfed8f5d0dbe 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -292,7 +292,7 @@ var/raw_msg = message var/space = should_have_space_before_emote(html_decode(message)[1]) ? " " : "" // DARKPACK EDIT ADD if(visible_message_flags & WITH_EMPHASIS_MESSAGE) - raw_msg = apply_message_emphasis(message) // DARKPACK EDIT, ORIGINAL: message = apply_message_emphasis(message) + raw_msg = apply_message_emphasis(message) // DARKPACK EDIT CHANGE - ORIGINAL: message = apply_message_emphasis(message) /* // DARKPACK EDIT REMOVAL START if(visible_message_flags & EMOTE_MESSAGE) message = span_emote("[src] [message]") @@ -304,10 +304,10 @@ if(self_message && hearing_mob == src) continue - // DARKPACK EDIT ADDITION START + // DARKPACK EDIT ADD START if(visible_message_flags & EMOTE_MESSAGE) message = span_emote("[GET_GUESTBOOK_NAME(hearing_mob, src)][space][raw_msg]") - // DARKPACK EDIT ADDITION END + // DARKPACK EDIT ADD END //This entire if/else chain could be in two lines but isn't for readibilties sake. var/msg = message @@ -343,7 +343,7 @@ if(visible_message_flags & WITH_EMPHASIS_MESSAGE) self_message = apply_message_emphasis(self_message) if(visible_message_flags & EMOTE_MESSAGE) - self_message = span_emote("[real_name][space][self_message]") // May make more sense as "You do x" // DARKPACK EDIT CHANGE, ORIGINAL: self_message = span_emote("[src] [self_message]") + self_message = span_emote("[real_name][space][self_message]") // May make more sense as "You do x" // DARKPACK EDIT CHANGE - ORIGINAL: self_message = span_emote("[src] [self_message]") if(visible_message_flags & ALWAYS_SHOW_SELF_MESSAGE) to_chat(src, self_message, avoid_highlighting = block_self_highlight) @@ -371,7 +371,7 @@ var/raw_msg = message var/space = should_have_space_before_emote(html_decode(message)[1]) ? " " : "" // DARKPACK EDIT ADD if(audible_message_flags & WITH_EMPHASIS_MESSAGE) - raw_msg = apply_message_emphasis(message) // DARKPACK EDIT, ORIGINAL: message = apply_message_emphasis(message) + raw_msg = apply_message_emphasis(message) // DARKPACK EDIT CHANGE - ORIGINAL: message = apply_message_emphasis(message) /* // DARKPACK EDIT REMOVAL START if(audible_message_flags & EMOTE_MESSAGE) message = span_emote("[src] [message]") @@ -381,10 +381,10 @@ continue if(self_message && hearing_mob == src) continue - // DARKPACK EDIT ADDITION START + // DARKPACK EDIT ADD START if(audible_message_flags & EMOTE_MESSAGE) message = span_emote("[GET_GUESTBOOK_NAME(hearing_mob, src)][space][raw_msg]") - // DARKPACK EDIT ADDITION END + // DARKPACK EDIT ADD END if(audible_message_flags & EMOTE_MESSAGE && runechat_prefs_check(hearing_mob, audible_message_flags) && !HAS_TRAIT(hearing_mob, TRAIT_DEAF)) hearing_mob.create_chat_message(src, raw_message = raw_msg, runechat_flags = audible_message_flags) hearing_mob.show_message(message, MSG_AUDIBLE, deaf_message, MSG_VISUAL) @@ -411,7 +411,7 @@ if(audible_message_flags & WITH_EMPHASIS_MESSAGE) self_message = apply_message_emphasis(self_message) if(audible_message_flags & EMOTE_MESSAGE) - self_message = span_emote("[GET_GUESTBOOK_NAME(src, src)][space][self_message]") // DARKPACK EDIT CHANGE, ORIGINAL: self_message = span_emote("[src] [self_message]") + self_message = span_emote("[GET_GUESTBOOK_NAME(src, src)][space][self_message]") // DARKPACK EDIT CHANGE - ORIGINAL: self_message = span_emote("[src] [self_message]") if(audible_message_flags & ALWAYS_SHOW_SELF_MESSAGE) to_chat(src, self_message, avoid_highlighting = block_self_highlight) diff --git a/code/modules/mod/mod_link.dm b/code/modules/mod/mod_link.dm index d7fc7070605b..31797198dc85 100644 --- a/code/modules/mod/mod_link.dm +++ b/code/modules/mod/mod_link.dm @@ -117,7 +117,7 @@ /obj/item/mod/control/proc/delete_link_visual(mob/living/old_user) return delete_link_visual_generic(mod_link, old_user) -/obj/item/mod/control/Hear(atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods, message_range, source) // DARKPACK EDIT, ORIGINAL: /obj/item/mod/control/Hear(atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods, message_range) +/obj/item/mod/control/Hear(atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods, message_range, source) // DARKPACK EDIT CHANGE - ORIGINAL: /obj/item/mod/control/Hear(atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods, message_range) . = ..() if(speaker != wearer && speaker != ai_assistant) return @@ -296,7 +296,7 @@ old_user.update_worn_neck() return delete_link_visual_generic(mod_link, old_user) -/obj/item/clothing/neck/link_scryer/Hear(atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods, message_range, source) // DARKPACK EDIT, ORIGINAL: /obj/item/clothing/neck/link_scryer/Hear(atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods, message_range) +/obj/item/clothing/neck/link_scryer/Hear(atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods, message_range, source) // DARKPACK EDIT CHANGE - ORIGINAL: /obj/item/clothing/neck/link_scryer/Hear(atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods, message_range) . = ..() if(speaker != loc) return diff --git a/code/modules/movespeed/modifiers/mobs.dm b/code/modules/movespeed/modifiers/mobs.dm index 228b2539f91b..2dcef451fdf9 100644 --- a/code/modules/movespeed/modifiers/mobs.dm +++ b/code/modules/movespeed/modifiers/mobs.dm @@ -1,6 +1,6 @@ /datum/movespeed_modifier/obesity // large weight slows even if flying and floating - multiplicative_slowdown = 1.2 //DARKPACK EDIT CHANGE - Original : multiplicative_slowdown = 1.2 + multiplicative_slowdown = 1.2 // DARKPACK EDIT CHANGE - ORIGINAL: multiplicative_slowdown = 1.2 /datum/movespeed_modifier/monkey_reagent_speedmod variable = TRUE diff --git a/code/modules/paperwork/paper_premade.dm b/code/modules/paperwork/paper_premade.dm index b5686fa7c96a..fee1cf9fa40a 100644 --- a/code/modules/paperwork/paper_premade.dm +++ b/code/modules/paperwork/paper_premade.dm @@ -439,7 +439,7 @@
Blood types not written above can only receive from the same blood type. - "} // DARKPACK EDIT REMOVE - Removed "Certain species do not have blood." + "} // DARKPACK EDIT REMOVAL - Removed "Certain species do not have blood." /* * Stations diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index 2e2c0d60aec5..c9cdd89d6b51 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -24,7 +24,7 @@ . = ..() ADD_TRAIT(src, TRAIT_FISHING_BAIT, INNATE_TRAIT) ADD_TRAIT(src, TRAIT_POISONOUS_BAIT, INNATE_TRAIT) //bro is fishing using lithium... - /* // DARKPACK EDIT REMOVE + /* // DARKPACK EDIT REMOVAL var/static/list/slapcraft_recipe_list = list(/datum/crafting_recipe/battery_match) AddElement( /datum/element/slapcrafting,\ diff --git a/code/modules/projectiles/ammunition/ballistic/shotgun.dm b/code/modules/projectiles/ammunition/ballistic/shotgun.dm index da0e31fc9301..0877e5bfb6d6 100644 --- a/code/modules/projectiles/ammunition/ballistic/shotgun.dm +++ b/code/modules/projectiles/ammunition/ballistic/shotgun.dm @@ -185,7 +185,7 @@ desc = "A high-tech shotgun shell which can be loaded with materials to produce unique effects." icon_state = "cshell" projectile_type = null -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /obj/item/ammo_casing/shotgun/techshell/Initialize(mapload) . = ..() diff --git a/code/modules/projectiles/guns/energy/energy_gun.dm b/code/modules/projectiles/guns/energy/energy_gun.dm index 64241bfb5e5a..b0e19b4e7339 100644 --- a/code/modules/projectiles/guns/energy/energy_gun.dm +++ b/code/modules/projectiles/guns/energy/energy_gun.dm @@ -15,7 +15,7 @@ // Only actual eguns can be converted if(type != /obj/item/gun/energy/e_gun) return - /*// DARKPACK EDIT REMOVE + /*// DARKPACK EDIT REMOVAL var/static/list/slapcraft_recipe_list = list(/datum/crafting_recipe/advancedegun, /datum/crafting_recipe/tempgun, /datum/crafting_recipe/beam_rifle) AddElement( diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index 23fc3430814e..64424d2a644d 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -25,7 +25,7 @@ // Only actual KAs can be converted if(type != /obj/item/gun/energy/recharge/kinetic_accelerator) return - /* // DARKPACK EDIT REMOVE + /* // DARKPACK EDIT REMOVAL var/static/list/slapcraft_recipe_list = list(/datum/crafting_recipe/ebow) AddElement( diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index 5cc5c679dec9..b48515ae9589 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -22,7 +22,7 @@ /datum/element/slapcrafting,\ slapcraft_recipes = slapcraft_recipe_list,\ ) - */ // DARKPACK EDIT REMOVE + */ // DARKPACK EDIT REMOVAL /obj/item/gun/energy/laser/add_seclight_point() AddComponent(/datum/component/seclite_attachable, \ diff --git a/code/modules/projectiles/pins.dm b/code/modules/projectiles/pins.dm index c6d6cfb0d525..c262c10575fa 100644 --- a/code/modules/projectiles/pins.dm +++ b/code/modules/projectiles/pins.dm @@ -73,7 +73,7 @@ return /obj/item/firing_pin/proc/pin_auth(mob/living/user) - var/result = ALLOW_FIRE // DARKPACK EDIT ADD - Removes firing pin authorization - Original : var/result = SEND_SIGNAL(user, COMSIG_LIVING_FIRING_PIN_CHECK, src) + var/result = ALLOW_FIRE // DARKPACK EDIT ADD - Removes firing pin authorization - ORIGINAL: var/result = SEND_SIGNAL(user, COMSIG_LIVING_FIRING_PIN_CHECK, src) if(result & ALLOW_FIRE) return TRUE if(result & BLOCK_FIRE) diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 91d408a885e8..021c7d9b70bc 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -48,10 +48,13 @@ return list("[blood_type] type blood" = 1) // DARKPACK EDIT ADD - blood increments bloodpool -/datum/reagent/blood/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) +/datum/reagent/blood/expose_mob(mob/living/exposed_mob, methods, reac_volume, show_message, touch_protection) . = ..() - if((!istype(src, /datum/reagent/blood/vitae)) && get_kindred_splat(affected_mob)) - affected_mob.adjust_blood_pool(metabolization_rate * 0.005 * seconds_per_tick) + if((!istype(src, /datum/reagent/blood/vitae)) && get_kindred_splat(exposed_mob)) + if(methods & INGEST) + if(get_splat_with_vitae(exposed_mob)) + //100u of vitae = 1bp, keeping consistent w/ give vitae action. 200u of normal blood = 1 bp + exposed_mob.adjust_blood_pool(reac_volume * 0.005) // DARKPACK EDIT ADD END /datum/reagent/consumable/liquidgibs diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm index 5ee03126b6ef..12bd5470bea6 100644 --- a/code/modules/reagents/reagent_containers/blood_pack.dm +++ b/code/modules/reagents/reagent_containers/blood_pack.dm @@ -32,7 +32,7 @@ /obj/item/reagent_containers/blood/random/Initialize(mapload, vol) icon_state = "bloodpack" - blood_type = random_human_blood_type_name() // DARKPACK EDIT, ORIGINAL: blood_type = pick(BLOOD_TYPE_A_PLUS, BLOOD_TYPE_A_MINUS, BLOOD_TYPE_B_PLUS, BLOOD_TYPE_B_MINUS, BLOOD_TYPE_O_PLUS, BLOOD_TYPE_O_MINUS, BLOOD_TYPE_LIZARD) + blood_type = random_human_blood_type_name() // DARKPACK EDIT CHANGE - ORIGINAL: blood_type = pick(BLOOD_TYPE_A_PLUS, BLOOD_TYPE_A_MINUS, BLOOD_TYPE_B_PLUS, BLOOD_TYPE_B_MINUS, BLOOD_TYPE_O_PLUS, BLOOD_TYPE_O_MINUS, BLOOD_TYPE_LIZARD) return ..() /obj/item/reagent_containers/blood/a_plus diff --git a/code/modules/research/anomaly/anomaly_core.dm b/code/modules/research/anomaly/anomaly_core.dm index 3e12dd2e9e9e..c0bfbe678edd 100644 --- a/code/modules/research/anomaly/anomaly_core.dm +++ b/code/modules/research/anomaly/anomaly_core.dm @@ -170,7 +170,7 @@ var/datum/dimension_theme/theme = SSmaterials.dimensional_themes[new_theme_path] for(var/turf/turf as anything in RANGE_TURFS(1, our_turf)) theme.apply_theme(turf, show_effect = TRUE) -/* // DARKPACK EDIT REMOVE +/* // DARKPACK EDIT REMOVAL /obj/item/assembly/signaler/anomaly/dimensional/Initialize(mapload) . = ..() var/static/list/recipes = list(/datum/crafting_recipe/dimensional_bombcore) diff --git a/code/modules/spells/spell_types/shapeshift/_shapeshift.dm b/code/modules/spells/spell_types/shapeshift/_shapeshift.dm index 8e9e70ef2fb4..5d03acb297a3 100644 --- a/code/modules/spells/spell_types/shapeshift/_shapeshift.dm +++ b/code/modules/spells/spell_types/shapeshift/_shapeshift.dm @@ -170,7 +170,7 @@ polymorph_bot.bot_cover_flags |= BOT_COVER_EMAGGED polymorph_bot.bot_mode_flags &= ~BOT_MODE_REMOTE_ENABLED - new_shape.storyteller_stats = caster.storyteller_stats //DARKPACK EDIT ADD + new_shape.storyteller_stats = caster.storyteller_stats // DARKPACK EDIT ADD - STORYTELLER_STATS return new_shape diff --git a/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm index 7d16dbefc5c2..7c4cd5797a29 100644 --- a/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm @@ -176,41 +176,41 @@ ///ZOMBIE /obj/item/bodypart/head/zombie limb_id = SPECIES_ZOMBIE - is_dimorphic = TRUE // DARKPACK EDIT -- original : is_dimorphic = FALSE - should_draw_greyscale = TRUE // DARKPACK EDIT -- original : should_draw_grayscale = FALSE + is_dimorphic = TRUE // DARKPACK EDIT CHANGE - ORIGINAL: is_dimorphic = FALSE + should_draw_greyscale = TRUE // DARKPACK EDIT CHANGE - ORIGINAL: should_draw_grayscale = FALSE head_flags = HEAD_EYESPRITES|HEAD_DEBRAIN can_dismember = TRUE /obj/item/bodypart/chest/zombie limb_id = SPECIES_ZOMBIE - is_dimorphic = TRUE // DARKPACK EDIT -- original : is_dimorphic = FALSE - should_draw_greyscale = TRUE // DARKPACK EDIT -- original : should_draw_grayscale = FALSE + is_dimorphic = TRUE // DARKPACK EDIT CHANGE - ORIGINAL: is_dimorphic = FALSE + should_draw_greyscale = TRUE // DARKPACK EDIT CHANGE - ORIGINAL: should_draw_grayscale = FALSE wing_types = null /obj/item/bodypart/arm/left/zombie limb_id = SPECIES_ZOMBIE - should_draw_greyscale = TRUE // DARKPACK EDIT -- original : should_draw_grayscale = FALSE + should_draw_greyscale = TRUE // DARKPACK EDIT CHANGE - ORIGINAL: should_draw_grayscale = FALSE /obj/item/bodypart/arm/right/zombie limb_id = SPECIES_ZOMBIE - should_draw_greyscale = TRUE // DARKPACK EDIT -- original : should_draw_grayscale = FALSE + should_draw_greyscale = TRUE // DARKPACK EDIT CHANGE - ORIGINAL: should_draw_grayscale = FALSE /obj/item/bodypart/leg/left/zombie limb_id = SPECIES_ZOMBIE - should_draw_greyscale = TRUE // DARKPACK EDIT -- original : should_draw_grayscale = FALSE + should_draw_greyscale = TRUE // DARKPACK EDIT CHANGE - ORIGINAL: should_draw_grayscale = FALSE /obj/item/bodypart/leg/right/zombie limb_id = SPECIES_ZOMBIE - should_draw_greyscale = TRUE // DARKPACK EDIT -- original : should_draw_grayscale = FALSE + should_draw_greyscale = TRUE // DARKPACK EDIT CHANGE - ORIGINAL: should_draw_grayscale = FALSE /obj/item/bodypart/leg/left/zombie/infectious limb_id = SPECIES_ZOMBIE - should_draw_greyscale = TRUE // DARKPACK EDIT -- original : should_draw_grayscale = FALSE + should_draw_greyscale = TRUE // DARKPACK EDIT CHANGE - ORIGINAL: should_draw_grayscale = FALSE speed_modifier = 0.8 //braaaaains /obj/item/bodypart/leg/right/zombie/infectious limb_id = SPECIES_ZOMBIE - should_draw_greyscale = TRUE // DARKPACK EDIT -- original : should_draw_grayscale = FALSE + should_draw_greyscale = TRUE // DARKPACK EDIT CHANGE - ORIGINAL: should_draw_grayscale = FALSE speed_modifier = 0.8 //braaaaains ///PODPEOPLE diff --git a/code/modules/surgery/organs/external/wings/functional_wings.dm b/code/modules/surgery/organs/external/wings/functional_wings.dm index 11e629ddd5fd..ae84f98605be 100644 --- a/code/modules/surgery/organs/external/wings/functional_wings.dm +++ b/code/modules/surgery/organs/external/wings/functional_wings.dm @@ -4,8 +4,8 @@ /datum/action/innate/flight name = "Toggle Flight" check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_IMMOBILE|AB_CHECK_INCAPACITATED - button_icon = 'modular_darkpack/master_files/icons/hud/actions.dmi' // DARKPACK EDIT CHANGE - Original : button_icon = 'icons/mob/actions/actions_items.dmi' - button_icon_state = "fly" // DARKPACK EDIT CHANGE - Original : button_icon_state = "flight" + button_icon = 'modular_darkpack/master_files/icons/hud/actions.dmi' // DARKPACK EDIT CHANGE - ORIGINAL: button_icon = 'icons/mob/actions/actions_items.dmi' + button_icon_state = "fly" // DARKPACK EDIT CHANGE - ORIGINAL: button_icon_state = "flight" /datum/action/innate/flight/Activate() var/mob/living/carbon/human/human = owner diff --git a/code/modules/surgery/organs/internal/stomach/_stomach.dm b/code/modules/surgery/organs/internal/stomach/_stomach.dm index 50b7e2ce9c61..80c6772ed851 100644 --- a/code/modules/surgery/organs/internal/stomach/_stomach.dm +++ b/code/modules/surgery/organs/internal/stomach/_stomach.dm @@ -35,7 +35,7 @@ var/metabolism_efficiency = 0.05 // the lowest we should go is 0.025 /// Multiplier for hunger rate - var/hunger_modifier = 0.2 // DARKPACK EDIT CHANGE - Original : var/hunger_modifier = 1 + var/hunger_modifier = 0.2 // DARKPACK EDIT CHANGE - ORIGINAL: var/hunger_modifier = 1 /// Whether the stomach's been repaired with surgery and can be fixed again or not var/operated = FALSE /// List of all atoms within the stomach @@ -201,7 +201,7 @@ /obj/item/organ/stomach/proc/handle_hunger_slowdown(mob/living/carbon/human/human) var/hungry = (500 - human.nutrition) / 5 //So overeat would be 100 and default level would be 80 if(hungry >= 70) - human.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/hunger, multiplicative_slowdown = (hungry / 80)) // DARKPACK EDIT CHANGE - ORIGINAL : human.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/hunger, multiplicative_slowdown = (hungry / 50)) + human.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/hunger, multiplicative_slowdown = (hungry / 80)) // DARKPACK EDIT CHANGE - ORIGINAL: human.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/hunger, multiplicative_slowdown = (hungry / 50)) else human.remove_movespeed_modifier(/datum/movespeed_modifier/hunger) diff --git a/code/modules/tgui_input/say_modal/modal.dm b/code/modules/tgui_input/say_modal/modal.dm index 9944ee74e609..2f4fb23f1f82 100644 --- a/code/modules/tgui_input/say_modal/modal.dm +++ b/code/modules/tgui_input/say_modal/modal.dm @@ -92,7 +92,7 @@ if(!payload?["channel"]) CRASH("No channel provided to an open TGUI-Say") window_open = TRUE - if(payload["channel"] != OOC_CHANNEL && payload["channel"] != ADMIN_CHANNEL && payload["channel"] != LOOC_CHANNEL) // DARKPACK EDIT, ORIGINAL: if(payload["channel"] != OOC_CHANNEL && payload["channel"] != ADMIN_CHANNEL) + if(payload["channel"] != OOC_CHANNEL && payload["channel"] != ADMIN_CHANNEL && payload["channel"] != LOOC_CHANNEL) // DARKPACK EDIT CHANGE - ORIGINAL: if(payload["channel"] != OOC_CHANNEL && payload["channel"] != ADMIN_CHANNEL) start_thinking() if(!client.typing_indicators) log_speech_indicators("[key_name(client)] started typing at [loc_name(client.mob)], indicators DISABLED.") diff --git a/code/modules/tgui_input/say_modal/speech.dm b/code/modules/tgui_input/say_modal/speech.dm index 12e37dbe2e0b..318f9cc002be 100644 --- a/code/modules/tgui_input/say_modal/speech.dm +++ b/code/modules/tgui_input/say_modal/speech.dm @@ -12,7 +12,7 @@ var/list/phrases = alter_phrases || hurt_phrases /// No OOC leaks - if(!entry || payload["channel"] == OOC_CHANNEL || payload["channel"] == ME_CHANNEL || payload["channel"] == LOOC_CHANNEL) // DARKPACK EDIT, ORIGINAL: if(!entry || payload["channel"] == OOC_CHANNEL || payload["channel"] == ME_CHANNEL) + if(!entry || payload["channel"] == OOC_CHANNEL || payload["channel"] == ME_CHANNEL || payload["channel"] == LOOC_CHANNEL) // DARKPACK EDIT CHANGE - ORIGINAL: if(!entry || payload["channel"] == OOC_CHANNEL || payload["channel"] == ME_CHANNEL) return pick(phrases) /// Random trimming for larger sentences if(length(entry) > 50) @@ -139,7 +139,7 @@ return TRUE if(type == "force") var/target_channel = payload["channel"] - if(target_channel == ME_CHANNEL || target_channel == OOC_CHANNEL || target_channel == LOOC_CHANNEL) // DARKPACK EDIT, ORIGINAL: if(target_channel == ME_CHANNEL || target_channel == OOC_CHANNEL) + if(target_channel == ME_CHANNEL || target_channel == OOC_CHANNEL || target_channel == LOOC_CHANNEL) // DARKPACK EDIT CHANGE - ORIGINAL: if(target_channel == ME_CHANNEL || target_channel == OOC_CHANNEL) target_channel = SAY_CHANNEL // No ooc leaks delegate_speech(alter_entry(payload), target_channel) return TRUE diff --git a/code/modules/unit_tests/quirks.dm b/code/modules/unit_tests/quirks.dm index edc80fc96250..8a31b5ac2983 100644 --- a/code/modules/unit_tests/quirks.dm +++ b/code/modules/unit_tests/quirks.dm @@ -10,7 +10,7 @@ if (isnull(icon)) TEST_FAIL("[quirk_type] has no icon!") continue - /* DARKPACK EDIT REMOVAL - MERITS/FLAWS + /* DARKPACK EDIT REMOVAL - MERITS_FLAWS if (icon in used_icons) TEST_FAIL("[icon] used in both [quirk_type] and [used_icons[icon]]!") continue @@ -22,7 +22,7 @@ /datum/unit_test/quirk_initial_medical_records /datum/unit_test/quirk_initial_medical_records/Run() - /* DARKPACK EDIT REMOVAL - MERITS/FLAWS - we don't need this and darkpack quirk splat/clan exclusion makes it impossible to add to a random test character with no splats + /* DARKPACK EDIT REMOVAL - MERITS_FLAWS - we don't need this and darkpack quirk splat/clan exclusion makes it impossible to add to a random test character with no splats var/mob/living/carbon/human/patient = allocate(/mob/living/carbon/human/consistent) for(var/datum/quirk/quirk_type as anything in valid_subtypesof(/datum/quirk)) @@ -50,7 +50,7 @@ ) /datum/unit_test/blood_deficiency_mail/Run() - /* DARKPACK EDIT REMOVAL - MERITS/FLAWS - we are not using /tg/ quirks + /* DARKPACK EDIT REMOVAL - MERITS_FLAWS - we are not using /tg/ quirks var/mob/living/carbon/human/dummy = allocate(/mob/living/carbon/human/consistent) dummy.add_quirk(/datum/quirk/blooddeficiency) var/datum/quirk/blooddeficiency/quirk = dummy.get_quirk(/datum/quirk/blooddeficiency) @@ -88,7 +88,7 @@ GLOB.uncommon_roundstart_languages = list(/datum/language/uncommon) for (var/datum/quirk/quirk_type as anything in valid_subtypesof(/datum/quirk)) - // DARKPACK EDIT ADD START - MERITS/FLAWS + // DARKPACK EDIT ADD START - MERITS_FLAWS if(!quirk_type::darkpack_allowed) continue var/list/forbidden_splats_test @@ -110,7 +110,7 @@ new_character.mind_initialize() abstract_player.new_character = new_character - // DARKPACK EDIT ADD START - MERITS/FLAWS + // DARKPACK EDIT ADD START - MERITS_FLAWS // if allowed splats, add the allowed splat, then test, failure if its not added if(allowed_splats_test) for(var/datum/splat/allowed_splat in allowed_splats_test) @@ -131,7 +131,7 @@ if(!forbidden_splats_test && !allowed_splats_test && !excluded_clans_test && !included_clans_test) if (!new_character.add_quirk(quirk_type, roundstart_mock_client)) TEST_FAIL("Failed to initialize quirk [quirk_type] on a roundstart character!") - // DARKPACK EDIT ADD END - MERITS/FLAWS + // DARKPACK EDIT ADD END - MERITS_FLAWS var/mob/living/carbon/human/latejoin_character = allocate(/mob/living/carbon/human/consistent) var/datum/client_interface/latejoin_mock_client = new() @@ -139,7 +139,7 @@ latejoin_character.mock_client = latejoin_mock_client latejoin_character.mind_initialize() - // DARKPACK EDIT ADD - MERITS/FLAWS + // DARKPACK EDIT ADD - MERITS_FLAWS // if allowed splats, add the allowed splat, then test, failure if its not added if(allowed_splats_test) for(var/datum/splat/allowed_splat in allowed_splats_test) @@ -160,7 +160,7 @@ if(!forbidden_splats_test && !allowed_splats_test && !excluded_clans_test && !included_clans_test) if (!latejoin_character.add_quirk(quirk_type, latejoin_mock_client)) TEST_FAIL("Failed to initialize quirk [quirk_type] on a latejoin character!") - // DARKPACK EDIT ADD END - MERITS/FLAWS + // DARKPACK EDIT ADD END - MERITS_FLAWS // Clean up after ourselves GLOB.uncommon_roundstart_languages.Cut() diff --git a/code/modules/unit_tests/say.dm b/code/modules/unit_tests/say.dm index 1e0e93fe9930..b32b9ce913ad 100644 --- a/code/modules/unit_tests/say.dm +++ b/code/modules/unit_tests/say.dm @@ -8,7 +8,7 @@ test("Hello", "Hello", list()) test(";HELP", "HELP", list(MODE_HEADSET = TRUE)) test(";%Never gonna give you up", "Never gonna give you up", list(MODE_HEADSET = TRUE, MODE_SING = TRUE)) - test(".v Gun plz", "Gun plz", list(RADIO_KEY = RADIO_KEY_SERVICE, RADIO_EXTENSION = RADIO_CHANNEL_SERVICE)) // DARKPACK EDIT, ORIGINAL: test(".s Gun plz", "Gun plz", list(RADIO_KEY = RADIO_KEY_SECURITY, RADIO_TOKEN = RADIO_TOKEN_SECURITY)) + test(".v Gun plz", "Gun plz", list(RADIO_KEY = RADIO_KEY_SERVICE, RADIO_EXTENSION = RADIO_CHANNEL_SERVICE)) // DARKPACK EDIT CHANGE - ORIGINAL: test(".s Gun plz", "Gun plz", list(RADIO_KEY = RADIO_KEY_SECURITY, RADIO_TOKEN = RADIO_TOKEN_SECURITY)) test("...What", "...What", list()) /datum/unit_test/get_message_mods/proc/test(message, expected_message, list/expected_mods) diff --git a/code/modules/unit_tests/station_trait_tests.dm b/code/modules/unit_tests/station_trait_tests.dm index 7b3557be9354..d5bbbe276f5b 100644 --- a/code/modules/unit_tests/station_trait_tests.dm +++ b/code/modules/unit_tests/station_trait_tests.dm @@ -3,7 +3,7 @@ /datum/unit_test/station_traits/Run() var/datum/station_trait/cybernetic_revolution/cyber_trait = allocate(/datum/station_trait/cybernetic_revolution) - for(var/datum/job/job as anything in subtypesof(/datum/job) - typesof(/datum/job/vampire)) // DARKPACK EDIT, ORIGINAL: for(var/datum/job/job as anything in subtypesof(/datum/job)) + for(var/datum/job/job as anything in subtypesof(/datum/job) - typesof(/datum/job/vampire)) // DARKPACK EDIT CHANGE - ORIGINAL: for(var/datum/job/job as anything in subtypesof(/datum/job)) if(!(initial(job.job_flags) & JOB_CREW_MEMBER)) continue if((initial(job.job_flags) & STATION_TRAIT_JOB_FLAGS) == STATION_TRAIT_JOB_FLAGS) diff --git a/code/modules/unit_tests/surgeries.dm b/code/modules/unit_tests/surgeries.dm index c04dcec1012b..661e48aee572 100644 --- a/code/modules/unit_tests/surgeries.dm +++ b/code/modules/unit_tests/surgeries.dm @@ -62,7 +62,7 @@ UNLINT(surgery.success(alice.get_bodypart(BODY_ZONE_HEAD, TRUE), user, bobs_head, list())) TEST_ASSERT(!isnull(alice.get_bodypart(BODY_ZONE_HEAD)), "Alice has no head after prosthetic replacement") - TEST_ASSERT_EQUAL(alice.real_name, "Bob", "Bob's head was transplanted onto Alice's body, but their name is not Bob") // DARKPACK EDIT, ORIGINAL: TEST_ASSERT_EQUAL(alice.get_visible_name(), "Bob", "Bob's head was transplanted onto Alice's body, but their name is not Bob") + TEST_ASSERT_EQUAL(alice.real_name, "Bob", "Bob's head was transplanted onto Alice's body, but their name is not Bob") // DARKPACK EDIT CHANGE - ORIGINAL: TEST_ASSERT_EQUAL(alice.get_visible_name(), "Bob", "Bob's head was transplanted onto Alice's body, but their name is not Bob") TEST_ASSERT_EQUAL(alice.hairstyle, "Short Hair", "Bob's head was transplanted onto Alice's body, but their hairstyle is not Short Hair") TEST_ASSERT_EQUAL(alice.hair_color, COLOR_LIGHT_BROWN, "Bob's head was transplanted onto Alice's body, but their hair color is not COLOR_LIGHT_BROWN") TEST_ASSERT_EQUAL(alice.facial_hairstyle, "Beard (Full)", "Bob's head was transplanted onto Alice's body, but their facial hairstyle is not Beard (Full)") diff --git a/code/modules/vending/boozeomat.dm b/code/modules/vending/boozeomat.dm index 5dd77c050dcb..68109446e1dc 100644 --- a/code/modules/vending/boozeomat.dm +++ b/code/modules/vending/boozeomat.dm @@ -69,7 +69,6 @@ /obj/item/reagent_containers/cup/glass/drinkingglass = 30, // DARKPACK EDIT START /obj/item/reagent_containers/cup/glass/drinkingglass/whiskey_shot = 12, - /* /obj/item/reagent_containers/cup/glass/drinkingglass/shotglass = 12, /obj/item/reagent_containers/cup/glass/drinkingglass/collins_glass = 15, /obj/item/reagent_containers/cup/glass/drinkingglass/martini_glass = 15, @@ -77,9 +76,7 @@ /obj/item/reagent_containers/cup/glass/drinkingglass/pint = 15, /obj/item/reagent_containers/cup/glass/drinkingglass/vodka_shot = 12, /obj/item/reagent_containers/cup/glass/drinkingglass/whiskey_shot = 15, - */ // DARKPACK EDIT ADD END - /obj/item/reagent_containers/cup/glass/drinkingglass/wine_glass = 15, /obj/item/reagent_containers/cup/glass/flask = 3, /obj/item/reagent_containers/cup/glass/bottle = 15, /obj/item/reagent_containers/cup/glass/bottle/small = 15, diff --git a/code/modules/wiremod/components/atom/hear.dm b/code/modules/wiremod/components/atom/hear.dm index 72d85ba22b0a..3e031adbc2bd 100644 --- a/code/modules/wiremod/components/atom/hear.dm +++ b/code/modules/wiremod/components/atom/hear.dm @@ -43,7 +43,7 @@ SIGNAL_HANDLER return Hear(arglist(arguments)) -/obj/item/circuit_component/hear/Hear(atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods, message_range, source) // DARKPACK EDIT, ORIGINAL: /obj/item/circuit_component/hear/Hear(atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods, message_range) +/obj/item/circuit_component/hear/Hear(atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods, message_range, source) // DARKPACK EDIT CHANGE - ORIGINAL: /obj/item/circuit_component/hear/Hear(atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods, message_range) if(!on.value) return FALSE if(speaker == parent?.shell) diff --git a/config/darkpack_config.txt b/config/darkpack_config.txt index 0da4988cc480..bd565bc978fd 100644 --- a/config/darkpack_config.txt +++ b/config/darkpack_config.txt @@ -51,3 +51,6 @@ LOG_STATS #HUMANITY_SUNLIGHT_RESISTANCE #EXTRA_ISSUE_URLS https://github.com/DarkPack13/SecondCity + +## Bool for if roleplay only merits/quirks are enabled +ROLEPLAY_ONLY_MERITS 1 diff --git a/config/darkpack_config/bloopers/blooper_config.json b/config/darkpack_config/bloopers/blooper_config.json new file mode 100644 index 000000000000..33e7d963ec29 --- /dev/null +++ b/config/darkpack_config/bloopers/blooper_config.json @@ -0,0 +1,24 @@ +[ + { + "name": "Ehh 1", + "id": "ehh1", + "files": [ + "ehh.ogg" + ] + }, + + { + "name": "Pencil", + "id": "pencil", + "files": [ + "pencil.ogg" + ] + }, + { + "name": "Dot", + "id": "dot", + "files": [ + "dot.ogg" + ] + } +] diff --git a/config/darkpack_config/bloopers/blooper_config.json.example b/config/darkpack_config/bloopers/blooper_config.json.example new file mode 100644 index 000000000000..4f31f32bb619 --- /dev/null +++ b/config/darkpack_config/bloopers/blooper_config.json.example @@ -0,0 +1,13 @@ +[ + { + "name": "Example Blooper", + "id": "example", + "files": ["example.ogg"], + "min_speed": 2, + "max_speed": 16, + "min_pitch": 0.4, + "max_pitch": 2, + "min_vary": 0.1, + "max_vary": 0.8 + } +] diff --git a/config/darkpack_config/bloopers/sounds/dot.ogg b/config/darkpack_config/bloopers/sounds/dot.ogg new file mode 100644 index 000000000000..428f68ff9654 Binary files /dev/null and b/config/darkpack_config/bloopers/sounds/dot.ogg differ diff --git a/config/darkpack_config/bloopers/sounds/ehh.ogg b/config/darkpack_config/bloopers/sounds/ehh.ogg new file mode 100644 index 000000000000..44679bd4a6c5 Binary files /dev/null and b/config/darkpack_config/bloopers/sounds/ehh.ogg differ diff --git a/config/darkpack_config/bloopers/sounds/pencil.ogg b/config/darkpack_config/bloopers/sounds/pencil.ogg new file mode 100644 index 000000000000..b0e25e448ce0 Binary files /dev/null and b/config/darkpack_config/bloopers/sounds/pencil.ogg differ diff --git a/config/game_options.txt b/config/game_options.txt index 3b66a0668bee..43d3b5725b9a 100644 --- a/config/game_options.txt +++ b/config/game_options.txt @@ -157,7 +157,7 @@ DYNAMIC_CONFIG_ENABLED ## RANDOM EVENTS ### ## Comment this out to disable random events during the round. -#ALLOW_RANDOM_EVENTS +ALLOW_RANDOM_EVENTS ## Uncomment this to disable station traits. #FORBID_STATION_TRAITS diff --git a/html/changelogs/AutoChangeLog-pr-1002.yml b/html/changelogs/AutoChangeLog-pr-1002.yml new file mode 100644 index 000000000000..bb261d1c62df --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1002.yml @@ -0,0 +1,4 @@ +author: "Magisterium2022" +delete-after: True +changes: + - balance: "Made Lupus and Hispo unable to be handcuffed." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-1004.yml b/html/changelogs/AutoChangeLog-pr-1004.yml new file mode 100644 index 000000000000..a72a0c9cf539 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1004.yml @@ -0,0 +1,5 @@ +author: "FalloutFalcon" +delete-after: True +changes: + - balance: "number of successes required for Fera shifting is based on how many forms your swapping between" + - bugfix: "Feras's shift difficulty is based on the form your currently in rather then the one your turning into" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-1007.yml b/html/changelogs/AutoChangeLog-pr-1007.yml new file mode 100644 index 000000000000..6f48ff462819 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1007.yml @@ -0,0 +1,8 @@ +author: "FalloutFalcon" +delete-after: True +changes: + - rscadd: "Adds support for automatic successes based on the TTRPG" + - code_imp: "Cleans up some of the code surrounding potance" + - balance: "Kills some of the snowflaky effect of potance in favor of it granting automatic successes (TTRPG accuracy)" + - qol: "Makes the dice unicode characters to show individual dice results a little larger" + - bugfix: "Potance 1-2 no longer cripples melee damage and it now scales correctly with all dots." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-1008.yml b/html/changelogs/AutoChangeLog-pr-1008.yml new file mode 100644 index 000000000000..bd3046f7a227 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1008.yml @@ -0,0 +1,4 @@ +author: "FalloutFalcon" +delete-after: True +changes: + - bugfix: "Doors can no longer be repunched for infinite door items" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-1013.yml b/html/changelogs/AutoChangeLog-pr-1013.yml new file mode 100644 index 000000000000..a7526bbc63d3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1013.yml @@ -0,0 +1,4 @@ +author: "FalloutFalcon" +delete-after: True +changes: + - rscdel: "Removed some TG holidays from appearing" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-1018.yml b/html/changelogs/AutoChangeLog-pr-1018.yml new file mode 100644 index 000000000000..7016ff57dc76 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1018.yml @@ -0,0 +1,4 @@ +author: "chazzyjazzy" +delete-after: True +changes: + - balance: "animalism mobs now have bloodpool = 2" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-1019.yml b/html/changelogs/AutoChangeLog-pr-1019.yml new file mode 100644 index 000000000000..8a1e87dbcf52 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1019.yml @@ -0,0 +1,6 @@ +author: "chazzyjazzy" +delete-after: True +changes: + - bugfix: "fixes Thaumaturgy 4 not incrementing the target's bloodpool" + - bugfix: "Thaumaturgy 4 Theft of Vitae now costs 1 bloodpoint" + - balance: "lowers Lure of Flames and Levinbolt 'palm of flame'-type ability's damage from 25 burn (50 against kindred) per click to 15 burn (30 against kindred), 20 for 'candle' and 'illuminate'" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-1020.yml b/html/changelogs/AutoChangeLog-pr-1020.yml new file mode 100644 index 000000000000..301c9752c83b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1020.yml @@ -0,0 +1,4 @@ +author: "FalloutFalcon" +delete-after: True +changes: + - rscadd: "Delirium status effect" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-1021.yml b/html/changelogs/AutoChangeLog-pr-1021.yml new file mode 100644 index 000000000000..5de36deac2f2 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1021.yml @@ -0,0 +1,4 @@ +author: "FalloutFalcon" +delete-after: True +changes: + - qol: "Makes the local host start now sound quieter and only play once" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-1022.yml b/html/changelogs/AutoChangeLog-pr-1022.yml new file mode 100644 index 000000000000..97bd1e842731 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1022.yml @@ -0,0 +1,4 @@ +author: "FalloutFalcon" +delete-after: True +changes: + - balance: "Fera transformations damage worn clothing" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-1023.yml b/html/changelogs/AutoChangeLog-pr-1023.yml new file mode 100644 index 000000000000..0c76ebc0bffb --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1023.yml @@ -0,0 +1,4 @@ +author: "Stutternov" +delete-after: True +changes: + - rscadd: "Adds maximum immortal age variable for jobs." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-1025.yml b/html/changelogs/AutoChangeLog-pr-1025.yml new file mode 100644 index 000000000000..68fd006e4c9e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1025.yml @@ -0,0 +1,4 @@ +author: "chazzyjazzy" +delete-after: True +changes: + - bugfix: "adds hunter landmarks" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-1026.yml b/html/changelogs/AutoChangeLog-pr-1026.yml new file mode 100644 index 000000000000..20b1e0f135c4 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1026.yml @@ -0,0 +1,4 @@ +author: "FalloutFalcon" +delete-after: True +changes: + - balance: "Removes nutriment gain from biting" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-1028.yml b/html/changelogs/AutoChangeLog-pr-1028.yml new file mode 100644 index 000000000000..377d115d68c3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1028.yml @@ -0,0 +1,4 @@ +author: "FalloutFalcon, Major00" +delete-after: True +changes: + - image: "Resprites wooden drying racks" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-1029.yml b/html/changelogs/AutoChangeLog-pr-1029.yml new file mode 100644 index 000000000000..f20e1cf797b9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1029.yml @@ -0,0 +1,4 @@ +author: "FalloutFalcon" +delete-after: True +changes: + - rscadd: "landmark for cargo crate delivery locations" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-850.yml b/html/changelogs/AutoChangeLog-pr-850.yml new file mode 100644 index 000000000000..e92eca185a0c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-850.yml @@ -0,0 +1,4 @@ +author: "Kolibri-B" +delete-after: True +changes: + - bugfix: "Fixed Obtenebration 3 \"Arms of the Abyss\" tentacle behaviour" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-860.yml b/html/changelogs/AutoChangeLog-pr-860.yml deleted file mode 100644 index 605bf52325a7..000000000000 --- a/html/changelogs/AutoChangeLog-pr-860.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "FalloutFalcon" -delete-after: True -changes: - - bugfix: "The umbra should now have its parallax again" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-861.yml b/html/changelogs/AutoChangeLog-pr-861.yml deleted file mode 100644 index 602a5a4d9076..000000000000 --- a/html/changelogs/AutoChangeLog-pr-861.yml +++ /dev/null @@ -1,16 +0,0 @@ -author: "chazzyjazzy" -delete-after: True -changes: - - bugfix: "makes *glasses work again" - - bugfix: "fixes a bug with guestbooks not displaying names correctly or at all or duplicately" - - bugfix: "resolves harddeletes causing lag" - - bugfix: "removes Giovanni from tower employee" - - bugfix: "removes Gargoyle from tremere regent" - - bugfix: "adds ghouls to police sergeant" - - bugfix: "makes npcs all have hair colors now instead of all having white" - - bugfix: "npcs now properly get immobilized from stuns like Dominate" - - bugfix: "makes the wallet worn sprite invisible (it was ugly)" - - bugfix: "visceratika's dot 5 now allows walking through walls, it was bugged" - - bugfix: "quietus' dot 2 touch attack now can no longer be dropped" - - bugfix: "auspex 2 is no longer is free and infinite, was an unintended bug" - - bugfix: "identifying artifacts via tremere ritual now awards research points again" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-908.yml b/html/changelogs/AutoChangeLog-pr-908.yml new file mode 100644 index 000000000000..2d0f7c715cd4 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-908.yml @@ -0,0 +1,5 @@ +author: "FalloutFalcon" +delete-after: True +changes: + - rscadd: "Adds two werewolf fetishes; Nyxs Bangle and Dagger of retribution" + - refactor: "Cleans up some artifact code around ownership and power granting" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-931.yml b/html/changelogs/AutoChangeLog-pr-931.yml deleted file mode 100644 index d98096d38c73..000000000000 --- a/html/changelogs/AutoChangeLog-pr-931.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Icarus-The-Sun" -delete-after: True -changes: - - rscadd: "Adds Dull Fangs as a flaw" - - bugfix: "Pliers can be used to remove fangs" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-937.yml b/html/changelogs/AutoChangeLog-pr-937.yml deleted file mode 100644 index c7e42e9094eb..000000000000 --- a/html/changelogs/AutoChangeLog-pr-937.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "limette, biplume" -delete-after: True -changes: - - rscadd: "eyes of the beast now glow in the dark and breach" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-939.yml b/html/changelogs/AutoChangeLog-pr-939.yml deleted file mode 100644 index 908cc7655e47..000000000000 --- a/html/changelogs/AutoChangeLog-pr-939.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "chazzyjazzy" -delete-after: True -changes: - - bugfix: "you can no longer join with negative freebie points" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-940.yml b/html/changelogs/AutoChangeLog-pr-940.yml deleted file mode 100644 index b651c84a6d38..000000000000 --- a/html/changelogs/AutoChangeLog-pr-940.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Icarus-The-Sun" -delete-after: True -changes: - - bugfix: "Mixing Bowls can now be used." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-941.yml b/html/changelogs/AutoChangeLog-pr-941.yml deleted file mode 100644 index 25033086ef3c..000000000000 --- a/html/changelogs/AutoChangeLog-pr-941.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Icarus-The-Sun" -delete-after: True -changes: - - qol: "Ashtrays, Cigars, Matchboxes and Malboro Golds are available in the smoke shop." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-943.yml b/html/changelogs/AutoChangeLog-pr-943.yml deleted file mode 100644 index eda8cac2747a..000000000000 --- a/html/changelogs/AutoChangeLog-pr-943.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Beautiful TG coders" -delete-after: True -changes: - - code_imp: "TG Pull. Thank you TG." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-948.yml b/html/changelogs/AutoChangeLog-pr-948.yml new file mode 100644 index 000000000000..645c8f0d56ed --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-948.yml @@ -0,0 +1,7 @@ +author: "buffyuwu" +delete-after: True +changes: + - rscadd: "ghouls now get potence 1 for free" + - bugfix: "ghouls can now only have level 1 in their disciplines" + - bugfix: "solves bloodheal and potence harddels by removing the disciplines on_lose_or_destroy" + - bugfix: "fixes a bug with transformation disciplines causing disciplines to become unusable" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-982.yml b/html/changelogs/AutoChangeLog-pr-982.yml new file mode 100644 index 000000000000..960620cefdc6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-982.yml @@ -0,0 +1,4 @@ +author: "chazzyjazzy" +delete-after: True +changes: + - rscadd: "adds the Society of Leopold, the largest subdivision of the Inquisiton, Vampire and Werewolf hunters" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-988.yml b/html/changelogs/AutoChangeLog-pr-988.yml new file mode 100644 index 000000000000..505cca2995cb --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-988.yml @@ -0,0 +1,5 @@ +author: "chazzyjazzy" +delete-after: True +changes: + - rscadd: "adds blackout random event" + - code_imp: "cleaned up fusebox damage code" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-997.yml b/html/changelogs/AutoChangeLog-pr-997.yml new file mode 100644 index 000000000000..8ab2c4bc30ec --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-997.yml @@ -0,0 +1,4 @@ +author: "FalloutFalcon" +delete-after: True +changes: + - rscadd: "Adds Wolf Sight Merit from W20" \ No newline at end of file diff --git a/html/changelogs/archive/2026-04.yml b/html/changelogs/archive/2026-04.yml index 9d5096dd6e8a..a29dc3826ae4 100644 --- a/html/changelogs/archive/2026-04.yml +++ b/html/changelogs/archive/2026-04.yml @@ -111,3 +111,55 @@ - bugfix: auspex 2 failure to_chat actually prints - rscadd: Adds Betrayer's Mark, Thaumaturgically Inept, and Mage Blood as Tremere-specific flaws +2026-04-27: + Beautiful TG coders: + - code_imp: TG Pull. Thank you TG. + FalloutFalcon: + - bugfix: Normal AND razor claws both deal extra die of damage + - bugfix: fixed an issue where disciplines would appear on the wrong characters + in some instances + - bugfix: The umbra should now have its parallax again + - balance: Some jobs are restricted by auspice or tribe + - bugfix: Changing splats will properly update your emotion aura + Icarus-The-Sun: + - qol: Ashtrays, Cigars, Matchboxes and Malboro Golds are available in the smoke + shop. + - balance: Changes night vision granted by the pierce the veil ritual to be stronger + - qol: Adds canes to the pharmacy + - bugfix: Mixing Bowls can now be used. + - rscadd: Adds Dull Fangs as a flaw + - bugfix: Pliers can be used to remove fangs + Kolibri-B: + - rscadd: Added a few more objects that Obtenebration 5 can phase through + - bugfix: Fixes Obtenebration 5 not phasing through doors + Magisterium2022: + - rscadd: Gave Vicissitude owners the ability to performs surgeries on themselves. + - rscadd: Made Bloodform immune to cuffs, staking, and brute damage, ability to + pass through doors and mobs, alongside pacifism and masquerade violating appearance. + Marshmellow105: + - code_imp: removed duplicate setite areas + - bugfix: FBI agents spawn with a police radio again + - bugfix: FBI agent keys spawn in their pockets now to prevent bugs with loadout + items + - rscadd: Adds a subtype of glock magazine so Federal Agents dont have to roundstart + re-pack magazines with hollowpoint + chazzyjazzy: + - bugfix: makes *glasses work again + - bugfix: fixes a bug with guestbooks not displaying names correctly or at all or + duplicately + - bugfix: resolves harddeletes causing lag + - bugfix: removes Giovanni from tower employee + - bugfix: removes Gargoyle from tremere regent + - bugfix: adds ghouls to police sergeant + - bugfix: makes npcs all have hair colors now instead of all having white + - bugfix: npcs now properly get immobilized from stuns like Dominate + - bugfix: makes the wallet worn sprite invisible (it was ugly) + - bugfix: visceratika's dot 5 now allows walking through walls, it was bugged + - bugfix: quietus' dot 2 touch attack now can no longer be dropped + - bugfix: auspex 2 is no longer is free and infinite, was an unintended bug + - bugfix: identifying artifacts via tremere ritual now awards research points again + - rscadd: Adds Calling the Hungry Shade and Pierce the Veil Abyss Mysticism rituals + for Lasombras + - bugfix: you can no longer join with negative freebie points + limette, biplume: + - rscadd: eyes of the beast now glow in the dark and breach diff --git a/html/changelogs/archive/2026-05.yml b/html/changelogs/archive/2026-05.yml new file mode 100644 index 000000000000..356dd54adaa1 --- /dev/null +++ b/html/changelogs/archive/2026-05.yml @@ -0,0 +1,54 @@ +2026-05-04: + Biplume: + - balance: Crinos, Hispo, and Lupus speeds were all nerfed. + - balance: Hispo and Lupus bites do aggravated damage. + FalloutFalcon: + - config: Adds config for if roleplay only merits are available + - balance: You can no longer jump while lying down + - qol: Street signs tell you where you are + - balance: Claws are prefered to kicking + - bugfix: Claws get intended bonus dice on basic mobs + - balance: Fera claws are sharp and deal aggravated damage + - rscadd: reworks frenzying to be a role-play/fluff effect rather then stealing + control of your character. + - bugfix: color effect from Kiss status effect should properly clear + - balance: fera warforms are considered large mobs + - balance: Gangrel forms are downgraded to large mobs instead of huge + - image: hair dye spray has an onfloor + - rscdel: Removes dice output preference in favor of always outputting to chat unless + declared by the roll. + - balance: reduces the rate at which cats breed + FalloutFalcon, CYBILIZE: + - bugfix: fixed separate phone calls occasionally sharing audio with each other + - code_imp: corrected secure phone frequency assignment logic + buffyuwu: + - bugfix: Crime will no longer be automatically reported outside of masquerade enforced + areas + chazzyjazzy: + - code_imp: every job datum now has a faction + - code_imp: removes unused and useless 'is_gun_store' job on /obj/structure/retail + - bugfix: fixes the very smallest and the very tallest height from not being applied + - rscadd: store owners now say unique things to you when you open their store + - rscadd: store owners now have revamped outfits for unique and cool looks + - rscadd: makes lightposts go out when the area power transformer is broken + - rscadd: gargoyles can now tuck their wings, preventing them from flying, but making + them able to wear other clothes + - rscadd: gargoyle flight now makes a flapping noise + - rscadd: fixes serpentis 1 + - bugfix: readds bank vault door to giovanni kindred roles + - bugfix: adds npc subtypes for the new store owners + - rscadd: empty bloodbags can now be bought at the pharmacy + - bugfix: negative stat modifiers now work + chazzyjazzy, buffyuwu: + - rscadd: blush of health quirk + - rscadd: eat food quirk + - bugfix: aura hearts now beat only when they should + - bugfix: setites now get their clan keys + - bugfix: bloodpacks now actually increment bloodpool + - bugfix: sunglasses and other glasses now act in the same way masks do for masquerade + violating eyes + - bugfix: dementation's missing sprite is now patched + dwinters99: + - rscadd: company logo element + theselfish: + - rscadd: Tremere may have a Third Eye. diff --git a/modular_darkpack/master_files/code/datums/quirks/_quirk.dm b/modular_darkpack/master_files/code/datums/quirks/_quirk.dm index 9bc8517ac97f..c794cc064b78 100644 --- a/modular_darkpack/master_files/code/datums/quirks/_quirk.dm +++ b/modular_darkpack/master_files/code/datums/quirks/_quirk.dm @@ -1,2 +1,5 @@ /datum/quirk var/darkpack_allowed = FALSE // MERITS/FLAWS + // I would like to highlight these to admins or players but for now it lets them be controlled via config + /// If the quirk has 0 mechnaical effect. + var/roleplay_only = FALSE diff --git a/modular_darkpack/modules/merits_flaws/code/negative_quirks/blind.dm b/modular_darkpack/master_files/code/datums/quirks/negative_quirks/blind.dm similarity index 100% rename from modular_darkpack/modules/merits_flaws/code/negative_quirks/blind.dm rename to modular_darkpack/master_files/code/datums/quirks/negative_quirks/blind.dm diff --git a/modular_darkpack/modules/merits_flaws/code/negative_quirks/deaf.dm b/modular_darkpack/master_files/code/datums/quirks/negative_quirks/deaf.dm similarity index 100% rename from modular_darkpack/modules/merits_flaws/code/negative_quirks/deaf.dm rename to modular_darkpack/master_files/code/datums/quirks/negative_quirks/deaf.dm diff --git a/modular_darkpack/modules/merits_flaws/code/negative_quirks/illiterate.dm b/modular_darkpack/master_files/code/datums/quirks/negative_quirks/illiterate.dm similarity index 68% rename from modular_darkpack/modules/merits_flaws/code/negative_quirks/illiterate.dm rename to modular_darkpack/master_files/code/datums/quirks/negative_quirks/illiterate.dm index 5f4cd9985306..509ed80f6ce8 100644 --- a/modular_darkpack/modules/merits_flaws/code/negative_quirks/illiterate.dm +++ b/modular_darkpack/master_files/code/datums/quirks/negative_quirks/illiterate.dm @@ -1,4 +1,4 @@ /datum/quirk/illiterate - desc = "Perhaps you communicate best through illustration, dance, or impassioned speech; but you can’t read or write." + desc = "Perhaps you communicate best through illustration, dance, or impassioned speech; but you can't read or write." value = -2 darkpack_allowed = TRUE diff --git a/modular_darkpack/modules/merits_flaws/code/negative_quirks/mute.dm b/modular_darkpack/master_files/code/datums/quirks/negative_quirks/mute.dm similarity index 100% rename from modular_darkpack/modules/merits_flaws/code/negative_quirks/mute.dm rename to modular_darkpack/master_files/code/datums/quirks/negative_quirks/mute.dm diff --git a/modular_darkpack/master_files/code/game/atoms_movable.dm b/modular_darkpack/master_files/code/game/atoms_movable.dm new file mode 100644 index 000000000000..518eb3232ad2 --- /dev/null +++ b/modular_darkpack/master_files/code/game/atoms_movable.dm @@ -0,0 +1,15 @@ +/atom/movable + // Text-to-blooper sounds + // yes. all atoms can have a say. + var/datum/blooper/blooper + var/blooper_speed = 50 + var/blooper_pitch = 50 + var/blooper_pitch_range = 50 //Actual pitch is (pitch - (blooper_pitch_range*0.5)) to (pitch + (blooper_pitch_range*0.5)) + COOLDOWN_DECLARE(blooper_cooldown) + +/atom/movable/send_speech(message, range = 7, obj/source = src, bubble_type, list/spans, datum/language/message_language, list/message_mods = list(), forced = FALSE, tts_message, list/tts_filter) + . = ..() + if(!blooper) + return + var/list/listeners = get_hearers_in_view(range, source) + blooper.play_bloop(source, listeners, message, range, BLOOPER_TRANSMIT_VOLUME, blooper_speed, blooper_pitch, blooper_pitch_range) diff --git a/modular_darkpack/master_files/code/game/objects/items/storage/bags.dm b/modular_darkpack/master_files/code/game/objects/items/storage/bags.dm index 12093d4ef64d..2546e7ccd908 100644 --- a/modular_darkpack/master_files/code/game/objects/items/storage/bags.dm +++ b/modular_darkpack/master_files/code/game/objects/items/storage/bags.dm @@ -1,4 +1,3 @@ -///DARKPACK - Money bag subtype; covers Darkpack money types /obj/item/storage/bag/money storage_type = /datum/storage/bag/money/darkpack diff --git a/modular_darkpack/master_files/code/game/objects/objs.dm b/modular_darkpack/master_files/code/game/objects/objs.dm new file mode 100644 index 000000000000..3cb7449e497e --- /dev/null +++ b/modular_darkpack/master_files/code/game/objects/objs.dm @@ -0,0 +1,9 @@ +/obj + // DARKPACK Module - COMPANY_LOGOS - If matching a /datum/brand's manufacturer, append a logo to the examine text. Element only added by default on /obj/ + var/brand + + +/obj/Initialize(mapload) + . = ..() + if(brand) // DARKPACK module - COMPANY_LOGOS - If we don't have a brand, disregard. + AddElement(/datum/element/corp_label, GLOB.all_brandnames[brand]) diff --git a/modular_darkpack/master_files/code/modules/mob/living/carbon/carbon_defines.dm b/modular_darkpack/master_files/code/modules/mob/living/carbon/carbon_defines.dm index e4e35faf014c..1c3c3d17781d 100644 --- a/modular_darkpack/master_files/code/modules/mob/living/carbon/carbon_defines.dm +++ b/modular_darkpack/master_files/code/modules/mob/living/carbon/carbon_defines.dm @@ -1,9 +1,11 @@ /mob/living/carbon + bloodquality = BLOOD_QUALITY_NORMAL + var/chronological_age = 0 + var/image/suckbar var/atom/suckbar_loc - var/killed_count = 0 var/fakediablerist = FALSE var/can_be_embraced = TRUE - bloodquality = 2 + diff --git a/modular_darkpack/master_files/code/modules/mob/living/carbon/examine.dm b/modular_darkpack/master_files/code/modules/mob/living/carbon/examine.dm index 2f42f973773a..94b43988b00d 100644 --- a/modular_darkpack/master_files/code/modules/mob/living/carbon/examine.dm +++ b/modular_darkpack/master_files/code/modules/mob/living/carbon/examine.dm @@ -73,6 +73,9 @@ . += span_rose(span_bold("[pick(five)]
")) if(HAS_TRAIT(src, TRAIT_PERMAFANGS) && !HAS_TRAIT(src, TRAIT_DULLFANGS)) . += span_warning("[p_They()] [p_have()] visible fangs in [p_their()] mouth.
") + if(!src.head) + if(HAS_TRAIT(src, TRAIT_THIRD_EYE)) + . += span_bolddanger("[p_They()] [p_have()] a third eye on [p_their()] forehead!
") if(HAS_TRAIT(src, TRAIT_BETRAYERS_MARK)) if(isliving(user)) var/mob/living/living_user = user diff --git a/modular_darkpack/master_files/code/modules/mob/living/carbon/human/human.dm b/modular_darkpack/master_files/code/modules/mob/living/carbon/human/human.dm index f78afb1a0081..c54b4e84351f 100644 --- a/modular_darkpack/master_files/code/modules/mob/living/carbon/human/human.dm +++ b/modular_darkpack/master_files/code/modules/mob/living/carbon/human/human.dm @@ -33,3 +33,4 @@ . = ..() + diff --git a/modular_darkpack/master_files/code/modules/mob/living/carbon/human/initialize.dm b/modular_darkpack/master_files/code/modules/mob/living/carbon/human/initialize.dm index 0ac4a2ff2f89..abfa8077977c 100644 --- a/modular_darkpack/master_files/code/modules/mob/living/carbon/human/initialize.dm +++ b/modular_darkpack/master_files/code/modules/mob/living/carbon/human/initialize.dm @@ -5,3 +5,10 @@ AddComponent(/datum/component/jumper) AddComponent(/datum/component/violation_observer, violation_aoe) update_visible_name() + // clientless mobs are given a random voice + if(!client && length(SSblooper.blooper_list)) + var/blooper_key = pick(SSblooper.blooper_list) + blooper = SSblooper.blooper_list[blooper_key] + blooper_speed = rand(0, 100) + blooper_pitch = rand(0, 100) + blooper_pitch_range = rand(0, 100) diff --git a/modular_darkpack/master_files/code/modules/mob/living/init_signals.dm b/modular_darkpack/master_files/code/modules/mob/living/init_signals.dm index eac7c193efe6..61061505d219 100644 --- a/modular_darkpack/master_files/code/modules/mob/living/init_signals.dm +++ b/modular_darkpack/master_files/code/modules/mob/living/init_signals.dm @@ -1,13 +1,5 @@ /mob/living/register_init_signals() . = ..() - RegisterSignal(src, COMSIG_ENTER_AREA, PROC_REF(update_zone_hud)) - -/mob/living/proc/update_zone_hud(mob/source, area/new_area) - SIGNAL_HANDLER - - var/atom/movable/screen/zone_hud = hud_used?.screen_objects[HUD_MOB_ZONE] - if(zone_hud) - if(!istype(new_area, /area/vtm)) - return - var/area/vtm/our_area = new_area - zone_hud.icon_state = "[our_area.zone_type]" + RegisterSignal(src, COMSIG_ENTER_AREA, PROC_REF(update_zone_hud)) // AREAS - (Zone hud) + RegisterSignal(src, SIGNAL_ADDTRAIT(TRAIT_OBFUSCATED), PROC_REF(make_invisible)) // POWERS - (Obfuscate Discipline) + RegisterSignal(src, SIGNAL_REMOVETRAIT(TRAIT_OBFUSCATED), PROC_REF(make_visible)) // POWERS - (Obfuscate Discipline) diff --git a/modular_darkpack/master_files/code/modules/mob/living/living.dm b/modular_darkpack/master_files/code/modules/mob/living/living.dm index 59bd200edda7..ffc42bb4bc1b 100644 --- a/modular_darkpack/master_files/code/modules/mob/living/living.dm +++ b/modular_darkpack/master_files/code/modules/mob/living/living.dm @@ -1,16 +1,13 @@ /mob/living/Initialize(mapload) . = ..() storyteller_stats = create_new_stat_prefs(storyteller_stats) - become_area_sensitive("zone_hud") - update_zone_hud(src, get_area(src)) + become_area_sensitive(ZONE_TRAIT) + update_zone_hud(src, get_area(src)) // AREAS - (Zone hud) -/mob/living/Destroy() - lastattacked = null - drunked_of = null +/mob/living/Destroy(force) storyteller_stats = null beastmaster_minions = null minion_command_components = null - grabbed_by_tentacle = null QDEL_LAZYLIST(splats) return ..() diff --git a/modular_darkpack/master_files/code/modules/mob/living/living_defines.dm b/modular_darkpack/master_files/code/modules/mob/living/living_defines.dm index 3c729416bdc0..c4fa9ff11c8d 100644 --- a/modular_darkpack/master_files/code/modules/mob/living/living_defines.dm +++ b/modular_darkpack/master_files/code/modules/mob/living/living_defines.dm @@ -1,53 +1,55 @@ /mob/living has_emotion = TRUE - var/mob/living/lastattacked - - var/bloodquality = 1 - - var/list/drunked_of = list() - - var/discipline_time_plus = 0 - var/blood_efficiency = 1 - var/thaum_damage_plus = 0 + //Damage related vars, NOTE: THESE SHOULD ONLY BE MODIFIED BY PROCS + ///Aggravated damage caused by supernatural attacks. + var/aggloss = 0 - var/resistant_to_disciplines = FALSE + var/list/storyteller_stats = list() // STORYTELLER_STATS - var/dancing = FALSE + /// List of supernatural types that this mob is part of + var/list/datum/splat/splats // SPLATS - var/frenzy_chance_boost = 10 COOLDOWN_DECLARE(drinkblood_use_cd) COOLDOWN_DECLARE(drinkblood_click_cd) var/bloodpool = 5 var/maxbloodpool = 5 + + /// The quality of the mobs blood when drank from. Decides how much BP a vampire will regain. + var/bloodquality = BLOOD_QUALITY_LOW + + COOLDOWN_DECLARE(masquerade_timer) var/masquerade_score = 5 + + var/killed_count = 0 var/warrant = FALSE var/ignores_warrant = FALSE - //Damage related vars, NOTE: THESE SHOULD ONLY BE MODIFIED BY PROCS - ///Aggravated damage caused by supernatural attacks. - var/aggloss = 0 + var/discipline_time_plus = 0 + /// Multiplier for how efficently bloodpool is spent for BLOODPOWER SPECIFICLY + var/blood_efficiency = 1 + var/thaum_damage_plus = 0 + // DARKPACK TODO - FRENZY - (This never did FUCK anything.) + var/frenzy_chance_boost = 10 + + var/resistant_to_disciplines = FALSE - var/list/storyteller_stats = list() + // dogshit. + var/dancing = FALSE //beastmaster var/list/beastmaster_minions = list() var/list/datum/component/obeys_commands/minion_command_components = list() - var/obj/grabbed_by_tentacle = null - var/escape_attempt = 0 + var/tentacle_escape_attempt = 0 var/tentacle_aggro_mode = "Aggressive" var/possessed = FALSE //dominate 5 body posession var/datum/weakref/conditioner // dominate 4 //obfuscate icon, client side var/obf_icons - COOLDOWN_DECLARE(masquerade_timer) //thaumaturgy & necro path stuff var/research_points = 0 var/collected_souls = 0 - - /// List of supernatural types that this mob is part of - var/list/datum/splat/splats diff --git a/modular_darkpack/master_files/code/modules/mob/living/living_say.dm b/modular_darkpack/master_files/code/modules/mob/living/living_say.dm new file mode 100644 index 000000000000..019d54697b00 --- /dev/null +++ b/modular_darkpack/master_files/code/modules/mob/living/living_say.dm @@ -0,0 +1,14 @@ +/mob/living/send_speech(message_raw, message_range = 6, obj/source = src, bubble_type = bubble_icon, list/spans, datum/language/message_language = null, list/message_mods = list(), forced = null, tts_message, list/tts_filter) + . = ..() + if(!blooper) + return + if(HAS_TRAIT(src, TRAIT_SIGN_LANG) && !HAS_TRAIT(src, TRAIT_MUTE)) //if you can speak and you sign, your hands don't make a bark. Unless you are completely mute, you can have some hand bark. + return + var/pref_volume = client ? (client?.prefs?.read_preference(/datum/preference/numeric/blooper_sound_volume) / 100) : 1 + var/volume = BLOOPER_TRANSMIT_VOLUME * pref_volume + if(message_mods[WHISPER_MODE]) + volume = BLOOPER_TRANSMIT_VOLUME * 0.5 + message_range++ + var/list/listeners = get_hearers_in_view(message_range, source) + var/is_yelling = (say_test(message_raw) == "2") // boost the volume if their message ends in ! + blooper.play_bloop(source, listeners, message_raw, message_range, volume * (is_yelling ? 2 : 1), blooper_speed, blooper_pitch, blooper_pitch_range) diff --git a/modular_darkpack/master_files/code/modules/mob/living/silicon/silicon.dm b/modular_darkpack/master_files/code/modules/mob/living/silicon/silicon.dm new file mode 100644 index 000000000000..118a0fc5e2a7 --- /dev/null +++ b/modular_darkpack/master_files/code/modules/mob/living/silicon/silicon.dm @@ -0,0 +1,7 @@ +// we let borgs have some bark too +/mob/living/silicon/Login() + blooper = SSblooper.blooper_list[client.prefs.read_preference(/datum/preference/choiced/blooper)] + blooper_speed = client.prefs.read_preference(/datum/preference/numeric/blooper_speed) + blooper_pitch = client.prefs.read_preference(/datum/preference/numeric/blooper_pitch) + blooper_pitch_range = client.prefs.read_preference(/datum/preference/numeric/blooper_pitch_range) + . = ..() diff --git a/modular_darkpack/master_files/code/modules/rituals/code/ritual_rune.dm b/modular_darkpack/master_files/code/modules/rituals/code/ritual_rune.dm index cf0d3ea94326..f18792d173c0 100644 --- a/modular_darkpack/master_files/code/modules/rituals/code/ritual_rune.dm +++ b/modular_darkpack/master_files/code/modules/rituals/code/ritual_rune.dm @@ -16,6 +16,7 @@ var/activation_color var/cost = 1 // this needs to be set in subtypes var/ritual_name + var/difficulty = 6 // set in subtypes /// What discipline is required (if any) to use this rune. var/required_discipline @@ -35,9 +36,27 @@ qdel(src) return CLICK_ACTION_SUCCESS +/* +*What happens when the ritual rune executes successfully +*/ /obj/ritual_rune/proc/complete() return +/* +*What happens when the ritual rune executes with a failure +*/ +/obj/ritual_rune/proc/ritual_failure() + return + +/* +*What happens when the ritual rune executes with a botch +*/ +/obj/ritual_rune/proc/ritual_botch() + return + +/* +* What happens when the user clicks on the rune. Ideally shouldn't be overriden. +*/ /obj/ritual_rune/attack_hand(mob/user) if(activated) return @@ -57,13 +76,19 @@ if(!ritual_roll_datum) ritual_roll_datum = new() - ritual_roll_datum.difficulty = 3 + level - - if(ritual_roll_datum.st_roll(last_activator, last_activator) != ROLL_SUCCESS) - return FALSE - - complete() - return TRUE + ritual_roll_datum.difficulty = difficulty + + var/roll_result = ritual_roll_datum.st_roll(last_activator, last_activator) + switch(roll_result) + if(ROLL_SUCCESS) + complete() + return TRUE + if(ROLL_FAILURE) + ritual_failure() + return FALSE + if(ROLL_BOTCH) + ritual_botch() + return FALSE /obj/ritual_rune/proc/check_and_consume_sacrifices(mob/user) var/list/found_items = list() diff --git a/modular_darkpack/master_files/icons/obj/machines/smartfridge.dmi b/modular_darkpack/master_files/icons/obj/machines/smartfridge.dmi new file mode 100644 index 000000000000..6688e5f9ff05 Binary files /dev/null and b/modular_darkpack/master_files/icons/obj/machines/smartfridge.dmi differ diff --git a/modular_darkpack/master_files/strings/sillytips.txt b/modular_darkpack/master_files/strings/sillytips.txt index 3d91ff47443d..2c1b536c90b0 100644 --- a/modular_darkpack/master_files/strings/sillytips.txt +++ b/modular_darkpack/master_files/strings/sillytips.txt @@ -1,69 +1,69 @@ -The Malkavian hivemind allows you to send any message, except images. Don't forget what they took from you. -Little known fact, you can actually take Lupus Kinfolk home with you for free. I have 47 in my back yard. -Little known fact, you can actually take Corvid Kinfolk home with you for free. I have 47 in my back yard. -Little known fact, you can actually take Kyubi Kinfolk home with you for free. I have 47 in my back yard. -Little known fact, you can actually take Feline Kinfolk home with you for free. I have 47 in my back yard. -Little known fact, you can actually take Latrani Kinfolk home with you for free. I have 47 in my back yard. -Elkabo, elkabo, pixy queen where all is green. +* is blind +/obj/item/melee/vampirearms/knife/gangrel/lasombra +All of the Salubri in the world are in San Francisco. +Also try Minecraft!! +Are you trujah, then? +As a Garou, it's tremendously important to slaughter anyone who drops so much as a bottlecap in the woods. Ask about the free arsenic! -Maggots love you. Trust me. -There's nothing stopping you from just putting a chew toy in the mouth of a vampire. What are they going to do, bite you? -The Delirium is a genetic, supernatural fear of Garou and other breeds that remind you of Jacob from Twilight. -It's 2009, get over it. +Blowing up the oil rig with a dirty bomb will certainly help Gaia recover. +Call in the burgermen. +Deer will freeze when they see a vehicle. This includes scooters. +Diablerize your Sire NOW!!! +Do not feed your Ghoul after midnight~. +Do you have any bloodpacks? I got a headache. +Do you think a Nexus Crawler would improve the feng shui of this landfill? +Do you think there are any Garou in the Teen Wolf fandom? +Does anyone else think what Tremere did was really screwed up? +Dogs know how to skateboard. +Don’t listen to the stop signs. +Elkabo, elkabo, pixy queen where all is green. Everyone thinks the game was made by yankees anyway. +Explain it to me like I'm a dog. First priority more mechanics for people to enjoy. Last priority refactoring if it isn't lagging. -It doesn't need to expand. Only to go deeper. Fixed on Darkpack. -Do you have any bloodpacks? I got a headache. -* is blind +Gaia saved next week! +I AM THE SWORD OF CAINE!!! I WANT A BLACK AND MILD!!!!!!! -Explain it to me like I'm a dog. -This truly is a world of darkness. -Are you trujah, then? -All of the Salubri in the world are in San Francisco. I run on blood! I take jobs from American vampires! -Trujah in the future have studied your ass for centuries - and sent me back in time to kick it! -This is Ennoia, by the way. I have an eagle head right now. +It doesn't need to expand. Only to go deeper. +It's 2009, get over it. +Just level appearance. +Kinfolk are just ghouls for dogs. +Little known fact, you can actually take Corvid Kinfolk home with you for free. I have 47 in my back yard. +Little known fact, you can actually take Feline Kinfolk home with you for free. I have 47 in my back yard. +Little known fact, you can actually take Kyubi Kinfolk home with you for free. I have 47 in my back yard. +Little known fact, you can actually take Latrani Kinfolk home with you for free. I have 47 in my back yard. +Little known fact, you can actually take Lupus Kinfolk home with you for free. I have 47 in my back yard. Lots of people spread nasty rumors about the Tzimisce turning people into chairs. The reality is that they prefer loveseats. More surface area for the skin, you see. -I AM THE SWORD OF CAINE!!! -Sire: God -As a Garou, it's tremendously important to slaughter anyone who drops so much as a bottlecap in the woods. -Blowing up the oil rig with a dirty bomb will certainly help Gaia recover. -My Wyrm could beat up your Wyrm. Lupus-born Garou typically can't read and typically don't have a legal identity. This means it's really easy to write a hit piece in the newspaper about them without fear of legal retribution. -Kinfolk are just ghouls for dogs. -The Black Furies breeding pits do not exist. Do not attempt to breach the Bawn to find it. -Gaia saved next week! -Do you think a Nexus Crawler would improve the feng shui of this landfill? +Maggots love you. Trust me. +Maybe the real Beckoning is the Kindred we met along the way. +My Wyrm could beat up your Wyrm. +Ravens and crows will chase shiny objects around. Make sure to start corvid turf wars. Reminder: Emissions caused by Corporate Wolves factories are good and cool, but emissions from Endron factories are disgusting and evil. -You've turned your back on Fenris, the Get of Fenris, and even Gaia! For your TREACHERY, the only penalty... is DEATH. Who's next? -Diablerize your Sire NOW!!! -What if heartsblood tastes like a fruit gusher? -There's a Nosferatu standing behind you watching you roleplay. -The get_step() ziggurat cannot hurt you. +Sire: God +So-called “Kindred” will insist that garlic, holy water, and crosses are ineffective against them. They are lying. Do not listen to them. +The Black Furies breeding pits do not exist. Do not attempt to breach the Bawn to find it. +The Camarilla doesn’t want you to know this but the ghouls at the Tower are free. You can take them home. I have 458 ghouls. +The Delirium is a genetic, supernatural fear of Garou and other breeds that remind you of Jacob from Twilight. +The Malkavian hivemind allows you to send any message, except images. Don't forget what they took from you. The get_step() spaceship cannot hurt you. +The get_step() ziggurat cannot hurt you. +The mannequins no longer get a little quirky at night. +There are many different types of werewolf fetishes. Stop it. There are two wolves inside you. They are both in nullspace. There are two wolves..... and two birds.... inside of you. All four are in nullspace... -Just level appearance. -Maybe the real Beckoning is the Kindred we met along the way. -Does anyone else think what Tremere did was really screwed up? -Do you think there are any Garou in the Teen Wolf fandom? -There are many different types of werewolf fetishes. Stop it. -You're thinking about fangs right now. -/obj/item/melee/vampirearms/knife/gangrel/lasombra -When in doubt, just put vampire in the typepath. -Call in the burgermen. +There's a Nosferatu standing behind you watching you roleplay. +There's nothing stopping you from just putting a chew toy in the mouth of a vampire. What are they going to do, bite you? +This is Ennoia, by the way. I have an eagle head right now. +This truly is a world of darkness. +Trujah in the future have studied your ass for centuries - and sent me back in time to kick it! +What if heartsblood tastes like a fruit gusher? What the hell is Bardo? -What the hell is Sanguinus? What the hell is Ogham? -Ravens and crows will chase shiny objects around. Make sure to start corvid turf wars. -Deer will freeze when they see a vehicle. This includes scooters. -The mannequins no longer get a little quirky at night. -Do not feed your Ghoul after midnight~. -Dogs know how to skateboard. -Don’t listen to the stop signs. -You cannot buy a blender at the dollar store. -The Camarilla doesn’t want you to know this but the ghouls at the Tower are free. You can take them home. I have 458 ghouls. -Also try Minecraft!! -So-called “Kindred” will insist that garlic, holy water, and crosses are ineffective against them. They are lying. Do not listen to them. +What the hell is Sanguinus? +When in doubt, just put vampire in the typepath. You can throw a stick to distract an aggressive Garou. +You cannot buy a blender at the dollar store. +You're thinking about fangs right now. +You've turned your back on Fenris, the Get of Fenris, and even Gaia! For your TREACHERY, the only penalty... is DEATH. Who's next? diff --git a/modular_darkpack/master_files/strings/tips.txt b/modular_darkpack/master_files/strings/tips.txt index e32f4e5e813a..5e3fea6abbd3 100644 --- a/modular_darkpack/master_files/strings/tips.txt +++ b/modular_darkpack/master_files/strings/tips.txt @@ -1,71 +1,71 @@ -You can find a lockpick on certain NPCs and at the black market or hardware store. Dexterity and larceny assist in your chances to succeed, and doors have varying difficulty. -With high enough strength, you can attempt to bash down a door, but failing can injure you. -Cars use gasoline; you can buy more at a gas station. This can be used in the production of molotovs, as well. -If you ever find yourself lost, look for a city map, use the navigate verb or button. Or just ask for directions. -Discipline levels can be changed with Right-Click. -Human players can use the "Report a Masquerade violation" button in people's examine text to report any weird supernatural stuff they shouldn't be seeing, like vampires feeding or punching people across a room. -You can jump around by pressing MMB. You can even jump over railings while standing next to them. -You can send announcements as the Prince by using your computer. Other kindred can see it on other computers too. -The Malkavian hivemind allows you to send any message, except images. -You can find and publish your phone number on your phone. -To use Thaumaturgy properly you should get an Arcane Tome. Some of them spawn in Chantry. Lasombra can also learn Abyss Mysticism by crafting a tome after reaching Obtenebration at level 5. -Followers of Set, also known as Ministry, can avoid diablerie and staking by moving their heart to an urn. -Diablerie lowers your generation by one, if your victim's is lower than yours. Diablerie is one of the vilest deeds imaginable, and any kindred who learn of this will seek your permanent death. -Blood quality depends on the power or lifestyle of a creature. Vampire blood satisfies the most, after that lupine blood, then the wealthy, then the poor, then animals, and so on. -You can bloodbond people as a kindred. To do so - grab them and force them to swallow your vitae with Give Vitae ability. Bloodbonds strengthen the victim's emotions towards you and create an obsession. -You can make a ghoul by bloodbonding a non-playable character. If there are any ghosts that want to play a ghoul - they will take over the ghouled NPC. -Ghouls are weaker than kindred, and require vitae instead of mortal blood. But they also are immune to humanity and can learn any clan's disciplines to level 1. -If you are a mortal and do drugs, kindred can experience the same high by drinking your blood. -Tzimisce can upgrade your body with flesh and blood. Or they can turn you into a chair. Take this risk at your own judgement. -Magical artifacts need to be identified in order to be used. The Tremere, Garou, or those with a tremendously high Occult skill can identify them. -As a Prince, your objectives are to rule Camarilla and the City. Follow all Six Traditions of Kindred and decide how to fight global dangers. Don't forget to call on the Primogens if you need some help. -As a Sheriff, your objectives are to protect Masquerade in the City. Speak with Camarilla's agents and decide the best technique to liquidate Masquerade breaches and breachers. -As a Seneschal, your objectives are to help Prince make any business in the City. You are his right hand man, and he expects you to deal with matters beneath him. -As a Hound, your objectives are to enforce the Traditions and the Camarilla's rule of the city. +@You can italicize, embolden or underline portions of your messages by enclosing them with |, + or _ respectively. You can also avoid this by adding backslashes (they won't show in the message) before these characters. +A "Scene" in game represents 3 minutes. +A "Turn" in game represents 5 seconds. +A thrown glass of water can make a slippery tile, allowing you to slow down your pursuers in a pinch. +ATMs can be smashed with a high force weapon for whatever cash is inside of them. As a Baron, you lead the individualistic kindred of the city. You are still part of the Camarilla, but you have more sway here. San Francisco is an Anarch domain. As a Bruiser, you hang out with the Baron and support him in his rebellious troublemaking. -As a Dealer, you hold a powerful domain. You can make deals with whomever you want - but boons are always worth more than money. As a Chantry Regent, your objectives are to lead the Tremere of San Francisco and keep the Chantry secure, as well as hunt down any who would steal your clan's secrets. -As an Archivist, your objectives are to protect Tremere knowledge and the Chantry. -As a Taxi Driver, your objectives are to drive. Real human being. +As a Dealer, you hold a powerful domain. You can make deals with whomever you want - but boons are always worth more than money. +As a Hound, your objectives are to enforce the Traditions and the Camarilla's rule of the city. +As a Hunter, your objectives are to Hunt abnormal beings and night creatures in City. As a Primogen, your objectives are to represent your clan in the city, and make sure they are organized and loyal enough to keep you in power. +As a Prince, your objectives are to rule Camarilla and the City. Follow all Six Traditions of Kindred and decide how to fight global dangers. Don't forget to call on the Primogens if you need some help. As a Sabbat member, you must fight the enemies of the Dark Father - servants of the vile Antediluvians. -As a Hunter, your objectives are to Hunt abnormal beings and night creatures in City. -A "Turn" in game represents 5 seconds. -A "Scene" in game represents 3 minutes. -There are 36 turns in a scene. -You don't need to have your keys in your hand to unlock a door. Just right-click. -If you have a high enough strength, jumping in combat mode will create a shockwave. -You can conceal your satchel by Alt + Right-clicking it. -Lower generation vampires have access to stronger abilities, at the cost of requiring more blood to be sated. -Your firearm stat dramatically improves your ability to control recoil. -Vampires are hard to kill, but can be immobilized by driving a stake into their heart. -You can set off a sprinkler by attacking it with any item that would light a cigarette. -ATMs can be smashed with a high force weapon for whatever cash is inside of them. -Duffle bags can hold two large whitelisted items that bypass their normal item weight restriction. -Pool tables can be interacted with and let you play a mock game of billiards. -Gun casings leave forensic evidence that can trace back to your firearm unless preventative measures are taken. -Hovering over a dice roll with reveal what stats were used for rolls. -@You can italicize, embolden or underline portions of your messages by enclosing them with |, + or _ respectively. You can also avoid this by adding backslashes (they won't show in the message) before these characters. -♪ Hey, have you ever tried appending the % character before your messages when speaking in-game? ♫ -A thrown glass of water can make a slippery tile, allowing you to slow down your pursuers in a pinch. +As a Seneschal, your objectives are to help Prince make any business in the City. You are his right hand man, and he expects you to deal with matters beneath him. +As a Sheriff, your objectives are to protect Masquerade in the City. Speak with Camarilla's agents and decide the best technique to liquidate Masquerade breaches and breachers. +As a Taxi Driver, your objectives are to drive. Real human being. +As an Archivist, your objectives are to protect Tremere knowledge and the Chantry. Basketball requires focus. If you don't click on your target (player or hoop) you are more likely to miss. Basketball requires skill. Spinning drains stamina, reduces accuracy, but gives resistance from disarm. Use it to dunk! Basketball requires stamina. The more you have, the less likely your ball will be stolen and the more likely you can steal from another player. Basketball requires strategy. The direction both players are facing affects disarms so having your back to another player that is trying to steal is ideal. Basketball requires teamwork. Passing the ball with LMB is instant and costs no stamina. +Blood quality depends on the power or lifestyle of a creature. Vampire blood satisfies the most, after that lupine blood, then the wealthy, then the poor, then animals, and so on. +Boots can store items like knives or lighters. +Boots can store items like knives or lighters. +Cars use gasoline; you can buy more at a gas station. This can be used in the production of molotovs, as well. +Diablerie lowers your generation by one, if your victim's is lower than yours. Diablerie is one of the vilest deeds imaginable, and any kindred who learn of this will seek your permanent death. +Discipline levels can be changed with Right-Click. Don't be afraid to ask for help, whether from your peers or from admins. +Duffle bags can hold two large whitelisted items that bypass their normal item weight restriction. +Followers of Set, also known as Ministry, can avoid diablerie and staking by moving their heart to an urn. +Ghouls are weaker than kindred, and require vitae instead of mortal blood. But they also are immune to humanity and can learn any clan's disciplines to level 1. +Gun casings leave forensic evidence that can trace back to your firearm unless preventative measures are taken. Holding alt and left clicking a tile will allow you to see its contents in the top right window pane, which is much faster than holding shift and right clicking. +Hovering over a dice roll with reveal what stats were used for rolls. +Human players can use the "Report a Masquerade violation" button in people's examine text to report any weird supernatural stuff they shouldn't be seeing, like vampires feeding or punching people across a room. +If you are a mortal and do drugs, kindred can experience the same high by drinking your blood. +If you ever find yourself lost, look for a city map, use the navigate verb or button. Or just ask for directions. +If you have a high enough strength, jumping in combat mode will create a shockwave. If you're bleeding, you can apply pressure to the limb by grabbing yourself while targeting the bleeding limb. This will slow you down and take up a hand, but it'll slow down how fast you lose blood. Note this won't help the bleeding clot any faster. If you're using hotkey mode, you can stop pulling things using H. Laying down will help slow down bloodloss. Death will halt it entirely. +Lower generation vampires have access to stronger abilities, at the cost of requiring more blood to be sated. +Magical artifacts need to be identified in order to be used. The Tremere, Garou, or those with a tremendously high Occult skill can identify them. Most things have special interactions with right, alt, shift, and control click. Experiment! +Pool tables can be interacted with and let you play a mock game of billiards. +The Malkavian hivemind allows you to send any message, except images. The resist button will allow you to resist out of handcuffs, being buckled to a chair or bed, out of locked lockers and more. Whenever you're stuck, try resisting! +There are 36 turns in a scene. +To destroy any firearm's serial number, right-click it with a screwdriver in hand. +To use Thaumaturgy properly you should get an Arcane Tome. Some of them spawn in Chantry. Lasombra can also learn Abyss Mysticism by crafting a tome after reaching Obtenebration at level 5. +Tzimisce can upgrade your body with flesh and blood. Or they can turn you into a chair. Take this risk at your own judgement. +Vampires are hard to kill, but can be immobilized by driving a stake into their heart. When in doubt about technical issues, clear your cache (byond launcher > cogwheel > preferences > game prefs), update your BYOND, and relog. -You can use :L / .L or :R / .R to speak through an item being held in your left or right hand respectively. This allows you to talk into a city-bounced radio without manually turning on its microphone! -You can right click someone with wire cutters, jaws of life, and box cutters to instantly snap cablecuffs or zipties. The jaws can even instantly break handcuffs! +With high enough strength, you can attempt to bash down a door, but failing can injure you. +You can bloodbond people as a kindred. To do so - grab them and force them to swallow your vitae with Give Vitae ability. Bloodbonds strengthen the victim's emotions towards you and create an obsession. You can board up windows by left-clicking a window with planks in hand. -Boots can store items like knives or lighters. -To destroy any firearm's serial number, right-click it with a screwdriver in hand. You can board up windows by left-clicking a window with planks in hand. -Boots can store items like knives or lighters. +You can conceal your satchel by Alt + Right-clicking it. +You can find a lockpick on certain NPCs and at the black market or hardware store. Dexterity and larceny assist in your chances to succeed, and doors have varying difficulty. +You can find and publish your phone number on your phone. +You can jump around by pressing MMB. You can even jump over railings while standing next to them. +You can make a ghoul by bloodbonding a non-playable character. If there are any ghosts that want to play a ghoul - they will take over the ghouled NPC. +You can right click someone with wire cutters, jaws of life, and box cutters to instantly snap cablecuffs or zipties. The jaws can even instantly break handcuffs! +You can send announcements as the Prince by using your computer. Other kindred can see it on other computers too. +You can set off a sprinkler by attacking it with any item that would light a cigarette. +You can use :L / .L or :R / .R to speak through an item being held in your left or right hand respectively. This allows you to talk into a city-bounced radio without manually turning on its microphone! +You don't need to have your keys in your hand to unlock a door. Just right-click. +Your firearm stat dramatically improves your ability to control recoil. +♪ Hey, have you ever tried appending the % character before your messages when speaking in-game? ♫ diff --git a/modular_darkpack/modules/areas/code/__vtm.dm b/modular_darkpack/modules/areas/code/__vtm.dm index 6988767d90d3..26706fa23215 100644 --- a/modular_darkpack/modules/areas/code/__vtm.dm +++ b/modular_darkpack/modules/areas/code/__vtm.dm @@ -14,11 +14,6 @@ // is this able to be classified as a domain? e.g, territorial flaw, later political implementation var/domain = FALSE -/area/vtm/powered(chan) - if (!requires_power) - return TRUE - return FALSE - /area/vtm/proc/break_elysium() if (zone_type != ZONE_MASQUERADE) return diff --git a/modular_darkpack/modules/areas/code/interiors/city_interiors.dm b/modular_darkpack/modules/areas/code/interiors/city_interiors.dm index ee116544257c..e5697e8255e3 100644 --- a/modular_darkpack/modules/areas/code/interiors/city_interiors.dm +++ b/modular_darkpack/modules/areas/code/interiors/city_interiors.dm @@ -298,16 +298,6 @@ fire_controled = TRUE domain = TRUE -/area/vtm/interior/setite - name = "Community Center" - icon_state = "hotel" - fire_controled = TRUE - domain = TRUE - -/area/vtm/interior/setite/basement - name = "Community Center Basement" - zone_type = "elysium" - /area/vtm/interior/substation name = "Grid Substation" icon_state = "hotel" diff --git a/modular_darkpack/modules/areas/code/outsides/forest.dm b/modular_darkpack/modules/areas/code/outsides/forest.dm index 38683d7d72ef..bda6e42be2bf 100644 --- a/modular_darkpack/modules/areas/code/outsides/forest.dm +++ b/modular_darkpack/modules/areas/code/outsides/forest.dm @@ -5,3 +5,4 @@ sound_environment = SOUND_ENVIRONMENT_FOREST gauntlet_rating = 6 domain = TRUE + requires_power = FALSE diff --git a/modular_darkpack/modules/areas/code/zone_hud.dm b/modular_darkpack/modules/areas/code/zone_hud.dm index bcccadeb92be..ca4a04799367 100644 --- a/modular_darkpack/modules/areas/code/zone_hud.dm +++ b/modular_darkpack/modules/areas/code/zone_hud.dm @@ -6,4 +6,13 @@ alpha = 32 screen_loc = ui_zone_hud +/mob/living/proc/update_zone_hud(mob/source, area/new_area) + SIGNAL_HANDLER + + var/atom/movable/screen/zone_hud = hud_used?.screen_objects[HUD_MOB_ZONE] + if(zone_hud) + if(!istype(new_area, /area/vtm)) + return + var/area/vtm/our_area = new_area + zone_hud.icon_state = "[our_area.zone_type]" #undef ui_zone_hud diff --git a/modular_darkpack/modules/blood_drinking/code/bite_helper_procs.dm b/modular_darkpack/modules/blood_drinking/code/bite_helper_procs.dm index 208252bbe896..55bc48b1ad6e 100644 --- a/modular_darkpack/modules/blood_drinking/code/bite_helper_procs.dm +++ b/modular_darkpack/modules/blood_drinking/code/bite_helper_procs.dm @@ -17,8 +17,6 @@ REMOVE_TRAIT(src, TRAIT_NEEDS_BLOOD, TRAIT_GENERIC) to_chat(src, span_notice("Your hunger is satisfied as the Beast inside retreats.")) - //DARKPACK TODO: roll for frenzy when hungry and seeing, smelling, tasting blood, maybe like the old system where you roll every once in a while. the roll is - //self control 3 for seeing blood, 4 for smelling it, i think 6 for tasting it, all while hungry? bloodpool = clamp(bloodpool+amount, 0, maxbloodpool) if(updating_health) update_blood_hud() diff --git a/modular_darkpack/modules/blood_drinking/code/drinksomeblood.dm b/modular_darkpack/modules/blood_drinking/code/drinksomeblood.dm index fed0091f0aee..76584a82afd1 100644 --- a/modular_darkpack/modules/blood_drinking/code/drinksomeblood.dm +++ b/modular_darkpack/modules/blood_drinking/code/drinksomeblood.dm @@ -52,8 +52,6 @@ if(ishuman(drunk_from)) var/mob/living/carbon/human/H = drunk_from - drunked_of |= "[H.dna.real_name]" - if(!get_kindred_splat(drunk_from)) H.blood_volume = max(H.blood_volume-50, 150) diff --git a/modular_darkpack/modules/blood_drinking/code/kiss_status_effect/status_effect_kiss.dm b/modular_darkpack/modules/blood_drinking/code/kiss_status_effect/status_effect_kiss.dm index f1d3c31ab0c8..6016544ef4ab 100644 --- a/modular_darkpack/modules/blood_drinking/code/kiss_status_effect/status_effect_kiss.dm +++ b/modular_darkpack/modules/blood_drinking/code/kiss_status_effect/status_effect_kiss.dm @@ -7,7 +7,7 @@ /datum/status_effect/kissed/on_apply() . = ..() to_chat(owner, span_userlove("Sharp fangs pierce your skin, but the pain quickly fades as a numbing warmth sets in...")) //feel free to change these - owner.add_client_colour(/datum/client_colour/brightened) + owner.add_client_colour(/datum/client_colour/brightened, "kissed") if(ishuman(owner)) var/mob/living/carbon/human/H = owner H.adjust_eye_blur(15) @@ -15,7 +15,7 @@ /datum/status_effect/kissed/on_remove() to_chat(owner, span_userlove("As you wake, you find it hard to recall anything of the past few minutes. All you remember is a pleasant, warm feeling.")) //feel free to change these - owner.remove_client_colour(/datum/client_colour/brightened) + owner.remove_client_colour("kissed") owner.SetSleeping(50) if(ishuman(owner)) var/mob/living/carbon/human/H = owner @@ -28,5 +28,5 @@ icon_state = "in_love" //would be good to give this it's own icon eventually /datum/client_colour/brightened - priority = CLIENT_COLOR_HELMET_PRIORITY + priority = CLIENT_COLOR_IMPORTANT_PRIORITY color = list(1.15,0,0,0,1.15,0,0,0,1.15,0,0,0) diff --git a/modular_darkpack/modules/blood_drinking/code/vamp_bite.dm b/modular_darkpack/modules/blood_drinking/code/vamp_bite.dm index 0d16f446a2f3..fa40f0cc91b5 100644 --- a/modular_darkpack/modules/blood_drinking/code/vamp_bite.dm +++ b/modular_darkpack/modules/blood_drinking/code/vamp_bite.dm @@ -74,15 +74,7 @@ var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE)) if(!skipface) if(get_kindred_splat(src) && HAS_TRAIT(src, TRAIT_NEEDS_BLOOD)) - var/stat_to_roll = is_enlightenment() ? STAT_INSTINCT : STAT_SELF_CONTROL - var/datum/storyteller_roll/frezy_roll = new() - frezy_roll.applicable_stats = list(stat_to_roll) - var/frenzy_result = frezy_roll.st_roll(src, bit_living) - if(frenzy_result != ROLL_SUCCESS) - to_chat(src, span_userdanger("The taste of blood sends you into a frenzy as you feed!")) - // DARKPACK TODO: frenzy, please put the call here - else - to_chat(src, span_green("The taste of fresh blood while hungry almost drives you into frenzy!")) + trigger_kindred_frenzy(bit_living, 6, 0, "The taste of blood while hungry") if(!HAS_TRAIT(src, TRAIT_BLOODY_LOVER)) playsound(src, 'modular_darkpack/modules/blood_drinking/sounds/drinkblood1.ogg', 50, TRUE) diff --git a/modular_darkpack/modules/blooper/README.md b/modular_darkpack/modules/blooper/README.md new file mode 100644 index 000000000000..bfa1011fdbf3 --- /dev/null +++ b/modular_darkpack/modules/blooper/README.md @@ -0,0 +1,51 @@ +https://github.com/DarkPack13/SecondCity/pull/945 + +## \ + +Module ID: BLOOPERS + +### Description: + +Adds voice bloopers (voice barks) to the game. Similiar to animal crossing animalese. Noises that get played when a character talks. + +By default, no vocal bloopers are included in the repository, a sample config file is provided to demonstrate the format used. +To set things up, copy `blooper_config.json.example` and rename it to `blooper_config.json`, then add an entry for each blooper. + +### Config Format + +- name: Required, the user-friendly name of the voice, will be shown in the config menu +- id: Required, an internal ID for the voice, must be unique +- files: Required, a JSON array of audio file names, relative to the bloopers directory. + If there's more than one entry, a file is randomly chosen each time the user speaks +- min_speed: Optional, the minimum value the user can set for the voice speed +- max_speed: Optional, the maximum value the user can set for the voice speed +- min_pitch: Optional, the minimum value the user can set for the voice pitch +- max_pitch: Optional, the maximum value the user can set for the voice pitch +- min_vary: Optional, the minimum value the user can set for the voice pitch variance +- max_vary: Optional, the maximum value the user can set for the voice pitch variance + +### TG Proc/File Changes: + +- N/A + +### Modular Overrides: + +- N/A + +### Defines: + +- N/A + +### Included files that are not contained in this module: + +- N/A + +### Credits: + +XeonMations +xPokee +LT3 +TealSeer +GeneriedJenelle +ghost +SynthTwo diff --git a/modular_darkpack/modules/blooper/code/blooper.dm b/modular_darkpack/modules/blooper/code/blooper.dm new file mode 100644 index 000000000000..1291dcc2508e --- /dev/null +++ b/modular_darkpack/modules/blooper/code/blooper.dm @@ -0,0 +1,63 @@ +/datum/blooper + /// User friendly name of the blooper, displayed in preferences menu + var/name = null + /// Internal ID of blooper, must be unique + var/id = null + /// List of sounds, one is chosen randomly each time the blooper is played + var/list/sound/soundpath_list = list() + + var/min_pitch = BLOOPER_DEFAULT_MINPITCH + var/max_pitch = BLOOPER_DEFAULT_MAXPITCH + var/min_vary = BLOOPER_DEFAULT_MINVARY + var/max_vary = BLOOPER_DEFAULT_MAXVARY + + // Speed vars. Speed determines the number of characters required for each blooper, with lower speeds being faster with higher blooper density + var/min_speed = BLOOPER_DEFAULT_MINSPEED + var/max_speed = BLOOPER_DEFAULT_MAXSPEED + +/** + * Plays the vocal blooper for all listeners, duration is controlled by length of the message argument + * * speaker - Origin source of the blooper, used for 3D audio calculations and to set the cooldown + * * listeners - List of mobs that will hear the blooper + * * message - Chat message being sent, used to determine how long bloopers play for (longer message, more sounds) + * * distance - Range at which the sounds will be heard + * * volume - Volume the sounds will play at + * * speed - How fast the bloopers will be, percentage between 0 - 100, converted and clamped to datum's min/max values + * * pitch - How high-pitched the bloopers will be, percentage between 0 - 100, converted and clamped to datum's min/max values + * * pitch_range - Amount of pitch variance for each blooper, percentage between 0 - 100, converted and clamped to datum's max/min values + */ +/datum/blooper/proc/play_bloop(atom/movable/speaker, list/listeners, message, distance, volume, speed, pitch, pitch_range) + if(!COOLDOWN_FINISHED(speaker, blooper_cooldown)) + return + volume = min(volume, 100) + // convert passed values (which are percentages) into value clamped between min and max of blooper datum + speed = round(min_speed + ((max_speed - min_speed) * ((100 - speed) / 100)), 0.01) // this one gets inverted because lower % = faster isn't intuitive + pitch = round(min_pitch + ((max_pitch - min_pitch) * (pitch / 100)), 0.01) + pitch_range = round(min_vary + ((max_vary - min_vary) * (pitch_range / 100)), 0.01) + for(var/mob/target_mob in listeners) + if(target_mob.client && !(target_mob.client.prefs.read_preference(/datum/preference/toggle/hear_blooper))) + listeners -= target_mob + var/sound/blooper_pick = pick(soundpath_list) + var/num_bloopers = min(round(length(message) / speed, 1) + 1, BLOOPER_MAX_BLOOPERS) + var/total_delay = 0 + for(var/i in 1 to num_bloopers) + if(total_delay > BLOOPER_MAX_TIME) + break + addtimer(CALLBACK(src, PROC_REF(play_callback), speaker, listeners, distance, volume, BLOOPER_DO_VARY(pitch, pitch_range), blooper_pick), total_delay) + total_delay += rand(DS2TICKS(speed / BLOOPER_SPEED_BASELINE), DS2TICKS(speed / BLOOPER_SPEED_BASELINE) + DS2TICKS(speed / BLOOPER_SPEED_BASELINE)) TICKS + COOLDOWN_START(speaker, blooper_cooldown, total_delay) + +/// Private callback function to actually play the sound, used for timers scheduled in play_bloop +/datum/blooper/proc/play_callback(atom/movable/speaker, list/listeners, distance, volume, pitch, sound/voice) + PRIVATE_PROC(TRUE) + for(var/mob/target_mob in listeners) + target_mob.playsound_local( + turf_source = get_turf(speaker), + soundin = voice, + vol = volume, + vary = TRUE, + frequency = pitch, + falloff_distance = 0, + falloff_exponent = BLOOPER_SOUND_FALLOFF_EXPONENT, + max_distance = distance, + ) diff --git a/modular_darkpack/modules/blooper/code/blooper_subsystem.dm b/modular_darkpack/modules/blooper/code/blooper_subsystem.dm new file mode 100644 index 000000000000..94949df9fd28 --- /dev/null +++ b/modular_darkpack/modules/blooper/code/blooper_subsystem.dm @@ -0,0 +1,40 @@ +#define BLOOPER_CONFIG_PATH "[global.config.directory]/darkpack_config/bloopers" + +SUBSYSTEM_DEF(blooper) + name = "Blooper" + ss_flags = SS_NO_FIRE | SS_NO_INIT + + var/list/blooper_list + +/datum/controller/subsystem/blooper/OnConfigLoad() + blooper_list = initialize_blooper_datums() + +/datum/controller/subsystem/blooper/proc/initialize_blooper_datums() + var/list/blooper_datums = list() + if(!rustg_file_exists("[BLOOPER_CONFIG_PATH]/blooper_config.json")) + logger.Log(LOG_CATEGORY_DEBUG, "blooper_config.json not found.") + return blooper_datums + var/list/blooper_entries = safe_json_decode(rustg_file_read("[BLOOPER_CONFIG_PATH]/blooper_config.json")) + if(isnull(blooper_entries)) + stack_trace("Blooper config is malformed!") + return blooper_datums + for(var/entry in blooper_entries) + // These fields are required + if(isnull(entry["name"]) || isnull(entry["id"]) || isnull(entry["files"]) || !length(entry["files"])) + stack_trace("Blooper config entry was missing required field!") + continue + var/datum/blooper/new_blooper = new() + new_blooper.name = entry["name"] + new_blooper.id = entry["id"] + for(var/file in entry["files"]) + new_blooper.soundpath_list += sound("[BLOOPER_CONFIG_PATH]/sounds/[file]") + new_blooper.min_pitch = entry["min_pitch"] || BLOOPER_DEFAULT_MINPITCH + new_blooper.max_pitch = entry["max_pitch"] || BLOOPER_DEFAULT_MAXPITCH + new_blooper.min_vary = entry["min_vary"] || BLOOPER_DEFAULT_MINVARY + new_blooper.max_vary = entry["max_vary"] || BLOOPER_DEFAULT_MAXVARY + new_blooper.min_speed = entry["min_speed"] || BLOOPER_DEFAULT_MINSPEED + new_blooper.max_speed = entry["max_speed"] || BLOOPER_DEFAULT_MAXSPEED + blooper_datums[new_blooper.id] = new_blooper + return blooper_datums + +#undef BLOOPER_CONFIG_PATH diff --git a/modular_darkpack/modules/blooper/code/changeling.dm b/modular_darkpack/modules/blooper/code/changeling.dm new file mode 100644 index 000000000000..6e40ecf4881a --- /dev/null +++ b/modular_darkpack/modules/blooper/code/changeling.dm @@ -0,0 +1,9 @@ +/datum/changeling_profile + /// The blooper voice used by the profile source + var/datum/blooper/blooper + /// The blooper speed used by the profile source + var/blooper_speed + /// The blooper pitch used by the profile source + var/blooper_pitch + /// The blooper pitch range used by the profile source + var/blooper_pitch_range diff --git a/modular_darkpack/modules/blooper/code/preferences/middleware/blooper.dm b/modular_darkpack/modules/blooper/code/preferences/middleware/blooper.dm new file mode 100644 index 000000000000..4edbc76c08b3 --- /dev/null +++ b/modular_darkpack/modules/blooper/code/preferences/middleware/blooper.dm @@ -0,0 +1,12 @@ +/datum/preference_middleware/blooper + action_delegations = list( + "play_blooper" = PROC_REF(play_blooper), + ) + +/datum/preference_middleware/blooper/proc/play_blooper(list/params, mob/user) + var/datum/blooper/blooper_to_use = SSblooper.blooper_list[preferences.read_preference(/datum/preference/choiced/blooper)] + var/blooper_speed = preferences.read_preference(/datum/preference/numeric/blooper_speed) + var/blooper_pitch = preferences.read_preference(/datum/preference/numeric/blooper_pitch) + var/blooper_pitch_range = preferences.read_preference(/datum/preference/numeric/blooper_pitch_range) + blooper_to_use.play_bloop(user, list(user), "This is a test message to hear a blooper.", 7, 70, blooper_speed, blooper_pitch, blooper_pitch_range) + return TRUE diff --git a/modular_darkpack/modules/blooper/code/preferences/preferences.dm b/modular_darkpack/modules/blooper/code/preferences/preferences.dm new file mode 100644 index 000000000000..04d5bc47e0ef --- /dev/null +++ b/modular_darkpack/modules/blooper/code/preferences/preferences.dm @@ -0,0 +1,99 @@ +/datum/preference/choiced/blooper + category = PREFERENCE_CATEGORY_VOCALS + savefile_identifier = PREFERENCE_CHARACTER + savefile_key = "blooper_choice" + +/datum/preference/choiced/blooper/init_possible_values() + // no bloopers configured, return dummy list to avoid runtimes + if(!length(SSblooper.blooper_list)) + return list("none") + return assoc_to_keys(SSblooper.blooper_list) + +/datum/preference/choiced/blooper/apply_to_human(mob/living/carbon/human/target, value) + target.blooper = SSblooper.blooper_list[value] + +/datum/preference/choiced/blooper/is_accessible(datum/preferences/preferences) + return ..() && length(SSblooper.blooper_list) + +/datum/preference/choiced/blooper/compile_constant_data() + var/list/data = ..() + if(!length(SSblooper.blooper_list)) + return data + var/list/display_names = list() + for(var/id in get_choices()) + display_names[id] = astype(SSblooper.blooper_list[id], /datum/blooper).name + data[CHOICED_PREFERENCE_DISPLAY_NAMES] = display_names + return data + +/datum/preference/numeric/blooper_speed + category = PREFERENCE_CATEGORY_VOCALS + savefile_identifier = PREFERENCE_CHARACTER + savefile_key = "blooper_speed" + minimum = 0 + maximum = 100 + +/datum/preference/numeric/blooper_speed/apply_to_human(mob/living/carbon/human/target, value) + target.blooper_speed = value + +/datum/preference/numeric/blooper_speed/create_default_value() + return 50 + +/datum/preference/numeric/blooper_speed/is_accessible(datum/preferences/preferences) + return ..() && length(SSblooper.blooper_list) + +/datum/preference/numeric/blooper_pitch + category = PREFERENCE_CATEGORY_VOCALS + savefile_identifier = PREFERENCE_CHARACTER + savefile_key = "blooper_pitch" + minimum = 0 + maximum = 100 + +/datum/preference/numeric/blooper_pitch/apply_to_human(mob/living/carbon/human/target, value) + target.blooper_pitch = value + +/datum/preference/numeric/blooper_pitch/create_default_value() + return 50 + +/datum/preference/numeric/blooper_pitch/is_accessible(datum/preferences/preferences) + return ..() && length(SSblooper.blooper_list) + +/datum/preference/numeric/blooper_pitch_range + category = PREFERENCE_CATEGORY_VOCALS + savefile_identifier = PREFERENCE_CHARACTER + savefile_key = "blooper_pitch_range" + minimum = 0 + maximum = 100 + +/datum/preference/numeric/blooper_pitch_range/apply_to_human(mob/living/carbon/human/target, value) + target.blooper_pitch_range = value + +/datum/preference/numeric/blooper_pitch_range/create_default_value() + return 30 + +/datum/preference/numeric/blooper_pitch_range/is_accessible(datum/preferences/preferences) + return ..() && length(SSblooper.blooper_list) + +// Game preferences beyond this point. + +// Hear vocal bloopers +/datum/preference/toggle/hear_blooper + category = PREFERENCE_CATEGORY_GAME_PREFERENCES + savefile_identifier = PREFERENCE_PLAYER + savefile_key = "blooper_hear" + default_value = TRUE + +/datum/preference/numeric/blooper_sound_volume + category = PREFERENCE_CATEGORY_GAME_PREFERENCES + savefile_identifier = PREFERENCE_PLAYER + savefile_key = "sound_blooper_volume" + minimum = 0 + maximum = 100 + +/datum/preference/numeric/blooper_sound_volume/apply_to_human(mob/living/carbon/human/target, value) + return + +/datum/preference/numeric/blooper_sound_volume/create_default_value() + return 100 + +/datum/preference/numeric/blooper_sound_volume/is_accessible(datum/preferences/preferences) + return ..() && length(SSblooper.blooper_list) diff --git a/modular_darkpack/modules/books/code/books.dm b/modular_darkpack/modules/books/code/books.dm index 2936ddb2f9c1..96153c2e5405 100644 --- a/modular_darkpack/modules/books/code/books.dm +++ b/modular_darkpack/modules/books/code/books.dm @@ -42,3 +42,12 @@ /obj/item/vampirebook/quran/read_book(mob/living/carbon/human/user) quote = pick(GLOB.quran_quotes) + +/obj/item/vampirebook/bible + name = "Bible" + icon_state = "bible" + +// note to self - fucking move this to the parent type +/obj/item/vampirebook/bible/read_book(mob/living/carbon/human/user) + . = ..() + quote = pick(GLOB.bible_quotes) diff --git a/modular_darkpack/modules/cars/code/car.dm b/modular_darkpack/modules/cars/code/car.dm index f5a83940f720..53d9d4be11a7 100644 --- a/modular_darkpack/modules/cars/code/car.dm +++ b/modular_darkpack/modules/cars/code/car.dm @@ -476,20 +476,20 @@ if(istype(bumped_atom, /mob/living)) var/mob/living/hit_mob = bumped_atom switch(hit_mob.mob_size) - if(MOB_SIZE_HUGE) //gangrel warforms, werewolves, bears, ppl with fortitude + if(MOB_SIZE_HUGE) // zulo form playsound(src, 'modular_darkpack/modules/cars/sounds/bump.ogg', 75, TRUE) speed_in_pixels = 0 COOLDOWN_START(src, impact_delay, 2 SECONDS) hit_mob.Paralyze(1 SECONDS) - if(MOB_SIZE_LARGE) //ppl with fat bodytype + if(MOB_SIZE_LARGE) // gangrel warforms, werewolves, bears playsound(src, 'modular_darkpack/modules/cars/sounds/bump.ogg', 60, TRUE) speed_in_pixels = round(speed_in_pixels * 0.35) hit_mob.Knockdown(1 SECONDS) - if(MOB_SIZE_SMALL) //small animals + if(MOB_SIZE_SMALL) //small animals playsound(src, 'modular_darkpack/modules/cars/sounds/bump.ogg', 40, TRUE) speed_in_pixels = round(speed_in_pixels * 0.75) hit_mob.Knockdown(1 SECONDS) - else //everything else + else //everything else playsound(src, 'modular_darkpack/modules/cars/sounds/bump.ogg', 50, TRUE) speed_in_pixels = round(speed_in_pixels * 0.5) hit_mob.Knockdown(1 SECONDS) diff --git a/modular_darkpack/modules/cars/code/subtypes.dm b/modular_darkpack/modules/cars/code/subtypes.dm index 4bd94b6a4c7e..5aaf4f3807ae 100644 --- a/modular_darkpack/modules/cars/code/subtypes.dm +++ b/modular_darkpack/modules/cars/code/subtypes.dm @@ -92,8 +92,8 @@ /obj/darkpack_car/police/unmarked icon_state = "unmarked" -/obj/darkpack_car/police/process() - // If the light is not on, OR if we only have 1 light color, there is 0 reason to swap between light states +/obj/darkpack_car/police/process(seconds_per_tick) + // If the light is not on, OR if we only have 1 light color, there is 0 reason to swap between light states if(!light_on || (primary_light_color == secondary_light_color)) return ..() if(!COOLDOWN_FINISHED(src, last_color_change)) diff --git a/modular_darkpack/modules/city_traits/code/negative_traits.dm b/modular_darkpack/modules/city_traits/code/negative_traits.dm index 1f0ff9742bd6..ba2b4f7305b8 100644 --- a/modular_darkpack/modules/city_traits/code/negative_traits.dm +++ b/modular_darkpack/modules/city_traits/code/negative_traits.dm @@ -39,10 +39,7 @@ /datum/station_trait/faulty_power_grid/on_round_start() . = ..() - // Fuck I hate it, rework fusebox code - for(var/obj/fusebox/broken_box in world) + for(var/obj/fusebox/F in GLOB.fuseboxes) if(prob(75)) continue - broken_box.damaged += rand(50, 200) - broken_box.check_damage() - + F.take_damage(rand(50,200)) diff --git a/modular_darkpack/modules/clothes/code/belt.dm b/modular_darkpack/modules/clothes/code/belt.dm index a2c1cfb7ca4d..1a0d331f7c52 100644 --- a/modular_darkpack/modules/clothes/code/belt.dm +++ b/modular_darkpack/modules/clothes/code/belt.dm @@ -40,8 +40,8 @@ /obj/item/storage/belt/holster/detective/darkpack/fbi/PopulateContents() new /obj/item/gun/ballistic/automatic/pistol/darkpack/glock21(src) - new /obj/item/ammo_box/magazine/glock45acp(src) - new /obj/item/ammo_box/magazine/glock45acp(src) + new /obj/item/ammo_box/magazine/glock45acp/hp(src) + new /obj/item/ammo_box/magazine/glock45acp/hp(src) /obj/item/storage/belt/holster/detective/darkpack/endron diff --git a/modular_darkpack/modules/clothes/code/eyes.dm b/modular_darkpack/modules/clothes/code/eyes.dm index bc804e86136b..446b8a31f4d0 100644 --- a/modular_darkpack/modules/clothes/code/eyes.dm +++ b/modular_darkpack/modules/clothes/code/eyes.dm @@ -8,6 +8,7 @@ icon = 'modular_darkpack/modules/clothes/icons/clothing.dmi' worn_icon = 'modular_darkpack/modules/clothes/icons/worn.dmi' ONFLOOR_ICON_HELPER('modular_darkpack/modules/clothes/icons/clothing_onfloor.dmi') + flags_cover = GLASSESCOVERSEYES /obj/item/clothing/glasses/vampire/Initialize(mapload) . = ..() diff --git a/modular_darkpack/modules/company_logos/code/company_logos.dm b/modular_darkpack/modules/company_logos/code/company_logos.dm new file mode 100644 index 000000000000..35be926ef778 --- /dev/null +++ b/modular_darkpack/modules/company_logos/code/company_logos.dm @@ -0,0 +1,71 @@ +GLOBAL_LIST_INIT(all_brands, init_subtypes_w_path_keys(/datum/brand, list())) +GLOBAL_LIST_INIT(all_brandnames, brand_list_by_name()) + +/proc/brand_list_by_name() + var/list/brand_list = GLOB.all_brands + + for(var/path in brand_list) + var/datum/brand/this_brand = brand_list[path] + brand_list[this_brand.manufacturer] = this_brand + return brand_list + +/datum/element/corp_label + var/datum/brand/our_brand = /datum/brand + element_flags = ELEMENT_BESPOKE + argument_hash_start_idx = 1 + +/datum/element/corp_label/Attach(datum/target, datum/brand/my_brand) + . = ..() + if(!isatom(target)) + return ELEMENT_INCOMPATIBLE + + var/obj/product = target + + if(!product.brand) + return ELEMENT_INCOMPATIBLE + + our_brand = my_brand + + if(isnull(my_brand)) + our_brand = /datum/brand + + RegisterSignal(target, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) + RegisterSignal(target, COMSIG_ATOM_EXAMINE_MORE, PROC_REF(on_examine_more)) + +/datum/element/corp_label/Detach(datum/target) + UnregisterSignal(target, list(COMSIG_ATOM_EXAMINE)) + return ..() + +/datum/element/corp_label/proc/on_examine(datum/source, mob/user, list/examine_list) + SIGNAL_HANDLER + examine_list += span_notice("
This item is branded. [EXAMINE_HINT("Look closer")] for more information.") + +/datum/element/corp_label/proc/on_examine_more(datum/source, mob/user, list/examine_list) + SIGNAL_HANDLER + var/logo + if(our_brand.render_logo) + logo = "[icon2html(our_brand.logo_icon, user, our_brand.manufacturer, extra_classes = "corplogo")]" + + examine_list += span_info("[logo ? "[logo]
" : ""]Brought to you by [our_brand.full_name].") + + if(our_brand.slogan) + examine_list += span_notice("\"[our_brand.slogan]\"") + +/datum/brand + abstract_type = /datum/brand + + // Used to index the brand and reference the icon_state + var/manufacturer = "badcode" + // The full, plain-text name of the company. + var/full_name = "Bad Code Inc." + // Company slogan. Displayed alongside the logo in most cases. + var/slogan = "Bad Code Inc.: Telling America's Coders they screwed up since 1970." + // Formatting applied to the name in item descriptions + var/name_span = "hypnophrase" + // The icon file we're grabbing our icon_state from. Default dimensions in this file are 300x110. + var/logo_icon = 'modular_darkpack/modules/COMPANY_LOGOS/icons/corp_logos.dmi' + // If FALSE, skip rendering the logo in examine text. + var/render_logo = TRUE + // Company color used for coloring certain items that change depending on brand + var/company_color = COLOR_ADMIN_PINK + diff --git a/modular_darkpack/modules/company_logos/code/pentex.dm b/modular_darkpack/modules/company_logos/code/pentex.dm new file mode 100644 index 000000000000..afd75319797a --- /dev/null +++ b/modular_darkpack/modules/company_logos/code/pentex.dm @@ -0,0 +1,210 @@ +/datum/brand/pentex + manufacturer = "pentex" + full_name = EVIL_COMPANY + slogan = "Pentex: Making All The Really Tough Decisions For You!" + name_span = "corp_label_pentex" + company_color = COLOR_CORP_PENTEX + +// TOP 21 - Companies that are or were at one time in the top 21 +/datum/brand/pentex/ardus + manufacturer = "ardus" + full_name = EVIL_TRASH_COMPANY + slogan = "Keeping America's wilderness clean!" + name_span = "corp_label_ardus" + company_color = COLOR_CORP_ARDUS + +/datum/brand/pentex/avalon + manufacturer = "avalon" + full_name = EVIL_TOY_COMPANY + slogan = "Blast off to Fun!" + name_span = "corp_label_avalon" + company_color = COLOR_CORP_AVALON + +/datum/brand/pentex/circinus + manufacturer = "circinus" + full_name = EVIL_CIGARETTE_COMPANY + slogan = "The best taste in the tent." + name_span = "corp_label_circinus" + company_color = COLOR_CORP_CIRCINUS + +/datum/brand/pentex/consolidex + manufacturer = "consolidex" + full_name = EVIL_INVESTMENT_COMPANY + slogan = "Portfolio simplified." + name_span = "corp_label_consolidex" + company_color = COLOR_CORP_CONSOLIDEX + +/datum/brand/pentex/endron + manufacturer = "endron" + full_name = EVIL_OIL_COMPANY + slogan = "For a greener tomorrow!" + name_span = "corp_label_endron" + company_color = COLOR_CORP_ENDRON + +/datum/brand/pentex/endron/atlas + manufacturer = "atlas" + full_name = EVIL_NUCLEAR_COMPANY + slogan = "Atlas: Providers for Our Future." + render_logo = FALSE + +/datum/brand/pentex/harold_and_harold + manufacturer = "harold_and_harold" + full_name = EVIL_MINING_COMPANY + slogan = "Finding what makes the world work, underground." + name_span = "corp_label_harold_harold" + company_color = COLOR_CORP_HAROLD_HAROLD + +/datum/brand/pentex/good_house + manufacturer = "good_house" + full_name = EVIL_PAPER_COMPANY + slogan = "Sustainable stationary for a sustainable future." + name_span = "corp_label_good_house" + company_color = COLOR_CORP_GOOD_HOUSE + +/datum/brand/pentex/hallahan + manufacturer = "hallahan" + full_name = EVIL_FISHING_COMPANY + slogan = "Bounty of the sea straight to your plate." + name_span = "corp_label_hallahan" + company_color = COLOR_CORP_HALLAHAN + +/datum/brand/pentex/herculean + manufacturer = "herculean" + full_name = EVIL_HANDGUN_COMPANY + slogan = "No labour too great for a Herculean." + name_span = "corp_label_herculean" + company_color = COLOR_CORP_HERCULEAN + +/datum/brand/pentex/herricks + manufacturer = "herricks" + full_name = EVIL_GROCERY_COMPANY + slogan = "A full pantry without costing a full wallet." + name_span = "corp_label_herricks" + company_color = COLOR_CORP_HERRICKS + +/datum/brand/pentex/king + manufacturer = "king" + full_name = EVIL_LIQUOR_COMPANY + slogan = "Nobody is better at brewing than the King." + name_span = "corp_label_king" + company_color = COLOR_CORP_KING + +/datum/brand/pentex/magadon + manufacturer = "magadon" + full_name = EVIL_PHARMA_COMPANY + slogan = "Magadon: building a better you." + name_span = "corp_label_magadon" + company_color = COLOR_CORP_MAGADON + +/datum/brand/pentex/magadon/aesop + manufacturer = "aesop" + full_name = EVIL_COSMETICS_COMPANY + slogan = "Humane testing for Human needs." + render_logo = FALSE + +/datum/brand/pentex/magadon/autumn + manufacturer = "autumn" + full_name = EVIL_HOSPITAL_COMPANY + slogan = "Let our family care for your family." + render_logo = FALSE + +/datum/brand/pentex/nastrum + manufacturer = "nastrum" + full_name = EVIL_AVIATION_COMPANY + slogan = "Safety in efficiency." + name_span = "corp_label_nastrum" + company_color = COLOR_CORP_NASTRUM + +/datum/brand/pentex/omni + manufacturer = "omni" + full_name = EVIL_TELEVISION_COMPANY + slogan = "Omni: Entertainment at your fingertips." + name_span = "corp_label_omni_tv" + company_color = COLOR_CORP_OMNI_TV + +/datum/brand/pentex/otolleys + manufacturer = "otolleys" + full_name = EVIL_FAST_FOOD_COMPANY + slogan = "The family place." + name_span = "corp_label_otolleys" + company_color = COLOR_CORP_OTOLLEYS + +/datum/brand/pentex/black_dog + manufacturer = "black_dog" + full_name = EVIL_TTRPG_COMPANY + slogan = "Bring some Shadow to your table." + name_span = "corp_label_black_dog" + company_color = COLOR_CORP_BLACK_DOG + +/datum/brand/pentex/rainbow + manufacturer = "rainbow" + full_name = EVIL_PLASTIC_COMPANY + slogan = "Materials for the whole spectrum of products." + name_span = "corp_label_rainbow" + company_color = COLOR_CORP_RAINBOW_INC + +/datum/brand/pentex/tellus + manufacturer = "tellus" + full_name = EVIL_COMPUTER_COMPANY + slogan = "Tellus: Virtual worlds you could fall into." + name_span = "corp_label_tellus" + company_color = COLOR_CORP_TELLUS + +/datum/brand/pentex/tellus/sunburst + manufacturer = "sunburst" + full_name = EVIL_COMPUTER_COMPANY_2 + slogan = "Computer parts should be sustainable. At Sunburst, they are." + render_logo = FALSE + +/datum/brand/pentex/vesuvius + manufacturer = "vesuvius" + full_name = EVIL_PUBLISHING_COMPANY + slogan = "Nobody tells a story like Vesuvius." + name_span = "corp_label_vesuvius" + company_color = COLOR_CORP_VESUVIUS + +/datum/brand/pentex/young_and_smith + manufacturer = "young_and_smith" + full_name = EVIL_FOOD_COMPANY + slogan = "Make your grocery trips simpler. Ask for Young and Smith." + name_span = "corp_label_young_smith" + company_color = COLOR_CORP_YOUNG_SMITH + +// EVERTHING ELSE - Pentex subsidiares that are not and have never been in the top 21 +/datum/brand/pentex/endron/easton + manufacturer = "easton" + full_name = EVIL_ENGINE_COMPANY + slogan = "Let Easton Exploratory be your guide on the search for the world's energy." + render_logo = FALSE + +/datum/brand/pentex/endron/falcon_motors + manufacturer = "falcon_motors" + full_name = EVIL_CAR_COMPANY + slogan = "The smoothest ride is on the wings of a Falcon." + render_logo = FALSE + +/datum/brand/pentex/endron/egpc // Is this the most niche subsidiary? Probably. + manufacturer = "egpc" + full_name = EVIL_EGYPTIAN_OIL_COMPANY + render_logo = FALSE + +/datum/brand/pentex/harold_and_harold/kauket // Nevermind. It's probably this one. + manufacturer = "kauket" + full_name = EVIL_EGYPTIAN_MINING_COMPANY + render_logo = FALSE + +/datum/brand/pentex/king/aquaclear + manufacturer = "aquaclear" + full_name = EVIL_WATERWAY_COMPANY + slogan = "Keeping the world flowing." + render_logo = FALSE + +/datum/brand/pentex/king/dragon_valley + manufacturer = "dragon_valley" + full_name = EVIL_WINE_COMPANY + slogan = "Raid the Dragon's Horde for a night you'll never forget." + render_logo = FALSE + +/datum/brand/pentex/king/king // Confusing, but meaningful distinction. The actual breweries that make the booze. + manufacturer = "king2" + full_name = EVIL_BEER_COMPANY diff --git a/modular_darkpack/modules/company_logos/icons/corp_logos.dmi b/modular_darkpack/modules/company_logos/icons/corp_logos.dmi new file mode 100644 index 000000000000..079cb0d7199a Binary files /dev/null and b/modular_darkpack/modules/company_logos/icons/corp_logos.dmi differ diff --git a/modular_darkpack/modules/company_logos/readme.md b/modular_darkpack/modules/company_logos/readme.md new file mode 100644 index 000000000000..f007e1e53b94 --- /dev/null +++ b/modular_darkpack/modules/company_logos/readme.md @@ -0,0 +1,10 @@ +https://github.com/DarkPack13/SecondCity/pull/491 + +## \ + +Module ID: COMPANY_LOGOS + +### Credits: + +dwinters99 +Drulikar diff --git a/modular_darkpack/modules/decor/code/decor.dm b/modular_darkpack/modules/decor/code/decor.dm index 5ff48a591ad9..05a5debd316a 100644 --- a/modular_darkpack/modules/decor/code/decor.dm +++ b/modular_darkpack/modules/decor/code/decor.dm @@ -48,10 +48,27 @@ /obj/structure/lamppost/Initialize(mapload) . = ..() + var/area/vtm/my_area = get_area(src) if(check_holidays(FESTIVE_SEASON)) - var/area/my_area = get_area(src) if(istype(my_area) && my_area.outdoors) icon_state = "[initial(icon_state)]-snow" + RegisterSignal(my_area, COMSIG_AREA_POWER_CHANGE, PROC_REF(on_power_change)) + // DARKPACK TODO - fuseboxes and areas aren't meaningfully connected to each other, and thusly aren't meaningfully connected to lights/devices that may need poer. + // TLDR we need to basically re-evaluate how we approach power... the current system is flavcode spaghetti shit. + if(my_area.powered(AREA_USAGE_LIGHT)) + create_lights() + +/obj/structure/lamppost/proc/on_power_change(area/A) + SIGNAL_HANDLER + + + if(A.power_light) + create_lights() + else + QDEL_LIST(my_lights) + +/obj/structure/lamppost/proc/create_lights() + QDEL_LIST(my_lights) switch(number_of_lamps) if(1) new_light(get_step(loc, dir)) @@ -74,6 +91,7 @@ my_lights += new /obj/effect/decal/lamplight(location) /obj/structure/lamppost/Destroy(force) + UnregisterSignal(get_area(src), COMSIG_AREA_POWER_CHANGE) QDEL_LIST(my_lights) . = ..() @@ -459,19 +477,20 @@ if(pole_in_use) to_chat(user, "It's already in use - wait a bit.") return + if(user.dancing) return - else - pole_in_use = TRUE - user.setDir(SOUTH) - user.Stun(100) - user.forceMove(src.loc) - user.visible_message("[user] dances on [src]!") - animatepole(user) - user.layer = layer //set them to the poles layer - pole_in_use = FALSE - user.pixel_y = 0 - icon_state = initial(icon_state) + + pole_in_use = TRUE + user.setDir(SOUTH) + user.Stun(100) + user.forceMove(src.loc) + user.visible_message("[user] dances on [src]!") + animatepole(user) + user.layer = layer //set them to the poles layer + pole_in_use = FALSE + user.pixel_y = 0 + icon_state = initial(icon_state) /obj/structure/pole/proc/animatepole(mob/living/user) return diff --git a/modular_darkpack/modules/decor/code/road_signs.dm b/modular_darkpack/modules/decor/code/road_signs.dm index 569560d7c9d5..0e52499f65f6 100644 --- a/modular_darkpack/modules/decor/code/road_signs.dm +++ b/modular_darkpack/modules/decor/code/road_signs.dm @@ -10,18 +10,96 @@ name = "stop sign" icon_state = "stop" +/obj/structure/roadsign/fourway + icon_state = "4way" + +/obj/structure/roadsign/allway + icon_state = "allway" + +/obj/structure/roadsign/wrongway + icon_state = "wrongway" + /obj/structure/roadsign/noparking name = "no parking sign" icon_state = "noparking" +/obj/structure/roadsign/noturnleft + icon_state = "noturnleft" + +/obj/structure/roadsign/noturnright + icon_state = "noturnright" + +/obj/structure/roadsign/noturnforward + icon_state = "noturnforward" + +/obj/structure/roadsign/noturnback + icon_state = "noturnback" + /obj/structure/roadsign/nopedestrian name = "no pedestrian sign" icon_state = "nopedestrian" +/obj/structure/roadsign/exitright + icon_state = "exitright" + +/obj/structure/roadsign/exitleft + icon_state = "exitleft" + + +/obj/structure/roadsign/street + name = "street sign" + icon_state = "street" + /// IF set, will override the getter for the area's name + var/custom_street_name + +/obj/structure/roadsign/street/Initialize(mapload) + . = ..() + update_appearance() + +/obj/structure/roadsign/street/update_name(updates) + . = ..() + var/street_name = get_street_name() + if(!street_name) + return + name = "street sign ([street_name])" + +/obj/structure/roadsign/street/update_desc(updates) + . = ..() + var/street_name = get_street_name() + if(!street_name) + return + desc = "A street sign declaring you are at \"[street_name]\"" + +/obj/structure/roadsign/street/proc/get_street_name() + if(custom_street_name) + return custom_street_name + var/area/my_area = get_area(src) + if(my_area) + return my_area + + +/obj/structure/roadsign/onewayleft + icon_state = "onewayleft" + +/obj/structure/roadsign/onewayright + icon_state = "onewayright" + /obj/structure/roadsign/busstop name = "bus stop sign" icon_state = "busstop" +/obj/structure/roadsign/railcrossing + icon_state = "railcrossing" + +/obj/structure/roadsign/onlyforward + icon_state = "onlyforward" + +/obj/structure/roadsign/onlyright + icon_state = "onlyright" + +/obj/structure/roadsign/onlyleft + icon_state = "onlyleft" + /obj/structure/roadsign/speedlimit name = "speed limit sign" icon_state = "speed50" @@ -38,10 +116,16 @@ name = "traffic light warning sign" icon_state = "warningtrafficlight" +/obj/structure/roadsign/warningdeer + icon_state = "warningdeer" + /obj/structure/roadsign/warningpedestrian name = "pedestrian warning sign" icon_state = "warningpedestrian" +/obj/structure/roadsign/circleofdoom + icon_state = "circleofdoom" + /obj/structure/roadsign/parking name = "parking sign" icon_state = "parking" diff --git a/modular_darkpack/modules/decor/code/signs_city.dm b/modular_darkpack/modules/decor/code/signs_city.dm index f93e5563d81e..30f3957a8f29 100644 --- a/modular_darkpack/modules/decor/code/signs_city.dm +++ b/modular_darkpack/modules/decor/code/signs_city.dm @@ -103,6 +103,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/city/chinese/alt4, 0) icon_state = "chinese6" MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/city/chinese/alt5, 0) +// Hrm. Not synced with PRIMARY_NIGHTCLUB_COMPANY and it cant really be.. /obj/structure/sign/city/strip_club name = "sign" desc = "It says DO RA. Maybe it's some kind of strip club..." diff --git a/modular_darkpack/modules/delivery/code/_delivery_defs_gvars.dm b/modular_darkpack/modules/delivery/code/_delivery_defs_gvars.dm deleted file mode 100644 index c206cd05a8e3..000000000000 --- a/modular_darkpack/modules/delivery/code/_delivery_defs_gvars.dm +++ /dev/null @@ -1,5 +0,0 @@ -GLOBAL_LIST_EMPTY(delivery_garage_areas) -GLOBAL_LIST_EMPTY(delivery_available_veh_spawners) -GLOBAL_LIST_EMPTY(delivery_available_receivers) -GLOBAL_LIST_EMPTY(delivery_available_dispensers) -GLOBAL_LIST_EMPTY(delivery_stats) diff --git a/modular_darkpack/modules/delivery/code/delivery_areas.dm b/modular_darkpack/modules/delivery/code/delivery_areas.dm deleted file mode 100644 index ab81d5fcdbd6..000000000000 --- a/modular_darkpack/modules/delivery/code/delivery_areas.dm +++ /dev/null @@ -1,21 +0,0 @@ -/area/vtm/interior/delivery - name = "Delivery office" - icon = 'modular_darkpack/modules/areas/icons/areas.dmi' - icon_state = "shop" - fire_controled = TRUE - var/delivery_employer_tag = "default" - -/area/vtm/interior/delivery_garage - name = "Delivery garage" - icon = 'modular_darkpack/modules/areas/icons/areas.dmi' - icon_state = "strip" - fire_controled = TRUE - var/delivery_employer_tag = "default" - -/area/vtm/interior/delivery_garage/Initialize(mapload) - GLOB.delivery_garage_areas.Add(src) - . = ..() - -/area/vtm/interior/delivery_garage/Destroy() - GLOB.delivery_garage_areas.Remove(src) - . = ..() diff --git a/modular_darkpack/modules/delivery/code/delivery_datums.dm b/modular_darkpack/modules/delivery/code/delivery_datums.dm deleted file mode 100644 index 56dda93b7864..000000000000 --- a/modular_darkpack/modules/delivery/code/delivery_datums.dm +++ /dev/null @@ -1,733 +0,0 @@ -/datum/delivery_datum/ - var/delivery_employer_tag - var/contract_difficulty - var/obj/structure/delivery_board/board - var/obj/item/delivery_contract/contract - var/mob/original_owner - var/list/contract_takers = list() - var/area/vtm/interior/delivery_garage/garage_area - var/obj/effect/landmark/delivery_truck_beacon/truck_spawner - var/obj/darkpack_car/delivery_truck/active_truck - var/list/spawned_keys = list() - var/list/delivery_dispensers = list() - var/list/delivery_receivers = list() - var/list/crate_designations = list() - var/list/active_crates = list() - var/list/delivery_score = list( - "trucks_used" = 0, - "truck_returned" = 0, - "dispensed_crates" = 0, - "delivered_crates" = 0, - "misdelivered_crates" = 0, - "completed_receivers" = 0, - "manifest_refresh" = 0, - "timeout_timestamp" = 0, - ) - -/datum/delivery_datum/proc/create_stats_table() - GLOB.delivery_stats = list( - "oops" = list( - "income" = 0, - "grade" = 0, - "completed" = 0, - "completed_receivers" = 0, - "delivered_crates" = 0, - ), - "millenium_delivery" = list( - "income" = 0, - "grade" = 0, - "completed" = 0, - "completed_receivers" = 0, - "delivered_crates" = 0, - ), - "bar_delivery" = list( - "income" = 0, - "grade" = 0, - "completed" = 0, - "completed_receivers" = 0, - "delivered_crates" = 0, - ), - ) - -/datum/delivery_datum/proc/track_stats(grade,income) - if(GLOB.delivery_stats.len == 0) create_stats_table() - GLOB.delivery_stats["[delivery_employer_tag]"]["income"] += income - GLOB.delivery_stats["[delivery_employer_tag]"]["grade"] += grade - GLOB.delivery_stats["[delivery_employer_tag]"]["completed"] += 1 - GLOB.delivery_stats["[delivery_employer_tag]"]["completed_receivers"] += delivery_score["completed_receivers"] - GLOB.delivery_stats["[delivery_employer_tag]"]["delivered_crates"] += delivery_score["delivered_crates"] - return - -/datum/delivery_datum/proc/process_payouts(grade) - var/payout_quota = 0 - payout_quota += delivery_score["delivered_crates"] * 100 - payout_quota += delivery_score["completed_receivers"] * 200 - var/payout_multiplier - switch(grade) - if(7) - payout_multiplier = 1.5 - if(6) - payout_multiplier = 1.3 - if(5) - payout_multiplier = 1.1 - if(4) - payout_multiplier = 1 - if(3) - payout_multiplier = 0.9 - if(2) - payout_multiplier = 0.7 - if(1) - payout_multiplier = 0.5 - payout_quota *= payout_multiplier - track_stats(grade,payout_quota) - var/final_payout = round((payout_quota / contract_takers.len),1) - broadcast_to_holders("Delivery Complete. [final_payout] paid to the accounts of all participants.") - for(var/mob/living/carbon/human/payee in contract_takers) - if(!payee.account_id) - continue - var/datum/bank_account/payee_account = SSeconomy.bank_accounts_by_id["[payee.account_id]"] - payee_account.account_balance += final_payout - - -/datum/delivery_datum/proc/parse_grade(grade) - if(!grade) return - switch(grade) - if(7) - return "S" - if(6) - return "A" - if(5) - return "B" - if(4) - return "C" - if(3) - return "D" - if(2) - return "E" - if(1) - return "F" - -/datum/delivery_datum/proc/delivery_finish() - if(active_truck) - var/area/truck_area = get_area(active_truck) - if(truck_area == garage_area) delivery_score["truck_returned"] = 1 - var/final_grade = 7 - if(world.time > delivery_score["timeout_timestamp"]) - final_grade -= 3 - if(delivery_receivers.len > 0) - final_grade -= 5 - if(delivery_score["trucks_used"] > 1) - final_grade -= 1 - if(delivery_score["truck_returned"] == 0) - final_grade -= 1 - if(delivery_score["dispensed_crates"] > delivery_score["delivered_crates"]) - final_grade -= 1 - if(delivery_score["misdelivered_crates"] > 0) - final_grade -= 1 - if(delivery_score["manifest_refresh"] > 3) - final_grade -= 1 - if(final_grade < 1) final_grade = 1 - broadcast_to_holders("Delivery Grade: [parse_grade(final_grade)]") - process_payouts(final_grade) - qdel(contract) - qdel(src) - - -/datum/delivery_datum/proc/add_owner(mob/user) - if(contract_takers.Find(user) == 0) - contract_takers.Add(user) - return 1 - else - return 0 - -/datum/delivery_datum/proc/check_owner(mob/user) - if(contract_takers.Find(user) == 0) - return 0 - else - return 1 - -/datum/delivery_datum/proc/check_complete() - if(delivery_receivers.len == 0) - return 1 - else - return 0 - -/datum/delivery_datum/proc/broadcast_to_holders(message) - if(!message) return - for (var/mob/living/carbon/human/mob in contract_takers) - to_chat(mob, "

[message]

") - -/datum/delivery_datum/proc/receiver_complete(obj/receiver) - var/obj/structure/delivery_receiver/target_receiver = receiver - delivery_receivers.Remove(target_receiver) - delivery_score["completed_receivers"] += 1 - if(check_complete() == 1) - broadcast_to_holders("All deliveries have been completed. Please return the truck and any outstanding cargo back to the office to finalize the contract!") - else - broadcast_to_holders("Delivery to [target_receiver.chute_name] complete. [num2text(delivery_receivers.len)] chutes remain.") - -/datum/delivery_datum/proc/assign_dispenser(tag) - var/list/dispenser_candidates = list() - for(var/obj/structure/delivery_dispenser/dispenser_candidate in GLOB.delivery_available_dispensers) - if(dispenser_candidate.dispenser_active == 0 && dispenser_candidate.delivery_employer_tag == delivery_employer_tag) - dispenser_candidates.Add(dispenser_candidate) - if(dispenser_candidates.len == 0) return 0 - var/obj/structure/delivery_dispenser/picked_dispenser = pick(dispenser_candidates) - picked_dispenser.dispenser_active = 1 - picked_dispenser.crate_type = tag - switch(tag) - if("red") - picked_dispenser.light_color = "#e71a1a" - picked_dispenser.set_light(1) - if("blue") - picked_dispenser.light_color = "#1725e9" - picked_dispenser.set_light(1) - if("yellow") - picked_dispenser.light_color = "#f5df1e" - picked_dispenser.set_light(1) - if("green") - picked_dispenser.light_color = "#25eb13" - picked_dispenser.set_light(1) - delivery_dispensers.Add(picked_dispenser) - animate(picked_dispenser,alpha = 255,time = 5 SECONDS) - picked_dispenser.mouse_opacity = MOUSE_OPACITY_ICON - return 1 - -/datum/delivery_datum/proc/assign_receivers(ammount) - var/receivers_to_assign - var/list/receiver_list = list() - receiver_list = GLOB.delivery_available_receivers.Copy() - for(var/obj/structure/delivery_receiver/receiver_candidate in receiver_list) - if(receiver_candidate.delivery_in_use == 1) receiver_list.Remove(receiver_candidate) - if(!ammount) - receivers_to_assign = 5 - else - receivers_to_assign = ammount - while(receivers_to_assign > 0) - var/picked_receiver = pick(receiver_list) - delivery_receivers.Add(picked_receiver) - receiver_list.Remove(picked_receiver) - receivers_to_assign -= 1 - -/datum/delivery_datum/proc/assign_crates(ammount_min,ammount_max) - if(!ammount_min || !ammount_max) return - if(delivery_receivers.len == 0) return - for(var/obj/structure/delivery_receiver/receiver in delivery_receivers) - receiver.delivery_in_use = 1 - var/crate_number = rand(ammount_min,ammount_max) - while(crate_number > 0) - var/picked_type = pick("red","green","yellow","blue") - receiver.delivery_status[picked_type] += 1 - crate_number -= 1 - animate(receiver,alpha = 255, time = 5 SECONDS) - receiver.set_light(2) - receiver.mouse_opacity = MOUSE_OPACITY_ICON - -/datum/delivery_datum/proc/assign_garage() - if(!delivery_employer_tag) return 0 - for(var/area/vtm/interior/delivery_garage/potential_garage_area in GLOB.delivery_garage_areas) - if(potential_garage_area.delivery_employer_tag == delivery_employer_tag) - garage_area = potential_garage_area - break - if(!garage_area) return 0 - for(var/obj/effect/landmark/delivery_truck_beacon/potential_truck_spawner in GLOB.delivery_available_veh_spawners) - if(potential_truck_spawner.delivery_employer_tag == delivery_employer_tag) - truck_spawner = potential_truck_spawner - break - if(!truck_spawner) return 0 - -/datum/delivery_datum/proc/spawn_truck() - if(active_truck) return 0 - if(!truck_spawner) return "err" - truck_spawner.spawn_truck(src) - delivery_score["trucks_used"] += 1 - -/datum/delivery_datum/proc/delivery_timeout() - broadcast_to_holders("Delivery timer expired. Deactivating any outstanding receivers. You have five minutes to return the truck and any outstanding cargo.") - if(delivery_receivers.len != 0) - for(var/obj/structure/delivery_receiver/receiver in delivery_receivers) - receiver.reset_receiver() - addtimer(CALLBACK(src,PROC_REF(delivery_finish)),5 MINUTES) - -/datum/delivery_datum/proc/delivery_set_timer(delay) - if(!delay) return - var/timer_value = world.time + delay - delivery_score["timeout_timestamp"] = timer_value - addtimer(CALLBACK(src,PROC_REF(delivery_timeout)),delay + 10) - -/datum/delivery_datum/proc/check_conditions() - var/receiver_number - switch(contract_difficulty) - if(1) - receiver_number = 3 - if(2) - receiver_number = 5 - if(3) - receiver_number = 7 - var/list/receiver_list = list() - receiver_list = GLOB.delivery_available_receivers.Copy() - for(var/obj/structure/delivery_receiver/potential_receiver in receiver_list) - if(potential_receiver.delivery_in_use == 1) receiver_list.Remove(potential_receiver) - if(receiver_list.len < receiver_number) - broadcast_to_holders("Error: Not enough delivery receivers. Too many deliveries in progress. Contract aborted.") - return 0 - return 1 - -/datum/delivery_datum/proc/start_contract() - if(check_conditions(contract_difficulty) == 0) return "fail_reci" - if(assign_garage() == 0) return "fail_garage" - if(assign_dispenser("red") == 0) return "fail_disp" - if(assign_dispenser("blue") == 0) return "fail_disp" - if(assign_dispenser("yellow") == 0) return "fail_disp" - if(assign_dispenser("green") == 0) return "fail_disp" - if(spawn_truck() == 0) return "fail_truck" - switch(contract_difficulty) - if(1) - assign_receivers(3) - assign_crates(3,6) - delivery_set_timer(20 MINUTES) - if(2) - assign_receivers(5) - assign_crates(7,10) - delivery_set_timer(45 MINUTES) - if(3) - assign_receivers(7) - assign_crates(9,15) - delivery_set_timer(90 MINUTES) - return 1 - -/datum/delivery_datum/New(mob/user,obj/board_ref,difficulty) - original_owner = user - add_owner(user) - board = board_ref - delivery_employer_tag = board.delivery_employer_tag - contract_difficulty = difficulty - if(board.crate_types.len != 0) - crate_designations = list() - crate_designations = board.crate_types.Copy() - -/datum/delivery_datum/Destroy(force, ...) - if(board) - if(board.delivery_started == 1) board.delivery_cooldown(5 MINUTES) - board.delivery_started = 0 - board = null - contract = null - original_owner = null - contract_takers = list() - garage_area = null - truck_spawner = null - if(active_truck) - qdel(active_truck) - if(delivery_dispensers.len != 0) - for(var/obj/structure/delivery_dispenser/dispenser in delivery_dispensers) - dispenser.reset_dispenser() - delivery_dispensers = list() - if(delivery_receivers.len != 0) - for(var/obj/structure/delivery_receiver/receiver in delivery_receivers) - receiver.reset_receiver() - delivery_receivers = list() - if(active_crates.len != 0) - for(var/obj/structure/delivery_crate/crate in active_crates) - qdel(crate) - active_crates = list() - if(spawned_keys.len != 0) - for(var/obj/item/vamp/keys/cargo_truck/truck_key in spawned_keys) - qdel(truck_key) - if(contract) - qdel(contract) - . = ..() - - -/datum/delivery_storage/ - var/obj/darkpack_car/delivery_truck/owner - var/capacity = 20 - var/search_delay = 1 SECONDS - var/list/user_list = list() - var/users_max = 3 - var/list/storage = list() - -/datum/delivery_storage/Destroy(force, ...) - user_list = list() - if(storage.len != 0) - for (var/obj/structure/delivery_crate/crate in storage) - storage.Remove(crate) - qdel(crate) - . = ..() - - -/datum/delivery_storage/New(obj/truck,cap,delay,max_users) - if(truck) owner = truck - if(cap) - capacity = cap - if(delay) - search_delay = delay - if(max_users) - users_max = max_users - . = ..() - -/datum/delivery_storage/proc/check_use(type,mob/user) - switch(type) - if(1) - if(user_list.len >= users_max) return 2 - if(user_list.Find(user) == 0) - user_list.Add(user) - return 1 - else - return 0 - if(2) - user_list.Remove(user) - return - -/datum/delivery_storage/proc/add_to_storage(mob/user,obj/crate) - if(storage.len >= capacity) - to_chat(user, span_warning("The truck is full!")) - return - switch(check_use(1,user)) - if(2) - to_chat(user, span_warning("Too many people are using the truck at once.")) - if(0) - to_chat(user, span_warning("You are already using the truck.")) - if(1) - storage.Add(crate) - crate.forceMove(owner) - check_use(2,user) - -/datum/delivery_storage/proc/calculate_ret_time(obj/crate) - var/crate_position = storage.Find(crate) - var/timer_calc = crate_position * search_delay - return timer_calc - -/datum/delivery_storage/proc/retrieval_menu(mob/user) - if(!user) return - switch(check_use(1,user)) - if(2) - to_chat(user, span_warning("Too many people are using the truck at once.")) - return - if(0) - to_chat(user, span_warning("You are already using the truck.")) - if(1) - var/list/available_tags = list() - var/obj/structure/delivery_crate/picked_crate - var/chosen_tag - for (var/obj/structure/delivery_crate/crate in storage) - if(!crate) - check_use(2,user) - return - if(available_tags.Find(crate.crate_type) == 0) - available_tags.Add(crate.crate_type) - if(available_tags.len == 0) - check_use(2,user) - return - if(available_tags.len == 1) - for(var/obj/structure/delivery_crate/crate_to_ret in storage) - picked_crate = crate_to_ret - chosen_tag = crate_to_ret.crate_type - if(!picked_crate) - chosen_tag = tgui_input_list(user, "Current load: [storage.len] / [capacity], Available Crates:","Crate choice",available_tags,timeout = 20 SECONDS) - if(!chosen_tag) - check_use(2,user) - return - for(var/obj/structure/delivery_crate/crate_to_ret in storage) - if(crate_to_ret.crate_type == chosen_tag) - picked_crate = crate_to_ret - break - playsound(owner,'sound/effects/cargocrate_move.ogg',50, 10) - var/ret_delay = 1 SECONDS + calculate_ret_time(picked_crate) - if(do_after(user, ret_delay, owner)) - playsound(owner,'sound/effects/cargocrate_unload.ogg',50, 10) - var/turf/user_turf = get_turf(user) - storage.Remove(picked_crate) - picked_crate.forceMove(user_turf) - check_use(2,user) - - -/datum/delivery_manifest/ - - var/datum/delivery_datum/delivery - var/list/saved_receivers = list() - var/list/saved_data = list( - "dispensed_crates" = 0, - "delivered_crates" = 0, - "manifest_refresh" = 0, - "time_left" = "none", - ) - -/datum/delivery_manifest/New(datum/delivery_datum) - delivery = delivery_datum - . = ..() - -/datum/delivery_manifest/Destroy(force, ...) - delivery = null - saved_receivers = list() - . = ..() - - -/datum/delivery_manifest/proc/save_data(init) - if(!delivery) return - saved_receivers = list() - if(delivery.delivery_receivers.len > 0) - var/current_position = 1 - while(current_position <= delivery.delivery_receivers.len) - var/obj/structure/delivery_receiver/receiver_saved = delivery.delivery_receivers[current_position] - var/turf/receiver_turf = get_turf(receiver_saved) - - var/list/list_saved = list("[current_position]" = list( - "chute_name" = receiver_saved.chute_name, - "red" = receiver_saved.delivery_status["red"], - "blue" = receiver_saved.delivery_status["blue"], - "yellow" = receiver_saved.delivery_status["yellow"], - "green" = receiver_saved.delivery_status["green"], - "x" = receiver_turf.x, - "y" = receiver_turf.y, - "z" = receiver_turf.z, - ) - ) - saved_receivers.Add(list_saved) - current_position += 1 - - if(!init) delivery.delivery_score["manifest_refresh"] += 1 - saved_data["dispensed_crates"] = delivery.delivery_score["dispensed_crates"] - saved_data["delivered_crates"] = delivery.delivery_score["delivered_crates"] - saved_data["manifest_refresh"] = delivery.delivery_score["manifest_refresh"] - var/time_left_raw = delivery.delivery_score["timeout_timestamp"] - world.time - if(time_left_raw <= 0) - saved_data["time_left"] = "TIMED OUT" - else - saved_data["time_left"] = time2text(time_left_raw,"mm:ss") - -/datum/delivery_manifest/proc/get_cargo_color_value(tag) - if(delivery.crate_designations.Find(tag) != 0) - return delivery.crate_designations["[tag]"]["color"] - return "#ffffff" - -/datum/delivery_manifest/proc/get_cargo_name(tag) - if(delivery.crate_designations.Find(tag) != 0) - return delivery.crate_designations["[tag]"]["cargo_name"] - return "#ffffff" - - -/datum/delivery_manifest/proc/read_data(mob/user) - if(!user) return - var/turf/user_turf = get_turf(user) - var/html - html += {" - - - - - - - "} - html += "

Current coordinates: X:[user_turf.x] Y:[user_turf.y] Z: [user_turf.z]

" - if(saved_receivers.len == 0) - html += "

No receivers found. Return the truck to the garage and any outstanding crates to their dispensers, then return the contract to the board.

" - else - html += "

OUTSDANDING DELIVERIES

" - var/current_position = 1 - while(current_position <= saved_receivers.len) - html += {"

[saved_receivers["[current_position]"]["chute_name"]] - X:[saved_receivers["[current_position]"]["x"]] Y:[saved_receivers["[current_position]"]["y"]] Z:[saved_receivers["[current_position]"]["z"]]

"} - if(saved_receivers["[current_position]"]["red"] > 0) - var/cargo_name = get_cargo_name("red") - var/html_color = get_cargo_color_value("red") - html += {"[cargo_name] - [saved_receivers["[current_position]"]["red"]] remaining.
"} - if(saved_receivers["[current_position]"]["blue"] > 0) - var/cargo_name = get_cargo_name("blue") - var/html_color = get_cargo_color_value("blue") - html += {"[cargo_name] - [saved_receivers["[current_position]"]["blue"]] remaining.
"} - if(saved_receivers["[current_position]"]["yellow"] > 0) - var/cargo_name = get_cargo_name("yellow") - var/html_color = get_cargo_color_value("yellow") - html += {"[cargo_name] - [saved_receivers["[current_position]"]["yellow"]] remaining.
"} - if(saved_receivers["[current_position]"]["green"] > 0) - var/cargo_name = get_cargo_name("green") - var/html_color = get_cargo_color_value("green") - html += {"[cargo_name] - [saved_receivers["[current_position]"]["green"]] remaining.
"} - html += "

" - current_position += 1 - if(delivery.active_truck) - var/turf/truck_turf = get_turf(delivery.active_truck) - html += "

Truck Active - X:[truck_turf.x] Y:[truck_turf.y] Z:[truck_turf.z]

" - else - html += "

No truck found.

" - if(delivery.active_crates.len != 0) - var/list/turf_list = list() - for(var/obj/structure/delivery_crate/crate in delivery.active_crates) - if(crate.loc) - var/turf/tested_turf = get_turf(crate) - if(turf_list.Find(tested_turf) == 0) - turf_list.Add(tested_turf) - if(turf_list.len != 0) - html += "

Active Crates:

" - for(var/turf/picked_turf in turf_list) - html += "X:[picked_turf.x] Y:[picked_turf.y] Z:[picked_turf.z]
" - html += "

" - else - html += "

No active crates.

" - if(delivery.delivery_dispensers.len != 0) - html += "

DISPENSERS:

" - for(var/obj/structure/delivery_dispenser/dispenser in delivery.delivery_dispensers) - var/turf/dispenser_turf = get_turf(dispenser) - var/html_color = get_cargo_color_value(dispenser.crate_type) - var/cargo_name = get_cargo_name(dispenser.crate_type) - html += {"

[cargo_name] - [dispenser.chute_name] - X:[dispenser_turf.x] Y:[dispenser_turf.y] Z:[dispenser_turf.z]

"} - else - html += "

Dispensers not found.

" - html += {"

"} - user << browse(html, "window=name;size=800x800") - -/datum/controller/subsystem/ticker/proc/calculate_transportation_winners() - var/list/results_array = list( - "income" = list( - "oops" = GLOB.delivery_stats["oops"]["income"], - "millenium_delivery" = GLOB.delivery_stats["millenium_delivery"]["income"], - "bar_delivery" = GLOB.delivery_stats["bar_delivery"]["income"], - ), - "averages" = list( - "oops" = 0, - "millenium_delivery" = 0, - "bar_delivery" = 0, - ), - "completed_receivers" = list( - "oops" = GLOB.delivery_stats["oops"]["completed_receivers"], - "millenium_delivery" = GLOB.delivery_stats["millenium_delivery"]["completed_receivers"], - "bar_delivery" = GLOB.delivery_stats["bar_delivery"]["completed_receivers"], - ), - "crates" = list( - "oops" = GLOB.delivery_stats["oops"]["delivered_crates"], - "millenium_delivery" = GLOB.delivery_stats["millenium_delivery"]["delivered_crates"], - "bar_delivery" = GLOB.delivery_stats["bar_delivery"]["delivered_crates"], - ) - ) - - if(GLOB.delivery_stats["oops"]["completed"] > 0) - results_array["averages"]["oops"] = round((GLOB.delivery_stats["oops"]["grade"] / GLOB.delivery_stats["oops"]["completed"]),0.1) - if(GLOB.delivery_stats["millenium_delivery"]["completed"] > 0) - results_array["averages"]["millenium_delivery"] = round((GLOB.delivery_stats["millenium_delivery"]["grade"] / GLOB.delivery_stats["millenium_delivery"]["completed"]),0.1) - if(GLOB.delivery_stats["bar_delivery"]["completed"] > 0) - results_array["averages"]["bar_delivery"] = round((GLOB.delivery_stats["millenium_delivery"]["grade"] / GLOB.delivery_stats["millenium_delivery"]["completed"]),0.1) - - var/list/winners = list( - "income" = "none", - "averages" = "none", - "completed_receivers" = "none", - "crates" = "none", - ) - - if(results_array["income"]["oops"] > results_array["income"]["millenium_delivery"] && results_array["income"]["oops"] > results_array["income"]["bar_delivery"]) - winners["income"] = "oops" - if(results_array["averages"]["oops"] > results_array["averages"]["millenium_delivery"] && results_array["averages"]["oops"] > results_array["averages"]["bar_delivery"]) - winners["averages"] = "oops" - if(results_array["completed_receivers"]["oops"] > results_array["completed_receivers"]["millenium_delivery"] && results_array["completed_receivers"]["oops"] > results_array["completed_receivers"]["bar_delivery"]) - winners["completed_receivers"] = "oops" - if(results_array["crates"]["oops"] > results_array["crates"]["millenium_delivery"] && results_array["crates"]["oops"] > results_array["crates"]["bar_delivery"]) - winners["crates"] = "oops" - - if(results_array["income"]["millenium_delivery"] > results_array["income"]["oops"] && results_array["income"]["millenium_delivery"] > results_array["income"]["bar_delivery"]) - winners["income"] = "millenium_delivery" - if(results_array["averages"]["millenium_delivery"] > results_array["averages"]["oops"] && results_array["averages"]["millenium_delivery"] > results_array["averages"]["bar_delivery"]) - winners["averages"] = "millenium_delivery" - if(results_array["completed_receivers"]["millenium_delivery"] > results_array["completed_receivers"]["oops"] && results_array["completed_receivers"]["millenium_delivery"] > results_array["completed_receivers"]["bar_delivery"]) - winners["completed_receivers"] = "millenium_delivery" - if(results_array["crates"]["millenium_delivery"] > results_array["crates"]["oops"] && results_array["crates"]["millenium_delivery"] > results_array["crates"]["bar_delivery"]) - winners["crates"] = "millenium_delivery" - - if(results_array["income"]["bar_delivery"] > results_array["income"]["millenium_delivery"] && results_array["income"]["bar_delivery"] > results_array["income"]["oops"]) - winners["income"] = "bar_delivery" - if(results_array["averages"]["bar_delivery"] > results_array["averages"]["millenium_delivery"] && results_array["averages"]["bar_delivery"] > results_array["averages"]["oops"]) - winners["averages"] = "bar_delivery" - if(results_array["completed_receivers"]["bar_delivery"] > results_array["completed_receivers"]["millenium_delivery"] && results_array["completed_receivers"]["bar_delivery"] > results_array["completed_receivers"]["oops"]) - winners["completed_receivers"] = "bar_delivery" - if(results_array["crates"]["bar_delivery"] > results_array["crates"]["millenium_delivery"] && results_array["crates"]["bar_delivery"] > results_array["crates"]["oops"]) - winners["crates"] = "bar_delivery" - - return winners - -/datum/controller/subsystem/ticker/proc/transportation_report() - var/list/parts = list() - parts += "

DELIVERY SERVICE REPORT

" - - if(GLOB.delivery_stats.len == 0) - parts += "No deliveries were made this round!

" - return parts.Join() - - var/list/winner_array = calculate_transportation_winners() - - if(GLOB.delivery_stats["oops"]["delivered_crates"] > 0) - - parts += "OOPS Delivery Service
" - var/text_color = "#ffffff" - if(GLOB.delivery_stats["oops"]["completed"] > 0) - if(winner_array["averages"] == "oops") text_color = "#fffb2b" - parts += {"Grade Average: [GLOB.delivery_stats["oops"]["grade"] / GLOB.delivery_stats["oops"]["completed"]]
"} - text_color = "#ffffff" - if(winner_array["completed_receivers"] == "oops") text_color = "#fffb2b" - parts += {"receivers Completed: [GLOB.delivery_stats["oops"]["completed_receivers"]]
"} - text_color = "#ffffff" - if(winner_array["crates"] == "oops") text_color = "#fffb2b" - parts += {"Crates Delivered: [GLOB.delivery_stats["oops"]["delivered_crates"]]
"} - text_color = "#ffffff" - if(winner_array["income"] == "oops") text_color = "#fffb2b" - parts += {"
TOTAL INCOME: [GLOB.delivery_stats["oops"]["income"]]
"} - - parts += "

" - - if(GLOB.delivery_stats["millenium_delivery"]["delivered_crates"] > 0) - - parts += "Millenium Tower Delivery Service
" - - var/text_color = "#ffffff" - if(GLOB.delivery_stats["millenium_delivery"]["completed"] > 0) - if(winner_array["averages"] == "millenium_delivery") text_color = "#fffb2b" - parts += {"Grade Average: [GLOB.delivery_stats["millenium_delivery"]["grade"] / GLOB.delivery_stats["millenium_delivery"]["completed"]]
"} - text_color = "#ffffff" - if(winner_array["completed_receivers"] == "millenium_delivery") text_color = "#fffb2b" - parts += {"receivers Completed: [GLOB.delivery_stats["millenium_delivery"]["completed_receivers"]]
"} - text_color = "#ffffff" - if(winner_array["crates"] == "millenium_delivery") text_color = "#fffb2b" - parts += {"Crates Delivered: [GLOB.delivery_stats["millenium_delivery"]["delivered_crates"]]
"} - text_color = "#ffffff" - if(winner_array["income"] == "millenium_delivery") text_color = "#fffb2b" - parts += {"
TOTAL INCOME: [GLOB.delivery_stats["millenium_delivery"]["income"]]
"} - - parts += "

" - - if(GLOB.delivery_stats["bar_delivery"]["delivered_crates"] > 0) - - parts += "Bar Delivery Service
" - - var/text_color = "#ffffff" - if(GLOB.delivery_stats["bar_delivery"]["completed"] > 0) - if(winner_array["averages"] == "bar_delivery") text_color = "#fffb2b" - parts += {"Grade Average: [GLOB.delivery_stats["bar_delivery"]["grade"] / GLOB.delivery_stats["bar_delivery"]["completed"]]
"} - text_color = "#ffffff" - if(winner_array["completed_receivers"] == "bar_delivery") text_color = "#fffb2b" - parts += {"receivers Completed: [GLOB.delivery_stats["bar_delivery"]["completed_receivers"]]
"} - text_color = "#ffffff" - if(winner_array["crates"] == "bar_delivery") text_color = "#fffb2b" - parts += {"Crates Delivered: [GLOB.delivery_stats["bar_delivery"]["delivered_crates"]]
"} - text_color = "#ffffff" - if(winner_array["income"] == "bar_delivery") text_color = "#fffb2b" - parts += {"
TOTAL INCOME: [GLOB.delivery_stats["bar_delivery"]["income"]]
"} - - parts += "

" - - switch(winner_array["income"]) - if("none") - parts += "No surplus profits were generated by the delivery network in the city. The businesses continue as they are, without any significant influence over them.
" - if("oops") - parts += "As the OOPS Delivery Service maintains its monopoly over the city's nightly delivery service market, surplus profits generated from the deliveries head right to the unknown forces behind the entire operation, benefiting mostly themselves and those who work for them." - if("millenium_delivery") - parts += "The Millenium Tower Delivery Service secures the biggest share of the city's delivery market and secures the surplus profits from the night in the name of the Camarilla who moves the funds support Camarilla-aligned interests outside of the city.
" - if("bar_delivery") - parts += "The Bar Delivery Service secures the majority of the night's delivery market share and receives the surplus profits from the market. The funds are handed out, according to need, to interests aligned with the Anarch movement outside of the city.
" - - parts += "

" - - return parts.Join() diff --git a/modular_darkpack/modules/delivery/code/delivery_obj/delivery_dispensers.dm b/modular_darkpack/modules/delivery/code/delivery_obj/delivery_dispensers.dm deleted file mode 100644 index ecaa2e62afd8..000000000000 --- a/modular_darkpack/modules/delivery/code/delivery_obj/delivery_dispensers.dm +++ /dev/null @@ -1,77 +0,0 @@ -//oops - -/obj/structure/delivery_dispenser/oops1 - chute_name = "OOPS Delivery Center - Garage 1" - delivery_employer_tag = "oops" - -/obj/structure/delivery_dispenser/oops2 - chute_name = "OOPS Delivery Center - Garage 2" - delivery_employer_tag = "oops" - -/obj/structure/delivery_dispenser/oops3 - chute_name = "OOPS Delivery Center - Garage 3" - delivery_employer_tag = "oops" - -/obj/structure/delivery_dispenser/oops4 - chute_name = "OOPS Delivery Center - Office 1" - delivery_employer_tag = "oops" - -/obj/structure/delivery_dispenser/oops5 - chute_name = "OOPS Delivery Center - Office 2" - delivery_employer_tag = "oops" - -/obj/structure/delivery_dispenser/oops6 - chute_name = "OOPS Delivery Center - Exterior" - delivery_employer_tag = "oops" - -//millenium - -/obj/structure/delivery_dispenser/mt1 - chute_name = "Millenium Tower - Delivery Garage 1" - delivery_employer_tag = "millenium_delivery" - -/obj/structure/delivery_dispenser/mt2 - chute_name = "Millenium Tower - Delivery Garage 2" - delivery_employer_tag = "millenium_delivery" - -/obj/structure/delivery_dispenser/mt3 - chute_name = "Millenium Tower - Back Courtyard 1" - delivery_employer_tag = "millenium_delivery" - -/obj/structure/delivery_dispenser/mt4 - chute_name = "Millenium Tower - Back Courtyard 2" - delivery_employer_tag = "millenium_delivery" - -/obj/structure/delivery_dispenser/mt5 - chute_name = "Millenium Tower - Back Courtyard 3" - delivery_employer_tag = "millenium_delivery" - -/obj/structure/delivery_dispenser/mt6 - chute_name = "Millenium Tower - Delivery Garage Exterior" - delivery_employer_tag = "millenium_delivery" - -//bar - -/obj/structure/delivery_dispenser/bar1 - chute_name = "Bar - Delivery Garage 1" - delivery_employer_tag = "bar_delivery" - -/obj/structure/delivery_dispenser/bar2 - chute_name = "Bar - Delivery Garage 2" - delivery_employer_tag = "bar_delivery" - -/obj/structure/delivery_dispenser/bar3 - chute_name = "Bar - Storage Room" - delivery_employer_tag = "bar_delivery" - -/obj/structure/delivery_dispenser/bar4 - chute_name = "Bar - Exterior 1" - delivery_employer_tag = "bar_delivery" - -/obj/structure/delivery_dispenser/bar5 - chute_name = "Bar - Exterior 2" - delivery_employer_tag = "bar_delivery" - -/obj/structure/delivery_dispenser/bar6 - chute_name = "Bar - Exterior 3" - delivery_employer_tag = "bar_delivery" diff --git a/modular_darkpack/modules/delivery/code/delivery_obj/delivery_map_defines.dm b/modular_darkpack/modules/delivery/code/delivery_obj/delivery_map_defines.dm deleted file mode 100644 index 55e188c5c39c..000000000000 --- a/modular_darkpack/modules/delivery/code/delivery_obj/delivery_map_defines.dm +++ /dev/null @@ -1,107 +0,0 @@ -// OOPS office defines - -/obj/structure/vampdoor/glass/oops_office - name = "OOPS delivery office" - lock_id = "oops" - lockpick_difficulty = 12 - -/obj/structure/delivery_board/oops_office - name = "OOPS delivery assigment board" - delivery_employer_tag = "oops" - desc = "The OOPS Delivery Service is said to be ran by the same forces that established and maintain the " + CITY_NAME + " nightly delivery market and the ones ultimately setting and surprisingly, diligently following their own rules per securing the surplus of each night's crate 'trade'. Contracts taken from this board will aid the OOPS service in maintaining the market for everyone involved, however this will also have the side effect of filling the coffers of the powers running the company for their unknown ends." - -/area/vtm/interior/delivery/oops_office - name = "OOPS delivery office" - delivery_employer_tag = "oops" - -/area/vtm/interior/delivery_garage/oops_office - name = "OOPS delivery office - Garage" - delivery_employer_tag = "oops" - -/obj/effect/landmark/delivery_truck_beacon/oops_office - spawn_dir = WEST - delivery_employer_tag = "oops" - -// Camarilla variant - -/obj/structure/vampdoor/glass/mt_office - name = "Millenium Tower delivery garage" - lock_id = LOCKACCESS_JAZZ_CLUB_DELIVERY - lockpick_difficulty = 12 - -/obj/structure/delivery_board/mt_office - name = "Millenium Tower delivery assigment board" - delivery_employer_tag = "millenium_delivery" - desc = "The Millenium Tower Delivery Service was established once the Ventrue caught on and adopted the OOPS model for themselves and serves as a Camarilla-backed member of the delivery market. Camarilla related deliveries focus more on private matters of the cities Kindred and working for this Service will help the Camarilla secure the nightly market surplus for their own means." - crate_types = list( - "red" = list( - "cargo_name" = "Industrial-Grade Cleaning Supplies", - "color" = "#7c1313", - "desc" = "Extremely strong cleaning supplies or base chemicals to manufacture them, in high quantities. One could easily sterilize entire rooms with the contents of these crates. Strong septic smell.", - ), - "blue" = list( - "cargo_name" = "Books and Correspondence", - "color" = "#202bca", - "desc" = "Sets of heavy tomes sealed in special containers preventing damage along with modern paperbacks and archived letters both hand and machine written.", - ), - "yellow" = list( - "cargo_name" = "Art Pieces", - "color" = "#b8ac3f", - "desc" = "Paintings, Sculptures, Pottery, Artifacts and anything else in between, sealed for safety and sometimes meant for assembly post-delivery. Also any tools required for such assembly.", - ), - "green" = list( - "cargo_name" = "Personal Items", - "color" = "#165f29", - "desc" = "Private correspondence and deliveries marked as private. It could be cargo belonging to other crates but earmarked for private delivery due to private reselling or personal use. Typically, just mail but shipped in bulk. ", - ), - ) - -/area/vtm/interior/delivery_garage/mt_office - name = "Millenium Tower delivery office - Garage" - delivery_employer_tag = "millenium_delivery" - -/obj/effect/landmark/delivery_truck_beacon/mt_office - spawn_dir = NORTH - delivery_employer_tag = "millenium_delivery" - -//Anarchs - -/obj/structure/vampdoor/glass/bar_office - name = "Bar delivery garage" - lock_id = LOCKACCESS_BAR_DELIVERY - lockpick_difficulty = 12 - -/obj/structure/delivery_board/bar_office - name = "Bar delivery assigment board" - delivery_employer_tag = "bar_delivery" - desc = "The Bar Delivery Service is the Anarch-backed entry onto the deliver market and while initially mostly established to get on the local Camarilla representations nerves, has since grown to its own fully fledged member of the market and serves to provide much needed funds to Anarch aligned partners outside of the city." - crate_types = list( - "red" = list( - "cargo_name" = "Homemade Party Favors", - "color" = "#7c1313", - "desc" = "The products of underground fermentation and cultivation, separated into containers appropriate for their form, fully cleared and legal for transport.", - ), - "blue" = list( - "cargo_name" = "Teaching Aides", - "color" = "#202bca", - "desc" = "Sharp or blunt tools used to discipline the unruly and reward the smart. All in their original, legal wrappings and clear for transport.", - ), - "yellow" = list( - "cargo_name" = "Care Package", - "color" = "#b8ac3f", - "desc" = "Supplies - mostly hermetically sealed food rations, assorted medical supplies as well as clothes and other basics.", - ), - "green" = list( - "cargo_name" = "Personal Items", - "color" = "#165f29", - "desc" = "Private correspondence and deliveries marked as private. It could be cargo belonging to other crates but earmarked for private delivery due to private reselling or personal use. Typically, just mail but shipped in bulk. ", - ), - ) - -/area/vtm/interior/delivery_garage/bar_office - name = "Bar delivery office - Garage" - delivery_employer_tag = "bar_delivery" - -/obj/effect/landmark/delivery_truck_beacon/bar_office - spawn_dir = SOUTH - delivery_employer_tag = "bar_delivery" diff --git a/modular_darkpack/modules/delivery/code/delivery_obj/delivery_recievers.dm b/modular_darkpack/modules/delivery/code/delivery_obj/delivery_recievers.dm deleted file mode 100644 index 1c57748c4a99..000000000000 --- a/modular_darkpack/modules/delivery/code/delivery_obj/delivery_recievers.dm +++ /dev/null @@ -1,98 +0,0 @@ -// Ideally all instanced receivers shoudl be defined here, so its easier to keep track - -/obj/structure/delivery_receiver/store1 - chute_name = "Bubway - Ghetto" - -/obj/structure/delivery_receiver/store2 - chute_name = "Veterinary Clinic - Ghetto" - -/obj/structure/delivery_receiver/store3 - chute_name = "Pawn Shop - Ghetto" - -/obj/structure/delivery_receiver/store4 - chute_name = "Weapon Shop - Ghetto" - -/obj/structure/delivery_receiver/store5 - chute_name = "Pawn Shop - Pacific Heights" - -/obj/structure/delivery_receiver/store6 - chute_name = "Gumma Guts - Fisherman's Wharf" - -/obj/structure/delivery_receiver/store7 - chute_name = "Seaside Arcade - Fisherman's Wharf" - -/obj/structure/delivery_receiver/store8 - chute_name = "Community Garden - Fisherman's Wharf" - -/obj/structure/delivery_receiver/store9 - chute_name = "Convineance Store - Fisherman's Wharf" - -/obj/structure/delivery_receiver/store10 - chute_name = "Boardwalk Store North - Fisherman's Wharf" - -/obj/structure/delivery_receiver/store11 - chute_name = "Boardwalk Store South - Fisherman's Wharf" - -/obj/structure/delivery_receiver/store12 - chute_name = "Big Clothing Store - Union Square" - -/obj/structure/delivery_receiver/store13 - chute_name = "Small Clothing Store - Union Square" - -/obj/structure/delivery_receiver/store14 - chute_name = "Weapon Store - Union Square" - -/obj/structure/delivery_receiver/store15 - chute_name = "Medium Clothing Store - Union Square" - -/obj/structure/delivery_receiver/store16 - chute_name = "Baco Tell Central - Union Square" - -/obj/structure/delivery_receiver/store17 - chute_name = "Baco Tell South - Union Square" - -/obj/structure/delivery_receiver/store18 - chute_name = "Clothing Store South - Union Square" - -/obj/structure/delivery_receiver/store19 - chute_name = "Gas Station - Pacific Heights" - -/obj/structure/delivery_receiver/store20 - chute_name = "Gas Station - Fisherman's Wharf" - - -/obj/structure/delivery_receiver/special1 - chute_name = "Casino - Chinatown" - -/obj/structure/delivery_receiver/special2 - chute_name = "Laundromat - Chinatown" - -/obj/structure/delivery_receiver/special3 - chute_name = "Restaurant - Chinatown" - -/obj/structure/delivery_receiver/special4 - chute_name = "Hotel - Ghetto" - -/obj/structure/delivery_receiver/special5 - chute_name = "Museum Rear - Ghetto" - -/obj/structure/delivery_receiver/special6 - chute_name = "City Limits North" - -/obj/structure/delivery_receiver/special7 - chute_name = "City Limits East" - -/obj/structure/delivery_receiver/special8 - chute_name = "City Limits South" - -/obj/structure/delivery_receiver/special9 - chute_name = "City Limits West" - -/obj/structure/delivery_receiver/special10 - chute_name = "Church Side Entrance - Pacific Heights" - -/obj/structure/delivery_receiver/special11 - chute_name = "Private/Undisclosed Enterprise - Pacific Heights" - -/obj/structure/delivery_receiver/special12 - chute_name = "Forest Approach - Pacific Heights" diff --git a/modular_darkpack/modules/delivery/code/delivery_objs.dm b/modular_darkpack/modules/delivery/code/delivery_objs.dm deleted file mode 100644 index dab1678b0674..000000000000 --- a/modular_darkpack/modules/delivery/code/delivery_objs.dm +++ /dev/null @@ -1,507 +0,0 @@ -/obj/item/delivery_contract - name = "delivery contract" - desc = "A delivery contract issued by a delivery company. Use it in your hand to scan it for details. If your name is on the contract, use it on someone else to add them to it." - icon = 'modular_darkpack/modules/deprecated/icons/onfloor.dmi' - icon_state = "masquerade" - color = "#bbb95c" - lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' - righthand_file = 'icons/mob/inhands/items_righthand.dmi' - ONFLOOR_ICON_HELPER('modular_darkpack/modules/deprecated/icons/onfloor.dmi') - - var/datum/delivery_datum/delivery - var/datum/delivery_manifest/manifest - -/obj/item/delivery_contract/New(mob/user, obj/board,difficulty) - delivery = new(user,board,difficulty) - delivery.contract = src - manifest = new(delivery) - . = ..() - -/obj/item/delivery_contract/attack(mob/living/M, mob/living/user) - if(!delivery) - to_chat(user,span_notice("Error: No delivery datum attached. This is most likely a bug.")) - return - if(!manifest) return "no_manifest" - if(M == user) - if(delivery.check_owner(user) == 0) - to_chat(user, span_warning("You are not listed on this manifest. Before you can use it, one of its owners needs to add you to the crew handling it by using the manifest on you.")) - return - else - manifest.read_data(user) - return - if(M.client == null) - to_chat(user,span_notice("Error: Target mob has no client. This is not a player mob.")) - return - if(delivery.check_owner(user) == 0) - to_chat(user,span_warning("You are not listed on this manifest. Before you can use it, one of its owners needs to add you to the crew handling it by using the manifest on you.")) - return - if(delivery.check_owner(user) == 1) - if(delivery.check_owner(M) == 0) - if(tgui_alert(user,"Do you want to add [M] to the delivery contract?","Contract add confirmation",list("Yes","No"),timeout = 10 SECONDS) == "Yes") - delivery.add_owner(M) - var/obj/item/vamp/keys/cargo_truck/truck_keys = new(src) - truck_keys.delivery = delivery - truck_keys.owner = M - M.put_in_hands(truck_keys) - to_chat(user, span_notice("Success! User [M] added.")) - return - if(delivery.check_owner(M) == 1) - if(delivery.original_owner == M) return - if(delivery.original_owner != user) - to_chat(user,span_notice("Only the original owner of the contract, [delivery.original_owner] can remove people from the contract.")) - return - else - if(delivery.delivery_receivers.len == 0) - to_chat(user,span_warning("This delivery is complete and should be handed in. Removing users is no longer possibe.")) - return - if(tgui_alert(user,"Do you want to remove [M] from the delivery contract?","Contract remove confirmation",list("Yes","No"),timeout = 10 SECONDS) == "Yes") - delivery.contract_takers.Remove(M) - for(var/obj/item/vamp/keys/cargo_truck/truck_keys in delivery.spawned_keys) - if(truck_keys.owner == M) - qdel(truck_keys) - to_chat(user, span_notice("Success! User [M] removed.")) - return - - . = ..() - -/obj/item/delivery_contract/attack_self(mob/user) - if(!delivery) - to_chat(user,span_notice("Error: No delivery datum attached. This is most likely a bug.")) - return - if(!manifest) return "no_manifest" - - if(delivery.check_owner(user) == 0) - to_chat(user, span_warning("You are not listed on this manifest. Before you can use it, one of its owners needs to add you to the crew handling it by using the manifest on you.")) - else - manifest.read_data(user) - . = ..() - - -/obj/item/delivery_contract/Destroy() - . = ..() - if(delivery) qdel(delivery) - if(manifest) qdel(manifest) - - -/obj/structure/delivery_board - color = "#ffb171" - name = "delivery assignment board" - desc = "A board made out of cork where delivery contracts are pinned. Use it with an emtpy hand to see if any are available." - icon = 'icons/obj/stationobjs.dmi' - icon_state = "nboard02" - anchored = TRUE - density = FALSE - var/delivery_started = 0 - var/delivery_employer_tag = "default" - var/next_delivery_timestamp - var/list/crate_types = list( - "red" = list( - "cargo_name" = "Cleaning Supplies", - "color" = "#7c1313", - "desc" = "Red tinted crates typically contain cleaning supplies, including cleaning chemicals, replacement mops, rags and personal safety equipment.", - ), - "blue" = list( - "cargo_name" = "Maintenance Supplies", - "color" = "#202bca", - "desc" = "Anything and everything related to maintaining electronics in a store or house - replacement batteries, light bulbs, electronic components as well as tools needed to replace and fix devices using them. ", - ), - "yellow" = list( - "cargo_name" = "Equipment and Electronics", - "color" = "#b8ac3f", - "desc" = "Large items like computers and other electronics, lightning and ventilation systems, AC units as well as shelving and furniture typically in separate elements and needing further assembly. Also, tools required for the assembly of the above.", - ), - "green" = list( - "cargo_name" = "Personal Items", - "color" = "#165f29", - "desc" = "Private correspondence and deliveries marked as private. It could be cargo belonging to other crates but earmarked for private delivery due to private reselling or personal use. Typically, just mail but shipped in bulk. ", - ), - ) - -/obj/structure/delivery_board/proc/delivery_icon() - icon_state = "nboard02" - update_icon() - -/obj/structure/delivery_board/proc/delivery_cooldown(timer) - var/time_to_wait = 5 MINUTES - if(timer) time_to_wait = timer - addtimer(CALLBACK(src,TYPE_PROC_REF(/obj/structure/delivery_board,delivery_icon)),time_to_wait) - -/obj/structure/delivery_board/attack_hand(mob/living/user) - . = ..() - if(!delivery_started) - if(world.time > next_delivery_timestamp) - if(tgui_alert(user,"A new contract is available. Do you wish to start a delivery?","Delivery available",list("Yes","No"),timeout = 10 SECONDS) == "Yes") - var/picked_difficulty - var/difficulty_text - switch(tgui_input_list(user,"Select a contract length, details will be outlined before accepting.","Contract Selection",list("Short","Medium","Long"),timeout = 10 SECONDS)) - if("Short") - picked_difficulty = 1 - difficulty_text = "A short contract involves 3 locations with up to 6 crates each, meaning the entire delivery can be completed with one truck. The time limit is 20 minutes." - if("Medium") - picked_difficulty = 2 - difficulty_text = "A medium contract involves 5 locations with up to 10 crates each, the entire delivery should be completed in 3 runs. The time limit is 45 minutes. " - if("Long") - picked_difficulty = 3 - difficulty_text = "A long contract involves 7 locations with up to 15 crates each, meaning that without partial loads each delivery will require a restock. The timie limit is 90 minutes." - if(tgui_alert(user,difficulty_text,"Confirm Contract",list("Yes","No"),timeout = 10 SECONDS) == "Yes") - var/obj/item/delivery_contract/contract = new(user,src,picked_difficulty) - switch(contract.delivery.start_contract()) - if(1) - user.put_in_hands(contract) - icon_state = "nboard00" - update_icon() - to_chat(user,span_notice("Success! A new contract was created and aprorpiate items have been created and dispensed. Check the cotnract item for information about your delivery.")) - contract.manifest.save_data(init = TRUE) - contract.manifest.read_data(contract.delivery.original_owner) - delivery_started = 1 - return - if("fail_reci") - to_chat(user, span_warning("Not enough receivers avaialble in the game world. This is most likley because too many cotnracts are active at the same time, but is very likely a mapping bug.")) - qdel(contract) - if("fail_garage") - to_chat(user, span_warning("No garage area found. This is a mapping bug and should be reported.")) - qdel(contract) - if("fail_disp") - to_chat(user, span_warning("Not enough dispensers. This is a mapping bug and should be reported.")) - qdel(contract) - if("fail_truck") - to_chat(user, span_warning("Truck spawning failed. This is a mapping bug and should be reported.")) - qdel(contract) - return - else - (to_chat(user,span_notice("A contract was just concluded. There are [time2text((next_delivery_timestamp - world.time),"mm:ss")] left until the next contract can be picked."))) - else - to_chat(user,span_notice("There are no contracts available.")) - -/obj/structure/delivery_board/attackby(obj/item/I, mob/living/user, params) - if(istype(I,/obj/item/delivery_contract/)) - var/obj/item/delivery_contract/contract_item = I - if(contract_item.delivery.delivery_employer_tag != delivery_employer_tag) - to_chat(user,span_warning("This contract does not seem to be from this board.")) - return - if(contract_item.delivery.check_owner(user) == 0) - to_chat(user,span_warning("You don't seem to be on this contract. Only the person who signed the cotract can add you.")) - return - if(contract_item.delivery.delivery_receivers.len == 0) - if(get_area(contract_item.delivery.active_truck) != contract_item.delivery.garage_area) - to_chat(user,span_warning("Warning: Truck outside of garage area.")) - if(tgui_alert(user,"Do you wish to finalize the contract?","Finalize Confirm",list("Yes","No"),timeout = 10 SECONDS) == "Yes") - contract_item.delivery.delivery_finish() - return - if(tgui_alert(user,"Do you wish to update the information on the contract?","Contract Update",list("Yes","No"),timeout = 10 SECONDS) == "Yes") - contract_item.manifest.save_data() - return - if(get_area(contract_item.delivery.active_truck) != contract_item.delivery.garage_area) - to_chat(user,span_warning("Warning: Truck outside of garage area.")) - if(tgui_alert(user,"Do you wish to finalize the contract early?","Finalize Confirm",list("Yes","No"),timeout = 10 SECONDS) == "Yes") - contract_item.delivery.delivery_finish() - return - - if(istype(I,/obj/item/vamp/keys/cargo_truck)) - var/obj/item/vamp/keys/cargo_truck/truck_keys = I - if(truck_keys.delivery.delivery_employer_tag != delivery_employer_tag) - to_chat(user,span_warning("These keys dont's eem to be oes not seem to be from this board.")) - return - if(tgui_alert(user,"Are you SURE you want to respawn the delivery truck? This will reduce your final grade.","Respawn Truck", list("Yes","No"), timeout = 10 SECONDS) == "Yes") - var/obj/old_truck = truck_keys.delivery.active_truck - var/obj/effect/landmark/delivery_truck_beacon/truck_beacon = truck_keys.delivery.truck_spawner - qdel(old_truck) - truck_beacon.spawn_truck(truck_keys.delivery) - . = ..() - - -/obj/structure/delivery_receiver - - name = "delivery chute" - desc = "A chute used to handle bulk deliveries. A standard shipping crate should slide right in." - anchored = TRUE - density = FALSE - icon = 'modular_darkpack/modules/deprecated/icons/props.dmi' - icon_state = "box_put" - var/chute_name = "default" - var/delivery_in_use = 0 - var/receiver_in_use = 0 - var/list/delivery_status = list( - "red" = 0, - "blue" = 0, - "yellow" = 0, - "green" = 0, - ) - light_color = "#ffffff" - light_power = 2 - -/obj/structure/delivery_receiver/proc/reset_receiver() - delivery_in_use = 0 - delivery_status = list( - "red" = 0, - "blue" = 0, - "yellow" = 0, - "green" = 0, - ) - animate(src, alpha = 0, time = 5 SECONDS) - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - set_light(0) - -/obj/structure/delivery_receiver/proc/check_deliveries() - if(delivery_status["red"] != 0 || delivery_status["blue"] != 0 || delivery_status["yellow"] != 0 || delivery_status["green"] != 0) return 0 - return 1 - -/obj/structure/delivery_receiver/Initialize(mapload) - . = ..() - alpha = 0 - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - GLOB.delivery_available_receivers.Add(src) - name = "[initial(name)] - [capitalize(chute_name)]" - -/obj/structure/delivery_receiver/Destroy() - . = ..() - GLOB.delivery_available_receivers.Remove(src) - -/obj/structure/delivery_receiver/attack_hand(mob/living/user) - . = ..() - if(receiver_in_use == 1) - to_chat(user, span_warning("Someone is already operating this receiver!")) - if(user.pulling) - if(delivery_in_use == 0) return - if(istype(user.pulling,/obj/structure/delivery_crate/)) - var/obj/structure/delivery_crate/pulled_crate = user.pulling - if(pulled_crate.delivery.check_owner(user) == 0) - to_chat(user, span_warning("You aren't authorized to handle this delivery. For security reasons, the receiver denies the package.")) - return - receiver_in_use = 1 - playsound(src,'sound/effects/cargocrate_move.ogg',50,10) - if(do_after(user, 2 SECONDS, src)) - if(delivery_status[pulled_crate.crate_type] > 0) - delivery_status[pulled_crate.crate_type] -= 1 - pulled_crate.delivery.delivery_score["delivered_crates"] += 1 - if(check_deliveries() == 1) - pulled_crate.delivery.receiver_complete(src) - reset_receiver() - else - pulled_crate.delivery.delivery_score["misdelivered_crates"] += 1 - playsound(src,'sound/effects/cargocrate_load.ogg',50,10) - qdel(pulled_crate) - receiver_in_use = 0 - -/obj/structure/delivery_dispenser - - name = "Cargo Dispenser" - desc = "A chute used to handle bulk deliveries. There is a visible keyhole and a small button to push." - anchored = TRUE - density = FALSE - icon = 'modular_darkpack/modules/deprecated/icons/props.dmi' - icon_state = "box_take" - var/chute_name = "default" - var/dispenser_active = 0 - var/dispenser_in_use - var/delivery_employer_tag - var/crate_type - light_color = "#ffffff" - light_power = 20 - -/obj/structure/delivery_dispenser/Initialize(mapload) - . = ..() - GLOB.delivery_available_dispensers.Add(src) - alpha = 0 - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - name = "[initial(name)] - [capitalize(chute_name)]]" - -/obj/structure/delivery_dispenser/Destroy() - . = ..() - GLOB.delivery_available_dispensers.Remove(src) - -/obj/structure/delivery_dispenser/proc/reset_dispenser() - dispenser_active = 0 - crate_type = null - light_color = initial(light_color) - set_light(0) - animate(src,alpha = 0,5 SECONDS) - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - -/obj/structure/delivery_dispenser/proc/dispense_cargo(obj/truck_key, turf/target_turf) - if(!truck_key) return - var/obj/item/vamp/keys/cargo_truck/key_item = truck_key - var/obj/structure/delivery_crate/dispensed_crate = new(target_turf) - dispensed_crate.crate_type = crate_type - dispensed_crate.delivery = key_item.delivery - dispensed_crate.source_dispenser = src - dispensed_crate.name += " - [key_item.delivery.crate_designations["[crate_type]"]["cargo_name"]]" - dispensed_crate.color = key_item.delivery.crate_designations["[crate_type]"]["color"] - dispensed_crate.desc += " [key_item.delivery.crate_designations["[crate_type]"]["desc"]]" - dispensed_crate.update_icon() - playsound(src,'sound/effects/cargocrate_unload.ogg',50,10) - key_item.delivery.delivery_score["dispensed_crates"] += 1 - -/obj/structure/delivery_dispenser/attack_hand(mob/living/user) - . = ..() - if(dispenser_active == 0) - to_chat(user, span_notice("The device seems to be offline.")) - return - if(dispenser_in_use == 1) - to_chat(user, span_warning("Someone is already using this dispenser!")) - return - if(user.pulling == null) - to_chat(user, span_notice("It appears that you need to use a key to operate this dispenser. If you are on a delivery, use the key you got when you signed up or were added to the contract.")) - return - if(user.pulling != null) - if(istype(user.pulling, /obj/structure/delivery_crate)) - var/obj/structure/delivery_crate/pulled_crate = user.pulling - if(pulled_crate.source_dispenser == src) - dispenser_in_use = 1 - playsound(src,'sound/effects/cargocrate_move.ogg',50,10) - if(do_after(user, 2 SECONDS, src)) - pulled_crate.delivery.delivery_score["dispensed_crates"] -= 1 - playsound(src,'sound/effects/cargocrate_load.ogg',50,10) - qdel(pulled_crate) - dispenser_in_use = 0 - -/obj/structure/delivery_dispenser/attackby(obj/item/I, mob/living/user, params) - . = ..() - if(dispenser_in_use == 1) - to_chat(user, span_warning("Someone is already using this dispenser!")) - return - if(istype(I,/obj/item/vamp/keys/cargo_truck)) - var/obj/item/vamp/keys/cargo_truck/truck_key = I - if(truck_key.delivery == null) - to_chat(user,span_warning("Error, delivery data missing. This is a bug.")) - return - if(truck_key.delivery.delivery_dispensers.Find(src) == 0) - to_chat(user,span_notice("They key does not seem to work in this dispenser.")) - return - var/turf/user_turf = get_turf(user) - for(var/obj/structure/delivery_crate/potential_crate in user_turf.contents) - to_chat(user, span_warning("There is already a crate on the ground here!")) - return - dispenser_in_use = 1 - playsound(src,'sound/effects/cargocrate_move.ogg',50,10) - if(do_after(user, 2 SECONDS, src)) - dispense_cargo(truck_key,user_turf) - dispenser_in_use = 0 - -/obj/structure/delivery_crate - - name = "delivery crate" - desc = "A sealed crate, ready for transport and delivery." - anchored = FALSE - density = TRUE - icon = 'icons/obj/crates.dmi' - icon_state = "crate" - var/datum/delivery_datum/delivery - var/obj/structure/delivery_dispenser/source_dispenser - var/crate_type - -/obj/structure/delivery_crate/Initialize(mapload) - if(crate_type) name = initial(name) + " - [crate_type]" - AddElement(/datum/element/climbable) - . = ..() - -/obj/structure/delivery_crate/Destroy() - if(delivery) - delivery.active_crates.Remove(src) - delivery = null - . = ..() - -/obj/darkpack_car/delivery_truck - name = "delivery truck" - desc = "A truck with specially prepared racks in the back allowing for easy storage and retrieval of delivery packages." - icon_state = "track" - max_passengers = 4 - component_type = null - baggage_limit = 0 - baggage_max = null - var/delivery_capacity = 20 - var/datum/delivery_datum/delivery - var/datum/delivery_storage/delivery_trunk - -/obj/darkpack_car/delivery_truck/Destroy() - if(delivery) - if(delivery.active_truck == src) delivery.active_truck = null - delivery = null - qdel(delivery_trunk) - . = ..() - - -/obj/darkpack_car/delivery_truck/Initialize(mapload) - . = ..() - delivery_trunk = new(src,delivery_capacity) - -/obj/darkpack_car/delivery_truck/ComponentInitialize(mapload) - return - -/obj/darkpack_car/delivery_truck/attack_hand(mob/user) - . = ..() - if(locked == TRUE) - to_chat(user,span_warning("The truck is locked!")) - return - if(user.pulling == null) - if(delivery_trunk.storage.len == 0) - to_chat(user, span_notice("There is nothing in the back of the truck.")) - return - var/turf/user_turf = get_turf(user) - for(var/obj/structure/delivery_crate/potential_crate in user_turf.contents) - to_chat(user, span_warning("There is already a crate on the ground here!")) - return - delivery_trunk.retrieval_menu(user) - else - var/obj/structure/delivery_crate/pulled_crate = user.pulling - if(!pulled_crate) - to_chat(user, span_warning("The special compartments in the back dont really fit anything other than delivery crates. Use a nomral truck for other cargo.")) - return - else - playsound(src,'sound/effects/cargocrate_move.ogg',50,10) - if(do_after(user, 2 SECONDS, pulled_crate)) - playsound(src,'sound/effects/cargocrate_load.ogg',50,10) - delivery_trunk.add_to_storage(user,pulled_crate) - -/obj/effect/landmark/delivery_truck_beacon - name = "delivery truck spawner" - icon = 'icons/effects/landmarks_static.dmi' - icon_state = "x4" - invisibility = 101 - density = FALSE - var/spawn_dir = NORTH - var/delivery_employer_tag = "default" - -/obj/effect/landmark/delivery_truck_beacon/proc/spawn_truck(datum/linked_datum) - if(!linked_datum) return - var/turf/local_turf = get_turf(src) - var/obj/darkpack_car/delivery_truck/spawned_truck = new(local_turf) - spawned_truck.dir = spawn_dir - switch(spawn_dir) - if(NORTH) - spawned_truck.movement_vector = 0 - if(SOUTH) - spawned_truck.movement_vector = 180 - if(EAST) - spawned_truck.movement_vector = 90 - if(WEST) - spawned_truck.movement_vector = 270 - spawned_truck.delivery = linked_datum - spawned_truck.delivery.active_truck = spawned_truck - spawned_truck.locked = TRUE - spawned_truck.access = spawned_truck.delivery.delivery_employer_tag - var/obj/item/vamp/keys/cargo_truck/spawned_keys = new(local_turf) - spawned_keys.delivery = linked_datum - spawned_keys.owner = spawned_keys.delivery.original_owner - spawned_keys.accesslocks = list(spawned_truck.delivery.delivery_employer_tag) - spawned_truck.delivery.spawned_keys.Add(spawned_keys) - spawned_truck.delivery.original_owner.put_in_hands(spawned_keys) - -/obj/effect/landmark/delivery_truck_beacon/Initialize(mapload) - GLOB.delivery_available_veh_spawners.Add(src) - . = ..() - -/obj/effect/landmark/delivery_truck_beacon/Destroy() - GLOB.delivery_available_veh_spawners.Remove(src) - . = ..() - -/obj/item/vamp/keys/cargo_truck - - var/datum/delivery_datum/delivery - var/mob/living/owner - -/obj/item/vamp/keys/cargo_truck/Destroy() - if(delivery) - delivery.spawned_keys.Remove(src) - delivery = null - . = ..() diff --git a/modular_darkpack/modules/doors/code/keys/keys.dm b/modular_darkpack/modules/doors/code/keys/keys.dm index 4a1976b572a8..354e585e2746 100644 --- a/modular_darkpack/modules/doors/code/keys/keys.dm +++ b/modular_darkpack/modules/doors/code/keys/keys.dm @@ -61,6 +61,7 @@ LOCKACCESS_JAZZ_CLUB, LOCKACCESS_PRIMOGEN, LOCKACCESS_JAZZ_CLUB_DELIVERY, + LOCKACCESS_PRINCE, ) color = "#bd3327" @@ -318,6 +319,12 @@ ) color = "#6a2e1d" +/obj/item/vamp/keys/setite + name = "setite keys" + accesslocks = list( + LOCKACCESS_SETITE + ) + //===========================CLINIC KEYS=========================== /obj/item/vamp/keys/clinic name = "clinic keys" diff --git a/modular_darkpack/modules/doors/code/vampdoor.dm b/modular_darkpack/modules/doors/code/vampdoor.dm index 6ea11036e7a5..1158f4192fdd 100644 --- a/modular_darkpack/modules/doors/code/vampdoor.dm +++ b/modular_darkpack/modules/doors/code/vampdoor.dm @@ -112,14 +112,15 @@ /obj/structure/vampdoor/atom_break(damage_flag) . = ..() - if(!door_broken) - break_door() + break_door() /obj/structure/vampdoor/atom_fix() . = ..() fix_door() /obj/structure/vampdoor/proc/break_door(mob/user) + if(door_broken) + return FALSE playsound(get_turf(src), 'modular_darkpack/master_files/sounds/effects/door/get_bent.ogg', 100, FALSE) var/obj/item/shield/door/broken_door = new(get_turf(src)) broken_door.icon_state = base_icon_state @@ -136,6 +137,7 @@ locked = FALSE icon_state = "[base_icon_state]-b" update_icon() + return TRUE /obj/structure/vampdoor/proc/fix_door() name = initial(name) @@ -194,10 +196,10 @@ . = ..() if(.) return - var/mob/living/living_user = user if(door_broken) to_chat(user, span_warning("There is no door to use here.")) return + var/mob/living/living_user = user if(living_user.combat_mode) pixel_z = pixel_z+rand(-1, 1) pixel_w = pixel_w+rand(-1, 1) @@ -214,6 +216,9 @@ . = ..() if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) return + if(door_broken) + to_chat(user, span_warning("There is no door to use here.")) + return var/mob/living/living_user = user if(living_user.combat_mode) if(ishuman(user)) diff --git a/modular_darkpack/modules/drugs/code/meth/pills.dm b/modular_darkpack/modules/drugs/code/meth/pills.dm index d330debb8fbc..042b43959061 100644 --- a/modular_darkpack/modules/drugs/code/meth/pills.dm +++ b/modular_darkpack/modules/drugs/code/meth/pills.dm @@ -3,7 +3,7 @@ desc = "There is opium attention sign on the top." spawn_count = 10 spawn_type = /obj/item/reagent_containers/applicator/pill/ephedrine - custom_price = 200 // DARKPACK EDIT ADD - ECONOMY + custom_price = 200 /obj/item/reagent_containers/applicator/pill/ephedrine name = "ephedrine pill" diff --git a/modular_darkpack/modules/drugs/code/weed/bong.dm b/modular_darkpack/modules/drugs/code/weed/bong.dm index 0a523d9ce054..36974f94ccc6 100644 --- a/modular_darkpack/modules/drugs/code/weed/bong.dm +++ b/modular_darkpack/modules/drugs/code/weed/bong.dm @@ -133,6 +133,10 @@ if(flavor_text) visible_message(flavor_text) + if(iscarbon(loc)) + var/mob/living/carbon/smoker = loc + smoker.trigger_rotschreck(src, 3) + /obj/item/bong/proc/put_out() set_light_on(FALSE) lit = FALSE diff --git a/modular_darkpack/modules/drugs/code/weed/fake_steam.dm b/modular_darkpack/modules/drugs/code/weed/fake_steam.dm index 561d5a545fdd..87ef36ba0789 100644 --- a/modular_darkpack/modules/drugs/code/weed/fake_steam.dm +++ b/modular_darkpack/modules/drugs/code/weed/fake_steam.dm @@ -21,7 +21,7 @@ STOP_PROCESSING(SSobj, src) return ..() -/obj/effect/abstract/fake_steam/process() +/obj/effect/abstract/fake_steam/process(seconds_per_tick) if(next_stage_down > world.time) return stage_down() diff --git a/modular_darkpack/modules/electricity/code/fusebox.dm b/modular_darkpack/modules/electricity/code/fusebox.dm index a0bbd69e9226..e5e322382fee 100644 --- a/modular_darkpack/modules/electricity/code/fusebox.dm +++ b/modular_darkpack/modules/electricity/code/fusebox.dm @@ -1,3 +1,5 @@ +GLOBAL_LIST_EMPTY(fuseboxes) + // The way this completely bypasses the entire power system is so strange /obj/fusebox name = "fuse box" @@ -7,50 +9,68 @@ base_icon_state = "fusebox" layer = SIGN_LAYER anchored = TRUE - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF + resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF pixel_y = 32 - + max_integrity = 100 + prevent_destruction = TRUE //Damage on the fusebox var/damaged = 0 - //If our door is open/closed. bool - var/open = FALSE //Repairing var for the loop var/repairing = FALSE //Soundloop for Transformers var/datum/looping_sound/generator/soundloop +/obj/fusebox/Initialize(mapload) + . = ..() + GLOB.fuseboxes += src + +/obj/fusebox/atom_destruction(damage_flag) + . = ..() + power_off() + + +//they shouldnt really ever be destroyed, but... +/obj/fusebox/Destroy() + GLOB.fuseboxes -= src + return ..() + /obj/fusebox/update_icon_state() . = ..() - if(damaged > 100) + if(atom_integrity <= 0) icon_state = "[base_icon_state]_off" else icon_state = base_icon_state /obj/fusebox/proc/update_sound_state() if(!isnull(soundloop)) - if(damaged > 100) + if(atom_integrity <= 0) soundloop.stop() else soundloop.start(src) -/obj/fusebox/proc/check_damage(mob/living/user) - if(damaged > 100 && !open) - open = TRUE - var/area/power_area = get_area(src) - power_area.power_light = FALSE - power_area.power_equip = FALSE - power_area.power_environ = FALSE - power_area.power_change() - power_area.fire_controled = FALSE - var/datum/effect_system/basic/spark_spread/local_spark = new(get_turf(src), 5, 1) - local_spark.start() - for(var/obj/machinery/light/L in power_area) - L.update(FALSE) - playsound(loc, 'modular_darkpack/modules/electricity/sounds/generator_break.ogg', 100, TRUE) - user?.electrocute_act(50, src, siemens_coeff = 1, flags = NONE) +/obj/fusebox/proc/power_off() + var/area/power_area = get_area(src) + power_area.power_light = FALSE + power_area.power_equip = FALSE + power_area.power_environ = FALSE + power_area.power_change() + power_area.fire_controled = FALSE + var/datum/effect_system/basic/spark_spread/local_spark = new(get_turf(src), 5, 1) + local_spark.start() + for(var/obj/machinery/light/L in power_area) + L.update(FALSE) + playsound(loc, 'modular_darkpack/modules/electricity/sounds/generator_break.ogg', 100, TRUE) + for(var/mob/living/M in range(1, src)) + M.electrocute_act(50, src, siemens_coeff = 1, flags = NONE) update_icon() update_sound_state() +/datum/storyteller_roll/fusebox_repair + bumper_text = "electrical repair" + applicable_stats = list(STAT_INTELLIGENCE, STAT_TECHNOLOGY) + difficulty = 7 + numerical = TRUE + /obj/fusebox/item_interaction(mob/living/user, obj/item/tool, list/modifiers) if(tool.tool_behaviour == TOOL_WIRECUTTER) if(!repairing) @@ -59,32 +79,31 @@ repairing = FALSE return ITEM_INTERACT_BLOCKING - damaged = 0 - update_icon_state() - update_sound_state() - playsound(get_turf(src),'modular_darkpack/modules/electricity/sounds/fusebox_fix.ogg', 50, FALSE) - var/area/power_area = get_area(src) - power_area.power_light = TRUE - power_area.power_equip = TRUE - power_area.power_environ = TRUE - power_area.power_change() - if(initial(power_area.fire_controled)) - power_area.fire_controled = TRUE - for(var/obj/machinery/light/L in power_area) - L.update(FALSE) + var/datum/storyteller_roll/fusebox_repair/fusebox_roll = new() + var/successes = fusebox_roll.st_roll(user, src) + var/repair_amount = successes * 40 + if(repair_amount > 0) + repair_damage(repair_amount) + update_icon_state() + update_sound_state() + playsound(get_turf(src), 'modular_darkpack/modules/electricity/sounds/fusebox_fix.ogg', 50, FALSE) + var/area/power_area = get_area(src) + power_area.power_light = TRUE + power_area.power_equip = TRUE + power_area.power_environ = TRUE + power_area.power_change() + if(initial(power_area.fire_controled)) + power_area.fire_controled = TRUE + for(var/obj/machinery/light/L in power_area) + L.update(FALSE) - repairing = FALSE - return ITEM_INTERACT_SUCCESS + repairing = FALSE + return ITEM_INTERACT_SUCCESS + if(repair_amount <= 0) + user.electrocute_act(50, src, siemens_coeff = 1, flags = NONE) return NONE -// This sucks. Snowflaking its own integrity system is always bad. -/obj/fusebox/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) - . = ..() - if(attacking_item.force) - damaged += attacking_item.force - check_damage(user) - // transformers (another type of fusebox) /obj/fusebox/transformer name = "transformer" @@ -96,4 +115,3 @@ /obj/fusebox/transformer/Initialize(mapload) . = ..() soundloop = new(src, TRUE) - diff --git a/modular_darkpack/modules/ert/code/items/first_team.dm b/modular_darkpack/modules/ert/code/items/first_team.dm index f48bc483bc03..6db3421e5cce 100644 --- a/modular_darkpack/modules/ert/code/items/first_team.dm +++ b/modular_darkpack/modules/ert/code/items/first_team.dm @@ -19,12 +19,11 @@ inhand_icon_state = null gender = PLURAL ONFLOOR_ICON_HELPER('modular_darkpack/modules/ert/icons/onfloor.dmi') - + brand = "pentex" /obj/item/clothing/shoes/vampire/darkpack_ert/firstteam name = "\improper First team boots" desc = "Pitch-black boots with hard, industrial laces." - icon_state = "ftboots" armor_type = /datum/armor/shoes_jackboots //------------GLOVES------------ @@ -35,12 +34,11 @@ ONFLOOR_ICON_HELPER('modular_darkpack/modules/ert/icons/onfloor.dmi') icon_state = "ftgloves" undyeable = TRUE - + brand = "pentex" /obj/item/clothing/gloves/vampire/darkpack_ert/firstteam name = "\improper First Team gloves" desc = "Provides protection from the good, the bad and the ugly." - icon_state = "ftgloves" body_parts_covered = HANDS armor_type = /datum/armor/gloves_combat @@ -52,11 +50,11 @@ inhand_icon_state = null worn_icon = 'modular_darkpack/modules/ert/icons/worn.dmi' ONFLOOR_ICON_HELPER('modular_darkpack/modules/ert/icons/onfloor.dmi') + brand = "pentex" /obj/item/clothing/head/vampire/darkpack_ert/firstteam_helmet name = "\improper First Team helmet" desc = "A black helmet with two, green-glowing eye-pieces that seem to stare through your soul." - icon_state = "fthelmet" armor_type = /datum/armor/first_team flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEHAIR visor_flags_inv = HIDEFACE|HIDESNOUT @@ -66,7 +64,7 @@ //------------ARMOR------------ /obj/item/clothing/suit/vampire/darkpack_ert - icon_state = "ftuni" + icon_state = "ftarmor" icon = 'modular_darkpack/modules/ert/icons/clothing.dmi' worn_icon = 'modular_darkpack/modules/ert/icons/worn.dmi' ONFLOOR_ICON_HELPER('modular_darkpack/modules/ert/icons/onfloor.dmi') @@ -79,6 +77,7 @@ max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT max_integrity = 250 resistance_flags = NONE + brand = "pentex" /obj/item/clothing/suit/vampire/darkpack_ert/Initialize() . = ..() @@ -88,7 +87,6 @@ /obj/item/clothing/suit/vampire/darkpack_ert/firstteam_armor name = "\improper First Team Armoured Vest" desc = "A strong looking, armoured-vest with a large '1' engraved onto the breast." - icon_state = "ftarmor" inhand_icon_state = null armor_type = /datum/armor/first_team body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS @@ -108,7 +106,7 @@ icon = 'modular_darkpack/modules/ert/icons/clothing.dmi' worn_icon = 'modular_darkpack/modules/ert/icons/worn.dmi' ONFLOOR_ICON_HELPER('modular_darkpack/modules/ert/icons/onfloor.dmi') - + brand = "pentex" /obj/item/clothing/under/vampire/darkpack_ert/Initialize() . = ..() @@ -117,13 +115,14 @@ /obj/item/clothing/under/vampire/darkpack_ert/firstteam_uniform name = "First Team uniform" desc = "A completely blacked out uniform with a large '1' symbol sewn onto the shoulder-pad." - icon_state = "ftuni" armor_type = /datum/armor/clothing_under/security_head_of_security + brand = "pentex" //------------Glasses------------ /obj/item/clothing/glasses/night/thermal vision_flags = SEE_MOBS +// brand = "mars" // TODO: implement the rest of the non-top 21 pentex subsids //------------Weapons------------/obj/item/ammo_casing/vampire/c12gvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv /obj/item/ammo_box/darkpack/c556/bale //DONT EVER PUT THIS IN A MAP @@ -179,6 +178,7 @@ ONFLOOR_ICON_HELPER('modular_darkpack/modules/ert/icons/onfloor.dmi') icon_state = "f12" base_icon_state = "f12" +// brand = "fullforce" // TODO: implement the rest of the non-top 21 pentex subsids /obj/projectile/bullet/darkpack/f12g name = "12g explosive slug" @@ -186,6 +186,7 @@ armour_penetration = 50 exposed_wound_bonus = 10 wound_bonus = 5 +// brand = "fullforce" // TODO: implement the rest of the non-top 21 pentex subsids /obj/projectile/bullet/darkpack/f12g/on_hit(atom/target, blocked = 0, pierce_hit) ..() @@ -199,6 +200,7 @@ icon_state = "12box_frag" ammo_type = /obj/item/ammo_casing/vampire/c12g/f12g max_ammo = 40 +// brand = "fullforce" // TODO: implement the rest of the non-top 21 pentex subsids /obj/item/ammo_box/magazine/darkpack/px66f name = "\improper PX66F magazine (5.56mm)" @@ -212,6 +214,7 @@ caliber = CALIBER_556NATO max_ammo = 30 multiple_sprites = AMMO_BOX_FULL_EMPTY +// brand = "fullforce" // TODO: implement the rest of the non-top 21 pentex subsids /obj/item/ammo_box/magazine/darkpack/px249f name = "\improper PX249F box magazine (5.56mm)" @@ -225,6 +228,7 @@ caliber = CALIBER_556NATO max_ammo = 200 multiple_sprites = AMMO_BOX_FULL_EMPTY +// brand = "fullforce" // TODO: implement the rest of the non-top 21 pentex subsids /obj/item/ammo_box/magazine/internal/px12r name = "shotgun internal magazine" @@ -243,14 +247,17 @@ caliber = CALIBER_45 max_ammo = 12 multiple_sprites = AMMO_BOX_FULL_EMPTY + brand = "herculean" /obj/item/ammo_box/magazine/darkpack/mk23/silver name = "automatic pistol magazine (.45 ACP Silver)" ammo_type = /obj/item/ammo_casing/vampire/c45acp/silver + brand = "herculean" /obj/item/ammo_box/magazine/darkpack/mk23/hp name = "automatic pistol magazine (.45 ACP HP)" ammo_type = /obj/item/ammo_casing/vampire/c45acp/HP + brand = "herculean" /obj/item/gun/ballistic/automatic/pistol/darkpack/mk23_socom name = "\improper Mark 23 SOCOM Pistol" @@ -273,6 +280,7 @@ can_suppress = FALSE can_unsuppress = FALSE fire_sound = 'modular_darkpack/modules/weapons/sounds/glock.ogg' //Doesnt matter when it's always using the supressed SFX + brand = "herculean" /obj/item/gun/ballistic/automatic/darkpack/px66f //DO NOT DISTRIBUTE IN MAPPING name = "\improper PX66F Rifle" @@ -297,6 +305,7 @@ can_suppress = FALSE fire_sound = 'modular_darkpack/modules/ert/sounds/silenced_rifle.ogg' masquerade_violating = TRUE +// brand = "fullforce" // TODO: implement the rest of the non-top 21 pentex subsids /obj/item/gun/ballistic/automatic/darkpack/px66f/Initialize() . = ..() @@ -325,7 +334,7 @@ rack_sound = 'modular_darkpack/modules/ert/sounds/cycling.ogg' inhand_x_dimension = 32 inhand_y_dimension = 32 - +// brand = "fullforce" // TODO: implement the rest of the non-top 21 pentex subsids /obj/item/gun/ballistic/automatic/l6_saw/darkpack name = "\improper PX249F Light Machine Gun" @@ -349,6 +358,7 @@ spread = 6 fire_sound = 'modular_darkpack/modules/ert/sounds/m249fire.ogg' rack_sound = 'modular_darkpack/modules/ert/sounds/m249rack.ogg' +// brand = "fullforce" // TODO: implement the rest of the non-top 21 pentex subsids /obj/item/gun/ballistic/automatic/l6_saw/darkpack/update_icon_state() . = ..() diff --git a/modular_darkpack/modules/events/attributions.txt b/modular_darkpack/modules/events/attributions.txt new file mode 100644 index 000000000000..9184d81866e8 --- /dev/null +++ b/modular_darkpack/modules/events/attributions.txt @@ -0,0 +1,2 @@ +thank you to yfjesse on freesound.org for news_notification.ogg +https://freesound.org/people/yfjesse/sounds/235911/ diff --git a/modular_darkpack/modules/events/code/_darkpack_event.dm b/modular_darkpack/modules/events/code/_darkpack_event.dm new file mode 100644 index 000000000000..7e354a05fced --- /dev/null +++ b/modular_darkpack/modules/events/code/_darkpack_event.dm @@ -0,0 +1,4 @@ +/datum/round_event_control/darkpack + darkpack_allowed = TRUE + +// note - no need for a /datum/round_event/darkpack subtype. they only fire if the above exists. diff --git a/modular_darkpack/modules/events/code/blackout_event.dm b/modular_darkpack/modules/events/code/blackout_event.dm new file mode 100644 index 000000000000..ab7036ba74d3 --- /dev/null +++ b/modular_darkpack/modules/events/code/blackout_event.dm @@ -0,0 +1,30 @@ +/datum/round_event_control/darkpack/blackout + name = "Blackout" + typepath = /datum/round_event/blackout + weight = 6 + min_players = 5 + max_occurrences = 2 + earliest_start = 10 MINUTES + category = EVENT_CATEGORY_ENGINEERING + description = "A cascading failure in the city's power grid." + darkpack_allowed = TRUE + +/datum/round_event/blackout + start_when = 1 + announce_when = 5 + +/datum/round_event/blackout/announce(fake) + priority_announce( + "A breaking news notification has appeared on your phone - rolling blackouts are affecting your area due to inclement weather.", + "Local BREAKING NEWS Alert", + 'modular_darkpack/modules/events/sounds/news_notification.ogg', + ANNOUNCEMENT_TYPE_PRIORITY, + color_override = "red", + ) + +/datum/round_event/blackout/start() + for(var/obj/fusebox/F in GLOB.fuseboxes) + if(prob(50)) + continue + F.take_damage(101) + F.power_off() diff --git a/modular_darkpack/modules/events/sounds/news_notification.ogg b/modular_darkpack/modules/events/sounds/news_notification.ogg new file mode 100644 index 000000000000..571fecf098e1 Binary files /dev/null and b/modular_darkpack/modules/events/sounds/news_notification.ogg differ diff --git a/modular_darkpack/modules/external_organs/code/gargoyle_wings.dm b/modular_darkpack/modules/external_organs/code/gargoyle_wings.dm index 5f287aa8bc52..2757626ddb7d 100644 --- a/modular_darkpack/modules/external_organs/code/gargoyle_wings.dm +++ b/modular_darkpack/modules/external_organs/code/gargoyle_wings.dm @@ -4,11 +4,90 @@ restyle_flags = EXTERNAL_RESTYLE_FLESH bodypart_overlay = /datum/bodypart_overlay/mutant/wings/functional/gargoyle sprite_accessory_override = /datum/sprite_accessory/wings/gargoyle + var/datum/action/innate/toggle_gargoyle_wings/toggle /datum/bodypart_overlay/mutant/wings/functional/gargoyle + var/hidden = FALSE + +//using parent's example with open or closed wings +/datum/bodypart_overlay/mutant/wings/functional/gargoyle/generate_icon_cache() + . = ..() + . += hidden ? "hidden" : "visible" /datum/bodypart_overlay/mutant/wings/functional/gargoyle/get_image(image_layer, obj/item/bodypart/limb) + if(hidden) + var/mutable_appearance/appearance = ..() + appearance.alpha = 0 + return appearance // parent handles appearance we just need to offset var/mutable_appearance/appearance = ..() appearance.pixel_x = -16 return appearance + +/obj/item/organ/wings/functional/gargoyle/can_fly() + var/datum/bodypart_overlay/mutant/wings/functional/gargoyle/overlay = bodypart_overlay + if(overlay.hidden) + to_chat(owner, span_warning("Your wings are tucked away!")) + return FALSE + return ..() + +/obj/item/organ/wings/functional/gargoyle/open_wings() + . = ..() + flap_sound_loop() + +/obj/item/organ/wings/functional/gargoyle/proc/flap_sound_loop() + if(!wings_open) // a little weird here but since garg wings can be tucked/untucked/flapping we're using parent type's wings_open and wings_closed for flapping and 'hidden' for tucked/untucked... + return + playsound(owner, 'modular_darkpack/modules/external_organs/sounds/wing_flap_flying.ogg', 50, TRUE) + addtimer(CALLBACK(src, PROC_REF(flap_sound_loop)), 2 SECONDS) + +/obj/item/organ/wings/functional/gargoyle/on_mob_insert(mob/living/carbon/organ_owner, special, movement_flags) + . = ..() + if(!toggle) + toggle = new + toggle.Grant(organ_owner) + +/obj/item/organ/wings/functional/gargoyle/on_mob_remove(mob/living/carbon/organ_owner, special, movement_flags) + . = ..() + if(wings_open) + toggle_flight(organ_owner) + toggle?.Remove(organ_owner) + +/obj/item/organ/wings/functional/gargoyle/Destroy() + QDEL_NULL(toggle) + return ..() + +/datum/action/innate/toggle_gargoyle_wings + name = "Toggle Wings" + check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_IMMOBILE|AB_CHECK_INCAPACITATED + button_icon = 'modular_darkpack/master_files/icons/hud/actions.dmi' + button_icon_state = "wings" + +/datum/action/innate/toggle_gargoyle_wings/Activate() + var/mob/living/carbon/human/human = owner + var/obj/item/organ/wings/functional/gargoyle/wings = human.get_organ_slot(ORGAN_SLOT_EXTERNAL_WINGS) + if(!wings) + return + + if(wings.wings_open) // if flying + to_chat(human, span_warning("You can't fold your wings while flying!")) + return + + var/datum/bodypart_overlay/mutant/wings/functional/gargoyle/overlay = wings.bodypart_overlay + + if(overlay.hidden) // if tucked + to_chat(human, span_notice("You slowly unfurl your wings...")) + if(!do_after(human, 4 SECONDS, human)) + return + playsound(human, 'modular_darkpack/modules/external_organs/sounds/wing_close_open_wings.ogg', 50, TRUE) + overlay.hidden = FALSE + to_chat(human, span_notice("Your wings spread open!")) + else // if untucked + to_chat(human, span_notice("You slowly fold your wings away...")) + if(!do_after(human, 4 SECONDS, human)) + return + playsound(human, 'modular_darkpack/modules/external_organs/sounds/wing_close_open_wings.ogg', 50, TRUE) + overlay.hidden = TRUE + to_chat(human, span_notice("Your wings tuck neatly against your back.")) + + human.update_body_parts() diff --git a/modular_darkpack/modules/external_organs/sounds/attributions.txt b/modular_darkpack/modules/external_organs/sounds/attributions.txt new file mode 100644 index 000000000000..5208b2af7fd3 --- /dev/null +++ b/modular_darkpack/modules/external_organs/sounds/attributions.txt @@ -0,0 +1,6 @@ +sound credits - + +thank you to ani_music on freesound.org https://freesound.org/people/ani_music/sounds/244982/ for wing_flap_flying.ogg + +and thank you to amberbeata on freesound.org https://freesound.org/people/amberbeata/sounds/837042/ for wing_close_open_wings.ogg + diff --git a/modular_darkpack/modules/external_organs/sounds/wing_close_open_wings.ogg b/modular_darkpack/modules/external_organs/sounds/wing_close_open_wings.ogg new file mode 100644 index 000000000000..399fdc7eb22c Binary files /dev/null and b/modular_darkpack/modules/external_organs/sounds/wing_close_open_wings.ogg differ diff --git a/modular_darkpack/modules/external_organs/sounds/wing_flap_flying.ogg b/modular_darkpack/modules/external_organs/sounds/wing_flap_flying.ogg new file mode 100644 index 000000000000..bcf589bfddf8 Binary files /dev/null and b/modular_darkpack/modules/external_organs/sounds/wing_flap_flying.ogg differ diff --git a/modular_darkpack/modules/food/code/drinks.dm b/modular_darkpack/modules/food/code/drinks.dm index a3f61e975801..64cefd75bf16 100644 --- a/modular_darkpack/modules/food/code/drinks.dm +++ b/modular_darkpack/modules/food/code/drinks.dm @@ -1,10 +1,3 @@ -//---------VENDORS---------// -/obj/machinery/vending/boozeomat/Initialize() - . = ..() - all_products_free = TRUE - product_slogans = null - product_ads = null - //---------DRINKS---------// /obj/item/reagent_containers/cup/glass/coffee/vampire diff --git a/modular_darkpack/modules/frenzy/code/frenzy.dm b/modular_darkpack/modules/frenzy/code/frenzy.dm index 5328394ba324..ebc982584ce3 100644 --- a/modular_darkpack/modules/frenzy/code/frenzy.dm +++ b/modular_darkpack/modules/frenzy/code/frenzy.dm @@ -1,160 +1,143 @@ -//Here's things for future madness - -//add_client_colour(/datum/client_colour/glass_colour/red) -//remove_client_colour(/datum/client_colour/glass_colour/red) -/client/Click(object,location,control,params) - if(isatom(object)) - if(ishuman(mob)) - var/mob/living/carbon/human/H = mob - if(H.in_frenzy) - return - ..() - -/mob/living/carbon/proc/rollfrenzy() - if(client) - if(get_garou_splat(src)) - to_chat(src, "I'm full of [span_danger("ANGER")], and I'm about to flare up in [span_danger("RAGE")]. Rolling...") - else if(get_kindred_splat(src)) - to_chat(src, "I need [span_danger("BLOOD")]. The [span_danger("BEAST")] is calling. Rolling...") - else - to_chat(src, "I'm too [span_danger("AFRAID")] to continue doing this. Rolling...") - SEND_SOUND(src, sound('modular_darkpack/modules/deprecated/sounds/bloodneed.ogg', volume = 50)) - - var/check = SSroll.storyteller_roll(max(1, round(humanity/2)), min(frenzy_chance_boost, frenzy_hardness), src) - - // Modifier for frenzy duration - var/length_modifier = HAS_TRAIT(src, TRAIT_LONGER_FRENZY) ? 2 : 1 - - switch(check) - if (DICE_CRIT_FAILURE) - enter_frenzymod() - addtimer(CALLBACK(src, PROC_REF(exit_frenzymod)), 20 SECONDS * length_modifier) - frenzy_hardness = 1 - if (DICE_FAILURE) - enter_frenzymod() - addtimer(CALLBACK(src, PROC_REF(exit_frenzymod)), 10 SECONDS * length_modifier) - frenzy_hardness = 1 - if (DICE_CRIT_WIN) - frenzy_hardness = max(1, frenzy_hardness - 1) - else - frenzy_hardness = min(10, frenzy_hardness + 1) - -/mob/living/carbon/proc/enter_frenzymod() - if (in_frenzy) +// V20 p.298 + W20 p.261 + +// Fleeing is used for either fox frenzies, or rotschreck +/mob/living/proc/enter_frenzy_mode(atom/target, fleeing = FALSE, source = "Unknown cause") + if(HAS_TRAIT(src, TRAIT_IN_FRENZY)) + return + if(HAS_TRAIT(src, TRAIT_KNOCKEDOUT)) return + add_traits(list(TRAIT_IN_FRENZY, TRAIT_NOSOFTCRIT, TRAIT_ANALGESIA), FRENZY_TRAIT) + message_admins("[ADMIN_LOOKUPFLW(src)] has entered frenzy[target ? " targeting [ADMIN_LOOKUPFLW(src)]": ""]. ([source])") + log_message("entered frenzy.", LOG_GAME) - SEND_SOUND(src, sound('modular_darkpack/modules/frenzy/sounds/frenzy.ogg', volume = 50)) - in_frenzy = TRUE - add_client_colour(/datum/client_colour/glass_colour/red) - demon_chi = 0 - GLOB.frenzy_list += src - -/mob/living/carbon/proc/exit_frenzymod() - if (!in_frenzy) - return - - in_frenzy = FALSE - remove_client_colour(/datum/client_colour/glass_colour/red) - GLOB.frenzy_list -= src - -/mob/living/carbon/proc/CheckFrenzyMove() - if(stat >= SOFT_CRIT) - return TRUE - if(IsSleeping()) - return TRUE - if(IsUnconscious()) - return TRUE - if(IsParalyzed()) - return TRUE - if(IsKnockdown()) - return TRUE - if(IsStun()) - return TRUE - if(HAS_TRAIT(src, TRAIT_RESTRAINED)) - return TRUE - -/mob/living/carbon/proc/frenzystep() - if(!isturf(loc) || CheckFrenzyMove()) - return - if(move_intent == MOVE_INTENT_WALK) - toggle_move_intent(src) - set_glide_size(DELAY_TO_GLIDE_SIZE(cached_multiplicative_slowdown)) - - var/atom/fear = get_closest_atom(/obj/effect/abstract/turf_fire, view(7, src), src) - -// if(!fear && !frenzy_target) -// return - - if(get_kindred_splat(src)) - if(fear) - step_away(src,fear,99) - if(prob(25)) - emote("scream") - else - var/mob/living/carbon/human/H = src - if(get_dist(frenzy_target, src) <= 1) - if(isliving(frenzy_target)) - var/mob/living/L = frenzy_target - if(L.bloodpool && L.stat != DEAD && last_drinkblood_use+95 <= world.time) - L.grabbedby(src) - if(ishuman(L)) - L.emote("scream") - var/mob/living/carbon/human/BT = L - BT.add_bite_animation() - if(CheckEyewitness(L, src, 7, FALSE)) - H.adjust_masquerade(-1) - playsound(src, 'modular_darkpack/modules/deprecated/sounds/drinkblood1.ogg', 50, TRUE) - L.visible_message(span_warning("[src] bites [L]'s neck!"), span_warning("[src] bites your neck!")) - face_atom(L) - H.vamp_bite() - else - step_to(src,frenzy_target,0) - face_atom(frenzy_target) - else - if(get_dist(frenzy_target, src) <= 1) - if(isliving(frenzy_target)) - var/mob/living/L = frenzy_target - if(L.stat != DEAD) - a_intent = INTENT_HARM - if(last_rage_hit+5 < world.time) - last_rage_hit = world.time - UnarmedAttack(L) - else - step_to(src,frenzy_target,0) - face_atom(frenzy_target) - -/mob/living/carbon/proc/get_frenzy_targets() - var/list/targets = list() - if(get_kindred_splat(src)) - for(var/mob/living/L in oviewers(DEFAULT_SIGHT_DISTANCE, src)) - if(!get_kindred_splat(L) && L.bloodpool && L.stat != DEAD) - targets += L - if(L == frenzy_target) - return L + if(fleeing) + to_chat(src, span_danger("FLEE.")) else - for(var/mob/living/L in oviewers(DEFAULT_SIGHT_DISTANCE, src)) - if(L.stat != DEAD) - targets += L - if(L == frenzy_target) - return L - if(length(targets) > 0) - return pick(targets) - else - return null - -/mob/living/carbon/proc/handle_automated_frenzy() - for(var/mob/living/carbon/human/npc/NPC in viewers(5, src)) - NPC.Aggro(src) - if(isturf(loc)) - frenzy_target = get_frenzy_targets() - if(frenzy_target) - var/datum/cb = CALLBACK(src, PROC_REF(frenzystep)) - var/reqsteps = SSfrenzypool.wait/cached_multiplicative_slowdown - for(var/i in 1 to reqsteps) - addtimer(cb, (i - 1)*cached_multiplicative_slowdown) - else - if(!CheckFrenzyMove()) - if(isturf(loc)) - var/turf/T = get_step(loc, pick(NORTH, SOUTH, WEST, EAST)) - face_atom(T) - Move(T) + to_chat(src, span_bolddanger("FRENZY.")) + + SEND_SOUND(src, sound('modular_darkpack/modules/frenzy/sounds/frenzy.ogg', volume = 50)) + + apply_status_effect(/datum/status_effect/frenzy, target) + + // This is assuming no other interaction happens to remove it before this. + addtimer(CALLBACK(src, PROC_REF(exit_frenzy_mode)), 1 SCENES) + +/mob/living/proc/exit_frenzy_mode() + if(!HAS_TRAIT(src, TRAIT_IN_FRENZY)) + return + remove_traits(list(TRAIT_IN_FRENZY, TRAIT_NOSOFTCRIT, TRAIT_ANALGESIA), FRENZY_TRAIT) + log_message("exited frenzy.", LOG_GAME) + + remove_status_effect(/datum/status_effect/frenzy) + +/datum/storyteller_roll/frenzy + abstract_type = /datum/storyteller_roll/frenzy + bumper_text = "frenzy" + numerical = TRUE + +/datum/storyteller_roll/frenzy/rotschreck + applicable_stats = list(STAT_COURAGE) + +/datum/storyteller_roll/frenzy/kindred + +// Specificly kindred as I dont really think brujah are meant to rotschreck easier. +/datum/storyteller_roll/frenzy/kindred/calculate_used_difficulty(mob/living/roller) + . = ..() + // V20 p.51 + if(HAS_TRAIT(roller, TRAIT_DIFFICULT_FRENZY)) + . += 2 + +/datum/storyteller_roll/frenzy/rage + +/datum/storyteller_roll/frenzy/rage/calculate_used_difficulty(mob/living/roller) + . = ..() + if(HAS_TRAIT(roller, TRAIT_DIFFICULT_RAGE)) + . += 1 + + +/mob/living/proc/trigger_rotschreck(atom/fire, difficulty = 6, successes = 0) + if(HAS_TRAIT(src, TRAIT_KNOCKEDOUT)) + return + if(!get_kindred_splat(src)) + return + + var/datum/storyteller_roll/frenzy/rotschreck/frenzy_roll = new() + frenzy_roll.difficulty = difficulty + var/frenzy_result = frenzy_roll.st_roll(src, fire) + if(frenzy_result <= 0) + enter_frenzy_mode(fire, TRUE, "Rotshreck") + return + successes += frenzy_result + if(successes >= 5) + return + + addtimer(CALLBACK(src, PROC_REF(trigger_rotschreck), fire, difficulty, successes), 1 TURNS) + + +/mob/living/proc/trigger_kindred_frenzy(atom/target, difficulty = 6, successes = 0, flavor_text = "Something") + if(HAS_TRAIT(src, TRAIT_KNOCKEDOUT)) + return + if(!get_kindred_splat(src)) + return + + var/stat_to_roll = is_enlightenment() ? STAT_INSTINCT : STAT_SELF_CONTROL + var/datum/storyteller_roll/frenzy/kindred/frenzy_roll = new() + frenzy_roll.applicable_stats = list(stat_to_roll) + frenzy_roll.difficulty = difficulty + var/frenzy_result = frenzy_roll.st_roll(src, target) + if(frenzy_result <= 0) + to_chat(src, span_userdanger("[flavor_text] sends you into a frenzy!")) + var/victim = get_closest_atom(/atom, get_frenzy_victims(), src) + enter_frenzy_mode(victim, source = "Kindred") + return + + successes += frenzy_result + if(successes >= 5) + to_chat(src, span_green("[flavor_text] almost drives you into frenzy but you steel your nerves and it subsides!")) + return + + addtimer(CALLBACK(src, PROC_REF(trigger_kindred_frenzy), target, difficulty, successes, flavor_text), 1 TURNS) + + +/mob/living/proc/trigger_rage_frenzy(atom/target, difficulty = 6, successes = 0) + if(HAS_TRAIT(src, TRAIT_KNOCKEDOUT)) + return + var/datum/splat/werewolf/shifter/shifter_splat = get_shifter_splat(src) + if(!shifter_splat) + return + + var/datum/storyteller_roll/frenzy/rage/frenzy_roll = new() + frenzy_roll.difficulty = difficulty + var/frenzy_result = frenzy_roll.st_roll(src, target, shifter_splat.rage) + if(frenzy_result >= 5) + enter_frenzy_mode(target, TRUE, "Rage") + return frenzy_result + + +/mob/living/carbon/human/verb/manual_frenzy_roll(atom/movable/AM as mob|obj in oview(DEFAULT_SIGHT_DISTANCE)) + set name = "Manual Frenzy Roll" + set desc = "Trigger a roll for a frenzy" + set category = "Object" + + if(!istype(AM)) + return + if(!issupernatural(src)) + return + + if(get_shifter_splat(src)) + trigger_rage_frenzy(AM) + else if(get_vampire_splat(src)) + trigger_kindred_frenzy(AM) + +// Used by the berserker merit. or possibly even for that one vampire thing of riding the frenzy in future? +/mob/living/carbon/human/proc/manual_frenzy(atom/movable/AM as mob|obj in oview(DEFAULT_SIGHT_DISTANCE)) + set name = "Manual Frenzy" + set desc = "Enter a frenzy at will" + set category = "Object" + + if(!istype(AM)) + return + if(!issupernatural(src)) + return + + enter_frenzy_mode(AM, source = "Manual") diff --git a/modular_darkpack/modules/frenzy/code/frenzy_helpers.dm b/modular_darkpack/modules/frenzy/code/frenzy_helpers.dm new file mode 100644 index 000000000000..e087b03e8466 --- /dev/null +++ b/modular_darkpack/modules/frenzy/code/frenzy_helpers.dm @@ -0,0 +1,47 @@ +/mob/living/proc/get_blood_frenzy_targets(range = DEFAULT_SIGHT_DISTANCE) + var/list/blood = list() + + for(var/obj/effect/decal/cleanable/blood/blood_spot in view(range, src)) + blood += blood_spot + for(var/mob/living/carbon/human/possible_blood_bag in view(range, src)) + if(possible_blood_bag.is_bloodied()) + blood += possible_blood_bag + + return blood + + +/atom/proc/is_bloodied() + return GET_ATOM_BLOOD_DECAL_LENGTH(src) + +/mob/living/carbon/is_bloodied() + if(GET_ATOM_BLOOD_DECAL_LENGTH(src) && num_hands) // Blood decals only actually show up if we have hands as its seperate from blood soles.. + return TRUE + + for(var/obj/item/visible_item in get_visible_items()) + if(visible_item.is_bloodied()) + return TRUE + + +/// Find targets to ATTACK while frenzying +/mob/living/proc/get_frenzy_victims(range = DEFAULT_SIGHT_DISTANCE) + var/list/victims = list() + + for(var/mob/living/carbon/human/victim in oview(range, src)) + if(victim.stat == DEAD) + continue + victims += victim + + return victims + + +/mob/living/proc/get_fire_frenzy_targets(range = DEFAULT_SIGHT_DISTANCE) + var/list/fire = list() + + for(var/obj/effect/abstract/turf_fire/flames in view(range, src)) + fire += flames + + for(var/mob/living/carbon/human/guy in view(range, src)) + if(guy.on_fire) + fire += guy + + return fire diff --git a/modular_darkpack/modules/frenzy/code/status_effect.dm b/modular_darkpack/modules/frenzy/code/status_effect.dm new file mode 100644 index 000000000000..4d321f53b2b9 --- /dev/null +++ b/modular_darkpack/modules/frenzy/code/status_effect.dm @@ -0,0 +1,61 @@ +/datum/client_colour/frenzy + priority = CLIENT_COLOR_IMPORTANT_PRIORITY + color = COLOR_LIGHT_GRAYISH_RED + +/datum/status_effect/frenzy + id = "frenzy" + duration = STATUS_EFFECT_PERMANENT + status_type = STATUS_EFFECT_REFRESH + alert_type = /atom/movable/screen/alert/status_effect/frenzy + var/datum/weakref/frenzy_target_ref + var/datum/weakref/frenzy_overlay_ref + var/seconds_alone = 0 + +/datum/status_effect/frenzy/on_creation(mob/living/new_owner, atom/frenzy_target) + . = ..() + if(!.) + return + new_owner.add_client_colour(/datum/client_colour/frenzy, FRENZY_TRAIT) + + if(frenzy_target) + frenzy_overlay_ref = WEAKREF(frenzy_target.add_alt_appearance( + /datum/atom_hud/alternate_appearance/basic/one_person, + "frenzy_target", + image(icon = 'modular_darkpack/modules/frenzy/icons/frenzy_overlay.dmi', icon_state = "frenzy_overlay", loc = frenzy_target), + null, + new_owner, + )) + frenzy_target_ref = WEAKREF(frenzy_target) + +/datum/status_effect/frenzy/on_remove() + var/datum/atom_hud/hud = frenzy_overlay_ref.resolve() + if(hud) + qdel(hud) + QDEL_NULL(frenzy_overlay_ref) + owner.remove_client_colour(FRENZY_TRAIT) + var/mob/living/carbon/carbon_owner = astype(owner) + carbon_owner?.exit_frenzy_mode() + return ..() + +/datum/status_effect/frenzy/tick(seconds_between_ticks) + . = ..() + + // If left alone for an extended time, frenzies can end on their own + if(locate(/mob/living/carbon/human) in oview(DEFAULT_SIGHT_DISTANCE, owner)) + seconds_alone = 0 + // If our target is nearby, keep frenzying (a human or even a fire) + else if(frenzy_target_ref?.resolve() in view(DEFAULT_SIGHT_DISTANCE, owner)) + seconds_alone = 0 + else + seconds_alone += seconds_between_ticks + + if(seconds_alone >= 15) + qdel(src) + + +/atom/movable/screen/alert/status_effect/frenzy + name = "Frenzy" + desc = "FRENZY." + icon = 'modular_darkpack/modules/deprecated/icons/hud/screen_alert.dmi' + icon_state = "fear" + diff --git a/modular_darkpack/modules/frenzy/icons/frenzy_overlay.dmi b/modular_darkpack/modules/frenzy/icons/frenzy_overlay.dmi new file mode 100644 index 000000000000..229075cd7c69 Binary files /dev/null and b/modular_darkpack/modules/frenzy/icons/frenzy_overlay.dmi differ diff --git a/modular_darkpack/modules/jobs/code/_departments.dm b/modular_darkpack/modules/jobs/code/_departments.dm index 8e7ff562f174..323beef07c9e 100644 --- a/modular_darkpack/modules/jobs/code/_departments.dm +++ b/modular_darkpack/modules/jobs/code/_departments.dm @@ -128,4 +128,13 @@ department_experience_type = EXP_TYPE_SPIRAL display_order = 1 label_class = "pentex" - ui_color = COLOR_ENDRON_GREEN + ui_color = COLOR_CORP_ENDRON + +/datum/job_department/society_of_leopold + department_name = DEPARTMENT_SOCIETY_OF_LEOPOLD + department_bitflags = DEPARTMENT_BITFLAG_SOCIETY_OF_LEOPOLD + department_head = /datum/job/vampire/abbe + department_experience_type = EXP_TYPE_CHURCH + display_order = 1 + label_class = "society" + ui_color = "#fff022" diff --git a/modular_darkpack/modules/jobs/code/_job_assignment.dm b/modular_darkpack/modules/jobs/code/_job_assignment.dm index 5588cc73c85b..d73b23cacffc 100644 --- a/modular_darkpack/modules/jobs/code/_job_assignment.dm +++ b/modular_darkpack/modules/jobs/code/_job_assignment.dm @@ -39,13 +39,25 @@ return JOB_UNAVAILABLE_WHITELIST */ - if(player_splat_id != SPLAT_KINDRED) - return JOB_AVAILABLE - // Beyond this point, we know our splat is a kindred. + var/splat_checks + switch(player_splat_id) + if(SPLAT_KINDRED) + splat_checks = check_kindred_prefs(player_client, player, possible_job, debug_prefix, add_job_to_log) + if(SPLAT_GAROU) + splat_checks = check_garou_prefs(player_client, player, possible_job, debug_prefix, add_job_to_log) + if(splat_checks) + return splat_checks + return JOB_AVAILABLE + +/datum/controller/subsystem/job/proc/check_kindred_prefs(client/player_client, mob/dead/new_player/player, datum/job/possible_job, debug_prefix = "", add_job_to_log = FALSE) if((player_client.prefs.read_preference(/datum/preference/numeric/immortal_age) < possible_job.minimum_immortal_age)) - job_debug("[debug_prefix] Error: [get_job_unavailable_error_message(JOB_UNAVAILABLE_KINDRED_AGE, possible_job.title)], Player: [player][add_job_to_log ? ", Job: [possible_job]" : ""]") - return JOB_UNAVAILABLE_KINDRED_AGE + job_debug("[debug_prefix] Error: [get_job_unavailable_error_message(JOB_UNAVAILABLE_KINDRED_AGE_MIN, possible_job.title)], Player: [player][add_job_to_log ? ", Job: [possible_job]" : ""]") + return JOB_UNAVAILABLE_KINDRED_AGE_MIN + + if((!isnull(possible_job.maximum_immortal_age) && (player_client.prefs.read_preference(/datum/preference/numeric/immortal_age) > possible_job.maximum_immortal_age))) + job_debug("[debug_prefix] Error: [get_job_unavailable_error_message(JOB_UNAVAILABLE_KINDRED_AGE_MAX, possible_job.title)], Player: [player][add_job_to_log ? ", Job: [possible_job]" : ""]") + return JOB_UNAVAILABLE_KINDRED_AGE_MAX if((player_client.prefs.read_preference(/datum/preference/numeric/generation) > possible_job.minimal_generation)) 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]" : ""]") @@ -59,5 +71,19 @@ 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 - return JOB_AVAILABLE +/datum/controller/subsystem/job/proc/check_garou_prefs(client/player_client, mob/dead/new_player/player, datum/job/possible_job, debug_prefix = "", add_job_to_log = FALSE) + var/datum/subsplat/werewolf/auspice/auspice = get_fera_auspice(player_client.prefs.read_preference(/datum/preference/choiced/subsplat/garou_auspice)) + if(possible_job.allowed_auspice && !(auspice.name in possible_job.allowed_auspice)) + job_debug("[debug_prefix] Error: [get_job_unavailable_error_message(JOB_UNAVAILABLE_FERA_AUSPICE, possible_job.title)], Player: [player][add_job_to_log ? ", Job: [possible_job]" : ""]") + return JOB_UNAVAILABLE_FERA_AUSPICE + if(possible_job.disallowed_auspice && (auspice.name in possible_job.disallowed_auspice)) + job_debug("[debug_prefix] Error: [get_job_unavailable_error_message(JOB_UNAVAILABLE_FERA_AUSPICE, possible_job.title)], Player: [player][add_job_to_log ? ", Job: [possible_job]" : ""]") + return JOB_UNAVAILABLE_FERA_AUSPICE + var/datum/subsplat/werewolf/tribe/tribe = get_fera_tribe(player_client.prefs.read_preference(/datum/preference/choiced/subsplat/garou_tribe)) + if(possible_job.allowed_tribes && !(tribe.name in possible_job.allowed_tribes)) + job_debug("[debug_prefix] Error: [get_job_unavailable_error_message(JOB_UNAVAILABLE_FERA_TRIBE, possible_job.title)], Player: [player][add_job_to_log ? ", Job: [possible_job]" : ""]") + return JOB_UNAVAILABLE_FERA_TRIBE + if(possible_job.disallowed_tribes && (tribe.name in possible_job.disallowed_tribes)) + job_debug("[debug_prefix] Error: [get_job_unavailable_error_message(JOB_UNAVAILABLE_FERA_TRIBE, possible_job.title)], Player: [player][add_job_to_log ? ", Job: [possible_job]" : ""]") + return JOB_UNAVAILABLE_FERA_TRIBE diff --git a/modular_darkpack/modules/jobs/code/_jobs.dm b/modular_darkpack/modules/jobs/code/_jobs.dm index bcfbf0abe6e9..0ef1d9bb4443 100644 --- a/modular_darkpack/modules/jobs/code/_jobs.dm +++ b/modular_darkpack/modules/jobs/code/_jobs.dm @@ -1,12 +1,5 @@ // Default vampire base type. /datum/job - ///Minimum vampire Generation necessary to do this job. - var/minimal_generation = HIGHEST_GENERATION_LIMIT - ///Minimum Masquerade level necessary to do this job. - var/minimal_masquerade = 0 - /// Character must be at least this age (in years) since embrace (chronological_age - age) to join as role. - var/minimum_immortal_age = 0 - /// The list of alternative job titles people can pick from, null by default. var/list/alt_titles = null // ALTERNATIVE_JOB_TITLES @@ -14,13 +7,34 @@ var/list/allowed_splats ///List of species that are limited to a certain amount of that species doing this job. e.g: list(SPLAT_NONE = -1, SPLAT_GHOUL = -1, SPLAT_KINDRED = -1) var/list/splat_slots + + // VTM + ///Minimum vampire Generation necessary to do this job. + var/minimal_generation = HIGHEST_GENERATION_LIMIT + ///Minimum Masquerade level necessary to do this job. + var/minimal_masquerade = 0 + /// Character must be at least this age (in years) since embrace (chronological_age - age) to join as role. + var/minimum_immortal_age = 0 + /// Character must not be over this age (in years) since embrace (chronological_age - age) to join as role. (Defaults null, set to desired age.) + var/maximum_immortal_age = null ///List of Clans that are allowed to do this job. var/list/allowed_clans ///List of Clans that are disallowed to do this job. var/list/disallowed_clans + + // WTA + ///Minimum Renown Rank necessary to do this job. + var/minimal_renown_rank + ///List of Tribes that are allowed to do this job. + var/list/allowed_tribes + var/list/disallowed_tribes + ///List of Auspices that are allowed to do this job. + var/list/allowed_auspice + var/list/disallowed_auspice + + ///If this job requires whitelisting before it can be selected for characters. var/whitelisted = FALSE - // Only for display in memories var/list/known_contacts = null @@ -106,3 +120,7 @@ /// Returns information pertaining to this job's radio. /datum/job/vampire/get_radio_information() return + +/datum/job/vampire/after_spawn(mob/living/spawned, client/player_client) + . = ..() + spawned.add_faction(faction) diff --git a/modular_darkpack/modules/jobs/code/anarchs/baron.dm b/modular_darkpack/modules/jobs/code/anarchs/baron.dm index 0768e305e90c..ad9e055b1461 100644 --- a/modular_darkpack/modules/jobs/code/anarchs/baron.dm +++ b/modular_darkpack/modules/jobs/code/anarchs/baron.dm @@ -1,6 +1,6 @@ /datum/job/vampire/baron title = JOB_BARON - faction = FACTION_CITY + faction = FACTION_ANARCHS total_positions = 1 spawn_positions = 1 supervisors = "the Anarchs and the Traditions" diff --git a/modular_darkpack/modules/jobs/code/anarchs/bruiser.dm b/modular_darkpack/modules/jobs/code/anarchs/bruiser.dm index 3c1917b568f6..f6a459625b9d 100644 --- a/modular_darkpack/modules/jobs/code/anarchs/bruiser.dm +++ b/modular_darkpack/modules/jobs/code/anarchs/bruiser.dm @@ -1,6 +1,6 @@ /datum/job/vampire/bruiser title = JOB_BRUISER - faction = FACTION_CITY + faction = FACTION_ANARCHS total_positions = 7 spawn_positions = 7 supervisors = SUPERVISOR_BARON diff --git a/modular_darkpack/modules/jobs/code/anarchs/emissary.dm b/modular_darkpack/modules/jobs/code/anarchs/emissary.dm index 57a6ac94b996..f2387584403c 100644 --- a/modular_darkpack/modules/jobs/code/anarchs/emissary.dm +++ b/modular_darkpack/modules/jobs/code/anarchs/emissary.dm @@ -1,6 +1,6 @@ /datum/job/vampire/emissary title = JOB_EMISSARY - faction = FACTION_CITY + faction = FACTION_ANARCHS total_positions = 1 spawn_positions = 1 supervisors = SUPERVISOR_BARON diff --git a/modular_darkpack/modules/jobs/code/anarchs/sweeper.dm b/modular_darkpack/modules/jobs/code/anarchs/sweeper.dm index a62af86285c7..bf4db7ce0b42 100644 --- a/modular_darkpack/modules/jobs/code/anarchs/sweeper.dm +++ b/modular_darkpack/modules/jobs/code/anarchs/sweeper.dm @@ -1,6 +1,6 @@ /datum/job/vampire/sweeper title = JOB_SWEEPER - faction = FACTION_CITY + faction = FACTION_ANARCHS total_positions = 3 spawn_positions = 3 supervisors = SUPERVISOR_BARON diff --git a/modular_darkpack/modules/jobs/code/anarchs/tapster.dm b/modular_darkpack/modules/jobs/code/anarchs/tapster.dm index 43de0489b85a..942a0a345751 100644 --- a/modular_darkpack/modules/jobs/code/anarchs/tapster.dm +++ b/modular_darkpack/modules/jobs/code/anarchs/tapster.dm @@ -1,6 +1,6 @@ /datum/job/vampire/tapster title = JOB_TAPSTER - faction = FACTION_CITY + faction = FACTION_ANARCHS total_positions = 2 spawn_positions = 2 supervisors = SUPERVISOR_BARON_PUBLIC diff --git a/modular_darkpack/modules/jobs/code/camarilla/harpy.dm b/modular_darkpack/modules/jobs/code/camarilla/harpy.dm index 190f8d83a680..304562163cbb 100644 --- a/modular_darkpack/modules/jobs/code/camarilla/harpy.dm +++ b/modular_darkpack/modules/jobs/code/camarilla/harpy.dm @@ -2,7 +2,7 @@ title = JOB_HARPY description = "You are an expert on the nightlife of Cainite society. Acting as one of the chief advisors on all things related to boons and diplomacy, the Prince defers quite the amount of judgement to you. Don't squander it." auto_deadmin_role_flags = DEADMIN_POSITION_HEAD - faction = FACTION_CITY + faction = FACTION_CAMARILLA total_positions = 3 spawn_positions = 3 supervisors = SUPERVISOR_PRINCE diff --git a/modular_darkpack/modules/jobs/code/camarilla/hound.dm b/modular_darkpack/modules/jobs/code/camarilla/hound.dm index dd12e0ecada3..06f306df194f 100644 --- a/modular_darkpack/modules/jobs/code/camarilla/hound.dm +++ b/modular_darkpack/modules/jobs/code/camarilla/hound.dm @@ -2,7 +2,7 @@ title = JOB_HOUND description = "You are the Prince's enforcer. You report to the Sheriff and uphold the Traditions." auto_deadmin_role_flags = DEADMIN_POSITION_SECURITY - faction = FACTION_CITY + faction = FACTION_CAMARILLA total_positions = 7 spawn_positions = 7 supervisors = SUPERVISOR_SHERIFF diff --git a/modular_darkpack/modules/jobs/code/camarilla/primogens/banu_haqim.dm b/modular_darkpack/modules/jobs/code/camarilla/primogens/banu_haqim.dm index e5b3f9e56a07..f183f410efcf 100644 --- a/modular_darkpack/modules/jobs/code/camarilla/primogens/banu_haqim.dm +++ b/modular_darkpack/modules/jobs/code/camarilla/primogens/banu_haqim.dm @@ -2,7 +2,7 @@ title = JOB_PRIMOGEN_BANU_HAQIM description = "Offer your infinite knowledge to Prince of the City, while overseeing the Banu Haqim in the city. Monitor their contracts and ensure they remain true to the ways of the Clan. You have an official cover with the Police Department as a local civilian consultant, ensure things run smoothly, on either end." auto_deadmin_role_flags = DEADMIN_POSITION_HEAD - faction = FACTION_CITY + faction = FACTION_CAMARILLA total_positions = 1 spawn_positions = 1 supervisors = SUPERVISOR_TRADITIONS diff --git a/modular_darkpack/modules/jobs/code/camarilla/primogens/lasombra.dm b/modular_darkpack/modules/jobs/code/camarilla/primogens/lasombra.dm index 82310cef4481..53a4ca093ca8 100644 --- a/modular_darkpack/modules/jobs/code/camarilla/primogens/lasombra.dm +++ b/modular_darkpack/modules/jobs/code/camarilla/primogens/lasombra.dm @@ -2,7 +2,7 @@ title = JOB_PRIMOGEN_LASOMBRA description = "Offer your infinite knowledge to Prince of the City. Monitor those of your Clan and your lesser cousins, while holding a Court of Blood as need be, for all it takes for the Camarilla to turn on you is one mistake. You and Your Clan were given a domain in the local Church and in the vicinity of a swarm of Lupines, keep matters under control." auto_deadmin_role_flags = DEADMIN_POSITION_HEAD - faction = FACTION_CITY + faction = FACTION_CAMARILLA total_positions = 1 spawn_positions = 1 supervisors = SUPERVISOR_TRADITIONS diff --git a/modular_darkpack/modules/jobs/code/camarilla/primogens/malkavian.dm b/modular_darkpack/modules/jobs/code/camarilla/primogens/malkavian.dm index b966cd9b3868..aa3e5e18cad1 100644 --- a/modular_darkpack/modules/jobs/code/camarilla/primogens/malkavian.dm +++ b/modular_darkpack/modules/jobs/code/camarilla/primogens/malkavian.dm @@ -2,7 +2,7 @@ title = JOB_PRIMOGEN_MALKAVIAN description = "Offer your infinite knowledge to Prince of the City. You likely have a hold over the local hospital, make good use of it and ensure the blood bags remain available." auto_deadmin_role_flags = DEADMIN_POSITION_HEAD - faction = FACTION_CITY + faction = FACTION_CAMARILLA total_positions = 1 spawn_positions = 1 supervisors = SUPERVISOR_TRADITIONS diff --git a/modular_darkpack/modules/jobs/code/camarilla/primogens/nosferatu.dm b/modular_darkpack/modules/jobs/code/camarilla/primogens/nosferatu.dm index 60404c0b73e0..d00204daa570 100644 --- a/modular_darkpack/modules/jobs/code/camarilla/primogens/nosferatu.dm +++ b/modular_darkpack/modules/jobs/code/camarilla/primogens/nosferatu.dm @@ -2,7 +2,7 @@ title = JOB_PRIMOGEN_NOSFERATU description = "Offer your infinite knowledge to Prince of the City, and run the warren, your domain watches over the sewers." auto_deadmin_role_flags = DEADMIN_POSITION_HEAD - faction = FACTION_CITY + faction = FACTION_CAMARILLA total_positions = 1 spawn_positions = 1 supervisors = SUPERVISOR_TRADITIONS diff --git a/modular_darkpack/modules/jobs/code/camarilla/primogens/toreador.dm b/modular_darkpack/modules/jobs/code/camarilla/primogens/toreador.dm index 0372f8ec92d8..5449b28f3e1a 100644 --- a/modular_darkpack/modules/jobs/code/camarilla/primogens/toreador.dm +++ b/modular_darkpack/modules/jobs/code/camarilla/primogens/toreador.dm @@ -2,7 +2,7 @@ title = JOB_PRIMOGEN_TOREADOR description = "Offer your infinite knowledge to Prince of the City. Take care of the Strip Club and its Elysium, for it is your domain and a social center within the city." auto_deadmin_role_flags = DEADMIN_POSITION_HEAD - faction = FACTION_CITY + faction = FACTION_CAMARILLA total_positions = 1 spawn_positions = 1 supervisors = SUPERVISOR_TRADITIONS diff --git a/modular_darkpack/modules/jobs/code/camarilla/primogens/ventrue.dm b/modular_darkpack/modules/jobs/code/camarilla/primogens/ventrue.dm index 4708250a66d0..8e76e5182a4d 100644 --- a/modular_darkpack/modules/jobs/code/camarilla/primogens/ventrue.dm +++ b/modular_darkpack/modules/jobs/code/camarilla/primogens/ventrue.dm @@ -2,7 +2,7 @@ title = JOB_PRIMOGEN_VENTRUE description = "Offer your infinite knowledge to Prince of the City. Maintain the local Jazz Club, in front of the Tower, and its Elysium." auto_deadmin_role_flags = DEADMIN_POSITION_HEAD - faction = FACTION_CITY + faction = FACTION_CAMARILLA total_positions = 1 spawn_positions = 1 supervisors = SUPERVISOR_TRADITIONS diff --git a/modular_darkpack/modules/jobs/code/camarilla/prince.dm b/modular_darkpack/modules/jobs/code/camarilla/prince.dm index c2b242e6f3c3..8aa3c468e128 100644 --- a/modular_darkpack/modules/jobs/code/camarilla/prince.dm +++ b/modular_darkpack/modules/jobs/code/camarilla/prince.dm @@ -2,7 +2,7 @@ title = JOB_PRINCE description = "You are the top dog of this city. You hold Praxis over " + CITY_NAME + ", and your word is law. Make sure the Masquerade is upheld, and your status is respected." auto_deadmin_role_flags = DEADMIN_POSITION_HEAD - faction = FACTION_CITY + faction = FACTION_CAMARILLA total_positions = 1 spawn_positions = 1 supervisors = SUPERVISOR_TRADITIONS diff --git a/modular_darkpack/modules/jobs/code/camarilla/seneschal.dm b/modular_darkpack/modules/jobs/code/camarilla/seneschal.dm index d1b76c6eed27..ac1d8d33f2d8 100644 --- a/modular_darkpack/modules/jobs/code/camarilla/seneschal.dm +++ b/modular_darkpack/modules/jobs/code/camarilla/seneschal.dm @@ -2,7 +2,7 @@ title = JOB_SENESCHAL description = "You are the right hand man or woman of the most powerful vampire in the city. The Camarilla trusts you to run the city, even in their stead." auto_deadmin_role_flags = DEADMIN_POSITION_HEAD - faction = FACTION_CITY + faction = FACTION_CAMARILLA total_positions = 1 spawn_positions = 1 supervisors = SUPERVISOR_PRINCE diff --git a/modular_darkpack/modules/jobs/code/camarilla/sheriff.dm b/modular_darkpack/modules/jobs/code/camarilla/sheriff.dm index fad3ab398fce..f4fe96127eb5 100644 --- a/modular_darkpack/modules/jobs/code/camarilla/sheriff.dm +++ b/modular_darkpack/modules/jobs/code/camarilla/sheriff.dm @@ -2,7 +2,7 @@ title = JOB_SHERIFF description = "Protect the Prince and the Masquerade. You are their sword." auto_deadmin_role_flags = DEADMIN_POSITION_HEAD|DEADMIN_POSITION_SECURITY - faction = FACTION_CITY + faction = FACTION_CAMARILLA total_positions = 1 spawn_positions = 1 supervisors = SUPERVISOR_PRINCE diff --git a/modular_darkpack/modules/jobs/code/camarilla/tower_employee.dm b/modular_darkpack/modules/jobs/code/camarilla/tower_employee.dm index 0510ed61b6c5..a0bc69b9c7cf 100644 --- a/modular_darkpack/modules/jobs/code/camarilla/tower_employee.dm +++ b/modular_darkpack/modules/jobs/code/camarilla/tower_employee.dm @@ -1,6 +1,6 @@ /datum/job/vampire/towerwork title = JOB_TOWERWORK - faction = FACTION_CITY + faction = FACTION_CAMARILLA total_positions = 4 spawn_positions = 4 supervisors = SUPERVISOR_SENESCHAL_PUBLIC diff --git a/modular_darkpack/modules/jobs/code/garou/councillor.dm b/modular_darkpack/modules/jobs/code/garou/councillor.dm index daee2add5385..976372ccf28c 100644 --- a/modular_darkpack/modules/jobs/code/garou/councillor.dm +++ b/modular_darkpack/modules/jobs/code/garou/councillor.dm @@ -2,7 +2,7 @@ title = JOB_GAROU_COUNCIL description = "Veterans of the Garou Nation with the highest esteem, your word within the " + SEPT_NAME + " is law. Make sure the Litany is upheld, and that your caern does not fall prey to the Wyrm." auto_deadmin_role_flags = DEADMIN_POSITION_HEAD - faction = FACTION_CITY + faction = FACTION_GAIA total_positions = 3 spawn_positions = 3 supervisors = SUPERVISOR_LITANY @@ -17,7 +17,7 @@ outfit = /datum/outfit/job/vampire/councillor allowed_splats = list(SPLAT_GAROU) -// allowed_tribes = list(TRIBE_GAIA) + allowed_tribes = TRIBE_LIST_GAIA display_order = JOB_DISPLAY_ORDER_COUNCIL department_for_prefs = /datum/job_department/gaia diff --git a/modular_darkpack/modules/jobs/code/garou/guardian.dm b/modular_darkpack/modules/jobs/code/garou/guardian.dm index ec80d3ea46d7..464107009dd8 100644 --- a/modular_darkpack/modules/jobs/code/garou/guardian.dm +++ b/modular_darkpack/modules/jobs/code/garou/guardian.dm @@ -2,7 +2,7 @@ title = JOB_GAROU_GUARDIAN description = "You are the bottom of the Sept's pecking order, but also the frontline offense and defense, serving directly under the Warder and Wyrmfoe to ensure the caern's safety and well-being." auto_deadmin_role_flags = DEADMIN_POSITION_SECURITY - faction = FACTION_CITY + faction = FACTION_GAIA total_positions = 3 spawn_positions = 3 supervisors = /datum/job/vampire/warder @@ -17,7 +17,7 @@ outfit = /datum/outfit/job/vampire/guardian allowed_splats = list(SPLAT_GAROU) -// allowed_tribes = list(TRIBE_GAIA) + allowed_tribes = TRIBE_LIST_GAIA display_order = JOB_DISPLAY_ORDER_GUARDIAN department_for_prefs = /datum/job_department/gaia diff --git a/modular_darkpack/modules/jobs/code/garou/truthcatcher.dm b/modular_darkpack/modules/jobs/code/garou/truthcatcher.dm index 10980a2c525c..65c4b9dfb0b0 100644 --- a/modular_darkpack/modules/jobs/code/garou/truthcatcher.dm +++ b/modular_darkpack/modules/jobs/code/garou/truthcatcher.dm @@ -2,7 +2,7 @@ title = JOB_GAROU_TRUTHCATCHER description = "You are the most highly regarded Philodox within the Sept, granted the honor of being the ultimate arbitrator. It is your duty to meditate matters within the Sept. Enact your judgement upon anyone who violates the Litany." auto_deadmin_role_flags = DEADMIN_POSITION_SECURITY - faction = FACTION_CITY + faction = FACTION_GAIA total_positions = 1 spawn_positions = 1 supervisors = SUPERVISOR_LITANY @@ -17,8 +17,8 @@ outfit = /datum/outfit/job/vampire/trutchcatcher allowed_splats = list(SPLAT_GAROU) -// allowed_tribes = list(TRIBE_GAIA) -// allowed_auspice = list(AUSPICE_PHILODOX) + allowed_tribes = TRIBE_LIST_GAIA + allowed_auspice = list(AUSPICE_PHILODOX) display_order = JOB_DISPLAY_ORDER_TRUTHCATCHER department_for_prefs = /datum/job_department/gaia diff --git a/modular_darkpack/modules/jobs/code/garou/warder.dm b/modular_darkpack/modules/jobs/code/garou/warder.dm index f95c6b69ce2a..ce3662b1bca4 100644 --- a/modular_darkpack/modules/jobs/code/garou/warder.dm +++ b/modular_darkpack/modules/jobs/code/garou/warder.dm @@ -2,7 +2,7 @@ title = JOB_GAROU_WARDER description = "You are the most respected Ahroun within the" + SEPT_NAME + ", granted the honor of coordinating the caern's security. The Wyrmfoe and Guardians answer to you." auto_deadmin_role_flags = DEADMIN_POSITION_SECURITY - faction = FACTION_CITY + faction = FACTION_GAIA total_positions = 1 spawn_positions = 1 supervisors = SUPERVISOR_LITANY @@ -17,8 +17,8 @@ outfit = /datum/outfit/job/vampire/warder allowed_splats = list(SPLAT_GAROU) -// allowed_tribes = list(TRIBE_GAIA) -// allowed_auspice = list(AUSPICE_AHROUN) + allowed_tribes = TRIBE_LIST_GAIA + allowed_auspice = list(AUSPICE_AHROUN) display_order = JOB_DISPLAY_ORDER_WARDER department_for_prefs = /datum/job_department/gaia diff --git a/modular_darkpack/modules/jobs/code/garou/wyrmfoe.dm b/modular_darkpack/modules/jobs/code/garou/wyrmfoe.dm index 94977b06c35e..0424c932a150 100644 --- a/modular_darkpack/modules/jobs/code/garou/wyrmfoe.dm +++ b/modular_darkpack/modules/jobs/code/garou/wyrmfoe.dm @@ -2,7 +2,7 @@ title = JOB_GAROU_WYRMFOE description = "You are the Warder's right hand, a promising tactician in your own right, granted the honor of coordinating the Sept's more offensive actions. " auto_deadmin_role_flags = DEADMIN_POSITION_SECURITY - faction = FACTION_CITY + faction = FACTION_GAIA total_positions = 1 spawn_positions = 1 supervisors = SUPERVISOR_LITANY @@ -17,7 +17,7 @@ outfit = /datum/outfit/job/vampire/wyrmfoe allowed_splats = list(SPLAT_GAROU) -// allowed_tribes = list(TRIBE_GAIA) + allowed_tribes = TRIBE_LIST_GAIA display_order = JOB_DISPLAY_ORDER_WYRMFOE department_for_prefs = /datum/job_department/gaia diff --git a/modular_darkpack/modules/jobs/code/giovanni/capo.dm b/modular_darkpack/modules/jobs/code/giovanni/capo.dm index 6042dab9a823..04c235cf13aa 100644 --- a/modular_darkpack/modules/jobs/code/giovanni/capo.dm +++ b/modular_darkpack/modules/jobs/code/giovanni/capo.dm @@ -1,6 +1,6 @@ /datum/job/vampire/capo title = JOB_CAPO - faction = FACTION_CITY + faction = FACTION_GIOVANNI total_positions = 1 spawn_positions = 1 supervisors = "the Family and the Traditions" @@ -30,3 +30,30 @@ l_pocket = /obj/item/smartphone/giovanni_capo r_pocket = /obj/item/vamp/keys/capo backpack_contents = list(/obj/item/card/credit/giovanniboss=1, /obj/item/ritual_tome/necromancy=1) + +/datum/memory/key/bank_vault_code + var/remembered_code + +/datum/memory/key/bank_vault_code/New( + datum/mind/memorizer_mind, + atom/protagonist, + atom/deuteragonist, + atom/antagonist, + remembered_code, +) + src.remembered_code = remembered_code + return ..() + +/datum/memory/key/bank_vault_code/get_names() + return list("The bank vault code is [remembered_code].") + +/datum/memory/key/bank_vault_code/get_starts() + return list( + "[protagonist_name] blurts out [remembered_code], then looks nervous. Were they supposed to say that...?" + ) + +/datum/job/vampire/capo/after_spawn(mob/living/spawned, client/player_client) + . = ..() + var/obj/structure/vaultdoor/pincode/bank/door = locate() in GLOB.vault_doors + if(door) + spawned.mind.add_memory(/datum/memory/key/bank_vault_code, remembered_code = door.pincode) diff --git a/modular_darkpack/modules/jobs/code/giovanni/la_famiglia.dm b/modular_darkpack/modules/jobs/code/giovanni/la_famiglia.dm index d71ac326a20f..c700f65802f7 100644 --- a/modular_darkpack/modules/jobs/code/giovanni/la_famiglia.dm +++ b/modular_darkpack/modules/jobs/code/giovanni/la_famiglia.dm @@ -1,6 +1,6 @@ /datum/job/vampire/famiglia title = JOB_LA_FAMIGLIA - faction = FACTION_CITY + faction = FACTION_GIOVANNI total_positions = 10 spawn_positions = 10 supervisors = "the Family" diff --git a/modular_darkpack/modules/jobs/code/giovanni/la_squadra.dm b/modular_darkpack/modules/jobs/code/giovanni/la_squadra.dm index 5cdf8adc54b0..8a3fd7223806 100644 --- a/modular_darkpack/modules/jobs/code/giovanni/la_squadra.dm +++ b/modular_darkpack/modules/jobs/code/giovanni/la_squadra.dm @@ -1,6 +1,6 @@ /datum/job/vampire/squadra title = JOB_LA_SQUADRA - faction = FACTION_CITY + faction = FACTION_GIOVANNI total_positions = 10 spawn_positions = 10 supervisors = "the Family and the Traditions" @@ -30,3 +30,11 @@ l_pocket = /obj/item/smartphone/giovanni_squadra r_pocket = /obj/item/vamp/keys/giovanni backpack_contents = list(/obj/item/card/credit/rich=1, /obj/item/ritual_tome/necromancy=1) + + +/datum/job/vampire/squadra/after_spawn(mob/living/spawned, client/player_client) + . = ..() + var/obj/structure/vaultdoor/pincode/bank/door = locate() in GLOB.vault_doors + if(door) + spawned.mind.add_memory(/datum/memory/key/bank_vault_code, remembered_code = door.pincode) + diff --git a/modular_darkpack/modules/jobs/code/hunters/abbe.dm b/modular_darkpack/modules/jobs/code/hunters/abbe.dm new file mode 100644 index 000000000000..52ee3a11bd5b --- /dev/null +++ b/modular_darkpack/modules/jobs/code/hunters/abbe.dm @@ -0,0 +1,33 @@ +/datum/job/vampire/abbe + title = JOB_ABBE + description = "You are an Abbé for the Society of Leopold who answers to the Provincial of this region, and who serves the local Cenacle of Inquisitors beneath you. You're tasked by the Inquisition in ensuring the Cenaculum are well-supplied and accounted for, as well as rooting out any heresy or infiltration. Act as the leaders of the Inquisitors, as your Lord has commanded you to be your brother's keeper." + auto_deadmin_role_flags = DEADMIN_POSITION_SECURITY + faction = FACTION_CITY + total_positions = 1 + spawn_positions = 1 + supervisors = SUPERVISOR_SOCIETY_OF_LEOPOLD + minimal_player_age = 7 + config_tag = "ABBE" + job_flags = CITY_JOB_FLAGS + outfit = /datum/outfit/job/vampire/abbe + + display_order = JOB_DISPLAY_ORDER_ABBE + department_for_prefs = /datum/job_department/society_of_leopold + departments_list = list( + /datum/job_department/society_of_leopold, + ) + allowed_splats = list(SPLAT_NONE) + +/datum/outfit/job/vampire/abbe + name = "Abbe" + jobtype = /datum/job/vampire/abbe + + id = /obj/item/card/hunter + uniform = /obj/item/clothing/under/vampire/suit + gloves = /obj/item/clothing/gloves/vampire/work + suit = /obj/item/clothing/suit/vampire/orthodox + shoes = /obj/item/clothing/shoes/vampire + glasses = /obj/item/clothing/glasses/vampire/perception + r_pocket = /obj/item/vamp/keys/hunter + l_pocket = /obj/item/smartphone/abbe + backpack_contents = list(/obj/item/vampire_stake=1, /obj/item/vampirebook/bible=1, /obj/item/card/credit=1) diff --git a/modular_darkpack/modules/jobs/code/hunters/condottieri.dm b/modular_darkpack/modules/jobs/code/hunters/condottieri.dm new file mode 100644 index 000000000000..5bafb5d99c3c --- /dev/null +++ b/modular_darkpack/modules/jobs/code/hunters/condottieri.dm @@ -0,0 +1,36 @@ +/datum/job/vampire/condottieri + title = JOB_CONDOTTIERI + description = "You are a Condottieri for the Society of Leopold - assigned to this Cenacle to protect the Inquisitors and the Novices undergoing their Novitiate. Your role is closer to defense than it is the actual completion of offensive missions undertaken by the other Inquisitors - however, the Condottieri remain highly respected as an elite and deadly subdivision of the Society of Leopold." + auto_deadmin_role_flags = DEADMIN_POSITION_SECURITY + faction = FACTION_CITY + total_positions = 2 + spawn_positions = 2 + supervisors = SUPERVISOR_SHERIFF + minimal_player_age = 7 + + config_tag = "CONDOTTIERI" + job_flags = CITY_JOB_FLAGS + outfit = /datum/outfit/job/vampire/condottieri + + display_order = JOB_DISPLAY_ORDER_CONDOTTIERI + department_for_prefs = /datum/job_department/society_of_leopold + departments_list = list( + /datum/job_department/society_of_leopold, + ) + + allowed_splats = list(SPLAT_NONE) + +/datum/outfit/job/vampire/condottieri + name = "Condottieri" + jobtype = /datum/job/vampire/condottieri + + id = /obj/item/card/hunter + uniform = /obj/item/clothing/under/vampire/black + gloves = /obj/item/clothing/gloves/vampire/leather + suit = /obj/item/clothing/suit/vampire/vest/medieval + head = /obj/item/clothing/head/vampire/helmet/spain + shoes = /obj/item/clothing/shoes/jackboots + glasses = /obj/item/clothing/glasses/vampire/sun + r_pocket = /obj/item/vamp/keys/hunter + l_pocket = /obj/item/smartphone/condottieri + backpack_contents = list(/obj/item/vampire_stake=1, /obj/item/card/credit=1, /obj/item/vampirebook/bible=1) diff --git a/modular_darkpack/modules/jobs/code/hunters/inquisitor.dm b/modular_darkpack/modules/jobs/code/hunters/inquisitor.dm new file mode 100644 index 000000000000..093d4a29182a --- /dev/null +++ b/modular_darkpack/modules/jobs/code/hunters/inquisitor.dm @@ -0,0 +1,35 @@ +/datum/job/vampire/inquisitor + title = JOB_INQUISITOR + description = "You are a seasoned member of the Society of Leopold, having passed your Novitiate and becoming a Councilor after many hard years of careful study of the supernatural. Now your task is simple - root out any emergence of the supernatural which threaten God's kingdom and it's Children - do not suffer even one to exist, for God makes it clear who these 'Kindred' or 'Garou' really serve." + auto_deadmin_role_flags = DEADMIN_POSITION_SECURITY + faction = FACTION_CITY + total_positions = 3 + spawn_positions = 3 + supervisors = SUPERVISOR_SOCIETY_OF_LEOPOLD + minimal_player_age = 7 + config_tag = "INQUISITOR" + job_flags = CITY_JOB_FLAGS + outfit = /datum/outfit/job/vampire/inquisitor + + display_order = JOB_DISPLAY_ORDER_INQUISITOR + department_for_prefs = /datum/job_department/society_of_leopold + departments_list = list( + /datum/job_department/society_of_leopold, + ) + splat_slots = list(SPLAT_GHOUL = 1, SPLAT_KINFOLK = 1, SPLAT_NONE = 3) + allowed_splats = list(SPLAT_NONE, SPLAT_GHOUL, SPLAT_KINFOLK) // infiltrators and betrayal arcs + +/datum/outfit/job/vampire/inquisitor + name = "Inquisitor" + jobtype = /datum/job/vampire/inquisitor + + id = /obj/item/card/hunter + head = /obj/item/clothing/head/vampire/cowboy + uniform = /obj/item/clothing/under/vampire/brujah + gloves = /obj/item/clothing/gloves/vampire/leather + suit = /obj/item/clothing/suit/vampire/trench/alt/armored + shoes = /obj/item/clothing/shoes/vampire/jackboots + glasses = /obj/item/clothing/glasses/vampire/sun + r_pocket = /obj/item/vamp/keys/hunter + l_pocket = /obj/item/smartphone/inquisitor + backpack_contents = list(/obj/item/vampire_stake=2, /obj/item/vampirebook/bible=1, /obj/item/masquerade_contract=1, /obj/item/card/credit=1) diff --git a/modular_darkpack/modules/jobs/code/hunters/novice.dm b/modular_darkpack/modules/jobs/code/hunters/novice.dm new file mode 100644 index 000000000000..624363a2836f --- /dev/null +++ b/modular_darkpack/modules/jobs/code/hunters/novice.dm @@ -0,0 +1,33 @@ +/datum/job/vampire/novice + title = JOB_NOVICE + description = "You are Novice who is undergoing, or a Tertiary who has just passed, their Novitiate in the Inquisition's organization The Society of Saint Leopold. Whether you were a lay-person or undergoing official clerical or religious training, your main task in the Society is now to study, scout, document, and be educated on the various supernatural creatures that threaten God's kingdom and it's balance - as well as remaining prepared for when your name is called." + faction = FACTION_CITY + total_positions = 3 + spawn_positions = 3 + supervisors = SUPERVISOR_SOCIETY_OF_LEOPOLD + minimal_player_age = 7 + + config_tag = "NOVICE" + job_flags = CITY_JOB_FLAGS + outfit = /datum/outfit/job/vampire/novice + + display_order = JOB_DISPLAY_ORDER_NOVICE + department_for_prefs = /datum/job_department/society_of_leopold + departments_list = list( + /datum/job_department/society_of_leopold, + ) + + allowed_splats = list(SPLAT_NONE) + + +/datum/outfit/job/vampire/novice + name = "Novice" + jobtype = /datum/job/vampire/novice + + id = /obj/item/card/hunter + uniform = /obj/item/clothing/under/vampire/turtleneck_white + suit = /obj/item/clothing/suit/vampire/labcoat + shoes = /obj/item/clothing/shoes/vampire/jackboots + r_pocket = /obj/item/vamp/keys/hunter + l_pocket = /obj/item/smartphone/novice + backpack_contents = list(/obj/item/camera=1, /obj/item/vampirebook/bible=1, /obj/item/card/credit=1) diff --git a/modular_darkpack/modules/jobs/code/landmarks.dm b/modular_darkpack/modules/jobs/code/landmarks.dm index 8529c79c62ae..7bb104aca0c2 100644 --- a/modular_darkpack/modules/jobs/code/landmarks.dm +++ b/modular_darkpack/modules/jobs/code/landmarks.dm @@ -140,4 +140,13 @@ JOB_START_HELPER(voivode/voivode, JOB_VOIVODE) JOB_START_HELPER(voivode/bogatyr, JOB_BOGATYR) JOB_START_HELPER(voivode/zadruga, JOB_ZADRUGA) +/* Society of Leopold */ +/obj/effect/landmark/start/darkpack/society_of_leopold + name = "generic hunter start" + +JOB_START_HELPER(society_of_leopold/abbe, JOB_ABBE) +JOB_START_HELPER(society_of_leopold/condittieri, JOB_CONDOTTIERI) +JOB_START_HELPER(society_of_leopold/inquisitor, JOB_INQUISITOR) +JOB_START_HELPER(society_of_leopold/novice, JOB_NOVICE) + #undef JOB_START_HELPER diff --git a/modular_darkpack/modules/jobs/code/miscelllaneous/club_worker.dm b/modular_darkpack/modules/jobs/code/miscelllaneous/club_worker.dm index 55085d985f5f..60bd7199fb67 100644 --- a/modular_darkpack/modules/jobs/code/miscelllaneous/club_worker.dm +++ b/modular_darkpack/modules/jobs/code/miscelllaneous/club_worker.dm @@ -3,7 +3,7 @@ faction = FACTION_CITY total_positions = 4 spawn_positions = 4 - supervisors = "Rosebud Night Club Owner" + supervisors = SUPERVISOR_CLUB_DIRECTOR job_flags = CITY_JOB_FLAGS outfit = /datum/outfit/job/vampire/club_worker config_tag = "CLUB_WORKER" diff --git a/modular_darkpack/modules/jobs/code/pentex/affairs.dm b/modular_darkpack/modules/jobs/code/pentex/affairs.dm index 5461e352d0fc..95e727c35109 100644 --- a/modular_darkpack/modules/jobs/code/pentex/affairs.dm +++ b/modular_darkpack/modules/jobs/code/pentex/affairs.dm @@ -2,7 +2,7 @@ title = JOB_PENTEX_AFFAIRS description = "You are the internal affairs agent operating for " + MAIN_EVIL_COMPANY + ". You know the bloody and vile needs commanded of destruction will lead to jeopardy, and your duty is to see excellence on task rewarded and acknowledged, and curb the invariable atrocities that could endanger the greater plans of Pentex." auto_deadmin_role_flags = DEADMIN_POSITION_HEAD - faction = FACTION_CITY + faction = FACTION_PENTEX total_positions = 1 spawn_positions = 1 supervisors = "the Board and the Branch Lead" @@ -17,8 +17,9 @@ outfit = /datum/outfit/job/vampire/affairs allowed_splats = list(SPLAT_GAROU) -// allowed_tribes = list(TRIBE_WYRM, TRIBE_RONIN) minimal_masquerade = 5 + // minimal_renown_rank = 3 + allowed_tribes = list(TRIBE_BLACK_SPIRAL_DANCERS, TRIBE_RONIN) display_order = JOB_DISPLAY_ORDER_AFFAIRS department_for_prefs = /datum/job_department/pentex @@ -32,7 +33,6 @@ JOB_PENTEX_SEC_CHIEF ) -// minimal_renownrank = 3 paycheck = PAYCHECK_COMMAND paycheck_department = ACCOUNT_SEC diff --git a/modular_darkpack/modules/jobs/code/pentex/branch_lead.dm b/modular_darkpack/modules/jobs/code/pentex/branch_lead.dm index 4d575aa2f24e..c2f73d53cfd7 100644 --- a/modular_darkpack/modules/jobs/code/pentex/branch_lead.dm +++ b/modular_darkpack/modules/jobs/code/pentex/branch_lead.dm @@ -2,7 +2,7 @@ title = JOB_PENTEX_LEAD description = "You are the current branch leader for " + MAIN_EVIL_COMPANY + " , operating out of San Francisco. Your job is to fuel production and keep your clowns in line." auto_deadmin_role_flags = DEADMIN_POSITION_HEAD - faction = FACTION_CITY + faction = FACTION_PENTEX total_positions = 1 spawn_positions = 1 supervisors = "the Board" @@ -23,8 +23,9 @@ "Endron Operations Director" ) -// allowed_tribes = list(TRIBE_WYRM, TRIBE_RONIN) minimal_masquerade = 5 + // minimal_renown_rank = 4 + allowed_tribes = list(TRIBE_BLACK_SPIRAL_DANCERS, TRIBE_RONIN) display_order = JOB_DISPLAY_ORDER_BRANCH_LEAD department_for_prefs = /datum/job_department/pentex @@ -38,7 +39,6 @@ JOB_PENTEX_SEC_CHIEF ) -// minimal_renownrank = 4 paycheck = PAYCHECK_COMMAND paycheck_department = ACCOUNT_SEC diff --git a/modular_darkpack/modules/jobs/code/pentex/employee.dm b/modular_darkpack/modules/jobs/code/pentex/employee.dm index 348b9f273fd7..f588b1369558 100644 --- a/modular_darkpack/modules/jobs/code/pentex/employee.dm +++ b/modular_darkpack/modules/jobs/code/pentex/employee.dm @@ -2,7 +2,7 @@ title = JOB_PENTEX_EMPLOYEE description = "You are an employee for " + MAIN_EVIL_COMPANY + ", operating out of San Francisco. Your bosses can be a little strange; give credence to the security team and executives for tasks on the night shift, and avoid getting negative attention from the branch manager or internal affairs." auto_deadmin_role_flags = DEADMIN_POSITION_HEAD - faction = FACTION_CITY + faction = FACTION_PENTEX total_positions = 3 spawn_positions = 3 supervisors = "the Board and the Branch Lead" @@ -24,7 +24,7 @@ "Endron Labourer" ) -// allowed_tribes = list(TRIBE_WYRM, TRIBE_RONIN) + allowed_tribes = list(TRIBE_BLACK_SPIRAL_DANCERS, TRIBE_RONIN) minimal_masquerade = 3 display_order = JOB_DISPLAY_ORDER_EMPLOYEE diff --git a/modular_darkpack/modules/jobs/code/pentex/executive.dm b/modular_darkpack/modules/jobs/code/pentex/executive.dm index 87b7241d91bf..17ea59a3265a 100644 --- a/modular_darkpack/modules/jobs/code/pentex/executive.dm +++ b/modular_darkpack/modules/jobs/code/pentex/executive.dm @@ -2,7 +2,7 @@ title = JOB_PENTEX_EXEC description = "You are an acting executive for " + MAIN_EVIL_COMPANY + " operating out of San Francisco. With discretion to the Branch Leader, a position you may aim for, your job is to fuel production and expand operations." auto_deadmin_role_flags = DEADMIN_POSITION_HEAD - faction = FACTION_CITY + faction = FACTION_PENTEX total_positions = 1 spawn_positions = 1 supervisors = "the Board and the Branch Lead" @@ -29,8 +29,9 @@ ) allowed_splats = list(SPLAT_GAROU, SPLAT_KINDRED) -// allowed_tribes = list(TRIBE_WYRM, TRIBE_RONIN) minimal_masquerade = 4 + // minimal_renown_rank = 3 + allowed_tribes = list(TRIBE_BLACK_SPIRAL_DANCERS, TRIBE_RONIN) display_order = JOB_DISPLAY_ORDER_EXECUTIVE department_for_prefs = /datum/job_department/pentex @@ -44,7 +45,6 @@ JOB_PENTEX_SEC_CHIEF ) -// minimal_renownrank = 3 paycheck = PAYCHECK_COMMAND paycheck_department = ACCOUNT_SEC diff --git a/modular_darkpack/modules/jobs/code/pentex/sec.dm b/modular_darkpack/modules/jobs/code/pentex/sec.dm index 979e3729f0e3..86b6cf3a3925 100644 --- a/modular_darkpack/modules/jobs/code/pentex/sec.dm +++ b/modular_darkpack/modules/jobs/code/pentex/sec.dm @@ -2,7 +2,7 @@ title = JOB_PENTEX_SEC description = "You are an acting security for " + MAIN_EVIL_COMPANY + ", operating out of San Francisco. Under the chief of security's direction, your job is to keep the complex free of nosy meddlers, pick up contract violators, and to assist the chief in tackling threats to corporate assets." auto_deadmin_role_flags = DEADMIN_POSITION_HEAD - faction = FACTION_CITY + faction = FACTION_PENTEX total_positions = 2 spawn_positions = 2 supervisors = "the Board, Branch Lead, and Chief of Security" @@ -16,7 +16,7 @@ job_flags = CITY_JOB_FLAGS outfit = /datum/outfit/job/vampire/pentex_sec -// allowed_tribes = list(TRIBE_WYRM, TRIBE_RONIN) + allowed_tribes = list(TRIBE_BLACK_SPIRAL_DANCERS, TRIBE_RONIN) minimal_masquerade = 3 display_order = JOB_DISPLAY_ORDER_PENTEX_SEC diff --git a/modular_darkpack/modules/jobs/code/pentex/secchief.dm b/modular_darkpack/modules/jobs/code/pentex/secchief.dm index 6dc7b76ddee0..d5d740e9ee29 100644 --- a/modular_darkpack/modules/jobs/code/pentex/secchief.dm +++ b/modular_darkpack/modules/jobs/code/pentex/secchief.dm @@ -2,7 +2,7 @@ title = JOB_PENTEX_SEC_CHIEF description = "You are an acting chief of security for the Endron Oil Refinery, operating out of San Francisco. With discretion to the Branch Leader, your job is to keep the complex and it's proprietary information with the help of your security team, and to turn over contract violators to internal affairs or the executives." auto_deadmin_role_flags = DEADMIN_POSITION_HEAD - faction = FACTION_CITY + faction = FACTION_PENTEX total_positions = 1 spawn_positions = 1 supervisors = "the Board and the Branch Lead" @@ -17,8 +17,9 @@ outfit = /datum/outfit/job/vampire/secchief allowed_splats = list(SPLAT_GAROU, SPLAT_KINDRED) -// allowed_tribes = list(TRIBE_WYRM, TRIBE_RONIN) minimal_masquerade = 4 + // minimal_renown_rank = 3 + allowed_tribes = list(TRIBE_BLACK_SPIRAL_DANCERS, TRIBE_RONIN) display_order = JOB_DISPLAY_ORDER_SECCHIEF department_for_prefs = /datum/job_department/pentex @@ -32,7 +33,6 @@ JOB_PENTEX_AFFAIRS ) -// minimal_renownrank = 3 paycheck = PAYCHECK_COMMAND paycheck_department = ACCOUNT_SEC diff --git a/modular_darkpack/modules/jobs/code/police/fbi.dm b/modular_darkpack/modules/jobs/code/police/fbi.dm index dab4b04796be..32e67b90eb1a 100644 --- a/modular_darkpack/modules/jobs/code/police/fbi.dm +++ b/modular_darkpack/modules/jobs/code/police/fbi.dm @@ -24,7 +24,7 @@ name = "Federal Investigator" jobtype = /datum/job/vampire/fbi - ears = /obj/item/radio/headset/darkpack + ears = /obj/item/radio/headset/darkpack/police uniform = /obj/item/clothing/under/vampire/office shoes = /obj/item/clothing/shoes/vampire suit = /obj/item/clothing/suit/vampire/jacket/fbi @@ -32,8 +32,8 @@ id = /obj/item/card/police/fbi gloves = /obj/item/clothing/gloves/vampire/investigator l_pocket = /obj/item/smartphone - l_hand = /obj/item/vamp/keys/police/federal - backpack_contents = list(/obj/item/card/police/sergeant=1, /obj/item/camera/detective=1, /obj/item/camera_film=1, /obj/item/taperecorder=1, /obj/item/tape=1, /obj/item/card/credit=1, /obj/item/ammo_box/darkpack/c45acp=1, /obj/item/storage/medkit/darkpack/ifak=1) + r_pocket = /obj/item/vamp/keys/police/federal + backpack_contents = list(/obj/item/card/police/sergeant=1, /obj/item/camera/detective=1, /obj/item/camera_film=1, /obj/item/taperecorder=1, /obj/item/tape=1, /obj/item/card/credit=1, /obj/item/ammo_box/darkpack/c45acp/hp=1, /obj/item/storage/medkit/darkpack/ifak=1) /datum/outfit/job/vampire/fbi/post_equip(mob/living/carbon/human/agent) ..() diff --git a/modular_darkpack/modules/jobs/code/sabbat/ductus.dm b/modular_darkpack/modules/jobs/code/sabbat/ductus.dm index c8bdbf80a59d..510f4f10c5fe 100644 --- a/modular_darkpack/modules/jobs/code/sabbat/ductus.dm +++ b/modular_darkpack/modules/jobs/code/sabbat/ductus.dm @@ -1,6 +1,6 @@ /datum/job/vampire/sabbatductus title = JOB_SABBAT_DUCTUS - faction = FACTION_CITY + faction = FACTION_SABBAT total_positions = 1 spawn_positions = 1 supervisors = "Caine" diff --git a/modular_darkpack/modules/jobs/code/sabbat/pack.dm b/modular_darkpack/modules/jobs/code/sabbat/pack.dm index 033c93338d2f..86b3fa345637 100644 --- a/modular_darkpack/modules/jobs/code/sabbat/pack.dm +++ b/modular_darkpack/modules/jobs/code/sabbat/pack.dm @@ -1,6 +1,6 @@ /datum/job/vampire/sabbatpack title = JOB_SABBAT_PACK - faction = FACTION_CITY + faction = FACTION_SABBAT total_positions = 5 spawn_positions = 5 supervisors = "Caine" diff --git a/modular_darkpack/modules/jobs/code/sabbat/priest.dm b/modular_darkpack/modules/jobs/code/sabbat/priest.dm index cef77bc70de7..c6c070bd476e 100644 --- a/modular_darkpack/modules/jobs/code/sabbat/priest.dm +++ b/modular_darkpack/modules/jobs/code/sabbat/priest.dm @@ -1,6 +1,6 @@ /datum/job/vampire/sabbatpriest title = JOB_SABBAT_PRIEST - faction = FACTION_CITY + faction = FACTION_SABBAT total_positions = 2 spawn_positions = 2 supervisors = "Caine" diff --git a/modular_darkpack/modules/jobs/code/tremere/archivist.dm b/modular_darkpack/modules/jobs/code/tremere/archivist.dm index 4b4c9172b8e6..4d6b9d801257 100644 --- a/modular_darkpack/modules/jobs/code/tremere/archivist.dm +++ b/modular_darkpack/modules/jobs/code/tremere/archivist.dm @@ -1,6 +1,6 @@ /datum/job/vampire/archivist title = JOB_CHANTRY_ARCHIVIST - faction = FACTION_CITY + faction = FACTION_CAMARILLA total_positions = 4 spawn_positions = 4 supervisors = SUPERVISOR_REGENT diff --git a/modular_darkpack/modules/jobs/code/tremere/gargoyle.dm b/modular_darkpack/modules/jobs/code/tremere/gargoyle.dm index e4063e029936..ff958291fee0 100644 --- a/modular_darkpack/modules/jobs/code/tremere/gargoyle.dm +++ b/modular_darkpack/modules/jobs/code/tremere/gargoyle.dm @@ -1,6 +1,6 @@ /datum/job/vampire/gargoyle title = JOB_CHANTRY_GARGOYLE - faction = FACTION_CITY + faction = FACTION_CAMARILLA total_positions = 5 spawn_positions = 5 supervisors = SUPERVISOR_REGENT diff --git a/modular_darkpack/modules/jobs/code/tremere/regent.dm b/modular_darkpack/modules/jobs/code/tremere/regent.dm index da5eda4b66ca..95a8c6a66126 100644 --- a/modular_darkpack/modules/jobs/code/tremere/regent.dm +++ b/modular_darkpack/modules/jobs/code/tremere/regent.dm @@ -1,6 +1,6 @@ /datum/job/vampire/regent title = JOB_CHANTRY_REGENT - faction = FACTION_CITY + faction = FACTION_CAMARILLA total_positions = 1 spawn_positions = 1 supervisors = SUPERVISOR_CAMARILLA diff --git a/modular_darkpack/modules/jobs/code/tzimisce/bogatyr.dm b/modular_darkpack/modules/jobs/code/tzimisce/bogatyr.dm index 6eb746c9987d..580828b43968 100644 --- a/modular_darkpack/modules/jobs/code/tzimisce/bogatyr.dm +++ b/modular_darkpack/modules/jobs/code/tzimisce/bogatyr.dm @@ -1,7 +1,7 @@ /datum/job/vampire/bogatyr title = JOB_BOGATYR - faction = FACTION_CITY + faction = FACTION_SABBAT total_positions = 4 spawn_positions = 4 supervisors = " the Laws of Hospitality" diff --git a/modular_darkpack/modules/jobs/code/tzimisce/voivode.dm b/modular_darkpack/modules/jobs/code/tzimisce/voivode.dm index 10f3359806d0..27402ed33a77 100644 --- a/modular_darkpack/modules/jobs/code/tzimisce/voivode.dm +++ b/modular_darkpack/modules/jobs/code/tzimisce/voivode.dm @@ -1,6 +1,6 @@ /datum/job/vampire/voivode title = JOB_VOIVODE - faction = FACTION_CITY + faction = FACTION_SABBAT total_positions = 1 spawn_positions = 1 supervisors = " the Laws of Hospitality" diff --git a/modular_darkpack/modules/jobs/code/tzimisce/zadruga.dm b/modular_darkpack/modules/jobs/code/tzimisce/zadruga.dm index 6584fda472de..97c768db2384 100644 --- a/modular_darkpack/modules/jobs/code/tzimisce/zadruga.dm +++ b/modular_darkpack/modules/jobs/code/tzimisce/zadruga.dm @@ -1,6 +1,6 @@ /datum/job/vampire/zadruga title = JOB_ZADRUGA - faction = FACTION_CITY + faction = FACTION_SABBAT total_positions = 2 spawn_positions = 2 supervisors = " the Laws of Hospitality" diff --git a/modular_darkpack/modules/jobs/icons/landmarks.dmi b/modular_darkpack/modules/jobs/icons/landmarks.dmi index 6ca55a600355..0b7a01cff0e1 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/jumping/code/jumper_component.dm b/modular_darkpack/modules/jumping/code/jumper_component.dm index c67c9c3721ea..3ed0ef927323 100644 --- a/modular_darkpack/modules/jumping/code/jumper_component.dm +++ b/modular_darkpack/modules/jumping/code/jumper_component.dm @@ -56,6 +56,9 @@ if(HAS_TRAIT(jumper, TRAIT_FLOORED)) return + if(jumper.body_position == LYING_DOWN) + return + if(jumper.buckled) return diff --git a/modular_darkpack/modules/merits_flaws/code/config.dm b/modular_darkpack/modules/merits_flaws/code/config.dm new file mode 100644 index 000000000000..a65fdfca9719 --- /dev/null +++ b/modular_darkpack/modules/merits_flaws/code/config.dm @@ -0,0 +1,3 @@ +/datum/config_entry/flag/roleplay_only_merits + default = TRUE + protection = CONFIG_ENTRY_LOCKED // Config does nothing after initlize. dont trick people into thinking they can edit diff --git a/modular_darkpack/modules/merits_flaws/code/negative_quirks/amnesia.dm b/modular_darkpack/modules/merits_flaws/code/negative_quirks/amnesia.dm index 336bd10a02e6..5ead71367ba8 100644 --- a/modular_darkpack/modules/merits_flaws/code/negative_quirks/amnesia.dm +++ b/modular_darkpack/modules/merits_flaws/code/negative_quirks/amnesia.dm @@ -6,3 +6,4 @@ lose_text = span_notice("Oh, I remember now.") icon = FA_ICON_BRAIN failure_message = "Oh, I remember now." + roleplay_only = TRUE diff --git a/modular_darkpack/modules/merits_flaws/code/negative_quirks/animal_musk.dm b/modular_darkpack/modules/merits_flaws/code/negative_quirks/animal_musk.dm index 0f683a469923..e74c921fbec8 100644 --- a/modular_darkpack/modules/merits_flaws/code/negative_quirks/animal_musk.dm +++ b/modular_darkpack/modules/merits_flaws/code/negative_quirks/animal_musk.dm @@ -2,10 +2,13 @@ /datum/quirk/darkpack/animal_musk name = "Animal Musk" // A little unsure who to do the logic on the social roll rn. - desc = {"(This is roleplay/flavor text at the moment) You have the odor of an animal, even in Homid form. + desc = {"You have the odor of an animal, even in Homid form."} + /* + desc = {"You have the odor of an animal, even in Homid form. Whenever you are indoors or in a crowd of people, you make all Social rolls at a +2 difficulty. Outdoors or in situations where you can distance yourself from humans, your odor is not noticeable. Wolves (and lupus-born Garou) take little notice of this Flaw.."} + */ value = -1 mob_trait = TRAIT_ANIMAL_MUSK icon = FA_ICON_SPRAY_CAN_SPARKLES // icon = FA_ICON_BUGS diff --git a/modular_darkpack/modules/merits_flaws/code/negative_quirks/horrific_appearance_quirk.dm b/modular_darkpack/modules/merits_flaws/code/negative_quirks/horrific_appearance_quirk.dm index 44c0ac503f1e..b440d0ecbb70 100644 --- a/modular_darkpack/modules/merits_flaws/code/negative_quirks/horrific_appearance_quirk.dm +++ b/modular_darkpack/modules/merits_flaws/code/negative_quirks/horrific_appearance_quirk.dm @@ -10,15 +10,15 @@ icon = FA_ICON_SKULL failure_message = "The skin on your corpsely flesh returns to normal." -/datum/quirk/darkpack/horrific_appearance/add_to_holder(mob/living/new_holder, quirk_transfer, client/client_source, unique, announce) - . = ..() - if(ishuman(new_holder)) - var/mob/living/carbon/human/human_holder = new_holder - var/years_undead = human_holder.chronological_age - human_holder.age - switch(years_undead) - if (-INFINITY to 500) - human_holder.rot_body(3) - if (500 to INFINITY) - human_holder.rot_body(4) - if(human_holder.st_get_stat(STAT_APPEARANCE) > 0) - human_holder.st_add_stat_mod(STAT_APPEARANCE, -(STAT_APPEARANCE), "Monstrous") +/datum/quirk/darkpack/horrific_appearance/add(client/client_source) + var/mob/living/carbon/human/human_holder = astype(quirk_holder) + if(!human_holder) + return + var/years_undead = human_holder.chronological_age - human_holder.age + switch(years_undead) + if (-INFINITY to 500) + human_holder.rot_body(3) + if (500 to INFINITY) + human_holder.rot_body(4) + if(human_holder.st_get_stat(STAT_APPEARANCE) > 0) + human_holder.st_add_stat_mod(STAT_APPEARANCE, -(STAT_APPEARANCE), "Monstrous") diff --git a/modular_darkpack/modules/merits_flaws/code/negative_quirks/mage_blood.dm b/modular_darkpack/modules/merits_flaws/code/negative_quirks/mage_blood.dm index 9faffbd7d074..3a81f8eca09e 100644 --- a/modular_darkpack/modules/merits_flaws/code/negative_quirks/mage_blood.dm +++ b/modular_darkpack/modules/merits_flaws/code/negative_quirks/mage_blood.dm @@ -6,8 +6,7 @@ allowed_splats = list(SPLAT_KINDRED) included_clans = list(VAMPIRE_CLAN_TREMERE) -/datum/quirk/darkpack/mage_blood/add_to_holder(mob/living/new_holder, quirk_transfer, client/client_source, unique, announce) - . = ..() +/datum/quirk/darkpack/mage_blood/add(client/client_source) var/datum/splat/vampire/kindred/kindred_splat = get_kindred_splat(quirk_holder) if(!kindred_splat) return diff --git a/modular_darkpack/modules/merits_flaws/code/negative_quirks/monstrous_quirk.dm b/modular_darkpack/modules/merits_flaws/code/negative_quirks/monstrous_quirk.dm index 7c390703f1e6..31250e037bf7 100644 --- a/modular_darkpack/modules/merits_flaws/code/negative_quirks/monstrous_quirk.dm +++ b/modular_darkpack/modules/merits_flaws/code/negative_quirks/monstrous_quirk.dm @@ -10,11 +10,11 @@ icon = FA_ICON_FACE_ANGRY failure_message = "Your appearance softens, as though a great weight is lifted - you may bare your face again." -/datum/quirk/darkpack/monstrous/add_to_holder(mob/living/new_holder, quirk_transfer, client/client_source, unique, announce) - . = ..() - if(ishuman(new_holder)) - var/mob/living/carbon/human/human_holder = new_holder - human_holder.rot_body(1) - ADD_TRAIT(human_holder, TRAIT_MASQUERADE_VIOLATING_FACE, "Monstrous") - if(human_holder.st_get_stat(STAT_APPEARANCE) > 0) - human_holder.st_add_stat_mod(STAT_APPEARANCE, -(STAT_APPEARANCE), "Monstrous") +/datum/quirk/darkpack/monstrous/add(client/client_source) + var/mob/living/carbon/human/human_holder = astype(quirk_holder) + if(!human_holder) + return + human_holder.rot_body(1) + ADD_TRAIT(human_holder, TRAIT_MASQUERADE_VIOLATING_FACE, "Monstrous") + if(human_holder.st_get_stat(STAT_APPEARANCE) > 0) + human_holder.st_add_stat_mod(STAT_APPEARANCE, -human_holder.st_get_stat(STAT_APPEARANCE), "Monstrous") diff --git a/modular_darkpack/modules/merits_flaws/code/negative_quirks/thaumaturgically_inept.dm b/modular_darkpack/modules/merits_flaws/code/negative_quirks/thaumaturgically_inept.dm index a28dd948d995..a5bbe779b9bd 100644 --- a/modular_darkpack/modules/merits_flaws/code/negative_quirks/thaumaturgically_inept.dm +++ b/modular_darkpack/modules/merits_flaws/code/negative_quirks/thaumaturgically_inept.dm @@ -6,9 +6,8 @@ allowed_splats = list(SPLAT_KINDRED) included_clans = list(VAMPIRE_CLAN_TREMERE) -/datum/quirk/darkpack/thaumaturgically_inept/add_to_holder(mob/living/new_holder, quirk_transfer, client/client_source, unique, announce) - . = ..() - var/datum/splat/vampire/kindred/kindred_splat = get_kindred_splat(new_holder) +/datum/quirk/darkpack/thaumaturgically_inept/add(client/client_source) + var/datum/splat/vampire/kindred/kindred_splat = get_kindred_splat(quirk_holder) if(!kindred_splat) return kindred_splat.remove_power(/datum/discipline/thaumaturgy) diff --git a/modular_darkpack/modules/merits_flaws/code/negative_quirks/third_eye.dm b/modular_darkpack/modules/merits_flaws/code/negative_quirks/third_eye.dm new file mode 100644 index 000000000000..53efc1ac75fd --- /dev/null +++ b/modular_darkpack/modules/merits_flaws/code/negative_quirks/third_eye.dm @@ -0,0 +1,27 @@ +/datum/quirk/darkpack/permanent_third_eye + name = "Permanent Third Eye" + desc = "While most third eyes can be closed and appear on the forehead as if it were a scar of some sort, your third eye is almost always wide-open on your forehead. For Salubri, this is a dangerous proposition, exposing you to Kindred who believe the Tremere's stories of your clan being rife with infernal diablerists. For Tremere, this flaw manifests as a miraculous inheritance of the Diablerie of Saulot, almost certainly dooming your standing in Clan Tremere to be mistrusted at best, and immediately killed at worse. Your permanent third eye can be covered with a hat. This flaw is only available to Tremere and Salubri." + value = -2 + mob_trait = TRAIT_THIRD_EYE + gain_text = span_notice("Saulot curses you for your forefather's crime. Your third eye opens to never close again.") + lose_text = span_notice("Your third eye shuts once again.") + allowed_splats = list(SPLAT_KINDRED) + included_clans = list(VAMPIRE_CLAN_TREMERE) + icon = FA_ICON_EYE + failure_message = "Your blood resists the urge to open the third eye." + +/datum/quirk/darkpack/permanent_third_eye/add_to_holder(mob/living/new_holder, quirk_transfer, client/client_source, unique, announce) + . = ..() + if(iscarbon(new_holder)) + var/mob/living/carbon/carbon_holder = new_holder + var/obj/item/organ/eyes/salubri/three_eyes = new() + three_eyes.Insert(carbon_holder, TRUE, DELETE_IF_REPLACED) + +/datum/quirk/darkpack/permanent_third_eye/remove_from_current_holder(quirk_transfer) + . = ..() + // replace eyes + var/eye_type = /obj/item/organ/eyes + var/obj/item/organ/eyes/new_eyes = new eye_type() + new_eyes.Insert(quirk_holder, TRUE, DELETE_IF_REPLACED) + + diff --git a/modular_darkpack/modules/merits_flaws/code/negative_quirks/vengeful.dm b/modular_darkpack/modules/merits_flaws/code/negative_quirks/vengeful.dm index 5c7b5657267d..4f9c46d4e14c 100644 --- a/modular_darkpack/modules/merits_flaws/code/negative_quirks/vengeful.dm +++ b/modular_darkpack/modules/merits_flaws/code/negative_quirks/vengeful.dm @@ -6,3 +6,4 @@ lose_text = span_notice("You don't really care about vengeance anymore.") icon = FA_ICON_FACE_ANGRY failure_message = "You don't really care about vengeance anymore." + roleplay_only = TRUE diff --git a/modular_darkpack/modules/merits_flaws/code/neutral_quirks/illegal_identity.dm b/modular_darkpack/modules/merits_flaws/code/neutral_quirks/illegal_identity.dm index 7011d373b5b4..e798c18f029b 100644 --- a/modular_darkpack/modules/merits_flaws/code/neutral_quirks/illegal_identity.dm +++ b/modular_darkpack/modules/merits_flaws/code/neutral_quirks/illegal_identity.dm @@ -14,9 +14,10 @@ /datum/quirk/darkpack/illegal_identity/add() . = ..() - if(!ishuman(quirk_holder)) + var/mob/living/carbon/human/criminal = astype(quirk_holder) + if(!criminal) return - var/mob/living/carbon/human/criminal = quirk_holder + var/obj/item/passport/passport = locate() in criminal // In pockets if(!passport && criminal.back) passport = locate() in criminal.back // In backpack diff --git a/modular_darkpack/modules/merits_flaws/code/old_quirks.dm b/modular_darkpack/modules/merits_flaws/code/old_quirks.dm index 932adc99a81a..b7868645b0bc 100644 --- a/modular_darkpack/modules/merits_flaws/code/old_quirks.dm +++ b/modular_darkpack/modules/merits_flaws/code/old_quirks.dm @@ -271,7 +271,7 @@ Dancer medical_record_text = "Patient has aggressive flesh eating bacteria in their boody." allowed_splats = list("Vampire", "Ghoul", "Human", "Kuei-Jin") -/datum/quirk/consumption/on_process(delta_time) +/datum/quirk/consumption/on_process(seconds_per_tick) if(prob(5)) quirk_holder.adjust_brute_loss(5, TRUE) diff --git a/modular_darkpack/modules/merits_flaws/code/positive_quirks/beserk.dm b/modular_darkpack/modules/merits_flaws/code/positive_quirks/beserker.dm similarity index 70% rename from modular_darkpack/modules/merits_flaws/code/positive_quirks/beserk.dm rename to modular_darkpack/modules/merits_flaws/code/positive_quirks/beserker.dm index debce1198337..bd74f3d98208 100644 --- a/modular_darkpack/modules/merits_flaws/code/positive_quirks/beserk.dm +++ b/modular_darkpack/modules/merits_flaws/code/positive_quirks/beserker.dm @@ -1,7 +1,6 @@ -/* DARKPACK TODO - FRENZY -// W20 p. 473 -/datum/quirk/darkpack/metamorph - name = "Metamorph" +// W20 p. 476 +/datum/quirk/darkpack/beserker + name = "Berserker" desc = {"You have uncanny control over your inner anger, and can use your Rage as most Garou cannot. You can enter a berserk frenzy at will, ignoring your wound penalties. You still suffer the consequences of any actions committed in the throes of frenzy. @@ -10,14 +9,10 @@ icon = FA_ICON_ANGRY allowed_splats = SPLAT_SHIFTERS -/datum/quirk/darkpack/metamorph/add(client/client_source) +/datum/quirk/darkpack/beserker/add(client/client_source) . = ..() add_verb(quirk_holder, /mob/living/carbon/human/proc/manual_frenzy) -/datum/quirk/darkpack/metamorph/remove() +/datum/quirk/darkpack/beserker/remove() . = ..() remove_verb(quirk_holder, /mob/living/carbon/human/proc/manual_frenzy) - -/mob/living/carbon/human/proc/manual_frenzy() - return -*/ diff --git a/modular_darkpack/modules/merits_flaws/code/positive_quirks/blush_of_health_quirk.dm b/modular_darkpack/modules/merits_flaws/code/positive_quirks/blush_of_health_quirk.dm new file mode 100644 index 000000000000..c0f8c98e1765 --- /dev/null +++ b/modular_darkpack/modules/merits_flaws/code/positive_quirks/blush_of_health_quirk.dm @@ -0,0 +1,10 @@ +/datum/quirk/darkpack/blush_of_health + name = "Blush of Health" + desc = "Some Kindred are capable of maintaining the illusion of life more convincingly than their peers. With minimal effort, you can appear flushed, warm, and breathing, making it significantly harder for others to identify you as one of the Undead. While active, you seem more alive than before." + value = 1 + mob_trait = TRAIT_BLUSH_OF_HEALTH + gain_text = span_notice("A faint warmth spreads across your skin as the blush of health settles over you.") + lose_text = span_notice("The warmth fades from your skin, leaving you pallid and cold once more.") + allowed_splats = list(SPLAT_KINDRED) + icon = FA_ICON_HEART + diff --git a/modular_darkpack/modules/merits_flaws/code/positive_quirks/eat_food_quirk.dm b/modular_darkpack/modules/merits_flaws/code/positive_quirks/eat_food_quirk.dm new file mode 100644 index 000000000000..d6733ff44ca0 --- /dev/null +++ b/modular_darkpack/modules/merits_flaws/code/positive_quirks/eat_food_quirk.dm @@ -0,0 +1,18 @@ +/datum/quirk/darkpack/eat_food + name = "Eat Food" + desc = "Unlike most of the Undead, you retain the ability to eat and digest food normally, a semblance of your mortal life. While you gain no nourishment from it, you can consume food without the usual revulsion Kindred experience. Be warned: what goes down must come up, eventually." + value = 1 + mob_trait = TRAIT_EAT_FOOD + gain_text = span_notice("Your stomach stirs as you feel the organ come to life. You can now eat food.") + lose_text = span_notice("The ability to eat food fades from you.") + allowed_splats = list(SPLAT_KINDRED) + icon = FA_ICON_UTENSILS + +/datum/quirk/darkpack/eat_food/add(client/client_source) + var/mob/living/carbon/human/human_holder = astype(quirk_holder) + if(!human_holder) + return + var/obj/item/organ/tongue/tongue = human_holder.get_organ_by_type(/obj/item/organ/tongue) + tongue?.liked_foodtypes = initial(tongue.liked_foodtypes) + tongue?.disliked_foodtypes = initial(tongue.disliked_foodtypes) + tongue?.toxic_foodtypes = initial(tongue.toxic_foodtypes) 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 7060fab2a8ce..f0d55034d7ea 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 @@ -10,12 +10,11 @@ icon = FA_ICON_SKULL_CROSSBONES failure_message = "Somehow the Giovanni's Curse of Lamia returns, and your bite becomes far more painful. At least now your skin is more flush with life." -/datum/quirk/darkpack/giovanni_sanguine_incongruity/add_to_holder(mob/living/new_holder, quirk_transfer, client/client_source, unique, announce) - . = ..() - if(!ishuman(new_holder)) +/datum/quirk/darkpack/giovanni_sanguine_incongruity/add(client/client_source) + var/mob/living/carbon/human/human_holder = astype(quirk_holder) + if(!human_holder) return - - var/mob/living/carbon/human/human_holder = new_holder + var/datum/splat/vampire/kindred/kindred = get_kindred_splat(human_holder) if(kindred) if(istype(kindred.clan, /datum/subsplat/vampire_clan/giovanni)) 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 84f7913cef77..1fe2b40148ce 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 @@ -10,10 +10,9 @@ icon = FA_ICON_MOUNTAIN failure_message = "You don't want to hide as a statue anymore." -/datum/quirk/darkpack/stillness_of_death/add_to_holder(mob/living/new_holder, quirk_transfer, client/client_source, unique, announce) - . = ..() +/datum/quirk/darkpack/stillness_of_death/add(client/client_source) var/datum/action/gargoyle_statue_form/statue_action = new() - statue_action.Grant(new_holder) + statue_action.Grant(quirk_holder) /datum/action/gargoyle_statue_form name = "Statue Form" diff --git a/modular_darkpack/modules/merits_flaws/code/positive_quirks/wolf_sight.dm b/modular_darkpack/modules/merits_flaws/code/positive_quirks/wolf_sight.dm new file mode 100644 index 000000000000..6c07e73e1c1c --- /dev/null +++ b/modular_darkpack/modules/merits_flaws/code/positive_quirks/wolf_sight.dm @@ -0,0 +1,21 @@ +/datum/quirk/darkpack/wolf_sight + name = "Wolf Sight" + desc = {"In all your forms, you see colors and intensities of light as a wolf does. + Your color vision is slightly less distinct than that of humans, though you embrace the full spectrum of colors. + Your night vision, however, far surpasses human nocturnal vision."} + // Perception is not real yet. + // You also notice movement more readily. You gain an extra die to all visually-based Perception rolls that involve movement or take place at night."} + value = 1 + mob_trait = TRAIT_TRUE_NIGHT_VISION + icon = FA_ICON_DOG + allowed_splats = list(SPLAT_GAROU) + +/datum/quirk/darkpack/wolf_sight/add(client/client_source) + quirk_holder.add_client_colour(/datum/client_colour/wolf_sight, REF(src)) + +/datum/quirk/darkpack/wolf_sight/remove() + quirk_holder.remove_client_colour(REF(src)) + + +/datum/client_colour/wolf_sight + color = "#e6e6e6" diff --git a/modular_darkpack/modules/merits_flaws/merits_flaws.md b/modular_darkpack/modules/merits_flaws/readme.md similarity index 100% rename from modular_darkpack/modules/merits_flaws/merits_flaws.md rename to modular_darkpack/modules/merits_flaws/readme.md diff --git a/modular_darkpack/modules/npc/code/human/__npc.dm b/modular_darkpack/modules/npc/code/human/__npc.dm index 75475e576b89..d537417ff6e2 100644 --- a/modular_darkpack/modules/npc/code/human/__npc.dm +++ b/modular_darkpack/modules/npc/code/human/__npc.dm @@ -167,15 +167,17 @@ return is_talking = TRUE - addtimer(CALLBACK(src, PROC_REF(start_talking), message), 2 SECONDS) + addtimer(CALLBACK(src, PROC_REF(start_talking), message), 1 SECONDS) /mob/living/carbon/human/npc/proc/start_talking(message) + ADD_TRAIT(src, TRAIT_THINKING_IN_CHARACTER, CURRENTLY_TYPING_TRAIT) create_typing_indicator() var/typing_delay = round(length_char(message) * 0.5) addtimer(CALLBACK(src, PROC_REF(finish_talking), message), max(3 SECONDS, typing_delay)) /mob/living/carbon/human/npc/proc/finish_talking(message) remove_typing_indicator() + REMOVE_TRAIT(src, TRAIT_THINKING_IN_CHARACTER, CURRENTLY_TYPING_TRAIT) say(message) is_talking = FALSE diff --git a/modular_darkpack/modules/npc/code/human/npc_types/garden.dm b/modular_darkpack/modules/npc/code/human/npc_types/garden.dm index 4b0b1227923b..3b10be765343 100644 --- a/modular_darkpack/modules/npc/code/human/npc_types/garden.dm +++ b/modular_darkpack/modules/npc/code/human/npc_types/garden.dm @@ -1,6 +1,5 @@ /mob/living/carbon/human/npc/garden staying = TRUE - is_talking = TRUE /mob/living/carbon/human/npc/garden/Initialize(mapload) . = ..() diff --git a/modular_darkpack/modules/npc/code/human/npc_types/gunstore.dm b/modular_darkpack/modules/npc/code/human/npc_types/gunstore.dm new file mode 100644 index 000000000000..ea19b80c2153 --- /dev/null +++ b/modular_darkpack/modules/npc/code/human/npc_types/gunstore.dm @@ -0,0 +1,7 @@ +/mob/living/carbon/human/npc/gunstore + staying = TRUE + +/mob/living/carbon/human/npc/gunstore/Initialize(mapload) + . = ..() + + AssignSocialRole(/datum/socialrole/shop/gunstore) diff --git a/modular_darkpack/modules/npc/code/human/npc_types/hardwarestore.dm b/modular_darkpack/modules/npc/code/human/npc_types/hardwarestore.dm new file mode 100644 index 000000000000..947aee85c158 --- /dev/null +++ b/modular_darkpack/modules/npc/code/human/npc_types/hardwarestore.dm @@ -0,0 +1,7 @@ +/mob/living/carbon/human/npc/hardwarestore + staying = TRUE + +/mob/living/carbon/human/npc/hardwarestore/Initialize(mapload) + . = ..() + + AssignSocialRole(/datum/socialrole/shop/hardwarestore) diff --git a/modular_darkpack/modules/npc/code/human/npc_types/huntingstore.dm b/modular_darkpack/modules/npc/code/human/npc_types/huntingstore.dm new file mode 100644 index 000000000000..4bb604f0d7e7 --- /dev/null +++ b/modular_darkpack/modules/npc/code/human/npc_types/huntingstore.dm @@ -0,0 +1,7 @@ +/mob/living/carbon/human/npc/campingstore + staying = TRUE + +/mob/living/carbon/human/npc/campingstore/Initialize(mapload) + . = ..() + + AssignSocialRole(/datum/socialrole/shop/campingstore) diff --git a/modular_darkpack/modules/npc/code/human/npc_types/illegal.dm b/modular_darkpack/modules/npc/code/human/npc_types/illegal.dm index 25f5ef547e89..2f0598f70bb6 100644 --- a/modular_darkpack/modules/npc/code/human/npc_types/illegal.dm +++ b/modular_darkpack/modules/npc/code/human/npc_types/illegal.dm @@ -1,6 +1,5 @@ /mob/living/carbon/human/npc/illegal staying = TRUE - is_talking = TRUE /mob/living/carbon/human/npc/illegal/Initialize(mapload) . = ..() diff --git a/modular_darkpack/modules/npc/code/human/npc_types/pharmacystore.dm b/modular_darkpack/modules/npc/code/human/npc_types/pharmacystore.dm new file mode 100644 index 000000000000..55967597de12 --- /dev/null +++ b/modular_darkpack/modules/npc/code/human/npc_types/pharmacystore.dm @@ -0,0 +1,7 @@ +/mob/living/carbon/human/npc/pharmacystore + staying = TRUE + +/mob/living/carbon/human/npc/pharmacystore/Initialize(mapload) + . = ..() + + AssignSocialRole(/datum/socialrole/shop/pharmacystore) diff --git a/modular_darkpack/modules/npc/code/human/npc_types/shop.dm b/modular_darkpack/modules/npc/code/human/npc_types/shop.dm index 4d2459c23756..eac9a1085ab2 100644 --- a/modular_darkpack/modules/npc/code/human/npc_types/shop.dm +++ b/modular_darkpack/modules/npc/code/human/npc_types/shop.dm @@ -1,6 +1,5 @@ /mob/living/carbon/human/npc/shop staying = TRUE - is_talking = TRUE /mob/living/carbon/human/npc/shop/Initialize(mapload) . = ..() diff --git a/modular_darkpack/modules/npc/code/human/socialroles/shop/__shop.dm b/modular_darkpack/modules/npc/code/human/socialroles/shop/__shop.dm index 1643a2ec8587..417b83f06474 100644 --- a/modular_darkpack/modules/npc/code/human/socialroles/shop/__shop.dm +++ b/modular_darkpack/modules/npc/code/human/socialroles/shop/__shop.dm @@ -78,7 +78,17 @@ /obj/item/clothing/shoes/vampire, /obj/item/clothing/shoes/vampire/brown ) - uniforms = list(/obj/item/clothing/under/vampire/mechanic) + uniforms = list( + /obj/item/clothing/under/vampire/mechanic, + /obj/item/clothing/under/vampire/brujah, + /obj/item/clothing/under/vampire/emo, + /obj/item/clothing/under/vampire/suit, + /obj/item/clothing/under/vampire/turtleneck_black, + /obj/item/clothing/under/vampire/office, + /obj/item/clothing/under/vampire/gangrel, + /obj/item/clothing/under/vampire/tremere, + /obj/item/clothing/under/vampire/supply, + ) pockets = list( /obj/item/vamp/keys/npc, // /obj/item/stack/dollar/rand @@ -95,9 +105,23 @@ "Hey, wanna buy it?" ) random_phrases = list( - "Check this!", - "Can I help?", - "Hey, wanna buy it?" + "Can I help you find something?", + "Let me know if you need anything.", + "Take your time.", + "Good eye, that one's popular.", + "Cash or card, don't matter to me.", + "We just got a new shipment in.", + "You look like you know what you want.", + "That one's on sale. Don't ask why.", + "Been a slow day. Glad you stopped in.", + "I've been running this place twelve years. Feels like thirty.", + "My last employee quit without notice. Hence... this.", + "Everything's priced fair. Mostly.", + "Take a look around, no pressure.", + "The owner's never here. I basically run this place.", + "We don't do refunds.", + "You need a bag? Bags are five cents. City law. Don't blame me!", + "Holler if you need me, I'll be pretending to do inventory.", ) answer_phrases = list("I just work here...") help_phrases = list( diff --git a/modular_darkpack/modules/npc/code/human/socialroles/shop/bacotell.dm b/modular_darkpack/modules/npc/code/human/socialroles/shop/bacotell.dm index 62ad3f067a0d..ef745ac96ead 100644 --- a/modular_darkpack/modules/npc/code/human/socialroles/shop/bacotell.dm +++ b/modular_darkpack/modules/npc/code/human/socialroles/shop/bacotell.dm @@ -1,2 +1,16 @@ /datum/socialrole/shop/bacotell uniforms = list(/obj/item/clothing/under/vampire/bacotell) + hats = list(/obj/item/clothing/head/vampire/baseballcap) + random_phrases = list( + "Welcome to Bacotell.", + "We're not legally responsible for what you do with our food - especially if you eat it.", + "The beef is seasoned. With what? How am I supposed to know?", + "Yes it's supposed to look like that.", + "I've eaten here every day for two years. My doctor is baffled.", + "Emergency room? Not again...", + "Our nacho cheese was recently approved by the FDA!", + "I went to college you know.", + "Health Inspector? Phew...", + "No, you can't use the bathroom, it's employees only.", + "You get what you pay for.", + ) diff --git a/modular_darkpack/modules/npc/code/human/socialroles/shop/bubway.dm b/modular_darkpack/modules/npc/code/human/socialroles/shop/bubway.dm index 39c5b4cb95cc..18ba70488d3d 100644 --- a/modular_darkpack/modules/npc/code/human/socialroles/shop/bubway.dm +++ b/modular_darkpack/modules/npc/code/human/socialroles/shop/bubway.dm @@ -1,2 +1,17 @@ /datum/socialrole/shop/bubway uniforms = list(/obj/item/clothing/under/vampire/bubway) + random_phrases = list( + "Welcome to Bubway. Please move down the line.", + "Yes we have that. No you can't have extra.", + "Six inches or twelve?", + "I've made ten thousand sandwiches. I feel nothing anymore.", + "The bread is fresh. Or, was fresh...", + "Ugh, you want it toasted?", + "Sir this is a Bubway.", + "The veggie patty is technically food.", + "Please don't read the reviews...", + "Everything is fresh. The meat is from... earlier.", + "I'm something of an artist myself! A sandwich artist.", + "Health inspector? Phew...", + "I've been employee of the month six times. Theres only two of us.", + ) diff --git a/modular_darkpack/modules/npc/code/human/socialroles/shop/campingstore.dm b/modular_darkpack/modules/npc/code/human/socialroles/shop/campingstore.dm new file mode 100644 index 000000000000..737bab1a1000 --- /dev/null +++ b/modular_darkpack/modules/npc/code/human/socialroles/shop/campingstore.dm @@ -0,0 +1,17 @@ +/datum/socialrole/shop/campingstore + uniforms = list(/obj/item/clothing/under/vampire/military_fatigues) + shoes = list(/obj/item/clothing/shoes/vampire/jackboots) + hats = list(/obj/item/clothing/head/vampire/baseballcap) + gloves = list(/obj/item/clothing/gloves/vampire/leather) + random_phrases = list( + "Going camping? No? Fishing? No? ...just here for the camoflage clothes?", + "That fishing rod - my buddy has one. He hates it.", + "Tent stakes? Sure, we got those... you don't want the tent? Weirdo.", + "The encampment is under the bridge. I have tents on sale, don't worry.", + "Background check? You look trustworthy enough.", + "Three day waiting period? That some new law?", + "Youre looking for a shovel? Right...", + "Just a reminder, the binoculars are for birdwatching, creep.", + "You're looking for a chainsaw? ... should I even ask?", + + ) diff --git a/modular_darkpack/modules/npc/code/human/socialroles/shop/garden.dm b/modular_darkpack/modules/npc/code/human/socialroles/shop/garden.dm index 2ed7bfed9370..a4aade682e18 100644 --- a/modular_darkpack/modules/npc/code/human/socialroles/shop/garden.dm +++ b/modular_darkpack/modules/npc/code/human/socialroles/shop/garden.dm @@ -7,6 +7,15 @@ random_phrases = list( "Just let me know when you're ready.", "Next, here, please!", + "The tomatoes came in early this year, can you believe it?", + "We compost everything. Everything.", + "My hands haven't been clean in ten years.", + "The bees have been very cooperative lately.", + "I've named all the plants...", + "We don't use pesticides. The bugs are part of the community.", + "This one grew a little funny...", + "I've been here since six this morning.", + "My therapist says I spend too much time here...", ) help_phrases = list( "Why would you do that?!", diff --git a/modular_darkpack/modules/npc/code/human/socialroles/shop/gummaguts.dm b/modular_darkpack/modules/npc/code/human/socialroles/shop/gummaguts.dm index 01c69491f038..5070a4020744 100644 --- a/modular_darkpack/modules/npc/code/human/socialroles/shop/gummaguts.dm +++ b/modular_darkpack/modules/npc/code/human/socialroles/shop/gummaguts.dm @@ -1,2 +1,23 @@ /datum/socialrole/shop/gummaguts uniforms = list(/obj/item/clothing/under/vampire/gummaguts) + hats = list(/obj/item/clothing/head/vampire/baseballcap) + + random_phrases = list( + "Welcome to Gummaguts.", + "You want fries with that?", + "Our beef is 100% beef-adjacent.", + "Freshly microwaved just for you.", + "The FDA said we have to post that sign.", + "No, that smell is normal.", + "We're legally required to tell you this contains allergens. All of them.", + "Sir this is a Gummaguts.", + "The health inspector called it 'aggressively edible.'", + "Voted #1 in the city! ...for value.", + "Made fresh. 'Fresh' is a legally flexible term.", + "Health inspector? Phew...", + "Our shake machine is broken.", + "You want the combo?", + "No, we don't do salads.", + "Some people eat here every day.", + "Gummaguts - because cooking is for people with time!", + ) diff --git a/modular_darkpack/modules/npc/code/human/socialroles/shop/gunstore.dm b/modular_darkpack/modules/npc/code/human/socialroles/shop/gunstore.dm new file mode 100644 index 000000000000..93ef1ae44585 --- /dev/null +++ b/modular_darkpack/modules/npc/code/human/socialroles/shop/gunstore.dm @@ -0,0 +1,36 @@ +/datum/socialrole/shop/gunstore + uniforms = list(/obj/item/clothing/under/vampire/military_fatigues) + shoes = list(/obj/item/clothing/shoes/vampire/jackboots) + hats = list(/obj/item/clothing/head/vampire/baseballcap) + gloves = list(/obj/item/clothing/gloves/vampire/leather) + glasses = list(/obj/item/clothing/glasses/vampire/sun) + suits = list(/obj/item/clothing/suit/vampire/vest) + random_phrases = list( + "You again.", + "First gun? Yeah. I can tell.", + "I'm legally obligated to ask if you're okay. Are you okay?", + "Background check? You look trustworthy.", + "You look nervous. That concerns me. Not my problem...", + "That's the safety. Please stop pulling it.", + "I've been doing this fifteen years. You're in the bottom ten percent of people I feel good about.", + "You sure you don't want something smaller?", + "I don't judge. I mean I do, but professionally I don't.", + "Three day waiting period? That some new law?", + "You seem angry. Not my problem...", + "Silver? Whatre you doing, hunting vampires or something?", + "Last guy who bought that model came back two weeks later for a second one. I must be a great businessman!", + "I'm going to write down your name. Just... just so I have it.", + "The police come by every Tuesday. Just so you know.", + "Whatever's chasing you, I hope this helps.", + "I sleep fine at night. Mostly.", + "Sign here. And here. And here. This one absolves me of any legal liability.", + "You got somewhere to be after this? You seem like you got somewhere to be.", + "God bless America. And god help whoever you're mad at.", + "The second amendment - God I love this country!", + "This is America, pal. You want it, you can have it.", + "The founding fathers intended this.", + "Technically legal in all fifty states.", + "The constitution doesn't specify caliber.", + "Some people call this dangerous - can you believe that?", + "There's no law against buying three of them.", + ) diff --git a/modular_darkpack/modules/npc/code/human/socialroles/shop/hardwarestore.dm b/modular_darkpack/modules/npc/code/human/socialroles/shop/hardwarestore.dm new file mode 100644 index 000000000000..3ec8107a8a1e --- /dev/null +++ b/modular_darkpack/modules/npc/code/human/socialroles/shop/hardwarestore.dm @@ -0,0 +1,18 @@ +/datum/socialrole/shop/hardwarestore + uniforms = list(/obj/item/clothing/under/vampire/mechanic) + shoes = list(/obj/item/clothing/shoes/vampire/jackboots) + hats = list(/obj/item/clothing/head/vampire/baseballcap) + gloves = list(/obj/item/clothing/gloves/vampire/work) + suits = list(/obj/item/clothing/suit/hazardvest) + random_phrases = list( + "You need help or are you just looking?", + "You measured twice, right?", + "We got the metric and the imperial. Pick a side.", + "That'll fix it... probably...", + "Duct tape? We ran out.", + "Are you building something or pretending to build something?", + "You a contractor? Of course not...", + "The cheap version will work... I hope.", + "Online tutorial got you here, huh?", + "I don't know what you're building and I've decided not to ask.", + ) diff --git a/modular_darkpack/modules/npc/code/human/socialroles/shop/illegal.dm b/modular_darkpack/modules/npc/code/human/socialroles/shop/illegal.dm index a7657a396225..61b8957d215e 100644 --- a/modular_darkpack/modules/npc/code/human/socialroles/shop/illegal.dm +++ b/modular_darkpack/modules/npc/code/human/socialroles/shop/illegal.dm @@ -2,6 +2,13 @@ masks = list(/obj/item/clothing/mask/vampire/balaclava) shoes = list(/obj/item/clothing/shoes/vampire/sneakers) uniforms = list(/obj/item/clothing/under/vampire/emo) + suits = list( + /obj/item/clothing/suit/vampire/trench/alt, + /obj/item/clothing/suit/vampire/trench, + /obj/item/clothing/suit/vampire/jacket, + /obj/item/clothing/suit/vampire/coat, + /obj/item/clothing/suit/vampire/coat/winter) + gloves = list(/obj/item/clothing/gloves/vampire/work) // pockets = list(/obj/item/stack/dollar/rand) male_phrases = list( @@ -15,9 +22,29 @@ "Check this shit..." ) random_phrases = list( - "Pss... wanna try some weed?", + "Psst... wanna try some weed?", "Hey, vagabond...", - "Check this shit..." + "Check this shit out...", + "You didn't get this from me kid...", + "Are you wearin' a wire?", + "Eh? Whaddaya want?", + "No return policy, no fine print.", + "I'm just a businessman, Officer.", + "Keep walkin' if you ain't buyin.", + "Land of the free, baby!", + "I got a guy who knows a guy, don't worry!", + "This here fell off a truck. Several trucks...", + "What are you, a cop? You gotta tell me if you're a cop.", + "My parole officer thinks I sell hot dogs.", + "You look like someone who appreciates a good deal!", + "Shh... just, shh.", + "I got the best prices around. Don't ask why.", + "Don't read the label.", + "I'm what you call an unlicensed entrepeneur.", + "Technically legal in three countries!", + "Money up front, man!", + "I'm self-employed. Very self-employed.", + "Act natural! You're blowing my cover." ) answer_phrases = list("Nothing personal...") help_phrases = list( diff --git a/modular_darkpack/modules/npc/code/human/socialroles/shop/pharmacystore.dm b/modular_darkpack/modules/npc/code/human/socialroles/shop/pharmacystore.dm new file mode 100644 index 000000000000..a1cefa40f624 --- /dev/null +++ b/modular_darkpack/modules/npc/code/human/socialroles/shop/pharmacystore.dm @@ -0,0 +1,22 @@ +/datum/socialrole/shop/pharmacystore + uniforms = list(/obj/item/clothing/under/vampire/nurse) + shoes = list(/obj/item/clothing/shoes/vampire/white) + glasses = list(/obj/item/clothing/glasses/vampire/perception) + suits = list(/obj/item/clothing/suit/vampire/labcoat) + random_phrases = list( + "Do you have a prescription for that?", + "I'm not a doctor by the way.", + "That one interacts badly with alcohol. Found that one out the hard way...", + "Side effects may include sudden death.", + "You look like you've been self-medicating...", + "The pharmacist is in the back. You can't see him now.", + "Insurance? Uhh...", + "We're fully licensed. I hope...", + "The expiration date is more of a guideline.", + "You want the strong stuff or the stuff that just makes you not care?", + "We had a health inspection last month. Several products were... discussed.", + "Not that kind of drug store pal!", + "You seem stressed. We have something for that. And that. And the thing caused by that.", + "Double the dose if it's not working.", + "Everyone in this city eventually ends up at this counter...", + ) diff --git a/modular_darkpack/modules/npc/code/nonhuman/beastmaster/shadow_guard.dm b/modular_darkpack/modules/npc/code/nonhuman/beastmaster/shadow_guard.dm index 8de13c532654..8c63b12a78bf 100644 --- a/modular_darkpack/modules/npc/code/nonhuman/beastmaster/shadow_guard.dm +++ b/modular_darkpack/modules/npc/code/nonhuman/beastmaster/shadow_guard.dm @@ -1,6 +1,6 @@ /mob/living/basic/shadow_guard name = "heart of silence" - desc = "A shadow given life, creature of fathomless..." + desc = "A shadow given life, fathomless creature..." icon = 'modular_darkpack/modules/npc/icons/shadow_guard.dmi' icon_state = "shadow2" icon_living = "shadow2" @@ -8,12 +8,12 @@ basic_mob_flags = DEL_ON_DEATH speed = 0 - maxHealth = 150 - health = 150 + maxHealth = 100 + health = 100 obj_damage = 50 - melee_damage_lower = 20 - melee_damage_upper = 20 + melee_damage_lower = 15 + melee_damage_upper = 15 attack_verb_continuous = "gouges" attack_verb_simple = "gouge" attack_sound = 'sound/mobs/non-humanoids/venus_trap/venus_trap_hit.ogg' @@ -26,5 +26,19 @@ /mob/living/basic/shadow_guard/Initialize(mapload) . = ..() + if(prob(50) && icon_state == "shadow2") + icon_state = "shadow" + icon_living = "shadow" AddElement(/datum/element/ai_retaliate) +/mob/living/basic/shadow_guard/hungry_shade + name = "hungry shade" + desc = "A shade from the furthest reaches of the underworld made manifest." + maxHealth = 150 + health = 150 + melee_damage_upper = 25 + melee_damage_lower = 25 + icon_state = "shade" + icon_living = "shade" + alpha = 160 + attack_sound = 'sound/mobs/humanoids/shadow/shadow_wail.ogg' diff --git a/modular_darkpack/modules/npc/code/nonhuman/friendly/bird_ai.dm b/modular_darkpack/modules/npc/code/nonhuman/friendly/bird_ai.dm index c2858c2c4a87..1573ea48bb87 100644 --- a/modular_darkpack/modules/npc/code/nonhuman/friendly/bird_ai.dm +++ b/modular_darkpack/modules/npc/code/nonhuman/friendly/bird_ai.dm @@ -24,7 +24,7 @@ target_key = BB_LOW_PRIORITY_HUNTING_TARGET hunting_behavior = /datum/ai_behavior/hunt_target/find_shiney finding_behavior = /datum/ai_behavior/find_hunt_target/find_shiney - hunt_targets = list(/obj/item/ammo_casing, /obj/item/watch, /obj/item/vamp/keys, /obj/item/vtm_artifact, /obj/item/knife) + hunt_targets = list(/obj/item/ammo_casing, /obj/item/watch, /obj/item/vamp/keys, /obj/item/occult_artifact, /obj/item/knife) hunt_range = 10 /datum/ai_behavior/find_hunt_target/find_shiney diff --git a/modular_darkpack/modules/npc/code/nonhuman/hostile/abyss_tentacle.dm b/modular_darkpack/modules/npc/code/nonhuman/hostile/abyss_tentacle.dm index 2e3d60060485..cb28a7a75525 100644 --- a/modular_darkpack/modules/npc/code/nonhuman/hostile/abyss_tentacle.dm +++ b/modular_darkpack/modules/npc/code/nonhuman/hostile/abyss_tentacle.dm @@ -23,6 +23,7 @@ GLOBAL_LIST_EMPTY(global_tentacle_grabs) speak_emote = list("writhes") basic_mob_flags = DEL_ON_DEATH mobility_flags = NONE + move_resist = MOVE_FORCE_EXTREMELY_STRONG environment_smash = ENVIRONMENT_SMASH_NONE @@ -47,7 +48,7 @@ GLOBAL_LIST_EMPTY(global_tentacle_grabs) /datum/ai_planning_subtree/tentacle_grab_and_crush -/datum/ai_planning_subtree/tentacle_grab_and_crush/SelectBehaviors(datum/ai_controller/controller, delta_time) +/datum/ai_planning_subtree/tentacle_grab_and_crush/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) var/mob/living/basic/abyss_tentacle/tentacle = controller.pawn if(!istype(tentacle)) return @@ -128,14 +129,20 @@ GLOBAL_LIST_EMPTY(global_tentacle_grabs) . = ..() if(summoner) owner = summoner - if(owner?.tentacle_aggro_mode) - aggro_mode = owner.tentacle_aggro_mode + if(owner) + var/datum/splat/vampire/vampire = get_splat_with_discipline(owner) + var/datum/discipline_power/obtenebration/arms_of_the_abyss/abyss_power = vampire?.get_discipline_power(/datum/discipline_power/obtenebration/arms_of_the_abyss) + if(abyss_power) + aggro_mode = abyss_power.aggro_mode /mob/living/basic/abyss_tentacle/Destroy(force) if(owner) var/datum/splat/vampire/vampire = get_splat_with_discipline(owner) - var/datum/discipline_power/obtenebration/arms_of_the_abyss/power = vampire.get_discipline_power(/datum/discipline_power/obtenebration/arms_of_the_abyss) - power.active_tentacles -= src + var/datum/discipline_power/obtenebration/arms_of_the_abyss/abyss_power = vampire?.get_discipline_power(/datum/discipline_power/obtenebration/arms_of_the_abyss) + if(abyss_power) + abyss_power.active_tentacles -= src + if(grabbed_mob) + release_grabbed_mob() . = ..() @@ -198,8 +205,8 @@ GLOBAL_LIST_EMPTY(global_tentacle_grabs) return if(get_dist(source, src) > 0) - if(world.time >= source.escape_attempt) - source.escape_attempt = world.time + 1 TURNS + if(world.time >= source.tentacle_escape_attempt) + source.tentacle_escape_attempt = world.time + 1 TURNS var/rollcheck = SSroll.storyteller_roll(source.st_get_stat(STAT_STRENGTH), 6, source) switch(rollcheck) if(ROLL_SUCCESS) @@ -218,8 +225,7 @@ GLOBAL_LIST_EMPTY(global_tentacle_grabs) . = ..() /mob/living/proc/set_tentacle_grab(obj/tentacle) - grabbed_by_tentacle = tentacle + return /mob/living/proc/clear_tentacle_grab() - grabbed_by_tentacle = null - escape_attempt = 0 + tentacle_escape_attempt = 0 diff --git a/modular_darkpack/modules/npc/icons/shadow_guard.dmi b/modular_darkpack/modules/npc/icons/shadow_guard.dmi index 59d0b5d6b302..5cf5d220c912 100644 Binary files a/modular_darkpack/modules/npc/icons/shadow_guard.dmi and b/modular_darkpack/modules/npc/icons/shadow_guard.dmi differ diff --git a/modular_darkpack/modules/occult_artifacts/code/_artifact.dm b/modular_darkpack/modules/occult_artifacts/code/_artifact.dm new file mode 100644 index 000000000000..b68d7037b54e --- /dev/null +++ b/modular_darkpack/modules/occult_artifacts/code/_artifact.dm @@ -0,0 +1,132 @@ +/obj/item/occult_artifact/pickup(mob/user) + . = ..() + if(identified) + bind(user) + +/obj/item/occult_artifact/dropped(mob/user, silent = FALSE) + . = ..() + if(identified) + if(isturf(loc)) + unbind(user) + + +/obj/item/occult_artifact/process(seconds_per_tick) + if(owner && !in_contents_of(owner)) + unbind(owner) + +/obj/item/occult_artifact + name = "unidentified occult fetish" + desc = "Who knows what secrets it could contain..." + icon_state = "arcane" + icon = 'modular_darkpack/modules/occult_artifacts/icons/artifacts.dmi' + ONFLOOR_ICON_HELPER('modular_darkpack/modules/occult_artifacts/icons/artifacts_onfloor.dmi') + abstract_type = /obj/item/occult_artifact + w_class = WEIGHT_CLASS_SMALL + var/mob/living/owner + var/true_name = "artifact" + var/true_desc = "Debug" + var/identified = FALSE + var/research_value = 0 + var/can_be_identified_without_ritual = TRUE + + var/grant_sound // = 'sound/effects/magic/swap.ogg' + var/ungrant_sound // = 'sound/effects/magic/teleport_diss.ogg' + + var/datum/controller/subsystem/processing/subsystem_type = /datum/controller/subsystem/processing/obj + + var/datum/storyteller_roll/identify_occult/identify_roll + +/obj/item/occult_artifact/proc/identify(mob/living/artifact_identifier) + if(!identified) + name = true_name + desc = true_desc + identified = TRUE + if(src in artifact_identifier?.get_all_contents()) + bind(artifact_identifier) + +/obj/item/occult_artifact/proc/bind(mob/user) + if(!identified) + return + if(owner) // Dont bind twice + return + owner = user + + var/datum/controller/subsystem/processing/subsystem = locate(subsystem_type) in Master.subsystems + START_PROCESSING(subsystem, src) + + grant_powers() + +/obj/item/occult_artifact/proc/unbind(mob/user) + var/datum/controller/subsystem/processing/subsystem = locate(subsystem_type) in Master.subsystems + STOP_PROCESSING(subsystem, src) + + if(owner) + ungrant_powers() + owner = null + +/obj/item/occult_artifact/proc/grant_powers() + SHOULD_CALL_PARENT(TRUE) + + if(grant_sound) + playsound(owner, grant_sound, 5) + return + +/obj/item/occult_artifact/proc/ungrant_powers() + SHOULD_CALL_PARENT(TRUE) + + if(ungrant_sound) + playsound(owner, ungrant_sound, 5) + return + + +/obj/item/occult_artifact/attack_self(mob/user, modifiers) + . = ..() + if(!isliving(user)) + return + + if(identified) + to_chat(user, span_notice("This artifact is already identified.")) + return + + var/mob/living/artifact_identifier = user + if(artifact_identifier.st_get_stat(STAT_OCCULT) < 3) + to_chat(artifact_identifier, span_warning("What is this thing? Some kind of yard sale item?")) + return + + if(!can_be_identified_without_ritual) + to_chat(artifact_identifier, span_warning("You've seen some occult artifacts, trinkets, and powerful relics, but this, you've either never seen it before, or it's power can only be awakened by few...")) + return + + to_chat(artifact_identifier, span_cult("You might have seen this before in an occult text. You start identifying it...")) + if(!do_after(artifact_identifier, 1 TURNS, src)) + return + + if(!identify_roll) + identify_roll = new() + var/roll = identify_roll.st_roll(user, src) + if(roll == ROLL_SUCCESS) + identify(artifact_identifier) + to_chat(artifact_identifier, span_cult("You successfully identify [src]!")) + else + to_chat(artifact_identifier, span_warning("You stop examining [src].")) + +/obj/effect/spawner/random/occult + name = "occult spawner" + icon = 'modular_darkpack/modules/occult_artifacts/icons/artifacts.dmi' + icon_state = "art_rand" + +/obj/effect/spawner/random/occult/artifact + name = "random occult artifact" + loot_subtype_path = /obj/item/occult_artifact + +/obj/effect/spawner/random/occult/artifact/Initialize(mapload) + spawn_loot_chance = CONFIG_GET(number/artifact_random_probability) + . = ..() + +/obj/effect/spawner/random/occult/artifact/vampire_only + name = "random vampire artifact" + loot_subtype_path = /obj/item/occult_artifact/vampire + +/obj/effect/spawner/random/occult/artifact/werewolf_only + name = "random garou fetish" + loot_subtype_path = /obj/item/occult_artifact/werewolf diff --git a/modular_darkpack/modules/occult_artifacts/code/artifacts/_artifact_config.dm b/modular_darkpack/modules/occult_artifacts/code/_artifact_config.dm similarity index 51% rename from modular_darkpack/modules/occult_artifacts/code/artifacts/_artifact_config.dm rename to modular_darkpack/modules/occult_artifacts/code/_artifact_config.dm index 88ad397bbe66..464bf8b5a3a4 100644 --- a/modular_darkpack/modules/occult_artifacts/code/artifacts/_artifact_config.dm +++ b/modular_darkpack/modules/occult_artifacts/code/_artifact_config.dm @@ -1,9 +1,9 @@ /datum/config_entry/number/artifact_crate_probability - default = 20 - min_val = 0 - max_val = 100 + default = 20 + min_val = 0 + max_val = 100 /datum/config_entry/number/artifact_random_probability - default = 50 - min_val = 0 - max_val = 100 + default = 50 + min_val = 0 + max_val = 100 diff --git a/modular_darkpack/modules/occult_artifacts/code/_vampire.dm b/modular_darkpack/modules/occult_artifacts/code/_vampire.dm new file mode 100644 index 000000000000..7b803e33bc5f --- /dev/null +++ b/modular_darkpack/modules/occult_artifacts/code/_vampire.dm @@ -0,0 +1,2 @@ +/obj/item/occult_artifact/vampire + abstract_type = /obj/item/occult_artifact/vampire diff --git a/modular_darkpack/modules/occult_artifacts/code/_werewolf.dm b/modular_darkpack/modules/occult_artifacts/code/_werewolf.dm new file mode 100644 index 000000000000..945b57b1091d --- /dev/null +++ b/modular_darkpack/modules/occult_artifacts/code/_werewolf.dm @@ -0,0 +1,33 @@ +GLOBAL_LIST_INIT(night_spirits, world.file2list("modular_darkpack/modules/occult_artifacts/strings/night_spirits.txt")) +GLOBAL_LIST_INIT(darkness_spirits, world.file2list("modular_darkpack/modules/occult_artifacts/strings/darkness_spirits.txt")) +GLOBAL_LIST_INIT(vengeance_spirits, world.file2list("modular_darkpack/modules/occult_artifacts/strings/vengeance_spirits.txt")) + +/obj/item/occult_artifact/werewolf + icon = 'modular_darkpack/modules/occult_artifacts/icons/fetishes.dmi' + worn_icon = 'modular_darkpack/modules/occult_artifacts/icons/fetishes_worn.dmi' + lefthand_file = 'modular_darkpack/modules/occult_artifacts/icons/fetishes_lefthand.dmi' + righthand_file = 'modular_darkpack/modules/occult_artifacts/icons/fetishes_righthand.dmi' + ONFLOOR_ICON_HELPER('modular_darkpack/modules/occult_artifacts/icons/fetishes_onfloor.dmi') + icon_state = "dagger" + abstract_type = /obj/item/occult_artifact/werewolf + var/spirit_name = "Glitchimus" + var/spirit_type = "ahelp" + +/proc/generate_spirit_name(spirit_type) // TODO: make this better. there are 50+ spirits in WoD, and that's not condusive to this format. + var/spirit_name + var/spirit_table + var/spirit_desc + + switch(spirit_type) + if(SPIRIT_NIGHT) + spirit_table = GLOB.night_spirits + if(SPIRIT_DARKNESS) + spirit_table = GLOB.darkness_spirits + if(SPIRIT_VENGEANCE) + spirit_table = GLOB.vengeance_spirits + + if(length(spirit_table)) + spirit_name = pick(spirit_table) + spirit_desc = "[spirit_name], a spirit of [spirit_type]" + + return spirit_desc diff --git a/modular_darkpack/modules/occult_artifacts/code/artifacts/_artifact.dm b/modular_darkpack/modules/occult_artifacts/code/artifacts/_artifact.dm deleted file mode 100644 index 693b72bbfcb4..000000000000 --- a/modular_darkpack/modules/occult_artifacts/code/artifacts/_artifact.dm +++ /dev/null @@ -1,98 +0,0 @@ -/obj/item/vtm_artifact/pickup(mob/user) - . = ..() - if(identified) - owner = user - START_PROCESSING(SSobj, src) - get_powers() - -/obj/item/vtm_artifact/dropped(mob/user) - . = ..() - if(identified) - if(isturf(loc)) - STOP_PROCESSING(SSobj, src) - if(owner) - remove_powers() - owner = null - -/obj/item/vtm_artifact/process(delta_time) - if(owner != loc && owner != loc.loc) - forceMove(get_turf(src)) - STOP_PROCESSING(SSobj, src) - if(owner) - remove_powers() - owner = null - -/obj/item/vtm_artifact - name = "unidentified occult fetish" - desc = "Who knows what secrets it could contain..." - icon_state = "arcane" - icon = 'modular_darkpack/modules/occult_artifacts/icons/artifacts.dmi' - ONFLOOR_ICON_HELPER('modular_darkpack/modules/occult_artifacts/icons/artifacts_onfloor.dmi') - w_class = WEIGHT_CLASS_SMALL - var/mob/living/owner - var/true_name = "artifact" - var/true_desc = "Debug" - var/identified = FALSE - var/gained_boosts = FALSE - var/research_value = 0 - var/can_be_identified_without_ritual = TRUE - - var/datum/storyteller_roll/identify_occult/identify_roll - -/obj/item/vtm_artifact/proc/identify() - if(!identified) - name = true_name - desc = true_desc - identified = TRUE - -/obj/item/vtm_artifact/proc/get_powers() - if(!identified) - return - -/obj/item/vtm_artifact/proc/remove_powers() - if(!identified) - return - -/obj/item/vtm_artifact/attack_self(mob/user, modifiers) - . = ..() - if(!isliving(user)) - return - - if(identified) - to_chat(user, span_notice("This artifact is already identified.")) - return - - var/mob/living/artifact_identifier = user - if(artifact_identifier.st_get_stat(STAT_OCCULT) < 3) - to_chat(artifact_identifier, span_warning("What is this thing? Some kind of yard sale item?")) - return - - if(can_be_identified_without_ritual == FALSE) - to_chat(artifact_identifier, span_warning("You've seen some occult artifacts, trinkets, and powerful relics, but this, you've either never seen it before, or it's power can only be awakened by few...")) - return - - to_chat(artifact_identifier, span_cult("You might have seen this before in an occult text. You start identifying it...")) - if(do_after(artifact_identifier, 1 TURNS, src)) - if(!identify_roll) - identify_roll = new() - identify_roll.difficulty = 8 - var/roll = identify_roll.st_roll(user, src) - if(roll == ROLL_SUCCESS) - identify() - to_chat(artifact_identifier, span_cult("You successfully identify [src]!")) - else - to_chat(artifact_identifier, span_warning("You stop examining [src].")) - -/obj/effect/spawner/random/occult - name = "occult spawner" - icon = 'modular_darkpack/modules/occult_artifacts/icons/artifacts.dmi' - icon_state = "art_rand" - -/obj/effect/spawner/random/occult/artifact - name = "random occult fetish" - //spawn_loot_chance = CONFIG_GET(number/artifact_random_probability) - loot_subtype_path = /obj/item/vtm_artifact - -/obj/effect/spawner/random/occult/artifact/Initialize(mapload) - spawn_loot_chance = CONFIG_GET(number/artifact_random_probability) - . = ..() diff --git a/modular_darkpack/modules/occult_artifacts/code/artifacts/bloodstar.dm b/modular_darkpack/modules/occult_artifacts/code/artifacts/bloodstar.dm index f8f5e58d45ec..bc69b137dcdf 100644 --- a/modular_darkpack/modules/occult_artifacts/code/artifacts/bloodstar.dm +++ b/modular_darkpack/modules/occult_artifacts/code/artifacts/bloodstar.dm @@ -1,13 +1,13 @@ -/obj/item/vtm_artifact/bloodstar +/obj/item/occult_artifact/vampire/bloodstar true_name = "Bloodstar" true_desc = "Increases Bloodpower efficiency." icon_state = "bloodstar" research_value = 10 -/obj/item/vtm_artifact/bloodstar/get_powers() +/obj/item/occult_artifact/vampire/bloodstar/grant_powers() . = ..() owner.blood_efficiency = 0.8 -/obj/item/vtm_artifact/bloodstar/remove_powers() +/obj/item/occult_artifact/vampire/bloodstar/ungrant_powers() . = ..() owner.blood_efficiency = 1 diff --git a/modular_darkpack/modules/occult_artifacts/code/artifacts/bloodstone.dm b/modular_darkpack/modules/occult_artifacts/code/artifacts/bloodstone.dm index 82d0b1103c0a..32d489a1e46a 100644 --- a/modular_darkpack/modules/occult_artifacts/code/artifacts/bloodstone.dm +++ b/modular_darkpack/modules/occult_artifacts/code/artifacts/bloodstone.dm @@ -1,4 +1,4 @@ -/obj/item/vtm_artifact/bloodstone +/obj/item/occult_artifact/vampire/bloodstone true_name = "bloodstone" true_desc = "A pulsing crimson stone that creates a mystical bond with its identifier." icon = 'modular_darkpack/modules/paths/icons/bloodstone_artifact.dmi' @@ -9,7 +9,7 @@ var/datum/action/bloodstone_track/tracking_action research_value = 15 -/obj/item/vtm_artifact/bloodstone/identify() +/obj/item/occult_artifact/vampire/bloodstone/identify() . = ..() if(identified && !bound_identifier) var/mob/living/carbon/human/user = usr @@ -20,7 +20,7 @@ tracking_action = new /datum/action/bloodstone_track(user, src) tracking_action.Grant(user) -/obj/item/vtm_artifact/bloodstone/Destroy() +/obj/item/occult_artifact/vampire/bloodstone/Destroy() if(tracking_action) var/mob/living/carbon/human/user = bound_identifier.resolve() if(user) @@ -37,7 +37,7 @@ check_flags = AB_CHECK_CONSCIOUS var/datum/weakref/tracked_stone -/datum/action/bloodstone_track/New(Target, obj/item/vtm_artifact/bloodstone/stone) +/datum/action/bloodstone_track/New(Target, obj/item/occult_artifact/vampire/bloodstone/stone) . = ..() tracked_stone = WEAKREF(stone) @@ -46,7 +46,7 @@ if(!.) return - var/obj/item/vtm_artifact/bloodstone/bloodstone = tracked_stone.resolve() + var/obj/item/occult_artifact/vampire/bloodstone/bloodstone = tracked_stone.resolve() if(!bloodstone) to_chat(owner, span_warning("The bloodstone bond has been severed.")) Remove(owner) diff --git a/modular_darkpack/modules/occult_artifacts/code/artifacts/daimonori.dm b/modular_darkpack/modules/occult_artifacts/code/artifacts/daimonori.dm index 80eefc379d88..27bd2c9f4114 100644 --- a/modular_darkpack/modules/occult_artifacts/code/artifacts/daimonori.dm +++ b/modular_darkpack/modules/occult_artifacts/code/artifacts/daimonori.dm @@ -1,13 +1,13 @@ -/obj/item/vtm_artifact/daimonori +/obj/item/occult_artifact/vampire/daimonori true_name = "Daimonori" true_desc = "Increases thaumaturgy damage." icon_state = "daimonori" research_value = 20 -/obj/item/vtm_artifact/daimonori/get_powers() +/obj/item/occult_artifact/vampire/daimonori/grant_powers() . = ..() owner.thaum_damage_plus = 20 -/obj/item/vtm_artifact/daimonori/remove_powers() +/obj/item/occult_artifact/vampire/daimonori/ungrant_powers() . = ..() owner.thaum_damage_plus = 0 diff --git a/modular_darkpack/modules/occult_artifacts/code/artifacts/fae_charm.dm b/modular_darkpack/modules/occult_artifacts/code/artifacts/fae_charm.dm index 776d2a7b1ebe..40a7898f1012 100644 --- a/modular_darkpack/modules/occult_artifacts/code/artifacts/fae_charm.dm +++ b/modular_darkpack/modules/occult_artifacts/code/artifacts/fae_charm.dm @@ -1,16 +1,13 @@ -/obj/item/vtm_artifact/fae_charm +/obj/item/occult_artifact/vampire/fae_charm true_name = "Fae Charm" true_desc = "Dexterity boost." icon_state = "fae_charm" research_value = 35 -/obj/item/vtm_artifact/fae_charm/get_powers() +/obj/item/occult_artifact/vampire/fae_charm/grant_powers() . = ..() owner.st_add_stat_mod(STAT_DEXTERITY, 1, type) -/obj/item/vtm_artifact/fae_charm/remove_powers() +/obj/item/occult_artifact/vampire/fae_charm/ungrant_powers() . = ..() owner.st_remove_stat_mod(STAT_DEXTERITY, 1, type) - -/datum/movespeed_modifier/fae_charm - multiplicative_slowdown = -0.20 diff --git a/modular_darkpack/modules/occult_artifacts/code/artifacts/galdjum.dm b/modular_darkpack/modules/occult_artifacts/code/artifacts/galdjum.dm index 9b3cd310b289..d54e646bf84b 100644 --- a/modular_darkpack/modules/occult_artifacts/code/artifacts/galdjum.dm +++ b/modular_darkpack/modules/occult_artifacts/code/artifacts/galdjum.dm @@ -1,13 +1,13 @@ -/obj/item/vtm_artifact/galdjum +/obj/item/occult_artifact/vampire/galdjum true_name = "Galdjum" true_desc = "Increases disciplines duration." icon_state = "galdjum" research_value = 10 -/obj/item/vtm_artifact/galdjum/get_powers() +/obj/item/occult_artifact/vampire/galdjum/grant_powers() . = ..() owner.discipline_time_plus = 25 -/obj/item/vtm_artifact/galdjum/remove_powers() +/obj/item/occult_artifact/vampire/galdjum/ungrant_powers() . = ..() owner.discipline_time_plus = 0 diff --git a/modular_darkpack/modules/occult_artifacts/code/artifacts/heart_of_eliza.dm b/modular_darkpack/modules/occult_artifacts/code/artifacts/heart_of_eliza.dm index cc14745e5782..f84fa5fb8ba6 100644 --- a/modular_darkpack/modules/occult_artifacts/code/artifacts/heart_of_eliza.dm +++ b/modular_darkpack/modules/occult_artifacts/code/artifacts/heart_of_eliza.dm @@ -1,13 +1,13 @@ -/obj/item/vtm_artifact/heart_of_eliza +/obj/item/occult_artifact/vampire/heart_of_eliza true_name = "Heart of Eliza" true_desc = "Melee damage boost." icon_state = "h_eliza" research_value = 30 -/obj/item/vtm_artifact/heart_of_eliza/get_powers() +/obj/item/occult_artifact/vampire/heart_of_eliza/grant_powers() . = ..() owner.st_add_stat_mod(STAT_STRENGTH, 1, type) -/obj/item/vtm_artifact/heart_of_eliza/remove_powers() +/obj/item/occult_artifact/vampire/heart_of_eliza/ungrant_powers() . = ..() owner.st_remove_stat_mod(STAT_STRENGTH, 1, type) diff --git a/modular_darkpack/modules/occult_artifacts/code/artifacts/key_of_alamut.dm b/modular_darkpack/modules/occult_artifacts/code/artifacts/key_of_alamut.dm index 43557a4f24bc..914bf9fbebe4 100644 --- a/modular_darkpack/modules/occult_artifacts/code/artifacts/key_of_alamut.dm +++ b/modular_darkpack/modules/occult_artifacts/code/artifacts/key_of_alamut.dm @@ -1,10 +1,10 @@ -/obj/item/vtm_artifact/key_of_alamut +/obj/item/occult_artifact/vampire/key_of_alamut true_name = "Key of Alamut" true_desc = "Decreases incoming damage." icon_state = "k_alamut" research_value = 30 -/obj/item/vtm_artifact/key_of_alamut/get_powers() +/obj/item/occult_artifact/vampire/key_of_alamut/grant_powers() . = ..() var/mob/living/carbon/human/H = owner if(H.dna.species.damage_modifier >= 70) @@ -12,7 +12,7 @@ if(H.dna) H.dna.species.damage_modifier = H.dna.species.damage_modifier+20 -/obj/item/vtm_artifact/key_of_alamut/remove_powers() +/obj/item/occult_artifact/vampire/key_of_alamut/ungrant_powers() . = ..() var/mob/living/carbon/human/H = owner if(H.dna.species.damage_modifier >= 50) diff --git a/modular_darkpack/modules/occult_artifacts/code/artifacts/mummywrap_fetish.dm b/modular_darkpack/modules/occult_artifacts/code/artifacts/mummywrap_fetish.dm index 086912eee32a..6e2c5f3be540 100644 --- a/modular_darkpack/modules/occult_artifacts/code/artifacts/mummywrap_fetish.dm +++ b/modular_darkpack/modules/occult_artifacts/code/artifacts/mummywrap_fetish.dm @@ -1,11 +1,11 @@ -/obj/item/vtm_artifact/mummywrap_fetish +/obj/item/occult_artifact/vampire/mummywrap_fetish true_name = "Mummywrap Fetish" true_desc = "Passive health regeneration." icon_state = "m_fetish" var/last_regen = 0 research_value = 10 -/obj/item/vtm_artifact/mummywrap_fetish/process(delta_time) +/obj/item/occult_artifact/vampire/mummywrap_fetish/process(seconds_per_tick) . = ..() if(identified && owner) if(last_regen+60 < world.time) diff --git a/modular_darkpack/modules/occult_artifacts/code/artifacts/odious_chalice.dm b/modular_darkpack/modules/occult_artifacts/code/artifacts/odious_chalice.dm index b1a491dfb394..ac6a05228d28 100644 --- a/modular_darkpack/modules/occult_artifacts/code/artifacts/odious_chalice.dm +++ b/modular_darkpack/modules/occult_artifacts/code/artifacts/odious_chalice.dm @@ -1,15 +1,15 @@ -/obj/item/vtm_artifact/odious_chalice +/obj/item/occult_artifact/vampire/odious_chalice true_name = "Odious Chalice" true_desc = "Stores blood from every attack." icon_state = "o_chalice" var/stored_blood = 0 research_value = 30 -/obj/item/vtm_artifact/odious_chalice/examine(mob/user) +/obj/item/occult_artifact/vampire/odious_chalice/examine(mob/user) . = ..() . += "[src] contains [stored_blood] blood points..." -/obj/item/vtm_artifact/odious_chalice/attack(mob/living/M, mob/living/user) +/obj/item/occult_artifact/vampire/odious_chalice/attack(mob/living/M, mob/living/user) . = ..() if(!get_kindred_splat(M)) return diff --git a/modular_darkpack/modules/occult_artifacts/code/artifacts/tarulfang.dm b/modular_darkpack/modules/occult_artifacts/code/artifacts/tarulfang.dm new file mode 100644 index 000000000000..80ddaac33023 --- /dev/null +++ b/modular_darkpack/modules/occult_artifacts/code/artifacts/tarulfang.dm @@ -0,0 +1,13 @@ +// DARKPACK TODO - FRENZY - (This never did FUCK anything.) +/obj/item/occult_artifact/vampire/tarulfang + true_name = "Tarulfang" + true_desc = "Decreases chance of frenzy." + icon_state = "tarulfang" + +/obj/item/occult_artifact/vampire/tarulfang/grant_powers() + . = ..() + owner.frenzy_chance_boost = 5 + +/obj/item/occult_artifact/vampire/tarulfang/ungrant_powers() + . = ..() + owner.frenzy_chance_boost = 10 diff --git a/modular_darkpack/modules/occult_artifacts/code/artifacts/weekapaug_thistle.dm b/modular_darkpack/modules/occult_artifacts/code/artifacts/weekapaug_thistle.dm index e5bfdd8a594e..406bd60fe0fb 100644 --- a/modular_darkpack/modules/occult_artifacts/code/artifacts/weekapaug_thistle.dm +++ b/modular_darkpack/modules/occult_artifacts/code/artifacts/weekapaug_thistle.dm @@ -2,31 +2,22 @@ melee = 10 bullet = 10 -/obj/item/vtm_artifact/weekapaug_thistle +/obj/item/occult_artifact/vampire/weekapaug_thistle true_name = "Weekapaug Thistle" true_desc = "Increases combat defense." icon_state = "w_thistle" research_value = 10 -/obj/item/vtm_artifact/weekapaug_thistle/get_powers() +/obj/item/occult_artifact/vampire/weekapaug_thistle/grant_powers() . = ..() - var/mob/living/carbon/human/H = owner - H.physiology.armor = H.physiology.armor.add_other_armor(/datum/armor/weekapaug_thistle) + var/mob/living/carbon/human/human_owner = astype(owner) + if(!human_owner) + return + human_owner.physiology.armor = human_owner.physiology.armor.add_other_armor(/datum/armor/weekapaug_thistle) -/obj/item/vtm_artifact/weekapaug_thistle/remove_powers() +/obj/item/occult_artifact/vampire/weekapaug_thistle/ungrant_powers() . = ..() - var/mob/living/carbon/human/H = owner - H.physiology.armor = H.physiology.armor.subtract_other_armor(/datum/armor/weekapaug_thistle) - -/obj/item/vtm_artifact/tarulfang - true_name = "Tarulfang" - true_desc = "Decreases chance of frenzy." - icon_state = "tarulfang" - -/obj/item/vtm_artifact/weekapaug_thistle/get_powers() - . = ..() - owner.frenzy_chance_boost = 5 - -/obj/item/vtm_artifact/weekapaug_thistle/remove_powers() - . = ..() - owner.frenzy_chance_boost = 10 + var/mob/living/carbon/human/human_owner = astype(owner) + if(!human_owner) + return + human_owner.physiology.armor = human_owner.physiology.armor.subtract_other_armor(/datum/armor/weekapaug_thistle) diff --git a/modular_darkpack/modules/occult_artifacts/code/fetishes/dagger_of_retribution.dm b/modular_darkpack/modules/occult_artifacts/code/fetishes/dagger_of_retribution.dm new file mode 100644 index 000000000000..5e2c55097ac8 --- /dev/null +++ b/modular_darkpack/modules/occult_artifacts/code/fetishes/dagger_of_retribution.dm @@ -0,0 +1,160 @@ +/obj/item/occult_artifact/werewolf/dagger_of_retribution + name = "iron knife" + desc = "A crude knife wrought from iron." + true_name = "dagger of retribution" + true_desc = "An ugly iron dagger imbued with a vengeance-spirit." + worn_icon = 'modular_darkpack/modules/weapons/icons/worn_melee.dmi' + worn_icon_state = "knife" + icon_state = "dagger" + force = 30 + wound_bonus = -5 + throwforce = 15 + attack_verb_continuous = list("slashes", "cuts") + attack_verb_simple = list("slash", "cut") + hitsound = 'sound/items/weapons/slash.ogg' + armour_penetration = 35 + block_chance = 5 + sharpness = SHARP_EDGED + w_class = WEIGHT_CLASS_SMALL + slot_flags = ITEM_SLOT_BELT + resistance_flags = FIRE_PROOF + subsystem_type = /datum/controller/subsystem/processing/fastprocess + + spirit_type = SPIRIT_VENGEANCE + + var/obj/bound_item + var/spinning = FALSE + + +/obj/item/occult_artifact/werewolf/dagger_of_retribution/Initialize(mapload) + . = ..() + spirit_name = generate_spirit_name(spirit_type) + +/obj/item/occult_artifact/werewolf/dagger_of_retribution/Destroy(force) + stop_live_tracking() + . = ..() + +/obj/item/occult_artifact/werewolf/dagger_of_retribution/identify() + . = ..() + say("I am [spirit_name]... That which is lost will be found...") + +/obj/item/occult_artifact/werewolf/dagger_of_retribution/examine(mob/user) + . = ..() + if(identified) + . += span_nicegreen("Concentrate on a lost item while holding the dagger; the weapon will gently tug in the direction of the item until you reclaim it.") + . += span_purple("Imbued with [spirit_name].") + if(bound_item) + . += span_purple("Bound to [bound_item].") + if(iscarbon(loc)) + var/mob/living/carbon/C = loc + + var/obj/item/mainhand = C.get_active_held_item() + var/obj/item/offhand = C.get_inactive_held_item() + + if(mainhand == src || offhand == src) + . += span_notice("It's tugging you to the [angle2text(targets_angle())]") + + . += span_notice("
Bind an item by CLICKing on it with [src]. Unbind [src] by right clicking it.") + + + +/obj/item/occult_artifact/werewolf/dagger_of_retribution/pickup(mob/user) + . = ..() + if(bound_item) + start_live_tracking(user) + + +/obj/item/occult_artifact/werewolf/dagger_of_retribution/dropped(mob/user, silent = FALSE) + . = ..() + stop_live_tracking(user) + + + +/obj/item/occult_artifact/werewolf/dagger_of_retribution/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!identified) + return NONE + + if(user.combat_mode) + return NONE + + if(!istype(interacting_with, /obj)) // is it an object? + if(!istype(interacting_with, /turf)) + to_chat(user, span_warning("[src] refuses to be bound to [interacting_with]!")) + return ITEM_INTERACT_BLOCKING + return NONE + + if(bound_item) // do we have an item bound to us already? + to_chat(user, span_warning("[src] is already bound to [bound_item]!")) + return ITEM_INTERACT_BLOCKING + + // We are clicking on an object, we're on the right intent, and we're not bound. + bound_item = interacting_with + start_live_tracking(user) + return ITEM_INTERACT_SUCCESS + + +/obj/item/occult_artifact/werewolf/dagger_of_retribution/proc/start_live_tracking(mob/user) + RegisterSignal(bound_item, COMSIG_QDELETING, PROC_REF(stop_live_tracking)) + + if(bound_item && user) + to_chat(user, span_notice("[src] starts tugging you towards [bound_item].")) + +/obj/item/occult_artifact/werewolf/dagger_of_retribution/proc/stop_live_tracking(mob/user) + if(!bound_item) + return + + UnregisterSignal(bound_item, COMSIG_QDELETING) + + if(QDELING(bound_item)) + bound_item = null + + if(user) + to_chat(user, span_warning("[src] stops tugging.")) + + var/matrix/M = matrix(0, MATRIX_ROTATE) + animate(src, transform = M, time = 5, loop = 0) + +/obj/item/occult_artifact/werewolf/dagger_of_retribution/process(seconds_per_tick) + . = ..() + if(!bound_item) + return + + var/turf/our_turf = get_turf(src) + var/turf/bound_item_turf = get_turf(bound_item) + + if(our_turf.z == bound_item_turf.z) + point_to_target() + spinning = FALSE + else if(!spinning) + SpinAnimation(5, -1) + spinning = TRUE + +/obj/item/occult_artifact/werewolf/dagger_of_retribution/proc/point_to_target() + if(iscarbon(loc)) + var/mob/living/carbon/C = loc + + var/obj/item/mainhand = C.get_active_held_item() + var/obj/item/offhand = C.get_inactive_held_item() + + if(mainhand == src || offhand == src) + var/bound_dir = targets_angle()-135 + if(bound_item) + var/matrix/M = matrix(bound_dir, MATRIX_ROTATE) + animate(src, transform = M, time = 5, loop = 0) + else + stop_live_tracking(C) + +/obj/item/occult_artifact/werewolf/dagger_of_retribution/proc/targets_angle() + var/datum/point/point_a = RETURN_PRECISE_POINT(get_turf(src)) + var/datum/point/point_b = RETURN_PRECISE_POINT(get_turf(bound_item)) + + return angle_between_points(point_a, point_b) + +/obj/item/occult_artifact/werewolf/dagger_of_retribution/attack_self_secondary(mob/user, modifiers) + . = ..() + if(bound_item) + to_chat(user, span_warning("You start to unbind [bound_item] from [src].")) + + if(do_after(user, 3 SECONDS, src)) + stop_live_tracking(user) + bound_item = null diff --git a/modular_darkpack/modules/occult_artifacts/code/fetishes/nyxs_bangle.dm b/modular_darkpack/modules/occult_artifacts/code/fetishes/nyxs_bangle.dm new file mode 100644 index 000000000000..ebef20658b84 --- /dev/null +++ b/modular_darkpack/modules/occult_artifacts/code/fetishes/nyxs_bangle.dm @@ -0,0 +1,62 @@ +/* Nyx's Bangle */ +/obj/item/occult_artifact/werewolf/nyxs_bangle + name = "silver bracelet" + desc = "A chain bracelet made of silver." + true_name = "Nyx's Bangle" + true_desc = "A silver bracelet with numerous glyphs." + icon_state = "bangle" + worn_icon_state = "bangle" + slot_flags = ITEM_SLOT_GLOVES | ITEM_SLOT_ID + + subsystem_type = /datum/controller/subsystem/processing/fastprocess + + ungrant_sound = 'sound/effects/hallucinations/growl1.ogg' + +/obj/item/occult_artifact/werewolf/nyxs_bangle/identify() + . = ..() + say("I am [spirit_name]... Hide now, in shadow.") + +/obj/item/occult_artifact/werewolf/nyxs_bangle/ungrant_powers() + . = ..() + + owner.alpha = 255 + + +/obj/item/occult_artifact/werewolf/nyxs_bangle/process(seconds_per_tick) + . = ..() + + var/mob/living/carbon/carbon_owner = astype(owner) + if(identified && carbon_owner) + var/turf/owner_turf = get_turf(owner) + var/light_amount = owner_turf.get_lumcount() + + if(light_amount <= 0.2) + if(src == carbon_owner.gloves || src == carbon_owner.get_active_held_item() || src == carbon_owner.get_inactive_held_item()) + carbon_owner.alpha = max(carbon_owner.alpha-12.75, 25.5) + else + carbon_owner.alpha = min (carbon_owner.alpha+25.5, 255) + else + carbon_owner.alpha = min (carbon_owner.alpha+25.5, 255) + +/obj/item/occult_artifact/werewolf/nyxs_bangle/proc/get_held_mob() + if(isnull(loc)) + return null + if(isliving(loc)) + return loc + var/nested_loc = loc.loc + if (isliving(nested_loc)) + return nested_loc + return null + +/obj/item/occult_artifact/werewolf/nyxs_bangle/Initialize(mapload) + . = ..() + spirit_type = pick(SPIRIT_NIGHT, SPIRIT_DARKNESS) + spirit_name = generate_spirit_name(spirit_type) + + +/obj/item/occult_artifact/werewolf/nyxs_bangle/examine(mob/user) + . = ..() + if(identified) + . += span_nicegreen("Hide everything but your bestial eyes in shadow.") + . += span_notice("EQUIP [src] in the ID slot or GLOVES slot or HOLD it in your hand to become partially invisible in shadow.") + . += span_purple("Imbued with [spirit_name].") diff --git a/modular_darkpack/modules/occult_artifacts/icons/fetishes.dmi b/modular_darkpack/modules/occult_artifacts/icons/fetishes.dmi new file mode 100644 index 000000000000..38ff0797477a Binary files /dev/null and b/modular_darkpack/modules/occult_artifacts/icons/fetishes.dmi differ diff --git a/modular_darkpack/modules/occult_artifacts/icons/fetishes_lefthand.dmi b/modular_darkpack/modules/occult_artifacts/icons/fetishes_lefthand.dmi new file mode 100644 index 000000000000..6c5c6c0aebd8 Binary files /dev/null and b/modular_darkpack/modules/occult_artifacts/icons/fetishes_lefthand.dmi differ diff --git a/modular_darkpack/modules/occult_artifacts/icons/fetishes_onfloor.dmi b/modular_darkpack/modules/occult_artifacts/icons/fetishes_onfloor.dmi new file mode 100644 index 000000000000..fdeba6ce2516 Binary files /dev/null and b/modular_darkpack/modules/occult_artifacts/icons/fetishes_onfloor.dmi differ diff --git a/modular_darkpack/modules/occult_artifacts/icons/fetishes_righthand.dmi b/modular_darkpack/modules/occult_artifacts/icons/fetishes_righthand.dmi new file mode 100644 index 000000000000..ef812a97539f Binary files /dev/null and b/modular_darkpack/modules/occult_artifacts/icons/fetishes_righthand.dmi differ diff --git a/modular_darkpack/modules/occult_artifacts/icons/fetishes_worn.dmi b/modular_darkpack/modules/occult_artifacts/icons/fetishes_worn.dmi new file mode 100644 index 000000000000..38aefa65d71d Binary files /dev/null and b/modular_darkpack/modules/occult_artifacts/icons/fetishes_worn.dmi differ diff --git a/modular_darkpack/modules/occult_artifacts/strings/darkness_spirits.txt b/modular_darkpack/modules/occult_artifacts/strings/darkness_spirits.txt new file mode 100644 index 000000000000..dba5931b56e2 --- /dev/null +++ b/modular_darkpack/modules/occult_artifacts/strings/darkness_spirits.txt @@ -0,0 +1,69 @@ +Aethra’s Hollow +Blackmere +Crepharion +Crepusar +Crepuscar +Crepusculus, Dark Traveller +Darkwave +Duskrine +Duskvein +Duskwalker +Ebonhollow +Ebonstride +Eclipsera +Eclipthra +Gloamrend +Mireveil +Morvaith +Mourncurrent +Mournveil +Nethrael +Nightrender +Nocthalis +Noctherin +Noctheros +Noctirion +Nyxfen +Obscuran +Obsidra +Ombryl +Sableheart +Shadeborne +Shadewarden +Shadowborne +Shadowstep +Silthra +Tenebralis +Tenebreth +Tenebrus +The Ashen Silence +The Black Flow +The Dark Water +The Dim Path +The Drowned Night +The Fading Tide +The Gloaming Wanderer +The Gray Hunger +The Hollow Shade +The Murkway +The Murmuring Dark +The Night Below +The Obsidian Wane +The Pale Gloom +The Silent Depth +The Silent Eclipse +The Veiled Flow +Thorn of Night +Thraen of Dusk +Umbracend +Umbraeth +Umbrathis +Umbravine +Velastra +Velkyn +Velmourn +Velquor +Veyloth +Veythar +Voidwender +Vorynth diff --git a/modular_darkpack/modules/occult_artifacts/strings/night_spirits.txt b/modular_darkpack/modules/occult_artifacts/strings/night_spirits.txt new file mode 100644 index 000000000000..0671a0621ea7 --- /dev/null +++ b/modular_darkpack/modules/occult_artifacts/strings/night_spirits.txt @@ -0,0 +1,105 @@ +Noctyss +Velunara +Mirethyn +Shadow Muse +Dreamveil +Eclipsera +Whisperlune +Lunathis +Velnara +Duskweaver +Moonglint +Nocthera +Selenithra +Aurevelle +Threnody of Stars +Nightbloom +Veylune +Somnara +Nightrill +Ombryn +Eclipshade +Nytheris +Vaymera +Moonstray +Lunacendre +Astrellia +Viorneth +Noctilisse +Dreamesse +Nightrhyme +Mournveil +Shadowdawn +Nyxthara +Velastra +Phantomine +Eclipsine +Moonriven +Sablelune +Nostravelle +Lunareign +Thaluneth +Dream’s Hollow +Night’s Embrace +Umbraelle +Velnisse +Phantyra +Celuneth +Noctharra +Whisperveil +Moonraith +Lunaclaire +Velunith +Astrethra +Dreamrend +Nightborn +Selunara +Veythral +Nocthyra +Eclissara +Vairenne +Mournshade +Duskwraith +Velunethra +Umbrylisse +Phanthera +Noctelle +Moonweft +Somnithra +Lunysse +Nightcaller +Whisperthorn +Velastrae +Starveil +Lunavryn +Nytherelle +Moondrift +Velnarae +Umbrosyne +Selithra +Dreamveil Daughter +Nightwither +Nocturne’s Bloom +Virella +Lunacendreth +Phasmerra +Thalynne of the Eclipse +Shadowlight +Vesperyn +Lunaraith +Astrevelle +Noctura +Mournsong +Velunisse +Lunethra +Duskworn +Moon’s Memory +Nyxaelle +Somnielle +Umbrelith +Phantyssa +Dreamlorn +Noctvale +Lunathra +Veythrae +Starlorn diff --git a/modular_darkpack/modules/occult_artifacts/strings/vengeance_spirits.txt b/modular_darkpack/modules/occult_artifacts/strings/vengeance_spirits.txt new file mode 100644 index 000000000000..e287875d49cb --- /dev/null +++ b/modular_darkpack/modules/occult_artifacts/strings/vengeance_spirits.txt @@ -0,0 +1,121 @@ +Ashen Pact +Ashen Sovereign +Ashen Veil +Ashfall Covenant +Ashveil +Blood of the Forgotten +Bloodharrow +Bloodmourn +Bloodsong of the Lost +Crown of Ruin +Grave of the Faithless +Graveblight +Gravebloom +Gravetide +Harrowlight +Harrowmire +Hollowwind +Mournspire +Mournveil +Night of the Unmourned +Oathbreaker’s Dawn +Oathbreaker’s Rest +Oathfire +Oathless Dawn +Ruinveil +Ruin’s Choir +Ruin’s Embrace +Shadeborn +Storm Upon the Barrow +Storm of the Faithless +The Ashen Reign +The Ashen Revenant +The Banished King +The Banshee’s Gift +The Bitter End +The Bitter Promise +The Black Eulogy +The Black Lament +The Black Rebirth +The Black Sermon +The Bladed Choir +The Bleak Ascendant +The Bleeding Hunt +The Bleeding Moon +The Blight of Kings +The Bloodlit Exile +The Bone Lantern +The Bone Sunder +The Broken Host +The Broken Pyre +The Burning Quiet +The Cinder Choir +The Crimson Reproach +The Crimson Wake +The Crimson Weald +The Cursed Benediction +The Deathlight Covenant +The Dread Covenant +The Eclipsed Throne +The Endless Hunt +The Endless Woe +The Eternal Lament +The Final Benediction +The Forgotten Banquet +The Forgotten Legion +The Forgotten Warden +The Frosted Grin +The Frozen Hymn +The Gilded Scourge +The Gloomfeast +The Grave Hymnal +The Graven Host +The Graven Oath +The Hollow Feast +The Hollow Glory +The Hollow Monarch +The Hollow Vow +The Iron Dirge +The Iron Wail +The Last Benediction +The Last Oathkeeper +The Last Winter’s Oath +The Long Mourning +The Lost Crusade +The Mourner’s Wake +The Mourning Gale +The Mourning Throne +The Nameless Howl +The Nameless Rite +The Pale Confessor +The Pale Dominion +The Pale Dread +The Pale Maw +The Pale Reckoner +The Pale Reclaiming +The Pale Requiem +The Pale Resurgence +The Pale Supplicant +The Red Pilgrimage +The Sable Pilgrimage +The Shadow’s Debt +The Shadow’s Triumph +The Shattered Crown +The Shattered Hymn +The Silent Dominion +The Silent Herald +The Silent Hunt +The Silent Reckoning +The Sorrow’s Feast +The Waking Grief +The Weeping Hunt +The Whispered End +The Widow’s Cry +The Withered Hunt +The Withering Crown +The Wraith’s Vow +Thornwake +Vowrend +Whisper of the Gallows +Wraithbound +Wraithspire diff --git a/modular_darkpack/modules/paths/code/conjured_items.dm b/modular_darkpack/modules/paths/code/conjured_items.dm index f82620658754..7b3b937a13a7 100644 --- a/modular_darkpack/modules/paths/code/conjured_items.dm +++ b/modular_darkpack/modules/paths/code/conjured_items.dm @@ -54,7 +54,7 @@ desc = "Your hand burns with supernatural fire." icon_state = "flame" inhand_icon_state = "flame" - force = 25 + force = 15 fancy = FALSE // Levinbolt items @@ -63,7 +63,7 @@ desc = "Your arm surges with electricity!" icon_state = "illuminate" inhand_icon_state = "illuminate" - force = 15 + force = 10 light_range = 2 light_power = 1 light_color = COLOR_WHITE diff --git a/modular_darkpack/modules/paths/code/thaumaturgy_archives.dm b/modular_darkpack/modules/paths/code/thaumaturgy_archives.dm index 1f37c3cbb39a..21b820333996 100644 --- a/modular_darkpack/modules/paths/code/thaumaturgy_archives.dm +++ b/modular_darkpack/modules/paths/code/thaumaturgy_archives.dm @@ -19,20 +19,20 @@ // ARTIFACTS // Lower tier artifacts - new /datum/data/vending_product("Weekapaug Thistle", /obj/item/vtm_artifact/weekapaug_thistle, 75), - new /datum/data/vending_product("Mummywrap Fetish", /obj/item/vtm_artifact/mummywrap_fetish, 70), - new /datum/data/vending_product("Galdjum", /obj/item/vtm_artifact/galdjum, 70), - new /datum/data/vending_product("Bloodstar", /obj/item/vtm_artifact/bloodstar, 70), + new /datum/data/vending_product("Weekapaug Thistle", /obj/item/occult_artifact/vampire/weekapaug_thistle, 75), + new /datum/data/vending_product("Mummywrap Fetish", /obj/item/occult_artifact/vampire/mummywrap_fetish, 70), + new /datum/data/vending_product("Galdjum", /obj/item/occult_artifact/vampire/galdjum, 70), + new /datum/data/vending_product("Bloodstar", /obj/item/occult_artifact/vampire/bloodstar, 70), // Mid tier artifacts - new /datum/data/vending_product("Fae Charm", /obj/item/vtm_artifact/fae_charm, 120), - new /datum/data/vending_product("Daimonori", /obj/item/vtm_artifact/daimonori, 120), - new /datum/data/vending_product("Key of Alamut", /obj/item/vtm_artifact/key_of_alamut, 130), - new /datum/data/vending_product("Heart of Eliza", /obj/item/vtm_artifact/heart_of_eliza, 140), - new /datum/data/vending_product("Bloodstone", /obj/item/vtm_artifact/bloodstone, 140), + new /datum/data/vending_product("Fae Charm", /obj/item/occult_artifact/vampire/fae_charm, 120), + new /datum/data/vending_product("Daimonori", /obj/item/occult_artifact/vampire/daimonori, 120), + new /datum/data/vending_product("Key of Alamut", /obj/item/occult_artifact/vampire/key_of_alamut, 130), + new /datum/data/vending_product("Heart of Eliza", /obj/item/occult_artifact/vampire/heart_of_eliza, 140), + new /datum/data/vending_product("Bloodstone", /obj/item/occult_artifact/vampire/bloodstone, 140), // High tier artifacts - new /datum/data/vending_product("Odious Chalice", /obj/item/vtm_artifact/odious_chalice, 180), + new /datum/data/vending_product("Odious Chalice", /obj/item/occult_artifact/vampire/odious_chalice, 180), ) @@ -262,8 +262,8 @@ //offer artifacts to the shop for research points AND increment stock /obj/structure/retail/occult/item_interaction(mob/living/user, obj/item/tool, list/modifiers) . = ..() - if(istype(tool, /obj/item/vtm_artifact)) - var/obj/item/vtm_artifact/artifact = tool + if(istype(tool, /obj/item/occult_artifact)) + var/obj/item/occult_artifact/artifact = tool if(!ishuman(user)) return ITEM_INTERACT_BLOCKING diff --git a/modular_darkpack/modules/phones/code/phone_subsystem.dm b/modular_darkpack/modules/phones/code/phone_subsystem.dm index 9965aee04640..dab078bed12d 100644 --- a/modular_darkpack/modules/phones/code/phone_subsystem.dm +++ b/modular_darkpack/modules/phones/code/phone_subsystem.dm @@ -40,9 +40,11 @@ SUBSYSTEM_DEF(phones) // Returns a valid frequency for a phone to use for a phone call. /datum/controller/subsystem/phones/proc/establish_secure_frequency() var/frequency_to_use = USABLE_RADIO_FREQUENCY_FOR_PHONE_RANGE - for(var/i in length(frequencies_in_use)) - if(frequency_to_use == (USABLE_RADIO_FREQUENCY_FOR_PHONE_RANGE + i)) - frequency_to_use++ + while(frequency_to_use in frequencies_in_use) + if(frequency_to_use >= MAX_RADIO_FREQUENCY_FOR_PHONE_RANGE) + stack_trace("Phones have somehow connected over [MAX_RADIO_FREQUENCY_FOR_PHONE_RANGE - USABLE_RADIO_FREQUENCY_FOR_PHONE_RANGE] connections without being freed up. Something is wrong.") + break + frequency_to_use++ frequencies_in_use += frequency_to_use return frequency_to_use diff --git a/modular_darkpack/modules/phones/code/phone_subtypes.dm b/modular_darkpack/modules/phones/code/phone_subtypes.dm index e8c32b6da124..88c6051078bf 100644 --- a/modular_darkpack/modules/phones/code/phone_subtypes.dm +++ b/modular_darkpack/modules/phones/code/phone_subtypes.dm @@ -52,7 +52,7 @@ /obj/item/smartphone/toreador_primo important_contact_of = VAMPIRE_CLAN_TOREADOR contact_networks_pre_init = list( - alist(NETWORK_ID = VAMPIRE_LEADER_NETWORK, OUR_ROLE = "Rosebud Night Club Owner", USE_JOB_TITLE = FALSE) + alist(NETWORK_ID = VAMPIRE_LEADER_NETWORK, OUR_ROLE = (PRIMARY_NIGHTCLUB_COMPANY + " Night Club Owner"), USE_JOB_TITLE = FALSE) ) // NOSFERATU @@ -229,6 +229,27 @@ alist(NETWORK_ID = ENDRON_NETWORK, OUR_ROLE = "Endron Employee", USE_JOB_TITLE = TRUE) ) +/obj/item/smartphone/novice + contact_networks_pre_init = list( + alist(NETWORK_ID = SOCIETY_OF_LEOPOLD_NETWORK, OUR_ROLE = "Novice", USE_JOB_TITLE = TRUE) + ) + +/obj/item/smartphone/condottieri + contact_networks_pre_init = list( + alist(NETWORK_ID = SOCIETY_OF_LEOPOLD_NETWORK, OUR_ROLE = "Condottieri", USE_JOB_TITLE = TRUE) + ) + +/obj/item/smartphone/inquisitor + contact_networks_pre_init = list( + alist(NETWORK_ID = SOCIETY_OF_LEOPOLD_NETWORK, OUR_ROLE = "Inquisitor", USE_JOB_TITLE = TRUE) + ) + +/obj/item/smartphone/abbe + contact_networks_pre_init = list( + alist(NETWORK_ID = SOCIETY_OF_LEOPOLD_NETWORK, OUR_ROLE = "Abbé", USE_JOB_TITLE = TRUE) + ) + + #undef NETWORK_ID #undef OUR_ROLE #undef USE_JOB_TITLE diff --git a/modular_darkpack/modules/powers/code/admin_discipline_editor.dm b/modular_darkpack/modules/powers/code/admin_discipline_editor.dm index 8f8a2b3b8af1..3ff603e799c7 100644 --- a/modular_darkpack/modules/powers/code/admin_discipline_editor.dm +++ b/modular_darkpack/modules/powers/code/admin_discipline_editor.dm @@ -163,7 +163,6 @@ target_prefs.discipline_levels -= disc_path else target_prefs.discipline_levels[disc_path] = new_level - target_prefs.save_character() var/client/target_client = GLOB.directory[target_ckey] if(target_client?.mob && ishuman(target_client.mob)) var/mob/living/carbon/human/target_mob = target_client.mob @@ -173,6 +172,7 @@ else if(!target_mob.change_st_power_level(discipline_path, new_level)) target_mob.give_st_power(discipline_path, new_level) // and add them immediately, too var/character_name = target_prefs.read_preference(/datum/preference/name/real_name) + target_prefs.save_character() message_admins("[key_name_admin(ui.user)] set [disc_path] to level [new_level] for [ADMIN_LOOKUPFLW(target_ckey)]'s character [character_name]).") log_admin("[key_name_admin(ui.user)] set [disc_path] to level [new_level] for [ADMIN_LOOKUPFLW(target_ckey)]'s character [character_name]).") return TRUE diff --git a/modular_darkpack/modules/powers/code/discipline/__discipline_power.dm b/modular_darkpack/modules/powers/code/discipline/__discipline_power.dm index 4fb7bcb7b075..f750a363bcef 100644 --- a/modular_darkpack/modules/powers/code/discipline/__discipline_power.dm +++ b/modular_darkpack/modules/powers/code/discipline/__discipline_power.dm @@ -77,7 +77,6 @@ cooldown_timer = null QDEL_LIST(duration_timers) grouped_powers = null - discipline = null owner = null return ..() diff --git a/modular_darkpack/modules/powers/code/discipline/animalism.dm b/modular_darkpack/modules/powers/code/discipline/animalism.dm index 34d3e8605213..a018c19e8287 100644 --- a/modular_darkpack/modules/powers/code/discipline/animalism.dm +++ b/modular_darkpack/modules/powers/code/discipline/animalism.dm @@ -138,6 +138,7 @@ melee_damage_lower = 3 melee_damage_upper = 8 obj_damage = 10 + bloodpool = 2 /mob/living/basic/mouse/vampire/summoned/Initialize(mapload) AddElement(/datum/element/ai_retaliate) @@ -153,6 +154,7 @@ melee_damage_lower = 5 melee_damage_upper = 12 obj_damage = 15 + bloodpool = 2 /mob/living/basic/pet/cat/darkpack/summoned/Initialize(mapload) . = ..() @@ -176,6 +178,7 @@ attack_verb_simple = "bite" attack_sound = 'modular_darkpack/modules/deprecated/sounds/dog.ogg' random_wolf_color = FALSE + bloodpool = 2 /mob/living/basic/pet/dog/wolf/summoned/Initialize(mapload) . = ..() @@ -192,6 +195,7 @@ obj_damage = 10 attack_verb_continuous = "bites" attack_verb_simple = "bite" + bloodpool = 2 /mob/living/basic/bat/summoned/Initialize(mapload) . = ..() diff --git a/modular_darkpack/modules/powers/code/discipline/auspex/aura_component.dm b/modular_darkpack/modules/powers/code/discipline/auspex/aura_component.dm index 1d29e834edd3..46becb5f60d8 100644 --- a/modular_darkpack/modules/powers/code/discipline/auspex/aura_component.dm +++ b/modular_darkpack/modules/powers/code/discipline/auspex/aura_component.dm @@ -23,7 +23,7 @@ /datum/component/aura // A list of currently selected emotions by the player var/current_aura = AURA_INNOCENT - var/current_emotion_name = "Innocent" + var/current_emotion_name = "" var/obj/effect/abstract/shared_particle_holder/aura_smoke var/examine_message = "" var/obj/effect/aura_overlay/aura_glow_image @@ -39,7 +39,7 @@ target_hud.add_atom_to_hud(parent_mob) RegisterSignal(parent_mob, COMSIG_MOB_EMOTION_CHANGED, PROC_REF(update_emotions)) - RegisterSignal(parent_mob, COMSIG_MOB_UPDATE_AURA, PROC_REF(update_aura)) + RegisterSignals(parent_mob, list(COMSIG_MOB_UPDATE_AURA, COMSIG_LIVING_GAINED_SPLAT, COMSIG_LIVING_LOSE_SPLAT, SIGNAL_ADDTRAIT(TRAIT_IN_FRENZY), SIGNAL_REMOVETRAIT(TRAIT_IN_FRENZY)), PROC_REF(update_aura)) RegisterSignal(parent_mob, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) if(isnpc(parent_mob)) RegisterSignal(parent_mob, COMSIG_COMBAT_MODE_TOGGLED, PROC_REF(on_combat_mode_toggled)) @@ -51,7 +51,7 @@ var/datum/atom_hud/data/auspex_aura/target_hud = GLOB.huds[DATA_HUD_AUSPEX_AURAS] target_hud.remove_atom_from_hud(parent_mob) examine_message = "" - UnregisterSignal(parent_mob, list(COMSIG_MOB_EMOTION_CHANGED, COMSIG_MOB_UPDATE_AURA, COMSIG_ATOM_EXAMINE)) + UnregisterSignal(parent_mob, list(COMSIG_MOB_EMOTION_CHANGED, COMSIG_MOB_UPDATE_AURA, COMSIG_LIVING_GAINED_SPLAT, COMSIG_LIVING_LOSE_SPLAT, SIGNAL_ADDTRAIT(TRAIT_IN_FRENZY), SIGNAL_REMOVETRAIT(TRAIT_IN_FRENZY)), COMSIG_ATOM_EXAMINE) if(isnpc(parent_mob)) UnregisterSignal(parent_mob, list(COMSIG_COMBAT_MODE_TOGGLED)) QDEL_NULL(aura_smoke) @@ -83,11 +83,12 @@ /datum/component/aura/proc/on_examine(datum/source, mob/user, list/examine_list) SIGNAL_HANDLER - if(!examine_message) - return var/datum/atom_hud/data/auspex_aura/auspex_hud = GLOB.huds[DATA_HUD_AUSPEX_AURAS] if(!(user in auspex_hud.hud_users_all_z_levels)) return + update_examine_message(null) + if(!examine_message) + return examine_list += examine_message /datum/component/aura/proc/update_examine_message(mutable_appearance/aura_appearance) @@ -156,13 +157,12 @@ examine_message += "Black veins pulse through [parent_mob.p_their()] aura." if(HAS_TRAIT(parent_mob, TRAIT_FRENETIC_AURA)) examine_message += "[parent_mob.p_Their()] aura appears especially energetic." - if(!HAS_TRAIT(parent, TRAIT_PALE_AURA) && get_ghoul_splat(parent_mob)) + + if(has_pale_aura(parent_mob)) + examine_message += "[parent_mob.p_Their()] aura colors appear pale." + else if(has_pale_blotches(parent_mob)) examine_message += "Pale blotches mark [parent_mob.p_their()] aura." - if(get_kindred_splat(parent_mob)) - var/mob/living/carbon/human/lick = parent_mob - var/datum/st_stat/morality_path/morality/stat_morality = lick.storyteller_stats[STAT_MORALITY] - if(!stat_morality.morality_path.alignment == MORALITY_HUMANITY) // non-humanity licks have standard kindred auras that give them away - examine_message += "[parent_mob.p_Their()] aura colors appear pale." + if(isavatar(parent_mob) || isobserver(parent_mob)) examine_message += "[parent_mob.p_Their()] aura is weak and intermittent, fading in and out." @@ -179,6 +179,14 @@ aura_smoke.blend_mode = 2 aura_smoke.add_filter("particle_blur", 1, gauss_blur_filter(8)) var/mutable_appearance/aura_appearance = mutable_appearance('modular_darkpack/modules/powers/icons/auras.dmi', "aura", ABOVE_MOB_LAYER, parent_mob, ABOVE_GAME_PLANE) + // high humanity kindred OR kindred with blush of health avoid getting the still heart. in auspex, their hearts will instead show like humans; beating! + if(get_kindred_splat(parent_mob)) + var/mob/living/carbon/human/lick = parent_mob + var/datum/st_stat/morality_path/morality/stat_morality = lick?.storyteller_stats[STAT_MORALITY] + if((stat_morality?.morality_path?.alignment != MORALITY_HUMANITY || stat_morality?.get_score() < 5) && !HAS_TRAIT(parent_mob, TRAIT_BLUSH_OF_HEALTH)) + aura_appearance = mutable_appearance('modular_darkpack/modules/powers/icons/auras.dmi', "aura_dead", ABOVE_MOB_LAYER, parent_mob, ABOVE_GAME_PLANE) + if(parent_mob.stat == DEAD) + aura_appearance = mutable_appearance('modular_darkpack/modules/powers/icons/auras.dmi', "aura_dead", ABOVE_MOB_LAYER, parent_mob, ABOVE_GAME_PLANE) update_aura_colors(aura_appearance, holder) update_aura_overlays(aura_appearance, holder) update_aura_filters(aura_appearance, holder) @@ -206,13 +214,10 @@ holder.color = null var/mob/parent_mob = parent - if(HAS_TRAIT(parent, TRAIT_PALE_AURA) && !HAS_TRAIT(parent, TRAIT_DECEPTIVE_AURA) && output_color) - var/mob/living/carbon/human/lick = parent_mob - var/datum/st_stat/morality_path/morality/stat_morality = lick.storyteller_stats[STAT_MORALITY] - if(!stat_morality?.morality_path.alignment == MORALITY_HUMANITY) // non-humanity licks have standard kindred auras that give them away - var/list/hsv_color_value = rgb2hsv(output_color) - hsv_color_value[2] = hsv_color_value[2] * 0.7 // Reduce saturation for kindred - aura_appearance.color = hsv2rgb(hsv_color_value) + if(output_color && has_pale_aura(parent_mob)) + var/list/hsv_color_value = rgb2hsv(output_color) + hsv_color_value[2] = hsv_color_value[2] * 0.7 // Reduce saturation for kindred + aura_appearance.color = hsv2rgb(hsv_color_value) if(HAS_TRAIT(parent_mob, TRAIT_FRENETIC_AURA)) var/list/hsv_color_value = rgb2hsv(aura_appearance.color || "#ffffff") @@ -232,6 +237,7 @@ aura_glow_image.plane = ABOVE_LIGHTING_PLANE aura_glow_image.add_filter("ambient_blur", 1, gauss_blur_filter(12)) aura_glow_image.color = aura_appearance.color + aura_glow_image.icon_state = aura_appearance.icon_state || "aura" aura_glow_image.alpha = 20 holder.vis_contents += aura_glow_image @@ -284,7 +290,7 @@ static_image.alpha = 150 holder.vis_contents += static_image - if(!HAS_TRAIT(parent, TRAIT_PALE_AURA) && get_ghoul_splat(parent_mob)) + if(has_pale_blotches(parent_mob)) var/list/hsv_color_value = rgb2hsv(aura_appearance.color) hsv_color_value[2] = hsv_color_value[2] * 0.7 // Reduce saturation for ghouls aura_smoke_image.color = hsv2rgb(hsv_color_value) @@ -309,3 +315,18 @@ remove_wibbly_filters(holder) apply_wibbly_filters(holder) holder.add_filter("aura_glow", 1, gauss_blur_filter(2)) + +/datum/component/aura/proc/has_pale_aura(mob/parent_mob) + if(HAS_TRAIT(parent, TRAIT_PALE_AURA) && !HAS_TRAIT(parent, TRAIT_DECEPTIVE_AURA)) + if(get_kindred_splat(parent_mob)) + var/mob/living/carbon/human/lick = parent_mob + var/datum/st_stat/morality_path/morality/stat_morality = lick.storyteller_stats[STAT_MORALITY] + var/alignment = stat_morality?.morality_path?.alignment + if(alignment != MORALITY_HUMANITY) // non-humanity licks have standard kindred auras that give them away // Also catches a null value. + return TRUE + + return TRUE + +/datum/component/aura/proc/has_pale_blotches(mob/parent_mob) + if(!HAS_TRAIT(parent_mob, TRAIT_PALE_AURA) && get_ghoul_splat(parent_mob)) + return TRUE diff --git a/modular_darkpack/modules/powers/code/discipline/auspex/auspex.dm b/modular_darkpack/modules/powers/code/discipline/auspex/auspex.dm index bfa5eebab85a..61560dd4f30f 100644 --- a/modular_darkpack/modules/powers/code/discipline/auspex/auspex.dm +++ b/modular_darkpack/modules/powers/code/discipline/auspex/auspex.dm @@ -135,7 +135,7 @@ var/datum/atom_hud/data/auspex_aura/target_hud = GLOB.huds[DATA_HUD_AUSPEX_AURAS] target_hud.show_to(owner) - var/list/heard = orange(DEFAULT_MESSAGE_RANGE, owner) + var/list/heard = orange(DEFAULT_SIGHT_DISTANCE, owner) for(var/mob/living/hearer in heard) if(!HAS_TRAIT(src, TRAIT_FORCED_EMOTION)) hearer.apply_status_effect(/datum/status_effect/question_emotion) diff --git a/modular_darkpack/modules/powers/code/discipline/auspex/heartbeat_sensing_component.dm b/modular_darkpack/modules/powers/code/discipline/auspex/heartbeat_sensing_component.dm index f35a3be780ce..b9b83db738a8 100644 --- a/modular_darkpack/modules/powers/code/discipline/auspex/heartbeat_sensing_component.dm +++ b/modular_darkpack/modules/powers/code/discipline/auspex/heartbeat_sensing_component.dm @@ -44,7 +44,7 @@ receivers -= list(echolocate_receiver) return ..() -/datum/component/heartbeat_sensing/process() +/datum/component/heartbeat_sensing/process(seconds_per_tick) var/mob/living/parent_mob = parent if(parent_mob.stat == DEAD) return diff --git a/modular_darkpack/modules/powers/code/discipline/daimonion/daimonion_hallucination.dm b/modular_darkpack/modules/powers/code/discipline/daimonion/daimonion_hallucination.dm index 60f787b29e3d..129ad9a7fe3d 100644 --- a/modular_darkpack/modules/powers/code/discipline/daimonion/daimonion_hallucination.dm +++ b/modular_darkpack/modules/powers/code/discipline/daimonion/daimonion_hallucination.dm @@ -23,7 +23,7 @@ target = null return ..() -/obj/effect/client_image_holder/baali_demon/process() +/obj/effect/client_image_holder/baali_demon/process(seconds_per_tick) if(QDELETED(target) || target.stat == DEAD) qdel(src) return diff --git a/modular_darkpack/modules/powers/code/discipline/dementation.dm b/modular_darkpack/modules/powers/code/discipline/dementation.dm index 198e1e29bd71..08b1d99d8b2a 100644 --- a/modular_darkpack/modules/powers/code/discipline/dementation.dm +++ b/modular_darkpack/modules/powers/code/discipline/dementation.dm @@ -72,7 +72,7 @@ Presence powers, etc /datum/discipline_power/dementation/passion/activate(mob/living/carbon/human/target) . = ..() target.remove_overlay(MUTATIONS_LAYER) - var/mutable_appearance/dementation_overlay = mutable_appearance('modular_darkpack/modules/deprecated/icons/icons.dmi', "dementation", -MUTATIONS_LAYER) + var/mutable_appearance/dementation_overlay = mutable_appearance('modular_darkpack/modules/powers/icons/dementation.dmi', "dementation", -MUTATIONS_LAYER) dementation_overlay.pixel_z = 1 target.overlays_standing[MUTATIONS_LAYER] = dementation_overlay target.apply_overlay(MUTATIONS_LAYER) @@ -155,7 +155,7 @@ pools for a turn or two after the manifestation. /datum/discipline_power/dementation/the_haunting/activate(mob/living/carbon/human/target) . = ..() target.remove_overlay(MUTATIONS_LAYER) - var/mutable_appearance/dementation_overlay = mutable_appearance('modular_darkpack/modules/deprecated/icons/icons.dmi', "dementation", -MUTATIONS_LAYER) + var/mutable_appearance/dementation_overlay = mutable_appearance('modular_darkpack/modules/powers/icons/dementation.dmi', "dementation", -MUTATIONS_LAYER) dementation_overlay.pixel_z = 1 target.overlays_standing[MUTATIONS_LAYER] = dementation_overlay target.apply_overlay(MUTATIONS_LAYER) @@ -338,7 +338,7 @@ frenzy or Rötschreck response is automatic. var/successes -//DARKPACK TODO - frenzy. this power requires it +// DARKPACK TODO - frenzy. this power requires it /* Affected victims fly immediately into frenzy or a @@ -386,7 +386,7 @@ frenzy or Rötschreck response is automatic. GLOB.move_manager.move_away(moving = chosen, chasing = owner, max_dist = 10, timeout = (duration_length * 2), delay = chosen.cached_multiplicative_slowdown) chosen.remove_overlay(MUTATIONS_LAYER) - var/mutable_appearance/dementation_overlay = mutable_appearance('modular_darkpack/modules/deprecated/icons/icons.dmi', "dementation", -MUTATIONS_LAYER) + var/mutable_appearance/dementation_overlay = mutable_appearance('modular_darkpack/modules/powers/icons/dementation.dmi', "dementation", -MUTATIONS_LAYER) dementation_overlay.pixel_z = 1 chosen.overlays_standing[MUTATIONS_LAYER] = dementation_overlay chosen.apply_overlay(MUTATIONS_LAYER) @@ -455,7 +455,7 @@ determines the duration. . = ..() attack_target = target attack_target.remove_overlay(MUTATIONS_LAYER) - var/mutable_appearance/dementation_overlay = mutable_appearance('modular_darkpack/modules/deprecated/icons/icons.dmi', "dementation", -MUTATIONS_LAYER) + var/mutable_appearance/dementation_overlay = mutable_appearance('modular_darkpack/modules/powers/icons/dementation.dmi', "dementation", -MUTATIONS_LAYER) dementation_overlay.pixel_z = 1 attack_target.overlays_standing[MUTATIONS_LAYER] = dementation_overlay attack_target.apply_overlay(MUTATIONS_LAYER) diff --git a/modular_darkpack/modules/powers/code/discipline/dominate/dominate.dm b/modular_darkpack/modules/powers/code/discipline/dominate/dominate.dm index d697d3379d11..ffa34066a7dc 100644 --- a/modular_darkpack/modules/powers/code/discipline/dominate/dominate.dm +++ b/modular_darkpack/modules/powers/code/discipline/dominate/dominate.dm @@ -476,7 +476,7 @@ /datum/discipline_power/dominate/possession/pre_activation_checks(mob/living/carbon/human/target) - if(get_kindred_splat(target) || get_garou_splat(target)) //DARKPACK TODO: reimplement Kuei-Jin + if(get_kindred_splat(target) || get_garou_splat(target)) // DARKPACK TODO: reimplement Kuei-Jin to_chat(owner, span_warning("You cannot possess [get_kindred_splat(target) ? "another kindred" : "this creature - the beast within resists"]!")) return FALSE diff --git a/modular_darkpack/modules/powers/code/discipline/obfuscate/obfuscate.dm b/modular_darkpack/modules/powers/code/discipline/obfuscate/obfuscate.dm index 4fa1b1d240cf..e5498e13b7dd 100644 --- a/modular_darkpack/modules/powers/code/discipline/obfuscate/obfuscate.dm +++ b/modular_darkpack/modules/powers/code/discipline/obfuscate/obfuscate.dm @@ -269,9 +269,9 @@ 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, MAGIC_TRAIT) + 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, MAGIC_TRAIT) + REMOVE_TRAIT(owner, TRAIT_MASQUERADE_VIOLATING_EYES, CLAN_TRAIT) owner.set_body_sprite(SPECIES_HUMAN, TRUE, TRUE) owner.updateappearance(mutcolor_update = TRUE) @@ -287,9 +287,9 @@ 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, MAGIC_TRAIT) + 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, MAGIC_TRAIT) + ADD_TRAIT(owner, TRAIT_MASQUERADE_VIOLATING_EYES, CLAN_TRAIT) owner.set_body_sprite(original_sprite, original_sprite_greyscale, TRUE) owner.updateappearance(mutcolor_update = TRUE) diff --git a/modular_darkpack/modules/powers/code/discipline/obtenebration/obtenebration.dm b/modular_darkpack/modules/powers/code/discipline/obtenebration/obtenebration.dm index 5f9de064b498..f08828f82ca8 100644 --- a/modular_darkpack/modules/powers/code/discipline/obtenebration/obtenebration.dm +++ b/modular_darkpack/modules/powers/code/discipline/obtenebration/obtenebration.dm @@ -119,6 +119,7 @@ cooldown_length = 1 TURNS var/list/active_tentacles = list() + var/aggro_mode = "Aggressive" /datum/discipline_power/obtenebration/arms_of_the_abyss/activate(atom/target) . = ..() @@ -137,7 +138,7 @@ var/has_action = !!(locate(/datum/action/aggro_mode) in owner.actions) if(!has_action) - var/datum/action/aggro_mode/A = new() + var/datum/action/aggro_mode/A = new(src) A.Grant(owner) // Create tentacles based on successes @@ -155,8 +156,9 @@ if(open_turfs.len) new_tentacle = new /mob/living/basic/abyss_tentacle(pick(open_turfs), owner) - // if we ended up making a new tentacle add it to our list + // if we ended up making a new tentacle add it to our list and inherit set aggro_mode if(new_tentacle) + new_tentacle.aggro_mode = aggro_mode active_tentacles += new_tentacle else to_chat(usr, span_warning("The area is too bright for the shadows to manifest!")) @@ -284,8 +286,8 @@ ADD_TRAIT(owner, TRAIT_NOBLOOD, MAGIC_TRAIT) ADD_TRAIT(owner, TRAIT_PACIFISM, MAGIC_TRAIT) // Can't physically attack while in this form //ADD_TRAIT(owner, TRAIT_MOVE_FLYING, MAGIC_TRAIT) // Flying to simulate being unaffected by gravity - ADD_TRAIT(owner, TRAIT_PASSDOOR, MAGIC_TRAIT) // Trait to phase through doors - owner.pass_flags |= PASSTABLE + owner.pass_flags |= (PASSDOORS | PASSTABLE | PASSSTRUCTURE) // Phase through doors & fences / tables / machines, dumpsters, barrels, lampposts + saved_density = owner.density owner.density = FALSE @@ -305,8 +307,7 @@ REMOVE_TRAIT(owner, TRAIT_NOBLOOD, MAGIC_TRAIT) REMOVE_TRAIT(owner, TRAIT_PACIFISM, MAGIC_TRAIT) //REMOVE_TRAIT(owner, TRAIT_MOVE_FLYING, MAGIC_TRAIT) - REMOVE_TRAIT(owner, TRAIT_PASSDOOR, MAGIC_TRAIT) - owner.pass_flags &= ~PASSTABLE + owner.pass_flags &= ~(PASSDOORS | PASSTABLE | PASSSTRUCTURE) owner.density = saved_density @@ -319,6 +320,12 @@ button_icon = 'icons/hud/screen_glass.dmi' button_icon_state = "harm" var/current_mode = "Aggressive" + var/datum/discipline_power/obtenebration/arms_of_the_abyss/abyss_power + +/datum/action/aggro_mode/New(Target) + . = ..() + abyss_power = Target + current_mode = abyss_power.aggro_mode /datum/action/aggro_mode/Trigger(mob/clicker, trigger_flags) . = ..() @@ -342,13 +349,10 @@ var/select = tgui_input_list(tentacle_owner, "Select tentacle behaviour", "Tentacle Mode", options) if(!select || !tentacle_owner) return - + if(!abyss_power) + return + abyss_power.aggro_mode = select current_mode = select - tentacle_owner.tentacle_aggro_mode = select - - // need to access the discipline_power so we can grab the list - var/datum/splat/vampire/vampire = get_splat_with_discipline(tentacle_owner) - var/datum/discipline_power/obtenebration/arms_of_the_abyss/abyss_power = vampire?.get_discipline_power(/datum/discipline_power/obtenebration/arms_of_the_abyss) var/tentacles = 0 for(var/mob/living/basic/abyss_tentacle/T in abyss_power?.active_tentacles) diff --git a/modular_darkpack/modules/powers/code/discipline/potence/potence.dm b/modular_darkpack/modules/powers/code/discipline/potence/potence.dm index 28b85b44c42d..11e318c84ce1 100644 --- a/modular_darkpack/modules/powers/code/discipline/potence/potence.dm +++ b/modular_darkpack/modules/powers/code/discipline/potence/potence.dm @@ -7,10 +7,35 @@ /datum/discipline_power/potence name = "Potence power name" desc = "Potence power description" + abstract_type = /datum/discipline_power/potence activate_sound = 'modular_darkpack/modules/powers/sounds/potence_activate.ogg' deactivate_sound = 'modular_darkpack/modules/powers/sounds/potence_deactivate.ogg' + check_flags = DISC_CHECK_CAPABLE + + toggled = TRUE + duration_length = 1 TURNS + +/datum/discipline_power/potence/post_gain() + owner.st_add_stat_mod(STAT_STRENGTH, level, "Potence") + +/datum/discipline_power/potence/post_loss() + owner.st_remove_stat_mod(STAT_STRENGTH, "Potence") + +/datum/discipline_power/potence/activate() + . = ..() + + if(level <= 5) + var/max_level = min(discipline.level, 5) + owner.apply_status_effect(/datum/status_effect/potence, max_level) + +/datum/discipline_power/potence/deactivate() + . = ..() + if(level <= 5) + owner.remove_status_effect(/datum/status_effect/potence) + + //POTENCE 1 /datum/discipline_power/potence/one name = "Potence 1" @@ -18,11 +43,6 @@ level = 1 - check_flags = DISC_CHECK_CAPABLE - - toggled = TRUE - duration_length = 2 TURNS - grouped_powers = list( /datum/discipline_power/potence/two, /datum/discipline_power/potence/three, @@ -30,18 +50,6 @@ /datum/discipline_power/potence/five ) -/datum/discipline_power/potence/one/activate() - . = ..() - - owner.apply_status_effect(/datum/status_effect/potence/one) - -/datum/discipline_power/potence/one/deactivate() - . = ..() - - owner.remove_status_effect(/datum/status_effect/potence/one) - -/datum/discipline_power/potence/one/post_gain() - owner.st_add_stat_mod(STAT_STRENGTH, 1, "Potence") //POTENCE 2 /datum/discipline_power/potence/two @@ -50,11 +58,6 @@ level = 2 - check_flags = DISC_CHECK_CAPABLE - - toggled = TRUE - duration_length = 2 TURNS - grouped_powers = list( /datum/discipline_power/potence/one, /datum/discipline_power/potence/three, @@ -62,16 +65,6 @@ /datum/discipline_power/potence/five ) -/datum/discipline_power/potence/two/activate() - . = ..() - owner.apply_status_effect(/datum/status_effect/potence/two) - -/datum/discipline_power/potence/two/deactivate() - . = ..() - owner.remove_status_effect(/datum/status_effect/potence/two) - -/datum/discipline_power/potence/two/post_gain() - owner.st_add_stat_mod(STAT_STRENGTH, 2, "Potence") //POTENCE 3 /datum/discipline_power/potence/three @@ -80,11 +73,6 @@ level = 3 - check_flags = DISC_CHECK_CAPABLE - - toggled = TRUE - duration_length = 2 TURNS - grouped_powers = list( /datum/discipline_power/potence/one, /datum/discipline_power/potence/two, @@ -92,16 +80,6 @@ /datum/discipline_power/potence/five ) -/datum/discipline_power/potence/three/activate() - . = ..() - owner.apply_status_effect(/datum/status_effect/potence/three) - -/datum/discipline_power/potence/three/deactivate() - . = ..() - owner.remove_status_effect(/datum/status_effect/potence/three) - -/datum/discipline_power/potence/three/post_gain() - owner.st_add_stat_mod(STAT_STRENGTH, 3, "Potence") //POTENCE 4 /datum/discipline_power/potence/four @@ -110,11 +88,6 @@ level = 4 - check_flags = DISC_CHECK_CAPABLE - - toggled = TRUE - duration_length = 2 TURNS - grouped_powers = list( /datum/discipline_power/potence/one, /datum/discipline_power/potence/two, @@ -122,16 +95,6 @@ /datum/discipline_power/potence/five ) -/datum/discipline_power/potence/four/activate() - . = ..() - owner.apply_status_effect(/datum/status_effect/potence/four) - -/datum/discipline_power/potence/four/deactivate() - . = ..() - owner.remove_status_effect(/datum/status_effect/potence/four) - -/datum/discipline_power/potence/four/post_gain() - owner.st_add_stat_mod(STAT_STRENGTH, 4, "Potence") //POTENCE 5 /datum/discipline_power/potence/five @@ -140,25 +103,9 @@ level = 5 - check_flags = DISC_CHECK_CAPABLE - - toggled = TRUE - duration_length = 2 TURNS - grouped_powers = list( /datum/discipline_power/potence/one, /datum/discipline_power/potence/two, /datum/discipline_power/potence/three, /datum/discipline_power/potence/four ) - -/datum/discipline_power/potence/five/activate() - . = ..() - owner.apply_status_effect(/datum/status_effect/potence/five) - -/datum/discipline_power/potence/five/deactivate() - . = ..() - owner.remove_status_effect(/datum/status_effect/potence/five) - -/datum/discipline_power/potence/five/post_gain() - owner.st_add_stat_mod(STAT_STRENGTH, 5, "Potence") diff --git a/modular_darkpack/modules/powers/code/discipline/potence/potence_status_effect.dm b/modular_darkpack/modules/powers/code/discipline/potence/potence_status_effect.dm index 8037974b58ff..6b8e073a45ef 100644 --- a/modular_darkpack/modules/powers/code/discipline/potence/potence_status_effect.dm +++ b/modular_darkpack/modules/powers/code/discipline/potence/potence_status_effect.dm @@ -3,15 +3,22 @@ status_type = STATUS_EFFECT_REPLACE alert_type = null - var/level + var/level = 1 var/datum/component/tackler/tackler var/list/obj/item/bodypart/affected_bodyparts +/datum/status_effect/potence/on_creation(mob/living/new_owner, level) + src.level = level + . = ..() + /datum/status_effect/potence/on_apply() . = ..() if (!.) return + owner.st_remove_stat_mod(STAT_STRENGTH, "Potence") + owner.st_add_auto_successes(STAT_STRENGTH, level, "Potence") + if (iscarbon(owner)) var/mob/living/carbon/carbon_owner = owner for (var/obj/item/bodypart/limb as anything in carbon_owner.bodyparts) @@ -19,15 +26,9 @@ continue LAZYADD(affected_bodyparts, limb) - - limb.unarmed_damage_low += 8 * level - limb.unarmed_damage_high += 8 * level limb.unarmed_attack_sound = 'modular_darkpack/modules/powers/sounds/heavypunch.ogg' else if (isbasicmob(owner)) var/mob/living/basic/basic_owner = owner - - basic_owner.melee_damage_lower += 8 * level - basic_owner.melee_damage_upper += 8 * level basic_owner.attack_sound = 'modular_darkpack/modules/powers/sounds/heavypunch.ogg' RegisterSignal(owner, COMSIG_MOB_ITEM_ATTACK, PROC_REF(apply_melee_modifier)) @@ -37,16 +38,14 @@ /datum/status_effect/potence/on_remove() . = ..() + owner.st_remove_auto_successes(STAT_STRENGTH, "Potence") + owner.st_add_stat_mod(STAT_STRENGTH, level, "Potence") + if (iscarbon(owner)) for (var/obj/item/bodypart/limb in affected_bodyparts) - limb.unarmed_damage_low -= 8 * level - limb.unarmed_damage_high -= 8 * level limb.unarmed_attack_sound = initial(limb.unarmed_attack_sound) else if (isbasicmob(owner)) var/mob/living/basic/basic_owner = owner - - basic_owner.melee_damage_lower -= 8 * level - basic_owner.melee_damage_upper -= 8 * level basic_owner.attack_sound = initial(basic_owner.attack_sound) LAZYCLEARLIST(affected_bodyparts) @@ -55,23 +54,7 @@ qdel(tackler) +// This is bad and bypasses it being a strength dice thing. Remove the second melee has any usage of strength for damage /datum/status_effect/potence/proc/apply_melee_modifier(mob/source, mob/M, mob/user, list/modifiers, list/attack_modifiers) SIGNAL_HANDLER - - attack_modifiers[FORCE_MULTIPLIER] += 0.4 * level - -// Status effect ranks -/datum/status_effect/potence/one - level = 1 - -/datum/status_effect/potence/two - level = 2 - -/datum/status_effect/potence/three - level = 3 - -/datum/status_effect/potence/four - level = 4 - -/datum/status_effect/potence/five - level = 5 + MODIFY_ATTACK_FORCE_MULTIPLIER(attack_modifiers, 1 + (0.4 * level)) 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 c691fce46dce..df92bd580470 100644 --- a/modular_darkpack/modules/powers/code/discipline/protean/beast_form.dm +++ b/modular_darkpack/modules/powers/code/discipline/protean/beast_form.dm @@ -55,7 +55,7 @@ icon_state = "gangrel_f" icon_living = "gangrel_f" mob_biotypes = MOB_ORGANIC|MOB_HUMANOID - mob_size = MOB_SIZE_HUGE + mob_size = MOB_SIZE_LARGE speed = -0.4 maxHealth = 275 health = 275 diff --git a/modular_darkpack/modules/powers/code/discipline/serpentis.dm b/modular_darkpack/modules/powers/code/discipline/serpentis.dm index 8c5ddc6b9bd6..937a2e6e2ecf 100644 --- a/modular_darkpack/modules/powers/code/discipline/serpentis.dm +++ b/modular_darkpack/modules/powers/code/discipline/serpentis.dm @@ -28,9 +28,31 @@ violates_masquerade = TRUE multi_activate = TRUE - duration_length = 0.5 SECONDS + duration_length = 5 SECONDS cooldown_length = 5 SECONDS +/datum/discipline_power/serpentis/the_eyes_of_the_serpent/proc/immobilize_target(mob/living/target, duration = 5 SECONDS) + ADD_TRAIT(target, TRAIT_IMMOBILIZED, DISCIPLINE_TRAIT(type)) + RegisterSignals(target, list(COMSIG_ATOM_ATTACKBY, COMSIG_MOB_ITEM_ATTACK, COMSIG_PROJECTILE_PREHIT), PROC_REF(on_target_attacked)) + if(do_after(owner, duration, target)) + release_target(target) + return TRUE + else + release_target(target) + return FALSE + +/datum/discipline_power/serpentis/the_eyes_of_the_serpent/proc/on_target_attacked(datum/source) + SIGNAL_HANDLER + var/mob/living/target = source + release_target(target) + to_chat(owner, span_warning("Your concentration is broken as [target] is attacked!")) + to_chat(target, span_warning("The mental hold on you breaks as you're attacked!")) + +/datum/discipline_power/serpentis/the_eyes_of_the_serpent/proc/release_target(mob/living/target) + UnregisterSignal(target, list(COMSIG_ATOM_ATTACKBY, COMSIG_MOB_ITEM_ATTACK, COMSIG_PROJECTILE_PREHIT)) + to_chat(target, span_danger("You feel your concentration become your own once more, able to look away from the commanding gaze.")) + REMOVE_TRAIT(target, TRAIT_IMMOBILIZED, DISCIPLINE_TRAIT(type)) + /datum/discipline_power/serpentis/the_eyes_of_the_serpent/can_activate_untargeted(alert) . = ..() if (owner?.is_eyes_covered()) @@ -41,7 +63,6 @@ /datum/discipline_power/serpentis/the_eyes_of_the_serpent/activate(mob/living/target) . = ..() - target.Immobilize(2 SECONDS) target.face_atom(owner) target.visible_message(span_hypnophrase("[owner] hypnotizes [target] with [owner.p_their()] eyes!"), span_warning("[owner] hypnotizes you! Their words seem to become more convincing and hypnotic...")) if(ishuman(target)) @@ -50,9 +71,11 @@ var/mutable_appearance/serpentis_overlay = mutable_appearance('modular_darkpack/modules/powers/icons/serpentis.dmi', "serpentis", -MUTATIONS_LAYER) H.overlays_standing[MUTATIONS_LAYER] = serpentis_overlay H.apply_overlay(MUTATIONS_LAYER) + immobilize_target(target) /datum/discipline_power/serpentis/the_eyes_of_the_serpent/deactivate(mob/living/target) . = ..() + release_target(target) if (ishuman(target)) var/mob/living/carbon/human/human_target = target human_target.remove_overlay(MUTATIONS_LAYER) diff --git a/modular_darkpack/modules/powers/code/discipline/thaumaturgy/path_of_blood.dm b/modular_darkpack/modules/powers/code/discipline/thaumaturgy/path_of_blood.dm index 90c78bcc3fc7..57439072b188 100644 --- a/modular_darkpack/modules/powers/code/discipline/thaumaturgy/path_of_blood.dm +++ b/modular_darkpack/modules/powers/code/discipline/thaumaturgy/path_of_blood.dm @@ -239,7 +239,7 @@ level = 4 - vitae_cost = 0 //Since 1 success should give one vitae, balancing. + vitae_cost = 1 effect_sound = 'sound/effects/magic/enter_blood.ogg' range = 8 // Within 50 feet (15 meters). check_flags = DISC_CHECK_CONSCIOUS | DISC_CHECK_CAPABLE | DISC_CHECK_TORPORED | DISC_CHECK_SEE | DISC_CHECK_DIRECT_SEE // The subject must be visible to the thaumaturge @@ -267,6 +267,8 @@ var/blood_gained = blood_taken * max(1, target.bloodquality-1) owner.adjust_blood_pool(blood_gained) else + if(!target.bloodpool || !target.blood_volume) + return var/blood_coefficient = (5 / target.bloodpool) // DARKPACK TODO - reimplement quirks -- potent blood /* @@ -277,6 +279,7 @@ target.blood_volume = max (0, (target.blood_volume - (blood_taken * (70*blood_coefficient)))) var/blood_gained = blood_taken * max(1, target.bloodquality - 1) + target.adjust_blood_pool(-blood_gained) owner.adjust_blood_pool(blood_gained) //------------------------------------------------------------------------------------------------ @@ -287,7 +290,7 @@ desc = "Boil your target's blood in their body, killing almost anyone." level = 5 - range = 1 //The Kindred must touch the subject + range = 1 check_flags = DISC_CHECK_FREE_HAND | DISC_CHECK_CONSCIOUS | DISC_CHECK_CAPABLE | DISC_CHECK_TORPORED target_type = TARGET_MOB | TARGET_SELF aggravating = TRUE diff --git a/modular_darkpack/modules/powers/code/discipline/thaumaturgy/paths/levinbolt.dm b/modular_darkpack/modules/powers/code/discipline/thaumaturgy/paths/levinbolt.dm index aef105534047..07ecc504117b 100644 --- a/modular_darkpack/modules/powers/code/discipline/thaumaturgy/paths/levinbolt.dm +++ b/modular_darkpack/modules/powers/code/discipline/thaumaturgy/paths/levinbolt.dm @@ -106,8 +106,8 @@ var/obj/fusebox/fuse = target // Break the fusebox - fuse.damaged += 101 - fuse.check_damage(owner, TRUE) + fuse.take_damage(101) + fuse.power_off() var/datum/effect_system/basic/spark_spread/spark_system = new(get_turf(target), 5, 1) spark_system.start() diff --git a/modular_darkpack/modules/powers/code/discipline/valeren.dm b/modular_darkpack/modules/powers/code/discipline/valeren.dm index 16765801fbcf..239c3a7e2553 100644 --- a/modular_darkpack/modules/powers/code/discipline/valeren.dm +++ b/modular_darkpack/modules/powers/code/discipline/valeren.dm @@ -472,13 +472,9 @@ if (!istype(limb, /obj/item/bodypart/arm) && !istype(limb, /obj/item/bodypart/leg)) continue LAZYADD(affected_bodyparts, limb) - limb.unarmed_damage_low += 8 * bonus - limb.unarmed_damage_high += 8 * bonus limb.unarmed_attack_sound = pick(list('sound/items/weapons/cqchit2.ogg', 'sound/items/weapons/cqchit1.ogg')) // i know kung fu else if (isbasicmob(owner)) var/mob/living/basic/basic_owner = owner - basic_owner.melee_damage_lower += 8 * bonus - basic_owner.melee_damage_upper += 8 * bonus basic_owner.attack_sound = pick(list('sound/items/weapons/cqchit2.ogg', 'sound/items/weapons/cqchit1.ogg')) RegisterSignal(owner, COMSIG_MOB_ITEM_ATTACK, PROC_REF(apply_melee_modifier)) tackler = owner.AddComponent(/datum/component/tackler, stamina_cost=0, base_knockdown = 1 SECONDS, range = 2 + bonus, speed = 1, skill_mod = 0, min_distance = 0) @@ -490,13 +486,9 @@ owner.st_remove_stat_mod(STAT_BRAWL, bonus, "vengeance_of_samiel") if (iscarbon(owner)) for (var/obj/item/bodypart/limb in affected_bodyparts) - limb.unarmed_damage_low -= 8 * bonus - limb.unarmed_damage_high -= 8 * bonus limb.unarmed_attack_sound = initial(limb.unarmed_attack_sound) else if (isbasicmob(owner)) var/mob/living/basic/basic_owner = owner - basic_owner.melee_damage_lower -= 8 * bonus - basic_owner.melee_damage_upper -= 8 * bonus basic_owner.attack_sound = initial(basic_owner.attack_sound) LAZYCLEARLIST(affected_bodyparts) UnregisterSignal(owner, COMSIG_MOB_ITEM_ATTACK) @@ -504,4 +496,4 @@ /datum/status_effect/vengeance_of_samiel/proc/apply_melee_modifier(mob/source, mob/M, mob/user, list/modifiers, list/attack_modifiers) SIGNAL_HANDLER - attack_modifiers[FORCE_MULTIPLIER] += 0.4 * bonus + MODIFY_ATTACK_FORCE_MULTIPLIER(attack_modifiers, 1 + (0.4 * bonus)) diff --git a/modular_darkpack/modules/powers/code/discipline/vicissitude/blood_form.dm b/modular_darkpack/modules/powers/code/discipline/vicissitude/blood_form.dm index 670e11686028..693816759640 100644 --- a/modular_darkpack/modules/powers/code/discipline/vicissitude/blood_form.dm +++ b/modular_darkpack/modules/powers/code/discipline/vicissitude/blood_form.dm @@ -1,7 +1,7 @@ #define SPECIES_BLOODFORM "bloodform" /datum/species/tzimisce_blood_form - // Entirely alien beings that seem to be made entirely out of gel. They have three eyes and a skeleton visible within them. + // A living puddle of Vitae, immune to Bashing and Lethal damage. name = "\improper Bloodform" plural_form = "Bloodforms" id = SPECIES_BLOODFORM @@ -11,7 +11,18 @@ TRAIT_MUTE, TRAIT_NO_EYE_CONTACT, TRAIT_MUTANT_COLORS, - ) + TRAIT_NEVER_WOUNDED, + TRAIT_STAKE_IMMUNE, + TRAIT_PIERCEIMMUNE, + TRAIT_NOBREATH, + TRAIT_PACIFISM, + TRAIT_PUSHIMMUNE, + TRAIT_MARTIAL_ARTS_IMMUNE, + TRAIT_NO_SLIP_ALL, + TRAIT_PULL_BLOCKED, + TRAIT_MASQUERADE_VIOLATING_FACE, + TRAIT_NO_CUFF, + ) //Made of blood and can't be staked or wounded, but also has no actual ability to attack, per-se. exotic_bloodtype = BLOOD_TYPE_KINDRED changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT bodypart_overrides = list( @@ -37,11 +48,13 @@ regenerate_limbs = new regenerate_limbs.Grant(new_jellyperson) new_jellyperson.AddElement(/datum/element/soft_landing) + new_jellyperson.pass_flags = PASSTABLE | PASSMOB | PASSDOORS //A moving pool of blood, it can slip through and around most things. /datum/species/tzimisce_blood_form/on_species_loss(mob/living/carbon/former_jellyperson, datum/species/new_species, pref_load) if(regenerate_limbs) regenerate_limbs.Remove(former_jellyperson) former_jellyperson.RemoveElement(/datum/element/soft_landing) + former_jellyperson.pass_flags = NONE //Resets it to default for humans after loss. return ..() /datum/action/innate/regenerate_blood_limbs @@ -95,6 +108,7 @@ head_flags = HEAD_EYECOLOR | HEAD_EYESPRITES | HEAD_HAIR | HEAD_FACIAL_HAIR butcher_replacement = null is_dimorphic = FALSE + brute_modifier = 0 //Immune to non-burning, magical, or blood drinking damage. /obj/item/bodypart/chest/blood_form biological_state = (BIO_INORGANIC) @@ -102,6 +116,7 @@ dmg_overlay_type = null butcher_replacement = null is_dimorphic = TRUE + brute_modifier = 0 //Immune to non-burning, magical, or blood drinking damage. /obj/item/bodypart/chest/blood_form/get_butt_sprite() return icon('icons/mob/butts.dmi', BUTT_SPRITE_SLIME) @@ -112,6 +127,7 @@ dmg_overlay_type = null butcher_replacement = null is_dimorphic = FALSE + brute_modifier = 0 //Immune to non-burning, magical, or blood drinking damage. /obj/item/bodypart/arm/right/blood_form biological_state = (BIO_INORGANIC) @@ -119,6 +135,7 @@ dmg_overlay_type = null butcher_replacement = null is_dimorphic = FALSE + brute_modifier = 0 //Immune to non-burning, magical, or blood drinking damage. /obj/item/bodypart/leg/left/blood_form biological_state = (BIO_INORGANIC) @@ -126,6 +143,7 @@ dmg_overlay_type = null butcher_replacement = null is_dimorphic = FALSE + brute_modifier = 0 //Immune to non-burning, magical, or blood drinking damage. /obj/item/bodypart/leg/right/blood_form biological_state = (BIO_INORGANIC) @@ -133,6 +151,7 @@ dmg_overlay_type = null butcher_replacement = null is_dimorphic = FALSE + brute_modifier = 0 //Immune to non-burning, magical, or blood drinking damage. /// Organs /obj/item/organ/eyes/bloodform @@ -142,15 +161,21 @@ iris_overlay = null eye_color_left = "#990000a9" eye_color_right = "#990000a9" + organ_flags = ORGAN_HIDDEN | ORGAN_UNREMOVABLE //Shouldn't come up, but just in case someone tries surgery on Bloodform for some reason. + maxHealth = INFINITY //Pseudo-organs, shouldn't technically be damageable. /obj/item/organ/ears/bloodform name = "bloody ears" desc = "Development bug! Report this to github if you see this!" zone = BODY_ZONE_CHEST + organ_flags = ORGAN_HIDDEN | ORGAN_UNREMOVABLE //Shouldn't come up, but just in case someone tries surgery on Bloodform for some reason. + maxHealth = INFINITY //Pseudo-organs, shouldn't technically be damageable. /obj/item/organ/brain/bloodform name = "bloody... brain?" desc = "Development bug! Report this to github if you see this!" zone = BODY_ZONE_CHEST + organ_flags = ORGAN_HIDDEN | ORGAN_UNREMOVABLE //Shouldn't come up, but just in case someone tries surgery on Bloodform for some reason. + maxHealth = INFINITY //Pseudo-organs, shouldn't technically be damageable. #undef SPECIES_BLOODFORM diff --git a/modular_darkpack/modules/powers/code/discipline/vicissitude/vicissitude.dm b/modular_darkpack/modules/powers/code/discipline/vicissitude/vicissitude.dm index dabc53419709..91a1725a9746 100644 --- a/modular_darkpack/modules/powers/code/discipline/vicissitude/vicissitude.dm +++ b/modular_darkpack/modules/powers/code/discipline/vicissitude/vicissitude.dm @@ -8,6 +8,14 @@ clan_restricted = TRUE power_type = /datum/discipline_power/vicissitude +/datum/discipline/vicissitude/post_gain() + . = ..() + ADD_TRAIT(owner, TRAIT_SELF_SURGERY, /datum/discipline/vicissitude) //Allows people with Vicissitude to perform operations on themselves. + +/datum/discipline/vicissitude/post_loss() + . = ..() + REMOVE_TRAIT(owner, TRAIT_SELF_SURGERY, /datum/discipline/vicissitude) //Removes the trait if you lose Vicissitude. + /datum/discipline_power/vicissitude name = "Vicissitude power name" desc = "Vicissitude power description" @@ -19,6 +27,7 @@ shapeshift_ability = new(owner) shapeshift_ability.Grant(owner) + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /datum/discipline_power/vicissitude/malleable_visage @@ -168,7 +177,7 @@ desc = "Liquify into a shifting mass of sentient Vitae." level = 5 - check_flags = DISC_CHECK_CONSCIOUS | DISC_CHECK_CAPABLE | DISC_CHECK_FREE_HAND + check_flags = DISC_CHECK_CONSCIOUS | DISC_CHECK_CAPABLE target_type = NONE violates_masquerade = TRUE cooldown_length = 1 TURNS @@ -185,6 +194,7 @@ /datum/discipline_power/vicissitude/bloodform/activate() . = ..() owner.set_species(mrace = /datum/species/tzimisce_blood_form, icon_update = TRUE, pref_load = TRUE, replace_missing = FALSE) + owner.uncuff() //Avoids any issues with existing cuffs, and you can't handcuff a selectively solid pool of blood. /datum/discipline_power/vicissitude/bloodform/deactivate() . = ..() diff --git a/modular_darkpack/modules/powers/code/discipline_actions.dm b/modular_darkpack/modules/powers/code/discipline_actions.dm index bfa304a34d44..4e6d0af95f42 100644 --- a/modular_darkpack/modules/powers/code/discipline_actions.dm +++ b/modular_darkpack/modules/powers/code/discipline_actions.dm @@ -26,6 +26,10 @@ register_to_availability_signals() +/datum/action/discipline/Destroy() + QDEL_NULL(discipline) + return ..() + /datum/action/discipline/Remove(mob/owner) if(discipline) discipline.post_loss() @@ -49,7 +53,6 @@ SIGNAL_ADDTRAIT(TRAIT_PACIFISM), SIGNAL_REMOVETRAIT(TRAIT_PACIFISM), )) - QDEL_NULL(discipline) return ..() /datum/action/discipline/proc/register_to_availability_signals() diff --git a/modular_darkpack/modules/powers/code/discipline_pref_middleware.dm b/modular_darkpack/modules/powers/code/discipline_pref_middleware.dm index c883d7aff07e..c6359f727e9e 100644 --- a/modular_darkpack/modules/powers/code/discipline_pref_middleware.dm +++ b/modular_darkpack/modules/powers/code/discipline_pref_middleware.dm @@ -299,7 +299,7 @@ var/global/list/RARE_DISCIPLINE_TYPES = list( var/discipline = text2path(disc_path) if(!discipline) continue - var/level = discipline_levels[disc_path] + var/level = character.get_splat(/datum/splat/vampire/ghoul) ? 1 : discipline_levels[disc_path] if(!level) continue // prevent removing the disc by stopping here if they put 0 in it var/result = character.change_st_power_level(discipline, level) diff --git a/modular_darkpack/modules/powers/icons/auras.dmi b/modular_darkpack/modules/powers/icons/auras.dmi index 5959c225952a..039ee135a6df 100644 Binary files a/modular_darkpack/modules/powers/icons/auras.dmi and b/modular_darkpack/modules/powers/icons/auras.dmi differ diff --git a/modular_darkpack/modules/radios/code/transceiver.dm b/modular_darkpack/modules/radios/code/transceiver.dm index 14d836426413..f07221c7bd74 100644 --- a/modular_darkpack/modules/radios/code/transceiver.dm +++ b/modular_darkpack/modules/radios/code/transceiver.dm @@ -107,6 +107,9 @@ if(!COOLDOWN_FINISHED(src, crime_reporting_cooldown)) return + var/area/vtm/crime_area = astype(get_area(location)) + if(!crime_area || crime_area.zone_type != ZONE_MASQUERADE) // prevents sewer rats from reporting crime + return COOLDOWN_START(src, crime_reporting_cooldown, 10 SECONDS) switch(crime) if(CRIME_GUNSHOTS) diff --git a/modular_darkpack/modules/retail/code/_retail.dm b/modular_darkpack/modules/retail/code/_retail.dm index 5572e7788357..d5fc1c016cba 100644 --- a/modular_darkpack/modules/retail/code/_retail.dm +++ b/modular_darkpack/modules/retail/code/_retail.dm @@ -12,7 +12,6 @@ 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 var/payment_department = ACCOUNT_SRV var/list/datum/data/vending_product/products_list = list() @@ -45,6 +44,8 @@ if(owner_needed == TRUE && (!my_owner || (get_dist(src, my_owner) > 4) || (my_owner.stat >= HARD_CRIT))) to_chat(user, span_alert("There's no teller here to sell you things...")) return + else if(owner_needed == TRUE && my_owner && get_dist(src, my_owner) <= 4) + my_owner.say(pick(my_owner.socialrole.random_phrases)) ui_interact(user) /obj/structure/retail/proc/build_inventory() @@ -70,6 +71,9 @@ return ui = SStgui.try_update_ui(user, src, ui) if(!ui) + if(owner_needed && my_owner) + my_owner.face_atom(user) + my_owner.realistic_say(pick(my_owner.socialrole.random_phrases)) ui = new(user, src, "RetailVendor", name) ui.open() diff --git a/modular_darkpack/modules/retail/code/stores/hardware_store.dm b/modular_darkpack/modules/retail/code/stores/hardware_store.dm index 641e8a7bca33..377f29af4f2a 100644 --- a/modular_darkpack/modules/retail/code/stores/hardware_store.dm +++ b/modular_darkpack/modules/retail/code/stores/hardware_store.dm @@ -8,6 +8,7 @@ new /datum/data/vending_product("knife", /obj/item/knife/vamp, 100), new /datum/data/vending_product("stake", /obj/item/vampire_stake, 100), new /datum/data/vending_product("box of light bulbs", /obj/item/storage/box/lights/mixed, 80), + new /datum/data/vending_product("construction vest", /obj/item/clothing/suit/hazardvest, 80) ) product_types = list( /obj/item/fishing_rod, diff --git a/modular_darkpack/modules/retail/code/stores/pharmacy.dm b/modular_darkpack/modules/retail/code/stores/pharmacy.dm index 4703fc297a74..203746976b9b 100644 --- a/modular_darkpack/modules/retail/code/stores/pharmacy.dm +++ b/modular_darkpack/modules/retail/code/stores/pharmacy.dm @@ -13,5 +13,10 @@ new /datum/data/vending_product("inhaler canister", /obj/item/reagent_containers/inhaler_canister/albuterol/asthma, 150), new /datum/data/vending_product("ephedrine pill bottle", /obj/item/storage/pill_bottle/ephedrine), new /datum/data/vending_product("box of syringes", /obj/item/storage/box/syringes, 300), - new /datum/data/vending_product("inhaler", /obj/item/inhaler/albuterol/asthma, 400) + new /datum/data/vending_product("inhaler", /obj/item/inhaler/albuterol/asthma, 400), + new /datum/data/vending_product("cane", /obj/item/cane), + new /datum/data/vending_product("white cane", /obj/item/cane/white), + new /datum/data/vending_product("crutch", /obj/item/cane/crutch), + new /datum/data/vending_product("wooden crutch", /obj/item/cane/crutch/wood), + new /datum/data/vending_product("empty blood bag", /obj/item/reagent_containers/blood/empty) ) diff --git a/modular_darkpack/modules/ritual_abyss_mysticism/code/rituals/__abyssrune.dm b/modular_darkpack/modules/ritual_abyss_mysticism/code/rituals/__abyssrune.dm index 5094c7f5e5ed..c6e3d0abe4d9 100644 --- a/modular_darkpack/modules/ritual_abyss_mysticism/code/rituals/__abyssrune.dm +++ b/modular_darkpack/modules/ritual_abyss_mysticism/code/rituals/__abyssrune.dm @@ -5,3 +5,15 @@ word = "IDI NAH" required_discipline = /datum/discipline/obtenebration activation_color = rgb(50, 50, 50) + +/obj/ritual_rune/abyss/complete() + . = ..() + playsound(loc, 'sound/effects/magic/voidblink.ogg', 50, FALSE) + +/obj/ritual_rune/abyss/ritual_failure() + . = ..() + playsound(loc, 'sound/effects/magic/voidblink.ogg', 50, FALSE) + +/obj/ritual_rune/abyss/ritual_botch() + . = ..() + playsound(loc, 'sound/effects/magic/voidblink.ogg', 50, FALSE) diff --git a/modular_darkpack/modules/ritual_abyss_mysticism/code/rituals/artifact_identification.dm b/modular_darkpack/modules/ritual_abyss_mysticism/code/rituals/artifact_identification.dm index abf83ef17c4e..5b49f112cc7b 100644 --- a/modular_darkpack/modules/ritual_abyss_mysticism/code/rituals/artifact_identification.dm +++ b/modular_darkpack/modules/ritual_abyss_mysticism/code/rituals/artifact_identification.dm @@ -6,8 +6,12 @@ cost = 1 /obj/ritual_rune/abyss/identification/complete() - for(var/obj/item/vtm_artifact/VA in loc) + . = ..() + for(var/obj/item/occult_artifact/VA in loc) + var/mob/living/carbon/human/identifier = usr + if(VA.identified) + to_chat(identifier, span_warning("You have already identified this artifact.")) + return VA.identify() - playsound(loc, 'sound/effects/magic/voidblink.ogg', 50, FALSE) qdel(src) return diff --git a/modular_darkpack/modules/ritual_abyss_mysticism/code/rituals/blackout.dm b/modular_darkpack/modules/ritual_abyss_mysticism/code/rituals/blackout.dm index 85a16f6b737e..2f6b2cb43c93 100644 --- a/modular_darkpack/modules/ritual_abyss_mysticism/code/rituals/blackout.dm +++ b/modular_darkpack/modules/ritual_abyss_mysticism/code/rituals/blackout.dm @@ -8,8 +8,8 @@ //actual function of the rune /obj/ritual_rune/abyss/blackout/complete() + . = ..() for(var/obj/machinery/light/light_to_kill in range(7, src)) //for every light in a range of 7 (called i) if(light_to_kill != LIGHT_BROKEN) //if it aint broke light_to_kill.break_light_tube(0) //break it - playsound(get_turf(src), 'sound/effects/magic/voidblink.ogg', 50, FALSE) //make the funny void sound qdel(src) //delete the rune diff --git a/modular_darkpack/modules/ritual_abyss_mysticism/code/rituals/calling_the_hungry_shade.dm b/modular_darkpack/modules/ritual_abyss_mysticism/code/rituals/calling_the_hungry_shade.dm new file mode 100644 index 000000000000..207c5311bd66 --- /dev/null +++ b/modular_darkpack/modules/ritual_abyss_mysticism/code/rituals/calling_the_hungry_shade.dm @@ -0,0 +1,37 @@ +/obj/ritual_rune/abyss/calling_the_hungry_shade + name = "calling the hungry shade" + desc = "call forth a hungry, and furious, shade of the Abyss, and seek to tame it. Beware if you fail - it will attack you instead!" + icon_state = "rune8" + word = "Spirit of Hunger." + level = 3 + cost = 1 + difficulty = 9 + +/obj/ritual_rune/abyss/calling_the_hungry_shade/complete() + . = ..() + if(ishuman(last_activator)) + var/mob/living/carbon/human/human_activator = last_activator + human_activator.add_beastmaster_minion(/mob/living/basic/shadow_guard/hungry_shade) + if(length(human_activator.beastmaster_minions) > human_activator.st_get_stat(STAT_OCCULT)) + var/mob/living/beastmaster_minion = pick(human_activator.beastmaster_minions) + beastmaster_minion.death() + qdel(src) + +/obj/ritual_rune/abyss/calling_the_hungry_shade/ritual_failure() + . = ..() + var/mob/living/basic/shadow_guard/hungry_shade/shade = new(get_turf(src)) + shade.ai_controller = new /datum/ai_controller/basic_controller/simple/simple_hostile(shade) + shade.ai_controller.set_blackboard_key(BB_BASIC_MOB_CURRENT_TARGET, last_activator) + shade.remove_faction(VAMPIRE_CLAN_LASOMBRA) + to_chat(last_activator, span_warning("The ritual slips from your grasp - something answers the call regardless!")) + qdel(src) + +/obj/ritual_rune/abyss/calling_the_hungry_shade/ritual_botch() + . = ..() + var/mob/living/basic/shadow_guard/hungry_shade/shade = new(get_turf(src)) + shade.ai_controller = new /datum/ai_controller/basic_controller/simple/simple_hostile(shade) + shade.ai_controller.set_blackboard_key(BB_BASIC_MOB_CURRENT_TARGET, last_activator) + shade.remove_faction(VAMPIRE_CLAN_LASOMBRA) + to_chat(last_activator, span_warning("You lose control over the ritual!")) + last_activator.apply_damage(30, AGGRAVATED) + qdel(src) diff --git a/modular_darkpack/modules/ritual_abyss_mysticism/code/rituals/comforting_darkness.dm b/modular_darkpack/modules/ritual_abyss_mysticism/code/rituals/comforting_darkness.dm index 9328d2ef108b..416ca937b1be 100644 --- a/modular_darkpack/modules/ritual_abyss_mysticism/code/rituals/comforting_darkness.dm +++ b/modular_darkpack/modules/ritual_abyss_mysticism/code/rituals/comforting_darkness.dm @@ -8,6 +8,7 @@ var/static/list/roll_cache = list() /obj/ritual_rune/abyss/comforting_darkness/complete() + . = ..() var/list/heal_targets = list() var/turf/rune_location = get_turf(src) var/mob/living/carbon/human/invoker = last_activator diff --git a/modular_darkpack/modules/ritual_abyss_mysticism/code/rituals/pierce_the_veil.dm b/modular_darkpack/modules/ritual_abyss_mysticism/code/rituals/pierce_the_veil.dm new file mode 100644 index 000000000000..35be72cadeae --- /dev/null +++ b/modular_darkpack/modules/ritual_abyss_mysticism/code/rituals/pierce_the_veil.dm @@ -0,0 +1,35 @@ +/obj/ritual_rune/abyss/pierce_the_veil + name = "pierce the veil" + desc = "Through the use of this ritual and by creating orbs of shadow in your hand and staring into them, your eyes turn a deep, abyssal black, giving you Darksight." + icon_state = "rune9" + word = "Shadow encase my sight." + cost = 1 + level = 1 + +/obj/ritual_rune/abyss/pierce_the_veil/complete() + . = ..() + var/mob/living/carbon/human/H = last_activator + ADD_TRAIT(H, TRAIT_TRUE_NIGHT_VISION, "pierce_the_veil") + ADD_TRAIT(H, TRAIT_MASQUERADE_VIOLATING_EYES, "pierce_the_veil") + to_chat(H, span_notice("Darkness floods your vision, then recedes - you can see clearly through the shadows now.")) + H.update_sight() + qdel(src) + +/obj/ritual_rune/abyss/pierce_the_veil/ritual_failure() + . = ..() + to_chat(last_activator, span_warning("The shadows slip through your fingers...")) + qdel(src) + +/obj/ritual_rune/abyss/pierce_the_veil/ritual_botch() + . = ..() + var/mob/living/carbon/human/H = last_activator + H.become_blind("pierce_the_veil_botch") + to_chat(H, span_userdanger("Darkness overwhelmes your vision as you mess up the ritual, causing temporary blindness!")) + addtimer(CALLBACK(src, PROC_REF(cure_botch), H), 2 MINUTES) + qdel(src) + +/obj/ritual_rune/abyss/pierce_the_veil/proc/cure_botch(mob/living/carbon/human/H) + if(QDELETED(H)) + return + H.cure_blind("pierce_the_veil_botch") + to_chat(H, span_notice("Your vision slowly returns.")) diff --git a/modular_darkpack/modules/ritual_abyss_mysticism/code/rituals/reflections_of_hollow_revelation.dm b/modular_darkpack/modules/ritual_abyss_mysticism/code/rituals/reflections_of_hollow_revelation.dm index 70d8f31e8a20..bad64445fa68 100644 --- a/modular_darkpack/modules/ritual_abyss_mysticism/code/rituals/reflections_of_hollow_revelation.dm +++ b/modular_darkpack/modules/ritual_abyss_mysticism/code/rituals/reflections_of_hollow_revelation.dm @@ -12,6 +12,7 @@ var/isactive = FALSE /obj/ritual_rune/abyss/reflections_of_hollow_revelation/complete() + . = ..() var/mob/living/user = usr if(!user) return diff --git a/modular_darkpack/modules/ritual_abyss_mysticism/code/rituals/self_destruction.dm b/modular_darkpack/modules/ritual_abyss_mysticism/code/rituals/self_destruction.dm index 81e723b88e96..dad7d4db8648 100644 --- a/modular_darkpack/modules/ritual_abyss_mysticism/code/rituals/self_destruction.dm +++ b/modular_darkpack/modules/ritual_abyss_mysticism/code/rituals/self_destruction.dm @@ -6,4 +6,5 @@ cost = 1 /obj/ritual_rune/abyss/selfgib/complete() + . = ..() last_activator.death() diff --git a/modular_darkpack/modules/ritual_abyss_mysticism/code/rituals/shadow_guardian.dm b/modular_darkpack/modules/ritual_abyss_mysticism/code/rituals/shadow_guardian.dm index c4d10c611a62..099d588a7bc9 100644 --- a/modular_darkpack/modules/ritual_abyss_mysticism/code/rituals/shadow_guardian.dm +++ b/modular_darkpack/modules/ritual_abyss_mysticism/code/rituals/shadow_guardian.dm @@ -7,25 +7,24 @@ cost = 1 /obj/ritual_rune/abyss/heart_that_beats_in_silence/complete() + . = ..() var/mob/living/carbon/human/H = last_activator - - var/roll = SSroll.storyteller_roll(last_activator.st_get_stat(STAT_INTELLIGENCE) + last_activator.st_get_stat(STAT_OCCULT), 6, last_activator) last_activator.apply_damage(30, AGGRAVATED) + H.add_beastmaster_minion(/mob/living/basic/shadow_guard) + //BG.melee_damage_lower = BG.melee_damage_lower+activator_bonus + //BG.melee_damage_upper = BG.melee_damage_upper+activator_bonus + if(length(H.beastmaster_minions) > H.st_get_stat(STAT_OCCULT)) + var/mob/living/beastmaster_minion = pick(H.beastmaster_minions) + beastmaster_minion.death() + qdel(src) + +/obj/ritual_rune/abyss/heart_that_beats_in_silence/ritual_failure() + . = ..() + qdel(src) - switch(roll) - if(ROLL_SUCCESS) - H.add_beastmaster_minion(/mob/living/basic/shadow_guard) - //BG.melee_damage_lower = BG.melee_damage_lower+activator_bonus - //BG.melee_damage_upper = BG.melee_damage_upper+activator_bonus - playsound(loc, 'sound/effects/magic/voidblink.ogg', 50, FALSE) - //if(length(H.beastmaster) > H.st_get_stat(STAT_OCCULT)) - //var/mob/living/simple_animal/hostile/beastmaster/B = pick(H.beastmaster) - //B.death() - qdel(src) - if(ROLL_FAILURE) - qdel(src) - if(ROLL_BOTCH) - to_chat(last_activator, span_warning("You lose control over the ritual!")) - last_activator.apply_damage(30, AGGRAVATED) - qdel(src) +/obj/ritual_rune/abyss/heart_that_beats_in_silence/ritual_botch() + . = ..() + to_chat(last_activator, span_warning("You lose control over the ritual!")) + last_activator.apply_damage(30, AGGRAVATED) + qdel(src) diff --git a/modular_darkpack/modules/ritual_thaumaturgy/arcane_tome.dm b/modular_darkpack/modules/ritual_thaumaturgy/arcane_tome.dm index 12d44edce637..a15e5c6adea9 100644 --- a/modular_darkpack/modules/ritual_thaumaturgy/arcane_tome.dm +++ b/modular_darkpack/modules/ritual_thaumaturgy/arcane_tome.dm @@ -11,7 +11,7 @@ if(!living_user || !living_user.get_discipline(/datum/discipline/thaumaturgy)) to_chat(user, span_cult("A book whose title is inscribed in latin and coated with various sigils and shapes. You'll need a teacher if you want to learn more. For some reason it wont open.")) return - .=..() + . = ..() /datum/crafting_recipe/arctome name = "Arcane Tome" diff --git a/modular_darkpack/modules/ritual_thaumaturgy/rituals/__thaumaturgyrune.dm b/modular_darkpack/modules/ritual_thaumaturgy/rituals/__thaumaturgyrune.dm index bd2e5d88e13e..f4bfdfbb5f0c 100644 --- a/modular_darkpack/modules/ritual_thaumaturgy/rituals/__thaumaturgyrune.dm +++ b/modular_darkpack/modules/ritual_thaumaturgy/rituals/__thaumaturgyrune.dm @@ -5,3 +5,20 @@ word = "IDI NAH" required_discipline = /datum/discipline/thaumaturgy activation_color = rgb(255, 64, 64) + +/obj/ritual_rune/thaumaturgy/Initialize(mapload) + . = ..() + difficulty = level + 3 + +/obj/ritual_rune/thaumaturgy/complete() + . = ..() + playsound(loc, 'modular_darkpack/modules/powers/sounds/thaum.ogg', 50, FALSE) + +/obj/ritual_rune/thaumaturgy/ritual_failure() + . = ..() + playsound(loc, 'modular_darkpack/modules/powers/sounds/thaum.ogg', 50, FALSE) + +/obj/ritual_rune/thaumaturgy/ritual_botch() + . = ..() + playsound(loc, 'modular_darkpack/modules/powers/sounds/thaum.ogg', 50, FALSE) + diff --git a/modular_darkpack/modules/ritual_thaumaturgy/rituals/artifact_identification.dm b/modular_darkpack/modules/ritual_thaumaturgy/rituals/artifact_identification.dm index 27f50e9a29a8..6bb2a7190a5c 100644 --- a/modular_darkpack/modules/ritual_thaumaturgy/rituals/artifact_identification.dm +++ b/modular_darkpack/modules/ritual_thaumaturgy/rituals/artifact_identification.dm @@ -5,14 +5,14 @@ word = "IN'DAR" /obj/ritual_rune/thaumaturgy/identification/complete() - for(var/obj/item/vtm_artifact/VA in loc) + . = ..() + for(var/obj/item/occult_artifact/VA in loc) var/mob/living/carbon/human/identifier = usr if(VA.identified) to_chat(identifier, span_warning("You have already identified this artifact.")) return VA.identify() identifier.research_points += VA.research_value - playsound(loc, 'modular_darkpack/modules/powers/sounds/thaum.ogg', 50, FALSE) qdel(src) return diff --git a/modular_darkpack/modules/ritual_thaumaturgy/rituals/blood_curse_rune.dm b/modular_darkpack/modules/ritual_thaumaturgy/rituals/blood_curse_rune.dm index 1671c0a58b0a..f79ce2478dfa 100644 --- a/modular_darkpack/modules/ritual_thaumaturgy/rituals/blood_curse_rune.dm +++ b/modular_darkpack/modules/ritual_thaumaturgy/rituals/blood_curse_rune.dm @@ -10,8 +10,8 @@ var/curse_target = null /obj/ritual_rune/thaumaturgy/curse/complete() + . = ..() if(!activated) - playsound(loc, 'modular_darkpack/modules/powers/sounds/thaum.ogg', 50, FALSE) color = rgb(255,0,0) activated = TRUE diff --git a/modular_darkpack/modules/ritual_thaumaturgy/rituals/blood_guardian_ritual.dm b/modular_darkpack/modules/ritual_thaumaturgy/rituals/blood_guardian_ritual.dm index 966250f6791c..fbd6c8eaa381 100644 --- a/modular_darkpack/modules/ritual_thaumaturgy/rituals/blood_guardian_ritual.dm +++ b/modular_darkpack/modules/ritual_thaumaturgy/rituals/blood_guardian_ritual.dm @@ -7,9 +7,9 @@ cost = 5 /obj/ritual_rune/thaumaturgy/blood_guardian/complete() + . = ..() var/mob/living/carbon/human/H = last_activator H.add_beastmaster_minion(/mob/living/basic/blood_guard) - playsound(loc, 'modular_darkpack/modules/powers/sounds/thaum.ogg', 50, FALSE) if(length(H.beastmaster_minions) > 3+H.st_get_stat(STAT_LEADERSHIP)) var/mob/living/basic/blood_guard/B = pick(H.beastmaster_minions) B.death() diff --git a/modular_darkpack/modules/ritual_thaumaturgy/rituals/blood_to_water.dm b/modular_darkpack/modules/ritual_thaumaturgy/rituals/blood_to_water.dm index 81b9ab0746fd..d9657ca4f3d1 100644 --- a/modular_darkpack/modules/ritual_thaumaturgy/rituals/blood_to_water.dm +++ b/modular_darkpack/modules/ritual_thaumaturgy/rituals/blood_to_water.dm @@ -5,6 +5,7 @@ word = "CL-ENE" /obj/ritual_rune/thaumaturgy/blood_to_water/complete() + . = ..() for(var/atom/A in range(7, src)) A.wash(CLEAN_WASH) qdel(src) diff --git a/modular_darkpack/modules/ritual_thaumaturgy/rituals/blood_trap.dm b/modular_darkpack/modules/ritual_thaumaturgy/rituals/blood_trap.dm index c00140fe912b..1f191bf5cfe2 100644 --- a/modular_darkpack/modules/ritual_thaumaturgy/rituals/blood_trap.dm +++ b/modular_darkpack/modules/ritual_thaumaturgy/rituals/blood_trap.dm @@ -5,8 +5,8 @@ word = "DUH'K-A'U" /obj/ritual_rune/thaumaturgy/blood_trap/complete() + . = ..() if(!activated) - playsound(loc, 'modular_darkpack/modules/powers/sounds/thaum.ogg', 50, FALSE) activated = TRUE alpha = 28 AddElement(/datum/element/connect_loc, list(COMSIG_ATOM_ENTERED = PROC_REF(on_crossed))) diff --git a/modular_darkpack/modules/ritual_thaumaturgy/rituals/blood_wall.dm b/modular_darkpack/modules/ritual_thaumaturgy/rituals/blood_wall.dm index f994c00773b2..f00c759d6d62 100644 --- a/modular_darkpack/modules/ritual_thaumaturgy/rituals/blood_wall.dm +++ b/modular_darkpack/modules/ritual_thaumaturgy/rituals/blood_wall.dm @@ -6,8 +6,8 @@ level = 2 /obj/ritual_rune/thaumaturgy/blood_wall/complete() + . = ..() new /obj/structure/bloodwall(loc) - playsound(loc, 'modular_darkpack/modules/powers/sounds/thaum.ogg', 50, FALSE) qdel(src) /obj/structure/bloodwall diff --git a/modular_darkpack/modules/ritual_thaumaturgy/rituals/bloodwalk.dm b/modular_darkpack/modules/ritual_thaumaturgy/rituals/bloodwalk.dm index c879f943b097..efdb33afc94c 100644 --- a/modular_darkpack/modules/ritual_thaumaturgy/rituals/bloodwalk.dm +++ b/modular_darkpack/modules/ritual_thaumaturgy/rituals/bloodwalk.dm @@ -5,7 +5,8 @@ word = "Reveal thy bloodline for mine eyes." level = 2 -/obj/ritual_rune/thaumaturgy/bloodwalk/attack_hand(mob/living/user) +/obj/ritual_rune/thaumaturgy/bloodwalk/complete() + . = ..() for(var/obj/item/reagent_containers/syringe/S in loc) for(var/datum/reagent/blood/B in S.reagents.reagent_list) var/blood_data = B.data @@ -14,14 +15,12 @@ var/clan = blood_data["clan"] var/real_name = blood_data["real_name"] var/message = generate_message(generation, clan, real_name) - to_chat(user, "[message]") + to_chat(last_activator, "[message]") // Process blood collection for research points - if(ishuman(user)) - SSoccult_research.process_blood_collection(user, B) - + if(ishuman(last_activator)) + SSoccult_research.process_blood_collection(last_activator, B) else - to_chat(user, "The blood speaks not; it is empty of power!") - playsound(loc, 'modular_darkpack/modules/powers/sounds/thaum.ogg', 50, FALSE) + to_chat(last_activator, "The blood speaks not; it is empty of power!") color = rgb(255,0,0) activated = TRUE qdel(src) diff --git a/modular_darkpack/modules/ritual_thaumaturgy/rituals/chime_of_the_unseen_spirits.dm b/modular_darkpack/modules/ritual_thaumaturgy/rituals/chime_of_the_unseen_spirits.dm index 52b81019740e..121128d171d5 100644 --- a/modular_darkpack/modules/ritual_thaumaturgy/rituals/chime_of_the_unseen_spirits.dm +++ b/modular_darkpack/modules/ritual_thaumaturgy/rituals/chime_of_the_unseen_spirits.dm @@ -7,8 +7,8 @@ level = 1 /obj/ritual_rune/thaumaturgy/chime_of_unseen_spirits/complete() + . = ..() new /obj/item/spirit_chime(loc) - playsound(loc, 'modular_darkpack/modules/powers/sounds/thaum.ogg', 50, FALSE) qdel(src) // The spirit chime item itself @@ -89,7 +89,7 @@ STOP_PROCESSING(SSprocessing, src) return ..() -/obj/item/spirit_chime/process(delta_time) +/obj/item/spirit_chime/process(seconds_per_tick) var/valid_targets = FALSE if(!ringing || !anchored || !chime_field) ringing = FALSE diff --git a/modular_darkpack/modules/ritual_thaumaturgy/rituals/deflection_wooden_doom.dm b/modular_darkpack/modules/ritual_thaumaturgy/rituals/deflection_wooden_doom.dm index dff9cc439b6c..a96c0fa4b445 100644 --- a/modular_darkpack/modules/ritual_thaumaturgy/rituals/deflection_wooden_doom.dm +++ b/modular_darkpack/modules/ritual_thaumaturgy/rituals/deflection_wooden_doom.dm @@ -11,10 +11,10 @@ sacrifices = list(/obj/item/vampire_stake) /obj/ritual_rune/thaumaturgy/deflection_stake/complete() + . = ..() for(var/mob/living/carbon/human/H in loc) if(!HAS_TRAIT(H, TRAIT_STAKE_RESISTANT)) ADD_TRAIT(H, TRAIT_STAKE_RESISTANT, MAGIC_TRAIT) qdel(src) - playsound(loc, 'modular_darkpack/modules/powers/sounds/thaum.ogg', 50, FALSE) color = rgb(255,0,0) activated = TRUE diff --git a/modular_darkpack/modules/ritual_thaumaturgy/rituals/gargoyle_transformation.dm b/modular_darkpack/modules/ritual_thaumaturgy/rituals/gargoyle_transformation.dm index 73563a0d39c1..74033389dbd2 100644 --- a/modular_darkpack/modules/ritual_thaumaturgy/rituals/gargoyle_transformation.dm +++ b/modular_darkpack/modules/ritual_thaumaturgy/rituals/gargoyle_transformation.dm @@ -22,7 +22,6 @@ valid_bodies += H else H.adjust_agg_loss(50) - playsound(loc, 'modular_darkpack/modules/powers/sounds/thaum.ogg', 10, FALSE) to_chat(usr, "Your specimen must be incapacitated! The ritual has merely hurt them!") return @@ -36,7 +35,6 @@ to_chat(usr, span_notice("You begin invoking the ritual of Gargoyle Creation with [body_count] vampire bod[body_count == 1 ? "y" : "ies"]...")) usr.visible_message(span_notice("[usr] begins invoking a ritual with [body_count] vampire bod[body_count == 1 ? "y" : "ies"]...")) - playsound(loc, 'modular_darkpack/modules/powers/sounds/thaum.ogg', 50, FALSE) playsound(loc, 'modular_darkpack/modules/powers/sounds/vicissitude.ogg', 50, FALSE) // Apply stun so that they cant just crawl away in crit - caster must also stay still diff --git a/modular_darkpack/modules/ritual_thaumaturgy/rituals/question_to_the_ancestors.dm b/modular_darkpack/modules/ritual_thaumaturgy/rituals/question_to_the_ancestors.dm index d51f253c754c..4e8b688aeb7e 100644 --- a/modular_darkpack/modules/ritual_thaumaturgy/rituals/question_to_the_ancestors.dm +++ b/modular_darkpack/modules/ritual_thaumaturgy/rituals/question_to_the_ancestors.dm @@ -17,6 +17,7 @@ icon_living = "ghost_animated" /obj/ritual_rune/thaumaturgy/question/complete() + . = ..() var/text_question = tgui_input_text(usr, "Enter your question to the Ancestors:", "Question to Ancestors") if(!text_question) return @@ -35,7 +36,6 @@ after_assumed_control = CALLBACK(src, PROC_REF(ghost_name_prompt), TR)\ ) - playsound(loc, 'modular_darkpack/modules/powers/sounds/thaum.ogg', 50, FALSE) qdel(src) /obj/ritual_rune/thaumaturgy/question/proc/ghost_name_prompt(mob/living/basic/ghost/tremere/ghost_mob) diff --git a/modular_darkpack/modules/ritual_thaumaturgy/rituals/self_gib.dm b/modular_darkpack/modules/ritual_thaumaturgy/rituals/self_gib.dm index 7ae180644481..d1a0c082e978 100644 --- a/modular_darkpack/modules/ritual_thaumaturgy/rituals/self_gib.dm +++ b/modular_darkpack/modules/ritual_thaumaturgy/rituals/self_gib.dm @@ -5,5 +5,6 @@ word = "CHNGE DA'WORD, GDBE" /obj/ritual_rune/thaumaturgy/selfgib/complete() + . = ..() last_activator.death() diff --git a/modular_darkpack/modules/ritual_thaumaturgy/rituals/teleport.dm b/modular_darkpack/modules/ritual_thaumaturgy/rituals/teleport.dm index a46e499ae86c..21d2a3c37f5d 100644 --- a/modular_darkpack/modules/ritual_thaumaturgy/rituals/teleport.dm +++ b/modular_darkpack/modules/ritual_thaumaturgy/rituals/teleport.dm @@ -7,13 +7,14 @@ sacrifices = list(/obj/item/reagent_containers/blood) /obj/ritual_rune/thaumaturgy/teleport/complete() + . = ..() if(!activated) activated = TRUE color = rgb(255,255,255) icon_state = "teleport" /obj/ritual_rune/thaumaturgy/teleport/attack_hand(mob/user) - ..() + . = ..() if(activated) if(last_activator != user) to_chat(user, span_warning("You are not the one who activated this rune!")) diff --git a/modular_darkpack/modules/splats/code/gaining_splats.dm b/modular_darkpack/modules/splats/code/gaining_splats.dm index ef1318f31f2c..78b932c6b86c 100644 --- a/modular_darkpack/modules/splats/code/gaining_splats.dm +++ b/modular_darkpack/modules/splats/code/gaining_splats.dm @@ -29,7 +29,6 @@ var/signal_return = SEND_SIGNAL(owner, COMSIG_LIVING_GAINING_SPLAT, src) if (signal_return & SPLAT_PREVENT_GAIN) return - SEND_SIGNAL(owner, COMSIG_LIVING_GAINED_SPLAT, src) src.owner = owner LAZYADD(owner.splats, src) @@ -43,6 +42,7 @@ if(owner.hud_used) add_relevent_huds(owner.hud_used) + SEND_SIGNAL(owner, COMSIG_LIVING_GAINED_SPLAT, src) return src /** diff --git a/modular_darkpack/modules/splats/code/losing_splats.dm b/modular_darkpack/modules/splats/code/losing_splats.dm index 356105d72b10..602518303668 100644 --- a/modular_darkpack/modules/splats/code/losing_splats.dm +++ b/modular_darkpack/modules/splats/code/losing_splats.dm @@ -38,7 +38,6 @@ clear_powers() return - SEND_SIGNAL(owner, COMSIG_LIVING_LOSE_SPLAT, src) on_lose() @@ -49,6 +48,7 @@ remove_biotypes() LAZYREMOVE(owner.splats, src) + SEND_SIGNAL(owner, COMSIG_LIVING_LOSE_SPLAT, src) owner = null /datum/splat/Destroy() diff --git a/modular_darkpack/modules/stock_market/code/stockexchange.dm b/modular_darkpack/modules/stock_market/code/stockexchange.dm index 7caee042f5b8..defbe463af44 100644 --- a/modular_darkpack/modules/stock_market/code/stockexchange.dm +++ b/modular_darkpack/modules/stock_market/code/stockexchange.dm @@ -12,4 +12,4 @@ light_color = LIGHT_COLOR_GREEN //i just removed all the stupid flavcode shit that was here. it was not worth looking at. -//DARKPACK TODO - Stock market rework +// DARKPACK TODO - Stock market rework diff --git a/modular_darkpack/modules/storyteller_dice/code/roll_datum.dm b/modular_darkpack/modules/storyteller_dice/code/roll_datum.dm index 861bec77bfd9..0fabf7e4701e 100644 --- a/modular_darkpack/modules/storyteller_dice/code/roll_datum.dm +++ b/modular_darkpack/modules/storyteller_dice/code/roll_datum.dm @@ -48,15 +48,20 @@ return ROLL_FAILURE var/dice_amount = calculate_used_dice(roller, bonus) + var/auto_success_amount = calculate_auto_successes(roller) + var/used_difficulty = calculate_used_difficulty(roller) - var/list/rolled_dice = roll_dice(dice_amount) + var/list/rolled_dice = roll_dice(dice_amount, auto_success_amount) - var/first_line = "[span_tooltip(show_rolling_with(roller, bonus), "[dice_amount] dice")] vs. difficulty [difficulty]." + var/dice_used_text = "[dice_amount] dice" + if(auto_success_amount) + dice_used_text += " + [auto_success_amount] auto successes" + var/first_line = "[span_tooltip(show_rolling_with(roller, bonus), dice_used_text)] vs. difficulty [used_difficulty]." if(successes_needed > 1) first_line += " [successes_needed] successes needed." last_output_text += span_notice(first_line) - last_sucess_amount = count_success(rolled_dice, difficulty, last_output_text) + last_sucess_amount = count_success(rolled_dice, used_difficulty, last_output_text) var/output = roll_result(last_sucess_amount) var/title @@ -72,12 +77,10 @@ if(!spammy_roll && (player_mob == roller || target)) roll_important_to_me = TRUE - var/output_pref = player_mob.client?.prefs.read_preference(/datum/preference/choiced/dice_output) - - if(!spammy_roll && output_pref == DICE_OUTPUT_CHAT) + if(!spammy_roll) to_chat(player_mob, output_combined, MESSAGE_TYPE_INFO, trailing_newline = FALSE) SEND_SOUND(player_mob, sound('sound/items/dice_roll.ogg', volume = roll_important_to_me ? 5 : 20)) - else if(spammy_roll || (output_pref == DICE_OUTPUT_BALLOON)) + else if(last_sucess_amount > 0) roller.balloon_alert(player_mob, "[last_sucess_amount]", TRUE) else @@ -92,7 +95,7 @@ /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) + return viewers(DEFAULT_SIGHT_DISTANCE, roller) if(ROLL_PRIVATE) return list(roller) if(ROLL_PRIVATE_AND_TARGET) @@ -110,9 +113,16 @@ /datum/storyteller_roll/proc/calculate_used_dice(mob/living/roller, bonus = 0) var/dice_amount = 0 for(var/stat_type in using_stats(roller)) - dice_amount += roller.st_get_stat(stat_type) + dice_amount += roller.st_get_stat(stat_type, include_auto_successes = FALSE) return dice_amount + bonus +/datum/storyteller_roll/proc/calculate_auto_successes(mob/living/roller) + var/dice_amount = 0 + for(var/stat_type in using_stats(roller)) + var/datum/st_stat/given_stat = roller?.storyteller_stats[stat_type] + dice_amount += given_stat?.get_auto_success_score() + return dice_amount + // Unused rn but can be used for overides of `using_stats()` /datum/storyteller_roll/proc/return_higher_stat(mob/living/roller, list/stats) var/stat_to_use @@ -127,6 +137,9 @@ /datum/storyteller_roll/proc/using_stats(mob/living/roller) return applicable_stats +/datum/storyteller_roll/proc/calculate_used_difficulty(mob/living/roller) + return difficulty + /datum/storyteller_roll/proc/show_rolling_with(mob/living/roller, bonus = 0) var/output = "" var/stuff = list() @@ -137,7 +150,7 @@ output += "+[bonus]" return "Rolling [output]" -/datum/storyteller_roll/proc/roll_dice(dice, sides = 10) +/datum/storyteller_roll/proc/roll_dice(dice, auto_successes, sides = 10) dice = max(dice, 1) var/list/rolled_dice = list() for(var/i in 1 to dice) @@ -149,6 +162,8 @@ extra_dice++ for(var/i in 1 to extra_dice) rolled_dice += rand(1, sides) + for(var/i in 1 to auto_successes) + rolled_dice += 11 return rolled_dice //Count the number of successes. @@ -166,7 +181,7 @@ sucess_amount-- else dice_text += span_danger("[get_dice_char(roll)]") - last_output_text += "[roll_result_text(roll_result(sucess_amount))] [dice_text]" + last_output_text += "[roll_result_text(roll_result(sucess_amount))] [span_slightly_larger(dice_text)]" return sucess_amount /datum/storyteller_roll/proc/roll_result(sucess_amount) @@ -193,7 +208,8 @@ return span_bold(span_danger(("Botch -"))) /datum/storyteller_roll/proc/get_dice_char(input) - var/static/list/dice_output = list("❶", "❷", "❸", "❹", "❺", "❻", "❼", "❽", "❾", "❿") + // "11" represents automatic successes + var/static/list/dice_output = list("❶", "❷", "❸", "❹", "❺", "❻", "❼", "❽", "❾", "❿", "☥") return dice_output[input] /* // This would require making it an assoc list and we dont every expect outside our given range. // So if someone faces a runtime because of this just make it an actual assoc and deal with the micro preformace hit diff --git a/modular_darkpack/modules/storyteller_dice/code/roll_subtypes.dm b/modular_darkpack/modules/storyteller_dice/code/roll_subtypes.dm index 1f0119040caf..1f94e682f3f5 100644 --- a/modular_darkpack/modules/storyteller_dice/code/roll_subtypes.dm +++ b/modular_darkpack/modules/storyteller_dice/code/roll_subtypes.dm @@ -44,6 +44,11 @@ /datum/storyteller_roll/damage/punch bumper_text = "damage (punch)" +/datum/storyteller_roll/damage/punch/calculate_used_dice(mob/living/roller, bonus) + . = ..() + if(HAS_TRAIT(roller, TRAIT_RAZOR_CLAWS)) // Your still using claws. A bit homebrew tho. + . += 1 + /datum/storyteller_roll/damage/bite bumper_text = "damage (bite)" // + 1 @@ -56,6 +61,24 @@ bumper_text = "damage (claw)" // + 2 +/datum/storyteller_roll/damage/claw/calculate_used_dice(mob/living/roller, bonus) + . = ..() + if(HAS_TRAIT(roller, TRAIT_RAZOR_CLAWS)) + . += 2 + +/* DARKPACK TODO - (Requires https://github.com/DarkPack13/SecondCity/pull/683) +/datum/storyteller_roll/damage/claw/calculate_used_difficulty(mob/living/roller) + . = ..() + if(HAS_TRAIT(roller, TRAIT_RAZOR_CLAWS)) + . -= 1 +*/ + +/datum/storyteller_roll/shooting + bumper_text = "shooting" + applicable_stats = list(STAT_DEXTERITY, STAT_FIREARMS) + reroll_cooldown = 1 TURNS + numerical = TRUE + // Physical Feats /datum/storyteller_roll/lockpick bumper_text = "lockpicking" @@ -83,24 +106,6 @@ bumper_text = "climbing" applicable_stats = list(STAT_DEXTERITY, STAT_ATHLETICS) -/datum/storyteller_roll/shooting - bumper_text = "shooting" - applicable_stats = list(STAT_DEXTERITY, STAT_FIREARMS) - reroll_cooldown = 1 TURNS - numerical = TRUE - -// DARKPACK TODO - (Attacks need a rework on how they calcuate landing a hit.) -/datum/storyteller_roll/punch - bumper_text = "punch" - applicable_stats = list(STAT_DEXTERITY, STAT_BRAWL) - spammy_roll = TRUE - -/datum/storyteller_roll/damage - bumper_text = "damage" - applicable_stats = list(STAT_STRENGTH) - numerical = TRUE - spammy_roll = TRUE - // Mental Feats /datum/storyteller_roll/investigation bumper_text = "investigation" @@ -112,3 +117,4 @@ bumper_text = "identify" applicable_stats = list(STAT_INTELLIGENCE, STAT_OCCULT) reroll_cooldown = 1 SCENES + difficulty = 8 diff --git a/modular_darkpack/modules/storyteller_dice/code/rolling_pref.dm b/modular_darkpack/modules/storyteller_dice/code/rolling_pref.dm deleted file mode 100644 index 3f63c53ed498..000000000000 --- a/modular_darkpack/modules/storyteller_dice/code/rolling_pref.dm +++ /dev/null @@ -1,10 +0,0 @@ -/datum/preference/choiced/dice_output - category = PREFERENCE_CATEGORY_GAME_PREFERENCES - savefile_key = "dice_output" - savefile_identifier = PREFERENCE_PLAYER - -/datum/preference/choiced/dice_output/init_possible_values() - return list(DICE_OUTPUT_BALLOON, DICE_OUTPUT_CHAT) - -/datum/preference/choiced/dice_output/create_default_value() - return DICE_OUTPUT_CHAT diff --git a/modular_darkpack/modules/storyteller_stats/code/_st_stats.dm b/modular_darkpack/modules/storyteller_stats/code/_st_stats.dm index 52c583e1d66c..b7cd90e076fa 100644 --- a/modular_darkpack/modules/storyteller_stats/code/_st_stats.dm +++ b/modular_darkpack/modules/storyteller_stats/code/_st_stats.dm @@ -13,6 +13,8 @@ VAR_PROTECTED/score = 0 /// Temporary bonus score applied to this stat from various ingame sources. VAR_PROTECTED/bonus_score = 0 + /// Temporary bonus score applied to this stat from various ingame sources. These are directly added to results rather then added to dice pool + VAR_PROTECTED/auto_success_score = 0 /// The minimum score this stat can be. var/min_score = 0 /// The maximum score this stat can be. @@ -26,6 +28,8 @@ var/editable = TRUE /// A dictionary of modifiers to this attribute. var/list/modifiers = list() + /// A dictionary of auto success scores to this attribute. + var/list/auto_successes = list() /// What score does this stat start out with at character creation. var/starting_score = 0 /// How many points are in this stat category that the player can use. Used in abstract classes only. @@ -35,10 +39,13 @@ // Score -/datum/st_stat/proc/get_score(include_bonus = TRUE) +/datum/st_stat/proc/get_score(include_bonus = TRUE, include_auto_sucesses = TRUE) SHOULD_NOT_OVERRIDE(TRUE) if(include_bonus) - return score + bonus_score + if(include_auto_sucesses) + return score + bonus_score + auto_success_score + else + return score + bonus_score else return score @@ -46,6 +53,10 @@ SHOULD_NOT_OVERRIDE(TRUE) return bonus_score +/datum/st_stat/proc/get_auto_success_score() + SHOULD_NOT_OVERRIDE(TRUE) + return auto_success_score + /datum/st_stat/proc/can_set_score(amount) SHOULD_NOT_OVERRIDE(TRUE) if((amount < min_score) || (amount > max_score)) @@ -106,7 +117,25 @@ bonus_score = initial(bonus_score) for(var/source in modifiers) bonus_score += modifiers[source] - bonus_score = clamp(bonus_score, 0, 10) + bonus_score = clamp(bonus_score, -max_score, 10) + + +/datum/st_stat/proc/add_auto_successes(amount, source) + SHOULD_NOT_OVERRIDE(TRUE) + LAZYSET(auto_successes, source, amount) + update_auto_successes() + +/datum/st_stat/proc/remove_auto_successes(source) + SHOULD_NOT_OVERRIDE(TRUE) + LAZYREMOVE(auto_successes, source) + update_auto_successes() + +/datum/st_stat/proc/update_auto_successes() + SHOULD_NOT_OVERRIDE(TRUE) + auto_success_score = initial(auto_success_score) + for(var/source in auto_successes) + auto_success_score += auto_successes[source] + auto_success_score = clamp(auto_success_score, 0, 10) // Points diff --git a/modular_darkpack/modules/storyteller_stats/code/mob_affecting_adjustments/mob_procs.dm b/modular_darkpack/modules/storyteller_stats/code/mob_affecting_adjustments/mob_procs.dm index fcafd17fa869..4f7ff1e5b93e 100644 --- a/modular_darkpack/modules/storyteller_stats/code/mob_affecting_adjustments/mob_procs.dm +++ b/modular_darkpack/modules/storyteller_stats/code/mob_affecting_adjustments/mob_procs.dm @@ -1,14 +1,14 @@ /// Get a specific mob's stat from its stats list. -/mob/living/proc/st_get_stat(stat_path, include_bonus) +/mob/living/proc/st_get_stat(stat_path, include_bonus, include_auto_successes) var/datum/st_stat/given_stat = storyteller_stats[stat_path] - return given_stat?.get_score(include_bonus) + return given_stat?.get_score(include_bonus, include_auto_successes) /// Wrapper for st_get_stat to reduce copypaste. Get a specific mob's stat from its stats list. -/mob/living/proc/st_get_stats(list/stat_list, include_bonus) +/mob/living/proc/st_get_stats(list/stat_list, include_bonus, include_auto_successes) var/total_score = 0 for(var/stat_path in stat_list) var/datum/st_stat/given_stat = storyteller_stats[stat_path] - total_score += given_stat?.get_score(include_bonus) + total_score += given_stat?.get_score(include_bonus, include_auto_successes) return total_score /// Set a specific mob's stat from its stats list. @@ -42,6 +42,19 @@ return score +/mob/living/proc/st_add_auto_successes(stat_path, amount, source) + var/datum/st_stat/given_stat = storyteller_stats[stat_path] + var/score = given_stat?.add_auto_successes(amount, source) + update_modifiers_from_stats() + return score + +/mob/living/proc/st_remove_auto_successes(stat_path, source) + var/datum/st_stat/given_stat = storyteller_stats[stat_path] + var/score = given_stat?.remove_auto_successes(source) + update_modifiers_from_stats() + return score + + /mob/living/proc/update_modifiers_from_stats(initial = FALSE) for(var/stat_typepath in storyteller_stats) var/datum/st_stat/stat_datum = storyteller_stats[stat_typepath] diff --git a/modular_darkpack/modules/unit_tests/apply_all_clans.dm b/modular_darkpack/modules/unit_tests/apply_all_clans.dm index 0bd3148e4ef6..889941a10f27 100644 --- a/modular_darkpack/modules/unit_tests/apply_all_clans.dm +++ b/modular_darkpack/modules/unit_tests/apply_all_clans.dm @@ -1,4 +1,3 @@ -// DARKPACK EDIT ADD START /datum/unit_test/apply_all_clans /datum/unit_test/apply_all_clans/Run() @@ -17,4 +16,3 @@ human.set_clan(type) TEST_ASSERT(human.is_clan(type), "[type] was somehow not applied to the human without a client") -// DARKPACK EDIT ADD END diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/splats/ghoul_splat/ghoul_splat.dm b/modular_darkpack/modules/vampire_the_masquerade/code/splats/ghoul_splat/ghoul_splat.dm index 8f4f711b17ad..e1662ce508e1 100644 --- a/modular_darkpack/modules/vampire_the_masquerade/code/splats/ghoul_splat/ghoul_splat.dm +++ b/modular_darkpack/modules/vampire_the_masquerade/code/splats/ghoul_splat/ghoul_splat.dm @@ -25,6 +25,7 @@ /datum/splat/vampire/ghoul/on_gain() owner.give_st_power(/datum/discipline/bloodheal, 1) + owner.give_st_power(/datum/discipline/potence, 1) // the below only runs if they have just been ghouled and domitor isnt null // ghouls who join from the menu have their discs handled by the disc pref middleware @@ -37,3 +38,7 @@ owner.give_st_power(discipline, 1) if(ispath(discipline, /datum/discipline/dementation)) owner.add_quirk(/datum/quirk/darkpack/derangement) + +/datum/splat/vampire/ghoul/on_lose_or_destroy() + owner.remove_st_power(/datum/discipline/bloodheal) + owner.remove_st_power(/datum/discipline/potence) 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 b1c83a8c5c3a..c03fec37ced6 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 @@ -42,6 +42,11 @@ /// Timer tracking how long before the Kindred can wake up from torpor COOLDOWN_DECLARE(torpor_timer) + /// Cooldown for seeing blood or fire which will trigger a frenzy + COOLDOWN_DECLARE(frenzy_target_check_cooldown) + /// Cooldown for acctaully rolling from seeing blood or fire + COOLDOWN_DECLARE(frenzy_roll_cooldown) + /datum/splat/vampire/kindred/New(generation, clan, mob/living/sire) src.generation = generation src.clan = clan @@ -80,11 +85,14 @@ RegisterSignal(owner, COMSIG_LIVING_DEATH, PROC_REF(on_kindred_death)) - // Make all food except raw meat repulsive var/obj/item/organ/tongue/tongue = owner.get_organ_by_type(/obj/item/organ/tongue) - tongue?.liked_foodtypes = NONE - tongue?.disliked_foodtypes = NONE - tongue?.toxic_foodtypes = ~(GORE | MEAT | RAW) + if(!HAS_TRAIT(owner, TRAIT_EAT_FOOD)) + var/mob/living/carbon/human/lick = owner + var/datum/st_stat/morality_path/morality/stat_morality = lick?.storyteller_stats[STAT_MORALITY] + if(stat_morality?.morality_path?.alignment != MORALITY_HUMANITY || stat_morality?.get_score() < 5) + tongue?.liked_foodtypes = NONE + tongue?.disliked_foodtypes = NONE + tongue?.toxic_foodtypes = ~(GORE | MEAT | RAW) // nagarajas? // Set blood type owner.set_blood_type(BLOOD_TYPE_KINDRED) @@ -93,6 +101,7 @@ owner.physiology.heat_mod *= 2 owner.physiology.cold_mod *= 0.25 + /datum/splat/vampire/kindred/on_lose() owner.set_clan(null) @@ -127,6 +136,24 @@ GLOB.kindred_list -= owner +/datum/splat/vampire/kindred/splat_life(seconds_per_tick) + . = ..() + + if(COOLDOWN_FINISHED(src, frenzy_roll_cooldown) && COOLDOWN_FINISHED(src, frenzy_target_check_cooldown)) + var/atom/nearby_fire = get_closest_atom(/atom, owner.get_fire_frenzy_targets(), owner) + if(nearby_fire) + owner.trigger_rotschreck(nearby_fire) + COOLDOWN_START(src, frenzy_roll_cooldown, 1 SCENES) + + else if(HAS_TRAIT(owner, TRAIT_NEEDS_BLOOD)) + var/atom/nearby_blood = get_closest_atom(/atom, owner.get_blood_frenzy_targets(), owner) + if(nearby_blood) + owner.trigger_kindred_frenzy(nearby_blood, 4, 0, "The hunger") + COOLDOWN_START(src, frenzy_roll_cooldown, 1 SCENES) + + COOLDOWN_START(src, frenzy_target_check_cooldown, 1 TURNS) + + /datum/splat/vampire/kindred/proc/damage_resistance(datum/source, list/damage_mods, damage_amount, damagetype, def_zone, sharpness, attack_direction, obj/item/attacking_item) SIGNAL_HANDLER 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 e16580134eae..01f98e1eb5b2 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/presence ) clan_traits = list( - TRAIT_LONGER_FRENZY + TRAIT_DIFFICULT_FRENZY ) male_clothes = /obj/item/clothing/under/vampire/brujah female_clothes = /obj/item/clothing/under/vampire/brujah/female 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 592dc6306065..b2ec5fbdc427 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 @@ -15,6 +15,7 @@ ) male_clothes = /obj/item/clothing/under/vampire/slickback female_clothes = /obj/item/clothing/under/vampire/burlesque + subsplat_keys = /obj/item/vamp/keys/setite /datum/subsplat/vampire_clan/setite/tlacique name = "Tlacique" diff --git a/modular_darkpack/modules/vaults/code/keypad.dm b/modular_darkpack/modules/vaults/code/keypad.dm index c3cb6ccc5cc2..6a5fb13bdc82 100644 --- a/modular_darkpack/modules/vaults/code/keypad.dm +++ b/modular_darkpack/modules/vaults/code/keypad.dm @@ -1,3 +1,5 @@ +GLOBAL_LIST_EMPTY(vault_doors) + /proc/create_unique_pincode() var/pincode = "" for(var/i in 1 to 5) diff --git a/modular_darkpack/modules/vaults/code/vaultdoors.dm b/modular_darkpack/modules/vaults/code/vaultdoors.dm index 0285d72eccdb..f908f3f04799 100644 --- a/modular_darkpack/modules/vaults/code/vaultdoors.dm +++ b/modular_darkpack/modules/vaults/code/vaultdoors.dm @@ -36,11 +36,16 @@ desc = "A massive reinforced vault door protecting the bank's reserves." lock_id = "bank_vault" -/obj/structure/vaultdoor/New() - ..() +/obj/structure/vaultdoor/Initialize(mapload) + . = ..() pincode = create_unique_pincode() + GLOB.vault_doors += src is_locked = TRUE +/obj/structure/vaultdoor/Destroy() + GLOB.vault_doors -= src + return ..() + /obj/structure/vaultdoor/attack_hand(mob/user) . = ..() if(is_broken) @@ -135,8 +140,3 @@ playsound(src, 'sound/machines/terminal/terminal_error.ogg', 50, TRUE) . = TRUE -/proc/find_door_pin(door_type) - for(var/obj/structure/vaultdoor/vdoor in world) - if(istype(vdoor, door_type)) - return vdoor - return null diff --git a/modular_darkpack/modules/vitae/code/blood_pack.dm b/modular_darkpack/modules/vitae/code/blood_pack.dm index f53ece7db5fc..2bf9c779363b 100644 --- a/modular_darkpack/modules/vitae/code/blood_pack.dm +++ b/modular_darkpack/modules/vitae/code/blood_pack.dm @@ -46,6 +46,7 @@ /obj/item/reagent_containers/blood/empty blood_type = null + custom_price = 5 /obj/item/reagent_containers/blood/ab_plus blood_type = BLOOD_TYPE_AB_PLUS diff --git a/modular_darkpack/modules/walls/code/floors/water.dm b/modular_darkpack/modules/walls/code/floors/water.dm index baec80ea8191..071baae6b100 100644 --- a/modular_darkpack/modules/walls/code/floors/water.dm +++ b/modular_darkpack/modules/walls/code/floors/water.dm @@ -78,7 +78,7 @@ SSsupermatter_cascade.can_fire = TRUE SSsupermatter_cascade.cascade_initiated = TRUE -/turf/open/water/bloodwave/process() +/turf/open/water/bloodwave/process(seconds_per_tick) if(!COOLDOWN_FINISHED(src, wave_cooldown)) return diff --git a/modular_darkpack/modules/weapons/code/ammo_boxes.dm b/modular_darkpack/modules/weapons/code/ammo_boxes.dm index 436f0cac7886..8ea75e5c6215 100644 --- a/modular_darkpack/modules/weapons/code/ammo_boxes.dm +++ b/modular_darkpack/modules/weapons/code/ammo_boxes.dm @@ -39,7 +39,7 @@ ammo_type = /obj/item/ammo_casing/vampire/c45acp max_ammo = 100 -/obj/item/ammo_box/darkpack/c45acp/HP +/obj/item/ammo_box/darkpack/c45acp/hp name = "ammo box (.45 ACP HP)" ammo_type = /obj/item/ammo_casing/vampire/c45acp/HP max_ammo = 100 diff --git a/modular_darkpack/modules/weapons/code/guns.dm b/modular_darkpack/modules/weapons/code/guns.dm index ff89af271053..03371c00eb56 100644 --- a/modular_darkpack/modules/weapons/code/guns.dm +++ b/modular_darkpack/modules/weapons/code/guns.dm @@ -170,6 +170,9 @@ max_ammo = 12 multiple_sprites = AMMO_BOX_FULL_EMPTY +/obj/item/ammo_box/magazine/glock45acp/hp + ammo_type = /obj/item/ammo_casing/vampire/c45acp/HP + /obj/item/gun/ballistic/automatic/pistol/darkpack/glock21 name = "\improper Brokk 21" desc = "Very fast 45 ACP handgun." diff --git a/modular_darkpack/modules/weapons/code/melee.dm b/modular_darkpack/modules/weapons/code/melee.dm index 0c9cfeedbaeb..0e21ffffadc3 100644 --- a/modular_darkpack/modules/weapons/code/melee.dm +++ b/modular_darkpack/modules/weapons/code/melee.dm @@ -386,6 +386,7 @@ lefthand_file = 'modular_darkpack/modules/weapons/icons/melee_lefthand.dmi' righthand_file = 'modular_darkpack/modules/weapons/icons/melee_righthand.dmi' worn_icon = 'modular_darkpack/modules/weapons/icons/worn_melee.dmi' + ONFLOOR_ICON_HELPER('modular_darkpack/modules/weapons/icons/weapons_onfloor.dmi') force = 45 throwforce = 10 w_class = WEIGHT_CLASS_BULKY @@ -400,7 +401,6 @@ resistance_flags = FIRE_PROOF masquerade_violating = FALSE custom_price = 1200 - ONFLOOR_ICON_HELPER('modular_darkpack/modules/weapons/icons/weapons_onfloor.dmi') // DARKPACK EDIT ADD /obj/item/darkpack/spear/Initialize() . = ..() diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/delirium.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/delirium.dm new file mode 100644 index 000000000000..21cc0c806757 --- /dev/null +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/delirium.dm @@ -0,0 +1,130 @@ +/datum/status_effect/delirium + id = "delirium" + status_type = STATUS_EFFECT_REFRESH + duration = 10 SECONDS + alert_type = /atom/movable/screen/alert/status_effect/delirium + COOLDOWN_DECLARE(message_cooldown) + var/static/list/willpower_levels = list( + "catatonic fear", + "panic", + "disbelief", + "beserk", + "terror", + "conciliatory", + "controlled fear", + "curiosity", + "bloodlust", + "no reaction" + ) + var/willpower_dots = 1 + var/datum/weakref/scary_wolf_ref + var/image/scary_static + +/datum/status_effect/delirium/on_creation(mob/living/new_owner, mob/big_wolf) + scary_wolf_ref = WEAKREF(big_wolf) + . = ..() + linked_alert.desc += " You are filled with [willpower_levels[willpower_dots]]." + +/datum/status_effect/delirium/on_apply() + . = ..() + var/mob/living/carbon/human/human_owner = astype(owner) + if(!human_owner) + return FALSE + if(!human_owner.affected_by_delirium()) + return FALSE + var/mob/living/wolf = scary_wolf_ref?.resolve() + if(!wolf) + return FALSE + + to_chat(owner, span_boldwarning("Something DEEP inside you fill you with [willpower_levels[willpower_dots]] at the sight of [wolf]")) + willpower_dots = clamp(human_owner.st_get_stat(STAT_PERMANENT_WILLPOWER), 1, 10) + + if(owner.client) + // dir SOUTH is admitting i compeletly lost the fight against this stupid bullshit and cant get the image to properly mimmic the direction of the mob. + var/image/overlay_image = image(loc = wolf, dir = SOUTH) + overlay_image.appearance = wolf.appearance + overlay_image.override = TRUE + overlay_image.name = "Unknown" + overlay_image.pixel_y = 0 + overlay_image.pixel_x = 0 + overlay_image.pixel_w = 0 + overlay_image.pixel_z = 0 + SET_PLANE_EXPLICIT(overlay_image, ABOVE_GAME_PLANE, wolf) + + var/mutable_appearance/static_effect = mutable_appearance('modular_darkpack/modules/werewolf_the_apocalypse/icons/garou_forms/big_static.dmi', "static_base") + static_effect.color = "#373642" + static_effect.blend_mode = BLEND_INSET_OVERLAY + overlay_image.overlays += static_effect + + owner.client.images += overlay_image + scary_static = overlay_image + +/datum/status_effect/delirium/on_remove() + . = ..() + to_chat(owner, span_notice("Your heightened emotions subside and you begin to calm.")) + owner.client?.images -= scary_static + QDEL_NULL(scary_static) + +/datum/status_effect/delirium/tick(seconds_between_ticks) + . = ..() + var/mob/living/carbon/human/human_owner = astype(owner) + if(!human_owner) + return + if(!human_owner.affected_by_delirium()) + return + if(COOLDOWN_FINISHED(src, message_cooldown)) + COOLDOWN_START(src, message_cooldown, rand(10, 15) SECONDS) + var/message = get_message() + if(message) + to_chat(owner, span_boldwarning(message)) + + +/datum/status_effect/delirium/proc/get_message() + switch(willpower_dots) + // Catatonic Fear + if(1) + return pick("FEAR", "FAINT", "COLLAPSE") + // Panic + if(2) + return pick("RUN", "RUN NOW", "GET DISTANCE") + // Disbelief + if(3) + return pick("HIDE", "COWER") + // Beserk + if(4) + return pick("FIGHT", "KICK", "PUNCH", "BITE", "SWING") + // Terror + if(5) + return pick("RUN", "RUN NOW", "GET DISTANCE", "THINK") + // Conciliatory + if(6) + return pick("PLEAD", "BARGIN", "WHIMPER") + // Controlled Fear + if(7) + return "fear" + // Curiosity + if(8) + return pick("learn", "discover") + // Bloodlust + if(9) + return "anger" + // No reaction + if(10) + return + + +/atom/movable/screen/alert/status_effect/delirium + name = "The Delirium" + desc = "A supernatural fear." + icon_state = "fear" + icon = 'modular_darkpack/modules/deprecated/icons/hud/screen_alert.dmi' + + +/mob/living/carbon/human/proc/affected_by_delirium() + if(issupernatural(src)) + return FALSE + + if(st_get_stat(STAT_PERMANENT_WILLPOWER) >= 10) + return FALSE + + return TRUE diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/black_furies.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/black_furies.dm index 4e0e445bbc13..07e9f048bf3e 100644 --- a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/black_furies.dm +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/black_furies.dm @@ -56,6 +56,7 @@ owner.st_add_stat_mod(STAT_PERCEPTION, 1, type) owner.st_add_stat_mod(STAT_INTELLIGENCE, 1, type) owner.st_add_stat_mod(STAT_WITS, 1, type) + ADD_TRAIT(owner, TRAIT_DIFFICULT_RAGE, type) to_chat(owner, span_notice("You feel a sense of heightened lucidity.")) return TRUE @@ -63,10 +64,11 @@ owner.st_remove_stat_mod(STAT_PERCEPTION, type) owner.st_remove_stat_mod(STAT_INTELLIGENCE, type) owner.st_remove_stat_mod(STAT_WITS, type) + REMOVE_TRAIT(owner, TRAIT_DIFFICULT_RAGE, type) to_chat(owner, span_warning("Your mind settles, returning to it's normal state of lucidity.")) /atom/movable/screen/alert/status_effect/breath_of_the_wyld name = "Breath of the Wyld" - desc = "Gain an additional die to all mental checks, but suffer a penalty to rage check difficulty." // TODO: rage difficulty code + desc = "Gain an additional die to all mental checks, but suffer a penalty to rage check difficulty." icon = 'modular_darkpack/modules/deprecated/icons/hud/screen_alert.dmi' icon_state = "riddle" // TODO: get an icon for this diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/species/garou_organs.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/species/garou_organs.dm index d956c2c45b63..b9622e53a320 100644 --- a/modular_darkpack/modules/werewolf_the_apocalypse/code/species/garou_organs.dm +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/species/garou_organs.dm @@ -6,11 +6,15 @@ head_flags = NONE unarmed_attack_sound = 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/werewolf_bite.ogg' +/obj/item/bodypart/head/fera/aggravated + attack_type = AGGRAVATED + /obj/item/bodypart/chest/fera // limb_id = SPECIES_FERA /obj/item/bodypart/arm/left/fera // limb_id = SPECIES_FERA + unarmed_sharpness = SHARP_EDGED unarmed_attack_verbs = list("claw") unarmed_attack_verbs_continuous = list("claws") appendage_noun = "paw" @@ -18,8 +22,12 @@ unarmed_attack_sound = 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/werewolf_bite.ogg' unarmed_miss_sound = 'sound/items/weapons/slashmiss.ogg' +/obj/item/bodypart/arm/left/fera/aggravated + attack_type = AGGRAVATED + /obj/item/bodypart/arm/right/fera // limb_id = SPECIES_FERA + unarmed_sharpness = SHARP_EDGED unarmed_attack_verbs = list("claw") unarmed_attack_verbs_continuous = list("claws") appendage_noun = "paw" @@ -27,10 +35,15 @@ unarmed_attack_sound = 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/werewolf_bite.ogg' unarmed_miss_sound = 'sound/items/weapons/slashmiss.ogg' +/obj/item/bodypart/arm/right/fera/aggravated + attack_type = AGGRAVATED + /obj/item/bodypart/leg/left/fera + unarmed_sharpness = SHARP_EDGED // limb_id = SPECIES_FERA /obj/item/bodypart/leg/right/fera + unarmed_sharpness = SHARP_EDGED // limb_id = SPECIES_FERA diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/splats/fera_species.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/splats/fera_species.dm index 40b7cee7e220..650ba44d65d8 100644 --- a/modular_darkpack/modules/werewolf_the_apocalypse/code/splats/fera_species.dm +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/splats/fera_species.dm @@ -24,6 +24,8 @@ species_language_holder = /datum/language_holder/garou var/mob_pixel_w var/mob_pixel_z + /// If declared will override the mob size. + var/mob_size_override /// Stats added and removed upon gaining the species var/list/form_bonus_stats = list() /// Dice roll difficulty required to shift into this form @@ -36,8 +38,8 @@ var/fallback_icon /// Speed mod applied and removed upon gaining this species var/speed_mod - /// Causes delerium, which if the user is affected by, does not cause breaches - var/causes_delerium + /// Causes delirium, which if the user is affected by, does not cause breaches + var/causes_delirium /// IF this form can be witnessed, causes masqurade breaches var/veil_breaching_form = FALSE @@ -48,6 +50,9 @@ human_who_gained_species.add_offsets(type, w_add = mob_pixel_w, z_add = mob_pixel_z) + if(mob_size_override) + human_who_gained_species.mob_size = mob_size_override + add_buffs(human_who_gained_species) /datum/species/human/shifter/on_species_loss(mob/living/carbon/human/human, datum/species/new_species, pref_load) @@ -55,6 +60,9 @@ if(speed_mod) human.remove_movespeed_modifier(speed_mod) + if(mob_size_override) + human.mob_size = human::mob_size + human.remove_offsets(type) clear_buffs(human) @@ -198,14 +206,14 @@ TRAIT_NO_LYING_ANGLE, TRAIT_TRANSFORM_UPDATES_ICON, ) - causes_delerium = TRUE + causes_delirium = TRUE veil_breaching_form = TRUE mutanttongue = /obj/item/organ/tongue/fera bodypart_overrides = list( - BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/fera, - BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/fera, - BODY_ZONE_HEAD = /obj/item/bodypart/head/fera, + BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/fera/aggravated, + BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/fera/aggravated, + BODY_ZONE_HEAD = /obj/item/bodypart/head/fera/aggravated, BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/fera, BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/fera, BODY_ZONE_CHEST = /obj/item/bodypart/chest/fera, @@ -215,6 +223,8 @@ visible_gender_override = "beast" + mob_pixel_w = -8 + mob_size_override = MOB_SIZE_LARGE form_bonus_stats = list( STAT_STRENGTH = 4, STAT_STAMINA = 3, @@ -222,11 +232,9 @@ STAT_MANIPULATION = -3, // STAT_APPEARANCE = 0 // NOT YET SUPPORTED ) - mob_pixel_w = -8 custom_body_render = TRUE custom_damage_render = TRUE fallback_icon = 'modular_darkpack/modules/werewolf_the_apocalypse/icons/garou_forms/crinos.dmi' - speed_mod = /datum/movespeed_modifier/shifter/war /datum/species/human/shifter/dire name = "dire form" @@ -238,15 +246,16 @@ TRAIT_TRANSFORM_UPDATES_ICON, TRAIT_FERAL_BITER, TRAIT_SMALL_HANDS, + TRAIT_NO_CUFF, ) veil_breaching_form = TRUE mutantbrain = /obj/item/organ/brain/fera mutanttongue = /obj/item/organ/tongue/fera bodypart_overrides = list( - BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/fera, - BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/fera, - BODY_ZONE_HEAD = /obj/item/bodypart/head/fera, + BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/fera/aggravated, + BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/fera/aggravated, + BODY_ZONE_HEAD = /obj/item/bodypart/head/fera/aggravated, BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/fera, BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/fera, BODY_ZONE_CHEST = /obj/item/bodypart/chest/fera, @@ -256,6 +265,8 @@ visible_gender_override = "beast" + mob_pixel_w = -16 + mob_pixel_z = -8 form_bonus_stats = list( STAT_STRENGTH = 3, STAT_STAMINA = 3, @@ -263,8 +274,6 @@ STAT_MANIPULATION = -3, ) shift_difficulty = 7 - mob_pixel_w = -16 - mob_pixel_z = -8 custom_body_render = TRUE custom_damage_render = TRUE fallback_icon = 'modular_darkpack/modules/werewolf_the_apocalypse/icons/garou_forms/hispo.dmi' @@ -280,6 +289,7 @@ TRAIT_TRANSFORM_UPDATES_ICON, TRAIT_FERAL_BITER, TRAIT_SMALL_HANDS, + TRAIT_NO_CUFF, ) mutantbrain = /obj/item/organ/brain/fera @@ -287,7 +297,7 @@ bodypart_overrides = list( BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/fera, BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/fera, - BODY_ZONE_HEAD = /obj/item/bodypart/head/fera, + BODY_ZONE_HEAD = /obj/item/bodypart/head/fera/aggravated, BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/fera, BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/fera, BODY_ZONE_CHEST = /obj/item/bodypart/chest/fera, @@ -312,12 +322,8 @@ abstract_type = /datum/movespeed_modifier/shifter movetypes = GROUND -// Verify these nums are ttrpg accurate. -/datum/movespeed_modifier/shifter/war - multiplicative_slowdown = -0.1 - /datum/movespeed_modifier/shifter/dire - multiplicative_slowdown = -0.3 + multiplicative_slowdown = -0.2 /datum/movespeed_modifier/shifter/feral - multiplicative_slowdown = -0.5 + multiplicative_slowdown = -0.35 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 1eb5bb01851f..1327bf4e11d3 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 @@ -146,8 +146,13 @@ COOLDOWN_START(src, passive_healing_cd, 1 TURNS) var/datum/species/human/shifter/shifter_species = owner.dna.species if(istype(shifter_species)) - if(shifter_species.is_veil_breaching_form(owner) && (!shifter_species.causes_delerium || HAS_TRAIT(owner, TRAIT_PIERCED_VEIL))) + if(shifter_species.is_veil_breaching_form(owner) && (!shifter_species.causes_delirium || HAS_TRAIT(owner, TRAIT_PIERCED_VEIL))) SEND_SIGNAL(owner, COMSIG_MASQUERADE_VIOLATION) + if(shifter_species.causes_delirium) + for(var/mob/living/carbon/human/guy in oviewers(owner, DEFAULT_SIGHT_DISTANCE)) + if(!guy.affected_by_delirium()) + continue + guy.apply_status_effect(STATUS_EFFECT_DELIRIUM, owner) // Being used to represent meditating in your caern /datum/splat/werewolf/shifter/proc/regain_gnosis_process(seconds_per_tick) @@ -156,7 +161,7 @@ for(var/obj/structure/werewolf_totem/totem in GLOB.totems) if(totem.broken) continue - if(!(tribe.name in totem.tribes)) + if(!(tribe?.name in totem.tribes)) continue if(get_area(totem) != get_area(owner)) continue diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/splats/transformation.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/splats/transformation.dm index 966652e34c66..a11ab096902d 100644 --- a/modular_darkpack/modules/werewolf_the_apocalypse/code/splats/transformation.dm +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/splats/transformation.dm @@ -13,7 +13,8 @@ return if(!(form_to_transform in transformation_list)) return - if(owner?.dna?.species?.type == form_to_transform) + var/datum/species/human/shifter/current_form = owner?.dna?.species + if(istype(current_form, form_to_transform)) return if(!force && !COOLDOWN_FINISHED(src, transform_cd)) to_chat(owner, span_warning("Your shifting is on cooldown for one turn.")) @@ -37,7 +38,9 @@ // TODO: should accctually require an amount of successes equal to the forms your shifting through if(requires_roll) var/datum/storyteller_roll/fera_trans/transform_roll = new() - transform_roll.difficulty = form_to_transform::shift_difficulty + if(current_form) + transform_roll.difficulty = current_form.shift_difficulty + transform_roll.successes_needed = steps_between_forms(current_form.type, form_to_transform) switch(transform_roll.st_roll(owner, owner, PRIMAL_URGE_PLACEHOLDER)) if(ROLL_SUCCESS) pass() @@ -53,6 +56,9 @@ // owner.Stun(time_to_transform, ignore_canstun = TRUE) + for(var/obj/item/clothing/equipped in owner.get_equipped_items(INCLUDE_ABSTRACT)) + equipped.take_damage(rand(25, 50), sound_effect = FALSE) + var/matrix/ntransform = matrix(owner.transform) ntransform.Scale(1.1, 1.1) animate(owner, transform = ntransform, color = "#000000", time = time_to_transform * 0.9) @@ -61,6 +67,11 @@ addtimer(CALLBACK(src, PROC_REF(transform_finish), form_to_transform, time_to_transform), time_to_transform * 0.9) +/datum/splat/werewolf/shifter/proc/steps_between_forms(datum/species/human/shifter/first_form, datum/species/human/shifter/second_form) + var/first_index = transformation_list.Find(first_form) + var/second_index = transformation_list.Find(second_form) + return abs(first_index - second_index) + /datum/splat/werewolf/shifter/proc/revert_to_breed_form() if(HAS_TRAIT(owner, TRAIT_METAMORPH)) var/datum/storyteller_roll/metamorph/roll_datum = new() diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/subsplats/tribes/_tribe.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/subsplats/tribes/_tribe.dm index 3d94fec0d898..51ba4e11911e 100644 --- a/modular_darkpack/modules/werewolf_the_apocalypse/code/subsplats/tribes/_tribe.dm +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/subsplats/tribes/_tribe.dm @@ -70,7 +70,7 @@ target.playsound_local(target, "modular_darkpack/modules/powers/sounds/daimonion_laughs/demonlaugh1.ogg", 50, FALSE) to_chat(target, span_cult("THE WYRMFOE IS ALL AROUND ME")) new /datum/hallucination/delusion(target, TRUE, "dancer", 200, 0) - //target.rollfrenzy() DARKPACK TODO: Frenzy + target.trigger_rage_frenzy() else to_chat(target, span_cult("I can feel a overwhelming presence.. I NEED TO RUN!!")) new /obj/effect/client_image_holder/baali_demon/wyrm(get_turf(target), list(target)) diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/totems.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/totems.dm index 1fdf8f886ee8..42b0e365caf9 100644 --- a/modular_darkpack/modules/werewolf_the_apocalypse/code/totems.dm +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/totems.dm @@ -197,27 +197,27 @@ /obj/structure/werewolf_totem/generic light_color = "#81ff4f" - tribes = TRIBE_GAIA + tribes = TRIBE_LIST_GAIA /obj/structure/werewolf_totem/generic/wyld light_color = "#81ff4f" - tribes = TRIBE_WYLD + tribes = TRIBE_LIST_WYLD /obj/structure/werewolf_totem/generic/weaver icon_state = "glassw" base_icon_state = "glassw" light_color = "#35b0ff" - tribes = TRIBE_WEAVER + 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_WYRM + tribes = TRIBE_LIST_WYRM /obj/structure/werewolf_totem/generic/alltribes - tribes = TRIBE_ALL + tribes = TRIBE_LIST_ALL // This things type path sucks @@ -227,16 +227,16 @@ var/tribes = list() /obj/effect/landmark/teleport_mark/gaia - tribes = TRIBE_GAIA + tribes = TRIBE_LIST_GAIA /obj/effect/landmark/teleport_mark/wyld - tribes = TRIBE_WYLD + tribes = TRIBE_LIST_WYLD /obj/effect/landmark/teleport_mark/weaver - tribes = TRIBE_WEAVER + tribes = TRIBE_LIST_WEAVER /obj/effect/landmark/teleport_mark/wyrm - tribes = TRIBE_WYRM + tribes = TRIBE_LIST_WYRM /obj/effect/landmark/teleport_mark/alltribes - tribes = TRIBE_ALL + tribes = TRIBE_LIST_ALL diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/icons/garou_forms/big_static.dmi b/modular_darkpack/modules/werewolf_the_apocalypse/icons/garou_forms/big_static.dmi new file mode 100644 index 000000000000..aff62d6d2b3b Binary files /dev/null and b/modular_darkpack/modules/werewolf_the_apocalypse/icons/garou_forms/big_static.dmi differ diff --git a/strings/quotes/bible.txt b/strings/quotes/bible.txt new file mode 100644 index 000000000000..b94e6340dea1 --- /dev/null +++ b/strings/quotes/bible.txt @@ -0,0 +1,55 @@ +He that is unjust, let him be unjust still: and he which is filthy, let him be filthy still: and he that is righteous, let him be righteous still: and he that is holy, let him be holy still. +And, behold, I come quickly; and my reward is with me, to give every man according as his work shall be. I am Alpha and Omega, the beginning and the end, the first and the last. +He that hath an ear, let him hear what the Spirit saith unto the churches. +Yea, though I walk through the valley of the shadow of death, I will fear no evil: for thou art with me. +Deliver my soul from the sword; my darling from the power of the dog. Save me from the lion’s mouth: for thou hast heard me from the horns of the unicorns. I will declare thy name unto my brethren: in the midst of the congregation will I praise thee. +For in much wisdom is much grief: and he that increaseth knowledge increaseth sorrow. +Fear them not therefore: for there is nothing covered, that shall not be revealed; and hid, that shall not be known. +To every thing there is a season, and a time to every purpose under the heaven: A time to be born, and a time to die; a time to plant, and a time to pluck up that which is planted; A time to kill, and a time to heal; a time to break down, and a time to build up; A time to weep, and a time to laugh; a time to mourn, and a time to dance; A time to cast away stones, and a time to gather stones together; a time to embrace, and a time to refrain from embracing; A time to get, and a time to lose; a time to keep, and a time to cast away; A time to rend, and a time to sew; a time to keep silence, and a time to speak; A time to love, and a time to hate; a time of war, and a time of peace. +Then I saw that wisdom excelleth folly, as far as light excelleth darkness. +Woe unto them that call evil good, and good evil; that put darkness for light, and light for darkness; that put bitter for sweet, and sweet for bitter! Woe unto them that are wise in their own eyes, and prudent in their own sight! Woe unto them that are mighty to drink wine, and men of strength to mingle strong drink: Which justify the wicked for reward, and take away the righteousness of the righteous from him! Therefore as the fire devoureth the stubble, and the flame consumeth the chaff, so their root shall be as rottenness, and their blossom shall go up as dust: because they have cast away the law of the LORD of hosts, and despised the word of the Holy One of Israel. Therefore is the anger of the LORD kindled against his people, and he hath stretched forth his hand against them, and hath smitten them: and the hills did tremble, and their carcases were torn in the midst of the streets. For all this his anger is not turned away, but his hand is stretched out still. +Your new moons and your appointed feasts my soul hateth: they are a trouble unto me; I am weary to bear them. And when ye spread forth your hands, I will hide mine eyes from you: yea, when ye make many prayers, I will not hear: your hands are full of blood. +Why should ye be stricken any more? ye will revolt more and more: the whole head is sick, and the whole heart faint. From the sole of the foot even unto the head there is no soundness in it; but wounds, and bruises, and putrifying sores: they have not been closed, neither bound up, neither mollified with ointment. Your country is desolate, your cities are burned with fire: your land, strangers devour it in your presence, and it is desolate, as overthrown by strangers. And the daughter of Zion is left as a cottage in a vineyard, as a lodge in a garden of cucumbers, as a besieged city. Except the LORD of hosts had left unto us a very small remnant, we should have been as Sodom, and we should have been like unto Gomorrah. +But we are all as an unclean thing, and all our righteousnesses are as filthy rags; and we all do fade as a leaf; and our iniquities, like the wind, have taken us away. And there is none that calleth upon thy name, that stirreth up himself to take hold of thee: for thou hast hid thy face from us, and hast consumed us, because of our iniquities. But now, O LORD, thou art our father; we are the clay, and thou our potter; and we all are the work of thy hand. +Blessed are the poor in spirit: for theirs is the kingdom of heaven. Blessed are they that mourn: for they shall be comforted. Blessed are the meek: for they shall inherit the earth. Blessed are they which do hunger and thirst after righteousness: for they shall be filled. Blessed are the merciful: for they shall obtain mercy. Blessed are the pure in heart: for they shall see God. Blessed are the peacemakers: for they shall be called the children of God. Blessed are they which are persecuted for righteousness sake: for theirs is the kingdom of heaven. Blessed are ye, when men shall revile you, and persecute you, and shall say all manner of evil against you falsely, for my sake. Rejoice, and be exceeding glad: for great is your reward in heaven: for so persecuted they the prophets which were before you. +Ye are the salt of the earth: but if the salt have lost his savour, wherewith shall it be salted? it is thenceforth good for nothing, but to be cast out, and to be trodden under foot of men. Ye are the light of the world. A city that is set on an hill cannot be hid. Neither do men light a candle, and put it under a bushel, but on a candlestick; and it giveth light unto all that are in the house. Let your light so shine before men, that they may see your good works, and glorify your Father which is in heaven. +Think not that I am come to destroy the law, or the prophets: I am not come to destroy, but to fulfil. +But I say unto you, That whosoever looketh on a woman to lust after her hath committed adultery with her already in his heart. And if thy right eye offend thee, pluck it out, and cast it from thee: for it is profitable for thee that one of thy members should perish, and not that thy whole body should be cast into hell. And if thy right hand offend thee, cut if off, and cast it from thee: for it is profitable for thee that one of thy members should perish, and not that thy whole body should be cast into hell. +Ye have heard that it hath been said, An eye for an eye, and a tooth for a tooth: But I say unto you, That ye resist not evil: but whosoever shall smite thee on thy right cheek, turn to him the other also. And if any man will sue thee at the law, and take away thy coat, let him have thy cloke also. And whosoever shall compel thee to go a mile, go with him twain. Give to him that asketh thee, and from him that would borrow of thee turn not thou away. +Take heed that ye do not your alms before men, to be seen of them: otherwise ye have no reward of your Father which is in heaven. Therefore when thou doest thine alms, do not sound a trumpet before thee, as the hypocrites do in the synagogues and in the streets, that they may have glory of men. Verily I say unto you, They have their reward. But when thou doest alms, let not thy left hand know what thy right hand doeth: That thine alms may be in secret: and thy Father which seeth in secret himself shall reward thee openly. +Ye have heard that it hath been said, Thou shalt love thy neighbour, and hate thine enemy. But I say unto you, Love your enemies, bless them that curse you, do good to them that hate you, and pray for them which despitefully use you, and persecute you; That ye may be the children of your Father which is in heaven: for he maketh his sun to rise on the evil and on the good, and sendeth rain on the just and on the unjust. For if ye love them which love you, what reward have ye? do not even the publicans the same? And if ye salute your brethren only, what do ye more than others? do not even the publicans so? Be ye therefore perfect, even as your Father which is in heaven is perfect. +Our Father which art in heaven, Hallowed be thy name. Thy kingdom come. Thy will be done in earth, as it is in heaven. Give us this day our daily bread. And forgive us our debts, as we forgive our debtors. And lead us not into temptation, but deliver us from evil: For thine is the kingdom, and the power, and the glory, for ever. Amen. +Lay not up for yourselves treasures upon earth, where moth and rust doth corrupt, and where thieves break through and steal: But lay up for yourselves treasures in heaven, where neither moth nor rust doth corrupt, and where thieves do not break through nor steal: For where your treasure is, there will your heart be also. +For if ye forgive men their trespasses, your heavenly Father will also forgive you: But if ye forgive not men their trespasses, neither will your Father forgive your trespasses. +Judge not, that ye be not judged. For with what judgment ye judge, ye shall be judged: and with what measure ye mete, it shall be measured to you again. And why beholdest thou the mote that is in thy brother’s eye, but considerest not the beam that is in thine own eye? Or how wilt thou say to thy brother, Let me pull out the mote out of thine eye; and, behold, a beam is in thine own eye? Thou hypocrite, first cast out the beam out of thine own eye; and then shalt thou see clearly to cast out the mote out of thy brother’s eye. +Ask, and it shall be given you; seek, and ye shall find; knock, and it shall be opened unto you: For every one that asketh receiveth; and he that seeketh findeth; and to him that knocketh it shall be opened. Or what man is there of you, whom if his son ask bread, will he give him a stone? Or if he ask a fish, will he give him a serpent? If ye then, being evil, know how to give good gifts unto your children, how much more shall your Father which is in heaven give good things to them that ask him? Therefore all things whatsoever ye would that men should do to you, do ye even so to them: for this is the law and the prophets. +Beware of false prophets, which come to you in sheep’s clothing, but inwardly they are ravening wolves. Ye shall know them by their fruits. +And when they had platted a crown of thorns, they put it upon his head, and a reed in his right hand: and they bowed the knee before him, and mocked him, saying, Hail, King of the Jews! And they spit upon him, and took the reed, and smote him on the head. And after that they had mocked him, they took the robe off from him, and put his own raiment on him, and led him away to crucify him. +And they that passed by reviled him, wagging their heads, And saying, Thou that destroyest the temple, and buildest it in three days, save thyself. If thou be the Son of God, come down from the cross. Likewise also the chief priests mocking him, with the scribes and elders, said, He saved others; himself he cannot save. If he be the King of Israel, let him now come down from the cross, and we will believe him. He trusted in God; let him deliver him now, if he will have him: for he said, I am the Son of God. The thieves also, which were crucified with him, cast the same in his teeth. +Then said Jesus, Father, forgive them; for they know not what they do. +And one of the malefactors which were crucified next to him, saying, If thou be Christ, save thyself and us. But the other answering rebuked him, saying, Dost not thou fear God, seeing thou art in the same condemnation? And we indeed justly; for we receive the due reward of our deeds: but this man hath done nothing amiss. And he said unto Jesus, Lord, remember me when thou comest into thy kingdom. And Jesus said unto him, Verily I say unto thee, To day shalt thou be with me in paradise. And it was about the sixth hour, and there was a darkness over all the earth until the ninth hour. And the sun was darkened, and the veil of the temple was rent in the midst. +And when Jesus had cried with a loud voice, he said, Father, into thy hands I commit my spirit: and having said thus, he gave up the ghost. Now when the centurion saw what was done, he glorified God, saying, Certainly this was a righteous man. +And said unto them, Thus it is written, and thus it behoved Christ to suffer, and to rise from the dead the third day: And that repentance and remission of sins should be preached in his name among all nations, beginning at Jerusalem. And ye are witnesses of these things. +And I saw heaven opened, and behold a white horse; and he that sat upon him was called Faithful and True, and in righteousness he doth judge and make war. His eyes were as a flame of fire, and on his head were many crowns; and he had a name written, that no man knew, but he himself. And he was clothed with a vesture dipped in blood: and his name is called The Word of God. And the armies which were in heaven followed him upon white horses, clothed in fine linen, white and clean. And out of his mouth goeth a sharp sword, that with it he should smite the nations: and he shall rule them with a rod of iron: and he treadeth the winepress of the fierceness and wrath of Almighty God. +And when he had opened the seventh seal, there was silence in heaven about the space of half an hour. +And I saw the seven angels which stood before God; and to them were given seven trumpets. +And another angel came and stood at the altar, having a golden censer; and there was given unto him much incense, that he should offer it with the prayers of all saints upon the golden altar which was before the throne. +And the smoke of the incense, which came with the prayers of the saints, ascended up before God out of the angel's hand. And the angel took the censer, and filled it with fire of the altar, and cast it into the earth: and there were voices, and thunderings, and lightnings, and an earthquake. And the seven angels which had the seven trumpets prepared themselves to sound. +The first angel sounded, and there followed hail and fire mingled with blood, and they were cast upon the earth: and the third part of trees was burnt up, and all green grass was burnt up. +And the second angel sounded, and as it were a great mountain burning with fire was cast into the sea: and the third part of the sea became blood; And the third part of the creatures which were in the sea, and had life, died; and the third part of the ships were destroyed. +And the third angel sounded, and there fell a great star from heaven, burning as it were a lamp, and it fell upon the third part of the rivers, and upon the fountains of waters; And the name of the star is called Wormwood: and the third part of the waters became wormwood; and many men died of the waters, because they were made bitter. +And the fourth angel sounded, and the third part of the sun was smitten, and the third part of the moon, and the third part of the stars; so as the third part of them was darkened, and the day shone not for a third part of it, and the night likewise. +And the devil that deceived them was cast into the lake of fire and brimstone, where the beast and the false prophet are, and shall be tormented day and night for ever and ever. +And death and hell were cast into the lake of fire. This is the second death. +And God shall wipe away all tears from their eyes; and there shall be no more death, neither sorrow, nor crying, neither shall there be any more pain: for the former things are passed away. +And he said unto me, It is done. I am Alpha and Omega, the beginning and the end. I will give unto him that is athirst of the fountain of the water of life freely. +For, behold, the Lord will come with fire, and with his chariots like a whirlwind, to render his anger with fury, and his rebuke with flames of fire. +For by fire and by his sword will the Lord plead with all flesh: and the slain of the Lord shall be many. +The eyes of the Lord are in every place, beholding the evil and the good. +Thou shalt not be afraid for the terror by night; nor for the arrow that flieth by day. +Submit yourselves therefore to God. Resist the devil, and he will flee from you. +A thousand shall fall at thy side, and ten thousand at thy right hand; but it shall not come nigh thee. +Dearly beloved, avenge not yourselves, but rather give place unto wrath: for it is written, Vengeance is mine; I will repay, saith the Lord. +Come unto me, all ye that labour and are heavy laden, and I will give you rest. +The sun shall be turned into darkness, and the moon into blood, before the great and terrible day of the Lord come. +And it shall come to pass, that whosoever shall call on the name of the Lord shall be delivered: for in mount Zion and in Jerusalem shall be deliverance, as the Lord hath said, and in the remnant whom the Lord shall call. diff --git a/tgstation.dme b/tgstation.dme index 24082dcf8b89..933ee50ae287 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -431,6 +431,7 @@ #include "code\__DEFINES\~darkpack\auras.dm" #include "code\__DEFINES\~darkpack\banning.dm" #include "code\__DEFINES\~darkpack\beastmaster.dm" +#include "code\__DEFINES\~darkpack\blooper.dm" #include "code\__DEFINES\~darkpack\branding.dm" #include "code\__DEFINES\~darkpack\colors.dm" #include "code\__DEFINES\~darkpack\combat.dm" @@ -463,6 +464,7 @@ #include "code\__DEFINES\~darkpack\sight.dm" #include "code\__DEFINES\~darkpack\signals_kindred.dm" #include "code\__DEFINES\~darkpack\sound.dm" +#include "code\__DEFINES\~darkpack\spirit_defines.dm" #include "code\__DEFINES\~darkpack\splats.dm" #include "code\__DEFINES\~darkpack\status_effects_debuffs.dm" #include "code\__DEFINES\~darkpack\storyteller_dice.dm" @@ -6993,11 +6995,17 @@ #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\quirks\negative_quirks\blind.dm" +#include "modular_darkpack\master_files\code\datums\quirks\negative_quirks\deaf.dm" +#include "modular_darkpack\master_files\code\datums\quirks\negative_quirks\illiterate.dm" +#include "modular_darkpack\master_files\code\datums\quirks\negative_quirks\mute.dm" #include "modular_darkpack\master_files\code\datums\station_traits\_station_trait.dm" #include "modular_darkpack\master_files\code\datums\storage\subtypes\bags.dm" #include "modular_darkpack\master_files\code\datums\storage\subtypes\dufflebags.dm" +#include "modular_darkpack\master_files\code\game\atoms_movable.dm" #include "modular_darkpack\master_files\code\game\area\areas.dm" #include "modular_darkpack\master_files\code\game\objects\items.dm" +#include "modular_darkpack\master_files\code\game\objects\objs.dm" #include "modular_darkpack\master_files\code\game\objects\items\trash.dm" #include "modular_darkpack\master_files\code\game\objects\items\weaponry.dm" #include "modular_darkpack\master_files\code\game\objects\items\devices\radio\radio.dm" @@ -7030,6 +7038,7 @@ #include "modular_darkpack\master_files\code\modules\mob\living\living.dm" #include "modular_darkpack\master_files\code\modules\mob\living\living_defines.dm" #include "modular_darkpack\master_files\code\modules\mob\living\living_movement.dm" +#include "modular_darkpack\master_files\code\modules\mob\living\living_say.dm" #include "modular_darkpack\master_files\code\modules\mob\living\basic\farm_animals\deer\deer.dm" #include "modular_darkpack\master_files\code\modules\mob\living\basic\space_fauna\ghost.dm" #include "modular_darkpack\master_files\code\modules\mob\living\basic\vermin\space_bat.dm" @@ -7045,6 +7054,7 @@ #include "modular_darkpack\master_files\code\modules\mob\living\carbon\human\life.dm" #include "modular_darkpack\master_files\code\modules\mob\living\carbon\human\physiology.dm" #include "modular_darkpack\master_files\code\modules\mob\living\carbon\human\species_types\zombies.dm" +#include "modular_darkpack\master_files\code\modules\mob\living\silicon\silicon.dm" #include "modular_darkpack\master_files\code\modules\mob\living\simple_animal\hostile\hostile.dm" #include "modular_darkpack\master_files\code\modules\paperwork\fax.dm" #include "modular_darkpack\master_files\code\modules\power\lighting\lighting_mapping_helpers.dm" @@ -7109,6 +7119,11 @@ #include "modular_darkpack\modules\blood_drinking\code\overfeeding\diablerie\adjust_generation.dm" #include "modular_darkpack\modules\blood_drinking\code\overfeeding\diablerie\handle_diablerie.dm" #include "modular_darkpack\modules\blood_drinking\code\overfeeding\diablerie\make_diablerist.dm" +#include "modular_darkpack\modules\blooper\code\blooper.dm" +#include "modular_darkpack\modules\blooper\code\blooper_subsystem.dm" +#include "modular_darkpack\modules\blooper\code\changeling.dm" +#include "modular_darkpack\modules\blooper\code\preferences\preferences.dm" +#include "modular_darkpack\modules\blooper\code\preferences\middleware\blooper.dm" #include "modular_darkpack\modules\books\code\bookcases.dm" #include "modular_darkpack\modules\books\code\books.dm" #include "modular_darkpack\modules\brain_damage\code\phobia.dm" @@ -7144,6 +7159,8 @@ #include "modular_darkpack\modules\clothes\code\neck.dm" #include "modular_darkpack\modules\clothes\code\suit.dm" #include "modular_darkpack\modules\clothes\code\under.dm" +#include "modular_darkpack\modules\company_logos\code\company_logos.dm" +#include "modular_darkpack\modules\company_logos\code\pentex.dm" #include "modular_darkpack\modules\curtains\code\curtains.dm" #include "modular_darkpack\modules\dancing\code\dancing.dm" #include "modular_darkpack\modules\decor\code\bench.dm" @@ -7213,6 +7230,8 @@ #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\events\code\_darkpack_event.dm" +#include "modular_darkpack\modules\events\code\blackout_event.dm" #include "modular_darkpack\modules\external_organs\code\gargoyle_wings.dm" #include "modular_darkpack\modules\external_organs\code\gargoyle_wings_sprite_accessory_datum.dm" #include "modular_darkpack\modules\fire\code\fire.dm" @@ -7242,6 +7261,9 @@ #include "modular_darkpack\modules\forensics\code\forensic_gatherer.dm" #include "modular_darkpack\modules\forensics\code\serial_number_log.dm" #include "modular_darkpack\modules\forensics\code\serial_numbering.dm" +#include "modular_darkpack\modules\frenzy\code\frenzy.dm" +#include "modular_darkpack\modules\frenzy\code\frenzy_helpers.dm" +#include "modular_darkpack\modules\frenzy\code\status_effect.dm" #include "modular_darkpack\modules\government\code\carry_permit.dm" #include "modular_darkpack\modules\government\code\drivers_license.dm" #include "modular_darkpack\modules\government\code\passport.dm" @@ -7287,6 +7309,10 @@ #include "modular_darkpack\modules\jobs\code\giovanni\capo.dm" #include "modular_darkpack\modules\jobs\code\giovanni\la_famiglia.dm" #include "modular_darkpack\modules\jobs\code\giovanni\la_squadra.dm" +#include "modular_darkpack\modules\jobs\code\hunters\abbe.dm" +#include "modular_darkpack\modules\jobs\code\hunters\condottieri.dm" +#include "modular_darkpack\modules\jobs\code\hunters\inquisitor.dm" +#include "modular_darkpack\modules\jobs\code\hunters\novice.dm" #include "modular_darkpack\modules\jobs\code\miscelllaneous\citizen.dm" #include "modular_darkpack\modules\jobs\code\miscelllaneous\club_worker.dm" #include "modular_darkpack\modules\jobs\code\miscelllaneous\graveyard_keeper.dm" @@ -7372,20 +7398,17 @@ #include "modular_darkpack\modules\matrix\code\job.dm" #include "modular_darkpack\modules\matrix\code\matrix.dm" #include "modular_darkpack\modules\merits_flaws\code\_darkpack_quirk.dm" +#include "modular_darkpack\modules\merits_flaws\code\config.dm" #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\amnesia.dm" #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\animal_musk.dm" #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\bad_sight.dm" #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\betrayers_mark.dm" -#include "modular_darkpack\modules\merits_flaws\code\negative_quirks\blind.dm" -#include "modular_darkpack\modules\merits_flaws\code\negative_quirks\deaf.dm" #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\derangement.dm" #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\dulled_bite.dm" #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\grip_of_the_damned.dm" #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\horrific_appearance_quirk.dm" -#include "modular_darkpack\modules\merits_flaws\code\negative_quirks\illiterate.dm" #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\mage_blood.dm" #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\monstrous_quirk.dm" -#include "modular_darkpack\modules\merits_flaws\code\negative_quirks\mute.dm" #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\one_armed.dm" #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\organovore.dm" #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\permanent_fangs.dm" @@ -7394,12 +7417,15 @@ #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\territorial.dm" #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\thaumaturgically_inept.dm" #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\the_largest_maw.dm" +#include "modular_darkpack\modules\merits_flaws\code\negative_quirks\third_eye.dm" #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\vengeful.dm" #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\victim_of_the_masquerade.dm" #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\weak_willed.dm" #include "modular_darkpack\modules\merits_flaws\code\neutral_quirks\illegal_identity.dm" -#include "modular_darkpack\modules\merits_flaws\code\positive_quirks\beserk.dm" +#include "modular_darkpack\modules\merits_flaws\code\positive_quirks\beserker.dm" +#include "modular_darkpack\modules\merits_flaws\code\positive_quirks\blush_of_health_quirk.dm" #include "modular_darkpack\modules\merits_flaws\code\positive_quirks\deceptive_aura.dm" +#include "modular_darkpack\modules\merits_flaws\code\positive_quirks\eat_food_quirk.dm" #include "modular_darkpack\modules\merits_flaws\code\positive_quirks\efficient_digestion.dm" #include "modular_darkpack\modules\merits_flaws\code\positive_quirks\fair_glabro.dm" #include "modular_darkpack\modules\merits_flaws\code\positive_quirks\giovanni_sanguine_incongruity.dm" @@ -7408,6 +7434,7 @@ #include "modular_darkpack\modules\merits_flaws\code\positive_quirks\stillness_of_death.dm" #include "modular_darkpack\modules\merits_flaws\code\positive_quirks\time_sense.dm" #include "modular_darkpack\modules\merits_flaws\code\positive_quirks\untamable.dm" +#include "modular_darkpack\modules\merits_flaws\code\positive_quirks\wolf_sight.dm" #include "modular_darkpack\modules\mob_spawners\code\citizen.dm" #include "modular_darkpack\modules\movie_theatre\code\areas.dm" #include "modular_darkpack\modules\movie_theatre\code\fluff.dm" @@ -7425,9 +7452,13 @@ #include "modular_darkpack\modules\npc\code\human\npc_types\garden.dm" #include "modular_darkpack\modules\npc\code\human\npc_types\guard.dm" #include "modular_darkpack\modules\npc\code\human\npc_types\gummaguts.dm" +#include "modular_darkpack\modules\npc\code\human\npc_types\gunstore.dm" +#include "modular_darkpack\modules\npc\code\human\npc_types\hardwarestore.dm" #include "modular_darkpack\modules\npc\code\human\npc_types\hobo.dm" +#include "modular_darkpack\modules\npc\code\human\npc_types\huntingstore.dm" #include "modular_darkpack\modules\npc\code\human\npc_types\illegal.dm" #include "modular_darkpack\modules\npc\code\human\npc_types\incel.dm" +#include "modular_darkpack\modules\npc\code\human\npc_types\pharmacystore.dm" #include "modular_darkpack\modules\npc\code\human\npc_types\police.dm" #include "modular_darkpack\modules\npc\code\human\npc_types\shop.dm" #include "modular_darkpack\modules\npc\code\human\npc_types\stripper.dm" @@ -7452,9 +7483,13 @@ #include "modular_darkpack\modules\npc\code\human\socialroles\shop\__shop.dm" #include "modular_darkpack\modules\npc\code\human\socialroles\shop\bacotell.dm" #include "modular_darkpack\modules\npc\code\human\socialroles\shop\bubway.dm" +#include "modular_darkpack\modules\npc\code\human\socialroles\shop\campingstore.dm" #include "modular_darkpack\modules\npc\code\human\socialroles\shop\garden.dm" #include "modular_darkpack\modules\npc\code\human\socialroles\shop\gummaguts.dm" +#include "modular_darkpack\modules\npc\code\human\socialroles\shop\gunstore.dm" +#include "modular_darkpack\modules\npc\code\human\socialroles\shop\hardwarestore.dm" #include "modular_darkpack\modules\npc\code\human\socialroles\shop\illegal.dm" +#include "modular_darkpack\modules\npc\code\human\socialroles\shop\pharmacystore.dm" #include "modular_darkpack\modules\npc\code\nonhuman\beastmaster\blood_guard.dm" #include "modular_darkpack\modules\npc\code\nonhuman\beastmaster\necromancy_zombies.dm" #include "modular_darkpack\modules\npc\code\nonhuman\beastmaster\shadow_guard.dm" @@ -7469,8 +7504,10 @@ #include "modular_darkpack\modules\npc\code\nonhuman\hostile\baali_guard.dm" #include "modular_darkpack\modules\npc\code\nonhuman\hostile\bear.dm" #include "modular_darkpack\modules\npc\code\nonhuman\hostile\werewolf.dm" -#include "modular_darkpack\modules\occult_artifacts\code\artifacts\_artifact.dm" -#include "modular_darkpack\modules\occult_artifacts\code\artifacts\_artifact_config.dm" +#include "modular_darkpack\modules\occult_artifacts\code\_artifact.dm" +#include "modular_darkpack\modules\occult_artifacts\code\_artifact_config.dm" +#include "modular_darkpack\modules\occult_artifacts\code\_vampire.dm" +#include "modular_darkpack\modules\occult_artifacts\code\_werewolf.dm" #include "modular_darkpack\modules\occult_artifacts\code\artifacts\bloodstar.dm" #include "modular_darkpack\modules\occult_artifacts\code\artifacts\bloodstone.dm" #include "modular_darkpack\modules\occult_artifacts\code\artifacts\daimonori.dm" @@ -7480,7 +7517,10 @@ #include "modular_darkpack\modules\occult_artifacts\code\artifacts\key_of_alamut.dm" #include "modular_darkpack\modules\occult_artifacts\code\artifacts\mummywrap_fetish.dm" #include "modular_darkpack\modules\occult_artifacts\code\artifacts\odious_chalice.dm" +#include "modular_darkpack\modules\occult_artifacts\code\artifacts\tarulfang.dm" #include "modular_darkpack\modules\occult_artifacts\code\artifacts\weekapaug_thistle.dm" +#include "modular_darkpack\modules\occult_artifacts\code\fetishes\dagger_of_retribution.dm" +#include "modular_darkpack\modules\occult_artifacts\code\fetishes\nyxs_bangle.dm" #include "modular_darkpack\modules\onfloor_icons\code\apply_onfloor_icon_element.dm" #include "modular_darkpack\modules\onfloor_icons\code\dynamic_item_icon.dm" #include "modular_darkpack\modules\onfloor_icons\code\gags_configs.dm" @@ -7629,7 +7669,9 @@ #include "modular_darkpack\modules\ritual_abyss_mysticism\code\rituals\__abyssrune.dm" #include "modular_darkpack\modules\ritual_abyss_mysticism\code\rituals\artifact_identification.dm" #include "modular_darkpack\modules\ritual_abyss_mysticism\code\rituals\blackout.dm" +#include "modular_darkpack\modules\ritual_abyss_mysticism\code\rituals\calling_the_hungry_shade.dm" #include "modular_darkpack\modules\ritual_abyss_mysticism\code\rituals\comforting_darkness.dm" +#include "modular_darkpack\modules\ritual_abyss_mysticism\code\rituals\pierce_the_veil.dm" #include "modular_darkpack\modules\ritual_abyss_mysticism\code\rituals\reflections_of_hollow_revelation.dm" #include "modular_darkpack\modules\ritual_abyss_mysticism\code\rituals\self_destruction.dm" #include "modular_darkpack\modules\ritual_abyss_mysticism\code\rituals\shadow_guardian.dm" @@ -7689,7 +7731,6 @@ #include "modular_darkpack\modules\storyteller_dice\code\roll_datum.dm" #include "modular_darkpack\modules\storyteller_dice\code\roll_subsystem.dm" #include "modular_darkpack\modules\storyteller_dice\code\roll_subtypes.dm" -#include "modular_darkpack\modules\storyteller_dice\code\rolling_pref.dm" #include "modular_darkpack\modules\storyteller_dice\code\verbs.dm" #include "modular_darkpack\modules\storyteller_stats\code\_st_stats.dm" #include "modular_darkpack\modules\storyteller_stats\code\global_procs.dm" @@ -7815,6 +7856,7 @@ #include "modular_darkpack\modules\weapons\code\sheath.dm" #include "modular_darkpack\modules\weapons\code\stake.dm" #include "modular_darkpack\modules\weather\code\effects.dm" +#include "modular_darkpack\modules\werewolf_the_apocalypse\code\delirium.dm" #include "modular_darkpack\modules\werewolf_the_apocalypse\code\emotes.dm" #include "modular_darkpack\modules\werewolf_the_apocalypse\code\garou_languages.dm" #include "modular_darkpack\modules\werewolf_the_apocalypse\code\gauntlet.dm" diff --git a/tgui/packages/tgui-panel/chat/constants.ts b/tgui/packages/tgui-panel/chat/constants.ts index aa9764af7e08..f910853732b6 100644 --- a/tgui/packages/tgui-panel/chat/constants.ts +++ b/tgui/packages/tgui-panel/chat/constants.ts @@ -66,14 +66,14 @@ export const MESSAGE_TYPES: MessageType[] = [ type: MESSAGE_TYPE_LOCALCHAT, name: 'Local', description: 'In-character local messages (say, emote, etc)', - selector: '.say, .emote, .looc, .do', // DARKPACK EDIT, ORIGINAL: selector: '.say, .emote', + selector: '.say, .emote, .looc, .do', // DARKPACK EDIT CHANGE - ORIGINAL: selector: '.say, .emote', }, { type: MESSAGE_TYPE_RADIO, name: 'Radio', description: 'All departments of radio messages', selector: - '.alert, .minorannounce, .syndradio, .centcomradio, .aiprivradio, .comradio, .secradio, .gangradio, .engradio, .medradio, .sciradio, .suppradio, .servradio, .radio, .deptradio, .binarysay, .resonate, .abductor, .alien, .changeling, .policeradio, .clinicradio, .militaryradio, .camarillaradio, .anarchradio, .endronradio', // DARKPACK EDIT, ORIGINAL: '.alert, .minorannounce, .syndradio, .centcomradio, .aiprivradio, .comradio, .secradio, .gangradio, .engradio, .medradio, .sciradio, .suppradio, .servradio, .radio, .deptradio, .binarysay, .resonate, .abductor, .alien, .changeling', + '.alert, .minorannounce, .syndradio, .centcomradio, .aiprivradio, .comradio, .secradio, .gangradio, .engradio, .medradio, .sciradio, .suppradio, .servradio, .radio, .deptradio, .binarysay, .resonate, .abductor, .alien, .changeling, .policeradio, .clinicradio, .militaryradio, .camarillaradio, .anarchradio, .endronradio', // DARKPACK EDIT CHANGE - ORIGINAL: '.alert, .minorannounce, .syndradio, .centcomradio, .aiprivradio, .comradio, .secradio, .gangradio, .engradio, .medradio, .sciradio, .suppradio, .servradio, .radio, .deptradio, .binarysay, .resonate, .abductor, .alien, .changeling', }, { type: MESSAGE_TYPE_ENTERTAINMENT, diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss index 75dcac469ffb..e85ad03be6dd 100644 --- a/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss +++ b/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss @@ -1306,6 +1306,144 @@ $border-width-px: $border-width * 1px; color: #b09448; } +.boxed_message .icon { + width: 1.5em; + height: 1.5em; + margin: 0; + padding: 0; + + &.corplogo { + width: 300px !important; + height: 110px !important; + } +} + +.corp_label_pentex { + color: hsl(317.78, 29.67%, 17.84%); + text-shadow: 0 0 8px #3b2033; + font-weight: bold; +} + +.corp_label_ardus { + color: hsl(201.43, 16.28%, 66.27%); + text-shadow: 0 0 8px #9badb7; + font-weight: bold; +} + +.corp_label_avalon { + color: hsl(245.96, 80.75%, 63.33%); + text-shadow: 0 0 8px #6556ed; + font-weight: bold; +} + +.corp_label_circinus { + color: hsl(29.28, 100%, 75.49%); + text-shadow: 0 0 8px #ffbf82; + font-weight: bold; +} + +.corp_label_consolidex { + color: hsl(290.51, 100%, 57.84%); + text-shadow: 0 0 8px #dd28ff; + font-weight: bold; +} + +.corp_label_endron { + color: hsl(157.32, 97.62%, 16.47%); + text-shadow: 0 0 8px #015334; + font-weight: bold; +} + +.corp_label_harold_harold { + color: hsl(8.97, 42.44%, 40.2%); + text-shadow: 0 0 8px #92483b; + font-weight: bold; +} + +.corp_label_good_house { + color: hsl(285, 20.93%, 66.27%); + text-shadow: 0 0 8px #b297bb; + font-weight: bold; +} + +.corp_label_hallahan { + color: hsl(257.45, 88.29%, 43.53%); + text-shadow: 0 0 8px #460dd1; + font-weight: bold; +} + +.corp_label_herculean { + color: hsl(0, 100%, 53.14%); + text-shadow: 0 0 8px #ff1010; + font-weight: bold; +} + +.corp_label_herricks { + color: hsl(285.51, 90.82%, 38.43%); + text-shadow: 0 0 8px #9009bb; + font-weight: bold; +} + +.corp_label_king { + color: hsl(44.62, 53.92%, 57.45%); + text-shadow: 0 0 8px #cdaf58; + font-weight: bold; +} + +.corp_label_megadon { + color: hsl(182.58, 100%, 63.53%); + text-shadow: 0 0 8px #45f7ff; + font-weight: bold; +} + +.corp_label_nastrum { + color: hsl(342.92, 100%, 74.51%); + text-shadow: 0 0 8px #ff7da2; + font-weight: bold; +} + +.corp_label_omni_tv { + color: hsl(11.33, 79.89%, 64.9%); + text-shadow: 0 0 8px #ed795e; + font-weight: bold; +} + +.corp_label_otolleys { + color: hsl(154.47, 72.31%, 74.51%); + text-shadow: 0 0 8px #8fedc5; + font-weight: bold; +} + +.corp_label_black_dog { + color: hsl(222.86, 100%, 94.51%); + text-shadow: 0 0 8px #e3ebff; + font-weight: bold; +} + +.corp_label_rainbow_inc { + color: hsl(313.97, 100%, 85.69%); + text-shadow: 0 0 8px #ffb6ee; + font-weight: bold; +} + +.corp_label_tellus { + color: hsl(102.7, 100%, 57.84%); + text-shadow: 0 0 8px #66ff28; + font-weight: bold; +} + +.corp_label_vesuvius { + color: hsl(61.82, 41.77%, 84.51%); + text-shadow: 0 0 8px #e7e8c7; + font-weight: bold; +} + +.corp_label_young_smith { + color: hsl(96.67, 20.93%, 66.27%); + text-shadow: 0 0 8px #a5bb97; + font-weight: bold; +} + .subtle { color: #abc6ec; } diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss index 4808c4e49a30..8076e62204f8 100644 --- a/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss +++ b/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss @@ -1289,6 +1289,144 @@ $border-width-px: $border-width * 1px; font-weight: bold; } +.boxed_message .icon { + width: 1.5em; + height: 1.5em; + margin: 0; + padding: 0; + + &.corplogo { + width: 300px !important; + height: 110px !important; + } +} + +.corp_label_pentex { + color: hsl(317.78, 29.67%, 17.84%); + text-shadow: 0 0 8px #3b2033; + font-weight: bold; +} + +.corp_label_ardus { + color: hsl(201.43, 16.28%, 66.27%); + text-shadow: 0 0 8px #9badb7; + font-weight: bold; +} + +.corp_label_avalon { + color: hsl(245.96, 80.75%, 63.33%); + text-shadow: 0 0 8px #6556ed; + font-weight: bold; +} + +.corp_label_circinus { + color: hsl(29.28, 100%, 75.49%); + text-shadow: 0 0 8px #ffbf82; + font-weight: bold; +} + +.corp_label_consolidex { + color: hsl(290.51, 100%, 57.84%); + text-shadow: 0 0 8px #dd28ff; + font-weight: bold; +} + +.corp_label_endron { + color: hsl(157.32, 97.62%, 16.47%); + text-shadow: 0 0 8px #015334; + font-weight: bold; +} + +.corp_label_harold_harold { + color: hsl(8.97, 42.44%, 40.2%); + text-shadow: 0 0 8px #92483b; + font-weight: bold; +} + +.corp_label_good_house { + color: hsl(285, 20.93%, 66.27%); + text-shadow: 0 0 8px #b297bb; + font-weight: bold; +} + +.corp_label_hallahan { + color: hsl(257.45, 88.29%, 43.53%); + text-shadow: 0 0 8px #460dd1; + font-weight: bold; +} + +.corp_label_herculean { + color: hsl(0, 100%, 53.14%); + text-shadow: 0 0 8px #ff1010; + font-weight: bold; +} + +.corp_label_herricks { + color: hsl(285.51, 90.82%, 38.43%); + text-shadow: 0 0 8px #9009bb; + font-weight: bold; +} + +.corp_label_king { + color: hsl(44.62, 53.92%, 57.45%); + text-shadow: 0 0 8px #cdaf58; + font-weight: bold; +} + +.corp_label_megadon { + color: hsl(182.58, 100%, 63.53%); + text-shadow: 0 0 8px #45f7ff; + font-weight: bold; +} + +.corp_label_nastrum { + color: hsl(342.92, 100%, 74.51%); + text-shadow: 0 0 8px #ff7da2; + font-weight: bold; +} + +.corp_label_omni_tv { + color: hsl(11.33, 79.89%, 64.9%); + text-shadow: 0 0 8px #ed795e; + font-weight: bold; +} + +.corp_label_otolleys { + color: hsl(154.47, 72.31%, 74.51%); + text-shadow: 0 0 8px #8fedc5; + font-weight: bold; +} + +.corp_label_black_dog { + color: hsl(222.86, 100%, 94.51%); + text-shadow: 0 0 8px #e3ebff; + font-weight: bold; +} + +.corp_label_rainbow_inc { + color: hsl(313.97, 100%, 85.69%); + text-shadow: 0 0 8px #ffb6ee; + font-weight: bold; +} + +.corp_label_tellus { + color: hsl(102.7, 100%, 57.84%); + text-shadow: 0 0 8px #66ff28; + font-weight: bold; +} + +.corp_label_vesuvius { + color: hsl(61.82, 41.77%, 84.51%); + text-shadow: 0 0 8px #e7e8c7; + font-weight: bold; +} + +.corp_label_young_smith { + color: hsl(96.67, 20.93%, 66.27%); + text-shadow: 0 0 8px #a5bb97; + font-weight: bold; +} + .subtle { color: #000099; } diff --git a/tgui/packages/tgui-say/ChannelIterator.ts b/tgui/packages/tgui-say/ChannelIterator.ts index 14fac7f285e9..67d40d9b399f 100644 --- a/tgui/packages/tgui-say/ChannelIterator.ts +++ b/tgui/packages/tgui-say/ChannelIterator.ts @@ -1,4 +1,4 @@ -export type Channel = 'Say' | 'Radio' | 'Me' | 'OOC' | 'Admin' | 'LOOC' | 'Do'; // DARKPACK EDIT, ORIGINAL: export type Channel = 'Say' | 'Radio' | 'Me' | 'OOC' | 'Admin'; +export type Channel = 'Say' | 'Radio' | 'Me' | 'OOC' | 'Admin' | 'LOOC' | 'Do'; // DARKPACK EDIT CHANGE - ORIGINAL: export type Channel = 'Say' | 'Radio' | 'Me' | 'OOC' | 'Admin'; /** * ### ChannelIterator @@ -8,9 +8,9 @@ export type Channel = 'Say' | 'Radio' | 'Me' | 'OOC' | 'Admin' | 'LOOC' | 'Do'; */ export class ChannelIterator { private index: number = 0; - private readonly channels: Channel[] = ['Say', 'Radio', 'Me', 'Do', 'LOOC', 'OOC', 'Admin']; // DARKPACK EDIT, ORIGINAL: private readonly channels: Channel[] = ['Say', 'Radio', 'Me', 'OOC', 'Admin']; + private readonly channels: Channel[] = ['Say', 'Radio', 'Me', 'Do', 'LOOC', 'OOC', 'Admin']; // DARKPACK EDIT CHANGE - ORIGINAL: private readonly channels: Channel[] = ['Say', 'Radio', 'Me', 'OOC', 'Admin']; private readonly blacklist: Channel[] = ['Admin']; - private readonly quiet: Channel[] = ['OOC', 'LOOC', 'Admin']; // DARKPACK EDIT, ORIGINAL: private readonly quiet: Channel[] = ['OOC', 'Admin']; + private readonly quiet: Channel[] = ['OOC', 'LOOC', 'Admin']; // DARKPACK EDIT CHANGE - ORIGINAL: private readonly quiet: Channel[] = ['OOC', 'Admin']; public next(): Channel { if (this.blacklist.includes(this.channels[this.index])) { diff --git a/tgui/packages/tgui/interfaces/JobSelection.tsx b/tgui/packages/tgui/interfaces/JobSelection.tsx index c3500c833e4c..623b1ffcf7b3 100644 --- a/tgui/packages/tgui/interfaces/JobSelection.tsx +++ b/tgui/packages/tgui/interfaces/JobSelection.tsx @@ -202,7 +202,7 @@ export function JobSelection(props) { <> {shuttle_status && {shuttle_status}} - It is currently {round_duration} into the night. {/* DARKPACK EDIT, ORIGINAL: It is currently {round_duration} into the shift. */} + It is currently {round_duration} into the night. {/* DARKPACK EDIT CHANGE - ORIGINAL: It is currently {round_duration} into the shift. */} } diff --git a/tgui/packages/tgui/interfaces/Orbit/index.tsx b/tgui/packages/tgui/interfaces/Orbit/index.tsx index add7b6e7bd89..561f679f6c7a 100644 --- a/tgui/packages/tgui/interfaces/Orbit/index.tsx +++ b/tgui/packages/tgui/interfaces/Orbit/index.tsx @@ -16,7 +16,7 @@ import type { ViewMode } from './types'; export function Orbit(props) { const [autoObserve, setAutoObserve] = useState(false); const [bladeOpen, setBladeOpen] = useState(false); - const [realNameDisplay, setRealNameDisplay] = useState(true); // DARKPACK EDIT, ORIGINAL: const [realNameDisplay, setRealNameDisplay] = useState(false); + const [realNameDisplay, setRealNameDisplay] = useState(true); // DARKPACK EDIT CHANGE - ORIGINAL: const [realNameDisplay, setRealNameDisplay] = useState(false); const [searchQuery, setSearchQuery] = useState(''); const [viewMode, setViewMode] = useState(VIEWMODE.Health); diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/JobsPage.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/JobsPage.tsx index e45208733d69..dae4f19b92ec 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/JobsPage.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/JobsPage.tsx @@ -402,6 +402,7 @@ export function JobsPage() { + { diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/MainPage.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/MainPage.tsx index 9806dec7946e..df6248910953 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/MainPage.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/MainPage.tsx @@ -13,11 +13,11 @@ import { Section, Stack, } from 'tgui-core/components'; -import { exhaustiveCheck } from 'tgui-core/exhaustive'; // DARKPACK EDIT ADDITION +import { exhaustiveCheck } from 'tgui-core/exhaustive'; // DARKPACK EDIT ADD import { classes } from 'tgui-core/react'; import { createSearch } from 'tgui-core/string'; import { CharacterPreview } from '../../common/CharacterPreview'; -import { PageButton } from '../components/PageButton'; // DARKPACK EDIT ADDITION +import { PageButton } from '../components/PageButton'; // DARKPACK EDIT ADD import { RandomizationButton } from '../components/RandomizationButton'; import { features } from '../preferences/features'; import { @@ -35,9 +35,10 @@ import { useRandomToggleState } from '../useRandomToggleState'; import { useServerPrefs } from '../useServerPrefs'; import { DeleteCharacterPopup } from './DeleteCharacterPopup'; import { MultiNameInput, NameInput } from './names'; +import { VocalsInput, VoiceInput } from './darkpack_vocals'; // DARKPACK EDIT ADDITION const CLOTHING_CELL_SIZE = 48; -const CLOTHING_SIDEBAR_ROWS = 12; // DARKPACK EDIT, ORIGINAL: 9; +const CLOTHING_SIDEBAR_ROWS = 12; // DARKPACK EDIT CHANGE - ORIGINAL: 9; const CLOTHING_SELECTION_CELL_SIZE = 48; const CLOTHING_SELECTION_WIDTH = 5.4; @@ -353,7 +354,7 @@ type PreferenceListProps = { randomizations: Record; maxHeight: string; children?: ReactNode; - overrides?: Record; // DARKPACK EDIT ADDITION + overrides?: Record; // DARKPACK EDIT ADD }; export function PreferenceList(props: PreferenceListProps) { @@ -391,7 +392,7 @@ export function PreferenceList(props: PreferenceListProps) { key={featureId} label={feature.name} tooltip={feature.description} - tooltipPosition="right" // DARKPACK EDIT ADDITION - Swappable pref menus + tooltipPosition="right" // DARKPACK EDIT ADD - Swappable pref menus verticalAlign="middle" > @@ -460,6 +461,7 @@ export function MainPage(props: MainPageProps) { const [deleteCharacterPopupOpen, setDeleteCharacterPopupOpen] = useState(false); const [multiNameInputOpen, setMultiNameInputOpen] = useState(false); + const [vocalsInputOpen, setVocalsInputOpen] = useState(false); // DARKPACK EDIT ADDITION const [randomToggleEnabled] = useRandomToggleState(); const [pendingConfirm, setPendingConfirm] = useState<(() => void) | null>(null); // DARKPACK EDIT ADD - for popups @@ -503,7 +505,7 @@ export function MainPage(props: MainPageProps) { delete nonContextualPreferences.random_name; } - // DARKPACK EDIT ADDITION BEGIN: SWAPPABLE PREF MENUS + // DARKPACK EDIT ADD START - SWAPPABLE PREF MENUS enum PrefPage { Visual, // The visual parts Profile, // Flavor Text, Age, Records, PDA ringtone, etc @@ -558,7 +560,7 @@ export function MainPage(props: MainPageProps) { default: exhaustiveCheck(currentPrefPage); } - // DARKPACK EDIT ADDITION END + // DARKPACK EDIT ADD END return ( <> @@ -579,6 +581,14 @@ export function MainPage(props: MainPageProps) { names={data.character_preferences.names} /> )} + {/* DARKPACK EDIT ADDITION START */} + {vocalsInputOpen && ( + setVocalsInputOpen(false)} + vocals={data.character_preferences.vocals} + /> + )} + {/* DARKPACK EDIT ADDITION END */} {deleteCharacterPopupOpen && ( + + {/* DARKPACK EDIT ADDITION START */} + + { + setVocalsInputOpen(true); + }} + /> + + {/* DARKPACK EDIT ADDITION END */} @@ -761,7 +781,7 @@ export function MainPage(props: MainPageProps) { */ // DARKPACK EDIT REMOVAL END } - {/* DARKPACK EDIT ADDITION BEGIN: Swappable pref menus */} + {/* DARKPACK EDIT ADD START - Swappable pref menus */} - {/* DARKPACK EDIT ADDITION END: Swappable pref menus */} + {/* DARKPACK EDIT ADD END: Swappable pref menus */} ); diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/QuirksPage.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/QuirksPage.tsx index a88883149ec1..865a12d44847 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/QuirksPage.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/QuirksPage.tsx @@ -343,7 +343,7 @@ function QuirkPage() { } }); - const 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) { @@ -356,7 +356,7 @@ function QuirkPage() { positiveQuirks += 1; } - //balance += selectedQuirk.value; DARKPACK EDIT REMOVAL - Merits/Flaws + //balance += selectedQuirk.value; DARKPACK EDIT REMOVAL - MERITS_FLAWS } function getReasonToNotAdd(quirkName: string) { @@ -369,11 +369,11 @@ function QuirkPage() { return 'You need a negative quirk to balance this out!'; } } - //DARKPACK EDIT ADD - Merits/Flaws + // DARKPACK EDIT ADD - MERITS_FLAWS if (balance - quirk.value < 0) { return 'You need more freebie points to take this quirk!'; } - //DARKPACK EDIT ADD - Merits/Flaws + // DARKPACK EDIT ADD - MERITS_FLAWS const selectedQuirkNames = selectedQuirks.map((quirkKey) => { return quirkInfo[quirkKey].name; @@ -393,8 +393,8 @@ function QuirkPage() { } } } - if (data.clan_disallowed_quirks.includes(quirk.name)) { // DARKPACK EDIT ADD - MERITS/FLAWS - return 'This quirk is incompatible with your selected clan.'; // DARKPACK EDIT END - MERITS/FLAWS + if (data.clan_disallowed_quirks.includes(quirk.name)) { // DARKPACK EDIT ADD - MERITS_FLAWS + return 'This quirk is incompatible with your selected clan.'; // DARKPACK EDIT END - MERITS_FLAWS } if (data.splat_disallowed_quirks.includes(quirk.name)) { // DARKPACK EDIT CHANGE - SPLATS return 'This quirk is incompatible with your selected splats.'; // DARKPACK EDIT CHANGE - SPLATS @@ -492,14 +492,14 @@ function QuirkPage() { {( - // DARKPACK EDIT CHANGE START -- Removed pointsEnabled ? checks - Freebie Points // DARKPACK EDIT CHANGE -- Changed 'Quirk Balance' to 'Freebie Points' + // DARKPACK EDIT CHANGE START - (Removed pointsEnabled ? checks) + Freebie Points // DARKPACK EDIT CHANGE - (Changed 'Quirk Balance' to 'Freebie Points') )} {( {balance} - // DARKPACK EDIT CHANGE END -- Removed pointsEnabled ? checks + // DARKPACK EDIT CHANGE END )} @@ -549,7 +549,7 @@ function QuirkPage() { } export function QuirkPersonalityPage() { - const [contentPage, setContentPage] = useState<'quirks'>( // DARKPACK EDIT, ORIGINAL: const [contentPage, setContentPage] = useState<'quirks' | 'personality'>( + const [contentPage, setContentPage] = useState<'quirks'>( // DARKPACK EDIT CHANGE - ORIGINAL: const [contentPage, setContentPage] = useState<'quirks' | 'personality'>( 'quirks', ); @@ -588,9 +588,9 @@ export function QuirkPersonalityPage() { {contentPage === 'personality' ? : } // DARKPACK EDIT REMOVAL END */} - {/* DARKPACK EDIT ADDITION START */} + {/* DARKPACK EDIT ADD START */} - {/* DARKPACK EDIT ADDITION END */} + {/* DARKPACK EDIT ADD END */} ); } diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/darkpack_vocals.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/darkpack_vocals.tsx new file mode 100644 index 000000000000..530fe8295206 --- /dev/null +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/darkpack_vocals.tsx @@ -0,0 +1,138 @@ +import { filter } from 'es-toolkit/compat'; +import { + Box, + Button, + FitText, + Icon, + Modal, + Section, + Stack, +} from 'tgui-core/components'; + +import { getRandomization, PreferenceList } from './MainPage'; + +type VocalsProps = { + handleClose: () => void; + vocals: Record; +}; + +type VocalFeature = { + id: string; + label: string; + type: string; +}; + +const vocalFeatures: VocalFeature[] = [ + { id: 'blooper_choice', label: 'Voice Type', type: 'string' }, + { id: 'blooper_speed', label: 'Blooper Speed', type: 'number' }, + { id: 'blooper_pitch', label: 'Blooper Pitch', type: 'number' }, + { id: 'blooper_pitch_range', label: 'Blooper Range', type: 'number' }, +]; + +type FeatureValueInputProps = { + feature: VocalFeature; + value: string | number | boolean; +}; + +function getCorrespondingPreferences( + customization_options: string[], + relevant_preferences: Record, +) { + return Object.fromEntries( + filter(Object.entries(relevant_preferences), ([key, value]) => + customization_options.includes(key), + ), + ); +} + +function FeatureValueInput({ feature, value }: FeatureValueInputProps) { + return ( + + + + ); +} + +export function VocalsInput(props: VocalsProps) { + const { vocals, handleClose } = props; + + return ( + + +
+ Close + + } + > + + {vocalFeatures.map((feature) => { + if (vocals === undefined) return null; + const value = vocals[feature.id]; + return ( + + + + ); + })} + +
+
+
+ ); +} + +type VoiceInputProps = { + openVocalsInput: () => void; +}; + +export function VoiceInput(props: VoiceInputProps) { + return ( + + ); +} diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/names.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/names.tsx index ceced01d8a07..32237601aa0f 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/names.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/names.tsx @@ -181,6 +181,7 @@ export function NameInput(props: NameInputProps) { {/* We only know other names when the server tells us */} {data?.names && ( + {/* // DARKPACK EDIT REMOVAL START + // DARKPACK EDIT REMOVAL END */} )} diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/base.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/base.tsx index 3e67664c7f3a..a5dd91ae9ebd 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/base.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/base.tsx @@ -15,7 +15,7 @@ import { NumberInput, Slider, Stack, - TextArea, // DARKPACK EDIT ADDITION + TextArea, // DARKPACK EDIT ADD } from 'tgui-core/components'; import type { BooleanLike } from 'tgui-core/react'; @@ -267,7 +267,7 @@ export function FeatureShortTextInput( ); } -// DARKPACK EDIT ADDITION START - FLAVOR TEXT +// DARKPACK EDIT ADD START - FLAVOR TEXT export const FeatureTextInput = ( props: FeatureValueProps, ) => { @@ -284,7 +284,7 @@ export const FeatureTextInput = ( /> ); }; -// DARKPACK EDIT ADDITION END +// DARKPACK EDIT ADD END export const FeatureExternalInput = (props: FeatureValueProps,) => { const {featureId, value } = props; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/darkpack_blooper.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/darkpack_blooper.tsx new file mode 100644 index 000000000000..029c4388e75c --- /dev/null +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/darkpack_blooper.tsx @@ -0,0 +1,59 @@ +// THIS IS A DARKPACK UI FILE +import { useBackend } from 'tgui/backend'; +import { Button, Stack } from 'tgui-core/components'; +import { + type FeatureChoiced, + type FeatureChoicedServerData, + type FeatureNumeric, + FeatureSliderInput, + type FeatureValueProps, +} from '../base'; +import { FeatureDropdownInput } from '../dropdowns'; + +const FeatureBlooperDropdownInput = ( + props: FeatureValueProps, +) => { + const { act, data } = useBackend(); + + return ( + + + + + +