diff --git a/code/FEA/FEA_system.dm b/code/FEA/FEA_system.dm
index 8189919da78..576bed173ee 100644
--- a/code/FEA/FEA_system.dm
+++ b/code/FEA/FEA_system.dm
@@ -329,8 +329,8 @@ datum
AG.process_group()
process_singletons()
- for(var/turf/simulated/T in active_singletons)
- T.process_cell()
+ //for(var/turf/simulated/T in active_singletons) // this code shouldn't actually exist in the current version of FEA apparently,
+ // T.process_cell() // causes horrible gas variable glitching
process_super_conductivity()
for(var/turf/simulated/hot_potato in active_super_conductivity)
diff --git a/code/WorkInProgress/detective_work.dm b/code/WorkInProgress/detective_work.dm
index de93933cc0a..48e741c7295 100644
--- a/code/WorkInProgress/detective_work.dm
+++ b/code/WorkInProgress/detective_work.dm
@@ -714,8 +714,11 @@ turf/proc/add_bloody_footprints(mob/living/carbon/human/M,leaving,d,info)
this.dir = d
this.desc = "These bloody footprints appear to have been made by [info]."
if(istype(M,/mob/living/carbon/human))
- this.blood_DNA.len++
- this.blood_DNA[this.blood_DNA.len] = list(M.dna.unique_enzymes,M.b_type)
+ if(this.blood_DNA.len)
+ this.blood_DNA.len++
+ this.blood_DNA[this.blood_DNA.len] = list(M.dna.unique_enzymes,M.dna.b_type)
+ else
+ this.blood_DNA = list(list(M.dna.unique_enzymes,M.dna.b_type))
proc/get_tracks(mob/M)
if(istype(M,/mob/living))
@@ -754,7 +757,7 @@ proc/blood_incompatible(donor,receiver)
afterattack(atom/A as obj|turf|area, mob/user as mob)
if(istype(A))
- user.visible_message("[user] starts to wipe the prints off of [A] with \the [src]!")
+ user.visible_message("[user] starts to wipe the prints and blood off of [A] with \the [src]!")
if(do_after(user,30))
user.visible_message("[user] finishes wiping away the evidence!")
A.clean_blood()
diff --git a/code/defines/obj.dm b/code/defines/obj.dm
index fee7d93abe2..4b3cd52c64a 100644
--- a/code/defines/obj.dm
+++ b/code/defines/obj.dm
@@ -677,6 +677,7 @@
density = 1
anchored = 1.0
layer = 2.8
+ throwpass = 1
New()
..()
diff --git a/code/game/atom_procs.dm b/code/game/atom_procs.dm
index cb0572d8451..b40b1ab18b4 100644
--- a/code/game/atom_procs.dm
+++ b/code/game/atom_procs.dm
@@ -148,12 +148,12 @@
I.Blend(new /icon('blood.dmi', "itemblood"),ICON_MULTIPLY)
I.Blend(new /icon(src.icon, src.icon_state),ICON_UNDERLAY)
src.icon = I
- if(src.blood_DNA)
+ if(src.blood_DNA.len)
src.blood_DNA.len++
- src.blood_DNA[src.blood_DNA.len] = list(M.dna.unique_enzymes,M.b_type)
+ src.blood_DNA[src.blood_DNA.len] = list(M.dna.unique_enzymes,M.dna.b_type)
else
var/list/blood_DNA_temp[1]
- blood_DNA_temp[1] = list(M.dna.unique_enzymes, M.b_type)
+ blood_DNA_temp[1] = list(M.dna.unique_enzymes, M.dna.b_type)
src.blood_DNA = blood_DNA_temp
else if (istype(src, /turf/simulated))
var/turf/simulated/source2 = src
@@ -172,22 +172,19 @@
this.viruses += newDisease
newDisease.holder = this
else if (istype(src, /mob/living/carbon/human))
- if(src.blood_DNA)
+ if(src.blood_DNA.len)
src.blood_DNA.len++
- src.blood_DNA[src.blood_DNA.len] = list(M.dna.unique_enzymes,M.b_type)
+ src.blood_DNA[src.blood_DNA.len] = list(M.dna.unique_enzymes,M.dna.b_type)
else
var/list/blood_DNA_temp[1]
- blood_DNA_temp[1] = list(M.dna.unique_enzymes, M.b_type)
+ blood_DNA_temp[1] = list(M.dna.unique_enzymes, M.dna.b_type)
src.blood_DNA = blood_DNA_temp
else
return
else
- var/list/L = params2list(src.blood_DNA)
- L -= M.dna.unique_enzymes
- while(L.len >= 3)
- L -= L[1]
- L += M.dna.unique_enzymes
- src.blood_DNA = list2params(L)
+ var/list/blood_DNA_temp[1]
+ blood_DNA_temp[1] = list(M.dna.unique_enzymes, M.dna.b_type)
+ src.blood_DNA = blood_DNA_temp
return
/atom/proc/add_vomit_floor(mob/living/carbon/M as mob, var/toxvomit = 0)
diff --git a/code/game/events/Events/PowerOffline.dm b/code/game/events/Events/PowerOffline.dm
index a8e03dcacd0..f71d9b4096e 100644
--- a/code/game/events/Events/PowerOffline.dm
+++ b/code/game/events/Events/PowerOffline.dm
@@ -1,8 +1,8 @@
/datum/event/power_offline
Announce()
for(var/obj/machinery/power/apc/a in world)
- if(!a.crit)
- if(istype(a.area, /area/engine))
+ if(!a.crit && a.z == 1)
+ if(istype(a.area, /area/engine) || istype(a.area, /area/toxins/xenobiology) || istype(a.area, /area/turret_protected/ai))
continue
a.eventoff = 1
a.update()
diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm
index 70e1d553f87..b2860af20c4 100644
--- a/code/game/gamemodes/game_mode.dm
+++ b/code/game/gamemodes/game_mode.dm
@@ -55,7 +55,6 @@ Devices and Tools;
/obj/item/device/radio/headset/traitor:3:Headset with Binary Translator;
/obj/item/weapon/plastique:2:C-4 (Destroys walls);
/obj/item/weapon/syndie/c4explosive:4:Low Power Explosive Charge, with Detonator;
-/obj/item/weapon/syndie/c4explosive/heavy:7:High (!) Power Explosive Charge, with Detonator;
/obj/item/device/powersink:5:Powersink (DANGER!);
/obj/machinery/singularity_beacon/syndicate:7:Singularity Beacon (DANGER!);
Whitespace:Seperator;
@@ -69,6 +68,8 @@ Badassery;
/obj/item/toy/syndicateballoon:10:For showing that You Are The BOSS (Useless Balloon);
Whitespace:Seperator;"}
+//obj/item/weapon/syndie/c4explosive/heavy:7:High (!) Power Explosive Charge, with Detonator;
+
/datum/game_mode/proc/announce() //to be calles when round starts
world << "Notice: [src] did not define announce()"
diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm
index f697f35f748..d31d658cdf6 100644
--- a/code/game/gamemodes/meteor/meteors.dm
+++ b/code/game/gamemodes/meteor/meteors.dm
@@ -3,8 +3,8 @@
/var/const/meteor_wave_delay = 625 //minimum wait between waves in tenths of seconds
//set to at least 100 unless you want evarr ruining every round
-/var/const/meteors_in_wave = 20
-/var/const/meteors_in_small_wave = 10
+/var/const/meteors_in_wave = 10 //THIS should be better, Spess.
+/var/const/meteors_in_small_wave = 4
/proc/meteor_wave(var/number = meteors_in_wave)
if(!ticker || wavesecret)
@@ -107,8 +107,9 @@
/obj/effect/meteor/Move()
var/turf/T = src.loc
- if (istype(T, /turf))
- T.hotspot_expose(METEOR_TEMPERATURE, 1000)
+ //FUCK YOU. FUCK YOU ALL, METEORS. ~Hawk.
+ /*if (istype(T, /turf))
+ T.hotspot_expose(METEOR_TEMPERATURE, 1000) */
..()
return
diff --git a/code/game/machinery/bots/mulebot.dm b/code/game/machinery/bots/mulebot.dm
index 441a7f06fbe..9e0b575c3f5 100644
--- a/code/game/machinery/bots/mulebot.dm
+++ b/code/game/machinery/bots/mulebot.dm
@@ -806,7 +806,7 @@
var/obj/effect/decal/cleanable/blood/B = new(src.loc)
B.blood_DNA.len++
- B.blood_DNA[B.blood_DNA.len] = list(H.dna.unique_enzymes, H.b_type)
+ B.blood_DNA[B.blood_DNA.len] = list(H.dna.unique_enzymes, H.dna.b_type)
bloodiness += 4
diff --git a/code/game/machinery/computer/Operating.dm b/code/game/machinery/computer/Operating.dm
index e6516b74c33..8b37e8f6eef 100644
--- a/code/game/machinery/computer/Operating.dm
+++ b/code/game/machinery/computer/Operating.dm
@@ -33,7 +33,7 @@
Name: [src.victim.real_name]
Age: [!isnull(src.victim.age) ? src.victim.age : "Undetermined"]
-Blood Type: [src.victim.b_type]
+Blood Type: [src.victim.dna.b_type]
Health: [src.victim.health]
Brute Damage: [src.victim.getBruteLoss()]
diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm
index 4d8d31c860a..91e6b8b9b73 100644
--- a/code/game/machinery/computer/computer.dm
+++ b/code/game/machinery/computer/computer.dm
@@ -404,7 +404,7 @@ Pod/Blast Doors computer
G.fields["fingerprint"] = text("[]", md5(H.dna.uni_identity))
G.fields["p_stat"] = "Active"
G.fields["m_stat"] = "Stable"
- M.fields["b_type"] = text("[]", H.b_type)
+ M.fields["b_type"] = text("[]", H.dna.b_type)
M.fields["b_dna"] = H.dna.unique_enzymes
M.fields["mi_dis"] = "None"
M.fields["mi_dis_d"] = "No minor disabilities have been declared."
@@ -428,7 +428,7 @@ Pod/Blast Doors computer
L.fields["age"] = H.age
L.fields["id"] = md5("[H.real_name][H.mind.assigned_role]")
L.fields["rank"] = H.mind.assigned_role
- L.fields["b_type"] = H.b_type
+ L.fields["b_type"] = H.dna.b_type
L.fields["b_dna"] = H.dna.unique_enzymes
L.fields["enzymes"] = H.dna.struc_enzymes
L.fields["identity"] = H.dna.uni_identity
@@ -481,7 +481,7 @@ Pod/Blast Doors computer
G.fields["fingerprint"] = text("[]", md5(H.dna.uni_identity))
G.fields["p_stat"] = "Active"
G.fields["m_stat"] = "Stable"
- M.fields["b_type"] = text("[]", H.b_type)
+ M.fields["b_type"] = text("[]", H.dna.b_type)
M.fields["b_dna"] = H.dna.unique_enzymes
M.fields["mi_dis"] = "None"
M.fields["mi_dis_d"] = "No minor disabilities have been declared."
@@ -505,7 +505,7 @@ Pod/Blast Doors computer
L.fields["age"] = H.age
L.fields["id"] = md5("[H.real_name][H.mind.assigned_role]")
L.fields["rank"] = H.mind.assigned_role
- L.fields["b_type"] = H.b_type
+ L.fields["b_type"] = H.dna.b_type
L.fields["b_dna"] = H.dna.unique_enzymes
L.fields["enzymes"] = H.dna.struc_enzymes
L.fields["identity"] = H.dna.uni_identity
diff --git a/code/game/machinery/scanner.dm b/code/game/machinery/scanner.dm
index 857ed1dbbfc..3488d1f610c 100644
--- a/code/game/machinery/scanner.dm
+++ b/code/game/machinery/scanner.dm
@@ -46,7 +46,7 @@ obj/machinery/scanner/attack_hand(mob/living/carbon/human/user)
lastuser = user.real_name
var/mname = user.real_name
var/dna = user.dna.unique_enzymes
- var/bloodtype = user.b_type
+ var/bloodtype = user.dna.b_type
var/fingerprint = md5(user.dna.uni_identity)
var/list/marks = list()
var/age = user.age
diff --git a/code/game/magic/cultist/ritual.dm b/code/game/magic/cultist/ritual.dm
index 65e74484210..919c535d74d 100644
--- a/code/game/magic/cultist/ritual.dm
+++ b/code/game/magic/cultist/ritual.dm
@@ -555,8 +555,11 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
R.word2 = w2
R.word3 = w3
R.check_icon()
- R.blood_DNA.len++
- R.blood_DNA[R.blood_DNA.len] = list(H.dna.unique_enzymes, H.b_type)
+ if(R.blood_DNA.len)
+ R.blood_DNA.len++
+ R.blood_DNA[R.blood_DNA.len] = list(H.dna.unique_enzymes, H.dna.b_type)
+ else
+ R.blood_DNA = list(list(H.dna.unique_enzymes, H.dna.b_type))
return
else
user << "The book seems full of illegible scribbles. Is this a joke?"
@@ -601,8 +604,7 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
var/obj/effect/rune/R = new /obj/effect/rune
if(istype(user, /mob/living/carbon/human))
var/mob/living/carbon/human/H = user
- R.blood_DNA.len++
- R.blood_DNA[R.blood_DNA.len] = list(H.dna.unique_enzymes, H.b_type)
+ R.blood_DNA = list(list(H.dna.unique_enzymes, H.dna.b_type))
switch(r)
if("teleport")
var/list/words = list("ire", "ego", "nahlizet", "certum", "veri", "jatkaa", "balaq", "mgar", "karazet", "geeri")
diff --git a/code/game/objects/devices/scanners.dm b/code/game/objects/devices/scanners.dm
index 01462387d29..2d3f8b6c6ae 100644
--- a/code/game/objects/devices/scanners.dm
+++ b/code/game/objects/devices/scanners.dm
@@ -119,6 +119,7 @@ MASS SPECTROMETER
F.fingerprints = md5(M.dna.uni_identity)
F.icon_state = "fingerprint1"
F.name = text("FPrintC- '[M.name]'")
+
user << "\blue Done printing."
user << text("\blue [M]'s Fingerprints: [md5(M.dna.uni_identity)]")
if ( !(M.blood_DNA) )
@@ -126,7 +127,7 @@ MASS SPECTROMETER
else
user << "\blue Blood found on [M]. Analysing..."
spawn(15)
- for(var/i = 1, i < M.blood_DNA.len, i++)
+ for(var/i = 1, i <= M.blood_DNA.len, i++)
var/list/templist = M.blood_DNA[i]
user << "\blue Blood type: [templist[2]]\nDNA: [templist[1]]"
return
diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm
index 08c45e86efd..c48b54bb2c4 100644
--- a/code/game/objects/items/weapons/cigs_lighters.dm
+++ b/code/game/objects/items/weapons/cigs_lighters.dm
@@ -153,17 +153,16 @@ ZIPPO
var/turf/location = get_turf(src)
src.smoketime--
if(src.smoketime < 1)
- if (istype(src,/obj/item/clothing/mask/cigarette/cigar))
- var/obj/item/weapon/cigbutt/C = new /obj/item/weapon/cigarbutt
- C.loc = location
- else
- var/obj/item/weapon/cigbutt/C = new /obj/item/weapon/cigbutt
- C.loc = location
+ src.lit = -1
+ src.damtype = "brute"
+ src.icon_state = icon_butt
+ src.item_state = icon_off
+ src.desc = "A [src.name] butt."
+ src.name = "[src.name] butt"
if(ismob(src.loc))
var/mob/living/M = src.loc
M << "\red Your [src.name] goes out."
processing_objects.Remove(src)
- del(src)
return
if(location)
location.hotspot_expose(700, 5)
@@ -232,13 +231,6 @@ ZIPPO
throwforce = 1
-/obj/item/clothing/mask/cigarette/cigar/havanian/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if(istype(W, /obj/item/weapon/match) && (W:lit > 0))
- user << "\red The [src] straight out REFUSES to be lit by such uncivilized means."
- else
- ..()
-
-
////////////
//CIG PACK//
////////////
diff --git a/code/game/objects/items/weapons/surgery_tools.dm b/code/game/objects/items/weapons/surgery_tools.dm
index bedcbf3f3d5..a02524ceae0 100644
--- a/code/game/objects/items/weapons/surgery_tools.dm
+++ b/code/game/objects/items/weapons/surgery_tools.dm
@@ -1130,8 +1130,8 @@ CIRCULAR SAW
/obj/item/weapon/surgical_tool/bonegel
name = "bone gel"
- icon = 'janitor.dmi'
- icon_state = "cleaner"
+ icon = 'surgery.dmi'
+ icon_state = "bone gel"
/obj/item/weapon/surgical_tool/bonegel/New()
stage += 0
@@ -1154,8 +1154,8 @@ CIRCULAR SAW
/obj/item/weapon/surgical_tool/bonesetter
name = "bone setter"
- icon = 'items.dmi'
- icon_state = "wrench"
+ icon = 'surgery.dmi'
+ icon_state = "bone setter"
/obj/item/weapon/surgical_tool/bonesetter/New()
stage += 1
diff --git a/code/game/objects/tables_racks.dm b/code/game/objects/tables_racks.dm
index 0af3685cbb6..68e77257a07 100644
--- a/code/game/objects/tables_racks.dm
+++ b/code/game/objects/tables_racks.dm
@@ -98,7 +98,7 @@ TABLE AND RACK OBJECT INTERATIONS
/obj/structure/table/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(air_group || (height==0)) return 1
- if(istype(mover) && (mover.checkpass(PASSTABLE) || mover.checkpass(TABLEPASS))) //WTF do things hit tables like that? Jeez.
+ if(istype(mover) && mover.checkpass(PASSTABLE)) //WTF do things hit tables like that? Jeez.
return 1
else
return 0
diff --git a/code/game/vote.dm b/code/game/vote.dm
index 54f52659c23..45176d7e8bb 100644
--- a/code/game/vote.dm
+++ b/code/game/vote.dm
@@ -56,11 +56,11 @@
M << browse(null, "window=vote")
M.client.showvote = 0
+ calcwin()
+
if(winner == "none")
winner = "default"
- calcwin()
-
if(mode == 2)
var/wintext = capitalize(winner)
world << "Result is [wintext]"
diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm
index 686339aa6a6..412a8e497ad 100644
--- a/code/modules/admin/verbs/adminhelp.dm
+++ b/code/modules/admin/verbs/adminhelp.dm
@@ -23,7 +23,7 @@
for(var/rep in replacechars)
msg = dd_replacetext(msg, rep, "")
world << msg*/
- send2adminirc("#bs12admin","HELP: [src.key]: [msg]")
+ send2adminirc("#bs12admin","HELP: \"[src.key]: [msg]\"")
if(tension_master)
tension_master.new_adminhelp()
return
diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm
index 6c906ea1b83..bb3507561d5 100644
--- a/code/modules/mob/living/carbon/human/emote.dm
+++ b/code/modules/mob/living/carbon/human/emote.dm
@@ -1,8 +1,8 @@
/mob/living/carbon/human/emote(var/act,var/m_type=1,var/message = null)
var/param = null
- if (findtext(act, "-", 1, null))
- var/t1 = findtext(act, "-", 1, null)
+ if (findtext(act, " ", 1, null))
+ var/t1 = findtext(act, " ", 1, null)
param = copytext(act, t1 + 1, length(act) + 1)
act = copytext(act, 1, t1)
@@ -50,22 +50,33 @@
m_type = 1
if ("custom")
- var/input = input("Choose an emote to display.") as text|null
- if (!input)
- return
- input = sanitize(input)
- var/input2 = input("Is this a visible or hearable emote?") in list("Visible","Hearable")
- if (input2 == "Visible")
+ m_type = 0
+ if(copytext(param,1,2) == "v")
m_type = 1
- else if (input2 == "Hearable")
- if (src.miming)
- return
+ else if(copytext(param,1,2) == "h")
m_type = 2
else
- alert("Unable to use this emote, must be either hearable or visible.")
+ var/input2 = input("Is this a visible or hearable emote?") in list("Visible","Hearable")
+ if (input2 == "Visible")
+ m_type = 1
+ else if (input2 == "Hearable")
+ m_type = 2
+ else
+ alert("Unable to use this emote, must be either hearable or visible.")
+ return
+ if(m_type)
+ param = trim(copytext(param,2))
+ else
+ param = trim(param)
+ var/input
+ if(!param)
+ input = input("Choose an emote to display.") as text|null
+ else
+ input = param
+ if(input)
+ message = "[src] [input]"
+ else
return
- message = "[src] [input]"
-
if ("me")
if(silent)
return
@@ -186,6 +197,20 @@
message = "[src] makes a weak noise."
m_type = 2
+ if ("breathe")
+ message = "[src] breathes."
+ m_type = 1
+ holdbreath = 0
+
+ if ("stopbreath")
+ message = "[src] stops breathing..."
+ m_type = 1
+
+ if ("holdbreath")
+ message = "[src] stops breathing..."
+ m_type = 1
+ holdbreath = 1
+
if ("deathgasp")
message = "[src] seizes up and falls limp, \his eyes dead and lifeless..."
m_type = 1
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index 6d1326966cf..299dcb5f767 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -121,7 +121,7 @@
if (src.stat == 1 || stat == 2)
usr << "\red [name] doesn't seem to be responding to anything around [t_him], [t_his] eyes closed as though asleep."
- if(health < 0 && distance <= 3)
+ if((!isbreathing || holdbreath) && distance <= 3)
usr << "\red [name] does not appear to be breathing."
if(istype(usr, /mob/living/carbon/human) && usr.stat == 0 && src.stat == 1 && distance <= 1)
for(var/mob/O in viewers(usr.loc, null))
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 8781017873a..86cd2b9d4f0 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -21,7 +21,7 @@
var/b_eyes = 0.0
var/s_tone = 0.0
var/age = 30.0
- var/b_type
+// var/b_type
var/obj/item/clothing/suit/wear_suit = null
var/obj/item/clothing/under/w_uniform = null
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 5a551dd5fd5..ec5db3871c3 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -10,6 +10,8 @@
// used to do some stuff only on every X life tick
life_tick = 0
+ isbreathing = 1
+ holdbreath = 0
/mob/living/carbon/human/Life()
set invisibility = 0
@@ -272,16 +274,37 @@
var/datum/air_group/breath
// HACK NEED CHANGING LATER
if(health < config.health_threshold_dead)
- losebreath++
+ isbreathing = 0
+ spawn emote("stopbreath")
- if(losebreath>0 && prob(90)) //Suffocating so do not take a breath
- losebreath--
- if (prob(75)) //High chance of gasping for air
- spawn emote("gasp")
+ if(holdbreath)
+ isbreathing = 0
+
+ if(isbreathing)
+ // are we running out of air in our lungs?
+ if(losebreath > 0)
+ // inaprovaline prevents the need to breathe for a while
+ if(reagents.has_reagent("inaprovaline"))
+ losebreath = 0
+ else
+ // we're running out of air, gasp for it!
+ if (prob(25)) //High chance of gasping for air
+ spawn emote("gasp")
+ else if(health >= 0)
+ if(holdbreath)
+ // we're simply holding our breath, see if we can hold it longer
+ if(health < 30)
+ holdbreath = 0
+ isbreathing = 1
+ spawn emote("custom h inhales sharply.")
+ else
+ isbreathing = 1
+ emote("breathe")
+ else
if(istype(loc, /obj/))
var/obj/location_as_object = loc
location_as_object.handle_internal_lifeform(src, 0)
- else
+ if(isbreathing)
//First, check for air from internal atmosphere (using an air tank and mask generally)
breath = get_breath_from_internal(BREATH_VOLUME) // Super hacky -- TLE
//breath = get_breath_from_internal(0.5) // Manually setting to old BREATH_VOLUME amount -- TLE
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index f3c36e3dba2..f13df7c621a 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -70,15 +70,15 @@
src << "To use something, simply double-click it."
src << "Currently right-click functions will not work for the AI (except examine), and will either be replaced with dialogs or won't be usable by the AI."
src << "Remember to adjust your camera network if you are having difficulty navigating the camera networks with the arrow keys or clicking on certain objects.
"
- src << "
IMPORTANT GAMEPLAY ASPECTS:"
- src << "1.) Act like an AI. If someone is breaking into your upload, say something like \"Alert. Unauthorised Access Detected: AI Upload.\" not \"Help! Urist is trying to subvert me!\""
- src << "2.) Do not watch the traitor like a hawk alerting the station to his/her every move. This relates to 1."
- src << "3.) You are theoretically omniscient, but you should not be Beepsky 5000, laying down the law left and right. That is security's job. Instead, try to keep the station productive and effective. (Feel free to report the location of major violence and crimes and all that, just do not be the evil thing looking over peoples shoulders)"
- src << "
We want everyone to have a good time, so we, the admins, will try to correct you if you stray from these rules. Just try to keep it sensible."
if (!(ticker && ticker.mode && (mind in ticker.mode.malf_ai)))
show_laws()
src << "These laws may be changed by other players, or by you being the traitor."
+ src << "
IMPORTANT GAMEPLAY ASPECTS:"
+ src << "1.) Act like an AI. If someone is breaking into your upload, say something like \"Alert. Unauthorised Access Detected: AI Upload.\" not \"Help! Urist is trying to subvert me!\""
+ src << "2.) Do not watch the traitor like a hawk alerting the station to his/her every move. This relates to 1."
+ src << "3.) You are theoretically omniscient, but you should not be Beepsky 5000, laying down the law left and right. That is security's job. Instead, try to keep the station productive and effective. (Feel free to report the location of major violence and crimes and all that, just do not be the evil thing looking over peoples shoulders)"
+ src << "
We want everyone to have a good time, so we, the admins, will try to correct you if you stray from these rules. Just try to keep it sensible."
job = "AI"
spawn(0)
diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm
index 601f0cc256c..95aadff89b5 100644
--- a/code/modules/mob/transform_procs.dm
+++ b/code/modules/mob/transform_procs.dm
@@ -119,6 +119,12 @@
if (!(ticker && ticker.mode && (O.mind in ticker.mode.malf_ai)))
O.show_laws()
O << "These laws may be changed by other players, or by you being the traitor."
+ O << "
IMPORTANT GAMEPLAY ASPECTS:"
+ O << "1.) Act like an AI. If someone is breaking into your upload, say something like \"Alert. Unauthorised Access Detected: AI Upload.\" not \"Help! Urist is trying to subvert me!\""
+ O << "2.) Do not watch the traitor like a hawk alerting the station to his/her every move. This relates to 1."
+ O << "3.) You are theoretically omniscient, but you should not be Beepsky 5000, laying down the law left and right. That is security's job. Instead, try to keep the station productive and effective. (Feel free to report the location of major violence and crimes and all that, just do not be the evil thing looking over peoples shoulders)"
+ O << "
We want everyone to have a good time, so we, the admins, will try to correct you if you stray from these rules. Just try to keep it sensible."
+
O.verbs += /mob/living/silicon/ai/proc/ai_call_shuttle
O.verbs += /mob/living/silicon/ai/proc/show_laws_verb
diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm
index 897f472a2da..0de55b026ed 100644
--- a/code/modules/recycling/disposal.dm
+++ b/code/modules/recycling/disposal.dm
@@ -438,6 +438,20 @@
H.vent_gas(loc)
del(H)
+ CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
+ if (istype(mover,/obj/item))
+ var/obj/item/I = mover
+ if(prob(75))
+ I.loc = src
+ for(var/mob/M in viewers(src))
+ M.show_message("\the [I] lands in \the [src].", 3)
+ else
+ for(var/mob/M in viewers(src))
+ M.show_message("\the [I] bounces off of \the [src]'s rim!", 3)
+ return 0
+ else
+ return ..(mover, target, height, air_group)
+
//The toilet does not need to pressurized but can only handle small items.
//You can also choke people by dunking them into the toilet.
/obj/machinery/disposal/toilet
diff --git a/config/custom_items.txt b/config/custom_items.txt
index 4f8e10c2f18..3b481b98250 100644
--- a/config/custom_items.txt
+++ b/config/custom_items.txt
@@ -2,4 +2,5 @@ skymarshal: Phillip Oswald: /obj/item/weapon/coin/silver
spaceman96: Trenna Seber: /obj/item/weapon/pen/multi, /obj/item/clothing/suit/storage/labcoat/pink
asanadas: Book Berner: /obj/item/clothing/under/chameleon/psyche
tastyfish: Cindy Robertson: /obj/item/weapon/wrapping_paper
-eternal248: Maximilian Haynes: /obj/item/weapon/paper/certificate
\ No newline at end of file
+eternal248: Maximilian Haynes: /obj/item/weapon/paper/certificate
+searif: Yuki Matsuda: /obj/item/weapon/paper/certificate
\ No newline at end of file
diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi
index 9a4f4fec1b3..a1fe77d1b63 100644
Binary files a/icons/obj/surgery.dmi and b/icons/obj/surgery.dmi differ