diff --git a/code/__defines/gamemode.dm b/code/__defines/gamemode.dm index 386c3e58c4e..67bc6e53baa 100644 --- a/code/__defines/gamemode.dm +++ b/code/__defines/gamemode.dm @@ -20,19 +20,20 @@ #define BE_PAI "BE_PAI" // Antagonist datum flags. -#define ANTAG_OVERRIDE_JOB 0x1 // Assigned job is set to MODE when spawning. -#define ANTAG_OVERRIDE_MOB 0x2 // Mob is recreated from datum mob_type var when spawning. -#define ANTAG_CLEAR_EQUIPMENT 0x4 // All preexisting equipment is purged. -#define ANTAG_CHOOSE_NAME 0x8 // Antagonists are prompted to enter a name. -#define ANTAG_IMPLANT_IMMUNE 0x10 // Cannot be loyalty implanted. -#define ANTAG_SUSPICIOUS 0x20 // Shows up on roundstart report. -#define ANTAG_HAS_LEADER 0x40 // Generates a leader antagonist. -#define ANTAG_HAS_NUKE 0x80 // Will spawn a nuke at supplied location. -#define ANTAG_RANDSPAWN 0x100 // Potentially randomly spawns due to events. -#define ANTAG_VOTABLE 0x200 // Can be voted as an additional antagonist before roundstart. -#define ANTAG_SET_APPEARANCE 0x400 // Causes antagonists to use an appearance modifier on spawn. -#define ANTAG_RANDOM_EXCEPTED 0x800 // If a game mode randomly selects antag types, antag types with this flag should be excluded. -#define ANTAG_NO_FLAVORTEXT 0x1000 // To prevent flavor text from being scrubbed from crewmember intruders +#define ANTAG_OVERRIDE_JOB 0x1 // Assigned job is set to MODE when spawning. +#define ANTAG_OVERRIDE_MOB 0x2 // Mob is recreated from datum mob_type var when spawning. +#define ANTAG_CLEAR_EQUIPMENT 0x4 // All preexisting equipment is purged. +#define ANTAG_CHOOSE_NAME 0x8 // Antagonists are prompted to enter a name. +#define ANTAG_IMPLANT_IMMUNE 0x10 // Cannot be loyalty implanted. +#define ANTAG_SUSPICIOUS 0x20 // Shows up on roundstart report. +#define ANTAG_HAS_LEADER 0x40 // Generates a leader antagonist. +#define ANTAG_HAS_NUKE 0x80 // Will spawn a nuke at supplied location. +#define ANTAG_RANDSPAWN 0x100 // Potentially randomly spawns due to events. +#define ANTAG_VOTABLE 0x200 // Can be voted as an additional antagonist before roundstart. +#define ANTAG_SET_APPEARANCE 0x400 // Causes antagonists to use an appearance modifier on spawn. +#define ANTAG_RANDOM_EXCEPTED 0x800 // If a game mode randomly selects antag types, antag types with this flag should be excluded. +#define ANTAG_NO_FLAVORTEXT 0x1000 // To prevent flavor text from being scrubbed from crewmember intruders +#define ANTAG_NO_ROUNDSTART_SPAWN 0x2000 // Prevents the antag from spawning at roundstart // Mode/antag template macros. #define MODE_BORER "borer" diff --git a/code/game/antagonist/outsider/revenant.dm b/code/game/antagonist/outsider/revenant.dm index 8ddfcfa26a6..8391cb89e92 100644 --- a/code/game/antagonist/outsider/revenant.dm +++ b/code/game/antagonist/outsider/revenant.dm @@ -6,6 +6,7 @@ var/datum/antagonist/revenant/revenants = null role_text_plural = "Revenants" welcome_text = "A creature borne of bluespace, you are here to wreak havoc and put an end to bluespace experimentation, one station at a time." antaghud_indicator = "hudrevenant" + flags = ANTAG_NO_ROUNDSTART_SPAWN initial_spawn_req = 0 initial_spawn_target = 0 hard_cap = 12 diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index d7c4f784fc1..7d957306189 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -284,7 +284,8 @@ var/global/list/additional_antag_types = list() for(var/datum/antagonist/antag in antag_templates) if(!(antag.flags & ANTAG_OVERRIDE_JOB)) antag.attempt_spawn() //select antags to be spawned - antag.finalize_spawn() //actually spawn antags + if(!(antag.flags & ANTAG_NO_ROUNDSTART_SPAWN)) + antag.finalize_spawn() //actually spawn antags if(emergency_shuttle && auto_recall_shuttle) emergency_shuttle.auto_recall = 1 diff --git a/code/modules/client/preference_setup/antagonism/01_candidacy.dm b/code/modules/client/preference_setup/antagonism/01_candidacy.dm index 58d8100e6de..512c8580801 100644 --- a/code/modules/client/preference_setup/antagonism/01_candidacy.dm +++ b/code/modules/client/preference_setup/antagonism/01_candidacy.dm @@ -44,6 +44,8 @@ var/is_global_banned = jobban_isbanned(preference_mob(), "Antagonist") for(var/antag_type in all_antag_types) var/datum/antagonist/antag = all_antag_types[antag_type] + if(antag.flags & ANTAG_NO_ROUNDSTART_SPAWN) + continue dat += "[antag.role_text]: " var/ban_reason = jobban_isbanned(preference_mob(), antag.bantype) if(ban_reason == "AGE WHITELISTED") diff --git a/code/modules/ghostroles/spawner/base.dm b/code/modules/ghostroles/spawner/base.dm index 0844e1b589e..d2f78c5eca7 100644 --- a/code/modules/ghostroles/spawner/base.dm +++ b/code/modules/ghostroles/spawner/base.dm @@ -126,11 +126,13 @@ if(T) //If we have a spawnpoint, return it return T if(!isnull(landmark_name)) - var/obj/effect/landmark/L + var/list/possible_landmarks = list() for(var/obj/effect/landmark/landmark in landmarks_list) if(landmark.name == landmark_name) - L = landmark - return get_turf(L) + possible_landmarks += landmark + if(length(possible_landmarks)) + var/obj/effect/landmark/L = pick(possible_landmarks) + return get_turf(L) log_debug("Ghostspawner: Spawner [short_name] has neither spawnpoints nor landmarks or a matching spawnpoint/landmark could not be found") diff --git a/html/changelogs/geeves-revenant_fixes.yml b/html/changelogs/geeves-revenant_fixes.yml new file mode 100644 index 00000000000..e9cddc3ca0d --- /dev/null +++ b/html/changelogs/geeves-revenant_fixes.yml @@ -0,0 +1,7 @@ +author: Geeves + +delete-after: True + +changes: + - bugfix: "Fixed the revenant gamemode assigning roundstart humans as revenants." + - bugfix: "Fixed all revenants spawning at the radiators."