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 0000000000..8c887e5924 --- /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 c9fb845f4b..aa82ed8324 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 c1e16a59fb..21a6db4a78 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 cd8355b68b..ea512101b4 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 06c2d20fde..3b936f2b19 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 27a6f5fd12..dba4ba3ea5 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 98b607f20a..1e438c5cd6 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"