From 28bddccc895a231bb74d133557147e01a6146492 Mon Sep 17 00:00:00 2001 From: Wateronix Date: Fri, 1 May 2026 12:33:45 +0200 Subject: [PATCH] porting changes 1 to 1 --- code/__DEFINES/admin.dm | 3 + code/_globalvars/lists/objects.dm | 2 + code/modules/admin/topic.dm | 27 ++++ .../faction/add_faction_objective.dm | 49 +++++++ code/modules/antagonists/faction/faction.dm | 138 ++++++++++++++++++ .../faction/faction_item_spawner.dm | 41 ++++++ .../antagonists/faction/faction_objectives.dm | 29 ++++ .../antagonists/faction/faction_subsystem.dm | 29 ++++ .../faction/view_faction_objective.dm | 18 +++ code/modules/jobs/job_types/bighorn.dm | 5 + code/modules/jobs/job_types/bos.dm | 7 +- code/modules/jobs/job_types/legion.dm | 28 ++++ code/modules/jobs/job_types/ncr.dm | 24 +++ code/modules/jobs/job_types/tribal.dm | 5 + fortune13.dme | 6 + 15 files changed, 410 insertions(+), 1 deletion(-) create mode 100644 code/modules/antagonists/faction/add_faction_objective.dm create mode 100644 code/modules/antagonists/faction/faction.dm create mode 100644 code/modules/antagonists/faction/faction_item_spawner.dm create mode 100644 code/modules/antagonists/faction/faction_objectives.dm create mode 100644 code/modules/antagonists/faction/faction_subsystem.dm create mode 100644 code/modules/antagonists/faction/view_faction_objective.dm diff --git a/code/__DEFINES/admin.dm b/code/__DEFINES/admin.dm index 0dda3eae..00fff2a9 100644 --- a/code/__DEFINES/admin.dm +++ b/code/__DEFINES/admin.dm @@ -67,6 +67,9 @@ #define ADMIN_INDIVIDUALLOG(user) "(LOGS)" #define ADMIN_REPLY_MSGTERMINAL(src) "(REPLY)" +#define ADMIN_APPROVEOBJECTIVE(user, message, antag_datum) "(APPROVE)" +#define ADMIN_DENYOBJECTIVE(user, antag_datum) "(DENY)" + #define ADMIN_PUNISHMENT_LIGHTNING "Lightning bolt" #define ADMIN_PUNISHMENT_BRAINDAMAGE "Brain damage" #define ADMIN_PUNISHMENT_GIB "Gib" diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm index 5783219f..a31fc90f 100644 --- a/code/_globalvars/lists/objects.dm +++ b/code/_globalvars/lists/objects.dm @@ -52,3 +52,5 @@ GLOBAL_LIST_EMPTY(money_piles) GLOBAL_LIST_EMPTY(spent_bullet_casings) //list of all spent bullet casings GLOBAL_LIST_EMPTY(lamppost) //list of all lampposts + +GLOBAL_LIST_EMPTY(faction_item_spawners) //list of all faction item spawners diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 0ebc42bc..23ca9882 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -2574,6 +2574,33 @@ usr.client.invisimin() //fortuna addition end + +// heremus addition start - faction objective shit + else if(href_list["objectiveapprove"]) + if(!check_rights(R_ADMIN)) + return + + var/mob/M = locate(href_list["objectiveapprove"]) + var/datum/antagonist/faction/antag_datum = locate(href_list["objectiveteam"]) + to_chat(M, "Your new objective for [antag_datum.faction_name] has been approved!") + antag_datum.my_faction.set_additional_objective(href_list["objectivemessage"]) + + log_admin("[key_name(usr)] has accepted [key_name(M)]'s objective for [antag_datum.faction_name]") + message_admins("[key_name_admin(usr)] has accepted [key_name_admin(M)]'s objective for [antag_datum.faction_name]") + + else if(href_list["objectivedeny"]) + if(!check_rights(R_ADMIN)) + return + + var/mob/M = locate(href_list["objectivedeny"]) + var/datum/antagonist/faction/antag_datum = locate(href_list["objectiveteam"]) + to_chat(M, "Your new objective for [antag_datum.faction_name] has been denied!") + + log_admin("[key_name(usr)] has denied [key_name(M)]'s objective for [antag_datum.faction_name]") + message_admins("[key_name_admin(usr)] has denied [key_name_admin(M)]'s objective for [antag_datum.faction_name]") +// heremus addition end + + else if(href_list["create_object"]) if(!check_rights(R_SPAWN)) return diff --git a/code/modules/antagonists/faction/add_faction_objective.dm b/code/modules/antagonists/faction/add_faction_objective.dm new file mode 100644 index 00000000..54c3d012 --- /dev/null +++ b/code/modules/antagonists/faction/add_faction_objective.dm @@ -0,0 +1,49 @@ +/mob/living/proc/add_legion_objective() + set name = "Add Legion Objective" + set category = "IC" + add_faction_objective(/datum/antagonist/faction/legion, list("Legion Legate", "Legion Centurion", "Legion Veteran Decanus")) + +/mob/living/proc/add_ncr_objective() + set name = "Add NCR Objective" + set category = "IC" + add_faction_objective(/datum/antagonist/faction/ncr, list("NCR Lieutenant","NCR Sergeant First Class","NCR Captain", "NCR Colonel")) + + +/mob/living/proc/add_faction_objective(antag_datum_type, list/whitelisted_jobs) + if(islist(mind.antag_datums)) + var/datum/antagonist/faction/antag_datum = locate(antag_datum_type) in mind.antag_datums + + // check to make sure the verb is being used by the right people + if(!mind) + return + if(!antag_datum) + to_chat(usr, "You aren't in a faction! You shouldn't have this verb, send a bug report!") + return + var/whitelisted_job = FALSE + for(var/job_indx in whitelisted_jobs) + if(job == job_indx) + whitelisted_job = TRUE + break + if(!whitelisted_job) + to_chat(usr, "You aren't a commander of your faction!") + return + + // confirm objective overwrite + if(antag_datum.my_faction.additional_objective) + var/confirm = input("Making a new objective will overwrite the previously made additional objective. Are you \ + sure you wish to continue?", "New Faction Objective") in list("Yes", "No") + if(confirm == "No") + return + + // now make the new objective + var/new_objectives = input(usr, "Write a short summary of what you want \ + as a additional objective for your faction. Make sure it doesn't contradict your faction's already \ + existing objective if it exists!.", "New Faction Objective") as null|message + new_objectives = sanitize(new_objectives) + if(isnull(new_objectives)) + return + to_chat(usr, "You've submitted a request for a new objective for [antag_datum.faction_name]. You'll be told whether it has been approved or denied soon.") + message_admins("[ADMIN_LOOKUPFLW(usr)] wishes to set a new objective for [antag_datum.faction_name]. '[new_objectives]' \ +
[ADMIN_APPROVEOBJECTIVE(src, new_objectives, antag_datum)] or [ADMIN_DENYOBJECTIVE(src, antag_datum)]?") + else + return diff --git a/code/modules/antagonists/faction/faction.dm b/code/modules/antagonists/faction/faction.dm new file mode 100644 index 00000000..9c5b8045 --- /dev/null +++ b/code/modules/antagonists/faction/faction.dm @@ -0,0 +1,138 @@ +// yeah, this is just mostly stolen from tg families +// (like thats a bad thing, families is always fun as fuck) + +/datum/antagonist/faction // base class for faction antag objectives + name = "Faction Member" + roundend_category = "faction" + antagpanel_category = "Faction" + show_in_antagpanel = FALSE //should only show subtypes + show_to_ghosts = TRUE + var/faction_name = "Faction" + /// The overarching family that the owner of this datum is a part of. Family teams are generic and imprinted upon by the per-person antagonist datums. + var/datum/team/faction/my_faction + /// The abbreviation of the family corresponding to this family member datum. + var/faction_id = "IDK" + /// Type of team to create when creating the gang in the first place. Used for renames. + var/faction_team_type = /datum/team/faction + +/datum/antagonist/faction/create_team(team_given) // gets called whenever add_antag_datum() is called on a mind + if(team_given) + my_faction = team_given + return + // if theres no preexisting team given we see if one already exists + var/found_faction = FALSE + for(var/datum/team/faction/faction_team in get_all_teams(/datum/team/faction)) + if(faction_team.name == faction_name) + my_faction = faction_team + found_faction = TRUE + break + // if not, we make a new one + if(!found_faction) + var/new_faction = new faction_team_type() + my_faction = new_faction + my_faction.name = faction_name + my_faction.faction_id = faction_id + my_faction.faction_datum = src + my_faction.current_objectives = SSfaction_objectives.current_objectives + +/datum/antagonist/faction/get_team() + return my_faction + +/datum/antagonist/faction/greet() + if(my_faction.current_objectives.faction_objectives[src.type] || my_faction.additional_objective) + to_chat(usr, "[faction_name] Objectives:") + if(my_faction.current_objectives.faction_objectives[src.type]) + to_chat(usr, "Main Objective: [my_faction.current_objectives.faction_objectives[src.type]]") + if(my_faction.additional_objective) + to_chat(usr, "[my_faction.current_objectives.faction_objectives[src.type] ? "Additional " : ""]Objective: [my_faction.additional_objective]") + +/datum/team/faction + /// The abbreviation of this family. + var/faction_id = "IDK" + /// The specific, occupied family member antagonist datum that is used to reach the handler / check objectives, and from which the above properties (sans points) are inherited. + var/datum/antagonist/faction/faction_datum + /// The current faction objectives. + var/datum/faction_objectives/current_objectives + /// Additional objective added by players + var/additional_objective + +/datum/team/faction/roundend_report() + var/list/report = list() + report += "[name]:" + if(current_objectives.everyone_objective) + report += "Objective: [current_objectives.everyone_objective]" + else + var/assigned_objective = current_objectives.faction_objectives[faction_datum.type] + if(assigned_objective || additional_objective) + if(assigned_objective) + report += "Main Objective: [assigned_objective]" + if(additional_objective) + report += "[assigned_objective ? "Additional " : ""]Objective: [additional_objective]" + + else + report += "This faction had no objectives to complete." // factions can be set no objectives + + return "
[report.Join("
")]
" + +/datum/team/faction/proc/set_additional_objective(var/new_objective) + additional_objective = new_objective + for(var/datum/mind/faction_member in members) + to_chat(faction_member, "A new objective has been assigned: [additional_objective]") + +// here are the actual factions + +/datum/team/faction/legion + faction_id = "LEG" + +/datum/antagonist/faction/legion + show_in_antagpanel = TRUE + name = "Legionary" + roundend_category = "The Boreal Legion" + faction_name = "The Boreal Legion" + faction_id = "LEG" + faction_team_type = /datum/team/faction/legion + +/datum/team/faction/ncr + faction_id = "NCR" + +/datum/antagonist/faction/ncr + show_in_antagpanel = TRUE + name = "PRNC Soldier" + roundend_category = "The People's Republic of New California" + faction_name = "The Californian People's Liberation Force" + faction_id = "NCR" + faction_team_type = /datum/team/faction/ncr + +/datum/team/faction/bos + faction_id = "BOS" + +/datum/antagonist/faction/bos + show_in_antagpanel = TRUE + name = "Brotherhood of Steel Cultist" + roundend_category = "The Brotherhood of Steel" + faction_name = "Brotherhood of Steel" + faction_id = "BOS" + faction_team_type = /datum/team/faction/bos + +// undecided on these +/datum/team/faction/tribal + faction_id = "TRIB" + +/datum/antagonist/faction/tribal + show_in_antagpanel = TRUE + name = "Tribal" + roundend_category = "The tribals" + faction_name = "Tribals" + faction_id = "TRIB" + faction_team_type = /datum/team/faction/tribal + +/datum/team/faction/bighorn + faction_id = "TOWN" + +/datum/antagonist/faction/bighorn + show_in_antagpanel = TRUE + name = "Bighorn Citizen" + roundend_category = "Bighorn" + faction_name = "Bighorn" + faction_id = "TOWN" + faction_team_type = /datum/team/faction/bighorn diff --git a/code/modules/antagonists/faction/faction_item_spawner.dm b/code/modules/antagonists/faction/faction_item_spawner.dm new file mode 100644 index 00000000..1d7bf7b0 --- /dev/null +++ b/code/modules/antagonists/faction/faction_item_spawner.dm @@ -0,0 +1,41 @@ +/obj/effect/spawner/faction_item + name = "faction objective item spawner" + var/spawn_on_turf = TRUE + var/associated_faction // antagonist datum type + +/obj/effect/spawner/faction_item/Initialize() + . = ..() + GLOB.faction_item_spawners += src + +/obj/effect/spawner/faction_item/Destroy() + GLOB.faction_item_spawners -= src + . = ..() + +/obj/effect/spawner/faction_item/proc/spawn_item() + if(associated_faction && SSfaction_objectives.current_objectives) + var/datum/faction_objectives/current_objectives = SSfaction_objectives.current_objectives + if(current_objectives.faction_items[associated_faction]) + var/atom/A = spawn_on_turf ? get_turf(src) : loc + var/item_to_spawn = current_objectives.faction_items[associated_faction] + new item_to_spawn(A) + return INITIALIZE_HINT_QDEL + +/obj/effect/spawner/faction_item/legion + name = "legion objective item spawner" + associated_faction = /datum/antagonist/faction/legion + +/obj/effect/spawner/faction_item/ncr + name = "NCR objective item spawner" + associated_faction = /datum/antagonist/faction/ncr + +/obj/effect/spawner/faction_item/bos + name = "BOS objective item spawner" + associated_faction = /datum/antagonist/faction/bos + +/obj/effect/spawner/faction_item/tribal + name = "tribal objective item spawner" + associated_faction = /datum/antagonist/faction/tribal + +/obj/effect/spawner/faction_item/bighorn + name = "bighorn objective item spawner" + associated_faction = /datum/antagonist/faction/bighorn diff --git a/code/modules/antagonists/faction/faction_objectives.dm b/code/modules/antagonists/faction/faction_objectives.dm new file mode 100644 index 00000000..26bbeb66 --- /dev/null +++ b/code/modules/antagonists/faction/faction_objectives.dm @@ -0,0 +1,29 @@ +/datum/faction_objectives + ///The name of the theme. + var/name = "Faction Objective" + ///All gangs in the theme, typepaths of gangs. + var/list/involved_factions = list() + ///The objectives for the gangs. Associative list, type = "objective" + var/list/faction_objectives = list() + ///Items given to the factions. Associative list, faction type = item type + var/list/faction_items = list() + ///If this isn't null, everyone gets this objective. + var/list/everyone_objective = null + ///Intel message sent to faction comms consoles. + var/intel_message = null + +/datum/faction_objectives/test + name = "Test" + involved_factions = list(/datum/antagonist/faction/ncr, /datum/antagonist/faction/legion) + faction_objectives = list( + + /datum/antagonist/faction/ncr = "Hello, NCR. Our numbers are going down. We need you to bring those numbers up. \ + Collect protection money from the station's departments by any means necessary. \ + If you need to 'encourage' people to pay up, do so. Get to these potential clients before the Mob does.", + + /datum/antagonist/faction/legion = "Good afternoon, LEGION. The Boss sends his regards. He also sends a message. \ + We need to collect what we're owed. The departments on this station all owe quite a lot of money to us. We intend to collect on our debts. \ + Collect the debt owed by our clients from the departments on the station. \ + Make sure to get to them before those damn mafiosos do." + ) + intel_message = "IDFK what to put here" diff --git a/code/modules/antagonists/faction/faction_subsystem.dm b/code/modules/antagonists/faction/faction_subsystem.dm new file mode 100644 index 00000000..5a1d1f3f --- /dev/null +++ b/code/modules/antagonists/faction/faction_subsystem.dm @@ -0,0 +1,29 @@ +///Forces the faction objectives via variable editing. Used for debugging. +GLOBAL_VAR(faction_objective_override) + +SUBSYSTEM_DEF(faction_objectives) + name = "Faction Objectives" + flags = SS_NO_FIRE + var/datum/faction_objectives/current_objectives + +/datum/controller/subsystem/faction_objectives/Initialize(start_timeofday) + // set objectives + if(!GLOB.faction_objective_override) + var/objectives_to_use = pick(subtypesof(/datum/faction_objectives)) + current_objectives = new objectives_to_use + else + current_objectives = new GLOB.faction_objective_override + + // spawn items for faction objectives + for(var/obj/effect/spawner/faction_item/faction_item_spawner in GLOB.faction_item_spawners) + faction_item_spawner.spawn_item() + + // send intel message to all message terminals + if(current_objectives.intel_message) + for(var/obj/machinery/msgterminal/i_hate_the_fbi_and_i_hate_the_cia in GLOB.allTerminals) + i_hate_the_fbi_and_i_hate_the_cia.createmessage("A little birdie", "INTEL REPORT", current_objectives.intel_message, 2) // 2 = high message priority + return ..() + +/datum/controller/subsystem/faction_objectives/stat_entry(msg) + msg = "Current Faction Objectives: [current_objectives.name]" + return ..() diff --git a/code/modules/antagonists/faction/view_faction_objective.dm b/code/modules/antagonists/faction/view_faction_objective.dm new file mode 100644 index 00000000..7beb9b06 --- /dev/null +++ b/code/modules/antagonists/faction/view_faction_objective.dm @@ -0,0 +1,18 @@ +/mob/living/proc/view_faction_objective() + set name = "View Faction Objective" + set category = "IC" + + if(islist(mind.antag_datums)) + for(var/antag_datum_type in subtypesof(/datum/antagonist/faction)) + if(locate(antag_datum_type) in mind.antag_datums) + var/datum/antagonist/faction/antag_datum = locate(antag_datum_type) in mind.antag_datums + to_chat(usr, "[antag_datum.faction_name] Objectives:") + var/assigned_objective = antag_datum.my_faction.current_objectives.faction_objectives[antag_datum_type] + var/additional_objective = antag_datum.my_faction.additional_objective + if(assigned_objective || additional_objective) + if(assigned_objective) + to_chat(usr, "Main Objective: [assigned_objective]") + if(additional_objective) + to_chat(usr, "[assigned_objective ? "Additional " : ""]Objective: [additional_objective]") + else + to_chat(usr, "No objectives to complete") diff --git a/code/modules/jobs/job_types/bighorn.dm b/code/modules/jobs/job_types/bighorn.dm index c8565ecd..9c792fa6 100644 --- a/code/modules/jobs/job_types/bighorn.dm +++ b/code/modules/jobs/job_types/bighorn.dm @@ -25,6 +25,11 @@ Will probably start phasing more of this to actual custom access as we go. exp_type = EXP_TYPE_BIGHORN faction = FACTION_BIGHORN +/datum/job/bighorn/after_spawn(mob/living/spawner, mob/client_holder, latejoin = FALSE) + . = ..() + spawner.mind.add_antag_datum(/datum/antagonist/faction/bighorn) + add_verb(spawner,/mob/living/proc/view_faction_objective) + /* Mayor */ diff --git a/code/modules/jobs/job_types/bos.dm b/code/modules/jobs/job_types/bos.dm index ee8cc176..fdfaa87b 100644 --- a/code/modules/jobs/job_types/bos.dm +++ b/code/modules/jobs/job_types/bos.dm @@ -14,7 +14,12 @@ Main doors: ACCESS_CAPTAIN 20 outfit = /datum/outfit/job/bos/ exp_type = EXP_TYPE_BROTHERHOOD - objectivesList = list("Leadership recommends the following goal for this week: Establish an outpost at the radio tower","Leadership recommends the following goal for this week: Acquire blueprints for research and preservation", "Leadership recommends the following goal for this week: Acquire or confiscate dangerous tech by any means necessary.") + //objectivesList = list("Leadership recommends the following goal for this week: Establish an outpost at the radio tower","Leadership recommends the following goal for this week: Acquire blueprints for research and preservation", "Leadership recommends the following goal for this week: Acquire or confiscate dangerous tech by any means necessary.") + + /datum/job/bos/after_spawn(mob/living/spawner, mob/client_holder, latejoin = FALSE) + . = ..() + spawner.mind.add_antag_datum(/datum/antagonist/faction/bos) + add_verb(spawner,/mob/living/proc/view_faction_objective) /datum/outfit/job/bos name = "bosdatums" diff --git a/code/modules/jobs/job_types/legion.dm b/code/modules/jobs/job_types/legion.dm index 42c7570e..0893fbde 100644 --- a/code/modules/jobs/job_types/legion.dm +++ b/code/modules/jobs/job_types/legion.dm @@ -27,6 +27,12 @@ Discuss balance and documentation changes with Dragonfruits#1913 or forward them minimal_access = list(ACCESS_LEGION, ACCESS_LEGION_SLAVE) blacklisted_quirks = list(/datum/quirk/stim_intolerance, /datum/quirk/straight_edge, /datum/quirk/herbal_affinity) + +/datum/job/CaesarsLegion/after_spawn(mob/living/spawner, mob/client_holder, latejoin = FALSE) + . = ..() + spawner.mind.add_antag_datum(/datum/antagonist/faction/legion) + add_verb(spawner,/mob/living/proc/view_faction_objective) + /datum/outfit/job/CaesarsLegion ears = null box = /obj/item/storage/survivalkit/primitive @@ -110,6 +116,10 @@ Discuss balance and documentation changes with Dragonfruits#1913 or forward them access = list(ACCESS_LEGION, ACCESS_CHANGE_IDS, ACCESS_LEGION_COMMAND, ACCESS_LEGION_SLAVE) minimal_access = list(ACCESS_LEGION, ACCESS_CHANGE_IDS, ACCESS_LEGION_COMMAND, ACCESS_LEGION_SLAVE) +/datum/job/CaesarsLegion/Legionnaire/f13legate/after_spawn(mob/living/spawner, mob/client_holder, latejoin = FALSE) + . = ..() + add_verb(spawner,/mob/living/proc/add_legion_objective) + /datum/outfit/job/CaesarsLegion/Legionnaire/f13legate/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) ..() if(visualsOnly) @@ -270,6 +280,10 @@ Discuss balance and documentation changes with Dragonfruits#1913 or forward them /datum/outfit/loadout/berserkercenturion, // Love Tap, Berserker Martial Art ) +/datum/job/CaesarsLegion/Legionnaire/f13centurion/after_spawn(mob/living/spawner, mob/client_holder, latejoin = FALSE) + . = ..() + add_verb(spawner,/mob/living/proc/add_legion_objective) + /datum/outfit/job/CaesarsLegion/Legionnaire/f13centurion/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) ..() if(visualsOnly) @@ -370,6 +384,9 @@ Discuss balance and documentation changes with Dragonfruits#1913 or forward them /datum/outfit/loadout/decvetbrave, // Riot shotgun, Spatha ) +/datum/job/CaesarsLegion/Legionnaire/f13decanvet/after_spawn(mob/living/spawner, mob/client_holder, latejoin = FALSE) + . = ..() + add_verb(spawner,/mob/living/proc/add_legion_objective) /datum/outfit/job/CaesarsLegion/Legionnaire/f13decanvet/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) ..() @@ -461,6 +478,8 @@ Discuss balance and documentation changes with Dragonfruits#1913 or forward them /datum/outfit/loadout/decprimboom, // GL, .44 Revolver, Frag grenades ) + + matchmaking_allowed = list( /datum/matchmaking_pref/friend = list( /datum/job/CaesarsLegion, @@ -470,6 +489,11 @@ Discuss balance and documentation changes with Dragonfruits#1913 or forward them ), ) +/datum/job/CaesarsLegion/Legionnaire/f13decan/after_spawn(mob/living/spawner, mob/client_holder, latejoin = FALSE) + . = ..() + add_verb(spawner,/mob/living/proc/add_legion_objective) + + /datum/outfit/job/CaesarsLegion/Legionnaire/f13decan/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) ..() if(visualsOnly) @@ -556,6 +580,10 @@ Discuss balance and documentation changes with Dragonfruits#1913 or forward them ), ) +/datum/job/CaesarsLegion/Legionnaire/f13decanrec/after_spawn(mob/living/spawner, mob/client_holder, latejoin = FALSE) + . = ..() + add_verb(spawner,/mob/living/proc/add_legion_objective) + /datum/outfit/job/CaesarsLegion/Legionnaire/f13decanrec/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) ..() if(visualsOnly) diff --git a/code/modules/jobs/job_types/ncr.dm b/code/modules/jobs/job_types/ncr.dm index 372fa168..1d2cc4d7 100644 --- a/code/modules/jobs/job_types/ncr.dm +++ b/code/modules/jobs/job_types/ncr.dm @@ -29,6 +29,11 @@ Weapons Service Rifle, Grease Gun, 9mm pistol, all good. enforces = "The NCR expects: Obeying the lawful orders of superiors. Proper treatment of prisoners. Good conduct within the Republic's laws. Wearing the uniform." objectivesList = list("Leadership recommends the following goal for this week: Establish an outpost at the radio tower","Leadership recommends the following goal for this week: Neutralize and capture dangerous criminals", "Leadership recommends the following goal for this week: Free slaves and establish good relations with unaligned individuals.") +/datum/job/ncr/after_spawn(mob/living/spawner, mob/client_holder, latejoin = FALSE) + . = ..() + spawner.mind.add_antag_datum(/datum/antagonist/faction/ncr) + add_verb(spawner,/mob/living/proc/view_faction_objective) + /datum/outfit/job/ncr name = "NCRdatums" jobtype = /datum/job/ncr @@ -73,6 +78,10 @@ Weapons Service Rifle, Grease Gun, 9mm pistol, all good. outfit = /datum/outfit/job/ncr/f13colonel +/datum/job/ncr/f13colonel/after_spawn(mob/living/spawner, mob/client_holder, latejoin = FALSE) + . = ..() + add_verb(spawner,/mob/living/proc/add_ncr_objective) + /datum/outfit/job/ncr/f13colonel/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE) ..() if(visualsOnly) @@ -165,6 +174,11 @@ Weapons Service Rifle, Grease Gun, 9mm pistol, all good. /datum/outfit/loadout/ncrcptshotgun, // Pancor ) +/datum/job/ncr/f13captain/after_spawn(mob/living/spawner, mob/client_holder, latejoin = FALSE) + . = ..() + add_verb(spawner,/mob/living/proc/add_ncr_objective) + + /datum/outfit/job/ncr/f13captain/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) ..() if(visualsOnly) @@ -246,6 +260,11 @@ Weapons Service Rifle, Grease Gun, 9mm pistol, all good. ), ) + +/datum/job/ncr/f13lieutenant/after_spawn(mob/living/spawner, mob/client_holder, latejoin = FALSE) + . = ..() + add_verb(spawner,/mob/living/proc/add_ncr_objective) + /datum/outfit/job/ncr/f13lieutenant // Republic's Pride, Binoculars, Bayonet, M1911 custom name = "NCR Lieutenant" jobtype = /datum/job/ncr/f13lieutenant @@ -325,6 +344,11 @@ Weapons Service Rifle, Grease Gun, 9mm pistol, all good. ), ) +/datum/job/ncr/f13sergeant/after_spawn(mob/living/spawner, mob/client_holder, latejoin = FALSE) + . = ..() + add_verb(spawner,/mob/living/proc/add_ncr_objective) + + /datum/outfit/job/ncr/f13sergeant/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) ..() if(visualsOnly) diff --git a/code/modules/jobs/job_types/tribal.dm b/code/modules/jobs/job_types/tribal.dm index 8574dfe2..b9117da7 100644 --- a/code/modules/jobs/job_types/tribal.dm +++ b/code/modules/jobs/job_types/tribal.dm @@ -16,6 +16,11 @@ Within this file is the material to turn the previous odd-inclusion into a prope Are you worthy of their attention?" supervisors = "the stars above" +/datum/job/tribal/after_spawn(mob/living/spawner, mob/client_holder, latejoin = FALSE) + . = ..() + spawner.mind.add_antag_datum(/datum/antagonist/faction/tribal) + add_verb(spawner,/mob/living/proc/view_faction_objective) + /datum/outfit/job/tribal/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) ..() if(visualsOnly) diff --git a/fortune13.dme b/fortune13.dme index c4b42775..8d733084 100644 --- a/fortune13.dme +++ b/fortune13.dme @@ -1679,6 +1679,12 @@ #include "code\modules\antagonists\eldritch_cult\knowledge\flesh_lore.dm" #include "code\modules\antagonists\eldritch_cult\knowledge\rust_lore.dm" #include "code\modules\antagonists\ert\ert.dm" +#include "code\modules\antagonists\faction\add_faction_objective.dm" +#include "code\modules\antagonists\faction\faction.dm" +#include "code\modules\antagonists\faction\faction_objectives.dm" +#include "code\modules\antagonists\faction\faction_subsystem.dm" +#include "code\modules\antagonists\faction\faction_item_spawner.dm" +#include "code\modules\antagonists\faction\view_faction_objective.dm" #include "code\modules\antagonists\fugitive\fugitive.dm" #include "code\modules\antagonists\fugitive\fugitive_outfits.dm" #include "code\modules\antagonists\fugitive\fugitive_ship.dm"