Final Initial Implementation of Xenobio2 System.

Kinks worked out, everything is functioning as it should.
This commit is contained in:
Datraen
2016-05-25 14:11:37 -04:00
parent 79e22d58e5
commit 9e09720be5
14 changed files with 145 additions and 29 deletions

View File

@@ -25,7 +25,7 @@
usr.client.debug_variables(antag)
message_admins("Admin [key_name_admin(usr)] is debugging the [antag.role_text] template.")
/client/proc/debug_controller(controller in list("Master","Ticker","Ticker Process","Air","Jobs","Sun","Radio","Supply","Shuttles","Emergency Shuttle","Configuration","pAI", "Cameras", "Transfer Controller", "Gas Data","Event","Plants","Alarm","Nano","Chemistry","Vote"))
/client/proc/debug_controller(controller in list("Master","Ticker","Ticker Process","Air","Jobs","Sun","Radio","Supply","Shuttles","Emergency Shuttle","Configuration","pAI", "Cameras", "Transfer Controller", "Gas Data","Event","Plants","Alarm","Nano","Chemistry","Vote","Xenobio"))
set category = "Debug"
set name = "Debug Controller"
set desc = "Debug the various periodic loop controllers for the game (be careful!)"
@@ -95,5 +95,8 @@
if("Vote")
debug_variables(vote)
feedback_add_details("admin_verb", "DVote")
if("Xenobio")
debug_variables(xenobio_controller)
feedback_add_details("admin_verb", "DXenobio")
message_admins("Admin [key_name_admin(usr)] is debugging the [controller] controller.")
return

View File

@@ -183,6 +183,7 @@ var/list/admin_verbs_debug = list(
/client/proc/overlay_random_map,
/client/proc/delete_random_map,
/client/proc/show_plant_genes,
/client/proc/show_xenobio_genes,
/client/proc/enable_debug_verbs,
/client/proc/callproc,
/client/proc/callproc_target,

View File

@@ -160,6 +160,8 @@ var/global/list/xenoChemList = list("mutationtoxin",
G.values["[TRAIT_XENO_HOSTILE]"] = get_trait(TRAIT_XENO_HOSTILE)
G.values["[TRAIT_XENO_CHROMATIC]"] = get_trait(TRAIT_XENO_CHROMATIC)
return G
/datum/xeno/traits/proc/apply_gene(var/datum/xeno/genes/genes)
if(!genes.genetype) return 0

View File

@@ -14,7 +14,7 @@
for(var/mask in xenobio_controller.gene_tag_masks)
usr << "[mask]: [xenobio_controller.gene_tag_masks[mask]]"
var/global/datum/controller/plants/xenobio_controller // Set in New().
var/global/datum/controller/xenobio/xenobio_controller // Set in New().
/datum/controller/xenobio

View File

@@ -17,6 +17,11 @@
var/emptycolor = "#FF2222"
var/operatingcolor = "#FFFF22"
/obj/machinery/slime/extractor/New()
..()
update_light_color()
/obj/machinery/slime/extractor/map/New()
..()
circuit = new circuit(src)
@@ -67,7 +72,12 @@
if(!(istype(victim, /mob/living/simple_animal/xeno/slime)) )
user << "<span class='danger'>This is not a suitable subject for the core extractor!</span>"
return
var/mob/living/simple_animal/xeno/slime/S = victim
if(S.is_child)
user << "<span class='danger'>This subject is not developed enough for the core extractor!</span>"
return
user.visible_message("<span class='danger'>[user] starts to put [victim] into the core extractor!</span>")
src.add_fingerprint(user)
if(do_after(user, 30) && victim.Adjacent(src) && user.Adjacent(src) && victim.Adjacent(user) && !occupant)
@@ -81,11 +91,11 @@
/obj/machinery/slime/extractor/proc/update_light_color()
if(src.occupant && !(inuse))
set_light(1, 1, occupiedcolor)
set_light(2, 2, occupiedcolor)
else if(src.occupant)
set_light(1, 1, operatingcolor)
set_light(2, 2, operatingcolor)
else
set_light(1, 1, emptycolor)
set_light(2, 2, emptycolor)
/obj/machinery/slime/extractor/proc/extract_cores()
if(!src.occupant)
@@ -115,6 +125,7 @@
inuse = 0
eject_contents()
update_light_color()
src.updateUsrDialog()
/obj/machinery/slime/extractor/proc/eject_slime()
if(occupant)

View File

@@ -53,6 +53,41 @@
var/eject_disk = 0
var/failed_task = 0
var/disk_needs_genes = 0
/obj/machinery/xenobio/attack_ai(mob/user as mob)
return attack_hand(user)
/obj/machinery/xenobio/attack_hand(mob/user as mob)
ui_interact(user)
/obj/machinery/xenobio/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(default_deconstruction_screwdriver(user, W))
return
if(default_deconstruction_crowbar(user, W))
return
if(istype(W,/obj/item/weapon/disk/xenobio))
if(loaded_disk)
user << "There is already a data disk loaded."
return
else
var/obj/item/weapon/disk/xenobio/B = W
if(B.genes && B.genes.len)
if(!disk_needs_genes)
user << "That disk already has gene data loaded."
return
else
if(disk_needs_genes)
user << "That disk does not have any gene data loaded."
return
user.drop_from_inventory(W)
W.forceMove(src)
loaded_disk = W
user << "You load [W] into [src]."
return
..()
/obj/machinery/xenobio/process()
@@ -86,9 +121,23 @@
var/obj/item/xenoproduct/product
var/datum/xeno/traits/genetics // Currently scanned xeno genetic structure.
var/degradation = 0 // Increments with each scan, stops allowing gene mods after a certain point.
/obj/machinery/xenobio/extractor/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W,/obj/item/xenoproduct))
if(product)
user << "There is already a xenobiological product loaded."
return
else
var/obj/item/xenoproduct/B = W
user.drop_from_inventory(B)
B.forceMove(src)
product = B
user << "You load [B] into [src]."
return
..()
/obj/machinery/xenobio/extractor/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
if(!user)
return
@@ -121,10 +170,16 @@
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui)
ui = new(user, src, ui_key, "xenobio_isolator.tmpl", "Biological Product Destructive Analyzer UI", 470, 450)
ui = new(user, src, ui_key, "xenobio_isolator.tmpl", "B.P.D. Analyzer UI", 470, 450)
ui.set_initial_data(data)
ui.open()
ui.set_auto_update(1)
/obj/machinery/xenobio/proc/eject_disk()
if(!loaded_disk) return
loaded_disk.forceMove(loc)
visible_message("\icon[src] [src] beeps and spits out [loaded_disk].")
loaded_disk = null
/obj/machinery/xenobio/extractor/Topic(href, href_list)
@@ -139,11 +194,7 @@
product = null
if(href_list["eject_disk"])
if(!loaded_disk) return
loaded_disk.forceMove(get_turf(src))
visible_message("\icon[src] [src] beeps and spits out [loaded_disk].")
loaded_disk = null
eject_disk()
if(href_list["scan_genome"])
@@ -172,7 +223,7 @@
loaded_disk.genesource = "[genetics.source]"
loaded_disk.name += " ([xenobio_controller.gene_tag_masks[href_list["get_gene"]]], [genetics.source]"
loaded_disk.name += " ([xenobio_controller.gene_tag_masks[href_list["get_gene"]]], [genetics.source])"
loaded_disk.desc += " The label reads \'gene [xenobio_controller.gene_tag_masks[href_list["get_gene"]]], sampled from [genetics.source]\'."
eject_disk = 1
@@ -201,6 +252,26 @@
circuit = /obj/item/weapon/circuitboard/biobombarder
var/mob/living/simple_animal/xeno/slime/occupant
/obj/machinery/xenobio/editor/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W,/obj/item/weapon/grab))
var/obj/item/weapon/grab/G = W
if(occupant)
user << "There is already an organism loaded."
return
else
if(isxeno(G.affecting))
var/mob/living/simple_animal/xeno/X = G.affecting
if(do_after(user, 30) && X.Adjacent(src) && user.Adjacent(src) && X.Adjacent(user) && !occupant)
user.drop_from_inventory(G)
X.forceMove(src)
occupant = X
user << "You load [X] into [src]."
else
user << "<span class='danger'>This specimen is incompatible with the machinery!</span>"
return
..()
/obj/machinery/xenobio/editor/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
@@ -252,16 +323,23 @@
last_action = world.time
active = 1
occupant.nameVar = "modified"
if(prob(occupant.stability))
failed_task = 1
occupant.stability = 101
for(var/datum/plantgene/gene in loaded_disk.genes)
for(var/datum/xeno/genes/gene in loaded_disk.genes)
occupant.traitdat.apply_gene(gene)
occupant.stability += rand(5,10)
occupant.ProcessTraits()
if(href_list["eject_disk"])
eject_disk()
if(href_list["eject_xeno"])
eject_xeno()
usr.set_machine(src)
src.add_fingerprint(usr)
@@ -295,12 +373,14 @@
occupant = victim
/obj/machinery/xenobio/editor/proc/eject_contents()
for(var/obj/thing in (contents - component_parts - circuit))
thing.forceMove(loc)
eject_disk()
eject_xeno()
/obj/machinery/xenobio/editor/proc/eject_xeno()
if(occupant)
occupant.forceMove(loc)
occupant = null
/obj/item/weapon/circuitboard/bioproddestanalyzer
name = T_BOARD("biological product destructive analyzer")
build_path = "/obj/machinery/xenobio/extractor"

View File

@@ -17,6 +17,10 @@
var/emptycolor = "#FF2222"
var/operatingcolor = "#FFFF22"
/obj/machinery/slime/replicator/New()
..()
update_light_color()
/obj/machinery/slime/replicator/map/New()
..()
circuit = new circuit(src)
@@ -50,11 +54,11 @@
/obj/machinery/slime/replicator/proc/update_light_color()
if(src.core && !(inuse))
set_light(1, 1, occupiedcolor)
set_light(2, 2, occupiedcolor)
else if(src.core)
set_light(1, 1, operatingcolor)
set_light(2, 2, operatingcolor)
else
set_light(1, 1, emptycolor)
set_light(2, 2, emptycolor)
/obj/machinery/slime/replicator/proc/replicate_slime()
if(!src.core)

View File

@@ -103,4 +103,12 @@ Slime specific procs go here.
if(reagents.has_reagent("docilitytoxin")) //Toxin that makes them docile? Good for quelling angry mobs.
hostile = 0
traitdat.traits[TRAIT_XENO_HOSTILE] = 0
..()
..()
/mob/living/simple_animal/xeno/slime/ProcessTraits()
..()
if(is_child)
GenerateChild()
else
GenerateAdult()

View File

@@ -83,6 +83,7 @@ Slime definitions, Life and New live here.
for(var/datum/language/L in (typesof(/datum/language) - /datum/language))
languages += L
speak += "[station_name()]?"
traitdat.source = "Slime"
resistances[BURN] = 4
resistances[BRUTE] = 0.2
resistances[TOX] = 1.5

View File

@@ -48,18 +48,18 @@ Slime cube lives here.
announce_ghost_joinleave(candidate, 0, "They are a promethean now.")
src.searching = 2
var/mob/living/carbon/human/S = new(get_turf(src))
S.client = candidate.client
S. << "<b>You are a promethean, brought into existence on [station_name()].</b>"
S.mind.assigned_role = "Promethean"
S.set_species("Promethean")
S.shapeshifter_set_colour("#05FF9B")
for(var/mob/M in viewers(get_turf(loc))
M.show_message("<span class='warning'>The monkey cube suddenly takes the shape of a humanoid!</span>")
var/newname = sanitize(input(S, "You are a Promethean. Would you like to change your name to something else?", "Name change") as null|text, MAX_NAME_LEN)
if (newname)
S.real_name = newname
S.name = S.real_name
S.dna.real_name = newname
if(S.mind) S.mind.name = S.name
for(var/mob/M in viewers(get_turf_or_move(loc)))
M.show_message("<span class='warning'>The monkey cube suddenly takes the shape of a man!</span>")
qdel(src)

View File

@@ -92,6 +92,9 @@ Procs for targeting
traitdat.traits[TRAIT_XENO_COLOR] = "#"
for(var/i=0, i<6, i++)
traitdat.traits[TRAIT_XENO_COLOR] += pick(hexNums)
traitdat.traits[TRAIT_XENO_BIO_COLOR] = "#"
for(var/i=0, i<6, i++)
traitdat.traits[TRAIT_XENO_BIO_COLOR] += pick(hexNums)
RandomChemicals()
//if(SPECIESMUT & mutable)

View File

@@ -73,6 +73,9 @@ var/global/datum/global_init/init = new ()
// Set up roundstart seed list.
plant_controller = new()
// Set up roundstart gene masking
xenobio_controller = new()
// This is kinda important. Set up details of what the hell things are made of.
populate_material_list()

View File

@@ -49,7 +49,7 @@ Used In File(s): \code\modules\xenobio2\machines\gene_manipulators.dm
{{if data.degradation <= 100}}
{{:helper.link('Apply Gene Mods', 'gear', {'apply_gene' : 1}, null)}}
{{/if}}
{{:helper.link('Eject Target', 'circle-arrow-e', {'eject_packet' : 1}, null)}}
{{:helper.link('Eject Target', 'circle-arrow-e', {'eject_xeno' : 1}, null)}}
</div>
{{else}}
<div class="notice">No target organism loaded</div>

View File

@@ -1,5 +1,5 @@
<!--
Title: Biological Product Destructive Analyzer UI
Title: B.P.D. Analyzer UI
Used In File(s): \code\modules\xenobio2\machines\gene_manipulators.dm
Copy of Lysis-isolation Centrifuge's NanoUI Template
-->
@@ -69,6 +69,6 @@ Copy of Lysis-isolation Centrifuge's NanoUI Template
</div>
</div>
{{else}}
<div class="notice">No seeds loaded.</div>
<div class="notice">No biologocial sample loaded.</div>
{{/if}}
{{/if}}