mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-26 21:49:11 +01:00
adds new feature: cloning extinct animals and seeds from fossils found through xenoarchaeology, some minor tweaks to various other areas to make it work
Signed-off-by: Cael Aislinn <cael_aislinn@yahoo.com.au>
This commit is contained in:
@@ -7,6 +7,7 @@
|
||||
icon = 'icons/obj/xenoarchaeology.dmi'
|
||||
icon_state = "bone"
|
||||
desc = "It's a fossil."
|
||||
var/animal = 1
|
||||
|
||||
/obj/item/weapon/fossil/base/New()
|
||||
var/list/l = list("/obj/item/weapon/fossil/bone"=9,"/obj/item/weapon/fossil/skull"=3,
|
||||
@@ -97,6 +98,7 @@
|
||||
name = "Fossilised plant"
|
||||
icon_state = "plant1"
|
||||
desc = "It's fossilised plant remains."
|
||||
animal = 0
|
||||
|
||||
/obj/item/weapon/fossil/plant/New()
|
||||
icon_state = "plant[rand(1,4)]"
|
||||
|
||||
@@ -0,0 +1,77 @@
|
||||
/mob/living/simple_animal/hostile/samak
|
||||
name = "samak"
|
||||
desc = "A fast, armoured predator accustomed to hiding and ambushing in cold terrain."
|
||||
faction = "samak"
|
||||
icon_state = "samak"
|
||||
icon_living = "samak"
|
||||
icon_dead = "samak_dead"
|
||||
icon = 'code/WorkInProgress/Cael_Aislinn/Jungle/jungle.dmi'
|
||||
move_to_delay = 2
|
||||
maxHealth = 125
|
||||
health = 125
|
||||
speed = 2
|
||||
melee_damage_lower = 5
|
||||
melee_damage_upper = 15
|
||||
attacktext = "mauls"
|
||||
cold_damage_per_tick = 0
|
||||
speak_chance = 5
|
||||
speak = list("Hruuugh!","Hrunnph")
|
||||
emote_see = list("paws the ground","shakes its mane","stomps")
|
||||
emote_hear = list("snuffles")
|
||||
|
||||
/mob/living/simple_animal/hostile/diyaab
|
||||
name = "diyaab"
|
||||
desc = "A small pack animal. Although omnivorous, it will hunt meat on occasion."
|
||||
faction = "diyaab"
|
||||
icon_state = "diyaab"
|
||||
icon_living = "diyaab"
|
||||
icon_dead = "diyaab_dead"
|
||||
icon = 'code/WorkInProgress/Cael_Aislinn/Jungle/jungle.dmi'
|
||||
move_to_delay = 1
|
||||
maxHealth = 25
|
||||
health = 25
|
||||
speed = 1
|
||||
melee_damage_lower = 1
|
||||
melee_damage_upper = 8
|
||||
attacktext = "gouges"
|
||||
cold_damage_per_tick = 0
|
||||
speak_chance = 5
|
||||
speak = list("Awrr?","Aowrl!","Worrl")
|
||||
emote_see = list("sniffs the air cautiously","looks around")
|
||||
emote_hear = list("snuffles")
|
||||
|
||||
/mob/living/simple_animal/hostile/shantak
|
||||
name = "shantak"
|
||||
desc = "A piglike creature with a bright iridiscent mane that sparkles as though lit by an inner light. Don't be fooled by its beauty though."
|
||||
faction = "shantak"
|
||||
icon_state = "shantak"
|
||||
icon_living = "shantak"
|
||||
icon_dead = "shantak_dead"
|
||||
icon = 'code/WorkInProgress/Cael_Aislinn/Jungle/jungle.dmi'
|
||||
move_to_delay = 1
|
||||
maxHealth = 75
|
||||
health = 75
|
||||
speed = 1
|
||||
melee_damage_lower = 3
|
||||
melee_damage_upper = 12
|
||||
attacktext = "gouges"
|
||||
cold_damage_per_tick = 0
|
||||
speak_chance = 5
|
||||
speak = list("Shuhn","Shrunnph?","Shunpf")
|
||||
emote_see = list("scratches the ground","shakes out it's mane","tinkles gently")
|
||||
|
||||
/mob/living/simple_animal/yithian
|
||||
name = "yithian"
|
||||
desc = "A friendly creature vaguely resembling an oversized snail without a shell."
|
||||
icon_state = "yithian"
|
||||
icon_living = "yithian"
|
||||
icon_dead = "yithian_dead"
|
||||
icon = 'code/WorkInProgress/Cael_Aislinn/Jungle/jungle.dmi'
|
||||
|
||||
/mob/living/simple_animal/tindalos
|
||||
name = "tindalos"
|
||||
desc = "It looks like a large, flightless grasshopper."
|
||||
icon_state = "tindalos"
|
||||
icon_living = "tindalos"
|
||||
icon_dead = "tindalos_dead"
|
||||
icon = 'code/WorkInProgress/Cael_Aislinn/Jungle/jungle.dmi'
|
||||
@@ -0,0 +1,202 @@
|
||||
|
||||
/obj/item/seeds/telriis
|
||||
name = "pack of telriis seeds"
|
||||
desc = "These seeds grow into telriis grass. Not recommended for consumption by sentient species."
|
||||
icon_state = "seed-alien1"
|
||||
mypath = "/obj/item/seeds/telriis"
|
||||
species = "telriis"
|
||||
plantname = "Telriis grass"
|
||||
productname = "/obj/item/weapon/telriis_clump"
|
||||
lifespan = 50 //number of ticks
|
||||
endurance = 50 //
|
||||
maturation = 5 //ticks to full growth stage
|
||||
production = 5 //ticks till ready to harvest
|
||||
yield = 4 //number produced when harvest
|
||||
potency = 5
|
||||
plant_type = 1 //1=weed, 2=shroom, 0=normal
|
||||
growthstages = 4
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/telriis_clump
|
||||
name = "telriis grass"
|
||||
desc = "A clump of telriis grass, not recommended for consumption by sentients."
|
||||
icon = 'icons/obj/xenoarchaeology.dmi'
|
||||
icon_state = "telriisclump"
|
||||
New(var/loc, var/potency)
|
||||
..()
|
||||
reagents.add_reagent("pwine", potency * 5)
|
||||
reagents.add_reagent("nutriment", potency)
|
||||
bitesize = 1+round(reagents.total_volume / 2, 1)
|
||||
|
||||
|
||||
/obj/item/seeds/thaadra
|
||||
name = "pack of thaa'dra seeds"
|
||||
desc = "These seeds grow into Thaa'dra lichen. Likes the cold."
|
||||
icon_state = "seed-alien3"
|
||||
mypath = "/obj/item/seeds/thaadra"
|
||||
species = "thaadra"
|
||||
plantname = "Thaa'dra lichen"
|
||||
productname = "/obj/item/weapon/reagent_containers/food/snacks/grown/thaadra"
|
||||
lifespan = 20
|
||||
endurance = 10
|
||||
maturation = 5
|
||||
production = 9
|
||||
yield = 2
|
||||
potency = 5
|
||||
plant_type = 2
|
||||
growthstages = 4
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/thaadrabloom
|
||||
name = "thaa'dra bloom"
|
||||
desc = "Looks chewy, might be good to eat."
|
||||
icon = 'icons/obj/xenoarchaeology.dmi'
|
||||
icon_state = "thaadrabloom"
|
||||
New(var/loc, var/potency)
|
||||
..()
|
||||
reagents.add_reagent("frostoil", potency * 1.5 + 5)
|
||||
reagents.add_reagent("nutriment", potency)
|
||||
bitesize = 1+round(reagents.total_volume / 2, 1)
|
||||
|
||||
|
||||
/obj/item/seeds/jurlmah
|
||||
name = "pack of jurl'mah seeds"
|
||||
desc = "These seeds grow into jurl'mah reeds, which produce large syrupy pods."
|
||||
icon_state = "seed-alien3"
|
||||
mypath = "/obj/item/seeds/jurlmah"
|
||||
species = "jurlmah"
|
||||
plantname = "jurl'mah reeds"
|
||||
productname = "/obj/item/weapon/reagent_containers/food/snacks/grown/jurlmah"
|
||||
lifespan = 20
|
||||
endurance = 12
|
||||
maturation = 8
|
||||
production = 9
|
||||
yield = 3
|
||||
potency = 10
|
||||
growthstages = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/jurlmah
|
||||
name = "jurl'mah pod"
|
||||
desc = "Bulbous and veiny, it appears to pulse slightly as you look at it."
|
||||
icon = 'icons/obj/xenoarchaeology.dmi'
|
||||
icon_state = "jurlmahpod"
|
||||
New(var/loc, var/potency)
|
||||
..()
|
||||
reagents.add_reagent("serotrotium", potency)
|
||||
reagents.add_reagent("nutriment", potency)
|
||||
bitesize = 1+round(reagents.total_volume / 2, 1)
|
||||
|
||||
|
||||
/obj/item/seeds/amauri
|
||||
name = "pack of amauri seeds"
|
||||
desc = "Grows into a straight, dark plant with small round fruit."
|
||||
icon_state = "seed-alien3"
|
||||
mypath = "/obj/item/seeds/amauri"
|
||||
species = "amauri"
|
||||
plantname = "amauri plant"
|
||||
productname = "/obj/item/weapon/reagent_containers/food/snacks/grown/amauri"
|
||||
lifespan = 30
|
||||
endurance = 10
|
||||
maturation = 8
|
||||
production = 9
|
||||
yield = 4
|
||||
potency = 10
|
||||
growthstages = 3
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/amauri
|
||||
name = "amauri fruit"
|
||||
desc = "It is small, round and hard. Its skin is a thick dark purple."
|
||||
icon = 'icons/obj/xenoarchaeology.dmi'
|
||||
icon_state = "amaurifruit"
|
||||
New(var/loc, var/potency)
|
||||
..()
|
||||
reagents.add_reagent("zombiepowder", potency * 10)
|
||||
reagents.add_reagent("condensedcapsaicin", potency * 5)
|
||||
reagents.add_reagent("nutriment", potency)
|
||||
bitesize = 1+round(reagents.total_volume / 2, 1)
|
||||
|
||||
|
||||
/obj/item/seeds/gelthi
|
||||
name = "pack of gelthi seeds"
|
||||
desc = "Grows into a bright, wavy plant with many small fruits."
|
||||
icon_state = "seed-alien2"
|
||||
mypath = "/obj/item/seeds/gelthi"
|
||||
species = "gelthi"
|
||||
plantname = "gelthi plant"
|
||||
productname = "/obj/item/weapon/reagent_containers/food/snacks/grown/gelthi"
|
||||
lifespan = 20
|
||||
endurance = 15
|
||||
maturation = 6
|
||||
production = 6
|
||||
yield = 2
|
||||
potency = 1
|
||||
growthstages = 3
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/gelthi
|
||||
name = "gelthi berries"
|
||||
desc = "They feel fluffy and slightly warm to the touch."
|
||||
icon = 'icons/obj/xenoarchaeology.dmi'
|
||||
icon_state = "gelthiberries"
|
||||
New(var/loc, var/potency)
|
||||
..()
|
||||
//this may prove a little strong
|
||||
reagents.add_reagent("stoxin", (potency * potency) / 5)
|
||||
reagents.add_reagent("capsaicin", (potency * potency) / 5)
|
||||
reagents.add_reagent("nutriment", potency)
|
||||
bitesize = 1+round(reagents.total_volume / 2, 1)
|
||||
|
||||
|
||||
/obj/item/seeds/vale
|
||||
name = "pack of vale seeds"
|
||||
desc = "The vale bush is often depicted in ancient heiroglyphs and is similar to cherry blossoms."
|
||||
icon_state = "seed-alien2"
|
||||
mypath = "/obj/item/seeds/vale"
|
||||
species = "vale"
|
||||
plantname = "vale bush"
|
||||
productname = "/obj/item/weapon/reagent_containers/food/snacks/grown/vale"
|
||||
lifespan = 25
|
||||
endurance = 15
|
||||
maturation = 8
|
||||
production = 10
|
||||
yield = 3
|
||||
potency = 3
|
||||
growthstages = 4
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/vale
|
||||
name = "vale leaves"
|
||||
desc = "Small, curly leaves covered in a soft pale fur."
|
||||
icon = 'icons/obj/xenoarchaeology.dmi'
|
||||
icon_state = "valeleaves"
|
||||
New(var/loc, var/potency)
|
||||
..()
|
||||
reagents.add_reagent("paracetamol", potency * 5)
|
||||
reagents.add_reagent("dexalin", potency * 2)
|
||||
reagents.add_reagent("nutriment", potency)
|
||||
bitesize = 1+round(reagents.total_volume / 2, 1)
|
||||
|
||||
|
||||
/obj/item/seeds/surik
|
||||
name = "pack of surik seeds"
|
||||
desc = "A spiky blue vine with large fruit resembling pig ears."
|
||||
icon_state = "seed-alien3"
|
||||
mypath = "/obj/item/seeds/surik"
|
||||
species = "surik"
|
||||
plantname = "surik vine"
|
||||
productname = "/obj/item/weapon/reagent_containers/food/snacks/grown/surik"
|
||||
lifespan = 30
|
||||
endurance = 18
|
||||
maturation = 7
|
||||
production = 7
|
||||
yield = 3
|
||||
potency = 3
|
||||
growthstages = 4
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/surik
|
||||
name = "surik fruit"
|
||||
desc = "Multiple layers of blue skin peeling away to reveal a spongey core, vaguely resembling an ear."
|
||||
icon = 'icons/obj/xenoarchaeology.dmi'
|
||||
icon_state = "surikfruit"
|
||||
New(var/loc, var/potency)
|
||||
..()
|
||||
reagents.add_reagent("impedrezene", potency * 3)
|
||||
reagents.add_reagent("synaptizine", potency * 2)
|
||||
reagents.add_reagent("nutriment", potency)
|
||||
bitesize = 1+round(reagents.total_volume / 2, 1)
|
||||
@@ -0,0 +1,335 @@
|
||||
var/global/list/alphabet_uppercase = list("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z")
|
||||
var/list/genome_prefixes = list("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z")
|
||||
|
||||
var/list/spawn_types_animal = list("/mob/living/carbon/slime",\
|
||||
"/mob/living/simple_animal/hostile/alien",\
|
||||
"/mob/living/simple_animal/hostile/alien/drone",\
|
||||
"/mob/living/simple_animal/hostile/alien/sentinel",\
|
||||
"/mob/living/simple_animal/hostile/giant_spider",\
|
||||
"/mob/living/simple_animal/hostile/giant_spider/hunter",\
|
||||
"/mob/living/simple_animal/hostile/giant_spider/nurse",\
|
||||
"/mob/living/simple_animal/hostile/creature",\
|
||||
"/mob/living/simple_animal/hostile/samak",\
|
||||
"/mob/living/simple_animal/hostile/diyaab",\
|
||||
"/mob/living/simple_animal/hostile/shantak",\
|
||||
"/mob/living/simple_animal/tindalos",\
|
||||
"/mob/living/simple_animal/yithian")
|
||||
|
||||
var/list/spawn_types_plant = list("/obj/item/seeds/walkingmushroommycelium",\
|
||||
"/obj/item/seeds/killertomatoseed",\
|
||||
"/obj/item/seeds/shandseed",
|
||||
"/obj/item/seeds/mtearseed",
|
||||
"/obj/item/seeds/thaadra",\
|
||||
"/obj/item/seeds/telriis",\
|
||||
"/obj/item/seeds/jurlmah",\
|
||||
"/obj/item/seeds/amauri",\
|
||||
"/obj/item/seeds/gelthi",\
|
||||
"/obj/item/seeds/vale",\
|
||||
"/obj/item/seeds/surik")
|
||||
|
||||
var/list/all_animal_genesequences = list()
|
||||
var/list/all_plant_genesequences = list()
|
||||
|
||||
datum/genesequence
|
||||
var/spawned_type
|
||||
var/spawned_type_text
|
||||
var/list/full_genome_sequence = list()
|
||||
|
||||
/proc/create_all_genesequences()
|
||||
//create animal gene sequences
|
||||
while(spawn_types_animal.len && genome_prefixes.len)
|
||||
var/datum/genesequence/new_sequence = new/datum/genesequence()
|
||||
new_sequence.spawned_type_text = pick(spawn_types_animal)
|
||||
new_sequence.spawned_type = text2path(new_sequence.spawned_type_text)
|
||||
spawn_types_animal -= new_sequence.spawned_type
|
||||
|
||||
var/prefixletter = pick(genome_prefixes)
|
||||
genome_prefixes -= prefixletter
|
||||
while(new_sequence.full_genome_sequence.len < 7)
|
||||
new_sequence.full_genome_sequence.Add("[prefixletter][pick(alphabet_uppercase)][pick(alphabet_uppercase)][pick(1,2,3,4,5,6,7,8,9,0)][pick(1,2,3,4,5,6,7,8,9,0)]")
|
||||
|
||||
all_animal_genesequences.Add(new_sequence)
|
||||
|
||||
//create plant gene sequences
|
||||
while(spawn_types_plant.len && genome_prefixes.len)
|
||||
var/datum/genesequence/new_sequence = new/datum/genesequence()
|
||||
new_sequence.spawned_type = pick(spawn_types_plant)
|
||||
spawn_types_plant -= new_sequence.spawned_type
|
||||
|
||||
var/prefixletter = pick(genome_prefixes)
|
||||
genome_prefixes -= prefixletter
|
||||
while(new_sequence.full_genome_sequence.len < 7)
|
||||
new_sequence.full_genome_sequence.Add("[prefixletter][pick(1,2,3,4,5,6,7,8,9,0)][pick(1,2,3,4,5,6,7,8,9,0)][pick(alphabet_uppercase)][pick(alphabet_uppercase)]")
|
||||
|
||||
all_plant_genesequences.Add(new_sequence)
|
||||
|
||||
|
||||
|
||||
/obj/machinery/computer/reconstitutor
|
||||
name = "Flora reconstitution console"
|
||||
icon = 'icons/obj/computer.dmi'
|
||||
icon_state = "dna"
|
||||
circuit = "/obj/item/weapon/circuitboard/reconstitutor"
|
||||
req_access = list(access_heads) //Only used for record deletion right now.
|
||||
var/obj/machinery/clonepod/pod1 = null //Linked cloning pod.
|
||||
var/temp = ""
|
||||
var/menu = 1 //Which menu screen to display
|
||||
var/list/records = list()
|
||||
var/datum/dna2/record/active_record = null
|
||||
var/obj/item/weapon/disk/data/diskette = null //Mostly so the geneticist can steal everything.
|
||||
var/loading = 0 // Nice loading text
|
||||
var/list/undiscovered_genesequences = null
|
||||
var/list/discovered_genesequences = list()
|
||||
var/list/completed_genesequences = list()
|
||||
var/list/undiscovered_genomes = list()
|
||||
var/list/manually_placed_genomes = list()
|
||||
var/list/discovered_genomes = list("! Clear !")
|
||||
var/list/accepted_fossil_types = list(/obj/item/weapon/fossil/plant)
|
||||
|
||||
/obj/machinery/computer/reconstitutor/New()
|
||||
create_all_genesequences()
|
||||
if(!undiscovered_genesequences)
|
||||
undiscovered_genesequences = all_plant_genesequences.Copy()
|
||||
..()
|
||||
|
||||
/obj/machinery/computer/reconstitutor/animal
|
||||
name = "Fauna reconstitution console"
|
||||
accepted_fossil_types = list(/obj/item/weapon/fossil/bone,/obj/item/weapon/fossil/shell,/obj/item/weapon/fossil/skull)
|
||||
|
||||
/obj/machinery/computer/reconstitutor/animal/New()
|
||||
create_all_genesequences()
|
||||
undiscovered_genesequences = all_animal_genesequences.Copy()
|
||||
..()
|
||||
|
||||
/obj/machinery/computer/reconstitutor/attackby(obj/item/W, mob/user)
|
||||
if(istype(W,/obj/item/weapon/fossil))
|
||||
user.drop_item()
|
||||
W.loc = src.loc
|
||||
switch(scan_fossil(W))
|
||||
if(1)
|
||||
src.visible_message("\red \icon[src] [src] scans the fossil and rejects it.")
|
||||
if(2)
|
||||
visible_message("\red \icon[src] can not extract any more genetic data from new fossils.")
|
||||
if(4)
|
||||
src.visible_message("\blue \icon[src] [user] inserts [W] into [src], the fossil is consumed.")
|
||||
del(W)
|
||||
updateDialog()
|
||||
else if (istype(W, /obj/item/weapon/storage))
|
||||
var/obj/item/weapon/storage/S = W
|
||||
S.hide_from(usr)
|
||||
var/numaccepted = 0
|
||||
var/numrejected = 0
|
||||
var/full = 0
|
||||
for(var/obj/item/weapon/fossil/F in S.contents)
|
||||
switch(scan_fossil(F))
|
||||
if(1)
|
||||
numrejected += 1
|
||||
if(2)
|
||||
full = 1
|
||||
if(4)
|
||||
numaccepted += 1
|
||||
S.remove_from_storage(F, src) //This will move the item to this item's contents
|
||||
del(F)
|
||||
updateDialog()
|
||||
var/outmsg = "\blue You empty all the fossils from [S] into [src]."
|
||||
if(numaccepted)
|
||||
outmsg += " \blue[numaccepted] fossils were accepted."
|
||||
if(numrejected)
|
||||
outmsg += " \red[numrejected] fossils were rejected."
|
||||
if(full)
|
||||
outmsg += " \red[src] can not extract any more genetic data from new fossils."
|
||||
visible_message(outmsg)
|
||||
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/machinery/computer/reconstitutor/attack_hand(var/mob/user as mob)
|
||||
src.add_fingerprint(user)
|
||||
interact(user)
|
||||
|
||||
/obj/machinery/computer/reconstitutor/interact(mob/user)
|
||||
if(stat & (NOPOWER|BROKEN) || get_dist(src, user) > 1)
|
||||
user.unset_machine(src)
|
||||
return
|
||||
|
||||
var/dat = "<B>Garland Corp genetic reconstitutor</B><BR>"
|
||||
dat += "<HR>"
|
||||
if(!pod1)
|
||||
pod1 = locate() in orange(1, src)
|
||||
|
||||
if(!pod1)
|
||||
dat += "<b><font color=red>Unable to locate cloning pod.</font></b><br>"
|
||||
else
|
||||
dat += "<b><font color=green>Cloning pod connected.</font></b><br>"
|
||||
|
||||
dat += "<table border=1>"
|
||||
dat += "<tr>"
|
||||
dat += "<td><b>GENE1</b></td>"
|
||||
dat += "<td><b>GENE2</b></td>"
|
||||
dat += "<td><b>GENE3</b></td>"
|
||||
dat += "<td><b>GENE4</b></td>"
|
||||
dat += "<td><b>GENE5</b></td>"
|
||||
dat += "<td><b>GENE6</b></td>"
|
||||
dat += "<td><b>GENE7</b></td>"
|
||||
dat += "<td></td>"
|
||||
dat += "<td></td>"
|
||||
dat += "</tr>"
|
||||
|
||||
//WIP gene sequences
|
||||
for(var/sequence_num = 1, sequence_num <= discovered_genesequences.len, sequence_num += 1)
|
||||
var/datum/genesequence/cur_genesequence = discovered_genesequences[sequence_num]
|
||||
dat += "<tr>"
|
||||
var/num_correct = 0
|
||||
for(var/curindex = 1, curindex <= 7, curindex++)
|
||||
var/bgcolour = "#ffffff"//white ffffff, red ff0000
|
||||
|
||||
//background colour hints at correct positioning
|
||||
if(manually_placed_genomes[sequence_num][curindex])
|
||||
//green background if slot is correctly filled
|
||||
if(manually_placed_genomes[sequence_num][curindex] == cur_genesequence.full_genome_sequence[curindex])
|
||||
bgcolour = "#008000"
|
||||
num_correct += 1
|
||||
if(num_correct == 7)
|
||||
discovered_genesequences -= cur_genesequence
|
||||
completed_genesequences += cur_genesequence
|
||||
manually_placed_genomes[sequence_num] = new/list(7)
|
||||
interact(user)
|
||||
return
|
||||
//yellow background if adjacent to correct slot
|
||||
if(curindex > 1 && manually_placed_genomes[sequence_num][curindex] == cur_genesequence.full_genome_sequence[curindex - 1])
|
||||
bgcolour = "#ffff00"
|
||||
else if(curindex < 7 && manually_placed_genomes[sequence_num][curindex] == cur_genesequence.full_genome_sequence[curindex + 1])
|
||||
bgcolour = "#ffff00"
|
||||
|
||||
var/this_genome_slot = manually_placed_genomes[sequence_num][curindex]
|
||||
if(!this_genome_slot)
|
||||
this_genome_slot = "- - - - -"
|
||||
dat += "<td><a href='?src=\ref[src];sequence_num=[sequence_num];insertpos=[curindex]' style='background-color:[bgcolour]'>[this_genome_slot]</a></td>"
|
||||
dat += "<td><a href='?src=\ref[src];reset=1;sequence_num=[sequence_num]'>Reset</a></td>"
|
||||
//dat += "<td><a href='?src=\ref[src];clone=1;sequence_num=[sequence_num]'>Clone</a></td>"
|
||||
dat += "</tr>"
|
||||
|
||||
//completed gene sequences
|
||||
for(var/sequence_num = 1, sequence_num <= completed_genesequences.len, sequence_num += 1)
|
||||
var/datum/genesequence/cur_genesequence = completed_genesequences[sequence_num]
|
||||
dat += "<tr>"
|
||||
for(var/curindex = 1, curindex <= 7, curindex++)
|
||||
var/this_genome_slot = cur_genesequence.full_genome_sequence[curindex]
|
||||
dat += "<td style='background-color:#008000'>[this_genome_slot]</td>"
|
||||
dat += "<td><a href='?src=\ref[src];wipe=1;sequence_num=[sequence_num]'>Wipe</a></td>"
|
||||
dat += "<td><a href='?src=\ref[src];clone=1;sequence_num=[sequence_num]'>Clone</a></td>"
|
||||
dat += "</tr>"
|
||||
|
||||
dat += "</table>"
|
||||
|
||||
dat += "<br>"
|
||||
dat += "<hr>"
|
||||
dat += "<a href='?src=\ref[src];close=1'>Close</a>"
|
||||
user << browse(dat, "window=reconstitutor;size=600x500")
|
||||
user.set_machine(src)
|
||||
onclose(user, "reconstitutor")
|
||||
|
||||
/obj/machinery/computer/reconstitutor/animal/Topic(href, href_list)
|
||||
if(href_list["clone"])
|
||||
var/sequence_num = text2num(href_list["sequence_num"])
|
||||
var/datum/genesequence/cloned_genesequence = completed_genesequences[sequence_num]
|
||||
if(pod1)
|
||||
if(pod1.occupant)
|
||||
visible_message("\red \icon[src] The cloning pod is currently occupied.")
|
||||
else if(pod1.biomass < CLONE_BIOMASS)
|
||||
visible_message("\red \icon[src] Not enough biomass in the cloning pod.")
|
||||
else if(pod1.mess)
|
||||
visible_message("\red \icon[src] Error: clonepod malfunction.")
|
||||
else
|
||||
visible_message("\blue \icon[src] [src] clones something from a reconstituted gene sequence!")
|
||||
playsound(src.loc, 'sound/effects/screech.ogg', 50, 1, -3)
|
||||
pod1.occupant = new cloned_genesequence.spawned_type(pod1)
|
||||
pod1.locked = 1
|
||||
pod1.icon_state = "pod_1"
|
||||
//pod1.occupant.name = "[pod1.occupant.name] ([rand(0,999)])"
|
||||
pod1.biomass -= CLONE_BIOMASS
|
||||
else
|
||||
usr << "\red \icon[src] Unable to locate cloning pod!"
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/machinery/computer/reconstitutor/Topic(href, href_list)
|
||||
if(href_list["insertpos"])
|
||||
//world << "inserting gene for genesequence [href_list["insertgenome"]] at pos [text2num(href_list["insertpos"])]"
|
||||
var/sequence_num = text2num(href_list["sequence_num"])
|
||||
var/insertpos = text2num(href_list["insertpos"])
|
||||
|
||||
var/old_genome = manually_placed_genomes[sequence_num][insertpos]
|
||||
discovered_genomes = sortList(discovered_genomes)
|
||||
var/new_genome = input(usr, "Which genome do you want to insert here?") as null|anything in discovered_genomes
|
||||
if(new_genome == "! Clear !")
|
||||
manually_placed_genomes[sequence_num][insertpos] = null
|
||||
else if(new_genome)
|
||||
manually_placed_genomes[sequence_num][insertpos] = new_genome
|
||||
discovered_genomes.Remove(new_genome)
|
||||
if(old_genome)
|
||||
discovered_genomes.Add(old_genome)
|
||||
updateDialog()
|
||||
|
||||
else if(href_list["reset"])
|
||||
var/sequence_num = text2num(href_list["sequence_num"])
|
||||
for(var/curindex = 1, curindex <= 7, curindex++)
|
||||
var/old_genome = manually_placed_genomes[sequence_num][curindex]
|
||||
manually_placed_genomes[sequence_num][curindex] = null
|
||||
if(old_genome)
|
||||
discovered_genomes.Add(old_genome)
|
||||
updateDialog()
|
||||
|
||||
else if(href_list["wipe"])
|
||||
var/sequence_num = text2num(href_list["sequence_num"])
|
||||
var/datum/genesequence/wiped_genesequence = completed_genesequences[sequence_num]
|
||||
completed_genesequences.Remove(wiped_genesequence)
|
||||
discovered_genesequences.Add(wiped_genesequence)
|
||||
|
||||
discovered_genomes.Add(wiped_genesequence.full_genome_sequence)
|
||||
discovered_genomes = sortList(discovered_genomes)
|
||||
updateDialog()
|
||||
|
||||
else if(href_list["clone"])
|
||||
var/sequence_num = text2num(href_list["sequence_num"])
|
||||
var/datum/genesequence/cloned_genesequence = completed_genesequences[sequence_num]
|
||||
visible_message("\blue \icon[src] [src] clones a packet of seeds from a reconstituted gene sequence!")
|
||||
playsound(src.loc, 'sound/effects/screech.ogg', 50, 1, -3)
|
||||
new cloned_genesequence.spawned_type(src.loc)
|
||||
|
||||
else if(href_list["close"])
|
||||
usr.unset_machine(src)
|
||||
usr << browse(null, "window=reconstitutor")
|
||||
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/machinery/computer/reconstitutor/proc/scan_fossil(var/obj/item/weapon/fossil/scan_fossil)
|
||||
//see whether we accept these kind of fossils
|
||||
if(accepted_fossil_types.len && !accepted_fossil_types.Find(scan_fossil.type))
|
||||
return 1
|
||||
|
||||
//see whether we are going to discover a new sequence, new genome for existing sequence or nothing
|
||||
var/new_genome_prob = discovered_genesequences.len * 50
|
||||
|
||||
if( (new_genome_prob >= 100 || prob(new_genome_prob)) && undiscovered_genomes.len)
|
||||
//create a new genome for an existing gene sequence
|
||||
var/newly_discovered_genome = pick(undiscovered_genomes)
|
||||
undiscovered_genomes -= newly_discovered_genome
|
||||
discovered_genomes.Add(newly_discovered_genome)
|
||||
|
||||
else if(undiscovered_genesequences.len)
|
||||
//discover new gene sequence
|
||||
var/datum/genesequence/newly_discovered_genesequence = pick(undiscovered_genesequences)
|
||||
undiscovered_genesequences -= newly_discovered_genesequence
|
||||
discovered_genesequences += newly_discovered_genesequence
|
||||
//add genomes for new gene sequence to pool of discoverable genomes
|
||||
undiscovered_genomes.Add(newly_discovered_genesequence.full_genome_sequence)
|
||||
manually_placed_genomes.Add(null)
|
||||
manually_placed_genomes[manually_placed_genomes.len] = new/list(7)
|
||||
|
||||
else
|
||||
//there's no point scanning any more fossils, we've already discovered everything
|
||||
return 2
|
||||
|
||||
return 4
|
||||
@@ -152,6 +152,7 @@ proc/SetupXenoarch()
|
||||
new /obj/item/weapon/pickaxe(src)
|
||||
new /obj/item/device/measuring_tape(src)
|
||||
new /obj/item/weapon/pickaxe/hand(src)
|
||||
new /obj/item/weapon/storage/bag/fossils(src)
|
||||
return
|
||||
|
||||
//---- Isolation room air alarms
|
||||
|
||||
@@ -22,3 +22,15 @@
|
||||
w_class = 2
|
||||
|
||||
//todo: dig site tape
|
||||
|
||||
/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 = 3
|
||||
storage_slots = 50
|
||||
max_combined_w_class = 200 //Doesn't matter what this is, so long as it's more or equal to storage_slots * ore.w_class
|
||||
max_w_class = 3
|
||||
can_hold = list("/obj/item/weapon/fossil")
|
||||
|
||||
Reference in New Issue
Block a user