diff --git a/code/__DEFINES/gamemode.dm b/code/__DEFINES/gamemode.dm new file mode 100644 index 000000000000..04d64f3572e6 --- /dev/null +++ b/code/__DEFINES/gamemode.dm @@ -0,0 +1,18 @@ +#define QUEEN_DEATH_COUNTDOWN 10 MINUTES + +#define MODE_INFESTATION_X_MAJOR "Xenomorph Major Victory" +#define MODE_INFESTATION_M_MAJOR "Marine Major Victory" +#define MODE_INFESTATION_X_MINOR "Xenomorph Minor Victory" +#define MODE_INFESTATION_M_MINOR "Marine Minor Victory" +#define MODE_INFESTATION_DRAW_DEATH "DRAW: Mutual Annihilation" + +#define MODE_INFECTION_ZOMBIE_WIN "Major Zombie Victory" + +#define MODE_BATTLEFIELD_W_MAJOR "Wey-Yu PMC Major Success" +#define MODE_BATTLEFIELD_M_MAJOR "Marine Major Success" +#define MODE_BATTLEFIELD_W_MINOR "Wey-Yu PMC Minor Success" +#define MODE_BATTLEFIELD_M_MINOR "Marine Minor Success" +#define MODE_BATTLEFIELD_DRAW_STALEMATE "DRAW: Stalemate" +#define MODE_BATTLEFIELD_DRAW_DEATH "DRAW: My Friends Are Dead" + +#define MODE_GENERIC_DRAW_NUKE "DRAW: Nuclear Explosion" diff --git a/code/datums/statistics/entities/round_caste_picks.dm b/code/datums/statistics/entities/round_caste_picks.dm index 761838e84683..1a51873465c2 100644 --- a/code/datums/statistics/entities/round_caste_picks.dm +++ b/code/datums/statistics/entities/round_caste_picks.dm @@ -3,16 +3,20 @@ var/round_id /// Dict of "castename" : amount picked var/list/castes_picked + /// If xenos won (major or minor) + var/xenos_won = FALSE /datum/entity/round_caste_picks/New() . = ..() round_id = GLOB.round_id || -1 + if(SSticker.mode.round_finished == MODE_INFESTATION_X_MAJOR || SSticker.mode.round_finished == MODE_INFESTATION_X_MINOR) + xenos_won = TRUE /datum/entity/round_caste_picks/assign_values(list/values, list/ignore = list()) for(var/field in metadata.field_types) if(ignore.Find(field)) continue - if(field == "round_id") + if((field == "round_id") || (field == "xenos_won")) vars[field] = values[field] else castes_picked[field] = values[field] @@ -22,6 +26,7 @@ table_name = "round_caste_picks" field_types = list( "round_id" = DB_FIELDTYPE_INT, + "xenos_won" = DB_FIELDTYPE_INT, ) /datum/entity_meta/round_caste_picks/New() @@ -30,10 +35,9 @@ field_types[lowertext(replacetext(caste_name, " ", "_"))] = DB_FIELDTYPE_INT /datum/entity_meta/round_caste_picks/map(datum/entity/round_caste_picks/entity, list/values) - var/strid = "[values[DB_DEFAULT_ID_FIELD]]" - entity.id = strid + entity.id = "[values[DB_DEFAULT_ID_FIELD]]" for(var/field in field_types) - if(field == "round_id") + if((field == "round_id") || (field == "xenos_won")) entity.vars[field] = values[field] else entity.castes_picked[field] = values[field] @@ -43,7 +47,7 @@ if(include_id) values[DB_DEFAULT_ID_FIELD] = entity.id for(var/field in field_types) - if(field == "round_id") + if((field == "round_id") || (field == "xenos_won")) values[field] = entity.vars[field] else values[field] = entity.castes_picked[field] diff --git a/code/datums/statistics/entities/round_stats.dm b/code/datums/statistics/entities/round_stats.dm index 7ff793336619..d4941cb970e8 100644 --- a/code/datums/statistics/entities/round_stats.dm +++ b/code/datums/statistics/entities/round_stats.dm @@ -313,6 +313,9 @@ track_dead_participant(new_death.faction_name) /datum/entity/statistic/round/proc/store_caste_evo_data() + if(!istype(SSticker.mode, /datum/game_mode/colonialmarines)) + return + var/datum/entity/round_caste_picks/caste_picks = SSentity_manager.tables[/datum/entity/round_caste_picks].make_new() caste_picks.castes_picked = castes_evolved caste_picks.save() diff --git a/code/datums/statistics/entities/xeno_death.dm b/code/datums/statistics/entities/xeno_death.dm index e416e014182b..2581163d12ac 100644 --- a/code/datums/statistics/entities/xeno_death.dm +++ b/code/datums/statistics/entities/xeno_death.dm @@ -27,6 +27,8 @@ var/killed_by /// Round ID that this xeno died in var/round_id + /// How many kills this xeno got + var/kill_count /datum/entity/xeno_death/proc/load_data(mob/living/carbon/xenomorph/dead_xeno, datum/cause_data/death_cause) map_name = SSmapping.configs[GROUND_MAP]?.map_name || "Unknown Map" @@ -43,6 +45,7 @@ damage_taken = dead_xeno.life_damage_taken_total || 0 killed_by = strip_improper(death_cause.cause_name) || "Unknown" round_id = GLOB.round_id || -1 + kill_count = dead_xeno.life_kills_total || 0 SSticker?.mode?.round_stats?.xeno_deaths += src save() @@ -65,4 +68,5 @@ "damage_taken" = DB_FIELDTYPE_INT, "killed_by" = DB_FIELDTYPE_STRING_MEDIUM, "round_id" = DB_FIELDTYPE_INT, + "kill_count" = DB_FIELDTYPE_INT, ) diff --git a/code/game/gamemodes/cm_process.dm b/code/game/gamemodes/cm_process.dm index 7dc31d6e55da..1056e866744f 100644 --- a/code/game/gamemodes/cm_process.dm +++ b/code/game/gamemodes/cm_process.dm @@ -1,22 +1,4 @@ -#define QUEEN_DEATH_COUNTDOWN 10 MINUTES //10 minutes. Can be changed into a variable if it needs to be manipulated later. - -#define MODE_INFESTATION_X_MAJOR "Xenomorph Major Victory" -#define MODE_INFESTATION_M_MAJOR "Marine Major Victory" -#define MODE_INFESTATION_X_MINOR "Xenomorph Minor Victory" -#define MODE_INFESTATION_M_MINOR "Marine Minor Victory" -#define MODE_INFESTATION_DRAW_DEATH "DRAW: Mutual Annihilation" - -#define MODE_INFECTION_ZOMBIE_WIN "Major Zombie Victory" - -#define MODE_BATTLEFIELD_W_MAJOR "Wey-Yu PMC Major Success" -#define MODE_BATTLEFIELD_M_MAJOR "Marine Major Success" -#define MODE_BATTLEFIELD_W_MINOR "Wey-Yu PMC Minor Success" -#define MODE_BATTLEFIELD_M_MINOR "Marine Minor Success" -#define MODE_BATTLEFIELD_DRAW_STALEMATE "DRAW: Stalemate" -#define MODE_BATTLEFIELD_DRAW_DEATH "DRAW: My Friends Are Dead" - -#define MODE_GENERIC_DRAW_NUKE "DRAW: Nuclear Explosion" /* Like with cm_initialize.dm, these procs exist to quickly populate classic CM game modes. diff --git a/code/modules/mob/living/carbon/xenomorph/Evolution.dm b/code/modules/mob/living/carbon/xenomorph/Evolution.dm index 7f5b70c53d12..4f288af48fcf 100644 --- a/code/modules/mob/living/carbon/xenomorph/Evolution.dm +++ b/code/modules/mob/living/carbon/xenomorph/Evolution.dm @@ -207,7 +207,7 @@ GLOBAL_LIST_EMPTY(deevolved_ckeys) // We prevent de-evolved people from being tracked for the rest of the round relating to T1s in order to prevent people // Intentionally de/re-evolving to mess with the stats gathered. We don't track t2/3 because it's a legit strategy to open // With a t1 into drone before de-evoing later to go t1 into another caste once survs are dead/capped - if(new_xeno.ckey && !((new_xeno.caste.caste_type in XENO_T1_CASTES) && (new_xeno.ckey in GLOB.deevolved_ckeys))) + if(new_xeno.ckey && !((new_xeno.caste.caste_type in XENO_T1_CASTES) && (new_xeno.ckey in GLOB.deevolved_ckeys) && !(new_xeno.datum_flags & DF_VAR_EDITED))) var/caste_cleaned_key = lowertext(replacetext(castepick, " ", "_")) if(!SSticker.mode?.round_stats.castes_evolved[caste_cleaned_key]) SSticker.mode?.round_stats.castes_evolved[caste_cleaned_key] = 1 diff --git a/code/modules/mob/living/carbon/xenomorph/death.dm b/code/modules/mob/living/carbon/xenomorph/death.dm index 492a159535d6..eed7bc704a2b 100644 --- a/code/modules/mob/living/carbon/xenomorph/death.dm +++ b/code/modules/mob/living/carbon/xenomorph/death.dm @@ -27,8 +27,9 @@ update_icons() if(!should_block_game_interaction(src)) //so xeno players don't get death messages from admin tests - var/datum/entity/xeno_death/death_log = SSentity_manager.tables[/datum/entity/xeno_death].make_new() - death_log.load_data(src, cause) + if(!(datum_flags & DF_VAR_EDITED) && istype(SSticker.mode, /datum/game_mode/colonialmarines)) + var/datum/entity/xeno_death/death_log = DB_ENTITY(/datum/entity/xeno_death) + death_log.load_data(src, cause) if(isqueen(src)) var/mob/living/carbon/xenomorph/queen/XQ = src diff --git a/colonialmarines.dme b/colonialmarines.dme index 5ff78ebca305..955fea187b2a 100644 --- a/colonialmarines.dme +++ b/colonialmarines.dme @@ -61,6 +61,7 @@ #include "code\__DEFINES\fire.dm" #include "code\__DEFINES\flags.dm" #include "code\__DEFINES\fonts.dm" +#include "code\__DEFINES\gamemode.dm" #include "code\__DEFINES\generators.dm" #include "code\__DEFINES\guns.dm" #include "code\__DEFINES\hijack.dm"