Reduces main engine power production (#22441)

* engineer gaming

* forgor
This commit is contained in:
SapphicOverload
2024-07-28 18:13:02 -04:00
committed by GitHub
parent 90101a6029
commit a8aa695472
5 changed files with 36 additions and 51 deletions

View File

@@ -3,8 +3,8 @@
#define SOLAR_TRACK_AUTO 2
#define TESLA_HYPERCHARGED_POWER TESLA_DEFAULT_POWER*2
#define TESLA_DEFAULT_POWER 1738260
#define TESLA_MINI_POWER 869130
#define TESLA_DEFAULT_POWER 579420
#define TESLA_MINI_POWER 289710
//Multiplier of all power consumed.
#define POWER_MOD 1

View File

@@ -21,7 +21,7 @@
#define REACTOR_MAX_CRITICALITY 5 //No more criticality than N for now.
#define REACTOR_MAX_FUEL_RODS 5 //Maximum number of fuel rods that can fit in the reactor
#define REACTOR_POWER_FLAVOURISER 1000 //To turn those KWs into something usable
#define REACTOR_POWER_FLAVOURISER 150 //To turn those KWs into something usable
#define REACTOR_PERMEABILITY_FACTOR 500 // How effective permeability-type moderators are
#define REACTOR_CONTROL_FACTOR 250 // How effective control-type moderators are

View File

@@ -5,7 +5,7 @@
// stored_power += (pulse_strength-RAD_COLLECTOR_EFFICIENCY)*RAD_COLLECTOR_COEFFICIENT*(machine_tier+power_bonus)
#define RAD_COLLECTOR_EFFICIENCY 80 // radiation needs to be over this amount to get power
#define RAD_COLLECTOR_COEFFICIENT 100
#define RAD_COLLECTOR_COEFFICIENT 40
#define RAD_COLLECTOR_STORED_OUT 0.1 // (this*100)% of stored power outputted per tick. Doesn't actualy change output total, lower numbers just means collectors output for longer in absence of a source
#define RAD_COLLECTOR_MINING_CONVERSION_RATE 0.000125 //This is gonna need a lot of tweaking to get right. This is the number used to calculate the conversion of watts to research points per process()
#define RAD_COLLECTOR_OUTPUT min(stored_power, (stored_power*RAD_COLLECTOR_STORED_OUT)+1000) //Produces at least 1000 watts if it has more than that stored
@@ -295,7 +295,7 @@
/obj/machinery/power/rad_collector/rad_act(pulse_strength, collectable_radiation)
. = ..()
if(loaded_tank && active && collectable_radiation && pulse_strength > RAD_COLLECTOR_EFFICIENCY)
stored_power += (pulse_strength-RAD_COLLECTOR_EFFICIENCY)*RAD_COLLECTOR_COEFFICIENT*(machine_tier+power_bonus)
stored_power += (pulse_strength-RAD_COLLECTOR_EFFICIENCY)*RAD_COLLECTOR_COEFFICIENT*sqrt(machine_tier+power_bonus)
/obj/machinery/power/rad_collector/update_overlays()
. = ..()

View File

@@ -1,8 +1,12 @@
/// The fraction of stored power that gets sent to the grid every process(). Lower numbers make output more consistent but take more time to ramp up to full production.
#define TESLA_COIL_PROCESS_RATE 0.2
/obj/machinery/power/tesla_coil
name = "tesla coil"
desc = "For the union!"
icon = 'icons/obj/tesla_engine/tesla_coil.dmi'
icon_state = "coil0"
base_icon_state = "coil"
anchored = FALSE
density = TRUE
@@ -18,6 +22,9 @@
var/input_power_multiplier = 0
var/zap_cooldown = 100
/// The amount of power built up in the coil.
var/stored_power = 0
var/datum/techweb/linked_techweb
var/research_points_per_zap = 2 // Research points gained per minute is indirectly buffed by having a lower zap cooldown.
// level 1 coil: 15/m, level coil 2: 20/m, level coil 3: 30/m, level coil 4: 60/m
@@ -38,13 +45,16 @@
input_power_multiplier = 0
zap_cooldown = 100
for(var/obj/item/stock_parts/capacitor/C in component_parts)
input_power_multiplier += C.rating // Each level increases power gain by 100%
input_power_multiplier += sqrt(C.rating) // Each level increases power gain by 100%
zap_cooldown -= (C.rating * 20) // Each level decreases cooldown by 2 seconds
/obj/machinery/power/tesla_coil/examine(mob/user)
. = ..()
if(in_range(user, src) || isobserver(user))
. += "<span class='notice'>The status display reads: Power generation at <b>[input_power_multiplier*100]%</b>.<br>Shock interval at <b>[zap_cooldown*0.1]</b> seconds.<span>"
. += span_notice("The status display reads: \
Power generation at <b>[input_power_multiplier*100]%</b>.<br>\
Shock interval at <b>[zap_cooldown*0.1]</b> seconds.<br>\
Stored power at <b>[display_joules(stored_power)]</b><span>")
/obj/machinery/power/tesla_coil/on_construction()
if(anchored)
@@ -54,16 +64,16 @@
. = ..()
if(. == SUCCESSFUL_UNFASTEN)
if(panel_open)
icon_state = "coil_open[anchored]"
icon_state = "[base_icon_state]_open[anchored]"
else
icon_state = "coil[anchored]"
icon_state = "[base_icon_state][anchored]"
if(anchored)
connect_to_network()
else
disconnect_from_network()
/obj/machinery/power/tesla_coil/attackby(obj/item/W, mob/user, params)
if(default_deconstruction_screwdriver(user, "coil_open[anchored]", "coil[anchored]", W))
if(default_deconstruction_screwdriver(user, "[base_icon_state]_open[anchored]", "[base_icon_state][anchored]", W))
return
if(default_unfasten_wrench(user, W))
@@ -81,8 +91,8 @@
/obj/machinery/power/tesla_coil/tesla_act(power, tesla_flags, shocked_targets, zap_gib = FALSE)
if(anchored && !panel_open)
obj_flags |= BEING_SHOCKED
add_avail((power * (1 - percentage_power_loss))*input_power_multiplier)
flick("coilhit", src)
stored_power += power
flick("[base_icon_state]hit", src)
playsound(src.loc, 'sound/magic/lightningshock.ogg', 100, 1, extrarange = 5)
if(istype(linked_account))
linked_account.adjust_money(money_per_zap)
@@ -91,61 +101,36 @@
addtimer(CALLBACK(src, PROC_REF(reset_shocked)), zap_cooldown)
tesla_buckle_check(power)
else
..()
return ..()
/obj/machinery/power/tesla_coil/process()
if(!powernet)
return
add_avail((stored_power * TESLA_COIL_PROCESS_RATE * (1 - percentage_power_loss)) * input_power_multiplier)
stored_power *= (1 - TESLA_COIL_PROCESS_RATE)
/obj/machinery/power/tesla_coil/proc/zap()
if(!powernet)
return FALSE
var/coeff = (20 - ((input_power_multiplier - 1) * 3))
coeff = max(coeff, 10)
var/power = (powernet.avail/2)
var/power = (powernet.avail / 2)
add_load(power)
playsound(src.loc, 'sound/magic/lightningshock.ogg', 100, 1, extrarange = 5)
tesla_zap(src, 10, power/(coeff/2), tesla_flags)
tesla_buckle_check(power/(coeff/2))
playsound(loc, 'sound/magic/lightningshock.ogg', 100, 1, extrarange = 5)
tesla_zap(src, 10, (stored_power + power) * 2 / coeff, tesla_flags)
tesla_buckle_check((stored_power + power) * 2 / coeff)
// Tesla R&D researcher
/obj/machinery/power/tesla_coil/research
name = "Tesla Corona Analyzer"
desc = "A modified Tesla Coil used to study the effects of Edison's Bane for research."
icon_state = "rpcoil0"
base_icon_state = "rpcoil"
circuit = /obj/item/circuitboard/machine/tesla_coil/research
percentage_power_loss = 0.95 // Research coils lose 95% of the power (converting power to research or something idk)
research_points_per_zap = 6 // level 1 coil: 44/m, level coil 2: 60/m, level coil 3: 90/m, level coil 4: 180/m
money_per_zap = 6
/obj/machinery/power/tesla_coil/research/tesla_act(power, tesla_flags, shocked_targets, zap_gib = FALSE)
if(anchored && !panel_open)
obj_flags |= BEING_SHOCKED
add_avail((power * (1 - percentage_power_loss))*input_power_multiplier)
flick("rpcoilhit", src)
playsound(src.loc, 'sound/magic/lightningshock.ogg', 100, 1, extrarange = 5)
if(istype(linked_account))
linked_account.adjust_money(money_per_zap)
if(istype(linked_techweb))
linked_techweb.add_point_type(TECHWEB_POINT_TYPE_DEFAULT, research_points_per_zap)
addtimer(CALLBACK(src, PROC_REF(reset_shocked)), zap_cooldown)
tesla_buckle_check(power)
else
..()
/obj/machinery/power/tesla_coil/research/default_unfasten_wrench(mob/user, obj/item/wrench/W, time = 20)
. = ..()
if(. == SUCCESSFUL_UNFASTEN)
if(panel_open)
icon_state = "rpcoil_open[anchored]"
else
icon_state = "rpcoil[anchored]"
/obj/machinery/power/tesla_coil/research/attackby(obj/item/W, mob/user, params)
if(default_deconstruction_screwdriver(user, "rpcoil_open[anchored]", "rpcoil[anchored]", W))
return
return ..()
/obj/machinery/power/tesla_coil/research/on_construction()
if(anchored)
connect_to_network()
/obj/machinery/power/grounding_rod
name = "grounding rod"
desc = "Keep an area from being fried from Edison's Bane."
@@ -183,4 +168,4 @@
flick("grounding_rodhit", src)
tesla_buckle_check(power)
else
..()
return ..()

View File

@@ -41,7 +41,7 @@ export const ReactorStats = (props, context) => {
<ProgressBar
value={data.power}
minValue={0}
maxValue={10000000}
maxValue={2000000}
color="yellow">
{formatSiUnit(data.power, 0, "W")}
</ProgressBar>