From 98c16b2b1bf4ab82e32d6aba72babf11480c217a Mon Sep 17 00:00:00 2001 From: TheGreatKitsune Date: Thu, 24 Jul 2025 13:29:22 -0400 Subject: [PATCH 01/66] Update file permission --- tools/bootstrap/javascript.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 tools/bootstrap/javascript.sh diff --git a/tools/bootstrap/javascript.sh b/tools/bootstrap/javascript.sh old mode 100644 new mode 100755 From 0f67824fa63363e5e70fafb7324b34cb1708d893 Mon Sep 17 00:00:00 2001 From: granodd Date: Wed, 13 Aug 2025 21:23:45 -0400 Subject: [PATCH 02/66] species edits Expands character customization options and removes restrictions on black oak mercenary. --- .../customizer/customizers/organ/tail.dm | 2 ++ .../roguetown/mercenaries/classes/blackoak.dm | 2 ++ .../human/species_types/furry/anthromorph.dm | 2 +- .../human/species_types/furry/demihuman.dm | 2 +- .../roguetown/construct/constructm.dm | 34 +++++++++++++++++++ .../species_types/roguetown/other/tiefling.dm | 2 +- 6 files changed, 41 insertions(+), 3 deletions(-) diff --git a/code/modules/client/customizer/customizers/organ/tail.dm b/code/modules/client/customizer/customizers/organ/tail.dm index da99633d..f67dc653 100644 --- a/code/modules/client/customizer/customizers/organ/tail.dm +++ b/code/modules/client/customizer/customizers/organ/tail.dm @@ -151,6 +151,8 @@ /datum/sprite_accessory/tail/deer, /datum/sprite_accessory/tail/raccoon, /datum/sprite_accessory/tail/sabresune, + /datum/sprite_accessory/tail/tiefling, + /datum/sprite_accessory/tail/tiefling/heart, /datum/sprite_accessory/tail/lizard/smooth, /datum/sprite_accessory/tail/lizard/dtiger, /datum/sprite_accessory/tail/lizard/ltiger, diff --git a/code/modules/jobs/job_types/roguetown/mercenaries/classes/blackoak.dm b/code/modules/jobs/job_types/roguetown/mercenaries/classes/blackoak.dm index 621aa534..39befb83 100644 --- a/code/modules/jobs/job_types/roguetown/mercenaries/classes/blackoak.dm +++ b/code/modules/jobs/job_types/roguetown/mercenaries/classes/blackoak.dm @@ -6,6 +6,8 @@ allowed_races = list( /datum/species/human/halfelf, /datum/species/elf/wood, + /datum/species/anthromorph, + /datum/species/demihuman, ) outfit = /datum/outfit/job/roguetown/mercenary/blackoak category_tags = list(CTAG_MERCENARY) diff --git a/code/modules/mob/living/carbon/human/species_types/furry/anthromorph.dm b/code/modules/mob/living/carbon/human/species_types/furry/anthromorph.dm index db20fff1..e942b74e 100644 --- a/code/modules/mob/living/carbon/human/species_types/furry/anthromorph.dm +++ b/code/modules/mob/living/carbon/human/species_types/furry/anthromorph.dm @@ -66,7 +66,7 @@ OFFSET_FACE_F = list(0,-1), OFFSET_BELT_F = list(0,0), OFFSET_BACK_F = list(0,-1), \ OFFSET_NECK_F = list(0,-1), OFFSET_MOUTH_F = list(0,-1), OFFSET_PANTS_F = list(0,0), \ OFFSET_SHIRT_F = list(0,0), OFFSET_ARMOR_F = list(0,0), OFFSET_UNDIES_F = list(0,-1), \ - OFFSET_TAUR = list(-16,0), OFFSET_TAUR_F = list(-16,0),\ + OFFSET_TAUR = list(-16,0), OFFSET_TAUR_F = list(-16,0), \ ) race_bonus = list(STAT_PERCEPTION = 1, STAT_CONSTITUTION = 1) enflamed_icon = "widefire" diff --git a/code/modules/mob/living/carbon/human/species_types/furry/demihuman.dm b/code/modules/mob/living/carbon/human/species_types/furry/demihuman.dm index 780bfee7..546e39cf 100644 --- a/code/modules/mob/living/carbon/human/species_types/furry/demihuman.dm +++ b/code/modules/mob/living/carbon/human/species_types/furry/demihuman.dm @@ -57,7 +57,7 @@ OFFSET_FACE_F = list(0,-1), OFFSET_BELT_F = list(0,0), OFFSET_BACK_F = list(0,-1), \ OFFSET_NECK_F = list(0,-1), OFFSET_MOUTH_F = list(0,-1), OFFSET_PANTS_F = list(0,0), \ OFFSET_SHIRT_F = list(0,0), OFFSET_ARMOR_F = list(0,0), OFFSET_UNDIES_F = list(0,-1), \ - OFFSET_TAUR = list(-16,0), OFFSET_TAUR_F = list(-16,0),\ + OFFSET_TAUR = list(-16,0), OFFSET_TAUR_F = list(-16,0), \ ) race_bonus = list(STAT_PERCEPTION = 1, STAT_ENDURANCE = 1) enflamed_icon = "widefire" diff --git a/code/modules/mob/living/carbon/human/species_types/roguetown/construct/constructm.dm b/code/modules/mob/living/carbon/human/species_types/roguetown/construct/constructm.dm index ade2f7ab..025642b8 100644 --- a/code/modules/mob/living/carbon/human/species_types/roguetown/construct/constructm.dm +++ b/code/modules/mob/living/carbon/human/species_types/roguetown/construct/constructm.dm @@ -55,20 +55,54 @@ customizers = list( /datum/customizer/organ/eyes/humanoid, /datum/customizer/bodypart_feature/crest, + /datum/customizer/bodypart_feature/hair/head/humanoid, + /datum/customizer/bodypart_feature/hair/facial/humanoid, /datum/customizer/bodypart_feature/accessory, /datum/customizer/bodypart_feature/face_detail, /datum/customizer/bodypart_feature/underwear, + /datum/customizer/organ/testicles/anthro, /datum/customizer/organ/penis/anthro, /datum/customizer/organ/breasts/human, /datum/customizer/organ/vagina/human_anthro, + /datum/customizer/organ/belly/human, + /datum/customizer/organ/butt/human, ) body_marking_sets = list( /datum/body_marking_set/none, + /datum/body_marking_set/belly, + /datum/body_marking_set/bellysocks, + /datum/body_marking_set/tiger, + /datum/body_marking_set/tiger_dark, ) body_markings = list( + /datum/body_marking/flushed_cheeks, /datum/body_marking/eyeliner, + /datum/body_marking/plain, + /datum/body_marking/tiger, + /datum/body_marking/tiger/dark, + /datum/body_marking/sock, + /datum/body_marking/socklonger, + /datum/body_marking/tips, + /datum/body_marking/bellyscale, + /datum/body_marking/bellyscaleslim, + /datum/body_marking/bellyscalesmooth, + /datum/body_marking/bellyscaleslimsmooth, + /datum/body_marking/buttscale, + /datum/body_marking/belly, + /datum/body_marking/bellyslim, + /datum/body_marking/butt, + /datum/body_marking/tie, + /datum/body_marking/tiesmall, + /datum/body_marking/backspots, + /datum/body_marking/front, + /datum/body_marking/drake_eyes, /datum/body_marking/tonage, + /datum/body_marking/spotted, /datum/body_marking/nose, + /datum/body_marking/harlequin, + /datum/body_marking/harlequinreversed, + /datum/body_marking/bangs, + /datum/body_marking/bun, ) /datum/species/construct/metal/check_roundstart_eligible() diff --git a/code/modules/mob/living/carbon/human/species_types/roguetown/other/tiefling.dm b/code/modules/mob/living/carbon/human/species_types/roguetown/other/tiefling.dm index 83a79520..35db2562 100644 --- a/code/modules/mob/living/carbon/human/species_types/roguetown/other/tiefling.dm +++ b/code/modules/mob/living/carbon/human/species_types/roguetown/other/tiefling.dm @@ -70,7 +70,7 @@ /datum/customizer/bodypart_feature/face_detail, /datum/customizer/bodypart_feature/underwear, /datum/customizer/organ/horns/anthro, - /datum/customizer/organ/tail/tiefling, + /datum/customizer/organ/tail/demihuman, /datum/customizer/organ/testicles/anthro, /datum/customizer/organ/penis/anthro, /datum/customizer/organ/breasts/human, From 685fa3c0205e56ce89056a8b479616d075be0477 Mon Sep 17 00:00:00 2001 From: SgtRyder <51496262+SgtRyder@users.noreply.github.com> Date: Wed, 13 Aug 2025 21:31:31 -0500 Subject: [PATCH 03/66] Update chainmail.dm --- code/modules/clothing/rogueclothes/armor/chainmail.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/clothing/rogueclothes/armor/chainmail.dm b/code/modules/clothing/rogueclothes/armor/chainmail.dm index 9161b12f..61398fbc 100644 --- a/code/modules/clothing/rogueclothes/armor/chainmail.dm +++ b/code/modules/clothing/rogueclothes/armor/chainmail.dm @@ -86,9 +86,10 @@ /obj/item/clothing/suit/roguetown/armor/chainmail/bikini name = "chainmail corslet" // corslet, from the old French 'cors' or bodice, with the diminutive 'let', used to describe lightweight military armor since 1500. Chosen here to replace 'bikini', an extreme anachronism. desc = "For the daring, affording maille's protection with light weight." + mob_overlay_icon = 'modular_causticcove/icons/roguetown/clothing/onmob/armor.dmi' icon_state = "chainkini" item_state = "chainkini" - allowed_sex = list(FEMALE) + allowed_sex = list(FEMALE, MALE) allowed_race = CLOTHED_RACES_TYPES body_parts_covered = CHEST|GROIN armor_class = ARMOR_CLASS_LIGHT //placed in the medium category to keep it with its parent obj From bf0fe075e255dce205056dbad09fac35bf3a0f47 Mon Sep 17 00:00:00 2001 From: SgtRyder <51496262+SgtRyder@users.noreply.github.com> Date: Wed, 13 Aug 2025 21:32:48 -0500 Subject: [PATCH 04/66] Update leather.dm --- code/modules/clothing/rogueclothes/armor/leather.dm | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/code/modules/clothing/rogueclothes/armor/leather.dm b/code/modules/clothing/rogueclothes/armor/leather.dm index 580c8043..bfa2a721 100644 --- a/code/modules/clothing/rogueclothes/armor/leather.dm +++ b/code/modules/clothing/rogueclothes/armor/leather.dm @@ -146,6 +146,7 @@ name = "leather corslet" desc = "Flexible cowhide armor. Lightweight, better than nothing. Trimmed to protect the heart and hips." body_parts_covered = CHEST|GROIN + mob_overlay_icon = 'modular_causticcove/icons/roguetown/clothing/onmob/armor.dmi' icon_state = "leatherkini" item_state = "leatherkini" allowed_sex = list(FEMALE, MALE) @@ -155,18 +156,20 @@ name = "studded leather corslet" desc = "Studded leather is the most durable of all hides and leathers and about as light. Trimmed to protect the heart and hips." body_parts_covered = CHEST|GROIN + mob_overlay_icon = 'modular_causticcove/icons/roguetown/clothing/onmob/armor.dmi' icon_state = "studleatherkini" item_state = "studleatherkini" - allowed_sex = list(FEMALE) + allowed_sex = list(FEMALE, MALE) allowed_race = CLOTHED_RACES_TYPES /obj/item/clothing/suit/roguetown/armor/leather/hide/bikini name = "hide corslet" desc = "A light armor of wildbeast hide. Far more durable than leather. Trimmed to protect the heart and hips." body_parts_covered = CHEST|GROIN + mob_overlay_icon = 'modular_causticcove/icons/roguetown/clothing/onmob/armor.dmi' icon_state = "hidearmorkini" item_state = "hidearmorkini" - allowed_sex = list(FEMALE) + allowed_sex = list(FEMALE, MALE) allowed_race = CLOTHED_RACES_TYPES /obj/item/clothing/suit/roguetown/armor/leather/vest From 596644bc2433386cbe8094182ab067b97dbeacf2 Mon Sep 17 00:00:00 2001 From: SgtRyder <51496262+SgtRyder@users.noreply.github.com> Date: Wed, 13 Aug 2025 21:34:21 -0500 Subject: [PATCH 05/66] Update plate.dm --- code/modules/clothing/rogueclothes/armor/plate.dm | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/code/modules/clothing/rogueclothes/armor/plate.dm b/code/modules/clothing/rogueclothes/armor/plate.dm index 78725309..6304e306 100644 --- a/code/modules/clothing/rogueclothes/armor/plate.dm +++ b/code/modules/clothing/rogueclothes/armor/plate.dm @@ -188,8 +188,9 @@ /obj/item/clothing/suit/roguetown/armor/plate/full/bikini name = "full-plate corset" desc = "Breastplate, pauldrons, couters, cuisses... did you forget something?" + mob_overlay_icon = 'modular_causticcove/icons/roguetown/clothing/onmob/armor.dmi' icon_state = "platekini" - allowed_sex = list(FEMALE) + allowed_sex = list(FEMALE, MALE) body_parts_covered = CHEST|GROIN|LEGS|ARMS equip_delay_self = 8 SECONDS unequip_delay_self = 8 SECONDS @@ -288,11 +289,12 @@ name = "half-plate corslet" desc = "A high breastplate and hip armor allowing flexibility and great protection, save for the stomach." body_parts_covered = CHEST|GROIN + mob_overlay_icon = 'modular_causticcove/icons/roguetown/clothing/onmob/armor.dmi' icon_state = "halfplatekini" item_state = "halfplatekini" armor = ARMOR_CUIRASS // Identical to steel cuirass, but covering the groin instead of the vitals. max_integrity = ARMOR_INT_CHEST_MEDIUM_STEEL // Identical to steel cuirasss. Same steel price. - allowed_sex = list(FEMALE) + allowed_sex = list(FEMALE, MALE) armor_class = ARMOR_CLASS_MEDIUM smelt_bar_num = 2 From e47e510ed726ea4c8962b2043c1c48fca8f902d9 Mon Sep 17 00:00:00 2001 From: SgtRyder <51496262+SgtRyder@users.noreply.github.com> Date: Wed, 13 Aug 2025 21:35:24 -0500 Subject: [PATCH 06/66] Create sewing.dm Adds sewing recipe for egyptian outfit --- .../code/modules/roguetown/roguecrafting/sewing.dm | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 modular_causticcove/code/modules/roguetown/roguecrafting/sewing.dm diff --git a/modular_causticcove/code/modules/roguetown/roguecrafting/sewing.dm b/modular_causticcove/code/modules/roguetown/roguecrafting/sewing.dm new file mode 100644 index 00000000..0c65483f --- /dev/null +++ b/modular_causticcove/code/modules/roguetown/roguecrafting/sewing.dm @@ -0,0 +1,7 @@ +/datum/crafting_recipe/roguetown/sewing/foreigndress + name = "foreign dress (3 cloth, 3 fibers)" + result = list(/obj/item/clothing/suit/roguetown/armor/egypt) + reqs = list(/obj/item/natural/cloth = 3, + /obj/item/natural/fibers = 3) + craftdiff = 4 + sellprice = 15 From 52bbc7a15492944488781e543f3647597186919f Mon Sep 17 00:00:00 2001 From: SgtRyder <51496262+SgtRyder@users.noreply.github.com> Date: Wed, 13 Aug 2025 21:36:39 -0500 Subject: [PATCH 07/66] Delete modular_causticcove/code/modules/roguetown/roguecrafting/weaving.dm Removed my now unused weaving.dm file (sewing for eqyptian outfit is in the sewing.dm file instead) --- .../modules/roguetown/roguecrafting/weaving.dm | 18 ------------------ 1 file changed, 18 deletions(-) delete mode 100644 modular_causticcove/code/modules/roguetown/roguecrafting/weaving.dm diff --git a/modular_causticcove/code/modules/roguetown/roguecrafting/weaving.dm b/modular_causticcove/code/modules/roguetown/roguecrafting/weaving.dm deleted file mode 100644 index 308bfabb..00000000 --- a/modular_causticcove/code/modules/roguetown/roguecrafting/weaving.dm +++ /dev/null @@ -1,18 +0,0 @@ -/datum/crafting_recipe/roguetown/sewing/foreigndress - name = "foreign dress" - result = list(/obj/item/clothing/suit/roguetown/armor/egypt) - reqs = list(/obj/item/natural/silk = 5) - craftdiff = 3 - sellprice = 35 - -/datum/crafting_recipe/roguetown/sewing/headdress - name = "foreign headdress (blue)" - result = list(/obj/item/clothing/head/roguetown/headdress) - reqs = list(/obj/item/natural/silk = 2) - craftdiff = 3 - -/datum/crafting_recipe/roguetown/sewing/headdressalt - name = "foreign headdress (red)" - result = list(/obj/item/clothing/head/roguetown/headdress/alt) - reqs = list(/obj/item/natural/silk = 2) - craftdiff = 3 From 92acdb01f81dbed330860b771ddbd5d8e29e71b1 Mon Sep 17 00:00:00 2001 From: SgtRyder <51496262+SgtRyder@users.noreply.github.com> Date: Wed, 13 Aug 2025 21:37:55 -0500 Subject: [PATCH 08/66] Update roguetown.dme --- roguetown.dme | 2 ++ 1 file changed, 2 insertions(+) diff --git a/roguetown.dme b/roguetown.dme index 52876f78..f8fe9699 100644 --- a/roguetown.dme +++ b/roguetown.dme @@ -2483,4 +2483,6 @@ #include "modular_hearthstone\code\modules\mob\living\simple_animal\rogue\orc.dm" #include "modular_hearthstone\code\modules\mob\living\simple_animal\rogue\rogue_corpse.dm" #include "modular_hearthstone\code\modules\reagents\reagent_containers\lux.dm" +#include "modular_causticcove\code\modules\clothing\rogueclothes\armor.dm" +#include "modular_causticcove\code\modules\roguetown\roguecrafting\sewing.dm" // END_INCLUDE From c797d3bacaa91c760d6be80445e80f6c36031732 Mon Sep 17 00:00:00 2001 From: granodd Date: Thu, 14 Aug 2025 03:52:44 -0400 Subject: [PATCH 09/66] new classes Gives shophand four new subclasses and adds spellthief to mage. --- code/__DEFINES/roguetown.dm | 1 + .../roguetown/adventurer/types/combat/mage.dm | 60 ++++- .../job_types/roguetown/youngfolk/shophand.dm | 225 ++++++++++++++++-- 3 files changed, 262 insertions(+), 24 deletions(-) diff --git a/code/__DEFINES/roguetown.dm b/code/__DEFINES/roguetown.dm index 19d3055a..36b35d14 100644 --- a/code/__DEFINES/roguetown.dm +++ b/code/__DEFINES/roguetown.dm @@ -397,6 +397,7 @@ GLOBAL_LIST_EMPTY(round_join_times) #define CTAG_PILGRIM "CAT_PILGRIM" // Pilgrim classes #define CTAG_ADVENTURER "CAT_ADVENTURER" // Adventurer classes #define CTAG_TOWNER "CAT_TOWNER" // Villager class - Villagers can use it +#define CTAG_SHOPHAND "CAT_SHOPHAND" // Shophand classes #define CTAG_ANTAG "CAT_ANTAG" // Antag class - results in an antag #define CTAG_BANDIT "CAT_BANDIT" // Bandit class - Tied to the bandit antag really #define CTAG_CHALLENGE "CAT_CHALLENGE" // Challenge class - Meant to be free for everyone diff --git a/code/modules/jobs/job_types/roguetown/adventurer/types/combat/mage.dm b/code/modules/jobs/job_types/roguetown/adventurer/types/combat/mage.dm index 50d99505..b4b2deeb 100644 --- a/code/modules/jobs/job_types/roguetown/adventurer/types/combat/mage.dm +++ b/code/modules/jobs/job_types/roguetown/adventurer/types/combat/mage.dm @@ -8,12 +8,13 @@ traits_applied = list(TRAIT_OUTLANDER) classes = list("Sorcerer" = "You are a learned mage and a scholar, having spent your life studying the arcane and its ways.", "Spellblade" = "You are skilled in both the arcyne art and swordsmanship. But you are not a master of either nor could you channel your magick in armor.", - "Spellsinger" = "You belong to a school of bards renowned for their study of both the arcane and the arts.") + "Spellsinger" = "You belong to a school of bards renowned for their study of both the arcane and the arts.", + "Spellthief" = "You are a back-alley thief who fell from their magical tutelage, or has stolen Noc's gift to further their own larceny.") /datum/outfit/job/roguetown/adventurer/mage/pre_equip(mob/living/carbon/human/H) ..() H.adjust_blindness(-3) - var/classes = list("Sorcerer", ,"Spellblade", "Spellsinger") + var/classes = list("Sorcerer", ,"Spellblade", "Spellsinger", "Spellthief") var/classchoice = input("Choose your archetypes", "Available archetypes") as anything in classes switch(classchoice) @@ -184,3 +185,58 @@ backr = /obj/item/rogue/instrument/viola if("Vocal Talisman") backr = /obj/item/rogue/instrument/vocals + if("Spellthief") + to_chat(H, span_warning("You are a rogue, either by choice or hardship. Your study of the arcyne knowledge, stolen or not, now aids in your roguish endeavors.")) + armor = /obj/item/clothing/suit/roguetown/armor/leather + backl = /obj/item/storage/backpack/rogue/backpack + backr = /obj/item/gun/ballistic/revolver/grenadelauncher/bow + shoes = /obj/item/clothing/shoes/roguetown/boots + neck = /obj/item/storage/belt/rogue/pouch/coins/poor + wrists = /obj/item/clothing/wrists/roguetown/bracers/leather + belt = /obj/item/storage/belt/rogue/leather + beltl = /obj/item/quiver/Warrows + beltr = /obj/item/rogueweapon/mace/cudgel + gloves = /obj/item/clothing/gloves/roguetown/fingerless + pants = /obj/item/clothing/under/roguetown/trou/leather + shirt = /obj/item/clothing/suit/roguetown/armor/gambeson + cloak = /obj/item/clothing/cloak/raincloak/mortus + backpack_contents = list( + /obj/item/flashlight/flare/torch = 1, + /obj/item/rogueweapon/huntingknife/idagger/steel = 1, + /obj/item/lockpickring/mundane = 1, + /obj/item/recipe_book/survival = 1, + /obj/item/rogueweapon/scabbard/sheath = 1 + ) + if(H.mind) + H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/touch/prestidigitation) + H.mind.AddSpell(new /obj/effect/proc_holder/spell/invoked/invisibility) + H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/touch/lesserknock) + H.mind.AddSpell(new /obj/effect/proc_holder/spell/invoked/projectile/fetch) + H.adjust_skillrank(/datum/skill/misc/tracking, 3, TRUE) + H.adjust_skillrank(/datum/skill/combat/knives, 3, TRUE) + H.adjust_skillrank(/datum/skill/combat/bows, 2, TRUE) + H.adjust_skillrank(/datum/skill/combat/maces, 3, TRUE) + H.adjust_skillrank(/datum/skill/misc/swimming, 1, TRUE) + H.adjust_skillrank(/datum/skill/combat/wrestling, 2, TRUE) + H.adjust_skillrank(/datum/skill/combat/unarmed, 1, TRUE) + H.adjust_skillrank(/datum/skill/misc/athletics, 3, TRUE) + H.adjust_skillrank(/datum/skill/misc/climbing, 3, TRUE) + H.adjust_skillrank(/datum/skill/misc/sneaking, 3, TRUE) + H.adjust_skillrank(/datum/skill/misc/stealing, 3, TRUE) + H.adjust_skillrank(/datum/skill/misc/lockpicking, 3, TRUE) + H.adjust_skillrank(/datum/skill/craft/traps, 3, TRUE) + H.adjust_skillrank(/datum/skill/misc/reading, 2, TRUE) + H.adjust_skillrank(/datum/skill/magic/arcane, 2, TRUE) + H.change_stat("strength", -1) + H.change_stat("intelligence", 2) + H.change_stat("perception", 1) + H.change_stat("endurance", 1) + H.change_stat("speed", 2) + H.cmode_music = 'sound/music/combat_rogue.ogg' + switch(H.patron?.type) + if(/datum/patron/inhumen/zizo) + H.cmode_music = 'sound/music/combat_cult.ogg' + H.grant_language(/datum/language/thievescant) + H?.mind.adjust_spellpoints(12) + ADD_TRAIT(H, TRAIT_DODGEEXPERT, TRAIT_GENERIC) + ADD_TRAIT(H, TRAIT_ARCYNE_T2, TRAIT_GENERIC) \ No newline at end of file diff --git a/code/modules/jobs/job_types/roguetown/youngfolk/shophand.dm b/code/modules/jobs/job_types/roguetown/youngfolk/shophand.dm index 3b2d3908..20798a6a 100644 --- a/code/modules/jobs/job_types/roguetown/youngfolk/shophand.dm +++ b/code/modules/jobs/job_types/roguetown/youngfolk/shophand.dm @@ -9,35 +9,215 @@ allowed_races = RACES_ALL_KINDS allowed_sexes = list(MALE, FEMALE) allowed_ages = list(AGE_ADULT) - - tutorial = "You work the largest store in the Peaks by grace of the Merchant who has shackled you to this drudgery. The work of stocking shelves and taking inventory for your employer is mind-numbing and repetitive--but at least you have a roof over your head and comfortable surroundings. With time, perhaps you will one day be more than a glorified servant." - - outfit = /datum/outfit/job/roguetown/shophand + advclass_cat_rolls = list(CTAG_SHOPHAND = 20) + tutorial = "You work the largest store in the Peaks by the grace of the Merchant who has shackled you in service to the Merchant's Guild. You do as you are told and in return are rewarded with meager pay and a roof above your head. With time, perhaps you will one day be more than a glorified servant." +//"You work the largest store in the Peaks by grace of the Merchant who has shackled you to this drudgery. The work of stocking shelves and taking inventory for your employer is mind-numbing and repetitive--but at least you have a roof over your head and comfortable surroundings. With time, perhaps you will one day be more than a glorified servant." + //outfit = /datum/outfit/job/roguetown/shophand display_order = JDO_SHOPHAND give_bank_account = TRUE min_pq = -10 max_pq = null round_contrib_points = 2 -/datum/outfit/job/roguetown/shophand/pre_equip(mob/living/carbon/human/H) +/datum/job/roguetown/shophand/after_spawn(mob/living/L, mob/M, latejoin = TRUE) + ..() + if(L) + var/mob/living/carbon/human/H = L + H.advsetup = 1 + H.invisibility = INVISIBILITY_MAXIMUM + H.become_blind("advsetup") + +/datum/advclass/guildthug + name = "Guild Thug" + tutorial = "You've been hired by the Merchant's Guild to be their brawn. Valued for your strength and little else, you assist the Merchant in hauling heavy goods, or strong arming potential thiefs." + allowed_sexes = list(MALE, FEMALE) + allowed_races = RACES_ALL_KINDS + outfit = /datum/outfit/job/roguetown/adventurer/guildthug + category_tags = list(CTAG_SHOPHAND) + +/datum/outfit/job/roguetown/adventurer/guildthug/pre_equip(mob/living/carbon/human/H) + ..() + H.adjust_skillrank(/datum/skill/combat/wrestling, 4, TRUE) + H.adjust_skillrank(/datum/skill/combat/unarmed, 4, TRUE) + H.adjust_skillrank(/datum/skill/combat/axes, 2, TRUE) + H.adjust_skillrank(/datum/skill/combat/knives, 2, TRUE) + H.adjust_skillrank(/datum/skill/combat/maces, 3, TRUE) + H.adjust_skillrank(/datum/skill/craft/cooking, 1, TRUE) + H.adjust_skillrank(/datum/skill/misc/athletics, 4, TRUE) + H.adjust_skillrank(/datum/skill/misc/swimming, 3, TRUE) + H.adjust_skillrank(/datum/skill/misc/climbing, 4, TRUE) + H.adjust_skillrank(/datum/skill/labor/mining, 3, TRUE) + H.adjust_skillrank(/datum/skill/labor/lumberjacking, 3, TRUE) + H.adjust_skillrank(/datum/skill/labor/fishing, 1, TRUE) + H.adjust_skillrank(/datum/skill/misc/sneaking, 1, TRUE) + H.adjust_skillrank(/datum/skill/misc/stealing, 1, TRUE) + var/weapons = list("Knuckles","Cudgel") + var/weapon_choice = input("Choose your weapon.", "TAKE UP ARMS") as anything in weapons + H.set_blindness(0) + switch(weapon_choice) + if("Knuckles") + beltr = /obj/item/rogueweapon/knuckles/bronzeknuckles + if("Cudgel") + beltl = /obj/item/rogueweapon/mace/cudgel + head = /obj/item/clothing/head/roguetown/roguehood/shalal/heavyhood + belt = /obj/item/storage/belt/rogue/leather + shirt = /obj/item/clothing/suit/roguetown/armor/gambeson/light + pants = /obj/item/clothing/under/roguetown/trou/leather + shoes = /obj/item/clothing/shoes/roguetown/boots + backl = /obj/item/storage/backpack/rogue/satchel + wrists = /obj/item/clothing/wrists/roguetown/bracers/leather + gloves = /obj/item/clothing/gloves/roguetown/fingerless + neck = /obj/item/storage/belt/rogue/pouch/coins/poor + armor = /obj/item/clothing/suit/roguetown/armor/leather/heavy/coat + backpack_contents = list( + /obj/item/flashlight/flare/torch = 1, + /obj/item/rogueweapon/huntingknife = 1, + /obj/item/rogueweapon/scabbard/sheath = 1, + /obj/item/storage/keyring/merchant = 1, + ) + H.change_stat("strength", 2) + H.change_stat("endurance", 1) + H.change_stat("constitution", 3) + H.change_stat("intelligence", -1) + H.grant_language(/datum/language/thievescant) + ADD_TRAIT(H, TRAIT_SEEPRICES_SHITTY, "[type]") + if(H.mind) + H.mind.AddSpell(new /obj/effect/proc_holder/spell/invoked/appraise/secular) + +/datum/advclass/guildinformant + name = "Guild Informant" + tutorial = "You started as a basic street urchin sneaking and stealing as you needed. On one fateful day you chose to steal from the Merchant's Guild, and now find yourself indebted to their service. Now, you serve as their eyes and ears on the streets of the city." + allowed_sexes = list(MALE, FEMALE) + allowed_races = RACES_ALL_KINDS + outfit = /datum/outfit/job/roguetown/adventurer/guildinformant + category_tags = list(CTAG_SHOPHAND) + +/datum/outfit/job/roguetown/adventurer/guildinformant/pre_equip(mob/living/carbon/human/H) + ..() + H.adjust_skillrank(/datum/skill/combat/wrestling, 2, TRUE) + H.adjust_skillrank(/datum/skill/combat/unarmed, 2, TRUE) + H.adjust_skillrank(/datum/skill/combat/knives, 2, TRUE) + H.adjust_skillrank(/datum/skill/combat/maces, 3, TRUE) + H.adjust_skillrank(/datum/skill/craft/cooking, 1, TRUE) + H.adjust_skillrank(/datum/skill/misc/athletics, 4, TRUE) + H.adjust_skillrank(/datum/skill/misc/swimming, 2, TRUE) + H.adjust_skillrank(/datum/skill/misc/climbing, 4, TRUE) + H.adjust_skillrank(/datum/skill/misc/sneaking, 3, TRUE) + H.adjust_skillrank(/datum/skill/misc/stealing, 3, TRUE) + H.adjust_skillrank(/datum/skill/misc/lockpicking, 3, TRUE) + H.adjust_skillrank(/datum/skill/misc/reading, 1, TRUE) + belt = /obj/item/storage/belt/rogue/leather + beltl = /obj/item/rogueweapon/mace/cudgel + shirt = /obj/item/clothing/suit/roguetown/shirt/undershirt + pants = /obj/item/clothing/under/roguetown/trou/leather + shoes = /obj/item/clothing/shoes/roguetown/boots + backl = /obj/item/storage/backpack/rogue/satchel + wrists = /obj/item/clothing/wrists/roguetown/bracers/leather + gloves = /obj/item/clothing/gloves/roguetown/fingerless_leather + neck = /obj/item/storage/belt/rogue/pouch/coins/poor + armor = /obj/item/clothing/suit/roguetown/armor/leather + cloak = /obj/item/clothing/cloak/raincloak/mortus + backpack_contents = list( + /obj/item/flashlight/flare/torch = 1, + /obj/item/rogueweapon/huntingknife/idagger/steel = 1, + /obj/item/rogueweapon/scabbard/sheath = 1, + /obj/item/storage/keyring/merchant = 1, + ) + H.change_stat("speed", 3) + H.change_stat("endurance", 1) + H.change_stat("constitution", 1) + H.change_stat("intelligence", 1) + H.grant_language(/datum/language/thievescant) + ADD_TRAIT(H, TRAIT_SEEPRICES_SHITTY, "[type]") + if(H.mind) + H.mind.AddSpell(new /obj/effect/proc_holder/spell/invoked/appraise/secular) + +/datum/advclass/hiredservant + name = "Hired Servant" + tutorial = "You are an expert courtier, though find yourself in the service to an aristocrat rather than nobility. Your ability to cater to your Merchant's needs are unparalleled." + allowed_sexes = list(MALE, FEMALE) + allowed_races = RACES_ALL_KINDS + outfit = /datum/outfit/job/roguetown/adventurer/hiredservant + category_tags = list(CTAG_SHOPHAND) + +/datum/outfit/job/roguetown/adventurer/hiredservant/pre_equip(mob/living/carbon/human/H) ..() + backr = /obj/item/storage/backpack/rogue/satchel + backpack_contents = list( + /obj/item/kitchen/rollingpin = 1, + /obj/item/flint = 1, + /obj/item/cooking/pan = 1, + /obj/item/reagent_containers/peppermill = 1, + ) + belt = /obj/item/storage/belt/rogue/leather + beltr = /obj/item/storage/keyring/merchant + beltl = /obj/item/storage/belt/rogue/pouch/coins/poor + r_hand = /obj/item/reagent_containers/glass/bucket/pot + var/loadouts = list("Maid","Butler") + var/loadout_choice = input("Choose your attire.") as anything in loadouts + H.set_blindness(0) + switch(loadout_choice) + if("Maid") + head = /obj/item/clothing/head/roguetown/armingcap + armor = /obj/item/clothing/suit/roguetown/shirt/dress/gen/black + shoes = /obj/item/clothing/shoes/roguetown/simpleshoes + pants = /obj/item/clothing/under/roguetown/tights/stockings/black + cloak = /obj/item/clothing/cloak/apron/waist + if("Butler") + pants = /obj/item/clothing/under/roguetown/tights/black + shirt = /obj/item/clothing/suit/roguetown/shirt/undershirt + shoes = /obj/item/clothing/shoes/roguetown/shortboots + armor = /obj/item/clothing/suit/roguetown/armor/leather/vest/black + H.adjust_skillrank(/datum/skill/combat/knives, 2, TRUE) + H.adjust_skillrank(/datum/skill/craft/cooking, 4, TRUE) + H.adjust_skillrank(/datum/skill/craft/crafting, 3, TRUE) + H.adjust_skillrank(/datum/skill/misc/sewing, 3, TRUE) + H.adjust_skillrank(/datum/skill/misc/medicine, 2, TRUE) + H.adjust_skillrank(/datum/skill/misc/reading, 1, TRUE) + H.adjust_skillrank(/datum/skill/misc/sneaking, 2, TRUE) + H.adjust_skillrank(/datum/skill/misc/stealing, 3, TRUE) + H.adjust_skillrank(/datum/skill/misc/lockpicking, 1, TRUE) + H.adjust_skillrank(/datum/skill/misc/climbing, 2, TRUE) + H.adjust_skillrank(/datum/skill/labor/farming, 3, TRUE) + H.change_stat("speed", 1) + H.change_stat("intelligence", 1) + H.change_stat("perception", 2) + ADD_TRAIT(H, TRAIT_CICERONE, TRAIT_GENERIC) ADD_TRAIT(H, TRAIT_SEEPRICES_SHITTY, "[type]") - if(should_wear_femme_clothes(H)) - pants = /obj/item/clothing/under/roguetown/tights - armor = /obj/item/clothing/suit/roguetown/shirt/dress/gen/blue - shoes = /obj/item/clothing/shoes/roguetown/simpleshoes - belt = /obj/item/storage/belt/rogue/leather - beltr = /obj/item/storage/belt/rogue/pouch/coins/poor - beltl = /obj/item/storage/keyring/merchant - backr = /obj/item/storage/backpack/rogue/satchel - else if(should_wear_masc_clothes(H)) - pants = /obj/item/clothing/under/roguetown/tights - shirt = /obj/item/clothing/suit/roguetown/shirt/undershirt - shoes = /obj/item/clothing/shoes/roguetown/simpleshoes - belt = /obj/item/storage/belt/rogue/leather - beltr = /obj/item/storage/belt/rogue/pouch/coins/poor - beltl = /obj/item/storage/keyring/merchant - backr = /obj/item/storage/backpack/rogue/satchel + if(H.mind) + H.mind.AddSpell(new /obj/effect/proc_holder/spell/invoked/appraise/secular) + +//The original version of the shophand +/datum/advclass/shoplackey + name = "Shop Lackey" + tutorial = "You were once a beggar on the street struggling to find your next meal. The Merchant's Guild offered you a roof in exchange for your labor. Now you find yourself as little more than an indentured servant to the Merchant and their whims." + allowed_sexes = list(MALE, FEMALE) + allowed_races = RACES_ALL_KINDS + outfit = /datum/outfit/job/roguetown/adventurer/shoplackey + category_tags = list(CTAG_SHOPHAND) + +/datum/outfit/job/roguetown/adventurer/shoplackey/pre_equip(mob/living/carbon/human/H) + ..() + var/loadouts = list("Shirt","Dress") + var/loadout_choice = input("Choose your attire.") as anything in loadouts + H.set_blindness(0) + switch(loadout_choice) + if("Dress") + pants = /obj/item/clothing/under/roguetown/tights + armor = /obj/item/clothing/suit/roguetown/shirt/dress/gen/blue + shoes = /obj/item/clothing/shoes/roguetown/simpleshoes + belt = /obj/item/storage/belt/rogue/leather + beltr = /obj/item/storage/belt/rogue/pouch/coins/poor + beltl = /obj/item/storage/keyring/merchant + backr = /obj/item/storage/backpack/rogue/satchel + if("Shirt") + pants = /obj/item/clothing/under/roguetown/tights + shirt = /obj/item/clothing/suit/roguetown/shirt/undershirt + shoes = /obj/item/clothing/shoes/roguetown/simpleshoes + belt = /obj/item/storage/belt/rogue/leather + beltr = /obj/item/storage/belt/rogue/pouch/coins/poor + beltl = /obj/item/storage/keyring/merchant + backr = /obj/item/storage/backpack/rogue/satchel //worse skills than a normal peasant, generally, with random bad combat skill H.adjust_skillrank(/datum/skill/misc/stealing, 4, TRUE) H.adjust_skillrank(/datum/skill/misc/sneaking, 2, TRUE) @@ -52,6 +232,7 @@ H.change_stat("speed", 1) H.change_stat("intelligence", 1) H.change_stat("fortune", 1) + ADD_TRAIT(H, TRAIT_SEEPRICES_SHITTY, "[type]") if(H.mind) H.mind.AddSpell(new /obj/effect/proc_holder/spell/invoked/appraise/secular) if(prob(33)) @@ -61,4 +242,4 @@ else //the legendary shopARM H.adjust_skillrank(/datum/skill/combat/swords, 1, TRUE) H.adjust_skillrank(/datum/skill/combat/maces, 1, TRUE) - H.change_stat("strength", 1) + H.change_stat("strength", 1) \ No newline at end of file From 79a59c90d799e20aae9e4dd69064be987ebfe969 Mon Sep 17 00:00:00 2001 From: granodd Date: Thu, 14 Aug 2025 04:23:30 -0400 Subject: [PATCH 10/66] annihilates pq requirements Eliminates most pq requirements by making them null. --- .../modules/jobs/job_types/roguetown/Inquisition/orthodoxist.dm | 2 +- code/modules/jobs/job_types/roguetown/Inquisition/puritan.dm | 2 +- code/modules/jobs/job_types/roguetown/adventurer/bandit.dm | 2 +- .../job_types/roguetown/adventurer/types/special/courtagent.dm | 2 +- code/modules/jobs/job_types/roguetown/adventurer/wretch.dm | 2 +- code/modules/jobs/job_types/roguetown/church/druid.dm | 2 +- code/modules/jobs/job_types/roguetown/church/martyr.dm | 2 +- code/modules/jobs/job_types/roguetown/church/monk.dm | 2 +- code/modules/jobs/job_types/roguetown/church/priest.dm | 2 +- code/modules/jobs/job_types/roguetown/church/templar.dm | 2 +- code/modules/jobs/job_types/roguetown/courtier/butler.dm | 2 +- code/modules/jobs/job_types/roguetown/courtier/councillor.dm | 2 +- code/modules/jobs/job_types/roguetown/courtier/jester.dm | 2 +- code/modules/jobs/job_types/roguetown/courtier/magician.dm | 2 +- code/modules/jobs/job_types/roguetown/courtier/physician.dm | 2 +- code/modules/jobs/job_types/roguetown/garrison/bogguard.dm | 2 +- code/modules/jobs/job_types/roguetown/garrison/dungeoneer.dm | 2 +- code/modules/jobs/job_types/roguetown/garrison/manorguard.dm | 2 +- code/modules/jobs/job_types/roguetown/garrison/sergeant.dm | 2 +- code/modules/jobs/job_types/roguetown/garrison/townguard.dm | 2 +- code/modules/jobs/job_types/roguetown/garrison/veteran.dm | 2 +- code/modules/jobs/job_types/roguetown/goblin/chieftain.dm | 2 +- code/modules/jobs/job_types/roguetown/goblin/tribalguard.dm | 2 +- .../jobs/job_types/roguetown/mercenaries/classes/forlorn.dm | 2 +- code/modules/jobs/job_types/roguetown/mercenaries/mercenary.dm | 2 +- code/modules/jobs/job_types/roguetown/nobility/bailiff.dm | 2 +- code/modules/jobs/job_types/roguetown/nobility/captain.dm | 2 +- code/modules/jobs/job_types/roguetown/nobility/consort.dm | 2 +- code/modules/jobs/job_types/roguetown/nobility/hand.dm | 2 +- code/modules/jobs/job_types/roguetown/nobility/knight.dm | 2 +- code/modules/jobs/job_types/roguetown/nobility/lord.dm | 2 +- code/modules/jobs/job_types/roguetown/nobility/steward.dm | 2 +- code/modules/jobs/job_types/roguetown/nobility/suitor.dm | 2 +- code/modules/jobs/job_types/roguetown/yeomen/archivist.dm | 2 +- code/modules/jobs/job_types/roguetown/yeomen/guildmaster.dm | 2 +- code/modules/jobs/job_types/roguetown/yeomen/merchant.dm | 2 +- code/modules/jobs/job_types/roguetown/yeomen/nightmaster.dm | 2 +- code/modules/jobs/job_types/roguetown/yeomen/villagechief.dm | 2 +- code/modules/jobs/job_types/roguetown/youngfolk/prince.dm | 2 +- 39 files changed, 39 insertions(+), 39 deletions(-) diff --git a/code/modules/jobs/job_types/roguetown/Inquisition/orthodoxist.dm b/code/modules/jobs/job_types/roguetown/Inquisition/orthodoxist.dm index b2138572..2b967357 100644 --- a/code/modules/jobs/job_types/roguetown/Inquisition/orthodoxist.dm +++ b/code/modules/jobs/job_types/roguetown/Inquisition/orthodoxist.dm @@ -12,7 +12,7 @@ outfit = null outfit_female = null display_order = JDO_ORTHODOXIST - min_pq = 5 // We need you to be atleast kinda competent to do this. This is a soft antaggy sorta role. Also needs to know wtf a PSYDON is + min_pq = null //5 // We need you to be atleast kinda competent to do this. This is a soft antaggy sorta role. Also needs to know wtf a PSYDON is max_pq = null round_contrib_points = 2 advclass_cat_rolls = list(CTAG_INQUISITION = 20) diff --git a/code/modules/jobs/job_types/roguetown/Inquisition/puritan.dm b/code/modules/jobs/job_types/roguetown/Inquisition/puritan.dm index 913e708b..fe8c31e7 100644 --- a/code/modules/jobs/job_types/roguetown/Inquisition/puritan.dm +++ b/code/modules/jobs/job_types/roguetown/Inquisition/puritan.dm @@ -17,7 +17,7 @@ display_order = JDO_PURITAN advclass_cat_rolls = list(CTAG_PURITAN = 20) give_bank_account = 30 - min_pq = 10 + min_pq = null //10 max_pq = null round_contrib_points = 2 diff --git a/code/modules/jobs/job_types/roguetown/adventurer/bandit.dm b/code/modules/jobs/job_types/roguetown/adventurer/bandit.dm index ce7ace92..11dcaca5 100644 --- a/code/modules/jobs/job_types/roguetown/adventurer/bandit.dm +++ b/code/modules/jobs/job_types/roguetown/adventurer/bandit.dm @@ -16,7 +16,7 @@ display_order = JDO_BANDIT announce_latejoin = FALSE - min_pq = 3 + min_pq = null //3 max_pq = null round_contrib_points = 5 diff --git a/code/modules/jobs/job_types/roguetown/adventurer/types/special/courtagent.dm b/code/modules/jobs/job_types/roguetown/adventurer/types/special/courtagent.dm index 829cb45a..aeb85580 100644 --- a/code/modules/jobs/job_types/roguetown/adventurer/types/special/courtagent.dm +++ b/code/modules/jobs/job_types/roguetown/adventurer/types/special/courtagent.dm @@ -6,7 +6,7 @@ spawn_positions = 2 round_contrib_points = 2 tutorial = "Whether acquired by merit, shrewd negotiation or fulfilled bounties, you have found yourself under the underhanded employ of the Hand. Fulfill desires and whims of the court that they would rather not be publicly known. Your position is anything but secure, and any mistake can leave you disowned and charged like the petty criminal are. Garrison and Court members know who you are." - min_pq = 5 + min_pq = null //5 job_reopens_slots_on_death = FALSE always_show_on_latechoices = FALSE show_in_credits = TRUE diff --git a/code/modules/jobs/job_types/roguetown/adventurer/wretch.dm b/code/modules/jobs/job_types/roguetown/adventurer/wretch.dm index 3dbb8f3c..08e5a237 100644 --- a/code/modules/jobs/job_types/roguetown/adventurer/wretch.dm +++ b/code/modules/jobs/job_types/roguetown/adventurer/wretch.dm @@ -12,7 +12,7 @@ outfit_female = null display_order = JDO_WRETCH show_in_credits = FALSE - min_pq = 20 + min_pq = null //20 max_pq = null obsfuscated_job = TRUE diff --git a/code/modules/jobs/job_types/roguetown/church/druid.dm b/code/modules/jobs/job_types/roguetown/church/druid.dm index e72e4138..48b80425 100644 --- a/code/modules/jobs/job_types/roguetown/church/druid.dm +++ b/code/modules/jobs/job_types/roguetown/church/druid.dm @@ -15,7 +15,7 @@ display_order = JDO_DRUID give_bank_account = TRUE - min_pq = 0 + min_pq = null max_pq = null round_contrib_points = 2 cmode_music = 'sound/music/combat_druid.ogg' diff --git a/code/modules/jobs/job_types/roguetown/church/martyr.dm b/code/modules/jobs/job_types/roguetown/church/martyr.dm index 13ddfae1..e6599cc3 100644 --- a/code/modules/jobs/job_types/roguetown/church/martyr.dm +++ b/code/modules/jobs/job_types/roguetown/church/martyr.dm @@ -427,7 +427,7 @@ allowed_races = RACES_NO_CONSTRUCT allowed_patrons = ALL_DIVINE_PATRONS outfit = /datum/outfit/job/roguetown/martyr - min_pq = 10 //Cus it's a Martyr of the Ten. Get it. + min_pq = null //10 Cus it's a Martyr of the Ten. Get it. max_pq = null round_contrib_points = 4 total_positions = 1 diff --git a/code/modules/jobs/job_types/roguetown/church/monk.dm b/code/modules/jobs/job_types/roguetown/church/monk.dm index 1d028840..7e8fba5d 100644 --- a/code/modules/jobs/job_types/roguetown/church/monk.dm +++ b/code/modules/jobs/job_types/roguetown/church/monk.dm @@ -14,7 +14,7 @@ display_order = JDO_MONK give_bank_account = TRUE - min_pq = 1 //A step above Churchling, should funnel new players to the churchling role to learn miracles at a more sedate pace + min_pq = null //1 A step above Churchling, should funnel new players to the churchling role to learn miracles at a more sedate pace max_pq = null round_contrib_points = 2 diff --git a/code/modules/jobs/job_types/roguetown/church/priest.dm b/code/modules/jobs/job_types/roguetown/church/priest.dm index 119ba35a..ce8fafbc 100644 --- a/code/modules/jobs/job_types/roguetown/church/priest.dm +++ b/code/modules/jobs/job_types/roguetown/church/priest.dm @@ -18,7 +18,7 @@ display_order = JDO_PRIEST give_bank_account = 115 - min_pq = 5 // You should know the basics of things if you're going to lead the town's entire religious sector + min_pq = null //5 You should know the basics of things if you're going to lead the town's entire religious sector max_pq = null round_contrib_points = 3 diff --git a/code/modules/jobs/job_types/roguetown/church/templar.dm b/code/modules/jobs/job_types/roguetown/church/templar.dm index b89a1b3a..9a8b2099 100644 --- a/code/modules/jobs/job_types/roguetown/church/templar.dm +++ b/code/modules/jobs/job_types/roguetown/church/templar.dm @@ -9,7 +9,7 @@ allowed_races = RACES_ALL_KINDS allowed_patrons = ALL_DIVINE_PATRONS outfit = /datum/outfit/job/roguetown/templar - min_pq = 3 //Deus vult, but only according to the proper escalation rules + min_pq = null //3 Deus vult, but only according to the proper escalation rules max_pq = null round_contrib_points = 2 total_positions = 4 diff --git a/code/modules/jobs/job_types/roguetown/courtier/butler.dm b/code/modules/jobs/job_types/roguetown/courtier/butler.dm index 1f69f04a..e10b98b6 100644 --- a/code/modules/jobs/job_types/roguetown/courtier/butler.dm +++ b/code/modules/jobs/job_types/roguetown/courtier/butler.dm @@ -13,7 +13,7 @@ advclass_cat_rolls = list(CTAG_SENESCHAL = 20) display_order = JDO_BUTLER give_bank_account = 30 - min_pq = 3 + min_pq = null //3 max_pq = null round_contrib_points = 3 diff --git a/code/modules/jobs/job_types/roguetown/courtier/councillor.dm b/code/modules/jobs/job_types/roguetown/courtier/councillor.dm index 6e0bfbaf..6f3f46e8 100644 --- a/code/modules/jobs/job_types/roguetown/courtier/councillor.dm +++ b/code/modules/jobs/job_types/roguetown/courtier/councillor.dm @@ -15,7 +15,7 @@ give_bank_account = 40 noble_income = 20 - min_pq = 1 //Probably a bad idea to have a complete newbie advising the monarch + min_pq = null //1 Probably a bad idea to have a complete newbie advising the monarch max_pq = null round_contrib_points = 2 cmode_music = 'sound/music/combat_noble.ogg' diff --git a/code/modules/jobs/job_types/roguetown/courtier/jester.dm b/code/modules/jobs/job_types/roguetown/courtier/jester.dm index efa37db4..a85479f5 100644 --- a/code/modules/jobs/job_types/roguetown/courtier/jester.dm +++ b/code/modules/jobs/job_types/roguetown/courtier/jester.dm @@ -17,7 +17,7 @@ outfit = /datum/outfit/job/roguetown/jester display_order = JDO_JESTER give_bank_account = TRUE - min_pq = -4 //silly jesters are funny so low PQ requirement + min_pq = null //-4 silly jesters are funny so low PQ requirement max_pq = null round_contrib_points = 2 diff --git a/code/modules/jobs/job_types/roguetown/courtier/magician.dm b/code/modules/jobs/job_types/roguetown/courtier/magician.dm index da0c5e3c..9bb9506c 100644 --- a/code/modules/jobs/job_types/roguetown/courtier/magician.dm +++ b/code/modules/jobs/job_types/roguetown/courtier/magician.dm @@ -17,7 +17,7 @@ outfit = /datum/outfit/job/roguetown/magician whitelist_req = TRUE give_bank_account = 47 - min_pq = 4 //High potential for abuse, lovepotion/killersice/greater fireball is not for the faint of heart + min_pq = null //4 High potential for abuse, lovepotion/killersice/greater fireball is not for the faint of heart max_pq = null round_contrib_points = 2 cmode_music = 'sound/music/combat_bandit_mage.ogg' diff --git a/code/modules/jobs/job_types/roguetown/courtier/physician.dm b/code/modules/jobs/job_types/roguetown/courtier/physician.dm index 0a12f4b2..fe3780c1 100644 --- a/code/modules/jobs/job_types/roguetown/courtier/physician.dm +++ b/code/modules/jobs/job_types/roguetown/courtier/physician.dm @@ -18,7 +18,7 @@ whitelist_req = TRUE give_bank_account = 30 - min_pq = 3 //Please don't kill the duke by operating on strong intent. Play apothecary until you're deserving of the great white beak of doom + min_pq = null //3 Please don't kill the duke by operating on strong intent. Play apothecary until you're deserving of the great white beak of doom max_pq = null round_contrib_points = 3 diff --git a/code/modules/jobs/job_types/roguetown/garrison/bogguard.dm b/code/modules/jobs/job_types/roguetown/garrison/bogguard.dm index 94fb281c..2c0ea620 100644 --- a/code/modules/jobs/job_types/roguetown/garrison/bogguard.dm +++ b/code/modules/jobs/job_types/roguetown/garrison/bogguard.dm @@ -20,7 +20,7 @@ advclass_cat_rolls = list(CTAG_WARDEN = 20) give_bank_account = 16 - min_pq = 0 + min_pq = null //0 max_pq = null round_contrib_points = 2 diff --git a/code/modules/jobs/job_types/roguetown/garrison/dungeoneer.dm b/code/modules/jobs/job_types/roguetown/garrison/dungeoneer.dm index fbd380e7..86191cbb 100644 --- a/code/modules/jobs/job_types/roguetown/garrison/dungeoneer.dm +++ b/code/modules/jobs/job_types/roguetown/garrison/dungeoneer.dm @@ -18,7 +18,7 @@ announce_latejoin = FALSE outfit = /datum/outfit/job/roguetown/dungeoneer give_bank_account = 25 - min_pq = 0 + min_pq = null //0 max_pq = null round_contrib_points = 2 diff --git a/code/modules/jobs/job_types/roguetown/garrison/manorguard.dm b/code/modules/jobs/job_types/roguetown/garrison/manorguard.dm index f7b0b057..4a8b0e0c 100644 --- a/code/modules/jobs/job_types/roguetown/garrison/manorguard.dm +++ b/code/modules/jobs/job_types/roguetown/garrison/manorguard.dm @@ -19,7 +19,7 @@ advclass_cat_rolls = list(CTAG_MENATARMS = 20) give_bank_account = 22 - min_pq = 3 + min_pq = null //3 max_pq = null round_contrib_points = 2 diff --git a/code/modules/jobs/job_types/roguetown/garrison/sergeant.dm b/code/modules/jobs/job_types/roguetown/garrison/sergeant.dm index ea22be49..260da96b 100644 --- a/code/modules/jobs/job_types/roguetown/garrison/sergeant.dm +++ b/code/modules/jobs/job_types/roguetown/garrison/sergeant.dm @@ -19,7 +19,7 @@ advclass_cat_rolls = list(CTAG_SERGEANT = 20) give_bank_account = 50 - min_pq = 6 + min_pq = null //6 max_pq = null cmode_music = 'sound/music/combat_ManAtArms.ogg' diff --git a/code/modules/jobs/job_types/roguetown/garrison/townguard.dm b/code/modules/jobs/job_types/roguetown/garrison/townguard.dm index d1b730e2..0eb08cad 100644 --- a/code/modules/jobs/job_types/roguetown/garrison/townguard.dm +++ b/code/modules/jobs/job_types/roguetown/garrison/townguard.dm @@ -17,7 +17,7 @@ advclass_cat_rolls = list(CTAG_WATCH = 20) give_bank_account = 16 - min_pq = 1 //Introductory guard role, but still requires knowledge of escalation. + min_pq = null //1 //Introductory guard role, but still requires knowledge of escalation. max_pq = null round_contrib_points = 2 diff --git a/code/modules/jobs/job_types/roguetown/garrison/veteran.dm b/code/modules/jobs/job_types/roguetown/garrison/veteran.dm index f3be018c..ff902176 100644 --- a/code/modules/jobs/job_types/roguetown/garrison/veteran.dm +++ b/code/modules/jobs/job_types/roguetown/garrison/veteran.dm @@ -14,7 +14,7 @@ display_order = JDO_VET whitelist_req = TRUE give_bank_account = 35 - min_pq = 5 //Should...probably actually be a veteran of at least a few weeks before trying to teach others + min_pq = null //5 //Should...probably actually be a veteran of at least a few weeks before trying to teach others max_pq = null round_contrib_points = 2 diff --git a/code/modules/jobs/job_types/roguetown/goblin/chieftain.dm b/code/modules/jobs/job_types/roguetown/goblin/chieftain.dm index 35d1dbbe..66f9bf82 100644 --- a/code/modules/jobs/job_types/roguetown/goblin/chieftain.dm +++ b/code/modules/jobs/job_types/roguetown/goblin/chieftain.dm @@ -14,7 +14,7 @@ outfit = /datum/outfit/job/roguetown/goblinking display_order = JDO_GOBLINKING - min_pq = 2 + min_pq = null //2 max_pq = null /datum/outfit/job/roguetown/goblinking/pre_equip(mob/living/carbon/human/H) diff --git a/code/modules/jobs/job_types/roguetown/goblin/tribalguard.dm b/code/modules/jobs/job_types/roguetown/goblin/tribalguard.dm index 29507e17..d80376a6 100644 --- a/code/modules/jobs/job_types/roguetown/goblin/tribalguard.dm +++ b/code/modules/jobs/job_types/roguetown/goblin/tribalguard.dm @@ -11,7 +11,7 @@ tutorial = "Goblin Guards rensposible for their kingdom and his majesty King." display_order = JDO_GOBLINGUARD outfit = /datum/outfit/job/roguetown/goblinguard - min_pq = 1 + min_pq = null //1 max_pq = null /datum/outfit/job/roguetown/goblinguard/pre_equip(mob/living/carbon/human/H) diff --git a/code/modules/jobs/job_types/roguetown/mercenaries/classes/forlorn.dm b/code/modules/jobs/job_types/roguetown/mercenaries/classes/forlorn.dm index bbb54fba..fca43690 100644 --- a/code/modules/jobs/job_types/roguetown/mercenaries/classes/forlorn.dm +++ b/code/modules/jobs/job_types/roguetown/mercenaries/classes/forlorn.dm @@ -4,7 +4,7 @@ allowed_sexes = list(MALE, FEMALE) allowed_races = RACES_ALL_KINDS outfit = /datum/outfit/job/roguetown/mercenary/forlorn - min_pq = 2 + min_pq = null //2 cmode_music = 'sound/music/combat_blackstar.ogg' traits_applied = list(TRAIT_OUTLANDER) category_tags = list(CTAG_MERCENARY) diff --git a/code/modules/jobs/job_types/roguetown/mercenaries/mercenary.dm b/code/modules/jobs/job_types/roguetown/mercenaries/mercenary.dm index fc64f921..772d25e8 100644 --- a/code/modules/jobs/job_types/roguetown/mercenaries/mercenary.dm +++ b/code/modules/jobs/job_types/roguetown/mercenaries/mercenary.dm @@ -10,7 +10,7 @@ tutorial = "Blood stains your hands and the coins you hold. You are a sell-sword, a mercenary, a contractor of war. Where you come from, what you are, who you serve.. none of it matters. What matters is that the mammon flows to your pocket." display_order = JDO_MERCENARY selection_color = JCOLOR_MERCENARY - min_pq = 2 //Will be handled by classes if PQ limiting is needed. --But Until then, learn escalation, mercs. + min_pq = null //2 //Will be handled by classes if PQ limiting is needed. --But Until then, learn escalation, mercs. max_pq = null round_contrib_points = 1 outfit = null //Handled by classes diff --git a/code/modules/jobs/job_types/roguetown/nobility/bailiff.dm b/code/modules/jobs/job_types/roguetown/nobility/bailiff.dm index b8a5d34e..7faa1fe4 100644 --- a/code/modules/jobs/job_types/roguetown/nobility/bailiff.dm +++ b/code/modules/jobs/job_types/roguetown/nobility/bailiff.dm @@ -18,7 +18,7 @@ give_bank_account = 40 noble_income = 20 - min_pq = 8 + min_pq = null //8 max_pq = null round_contrib_points = 3 cmode_music = 'sound/music/combat_guard.ogg' diff --git a/code/modules/jobs/job_types/roguetown/nobility/captain.dm b/code/modules/jobs/job_types/roguetown/nobility/captain.dm index 66ec82d1..ff3811ce 100644 --- a/code/modules/jobs/job_types/roguetown/nobility/captain.dm +++ b/code/modules/jobs/job_types/roguetown/nobility/captain.dm @@ -20,7 +20,7 @@ give_bank_account = 26 noble_income = 16 - min_pq = 9 + min_pq = null //9 max_pq = null round_contrib_points = 3 cmode_music = 'sound/music/combat_knight.ogg' diff --git a/code/modules/jobs/job_types/roguetown/nobility/consort.dm b/code/modules/jobs/job_types/roguetown/nobility/consort.dm index e4d28511..d98c66c4 100644 --- a/code/modules/jobs/job_types/roguetown/nobility/consort.dm +++ b/code/modules/jobs/job_types/roguetown/nobility/consort.dm @@ -17,7 +17,7 @@ display_order = JDO_LADY give_bank_account = 50 noble_income = 22 - min_pq = 5 + min_pq = null //5 max_pq = null round_contrib_points = 3 diff --git a/code/modules/jobs/job_types/roguetown/nobility/hand.dm b/code/modules/jobs/job_types/roguetown/nobility/hand.dm index 0078d98a..e7000187 100644 --- a/code/modules/jobs/job_types/roguetown/nobility/hand.dm +++ b/code/modules/jobs/job_types/roguetown/nobility/hand.dm @@ -15,7 +15,7 @@ whitelist_req = TRUE give_bank_account = 44 noble_income = 22 - min_pq = 9 //The second most powerful person in the realm... + min_pq = null //9 //The second most powerful person in the realm... max_pq = null round_contrib_points = 3 cmode_music = 'sound/music/combat_noble.ogg' diff --git a/code/modules/jobs/job_types/roguetown/nobility/knight.dm b/code/modules/jobs/job_types/roguetown/nobility/knight.dm index a54ef779..bd5f2f93 100644 --- a/code/modules/jobs/job_types/roguetown/nobility/knight.dm +++ b/code/modules/jobs/job_types/roguetown/nobility/knight.dm @@ -17,7 +17,7 @@ give_bank_account = 22 noble_income = 10 - min_pq = 8 + min_pq = null //8 max_pq = null round_contrib_points = 2 diff --git a/code/modules/jobs/job_types/roguetown/nobility/lord.dm b/code/modules/jobs/job_types/roguetown/nobility/lord.dm index ef88c069..4d2fab5d 100644 --- a/code/modules/jobs/job_types/roguetown/nobility/lord.dm +++ b/code/modules/jobs/job_types/roguetown/nobility/lord.dm @@ -27,7 +27,7 @@ GLOBAL_LIST_EMPTY(lord_titles) display_order = JDO_LORD tutorial = "Elevated upon your throne through a web of intrigue and political upheaval, you are the absolute authority of these lands and at the center of every plot within it. Every man, woman and child is envious of your position and would replace you in less than a heartbeat: Show them the error of their ways." whitelist_req = FALSE - min_pq = 10 + min_pq = null //10 max_pq = null round_contrib_points = 4 give_bank_account = 1000 diff --git a/code/modules/jobs/job_types/roguetown/nobility/steward.dm b/code/modules/jobs/job_types/roguetown/nobility/steward.dm index 2839b62f..b9bc2b64 100644 --- a/code/modules/jobs/job_types/roguetown/nobility/steward.dm +++ b/code/modules/jobs/job_types/roguetown/nobility/steward.dm @@ -13,7 +13,7 @@ outfit = /datum/outfit/job/roguetown/steward give_bank_account = 22 noble_income = 16 - min_pq = 3 //Please don't give the vault keys to somebody that's going to lock themselves in on accident + min_pq = null //3 //Please don't give the vault keys to somebody that's going to lock themselves in on accident max_pq = null round_contrib_points = 3 cmode_music = 'sound/music/combat_noble.ogg' diff --git a/code/modules/jobs/job_types/roguetown/nobility/suitor.dm b/code/modules/jobs/job_types/roguetown/nobility/suitor.dm index 7296c159..11f07250 100644 --- a/code/modules/jobs/job_types/roguetown/nobility/suitor.dm +++ b/code/modules/jobs/job_types/roguetown/nobility/suitor.dm @@ -16,7 +16,7 @@ display_order = JDO_SUITOR give_bank_account = 40 noble_income = 20 - min_pq = 3 + min_pq = null //3 max_pq = null round_contrib_points = 3 cmode_music = 'sound/music/combat_noble.ogg' diff --git a/code/modules/jobs/job_types/roguetown/yeomen/archivist.dm b/code/modules/jobs/job_types/roguetown/yeomen/archivist.dm index 45c8bb0d..75687b50 100644 --- a/code/modules/jobs/job_types/roguetown/yeomen/archivist.dm +++ b/code/modules/jobs/job_types/roguetown/yeomen/archivist.dm @@ -13,7 +13,7 @@ outfit = /datum/outfit/job/roguetown/archivist display_order = JDO_ARCHIVIST give_bank_account = 15 - min_pq = 1 // Please do not read smut while brewing bottle bombs. It upsets the maids when they have to scrape archivists off the ceiling. + min_pq = null //1 // Please do not read smut while brewing bottle bombs. It upsets the maids when they have to scrape archivists off the ceiling. max_pq = null round_contrib_points = 3 diff --git a/code/modules/jobs/job_types/roguetown/yeomen/guildmaster.dm b/code/modules/jobs/job_types/roguetown/yeomen/guildmaster.dm index fa421e6a..f1f8733e 100644 --- a/code/modules/jobs/job_types/roguetown/yeomen/guildmaster.dm +++ b/code/modules/jobs/job_types/roguetown/yeomen/guildmaster.dm @@ -17,7 +17,7 @@ selection_color = JCOLOR_YEOMAN display_order = JDO_GUILDMASTER give_bank_account = 25 - min_pq = 5 // Higher PQ requirement as it is a leadership role. Not for total newbie. + min_pq = null //5 // Higher PQ requirement as it is a leadership role. Not for total newbie. max_pq = null round_contrib_points = 3 diff --git a/code/modules/jobs/job_types/roguetown/yeomen/merchant.dm b/code/modules/jobs/job_types/roguetown/yeomen/merchant.dm index b8ad8fdd..8ca1a874 100644 --- a/code/modules/jobs/job_types/roguetown/yeomen/merchant.dm +++ b/code/modules/jobs/job_types/roguetown/yeomen/merchant.dm @@ -14,7 +14,7 @@ outfit = /datum/outfit/job/roguetown/merchant give_bank_account = 22 noble_income = 100 // Guild Support - The sole Money Role outside of the keep, should help them keep pace a bit + pick up if they get completely knocked out of coin. - min_pq = 1 //"Yeah...my guy says the best I can do is one PQ, final offer" + min_pq = null //1 //"Yeah...my guy says the best I can do is one PQ, final offer" max_pq = null required = TRUE round_contrib_points = 3 diff --git a/code/modules/jobs/job_types/roguetown/yeomen/nightmaster.dm b/code/modules/jobs/job_types/roguetown/yeomen/nightmaster.dm index 8091feb5..839ec80b 100644 --- a/code/modules/jobs/job_types/roguetown/yeomen/nightmaster.dm +++ b/code/modules/jobs/job_types/roguetown/yeomen/nightmaster.dm @@ -12,7 +12,7 @@ outfit = /datum/outfit/job/roguetown/niteman display_order = JDO_NITEMASTER give_bank_account = 20 - min_pq = 1 + min_pq = null //1 max_pq = null bypass_lastclass = TRUE round_contrib_points = 3 diff --git a/code/modules/jobs/job_types/roguetown/yeomen/villagechief.dm b/code/modules/jobs/job_types/roguetown/yeomen/villagechief.dm index 8126227f..8ad06f31 100644 --- a/code/modules/jobs/job_types/roguetown/yeomen/villagechief.dm +++ b/code/modules/jobs/job_types/roguetown/yeomen/villagechief.dm @@ -13,7 +13,7 @@ whitelist_req = TRUE outfit = /datum/outfit/job/roguetown/elder display_order = JDO_CHIEF - min_pq = 2 //mentor role, not a high PQ requirement but not zero + min_pq = null //2 //mentor role, not a high PQ requirement but not zero max_pq = null give_bank_account = 16 round_contrib_points = 3 diff --git a/code/modules/jobs/job_types/roguetown/youngfolk/prince.dm b/code/modules/jobs/job_types/roguetown/youngfolk/prince.dm index 7cace2a2..5aaa6d20 100644 --- a/code/modules/jobs/job_types/roguetown/youngfolk/prince.dm +++ b/code/modules/jobs/job_types/roguetown/youngfolk/prince.dm @@ -17,7 +17,7 @@ display_order = JDO_PRINCE give_bank_account = 30 noble_income = 20 - min_pq = 1 + min_pq = null //1 max_pq = null round_contrib_points = 3 cmode_music = 'sound/music/combat_noble.ogg' From 7804d11d4cce4272dc8b0f4e8a9cf7d536a51652 Mon Sep 17 00:00:00 2001 From: granodd Date: Thu, 14 Aug 2025 05:41:01 -0400 Subject: [PATCH 11/66] gives identity Changes title card art, desktop icon, and world name to match where we actually are. Ingame mentions of Azuria may be changed later. --- code/world.dm | 2 +- icons/default_title.dmi | Bin 75146 -> 11677 bytes icons/ss13_32.png | Bin 686 -> 750 bytes icons/tg_32.png | Bin 686 -> 750 bytes 4 files changed, 1 insertion(+), 1 deletion(-) diff --git a/code/world.dm b/code/world.dm index 2eb7043b..52f67073 100644 --- a/code/world.dm +++ b/code/world.dm @@ -16,7 +16,7 @@ area = /area/rogue view = "15x15" hub = "Exadv1.spacestation13" - name = "AZURE PEAK" + name = "CAUSTIC COVE" fps = 20 #ifdef FIND_REF_NO_CHECK_TICK loop_checks = FALSE diff --git a/icons/default_title.dmi b/icons/default_title.dmi index 43d63bef0381daf6a2a43e5090c66bbf8bbfb2f4..575f0a245b720ddc81ae2553c69db92bf9f64efc 100644 GIT binary patch delta 11636 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 literal 75146 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 diff --git a/icons/ss13_32.png b/icons/ss13_32.png index bfac65bafdae5bccba92c809007b2e5d3003d982..d908bfa115eac5f2f75a857acb143ab3d3d6241c 100644 GIT binary patch delta 713 zcmV;)0yh1w1?~lqF@LB@L_t(og~eAri`zgDeLjqB4C0KrGnXKUNtf0?BXuC1tB`9C zu5d716*y24NGnL?PLO{RxHjM-$RHfB;E)j*>j=3N(kP?ZU47U`@?f#hN`7x=XXdS1 zXBYM({v+D*MrUBvda*yM_gopG<+><0M`ov0D+(6_aqJxp=`l)xMd+ehwFv7z3Tz! zWl!|5n8lb+_IX5HFU0!~uK|2(u7Dx{0PkM@hCS{I;v$|R@i?O88Yl9miCl->CO%q3 zz6G@UXP0Yq27h`1MEI1EXd??hSh7_?w{k8{&U3+XuCN7xpWvtayn+7o539DK?3oh) z`0_(Zg@aKhMmLu;^Deh?>h1A-vd4U~KTN31dIFAO5#!h zWg<8s&lxbYdNDJXpiY2t9)O`LNEDHBa)RrH=#Ny_+->4Qf8f_z0cFJ8grr4(4pef8 zDA09(lqPwp03A7Z$lJTPc3U>}hsp?WhfMdkr>v?jx$d1x0R&!RCUU+?UD$P~B_K7a za);z-5`P^f-8%zIIT`b0lWx}^S;}YvK#HKYN}Z3Nn91Y$cI-AWuI$vv$S(pv!PmB(4~bd_ zfhw!!#N4bF_orG?euUS0flNaFp+X=cc}+$|(L$3+`Q}%Ui!z##P6RZcYbKb;k$p{3 v1WE;%M3}^I8-9plbOz>#!6Y700000NkvXXu0mjf3QSZ@ delta 649 zcmV;40(SlG1+E2by=wzJIe#uGxRz295`@T&=QEMpMHF=jCjgIXL57oft&YoSU zRY-Ru&RC=42L5FK#RxnU19H^@o-(4e%%Njq9DFVV6xcs#R8{PIevyk0HS{PyLa^Uq{pQsqJ5FvAjfQ!c8O;lNDrsSSAH zDI*F#aCzHJt0nm+o6C>P;0p&5hOWFfYwLXtOat#HV*vEbf%0w;xMCoi%iH_MMW+kd zT;Bfh`Yq{hgp?6=Di`YxYVd+8BEtb5JbFm8fBmNN@_!X6BTD@4P4x*wXK4L$t^j@O zci`3wjf61Wjc`(Of1&+kjI?DtEf-fgeDg>#AleOX$P$*V7?Djt@U<6GLKx4ik}z}< zhR(&ZJLko+=D>x7(Rt;&3uK^dL{`fja#SqMRXuwpKKb ziZ^))Eq{c-Sh#rBlkT5Y-T_btJBSg-z$7TBU1^y^=conq1##k+P?mQGgaKC!j0>Be z!h*w$C!(G?;OyL@UM&N`gC|P^_fwo%UsE2+xsc&ufE5G61c3M_fP3l*v*lwAc#R1C jZ1(~9)4mQJ4)7ORw|68jC?5O(0000j=3N(kP?ZU47U`@?f#hN`7x=XXdS1 zXBYM({v+D*MrUBvda*yM_gopG<+><0M`ov0D+(6_aqJxp=`l)xMd+ehwFv7z3Tz! zWl!|5n8lb+_IX5HFU0!~uK|2(u7Dx{0PkM@hCS{I;v$|R@i?O88Yl9miCl->CO%q3 zz6G@UXP0Yq27h`1MEI1EXd??hSh7_?w{k8{&U3+XuCN7xpWvtayn+7o539DK?3oh) z`0_(Zg@aKhMmLu;^Deh?>h1A-vd4U~KTN31dIFAO5#!h zWg<8s&lxbYdNDJXpiY2t9)O`LNEDHBa)RrH=#Ny_+->4Qf8f_z0cFJ8grr4(4pef8 zDA09(lqPwp03A7Z$lJTPc3U>}hsp?WhfMdkr>v?jx$d1x0R&!RCUU+?UD$P~B_K7a za);z-5`P^f-8%zIIT`b0lWx}^S;}YvK#HKYN}Z3Nn91Y$cI-AWuI$vv$S(pv!PmB(4~bd_ zfhw!!#N4bF_orG?euUS0flNaFp+X=cc}+$|(L$3+`Q}%Ui!z##P6RZcYbKb;k$p{3 v1WE;%M3}^I8-9plbOz>#!6Y700000NkvXXu0mjf3QSZ@ delta 649 zcmV;40(SlG1+E2by=wzJIe#uGxRz295`@T&=QEMpMHF=jCjgIXL57oft&YoSU zRY-Ru&RC=42L5FK#RxnU19H^@o-(4e%%Njq9DFVV6xcs#R8{PIevyk0HS{PyLa^Uq{pQsqJ5FvAjfQ!c8O;lNDrsSSAH zDI*F#aCzHJt0nm+o6C>P;0p&5hOWFfYwLXtOat#HV*vEbf%0w;xMCoi%iH_MMW+kd zT;Bfh`Yq{hgp?6=Di`YxYVd+8BEtb5JbFm8fBmNN@_!X6BTD@4P4x*wXK4L$t^j@O zci`3wjf61Wjc`(Of1&+kjI?DtEf-fgeDg>#AleOX$P$*V7?Djt@U<6GLKx4ik}z}< zhR(&ZJLko+=D>x7(Rt;&3uK^dL{`fja#SqMRXuwpKKb ziZ^))Eq{c-Sh#rBlkT5Y-T_btJBSg-z$7TBU1^y^=conq1##k+P?mQGgaKC!j0>Be z!h*w$C!(G?;OyL@UM&N`gC|P^_fwo%UsE2+xsc&ufE5G61c3M_fP3l*v*lwAc#R1C jZ1(~9)4mQJ4)7ORw|68jC?5O(0000 Date: Thu, 14 Aug 2025 21:47:32 -0400 Subject: [PATCH 12/66] polishes the taskbar icon slightly better looking and not squashed down version of the lobby --- icons/ss13_32.png | Bin 750 -> 707 bytes icons/tg_32.png | Bin 750 -> 707 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/ss13_32.png b/icons/ss13_32.png index d908bfa115eac5f2f75a857acb143ab3d3d6241c..60c74175ea1cb174c7317765e739785f9c382b9e 100644 GIT binary patch delta 670 zcmV;P0%85`1;Yi9F@JqYL_t(og{4nNF~4rkW#o0 z8>L7Zsked12QZ*2NaG{82oFIOgd3eeKmexkEFOn5++{KVA#rDS-gJKJAPPxE|NK7=MvLWqEVm3czMH0{|S3 z=N`D|0H7@v0D#BcbC|b#d3AA21zXLVACBi>q1I{9L_BXyJgbKQEVuV8t1D!6g>|_M z^Y3qqUh?(`h-h%O-qPdEYJP;sx?FbFc8KzeSRVto=Cs8EkGp5r2-b5bf(Ha#*m~fW z$mY%I5*}WwJ%7QW=!GDwD-%2xcbOwkj6{ckXT1iGk=U$e!R=n55)$HtiB_`pDVBRg zm;`%47pKZO6h`S&k*XP$lsfGa&<6@Qd5B1tFY8C3S(tY(lx&?7Kb zu0H;DNkAo|fOppaFM&V5KAO%P&_% zU63RccTaUTn1sBLi;J}x&r3~S#7;pzpW<*lhpUx0=PMU)$+lU|!Z?$#YKIsXu0^XL zaW?b)4u2IMYYvxk4Zhtsp-qb>p^(VxDp<#P(iRJFnt&WFI02xuZ0=nc7Y#(+l?u!v|$1s7%c3-BM;d%1FnT>t<807*qoM6N<$ Eg4<9%r2qf` delta 713 zcmV;)0yh1_1?~lqF@LB@L_t(og~eAri`zgDeLjqB4C0KrGnXKUNtf0?BXuC1tB`9C zu5d716*y24NGnL?PLO{RxHjM-$RHfB;E)j*>j=3N(kP?ZU47U`@?f#hN`7x=XXdS1 zXBYM({v+D*MrUBvda*yM_gopG<+><0M`ov0D+(6_aqJxp=`l)xMd+ehwFv7z3Tz! zWl!|5n8lb+_IX5HFU0!~uK|2(u7Dx{0PkM@hCS{I;v$|R@i?O88Yl9miCl->CO%q3 zz6G@UXP0Yq27h`1MEI1EXd??hSh7_?w{k8{&U3+XuCN7xpWvtayn+7o539DK?3oh) z`0_(Zg@aKhMmLu;^Deh?>h1A-vd4U~KTN31dIFAO5#!h zWg<8s&lxbYdNDJXpiY2t9)O`LNEDHBa)RrH=#Ny_+->4Qf8f_z0cFJ8grr4(4pef8 zDA09(lqPwp03A7Z$lJTPc3U>}hsp?WhfMdkr>v?jx$d1x0R&!RCUU+?UD$P~B_K7a za);z-5`P^f-8%zIIT`b0lWx}^S;}YvK#HKYN}Z3Nn91Y$cI-AWuI$vv$S(pv!PmB(4~bd_ zfhw!!#N4bF_orG?euUS0flNaFp+X=cc}+$|(L$3+`Q}%Ui!z##P6RZcYbKb;k$p{3 v1WE;%M3}^I8-9plbOz>#!6Y700000NkvXXu0mjfM9EZQ diff --git a/icons/tg_32.png b/icons/tg_32.png index d908bfa115eac5f2f75a857acb143ab3d3d6241c..60c74175ea1cb174c7317765e739785f9c382b9e 100644 GIT binary patch delta 670 zcmV;P0%85`1;Yi9F@JqYL_t(og{4nNF~4rkW#o0 z8>L7Zsked12QZ*2NaG{82oFIOgd3eeKmexkEFOn5++{KVA#rDS-gJKJAPPxE|NK7=MvLWqEVm3czMH0{|S3 z=N`D|0H7@v0D#BcbC|b#d3AA21zXLVACBi>q1I{9L_BXyJgbKQEVuV8t1D!6g>|_M z^Y3qqUh?(`h-h%O-qPdEYJP;sx?FbFc8KzeSRVto=Cs8EkGp5r2-b5bf(Ha#*m~fW z$mY%I5*}WwJ%7QW=!GDwD-%2xcbOwkj6{ckXT1iGk=U$e!R=n55)$HtiB_`pDVBRg zm;`%47pKZO6h`S&k*XP$lsfGa&<6@Qd5B1tFY8C3S(tY(lx&?7Kb zu0H;DNkAo|fOppaFM&V5KAO%P&_% zU63RccTaUTn1sBLi;J}x&r3~S#7;pzpW<*lhpUx0=PMU)$+lU|!Z?$#YKIsXu0^XL zaW?b)4u2IMYYvxk4Zhtsp-qb>p^(VxDp<#P(iRJFnt&WFI02xuZ0=nc7Y#(+l?u!v|$1s7%c3-BM;d%1FnT>t<807*qoM6N<$ Eg4<9%r2qf` delta 713 zcmV;)0yh1_1?~lqF@LB@L_t(og~eAri`zgDeLjqB4C0KrGnXKUNtf0?BXuC1tB`9C zu5d716*y24NGnL?PLO{RxHjM-$RHfB;E)j*>j=3N(kP?ZU47U`@?f#hN`7x=XXdS1 zXBYM({v+D*MrUBvda*yM_gopG<+><0M`ov0D+(6_aqJxp=`l)xMd+ehwFv7z3Tz! zWl!|5n8lb+_IX5HFU0!~uK|2(u7Dx{0PkM@hCS{I;v$|R@i?O88Yl9miCl->CO%q3 zz6G@UXP0Yq27h`1MEI1EXd??hSh7_?w{k8{&U3+XuCN7xpWvtayn+7o539DK?3oh) z`0_(Zg@aKhMmLu;^Deh?>h1A-vd4U~KTN31dIFAO5#!h zWg<8s&lxbYdNDJXpiY2t9)O`LNEDHBa)RrH=#Ny_+->4Qf8f_z0cFJ8grr4(4pef8 zDA09(lqPwp03A7Z$lJTPc3U>}hsp?WhfMdkr>v?jx$d1x0R&!RCUU+?UD$P~B_K7a za);z-5`P^f-8%zIIT`b0lWx}^S;}YvK#HKYN}Z3Nn91Y$cI-AWuI$vv$S(pv!PmB(4~bd_ zfhw!!#N4bF_orG?euUS0flNaFp+X=cc}+$|(L$3+`Q}%Ui!z##P6RZcYbKb;k$p{3 v1WE;%M3}^I8-9plbOz>#!6Y700000NkvXXu0mjfM9EZQ From d9f9e734b9a0ede5bf01191c6367af0681a87a76 Mon Sep 17 00:00:00 2001 From: granodd Date: Tue, 19 Aug 2025 14:03:05 -0400 Subject: [PATCH 13/66] add class, fix typo, buff knight cap Adds the feral soul adventurer archetype with the new wild lurker class. Fixes some formatting and typos. Buffs Knight Captain to be a good trainer. --- code/__DEFINES/roguetown.dm | 1 + code/__DEFINES/traits.dm | 4 + code/_globalvars/traits.dm | 2 + code/datums/status_effects/rogue/roguebuff.dm | 17 ++ code/game/area/roguetownareas.dm | 6 + .../adventurer/types/combat/lurker.dm | 158 ++++++++++++++++++ .../job_types/roguetown/nobility/captain.dm | 1 + code/modules/mob/inventory.dm | 2 +- code/modules/mob/mob_movement.dm | 7 +- code/modules/surgery/organs/eyes.dm | 4 + roguetown.dme | 1 + 11 files changed, 201 insertions(+), 2 deletions(-) create mode 100644 code/modules/jobs/job_types/roguetown/adventurer/types/combat/lurker.dm diff --git a/code/__DEFINES/roguetown.dm b/code/__DEFINES/roguetown.dm index 36b35d14..8d40f085 100644 --- a/code/__DEFINES/roguetown.dm +++ b/code/__DEFINES/roguetown.dm @@ -142,6 +142,7 @@ //Antag / Special / Unique armor defines #define ARMOR_VAMP list("blunt" = 100, "slash" = 100, "stab" = 90, "piercing" = 0, "fire" = 0, "acid" = 0) #define ARMOR_WWOLF list("blunt" = 100, "slash" = 90, "stab" = 80, "piercing" = 70, "fire" = 40, "acid" = 0) +#define ARMOR_NATURAL list("blunt" = 100, "slash" = 70, "stab" = 60, "piercing" = 40, "fire" = 0, "acid" = 0) #define ARMOR_DRAGONSCALE list("blunt" = 100, "slash" = 100, "stab" = 100, "fire" = 50, "acid" = 0) #define ARMOR_ASCENDANT list("blunt" = 50, "slash" = 100, "stab" = 80, "piercing" = 80, "fire" = 0, "acid" = 0) #define ARMOR_SPELLSINGER list("blunt" = 70, "slash" = 70, "stab" = 50, "piercing" = 30, "fire" = 0, "acid" = 0) diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 42889136..d3338be5 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -64,6 +64,7 @@ #define TRAIT_INFINITE_ENERGY "Boundless Energy" //infinite fatigue (blue bar) but not infinite stamina #define TRAIT_PERMAMUTE "Permanent Mute" #define TRAIT_HERESIARCH "Forbidden Knowledge" //allows entry to ascendant church +#define TRAIT_FERAL "Feral Natured" //likes being in the woods, hates being in the city //Hearthstone port (Tracking) @@ -164,6 +165,7 @@ #define TRAIT_NECRAS_VOW "Necra's Vow" // ARMOR / CLOTHING GIVEN TRAITS (GIVEN BY WEARING CLOTHES/ARMOR PIECES) #define TRAIT_MONK_ROBE "Holy Vestatures" +#define TRAIT_NATURAL_ARMOR "Natural Armor" GLOBAL_LIST_INIT(roguetraits, list( TRAIT_LEPROSY = span_necrosis("I'm a disgusting leper..."), @@ -296,6 +298,8 @@ GLOBAL_LIST_INIT(roguetraits, list( TRAIT_PERMAMUTE = span_notice("I am a mute. I cannot speak."), TRAIT_STRENGTH_UNCAPPED = span_warning("MY STRENGTH IS UNBOUND!"), TRAIT_MONK_ROBE = span_notice("I feel closer to the gods in my meager robes.. I feel vigorous, empowered by their light!"), + TRAIT_NATURAL_ARMOR = span_notice("My hide is thick and resilient. It will regenerate so long as I keep it fed..."), + TRAIT_FERAL = span_info("The wilds is where I am meant to be. Civilized realms are no place for the likes of me."), TRAIT_EORAN_CALM = span_notice("Eora has touched me, granting me some calm. She protects me from the peaks of my stress."), TRAIT_EORAN_SERENE = span_greentext("Eora has blessed me with all-encompassing serenity. I feel no more stress."), TRAIT_NECRAS_VOW = span_warning("I've pledged myself to Necra. If I fall, I am Hers."), diff --git a/code/_globalvars/traits.dm b/code/_globalvars/traits.dm index 30ffd680..0811b066 100644 --- a/code/_globalvars/traits.dm +++ b/code/_globalvars/traits.dm @@ -127,6 +127,8 @@ GLOBAL_LIST_INIT(traits_by_type, list( TRAIT_BLACKLEG, TRAIT_PERMAMUTE, TRAIT_MONK_ROBE, + TRAIT_NATURAL_ARMOR, + TRAIT_FERAL, ), /obj/item/bodypart = list( "TRAIT_PARALYSIS" = TRAIT_PARALYSIS diff --git a/code/datums/status_effects/rogue/roguebuff.dm b/code/datums/status_effects/rogue/roguebuff.dm index fa7da7bb..a88acfe0 100644 --- a/code/datums/status_effects/rogue/roguebuff.dm +++ b/code/datums/status_effects/rogue/roguebuff.dm @@ -370,6 +370,11 @@ desc = "This is my sanctuary. I can overpower any opposition that dares breach it." icon_state = "buff" +/atom/movable/screen/alert/status_effect/buff/feraldebuff + name = "Feral Natured" + desc = "These civilized realms are not meant for me. I can feel the walls closing in." + icon_state = "debuff" + /datum/status_effect/buff/wardenbuff id = "wardenbuff" alert_type = /atom/movable/screen/alert/status_effect/buff/wardenbuff @@ -392,6 +397,18 @@ alert_type = /atom/movable/screen/alert/status_effect/buff/guardbuffone effectedstats = list("constitution" = 1,"endurance" = 1, "speed" = 1, "perception" = 2) +/datum/status_effect/buff/feraldebuff + id = "feraldebuff" + alert_type = /atom/movable/screen/alert/status_effect/buff/feraldebuff + effectedstats = list("perception" = -5, "speed" = -2, "strength" = -4, "endurance" = -4, "constitution" = -3) + +/datum/status_effect/buff/feraldebuff/process() + + .=..() + var/area/rogue/our_area = get_area(owner) + if(!(our_area.town_area)) + owner.remove_status_effect(/datum/status_effect/buff/feraldebuff) + /datum/status_effect/buff/dungeoneerbuff id = "dungeoneerbuff" alert_type = /atom/movable/screen/alert/status_effect/buff/dungeoneerbuff diff --git a/code/game/area/roguetownareas.dm b/code/game/area/roguetownareas.dm index 118557a7..0d656ee3 100644 --- a/code/game/area/roguetownareas.dm +++ b/code/game/area/roguetownareas.dm @@ -28,6 +28,12 @@ GLOBAL_LIST_INIT(roguetown_areas_typecache, typecacheof(/area/rogue/indoors/town if((src.town_area == TRUE) && HAS_TRAIT(guy, TRAIT_GUARDSMAN) && !guy.has_status_effect(/datum/status_effect/buff/guardbuffone)) //man at arms guy.apply_status_effect(/datum/status_effect/buff/guardbuffone) +/area/rogue/Entered(mob/living/carbon/human/guy) + + . = ..() + if((src.town_area == TRUE) && HAS_TRAIT(guy, TRAIT_FERAL) && !guy.has_status_effect(/datum/status_effect/buff/feraldebuff)) //feral creatures don't do well in town + guy.apply_status_effect(/datum/status_effect/buff/feraldebuff) + /area/rogue/Entered(mob/living/carbon/human/guy) . = ..() diff --git a/code/modules/jobs/job_types/roguetown/adventurer/types/combat/lurker.dm b/code/modules/jobs/job_types/roguetown/adventurer/types/combat/lurker.dm new file mode 100644 index 00000000..134be823 --- /dev/null +++ b/code/modules/jobs/job_types/roguetown/adventurer/types/combat/lurker.dm @@ -0,0 +1,158 @@ +/datum/advclass/lurker + name = "Feral Soul" + tutorial = "Those who walk a path that many fear to tread, embracing their innermost instincts." + allowed_sexes = list(MALE, FEMALE) + allowed_races = RACES_NO_CONSTRUCT //artificial constructs do not have the spark of the wild + outfit = /datum/outfit/job/roguetown/adventurer/lurker + traits_applied = list(TRAIT_OUTLANDER) + category_tags = list(CTAG_ADVENTURER, CTAG_COURTAGENT) + classes = list("Wild Lurker" = "You are a mortal who embraces the aspects of nature. A creature one step removed from being little more than a feral beast. Whatever lyfe you lived before is now but a faded memory.") + +/obj/item/clothing/suit/roguetown/armor/skin_armor/natural_armor + slot_flags = null + name = "natural armor" + desc = "" + icon_state = null + body_parts_covered = FULL_BODY + body_parts_inherent = FULL_BODY + armor = ARMOR_NATURAL + prevent_crits = list(BCLASS_CUT, BCLASS_CHOP, BCLASS_STAB, BCLASS_BLUNT, BCLASS_TWIST) + blocksound = SOFTHIT + blade_dulling = DULLING_BASHCHOP + sewrepair = FALSE + max_integrity = 600 + item_flags = DROPDEL + //var/active_item + var/next_regen + var/mob/living/carbon/human/skin_haver + + +/obj/item/clothing/suit/roguetown/armor/skin_armor/natural_armor/Initialize(mapload) + . = ..() + skin_haver = loc + trait_add(skin_haver) + START_PROCESSING(SSobj, src) + return + +/obj/item/clothing/suit/roguetown/armor/skin_armor/natural_armor/Destroy() + trait_remove(skin_haver) + STOP_PROCESSING(SSobj, src) + . = ..() + +/obj/item/clothing/suit/roguetown/armor/skin_armor/natural_armor/process() + if(next_regen > world.time) + return + regenerate(skin_haver) + next_regen = world.time + 30 SECONDS + +/obj/item/clothing/suit/roguetown/armor/skin_armor/natural_armor/proc/trait_add(mob/living/user) + skin_haver = user + ADD_TRAIT(skin_haver, TRAIT_NATURAL_ARMOR, TRAIT_GENERIC) + return + +/obj/item/clothing/suit/roguetown/armor/skin_armor/natural_armor/proc/trait_remove(mob/living/user) + skin_haver = user + REMOVE_TRAIT(skin_haver, TRAIT_NATURAL_ARMOR, TRAIT_GENERIC) + return + +/obj/item/clothing/suit/roguetown/armor/skin_armor/natural_armor/proc/regenerate(mob/living/user) + //mob wearing the natural armor + skin_haver = user + + //making sure that the thing wearing the armor is human + if(!istype(skin_haver)) + return + + //no need to regenerate if armor is already full + if(obj_integrity >= max_integrity) + return + + //we can't regenerate if we have no nutrition to do it with + if(skin_haver.nutrition <=0) + return + + //we can only regenerate 100 points of integrity at a time + var/regen_amt = min(100, max_integrity - obj_integrity) + obj_integrity += regen_amt + + //Every 1 point of integrity is 2 points of hunger + skin_haver.adjust_nutrition(-regen_amt * 2) + + //some user feed back for regeneration + if(obj_integrity < max_integrity) + to_chat(skin_haver, span_smallgreen("You feel your natural protection knitting itself back together...")) + return + //letting the owner know it's fully restored + else + to_chat(skin_haver, span_green("You feel your natural protection has fully healed!")) + return + +/datum/outfit/job/roguetown/adventurer/lurker/pre_equip(mob/living/carbon/human/H) + ..() + H.adjust_blindness(-3) + var/classes = list("Wild Lurker") + var/classchoice = input("Choose your archetypes", "Available archetypes") as anything in classes + + switch(classchoice) + + if("Wild Lurker") + to_chat(H, span_warning("You have embraced your feral instincts. You tread through brush and thicket unimpeded, and hunt as the beasts of Dendor do. Civilization is your anathema, and is to be avoided. For what purpose is the safety of a tavern when you thrive in this wild realm?")) + head = /obj/item/clothing/head/roguetown/helmet/leather/volfhelm + shoes = /obj/item/clothing/shoes/roguetown/boots/furlinedanklets + wrists = /obj/item/clothing/wrists/roguetown/bracers/leather + belt = /obj/item/storage/belt/rogue/leather/rope + beltl = /obj/item/rogueweapon/huntingknife/stoneknife + //cloak = /obj/item/clothing/cloak/raincloak/furcloak + //backl = /obj/item/storage/backpack/rogue/satchel + //backpack_contents = list( + // /obj/item/rogueweapon/huntingknife/stoneknife = 1, + // /obj/item/rogueweapon/scabbard/sheath = 1 + // ) + H.cmode_music = 'sound/music/combat_gronn.ogg' + H.adjust_skillrank(/datum/skill/misc/athletics, 4, TRUE) + H.adjust_skillrank(/datum/skill/combat/knives, 1, TRUE) + H.adjust_skillrank(/datum/skill/combat/wrestling, 4, TRUE) + H.adjust_skillrank(/datum/skill/combat/unarmed, 4, TRUE) + H.adjust_skillrank(/datum/skill/misc/swimming, 4, TRUE) + H.adjust_skillrank(/datum/skill/misc/climbing, 6, TRUE) + H.adjust_skillrank(/datum/skill/misc/sneaking, 4, TRUE) + H.adjust_skillrank(/datum/skill/craft/tanning, 3, TRUE) + H.adjust_skillrank(/datum/skill/labor/butchering, 4, TRUE) + H.adjust_skillrank(/datum/skill/misc/tracking, 4, TRUE) + H.adjust_skillrank(/datum/skill/misc/medicine, 2, TRUE) + H.adjust_skillrank(/datum/skill/craft/crafting, 2, TRUE) + H.adjust_skillrank(/datum/skill/labor/farming, 2, TRUE) + ADD_TRAIT(H, TRAIT_OUTDOORSMAN, TRAIT_GENERIC) + ADD_TRAIT(H, TRAIT_STRONGBITE, TRAIT_GENERIC) + ADD_TRAIT(H, TRAIT_CRITICAL_RESISTANCE, TRAIT_GENERIC) + ADD_TRAIT(H, TRAIT_WILD_EATER, TRAIT_GENERIC) + ADD_TRAIT(H, TRAIT_SEEDKNOW, TRAIT_GENERIC) + ADD_TRAIT(H, TRAIT_CIVILIZEDBARBARIAN, TRAIT_GENERIC) + ADD_TRAIT(H, TRAIT_AZURENATIVE, TRAIT_GENERIC) + ADD_TRAIT(H, TRAIT_WOODWALKER, TRAIT_GENERIC) + ADD_TRAIT(H, TRAIT_FERAL, TRAIT_GENERIC) + H.change_stat("strength", 4) + H.change_stat("perception", 3) + H.change_stat("constitution", 3) + H.change_stat("speed", 2) + H.change_stat("endurance", 4) + H.change_stat("intelligence", -3) + H.skin_armor = new /obj/item/clothing/suit/roguetown/armor/skin_armor/natural_armor(H) + var/obj/item/organ/eyes/eyes = H.getorganslot(ORGAN_SLOT_EYES) + var/color_one + var/color_two + var/heterochromia + if(eyes) + color_one = eyes.eye_color + color_two = eyes.second_color + heterochromia = eyes.heterochromia + eyes.Remove(H,1) + QDEL_NULL(eyes) + eyes = new /obj/item/organ/eyes/night_vision/feral + if(color_one) + eyes.eye_color = color_one + if(color_two) + eyes.second_color = color_two + if(heterochromia) + eyes.heterochromia = heterochromia + eyes.Insert(H) \ No newline at end of file diff --git a/code/modules/jobs/job_types/roguetown/nobility/captain.dm b/code/modules/jobs/job_types/roguetown/nobility/captain.dm index ff3811ce..850c0a2c 100644 --- a/code/modules/jobs/job_types/roguetown/nobility/captain.dm +++ b/code/modules/jobs/job_types/roguetown/nobility/captain.dm @@ -116,6 +116,7 @@ ADD_TRAIT(H, TRAIT_NOBLE, TRAIT_GENERIC) ADD_TRAIT(H, TRAIT_HEAVYARMOR, TRAIT_GENERIC) ADD_TRAIT(H, TRAIT_STEELHEARTED, TRAIT_GENERIC) + ADD_TRAIT(H, TRAIT_GOODTRAINER, TRAIT_GENERIC) ADD_TRAIT(H, TRAIT_GUARDSMAN, TRAIT_GENERIC) //The knightly-est knight to ever knight in the realm. H.verbs |= list( /mob/living/carbon/human/proc/request_outlaw, diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index f38902db..e70a1090 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -419,7 +419,7 @@ /obj/item/proc/equip_to_best_slot(mob/M) if(src != M.get_active_held_item()) - to_chat(M, span_warning("I are not holding anything to equip!")) + to_chat(M, span_warning("I am not holding anything to equip!")) return FALSE if(M.equip_to_appropriate_slot(src)) diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index 97c2184a..b04ad277 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -731,25 +731,30 @@ if(CL.armor_class == ARMOR_CLASS_HEAVY) if(!HAS_TRAIT(src, TRAIT_HEAVYARMOR)) return FALSE + if(CL.armor_class == ARMOR_CLASS_MEDIUM) if(!HAS_TRAIT(src, TRAIT_HEAVYARMOR)) if(!HAS_TRAIT(src, TRAIT_MEDIUMARMOR)) return FALSE + if(istype(src.wear_shirt, /obj/item/clothing)) var/obj/item/clothing/CL = src.wear_shirt if(CL.armor_class == ARMOR_CLASS_HEAVY) if(!HAS_TRAIT(src, TRAIT_HEAVYARMOR)) return FALSE + if(CL.armor_class == ARMOR_CLASS_MEDIUM) if(!HAS_TRAIT(src, TRAIT_HEAVYARMOR)) if(!HAS_TRAIT(src, TRAIT_MEDIUMARMOR)) return FALSE + if(istype(src.wear_pants, /obj/item/clothing)) var/obj/item/clothing/CL = src.wear_pants if(CL.armor_class == ARMOR_CLASS_HEAVY) if(!HAS_TRAIT(src, TRAIT_HEAVYARMOR)) return FALSE - if(CL.armor_class == ARMOR_CLASS_MEDIUM) + + if(CL.armor_class == ARMOR_CLASS_MEDIUM) //please use basic spacing if(!HAS_TRAIT(src, TRAIT_HEAVYARMOR)) if(!HAS_TRAIT(src, TRAIT_MEDIUMARMOR)) return FALSE diff --git a/code/modules/surgery/organs/eyes.dm b/code/modules/surgery/organs/eyes.dm index df7fa908..07497675 100644 --- a/code/modules/surgery/organs/eyes.dm +++ b/code/modules/surgery/organs/eyes.dm @@ -151,6 +151,10 @@ name = "undead eyes" desc = "" +/obj/item/organ/eyes/night_vision/feral + name = "feral eyes" + desc = "" + /obj/item/organ/eyes/construct name = "construct eyes" desc = "Some beast's eyes, preserved through artifice and with magical rock embedded in their back. Seems to fit a construct's head." diff --git a/roguetown.dme b/roguetown.dme index f8fe9699..38333cad 100644 --- a/roguetown.dme +++ b/roguetown.dme @@ -1481,6 +1481,7 @@ #include "code\modules\jobs\job_types\roguetown\adventurer\types\antag\sellsword.dm" #include "code\modules\jobs\job_types\roguetown\adventurer\types\combat\cleric.dm" #include "code\modules\jobs\job_types\roguetown\adventurer\types\combat\foreigner.dm" +#include "code\modules\jobs\job_types\roguetown\adventurer\types\combat\lurker.dm" #include "code\modules\jobs\job_types\roguetown\adventurer\types\combat\mage.dm" #include "code\modules\jobs\job_types\roguetown\adventurer\types\combat\noble.dm" #include "code\modules\jobs\job_types\roguetown\adventurer\types\combat\ranger.dm" From c222c1fb1005fd43e7eb35b4da6e18e53dd22a86 Mon Sep 17 00:00:00 2001 From: granodd Date: Tue, 19 Aug 2025 15:39:37 -0400 Subject: [PATCH 14/66] lets combat classes have fun disables the restriction of the arcyne potential virtue for classes with combat traits. --- modular_azurepeak/virtues/combat.dm | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/modular_azurepeak/virtues/combat.dm b/modular_azurepeak/virtues/combat.dm index fbbcb8ee..31e42a70 100644 --- a/modular_azurepeak/virtues/combat.dm +++ b/modular_azurepeak/virtues/combat.dm @@ -9,9 +9,11 @@ if (!recipient.get_skill_level(/datum/skill/magic/arcane)) // we can do this because apply_to is always called first if (!recipient.mind?.has_spell(/obj/effect/proc_holder/spell/targeted/touch/prestidigitation)) recipient.mind?.AddSpell(new /obj/effect/proc_holder/spell/targeted/touch/prestidigitation) - if (!HAS_TRAIT(recipient, TRAIT_MEDIUMARMOR) && !HAS_TRAIT(recipient, TRAIT_HEAVYARMOR) && !HAS_TRAIT(recipient, TRAIT_DODGEEXPERT) && !HAS_TRAIT(recipient, TRAIT_CRITICAL_RESISTANCE)) - ADD_TRAIT(recipient, TRAIT_ARCYNE_T1, TRAIT_GENERIC) - recipient.mind?.adjust_spellpoints(3) + //if (!HAS_TRAIT(recipient, TRAIT_MEDIUMARMOR) && !HAS_TRAIT(recipient, TRAIT_HEAVYARMOR) && !HAS_TRAIT(recipient, TRAIT_DODGEEXPERT) && !HAS_TRAIT(recipient, TRAIT_CRITICAL_RESISTANCE)) + // ADD_TRAIT(recipient, TRAIT_ARCYNE_T1, TRAIT_GENERIC) + // recipient.mind?.adjust_spellpoints(3) + ADD_TRAIT(recipient, TRAIT_ARCYNE_T1, TRAIT_GENERIC) + recipient.mind?.adjust_spellpoints(3) else recipient.mind?.adjust_spellpoints(3) // 3 extra spellpoints since you don't get any spell point from the skill anymore From 9db761c0db0ae6bad9d2be227c61631c82e033a0 Mon Sep 17 00:00:00 2001 From: DuskLight9978 <55417034+DuskLight9978@users.noreply.github.com> Date: Tue, 19 Aug 2025 17:29:31 -0500 Subject: [PATCH 15/66] Update eora.dm /obj/item/clothing/neck/roguetown/psicross/eora > /obj/item/clothing/neck/roguetown/psicross --- code/modules/spells/roguetown/acolyte/eora.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/modules/spells/roguetown/acolyte/eora.dm b/code/modules/spells/roguetown/acolyte/eora.dm index 3e898d98..65a582d6 100644 --- a/code/modules/spells/roguetown/acolyte/eora.dm +++ b/code/modules/spells/roguetown/acolyte/eora.dm @@ -41,7 +41,7 @@ range = 7 overlay_state = "love" sound = list('sound/magic/magnet.ogg') - req_items = list(/obj/item/clothing/neck/roguetown/psicross/eora) + req_items = list(/obj/item/clothing/neck/roguetown/psicross) releasedrain = 40 chargetime = 60 warnie = "spellwarning" @@ -81,7 +81,7 @@ warnie = "sydwarning" movement_interrupt = FALSE chargedloop = null - req_items = list(/obj/item/clothing/neck/roguetown/psicross/eora) + req_items = list(/obj/item/clothing/neck/roguetown/psicross) sound = 'sound/magic/whiteflame.ogg' associated_skill = /datum/skill/magic/holy antimagic_allowed = TRUE @@ -342,7 +342,7 @@ invocation = "Eora, nourish this offering!" desc = "Bless a food item. Items that take longer to eat heal slower. Skilled clergy can bless food more often. Finer food heals more." sound = 'sound/magic/magnet.ogg' - req_items = list(/obj/item/clothing/neck/roguetown/psicross/eora) + req_items = list(/obj/item/clothing/neck/roguetown/psicross) devotion_cost = 25 recharge_time = 90 SECONDS overlay_state = "bread" @@ -378,7 +378,7 @@ invocation = "Eora, provide sanctuary for your beauty!" desc = "Grow a cool tree." sound = 'sound/magic/magnet.ogg' - req_items = list(/obj/item/clothing/neck/roguetown/psicross/eora) + req_items = list(/obj/item/clothing/neck/roguetown/psicross) devotion_cost = 500 recharge_time = 5 SECONDS chargetime = 1 SECONDS From e2887c2091e67deb762708058042486f7eadfc96 Mon Sep 17 00:00:00 2001 From: granodd Date: Thu, 21 Aug 2025 07:01:04 -0400 Subject: [PATCH 16/66] large snake tail adds the large snake tail (not taur) --- .../customizer/customizers/organ/tail.dm | 2 ++ .../customizers/organ/tail_feature.dm | 1 + .../sprite_accessory/tail_features.dm | 8 ++++++++ .../dead/new_player/sprite_accessory/tails.dm | 4 ++++ .../tail_features/large_snake_markings.dmi | Bin 0 -> 535 bytes icons/mob/sprite_accessory/tails/tails.dmi | Bin 109930 -> 110843 bytes 6 files changed, 15 insertions(+) create mode 100644 icons/mob/sprite_accessory/tail_features/large_snake_markings.dmi diff --git a/code/modules/client/customizer/customizers/organ/tail.dm b/code/modules/client/customizer/customizers/organ/tail.dm index f67dc653..b60930b1 100644 --- a/code/modules/client/customizer/customizers/organ/tail.dm +++ b/code/modules/client/customizer/customizers/organ/tail.dm @@ -124,6 +124,7 @@ /datum/sprite_accessory/tail/kangaroo, /datum/sprite_accessory/tail/kitsune, /datum/sprite_accessory/tail/lab, + /datum/sprite_accessory/tail/large_snake, /datum/sprite_accessory/tail/murid, /datum/sprite_accessory/tail/orca, /datum/sprite_accessory/tail/otie, @@ -193,6 +194,7 @@ /datum/sprite_accessory/tail/kangaroo, /datum/sprite_accessory/tail/kitsune, /datum/sprite_accessory/tail/lab, + /datum/sprite_accessory/tail/large_snake, /datum/sprite_accessory/tail/murid, /datum/sprite_accessory/tail/orca, /datum/sprite_accessory/tail/otie, diff --git a/code/modules/client/customizer/customizers/organ/tail_feature.dm b/code/modules/client/customizer/customizers/organ/tail_feature.dm index 1a561502..7bbd89cd 100644 --- a/code/modules/client/customizer/customizers/organ/tail_feature.dm +++ b/code/modules/client/customizer/customizers/organ/tail_feature.dm @@ -22,6 +22,7 @@ /datum/sprite_accessory/tail_feature/spines/long, /datum/sprite_accessory/tail_feature/spines/longmeme, /datum/sprite_accessory/tail_feature/spines/aquatic, + /datum/sprite_accessory/tail_feature/large_snake/underbelly, /datum/sprite_accessory/tail_feature/taur/lamia, /datum/sprite_accessory/tail_feature/taur/horse, /datum/sprite_accessory/tail_feature/taur/lizard, diff --git a/code/modules/mob/dead/new_player/sprite_accessory/tail_features.dm b/code/modules/mob/dead/new_player/sprite_accessory/tail_features.dm index ec7c70d8..26b1215b 100644 --- a/code/modules/mob/dead/new_player/sprite_accessory/tail_features.dm +++ b/code/modules/mob/dead/new_player/sprite_accessory/tail_features.dm @@ -52,6 +52,14 @@ name = "Aquatic" icon_state = "aqua" +/datum/sprite_accessory/tail_feature/large_snake + icon = 'icons/mob/sprite_accessory/tail_features/large_snake_markings.dmi' + relevant_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER) + +/datum/sprite_accessory/tail_feature/large_snake/underbelly + name = "Large Snake Underbelly" + icon_state = "large_snake_under" + /datum/sprite_accessory/tail_feature/vox_marking abstract_type = /datum/sprite_accessory/tail_feature/vox_marking icon = 'icons/mob/sprite_accessory/tail_features/vox_markings.dmi' diff --git a/code/modules/mob/dead/new_player/sprite_accessory/tails.dm b/code/modules/mob/dead/new_player/sprite_accessory/tails.dm index a164d866..339d72d0 100644 --- a/code/modules/mob/dead/new_player/sprite_accessory/tails.dm +++ b/code/modules/mob/dead/new_player/sprite_accessory/tails.dm @@ -154,6 +154,10 @@ icon_state = "lab" can_wag = TRUE +/datum/sprite_accessory/tail/large_snake + name = "Large Snake" + icon_state = "large_snake" + /datum/sprite_accessory/tail/murid name = "Murid" icon_state = "murid" diff --git a/icons/mob/sprite_accessory/tail_features/large_snake_markings.dmi b/icons/mob/sprite_accessory/tail_features/large_snake_markings.dmi new file mode 100644 index 0000000000000000000000000000000000000000..bb187e4a2c528104a4802b058ee769a59b47711b GIT binary patch literal 535 zcmV+y0_gpTP)fFDZ*Bkp zc$`yKaB_9`^iy#0_2eo`Eh^5;&r`5fFwryM;w;ZhDainGjE%TBGg33tGfE(w;*!LY zR3K9+C$T6!HNH46F*`NBG%qE!DBj7{!_&`2iHkEOv#1zk4i{%yQDSZ?h;4{Zqg#-_ zUkEOJ$_lQ2E?^e|09p+)l2~m=NdN!=AxT6*R9J=Wl~Iy|APk0q@c<=o0D@kC>H%u? z{%5M}c4vneaPzP)9sV~VU-H99qEuJc2k9n^*WtebC$%&Rf#EJJFi0J38PHO|pUYHp zWWXdmt(zKv;m8)l-z#J{Zj}O1#%6q|T1v{yC1AkXTOHWIA#sG${-|0)JMI)PG1kvu zELz~!Yk-Q8xzw(YmbOB`?@?A@0UsoQL#3Z0N5^BOKYFuaxyQMcn^s@U0G%$^0JW4_ zz{CKp-mYh+#K^4umROi965wkPFiC2FUM~SCE)iU~0I)o@iFtHzP3}h%0epJzdk z#VY_QFb6t1N;wF{w}FI91JGNdzObFy3<v>RV&^{ zT2iQEdK0-$VU}l(%rD@(ehXWtC%dR7$-ar1zN4I>oix{{DJA5mG+eL8ebaw!?Y=as zv*7(Ep^l7ma>VHE-FY?t{e5ZE=*Q{K)TY?E8~xkSz{c7}(7wjZ)?KrcUCx*CC#yGZ zr+F%KNe?P!cIaGQJC)!G6FQd^9;E<3qACMFvOnvsMzOIMx7b(d+Y!I-)?Z)rsRo8e zZ);_|w#VMmXbrBR{<}+D*G+XUtU2@Wz^RSHrmrs--tl;8EBD-}0aL^Zl1uxw!-FD{ zG#2*cxTtyjgWw19yIw4xyxn2AtC)1;v8`jpC7;vnGm9@C?!xLPD2;Bd325y~aodX| z9$yzg3sQG!utAo^ilWk#$pwC~IsX8Y!?g!_7vWYyM z;bM_-C(889(x;YZn!!>TQ@u+YLDu6_HBa7@sT`FQ&)jl-@v%(WM?Cbp`rJnoWEVO$TW+UF=!Dl;waz1MfM zS9`mIP51u0wSL%`uUc+ls#yi1ISqGks>0{h4tO<>Yw5G!iq3auP~=N(WNd6_!?TgK z-yY*HsOvgpRN6G?3nkt4i+L23^5zCba=gRIaY1Tw)>3%71s#a@rN~`7Jba+&BFe;N z+0ZB$)o*=L>ve~3lbe?KE~og=PlmdQa;1-~vpZ!l7iZPDLWN4&pKl@}E4B3HHlz2h zl?A;H_L;PJH1a+0|>-n<9XleAQ8t41k3vyUY}K`qg-A;Oo(&m_`5{@>v~G#+(1xcPR`N+k!_HLp8mdbd}Adp?(9J7N!|iky^HFu7(m!##J{6pqJtNlu+z`2PDD z*?TdsX1HlkQK8~JuGYP^rCYBJ9I-)0`e6eEYiiDMqFTxbFQ%E!ZaepyWo=v&;3B@v7b* zK11RRH9LRRW?nWJzIReM>T;fh`24TuJDZ-6V_SneOzn-A6}Q-Iewn;+x-ACl^L$?0 zJ(K#rdq0MDL^3#rXqkOncS-ihtZZF+%~XG>?sRk>aqcZLeF-^%T`l`p^nR z4bIcD%JWCU_lq=)r$@~Ui0`xFor7##lM+^}a_HET@Id#)6Q$oPL>2cNcg4EsLDxnN ze8)f3Mngil+S{izj~q`{$Q|BMZi4-{Tqmi}N&0fqNKzf=PU>Tnu)Gu-I||MXrl_PA_v{rv5$+&+ut?^TsYQNeHAbG~)lKT=dg+;aJq(LR@`Y$5lk zTrbBCLlgNu1)Fo_df)OM6|14oGu}R!Iu{+Bl!ew-&?^s%ai6w zlK7WLS566ut?t`xC;e%6s<`-iqRek+Y0bA6`wrX@$b0#fRn{dr_hy+Iw)v@q+8{3K zvAx2`L+P}1r*z~a_dO~{V;^ZoX0^S-Qz$MRA^)1H>gx9;jq(cTkLB&W|5OqCeyUyL z81OCoxyV+q>;JLidP{C@uBQJUR49Gfc4BPoS#REjuCiP$e9QZOHgPn)g^QFnM724F zP90>z$}*a&?ay#OZ90`@M11lqpl>4qUM5RBS8-YWt9k9f$MkWkjoDO}@7;MwBxiYf z`CEx~xoFtgU{H2AYu){0=!QoyYklFzbdK$L`T=u;t5h`Hnnl;(HKyk=F7lE}PEuvk z)IzEku!H@=@xZLf%FZ@m(S!nikEIO@&!E)`W-mMkd=+Yml{rn@ZYeta&lgZG=gys%Y7lO2a_WS0{<_%~p@2kVe;tm7+vJ+`gdGFqh(*y&F%QDOv_u7}6RK7& z-r|o1#zkHI)4`O^M!5ynTA&Tk#@sZ3B?Hwsv|xz&40^&u54fWeqTJh>zYVhLx3M_% zyP1koj@tJnPE7gBP>FTS-gi5R>?sESceD^3q3qbC*=c#&V;&8+`U;ND{JjkI83#>j zW=v)4g8CLR>iIJP&I)G<$6M-()xWmD8gF3`DwFrFPbh4~|my5L(Bwgm2 zyK$17o-t2va30UjH0w%#-j!pkt))Pjk&U|k?U|dMJ3_u5n0+-vaT>P~yn7zO`lAXs zf^hX<8cPT&E<|oo7WAYV0W-CcDg@DgJ+%T zeZ~0T1~_hkf{A2jPI=*=-cg`PL5(5PjutY}1@6?}E`xczhSa}y;x1Z``LE|VpM;rX z^ezO(*d+G0I~Ari5>xtD9w{^f2@VSc;-=Gw^@*6HK-^$5J8%lAWKaVqUc{8;3yT9? z=@UESfuXlKMJ<*V(6c=2n;y_)U?4qAA+%zso`^>W~|F@mBF4fOt~T&Gy$SeEfB zt^+;daK&Z;+na#In{~;R15|x2P0gnZawAmrE4^2JurBj2)Qe|$nU7OIn?Y+cp>=v| zPJSzf$$(|r#LgMOe--AvijDw{-GUv-!ITa171TOa5BO>`mA}?o=|`;h8PU+(azLct zyyMa<{zz$5fJgnBDrX)o1I{YlMI|>S`#+`80bLjspkUg?@EizG12|9>IR@T;s6sg&gXwFvf6>qpZ~p9 zVr~+$?s^O;I?r3X%Zur6N4M&+=HGm*s}qCA`}+8lk6PY$pCwTv7>%0Q-Bs=+FZDPa zdy?v0tRUmLfQDzRRCLl-DlFBgRUO5--Hk+(X2W;UJPlVhFEj~Q?`?N)%t_~9c!#wR znbj%40PJ`X#m{OL&2pQmap*DOnFH}T*e=@+U;*=dAW%zz3FDsk8&`5W36Lxe0k{gY z+~&-VSFT&m6{+)QX;<=kS#&O%eL|JHN6OmnJhtClFI8nOUslZvm{2mP)8ZjVrI%8G zS67Rs|3(J+%#38)>ZCO$F?(>zLLz0Y0AUODPFSeHxuzpG-n%;f3HS zUm5l@`;PyC+JKK|{UKVLi@g%%cRd_41OmDEgh2x7pSkjP!|m9`N~HuS_l+4AGp?*un#V2de<}i2{v29 z+lvHOKUQRe+z0>u{uTS@S}*BEoBPTP^iSvV2Y?T~2KTbQ_qrS4>K&pJ3(N`aSI+}l zUcD2)E|ia6|3db%NL1Md`Oq0+HaUD@r1|4QBm@$9&QvzlSfE_lKw2-fCcU@w^SyH~ z(;{w6eGiFOp{HYNvQ#q>p`apfY_2*85~Qi9S=g*jQ6=;Xjq8ko!%ubljs_9@DBHj} z$wJIYNBWMpsp*&D`|L@2ai;b=Pw9gm*ezw3lCU12JH;a4&d?vljf{)s2}3U|)(X6w zd7y$Zj93Xz`*o#Mqu+BMrT9V#;WJh%NsP`5JS>7b;75$8#}m{1U>AAFiD=N5 zU+EyL=1i)yf)Yum@GnOCM$~Svy+|Fvepg!w$YD(U{PG_65%e(ih5HOX1}tTC6q@{79 zm!5_$>U)c+x*_bktyTi}1bMX4ONSvNNsQJ);1Bs2GpV5;?hq-S^!gku{QO)>;x-4w z;(3j3UyL1Z0F8`g>tg#_?D4=4U$3uL1dlI*CHhk|(2fg)EJ^<@+IocV#@+|D z>RZF4S8+Dpw7g453@!m>pGYhiR2&BJPF4+xE9HuA75>jDqR+Jjj4mgAQI1)5RI($#wO;o|))d?>^ zb2~j8(2lOladyDpVSiLzm?>j~E^G@(1sXbF{5g~c5yLQ1!+%EnyuN6^0~HMD0&7H4 zz{}{#8Jzd3lLm7qh!l53#Cq5;z2M(R?VCf@bc282Nu?zVGRw0$Bc{A1Ss)-4&Bv2a zau|A%|Lecn|M%gJFZaK9G(SVD`%Ai|drth7lU%*Ki2DV^3IhQdUC{WwVna?3AJSP0 z0hgAo2ofHzQpEe~YOYJ|cthWo3Af5DFd0c0F?B3_GOETr-$qxg~B^)14?L`|cZiX~fs#*rw~ z0R)qlvT3lDP4(02>s;GUO?PBoOu0W%`0WHhaD{S1+?osnwocV0>$zK!#|=11eI$Rf17F5Ii^v zY+g>lLtAcij<#s}gCm0PhwlkmnGgh>5sja@r~>@lYN{S7_wB_-J+U6eS|~D%d2lV3 z+>@(g$Nt`N?*MPsiFdMweR;1(FWQs@bNH!VM;Tqi&_V3>hYM8(PhIa^wJ1SveU0GQ2`z#ib z{mWhSYKF+GHc_;98r?wO zJ$?6MaAni!;mSGmwUTpeDe>o;AT^8d zHpJmai}$Glr+5_L)Q@$%gy1HndT8+;SQwKr5Xg|7`ol3^MDdY9^({l+k&ViOY3!Ww zsl@6e8|0X%TkZXRy%E&pYi`}v8Rkp{K<%H3@nJPzT>!J@P|Q$3#ET`YrymE5$juwA z=5?YG?RNo;A#}3lHVYb;9?rR2X`k5DWrNuZ`Rzu*ht@ik-(XFBtz@kan17XRIS6+n zZv=VzUvRCB#;>Te!`b`8;of2F%3Cs$K3xr!MT`i`pKl}wuuGw+r@_Ou_kl@{Mvv<< z8&D#&Z-DuK6?#t=4L9Xho21im?_5WjlO_*CIX{58in9`D^UycRfL3ua&{tYR5_Y@! zg((MtNOsJcHJY}KF-Yt-k3M*=pGTMzqTNOENBN*IZ@ma+*(bKnZuOE#InZ-h5^(Qw zfo5LK`4Mv<5td`R!q!zdx&($=fG&C5HnPe+q6sGVDn?p#_$ z!utvWyk=vzhEMdqM6t&y>$h1_qcvqb2FOB;4naqTB8WMxfb+u$1eAo62GiB2U5Pu= zjCp=r<@uAHK3(qH)XI0 zxlHIr^h=j4nGovhP5mY==a`=#$zHLGcS1UO`c->(qaLsccQla&!iKdXX`;E$M`_6Pf#Ku*J ztPpe9suN~T#cu%b)TTV^G&Poi$N?peFmWJ^Kp;8)W<4F9xfg7fDir5cwb$LbFpBbp zbx3B(e{HV&_wQ*#X8Eng%@@29=wN;>n!IgKaXHFdkjtu3|C0_t&U(aN=SLR)BGBR( zj-l2e(C8u+H>aS{Z>f9Dh0gAGC{m@*;`IC+HJEN!dUP}lw;X^##A}H>dL6!nJv-N( zJza<6QX==?NDTyb=i>yQ+0}WQfOXyJCTR+*@QwS*|a%m1WO!bpO2vE zrL!WR&4>C^w$0$e9qLy|n_Ze`x`1Tg8%Zs_+-xd=hZO4Z~rIp z+Nx{e!NI{^F4plkpyD>q*hKoSFLZM=#F^qVU1_7j{3%iI-gQNDo5Ih<3NN*kbRQRR z91Pj+A$wC`RT=PGW?&@_*HX~3AtNi4YHAP_IJ z&~Kv{5N=;fpKkM${%o66h8O76+Jon1R`$v970jsKx*FdvAOH31*L=gfaakd_;J%8} z4kNKAO6=~4({b@*)6@Bue}qYWpUJ(MwSD7CTf+-ZS&Z*qk~7dHzL3f9X!2SG#t`X} zcI=YWhv;qMi6kZXTc`g!&buP9;|Hk2o&{18EYYWl*7j_Khz7Wdy{RjcjbemyDM`sF z40qYh7Q2&mk8{u<2-aRIT!U1mx{XXl*RMacCrM{<|2&mu<|ZkLgomOfg@uL9IsT?I z@srJA3~fTnxR!tTS=lz2JHdbBaSlu0dLDs}S2ZH`N@LTknH4 zUJ0Of#aQgWIXH%@@bkPX{iO$%l{t49$-e)KTQMtRG4 z_EI32?N?qQC`X0Y-4#U4_XiP`5X&D1^1z;2!DR0ZE|bnxiL;9LXD(OwUItM51+{J> z4yg+#YdrVF13oin9a;CytA*1tfPI|{+fa2Ra16d55KbfS2`eCT{l*&rW3%E*1=aCv zx@W;GF0B%iHk@ZU_``fbmJzUq!k=InMDQuMkOJc&zPs5eEd8xzm-)hZKjdG~{rXFG zpiz}=0Hrd2Pk&8lrm7cI?l-Vy5-;C9LvE@AUGnXj&yROjQYTc2uo2ooB3l>r>cUG} zha4s<3C7dR&=hQb4=%{{FS$BFj(eqyGXMMl*l56K{w&s`FUqbXb(Y}F!Q3Kj`p~y9 z%dO=NM)CmAf;ESa&B(XnEem`BP?}^j9eiH?gA`))I30kKIpvOiPUW|}JjhNfOM|t_ zKg8OUmy9Y3jfY(G3z8VUw%~lOg8uSFghB9RPshEgzFbp5LRpmhiPJ>TK`Op?_#ivm z!ek)Ay%SN0$rp`g^CqZ^LsT@tzKNEbJfk<+f`*p~`M?eK~Fa-Qb?O%!p`w3-VL9|GR5K72q)UauXdv4RT-0IX$<>12V}t=B`#gD ze{=b`MlpIeLh=fV@j=6lPioS9cym75K?qc|Zc0J6!oqulw}J zm11{BXgoI6oWIHeJg^BhD(7|+Ii{PS$tKEbse?NeREdLU|A7lhx;9V4Uf` zsM`w%e=KYrd~(X|F6ZDEjijokK+5=!e6MRBaZTlX9IVU*^jhqyl_@sm4vns>ltXmD z4K;#9^pB+t+ ziS4N`t?1%5?l!MZu)hYf!YrX~`vUw;OwkoKe+J8OyoRKT%T!RayPGRPI30g+iM2^; zMBO{VS}b^xH7^%M5<6N;pAO(Ztx~42%%MzlPvKjHm4zJ^G$3Vg5{ABq3B(H5+N!P; zXJ_wUO?KH*<+(L9wG}HFml&636YoU^@Gu_jGC>v~rT+2}+lG|iQW+-RVce4)7uG{y8*75F7_W@RJoHxSy&3?CO#tz_9_PntIE(QN%jM!cm zcd}m8EVD=`uE+8a6t7&e^w7uC_!kRzPy@OH`F>4K z*4MKg$3^Sq0MA=Uno$pqF;3D$67AB^^)a-r_mIP1XvZ$HYfVi`etJ(e9qxa#>1QLD zYSpAhQYzN0E~SQhl3`K0Rt5#)S9{Utl~Ehd<^sEBRX$L%&zW?h1SacO6o77g#Z*(s z`D_|7K4cOxkQdbuNVy$M`_(#M_qD+f!2q`}&BD=^&w?JSD=YCgxTH-DYSH#lWpX3F z6=n8><^>vNDR8vLeta?=2xtd9ozUC>QAz~u*Cl(mCXKjcB6lUIq#IpE3FLvO@9&@? z(1DT?os>Mm*f2&-PX-Y$n7O-O{$I5K8_)J;HwX$tBJ(C2gOpo9Mdsy-bUu$fM>Zl8 zxr%(0qJkeVvLJzU0*xYNa0XR;h8*Z~j-CT5oQ3Eup3IK7=GQS34Agn5XXo0Oj&F?HI@mMzf-$T_-i5GXCX2^wp+;^A^#wU5YeRfR z`~S7|#(#MN(7{s;W4=U!f{u$ECWbDRI!-yIKp^b~>|^Tyj|fQc2xzv?Gz?gSIfO$X zhuWD=d`8)U3DeX}W}AouT=z0BFHvdSMyU@XywT(k1Tr?yN(m8zLLjq#JZlYRxt$K+ z=Oji#pV#C3{wi)DfMx`t#S8?dp#Tl4gEr@5n?hIqN`3bQ-1lAR9VvIRmixo8{yqIa{;l~~94@IHUEQeylEXHwQ&Wy$hBrCs zKyFGOBM?#yja^^zqhTpfd<4magO!4R`+QHt7n63<1eu{ zNvYxK5s*`~w}Ar)c_!rgZ33&|ddc+Gvt&BrIQ@WJWIS+}7<7NUW}Ka_dO2$bSZDb0 zFyPY;D5xzRB>6uh=Y1%ff$u9iPhYZRX`L!6kq5x?g#87OG0zt z>Iz4JO*~8#x64mG`%=k;7)zGWouD9%rQIJ}NWCG15Aq_f{5(8k>!@3Aoe_i7PyX9d zs35A{VW5$Sns7sd~w4SlcHYWw3B0n}*ZF1GGgpE86$J_D?Kl zU?S^zdZ;YZE$2#yzspRmnS?NZe-(~HkVc0pwq4oruDQ8cQTDh+4&jvkP%>~LGyMUf z9W1;d9S6AWF6TnC4<@P2z!HikR&fbjO9Zpm1yBaEj{|Z1o9npXCKm+qz-(7CY0#_a z7@ws958EqAj@_j%GGhx*!eVP3?w_g6{d*y&`$_&bn>k7yQ3y2l*-R%P$&Rst7dItL zkX+VA2bA|ahJQA?ZYorvi3?KDMaNYBw&aQYExiae_ck8b{s~x~A-du4 z4D?UxYSxDGm;WZPgR{SWYyoRgVxSS?hQVCaGd@Pg2o-7Y|9&O-;8258PQ2C3)O`4O znliYgFRo-gnYk6r-6%&(8JsGi{M9BL{(I{TUk0#3R7m-E)r zw;LZacRT!AKgrlo06(7Q$Oij&_%8pc42w-45B#e{qJ-)GQ>9UyvEB$#0|BGf_mXi* zrVDK0fyEv$_xd=x)&92NVFOLf4e z_pUK@d&o$!VnY2K+yP(0C58sg< zd~J6=MqMfErxKGBIT8;vdA&~fYzd6)GE3d-b+s@F3f zyCAw`sE9b$zXEqDEkBy{eSE6z+5g6?L|?zWlInuGbMEDb$-+V5{xI2Y#EYBg`}C!p zwW;Bio!OnnYpAOilqzgalVGLuo@P~dkHu;R0RP4<(x*(*{4jQ4J>4F>~;&(_OEB!EXwYU?Nb%cb**LM_)Jv z)H%rxg9j}9Fp4^WkE8kQYpFHcUcdqHA+wyeoP&b~Orw$T({u{q4XiI8s?xRzrUYkS zUXx}0>kto6#wRBeRN6k^#1d9NZgE*Fv#&olMkES%W9FnDF3jkXcduK{gy-iXmkkx% z3F(6w2zT#lNjcjr6~=SGbEGVwEZpRvz1AUUR=*bFbZW10*a7XR?rp}DN z!UJuF_qF zBjA9CM5_78*@(V~Gi2io`WuyO_4-{{ZeIN%>2Ztwzh=8KB^*wldrR-ktBJjPkm!=O z>qj?YNG-Z$Eti_J$$O`gWmZ(lOhrx+KtJwP=QDu0vAEg0@R2yICp0Ly+oik z4HIMk5HUzt${NtW3jOknYqvt)=4In9g#n8V z8#;gr6J;J4sJS})1nZ0j(k8Gf3L&efI|5Q%Bz!aTfEMMS?3&WitCVeVyEawkR0Qkq zulf!gyhJg6XWC5tks&f1orth>XvLe7i_!*J>U_SN z5=S3}Mg)f!_{|P^`pCk7>OSH!9>+AqtJ0s3hwM6n8ogIhE z0`!WaI6*2rb8A1I;R6mVfs>TP@flWM#mugO6?b<8K*X72<-$rloa_^tn+fqjdKf%^ z(SduJi-;;Aegz_&$gfpwb&jtbti;d}GLnGz*PK;iJTB?u)lr~`QoGz(Wx+$<_l#Fj zCpnzp_GojzY(g=JB%snKDL{({RyRu0pDiVW<&J7}N@dx^D!))g|MGayCt<1H_bhwn zt%ieFrO)-E%Mjw*NYKa@dwwwnctj&Xz%@=hxT#e-dL$c!nrJSU3ok!oXRPVk9kI_q z0Q4$HPNnD`2L9X*SwEIZMPKua6Z`w~|I6>llg?j%R4Vpc$5)Rjg2A~sJf0s2t7j(! zN_cgSBAegq5uURQ7R6BEZR#^;u^KMfh}>>hTgL96oOqxL#9y*5B7lb}w-{Hck)-bj zi#W5@bImq_AnmruV|T%rm)-Hi^eMQtRDA{NTWI|4wk&j<@ZdXBuUmaQg>|WnQ2aI= z<7$UUP?0vZ$!Nhr63_FNrZ+K3Yc)embPIP{7valATPSg5GBw$%xn^%3-MaACM}yIN zSI83(*y9-{qjiSU{cmq%>A&B&sNO+&+maMKaN=S@s&M^GGeQDkeDL7H1>`dHg~ z!Naq9^E!J*qV&E9uw&lIyJypE0Z0+Orhj5Kjo~1##bilI9fj+5JW*M3*-7tn~9^d zY19F)k~8&Ys+fRBvTg(~&o#~d5x3-+1JVQSW8y$SM}U_Oubd8O0lfpZgkLP+Z4S%O ztkT=0abLRZ`vF{TXFJmJ&!Hc0~^9mQZU zk{ofMzbeMmfyCb9;3{9*#pWMUuy$|RJ{Aacnu5=bZ9J4EVv)q z#GK0>@`}syKlA=$IMWYIn$bKmS_m5c`(cyVeQ-6ZVzZG1klV^wGbjkXe4hBMDHG90 zyRf~U7?t4DR2JpX60W6-=7kq*y(ds^?u=f`CVt$6#Ae9Ocr@G>&YublDn{6ORX2m? zNXreH5-b*2$k{3$H%{jomr~~Z%Ycqc@)rw!-CSLr?Ro=KFvuu!h`h#xb?M46-IEyP zUJR6*-IQ6R)k9!!riFzlk5qBP1!9wz8Y&hvI6of?%kp_QR#@1NvR|MBQ__q4WyAhlzbsJ*b#mY!`$BfWZ!Vcs+$QW*Bx{-q_0PbOc_sD7OxBJ&Y-zZ* zP}xXi_5^7I7cLB)j~dx=zvO7I8)-+oOYip`ki?ROMr5?jhPy?o%6ZSj<0EKS-;Sr}dv&#iR10*pgYo33Ys_8FS-CYy&y3A^0H-bEnK&} zTU*PA%vXUDsO|sB5U*rkBiu(077N;>)-9&91-raLNvO;LD6ly+s5( ze$}pG%qvhe|J2BJF%m{85%Blrng3!zNBOxw|8)b?b0Y}QDAj=y<-yY;(%CRW{I|1N zPv-q|#IR;H=C{oZj z?dR`f;<~F2;{z&)W#(%tp@#S`74hhXd11cDefEG)r@wY-*-F3t_p|65`b4s(y zCnqO2dvvH#;6@=Di1-MqR8Dq!Lwwb3U?_j~L@x#=EOSbC=)^{hYvt)a;l(~BeR;j% z;%3+tFk=c?C)=Az&f`ITfX`K#x^De+r9kj22sd&QI5aUz2J%3u4CpOyYjyfhie-b4 ziP9Y>)E+%v>yjQq13P~ayMYpef?LZ57@rowF7?}4{`5(o4G%HtcS(BJi!LRJ-WP=$ zJ_vs|3Hky#29*fa-UGR_rPT;>=b$}+F-M-91Y_(ZE;xXZRJ=)lj&)D|CP<`$Nd9>S z%tMUOu%(GjK1lIZtg{H;BlDOK*>TDI1q&iL=c46p+Ll*(3)|m?>B7y2Qg_pRI=7cW{(7$%VyNkN7;(Il8vkP2^#n4 z2o4V@>77;|%J;N{ccR&DPd7mf$n7wIL{b_-AbN{Bj;>y@=#p35FdYm+0@_$~Yfvhil`LX50YunMTONlDwo*+fB;D6hpQOg^Q+SPADW0^~ z(fA6pzr+ZjvBXZ_6_|!zxT8|D$A*>K_um>0awEcv=XL%H?psEzx@O$ce zvjJquqaG~u7l1LdPYcskgz(TCj8j*@wF~kuPr#`90h^BC?~H&)WNSa%n!u0FBBB$Y z-wol&gC`wat8FVsVo%oXh1{{UI^nC-J(L83gkC5YGSnO0?zF`g3)+5lqld1Q_Okwd&yWHv4M@d%|6DD9$&$`9Q!;A1 zeXGZo?>C-d`3Pmy=1)%DJ+?iP*2%q`J3)%M;UNkYIeHfrdp?c==7hCLFMG+A(cyVT z32I(q>P7WgCt^^a)Jdfa6AECp^V%AA!`AS=cdz95czl2aZSK|!t++WgS5}x3)7-Z~ zPtSpEY$7A6JgT;aF?8~o3$xAkTj)Le)?SW=ObGknH=d!@n)O(+&Mi^JQ1nAYRJX;8 zkWx<_el}|P!|sre8N%kt)|m$@Q_T_>-H-$P4|S^9Ze6{5*0qS9U`t?qQ1MA!yRE8n zA=k`^FudR&syM7Cm*v@x7Qo{p1j_4Z70=IPID6t1fvy14;Xuk7K8Jmx_2aTl#mbDo zF`h^7*6y}Ureq8I&6DGt6KUB)Nm`TF)!t6TY1ZRmvf$esInGkm^uX_T8^L!gM*R`h z;0qlqG(*uG{jaX4zBdimN;$`mi5zX*wNI;dTGich(Ux$lUtQcHD@sy3v85)?e4$nb ze*4n-Hoe{39SB9Ll`iwaR<)%cub$RdJ9GQOA=1aVUSoNKI=FB?hHJgTG*4ac{&g)3 zgR!eDRG4$k8%OAsAJ~<=uw*YPvf|enMtDtsi!oj9^=s5x)AduBLFi2NgDEy8(-3NN zh#?E_Md;>Oo=z%Wsg^oPe@Lgx=c6crUaw6HDAXBHvlN zM0IR1Pxth~+kdzCN#^N>_@zB=45EVDIFoOTJLWLRe#Z;_IiH|wddjAS(GRKwhOGBj zF>STXhh-g}3=Lvc$a?M(u+UJ%0COP}Fm0m#Xs~LUo4}S~y%CNqMt4m(hVa&#CE z2{cRXBRo}`t*g=1n01Vr*Wt~v$xXQpGxqU|Z{}+{$umkL*+QaY7sE27MnsNnu_3(Q znYtb}u&_RlBRutyXuy8CKxy8ns-Mun1w9VGHhdr(BhWjE^5uwC>KMdiG7-4)zj49)x zDWe1&T9S+;?x6yHLatl=t!`~xvIF3xjaAkzEE@5HVe1MWIhe6omK$T(GUr=8sr??2enRE=N~0Y2HB>qNv=*|yRkDLQR9A6)S|J=&{OU@=|3_q^$fI?!9(5ID9Ar) z(uDf?pDD5@z?kJ)3G}L>KGsR081m8)dMvL+H7>bpSG?O9t15fslZ#oeuBE1R!^j`I zvkziV9y-cCC4`l$yL##}Xu0-r`y5(hOzDpUr?v2i!NFx5NUWH_VGAs!Py2@LhQ@k) z!*pifg(Rj~!J?CWrt3?&7b1(n4gO!x-p$p+M|_)Y;}we`9b>sz1Lr>K?5n7bc|@HI zUbikinSnK}Jw5Vh`COOP?zxF!7lf8iBdaO@?kU1;745f{*6U@V9HqN3;ZIjUeJPk* z!Pn53Zdar7y;2NWMftQD8-2mMAzP}_a!wYb3o&K9Y)@&t5`uWC6)!2L&}g-1_EyyV z?JXllTh4Lo>T~__YMj=aFqo!G<P3zc6n^@>NcJ|@)F4zX^e(>nq?YFT9Ne!< zLO3YMjJR8e4S5O@PDQOWksa-qSl*4*dRZZTCgW>muO+Kp?T|fTc8fcUCQZM;3Y~#VV3cbI+M!vKs3>1`{ zAzz45s1!I1S9~p1lGW|H8|k!2lZf2oUwU+j)odXPO})J<+3;JnX$jqFc!byTj!ySB zbDTSOS1Z?y1itBw4q;OskN&;GYORb&ci>PnC4vC3%DB-=V*>xfe!^yHsTeyfqty!qlY_558kZncJ9U zA&hC@TXTD+v$0;zmToK{`_hVi-Hoab0=AC=Vv~&7m*e|mlX7$uHIj%6xO!>)SR!5P zPT7b=cL!s_DqMp!IV@k0;=S%wwhq1PCeX&iH-*IrrQ#?z#7l@sDrZ412tMl?M@#KX3>4cO{#l{m zl9g?UC^25#C3$PGlk(Xe!Y)<}?;n&~DPlf+)Gprh*Z@o*GjjVo)8#8hox&ZG`4wAB zSoZDTPZ|uX-%0Sgno>CK)TNi^|6}M2x1qBx`BH4VR=11a^NRj5EW}QmlFnSd^+q%` zp;ya2+amGPgPm)x=i{g`H5Xm+b|*V?XFbp#4z3$Au=#^Dn3%Y@KiXZb3<9YC@S_A; z>FtZUZXbT?=5*pk2SoOkKl?oZbHp{r z;^5or*8${OI(|nn59kx&xku!+r>v_Ka*lYwoOlG90#W=Ye||KaOf!;4wTPxWTNp^Z zfn=gn3%>4dVl++tuI>9x(=zEwos$|wgI$Z0)gdsSvFWkBlU-x3-=1$TTkV)~+r}rM*9DfJQvKl_yGGz1=sh zKGk|l6sIMQ@rh;Se?-VR16bpn<{B}I-^$#`YvU)pG=FvQs(J*@rviG$?Qc&-&y}ub z?6fD`XqY5Az|q?TKmWQx+G}>(qbX`k{mwCSxp{u`MrV1oU3W>)0;XuW7&jQSfh#x0 zsdYo|KJcY{@{aaF>=o14&gzooM>VMfUQcv*H5Eq2q?BQr;Cl|b$ikOP6@O9v$G~+T zw<|+q8C^+Fu0;Mc+I&$KrIq&e?LK>1i>-o8SL#@@((a}EHFxa)GL5_w_sP%UQ)s7_ z?r4pSR&@2Zt4G#O*SCcIVMv@HWYFv06~Dw}rs1+3?S=?tg!}~BikyG*aNRl2${_p9 zSmLs7`tCTDS^tSoGKJ;>yn)v}6^}<$!=1|XXR-@3iN>m_!9ns=;Bh>ADx~4s#d2TeCp;MBQdNRz5j|#z4H-C zpz)jzg33TR4MNe~xTV(;Mm!pt_b0F;_z;3*-CQ_&?K58H`wAb+;e99YTuZ)s9Bu`m zi=V;6#}=o%@#*GCx8qv}Rjr68aXcNqECV01$w28IG)40f2L4lE%nt`>OFZw=UEEqW z?wL*)XZ73szczkWEnR~{!g0>8e#VEXGBTM#RZyDDpnrJH)%J6p;_-1^)rKBi4vCM6 zz~V>$v!Y_0`dvm+7e6 zY~F@)_<=TJ6#u=gtc`K|&ijG8_f!IfA8vCNy|>S4Uu;!A=Bq+=-?M$47moMXTM#8g zZQ@Uw^-9YPgvK?#2wy2Qj{jKtiB$bAhG+WPNY`BGVZ*uuSz*(b*!w-e zw*0Z}eh`o+{h+_(yNN*bXX#v#*QxB^uHSsFaq$H1_UPj$Hx%tdzkW9S=tu+{@k5}d z*jni71}(3FI=e2SZ@N`9xi!_gFU65(VPVnxNdEQbHwh%YMdYkp+@F8VHOGjE+%r@> z7E7YdeEs@$e0me%SbAETd1n${EB&vMw6&E^v_WSl=Ew7s8Z_O)>%!dWxj8}QWW1@|yd<>xQTMt0P^4674;bgm`( zZ>@lE9dnCJfi`KTep%H}LFe+PgUcIlCNFw@RgaZiS0=Mpl79cfW@#z>h%-nbxYr(B zH*DFunQbx^=@BwIG{ThgH0fx+X>2hk%bF7rhS4r5bBlFU{kT0qPhhovb9Ka(RNiP+57!2}qCKFhMzTL>+eCgcEw+##e7ex=lE46Cz zs0Fnubf4R|F9CU^d?dE~gr?>j|A2rq2G|h_WgEB!H;F^0LoyoDyhW;P=3SPIX)I3Q zG_UAFG=pl+`)%EIZ!Xoo3$fN(H?ldV`xFM5@nPHyV$og=f#5`I6|QgrSXci5bx!4&rpLRj+&wY_WA7dZ(I>shd{x}HBQYNwNn z8o}^{FkZdxFns1jaSSmtOjCk^o4{4JB7H)*b>Uv1mo$HD8s~26%A!uX5f6_Zl0>Y| za9k3Qkv|bDL(bqsJ^w-=_vdz;7<)BK_mLP<_o8HoBTAL^9t(t>6VM?pmxchZq%GBM z?emk~B7&J0?#h3?T67s)maX4#OyvCe^Ly@Y6BkC*qC;g6S=fKveCWe&{gfAu3Rl7(&tD#A{k*k9d^h5Kqu0v z;f21S#VbVMKr0h^0x#L}6i)fS>&Z3=k^D#q4O^Jd9~c?=19GfuI^qFJV=XlAawr(U zWZ(-V6{bhTVH={V(tXmm-<;c=L!!2kLKl!54;rr}(Hf)?$v+y$-fC-U730pV-*oS^ zrj}OQ^3c6bU!LHk?OzBTDeQ2BV;C7Oqa!=NJR;H&)&$a-sEUZ_)-VVnuhAZF>=i8L z?Y0sgy^VFf_X+l>OQd?`=^IAPrupwGnYlZ@x~eJ0SxISBz>e*BGY?0Av)}wsjI^Fb zdlU7H}%n-N^k*=Xe1nXNo`fY)axE1{s6iZ)OO~FWn|rYH zLvIXTX)d<&#BrMOfY@QrD{bf#C-P<(R9IvXh0%wXt8%I&CiWs0qwj$(9}}}O1n=;< zqc`G2Bs0AKmO@1SM0#RzTLW$%kzZC@F4o#2JipeS(`|PI1>Lt$7Ex~5r>(7>3!!aN zT^s{X^ARCA_Pc3{In?A??eg)nLvU(zPEic4v&j(w#l zj7xCip|NXa8b^w1o+6SLC4Q@@tPJT{^P{Y^tMD!lJ5)F0>=$v+z-6W!x2+SGyuiVD zGVl{fsPrUG*6LKtw%WCkBi@HtKpQ_JfHC2$ae2*KuFlNp*VNXge$4Q-cgGCxa*}}X z=mU$zYQEq4`SWEz%IU+EtLK^AL-)6J*Vr)dmb+Ho>_hnM^!B!M1|5r&h|dIW#r+sk z>o|H4k(?Nuj_U%OD7NJG|`^ztqQ*qAta3gVW`A=ZCcASP^V z1;*&|_~z1<+Q&E^YuZqM-{vR7{_kAxnUDkOvRqF%5~+e<9j)db)I~vu9&>z=%I1c_ z_2PNc$v>V2uDA(&C*dr-i(*)q?j$%HwKM_&qs6%JeZwUlW?lj=ZDwtwuPs-!4Jlh< zbAK*&qh0D}61?;xtwUos3M`lsH>FhWPCwSH@^xuR71S3Z+MK`mCzKR_Wa2!vzH`t< za9-Ide46v@ADiwOY6R)$f@La75TgDR#%59qiL5d7al+D}`mlXYN1S*AFhsQTU za#Dduf4qjacHvce^y^!8$u?!iXq-$Z5F+1SeXJMfQ@>~a+>LrijtQ(;nfH-kOz5mu znIpbjLgOEYx{w|k#|xWfuh2A38yvI|))fGGHZU1a8%+OFtDeFMSdrE(;$qq+Imecr z`p5{_t}z%a4p8g+5KcE@#|a%uI9wB!{}0m9f#nq?auCnbP8(xr@wb~aMSR1;#Gwgk z@7?IAfyvW87M6qLRhCYUVkyQvj{QED4UyPL>P49`4u{h|u#*&PE*>L|Bp(;u&W}w) zstdJSz0s}3CZCs={fmOccgvphQK(yB*8N$zO;0J6c{t6r+PGRA75a2G=mKTR9--C- z6iu(8Piigqv8cg1K?@V(`x{c&d_&cVNVjsROrK%Fel=tTnh%(;!w-|iujvzr&qpLv zmV{cr?oJmhm+Kq0e)%(CeU%((=YMNZ^8bEgo)cfczPMHUN7?ybURwwkeg{kT|5qlx zE0X7%=)XOtP4 z-ExyR9mAN6yNDz0c7HT~9du9DY>K%$^D=s>X2h}$b-T4tkr02dJ zk>D|J*6w?^2^{8aA0N|ySw?Cb?dUr4;yws2{;((9c`j4Y7qK)Og&X95lWHU@D=UJ9 zxToq%w=4QjK~Od7YirZ@^YQVy92yFq;ux!Kys%?-P4g7b@i|F%0^YoyuWZJ|cvSvY zm6EybF_F8R8nIbPMd=hT46Lc6@mgMP?u<}(J#wqmXi=3yrZa=-4=oned`Bdja4HZ< zYl$PxAYn)~@|eUOfZ#|JPqF}gAsnwx!(;c_w{M3#8j^p&Fb6M8v^B3l`I(_&*0Zp} z{|mS$khTQp+&90XK|N~AgjU>9=VR5YJaAf`nsS%6XxN_aN~>DGj%?tq*J`9D`@*a& z4yB4Y9yzOOw1YczR>J3?P!q10{PEfeql7a=pKpz-#j912bzF`e7#(dee;Aubxs5!JuV2uj)W%{qc(Goq)o#$8T>iVl>FHPPsRKXvcUkj1N? z(@z!trLgX(1-Gdo40@Sm*>afPjN#?N3qc1wOIAfcOrD508@XX5w<0}R5un#jIXYQ^ zaj}(@iYRJ+n2?YFu3R(X#p=`4vD?G9NuQgpoN+t=dQpy-W}i;IikOQ~kJ4>#6@T81iGiT&2q z-F-%Y+OoO*@uJ`6#mTka^e+P9>y9SXehk;!ryQ={Yo%Ww#?_9vD(tK@vvE^1sjj&X z52i>2ZRYO0pSD4=YA(E&AJ0NF{X~Yibs}TK%`^2EcEyNJoc4aH6CGzqsyZc5_}@mf z|DQ|i|LM0Ehhef?P&@`AAas$>Y{=?&2*19M#{XJXSAd7cI_ptLRUir^`ycP0gV_g^ z<3Hq>en23B(%!Qde6=r-+u8c~lx(w<8^mk1a)$I3_BAgrlU=|1t-__``09N8hr(iZ z#esE-%9-cmNBbenrg(lZbqq0#{x?tPvtLG;if>?9ZcLG?Zz>3cNL^Y~7et))DejLrMS7)H?5Ak}aZbI`t8^@_9GnW#+H%YX9kV+Vo zyBIkAMR47V5QtEPk+P8|M*G1$fESrw3-$N6G*{&DR)|(EE-roiW)H`;VQH`feStbk zjwOpfekkUIJx@!^$HwkP=5`~HIenj(uAv)hfk!r1jygUtD~t{7JeGS3VMFQ!|P>AfD96kLd-HosvFmHU1VK826dZjF%fARZNA3nd6pP>Qc|OCcA}q=JGi#$#W%L z)dDukD1Yom=PuY1L#0J>*=CoIFF&|1l!gqWpU`|fZR zyCXJ4Y8boVsXmgMo4clUZk{;g-lNmG%nYt~C@jv!tfKf9el~DYr6)+? z<)=|$07@9e<^W97lOEgSe#|IV3ro`R_UU@Ne2$M#m~aw8cF8yM3i3Lo_egYib>*(Q z92NZwI(&$@;;r&Ln@P70#FKJ1)%S>QJL0L}!5K@nAm9`&!c{-7ql;{_Wa^JtCvu?u zx__G_QTivdZ3ZCEx0RIvlT>#vuN8>yPh1Iq+SdTwFvEa3>J3L!3*i`uD(271yc72J zsR>$)m2%dylgKBPjXRA%fK5brAp(*`QqJ|O))+r>GwE%MdY^<)s^P8@htRb0Sz5QS zq{g2sQsx3wabj|=pUwkiHHrMK6YH0*z$-aT=LWJK;o3#k}?<#86f#~`JuU-I%1uJDijUzm1A>dcTK0&qWFnrU;; zh)gjWe3;m+V(Q8En|jo#H7eR@QMkU}&5}{<5Rs1~bkM9_geA=4&+PK~JnobsP`yvf z1Qq$yqx^!B&?m`!&y62JwIG;D4qN(mdAhRANCyNHl5Kyyo=vKcMf+wsf&&Fp@E0DYg$|F%p31hCx4j43UJ?5{ZP17pH_J=v0#v zvYuvkV@HcRNhDHRlcNK}J7peWb>ki&Tqo(CYXAS1g!t-GYu>TBXy*!7IHu<0yIaSV{yx+siuH zJ@zfsbOc1(Ux z{HzdrFT0&-Iw}FvEUP>T+4^`3c-eohZWKcNlghY|kmc@KOEoxQ^)fNc-+~|PI$5B? zI0ODd{e=;z(I%Lu>THIeWuFy`@Z4fqrE;}2&6S~1Z38_Q6~p86tHiXlaRio%mB$#;Jwz6^QdO{agY!3=Luy6{*FR z(z7`GCE!XP72O_u@BNG9#;9+8_^;m(>x5B6;HMYO!bIA!|YdMP=$@%Rj zXl`$<$9oH209j@M-Ozva=wT_Z8oR)ow`vQ#s0~IpuGnWkH-vm=ksVzBh%Qz-feY|> zRS*YE@SH{DDO=7XHE3M^%?(_QL*T7v{iA`6?~JU_Q+F<6dSP`mO5ixVMjNmp-lckE zXb;4)E7m}jsekAO3m3w_0%$aGDXHWk4F4d1_#uP3kV^o->)KIK=lZQBiQJ;R86lHu zBVD5t>;I5^bb{x2z=e5D*l~>C?wuPUJ%{}m+Y0OWF19N&z)XV6Y;bM`4FWPa*i zz4-;ge|M|XPs$KK3+%XDr2d=0aR*{}5tX$UH#*t&#E3ZtGUfFy-OrgQ?Aji9-eGWO zZK=;s1k6Qq-AT_p-i1cZV#43SyBvk? zw^resw-ic*tx9%arS6A$ym|y)MExHGu4?IbR4>LQT|?Vl7dsrQ_i!z@ve)umA2O(a5S$Wn>i+>rFqVbmvG%Wil`(qyCI1Exd^*oR2;36pVQN7?R;1@@pY}^OA zWoWOn-OC#i1F`W7%6n@ep=pG;X&Sxx*xo}ir^g@xBj=SEXf-2%xRac5BaK(+V5_rlyRQ@c;Y)dbv*w3J&MEr7MWfG>cJmNdK ziYr~QVT$%V(DYZgite*|SN`R#baRzz%#C6%jf0IdluT4Z#N)0Co2D|~)IvPl2o^>` z|G_`u8e77WY}gRD(De7Edd;S(#K$-WBQK|&rIIiG1Ly9b)0W0m+en{lEOqG)2GU{e zDvIf7`NIS&JyBLve4A|1u_QSeSdhRW4u(vAgA^0y{nGgF=35gk6{j;Riq6EcLDeSS z_Tbw$u6g%Oqi~!MU%g)KR>X7AoHyOhz_C`^^iC3KRC;xv z#jm&V>^T~;E1W#EzgooOiwu=q5lI?3O`Pt3jP|J9Xpj)X`XI+I<55Qqwmsh9 zbNqjGZ@9^X$8tuWJ}$!Yn}LNnxFj3VxzhG~K#)(H2n!=lLM8|B?Pd!qT&V1ffpFdr z$o}-WprTg~P;tR5a}w1%w_-4Cs}e>wJV>rCz_!a}Go&ks+td>Fg=hectS zj*d>g&(o*;o`zK@YQ(2ptt#NVuFBjkWDsVPH@?76l)hsnjeDsuPbQ9Cqn;!1#bG+G zy9!tH-6hthhD8Q)mLSV(^+{FfmI zYh7Br0$!**4yDCQ&Jm{pVMkg;ywEmzWzny!ph>iQ0je^&9U6oAwb%t>9cMmQlhw;P z!Sdxraa@k2m`8U{KD8w7M10y1$`#hu)>Z4j*Qlw@Bv|remYaX@cQk%BAnmCM%W(-z z>b9cM?`yv|y+S-KHb%oR&VX*7h(e+1sGtvS4>ik@(TtVKj``4QdCGHvJAvD8SuS{j z7tm9KM^suc4WV1AAI--sPr{ezp6!p03{_koe?lwfsMpk)29J0oAd{0gt3HX^sa@{Z z+h#cllWn+}`!0De7WTUBLUla1%0_fn(X7ZkRzHZns12f9TZn!I<@%N>y37^ZWK%I}-Hd5$8s{!9<&iD{& zhQFGGj1=coX#MM8Vd`3N+^dHzPcI?fGED%qqC-MDp*&GeWMKVgHLNBWX zJiGsJjSR|&cY@LUXV*5Fn@3&~T5 z$BI1*n%_7J)%`eLQ(XD2VjeNvwWaSp&8QL15EIq1YT_31gHnQhL%acrlM4Di zZCol#xOY74xh*now7DnRXaVqP!I5M-OZIJDo3p9hxkMVc?><2^=Ti)Z;wd;Ak7y+S zIM?B^p!Fq>wMY{n4A!z2|$b4gRfuTMheDXp@=e4A-C-pL!FAm1yXgZz;hh!J5Ye)yAIB*Z?1h{z%@**;<+ z|9S88zwWV$Pwy!odEm##D{pIFtiaQ6;pV*YO%lI8clDm*E_t$}xl(hg#mb-LK#eH$ zufMW;ol|&~(zck6CuMZ_%zoBHUsDg6(1XM|S#?dJke+b@xjPO4@+#9IV zb;H3m2`hJ9I&BqG9ycI+B|QIsI2EU(TkH#=tF~g~ciR`AE(k107=X7@aKc>!E$`;E zoquySD;<~FsbzH-&v8jIHZdtZtosNkL`zF|t{1HU6=SsBA-}N+$rWW=?3GFwNr8w) z4a|Qh(d>csojGRkxWfyWl6=uTsLHe7IUmbGg|6-dOS_q^*D`_je#MW{m+$I=XL?lw zs>2ZcgFTPJPEBa~Ef87<-a$0Ngc%3jM0{fk1?>dvdZ#mz6KMKQ37cvV9|mYFVK{rH zIUD+Xl9sQj?zhkq`Lh{!Jl=l2jk2aZ>dALNb1gpzyARD&g8eM}w0j8ddUOYZC5RI& zVI>OwT8#~}{>2VVQ3X`u>DZ_Vw4^3)vGae#p`&4^CRQJ#S>4)Ae|O4T33}R+V@&L2 zc#8$Mgq=%HWC=f>jLsu~Yksq8_r^LfI`0qwBVY&N-YR(#$7MlY%f3rG7}#A<7lj)E zT#h(=s;<#Kf6Hm!;v*WGvHBCt^G@Bj8@5hw-}n!bZ)Ue8*>;z5pMQW+F2!4D)}dK` zAVXa~;^*ul`cJ)w3#wKPeO4&>Q&UE~Cv617eX z#oL*pr1SITgW~;O|An#;Z|hf=5nXv(;SM(+h7xSRCwOa zG`_tlT~on9WCSFzH{zh4`|r$a5Bz?$qlo zWCWzV36uwN71epB!%yfpeWNLN`xHFT7mA5;6)CEd4Mmv)MD?Mxaev#h(O^eA?UTkU zE*5uo*y>3TujrkzJVMgv$F;`ZAxt*6BGt#Kc$WTp2dUEMh(q_(oWT)3j5LRY|5=+jA+xq%+PS8i7C(Hvprcix=2cb{B=4c1EWHOYKjKsvy-T@NT2Yyn5d~=iU zJu#mL&2>=DgzcA)Y~R|G-!YtJ+>^7xIn>!APQnbkctK%?rM+1>(F94YQlYd-rtiS;(iNy+x zqdNhu5!YSS9$bZY-JPgVE3aPi0?t(thPb2N!AqJH{uBY}HN$@Py3)xo{$Ug6l!=_( zqeL8Gwir3=9p$BL|bsFuJS3W}TpB{eiFJ_7i0N z>pX*h3bfEMF2b|lONN)%*1m@H__ zNyKdQ+@dD0JDFV_zS?bx-ZUY~-q}R#7_UD6g!FtkdMEubYN8DLEOe9epidOGtZN)v zN93Ye@s00~?3LI<5Rv6w7ebmHG$`A`pP9=J^q*9Dyy!ygjY95dnRuR+GkIH7y1Fyz ztsw9V{TjmNXhaU-2(yi)m&t#9ehVA+8ipl7%v60;?89XDUH94}ZvPnW`Y=1AQ zv?jY~$_*R2IU3#5SB`|3v#aJf_-cZqr=mhLN}E??9E}}5%P|uZ@dBc%96PA9H)f|L zYQ(rb;c>KJr7R*6f`@}mHSH!Cm0|eRL@%f&D!6WtD%WrIGePxJ&vR;B%ou2G?cK^8wE&j&jaANuE`b&kwjT+5h~)K#3KZIvS;K&0}^(3+DafxXYB`?KgpN zR;;J#0jG0=GFHp>k7Fv#D`_%A_U*r)75Hu!;khtw#;MItY>PA!!kLQBs}Hv9sUYRH z!ax8m1d*rVR$6iYA=CZ;c{g9w!BAFEPO*P%j<||GoK%&pKiu)x-1Xf7+OA-BUVm=w zvZ-PO+U?6|KQ6YTx$cxt{l$fPow(VEuXco@aqFuW52vmQ{mp%09{1bz-7CkULI#`C zjiLMk;6jk={N_Uw(~h1iwbnu*B9C|bkQIt7rQEjt+=L-|LHB&j=Ch?Ogh#_ z!fuQzfu2MD$D%eKR*>xIQ`D^(5x=@Pfm*)n6Ls>c*kP+3#Yo}orrXE)Ea{=4tzM&b zTL6Zio%$3HI_i8{Dqw3+-u2Lk{DV&xg8NWB1%4OANsgGuK!6_oKN||Lo+ECxM(!=} zsX*4kb@(Kdg-O$=_c}v$7}$J3VcQ9jDW&tJG*rmp4kt419v&O>4t3CWxob|}10=vl zizl>ibNHi}ysKiN?URe|+SLGaZn)Zllr$G(I32VqJOiTo@I>qNDR1Bi!KBR_ul^0B zmx!L89^j$OD?Q!d;o(sZf%I+?mLF%}Qb5rsBs)9XvR>pP3w(dNdvCVsrAP$ z18Se#VEP0uUOLbtN4DGg1PAX2L1rPK7*UK~ZUpx;Qx8oPI>Ae=otu9_;b0rztGuv- z4YpyzZy)bMI`%F?o*JYREZ9D|DyS*=LQVX=g}ST+n4yw=NQVsk<6S=v%aPI;xz3x&41Vw*DHcsG^s+aCDSIsD(UL1aN=za%3 zLU~l-uKUC5htndvSFwli#c^a08wYe;Lo_jD#go4wD1;{WR`7qD!A9ZGFnu88u$8GO zU4C>O6Is{Hm256P%PTUGXP;>!f!%kpm#09u6Vhp3NqS|959u*tCs6#a`Wc7sY>n8#RT_fBg~^5a6QzjJdPGTS?z8o!#J89jy=$@0?i~K`~;J|eE1nN1`D^Pu2z2@ z6Z@N+r_z=vb|Y*t*n2pN-3}K;7Qb%+SI(#4;6?m;;uP#@tGMIE1Hu?|(y-TV#Oqm} z3?0|)F=_ULT!&S?&(*NakdR|WE+?w)NW8FqVUuaifnDpYk4&%66Or9%Vq($=jUrFY zgApDUu*JW8(=L3x#wN9u4v=BJfbMDolb6>lGkT$Zq*%Gw>-Fbv<6XS9iEBk<`auba zNE(e6LvE{YEdzoV1Y3Q9}5Z!s)YnHAN@9L7mI+} zgK|p@q;r^y{`hmRAxkYw&`@bbm^l(B#=WIIsfEK$=4%Y3Vm`rVE)pVC2Pa#GB zU2dN4u`~^wm*luk#_F(`Zw((-Eo+-w6=xo>bv#g`9+nu&!6fbRMFRuMvG`WMOG9Rv z{azKfOe=$p$-yDhCxgpbxGZkyXM|8& z(tdsB4{>H&)y{@FAvwYUy<#-u@^z-u4eSO4&R0Ke8)%2Dz-<6?gK^{Y<5c>_@F2Xi zf`=HiK-4dA0iH}4Ceya|2fxf7BwE~T;r{rM{|xpGvjj|KI_9(_;)Pu3`WKh$0o*=t z1`tyy(URT5Ja1qz-vF?ZXRYFda;C!)R&jl?W~J+r4ew^T4jH^JoG&FuVQp27nZD^k z8}scx#suxardNFNOToTm*;dE>Cik31HLowyyYsY8)#Rg(=H4z67Z1)gpVG{txGt^7DStwrKnwDmW>o#KWeQr$Cz^rRVJTvoRA>{K#o z*%8^uuU=mq$fuPi^vfCN6P`bR03}aD5^uG3sy#7lU_~>AMJ#rB({oe~&(6~6mJUy@hO>~Ez*n0cCfuf)6v=_$Yd!~HAb(|6zFEaEflOPk(& z{I=pZ$BiiDflLX+tCVZj&E46A)JQS%sg>!K^rJ;D;!W>5+FtRxqIj#}Mi=|E*)6QS zUWnoT%`@1Pz9PE?;^2Aw)p}|CRi}gFTkh=W|D0SUf3&afZblwUAZ3p@-tNk=prL;i8qzi zqsdhzF2aQMr~p7cXZ{QTP4$6*8gU(T!p<^jhB{Ms^uRTw zwo0zhn~>C}**!ADW+7tVUrn9#RBK)w4$33nV7m0b-tWR?i>=(NSzEr4QjL zzV>8IzO|5gz2lae1UIpfhSdBuDmY1={I?5h_x`8#Fd^qZ$I(?nuCg}L98Pu&XmWV>e$G3hyJn8l`NH1&8wo8(VD#|b^;m-d%E^-))f$G&J%07yH=57GTaoEWPQ^_KeTrS_||1Ue*G@1!)LK| z5AkdGqJ1&I-!#k{_goC4|Alz1IC!%!ruL#xs0LAuaX-IX&7}VQ{%2yu5wBa8b0#6g zoi*uf$%n|XnkTiDe)bsCA8y>sF+E`#vs9&??md-lQl>{V)jY=k$*GS0jV%1t><2BM z=BxF!xra)J$EVDh#gCyE0s(Y_@^$<(?T*zjP~}WRS8OtScG*(^`!1K zy)j~xPSgCv$?sU*cU3O`Yt)RBC1?9vzfhSgK+3@2`fpX4SEO?=U3Ii~Wv`5rts3Dz zm6-mzVGN1w@%Ji5Ir-IZ8dlWJK5_${3F9c@oO*VZQInx?o%7KJ|1++7|8 z9?g$39o`)>o0}Uyii&~$C4)jd-{0-XnvA9yZ=soxo4T36V9<+2iito$y3FupKjGpS zb}xA@qr~*(mEPuV^^4wpjf%zSywOPCeVb3ZT!N|s#K=9fMT-!;P zlI8*GosZx5L&umN3Ar98XKw-Zdz

p5nNmRi^fHWqGEPWv&M`Bfiq44I9~Ih+T(q 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 ATmS$7 literal 109930 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 j@fP Date: Sat, 23 Aug 2025 10:32:17 -0700 Subject: [PATCH 17/66] Update guildmaster.dm Minor spacing fix. --- code/modules/jobs/job_types/roguetown/yeomen/guildmaster.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/jobs/job_types/roguetown/yeomen/guildmaster.dm b/code/modules/jobs/job_types/roguetown/yeomen/guildmaster.dm index f1f8733e..454dee7e 100644 --- a/code/modules/jobs/job_types/roguetown/yeomen/guildmaster.dm +++ b/code/modules/jobs/job_types/roguetown/yeomen/guildmaster.dm @@ -10,7 +10,7 @@ allowed_races = RACES_ALL_KINDS - tutorial = "You are the leader of the Azure Peak Guild of Crafts. You represents the interests of all of the craftsmen underneath you - including the Tailor\ + tutorial = "You are the leader of the Azure Peak Guild of Crafts. You represents the interests of all of the craftsmen underneath you - including the Tailor, \ the Blacksmiths, the Artificers and the Architects. Other townspeople may look to you for guidance, but they are not under your control. You are an experienced smith and artificer, and can do their work easily. Protect the craftsmen's interests." outfit = /datum/outfit/job/roguetown/guildmaster From 1ba6d66708771c9f496fe1836aa8b2a63b2508d7 Mon Sep 17 00:00:00 2001 From: 0koyote <143236212+0koyote@users.noreply.github.com> Date: Sat, 23 Aug 2025 10:39:24 -0700 Subject: [PATCH 18/66] Update steward.dm Minor spacing fix. --- code/modules/jobs/job_types/roguetown/nobility/steward.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/jobs/job_types/roguetown/nobility/steward.dm b/code/modules/jobs/job_types/roguetown/nobility/steward.dm index b9bc2b64..fd3a6605 100644 --- a/code/modules/jobs/job_types/roguetown/nobility/steward.dm +++ b/code/modules/jobs/job_types/roguetown/nobility/steward.dm @@ -9,7 +9,7 @@ allowed_races = RACES_NO_CONSTRUCT allowed_sexes = list(MALE, FEMALE) display_order = JDO_STEWARD - tutorial = "Coin, Coin, Coin! Oh beautiful coin: You're addicted to it, and you hold the position as the Grand Duke's personal treasurer of both coin and information. You know the power silver and gold has on a man's mortal soul, and you know just what lengths they'll go to in order to get even more. Keep your festering economy alive- for it is the only thing you can weigh any trust into anymore." + tutorial = "Coin, Coin, Coin! Oh beautiful coin: You're addicted to it, and you hold the position as the Grand Duke's personal treasurer of both coin and information. You know the power silver and gold has on a man's mortal soul, and you know just what lengths they'll go to in order to get even more. Keep your festering economy alive - for it is the only thing you can weigh any trust into anymore." outfit = /datum/outfit/job/roguetown/steward give_bank_account = 22 noble_income = 16 From 513f09546d16f67d8b20d353757e3e56dcc1a319 Mon Sep 17 00:00:00 2001 From: granodd Date: Mon, 25 Aug 2025 18:09:49 -0400 Subject: [PATCH 19/66] various updates Updates several things relating to death and noises inside of certain places --- code/__DEFINES/traits.dm | 2 ++ code/_globalvars/traits.dm | 1 + code/datums/status_effects/debuffs.dm | 2 +- code/datums/status_effects/rogue/roguebuff.dm | 24 +++++++++++++++++++ code/game/area/roguetownareas.dm | 6 +++++ .../roguetown/villain/zombie/zombie.dm | 11 ++++++++- .../adventurer/types/combat/lurker.dm | 1 - code/modules/mob/living/carbon/carbon.dm | 3 ++- .../mob/living/carbon/human/species.dm | 5 ++-- code/modules/mob/living/death.dm | 21 ++++++++-------- modular_azurepeak/virtues/combat.dm | 2 +- 11 files changed, 61 insertions(+), 17 deletions(-) diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index d3338be5..61085018 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -65,6 +65,7 @@ #define TRAIT_PERMAMUTE "Permanent Mute" #define TRAIT_HERESIARCH "Forbidden Knowledge" //allows entry to ascendant church #define TRAIT_FERAL "Feral Natured" //likes being in the woods, hates being in the city +#define TRAIT_NECRAS_ABATEMENT "Necra's Abatement" //keeps deadites from doing much of anything in town //Hearthstone port (Tracking) @@ -300,6 +301,7 @@ GLOBAL_LIST_INIT(roguetraits, list( TRAIT_MONK_ROBE = span_notice("I feel closer to the gods in my meager robes.. I feel vigorous, empowered by their light!"), TRAIT_NATURAL_ARMOR = span_notice("My hide is thick and resilient. It will regenerate so long as I keep it fed..."), TRAIT_FERAL = span_info("The wilds is where I am meant to be. Civilized realms are no place for the likes of me."), + TRAIT_NECRAS_ABATEMENT = span_info("The Undermaiden's gaze lingers upon me, and intensifies as I draw closer to hallowed ground."), TRAIT_EORAN_CALM = span_notice("Eora has touched me, granting me some calm. She protects me from the peaks of my stress."), TRAIT_EORAN_SERENE = span_greentext("Eora has blessed me with all-encompassing serenity. I feel no more stress."), TRAIT_NECRAS_VOW = span_warning("I've pledged myself to Necra. If I fall, I am Hers."), diff --git a/code/_globalvars/traits.dm b/code/_globalvars/traits.dm index 0811b066..09ca9cc6 100644 --- a/code/_globalvars/traits.dm +++ b/code/_globalvars/traits.dm @@ -129,6 +129,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( TRAIT_MONK_ROBE, TRAIT_NATURAL_ARMOR, TRAIT_FERAL, + TRAIT_NECRAS_ABATEMENT, ), /obj/item/bodypart = list( "TRAIT_PARALYSIS" = TRAIT_PARALYSIS diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm index 343fc5a9..284e3ba3 100644 --- a/code/datums/status_effects/debuffs.dm +++ b/code/datums/status_effects/debuffs.dm @@ -125,7 +125,7 @@ if(prob(20)) if(carbon_owner) carbon_owner.handle_dreams() - if(prob(10) && owner.health > owner.crit_threshold) + if(prob(10) && owner.health > owner.crit_threshold && !istype(owner.loc, /obj/belly)) owner.emote("snore") /atom/movable/screen/alert/status_effect/asleep diff --git a/code/datums/status_effects/rogue/roguebuff.dm b/code/datums/status_effects/rogue/roguebuff.dm index a88acfe0..e4f05e97 100644 --- a/code/datums/status_effects/rogue/roguebuff.dm +++ b/code/datums/status_effects/rogue/roguebuff.dm @@ -375,6 +375,11 @@ desc = "These civilized realms are not meant for me. I can feel the walls closing in." icon_state = "debuff" +/atom/movable/screen/alert/status_effect/buff/deaditepacified + name = "Necra's Abatement" + desc = "Necra's gaze weighs down upon me within these hallowed grounds. I am pacified." + icon_state = "debuff" + /datum/status_effect/buff/wardenbuff id = "wardenbuff" alert_type = /atom/movable/screen/alert/status_effect/buff/wardenbuff @@ -409,6 +414,17 @@ if(!(our_area.town_area)) owner.remove_status_effect(/datum/status_effect/buff/feraldebuff) +/datum/status_effect/buff/deadite_pacified + id = "deaditepacified" + alert_type = /atom/movable/screen/alert/status_effect/buff/deaditepacified + +/datum/status_effect/buff/deadite_pacified/process() + + .=..() + var/area/rogue/our_area = get_area(owner) + if(!(our_area.town_area)) + owner.remove_status_effect(/datum/status_effect/buff/deadite_pacified) + /datum/status_effect/buff/dungeoneerbuff id = "dungeoneerbuff" alert_type = /atom/movable/screen/alert/status_effect/buff/dungeoneerbuff @@ -436,6 +452,14 @@ . = ..() REMOVE_TRAIT(owner, TRAIT_LONGSTRIDER, TRAIT_GENERIC) +/datum/status_effect/buff/deadite_pacified/on_apply() + . = ..() + ADD_TRAIT(owner, TRAIT_PACIFISM, TRAIT_GENERIC) + +/datum/status_effect/buff/deadite_pacified/on_remove() + . = ..() + REMOVE_TRAIT(owner, TRAIT_PACIFISM, TRAIT_GENERIC) + /datum/status_effect/buff/dungeoneerbuff/process() .=..() diff --git a/code/game/area/roguetownareas.dm b/code/game/area/roguetownareas.dm index 0d656ee3..84f92ac4 100644 --- a/code/game/area/roguetownareas.dm +++ b/code/game/area/roguetownareas.dm @@ -52,6 +52,12 @@ GLOBAL_LIST_INIT(roguetown_areas_typecache, typecacheof(/area/rogue/indoors/town if((src.cell_area == TRUE) && HAS_TRAIT(guy, TRAIT_DUNGEONMASTER) && !guy.has_status_effect(/datum/status_effect/buff/dungeoneerbuff)) // Dungeoneer guy.apply_status_effect(/datum/status_effect/buff/dungeoneerbuff) +/area/rogue/Entered(mob/living/carbon/human/guy) + + . = ..() + if((src.town_area == TRUE) && HAS_TRAIT(guy, TRAIT_NECRAS_ABATEMENT) && !guy.has_status_effect(/datum/status_effect/buff/deadite_pacified)) //zombie pacification + guy.apply_status_effect(/datum/status_effect/buff/deadite_pacified) + /area/rogue/indoors name = "indoors rt" icon_state = "indoors" diff --git a/code/modules/antagonists/roguetown/villain/zombie/zombie.dm b/code/modules/antagonists/roguetown/villain/zombie/zombie.dm index 83ed33d0..4cded011 100644 --- a/code/modules/antagonists/roguetown/villain/zombie/zombie.dm +++ b/code/modules/antagonists/roguetown/villain/zombie/zombie.dm @@ -53,6 +53,7 @@ TRAIT_BLOODLOSS_IMMUNE, TRAIT_ZOMBIE_SPEECH, TRAIT_ZOMBIE_IMMUNE, + TRAIT_NECRAS_ABATEMENT, TRAIT_ROTMAN, TRAIT_NORUN ) @@ -184,6 +185,7 @@ zombie.remove_client_colour(/datum/client_colour/monochrome) if(has_turned && become_rotman) + zombie.remove_status_effect(/datum/status_effect/buff/deadite_pacified) zombie.STACON = max(zombie.STACON - 2, 1) //ur rotting bro zombie.STASPD = max(zombie.STASPD - 3, 1) zombie.STAINT = max(zombie.STAINT - 3, 1) @@ -191,6 +193,7 @@ ADD_TRAIT(zombie, trait, "[type]") to_chat(zombie, span_green("I no longer crave for flesh... But I still feel ill.")) else + zombie.remove_status_effect(/datum/status_effect/buff/deadite_pacified) if(!was_i_undead) zombie.mob_biotypes &= ~MOB_UNDEAD zombie.faction -= "undead" @@ -272,7 +275,10 @@ //Add claws here if wanted. zombie.update_body() - to_chat(zombie, span_narsiesmall("Hungry... so hungry... I CRAVE FLESH!")) + var/area/rogue/our_area = get_area(zombie) + if((our_area.town_area)) + zombie.apply_status_effect(/datum/status_effect/buff/deadite_pacified) + to_chat(zombie, span_narsiesmall("By the gods... what am I?!")) zombie.cmode_music = 'sound/music/combat_weird.ogg' @@ -329,6 +335,9 @@ if(zombie.stat >= DEAD) //could not revive qdel(src) + var/area/rogue/our_area = get_area(zombie) + if((our_area.town_area)) + zombie.apply_status_effect(/datum/status_effect/buff/deadite_pacified) /datum/antagonist/zombie/greet() to_chat(owner.current, span_userdanger("Death is not the end...")) diff --git a/code/modules/jobs/job_types/roguetown/adventurer/types/combat/lurker.dm b/code/modules/jobs/job_types/roguetown/adventurer/types/combat/lurker.dm index 134be823..2d6d0b5e 100644 --- a/code/modules/jobs/job_types/roguetown/adventurer/types/combat/lurker.dm +++ b/code/modules/jobs/job_types/roguetown/adventurer/types/combat/lurker.dm @@ -22,7 +22,6 @@ sewrepair = FALSE max_integrity = 600 item_flags = DROPDEL - //var/active_item var/next_regen var/mob/living/carbon/human/skin_haver diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 4ff3fa65..95af1242 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -994,7 +994,8 @@ src.apply_status_effect(/datum/status_effect/buff/undermaidenbargainheal) return if(health <= HEALTH_THRESHOLD_DEAD && !HAS_TRAIT(src, TRAIT_NODEATH)) - INVOKE_ASYNC(src, PROC_REF(emote), "deathgurgle") + if (!istype(loc, /obj/belly)) + INVOKE_ASYNC(src, PROC_REF(emote), "deathgurgle") death() cure_blind(UNCONSCIOUS_BLIND) return diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 45a21788..1d850eee 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1015,8 +1015,9 @@ GLOBAL_LIST_EMPTY(roundstart_races) H.add_stress(/datum/stressevent/starving) H.remove_stress_list(list(/datum/stressevent/stuffed,/datum/stressevent/peckish,/datum/stressevent/hungry)) H.apply_status_effect(/datum/status_effect/debuff/hungryt3) - if(prob(3)) - playsound(get_turf(H), pick('sound/vo/hungry1.ogg','sound/vo/hungry2.ogg','sound/vo/hungry3.ogg'), 100, TRUE, -1) + if(!istype(H.loc, /obj/belly)) + if(prob(3)) + playsound(get_turf(H), pick('sound/vo/hungry1.ogg','sound/vo/hungry2.ogg','sound/vo/hungry3.ogg'), 100, TRUE, -1) switch(H.hydration) // if(HYDRATION_LEVEL_WATERLOGGED to INFINITY) diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm index 8537c1af..d863f61f 100644 --- a/code/modules/mob/living/death.dm +++ b/code/modules/mob/living/death.dm @@ -160,16 +160,17 @@ // AZURE EDIT BEGIN: necra acolyte/priest deathsight trait // this was a player that just died, so do the honors if (client) - if (!gibbed) - var/locale = prepare_deathsight_message() - for (var/mob/living/player in GLOB.player_list) - if (player.stat == DEAD || isbrain(player)) - continue - if (HAS_TRAIT(player, TRAIT_DEATHSIGHT)) - if (HAS_TRAIT(player, TRAIT_CABAL)) - to_chat(player, span_warning("I feel the faint passage of disjointed life essence as it flees [locale].")) - else - to_chat(player, span_warning("Veiled whispers herald the Undermaiden's gaze in my mind's eye as it turn towards [locale] for but a brief, singular moment.")) + if (!istype(src.loc, /obj/belly)) + if (!gibbed) + var/locale = prepare_deathsight_message() + for (var/mob/living/player in GLOB.player_list) + if (player.stat == DEAD || isbrain(player)) + continue + if (HAS_TRAIT(player, TRAIT_DEATHSIGHT)) + if (HAS_TRAIT(player, TRAIT_CABAL)) + to_chat(player, span_warning("I feel the faint passage of disjointed life essence as it flees [locale].")) + else + to_chat(player, span_warning("Veiled whispers herald the Undermaiden's gaze in my mind's eye as it turn towards [locale] for but a brief, singular moment.")) // AZURE EDIT END return TRUE diff --git a/modular_azurepeak/virtues/combat.dm b/modular_azurepeak/virtues/combat.dm index 31e42a70..1571276d 100644 --- a/modular_azurepeak/virtues/combat.dm +++ b/modular_azurepeak/virtues/combat.dm @@ -2,7 +2,7 @@ /datum/virtue/combat/magical_potential name = "Arcyne Potential" desc = "I am talented in the Arcyne arts, expanding my capacity for magic. I have become more intelligent from its studies. Other effects depends on what training I chose to focus on at a later age." - custom_text = "Classes that has a combat trait (Medium / Heavy Armor Training, Dodge Expert or Critical Resistance) get only prestidigitation. Everyone else get +3 spellpoints and T1 Arcyne Potential if they don't have any Arcyne." + custom_text = "Gives +3 spellpoints, and T1 Arcyne Potential if you don't have any Arcyne." added_skills = list(list(/datum/skill/magic/arcane, 1, 6)) /datum/virtue/combat/magical_potential/apply_to_human(mob/living/carbon/human/recipient) From 4ba6ebf0ae3b2864ae6737e803409ab72e133936 Mon Sep 17 00:00:00 2001 From: granodd Date: Mon, 25 Aug 2025 19:34:48 -0400 Subject: [PATCH 20/66] loadout expansion expands loadout slots from three to five --- code/_globalvars/special_traits.dm | 4 ++ code/modules/client/preferences.dm | 48 +++++++++++++++++++++ code/modules/client/preferences_savefile.dm | 22 ++++++++++ 3 files changed, 74 insertions(+) diff --git a/code/_globalvars/special_traits.dm b/code/_globalvars/special_traits.dm index 1acfe8f4..55cda97c 100644 --- a/code/_globalvars/special_traits.dm +++ b/code/_globalvars/special_traits.dm @@ -43,6 +43,10 @@ GLOBAL_LIST_INIT(special_traits, build_special_traits()) character.mind.special_items[player.prefs.loadout2::name] += player.prefs.loadout2.path if(player.prefs.loadout3) character.mind.special_items[player.prefs.loadout3::name] += player.prefs.loadout3.path + if(player.prefs.loadout4) + character.mind.special_items[player.prefs.loadout4::name] += player.prefs.loadout4.path + if(player.prefs.loadout5) + character.mind.special_items[player.prefs.loadout5::name] += player.prefs.loadout5.path /proc/apply_prefs_virtue(mob/living/carbon/human/character, client/player) if (!player) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index f3a0686f..9c7b7ec3 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -172,6 +172,8 @@ GLOBAL_LIST_EMPTY(chosen_names) var/datum/loadout_item/loadout var/datum/loadout_item/loadout2 var/datum/loadout_item/loadout3 + var/datum/loadout_item/loadout4 + var/datum/loadout_item/loadout5 var/flavortext var/flavortext_display @@ -470,6 +472,10 @@ GLOBAL_LIST_EMPTY(chosen_names) dat += "
Loadout Item II:
[loadout2 ? loadout2.name : "None"]" dat += "
Loadout Item III: [loadout3 ? loadout3.name : "None"]" + + dat += "
Loadout Item IV: [loadout4 ? loadout4.name : "None"]" + + dat += "
Loadout Item V: [loadout5 ? loadout5.name : "None"]" dat += "" dat += "" @@ -1854,6 +1860,48 @@ Slots: [job.spawn_positions] [job.round_contrib_points ? "RCP: +[job.round_contr to_chat(user, "[loadout3.name]") if(loadout3.desc) to_chat(user, "[loadout3.desc]") + if("loadout_item4") + var/list/loadouts_available = list("None") + for (var/path as anything in GLOB.loadout_items) + var/datum/loadout_item/loadout4 = GLOB.loadout_items[path] + var/donoritem = loadout4.donoritem + if(donoritem && !loadout4.donator_ckey_check(user.ckey)) + continue + if (!loadout4.name) + continue + loadouts_available[loadout4.name] = loadout4 + + var/loadout_input4 = input(user, "Choose your character's loadout item. RMB a tree, statue or clock to collect. I cannot stress this enough. YOU DON'T SPAWN WITH THESE. YOU HAVE TO MANUALLY PICK THEM UP!!", "LOADOUT THAT YOU GET FROM A TREE OR STATUE OR CLOCK") as null|anything in loadouts_available + if(loadout_input4) + if(loadout_input4 == "None") + loadout4 = null + to_chat(user, "Who needs stuff anyway?") + else + loadout4 = loadouts_available[loadout_input4] + to_chat(user, "[loadout4.name]") + if(loadout4.desc) + to_chat(user, "[loadout4.desc]") + if("loadout_item5") + var/list/loadouts_available = list("None") + for (var/path as anything in GLOB.loadout_items) + var/datum/loadout_item/loadout5 = GLOB.loadout_items[path] + var/donoritem = loadout5.donoritem + if(donoritem && !loadout5.donator_ckey_check(user.ckey)) + continue + if (!loadout5.name) + continue + loadouts_available[loadout5.name] = loadout5 + + var/loadout_input5 = input(user, "Choose your character's loadout item. RMB a tree, statue or clock to collect. I cannot stress this enough. YOU DON'T SPAWN WITH THESE. YOU HAVE TO MANUALLY PICK THEM UP!!", "LOADOUT THAT YOU GET FROM A TREE OR STATUE OR CLOCK") as null|anything in loadouts_available + if(loadout_input5) + if(loadout_input5 == "None") + loadout5 = null + to_chat(user, "Who needs stuff anyway?") + else + loadout5 = loadouts_available[loadout_input5] + to_chat(user, "[loadout5.name]") + if(loadout5.desc) + to_chat(user, "[loadout5.desc]") if("species") var/list/crap = list() for(var/A in GLOB.roundstart_races) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 7f3a1d53..9f5fc1d9 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -401,6 +401,18 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car if (loadout_type3) loadout3 = new loadout_type3() +/datum/preferences/proc/_load_loadout4(S) + var/loadout_type4 + S["loadout4"] >> loadout_type4 + if (loadout_type4) + loadout4 = new loadout_type4() + +/datum/preferences/proc/_load_loadout5(S) + var/loadout_type5 + S["loadout5"] >> loadout_type5 + if (loadout_type5) + loadout5 = new loadout_type5() + /datum/preferences/proc/_load_height(S) var/preview_height S["body_height"] >> preview_height @@ -474,6 +486,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car _load_loadout(S) _load_loadout2(S) _load_loadout3(S) + _load_loadout4(S) + _load_loadout5(S) if(!S["features["mcolor"]"] || S["features["mcolor"]"] == "#000") WRITE_FILE(S["features["mcolor"]"] , "#FFF") @@ -714,6 +728,14 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["loadout3"] , loadout3.type) else WRITE_FILE(S["loadout3"] , null) + if(loadout4) + WRITE_FILE(S["loadout4"] , loadout4.type) + else + WRITE_FILE(S["loadout4"] , null) + if(loadout5) + WRITE_FILE(S["loadout5"] , loadout5.type) + else + WRITE_FILE(S["loadout5"] , null) save_vore_prefs(S) From a66776a42d8e9427e9c50cb6a102aa957ed1a27c Mon Sep 17 00:00:00 2001 From: granodd Date: Tue, 26 Aug 2025 12:46:02 -0400 Subject: [PATCH 21/66] renames things renames things to be less derogatory --- .../mob/dead/new_player/sprite_accessory/tail_features.dm | 2 +- code/modules/surgery/bodyparts/taur.dm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/dead/new_player/sprite_accessory/tail_features.dm b/code/modules/mob/dead/new_player/sprite_accessory/tail_features.dm index 26b1215b..9813cf30 100644 --- a/code/modules/mob/dead/new_player/sprite_accessory/tail_features.dm +++ b/code/modules/mob/dead/new_player/sprite_accessory/tail_features.dm @@ -112,7 +112,7 @@ icon_state = "drake_markings" /datum/sprite_accessory/tail_feature/taur/otie - name = "Virgo Shit Dog Markings" + name = "Large Hound Markings" icon = 'icons/mob/sprite_accessory/tail_features/otie_markings.dmi' icon_state = "otie_markings" diff --git a/code/modules/surgery/bodyparts/taur.dm b/code/modules/surgery/bodyparts/taur.dm index 2eb85ab3..f6334114 100644 --- a/code/modules/surgery/bodyparts/taur.dm +++ b/code/modules/surgery/bodyparts/taur.dm @@ -156,7 +156,7 @@ GLOBAL_LIST_INIT(taur_types, subtypesof(/obj/item/bodypart/taur)) has_taur_color = TRUE /obj/item/bodypart/taur/otie - name = "Virgo shit dog" + name = "Large Hound" offset_x = -16 taur_icon_state = "otie_s" From d977d2a5407d67157d5ddd24315d4691315c7846 Mon Sep 17 00:00:00 2001 From: granodd Date: Thu, 28 Aug 2025 00:03:11 -0400 Subject: [PATCH 22/66] comments out major stress disables major stress events and messages in game --- code/modules/mob/living/carbon/stress.dm | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/code/modules/mob/living/carbon/stress.dm b/code/modules/mob/living/carbon/stress.dm index eb7536c0..3574ae31 100644 --- a/code/modules/mob/living/carbon/stress.dm +++ b/code/modules/mob/living/carbon/stress.dm @@ -1,4 +1,4 @@ -GLOBAL_LIST_INIT(stress_messages, world.file2list("strings/rt/stress_messages.txt")) +//GLOBAL_LIST_INIT(stress_messages, world.file2list("strings/rt/stress_messages.txt")) /mob/proc/add_stress(event_type) return @@ -124,13 +124,13 @@ GLOBAL_LIST_INIT(stress_messages, world.file2list("strings/rt/stress_messages.tx play_mental_break_indicator() apply_status_effect(/datum/status_effect/mood/vbad) - if(new_stress >=13) + /*if(new_stress >=13) if(!HAS_TRAIT(src, TRAIT_EORAN_CALM) && !HAS_TRAIT(src, TRAIT_EORAN_SERENE)) random_stress_message() if(new_stress >= 20) if(!HAS_TRAIT(src, TRAIT_EORAN_CALM) && !HAS_TRAIT(src, TRAIT_EORAN_SERENE)) - roll_streak_freakout() + roll_streak_freakout()*/ oldstress = new_stress update_stress_visual(new_stress) @@ -176,7 +176,7 @@ GLOBAL_LIST_INIT(stress_messages, world.file2list("strings/rt/stress_messages.tx update_client_colour() -/mob/living/carbon/proc/roll_streak_freakout() +/*/mob/living/carbon/proc/roll_streak_freakout() if(stat != CONSCIOUS) return if(mob_timers["next_stress_freakout"]) @@ -186,7 +186,7 @@ GLOBAL_LIST_INIT(stress_messages, world.file2list("strings/rt/stress_messages.tx return // Randomized cooldown mob_timers["next_stress_freakout"] = world.time + rand(60 SECONDS, 120 SECONDS) - stress_freakout() + stress_freakout()*/ /mob/living/carbon/proc/stress_freakout() to_chat(src, span_boldred("I PANIC!!!")) @@ -215,13 +215,13 @@ GLOBAL_LIST_INIT(stress_messages, world.file2list("strings/rt/stress_messages.tx animate(whole_screen, transform = newmatrix, time = 1, easing = QUAD_EASING) animate(transform = -newmatrix, time = 30, easing = QUAD_EASING) -/mob/living/carbon/proc/random_stress_message() +/*/mob/living/carbon/proc/random_stress_message() if(mob_timers["next_stress_message"]) if(world.time < mob_timers["next_stress_message"]) return mob_timers["next_stress_message"] = world.time + rand(80 SECONDS, 160 SECONDS) //not as important as freakout var/stress_message_picked = pick(GLOB.stress_messages) - to_chat(client, span_danger("[stress_message_picked]")) + to_chat(client, span_danger("[stress_message_picked]"))*/ /mob/living/carbon/get_stress_amount() From 83023bb86b14704f639d9c99a98cd9c9c345f7ae Mon Sep 17 00:00:00 2001 From: Sad_Starfish <120674078+SadStarfish7@users.noreply.github.com> Date: Thu, 28 Aug 2025 20:00:54 -0400 Subject: [PATCH 23/66] Update captain.dm --- code/modules/jobs/job_types/roguetown/nobility/captain.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/jobs/job_types/roguetown/nobility/captain.dm b/code/modules/jobs/job_types/roguetown/nobility/captain.dm index 850c0a2c..09f6d535 100644 --- a/code/modules/jobs/job_types/roguetown/nobility/captain.dm +++ b/code/modules/jobs/job_types/roguetown/nobility/captain.dm @@ -228,6 +228,7 @@ ADD_TRAIT(H, TRAIT_HEAVYARMOR, TRAIT_GENERIC) ADD_TRAIT(H, TRAIT_STEELHEARTED, TRAIT_GENERIC) ADD_TRAIT(H, TRAIT_GUARDSMAN, TRAIT_GENERIC) + ADD_TRAIT(H, TRAIT_GOODTRAINER, TRAIT_GENERIC) H.verbs |= list(/mob/living/carbon/human/proc/request_outlaw, /mob/proc/haltyell, /mob/living/carbon/human/mind/proc/setorders) H.adjust_blindness(-3) var/weapons = list( From 1bb717780cf63f37b21ec15e3b56dd54c14f7d3f Mon Sep 17 00:00:00 2001 From: Sad_Starfish <120674078+SadStarfish7@users.noreply.github.com> Date: Thu, 28 Aug 2025 20:25:44 -0400 Subject: [PATCH 24/66] Update veteran.dm --- code/modules/jobs/job_types/roguetown/garrison/veteran.dm | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/code/modules/jobs/job_types/roguetown/garrison/veteran.dm b/code/modules/jobs/job_types/roguetown/garrison/veteran.dm index ff902176..44615cca 100644 --- a/code/modules/jobs/job_types/roguetown/garrison/veteran.dm +++ b/code/modules/jobs/job_types/roguetown/garrison/veteran.dm @@ -97,6 +97,7 @@ ADD_TRAIT(H, TRAIT_HEAVYARMOR, TRAIT_GENERIC) ADD_TRAIT(H, TRAIT_MEDIUMARMOR, TRAIT_GENERIC) ADD_TRAIT(H, TRAIT_STEELHEARTED, TRAIT_GENERIC) + ADD_TRAIT(H, TRAIT_GOODTRAINER, TRAIT_GENERIC) H.cmode_music = 'sound/music/combat_duelist.ogg' /datum/advclass/veteran/footman @@ -161,7 +162,7 @@ H.verbs |= /mob/proc/haltyell ADD_TRAIT(H, TRAIT_MEDIUMARMOR, TRAIT_GENERIC) ADD_TRAIT(H, TRAIT_STEELHEARTED, TRAIT_GENERIC) - + ADD_TRAIT(H, TRAIT_GOODTRAINER, TRAIT_GENERIC) /datum/advclass/veteran/calvaryman name = "Tarnished Knight" tutorial = "You were once a member of a knightly calvary regiment, a prestigious title. You were ontop of the world, the townspeople rejoiced when you rode through their streets. Now, all you can hear is the screams of your brothers-in-arms as they fell. You specialize in mounted warfare." @@ -224,7 +225,7 @@ ADD_TRAIT(H, TRAIT_MEDIUMARMOR, TRAIT_GENERIC) ADD_TRAIT(H, TRAIT_NOBLE, TRAIT_GENERIC) // retired knight! ADD_TRAIT(H, TRAIT_STEELHEARTED, TRAIT_GENERIC) - + ADD_TRAIT(H, TRAIT_GOODTRAINER, TRAIT_GENERIC) H.adjust_blindness(-3) var/weapons = list("Sword + Recurve Bow","Axe + Crossbow","Spear + Shield") var/weapon_choice = input("Choose your weapon.", "TAKE UP ARMS") as anything in weapons @@ -303,6 +304,7 @@ ADD_TRAIT(H, TRAIT_HEAVYARMOR, TRAIT_GENERIC) ADD_TRAIT(H, TRAIT_MEDIUMARMOR, TRAIT_GENERIC) ADD_TRAIT(H, TRAIT_STEELHEARTED, TRAIT_GENERIC) + ADD_TRAIT(H, TRAIT_GOODTRAINER, TRAIT_GENERIC) H.cmode_music = 'sound/music/combat_grenzelhoft.ogg' H.adjust_blindness(-3) @@ -385,6 +387,7 @@ ADD_TRAIT(H, TRAIT_DODGEEXPERT, TRAIT_GENERIC) // You should really be parrying anyways, you have legendary/master skills.... ADD_TRAIT(H, TRAIT_STEELHEARTED, TRAIT_GENERIC) ADD_TRAIT(H, TRAIT_WOODSMAN, TRAIT_GENERIC) + ADD_TRAIT(H, TRAIT_GOODTRAINER, TRAIT_GENERIC) H.cmode_music = 'sound/music/combat_rogue.ogg' /datum/advclass/veteran/spy @@ -457,3 +460,4 @@ ADD_TRAIT(H, TRAIT_DODGEEXPERT, TRAIT_GENERIC) ADD_TRAIT(H, TRAIT_STEELHEARTED, TRAIT_GENERIC) ADD_TRAIT(H, TRAIT_CICERONE, TRAIT_GENERIC) + ADD_TRAIT(H, TRAIT_GOODTRAINER, TRAIT_GENERIC) From 0f5556512fc00d7446763c1d66140d149f7247dc Mon Sep 17 00:00:00 2001 From: granodd Date: Fri, 29 Aug 2025 21:18:13 -0400 Subject: [PATCH 25/66] various things gives artificers and guildmasters some love, makes reformation far easier and accessible, and addresses some things with taurs --- code/datums/components/caltrop.dm | 3 +- code/game/objects/items/rogueitems/gems.dm | 37 ++++++++++++++++++ .../job_types/roguetown/yeomen/guildmaster.dm | 16 ++++++++ .../job_types/roguetown/yeomen/guildsman.dm | 5 ++- code/modules/roguetown/roguecrafting/items.dm | 10 +++++ icons/roguetown/items/gems.dmi | Bin 11686 -> 12823 bytes 6 files changed, 69 insertions(+), 2 deletions(-) diff --git a/code/datums/components/caltrop.dm b/code/datums/components/caltrop.dm index 877f4669..5b72e884 100644 --- a/code/datums/components/caltrop.dm +++ b/code/datums/components/caltrop.dm @@ -24,7 +24,8 @@ if(ishuman(AM)) var/mob/living/carbon/human/H = AM - if(HAS_TRAIT(H, TRAIT_PIERCEIMMUNE)) + var/is_taur = !!H.get_taur_tail() + if(HAS_TRAIT(H, TRAIT_PIERCEIMMUNE) || is_taur) return if((flags & CALTROP_IGNORE_WALKERS) && H.m_intent == MOVE_INTENT_WALK) diff --git a/code/game/objects/items/rogueitems/gems.dm b/code/game/objects/items/rogueitems/gems.dm index e41ea1e7..2014f099 100644 --- a/code/game/objects/items/rogueitems/gems.dm +++ b/code/game/objects/items/rogueitems/gems.dm @@ -207,3 +207,40 @@ /datum/crafting_recipe/roguetown/survival/bpearlcross, /datum/crafting_recipe/roguetown/survival/abyssoramulet ) + + +/obj/item/reformation_gem + name = "gem of reformation" + icon = 'icons/roguetown/items/gems.dmi' + icon_state = "reform_gem" + desc = "A sickly green gem that pulses with strange powers native to this region of the world." + lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi' + righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi' + w_class = WEIGHT_CLASS_TINY + slot_flags = ITEM_SLOT_MOUTH + dropshrink = 0.4 + drop_sound = 'sound/items/gem.ogg' + sellprice = 1 //you get NOTHING + var/reform_outline = "reform_outline" + +/obj/item/reformation_gem/Initialize() + . = ..() + src.add_filter(reform_outline, 2, list("type" = "outline", "color" = "#ff0080", "alpha" = 100, "size" = 1.5)) + +/obj/item/reformation_gem/attack_self(mob/living/user) + ..() + var/confirm = alert(user,"Are you sure you wish to use your gem of reformation here?","Confirmation","Yes","Cancel") + if(confirm == "Yes") + var/turf/target_turf = get_step(user, user.dir) + if(target_turf.is_blocked_turf(TRUE)) + to_chat(user, span_warning("The targeted location is blocked, I cannot create a reformation gate here.")) + return FALSE + if(isopenturf(target_turf)) + create_portal(user, target_turf) + return TRUE + return NONE + +/obj/item/reformation_gem/proc/create_portal(mob/user, atom/location) + to_chat(user, "You create a reformation portal!") + new /obj/structure/respawn_portal(location) + qdel(src) diff --git a/code/modules/jobs/job_types/roguetown/yeomen/guildmaster.dm b/code/modules/jobs/job_types/roguetown/yeomen/guildmaster.dm index 454dee7e..4b20f732 100644 --- a/code/modules/jobs/job_types/roguetown/yeomen/guildmaster.dm +++ b/code/modules/jobs/job_types/roguetown/yeomen/guildmaster.dm @@ -24,6 +24,7 @@ /datum/outfit/job/roguetown/guildmaster/pre_equip(mob/living/carbon/human/H) ADD_TRAIT(H, TRAIT_SEEPRICES, TRAIT_GENERIC) ADD_TRAIT(H, TRAIT_TRAINED_SMITH, TRAIT_GENERIC) + ADD_TRAIT(H, TRAIT_ARCYNE_T1, TRAIT_GENERIC) head = /obj/item/clothing/head/roguetown/chaperon/noble/guildmaster gloves = /obj/item/clothing/gloves/roguetown/angle/grenzelgloves/blacksmith if(H.mind) @@ -32,6 +33,7 @@ H.verbs += /mob/living/carbon/human/proc/guild_announcement H.adjust_skillrank(/datum/skill/combat/axes, 3, TRUE) H.adjust_skillrank(/datum/skill/combat/maces, 3, TRUE) + H.adjust_skillrank(/datum/skill/combat/crossbows, 3, TRUE) H.adjust_skillrank(/datum/skill/combat/unarmed, 3, TRUE) H.adjust_skillrank(/datum/skill/combat/wrestling, 3, TRUE) H.adjust_skillrank(/datum/skill/labor/lumberjacking, 3, TRUE) @@ -42,6 +44,7 @@ H.adjust_skillrank(/datum/skill/craft/blacksmithing, 5, TRUE) H.adjust_skillrank(/datum/skill/craft/armorsmithing, 5, TRUE) H.adjust_skillrank(/datum/skill/craft/weaponsmithing, 5, TRUE) + H.adjust_skillrank(/datum/skill/magic/arcane, 2, TRUE) H.adjust_skillrank(/datum/skill/craft/smelting, 4, TRUE) H.adjust_skillrank(/datum/skill/craft/engineering, 3, TRUE) // 2 Engineering, let them make more artificers stuffs H.adjust_skillrank(/datum/skill/misc/sewing, 2, TRUE) // Worse than the real tailor, so can't steal their job right away @@ -54,6 +57,7 @@ H.adjust_skillrank(/datum/skill/craft/blacksmithing, 1, TRUE) H.adjust_skillrank(/datum/skill/craft/armorsmithing, 1, TRUE) H.adjust_skillrank(/datum/skill/craft/weaponsmithing, 1, TRUE) + H.adjust_skillrank(/datum/skill/craft/engineering, 1, TRUE) H.adjust_skillrank(/datum/skill/craft/smelting, 1, TRUE) H.adjust_skillrank(/datum/skill/misc/sewing, 1, TRUE) // Worse than the real tailor, so can't steal their job right away H.adjust_skillrank(/datum/skill/craft/tanning, 1, TRUE) @@ -66,15 +70,27 @@ /obj/item/rogueweapon/hammer/iron = 1, /obj/item/rogueweapon/tongs = 1, /obj/item/recipe_book/blacksmithing = 1, + /obj/item/recipe_book/engineering = 1, + /obj/item/recipe_book/ceramics = 1, + /obj/item/recipe_book/builder = 1, + /obj/item/recipe_book/survival = 1, + /obj/item/recipe_book/magic = 1, + /obj/item/chalk = 1, ) belt = /obj/item/storage/belt/rogue/leather beltl = /obj/item/storage/belt/rogue/pouch/coins/rich beltr = /obj/item/storage/keyring/guildmaster + H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/touch/prestidigitation) + H.mind.AddSpell(new /obj/effect/proc_holder/spell/invoked/enchant_weapon) + H.mind.AddSpell(new /obj/effect/proc_holder/spell/invoked/conjure_weapon) + H.mind.AddSpell(new /obj/effect/proc_holder/spell/self/conjure_armor) + H.change_stat("strength", 2) H.change_stat("intelligence", 1) H.change_stat("endurance", 2) H.change_stat("constitution", 2) + H.change_stat("perception", 2) GLOBAL_VAR_INIT(last_guildmaster_announcement, -50000) // Inits variable for later diff --git a/code/modules/jobs/job_types/roguetown/yeomen/guildsman.dm b/code/modules/jobs/job_types/roguetown/yeomen/guildsman.dm index 28aa7c3f..c95e95cc 100644 --- a/code/modules/jobs/job_types/roguetown/yeomen/guildsman.dm +++ b/code/modules/jobs/job_types/roguetown/yeomen/guildsman.dm @@ -108,6 +108,7 @@ ..() H.adjust_skillrank(/datum/skill/combat/axes, 2, TRUE) H.adjust_skillrank(/datum/skill/combat/maces, 2, TRUE) + H.adjust_skillrank(/datum/skill/combat/crossbows, 2, TRUE) H.adjust_skillrank(/datum/skill/combat/wrestling, 2, TRUE) H.adjust_skillrank(/datum/skill/combat/unarmed, 2, TRUE) H.adjust_skillrank(/datum/skill/craft/crafting, 4, TRUE) @@ -150,12 +151,14 @@ if(H.mind) H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/touch/prestidigitation) H.mind.AddSpell(new /obj/effect/proc_holder/spell/invoked/enchant_weapon) + H.mind.AddSpell(new /obj/effect/proc_holder/spell/invoked/conjure_weapon) + H.mind.AddSpell(new /obj/effect/proc_holder/spell/self/conjure_armor) ADD_TRAIT(H, TRAIT_ARCYNE_T1, TRAIT_GENERIC) H.change_stat("strength", 1) H.change_stat("intelligence", 3) H.change_stat("endurance", 2) H.change_stat("constitution", 1) - H.change_stat("perception", 1) + H.change_stat("perception", 2) /datum/advclass/guildsman/architect name = "Architect" diff --git a/code/modules/roguetown/roguecrafting/items.dm b/code/modules/roguetown/roguecrafting/items.dm index 8e921339..226d8463 100644 --- a/code/modules/roguetown/roguecrafting/items.dm +++ b/code/modules/roguetown/roguecrafting/items.dm @@ -439,6 +439,16 @@ ) craftdiff = 1 +/datum/crafting_recipe/roguetown/survival/reform_gem + name = "gem of reformation" + result = /obj/item/reformation_gem + reqs = list( + /obj/item/roguegem = 1, + /datum/reagent/medicine/healthpot = 15, + ) + craftdiff = 2 + subtype_reqs = TRUE + // Unfortunately there's no good category for it, yet. // I don't want ration paper to be too expensive, making wrapped food underused // So instead, ration paper is a very cheap recipe with parchment and tallow (instead of full fat) that makes 2 wrapper diff --git a/icons/roguetown/items/gems.dmi b/icons/roguetown/items/gems.dmi index 7d98ec153461a7d16c947f7838d8633d3121f30d..443e13aaaf4def453ad71f8298193d25ca711386 100644 GIT binary patch literal 12823 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 z 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 Date: Fri, 29 Aug 2025 21:28:18 -0400 Subject: [PATCH 26/66] comment out the old The old way of reform portals being made isn't needed anymore --- code/modules/roguetown/roguecrafting/structure.dm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/code/modules/roguetown/roguecrafting/structure.dm b/code/modules/roguetown/roguecrafting/structure.dm index 86632753..a4fceb4f 100644 --- a/code/modules/roguetown/roguecrafting/structure.dm +++ b/code/modules/roguetown/roguecrafting/structure.dm @@ -861,11 +861,12 @@ verbage = "weaves" craftdiff = 0 -/datum/crafting_recipe/roguetown/structure/respawn_portal +// Not required with the new gem but will leave it here. +/*/datum/crafting_recipe/roguetown/structure/respawn_portal name = "reformation gate" result = /obj/structure/respawn_portal reqs = list(/obj/item/roguegem/blue = 1) verbage_simple = "build" verbage = "builds" craftsound = null - craftdiff = 2 + craftdiff = 2*/ From 242e6a48f30fe84642573b101ba25b34a9a5fd3e Mon Sep 17 00:00:00 2001 From: granodd Date: Fri, 29 Aug 2025 21:43:12 -0400 Subject: [PATCH 27/66] fixes taur armor adds a fix that stops taur halves from being damaged despite having proper protection. --- code/modules/mob/living/carbon/human/human_defense.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index a71fb33c..bc0f4d94 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -22,6 +22,8 @@ def_zone = CBP.body_zone var/protection = 0 var/obj/item/clothing/used + if(def_zone == BODY_ZONE_TAUR) + def_zone = pick(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) var/list/body_parts = list(skin_armor, head, wear_mask, wear_wrists, gloves, wear_neck, cloak, wear_armor, wear_shirt, shoes, wear_pants, backr, backl, belt, s_store, glasses, ears, wear_ring) //Everything but pockets. Pockets are l_store and r_store. (if pockets were allowed, putting something armored, gloves or hats for example, would double up on the armor) for(var/bp in body_parts) if(!bp) From 3f472b486fb528f0d1cde2083cf3ccc768f8fcba Mon Sep 17 00:00:00 2001 From: Dhaeleena M'iar Date: Mon, 1 Sep 2025 01:30:17 -0300 Subject: [PATCH 28/66] Map changes No more ambushes in the basin area Slightly expanded mago's lab Renamed Signs, Added signs to better signal directions to town from carriage. Made town overall safer by blocking certain areas as to filter mobs from wandering in. --- _maps/map_files/dun_world/dun_world.dmm | 1493 ++++++++++++++++++----- 1 file changed, 1184 insertions(+), 309 deletions(-) diff --git a/_maps/map_files/dun_world/dun_world.dmm b/_maps/map_files/dun_world/dun_world.dmm index b4d72587..861f0339 100644 --- a/_maps/map_files/dun_world/dun_world.dmm +++ b/_maps/map_files/dun_world/dun_world.dmm @@ -742,7 +742,11 @@ "amy" = ( /obj/structure/flora/roguegrass, /turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "amM" = ( /obj/structure/closet/crate/chest, /obj/item/paper/scroll, @@ -800,7 +804,11 @@ /area/rogue/indoors/town/tavern) "aoe" = ( /turf/open/floor/rogue/naturalstone, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "aoq" = ( /obj/structure/mineral_door/wood/deadbolt, /turf/open/floor/rogue/ruinedwood{ @@ -1209,10 +1217,18 @@ dir = 4 }, /turf/open/transparent/openspace, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "asY" = ( /turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "ate" = ( /obj/effect/decal/cobbleedge{ dir = 1; @@ -1845,7 +1861,11 @@ "aDh" = ( /obj/structure/stairs, /turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "aDm" = ( /turf/open/floor/rogue/blocks/newstone/alt, /area/rogue/indoors/town) @@ -2011,7 +2031,11 @@ dir = 6 }, /turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "aGw" = ( /obj/effect/decal/cleanable/blood{ icon_state = "floor5-old" @@ -2230,7 +2254,11 @@ dir = 4 }, /turf/open/transparent/openspace, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "aJJ" = ( /obj/structure/flora/roguegrass/herb/hypericum, /turf/open/floor/rogue/grassyel, @@ -2509,7 +2537,11 @@ "aNZ" = ( /obj/machinery/light/rogue/firebowl/stump, /turf/open/floor/rogue/naturalstone, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "aOc" = ( /obj/structure/fluff/railing/border{ dir = 1 @@ -2854,7 +2886,11 @@ dir = 9 }, /turf/open/transparent/openspace, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "aUE" = ( /turf/closed/wall/mineral/rogue/stone, /area/rogue/outdoors/bog) @@ -3041,7 +3077,11 @@ "aXW" = ( /obj/structure/flora/roguetree/burnt, /turf/open/floor/rogue/grassred, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "aXY" = ( /obj/structure/table/wood{ dir = 1; @@ -3573,7 +3613,9 @@ /obj/structure/fluff/railing/border{ dir = 10 }, -/obj/structure/fluff/walldeco/steward, +/obj/structure/fluff/walldeco/steward{ + name = "Steward" + }, /turf/open/floor/rogue/herringbone, /area/rogue/outdoors/town) "bfO" = ( @@ -3808,7 +3850,11 @@ dir = 4 }, /turf/open/floor/rogue/ruinedwood, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "bkg" = ( /obj/structure/fluff/railing/border, /obj/structure/flora/roguegrass, @@ -3902,7 +3948,11 @@ pixel_x = -32 }, /turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "bmi" = ( /turf/open/water/river{ dir = 4; @@ -3991,7 +4041,11 @@ "bnF" = ( /obj/structure/flora/roguegrass/herb/random, /turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "bnJ" = ( /obj/structure/bars/passage{ density = 0; @@ -4262,7 +4316,11 @@ "bsl" = ( /obj/structure/underworld/barrier, /turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "bsm" = ( /turf/closed/wall/mineral/rogue/pipe, /area/rogue/outdoors/mountains/decap/gunduzirak) @@ -4310,7 +4368,11 @@ /area/rogue/outdoors/town/roofs) "bsL" = ( /turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "bsM" = ( /obj/machinery/light/rogue/wallfire/candle, /turf/open/floor/rogue/wood/herringbone, @@ -4518,7 +4580,11 @@ dir = 6 }, /turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "bvB" = ( /obj/item/storage/roguebag, /obj/item/storage/roguebag, @@ -5602,7 +5668,11 @@ dir = 4 }, /turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "bML" = ( /obj/structure/roguemachine/scomm/r, /turf/open/floor/rogue/ruinedwood/spiral, @@ -5614,7 +5684,11 @@ "bNc" = ( /obj/machinery/light/rogue/torchholder/l, /turf/open/floor/rogue/woodturned, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "bNd" = ( /obj/structure/closet/crate/drawer, /obj/machinery/light/rogue/wallfire/candle, @@ -5765,7 +5839,11 @@ "bQc" = ( /obj/structure/flora/roguegrass/bush, /turf/open/floor/rogue/grassred, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "bQd" = ( /obj/structure/roguerock{ layer = 3.8; @@ -7297,7 +7375,11 @@ dir = 4; icon_state = "rockwd" }, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "cry" = ( /obj/structure/bed/rogue/inn/double, /obj/item/bedsheet/rogue/fabric_double, @@ -7922,7 +8004,11 @@ /mob/living/simple_animal/hostile/retaliate/rogue/wolf, /obj/effect/decal/cleanable/blood, /turf/open/floor/rogue/naturalstone, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "cCb" = ( /obj/structure/fluff/walldeco/church/line, /obj/structure/fluff/walldeco/church/line{ @@ -8148,7 +8234,11 @@ /area/rogue/outdoors/mountains/decap/gunduzirak) "cFz" = ( /turf/open/water/swamp, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "cFE" = ( /obj/effect/decal/cleanable/blood/gibs/core, /turf/open/floor/rogue/hexstone, @@ -8321,7 +8411,11 @@ "cJa" = ( /obj/effect/spawner/roguemap/stump, /turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "cJi" = ( /obj/structure/roguemachine/vendor{ keycontrol = "crafterguild" @@ -8385,7 +8479,8 @@ /area/rogue/under/underdark) "cKL" = ( /obj/structure/fluff/walldeco/bsmith{ - dir = 1 + dir = 1; + name = "Crafter's Guild" }, /turf/open/floor/rogue/cobble, /area/rogue/outdoors/town) @@ -8506,7 +8601,11 @@ order = 6 }, /turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "cLX" = ( /obj/structure/mirror{ pixel_y = 28 @@ -8718,7 +8817,11 @@ "cOC" = ( /obj/structure/flora/roguetree/pine, /turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "cOD" = ( /obj/item/grown/log/tree/stick, /obj/effect/decal/cobbleedge{ @@ -8870,7 +8973,11 @@ fueluse = 1.8e+06 }, /turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "cQQ" = ( /obj/structure/bars/pipe{ pixel_x = -11 @@ -8927,7 +9034,11 @@ "cRx" = ( /obj/structure/fluff/railing/border, /turf/open/floor/rogue/naturalstone, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "cRH" = ( /obj/effect/decal/wood/herringbone{ dir = 4 @@ -9442,7 +9553,11 @@ /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" }, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "daK" = ( /mob/living/carbon/human/species/elf/dark/drowraider, /turf/open/floor/rogue/herringbone, @@ -10004,7 +10119,9 @@ /turf/closed/wall/mineral/rogue/stone/moss, /area/rogue/indoors) "dma" = ( -/obj/structure/fluff/walldeco/bsmith, +/obj/structure/fluff/walldeco/bsmith{ + name = "Crafter's Guild" + }, /turf/open/floor/rogue/cobblerock, /area/rogue/outdoors/town) "dme" = ( @@ -10774,7 +10891,11 @@ /turf/open/water/river{ icon_state = "rockwd" }, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "dzw" = ( /obj/structure/chair/wood/rogue{ dir = 1 @@ -10848,7 +10969,11 @@ "dAx" = ( /obj/structure/flora/roguegrass, /turf/open/floor/rogue/grassyel, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "dAz" = ( /obj/structure/boatbell/fluff, /turf/closed/wall/mineral/rogue/wooddark, @@ -11467,7 +11592,11 @@ pixel_y = -6 }, /turf/open/transparent/openspace, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "dME" = ( /obj/structure/chair/bench/church, /turf/open/floor/rogue/churchmarble, @@ -11589,7 +11718,11 @@ order = 2 }, /turf/open/floor/rogue/naturalstone, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "dOY" = ( /obj/item/millstone{ pixel_y = 7 @@ -11824,6 +11957,9 @@ /obj/machinery/light/rogue/wallfire/candle{ pixel_y = -32 }, +/obj/structure/fluff/railing/border{ + dir = 10 + }, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -11862,7 +11998,11 @@ dir = 8 }, /turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "dTr" = ( /obj/machinery/light/rogue/wallfire{ pixel_y = 32 @@ -11935,7 +12075,11 @@ "dUh" = ( /obj/structure/flora/roguetree/stump/log, /turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "dUs" = ( /obj/structure/spider/stickyweb, /mob/living/simple_animal/hostile/retaliate/rogue/bigrat, @@ -12147,11 +12291,19 @@ "dYi" = ( /obj/structure/flora/newtree, /turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "dYq" = ( /obj/structure/flora/newtree, /turf/open/floor/rogue/grassyel, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "dYs" = ( /obj/effect/decal/cobbleedge{ dir = 9 @@ -12385,7 +12537,11 @@ /area/rogue/outdoors/mountains/decap/gunduzirak) "ebU" = ( /turf/open/transparent/openspace, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "ebV" = ( /obj/structure/flora/roguegrass, /obj/effect/decal/cobbleedge{ @@ -12453,7 +12609,11 @@ dir = 1 }, /turf/open/floor/rogue/naturalstone, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "ecU" = ( /obj/structure/mineral_door/wood/window, /turf/open/floor/rogue/ruinedwood/spiral, @@ -12596,7 +12756,11 @@ pixel_x = -8 }, /turf/open/floor/rogue/naturalstone, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "efT" = ( /obj/structure/bars/passage{ max_integrity = 15000; @@ -13102,7 +13266,11 @@ "emv" = ( /obj/structure/flora/roguegrass, /turf/open/floor/rogue/grassred, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "emE" = ( /obj/structure/bars/pipe{ dir = 6 @@ -15269,7 +15437,11 @@ "eWZ" = ( /obj/effect/decal/cobbleedge, /turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "eXd" = ( /obj/effect/decal/cobbleedge{ dir = 10; @@ -15279,7 +15451,11 @@ /area/rogue/outdoors/mountains/decap/gunduzirak) "eXh" = ( /turf/open/floor/rogue/ruinedwood, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "eXk" = ( /obj/structure/fluff/railing/wood, /obj/effect/decal/mossy, @@ -15520,7 +15696,11 @@ "faM" = ( /obj/structure/flora/roguegrass/herb/random, /turf/open/floor/rogue/grassred, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "faW" = ( /turf/closed/wall/mineral/rogue/decostone/cand, /area/rogue/under/underdark) @@ -15732,7 +15912,11 @@ pixel_y = 7 }, /turf/open/floor/rogue/hexstone, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "fdi" = ( /obj/machinery/light/rogue/wallfire/candle/r, /obj/structure/bookcase/random, @@ -15754,7 +15938,11 @@ dir = 4 }, /turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "fdG" = ( /obj/effect/decal/mossy{ dir = 4 @@ -16051,7 +16239,11 @@ order = 3 }, /turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "fhH" = ( /turf/closed/wall/mineral/rogue/wooddark/horizontal, /area/rogue/indoors/town/church/chapel) @@ -16069,7 +16261,11 @@ /area/rogue/outdoors/town) "fii" = ( /turf/closed/mineral/random/rogue/med, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "fiq" = ( /obj/machinery/light/rogue/torchholder/r, /turf/open/floor/rogue/wood, @@ -16276,7 +16472,11 @@ dir = 1; icon_state = "vertw" }, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "fls" = ( /turf/closed/wall/mineral/rogue/wooddark/end{ dir = 8 @@ -16506,6 +16706,10 @@ }, /turf/open/floor/rogue/tile/harem2, /area/rogue/indoors/town/bath) +"foZ" = ( +/obj/structure/flora/roguetree/stump/log, +/turf/open/floor/rogue/naturalstone, +/area/rogue/outdoors/mountains) "fpd" = ( /obj/structure/fluff/railing/fence{ dir = 8 @@ -16643,7 +16847,11 @@ /obj/structure/flora/roguegrass, /obj/structure/flora/ausbushes/ywflowers, /turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "fqU" = ( /obj/structure/chair/stool/rogue, /turf/open/floor/rogue/cobble, @@ -16759,6 +16967,12 @@ }, /turf/open/floor/rogue/herringbone, /area/rogue/outdoors/mountains/decap/gunduzirak) +"fsG" = ( +/obj/structure/fluff/walldeco/church/line{ + dir = 1 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/town/basement/keep) "fsV" = ( /obj/structure/plasticflaps, /turf/open/floor/rogue/blocks/green, @@ -16875,7 +17089,11 @@ dir = 1; icon_state = "vertw" }, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "fvt" = ( /obj/structure/chair/wood/rogue/fancy, /turf/open/floor/rogue/wood, @@ -17157,7 +17375,11 @@ "fzO" = ( /obj/effect/spawner/roguemap/stump, /turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "fzT" = ( /obj/effect/decal/cobbleedge{ dir = 10; @@ -17352,7 +17574,11 @@ "fDf" = ( /obj/effect/decal/cobbleedge, /turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "fDj" = ( /obj/structure/closet/crate/chest/gold{ locked = 1; @@ -17754,7 +17980,11 @@ pixel_y = 1 }, /turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "fKr" = ( /obj/structure/fluff/railing/border{ dir = 6 @@ -18412,7 +18642,11 @@ icon_state = "tablewood1" }, /turf/open/floor/rogue/ruinedwood, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "fVj" = ( /obj/structure/stairs, /turf/open/floor/rogue/wood, @@ -18425,7 +18659,11 @@ /area/rogue/indoors/town/physician) "fVo" = ( /turf/open/water/cleanshallow, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "fVv" = ( /obj/structure/glowshroom, /turf/open/floor/rogue/blocks, @@ -18505,7 +18743,11 @@ icon_state = "cobbleedge-w" }, /turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "fWy" = ( /obj/structure/fluff/railing/border{ dir = 8 @@ -18926,7 +19168,11 @@ "gdz" = ( /obj/structure/flora/roguegrass/bush/wall/tall, /turf/open/floor/rogue/grassred, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "gdG" = ( /obj/machinery/light/rogue/oven/east, /turf/open/floor/rogue/ruinedwood{ @@ -19940,7 +20186,11 @@ pixel_x = 8 }, /turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "guQ" = ( /mob/living/simple_animal/pet/cat, /turf/open/floor/rogue/wood/nosmooth, @@ -20872,6 +21122,10 @@ /obj/structure/mineral_door/bars, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town) +"gIY" = ( +/obj/item/grown/log/tree/stick, +/turf/open/floor/rogue/naturalstone, +/area/rogue/outdoors/bog) "gJc" = ( /obj/structure/flora/roguegrass, /turf/open/floor/rogue/dirt, @@ -21000,7 +21254,11 @@ /area/rogue/indoors/shelter/woods) "gKT" = ( /turf/open/floor/rogue/wood, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "gLj" = ( /obj/structure/roguemachine/scomm, /turf/open/floor/rogue/cobble/mossy, @@ -21374,7 +21632,11 @@ "gSH" = ( /obj/structure/flora/roguegrass/maneater, /turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "gSI" = ( /obj/structure/bed/rogue/inn/double{ dir = 1 @@ -22182,6 +22444,9 @@ /obj/machinery/light/rogue/wallfire/candle{ pixel_y = -32 }, +/obj/structure/fluff/railing/border{ + dir = 6 + }, /turf/open/floor/carpet/red, /area/rogue/indoors/town) "hep" = ( @@ -22283,7 +22548,11 @@ }, /obj/structure/fluff/railing/border, /turf/open/transparent/openspace, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "hfX" = ( /obj/structure/fluff/railing/fence{ dir = 4 @@ -22548,7 +22817,11 @@ "hjw" = ( /obj/structure/flora/roguegrass, /turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "hjx" = ( /obj/structure/roguewindow/openclose/reinforced{ dir = 1 @@ -22558,7 +22831,11 @@ "hjH" = ( /obj/machinery/light/rogue/firebowl/stump, /turf/open/floor/rogue/grassred, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "hjJ" = ( /obj/structure/fluff/railing/wood, /turf/open/floor/rogue/dirt/road, @@ -22766,7 +23043,11 @@ "hmZ" = ( /obj/structure/flora/roguegrass/bush, /turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "hnf" = ( /obj/structure/closet/crate/drawer, /turf/open/floor/carpet/royalblack, @@ -22853,7 +23134,11 @@ "hpb" = ( /obj/structure/flora/roguegrass/bush/wall, /turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "hpe" = ( /obj/structure/fluff/railing/border{ dir = 5; @@ -22912,6 +23197,12 @@ }, /turf/open/floor/rogue/grassred, /area/rogue/outdoors/rtfield/eora) +"hqm" = ( +/obj/structure/roguemachine/withdraw{ + pixel_y = -32 + }, +/turf/open/floor/rogue/tile/bath, +/area/rogue/under/town/basement/keep) "hqn" = ( /obj/structure/fermentation_keg/crafted, /turf/open/floor/rogue/ruinedwood{ @@ -23026,7 +23317,11 @@ "hrq" = ( /obj/structure/flora/roguetree/burnt, /turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "hrB" = ( /turf/open/floor/rogue/wood/herringbone, /area/rogue/indoors/town) @@ -23139,7 +23434,11 @@ dir = 5 }, /turf/open/transparent/openspace, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "hsY" = ( /obj/structure/bed/rogue/inn/double, /obj/item/bedsheet/rogue/double_pelt, @@ -23662,7 +23961,11 @@ dir = 1 }, /turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "hzo" = ( /obj/structure/closet/crate/roguecloset/inn, /obj/item/flashlight/flare/torch/lantern, @@ -24422,7 +24725,11 @@ dir = 5 }, /turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "hMz" = ( /obj/structure/spider/stickyweb, /obj/effect/spawner/lootdrop/roguetown/sewers, @@ -25235,7 +25542,11 @@ /area/rogue/indoors/town/church/chapel) "ibp" = ( /turf/open/floor/rogue/grassyel, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "ibB" = ( /obj/structure/stairs{ dir = 8 @@ -25895,7 +26206,11 @@ "ikY" = ( /obj/structure/flora/roguegrass/bush, /turf/open/floor/rogue/grassyel, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "ila" = ( /obj/structure/fluff/railing/border, /turf/open/floor/rogue/wood, @@ -26583,7 +26898,11 @@ "ivQ" = ( /obj/structure/closet/dirthole/closed/loot, /turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "iwm" = ( /obj/structure/vine{ opacity = 1 @@ -27006,7 +27325,11 @@ "iCR" = ( /obj/structure/fluff/big_chain, /turf/closed/wall/mineral/rogue/wooddark/vertical, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "iCY" = ( /obj/structure/closet/crate/chest, /obj/item/natural/bundle/cloth{ @@ -27152,7 +27475,11 @@ /area/rogue/indoors/town/manor) "iFe" = ( /turf/open/floor/rogue/hexstone, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "iFi" = ( /obj/structure/fluff/railing/border{ dir = 9 @@ -27445,7 +27772,11 @@ "iJY" = ( /obj/structure/chair/stool/rogue, /turf/open/floor/rogue/ruinedwood, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "iKc" = ( /obj/structure/stairs{ dir = 4 @@ -27612,13 +27943,21 @@ order = 5 }, /turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "iMa" = ( /turf/open/floor/rogue/carpet, /area/rogue/outdoors/mountains/decap/gunduzirak) "iMd" = ( /turf/closed/mineral/random/rogue/high, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "iMf" = ( /obj/item/chair/rogue{ dir = 8 @@ -27923,7 +28262,11 @@ dir = 8 }, /turf/open/transparent/openspace, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "iQE" = ( /obj/structure/fluff/railing/border{ dir = 1 @@ -28362,7 +28705,11 @@ "iXt" = ( /obj/structure/closet/crate/chest/wicker, /turf/open/floor/rogue/ruinedwood, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "iXI" = ( /obj/machinery/gear_painter, /turf/open/floor/rogue/carpet, @@ -29161,7 +29508,11 @@ }, /obj/machinery/light/rogue/torchholder/c, /turf/open/transparent/openspace, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "jjC" = ( /obj/effect/landmark/start/wretchlate, /turf/open/floor/rogue/naturalstone, @@ -30659,7 +31010,11 @@ pixel_y = 0 }, /turf/open/transparent/openspace, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "jMh" = ( /obj/machinery/light/rogue/torchholder/l, /turf/open/floor/rogue/blocks, @@ -30691,7 +31046,11 @@ "jMU" = ( /obj/structure/flora/ausbushes/ywflowers, /turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "jMW" = ( /turf/closed/wall/mineral/rogue/decostone, /area/rogue/indoors/shelter/woods) @@ -30948,7 +31307,8 @@ /area/rogue/indoors) "jRb" = ( /obj/structure/fluff/sellsign{ - name = "CONDEMNED BY THE HOLY SEE" + name = "CONDEMNED BY THE HOLY SEE"; + desc = "CONDEMNED BY THE HOLY SEE" }, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/mountains/decap) @@ -30995,7 +31355,11 @@ dir = 1 }, /turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "jSd" = ( /obj/structure/rack/rogue, /obj/item/rogueweapon/shovel, @@ -31146,7 +31510,11 @@ dir = 8 }, /turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "jUD" = ( /obj/machinery/light/rogue/wallfire/candle/blue, /obj/structure/flora/roguegrass, @@ -32179,7 +32547,11 @@ "kkN" = ( /obj/structure/far_travel, /turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "kkP" = ( /turf/closed/wall/mineral/rogue/stonebrick, /area/rogue/under/cavewet/bogcaves/sunkencity) @@ -32645,7 +33017,11 @@ pixel_x = -8 }, /turf/open/floor/rogue/naturalstone, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "kuo" = ( /obj/structure/spider/stickyweb{ icon_state = "stickyweb2" @@ -32660,7 +33036,11 @@ }, /obj/machinery/light/rogue/chand, /turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "kus" = ( /turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/magician) @@ -32775,7 +33155,11 @@ /area/rogue/outdoors/mountains/decap/gunduzirak) "kvV" = ( /turf/open/floor/rogue/woodturned, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "kwd" = ( /obj/structure/fluff/walldeco/church/line, /mob/living/simple_animal/hostile/rogue/skeleton/bow, @@ -32889,7 +33273,11 @@ "kxD" = ( /obj/effect/decal/cleanable/blood, /turf/closed/mineral/random/rogue/med, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "kxJ" = ( /obj/effect/decal/wood/herringbone2{ dir = 1 @@ -32976,7 +33364,11 @@ "kzg" = ( /obj/structure/underworld/barrier, /turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "kzh" = ( /obj/structure/bars, /turf/open/water/ocean, @@ -33860,7 +34252,11 @@ dir = 8 }, /turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "kMO" = ( /obj/effect/decal/cleanable/blood/tracks{ dir = 4 @@ -34248,7 +34644,11 @@ "kTT" = ( /obj/structure/flora/roguegrass/herb/random, /turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "kUb" = ( /obj/effect/decal/cleanable/blood/gibs, /turf/open/floor/rogue/hexstone, @@ -34830,7 +35230,11 @@ "ldD" = ( /obj/structure/fluff/railing/border, /turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "ldE" = ( /obj/structure/chair/bench{ dir = 1 @@ -35153,7 +35557,11 @@ "liK" = ( /obj/structure/flora/roguetree/pine, /turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "liV" = ( /turf/closed/wall/mineral/rogue/roofwall/outercorner{ dir = 8 @@ -36006,6 +36414,12 @@ /obj/item/natural/dirtclod, /turf/open/floor/rogue/naturalstone, /area/rogue/under/cavewet/bogcaves) +"luF" = ( +/obj/structure/fluff/signage{ + name = "AZURE PEAK - NORTH" + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/woods) "luY" = ( /obj/structure/roguewindow/harem2{ density = 0 @@ -36253,6 +36667,12 @@ icon_state = "weird1" }, /area/rogue/indoors/cave) +"lzm" = ( +/obj/structure/fluff/signage{ + name = "AZURE PEAK - NORTH EAST" + }, +/turf/open/floor/rogue/naturalstone, +/area/rogue/indoors/shelter/woods) "lzp" = ( /obj/structure/chair/wood/rogue{ dir = 4 @@ -37044,7 +37464,11 @@ /obj/structure/flora/roguegrass, /obj/structure/flora/ausbushes/ywflowers, /turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "lLV" = ( /obj/structure/table/wood{ icon_state = "map3" @@ -37393,7 +37817,11 @@ /obj/structure/flora/roguegrass, /obj/structure/flora/ausbushes/brflowers, /turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "lRG" = ( /obj/structure/fluff/railing/border{ dir = 4 @@ -38751,7 +39179,11 @@ "moR" = ( /obj/structure/chair/stool/rogue, /turf/open/floor/rogue/woodturned, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "mpo" = ( /obj/structure/table/wood{ dir = 1; @@ -39007,7 +39439,11 @@ /obj/structure/flora/roguegrass/herb/random, /obj/structure/roguemachine/noticeboard, /turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "mtE" = ( /obj/structure/fluff/clock, /obj/effect/decal/cleanable/dirt/dust, @@ -39190,6 +39626,11 @@ /obj/structure/stairs, /turf/open/floor/rogue/dirt/road, /area/rogue/indoors/cave) +"mwP" = ( +/obj/structure/fluff/alch, +/obj/effect/decal/cleanable/dirt/cobweb, +/turf/open/floor/rogue/tile/bath, +/area/rogue/under/town/basement/keep) "mwQ" = ( /obj/structure/bed/rogue/inn/wooldouble, /obj/item/bedsheet/rogue/fabric_double, @@ -39719,7 +40160,11 @@ dir = 8 }, /turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "mGt" = ( /obj/effect/decal/cobbleedge{ dir = 10; @@ -39730,7 +40175,11 @@ "mGv" = ( /obj/structure/flora/newtree, /turf/open/floor/rogue/grassred, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "mGw" = ( /obj/structure/fermentation_keg/random/beer, /turf/open/floor/rogue/ruinedwood{ @@ -40389,6 +40838,14 @@ }, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/town) +"mRn" = ( +/obj/structure/roguerock, +/turf/open/floor/rogue/naturalstone, +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "mRo" = ( /obj/machinery/light/rogue/firebowl, /turf/open/floor/rogue/wood, @@ -40832,6 +41289,12 @@ icon_state = "weird1" }, /area/rogue/indoors/town/manor) +"mYE" = ( +/obj/machinery/light/rogue/wallfire/candle/blue, +/obj/item/reagent_containers/glass/bucket, +/obj/structure/roguemachine/scomm/r, +/turf/open/floor/rogue/tile/bath, +/area/rogue/under/town/basement/keep) "mYK" = ( /obj/structure/fermentation_keg/random/water, /turf/open/floor/rogue/cobble, @@ -40865,7 +41328,11 @@ dir = 1 }, /turf/open/transparent/openspace, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "mZe" = ( /obj/machinery/light/rogue/wallfire/candle/off/l, /obj/structure/bed/rogue/inn, @@ -41540,7 +42007,11 @@ dir = 8 }, /turf/open/floor/rogue/grassred, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "nkf" = ( /obj/structure/bookcase, /obj/item/book/rogue/blackmountain, @@ -41671,7 +42142,11 @@ pixel_y = 9 }, /turf/open/floor/rogue/woodturned, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "nmh" = ( /obj/structure/mineral_door/bars, /turf/open/floor/rogue/blocks/green, @@ -41825,7 +42300,11 @@ dir = 1 }, /turf/open/floor/rogue/naturalstone, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "nnP" = ( /obj/structure/fluff/walldeco/rpainting/forest{ pixel_y = 32 @@ -42010,7 +42489,11 @@ "nqp" = ( /obj/structure/fluff/walldeco/customflag, /turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "nqq" = ( /obj/structure/fluff/railing/border{ dir = 4 @@ -42190,7 +42673,11 @@ "ntX" = ( /obj/machinery/light/rogue/firebowl/stump, /turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "ntY" = ( /obj/structure/flora/roguegrass, /turf/open/floor/rogue/grass, @@ -42610,7 +43097,11 @@ /area/rogue/under/cavewet/bogcaves/sunkencity) "nBX" = ( /turf/closed/mineral/rogue/bedrock, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "nCc" = ( /turf/closed/wall/mineral/rogue/pipe{ dir = 8; @@ -42677,7 +43168,11 @@ dir = 6 }, /turf/open/transparent/openspace, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "nDn" = ( /obj/structure/mineral_door/wood{ locked = 1; @@ -42853,7 +43348,11 @@ "nFq" = ( /obj/machinery/light/rogue/lanternpost, /turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "nFt" = ( /obj/item/natural/stone{ pixel_x = 8; @@ -42947,7 +43446,11 @@ "nHc" = ( /obj/structure/telescope, /turf/open/floor/rogue/woodturned, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "nHj" = ( /turf/closed/wall/mineral/rogue/stonebrick, /area/rogue/indoors/shelter) @@ -43430,7 +43933,11 @@ dir = 9 }, /turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "nOq" = ( /obj/structure/fluff/railing/border{ dir = 4 @@ -44229,7 +44736,11 @@ pixel_y = -6 }, /turf/open/floor/rogue/ruinedwood, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "oay" = ( /obj/structure/fluff/walldeco/rpainting/forest{ pixel_y = 32 @@ -44447,7 +44958,11 @@ dir = 10 }, /turf/open/transparent/openspace, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "oen" = ( /obj/structure/table/wood{ icon_state = "longtable" @@ -44476,7 +44991,11 @@ order = 1 }, /turf/open/floor/rogue/naturalstone, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "oeF" = ( /obj/structure/stairs/fancy/c{ dir = 1 @@ -44530,7 +45049,11 @@ "ofG" = ( /obj/structure/flora/newtree, /turf/open/floor/rogue/grasscold, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "ofJ" = ( /obj/structure/fluff/walldeco/chains, /turf/open/floor/rogue/concrete, @@ -44744,7 +45267,11 @@ }, /obj/item/rogueweapon/huntingknife/stoneknife, /turf/open/floor/rogue/hexstone, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "oiX" = ( /obj/structure/bed/rogue/inn, /obj/item/bedsheet/rogue/pelt, @@ -44763,7 +45290,11 @@ "ojA" = ( /obj/structure/flora/roguegrass/bush/wall/tall, /turf/open/floor/rogue/grassyel, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "ojI" = ( /obj/structure/table/wood{ dir = 8; @@ -44859,7 +45390,11 @@ /obj/structure/flora/roguegrass, /obj/structure/flora/ausbushes/ywflowers, /turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "olz" = ( /obj/structure/pillory{ lockid = list("church") @@ -44894,7 +45429,11 @@ "omD" = ( /obj/structure/flora/roguetree/burnt, /turf/open/floor/rogue/grassyel, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "omX" = ( /turf/closed/wall/mineral/rogue/roofwall/innercorner{ dir = 1 @@ -44940,7 +45479,11 @@ "ool" = ( /obj/structure/underworld/barrier, /turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "oou" = ( /obj/machinery/light/rogue/hearth, /obj/item/reagent_containers/glass/bucket/pot{ @@ -45281,7 +45824,11 @@ dir = 1 }, /turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "ovf" = ( /obj/structure/fluff/railing/border{ dir = 10 @@ -45331,6 +45878,9 @@ dir = 4 }, /area/rogue/indoors/town) +"owC" = ( +/turf/open/floor/rogue/greenstone, +/area/rogue/outdoors/mountains) "owJ" = ( /obj/machinery/light/rogue/torchholder/c, /obj/structure/table/wood{ @@ -45572,7 +46122,11 @@ dir = 4 }, /turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "oAq" = ( /obj/structure/roguewindow/openclose/reinforced{ dir = 8 @@ -46725,7 +47279,11 @@ order = 7 }, /turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "oUv" = ( /turf/closed/wall/mineral/rogue/decostone, /area/rogue/indoors/cave) @@ -47517,7 +48075,11 @@ dir = 6 }, /turf/open/transparent/openspace, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "pgv" = ( /obj/effect/decal/mossy{ dir = 8 @@ -47639,6 +48201,10 @@ /obj/structure/fluff/psycross, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/town) +"phZ" = ( +/obj/effect/decal/remains/human, +/turf/open/floor/rogue/naturalstone, +/area/rogue/outdoors/mountains) "pia" = ( /obj/structure/fluff/railing/border{ dir = 9 @@ -47767,7 +48333,11 @@ "pjV" = ( /mob/living/simple_animal/hostile/retaliate/rogue/mudcrab, /turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "pkc" = ( /obj/structure/glowshroom, /turf/open/floor/rogue/dirt/road, @@ -48458,7 +49028,11 @@ /area/rogue/indoors/town) "pxF" = ( /turf/open/floor/rogue/grassred, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "pxV" = ( /obj/structure/glowshroom{ icon_state = "glowshroom3" @@ -48712,7 +49286,11 @@ dir = 8 }, /turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "pBg" = ( /obj/structure/fluff/littlebanners/bluewhite{ pixel_y = -6 @@ -48798,7 +49376,11 @@ dir = 5 }, /turf/open/transparent/openspace, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "pCb" = ( /obj/structure/fluff/railing/border, /obj/structure/roguemachine/scomm/l, @@ -49251,7 +49833,11 @@ icon_state = "tablewood1" }, /turf/open/floor/rogue/woodturned, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "pJo" = ( /obj/structure/fermentation_keg/water, /obj/machinery/light/rogue/wallfire/candle/l, @@ -49357,7 +49943,11 @@ }, /obj/machinery/light/rogue/torchholder/c, /turf/open/transparent/openspace, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "pKP" = ( /obj/effect/spawner/lootdrop/roguetown/dungeon/armor, /turf/open/floor/rogue/naturalstone, @@ -49582,7 +50172,11 @@ /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" }, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "pOL" = ( /obj/structure/stairs, /obj/structure/fluff/railing/border{ @@ -49811,7 +50405,11 @@ /area/rogue/under/cave/dungeon1/gethsmane/inner) "pSg" = ( /turf/closed/mineral/random/rogue, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "pSm" = ( /mob/living/simple_animal/hostile/retaliate/rogue/mudcrab, /turf/open/floor/rogue/dirt/road, @@ -49909,7 +50507,11 @@ /obj/structure/flora/ausbushes/ppflowers, /obj/structure/flora/roguegrass, /turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "pTX" = ( /obj/effect/landmark/quest_spawner/medium, /turf/open/floor/rogue/naturalstone, @@ -49986,6 +50588,10 @@ /obj/structure/roguemachine/scomm/r, /turf/open/floor/rogue/ruinedwood/herringbone, /area/rogue/indoors/town/magician) +"pVz" = ( +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/tile/bath, +/area/rogue/under/town/basement/keep) "pVA" = ( /obj/machinery/light/rogue/wallfire/candle/blue/r, /turf/open/water/bath, @@ -50140,7 +50746,11 @@ dir = 4 }, /turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "pXL" = ( /obj/structure/chair/wood/rogue/chair3{ dir = 4 @@ -50813,7 +51423,11 @@ dir = 1; icon_state = "vertw" }, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "qjb" = ( /obj/effect/decal/cobbleedge{ dir = 10; @@ -51389,7 +52003,11 @@ "qrY" = ( /obj/structure/flora/ausbushes/ywflowers, /turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "qsl" = ( /obj/structure/bookcase/random/archive, /obj/effect/decal/wood/herringbone2{ @@ -51581,7 +52199,11 @@ "quW" = ( /obj/structure/flora/roguegrass, /turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "qvc" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 4 @@ -51794,7 +52416,11 @@ dir = 1; icon_state = "vertw" }, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "qxL" = ( /obj/machinery/light/rogue/torchholder/r, /turf/open/floor/rogue/hexstone, @@ -52467,7 +53093,8 @@ /obj/structure/fluff/walldeco/bsmith{ dir = 1; pixel_x = 7; - pixel_y = 0 + pixel_y = 0; + name = "Crafter's Guild" }, /turf/open/floor/rogue/cobblerock, /area/rogue/outdoors/town) @@ -52616,7 +53243,11 @@ /area/rogue/outdoors/town/roofs/keep) "qJA" = ( /turf/open/floor/rogue/grasscold, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "qJB" = ( /obj/structure/rack/rogue/shelf/biggest, /obj/item/reagent_containers/glass/bottle/rogue, @@ -53308,6 +53939,16 @@ }, /turf/open/floor/rogue/grassred, /area/rogue/outdoors/town) +"qWg" = ( +/obj/structure/bars{ + color = "#755f48"; + name = "rusted bars" + }, +/turf/open/water/river{ + dir = 4; + icon_state = "rockwd" + }, +/area/rogue/outdoors/mountains) "qWm" = ( /obj/structure/closet/crate/drawer, /turf/open/floor/carpet/stellar, @@ -54093,7 +54734,11 @@ "rjw" = ( /obj/structure/telescope, /turf/open/floor/rogue/ruinedwood, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "rjF" = ( /obj/structure/closet/crate/roguecloset, /obj/item/clothing/suit/roguetown/shirt/tunic, @@ -54605,7 +55250,11 @@ dir = 5 }, /turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "rsA" = ( /obj/structure/bars/pipe{ dir = 8 @@ -54870,7 +55519,11 @@ "rxe" = ( /obj/structure/fluff/railing/border, /turf/open/transparent/openspace, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "rxg" = ( /obj/item/roguebin/water/gross, /turf/open/floor/rogue/blocks, @@ -55714,7 +56367,9 @@ /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) "rLe" = ( -/obj/structure/fluff/walldeco/sign/merchantsign, +/obj/structure/fluff/walldeco/sign/merchantsign{ + name = "MERCHANT" + }, /turf/open/floor/rogue/cobble, /area/rogue/outdoors/town) "rLh" = ( @@ -56623,7 +57278,11 @@ /area/rogue/indoors/town) "rZO" = ( /turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "sae" = ( /obj/effect/landmark/quest_spawner/medium, /turf/closed/mineral/rogue/bedrock, @@ -56901,7 +57560,11 @@ "seL" = ( /obj/structure/flora/newtree, /turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "seN" = ( /obj/structure/flora/ausbushes/lavendergrass, /obj/structure/flora/roguegrass, @@ -56943,7 +57606,11 @@ dir = 8 }, /turf/open/floor/rogue/naturalstone, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "sfP" = ( /obj/structure/roguewindow/stained/zizo, /turf/closed/wall/mineral/rogue/stone, @@ -56971,7 +57638,11 @@ /obj/structure/flora/roguegrass, /obj/structure/flora/ausbushes/ppflowers, /turf/open/floor/rogue/grassyel, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "sgI" = ( /obj/structure/fluff/railing/wood{ dir = 4 @@ -57025,7 +57696,8 @@ /area/rogue/outdoors/town) "shc" = ( /obj/structure/fluff/walldeco/steward{ - dir = 1 + dir = 1; + name = "Steward" }, /turf/open/floor/rogue/cobble, /area/rogue/outdoors/town) @@ -57329,7 +58001,11 @@ "sln" = ( /obj/effect/decal/remains/wolf, /turf/open/floor/rogue/naturalstone, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "slp" = ( /obj/item/ash, /obj/effect/decal/cleanable/dirt/dust, @@ -58258,7 +58934,11 @@ }, /obj/structure/flora/roguegrass, /turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "sxm" = ( /obj/structure/bars, /turf/open/water/swamp, @@ -58403,7 +59083,11 @@ "szF" = ( /obj/structure/chair/stool/rogue, /turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "szH" = ( /obj/structure/chair/stool/rogue, /turf/open/floor/rogue/ruinedwood/spiral, @@ -59055,7 +59739,11 @@ "sMJ" = ( /obj/machinery/gear_painter, /turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "sMN" = ( /turf/closed/wall/mineral/rogue/roofwall/middle, /area/rogue/indoors/town) @@ -59087,9 +59775,8 @@ /turf/open/floor/rogue/wood, /area/rogue/indoors/shelter/woods) "sNq" = ( -/obj/machinery/light/rogue/wallfire/candle/blue, -/obj/item/reagent_containers/glass/bucket, -/turf/open/floor/rogue/tile/bath, +/obj/structure/fluff/walldeco/church/line, +/turf/open/floor/rogue/dirt/road, /area/rogue/under/town/basement/keep) "sNy" = ( /obj/item/reagent_containers/food/snacks/crow, @@ -59117,7 +59804,11 @@ /area/rogue/outdoors/beach/forest) "sNZ" = ( /turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "sOa" = ( /obj/item/book/rogue/law, /obj/structure/table/wood{ @@ -59222,7 +59913,15 @@ /area/rogue/indoors/town/physician) "sPF" = ( /turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) +"sPI" = ( +/obj/structure/glowshroom, +/turf/open/floor/rogue/naturalstone, +/area/rogue/outdoors/mountains) "sPL" = ( /obj/structure/fluff/railing/border{ dir = 6 @@ -59471,7 +60170,11 @@ "sTy" = ( /obj/structure/flora/ausbushes/ppflowers, /turf/open/floor/rogue/grassyel, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "sTz" = ( /obj/machinery/light/rogue/forge, /turf/open/floor/rogue/cobble, @@ -59642,13 +60345,10 @@ /turf/open/floor/rogue/concrete, /area/rogue/indoors/shelter) "sWu" = ( -/obj/structure/chair/stool/rogue, -/obj/structure/roguemachine/withdraw{ - pixel_x = -32; - pixel_y = 0 - }, -/turf/open/floor/rogue/tile/bath, -/area/rogue/under/town/basement/keep) +/obj/machinery/light/rogue/hearth, +/obj/item/cooking/pan, +/turf/open/floor/rogue/cobble, +/area/rogue/indoors/town) "sWE" = ( /turf/closed/wall/mineral/rogue/decostone/long, /area/rogue/under/cave/dukecourt) @@ -60116,7 +60816,11 @@ dir = 8 }, /turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "tdA" = ( /obj/structure/closet/crate/roguecloset/inn, /obj/effect/spawner/lootdrop/roguetown/dungeon/clothing, @@ -60651,7 +61355,11 @@ dir = 6 }, /turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "tlZ" = ( /obj/machinery/light/rogue/torchholder/l, /obj/effect/decal/cleanable/dirt/cobweb{ @@ -60871,7 +61579,11 @@ }, /obj/item/chair/stool/bar/rogue, /turf/open/floor/rogue/wood, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "tpj" = ( /obj/machinery/light/rogue/firebowl/standing/blue, /turf/open/floor/rogue/churchrough, @@ -61008,7 +61720,11 @@ "trV" = ( /obj/structure/flora/ausbushes/ywflowers, /turf/open/floor/rogue/grassyel, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "trX" = ( /obj/structure/bars/pipe, /turf/closed/mineral/rogue/bedrock, @@ -61247,7 +61963,9 @@ /obj/structure/fluff/railing/border{ dir = 9 }, -/obj/structure/fluff/walldeco/steward, +/obj/structure/fluff/walldeco/steward{ + name = "Steward" + }, /turf/open/floor/rogue/herringbone, /area/rogue/outdoors/town) "tvL" = ( @@ -61427,7 +62145,11 @@ order = 4 }, /turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "tyd" = ( /obj/structure/bed/rogue/inn/hay, /turf/open/floor/rogue/ruinedwood/turned, @@ -62131,7 +62853,11 @@ "tKn" = ( /obj/machinery/light/rogue/firebowl/stump, /turf/open/floor/rogue/hexstone, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "tKo" = ( /obj/structure/flora/roguegrass/herb/random, /turf/open/floor/rogue/dirt/road, @@ -62147,7 +62873,11 @@ dir = 4 }, /turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "tKP" = ( /obj/structure/flora/newtree, /turf/open/floor/rogue/grassred, @@ -62283,7 +63013,11 @@ "tMO" = ( /obj/structure/flora/roguegrass/bush/wall, /turf/open/floor/rogue/grassred, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "tNa" = ( /obj/structure/flora/rogueshroom/happy/mushroom3, /turf/open/floor/rogue/dirt, @@ -63089,7 +63823,11 @@ /obj/structure/flora/roguegrass, /obj/structure/flora/ausbushes/ppflowers, /turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "tYQ" = ( /obj/machinery/light/rogue/torchholder/hotspring/standing, /obj/structure/flora/roguegrass, @@ -63185,7 +63923,11 @@ /area/rogue/outdoors/town) "uaw" = ( /turf/closed/wall/mineral/rogue/decostone/mossy/cand, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "uaE" = ( /obj/structure/fluff/clock, /turf/open/floor/rogue/ruinedwood/spiral, @@ -63682,6 +64424,10 @@ /obj/machinery/light/rogue/firebowl/standing/blue, /turf/open/floor/rogue/blocks, /area/rogue/outdoors/mountains/decap/stepbelow) +"uhT" = ( +/obj/item/grown/log/tree/stick, +/turf/open/floor/rogue/naturalstone, +/area/rogue/outdoors/mountains) "uhV" = ( /obj/structure/stairs{ dir = 8 @@ -64678,7 +65424,11 @@ /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" }, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "uxk" = ( /obj/structure/closet/crate/chest/crate, /obj/effect/spawner/lootdrop/roguetown/dungeon/armor, @@ -66031,7 +66781,11 @@ dir = 5 }, /turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "uSi" = ( /obj/structure/fluff/railing/wood{ layer = 4.51 @@ -66095,7 +66849,11 @@ /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" }, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "uSZ" = ( /obj/structure/table/wood{ dir = 1; @@ -66396,7 +67154,11 @@ "uYe" = ( /obj/structure/flora/roguegrass/herb/random, /turf/open/floor/rogue/grasscold, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "uYh" = ( /obj/structure/closet/crate/roguecloset/inn, /obj/item/reagent_containers/glass/bucket, @@ -66416,7 +67178,11 @@ dir = 8 }, /turf/open/floor/rogue/grassyel, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "uYz" = ( /obj/structure/chair/stool/rogue, /turf/open/floor/carpet/red, @@ -67115,7 +67881,11 @@ "vjN" = ( /obj/item/natural/rock, /turf/open/floor/rogue/naturalstone, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "vjP" = ( /obj/structure/table/wood, /obj/effect/spawner/lootdrop/potion_poisons, @@ -67422,7 +68192,11 @@ dir = 4 }, /turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "voH" = ( /turf/open/floor/carpet/red, /area/rogue/outdoors/mountains/decap) @@ -67740,7 +68514,11 @@ /area/rogue/under/cave/dukecourt) "vtR" = ( /turf/open/floor/rogue/tile, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "vtV" = ( /mob/living/carbon/human/species/dwarfskeleton/ambush, /turf/open/floor/rogue/cobble, @@ -68226,7 +69004,11 @@ "vBt" = ( /obj/effect/decal/cleanable/blood/gibs, /turf/open/floor/rogue/naturalstone, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "vBu" = ( /obj/structure/table/wood{ icon_state = "tablewood1" @@ -68409,7 +69191,11 @@ "vET" = ( /obj/structure/flora/newtree, /turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "vFb" = ( /obj/structure/stairs{ dir = 8 @@ -69125,8 +69911,6 @@ /turf/open/floor/rogue/concrete, /area/rogue/under/cave/goblinfort) "vPq" = ( -/obj/effect/decal/cleanable/dirt/cobweb, -/obj/structure/fluff/alch, /obj/machinery/light/rogue/wallfire/candle/blue, /turf/open/floor/rogue/tile/bath, /area/rogue/under/town/basement/keep) @@ -70594,7 +71378,11 @@ pixel_y = 32 }, /turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "wmi" = ( /obj/effect/decal/cobbleedge{ dir = 10 @@ -70650,7 +71438,11 @@ dir = 1 }, /turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "wnd" = ( /obj/structure/bookcase{ name = "suspicious bookcase" @@ -71036,7 +71828,11 @@ /obj/structure/flora/ausbushes/brflowers, /obj/structure/flora/roguegrass, /turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "wup" = ( /obj/structure/stairs{ dir = 1 @@ -71221,7 +72017,11 @@ "wxn" = ( /obj/effect/decal/cleanable/blood, /turf/open/floor/rogue/naturalstone, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "wxq" = ( /obj/structure/rack/rogue, /obj/item/clothing/suit/roguetown/armor/leather/cuirass, @@ -71236,7 +72036,11 @@ "wxw" = ( /obj/machinery/light/rogue/firebowl/stump, /turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "wxD" = ( /obj/effect/decal/cobbleedge{ icon_state = "cobbleedge-sread" @@ -71663,7 +72467,11 @@ pixel_y = 0 }, /turf/open/floor/rogue/ruinedwood, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "wEE" = ( /obj/item/grown/log/tree/stick, /turf/open/floor/rogue/rooftop{ @@ -72287,7 +73095,11 @@ "wOl" = ( /obj/effect/spawner/roguemap/stump, /turf/open/floor/rogue/grassyel, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "wOr" = ( /obj/item/natural/rock, /turf/open/floor/rogue/dirt/road, @@ -72378,7 +73190,11 @@ "wQg" = ( /obj/structure/flora/ausbushes/ppflowers, /turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "wQn" = ( /obj/structure/mineral_door/bars{ lockid = "farm" @@ -72563,7 +73379,11 @@ "wSV" = ( /obj/item/roguegem/random, /turf/open/floor/rogue/naturalstone, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "wTi" = ( /obj/machinery/light/rogue/wallfire/candle, /obj/structure/closet/crate/roguecloset/dark, @@ -72849,7 +73669,11 @@ /obj/structure/flora/roguegrass/maneater, /obj/structure/flora/roguetree/pine, /turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "wYo" = ( /obj/structure/fluff/railing/fence{ dir = 1 @@ -73072,7 +73896,11 @@ "xbo" = ( /obj/structure/flora/roguegrass/herb/random, /turf/open/floor/rogue/grassyel, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "xbr" = ( /obj/structure/fluff/railing/wood{ dir = 4; @@ -73430,6 +74258,13 @@ /obj/machinery/light/rogue/torchholder/r, /turf/open/floor/rogue/naturalstone, /area/rogue/outdoors/beach) +"xgJ" = ( +/obj/structure/bars{ + color = "#755f48"; + name = "rusted bars" + }, +/turf/open/water/cleanshallow, +/area/rogue/outdoors/mountains) "xgP" = ( /obj/structure/fluff/railing/border{ dir = 5 @@ -73646,10 +74481,14 @@ /area/rogue/indoors/town/physician) "xkL" = ( /obj/structure/fluff/signage{ - name = "AZURE PEAK - NORTH" + name = "AZURE PEAK - NORTH EAST" }, /turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "xkS" = ( /obj/item/grown/log/tree/small, /turf/open/floor/rogue/ruinedwood, @@ -73713,7 +74552,11 @@ dir = 1 }, /turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "xlK" = ( /obj/structure/flora/roguegrass, /turf/open/floor/rogue/grassred, @@ -74109,7 +74952,11 @@ "xrZ" = ( /mob/living/simple_animal/hostile/retaliate/rogue/wolf, /turf/open/floor/rogue/naturalstone, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "xsb" = ( /obj/structure/bars/pipe{ pixel_y = 8 @@ -74901,7 +75748,11 @@ "xFw" = ( /obj/effect/spawner/roguemap/stump, /turf/open/floor/rogue/grassred, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "xFB" = ( /obj/structure/fluff/walldeco/church/line, /turf/open/floor/rogue/churchrough, @@ -75689,7 +76540,11 @@ dir = 4 }, /turf/open/floor/rogue/ruinedwood, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "xSh" = ( /obj/structure/fluff/railing/border{ dir = 8 @@ -75736,7 +76591,11 @@ /obj/structure/flora/roguegrass, /obj/structure/roguemachine/boardbarrier, /turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "xSz" = ( /obj/structure/fluff/walldeco/chains, /turf/open/floor/rogue/blocks, @@ -75813,6 +76672,10 @@ }, /turf/open/floor/rogue/grass, /area/rogue/under/cavewet/bogcaves/sunkencity) +"xTB" = ( +/obj/structure/roguerock, +/turf/open/floor/rogue/naturalstone, +/area/rogue/outdoors/mountains) "xTX" = ( /obj/machinery/light/rogue/chand{ light_on = 0 @@ -76224,7 +77087,11 @@ pixel_y = -6 }, /turf/open/floor/rogue/ruinedwood, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "ybD" = ( /mob/living/carbon/human/species/skeleton/no_equipment, /turf/open/floor/rogue/cobble, @@ -76355,7 +77222,11 @@ pixel_x = -8 }, /turf/open/floor/rogue/naturalstone, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "ycZ" = ( /obj/structure/chair/wood/rogue/chair3{ dir = 8 @@ -76761,7 +77632,11 @@ "yjq" = ( /obj/structure/flora/roguetree/burnt, /turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield) +/area/rogue/outdoors/rtfield{ + ambush_mobs = null; + ambush_times = null; + ambush_types = null + }) "yju" = ( /obj/structure/roguemachine/mail{ mailtag = "Steward"; @@ -176531,11 +177406,11 @@ iad dlK opX opX -opX jEk mMx fAL opX +opX xSV nnq gUI @@ -176983,12 +177858,12 @@ iad ogs ogs ogs -ogs xAN -mMx +urZ xAN ogs ogs +ogs nnq bHV bHV @@ -177435,12 +178310,12 @@ iad iad ogs ogs -ogs xAN -ylh +mMx xAN ogs ogs +ogs nnq alb bHV @@ -177887,10 +178762,10 @@ laF vtx ogs ogs +dlK +ylh +dlK ogs -xAN -urZ -xAN ogs ogs nnq @@ -178337,13 +179212,13 @@ wAx eWv mPH vtx -ogs -ogs -ogs -xAN -mMx -xAN -ogs +nnq +nnq +nnq +cWV +nnq +nnq +nnq nnq nnq tkl @@ -178789,13 +179664,13 @@ iad sfH rPN iad -ogs -ogs -ogs -dlK -ylh -dlK -ogs +nnq +sNq +mmB +mmB +mmB +fsG +nnq nnq jxg bHV @@ -179241,12 +180116,12 @@ iad xdz dJv iad -ogs -nnq -nnq -nnq -cWV nnq +sNq +mmB +mmB +mmB +fsG nnq nnq jxg @@ -179696,7 +180571,7 @@ iad nnq nnq vPq -sWu +mmB mmB irJ nnq @@ -180146,8 +181021,8 @@ vtx ogs ogs nnq -vlq -mmB +mwP +pVz mmB mmB suN @@ -180598,7 +181473,7 @@ iad ogs ogs nnq -qJB +vlq mmB mmB mmB @@ -181050,7 +181925,7 @@ iad ogs ogs nnq -jhF +qJB mmB mmB mmB @@ -181502,7 +182377,7 @@ ogs ogs ogs nnq -nLo +jhF mmB mmB mmB @@ -181954,11 +182829,11 @@ ogs ogs ogs nnq -oIF +nLo mmB -lks -oth -oth +mmB +mmB +hqm nnq nnq rBl @@ -182406,11 +183281,11 @@ ogs ogs ogs nnq -nnq -sNq -tfm -bZI -fwW +oIF +mmB +lks +oth +oth nnq ylO kIs @@ -182857,12 +183732,12 @@ ogs ogs ogs ogs -ogs -nnq nnq nnq -ngv -nnq +mYE +tfm +bZI +fwW nnq qRl kIs @@ -183310,11 +184185,11 @@ ogs ogs ogs ogs -ogs -ogs -ogs -ogs -ogs +nnq +nnq +nnq +ngv +nnq nnq nnq nnq @@ -253917,11 +254792,11 @@ pSg pSg bhJ bhJ -tlS psV psV psV psV +tlS psV psV psV @@ -254373,7 +255248,7 @@ psV psV psV psV -psV +lzm psV psV psV @@ -254394,7 +255269,7 @@ niV niV niV niV -niV +luF niV uWS uWS @@ -256930,7 +257805,7 @@ fii fii fii fii -aoe +mRn aoe pSg pSg @@ -257088,7 +257963,7 @@ psV psV psV psV -tlS +psV bhJ bhJ bhJ @@ -262834,8 +263709,8 @@ snj uBc faB sId -xWk -cDX +ozA +sWu uBc iJQ qyR @@ -263738,8 +264613,8 @@ hVW uBc jKv wGB -sYZ -cDX +iRg +sWu uBc qyR qyR @@ -341081,7 +341956,7 @@ vQH vQH vhs tYx -mrW +pct tYx qUs tYx @@ -343333,7 +344208,7 @@ qwK qwK qwK mrW -mrW +pct mrW mrW tYx @@ -343793,7 +344668,7 @@ vhs vQH vQH tYx -mrW +pct mrW qUs mrW @@ -344697,7 +345572,7 @@ hgc vhs ylq mrW -mrW +bHE mrW sLh sLh @@ -345148,7 +346023,7 @@ czH vhs vhs tYx -mrW +pct mrW mrW sLh @@ -345611,7 +346486,7 @@ czH czH mrW mrW -mrW +pct hVK vhs vQH @@ -346975,7 +347850,7 @@ vQH tYx mrW mrW -sLh +hsv sLh tYx vQH @@ -350561,7 +351436,7 @@ qwK qwK qwK qwK -mrW +pct tYx tYx tYx @@ -351024,7 +351899,7 @@ tYx tYx mrW mrW -hsv +sLh sLh mrW vQH @@ -351476,8 +352351,8 @@ czH tYx mrW pZv -bHE -hsv +mrW +sLh sLh sLh qUs @@ -352854,7 +353729,7 @@ czH czH czH czH -wXJ +gIY wXJ tYx tYx @@ -353299,7 +354174,7 @@ eGx eGx eGx eGx -fZN +phZ fZN fZN uxZ @@ -353307,7 +354182,7 @@ gkI uxZ fZN fZN -fZN +sBc eGx eGx eGx @@ -353752,8 +354627,8 @@ qwK qwK eGx eGx -fZN -fZN +sPI +uhT uxZ gkI uxZ @@ -354204,12 +355079,12 @@ qwK eGx eGx eGx -fZN +sBc fZN uxZ gkI uxZ -fZN +uhT fZN vvB vvB @@ -354243,7 +355118,7 @@ fZN fZN fZN fZN -fZN +xTB fZN fZN fZN @@ -354657,11 +355532,11 @@ eGx eGx eGx vvB -fZN +phZ uxZ gkI uxZ -fZN +foZ vvB vvB eGx @@ -355108,13 +355983,13 @@ rZO quW eGx eGx -vvB -fZN -uxZ -gkI -uxZ -fZN -vvB +fjj +fjj +xgJ +qWg +xgJ +fjj +fjj vvB eGx eGx @@ -360114,7 +360989,7 @@ qwK qwK qwK fZN -fZN +xTB fZN qwK qwK @@ -470370,12 +471245,12 @@ aBB bMk vBH pHH -aBB -aBB -aBB -aBB -aBB -vvB +owC +owC +owC +owC +owC +owC vvB vvB vvB From 4d847594731a1c4fff90ce5acb83929a57c4d39d Mon Sep 17 00:00:00 2001 From: Sad_Starfish Date: Wed, 3 Sep 2025 15:13:29 -0400 Subject: [PATCH 29/66] Goldface fix --- code/modules/roguetown/roguemachine/merchant/goldface.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/roguetown/roguemachine/merchant/goldface.dm b/code/modules/roguetown/roguemachine/merchant/goldface.dm index 64063113..aa46f99d 100644 --- a/code/modules/roguetown/roguemachine/merchant/goldface.dm +++ b/code/modules/roguetown/roguemachine/merchant/goldface.dm @@ -144,7 +144,7 @@ var/shoplength = PA.contains.len var/l for(l=1,l<=shoplength,l++) - var/pathi = pick(PA.contains) + var/pathi = PA.contains[l] new pathi(get_turf(M)) if(href_list["change"]) if(budget > 0) From cfd82af2e92000ecfb198d9d25f153c148bbc3d8 Mon Sep 17 00:00:00 2001 From: granodd Date: Wed, 3 Sep 2025 19:05:31 -0400 Subject: [PATCH 30/66] remove grim endround messages Removes the very grim end-round messages. They didn't really serve any purpose to the mood we're aiming for. --- code/__HELPERS/roundend.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/__HELPERS/roundend.dm b/code/__HELPERS/roundend.dm index fd138b39..05fd8593 100644 --- a/code/__HELPERS/roundend.dm +++ b/code/__HELPERS/roundend.dm @@ -132,7 +132,7 @@ log_game("The round has ended.") to_chat(world, "


So ends this tale on Azure Peak.") - get_end_reason() + //get_end_reason() var/list/key_list = list() for(var/client/C in GLOB.clients) @@ -214,7 +214,7 @@ ready_for_reboot = TRUE standard_reboot() -/datum/controller/subsystem/ticker/proc/get_end_reason() +/*/datum/controller/subsystem/ticker/proc/get_end_reason() var/end_reason if(!check_for_lord()) @@ -238,7 +238,7 @@ if(end_reason) to_chat(world, span_bigbold("[end_reason].")) else - to_chat(world, span_bigbold("The town has managed to survive another week.")) + to_chat(world, span_bigbold("The town has managed to survive another week."))*/ /datum/controller/subsystem/ticker/proc/gamemode_report() var/list/all_teams = list() From 2792dfa56cc509d5b8767cc9d3c3735ca5a839b6 Mon Sep 17 00:00:00 2001 From: LDip999 Date: Thu, 4 Sep 2025 20:20:04 +0200 Subject: [PATCH 31/66] Does the ghost thing --- modular_causticcove/code/modules/vore/eating/belly_obj.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modular_causticcove/code/modules/vore/eating/belly_obj.dm b/modular_causticcove/code/modules/vore/eating/belly_obj.dm index 42022d4f..0297a09b 100644 --- a/modular_causticcove/code/modules/vore/eating/belly_obj.dm +++ b/modular_causticcove/code/modules/vore/eating/belly_obj.dm @@ -511,6 +511,9 @@ // Delete the digested mob release_specific_contents_digest(M) + var/mob/dead/observer/G = M.ghostize(FALSE) + if(G) + G.forceMove(owner) M.x = 1 M.y = 1 M.z = 1 From 2b69e7432599eda60d07a91e81c68033467e8e3f Mon Sep 17 00:00:00 2001 From: LDip999 Date: Thu, 4 Sep 2025 23:12:10 +0200 Subject: [PATCH 32/66] Fixes say from tummy --- code/modules/mob/living/say.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 7d02383f..ad1c7d65 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -460,7 +460,7 @@ GLOBAL_LIST_INIT(department_radio_keys, list( if((!Zs_too && !isobserver(AM)) || message_mode == MODE_WHISPER) if(movable_turf.z != self_z) continue - if(Zs_too && AM.z != src.z && !Zs_all) + if(Zs_too && listener_turf.z != self_turf.z && !Zs_all) if(!Zs_yell && !HAS_TRAIT(AM, TRAIT_KEENEARS)) if(listener_turf.z < speaker_turf.z && listener_has_ceiling) //Listener is below the speaker and has a ceiling above them continue From 54ec52fe97f3d741a75b9b9f1893021332264ebe Mon Sep 17 00:00:00 2001 From: Sad_Starfish Date: Thu, 4 Sep 2025 22:56:49 -0400 Subject: [PATCH 33/66] drow skeleton head price fix --- code/modules/mob/living/carbon/human/npc/drow.dm | 1 + code/modules/mob/living/carbon/human/npc/skeleton.dm | 2 ++ 2 files changed, 3 insertions(+) diff --git a/code/modules/mob/living/carbon/human/npc/drow.dm b/code/modules/mob/living/carbon/human/npc/drow.dm index d1d0243a..d0eb13d4 100644 --- a/code/modules/mob/living/carbon/human/npc/drow.dm +++ b/code/modules/mob/living/carbon/human/npc/drow.dm @@ -91,6 +91,7 @@ GLOBAL_LIST_INIT(drowraider_aggro, world.file2list("strings/rt/drowaggrolines.tx real_name = pick(world.file2list("strings/rt/names/elf/elfdm.txt")) update_hair() update_body() + head.sellprice = 40 // Drow are dangerous! They're also dangerous to get to and, depending on location, like to run into acid vats. This accounts for that. /mob/living/carbon/human/species/elf/dark/drowraider/npc_idle() if(m_intent == MOVE_INTENT_SNEAK) diff --git a/code/modules/mob/living/carbon/human/npc/skeleton.dm b/code/modules/mob/living/carbon/human/npc/skeleton.dm index a93f1385..a9e6246e 100644 --- a/code/modules/mob/living/carbon/human/npc/skeleton.dm +++ b/code/modules/mob/living/carbon/human/npc/skeleton.dm @@ -83,6 +83,8 @@ var/datum/outfit/OU = new skel_outfit if(OU) equipOutfit(OU) + var/obj/item/bodypart/head = get_bodypart(BODY_ZONE_HEAD) + head.sellprice = 20 //there's a LOT of these guys. May later change head prices depending on skeletype. Dread knights > nakeds. /datum/outfit/job/roguetown/npc/skeleton/pre_equip(mob/living/carbon/human/H) ..() From 48654317851a4d92e3c9ed462d2acb1d1bd8011f Mon Sep 17 00:00:00 2001 From: LDip999 Date: Fri, 5 Sep 2025 12:15:15 +0200 Subject: [PATCH 34/66] Test? --- code/game/sound.dm | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/code/game/sound.dm b/code/game/sound.dm index 0a863d95..a9c1a419 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -32,9 +32,9 @@ if(soundping) ping_sound(source) - var/list/muffled_listeners = list() //this is very rudimentary list of muffled listeners above and below to mimic sound muffling (this is done through modifying the playsounds for them) + //var/list/muffled_listeners = list() //this is very rudimentary list of muffled listeners above and below to mimic sound muffling (this is done through modifying the playsounds for them) <-- no it ain't you forgot to use this var if(!ignore_walls) //these sounds don't carry through walls or vertically - listeners = listeners & hearers(maxdistance,turf_source) + listeners = listeners & get_hearers_in_view(maxdistance,turf_source) else if(above_turf) listeners += SSmobs.clients_by_zlevel[above_turf.z] @@ -48,20 +48,20 @@ . = list() for(var/mob/M as anything in listeners) - if(get_dist(M, turf_source) <= maxdistance) + if(get_dist(get_turf(M), turf_source) <= maxdistance) if(animal_pref) if(M.client?.prefs?.mute_animal_emotes) continue if(M.playsound_local(turf_source, soundin, vol, vary, frequency, falloff, channel, pressure_affected, S, repeat)) . += M - - for(var/mob/M as anything in muffled_listeners) + //This slop never runs because muffled listeners will always be empty and instead muffling runs on playsound_local + /*for(var/mob/M as anything in muffled_listeners) if(get_dist(M, turf_source) <= maxdistance) if(animal_pref) if(M.client?.prefs?.mute_animal_emotes) continue if(M.playsound_local(turf_source, soundin, vol, vary, frequency, falloff, channel, pressure_affected, S, repeat, muffled = TRUE)) - . += M + . += M*/ /proc/ping_sound(atom/A) @@ -117,7 +117,7 @@ S.volume = vol2use - var/area/A = get_area(src) + var/area/A = get_area(get_turf(src)) if(A) if(A.soundenv != -1) S.environment = A.soundenv From 0151dea994eb7de934eccfa497b4e4dbb7a3cced Mon Sep 17 00:00:00 2001 From: LDip999 Date: Fri, 5 Sep 2025 14:06:41 +0200 Subject: [PATCH 35/66] It just works TM --- code/game/sound.dm | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/code/game/sound.dm b/code/game/sound.dm index a9c1a419..f9e6124f 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -132,7 +132,6 @@ //sound volume falloff with distance var/distance = get_dist(T, turf_source) - S.volume -= (distance * (0.10 * S.volume)) //10% each step /* if(pressure_affected) @@ -157,19 +156,19 @@ if(S.volume <= 0) return FALSE //No sound - - var/dx = turf_source.x - x + var/atom/our_turf = get_turf(src) + var/dx = turf_source.x - our_turf.x if(dx <= 1 && dx >= -1) S.x = 0 else S.x = dx - var/dz = turf_source.y - y + var/dz = turf_source.y - our_turf.y if(dz <= 1 && dz >= -1) S.z = 0 else S.z = dz - var/dy = turf_source.z - z + var/dy = turf_source.z - our_turf.z S.y = dy S.falloff = (falloff ? falloff : FALLOFF_SOUNDS) From a54d5a96e957d0ef574e7cb8b157fbd589b615c4 Mon Sep 17 00:00:00 2001 From: Dinnel Date: Fri, 5 Sep 2025 08:56:07 -0500 Subject: [PATCH 36/66] Organ Correction Corrects organ positions, layers, and as well as reimport/enable previously unavailable sprites. --- code/__DEFINES/DNA.dm | 9 ++++--- code/__DEFINES/misc.dm | 4 ++- .../customization/organ_customization.dm | 6 +++++ .../sprite_accessory/_sprite_accessory.dm | 4 +++ .../new_player/sprite_accessory/genitals.dm | 23 +++++++++++++----- .../species_types/furry/anthromorphsmall.dm | 2 +- .../human/species_types/furry/kobold.dm | 6 ++--- .../species_types/roguetown/dwarf/dwarfm.dm | 2 +- .../species_types/roguetown/goblin/goblinp.dm | 4 +-- .../surgery/organs/feature_organs/genitals.dm | 4 ++- .../mob/sprite_accessory/genitals/breasts.dmi | Bin 8597 -> 10298 bytes .../mob/sprite_accessory/genitals/gonads.dmi | Bin 452 -> 716 bytes .../mob/sprite_accessory/genitals/pintle.dmi | Bin 6714 -> 9298 bytes 13 files changed, 45 insertions(+), 19 deletions(-) diff --git a/code/__DEFINES/DNA.dm b/code/__DEFINES/DNA.dm index 17f668fc..6c95cfd6 100644 --- a/code/__DEFINES/DNA.dm +++ b/code/__DEFINES/DNA.dm @@ -158,7 +158,7 @@ #define EYE_COLOR_LIST list("#865900", "#06b400", "#312f27", "#008e83", "#002d8e", "#c16c00") #define MIN_PENIS_SIZE 1 -#define MAX_PENIS_SIZE 3 +#define MAX_PENIS_SIZE 5 #define DEFAULT_PENIS_SIZE 2 #define PENIS_TYPE_PLAIN 1 @@ -177,14 +177,15 @@ #define ERECT_STATE_NONE 0 #define ERECT_STATE_PARTIAL 1 -#define ERECT_STATE_HARD 2 +#define ERECT_STATE_STIFF 2 +#define ERECT_STATE_HARD 3 #define MIN_TESTICLES_SIZE 1 -#define MAX_TESTICLES_SIZE 3 +#define MAX_TESTICLES_SIZE 5 #define DEFAULT_TESTICLES_SIZE 2 #define MIN_BREASTS_SIZE 0 -#define MAX_BREASTS_SIZE 10 +#define MAX_BREASTS_SIZE 16 #define DEFAULT_BREASTS_SIZE 3 #define DEFAULT_BELLY_SIZE 0 diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index d7ed5063..9057c561 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -77,7 +77,9 @@ //AND -1 MEANS "ABOVE", OK?, OK!?! #define ABOVE_SHOES_LAYER (SHOES_LAYER-1) -#define ABOVE_BODY_FRONT_LAYER (BODY_FRONT_LAYER-1) +#define ABOVE_BODY_FRONT_LAYER (BODY_FRONT_LAYER-3) +#define BODY_FRONTER_LAYER (BODY_FRONT_LAYER-1) // Put it on top of the top, silly! +#define BODY_FRONTEST_LAYER (BODY_FRONT_LAYER-2) //Security levels #define SEC_LEVEL_GREEN 0 diff --git a/code/_globalvars/customization/organ_customization.dm b/code/_globalvars/customization/organ_customization.dm index e1150183..d1d7ab98 100644 --- a/code/_globalvars/customization/organ_customization.dm +++ b/code/_globalvars/customization/organ_customization.dm @@ -27,6 +27,12 @@ GLOBAL_LIST_INIT(named_breast_sizes, list( "gargantuan" = 8, "colossal" = 9, "ungodly big" = 10, + "gigantic" = 11, + "titanic" = 12, + "obscenely large" = 13, + "over-endowed" = 14, + "unholy" = 15, + "baothan-sized" = 16, )) GLOBAL_LIST_INIT(named_belly_sizes, list( diff --git a/code/modules/mob/dead/new_player/sprite_accessory/_sprite_accessory.dm b/code/modules/mob/dead/new_player/sprite_accessory/_sprite_accessory.dm index 5ce0d6a7..6ed0dd74 100644 --- a/code/modules/mob/dead/new_player/sprite_accessory/_sprite_accessory.dm +++ b/code/modules/mob/dead/new_player/sprite_accessory/_sprite_accessory.dm @@ -179,6 +179,10 @@ return "ADJ" if(BODY_FRONT_LAYER) return "FRONT" + if(BODY_FRONTER_LAYER) + return "FRONT" + if(BODY_FRONTEST_LAYER) + return "FRONT" if(BODY_FRONT_FRONT_LAYER) return "FFRONT" if(BODY_UNDER_LAYER) diff --git a/code/modules/mob/dead/new_player/sprite_accessory/genitals.dm b/code/modules/mob/dead/new_player/sprite_accessory/genitals.dm index c55a1493..55e464bd 100644 --- a/code/modules/mob/dead/new_player/sprite_accessory/genitals.dm +++ b/code/modules/mob/dead/new_player/sprite_accessory/genitals.dm @@ -9,7 +9,7 @@ /datum/sprite_accessory/penis/get_icon_state(obj/item/organ/organ, obj/item/bodypart/bodypart, mob/living/carbon/owner) var/obj/item/organ/penis/pp = organ - if(pp.sheath_type != SHEATH_TYPE_NONE && pp.erect_state != ERECT_STATE_HARD) + if(pp.sheath_type != SHEATH_TYPE_NONE && pp.erect_state < 1) //Do they have a sheath type and is the state bigger than 1? switch(pp.sheath_type) if(SHEATH_TYPE_NORMAL) if(pp.erect_state == ERECT_STATE_NONE) @@ -21,10 +21,21 @@ return "slit_1" else return "slit_2" + if(pp.erect_state == ERECT_STATE_HARD) - return "[icon_state]_[min(3,pp.penis_size+1)]" + return "[icon_state]_[max(1, min(5, pp.penis_size))]_1" + if(pp.erect_state == ERECT_STATE_STIFF) + return "[icon_state]_[max(1, min(5, pp.penis_size))]_0" + if(pp.erect_state == ERECT_STATE_PARTIAL) // Not revealed if they have a sheath, see above. + return "[icon_state]_[max(1, min(5, pp.penis_size-1))]_0" + + //Normal penis check for those without a sheath, just hang flaccid with -1 size. + else if(pp.sheath_type == SHEATH_TYPE_NONE && pp.erect_state == ERECT_STATE_NONE) + return "[icon_state]_[max(1, min(5, pp.penis_size-1))]_0" + + //Penis should no longer be aroused, and is hidden, transitions with sheath states as well. else - return "[icon_state]_[pp.penis_size]" + return "blank" /datum/sprite_accessory/penis/is_visible(obj/item/organ/organ, obj/item/bodypart/bodypart, mob/living/carbon/owner) if(owner.underwear) @@ -113,7 +124,7 @@ /datum/sprite_accessory/breasts icon = 'icons/mob/sprite_accessory/genitals/breasts.dmi' color_key_name = "Breasts" - relevant_layers = list(BODY_ADJ_LAYER) + relevant_layers = list(BODY_BEHIND_LAYER, BODY_FRONTEST_LAYER) /datum/sprite_accessory/breasts/get_icon_state(obj/item/organ/organ, obj/item/bodypart/bodypart, mob/living/carbon/owner) var/obj/item/organ/breasts/badonkers = organ @@ -188,14 +199,13 @@ /datum/sprite_accessory/belly icon = 'icons/mob/sprite_accessory/genitals/belly.dmi' color_key_name = "Belly" - relevant_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER) /datum/sprite_accessory/belly/get_icon_state(obj/item/organ/organ, obj/item/bodypart/bodypart, mob/living/carbon/owner) var/obj/item/organ/belly/belleh = organ return "belly_[icon_state]_[belleh.belly_size]" /datum/sprite_accessory/belly/adjust_appearance_list(list/appearance_list, obj/item/organ/organ, obj/item/bodypart/bodypart, mob/living/carbon/owner) - generic_gender_feature_adjust(appearance_list, organ, bodypart, owner, OFFSET_SHIRT, OFFSET_SHIRT_F) + generic_gender_feature_adjust(appearance_list, organ, bodypart, owner, OFFSET_BELT, OFFSET_BELT_F) /datum/sprite_accessory/belly/is_visible(obj/item/organ/organ, obj/item/bodypart/bodypart, mob/living/carbon/owner) return is_human_part_visible(owner, HIDEBOOB|HIDEJUMPSUIT) @@ -204,6 +214,7 @@ icon_state = "pair" name = "Belly" color_key_defaults = list(KEY_CHEST_COLOR) + relevant_layers = list(BODY_BEHIND_LAYER, BODY_FRONTER_LAYER) /datum/sprite_accessory/butt icon = 'icons/mob/sprite_accessory/genitals/butt.dmi' diff --git a/code/modules/mob/living/carbon/human/species_types/furry/anthromorphsmall.dm b/code/modules/mob/living/carbon/human/species_types/furry/anthromorphsmall.dm index 9ec566f7..8822aa36 100644 --- a/code/modules/mob/living/carbon/human/species_types/furry/anthromorphsmall.dm +++ b/code/modules/mob/living/carbon/human/species_types/furry/anthromorphsmall.dm @@ -34,7 +34,7 @@ OFFSET_SHIRT = list(0,0), OFFSET_ARMOR = list(0,0), OFFSET_HANDS = list(0,-3), OFFSET_UNDIES = list(0,-4), \ OFFSET_ID_F = list(0,-5), OFFSET_GLOVES_F = list(0,-4), OFFSET_WRISTS_F = list(0,-4), OFFSET_HANDS_F = list(0,-4), \ OFFSET_CLOAK_F = list(0,0), OFFSET_FACEMASK_F = list(0,-5), OFFSET_HEAD_F = list(0,-5), \ - OFFSET_FACE_F = list(0,-5), OFFSET_BELT_F = list(0,-4), OFFSET_BACK_F = list(0,-5), \ + OFFSET_FACE_F = list(0,-5), OFFSET_BELT_F = list(0,-4), OFFSET_BUTT = list(0,-4), OFFSET_BACK_F = list(0,-5), \ OFFSET_NECK_F = list(0,-5), OFFSET_MOUTH_F = list(0,-5), OFFSET_PANTS_F = list(0,0), \ OFFSET_SHIRT_F = list(0,0), OFFSET_ARMOR_F = list(0,0), OFFSET_UNDIES_F = list(0,-4), \ ) diff --git a/code/modules/mob/living/carbon/human/species_types/furry/kobold.dm b/code/modules/mob/living/carbon/human/species_types/furry/kobold.dm index c4c3eb86..8dd03b77 100644 --- a/code/modules/mob/living/carbon/human/species_types/furry/kobold.dm +++ b/code/modules/mob/living/carbon/human/species_types/furry/kobold.dm @@ -20,14 +20,14 @@ custom_clothes = TRUE clothes_id = "dwarf" offset_features = list( - OFFSET_ID = list(0,0), OFFSET_GLOVES = list(0,-3), OFFSET_WRISTS = list(0,-3),\ + OFFSET_ID = list(0,-4), OFFSET_GLOVES = list(0,-3), OFFSET_WRISTS = list(0,-3),\ OFFSET_CLOAK = list(0,0), OFFSET_FACEMASK = list(0,-4), OFFSET_HEAD = list(0,-4), \ OFFSET_FACE = list(0,-4), OFFSET_BELT = list(0,-4), OFFSET_BACK = list(0,-3), \ OFFSET_NECK = list(0,-4), OFFSET_MOUTH = list(0,-4), OFFSET_PANTS = list(0,0), \ OFFSET_SHIRT = list(0,0), OFFSET_ARMOR = list(0,0), OFFSET_HANDS = list(0,-3), \ - OFFSET_ID_F = list(0,-4), OFFSET_GLOVES_F = list(0,-4), OFFSET_WRISTS_F = list(0,-4), OFFSET_HANDS_F = list(0,-4), \ + OFFSET_ID_F = list(0,-5), OFFSET_GLOVES_F = list(0,-4), OFFSET_WRISTS_F = list(0,-4), OFFSET_HANDS_F = list(0,-4), \ OFFSET_CLOAK_F = list(0,0), OFFSET_FACEMASK_F = list(0,-5), OFFSET_HEAD_F = list(0,-5), \ - OFFSET_FACE_F = list(0,-5), OFFSET_BELT_F = list(0,-4), OFFSET_BACK_F = list(0,-4), \ + OFFSET_FACE_F = list(0,-5), OFFSET_BELT_F = list(0,-4), OFFSET_BUTT = list(0,-4), OFFSET_BACK_F = list(0,-4), \ OFFSET_NECK_F = list(0,-5), OFFSET_MOUTH_F = list(0,-5), OFFSET_PANTS_F = list(0,0), \ OFFSET_SHIRT_F = list(0,0), OFFSET_ARMOR_F = list(0,0), OFFSET_UNDIES = list(0,-4), OFFSET_UNDIES_F = list(0,-4), \ ) diff --git a/code/modules/mob/living/carbon/human/species_types/roguetown/dwarf/dwarfm.dm b/code/modules/mob/living/carbon/human/species_types/roguetown/dwarf/dwarfm.dm index f524a8ee..90625047 100644 --- a/code/modules/mob/living/carbon/human/species_types/roguetown/dwarf/dwarfm.dm +++ b/code/modules/mob/living/carbon/human/species_types/roguetown/dwarf/dwarfm.dm @@ -48,7 +48,7 @@ OFFSET_SHIRT = list(0,0), OFFSET_ARMOR = list(0,0), OFFSET_HANDS = list(0,-3), \ OFFSET_ID_F = list(0,-4), OFFSET_GLOVES_F = list(0,-4), OFFSET_WRISTS_F = list(0,-4), OFFSET_HANDS_F = list(0,-4), \ OFFSET_CLOAK_F = list(0,0), OFFSET_FACEMASK_F = list(0,-5), OFFSET_HEAD_F = list(0,-5), \ - OFFSET_FACE_F = list(0,-5), OFFSET_BELT_F = list(0,-5), OFFSET_BACK_F = list(0,-5), \ + OFFSET_FACE_F = list(0,-5), OFFSET_BELT_F = list(0,-5), OFFSET_BUTT = list(0,-4), OFFSET_BACK_F = list(0,-5), \ OFFSET_NECK_F = list(0,-5), OFFSET_MOUTH_F = list(0,-5), OFFSET_PANTS_F = list(0,0), \ OFFSET_SHIRT_F = list(0,0), OFFSET_ARMOR_F = list(0,0), OFFSET_UNDIES = list(0,-4), OFFSET_UNDIES_F = list(0,-4), \ ) diff --git a/code/modules/mob/living/carbon/human/species_types/roguetown/goblin/goblinp.dm b/code/modules/mob/living/carbon/human/species_types/roguetown/goblin/goblinp.dm index 03ed3d34..1ae016a4 100644 --- a/code/modules/mob/living/carbon/human/species_types/roguetown/goblin/goblinp.dm +++ b/code/modules/mob/living/carbon/human/species_types/roguetown/goblin/goblinp.dm @@ -9,7 +9,7 @@ mindless, enthralled waves of the creatures to attack civilization from lunar portals. It leaves the typical goblinoid to cloister in their hidden away tribes, stealing \ from the scraps out of fear of reprisal while shooing away outsiders. The cities of Man typically shun them, but it's not unheard of to see one pushing their luck in a \ town square or out on a well-traveled road, as even the most backwater peasant can tell the difference between a sapient one and portal-spawn. Usually.
\ - (+1 Speed)" + (+1 Speed)" species_traits = list(EYECOLOR,LIPS,STUBBLE) possible_ages = ALL_AGES_LIST use_skintones = TRUE @@ -46,7 +46,7 @@ OFFSET_SHIRT = list(0,0), OFFSET_ARMOR = list(0,0), OFFSET_HANDS = list(0,-3), OFFSET_UNDIES = list(0,-4), \ OFFSET_ID_F = list(0,-5), OFFSET_GLOVES_F = list(0,-4), OFFSET_WRISTS_F = list(0,-4), OFFSET_HANDS_F = list(0,-4), \ OFFSET_CLOAK_F = list(0,0), OFFSET_FACEMASK_F = list(0,-5), OFFSET_HEAD_F = list(0,-5), \ - OFFSET_FACE_F = list(0,-5), OFFSET_BELT_F = list(0,-4), OFFSET_BACK_F = list(0,-5), \ + OFFSET_FACE_F = list(0,-5), OFFSET_BELT_F = list(0,-4), OFFSET_BUTT = list(0,-4), OFFSET_BACK_F = list(0,-5), \ OFFSET_NECK_F = list(0,-5), OFFSET_MOUTH_F = list(0,-5), OFFSET_PANTS_F = list(0,0), \ OFFSET_SHIRT_F = list(0,0), OFFSET_ARMOR_F = list(0,0), OFFSET_UNDIES_F = list(0,-4), \ ) diff --git a/code/modules/surgery/organs/feature_organs/genitals.dm b/code/modules/surgery/organs/feature_organs/genitals.dm index f5f5f77c..400eba9b 100644 --- a/code/modules/surgery/organs/feature_organs/genitals.dm +++ b/code/modules/surgery/organs/feature_organs/genitals.dm @@ -25,6 +25,8 @@ else if(human.sexcon.arousal > 20) new_state = ERECT_STATE_HARD else if(human.sexcon.arousal > 10) + new_state = ERECT_STATE_STIFF + else if(human.sexcon.arousal > 0 && human.sexcon.arousal <= 10) //Shows the sheathe sprites below this threshold. new_state = ERECT_STATE_PARTIAL else new_state = ERECT_STATE_NONE @@ -81,7 +83,7 @@ penis_type = PENIS_TYPE_TENTACLE sheath_type = SHEATH_TYPE_NONE - + /obj/item/organ/vagina name = "vagina" icon_state = "vagina" diff --git a/icons/mob/sprite_accessory/genitals/breasts.dmi b/icons/mob/sprite_accessory/genitals/breasts.dmi index 4d1261602f04fdc239ebf3f6f3726584b0649329..3adba876713dad5140db1ae5193e0d60561ba6af 100644 GIT binary patch literal 10298 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 literal 8597 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℘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 diff --git a/icons/mob/sprite_accessory/genitals/pintle.dmi b/icons/mob/sprite_accessory/genitals/pintle.dmi index dcbe9e6352246d4fbdb8a414d44fac0e5f8fb38f..7bab2c9444377c726e2db1bc0124ed21dd4cf890 100644 GIT binary patch literal 9298 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 From 92a6f70cb99903ebeb3c3ab75ad313d5394fc162 Mon Sep 17 00:00:00 2001 From: granodd Date: Sat, 6 Sep 2025 22:08:45 -0400 Subject: [PATCH 37/66] allows ghosts to use LOOC previously they couldn't which made communicating after "certain events" very difficult --- modular_hearthstone/code/interface/LOOC.dm | 23 +++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/modular_hearthstone/code/interface/LOOC.dm b/modular_hearthstone/code/interface/LOOC.dm index 9f7842b2..3458a45b 100644 --- a/modular_hearthstone/code/interface/LOOC.dm +++ b/modular_hearthstone/code/interface/LOOC.dm @@ -42,9 +42,10 @@ to_chat(src, span_danger("I cannot use LOOC (perma muted).")) return - if(isobserver(mob)) + // Cove edit + /*if(isobserver(mob)) to_chat(src, span_danger("I cannot use LOOC while dead.")) - return + return*/ if(!mob) return @@ -87,15 +88,15 @@ if((C in GLOB.admins) && (C.prefs.chat_toggles & CHAT_ADMINLOOC)) added_text += " ([mob.ckey]) \[MUTE\]" is_admin = 1 - else if(isobserver(M)) - continue + /*else if(isobserver(M)) + continue*/ mobs += C if(C.prefs.chat_toggles & CHAT_OOC) - if(istype(usr,/mob/living)) - var/turf/speakturf = get_turf(M) - var/turf/sourceturf = get_turf(usr) - if(is_admin == 1 || (wp == 1 && (M in range (7, src)))) - to_chat(C, "[prefix]: [src.mob.name][added_text]: [msg]") - else if(speakturf in get_hear(7, sourceturf)) - to_chat(C, "[prefix]: [src.mob.name][added_text]: [msg]") + //if(istype(usr,/mob/living)) + var/turf/speakturf = get_turf(M) + var/turf/sourceturf = get_turf(usr) + if(is_admin == 1 || (wp == 1 && (M in range (7, src)))) + to_chat(C, "[prefix]: [src.mob.name][added_text]: [msg]") + else if(speakturf in get_hear(7, sourceturf)) + to_chat(C, "[prefix]: [src.mob.name][added_text]: [msg]") From f85325bb18b80b075770ff5858c8a4afc0b41dc7 Mon Sep 17 00:00:00 2001 From: LDip999 Date: Sun, 7 Sep 2025 10:10:59 +0200 Subject: [PATCH 38/66] Fixes reform portals --- modular_causticcove/code/modules/vore/eating/belly_obj.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modular_causticcove/code/modules/vore/eating/belly_obj.dm b/modular_causticcove/code/modules/vore/eating/belly_obj.dm index 0297a09b..9cb5910e 100644 --- a/modular_causticcove/code/modules/vore/eating/belly_obj.dm +++ b/modular_causticcove/code/modules/vore/eating/belly_obj.dm @@ -511,7 +511,7 @@ // Delete the digested mob release_specific_contents_digest(M) - var/mob/dead/observer/G = M.ghostize(FALSE) + var/mob/dead/observer/G = M.ghostize(TRUE) if(G) G.forceMove(owner) M.x = 1 From b512bed2b7f15ad5ec8488e51f887b81e81781ce Mon Sep 17 00:00:00 2001 From: LDip999 Date: Sun, 7 Sep 2025 12:50:48 +0200 Subject: [PATCH 39/66] Picking peeps up, and eating them from hand --- code/modules/mob/living/carbon/human/human.dm | 9 +- .../micromacrointeractions/helperfunctions.dm | 24 ++++++ .../micromacrointeractions/microholder.dm | 83 +++++++++++++++++++ .../modules/micromacrointeractions/scoop.dm | 11 +++ .../code/modules/vore/eating/living.dm | 12 ++- roguetown.dme | 7 +- 6 files changed, 140 insertions(+), 6 deletions(-) create mode 100644 modular_causticcove/code/modules/micromacrointeractions/helperfunctions.dm create mode 100644 modular_causticcove/code/modules/micromacrointeractions/microholder.dm create mode 100644 modular_causticcove/code/modules/micromacrointeractions/scoop.dm diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 2833cd89..66fa0aaf 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -713,7 +713,14 @@ if(ismob(user.pulling)) user.vore_attack(user, target, src) // User, Pulled, Predator target (which can be user, pulling, or src) return TRUE - //If they dragged themselves and we're currently aggressively grabbing them try to piggyback (not on cmode) + //Pick them up. Pick. Them. Up. + if(ishuman(target) && ishuman(user)) + var/mob/living/carbon/human/userhuman = user + var/mob/living/carbon/human/targethuman = target + if(targethuman.small_enough(userhuman) && user.grab_state) + if(targethuman.attempt_scoop(userhuman)) + return TRUE + //If they dragged themselves and we're currently aggressively grabbing them try to piggyback (not on cmode) if(user == target && can_piggyback(target)) if(HAS_TRAIT(src, TRAIT_MICRO)) to_chat(target, span_warning("[src] is too small!")) diff --git a/modular_causticcove/code/modules/micromacrointeractions/helperfunctions.dm b/modular_causticcove/code/modules/micromacrointeractions/helperfunctions.dm new file mode 100644 index 00000000..08bdbbd4 --- /dev/null +++ b/modular_causticcove/code/modules/micromacrointeractions/helperfunctions.dm @@ -0,0 +1,24 @@ +/mob/living/carbon/human/proc/can_be_picked_up(mob/living/carbon/human/other) + //TODO consentual before sensual + return TRUE + +/mob/living/carbon/human/proc/get_size() + if(HAS_TRAIT(src, TRAIT_MICRO)) + return 1 + //TODO: Someone is going to put a size between micro and normal, that one will go here with the num 2 + if(HAS_TRAIT(src, TRAIT_MACRO) || HAS_TRAIT(src, TRAIT_BIGGUY)) + var/beeg = 0 + if(HAS_TRAIT(src, TRAIT_MACRO)) + beeg = 5 + if(HAS_TRAIT(src,TRAIT_BIGGUY)) + beeg += 4 + return beeg + else + return 3 + + +/mob/living/carbon/human/proc/small_enough(mob/living/carbon/human/other) + var/othersize = other.get_size() + if(get_size() + 2 <= othersize) + return TRUE + return FALSE diff --git a/modular_causticcove/code/modules/micromacrointeractions/microholder.dm b/modular_causticcove/code/modules/micromacrointeractions/microholder.dm new file mode 100644 index 00000000..de34aec3 --- /dev/null +++ b/modular_causticcove/code/modules/micromacrointeractions/microholder.dm @@ -0,0 +1,83 @@ +/obj/item/micro + name = "micro" + desc = "A person? A toy? A snack? All three! They fit into your hand, how convinient!" + var/mob/living/held_mob + var/matrix/original_transform + var/original_vis_flags = NONE + +/obj/item/micro/Initialize(mapload, mob/held) + . = ..() + held.forceMove(src) + START_PROCESSING(SSobj, src) + +/obj/item/micro/examine(mob/user) + . = list() + for(var/mob/living/M in contents) + . += M.examine(user) + +/obj/item/micro/dropped(mob/user, silent) + if (held_mob?.loc != src || isturf(loc)) + var/held = held_mob + dump_mob() + held_mob = held + . = ..() + +/obj/item/micro/proc/dump_mob() + if(!held_mob) + return + if (held_mob.loc == src || isnull(held_mob.loc)) + held_mob.transform = original_transform + held_mob.update_transform() + held_mob.forceMove(get_turf(src)) + held_mob = null + +/obj/item/micro/process() + if(held_mob?.loc != src || isturf(loc)) + qdel(src) + +/obj/item/micro/Destroy() + STOP_PROCESSING(SSobj, src) + if(held_mob) + dump_mob() + if(ismob(loc)) + var/mob/M = loc + M.dropItemToGround(src, get_turf(src)) + return ..() + +/obj/item/micro/container_resist(mob/living/held) + if(ismob(loc)) + var/mob/M = loc + M.dropItemToGround(src) + to_chat(M, span_warning("\The [held] wriggles out of your grip!")) + to_chat(held, span_warning("You wiggle out of [M]'s grip!")) + else if(isitem(loc)) + var/obj/item/I = loc + to_chat(held, span_warning("You struggle free of [loc].")) + forceMove(get_turf(src)) + +/obj/item/micro/Entered(mob/held, atom/OldLoc) + . = ..() + held_mob = held + original_vis_flags = held.vis_flags + held.vis_flags = VIS_INHERIT_ID|VIS_INHERIT_LAYER|VIS_INHERIT_PLANE + vis_contents += held + name = held.name + original_transform = held.transform + held.transform = null + held.transform *= 0.7 + + +/obj/item/micro/MouseDrop(mob/living/M) + ..() + if(isliving(usr)) + var/mob/living/livingusr = usr + if(!Adjacent(usr)) + return + if(M.voremode) + if(Adjacent(M)) + livingusr.vore_attack(livingusr, held_mob, M) + else + to_chat(livingusr,span_notice(M + " is too far!")) + else + for(var/mob/living/carbon/human/O in contents) + O.show_inv(livingusr) \ No newline at end of file diff --git a/modular_causticcove/code/modules/micromacrointeractions/scoop.dm b/modular_causticcove/code/modules/micromacrointeractions/scoop.dm new file mode 100644 index 00000000..b3a74ae6 --- /dev/null +++ b/modular_causticcove/code/modules/micromacrointeractions/scoop.dm @@ -0,0 +1,11 @@ +/mob/living/carbon/human/proc/attempt_scoop(mob/living/carbon/human/grabby) + if(!small_enough(grabby)) + return FALSE + if(!can_be_picked_up(grabby)) + return FALSE + var/obj/item/micro/friend = new /obj/item/micro(get_turf(grabby), src) + grabby.put_in_hands(friend) + to_chat(grabby, span_notice("You scoop up \the [src]!")) + to_chat(src, span_notice("\The [grabby] scoops you up!")) + return friend + diff --git a/modular_causticcove/code/modules/vore/eating/living.dm b/modular_causticcove/code/modules/vore/eating/living.dm index 99b49073..4419604c 100644 --- a/modular_causticcove/code/modules/vore/eating/living.dm +++ b/modular_causticcove/code/modules/vore/eating/living.dm @@ -113,7 +113,7 @@ attempt_msg = text("[] is attempting to make [] [] [] into their []!",user,pred,lowertext(belly.vore_verb),prey,lowertext(belly.name)) success_msg = text("[] manages to make [] [] [] into their []!",user,pred,lowertext(belly.vore_verb),prey,lowertext(belly.name)) - if(!prey.Adjacent(user)) // let's not even bother attempting it yet if they aren't next to us. + if(!prey.Adjacent(user) && (get_turf(prey) != get_turf(user))) // let's not even bother attempting it yet if they aren't next to us. return FALSE // Announce that we start the attempt! @@ -129,8 +129,14 @@ //Timer and progress bar if(!do_after(user, swallow_time, TRUE, prey)) return FALSE // Prey escaped (or user disabled) before timer expired. - - if(!prey.Adjacent(user)) //double check'd just in case they moved during the timer and the do_mob didn't fail for whatever reason + + //double check'd just in case they moved during the timer and the do_mob didn't fail for whatever reason + var/turf/preyturf = get_turf(prey) + var/turf/feederturf = get_turf(user) + var/adj = prey.Adjacent(user) + var/sameturf = preyturf == feederturf + + if(!adj && !sameturf) // let's not even bother attempting it yet if they aren't next to us. return FALSE // If we got this far, nom successful! Announce it! diff --git a/roguetown.dme b/roguetown.dme index 38333cad..423a217a 100644 --- a/roguetown.dme +++ b/roguetown.dme @@ -2463,6 +2463,11 @@ #include "modular_azurepeak\virtues\size.dm" #include "modular_azurepeak\virtues\thief.dm" #include "modular_azurepeak\virtues\utility.dm" +#include "modular_causticcove\code\modules\clothing\rogueclothes\armor.dm" +#include "modular_causticcove\code\modules\micromacrointeractions\helperfunctions.dm" +#include "modular_causticcove\code\modules\micromacrointeractions\microholder.dm" +#include "modular_causticcove\code\modules\micromacrointeractions\scoop.dm" +#include "modular_causticcove\code\modules\roguetown\roguecrafting\sewing.dm" #include "modular_causticcove\code\modules\vore\persistence.dm" #include "modular_causticcove\code\modules\vore\SSbellies.dm" #include "modular_causticcove\code\modules\vore\eating\belly_dat_vr.dm" @@ -2484,6 +2489,4 @@ #include "modular_hearthstone\code\modules\mob\living\simple_animal\rogue\orc.dm" #include "modular_hearthstone\code\modules\mob\living\simple_animal\rogue\rogue_corpse.dm" #include "modular_hearthstone\code\modules\reagents\reagent_containers\lux.dm" -#include "modular_causticcove\code\modules\clothing\rogueclothes\armor.dm" -#include "modular_causticcove\code\modules\roguetown\roguecrafting\sewing.dm" // END_INCLUDE From 8cda9e1701a1fdc5ebb8485f2e15e174f3963da5 Mon Sep 17 00:00:00 2001 From: LDip999 Date: Sun, 7 Sep 2025 13:24:47 +0200 Subject: [PATCH 40/66] Pref testing --- code/modules/client/preferences.dm | 5 ++++- code/modules/client/preferences_savefile.dm | 3 ++- .../code/modules/micromacrointeractions/helperfunctions.dm | 3 +++ .../code/modules/micromacrointeractions/microholder.dm | 1 - .../code/modules/micromacrointeractions/prefs.dm | 2 ++ roguetown.dme | 1 + 6 files changed, 12 insertions(+), 3 deletions(-) create mode 100644 modular_causticcove/code/modules/micromacrointeractions/prefs.dm diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 9c7b7ec3..4d3a5ae3 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -393,7 +393,7 @@ GLOBAL_LIST_EMPTY(chosen_names) dat += "Patron: [selected_patron?.name || "FUCK!"]
" // dat += "Family: Unknown
" // Disabling until its working dat += "Dominance: [domhand == 1 ? "Left-handed" : "Right-handed"]
" - + dat += "Pickup able: [pickupable ? "Yes" : "No"]
" /* dat += "

Special Names:
" var/old_group @@ -2341,6 +2341,9 @@ Slots: [job.spawn_positions] [job.round_contrib_points ? "RCP: +[job.round_contr else to_chat(user, span_warning("You are no longer a voice.")) + if("pickupable") + pickupable = !pickupable + if("migrants") migrant.show_ui() return diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 9f5fc1d9..ec6ea239 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -452,6 +452,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["highlight_color"] >> highlight_color S["taur_type"] >> taur_type S["taur_color"] >> taur_color + S["pickupable"] >> pickupable /datum/preferences/proc/load_character(slot) if(!path) @@ -672,7 +673,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["highlight_color"] , highlight_color) WRITE_FILE(S["taur_type"] , taur_type) WRITE_FILE(S["taur_color"] , taur_color) - + WRITE_FILE(S["pickupable"] , pickupable) //Custom names for(var/custom_name_id in GLOB.preferences_custom_names) var/savefile_slot_name = custom_name_id + "_name" //TODO remove this diff --git a/modular_causticcove/code/modules/micromacrointeractions/helperfunctions.dm b/modular_causticcove/code/modules/micromacrointeractions/helperfunctions.dm index 08bdbbd4..a45c1330 100644 --- a/modular_causticcove/code/modules/micromacrointeractions/helperfunctions.dm +++ b/modular_causticcove/code/modules/micromacrointeractions/helperfunctions.dm @@ -1,5 +1,8 @@ /mob/living/carbon/human/proc/can_be_picked_up(mob/living/carbon/human/other) //TODO consentual before sensual + if(client) + if(!client.prefs.pickupable) + return FALSE return TRUE /mob/living/carbon/human/proc/get_size() diff --git a/modular_causticcove/code/modules/micromacrointeractions/microholder.dm b/modular_causticcove/code/modules/micromacrointeractions/microholder.dm index de34aec3..e287a7b5 100644 --- a/modular_causticcove/code/modules/micromacrointeractions/microholder.dm +++ b/modular_causticcove/code/modules/micromacrointeractions/microholder.dm @@ -51,7 +51,6 @@ to_chat(M, span_warning("\The [held] wriggles out of your grip!")) to_chat(held, span_warning("You wiggle out of [M]'s grip!")) else if(isitem(loc)) - var/obj/item/I = loc to_chat(held, span_warning("You struggle free of [loc].")) forceMove(get_turf(src)) diff --git a/modular_causticcove/code/modules/micromacrointeractions/prefs.dm b/modular_causticcove/code/modules/micromacrointeractions/prefs.dm new file mode 100644 index 00000000..90cea226 --- /dev/null +++ b/modular_causticcove/code/modules/micromacrointeractions/prefs.dm @@ -0,0 +1,2 @@ +/datum/preferences + var/pickupable = TRUE diff --git a/roguetown.dme b/roguetown.dme index 423a217a..9c805331 100644 --- a/roguetown.dme +++ b/roguetown.dme @@ -2466,6 +2466,7 @@ #include "modular_causticcove\code\modules\clothing\rogueclothes\armor.dm" #include "modular_causticcove\code\modules\micromacrointeractions\helperfunctions.dm" #include "modular_causticcove\code\modules\micromacrointeractions\microholder.dm" +#include "modular_causticcove\code\modules\micromacrointeractions\prefs.dm" #include "modular_causticcove\code\modules\micromacrointeractions\scoop.dm" #include "modular_causticcove\code\modules\roguetown\roguecrafting\sewing.dm" #include "modular_causticcove\code\modules\vore\persistence.dm" From 16b84369fcaf25840d51f036e16a90f8c507ace8 Mon Sep 17 00:00:00 2001 From: LDip999 Date: Sun, 7 Sep 2025 16:39:34 +0200 Subject: [PATCH 41/66] bug fix --- .../code/modules/micromacrointeractions/microholder.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/modular_causticcove/code/modules/micromacrointeractions/microholder.dm b/modular_causticcove/code/modules/micromacrointeractions/microholder.dm index e287a7b5..21020f31 100644 --- a/modular_causticcove/code/modules/micromacrointeractions/microholder.dm +++ b/modular_causticcove/code/modules/micromacrointeractions/microholder.dm @@ -65,6 +65,10 @@ held.transform = null held.transform *= 0.7 +/obj/item/micro/Exited(mob/held, atom/newLoc) + held_mob.transform = original_transform + held_mob.update_transform() + held_mob = null /obj/item/micro/MouseDrop(mob/living/M) ..() From be50d952934d847d88d3f270e17d02440fa01605 Mon Sep 17 00:00:00 2001 From: LDip999 Date: Sun, 7 Sep 2025 18:39:42 +0200 Subject: [PATCH 42/66] Bugfix for double sprites and getting qdeleted when drop-equipping something --- .../micromacrointeractions/microholder.dm | 29 +++++++++++-------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/modular_causticcove/code/modules/micromacrointeractions/microholder.dm b/modular_causticcove/code/modules/micromacrointeractions/microholder.dm index 21020f31..24eb7347 100644 --- a/modular_causticcove/code/modules/micromacrointeractions/microholder.dm +++ b/modular_causticcove/code/modules/micromacrointeractions/microholder.dm @@ -30,6 +30,7 @@ held_mob.update_transform() held_mob.forceMove(get_turf(src)) held_mob = null + process() /obj/item/micro/process() if(held_mob?.loc != src || isturf(loc)) @@ -53,22 +54,26 @@ else if(isitem(loc)) to_chat(held, span_warning("You struggle free of [loc].")) forceMove(get_turf(src)) + + process() /obj/item/micro/Entered(mob/held, atom/OldLoc) . = ..() - held_mob = held - original_vis_flags = held.vis_flags - held.vis_flags = VIS_INHERIT_ID|VIS_INHERIT_LAYER|VIS_INHERIT_PLANE - vis_contents += held - name = held.name - original_transform = held.transform - held.transform = null - held.transform *= 0.7 + if(ismob(held)) + held_mob = held + original_vis_flags = held.vis_flags + held.vis_flags = VIS_INHERIT_ID|VIS_INHERIT_LAYER|VIS_INHERIT_PLANE + vis_contents += held + name = held.name + original_transform = held.transform + held.transform = null + held.transform *= 0.7 /obj/item/micro/Exited(mob/held, atom/newLoc) - held_mob.transform = original_transform - held_mob.update_transform() - held_mob = null + if(held == held_mob) + held_mob.transform = original_transform + held_mob.update_transform() + held_mob = null /obj/item/micro/MouseDrop(mob/living/M) ..() @@ -83,4 +88,4 @@ to_chat(livingusr,span_notice(M + " is too far!")) else for(var/mob/living/carbon/human/O in contents) - O.show_inv(livingusr) \ No newline at end of file + O.show_inv(livingusr) From b44a63aea6b1f866f6983e4280c77ef2d17df5f4 Mon Sep 17 00:00:00 2001 From: LDip999 Date: Sun, 7 Sep 2025 19:01:14 +0200 Subject: [PATCH 43/66] NPCs resist out of being micro grabbed --- code/modules/mob/living/carbon/human/npc/_npc.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/mob/living/carbon/human/npc/_npc.dm b/code/modules/mob/living/carbon/human/npc/_npc.dm index 6912a05d..af5e4cb3 100644 --- a/code/modules/mob/living/carbon/human/npc/_npc.dm +++ b/code/modules/mob/living/carbon/human/npc/_npc.dm @@ -75,6 +75,8 @@ ignore_grab ||= TRUE if(on_fire || buckled || restrained(ignore_grab = ignore_grab)) return TRUE + if(istype(loc,/obj/item/micro)) + return TRUE return FALSE /mob/living/carbon/human/proc/process_ai() From 08f3210fa4c225a18345b3b7ff80c1819034b253 Mon Sep 17 00:00:00 2001 From: LDip999 Date: Sun, 7 Sep 2025 19:13:28 +0200 Subject: [PATCH 44/66] Skill check --- .../micromacrointeractions/microholder.dm | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/modular_causticcove/code/modules/micromacrointeractions/microholder.dm b/modular_causticcove/code/modules/micromacrointeractions/microholder.dm index 24eb7347..2414cd08 100644 --- a/modular_causticcove/code/modules/micromacrointeractions/microholder.dm +++ b/modular_causticcove/code/modules/micromacrointeractions/microholder.dm @@ -48,9 +48,23 @@ /obj/item/micro/container_resist(mob/living/held) if(ismob(loc)) var/mob/M = loc - M.dropItemToGround(src) - to_chat(M, span_warning("\The [held] wriggles out of your grip!")) - to_chat(held, span_warning("You wiggle out of [M]'s grip!")) + var/wrestling_diff = 0 + var/resist_chance = 55 + var/combat_modifier = 0.45 // -30 and -25 from being in combat mode diff and aggro grab, apply those immidietly + if(held_mob.mind) + wrestling_diff += (held_mob.get_skill_level(/datum/skill/combat/wrestling)) //NPCs don't use this + if(M.mind) + wrestling_diff -= (M.get_skill_level(/datum/skill/combat/wrestling)) + resist_chance += max((wrestling_diff * 10), -20) + resist_chance *= combat_modifier + resist_chance = clamp(resist_chance, 5, 95) + if(!prob(resist_chance)) + to_chat(M, span_warning("[held] uselessly wiggles against my grip!")) + to_chat(held, span_warning("You struggle against [M]'s grip!")) + else + M.dropItemToGround(src) + to_chat(M, span_warning("\The [held] wriggles out of your grip!")) + to_chat(held, span_warning("You wiggle out of [M]'s grip!")) else if(isitem(loc)) to_chat(held, span_warning("You struggle free of [loc].")) forceMove(get_turf(src)) From 7dbec1b86728cf03998d0c60a11137df84fa1f0c Mon Sep 17 00:00:00 2001 From: LDip999 Date: Sun, 7 Sep 2025 19:16:26 +0200 Subject: [PATCH 45/66] OOC escape --- modular_causticcove/code/modules/vore/eating/living.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/modular_causticcove/code/modules/vore/eating/living.dm b/modular_causticcove/code/modules/vore/eating/living.dm index 4419604c..0069b176 100644 --- a/modular_causticcove/code/modules/vore/eating/living.dm +++ b/modular_causticcove/code/modules/vore/eating/living.dm @@ -333,7 +333,9 @@ if(isanimal(B.owner)) var/mob/living/simple_animal/SA = B.owner SA.update_icons() - + else if(istype(loc,/obj/item/micro)) + /obj/item/micro/mh = loc + mh.dump_mob() else to_chat(src,"You aren't inside anyone, though, is the thing.") From 36fcb2991abdad00bc64856f2324dc3dffe69657 Mon Sep 17 00:00:00 2001 From: LDip999 Date: Sun, 7 Sep 2025 20:15:44 +0200 Subject: [PATCH 46/66] Size categories --- code/__HELPERS/global_lists.dm | 4 + code/_globalvars/special_traits.dm | 1 + code/modules/client/preferences.dm | 5 +- code/modules/client/preferences_savefile.dm | 6 +- modular_azurepeak/virtues/size.dm | 5 +- .../code/modules/sizecats/prefs.dm | 52 ++++++++ .../code/modules/sizecats/sizecat_types.dm | 47 +++++++ .../code/modules/sizecats/sizecats.dm | 120 ++++++++++++++++++ roguetown.dme | 7 +- 9 files changed, 242 insertions(+), 5 deletions(-) create mode 100644 modular_causticcove/code/modules/sizecats/prefs.dm create mode 100644 modular_causticcove/code/modules/sizecats/sizecat_types.dm create mode 100644 modular_causticcove/code/modules/sizecats/sizecats.dm diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 2c2ed618..bfc21fa7 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -63,6 +63,10 @@ var/datum/virtue/virtue = new path() GLOB.virtues[path] = virtue + for (var/path in subtypesof(/datum/sizecat)) + var/datum/sizecat/sc = new path() + GLOB.sizecats[path] = sc + // Loadout items for (var/path in subtypesof(/datum/loadout_item)) var/datum/loadout_item/loadout_item = new path() diff --git a/code/_globalvars/special_traits.dm b/code/_globalvars/special_traits.dm index 55cda97c..2d6abe2e 100644 --- a/code/_globalvars/special_traits.dm +++ b/code/_globalvars/special_traits.dm @@ -37,6 +37,7 @@ GLOBAL_LIST_INIT(special_traits, build_special_traits()) apply_charflaw_equipment(character, player) apply_prefs_special(character, player) apply_prefs_virtue(character, player) + apply_prefs_sizecat(character,player) if(player.prefs.loadout) character.mind.special_items[player.prefs.loadout::name] += player.prefs.loadout.path if(player.prefs.loadout2) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 9c7b7ec3..7ecc75d0 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -393,6 +393,8 @@ GLOBAL_LIST_EMPTY(chosen_names) dat += "Patron: [selected_patron?.name || "FUCK!"]
" // dat += "Family: Unknown
" // Disabling until its working dat += "Dominance: [domhand == 1 ? "Left-handed" : "Right-handed"]
" + dat += "Dominance: [domhand == 1 ? "Left-handed" : "Right-handed"]
" + dat += "Size Category: [sizecat]
" /* dat += "

Special Names:
" @@ -1980,7 +1982,8 @@ Slots: [job.spawn_positions] [job.round_contrib_points ? "RCP: +[job.round_contr if(new_body_size) new_body_size = clamp(new_body_size * 0.01, BODY_SIZE_MIN, BODY_SIZE_MAX) features["body_size"] = new_body_size - + if("sizecat") + select_sizecat(user) if("taur_color") var/new_taur_color = color_pick_sanitized(user, "Choose your character's taur color:", "Character Preference", "#"+taur_color) if(new_taur_color) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 9f5fc1d9..1d71f82c 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -479,6 +479,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car _load_virtue(S) _load_flaw(S) + //Caustic edit! + _load_sizecat(S) // LETHALSTONE edit: jank-ass load our statpack choice _load_statpack(S) @@ -737,8 +739,10 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car else WRITE_FILE(S["loadout5"] , null) + //Caustic edits save_vore_prefs(S) - + save_sizecat(S) + //Caustic edits end return TRUE diff --git a/modular_azurepeak/virtues/size.dm b/modular_azurepeak/virtues/size.dm index c2b33845..c4019e4b 100644 --- a/modular_azurepeak/virtues/size.dm +++ b/modular_azurepeak/virtues/size.dm @@ -1,4 +1,6 @@ -/datum/virtue/size/giant +//Caustic edit, we have our own size categories for this instead of virtues + +/*/datum/virtue/size/giant name = "Giant" desc = "I've always been larger, stronger and hardier than the average person. I tend to lumber around a lot, and my immense size can break down frail, wooden doors." added_traits = list(TRAIT_BIGGUY) @@ -41,3 +43,4 @@ recipient.pass_flags = PASSTABLE | PASSMOB recipient.adjust_skillrank(/datum/skill/misc/sneaking, 2, TRUE) recipient.adjust_skillrank(/datum/skill/misc/stealing, 2, TRUE) +*/ diff --git a/modular_causticcove/code/modules/sizecats/prefs.dm b/modular_causticcove/code/modules/sizecats/prefs.dm new file mode 100644 index 00000000..cadf5628 --- /dev/null +++ b/modular_causticcove/code/modules/sizecats/prefs.dm @@ -0,0 +1,52 @@ +/datum/preferences + var/datum/sizecat/sizecat + +/datum/preferences/proc/_load_sizecat(S) + var/datum/sizecat/sc + S["sizecat"] >> sc + if(!sc) + sc = new /datum/sizecat/none + sizecat = sc + +/datum/preferences/proc/save_sizecat(S) + WRITE_FILE(S["sizecat"], sizecat) + +/datum/preferences/proc/select_sizecat(mob/user) + var/list/sizecat_choices = list() + for (var/path as anything in GLOB.sizecats) + var/datum/sizecat/sc = GLOB.sizecats[path] + sizecat_choices[sc.name] = sc + var/result = input(user, "Select a size category", "Caustic Cove") as null|anything in sizecat_choices + if (result) + var/datum/sizecat/sizecatchosen = sizecat_choices[result] + sizecat = sizecatchosen + to_chat(user, process_sizecat_text(sizecatchosen)) + +/datum/preferences/proc/process_sizecat_text(datum/sizecat/V) + var/dat + if(V.desc) + dat += "[span_purple(V.desc)]
" + if(length(V.added_skills)) + dat += "This Virtue adds the following skills:
" + for(var/list/L in V.added_skills) + var/name + if(ispath(L[1],/datum/skill)) + var/datum/skill/S = L[1] + name = initial(S.name) + dat += "["\Roman[L[2]]"] level[L[2] > 1 ? "s" : ""] of [name][L[3] ? ", up to [SSskills.level_names_plain[L[3]]]" : ""]
" + dat += "
" + if(length(V.added_traits)) + dat += "This size category grants the following traits:
" + for(var/TR in V.added_traits) + dat += "[TR] — [GLOB.roguetraits[TR]]
" + dat += "
" + if(length(V.added_stashed_items)) + dat += "This size category adds the following items to your stash:
" + for(var/I in V.added_stashed_items) + dat += "[I]
" + dat += "
" + if(V.custom_text) + dat += "This size category has this special behaviour:
" + dat += "[V.custom_text]" + dat += "
" + return dat \ No newline at end of file diff --git a/modular_causticcove/code/modules/sizecats/sizecat_types.dm b/modular_causticcove/code/modules/sizecats/sizecat_types.dm new file mode 100644 index 00000000..b83f0c22 --- /dev/null +++ b/modular_causticcove/code/modules/sizecats/sizecat_types.dm @@ -0,0 +1,47 @@ +/datum/sizecat/none + name = "None" + desc = "You are extraordinarily ordinary!" + +/datum/sizecat/giant + name = "Giant" + desc = "I've always been larger, stronger and hardier than the average person. I tend to lumber around a lot, and my immense size can break down frail, wooden doors." + added_traits = list(TRAIT_BIGGUY) + custom_text = "Increases your sprite size." + +/datum/sizecat/giant/apply_to_human(mob/living/carbon/human/recipient) + recipient.transform = recipient.transform.Scale(1.25, 1.25) + recipient.transform = recipient.transform.Translate(0, (0.25 * 16)) + recipient.update_transform() + +/datum/sizecat/macro + name = "Macro" + desc = "Somehow, due to a freak accident or magical energies, my form is absolutely colossal. My strength and body are second to none. However, the ground beneath shifts, causing my speed to suffer greatly." + added_traits = list(TRAIT_MACRO) + custom_text = "Greatly increases your sprite size. Makes you very strong and durable but reduces your speed close to, if not to the minimum." + +/datum/sizecat/macro/apply_to_human(mob/living/carbon/human/recipient) + recipient.transform = recipient.transform.Scale(2, 2) + recipient.transform = recipient.transform.Translate(0, (0.25 * 35)) + recipient.update_transform() + recipient.change_stat("strength", 8) + recipient.change_stat("endurance", 8) + recipient.change_stat("constitution", 8) + recipient.change_stat("speed", -14) + +/datum/sizecat/micro + name = "Micro" + desc ="Somehow, due to a freak accident or magical energies, my form is absolutely tiny. My strength and body are lacking. However, my dimutive size allows me to dodge blows that would otherwise hit others." + added_traits = list(TRAIT_MICRO) + custom_text = "Greatly reduces your sprite size. Makes you very agile, but slow. In addition, your stealth will be strengthened greatly. Your strength and durability will be close to, if not the minimum however." + +/datum/sizecat/micro/apply_to_human(mob/living/carbon/human/recipient) + recipient.transform = recipient.transform.Scale(0.2, 0.2) + recipient.transform = recipient.transform.Translate(0, (0.25 * 8)) + recipient.update_transform() + recipient.change_stat("strength", -10) + recipient.change_stat("endurance", -4) + recipient.change_stat("constitution", -10) + recipient.change_stat("speed", -14) + recipient.pass_flags = PASSTABLE | PASSMOB + recipient.adjust_skillrank(/datum/skill/misc/sneaking, 2, TRUE) + recipient.adjust_skillrank(/datum/skill/misc/stealing, 2, TRUE) diff --git a/modular_causticcove/code/modules/sizecats/sizecats.dm b/modular_causticcove/code/modules/sizecats/sizecats.dm new file mode 100644 index 00000000..507c95ae --- /dev/null +++ b/modular_causticcove/code/modules/sizecats/sizecats.dm @@ -0,0 +1,120 @@ +GLOBAL_LIST_EMPTY(sizecats) +#define TRAIT_SIZECAT "SizeCat" +//Code shamelessly stolen from sizecats +/datum/sizecat + /// What the sizecat is called. + var/name + /// A brief, in-character description of what the sizecat does. + var/desc + /// A list containing any traits we need to add to the mob. + var/list/added_traits = list() + /// An associative list containing any skills we want to adjust. You can also pass list objects into this in the following format: list(SKILL_TYPE, SKILL_INCREASE, SKILL_MAXIMUM) as needed. + var/list/added_skills = list() + /// An associative list containing any items we want to add to our stash. + var/list/added_stashed_items = list() + /// A list containing any extra languages we need to add to the mob. + var/list/added_languages = list() + /// An associative list containing any extra stats we need to add to the mob. NOTE: sizecats should GENERALLY NOT add stats unless they impose serious downsides. + var/list/added_stats = list() + /// The cost of the sizecat to apply in TRIUMPH points, if any. + var/triumph_cost = 0 + /// A custom addendum that explains what the sizecat does outside of the traits / skill adjustments. + var/custom_text + + +/datum/sizecat/New() + . = ..() + if (triumph_cost) + desc += "Costs [triumph_cost] TRIUMPH." + +/datum/sizecat/proc/apply_to_human(mob/living/carbon/human/recipient) + return + +/datum/sizecat/proc/handle_traits(mob/living/carbon/human/recipient) + if (!LAZYLEN(added_traits)) + return + for(var/trait in added_traits) + ADD_TRAIT(recipient, trait, TRAIT_SIZECAT) + +/datum/sizecat/proc/handle_skills(mob/living/carbon/human/recipient) + if (!recipient.mind || !LAZYLEN(added_skills)) + return + for(var/skill in added_skills) + if (!islist(skill)) + recipient.adjust_skillrank(skill, added_skills[skill], TRUE) + else + var/list/skill_block = skill + var/datum/skill/the_skill = skill_block[1] + var/increase_by = skill_block[2] + var/maximum_skill = skill_block[3] + var/our_skill = recipient.get_skill_level(the_skill) + if (our_skill < maximum_skill) + if ((our_skill + increase_by) > maximum_skill) // we'll be pushing it higher than our max with 1 addition, so lower increase_by + increase_by = (maximum_skill - our_skill) + recipient.adjust_skillrank(the_skill.type, increase_by, TRUE) + else + to_chat(recipient, span_notice("My sizecat cannot influence my skill with [lowertext(the_skill.name)] any further.")) + + +/datum/sizecat/proc/handle_stashed_items(mob/living/carbon/human/recipient) + if (!recipient.mind || !LAZYLEN(added_stashed_items)) + return + for(var/stashed_item in added_stashed_items) + recipient.mind?.special_items[stashed_item] = added_stashed_items[stashed_item] + +/datum/sizecat/proc/handle_added_languages(mob/living/carbon/human/recipient) + if (!LAZYLEN(added_languages)) + return + + for (var/language in added_languages) + recipient.grant_language(language) + +/datum/sizecat/proc/handle_stats(mob/living/carbon/human/recipient) + if (!LAZYLEN(added_stats)) + return + + for (var/stat in added_stats) + var/value = added_stats[stat] + recipient.change_stat(stat, value) + +/datum/sizecat/proc/check_triumphs(mob/living/carbon/human/recipient) + if (!triumph_cost) + return TRUE + + if (!recipient.mind) + return FALSE + + // we should check to see if they have triumphs first but i can't be fucked + recipient.adjust_triumphs(-triumph_cost, FALSE) + return TRUE + +/proc/apply_sizecat(mob/living/carbon/human/recipient, datum/sizecat/sizecat_type) + if (!sizecat_type.check_triumphs(recipient)) + return + sizecat_type.apply_to_human(recipient) + sizecat_type.handle_traits(recipient) + sizecat_type.handle_skills(recipient) + sizecat_type.handle_stashed_items(recipient) + sizecat_type.handle_added_languages(recipient) + sizecat_type.handle_stats(recipient) + if(HAS_TRAIT(recipient, TRAIT_RESIDENT)) + if(recipient in SStreasury.bank_accounts) + SStreasury.generate_money_account(20, recipient) + else + SStreasury.create_bank_account(recipient, 20) + if(HAS_TRAIT(recipient, TRAIT_RESIDENT)) + REMOVE_TRAIT(recipient, TRAIT_OUTLANDER, ADVENTURER_TRAIT) + +/proc/apply_prefs_sizecat(mob/living/carbon/human/character, client/player) + if (!player) + player = character.client + if (!player) + return + if (!player.prefs) + return + var/datum/sizecat/sizecat_type = player.prefs.sizecat + apply_sizecat(character,sizecat_type) + + + + diff --git a/roguetown.dme b/roguetown.dme index 38333cad..292b50a9 100644 --- a/roguetown.dme +++ b/roguetown.dme @@ -2463,6 +2463,11 @@ #include "modular_azurepeak\virtues\size.dm" #include "modular_azurepeak\virtues\thief.dm" #include "modular_azurepeak\virtues\utility.dm" +#include "modular_causticcove\code\modules\clothing\rogueclothes\armor.dm" +#include "modular_causticcove\code\modules\roguetown\roguecrafting\sewing.dm" +#include "modular_causticcove\code\modules\sizecats\prefs.dm" +#include "modular_causticcove\code\modules\sizecats\sizecat_types.dm" +#include "modular_causticcove\code\modules\sizecats\sizecats.dm" #include "modular_causticcove\code\modules\vore\persistence.dm" #include "modular_causticcove\code\modules\vore\SSbellies.dm" #include "modular_causticcove\code\modules\vore\eating\belly_dat_vr.dm" @@ -2484,6 +2489,4 @@ #include "modular_hearthstone\code\modules\mob\living\simple_animal\rogue\orc.dm" #include "modular_hearthstone\code\modules\mob\living\simple_animal\rogue\rogue_corpse.dm" #include "modular_hearthstone\code\modules\reagents\reagent_containers\lux.dm" -#include "modular_causticcove\code\modules\clothing\rogueclothes\armor.dm" -#include "modular_causticcove\code\modules\roguetown\roguecrafting\sewing.dm" // END_INCLUDE From 582e8a3817bedbc351698e3835bde8d16b12f325 Mon Sep 17 00:00:00 2001 From: LDip999 Date: Mon, 8 Sep 2025 00:28:09 +0200 Subject: [PATCH 47/66] standardized sprites --- code/modules/mob/vision_cone.dm | 2 ++ .../standardized_sprite_verb.dm | 29 +++++++++++++++++++ roguetown.dme | 5 ++-- 3 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 modular_causticcove/code/modules/standardized_sprite/standardized_sprite_verb.dm diff --git a/code/modules/mob/vision_cone.dm b/code/modules/mob/vision_cone.dm index 5c8e18cc..ec6b5a31 100644 --- a/code/modules/mob/vision_cone.dm +++ b/code/modules/mob/vision_cone.dm @@ -104,6 +104,8 @@ I.pixel_y = 0 client.images += I client.hidden_images += I + if(currentlystandardized) + refresh_standardized_sprite() I.appearance_flags = RESET_TRANSFORM|KEEP_TOGETHER|PIXEL_SCALE if(buckled) var/image/IB = image(buckled, buckled) diff --git a/modular_causticcove/code/modules/standardized_sprite/standardized_sprite_verb.dm b/modular_causticcove/code/modules/standardized_sprite/standardized_sprite_verb.dm new file mode 100644 index 00000000..782bc7f4 --- /dev/null +++ b/modular_causticcove/code/modules/standardized_sprite/standardized_sprite_verb.dm @@ -0,0 +1,29 @@ +/mob/verb/standardsprite() + set name = "Standardize sprite" + set category = "Options" + set desc = "Standardizes your sprite to 100%. ONLY FOR YOURSELF!" + if(isliving(src)) + var/mob/living/curruser = src + curruser.standardize_sprite() + +/mob/living + var/currentlystandardized = FALSE + +/mob/living/proc/standardize_sprite() + if(!currentlystandardized) + var/image/I = image(icon = src.icon, icon_state = src.icon_state, loc = src, layer = src.layer, pixel_x = src.pixel_x, pixel_y = src.pixel_y) + I.override = TRUE + I.overlays += overlays + add_alt_appearance(/datum/atom_hud/alternate_appearance/basic, "smallsprite_sizecode", I) + else + remove_alt_appearance("smallsprite_sizecode") + + currentlystandardized = !currentlystandardized + +/mob/living/proc/refresh_standardized_sprite() + remove_alt_appearance("smallsprite_sizecode") + var/image/I = image(icon = src.icon, icon_state = src.icon_state, loc = src, layer = src.layer, pixel_x = src.pixel_x, pixel_y = src.pixel_y) + I.override = TRUE + I.overlays += overlays + add_alt_appearance(/datum/atom_hud/alternate_appearance/basic, "smallsprite_sizecode", I) + diff --git a/roguetown.dme b/roguetown.dme index 38333cad..09070600 100644 --- a/roguetown.dme +++ b/roguetown.dme @@ -2463,6 +2463,9 @@ #include "modular_azurepeak\virtues\size.dm" #include "modular_azurepeak\virtues\thief.dm" #include "modular_azurepeak\virtues\utility.dm" +#include "modular_causticcove\code\modules\clothing\rogueclothes\armor.dm" +#include "modular_causticcove\code\modules\roguetown\roguecrafting\sewing.dm" +#include "modular_causticcove\code\modules\standardized_sprite\standardized_sprite_verb.dm" #include "modular_causticcove\code\modules\vore\persistence.dm" #include "modular_causticcove\code\modules\vore\SSbellies.dm" #include "modular_causticcove\code\modules\vore\eating\belly_dat_vr.dm" @@ -2484,6 +2487,4 @@ #include "modular_hearthstone\code\modules\mob\living\simple_animal\rogue\orc.dm" #include "modular_hearthstone\code\modules\mob\living\simple_animal\rogue\rogue_corpse.dm" #include "modular_hearthstone\code\modules\reagents\reagent_containers\lux.dm" -#include "modular_causticcove\code\modules\clothing\rogueclothes\armor.dm" -#include "modular_causticcove\code\modules\roguetown\roguecrafting\sewing.dm" // END_INCLUDE From 56a1314fe31e8652bd19602de0625d8c160a914d Mon Sep 17 00:00:00 2001 From: LDip999 Date: Mon, 8 Sep 2025 01:07:57 +0200 Subject: [PATCH 48/66] Puts it into vore tab --- .../modules/standardized_sprite/standardized_sprite_verb.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modular_causticcove/code/modules/standardized_sprite/standardized_sprite_verb.dm b/modular_causticcove/code/modules/standardized_sprite/standardized_sprite_verb.dm index 782bc7f4..b14834ca 100644 --- a/modular_causticcove/code/modules/standardized_sprite/standardized_sprite_verb.dm +++ b/modular_causticcove/code/modules/standardized_sprite/standardized_sprite_verb.dm @@ -1,6 +1,6 @@ /mob/verb/standardsprite() set name = "Standardize sprite" - set category = "Options" + set category = "Vore" set desc = "Standardizes your sprite to 100%. ONLY FOR YOURSELF!" if(isliving(src)) var/mob/living/curruser = src From 58965dd842393589a215ff82c1ee7fdfb6e5538d Mon Sep 17 00:00:00 2001 From: LDip999 Date: Mon, 8 Sep 2025 07:39:09 +0200 Subject: [PATCH 49/66] My mistake original gangster --- modular_causticcove/code/modules/vore/eating/living.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modular_causticcove/code/modules/vore/eating/living.dm b/modular_causticcove/code/modules/vore/eating/living.dm index 0069b176..bfbb162c 100644 --- a/modular_causticcove/code/modules/vore/eating/living.dm +++ b/modular_causticcove/code/modules/vore/eating/living.dm @@ -334,7 +334,7 @@ var/mob/living/simple_animal/SA = B.owner SA.update_icons() else if(istype(loc,/obj/item/micro)) - /obj/item/micro/mh = loc + var/obj/item/micro/mh = loc mh.dump_mob() else to_chat(src,"You aren't inside anyone, though, is the thing.") From b8723e66e2d67e19a3702e687d960697e7933a29 Mon Sep 17 00:00:00 2001 From: Campbell <111698205+UniquaSa@users.noreply.github.com> Date: Mon, 8 Sep 2025 19:15:34 +0200 Subject: [PATCH 50/66] More Loadout Stuffs --- .../clothing/rogueclothes/armor/gambeson.dm | 3 +++ .../clothing/rogueclothes/gloves/angle.dm | 3 +++ .../headwear/helmet/light_helmet.dm | 7 +++++ .../rogueclothes/pants/heavy_leather.dm | 3 +++ modular_azurepeak/code/datums/loadout.dm | 26 +++++++++++++++++++ 5 files changed, 42 insertions(+) diff --git a/code/modules/clothing/rogueclothes/armor/gambeson.dm b/code/modules/clothing/rogueclothes/armor/gambeson.dm index d015a519..99705c1f 100644 --- a/code/modules/clothing/rogueclothes/armor/gambeson.dm +++ b/code/modules/clothing/rogueclothes/armor/gambeson.dm @@ -190,6 +190,9 @@ pic.color = get_detail_color() add_overlay(pic) +/obj/item/clothing/suit/roguetown/armor/gambeson/heavy/grenzelhoft/loadout + armor = ARMOR_CLOTHING + /obj/item/clothing/suit/roguetown/armor/gambeson/heavy/raneshen name = "padded desert coat" desc = "A slim-fitting sherwani, a Ranesheni-styled coat meant to endure in the desert's climate. This one is heavily padded, meant for a warrior to wear." diff --git a/code/modules/clothing/rogueclothes/gloves/angle.dm b/code/modules/clothing/rogueclothes/gloves/angle.dm index a3e23c60..70552e20 100644 --- a/code/modules/clothing/rogueclothes/gloves/angle.dm +++ b/code/modules/clothing/rogueclothes/gloves/angle.dm @@ -22,6 +22,9 @@ item_state = "grenzelgloves" sleeved = 'icons/roguetown/clothing/onmob/helpers/stonekeep_merc.dmi' +/obj/item/clothing/gloves/roguetown/angle/grenzelgloves/loadout + armor = ARMOR_GLOVES_LEATHER //Legit normal leather + /obj/item/clothing/gloves/roguetown/angle/grenzelgloves/blacksmith name = "forge gauntlets" diff --git a/code/modules/clothing/rogueclothes/headwear/helmet/light_helmet.dm b/code/modules/clothing/rogueclothes/headwear/helmet/light_helmet.dm index b8233cc1..a4c10684 100644 --- a/code/modules/clothing/rogueclothes/headwear/helmet/light_helmet.dm +++ b/code/modules/clothing/rogueclothes/headwear/helmet/light_helmet.dm @@ -133,6 +133,9 @@ pic2.color = get_altdetail_color() add_overlay(pic2) +/obj/item/clothing/head/roguetown/grenzelhofthat/loadout + desc = "Whether it's monsters or fair maidens, a true Grenzelhoftian slays both." + armor = ARMOR_HEAD_CLOTHING //................ Briar Thorns ............... // - Dendor Briar /obj/item/clothing/head/roguetown/padded/briarthorns name = "briar thorns" @@ -156,3 +159,7 @@ sewrepair = TRUE flags_inv = HIDEEARS body_parts_covered = HEAD|HAIR|EARS|NOSE|EYES + +/obj/item/clothing/head/roguetown/mentorhat/loadout + armor = ARMOR_HEAD_CLOTHING + desc = "A bamboo hat." diff --git a/code/modules/clothing/rogueclothes/pants/heavy_leather.dm b/code/modules/clothing/rogueclothes/pants/heavy_leather.dm index edb43f52..10d73f7f 100644 --- a/code/modules/clothing/rogueclothes/pants/heavy_leather.dm +++ b/code/modules/clothing/rogueclothes/pants/heavy_leather.dm @@ -84,6 +84,9 @@ pic.color = get_detail_color() add_overlay(pic) +/obj/item/clothing/under/roguetown/heavy_leather_pants/grenzelpants/loadout + armor = ARMOR_PANTS_LEATHER + /obj/item/clothing/under/roguetown/heavy_leather_pants/eastpants1 name = "cut-throat's pants" desc = "Foreign pants, with leather insewns." diff --git a/modular_azurepeak/code/datums/loadout.dm b/modular_azurepeak/code/datums/loadout.dm index 1949fc08..9da389b3 100644 --- a/modular_azurepeak/code/datums/loadout.dm +++ b/modular_azurepeak/code/datums/loadout.dm @@ -100,6 +100,10 @@ GLOBAL_LIST_EMPTY(loadout_items) name = "Nun Veil" path = /obj/item/clothing/head/roguetown/nun +/datum/loadout_item/bamboohat + name = "Worn Bamboo Hat" + path = /obj/item/clothing/head/roguetown/mentorhat/loadout + //CLOAKS /datum/loadout_item/tabard name = "Tabard" @@ -302,6 +306,11 @@ GLOBAL_LIST_EMPTY(loadout_items) /datum/loadout_item/eastshirt2 name = "White Foreign Shirt" path = /obj/item/clothing/suit/roguetown/shirt/undershirt/eastshirt2 + +/datum/loadout_item/grenzelshirt + name = "Grenzelhoft Shirt" + path = /obj/item/clothing/suit/roguetown/armor/gambeson/heavy/grenzelhoft/loadout + //PANTS /datum/loadout_item/tights name = "Cloth Tights" @@ -327,6 +336,15 @@ GLOBAL_LIST_EMPTY(loadout_items) name = "Skirt" path = /obj/item/clothing/under/roguetown/skirt +/datum/loadout_item/grenzelpants + name = "Grenzelhoft Pants" + path = /obj/item/clothing/under/roguetown/heavy_leather_pants/grenzelpants/loadout + +/datum/loadout_item/easterntrou + name = "Black Foreign Pants" + path = /obj/item/clothing/under/roguetown/trou/leather/eastern + + //ACCESSORIES /datum/loadout_item/stockings name = "Stockings" @@ -356,6 +374,14 @@ GLOBAL_LIST_EMPTY(loadout_items) name = "Fingerless Gloves" path = /obj/item/clothing/gloves/roguetown/fingerless +/datum/loadout_item/grenzelgloves + name = "Grenzelhoft Gloves" + path = /obj/item/clothing/gloves/roguetown/angle/grenzelgloves/loadout + +/datum/loadout_item/easterngloves + name = "Eastern Gloves" + path = /obj/item/clothing/gloves/roguetown/eastgloves1 + /datum/loadout_item/exoticsilkbelt name = "Exotic Silk Belt" path = /obj/item/storage/belt/rogue/leather/exoticsilkbelt From 1c3f0d80ebb089367d2f4003c96bd6bba69b0c2e Mon Sep 17 00:00:00 2001 From: Campbell <111698205+UniquaSa@users.noreply.github.com> Date: Mon, 8 Sep 2025 19:32:31 +0200 Subject: [PATCH 51/66] Update loadout.dm --- modular_azurepeak/code/datums/loadout.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/modular_azurepeak/code/datums/loadout.dm b/modular_azurepeak/code/datums/loadout.dm index 9da389b3..eca9c6ce 100644 --- a/modular_azurepeak/code/datums/loadout.dm +++ b/modular_azurepeak/code/datums/loadout.dm @@ -104,6 +104,10 @@ GLOBAL_LIST_EMPTY(loadout_items) name = "Worn Bamboo Hat" path = /obj/item/clothing/head/roguetown/mentorhat/loadout +/datum/loadout_item/grenzelhat + name = "Grenzelhoft Hat" + path = /obj/item/clothing/head/roguetown/grenzelhofthat/loadout + //CLOAKS /datum/loadout_item/tabard name = "Tabard" From 602a21398ba8b5bd6c1b697f01535f2b12abc834 Mon Sep 17 00:00:00 2001 From: Sad_Starfish Date: Tue, 9 Sep 2025 00:19:23 -0400 Subject: [PATCH 52/66] The Great Liquid Fix of '25 ## About The Pull Request Liquid based Patch-notes BLOOD - Walking in blood now covers you in blood - Drinking blood is now harmful outside of certain circumstances. - The blood in the rivers has been there for MONTHS! Vampires are going to need to be more creative than that. - You can't wash off blood in blood anymore. SEAWATER - Seawater is now salty as it should be and slightly toxic. MURK - Murk is now properly dangerous to drink for non-wildeaters. - Washing in Murk has a chance of putting a leech on you. SEWAGE - The poop drinker meta is no more; This patch now treats sewage as a dangerous substance as it was meant to. Drink it! See what happens! - Like murk, it carries a risk of leeches. ## Testing Evidence ## Why It's Good For The Game There should be consequences to drinking harmful liquids as well as rewards for taking traits that allow you to partake in them. Also, it's quite immersion-breaking to wash off blood with blood. --- code/game/turfs/open/water.dm | 45 +++++++++++++--- code/modules/farming/bin.dm | 6 ++- .../chemistry/reagents/other_reagents.dm | 52 ++++++++++++++++--- 3 files changed, 88 insertions(+), 15 deletions(-) diff --git a/code/game/turfs/open/water.dm b/code/game/turfs/open/water.dm index e68c21ef..b20b838a 100644 --- a/code/game/turfs/open/water.dm +++ b/code/game/turfs/open/water.dm @@ -154,6 +154,9 @@ qdel(F) if(isliving(AM) && !AM.throwing) var/mob/living/L = AM + if (istype(src,/turf/open/water/bloody)) + L.add_mob_blood(L) + if(!(L.mobility_flags & MOBILITY_STAND) || water_level == 3) L.SoakMob(FULL_BODY) else @@ -206,22 +209,43 @@ return var/list/wash = list('sound/foley/waterwash (1).ogg','sound/foley/waterwash (2).ogg') playsound(user, pick_n_take(wash), 100, FALSE) - var/item2wash = user.get_active_held_item() + var/obj/item2wash = user.get_active_held_item() if(!item2wash) user.visible_message(span_info("[user] starts to wash in [src].")) if(do_after(L, 3 SECONDS, target = src)) if(wash_in) wash_atom(user, CLEAN_STRONG) + user.remove_stress(/datum/stressevent/sewertouched) playsound(user, pick(wash), 100, FALSE) + if(istype(src,/turf/open/water/sewer) || istype(src,/turf/open/water/swamp) || istype(src, /turf/open/water/sewer)) + if (istype(src, /turf/open/water/sewer)) + user.add_stress(/datum/stressevent/sewertouched) + if (!HAS_TRAIT(L,TRAIT_LEECHIMMUNE)) // cleaning yourself in nasty water is a wonderful way to get leeches. + if (prob(20)) // 1 in 5 chance of getting leeched if you wash up in gross water. + var/list/zones = list(BODY_ZONE_CHEST, BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_PRECISE_NECK, BODY_ZONE_HEAD) + var/zone = pick(zones) + var/obj/item/bodypart/BP = L.get_bodypart(zone) + if (BP && !(BP.skeletonized)) + var/obj/item/natural/worms/leech/I = new(L) + BP.add_embedded_object(I, silent = TRUE) /* if(water_reagent == /datum/reagent/water) //become shittified, checks so bath water can be naturally gross but not discolored water_reagent = /datum/reagent/water/gross water_color = "#a4955b" update_icon()*/ + if (istype(src,/turf/open/water/bloody)) + L.add_mob_blood(L) //Yes its their own DNA + else user.visible_message(span_info("[user] starts to wash [item2wash] in [src].")) if(do_after(L, 30, target = src)) if(wash_in) wash_atom(item2wash, CLEAN_STRONG) + L.update_inv_hands() + if(istype(src,/turf/open/water/bloody)) + item2wash.add_blood_DNA(list("Blood" = random_blood_type())) + if(iscarbon(L)) + var/mob/living/carbon/C = user + C.update_inv_hands() playsound(user, pick(wash), 100, FALSE) return ..() @@ -244,8 +268,11 @@ playsound(user, pick('sound/foley/waterwash (1).ogg','sound/foley/waterwash (2).ogg'), 100, FALSE) if(L.stat != CONSCIOUS) return + if(do_after(L, 25, target = src)) - var/list/waterl = list(/datum/reagent/water = 5) + if (istype(src,/turf/open/water/sewer)) + to_chat(user, span_userdanger("Have I gone mad!? Why am I drinking sewage!?")) + var/list/waterl = list(src.water_reagent = 5) var/datum/reagents/reagents = new() reagents.add_reagent_list(waterl) reagents.trans_to(L, reagents.total_volume, transfered_by = user, method = INGEST) @@ -299,9 +326,9 @@ icon_state = "pavingW" water_level = 1 water_color = "#705a43" - slowdown = 1 + slowdown = 3 wash_in = FALSE - water_reagent = /datum/reagent/water/gross + water_reagent = /datum/reagent/water/gross/sewage /turf/open/water/sewer/Initialize() icon_state = "paving" @@ -325,10 +352,10 @@ icon = 'icons/turf/roguefloor.dmi' icon_state = "dirtW2" water_level = 2 - water_color = "#880808" + water_color = "#941010" slowdown = 3 - wash_in = TRUE - water_reagent = /datum/reagent/blood + wash_in = FALSE + water_reagent = /datum/reagent/blood/shitty /turf/open/water/swamp/Initialize() icon_state = "dirt" @@ -342,6 +369,10 @@ water_color = pick("#880808") . = ..() + + + + /turf/open/water/swamp/Entered(atom/movable/AM, atom/oldLoc) . = ..() if(HAS_TRAIT(AM, TRAIT_LEECHIMMUNE)) diff --git a/code/modules/farming/bin.dm b/code/modules/farming/bin.dm index 3903691c..edbe8c2e 100644 --- a/code/modules/farming/bin.dm +++ b/code/modules/farming/bin.dm @@ -100,7 +100,7 @@ if(!reagents || !reagents.maximum_volume) return if(isliving(user)) - var/mob/living/L = user + var/mob/living/carbon/L = user if(L.stat != CONSCIOUS) return var/removereg = /datum/reagent/water @@ -118,11 +118,15 @@ if(do_after(L, 30, target = src)) wash_atom(user, CLEAN_STRONG) playsound(user, pick(wash), 100, FALSE) + user.remove_stress(/datum/stressevent/sewertouched) else user.visible_message(span_info("[user] starts to wash [item2wash] in [src].")) if(do_after(L, 30, target = src)) wash_atom(item2wash, CLEAN_STRONG) playsound(user, pick(wash), 100, FALSE) + if(iscarbon(user)) + var/mob/living/carbon/C = user + C.update_inv_hands() var/datum/reagent/water_to_dirty = reagents.has_reagent(/datum/reagent/water, 5) if(water_to_dirty) var/amount_to_dirty = water_to_dirty.volume diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 1d208bc1..e0134dce 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -9,16 +9,30 @@ glass_name = "glass of tomato juice" glass_desc = "" shot_glass_icon_state = "shotglassred" +/datum/reagent/blood/shitty + name = "Dirty blood" + color = "#941010" // rgb: 148, 16, 16 + taste_description = "rancid iron" + taste_mult = 1.5 + glass_name = "glass of dirty tomato juice" /datum/reagent/blood/reaction_mob(mob/living/L, method=TOUCH, reac_volume) if(iscarbon(L)) var/mob/living/carbon/C = L if(C.get_blood_id() == /datum/reagent/blood && (method == INJECT || (method == INGEST && C.dna && C.dna.species && (DRINKSBLOOD in C.dna.species.species_traits)))) - if(!data || !(data["blood_type"] in get_safe_blood(C.dna.blood_type))) + if(!data || !(data["blood_type"] in get_safe_blood(C.dna.blood_type)) || !HAS_TRAIT(C,TRAIT_NASTY_EATER)) C.reagents.add_reagent(/datum/reagent/toxin, reac_volume * 0.5) else C.blood_volume = min(C.blood_volume + round(reac_volume, 0.1), BLOOD_VOLUME_MAXIMUM) - +//Dirty blood shouldn't go in your veins! +/datum/reagent/blood/shitty/reaction_mob(mob/living/L, method=TOUCH, reac_volume) + if(iscarbon(L)) + var/mob/living/carbon/C = L + if(C.get_blood_id() == /datum/reagent/blood && (method == INJECT || (method == INGEST && C.dna && C.dna.species && (DRINKSBLOOD in C.dna.species.species_traits)))) + if(!data || !(data["blood_type"] in get_safe_blood(C.dna.blood_type)) || !(HAS_TRAIT(C, TRAIT_NASTY_EATER) && HAS_TRAIT(C, TRAIT_WILD_EATER))) + C.reagents.add_reagent(/datum/reagent/toxin, reac_volume * 0.8) + else + C.blood_volume = min(C.blood_volume + round(reac_volume, 0.1), BLOOD_VOLUME_MAXIMUM) /datum/reagent/blood/on_merge(list/mix_data) if(data && mix_data) @@ -38,16 +52,29 @@ if(data["blood_DNA"]) B.add_blood_DNA(list(data["blood_DNA"] = data["blood_type"])) +/datum/reagent/blood/reaction_mob(mob/living/L, method=TOUCH, reac_volume) + if(method == INGEST) // Make sure you DRANK the blood before giving damage + ..() + /datum/reagent/blood/on_mob_life(mob/living/carbon/H)//I hate you ..() if(HAS_TRAIT(H, TRAIT_NASTY_EATER)) return H.add_nausea(12) //Over 8 units will cause puking +/datum/reagent/blood/shitty/reaction_mob(mob/living/L, method=TOUCH, reac_volume) + if (method == INGEST) + ..() +/datum/reagent/blood/shitty/on_mob_life(mob/living/carbon/H) + ..() + if(HAS_TRAIT(H, TRAIT_NASTY_EATER) && HAS_TRAIT(H, TRAIT_WILD_EATER)) + return + H.add_nausea(18) //Do not drink dirty blood! + /datum/reagent/blood/green color = "#05af01" -/datum/reagent/liquidgibs +/datum/reagent/liquidgibs // Editor's note: what the fuck name = "Liquid gibs" color = "#CC4633" description = "You don't even want to think about what's in here." @@ -88,6 +115,8 @@ taste_description = "something vile" color = "#98934bc6" harmful = TRUE +/datum/reagent/water/gross/sewage + taste_description = "repulsive sulfur and decaying shit" /datum/reagent/water/gross/reaction_mob(mob/living/L, method=TOUCH, reac_volume) if(method == INGEST) // Make sure you DRANK the toxic water before giving damage @@ -99,7 +128,14 @@ return M.adjustToxLoss(1) M.add_nausea(12) //Over 8 units will cause puking - +/datum/reagent/water/gross/sewage/reaction_mob(mob/living/L, method=TOUCH, reac_volume) + if (method == INGEST) + ..() +/datum/reagent/water/gross/sewage/on_mob_life(mob/living/carbon/M) + ..() + //I am not putting in a NASTY_EATER check for this. He's the god of bloodshed, not the god of coprophagia. + M.adjustToxLoss(4) //Horrible day for poop drinkers + M.add_nausea(20) /datum/chemical_reaction/grosswaterboil //boiling water purifies it name = "gross water purification" id = /datum/reagent/water @@ -122,10 +158,12 @@ /datum/reagent/water/salty/on_mob_life(mob/living/carbon/M) if(ishuman(M)) var/mob/living/carbon/human/H = M - if(!HAS_TRAIT(H, TRAIT_NOHUNGER)&&!HAS_TRAIT(H, TRAIT_SEA_DRINKER)) - H.adjust_hydration(-6) //saltwater dehydrates more than it hydrates + if(!(HAS_TRAIT(H, TRAIT_NOHUNGER) || HAS_TRAIT(H, TRAIT_SEA_DRINKER))) // Small edit for readability. De Morgans Law my beloved + H.adjust_hydration(-hydration) //saltwater dehydrates more than it hydrates + M.adjustToxLoss(0.25) // Slightly toxic + M.add_nausea(2) else if(HAS_TRAIT(H, TRAIT_SEA_DRINKER)) - H.adjust_hydration(hydration) //saltwater dehydrates more than it hydrates + H.adjust_hydration(hydration) ..() /datum/chemical_reaction/saltwaterify From 5ec1236b08dcf5f4c6097df5b1c0dbc656af3c47 Mon Sep 17 00:00:00 2001 From: LDip999 Date: Tue, 9 Sep 2025 11:39:40 +0200 Subject: [PATCH 53/66] Scooping up now toggles rest to standing up before being picked up --- modular_causticcove/code/modules/micromacrointeractions/scoop.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/modular_causticcove/code/modules/micromacrointeractions/scoop.dm b/modular_causticcove/code/modules/micromacrointeractions/scoop.dm index b3a74ae6..ddce2693 100644 --- a/modular_causticcove/code/modules/micromacrointeractions/scoop.dm +++ b/modular_causticcove/code/modules/micromacrointeractions/scoop.dm @@ -4,6 +4,7 @@ if(!can_be_picked_up(grabby)) return FALSE var/obj/item/micro/friend = new /obj/item/micro(get_turf(grabby), src) + friend.set_resting(FALSE,FALSE) grabby.put_in_hands(friend) to_chat(grabby, span_notice("You scoop up \the [src]!")) to_chat(src, span_notice("\The [grabby] scoops you up!")) From 4d298029e7cd69344dedac7447a1132e649c3852 Mon Sep 17 00:00:00 2001 From: LDip999 Date: Tue, 9 Sep 2025 11:40:30 +0200 Subject: [PATCH 54/66] Maybe this one better? --- .../code/modules/micromacrointeractions/scoop.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modular_causticcove/code/modules/micromacrointeractions/scoop.dm b/modular_causticcove/code/modules/micromacrointeractions/scoop.dm index ddce2693..dd2cf047 100644 --- a/modular_causticcove/code/modules/micromacrointeractions/scoop.dm +++ b/modular_causticcove/code/modules/micromacrointeractions/scoop.dm @@ -3,8 +3,8 @@ return FALSE if(!can_be_picked_up(grabby)) return FALSE - var/obj/item/micro/friend = new /obj/item/micro(get_turf(grabby), src) friend.set_resting(FALSE,FALSE) + var/obj/item/micro/friend = new /obj/item/micro(get_turf(grabby), src) grabby.put_in_hands(friend) to_chat(grabby, span_notice("You scoop up \the [src]!")) to_chat(src, span_notice("\The [grabby] scoops you up!")) From d75bbf2efe40359a63fa7dde36422d79718f1541 Mon Sep 17 00:00:00 2001 From: LDip999 Date: Tue, 9 Sep 2025 13:40:42 +0200 Subject: [PATCH 55/66] Maybe this will fix? --- .../code/modules/micromacrointeractions/microholder.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modular_causticcove/code/modules/micromacrointeractions/microholder.dm b/modular_causticcove/code/modules/micromacrointeractions/microholder.dm index 2414cd08..a9604f79 100644 --- a/modular_causticcove/code/modules/micromacrointeractions/microholder.dm +++ b/modular_causticcove/code/modules/micromacrointeractions/microholder.dm @@ -26,6 +26,7 @@ if(!held_mob) return if (held_mob.loc == src || isnull(held_mob.loc)) + held_mob.set_resting(FALSE,FALSE) held_mob.transform = original_transform held_mob.update_transform() held_mob.forceMove(get_turf(src)) @@ -85,6 +86,7 @@ /obj/item/micro/Exited(mob/held, atom/newLoc) if(held == held_mob) + held_mob.set_resting(FALSE,FALSE) held_mob.transform = original_transform held_mob.update_transform() held_mob = null From 040c5d1ac5357e7006307b8cf2fb3dee5c8d311a Mon Sep 17 00:00:00 2001 From: LDip999 Date: Tue, 9 Sep 2025 20:31:26 +0200 Subject: [PATCH 56/66] Nat armor --- .../code/modules/nat_armor/nat_armor.dm | 8 ++++++++ roguetown.dme | 11 ++++++----- 2 files changed, 14 insertions(+), 5 deletions(-) create mode 100644 modular_causticcove/code/modules/nat_armor/nat_armor.dm diff --git a/modular_causticcove/code/modules/nat_armor/nat_armor.dm b/modular_causticcove/code/modules/nat_armor/nat_armor.dm new file mode 100644 index 00000000..021bbfc3 --- /dev/null +++ b/modular_causticcove/code/modules/nat_armor/nat_armor.dm @@ -0,0 +1,8 @@ +/datum/virtue/combat/natarmor + name = "Natural Armor" + desc = "My hide is thick and resilient. It will regenerate so long as I keep it fed..." + added_traits = list() + custom_text = "My hide is thick and resilient. It will regenerate so long as I keep it fed..." + +/datum/virtue/combat/natarmor/apply_to_human(mob/living/carbon/human/recipient) + recipient.skin_armor = new /obj/item/clothing/suit/roguetown/armor/skin_armor/natural_armor(recipient) diff --git a/roguetown.dme b/roguetown.dme index 4284b9d0..dac14f06 100644 --- a/roguetown.dme +++ b/roguetown.dme @@ -2464,15 +2464,16 @@ #include "modular_azurepeak\virtues\thief.dm" #include "modular_azurepeak\virtues\utility.dm" #include "modular_causticcove\code\modules\clothing\rogueclothes\armor.dm" -#include "modular_causticcove\code\modules\roguetown\roguecrafting\sewing.dm" -#include "modular_causticcove\code\modules\standardized_sprite\standardized_sprite_verb.dm" -#include "modular_causticcove\code\modules\sizecats\prefs.dm" -#include "modular_causticcove\code\modules\sizecats\sizecat_types.dm" -#include "modular_causticcove\code\modules\sizecats\sizecats.dm" #include "modular_causticcove\code\modules\micromacrointeractions\helperfunctions.dm" #include "modular_causticcove\code\modules\micromacrointeractions\microholder.dm" #include "modular_causticcove\code\modules\micromacrointeractions\prefs.dm" #include "modular_causticcove\code\modules\micromacrointeractions\scoop.dm" +#include "modular_causticcove\code\modules\nat_armor\nat_armor.dm" +#include "modular_causticcove\code\modules\roguetown\roguecrafting\sewing.dm" +#include "modular_causticcove\code\modules\sizecats\prefs.dm" +#include "modular_causticcove\code\modules\sizecats\sizecat_types.dm" +#include "modular_causticcove\code\modules\sizecats\sizecats.dm" +#include "modular_causticcove\code\modules\standardized_sprite\standardized_sprite_verb.dm" #include "modular_causticcove\code\modules\vore\persistence.dm" #include "modular_causticcove\code\modules\vore\SSbellies.dm" #include "modular_causticcove\code\modules\vore\eating\belly_dat_vr.dm" From d72d39cb55fab062c36ca072c403cbda128d7ed8 Mon Sep 17 00:00:00 2001 From: LDip999 Date: Tue, 9 Sep 2025 20:42:30 +0200 Subject: [PATCH 57/66] armor does nothing if you have skin armor --- .../mob/living/carbon/human/human_defense.dm | 37 ++++++++++++------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index bc0f4d94..1dd10933 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -25,20 +25,29 @@ if(def_zone == BODY_ZONE_TAUR) def_zone = pick(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) var/list/body_parts = list(skin_armor, head, wear_mask, wear_wrists, gloves, wear_neck, cloak, wear_armor, wear_shirt, shoes, wear_pants, backr, backl, belt, s_store, glasses, ears, wear_ring) //Everything but pockets. Pockets are l_store and r_store. (if pockets were allowed, putting something armored, gloves or hats for example, would double up on the armor) - for(var/bp in body_parts) - if(!bp) - continue - if(bp && istype(bp , /obj/item/clothing)) - var/obj/item/clothing/C = bp - if(zone2covered(def_zone, C.body_parts_covered_dynamic)) - if(C.max_integrity) - if(C.obj_integrity <= 0) - continue - var/val = C.armor.getRating(d_type) - if(val > 0) - if(val > protection) - protection = val - used = C + if(skin_armor) + var/obj/item/clothing/C = skin_armor + if(C.obj_integrity > 0) + var/val = C.armor.getRating(d_type) + if(val > 0) + if(val > protection) + protection = val + used = C + else + for(var/bp in body_parts) + if(!bp) + continue + if(bp && istype(bp , /obj/item/clothing)) + var/obj/item/clothing/C = bp + if(zone2covered(def_zone, C.body_parts_covered_dynamic)) + if(C.max_integrity) + if(C.obj_integrity <= 0) + continue + var/val = C.armor.getRating(d_type) + if(val > 0) + if(val > protection) + protection = val + used = C if(used) if(!blade_dulling) blade_dulling = BCLASS_BLUNT From 6dc9c4d32a56bf91d06adf070d36f1289b0d666b Mon Sep 17 00:00:00 2001 From: LDip999 Date: Tue, 9 Sep 2025 20:47:45 +0200 Subject: [PATCH 58/66] Makes stone hoes repairable --- code/modules/farming/tools.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/farming/tools.dm b/code/modules/farming/tools.dm index 2a6b4fa9..c79f7e26 100644 --- a/code/modules/farming/tools.dm +++ b/code/modules/farming/tools.dm @@ -140,7 +140,7 @@ icon_state = "stonehoe" //dropshrink = 0.8 smeltresult = null - anvilrepair = null + anvilrepair = /datum/skill/craft/blacksmithing max_integrity = 100 hoe_damage = 25 work_time = 15 SECONDS From f97581f3b463de18cd48e73ecf4e42c368bb8b8e Mon Sep 17 00:00:00 2001 From: LDip999 Date: Wed, 10 Sep 2025 22:11:04 +0200 Subject: [PATCH 59/66] Harpies --- code/__DEFINES/roguetown.dm | 5 + .../code/modules/harpies/_harpy_defines.dm | 2 + .../code/modules/harpies/abberant_eater.dm | 40 +++ .../code/modules/harpies/harpy_compat.dm | 1 + .../code/modules/harpies/harpy_organs.dm | 48 ++++ .../code/modules/harpies/harpy_species.dm | 152 +++++++++++ .../code/modules/harpies/wings.dm | 258 ++++++++++++++++++ .../icons/roguetown/harpies/f/harpy.dmi | Bin 0 -> 10331 bytes .../icons/roguetown/harpies/m/harpy.dmi | Bin 0 -> 4462 bytes roguetown.dme | 16 +- 10 files changed, 517 insertions(+), 5 deletions(-) create mode 100644 modular_causticcove/code/modules/harpies/_harpy_defines.dm create mode 100644 modular_causticcove/code/modules/harpies/abberant_eater.dm create mode 100644 modular_causticcove/code/modules/harpies/harpy_compat.dm create mode 100644 modular_causticcove/code/modules/harpies/harpy_organs.dm create mode 100644 modular_causticcove/code/modules/harpies/harpy_species.dm create mode 100644 modular_causticcove/code/modules/harpies/wings.dm create mode 100644 modular_causticcove/icons/roguetown/harpies/f/harpy.dmi create mode 100644 modular_causticcove/icons/roguetown/harpies/m/harpy.dmi diff --git a/code/__DEFINES/roguetown.dm b/code/__DEFINES/roguetown.dm index 8d40f085..84bdfe96 100644 --- a/code/__DEFINES/roguetown.dm +++ b/code/__DEFINES/roguetown.dm @@ -214,6 +214,7 @@ /datum/species/akula,\ /datum/species/anthromorph,\ /datum/species/demihuman,\ + /datum/species/harpy,\ #define RACES_SHUNNED \ @@ -256,6 +257,7 @@ /datum/species/kobold,\ /datum/species/goblinp,\ /datum/species/construct/metal,\ + /datum/species/harpy,\ ) #define CLOTHED_RACES_TYPES list(\ @@ -280,6 +282,7 @@ /datum/species/kobold,\ /datum/species/goblinp,\ /datum/species/construct/metal,\ + /datum/species/harpy,\ ) // Non-dwarf non-kobold non-goblin mostly #define NON_DWARVEN_RACE_TYPES list(\ @@ -300,6 +303,7 @@ /datum/species/demihuman,\ /datum/species/halforc,\ /datum/species/construct/metal,\ + /datum/species/harpy,\ ) // Non-elf non-dwarf non-kobold non-goblin mostly #define HUMANLIKE_RACE_TYPES list(\ @@ -316,6 +320,7 @@ /datum/species/anthromorph,\ /datum/species/demihuman,\ /datum/species/construct/metal,\ + /datum/species/harpy,\ ) #define ALL_CLERIC_PATRONS list(/datum/patron/divine/astrata, /datum/patron/divine/noc, /datum/patron/divine/dendor, /datum/patron/divine/necra, /datum/patron/divine/pestra, /datum/patron/divine/ravox, /datum/patron/divine/malum, /datum/patron/divine/eora) // Currently unused. diff --git a/modular_causticcove/code/modules/harpies/_harpy_defines.dm b/modular_causticcove/code/modules/harpies/_harpy_defines.dm new file mode 100644 index 00000000..9d106b2c --- /dev/null +++ b/modular_causticcove/code/modules/harpies/_harpy_defines.dm @@ -0,0 +1,2 @@ +#define SPEC_ID_HARPY "harpy" +#define isopenspace(A) (istype(A, /turf/open/transparent/openspace)) diff --git a/modular_causticcove/code/modules/harpies/abberant_eater.dm b/modular_causticcove/code/modules/harpies/abberant_eater.dm new file mode 100644 index 00000000..77956f64 --- /dev/null +++ b/modular_causticcove/code/modules/harpies/abberant_eater.dm @@ -0,0 +1,40 @@ +/datum/component/abberant_eater + var/list/extra_foods = list() + var/excluding_subtypes = FALSE + +/datum/component/abberant_eater/Initialize(list/food_list, exclude_subtypes = FALSE) + if(!length(food_list)) + return COMPONENT_INCOMPATIBLE + + excluding_subtypes = exclude_subtypes + extra_foods = excluding_subtypes ? typecacheof(food_list, only_root_path = TRUE) : food_list + + RegisterSignal(parent, COMSIG_MOB_ITEM_ATTACK, PROC_REF(try_eat)) + +/datum/component/abberant_eater/proc/try_eat(mob/living/user, mob/living/M, obj/item/source) + if(user.cmode) + return FALSE + if(user != M) + return FALSE + + var/can_we_eat = excluding_subtypes ? is_type_in_typecache(source, extra_foods) : is_type_in_list(source, extra_foods) + if(!can_we_eat) + return FALSE + + var/eatverb = pick("bite","chew","nibble","gnaw","gobble","chomp") + M.nutrition += 10 + + switch(M.nutrition) + if(NUTRITION_LEVEL_FAT to INFINITY) + user.visible_message("[user] forces [M.p_them()]self to eat \the [source].", "I force myself to eat \the [source].") + if(NUTRITION_LEVEL_STARVING to NUTRITION_LEVEL_FAT) + user.visible_message("[user] [eatverb]s \the [source].", "I [eatverb] \the [source].") + if(0 to NUTRITION_LEVEL_STARVING) + user.visible_message("[user] hungrily [eatverb]s \the [source], gobbling it down!", "I hungrily [eatverb] \the [source], gobbling it down!") + M.changeNext_move(CLICK_CD_MELEE * 0.5) + + playsound(M.loc,'sound/misc/eat.ogg', rand(30,60), TRUE) + SEND_SIGNAL(source, COMSIG_FOOD_EATEN, M, user) + //source.On_Consume(user) + qdel(source) + return TRUE diff --git a/modular_causticcove/code/modules/harpies/harpy_compat.dm b/modular_causticcove/code/modules/harpies/harpy_compat.dm new file mode 100644 index 00000000..9c8713ec --- /dev/null +++ b/modular_causticcove/code/modules/harpies/harpy_compat.dm @@ -0,0 +1 @@ +//This file includes all the slop I can think of and manage to change without interfering with azure peak code diff --git a/modular_causticcove/code/modules/harpies/harpy_organs.dm b/modular_causticcove/code/modules/harpies/harpy_organs.dm new file mode 100644 index 00000000..5d301d1f --- /dev/null +++ b/modular_causticcove/code/modules/harpies/harpy_organs.dm @@ -0,0 +1,48 @@ +/obj/item/organ/vocal_cords/harpy + name = "harpy's song" + icon_state = "harpysong" //Pulsating heart energy thing. + desc = "The blessed essence of harpysong. How did you get this... you monster!" + actions_types = list(/datum/action/item_action/organ_action/use/harpy_sing) + +/obj/item/organ/vocal_cords/harpy/Initialize() + . = ..() + +/obj/item/organ/vocal_cords/harpy/Insert(mob/living/carbon/M, special = FALSE, drop_if_replaced = TRUE) + . = ..() + M.adjust_skillrank(/datum/skill/misc/music, 1, TRUE) + +/obj/item/organ/vocal_cords/harpy/Remove(mob/living/carbon/M, special = FALSE, drop_if_replaced = TRUE) + . = ..() + M.adjust_skillrank(/datum/skill/misc/music, -1, TRUE) + +/datum/action/item_action/organ_action/use/harpy_sing + name = "Harpy's song" + desc = "Project your voice through song." + button_icon = 'icons/obj/surgery.dmi' + button_icon_state = "harpysong" + + + +/datum/customizer/organ/wings/harpy + customizer_choices = list(/datum/customizer_choice/organ/wings/harpy) + allows_disabling = FALSE + +/datum/customizer_choice/organ/wings/harpy + name = "Wings" + organ_type = /obj/item/organ/wings/flight/harpy + sprite_accessories = list( + /datum/sprite_accessory/wings/large/harpyswept, + ) + +/datum/customizer/organ/tail/harpy + customizer_choices = list(/datum/customizer_choice/organ/tail/harpy) + allows_disabling = TRUE + +/datum/customizer_choice/organ/tail/harpy + name = "Harpy Plumage" + organ_type = /obj/item/organ/tail + generic_random_pick = TRUE + allows_accessory_color_customization = TRUE + sprite_accessories = list( + /datum/sprite_accessory/tail/hawk, + ) diff --git a/modular_causticcove/code/modules/harpies/harpy_species.dm b/modular_causticcove/code/modules/harpies/harpy_species.dm new file mode 100644 index 00000000..5b327fe7 --- /dev/null +++ b/modular_causticcove/code/modules/harpies/harpy_species.dm @@ -0,0 +1,152 @@ +/mob/living/carbon/human/species/harpy + race = /datum/species/harpy + +/datum/species/harpy + name = "Harpy" + id = SPEC_ID_HARPY + desc = "Harpies, or less ceremoniously known as 'magpies,' resemble the despised hollow-kin in appearance at first glance. \ + One would rightfully assume they are similar in nature- with accuracy even, much to the harpies' chagrin. \ + Harpies have been uplifted and reconnected to divinity by Eora, having developed culture of music and song which caught the attention of such a goddess. \ + Their songs and voices may be their own, or proud mimicking other voices they've heard with unnatural accuracy. \ + \ + Whilst harpies may fly, their freedom is weighed by corruption of fleshcrafting to this day. Complete open-air freedom is still foreign to them. \ + Harpies tend to live and gather in colonies at the tops of great sequoia forests and in nearby cliffs. Due to their laden flight, they must employ use of updrafts and proximity to large objects or structures to bolster their limited range and air-dancing performances. \ + Their serene songs and blissful music can be heard echoing far below, guiding travelers and thieves both to respite... or treasure. For as lifted into grace as they might be, these 'magpies' earn such a nickname from instinctual Matthiosan greed and love for anything that shines. \ + Yet if one can work past that distrust and compensate them well, harpies make for unparalleled couriers. \ + \ + Harpies and Feculents often find themselves in conflict, mirroring the quarrels of their patrons, whether of conscious faith or not." + + skin_tone_wording = "Heritage" + default_color = "FFFFFF" + + species_traits = list(EYECOLOR, HAIR, FACEHAIR, LIPS, STUBBLE, OLDGREY) + + use_skintones = TRUE + changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | RACE_SWAP | SLIME_EXTRACT + + limbs_icon_m = 'modular_causticcove/icons/roguetown/harpies/m/harpy.dmi' + limbs_icon_f = 'modular_causticcove/icons/roguetown/harpies/f/harpy.dmi' + + soundpack_m = /datum/voicepack/male + soundpack_f = /datum/voicepack/female + + offset_features = list( + OFFSET_ID = list(0,1), OFFSET_GLOVES = list(0,1), OFFSET_WRISTS = list(0,1),\ + OFFSET_CLOAK = list(0,1), OFFSET_FACEMASK = list(0,1), OFFSET_HEAD = list(0,1), \ + OFFSET_FACE = list(0,1), OFFSET_BELT = list(0,1), OFFSET_BACK = list(0,1), \ + OFFSET_NECK = list(0,1), OFFSET_MOUTH = list(0,1), OFFSET_PANTS = list(0,1), \ + OFFSET_SHIRT = list(0,1), OFFSET_ARMOR = list(0,1), OFFSET_HANDS = list(0,1), OFFSET_UNDIES = list(0,1), \ + OFFSET_ID_F = list(0,-1), OFFSET_GLOVES_F = list(0,0), OFFSET_WRISTS_F = list(0,0), OFFSET_HANDS_F = list(0,0), \ + OFFSET_CLOAK_F = list(0,0), OFFSET_FACEMASK_F = list(0,-1), OFFSET_HEAD_F = list(0,-1), \ + OFFSET_FACE_F = list(0,-1), OFFSET_BELT_F = list(0,0), OFFSET_BACK_F = list(0,-1), \ + OFFSET_NECK_F = list(0,-1), OFFSET_MOUTH_F = list(0,-1), OFFSET_PANTS_F = list(0,0), \ + OFFSET_SHIRT_F = list(0,0), OFFSET_ARMOR_F = list(0,0), OFFSET_UNDIES_F = list(0,-1), \ + ) + + race_bonus = list(STAT_STRENGTH = -4, STAT_PERCEPTION = 2, STAT_INTELLIGENCE = 1, STAT_CONSTITUTION = -4, STAT_ENDURANCE = 0, STAT_SPEED = 3, STAT_FORTUNE = 0) + + enflamed_icon = "widefire" + + organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs, + ORGAN_SLOT_EYES = /obj/item/organ/eyes, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ORGAN_SLOT_VOICE = /obj/item/organ/vocal_cords/harpy, + ORGAN_SLOT_TAIL = /obj/item/organ/tail, + ) + + bodypart_features = list( + /datum/bodypart_feature/hair/head, + /datum/bodypart_feature/hair/facial, + ) + + customizers = list( + /datum/customizer/organ/eyes/humanoid, + /datum/customizer/bodypart_feature/hair/head/humanoid, + /datum/customizer/bodypart_feature/hair/facial/humanoid, + /datum/customizer/bodypart_feature/accessory, + /datum/customizer/bodypart_feature/face_detail, + /datum/customizer/bodypart_feature/underwear, + /datum/customizer/organ/tail/harpy, + /datum/customizer/organ/wings/harpy, + /datum/customizer/organ/testicles/anthro, + /datum/customizer/organ/penis/anthro, + /datum/customizer/organ/belly/animal, + /datum/customizer/organ/butt/human, + /datum/customizer/organ/breasts/animal, + /datum/customizer/organ/vagina/anthro, + ) + + descriptor_choices = list( + /datum/descriptor_choice/height, + /datum/descriptor_choice/body, + /datum/descriptor_choice/stature, + /datum/descriptor_choice/face, + /datum/descriptor_choice/face_exp, + /datum/descriptor_choice/skin, + /datum/descriptor_choice/voice, + /datum/descriptor_choice/prominent_one_wild, + /datum/descriptor_choice/prominent_two_wild, + /datum/descriptor_choice/prominent_three_wild, + /datum/descriptor_choice/prominent_four_wild, + ) + +/datum/species/harpy/get_hairc_list() + return sortList(list( + "black - raven" = "1a1d21", + "black - magpie" = "1d1b2b", + + "brown - hawk" = "201616", + "brown - falcon" = "2b201b", + + "red - sparrow" = "2d1300", + "red - robin" = "612929", + "red - cardinal" = "822b2b", + + "grey - osprey" = "7c828a", + + "white - swan" = "d3d9e3", + "white - egret" = "dee9ed", + "white - owl" = "f4f4f4", + + "yellow - parakeet" = "d5ba7b", + "yellow - goldfinch" = "c69b71", + + "pink - cockatoo" = "ead6e2", + + "blue - jay" = "a1b4d4" + )) + +/datum/species/harpy/check_roundstart_eligible() + return TRUE + +/datum/species/harpy/qualifies_for_rank(rank, list/features) + return TRUE + +/datum/species/harpy/on_species_gain(mob/living/carbon/foreign, datum/species/old_species) + ..() + foreign.AddComponent(/datum/component/abberant_eater, list(/obj/item/natural/worms) + typesof(/obj/item/seeds), TRUE) + foreign.grant_language(/datum/language/common) + +/datum/species/harpy/get_skin_list() + return list( + "Grenzelhoft" = SKIN_COLOR_GRENZELHOFT, + "Hammerhold" = SKIN_COLOR_HAMMERHOLD, + "Avar" = SKIN_COLOR_AVAR, + "Rockhill" = SKIN_COLOR_ROCKHILL, + "Otava" = SKIN_COLOR_OTAVA, + "Etrusca" = SKIN_COLOR_ETRUSCA, + "Gronn" = SKIN_COLOR_GRONN, + "North Raneshen (Chorodiaki)" = SKIN_COLOR_GIZA, + "West Raneshen (Vrdaqnan)" = SKIN_COLOR_SHALVISTINE, + "East Raneshen (Nshkormh)" = SKIN_COLOR_LALVESTINE, + "Naledi" = SKIN_COLOR_NALEDI, + "Naledi South" = SKIN_COLOR_NALEDI_LIGHT, + "Kazengun" = SKIN_COLOR_KAZENGUN, + ) diff --git a/modular_causticcove/code/modules/harpies/wings.dm b/modular_causticcove/code/modules/harpies/wings.dm new file mode 100644 index 00000000..28c1489a --- /dev/null +++ b/modular_causticcove/code/modules/harpies/wings.dm @@ -0,0 +1,258 @@ +/obj/item/organ/wings/flight + /// Flight datum + var/datum/action/item_action/organ_action/use/flight/fly + /// What species ids get flight from these wings + + +/obj/item/organ/wings/flight/Destroy() + QDEL_NULL(fly) + return ..() + +/obj/item/organ/wings/flight/Insert(mob/living/carbon/M, special, drop_if_replaced) + . = ..() + if(length(flight_for_species) && !(M.dna?.species.id in flight_for_species)) + return + if(QDELETED(fly)) + fly = new(src) + fly.Grant(M) + +/obj/item/organ/wings/flight/Remove(mob/living/carbon/M, special, drop_if_replaced) + . = ..() + if(QDELETED(fly)) + return + fly.Remove(M) + +/obj/item/organ/wings/flight/harpy + name = "harpy wings" + accessory_type = /datum/sprite_accessory/wings/large/harpyswept + flight_for_species = list(SPEC_ID_HARPY) + +/obj/effect/flyer_shadow + name = "humanoid shadow" + desc = "A shadow cast from something flying above." + icon = 'icons/effects/effects.dmi' + icon_state = "shadow" + anchored = TRUE + layer = BELOW_MOB_LAYER + alpha = 180 + var/datum/weakref/flying_ref + +/obj/effect/flyer_shadow/Initialize(mapload, flying_mob) + . = ..() + if(flying_mob) + flying_ref = WEAKREF(flying_mob) + transform = matrix() * 0.75 // Make the shadow slightly smaller + //add_filter("shadow_blur", 1, gauss_blur_filter(1)) + +/obj/effect/flyer_shadow/Destroy() + flying_ref = null + return ..() + +/obj/effect/flyer_shadow/attackby(obj/item/I, mob/user, params) + var/mob/living/flying_mob = flying_ref.resolve() + if(QDELETED(flying_mob)) + return + + if(flying_mob.z == user.z || !I.is_pointy_weapon(user)) + return + + user.visible_message( + span_warning("[user] prepares to thrust [I] upward at [flying_mob]!"), + span_warning("You prepare to thrust [I] upward at [flying_mob]!") + ) + + if(do_after(user, 3 SECONDS, src)) + I = user.get_active_held_item() + if(!I?.is_pointy_weapon(user) || !flying_mob) + return + + var/attack_damage = I.force + + user.visible_message( + span_warning("[user] thrusts [I] upward, striking [flying_mob]!"), + span_warning("You thrust [I] upward, striking [flying_mob]!") + ) + + flying_mob.apply_damage(attack_damage, BRUTE) + + return TRUE + +/obj/item/proc/is_pointy_weapon(mob/user) + return (user?.used_intent?.reach >= 2) && (sharpness == IS_SHARP || w_class >= WEIGHT_CLASS_NORMAL) + +/datum/action/item_action/organ_action/use/flight + name = "Toggle Flying" + desc = "Take to the skies or return to the ground." + button_icon_state = "flight" + var/active_background_icon_state = "spell1" + + var/flying = FALSE + var/obj/effect/flyer_shadow/shadow + +/datum/action/item_action/organ_action/use/flight/Destroy() + if(shadow) + QDEL_NULL(shadow) + return ..() + +/datum/action/item_action/organ_action/use/flight/Trigger() + /*if(trigger_flags & TRIGGER_SECONDARY_ACTION) + to_chat(owner, "I am currently [flying ? "" : "not"] flying.") + return*/ + if(!flying) + if(!can_fly()) + return + if(do_after(owner, 5 SECONDS, owner)) + start_flying() + return + if(do_after(owner, 5 SECONDS, owner)) + stop_flying() + +/datum/action/item_action/organ_action/use/flight/proc/can_fly() + if(!isliving(owner)) + return FALSE + var/mob/living/flier = owner + /*if(flier.get_encumbrance() > 0.7) + to_chat(owner, span_warning("I am too heavy!")) + return FALSE*/ + if(!isturf(flier.loc)) + to_chat(flier, span_warning("I need space to fly!")) + return FALSE + if(!CHECK_MULTIPLE_BITFIELDS(flier.mobility_flags, MOBILITY_STAND)) + to_chat(flier, span_warning("I can't spread my wings!")) + return FALSE + if(IS_DEAD_OR_INCAP(flier)) + return FALSE + + return TRUE + +/*/datum/action/item_action/organ_action/use/flight/apply_button_background(atom/movable/screen/movable/action_button/current_button) + if(active_background_icon_state) + background_icon_state = is_action_active(current_button) ? active_background_icon_state : initial(src.background_icon_state) + return ..()*/ + +/*/datum/action/item_action/organ_action/use/flight/is_action_active(atom/movable/screen/movable/action_button/current_button) + return flying*/ + +// Start flying normally +/datum/action/item_action/organ_action/use/flight/proc/start_flying() + var/turf/turf = get_turf(owner) + if(owner.can_zTravel(direction = UP)) + if(isopenspace(GET_TURF_ABOVE(turf))) + turf = GET_TURF_ABOVE(turf) + owner.movement_type |= FLYING + flying = TRUE + to_chat(owner, span_notice("I start flying.")) + init_signals() + if(turf != get_turf(owner)) + var/matrix/original = owner.transform + var/prev_alpha = owner.alpha + var/prev_pixel_z = owner.pixel_z + animate(owner, pixel_z = 156, alpha = 0, time = 1.5 SECONDS, easing = EASE_IN, flags = ANIMATION_PARALLEL|ANIMATION_RELATIVE) + animate(owner, transform = matrix() * 6, time = 1 SECONDS, easing = EASE_IN, flags = ANIMATION_PARALLEL) + animate(transform = original, time = 0.5 SECONDS, EASE_OUT) + owner.pixel_z = prev_pixel_z + owner.alpha = prev_alpha + owner.forceMove(turf) + //build_all_button_icons(update_flags = UPDATE_BUTTON_BACKGROUND) + +/datum/action/item_action/organ_action/use/flight/proc/init_signals() + RegisterSignal(owner, COMSIG_MOB_APPLY_DAMGE, PROC_REF(check_damage)) + RegisterSignal(owner, COMSIG_MOVABLE_MOVED, PROC_REF(check_movement)) + RegisterSignal(owner, COMSIG_LIVING_SET_RESTING, PROC_REF(fall)) + RegisterSignal(owner, COMSIG_LIVING_STATUS_STUN, PROC_REF(fall)) + RegisterSignal(owner, COMSIG_LIVING_STATUS_PARALYZE, PROC_REF(fall)) + RegisterSignal(owner, COMSIG_LIVING_STATUS_IMMOBILIZE, PROC_REF(fall)) + RegisterSignal(owner, COMSIG_LIVING_STATUS_UNCONSCIOUS, PROC_REF(fall)) + RegisterSignal(owner, COMSIG_LIVING_STATUS_SLEEP, PROC_REF(fall)) + +// Stop flying normally +/datum/action/item_action/organ_action/use/flight/proc/stop_flying() + var/turf/turf = get_turf(owner) + if(isopenspace(turf)) + if(owner.can_zTravel(direction = DOWN)) + turf = GET_TURF_BELOW(turf) + to_chat(owner, span_notice("I stop flying.")) + if(turf != get_turf(owner)) + var/matrix/original = owner.transform + var/prev_alpha = owner.alpha + var/prev_pixel_z = owner.pixel_z + owner.alpha = 0 + owner.pixel_z = 156 + owner.transform = matrix() * 8 + owner.forceMove(turf) + animate(owner, pixel_z = prev_pixel_z, alpha = prev_alpha, time = 1.2 SECONDS, easing = EASE_IN, flags = ANIMATION_PARALLEL) + animate(owner, transform = original, time = 1.2 SECONDS, easing = EASE_IN, flags = ANIMATION_PARALLEL) + + remove_signals() + //build_all_button_icons(update_flags = UPDATE_BUTTON_BACKGROUND) + +/datum/action/item_action/organ_action/use/flight/proc/remove_signals() + owner.movement_type &= ~FLYING + flying = FALSE + + UnregisterSignal(owner, list( + COMSIG_MOB_APPLY_DAMGE, + COMSIG_MOVABLE_MOVED, + COMSIG_LIVING_SET_RESTING, + COMSIG_LIVING_STATUS_STUN, + COMSIG_LIVING_STATUS_PARALYZE, + COMSIG_LIVING_STATUS_IMMOBILIZE, + COMSIG_LIVING_STATUS_UNCONSCIOUS, + COMSIG_LIVING_STATUS_SLEEP + )) + + // The fact we have to do this is awful + var/turf/open = get_turf(owner) + if(isopenspace(open)) + open.zFall(owner) + + if(shadow) + QDEL_NULL(shadow) + +// Fall out the sky like a brick, no animation +/datum/action/item_action/organ_action/use/flight/proc/fall(datum/source) + SIGNAL_HANDLER + + remove_signals() + //build_all_button_icons(update_flags = UPDATE_BUTTON_BACKGROUND) + +/datum/action/item_action/organ_action/use/flight/proc/check_damage(datum/source, damage, damagetype, def_zone) + SIGNAL_HANDLER + + if(damagetype != BRUTE || damagetype != BURN) + return + + if(prob(damage / 4)) + to_chat(owner, span_warning("The damage knocks you out of the air!")) + fall() + if(isliving(owner)) + var/mob/living/flier = owner + flier.Knockdown(2 SECONDS) + +/datum/action/item_action/organ_action/use/flight/proc/check_movement(datum/source) + SIGNAL_HANDLER + + if(owner.movement_type & FLYING) + if(!can_fly()) + stop_flying(owner) + return + + if(!owner.stamina_add(-3)) + to_chat(owner, span_warning("You're too exhausted to keep flying!")) + stop_flying(owner) + return + + if(shadow) + if(!istransparentturf(get_turf(owner))) + shadow.alpha= 0 + else + shadow.alpha = 255 + + var/turf/below_turf = GET_TURF_BELOW(get_turf(owner)) + if(below_turf) + shadow.forceMove(below_turf) + else + var/turf/below_turf = GET_TURF_BELOW(get_turf(owner)) + if(below_turf && istransparentturf(get_turf(owner))) + shadow = new /obj/effect/flyer_shadow(below_turf, owner) + diff --git a/modular_causticcove/icons/roguetown/harpies/f/harpy.dmi b/modular_causticcove/icons/roguetown/harpies/f/harpy.dmi new file mode 100644 index 0000000000000000000000000000000000000000..1744c70507e747263409753222a650c726dec848 GIT binary patch literal 10331 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 P3qq<&ny69*s~7(V4;j_$ literal 0 HcmV?d00001 diff --git a/modular_causticcove/icons/roguetown/harpies/m/harpy.dmi b/modular_causticcove/icons/roguetown/harpies/m/harpy.dmi new file mode 100644 index 0000000000000000000000000000000000000000..2bc12d013e0c14a94ad39038b1ce0ab7002b263b GIT binary patch literal 4462 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 literal 0 HcmV?d00001 diff --git a/roguetown.dme b/roguetown.dme index 4284b9d0..df6b8de5 100644 --- a/roguetown.dme +++ b/roguetown.dme @@ -2464,15 +2464,21 @@ #include "modular_azurepeak\virtues\thief.dm" #include "modular_azurepeak\virtues\utility.dm" #include "modular_causticcove\code\modules\clothing\rogueclothes\armor.dm" -#include "modular_causticcove\code\modules\roguetown\roguecrafting\sewing.dm" -#include "modular_causticcove\code\modules\standardized_sprite\standardized_sprite_verb.dm" -#include "modular_causticcove\code\modules\sizecats\prefs.dm" -#include "modular_causticcove\code\modules\sizecats\sizecat_types.dm" -#include "modular_causticcove\code\modules\sizecats\sizecats.dm" +#include "modular_causticcove\code\modules\harpies\_harpy_defines.dm" +#include "modular_causticcove\code\modules\harpies\abberant_eater.dm" +#include "modular_causticcove\code\modules\harpies\harpy_compat.dm" +#include "modular_causticcove\code\modules\harpies\harpy_organs.dm" +#include "modular_causticcove\code\modules\harpies\harpy_species.dm" +#include "modular_causticcove\code\modules\harpies\wings.dm" #include "modular_causticcove\code\modules\micromacrointeractions\helperfunctions.dm" #include "modular_causticcove\code\modules\micromacrointeractions\microholder.dm" #include "modular_causticcove\code\modules\micromacrointeractions\prefs.dm" #include "modular_causticcove\code\modules\micromacrointeractions\scoop.dm" +#include "modular_causticcove\code\modules\roguetown\roguecrafting\sewing.dm" +#include "modular_causticcove\code\modules\sizecats\prefs.dm" +#include "modular_causticcove\code\modules\sizecats\sizecat_types.dm" +#include "modular_causticcove\code\modules\sizecats\sizecats.dm" +#include "modular_causticcove\code\modules\standardized_sprite\standardized_sprite_verb.dm" #include "modular_causticcove\code\modules\vore\persistence.dm" #include "modular_causticcove\code\modules\vore\SSbellies.dm" #include "modular_causticcove\code\modules\vore\eating\belly_dat_vr.dm" From ddf0e3ce43b4a82de2b17ea800a98060fa3a06df Mon Sep 17 00:00:00 2001 From: Ldip999 <60290575+Ldip999@users.noreply.github.com> Date: Thu, 11 Sep 2025 06:38:37 +0200 Subject: [PATCH 60/66] Miacraft (#54) * Miacraft! * Restores last recipe * Hides empty categories * I commited without testing :/ * Sorting alphabetically * Remembers your pref and demolishes perf * search function * Quick craft button * Sell price * Legacy craft toggle --- code/_onclick/hud/screen_objects.dm | 5 +- code/datums/components/crafting/crafting.dm | 68 ++++++++---- tgui/packages/tgui/interfaces/MiaCraft.js | 113 ++++++++++++++++++++ tgui/packages/tgui/routes.tsx | 2 + 4 files changed, 165 insertions(+), 23 deletions(-) create mode 100644 tgui/packages/tgui/interfaces/MiaCraft.js diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index cd5177cd..29470326 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -136,7 +136,10 @@ if(H.craftingthing) last_craft = world.time var/datum/component/personal_crafting/C = H.craftingthing - C.roguecraft(location, control, params, H) + if(H.client.legacycraft) + C.roguecraft(location, control, params, H) + else + C.ui_interact(H) else testing("what") diff --git a/code/datums/components/crafting/crafting.dm b/code/datums/components/crafting/crafting.dm index 0ce5bcee..a4dac439 100644 --- a/code/datums/components/crafting/crafting.dm +++ b/code/datums/components/crafting/crafting.dm @@ -26,6 +26,7 @@ var/datum/action/innate/crafting/button var/display_craftable_only = TRUE var/display_compact = TRUE + var/showonlycraftable = TRUE @@ -443,7 +444,7 @@ if(user == parent) ui_interact(user) -/datum/component/personal_crafting/ui_interact(mob/user, datum/tgui/ui) +/*/datum/component/personal_crafting/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) if(!ui) cur_category = categories[1] @@ -454,15 +455,11 @@ cur_subcategory = CAT_NONE ui = new(user, src, "PersonalCrafting", "Crafting Menu", 700, 800) ui.set_state(GLOB.not_incapacitated_turf_state) - ui.open() + ui.open()*/ /datum/component/personal_crafting/ui_data(mob/user) var/list/data = list() data["busy"] = busy - data["category"] = cur_category - data["subcategory"] = cur_subcategory - data["display_craftable_only"] = display_craftable_only - data["display_compact"] = display_compact var/list/surroundings = get_surroundings(user) var/list/craftability = list() @@ -472,12 +469,10 @@ if(!R.always_availible && !(R.type in user?.mind?.learned_recipes)) //User doesn't actually know how to make this. continue - if((R.category != cur_category) || (R.subcategory != cur_subcategory)) - continue - - craftability["[REF(R)]"] = check_contents(R, surroundings) + craftability[R.name] = check_contents(R, surroundings) data["craftability"] = craftability + data["showonlycraftable"] = showonlycraftable return data /datum/component/personal_crafting/ui_static_data(mob/user) @@ -492,24 +487,37 @@ if(!R.always_availible && !(R.type in user?.mind?.learned_recipes)) //User doesn't actually know how to make this. continue - - if(isnull(crafting_recipes[R.category])) - crafting_recipes[R.category] = list() - - if(R.subcategory == CAT_NONE) - crafting_recipes[R.category] += list(build_recipe_data(R)) + var/category + if(R.skillcraft) + var/datum/skill/S = new R.skillcraft() + category = S.name else - if(isnull(crafting_recipes[R.category][R.subcategory])) - crafting_recipes[R.category][R.subcategory] = list() - crafting_recipes[R.category]["has_subcats"] = TRUE - crafting_recipes[R.category][R.subcategory] += list(build_recipe_data(R)) + category = "Other" + if(isnull(crafting_recipes[category])) + crafting_recipes[category] = list() + crafting_recipes[category] += list(build_recipe_data(R)) data["crafting_recipes"] = crafting_recipes return data +/datum/component/personal_crafting/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "MiaCraft", "Crafting Menu", 700, 800) + ui.set_state(GLOB.not_incapacitated_turf_state) + ui.open() /datum/component/personal_crafting/ui_act(action, params) - if(..()) + . = ..() + switch(action) + if("craft") + var/path = text2path(params["item"]) + var/recipe = new path + construct_item(usr, recipe) + usr.mind.lastrecipe = recipe + if("checkboxonlycraftable") + showonlycraftable = params["state"] + /*if(..()) return switch(action) if("make") @@ -536,12 +544,14 @@ cur_subcategory = "" else cur_subcategory = params["subcategory"] - . = TRUE + . = TRUE*/ /datum/component/personal_crafting/proc/build_recipe_data(datum/crafting_recipe/R) var/list/data = list() data["name"] = R.name data["ref"] = "[REF(R)]" + data["path"] = R.type + data["sellprice"] = R.sellprice var/req_text = "" var/tool_text = "" var/catalyst_text = "" @@ -569,6 +579,9 @@ tool_text = replacetext(tool_text,",","",-1) data["tool_text"] = tool_text + data["craftingdifficulty"] = R.craftdiff + + return data //Mind helpers @@ -586,6 +599,7 @@ // new crafting button interaction /datum/component/personal_crafting/proc/roguecraft(location, control, params, mob/user) + if(user.doing) return var/area/A = get_area(user) @@ -635,3 +649,13 @@ if(r) construct_item(user, r) user.mind.lastrecipe = r + + +/client/verb/toggle_legacycraft() + set name = "Toggle legacy craft" + set category = "Options" + set desc = "Toggles between legacy and miacraft" + usr.client.legacycraft = !legacycraft + +/client + var/legacycraft = FALSE \ No newline at end of file diff --git a/tgui/packages/tgui/interfaces/MiaCraft.js b/tgui/packages/tgui/interfaces/MiaCraft.js new file mode 100644 index 00000000..b3471d9a --- /dev/null +++ b/tgui/packages/tgui/interfaces/MiaCraft.js @@ -0,0 +1,113 @@ +import { useBackend, useSharedState } from '../backend'; +import { Window } from '../layouts'; +import { + Button, + LabeledList, + Collapsible, + Flex, + Input, +} from 'tgui-core/components'; +import { useState, useEffect} from 'react'; + +export const MiaCraft = (props, context) => { + const { act, data } = useBackend(); + const busy = data.busy; + const [category, setCategory] = useState(); + const [subcategory, setSubcategory] = useState(); + const craftability = Object.entries(data.craftability); + const [crafting_recipes] = useState(data.crafting_recipes); + let onlyCraftable = data.showonlycraftable; + const [searchText, setSearchText] = useState(""); + + return( + + + + + + + ToggleOnlyCraftable()} /> + + + SearcTextModify(e.target.value.toLowerCase())} /> + + + + + { + Object.entries(crafting_recipes).sort(([a], [b]) => String(a).localeCompare(String(b))).map(([key, item]) => ( + + )) + } + + + + + ); + + function ToggleOnlyCraftable() { + act('checkboxonlycraftable', { state : !onlyCraftable }); + } + function SearcTextModify(val) { + setSearchText(val); + } + + + +}; + + function CraftingCategory({ crafties, key3, onlyCraftable, craftability, key, actfunc, searchText }) { + const visibleElements = Object.entries(crafties).filter(([key2, item2]) => !onlyCraftable || craftability.some(object => object[0] === item2.name && object[1] === 1)).sort(([, aVal], [, bVal]) => String(aVal.name).localeCompare(String(bVal.name))).filter(([id, item]) => { return item.name.toLowerCase().includes(searchText); }); + return (visibleElements.length > 0 ? + + {visibleElements.map(([key2, item2]) => ( + + ))} + + + : null); + } + function CraftingRecipe({ recipe, key, craftability, actfunc }) { + return( + + + object[0] === recipe.name && object[1] === 1) ? "" : "grey" }}> + + + {recipe.req_text} + + + {recipe.craftingdifficulty} + + + {recipe.tool_text} + + + {recipe.catalyst_text} + + + {recipe.sellprice} + + +