Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
94 changes: 48 additions & 46 deletions code/modules/power/fusion/core/core_field.dm
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
#define FUSION_RUPTURE_THRESHOLD 25000
#define FUSION_REACTANT_CAP 10000
#define FUSION_WARNING_DELAY 20
#define FUSION_BLACKBODY_MULTIPLIER 28
#define FUSION_BLACKBODY_MULTIPLIER 350
#define FUSION_INTEGRITY_RATE_LIMIT 0.11
#define FUSION_TICK_MAX_TEMP_CHANGE 0.2
#define FUSION_TICK_MAX_TEMP_CHANGE 0.3

/obj/effect/fusion_em_field
name = "electromagnetic field"
Expand Down Expand Up @@ -68,7 +68,7 @@

var/light_min_range = 2
var/light_min_power = 0.2
var/light_max_range = 18
var/light_max_range = 24
var/light_max_power = 1

var/last_range
Expand Down Expand Up @@ -101,13 +101,11 @@

var/vfx_radius_actual
//var/vfx_radius_visual
var/pause_rupture = TRUE
var/pause_rupture = FALSE

var/power_log_base = 1.4
var/power_multiplier = 3
var/power_power = 3.2

var/aaa_minimum_energy_level_multiplier = 1.0
var/power_log_base = 1.35
var/power_multiplier = 3.5
var/power_power = 2.9

/obj/effect/fusion_em_field/proc/UpdateVisuals()
//Take the particle system and edit it
Expand Down Expand Up @@ -231,7 +229,7 @@
field_strength_entropy_multiplier = clamp((owned_core.field_strength ** 1.075) / 40, 0.8, 2.0)
// Energy decay (entropy tax).
if(plasma_temperature >= 1)
var/lost = plasma_temperature * 0.0045
var/lost = plasma_temperature * 0.00125
radiation += lost
var/temp_change = 0 - (lost * field_strength_entropy_multiplier)
adjust_temperature(temp_change, cause = "Containment Entropy")
Expand Down Expand Up @@ -439,12 +437,10 @@

/obj/effect/fusion_em_field/proc/AddEnergy(a_energy, a_plasma_temperature)
// Boost gyro effects at low temperatures for faster startup
if(plasma_temperature <= 75000)
if(plasma_temperature <= 5000)
a_energy = a_energy * 32
else if(plasma_temperature <= 250000)
else if(plasma_temperature <= 75000)
a_energy = a_energy * 8
else if(plasma_temperature <= 1000000)
a_energy = a_energy * 2
energy += a_energy / 2

plasma_temperature += a_plasma_temperature
Expand Down Expand Up @@ -601,7 +597,7 @@
if(possible_s_reacts[cur_s_react] < 1)
continue
var/singleton/fusion_reaction/cur_reaction = get_fusion_reaction(cur_p_react, cur_s_react)
if(cur_reaction && plasma_temperature >= (cur_reaction.minimum_energy_level * aaa_minimum_energy_level_multiplier)&& possible_s_reacts[cur_p_react] >= cur_reaction.minimum_p_react)
if(cur_reaction && plasma_temperature >= (cur_reaction.minimum_energy_level)&& possible_s_reacts[cur_p_react] >= cur_reaction.minimum_p_react)
LAZYDISTINCTADD(possible_reactions, cur_reaction)

// If there are no possible reactions here, abandon this primary reactant and move on.
Expand All @@ -625,7 +621,7 @@
// Make sure we have enough energy.
// First, if minimum_reaction_temperature not set, make it the same as minimum_energy_level.
if(!cur_reaction.minimum_reaction_temperature)
cur_reaction.minimum_reaction_temperature = (cur_reaction.minimum_energy_level * 0.8 * aaa_minimum_energy_level_multiplier)
cur_reaction.minimum_reaction_temperature = (cur_reaction.minimum_energy_level * 0.8)
if(plasma_temperature < cur_reaction.minimum_reaction_temperature)
continue

Expand All @@ -635,7 +631,7 @@
continue

// Randomly determined amount to react. Starts at up to 1/20th, scales to up to 2/3rd at 20x min temp
var/temp_over_min = plasma_temperature / (cur_reaction.minimum_energy_level * 20 * aaa_minimum_energy_level_multiplier)
var/temp_over_min = plasma_temperature / (cur_reaction.minimum_energy_level * 20)
var/max_react_percent = clamp(temp_over_min, (1/20), (2/3))
var/amount_reacting = rand(1, (max_num_reactants * max_react_percent))

Expand Down Expand Up @@ -738,86 +734,92 @@
var/use_range
var/use_power = 0
var/temp_mod = ((plasma_temperature-5000)/28000)
/// super-duper brightness for super-duper temps (its a range multiplier)
var/super = 1.0

// Using real values for black-body radiation means the fusion reactor will almost always zip to top temp color.
// This multiplier scales the below temperatures to better match intended range of temps in gameplay.
var/effective_plasma_temperature = plasma_temperature / FUSION_BLACKBODY_MULTIPLIER

use_range = light_min_range + Ceil((light_max_range-light_min_range)*temp_mod)
use_power = light_min_power + Ceil((light_max_power-light_min_power)*temp_mod)
use_range = light_min_range + Ceil((light_max_range-light_min_range)*temp_mod*super)
use_power = light_min_power + Ceil((light_max_power-light_min_power)*temp_mod*super)
switch (effective_plasma_temperature)
if (-INFINITY to 1000)
light_color = "#ff5800"
alpha = 30
alpha = 60
if (1000 to 1400)
light_color = "#ff6500"
alpha = 40
alpha = 80
if (1400 to 1800)
light_color = "#ff7e00"
alpha = 50
alpha = 100
if (1800 to 2200)
light_color = "#ff932c"
alpha = 60
alpha = 120
if (2200 to 2600)
light_color = "#ffa54f"
alpha = 70
alpha = 130
if (2600 to 3000)
light_color = "#ffb46b"
alpha = 80
alpha = 140
if (3000 to 4000)
light_color = "#ffd1a3"
alpha = 90
alpha = 150
if (4000 to 5400)
light_color = "#ffebdc"
alpha = 100
alpha = 140
if (5400 to 6200)
light_color = "#fff5f5"
alpha = 110
alpha = 150
if (6200 to 7000)
light_color = "#f5f3ff"
alpha = 120
alpha = 160
if (7000 to 8000)
light_color = "#e3e9ff"
alpha = 130
alpha = 170
if (8000 to 9000)
light_color = "#d6e1ff"
alpha = 140
alpha = 180
if (9000 to 10000)
light_color = "#ccdbff"
alpha = 150
alpha = 190
if (1000 to 11000)
light_color = "#c4d7ff"
alpha = 160
alpha = 200
if (11000 to 12000)
light_color = "#bfd3ff"
alpha = 170
alpha = 205
if (12000 to 13000)
light_color = "#bad0ff"
alpha = 180
alpha = 210
if (13000 to 14000)
light_color = "#b6ceff"
alpha = 190
alpha = 215
if (14000 to 15000)
light_color = "#b3ccff"
alpha = 200
alpha = 220
if (15000 to 16000)
light_color = "#b0caff"
alpha = 210
alpha = 225
if (16000 to 17000)
light_color = "#aec8ff"
alpha = 220
alpha = 230
if (17000 to 18000)
light_color = "#acc7ff"
alpha = 230
alpha = 235
if (18000 to 20000)
light_color = "#a8c5ff"
alpha = 230
if (20000 to 23000)
light_color = "#94c2ff"
alpha = 230
if (23000 to INFINITY)
light_color = "#74a2ff"
alpha = 240
if (20000 to 25000)
light_color = "#94c2ff"
alpha = 245
if (25000 to 32000)
light_color = "#699bff"
alpha = 250
if (32000 to INFINITY)
light_color = "#1f69ff"
alpha = 255
super = 3.0

if (last_range != use_range || last_power != use_power || color != light_color)
set_light(use_range / 6, use_power ? 6 : 0, light_color)
Expand Down
7 changes: 3 additions & 4 deletions code/modules/power/fusion/fusion_reactions.dm
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ GLOBAL_LIST(fusion_reactions)
p_react = GAS_HYDROGEN
s_react = GAS_HYDROGEN
energy_consumption = 4
energy_production = 19
energy_production = 32
products = list(GAS_DEUTERIUM = 1)
radiation = 3
minimum_energy_level = 400000
Expand All @@ -95,7 +95,7 @@ GLOBAL_LIST(fusion_reactions)
p_react = GAS_HYDROGEN
s_react = GAS_HELIUMFUEL
energy_consumption = 2
energy_production = 12
energy_production = 24
products = list(GAS_HYDROGEN = 2)
radiation = 32
instability = 1.8
Expand Down Expand Up @@ -151,7 +151,7 @@ GLOBAL_LIST(fusion_reactions)
p_react = "lithium"
s_react = GAS_HYDROGEN
energy_consumption = 3
energy_production = 5
energy_production = 15
products = list(GAS_DEUTERIUM = 1, GAS_HELIUM = 1)
radiation = 22
instability = 0.35
Expand All @@ -160,7 +160,6 @@ GLOBAL_LIST(fusion_reactions)

/singleton/fusion_reaction/lithium_deuterium
p_react = "lithium"
minimum_p_react = 2000
s_react = GAS_DEUTERIUM
energy_consumption = 1
energy_production = 40
Expand Down
58 changes: 58 additions & 0 deletions html/changelogs/Bat-IndraRebalance.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
################################
# Example Changelog File
#
# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
#
# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
# When it is, any changes listed below will disappear.
#
# Valid Prefixes:
# bugfix
# - (fixes bugs)
# wip
# - (work in progress)
# qol
# - (quality of life)
# soundadd
# - (adds a sound)
# sounddel
# - (removes a sound)
# rscadd
# - (adds a feature)
# rscdel
# - (removes a feature)
# imageadd
# - (adds an image or sprite)
# imagedel
# - (removes an image or sprite)
# spellcheck
# - (fixes spelling or grammar)
# experiment
# - (experimental change)
# balance
# - (balance changes)
# code_imp
# - (misc internal code change)
# refactor
# - (refactors code)
# config
# - (makes a change to the config files)
# admin
# - (makes changes to administrator tools)
# server
# - (miscellaneous changes to server)
#################################

# Your name.
author: Batrachophrenoboocosmomachia

# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
delete-after: True

# Any changes you've made. See valid prefix list above.
# INDENT WITH TWO SPACES. NOT TABS. SPACES.
# SCREW THIS UP AND IT WON'T WORK.
# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit.
# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog.
changes:
- balance: "INDRA rebalance based on initial feedback- easier temperature increases and power formula adjustments."
Loading