mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 10:21:11 +00:00
Xenoarch overhaul/rework thing. (#26005)
* Xenoarch overhaul/rework thing. Cuts out a bunch of stupid crap from xenoarch in the interest of making it less painful and less confusing. Fixed stupidity in the find excavation code so it's actually possible to 100% reliably dig stuff up cleanly. Suspension field generators are no longer necessary and have been removed from all maps. They can still be bought from cargo because you can use them on people and jkn would kill me if I removed that. You no longer need to heat density separated sample when processing samples. As soon as you mix the lithium sodium tungstate with the ground rock you can throw it into the analysis machines. This makes it *significantly* more streamlined to process samples and also means you aren't basically forced to use a laser scalpel to get anything done. Distances have all been fixed to be 100cm instead of 200cm per tile. RP spectrometry machines have been removed and the space on the maps has been replaced with some free space so do whatever with it. As an extension of this I re-mapped the outpost-y sections of roid a bit so that the anomaly/sample lab have the HI/FTS because they were previously in the spectrometry lab. Fixed artifact destructions not correctly being logged in all cases. Moved the digsite locator to its own file. Also fixes #25854 * Forgot to commit roid * Update excdrill not correctly being divided by 2. * 1cm brush. * Typo
This commit is contained in:
committed by
GitHub
parent
45f86bad83
commit
a3a8c9d97c
@@ -98,27 +98,7 @@
|
||||
category = "Machine Boards"
|
||||
build_path = /obj/item/weapon/circuitboard/anom
|
||||
|
||||
/datum/design/anom/accelerator
|
||||
name = "Circuit Design (Accelerator Spectrometer)"
|
||||
id = "accelerator"
|
||||
build_path = /obj/item/weapon/circuitboard/anom/accelerator
|
||||
|
||||
/datum/design/anom/gas
|
||||
name = "Circuit Design (Gas Chromatography Spectrometer)"
|
||||
id = "gaschromatography"
|
||||
build_path = /obj/item/weapon/circuitboard/anom/gas
|
||||
|
||||
/datum/design/anom/hyper
|
||||
name = "Circuit Design (Hyperspectral Imager)"
|
||||
id = "hyperspectral"
|
||||
build_path = /obj/item/weapon/circuitboard/anom/hyper
|
||||
|
||||
/datum/design/anom/ion
|
||||
name = "Circuit Design (Ion Mobility Spectrometer)"
|
||||
id = "ionmobility"
|
||||
build_path = /obj/item/weapon/circuitboard/anom/ion
|
||||
|
||||
/datum/design/anom/iso
|
||||
name = "Circuit Design (Isotope Ratio Spectrometer)"
|
||||
id = "isotoperatio"
|
||||
build_path = /obj/item/weapon/circuitboard/anom/iso
|
||||
|
||||
@@ -54,6 +54,7 @@
|
||||
/area/research_outpost/spectro
|
||||
name = "Mass Spectrometry Lab"
|
||||
icon_state = "anospectro"
|
||||
lightswitch = FALSE
|
||||
|
||||
/area/research_outpost/anomaly
|
||||
name = "Anomalous Materials Lab"
|
||||
@@ -107,4 +108,4 @@
|
||||
|
||||
/area/research_outpost/xenobot
|
||||
name = "Research Outpost Xenobotany"
|
||||
icon_state = "outpost_xenobot"
|
||||
icon_state = "outpost_xenobot"
|
||||
|
||||
@@ -24,15 +24,6 @@ datum/reagent/ground_rock
|
||||
reagent_state = REAGENT_STATE_SOLID
|
||||
color = "#A0522D" //rgb: 160, 82, 45, brown
|
||||
|
||||
datum/reagent/density_separated_sample
|
||||
name = "Density separated sample"
|
||||
id = DENSITY_SEPARATED_SAMPLE
|
||||
description = "A watery paste used in chemical analysis, there are some chunks floating in it."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#DEB887" //rgb: 222, 184, 135, light brown
|
||||
density = 3.79
|
||||
specheatcap = 3.99
|
||||
|
||||
datum/reagent/analysis_sample
|
||||
name = "Analysis liquid"
|
||||
id = ANALYSIS_SAMPLE
|
||||
@@ -49,8 +40,6 @@ datum/reagent/chemical_waste
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#ADFF2F" //rgb: 173, 255, 47, toxic green
|
||||
|
||||
|
||||
|
||||
/datum/chemical_reaction/lithiumsodiumtungstate //LiNa2WO4, not the easiest chem to mix
|
||||
name = "Lithium Sodium Tungstate"
|
||||
id = LITHIUMSODIUMTUNGSTATE
|
||||
@@ -58,22 +47,13 @@ datum/reagent/chemical_waste
|
||||
required_reagents = list(LITHIUM = 1, SODIUM = 2, TUNGSTEN = 1, OXYGEN = 4)
|
||||
result_amount = 8
|
||||
|
||||
/datum/chemical_reaction/density_separated_liquid
|
||||
name = "Density separated sample"
|
||||
id = DENSITY_SEPARATED_SAMPLE
|
||||
result = DENSITY_SEPARATED_SAMPLE
|
||||
secondary_results = list(CHEMICAL_WASTE = 1)
|
||||
required_reagents = list(GROUND_ROCK = 1, LITHIUMSODIUMTUNGSTATE = 2)
|
||||
result_amount = 2
|
||||
|
||||
/datum/chemical_reaction/analysis_liquid
|
||||
name = "Analysis sample"
|
||||
id = ANALYSIS_SAMPLE
|
||||
result = ANALYSIS_SAMPLE
|
||||
secondary_results = list(CHEMICAL_WASTE = 1)
|
||||
required_reagents = list(DENSITY_SEPARATED_SAMPLE = 5)
|
||||
result_amount = 4
|
||||
required_temp = 971.15 //Melting point of Sodium tungstate
|
||||
required_reagents = list(GROUND_ROCK = 1, LITHIUMSODIUMTUNGSTATE = 2)
|
||||
result_amount = 2
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/solution_tray
|
||||
name = "solution tray"
|
||||
|
||||
@@ -9,8 +9,6 @@
|
||||
var/view_range = 20 //how close excavation has to come to show an overlay on the turf
|
||||
var/clearance_range = 3 //how close excavation has to come to extract the item
|
||||
//if excavation hits var/excavation_required exactly, it's contained find is extracted cleanly without the ore
|
||||
var/prob_delicate = 90 //probability it requires an active suspension field to not insta-crumble
|
||||
var/dissonance_spread = 1 //proportion of the tile that is affected by this find
|
||||
var/responsive_reagent = PLASMA
|
||||
var/apply_material_decorations = FALSE
|
||||
var/apply_image_decorations = FALSE
|
||||
@@ -24,7 +22,6 @@
|
||||
/datum/find/New(var/exc_req)
|
||||
excavation_required = exc_req
|
||||
clearance_range = rand(2,6)
|
||||
dissonance_spread = rand(1500,2500) / 100
|
||||
|
||||
/datum/find/proc/create_find(var/atom/loc) //Makes the item. Applies strangeness to it. Returns item
|
||||
if(prob(5))
|
||||
@@ -598,12 +595,10 @@
|
||||
additional_desc = TRUE
|
||||
|
||||
/datum/find/gun/spawn_item()
|
||||
var/obj/item/weapon/gun/projectile/new_gun = new /obj/item/weapon/gun/projectile
|
||||
new_gun.icon_state = "gun[rand(1,4)]"
|
||||
new_gun.icon = 'icons/obj/xenoarchaeology.dmi'
|
||||
new_gun.item_state = new_gun.icon_state
|
||||
new_gun.inhand_states = list("left_hand" = 'icons/mob/in-hand/left/xenoarch.dmi', "right_hand" = 'icons/mob/in-hand/right/xenoarch.dmi')
|
||||
new_gun.desc = ""
|
||||
// use subtypes to change icon_state.
|
||||
// because gun code relies on initial(icon_state)
|
||||
var/gun_type = pick(subtypesof(/obj/item/weapon/gun/projectile/xenoarch))
|
||||
var/obj/item/weapon/gun/projectile/new_gun = new gun_type
|
||||
|
||||
//let's get some ammunition in this gun : weighted to pick available ammo
|
||||
new_gun.caliber = pick(50;list(POINT357 = 1),
|
||||
@@ -636,6 +631,27 @@
|
||||
|
||||
return new_gun
|
||||
|
||||
/obj/item/weapon/gun/projectile/xenoarch
|
||||
icon = 'icons/obj/xenoarchaeology.dmi'
|
||||
inhand_states = list("left_hand" = 'icons/mob/in-hand/left/xenoarch.dmi', "right_hand" = 'icons/mob/in-hand/right/xenoarch.dmi')
|
||||
desc = ""
|
||||
|
||||
/obj/item/weapon/gun/projectile/xenoarch/gun1
|
||||
icon_state = "gun1"
|
||||
item_state = "gun1"
|
||||
|
||||
/obj/item/weapon/gun/projectile/xenoarch/gun2
|
||||
icon_state = "gun2"
|
||||
item_state = "gun2"
|
||||
|
||||
/obj/item/weapon/gun/projectile/xenoarch/gun3
|
||||
icon_state = "gun3"
|
||||
item_state = "gun3"
|
||||
|
||||
/obj/item/weapon/gun/projectile/xenoarch/gun4
|
||||
icon_state = "gun4"
|
||||
item_state = "gun4"
|
||||
|
||||
/datum/find/gun/additional_description(var/obj/item/I)
|
||||
I.desc += "Looks like an antique projectile weapon, you're not sure if it will fire or not."
|
||||
if(prob(10)) // 10% chance to be a smart gun
|
||||
@@ -1025,4 +1041,4 @@
|
||||
qdel(src)
|
||||
|
||||
if(istype(T, /turf/unsimulated/mineral))
|
||||
T:last_find = new_item
|
||||
T:last_find = new_item
|
||||
|
||||
@@ -21,7 +21,6 @@
|
||||
icon_state = "sliver1" //0-4
|
||||
w_class = W_CLASS_TINY
|
||||
//item_state = "electronic"
|
||||
var/source_rock = "/turf/unsimulated/mineral/"
|
||||
var/datum/geosample/geological_data
|
||||
|
||||
/obj/item/weapon/rocksliver/New()
|
||||
@@ -34,89 +33,8 @@
|
||||
// Geosample datum
|
||||
|
||||
/datum/geosample
|
||||
var/age = 0 //age can correspond to different archaeological finds
|
||||
var/age_thousand = 0
|
||||
var/age_million = 0
|
||||
var/age_billion = 0
|
||||
var/artifact_id = "" //id of a nearby artifact, if there is one
|
||||
var/artifact_distance = -1 //proportional to distance
|
||||
var/source_mineral = "chlorine" //machines will pop up a warning telling players that the sample may be confused
|
||||
var/total_spread = 0
|
||||
//
|
||||
//var/source_mineral
|
||||
//all potential finds are initialised to null, so nullcheck before you access them
|
||||
var/list/find_presence = list()
|
||||
|
||||
/datum/geosample/New(var/turf/unsimulated/mineral/container)
|
||||
UpdateTurf(container)
|
||||
|
||||
//this should only need to be called once
|
||||
/datum/geosample/proc/UpdateTurf(var/turf/unsimulated/mineral/container)
|
||||
if(!container || !istype(container))
|
||||
return
|
||||
|
||||
age = rand(1,999)
|
||||
|
||||
if(container.mineral)
|
||||
switch(container.mineral.name)
|
||||
if("Uranium")
|
||||
age_million = rand(1, 704)
|
||||
age_thousand = rand(1,999)
|
||||
find_presence["potassium"] = rand(1,1000) / 100
|
||||
source_mineral = "potassium"
|
||||
if("Iron")
|
||||
age_thousand = rand(1, 999)
|
||||
age_million = rand(1, 999)
|
||||
find_presence["iron"] = rand(1,1000) / 100
|
||||
source_mineral = "iron"
|
||||
if("Diamond")
|
||||
age_thousand = rand(1,999)
|
||||
age_million = rand(1,999)
|
||||
find_presence["nitrogen"] = rand(1,1000) / 100
|
||||
source_mineral = "nitrogen"
|
||||
if("Gold")
|
||||
age_thousand = rand(1,999)
|
||||
age_million = rand(1,999)
|
||||
age_billion = rand(3,4)
|
||||
find_presence["iron"] = rand(1,1000) / 100
|
||||
source_mineral = "iron"
|
||||
if("Silver")
|
||||
age_thousand = rand(1,999)
|
||||
age_million = rand(1,999)
|
||||
find_presence["iron"] = rand(1,1000) / 100
|
||||
source_mineral = "iron"
|
||||
if("Plasma")
|
||||
age_thousand = rand(1,999)
|
||||
age_million = rand(1,999)
|
||||
age_billion = rand(10, 13)
|
||||
find_presence["plasma"] = rand(1,1000) / 100
|
||||
source_mineral = "plasma"
|
||||
if("Clown")
|
||||
age = rand(-1,-999) //thats the joke
|
||||
age_thousand = rand(-1,-999)
|
||||
find_presence["plasma"] = rand(1,1000) / 100
|
||||
source_mineral = "plasma"
|
||||
|
||||
if(prob(75))
|
||||
find_presence["phosphorus"] = rand(1,500) / 100
|
||||
if(prob(25))
|
||||
find_presence["mercury"] = rand(1,500) / 100
|
||||
find_presence["chlorine"] = rand(500,2500) / 100
|
||||
|
||||
//loop over finds, grab any relevant stuff
|
||||
for(var/datum/find/F in container.finds)
|
||||
var/responsive_reagent = F.responsive_reagent
|
||||
find_presence[responsive_reagent] = F.dissonance_spread
|
||||
|
||||
//loop over again to reset values to percentages
|
||||
var/total_presence = 0
|
||||
for(var/carrier in find_presence)
|
||||
total_presence += find_presence[carrier]
|
||||
for(var/carrier in find_presence)
|
||||
find_presence[carrier] = find_presence[carrier] / total_presence
|
||||
|
||||
for(var/entry in find_presence)
|
||||
total_spread += find_presence[entry]
|
||||
|
||||
//have this separate from UpdateTurf() so that we dont have a billion turfs being updated (redundantly) every time an artifact spawns
|
||||
/datum/geosample/proc/UpdateNearbyArtifactInfo(var/turf/unsimulated/mineral/container)
|
||||
@@ -124,18 +42,21 @@
|
||||
return
|
||||
|
||||
if(container.artifact_find)
|
||||
artifact_distance = rand()
|
||||
artifact_distance = rand() // 0-1
|
||||
artifact_id = container.artifact_find.artifact_id
|
||||
else
|
||||
if(SSxenoarch) //Sanity check due to runtimes ~Z
|
||||
for(var/turf/unsimulated/mineral/T in SSxenoarch.artifact_spawning_turfs)
|
||||
if(T.artifact_find)
|
||||
var/cur_dist = get_dist(container, T) * 2
|
||||
if( (artifact_distance < 0 || cur_dist < artifact_distance) && cur_dist <= T.artifact_find.artifact_detect_range )
|
||||
artifact_distance = cur_dist + rand() * 2 - 1
|
||||
artifact_id = T.artifact_find.artifact_id
|
||||
else
|
||||
SSxenoarch.artifact_spawning_turfs.Remove(T)
|
||||
return
|
||||
|
||||
if(!SSxenoarch) //Sanity check due to runtimes ~Z
|
||||
return
|
||||
|
||||
for(var/turf/unsimulated/mineral/T in SSxenoarch.artifact_spawning_turfs)
|
||||
if(T.artifact_find)
|
||||
var/cur_dist = get_dist(container, T)
|
||||
if( (artifact_distance < 0 || cur_dist < artifact_distance) && cur_dist <= T.artifact_find.artifact_detect_range )
|
||||
artifact_distance = cur_dist + rand() * 2 - 1
|
||||
artifact_id = T.artifact_find.artifact_id
|
||||
else
|
||||
SSxenoarch.artifact_spawning_turfs.Remove(T)
|
||||
|
||||
/*
|
||||
#undef FIND_PLANT
|
||||
|
||||
@@ -1,56 +0,0 @@
|
||||
|
||||
// This machine shows the age for extremely old finds
|
||||
|
||||
/obj/machinery/anomaly/accelerator
|
||||
name = "Accelerator spectrometer"
|
||||
|
||||
/obj/machinery/anomaly/accelerator/New()
|
||||
. = ..()
|
||||
|
||||
component_parts = newlist(
|
||||
/obj/item/weapon/circuitboard/anom/accelerator,
|
||||
/obj/item/weapon/stock_parts/scanning_module,
|
||||
/obj/item/weapon/stock_parts/scanning_module,
|
||||
/obj/item/weapon/stock_parts/scanning_module
|
||||
)
|
||||
|
||||
RefreshParts()
|
||||
|
||||
/obj/machinery/anomaly/accelerator/ScanResults()
|
||||
var/results = "The scan was inconclusive. Check sample integrity and carrier consistency."
|
||||
|
||||
var/datum/geosample/scanned_sample
|
||||
var/carrier_name
|
||||
var/num_reagents = 0
|
||||
|
||||
for(var/datum/reagent/A in held_container.reagents.reagent_list)
|
||||
var/datum/reagent/R = A
|
||||
if(istype(R, /datum/reagent/analysis_sample))
|
||||
scanned_sample = R.data
|
||||
else
|
||||
carrier_name = R.id
|
||||
num_reagents++
|
||||
|
||||
if(num_reagents == 2 && scanned_sample && carrier_name)
|
||||
var/specifity = GetResultSpecifity(scanned_sample, carrier_name)
|
||||
results = "Kinetic acceleration of carrier ([carrier_name]) indicates age ([100 * specifity]% accuracy): <br><br>"
|
||||
|
||||
if(scanned_sample.age_billion)
|
||||
var/displayed_age_millions = scanned_sample.age_million + max(scanned_sample.age_million * ((1 - specifity) * (2 * rand() - 1)), 0)
|
||||
var/displayed_age_billions = scanned_sample.age_billion + max(scanned_sample.age_billion * ((1 - specifity) * (2 * rand() - 1)), 0)
|
||||
results += "[displayed_age_billions + displayed_age_millions / 1000] billion years.<br>"
|
||||
else if(scanned_sample.age_million)
|
||||
var/displayed_age_thousands = scanned_sample.age_thousand + max(scanned_sample.age_thousand * ((1 - specifity) * (4 * rand() - 2)), 0)
|
||||
var/displayed_age_millions = scanned_sample.age_million + max(scanned_sample.age_million * ((1 - specifity) * (2 * rand() - 1)), 0)
|
||||
results += "[displayed_age_millions + displayed_age_thousands / 1000] million years.<br>"
|
||||
else if(scanned_sample.age_thousand)
|
||||
var/displayed_age = scanned_sample.age + max(scanned_sample.age * ((1 - specifity) * (8 * rand() - 4)), 0)
|
||||
var/displayed_age_thousands = scanned_sample.age_thousand + max(scanned_sample.age * ((1 - specifity) * (4 * rand() - 2)), 0)
|
||||
results += "[displayed_age_thousands + displayed_age / 1000] thousand years.<br>"
|
||||
else
|
||||
var/displayed_age = scanned_sample.age + max(scanned_sample.age * ((1 - specifity) * (8 * rand() - 4)), 0)
|
||||
results += "[displayed_age] years.<br>"
|
||||
|
||||
results += "<br>Warning, results only valid for ages on the scale of billions of years."
|
||||
|
||||
return results
|
||||
@@ -212,18 +212,6 @@ obj/machinery/anomaly/Topic(href, href_list)
|
||||
|
||||
start(user)
|
||||
|
||||
//whether the carrier sample matches the possible finds
|
||||
//results greater than a threshold of 0.6 means a positive result
|
||||
/obj/machinery/anomaly/proc/GetResultSpecifity(var/datum/geosample/scanned_sample, var/carrier_name)
|
||||
var/specifity = 0
|
||||
if(scanned_sample && carrier_name)
|
||||
|
||||
if(scanned_sample.find_presence.Find(carrier_name))
|
||||
specifity = 0.75 * (scanned_sample.find_presence[carrier_name] / scanned_sample.total_spread) + 0.25
|
||||
else
|
||||
specifity = rand(0, 0.5)
|
||||
|
||||
return specifity
|
||||
|
||||
/obj/machinery/anomaly/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = NANOUI_FOCUS)
|
||||
if (stat & NOPOWER)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
// This machine tells the distance to a nearby artifact, if there is one
|
||||
|
||||
/obj/machinery/anomaly/fourier_transform
|
||||
name = "Fourier Transform spectroscope"
|
||||
name = "\improper Fourier transform spectroscope"
|
||||
|
||||
/obj/machinery/anomaly/fourier_transform/New()
|
||||
. = ..()
|
||||
@@ -17,7 +17,7 @@
|
||||
RefreshParts()
|
||||
|
||||
/obj/machinery/anomaly/fourier_transform/ScanResults()
|
||||
var/results = "The scan was inconclusive. Check sample integrity and carrier consistency."
|
||||
var/results = "The scan was inconclusive. Check sample integrity."
|
||||
|
||||
var/datum/geosample/scanned_sample
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
var/distance = scanned_sample.artifact_distance
|
||||
if(distance > 0)
|
||||
distance += (2 * rand() - 1) * distance * 0.05
|
||||
results = "Fourier transform analysis on anomalous energy absorption indicates source located inside emission radius (95% accuracy): [distance]."
|
||||
results = "Fourier transform analysis on anomalous energy absorption indicates source located inside emission radius (95% accuracy): <b>[distance]</b>."
|
||||
else
|
||||
results = "Energy dispersion detected throughout sample consistent with background readings.<br>"
|
||||
|
||||
|
||||
@@ -1,51 +0,0 @@
|
||||
|
||||
// This machine shows the materials that are present
|
||||
|
||||
/obj/machinery/anomaly/gas_chromatography
|
||||
name = "Gas Chromatography spectrometer"
|
||||
|
||||
/obj/machinery/anomaly/gas_chromatography/New()
|
||||
. = ..()
|
||||
|
||||
component_parts = newlist(
|
||||
/obj/item/weapon/circuitboard/anom/gas,
|
||||
/obj/item/weapon/stock_parts/scanning_module,
|
||||
/obj/item/weapon/stock_parts/scanning_module,
|
||||
/obj/item/weapon/stock_parts/scanning_module
|
||||
)
|
||||
|
||||
RefreshParts()
|
||||
|
||||
/obj/machinery/anomaly/gas_chromatography/ScanResults()
|
||||
var/results = "The scan was inconclusive. Check sample integrity and carrier consistency."
|
||||
|
||||
var/datum/geosample/scanned_sample
|
||||
var/carrier
|
||||
var/num_reagents = 0
|
||||
|
||||
for(var/datum/reagent/A in held_container.reagents.reagent_list)
|
||||
var/datum/reagent/R = A
|
||||
if(istype(R, /datum/reagent/analysis_sample))
|
||||
scanned_sample = R.data
|
||||
else
|
||||
carrier = R.id
|
||||
num_reagents++
|
||||
|
||||
if(num_reagents == 2 && scanned_sample)
|
||||
var/specifity = GetResultSpecifity(scanned_sample, carrier)
|
||||
results = "Chromatography partitioning analysis over carrier ([carrier]) indicates the following elements present ([100 * specifity]% accuracy):<br><br>"
|
||||
|
||||
var/num_found = 0
|
||||
for(var/index=1,index <= scanned_sample.find_presence.len, index++)
|
||||
var/find = scanned_sample.find_presence[index]
|
||||
if(find && prob(100 * specifity))
|
||||
results += " - " + finds_as_strings[index] + "<br>"
|
||||
num_found++
|
||||
|
||||
if(!num_found)
|
||||
results = "Chromatography partitioning results over carrier ([carrier]) to determine elemental makeup were inconclusive.<br>"
|
||||
|
||||
if(!carrier)
|
||||
results += "<br>No carrier detected, scan accuracy affected.<br>"
|
||||
|
||||
return results
|
||||
@@ -1,5 +1,5 @@
|
||||
/obj/machinery/anomaly/hyperspectral
|
||||
name = "Hyperspectral Imager"
|
||||
name = "hyperspectral imager"
|
||||
icon = 'icons/obj/xenoarchaeology.dmi'
|
||||
icon_state = "hyperspectral"
|
||||
light_power = 0.75
|
||||
|
||||
@@ -1,59 +0,0 @@
|
||||
|
||||
// This machine shows the amount of a certain material that is present
|
||||
|
||||
/obj/machinery/anomaly/ion_mobility
|
||||
name = "Ion Mobility Spectrometer"
|
||||
desc = "A specialised, complex analysis machine."
|
||||
icon = 'icons/obj/virology.dmi'
|
||||
icon_state = "analyser_old"
|
||||
|
||||
/obj/machinery/anomaly/ion_mobility/New()
|
||||
. = ..()
|
||||
|
||||
component_parts = newlist(
|
||||
/obj/item/weapon/circuitboard/anom/ion,
|
||||
/obj/item/weapon/stock_parts/scanning_module,
|
||||
/obj/item/weapon/stock_parts/scanning_module,
|
||||
/obj/item/weapon/stock_parts/scanning_module
|
||||
)
|
||||
|
||||
RefreshParts()
|
||||
|
||||
/obj/machinery/anomaly/ion_mobility/ScanResults()
|
||||
var/results = "The scan was inconclusive. Check sample integrity and carrier consistency."
|
||||
|
||||
var/datum/geosample/scanned_sample
|
||||
var/carrier
|
||||
var/num_reagents = 0
|
||||
|
||||
for(var/datum/reagent/A in held_container.reagents.reagent_list)
|
||||
var/datum/reagent/R = A
|
||||
if(istype(R, /datum/reagent/analysis_sample))
|
||||
scanned_sample = R.data
|
||||
else
|
||||
carrier = R.id
|
||||
num_reagents++
|
||||
|
||||
if(num_reagents == 2 && scanned_sample && carrier)
|
||||
//all necessary components are present
|
||||
results = "Kinetic analysis on sample's ionic residue in carrier ([carrier]) indicates the dissonance spread:<br><br>"
|
||||
var/found = 0
|
||||
if(scanned_sample.find_presence.Find(carrier))
|
||||
var/dis_ratio = scanned_sample.find_presence[carrier]
|
||||
var/desc_index = responsive_carriers.Find(carrier)
|
||||
results += " - [finds_as_strings[desc_index]]: [dis_ratio]<br>"
|
||||
found++
|
||||
/*
|
||||
for(var/index=1,index <= scanned_sample.find_presence.len, index++)
|
||||
var/find = scanned_sample.find_presence[index]
|
||||
// to_chat(world, "index: [index], find: [find], response: [responsive_carriers[index]], carrier: [carrier]")
|
||||
if(find && responsive_carriers[index] == carrier)
|
||||
results += " - [finds_as_strings[index]] [find * 100]%<br>"
|
||||
found++
|
||||
*/
|
||||
if(!found)
|
||||
results = "Kinetic analysis on sample's ionic residue in carrier ([carrier]) to determine composition were inconclusive.<br>"
|
||||
if(carrier == scanned_sample.source_mineral)
|
||||
results += "Warning, analysis may be contaminated by high quantities of molecular carrier present throughout sample."
|
||||
|
||||
return results
|
||||
@@ -1,63 +0,0 @@
|
||||
|
||||
// This machine shows the age for newer finds
|
||||
|
||||
/obj/machinery/anomaly/isotope_ratio
|
||||
name = "Isotope ratio spectrometer"
|
||||
desc = "A specialised, complex analysis machine."
|
||||
icon = 'icons/obj/virology.dmi'
|
||||
icon_state = "analyser_old"
|
||||
|
||||
/obj/machinery/anomaly/isotope_ratio/New()
|
||||
. = ..()
|
||||
|
||||
component_parts = newlist(
|
||||
/obj/item/weapon/circuitboard/anom/iso,
|
||||
/obj/item/weapon/stock_parts/scanning_module,
|
||||
/obj/item/weapon/stock_parts/scanning_module,
|
||||
/obj/item/weapon/stock_parts/scanning_module
|
||||
)
|
||||
|
||||
RefreshParts()
|
||||
|
||||
/obj/machinery/anomaly/isotope_ratio/ScanResults()
|
||||
var/results = "The scan was inconclusive. Check sample integrity and carrier consistency."
|
||||
|
||||
var/datum/geosample/scanned_sample
|
||||
var/carrier_name
|
||||
var/num_reagents = 0
|
||||
|
||||
for(var/datum/reagent/A in held_container.reagents.reagent_list)
|
||||
var/datum/reagent/R = A
|
||||
if(istype(R, /datum/reagent/analysis_sample))
|
||||
scanned_sample = R.data
|
||||
else
|
||||
carrier_name = R.id
|
||||
num_reagents++
|
||||
|
||||
if(num_reagents == 2 && scanned_sample && carrier_name)
|
||||
var/accuracy = GetResultSpecifity(scanned_sample, carrier_name)
|
||||
accuracy += 0.5 * (1 - accuracy) / scanned_sample.total_spread
|
||||
if(!accuracy)
|
||||
accuracy = rand(1, 50)/100
|
||||
results = "Isotope decay analysis in carrier ([carrier_name]) indicates age ([100 * accuracy]% accuracy): <br><br>"
|
||||
|
||||
if(scanned_sample.age_billion)
|
||||
//scramble the results
|
||||
var/displayed_age_thousands = rand(0, 999)
|
||||
var/displayed_age_millions = rand(0, 999)
|
||||
results += "[displayed_age_millions + displayed_age_thousands / 1000] million years.<br>"
|
||||
else if(scanned_sample.age_million)
|
||||
var/displayed_age_thousands = scanned_sample.age_thousand + max(scanned_sample.age_thousand * ((1 - accuracy) * (2 * rand() - 1)), 0)
|
||||
var/displayed_age_millions = scanned_sample.age_million + max(scanned_sample.age_million * ((1 - accuracy) * (4 * rand() - 2)), 0)
|
||||
results += "[displayed_age_millions + displayed_age_thousands / 1000] million years.<br>"
|
||||
else if(scanned_sample.age_thousand)
|
||||
var/displayed_age = scanned_sample.age + scanned_sample.age * ((1 - accuracy) * (2 * rand() - 1))
|
||||
var/displayed_age_thousands = scanned_sample.age_thousand + max(scanned_sample.age_thousand * ((1 - accuracy) * (2 * rand() - 1)), 0)
|
||||
results += "[displayed_age_thousands + displayed_age / 1000] thousand years.<br>"
|
||||
else
|
||||
var/displayed_age = scanned_sample.age + max(scanned_sample.age * ((1 - accuracy) * (2 * rand() - 1)), 0)
|
||||
results += "[displayed_age] years.<br>"
|
||||
|
||||
results += "<br>Warning, results only valid up to ages of one billion years."
|
||||
|
||||
return results
|
||||
@@ -14,4 +14,4 @@
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/artifact_scanpad/update_icon()
|
||||
icon_state = "[initial(icon_state)][owner_console ? owner_console.scan_in_progress : 0]"
|
||||
icon_state = "[initial(icon_state)][owner_console ? owner_console.scan_in_progress : 0]"
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
// No longer necessary for doing xenoarch, but kept in because you can use it on people.
|
||||
// Still available from cargo.
|
||||
|
||||
/obj/machinery/suspension_gen
|
||||
name = "suspension field generator"
|
||||
desc = "It has stubby legs bolted up against it's body for stabilising."
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
for(var/turf/unsimulated/mineral/T in SSxenoarch.artifact_spawning_turfs)
|
||||
if(T.artifact_find)
|
||||
if(T.z == cur_turf.z)
|
||||
var/cur_dist = get_dist(cur_turf, T) * 2
|
||||
var/cur_dist = get_dist(cur_turf, T)
|
||||
|
||||
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
|
||||
|
||||
@@ -21,7 +21,6 @@
|
||||
var/depth = 0
|
||||
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)
|
||||
@@ -40,16 +39,10 @@
|
||||
//find the first artifact and store it
|
||||
if(M.finds.len)
|
||||
var/datum/find/F = M.finds[1]
|
||||
D.depth = F.excavation_required * 2 //0-100% and 0-200cm
|
||||
D.clearance = F.clearance_range * 2
|
||||
D.depth = F.excavation_required //0-100% and 0-100cm
|
||||
D.clearance = F.clearance_range
|
||||
D.material = F.responsive_reagent
|
||||
/*
|
||||
if(M.excavation_minerals.len)
|
||||
if(M.excavation_minerals[1] < D.depth)
|
||||
D.depth = M.excavation_minerals[1]
|
||||
D.clearance = rand(2,6)
|
||||
D.dissonance_spread = rand(1,1000) / 100
|
||||
*/
|
||||
|
||||
|
||||
positive_locations.Add(D)
|
||||
|
||||
@@ -68,7 +61,6 @@
|
||||
//these values are arbitrary
|
||||
D.depth = rand(75,100)
|
||||
D.clearance = rand(5,25)
|
||||
D.dissonance_spread = rand(750,2500) / 100
|
||||
|
||||
positive_locations.Add(D)
|
||||
|
||||
@@ -86,7 +78,6 @@
|
||||
dat += "Coords: [current.coords]<br>"
|
||||
dat += "Anomaly depth: [current.depth] cm<br>"
|
||||
dat += "Clearance above anomaly depth: [current.clearance] cm<br>"
|
||||
dat += "Dissonance spread: [current.dissonance_spread]<br>"
|
||||
var/index = responsive_carriers.Find(current.material)
|
||||
if(index > 0 && index <= finds_as_strings.len)
|
||||
dat += "Anomaly material: [finds_as_strings[index]]<br>"
|
||||
@@ -138,55 +129,3 @@
|
||||
usr << browse(null, "window=depth_scanner")
|
||||
|
||||
updateSelfDialog()
|
||||
|
||||
|
||||
/obj/item/device/xenoarch_scanner
|
||||
name = "Xenoarchaeological digsite locator"
|
||||
desc = "A scanner that checks the surrounding area for potential xenoarch digsites. If it finds any, It will briefly make them visible. Requires mesons for optimal use."
|
||||
icon_state = "forensic0-old" //placeholder
|
||||
item_state = "analyzer"
|
||||
w_class = W_CLASS_SMALL
|
||||
flags = 0
|
||||
slot_flags = SLOT_BELT
|
||||
origin_tech = Tc_ANOMALY+"=1"
|
||||
var/cooldown = 0
|
||||
var/adv = FALSE
|
||||
|
||||
/obj/item/device/xenoarch_scanner/adv
|
||||
name = "Advanced Xenoarchaeological digsite locator"
|
||||
icon_state = "unknown"
|
||||
desc = "A scanner that scans the surrounding area for potential xenoarch digsites, highlighting them temporarily in a colour associated with their responsive reagent. Requires mesons for optimal use."
|
||||
adv = TRUE
|
||||
|
||||
/obj/item/device/xenoarch_scanner/adv/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "<span class = 'notice'>It has a list of colour codes:</span>")
|
||||
for(var/i in color_from_find_reagent)
|
||||
to_chat(user, "[i] = <span style = 'color:[color_from_find_reagent[i]];'>this colour</span>")
|
||||
|
||||
/obj/item/device/xenoarch_scanner/attack_self(mob/user)
|
||||
if(world.time > cooldown + 4 SECONDS)
|
||||
var/client/C = user.client
|
||||
if(!C)
|
||||
return
|
||||
cooldown = world.time
|
||||
for(var/turf/unsimulated/mineral/M in range(7, user))
|
||||
if(M.finds.len)
|
||||
var/datum/find/F = M.finds[1]
|
||||
var/new_icon_state
|
||||
var/new_color
|
||||
if(adv)
|
||||
new_icon_state = "find_overlay"
|
||||
new_color = color_from_find_reagent[F.responsive_reagent]
|
||||
else
|
||||
new_icon_state = pick("archaeo1","archaeo2","archaeo3")
|
||||
var/image/I = image('icons/turf/mine_overlays.dmi', loc = M, icon_state = new_icon_state, layer = UNDER_HUD_LAYER)
|
||||
if(new_color)
|
||||
I.color = new_color
|
||||
I.plane = HUD_PLANE
|
||||
C.images += I
|
||||
spawn(1 SECONDS)
|
||||
animate(I, alpha = 0, time = 2 SECONDS)
|
||||
spawn(3 SECONDS)
|
||||
if(C)
|
||||
C.images -= I
|
||||
@@ -0,0 +1,50 @@
|
||||
/obj/item/device/xenoarch_scanner
|
||||
name = "xenoarchaeological digsite locator"
|
||||
desc = "A scanner that checks the surrounding area for potential xenoarch digsites. If it finds any, It will briefly make them visible. Requires mesons for optimal use."
|
||||
icon_state = "forensic0-old" //placeholder
|
||||
item_state = "analyzer"
|
||||
w_class = W_CLASS_SMALL
|
||||
flags = 0
|
||||
slot_flags = SLOT_BELT
|
||||
origin_tech = Tc_ANOMALY+"=1"
|
||||
var/cooldown = 0
|
||||
var/adv = FALSE
|
||||
|
||||
/obj/item/device/xenoarch_scanner/adv
|
||||
name = "advanced xenoarchaeological digsite locator"
|
||||
icon_state = "unknown"
|
||||
desc = "A scanner that scans the surrounding area for potential xenoarch digsites, highlighting them temporarily in a colour associated with their responsive reagent. Requires mesons for optimal use."
|
||||
adv = TRUE
|
||||
|
||||
/obj/item/device/xenoarch_scanner/adv/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "<span class = 'notice'>It has a list of colour codes:</span>")
|
||||
for(var/i in color_from_find_reagent)
|
||||
to_chat(user, "[i] = <span style = 'color:[color_from_find_reagent[i]];'>this colour</span>")
|
||||
|
||||
/obj/item/device/xenoarch_scanner/attack_self(mob/user)
|
||||
if(world.time > cooldown + 4 SECONDS)
|
||||
var/client/C = user.client
|
||||
if(!C)
|
||||
return
|
||||
cooldown = world.time
|
||||
for(var/turf/unsimulated/mineral/M in range(7, user))
|
||||
if(M.finds.len)
|
||||
var/datum/find/F = M.finds[1]
|
||||
var/new_icon_state
|
||||
var/new_color
|
||||
if(adv)
|
||||
new_icon_state = "find_overlay"
|
||||
new_color = color_from_find_reagent[F.responsive_reagent]
|
||||
else
|
||||
new_icon_state = pick("archaeo1","archaeo2","archaeo3")
|
||||
var/image/I = image('icons/turf/mine_overlays.dmi', loc = M, icon_state = new_icon_state, layer = UNDER_HUD_LAYER)
|
||||
if(new_color)
|
||||
I.color = new_color
|
||||
I.plane = HUD_PLANE
|
||||
C.images += I
|
||||
spawn(1 SECONDS)
|
||||
animate(I, alpha = 0, time = 2 SECONDS)
|
||||
spawn(3 SECONDS)
|
||||
if(C)
|
||||
C.images -= I
|
||||
@@ -4,7 +4,7 @@
|
||||
icon_state = "excavationdrill0"
|
||||
inhand_states = list("left_hand" = 'icons/mob/in-hand/left/xenoarch.dmi', "right_hand" = 'icons/mob/in-hand/right/xenoarch.dmi')
|
||||
item_state = "excavationdrill"
|
||||
excavation_amount = 0.5
|
||||
excavation_amount = 1
|
||||
toolspeed = 0.3
|
||||
desc = "Basic archaeological drill combining ultrasonic excitation and bluespace manipulation to provide extreme precision. The tip is adjustable from 1 to 30 cms."
|
||||
toolsounds = list('sound/weapons/thudswoosh.ogg')
|
||||
@@ -16,33 +16,32 @@
|
||||
hitsound = 'sound/weapons/circsawhit.ogg'
|
||||
|
||||
/obj/item/weapon/pickaxe/excavationdrill/attack_self(mob/user as mob)
|
||||
var/depth = input("Put the desired depth (1-30 centimeters).", "Set Depth", excavation_amount*2) as num
|
||||
if(depth>30 || depth<1)
|
||||
var/depth = round(input("Put the desired depth (1-15 centimeters).", "Set Depth", excavation_amount) as num)
|
||||
if(depth>15 || depth<1)
|
||||
to_chat(user, "<span class='notice'>Invalid depth.</span>")
|
||||
return
|
||||
excavation_amount = depth/2
|
||||
excavation_amount = depth
|
||||
to_chat(user, "<span class='notice'>You set the depth to [depth]cm.</span>")
|
||||
if (depth<4)
|
||||
if (depth<2)
|
||||
icon_state = "excavationdrill0"
|
||||
else if (depth >=4 && depth <8)
|
||||
else if (depth >=2 && depth <4)
|
||||
icon_state = "excavationdrill1"
|
||||
else if (depth >=8 && depth <12)
|
||||
else if (depth >=4 && depth <6)
|
||||
icon_state = "excavationdrill2"
|
||||
else if (depth >=12 && depth <16)
|
||||
else if (depth >=6 && depth <8)
|
||||
icon_state = "excavationdrill3"
|
||||
else if (depth >=16 && depth <20)
|
||||
else if (depth >=8 && depth <10)
|
||||
icon_state = "excavationdrill4"
|
||||
else if (depth >=20 && depth <24)
|
||||
else if (depth >=10 && depth <12)
|
||||
icon_state = "excavationdrill5"
|
||||
else if (depth >=24 && depth <28)
|
||||
else if (depth >=12 && depth <14)
|
||||
icon_state = "excavationdrill6"
|
||||
else
|
||||
icon_state = "excavationdrill7"
|
||||
|
||||
/obj/item/weapon/pickaxe/excavationdrill/examine(mob/user)
|
||||
..()
|
||||
var/depth = excavation_amount*2
|
||||
to_chat(user, "<span class='info'>It is currently set at [depth]cm.</span>")
|
||||
to_chat(user, "<span class='info'>It is currently set at [excavation_amount]cm.</span>")
|
||||
|
||||
/obj/item/weapon/pickaxe/excavationdrill/adv
|
||||
name = "diamond excavation drill"
|
||||
@@ -54,25 +53,25 @@
|
||||
desc = "Advanced archaeological drill combining ultrasonic excitation and bluespace manipulation to provide extreme precision. The diamond tip is adjustable from 1 to 100 cms."
|
||||
|
||||
/obj/item/weapon/pickaxe/excavationdrill/adv/attack_self(mob/user as mob)
|
||||
var/depth = input("Put the desired depth (1-100 centimeters).", "Set Depth", excavation_amount*2) as num
|
||||
if(depth>100 || depth<1)
|
||||
var/depth = round(input("Put the desired depth (1-50 centimeters).", "Set Depth", excavation_amount) as num)
|
||||
if(depth>50 || depth<1)
|
||||
to_chat(user, "<span class='notice'>Invalid depth.</span>")
|
||||
return
|
||||
excavation_amount = depth/2
|
||||
excavation_amount = depth
|
||||
to_chat(user, "<span class='notice'>You set the depth to [depth]cm.</span>")
|
||||
if (depth<12)
|
||||
if (depth<6)
|
||||
icon_state = "Dexcavationdrill0"
|
||||
else if (depth >=12 && depth <24)
|
||||
else if (depth >=6 && depth <12)
|
||||
icon_state = "Dexcavationdrill1"
|
||||
else if (depth >=24 && depth <36)
|
||||
else if (depth >=12 && depth <18)
|
||||
icon_state = "Dexcavationdrill2"
|
||||
else if (depth >=36 && depth <48)
|
||||
else if (depth >=18 && depth <24)
|
||||
icon_state = "Dexcavationdrill3"
|
||||
else if (depth >=48 && depth <60)
|
||||
else if (depth >=24 && depth <30)
|
||||
icon_state = "Dexcavationdrill4"
|
||||
else if (depth >=60 && depth <72)
|
||||
else if (depth >=30 && depth <36)
|
||||
icon_state = "Dexcavationdrill5"
|
||||
else if (depth >=72 && depth <84)
|
||||
else if (depth >=36 && depth <42)
|
||||
icon_state = "Dexcavationdrill6"
|
||||
else
|
||||
icon_state = "Dexcavationdrill7"
|
||||
icon_state = "Dexcavationdrill7"
|
||||
|
||||
@@ -9,78 +9,66 @@
|
||||
item_state = "syringe_0"
|
||||
toolspeed = 0.2
|
||||
desc = "Thick metallic wires for clearing away dust and loose scree (1 centimetre excavation depth)."
|
||||
excavation_amount = 0.5
|
||||
excavation_amount = 1
|
||||
toolsounds = list('sound/weapons/thudswoosh.ogg')
|
||||
drill_verb = "brushing"
|
||||
w_class = W_CLASS_SMALL
|
||||
|
||||
/obj/item/weapon/pickaxe/one_pick
|
||||
name = "2 cm pick"
|
||||
icon = 'icons/obj/xenoarchaeology.dmi'
|
||||
icon_state = "pick1"
|
||||
item_state = "syringe_0"
|
||||
toolspeed = 0.2
|
||||
desc = "A miniature excavation tool for precise digging (2 centimetre excavation depth)."
|
||||
excavation_amount = 1
|
||||
toolsounds = list('sound/items/Screwdriver.ogg')
|
||||
drill_verb = "delicately picking"
|
||||
w_class = W_CLASS_SMALL
|
||||
|
||||
/obj/item/weapon/pickaxe/two_pick
|
||||
name = "4 cm pick"
|
||||
name = "2 cm pick"
|
||||
icon = 'icons/obj/xenoarchaeology.dmi'
|
||||
icon_state = "pick2"
|
||||
item_state = "syringe_0"
|
||||
toolspeed = 0.2
|
||||
desc = "A miniature excavation tool for precise digging (4 centimetre excavation depth)."
|
||||
desc = "A miniature excavation tool for precise digging (2 centimetre excavation depth)."
|
||||
excavation_amount = 2
|
||||
toolsounds = list('sound/items/Screwdriver.ogg')
|
||||
drill_verb = "delicately picking"
|
||||
w_class = W_CLASS_SMALL
|
||||
|
||||
/obj/item/weapon/pickaxe/three_pick
|
||||
name = "6 cm pick"
|
||||
name = "3 cm pick"
|
||||
icon = 'icons/obj/xenoarchaeology.dmi'
|
||||
icon_state = "pick3"
|
||||
item_state = "syringe_0"
|
||||
toolspeed = 0.2
|
||||
desc = "A miniature excavation tool for precise digging (6 centimetre excavation depth)."
|
||||
desc = "A miniature excavation tool for precise digging (3 centimetre excavation depth)."
|
||||
excavation_amount = 3
|
||||
toolsounds = list('sound/items/Screwdriver.ogg')
|
||||
drill_verb = "delicately picking"
|
||||
w_class = W_CLASS_SMALL
|
||||
|
||||
/obj/item/weapon/pickaxe/four_pick
|
||||
name = "8 cm pick"
|
||||
name = "4 cm pick"
|
||||
icon = 'icons/obj/xenoarchaeology.dmi'
|
||||
icon_state = "pick4"
|
||||
item_state = "syringe_0"
|
||||
toolspeed = 0.2
|
||||
desc = "A miniature excavation tool for precise digging (8 centimetre excavation depth)."
|
||||
desc = "A miniature excavation tool for precise digging (4 centimetre excavation depth)."
|
||||
excavation_amount = 4
|
||||
toolsounds = list('sound/items/Screwdriver.ogg')
|
||||
drill_verb = "delicately picking"
|
||||
w_class = W_CLASS_SMALL
|
||||
|
||||
/obj/item/weapon/pickaxe/five_pick
|
||||
name = "10 cm pick"
|
||||
name = "5 cm pick"
|
||||
icon = 'icons/obj/xenoarchaeology.dmi'
|
||||
icon_state = "pick5"
|
||||
item_state = "syringe_0"
|
||||
toolspeed = 0.2
|
||||
desc = "A miniature excavation tool for precise digging (10 centimetre excavation depth)."
|
||||
desc = "A miniature excavation tool for precise digging (5 centimetre excavation depth)."
|
||||
excavation_amount = 5
|
||||
toolsounds = list('sound/items/Screwdriver.ogg')
|
||||
drill_verb = "delicately picking"
|
||||
w_class = W_CLASS_SMALL
|
||||
|
||||
/obj/item/weapon/pickaxe/six_pick
|
||||
name = "12 cm pick"
|
||||
name = "6 cm pick"
|
||||
icon = 'icons/obj/xenoarchaeology.dmi'
|
||||
icon_state = "pick6"
|
||||
item_state = "syringe_0"
|
||||
toolspeed = 0.2
|
||||
desc = "A miniature excavation tool for precise digging (12 centimetre excavation depth)."
|
||||
desc = "A miniature excavation tool for precise digging (6 centimetre excavation depth)."
|
||||
excavation_amount = 6
|
||||
toolsounds = list('sound/items/Screwdriver.ogg')
|
||||
drill_verb = "delicately picking"
|
||||
@@ -92,7 +80,7 @@
|
||||
icon_state = "pick_hand"
|
||||
item_state = "syringe_0"
|
||||
toolspeed = 0.3
|
||||
desc = "A smaller, more precise version of the pickaxe (30 centimetre excavation depth)."
|
||||
desc = "A smaller, more precise version of the pickaxe (15 centimetre excavation depth)."
|
||||
excavation_amount = 15
|
||||
toolsounds = list('sound/items/Crowbar.ogg')
|
||||
drill_verb = "clearing"
|
||||
@@ -108,10 +96,9 @@
|
||||
desc = "A set of picks for excavation."
|
||||
item_state = "syringe_kit"
|
||||
foldable = /obj/item/stack/sheet/cardboard //BubbleWrap
|
||||
storage_slots = 7
|
||||
storage_slots = 6
|
||||
w_class = W_CLASS_SMALL
|
||||
can_only_hold = list("/obj/item/weapon/pickaxe/brush",\
|
||||
"/obj/item/weapon/pickaxe/one_pick",\
|
||||
"/obj/item/weapon/pickaxe/two_pick",\
|
||||
"/obj/item/weapon/pickaxe/three_pick",\
|
||||
"/obj/item/weapon/pickaxe/four_pick",\
|
||||
@@ -124,7 +111,6 @@
|
||||
/obj/item/weapon/storage/box/excavation/New()
|
||||
..()
|
||||
new /obj/item/weapon/pickaxe/brush(src)
|
||||
new /obj/item/weapon/pickaxe/one_pick(src)
|
||||
new /obj/item/weapon/pickaxe/two_pick(src)
|
||||
new /obj/item/weapon/pickaxe/three_pick(src)
|
||||
new /obj/item/weapon/pickaxe/four_pick(src)
|
||||
|
||||
Reference in New Issue
Block a user