This commit is contained in:
Seris02
2020-03-09 16:49:32 +08:00
1093 changed files with 386415 additions and 224664 deletions
+24 -36
View File
@@ -41,9 +41,9 @@
var/skin_tone = ""
var/body_gender = ""
var/species_id = ""
var/should_draw_citadel = FALSE
var/color_src
var/base_bp_icon //Overrides the icon being used for this limb. This is mainly for downstreams, implemented and maintained as a favor in return for implementing synths. And also because should_draw_* for icon overrides was pretty messy. You're welcome.
var/should_draw_gender = FALSE
var/should_draw_greyscale = FALSE
var/species_color = ""
var/mutation_color = ""
var/no_update = 0
@@ -256,7 +256,7 @@
disabled = new_disabled
owner.update_health_hud() //update the healthdoll
owner.update_body()
owner.update_canmove()
owner.update_mobility()
if(!disabled)
incoming_stam_mult = 1
return TRUE
@@ -283,9 +283,9 @@
if(change_icon_to_default)
if(status == BODYPART_ORGANIC)
icon = DEFAULT_BODYPART_ICON_ORGANIC
icon = base_bp_icon || DEFAULT_BODYPART_ICON_ORGANIC
else if(status == BODYPART_ROBOTIC)
icon = DEFAULT_BODYPART_ICON_ROBOTIC
icon = base_bp_icon || DEFAULT_BODYPART_ICON_ROBOTIC
if(owner)
owner.updatehealth()
@@ -313,7 +313,8 @@
species_id = "husk" //overrides species_id
dmg_overlay_type = "" //no damage overlay shown when husked
should_draw_gender = FALSE
should_draw_greyscale = FALSE
color_src = FALSE
base_bp_icon = DEFAULT_BODYPART_ICON
no_update = TRUE
body_markings = "husk" // reeee
aux_marking = "husk"
@@ -323,11 +324,11 @@
if(!animal_origin)
var/mob/living/carbon/human/H = C
should_draw_greyscale = FALSE
color_src = FALSE
var/datum/species/S = H.dna.species
base_bp_icon = S?.icon_limbs || DEFAULT_BODYPART_ICON
species_id = S.limbs_id
should_draw_citadel = S.should_draw_citadel // Citadel Addition
species_flags_list = H.dna.species.species_traits
//body marking memes
@@ -342,7 +343,7 @@
if(S.use_skintones)
skin_tone = H.skin_tone
should_draw_greyscale = TRUE
base_bp_icon = (base_bp_icon == DEFAULT_BODYPART_ICON) ? DEFAULT_BODYPART_ICON_ORGANIC : base_bp_icon
else
skin_tone = ""
@@ -354,9 +355,12 @@
species_color = S.fixed_mut_color
else
species_color = H.dna.features["mcolor"]
should_draw_greyscale = TRUE
base_bp_icon = (base_bp_icon == DEFAULT_BODYPART_ICON) ? DEFAULT_BODYPART_ICON_ORGANIC : base_bp_icon
else
species_color = ""
if(base_bp_icon != DEFAULT_BODYPART_ICON)
color_src = MUTCOLORS //TODO - Add color matrix support to base limbs
if("legs" in S.default_features)
if(body_zone == BODY_ZONE_L_LEG || body_zone == BODY_ZONE_R_LEG)
@@ -371,8 +375,8 @@
if(Smark)
body_markings_icon = Smark.icon
if(H.dna.features["mam_body_markings"] != "None")
body_markings = lowertext(H.dna.features["mam_body_markings"])
aux_marking = lowertext(H.dna.features["mam_body_markings"])
body_markings = Smark?.icon_state || lowertext(H.dna.features["mam_body_markings"])
aux_marking = Smark?.icon_state || lowertext(H.dna.features["mam_body_markings"])
else
body_markings = "plain"
aux_marking = "plain"
@@ -462,32 +466,16 @@
should_draw_gender = FALSE
if(is_organic_limb())
if(should_draw_greyscale)
limb.icon = 'icons/mob/human_parts_greyscale.dmi'
if(should_draw_gender)
limb.icon_state = "[species_id]_[body_zone]_[icon_gender]"
else if(use_digitigrade)
limb.icon = base_bp_icon || 'icons/mob/human_parts.dmi'
if(should_draw_gender)
limb.icon_state = "[species_id]_[body_zone]_[icon_gender]"
else if (use_digitigrade)
if(base_bp_icon == DEFAULT_BODYPART_ICON_ORGANIC) //Compatibility hack for the current iconset.
limb.icon_state = "[digitigrade_type]_[use_digitigrade]_[body_zone]"
else
limb.icon_state = "[species_id]_[body_zone]"
limb.icon_state = "[species_id]_[digitigrade_type]_[use_digitigrade]_[body_zone]"
else
limb.icon = 'icons/mob/human_parts.dmi'
if(should_draw_gender)
limb.icon_state = "[species_id]_[body_zone]_[icon_gender]"
else if(use_digitigrade)
limb.icon_state = "[species_id]_[digitigrade_type]_[use_digitigrade]_[body_zone]"
else
limb.icon_state = "[species_id]_[body_zone]"
// Citadel Start
if(should_draw_citadel)
limb.icon = 'modular_citadel/icons/mob/mutant_bodyparts.dmi'
if(should_draw_gender)
limb.icon_state = "[species_id]_[body_zone]_[icon_gender]"
else if(use_digitigrade)
limb.icon_state = "[species_id]_[digitigrade_type]_[use_digitigrade]_[body_zone]"
else
limb.icon_state = "[species_id]_[body_zone]"
limb.icon_state = "[species_id]_[body_zone]"
// Body markings
if(!isnull(body_markings))
@@ -555,7 +543,7 @@
. += marking
return
if(should_draw_greyscale)
if(color_src) //TODO - add color matrix support for base species limbs
var/draw_color = mutation_color || species_color || (skin_tone && skintone2hex(skin_tone))
if(draw_color)
limb.color = "#[draw_color]"
@@ -125,7 +125,7 @@
C.update_health_hud() //update the healthdoll
C.update_body()
C.update_hair()
C.update_canmove()
C.update_mobility()
if(!Tsec) // Tsec = null happens when a "dummy human" used for rendering icons on prefs screen gets its limbs replaced.
qdel(src)
@@ -299,7 +299,7 @@
C.update_body()
C.update_hair()
C.update_damage_overlays()
C.update_canmove()
C.update_mobility()
/obj/item/bodypart/head/attach_limb(mob/living/carbon/C, special)
+101 -52
View File
@@ -140,6 +140,88 @@
else
Retract()
/obj/item/organ/cyberimp/arm/medibeam
name = "integrated medical beamgun"
desc = "A cybernetic implant that allows the user to project a healing beam from their hand."
contents = newlist(/obj/item/gun/medbeam)
///////////////
//Tools Arms//
///////////////
/obj/item/organ/cyberimp/arm/toolset
name = "integrated toolset implant"
desc = "A stripped-down version of the engineering cyborg toolset, designed to be installed on subject's arm. Contains all necessary tools."
contents = newlist(/obj/item/screwdriver/cyborg, /obj/item/wrench/cyborg, /obj/item/weldingtool/largetank/cyborg,
/obj/item/crowbar/cyborg, /obj/item/wirecutters/cyborg, /obj/item/multitool/cyborg)
/obj/item/organ/cyberimp/arm/toolset/emag_act()
. = ..()
if(obj_flags & EMAGGED)
return
obj_flags |= EMAGGED
to_chat(usr, "<span class='notice'>You unlock [src]'s integrated knife!</span>")
items_list += new /obj/item/kitchen/knife/combat/cyborg(src)
return TRUE
/obj/item/organ/cyberimp/arm/surgery
name = "surgical toolset implant"
desc = "A set of surgical tools hidden behind a concealed panel on the user's arm."
contents = newlist(/obj/item/retractor/augment, /obj/item/hemostat/augment, /obj/item/cautery/augment, /obj/item/surgicaldrill/augment, /obj/item/scalpel/augment, /obj/item/circular_saw/augment, /obj/item/surgical_drapes)
/obj/item/organ/cyberimp/arm/surgery/emag_act()
. = ..()
if(obj_flags & EMAGGED)
return
obj_flags |= EMAGGED
to_chat(usr, "<span class='notice'>You unlock [src]'s integrated knife!</span>")
items_list += new /obj/item/kitchen/knife/combat/cyborg(src)
return TRUE
/obj/item/organ/cyberimp/arm/janitor
name = "janitorial tools implant"
desc = "A set of janitorial tools on the user's arm."
contents = newlist(/obj/item/lightreplacer, /obj/item/holosign_creator, /obj/item/soap/nanotrasen, /obj/item/reagent_containers/spray/cyborg_drying, /obj/item/mop/advanced, /obj/item/paint/paint_remover, /obj/item/reagent_containers/glass/beaker/large, /obj/item/reagent_containers/spray/cleaner) //Beaker if for refilling sprays
/obj/item/organ/cyberimp/arm/janitor/emag_act()
. = ..()
if(obj_flags & EMAGGED)
return
obj_flags |= EMAGGED
to_chat(usr, "<span class='notice'>You unlock [src]'s integrated deluxe cleaning supplies!</span>")
items_list += new /obj/item/soap/syndie(src) //We add not replace.
items_list += new /obj/item/reagent_containers/spray/cyborg_lube(src)
return TRUE
/obj/item/organ/cyberimp/arm/service
name = "service toolset implant"
desc = "A set of miscellaneous gadgets hidden behind a concealed panel on the user's arm."
contents = newlist(/obj/item/extinguisher/mini, /obj/item/kitchen/knife/combat/bone/plastic, /obj/item/hand_labeler, /obj/item/pen, /obj/item/reagent_containers/dropper, /obj/item/kitchen/rollingpin, /obj/item/reagent_containers/glass/beaker/large, /obj/item/reagent_containers/syringe,/obj/item/reagent_containers/food/drinks/shaker, /obj/item/radio/off, /obj/item/camera, /obj/item/modular_computer/tablet/preset/cargo)
/obj/item/organ/cyberimp/arm/service/emag_act()
. = ..()
if(obj_flags & EMAGGED)
return
obj_flags |= EMAGGED
to_chat(usr, "<span class='notice'>You unlock [src]'s integrated real knife!</span>")
items_list += new /obj/item/kitchen/knife/combat/cyborg(src)
return TRUE
///////////////
//Combat Arms//
///////////////
/obj/item/organ/cyberimp/arm/gun/laser
name = "arm-mounted laser implant"
desc = "A variant of the arm cannon implant that fires lethal laser beams. The cannon emerges from the subject's arm and remains inside when not in use."
icon_state = "arm_laser"
contents = newlist(/obj/item/gun/energy/laser/mounted)
/obj/item/organ/cyberimp/arm/gun/taser
name = "arm-mounted taser implant"
desc = "A variant of the arm cannon implant that fires electrodes and disabler shots. The cannon emerges from the subject's arm and remains inside when not in use."
icon_state = "arm_taser"
contents = newlist(/obj/item/gun/energy/e_gun/advtaser/mounted)
/obj/item/organ/cyberimp/arm/gun/emp_act(severity)
. = ..()
@@ -156,54 +238,6 @@
crit_fail = 1
organ_flags |= ORGAN_FAILING
/obj/item/organ/cyberimp/arm/gun/laser
name = "arm-mounted laser implant"
desc = "A variant of the arm cannon implant that fires lethal laser beams. The cannon emerges from the subject's arm and remains inside when not in use."
icon_state = "arm_laser"
contents = newlist(/obj/item/gun/energy/laser/mounted)
/obj/item/organ/cyberimp/arm/gun/laser/l
zone = BODY_ZONE_L_ARM
/obj/item/organ/cyberimp/arm/gun/taser
name = "arm-mounted taser implant"
desc = "A variant of the arm cannon implant that fires electrodes and disabler shots. The cannon emerges from the subject's arm and remains inside when not in use."
icon_state = "arm_taser"
contents = newlist(/obj/item/gun/energy/e_gun/advtaser/mounted)
/obj/item/organ/cyberimp/arm/gun/taser/l
zone = BODY_ZONE_L_ARM
/obj/item/organ/cyberimp/arm/toolset
name = "integrated toolset implant"
desc = "A stripped-down version of the engineering cyborg toolset, designed to be installed on subject's arm. Contains all necessary tools."
contents = newlist(/obj/item/screwdriver/cyborg, /obj/item/wrench/cyborg, /obj/item/weldingtool/largetank/cyborg,
/obj/item/crowbar/cyborg, /obj/item/wirecutters/cyborg, /obj/item/multitool/cyborg)
/obj/item/organ/cyberimp/arm/toolset/l
zone = BODY_ZONE_L_ARM
/obj/item/organ/cyberimp/arm/toolset/emag_act()
. = ..()
if(locate(/obj/item/kitchen/knife/combat/cyborg) in items_list)
return
to_chat(usr, "<span class='notice'>You unlock [src]'s integrated knife!</span>")
items_list += new /obj/item/kitchen/knife/combat/cyborg(src)
return TRUE
/obj/item/organ/cyberimp/arm/esword
name = "arm-mounted energy blade"
desc = "An illegal and highly dangerous cybernetic implant that can project a deadly blade of concentrated energy."
contents = newlist(/obj/item/melee/transforming/energy/blade/hardlight)
/obj/item/organ/cyberimp/arm/medibeam
name = "integrated medical beamgun"
desc = "A cybernetic implant that allows the user to project a healing beam from their hand."
contents = newlist(/obj/item/gun/medbeam)
/obj/item/organ/cyberimp/arm/flash
name = "integrated high-intensity photon projector" //Why not
desc = "An integrated projector mounted onto a user's arm that is able to be used as a powerful flash."
@@ -231,7 +265,22 @@
var/obj/item/assembly/flash/armimplant/F = locate(/obj/item/assembly/flash/armimplant) in items_list
F.I = src
/obj/item/organ/cyberimp/arm/surgery
name = "surgical toolset implant"
desc = "A set of surgical tools hidden behind a concealed panel on the user's arm."
contents = newlist(/obj/item/retractor/augment, /obj/item/hemostat/augment, /obj/item/cautery/augment, /obj/item/surgicaldrill/augment, /obj/item/scalpel/augment, /obj/item/circular_saw/augment, /obj/item/surgical_drapes)
/obj/item/organ/cyberimp/arm/esword
name = "arm-mounted energy blade"
desc = "An illegal and highly dangerous cybernetic implant that can project a deadly blade of concentrated energy."
contents = newlist(/obj/item/melee/transforming/energy/blade/hardlight)
/obj/item/organ/cyberimp/arm/shield
name = "arm-mounted riot shield"
desc = "A deployable riot shield to help deal with civil unrest."
contents = newlist(/obj/item/shield/riot/implant)
/obj/item/organ/cyberimp/arm/shield/emag_act()
. = ..()
if(obj_flags & EMAGGED)
return
obj_flags |= EMAGGED
to_chat(usr, "<span class='notice'>You unlock [src]'s high-power flash!</span>")
var/obj/item/assembly/flash/armimplant/F = new(src)
items_list += F
F.I = src
@@ -105,11 +105,8 @@
..()
if(crit_fail || !(organ_flags & ORGAN_FAILING))
return
owner.adjustStaminaLoss(-3.5) //Citadel edit, makes it more useful in Stamina based combat
if(owner.AmountStun() > STUN_SET_AMOUNT)
owner.SetStun(STUN_SET_AMOUNT)
if(owner.AmountKnockdown() > STUN_SET_AMOUNT)
owner.SetKnockdown(STUN_SET_AMOUNT)
owner.adjustStaminaLoss(-3.5, FALSE) //Citadel edit, makes it more useful in Stamina based combat
owner.HealAllImmobilityUpTo(STUN_SET_AMOUNT)
/obj/item/organ/cyberimp/brain/anti_stun/emp_act(severity)
. = ..()
+4
View File
@@ -377,3 +377,7 @@
name = "insect eyes"
desc = "These eyes seem to have increased sensitivity to bright light, with no improvement to low light vision."
flash_protect = -1
/obj/item/organ/eyes/ipc
name = "ipc eyes"
icon_state = "cybernetic_eyeballs"
+1 -2
View File
@@ -222,9 +222,8 @@ obj/item/organ/heart/cybernetic/upgraded/on_life()
/obj/item/organ/heart/ipc
name = "IPC heart"
desc = "An electronic pump that regulates hydraulic functions, they have an auto-restart after EMPs."
desc = "An electronic pump that regulates hydraulic functions, the electronics have EMP shielding."
icon_state = "heart-c"
organ_flags = ORGAN_SYNTHETIC
/obj/item/organ/heart/freedom
name = "heart of freedom"
+4
View File
@@ -95,6 +95,10 @@
icon_state = "liver-p"
desc = "A large crystal that is somehow capable of metabolizing chemicals, these are found in plasmamen."
/obj/item/organ/liver/ipc
name = "reagent processing liver"
icon_state = "liver-c"
/obj/item/organ/liver/cybernetic
name = "cybernetic liver"
icon_state = "liver-c"
+7 -2
View File
@@ -2,6 +2,7 @@
/obj/item/organ/lungs
name = "lungs"
desc = "Looking at them makes you start manual breathing."
icon_state = "lungs"
zone = BODY_ZONE_CHEST
slot = ORGAN_SLOT_LUNGS
@@ -349,7 +350,7 @@
//Miasma sickness
if(prob(0.05 * miasma_pp))
var/datum/disease/advance/miasma_disease = new /datum/disease/advance/random(2,3)
var/datum/disease/advance/miasma_disease = new /datum/disease/advance/random(TRUE, 2,3)
miasma_disease.name = "Unknown"
miasma_disease.try_infect(owner)
@@ -462,6 +463,10 @@
S.reagents.add_reagent(/datum/reagent/medicine/salbutamol, 5)
return S
/obj/item/organ/lungs/ipc
name = "ipc lungs"
icon_state = "lungs-c"
/obj/item/organ/lungs/plasmaman
name = "plasma filter"
desc = "A spongy rib-shaped mass for filtering plasma from the air."
@@ -543,4 +548,4 @@
/obj/item/organ/lungs/yamerol/on_life()
..()
damage += 2 //Yamerol lungs are temporary
damage += 2 //Yamerol lungs are temporary
+4
View File
@@ -96,3 +96,7 @@
name = "digestive crystal"
icon_state = "stomach-p"
desc = "A strange crystal that is responsible for metabolizing the unseen energy force that feeds plasmamen."
/obj/item/organ/stomach/ipc
name = "ipc stomach"
icon_state = "stomach-ipc"
+8 -10
View File
@@ -272,7 +272,7 @@
cooldown = COOLDOWN_STUN
for(var/V in listeners)
var/mob/living/L = V
L.Knockdown(60 * power_multiplier)
L.DefaultCombatKnockdown(60 * power_multiplier)
//SLEEP
else if((findtext(message, sleep_words)))
@@ -492,10 +492,10 @@
for(var/V in listeners)
var/mob/living/L = V
if(L.resting)
L.lay_down() //aka get up
L.SetStun(0)
L.SetKnockdown(0)
L.SetUnconscious(0) //i said get up i don't care if you're being tased
L.set_resting(FALSE, FALSE, FALSE)
L.SetAllImmobility(0, FALSE)
L.SetUnconscious(0, FALSE) //i said get up i don't care if you're being tased
L.update_mobility()
//SIT
else if((findtext(message, sit_words)))
@@ -1205,7 +1205,7 @@
var/datum/status_effect/chem/enthrall/E = L.has_status_effect(/datum/status_effect/chem/enthrall)
switch(E.phase)
if(2 to INFINITY)
L.Knockdown(30 * power_multiplier * E.phase)
L.DefaultCombatKnockdown(30 * power_multiplier * E.phase)
E.cooldown += 8
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "<span class='notice'>You suddenly drop to the ground!</b></span>"), 5)
to_chat(user, "<span class='notice'><i>You encourage [L] to drop down to the ground.</i></span>")
@@ -1422,10 +1422,8 @@
var/datum/status_effect/chem/enthrall/E = L.has_status_effect(/datum/status_effect/chem/enthrall)
switch(E.phase)
if(3 to INFINITY)//Tier 3 only
if(L.resting)
L.lay_down() //aka get up
L.SetStun(0)
L.SetKnockdown(0)
L.set_resting(FALSE, TRUE, FALSE)
L.SetAllImmobility(0)
L.SetUnconscious(0) //i said get up i don't care if you're being tased
E.cooldown += 10 //This could be really strong
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "<span class='notice'>You jump to your feet from sheer willpower!</b></span>"), 5)