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()
..()