balances, improvements and tweaks to rust and antiqua. did not to cameras because i have a lecture in six hours.
Signed-off-by: CaelAislinn <cael_aislinn@yahoo.com.au>
@@ -158,8 +158,11 @@
|
||||
#define FILE_DIR "code/WorkInProgress"
|
||||
#define FILE_DIR "code/WorkInProgress/Apples"
|
||||
#define FILE_DIR "code/WorkInProgress/Cael_Aislinn"
|
||||
#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Jumper"
|
||||
#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Rust"
|
||||
#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Supermatter"
|
||||
#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Tajara"
|
||||
#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/tajara_sprites"
|
||||
#define FILE_DIR "code/WorkInProgress/Chinsky"
|
||||
#define FILE_DIR "code/WorkInProgress/mapload"
|
||||
#define FILE_DIR "code/WorkInProgress/Mini"
|
||||
@@ -196,6 +199,7 @@
|
||||
#define FILE_DIR "icons/vending_icons"
|
||||
#define FILE_DIR "interface"
|
||||
#define FILE_DIR "maps"
|
||||
#define FILE_DIR "maps/backup"
|
||||
#define FILE_DIR "sound"
|
||||
#define FILE_DIR "sound/AI"
|
||||
#define FILE_DIR "sound/ambience"
|
||||
@@ -1104,8 +1108,8 @@
|
||||
#include "code\WorkInProgress\AI_Visibility.dm"
|
||||
#include "code\WorkInProgress\buildmode.dm"
|
||||
#include "code\WorkInProgress\explosion_particles.dm"
|
||||
#include "code\WorkInProgress\Cael_Aislinn\Rust\core.dm"
|
||||
#include "code\WorkInProgress\Cael_Aislinn\Rust\core_field.dm"
|
||||
#include "code\WorkInProgress\Cael_Aislinn\Rust\core_gen.dm"
|
||||
#include "code\WorkInProgress\Cael_Aislinn\Rust\core_monitor.dm"
|
||||
#include "code\WorkInProgress\Cael_Aislinn\Rust\fuel_assembly.dm"
|
||||
#include "code\WorkInProgress\Cael_Aislinn\Rust\fuel_assembly_port.dm"
|
||||
@@ -1116,6 +1120,9 @@
|
||||
#include "code\WorkInProgress\Cael_Aislinn\Rust\gyrotron_controller.dm"
|
||||
#include "code\WorkInProgress\Cael_Aislinn\Rust\radiation.dm"
|
||||
#include "code\WorkInProgress\Cael_Aislinn\Rust\virtual_particle_catcher.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"
|
||||
#include "code\WorkInProgress\Cael_Aislinn\Tajara\say.dm"
|
||||
#include "code\WorkInProgress\Cael_Aislinn\Tajara\tajara_transformation.dm"
|
||||
#include "code\WorkInProgress\Cael_Aislinn\Tajara\tajaran.dm"
|
||||
|
||||
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
@@ -26,7 +26,7 @@ Deuterium-tritium fusion: 4.5 x 10^7 K
|
||||
var/energy = 0
|
||||
var/mega_energy = 0
|
||||
var/radiation = 0
|
||||
var/frequency = 0
|
||||
var/frequency = 1
|
||||
var/field_strength = 0.01 //in teslas, max is 50T
|
||||
|
||||
var/obj/machinery/rust/rad_source/radiator
|
||||
@@ -138,8 +138,16 @@ Deuterium-tritium fusion: 4.5 x 10^7 K
|
||||
//add plasma from the surrounding environment
|
||||
var/datum/gas_mixture/environment = loc.return_air()
|
||||
|
||||
//we're going to hack in some stuff to remove plasma from the air because QUANTUM PHYSICS
|
||||
/*
|
||||
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
|
||||
//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
|
||||
@@ -147,13 +155,13 @@ Deuterium-tritium fusion: 4.5 x 10^7 K
|
||||
var/moles_covered = environment.return_pressure()*volume_covered/(environment.temperature * R_IDEAL_GAS_EQUATION)
|
||||
//
|
||||
var/datum/gas_mixture/gas_covered = environment.remove(moles_covered)
|
||||
var/datum/gas_mixture/plasma_captured = new
|
||||
var/datum/gas_mixture/plasma_captured = new /datum/gas_mixture()
|
||||
//
|
||||
plasma_captured.toxins = gas_covered.toxins * transfer_ratio
|
||||
plasma_captured.toxins = round(gas_covered.toxins * transfer_ratio)
|
||||
plasma_captured.temperature = gas_covered.temperature
|
||||
gas_covered.toxins -= plasma_captured.toxins
|
||||
held_plasma.merge(plasma_captured)
|
||||
//
|
||||
gas_covered.toxins -= gas_covered.toxins * transfer_ratio
|
||||
environment.merge(gas_covered)
|
||||
|
||||
//let the particles inside the field react
|
||||
@@ -168,10 +176,10 @@ Deuterium-tritium fusion: 4.5 x 10^7 K
|
||||
|
||||
//change held plasma temp according to energy levels
|
||||
//SPECIFIC_HEAT_TOXIN
|
||||
if(mega_energy > 0)
|
||||
if(mega_energy > 0 && held_plasma.toxins)
|
||||
var/heat_capacity = held_plasma.heat_capacity()//200 * number of plasma moles
|
||||
if(heat_capacity > MINIMUM_HEAT_CAPACITY)
|
||||
held_plasma.temperature = (heat_capacity + mega_energy * 10000)/heat_capacity
|
||||
held_plasma.temperature = (heat_capacity + mega_energy * 35000)/heat_capacity
|
||||
|
||||
//if there is too much plasma in the field, lose some
|
||||
/*if( held_plasma.toxins > (MOLES_CELLSTANDARD * 7) * (50 / field_strength) )
|
||||
@@ -209,11 +217,15 @@ Deuterium-tritium fusion: 4.5 x 10^7 K
|
||||
//
|
||||
change_size(newsize)
|
||||
|
||||
proc/AddEnergy(var/a_energy, var/a_mega_energy, var/a_frequency)
|
||||
var/energy_loss_ratio = abs(a_frequency - src.frequency) / 1e9
|
||||
energy += a_energy - a_energy * a_frequency
|
||||
mega_energy += a_mega_energy - a_mega_energy * energy_loss_ratio
|
||||
|
||||
proc/AddParticles(var/name, var/quantity = 1)
|
||||
//world << "adding [quantity] [name]"
|
||||
if(name in dormant_reactant_quantities)
|
||||
dormant_reactant_quantities[name] += quantity
|
||||
else if(name != "proton" && name != "electron")
|
||||
else if(name != "proton" && name != "electron" && name != "neutron")
|
||||
dormant_reactant_quantities.Add(name)
|
||||
dormant_reactant_quantities[name] = quantity
|
||||
|
||||
|
||||
@@ -44,11 +44,18 @@ max volume of plasma storeable by the field = the total volume of a number of ti
|
||||
name = "Tokamak core"
|
||||
desc = "Enormous solenoid for generating extremely high power electromagnetic fields"
|
||||
icon = 'core.dmi'
|
||||
icon_state = "off"
|
||||
icon_state = "core0"
|
||||
anchored = 1
|
||||
var/on = 0
|
||||
var/obj/machinery/rust/em_field/owned_field
|
||||
var/field_strength = 0.01
|
||||
//
|
||||
req_access = list(access_engine)
|
||||
//
|
||||
use_power = 1
|
||||
idle_power_usage = 10
|
||||
active_power_usage = 300
|
||||
|
||||
|
||||
Topic(href, href_list)
|
||||
..()
|
||||
@@ -76,11 +83,11 @@ max volume of plasma storeable by the field = the total volume of a number of ti
|
||||
owned_field = new(src.loc)
|
||||
if(owned_field)
|
||||
owned_field.ChangeFieldStrength(field_strength)
|
||||
icon_state = "on"
|
||||
icon_state = "core1"
|
||||
return 1
|
||||
|
||||
proc/Shutdown()
|
||||
icon_state = "off"
|
||||
icon_state = "core0"
|
||||
on = 0
|
||||
del(owned_field)
|
||||
|
||||
@@ -90,15 +97,9 @@ max volume of plasma storeable by the field = the total volume of a number of ti
|
||||
return 1
|
||||
return 0
|
||||
|
||||
proc/AddEnergy(var/energy, var/mega_energy)
|
||||
if(owned_field)
|
||||
owned_field.energy += energy
|
||||
owned_field.mega_energy += mega_energy
|
||||
return 1
|
||||
return 0
|
||||
|
||||
process()
|
||||
..()
|
||||
use_power(100 * field_strength + 500)
|
||||
if(on && !owned_field)
|
||||
Shutdown()
|
||||
return
|
||||
@@ -108,5 +109,6 @@ max volume of plasma storeable by the field = the total volume of a number of ti
|
||||
|
||||
bullet_act(var/obj/item/projectile/Proj)
|
||||
if(Proj.flag != "bullet" && owned_field)
|
||||
AddEnergy(0, Proj.damage / 600)
|
||||
var/obj/item/projectile/beam/laserbeam = Proj
|
||||
owned_field.AddEnergy(0, laserbeam.damage / 5000, laserbeam.frequency)
|
||||
return 0
|
||||
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 262 B After Width: | Height: | Size: 251 B |
@@ -2,9 +2,8 @@
|
||||
/obj/machinery/rust/fuel_assembly_port
|
||||
name = "Fuel Assembly Port"
|
||||
icon = 'fuel_assembly_port.dmi'
|
||||
icon_state = "port"
|
||||
icon_state = "port0"
|
||||
density = 0
|
||||
var/stage
|
||||
var/obj/item/weapon/fuel_assembly/cur_assembly = null
|
||||
layer = 4
|
||||
|
||||
@@ -15,6 +14,16 @@
|
||||
cur_assembly = I
|
||||
user.drop_item()
|
||||
I.loc = src
|
||||
icon_state = "port1"
|
||||
|
||||
attack_hand(mob/user)
|
||||
add_fingerprint(user)
|
||||
/*if(stat & (BROKEN|NOPOWER))
|
||||
return*/
|
||||
if(cur_assembly)
|
||||
cur_assembly.loc = src.loc
|
||||
cur_assembly = null
|
||||
icon_state = "port0"
|
||||
|
||||
New()
|
||||
//embed the fuel port into a wall
|
||||
|
||||
|
Before Width: | Height: | Size: 238 B After Width: | Height: | Size: 1.1 KiB |
@@ -17,6 +17,8 @@
|
||||
fuel_injectors["Two"] = new/list
|
||||
fuel_injectors.Add("Three")
|
||||
fuel_injectors["Three"] = new/list
|
||||
fuel_injectors.Add("SCRAM")
|
||||
fuel_injectors["SCRAM"] = new/list
|
||||
spawn(0)
|
||||
for(var/obj/machinery/rust/fuel_injector/Injector in range(50,src))
|
||||
if(Injector.stage in fuel_injectors)
|
||||
@@ -133,7 +135,7 @@
|
||||
t += "<td>[Injector.rate/10] <a href='?src=\ref[Injector];cyclerate=1'>Modify</a></td>"
|
||||
t += "<td>[Injector.fuel_usage*100]% <a href='?src=\ref[Injector];fuel_usage=1'>Modify</a></td>"
|
||||
t += "<td>[Injector.owned_assembly_port ? "[Injector.owned_assembly_port.cur_assembly ? "<font color=green>Loaded</font>": "<font color=blue>Empty</font>"]" : "<font color=red>Disconnected</font>" ]</td>"
|
||||
t += "<td>[Injector.owned_assembly_port && Injector.owned_assembly_port.cur_assembly ? "[Injector.owned_assembly_port.cur_assembly.amount_depleted*100]%" : ""]</td>"
|
||||
t += "<td>[Injector.owned_assembly_port && Injector.owned_assembly_port.cur_assembly ? "[100 - Injector.owned_assembly_port.cur_assembly.amount_depleted*100]%" : ""]</td>"
|
||||
t += "</tr>"
|
||||
t += "</table>"
|
||||
t += "<A href='?src=\ref[src];close=1'>Close</A><BR>"
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
/obj/machinery/rust/fuel_injector
|
||||
name = "Fuel Injector"
|
||||
icon = 'fuel_injector.dmi'
|
||||
icon_state = "injector-on"
|
||||
icon_state = "injector0"
|
||||
anchored = 1
|
||||
density = 0
|
||||
density = 1
|
||||
var/obj/machinery/rust/fuel_assembly_port/owned_assembly_port
|
||||
//var/list/stageone_assemblyports
|
||||
//var/list/stagetwo_assemblyports
|
||||
@@ -18,8 +18,14 @@
|
||||
var/stage = "One"
|
||||
var/targetting_field = 0
|
||||
layer = 4
|
||||
//
|
||||
req_access = list(access_engine)
|
||||
//
|
||||
use_power = 1
|
||||
idle_power_usage = 10
|
||||
active_power_usage = 300
|
||||
|
||||
//transfer fuel wirelessly for now :P
|
||||
//fuel assembly should be embedded into the wall behind the injector
|
||||
New()
|
||||
..()
|
||||
name = "Stage [stage] Fuel Injector"
|
||||
@@ -47,8 +53,106 @@
|
||||
owned_assembly_port = port
|
||||
//
|
||||
|
||||
Topic(href, href_list)
|
||||
..()
|
||||
if( href_list["close"] )
|
||||
usr << browse(null, "window=fuel_injector")
|
||||
usr.machine = null
|
||||
return
|
||||
if( href_list["begin_injecting"] )
|
||||
BeginInjecting()
|
||||
updateDialog()
|
||||
return
|
||||
if( href_list["end_injecting"] )
|
||||
StopInjecting()
|
||||
updateDialog()
|
||||
return
|
||||
if( href_list["cyclerate"] )
|
||||
var/new_rate = text2num(input("Enter new injection rate (0.1 - 10 sec)", "Modifying injection rate", rate/10))
|
||||
if(!new_rate)
|
||||
usr << "\red That's not a valid number."
|
||||
return
|
||||
new_rate = min(new_rate,0.1)
|
||||
new_rate = max(new_rate,10)
|
||||
rate = new_rate * 10
|
||||
updateDialog()
|
||||
return
|
||||
if( href_list["fuel_usage"] )
|
||||
var/new_rate = text2num(input("Enter new fuel usage (1 - 100%)", "Modifying fuel usage", rate/10))
|
||||
if(!new_rate)
|
||||
usr << "\red That's not a valid number."
|
||||
return
|
||||
new_rate = min(new_rate,0.1)
|
||||
new_rate = max(new_rate,10)
|
||||
rate = new_rate * 10
|
||||
updateDialog()
|
||||
return
|
||||
|
||||
attack_ai(mob/user)
|
||||
attack_hand(user)
|
||||
|
||||
attack_hand(mob/user)
|
||||
add_fingerprint(user)
|
||||
/*if(stat & (BROKEN|NOPOWER))
|
||||
return*/
|
||||
interact(user)
|
||||
|
||||
proc
|
||||
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=fuel_injector")
|
||||
return
|
||||
var/t = "<B>Reactor Core Fuel Injector</B><BR>"
|
||||
t += "<b>Stage:</b> <font color=blue>[stage]</font><br>"
|
||||
t += "<b>Status:</b> [injecting ? "<font color=green>Active</font> <a href='?src=\ref[src];end_injecting=1'>\[Disable\]</a>" : "<font color=blue>Standby</font> <a href='?src=\ref[src];begin_injecting=1'>\[Enable\]</a>"]<br>"
|
||||
t += "<b>Interval (sec):</b> <font color=blue>[rate/10]</font> <a href='?src=\ref[src];cyclerate=1'>\[Modify\]</a>"
|
||||
t += "<b>Fuel usage:</b> [fuel_usage*100]% <a href='?src=\ref[src];fuel_usage=1'>\[Modify\]</a>"
|
||||
/*
|
||||
var/t = "<B>Reactor Core Fuel Control</B><BR>"
|
||||
t += "Current fuel injection stage: [active_stage]<br>"
|
||||
if(active_stage == "Cooling")
|
||||
//t += "<a href='?src=\ref[src];restart=1;'>Restart injection cycle</a><br>"
|
||||
t += "----<br>"
|
||||
else
|
||||
t += "<a href='?src=\ref[src];cooldown=1;'>Enter cooldown phase</a><br>"
|
||||
t += "Fuel depletion announcement: "
|
||||
t += "[announce_fueldepletion ? "<a href='?src=\ref[src];disable_fueldepletion=1'>Disable</a>" : "<b>Disabled</b>"] "
|
||||
t += "[announce_fueldepletion == 1 ? "<b>Announcing</b>" : "<a href='?src=\ref[src];announce_fueldepletion=1'>Announce</a>"] "
|
||||
t += "[announce_fueldepletion == 2 ? "<b>Broadcasting</b>" : "<a href='?src=\ref[src];broadcast_fueldepletion=1'>Broadcast</a>"]<br>"
|
||||
t += "Stage progression announcement: "
|
||||
t += "[announce_stageprogression ? "<a href='?src=\ref[src];disable_stageprogression=1'>Disable</a>" : "<b>Disabled</b>"] "
|
||||
t += "[announce_stageprogression == 1 ? "<b>Announcing</b>" : "<a href='?src=\ref[src];announce_stageprogression=1'>Announce</a>"] "
|
||||
t += "[announce_stageprogression == 2 ? "<b>Broadcasting</b>" : "<a href='?src=\ref[src];broadcast_stageprogression=1'>Broadcast</a>"] "
|
||||
t += "<hr>"
|
||||
t += "<table border=1><tr>"
|
||||
t += "<td><b>Injector Status</b></td>"
|
||||
t += "<td><b>Injection interval (sec)</b></td>"
|
||||
t += "<td><b>Assembly consumption per injection</b></td>"
|
||||
t += "<td><b>Fuel Assembly Port</b></td>"
|
||||
t += "<td><b>Assembly depletion percentage</b></td>"
|
||||
t += "</tr>"
|
||||
for(var/stage in fuel_injectors)
|
||||
var/list/cur_stage = fuel_injectors[stage]
|
||||
t += "<tr><td colspan=5><b>Fuel Injection Stage:</b> <font color=blue>[stage]</font> [active_stage == stage ? "<font color=green> (Currently active)</font>" : "<a href='?src=\ref[src];beginstage=[stage]'>Activate</a>"]</td></tr>"
|
||||
for(var/obj/machinery/rust/fuel_injector/Injector in cur_stage)
|
||||
t += "<tr>"
|
||||
t += "<td>[Injector.on && Injector.remote_enabled ? "<font color=green>Operational</font>" : "<font color=red>Unresponsive</font>"]</td>"
|
||||
t += "<td>[Injector.rate/10] <a href='?src=\ref[Injector];cyclerate=1'>Modify</a></td>"
|
||||
t += "<td>[Injector.fuel_usage*100]% <a href='?src=\ref[Injector];fuel_usage=1'>Modify</a></td>"
|
||||
t += "<td>[Injector.owned_assembly_port ? "[Injector.owned_assembly_port.cur_assembly ? "<font color=green>Loaded</font>": "<font color=blue>Empty</font>"]" : "<font color=red>Disconnected</font>" ]</td>"
|
||||
t += "<td>[Injector.owned_assembly_port && Injector.owned_assembly_port.cur_assembly ? "[100 - Injector.owned_assembly_port.cur_assembly.amount_depleted*100]%" : ""]</td>"
|
||||
t += "</tr>"
|
||||
t += "</table>"
|
||||
*/
|
||||
t += "<A href='?src=\ref[src];close=1'>Close</A><BR>"
|
||||
user << browse(t, "window=fuel_injector;size=500x800")
|
||||
user.machine = src
|
||||
|
||||
proc/BeginInjecting()
|
||||
if(!injecting)
|
||||
if(!injecting && owned_assembly_port && owned_assembly_port.cur_assembly)
|
||||
icon_state = "injector1"
|
||||
injecting = 1
|
||||
spawn(rate)
|
||||
Inject()
|
||||
@@ -58,6 +162,7 @@
|
||||
proc/StopInjecting()
|
||||
if(injecting)
|
||||
injecting = 0
|
||||
icon_state = "injector0"
|
||||
return 1
|
||||
return 0
|
||||
|
||||
@@ -96,6 +201,8 @@
|
||||
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
|
||||
flick("injector-emitting",src)
|
||||
use_power(fuel_usage * 10000 + 100) //0.0001
|
||||
if(injecting)
|
||||
spawn(rate)
|
||||
Inject()
|
||||
@@ -104,4 +211,5 @@
|
||||
|
||||
process()
|
||||
..()
|
||||
updateDialog()
|
||||
//
|
||||
|
||||
|
Before Width: | Height: | Size: 733 B After Width: | Height: | Size: 3.8 KiB |
@@ -1,7 +1,6 @@
|
||||
|
||||
//high frequency photon (laser beam)
|
||||
/obj/item/projectile/beam/ehf_beam
|
||||
var/frequency = 5
|
||||
|
||||
/obj/machinery/rust/gyrotron
|
||||
icon = 'gyrotron.dmi'
|
||||
@@ -10,12 +9,18 @@
|
||||
anchored = 1
|
||||
density = 0
|
||||
layer = 4
|
||||
var/frequency = 20
|
||||
var/frequency = 1
|
||||
var/emitting = 0
|
||||
var/rate = 10
|
||||
var/mega_energy = 0.001
|
||||
var/on = 1
|
||||
var/remoteenabled = 1
|
||||
//
|
||||
req_access = list(access_engine)
|
||||
//
|
||||
use_power = 1
|
||||
idle_power_usage = 10
|
||||
active_power_usage = 300
|
||||
|
||||
New()
|
||||
..()
|
||||
@@ -30,7 +35,7 @@
|
||||
return
|
||||
if( href_list["modifypower"] )
|
||||
var/new_val = text2num(input("Enter new emission power level (0.001 - 0.01)", "Modifying power level (MeV)", mega_energy))
|
||||
if(!new_val || new_val > 0.01 || new_val < 0.001)
|
||||
if(!new_val)
|
||||
usr << "\red That's not a valid number."
|
||||
return
|
||||
new_val = min(new_val,0.01)
|
||||
@@ -41,7 +46,7 @@
|
||||
return
|
||||
if( href_list["modifyrate"] )
|
||||
var/new_val = text2num(input("Enter new emission rate (1 - 10)", "Modifying emission rate (sec)", rate))
|
||||
if(!new_val || new_val > 10 || new_val < 1)
|
||||
if(!new_val)
|
||||
usr << "\red That's not a valid number."
|
||||
return
|
||||
new_val = min(new_val,1)
|
||||
@@ -51,12 +56,12 @@
|
||||
comp.updateDialog()
|
||||
return
|
||||
if( href_list["modifyfreq"] )
|
||||
var/new_val = text2num(input("Enter new emission frequency (1 - 500)", "Modifying emission frequency (GHz)", frequency))
|
||||
if(!new_val || new_val > 500 || new_val < 1)
|
||||
var/new_val = text2num(input("Enter new emission frequency (1 - 50000)", "Modifying emission frequency (GHz)", frequency))
|
||||
if(!new_val)
|
||||
usr << "\red That's not a valid number."
|
||||
return
|
||||
new_val = min(new_val,1)
|
||||
new_val = max(new_val,500)
|
||||
new_val = max(new_val,50000)
|
||||
frequency = new_val
|
||||
for(var/obj/machinery/computer/rust/gyrotron_controller/comp in range(25))
|
||||
comp.updateDialog()
|
||||
@@ -86,10 +91,12 @@
|
||||
|
||||
proc/Emit()
|
||||
var/obj/item/projectile/beam/ehf_beam/A = new ( src.loc )
|
||||
A.icon_state = "u_laser"
|
||||
A.frequency = frequency
|
||||
A.damage = mega_energy * 600
|
||||
A.damage = mega_energy * 500
|
||||
//
|
||||
A.icon_state = "emitter"
|
||||
playsound(src.loc, 'emitter.ogg', 25, 1)
|
||||
use_power(100 * mega_energy + 500)
|
||||
/*if(prob(35))
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(5, 1, src)
|
||||
@@ -110,7 +117,8 @@
|
||||
else // Any other
|
||||
A.yo = -20
|
||||
A.xo = 0
|
||||
A.process()
|
||||
A.fired()
|
||||
//
|
||||
flick("emitter-active",src)
|
||||
if(emitting)
|
||||
spawn(rate)
|
||||
|
||||
@@ -26,13 +26,6 @@
|
||||
return 1
|
||||
return 0
|
||||
|
||||
proc/AddEnergy(var/energy, var/mega_energy)
|
||||
if(parent && parent.size >= mysize)
|
||||
parent.energy += energy
|
||||
parent.mega_energy += mega_energy
|
||||
return 1
|
||||
return 0
|
||||
|
||||
proc/UpdateSize()
|
||||
if(parent.size >= mysize)
|
||||
density = 1
|
||||
@@ -44,8 +37,9 @@
|
||||
//invisibility = 101
|
||||
|
||||
bullet_act(var/obj/item/projectile/Proj)
|
||||
if(Proj.flag != "bullet")
|
||||
AddEnergy(0, Proj.damage / 600)
|
||||
if(Proj.flag != "bullet" && parent)
|
||||
var/obj/item/projectile/beam/laserbeam = Proj
|
||||
parent.AddEnergy(0, laserbeam.damage / 5000, laserbeam.frequency)
|
||||
return 0
|
||||
|
||||
process()
|
||||
|
||||
131
code/WorkInProgress/Cael_Aislinn/Supermatter/Laser2.dm
Normal file
@@ -0,0 +1,131 @@
|
||||
//mostly replaced these with emitter code
|
||||
//they're functionally identical
|
||||
|
||||
/obj/machinery/engine/laser
|
||||
name = "Zero-point laser"
|
||||
desc = "A super-powerful laser"
|
||||
var/visible = 1
|
||||
var/state = 1.0
|
||||
var/obj/beam/e_beam/first
|
||||
var/power = 500
|
||||
icon = 'engine.dmi'
|
||||
icon_state = "laser"
|
||||
anchored = 1
|
||||
var/id
|
||||
var/on = 0
|
||||
var/freq = 50000
|
||||
var/phase = 0
|
||||
var/phase_variance = 0
|
||||
|
||||
/obj/machinery/engine/laser/process()
|
||||
if(on)
|
||||
if(!first)
|
||||
src.first = new /obj/beam/e_beam(src.loc)
|
||||
src.first.master = src
|
||||
src.first.dir = src.dir
|
||||
src.first.power = src.power
|
||||
src.first.freq = src.freq
|
||||
src.first.phase = src.phase
|
||||
src.first.phase_variance = src.phase_variance
|
||||
step(first, dir)
|
||||
if(first)
|
||||
src.first.updatebeam()
|
||||
else
|
||||
src.first.updatebeam()
|
||||
else
|
||||
if(first)
|
||||
del first
|
||||
|
||||
/obj/machinery/engine/laser/proc/setpower(var/powera)
|
||||
src.power = powera
|
||||
if(first)
|
||||
first.setpower(src.power)
|
||||
|
||||
|
||||
/obj/beam/e_beam
|
||||
name = "Laser beam"
|
||||
icon = 'projectiles.dmi'
|
||||
icon_state = "u_laser"
|
||||
var/obj/machinery/engine/laser/master = null
|
||||
var/obj/beam/e_beam/next = null
|
||||
var/power
|
||||
var/freq = 50000
|
||||
var/phase = 0
|
||||
var/phase_variance = 0
|
||||
anchored = 1
|
||||
|
||||
/obj/beam/e_beam/New()
|
||||
ul_SetLuminosity(1, 1, 4)
|
||||
|
||||
/obj/beam/e_beam/proc/updatebeam()
|
||||
if(!next)
|
||||
if(get_step(src.loc,src.dir))
|
||||
var/obj/beam/e_beam/e = new /obj/beam/e_beam(src.loc)
|
||||
e.dir = src.dir
|
||||
src.next = e
|
||||
e.master = src.master
|
||||
e.power = src.power
|
||||
e.phase = src.phase
|
||||
src.phase+=src.phase_variance
|
||||
e.freq = src.freq
|
||||
e.phase_variance = src.phase_variance
|
||||
if(src.loc.density == 0)
|
||||
for(var/atom/o in src.loc.contents)
|
||||
if(o.density || o == src.master || (ismob(o) && !istype(o, /mob/dead)) )
|
||||
o.laser_act(src)
|
||||
del src
|
||||
return
|
||||
else
|
||||
src.loc.laser_act(src)
|
||||
del e
|
||||
return
|
||||
step(e,e.dir)
|
||||
if(e)
|
||||
e.updatebeam()
|
||||
else
|
||||
next.updatebeam()
|
||||
|
||||
/atom/proc/laser_act(var/obj/beam/e_beam/b)
|
||||
return
|
||||
|
||||
/mob/living/carbon/laser_act(var/obj/beam/e_beam/b)
|
||||
for(var/t in organs)
|
||||
var/datum/organ/external/affecting = organs["[t]"]
|
||||
if (affecting.take_damage(0, b.power/400,0,0))
|
||||
UpdateDamageIcon()
|
||||
else
|
||||
UpdateDamage()
|
||||
|
||||
/obj/beam/e_beam/Bump(atom/Obstacle)
|
||||
Obstacle.laser_act(src)
|
||||
del(src)
|
||||
return
|
||||
|
||||
|
||||
/obj/beam/e_beam/proc/setpower(var/powera)
|
||||
src.power = powera
|
||||
if(src.next)
|
||||
src.next.setpower(powera)
|
||||
|
||||
/obj/beam/e_beam/Bumped()
|
||||
src.hit()
|
||||
return
|
||||
|
||||
/obj/beam/e_beam/HasEntered(atom/movable/AM as mob|obj)
|
||||
if (istype(AM, /obj/beam))
|
||||
return
|
||||
spawn( 0 )
|
||||
AM.laser_act(src)
|
||||
src.hit()
|
||||
return
|
||||
return
|
||||
|
||||
/obj/beam/e_beam/Del()
|
||||
if(next)
|
||||
del(next)
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/beam/e_beam/proc/hit()
|
||||
del src
|
||||
return
|
||||
132
code/WorkInProgress/Cael_Aislinn/Supermatter/LaserComputer.dm
Normal file
@@ -0,0 +1,132 @@
|
||||
//The laser control computer
|
||||
//Used to control the lasers
|
||||
/obj/machinery/computer/lasercon
|
||||
name = "Laser control computer"
|
||||
var/list/lasers = new/list
|
||||
icon_state = "atmos"
|
||||
var/id
|
||||
//var/advanced = 0
|
||||
|
||||
/obj/machinery/computer/lasercon
|
||||
New()
|
||||
spawn(1)
|
||||
for(var/obj/machinery/emitter/zero_point_laser/las in world)
|
||||
if(las.id == src.id)
|
||||
lasers += las
|
||||
|
||||
attack_hand(mob/user)
|
||||
add_fingerprint(user)
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
interact(user)
|
||||
|
||||
attack_ai(mob/user)
|
||||
attack_hand(user)
|
||||
|
||||
process()
|
||||
..()
|
||||
updateDialog()
|
||||
|
||||
proc
|
||||
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=laser_control")
|
||||
return
|
||||
var/t = "<TT><B>Laser status monitor</B><HR>"
|
||||
for(var/obj/machinery/emitter/zero_point_laser/laser in lasers)
|
||||
t += "Zero Point Laser<br>"
|
||||
t += "Power level: <A href = '?src=\ref[laser];input=-0.005'>-</A> <A href = '?src=\ref[laser];input=-0.001'>-</A> <A href = '?src=\ref[laser];input=-0.0005'>-</A> <A href = '?src=\ref[laser];input=-0.0001'>-</A> [laser.mega_energy]MeV <A href = '?src=\ref[laser];input=0.0001'>+</A> <A href = '?src=\ref[laser];input=0.0005'>+</A> <A href = '?src=\ref[laser];input=0.001'>+</A> <A href = '?src=\ref[laser];input=0.005'>+</A><BR>"
|
||||
t += "Frequency: <A href = '?src=\ref[laser];freq=-10000'>-</A> <A href = '?src=\ref[laser];freq=-1000'>-</A> [laser.freq] <A href = '?src=\ref[laser];freq=1000'>+</A> <A href = '?src=\ref[laser];freq=10000'>+</A><BR>"
|
||||
t += "Output: [laser.active ? "<B>Online</B> <A href = '?src=\ref[laser];online=1'>Offline</A>" : "<A href = '?src=\ref[laser];online=1'>Online</A> <B>Offline</B> "]<BR>"
|
||||
t += "<hr>"
|
||||
t += "<A href='?src=\ref[src];close=1'>Close</A><BR>"
|
||||
user << browse(t, "window=laser_control;size=500x800")
|
||||
user.machine = src
|
||||
|
||||
/*
|
||||
/obj/machinery/computer/lasercon/proc/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=powcomp")
|
||||
return
|
||||
|
||||
|
||||
user.machine = src
|
||||
var/t = "<TT><B>Laser status monitor</B><HR>"
|
||||
|
||||
var/obj/machinery/engine/laser/laser = src.laser[1]
|
||||
|
||||
if(!laser)
|
||||
t += "\red No laser found"
|
||||
else
|
||||
|
||||
|
||||
t += "Power level: <A href = '?src=\ref[src];input=-4'>-</A> <A href = '?src=\ref[src];input=-3'>-</A> <A href = '?src=\ref[src];input=-2'>-</A> <A href = '?src=\ref[src];input=-1'>-</A> [add_lspace(laser.power,5)] <A href = '?src=\ref[src];input=1'>+</A> <A href = '?src=\ref[src];input=2'>+</A> <A href = '?src=\ref[src];input=3'>+</A> <A href = '?src=\ref[src];input=4'>+</A><BR>"
|
||||
if(advanced)
|
||||
t += "Frequency: <A href = '?src=\ref[src];freq=-10000'>-</A> <A href = '?src=\ref[src];freq=-1000'>-</A> [add_lspace(laser.freq,5)] <A href = '?src=\ref[src];freq=1000'>+</A> <A href = '?src=\ref[src];freq=10000'>+</A><BR>"
|
||||
|
||||
t += "Output: [laser.on ? "<B>Online</B> <A href = '?src=\ref[src];online=1'>Offline</A>" : "<A href = '?src=\ref[src];online=1'>Online</A> <B>Offline</B> "]<BR>"
|
||||
|
||||
t += "<BR><HR><A href='?src=\ref[src];close=1'>Close</A></TT>"
|
||||
|
||||
user << browse(t, "window=lascomp;size=420x700")
|
||||
onclose(user, "lascomp")
|
||||
*/
|
||||
|
||||
/obj/machinery/computer/lasercon/Topic(href, href_list)
|
||||
..()
|
||||
if( href_list["close"] )
|
||||
usr << browse(null, "window=laser_control")
|
||||
usr.machine = null
|
||||
return
|
||||
|
||||
else if( href_list["input"] )
|
||||
var/i = text2num(href_list["input"])
|
||||
var/d = i
|
||||
for(var/obj/machinery/emitter/zero_point_laser/laser in lasers)
|
||||
var/new_power = laser.mega_energy + d
|
||||
new_power = max(new_power,0.0001) //lowest possible value
|
||||
new_power = min(new_power,0.01) //highest possible value
|
||||
laser.mega_energy = new_power
|
||||
//
|
||||
src.updateDialog()
|
||||
else if( href_list["online"] )
|
||||
var/obj/machinery/emitter/zero_point_laser/laser = href_list["online"]
|
||||
laser.active = !laser.active
|
||||
src.updateDialog()
|
||||
else if( href_list["freq"] )
|
||||
var/amt = text2num(href_list["freq"])
|
||||
for(var/obj/machinery/emitter/zero_point_laser/laser in lasers)
|
||||
var/new_freq = laser.frequency + amt
|
||||
new_freq = max(new_freq,1) //lowest possible value
|
||||
new_freq = min(new_freq,20000) //highest possible value
|
||||
laser.frequency = new_freq
|
||||
//
|
||||
src.updateDialog()
|
||||
|
||||
/*
|
||||
/obj/machinery/computer/lasercon/process()
|
||||
if(!(stat & (NOPOWER|BROKEN)) )
|
||||
use_power(250)
|
||||
|
||||
//src.updateDialog()
|
||||
*/
|
||||
|
||||
/*
|
||||
/obj/machinery/computer/lasercon/power_change()
|
||||
|
||||
if(stat & BROKEN)
|
||||
icon_state = "broken"
|
||||
else
|
||||
if( powered() )
|
||||
icon_state = initial(icon_state)
|
||||
stat &= ~NOPOWER
|
||||
else
|
||||
spawn(rand(0, 15))
|
||||
src.icon_state = "c_unpowered"
|
||||
stat |= NOPOWER
|
||||
*/
|
||||
161
code/WorkInProgress/Cael_Aislinn/Supermatter/SuperMatter.dm
Normal file
@@ -0,0 +1,161 @@
|
||||
//ported from old bs12 by Cael
|
||||
//some modifications so that it's more stable, and it's primary purpose is producing plasma instead of power
|
||||
//frequency is 1-1e9
|
||||
|
||||
#define NITROGEN_RETARDATION_FACTOR 4 //Higher == N2 slows reaction more
|
||||
#define THERMAL_RELEASE_MODIFIER 50 //Higher == less heat released during reaction
|
||||
#define PLASMA_RELEASE_MODIFIER 750 //Higher == less plasma released by reaction
|
||||
#define OXYGEN_RELEASE_MODIFIER 1500 //Higher == less oxygen released at high temperature/power
|
||||
#define REACTION_POWER_MODIFIER 1.1 //Higher == more overall power
|
||||
|
||||
/obj/machinery/power/supermatter
|
||||
name = "Supermatter"
|
||||
desc = "A strangely translucent and iridescent crystal. \red You get headaches just from looking at it."
|
||||
icon = 'engine.dmi'
|
||||
icon_state = "darkmatter"
|
||||
density = 1
|
||||
anchored = 1
|
||||
var/mega_energy = 0
|
||||
|
||||
var/gasefficency = 0.25
|
||||
|
||||
var/det = 0
|
||||
var/previousdet = 0
|
||||
var/const/explosiondet = 3500
|
||||
var/frequency = 50000
|
||||
|
||||
var/const/warningtime = 50 // Make the CORE OVERLOAD message repeat only every aprox. ?? seconds
|
||||
var/lastwarning = 0 // Time in 1/10th of seconds since the last sent warning
|
||||
|
||||
New()
|
||||
..()
|
||||
spawn(1)
|
||||
sd_SetLuminosity(4)
|
||||
|
||||
bullet_act(var/obj/item/projectile/Proj)
|
||||
if(Proj.flag != "bullet")
|
||||
var/obj/item/projectile/beam/laserbeam = Proj
|
||||
var/energy_loss_ratio = abs(laserbeam.frequency - frequency) / 1e9
|
||||
var/energy_delta = laserbeam.damage / 600
|
||||
mega_energy += energy_delta - energy_delta * energy_loss_ratio
|
||||
return 0
|
||||
|
||||
/*
|
||||
/obj/machinery/engine/klaxon
|
||||
name = "Emergency Klaxon"
|
||||
icon = 'engine.dmi'
|
||||
icon_state = "darkmatter"
|
||||
density = 1
|
||||
anchored = 1
|
||||
var/obj/machinery/engine/supermatter/sup
|
||||
|
||||
/obj/machinery/engine/klaxon/process()
|
||||
if(!sup)
|
||||
for(var/obj/machinery/engine/supermatter/T in world)
|
||||
sup = T
|
||||
break
|
||||
if(sup.det >= 1)
|
||||
return
|
||||
*/
|
||||
|
||||
//a lot of these variables are pretty hacked, so dont rely on the comments
|
||||
/obj/machinery/power/supermatter/process()
|
||||
|
||||
var/datum/gas_mixture/env = loc.return_air()
|
||||
|
||||
//Remove gas from surrounding area
|
||||
var/transfer_moles = gasefficency * env.total_moles()
|
||||
var/datum/gas_mixture/removed = env.remove(transfer_moles)
|
||||
|
||||
//core can no longer spontaneously explode
|
||||
/*
|
||||
previousdet = det
|
||||
det += (removed.temperature - 1000) / 150
|
||||
det = max(det, 0)
|
||||
|
||||
if(det > 0 && removed.temperature > 1000) // while the core is still damaged and it's still worth noting its status
|
||||
if((world.realtime - lastwarning) / 10 >= warningtime)
|
||||
lastwarning = world.realtime
|
||||
if(explosiondet - det <= 300)
|
||||
radioalert("CORE EXPLOSION IMMINENT","Core control computer")
|
||||
else if(det >= previousdet) // The damage is still going up
|
||||
radioalert("CORE OVERLOAD","Core control computer")
|
||||
else // Phew, we're safe
|
||||
radioalert("Core returning to safe operating levels.","Core control computer")
|
||||
|
||||
if(det > explosiondet)
|
||||
roundinfo.core = 1
|
||||
//proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, force = 0)
|
||||
explosion(src.loc,8,15,20,30,1)
|
||||
det = 0
|
||||
|
||||
if (!removed)
|
||||
return 1
|
||||
*/
|
||||
|
||||
//var/power = max(round((removed.temperature - T0C) / 20), 0) //Total laser power plus an overload factor
|
||||
|
||||
//Get the collective laser power
|
||||
/*
|
||||
for(var/dir in cardinal)
|
||||
var/turf/T = get_step(L, dir)
|
||||
for(var/obj/beam/e_beam/item in T)
|
||||
power += item.power
|
||||
*/
|
||||
|
||||
/*
|
||||
#define NITROGEN_RETARDATION_FACTOR 4 //Higher == N2 slows reaction more
|
||||
#define THERMAL_RELEASE_MODIFIER 50 //Higher == less heat released during reaction
|
||||
#define PLASMA_RELEASE_MODIFIER 750 //Higher == less plasma released by reaction
|
||||
#define OXYGEN_RELEASE_MODIFIER 1500 //Higher == less oxygen released at high temperature/power
|
||||
#define REACTION_POWER_MODIFIER 0.5 //Higher == more overall power
|
||||
*/
|
||||
|
||||
//100% oxygen atmosphere = 100% plasma production
|
||||
//100% nitrogen atmosphere = 0% plasma production
|
||||
//anything else is halfway in between; an atmosphere with no nitrogen or oxygen will still be at 50% (but steadily rise as more oxygen is made)
|
||||
var/total_moles = removed.total_moles()
|
||||
var/retardation_factor = 0.5
|
||||
if(total_moles)
|
||||
retardation_factor += removed.oxygen / (total_moles * 2) - removed.nitrogen / (total_moles * 2)
|
||||
else
|
||||
retardation_factor -= 0.25
|
||||
|
||||
var/device_energy = mega_energy * REACTION_POWER_MODIFIER //device energy is provided by the zero point lasers
|
||||
device_energy *= removed.temperature / T0C //environmental heat directly affects device energy
|
||||
device_energy = max(device_energy,0)
|
||||
|
||||
//To figure out how much temperature to add each tick, consider that at one atmosphere's worth
|
||||
//of pure oxygen, with all four lasers firing at standard energy and no N2 present, at room temperature
|
||||
//that the device energy is around 2140. At that stage, we don't want too much heat to be put out
|
||||
//Since the core is effectively "cold"
|
||||
|
||||
//Also keep in mind we are only adding this temperature to (efficiency)% of the one tile the rock
|
||||
//is on. An increase of 4*C @ 25% efficiency here results in an increase of 1*C / (#tilesincore) overall.
|
||||
removed.temperature += max((device_energy / THERMAL_RELEASE_MODIFIER), 0)
|
||||
|
||||
//Calculate how much gas to release
|
||||
var/produced = device_energy * PLASMA_RELEASE_MODIFIER * retardation_factor
|
||||
removed.toxins += produced
|
||||
//
|
||||
produced = device_energy * OXYGEN_RELEASE_MODIFIER * retardation_factor
|
||||
removed.oxygen += produced
|
||||
//
|
||||
mega_energy = 0
|
||||
|
||||
//instead of producing oxygen, consume it to produce plasma,
|
||||
//use an amount proportional to the plasma produced
|
||||
//removed.oxygen -= produced
|
||||
//removed.oxygen += max(round((device_energy + removed.temperature - T0C) / OXYGEN_RELEASE_MODIFIER), 0)
|
||||
|
||||
env.merge(removed)
|
||||
|
||||
//talk to sky re hallucinations, because i'm lazy like that
|
||||
/*for(var/mob/living/l in view(src, 6)) // you have to be seeing the core to get hallucinations
|
||||
if(prob(10) && !(l.glasses && istype(l.glasses, /obj/item/clothing/glasses/meson)))
|
||||
l.hallucination = 50
|
||||
|
||||
for(var/mob/living/l in view(src,3))
|
||||
l.bruteloss += 50
|
||||
l.updatehealth()*/
|
||||
return 1
|
||||
@@ -0,0 +1,55 @@
|
||||
//new supermatter lasers
|
||||
|
||||
/obj/machinery/emitter/zero_point_laser
|
||||
name = "Zero-point laser"
|
||||
desc = "A super-powerful laser"
|
||||
icon = 'engine.dmi'
|
||||
icon_state = "laser"
|
||||
mega_energy = 0.0001
|
||||
|
||||
var/freq = 50000
|
||||
var/id
|
||||
|
||||
Topic(href, href_list)
|
||||
..()
|
||||
if( href_list["input"] )
|
||||
var/i = text2num(href_list["input"])
|
||||
var/d = i
|
||||
var/new_power = mega_energy + d
|
||||
new_power = max(new_power,0.0001) //lowest possible value
|
||||
new_power = min(new_power,0.01) //highest possible value
|
||||
mega_energy = new_power
|
||||
//
|
||||
for(var/obj/machinery/computer/lasercon/comp in world)
|
||||
if(comp.id == src.id)
|
||||
comp.updateDialog()
|
||||
else if( href_list["online"] )
|
||||
active = !active
|
||||
//
|
||||
for(var/obj/machinery/computer/lasercon/comp in world)
|
||||
if(comp.id == src.id)
|
||||
comp.updateDialog()
|
||||
else if( href_list["freq"] )
|
||||
var/amt = text2num(href_list["freq"])
|
||||
var/new_freq = frequency + amt
|
||||
new_freq = max(new_freq,1) //lowest possible value
|
||||
new_freq = min(new_freq,20000) //highest possible value
|
||||
frequency = new_freq
|
||||
//
|
||||
for(var/obj/machinery/computer/lasercon/comp in world)
|
||||
if(comp.id == src.id)
|
||||
comp.updateDialog()
|
||||
|
||||
update_icon()
|
||||
if (active && !(stat & (NOPOWER|BROKEN)))
|
||||
icon_state = "laser"//"emitter_+a"
|
||||
else
|
||||
icon_state = "laser"//"emitter"
|
||||
|
||||
process()
|
||||
var/curstate = active
|
||||
..()
|
||||
if(active != curstate)
|
||||
for(var/obj/machinery/computer/lasercon/comp in world)
|
||||
if(comp.id == src.id)
|
||||
comp.updateDialog()
|
||||
@@ -1147,6 +1147,10 @@ proc/process_ghost_teleport_locs()
|
||||
name = "Server Room"
|
||||
icon_state = "server"
|
||||
|
||||
/area/toxins/supermatter
|
||||
name = "Supermatter Laboratory"
|
||||
icon_state = "supermatter"
|
||||
|
||||
//Storage
|
||||
|
||||
/area/storage/tools
|
||||
|
||||
@@ -55,18 +55,16 @@
|
||||
hot_air.temperature = hot_air.temperature - energy_transfer/hot_air_heat_capacity
|
||||
cold_air.temperature = cold_air.temperature + heat/cold_air_heat_capacity
|
||||
|
||||
world << "POWER: [lastgen] W generated at [efficiency*100]% efficiency and sinks sizes [cold_air_heat_capacity], [hot_air_heat_capacity]"
|
||||
|
||||
if(input1.network)
|
||||
input1.network.update = 1
|
||||
|
||||
if(input2.network)
|
||||
input2.network.update = 1
|
||||
|
||||
add_avail(lastgen)
|
||||
add_avail(lastgen/5)
|
||||
// update icon overlays only if displayed level has changed
|
||||
|
||||
var/genlev = max(0, min( round(11*lastgen / 100000), 11))
|
||||
var/genlev = max(0, min( round(11*lastgen / 500000), 11))
|
||||
if(genlev != lastgenlev)
|
||||
lastgenlev = genlev
|
||||
updateicon()
|
||||
|
||||
@@ -12,12 +12,15 @@
|
||||
active_power_usage = 300
|
||||
|
||||
var
|
||||
frequency = 1
|
||||
active = 0
|
||||
fire_delay = 100
|
||||
last_shot = 0
|
||||
shot_number = 0
|
||||
state = 0
|
||||
locked = 0
|
||||
energy = 0
|
||||
mega_energy = 0
|
||||
|
||||
|
||||
verb/rotate()
|
||||
|
||||
@@ -7,8 +7,9 @@
|
||||
density = 1
|
||||
var
|
||||
movement_range = 10
|
||||
energy = 10 //energy in eV?
|
||||
energy = 10 //energy in eV
|
||||
mega_energy = 0 //energy in MeV
|
||||
frequency = 1
|
||||
ionizing = 0
|
||||
particle_type
|
||||
additional_particles = 0
|
||||
@@ -41,13 +42,15 @@
|
||||
var/obj/machinery/rust/particle_catcher/collided_catcher = A
|
||||
if(particle_type && particle_type != "neutron")
|
||||
if(collided_catcher.AddParticles(particle_type, 1 + additional_particles))
|
||||
collided_catcher.AddEnergy(energy,mega_energy)
|
||||
collided_catcher.parent.AddEnergy(energy,mega_energy)
|
||||
del (src)
|
||||
if( istype(A,/obj/machinery/rust/core) )
|
||||
var/obj/machinery/rust/core/collided_core = A
|
||||
if(particle_type && particle_type != "neutron")
|
||||
if(collided_core.AddParticles(particle_type, 1 + additional_particles))
|
||||
collided_core.AddEnergy(energy,mega_energy)
|
||||
var/energy_loss_ratio = abs(collided_core.owned_field.frequency - frequency) / 1e9
|
||||
collided_core.owned_field.mega_energy += mega_energy - mega_energy * energy_loss_ratio
|
||||
collided_core.owned_field.energy += energy - energy * energy_loss_ratio
|
||||
del (src)
|
||||
return
|
||||
|
||||
|
||||
@@ -111,14 +111,14 @@
|
||||
#define TURBGENG 0.8
|
||||
|
||||
/obj/machinery/power/turbine/process()
|
||||
if(!compressor.starter)
|
||||
return
|
||||
overlays = null
|
||||
if(stat & BROKEN)
|
||||
return
|
||||
if(!compressor)
|
||||
stat |= BROKEN
|
||||
return
|
||||
if(!compressor.starter)
|
||||
return
|
||||
lastgen = ((compressor.rpm / TURBGENQ)**TURBGENG) *TURBGENQ
|
||||
|
||||
add_avail(lastgen)
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
damage_type = BURN
|
||||
flag = "laser"
|
||||
eyeblur = 4
|
||||
var/frequency = 1
|
||||
var/ID = 0
|
||||
var/main = 0
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 614 KiB After Width: | Height: | Size: 632 KiB |
|
Before Width: | Height: | Size: 606 KiB After Width: | Height: | Size: 639 KiB |
|
Before Width: | Height: | Size: 315 KiB After Width: | Height: | Size: 326 KiB |
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |