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