mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-12 15:45:25 +01:00
Solar Flares (#14400)
* Solar Flares * fixup * SSsun * convert solar flare to a /datum/weather * AA request * shock chance for APCs = 5% per 2.5M of power in grid * refactor * farie suggestions * farie suggestions 2 * reduced maximum length from 15m to 10m Co-authored-by: Kyep <Kyep@users.noreply.github.com>
This commit is contained in:
@@ -151,6 +151,7 @@ GLOBAL_LIST_EMPTY(event_last_fired)
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Rogue Drones", /datum/event/rogue_drone, 0, list(ASSIGNMENT_SECURITY = 20)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Space Vines", /datum/event/spacevine, 250, list(ASSIGNMENT_ENGINEER = 10)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Meteor Shower", /datum/event/meteor_wave, 0, list(ASSIGNMENT_ENGINEER = 25)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Solar Flare", /datum/event/solar_flare, 0, list(ASSIGNMENT_ENGINEER = 25)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Meaty Ores", /datum/event/dust/meaty, 0, list(ASSIGNMENT_ENGINEER = 20)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Communication Blackout", /datum/event/communications_blackout, 500, list(ASSIGNMENT_AI = 150, ASSIGNMENT_SECURITY = 120)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Prison Break", /datum/event/prison_break, 0, list(ASSIGNMENT_SECURITY = 100)),
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
/datum/event/solar_flare
|
||||
startWhen = 2
|
||||
endWhen = 3
|
||||
announceWhen = 1
|
||||
|
||||
/datum/event/solar_flare/announce()
|
||||
GLOB.event_announcement.Announce("A solar flare has been detected on collision course with the station.", "Incoming Solar Flare", 'sound/AI/attention.ogg')
|
||||
|
||||
/datum/event/solar_flare/start()
|
||||
SSweather.run_weather(/datum/weather/solar_flare)
|
||||
@@ -1195,8 +1195,13 @@
|
||||
charging = 0
|
||||
chargecount = 0
|
||||
|
||||
if(excess >= 5000000 && !shock_proof) //If there's more than 5,000,000 watts in the grid, start arcing and shocking people.
|
||||
if(prob(5))
|
||||
if(excess >= 2500000 && !shock_proof)
|
||||
var/shock_chance = 5 // 5%
|
||||
if(excess >= 7500000)
|
||||
shock_chance = 15
|
||||
else if(excess >= 5000000)
|
||||
shock_chance = 10
|
||||
if(prob(shock_chance))
|
||||
var/list/shock_mobs = list()
|
||||
for(var/C in view(get_turf(src), 5)) //We only want to shock a single random mob in range, not every one.
|
||||
if(isliving(C))
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
#define SOLAR_MAX_DIST 40
|
||||
#define SOLARGENRATE 1500
|
||||
|
||||
/obj/machinery/power/solar
|
||||
name = "solar panel"
|
||||
@@ -131,7 +130,7 @@
|
||||
if(powernet == control.powernet)//check if the panel is still connected to the computer
|
||||
if(obscured) //get no light from the sun, so don't generate power
|
||||
return
|
||||
var/sgen = SOLARGENRATE * sunfrac
|
||||
var/sgen = SSsun.solar_gen_rate * sunfrac
|
||||
add_avail(sgen)
|
||||
control.gen += sgen
|
||||
else //if we're no longer on the same powernet, remove from control computer
|
||||
@@ -379,7 +378,7 @@
|
||||
/obj/machinery/power/solar_control/tgui_data(mob/user)
|
||||
var/list/data = list()
|
||||
data["generated"] = round(lastgen) //generated power by all connected panels
|
||||
data["generated_ratio"] = data["generated"] / round(max(connected_panels.len, 1) * SOLARGENRATE) //power generation ratio. Used for the power bar
|
||||
data["generated_ratio"] = data["generated"] / round(max(connected_panels.len, 1) * SSsun.solar_gen_rate) //power generation ratio. Used for the power bar
|
||||
data["direction"] = angle2text(cdir) //current orientation of the panels
|
||||
data["cdir"] = cdir //current orientation of the of the panels in degrees
|
||||
data["tracking_state"] = track //tracker status: TRACKER_OFF, TRACKER_TIMED, TRACKER_AUTO
|
||||
|
||||
Reference in New Issue
Block a user