From d67fce4185a80dc55b5f824e3c0cd7ebfcde1099 Mon Sep 17 00:00:00 2001 From: ModDownloading Date: Sun, 18 Jan 2026 19:22:19 -0500 Subject: [PATCH 01/13] Update _peculiarity.dm --- code/datums/quirks/peculiarity/_peculiarity.dm | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/code/datums/quirks/peculiarity/_peculiarity.dm b/code/datums/quirks/peculiarity/_peculiarity.dm index c8c6cb9a631..9f106911d41 100644 --- a/code/datums/quirks/peculiarity/_peculiarity.dm +++ b/code/datums/quirks/peculiarity/_peculiarity.dm @@ -68,6 +68,16 @@ // This is approximate since we randomized on spawn H.adjust_stat_modifier(STATMOD_QUIRK, STATKEY_INT, 3) +/datum/quirk/peculiarity/ugly + name = "Ugly" + desc = "Your appearance turns heads... in all the wrong ways. With features ranging from unsightly to grotesque, you likely have yet to find anyone impressed with your looks." + +/datum/quirk/peculiarity/ugly/on_spawn() + REMOVE_TRAIT(H, TRAIT_BEAUTIFUL, TRAIT_GENERIC) + REMOVE_TRAIT(H, TRAIT_FISHFACE, TRAIT_GENERIC) + + ADD_TRAIT(H, TRAIT_UGLY, TRAIT_GENERIC) + /datum/quirk/peculiarity/virgin name = "Virgin" desc = "YOU... ARE MAIDENLESS!! you never were good with women... or men, whether cause you are a awkward freak, or religous reasons, or simply plain unlucky, your blood remains untainted and pure." From 94a8e1798a7b2223dbb907b5e71367996a34e662 Mon Sep 17 00:00:00 2001 From: ModDownloading Date: Sun, 18 Jan 2026 19:29:50 -0500 Subject: [PATCH 02/13] Remove Night Vision, add Packmule --- code/datums/quirks/boon/_boon.dm | 42 ++++++++++++++------------------ 1 file changed, 18 insertions(+), 24 deletions(-) diff --git a/code/datums/quirks/boon/_boon.dm b/code/datums/quirks/boon/_boon.dm index ba6cf8c4818..122db6b0bb7 100644 --- a/code/datums/quirks/boon/_boon.dm +++ b/code/datums/quirks/boon/_boon.dm @@ -10,30 +10,6 @@ /datum/quirk/vice/bad_sight ) -/datum/quirk/boon/night_vision - name = "Night Vision" - desc = "You can see better in darkness than most. Perhaps you have elf blood, or maybe you just spent too many nights as a watchman." - point_value = -4 - incompatible_quirks = list( - /datum/quirk/vice/bad_sight, - /datum/quirk/vice/cyclops_left, - /datum/quirk/vice/cyclops_right - ) - -/datum/quirk/boon/night_vision/on_spawn() - if(!ishuman(owner)) - return - var/mob/living/carbon/human/H = owner - H.lighting_alpha = LIGHTING_PLANE_ALPHA_LESSER_NV_TRAIT - H.update_sight() - -/datum/quirk/boon/night_vision/on_remove() - if(!ishuman(owner)) - return - var/mob/living/carbon/human/H = owner - H.lighting_alpha = initial(H.lighting_alpha) - H.update_sight() - /datum/quirk/boon/light_footed name = "Light Footed" desc = "You move with grace and agility. Your steps are quieter then most." @@ -302,6 +278,24 @@ L = null tent = null +/datum/quirk/boon/packmule + name = "Packmule" + desc = "There's no such thing as having too much storage! You start with a backpack." + point_value = -8 + preview_render = FALSE + + var/obj/item/storage/backpack/B + +/datum/quirk/boon/packmule/after_job_spawn(datum/job/job) + var/turf/T = get_turf(owner) + B = new(T) + if(!owner.equip_to_appropriate_slot(B) || isturf(B.loc)) //missing a limb can cause phantom success procs + for(var/obj/item/storage/storage in owner.contents) + if(storage) + if(SEND_SIGNAL(storage, COMSIG_TRY_STORAGE_INSERT, B, null)) + break + B = null + /datum/quirk/boon/rider name = "Experienced Rider" desc = "You begin with expert riding skills and your own mount." From 06ca52c20e66d30987ab0a80ed2b0d70b905dc37 Mon Sep 17 00:00:00 2001 From: ModDownloading Date: Sun, 18 Jan 2026 19:42:19 -0500 Subject: [PATCH 03/13] Update _peculiarity.dm --- code/datums/quirks/peculiarity/_peculiarity.dm | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/code/datums/quirks/peculiarity/_peculiarity.dm b/code/datums/quirks/peculiarity/_peculiarity.dm index 9f106911d41..b97da807e18 100644 --- a/code/datums/quirks/peculiarity/_peculiarity.dm +++ b/code/datums/quirks/peculiarity/_peculiarity.dm @@ -73,11 +73,21 @@ desc = "Your appearance turns heads... in all the wrong ways. With features ranging from unsightly to grotesque, you likely have yet to find anyone impressed with your looks." /datum/quirk/peculiarity/ugly/on_spawn() + if(!ishuman(owner)) + return + var/mob/living/carbon/human/H = owner + REMOVE_TRAIT(H, TRAIT_BEAUTIFUL, TRAIT_GENERIC) REMOVE_TRAIT(H, TRAIT_FISHFACE, TRAIT_GENERIC) ADD_TRAIT(H, TRAIT_UGLY, TRAIT_GENERIC) +/datum/quirk/peculiarity/ugly/on_remove() + if(!ishuman(owner)) + return + var/mob/living/carbon/human/H = owner + REMOVE_TRAIT(H, TRAIT_UGLY, TRAIT_GENERIC) + /datum/quirk/peculiarity/virgin name = "Virgin" desc = "YOU... ARE MAIDENLESS!! you never were good with women... or men, whether cause you are a awkward freak, or religous reasons, or simply plain unlucky, your blood remains untainted and pure." From 3c831bfcbd36cdc5a386014d30189c5da3dd52b7 Mon Sep 17 00:00:00 2001 From: ModDownloading Date: Sun, 18 Jan 2026 19:49:04 -0500 Subject: [PATCH 04/13] Remove references to Night Vision (thank you Snowys_Eshi!) --- code/datums/quirks/vices/physical_vice.dm | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/code/datums/quirks/vices/physical_vice.dm b/code/datums/quirks/vices/physical_vice.dm index 4250c8e3813..fa1492b9091 100644 --- a/code/datums/quirks/vices/physical_vice.dm +++ b/code/datums/quirks/vices/physical_vice.dm @@ -38,9 +38,6 @@ name = "Cyclops (R)" desc = "I lost my right eye long ago. But it made me great at noticing things." point_value = 2 - incompatible_quirks = list( - /datum/quirk/boon/night_vision - ) /datum/quirk/vice/cyclops_right/on_spawn() if(!ishuman(owner)) @@ -59,9 +56,6 @@ name = "Cyclops (L)" desc = "I lost my left eye long ago. But it made me great at noticing things." point_value = 2 - incompatible_quirks = list( - /datum/quirk/boon/night_vision - ) /datum/quirk/vice/cyclops_left/on_spawn() if(!ishuman(owner)) @@ -352,7 +346,7 @@ var/turf/key_location = pick(nearby_turfs) K.forceMove(key_location) -/datum/quirk/vice/nightmares +/datum/quirk/vice/mares name = "Nightmares" desc = "You suffer from terrible nightmares. You scream in your sleep and take longer to rest." point_value = 1 From d1ab665c2bd7fa0eb7d6b57de20440388fe44c94 Mon Sep 17 00:00:00 2001 From: ModDownloading Date: Sun, 18 Jan 2026 19:58:29 -0500 Subject: [PATCH 05/13] Fix a dumb typo --- code/datums/quirks/vices/physical_vice.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/datums/quirks/vices/physical_vice.dm b/code/datums/quirks/vices/physical_vice.dm index fa1492b9091..5bf0a80ffa8 100644 --- a/code/datums/quirks/vices/physical_vice.dm +++ b/code/datums/quirks/vices/physical_vice.dm @@ -346,7 +346,7 @@ var/turf/key_location = pick(nearby_turfs) K.forceMove(key_location) -/datum/quirk/vice/mares +/datum/quirk/vice/nightmares name = "Nightmares" desc = "You suffer from terrible nightmares. You scream in your sleep and take longer to rest." point_value = 1 From ffbae0769ee540ec90babcda2f4e68ecd217f8b4 Mon Sep 17 00:00:00 2001 From: ModDownloading Date: Wed, 18 Feb 2026 00:06:03 -0500 Subject: [PATCH 06/13] Update prisoner.dm --- .../jobs/job_types/peasants/prisoner.dm | 36 +++++++++++++------ 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/code/modules/jobs/job_types/peasants/prisoner.dm b/code/modules/jobs/job_types/peasants/prisoner.dm index 9c60aa8a8dd..6236bbd7bc3 100644 --- a/code/modules/jobs/job_types/peasants/prisoner.dm +++ b/code/modules/jobs/job_types/peasants/prisoner.dm @@ -17,10 +17,9 @@ banned_leprosy = FALSE bypass_lastclass = TRUE - allowed_races = RACES_PLAYER_FOREIGNNOBLE + allowed_races = RACES_PLAYER_ALL outfit = /datum/outfit/prisoner - give_bank_account = 173 cmode_music = 'sound/music/cmode/towner/CombatPrisoner.ogg' can_have_apprentices = FALSE @@ -28,8 +27,8 @@ jobstats = list( STATKEY_STR = -1, - STATKEY_PER = 2, - STATKEY_INT = 2, + STATKEY_PER = -1, + STATKEY_INT = -1, STATKEY_SPD = -1, STATKEY_CON = -1, STATKEY_END = -1 @@ -38,25 +37,40 @@ skills = list( /datum/skill/combat/wrestling = 1, /datum/skill/combat/knives = 1, - /datum/skill/combat/swords = 2, /datum/skill/combat/unarmed = 1, /datum/skill/misc/swimming = 2, /datum/skill/misc/athletics = 1, - /datum/skill/misc/reading = 2, /datum/skill/misc/climbing = 2, /datum/skill/misc/sneaking = 3, /datum/skill/misc/lockpicking = 2, - /datum/skill/misc/riding = 1, - /datum/skill/labor/mathematics = 3 ) traits = list( - TRAIT_BANDITCAMP, - TRAIT_NOBLE + TRAIT_BANDITCAMP ) /datum/job/prisoner/after_spawn(mob/living/carbon/human/spawned, client/player_client) . = ..() + var/prisonertype = "Commoner" //If you're Tiefling, Hollowkin, or Medicator, this is your only option. + if((spawned.dna.species.id != SPEC_ID_TIEFLING) && (spawned.dna.species.id != SPEC_ID_HOLLOWKIN) && (spawned.dna.species.id != SPEC_ID_MEDICATOR)) + prisonertype = browser_input_list(H, "What kind of prisoner are you?", "Filthy Criminal", list("Noble", "Commoner")) + if(prisonertype == "Noble") + SStreasury.create_bank_account(spawned, 173) + spawned.adjust_skillrank(/datum/skill/combat/swords, 2, TRUE) + spawned.adjust_skillrank(/datum/skill/misc/reading, 2, TRUE) + spawned.adjust_skillrank(/datum/skill/misc/riding, 1, TRUE) + spawned.adjust_skillrank(/datum/skill/labor/mathematics, 3, TRUE) + spawned.adjust_stat_modifier(STATMOD_JOB, STATKEY_PER, 3) + spawned.adjust_stat_modifier(STATMOD_JOB, STATKEY_INT, 3) + ADD_TRAIT(spawned, TRAIT_NOBLE, TRAIT_GENERIC) + else + spawned.adjust_skillrank(/datum/skill/combat/wrestling, 1, TRUE) + spawned.adjust_skillrank(/datum/skill/combat/knives, 1, TRUE) + spawned.adjust_skillrank(/datum/skill/misc/stealing, 3, TRUE) + spawned.adjust_skillrank(/datum/skill/misc/lockpicking, 1, TRUE) + spawned.adjust_skillrank(/datum/skill/misc/sewing, 2, TRUE) //so they're slightly better at the three things they can do while incarcerated. + spawned.adjust_skillrank(/datum/skill/labor/farming, 2, TRUE) + spawned.adjust_skillrank(/datum/skill/labor/fishing, 2, TRUE) if(spawned.wear_mask) var/obj/I = spawned.wear_mask spawned.dropItemToGround(spawned.wear_mask, TRUE) @@ -65,4 +79,4 @@ /datum/outfit/prisoner name = "Prisoner" pants = /obj/item/clothing/pants/loincloth/colored/brown - mask = /obj/item/clothing/face/facemask/prisoner \ No newline at end of file + mask = /obj/item/clothing/face/facemask/prisoner From ec234f1eae89b8fd96c3e60ce6146b6fd2acf0d0 Mon Sep 17 00:00:00 2001 From: ModDownloading Date: Wed, 18 Feb 2026 00:07:38 -0500 Subject: [PATCH 07/13] Update prisoner.dm --- code/modules/jobs/job_types/peasants/prisoner.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/jobs/job_types/peasants/prisoner.dm b/code/modules/jobs/job_types/peasants/prisoner.dm index 6236bbd7bc3..440b4763a7a 100644 --- a/code/modules/jobs/job_types/peasants/prisoner.dm +++ b/code/modules/jobs/job_types/peasants/prisoner.dm @@ -71,6 +71,8 @@ spawned.adjust_skillrank(/datum/skill/misc/sewing, 2, TRUE) //so they're slightly better at the three things they can do while incarcerated. spawned.adjust_skillrank(/datum/skill/labor/farming, 2, TRUE) spawned.adjust_skillrank(/datum/skill/labor/fishing, 2, TRUE) + spawned.adjust_stat_modifier(STATMOD_JOB, STATKEY_SPD, 3) + spawned.adjust_stat_modifier(STATMOD_JOB, STATKEY_END, 3) if(spawned.wear_mask) var/obj/I = spawned.wear_mask spawned.dropItemToGround(spawned.wear_mask, TRUE) From 3d7ec8a06a47f91e21a0ecc460c7abde32fe524c Mon Sep 17 00:00:00 2001 From: ModDownloading Date: Wed, 18 Feb 2026 00:08:05 -0500 Subject: [PATCH 08/13] Update prisoner.dm --- code/modules/jobs/job_types/peasants/prisoner.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/jobs/job_types/peasants/prisoner.dm b/code/modules/jobs/job_types/peasants/prisoner.dm index 440b4763a7a..337602c9e42 100644 --- a/code/modules/jobs/job_types/peasants/prisoner.dm +++ b/code/modules/jobs/job_types/peasants/prisoner.dm @@ -71,8 +71,8 @@ spawned.adjust_skillrank(/datum/skill/misc/sewing, 2, TRUE) //so they're slightly better at the three things they can do while incarcerated. spawned.adjust_skillrank(/datum/skill/labor/farming, 2, TRUE) spawned.adjust_skillrank(/datum/skill/labor/fishing, 2, TRUE) - spawned.adjust_stat_modifier(STATMOD_JOB, STATKEY_SPD, 3) - spawned.adjust_stat_modifier(STATMOD_JOB, STATKEY_END, 3) + spawned.adjust_stat_modifier(STATMOD_JOB, STATKEY_SPD, 2) + spawned.adjust_stat_modifier(STATMOD_JOB, STATKEY_END, 2) if(spawned.wear_mask) var/obj/I = spawned.wear_mask spawned.dropItemToGround(spawned.wear_mask, TRUE) From f720d4e311b09e2f62ca7b21317683325f31c903 Mon Sep 17 00:00:00 2001 From: ModDownloading Date: Wed, 18 Feb 2026 00:09:02 -0500 Subject: [PATCH 09/13] Update prisoner.dm --- code/modules/jobs/job_types/peasants/prisoner.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/jobs/job_types/peasants/prisoner.dm b/code/modules/jobs/job_types/peasants/prisoner.dm index 337602c9e42..48e42acc08b 100644 --- a/code/modules/jobs/job_types/peasants/prisoner.dm +++ b/code/modules/jobs/job_types/peasants/prisoner.dm @@ -2,7 +2,7 @@ title = "Prisoner" tutorial = "For a crime, or false allegation; as a hostage against another, \ or held for ransom: your fate until this day has been ill-starred save its first. \ - You are of noble birth. Perhaps your story, which none but you recall, \ + Perhaps your story, which none but you recall, \ will move some pity from callous hearts or promises of riches parole your release. \ Maybe your old associates conspire now to release you in a daring rescue. \ Yet it is far surer that your tears will rust this cursed mask \ From 32b6ab05deaf39de53689bcc11ba3c2313ebbe44 Mon Sep 17 00:00:00 2001 From: ModDownloading Date: Wed, 18 Feb 2026 10:11:23 -0500 Subject: [PATCH 10/13] Fixes a dumb typo --- code/modules/jobs/job_types/peasants/prisoner.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/jobs/job_types/peasants/prisoner.dm b/code/modules/jobs/job_types/peasants/prisoner.dm index 48e42acc08b..6082aff6dba 100644 --- a/code/modules/jobs/job_types/peasants/prisoner.dm +++ b/code/modules/jobs/job_types/peasants/prisoner.dm @@ -53,7 +53,7 @@ . = ..() var/prisonertype = "Commoner" //If you're Tiefling, Hollowkin, or Medicator, this is your only option. if((spawned.dna.species.id != SPEC_ID_TIEFLING) && (spawned.dna.species.id != SPEC_ID_HOLLOWKIN) && (spawned.dna.species.id != SPEC_ID_MEDICATOR)) - prisonertype = browser_input_list(H, "What kind of prisoner are you?", "Filthy Criminal", list("Noble", "Commoner")) + prisonertype = browser_input_list(spawned, "What kind of prisoner are you?", "Filthy Criminal", list("Noble", "Commoner")) if(prisonertype == "Noble") SStreasury.create_bank_account(spawned, 173) spawned.adjust_skillrank(/datum/skill/combat/swords, 2, TRUE) From f98826224f38eda6fc4954c3dbc8ba4b992e3c22 Mon Sep 17 00:00:00 2001 From: ModDownloading Date: Fri, 20 Feb 2026 13:48:52 -0500 Subject: [PATCH 11/13] Future-proofing and menu fix --- code/modules/jobs/job_types/peasants/prisoner.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/jobs/job_types/peasants/prisoner.dm b/code/modules/jobs/job_types/peasants/prisoner.dm index 6082aff6dba..345599d8638 100644 --- a/code/modules/jobs/job_types/peasants/prisoner.dm +++ b/code/modules/jobs/job_types/peasants/prisoner.dm @@ -52,8 +52,8 @@ /datum/job/prisoner/after_spawn(mob/living/carbon/human/spawned, client/player_client) . = ..() var/prisonertype = "Commoner" //If you're Tiefling, Hollowkin, or Medicator, this is your only option. - if((spawned.dna.species.id != SPEC_ID_TIEFLING) && (spawned.dna.species.id != SPEC_ID_HOLLOWKIN) && (spawned.dna.species.id != SPEC_ID_MEDICATOR)) - prisonertype = browser_input_list(spawned, "What kind of prisoner are you?", "Filthy Criminal", list("Noble", "Commoner")) + if(spawned.dna?.species?.id in RACES_PLAYER_FOREIGNNOBLE) + prisonertype = browser_input_list(player_client, "What kind of prisoner are you?", "Filthy Criminal", list("Noble", "Commoner")) if(prisonertype == "Noble") SStreasury.create_bank_account(spawned, 173) spawned.adjust_skillrank(/datum/skill/combat/swords, 2, TRUE) From 69514140a8a121c79f747f079d840a72505bc86a Mon Sep 17 00:00:00 2001 From: forest2001 <41653574+realforest2001@users.noreply.github.com> Date: Tue, 24 Feb 2026 10:49:25 +0000 Subject: [PATCH 12/13] Apply suggestion from @realforest2001 --- code/modules/jobs/job_types/peasants/prisoner.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/jobs/job_types/peasants/prisoner.dm b/code/modules/jobs/job_types/peasants/prisoner.dm index 4abb42aff44..6760cda8b71 100644 --- a/code/modules/jobs/job_types/peasants/prisoner.dm +++ b/code/modules/jobs/job_types/peasants/prisoner.dm @@ -63,7 +63,7 @@ spawned.adjust_skillrank(/datum/skill/labor/mathematics, 3, TRUE) spawned.adjust_stat_modifier(STATMOD_JOB, STATKEY_PER, 3) spawned.adjust_stat_modifier(STATMOD_JOB, STATKEY_INT, 3) - ADD_TRAIT(spawned, TRAIT_NOBLE, TRAIT_GENERIC) + ADD_TRAIT(spawned, TRAIT_NOBLE_BLOOD, TRAIT_GENERIC) else spawned.adjust_skillrank(/datum/skill/combat/wrestling, 1, TRUE) spawned.adjust_skillrank(/datum/skill/combat/knives, 1, TRUE) From b943c605eaff605465c35d0855be787f27d8f8f7 Mon Sep 17 00:00:00 2001 From: forest2001 <41653574+realforest2001@users.noreply.github.com> Date: Tue, 24 Feb 2026 10:54:44 +0000 Subject: [PATCH 13/13] Apply suggestion from @realforest2001 --- code/modules/jobs/job_types/peasants/prisoner.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/jobs/job_types/peasants/prisoner.dm b/code/modules/jobs/job_types/peasants/prisoner.dm index 6760cda8b71..4d02cbae60e 100644 --- a/code/modules/jobs/job_types/peasants/prisoner.dm +++ b/code/modules/jobs/job_types/peasants/prisoner.dm @@ -69,7 +69,7 @@ spawned.adjust_skillrank(/datum/skill/combat/knives, 1, TRUE) spawned.adjust_skillrank(/datum/skill/misc/stealing, 3, TRUE) spawned.adjust_skillrank(/datum/skill/misc/lockpicking, 1, TRUE) - spawned.adjust_skillrank(/datum/skill/misc/sewing, 2, TRUE) //so they're slightly better at the three things they can do while incarcerated. + spawned.adjust_skillrank(/datum/skill/craft/sewing, 2, TRUE) //so they're slightly better at the three things they can do while incarcerated. spawned.adjust_skillrank(/datum/skill/labor/farming, 2, TRUE) spawned.adjust_skillrank(/datum/skill/labor/fishing, 2, TRUE) spawned.adjust_stat_modifier(STATMOD_JOB, STATKEY_SPD, 2)