Xenowork Prep For Future (#6491)

* Xenowork, weeds walls and material blobs.

* More weeds

* XenoUpdoots

* Stop that, me.
This commit is contained in:
Mechoid
2019-11-04 21:38:02 -05:00
committed by VirgoBot
parent 222a144b13
commit e1fa847bc2
19 changed files with 281 additions and 32 deletions
@@ -225,3 +225,14 @@
recipes += new/datum/stack_recipe("baggy pants", /obj/item/clothing/under/pants/baggy/white, 8, time = 10 SECONDS, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("belt pouch", /obj/item/weapon/storage/belt/fannypack/white, 25, time = 1 MINUTE, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("crude bandage", /obj/item/stack/medical/crude_pack, 1, time = 2 SECONDS, pass_stack_color = TRUE)
/material/resin/generate_recipes()
recipes = list()
recipes += new/datum/stack_recipe("[display_name] door", /obj/structure/simple_door/resin, 10, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("[display_name] barricade", /obj/effect/alien/resin/wall, 5, time = 5 SECONDS, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("[display_name] nest", /obj/structure/bed/nest, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("[display_name] wall girders", /obj/structure/girder/resin, 2, time = 5 SECONDS, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("crude [display_name] bandage", /obj/item/stack/medical/crude_pack, 1, time = 2 SECONDS, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("[display_name] net", /obj/item/weapon/material/fishing_net, 10, time = 5 SECONDS, supplied_material = "[name]", pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("[display_name] membrane", /obj/effect/alien/resin/membrane, 1, time = 2 SECONDS, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("[display_name] node", /obj/effect/alien/weeds/node, 1, time = 4 SECONDS)
@@ -371,6 +371,15 @@
pass_color = TRUE
strict_color_stacking = TRUE
/obj/item/stack/material/resin
name = "resin"
icon_state = "sheet-resin"
default_type = "resin"
no_variants = TRUE
apply_colour = TRUE
pass_color = TRUE
strict_color_stacking = TRUE
/obj/item/stack/material/cardboard
name = "cardboard"
icon_state = "sheet-card"
+22
View File
@@ -16,6 +16,7 @@
stone
metal
solid
resin
ONLY WALLS
cult
hull
@@ -240,6 +241,10 @@ var/list/name_to_material
/material/proc/combustion_effect(var/turf/T, var/temperature)
return
// Used by walls to do on-touch things, after checking for crumbling and open-ability.
/material/proc/wall_touch_special(var/turf/simulated/wall/W, var/mob/living/L)
return
// Datum definitions follow.
/material/uranium
name = "uranium"
@@ -824,12 +829,18 @@ var/list/name_to_material
/material/resin
name = "resin"
icon_colour = "#35343a"
icon_base = "resin"
dooropen_noise = 'sound/effects/attackblob.ogg'
door_icon_base = "resin"
icon_reinf = "reinf_mesh"
melting_point = T0C+300
sheet_singular_name = "blob"
sheet_plural_name = "blobs"
conductive = 0
explosion_resistance = 60
radiation_resistance = 10
stack_origin_tech = list(TECH_MATERIAL = 8, TECH_PHORON = 4, TECH_BLUESPACE = 4, TECH_BIO = 7)
stack_type = /obj/item/stack/material/resin
/material/resin/can_open_material_door(var/mob/living/user)
var/mob/living/carbon/M = user
@@ -837,6 +848,17 @@ var/list/name_to_material
return 1
return 0
/material/resin/wall_touch_special(var/turf/simulated/wall/W, var/mob/living/L)
var/mob/living/carbon/M = L
if(istype(M) && locate(/obj/item/organ/internal/xenos/hivenode) in M.internal_organs)
to_chat(M, "<span class='alien'>\The [W] shudders under your touch, starting to become porous.</span>")
playsound(W, 'sound/effects/attackblob.ogg', 50, 1)
if(do_after(L, 5 SECONDS))
spawn(2)
playsound(W, 'sound/effects/attackblob.ogg', 100, 1)
W.dismantle_wall()
return 1
return 0
/material/wood
name = MAT_WOOD
@@ -1283,6 +1283,9 @@
else if (affecting.robotic >= ORGAN_LIFELIKE)
. = 0
fail_msg = "Your needle refuses to penetrate more than a short distance..."
else if (affecting.thick_skin && prob(70 - round(affecting.brute_dam + affecting.burn_dam / 2))) // Allows transplanted limbs with thick skin to maintain their resistance.
. = 0
fail_msg = "Your needle fails to penetrate \the [affecting]'s thick hide..."
else
switch(target_zone)
if(BP_HEAD)
@@ -121,7 +121,9 @@
if(check_alien_ability(50,1,O_RESIN))
visible_message("<span class='alium'><B>[src] has planted some alien weeds!</B></span>")
new /obj/effect/alien/weeds/node(loc)
var/obj/O = new /obj/effect/alien/weeds/node(loc)
if(O)
O.color = "#321D37"
return
/mob/living/carbon/human/proc/Spit(var/atom/A)
@@ -231,7 +233,7 @@
set desc = "Secrete tough malleable resin."
set category = "Abilities"
var/choice = input("Choose what you wish to shape.","Resin building") as null|anything in list("resin door","resin wall","resin membrane","resin nest") //would do it through typesof but then the player choice would have the type path and we don't want the internal workings to be exposed ICly - Urist
var/choice = input("Choose what you wish to shape.","Resin building") as null|anything in list("resin door","resin wall","resin membrane","resin nest","resin blob") //would do it through typesof but then the player choice would have the type path and we don't want the internal workings to be exposed ICly - Urist
if(!choice)
return
@@ -239,15 +241,24 @@
return
visible_message("<span class='warning'><B>[src] vomits up a thick purple substance and begins to shape it!</B></span>", "<span class='alium'>You shape a [choice].</span>")
var/obj/O
switch(choice)
if("resin door")
new /obj/structure/simple_door/resin(loc)
O = new /obj/structure/simple_door/resin(loc)
if("resin wall")
new /obj/effect/alien/resin/wall(loc)
O = new /obj/effect/alien/resin/wall(loc)
if("resin membrane")
new /obj/effect/alien/resin/membrane(loc)
O = new /obj/effect/alien/resin/membrane(loc)
if("resin nest")
new /obj/structure/bed/nest(loc)
O = new /obj/structure/bed/nest(loc)
if("resin blob")
O = new /obj/item/stack/material/resin(loc)
if(O)
O.color = "#321D37"
return
/mob/living/carbon/human/proc/leap()
@@ -66,17 +66,17 @@
var/weeds_plasma_rate = 5 // Plasma regen on weeds.
has_limbs = list(
BP_TORSO = list("path" = /obj/item/organ/external/chest),
BP_GROIN = list("path" = /obj/item/organ/external/groin),
BP_HEAD = list("path" = /obj/item/organ/external/head/no_eyes),
BP_L_ARM = list("path" = /obj/item/organ/external/arm),
BP_R_ARM = list("path" = /obj/item/organ/external/arm/right),
BP_L_LEG = list("path" = /obj/item/organ/external/leg),
BP_R_LEG = list("path" = /obj/item/organ/external/leg/right),
BP_L_HAND = list("path" = /obj/item/organ/external/hand),
BP_R_HAND = list("path" = /obj/item/organ/external/hand/right),
BP_L_FOOT = list("path" = /obj/item/organ/external/foot),
BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right)
BP_TORSO = list("path" = /obj/item/organ/external/chest/unseverable/xeno),
BP_GROIN = list("path" = /obj/item/organ/external/groin/unseverable/xeno),
BP_HEAD = list("path" = /obj/item/organ/external/head/unseverable/xeno),
BP_L_ARM = list("path" = /obj/item/organ/external/arm/unseverable/xeno),
BP_R_ARM = list("path" = /obj/item/organ/external/arm/right/unseverable/xeno),
BP_L_LEG = list("path" = /obj/item/organ/external/leg/unseverable/xeno),
BP_R_LEG = list("path" = /obj/item/organ/external/leg/right/unseverable/xeno),
BP_L_HAND = list("path" = /obj/item/organ/external/hand/unseverable/xeno),
BP_R_HAND = list("path" = /obj/item/organ/external/hand/right/unseverable/xeno),
BP_L_FOOT = list("path" = /obj/item/organ/external/foot/unseverable/xeno),
BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right/unseverable/xeno)
)
/datum/species/xenos/get_bodytype()
@@ -136,7 +136,7 @@
H.adjustOxyLoss(-heal_rate)
H.adjustToxLoss(-heal_rate)
if (prob(5))
H << "<span class='alium'>You feel a soothing sensation come over you...</span>"
H << "<span class='alien'>You feel a soothing sensation come over you...</span>"
return 1
//next internal organs
@@ -144,7 +144,7 @@
if(I.damage > 0)
I.damage = max(I.damage - heal_rate, 0)
if (prob(5))
H << "<span class='alium'>You feel a soothing sensation within your [I.parent_organ]...</span>"
H << "<span class='alien'>You feel a soothing sensation within your [I.parent_organ]...</span>"
return 1
//next mend broken bones, approx 10 ticks each
@@ -152,7 +152,7 @@
if (E.status & ORGAN_BROKEN)
if (prob(mend_prob))
if (E.mend_fracture())
H << "<span class='alium'>You feel something mend itself inside your [E.name].</span>"
H << "<span class='alien'>You feel something mend itself inside your [E.name].</span>"
return 1
return 0
+3
View File
@@ -14,6 +14,7 @@ var/list/organ_cache = list()
var/vital // Lose a vital limb, die immediately.
var/damage = 0 // Current damage to the organ
var/robotic = 0
var/stapled_nerves = FALSE
// Reference data.
var/mob/living/carbon/human/owner // Current mob owning the organ.
@@ -431,6 +432,8 @@ var/list/organ_cache = list()
return 0
if(robotic && robotic < ORGAN_LIFELIKE) //Super fancy humanlike robotics probably have sensors, or something?
return 0
if(stapled_nerves)
return 0
return 1
/obj/item/organ/proc/handle_organ_mod_special(var/removed = FALSE) // Called when created, transplanted, and removed.
+1
View File
@@ -25,6 +25,7 @@
var/burn_dam = 0 // Actual current burn damage.
var/last_dam = -1 // used in healing/processing calculations.
var/spread_dam = 0
var/thick_skin = 0 // If a needle has a chance to fail to penetrate.
// Appearance vars.
var/nonsolid // Snowflake warning, reee. Used for slime limbs.
@@ -63,3 +63,9 @@
cannot_amputate = 1
cannot_break = 1
dislocated = -1
/obj/item/organ/external/head/no_eyes/indestructible
cannot_gib = 1
cannot_amputate = 1
cannot_break = 1
dislocated = -1
+76
View File
@@ -137,3 +137,79 @@
if(ishuman(owner))
H = owner
color = H.species.blood_color
// XENOMORPH EXTERNAL ORGANS
/obj/item/organ/external/chest/unseverable/xeno
cannot_gib = 1
cannot_amputate = 1
thick_skin = TRUE
/obj/item/organ/external/groin/unseverable/xeno
cannot_gib = 1
cannot_amputate = 1
encased = TRUE
thick_skin = TRUE
/obj/item/organ/external/arm/unseverable/xeno
cannot_gib = 1
cannot_amputate = 1
stapled_nerves = TRUE
encased = TRUE
thick_skin = TRUE
/obj/item/organ/external/arm/right/unseverable/xeno
cannot_gib = 1
cannot_amputate = 1
stapled_nerves = TRUE
encased = TRUE
thick_skin = TRUE
/obj/item/organ/external/leg/unseverable/xeno
cannot_gib = 1
cannot_amputate = 1
stapled_nerves = TRUE
encased = TRUE
thick_skin = TRUE
/obj/item/organ/external/leg/right/unseverable/xeno
cannot_gib = 1
cannot_amputate = 1
stapled_nerves = TRUE
encased = TRUE
thick_skin = TRUE
/obj/item/organ/external/foot/unseverable/xeno
cannot_gib = 1
cannot_amputate = 1
stapled_nerves = TRUE
encased = TRUE
thick_skin = TRUE
/obj/item/organ/external/foot/right/unseverable/xeno
cannot_gib = 1
cannot_amputate = 1
stapled_nerves = TRUE
encased = TRUE
thick_skin = TRUE
/obj/item/organ/external/hand/unseverable/xeno
cannot_gib = 1
cannot_amputate = 1
stapled_nerves = TRUE
encased = TRUE
thick_skin = TRUE
/obj/item/organ/external/hand/right/unseverable/xeno
cannot_gib = 1
cannot_amputate = 1
stapled_nerves = TRUE
encased = TRUE
thick_skin = TRUE
/obj/item/organ/external/head/unseverable/xeno
cannot_gib = 1
cannot_amputate = 1
thick_skin = TRUE
eye_icon = "blank_eyes"
@@ -183,8 +183,8 @@
if(H.wear_suit)
if(istype(H.wear_suit, /obj/item/clothing/suit/space))
injtime = injtime * 2
else if(!H.can_inject(user, 1))
return
if(!H.can_inject(user, 1))
return
else if(isliving(target))