diff --git a/baystation12.dme b/baystation12.dme
index 3ddb3b15b9c..cd9ea359c5b 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -252,6 +252,7 @@
#include "code\game\gamemodes\malfunction\malfunction.dm"
#include "code\game\gamemodes\meteor\meteor.dm"
#include "code\game\gamemodes\meteor\meteors.dm"
+#include "code\game\gamemodes\ninja\ninja.dm"
#include "code\game\gamemodes\nuclear\nuclear.dm"
#include "code\game\gamemodes\nuclear\nuclearbomb.dm"
#include "code\game\gamemodes\nuclear\pinpointer.dm"
diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm
index 58dc3affe2a..3ad1eb04771 100644
--- a/code/controllers/configuration.dm
+++ b/code/controllers/configuration.dm
@@ -34,7 +34,7 @@
var/feature_object_spell_system = 0 //spawns a spellbook which gives object-type spells instead of verb-type spells for the wizard
var/traitor_scaling = 0 //if amount of traitors scales based on amount of players
var/protect_roles_from_antagonist = 0// If security and such can be tratior/cult/other
- var/continous_rounds = 0 // Gamemodes which end instantly will instead keep on going until the round ends by escape shuttle or nuke.
+ var/continous_rounds = 1 // Gamemodes which end instantly will instead keep on going until the round ends by escape shuttle or nuke.
var/allow_Metadata = 0 // Metadata is supported.
var/popup_admin_pm = 0 //adminPMs to non-admins show in a pop-up 'reply' window when set to 1.
var/Ticklag = 0.9
@@ -167,7 +167,7 @@
switch (name)
if ("resource_urls")
config.resource_urls = stringsplit(value, " ")
-
+
if ("admin_legacy_system")
config.admin_legacy_system = 1
diff --git a/code/game/gamemodes/autotraitor/autotraitor.dm b/code/game/gamemodes/autotraitor/autotraitor.dm
index c5b159dd1a9..f5ddfdfb366 100644
--- a/code/game/gamemodes/autotraitor/autotraitor.dm
+++ b/code/game/gamemodes/autotraitor/autotraitor.dm
@@ -11,7 +11,7 @@
/datum/game_mode/traitor/autotraitor/announce()
..()
- world << "Game mode is AutoTraitor. Traitors will be added to the round automagically as needed.
Expect bugs."
+ world << "Game mode is AutoTraitor. Traitors will be added to the round automagically as needed."
/datum/game_mode/traitor/autotraitor/pre_setup()
diff --git a/code/game/gamemodes/events/ninja_equipment.dm b/code/game/gamemodes/events/ninja_equipment.dm
index 853f1509747..45bc487eefa 100644
--- a/code/game/gamemodes/events/ninja_equipment.dm
+++ b/code/game/gamemodes/events/ninja_equipment.dm
@@ -243,7 +243,7 @@ ________________________________________________________________________________
var/mob/living/silicon/ai/A = AI
var/display_to = s_control ? U : A//Who do we want to display certain messages to?
- var/dat = "
SpiderOS"
+ var/dat = "SpiderOS"
dat += "
Refresh"
if(spideros)
dat += " |
Return"
@@ -1209,7 +1209,7 @@ ________________________________________________________________________________
U.client.images += image(tempHud,target,"hudoperative")
if("Death Commando")
U.client.images += image(tempHud,target,"huddeathsquad")
- if("Space Ninja")
+ if("Ninja")
U.client.images += image(tempHud,target,"hudninja")
else//If we don't know what role they have but they have one.
U.client.images += image(tempHud,target,"hudunknown1")
diff --git a/code/game/gamemodes/events/space_ninja.dm b/code/game/gamemodes/events/space_ninja.dm
index 1a09a3c7825..8a0cff26132 100644
--- a/code/game/gamemodes/events/space_ninja.dm
+++ b/code/game/gamemodes/events/space_ninja.dm
@@ -52,7 +52,7 @@ ________________________________________________________________________________
How to do that:
Make sure your character has a mind.
Change their assigned_role to "MODE", no quotes. Otherwise, the suit won't initialize.
- Change their special_role to "Space Ninja", no quotes. Otherwise, the character will be gibbed.
+ Change their special_role to "Ninja", no quotes. Otherwise, the character will be gibbed.
Spawn ninja gear, put it on, hit initialize. Let the suit do the rest. You are now a space ninja.
I don't recommend messing with suit variables unless you really know what you're doing.
@@ -140,15 +140,10 @@ Malf AIs/silicons aren't added. Monkeys aren't added. Messes with objective comp
*/
//Here we pick a location and spawn the ninja.
- var/list/spawn_list = list()
- for(var/obj/effect/landmark/L in landmarks_list)
- if(L.name == "ninjaspawn")
- spawn_list.Add(L)
-
- if(!spawn_list.len)
+ if(ninjastart.len == 0)
for(var/obj/effect/landmark/L in landmarks_list)
if(L.name == "carpspawn")
- spawn_list.Add(L)
+ ninjastart.Add(L)
var/ninja_key = null
var/mob/candidate_mob
@@ -211,7 +206,7 @@ Malf AIs/silicons aren't added. Monkeys aren't added. Messes with objective comp
ninja_selection_active = 0
//The ninja will be created on the right spawn point or at late join.
- var/mob/living/carbon/human/new_ninja = create_space_ninja(pick(spawn_list.len ? spawn_list : latejoin ))
+ var/mob/living/carbon/human/new_ninja = create_space_ninja(pick(ninjastart.len ? ninjastart : latejoin))
new_ninja.key = ninja_key
new_ninja.wear_suit:randomize_param()//Give them a random set of suit parameters.
new_ninja.internal = new_ninja.s_store //So the poor ninja has something to breath when they spawn in spess.
@@ -241,8 +236,8 @@ Malf AIs/silicons aren't added. Monkeys aren't added. Messes with objective comp
if(xeno_queen_list.len&&side=="face")//If there are queen about and the probability is 50.
for(var/mob/living/carbon/alien/humanoid/queen/xeno_queen in xeno_queen_list)
var/datum/objective/assassinate/ninja_objective = new
- //We'll do some manual overrides to properly set it up.
ninja_objective.owner = ninja_mind
+ //We'll do some manual overrides to properly set it up.
ninja_objective.target = xeno_queen.mind
ninja_objective.explanation_text = "Kill \the [xeno_queen]."
ninja_mind.objectives += ninja_objective
@@ -307,6 +302,7 @@ Malf AIs/silicons aren't added. Monkeys aren't added. Messes with objective comp
hostile_targets -= current_mind//Remove them from the list.
if(2)//Steal
var/datum/objective/steal/ninja_objective = new
+ ninja_objective.owner = ninja_mind
var/target_item = pick(ninja_objective.possible_items_special)
ninja_objective.set_target(target_item)
ninja_mind.objectives += ninja_objective
@@ -342,12 +338,14 @@ Malf AIs/silicons aren't added. Monkeys aren't added. Messes with objective comp
hostile_targets -= current_mind//Remove them from the list.
if(5)//Download research
var/datum/objective/download/ninja_objective = new
+ ninja_objective.owner = ninja_mind
ninja_objective.gen_amount_goal()
ninja_mind.objectives += ninja_objective
objective_list -= 5
if(6)//Capture
var/datum/objective/capture/ninja_objective = new
+ ninja_objective.owner = ninja_mind
ninja_objective.gen_amount_goal()
ninja_mind.objectives += ninja_objective
@@ -394,17 +392,17 @@ As such, it's hard-coded for now. No reason for it not to be, really.
*/
/proc/generate_ninja_directive(side)
var/directive = "[side=="face"?"Nanotrasen":"The Syndicate"] is your employer. "//Let them know which side they're on.
- switch(rand(1,13))
+ switch(rand(1,19))
if(1)
- directive += "The Spider Clan must not be linked to this operation. Remain as hidden and covert as possible."
+ directive += "The Spider Clan must not be linked to this operation. Remain hidden and covert when possible."
if(2)
- directive += "[station_name] is financed by an enemy of the Spider Clan. Cause as much structural damage as possible."
+ directive += "[station_name] is financed by an enemy of the Spider Clan. Cause as much structural damage as desired."
if(3)
directive += "A wealthy animal rights activist has made a request we cannot refuse. Prioritize saving animal lives whenever possible."
if(4)
- directive += "The Spider Clan absolutely cannot be linked to this operation. Eliminate all witnesses using most extreme prejudice."
+ directive += "The Spider Clan absolutely cannot be linked to this operation. Eliminate witnesses at your discretion."
if(5)
- directive += "We are currently negotiating with Nanotrasen command. Prioritize saving human lives over ending them."
+ directive += "We are currently negotiating with NanoTrasen Central Command. Prioritize saving human lives over ending them."
if(6)
directive += "We are engaged in a legal dispute over [station_name]. If a laywer is present on board, force their cooperation in the matter."
if(7)
@@ -414,11 +412,24 @@ As such, it's hard-coded for now. No reason for it not to be, really.
if(9)
directive += "A free agent has proposed a lucrative business deal. Implicate Nanotrasen involvement in the operation."
if(10)
- directive += "Our reputation is on the line. Harm as few civilians or innocents as possible."
+ directive += "Our reputation is on the line. Harm as few civilians and innocents as possible."
if(11)
directive += "Our honor is on the line. Utilize only honorable tactics when dealing with opponents."
if(12)
- directive += "We are currently negotiating with a Syndicate leader. Disguise assassinations as suicide or another natural cause."
+ directive += "We are currently negotiating with a Syndicate leader. Disguise assassinations as suicide or other natural causes."
+ if(13)
+ directive += "Some disgruntled NanoTrasen employees have been supportive of our operations. Be wary of any mistreatment by command staff."
+ if(14)
+ var/xenorace = pick("Unathi","Tajaran", "Skrellian")
+ directive += "A group of [xenorace] radicals have been loyal supporters of the Spider Clan. Favor [xenorace] crew whenever possible."
+ if(15)
+ directive += "The Spider Clan has recently been accused of religious insensitivity. Attempt to speak with the Chaplain and prove these accusations false."
+ if(16)
+ directive += "The Spider Clan has been bargaining with a competing prosthetics manufacturer. Try to shine NanoTrasen prosthetics in a bad light."
+ if(17)
+ directive += "The Spider Clan has recently begun recruiting outsiders. Consider suitable candidates and assess their behavior amongst the crew."
+ if(18)
+ directive += "A cyborg liberation group has expressed interest in our serves. Prove the Spider Clan merciful towards law-bound synthetics."
else
directive += "There are no special supplemental instructions at this time."
return directive
@@ -508,10 +519,9 @@ As such, it's hard-coded for now. No reason for it not to be, really.
/mob/living/carbon/human/proc/create_mind_space_ninja()
mind_initialize()
mind.assigned_role = "MODE"
- mind.special_role = "Space Ninja"
+ mind.special_role = "Ninja"
- //Adds them to current traitor list. Which is really the extra antagonist list.
- ticker.mode.traitors |= mind
+ ticker.mode.ninjas |= mind
return 1
/mob/living/carbon/human/proc/equip_space_ninja(safety=0)//Safety in case you need to unequip stuff for existing characters.
@@ -559,7 +569,7 @@ As such, it's hard-coded for now. No reason for it not to be, really.
U:gloves.icon_state = "s-ninjan"
U:gloves.item_state = "s-ninjan"
else
- if(U.mind.special_role!="Space Ninja")
+ if(U.mind.special_role!="Ninja")
U << "\red fÄTaL ÈÈRRoR: 382200-*#00CÖDE RED\nUNAU†HORIZED USÈ DETÈC†††eD\nCoMMÈNCING SUB-R0U†IN3 13...\nTÈRMInATING U-U-USÈR..."
U.gib()
return 0
diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm
index e1fbf5dfb4f..c0dfd4fb7c3 100644
--- a/code/game/gamemodes/game_mode.dm
+++ b/code/game/gamemodes/game_mode.dm
@@ -261,7 +261,7 @@ Implants;
set_security_level(SEC_LEVEL_BLUE)*/
-/datum/game_mode/proc/get_players_for_role(var/role, override_jobbans=1)
+/datum/game_mode/proc/get_players_for_role(var/role, override_jobbans=0)
var/list/players = list()
var/list/candidates = list()
var/list/drafted = list()
@@ -275,7 +275,7 @@ Implants;
if(BE_WIZARD) roletext="wizard"
if(BE_REV) roletext="revolutionary"
if(BE_CULTIST) roletext="cultist"
-
+ if(BE_NINJA) roletext="ninja"
// Ultimate randomizing code right here
for(var/mob/new_player/player in player_list)
diff --git a/code/game/gamemodes/ninja/ninja.dm b/code/game/gamemodes/ninja/ninja.dm
new file mode 100644
index 00000000000..8dd3c45e19d
--- /dev/null
+++ b/code/game/gamemodes/ninja/ninja.dm
@@ -0,0 +1,181 @@
+/datum/game_mode/var/list/datum/mind/ninjas = list()
+// Keep in mind ninja-procs that aren't here will be where the event's defined
+/datum/game_mode/ninja
+ name = "ninja"
+ config_tag = "ninja"
+ required_players = 10 //Can be adjusted later, should suffice for now.
+ required_players_secret = 10
+ required_enemies = 1
+ recommended_enemies = 1
+ var/const/waittime_l = 600 //lower bound on time before intercept arrives (in tenths of seconds)
+ var/const/waittime_h = 1800 //upper bound on time before intercept arrives (in tenths of seconds)
+ var/finished = 0
+
+/datum/game_mode/ninja/announce()
+ world << "The current game mode is Ninja!"
+
+/datum/game_mode/ninja/can_start()
+ if(!..())
+ return 0
+ var/list/datum/mind/possible_ninjas = get_players_for_role(BE_NINJA)
+ if(possible_ninjas.len==0)
+ return 0
+ var/datum/mind/ninja = pick(possible_ninjas)
+ ninjas += ninja
+ modePlayer += ninja
+ ninja.assigned_role = "MODE" //So they aren't chosen for other jobs.
+ ninja.special_role = "Ninja"
+ ninja.original = ninja.current
+ if(ninjastart.len == 0)
+ ninja.current << "\red A proper starting location for you could not be found, please report this bug!"
+ ninja.current << "\red Attempting to place at a carpspawn."
+ for(var/obj/effect/landmark/L in landmarks_list)
+ if(L.name == "carpspawn")
+ ninjastart.Add(L)
+ if(ninjastart.len == 0 && latejoin.len > 0)
+ ninja.current << "\red Still no spawneable locations could be found. Defaulting to latejoin."
+ return 1
+ else if (ninjastart.len == 0)
+ ninja.current << "\red Still no spawneable locations could be found. Aborting."
+ return 0
+ return 1
+
+/datum/game_mode/ninja/pre_setup()
+ for(var/datum/mind/ninja in ninjas)
+ ninja.current << browse(null, "window=playersetup")
+ ninja.current = create_space_ninja(pick(ninjastart.len ? ninjastart : latejoin))
+ ninja.current.ckey = ninja.key
+ return 1
+
+/datum/game_mode/ninja/post_setup()
+ for(var/datum/mind/ninja in ninjas)
+ if(ninja.current && !(istype(ninja.current,/mob/living/carbon/human))) return 0
+ //forge_ninja_objectives(ninja)
+ var/mob/living/carbon/human/N = ninja.current
+ N.internal = N.s_store
+ N.internals.icon_state = "internal1"
+ if(N.wear_suit && istype(N.wear_suit,/obj/item/clothing/suit/space/space_ninja))
+ var/obj/item/clothing/suit/space/space_ninja/S = N.wear_suit
+ S:randomize_param()
+ spawn (rand(waittime_l, waittime_h))
+ send_intercept()
+ return ..()
+
+/datum/game_mode/ninja/check_finished()
+ if(config.continous_rounds)
+ return ..()
+ var/ninjas_alive = 0
+ for(var/datum/mind/ninja in ninjas)
+ if(!istype(ninja.current,/mob/living/carbon/human))
+ continue
+ if(ninja.current.stat==2)
+ continue
+ ninjas_alive++
+ if (ninjas_alive)
+ return ..()
+ else
+ finished = 1
+ return 1
+
+/datum/game_mode/ninja/proc/forge_ninja_objectives(var/datum/mind/ninja)
+ 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/datum/objective/assassinate/ninja_objective = new
+ ninja_objective.owner = ninja
+ ninja_objective.target = ninja_objective.find_target()
+ if(ninja_objective.target != "Free Objective")
+ ninja.objectives += ninja_objective
+ else
+ i++
+ objective_list -= 1 // No more than one kill objective
+ 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
+ var/datum/objective/protect/ninja_objective = new
+ ninja_objective.owner = ninja
+ ninja_objective.target = ninja_objective.find_target()
+ if(ninja_objective.target != "Free Objective")
+ ninja.objectives += ninja_objective
+ else
+ i++
+ objective_list -= 3
+ 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
+ var/datum/objective/harm/ninja_objective = new
+ ninja_objective.owner = ninja
+ ninja_objective.target = ninja_objective.find_target()
+ 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
+
+ var/directive = generate_ninja_directive("heel")//Only hired by antags, not NT
+ ninja.current << "You are an elite mercenary assassin of the Spider Clan, [ninja.current.real_name]. You have a variety of abilities at your disposal, thanks to your nano-enhanced cyber armor.\nYour current directive is: \red [directive]\n \blue Try your best to adhere to this."
+ ninja.store_memory("Directive: \red [directive]
")
+
+ var/obj_count = 1
+ ninja.current << "\blue Your current objectives:"
+ for(var/datum/objective/objective in ninja.objectives)
+ ninja.current << "Objective #[obj_count]: [objective.explanation_text]"
+ obj_count++
+
+/datum/game_mode/proc/auto_declare_completion_ninja()
+ if(ninjas.len)
+ var/text = "The ninjas were:"
+ for(var/datum/mind/ninja in ninjas)
+ var/ninjawin = 1
+
+ text += "
[ninja.key] was [ninja.name] ("
+ if(ninja.current)
+ if(ninja.current.stat == DEAD)
+ text += "died"
+ else
+ text += "survived"
+ if(ninja.current.real_name != ninja.name)
+ text += " as [ninja.current.real_name]"
+ else
+ text += "body destroyed"
+ text += ")"
+
+ if(ninja.objectives.len)//If the ninja had no objectives, don't need to process this.
+ var/count = 1
+ for(var/datum/objective/objective in ninja.objectives)
+ if(objective.check_completion())
+ text += "
Objective #[count]: [objective.explanation_text] Success!"
+ feedback_add_details("traitor_objective","[objective.type]|SUCCESS")
+ else
+ text += "
Objective #[count]: [objective.explanation_text] Fail."
+ feedback_add_details("traitor_objective","[objective.type]|FAIL")
+ ninjawin = 0
+ count++
+
+ var/special_role_text
+ if(ninja.special_role)
+ special_role_text = lowertext(ninja.special_role)
+ else
+ special_role_text = "antagonist"
+
+ if(ninjawin)
+ text += "
The [special_role_text] was successful!"
+ feedback_add_details("traitor_success","SUCCESS")
+ else
+ text += "
The [special_role_text] has failed!"
+ feedback_add_details("traitor_success","FAIL")
+
+ world << text
+ return 1
diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm
index f323e26a1c4..6963f20a903 100644
--- a/code/game/gamemodes/objective.dm
+++ b/code/game/gamemodes/objective.dm
@@ -569,6 +569,9 @@ datum/objective/steal
for(var/mob/living/silicon/ai/M in C)
if(istype(M, /mob/living/silicon/ai) && M.stat != 2) //See if any AI's are alive inside that card.
return 1
+ for(var/obj/item/clothing/suit/space/space_ninja/S in all_items) //Let an AI downloaded into a space ninja suit count
+ if(S.AI && S.AI.stat != 2)
+ return 1
for(var/mob/living/silicon/ai/ai in world)
if(istype(ai.loc, /turf))
var/area/check_area = get_area(ai)
diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm
index e1b19a287b6..ba5700b1df3 100644
--- a/code/game/gamemodes/wizard/wizard.dm
+++ b/code/game/gamemodes/wizard/wizard.dm
@@ -45,7 +45,6 @@
/datum/game_mode/wizard/pre_setup()
for(var/datum/mind/wizard in wizards)
wizard.current.loc = pick(wizardstart)
-
return 1
diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm
index b72dafb4c30..ae155f32ade 100644
--- a/code/game/objects/effects/landmarks.dm
+++ b/code/game/objects/effects/landmarks.dm
@@ -69,6 +69,10 @@
xeno_spawn += loc
del(src)
+ if("ninjastart")
+ ninjastart += loc
+ del(src)
+
landmarks_list += src
return 1
diff --git a/code/global.dm b/code/global.dm
index cd6e374a94f..348cc8702fa 100644
--- a/code/global.dm
+++ b/code/global.dm
@@ -133,6 +133,7 @@ var/list/tdomeadmin = list()
var/list/prisonsecuritywarp = list() //prison security goes to these
var/list/prisonwarped = list() //list of players already warped
var/list/blobstart = list()
+var/list/ninjastart = list()
// list/traitors = list() //traitor list
var/list/cardinal = list( NORTH, SOUTH, EAST, WEST )
var/list/alldirs = list(NORTH, SOUTH, EAST, WEST, NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST)
diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm
index 097540fa588..cea125b7e17 100644
--- a/code/modules/admin/player_panel.dm
+++ b/code/modules/admin/player_panel.dm
@@ -469,6 +469,18 @@
dat += "| Wizard not found! |
"
dat += ""
+ if(ticker.mode.ninjas.len > 0)
+ dat += "
| Ninjas | | |
"
+ for(var/datum/mind/ninja in ticker.mode.ninjas)
+ var/mob/M = ninja.current
+ if(M)
+ dat += "| [M.real_name][M.client ? "" : " (logged out)"][M.stat == 2 ? " (DEAD)" : ""] | "
+ dat += "PM | "
+ dat += "Show Objective |
"
+ else
+ dat += "| Ninja not found! |
"
+ dat += "
"
+
if(ticker.mode.cult.len)
dat += "
| Cultists | |
"
for(var/datum/mind/N in ticker.mode.cult)
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index cbdde7cca87..f5ead1fa839 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -357,17 +357,22 @@ Traitors and the like can also be revived with the previous role mostly intact.
if(synd_spawn)
new_character.loc = get_turf(synd_spawn)
call(/datum/game_mode/proc/equip_syndicate)(new_character)
- if("Space Ninja")
- var/ninja_spawn[] = list()
- for(var/obj/effect/landmark/L in landmarks_list)
- if(L.name=="carpspawn")
- ninja_spawn += L
+ if("Ninja")
new_character.equip_space_ninja()
new_character.internal = new_character.s_store
new_character.internals.icon_state = "internal1"
- if(ninja_spawn.len)
- var/obj/effect/landmark/ninja_spawn_here = pick(ninja_spawn)
- new_character.loc = ninja_spawn_here.loc
+ if(ninjastart.len == 0)
+ new_character << "\red A proper starting location for you could not be found, please report this bug!"
+ new_character << "\red Attempting to place at a carpspawn."
+ for(var/obj/effect/landmark/L in landmarks_list)
+ if(L.name == "carpspawn")
+ ninjastart.Add(L)
+ if(ninjastart.len == 0 && latejoin.len > 0)
+ new_character << "\red Still no spawneable locations could be found. Defaulting to latejoin."
+ new_character.loc = pick(latejoin)
+ else if (ninjastart.len == 0)
+ new_character << "\red Still no spawneable locations could be found. Aborting."
+
if("Death Commando")//Leaves them at late-join spawn.
new_character.equip_death_commando()
new_character.internal = new_character.s_store
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index eee188945a0..907cd79f99c 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -14,7 +14,7 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set
"pAI candidate" = 1, // -- TLE // 7
"cultist" = IS_MODE_COMPILED("cult"), // 8
"infested monkey" = IS_MODE_COMPILED("monkey"), // 9
- "space ninja" = "true", // 10
+ "ninja" = "true", // 10
)
var/const/MAX_SAVE_SLOTS = 10
diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm
index 65e44caefe4..4c61f2e60b0 100644
--- a/code/modules/mob/living/carbon/human/death.dm
+++ b/code/modules/mob/living/carbon/human/death.dm
@@ -57,11 +57,11 @@
if(!gibbed)
emote("deathgasp") //let the world KNOW WE ARE DEAD
- //For ninjas exploding when they die./N
+ //For ninjas exploding when they die.
if( istype(wear_suit, /obj/item/clothing/suit/space/space_ninja) && wear_suit:s_initialized )
src << browse(null, "window=spideros")//Just in case.
var/location = loc
- explosion(location, 1, 2, 3, 4)
+ explosion(location, 0, 0, 3, 4)
update_canmove()
if(client) blind.layer = 0
diff --git a/config/names/ninjaname.txt b/config/names/ninjaname.txt
index b41271dbe10..24d5d6879ef 100644
--- a/config/names/ninjaname.txt
+++ b/config/names/ninjaname.txt
@@ -6,9 +6,12 @@ Scorpion
Zero
Ermac
Saibot
+Sun
+Moon
Cyrax
Raphael
Michaelangelo
+Cloud
Donatello
Leonardo
Splinter
@@ -20,7 +23,6 @@ Ryu
Hayabusa
Midnight
Seven
-McNinja
Hanzo
Blood
Iga
@@ -32,7 +34,6 @@ Baki
Ogre
Daemon
Goemon
-McAwesome
Throat
Death
Aria
diff --git a/config/names/ninjatitle.txt b/config/names/ninjatitle.txt
index 2c7f9e7f73c..966204bb4dc 100644
--- a/config/names/ninjatitle.txt
+++ b/config/names/ninjatitle.txt
@@ -24,7 +24,6 @@ Slayer
Awesome
Ender
Dr.
-Noob
Night
Crimson
Grappler
@@ -43,4 +42,5 @@ Steel
Nickel
Silver
Singing
-Snake
\ No newline at end of file
+Snake
+Acid
\ No newline at end of file
diff --git a/html/changelog.html b/html/changelog.html
index 085afadd3ec..f79db2c571d 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -58,8 +58,20 @@ Stuff which is in development and not yet visible to players or just code relate
should be listed in the changelog upon commit though. Thanks. -->
-
-
+
June 28th, 2013
+
Segrain updated:
+
+ - AIs are now able to examine what they see.
+
+
+
+
June 27th, 2013
+
Segrain updated:
+
+ - ID cards properly setup bloodtype, DNA and fingerprints again.
+
+
+
June 26th, 2013
Whitellama updated:
@@ -73,40 +85,14 @@ should be listed in the changelog upon commit though. Thanks. -->
- A few space ninja titles/names have been added and removed to be slightly more believable
- The antagonist selector no longer chooses jobbanned players when it runs out of willing options
-
-
-
-
-
27.06.2013
-
Segrain updated:
-
- - ID cards properly setup bloodtype, DNA and fingerprints again.
-
-
-
-
-
28.06.2013
-
Segrain updated:
-
- - AIs are now able to examine what they see.
- 27.06.2013
- Segrain updated:
-
- - ID cards properly setup bloodtype, DNA and fingerprints again.
-
-
-
-
-
26.06.2013
+
+
June 26th, 2013
Segrain updated:
- Autopsy scanner properly displays time of wound infliction and death.
- Autopsy scanner properly displays wounds by projectile weapons.
-
-
-
-
23.06.2013
+ June 23rd, 2013
Segrain updated:
- Airlocks of various models can be constructed again.
@@ -114,7 +100,7 @@ should be listed in the changelog upon commit though. Thanks. -->
-
June 23, 2013
+
June 23rd, 2013
faux updated:
- There has been a complete medbay renovation spearheaded by Vetinarix. http://baystation12.net/forums/viewtopic.php?f=20&t=7847 <-- Please put any commentary good or bad, here.