mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2026-08-22 20:56:33 +01:00
@@ -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"
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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 << "<span class='danger'>[src] can tell you nothing about \the [target].</span>"
|
||||
return
|
||||
|
||||
form_title = "[targetName]"
|
||||
var/dat = "<h3>Biological data for [form_title]</h3>"
|
||||
user.visible_message("<span class='notice'>[user] runs the scanner over \the [target].</span>")
|
||||
|
||||
dat += "<h2>General Data</h2>"
|
||||
|
||||
|
||||
dat += "<tr><td><b>Health: </b></td><td>[trait_info.get_trait(TRAIT_XENO_HEALTH)]</td></tr>"
|
||||
|
||||
if(prod_reagents && prod_reagents.reagent_list && prod_reagents.reagent_list.len)
|
||||
dat += "<h2>Reagent Data</h2>"
|
||||
|
||||
dat += "<br>This sample contains: "
|
||||
for(var/datum/reagent/R in prod_reagents.reagent_list)
|
||||
dat += "<br>- [R.name], [prod_reagents.get_reagent_amount(R.id)] unit(s)"
|
||||
|
||||
dat += "<h2>Other Data</h2>"
|
||||
|
||||
if(trait_info.get_trait(TRAIT_XENO_EATS))
|
||||
dat += "This subject requires nutritional intake.<br>"
|
||||
|
||||
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.<br>"
|
||||
else if(trait_info.get_trait(TRAIT_XENO_HUNGER) > 15)
|
||||
dat += "It appears to have a greater metabolism.<br>"
|
||||
else
|
||||
dat += "It appears to have an average metabolism.<br>"
|
||||
|
||||
if(trait_info.get_trait(TRAIT_IMMUTABLE) == -1)
|
||||
dat += "This plant is highly mutable.<br>"
|
||||
else if(trait_info.get_trait(TRAIT_IMMUTABLE) > 0)
|
||||
dat += "This plant does not possess genetics that are alterable.<br>"
|
||||
|
||||
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.<br>"
|
||||
else if(trait_info.get_trait(TRAIT_XENO_HEALTH) > 10)
|
||||
dat += "It bears characteristics that indicate susceptibility to damage.<br>"
|
||||
else
|
||||
dat += "It bears no characters indicating resilience to damage.<br>"
|
||||
|
||||
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.<br>"
|
||||
else if(trait_info.get_trait(TRAIT_XENO_COLDRES) > 20)
|
||||
dat += "It bears characteristics that indicate susceptibility to colder temperatures.<br>"
|
||||
|
||||
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.<br>"
|
||||
else if(trait_info.get_trait(TRAIT_XENO_HEATRES) > 20)
|
||||
dat += "It bears characteristics that indicate susceptibility to warmer temperatures.<br>"
|
||||
|
||||
if(trait_info.get_trait(TRAIT_XENO_SPEED))
|
||||
if(trait_info.get_trait(TRAIT_XENO_SPEED) < 0)
|
||||
dat += "It appears to be agile.<br>"
|
||||
else if(trait_info.get_trait(TRAIT_XENO_SPEED) > 0)
|
||||
dat += "It appears to be slower.<br>"
|
||||
|
||||
if(trait_info.get_trait(TRAIT_XENO_CANSPEAK))
|
||||
dat += "<br>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.<br>"
|
||||
else if(trait_info.get_trait(TRAIT_XENO_SPEAKCHANCE) > 20)
|
||||
dat += "The subject appears to articulate frequently.<br>"
|
||||
|
||||
if(trait_info.get_trait(TRAIT_XENO_CANLEARN))
|
||||
dat += "<br>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.<br>"
|
||||
else if(trait_info.get_trait(TRAIT_XENO_LEARNCHANCE) > 51)
|
||||
dat += "The subject appears to comprehend verbal information frequently.<br>"
|
||||
|
||||
if(trait_info.get_trait(TRAIT_XENO_STRENGTH) < 5)
|
||||
dat += "It appears to have lower average physical capacity.<br>"
|
||||
else if(trait_info.get_trait(TRAIT_XENO_STRENGTH) > 7)
|
||||
dat += "It appears to have greater average physical capacity.<br>"
|
||||
|
||||
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.<br>"
|
||||
else if(trait_info.get_trait(TRAIT_XENO_STR_RANGE) > 51)
|
||||
dat += "The subject appears to have more varied attacks.<br>"
|
||||
|
||||
if(trait_info.get_trait(TRAIT_XENO_BIOLUMESCENT))
|
||||
dat += "<br>It is [trait_info.get_trait(TRAIT_XENO_BIO_COLOR) ? "<font color='[trait_info.get_trait(TRAIT_XENO_BIO_COLOR)]'>bio-luminescent</font>" : "bio-luminescent"]."
|
||||
|
||||
if(trait_info.get_trait(TRAIT_XENO_HOSTILE))
|
||||
dat += "<br>The subject appears to have hostile tendencies."
|
||||
|
||||
if(trait_info.get_trait(TRAIT_XENO_CHROMATIC))
|
||||
dat += "<br>The subject appears to have chromatic particles inside of it."
|
||||
|
||||
|
||||
if(dat)
|
||||
last_data = dat
|
||||
dat += "<br><br>\[<a href='?src=\ref[src];print=1'>print report</a>\]"
|
||||
user << browse(dat,"window=xeno_analyzer")
|
||||
|
||||
return
|
||||
@@ -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."
|
||||
+4
-4
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user