From 45ddf99fcefaa6e272cc6f3d668bf358d6088ceb Mon Sep 17 00:00:00 2001 From: Rudy Date: Fri, 28 Nov 2025 16:27:27 -0800 Subject: [PATCH 01/14] Compliance Init --- code/__HELPERS/global_lists.dm | 7 ++++ .../migrant_waves/runaway_prisoners.dm | 2 +- code/datums/special_traits/traits/traits.dm | 2 +- code/modules/client/preferences.dm | 23 ++++++++++++ code/modules/client/preferences_savefile.dm | 11 ++++++ .../job_types/roguetown/adventurer/bandit.dm | 2 +- .../job_types/roguetown/adventurer/wretch.dm | 2 +- .../roguetown/youngfolk/vagabond/wanted.dm | 2 +- code/modules/roguetown/roguemachine/bounty.dm | 35 +++++++++++++++++-- modular_causticcove/code/datums/compliance.dm | 34 ++++++++++++++++++ roguetown.dme | 1 + 11 files changed, 114 insertions(+), 7 deletions(-) create mode 100644 modular_causticcove/code/datums/compliance.dm diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 87581d931f3..ed2ccec01a5 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -89,6 +89,13 @@ for(var/mob/living/carbon/human/species/wildshape/shape as anything in subtypesof(/mob/living/carbon/human/species/wildshape)) GLOB.wildshapes[shape.name] = shape + + //CC Begin + // Compliance Settings + for(var/path in subtypesof(/datum/compliance_setting)) + var/datum/compliance_setting/compliance_settings = new path() + GLOB.compliance_settings[path] = compliance_settings + //CC End //creates every subtype of prototype (excluding prototype) and adds it to list L. //if no list/L is provided, one is created. diff --git a/code/datums/migrants/migrant_waves/runaway_prisoners.dm b/code/datums/migrants/migrant_waves/runaway_prisoners.dm index 8134dbabe10..0271c33fc4e 100644 --- a/code/datums/migrants/migrant_waves/runaway_prisoners.dm +++ b/code/datums/migrants/migrant_waves/runaway_prisoners.dm @@ -156,7 +156,7 @@ var/my_crime = input(H, "What is your crime?", "Crime") as text|null if (!my_crime) my_crime = "crimes against the Crown" - add_bounty(H.real_name, race, gender, descriptor_height, descriptor_body, descriptor_voice, rand(100, 200), FALSE, my_crime, "The Justiciary of Azuria") + add_bounty(H.real_name, race, gender, descriptor_height, descriptor_body, descriptor_voice, rand(100, 200), FALSE, my_crime, "The Justiciary of Azuria", H.client.prefs.compliance) if(should_wear_femme_clothes(H)) shirt = /obj/item/clothing/suit/roguetown/shirt/dress/gen/random else if(should_wear_masc_clothes(H)) diff --git a/code/datums/special_traits/traits/traits.dm b/code/datums/special_traits/traits/traits.dm index ac6819406ef..159435a5bf2 100644 --- a/code/datums/special_traits/traits/traits.dm +++ b/code/datums/special_traits/traits/traits.dm @@ -416,7 +416,7 @@ reason = "heresy" if(7) reason = "robbing a noble" - add_bounty(character.real_name, amount, FALSE, reason, employer) + add_bounty(character.real_name, amount, FALSE, reason, employer, compliance = character.client.prefs.compliance) if(!silent) to_chat(character, span_notice("Whether I done it or not, I have been accused of [reason], and the [employer] put a bounty on my head!")) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 953460993c5..9904a06e056 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -223,6 +223,8 @@ GLOBAL_LIST_EMPTY(chosen_names) var/race_bonus + var/datum/compliance_setting/compliance + /datum/preferences/New(client/C) parent = C migrant = new /datum/migrant_pref(src) @@ -863,6 +865,7 @@ GLOBAL_LIST_EMPTY(chosen_names) dat += "" dat += "Be voice: [(toggles & SCHIZO_VOICE) ? "Enabled":"Disabled"]" dat += "
Toggle Admin Sounds: [(toggles & SOUND_MIDI) ? "Enabled":"Disabled"]" + dat += "
Set Compliance: [compliance ? compliance.name : "None"] " dat += "" dat += "" dat += "" @@ -2408,6 +2411,26 @@ Slots: [job.spawn_positions] [job.round_contrib_points ? "RCP: +[job.round_contr var/phobiaType = input(user, "What are you scared of?", "Character Preference", phobia) as null|anything in SStraumas.phobia_types if(phobiaType) phobia = phobiaType + //CC Edit Begin + if("compliance_setting") + var/list/compliance_choices = list("None") + for (var/path as anything in GLOB.compliance_settings) + var/datum/compliance_setting/compliance = GLOB.compliance_settings[path] + if (!compliance.name) + continue + compliance_choices[compliance.name] = compliance + + var/compliance_input = tgui_input_list(user, "Choose your character's compliance, this will be used to determine your threat level against other players and your bounties.", "ARE YOU COMPLIANT?", compliance_choices) + if(compliance_input) + if(compliance_input == "None") + compliance = null + to_chat(user, "You've decided to go with the flow.") + else + compliance = compliance_choices[compliance_input] + to_chat(user, "[compliance.name]") + if(compliance.desc) + to_chat(user, "[compliance.desc]") + //CC Edit End else switch(href_list["preference"]) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 466627e394f..731ec190055 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -466,6 +466,12 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car if (loadout_type5) loadout5 = new loadout_type5() +/datum/preferences/proc/_load_compliance(S) + var/compliance + S["compliance"] >> compliance + if (compliance) + compliance = new compliance() + /datum/preferences/proc/_load_loadout_colours(S) S["loadout_1_hex"] >> loadout_1_hex S["loadout_2_hex"] >> loadout_2_hex @@ -562,6 +568,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car //Caustic edit _load_sizecat(S) _load_pickupable(S) + _load_compliance(S) //Caustic edit end _load_culinary_preferences(S) // LETHALSTONE edit: jank-ass load our statpack choice @@ -837,6 +844,10 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["loadout5"] , loadout5.type) else WRITE_FILE(S["loadout5"] , null) + if(compliance) + WRITE_FILE(S["compliance"] , compliance.type) + else + WRITE_FILE(S["compliance"] , null) //Cove edit end //Familiar Files diff --git a/code/modules/jobs/job_types/roguetown/adventurer/bandit.dm b/code/modules/jobs/job_types/roguetown/adventurer/bandit.dm index 942d91b19b5..bd51beff88e 100644 --- a/code/modules/jobs/job_types/roguetown/adventurer/bandit.dm +++ b/code/modules/jobs/job_types/roguetown/adventurer/bandit.dm @@ -89,4 +89,4 @@ var/my_crime = input(H, "What is your crime?", "Crime") as text|null if (!my_crime) my_crime = "Brigandry" - add_bounty(H.real_name, race, gender, descriptor_height, descriptor_body, descriptor_voice, bounty_total, FALSE, my_crime, bounty_poster) + add_bounty(H.real_name, race, gender, descriptor_height, descriptor_body, descriptor_voice, bounty_total, FALSE, my_crime, bounty_poster, H.client.prefs.compliance) diff --git a/code/modules/jobs/job_types/roguetown/adventurer/wretch.dm b/code/modules/jobs/job_types/roguetown/adventurer/wretch.dm index da6d1db5705..2ef056b1669 100644 --- a/code/modules/jobs/job_types/roguetown/adventurer/wretch.dm +++ b/code/modules/jobs/job_types/roguetown/adventurer/wretch.dm @@ -83,7 +83,7 @@ var/my_crime = input(H, "What is your crime?", "Crime") as text|null if (!my_crime) my_crime = "crimes against the Crown" - add_bounty(H.real_name, race, gender, descriptor_height, descriptor_body, descriptor_voice, bounty_total, FALSE, my_crime, bounty_poster) + add_bounty(H.real_name, race, gender, descriptor_height, descriptor_body, descriptor_voice, bounty_total, FALSE, my_crime, bounty_poster, H.client.prefs.compliance) to_chat(H, span_danger("You are NOT an Antagonistic role. You are at most a 'soft-antag'. You are an outcast, an outlaw or a heretic. You are unwanted by society and potentially wanted with a bounty. Play this role in good faith and understand that sowing too much chaos will lead to consequences. This role does not give you the go ahead to attack others without warning, frag or spam skeletons in town. Your goal as a wretch is to pursue your personal goals and reach the end of the week alive and not in captivity. Remember this is HRP. ")) //Caustic Cove Edit /proc/update_wretch_slots() diff --git a/code/modules/jobs/job_types/roguetown/youngfolk/vagabond/wanted.dm b/code/modules/jobs/job_types/roguetown/youngfolk/vagabond/wanted.dm index ad73ffc099e..ede0a31ae78 100644 --- a/code/modules/jobs/job_types/roguetown/youngfolk/vagabond/wanted.dm +++ b/code/modules/jobs/job_types/roguetown/youngfolk/vagabond/wanted.dm @@ -59,7 +59,7 @@ var/descriptor_body = build_coalesce_description_nofluff(d_list, human, list(MOB_DESCRIPTOR_SLOT_BODY), "%DESC1%") var/descriptor_voice = build_coalesce_description_nofluff(d_list, human, list(MOB_DESCRIPTOR_SLOT_VOICE), "%DESC1%") - add_bounty(human.real_name, race, gender, descriptor_height, descriptor_body, descriptor_voice, bounty_amount, FALSE, my_crime, "The Justiciary of Azuria") + add_bounty(human.real_name, race, gender, descriptor_height, descriptor_body, descriptor_voice, bounty_amount, FALSE, my_crime, "The Justiciary of Azuria", human.client.prefs.compliance) if(tgui_alert(human, "Am i known criminal?", "OUTLAW", list("Nae", "Yae")) == "Yae") GLOB.outlawed_players += human.real_name diff --git a/code/modules/roguetown/roguemachine/bounty.dm b/code/modules/roguetown/roguemachine/bounty.dm index 740898468b4..50d07208b0c 100644 --- a/code/modules/roguetown/roguemachine/bounty.dm +++ b/code/modules/roguetown/roguemachine/bounty.dm @@ -21,6 +21,7 @@ var/amount var/reason var/employer + var/datum/compliance /// Whats displayed when consulting the bounties var/banner @@ -165,7 +166,7 @@ var/descriptor_voice = build_coalesce_description_nofluff(d_list, target, list(MOB_DESCRIPTOR_SLOT_VOICE), "%DESC1%") // Finally create bounty - add_bounty(target.real_name, race, gender, descriptor_height, descriptor_body, descriptor_voice, amount, FALSE, reason, user.real_name) + add_bounty(target.real_name, race, gender, descriptor_height, descriptor_body, descriptor_voice, amount, FALSE, reason, user.real_name, target.client.prefs.compliance) //Announce it locally and on scomm playsound(src, 'sound/misc/machinetalk.ogg', 100, FALSE, -1) @@ -175,7 +176,7 @@ message_admins("[ADMIN_LOOKUPFLW(user)] has set a bounty on [ADMIN_LOOKUPFLW(target)] with the reason of: '[reason]'") -/proc/add_bounty(target_realname, race, gender, descriptor_height, descriptor_body, descriptor_voice, amount, bandit_status, reason, employer_name) +/proc/add_bounty(target_realname, race, gender, descriptor_height, descriptor_body, descriptor_voice, amount, bandit_status, reason, employer_name, compliance) var/datum/bounty/new_bounty = new /datum/bounty new_bounty.amount = amount new_bounty.target = target_realname @@ -185,6 +186,7 @@ new_bounty.target_race = race new_bounty.target_height = lowertext(descriptor_height) new_bounty.target_body = lowertext(descriptor_body) + new_bounty.compliance = compliance if(descriptor_body == "Average" || descriptor_body == "Athletic") var/bro_unreal = "an " new_bounty.target_body_prefix = lowertext(bro_unreal += descriptor_body) @@ -210,14 +212,43 @@ switch(rand(1, 3)) if(1) new_bounty.banner += "A dire bounty hangs upon the capture of [new_bounty.target], for '[new_bounty.reason]'.
" + + //Handle Compliance + if(istype(new_bounty.compliance, /datum/compliance_setting/armed_dangerous)) + new_bounty.banner += "They are Armed and Dangerous. You may approach with weapons ready for a fight and attack without word. Ambushes are permitted.
" + if(istype(new_bounty.compliance, /datum/compliance_setting/armed_compliant)) + new_bounty.banner += "They are Armed and Compliant. You are to first speak civil until drawing weapons if they do not comply. Ambushes to DETAIN ONLY are permitted.
" + if(istype(new_bounty.compliance, /datum/compliance_setting/non_belligerent)) + new_bounty.banner += "They are Non-Belligerent. You are to not harm them unless they attack first. Ambushes are NOT permitted. Expect to speak peacefully.
" + new_bounty.banner += "They are a criminal belonging to the [new_bounty.target_race] race, going by the following description: they are [new_bounty.target_height], of a [new_bounty.target_body_type] build and they have [new_bounty.target_body_prefix] physique. They speak with [new_bounty.target_voice_prefix] voice.'.
" new_bounty.banner += "The patron, [new_bounty.employer], offers [new_bounty.amount] mammons for the task.
" + if(2) new_bounty.banner += "The capture of [new_bounty.target] is wanted for '[new_bounty.reason]''.
" + + //Handle Compliance + if(istype(new_bounty.compliance, /datum/compliance_setting/armed_dangerous)) + new_bounty.banner += "They are Armed and Dangerous. You may approach with weapons ready for a fight and attack without word. Ambushes are permitted.
" + if(istype(new_bounty.compliance, /datum/compliance_setting/armed_compliant)) + new_bounty.banner += "They are Armed and Compliant. You are to first speak civil until drawing weapons if they do not comply. Ambushes to DETAIN ONLY are permitted.
" + if(istype(new_bounty.compliance, /datum/compliance_setting/non_belligerent)) + new_bounty.banner += "They are Non-Belligerent. You are to not harm them unless they attack first. Ambushes are NOT permitted. Expect to speak peacefully.
" + new_bounty.banner += "They are a reprobate belonging to the [new_bounty.target_race] race, going by the following description: they are [new_bounty.target_height], of a [new_bounty.target_body_type] build and they have [new_bounty.target_body_prefix] physique. They speak with [new_bounty.target_voice_prefix] voice.'.
" new_bounty.banner += "The employer, [new_bounty.employer], offers [new_bounty.amount] mammons for the deed.
" + if(3) new_bounty.banner += "[new_bounty.employer] hath offered to pay [new_bounty.amount] mammons for the capture of [new_bounty.target].
" + + //Handle Compliance + if(istype(new_bounty.compliance, /datum/compliance_setting/armed_dangerous)) + new_bounty.banner += "They are Armed and Dangerous. You may approach with weapons ready for a fight and attack without word. Ambushes are permitted.
" + if(istype(new_bounty.compliance, /datum/compliance_setting/armed_compliant)) + new_bounty.banner += "They are Armed and Compliant. You are to first speak civil until drawing weapons if they do not comply. Ambushes to DETAIN ONLY are permitted.
" + if(istype(new_bounty.compliance, /datum/compliance_setting/non_belligerent)) + new_bounty.banner += "They are Non-Belligerent. You are to not harm them unless they attack first. Ambushes are NOT permitted. Expect to speak peacefully.
" + new_bounty.banner += "By reason of the following: '[new_bounty.reason]'.
" new_bounty.banner += "They are a heathen belonging to the [new_bounty.target_race] race, going by the following description: they are [new_bounty.target_height], of a [new_bounty.target_body_type] build and they have [new_bounty.target_body_prefix] physique. They speak with [new_bounty.target_voice_prefix] voice.'.
" new_bounty.banner += "--------------
" diff --git a/modular_causticcove/code/datums/compliance.dm b/modular_causticcove/code/datums/compliance.dm new file mode 100644 index 00000000000..3c41d459b1c --- /dev/null +++ b/modular_causticcove/code/datums/compliance.dm @@ -0,0 +1,34 @@ +GLOBAL_LIST_EMPTY(compliance_settings) + +/datum/compliance_setting + var/name = "Parent compliance datum" + var/desc + +/datum/compliance_setting/armed_dangerous + name = "Armed and Dangerous" + desc = "You are considered to be Armed and Dangerous. \n\n\ + You willingly allow hostile acts to be performed against you within reason, this does not allow you to enact RDM. \n\n\ + Ambushes can, and will most likely be used by other players against you. \n\n\ + Your bounty will be claimed with minimal, to no escalation whatsoever, as long as there is valid reason for these actions. \n\n\ + Anyone, at any time, anywhere, may kill you or capture you without word, and you could possibly never be revived for the rest of the round.\n\n\ + By choosing this, you are considered to be a cold-hearted killer, merciless and showing no remorse. You are, in essence, a monster who must pay for your capital crimes. \n\n\ + You cannot change this during gameplay. YOU HAVE BEEN WARNED." + +/datum/compliance_setting/armed_compliant + name = "Armed and Compliant" + desc = "You are considered to be Armed and compliant. \n\n\ + You willingly allow hostile acts to be performed against you, but only in a manner that is roleplayed or acted out. \n\n\ + Ambushes can, and will most likely be used by other players against you. \n\n\ + On the contrary, your bounty will be claimed with announced effort, and actions will be carried out through roleplay. \n\n\ + This option expects you to roleplay appropriately. \n\n\ + By choosing this, you are considered to be a bad person with bad intentions, but not too far gone that you cannot be reasoned with for your crimes. \n\n\ + You cannot change this during gameplay. YOU HAVE BEEN WARNED." + +/datum/compliance_setting/non_belligerent + name = "Non-Belligerent" + desc = "You are considered to be Non-Belligerent. \n\n\ + You do not allow combat, and are also not allowed to dish out combat against those claiming your bounties. \n\n\ + You typically do not have a high bounty, and are locked out of choosing higher pay bounties. \n\n\ + This tells the other person you do not wish to engage in mechanical PvP at all, outside of controlled scenarios. \n\n\ + By choosing this option, you are considered to be a pacifist, or somebody who has commited petty crimes. \n\n\ + You cannot change this during gameplay. YOU HAVE BEEN WARNED." diff --git a/roguetown.dme b/roguetown.dme index ff27dbc80a8..97310064655 100644 --- a/roguetown.dme +++ b/roguetown.dme @@ -3003,4 +3003,5 @@ #include "modular_hearthstone\code\modules\reagents\reagent_containers\lux.dm" #include "modular_causticcove\code\modules\cargo\packsrogue\merchant\weapons\merch_weapons_foreign.dm" #include "modular_causticcove\code\modules\cargo\packsrogue\merchant\weapons\merch_weapons_ranged.dm" +#include "modular_causticcove\code\datums\compliance.dm" // END_INCLUDE From df55e9079b7004271384cbcc209ae7ff01f48c9f Mon Sep 17 00:00:00 2001 From: Rudy Date: Fri, 28 Nov 2025 17:03:15 -0800 Subject: [PATCH 02/14] NonBell Bounty Reduction --- .../migrant_waves/runaway_prisoners.dm | 2 +- .../job_types/roguetown/adventurer/bandit.dm | 28 ++++++++----- .../job_types/roguetown/adventurer/wretch.dm | 40 +++++++++++++------ .../mob/living/carbon/human/examine.dm | 11 +++++ modular_causticcove/code/datums/compliance.dm | 21 +++++----- 5 files changed, 69 insertions(+), 33 deletions(-) diff --git a/code/datums/migrants/migrant_waves/runaway_prisoners.dm b/code/datums/migrants/migrant_waves/runaway_prisoners.dm index 0271c33fc4e..9de2f6b02be 100644 --- a/code/datums/migrants/migrant_waves/runaway_prisoners.dm +++ b/code/datums/migrants/migrant_waves/runaway_prisoners.dm @@ -156,7 +156,7 @@ var/my_crime = input(H, "What is your crime?", "Crime") as text|null if (!my_crime) my_crime = "crimes against the Crown" - add_bounty(H.real_name, race, gender, descriptor_height, descriptor_body, descriptor_voice, rand(100, 200), FALSE, my_crime, "The Justiciary of Azuria", H.client.prefs.compliance) + add_bounty(H.real_name, race, gender, descriptor_height, descriptor_body, descriptor_voice, rand(50, 150), FALSE, my_crime, "The Justiciary of Azuria", H.client.prefs.compliance) if(should_wear_femme_clothes(H)) shirt = /obj/item/clothing/suit/roguetown/shirt/dress/gen/random else if(should_wear_masc_clothes(H)) diff --git a/code/modules/jobs/job_types/roguetown/adventurer/bandit.dm b/code/modules/jobs/job_types/roguetown/adventurer/bandit.dm index bd51beff88e..e0272a13679 100644 --- a/code/modules/jobs/job_types/roguetown/adventurer/bandit.dm +++ b/code/modules/jobs/job_types/roguetown/adventurer/bandit.dm @@ -71,21 +71,31 @@ // Changed up proc from Wretch to suit bandits bit more /proc/bandit_select_bounty(mob/living/carbon/human/H) var/bounty_poster = input(H, "Who placed a bounty on you?", "Bounty Poster") as anything in list("The Justiciary of Azuria", "The Grenzelhoftian Holy See") - var/bounty_severity = input(H, "How notorious are you?", "Bounty Amount") as anything in list("Small Fish", "Bay Butcher", "Azurean Boogeyman") + var/bounty_total = rand(300, 600) + if(istype(H.client.prefs.compliance, /datum/compliance_setting/non_belligerent)) + var/bounty_severity_small = input(H, "How notorious are you?", "Bounty Amount") as anything in list("Pitiful", "Pathetic", "Inconceivable") + switch(bounty_severity_small) //Expected to RP, not as much a bounty. + if("Pitiful") + bounty_total = rand(200, 250) + if("Pathetic") + bounty_total = rand(250, 300) + if("Inconceivable") + bounty_total = rand(300, 350) + else + var/bounty_severity = input(H, "How notorious are you?", "Bounty Amount") as anything in list("Small Fish", "Bay Butcher", "Azurean Boogeyman") + switch(bounty_severity) + if("Small Fish") + bounty_total = rand(300, 400) + if("Bay Butcher") + bounty_total = rand(400, 500) + if("Azurean Boogeyman") + bounty_total = rand(500, 600) var/race = H.dna.species var/gender = H.gender var/list/d_list = H.get_mob_descriptors() var/descriptor_height = build_coalesce_description_nofluff(d_list, H, list(MOB_DESCRIPTOR_SLOT_HEIGHT), "%DESC1%") var/descriptor_body = build_coalesce_description_nofluff(d_list, H, list(MOB_DESCRIPTOR_SLOT_BODY), "%DESC1%") var/descriptor_voice = build_coalesce_description_nofluff(d_list, H, list(MOB_DESCRIPTOR_SLOT_VOICE), "%DESC1%") - var/bounty_total = rand(300, 600) - switch(bounty_severity) - if("Small Fish") - bounty_total = rand(300, 400) - if("Bay Butcher") - bounty_total = rand(400, 500) - if("Azurean Boogeyman") - bounty_total = rand(500, 600) var/my_crime = input(H, "What is your crime?", "Crime") as text|null if (!my_crime) my_crime = "Brigandry" diff --git a/code/modules/jobs/job_types/roguetown/adventurer/wretch.dm b/code/modules/jobs/job_types/roguetown/adventurer/wretch.dm index 2ef056b1669..8aa4851fb40 100644 --- a/code/modules/jobs/job_types/roguetown/adventurer/wretch.dm +++ b/code/modules/jobs/job_types/roguetown/adventurer/wretch.dm @@ -61,25 +61,39 @@ /proc/wretch_select_bounty(mob/living/carbon/human/H) var/bounty_poster = input(H, "Who placed a bounty on you?", "Bounty Poster") as anything in list("The Justiciary of Azuria", "The Grenzelhoftian Holy See", "The Otavan Orthodoxy") // Felinid said we should gate it at 100 or so on at the lowest, so that wretch cannot ezmode it. - var/bounty_severity = input(H, "How severe are your crimes?", "Bounty Amount") as anything in list("Misdeed", "Harm towards lyfe", "Horrific atrocities") + var/bounty_total = rand(100, 400) // Just in case + if(istype(H.client.prefs.compliance, /datum/compliance_setting/non_belligerent)) + var/bounty_severity_small = input(H, "How severe are your crimes?", "Bounty Amount") as anything in list("Pitiful", "Pathetic", "Inconceivable") + switch(bounty_severity_small) + if("Pitiful") + bounty_total = rand(25, 50) + if("Pathetic") + bounty_total = rand(50, 75) + if("Inconceivable") + bounty_total = rand(75, 100) // Let's not make it TOO profitable... Y'knnnnow? + if(bounty_poster == "The Justiciary of Azuria") + GLOB.outlawed_players += H.real_name + else + GLOB.excommunicated_players += H.real_name + else + var/bounty_severity = input(H, "How severe are your crimes?", "Bounty Amount") as anything in list("Misdeed", "Harm towards lyfe", "Horrific atrocities") + switch(bounty_severity) + if("Misdeed") + bounty_total = rand(100, 200) + if("Harm towards lyfe") + bounty_total = rand(200, 300) + if("Horrific atrocities") + bounty_total = rand(300, 400) // Let's not make it TOO profitable + if(bounty_poster == "The Justiciary of Azuria") + GLOB.outlawed_players += H.real_name + else + GLOB.excommunicated_players += H.real_name var/race = H.dna.species var/gender = H.gender var/list/d_list = H.get_mob_descriptors() var/descriptor_height = build_coalesce_description_nofluff(d_list, H, list(MOB_DESCRIPTOR_SLOT_HEIGHT), "%DESC1%") var/descriptor_body = build_coalesce_description_nofluff(d_list, H, list(MOB_DESCRIPTOR_SLOT_BODY), "%DESC1%") var/descriptor_voice = build_coalesce_description_nofluff(d_list, H, list(MOB_DESCRIPTOR_SLOT_VOICE), "%DESC1%") - var/bounty_total = rand(100, 400) // Just in case - switch(bounty_severity) - if("Misdeed") - bounty_total = rand(100, 200) - if("Harm towards lyfe") - bounty_total = rand(200, 300) - if("Horrific atrocities") - bounty_total = rand(300, 400) // Let's not make it TOO profitable - if(bounty_poster == "The Justiciary of Azuria") - GLOB.outlawed_players += H.real_name - else - GLOB.excommunicated_players += H.real_name var/my_crime = input(H, "What is your crime?", "Crime") as text|null if (!my_crime) my_crime = "crimes against the Crown" diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 99a858da44a..823b3a67cce 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -764,6 +764,17 @@ if(-INFINITY to -5) . += span_warning("[t_He] look[p_s()] much weaker than I.") + if((user != src) && isliving(user)) + var/mob/living/L = user + var/datum/comp_type = L.client.prefs.compliance + switch(comp_type) + if(istype(comp_type, /datum/compliance_setting/armed_dangerous)) + . += span_warning("[t_He] look[p_s()] dangerous.") + if(istype(comp_type, /datum/compliance_setting/armed_compliant)) + . += span_warning("[t_He] look[p_s()] dangerous.") + if(istype(comp_type, /datum/compliance_setting/non_belligerent)) + . += "[t_He] look[p_s()] to be harmless." + if((HAS_TRAIT(user,TRAIT_INTELLECTUAL))) var/mob/living/L = user var/final_int = STAINT diff --git a/modular_causticcove/code/datums/compliance.dm b/modular_causticcove/code/datums/compliance.dm index 3c41d459b1c..f39ca4fa193 100644 --- a/modular_causticcove/code/datums/compliance.dm +++ b/modular_causticcove/code/datums/compliance.dm @@ -7,21 +7,22 @@ GLOBAL_LIST_EMPTY(compliance_settings) /datum/compliance_setting/armed_dangerous name = "Armed and Dangerous" desc = "You are considered to be Armed and Dangerous. \n\n\ - You willingly allow hostile acts to be performed against you within reason, this does not allow you to enact RDM. \n\n\ - Ambushes can, and will most likely be used by other players against you. \n\n\ - Your bounty will be claimed with minimal, to no escalation whatsoever, as long as there is valid reason for these actions. \n\n\ - Anyone, at any time, anywhere, may kill you or capture you without word, and you could possibly never be revived for the rest of the round.\n\n\ - By choosing this, you are considered to be a cold-hearted killer, merciless and showing no remorse. You are, in essence, a monster who must pay for your capital crimes. \n\n\ + You are considered a dangerous and capable individual. \n\n\ + You willingly invite other players to engage you in combat and perform hostile acts towards you within reason. This does not allow you to enact RDM. \n\n\ + You may be ambushed for your valuables, become a target for wretches and bandits or be hunted down for your bounty with minimal or no escalation. You should remain alert at all times \n\n\ + As long as there is a valid reason, you may find yourself quickly involved in sudden acts of violence and combat where you may be mortally wounded or imprisoned! \n\n\ + Those who carry bounties and have chosen to have violent crimes in their bounties such as 'mass murder, killing of guards, assassination of nobles' or similar should consider that those crimes belong in this category otherwise you may want to tone down the severity of your crimes. Although exceptions can be made in the sake for roleplay. \n\n\ + We recommend this option for players who wish for a more dangerous experience. \n\n\ You cannot change this during gameplay. YOU HAVE BEEN WARNED." /datum/compliance_setting/armed_compliant name = "Armed and Compliant" desc = "You are considered to be Armed and compliant. \n\n\ - You willingly allow hostile acts to be performed against you, but only in a manner that is roleplayed or acted out. \n\n\ - Ambushes can, and will most likely be used by other players against you. \n\n\ - On the contrary, your bounty will be claimed with announced effort, and actions will be carried out through roleplay. \n\n\ - This option expects you to roleplay appropriately. \n\n\ - By choosing this, you are considered to be a bad person with bad intentions, but not too far gone that you cannot be reasoned with for your crimes. \n\n\ + You are considered a capable individual to be approached with caution. \n\n\ + You are willing to participate in mechanical PVP and have it performed against you so long as there has been proper escalation and build up via roleplay.\n\n\ + By choosing this option you are inviting others to engage you in roleplay with the possibility of some combat if the situation calls for it. \n\n\ + We recommend this option for rugged warriors or criminals who CAN be reasoned with. \n\n\ + You may engage Armed and Dangerous individuals within reason, honoring the fact you have chosen this option for a more RP focused engagement. \n\n\ You cannot change this during gameplay. YOU HAVE BEEN WARNED." /datum/compliance_setting/non_belligerent From 7d4a33e072336fa7a250e9081dd7ad54536b3a48 Mon Sep 17 00:00:00 2001 From: Rudy Date: Fri, 28 Nov 2025 18:18:08 -0800 Subject: [PATCH 03/14] Save File Fix --- code/modules/client/preferences_savefile.dm | 10 +++++++++- .../job_types/roguetown/adventurer/bandit.dm | 1 + .../job_types/roguetown/adventurer/wretch.dm | 1 + .../mob/living/carbon/human/examine.dm | 20 ++++++++++--------- code/modules/roguetown/roguemachine/bounty.dm | 6 +++--- modular_causticcove/code/datums/compliance.dm | 6 +++--- 6 files changed, 28 insertions(+), 16 deletions(-) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 731ec190055..f88782aac4c 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -7,7 +7,7 @@ // where you would want the updater procs below to run // This also works with decimals. -#define SAVEFILE_VERSION_MAX 33.9 +#define SAVEFILE_VERSION_MAX 34.9 /* SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Carn @@ -148,6 +148,9 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car species_name = "Venardine" _load_species(S, species_name) + if(current_version < 35) // Update compliance + var/compliance + S["compliance"] >> compliance /datum/preferences/proc/load_path(ckey,filename="preferences.sav") if(!ckey) @@ -648,6 +651,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["pronouns"] >> pronouns S["voice_type"] >> voice_type S["body_size"] >> features["body_size"] + + //CC Edit Begin + S["compliance"] >> compliance + //CC Edit End + if (!features["body_size"]) features["body_size"] = BODY_SIZE_NORMAL //try to fix any outdated data if necessary diff --git a/code/modules/jobs/job_types/roguetown/adventurer/bandit.dm b/code/modules/jobs/job_types/roguetown/adventurer/bandit.dm index e0272a13679..fdc229bb461 100644 --- a/code/modules/jobs/job_types/roguetown/adventurer/bandit.dm +++ b/code/modules/jobs/job_types/roguetown/adventurer/bandit.dm @@ -70,6 +70,7 @@ // Changed up proc from Wretch to suit bandits bit more /proc/bandit_select_bounty(mob/living/carbon/human/H) + to_chat(H, span_warn("When writing down your bounties, You should have have some tact, Expect people to weigh their behavior towards you based on the severity of your crimes. Measure your crimes based on your compliance level when possible. Extreme crimes such as 'genocide' or similar are not allowed.")) var/bounty_poster = input(H, "Who placed a bounty on you?", "Bounty Poster") as anything in list("The Justiciary of Azuria", "The Grenzelhoftian Holy See") var/bounty_total = rand(300, 600) if(istype(H.client.prefs.compliance, /datum/compliance_setting/non_belligerent)) diff --git a/code/modules/jobs/job_types/roguetown/adventurer/wretch.dm b/code/modules/jobs/job_types/roguetown/adventurer/wretch.dm index 8aa4851fb40..76fe0e35eb2 100644 --- a/code/modules/jobs/job_types/roguetown/adventurer/wretch.dm +++ b/code/modules/jobs/job_types/roguetown/adventurer/wretch.dm @@ -59,6 +59,7 @@ // Proc for wretch to select a bounty /proc/wretch_select_bounty(mob/living/carbon/human/H) + to_chat(H, span_warn("When writing down your bounties, You should have have some tact, Expect people to weigh their behavior towards you based on the severity of your crimes. Measure your crimes based on your compliance level when possible. Extreme crimes such as 'genocide' or similar are not allowed.")) var/bounty_poster = input(H, "Who placed a bounty on you?", "Bounty Poster") as anything in list("The Justiciary of Azuria", "The Grenzelhoftian Holy See", "The Otavan Orthodoxy") // Felinid said we should gate it at 100 or so on at the lowest, so that wretch cannot ezmode it. var/bounty_total = rand(100, 400) // Just in case diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 823b3a67cce..2a0e225654d 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -764,16 +764,18 @@ if(-INFINITY to -5) . += span_warning("[t_He] look[p_s()] much weaker than I.") + //CC Edit begin if((user != src) && isliving(user)) - var/mob/living/L = user - var/datum/comp_type = L.client.prefs.compliance - switch(comp_type) - if(istype(comp_type, /datum/compliance_setting/armed_dangerous)) - . += span_warning("[t_He] look[p_s()] dangerous.") - if(istype(comp_type, /datum/compliance_setting/armed_compliant)) - . += span_warning("[t_He] look[p_s()] dangerous.") - if(istype(comp_type, /datum/compliance_setting/non_belligerent)) - . += "[t_He] look[p_s()] to be harmless." + var/datum/comp_type = src.client.prefs.compliance + if(istype(comp_type, /datum/compliance_setting/armed_dangerous)) + . += span_boldred("[t_He] appear[p_s()] to be very dangerous.") + if(istype(comp_type, /datum/compliance_setting/armed_compliant)) + . += span_warning("[t_He] look[p_s()] capable.") + if(istype(comp_type, /datum/compliance_setting/non_belligerent)) + . += "[t_He] seem[p_s()] non-threatening." + else + . += span_tinynoticeital("[t_He] seem[p_s()] neutral.") + //CC Edit End if((HAS_TRAIT(user,TRAIT_INTELLECTUAL))) var/mob/living/L = user diff --git a/code/modules/roguetown/roguemachine/bounty.dm b/code/modules/roguetown/roguemachine/bounty.dm index 50d07208b0c..bca62b9c1bc 100644 --- a/code/modules/roguetown/roguemachine/bounty.dm +++ b/code/modules/roguetown/roguemachine/bounty.dm @@ -215,11 +215,11 @@ //Handle Compliance if(istype(new_bounty.compliance, /datum/compliance_setting/armed_dangerous)) - new_bounty.banner += "They are Armed and Dangerous. You may approach with weapons ready for a fight and attack without word. Ambushes are permitted.
" + new_bounty.banner += "They are Armed and Dangerous. Aproach with extreme caution!
" if(istype(new_bounty.compliance, /datum/compliance_setting/armed_compliant)) - new_bounty.banner += "They are Armed and Compliant. You are to first speak civil until drawing weapons if they do not comply. Ambushes to DETAIN ONLY are permitted.
" + new_bounty.banner += "They are Armed and Compliant. It may be possible to reason with the target, caution is advised.
" if(istype(new_bounty.compliance, /datum/compliance_setting/non_belligerent)) - new_bounty.banner += "They are Non-Belligerent. You are to not harm them unless they attack first. Ambushes are NOT permitted. Expect to speak peacefully.
" + new_bounty.banner += "They are Non-Belligerent. Target is largely non-violent, approach with care.
" new_bounty.banner += "They are a criminal belonging to the [new_bounty.target_race] race, going by the following description: they are [new_bounty.target_height], of a [new_bounty.target_body_type] build and they have [new_bounty.target_body_prefix] physique. They speak with [new_bounty.target_voice_prefix] voice.'.
" new_bounty.banner += "The patron, [new_bounty.employer], offers [new_bounty.amount] mammons for the task.
" diff --git a/modular_causticcove/code/datums/compliance.dm b/modular_causticcove/code/datums/compliance.dm index f39ca4fa193..844573dd4fa 100644 --- a/modular_causticcove/code/datums/compliance.dm +++ b/modular_causticcove/code/datums/compliance.dm @@ -28,8 +28,8 @@ GLOBAL_LIST_EMPTY(compliance_settings) /datum/compliance_setting/non_belligerent name = "Non-Belligerent" desc = "You are considered to be Non-Belligerent. \n\n\ - You do not allow combat, and are also not allowed to dish out combat against those claiming your bounties. \n\n\ - You typically do not have a high bounty, and are locked out of choosing higher pay bounties. \n\n\ - This tells the other person you do not wish to engage in mechanical PvP at all, outside of controlled scenarios. \n\n\ + You do not wish to engage in combat scenarios against other players unless it is on a controlled environment. \n\n\ + By choosing this you should be aware that you will still be held accountable of your actions if you commit crimes that merit you being chased or restrained. Just because you do not wish to engage in fights does not mean you can commit every crime. Likewise you cannot ignore your responsibilities when playing a peace keeping role. \n\n\ + This option is most recommend for towners and other roles who simply wish a more relaxed experience entirely focused on roleplaying. \n\n\ By choosing this option, you are considered to be a pacifist, or somebody who has commited petty crimes. \n\n\ You cannot change this during gameplay. YOU HAVE BEEN WARNED." From 9c80b9a01c67cfd409eda07606e87b0f99d0156d Mon Sep 17 00:00:00 2001 From: Rudy Date: Fri, 28 Nov 2025 18:51:39 -0800 Subject: [PATCH 04/14] proper pref checks --- code/modules/mob/living/carbon/human/examine.dm | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 2a0e225654d..90b3de9deb9 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -766,15 +766,15 @@ //CC Edit begin if((user != src) && isliving(user)) - var/datum/comp_type = src.client.prefs.compliance - if(istype(comp_type, /datum/compliance_setting/armed_dangerous)) + var/datum/compliance_setting/comp_type = client?.prefs.compliance + if(comp_type == /datum/compliance_setting/armed_dangerous) . += span_boldred("[t_He] appear[p_s()] to be very dangerous.") - if(istype(comp_type, /datum/compliance_setting/armed_compliant)) + if(comp_type == /datum/compliance_setting/armed_compliant) . += span_warning("[t_He] look[p_s()] capable.") - if(istype(comp_type, /datum/compliance_setting/non_belligerent)) + if(comp_type == /datum/compliance_setting/non_belligerent) . += "[t_He] seem[p_s()] non-threatening." - else - . += span_tinynoticeital("[t_He] seem[p_s()] neutral.") + else if(!comp_type) + . += span_info("[t_He] seem[p_s()] neutral.") //CC Edit End if((HAS_TRAIT(user,TRAIT_INTELLECTUAL))) From d46083c237fbd5c7316df953a22ba5ff4b1e3c21 Mon Sep 17 00:00:00 2001 From: Rudy Date: Sat, 29 Nov 2025 00:25:22 -0800 Subject: [PATCH 05/14] Compliance Required --- code/modules/mob/dead/new_player/new_player.dm | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index f0e11b26a54..6451556e8ab 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -158,6 +158,9 @@ GLOBAL_LIST_INIT(roleplay_readme, world.file2list("strings/rt/rp_prompt.txt")) if(length(client.prefs.ooc_notes) < MINIMUM_OOC_NOTES) to_chat(src, span_boldwarning("You need at least a few words in your OOC notes in order to play.")) return + if(!client.prefs.compliance) + to_chat(usr, span_boldwarning("You must set a compliance level before readying up.")) + return if(ready != tready) ready = tready @@ -186,6 +189,10 @@ GLOBAL_LIST_INIT(roleplay_readme, world.file2list("strings/rt/rp_prompt.txt")) to_chat(usr, span_boldwarning("You are in the migrant queue.")) return + if(!client.prefs.compliance) + to_chat(usr, span_boldwarning("You must set a compliance level before joining the game.")) + return + if(href_list["late_join"] == "override") LateChoices() return @@ -259,6 +266,10 @@ GLOBAL_LIST_INIT(roleplay_readme, world.file2list("strings/rt/rp_prompt.txt")) to_chat(src, span_boldwarning("You need at least a few words in your OOC notes in order to play.")) return + if(!client.prefs.compliance) + to_chat(usr, span_boldwarning("You must set a compliance level before joining.")) + return + AttemptLateSpawn(href_list["SelectedJob"]) return From e7c59058a2a8924512fdc4949e916e194a1ff1ba Mon Sep 17 00:00:00 2001 From: Rudy Date: Sat, 29 Nov 2025 00:29:27 -0800 Subject: [PATCH 06/14] Migrant too --- code/datums/migrants/migrant_pref.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/datums/migrants/migrant_pref.dm b/code/datums/migrants/migrant_pref.dm index 8d12e6d7356..b3afa60111f 100644 --- a/code/datums/migrants/migrant_pref.dm +++ b/code/datums/migrants/migrant_pref.dm @@ -15,6 +15,9 @@ /datum/migrant_pref/proc/set_active(new_state, silent = FALSE) if(active == new_state) return + if(!prefs.compliance) + to_chat(usr, span_boldwarning("You must set a compliance level before joining.")) + return active = new_state role_preferences.Cut() if(!silent && prefs.parent) From 821df16c650ca5b15dbd530303455324172c4ed1 Mon Sep 17 00:00:00 2001 From: Rudy Date: Sat, 29 Nov 2025 01:02:07 -0800 Subject: [PATCH 07/14] span fix --- code/modules/mob/living/carbon/human/examine.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 90b3de9deb9..ee454a9bc12 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -772,7 +772,7 @@ if(comp_type == /datum/compliance_setting/armed_compliant) . += span_warning("[t_He] look[p_s()] capable.") if(comp_type == /datum/compliance_setting/non_belligerent) - . += "[t_He] seem[p_s()] non-threatening." + . += span_info("[t_He] seem[p_s()] non-threatening.") else if(!comp_type) . += span_info("[t_He] seem[p_s()] neutral.") //CC Edit End From 5bd800fef0afe5041f70e9dfa0315ade9d690564 Mon Sep 17 00:00:00 2001 From: Rudy Date: Sat, 29 Nov 2025 01:28:19 -0800 Subject: [PATCH 08/14] NO MORE NONE --- code/modules/client/preferences.dm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 9904a06e056..da3baaa839e 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -2413,6 +2413,11 @@ Slots: [job.spawn_positions] [job.round_contrib_points ? "RCP: +[job.round_contr phobia = phobiaType //CC Edit Begin if("compliance_setting") + + if(PLAYER_READY_TO_PLAY) //So you can't enter with "None" + to_chat(user, "You cannot change your compliance unless you unready.") + return + var/list/compliance_choices = list("None") for (var/path as anything in GLOB.compliance_settings) var/datum/compliance_setting/compliance = GLOB.compliance_settings[path] From 982b4512d0233c3e073d704e5fd0485110b44901 Mon Sep 17 00:00:00 2001 From: Rudy Date: Sat, 29 Nov 2025 01:30:20 -0800 Subject: [PATCH 09/14] Flavor Reword of NONE option... --- code/modules/client/preferences.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index da3baaa839e..f44b0dd175c 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -2429,7 +2429,7 @@ Slots: [job.spawn_positions] [job.round_contrib_points ? "RCP: +[job.round_contr if(compliance_input) if(compliance_input == "None") compliance = null - to_chat(user, "You've decided to go with the flow.") + to_chat(user, "You must comply, please select an option.") else compliance = compliance_choices[compliance_input] to_chat(user, "[compliance.name]") From db36fda1f24f3130f04951a01bc1be18343a2fef Mon Sep 17 00:00:00 2001 From: Rudy Date: Sat, 29 Nov 2025 01:50:06 -0800 Subject: [PATCH 10/14] Fix bounty descriptors --- code/modules/roguetown/roguemachine/bounty.dm | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/code/modules/roguetown/roguemachine/bounty.dm b/code/modules/roguetown/roguemachine/bounty.dm index bca62b9c1bc..827bfa26e69 100644 --- a/code/modules/roguetown/roguemachine/bounty.dm +++ b/code/modules/roguetown/roguemachine/bounty.dm @@ -229,11 +229,11 @@ //Handle Compliance if(istype(new_bounty.compliance, /datum/compliance_setting/armed_dangerous)) - new_bounty.banner += "They are Armed and Dangerous. You may approach with weapons ready for a fight and attack without word. Ambushes are permitted.
" + new_bounty.banner += "They are Armed and Dangerous. Aproach with extreme caution!
" if(istype(new_bounty.compliance, /datum/compliance_setting/armed_compliant)) - new_bounty.banner += "They are Armed and Compliant. You are to first speak civil until drawing weapons if they do not comply. Ambushes to DETAIN ONLY are permitted.
" + new_bounty.banner += "They are Armed and Compliant. It may be possible to reason with the target, caution is advised.
" if(istype(new_bounty.compliance, /datum/compliance_setting/non_belligerent)) - new_bounty.banner += "They are Non-Belligerent. You are to not harm them unless they attack first. Ambushes are NOT permitted. Expect to speak peacefully.
" + new_bounty.banner += "They are Non-Belligerent. Target is largely non-violent, approach with care.
" new_bounty.banner += "They are a reprobate belonging to the [new_bounty.target_race] race, going by the following description: they are [new_bounty.target_height], of a [new_bounty.target_body_type] build and they have [new_bounty.target_body_prefix] physique. They speak with [new_bounty.target_voice_prefix] voice.'.
" new_bounty.banner += "The employer, [new_bounty.employer], offers [new_bounty.amount] mammons for the deed.
" @@ -243,11 +243,11 @@ //Handle Compliance if(istype(new_bounty.compliance, /datum/compliance_setting/armed_dangerous)) - new_bounty.banner += "They are Armed and Dangerous. You may approach with weapons ready for a fight and attack without word. Ambushes are permitted.
" + new_bounty.banner += "They are Armed and Dangerous. Aproach with extreme caution!
" if(istype(new_bounty.compliance, /datum/compliance_setting/armed_compliant)) - new_bounty.banner += "They are Armed and Compliant. You are to first speak civil until drawing weapons if they do not comply. Ambushes to DETAIN ONLY are permitted.
" + new_bounty.banner += "They are Armed and Compliant. It may be possible to reason with the target, caution is advised.
" if(istype(new_bounty.compliance, /datum/compliance_setting/non_belligerent)) - new_bounty.banner += "They are Non-Belligerent. You are to not harm them unless they attack first. Ambushes are NOT permitted. Expect to speak peacefully.
" + new_bounty.banner += "They are Non-Belligerent. Target is largely non-violent, approach with care.
" new_bounty.banner += "By reason of the following: '[new_bounty.reason]'.
" new_bounty.banner += "They are a heathen belonging to the [new_bounty.target_race] race, going by the following description: they are [new_bounty.target_height], of a [new_bounty.target_body_type] build and they have [new_bounty.target_body_prefix] physique. They speak with [new_bounty.target_voice_prefix] voice.'.
" From e1ece543039f6b3225cd46fab239b21fb53ee219 Mon Sep 17 00:00:00 2001 From: Rudy Date: Sat, 29 Nov 2025 02:05:57 -0800 Subject: [PATCH 11/14] Fixed agaiain --- code/modules/client/preferences.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index f44b0dd175c..f79831e95ee 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -2413,8 +2413,8 @@ Slots: [job.spawn_positions] [job.round_contrib_points ? "RCP: +[job.round_contr phobia = phobiaType //CC Edit Begin if("compliance_setting") - - if(PLAYER_READY_TO_PLAY) //So you can't enter with "None" + var/mob/dead/new_player/N = user + if(N.ready) //So you can't enter with "None" to_chat(user, "You cannot change your compliance unless you unready.") return From f070c64d7e864b2d82a53ade3b5804382d73cdbd Mon Sep 17 00:00:00 2001 From: Rudy Date: Sat, 29 Nov 2025 05:46:46 -0800 Subject: [PATCH 12/14] Fix Vagabond Bounty --- .../roguetown/youngfolk/vagabond/wanted.dm | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/code/modules/jobs/job_types/roguetown/youngfolk/vagabond/wanted.dm b/code/modules/jobs/job_types/roguetown/youngfolk/vagabond/wanted.dm index ede0a31ae78..d21fc7102a8 100644 --- a/code/modules/jobs/job_types/roguetown/youngfolk/vagabond/wanted.dm +++ b/code/modules/jobs/job_types/roguetown/youngfolk/vagabond/wanted.dm @@ -45,13 +45,16 @@ if(!my_crime) my_crime = "crimes against the Crown" - var/list/bounty_cats = list( - "Meager" = rand(51, 200), - "Moderate" = rand(101, 150), - "Massive" = rand(150, 200), - ) + var/list/bounty_cats = list("Meager", "Moderate", "Massive") var/bounty_amount = tgui_input_list(human, "How ample is your bounty?", "Blooded Gold", bounty_cats) + switch(bounty_amount) + if("Meager") + bounty_amount = rand(25, 100) + if("Moderate") + bounty_amount = rand(100, 150) + if("Massive") + bounty_amount = rand(150, 200) var/race = human.dna.species var/gender = human.gender var/list/d_list = human.get_mob_descriptors() From a24c02c5553fe5952aba4fb36a4110d5828fe58c Mon Sep 17 00:00:00 2001 From: Rudy Date: Tue, 2 Dec 2025 04:39:41 -0800 Subject: [PATCH 13/14] Compliance Save Fix and Type Fix? # Conflicts: # code/modules/mob/living/carbon/human/examine.dm --- code/modules/client/preferences_savefile.dm | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index f88782aac4c..b81c24513dd 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -470,10 +470,10 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car loadout5 = new loadout_type5() /datum/preferences/proc/_load_compliance(S) - var/compliance - S["compliance"] >> compliance - if (compliance) - compliance = new compliance() + var/compliance_type + S["compliance"] >> compliance_type + if(compliance_type) + compliance = new compliance_type() /datum/preferences/proc/_load_loadout_colours(S) S["loadout_1_hex"] >> loadout_1_hex @@ -652,10 +652,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["voice_type"] >> voice_type S["body_size"] >> features["body_size"] - //CC Edit Begin - S["compliance"] >> compliance - //CC Edit End - if (!features["body_size"]) features["body_size"] = BODY_SIZE_NORMAL //try to fix any outdated data if necessary From 112ea526baf2423a6250471f4537f56b6b385918 Mon Sep 17 00:00:00 2001 From: Rudy Date: Tue, 16 Dec 2025 18:12:32 -0800 Subject: [PATCH 14/14] A --- .../mob/living/carbon/human/examine.dm | 32 +++++++++++++------ modular_causticcove/code/datums/compliance.dm | 11 ++++++- 2 files changed, 32 insertions(+), 11 deletions(-) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index ee454a9bc12..50fb09bd290 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -765,16 +765,28 @@ . += span_warning("[t_He] look[p_s()] much weaker than I.") //CC Edit begin - if((user != src) && isliving(user)) - var/datum/compliance_setting/comp_type = client?.prefs.compliance - if(comp_type == /datum/compliance_setting/armed_dangerous) - . += span_boldred("[t_He] appear[p_s()] to be very dangerous.") - if(comp_type == /datum/compliance_setting/armed_compliant) - . += span_warning("[t_He] look[p_s()] capable.") - if(comp_type == /datum/compliance_setting/non_belligerent) - . += span_info("[t_He] seem[p_s()] non-threatening.") - else if(!comp_type) - . += span_info("[t_He] seem[p_s()] neutral.") + if(isliving(user)) + var/datum/compliance_setting/comp_type = user.client?.prefs.compliance + if((user != src)) + switch(comp_type.switch_string) + if("armed_dangerous") //Armed and Dangerous + . += span_boldred("[t_He] appear[p_s()] to be very dangerous.") + if("armed_compliant") //Armed and Compliant + . += span_warning("[t_He] look[p_s()] capable.") + if("non_belligerent") //Non-Beligerent + . += span_info("[t_He] seem[p_s()] non-threatening.") + if("none") + . += span_info("[t_He] seem[p_s()] neutral.") + else + switch(comp_type.switch_string) + if("armed_dangerous") //Armed and Dangerous + . += span_boldred("I appear very dangerous to others.") + if("armed_compliant") //Armed and Compliant + . += span_warning("I look capable to others.") + if("non_belligerent") //Non-Beligerent + . += span_info("I seem non-threatening to others.") + if("none") + . += span_info("Alert a dev! You shouldn't be seeing this! How did you load into a game!?") //CC Edit End if((HAS_TRAIT(user,TRAIT_INTELLECTUAL))) diff --git a/modular_causticcove/code/datums/compliance.dm b/modular_causticcove/code/datums/compliance.dm index 844573dd4fa..e7dfa87b850 100644 --- a/modular_causticcove/code/datums/compliance.dm +++ b/modular_causticcove/code/datums/compliance.dm @@ -4,6 +4,9 @@ GLOBAL_LIST_EMPTY(compliance_settings) var/name = "Parent compliance datum" var/desc + //Internal value dictating the type for use on examine. + var/switch_string = "none" + /datum/compliance_setting/armed_dangerous name = "Armed and Dangerous" desc = "You are considered to be Armed and Dangerous. \n\n\ @@ -13,7 +16,9 @@ GLOBAL_LIST_EMPTY(compliance_settings) As long as there is a valid reason, you may find yourself quickly involved in sudden acts of violence and combat where you may be mortally wounded or imprisoned! \n\n\ Those who carry bounties and have chosen to have violent crimes in their bounties such as 'mass murder, killing of guards, assassination of nobles' or similar should consider that those crimes belong in this category otherwise you may want to tone down the severity of your crimes. Although exceptions can be made in the sake for roleplay. \n\n\ We recommend this option for players who wish for a more dangerous experience. \n\n\ - You cannot change this during gameplay. YOU HAVE BEEN WARNED." + You cannot change this during gameplay. YOU HAVE BEEN WARNED." + + switch_string = "armed_dangerous" /datum/compliance_setting/armed_compliant name = "Armed and Compliant" @@ -25,6 +30,8 @@ GLOBAL_LIST_EMPTY(compliance_settings) You may engage Armed and Dangerous individuals within reason, honoring the fact you have chosen this option for a more RP focused engagement. \n\n\ You cannot change this during gameplay. YOU HAVE BEEN WARNED." + switch_string = "armed_compliant" + /datum/compliance_setting/non_belligerent name = "Non-Belligerent" desc = "You are considered to be Non-Belligerent. \n\n\ @@ -33,3 +40,5 @@ GLOBAL_LIST_EMPTY(compliance_settings) This option is most recommend for towners and other roles who simply wish a more relaxed experience entirely focused on roleplaying. \n\n\ By choosing this option, you are considered to be a pacifist, or somebody who has commited petty crimes. \n\n\ You cannot change this during gameplay. YOU HAVE BEEN WARNED." + + switch_string = "non_belligerent"