From c1c31104960c31835234f83c9f72358786c4396b Mon Sep 17 00:00:00 2001 From: Datraen Date: Mon, 30 May 2016 23:44:53 -0400 Subject: [PATCH 1/3] Xenobio2 Update Adds the trait scanner, which I had thought was previously added. Fixes the smartfridge not believing that it had the cores in it's inventory. Fixes an inverted check. --- code/game/machinery/kitchen/smartfridge.dm | 2 + code/modules/xenobio2/mob/xeno procs.dm | 2 +- .../xenobio2/tools/xeno_trait_scanner.dm | 167 ++++++++++++++++++ polaris.dme | 1 + 4 files changed, 171 insertions(+), 1 deletion(-) create mode 100644 code/modules/xenobio2/tools/xeno_trait_scanner.dm diff --git a/code/game/machinery/kitchen/smartfridge.dm b/code/game/machinery/kitchen/smartfridge.dm index a844d248e00..05de6b9ac69 100644 --- a/code/game/machinery/kitchen/smartfridge.dm +++ b/code/game/machinery/kitchen/smartfridge.dm @@ -71,6 +71,8 @@ for(var/i=1 to 5) var/obj/item/xenoproduct/slime/core/C = new(src) C.traits = new() + C.nameVar = "grey" + item_quants[C.name]++ /obj/machinery/smartfridge/secure/medbay name = "\improper Refrigerated Medicine Storage" diff --git a/code/modules/xenobio2/mob/xeno procs.dm b/code/modules/xenobio2/mob/xeno procs.dm index b98bf334d62..e20373c21ce 100644 --- a/code/modules/xenobio2/mob/xeno procs.dm +++ b/code/modules/xenobio2/mob/xeno procs.dm @@ -29,7 +29,7 @@ Procs for targeting set_light(traitdat.traits[TRAIT_XENO_GLOW_RANGE], traitdat.traits[TRAIT_XENO_GLOW_STRENGTH], traitdat.traits[TRAIT_XENO_BIO_COLOR]) else set_light(0, 0, "#000000") //Should kill any light that shouldn't be there. - if(!(chromatic)) + if(chromatic) hostile = 0 //No. No laser-reflecting hostile creatures. Bad. else hostile = traitdat.traits[TRAIT_XENO_HOSTILE] diff --git a/code/modules/xenobio2/tools/xeno_trait_scanner.dm b/code/modules/xenobio2/tools/xeno_trait_scanner.dm new file mode 100644 index 00000000000..6913e7514dc --- /dev/null +++ b/code/modules/xenobio2/tools/xeno_trait_scanner.dm @@ -0,0 +1,167 @@ +/obj/item/device/analyzer/xeno_analyzer + name = "exotic biological analyzer" + desc = "A device to investigate the genetic data of a biological target." + var/form_title + var/last_data + +/obj/item/device/analyzer/xeno_analyzer/proc/print_report_verb() + set name = "Print Plant Report" + set category = "Object" + set src = usr + + if(usr.stat || usr.restrained() || usr.lying) + return + print_report(usr) + +/obj/item/device/analyzer/xeno_analyzer/Topic(href, href_list) + if(..()) + return + if(href_list["print"]) + print_report(usr) + +/obj/item/device/analyzer/xeno_analyzer/proc/print_report(var/mob/living/user) + if(!last_data) + user << "There is no scan data to print." + return + var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(get_turf(src)) + P.name = "paper - [form_title]" + P.info = "[last_data]" + if(istype(user,/mob/living/carbon/human)) + user.put_in_hands(P) + user.visible_message("\The [src] spits out a piece of paper.") + return + +/obj/item/device/analyzer/xeno_analyzer/attack_self(mob/user as mob) + print_report(user) + return 0 + +/obj/item/device/analyzer/xeno_analyzer/afterattack(var/target, mob/user, flag) + if(!flag) return + + var/datum/xeno/traits/trait_info + var/datum/reagents/prod_reagents + var/targetName + if(istype(target,/obj/structure/table)) + return ..() + else if(istype(target,/mob/living/simple_animal/xeno)) + + var/mob/living/simple_animal/xeno/X = target + targetName = X.name + trait_info = X.traitdat + + else if(istype(target,/obj/item/xenoproduct)) + + var/obj/item/xenoproduct/P = target + trait_info = P.traits + targetName = P.name + prod_reagents = P.reagents + + if(!trait_info) + user << "[src] can tell you nothing about \the [target]." + return + + form_title = "[targetName]" + var/dat = "

Biological data for [form_title]

" + user.visible_message("[user] runs the scanner over \the [target].") + + dat += "

General Data

" + + + dat += "Health: [trait_info.get_trait(TRAIT_XENO_HEALTH)]" + + if(prod_reagents && prod_reagents.reagent_list && prod_reagents.reagent_list.len) + dat += "

Reagent Data

" + + dat += "
This sample contains: " + for(var/datum/reagent/R in prod_reagents.reagent_list) + dat += "
- [R.name], [prod_reagents.get_reagent_amount(R.id)] unit(s)" + + dat += "

Other Data

" + + if(trait_info.get_trait(TRAIT_XENO_EATS)) + dat += "This subject requires nutritional intake.
" + + if(trait_info.get_trait(TRAIT_XENO_HUNGER)) + if(trait_info.get_trait(TRAIT_XENO_HUNGER) < 7) + dat += "It appears to have a slower metabolism.
" + else if(trait_info.get_trait(TRAIT_XENO_HUNGER) > 15) + dat += "It appears to have a greater metabolism.
" + else + dat += "It appears to have an average metabolism.
" + + if(trait_info.get_trait(TRAIT_IMMUTABLE) == -1) + dat += "This plant is highly mutable.
" + else if(trait_info.get_trait(TRAIT_IMMUTABLE) > 0) + dat += "This plant does not possess genetics that are alterable.
" + + if(trait_info.get_trait(TRAIT_XENO_HEALTH)) + if(trait_info.get_trait(TRAIT_XENO_HEALTH) < 20) + dat += "It bears characteristics that indicate resilience to damage.
" + else if(trait_info.get_trait(TRAIT_XENO_HEALTH) > 10) + dat += "It bears characteristics that indicate susceptibility to damage.
" + else + dat += "It bears no characters indicating resilience to damage.
" + + if(trait_info.get_trait(TRAIT_XENO_COLDRES)) + if(trait_info.get_trait(TRAIT_XENO_COLDRES) < 10) + dat += "It bears characteristics that indicate resilience to colder temperatures.
" + else if(trait_info.get_trait(TRAIT_XENO_COLDRES) > 20) + dat += "It bears characteristics that indicate susceptibility to colder temperatures.
" + + if(trait_info.get_trait(TRAIT_XENO_HEATRES)) + if(trait_info.get_trait(TRAIT_XENO_HEATRES) < 10) + dat += "It bears characteristics that indicate resilience to warmer temperatures.
" + else if(trait_info.get_trait(TRAIT_XENO_HEATRES) > 20) + dat += "It bears characteristics that indicate susceptibility to warmer temperatures.
" + + if(trait_info.get_trait(TRAIT_XENO_SPEED)) + if(trait_info.get_trait(TRAIT_XENO_SPEED) < 0) + dat += "It appears to be agile.
" + else if(trait_info.get_trait(TRAIT_XENO_SPEED) > 0) + dat += "It appears to be slower.
" + + if(trait_info.get_trait(TRAIT_XENO_CANSPEAK)) + dat += "
The subject appears to be able to articulate." + + if(trait_info.get_trait(TRAIT_XENO_SPEAKCHANCE)) + if(trait_info.get_trait(TRAIT_XENO_SPEAKCHANCE) < 10) + dat += "The subject appears to articulate infrequently.
" + else if(trait_info.get_trait(TRAIT_XENO_SPEAKCHANCE) > 20) + dat += "The subject appears to articulate frequently.
" + + if(trait_info.get_trait(TRAIT_XENO_CANLEARN)) + dat += "
The subject appears to have process verbal information." + + if(trait_info.get_trait(TRAIT_XENO_LEARNCHANCE)) + if(trait_info.get_trait(TRAIT_XENO_LEARNCHANCE) < 50) + dat += "The subject appears to comprehend verbal information infrequently.
" + else if(trait_info.get_trait(TRAIT_XENO_LEARNCHANCE) > 51) + dat += "The subject appears to comprehend verbal information frequently.
" + + if(trait_info.get_trait(TRAIT_XENO_STRENGTH) < 5) + dat += "It appears to have lower average physical capacity.
" + else if(trait_info.get_trait(TRAIT_XENO_STRENGTH) > 7) + dat += "It appears to have greater average physical capacity.
" + + if(trait_info.get_trait(TRAIT_XENO_STR_RANGE)) + if(trait_info.get_trait(TRAIT_XENO_STR_RANGE) < 50) + dat += "The subject appears to have more consistent attacks.
" + else if(trait_info.get_trait(TRAIT_XENO_STR_RANGE) > 51) + dat += "The subject appears to have more varied attacks.
" + + if(trait_info.get_trait(TRAIT_XENO_BIOLUMESCENT)) + dat += "
It is [trait_info.get_trait(TRAIT_XENO_BIO_COLOR) ? "bio-luminescent" : "bio-luminescent"]." + + if(trait_info.get_trait(TRAIT_XENO_HOSTILE)) + dat += "
The subject appears to have hostile tendencies." + + if(trait_info.get_trait(TRAIT_XENO_CHROMATIC)) + dat += "
The subject appears to have chromatic particles inside of it." + + + if(dat) + last_data = dat + dat += "

\[print report\]" + user << browse(dat,"window=xeno_analyzer") + + return \ No newline at end of file diff --git a/polaris.dme b/polaris.dme index c81c1ac0750..d051306f68b 100644 --- a/polaris.dme +++ b/polaris.dme @@ -1916,6 +1916,7 @@ #include "code\modules\xenobio2\mob\slime\slime_core.dm" #include "code\modules\xenobio2\mob\slime\slime_monkey.dm" #include "code\modules\xenobio2\tools\slime_handling_tools.dm" +#include "code\modules\xenobio2\tools\xeno_trait_scanner.dm" #include "code\modules\xgm\xgm_gas_data.dm" #include "code\modules\xgm\xgm_gas_mixture.dm" #include "code\unit_tests\loadout_tests.dm" From caa7e102eb08a916c152781d9bdf169f2c3862bf Mon Sep 17 00:00:00 2001 From: Datraen Date: Mon, 30 May 2016 23:50:51 -0400 Subject: [PATCH 2/3] Adds changelog. --- html/changelogs/Datraen-Xenobio2Update2.yml | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 html/changelogs/Datraen-Xenobio2Update2.yml diff --git a/html/changelogs/Datraen-Xenobio2Update2.yml b/html/changelogs/Datraen-Xenobio2Update2.yml new file mode 100644 index 00000000000..7db43469277 --- /dev/null +++ b/html/changelogs/Datraen-Xenobio2Update2.yml @@ -0,0 +1,9 @@ +author: Datraen + + +delete-after: True + +changes: + - rscadd: "Adds a trait tool for Xenobio2. It was supposed to be in the initial implementation, but fell through the cracks, sorry!" + - bugfix: "Fixed the xenobio smartfridge not displaying it's starting core amount." + - bugfix: "Fixed an inverted check with slimes." From d19614dee3dce9f8c02a3ac14a9039a01ad207d8 Mon Sep 17 00:00:00 2001 From: Datraen Date: Mon, 30 May 2016 23:51:07 -0400 Subject: [PATCH 3/3] Updates map. --- maps/polaris-5.dmm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/maps/polaris-5.dmm b/maps/polaris-5.dmm index aa97ea0411f..23fd1e1026a 100644 --- a/maps/polaris-5.dmm +++ b/maps/polaris-5.dmm @@ -445,7 +445,7 @@ "iC" = (/obj/structure/disposaloutlet{dir = 1},/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/reinforced,/area/outpost/research/xenobiology) "iD" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/outpost/research/hallway/catwalk) "iE" = (/obj/machinery/requests_console{department = "Science"; departmentType = 2; name = "Science Requests Console"; pixel_x = 0; pixel_y = 30},/turf/simulated/floor/tiled,/area/outpost/research/xenobiology) -"iF" = (/obj/structure/table/standard,/obj/item/weapon/clipboard,/obj/item/weapon/folder,/obj/item/weapon/pen,/obj/item/weapon/melee/baton/slime/loaded,/turf/simulated/floor/tiled/dark,/area/outpost/research/xenobiology) +"iF" = (/obj/structure/table/standard,/obj/item/weapon/clipboard,/obj/item/weapon/folder,/obj/item/weapon/pen,/obj/item/weapon/melee/baton/slime/loaded,/obj/item/device/analyzer/xeno_analyzer,/turf/simulated/floor/tiled/dark,/area/outpost/research/xenobiology) "iG" = (/obj/structure/cable/blue{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology) "iH" = (/obj/structure/cable/blue{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/outpost/research/xenobiology) "iI" = (/obj/structure/cable/blue{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/blue{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for a door to space."; id = "xenobioout6"; name = "Containment Release Switch"; pixel_x = 0; pixel_y = -28; req_access = list(55)},/turf/simulated/floor/tiled,/area/outpost/research/xenobiology) @@ -461,7 +461,7 @@ "iS" = (/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Xenobiology Aft Starboard"; dir = 1},/obj/machinery/newscaster{pixel_y = -32},/obj/machinery/light,/obj/machinery/computer/xenobio2,/turf/simulated/floor/tiled,/area/outpost/research/xenobiology) "iT" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled,/area/outpost/research/hallway/catwalk) "iU" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/outpost/research/hallway/catwalk) -"iV" = (/obj/structure/table/steel,/obj/item/clothing/glasses/science,/turf/simulated/floor/tiled/dark,/area/outpost/research/xenobiology) +"iV" = (/obj/structure/table/steel,/obj/item/clothing/glasses/science,/obj/item/device/analyzer/xeno_analyzer,/turf/simulated/floor/tiled/dark,/area/outpost/research/xenobiology) "iW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio6"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/disposalpipe/segment,/obj/structure/cable/blue,/turf/simulated/floor/plating,/area/outpost/research/xenobiology) "iX" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio6"; name = "Containment Blast Doors"; opacity = 0},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/window/southright{name = "Containment Pen"; req_access = list(47)},/turf/simulated/floor/reinforced,/area/outpost/research/xenobiology) "iY" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio6"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable/blue,/turf/simulated/floor/plating,/area/outpost/research/xenobiology) @@ -469,9 +469,9 @@ "ja" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio5"; name = "Containment Blast Doors"; opacity = 0},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/window/southright{name = "Containment Pen"; req_access = list(47)},/turf/simulated/floor/reinforced,/area/outpost/research/xenobiology) "jb" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio5"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable/blue,/turf/simulated/floor/plating,/area/outpost/research/xenobiology) "jc" = (/obj/structure/extinguisher_cabinet{pixel_x = 25; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology) -"jd" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/xenobiodisk,/obj/item/weapon/melee/baton/slime/loaded,/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology) +"jd" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/xenobiodisk,/obj/item/weapon/melee/baton/slime/loaded,/obj/item/device/analyzer/xeno_analyzer,/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology) "je" = (/turf/simulated/wall,/area/outpost/research/xenobiology) -"jf" = (/obj/structure/closet,/obj/item/toy/figure/scientist,/obj/item/clothing/accessory/armband/science,/turf/simulated/floor/tiled/dark,/area/outpost/research/xenobiology) +"jf" = (/obj/structure/closet,/obj/item/toy/figure/scientist,/obj/item/clothing/accessory/armband/science,/obj/item/device/analyzer/xeno_analyzer,/turf/simulated/floor/tiled/dark,/area/outpost/research/xenobiology) "jg" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/outpost/research/hallway/catwalk) "jh" = (/obj/machinery/light/small{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/reinforced,/area/outpost/research/xenobiology) "ji" = (/obj/structure/disposaloutlet{dir = 4},/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/reinforced,/area/outpost/research/xenobiology)