diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index bb2de77eb09..bf91c682b69 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -434,6 +434,7 @@ var/global/floorIsLava = 0
dat += {"
Fun Secrets
+ Trigger a Virus Outbreak
Turn all humans into monkeys
Make all areas powered
Make all areas unpowered
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 84355ff3f9b..1cbd7bdfe10 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -57,6 +57,30 @@
if(!src.makeDeathsquad())
usr << "Unfortunatly there were not enough candidates available."
+ if("11")
+ var/strength = input("Set Blob Strength (1=Weak, 2=Strong, 3=Full)","Set Strength",1) as num
+ message_admins("[key_name(usr)] spawned a blob with strength [strength].")
+ log_admin("[key_name(usr)] spawned a blob with strength [strength].")
+ new/datum/round_event/blob(strength)
+
+ else if(href_list["forceevent"])
+ var/datum/round_event_control/E = locate(href_list["forceevent"]) in events.control
+ if(E)
+ var/datum/round_event/event = E.runEvent()
+ if(event.announceWhen>0)
+ event.processing = 0
+ var/prompt = alert(usr, "Would you like to alert the crew?", "Alert", "Yes", "No", "Cancel")
+ switch(prompt)
+ if("Cancel")
+ event.kill()
+ return
+ if("No")
+ event.announceWhen = -1
+ event.processing = 1
+ message_admins("[key_name_admin(usr)] has triggered an event. ([E.name])", 1)
+ log_admin("[key_name(usr)] has triggered an event. ([E.name])")
+ return
+
else if(href_list["dbsearchckey"] || href_list["dbsearchadmin"])
var/adminckey = href_list["dbsearchadmin"]
var/playerckey = href_list["dbsearchckey"]
@@ -1684,86 +1708,6 @@
message_admins("[key_name_admin(usr)] changed the bomb cap to [MAX_EX_DEVESTATION_RANGE], [MAX_EX_HEAVY_RANGE], [MAX_EX_LIGHT_RANGE]", 1)
log_admin("[key_name(usr)] changed the bomb cap to [MAX_EX_DEVESTATION_RANGE], [MAX_EX_HEAVY_RANGE], [MAX_EX_LIGHT_RANGE]")
- if("wave")
- var/should_announce = alert(usr, "Meteors will be spawned. Would you like to make an announcement?", "Message", "Yes", "No") == "Yes"
- feedback_inc("admin_secrets_fun_used",1)
- feedback_add_details("admin_secrets_fun_used","MW")
- message_admins("[key_name_admin(usr)] has spawned meteors")
- E = new /datum/round_event/meteor_wave(should_announce)
- if("gravanomalies")
- 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/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/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/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")
- message_admins("[key_name_admin(usr)] has made wormholes")
- E = new /datum/round_event/wormholes()
- if("goblob")
- feedback_inc("admin_secrets_fun_used",1)
- feedback_add_details("admin_secrets_fun_used","BL")
- message_admins("[key_name_admin(usr)] has spawned blob", 1)
- E = new /datum/round_event/blob()
- if("aliens")
- feedback_inc("admin_secrets_fun_used",1)
- feedback_add_details("admin_secrets_fun_used","AL")
- message_admins("[key_name_admin(usr)] has spawned aliens", 1)
- E = new /datum/round_event/alien_infestation()
- if("alien_silent") //replaces the spawn_xeno verb
- feedback_inc("admin_secrets_fun_used",1)
- feedback_add_details("admin_secrets_fun_used","ALS")
- create_xeno()
- if("spiders")
- E = new /datum/round_event/spider_infestation()
- feedback_inc("admin_secrets_fun_used",1)
- 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/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)
- if("comms_blackout")
- E = new /datum/round_event/communications_blackout()
- feedback_inc("admin_secrets_fun_used",1)
- feedback_add_details("admin_secrets_fun_used","CB")
- message_admins("[key_name_admin(usr)] triggered a communications blackout.", 1)
- if("spaceninja")
- feedback_inc("admin_secrets_fun_used",1)
- feedback_add_details("admin_secrets_fun_used","SN")
- message_admins("[key_name_admin(usr)] has sent in a space ninja", 1)
- E = new /datum/round_event/ninja()
- if("carp")
- E = new /datum/round_event/carp_migration()
- feedback_inc("admin_secrets_fun_used",1)
- feedback_add_details("admin_secrets_fun_used","C")
- message_admins("[key_name_admin(usr)] has spawned carp.", 1)
- if("radiation")
- feedback_inc("admin_secrets_fun_used",1)
- feedback_add_details("admin_secrets_fun_used","R")
- message_admins("[key_name_admin(usr)] has has irradiated the station", 1)
- E = new /datum/round_event/radiation_storm()
- if("immovable")
- feedback_inc("admin_secrets_fun_used",1)
- feedback_add_details("admin_secrets_fun_used","IR")
- message_admins("[key_name_admin(usr)] has sent an immovable rod to the station", 1)
- E = new /datum/round_event/immovable_rod()
- if("prison_break")
- feedback_inc("admin_secrets_fun_used",1)
- feedback_add_details("admin_secrets_fun_used","PB")
- message_admins("[key_name_admin(usr)] has allowed a prison break", 1)
- E = new /datum/round_event/prison_break()
if("lightsout")
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","LO")
@@ -1879,26 +1823,11 @@
B.facial_hair_style = "Dward Beard"
B.update_hair()
message_admins("[key_name_admin(usr)] activated dorf mode")
- if("ionstorm")
- feedback_inc("admin_secrets_fun_used",1)
- feedback_add_details("admin_secrets_fun_used","I")
- message_admins("[key_name_admin(usr)] triggered an ion storm")
- E = new /datum/round_event/ion_storm()
- if("spacevines")
- feedback_inc("admin_secrets_fun_used",1)
- feedback_add_details("admin_secrets_fun_used","K")
- message_admins("[key_name_admin(usr)] has spawned spacevines", 1)
- E = new /datum/round_event/spacevine()
if("onlyone")
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","OO")
usr.client.only_one()
// message_admins("[key_name_admin(usr)] has triggered a battle to the death (only one)")
- if("energeticflux")
- 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/anomaly_flux()
if(E)
E.processing = 0
if(E.announceWhen>0)
diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm
index c70fed34e0c..b12a431043d 100644
--- a/code/modules/admin/verbs/one_click_antag.dm
+++ b/code/modules/admin/verbs/one_click_antag.dm
@@ -16,6 +16,7 @@ client/proc/one_click_antag()
Make Revs
Make Cult
Make Malf AI
+ Make Blob
Make Wizard (Requires Ghosts)
Make Nuke Team (Requires Ghosts)
Make Deathsquad (Requires Ghosts)
diff --git a/code/modules/events/anomaly.dm b/code/modules/events/anomaly.dm
index 654c227e810..9062ed7e4a3 100644
--- a/code/modules/events/anomaly.dm
+++ b/code/modules/events/anomaly.dm
@@ -7,6 +7,7 @@
/datum/round_event/anomaly
var/area/impact_area
var/obj/effect/anomaly/newAnomaly
+ announceWhen = 1
/datum/round_event/anomaly/setup(loop=0)
diff --git a/code/modules/events/blob.dm b/code/modules/events/blob.dm
index 368172ebecd..c678bdab8dc 100644
--- a/code/modules/events/blob.dm
+++ b/code/modules/events/blob.dm
@@ -9,9 +9,13 @@
/datum/round_event/blob
announceWhen = 12
endWhen = 120
-
+ var/new_rate = 2
var/obj/effect/blob/core/Blob
+/datum/round_event/blob/New(var/strength)
+ ..()
+ if(strength)
+ new_rate = strength
/datum/round_event/blob/announce()
priority_announce("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", 'sound/AI/outbreak5.ogg')
@@ -21,7 +25,7 @@
var/turf/T = pick(blobstart)
if(!T)
return kill()
- Blob = new /obj/effect/blob/core(T, 200)
+ Blob = new /obj/effect/blob/core(T, 200, null, new_rate)
for(var/i = 1; i < rand(3, 6), i++)
Blob.process()
diff --git a/code/modules/events/communications_blackout.dm b/code/modules/events/communications_blackout.dm
index 353b92a78b8..cb55bbbd248 100644
--- a/code/modules/events/communications_blackout.dm
+++ b/code/modules/events/communications_blackout.dm
@@ -3,6 +3,9 @@
typepath = /datum/round_event/communications_blackout
weight = 30
+/datum/round_event/communications_blackout
+ announceWhen = 1
+
/datum/round_event/communications_blackout/announce()
var/alert = pick( "Ionospheric anomalies detected. Temporary telecommunication failure imminent. Please contact you*%fj00)`5vc-BZZT", \
"Ionospheric anomalies detected. Temporary telecommunication failu*3mga;b4;'1v¬-BZZZT", \
diff --git a/code/modules/events/dust.dm b/code/modules/events/dust.dm
index d24b6cab401..5c5bdfb596a 100644
--- a/code/modules/events/dust.dm
+++ b/code/modules/events/dust.dm
@@ -8,6 +8,7 @@
/datum/round_event/meteor_wave/dust
startWhen = 1
endWhen = 2
+ announceWhen = 0
/datum/round_event/meteor_wave/dust/announce()
return
diff --git a/code/modules/events/electrical_storm.dm b/code/modules/events/electrical_storm.dm
index 51fa161ef23..4ccd64f5cd9 100644
--- a/code/modules/events/electrical_storm.dm
+++ b/code/modules/events/electrical_storm.dm
@@ -7,7 +7,7 @@
/datum/round_event/electrical_storm
var/lightsoutAmount = 1
var/lightsoutRange = 25
-
+ announceWhen = 1
/datum/round_event/electrical_storm/announce()
priority_announce("An electrical storm has been detected in your area, please repair potential electronic overloads.", "Electrical Storm Alert")
diff --git a/code/modules/events/event.dm b/code/modules/events/event.dm
index 8b90cb13085..20ec857ef56 100644
--- a/code/modules/events/event.dm
+++ b/code/modules/events/event.dm
@@ -26,12 +26,14 @@
testing("[time2text(world.time, "hh:mm:ss")] [E.type]")
+ return E
+
/datum/round_event //NOTE: Times are measured in master controller ticks!
var/processing = 1
var/datum/round_event_control/control
var/startWhen = 0 //When in the lifetime to call start().
- var/announceWhen = 0 //When in the lifetime to call announce().
+ var/announceWhen = 0 //When in the lifetime to call announce(). Set an event's announceWhen to >0 if there is an announcement.
var/endWhen = 0 //When in the lifetime the event should end.
var/activeFor = 0 //How long the event has existed. You don't need to change this.
@@ -81,7 +83,7 @@
/datum/round_event/proc/process()
if(!processing)
return
-
+
if(activeFor == startWhen)
start()
diff --git a/code/modules/events/event_manager.dm b/code/modules/events/event_manager.dm
index 2775524fce3..0174bda76b3 100644
--- a/code/modules/events/event_manager.dm
+++ b/code/modules/events/event_manager.dm
@@ -109,18 +109,25 @@ var/datum/controller/event/events
-//allows a client to trigger an event (For Debugging Purposes)
-/client/proc/forceEvent(var/datum/round_event_control/E in events.control)
+//allows a client to trigger an event
+//aka Badmin Central
+/client/proc/forceEvent()
set name = "Trigger Event"
set category = "Fun"
if(!holder ||!check_rights(R_FUN))
return
- if(istype(E))
- E.runEvent()
- message_admins("[key_name_admin(usr)] has triggered an event. ([E.name])", 1)
- log_admin("[key_name(usr)] has triggered an event. ([E.name])")
+ holder.forceEvent()
+
+/datum/admins/proc/forceEvent()
+ var/dat = ""
+ for(var/datum/round_event_control/E in events.control)
+ dat += "
[E]"
+
+ var/datum/browser/popup = new(usr, "forceevent", "Force Random Event", 300, 750)
+ popup.set_content(dat)
+ popup.open()
/*
diff --git a/code/modules/events/holiday/halloween.dm b/code/modules/events/holiday/halloween.dm
index 9a7945d7719..ad6a82e04df 100644
--- a/code/modules/events/holiday/halloween.dm
+++ b/code/modules/events/holiday/halloween.dm
@@ -1,5 +1,5 @@
/datum/round_event_control/spooky
- name = "2 SPOOKY!"
+ name = "2 SPOOKY! (Halloween)"
holidayID = "Halloween"
typepath = /datum/round_event/spooky
weight = -1 //forces it to be called, regardless of weight
@@ -14,4 +14,4 @@
Ian.place_on_head(new /obj/item/weapon/bedsheet(Ian))
/datum/round_event/spooky/announce()
- priority_announce(pick("RATTLE ME BONES!","THE RIDE NEVER ENDS!", "A SKELETON POPS OUT!", "SPOOKY SCARY SKELETONS!", "CREWMEMBERS BEWARE, YOU'RE IN FOR A SCARE!") , "THE CALL IS COMING FROM INSIDE THE HOUSE")
+ priority_announce(pick("RATTLE ME BONES!","THE RIDE NEVER ENDS!", "A SKELETON POPS OUT!", "SPOOKY SCARY SKELETONS!", "CREWMEMBERS BEWARE, YOU'RE IN FOR A SCARE!") , "THE CALL IS COMING FROM INSIDE THE HOUSE")
diff --git a/code/modules/events/holiday/xmas.dm b/code/modules/events/holiday/xmas.dm
index d7021e0e12d..3c93432b541 100644
--- a/code/modules/events/holiday/xmas.dm
+++ b/code/modules/events/holiday/xmas.dm
@@ -1,5 +1,5 @@
/datum/round_event_control/treevenge
- name = "Treevenge"
+ name = "Treevenge (Christmas)"
holidayID = "Xmas"
typepath = /datum/round_event/treevenge
max_occurrences = 1
@@ -16,7 +16,7 @@
//this is an example of a possible round-start event
/datum/round_event_control/presents
- name = "Presents under Trees"
+ name = "Presents under Trees (Christmas)"
holidayID = "Xmas"
typepath = /datum/round_event/presents
weight = -1 //forces it to be called, regardless of weight
diff --git a/code/modules/events/ion_storm.dm b/code/modules/events/ion_storm.dm
index a501be161be..090c7ac85ba 100644
--- a/code/modules/events/ion_storm.dm
+++ b/code/modules/events/ion_storm.dm
@@ -11,6 +11,7 @@
var/announceEvent = ION_RANDOM // -1 means don't announce, 0 means have it randomly announce, 1 means
var/ionMessage = null
var/ionAnnounceChance = 33
+ announceWhen = 1
/datum/round_event/ion_storm/New(var/botEmagChance = 10, var/announceEvent = ION_RANDOM, var/ionMessage = null, var/ionAnnounceChance = 33)
src.botEmagChance = botEmagChance
diff --git a/code/modules/events/meateor_wave.dm b/code/modules/events/meateor_wave.dm
index d66ef27596f..b45140ad5ee 100644
--- a/code/modules/events/meateor_wave.dm
+++ b/code/modules/events/meateor_wave.dm
@@ -5,8 +5,7 @@
max_occurrences = 1
/datum/round_event/meteor_wave/meaty/announce()
- if(announce)
- priority_announce("Meaty ores have been detected on collision course with the station.", "Oh Crap, Get The Mop.",'sound/AI/meteors.ogg')
+ priority_announce("Meaty ores have been detected on collision course with the station.", "Oh Crap, Get The Mop.",'sound/AI/meteors.ogg')
/datum/round_event/meteor_wave/meaty/tick()
if(IsMultiple(activeFor, 3))
diff --git a/code/modules/events/meteor_wave.dm b/code/modules/events/meteor_wave.dm
index 2063f369194..6effd5fc41f 100644
--- a/code/modules/events/meteor_wave.dm
+++ b/code/modules/events/meteor_wave.dm
@@ -7,15 +7,10 @@
/datum/round_event/meteor_wave
startWhen = 6
endWhen = 66
- var/announce = 1
-
-/datum/round_event/meteor_wave/New(should_announce = 1)
- ..()
- announce = should_announce
+ announceWhen = 1
/datum/round_event/meteor_wave/announce()
- if(announce)
- priority_announce("Meteors have been detected on collision course with the station.", "Meteor Alert", 'sound/AI/meteors.ogg')
+ priority_announce("Meteors have been detected on collision course with the station.", "Meteor Alert", 'sound/AI/meteors.ogg')
/datum/round_event/meteor_wave/tick()
diff --git a/code/modules/events/radiation_storm.dm b/code/modules/events/radiation_storm.dm
index 8053cea32db..55b30f45011 100644
--- a/code/modules/events/radiation_storm.dm
+++ b/code/modules/events/radiation_storm.dm
@@ -10,6 +10,7 @@
/datum/round_event/radiation_storm/setup()
startWhen = rand(10, 20)
endWhen = startWhen + 5
+ 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')
diff --git a/code/modules/events/shuttle_loan.dm b/code/modules/events/shuttle_loan.dm
index d785caa4292..28587ed7942 100644
--- a/code/modules/events/shuttle_loan.dm
+++ b/code/modules/events/shuttle_loan.dm
@@ -15,6 +15,7 @@
var/bonus_points = 100
var/thanks_msg = "Have some supply points as thanks (the shuttle will be returned in 5 minutes)."
var/dispatched = 0
+ announceWhen = 1
/datum/round_event/shuttle_loan/start()
dispatch_type = pick(HIJACK_SYNDIE, RUSKY_PARTY, SPIDER_GIFT, DEPARTMENT_RESUPPLY)
diff --git a/code/modules/events/vent_clog.dm b/code/modules/events/vent_clog.dm
index f202148ca29..db410577ab7 100644
--- a/code/modules/events/vent_clog.dm
+++ b/code/modules/events/vent_clog.dm
@@ -4,7 +4,7 @@
weight = 35
/datum/round_event/vent_clog
- announceWhen = 0
+ announceWhen = 1
startWhen = 5
endWhen = 35
var/interval = 2
diff --git a/code/modules/events/weightless.dm b/code/modules/events/weightless.dm
index bc1e79f91d9..9d98ca5db59 100644
--- a/code/modules/events/weightless.dm
+++ b/code/modules/events/weightless.dm
@@ -6,6 +6,7 @@
/datum/round_event/weightless
startWhen = 5
endWhen = 65
+ announceWhen = 1
/datum/round_event/weightless/setup()
startWhen = rand(0,10)
@@ -17,7 +18,7 @@
/datum/round_event/weightless/start()
for(var/area/A in world)
A.gravitychange(0)
-
+
if(control)
control.weight *= 2