Ported Autohisses and Autohiss Unit Test (#17575)

* autohiss exclusion test

* show how many hisses

* weird list

* fixed check

* paths are not datums lol

* consolidate check

* use trait global

* another check

* nullchecking

* more type stuff

* type needed

* restored a missing autohiss, and fixed exclusions

* more missing exclusions

* more missing

* yingish from outpost

* don't exclude self
This commit is contained in:
Will
2025-04-25 21:42:05 +02:00
committed by GitHub
parent 88538db6ec
commit af7eee3fbc
3 changed files with 231 additions and 8 deletions
@@ -55,11 +55,11 @@
activation_message="Your body feels chilly."
primitive_expression_messages=list("shivers.")
/datum/trait/neutral/autohiss_unathi
name = "Autohiss (Unathi)"
desc = "You roll your S's and x's"
cost = 0
custom_only = FALSE
var_changes = list(
autohiss_basic_map = list(
"s" = list("ss", "sss", "ssss")
@@ -68,25 +68,43 @@
"x" = list("ks", "kss", "ksss")
),
autohiss_exempt = list(LANGUAGE_UNATHI))
excludes = list(/datum/trait/neutral/autohiss_tajaran, /datum/trait/neutral/autohiss_zaddat)
custom_only = FALSE
excludes = list(
/datum/trait/neutral/autohiss_tajaran,
/datum/trait/neutral/autohiss_zaddat,
/datum/trait/neutral/autohiss_vassilian,
/datum/trait/neutral/autohiss_yingish,
/datum/trait/neutral/autohiss_unathi/xenochimera,
/datum/trait/neutral/autohiss_tajaran/xenochimera,
/datum/trait/neutral/autohiss_zaddat/xenochimera,
/datum/trait/neutral/autohiss_vassilian/xenochimera,
/datum/trait/neutral/autohiss_yingish/xenochimera)
/datum/trait/neutral/autohiss_tajaran
name = "Autohiss (Tajaran)"
desc = "You roll your R's."
cost = 0
custom_only = FALSE
var_changes = list(
autohiss_basic_map = list(
"r" = list("rr", "rrr", "rrrr")
),
autohiss_exempt = list(LANGUAGE_SIIK,LANGUAGE_AKHANI,LANGUAGE_ALAI))
excludes = list(/datum/trait/neutral/autohiss_unathi, /datum/trait/neutral/autohiss_zaddat)
custom_only = FALSE
excludes = list(
/datum/trait/neutral/autohiss_unathi,
/datum/trait/neutral/autohiss_zaddat,
/datum/trait/neutral/autohiss_vassilian,
/datum/trait/neutral/autohiss_yingish,
/datum/trait/neutral/autohiss_unathi/xenochimera,
/datum/trait/neutral/autohiss_tajaran/xenochimera,
/datum/trait/neutral/autohiss_zaddat/xenochimera,
/datum/trait/neutral/autohiss_vassilian/xenochimera,
/datum/trait/neutral/autohiss_yingish/xenochimera)
/datum/trait/neutral/autohiss_zaddat
name = "Autohiss (Zaddat)"
desc = "You buzz your S's and F's."
cost = 0
custom_only = FALSE
var_changes = list(
autohiss_basic_map = list(
"f" = list("v","vh"),
@@ -99,8 +117,70 @@
"v" = list("vv", "vvv")
),
autohiss_exempt = list(LANGUAGE_ZADDAT,LANGUAGE_VESPINAE))
excludes = list(/datum/trait/neutral/autohiss_tajaran, /datum/trait/neutral/autohiss_unathi)
excludes = list(
/datum/trait/neutral/autohiss_tajaran,
/datum/trait/neutral/autohiss_unathi,
/datum/trait/neutral/autohiss_vassilian,
/datum/trait/neutral/autohiss_yingish,
/datum/trait/neutral/autohiss_unathi/xenochimera,
/datum/trait/neutral/autohiss_tajaran/xenochimera,
/datum/trait/neutral/autohiss_zaddat/xenochimera,
/datum/trait/neutral/autohiss_vassilian/xenochimera,
/datum/trait/neutral/autohiss_yingish/xenochimera)
/datum/trait/neutral/autohiss_vassilian
name = "Autohiss (Vassilian)"
desc = "You buzz your S's, F's, Th's, and R's."
cost = 0
custom_only = FALSE
var_changes = list(
autohiss_basic_map = list(
"s" = list("sz", "z", "zz"),
"f" = list("zk")
),
autohiss_extra_map = list(
"th" = list("zk", "szk"),
"r" = list("rk")
),
autohiss_exempt = list(LANGUAGE_VESPINAE))
excludes = list(
/datum/trait/neutral/autohiss_tajaran,
/datum/trait/neutral/autohiss_unathi,
/datum/trait/neutral/autohiss_zaddat,
/datum/trait/neutral/autohiss_yingish,
/datum/trait/neutral/autohiss_unathi/xenochimera,
/datum/trait/neutral/autohiss_tajaran/xenochimera,
/datum/trait/neutral/autohiss_zaddat/xenochimera,
/datum/trait/neutral/autohiss_vassilian/xenochimera,
/datum/trait/neutral/autohiss_yingish/xenochimera)
/datum/trait/neutral/autohiss_yingish
name = "Autohiss (Yingish)"
desc = "You pronounce th's with a lisp, a bit like zhis!"
cost = 0
custom_only = FALSE
var_changes = list(
autohiss_basic_map = list(
"thi" = list("z"),
"shi" = list("z"),
"tha" = list("z"),
"tho" = list("z")
),
autohiss_extra_map = list(
"the" = list("z"),
"so" = list("z")
),
autohiss_exempt = list())
excludes = list(
/datum/trait/neutral/autohiss_tajaran,
/datum/trait/neutral/autohiss_unathi,
/datum/trait/neutral/autohiss_zaddat,
/datum/trait/neutral/autohiss_vassilian,
/datum/trait/neutral/autohiss_unathi/xenochimera,
/datum/trait/neutral/autohiss_tajaran/xenochimera,
/datum/trait/neutral/autohiss_zaddat/xenochimera,
/datum/trait/neutral/autohiss_vassilian/xenochimera,
/datum/trait/neutral/autohiss_yingish/xenochimera)
/datum/trait/neutral/bloodsucker
name = "Bloodsucker, Obligate"
@@ -1475,7 +1555,16 @@
"x" = list("ks", "kss", "ksss")
),
autohiss_exempt = list("Sinta'unathi"))
excludes = list(/datum/trait/neutral/autohiss_tajaran)
excludes = list(
/datum/trait/neutral/autohiss_unathi,
/datum/trait/neutral/autohiss_tajaran,
/datum/trait/neutral/autohiss_zaddat,
/datum/trait/neutral/autohiss_vassilian,
/datum/trait/neutral/autohiss_yingish,
/datum/trait/neutral/autohiss_tajaran/xenochimera,
/datum/trait/neutral/autohiss_zaddat/xenochimera,
/datum/trait/neutral/autohiss_vassilian/xenochimera,
/datum/trait/neutral/autohiss_yingish/xenochimera)
/datum/trait/neutral/autohiss_tajaran/xenochimera
sort = TRAIT_SORT_SPECIES
@@ -1489,4 +1578,101 @@
"r" = list("rr", "rrr", "rrrr")
),
autohiss_exempt = list("Siik"))
excludes = list(/datum/trait/neutral/autohiss_unathi)
excludes = list(
/datum/trait/neutral/autohiss_unathi,
/datum/trait/neutral/autohiss_tajaran,
/datum/trait/neutral/autohiss_zaddat,
/datum/trait/neutral/autohiss_vassilian,
/datum/trait/neutral/autohiss_yingish,
/datum/trait/neutral/autohiss_unathi/xenochimera,
/datum/trait/neutral/autohiss_zaddat/xenochimera,
/datum/trait/neutral/autohiss_vassilian/xenochimera,
/datum/trait/neutral/autohiss_yingish/xenochimera)
/datum/trait/neutral/autohiss_zaddat/xenochimera
sort = TRAIT_SORT_SPECIES
allowed_species = list(SPECIES_XENOCHIMERA)
name = "Xenochimera: Autohiss (Zaddat)"
desc = "You buzz your S's and F's."
cost = 0
custom_only = FALSE
var_changes = list(
autohiss_basic_map = list(
"f" = list("v","vh"),
"ph" = list("v", "vh")
),
autohiss_extra_map = list(
"s" = list("z", "zz", "zzz"),
"ce" = list("z", "zz"),
"ci" = list("z", "zz"),
"v" = list("vv", "vvv")
),
autohiss_exempt = list(LANGUAGE_ZADDAT,LANGUAGE_VESPINAE))
excludes = list(
/datum/trait/neutral/autohiss_tajaran,
/datum/trait/neutral/autohiss_unathi,
/datum/trait/neutral/autohiss_zaddat,
/datum/trait/neutral/autohiss_vassilian,
/datum/trait/neutral/autohiss_yingish,
/datum/trait/neutral/autohiss_unathi/xenochimera,
/datum/trait/neutral/autohiss_tajaran/xenochimera,
/datum/trait/neutral/autohiss_vassilian/xenochimera,
/datum/trait/neutral/autohiss_yingish/xenochimera)
/datum/trait/neutral/autohiss_vassilian/xenochimera
sort = TRAIT_SORT_SPECIES
allowed_species = list(SPECIES_XENOCHIMERA)
name = "Xenochimera: Autohiss (Vassilian)"
desc = "You buzz your S's, F's, Th's, and R's."
cost = 0
custom_only = FALSE
var_changes = list(
autohiss_basic_map = list(
"s" = list("sz", "z", "zz"),
"f" = list("zk")
),
autohiss_extra_map = list(
"th" = list("zk", "szk"),
"r" = list("rk")
),
autohiss_exempt = list(LANGUAGE_VESPINAE))
excludes = list(
/datum/trait/neutral/autohiss_tajaran,
/datum/trait/neutral/autohiss_unathi,
/datum/trait/neutral/autohiss_zaddat,
/datum/trait/neutral/autohiss_vassilian,
/datum/trait/neutral/autohiss_yingish,
/datum/trait/neutral/autohiss_unathi/xenochimera,
/datum/trait/neutral/autohiss_tajaran/xenochimera,
/datum/trait/neutral/autohiss_zaddat/xenochimera,
/datum/trait/neutral/autohiss_yingish/xenochimera)
/datum/trait/neutral/autohiss_yingish/xenochimera
sort = TRAIT_SORT_SPECIES
allowed_species = list(SPECIES_XENOCHIMERA)
name = "Xenochimera: Autohiss (Yingish)"
desc = "You pronounce th's with a lisp, a bit like zhis!"
cost = 0
custom_only = FALSE
var_changes = list(
autohiss_basic_map = list(
"thi" = list("z"),
"shi" = list("z"),
"tha" = list("z"),
"tho" = list("z")
),
autohiss_extra_map = list(
"the" = list("z"),
"so" = list("z")
),
autohiss_exempt = list())
excludes = list(
/datum/trait/neutral/autohiss_tajaran,
/datum/trait/neutral/autohiss_unathi,
/datum/trait/neutral/autohiss_zaddat,
/datum/trait/neutral/autohiss_vassilian,
/datum/trait/neutral/autohiss_yingish,
/datum/trait/neutral/autohiss_unathi/xenochimera,
/datum/trait/neutral/autohiss_tajaran/xenochimera,
/datum/trait/neutral/autohiss_zaddat/xenochimera,
/datum/trait/neutral/autohiss_vassilian/xenochimera)
+36
View File
@@ -0,0 +1,36 @@
/datum/unit_test/autohiss_shall_be_exclusive
name = "TRAITS: Autohiss traits shall be exclusive"
/datum/unit_test/autohiss_shall_be_exclusive/start_test()
var/failed = FALSE
var/list/hiss_list = list()
for(var/traitpath in GLOB.all_traits)
var/datum/trait/T = GLOB.all_traits[traitpath]
if(!T.var_changes)
continue
if(!islist(T.var_changes["autohiss_basic_map"]))
continue
hiss_list += T
for(var/datum/trait/T in hiss_list)
if(T.type in T.excludes)
log_unit_test("[T.type]: Trait - Autohiss excludes itself.")
failed = TRUE
if(!T.excludes)
log_unit_test("[T.type]: Trait - Autohiss missing exclusion list.")
failed = TRUE
continue
var/list/exempt_list = hiss_list.Copy() - T // MUST exclude all others except itself
for(var/datum/trait/EX in exempt_list)
if(!(EX.type in T.excludes))
log_unit_test("[T.type]: Trait - Autohiss missing exclusion for [EX].")
failed = TRUE
if(failed)
fail("One or more autohiss traits allow another autohiss to be chosen with it.")
else
pass("All [hiss_list.len] autohiss traits are properly exclusive.")
return failed
+1
View File
@@ -4482,6 +4482,7 @@
#include "code\modules\xenobio\machinery\processor.dm"
#include "code\modules\xgm\xgm_gas_data.dm"
#include "code\modules\xgm\xgm_gas_mixture.dm"
#include "code\unit_tests\authohiss_tests.dm"
#include "code\unit_tests\clothing_tests.dm"
#include "code\unit_tests\cosmetic_tests.dm"
#include "code\unit_tests\decl_tests.dm"