diff --git a/baystation12.dme b/baystation12.dme
index f2177c90f4608..8d1957ff8e168 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -951,7 +951,6 @@
#include "code\game\objects\items\documents.dm"
#include "code\game\objects\items\flora.dm"
#include "code\game\objects\items\glassjar.dm"
-#include "code\game\objects\items\gunboxes.dm"
#include "code\game\objects\items\holosign_creator.dm"
#include "code\game\objects\items\instruments.dm"
#include "code\game\objects\items\latexballoon.dm"
@@ -960,6 +959,7 @@
#include "code\game\objects\items\passport.dm"
#include "code\game\objects\items\plunger.dm"
#include "code\game\objects\items\rescuebag.dm"
+#include "code\game\objects\items\selection.dm"
#include "code\game\objects\items\spirit_board.dm"
#include "code\game\objects\items\toys.dm"
#include "code\game\objects\items\traitor_plush.dm"
diff --git a/code/game/antagonist/outsider/ninja.dm b/code/game/antagonist/outsider/ninja.dm
index 7f48fb6101597..6e7fff0ea3fb7 100644
--- a/code/game/antagonist/outsider/ninja.dm
+++ b/code/game/antagonist/outsider/ninja.dm
@@ -1,5 +1,6 @@
GLOBAL_DATUM_INIT(ninjas, /datum/antagonist/ninja, new)
+
/datum/antagonist/ninja
id = MODE_NINJA
role_text = "Operative"
@@ -8,92 +9,89 @@ GLOBAL_DATUM_INIT(ninjas, /datum/antagonist/ninja, new)
welcome_text = "You are an elite operative of some interest group. You have a variety of abilities at your disposal, thanks to your advanced hardsuit."
flags = ANTAG_OVERRIDE_JOB | ANTAG_OVERRIDE_MOB | ANTAG_CLEAR_EQUIPMENT | ANTAG_CHOOSE_NAME | ANTAG_RANDSPAWN | ANTAG_VOTABLE | ANTAG_SET_APPEARANCE
antaghud_indicator = "hudninja"
-
initial_spawn_req = 1
initial_spawn_target = 2
hard_cap = 2
hard_cap_round = 3
min_player_age = 18
-
id_type = /obj/item/card/id/syndicate
-
faction = "ninja"
no_prior_faction = TRUE
-
base_to_load = /datum/map_template/ruin/antag_spawn/ninja
-/datum/antagonist/ninja/create_objectives(datum/mind/ninja)
- if(!..())
+/datum/antagonist/ninja/create_objectives(datum/mind/ninja)
+ if (!..())
return
-
- var/objective_list = list(1,2,3,4,5)
- for(var/i=rand(2,4),i>0,i--)
- switch(pick(objective_list))
- if(1)//Kill
+ var/objective_list = list(1, 2, 3, 4, 5)
+ for (var/i = rand(2, 4) to 1 step -1)
+ switch (pick(objective_list))
+ if (1) //Kill
var/datum/objective/assassinate/ninja_objective = new
ninja_objective.owner = ninja
ninja_objective.target = ninja_objective.find_target()
- if(ninja_objective.target != "Free Objective")
+ if (ninja_objective.target != "Free Objective")
ninja.objectives += ninja_objective
else
i++
- objective_list -= 1 // No more than one kill objective
- if(2)//Steal
+ objective_list -= 1
+ if (2) //Steal
var/datum/objective/steal/ninja_objective = new
ninja_objective.owner = ninja
ninja_objective.target = ninja_objective.find_target()
ninja.objectives += ninja_objective
- if(3)//Protect
+ if (3) //Protect
var/datum/objective/protect/ninja_objective = new
ninja_objective.owner = ninja
ninja_objective.target = ninja_objective.find_target()
- if(ninja_objective.target != "Free Objective")
+ if (ninja_objective.target != "Free Objective")
ninja.objectives += ninja_objective
else
i++
objective_list -= 3
- if(4)//Download
+ if (4) //Download
var/datum/objective/download/ninja_objective = new
ninja_objective.owner = ninja
ninja_objective.gen_amount_goal()
ninja.objectives += ninja_objective
objective_list -= 4
- if(5)//Harm
+ if (5) //Harm
var/datum/objective/harm/ninja_objective = new
ninja_objective.owner = ninja
ninja_objective.target = ninja_objective.find_target()
- if(ninja_objective.target != "Free Objective")
+ if (ninja_objective.target != "Free Objective")
ninja.objectives += ninja_objective
else
i++
objective_list -= 5
-
var/datum/objective/survive/ninja_objective = new
ninja_objective.owner = ninja
ninja.objectives += ninja_objective
-/datum/antagonist/ninja/greet(datum/mind/player)
- if(!..())
+/datum/antagonist/ninja/greet(datum/mind/player)
+ if (!..())
return 0
var/directive = generate_ninja_directive("heel")
player.StoreMemory("Directive: [SPAN_DANGER("[directive]")]
", /singleton/memory_options/system)
to_chat(player, "Remember your directive: [directive].")
+
/datum/antagonist/ninja/equip(mob/living/carbon/human/player)
. = ..()
- if(.)
- var/obj/item/device/radio/R = new /obj/item/device/radio/headset/syndicate(player)
- player.equip_to_slot_or_del(R, slot_l_ear)
- player.equip_to_slot_or_del(new /obj/item/clothing/under/color/black(player), slot_w_uniform)
- create_id("Operative", player)
- var/obj/item/modular_computer/pda/syndicate/U = new
- player.put_in_hands(U)
- var/singleton/uplink_source/pda/uplink_source = new
- uplink_source.setup_uplink_source(player, 0)
- var/obj/item/ninja_kit/kit = new
- player.put_in_hands(kit)
+ if (!.)
+ return
+ var/obj/item/device/radio/radio = new /obj/item/device/radio/headset/syndicate(player)
+ player.equip_to_slot_or_del(radio, slot_l_ear)
+ player.equip_to_slot_or_del(new /obj/item/clothing/under/color/black(player), slot_w_uniform)
+ create_id("Operative", player)
+ var/obj/item/modular_computer/pda/syndicate/pda = new
+ player.put_in_hands(pda)
+ var/singleton/uplink_source/uplink_source = GET_SINGLETON(/singleton/uplink_source/pda)
+ uplink_source.setup_uplink_source(player, 0)
+ var/obj/item/selection/ninja/selection = new
+ player.put_in_hands(selection)
+
/datum/antagonist/ninja/equip_vox(mob/living/carbon/human/vox, mob/living/carbon/human/old)
vox.equip_to_slot_or_del(new /obj/item/clothing/under/vox/vox_casual(vox), slot_w_uniform)
@@ -104,46 +102,59 @@ GLOBAL_DATUM_INIT(ninjas, /datum/antagonist/ninja, new)
vox.put_in_hands(locate(/obj/item/modular_computer/pda/syndicate) in old.contents)
vox.set_internals(locate(/obj/item/tank) in vox.contents)
+
/datum/antagonist/ninja/proc/generate_ninja_directive(side)
- var/directive = "[side=="face"?"[GLOB.using_map.company_name]":"A criminal syndicate"] is your employer. "//Let them know which side they're on.
- switch(rand(1,19))
- if(1)
+ var/directive = "[side=="face"?"[GLOB.using_map.company_name]":"A criminal syndicate"] is your employer. "
+ switch (rand(1, 19))
+ if (1)
directive += "Your interest group must not be linked to this operation. Remain hidden and covert when possible."
- if(2)
+ if (2)
directive += "[GLOB.using_map.station_name] is financed by an enemy of your interest group. Cause as much structural damage as desired."
- if(3)
+ if (3)
directive += "A wealthy animal rights activist has made a request we cannot refuse. Prioritize saving animal lives whenever possible."
- if(4)
+ if (4)
directive += "Your interest group absolutely cannot be linked to this operation. Eliminate witnesses at your discretion."
- if(5)
+ if (5)
directive += "We are currently negotiating with [GLOB.using_map.company_name] [GLOB.using_map.boss_name]. Prioritize saving human lives over ending them."
- if(6)
+ if (6)
directive += "We are engaged in a legal dispute over [GLOB.using_map.station_name]. If a laywer is present on board, force their cooperation in the matter."
- if(7)
+ if (7)
directive += "A financial backer has made an offer we cannot refuse. Implicate criminal involvement in the operation."
- if(8)
+ if (8)
directive += "Let no one question the mercy of your interest group. Ensure the safety of all non-essential personnel you encounter."
- if(9)
+ if (9)
directive += "A free agent has proposed a lucrative business deal. Implicate [GLOB.using_map.company_name] involvement in the operation."
- if(10)
+ if (10)
directive += "Our reputation is on the line. Harm as few civilians and innocents as possible."
- if(11)
+ if (11)
directive += "Our honor is on the line. Utilize only honorable tactics when dealing with opponents."
- if(12)
+ if (12)
directive += "We are currently negotiating with a mercenary leader. Disguise assassinations as suicide or other natural causes."
- if(13)
+ if (13)
directive += "Some disgruntled [GLOB.using_map.company_name] employees have been supportive of our operations. Be wary of any mistreatment by command staff."
- if(14)
+ if (14)
var/xenorace = pick(SPECIES_UNATHI, SPECIES_SKRELL)
directive += "A group of [xenorace] radicals have been loyal supporters of your interest group. Favor [xenorace] crew whenever possible."
- if(15)
+ if (15)
directive += "Your interest group has recently been accused of religious insensitivity. Attempt to speak with the Chaplain and prove these accusations false."
- if(16)
+ if (16)
directive += "Your interest group has been bargaining with a competing prosthetics manufacturer. Try to shine [GLOB.using_map.company_name] prosthetics in a bad light."
- if(17)
+ if (17)
directive += "Your interest group has recently begun recruiting outsiders. Consider suitable candidates and assess their behavior amongst the crew."
- if(18)
+ if (18)
directive += "A cyborg liberation group has expressed interest in our serves. Prove your interest group is merciful towards law-bound synthetics."
else
directive += "There are no special supplemental instructions at this time."
return directive
+
+
+/obj/item/selection/ninja
+ name = "loadout selection kit"
+ desc = "A secure box containing standard operation kit for special forces operatives."
+ selection_options = list(
+ "Solar Special Operations" = /obj/structure/closet/crate/ninja/sol,
+ "Gilgameshi Commando" = /obj/structure/closet/crate/ninja/gcc,
+ "Syndicate Mercenary" = /obj/structure/closet/crate/ninja/merc,
+ "Corporate Operative" = /obj/structure/closet/crate/ninja/corpo,
+ "Spider-Clan Ninja" = /obj/structure/closet/crate/ninja
+ )
diff --git a/code/game/objects/items/gunboxes.dm b/code/game/objects/items/gunboxes.dm
deleted file mode 100644
index 811cb7b1036db..0000000000000
--- a/code/game/objects/items/gunboxes.dm
+++ /dev/null
@@ -1,40 +0,0 @@
-/obj/item/gunbox
- name = "sidearm kit"
- desc = "A secure box containing a sidearm."
- icon = 'icons/obj/boxes.dmi'
- icon_state = "excavation"
- var/list/gun_options = list(
- "Classic - Secure Smartgun" = /obj/item/gun/energy/gun/secure/preauthorized,
- "Stylish - Secure Smart Revolver" = /obj/item/gun/energy/revolver/secure/preauthorized
- )
-
-/obj/item/gunbox/attack_self(mob/user)
- var/choice = input(user, "What is your choice?") as null|anything in gun_options
- if (choice && user.use_sanity_check(src))
- var/new_weapon_path = gun_options[choice]
- var/obj/item/new_weapon = new new_weapon_path(user.loc)
- user.drop_from_inventory(src)
- user.put_in_any_hand_if_possible(new_weapon)
- to_chat(user, SPAN_NOTICE("You take \the [new_weapon] out of \the [src]."))
- qdel(src)
-
-/obj/item/ninja_kit
- name = "loadout selection kit"
- desc = "A secure box containing standard operation kit for special forces operatives."
- icon = 'icons/obj/tools/xenoarcheology_tools.dmi'
- icon_state = "excavation"
- var/list/faction_options = list(
- "Solar Special Operations Unit" = /obj/structure/closet/crate/ninja/sol,
- "Gilgameshi Commando" = /obj/structure/closet/crate/ninja/gcc,
- "Syndicate Mercenary" = /obj/structure/closet/crate/ninja/merc,
- "Corporate Operative" = /obj/structure/closet/crate/ninja/corpo,
- "Spider-Clan Ninja" = /obj/structure/closet/crate/ninja
- )
-
-/obj/item/ninja_kit/attack_self(mob/user)
- var/choice = input(user, "What is your choice?") as null|anything in faction_options
- if (choice && user.use_sanity_check(src))
- var/new_item_path = faction_options[choice]
- var/obj/new_item = new new_item_path(get_turf(src))
- to_chat(user, SPAN_NOTICE("You have chosen \the [new_item]."))
- qdel(src)
diff --git a/code/game/objects/items/selection.dm b/code/game/objects/items/selection.dm
new file mode 100644
index 0000000000000..4ba7fe5af5e0a
--- /dev/null
+++ b/code/game/objects/items/selection.dm
@@ -0,0 +1,30 @@
+/obj/item/selection
+ abstract_type = /obj/item/selection
+ icon = 'icons/obj/tools/xenoarcheology_tools.dmi'
+ icon_state = "excavation"
+ var/list/selection_options
+
+
+/obj/item/selection/attack_self(mob/living/user)
+ var/response = input(user, null, "Select Replacement Item") as null | anything in selection_options
+ if (isnull(response) || !(response in selection_options))
+ return
+ if (!user.use_sanity_check(src))
+ to_chat(user, SPAN_WARNING("You're not able to do that right now."))
+ return
+ user.drop_from_inventory(src)
+ var/obj/obj = selection_options[response]
+ obj = new obj (user.loc)
+ if (isitem(obj))
+ user.put_in_any_hand_if_possible(obj)
+ to_chat(user, SPAN_ITALIC("You take \the [obj] out of \the [src]."))
+ qdel(src)
+
+
+/obj/item/selection/siderm
+ name = "sidearm kit"
+ desc = "A secure box containing a sidearm."
+ selection_options = list(
+ "Classic - Secure Smartgun" = /obj/item/gun/energy/gun/secure/preauthorized,
+ "Stylish - Secure Smart Revolver" = /obj/item/gun/energy/revolver/secure/preauthorized
+ )
diff --git a/maps/torch/items/selection.dm b/maps/torch/items/selection.dm
new file mode 100644
index 0000000000000..a1cc8446e849f
--- /dev/null
+++ b/maps/torch/items/selection.dm
@@ -0,0 +1,8 @@
+/obj/item/selection/pilot_helmet
+ name = "pilot's helmet case"
+ desc = "A solid case containing the Shuttle Pilot's flight helmet."
+ selection_options = list(
+ "Standard Pilot's Helmet" = /obj/item/clothing/head/helmet/solgov/pilot,
+ "Corporate Pilot's Helmet" = /obj/item/clothing/head/helmet/nt/pilot,
+ "Fleet Pilot's Helmet" = /obj/item/clothing/head/helmet/solgov/pilot/fleet
+ )
diff --git a/maps/torch/structures/closets/exploration.dm b/maps/torch/structures/closets/exploration.dm
index ab95a7da98e00..0c7e76da7d6ec 100644
--- a/maps/torch/structures/closets/exploration.dm
+++ b/maps/torch/structures/closets/exploration.dm
@@ -98,9 +98,7 @@
/obj/item/device/binoculars,
/obj/item/clothing/gloves/thick,
/obj/item/clothing/suit/storage/hazardvest/blue,
- /obj/item/clothing/head/helmet/solgov/pilot,
- /obj/item/clothing/head/helmet/solgov/pilot/fleet,
- /obj/item/clothing/head/helmet/nt/pilot,
+ /obj/item/selection/pilot_helmet,
/obj/item/storage/firstaid/light,
/obj/item/material/knife/folding/swiss/explorer,
/obj/item/storage/backpack/dufflebag,
diff --git a/maps/torch/torch.dm b/maps/torch/torch.dm
index f871a0fb3a8bf..9e63e39bb1c15 100644
--- a/maps/torch/torch.dm
+++ b/maps/torch/torch.dm
@@ -62,6 +62,7 @@
#include "items/cards_ids.dm"
#include "items/coins.dm"
#include "items/encryption_keys.dm"
+ #include "items/selection.dm"
#include "items/headsets.dm"
#include "items/items.dm"
#include "items/machinery.dm"