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"