diff --git a/code/WorkInProgress/Cael_Aislinn/ShieldGen/circuits_and_designs.dm b/code/WorkInProgress/Cael_Aislinn/ShieldGen/circuits_and_designs.dm index 617468bd70f..0d948d1cde5 100644 --- a/code/WorkInProgress/Cael_Aislinn/ShieldGen/circuits_and_designs.dm +++ b/code/WorkInProgress/Cael_Aislinn/ShieldGen/circuits_and_designs.dm @@ -3,7 +3,7 @@ // External Shield Generator /obj/item/weapon/circuitboard/shield_gen_ex - name = "Circuit board (Experimental hull shield generator)" + name = "Circuit board (Hull shield generator)" board_type = "machine" build_path = "/obj/machinery/shield_gen/external" origin_tech = "bluespace=4;phorontech=3" @@ -29,7 +29,7 @@ datum/design/shield_gen_ex // Shield Generator /obj/item/weapon/circuitboard/shield_gen - name = "Circuit board (Experimental shield generator)" + name = "Circuit board (Bubble shield generator)" board_type = "machine" build_path = "/obj/machinery/shield_gen/external" origin_tech = "bluespace=4;phorontech=3" @@ -43,7 +43,7 @@ datum/design/shield_gen_ex "/obj/item/weapon/cable_coil" = 5) datum/design/shield_gen - name = "Circuit Design (Experimental shield generator)" + name = "Circuit Design (Bubble shield generator)" desc = "Allows for the construction of circuit boards used to build an experimental shield generator." id = "shield_gen" req_tech = list("bluespace" = 4, "phorontech" = 3) @@ -55,7 +55,7 @@ datum/design/shield_gen // Shield Capacitor /obj/item/weapon/circuitboard/shield_cap - name = "Circuit board (Experimental shield capacitor)" + name = "Circuit board (Shield capacitor)" board_type = "machine" build_path = "/obj/machinery/shield_capacitor" origin_tech = "magnets=3;powerstorage=4" @@ -69,7 +69,7 @@ datum/design/shield_gen "/obj/item/weapon/cable_coil" = 5) datum/design/shield_cap - name = "Circuit Design (Experimental shield capacitor)" + name = "Circuit Design (Shield capacitor)" desc = "Allows for the construction of circuit boards used to build an experimental shielding capacitor." id = "shield_cap" req_tech = list("magnets" = 3, "powerstorage" = 4) diff --git a/code/WorkInProgress/Cael_Aislinn/ShieldGen/energy_field.dm b/code/WorkInProgress/Cael_Aislinn/ShieldGen/energy_field.dm index 4ebfda0024d..a8bda3d14fc 100644 --- a/code/WorkInProgress/Cael_Aislinn/ShieldGen/energy_field.dm +++ b/code/WorkInProgress/Cael_Aislinn/ShieldGen/energy_field.dm @@ -11,6 +11,7 @@ density = 0 invisibility = 101 var/strength = 0 + var/ticks_recovering = 10 /obj/effect/energy_field/ex_act(var/severity) Stress(0.5 + severity) @@ -27,9 +28,12 @@ strength -= severity //if we take too much damage, drop out - the generator will bring us back up if we have enough power + ticks_recovering = min(ticks_recovering + 2, 10) if(strength < 1) invisibility = 101 density = 0 + ticks_recovering = 10 + strength = 0 else if(strength >= 1) invisibility = 0 density = 1 diff --git a/code/WorkInProgress/Cael_Aislinn/ShieldGen/shield_capacitor.dm b/code/WorkInProgress/Cael_Aislinn/ShieldGen/shield_capacitor.dm index 25825c489a4..b95c0ffb6f2 100644 --- a/code/WorkInProgress/Cael_Aislinn/ShieldGen/shield_capacitor.dm +++ b/code/WorkInProgress/Cael_Aislinn/ShieldGen/shield_capacitor.dm @@ -9,12 +9,10 @@ icon_state = "capacitor" var/active = 1 density = 1 - anchored = 1 var/stored_charge = 0 var/time_since_fail = 100 - var/max_charge = 1000000 - var/max_charge_rate = 100000 - var/min_charge_rate = 0 + var/max_charge = 5e6 + var/charge_limit = 200000 var/locked = 0 // use_power = 1 //0 use nothing @@ -23,6 +21,7 @@ idle_power_usage = 10 active_power_usage = 100 var/charge_rate = 100 + var/obj/machinery/shield_gen/owned_gen /obj/machinery/shield_capacitor/New() spawn(10) @@ -55,17 +54,17 @@ 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() + if(anchored) + spawn(0) + for(var/obj/machinery/shield_gen/gen in range(1, src)) + if(get_dir(src, gen) == src.dir && !gen.owned_capacitor) + owned_gen = gen + owned_gen.owned_capacitor = src + owned_gen.updateDialog() + else + if(owned_gen && owned_gen.owned_capacitor == src) + owned_gen.owned_capacitor = null + owned_gen = null else ..() @@ -94,17 +93,19 @@ 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 << browse(t, "window=shield_capacitor;size=500x400") user.set_machine(src) /obj/machinery/shield_capacitor/process() @@ -137,10 +138,10 @@ use_power = 1 if( href_list["charge_rate"] ) charge_rate += text2num(href_list["charge_rate"]) - if(charge_rate > max_charge_rate) - charge_rate = max_charge_rate - else if(charge_rate < min_charge_rate) - charge_rate = min_charge_rate + if(charge_rate > charge_limit) + charge_rate = charge_limit + else if(charge_rate < 0) + charge_rate = 0 // updateDialog() diff --git a/code/WorkInProgress/Cael_Aislinn/ShieldGen/shield_gen.dm b/code/WorkInProgress/Cael_Aislinn/ShieldGen/shield_gen.dm index b252ae7fb96..2cdccda1b7a 100644 --- a/code/WorkInProgress/Cael_Aislinn/ShieldGen/shield_gen.dm +++ b/code/WorkInProgress/Cael_Aislinn/ShieldGen/shield_gen.dm @@ -14,7 +14,6 @@ var/field_radius = 3 var/list/field density = 1 - anchored = 1 var/locked = 0 var/average_field_strength = 0 var/strengthen_rate = 0.2 @@ -22,7 +21,7 @@ var/powered = 0 var/check_powered = 1 var/obj/machinery/shield_capacitor/owned_capacitor - var/max_field_strength = 10 + var/target_field_strength = 10 var/time_since_fail = 100 var/energy_conversion_rate = 0.01 //how many renwicks per watt? // @@ -63,17 +62,22 @@ 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 + if(active) + toggle() + if(anchored) + spawn(0) + for(var/obj/machinery/shield_capacitor/cap in range(1, src)) + if(cap.owned_gen) + continue + if(get_dir(cap, src) == cap.dir && src.anchored) + owned_capacitor = cap + owned_capacitor.owned_gen = src + updateDialog() break - else if(src.anchored && !gen.owned_capacitor) - gen.owned_capacitor = src - break - gen.updateDialog() - updateDialog() + else + if(owned_capacitor && owned_capacitor.owned_gen == src) + owned_capacitor.owned_gen = null + owned_capacitor = null else ..() @@ -102,67 +106,65 @@ 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 += "Overall field strength: [average_field_strength] Renwicks ([target_field_strength ? 100 * average_field_strength / target_field_strength : "NA"]%)
" t += "Upkeep energy: [field.len * average_field_strength / energy_conversion_rate] Watts/sec
" + t += "Charge rate: -- \ + [strengthen_rate] Renwicks/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\]
" + \[min\] \ + -- \ + - \ + [target_field_strength] Renwicks \ + + \ + ++ \ + \[max\]
" t += "
" t += "Refresh " t += "Close
" - user << browse(t, "window=shield_generator;size=500x800") + user << browse(t, "window=shield_generator;size=500x400") user.set_machine(src) /obj/machinery/shield_gen/process() - if(active && field.len) + if(field.len) + time_since_fail++ 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/target_strength_this_update = min(strengthen_rate + max(average_field_strength, 0), target_field_strength) + + if(active && owned_capacitor) + var/required_energy = field.len * target_strength_this_update / 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 + var/renwicks_per_field = 0 + if(stored_renwicks != 0) + renwicks_per_field = 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 < 0) - E.strength = 0 + if(active && renwicks_per_field > 0) + var/amount_to_strengthen = min(renwicks_per_field - E.strength, strengthen_rate) + if(E.ticks_recovering > 0 && amount_to_strengthen > 0) + E.Strengthen( min(amount_to_strengthen / 10, 0.1) ) + E.ticks_recovering -= 1 else - E.Strengthen(strength_change) - - stored_renwicks -= strength_change - + E.Strengthen(amount_to_strengthen) average_field_strength += E.strength else E.Strengthen(-E.strength) average_field_strength /= field.len - if(average_field_strength < 0) + if(average_field_strength < 1) time_since_fail = 0 else average_field_strength = 0 @@ -187,12 +189,12 @@ strengthen_rate = 1 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 + else if( href_list["target_field_strength"] ) + target_field_strength += text2num(href_list["target_field_strength"]) + if(target_field_strength > 1000) + target_field_strength = 1000 + else if(target_field_strength < 0) + target_field_strength = 0 // updateDialog() @@ -252,6 +254,7 @@ */ /obj/machinery/shield_gen/proc/toggle() + set background = 1 active = !active power_change() if(active) @@ -269,7 +272,7 @@ else for(var/obj/effect/energy_field/D in field) field.Remove(D) - del D + D.loc = null for(var/mob/M in view(5,src)) M << "\icon[src] You hear heavy droning fade out." @@ -278,6 +281,8 @@ /obj/machinery/shield_gen/proc/get_shielded_turfs() var/list/out = list() for(var/turf/T in range(field_radius, src)) + world << "turf dist:[get_dist(src,T)]" if(get_dist(src,T) == field_radius) out.Add(T) + world << " added" return out diff --git a/code/WorkInProgress/Cael_Aislinn/ShieldGen/shield_gen_external.dm b/code/WorkInProgress/Cael_Aislinn/ShieldGen/shield_gen_external.dm index f239dc9dac0..dab223aeb64 100644 --- a/code/WorkInProgress/Cael_Aislinn/ShieldGen/shield_gen_external.dm +++ b/code/WorkInProgress/Cael_Aislinn/ShieldGen/shield_gen_external.dm @@ -1,7 +1,9 @@ - //---------- external shield generator //generates an energy field that loops around any built up area in space (is useless inside) halts movement and airflow, is blocked by walls, windows, airlocks etc +/obj/machinery/shield_gen/external + name = "hull shield generator" + /obj/machinery/shield_gen/external/New() ..()