/obj/item/device/measuring_tape
name = "measuring tape"
desc = "A coiled metallic tape used to check dimensions and lengths."
icon = 'icons/obj/xenoarchaeology.dmi'
icon_state = "measuring"
origin_tech = list(TECH_MATERIAL = 1)
matter = list(DEFAULT_WALL_MATERIAL = 100)
w_class = ITEMSIZE_SMALL
/obj/item/weapon/storage/bag/fossils
name = "Fossil Satchel"
desc = "Transports delicate fossils in suspension so they don't break during transit."
icon = 'icons/obj/mining.dmi'
icon_state = "satchel"
slot_flags = SLOT_BELT | SLOT_POCKET
w_class = ITEMSIZE_NORMAL
storage_slots = 50
max_storage_space = ITEMSIZE_COST_NORMAL * 50
max_w_class = ITEMSIZE_NORMAL
can_hold = list(/obj/item/weapon/fossil)
/obj/item/weapon/storage/box/samplebags
name = "sample bag box"
desc = "A box claiming to contain sample bags."
/obj/item/weapon/storage/box/samplebags/New()
..()
for(var/i = 1 to 7)
var/obj/item/weapon/evidencebag/S = new(src)
S.name = "sample bag"
S.desc = "a bag for holding research samples."
/obj/item/device/ano_scanner
name = "Alden-Saraspova counter"
desc = "Aids in triangulation of exotic particles."
icon = 'icons/obj/xenoarchaeology.dmi'
icon_state = "flashgun"
item_state = "lampgreen"
origin_tech = list(TECH_BLUESPACE = 3, TECH_MAGNET = 3)
matter = list(DEFAULT_WALL_MATERIAL = 10000,"glass" = 5000)
w_class = ITEMSIZE_SMALL
slot_flags = SLOT_BELT
var/last_scan_time = 0
var/scan_delay = 25
/obj/item/device/ano_scanner/attack_self(var/mob/living/user)
interact(user)
/obj/item/device/ano_scanner/interact(var/mob/living/user)
if(world.time - last_scan_time >= scan_delay)
last_scan_time = world.time
var/nearestTargetDist = -1
var/nearestTargetId
var/nearestSimpleTargetDist = -1
var/turf/cur_turf = get_turf(src)
if(SSxenoarch) //Sanity check due to runtimes ~Z
for(var/A in SSxenoarch.artifact_spawning_turfs)
var/turf/simulated/mineral/T = A
if(T.density && T.artifact_find)
if(T.z == cur_turf.z)
var/cur_dist = get_dist(cur_turf, T) * 2
if(nearestTargetDist < 0 || cur_dist < nearestTargetDist)
nearestTargetDist = cur_dist + rand() * 2 - 1
nearestTargetId = T.artifact_find.artifact_id
else
SSxenoarch.artifact_spawning_turfs.Remove(T)
for(var/A in SSxenoarch.digsite_spawning_turfs)
var/turf/simulated/mineral/T = A
if(T.density && T.finds && T.finds.len)
if(T.z == cur_turf.z)
var/cur_dist = get_dist(cur_turf, T) * 2
if(nearestSimpleTargetDist < 0 || cur_dist < nearestSimpleTargetDist)
nearestSimpleTargetDist = cur_dist + rand() * 2 - 1
else
SSxenoarch.digsite_spawning_turfs.Remove(T)
if(nearestTargetDist >= 0)
to_chat(user, "Exotic energy detected on wavelength '[nearestTargetId]' in a radius of [nearestTargetDist]m[nearestSimpleTargetDist > 0 ? "; small anomaly detected in a radius of [nearestSimpleTargetDist]m" : ""]")
else if(nearestSimpleTargetDist >= 0)
to_chat(user, "Small anomaly detected in a radius of [nearestSimpleTargetDist]m.")
else
to_chat(user, "Background radiation levels detected.")
else
to_chat(user, "Scanning array is recharging.")
/obj/item/device/depth_scanner
name = "depth analysis scanner"
desc = "Used to check spatial depth and density of rock outcroppings."
icon = 'icons/obj/xenoarchaeology.dmi'
icon_state = "depth_scanner"
item_state = "analyzer"
origin_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2, TECH_BLUESPACE = 2)
matter = list(DEFAULT_WALL_MATERIAL = 1000,"glass" = 1000)
w_class = ITEMSIZE_SMALL
slot_flags = SLOT_BELT
var/list/positive_locations = list()
var/datum/depth_scan/current
/datum/depth_scan
var/time = ""
var/coords = ""
var/depth = ""
var/clearance = 0
var/record_index = 1
var/dissonance_spread = 1
var/material = "unknown"
/obj/item/device/depth_scanner/proc/scan_atom(var/mob/user, var/atom/A)
user.visible_message("\The [user] scans \the [A], the air around them humming gently.")
if(istype(A, /turf/simulated/mineral))
var/turf/simulated/mineral/M = A
if((M.finds && M.finds.len) || M.artifact_find)
//create a new scanlog entry
var/datum/depth_scan/D = new()
D.coords = "[M.x]:[M.y]:[M.z]"
D.time = stationtime2text()
D.record_index = positive_locations.len + 1
D.material = M.mineral ? M.mineral.display_name : "Rock"
//find the first artifact and store it
if(M.finds.len)
var/datum/find/F = M.finds[1]
D.depth = "[F.excavation_required - F.clearance_range] - [F.excavation_required]"
D.clearance = F.clearance_range
D.material = get_responsive_reagent(F.find_type)
positive_locations.Add(D)
to_chat(user, "[bicon(src)] [src] pings.")
else if(istype(A, /obj/structure/boulder))
var/obj/structure/boulder/B = A
if(B.artifact_find)
//create a new scanlog entry
var/datum/depth_scan/D = new()
D.coords = "[B.x]:[B.y]:[B.z]"
D.time = stationtime2text()
D.record_index = positive_locations.len + 1
//these values are arbitrary
D.depth = rand(150, 200)
D.clearance = rand(10, 50)
D.dissonance_spread = rand(750, 2500) / 100
positive_locations.Add(D)
to_chat(user, "[bicon(src)] [src] pings [pick("madly","wildly","excitedly","crazily")]!")
/obj/item/device/depth_scanner/attack_self(var/mob/living/user)
interact(user)
/obj/item/device/depth_scanner/interact(var/mob/user as mob)
var/dat = "Coordinates with positive matches
"
dat += "== Clear all ==
"
if(current)
dat += "Time: [current.time]
"
dat += "Coords: [current.coords]
"
dat += "Anomaly depth: [current.depth] cm
"
dat += "Anomaly size: [current.clearance] cm
"
dat += "Dissonance spread: [current.dissonance_spread]
"
var/index = responsive_carriers.Find(current.material)
if(index > 0 && index <= finds_as_strings.len)
dat += "Anomaly material: [finds_as_strings[index]]
"
else
dat += "Anomaly material: Unknown
"
dat += "clear entry
"
else
dat += "Select an entry from the list
"
dat += "
"
dat += "