diff --git a/code/game/mecha/equipment/mecha_equipment.dm b/code/game/mecha/equipment/mecha_equipment.dm
index 156a5d7835..abc36112b6 100644
--- a/code/game/mecha/equipment/mecha_equipment.dm
+++ b/code/game/mecha/equipment/mecha_equipment.dm
@@ -15,9 +15,10 @@
var/range = MELEE //bitflags
-/obj/item/mecha_parts/mecha_equipment/proc/do_after_cooldown()
+/obj/item/mecha_parts/mecha_equipment/proc/do_after_cooldown(target=1)
sleep(equip_cooldown)
- if(src && chassis)
+ set_ready_state(1)
+ if(target && chassis)
return 1
return 0
diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm
index 6506eb5f80..447464f988 100644
--- a/code/game/mecha/equipment/tools/tools.dm
+++ b/code/game/mecha/equipment/tools/tools.dm
@@ -30,7 +30,7 @@
chassis.cell.use(energy_drain)
O.anchored = 1
var/T = chassis.loc
- if(do_after_cooldown())
+ if(do_after_cooldown(target))
if(T == chassis.loc && src == chassis.selected)
cargo_holder.cargo += O
O.loc = chassis
@@ -40,8 +40,6 @@
else
chassis.occupant_message("You must hold still while handling objects.")
O.anchored = initial(O.anchored)
- set_ready_state(1)
-
else
chassis.occupant_message("Not enough room in cargo compartment.")
else
@@ -62,8 +60,7 @@
chassis.visible_message("[chassis] pushes [target] out of the way.")
set_ready_state(0)
chassis.cell.use(energy_drain)
- if(do_after_cooldown())
- set_ready_state(1)
+ do_after_cooldown()
return 1
/obj/item/mecha_parts/mecha_equipment/tool/drill
@@ -81,7 +78,7 @@
chassis.occupant_message("You start to drill [target]")
chassis.cell.use(energy_drain)
var/T = chassis.loc
- if(do_after_cooldown())
+ if(do_after_cooldown(target))
if(T == chassis.loc && src == chassis.selected)
if(istype(target, /turf/simulated/wall/r_wall))
chassis.occupant_message("[target] is too durable to drill through.")
@@ -99,7 +96,6 @@
else
chassis.log_message("Drilled through [target]")
target.ex_act(2)
- set_ready_state(1)
return 1
@@ -121,45 +117,44 @@
if(!action_checks(target) || get_dist(chassis, target)>3) return
if(get_dist(chassis, target)>2) return
set_ready_state(0)
- if(do_after_cooldown())
- set_ready_state(1)
- if(istype(target, /obj/reagent_dispensers/watertank) && get_dist(chassis,target) <= 1)
- var/obj/o = target
- o.reagents.trans_to(src, 200)
- chassis.occupant_message("\blue Extinguisher refilled")
- playsound(chassis, 'refill.ogg', 50, 1, -6)
- else
- if(src.reagents.total_volume > 0)
- playsound(chassis, 'extinguish.ogg', 75, 1, -3)
- var/direction = get_dir(chassis,target)
- var/turf/T = get_turf(target)
- var/turf/T1 = get_step(T,turn(direction, 90))
- var/turf/T2 = get_step(T,turn(direction, -90))
+ if(do_after_cooldown(target))
+ if(istype(target, /obj/reagent_dispensers/watertank) && get_dist(chassis,target) <= 1)
+ var/obj/o = target
+ o.reagents.trans_to(src, 200)
+ chassis.occupant_message("\blue Extinguisher refilled")
+ playsound(chassis, 'refill.ogg', 50, 1, -6)
+ else
+ if(src.reagents.total_volume > 0)
+ playsound(chassis, 'extinguish.ogg', 75, 1, -3)
+ var/direction = get_dir(chassis,target)
+ var/turf/T = get_turf(target)
+ var/turf/T1 = get_step(T,turn(direction, 90))
+ var/turf/T2 = get_step(T,turn(direction, -90))
- var/list/the_targets = list(T,T1,T2)
- for(var/a=0, a<5, a++)
+ var/list/the_targets = list(T,T1,T2)
spawn(0)
- var/obj/effects/water/W = new /obj/effects/water(get_turf(chassis))
- if(!W)
- return
- var/turf/my_target = pick(the_targets)
- var/datum/reagents/R = new/datum/reagents(5)
- W.reagents = R
- R.my_atom = W
- src.reagents.trans_to(W,1)
- for(var/b=0, b<4, b++)
+ for(var/a=0, a<5, a++)
+ var/obj/effects/water/W = new /obj/effects/water(get_turf(chassis))
if(!W)
return
- step_towards(W,my_target)
- if(!W)
- return
- var/turf/W_turf = get_turf(W)
- W.reagents.reaction(W_turf)
- for(var/atom/atm in W_turf)
- W.reagents.reaction(atm)
- if(W.loc == my_target)
- break
- sleep(2)
+ var/turf/my_target = pick(the_targets)
+ var/datum/reagents/R = new/datum/reagents(5)
+ W.reagents = R
+ R.my_atom = W
+ src.reagents.trans_to(W,1)
+ for(var/b=0, b<4, b++)
+ if(!W)
+ return
+ step_towards(W,my_target)
+ if(!W)
+ return
+ var/turf/W_turf = get_turf(W)
+ W.reagents.reaction(W_turf)
+ for(var/atom/atm in W_turf)
+ W.reagents.reaction(atm)
+ if(W.loc == my_target)
+ break
+ sleep(2)
return 1
get_equip_info()
@@ -191,66 +186,60 @@
if (istype(target, /turf/simulated/wall))
chassis.occupant_message("Deconstructing [target]...")
set_ready_state(0)
- if(do_after_cooldown())
+ if(do_after_cooldown(target))
if(disabled) return
chassis.spark_system.start()
target:ReplaceWithFloor()
playsound(target, 'Deconstruct.ogg', 50, 1)
- set_ready_state(1)
chassis.cell.give(energy_drain)
else if (istype(target, /turf/simulated/floor))
chassis.occupant_message("Deconstructing [target]...")
set_ready_state(0)
- if(do_after_cooldown())
+ if(do_after_cooldown(target))
if(disabled) return
chassis.spark_system.start()
target:ReplaceWithSpace()
playsound(target, 'Deconstruct.ogg', 50, 1)
- set_ready_state(1)
chassis.cell.give(energy_drain)
else if (istype(target, /obj/machinery/door/airlock))
chassis.occupant_message("Deconstructing [target]...")
set_ready_state(0)
- if(do_after_cooldown())
+ if(do_after_cooldown(target))
if(disabled) return
chassis.spark_system.start()
del(target)
playsound(target, 'Deconstruct.ogg', 50, 1)
- set_ready_state(1)
chassis.cell.give(energy_drain)
if(1)
if(istype(target, /turf/space))
chassis.occupant_message("Building Floor...")
set_ready_state(0)
- if(do_after_cooldown())
+ if(do_after_cooldown(target))
if(disabled) return
target:ReplaceWithFloor()
playsound(target, 'Deconstruct.ogg', 50, 1)
chassis.spark_system.start()
- set_ready_state(1)
chassis.cell.use(energy_drain*3)
else if(istype(target, /turf/simulated/floor))
chassis.occupant_message("Building Wall...")
set_ready_state(0)
- if(do_after_cooldown())
+ if(do_after_cooldown(target))
if(disabled) return
target:ReplaceWithWall()
playsound(target, 'Deconstruct.ogg', 50, 1)
chassis.spark_system.start()
- set_ready_state(1)
chassis.cell.use(energy_drain*3)
if(2)
if(istype(target, /turf/simulated/floor))
chassis.occupant_message("Building Airlock...")
set_ready_state(0)
- if(do_after_cooldown())
+ if(do_after_cooldown(target))
if(disabled) return
chassis.spark_system.start()
var/obj/machinery/door/airlock/T = new /obj/machinery/door/airlock(target)
T.autoclose = 1
playsound(target, 'Deconstruct.ogg', 50, 1)
playsound(target, 'sparks2.ogg', 50, 1)
- set_ready_state(1)
chassis.cell.use(energy_drain*3)
return
@@ -290,8 +279,7 @@
set_ready_state(0)
chassis.cell.use(energy_drain)
do_teleport(chassis, T, 4)
- if(do_after_cooldown())
- set_ready_state(1)
+ do_after_cooldown()
return
@@ -338,8 +326,7 @@
P.failchance = 0
P.icon_state = "anom"
P.name = "wormhole"
- if(do_after_cooldown())
- set_ready_state(1)
+ do_after_cooldown()
src = null
spawn(rand(150,300))
del(P)
@@ -374,8 +361,7 @@
locked = null
set_ready_state(0)
chassis.cell.use(energy_drain)
- if(do_after_cooldown())
- set_ready_state(1)
+ do_after_cooldown()
else
chassis.occupant_message("Lock on [locked] disengaged.")
locked = null
@@ -395,8 +381,7 @@
sleep(2)
set_ready_state(0)
chassis.cell.use(energy_drain)
- if(do_after_cooldown())
- set_ready_state(1)
+ do_after_cooldown()
return
get_equip_info()
@@ -452,8 +437,7 @@
chassis.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST))
set_ready_state(0)
chassis.cell.use(energy_drain)
- if(do_after_cooldown())
- set_ready_state(1)
+ do_after_cooldown()
return
@@ -510,8 +494,7 @@
chassis.check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST))
set_ready_state(0)
chassis.cell.use(energy_drain)
- if(do_after_cooldown())
- set_ready_state(1)
+ do_after_cooldown()
return
proc/dynhitby(atom/movable/A)
@@ -531,8 +514,7 @@
chassis.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST))
set_ready_state(0)
chassis.cell.use(energy_drain)
- if(do_after_cooldown())
- set_ready_state(1)
+ do_after_cooldown()
return
diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm
index 86793f8035..b5af0c06d0 100644
--- a/code/game/mecha/equipment/weapons/weapons.dm
+++ b/code/game/mecha/equipment/weapons/weapons.dm
@@ -33,8 +33,7 @@
chassis.cell.use(energy_drain)
A.process()
chassis.log_message("Fired from [src.name], targeting [target].")
- if(do_after_cooldown())
- set_ready_state(1)
+ do_after_cooldown()
return
@@ -64,8 +63,7 @@
chassis.cell.use(energy_drain)
A.process()
chassis.log_message("Fired from [src.name], targeting [target].")
- if(do_after_cooldown())
- set_ready_state(1)
+ do_after_cooldown()
return
@@ -105,8 +103,7 @@
spawn()
A.process()
chassis.log_message("Fired from [src.name], targeting [target].")
- if(do_after_cooldown())
- set_ready_state(1)
+ do_after_cooldown()
return
/obj/item/mecha_parts/mecha_equipment/weapon/honker
@@ -162,8 +159,7 @@
*/
chassis.cell.use(energy_drain)
chassis.log_message("Honked from [src.name]. HONK!")
- if(do_after_cooldown())
- set_ready_state(1)
+ do_after_cooldown()
return
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic
@@ -229,8 +225,7 @@
set_ready_state(0)
A.process()
chassis.log_message("Fired from [src.name], targeting [target].")
- if(do_after_cooldown())
- set_ready_state(1)
+ do_after_cooldown()
return
@@ -269,8 +264,7 @@
sleep(2)
set_ready_state(0)
chassis.log_message("Fired from [src.name], targeting [target].")
- if(do_after_cooldown())
- set_ready_state(1)
+ do_after_cooldown()
return
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack
@@ -291,8 +285,7 @@
M.throw_at(target, missile_range, missile_speed)
projectiles--
chassis.log_message("Fired from [src.name], targeting [target].")
- if(do_after_cooldown())
- set_ready_state(1)
+ do_after_cooldown()
return
@@ -329,8 +322,7 @@
chassis.log_message("Fired from [src.name], targeting [target].")
spawn(det_time)
F.prime()
- if(do_after_cooldown())
- set_ready_state(1)
+ do_after_cooldown()
return
@@ -358,8 +350,7 @@
B.throw_at(target, missile_range, missile_speed)
projectiles--
chassis.log_message("Bananed from [src.name], targeting [target]. HONK!")
- if(do_after_cooldown())
- set_ready_state(1)
+ do_after_cooldown()
return
@@ -388,6 +379,5 @@
M.throw_at(target, missile_range, missile_speed)
projectiles--
chassis.log_message("Launched a mouse-trap from [src.name], targeting [target]. HONK!")
- if(do_after_cooldown())
- set_ready_state(1)
+ do_after_cooldown()
return
\ No newline at end of file
diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm
index 81511fa775..e37d89e359 100644
--- a/code/game/mecha/mecha.dm
+++ b/code/game/mecha/mecha.dm
@@ -803,6 +803,18 @@
/obj/mecha/examine()
set src in view()
..()
+ var/integrity = health/initial(health)*100
+ switch(integrity)
+ if(85 to 100)
+ usr << "It's fully intact."
+ if(65 to 85)
+ usr << "It's slightly damaged."
+ if(45 to 65)
+ usr << "It's badly damaged."
+ if(25 to 45)
+ usr << "It's heavily damaged."
+ else
+ usr << "It's falling apart."
if(equipment && equipment.len)
usr << "It's equipped with:"
for(var/obj/item/mecha_parts/mecha_equipment/ME in equipment)
diff --git a/code/game/objects/items/robot_parts.dm b/code/game/objects/items/robot_parts.dm
index d7ffd56e4d..6447e41fa9 100644
--- a/code/game/objects/items/robot_parts.dm
+++ b/code/game/objects/items/robot_parts.dm
@@ -128,30 +128,32 @@
user << "\blue You need to attach a flash to it first!"
if(istype(W, /obj/item/device/mmi))
+ var/obj/item/device/mmi/mmi = W
if(src.check_completion())
if(!istype(src.loc,/turf))
user << "\red You can't put the MMI in, the frame has to be standing on the ground to be perfectly precise."
return
- if(!W:brain)
+ if(!mmi.brain)
user << "\red Sticking an empty MMI into the frame would sort of defeat the purpose."
return
- if(W:brain.brainmob.stat == 2)
+ if(mmi.brain.brainmob.stat == 2)
user << "\red Sticking a dead brain into the frame would sort of defeat the purpose."
return
user.drop_item()
- W.loc = src
- src.brain = W
+ mmi.loc = src
+ src.brain = mmi
var/mob/living/silicon/robot/O = new /mob/living/silicon/robot(get_turf(src.loc))
+ if(!O) return
//O.start = 1
O.invisibility = 0
O.name = src.created_name
O.real_name = src.created_name
- if (W:brain.brainmob)
- W:brain.brainmob.mind.transfer_to(O)
+ if (mmi.brain.brainmob && mmi.brain.brainmob.mind)
+ mmi.brain.brainmob.mind.transfer_to(O)
else
for(var/mob/dead/observer/G in world)
- if(G.corpse == W:brain.brainmob && G.client)
+ if(G.corpse == mmi.brain.brainmob && G.client && G.corpse.mind)
G.corpse.mind.transfer_to(O)
del(G)
break
@@ -169,7 +171,7 @@
O.cell = src.chest.cell
O.cell.loc = O
- O.brain = W
+ O.brain = mmi
del(src)
else
diff --git a/code/game/objects/radio/radio.dm b/code/game/objects/radio/radio.dm
index 697c6ce44f..4e63c021d4 100644
--- a/code/game/objects/radio/radio.dm
+++ b/code/game/objects/radio/radio.dm
@@ -88,7 +88,8 @@ Speaker: [li
if (href_list["track"])
var/mob/target = locate(href_list["track"])
var/mob/living/silicon/ai/A = locate(href_list["track2"])
- A.ai_actual_track(target)
+ if(A && target)
+ A.ai_actual_track(target)
return
else if (href_list["freq"])
var/new_frequency = (frequency + text2num(href_list["freq"]))
diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm
index 2308407592..2ba14470fc 100644
--- a/code/modules/mob/living/silicon/ai/life.dm
+++ b/code/modules/mob/living/silicon/ai/life.dm
@@ -135,11 +135,17 @@
src << "Connection verified. Searching for APC in power network."
sleep(50)
var/obj/machinery/power/apc/theAPC = null
+/*
for (var/something in loc)
if (istype(something, /obj/machinery/power/apc))
if (!(something:stat & BROKEN))
theAPC = something
break
+*/
+ for (var/obj/machinery/power/apc/APC in loc)
+ if (!(APC.stat & BROKEN))
+ theAPC = APC
+ break
if (theAPC==null)
src << "Unable to locate APC!"
src:aiRestorePowerRoutine = 2
@@ -152,11 +158,17 @@
src << "APC located. Optimizing route to APC to avoid needless power waste."
sleep(50)
theAPC = null
+/*
for (var/something in loc)
if (istype(something, /obj/machinery/power/apc))
if (!(something:stat & BROKEN))
theAPC = something
break
+*/
+ for (var/obj/machinery/power/apc/APC in loc)
+ if (!(APC.stat & BROKEN))
+ theAPC = APC
+ break
if (theAPC==null)
src << "APC connection lost!"
src:aiRestorePowerRoutine = 2
@@ -169,11 +181,17 @@
src << "Best route identified. Hacking offline APC power port."
sleep(50)
theAPC = null
+/*
for (var/something in loc)
if (istype(something, /obj/machinery/power/apc))
if (!(something:stat & BROKEN))
theAPC = something
break
+*/
+ for (var/obj/machinery/power/apc/APC in loc)
+ if (!(APC.stat & BROKEN))
+ theAPC = APC
+ break
if (theAPC==null)
src << "APC connection lost!"
src:aiRestorePowerRoutine = 2
@@ -186,11 +204,17 @@
src << "Power port upload access confirmed. Loading control program into APC power port software."
sleep(50)
theAPC = null
+/*
for (var/something in loc)
if (istype(something, /obj/machinery/power/apc))
if (!(something:stat & BROKEN))
theAPC = something
break
+*/
+ for (var/obj/machinery/power/apc/APC in loc)
+ if (!(APC.stat & BROKEN))
+ theAPC = APC
+ break
if (theAPC==null)
src << "APC connection lost!"
src:aiRestorePowerRoutine = 2
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 477cb78f83..f4070a15a3 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -1508,12 +1508,11 @@
if(src.muted)
src << "You are muted have a nice day"
return
- if (!( ismob(M) ))
+ if (!ismob(M))
return
var/t = input("Message:", text("Private message to [M.key]")) as text|null
- if (!( t ))
+ if (!t || !usr || !M)
return
- if (!usr) return
if (usr.client && usr.client.holder)
M << "\red Admin PM from-[key_name(usr, M, 0)]: [t]"
usr << "\blue Admin PM to-[key_name(M, usr, 1)]: [t]"
diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm
index 1dc3e4e34b..e373830fda 100644
--- a/code/modules/mob/transform_procs.dm
+++ b/code/modules/mob/transform_procs.dm
@@ -169,12 +169,13 @@
src.invisibility = 101
for(var/t in src.organs)
del(src.organs[text("[t]")])
- //src.client.screen -= main_hud1.contents
- src.client.screen -= src.hud_used.contents
- src.client.screen -= src.hud_used.adding
- src.client.screen -= src.hud_used.mon_blo
- src.client.screen -= list( src.oxygen, src.throw_icon, src.i_select, src.m_select, src.toxin, src.internals, src.fire, src.hands, src.healths, src.pullin, src.blind, src.flash, src.rest, src.sleep, src.mach )
- src.client.screen -= list( src.zone_sel, src.oxygen, src.throw_icon, src.i_select, src.m_select, src.toxin, src.internals, src.fire, src.hands, src.healths, src.pullin, src.blind, src.flash, src.rest, src.sleep, src.mach )
+ if(src.client)
+ //src.client.screen -= main_hud1.contents
+ src.client.screen -= src.hud_used.contents
+ src.client.screen -= src.hud_used.adding
+ src.client.screen -= src.hud_used.mon_blo
+ src.client.screen -= list( src.oxygen, src.throw_icon, src.i_select, src.m_select, src.toxin, src.internals, src.fire, src.hands, src.healths, src.pullin, src.blind, src.flash, src.rest, src.sleep, src.mach )
+ src.client.screen -= list( src.zone_sel, src.oxygen, src.throw_icon, src.i_select, src.m_select, src.toxin, src.internals, src.fire, src.hands, src.healths, src.pullin, src.blind, src.flash, src.rest, src.sleep, src.mach )
var/mob/living/silicon/robot/O = new /mob/living/silicon/robot( src.loc )
// cyborgs produced by Robotize get an automatic power cell
diff --git a/code/unused/vehicle.dm b/code/unused/vehicle.dm
index eaab761ba3..c0833c5f72 100644
--- a/code/unused/vehicle.dm
+++ b/code/unused/vehicle.dm
@@ -206,7 +206,7 @@
src.health -= value
if(src.health>0)
src.spark_system.start()
- world << "[src] health is [health]"
+// world << "[src] health is [health]"
else
src.ex_act(1)
return