mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2026-01-01 04:53:42 +00:00
new analysis machines, fleshed out some existing ones to be functional, new chemical reagents,
Signed-off-by: Cael_Aislinn <cael_aislinn@yahoo.com.au>
This commit is contained in:
140
code/modules/research/xenoarchaeology/analysis.dm
Normal file
140
code/modules/research/xenoarchaeology/analysis.dm
Normal file
@@ -0,0 +1,140 @@
|
||||
|
||||
/obj/machinery/anomaly
|
||||
anchored = 1
|
||||
density = 1
|
||||
//
|
||||
var/obj/item/weapon/reagent_containers/glass/held_container
|
||||
var/obj/item/weapon/tank/fuel_container
|
||||
var/scan_time = 30 //change to 300 later
|
||||
var/report_num = 0
|
||||
var/scanning = 0
|
||||
var/safety_enabled = 1
|
||||
var/warning_given = 0
|
||||
var/heat_accumulation_rate = 0
|
||||
var/temperature = 273 //measured in kelvin, if this exceeds 1200, the machine is damaged and requires repairs
|
||||
//if this exceeds 600 and safety is enabled it will shutdown
|
||||
//temp greater than 600 also requires a safety prompt to initiate scanning
|
||||
var/scanner_dir = 0
|
||||
var/obj/machinery/anomaly/scanner/owned_scanner = null
|
||||
|
||||
/obj/machinery/anomaly/New()
|
||||
//connect to a nearby scanner pad
|
||||
if(scanner_dir)
|
||||
scanner = locate(/obj/machinery/anomaly/scanner) in get_step(src, scanner_dir)
|
||||
if(!scanner)
|
||||
scanner = locate(/obj/machinery/anomaly/scanner) in orange(1)
|
||||
|
||||
//this proc should be overriden by each individual machine
|
||||
/obj/machinery/anomaly/attack_hand(var/mob/user as mob)
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
return
|
||||
user.machine = src
|
||||
var/dat = "<B>[src.name]</B><BR>"
|
||||
dat += "[scanner ? "Scanner connected." : "Scanner disconnected."]"
|
||||
dat += "Module heat level:[temperature] kelvin<br>"
|
||||
dat += "Safeties set at 600k, shielding failure at 1200k. Failure to maintain safe heat levels may result in equipment damage.<br>"
|
||||
dat += "<hr>"
|
||||
dat += "[held_container ? "<A href='?src=\ref[src];eject_beaker=1'>Eject beaker</a>" : "No beaker inserted."]<br>"
|
||||
dat += "[held_container ? "<A href='?src=\ref[src];eject_fuel=1'>Eject fuel tank</a>" : "No fuel tank inserted."]<br>"
|
||||
dat += "<A href='?src=\ref[src];begin=1'>Begin scanning</a>"
|
||||
dat += "<hr>"
|
||||
dat += "<A href='?src=\ref[src];refresh=1'>Refresh</a><BR>"
|
||||
dat += "<A href='?src=\ref[src];close=1'>Close</a><BR>"
|
||||
user << browse(dat, "window=anomaly;size=450x500")
|
||||
onclose(user, "anomaly")
|
||||
|
||||
obj/machinery/anomaly/attackby(obj/item/weapon/W as obj, mob/living/user as mob)
|
||||
if(istype(W, /obj/item/weapon/reagent_containers/glass))
|
||||
//var/obj/item/weapon/reagent_containers/glass/G = W
|
||||
if(held_container)
|
||||
user << "\red You must remove the [held_container] first."
|
||||
else
|
||||
user << "\blue You put the [held_container] into the [src]."
|
||||
user.drop_item(W)
|
||||
held_container.loc = src
|
||||
held_container = W
|
||||
updateDialog()
|
||||
|
||||
else if(istype(W, /obj/item/weapon/tank))
|
||||
//var/obj/item/weapon/reagent_containers/glass/G = W
|
||||
if(fuel_container)
|
||||
user << "\red You must remove the [fuel_container] first."
|
||||
else
|
||||
user << "\blue You put the [fuel_container] into the [src]."
|
||||
user.drop_item(W)
|
||||
fuel_container.loc = src
|
||||
fuel_container = W
|
||||
updateDialog()
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/machinery/anomaly/process()
|
||||
//not sure if everything needs to heat up, or just the GLPC
|
||||
var/environmental_temp = loc.return_air().temperature
|
||||
if(scanning)
|
||||
//heat up as we go, but if the air is freezing then heat up much slower
|
||||
var/new_heat = heat_accumulation_rate + heat_accumulation_rate * rand(-0.5,0.5)
|
||||
if(environmental_temp < 273)
|
||||
new_heat /= 2
|
||||
temperature += new_heat
|
||||
if(temperature >= 600)
|
||||
if(!warning_given || temperature >= 1200)
|
||||
src.visible_message("The [src] bleets.", 2)
|
||||
warning_given = 1
|
||||
if(safety_enabled)
|
||||
scanning = 0
|
||||
else if(temperature > environmental_temp)
|
||||
//cool down to match the air
|
||||
temperature -= 10 + rand(-5,5)
|
||||
if(temperature < environmental_temp
|
||||
temperature = environmental_temp
|
||||
else if(temperature < environmental_temp)
|
||||
//heat up to match the air
|
||||
temperature += 10 + rand(-5,5)
|
||||
if(temperature > environmental_temp
|
||||
temperature = environmental_temp
|
||||
|
||||
obj/machinery/anomaly/proc/ScanResults()
|
||||
//instantiate in children to produce unique scan behaviour
|
||||
return "Error initialising scanning components."
|
||||
|
||||
obj/machinery/anomaly/proc/BeginScan()
|
||||
var/total_scan_time = scan_time + scan_time * rand(-0.5, 0.5)
|
||||
|
||||
scanning = 1
|
||||
spawn(total_scan_time)
|
||||
if(scanning)
|
||||
scanning = 0
|
||||
|
||||
//determine the results and print a report
|
||||
if(held_container)
|
||||
src.visible_message("The [src] chimes.", 2)
|
||||
var/obj/item/weapon/paper/P = new(src.loc)
|
||||
P.name = "[src] analysis report #[++report_num]"
|
||||
P.info = "<b>[src] analysis report #[report_num]</b><br><br>" + ScanResults()
|
||||
P.stamped = list(/obj/item/weapon/stamp)
|
||||
P.overlays = list("paper_stamped")
|
||||
else
|
||||
src.visible_message("The [src] buzzes.", 2)
|
||||
|
||||
obj/machinery/anomaly/Topic(href, href_list)
|
||||
if(href_list["close"])
|
||||
usr << browse(null, "window=anomaly")
|
||||
usr.machine = null
|
||||
if(href_list["eject_beaker"])
|
||||
held_container.loc = src.loc
|
||||
held_container = null
|
||||
if(href_list["eject_fuel"])
|
||||
fuel_container.loc = src.loc
|
||||
fuel_container = null
|
||||
if(href_list["begin"])
|
||||
if(temperature >= 600)
|
||||
var/proceed = input("Unsafe internal temperature detected, do you wish to continue?","Warning")
|
||||
if(proceed)
|
||||
safety_enabled = 0
|
||||
BeginScan()
|
||||
else
|
||||
BeginScan()
|
||||
|
||||
..()
|
||||
updateDialog()
|
||||
@@ -0,0 +1,6 @@
|
||||
|
||||
obj/machinery/anomaly/accelerator
|
||||
name = "Accelerator Spectrometer"
|
||||
desc = "A specialised, complex analysis machine."
|
||||
icon = 'virology.dmi'
|
||||
icon_state = "analyser"
|
||||
@@ -0,0 +1,36 @@
|
||||
|
||||
obj/machinery/anomaly/fourier_transform
|
||||
name = "Fourier Transform spectroscope"
|
||||
desc = "A specialised, complex analysis machine."
|
||||
icon = 'virology.dmi'
|
||||
icon_state = "analyser"
|
||||
|
||||
obj/machinery/anomaly/fourier_transform/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/reagent/A in held_container.reagents.reagent_list)
|
||||
var/datum/reagent/R = A
|
||||
if(istype(R,datum/reagent/density_separated_liquid))
|
||||
scanned_sample = R.data
|
||||
else if(istype(R,datum/reagent/analysis_sample))
|
||||
scanned_sample = R.data
|
||||
else
|
||||
carrier = R.type
|
||||
num_reagents++
|
||||
|
||||
if(num_reagents == 2 && scanned_sample && carrier)
|
||||
//all necessary components are present
|
||||
var/specifity = GetResultSpecifity(scanned_sample, carrier)
|
||||
var/distance = scanned_sample.artifact_distance
|
||||
if(specifity > 0.6)
|
||||
artifact_distance += rand(-0.1, 0.1) * artifact_distance
|
||||
else
|
||||
var/offset = 1 - specifity
|
||||
artifact_distance += rand(-offset, offset) * artifact_distance
|
||||
results = "Anomalous energy absorption through carrier ([carrier.id]) indicates emission radius: [artifact_distance]"
|
||||
|
||||
return results
|
||||
@@ -0,0 +1,80 @@
|
||||
|
||||
obj/machinery/anomaly/gas_chromatography
|
||||
name = "Gas Chromatography Spectrometer"
|
||||
desc = "A specialised, complex analysis machine."
|
||||
icon = 'virology.dmi'
|
||||
icon_state = "analyser"
|
||||
|
||||
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/reagent/A in held_container.reagents.reagent_list)
|
||||
var/datum/reagent/R = A
|
||||
if(istype(R,datum/reagent/density_separated_liquid))
|
||||
scanned_sample = R.data
|
||||
else if(istype(R,datum/reagent/analysis_sample))
|
||||
scanned_sample = R.data
|
||||
else
|
||||
carrier = R.type
|
||||
num_reagents++
|
||||
|
||||
if(num_reagents == 2 && scanned_sample && carrier)
|
||||
//all necessary components are present
|
||||
results = "Carrier ([carrier.id]) specifity: [GetResultSpecifity(scanned_sample, carrier)]"
|
||||
|
||||
return results
|
||||
|
||||
obj/machinery/anomaly/proc/GetResultSpecifity(var/datum/geosample/scanned_sample, var/datum/reagent/carrier)
|
||||
var/specifity = 0
|
||||
if(scanned_sample && carrier)
|
||||
var/threshold = 0.6
|
||||
|
||||
if(scanned_sample.main_find == carrier.id)
|
||||
specifity += threshold + rand(0, 1 - threshold)
|
||||
if(scanned_sample.secondary_find == carrier.id)
|
||||
specifity += threshold + rand(0, 1 - threshold)
|
||||
|
||||
/*
|
||||
//check the main turf
|
||||
if(scanned_sample.main_find == FIND_NOTHING)
|
||||
//nothing?
|
||||
else if(scanned_sample.main_find == FIND_PLANT || scanned_sample.main_find == FIND_BIO || scanned_sample.main_find == FIND_SKULL)
|
||||
//preserved plant or animal
|
||||
if(carrier.id == "carbon")
|
||||
specifity += threshold + rand(0,1 - threshold)
|
||||
else if(scanned_sample.main_find == FIND_METEORIC)
|
||||
//deep space
|
||||
if(carrier.id == "neon")
|
||||
specifity += threshold + rand(0,1 - threshold)
|
||||
else if(scanned_sample.main_find == FIND_ICE)
|
||||
//solid h20
|
||||
if(carrier.id == "beryllium")
|
||||
specifity += threshold + rand(0,1 - threshold)
|
||||
else if(scanned_sample.main_find == FIND_IGNEOUS || scanned_sample.main_find == FIND_METAMORPHIC || scanned_sample.main_find == FIND_CARBONATE)
|
||||
//rock
|
||||
if(carrier.id == "calcium" || carrier.id == "chlorine")
|
||||
specifity += threshold + rand(0,1 - threshold)
|
||||
else if(scanned_sample.main_find == FIND_CRYSTALLINE)
|
||||
//some kind of refractive, crystalline matter
|
||||
if(carrier.id == "helium")
|
||||
specifity += threshold + rand(0,1 - threshold)
|
||||
else if(scanned_sample.main_find == FIND_METALLIC)
|
||||
//something metal (could be just ores, not necessarily a synthetic artifact)
|
||||
if(carrier.id == "silicon")
|
||||
specifity += threshold + rand(0,1 - threshold)
|
||||
else if(scanned_sample.main_find == FIND_SEDIMENTARY)
|
||||
//sandy rock
|
||||
if(carrier.id == "aluminium")
|
||||
specifity += threshold + rand(0,1 - threshold)
|
||||
*/
|
||||
|
||||
if(specifity > 1)
|
||||
specifity = 0.9 + rand(0,0.1)
|
||||
else if(specifity <= 0)
|
||||
specifity += rand(0, threshold)
|
||||
|
||||
return specifity
|
||||
@@ -0,0 +1,6 @@
|
||||
|
||||
obj/machinery/anomaly/hyperspectral
|
||||
name = "Hypospectral Imager"
|
||||
desc = "A specialised, complex analysis machine."
|
||||
icon = 'virology.dmi'
|
||||
icon_state = "analyser"
|
||||
@@ -0,0 +1,6 @@
|
||||
|
||||
obj/machinery/anomaly/ion_mobility
|
||||
name = "Ion Mobility Spectrometer"
|
||||
desc = "A specialised, complex analysis machine."
|
||||
icon = 'virology.dmi'
|
||||
icon_state = "analyser"
|
||||
@@ -0,0 +1,6 @@
|
||||
|
||||
obj/machinery/anomaly/radiometric
|
||||
name = "Isotope ratio spectrometre"
|
||||
desc = "A specialised, complex analysis machine."
|
||||
icon = 'virology.dmi'
|
||||
icon_state = "analyser"
|
||||
@@ -0,0 +1,8 @@
|
||||
|
||||
/obj/machinery/anomaly/scanner
|
||||
name = "scanner pad"
|
||||
desc = "Place larger objects here for scanning."
|
||||
icon = 'stationobjs.dmi'
|
||||
icon_state = "tele0"
|
||||
anchored = 1
|
||||
density = 0
|
||||
@@ -2,19 +2,45 @@
|
||||
//chemistry stuff here so that it can be easily viewed/modified
|
||||
datum
|
||||
reagent
|
||||
tungsten //used purely to make lith-sodi-tungs
|
||||
tungsten //purely used to make lith-sodi-tungs
|
||||
name = "Tungsten"
|
||||
id = "tungsten"
|
||||
description = "A chemical element, and a strong oxidising agent."
|
||||
reagent_state = SOLID
|
||||
color = "#808080" // rgb: 128, 128, 128, meant to be a silvery grey but idrc
|
||||
color = "#808080" // rgb: 128, 128, 128
|
||||
//todo: make this silvery grey
|
||||
|
||||
neon //purely used as a carrier
|
||||
name = "Neon"
|
||||
id = "neon"
|
||||
description = "A chemical element, commonly used in lighting."
|
||||
reagent_state = LIQUID
|
||||
color = "#808080" // rgb: 128, 128, 128,
|
||||
//todo: make this fluro/bright purple
|
||||
|
||||
beryllium //purely used as a carrier
|
||||
name = "Beryllium"
|
||||
id = "beryllium"
|
||||
description = "A chemical element, prized for it's rigidity, thermal stability and low density when used in alloys."
|
||||
reagent_state = LIQUID
|
||||
color = "#808080" // rgb: 128, 128, 128,
|
||||
//todo: make this dark grey
|
||||
|
||||
calcium //purely used as a carrier
|
||||
name = "Calcium"
|
||||
id = "calcium"
|
||||
description = "An extremely common chemical element found throughout living organisms."
|
||||
reagent_state = LIQUID
|
||||
color = "#808080" // rgb: 128, 128, 128,
|
||||
//todo: make this bone-white colour
|
||||
|
||||
lithiumsodiumtungstate
|
||||
name = "Lithium Sodium Tungstate"
|
||||
id = "lithiumsodiumtungstate"
|
||||
description = "A reducing agent for geological compounds."
|
||||
reagent_state = LIQUID
|
||||
color = "#808080" // rgb: 128, 128, 128, again, silvery grey
|
||||
color = "#808080" // rgb: 128, 128, 128
|
||||
//todo: make this silvery grey
|
||||
|
||||
ground_rock
|
||||
name = "Ground Rock"
|
||||
@@ -25,7 +51,7 @@ datum
|
||||
//todo: make this brown
|
||||
|
||||
density_separated_sample
|
||||
name = "Analysis sample"
|
||||
name = "Analysis liquid"
|
||||
id = "density_separated_sample"
|
||||
description = "A watery paste used in chemical analysis."
|
||||
reagent_state = LIQUID
|
||||
@@ -33,7 +59,7 @@ datum
|
||||
//todo: make this browny-white
|
||||
|
||||
analysis_sample
|
||||
name = "Analysis sample"
|
||||
name = "Analysis liquid"
|
||||
id = "analysis_sample"
|
||||
description = "A watery paste used in chemical analysis."
|
||||
reagent_state = LIQUID
|
||||
@@ -73,3 +99,15 @@ datum
|
||||
required_reagents = list("density_separated_sample" = 5)
|
||||
result_amount = 4
|
||||
requires_heating = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/solution_tray
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "solution_tray"
|
||||
desc = "A small, open-topped glass container for delicate research samples."
|
||||
m_amt = 0
|
||||
g_amt = 5
|
||||
w_class = 1.0
|
||||
amount_per_transfer_from_this = 1
|
||||
possible_transfer_amounts = list(1)
|
||||
volume = 2
|
||||
flags = FPRINT | OPENCONTAINER
|
||||
|
||||
@@ -1,119 +0,0 @@
|
||||
obj/machinery/gas_chromatography
|
||||
name = "Gas Chromatography Spectrometer"
|
||||
desc = "A specialised mass spectrometer."
|
||||
icon = 'virology.dmi'
|
||||
icon_state = "analyser"
|
||||
|
||||
obj/machinery/gas_chromatography/Topic(href, href_list)
|
||||
if(href_list["close"])
|
||||
usr << browse(null, "window=artanalyser")
|
||||
usr.machine = null
|
||||
|
||||
updateDialog()
|
||||
|
||||
obj/machinery/gas_chromatography/attack_hand(var/mob/user as mob)
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
return
|
||||
user.machine = src
|
||||
var/dat = "<B>Gas Chromatography Spectrometer</B><BR>"
|
||||
dat += "<hr>"
|
||||
dat += "<A href='?src=\ref[src];refresh=1'>Refresh<BR>"
|
||||
dat += "<A href='?src=\ref[src];close=1'>Close<BR>"
|
||||
user << browse(dat, "window=artanalyser;size=450x500")
|
||||
onclose(user, "artanalyser")
|
||||
|
||||
obj/machinery/accelerator
|
||||
name = "Accelerator Spectrometer"
|
||||
desc = "A specialised mass spectrometer."
|
||||
icon = 'virology.dmi'
|
||||
icon_state = "analyser"
|
||||
|
||||
obj/machinery/accelerator/Topic(href, href_list)
|
||||
if(href_list["close"])
|
||||
usr << browse(null, "window=artanalyser")
|
||||
usr.machine = null
|
||||
|
||||
updateDialog()
|
||||
|
||||
obj/machinery/accelerator/attack_hand(var/mob/user as mob)
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
return
|
||||
user.machine = src
|
||||
var/dat = "<B>Accelerator Spectrometer</B><BR>"
|
||||
dat += "<hr>"
|
||||
dat += "<A href='?src=\ref[src];refresh=1'>Refresh<BR>"
|
||||
dat += "<A href='?src=\ref[src];close=1'>Close<BR>"
|
||||
user << browse(dat, "window=artanalyser;size=450x500")
|
||||
onclose(user, "artanalyser")
|
||||
|
||||
obj/machinery/fourier_transform
|
||||
name = "Fourier Transform Spectroscope"
|
||||
desc = "A specialised geochemical analysis device."
|
||||
icon = 'virology.dmi'
|
||||
icon_state = "analyser"
|
||||
|
||||
obj/machinery/fourier_transform/Topic(href, href_list)
|
||||
if(href_list["close"])
|
||||
usr << browse(null, "window=artanalyser")
|
||||
usr.machine = null
|
||||
|
||||
updateDialog()
|
||||
|
||||
obj/machinery/fourier_transform/attack_hand(var/mob/user as mob)
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
return
|
||||
user.machine = src
|
||||
var/dat = "<B>Fourier Transform Spectroscope</B><BR>"
|
||||
dat += "<hr>"
|
||||
dat += "<A href='?src=\ref[src];refresh=1'>Refresh<BR>"
|
||||
dat += "<A href='?src=\ref[src];close=1'>Close<BR>"
|
||||
user << browse(dat, "window=artanalyser;size=450x500")
|
||||
onclose(user, "artanalyser")
|
||||
|
||||
obj/machinery/radiometric
|
||||
name = "Radiometric Exposure Spectrometer"
|
||||
desc = "A specialised mass spectrometer, able to radiometrically date inserted materials."
|
||||
icon = 'virology.dmi'
|
||||
icon_state = "analyser"
|
||||
|
||||
obj/machinery/radiometric/Topic(href, href_list)
|
||||
if(href_list["close"])
|
||||
usr << browse(null, "window=artanalyser")
|
||||
usr.machine = null
|
||||
|
||||
updateDialog()
|
||||
|
||||
obj/machinery/radiometric/attack_hand(var/mob/user as mob)
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
return
|
||||
user.machine = src
|
||||
var/dat = "<B>Radiometric Exposure Spectrometer</B><BR>"
|
||||
dat += "<hr>"
|
||||
dat += "<A href='?src=\ref[src];refresh=1'>Refresh<BR>"
|
||||
dat += "<A href='?src=\ref[src];close=1'>Close<BR>"
|
||||
user << browse(dat, "window=artanalyser;size=450x500")
|
||||
onclose(user, "artanalyser")
|
||||
|
||||
obj/machinery/ion_mobility
|
||||
name = "Ion Mobility Spectrometer"
|
||||
desc = "A specialised mass spectrometer."
|
||||
icon = 'virology.dmi'
|
||||
icon_state = "analyser"
|
||||
|
||||
obj/machinery/ion_mobility/Topic(href, href_list)
|
||||
if(href_list["close"])
|
||||
usr << browse(null, "window=artanalyser")
|
||||
usr.machine = null
|
||||
|
||||
updateDialog()
|
||||
|
||||
obj/machinery/ion_mobility/attack_hand(var/mob/user as mob)
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
return
|
||||
user.machine = src
|
||||
var/dat = "<B>Ion Mobility Spectrometer</B><BR>"
|
||||
dat += "<hr>"
|
||||
dat += "<A href='?src=\ref[src];refresh=1'>Refresh<BR>"
|
||||
dat += "<A href='?src=\ref[src];close=1'>Close<BR>"
|
||||
user << browse(dat, "window=artanalyser;size=450x500")
|
||||
onclose(user, "artanalyser")
|
||||
213
code/modules/research/xenoarchaeology/crystal.dm
Normal file
213
code/modules/research/xenoarchaeology/crystal.dm
Normal file
@@ -0,0 +1,213 @@
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// crystals
|
||||
|
||||
/obj/item/weapon/crystal
|
||||
name = "Crystal"
|
||||
icon = 'mining.dmi'
|
||||
icon_state = "crystal"
|
||||
|
||||
//needs to be solid to have collision, but shouldn't block movement
|
||||
/*/obj/item/weapon/crystal/bullet_act(var/obj/item/projectile/P)
|
||||
if(istype(P,/obj/item/projectile/beam/emitter))
|
||||
switch(rand(0,3))
|
||||
if(0)
|
||||
var/obj/item/projectile/beam/emitter/A = new /obj/item/projectile/beam/emitter( src.loc )
|
||||
A.dir = 1
|
||||
A.yo = 20
|
||||
A.xo = 0
|
||||
if(0)
|
||||
var/obj/item/projectile/beam/emitter/A = new /obj/item/projectile/beam/emitter( src.loc )
|
||||
A.dir = 2
|
||||
A.yo = -20
|
||||
A.xo = 0
|
||||
if(0)
|
||||
var/obj/item/projectile/beam/emitter/A = new /obj/item/projectile/beam/emitter( src.loc )
|
||||
A.dir = 4
|
||||
A.yo = 0
|
||||
A.xo = 20
|
||||
if(0)
|
||||
var/obj/item/projectile/beam/emitter/A = new /obj/item/projectile/beam/emitter( src.loc )
|
||||
A.dir = 8
|
||||
A.yo = 0
|
||||
A.xo = -20
|
||||
else
|
||||
..()*/
|
||||
|
||||
/obj/item/weapon/talkingcrystal
|
||||
name = "Crystal"
|
||||
icon = 'mining.dmi'
|
||||
icon_state = "crystal2"
|
||||
var/list/list/words = list()
|
||||
var/lastsaid
|
||||
|
||||
/obj/item/weapon/talkingcrystal/New()
|
||||
spawn(100)
|
||||
process()
|
||||
|
||||
//needs to be solid to have collision, but shouldn't block movement
|
||||
/*/obj/item/weapon/talkingcrystal/bullet_act(var/obj/item/projectile/P)
|
||||
if(istype(P,/obj/item/projectile/beam))
|
||||
switch(rand(0,3))
|
||||
if(0)
|
||||
var/obj/item/projectile/beam/A = new /obj/item/projectile/beam( src.loc )
|
||||
A.dir = pick(alldirs)
|
||||
A.yo = 20
|
||||
A.xo = 0
|
||||
if(0)
|
||||
var/obj/item/projectile/beam/A = new /obj/item/projectile/beam( src.loc )
|
||||
A.dir = pick(alldirs)
|
||||
A.yo = -20
|
||||
A.xo = 0
|
||||
if(0)
|
||||
var/obj/item/projectile/beam/A = new /obj/item/projectile/beam( src.loc )
|
||||
A.dir = pick(alldirs)
|
||||
A.yo = 0
|
||||
A.xo = 20
|
||||
if(0)
|
||||
var/obj/item/projectile/beam/A = new /obj/item/projectile/beam( src.loc )
|
||||
A.dir = pick(alldirs)
|
||||
A.yo = 0
|
||||
A.xo = -20
|
||||
var/word = pick("pain","hurt","masochism","sadist","rage","repressed","ouch","evil","void","kill","destroy")
|
||||
SaySomething(word)
|
||||
else
|
||||
..()*/
|
||||
|
||||
/obj/item/weapon/talkingcrystal/proc/catchMessage(var/msg, var/mob/source)
|
||||
var/list/seperate = list()
|
||||
if(findtext(msg,"(("))
|
||||
return
|
||||
else if(findtext(msg,"))"))
|
||||
return
|
||||
else if(findtext(msg," ")==0)
|
||||
return
|
||||
else
|
||||
/*var/l = lentext(msg)
|
||||
if(findtext(msg," ",l,l+1)==0)
|
||||
msg+=" "*/
|
||||
seperate = stringsplit(msg, " ")
|
||||
|
||||
var/addressing_crystal = 0
|
||||
if("crystal" in seperate || "gem" in seperate)
|
||||
addressing_crystal = 1
|
||||
|
||||
for(var/Xa = 1,Xa<seperate.len,Xa++)
|
||||
var/next = Xa + 1
|
||||
if(words.len > 20 + rand(10,20))
|
||||
words.Remove(words[1])
|
||||
if(!words["[lowertext(seperate[Xa])]"])
|
||||
words["[lowertext(seperate[Xa])]"] = list()
|
||||
var/list/w = words["[lowertext(seperate[Xa])]"]
|
||||
if(w)
|
||||
w.Add("[lowertext(seperate[next])]")
|
||||
//world << "Adding [lowertext(seperate[next])] to [lowertext(seperate[Xa])]"
|
||||
|
||||
for(var/mob/O in viewers(src))
|
||||
O.show_message("\blue The crystal hums for bit then stops...", 1)
|
||||
if(!rand(0, 5 - addressing_crystal * 3))
|
||||
spawn(2) SaySomething(pick(seperate))
|
||||
|
||||
/obj/item/weapon/talkingcrystal/proc/debug()
|
||||
//set src in view()
|
||||
for(var/v in words)
|
||||
world << "[uppertext(v)]"
|
||||
var/list/d = words["[v]"]
|
||||
for(var/X in d)
|
||||
world << "[X]"
|
||||
|
||||
/obj/item/weapon/talkingcrystal/proc/SaySomething(var/word = null)
|
||||
|
||||
var/msg
|
||||
var/limit = rand(max(5,words.len/2))+3
|
||||
var/text
|
||||
if(!word)
|
||||
text = "[pick(words)]"
|
||||
else
|
||||
text = pick(stringsplit(word, " "))
|
||||
if(lentext(text)==1)
|
||||
text=uppertext(text)
|
||||
else
|
||||
var/cap = copytext(text,1,2)
|
||||
cap = uppertext(cap)
|
||||
cap += copytext(text,2,lentext(text)+1)
|
||||
text=cap
|
||||
var/q = 0
|
||||
msg+=text
|
||||
if(msg=="What" | msg == "Who" | msg == "How" | msg == "Why" | msg == "Are")
|
||||
q=1
|
||||
|
||||
text=lowertext(text)
|
||||
for(var/ya,ya <= limit,ya++)
|
||||
|
||||
if(words.Find("[text]"))
|
||||
var/list/w = words["[text]"]
|
||||
text=pick(w)
|
||||
else
|
||||
text = "[pick(words)]"
|
||||
msg+=" [text]"
|
||||
if(q)
|
||||
msg+="?"
|
||||
else
|
||||
if(rand(0,10))
|
||||
msg+="."
|
||||
else
|
||||
msg+="!"
|
||||
|
||||
var/list/listening = viewers(src)
|
||||
for(var/mob/M in world)
|
||||
if (!M.client)
|
||||
continue //skip monkeys and leavers
|
||||
if (istype(M, /mob/new_player))
|
||||
continue
|
||||
if(M.stat == 2 && M.client.ghost_ears)
|
||||
listening|=M
|
||||
|
||||
for(var/mob/M in listening)
|
||||
M << "<b>The crystal</b> reverberates, \blue\"[msg]\""
|
||||
lastsaid = world.timeofday + rand(300,800)
|
||||
|
||||
/obj/item/weapon/talkingcrystal/process()
|
||||
if(prob(25) && world.timeofday >= lastsaid && words.len >= 1)
|
||||
SaySomething()
|
||||
spawn(100)
|
||||
process()
|
||||
|
||||
|
||||
|
||||
|
||||
//sentient crystals
|
||||
/mob/sentient_crystal
|
||||
name = "Crystal"
|
||||
icon = 'mining.dmi'
|
||||
icon_state = "crystal2"
|
||||
var/list/list/words = list()
|
||||
var/lastsaid
|
||||
|
||||
/mob/sentient_crystal/proc/catchMessage(var/msg, var/mob/source)
|
||||
var/list/seperate = list()
|
||||
if(findtext(msg,"(("))
|
||||
return
|
||||
else if(findtext(msg,"))"))
|
||||
return
|
||||
else
|
||||
/*var/l = lentext(msg)
|
||||
if(findtext(msg," ",l,l+1)==0)
|
||||
msg+=" "*/
|
||||
seperate = stringsplit(msg, " ")
|
||||
|
||||
for(var/Xa = 1,Xa<seperate.len,Xa++)
|
||||
var/next = Xa + 1
|
||||
if(words.len > 20 + rand(10,20))
|
||||
words.Remove(words[1])
|
||||
if(!words["[lowertext(seperate[Xa])]"])
|
||||
words["[lowertext(seperate[Xa])]"] = list()
|
||||
var/list/w = words["[lowertext(seperate[Xa])]"]
|
||||
if(w)
|
||||
w.Add("[lowertext(seperate[next])]")
|
||||
//world << "Adding [lowertext(seperate[next])] to [lowertext(seperate[Xa])]"
|
||||
|
||||
for(var/mob/O in viewers(src))
|
||||
O.show_message("\blue The crystal hums for bit then stops...", 1)
|
||||
|
||||
/mob/sentient_crystal/Life()
|
||||
@@ -83,265 +83,3 @@
|
||||
M.show_message("\blue The acid splashes harmlessly off the rock, nothing else interesting happens.",1)
|
||||
return 1
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// crystals
|
||||
|
||||
/obj/item/weapon/crystal
|
||||
name = "Crystal"
|
||||
icon = 'mining.dmi'
|
||||
icon_state = "crystal"
|
||||
|
||||
/obj/item/weapon/crystal/bullet_act(var/obj/item/projectile/P)
|
||||
if(istype(P,/obj/item/projectile/beam/emitter))
|
||||
switch(rand(0,3))
|
||||
if(0)
|
||||
var/obj/item/projectile/beam/emitter/A = new /obj/item/projectile/beam/emitter( src.loc )
|
||||
A.dir = 1
|
||||
A.yo = 20
|
||||
A.xo = 0
|
||||
if(0)
|
||||
var/obj/item/projectile/beam/emitter/A = new /obj/item/projectile/beam/emitter( src.loc )
|
||||
A.dir = 2
|
||||
A.yo = -20
|
||||
A.xo = 0
|
||||
if(0)
|
||||
var/obj/item/projectile/beam/emitter/A = new /obj/item/projectile/beam/emitter( src.loc )
|
||||
A.dir = 4
|
||||
A.yo = 0
|
||||
A.xo = 20
|
||||
if(0)
|
||||
var/obj/item/projectile/beam/emitter/A = new /obj/item/projectile/beam/emitter( src.loc )
|
||||
A.dir = 8
|
||||
A.yo = 0
|
||||
A.xo = -20
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/item/weapon/talkingcrystal
|
||||
name = "Crystal"
|
||||
icon = 'mining.dmi'
|
||||
icon_state = "crystal2"
|
||||
var/list/list/words = list()
|
||||
var/lastsaid
|
||||
|
||||
/obj/item/weapon/talkingcrystal/New()
|
||||
spawn(100)
|
||||
process()
|
||||
|
||||
/obj/item/weapon/talkingcrystal/bullet_act(var/obj/item/projectile/P)
|
||||
if(istype(P,/obj/item/projectile/beam))
|
||||
switch(rand(0,3))
|
||||
if(0)
|
||||
var/obj/item/projectile/beam/A = new /obj/item/projectile/beam( src.loc )
|
||||
A.dir = pick(alldirs)
|
||||
A.yo = 20
|
||||
A.xo = 0
|
||||
if(0)
|
||||
var/obj/item/projectile/beam/A = new /obj/item/projectile/beam( src.loc )
|
||||
A.dir = pick(alldirs)
|
||||
A.yo = -20
|
||||
A.xo = 0
|
||||
if(0)
|
||||
var/obj/item/projectile/beam/A = new /obj/item/projectile/beam( src.loc )
|
||||
A.dir = pick(alldirs)
|
||||
A.yo = 0
|
||||
A.xo = 20
|
||||
if(0)
|
||||
var/obj/item/projectile/beam/A = new /obj/item/projectile/beam( src.loc )
|
||||
A.dir = pick(alldirs)
|
||||
A.yo = 0
|
||||
A.xo = -20
|
||||
var/word = pick("pain","hurt","masochism","sadist","rage","repressed","ouch","evil","void","kill","destroy")
|
||||
SaySomething(word)
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/item/weapon/talkingcrystal/proc/catchMessage(var/msg, var/mob/source)
|
||||
var/list/seperate = list()
|
||||
if(findtext(msg,"(("))
|
||||
return
|
||||
else if(findtext(msg,"))"))
|
||||
return
|
||||
else if(findtext(msg," ")==0)
|
||||
return
|
||||
else
|
||||
/*var/l = lentext(msg)
|
||||
if(findtext(msg," ",l,l+1)==0)
|
||||
msg+=" "*/
|
||||
seperate = stringsplit(msg, " ")
|
||||
|
||||
var/addressing_crystal = 0
|
||||
if("crystal" in seperate || "gem" in seperate)
|
||||
addressing_crystal = 1
|
||||
|
||||
for(var/Xa = 1,Xa<seperate.len,Xa++)
|
||||
var/next = Xa + 1
|
||||
if(words.len > 20 + rand(10,20))
|
||||
words.Remove(words[1])
|
||||
if(!words["[lowertext(seperate[Xa])]"])
|
||||
words["[lowertext(seperate[Xa])]"] = list()
|
||||
var/list/w = words["[lowertext(seperate[Xa])]"]
|
||||
if(w)
|
||||
w.Add("[lowertext(seperate[next])]")
|
||||
//world << "Adding [lowertext(seperate[next])] to [lowertext(seperate[Xa])]"
|
||||
|
||||
for(var/mob/O in viewers(src))
|
||||
O.show_message("\blue The crystal hums for bit then stops...", 1)
|
||||
if(!rand(0, 5 - addressing_crystal * 3))
|
||||
spawn(2) SaySomething(pick(seperate))
|
||||
|
||||
/obj/item/weapon/talkingcrystal/proc/debug()
|
||||
//set src in view()
|
||||
for(var/v in words)
|
||||
world << "[uppertext(v)]"
|
||||
var/list/d = words["[v]"]
|
||||
for(var/X in d)
|
||||
world << "[X]"
|
||||
|
||||
/obj/item/weapon/talkingcrystal/proc/SaySomething(var/word = null)
|
||||
|
||||
var/msg
|
||||
var/limit = rand(max(5,words.len/2))+3
|
||||
var/text
|
||||
if(!word)
|
||||
text = "[pick(words)]"
|
||||
else
|
||||
text = pick(stringsplit(word, " "))
|
||||
if(lentext(text)==1)
|
||||
text=uppertext(text)
|
||||
else
|
||||
var/cap = copytext(text,1,2)
|
||||
cap = uppertext(cap)
|
||||
cap += copytext(text,2,lentext(text)+1)
|
||||
text=cap
|
||||
var/q = 0
|
||||
msg+=text
|
||||
if(msg=="What" | msg == "Who" | msg == "How" | msg == "Why" | msg == "Are")
|
||||
q=1
|
||||
|
||||
text=lowertext(text)
|
||||
for(var/ya,ya <= limit,ya++)
|
||||
|
||||
if(words.Find("[text]"))
|
||||
var/list/w = words["[text]"]
|
||||
text=pick(w)
|
||||
else
|
||||
text = "[pick(words)]"
|
||||
msg+=" [text]"
|
||||
if(q)
|
||||
msg+="?"
|
||||
else
|
||||
if(rand(0,10))
|
||||
msg+="."
|
||||
else
|
||||
msg+="!"
|
||||
|
||||
var/list/listening = viewers(src)
|
||||
for(var/mob/M in world)
|
||||
if (!M.client)
|
||||
continue //skip monkeys and leavers
|
||||
if (istype(M, /mob/new_player))
|
||||
continue
|
||||
if(M.stat == 2 && M.client.ghost_ears)
|
||||
listening|=M
|
||||
|
||||
for(var/mob/M in listening)
|
||||
M << "<b>The crystal</b> reverberates, \blue\"[msg]\""
|
||||
lastsaid = world.timeofday + rand(300,800)
|
||||
|
||||
/obj/item/weapon/talkingcrystal/process()
|
||||
if(prob(25) && world.timeofday >= lastsaid && words.len >= 1)
|
||||
SaySomething()
|
||||
spawn(100)
|
||||
process()
|
||||
|
||||
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// fossils
|
||||
|
||||
/obj/item/weapon/fossil
|
||||
name = "Fossil"
|
||||
icon = 'fossil.dmi'
|
||||
icon_state = "bone"
|
||||
desc = "It's a fossil."
|
||||
|
||||
/obj/item/weapon/fossil/base/New()
|
||||
spawn(0)
|
||||
var/list/l = list("/obj/item/weapon/fossil/bone"=8,"/obj/item/weapon/fossil/skull"=2,
|
||||
"/obj/item/weapon/fossil/skull/horned"=2,"/obj/item/weapon/fossil/shell"=1)
|
||||
var/t = pickweight(l)
|
||||
new t(src.loc)
|
||||
del src
|
||||
|
||||
/obj/item/weapon/fossil/bone
|
||||
name = "Fossilised bone"
|
||||
icon_state = "bone"
|
||||
desc = "It's a fossilised bone."
|
||||
|
||||
/obj/item/weapon/fossil/shell
|
||||
name = "Fossilised shell"
|
||||
icon_state = "shell"
|
||||
desc = "It's a fossilised shell."
|
||||
|
||||
/obj/item/weapon/fossil/skull/horned
|
||||
icon_state = "hskull"
|
||||
desc = "It's a fossilised, horned skull."
|
||||
|
||||
/obj/item/weapon/fossil/skull
|
||||
name = "Fossilised skull"
|
||||
icon_state = "skull"
|
||||
desc = "It's a fossilised skull."
|
||||
|
||||
/obj/item/weapon/fossil/skull/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W,/obj/item/weapon/fossil/bone))
|
||||
var/obj/o = new /obj/skeleton(get_turf(src))
|
||||
var/a = new /obj/item/weapon/fossil/bone
|
||||
var/b = new src.type
|
||||
o.contents.Add(a)
|
||||
o.contents.Add(b)
|
||||
del W
|
||||
del src
|
||||
|
||||
/obj/skeleton
|
||||
name = "Incomplete skeleton"
|
||||
icon = 'fossil.dmi'
|
||||
icon_state = "uskel"
|
||||
desc = "Incomplete skeleton."
|
||||
var/bnum = 1
|
||||
var/breq
|
||||
var/bstate = 0
|
||||
|
||||
/obj/skeleton/New()
|
||||
src.breq = rand(6)+3
|
||||
src.desc = "An incomplete skeleton, looks like it could use [src.breq-src.bnum] more bones."
|
||||
|
||||
/obj/skeleton/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W,/obj/item/weapon/fossil/bone))
|
||||
if(!bstate)
|
||||
bnum++
|
||||
src.contents.Add(new/obj/item/weapon/fossil/bone)
|
||||
del W
|
||||
if(bnum==breq)
|
||||
usr = user
|
||||
icon_state = "skel"
|
||||
var/creaturename = input("Input a name for your discovery:","Name your discovery","Spaceosaurus")
|
||||
src.bstate = 1
|
||||
src.density = 1
|
||||
src.name = "[creaturename] skeleton"
|
||||
if(src.contents.Find(/obj/item/weapon/fossil/skull/horned))
|
||||
src.desc = "A creature made of [src.contents.len-1] assorted bones and a horned skull, the plaque reads [creaturename]."
|
||||
else
|
||||
src.desc = "A creature made of [src.contents.len-1] assorted bones and a skull, the plaque reads [creaturename]."
|
||||
else
|
||||
src.desc = "Incomplete skeleton, looks like it could use [src.breq-src.bnum] more bones."
|
||||
user << "Looks like it could use [src.breq-src.bnum] more bones."
|
||||
else
|
||||
..()
|
||||
else
|
||||
..()
|
||||
|
||||
84
code/modules/research/xenoarchaeology/fossils.dm
Normal file
84
code/modules/research/xenoarchaeology/fossils.dm
Normal file
@@ -0,0 +1,84 @@
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// fossils
|
||||
|
||||
/obj/item/weapon/fossil
|
||||
name = "Fossil"
|
||||
icon = 'fossil.dmi'
|
||||
icon_state = "bone"
|
||||
desc = "It's a fossil."
|
||||
|
||||
/obj/item/weapon/fossil/base/New()
|
||||
spawn(0)
|
||||
var/list/l = list("/obj/item/weapon/fossil/bone"=8,"/obj/item/weapon/fossil/skull"=2,
|
||||
"/obj/item/weapon/fossil/skull/horned"=2,"/obj/item/weapon/fossil/shell"=1)
|
||||
var/t = pickweight(l)
|
||||
new t(src.loc)
|
||||
del src
|
||||
|
||||
/obj/item/weapon/fossil/bone
|
||||
name = "Fossilised bone"
|
||||
icon_state = "bone"
|
||||
desc = "It's a fossilised bone."
|
||||
|
||||
/obj/item/weapon/fossil/shell
|
||||
name = "Fossilised shell"
|
||||
icon_state = "shell"
|
||||
desc = "It's a fossilised shell."
|
||||
|
||||
/obj/item/weapon/fossil/skull/horned
|
||||
icon_state = "hskull"
|
||||
desc = "It's a fossilised, horned skull."
|
||||
|
||||
/obj/item/weapon/fossil/skull
|
||||
name = "Fossilised skull"
|
||||
icon_state = "skull"
|
||||
desc = "It's a fossilised skull."
|
||||
|
||||
/obj/item/weapon/fossil/skull/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W,/obj/item/weapon/fossil/bone))
|
||||
var/obj/o = new /obj/skeleton(get_turf(src))
|
||||
var/a = new /obj/item/weapon/fossil/bone
|
||||
var/b = new src.type
|
||||
o.contents.Add(a)
|
||||
o.contents.Add(b)
|
||||
del W
|
||||
del src
|
||||
|
||||
/obj/skeleton
|
||||
name = "Incomplete skeleton"
|
||||
icon = 'fossil.dmi'
|
||||
icon_state = "uskel"
|
||||
desc = "Incomplete skeleton."
|
||||
var/bnum = 1
|
||||
var/breq
|
||||
var/bstate = 0
|
||||
|
||||
/obj/skeleton/New()
|
||||
src.breq = rand(6)+3
|
||||
src.desc = "An incomplete skeleton, looks like it could use [src.breq-src.bnum] more bones."
|
||||
|
||||
/obj/skeleton/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W,/obj/item/weapon/fossil/bone))
|
||||
if(!bstate)
|
||||
bnum++
|
||||
src.contents.Add(new/obj/item/weapon/fossil/bone)
|
||||
del W
|
||||
if(bnum==breq)
|
||||
usr = user
|
||||
icon_state = "skel"
|
||||
var/creaturename = input("Input a name for your discovery:","Name your discovery","Spaceosaurus")
|
||||
src.bstate = 1
|
||||
src.density = 1
|
||||
src.name = "[creaturename] skeleton"
|
||||
if(src.contents.Find(/obj/item/weapon/fossil/skull/horned))
|
||||
src.desc = "A creature made of [src.contents.len-1] assorted bones and a horned skull, the plaque reads [creaturename]."
|
||||
else
|
||||
src.desc = "A creature made of [src.contents.len-1] assorted bones and a skull, the plaque reads [creaturename]."
|
||||
else
|
||||
src.desc = "Incomplete skeleton, looks like it could use [src.breq-src.bnum] more bones."
|
||||
user << "Looks like it could use [src.breq-src.bnum] more bones."
|
||||
else
|
||||
..()
|
||||
else
|
||||
..()
|
||||
@@ -1,22 +1,25 @@
|
||||
|
||||
|
||||
datum/geosample
|
||||
var/scrambled = 0 //if this sample has been mixed with other samples
|
||||
var/scrambled = 0 //if this sample has been mixed with other samples
|
||||
//
|
||||
var/age = 0
|
||||
var/age_thousand = 0 //age can correspond to different artifacts
|
||||
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_strength = 0 //proportional to distance
|
||||
var/responsive_reagent = "" ///each reagent corresponds to a different type of find
|
||||
var/reagent_response = "" //likelihood of there being finds there
|
||||
var/artifact_distance = 0 //proportional to distance
|
||||
var/main_find = "" //carrier reagent that the main body of the tile responds to
|
||||
var/secondary_find = "" //carrier reagent that the floor of the turf responds to
|
||||
//
|
||||
var/source_mineral
|
||||
var/list/specifity_offsets = list()
|
||||
|
||||
datum/geosample/New(var/turf/simulated/mineral/container)
|
||||
UpdateTurf(container)
|
||||
artifact_distance = rand(500,999999)
|
||||
|
||||
//this function should only be called once. it's here just in case
|
||||
//this should only need to be called once
|
||||
datum/geosample/proc/UpdateTurf(var/turf/simulated/mineral/container)
|
||||
source_mineral = container.mineralName
|
||||
age = rand(1,999)
|
||||
@@ -42,7 +45,7 @@ datum/geosample/proc/UpdateTurf(var/turf/simulated/mineral/container)
|
||||
age_million = rand(1,999)
|
||||
age_billion = rand(10, 13)
|
||||
if("Clown")
|
||||
age = rand(-1,-999)
|
||||
age = rand(-1,-999) //thats_the_joke.mp4
|
||||
age_thousand = rand(-1,-999)
|
||||
/*if("Archaeo")
|
||||
//snowflake
|
||||
|
||||
13
code/modules/research/xenoarchaeology/global_placeholder.dm
Normal file
13
code/modules/research/xenoarchaeology/global_placeholder.dm
Normal file
@@ -0,0 +1,13 @@
|
||||
//todo: move these into global.dm
|
||||
|
||||
var/FIND_NOTHING = 0
|
||||
var/FIND_PLANT = 1
|
||||
var/FIND_BIO = 2
|
||||
var/FIND_METEORIC = 3
|
||||
var/FIND_ICE = 4
|
||||
var/FIND_CRYSTALLINE = 6
|
||||
var/FIND_METALLIC = 7
|
||||
var/FIND_IGNEOUS = 8
|
||||
var/FIND_METAMORPHIC = 9
|
||||
var/FIND_CARBONATE = 10
|
||||
var/FIND_SEDIMENTARY = 11
|
||||
Reference in New Issue
Block a user