From 7f7eb8dee4c250c0579bfecf09eefaa7ad2cefbb Mon Sep 17 00:00:00 2001 From: "bbusse@gmail.com" Date: Wed, 5 Oct 2011 02:00:41 +0000 Subject: [PATCH] Tension Report Adding a reporting function, available in the debug menu, which tracks some crude statistics for the current round and attempts to estimate the round's current level of stuff happening (or lack thereof) for more consistent and focused badminnery. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@2329 316c924e-a436-60f5-8080-3fe189b3f50e --- code/datums/helper_datums/tension.dm | 57 +++++++++++++++++++ code/game/master_controller.dm | 5 ++ code/game/objects/explosion.dm | 2 + code/modules/admin/admin_verbs.dm | 1 + code/modules/admin/verbs/diagnostics.dm | 28 ++++++++- code/modules/mob/living/carbon/human/death.dm | 2 + tgstation.dme | 1 + 7 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 code/datums/helper_datums/tension.dm diff --git a/code/datums/helper_datums/tension.dm b/code/datums/helper_datums/tension.dm new file mode 100644 index 00000000000..8c887e5924a --- /dev/null +++ b/code/datums/helper_datums/tension.dm @@ -0,0 +1,57 @@ +#define PLAYER_WEIGHT 1 +#define HUMAN_DEATH -500 +#define OTHER_DEATH -500 +#define EXPLO_SCORE -1000 //boum + +//estimated stats +//80 minute round +//60 player server +//48k player-ticks + +//60 deaths (ideally) +//20 explosions + + +var/global/datum/tension/tension_master + +/datum/tension + var/score + + var/deaths + var/human_deaths + var/explosions + + + + proc/process() + score += get_num_players()*PLAYER_WEIGHT + + proc/get_num_players() + var/peeps = 0 + for (var/mob/M in world) + if (!M.client) + continue + peeps += 1 + + return peeps + + proc/death(var/mob/M) + if (!M) return + deaths++ + + if (istype(M,/mob/living/carbon/human)) + score += HUMAN_DEATH + human_deaths++ + else + score += OTHER_DEATH + + + proc/explosion() + score += EXPLO_SCORE + explosions++ + + New() + score = 0 + deaths=0 + human_deaths=0 + explosions=0 \ No newline at end of file diff --git a/code/game/master_controller.dm b/code/game/master_controller.dm index c9fb845f4b7..aa82ed8324c 100644 --- a/code/game/master_controller.dm +++ b/code/game/master_controller.dm @@ -19,6 +19,9 @@ datum/controller/game_controller air_master = new /datum/controller/air_system() air_master.setup() + if(!tension_master) + tension_master = new /datum/tension() + world.tick_lag = 0.9 setup_objects() @@ -77,6 +80,8 @@ datum/controller/game_controller air_master.process() + tension_master.process() + sleep(1) sun.calc_position() diff --git a/code/game/objects/explosion.dm b/code/game/objects/explosion.dm index c1e16a59fb6..21a6db4a787 100644 --- a/code/game/objects/explosion.dm +++ b/code/game/objects/explosion.dm @@ -13,6 +13,8 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa message_admins("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range]) in area [epicenter.loc.name] ") log_game("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range]) in area [epicenter.loc.name] ") + tension_master.explosion() + if(heavy_impact_range > 1) var/datum/effect/system/explosion/E = new/datum/effect/system/explosion() E.set_up(epicenter) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index cd8355b68b1..ea512101b45 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -192,6 +192,7 @@ verbs += /client/proc/toggleadminhelpsound verbs += /client/proc/togglebuildmodeself verbs += /client/proc/hide_most_verbs + verbs += /client/proc/tension_report if (holder.level >= 3)//Trial Admin******************************************************************** verbs += /obj/admins/proc/toggleaban //abandon mob diff --git a/code/modules/admin/verbs/diagnostics.dm b/code/modules/admin/verbs/diagnostics.dm index 06c2d20fde9..3b936f2b194 100644 --- a/code/modules/admin/verbs/diagnostics.dm +++ b/code/modules/admin/verbs/diagnostics.dm @@ -193,4 +193,30 @@ dead_groups += group var/datum/air_group/dest_group = pick(dead_groups) usr.loc = pick(dest_group.members) - return \ No newline at end of file + return + + tension_report() + set category = "Debug" + set name = "Show Tension Report" + + if(!master_controller || !tension_master) + alert(usr,"Master_controller or tension_master not found.","Tension Report") + return 0 + + if (!tension_master.get_num_players()) + alert(usr,"No players found. How the fuck are you calling this?","Tension Report") + return 0 + + var/output = {"TENSION REPORT
+General Statistics
+Deaths: [tension_master.deaths]
+---- Humans: [tension_master.human_deaths]
+Explosions: [tension_master.explosions]
+
+Current Status
+Tension: [tension_master.score]
+Tension per player: [tension_master.score/tension_master.get_num_players()]
+Recommendations: not yet implemented
+"} + + usr << browse(output,"window=tensionreport") \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index 27a6f5fd12e..dba4ba3ea50 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -7,6 +7,8 @@ src.dizziness = 0 src.jitteriness = 0 + tension_master.death(src) + if (!gibbed) emote("deathgasp") //let the world KNOW WE ARE DEAD diff --git a/tgstation.dme b/tgstation.dme index 98b607f20a3..1e438c5cd6c 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -231,6 +231,7 @@ #include "code\datums\diseases\xeno_transformation.dm" #include "code\datums\helper_datums\construction_datum.dm" #include "code\datums\helper_datums\global_iterator.dm" +#include "code\datums\helper_datums\tension.dm" #include "code\datums\spells\area_teleport.dm" #include "code\datums\spells\conjure.dm" #include "code\datums\spells\emplosion.dm"