diff --git a/code/WorkInProgress/Cael_Aislinn/Rust/core_field.dm b/code/WorkInProgress/Cael_Aislinn/Rust/core_field.dm
index ad6a754ba78..9d80d37aee6 100644
--- a/code/WorkInProgress/Cael_Aislinn/Rust/core_field.dm
+++ b/code/WorkInProgress/Cael_Aislinn/Rust/core_field.dm
@@ -116,7 +116,6 @@ Deuterium-tritium fusion: 4.5 x 10^7 K
volume_covered = PI * major_radius * minor_radius * 2.5 * 2.5 * 1000
process()
- ..()
//make sure the field generator is still intact
if(!owned_core)
del(src)
@@ -131,29 +130,21 @@ Deuterium-tritium fusion: 4.5 x 10^7 K
radiation = 0
//update values
- var/transfer_ratio = field_strength / 50
- major_radius = field_strength * 0.21875// max = 8.75
- minor_radius = field_strength * 0.2125// max = 8.625
- volume_covered = PI * major_radius * minor_radius * 2.5 * 2.5 * 2.5 * 7 * 7 * transfer_ratio
+ var/transfer_ratio = field_strength / 50 //higher field strength will result in faster plasma aggregation
+ major_radius = field_strength * 0.21875// max = 8.75m
+ minor_radius = field_strength * 0.2125// max = 8.625m
+ volume_covered = PI * major_radius * minor_radius * 2.5 * 2.5 * 2.5 * 7 * 7 * transfer_ratio //one tile = 2.5m*2.5m*2.5m
//add plasma from the surrounding environment
var/datum/gas_mixture/environment = loc.return_air()
-/*
- if(air_contents.temperature > 0)
- var/transfer_moles = (air_contents.return_pressure())*volume_rate/(air_contents.temperature * R_IDEAL_GAS_EQUATION)
-
- var/datum/gas_mixture/removed = air_contents.remove(transfer_moles)
-
- loc.assume_air(removed)
-*/
-
- //we're going to hack in some stuff to remove plasma from the air because QUANTUM PHYSICS
+ //hack in some stuff to remove plasma from the air because SCIENCE
//the amount of plasma pulled in each update is relative to the field strength, with 50T (max field strength) = 100% of area covered by the field
//at minimum strength, 0.25% of the field volume is pulled in per update (?)
//have a max of 1000 moles suspended
if(held_plasma.toxins < transfer_ratio * 1000)
var/moles_covered = environment.return_pressure()*volume_covered/(environment.temperature * R_IDEAL_GAS_EQUATION)
+ //world << "\blue moles_covered: [moles_covered]"
//
var/datum/gas_mixture/gas_covered = environment.remove(moles_covered)
var/datum/gas_mixture/plasma_captured = new /datum/gas_mixture()
@@ -161,9 +152,10 @@ Deuterium-tritium fusion: 4.5 x 10^7 K
plasma_captured.toxins = round(gas_covered.toxins * transfer_ratio)
//world << "\blue[plasma_captured.toxins] moles of plasma captured"
plasma_captured.temperature = gas_covered.temperature
- //plasma_captured.update_values()
+ plasma_captured.update_values()
+ //
gas_covered.toxins -= plasma_captured.toxins
- //gas_covered.update_values()
+ gas_covered.update_values()
//
held_plasma.merge(plasma_captured)
//
diff --git a/code/WorkInProgress/Cael_Aislinn/Rust/core_monitor.dm b/code/WorkInProgress/Cael_Aislinn/Rust/core_monitor.dm
index c9999d2d1db..2fbf5559231 100644
--- a/code/WorkInProgress/Cael_Aislinn/Rust/core_monitor.dm
+++ b/code/WorkInProgress/Cael_Aislinn/Rust/core_monitor.dm
@@ -8,6 +8,7 @@
var/obj/machinery/rust/core/core_generator = null
New()
+ ..()
spawn(0)
core_generator = locate() in world
@@ -41,7 +42,7 @@
process()
..()
- updateDialog()
+ src.updateDialog()
proc
interact(mob/user)
@@ -60,7 +61,7 @@
t += " Energy levels (MeV): [core_generator.owned_field.mega_energy]
"
t += " Core frequency: [core_generator.owned_field.frequency]
"
t += " Moles of plasma: [core_generator.owned_field.held_plasma.toxins]
"
- t += " Plasma temperature: [core_generator.owned_field.held_plasma.temperature]
"
+ t += " Core temperature: [core_generator.owned_field.held_plasma.temperature]
"
t += "
"
t += "Core atomic and subatomic constituents:
"
if(core_generator.owned_field.dormant_reactant_quantities && core_generator.owned_field.dormant_reactant_quantities.len)
@@ -74,5 +75,5 @@
t += "Core Generator unresponsive
"
t += "
"
t += "Close
"
- user << browse(t, "window=core_monitor;size=500x800")
+ user << browse(t, "window=core_monitor;size=500x400")
user.machine = src
diff --git a/code/WorkInProgress/Cael_Aislinn/Rust/fuel_assembly.dm b/code/WorkInProgress/Cael_Aislinn/Rust/fuel_assembly.dm
index a08776dd0c6..681d38f9aae 100644
--- a/code/WorkInProgress/Cael_Aislinn/Rust/fuel_assembly.dm
+++ b/code/WorkInProgress/Cael_Aislinn/Rust/fuel_assembly.dm
@@ -4,7 +4,7 @@
icon_state = "fuel_assembly"
name = "Fuel Rod Assembly"
var/list/rod_quantities
- var/amount_depleted = 0 //percent depleted
+ var/percent_depleted = 0
//
New()
rod_quantities = new/list
diff --git a/code/WorkInProgress/Cael_Aislinn/Rust/fuel_control.dm b/code/WorkInProgress/Cael_Aislinn/Rust/fuel_control.dm
index 7604e05958c..4895dfe9199 100644
--- a/code/WorkInProgress/Cael_Aislinn/Rust/fuel_control.dm
+++ b/code/WorkInProgress/Cael_Aislinn/Rust/fuel_control.dm
@@ -3,22 +3,34 @@
name = "Fuel Injection Control"
icon_state = "power"
var/list/fuel_injectors
- var/active_stage = "Cooling"
+ var/list/stage_status
var/announce_fueldepletion = 0
var/announce_stageprogression = 0
//var/obj/machinery/rust/fuel_injector/Injector = null
New()
+ ..()
//these are the only three stages we can accept
//we have another console for SCRAM
fuel_injectors = new/list
+ stage_status = new/list
+
fuel_injectors.Add("One")
fuel_injectors["One"] = new/list
+ stage_status.Add("One")
+ stage_status["One"] = 0
fuel_injectors.Add("Two")
fuel_injectors["Two"] = new/list
+ stage_status.Add("Two")
+ stage_status["Two"] = 0
fuel_injectors.Add("Three")
fuel_injectors["Three"] = new/list
+ stage_status.Add("Three")
+ stage_status["Three"] = 0
fuel_injectors.Add("SCRAM")
fuel_injectors["SCRAM"] = new/list
+ stage_status.Add("SCRAM")
+ stage_status["SCRAM"] = 0
+
spawn(0)
for(var/obj/machinery/rust/fuel_injector/Injector in world)
if(Injector.stage in fuel_injectors)
@@ -46,20 +58,33 @@
usr.machine = null
return
if( href_list["beginstage"] )
- active_stage = href_list["beginstage"]
- if(active_stage in fuel_injectors)
- for(var/obj/machinery/rust/fuel_injector/Injector in fuel_injectors[active_stage])
- Injector.BeginInjecting()
+ var/stage_name = href_list["beginstage"]
+ if(stage_name in fuel_injectors)
+ var/success = 1
+ for(var/obj/machinery/rust/fuel_injector/Injector in fuel_injectors[stage_name])
+ if(!Injector.BeginInjecting())
+ success = 0
+ if(!success) //may still partially complete
+ usr << "\red Unable to complete command."
+ stage_status[stage_name] = 1
+ updateDialog()
+ return
+ if( href_list["begincool"] )
+ var/stage_name = href_list["begincool"]
+ if(stage_name in fuel_injectors)
+ for(var/obj/machinery/rust/fuel_injector/Injector in fuel_injectors[stage_name])
+ Injector.StopInjecting()
+ stage_status[stage_name] = 0
updateDialog()
return
if( href_list["restart"] )
updateDialog()
return
if( href_list["cooldown"] )
- if(active_stage in fuel_injectors)
- for(var/obj/machinery/rust/fuel_injector/Injector in fuel_injectors[active_stage])
+ for(var/stage_name in fuel_injectors)
+ for(var/obj/machinery/rust/fuel_injector/Injector in fuel_injectors[stage_name])
Injector.StopInjecting()
- active_stage = "Cooling"
+ stage_status[stage_name] = 0
updateDialog()
return
if( href_list["update"] )
@@ -94,7 +119,7 @@
process()
..()
- updateDialog()
+ src.updateDialog()
proc
interact(mob/user)
@@ -104,12 +129,17 @@
user << browse(null, "window=fuel_monitor")
return
var/t = "Reactor Core Fuel Control
"
- t += "Current fuel injection stage: [active_stage]
"
- if(active_stage == "Cooling")
- //t += "Restart injection cycle
"
+ var/cooling = 0
+ for(var/stage in stage_status)
+ if(stage_status[stage])
+ t += "Fuel injection: Active
"
+ t += "Enter cooldown phase
"
+ cooling = 1
+ break
+ if(!cooling)
+ t += "Fuel injection: Cooling
"
t += "----
"
- else
- t += "Enter cooldown phase
"
+ //
t += "Fuel depletion announcement: "
t += "[announce_fueldepletion ? "Disable" : "Disabled"] "
t += "[announce_fueldepletion == 1 ? "Announcing" : "Announce"] "
@@ -126,18 +156,18 @@
t += "Fuel Assembly Port | "
t += "Assembly depletion percentage | "
t += ""
- for(var/stage in fuel_injectors)
- var/list/cur_stage = fuel_injectors[stage]
- t += "| Fuel Injection Stage: [stage] [active_stage == stage ? " (Currently active)" : "Activate"] |
"
+ for(var/stage_name in fuel_injectors)
+ var/list/cur_stage = fuel_injectors[stage_name]
+ t += "| Fuel Injection Stage: [stage_name], [stage_status[stage_name] ? "Active \[Enter cooldown\]" : "Cooling \[Begin injection\]"] |
"
for(var/obj/machinery/rust/fuel_injector/Injector in cur_stage)
t += ""
t += "| [Injector.on && Injector.remote_enabled ? "Operational" : "Unresponsive"] | "
t += "[Injector.rate/10] Modify | "
t += "[Injector.fuel_usage*100]% Modify | "
t += "[Injector.owned_assembly_port ? "[Injector.owned_assembly_port.cur_assembly ? "Loaded": "Empty"]" : "Disconnected" ] | "
- t += "[Injector.owned_assembly_port && Injector.owned_assembly_port.cur_assembly ? "[100 - Injector.owned_assembly_port.cur_assembly.amount_depleted*100]%" : ""] | "
+ t += "[Injector.owned_assembly_port && Injector.owned_assembly_port.cur_assembly ? "[Injector.owned_assembly_port.cur_assembly.percent_depleted]%" : ""] | "
t += "
"
t += ""
t += "Close
"
- user << browse(t, "window=fuel_monitor;size=500x800")
+ user << browse(t, "window=fuel_monitor;size=500x600")
user.machine = src
diff --git a/code/WorkInProgress/Cael_Aislinn/Rust/fuel_injector.dm b/code/WorkInProgress/Cael_Aislinn/Rust/fuel_injector.dm
index db78be7bb6f..493ac1a96c3 100644
--- a/code/WorkInProgress/Cael_Aislinn/Rust/fuel_injector.dm
+++ b/code/WorkInProgress/Cael_Aislinn/Rust/fuel_injector.dm
@@ -196,7 +196,7 @@
//
owned_assembly_port.cur_assembly.rod_quantities[reagent] -= amount
amount_left += owned_assembly_port.cur_assembly.rod_quantities[reagent]
- owned_assembly_port.cur_assembly.amount_depleted = amount_left / 300
+ owned_assembly_port.cur_assembly.percent_depleted = amount_left / 300
flick("injector-emitting",src)
use_power(fuel_usage * 10000 + 100) //0.0001
if(injecting)
diff --git a/code/WorkInProgress/Cael_Aislinn/Rust/gyrotron.dm b/code/WorkInProgress/Cael_Aislinn/Rust/gyrotron.dm
index 2619029c6c6..181792bca88 100644
--- a/code/WorkInProgress/Cael_Aislinn/Rust/gyrotron.dm
+++ b/code/WorkInProgress/Cael_Aislinn/Rust/gyrotron.dm
@@ -88,9 +88,33 @@
for(var/obj/machinery/computer/rust/gyrotron_controller/comp in range(25))
comp.updateDialog()
return
-
+/*
+ var/obj/item/projectile/beam/emitter/A = new /obj/item/projectile/beam/emitter( src.loc )
+ playsound(src.loc, 'emitter.ogg', 25, 1)
+ if(prob(35))
+ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
+ s.set_up(5, 1, src)
+ s.start()
+ A.dir = src.dir
+ if(src.dir == 1)//Up
+ A.yo = 20
+ A.xo = 0
+ else if(src.dir == 2)//Down
+ A.yo = -20
+ A.xo = 0
+ else if(src.dir == 4)//Right
+ A.yo = 0
+ A.xo = 20
+ else if(src.dir == 8)//Left
+ A.yo = 0
+ A.xo = -20
+ else // Any other
+ A.yo = -20
+ A.xo = 0
+ A.fired()
+*/
proc/Emit()
- var/obj/item/projectile/beam/ehf_beam/A = new ( src.loc )
+ var/obj/item/projectile/beam/ehf_beam/A = new /obj/item/projectile/beam/ehf_beam( src.loc )
A.frequency = frequency
A.damage = mega_energy * 500
//
diff --git a/code/WorkInProgress/Cael_Aislinn/Rust/gyrotron_controller.dm b/code/WorkInProgress/Cael_Aislinn/Rust/gyrotron_controller.dm
index df34958c236..3cfd65adf47 100644
--- a/code/WorkInProgress/Cael_Aislinn/Rust/gyrotron_controller.dm
+++ b/code/WorkInProgress/Cael_Aislinn/Rust/gyrotron_controller.dm
@@ -33,7 +33,7 @@
process()
..()
- //updateDialog()
+ src.updateDialog()
proc
interact(mob/user)
@@ -96,5 +96,5 @@
t += ""
*/
t += "Close
"
- user << browse(t, "window=gyrotron_controller;size=500x800")
+ user << browse(t, "window=gyrotron_controller;size=500x400")
user.machine = src
diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm
index 22a0659b4c0..17bec612819 100644
--- a/code/modules/power/generator.dm
+++ b/code/modules/power/generator.dm
@@ -1,8 +1,6 @@
// thermo electric generator powered by twinned gas turbines
// more realistic than type 2, and also cooler
#define ENERGY_TRANSFER_FACTOR 10
-#define POWER_PRODUCTION_FACTOR 1.25
-
/*/obj/machinery/power/generator/verb/set_amount(var/g as num)
set src in view(1)
@@ -31,7 +29,8 @@
if(lastgenlev != 0)
overlays += image('power.dmi', "teg-op[lastgenlev]")
-#define GENRATE 800 // generator output coefficient from Q
+#define GENRATE 0.05 // generator output coefficient from Q
+#define MAX_SAFE_OUTPUT 500000
/obj/machinery/power/generator/process()
@@ -62,7 +61,7 @@
var/energy_transfer = delta_temperature*hot_air_heat_capacity*cold_air_heat_capacity/(hot_air_heat_capacity+cold_air_heat_capacity)
var/heat = energy_transfer*(1-efficiency)
- lastgen = POWER_PRODUCTION_FACTOR * energy_transfer*efficiency
+ lastgen = energy_transfer * efficiency * GENRATE
//ENERGY_TRANSFER_FACTOR to beef up the amount of heat passed over
hot_air.temperature -= energy_transfer/hot_air_heat_capacity
@@ -71,7 +70,18 @@
//world << "POWER: [lastgen] W generated at [efficiency*100]% efficiency and sinks sizes [cold_air_heat_capacity], [hot_air_heat_capacity]"
+ //if producing more than 1 million watts, emit sparks and waste a little power
+ var/runoff = 0
+ if(lastgen > MAX_SAFE_OUTPUT)
+ runoff = lastgen - MAX_SAFE_OUTPUT
+ if( prob(max( 100, (100 * runoff / MAX_SAFE_OUTPUT) )) )
+ lastgen -= rand(1, 10) * (runoff / 100)
+ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
+ s.set_up(5, 1, src)
+ s.start()
+ //
add_avail(lastgen)
+
// update icon overlays only if displayed level has changed
if(air1)
@@ -80,7 +90,7 @@
if(air2)
circ2.air2.merge(air2)
- var/genlev = max(0, min( round(11*lastgen / 250000), 11))
+ var/genlev = max(0, min( round(11*lastgen / MAX_SAFE_OUTPUT), 11))
if(genlev != lastgenlev)
lastgenlev = genlev
updateicon()
diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm
index fddea20b2f9..8d9fcef035a 100644
--- a/code/modules/projectiles/projectile/beams.dm
+++ b/code/modules/projectiles/projectile/beams.dm
@@ -45,7 +45,7 @@ var/list/beam_master = list()
beam_master["[icon_state][target_dir]"] = I //And cache it!
//Finally add the overlay
- loc.overlays += beam_master["[icon_state][target_dir]"]
+ src.loc.overlays += beam_master["[icon_state][target_dir]"]
//Add the turf to a list in the beam master so they can be cleaned up easily.
if(reference in beam_master)