Skip to content
7 changes: 7 additions & 0 deletions code/__HELPERS/global_lists.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
3 changes: 3 additions & 0 deletions code/datums/migrants/migrant_pref.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion code/datums/migrants/migrant_waves/runaway_prisoners.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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(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))
Expand Down
2 changes: 1 addition & 1 deletion code/datums/special_traits/traits/traits.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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!"))

Expand Down
28 changes: 28 additions & 0 deletions code/modules/client/preferences.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -863,6 +865,7 @@ GLOBAL_LIST_EMPTY(chosen_names)
dat += "<td width='33%' align='right'>"
dat += "<b>Be voice:</b> <a href='?_src_=prefs;preference=schizo_voice'>[(toggles & SCHIZO_VOICE) ? "Enabled":"Disabled"]</a>"
dat += "<br><b>Toggle Admin Sounds:</b> <a href='?_src_=prefs;preference=hear_midis'>[(toggles & SOUND_MIDI) ? "Enabled":"Disabled"]</a>"
dat += "<br><b>Set Compliance:</b> <a href='?_src_=prefs;preference=compliance_setting;task=input'>[compliance ? compliance.name : "None"] </a>"
dat += "</td>"
dat += "</tr>"
dat += "</table>"
Expand Down Expand Up @@ -2408,6 +2411,31 @@ 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/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

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 must comply, please select an option.")
else
compliance = compliance_choices[compliance_input]
to_chat(user, "<font color='yellow'><b>[compliance.name]</b></font>")
if(compliance.desc)
to_chat(user, "[compliance.desc]")
//CC Edit End

else
switch(href_list["preference"])
Expand Down
17 changes: 16 additions & 1 deletion code/modules/client/preferences_savefile.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -466,6 +469,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_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
S["loadout_2_hex"] >> loadout_2_hex
Expand Down Expand Up @@ -562,6 +571,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
Expand Down Expand Up @@ -641,6 +651,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["pronouns"] >> pronouns
S["voice_type"] >> voice_type
S["body_size"] >> features["body_size"]

if (!features["body_size"])
features["body_size"] = BODY_SIZE_NORMAL
//try to fix any outdated data if necessary
Expand Down Expand Up @@ -837,6 +848,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
Expand Down
31 changes: 21 additions & 10 deletions code/modules/jobs/job_types/roguetown/adventurer/bandit.dm
Original file line number Diff line number Diff line change
Expand Up @@ -70,24 +70,35 @@

// 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_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"
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 a bandit! Wanted, hunted, You are a somewhat powerful role with many resources at your disposal. This role just like wretch is a soft-antag role, You are still subjected to rules of escalation. Work with your fellow bandits to accomplish your goals, preferably creating a good and interesting round and not going RDM. ")) //Caustic Cove Edit
43 changes: 29 additions & 14 deletions code/modules/jobs/job_types/roguetown/adventurer/wretch.dm
Original file line number Diff line number Diff line change
Expand Up @@ -59,31 +59,46 @@

// 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_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"
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()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,21 +45,24 @@
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()
var/descriptor_height = build_coalesce_description_nofluff(d_list, human, list(MOB_DESCRIPTOR_SLOT_HEIGHT), "%DESC1%")
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
Expand Down
11 changes: 11 additions & 0 deletions code/modules/mob/dead/new_player/new_player.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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

Expand Down
25 changes: 25 additions & 0 deletions code/modules/mob/living/carbon/human/examine.dm
Original file line number Diff line number Diff line change
Expand Up @@ -772,6 +772,31 @@
if(-INFINITY to -5)
. += span_warning("<B>[t_He] look[p_s()] much weaker than I.</B>")

//CC Edit begin
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("<B>[t_He] appear[p_s()] to be very dangerous.</B>")
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("<B>I appear very dangerous to others.</B>")
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)))
var/mob/living/L = user
var/final_int = STAINT
Expand Down
Loading
Loading