diff --git a/code/__DEFINES/antagonists.dm b/code/__DEFINES/antagonists.dm index 418832f1556..1cf5a4a0040 100644 --- a/code/__DEFINES/antagonists.dm +++ b/code/__DEFINES/antagonists.dm @@ -122,9 +122,6 @@ ///File to the malf flavor #define MALFUNCTION_FLAVOR_FILE "antagonist_flavor/malfunction_flavor.json" -///File to the thief flavor -#define THIEF_FLAVOR_FILE "antagonist_flavor/thief_flavor.json" - /// JSON string file for all of our heretic influence flavors #define HERETIC_INFLUENCE_FILE "antagonist_flavor/heretic_influences.json" diff --git a/code/__DEFINES/role_preferences.dm b/code/__DEFINES/role_preferences.dm index 17f3ef4b505..dd58e1f0f38 100644 --- a/code/__DEFINES/role_preferences.dm +++ b/code/__DEFINES/role_preferences.dm @@ -14,7 +14,6 @@ #define ROLE_HERETIC "Heretic" #define ROLE_MALF "Malf AI" #define ROLE_OPERATIVE "Operative" -#define ROLE_THIEF "Thief" #define ROLE_TRAITOR "Traitor" #define ROLE_WIZARD "Wizard" @@ -30,7 +29,6 @@ #define ROLE_NINJA "Space Ninja" #define ROLE_OBSESSED "Obsessed" #define ROLE_OPERATIVE_MIDROUND "Operative (Midround)" -#define ROLE_OPPORTUNIST "Opportunist" #define ROLE_REV_HEAD "Head Revolutionary" #define ROLE_SENTIENT_DISEASE "Sentient Disease" #define ROLE_SLEEPER_AGENT "Syndicate Sleeper Agent" @@ -113,7 +111,6 @@ GLOBAL_LIST_INIT(special_roles, list( ROLE_MALF = 0, ROLE_OPERATIVE = 14, ROLE_REV_HEAD = 14, - ROLE_THIEF = 0, ROLE_TRAITOR = 0, ROLE_WIZARD = 14, @@ -129,7 +126,6 @@ GLOBAL_LIST_INIT(special_roles, list( ROLE_NINJA = 0, ROLE_OBSESSED = 0, ROLE_OPERATIVE_MIDROUND = 14, - ROLE_OPPORTUNIST = 0, ROLE_REVENANT = 0, ROLE_SENTIENT_DISEASE = 0, ROLE_SLEEPER_AGENT = 0, diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index ee8ac90b88f..af89aed2ed1 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -847,8 +847,6 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define AI_ANCHOR_TRAIT "ai_anchor" /// Trait from [/datum/antagonist/nukeop/clownop] #define CLOWNOP_TRAIT "clownop" -/// Trait from [/datum/antagonist/thief] -#define THIEF_TRAIT "thief" ///Traits given by station traits #define STATION_TRAIT_BANANIUM_SHIPMENTS "station_trait_bananium_shipments" diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm index 6d42cace10f..399fa28b61f 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm @@ -914,59 +914,3 @@ message_admins("[ADMIN_LOOKUPFLW(obsessed)] has been made Obsessed by the midround ruleset.") log_game("[key_name(obsessed)] was made Obsessed by the midround ruleset.") return TRUE - -/// Thief ruleset -/datum/dynamic_ruleset/midround/from_living/opportunist - name = "Opportunist" - midround_ruleset_style = MIDROUND_RULESET_STYLE_LIGHT - antag_datum = /datum/antagonist/thief - antag_flag = ROLE_OPPORTUNIST - antag_flag_override = ROLE_THIEF - protected_roles = list( - JOB_CAPTAIN, - JOB_DETECTIVE, - JOB_HEAD_OF_SECURITY, - JOB_PRISONER, - JOB_SECURITY_OFFICER, - JOB_WARDEN, - ) - restricted_roles = list( - JOB_AI, - JOB_CYBORG, - ROLE_POSITRONIC_BRAIN, - ) - required_candidates = 1 - weight = 2 - cost = 3 //Worth less than obsessed, but there's more of them. - requirements = list(10,10,10,10,10,10,10,10,10,10) - repeatable = TRUE - -/datum/dynamic_ruleset/midround/from_living/opportunist/trim_candidates() - ..() - candidates = living_players - for(var/mob/living/carbon/human/candidate in candidates) - if( \ - //no bigger antagonists getting smaller role - candidate.mind && (candidate.mind.special_role || candidate.mind.antag_datums?.len > 0) \ - //no dead people - || candidate.stat == DEAD \ - //no people who don't want it - || !(ROLE_OPPORTUNIST in candidate.client?.prefs?.be_special) \ - //no non-station crew - || candidate.mind.assigned_role.faction != FACTION_STATION \ - //stops thief being added to admins messing around on centcom - || is_centcom_level(candidate.z) \ - ) - candidates -= candidate - -/datum/dynamic_ruleset/midround/from_living/opportunist/execute() - var/mob/living/carbon/human/thief = pick_n_take(candidates) - thief.mind.add_antag_datum(antag_datum) - message_admins("[ADMIN_LOOKUPFLW(thief)] has been made a Thief by the midround ruleset.") - log_game("[key_name(thief)] was made a Thief by the midround ruleset.") - return TRUE - -/// Probability the AI going malf will be accompanied by an ion storm announcement and some ion laws. -#undef MALF_ION_PROB -/// The probability to replace an existing law with an ion law instead of adding a new ion law. -#undef REPLACE_LAW_WITH_ION_PROB diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm index 7a4e045dd5b..2afb6159557 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm @@ -645,51 +645,6 @@ spawn_meteors(ramp_up_final, wavetype) -/// Ruleset for thieves -/datum/dynamic_ruleset/roundstart/thieves - name = "Thieves" - antag_flag = ROLE_THIEF - antag_datum = /datum/antagonist/thief - protected_roles = list( - JOB_CAPTAIN, - JOB_DETECTIVE, - JOB_HEAD_OF_SECURITY, - JOB_PRISONER, - JOB_SECURITY_OFFICER, - JOB_WARDEN, - ) - restricted_roles = list( - JOB_AI, - JOB_CYBORG, - ) - required_candidates = 1 - weight = 3 - cost = 4 //very cheap cost for the round - scaling_cost = 0 - requirements = list(8,8,8,8,8,8,8,8,8,8) - antag_cap = list("denominator" = 24, "offset" = 2) - flags = LONE_RULESET - -/datum/dynamic_ruleset/roundstart/thieves/pre_execute(population) - . = ..() - var/num_thieves = get_antag_cap(population) * (scaled_times + 1) - for (var/i = 1 to num_thieves) - if(candidates.len <= 0) - break - var/mob/chosen_mind = pick_n_take(candidates) - assigned += chosen_mind.mind - chosen_mind.mind.restricted_roles = restricted_roles - chosen_mind.mind.special_role = ROLE_THIEF - GLOB.pre_setup_antags += chosen_mind.mind - return TRUE - -/datum/dynamic_ruleset/roundstart/thieves/execute() - for(var/datum/mind/chosen_mind as anything in assigned) - var/datum/antagonist/thief/new_antag = new antag_datum - chosen_mind.add_antag_datum(new_antag) - GLOB.pre_setup_antags -= chosen_mind - return TRUE - /// Ruleset for Nations /datum/dynamic_ruleset/roundstart/nations name = "Nations" diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index a90d9ceec44..9002ef64d45 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -881,10 +881,6 @@ GLOBAL_LIST_EMPTY(possible_items_special) var/obj/item/gun/gun = current_item return !(gun.gun_flags & NOT_A_REAL_GUN) -/datum/objective/steal_n_of_type/summon_guns/thief - explanation_text = "Steal at least 3 guns!" - amount = 3 - /datum/objective/steal_n_of_type/summon_magic name = "steal magic" explanation_text = "Steal at least five magical artefacts!" diff --git a/code/modules/antagonists/thief/thief.dm b/code/modules/antagonists/thief/thief.dm deleted file mode 100644 index f7d56837db3..00000000000 --- a/code/modules/antagonists/thief/thief.dm +++ /dev/null @@ -1,177 +0,0 @@ -///very low level antagonist that has objectives to steal items and live, but is not allowed to kill. -/datum/antagonist/thief - name = "\improper Thief" - job_rank = ROLE_THIEF - roundend_category = "thieves" - antagpanel_category = "Thief" - show_in_antagpanel = TRUE - suicide_cry = "FOR THE LION'S SHARE!!" - preview_outfit = /datum/outfit/thief - antag_hud_name = "thief" - ui_name = "AntagInfoThief" - count_against_dynamic_roll_chance = FALSE - ///assoc list of strings set up for the flavor of the thief. - var/list/thief_flavor - ///if added by an admin, they can choose a thief flavor - var/admin_choice_flavor - ///if a special trait needs to be added from the flavor, here it is - var/special_trait - ///an area marked as the hideout- makes thieves happier to be in, and all thieves of the round know of it. only has a 20% chance of existing in a round. - var/static/area/hideout - ///bool checked for the first thief in a round to decide if there should be one this round - var/static/decided_on_hideout = FALSE - -/datum/antagonist/thief/on_gain() - if(!decided_on_hideout) - decided_on_hideout = TRUE - if(prob(20)) - create_hideout() - flavor_and_objectives() - . = ..() //ui opens here, objectives must exist beforehand - -/datum/antagonist/thief/apply_innate_effects(mob/living/mob_override) - . = ..() - var/mob/living/thief = mob_override || owner.current - ADD_TRAIT(thief, TRAIT_VAL_CORRIN_MEMBER, THIEF_TRAIT) - if(special_trait) - ADD_TRAIT(thief, special_trait, THIEF_TRAIT) - -/datum/antagonist/thief/remove_innate_effects(mob/living/mob_override) - var/mob/living/thief = mob_override || owner.current - REMOVE_TRAIT(thief, TRAIT_VAL_CORRIN_MEMBER, THIEF_TRAIT) - if(special_trait) - REMOVE_TRAIT(thief, special_trait, THIEF_TRAIT) - return ..() - -/datum/antagonist/thief/admin_add(datum/mind/new_owner, mob/admin) - load_strings_file(THIEF_FLAVOR_FILE) - var/list/all_thief_flavors = GLOB.string_cache[THIEF_FLAVOR_FILE] - var/list/all_thief_names = list("Random") - for(var/flavorname as anything in all_thief_flavors) - all_thief_names += flavorname - var/choice = tgui_input_list(admin, "Pick a thief flavor?", "Rogue's Guild", all_thief_names) - if(choice && choice != "Random") - admin_choice_flavor = choice - . = ..() - -/datum/antagonist/thief/proc/create_hideout() - var/list/possible_hideout_locations = list( - /area/station/maintenance/space_hut/cabin, - /area/station/maintenance/space_hut/observatory, - /area/station/service/kitchen/abandoned, - /area/station/service/electronic_marketing_den, - /area/station/service/abandoned_gambling_den, - /area/station/service/abandoned_gambling_den/gaming, - /area/station/service/theater/abandoned, - /area/station/service/library/abandoned, - /area/station/service/hydroponics/garden/abandoned, - /area/station/medical/abandoned, - /area/station/science/research/abandoned, - /area/station/maintenance/department/crew_quarters/bar, - ) - //remove every hideout location that isn't on this map - possible_hideout_locations = special_list_filter(possible_hideout_locations, CALLBACK(src, .proc/filter_nonexistent_areas)) - //for custom maps without any abandoned locations - if(!possible_hideout_locations.len) - return - var/chosen_type = pick(possible_hideout_locations) - hideout = GLOB.areas_by_type[chosen_type] - hideout.mood_trait = TRAIT_VAL_CORRIN_MEMBER - hideout.mood_bonus = 5 - hideout.mood_message = "Feels good, having Val Corrin connections." - -///checks if an area exists in the global areas, obviously comes up null (falsey) if say, abandoned cabin is checked on metastation. -/datum/antagonist/thief/proc/filter_nonexistent_areas(area_type) - return GLOB.areas_by_type[area_type] - -/datum/antagonist/thief/proc/flavor_and_objectives() - //this list has a maximum pickweight of 100. - //if you're adding a new type of thief, DON'T just add TOTAL pickweight. adjusting the others, numb nuts. - var/static/list/weighted_flavors = list( - "Thief" = 50, - "Black Market Outfitter" = 13, - "Organ Market Collector" = 13, - "All Access Fan" = 10, - "Chronicler" = 7, - "Deranged" = 7, - "Hoarder" = 0, //disabled until we have more reasonable nonreplenishable items to hoard- still admin selectable though - ) - var/chosen_flavor = admin_choice_flavor || pick_weight(weighted_flavors) - //objective given by flavor - var/chosen_objective - //whether objective should call find_target() - var/objective_needs_target - //If you add to this switch case, please follow the order of the weighted static list - switch(chosen_flavor) - if("Thief") - chosen_objective = /datum/objective/steal - objective_needs_target = TRUE - if("Black Market Outfitter") - chosen_objective = /datum/objective/steal_n_of_type/summon_guns/thief - objective_needs_target = FALSE - if("Organ Market Collector") - chosen_objective = /datum/objective/steal_n_of_type/organs - objective_needs_target = FALSE - if("All Access Fan") - chosen_objective = /datum/objective/all_access - objective_needs_target = TRUE - special_trait = TRAIT_ID_APPRAISER - if("Chronicler") - chosen_objective = /datum/objective/chronicle - objective_needs_target = FALSE - if("Deranged") - chosen_objective = /datum/objective/hoarder/bodies - objective_needs_target = TRUE - if("Hoarder") - chosen_objective = /datum/objective/hoarder - objective_needs_target = TRUE - thief_flavor = strings(THIEF_FLAVOR_FILE, chosen_flavor) - - //whatever main objective this type of thief needs to accomplish - var/datum/objective/flavor_objective = new chosen_objective - flavor_objective.owner = owner - if(objective_needs_target) - flavor_objective.find_target(dupe_search_range = list(src)) - flavor_objective.update_explanation_text() - objectives += flavor_objective - - //all thieves need to escape with their loot (except hoarders, but you know.) - var/datum/objective/escape/escape_objective = new - escape_objective.owner = owner - objectives += escape_objective - -/datum/antagonist/thief/ui_static_data(mob/user) - var/list/data = list() - data["objectives"] = get_objectives() - data["goal"] = thief_flavor["goal"] - data["intro"] = thief_flavor["introduction"] - data["policy"] = get_policy(ROLE_THIEF) - data["hideout"] = hideout ? hideout.name : "" - return data - -/datum/outfit/thief - name = "Thief (Preview only)" - uniform = /obj/item/clothing/under/color/black - glasses = /obj/item/clothing/glasses/night - gloves = /obj/item/clothing/gloves/color/latex - back = /obj/item/storage/backpack/duffelbag/syndie - mask = /obj/item/clothing/mask/bandana/red - -/datum/outfit/thief/post_equip(mob/living/carbon/human/thief, visualsOnly=FALSE) - // This outfit is used by the assets SS, which is ran before the atoms SS - if(SSatoms.initialized == INITIALIZATION_INSSATOMS) - thief.w_uniform?.update_greyscale() - thief.update_worn_undersuit() - thief.physique = FEMALE //update_body() and gender block or something - thief.hair_color = "#2A71DC" //hair color dna block - thief.skin_tone = "caucasian2" //skin tone dna block - thief.hairstyle = "Bun Head 2" //update_body_parts() - thief.dna.update_ui_block(DNA_GENDER_BLOCK) - thief.dna.update_ui_block(DNA_HAIR_COLOR_BLOCK) - thief.dna.update_ui_block(DNA_SKIN_TONE_BLOCK) - thief.update_body(is_creating = TRUE) - - // This outfit is used by the assets SS, which is ran before the atoms SS - if (SSatoms.initialized == INITIALIZATION_INSSATOMS) - thief.wear_mask?.update_greyscale() - thief.update_worn_mask() diff --git a/code/modules/antagonists/thief/thief_objectives.dm b/code/modules/antagonists/thief/thief_objectives.dm deleted file mode 100644 index a0b1793cf44..00000000000 --- a/code/modules/antagonists/thief/thief_objectives.dm +++ /dev/null @@ -1,161 +0,0 @@ - -GLOBAL_LIST_INIT(hoarder_targets, list( - /obj/item/clothing/gloves/color/yellow, - /obj/item/mod/control, - /obj/item/melee/baton/security, -)) - -/datum/objective/hoarder - name = "hoarding" - explanation_text = "Hoard as many items as you can in one area!" - ///what item we want to get many of - var/atom/movable/target_type - ///how many we want for greentext - var/amount = 7 - ///and where do we want it roundend (this is a type, not a ref) - var/turf/hoarder_turf - -/datum/objective/hoarder/find_target(dupe_search_range, blacklist) - amount = rand(amount - 2, amount + 2) - target_type = pick(GLOB.hoarder_targets) - add_action() - -/datum/objective/hoarder/proc/add_action() - var/list/owners = get_owners() - var/datum/mind/hoardpicker = owners[1] - var/datum/action/declare_hoard/declare = new /datum/action/declare_hoard(hoardpicker.current) - declare.weak_objective = WEAKREF(src) - declare.Grant(hoardpicker.current) - -/datum/objective/hoarder/update_explanation_text() - var/obj/item/target_item = target_type - explanation_text = "Hoard as many [initial(target_item.name)]\s as you can in maintenance (after declaring a spot)! At least [amount] will do." - -/datum/objective/hoarder/check_completion() - . = ..() - if(.) - return TRUE - var/stolen_amount = 0 - if(!hoarder_turf) - return FALSE //they never set up their hoard spot, so they couldn't have done their objective - for(var/atom/movable/in_target_turf in hoarder_turf.get_all_contents()) - if(istype(in_target_turf, target_type)) - if(!valid_target(in_target_turf)) - continue - stolen_amount++ - return stolen_amount >= amount - -/datum/objective/hoarder/proc/valid_target(atom/movable/target) - return TRUE - -///for the deranged flavor -/datum/objective/hoarder/bodies - name = "corpse hoarding" - explanation_text = "Hoard as many dead bodies as you can in one area!" - amount = 5 //little less, bodies are hard when you can't kill like antags - -/datum/objective/hoarder/bodies/find_target(dupe_search_range, blacklist) - amount = rand(amount - 2, amount + 2) - target_type = /mob/living/carbon/human - add_action() - -/datum/objective/hoarder/bodies/valid_target(mob/living/carbon/human/target) - if(target.stat != DEAD) - return FALSE - return TRUE - -/datum/objective/hoarder/bodies/update_explanation_text() - explanation_text = "Hoard as many dead bodies as you can in maintenance (after declaring a spot)! At least [amount] will do." - -/datum/action/declare_hoard - name = "Declare Hoard" - desc = "Declare a new hoarding spot on the ground you're standing on. Items on this floor will count for your objective." - icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' - button_icon_state = "hoard" - ///weak reference to the objective this action targets, set by hoarder objective - var/datum/weakref/weak_objective - -/datum/action/declare_hoard/Trigger(trigger_flags) - if(owner.incapacitated()) - owner.balloon_alert(owner, "not while incapacitated!") - return - var/area/owner_area = get_area(owner) - if(!istype(owner_area, /area/station/maintenance)) - owner.balloon_alert(owner, "hoard must be in maintenance!") - return - var/datum/objective/hoarder/objective = weak_objective.resolve() - if(objective) - owner.balloon_alert(owner, "hoard position set") - objective.hoarder_turf = get_turf(owner) - var/image/hoarder_marker = image('icons/mob/telegraphing/telegraph.dmi', objective.hoarder_turf, "hoarder_circle", layer = ABOVE_OPEN_TURF_LAYER) - owner.client.images |= hoarder_marker - qdel(src) - -///exactly what it sounds like, steal someone's heirloom. -/datum/objective/chronicle - name = "chronicle" - explanation_text = "Steal any family heirloom, for chronicling of course." - -/datum/objective/chronicle/check_completion() - . = ..() - if(.) - return TRUE - var/list/owners = get_owners() - for(var/datum/mind/owner in owners) - if(!isliving(owner.current)) - continue - var/list/all_items = owner.current.get_all_contents() //this should get things in cheesewheels, books, etc. - for(var/obj/possible_heirloom in all_items) - var/datum/component/heirloom/found = possible_heirloom.GetComponent(/datum/component/heirloom) - if(found && !(found.owner in owners)) - return TRUE - return FALSE - -///steal a shit ton of unique ids, escape with them. The part that makes this not "hold a box of blank ids" is the fact they need a registered bank account -/datum/objective/all_access - name = "all access" - explanation_text = "Steal ID cards from other registered crewmembers!" - ///how many we want for greentext - var/amount = 8 - -/datum/objective/all_access/find_target(dupe_search_range, blacklist) - var/list/possible_targets = list() - for(var/datum/mind/possible_target as anything in get_crewmember_minds()) - var/target_area = get_area(possible_target.current) - if(possible_target == owner) - continue - if(!ishuman(possible_target.current)) - continue - if(possible_target.current.stat == DEAD) - continue - if(!is_unique_objective(possible_target,dupe_search_range)) - continue - if(!HAS_TRAIT(SSstation, STATION_TRAIT_LATE_ARRIVALS) && istype(target_area, /area/shuttle/arrival)) - continue - if(possible_target in blacklist) - continue - possible_targets += possible_target - if(length(possible_targets) >= amount + 2) - amount = rand(amount - 2, amount + 2) - else - amount = length(possible_targets) - -/datum/objective/all_access/check_completion() - . = ..() - if(.) - return TRUE - var/stolen_amount = 0 - var/list/owners = get_owners() - for(var/datum/mind/owner in owners) - if(!isliving(owner.current)) - continue - var/list/all_items = owner.current.get_all_contents() //this should get things in cheesewheels, books, etc. - for(var/obj/item/card/id/possible_id in all_items) - //checks if it was the first id card they got, aka the one from joining the round. should prevent "i stole a box of empty ids tee hee :3" - if(!HAS_TRAIT(possible_id, TRAIT_JOB_FIRST_ID_CARD)) - continue - stolen_amount++ - return stolen_amount >= amount - -/datum/objective/all_access/update_explanation_text() - explanation_text = "Steal at least [amount] unique ID cards from other registered crewmembers. It's not enough to swipe replacement ID cards that were created and assigned while on the station, you need to swipe IDs that other crewmembers were initially issued!" diff --git a/code/modules/jobs/job_types/detective.dm b/code/modules/jobs/job_types/detective.dm index a9fcab846b6..fb5a6323628 100644 --- a/code/modules/jobs/job_types/detective.dm +++ b/code/modules/jobs/job_types/detective.dm @@ -40,7 +40,7 @@ ) family_heirlooms = list(/obj/item/reagent_containers/cup/glass/bottle/whiskey) - rpg_title = "Thiefcatcher" + rpg_title = "Thiefcatcher" //I guess they caught them all rip thief... job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS | JOB_CAN_BE_INTERN diff --git a/code/modules/unit_tests/screenshots/screenshot_antag_icons_thief.png b/code/modules/unit_tests/screenshots/screenshot_antag_icons_thief.png deleted file mode 100644 index 5a5a87d99cb..00000000000 Binary files a/code/modules/unit_tests/screenshots/screenshot_antag_icons_thief.png and /dev/null differ diff --git a/strings/antagonist_flavor/thief_flavor.json b/strings/antagonist_flavor/thief_flavor.json deleted file mode 100644 index 05c2b3c3ed1..00000000000 --- a/strings/antagonist_flavor/thief_flavor.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "All Access Fan": { - "goal": "The maintenance scrawlings speak of a legend who collected all the ids, and ascended to Accessia, land of the... well, the scrawlings got a little too hard to read. But fuck it, you're going to collect them ALL. Even if that makes you a complete asshole. Examine IDs to see if they're from Central Command, thus good to steal!", - "introduction": "You're going to collect All the Access today." - }, - "Black Market Outfitter": { - "goal": "You've tapped into the black market, and it turns out you could get rich quick introducing some of Nanotrasen's guns to the dark web!", - "introduction": "You're a Black Market Outfitter." - }, - "Chronicler": { - "goal": "You're one who wants to protect and preserve heirlooms. Unfortunately, your crewmates don't understand the greater mission here, so you'll have to take their heirlooms without their permission. Hint: You can find out who has heirlooms at a medical records console.", - "introduction": "You're the Chronicler." - }, - "Deranged": { - "goal": "Nothing was the same after opening the Codex. You now know that the souls of the dead have forever been trapped by the Devil within their own mortal body. The only way to solve this is to collect them all, and have a tea party with them!", - "introduction": "You're Deranged." - }, - "Hoarder": { - "goal": "You have a pretty bad hoarding problem. But you have a real bad feeling about today, and you need to set up a stash for when it all goes down.", - "introduction": "You're a Hoarder." - }, - "Organ Market Collector": { - "goal": "Nanotrasen has top of the line medical resources handy, which means you could be making a pretty penny slipping some organs out of medical.", - "introduction": "You're an Organ Market Collector." - }, - "Thief": { - "goal": "For one reason or another, you're looking to steal something expensive today, and you've found a good target.", - "introduction": "You're a Thief." - } -} diff --git a/tgstation.dme b/tgstation.dme index e474e9494be..b74788cc9c2 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -2323,8 +2323,6 @@ #include "code\modules\antagonists\space_dragon\space_dragon.dm" #include "code\modules\antagonists\space_ninja\space_ninja.dm" #include "code\modules\antagonists\survivalist\survivalist.dm" -#include "code\modules\antagonists\thief\thief.dm" -#include "code\modules\antagonists\thief\thief_objectives.dm" #include "code\modules\antagonists\traitor\balance_helper.dm" #include "code\modules\antagonists\traitor\datum_traitor.dm" #include "code\modules\antagonists\traitor\objective_category.dm" diff --git a/tgui/packages/tgui/interfaces/AntagInfoThief.tsx b/tgui/packages/tgui/interfaces/AntagInfoThief.tsx deleted file mode 100644 index 905adb66d07..00000000000 --- a/tgui/packages/tgui/interfaces/AntagInfoThief.tsx +++ /dev/null @@ -1,80 +0,0 @@ -import { BooleanLike } from 'common/react'; -import { useBackend } from '../backend'; -import { Section, Stack } from '../components'; -import { Window } from '../layouts'; - -type Objective = { - count: number; - name: string; - explanation: string; -}; - -type Info = { - objectives: Objective[]; - goal: string; - intro: string; - honor: BooleanLike; - hideout: string; - policy: string; -}; - -export const AntagInfoThief = (props, context) => { - const { data } = useBackend(context); - const { intro, goal, hideout, policy } = data; - return ( - - - - -
- - - {intro} - - {goal} - - - - -
-
- {!!hideout && ( - -
- This station has an established criminal hideout, which your - connections to Val Corrin has granted you access to. It is at - the {hideout}. Use it as a space to plan heists with other - thieves, and store stolen goods! -
-
- )} - {!!policy && ( - -
- {policy} -
-
- )} -
-
-
- ); -}; - -const ObjectivePrintout = (props, context) => { - const { data } = useBackend(context); - const { objectives } = data; - return ( - - These are your heisting goals for today: - - {(!objectives && 'None!') || - objectives.map((objective) => ( - - #{objective.count}: {objective.explanation} - - ))} - - - ); -}; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/opportunist.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/opportunist.ts deleted file mode 100644 index c3e26b517e1..00000000000 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/opportunist.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { multiline } from 'common/string'; -import { Antagonist, Category } from '../base'; -import { THIEF_MECHANICAL_DESCRIPTION } from './thief'; - -const Opportunist: Antagonist = { - key: 'opportunist', - name: 'Opportunist', - description: [ - multiline`A form of thief that can activate at any point in the middle - of the shift, looking to line their paychecks while nobody's looking.`, - THIEF_MECHANICAL_DESCRIPTION, - ], - category: Category.Midround, -}; - -export default Opportunist; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/thief.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/thief.ts deleted file mode 100644 index 2c3f5ff1264..00000000000 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/thief.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { Antagonist, Category } from '../base'; -import { multiline } from 'common/string'; - -export const THIEF_MECHANICAL_DESCRIPTION = multiline` - While all the chaos of the station goes down, try to escape with - some loot without getting caught! - `; - -const Thief: Antagonist = { - key: 'thief', - name: 'Thief', - description: [ - `You're working at a state of the art research station, yet you're - running into financial issues. Nobody will miss a couple expensive doodads, - right?`, - THIEF_MECHANICAL_DESCRIPTION, - ], - category: Category.Roundstart, -}; - -export default Thief;