diff --git a/code/datums/mapgen/planetary/BeachGenerator.dm b/code/datums/mapgen/planetary/BeachGenerator.dm index 68c21cec7224..61118c27aaa5 100644 --- a/code/datums/mapgen/planetary/BeachGenerator.dm +++ b/code/datums/mapgen/planetary/BeachGenerator.dm @@ -113,7 +113,7 @@ ) mob_spawn_chance = 1 - feature_spawn_chance = 0.2 + feature_spawn_chance = 1 feature_spawn_list = list( /obj/effect/survey_point ) @@ -163,8 +163,8 @@ /obj/structure/flora/rock/pile = 1, /obj/structure/flora/ash/garden/seaweed = 1 ) - flora_spawn_chance = 1 - feature_spawn_chance = 0.2 + flora_spawn_chance = 10 + feature_spawn_chance = 1 feature_spawn_list = list( /obj/effect/survey_point ) @@ -182,7 +182,7 @@ /mob/living/simple_animal/hostile/bear/cave = 5, /mob/living/simple_animal/hostile/asteroid/lobstrosity/beach = 1, ) - feature_spawn_chance = 0.2 + feature_spawn_chance = 1 feature_spawn_list = list( /obj/effect/survey_point ) diff --git a/code/datums/mapgen/planetary/JungleGenerator.dm b/code/datums/mapgen/planetary/JungleGenerator.dm index ed9a676acb17..a5fc36ca000b 100644 --- a/code/datums/mapgen/planetary/JungleGenerator.dm +++ b/code/datums/mapgen/planetary/JungleGenerator.dm @@ -256,6 +256,6 @@ ) feature_spawn_chance = 2 feature_spawn_list = list( - /obj/item/rod_of_asclepius = 0.1, - /obj/effect/survey_point = 10 + /obj/item/rod_of_asclepius = 1, + /obj/effect/survey_point = 100 ) diff --git a/code/datums/mapgen/planetary/LavaGenerator.dm b/code/datums/mapgen/planetary/LavaGenerator.dm index ed3657ca1370..806bed5d5dc6 100644 --- a/code/datums/mapgen/planetary/LavaGenerator.dm +++ b/code/datums/mapgen/planetary/LavaGenerator.dm @@ -94,13 +94,13 @@ /obj/structure/flora/ash/fireblossom = 1, /obj/structure/flora/ash/puce = 5, ) - feature_spawn_chance = 0.6 + feature_spawn_chance = 1 feature_spawn_list = list( - /obj/effect/survey_point = 3, - /obj/structure/flora/rock/hell = 5, - /obj/structure/elite_tumor = 1, - /obj/structure/geyser/random = 1, - /obj/effect/spawner/lootdrop/anomaly/lava = 0.5 + /obj/effect/survey_point = 30, + /obj/structure/flora/rock/hell = 50, + /obj/structure/elite_tumor = 10, + /obj/structure/geyser/random = 10, + /obj/effect/spawner/lootdrop/anomaly/lava = 5 ) mob_spawn_chance = 4 @@ -160,10 +160,10 @@ ) feature_spawn_chance = 10 feature_spawn_list = list( - /obj/structure/flora/tree/dead/barren = 1, - /obj/structure/flora/tree/dead/tall/grey = 1, - /obj/effect/survey_point = 0.5, - /obj/effect/spawner/lootdrop/anomaly/lava = 0.1 + /obj/structure/flora/tree/dead/barren = 10, + /obj/structure/flora/tree/dead/tall/grey = 10, + /obj/effect/survey_point = 5, + /obj/effect/spawner/lootdrop/anomaly/lava = 1 ) /datum/biome/lavaland/plains/dense/mixed diff --git a/code/datums/mapgen/planetary/RockGenerator.dm b/code/datums/mapgen/planetary/RockGenerator.dm index c98baa10fcef..502b45fbffe5 100644 --- a/code/datums/mapgen/planetary/RockGenerator.dm +++ b/code/datums/mapgen/planetary/RockGenerator.dm @@ -85,11 +85,11 @@ feature_spawn_chance = 0.2 feature_spawn_list = list( - /obj/structure/geyser/random = 1, - /obj/structure/elite_tumor = 2, - /obj/effect/survey_point = 4, - /obj/effect/spawner/lootdrop/anomaly/rock = 1, - /obj/effect/spawner/lootdrop/anomaly/big = 0.1 //get out of here stalker + /obj/structure/geyser/random = 10, + /obj/structure/elite_tumor = 20, + /obj/effect/survey_point = 40, + /obj/effect/spawner/lootdrop/anomaly/rock = 10, + /obj/effect/spawner/lootdrop/anomaly/big = 1 //get out of here stalker ) flora_spawn_chance = 5 diff --git a/code/datums/mapgen/planetary/SnowGenerator.dm b/code/datums/mapgen/planetary/SnowGenerator.dm index 2960fca6351d..5c0c54c8aeb4 100644 --- a/code/datums/mapgen/planetary/SnowGenerator.dm +++ b/code/datums/mapgen/planetary/SnowGenerator.dm @@ -316,13 +316,13 @@ feature_spawn_chance = 0.4 feature_spawn_list = list( /obj/effect/survey_point = 4, - /obj/structure/spawner/ice_moon/demonic_portal/low_threat = 3, - /obj/structure/spawner/ice_moon/demonic_portal/medium_threat = 5, - /obj/structure/spawner/ice_moon/demonic_portal/high_threat = 0.6, - /obj/structure/spawner/ice_moon/demonic_portal/extreme_threat = 0.2, - /obj/structure/spawner/ice_moon = 3, - /obj/structure/spawner/ice_moon/polarbear = 3, - /obj/effect/spawner/lootdrop/anomaly/ice/cave = 1 + /obj/structure/spawner/ice_moon/demonic_portal/low_threat = 30, + /obj/structure/spawner/ice_moon/demonic_portal/medium_threat = 50, + /obj/structure/spawner/ice_moon/demonic_portal/high_threat = 6, + /obj/structure/spawner/ice_moon/demonic_portal/extreme_threat = 2, + /obj/structure/spawner/ice_moon = 30, + /obj/structure/spawner/ice_moon/polarbear = 30, + /obj/effect/spawner/lootdrop/anomaly/ice/cave = 10 ) /datum/biome/cave/volcanic/lava diff --git a/code/game/objects/effects/survey_points.dm b/code/game/objects/effects/survey_points.dm index 1c8e0340b191..15ddb272f92f 100644 --- a/code/game/objects/effects/survey_points.dm +++ b/code/game/objects/effects/survey_points.dm @@ -1,12 +1,16 @@ +GLOBAL_LIST_EMPTY(active_survey_points) + /obj/effect/survey_point //sure effects shouldn't be attackable, sue me. name = "Survey Point" desc = "A location of particular survey value." icon = 'icons/effects/landmarks_static.dmi' icon_state = "x" + alpha = 0 var/research_value /obj/effect/survey_point/Initialize() . = ..() + GLOB.active_survey_points += src research_value = rand(750, 1500) /obj/effect/survey_point/examine(mob/user) @@ -22,8 +26,6 @@ var/turf/user_turf = get_turf(user) - - if(!scangler.pack.powered) to_chat(user, "Insufficient power to scan [src]") return @@ -31,7 +33,7 @@ to_chat(user, "You begin to scan [src] with [scangler].") scangler.active = TRUE - if(do_after(user, scangler.survey_delay, TRUE)) + if(do_after(user, scangler.survey_delay, TRUE)) //note to self: refactor this into 3 procs - an attack by, do_scan, and drop_reward flick(icon_state + "-print", item) playsound(src, 'sound/machines/whirr_beep.ogg', 20) user_turf.visible_message("Data recorded and enscribed to research packet.") @@ -67,3 +69,7 @@ var/obj/item/research_notes/research = user.get_inactive_held_item() research.merge(result) return + +/obj/effect/survey_point/Destroy() + . = ..() + GLOB.active_survey_points -= src diff --git a/code/game/objects/items/pinpointer.dm b/code/game/objects/items/pinpointer.dm index 12f91f99fb8c..3c47a36eda60 100644 --- a/code/game/objects/items/pinpointer.dm +++ b/code/game/objects/items/pinpointer.dm @@ -186,6 +186,60 @@ size = "small" return "pinondirect[size]" +//this makes me feel dirty. +/obj/item/pinpointer/survey_data + name = "survey pinpointer" + desc = "A small electronic handheld tuned to detect planetary irregularities" + +/obj/item/pinpointer/survey_data/proc/trackable(mob/living/user) + var/turf/here = get_turf(src) + if((user.z == 0 || user.virtual_z() == here.virtual_z())) + var/turf/there = get_turf(user) + return (user.z != 0 || (there && ((there.virtual_z() == here.virtual_z())))) + return FALSE + +/obj/item/pinpointer/survey_data/attack_self(mob/living/user) + var/list/possible_targets + if(active) + toggle_on() + user.visible_message("[user] deactivates [user.p_their()] pinpointer.", "You deactivate your pinpointer.") + return + for(var/i in GLOB.active_survey_points) + var/obj/effect/survey_point/my_target = i + if(!trackable(my_target)) + continue + possible_targets += my_target + if(!possible_targets.len) + user.visible_message("[user]'s pinpointer fails to detect a signal.", "Your pinpointer fails to detect a signal.") + return + + target = get_closest_target(possible_targets) + toggle_on() + user.visible_message("[user] activates [user.p_their()] pinpointer.", "You activate your pinpointer.") + +/obj/item/pinpointer/survey_data/proc/get_closest_target(var/list/targets) + var/final_target + for(var/obj/effect/survey_point/targetee in targets) + if(targetee) + if(get_dist(src,targetee) < get_dist(src,final_target)) + final_target = targetee + return final_target + +/obj/item/pinpointer/survey_data/get_direction_icon(here, there) + var/size = "" + if(here == there) + size = "small" + else + switch(get_dist(here, there)) + if(1 to 4) + size = "xtrlarge" + if(5 to 16) + size = "large" + //17 through 28 use the normal pinion, "pinondirect" + if(29 to INFINITY) + size = "small" + return "pinondirect[size]" + /obj/item/pinpointer/pair name = "pair pinpointer" desc = "A handheld tracking device that locks onto its other half of the matching pair." diff --git a/code/game/objects/items/survery_handheld.dm b/code/game/objects/items/survery_handheld.dm index e24c9ff9008b..37ab8278e993 100644 --- a/code/game/objects/items/survery_handheld.dm +++ b/code/game/objects/items/survery_handheld.dm @@ -117,6 +117,13 @@ . += "Alt-click [src] to activate the barometer function." /obj/item/attachment/survey_scanner/attack_self(mob/user) + playsound(src, 'sound/effects/ping.ogg', 75) + for(var/obj/effect/survey_point/revealed in range(2, src)) + revealed.alpha = 255 //could use an effect but I'm lazy + src.pack.deductcharge(usecost / 2) + + +/obj/item/attachment/survey_scanner/AltClick(mob/living/user) add_fingerprint(user) if (user.stat || user.is_blind())