diff --git a/code/ATMOSPHERICS/components/unary/vent_pump.dm b/code/ATMOSPHERICS/components/unary/vent_pump.dm
index 4a633030c2..83f8eb7fcf 100644
--- a/code/ATMOSPHERICS/components/unary/vent_pump.dm
+++ b/code/ATMOSPHERICS/components/unary/vent_pump.dm
@@ -338,13 +338,13 @@
return
/*
- Alt-click to ventcrawl - Monkeys, aliens, and slimes
+ Alt-click to ventcrawl - Monkeys, aliens, slimes and mice.
This is a little buggy but somehow that just seems to plague ventcrawl.
I am sorry, I don't know why.
*/
-/obj/machinery/atmospherics/unary/vent_pump/AltClick(var/mob/living/carbon/ML)
+/obj/machinery/atmospherics/unary/vent_pump/AltClick(var/mob/living/ML)
if(istype(ML))
- var/list/ventcrawl_verbs = list(/mob/living/carbon/monkey/verb/ventcrawl, /mob/living/carbon/alien/verb/ventcrawl, /mob/living/carbon/slime/verb/ventcrawl)
+ var/list/ventcrawl_verbs = list(/mob/living/carbon/monkey/verb/ventcrawl, /mob/living/carbon/alien/verb/ventcrawl, /mob/living/carbon/slime/verb/ventcrawl,/mob/living/simple_animal/mouse/verb/ventcrawl)
if(length(ML.verbs & ventcrawl_verbs)) // alien queens have this removed, an istype would be complicated
ML.handle_ventcrawl(src)
return
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index f841b09d13..feacbe4a98 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -221,99 +221,6 @@
// ++++ROCKDTBEN++++ MOB PROCS //END
-/mob/living/carbon/proc/handle_ventcrawl(var/obj/machinery/atmospherics/unary/vent_pump/vent_found = null) // -- TLE -- Merged by Carn
- if(stat)
- src << "You must be conscious to do this!"
- return
- if(lying)
- src << "You can't vent crawl while you're stunned!"
- return
-
- if(vent_found) // one was passed in, probably from vent/AltClick()
- if(vent_found.welded)
- src << "That vent is welded shut."
- return
- if(!vent_found.Adjacent(src))
- return // don't even acknowledge that
- else
- for(var/obj/machinery/atmospherics/unary/vent_pump/v in range(1,src))
- if(!v.welded)
- if(v.Adjacent(src))
- vent_found = v
- if(!vent_found)
- src << "You'll need a non-welded vent to crawl into!"
- return
-
- if(!vent_found.network || !vent_found.network.normal_members.len)
- src << "This vent is not connected to anything."
- return
-
- var/list/vents = list()
- for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in vent_found.network.normal_members)
- if(temp_vent.welded)
- continue
- if(temp_vent in loc)
- continue
- var/turf/T = get_turf(temp_vent)
-
- if(!T || T.z != loc.z)
- continue
-
- var/i = 1
- var/index = "[T.loc.name]\[[i]\]"
- while(index in vents)
- i++
- index = "[T.loc.name]\[[i]\]"
- vents[index] = temp_vent
- if(!vents.len)
- src << "\red There are no available vents to travel to, they could be welded."
- return
-
- var/obj/selection = input("Select a destination.", "Duct System") as null|anything in sortAssoc(vents)
- if(!selection) return
-
- if(!vent_found.Adjacent(src))
- src << "Never mind, you left."
- return
-
- for(var/obj/item/carried_item in contents)//If the monkey got on objects.
- if( !istype(carried_item, /obj/item/weapon/implant) && !istype(carried_item, /obj/item/clothing/mask/facehugger) )//If it's not an implant or a facehugger
- src << "\red You can't be carrying items or have items equipped when vent crawling!"
- return
- if(isslime(src))
- var/mob/living/carbon/slime/S = src
- if(S.Victim)
- src << "\red You'll have to let [S.Victim] go or finish eating \him first."
- return
-
- var/obj/machinery/atmospherics/unary/vent_pump/target_vent = vents[selection]
- if(!target_vent)
- return
-
- for(var/mob/O in viewers(src, null))
- O.show_message(text("[src] scrambles into the ventillation ducts!"), 1)
- loc = target_vent
-
- var/travel_time = round(get_dist(loc, target_vent.loc) / 2)
-
- spawn(travel_time)
-
- if(!target_vent) return
- for(var/mob/O in hearers(target_vent,null))
- O.show_message("You hear something squeezing through the ventilation ducts.",2)
-
- sleep(travel_time)
-
- if(!target_vent) return
- if(target_vent.welded) //the vent can be welded while alien scrolled through the list or travelled.
- target_vent = vent_found //travel back. No additional time required.
- src << "\red The vent you were heading to appears to be welded."
- loc = target_vent.loc
- var/area/new_area = get_area(loc)
- if(new_area)
- new_area.Entered(src)
-
-
/mob/living/carbon/clean_blood()
. = ..()
if(ishuman(src))
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index a111125c26..57bb02ce5c 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -674,4 +674,96 @@
set category = "IC"
resting = !resting
- src << "\blue You are now [resting ? "resting" : "getting up"]"
\ No newline at end of file
+ src << "\blue You are now [resting ? "resting" : "getting up"]"
+
+/mob/living/proc/handle_ventcrawl(var/obj/machinery/atmospherics/unary/vent_pump/vent_found = null) // -- TLE -- Merged by Carn
+ if(stat)
+ src << "You must be conscious to do this!"
+ return
+ if(lying)
+ src << "You can't vent crawl while you're stunned!"
+ return
+
+ if(vent_found) // one was passed in, probably from vent/AltClick()
+ if(vent_found.welded)
+ src << "That vent is welded shut."
+ return
+ if(!vent_found.Adjacent(src))
+ return // don't even acknowledge that
+ else
+ for(var/obj/machinery/atmospherics/unary/vent_pump/v in range(1,src))
+ if(!v.welded)
+ if(v.Adjacent(src))
+ vent_found = v
+ if(!vent_found)
+ src << "You'll need a non-welded vent to crawl into!"
+ return
+
+ if(!vent_found.network || !vent_found.network.normal_members.len)
+ src << "This vent is not connected to anything."
+ return
+
+ var/list/vents = list()
+ for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in vent_found.network.normal_members)
+ if(temp_vent.welded)
+ continue
+ if(temp_vent in loc)
+ continue
+ var/turf/T = get_turf(temp_vent)
+
+ if(!T || T.z != loc.z)
+ continue
+
+ var/i = 1
+ var/index = "[T.loc.name]\[[i]\]"
+ while(index in vents)
+ i++
+ index = "[T.loc.name]\[[i]\]"
+ vents[index] = temp_vent
+ if(!vents.len)
+ src << "\red There are no available vents to travel to, they could be welded."
+ return
+
+ var/obj/selection = input("Select a destination.", "Duct System") as null|anything in sortAssoc(vents)
+ if(!selection) return
+
+ if(!vent_found.Adjacent(src))
+ src << "Never mind, you left."
+ return
+
+ for(var/obj/item/carried_item in contents)//If the monkey got on objects.
+ if( !istype(carried_item, /obj/item/weapon/implant) && !istype(carried_item, /obj/item/clothing/mask/facehugger) )//If it's not an implant or a facehugger
+ src << "\red You can't be carrying items or have items equipped when vent crawling!"
+ return
+ if(isslime(src))
+ var/mob/living/carbon/slime/S = src
+ if(S.Victim)
+ src << "\red You'll have to let [S.Victim] go or finish eating \him first."
+ return
+
+ var/obj/machinery/atmospherics/unary/vent_pump/target_vent = vents[selection]
+ if(!target_vent)
+ return
+
+ for(var/mob/O in viewers(src, null))
+ O.show_message(text("[src] scrambles into the ventillation ducts!"), 1)
+ loc = target_vent
+
+ var/travel_time = round(get_dist(loc, target_vent.loc) / 2)
+
+ spawn(travel_time)
+
+ if(!target_vent) return
+ for(var/mob/O in hearers(target_vent,null))
+ O.show_message("You hear something squeezing through the ventilation ducts.",2)
+
+ sleep(travel_time)
+
+ if(!target_vent) return
+ if(target_vent.welded) //the vent can be welded while alien scrolled through the list or travelled.
+ target_vent = vent_found //travel back. No additional time required.
+ src << "\red The vent you were heading to appears to be welded."
+ loc = target_vent.loc
+ var/area/new_area = get_area(loc)
+ if(new_area)
+ new_area.Entered(src)
\ No newline at end of file
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index 42c4b0745b..08d3b012a9 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -95,6 +95,7 @@ var/list/ai_list = list()
/mob/living/silicon/ai/proc/ai_statuschange, /mob/living/silicon/ai/proc/ai_hologram_change, \
/mob/living/silicon/ai/proc/toggle_camera_light)
+
if(!safety)//Only used by AIize() to successfully spawn an AI.
if (!B)//If there is no player/brain inside.
new/obj/structure/AIcore/deactivated(loc)//New empty terminal.
@@ -338,9 +339,12 @@ var/list/ai_list = list()
// src << text ("Switching Law [L]'s report status to []", lawcheck[L+1])
checklaws()
+ //Uncomment this line of code if you are enabling the AI Vocal (VOX) announcements.
+/*
if(href_list["say_word"])
play_vox_word(href_list["say_word"], null, src)
return
+*/
if (href_list["lawi"]) // Toggling whether or not a law gets stated by the State Laws verb --NeoFite
var/L = text2num(href_list["lawi"])
diff --git a/code/modules/mob/living/silicon/ai/say.dm b/code/modules/mob/living/silicon/ai/say.dm
index 3267f222c7..7705e5aedc 100644
--- a/code/modules/mob/living/silicon/ai/say.dm
+++ b/code/modules/mob/living/silicon/ai/say.dm
@@ -14,6 +14,13 @@
return 1
return ..()
+
+
+// These Verbs are commented out since we've disabled the AI vocal (VOX) announcements.
+// If you re-enable them there is 3 lines in ai.dm Topic() that you need to uncomment as well.
+// just search for VOX in there.
+
+/*
var/announcing_vox = 0 // Stores the time of the last announcement
var/const/VOX_CHANNEL = 200
var/const/VOX_DELAY = 100 // 10 seconds
@@ -128,3 +135,6 @@ var/const/VOX_PATH = "sound/vox/"
// src << "Downloading [file]"
var/sound/S = sound("[VOX_PATH][file]")
src << browse_rsc(S)
+
+
+*/
diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm
index 491841ebad..2687827d38 100644
--- a/code/modules/mob/living/simple_animal/friendly/mouse.dm
+++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm
@@ -69,58 +69,11 @@
if(client)
client.time_died_as_mouse = world.time
-//copy paste from alien/larva, if that func is updated please update this one also
/mob/living/simple_animal/mouse/verb/ventcrawl()
set name = "Crawl through Vent"
set desc = "Enter an air vent and crawl through the pipe system."
set category = "Mouse"
-
-// if(!istype(V,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent))
-// return
-
- if(src.stat != CONSCIOUS) return
-
- var/obj/machinery/atmospherics/unary/vent_pump/vent_found
- var/welded = 0
- for(var/obj/machinery/atmospherics/unary/vent_pump/v in range(1,src))
- if(!v.welded)
- vent_found = v
- break
- else
- welded = 1
- if(vent_found)
- if(vent_found.network&&vent_found.network.normal_members.len)
- var/list/vents = list()
- for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in vent_found.network.normal_members)
- if(temp_vent.loc == loc)
- continue
- vents.Add(temp_vent)
- var/list/choices = list()
- for(var/obj/machinery/atmospherics/unary/vent_pump/vent in vents)
- if(vent.loc.z != loc.z)
- continue
- var/atom/a = get_turf(vent)
- choices.Add(a.loc)
- var/turf/startloc = loc
- var/obj/selection = input("Select a destination.", "Duct System") in choices
- var/selection_position = choices.Find(selection)
- if(loc==startloc)
- var/obj/target_vent = vents[selection_position]
- if(target_vent)
- /*
- for(var/mob/O in oviewers(src, null))
- if ((O.client && !( O.blinded )))
- O.show_message(text("[src] scrambles into the ventillation ducts!"), 1)
- */
- loc = target_vent.loc
- else
- src << "\blue You need to remain still while entering a vent."
- else
- src << "\blue This vent is not connected to anything."
- else if(welded)
- src << "\red That vent is welded."
- else
- src << "\blue You must be standing on or beside an air vent to enter it."
+ handle_ventcrawl()
return
//copy paste from alien/larva, if that func is updated please update this one alsoghost
diff --git a/code/modules/organs/blood.dm b/code/modules/organs/blood.dm
index 4e300dbaea..c3e623271b 100644
--- a/code/modules/organs/blood.dm
+++ b/code/modules/organs/blood.dm
@@ -64,13 +64,13 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
// Damaged heart virtually reduces the blood volume, as the blood isn't
// being pumped properly anymore.
var/datum/organ/internal/heart/heart = internal_organs["heart"]
- switch(heart.damage)
- if(1 to heart.min_bruised_damage)
- blood_volume *= 0.8
- if(heart.min_bruised_damage to heart.min_broken_damage)
- blood_volume *= 0.6
- if(heart.min_broken_damage to INFINITY)
- blood_volume *= 0.3
+
+ if(heart.damage > 1 && heart.damage < heart.min_bruised_damage)
+ blood_volume *= 0.8
+ else if(heart.damage >= heart.min_bruised_damage && heart.damage < heart.min_broken_damage)
+ blood_volume *= 0.6
+ else if(heart.damage >= heart.min_broken_damage && heart.damage < INFINITY)
+ blood_volume *= 0.3
//Effects of bloodloss
switch(blood_volume)
diff --git a/code/modules/telesci/gps.dm b/code/modules/telesci/gps.dm
index b4fa7704a3..94ea86e23d 100644
--- a/code/modules/telesci/gps.dm
+++ b/code/modules/telesci/gps.dm
@@ -19,14 +19,6 @@ var/list/GPS_list = list()
/obj/item/device/gps/Del()
GPS_list.Remove(src)
..()
-/obj/item/device/gps/Del()
- GPS_list.Remove(src)
- ..()
-
-/obj/item/device/gps/Del()
- GPS_list.Remove(src)
- ..()
-
/obj/item/device/gps/emp_act(severity)
emped = 1
overlays -= "working"
@@ -75,4 +67,4 @@ var/list/GPS_list = list()
/obj/item/device/gps/engineering
icon_state = "gps-e"
- gpstag = "ENG0"
\ No newline at end of file
+ gpstag = "ENG0"
diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi
index fc06f3d110..a01eb38797 100644
Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ