mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-26 22:50:26 +01:00
Moves species brutemod and burnmod to be handled by bodyparts (#76060)
## About The Pull Request Title. Brute modifier and burn modifier are now handled by bodyparts. Cold modifier and heat modifier are still handled by species, though mmmmmaybe I'll make a PR addressing those later, yes? ## Why It's Good For The Game Medical abominations will have even more consistent behavior! Also bloating the species datum less is kinda good. ## Changelog 🆑 refactor: Species brute and burn damage modifiers are now handled by bodyparts, instead of being universal. Go ham at the surgical bay. /🆑
This commit is contained in:
@@ -488,6 +488,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
|
||||
#define TRAIT_HATED_BY_DOGS "hated_by_dogs"
|
||||
/// Mobs with this trait will not be immobilized when held up
|
||||
#define TRAIT_NOFEAR_HOLDUPS "no_fear_holdup"
|
||||
/// Mob has gotten an armor buff from adamantine extract
|
||||
#define TRAIT_ADAMANTINE_EXTRACT_ARMOR "adamantine_extract_armor"
|
||||
/// Mobs with this trait won't be able to dual wield guns.
|
||||
#define TRAIT_NO_GUN_AKIMBO "no_gun_akimbo"
|
||||
|
||||
@@ -950,8 +952,10 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
|
||||
#define BEAUTY_ELEMENT_TRAIT "beauty_element"
|
||||
#define MOOD_DATUM_TRAIT "mood_datum"
|
||||
#define DRONE_SHY_TRAIT "drone_shy"
|
||||
/// Pacifism trait given by stabilized light pink extracts.
|
||||
#define STABILIZED_LIGHT_PINK_TRAIT "stabilized_light_pink"
|
||||
/// Trait given by stabilized light pink extracts
|
||||
#define STABILIZED_LIGHT_PINK_EXTRACT_TRAIT "stabilized_light_pink"
|
||||
/// Trait given by adamantine extracts
|
||||
#define ADAMANTINE_EXTRACT_TRAIT "adamantine_extract"
|
||||
/// Given by the multiple_lives component to the previous body of the mob upon death.
|
||||
#define EXPIRED_LIFE_TRAIT "expired_life"
|
||||
/// Trait given to an atom/movable when they orbit something.
|
||||
|
||||
+2
-2
@@ -832,8 +832,8 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block())
|
||||
if(3)
|
||||
to_chat(src, span_notice("Oh, I actually feel quite alright!"))
|
||||
if(4)
|
||||
to_chat(src, span_notice("Oh, I actually feel quite alright!")) //you thought
|
||||
physiology.damage_resistance = -20000
|
||||
to_chat(src, span_notice("Oh, I actually feel quite alright!"))
|
||||
physiology.damage_resistance -= 20000 //you thought
|
||||
if(5)
|
||||
to_chat(src, span_notice("Oh, I actually feel quite alright!"))
|
||||
reagents.add_reagent(/datum/reagent/aslimetoxin, 10)
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
name = "Nightmare"
|
||||
id = SPECIES_NIGHTMARE
|
||||
examine_limb_id = SPECIES_SHADOW
|
||||
burnmod = 1.5
|
||||
changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE
|
||||
no_equip_flags = ITEM_SLOT_MASK | ITEM_SLOT_OCLOTHING | ITEM_SLOT_GLOVES | ITEM_SLOT_FEET | ITEM_SLOT_ICLOTHING | ITEM_SLOT_SUITSTORE
|
||||
species_traits = list(NO_UNDERWEAR,NO_DNA_COPY,NOTRANSSTING,NOEYESPRITES)
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
setup_mood()
|
||||
// This needs to be called very very early in human init (before organs / species are created at the minimum)
|
||||
setup_organless_effects()
|
||||
// Physiology needs to be created before species, as some species modify physiology
|
||||
setup_physiology()
|
||||
|
||||
create_dna()
|
||||
dna.species.create_fresh_body(src)
|
||||
@@ -17,8 +19,6 @@
|
||||
|
||||
prepare_huds() //Prevents a nasty runtime on human init
|
||||
|
||||
physiology = new()
|
||||
|
||||
. = ..()
|
||||
|
||||
RegisterSignal(src, COMSIG_COMPONENT_CLEAN_FACE_ACT, PROC_REF(clean_face))
|
||||
@@ -33,6 +33,9 @@
|
||||
AddElement(/datum/element/connect_loc, loc_connections)
|
||||
GLOB.human_list += src
|
||||
|
||||
/mob/living/carbon/human/proc/setup_physiology()
|
||||
physiology = new()
|
||||
|
||||
/mob/living/carbon/human/proc/setup_mood()
|
||||
if (CONFIG_GET(flag/disable_human_mood))
|
||||
return
|
||||
@@ -56,7 +59,8 @@
|
||||
|
||||
/mob/living/carbon/human/Destroy()
|
||||
QDEL_NULL(physiology)
|
||||
QDEL_LIST(bioware)
|
||||
if(biowares)
|
||||
QDEL_LIST(biowares)
|
||||
GLOB.human_list -= src
|
||||
|
||||
if (mob_mood)
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
|
||||
var/datum/physiology/physiology
|
||||
|
||||
var/list/datum/bioware = list()
|
||||
var/list/datum/bioware/biowares
|
||||
|
||||
/// What types of mobs are allowed to ride/buckle to this mob
|
||||
var/static/list/can_ride_typecache = typecacheof(list(/mob/living/carbon/human, /mob/living/simple_animal/slime, /mob/living/simple_animal/parrot))
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
//Stores several modifiers in a way that isn't cleared by changing species
|
||||
|
||||
/datum/physiology
|
||||
var/brute_mod = 1 // % of brute damage taken from all sources
|
||||
var/burn_mod = 1 // % of burn damage taken from all sources
|
||||
|
||||
@@ -33,8 +33,6 @@ GLOBAL_LIST_EMPTY(features_by_species)
|
||||
///The alpha used by the hair. 255 is completely solid, 0 is invisible.
|
||||
var/hair_alpha = 255
|
||||
|
||||
///Examine text when the person has cellular damage.
|
||||
var/cellular_damage_desc = DEFAULT_CLONE_EXAMINE_TEXT
|
||||
///This is used for children, it will determine their default limb ID for use of examine. See [/mob/living/carbon/human/proc/examine].
|
||||
var/examine_limb_id
|
||||
///Never, Optional, or Forced digi legs?
|
||||
@@ -106,12 +104,11 @@ GLOBAL_LIST_EMPTY(features_by_species)
|
||||
|
||||
///Multiplier for the race's speed. Positive numbers make it move slower, negative numbers make it move faster.
|
||||
var/speedmod = 0
|
||||
///Percentage modifier for overall defense of the race, or less defense, if it's negative.
|
||||
var/armor = 0
|
||||
///multiplier for brute damage
|
||||
var/brutemod = 1
|
||||
///multiplier for burn damage
|
||||
var/burnmod = 1
|
||||
/**
|
||||
* Percentage modifier for overall defense of the race, or less defense, if it's negative
|
||||
* THIS MODIFIES ALL DAMAGE TYPES.
|
||||
**/
|
||||
var/damage_modifier = 0
|
||||
///multiplier for damage from cold temperature
|
||||
var/coldmod = 1
|
||||
///multiplier for damage from hot temperature
|
||||
@@ -447,7 +444,7 @@ GLOBAL_LIST_EMPTY(features_by_species)
|
||||
* * old_species - The species that the carbon used to be before becoming this race, used for regenerating organs.
|
||||
* * pref_load - Preferences to be loaded from character setup, loads in preferred mutant things like bodyparts, digilegs, skin color, etc.
|
||||
*/
|
||||
/datum/species/proc/on_species_gain(mob/living/carbon/C, datum/species/old_species, pref_load)
|
||||
/datum/species/proc/on_species_gain(mob/living/carbon/human/C, datum/species/old_species, pref_load)
|
||||
SHOULD_CALL_PARENT(TRUE)
|
||||
// Drop the items the new species can't wear
|
||||
if((AGENDER in species_traits))
|
||||
@@ -461,7 +458,7 @@ GLOBAL_LIST_EMPTY(features_by_species)
|
||||
C.mob_biotypes = inherent_biotypes
|
||||
C.mob_respiration_type = inherent_respiration_type
|
||||
|
||||
if (old_species.type != type)
|
||||
if(old_species.type != type)
|
||||
replace_body(C, src)
|
||||
|
||||
regenerate_organs(C, old_species, visual_only = C.visual_only_organs)
|
||||
@@ -1376,7 +1373,7 @@ GLOBAL_LIST_EMPTY(features_by_species)
|
||||
|
||||
/datum/species/proc/apply_damage(damage, damagetype = BRUTE, def_zone = null, blocked, mob/living/carbon/human/H, forced = FALSE, spread_damage = FALSE, wound_bonus = 0, bare_wound_bonus = 0, sharpness = NONE, attack_direction = null, attacking_item)
|
||||
SEND_SIGNAL(H, COMSIG_MOB_APPLY_DAMAGE, damage, damagetype, def_zone, blocked, wound_bonus, bare_wound_bonus, sharpness, attack_direction, attacking_item)
|
||||
var/hit_percent = (100-(blocked+armor))/100
|
||||
var/hit_percent = (100-(damage_modifier+blocked))/100
|
||||
hit_percent = (hit_percent * (100-H.physiology.damage_resistance))/100
|
||||
if(!damage || (!forced && hit_percent <= 0))
|
||||
return 0
|
||||
@@ -1395,7 +1392,7 @@ GLOBAL_LIST_EMPTY(features_by_species)
|
||||
switch(damagetype)
|
||||
if(BRUTE)
|
||||
H.damageoverlaytemp = 20
|
||||
var/damage_amount = forced ? damage : damage * hit_percent * brutemod * H.physiology.brute_mod
|
||||
var/damage_amount = forced ? damage : damage * hit_percent * H.physiology.brute_mod
|
||||
if(BP)
|
||||
if(BP.receive_damage(damage_amount, 0, wound_bonus = wound_bonus, bare_wound_bonus = bare_wound_bonus, sharpness = sharpness, attack_direction = attack_direction, damage_source = attacking_item))
|
||||
H.update_damage_overlays()
|
||||
@@ -1403,7 +1400,7 @@ GLOBAL_LIST_EMPTY(features_by_species)
|
||||
H.adjustBruteLoss(damage_amount)
|
||||
if(BURN)
|
||||
H.damageoverlaytemp = 20
|
||||
var/damage_amount = forced ? damage : damage * hit_percent * burnmod * H.physiology.burn_mod
|
||||
var/damage_amount = forced ? damage : damage * hit_percent * H.physiology.burn_mod
|
||||
if(BP)
|
||||
if(BP.receive_damage(0, damage_amount, wound_bonus = wound_bonus, bare_wound_bonus = bare_wound_bonus, sharpness = sharpness, attack_direction = attack_direction, damage_source = attacking_item))
|
||||
H.update_damage_overlays()
|
||||
@@ -1972,10 +1969,13 @@ GLOBAL_LIST_EMPTY(features_by_species)
|
||||
* Returns a list containing perks, or an empty list.
|
||||
*/
|
||||
/datum/species/proc/create_pref_damage_perks()
|
||||
// We use the chest to figure out brute and burn mod perks
|
||||
var/obj/item/bodypart/chest/fake_chest = bodypart_overrides[BODY_ZONE_CHEST]
|
||||
|
||||
var/list/to_add = list()
|
||||
|
||||
// Brute related
|
||||
if(brutemod > 1)
|
||||
if(initial(fake_chest.brute_modifier) > 1)
|
||||
to_add += list(list(
|
||||
SPECIES_PERK_TYPE = SPECIES_NEGATIVE_PERK,
|
||||
SPECIES_PERK_ICON = "band-aid",
|
||||
@@ -1983,29 +1983,29 @@ GLOBAL_LIST_EMPTY(features_by_species)
|
||||
SPECIES_PERK_DESC = "[plural_form] are weak to brute damage.",
|
||||
))
|
||||
|
||||
if(brutemod < 1)
|
||||
if(initial(fake_chest.brute_modifier) < 1)
|
||||
to_add += list(list(
|
||||
SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK,
|
||||
SPECIES_PERK_ICON = "shield-alt",
|
||||
SPECIES_PERK_NAME = "Brutal Resilience",
|
||||
SPECIES_PERK_DESC = "[plural_form] are resilient to bruising and brute damage.",
|
||||
SPECIES_PERK_DESC = "[plural_form] are resilient to brute damage.",
|
||||
))
|
||||
|
||||
// Burn related
|
||||
if(burnmod > 1)
|
||||
if(initial(fake_chest.burn_modifier) > 1)
|
||||
to_add += list(list(
|
||||
SPECIES_PERK_TYPE = SPECIES_NEGATIVE_PERK,
|
||||
SPECIES_PERK_ICON = "burn",
|
||||
SPECIES_PERK_NAME = "Fire Weakness",
|
||||
SPECIES_PERK_DESC = "[plural_form] are weak to fire and burn damage.",
|
||||
SPECIES_PERK_NAME = "Burn Weakness",
|
||||
SPECIES_PERK_DESC = "[plural_form] are weak to burn damage.",
|
||||
))
|
||||
|
||||
if(burnmod < 1)
|
||||
if(initial(fake_chest.burn_modifier) < 1)
|
||||
to_add += list(list(
|
||||
SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK,
|
||||
SPECIES_PERK_ICON = "shield-alt",
|
||||
SPECIES_PERK_NAME = "Fire Resilience",
|
||||
SPECIES_PERK_DESC = "[plural_form] are resilient to flames, and burn damage.",
|
||||
SPECIES_PERK_NAME = "Burn Resilience",
|
||||
SPECIES_PERK_DESC = "[plural_form] are resilient to burn damage.",
|
||||
))
|
||||
|
||||
// Shock damage
|
||||
@@ -2296,15 +2296,16 @@ GLOBAL_LIST_EMPTY(features_by_species)
|
||||
new_species ||= target.dna.species //If no new species is provided, assume its src.
|
||||
//Note for future: Potentionally add a new C.dna.species() to build a template species for more accurate limb replacement
|
||||
|
||||
var/list/final_bodypart_overrides = new_species.bodypart_overrides.Copy()
|
||||
if((new_species.digitigrade_customization == DIGITIGRADE_OPTIONAL && target.dna.features["legs"] == DIGITIGRADE_LEGS) || new_species.digitigrade_customization == DIGITIGRADE_FORCED)
|
||||
new_species.bodypart_overrides[BODY_ZONE_R_LEG] = /obj/item/bodypart/leg/right/digitigrade
|
||||
new_species.bodypart_overrides[BODY_ZONE_L_LEG] = /obj/item/bodypart/leg/left/digitigrade
|
||||
final_bodypart_overrides[BODY_ZONE_R_LEG] = /obj/item/bodypart/leg/right/digitigrade
|
||||
final_bodypart_overrides[BODY_ZONE_L_LEG] = /obj/item/bodypart/leg/left/digitigrade
|
||||
|
||||
for(var/obj/item/bodypart/old_part as anything in target.bodyparts)
|
||||
if((old_part.change_exempt_flags & BP_BLOCK_CHANGE_SPECIES) || (old_part.bodypart_flags & BODYPART_IMPLANTED))
|
||||
continue
|
||||
|
||||
var/path = new_species.bodypart_overrides?[old_part.body_zone]
|
||||
var/path = final_bodypart_overrides?[old_part.body_zone]
|
||||
var/obj/item/bodypart/new_part
|
||||
if(path)
|
||||
new_part = new path()
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
exotic_blood = /datum/reagent/consumable/liquidelectricity //Liquid Electricity. fuck you think of something better gamer
|
||||
exotic_bloodtype = "LE"
|
||||
siemens_coeff = 0.5 //They thrive on energy
|
||||
brutemod = 1.25 //They're weak to punches
|
||||
payday_modifier = 0.75
|
||||
species_traits = list(
|
||||
DYNCOLORS,
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
mutantlungs = null
|
||||
inherent_biotypes = MOB_HUMANOID|MOB_MINERAL
|
||||
liked_food = STONE
|
||||
armor = 10
|
||||
damage_modifier = 10 //golem is stronk
|
||||
payday_modifier = 0.75
|
||||
siemens_coeff = 0
|
||||
no_equip_flags = ITEM_SLOT_MASK | ITEM_SLOT_OCLOTHING | ITEM_SLOT_GLOVES | ITEM_SLOT_FEET | ITEM_SLOT_ICLOTHING | ITEM_SLOT_SUITSTORE
|
||||
@@ -98,7 +98,7 @@
|
||||
|
||||
/// Remove nutrient value from non-mineral food, wish this was on an organ and not species but such is life
|
||||
/datum/species/golem/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H, delta_time, times_fired)
|
||||
if (istype(chem, /datum/reagent/consumable) && !istype(chem, /datum/reagent/consumable/nutriment/mineral))
|
||||
if(istype(chem, /datum/reagent/consumable) && !istype(chem, /datum/reagent/consumable/nutriment/mineral))
|
||||
var/datum/reagent/consumable/yummy_chem = chem
|
||||
yummy_chem.nutriment_factor = 0
|
||||
return ..()
|
||||
|
||||
@@ -30,7 +30,6 @@
|
||||
toxic_food = NONE
|
||||
coldmod = 6 // = 3x cold damage
|
||||
heatmod = 0.5 // = 1/4x heat damage
|
||||
burnmod = 0.5 // = 1/2x generic burn damage
|
||||
payday_modifier = 0.75
|
||||
changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT
|
||||
inherent_factions = list(FACTION_SLIME)
|
||||
|
||||
@@ -178,9 +178,9 @@ Lizard subspecies: SILVER SCALED
|
||||
TRAIT_WINE_TASTER,
|
||||
)
|
||||
mutantlungs = null
|
||||
damage_modifier = 10 //very light silvery scales soften blows
|
||||
species_language_holder = /datum/language_holder/lizard/silver
|
||||
mutanttongue = /obj/item/organ/internal/tongue/lizard/silver
|
||||
armor = 10 //very light silvery scales soften blows
|
||||
changesource_flags = MIRROR_BADMIN | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN
|
||||
examine_limb_id = SPECIES_LIZARD
|
||||
///stored mutcolor for when we turn back off of a silverscale.
|
||||
@@ -190,22 +190,19 @@ Lizard subspecies: SILVER SCALED
|
||||
///See above
|
||||
var/old_eye_color_right
|
||||
|
||||
/datum/species/lizard/silverscale/on_species_gain(mob/living/carbon/new_silverscale, datum/species/old_species, pref_load)
|
||||
var/mob/living/carbon/human/silverscale = new_silverscale
|
||||
/datum/species/lizard/silverscale/on_species_gain(mob/living/carbon/human/new_silverscale, datum/species/old_species, pref_load)
|
||||
old_mutcolor = new_silverscale.dna.features["mcolor"]
|
||||
old_eye_color_left = silverscale.eye_color_left
|
||||
old_eye_color_right = silverscale.eye_color_right
|
||||
old_eye_color_left = new_silverscale.eye_color_left
|
||||
old_eye_color_right = new_silverscale.eye_color_right
|
||||
new_silverscale.dna.features["mcolor"] = "#eeeeee"
|
||||
silverscale.eye_color_left = "#0000a0"
|
||||
silverscale.eye_color_right = "#0000a0"
|
||||
..()
|
||||
silverscale.add_filter("silver_glint", 2, list("type" = "outline", "color" = "#ffffff63", "size" = 2))
|
||||
new_silverscale.eye_color_left = "#0000a0"
|
||||
new_silverscale.eye_color_right = "#0000a0"
|
||||
. = ..()
|
||||
new_silverscale.add_filter("silver_glint", 2, list("type" = "outline", "color" = "#ffffff63", "size" = 2))
|
||||
|
||||
/datum/species/lizard/silverscale/on_species_loss(mob/living/carbon/old_silverscale, datum/species/new_species, pref_load)
|
||||
var/mob/living/carbon/human/was_silverscale = old_silverscale
|
||||
/datum/species/lizard/silverscale/on_species_loss(mob/living/carbon/human/was_silverscale, datum/species/new_species, pref_load)
|
||||
was_silverscale.dna.features["mcolor"] = old_mutcolor
|
||||
was_silverscale.eye_color_left = old_eye_color_left
|
||||
was_silverscale.eye_color_right = old_eye_color_right
|
||||
|
||||
was_silverscale.remove_filter("silver_glint")
|
||||
..()
|
||||
return ..()
|
||||
|
||||
@@ -22,7 +22,6 @@
|
||||
|
||||
no_equip_flags = ITEM_SLOT_MASK | ITEM_SLOT_OCLOTHING | ITEM_SLOT_GLOVES | ITEM_SLOT_FEET | ITEM_SLOT_ICLOTHING
|
||||
|
||||
burnmod = 1.25
|
||||
heatmod = 1.5
|
||||
|
||||
mutanttongue = /obj/item/organ/internal/tongue/mush
|
||||
|
||||
@@ -25,9 +25,7 @@
|
||||
mutantstomach = /obj/item/organ/internal/stomach/bone/plasmaman
|
||||
mutantappendix = null
|
||||
mutantheart = null
|
||||
burnmod = 1.5
|
||||
heatmod = 1.5
|
||||
brutemod = 1.5
|
||||
payday_modifier = 0.75
|
||||
breathid = GAS_PLASMA
|
||||
disliked_food = FRUIT | CLOTH
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
inherent_biotypes = MOB_ORGANIC | MOB_HUMANOID | MOB_PLANT
|
||||
inherent_factions = list(FACTION_PLANTS, FACTION_VINES)
|
||||
|
||||
burnmod = 1.25
|
||||
heatmod = 1.5
|
||||
payday_modifier = 0.75
|
||||
meat = /obj/item/food/meat/slab/human/mutant/plant
|
||||
|
||||
@@ -10,7 +10,6 @@
|
||||
)
|
||||
|
||||
coldmod = 0.5 //snails only come out when its cold and wet
|
||||
burnmod = 2
|
||||
speedmod = 6
|
||||
siemens_coeff = 2 //snails are mostly water
|
||||
changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | RACE_SWAP
|
||||
|
||||
@@ -88,8 +88,8 @@
|
||||
name = "Infectious Zombie"
|
||||
id = SPECIES_ZOMBIE_INFECTIOUS
|
||||
examine_limb_id = SPECIES_ZOMBIE
|
||||
armor = 20 // 120 damage to KO a zombie, which kills it
|
||||
speedmod = 1.6
|
||||
damage_modifier = 20 // 120 damage to KO a zombie, which kills it
|
||||
mutanteyes = /obj/item/organ/internal/eyes/zombie
|
||||
mutantbrain = /obj/item/organ/internal/brain/zombie
|
||||
mutanttongue = /obj/item/organ/internal/tongue/zombie
|
||||
@@ -120,13 +120,13 @@
|
||||
TRAIT_STABLELIVER, // Not necessary but for consistency with above
|
||||
)
|
||||
|
||||
/datum/species/zombie/infectious/on_species_gain(mob/living/carbon/C, datum/species/old_species)
|
||||
/datum/species/zombie/infectious/on_species_gain(mob/living/carbon/human/new_zombie, datum/species/old_species)
|
||||
. = ..()
|
||||
C.AddComponent(/datum/component/mutant_hands, mutant_hand_path = /obj/item/mutant_hand/zombie)
|
||||
new_zombie.AddComponent(/datum/component/mutant_hands, mutant_hand_path = /obj/item/mutant_hand/zombie)
|
||||
|
||||
/datum/species/zombie/infectious/on_species_loss(mob/living/carbon/human/C, datum/species/new_species, pref_load)
|
||||
/datum/species/zombie/infectious/on_species_loss(mob/living/carbon/human/was_zombie, datum/species/new_species, pref_load)
|
||||
. = ..()
|
||||
qdel(C.GetComponent(/datum/component/mutant_hands))
|
||||
qdel(was_zombie.GetComponent(/datum/component/mutant_hands))
|
||||
|
||||
/datum/species/zombie/infectious/check_roundstart_eligible()
|
||||
return FALSE
|
||||
|
||||
@@ -1003,7 +1003,7 @@
|
||||
|
||||
/datum/status_effect/stabilized/lightpink/on_apply()
|
||||
owner.add_movespeed_modifier(/datum/movespeed_modifier/status_effect/lightpink)
|
||||
ADD_TRAIT(owner, TRAIT_PACIFISM, STABILIZED_LIGHT_PINK_TRAIT)
|
||||
ADD_TRAIT(owner, TRAIT_PACIFISM, STABILIZED_LIGHT_PINK_EXTRACT_TRAIT)
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/stabilized/lightpink/tick()
|
||||
@@ -1015,7 +1015,7 @@
|
||||
|
||||
/datum/status_effect/stabilized/lightpink/on_remove()
|
||||
owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/lightpink)
|
||||
REMOVE_TRAIT(owner, TRAIT_PACIFISM, STABILIZED_LIGHT_PINK_TRAIT)
|
||||
REMOVE_TRAIT(owner, TRAIT_PACIFISM, STABILIZED_LIGHT_PINK_EXTRACT_TRAIT)
|
||||
|
||||
/datum/status_effect/stabilized/adamantine
|
||||
id = "stabilizedadamantine"
|
||||
|
||||
@@ -473,12 +473,13 @@
|
||||
/obj/item/slime_extract/adamantine/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
|
||||
switch(activation_type)
|
||||
if(SLIME_ACTIVATE_MINOR)
|
||||
if(species.armor > 0)
|
||||
if(HAS_TRAIT(user, TRAIT_ADAMANTINE_EXTRACT_ARMOR))
|
||||
to_chat(user, span_warning("Your skin is already hardened!"))
|
||||
return
|
||||
ADD_TRAIT(user, TRAIT_ADAMANTINE_EXTRACT_ARMOR, ADAMANTINE_EXTRACT_TRAIT)
|
||||
to_chat(user, span_notice("You feel your skin harden and become more resistant."))
|
||||
species.armor += 25
|
||||
addtimer(CALLBACK(src, PROC_REF(reset_armor), species), 1200)
|
||||
user.physiology.damage_resistance += 25
|
||||
addtimer(CALLBACK(src, PROC_REF(reset_armor), user), 120 SECONDS)
|
||||
return 450
|
||||
|
||||
if(SLIME_ACTIVATE_MAJOR)
|
||||
@@ -489,9 +490,9 @@
|
||||
return
|
||||
to_chat(user, span_notice("You stop feeding [src], and your body returns to its slimelike state."))
|
||||
|
||||
/obj/item/slime_extract/adamantine/proc/reset_armor(datum/species/jelly/luminescent/species)
|
||||
if(istype(species))
|
||||
species.armor -= 25
|
||||
/obj/item/slime_extract/adamantine/proc/reset_armor(mob/living/carbon/human/user)
|
||||
REMOVE_TRAIT(user, TRAIT_ADAMANTINE_EXTRACT_ARMOR, ADAMANTINE_EXTRACT_TRAIT)
|
||||
user.physiology.damage_resistance -= 25
|
||||
|
||||
/obj/item/slime_extract/bluespace
|
||||
name = "bluespace slime extract"
|
||||
|
||||
@@ -9,16 +9,18 @@
|
||||
var/can_process = FALSE
|
||||
var/mod_type = BIOWARE_GENERIC
|
||||
|
||||
/datum/bioware/New(mob/living/carbon/human/_owner)
|
||||
owner = _owner
|
||||
for(var/datum/bioware/bioware as anything in owner.bioware)
|
||||
/datum/bioware/New(mob/living/carbon/human/new_owner)
|
||||
owner = new_owner
|
||||
for(var/datum/bioware/bioware as anything in owner.biowares)
|
||||
if(bioware.mod_type == mod_type)
|
||||
qdel(src)
|
||||
return
|
||||
owner.bioware += src
|
||||
LAZYADD(owner.biowares, src)
|
||||
on_gain()
|
||||
|
||||
/datum/bioware/Destroy()
|
||||
if(owner)
|
||||
LAZYREMOVE(owner.biowares, src)
|
||||
owner = null
|
||||
if(active)
|
||||
on_lose()
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
return FALSE
|
||||
if(!istype(target))
|
||||
return FALSE
|
||||
for(var/datum/bioware/bioware as anything in target.bioware)
|
||||
for(var/datum/bioware/bioware as anything in target.biowares)
|
||||
if(bioware.mod_type == bioware_target)
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
@@ -88,10 +88,15 @@
|
||||
///Gradually increases while burning when at full damage, destroys the limb when at 100
|
||||
var/cremation_progress = 0
|
||||
|
||||
//Multiplicative damage modifiers
|
||||
/// Brute damage gets multiplied by this on receive_damage()
|
||||
var/brute_modifier = 1
|
||||
/// Burn damage gets multiplied by this on receive_damage()
|
||||
var/burn_modifier = 1
|
||||
// Damage reduction variables for damage handled on the limb level. Handled after worn armor.
|
||||
///Amount subtracted from brute damage inflicted on the limb.
|
||||
/// Amount subtracted from brute damage inflicted on the limb.
|
||||
var/brute_reduction = 0
|
||||
///Amount subtracted from burn damage inflicted on the limb.
|
||||
/// Amount subtracted from burn damage inflicted on the limb.
|
||||
var/burn_reduction = 0
|
||||
|
||||
//Coloring and proper item icon update
|
||||
@@ -437,8 +442,8 @@
|
||||
return FALSE
|
||||
|
||||
var/dmg_multi = CONFIG_GET(number/damage_multiplier) * hit_percent
|
||||
brute = round(max(brute * dmg_multi, 0),DAMAGE_PRECISION)
|
||||
burn = round(max(burn * dmg_multi, 0),DAMAGE_PRECISION)
|
||||
brute = round(max(brute * dmg_multi * brute_modifier, 0), DAMAGE_PRECISION)
|
||||
burn = round(max(burn * dmg_multi * burn_modifier, 0), DAMAGE_PRECISION)
|
||||
brute = max(0, brute - brute_reduction)
|
||||
burn = max(0, burn - burn_reduction)
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
attack_type = BURN // bish buzz
|
||||
unarmed_attack_sound = 'sound/weapons/etherealhit.ogg'
|
||||
unarmed_miss_sound = 'sound/weapons/etherealmiss.ogg'
|
||||
brute_modifier = 1.25 //ethereal are weak to brute damage
|
||||
|
||||
/obj/item/bodypart/head/ethereal/update_limb(dropping_limb, is_creating)
|
||||
. = ..()
|
||||
@@ -19,6 +20,7 @@
|
||||
limb_id = SPECIES_ETHEREAL
|
||||
is_dimorphic = FALSE
|
||||
dmg_overlay_type = null
|
||||
brute_modifier = 1.25 //ethereal are weak to brute damage
|
||||
|
||||
/obj/item/bodypart/chest/ethereal/update_limb(dropping_limb, is_creating)
|
||||
. = ..()
|
||||
@@ -35,6 +37,7 @@
|
||||
unarmed_attack_verb = "burn"
|
||||
unarmed_attack_sound = 'sound/weapons/etherealhit.ogg'
|
||||
unarmed_miss_sound = 'sound/weapons/etherealmiss.ogg'
|
||||
brute_modifier = 1.25 //ethereal are weak to brute damage
|
||||
|
||||
/obj/item/bodypart/arm/left/ethereal/update_limb(dropping_limb, is_creating)
|
||||
. = ..()
|
||||
@@ -51,6 +54,7 @@
|
||||
unarmed_attack_verb = "burn"
|
||||
unarmed_attack_sound = 'sound/weapons/etherealhit.ogg'
|
||||
unarmed_miss_sound = 'sound/weapons/etherealmiss.ogg'
|
||||
brute_modifier = 1.25 //ethereal are weak to brute damages
|
||||
|
||||
/obj/item/bodypart/arm/right/ethereal/update_limb(dropping_limb, is_creating)
|
||||
. = ..()
|
||||
@@ -59,7 +63,6 @@
|
||||
var/datum/species/ethereal/eth_holder = potato_oc.dna.species
|
||||
species_color = eth_holder.current_color
|
||||
|
||||
|
||||
/obj/item/bodypart/leg/left/ethereal
|
||||
icon_greyscale = 'icons/mob/species/ethereal/bodyparts.dmi'
|
||||
limb_id = SPECIES_ETHEREAL
|
||||
@@ -67,6 +70,7 @@
|
||||
attack_type = BURN // bish buzz
|
||||
unarmed_attack_sound = 'sound/weapons/etherealhit.ogg'
|
||||
unarmed_miss_sound = 'sound/weapons/etherealmiss.ogg'
|
||||
brute_modifier = 1.25 //ethereal are weak to brute damage
|
||||
|
||||
/obj/item/bodypart/leg/left/ethereal/update_limb(dropping_limb, is_creating)
|
||||
. = ..()
|
||||
@@ -82,6 +86,7 @@
|
||||
attack_type = BURN // bish buzz
|
||||
unarmed_attack_sound = 'sound/weapons/etherealhit.ogg'
|
||||
unarmed_miss_sound = 'sound/weapons/etherealmiss.ogg'
|
||||
brute_modifier = 1.25 //ethereal are weak to brute damage
|
||||
|
||||
/obj/item/bodypart/leg/right/ethereal/update_limb(dropping_limb, is_creating)
|
||||
. = ..()
|
||||
|
||||
@@ -2,29 +2,36 @@
|
||||
/obj/item/bodypart/head/snail
|
||||
limb_id = SPECIES_SNAIL
|
||||
is_dimorphic = FALSE
|
||||
burn_modifier = 2
|
||||
|
||||
/obj/item/bodypart/chest/snail
|
||||
limb_id = SPECIES_SNAIL
|
||||
is_dimorphic = FALSE
|
||||
burn_modifier = 2
|
||||
|
||||
/obj/item/bodypart/arm/left/snail
|
||||
limb_id = SPECIES_SNAIL
|
||||
unarmed_attack_verb = "slap"
|
||||
unarmed_attack_effect = ATTACK_EFFECT_DISARM
|
||||
unarmed_damage_high = 0.5 //snails are soft and squishy
|
||||
burn_modifier = 2
|
||||
|
||||
/obj/item/bodypart/arm/right/snail
|
||||
limb_id = SPECIES_SNAIL
|
||||
unarmed_attack_verb = "slap"
|
||||
unarmed_attack_effect = ATTACK_EFFECT_DISARM
|
||||
unarmed_damage_high = 0.5
|
||||
burn_modifier = 2
|
||||
|
||||
/obj/item/bodypart/leg/left/snail
|
||||
limb_id = SPECIES_SNAIL
|
||||
unarmed_damage_high = 0.5
|
||||
burn_modifier = 2
|
||||
|
||||
/obj/item/bodypart/leg/right/snail
|
||||
limb_id = SPECIES_SNAIL
|
||||
unarmed_damage_high = 0.5
|
||||
burn_modifier = 2
|
||||
|
||||
///ABDUCTOR
|
||||
/obj/item/bodypart/head/abductor
|
||||
@@ -67,32 +74,38 @@
|
||||
limb_id = SPECIES_JELLYPERSON
|
||||
is_dimorphic = TRUE
|
||||
dmg_overlay_type = null
|
||||
burn_modifier = 0.5 // = 1/2x generic burn damage
|
||||
|
||||
/obj/item/bodypart/chest/jelly
|
||||
biological_state = BIO_INORGANIC
|
||||
limb_id = SPECIES_JELLYPERSON
|
||||
is_dimorphic = TRUE
|
||||
dmg_overlay_type = null
|
||||
burn_modifier = 0.5 // = 1/2x generic burn damage
|
||||
|
||||
/obj/item/bodypart/arm/left/jelly
|
||||
biological_state = BIO_INORGANIC
|
||||
limb_id = SPECIES_JELLYPERSON
|
||||
dmg_overlay_type = null
|
||||
burn_modifier = 0.5 // = 1/2x generic burn damage
|
||||
|
||||
/obj/item/bodypart/arm/right/jelly
|
||||
biological_state = BIO_INORGANIC
|
||||
limb_id = SPECIES_JELLYPERSON
|
||||
dmg_overlay_type = null
|
||||
burn_modifier = 0.5 // = 1/2x generic burn damage
|
||||
|
||||
/obj/item/bodypart/leg/left/jelly
|
||||
biological_state = BIO_INORGANIC
|
||||
limb_id = SPECIES_JELLYPERSON
|
||||
dmg_overlay_type = null
|
||||
burn_modifier = 0.5 // = 1/2x generic burn damage
|
||||
|
||||
/obj/item/bodypart/leg/right/jelly
|
||||
biological_state = BIO_INORGANIC
|
||||
limb_id = SPECIES_JELLYPERSON
|
||||
dmg_overlay_type = null
|
||||
burn_modifier = 0.5 // = 1/2x generic burn damage
|
||||
|
||||
///SLIME
|
||||
/obj/item/bodypart/head/slime
|
||||
@@ -179,10 +192,12 @@
|
||||
/obj/item/bodypart/head/pod
|
||||
limb_id = SPECIES_PODPERSON
|
||||
is_dimorphic = TRUE
|
||||
burn_modifier = 1.25
|
||||
|
||||
/obj/item/bodypart/chest/pod
|
||||
limb_id = SPECIES_PODPERSON
|
||||
is_dimorphic = TRUE
|
||||
burn_modifier = 1.25
|
||||
|
||||
/obj/item/bodypart/arm/left/pod
|
||||
limb_id = SPECIES_PODPERSON
|
||||
@@ -190,6 +205,7 @@
|
||||
unarmed_attack_effect = ATTACK_EFFECT_CLAW
|
||||
unarmed_attack_sound = 'sound/weapons/slice.ogg'
|
||||
unarmed_miss_sound = 'sound/weapons/slashmiss.ogg'
|
||||
burn_modifier = 1.25
|
||||
|
||||
/obj/item/bodypart/arm/right/pod
|
||||
limb_id = SPECIES_PODPERSON
|
||||
@@ -197,12 +213,15 @@
|
||||
unarmed_attack_effect = ATTACK_EFFECT_CLAW
|
||||
unarmed_attack_sound = 'sound/weapons/slice.ogg'
|
||||
unarmed_miss_sound = 'sound/weapons/slashmiss.ogg'
|
||||
burn_modifier = 1.25
|
||||
|
||||
/obj/item/bodypart/leg/left/pod
|
||||
limb_id = SPECIES_PODPERSON
|
||||
burn_modifier = 1.25
|
||||
|
||||
/obj/item/bodypart/leg/right/pod
|
||||
limb_id = SPECIES_PODPERSON
|
||||
burn_modifier = 1.25
|
||||
|
||||
///FLY
|
||||
/obj/item/bodypart/head/fly
|
||||
@@ -237,32 +256,38 @@
|
||||
limb_id = SPECIES_SHADOW
|
||||
is_dimorphic = FALSE
|
||||
should_draw_greyscale = FALSE
|
||||
burn_modifier = 1.5
|
||||
|
||||
/obj/item/bodypart/chest/shadow
|
||||
biological_state = BIO_INORGANIC
|
||||
limb_id = SPECIES_SHADOW
|
||||
is_dimorphic = FALSE
|
||||
should_draw_greyscale = FALSE
|
||||
burn_modifier = 1.5
|
||||
|
||||
/obj/item/bodypart/arm/left/shadow
|
||||
biological_state = BIO_INORGANIC
|
||||
limb_id = SPECIES_SHADOW
|
||||
should_draw_greyscale = FALSE
|
||||
burn_modifier = 1.5
|
||||
|
||||
/obj/item/bodypart/arm/right/shadow
|
||||
biological_state = BIO_INORGANIC
|
||||
limb_id = SPECIES_SHADOW
|
||||
should_draw_greyscale = FALSE
|
||||
burn_modifier = 1.5
|
||||
|
||||
/obj/item/bodypart/leg/left/shadow
|
||||
biological_state = BIO_INORGANIC
|
||||
limb_id = SPECIES_SHADOW
|
||||
should_draw_greyscale = FALSE
|
||||
burn_modifier = 1.5
|
||||
|
||||
/obj/item/bodypart/leg/right/shadow
|
||||
biological_state = BIO_INORGANIC
|
||||
limb_id = SPECIES_SHADOW
|
||||
should_draw_greyscale = FALSE
|
||||
burn_modifier = 1.5
|
||||
|
||||
/obj/item/bodypart/arm/left/shadow/nightmare
|
||||
bodypart_traits = list(TRAIT_CHUNKYFINGERS)
|
||||
@@ -313,36 +338,43 @@
|
||||
/obj/item/bodypart/head/mushroom
|
||||
limb_id = SPECIES_MUSHROOM
|
||||
is_dimorphic = TRUE
|
||||
burn_modifier = 1.25
|
||||
|
||||
/obj/item/bodypart/chest/mushroom
|
||||
limb_id = SPECIES_MUSHROOM
|
||||
is_dimorphic = TRUE
|
||||
bodypart_traits = list(TRAIT_NO_JUMPSUIT)
|
||||
burn_modifier = 1.25
|
||||
|
||||
/obj/item/bodypart/arm/left/mushroom
|
||||
limb_id = SPECIES_MUSHROOM
|
||||
unarmed_damage_low = 6
|
||||
unarmed_damage_high = 14
|
||||
unarmed_stun_threshold = 14
|
||||
burn_modifier = 1.25
|
||||
|
||||
/obj/item/bodypart/arm/right/mushroom
|
||||
limb_id = SPECIES_MUSHROOM
|
||||
unarmed_damage_low = 6
|
||||
unarmed_damage_high = 14
|
||||
unarmed_stun_threshold = 14
|
||||
burn_modifier = 1.25
|
||||
|
||||
/obj/item/bodypart/leg/left/mushroom
|
||||
limb_id = SPECIES_MUSHROOM
|
||||
unarmed_damage_low = 9
|
||||
unarmed_damage_high = 21
|
||||
unarmed_stun_threshold = 14
|
||||
burn_modifier = 1.25
|
||||
|
||||
/obj/item/bodypart/leg/right/mushroom
|
||||
limb_id = SPECIES_MUSHROOM
|
||||
unarmed_damage_low = 9
|
||||
unarmed_damage_high = 21
|
||||
unarmed_stun_threshold = 14
|
||||
burn_modifier = 1.25
|
||||
|
||||
//GOLEM
|
||||
/obj/item/bodypart/head/golem
|
||||
icon = 'icons/mob/species/golems.dmi'
|
||||
icon_static = 'icons/mob/species/golems.dmi'
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
is_dimorphic = FALSE
|
||||
should_draw_greyscale = FALSE
|
||||
dmg_overlay_type = null
|
||||
brute_modifier = 1.5 //Plasmemes are weak
|
||||
burn_modifier = 1.5 //Plasmemes are weak
|
||||
|
||||
/obj/item/bodypart/chest/plasmaman
|
||||
icon = 'icons/mob/species/plasmaman/bodyparts.dmi'
|
||||
@@ -17,6 +19,8 @@
|
||||
is_dimorphic = FALSE
|
||||
should_draw_greyscale = FALSE
|
||||
dmg_overlay_type = null
|
||||
brute_modifier = 1.5 //Plasmemes are weak
|
||||
burn_modifier = 1.5 //Plasmemes are weak
|
||||
|
||||
/obj/item/bodypart/arm/left/plasmaman
|
||||
icon = 'icons/mob/species/plasmaman/bodyparts.dmi'
|
||||
@@ -26,6 +30,8 @@
|
||||
limb_id = SPECIES_PLASMAMAN
|
||||
should_draw_greyscale = FALSE
|
||||
dmg_overlay_type = null
|
||||
brute_modifier = 1.5 //Plasmemes are weak
|
||||
burn_modifier = 1.5 //Plasmemes are weak
|
||||
|
||||
/obj/item/bodypart/arm/right/plasmaman
|
||||
icon = 'icons/mob/species/plasmaman/bodyparts.dmi'
|
||||
@@ -35,6 +41,8 @@
|
||||
limb_id = SPECIES_PLASMAMAN
|
||||
should_draw_greyscale = FALSE
|
||||
dmg_overlay_type = null
|
||||
brute_modifier = 1.5 //Plasmemes are weak
|
||||
burn_modifier = 1.5 //Plasmemes are weak
|
||||
|
||||
/obj/item/bodypart/leg/left/plasmaman
|
||||
icon = 'icons/mob/species/plasmaman/bodyparts.dmi'
|
||||
@@ -44,6 +52,8 @@
|
||||
limb_id = SPECIES_PLASMAMAN
|
||||
should_draw_greyscale = FALSE
|
||||
dmg_overlay_type = null
|
||||
brute_modifier = 1.5 //Plasmemes are weak
|
||||
burn_modifier = 1.5 //Plasmemes are weak
|
||||
|
||||
/obj/item/bodypart/leg/right/plasmaman
|
||||
icon = 'icons/mob/species/plasmaman/bodyparts.dmi'
|
||||
@@ -53,3 +63,5 @@
|
||||
limb_id = SPECIES_PLASMAMAN
|
||||
should_draw_greyscale = FALSE
|
||||
dmg_overlay_type = null
|
||||
brute_modifier = 1.5 //Plasmemes are weak
|
||||
burn_modifier = 1.5 //Plasmemes are weak
|
||||
|
||||
@@ -15,25 +15,20 @@
|
||||
/obj/item/organ/internal/stomach/golem/on_insert(mob/living/carbon/organ_owner, special)
|
||||
. = ..()
|
||||
RegisterSignal(owner, COMSIG_CARBON_ATTEMPT_EAT, PROC_REF(try_eating))
|
||||
if (!ishuman(organ_owner))
|
||||
if(!ishuman(organ_owner))
|
||||
return
|
||||
if (organ_owner.flags_1 & INITIALIZED_1)
|
||||
setup_physiology(organ_owner)
|
||||
else
|
||||
RegisterSignal(owner, COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZE, PROC_REF(setup_physiology))
|
||||
setup_physiology(organ_owner)
|
||||
|
||||
/// Physiology doesn't exist yet if this is added on initialisation of a golem, so we need to wait until it does
|
||||
/obj/item/organ/internal/stomach/golem/proc/setup_physiology(mob/living/carbon/human/human_owner)
|
||||
SIGNAL_HANDLER
|
||||
human_owner.physiology?.hunger_mod *= hunger_mod
|
||||
UnregisterSignal(human_owner, COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZE)
|
||||
|
||||
/obj/item/organ/internal/stomach/golem/on_remove(mob/living/carbon/organ_owner, special)
|
||||
. = ..()
|
||||
UnregisterSignal(organ_owner, COMSIG_CARBON_ATTEMPT_EAT)
|
||||
organ_owner.remove_movespeed_modifier(/datum/movespeed_modifier/golem_hunger)
|
||||
organ_owner.remove_status_effect(/datum/status_effect/golem_statued)
|
||||
if (!ishuman(organ_owner))
|
||||
if(!ishuman(organ_owner))
|
||||
return
|
||||
var/mob/living/carbon/human/human_owner = organ_owner
|
||||
human_owner.physiology?.hunger_mod /= hunger_mod
|
||||
@@ -41,7 +36,7 @@
|
||||
/// Reject food, rocks only
|
||||
/obj/item/organ/internal/stomach/golem/proc/try_eating(mob/living/carbon/source, atom/eating)
|
||||
SIGNAL_HANDLER
|
||||
if (istype(eating, /obj/item/food/golem_food))
|
||||
if(istype(eating, /obj/item/food/golem_food))
|
||||
return
|
||||
source.balloon_alert(source, "minerals only!")
|
||||
return COMSIG_CARBON_BLOCK_EAT
|
||||
|
||||
Reference in New Issue
Block a user