mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 10:12:45 +00:00
Prosthetic Expansion: Advent of Species
Update robolimbs.dm Update vorestation.dme Update prosfab_designs.dm Fix prosfab_designs.dm
This commit is contained in:
@@ -25,6 +25,8 @@
|
||||
var/list/categories = list()
|
||||
var/category = null
|
||||
var/manufacturer = null
|
||||
var/species_types = list("Human")
|
||||
var/species = "Human"
|
||||
var/sync_message = ""
|
||||
|
||||
/obj/machinery/pros_fabricator/New()
|
||||
@@ -100,11 +102,14 @@
|
||||
data["buildable"] = get_build_options()
|
||||
data["category"] = category
|
||||
data["categories"] = categories
|
||||
data["species_types"] = species_types
|
||||
data["species"] = species
|
||||
if(all_robolimbs)
|
||||
var/list/T = list()
|
||||
for(var/A in all_robolimbs)
|
||||
var/datum/robolimb/R = all_robolimbs[A]
|
||||
if(R.unavailable_to_build) continue
|
||||
if(species in R.species_cannot_use) continue
|
||||
T += list(list("id" = A, "company" = R.company))
|
||||
data["manufacturers"] = T
|
||||
data["manufacturer"] = manufacturer
|
||||
@@ -135,6 +140,10 @@
|
||||
if(href_list["category"] in categories)
|
||||
category = href_list["category"]
|
||||
|
||||
if(href_list["species"])
|
||||
if(href_list["species"] in species_types)
|
||||
species = href_list["species"]
|
||||
|
||||
if(href_list["manufacturer"])
|
||||
if(href_list["manufacturer"] in all_robolimbs)
|
||||
manufacturer = href_list["manufacturer"]
|
||||
@@ -173,6 +182,18 @@
|
||||
qdel(I)
|
||||
return
|
||||
|
||||
if(istype(I,/obj/item/weapon/disk/species))
|
||||
var/obj/item/weapon/disk/species/D = I
|
||||
if(!D.species || !(D.species in GLOB.all_species))
|
||||
to_chat(user, "<span class='warning'>This disk seems to be corrupted!</span>")
|
||||
else
|
||||
to_chat(user, "<span class='notice'>Uploading modification files for [D.species]...</span>")
|
||||
if(do_after(user,50,src))
|
||||
species_types |= D.species
|
||||
to_chat(user, "<span class='notice'>Uploaded [D.species] files!</span>")
|
||||
qdel(I)
|
||||
return
|
||||
|
||||
if(istype(I,/obj/item/stack/material))
|
||||
var/obj/item/stack/material/S = I
|
||||
if(!(S.material.name in materials))
|
||||
|
||||
@@ -178,9 +178,28 @@
|
||||
for(var/obj/item/W in src)
|
||||
drop_from_inventory(W)
|
||||
|
||||
visible_message("<span class='warning'>\The [src] quivers slightly, then splits apart with a wet slithering noise.</span>")
|
||||
var/obj/item/organ/external/Chest = organs_by_name[BP_TORSO]
|
||||
|
||||
qdel(src)
|
||||
if(Chest.robotic >= 2)
|
||||
visible_message("<span class='warning'>\The [src] shudders slightly, then ejects a cluster of nymphs with a wet slithering noise.</span>")
|
||||
species = GLOB.all_species[SPECIES_HUMAN] // This is hard-set to default the body to a normal FBP, without changing anything.
|
||||
|
||||
// Bust it
|
||||
src.death()
|
||||
|
||||
for(var/obj/item/organ/internal/diona/Org in internal_organs) // Remove Nymph organs.
|
||||
qdel(Org)
|
||||
|
||||
// Purge the diona verbs.
|
||||
verbs -= /mob/living/carbon/human/proc/diona_split_nymph
|
||||
verbs -= /mob/living/carbon/human/proc/regenerate
|
||||
|
||||
for(var/obj/item/organ/external/E in organs) // Just fall apart.
|
||||
E.droplimb(TRUE)
|
||||
|
||||
else
|
||||
visible_message("<span class='warning'>\The [src] quivers slightly, then splits apart with a wet slithering noise.</span>")
|
||||
qdel(src)
|
||||
|
||||
/mob/living/carbon/human/proc/self_diagnostics()
|
||||
set name = "Self-Diagnostics"
|
||||
|
||||
@@ -482,6 +482,7 @@
|
||||
has_organ = list(
|
||||
O_NUTRIENT = /obj/item/organ/internal/diona/nutrients,
|
||||
O_STRATA = /obj/item/organ/internal/diona/strata,
|
||||
O_BRAIN = /obj/item/organ/internal/brain/cephalon,
|
||||
O_RESPONSE = /obj/item/organ/internal/diona/node,
|
||||
O_GBLADDER = /obj/item/organ/internal/diona/bladder,
|
||||
O_POLYP = /obj/item/organ/internal/diona/polyp,
|
||||
@@ -555,6 +556,16 @@
|
||||
|
||||
if(H.isSynthetic())
|
||||
H.visible_message("<span class='danger'>\The [H] collapses into parts, revealing a solitary diona nymph at the core.</span>")
|
||||
|
||||
H.species = GLOB.all_species[SPECIES_HUMAN] // This is hard-set to default the body to a normal FBP, without changing anything.
|
||||
|
||||
for(var/obj/item/organ/internal/diona/Org in H.internal_organs) // Remove Nymph organs.
|
||||
qdel(Org)
|
||||
|
||||
// Purge the diona verbs.
|
||||
H.verbs -= /mob/living/carbon/human/proc/diona_split_nymph
|
||||
H.verbs -= /mob/living/carbon/human/proc/regenerate
|
||||
|
||||
return
|
||||
|
||||
for(var/mob/living/carbon/alien/diona/D in H.contents)
|
||||
|
||||
@@ -18,7 +18,7 @@ var/global/list/limb_icon_cache = list()
|
||||
h_col = null
|
||||
if(robotic >= ORGAN_ROBOT)
|
||||
var/datum/robolimb/franchise = all_robolimbs[model]
|
||||
if(!(franchise && franchise.skin_tone))
|
||||
if(!(franchise && franchise.skin_tone) && !(franchise && franchise.skin_color))
|
||||
if(human.synth_color)
|
||||
s_col = list(human.r_synth, human.g_synth, human.b_synth)
|
||||
return
|
||||
@@ -36,7 +36,7 @@ var/global/list/limb_icon_cache = list()
|
||||
h_col = null
|
||||
if(robotic >= ORGAN_ROBOT)
|
||||
var/datum/robolimb/franchise = all_robolimbs[model]
|
||||
if(!(franchise && franchise.skin_tone))
|
||||
if(!(franchise && franchise.skin_tone) && !(franchise && franchise.skin_color))
|
||||
return
|
||||
if(!isnull(dna.GetUIValue(DNA_UI_SKIN_TONE)) && (species.appearance_flags & HAS_SKIN_TONE))
|
||||
s_tone = dna.GetUIValue(DNA_UI_SKIN_TONE)
|
||||
|
||||
@@ -33,6 +33,14 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\
|
||||
if(!R.unavailable_at_chargen)
|
||||
chargen_robolimbs[R.company] = R //List only main brands and solo parts.
|
||||
|
||||
for(var/company in all_robolimbs)
|
||||
var/datum/robolimb/R = all_robolimbs[company]
|
||||
if(R.species_alternates)
|
||||
for(var/species in R.species_alternates)
|
||||
var/species_company = R.species_alternates[species]
|
||||
if(species_company in all_robolimbs)
|
||||
R.species_alternates[species] = all_robolimbs[species_company]
|
||||
|
||||
/datum/robolimb
|
||||
var/company = "Unbranded" // Shown when selecting the limb.
|
||||
var/desc = "A generic unbranded robotic prosthesis." // Seen when examining a limb.
|
||||
@@ -40,9 +48,11 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\
|
||||
var/unavailable_at_chargen // If set, not available at chargen.
|
||||
var/unavailable_to_build // If set, can't be constructed.
|
||||
var/lifelike // If set, appears organic.
|
||||
var/skin_tone // If set, applies skin tone rather than part color
|
||||
var/skin_tone // If set, applies skin tone rather than part color Overrides color.
|
||||
var/skin_color // If set, applies skin color rather than part color.
|
||||
var/blood_color = "#030303"
|
||||
var/list/species_cannot_use = list(SPECIES_TESHARI, SPECIES_PROMETHEAN, SPECIES_DIONA, SPECIES_XENOCHIMERA) //VOREStation Edit
|
||||
var/list/species_alternates = list(SPECIES_TAJ = "Unbranded - Tajaran", SPECIES_UNATHI = "Unbranded - Unathi") //"Species Name" = "Robolimb Company" , List, when initialized, will become "Species Name" = RobolimbDatum, used for alternate species sprites.
|
||||
var/list/monitor_styles //If empty, the model of limbs offers a head compatible with monitors.
|
||||
var/parts = BP_ALL //Defines what parts said brand can replace on a body.
|
||||
var/health_hud_intensity = 1 // Intensity modifier for the health GUI indicator.
|
||||
@@ -72,10 +82,45 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\
|
||||
icon = 'icons/mob/human_races/cyberlimbs/unbranded/unbranded_alt2.dmi'
|
||||
unavailable_to_build = 1
|
||||
|
||||
/datum/robolimb/unbranded_tajaran
|
||||
company = "Unbranded - Tajaran"
|
||||
species_cannot_use = list(SPECIES_TESHARI, SPECIES_PROMETHEAN, SPECIES_DIONA, SPECIES_HUMAN, SPECIES_VOX, SPECIES_HUMAN_VATBORN, SPECIES_UNATHI, SPECIES_SKRELL, SPECIES_ZADDAT)
|
||||
suggested_species = SPECIES_TAJ
|
||||
desc = "A simple robotic limb with feline design. Seems rather stiff."
|
||||
icon = 'icons/mob/human_races/cyberlimbs/unbranded/unbranded_tajaran.dmi'
|
||||
unavailable_to_build = 1
|
||||
|
||||
/datum/robolimb/unbranded_unathi
|
||||
company = "Unbranded - Unathi"
|
||||
species_cannot_use = list(SPECIES_TESHARI, SPECIES_PROMETHEAN, SPECIES_DIONA, SPECIES_HUMAN, SPECIES_VOX, SPECIES_HUMAN_VATBORN, SPECIES_TAJ, SPECIES_SKRELL, SPECIES_ZADDAT)
|
||||
suggested_species = SPECIES_UNATHI
|
||||
desc = "A simple robotic limb with reptilian design. Seems rather stiff."
|
||||
icon = 'icons/mob/human_races/cyberlimbs/unbranded/unbranded_unathi.dmi'
|
||||
unavailable_to_build = 1
|
||||
|
||||
/datum/robolimb/nanotrasen
|
||||
company = "NanoTrasen"
|
||||
desc = "A simple but efficient robotic limb, created by NanoTrasen."
|
||||
icon = 'icons/mob/human_races/cyberlimbs/nanotrasen/nanotrasen_main.dmi'
|
||||
species_alternates = list(SPECIES_TAJ = "NanoTrasen - Tajaran", SPECIES_UNATHI = "NanoTrasen - Unathi")
|
||||
|
||||
/datum/robolimb/nanotrasen_tajaran
|
||||
company = "NanoTrasen - Tajaran"
|
||||
species_cannot_use = list(SPECIES_TESHARI, SPECIES_PROMETHEAN, SPECIES_DIONA, SPECIES_HUMAN, SPECIES_VOX, SPECIES_HUMAN_VATBORN, SPECIES_UNATHI, SPECIES_SKRELL, SPECIES_ZADDAT)
|
||||
species_alternates = list(SPECIES_HUMAN = "NanoTrasen")
|
||||
suggested_species = SPECIES_TAJ
|
||||
desc = "A simple but efficient robotic limb, created by NanoTrasen."
|
||||
icon = 'icons/mob/human_races/cyberlimbs/nanotrasen/nanotrasen_tajaran.dmi'
|
||||
unavailable_to_build = 1
|
||||
|
||||
/datum/robolimb/nanotrasen_unathi
|
||||
company = "NanoTrasen - Unathi"
|
||||
species_cannot_use = list(SPECIES_TESHARI, SPECIES_PROMETHEAN, SPECIES_DIONA, SPECIES_HUMAN, SPECIES_VOX, SPECIES_HUMAN_VATBORN, SPECIES_TAJ, SPECIES_SKRELL, SPECIES_ZADDAT)
|
||||
species_alternates = list(SPECIES_HUMAN = "NanoTrasen")
|
||||
suggested_species = SPECIES_UNATHI
|
||||
desc = "A simple but efficient robotic limb, created by NanoTrasen."
|
||||
icon = 'icons/mob/human_races/cyberlimbs/nanotrasen/nanotrasen_unathi.dmi'
|
||||
unavailable_to_build = 1
|
||||
|
||||
/datum/robolimb/bishop
|
||||
company = "Bishop"
|
||||
@@ -104,6 +149,19 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\
|
||||
parts = list(BP_HEAD)
|
||||
monitor_styles = standard_monitor_styles
|
||||
|
||||
/datum/robolimb/gestaltframe
|
||||
company = "Skrellian Exoskeleton"
|
||||
desc = "This limb looks to be more like a strange.. puppet, than a prosthetic."
|
||||
icon = 'icons/mob/human_races/cyberlimbs/veymed/dionaea/skrellian.dmi'
|
||||
blood_color = "#63b521"
|
||||
speech_bubble_appearance = "machine"
|
||||
unavailable_to_build = 1
|
||||
species_cannot_use = list(SPECIES_TESHARI, SPECIES_PROMETHEAN, SPECIES_TAJ, SPECIES_HUMAN, SPECIES_VOX, SPECIES_HUMAN_VATBORN, SPECIES_UNATHI, SPECIES_SKRELL, SPECIES_ZADDAT)
|
||||
suggested_species = SPECIES_DIONA
|
||||
// Dionaea are naturally very tanky, so the robotic limbs are actually far weaker than their normal bodies.
|
||||
robo_brute_mod = 1.3
|
||||
robo_burn_mod = 1.3
|
||||
|
||||
/datum/robolimb/cybersolutions
|
||||
company = "Cyber Solutions"
|
||||
desc = "This limb is grey and rough, with little in the way of aesthetic."
|
||||
@@ -224,11 +282,25 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\
|
||||
unavailable_to_build = 1
|
||||
lifelike = 1
|
||||
skin_tone = 1
|
||||
species_alternates = list(SPECIES_SKRELL = "Vey-Med - Skrell")
|
||||
blood_color = "#CCCCCC"
|
||||
speech_bubble_appearance = "normal"
|
||||
//robo_brute_mod = 1.1 //VOREStation Edit
|
||||
//robo_burn_mod = 1.1 //VOREStation Edit
|
||||
|
||||
/datum/robolimb/veymed_skrell
|
||||
company = "Vey-Med - Skrell"
|
||||
desc = "This high quality limb is nearly indistinguishable from an organic one."
|
||||
icon = 'icons/mob/human_races/cyberlimbs/veymed/veymed_skrell.dmi'
|
||||
unavailable_to_build = 1
|
||||
lifelike = 1
|
||||
skin_color = TRUE
|
||||
species_cannot_use = list(SPECIES_TESHARI, SPECIES_PROMETHEAN, SPECIES_TAJ, SPECIES_HUMAN, SPECIES_VOX, SPECIES_HUMAN_VATBORN, SPECIES_UNATHI, SPECIES_DIONA, SPECIES_ZADDAT)
|
||||
blood_color = "#4451cf"
|
||||
speech_bubble_appearance = "normal"
|
||||
robo_brute_mod = 1.05
|
||||
robo_burn_mod = 1.05
|
||||
|
||||
/datum/robolimb/wardtakahashi
|
||||
company = "Ward-Takahashi"
|
||||
desc = "This limb features sleek black and white polymers."
|
||||
@@ -343,6 +415,10 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\
|
||||
company = "Vey-Med"
|
||||
catalogue_data = list(/datum/category_item/catalogue/information/organization/vey_med)
|
||||
|
||||
// Bus disk for Diona mech parts.
|
||||
/obj/item/weapon/disk/limb/veymed/diona
|
||||
company = "Skrellian Exoskeleton"
|
||||
|
||||
/obj/item/weapon/disk/limb/wardtakahashi
|
||||
company = "Ward-Takahashi"
|
||||
catalogue_data = list(/datum/category_item/catalogue/information/organization/ward_takahashi)
|
||||
@@ -358,3 +434,34 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\
|
||||
/obj/item/weapon/disk/limb/nanotrasen
|
||||
company = "NanoTrasen"
|
||||
catalogue_data = list(/datum/category_item/catalogue/information/organization/nanotrasen)
|
||||
|
||||
/obj/item/weapon/disk/species
|
||||
name = "Species Bioprints"
|
||||
desc = "A disk containing the blueprints for species-specific prosthetics."
|
||||
icon = 'icons/obj/cloning.dmi'
|
||||
icon_state = "datadisk2"
|
||||
var/species = SPECIES_HUMAN
|
||||
|
||||
/obj/item/weapon/disk/species/Initialize()
|
||||
..()
|
||||
if(species)
|
||||
name = "[species] [initial(name)]"
|
||||
|
||||
/obj/item/weapon/disk/species/skrell
|
||||
species = SPECIES_SKRELL
|
||||
|
||||
/obj/item/weapon/disk/species/unathi
|
||||
species = SPECIES_UNATHI
|
||||
|
||||
/obj/item/weapon/disk/species/tajaran
|
||||
species = SPECIES_TAJ
|
||||
|
||||
/obj/item/weapon/disk/species/teshari
|
||||
species = SPECIES_TESHARI
|
||||
|
||||
// In case of bus, presently.
|
||||
/obj/item/weapon/disk/species/diona
|
||||
species = SPECIES_DIONA
|
||||
|
||||
/obj/item/weapon/disk/species/zaddat
|
||||
species = SPECIES_ZADDAT
|
||||
|
||||
@@ -205,6 +205,37 @@
|
||||
/obj/item/organ/internal/diona/node/removed()
|
||||
return
|
||||
|
||||
// A 'brain' for the tree, still becomes a mindless nymph when removed like any other. Satisfies the FBP code.
|
||||
/obj/item/organ/internal/brain/cephalon
|
||||
name = "cephalon mass"
|
||||
parent_organ = BP_TORSO
|
||||
vital = TRUE
|
||||
|
||||
/obj/item/organ/internal/brain/cephalon/Initialize()
|
||||
..()
|
||||
spawn(30 SECONDS) // FBP Dionaea need some way to be disassembled through surgery, if absolutely necessary.
|
||||
if(!owner.isSynthetic())
|
||||
vital = FALSE
|
||||
|
||||
/obj/item/organ/internal/brain/cephalon/robotize()
|
||||
return
|
||||
|
||||
/obj/item/organ/internal/brain/cephalon/mechassist()
|
||||
return
|
||||
|
||||
/obj/item/organ/internal/brain/cephalon/digitize()
|
||||
return
|
||||
|
||||
/obj/item/organ/internal/brain/cephalon/removed(var/mob/living/user, var/skip_nymph)
|
||||
if(robotic >= ORGAN_ROBOT)
|
||||
return ..()
|
||||
var/mob/living/carbon/human/H = owner
|
||||
..()
|
||||
if(!istype(H) || !H.organs || !H.organs.len)
|
||||
H.death()
|
||||
if(prob(50) && !skip_nymph && spawn_diona_nymph(get_turf(src)))
|
||||
qdel(src)
|
||||
|
||||
/obj/item/organ/external/head/no_eyes/diona
|
||||
max_damage = 50
|
||||
min_broken_damage = 25
|
||||
|
||||
46
code/modules/research/designs/circuits/disks.dm
Normal file
46
code/modules/research/designs/circuits/disks.dm
Normal file
@@ -0,0 +1,46 @@
|
||||
|
||||
/datum/design/circuit/disk
|
||||
build_type = IMPRINTER
|
||||
req_tech = list(TECH_DATA = 3)
|
||||
materials = list(MAT_PLASTIC = 2000, MAT_GLASS = 1000)
|
||||
chemicals = list("pacid" = 10)
|
||||
time = 5
|
||||
|
||||
/datum/design/circuit/disk/AssembleDesignName()
|
||||
..()
|
||||
if(build_path)
|
||||
var/obj/item/weapon/disk/D = build_path
|
||||
if(istype(D, /obj/item/weapon/disk/species))
|
||||
name = "Species Prosthetic design ([item_name])"
|
||||
else if(istype(D, /obj/item/weapon/disk/limb))
|
||||
name = "Transtellar Prosthetic design ([item_name])"
|
||||
else
|
||||
name = "Disk design ([item_name])"
|
||||
|
||||
/datum/design/circuit/disk/skrellprint
|
||||
name = SPECIES_SKRELL
|
||||
id = "prosthetic_skrell"
|
||||
req_tech = list(TECH_DATA = 3, TECH_BIO = 3)
|
||||
build_path = /obj/item/weapon/disk/species/skrell
|
||||
sort_string = "DBAAA"
|
||||
|
||||
/datum/design/circuit/disk/tajprint
|
||||
name = SPECIES_TAJ
|
||||
id = "prosthetic_tajaran"
|
||||
req_tech = list(TECH_DATA = 3, TECH_BIO = 3)
|
||||
build_path = /obj/item/weapon/disk/species/tajaran
|
||||
sort_string = "DBAAB"
|
||||
|
||||
/datum/design/circuit/disk/unathiprint
|
||||
name = SPECIES_UNATHI
|
||||
id = "prosthetic_unathi"
|
||||
req_tech = list(TECH_DATA = 3, TECH_BIO = 4)
|
||||
build_path = /obj/item/weapon/disk/species/unathi
|
||||
sort_string = "DBAAC"
|
||||
|
||||
/datum/design/circuit/disk/teshariprint
|
||||
name = SPECIES_TESHARI
|
||||
id = "prosthetic_teshari"
|
||||
req_tech = list(TECH_DATA = 3, TECH_BIO = 4)
|
||||
build_path = /obj/item/weapon/disk/species/teshari
|
||||
sort_string = "DBAAD"
|
||||
@@ -11,20 +11,21 @@
|
||||
if(istype(fabricator, /obj/machinery/pros_fabricator))
|
||||
var/obj/machinery/pros_fabricator/prosfab = fabricator
|
||||
var/obj/item/organ/O = new build_path(newloc)
|
||||
//VOREStation Edit - Suggesting a species
|
||||
var/newspecies = "Human"
|
||||
if(prosfab.manufacturer)
|
||||
var/datum/robolimb/manf = all_robolimbs[prosfab.manufacturer]
|
||||
newspecies = manf.suggested_species
|
||||
O.species = GLOB.all_species[newspecies]
|
||||
if(istype(O,/obj/item/organ/external))
|
||||
var/obj/item/organ/external/EO = O
|
||||
if(EO.species.base_color)
|
||||
var/r_skin = hex2num(copytext(EO.species.base_color,2,4))
|
||||
var/g_skin = hex2num(copytext(EO.species.base_color,4,6))
|
||||
var/b_skin = hex2num(copytext(EO.species.base_color,6,8))
|
||||
EO.s_col = list(r_skin, g_skin, b_skin)
|
||||
//VOREStation Edit End
|
||||
|
||||
if(!(O.organ_tag in manf.parts)) // Make sure we're using an actually present icon.
|
||||
manf = all_robolimbs["Unbranded"]
|
||||
|
||||
if(prosfab.species in manf.species_alternates) // If the prosthetics fab is set to say, Unbranded, and species set to 'Tajaran', it will make the Taj variant of Unbranded, if it exists.
|
||||
manf = manf.species_alternates[prosfab.species]
|
||||
|
||||
if(!prosfab.species || (prosfab.species in manf.species_cannot_use)) // Fabricator ensures the manufacturer can make parts for the species we're set to.
|
||||
O.species = GLOB.all_species["[manf.suggested_species]"]
|
||||
else
|
||||
O.species = GLOB.all_species[prosfab.species]
|
||||
else
|
||||
O.species = GLOB.all_species["Human"]
|
||||
O.robotize(prosfab.manufacturer)
|
||||
O.dna = new/datum/dna() //Uuughhhh... why do I have to do this?
|
||||
O.dna.ResetUI()
|
||||
@@ -38,13 +39,20 @@
|
||||
/datum/design/item/prosfab/pros/torso/Fabricate(var/newloc, var/fabricator)
|
||||
if(istype(fabricator, /obj/machinery/pros_fabricator))
|
||||
var/obj/machinery/pros_fabricator/prosfab = fabricator
|
||||
//VOREStation Edit - Suggesting a species
|
||||
var/newspecies = "Human"
|
||||
if(prosfab.manufacturer)
|
||||
var/datum/robolimb/manf = all_robolimbs[prosfab.manufacturer]
|
||||
newspecies = manf.suggested_species
|
||||
|
||||
var/datum/robolimb/manf = all_robolimbs[prosfab.manufacturer]
|
||||
|
||||
if(manf)
|
||||
if(prosfab.species in manf.species_alternates) // If the prosthetics fab is set to say, Unbranded, and species set to 'Tajaran', it will make the Taj variant of Unbranded, if it exists.
|
||||
manf = manf.species_alternates[prosfab.species]
|
||||
|
||||
if(!prosfab.species || (prosfab.species in manf.species_cannot_use))
|
||||
newspecies = manf.suggested_species
|
||||
else
|
||||
newspecies = prosfab.species
|
||||
|
||||
var/mob/living/carbon/human/H = new(newloc,newspecies)
|
||||
//VOREStation Edit End
|
||||
H.stat = DEAD
|
||||
H.gender = gender
|
||||
for(var/obj/item/organ/external/EO in H.organs)
|
||||
@@ -55,11 +63,26 @@
|
||||
|
||||
for(var/obj/item/organ/external/O in H.organs)
|
||||
O.species = GLOB.all_species[newspecies]
|
||||
O.robotize(prosfab.manufacturer)
|
||||
|
||||
if(!(O.organ_tag in manf.parts)) // Make sure we're using an actually present icon.
|
||||
manf = all_robolimbs["Unbranded"]
|
||||
|
||||
O.robotize(manf.company)
|
||||
O.dna = new/datum/dna()
|
||||
O.dna.ResetUI()
|
||||
O.dna.ResetSE()
|
||||
|
||||
// Skincolor weirdness.
|
||||
O.s_col[1] = 0
|
||||
O.s_col[2] = 0
|
||||
O.s_col[3] = 0
|
||||
|
||||
// Resetting the UI does strange things for the skin of a non-human robot, which should be controlled by a whole different thing.
|
||||
H.r_skin = 0
|
||||
H.g_skin = 0
|
||||
H.b_skin = 0
|
||||
H.dna.ResetUIFrom(H)
|
||||
|
||||
H.real_name = "Synthmorph #[rand(100,999)]"
|
||||
H.name = H.real_name
|
||||
H.dir = 2
|
||||
|
||||
@@ -483,3 +483,96 @@
|
||||
/datum/surgery_step/robotics/install_mmi/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<span class='warning'>[user]'s hand slips.</span>", \
|
||||
"<span class='warning'>Your hand slips.</span>")
|
||||
|
||||
/*
|
||||
* Install a Diona Nymph into a Nymph Mech
|
||||
*/
|
||||
|
||||
/datum/surgery_step/robotics/install_nymph
|
||||
allowed_tools = list(
|
||||
/obj/item/weapon/holder/diona = 100
|
||||
)
|
||||
|
||||
min_duration = 60
|
||||
max_duration = 80
|
||||
|
||||
/datum/surgery_step/robotics/install_nymph/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(target_zone != BP_TORSO)
|
||||
return
|
||||
|
||||
var/obj/item/weapon/holder/diona/N = tool
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
|
||||
if(!(affected && affected.open == 3))
|
||||
return 0
|
||||
|
||||
if(!istype(N))
|
||||
return 0
|
||||
|
||||
if(!N.held_mob.client || N.held_mob.stat >= DEAD)
|
||||
to_chat(user, "<span class='danger'>That nymph is not viable.</span>")
|
||||
return SURGERY_FAILURE
|
||||
|
||||
if(!(affected.robotic >= ORGAN_ROBOT))
|
||||
to_chat(user, "<span class='danger'>You cannot install a nymph into a meat puppet.</span>")
|
||||
return SURGERY_FAILURE
|
||||
|
||||
if(!(affected.model != "Skrellian Exoskeleton"))
|
||||
to_chat(user, "<span class='dangerou'>You're fairly certain a nymph can't pilot a normal robot.</span>")
|
||||
return SURGERY_FAILURE
|
||||
|
||||
if(!target.should_have_organ("brain"))
|
||||
to_chat(user, "<span class='danger'>You're pretty sure [target.species.name_plural] don't normally have a brain.</span>")
|
||||
return SURGERY_FAILURE
|
||||
|
||||
if(!isnull(target.internal_organs["brain"]))
|
||||
to_chat(user, "<span class='danger'>Your subject already has a cephalon.</span>")
|
||||
return SURGERY_FAILURE
|
||||
|
||||
return 1
|
||||
|
||||
/datum/surgery_step/robotics/install_nymph/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("[user] starts setting \the [tool] into [target]'s [affected.name].", \
|
||||
"You start setting \the [tool] into [target]'s [affected.name].")
|
||||
..()
|
||||
|
||||
/datum/surgery_step/robotics/install_nymph/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<span class='notice'>[user] has installed \the [tool] into [target]'s [affected.name].</span>", \
|
||||
"<span class='notice'>You have installed \the [tool] into [target]'s [affected.name].</span>")
|
||||
|
||||
var/obj/item/weapon/holder/diona/N = tool
|
||||
var/obj/item/organ/internal/brain/cephalon/cephalon = new(target, 1)
|
||||
target.internal_organs_by_name["brain"] = cephalon
|
||||
var/mob/living/carbon/alien/diona/D = N.held_mob
|
||||
user.drop_from_inventory(tool)
|
||||
|
||||
if(D && D.mind)
|
||||
D.mind.transfer_to(target)
|
||||
target.languages |= D.languages
|
||||
|
||||
qdel(D)
|
||||
|
||||
target.species = GLOB.all_species[SPECIES_DIONA]
|
||||
|
||||
target.verbs |= /mob/living/carbon/human/proc/diona_split_nymph
|
||||
target.verbs |= /mob/living/carbon/human/proc/regenerate
|
||||
|
||||
spawn(0) //Name yourself on your own damn time
|
||||
var/new_name = ""
|
||||
while(!new_name)
|
||||
if(!target) return
|
||||
var/try_name = input(target,"Pick a name for your new form!", "New Name", target.name)
|
||||
var/clean_name = sanitizeName(try_name, allow_numbers = TRUE)
|
||||
if(clean_name)
|
||||
var/okay = alert(target,"New name will be '[clean_name]', ok?", "Confirmation","Cancel","Ok")
|
||||
if(okay == "Ok")
|
||||
new_name = clean_name
|
||||
|
||||
target.name = new_name
|
||||
target.real_name = target.name
|
||||
|
||||
/datum/surgery_step/robotics/install_nymph/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<span class='warning'>[user]'s hand slips.</span>", \
|
||||
"<span class='warning'>Your hand slips.</span>")
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 3.3 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 3.2 KiB |
BIN
icons/mob/human_races/cyberlimbs/unbranded/unbranded_tajaran.dmi
Normal file
BIN
icons/mob/human_races/cyberlimbs/unbranded/unbranded_tajaran.dmi
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.5 KiB |
BIN
icons/mob/human_races/cyberlimbs/unbranded/unbranded_unathi.dmi
Normal file
BIN
icons/mob/human_races/cyberlimbs/unbranded/unbranded_unathi.dmi
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.5 KiB |
BIN
icons/mob/human_races/cyberlimbs/veymed/dionaea/skrellian.dmi
Normal file
BIN
icons/mob/human_races/cyberlimbs/veymed/dionaea/skrellian.dmi
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 6.3 KiB |
BIN
icons/mob/human_races/cyberlimbs/veymed/veymed_skrell.dmi
Normal file
BIN
icons/mob/human_races/cyberlimbs/veymed/veymed_skrell.dmi
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.2 KiB |
@@ -4,6 +4,14 @@
|
||||
{{:data.sync}}
|
||||
</div>
|
||||
<hr style="width: 90%;">
|
||||
{{if data.species_types}}
|
||||
<div class="item">
|
||||
{{for data.species_types}}
|
||||
{{:helper.link(value, null, {'species' : value}, value == data.species ? 'selected' : null)}}
|
||||
{{/for}}
|
||||
</div>
|
||||
<hr style="width: 90%;">
|
||||
{{/if}}
|
||||
{{if data.manufacturers}}
|
||||
<div class="item">
|
||||
{{for data.manufacturers}}
|
||||
|
||||
@@ -3163,6 +3163,7 @@
|
||||
#include "code\modules\research\designs\circuits\ai_modules.dm"
|
||||
#include "code\modules\research\designs\circuits\circuits.dm"
|
||||
#include "code\modules\research\designs\circuits\circuits_vr.dm"
|
||||
#include "code\modules\research\designs\circuits\disks.dm"
|
||||
#include "code\modules\resleeving\circuitboards.dm"
|
||||
#include "code\modules\resleeving\computers.dm"
|
||||
#include "code\modules\resleeving\designer.dm"
|
||||
|
||||
Reference in New Issue
Block a user