diff --git a/baystation12.dme b/baystation12.dme
index 238a4935310..ab997343539 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -1246,6 +1246,7 @@
#include "code\modules\surgery\ribcage.dm"
#include "code\modules\surgery\robolimbs.dm"
#include "code\modules\surgery\surgery.dm"
+#include "code\modules\surgery\headreattach.dm"
#include "code\modules\telesci\bscrystal.dm"
#include "code\modules\telesci\gps.dm"
#include "code\modules\telesci\telepad.dm"
diff --git a/code/game/gamemodes/events/power_failure.dm b/code/game/gamemodes/events/power_failure.dm
index c8848cd3ee8..dbebc649f53 100644
--- a/code/game/gamemodes/events/power_failure.dm
+++ b/code/game/gamemodes/events/power_failure.dm
@@ -61,7 +61,7 @@
if(C.cell && C.z == 1)
C.cell.charge = C.cell.maxcharge
for(var/obj/machinery/power/smes/S in world)
- if(S.z != 1)
+ if(istype(get_area(S), /area/turret_protected) || S.z != 1)
continue
S.charge = S.last_charge
S.output = S.last_output
diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm
index d7bb61c0be4..62e7376c4d4 100644
--- a/code/game/machinery/vending.dm
+++ b/code/game/machinery/vending.dm
@@ -52,6 +52,8 @@
var/const/WIRE_SHOCK = 3
var/const/WIRE_SHOOTINV = 4
+ var/check_accounts = 0 // 1 = requires PIN and checks accounts. 0 = You slide an ID, it vends, SPACE COMMUNISM!
+
/obj/machinery/vending/New()
..()
spawn(4)
@@ -164,46 +166,51 @@
if (istype(I, /obj/item/weapon/card/id))
var/obj/item/weapon/card/id/C = I
visible_message("[usr] swipes a card through [src].")
- if(vendor_account)
- var/attempt_pin = input("Enter pin code", "Vendor transaction") as num
- var/datum/money_account/D = attempt_account_access(C.associated_account_number, attempt_pin, 2)
- if(D)
- var/transaction_amount = currently_vending.price
- if(transaction_amount <= D.money)
+ if(check_accounts)
+ if(vendor_account)
+ var/attempt_pin = input("Enter pin code", "Vendor transaction") as num
+ var/datum/money_account/D = attempt_account_access(C.associated_account_number, attempt_pin, 2)
+ if(D)
+ var/transaction_amount = currently_vending.price
+ if(transaction_amount <= D.money)
+
+ //transfer the money
+ D.money -= transaction_amount
+ vendor_account.money += transaction_amount
- //transfer the money
- D.money -= transaction_amount
- vendor_account.money += transaction_amount
-
- //create entries in the two account transaction logs
- var/datum/transaction/T = new()
- T.target_name = "[vendor_account.owner_name] (via [src.name])"
- T.purpose = "Purchase of [currently_vending.product_name]"
- if(transaction_amount > 0)
- T.amount = "([transaction_amount])"
- else
+ //create entries in the two account transaction logs
+ var/datum/transaction/T = new()
+ T.target_name = "[vendor_account.owner_name] (via [src.name])"
+ T.purpose = "Purchase of [currently_vending.product_name]"
+ if(transaction_amount > 0)
+ T.amount = "([transaction_amount])"
+ else
+ T.amount = "[transaction_amount]"
+ T.source_terminal = src.name
+ T.date = current_date_string
+ T.time = worldtime2text()
+ D.transaction_log.Add(T)
+ //
+ T = new()
+ T.target_name = D.owner_name
+ T.purpose = "Purchase of [currently_vending.product_name]"
T.amount = "[transaction_amount]"
- T.source_terminal = src.name
- T.date = current_date_string
- T.time = worldtime2text()
- D.transaction_log.Add(T)
- //
- T = new()
- T.target_name = D.owner_name
- T.purpose = "Purchase of [currently_vending.product_name]"
- T.amount = "[transaction_amount]"
- T.source_terminal = src.name
- T.date = current_date_string
- T.time = worldtime2text()
- vendor_account.transaction_log.Add(T)
+ T.source_terminal = src.name
+ T.date = current_date_string
+ T.time = worldtime2text()
+ vendor_account.transaction_log.Add(T)
- // Vend the item
- src.vend(src.currently_vending, usr)
- currently_vending = null
+ // Vend the item
+ src.vend(src.currently_vending, usr)
+ currently_vending = null
+ else
+ usr << "\icon[src]You don't have that much money!"
else
- usr << "\icon[src]You don't have that much money!"
+ usr << "\icon[src]Unable to access account. Check security settings and try again."
else
- usr << "\icon[src]Unable to access account. Check security settings and try again."
+ //Just Vend it.
+ src.vend(src.currently_vending, usr)
+ currently_vending = null
else
usr << "\icon[src]Unable to access vendor account. Please record the machine ID and call CentComm Support."
diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm
index 4f472f864ff..0187d0a9af8 100644
--- a/code/game/objects/effects/decals/Cleanable/humans.dm
+++ b/code/game/objects/effects/decals/Cleanable/humans.dm
@@ -57,11 +57,9 @@
amount--
/obj/effect/decal/cleanable/blood/proc/dry()
- name = "dried [src]"
+ name = "dried [src.name]"
desc = "It's dark red and crusty. Someone is not doing their job."
- var/icon/I = icon(icon,icon_state)
- I.SetIntensity(0.7)
- icon = I
+ color = "#999999"
amount = 0
/obj/effect/decal/cleanable/blood/splatter
diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm
index 6fd7db5d10e..b375755f546 100644
--- a/code/modules/mob/living/simple_animal/hostile/bear.dm
+++ b/code/modules/mob/living/simple_animal/hostile/bear.dm
@@ -79,7 +79,7 @@
if(stance_step in list(1,4,7)) //every 3 ticks
var/action = pick( list( "growls at [target_mob]", "stares angrily at [target_mob]", "prepares to attack [target_mob]", "closely watches [target_mob]" ) )
if(action)
- emote(action)
+ custom_emote(1,action)
if(!found_mob)
stance_step--
@@ -90,7 +90,7 @@
if(HOSTILE_STANCE_ATTACKING)
if(stance_step >= 20) //attacks for 20 ticks, then it gets tired and needs to rest
- emote( "is worn out and needs to rest" )
+ custom_emote(1, "is worn out and needs to rest" )
stance = HOSTILE_STANCE_TIRED
stance_step = 0
walk(src, 0) //This stops the bear's walking
@@ -118,14 +118,16 @@
/mob/living/simple_animal/hostile/bear/FindTarget()
. = ..()
if(.)
- emote("stares alertly at [.]")
+ custom_emote(1,"stares alertly at [.]")
stance = HOSTILE_STANCE_ALERT
/mob/living/simple_animal/hostile/bear/LoseTarget()
..(5)
/mob/living/simple_animal/hostile/bear/AttackingTarget()
- emote( pick( list("slashes at [target_mob]", "bites [target_mob]") ) )
+ if(!Adjacent(target_mob))
+ return
+ custom_emote(1, pick( list("slashes at [target_mob]", "bites [target_mob]") ) )
var/damage = rand(20,30)
diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm
index 353ca6156f3..f1a5c15c4b9 100644
--- a/code/modules/mob/living/simple_animal/hostile/carp.dm
+++ b/code/modules/mob/living/simple_animal/hostile/carp.dm
@@ -44,7 +44,7 @@
/mob/living/simple_animal/hostile/carp/FindTarget()
. = ..()
if(.)
- emote("nashes at [.]")
+ custom_emote(1,"nashes at [.]")
/mob/living/simple_animal/hostile/carp/AttackingTarget()
. =..()
diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm
index 403c31b17f2..2dcbe0d949f 100644
--- a/code/modules/mob/living/simple_animal/hostile/hostile.dm
+++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm
@@ -87,6 +87,8 @@
return 1
/mob/living/simple_animal/hostile/proc/AttackingTarget()
+ if(!Adjacent(target_mob))
+ return
if(isliving(target_mob))
var/mob/living/L = target_mob
L.attack_animal(src)
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index bb3bbcdb3dc..560590cbad0 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -218,6 +218,7 @@
if (istype(user, /mob/living/silicon) && get_dist(src,user)>1)
return src.attack_hand(user)
+ src.add_fingerprint(user)
if (istype(W, /obj/item/weapon/crowbar) && opened)
if (has_electronics==1)
if (terminal)