diff --git a/code/modules/unit_tests/mob_spawn.dm b/code/modules/unit_tests/mob_spawn.dm index b26bb4666f933..609d036aa511b 100644 --- a/code/modules/unit_tests/mob_spawn.dm +++ b/code/modules/unit_tests/mob_spawn.dm @@ -2,6 +2,8 @@ /datum/unit_test/mob_spawn /datum/unit_test/mob_spawn/Run() + // The ghost role that we're going to iterate over. defined all the way up here for easy/cleaner static analysis + var/obj/effect/mob_spawn/ghost_role/ghost_role //these are not expected to be filled out as they are base prototypes var/list/prototypes = list( @@ -12,39 +14,41 @@ /obj/effect/mob_spawn/ghost_role/human, ) - //ghost role checks + //vars that must not be set if the mob type isn't human + var/static/list/human_only_vars = list( + NAMEOF(ghost_role, facial_haircolor), + NAMEOF(ghost_role, facial_hairstyle), + NAMEOF(ghost_role, haircolor), + NAMEOF(ghost_role, hairstyle), + NAMEOF(ghost_role, mob_species), + NAMEOF(ghost_role, outfit), + NAMEOF(ghost_role, skin_tone), + ) + + //vars that must be set on all ghost roles. + var/static/list/required_vars = list( + //mob_type is not included because the errors on it are loud and some types choose their mob_type on selection + NAMEOF(ghost_role, prompt_name) = "Your ghost role has broken tgui without it.", + //these must be set even if show_flavor is false because the spawn menu still uses them and we simply must have higher quality roles + NAMEOF(ghost_role, flavour_text) = "Spawners menu uses it.", + NAMEOF(ghost_role, you_are_text) = "Spawners menu uses it.", + ) + + //ghost role checks - where the actual work is done for(var/role_spawn_path in subtypesof(/obj/effect/mob_spawn/ghost_role) - prototypes) - var/obj/effect/mob_spawn/ghost_role/ghost_role = allocate(role_spawn_path) + ghost_role = allocate(role_spawn_path) if(ghost_role.outfit_override) TEST_FAIL("[ghost_role.type] has a defined \"outfit_override\" list, which is only for mapping. Do not set this!") var/human_type = /mob/living/carbon/human // this exists to prevent being caught by checks if(ghost_role.mob_type != human_type) - //vars that must not be set if the mob type isn't human - var/list/human_only_vars = list( - "mob_species", - "outfit", - "hairstyle", - "facial_hairstyle", - "haircolor", - "facial_haircolor", - "skin_tone", - ) for(var/human_only_var in human_only_vars) if(ghost_role.vars[human_only_var]) TEST_FAIL("[ghost_role.type] has a defined \"[human_only_var]\" HUMAN ONLY var, but this type doesn't spawn humans.") - //vars that must be set on - var/list/required_vars = list( - //mob_type is not included because the errors on it are loud and some types choose their mob_type on selection - "prompt_name" = "Your ghost role has broken tgui without it.", - //these must be set even if show_flavor is false because the spawn menu still uses them and in 2021 we simply must have higher quality roles - "you_are_text" = "Spawners menu uses it.", - "flavour_text" = "Spawners menu uses it.", - ) for(var/required_var in required_vars) - if(required_var == "prompt_name" && !ghost_role.prompt_ghost) + if(required_var == NAMEOF(ghost_role, prompt_name) && !ghost_role.prompt_ghost) continue //only case it makes sense why you shouldn't have a prompt_name if(!ghost_role.vars[required_var]) TEST_FAIL("[ghost_role.type] must have \"[required_var]\" defined. Reason: [required_vars[required_var]]")