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_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) diff --git a/code/datums/migrants/migrant_waves/runaway_prisoners.dm b/code/datums/migrants/migrant_waves/runaway_prisoners.dm index 8134dbabe10..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") + 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/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..f79831e95ee 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,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, "[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..b81c24513dd 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) @@ -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 @@ -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 @@ -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 @@ -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 diff --git a/code/modules/jobs/job_types/roguetown/adventurer/bandit.dm b/code/modules/jobs/job_types/roguetown/adventurer/bandit.dm index 5e9b8b58943..1762de54359 100644 --- a/code/modules/jobs/job_types/roguetown/adventurer/bandit.dm +++ b/code/modules/jobs/job_types/roguetown/adventurer/bandit.dm @@ -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 diff --git a/code/modules/jobs/job_types/roguetown/adventurer/wretch.dm b/code/modules/jobs/job_types/roguetown/adventurer/wretch.dm index da6d1db5705..76fe0e35eb2 100644 --- a/code/modules/jobs/job_types/roguetown/adventurer/wretch.dm +++ b/code/modules/jobs/job_types/roguetown/adventurer/wretch.dm @@ -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() 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..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() @@ -59,7 +62,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/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 diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index f303f389ab2..eeaa001a1ab 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -772,6 +772,31 @@ if(-INFINITY to -5) . += span_warning("[t_He] look[p_s()] much weaker than I.") + //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("[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))) var/mob/living/L = user var/final_int = STAINT diff --git a/code/modules/roguetown/roguemachine/bounty.dm b/code/modules/roguetown/roguemachine/bounty.dm index 740898468b4..827bfa26e69 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. Aproach with extreme caution!
" + if(istype(new_bounty.compliance, /datum/compliance_setting/armed_compliant)) + 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. 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.
" + 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. Aproach with extreme caution!
" + if(istype(new_bounty.compliance, /datum/compliance_setting/armed_compliant)) + 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. 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.
" + 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. Aproach with extreme caution!
" + if(istype(new_bounty.compliance, /datum/compliance_setting/armed_compliant)) + 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. 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.'.
" 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..e7dfa87b850 --- /dev/null +++ b/modular_causticcove/code/datums/compliance.dm @@ -0,0 +1,44 @@ +GLOBAL_LIST_EMPTY(compliance_settings) + +/datum/compliance_setting + 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\ + 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." + + switch_string = "armed_dangerous" + +/datum/compliance_setting/armed_compliant + name = "Armed and Compliant" + desc = "You are considered to be Armed and compliant. \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." + + switch_string = "armed_compliant" + +/datum/compliance_setting/non_belligerent + name = "Non-Belligerent" + desc = "You are considered to be Non-Belligerent. \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." + + switch_string = "non_belligerent" diff --git a/roguetown.dme b/roguetown.dme index c1eabe2b1b3..a284c3d2866 100644 --- a/roguetown.dme +++ b/roguetown.dme @@ -3010,6 +3010,7 @@ #include "modular_hearthstone\code\modules\mob\living\simple_animal\rogue\rogue_corpse.dm" #include "modular_hearthstone\code\modules\reagents\reagent_containers\lux.dm" #include "modular_causticcove/code/game/objects/effects/spawners/loot_magical.dm" +#include "modular_causticcove\code\datums\compliance.dm" #include "modular_causticcove\code\modules\events\adventure\random_patrols\random_patrols.dm" #include "modular_causticcove\code\modules\events\adventure\random_bosses\random_boss.dm" // END_INCLUDE