From bb54ac1ac455bbb1ba25bb6722162ab5689cae12 Mon Sep 17 00:00:00 2001 From: ESwordTheCat Date: Thu, 19 Jun 2014 07:16:15 -0800 Subject: [PATCH] Fix artifact spreading and large scanner. Remove extra list used the master_controller var again. Conflicts: code/modules/mining/mine_turfs.dm code/modules/research/xenoarchaeology/misc.dm code/modules/research/xenoarchaeology/tools/tools_anoscanner.dm --- code/modules/mining/mine_turfs.dm | 5 +-- code/modules/research/xenoarchaeology/misc.dm | 23 +++++++--- .../xenoarchaeology/tools/tools_anoscanner.dm | 42 +++++++++---------- 3 files changed, 40 insertions(+), 30 deletions(-) diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index 39bdb360f06..0a719f111c1 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -1,8 +1,7 @@ /**********************Mineral deposits**************************/ - -datum/controller/game_controller/var/list/artifact_spawning_turfs = list() -var/list/artifact_spawn = list() // Runtime fix for geometry loading before controller is instantiated. +/datum/controller/game_controller + var/list/artifact_spawning_turfs = list() /turf/simulated/mineral //wall piece name = "Rock" diff --git a/code/modules/research/xenoarchaeology/misc.dm b/code/modules/research/xenoarchaeology/misc.dm index 438513c2ab6..19336a07199 100644 --- a/code/modules/research/xenoarchaeology/misc.dm +++ b/code/modules/research/xenoarchaeology/misc.dm @@ -4,28 +4,32 @@ proc/SetupXenoarch() for(var/turf/simulated/mineral/M in block(locate(1,1,1), locate(world.maxx, world.maxy, world.maxz))) - if(!M.geologic_data) - M.geologic_data = new/datum/geosample(M) - if(!prob(XENOARCH_SPAWN_CHANCE)) continue var/digsite = get_random_digsite_type() var/list/processed_turfs = list() var/list/turfs_to_process = list(M) - for(var/turf/simulated/mineral/archeo_turf in turfs_to_process) + + while(turfs_to_process.len) + var/turf/simulated/mineral/archeo_turf = turfs_to_process[1] for(var/turf/simulated/mineral/T in orange(1, archeo_turf)) if(T.finds) continue + if(T in processed_turfs) continue + if(prob(XENOARCH_SPREAD_CHANCE)) turfs_to_process.Add(T) + turfs_to_process.Remove(archeo_turf) processed_turfs.Add(archeo_turf) - if(!archeo_turf.finds) + + if(isnull(archeo_turf.finds)) archeo_turf.finds = list() + if(prob(50)) archeo_turf.finds.Add(new /datum/find(digsite, rand(5,95))) else if(prob(75)) @@ -38,6 +42,7 @@ proc/SetupXenoarch() //sometimes a find will be close enough to the surface to show var/datum/find/F = archeo_turf.finds[1] + if(F.excavation_required <= F.view_range) archeo_turf.archaeo_overlay = "overlay_archaeo[rand(1,3)]" archeo_turf.overlays += archeo_turf.archaeo_overlay @@ -45,8 +50,14 @@ proc/SetupXenoarch() //dont create artifact machinery in animal or plant digsites, or if we already have one if(!M.artifact_find && digsite != 1 && digsite != 2 && prob(ARTIFACT_SPAWN_CHANCE)) M.artifact_find = new() - artifact_spawn.Add(src) + master_controller.artifact_spawning_turfs.Add(M) + if(isnull(M.geologic_data)) + M.geologic_data = new/datum/geosample(M) + +#undef XENOARCH_SPAWN_CHANCE +#undef XENOARCH_SPREAD_CHANCE +#undef ARTIFACT_SPAWN_CHANCE //---- Noticeboard diff --git a/code/modules/research/xenoarchaeology/tools/tools_anoscanner.dm b/code/modules/research/xenoarchaeology/tools/tools_anoscanner.dm index d20a8582574..eb62d485719 100644 --- a/code/modules/research/xenoarchaeology/tools/tools_anoscanner.dm +++ b/code/modules/research/xenoarchaeology/tools/tools_anoscanner.dm @@ -1,4 +1,3 @@ - /obj/item/device/ano_scanner name = "Alden-Saraspova counter" desc = "Aids in triangulation of exotic particles." @@ -13,36 +12,37 @@ var/last_scan_time = 0 var/scan_delay = 25 -/obj/item/device/ano_scanner/New() - ..() - spawn(0) - scan() - /obj/item/device/ano_scanner/attack_self(var/mob/user as mob) return src.interact(user) /obj/item/device/ano_scanner/interact(var/mob/user as mob) - var/message = "Background radiation levels detected." - if(nearest_artifact_distance >= 0) - message = "Exotic energy detected on wavelength '[nearest_artifact_id]' in a radius of [nearest_artifact_distance]m" - user << "[message]" if(world.time - last_scan_time >= scan_delay) spawn(0) scan() -/obj/item/device/ano_scanner/proc/scan() - set background = 1 + var/message = "Background radiation levels detected." + if(nearest_artifact_distance >= 0) + message = "Exotic energy detected on wavelength '[nearest_artifact_id]' in a radius of [nearest_artifact_distance]m" + + user << "[message]" + +/obj/item/device/ano_scanner/proc/scan() last_scan_time = world.time nearest_artifact_distance = -1 + var/turf/cur_turf = get_turf(src) - for(var/turf/simulated/mineral/T in master_controller.artifact_spawning_turfs) - if(T.artifact_find) - if(T.z == cur_turf.z) - var/cur_dist = get_dist(cur_turf, T) * 2 - if( (nearest_artifact_distance < 0 || cur_dist < nearest_artifact_distance) && cur_dist <= T.artifact_find.artifact_detect_range ) - nearest_artifact_distance = cur_dist + rand() * 2 - 1 - nearest_artifact_id = T.artifact_find.artifact_id - else - master_controller.artifact_spawning_turfs.Remove(T) + + if(master_controller) //Sanity check due to runtimes ~Z + for(var/turf/simulated/mineral/T in master_controller.artifact_spawning_turfs) + if(T.artifact_find) + if(T.z == cur_turf.z) + var/cur_dist = get_dist(cur_turf, T) * 2 + + if((nearest_artifact_distance < 0 || cur_dist < nearest_artifact_distance) && cur_dist <= T.artifact_find.artifact_detect_range) + nearest_artifact_distance = cur_dist + rand() * 2 - 1 + nearest_artifact_id = T.artifact_find.artifact_id + else + master_controller.artifact_spawning_turfs.Remove(T) + cur_turf.visible_message("[src] clicks.")