Changes radiation storm random event into a weather type.

This commit is contained in:
Shadowlight213
2016-08-16 19:35:45 -07:00
parent 926b37a91d
commit 0863636e98
4 changed files with 62 additions and 47 deletions
+7 -1
View File
@@ -28,6 +28,7 @@
var/area_type = /area/space //Types of area to affect
var/list/impacted_areas = list() //Areas to be affected by the weather, calculated when the weather begins
var/list/protected_areas = list()//Areas that are protected and excluded from the affected areas.
var/target_z = ZLEVEL_STATION //The z-level to affect
var/overlay_layer = AREA_LAYER //Since it's above everything else, this is the layer used by default. TURF_LAYER is below mobs and walls if you need to use that.
@@ -50,7 +51,12 @@
if(stage == STARTUP_STAGE)
return
stage = STARTUP_STAGE
var/list/affectareas = list()
for(var/V in get_areas(area_type))
affectareas += V
for(var/V in protected_areas)
affectareas -= get_areas(V)
for(var/V in affectareas)
var/area/A = V
if(A.z == target_z)
impacted_areas |= A
@@ -97,7 +103,7 @@
/datum/weather/proc/end()
if(stage == END_STAGE)
return
return 1
stage = END_STAGE
update_areas()
+47
View File
@@ -113,3 +113,50 @@
aesthetic = TRUE
probability = 10
/datum/weather/rad_storm
name = "radiation storm"
desc = "A cloud of intense radiation passes through the area dealing rad damage to those who are unprotected."
//telegraph_message = "<span class='boldwarning'>An eerie moan rises on the wind. Sheets of burning ash blacken the horizon. Seek shelter.</span>"
telegraph_duration = 300
telegraph_sound = 'sound/lavaland/ash_storm_windup.ogg'
telegraph_overlay = "light_ash"
//weather_message = "<span class='userdanger'><i>Smoldering clouds of scorching ash billow down around you! Get inside!</i></span>"
weather_duration_lower = 600
weather_duration_upper = 1500
weather_sound = 'sound/lavaland/ash_storm_start.ogg'
weather_overlay = "ash_storm"
//end_message = "<span class='boldannounce'>The shrieking wind whips away the last of the ash falls to its usual murmur. It should be safe to go outside now.</span>"
end_duration = 300
end_sound = 'sound/lavaland/ash_storm_end.ogg'
end_overlay = "light_ash"
area_type = /area
protected_areas = list(/area/maintenance, /area/turret_protected/ai_upload, /area/turret_protected/ai_upload_foyer, /area/turret_protected/ai)
target_z = ZLEVEL_STATION
immunity_type = "rad"
/datum/weather/rad_storm/impact(mob/living/L)
if(ishuman(L))
var/mob/living/carbon/human/H = L
if(H.dna && H.dna.species)
if(!(RADIMMUNE in H.dna.species.specflags))
if(prob(25))
if(prob(25))
randmuti(H)
if(prob(90))
randmutb(H)
else
randmutg(H)
H.domutcheck()
L.rad_act(15,1)
/datum/weather/rad_storm/end()
if(..())
return
priority_announce("The radiation threat has passed. Please return to your workplaces. Maintenance access restrictions will be restored shortly.", "Anomaly Alert")
addtimer(GLOBAL_PROC, "revoke_maint_all_access", 300, TRUE)
+3 -2
View File
@@ -29,9 +29,10 @@
/atom/proc/rad_act(var/severity)
return 1
/mob/living/rad_act(amount)
/mob/living/rad_act(amount, silent = 0)
if(amount)
var/blocked = run_armor_check(null, "rad", "Your clothes feel warm.", "Your clothes feel warm.")
var/message = silent ? null : "Your clothes feel warm."
var/blocked = run_armor_check(null, "rad", message, message)
apply_effect(amount, IRRADIATE, blocked)
for(var/obj/I in src) //Radiation is also applied to items held by the mob
I.rad_act(amount)
+5 -44
View File
@@ -4,56 +4,17 @@
max_occurrences = 1
/datum/round_event/radiation_storm
var/list/protected_areas = list(/area/maintenance, /area/turret_protected/ai_upload, /area/turret_protected/ai_upload_foyer, /area/turret_protected/ai)
/datum/round_event/radiation_storm/setup()
startWhen = rand(10, 20)
endWhen = startWhen + 5
startWhen = 3
endWhen = startWhen + 1
announceWhen = 1
/datum/round_event/radiation_storm/announce()
priority_announce("High levels of radiation detected near the station. Maintenance is best shielded from radiation.", "Anomaly Alert", 'sound/AI/radiation.ogg')
priority_announce("High levels of radiation detected near the station. Maintenance is best shielded from radiation. Maintenance access restrictions will be temporarily lifted.", "Anomaly Alert", 'sound/AI/radiation.ogg')
make_maint_all_access()
//sound not longer matches the text, but an audible warning is probably good
/datum/round_event/radiation_storm/start()
for(var/mob/living/carbon/C in living_mob_list)
var/turf/T = get_turf(C)
if(!T)
continue
if(T.z != 1)
continue
var/skip = 0
for(var/a in protected_areas)
if(istype(T.loc, a))
skip = 1
continue
if(skip)
continue
if(locate(/obj/machinery/power/apc) in T) //damn you maint APCs!!
continue
if(istype(C, /mob/living/carbon/human))
var/mob/living/carbon/human/H = C
if(prob(5))
H.rad_act(rand(100, 160))
else
H.rad_act(rand(15, 75))
if(prob(25))
if(prob(75))
randmutb(H)
else
randmutg(H)
H.domutcheck()
else if(istype(C, /mob/living/carbon/monkey))
var/mob/living/carbon/monkey/M = C
M.rad_act(rand(15, 75))
/datum/round_event/radiation_storm/end()
priority_announce("The radiation threat has passed. Please return to your workplaces.", "Anomaly Alert")
SSweather.run_weather("radiation storm",1)