From a101b51fa0f3c4ce51e4bc7952c4595cfb1cc5c1 Mon Sep 17 00:00:00 2001 From: Cael_Aislinn Date: Mon, 25 Feb 2013 13:47:04 +1000 Subject: [PATCH] normal shield gens produce a ring of shields around the machine, renamed file, useability and simplification tweaks to shield gen + cap, fixed some random issues with shields Signed-off-by: Cael_Aislinn --- baystation12.dme | 3 +- .../Cael_Aislinn/ShieldGen/energy_field.dm | 21 +- .../ShieldGen/shield_capacitor.dm | 182 ++++----- .../Cael_Aislinn/ShieldGen/shield_gen.dm | 360 +++++++++--------- ...l_shield_gen.dm => shield_gen_external.dm} | 18 +- 5 files changed, 312 insertions(+), 272 deletions(-) rename code/WorkInProgress/Cael_Aislinn/ShieldGen/{external_shield_gen.dm => shield_gen_external.dm} (65%) diff --git a/baystation12.dme b/baystation12.dme index 2518938c8c..1cafe41b56 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -39,6 +39,7 @@ #define FILE_DIR "sound/AI" #define FILE_DIR "sound/ambience" #define FILE_DIR "sound/effects" +#define FILE_DIR "sound/effects/turret" #define FILE_DIR "sound/effects/wind" #define FILE_DIR "sound/hallucinations" #define FILE_DIR "sound/items" @@ -1216,9 +1217,9 @@ #include "code\WorkInProgress\Cael_Aislinn\Rust\virtual_particle_catcher.dm" #include "code\WorkInProgress\Cael_Aislinn\ShieldGen\circuits_and_designs.dm" #include "code\WorkInProgress\Cael_Aislinn\ShieldGen\energy_field.dm" -#include "code\WorkInProgress\Cael_Aislinn\ShieldGen\external_shield_gen.dm" #include "code\WorkInProgress\Cael_Aislinn\ShieldGen\shield_capacitor.dm" #include "code\WorkInProgress\Cael_Aislinn\ShieldGen\shield_gen.dm" +#include "code\WorkInProgress\Cael_Aislinn\ShieldGen\shield_gen_external.dm" #include "code\WorkInProgress\Cael_Aislinn\Supermatter\LaserComputer.dm" #include "code\WorkInProgress\Cael_Aislinn\Supermatter\SuperMatter.dm" #include "code\WorkInProgress\Cael_Aislinn\Supermatter\ZeroPointLaser.dm" diff --git a/code/WorkInProgress/Cael_Aislinn/ShieldGen/energy_field.dm b/code/WorkInProgress/Cael_Aislinn/ShieldGen/energy_field.dm index dee4c063fb..653de8ca4d 100644 --- a/code/WorkInProgress/Cael_Aislinn/ShieldGen/energy_field.dm +++ b/code/WorkInProgress/Cael_Aislinn/ShieldGen/energy_field.dm @@ -9,38 +9,41 @@ anchored = 1 layer = 2.1 density = 0 - invisibility = 2 + invisibility = 101 var/strength = 0 - var/obj/machinery/shield_gen/parent - var/stress = 0 /obj/effect/energy_field/ex_act(var/severity) Stress(0.5 + severity) /obj/effect/energy_field/bullet_act(var/obj/item/projectile/Proj) - Stress(1 + 1 * (Proj.damage / 100)) - + Stress(Proj.damage / 10) /obj/effect/energy_field/meteorhit(obj/effect/meteor/M as obj) if(M) walk(M,0) + Stress(2) /obj/effect/energy_field/proc/Stress(var/severity) strength -= severity - stress += severity //if we take too much damage, drop out - the generator will bring us back up if we have enough power if(strength < 1) - invisibility = 2 + invisibility = 101 density = 0 + else if(strength >= 1) + invisibility = 0 + density = 1 /obj/effect/energy_field/proc/Strengthen(var/severity) strength += severity //if we take too much damage, drop out - the generator will bring us back up if we have enough power - if(strength > 1) + if(strength >= 1) invisibility = 0 density = 1 + else if(strength < 1) + invisibility = 101 + density = 0 /obj/effect/energy_field/CanPass(atom/movable/mover, turf/target, height=1.5, air_group = 0) //Purpose: Determines if the object (or airflow) can pass this atom. @@ -49,4 +52,4 @@ //Outputs: Boolean if can pass. //return (!density || !height || air_group) - return density + return !density diff --git a/code/WorkInProgress/Cael_Aislinn/ShieldGen/shield_capacitor.dm b/code/WorkInProgress/Cael_Aislinn/ShieldGen/shield_capacitor.dm index cf78443b41..9ea07f119b 100644 --- a/code/WorkInProgress/Cael_Aislinn/ShieldGen/shield_capacitor.dm +++ b/code/WorkInProgress/Cael_Aislinn/ShieldGen/shield_capacitor.dm @@ -10,7 +10,6 @@ var/active = 1 density = 1 anchored = 1 - var/obj/machinery/shield_gen/target_generator var/stored_charge = 0 var/time_since_fail = 100 var/max_charge = 1000000 @@ -29,39 +28,84 @@ spawn(10) for(var/obj/machinery/shield_gen/possible_gen in range(1, src)) if(get_dir(src, possible_gen) == src.dir) - target_generator = possible_gen possible_gen.owned_capacitor = src break ..() -/obj/machinery/shield_capacitor/verb/rotate() - set name = "Rotate Clockwise" - set category = "Object" - set src in oview(1) +/obj/machinery/shield_capacitor/attackby(obj/item/W, mob/user) - if (src.anchored || usr:stat) - usr << "It is fastened to the floor!" - return 0 - src.dir = turn(src.dir, 270) - target_generator = locate() in get_step(src,dir) - if(target_generator && !target_generator.owned_capacitor) - target_generator.owned_capacitor = src - return 1 - -/obj/machinery/shield_capacitor/power_change() - if(stat & BROKEN) - icon_state = "broke" - else - if( powered() ) - if (src.active) - icon_state = "capacitor" - else - icon_state = "capacitor" - stat &= ~NOPOWER + if(istype(W, /obj/item/weapon/card/id)) + var/obj/item/weapon/card/id/C = W + if(access_captain in C.access || access_security in C.access || access_engine in C.access) + src.locked = !src.locked + user << "Controls are now [src.locked ? "locked." : "unlocked."]" + updateDialog() else - spawn(rand(0, 15)) - src.icon_state = "capacitor" - stat |= NOPOWER + user << "\red Access denied." + else if(istype(W, /obj/item/weapon/card/emag)) + if(prob(75)) + src.locked = !src.locked + user << "Controls are now [src.locked ? "locked." : "unlocked."]" + updateDialog() + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(5, 1, src) + s.start() + + else if(istype(W, /obj/item/weapon/wrench)) + src.anchored = !src.anchored + src.visible_message("\blue \icon[src] [src] has been [anchored ? "bolted to the floor" : "unbolted from the floor"] by [user].") + + spawn(0) + for(var/obj/machinery/shield_gen/gen in range(1, src)) + if(get_dir(src, gen) == src.dir) + if(!src.anchored && gen.owned_capacitor == src) + gen.owned_capacitor = null + break + else if(src.anchored && !gen.owned_capacitor) + gen.owned_capacitor = src + break + gen.updateDialog() + updateDialog() + else + ..() + +/obj/machinery/shield_capacitor/attack_paw(user as mob) + return src.attack_hand(user) + +/obj/machinery/shield_capacitor/attack_ai(user as mob) + return src.attack_hand(user) + +/obj/machinery/shield_capacitor/attack_hand(mob/user) + if(stat & (NOPOWER|BROKEN)) + return + interact(user) + +/obj/machinery/shield_capacitor/interact(mob/user) + if ( (get_dist(src, user) > 1 ) || (stat & (BROKEN|NOPOWER)) ) + if (!istype(user, /mob/living/silicon)) + user.unset_machine() + user << browse(null, "window=shield_capacitor") + return + var/t = "Shield Capacitor Control Console

" + if(locked) + t += "Swipe your ID card to begin." + else + t += "This capacitor is: [active ? "Online" : "Offline" ] [active ? "\[Deactivate\]" : "\[Activate\]"]
" + t += "[time_since_fail > 2 ? "Charging stable." : "Warning, low charge!"]
" + t += "Charge: [stored_charge] Watts ([100 * stored_charge/max_charge]%)
" + t += "Charge rate: \ + \[min\] \ + \[--\] \ + \[-\][charge_rate] Watts/sec \ + \[+\] \ + \[++\] \ + \[max\]
" + t += "
" + t += "Refresh " + t += "Close
" + + user << browse(t, "window=shield_capacitor;size=500x800") + user.set_machine(src) /obj/machinery/shield_capacitor/process() // @@ -78,52 +122,12 @@ time_since_fail++ if(stored_charge < active_power_usage * 1.5) time_since_fail = 0 - // - updateDialog() - -/obj/machinery/shield_capacitor/attackby(obj/item/W, mob/user) - /*if(istype(W, /obj/item/weapon/wrench)) - if(active) - user << "Turn off the field generator first." - return - - else if(state == 0) - state = 1 - playsound(src.loc, 'Ratchet.ogg', 75, 1) - user << "You secure the external reinforcing bolts to the floor." - src.anchored = 1 - return - - else if(state == 1) - state = 0 - playsound(src.loc, 'Ratchet.ogg', 75, 1) - user << "You undo the external reinforcing bolts." - src.anchored = 0 - return*/ - - if(istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda)) - if (src.allowed(user)) - src.locked = !src.locked - user << "Controls are now [src.locked ? "locked." : "unlocked."]" - else - user << "\red Access denied." - - else if(istype(W, /obj/item/weapon/wrench)) - src.anchored = !src.anchored - src.visible_message("\blue \icon[src] [src] has been [anchored ? "bolted to the floor" : "unbolted from the floor"] by [user].") - - else - src.add_fingerprint(user) - user << "\red You hit the [src.name] with your [W.name]!" - for(var/mob/M in viewers(src)) - if(M == user) continue - M.show_message("\red The [src.name] has been hit with the [W.name] by [user.name]!") /obj/machinery/shield_capacitor/Topic(href, href_list[]) ..() if( href_list["close"] ) usr << browse(null, "window=shield_capacitor") - usr.machine = null + usr.unset_machine() return if( href_list["toggle"] ) active = !active @@ -140,20 +144,28 @@ // updateDialog() -/obj/machinery/shield_capacitor/interact(mob/user) - if ( (get_dist(src, user) > 1 ) || (stat & (BROKEN|NOPOWER)) ) - if (!istype(user, /mob/living/silicon)) - user.machine = null - user << browse(null, "window=shield_capacitor") - return - var/t = "Shield Capacitor Control Console
" - t += "[target_generator ? "Shield generator connected." : "Unable to locate shield generator!"]
" - t += "This capacitor is: [active ? "Online" : "Offline" ] [active ? "\[Deactivate\]" : "\[Activate\]"]
" - t += "[time_since_fail > 2 ? "Charging stable." : "Warning, low charge!"]
" - t += "Capacitor charge: [stored_charge] Watts ([100 * stored_charge/max_charge]%)
" - t += "Capacitor charge rate (approx): \[min\] \[--\] \[-\][charge_rate] Watts/sec \[+\] \[++\] \[max\]
" - t += "
" - t += "Close
" +/obj/machinery/shield_capacitor/power_change() + if(stat & BROKEN) + icon_state = "broke" + else + if( powered() ) + if (src.active) + icon_state = "capacitor" + else + icon_state = "capacitor" + stat &= ~NOPOWER + else + spawn(rand(0, 15)) + src.icon_state = "capacitor" + stat |= NOPOWER - user << browse(t, "window=shield_capacitor;size=500x800") - user.machine = src +/obj/machinery/shield_capacitor/verb/rotate() + set name = "Rotate capacitor clockwise" + set category = "Object" + set src in oview(1) + + if (src.anchored) + usr << "It is fastened to the floor!" + return + src.dir = turn(src.dir, 270) + return diff --git a/code/WorkInProgress/Cael_Aislinn/ShieldGen/shield_gen.dm b/code/WorkInProgress/Cael_Aislinn/ShieldGen/shield_gen.dm index c87fb4aab9..1b0512dfb6 100644 --- a/code/WorkInProgress/Cael_Aislinn/ShieldGen/shield_gen.dm +++ b/code/WorkInProgress/Cael_Aislinn/ShieldGen/shield_gen.dm @@ -25,7 +25,6 @@ var/max_field_strength = 10 var/time_since_fail = 100 var/energy_conversion_rate = 0.01 //how many renwicks per watt? - var/flicker_shield_glitch = 1 //shield is slightly faulty and flickers - don't think this is working as intended // use_power = 1 //0 use nothing //1 use idle power @@ -38,14 +37,191 @@ for(var/obj/machinery/shield_capacitor/possible_cap in range(1, src)) if(get_dir(possible_cap, src) == possible_cap.dir) owned_capacitor = possible_cap - possible_cap.target_generator = src break field = new/list() ..() -//copied from a copypaste. DRY, right? +/obj/machinery/shield_gen/attackby(obj/item/W, mob/user) + if(istype(W, /obj/item/weapon/card/id)) + var/obj/item/weapon/card/id/C = W + if(access_captain in C.access || access_security in C.access || access_engine in C.access) + src.locked = !src.locked + user << "Controls are now [src.locked ? "locked." : "unlocked."]" + updateDialog() + else + user << "\red Access denied." + else if(istype(W, /obj/item/weapon/card/emag)) + if(prob(75)) + src.locked = !src.locked + user << "Controls are now [src.locked ? "locked." : "unlocked."]" + updateDialog() + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(5, 1, src) + s.start() + + else if(istype(W, /obj/item/weapon/wrench)) + src.anchored = !src.anchored + src.visible_message("\blue \icon[src] [src] has been [anchored?"bolted to the floor":"unbolted from the floor"] by [user].") + + spawn(0) + for(var/obj/machinery/shield_gen/gen in range(1, src)) + if(get_dir(src, gen) == src.dir) + if(!src.anchored && gen.owned_capacitor == src) + gen.owned_capacitor = null + break + else if(src.anchored && !gen.owned_capacitor) + gen.owned_capacitor = src + break + gen.updateDialog() + updateDialog() + else + ..() + +/obj/machinery/shield_gen/attack_paw(user as mob) + return src.attack_hand(user) + +/obj/machinery/shield_gen/attack_ai(user as mob) + return src.attack_hand(user) + +/obj/machinery/shield_gen/attack_hand(mob/user) + if(stat & (NOPOWER|BROKEN)) + return + interact(user) + +/obj/machinery/shield_gen/interact(mob/user) + if ( (get_dist(src, user) > 1 ) || (stat & (BROKEN|NOPOWER)) ) + if (!istype(user, /mob/living/silicon)) + user.unset_machine() + user << browse(null, "window=shield_generator") + return + var/t = "Shield Generator Control Console

" + if(locked) + t += "Swipe your ID card to begin." + else + t += "[owned_capacitor ? "Charge capacitor connected." : "Unable to locate charge capacitor!"]
" + t += "This generator is: [active ? "Online" : "Offline" ] [active ? "\[Deactivate\]" : "\[Activate\]"]
" + t += "[time_since_fail > 2 ? "Field is stable." : "Warning, field is unstable!"]
" + t += "Coverage radius (restart required): \ + -- \ + - \ + [field_radius * 2]m \ + + \ + ++
" + t += "Overall field strength: [average_field_strength] Renwicks ([max_field_strength ? 100 * average_field_strength / max_field_strength : "NA"]%)
" + t += "Charge rate: -- \ + - \ + [strengthen_rate] Renwicks/sec \ + + \ + ++
" + t += "Upkeep energy: [field.len * average_field_strength / energy_conversion_rate] Watts/sec
" + t += "Additional energy required to charge: [field.len * strengthen_rate / energy_conversion_rate] Watts/sec
" + t += "Maximum field strength: \ + \[min\] \ + -- \ + - \ + [max_field_strength] Renwicks \ + + \ + ++ \ + \[max\]
" + t += "
" + t += "Refresh " + t += "Close
" + user << browse(t, "window=shield_generator;size=500x800") + user.set_machine(src) + +/obj/machinery/shield_gen/process() + + if(active && field.len) + var/stored_renwicks = 0 + var/target_field_strength = min(strengthen_rate + max(average_field_strength, 0), max_field_strength) + if(owned_capacitor) + var/required_energy = field.len * target_field_strength / energy_conversion_rate + var/assumed_charge = min(owned_capacitor.stored_charge, required_energy) + stored_renwicks = assumed_charge * energy_conversion_rate + owned_capacitor.stored_charge -= assumed_charge + + time_since_fail++ + + average_field_strength = 0 + target_field_strength = stored_renwicks / field.len + + for(var/obj/effect/energy_field/E in field) + if(stored_renwicks) + var/strength_change = target_field_strength - E.strength + if(strength_change > stored_renwicks) + strength_change = stored_renwicks + if(E.strength >= 1) + E.Strengthen(strength_change) + else if(E.strength < 0) + E.strength = 0 + E.Strengthen(0.1) + + stored_renwicks -= strength_change + + average_field_strength += E.strength + else + E.Strengthen(-E.strength) + + average_field_strength /= field.len + if(average_field_strength < 0) + time_since_fail = 0 + else + average_field_strength = 0 + +/obj/machinery/shield_gen/Topic(href, href_list[]) + ..() + if( href_list["close"] ) + usr << browse(null, "window=shield_generator") + usr.unset_machine() + return + else if( href_list["toggle"] ) + toggle() + else if( href_list["change_radius"] ) + field_radius += text2num(href_list["change_radius"]) + if(field_radius > 200) + field_radius = 200 + else if(field_radius < 0) + field_radius = 0 + else if( href_list["strengthen_rate"] ) + strengthen_rate += text2num(href_list["strengthen_rate"]) + if(strengthen_rate > 0.2) + strengthen_rate = 0.2 + else if(strengthen_rate < 0) + strengthen_rate = 0 + else if( href_list["max_field_strength"] ) + max_field_strength += text2num(href_list["max_field_strength"]) + if(max_field_strength > 1000) + max_field_strength = 1000 + else if(max_field_strength < 0) + max_field_strength = 0 + // + updateDialog() + +/obj/machinery/shield_gen/power_change() + if(stat & BROKEN) + icon_state = "broke" + else + if( powered() ) + if (src.active) + icon_state = "generator1" + else + icon_state = "generator0" + stat &= ~NOPOWER + else + spawn(rand(0, 15)) + src.icon_state = "generator0" + stat |= NOPOWER + if (src.active) + toggle() + +/obj/machinery/shield_gen/ex_act(var/severity) + + if(active) + toggle() + return ..() + +/* /obj/machinery/shield_gen/proc/check_powered() - /* check_powered = 1 if(!anchored) powered = 0 @@ -76,122 +252,14 @@ PN.newload += shieldload //uses powernet power. */ -/obj/machinery/shield_gen/process() - - if(active && field.len) - var/stored_renwicks = 0 - var/target_field_strength = min(average_field_strength + strengthen_rate, max_field_strength) - if(owned_capacitor) - var/assumed_charge = min(owned_capacitor.stored_charge, (target_field_strength / energy_conversion_rate) * field.len) - stored_renwicks = assumed_charge * energy_conversion_rate - owned_capacitor.stored_charge -= assumed_charge - - time_since_fail++ - - average_field_strength = 0 - target_field_strength = stored_renwicks / field.len - - if(!flicker_shield_glitch) - for(var/obj/effect/energy_field/E in field) - //check to see if the shield is strengthening or failing - if(E.strength > target_field_strength) - E.strength = target_field_strength - else if(E.strength + strengthen_rate > target_field_strength) - E.strength = target_field_strength - else - E.strength += strengthen_rate - - if(stored_renwicks - E.strength < 0) - E.strength = stored_renwicks - stored_renwicks -= E.strength - - average_field_strength += E.strength - //check if the current shield tile has enough energy to maintain itself - if(E.strength >= 1) - E.density = 1 - E.invisibility = 0 - else - E.density = 0 - E.invisibility = 2 - else - //the flicker shield glitch is an intersting quirk in 'older' and/or faulty shielding models - //basically, it strengthens the shields continuously until it can no longer sustain them... then it drops out for a few seconds and starts again - //this makes the shield 'flicker' every now and then until it stabilises - //when this glitch is fixed, shields will only be charged as much as is sustainable - for(var/obj/effect/energy_field/E in field) - //check to see if the shield is strengthening or failing - if(E.strength < target_field_strength) - E.strength += strengthen_rate - - if(stored_renwicks - E.strength < 0) - E.strength = stored_renwicks - stored_renwicks -= E.strength - - average_field_strength += E.strength - //check if the current shield tile has enough energy to maintain itself - if(E.strength >= 1) - E.density = 1 - E.invisibility = 0 - else - E.density = 0 - E.invisibility = 2 - - //add any leftover charge back to the capacitor - if(owned_capacitor && stored_renwicks >= 0) - owned_capacitor.stored_charge += stored_renwicks / energy_conversion_rate - - average_field_strength /= field.len - if(average_field_strength < 0) - time_since_fail = 0 - else - average_field_strength = 0 - // - updateDialog() - -/obj/machinery/shield_gen/attackby(obj/item/W, mob/user) - - if(istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda)) - if (src.allowed(user)) - src.locked = !src.locked - user << "Controls are now [src.locked ? "locked." : "unlocked."]" - else - user << "\red Access denied." - - else if(istype(W, /obj/item/weapon/wrench)) - src.anchored = !src.anchored - src.visible_message("\blue \icon[src] [src] has been [anchored?"bolted to the floor":"unbolted from the floor"] by [user].") - - else - src.add_fingerprint(user) - user << "\red You hit the [src.name] with your [W.name]!" - for(var/mob/M in viewers(src)) - if(M == user) continue - M.show_message("\red The [src.name] has been hit with the [W.name] by [user.name]!") - -/obj/machinery/shield_gen/power_change() - if(stat & BROKEN) - icon_state = "broke" - else - if( powered() ) - if (src.active) - icon_state = "generator1" - else - icon_state = "generator0" - stat &= ~NOPOWER - else - spawn(rand(0, 15)) - src.icon_state = "generator0" - stat |= NOPOWER - if (src.active) - toggle() - /obj/machinery/shield_gen/proc/toggle() active = !active power_change() if(active) var/list/covered_turfs = get_shielded_turfs() - if(get_turf(src) in covered_turfs) - covered_turfs.Remove(get_turf(src)) + var/turf/T = get_turf(src) + if(T in covered_turfs) + covered_turfs.Remove(T) for(var/turf/O in covered_turfs) var/obj/effect/energy_field/E = new(O) field.Add(E) @@ -207,60 +275,10 @@ for(var/mob/M in view(5,src)) M << "\icon[src] You hear heavy droning fade out." -/obj/machinery/shield_gen/Topic(href, href_list[]) - ..() - if( href_list["close"] ) - usr << browse(null, "window=shield_generator") - usr.machine = null - return - else if( href_list["toggle"] ) - toggle() - else if( href_list["change_radius"] ) - field_radius += text2num(href_list["change_radius"]) - if(field_radius > 200) - field_radius = 200 - else if(field_radius < 0) - field_radius = 0 - else if( href_list["strengthen_rate"] ) - strengthen_rate += text2num(href_list["strengthen_rate"]) - if(strengthen_rate > 0.2) - strengthen_rate = 0.2 - else if(strengthen_rate < 0) - strengthen_rate = 0 - else if( href_list["max_field_strength"] ) - max_field_strength += text2num(href_list["max_field_strength"]) - if(max_field_strength > 1000) - max_field_strength = 1000 - else if(max_field_strength < 0) - max_field_strength = 0 - // - updateDialog() - -/obj/machinery/shield_gen/interact(mob/user) - if ( (get_dist(src, user) > 1 ) || (stat & (BROKEN|NOPOWER)) ) - if (!istype(user, /mob/living/silicon)) - user.machine = null - user << browse(null, "window=shield_generator") - return - var/t = "Shield Generator Control Console
" - t += "[owned_capacitor ? "Charge capacitor connected." : "Unable to locate charge capacitor!"]
" - t += "This generator is: [active ? "Online" : "Offline" ] [active ? "\[Deactivate\]" : "\[Activate\]"]
" - t += "[time_since_fail > 2 ? "Field is stable." : "Warning, field is unstable!"]
" - t += "Coverage radius (generator will need a restart to take effect): -- - [field_radius * 2]m + ++
" - t += "Overall field strength: [average_field_strength] Renwicks ([100 * average_field_strength / max_field_strength]%)
" - t += "Charge consumption: [( (min(average_field_strength + strengthen_rate, max_field_strength)) / energy_conversion_rate) * field.len] Watts/sec
" - t += "Field charge rate (approx): -- -[strengthen_rate] Renwicks/sec + ++
" - t += "Maximum field strength (avg across field): \[min\] -- -[max_field_strength] Renwicks + ++ \[max\]
" - t += "
" - t += "Close
" - user << browse(t, "window=shield_generator;size=500x800") - user.machine = src - +//grab the border tiles in a circle around this machine /obj/machinery/shield_gen/proc/get_shielded_turfs() - return list() - -/obj/machinery/shield_gen/ex_act(var/severity) - - if(active) - toggle() - return ..() + var/list/out = list() + for(var/turf/T in range(field_radius, src)) + if(get_dist(src,T) == field_radius) + out.Add(T) + return out diff --git a/code/WorkInProgress/Cael_Aislinn/ShieldGen/external_shield_gen.dm b/code/WorkInProgress/Cael_Aislinn/ShieldGen/shield_gen_external.dm similarity index 65% rename from code/WorkInProgress/Cael_Aislinn/ShieldGen/external_shield_gen.dm rename to code/WorkInProgress/Cael_Aislinn/ShieldGen/shield_gen_external.dm index 08352989eb..f239dc9dac 100644 --- a/code/WorkInProgress/Cael_Aislinn/ShieldGen/external_shield_gen.dm +++ b/code/WorkInProgress/Cael_Aislinn/ShieldGen/shield_gen_external.dm @@ -21,12 +21,18 @@ for(var/turf/simulated/G in orange(1, O)) add_this_turf = 1 break - for(var/obj/structure/S in orange(1, O)) - add_this_turf = 1 - break - for(var/obj/structure/S in O) - add_this_turf = 0 - break + + //uncomment this for structures (but not lattices) to be surrounded by shield as well + /*if(!add_this_turf) + for(var/obj/structure/S in orange(1, O)) + if(!istype(S, /obj/structure/lattice)) + add_this_turf = 1 + break + if(add_this_turf) + for(var/obj/structure/S in O) + if(!istype(S, /obj/structure/lattice)) + add_this_turf = 0 + break*/ if(add_this_turf && !(O in open) && !(O in closed)) open += O