From 882b376eb289ffb5c79340c25ac26bb3475047fc Mon Sep 17 00:00:00 2001 From: Cheridan Date: Thu, 19 Sep 2013 23:39:32 -0500 Subject: [PATCH] Code Cleanup! Moves Area-finding into a helper, uses a parent anomaly-event datum to cut down on repeated code! --- code/modules/admin/topic.dm | 10 +++--- code/modules/events/anomaly.dm | 31 +++++++++++++++++ code/modules/events/anomaly_bluespace.dm | 43 +++++------------------- code/modules/events/anomaly_flux.dm | 43 +++++------------------- code/modules/events/anomaly_grav.dm | 41 ++++------------------ code/modules/events/anomaly_pyro.dm | 43 +++++------------------- code/modules/events/anomaly_vortex.dm | 42 ++++------------------- code/modules/events/event_manager.dm | 29 ++++++++++++++++ tgstation.dme | 1 + 9 files changed, 104 insertions(+), 179 deletions(-) create mode 100644 code/modules/events/anomaly.dm diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index d54d2821a50..d6338c1d8c3 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1682,17 +1682,17 @@ feedback_inc("admin_secrets_fun_used",1) feedback_add_details("admin_secrets_fun_used","GA") message_admins("[key_name_admin(usr)] has spawned a gravitational anomaly") - E = new /datum/round_event/anomaly_grav() + E = new /datum/round_event/anomaly/anomaly_grav() if("pyroanomalies") feedback_inc("admin_secrets_fun_used",1) feedback_add_details("admin_secrets_fun_used","PYRO") message_admins("[key_name_admin(usr)] has spawned a pyroclastic anomaly") - E = new /datum/round_event/anomaly_pyro() + E = new /datum/round_event/anomaly/anomaly_pyro() if("blackhole") feedback_inc("admin_secrets_fun_used",1) feedback_add_details("admin_secrets_fun_used","BH") message_admins("[key_name_admin(usr)] has spawned a vortex anomaly") - E = new /datum/round_event/anomaly_vortex() + E = new /datum/round_event/anomaly/anomaly_vortex() if("timeanomalies") //dear god this code was awful :P Still needs further optimisation feedback_inc("admin_secrets_fun_used",1) feedback_add_details("admin_secrets_fun_used","STA") @@ -1718,7 +1718,7 @@ feedback_add_details("admin_secrets_fun_used","SL") message_admins("[key_name_admin(usr)] has spawned spiders", 1) if("bluespaceanomaly") - E = new /datum/round_event/anomaly_bluespace() + E = new /datum/round_event/anomaly/anomaly_bluespace() feedback_inc("admin_secrets_fun_used",1) feedback_add_details("admin_secrets_fun_used","BA") message_admins("[key_name_admin(usr)] has triggered a bluespace anomaly", 1) @@ -1879,7 +1879,7 @@ feedback_inc("admin_secrets_fun_used",1) feedback_add_details("admin_secrets_fun_used","FLUX") message_admins("[key_name_admin(usr)] has triggered an energetic flux") - E = new /datum/round_event/anomaly_flux() + E = new /datum/round_event/anomaly/anomaly_flux() if(E) E.processing = 0 if(E.announceWhen>0) diff --git a/code/modules/events/anomaly.dm b/code/modules/events/anomaly.dm new file mode 100644 index 00000000000..46913f1dc17 --- /dev/null +++ b/code/modules/events/anomaly.dm @@ -0,0 +1,31 @@ +/datum/round_event_control/anomaly + name = "Energetic Flux" + typepath = /datum/round_event/anomaly + max_occurrences = 0 //This one probably shouldn't occur! It'd work, but it wouldn't be very fun. + weight = 15 + +/datum/round_event/anomaly + var/area/impact_area + var/obj/effect/anomaly/A + + +/datum/round_event/anomaly/setup() + impact_area = findEventArea() + +/datum/round_event/anomaly/announce() + command_alert("Localized hyper-energetic flux wave detected on long range scanners. Expected location of impact: [impact_area.name].", "Anomaly Alert") + +/datum/round_event/anomaly/start() + var/turf/T = pick(get_area_turfs(impact_area)) + if(T) + A = new /obj/effect/anomaly/flux(T.loc) + +/datum/round_event/anomaly/tick() + if(!A) + kill() + return + A.anomalyEffect() + +/datum/round_event/anomaly/end() + if(A)//Kill the anomaly if it still exists at the end. + del(A) \ No newline at end of file diff --git a/code/modules/events/anomaly_bluespace.dm b/code/modules/events/anomaly_bluespace.dm index 0fc1ff7a97c..311fd9ea51a 100644 --- a/code/modules/events/anomaly_bluespace.dm +++ b/code/modules/events/anomaly_bluespace.dm @@ -1,60 +1,33 @@ -/datum/round_event_control/anomaly_bluespace +/datum/round_event_control/anomaly/anomaly_bluespace name = "Bluespace Anomaly" - typepath = /datum/round_event/anomaly_bluespace + typepath = /datum/round_event/anomaly/anomaly_bluespace max_occurrences = 1 weight = 5 -/datum/round_event/anomaly_bluespace +/datum/round_event/anomaly/anomaly_bluespace startWhen = 3 announceWhen = 10 endWhen = 55 - var/area/impact_area var/obj/effect/anomaly/bluespace/newblue -/datum/round_event/anomaly_bluespace/setup() - var/list/safe_areas = list( - /area/turret_protected/ai, - /area/turret_protected/ai_upload, - /area/engine, - /area/solar, - /area/holodeck, - /area/shuttle/arrival, - /area/shuttle/escape/station, - /area/shuttle/escape_pod1/station, - /area/shuttle/escape_pod2/station, - /area/shuttle/escape_pod3/station, - /area/shuttle/escape_pod5/station, - /area/shuttle/mining/station, - /area/shuttle/transport1/station, - /area/shuttle/specops/station) - - //These are needed because /area/engine has to be removed from the list, but we still want these areas to get fucked up. - var/list/danger_areas = list( - /area/engine/break_room, - /area/engine/chiefs_office) - - - impact_area = locate(pick((the_station_areas - safe_areas) + danger_areas)) //need to locate() as it's just a list of paths. - - -/datum/round_event/anomaly_bluespace/announce() +/datum/round_event/anomaly/anomaly_bluespace/announce() command_alert("Unstable bluespace anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert") -/datum/round_event/anomaly_bluespace/start() +/datum/round_event/anomaly/anomaly_bluespace/start() var/turf/T = pick(get_area_turfs(impact_area)) if(T) newblue = new /obj/effect/anomaly/bluespace(T.loc) -/datum/round_event/anomaly_bluespace/tick() +/datum/round_event/anomaly/anomaly_bluespace/tick() if(!newblue) kill() return -/datum/round_event/anomaly_bluespace/end() - if(newblue) +/datum/round_event/anomaly/anomaly_bluespace/end() + if(newblue)//If it hasn't been neutralized, it's time to warp half the station away jeez var/turf/T = pick(get_area_turfs(impact_area)) if(T) // Calculate new position (searches through beacons in world) diff --git a/code/modules/events/anomaly_flux.dm b/code/modules/events/anomaly_flux.dm index f08e12d3414..676323840dc 100644 --- a/code/modules/events/anomaly_flux.dm +++ b/code/modules/events/anomaly_flux.dm @@ -1,59 +1,32 @@ -/datum/round_event_control/anomaly_flux +/datum/round_event_control/anomaly/anomaly_flux name = "Energetic Flux" - typepath = /datum/round_event/anomaly_flux + typepath = /datum/round_event/anomaly/anomaly_flux max_occurrences = 2 weight = 15 -/datum/round_event/anomaly_flux +/datum/round_event/anomaly/anomaly_flux startWhen = 3 announceWhen = 20 endWhen = 60 - var/area/impact_area var/obj/effect/anomaly/flux/newflux -/datum/round_event/anomaly_flux/setup() - var/list/safe_areas = list( - /area/turret_protected/ai, - /area/turret_protected/ai_upload, - /area/engine, - /area/solar, - /area/holodeck, - /area/shuttle/arrival, - /area/shuttle/escape/station, - /area/shuttle/escape_pod1/station, - /area/shuttle/escape_pod2/station, - /area/shuttle/escape_pod3/station, - /area/shuttle/escape_pod5/station, - /area/shuttle/mining/station, - /area/shuttle/transport1/station, - /area/shuttle/specops/station) +/datum/round_event/anomaly/anomaly_flux/announce() + command_alert("Localized hyper-energetic flux wave detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert") - //These are needed because /area/engine has to be removed from the list, but we still want these areas to get fucked up. - var/list/danger_areas = list( - /area/engine/break_room, - /area/engine/chiefs_office) - - - impact_area = locate(pick((the_station_areas - safe_areas) + danger_areas)) //need to locate() as it's just a list of paths. - - -/datum/round_event/anomaly_flux/announce() - command_alert("Localized hyper-energetic flux wave detected on long range scanners. Expected location of impact: [impact_area.name].", "Anomaly Alert") - -/datum/round_event/anomaly_flux/start() +/datum/round_event/anomaly/anomaly_flux/start() var/turf/T = pick(get_area_turfs(impact_area)) if(T) newflux = new /obj/effect/anomaly/flux(T.loc) -/datum/round_event/anomaly_flux/tick() +/datum/round_event/anomaly/anomaly_flux/tick() if(!newflux) kill() return newflux.anomalyEffect() -/datum/round_event/anomaly_flux/end() +/datum/round_event/anomaly/anomaly_flux/end() if(newflux)//If it hasn't been neutralized, it's time to blow up. explosion(newflux, -1, 3, 5, 5) del(newflux) \ No newline at end of file diff --git a/code/modules/events/anomaly_grav.dm b/code/modules/events/anomaly_grav.dm index b4131ebdac8..065be7711c4 100644 --- a/code/modules/events/anomaly_grav.dm +++ b/code/modules/events/anomaly_grav.dm @@ -1,58 +1,31 @@ -/datum/round_event_control/anomaly_grav +/datum/round_event_control/anomaly/anomaly_grav name = "Gravitational Anomaly" - typepath = /datum/round_event/anomaly_grav + typepath = /datum/round_event/anomaly/anomaly_grav max_occurrences = 2 weight = 15 -/datum/round_event/anomaly_grav +/datum/round_event/anomaly/anomaly_grav startWhen = 3 announceWhen = 20 endWhen = 50 - var/area/impact_area var/obj/effect/anomaly/grav/newgrav -/datum/round_event/anomaly_grav/setup() - var/list/safe_areas = list( - /area/turret_protected/ai, - /area/turret_protected/ai_upload, - /area/engine, - /area/solar, - /area/holodeck, - /area/shuttle/arrival, - /area/shuttle/escape/station, - /area/shuttle/escape_pod1/station, - /area/shuttle/escape_pod2/station, - /area/shuttle/escape_pod3/station, - /area/shuttle/escape_pod5/station, - /area/shuttle/mining/station, - /area/shuttle/transport1/station, - /area/shuttle/specops/station) - - //These are needed because /area/engine has to be removed from the list, but we still want these areas to get fucked up. - var/list/danger_areas = list( - /area/engine/break_room, - /area/engine/chiefs_office) - - - impact_area = locate(pick((the_station_areas - safe_areas) + danger_areas)) //need to locate() as it's just a list of paths. - - -/datum/round_event/anomaly_grav/announce() +/datum/round_event/anomaly/anomaly_grav/announce() command_alert("Gravitational anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert") -/datum/round_event/anomaly_grav/start() +/datum/round_event/anomaly/anomaly_grav/start() var/turf/T = pick(get_area_turfs(impact_area)) if(T) newgrav = new /obj/effect/anomaly/grav(T.loc) -/datum/round_event/anomaly_grav/tick() +/datum/round_event/anomaly/anomaly_grav/tick() if(!newgrav) kill() return newgrav.anomalyEffect() -/datum/round_event/anomaly_grav/end() +/datum/round_event/anomaly/anomaly_grav/end() if(newgrav)//It's possible it could have been neutralized before this point. del(newgrav) \ No newline at end of file diff --git a/code/modules/events/anomaly_pyro.dm b/code/modules/events/anomaly_pyro.dm index aea48f651b3..fe96b4deade 100644 --- a/code/modules/events/anomaly_pyro.dm +++ b/code/modules/events/anomaly_pyro.dm @@ -1,59 +1,32 @@ -/datum/round_event_control/anomaly_pyro +/datum/round_event_control/anomaly/anomaly_pyro name = "Pyroclastic Anomaly" - typepath = /datum/round_event/anomaly_pyro + typepath = /datum/round_event/anomaly/anomaly_pyro max_occurrences = 2 weight = 15 -/datum/round_event/anomaly_pyro +/datum/round_event/anomaly/anomaly_pyro startWhen = 10 announceWhen = 3 endWhen = 70 - var/area/impact_area var/obj/effect/anomaly/pyro/newpyro -/datum/round_event/anomaly_pyro/setup()//TODO: Make this location stuff into a helper proc to be used in other events. - var/list/safe_areas = list( - /area/turret_protected/ai, - /area/turret_protected/ai_upload, - /area/engine, - /area/solar, - /area/holodeck, - /area/shuttle/arrival, - /area/shuttle/escape/station, - /area/shuttle/escape_pod1/station, - /area/shuttle/escape_pod2/station, - /area/shuttle/escape_pod3/station, - /area/shuttle/escape_pod5/station, - /area/shuttle/mining/station, - /area/shuttle/transport1/station, - /area/shuttle/specops/station) - - //These are needed because /area/engine has to be removed from the list, but we still want these areas to get fucked up. - var/list/danger_areas = list( - /area/engine/break_room, - /area/engine/chiefs_office) - - - impact_area = locate(pick((the_station_areas - safe_areas) + danger_areas)) //need to locate() as it's just a list of paths. - - -/datum/round_event/anomaly_pyro/announce() +/datum/round_event/anomaly/anomaly_pyro/announce() command_alert("Atmospheric anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert") -/datum/round_event/anomaly_pyro/start() +/datum/round_event/anomaly/anomaly_pyro/start() var/turf/T = pick(get_area_turfs(impact_area)) if(T) newpyro = new /obj/effect/anomaly/pyro(T.loc) -/datum/round_event/anomaly_pyro/tick() +/datum/round_event/anomaly/anomaly_pyro/tick() if(!newpyro) kill() return if(IsMultiple(activeFor, 5)) newpyro.anomalyEffect() -/datum/round_event/anomaly_pyro/end() - if(newpyro)//It's possible it could have been neutralized before this point. +/datum/round_event/anomaly/anomaly_pyro/end() + if(newpyro) del(newpyro) \ No newline at end of file diff --git a/code/modules/events/anomaly_vortex.dm b/code/modules/events/anomaly_vortex.dm index 1bd6e7e75e6..3fc9b7b564c 100644 --- a/code/modules/events/anomaly_vortex.dm +++ b/code/modules/events/anomaly_vortex.dm @@ -1,60 +1,32 @@ -/datum/round_event_control/anomaly_vortex +/datum/round_event_control/anomaly/anomaly_vortex name = "Vortex Anomaly" - typepath = /datum/round_event/anomaly_vortex + typepath = /datum/round_event/anomaly/anomaly_vortex max_occurrences = 5 weight = 2 -/datum/round_event/anomaly_vortex +/datum/round_event/anomaly/anomaly_vortex startWhen = 10 announceWhen = 3 endWhen = 80 - var/area/impact_area var/obj/effect/anomaly/bhole/vortex -/datum/round_event/anomaly_vortex/setup() - var/list/safe_areas = list( - /area/turret_protected/ai, - /area/turret_protected/ai_upload, - /area/engine, - /area/solar, - /area/holodeck, - /area/shuttle/arrival, - /area/shuttle/escape/station, - /area/shuttle/escape_pod1/station, - /area/shuttle/escape_pod2/station, - /area/shuttle/escape_pod3/station, - /area/shuttle/escape_pod5/station, - /area/shuttle/mining/station, - /area/shuttle/transport1/station, - /area/shuttle/specops/station) - - //These are needed because /area/engine has to be removed from the list, but we still want these areas to get fucked up. - var/list/danger_areas = list( - /area/engine/break_room, - /area/engine/chiefs_office) - - - impact_area = locate(pick((the_station_areas - safe_areas) + danger_areas)) //need to locate() as it's just a list of paths. - -/datum/round_event/anomaly_vortex/announce() +/datum/round_event/anomaly/anomaly_vortex/announce() command_alert("Localized high-intensity vortex anomaly detected on long range scanners. Expected location: [impact_area.name]", "Anomaly Alert") -/datum/round_event/anomaly_vortex/start() -// var/turf/T = pick(blobstart) -// vortex = new /obj/effect/anomaly/bhole(T.loc) +/datum/round_event/anomaly/anomaly_vortex/start() var/turf/T = pick(get_area_turfs(impact_area)) if(T) vortex = new /obj/effect/anomaly/bhole(T.loc) -/datum/round_event/anomaly_vortex/tick() +/datum/round_event/anomaly/anomaly_vortex/tick() if(!vortex) kill() return vortex.anomalyEffect() -/datum/round_event/anomaly_vortex/end() +/datum/round_event/anomaly/anomaly_vortex/end() if(vortex) del(vortex) \ No newline at end of file diff --git a/code/modules/events/event_manager.dm b/code/modules/events/event_manager.dm index c11bc109001..52ffee5fc4c 100644 --- a/code/modules/events/event_manager.dm +++ b/code/modules/events/event_manager.dm @@ -81,6 +81,34 @@ var/datum/controller/event/events continue return + +/datum/round_event/proc/findEventArea() //Here's a nice proc to use to find an area for your event to land in! + var/list/safe_areas = list( + /area/turret_protected/ai, + /area/turret_protected/ai_upload, + /area/engine, + /area/solar, + /area/holodeck, + /area/shuttle/arrival, + /area/shuttle/escape/station, + /area/shuttle/escape_pod1/station, + /area/shuttle/escape_pod2/station, + /area/shuttle/escape_pod3/station, + /area/shuttle/escape_pod5/station, + /area/shuttle/mining/station, + /area/shuttle/transport1/station, + /area/shuttle/specops/station) + + //These are needed because /area/engine has to be removed from the list, but we still want these areas to get fucked up. + var/list/danger_areas = list( + /area/engine/break_room, + /area/engine/chiefs_office) + + //Need to locate() as it's just a list of paths. + return locate(pick((the_station_areas - safe_areas) + danger_areas)) + + + //allows a client to trigger an event (For Debugging Purposes) /client/proc/forceEvent(var/datum/round_event_control/E in events.control) set name = "Trigger Event (Debug Only)" @@ -93,6 +121,7 @@ var/datum/controller/event/events E.runEvent() message_admins("[key_name_admin(usr)] has triggered an event. ([E.name])", 1) + /* ////////////// // HOLIDAYS // diff --git a/tgstation.dme b/tgstation.dme index 883121ba7b7..86f35ed197c 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -755,6 +755,7 @@ #include "code\modules\detectivework\footprints_and_rag.dm" #include "code\modules\detectivework\scanner.dm" #include "code\modules\events\alien_infestation.dm" +#include "code\modules\events\anomaly.dm" #include "code\modules\events\anomaly_bluespace.dm" #include "code\modules\events\anomaly_flux.dm" #include "code\modules\events\anomaly_grav.dm"