Updates emitters and containment field power usage

As well as PA power usage. It's not used at the moment, but it might be
used by downstream or in the future.
This commit is contained in:
mwerezak
2014-08-08 18:28:44 -04:00
parent a08204fc16
commit 213b11601e
7 changed files with 94 additions and 86 deletions
+6
View File
@@ -104,6 +104,7 @@
shock_damage *= siemens_coeff
if (shock_damage<1)
return 0
src.take_overall_damage(0,shock_damage,used_weapon="Electrocution")
//src.burn_skin(shock_damage)
//src.adjustFireLoss(shock_damage) //burn_skin will do this for us
@@ -117,6 +118,11 @@
Stun(10)//This should work for now, more is really silly and makes you lay there forever
// if(src.weakened < 20*siemens_coeff) src.weakened = 20*siemens_coeff
Weaken(10)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, loc)
s.start()
return shock_damage
@@ -37,6 +37,22 @@
/mob/living/silicon/stun_effect_act(var/stun_amount, var/agony_amount)
return //immune
/mob/living/silicon/electrocute_act(var/shock_damage, var/obj/source, var/siemens_coeff = 1.0)
if (istype(source, /obj/machinery/containment_field))
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, loc)
s.start()
shock_damage *= 0.75 //take reduced damage
take_overall_damage(0, shock_damage)
visible_message("\red [src] was shocked by \the [source]!", \
"\red <B>Energy pulse detected, system damaged!</B>", \
"\red You hear an electrical crack")
if(prob(20))
Stun(2)
return
/mob/living/silicon/proc/damage_mob(var/brute = 0, var/fire = 0, var/tox = 0)
return
@@ -56,49 +56,17 @@
if(!FG1 || !FG2)
del(src)
return 0
if(iscarbon(user))
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, user.loc)
s.start()
if(isliving(user))
hasShocked = 1
var/shock_damage = min(rand(30,40),rand(30,40))
user.burn_skin(shock_damage)
user.updatehealth()
user.visible_message("\red [user.name] was shocked by the [src.name]!", \
"\red <B>You feel a powerful shock course through your body sending you flying!</B>", \
"\red You hear a heavy electrical crack")
user.electrocute_act(shock_damage, src)
var/stun = min(shock_damage, 15)
user.Stun(stun)
user.Weaken(10)
user.updatehealth()
var/atom/target = get_edge_target_turf(user, get_dir(src, get_step_away(user, src)))
user.throw_at(target, 200, 4)
sleep(20)
hasShocked = 0
return
else if(issilicon(user))
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, user.loc)
s.start()
hasShocked = 1
var/shock_damage = rand(15,30)
user.take_overall_damage(0,shock_damage)
user.visible_message("\red [user.name] was shocked by the [src.name]!", \
"\red <B>Energy pulse detected, system damaged!</B>", \
"\red You hear an electrical crack")
if(prob(20))
user.Stun(2)
sleep(20)
hasShocked = 0
return
return
/obj/machinery/containment_field/proc/set_master(var/master1,var/master2)
+14 -5
View File
@@ -1,4 +1,5 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33
#define EMITTER_DAMAGE_POWER_TRANSFER 350 //used to transfer power to containment field generators
/obj/machinery/power/emitter
name = "Emitter"
@@ -10,13 +11,15 @@
req_access = list(access_engine_equip)
var/id = null
use_power = 0
idle_power_usage = 10
active_power_usage = 300
use_power = 0 //uses powernet power, not APC power
active_power_usage = 30000 //30 kW laser. I guess that means 30 kJ per shot.
var/active = 0
var/powered = 0
var/fire_delay = 100
var/max_burst_delay = 100
var/min_burst_delay = 20
var/burst_shots = 3
var/last_shot = 0
var/shot_number = 0
var/state = 0
@@ -118,13 +121,19 @@
return
src.last_shot = world.time
if(src.shot_number < 3)
if(src.shot_number < burst_shots)
src.fire_delay = 2
src.shot_number ++
else
src.fire_delay = rand(20,100)
src.fire_delay = rand(min_burst_delay, max_burst_delay)
src.shot_number = 0
//need to calculate the power per shot as the emitter doesn't fire continuously.
var/burst_time = (min_burst_delay + max_burst_delay)/2 + 2*(burst_shots-1)
var/power_per_shot = active_power_usage * (burst_time/10) / burst_shots
var/obj/item/projectile/beam/emitter/A = new /obj/item/projectile/beam/emitter( src.loc )
A.damage = round(power_per_shot/EMITTER_DAMAGE_POWER_TRANSFER)
playsound(src.loc, 'sound/weapons/emitter.ogg', 25, 1)
if(prob(35))
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
@@ -12,7 +12,7 @@ field_generator power level display
-Aygar
*/
#define field_generator_max_power 250
#define field_generator_max_power 250000
/obj/machinery/field_generator
name = "Field Generator"
desc = "A large thermal battery that projects a high amount of energy when powered."
@@ -25,12 +25,16 @@ field_generator power level display
var/Varedit_start = 0
var/Varpower = 0
var/active = 0
var/power = 20 // Current amount of power
var/power = 30000 // Current amount of power
var/state = 0
var/warming_up = 0
var/list/obj/machinery/containment_field/fields
var/list/obj/machinery/field_generator/connected_gens
var/clean_up = 0
//If keeping field generators powered is hard then increase the emitter active power usage.
var/gen_power_draw = 5500 //power needed per generator
var/field_power_draw = 2000 //power needed per field object
/obj/machinery/field_generator/update_icon()
@@ -167,8 +171,8 @@ field_generator power level display
return 0
/obj/machinery/field_generator/bullet_act(var/obj/item/projectile/Proj)
if(Proj.flag != "bullet")
power += Proj.damage
if(istype(Proj, /obj/item/projectile/beam))
power += Proj.damage * EMITTER_DAMAGE_POWER_TRANSFER
update_icon()
return 0
@@ -206,51 +210,44 @@ field_generator power level display
if(src.power > field_generator_max_power)
src.power = field_generator_max_power
var/power_draw = 2
var/power_draw = gen_power_draw
for(var/obj/machinery/field_generator/FG in connected_gens)
if (!isnull(FG))
power_draw += gen_power_draw
for (var/obj/machinery/containment_field/F in fields)
if (isnull(F))
continue
power_draw++
if(draw_power(round(power_draw/2,1)))
if (!isnull(F))
power_draw += field_power_draw
power_draw /= 2 //because this will be mirrored for both generators
if(draw_power(round(power_draw)) >= power_draw)
return 1
else
for(var/mob/M in viewers(src))
M.show_message("\red The [src.name] shuts down!")
M.show_message("\red \The [src] shuts down!")
turn_off()
investigate_log("ran out of power and <font color='red'>deactivated</font>","singulo")
src.power = 0
return 0
//This could likely be better, it tends to start loopin if you have a complex generator loop setup. Still works well enough to run the engine fields will likely recode the field gens and fields sometime -Mport
/obj/machinery/field_generator/proc/draw_power(var/draw = 0, var/failsafe = 0, var/obj/machinery/field_generator/G = null, var/obj/machinery/field_generator/last = null)
if(Varpower)
return 1
if((G && G == src) || (failsafe >= 8))//Loopin, set fail
return 0
else
failsafe++
//Tries to draw the needed power from our own power reserve, or connected generators if we can. Returns the amount of power we were able to get.
/obj/machinery/field_generator/proc/draw_power(var/draw = 0, var/list/flood_list = list())
flood_list += src
if(src.power >= draw)//We have enough power
src.power -= draw
return 1
else//Need more power
draw -= src.power
src.power = 0
for(var/obj/machinery/field_generator/FG in connected_gens)
if(isnull(FG))
continue
if(FG == last)//We just asked you
continue
if(G)//Another gen is askin for power and we dont have it
if(FG.draw_power(draw,failsafe,G,src))//Can you take the load
return 1
else
return 0
else//We are askin another for power
if(FG.draw_power(draw,failsafe,src,src))
return 1
else
return 0
return draw
//Need more power
var/actual_draw = src.power //already checked that power < draw
src.power = 0
for(var/obj/machinery/field_generator/FG in connected_gens)
if (FG in flood_list)
continue
actual_draw += FG.draw_power(draw - actual_draw, flood_list) //since the flood list reference is shared this actually works.
if (actual_draw >= draw)
return actual_draw
return actual_draw
/obj/machinery/field_generator/proc/start_fields()
if(!src.state == 2 || !anchored)
@@ -6,7 +6,8 @@ proc
emit_particle()
1 power box
the only part of this thing that uses power, can hack to mess with the pa/make it better
the only part of this thing that uses power, can hack to mess with the pa/make it better.
Lies, only the control computer draws power.
1 fuel chamber
contains procs for mixing gas and whatever other fuel it uses
@@ -10,7 +10,7 @@
density = 1
use_power = 0
idle_power_usage = 500
active_power_usage = 10000
active_power_usage = 70000 //70 kW per unit of strength
construction_state = 0
active = 0
dir = 1
@@ -20,6 +20,7 @@
/obj/machinery/particle_accelerator/control_box/New()
connected_parts = list()
active_power_usage = initial(active_power_usage) * (strength + 1)
..()
@@ -29,7 +30,7 @@
/obj/machinery/particle_accelerator/control_box/update_state()
if(construction_state < 3)
use_power = 0
update_use_power(0)
assembled = 0
active = 0
for(var/obj/structure/particle_accelerator/part in connected_parts)
@@ -39,7 +40,7 @@
connected_parts = list()
return
if(!part_scan())
use_power = 1
update_use_power(1)
active = 0
connected_parts = list()
@@ -87,6 +88,7 @@
else if(href_list["scan"])
src.part_scan()
else if(href_list["strengthup"])
var/old_strength = strength
strength++
if(strength > 2)
strength = 2
@@ -97,8 +99,13 @@
for(var/obj/structure/particle_accelerator/part in connected_parts)
part.strength = strength
part.update_icon()
if (strength != old_strength)
active_power_usage = initial(active_power_usage) * (strength + 1)
use_power(0) //update power usage
else if(href_list["strengthdown"])
var/old_strength = strength
strength--
if(strength < 0)
strength = 0
@@ -107,6 +114,10 @@
for(var/obj/structure/particle_accelerator/part in connected_parts)
part.strength = strength
part.update_icon()
if (strength != old_strength)
active_power_usage = initial(active_power_usage) * (strength + 1)
use_power(0) //update power usage
src.updateDialog()
src.update_icon()
return
@@ -116,9 +127,9 @@
..()
if(stat & NOPOWER)
active = 0
use_power = 0
update_use_power(0)
else if(!stat && construction_state == 3)
use_power = 1
update_use_power(1)
return
@@ -188,13 +199,13 @@
/obj/machinery/particle_accelerator/control_box/proc/toggle_power()
src.active = !src.active
if(src.active)
src.use_power = 2
update_use_power(2)
for(var/obj/structure/particle_accelerator/part in connected_parts)
part.strength = src.strength
part.powered = 1
part.update_icon()
else
src.use_power = 1
update_use_power(1)
for(var/obj/structure/particle_accelerator/part in connected_parts)
part.strength = null
part.powered = 0