diff --git a/code/_globalvars/mapping.dm b/code/_globalvars/mapping.dm index 5ccbd4a4bc9..dd3cfc86951 100644 --- a/code/_globalvars/mapping.dm +++ b/code/_globalvars/mapping.dm @@ -35,7 +35,7 @@ GLOBAL_LIST_EMPTY(tdomeadmin) GLOBAL_LIST_EMPTY(aroomwarp) GLOBAL_LIST_EMPTY(prisonsecuritywarp) //prison security goes to these GLOBAL_LIST_EMPTY(prisonwarped) //list of players already warped -GLOBAL_LIST_EMPTY(blobstart) +GLOBAL_LIST_EMPTY(nukedisc_respawn) GLOBAL_LIST_EMPTY(ninjastart) GLOBAL_LIST_EMPTY(carplist) //list of all carp-spawn landmarks GLOBAL_LIST_EMPTY(syndicateofficer) diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 21b5c44dd20..0426f088842 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -237,12 +237,10 @@ SUBSYSTEM_DEF(ticker) Master.SetRunLevel(RUNLEVEL_GAME) // Generate the list of empty playable AI cores in the world - for(var/obj/effect/landmark/start/S in GLOB.landmarks_list) - if(S.name != "AI") + for(var/obj/effect/landmark/start/ai/A in GLOB.landmarks_list) + if(locate(/mob/living) in get_turf(A)) continue - if(locate(/mob/living) in S.loc) - continue - GLOB.empty_playable_ai_cores += new /obj/structure/AIcore/deactivated(get_turf(S)) + GLOB.empty_playable_ai_cores += new /obj/structure/AIcore/deactivated(get_turf(A)) // Setup pregenerated newsfeeds @@ -259,7 +257,7 @@ SUBSYSTEM_DEF(ticker) // Delete starting landmarks (not AI ones because we need those for AI-ize) for(var/obj/effect/landmark/start/S in GLOB.landmarks_list) - if(S.name != "AI") + if(!istype(S, /obj/effect/landmark/start/ai)) qdel(S) SSdbcore.SetRoundStart() diff --git a/code/game/gamemodes/miniantags/revenant/revenant_spawn_event.dm b/code/game/gamemodes/miniantags/revenant/revenant_spawn_event.dm index 40f6ac3398c..07f888586ae 100644 --- a/code/game/gamemodes/miniantags/revenant/revenant_spawn_event.dm +++ b/code/game/gamemodes/miniantags/revenant/revenant_spawn_event.dm @@ -28,22 +28,11 @@ var/datum/mind/player_mind = new /datum/mind(key_of_revenant) player_mind.active = 1 var/list/spawn_locs = list() - for(var/thing in GLOB.landmarks_list) - var/obj/effect/landmark/L = thing - if(isturf(L.loc)) - switch(L.name) - if("revenantspawn") - spawn_locs += L.loc - if(!spawn_locs) //If we can't find any revenant spawns, try the carp spawns - for(var/thing in GLOB.landmarks_list) - var/obj/effect/landmark/L = thing - if(isturf(L.loc)) - switch(L.name) - if("carpspawn") - spawn_locs += L.loc - if(!spawn_locs) //If we can't find either, just spawn the revenant at the player's location + for(var/obj/effect/landmark/spawner/rev/R in GLOB.landmarks_list) + spawn_locs += get_turf(R) + if(!spawn_locs) //If we can't find a good place, just spawn the revenant at the player's location spawn_locs += get_turf(player_mind.current) - if(!spawn_locs) //If we can't find THAT, then just retry + if(!spawn_locs) //If we can't find THAT, then give up kill() return var/mob/living/simple_animal/revenant/revvie = new /mob/living/simple_animal/revenant/(pick(spawn_locs)) diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index 0835c97cf17..9cd8a0c5dae 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -94,14 +94,12 @@ var/list/turf/synd_spawn = list() - for(var/thing in GLOB.landmarks_list) - var/obj/effect/landmark/A = thing - if(A.name == "Syndicate-Spawn") - synd_spawn += get_turf(A) - qdel(A) - continue + for(var/obj/effect/landmark/spawner/syndie/S in GLOB.landmarks_list) + synd_spawn += get_turf(S) + qdel(S) + continue - var/obj/effect/landmark/nuke_spawn = locate("landmark*Nuclear-Bomb") + var/obj/effect/landmark/nuke_spawn = get_turf(locate(/obj/effect/landmark/spawner/nuclear_bomb)) var/nuke_code = rand(10000, 99999) var/leader_selected = 0 diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm index 3beb0b2bb2d..658333bebb4 100644 --- a/code/game/gamemodes/nuclear/nuclearbomb.dm +++ b/code/game/gamemodes/nuclear/nuclearbomb.dm @@ -546,15 +546,15 @@ GLOBAL_VAR(bomb_set) STOP_PROCESSING(SSobj, src) return ..() - if(GLOB.blobstart.len > 0) + if(length(GLOB.nukedisc_respawn)) GLOB.poi_list.Remove(src) - var/obj/item/disk/nuclear/NEWDISK = new(pick(GLOB.blobstart)) + var/obj/item/disk/nuclear/NEWDISK = new(pick(GLOB.nukedisc_respawn)) transfer_fingerprints_to(NEWDISK) message_admins("[src] has been destroyed at ([diskturf.x], [diskturf.y], [diskturf.z] - JMP). Moving it to ([NEWDISK.x], [NEWDISK.y], [NEWDISK.z] - JMP).") log_game("[src] has been destroyed in ([diskturf.x], [diskturf.y], [diskturf.z]). Moving it to ([NEWDISK.x], [NEWDISK.y], [NEWDISK.z]).") return QDEL_HINT_HARDDEL_NOW else - error("[src] was supposed to be destroyed, but we were unable to locate a blobstart landmark to spawn a new one.") + error("[src] was supposed to be destroyed, but we were unable to locate a nukedisc_respawn landmark to spawn a new one.") return QDEL_HINT_LETMELIVE // Cancel destruction unless forced. #undef NUKE_INTACT diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index 7b83282a333..66668881064 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -79,12 +79,12 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/awaystart) //Without this away mission spawner_list = GLOB.xeno_spawn return ..() -/obj/effect/landmark/spawner/blob - name = "blobstart" - icon_state = "Blob" +/obj/effect/landmark/spawner/blob //todo: rename this and cause mapping pain + name = "nukedisc_respawn" + icon_state = "Nuke_disk" /obj/effect/landmark/spawner/blob/Initialize(mapload) - spawner_list = GLOB.blobstart + spawner_list = GLOB.nukedisc_respawn return ..() /obj/effect/landmark/spawner/late diff --git a/code/modules/admin/verbs/infiltratorteam_syndicate.dm b/code/modules/admin/verbs/infiltratorteam_syndicate.dm index 9f4222e0a73..dd125159134 100644 --- a/code/modules/admin/verbs/infiltratorteam_syndicate.dm +++ b/code/modules/admin/verbs/infiltratorteam_syndicate.dm @@ -66,15 +66,12 @@ GLOBAL_VAR_INIT(sent_syndicate_infiltration_team, 0) var/list/sit_spawns = list() var/list/sit_spawns_leader = list() - var/list/sit_spawns_mgmt = list() for(var/thing in GLOB.landmarks_list) var/obj/effect/landmark/L = thing - if(L.name == "Syndicate-Infiltrator") + if(istype(L, /obj/effect/landmark/spawner/syndicate_infiltrator)) sit_spawns += L - if(L.name == "Syndicate-Infiltrator-Leader") + if(istype(L, /obj/effect/landmark/spawner/syndicate_infiltrator_leader)) sit_spawns_leader += L - if(L.name == "Syndicate-Infiltrator-Admin") - sit_spawns_mgmt += L var/num_spawned = 1 var/team_leader = null diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index 3a7f48e6df8..3cf8215fc36 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -473,51 +473,37 @@ var/teamTwoMembers = 5 var/datum/character_save/S = new S.randomise() - for(var/thing in GLOB.landmarks_list) - var/obj/effect/landmark/L = thing - if(L.name == "tdome1") - if(teamOneMembers<=0) - break + for(var/obj/effect/landmark/L in GLOB.tdome1) + if(!teamOneMembers) + break + var/mob/living/carbon/human/newMember = new(get_turf(L)) + S.copy_to(newMember) + newMember.dna.ready_dna(newMember) + while((!theghost || !theghost.client) && candidates.len) + theghost = pick(candidates) + candidates.Remove(theghost) + if(!theghost) + qdel(newMember) + break + newMember.key = theghost.key + teamOneMembers-- + to_chat(newMember, "You are a member of the GREEN Thunderdome team! Gear up and help your team destroy the red team!") - var/mob/living/carbon/human/newMember = new(L.loc) - - S.copy_to(newMember) - - newMember.dna.ready_dna(newMember) - - while((!theghost || !theghost.client) && candidates.len) - theghost = pick(candidates) - candidates.Remove(theghost) - - if(!theghost) - qdel(newMember) - break - - newMember.key = theghost.key - teamOneMembers-- - to_chat(newMember, "You are a member of the GREEN Thunderdome team! Gear up and help your team destroy the red team!") - - if(L.name == "tdome2") - if(teamTwoMembers<=0) - break - - var/mob/living/carbon/human/newMember = new(L.loc) - - S.copy_to(newMember) - - newMember.dna.ready_dna(newMember) - - while((!theghost || !theghost.client) && candidates.len) - theghost = pick(candidates) - candidates.Remove(theghost) - - if(!theghost) - qdel(newMember) - break - - newMember.key = theghost.key - teamTwoMembers-- - to_chat(newMember, "You are a member of the RED Thunderdome team! Gear up and help your team destroy the green team!") + for(var/obj/effect/landmark/L in GLOB.tdome2) + if(!teamTwoMembers) + break + var/mob/living/carbon/human/newMember = new(get_turf(L)) + S.copy_to(newMember) + newMember.dna.ready_dna(newMember) + while((!theghost || !theghost.client) && candidates.len) + theghost = pick(candidates) + candidates.Remove(theghost) + if(!theghost) + qdel(newMember) + break + newMember.key = theghost.key + teamTwoMembers-- + to_chat(newMember, "You are a member of the RED Thunderdome team! Gear up and help your team destroy the green team!") else return 0 return 1 diff --git a/code/modules/admin/verbs/striketeam.dm b/code/modules/admin/verbs/striketeam.dm index c2158f41656..3654b717611 100644 --- a/code/modules/admin/verbs/striketeam.dm +++ b/code/modules/admin/verbs/striketeam.dm @@ -39,7 +39,7 @@ GLOBAL_VAR_INIT(sent_strike_team, 0) // Find ghosts willing to be DS var/image/source = image('icons/obj/cardboard_cutout.dmi', "cutout_deathsquad") var/list/commando_ghosts = pollCandidatesWithVeto(src, usr, COMMANDOS_POSSIBLE, "Join the DeathSquad?",, 21, 60 SECONDS, TRUE, GLOB.role_playtime_requirements[ROLE_DEATHSQUAD], TRUE, FALSE, source = source) - if(!commando_ghosts.len) + if(!length(commando_ghosts)) to_chat(usr, "Nobody volunteered to join the DeathSquad.") return @@ -49,79 +49,73 @@ GLOBAL_VAR_INIT(sent_strike_team, 0) var/commando_number = COMMANDOS_POSSIBLE //for selecting a leader var/is_leader = TRUE // set to FALSE after leader is spawned - for(var/thing in GLOB.landmarks_list) - var/obj/effect/landmark/L = thing + for(var/obj/effect/landmark/spawner/syndicate_commando/L in GLOB.landmarks_list) if(commando_number <= 0) break - if(L.name == "Commando") + if(!length(commando_ghosts)) + break - if(!commando_ghosts.len) - break + var/use_ds_borg = FALSE + var/mob/ghost_mob = pick(commando_ghosts) + commando_ghosts -= ghost_mob + if(!ghost_mob || !ghost_mob.key || !ghost_mob.client) + continue - var/use_ds_borg = FALSE - var/mob/ghost_mob = pick(commando_ghosts) - commando_ghosts -= ghost_mob - if(!ghost_mob || !ghost_mob.key || !ghost_mob.client) - continue + if(!is_leader) + var/new_dstype = alert(ghost_mob.client, "Select Deathsquad Type.", "DS Character Generation", "Organic", "Cyborg") + if(new_dstype == "Cyborg") + use_ds_borg = TRUE - if(!is_leader) - var/new_dstype = alert(ghost_mob.client, "Select Deathsquad Type.", "DS Character Generation", "Organic", "Cyborg") - if(new_dstype == "Cyborg") - use_ds_borg = TRUE + if(!ghost_mob || !ghost_mob.key || !ghost_mob.client) // Have to re-check this due to the above alert() call + continue - if(!ghost_mob || !ghost_mob.key || !ghost_mob.client) // Have to re-check this due to the above alert() call - continue + if(use_ds_borg) + var/mob/living/silicon/robot/deathsquad/R = new(get_turf(L)) + var/rnum = rand(1, 1000) + var/borgname = "Epsilon [rnum]" + R.name = borgname + R.custom_name = borgname + R.real_name = R.name + R.mind = new + R.mind.current = R + R.mind.set_original_mob(R) + R.mind.assigned_role = SPECIAL_ROLE_DEATHSQUAD + R.mind.special_role = SPECIAL_ROLE_DEATHSQUAD + R.mind.offstation_role = TRUE + if(!(R.mind in SSticker.minds)) + SSticker.minds += R.mind + SSticker.mode.traitors += R.mind + R.key = ghost_mob.key + if(nuke_code) + R.mind.store_memory("Nuke Code: [nuke_code].") + R.mind.store_memory("Mission: [input].") + to_chat(R, "You are a Special Operations cyborg, in the service of Central Command. \nYour current mission is: [input]") + else + var/mob/living/carbon/human/new_commando = create_death_commando(L, is_leader) + new_commando.mind.key = ghost_mob.key + new_commando.key = ghost_mob.key + new_commando.internal = new_commando.s_store + new_commando.update_action_buttons_icon() + if(nuke_code) + new_commando.mind.store_memory("Nuke Code: [nuke_code].") + new_commando.mind.store_memory("Mission: [input].") + to_chat(new_commando, "You are a Special Ops [is_leader ? "TEAM LEADER" : "commando"] in the service of Central Command. Check the table ahead for detailed instructions.\nYour current mission is: [input]") - if(use_ds_borg) - var/mob/living/silicon/robot/deathsquad/R = new() - R.forceMove(get_turf(L)) - var/rnum = rand(1,1000) - var/borgname = "Epsilon [rnum]" - R.name = borgname - R.custom_name = borgname - R.real_name = R.name - R.mind = new - R.mind.current = R - R.mind.set_original_mob(R) - R.mind.assigned_role = SPECIAL_ROLE_DEATHSQUAD - R.mind.special_role = SPECIAL_ROLE_DEATHSQUAD - R.mind.offstation_role = TRUE - if(!(R.mind in SSticker.minds)) - SSticker.minds += R.mind - SSticker.mode.traitors += R.mind - R.key = ghost_mob.key - if(nuke_code) - R.mind.store_memory("Nuke Code: [nuke_code].") - R.mind.store_memory("Mission: [input].") - to_chat(R, "You are a Special Operations cyborg, in the service of Central Command. \nYour current mission is: [input]") - else - var/mob/living/carbon/human/new_commando = create_death_commando(L, is_leader) - new_commando.mind.key = ghost_mob.key - new_commando.key = ghost_mob.key - new_commando.internal = new_commando.s_store - new_commando.update_action_buttons_icon() - if(nuke_code) - new_commando.mind.store_memory("Nuke Code: [nuke_code].") - new_commando.mind.store_memory("Mission: [input].") - to_chat(new_commando, "You are a Special Ops [is_leader ? "TEAM LEADER" : "commando"] in the service of Central Command. Check the table ahead for detailed instructions.\nYour current mission is: [input]") - - is_leader = FALSE - commando_number-- + is_leader = FALSE + commando_number-- //Spawns the rest of the commando gear. - for(var/thing in GLOB.landmarks_list) - var/obj/effect/landmark/L = thing - if(L.name == "Commando_Manual") - //new /obj/item/gun/energy/pulse_rifle(L.loc) - var/obj/item/paper/P = new(L.loc) - P.info = "

Good morning soldier!. This compact guide will familiarize you with standard operating procedure. There are three basic rules to follow:
#1 Work as a team.
#2 Accomplish your objective at all costs.
#3 Leave no witnesses.
You are fully equipped and stocked for your mission--before departing on the Spec. Ops. Shuttle due South, make sure that all operatives are ready. Actual mission objective will be relayed to you by Central Command through your headsets.
If deemed appropriate, Central Command will also allow members of your team to equip assault power-armor for the mission. You will find the armor storage due West of your position. Once you are ready to leave, utilize the Special Operations shuttle console and toggle the hull doors via the other console.

In the event that the team does not accomplish their assigned objective in a timely manner, or finds no other way to do so, attached below are instructions on how to operate a Nanotrasen Nuclear Device. Your operations LEADER is provided with a nuclear authentication disk and a pin-pointer for this reason. You may easily recognize them by their rank: Lieutenant, Captain, or Major. The nuclear device itself will be present somewhere on your destination.

Hello and thank you for choosing Nanotrasen for your nuclear information needs. Today's crash course will deal with the operation of a Fission Class Nanotrasen made Nuclear Device.
First and foremost, DO NOT TOUCH ANYTHING UNTIL THE BOMB IS IN PLACE. Pressing any button on the compacted bomb will cause it to extend and bolt itself into place. If this is done to unbolt it one must completely log in which at this time may not be possible.
To make the device functional:
#1 Place bomb in designated detonation zone
#2 Extend and anchor bomb (attack with hand).
#3 Insert Nuclear Auth. Disk into slot.
#4 Type numeric code into keypad ([nuke_code]).
Note: If you make a mistake press R to reset the device.
#5 Press the E button to log onto the device.
You now have activated the device. To deactivate the buttons at anytime, for example when you have already prepped the bomb for detonation, remove the authentication disk OR press the R on the keypad. Now the bomb CAN ONLY be detonated using the timer. A manual detonation is not an option.
Note: Toggle off the SAFETY.
Use the - - and + + to set a detonation time between 5 seconds and 10 minutes. Then press the timer toggle button to start the countdown. Now remove the authentication disk so that the buttons deactivate.
Note: THE BOMB IS STILL SET AND WILL DETONATE
Now before you remove the disk if you need to move the bomb you can: Toggle off the anchor, move it, and re-anchor.

The nuclear authorization code is: [nuke_code ? nuke_code : "None provided"]

Good luck, soldier!

" - P.name = "Spec. Ops Manual" - P.icon = "pamphlet-ds" - var/obj/item/stamp/centcom/stamp = new - P.stamp(stamp) - qdel(stamp) + for(var/obj/effect/landmark/spawner/commando_manual/L in GLOB.landmarks_list) + //new /obj/item/gun/energy/pulse_rifle(L.loc) + var/obj/item/paper/P = new(L.loc) + P.info = "

Good morning soldier!. This compact guide will familiarize you with standard operating procedure. There are three basic rules to follow:
#1 Work as a team.
#2 Accomplish your objective at all costs.
#3 Leave no witnesses.
You are fully equipped and stocked for your mission--before departing on the Spec. Ops. Shuttle due South, make sure that all operatives are ready. Actual mission objective will be relayed to you by Central Command through your headsets.
If deemed appropriate, Central Command will also allow members of your team to equip assault power-armor for the mission. You will find the armor storage due West of your position. Once you are ready to leave, utilize the Special Operations shuttle console and toggle the hull doors via the other console.

In the event that the team does not accomplish their assigned objective in a timely manner, or finds no other way to do so, attached below are instructions on how to operate a Nanotrasen Nuclear Device. Your operations LEADER is provided with a nuclear authentication disk and a pin-pointer for this reason. You may easily recognize them by their rank: Lieutenant, Captain, or Major. The nuclear device itself will be present somewhere on your destination.

Hello and thank you for choosing Nanotrasen for your nuclear information needs. Today's crash course will deal with the operation of a Fission Class Nanotrasen made Nuclear Device.
First and foremost, DO NOT TOUCH ANYTHING UNTIL THE BOMB IS IN PLACE. Pressing any button on the compacted bomb will cause it to extend and bolt itself into place. If this is done to unbolt it one must completely log in which at this time may not be possible.
To make the device functional:
#1 Place bomb in designated detonation zone
#2 Extend and anchor bomb (attack with hand).
#3 Insert Nuclear Auth. Disk into slot.
#4 Type numeric code into keypad ([nuke_code]).
Note: If you make a mistake press R to reset the device.
#5 Press the E button to log onto the device.
You now have activated the device. To deactivate the buttons at anytime, for example when you have already prepped the bomb for detonation, remove the authentication disk OR press the R on the keypad. Now the bomb CAN ONLY be detonated using the timer. A manual detonation is not an option.
Note: Toggle off the SAFETY.
Use the - - and + + to set a detonation time between 5 seconds and 10 minutes. Then press the timer toggle button to start the countdown. Now remove the authentication disk so that the buttons deactivate.
Note: THE BOMB IS STILL SET AND WILL DETONATE
Now before you remove the disk if you need to move the bomb you can: Toggle off the anchor, move it, and re-anchor.

The nuclear authorization code is: [nuke_code ? nuke_code : "None provided"]

Good luck, soldier!

" + P.name = "Spec. Ops Manual" + P.icon = "pamphlet-ds" + var/obj/item/stamp/centcom/stamp = new + P.stamp(stamp) + qdel(stamp) for(var/thing in GLOB.landmarks_list) var/obj/effect/landmark/L = thing diff --git a/code/modules/admin/verbs/striketeam_syndicate.dm b/code/modules/admin/verbs/striketeam_syndicate.dm index 766660b6a15..a49283d4ed1 100644 --- a/code/modules/admin/verbs/striketeam_syndicate.dm +++ b/code/modules/admin/verbs/striketeam_syndicate.dm @@ -47,7 +47,7 @@ GLOBAL_VAR_INIT(sent_syndicate_strike_team, 0) // Find ghosts willing to be SST var/image/I = new('icons/obj/cardboard_cutout.dmi', "cutout_commando") var/list/commando_ghosts = pollCandidatesWithVeto(src, usr, SYNDICATE_COMMANDOS_POSSIBLE, "Join the Syndicate Strike Team?",, 21, 60 SECONDS, TRUE, GLOB.role_playtime_requirements[ROLE_DEATHSQUAD], TRUE, FALSE, source = I) - if(!commando_ghosts.len) + if(!length(commando_ghosts)) to_chat(usr, "Nobody volunteered to join the SST.") return @@ -62,7 +62,7 @@ GLOBAL_VAR_INIT(sent_syndicate_strike_team, 0) if(L.name == "Syndicate-Commando") - if(!commando_ghosts.len) + if(!length(commando_ghosts)) break var/mob/ghost_mob = pick(commando_ghosts) diff --git a/code/modules/events/blob.dm b/code/modules/events/blob.dm index 53cea98bfd5..edd563fbfe9 100644 --- a/code/modules/events/blob.dm +++ b/code/modules/events/blob.dm @@ -10,9 +10,6 @@ log_and_message_admins("Warning: Could not spawn any mobs for event Blob") /datum/event/blob/start() - var/turf/T = pick(GLOB.blobstart) - if(!T) - return kill() INVOKE_ASYNC(src, .proc/make_blob) /datum/event/blob/proc/make_blob() diff --git a/code/modules/events/carp_migration.dm b/code/modules/events/carp_migration.dm index fb02033b802..60d3e7e37b5 100644 --- a/code/modules/events/carp_migration.dm +++ b/code/modules/events/carp_migration.dm @@ -30,10 +30,8 @@ /datum/event/carp_migration/proc/spawn_fish(num_groups, group_size_min = 3, group_size_max = 5) var/list/spawn_locations = list() - for(var/thing in GLOB.landmarks_list) - var/obj/effect/landmark/C = thing - if(C.name == "carpspawn") - spawn_locations.Add(C.loc) + for(var/thing in GLOB.carplist) + spawn_locations.Add(get_turf(thing)) spawn_locations = shuffle(spawn_locations) num_groups = min(num_groups, spawn_locations.len) diff --git a/code/modules/events/rogue_drones.dm b/code/modules/events/rogue_drones.dm index e069fb4e5c8..82512f8f2f4 100644 --- a/code/modules/events/rogue_drones.dm +++ b/code/modules/events/rogue_drones.dm @@ -5,10 +5,8 @@ /datum/event/rogue_drone/start() var/list/possible_spawns = list() - for(var/thing in GLOB.landmarks_list) - var/obj/effect/landmark/C = thing - if(C.name == "carpspawn") //spawn them at the same place as carp - possible_spawns.Add(C) + for(var/thing in GLOB.carplist) + possible_spawns.Add(thing) var/num = rand(2, 12) for(var/i = 0, i < num, i++) diff --git a/code/modules/events/slaughterevent.dm b/code/modules/events/slaughterevent.dm index dc2d42675f9..b3c5ecd289f 100644 --- a/code/modules/events/slaughterevent.dm +++ b/code/modules/events/slaughterevent.dm @@ -18,22 +18,11 @@ var/datum/mind/player_mind = new /datum/mind(key_of_slaughter) player_mind.active = TRUE var/list/spawn_locs = list() - for(var/thing in GLOB.landmarks_list) - var/obj/effect/landmark/L = thing - if(isturf(L.loc)) - switch(L.name) - if("revenantspawn") - spawn_locs += L.loc - if(!spawn_locs) //If we can't find any revenant spawns, try the carp spawns - for(var/thing in GLOB.landmarks_list) - var/obj/effect/landmark/L = thing - if(isturf(L.loc)) - switch(L.name) - if("carpspawn") - spawn_locs += L.loc - if(!spawn_locs) //If we can't find either, just spawn the revenant at the player's location + for(var/obj/effect/landmark/spawner/rev/L in GLOB.landmarks_list) + spawn_locs += get_turf(L) + if(!spawn_locs) //If we can't find a good place, just spawn the revenant at the player's location spawn_locs += get_turf(player_mind.current) - if(!spawn_locs) //If we can't find THAT, then just retry + if(!spawn_locs) //If we can't find THAT, then give up kill() return var/obj/effect/dummy/slaughter/holder = new /obj/effect/dummy/slaughter(pick(spawn_locs)) diff --git a/code/modules/events/traders.dm b/code/modules/events/traders.dm index cd522243b5e..2bb6f3adf2d 100644 --- a/code/modules/events/traders.dm +++ b/code/modules/events/traders.dm @@ -24,10 +24,8 @@ GLOBAL_LIST_INIT(unused_trade_stations, list("sol")) return var/list/spawnlocs = list() - for(var/thing in GLOB.landmarks_list) - var/obj/effect/landmark/landmark = thing - if(landmark.name == "traderstart_[station]") - spawnlocs += get_turf(landmark) + for(var/obj/effect/landmark/spawner/soltrader/S in GLOB.landmarks_list) + spawnlocs += get_turf(S) if(!spawnlocs.len) return diff --git a/code/modules/mob/living/silicon/ai/latejoin.dm b/code/modules/mob/living/silicon/ai/latejoin.dm index 51bb1435fe4..722b656d56d 100644 --- a/code/modules/mob/living/silicon/ai/latejoin.dm +++ b/code/modules/mob/living/silicon/ai/latejoin.dm @@ -33,28 +33,24 @@ GLOBAL_LIST_EMPTY(empty_playable_ai_cores) // Delete the old AI shell qdel(src) -// TODO: Move away from the insane name-based landmark system /mob/living/silicon/ai/proc/moveToAILandmark() var/obj/loc_landmark - for(var/obj/effect/landmark/start/sloc in GLOB.landmarks_list) - if(sloc.name != "AI") + for(var/obj/effect/landmark/start/ai/A in GLOB.landmarks_list) + if(locate(/mob/living) in get_turf(A)) continue - if(locate(/mob/living) in sloc.loc) - continue - loc_landmark = sloc + loc_landmark = A if(!loc_landmark) for(var/obj/effect/landmark/tripai in GLOB.landmarks_list) if(tripai.name == "tripai") - if(locate(/mob/living) in tripai.loc) + if(locate(/mob/living) in get_turf(tripai)) continue loc_landmark = tripai if(!loc_landmark) - to_chat(src, "Oh god sorry we can't find an unoccupied AI spawn location, so we're spawning you on top of someone.") - for(var/obj/effect/landmark/start/sloc in GLOB.landmarks_list) - if(sloc.name == "AI") - loc_landmark = sloc + to_chat(src, "Oh god sorry we can't find an unoccupied AI spawn location, so we're spawning you on top of someone.") //lol what is this message + for(var/obj/effect/landmark/start/ai/A in GLOB.landmarks_list) + loc_landmark = A - forceMove(loc_landmark.loc) + forceMove(get_turf(loc_landmark)) view_core() // Before calling this, make sure an empty core exists, or this will no-op diff --git a/icons/effects/spawner_icons.dmi b/icons/effects/spawner_icons.dmi index 42d592b3e67..82b1097fcaf 100644 Binary files a/icons/effects/spawner_icons.dmi and b/icons/effects/spawner_icons.dmi differ