diff --git a/baystation12.dme b/baystation12.dme
index 82cc001246..3911c1518c 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -190,6 +190,7 @@
#include "code\defines\procs\command_alert.dm"
#include "code\defines\procs\dbcore.dm"
#include "code\defines\procs\sd_Alert.dm"
+#include "code\defines\procs\statistics.dm"
#include "code\game\asteroid.dm"
#include "code\game\atoms.dm"
#include "code\game\atoms_movable.dm"
diff --git a/code/WorkInProgress/surgery.dm b/code/WorkInProgress/surgery.dm
index ea94d4f8bf..3ad7627246 100644
--- a/code/WorkInProgress/surgery.dm
+++ b/code/WorkInProgress/surgery.dm
@@ -122,7 +122,7 @@ proc/spread_germs_to_organ(datum/organ/external/E, mob/living/carbon/human/user)
/datum/surgery_step/generic/clamp_bleeders
required_tool = /obj/item/weapon/hemostat
- allowed_tools = list(/obj/item/weapon/cable_coil, /obj/item/weapon/mousetrap)
+ allowed_tools = list(/obj/item/weapon/cable_coil, /obj/item/device/assembly/mousetrap)
min_duration = 40
max_duration = 60
@@ -558,7 +558,7 @@ proc/spread_germs_to_organ(datum/organ/external/E, mob/living/carbon/human/user)
/datum/surgery_step/eye/mend_eyes
required_tool = /obj/item/weapon/hemostat
- allowed_tools = list(/obj/item/weapon/cable_coil, /obj/item/weapon/mousetrap)
+ allowed_tools = list(/obj/item/weapon/cable_coil, /obj/item/device/assembly/mousetrap)
min_duration = 80
max_duration = 100
@@ -651,7 +651,7 @@ proc/spread_germs_to_organ(datum/organ/external/E, mob/living/carbon/human/user)
/datum/surgery_step/face/mend_vocal
required_tool = /obj/item/weapon/hemostat
- allowed_tools = list(/obj/item/weapon/cable_coil, /obj/item/weapon/mousetrap)
+ allowed_tools = list(/obj/item/weapon/cable_coil, /obj/item/device/assembly/mousetrap)
min_duration = 70
max_duration = 90
diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm
index 87b7b14da1..27136d3de0 100644
--- a/code/game/gamemodes/events.dm
+++ b/code/game/gamemodes/events.dm
@@ -21,9 +21,6 @@
// Doesn't necessarily trigger an event, but might. Returns 1 if it did.
/proc/event()
event = 1
- if(!sent_ninja_to_station)
- choose_space_ninja()
- return
var/minutes_passed = world.time/600
@@ -91,7 +88,7 @@
mini_blob_event()
if("Space Ninja")
//Handled in space_ninja.dm. Doesn't announce arrival, all sneaky-like.
- choose_space_ninja()
+ space_ninja_arrival()
if("Radiation")
high_radiation_event()
if("Virus")
diff --git a/code/game/gamemodes/events/space_ninja.dm b/code/game/gamemodes/events/space_ninja.dm
index bc07376641..dbd09ca962 100644
--- a/code/game/gamemodes/events/space_ninja.dm
+++ b/code/game/gamemodes/events/space_ninja.dm
@@ -93,34 +93,15 @@ When I already created about 4 new objectives, this doesn't seem terribly import
/var/global/toggle_space_ninja = 1//If ninjas can spawn or not.
/var/global/sent_ninja_to_station = 0//If a ninja is already on the station.
-/proc/choose_space_ninja()
- var/list/candidates = list() //list of candidate keys
- for(var/mob/dead/observer/G in player_list)
- if(G.client && ((G.client.inactivity/10)/60) <= 5 && G.client.be_spaceninja)
- if(!(G.mind && G.mind.current && G.mind.current.stat != DEAD))
- candidates += G
- if(!candidates.len) return
- candidates = shuffle(candidates)//Incorporating Donkie's list shuffle
+var/ninja_selection_id = 1
+var/ninja_selection_active = 0
+var/ninja_confirmed_selection = 0
+/proc/space_ninja_arrival(var/assign_key = null, var/assign_mission = null)
- //loop over all viable candidates, giving them a popup asking if they want to be space ninja
- var/mob/dead/observer/accepted_ghost
- while(candidates.len && !accepted_ghost)
- //ask a different random candidate
- var/mob/dead/observer/G = pick(candidates)
- //give the popup a 30 second timeout in case the player is AFK
- if(sd_Alert(G, "A space ninja is about to spawn. Would you like to play as the ninja?", "Space Ninja", list("Yes","No"), "Yes", 300, 1, "350x125") == "Yes")
- accepted_ghost = G
- else
- candidates -= G
-
- if(accepted_ghost)
- //someone accepted
- space_ninja_arrival(accepted_ghost)
-
-/proc/space_ninja_arrival(var/mob/dead/observer/G)
- if(!G)
- return choose_space_ninja()
+ if(ninja_selection_active)
+ usr << "\red Ninja selection already in progress. Please wait until it ends."
+ return
var/datum/game_mode/current_mode = ticker.mode
var/datum/mind/current_mind
@@ -161,25 +142,38 @@ 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)
- //todo:: add ninjaspawn landmarks to map
if(L.name == "ninjaspawn")
spawn_list.Add(L)
- //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 ))
- new_ninja.key = G.ckey
- 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.
- new_ninja.internals.icon_state = "internal1"
-
- ninja_key = pick(candidates)
-
+ if(!spawn_list.len)
+ for(var/obj/effect/landmark/L in landmarks_list)
+ if(L.name == "carpspawn")
+ spawn_list.Add(L)
+ var/ninja_key = null
var/mob/candidate_mob
- for(var/mob/M in player_list)
- if((M.key == ninja_key || M.ckey == ninja_key) && M.client)
- candidate_mob = M
- break
+
+ if(assign_key)
+ ninja_key = assign_key
+ else
+
+ var/list/candidates = list() //list of candidate keys
+ for(var/mob/dead/observer/G in player_list)
+ if(G.client && !G.client.holder && !G.client.is_afk() && G.client.be_spaceninja)
+ if(!(G.mind && G.mind.current && G.mind.current.stat != DEAD))
+ candidates += G
+ if(!candidates.len) return
+ candidates = shuffle(candidates)//Incorporating Donkie's list shuffle
+
+ candidate_mob = pick(candidates)
+ ninja_key = candidate_mob.ckey
+
+
+ if(!candidate_mob)
+ for(var/mob/M in player_list)
+ if((M.key == ninja_key || M.ckey == ninja_key) && M.client)
+ candidate_mob = M
+ break
if(!candidate_mob)
usr << "\red The randomly chosen mob was not found in the second check."
@@ -483,7 +477,7 @@ As such, it's hard-coded for now. No reason for it not to be, really.
space_ninja_arrival(input, mission)
- message_admins("\blue [key] has spawned [input] as a Space Ninja.\nTheir mission is: [mission]", 1)
+ message_admins("\blue [key_name_admin(key)] has spawned [input] as a Space Ninja.\nTheir mission is: [mission]")
log_admin("[key] used Spawn Space Ninja.")
return
diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm
index 370e13b3dc..3288cc6971 100644
--- a/code/game/mecha/working/ripley.dm
+++ b/code/game/mecha/working/ripley.dm
@@ -20,7 +20,8 @@
desc = "Standart APLU chassis was refitted with additional thermal protection and cistern."
name = "APLU \"Firefighter\""
icon_state = "firefighter"
- initial_icon = "firefighter" max_temperature = 4500
+ initial_icon = "firefighter"
+ max_temperature = 4500
health = 250
lights_power = 8
damage_absorption = list("fire"=0.5,"bullet"=0.8,"bomb"=0.5)
diff --git a/code/modules/mob/living/carbon/human/human_attackalien.dm b/code/modules/mob/living/carbon/human/human_attackalien.dm
index 23ba23ed92..76c5012ee1 100644
--- a/code/modules/mob/living/carbon/human/human_attackalien.dm
+++ b/code/modules/mob/living/carbon/human/human_attackalien.dm
@@ -42,7 +42,8 @@
updatehealth()
if("disarm")
- if (prob(80)) playsound(loc, 'sound/weapons/pierce.ogg', 25, 1, -1)
+ if (prob(80))
+ playsound(loc, 'sound/weapons/pierce.ogg', 25, 1, -1)
Weaken(rand(0.5,3))
for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded )))
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index fe27202656..a2c2255fb3 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -824,11 +824,6 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
pressure_alert = -2
else
pressure_alert = -1
-
- else if(pressure <= 50)
- var/adjusted_pressure = calculate_affecting_pressure(pressure) //Returns how much pressure actually affects the mob.
- if(adjusted_pressure < 50)
- adjustBruteLoss( (50 - adjusted_pressure) / 50 )
return
/*
diff --git a/maps/tgstation.2.0.9.1.dmm b/maps/tgstation.2.0.9.1.dmm
index afe7d888df..f99532254e 100644
--- a/maps/tgstation.2.0.9.1.dmm
+++ b/maps/tgstation.2.0.9.1.dmm
@@ -7275,7 +7275,7 @@
"cJU" = (/obj/item/weapon/ore/clown,/obj/item/weapon/ore/clown,/turf/unsimulated/floor{icon_state = "asteroid"; name = "dust"},/area/planet/clown)
"cJV" = (/turf/unsimulated/floor{icon_state = "asteroid"; name = "dust"},/area/planet/clown)
"cJW" = (/obj/item/weapon/bananapeel,/turf/unsimulated/floor{icon_state = "grass1"; name = "grass"},/area/planet/clown)
-"cJX" = (/obj/item/weapon/mousetrap/armed,/turf/unsimulated/floor{icon_state = "grass1"; name = "grass"},/area/planet/clown)
+"cJX" = (/obj/item/device/assembly/mousetrap/armed,/turf/unsimulated/floor{icon_state = "grass1"; name = "grass"},/area/planet/clown)
"cJY" = (/obj/item/weapon/ore/clown,/turf/unsimulated/floor{icon_state = "asteroid"; name = "dust"},/area/planet/clown)
"cJZ" = (/obj/effect/decal/remains/human,/turf/unsimulated/floor{icon_state = "asteroid"; name = "dust"},/area/planet/clown)
"cKa" = (/obj/item/weapon/pickaxe,/turf/unsimulated/floor{icon_state = "asteroid"; name = "dust"},/area/planet/clown)
@@ -8989,7 +8989,7 @@
"dqS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/disposal)
"dqT" = (/obj/machinery/conveyor{dir = 1; id = "garbage"},/obj/effect/sign/vacuum{pixel_x = -32},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/maintenance/disposal)
"dqU" = (/turf/space,/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion_l (WEST)"; icon_state = "propulsion_l"; dir = 8},/turf/simulated/shuttle/wall{dir = 3; icon_state = "swall_f10"; layer = 2; tag = "icon-swall_f10"},/area/shuttle/transport1/centcom)
-
+
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa