minor raptor tweaks (#83407)

## About The Pull Request
i think i made these a bit too strong, this hopefully balances them out
a bit. they were initially accidentally given alot of armor against
ranged attacks, this is now removed. also ive reduced their base hp by a
bit. im open to other suggestions and feedback

## Why It's Good For The Game
they were stronger than i intended. this keeps their usefulness for
battling tendrils, or ore vents but also prevents using them to cheese
several megafauna

## Changelog
🆑
balance: you can now polymorph into raptors
balance: raptors overall have less health and no longer have armor
against ranged attacks
/🆑
This commit is contained in:
Ben10Omintrix
2024-05-24 16:12:49 +01:00
committed by GitHub
parent 4e6573355d
commit 6da03cfb66
8 changed files with 94 additions and 88 deletions
@@ -7,7 +7,7 @@
var/happiness_key = BB_BASIC_HAPPINESS
///list of emotions we relay when happy
var/static/list/happy_emotions = list(
"celebrate happily!",
"celebrates happily!",
"dances around in excitement!",
)
///our moderate emotions
@@ -56,10 +56,10 @@
icon = 'icons/mob/simple/lavaland/raptor_big.dmi'
icon_state = "raptor_red"
loot = list(
/mob/living/basic/mining/raptor/red = 20,
/mob/living/basic/mining/raptor/white = 20,
/mob/living/basic/mining/raptor/purple = 20,
/mob/living/basic/mining/raptor/green = 20,
/mob/living/basic/mining/raptor/yellow = 20,
/mob/living/basic/mining/raptor/black = 1,
/mob/living/basic/raptor/red = 20,
/mob/living/basic/raptor/white = 20,
/mob/living/basic/raptor/purple = 20,
/mob/living/basic/raptor/green = 20,
/mob/living/basic/raptor/yellow = 20,
/mob/living/basic/raptor/black = 1,
)
@@ -1,10 +1,10 @@
GLOBAL_LIST_INIT(raptor_growth_paths, list(
/mob/living/basic/mining/raptor/baby_raptor/red = list(RAPTOR_PURPLE, RAPTOR_WHITE),
/mob/living/basic/mining/raptor/baby_raptor/white = list(RAPTOR_GREEN, RAPTOR_PURPLE),
/mob/living/basic/mining/raptor/baby_raptor/purple = list(RAPTOR_GREEN, RAPTOR_WHITE),
/mob/living/basic/mining/raptor/baby_raptor/yellow = list(RAPTOR_GREEN, RAPTOR_RED),
/mob/living/basic/mining/raptor/baby_raptor/green = list(RAPTOR_RED, RAPTOR_YELLOW),
/mob/living/basic/mining/raptor/baby_raptor/blue = list(RAPTOR_RED, RAPTOR_PURPLE)
/mob/living/basic/raptor/baby_raptor/red = list(RAPTOR_PURPLE, RAPTOR_WHITE),
/mob/living/basic/raptor/baby_raptor/white = list(RAPTOR_GREEN, RAPTOR_PURPLE),
/mob/living/basic/raptor/baby_raptor/purple = list(RAPTOR_GREEN, RAPTOR_WHITE),
/mob/living/basic/raptor/baby_raptor/yellow = list(RAPTOR_GREEN, RAPTOR_RED),
/mob/living/basic/raptor/baby_raptor/green = list(RAPTOR_RED, RAPTOR_YELLOW),
/mob/living/basic/raptor/baby_raptor/blue = list(RAPTOR_RED, RAPTOR_PURPLE)
))
GLOBAL_LIST_INIT(raptor_inherit_traits, list(
@@ -19,17 +19,21 @@ GLOBAL_LIST_EMPTY(raptor_population)
#define HAPPINESS_BOOST_DAMPENER 0.3
/mob/living/basic/mining/raptor
/mob/living/basic/raptor
name = "raptor"
desc = "A trusty, powerful steed. Taming it might prove difficult..."
icon = 'icons/mob/simple/lavaland/raptor_big.dmi'
speed = 2
mob_biotypes = MOB_ORGANIC|MOB_BEAST
maxHealth = 400
health = 400
maxHealth = 270
health = 270
melee_damage_lower = 10
melee_damage_upper = 15
sentience_type = SENTIENCE_BOSS
combat_mode = TRUE
mob_size = MOB_SIZE_LARGE
unsuitable_atmos_damage = 0
minimum_survivable_temperature = BODYTEMP_COLD_ICEBOX_SAFE
maximum_survivable_temperature = INFINITY
attack_verb_continuous = "pecks"
attack_verb_simple = "chomps"
attack_sound = 'sound/weapons/punch1.ogg'
@@ -60,12 +64,14 @@ GLOBAL_LIST_EMPTY(raptor_population)
var/child_path
/mob/living/basic/mining/raptor/Initialize(mapload)
/mob/living/basic/raptor/Initialize(mapload)
. = ..()
if(SSmapping.is_planetary())
change_offsets = FALSE
icon = 'icons/mob/simple/lavaland/raptor_icebox.dmi'
add_traits(list(TRAIT_LAVA_IMMUNE, TRAIT_ASHSTORM_IMMUNE, TRAIT_SNOWSTORM_IMMUNE), INNATE_TRAIT)
if(!mapload)
GLOB.raptor_population += REF(src)
AddComponent(/datum/component/obeys_commands, pet_commands)
@@ -103,7 +109,7 @@ GLOBAL_LIST_EMPTY(raptor_population)
if(can_breed)
AddComponent(\
/datum/component/breed,\
can_breed_with = typecacheof(list(/mob/living/basic/mining/raptor)),\
can_breed_with = typecacheof(list(/mob/living/basic/raptor)),\
baby_path = /obj/item/food/egg/raptor_egg,\
post_birth = CALLBACK(src, PROC_REF(egg_inherit)),\
breed_timer = 3 MINUTES,\
@@ -114,12 +120,12 @@ GLOBAL_LIST_EMPTY(raptor_population)
add_happiness_component()
/mob/living/basic/mining/raptor/buckle_mob(mob/living/target, force = FALSE, check_loc = TRUE, buckle_mob_flags= NONE)
/mob/living/basic/raptor/buckle_mob(mob/living/target, force = FALSE, check_loc = TRUE, buckle_mob_flags= NONE)
if(!iscarbon(target))
return
return ..()
/mob/living/basic/mining/raptor/proc/add_happiness_component()
/mob/living/basic/raptor/proc/add_happiness_component()
var/static/list/percentage_callbacks = list(0, 15, 25, 35, 50, 75, 90, 100)
AddComponent(\
/datum/component/happiness,\
@@ -130,18 +136,18 @@ GLOBAL_LIST_EMPTY(raptor_population)
happiness_callback = CALLBACK(src, PROC_REF(happiness_change)),\
)
/mob/living/basic/mining/raptor/proc/on_dir_change(datum/source, old_dir, new_dir)
/mob/living/basic/raptor/proc/on_dir_change(datum/source, old_dir, new_dir)
SIGNAL_HANDLER
adjust_offsets(new_dir)
/mob/living/basic/mining/raptor/proc/adjust_offsets(direction)
/mob/living/basic/raptor/proc/adjust_offsets(direction)
if(!change_offsets)
return
pixel_x = (direction & EAST) ? -20 : 0
pixel_y = (direction & NORTH) ? -5 : 0
/mob/living/basic/mining/raptor/proc/pre_attack(mob/living/puncher, atom/target)
/mob/living/basic/raptor/proc/pre_attack(mob/living/puncher, atom/target)
SIGNAL_HANDLER
if(!istype(target, /obj/structure/ore_container/food_trough/raptor_trough))
@@ -155,30 +161,30 @@ GLOBAL_LIST_EMPTY(raptor_population)
INVOKE_ASYNC(src, PROC_REF(melee_attack), ore_food)
return COMPONENT_HOSTILE_NO_ATTACK
/mob/living/basic/mining/raptor/melee_attack(mob/living/target, list/modifiers, ignore_cooldown)
if(!combat_mode && istype(target, /mob/living/basic/mining/raptor/baby_raptor))
/mob/living/basic/raptor/melee_attack(mob/living/target, list/modifiers, ignore_cooldown)
if(!combat_mode && istype(target, /mob/living/basic/raptor/baby_raptor))
target.attack_hand(src, list(LEFT_CLICK = TRUE))
return
return ..()
/mob/living/basic/mining/raptor/death(gibbed)
/mob/living/basic/raptor/death(gibbed)
. = ..()
GLOB.raptor_population -= REF(src)
/mob/living/basic/mining/raptor/proc/happiness_change(percent_value)
/mob/living/basic/raptor/proc/happiness_change(percent_value)
var/attack_boost = round(initial(melee_damage_lower) * percent_value * HAPPINESS_BOOST_DAMPENER, 1)
melee_damage_lower = initial(melee_damage_lower) + attack_boost
melee_damage_upper = melee_damage_lower + 5
///pass down our inheritance to the egg
/mob/living/basic/mining/raptor/proc/egg_inherit(obj/item/food/egg/raptor_egg/baby_egg, mob/living/basic/mining/raptor/partner)
/mob/living/basic/raptor/proc/egg_inherit(obj/item/food/egg/raptor_egg/baby_egg, mob/living/basic/raptor/partner)
var/datum/raptor_inheritance/inherit = new
inherit.set_parents(inherited_stats, partner.inherited_stats)
baby_egg.inherited_stats = inherit
baby_egg.determine_growth_path(src, partner)
/mob/living/basic/mining/raptor/proc/inherit_properties()
/mob/living/basic/raptor/proc/inherit_properties()
if(isnull(inherited_stats))
return
for(var/trait in GLOB.raptor_inherit_traits) // done this way to allow overriding of traits when assigned new inherit datum
@@ -189,11 +195,11 @@ GLOBAL_LIST_EMPTY(raptor_population)
maxHealth += inherited_stats.health_modifier
heal_overall_damage(maxHealth)
/mob/living/basic/mining/raptor/Destroy()
/mob/living/basic/raptor/Destroy()
QDEL_NULL(inherited_stats)
return ..()
/mob/living/basic/mining/raptor/red
/mob/living/basic/raptor/red
name = "red raptor"
icon_state = "raptor_red"
icon_living = "raptor_red"
@@ -203,18 +209,18 @@ GLOBAL_LIST_EMPTY(raptor_population)
raptor_color = RAPTOR_RED
dex_description = "A resilient breed of raptors, battle-tested and bred for the purpose of humbling its foes in combat, \
This breed demonstrates higher combat capabilities than its peers and oozes ruthless aggression."
child_path = /mob/living/basic/mining/raptor/baby_raptor/red
child_path = /mob/living/basic/raptor/baby_raptor/red
/mob/living/basic/mining/raptor/purple
/mob/living/basic/raptor/purple
name = "purple raptor"
icon_state = "raptor_purple"
icon_living = "raptor_purple"
icon_dead = "raptor_purple_dead"
raptor_color = RAPTOR_PURPLE
dex_description = "A dependable mount, bred for the purpose of long distance pilgrimages. This breed is also able to store its rider's possessions."
child_path = /mob/living/basic/mining/raptor/baby_raptor/purple
child_path = /mob/living/basic/raptor/baby_raptor/purple
/mob/living/basic/mining/raptor/purple/Initialize(mapload)
/mob/living/basic/raptor/purple/Initialize(mapload)
. = ..()
create_storage(
max_specific_storage = WEIGHT_CLASS_NORMAL,
@@ -222,57 +228,57 @@ GLOBAL_LIST_EMPTY(raptor_population)
storage_type = /datum/storage/raptor_storage,
)
/mob/living/basic/mining/raptor/green
/mob/living/basic/raptor/green
name = "green raptor"
icon_state = "raptor_green"
icon_living = "raptor_green"
icon_dead = "raptor_green_dead"
maxHealth = 460
health = 460
maxHealth = 400
health = 400
raptor_color = RAPTOR_GREEN
dex_description = "A tough breed of raptor, made to withstand the harshest of punishment and to laugh in the face of pain, \
this breed is able to withstand more punishment than its peers."
child_path = /mob/living/basic/mining/raptor/baby_raptor/green
child_path = /mob/living/basic/raptor/baby_raptor/green
/mob/living/basic/mining/raptor/green/Initialize(mapload)
/mob/living/basic/raptor/green/Initialize(mapload)
. = ..()
AddElement(/datum/element/proficient_miner)
/mob/living/basic/mining/raptor/white
/mob/living/basic/raptor/white
name = "white raptor"
icon_state = "raptor_white"
icon_living = "raptor_white"
icon_dead = "raptor_white_dead"
raptor_color = RAPTOR_WHITE
dex_description = "A loving sort, it cares for it peers and rushes to their aid with reckless abandon. It is able to heal any raptors' ailments."
child_path = /mob/living/basic/mining/raptor/baby_raptor/white
child_path = /mob/living/basic/raptor/baby_raptor/white
/mob/living/basic/mining/raptor/white/Initialize(mapload)
/mob/living/basic/raptor/white/Initialize(mapload)
. = ..()
AddComponent(\
/datum/component/healing_touch,\
heal_brute = melee_damage_upper,\
heal_burn = melee_damage_upper,\
heal_time = 0,\
valid_targets_typecache = typecacheof(list(/mob/living/basic/mining/raptor)),\
valid_targets_typecache = typecacheof(list(/mob/living/basic/raptor)),\
)
/mob/living/basic/mining/raptor/black
/mob/living/basic/raptor/black
name = "black raptor"
icon_state = "raptor_black"
icon_living = "raptor_black"
icon_dead = "raptor_black_dead"
maxHealth = 460
health = 460
maxHealth = 400
health = 400
speed = 1
ridable_component = /datum/component/riding/creature/raptor/fast
melee_damage_lower = 20
melee_damage_upper = 25
raptor_color = RAPTOR_BLACK
dex_description = "An ultra rare breed. Due to its sparse nature, not much is known about this sort. However it is said to possess many of its peers' abilities."
child_path = /mob/living/basic/mining/raptor/baby_raptor/black
child_path = /mob/living/basic/raptor/baby_raptor/black
/mob/living/basic/mining/raptor/yellow
/mob/living/basic/raptor/yellow
name = "yellow raptor"
icon_state = "raptor_yellow"
icon_living = "raptor_yellow"
@@ -281,18 +287,18 @@ GLOBAL_LIST_EMPTY(raptor_population)
speed = 1
raptor_color = RAPTOR_YELLOW
dex_description = "This breed possesses greasy fast speed, DEMON speed, making light work of long pilgrimages. It's said that a thunderclap could be heard when this breed reaches its maximum speed."
child_path = /mob/living/basic/mining/raptor/baby_raptor/yellow
child_path = /mob/living/basic/raptor/baby_raptor/yellow
/mob/living/basic/mining/raptor/blue
/mob/living/basic/raptor/blue
name = "blue raptor"
icon_state = "raptor_blue"
icon_living = "raptor_blue"
icon_dead = "raptor_blue_dead"
raptor_color = RAPTOR_BLUE
dex_description = "Known to produce nutritous and equally delicious milk, which is also said to possess healing properties."
child_path = /mob/living/basic/mining/raptor/baby_raptor/blue
child_path = /mob/living/basic/raptor/baby_raptor/blue
/mob/living/basic/mining/raptor/blue/Initialize(mapload)
/mob/living/basic/raptor/blue/Initialize(mapload)
. = ..()
AddComponent(\
/datum/component/udder,\
@@ -1,4 +1,4 @@
/mob/living/basic/mining/raptor/baby_raptor
/mob/living/basic/raptor/baby_raptor
name = "baby raptor"
desc = "Will this grow into something useful?"
icon = 'icons/mob/simple/lavaland/raptor_baby.dmi'
@@ -20,7 +20,7 @@
///probability we are to be rolled
var/roll_rate = 100
/mob/living/basic/mining/raptor/baby_raptor/Initialize(mapload)
/mob/living/basic/raptor/baby_raptor/Initialize(mapload)
. = ..()
if(isnull(growth_path))
return
@@ -36,14 +36,14 @@
optional_grow_behavior = CALLBACK(src, PROC_REF(ready_to_grow)),\
)
/mob/living/basic/mining/raptor/baby_raptor/add_happiness_component()
/mob/living/basic/raptor/baby_raptor/add_happiness_component()
AddComponent(/datum/component/happiness, on_petted_change = 100)
/mob/living/basic/mining/raptor/baby_raptor/proc/check_grow()
/mob/living/basic/raptor/baby_raptor/proc/check_grow()
return (stat != DEAD)
/mob/living/basic/mining/raptor/baby_raptor/proc/ready_to_grow()
var/mob/living/basic/mining/raptor/grown_mob = new growth_path(get_turf(src))
/mob/living/basic/raptor/baby_raptor/proc/ready_to_grow()
var/mob/living/basic/raptor/grown_mob = new growth_path(get_turf(src))
QDEL_NULL(grown_mob.inherited_stats)
grown_mob.inherited_stats = inherited_stats
inherited_stats = null
@@ -51,52 +51,52 @@
ADD_TRAIT(grown_mob, TRAIT_MOB_HATCHED, INNATE_TRAIT) //pass on the hatched trait
qdel(src)
/mob/living/basic/mining/raptor/baby_raptor/black
/mob/living/basic/raptor/baby_raptor/black
name = "baby black raptor"
icon_state = "baby_black"
icon_living = "baby_black"
icon_dead = "baby_black_dead"
growth_path = /mob/living/basic/mining/raptor/black
growth_path = /mob/living/basic/raptor/black
roll_rate = 10
/mob/living/basic/mining/raptor/baby_raptor/red
/mob/living/basic/raptor/baby_raptor/red
name = "baby red raptor"
icon_state = "baby_red"
icon_living = "baby_red"
icon_dead = "baby_red_dead"
growth_path = /mob/living/basic/mining/raptor/red
growth_path = /mob/living/basic/raptor/red
/mob/living/basic/mining/raptor/baby_raptor/purple
/mob/living/basic/raptor/baby_raptor/purple
name = "baby purple raptor"
icon_state = "baby_purple"
icon_living = "baby_purple"
icon_dead = "baby_purple_dead"
growth_path = /mob/living/basic/mining/raptor/purple
growth_path = /mob/living/basic/raptor/purple
/mob/living/basic/mining/raptor/baby_raptor/white
/mob/living/basic/raptor/baby_raptor/white
name = "baby white raptor"
icon_state = "baby_white"
icon_living = "baby_white"
icon_dead = "baby_white_dead"
growth_path = /mob/living/basic/mining/raptor/white
growth_path = /mob/living/basic/raptor/white
/mob/living/basic/mining/raptor/baby_raptor/yellow
/mob/living/basic/raptor/baby_raptor/yellow
name = "baby yellow raptor"
icon_state = "baby_yellow"
icon_living = "baby_yellow"
icon_dead = "baby_yellow_dead"
growth_path = /mob/living/basic/mining/raptor/yellow
growth_path = /mob/living/basic/raptor/yellow
/mob/living/basic/mining/raptor/baby_raptor/green
/mob/living/basic/raptor/baby_raptor/green
name = "baby green raptor"
icon_state = "baby_green"
icon_living = "baby_green"
icon_dead = "baby_green_dead"
growth_path = /mob/living/basic/mining/raptor/green
growth_path = /mob/living/basic/raptor/green
/mob/living/basic/mining/raptor/baby_raptor/blue
/mob/living/basic/raptor/baby_raptor/blue
name = "baby blue raptor"
icon_state = "baby_blue"
icon_living = "baby_blue"
icon_dead = "baby_blue_dead"
growth_path = /mob/living/basic/mining/raptor/blue
growth_path = /mob/living/basic/raptor/blue
@@ -10,8 +10,8 @@
),
BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/raptor,
BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/raptor,
BB_BABIES_PARTNER_TYPES = list(/mob/living/basic/mining/raptor),
BB_BABIES_CHILD_TYPES = list(/mob/living/basic/mining/raptor/baby_raptor),
BB_BABIES_PARTNER_TYPES = list(/mob/living/basic/raptor),
BB_BABIES_CHILD_TYPES = list(/mob/living/basic/raptor/baby_raptor),
BB_MAX_CHILDREN = 5,
)
@@ -53,8 +53,8 @@
/datum/ai_controller/basic_controller/baby_raptor
blackboard = list(
BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/raptor,
BB_FIND_MOM_TYPES = list(/mob/living/basic/mining/raptor),
BB_IGNORE_MOM_TYPES = list(/mob/living/basic/mining/raptor/baby_raptor),
BB_FIND_MOM_TYPES = list(/mob/living/basic/raptor),
BB_IGNORE_MOM_TYPES = list(/mob/living/basic/raptor/baby_raptor),
)
ai_movement = /datum/ai_movement/basic_avoidance
@@ -2,7 +2,7 @@
target_key = BB_INJURED_RAPTOR
hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/heal_raptor
finding_behavior = /datum/ai_behavior/find_hunt_target/injured_raptor
hunt_targets = list(/mob/living/basic/mining/raptor)
hunt_targets = list(/mob/living/basic/raptor)
hunt_chance = 70
hunt_range = 9
@@ -15,7 +15,7 @@
target_key = BB_RAPTOR_VICTIM
hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/bully_raptors
finding_behavior = /datum/ai_behavior/find_hunt_target/raptor_victim
hunt_targets = list(/mob/living/basic/mining/raptor)
hunt_targets = list(/mob/living/basic/raptor)
hunt_chance = 30
hunt_range = 9
@@ -38,7 +38,7 @@
target_key = BB_RAPTOR_BABY
hunting_behavior = /datum/ai_behavior/hunt_target/care_for_young
finding_behavior = /datum/ai_behavior/find_hunt_target/raptor_baby
hunt_targets = list(/mob/living/basic/mining/raptor/baby_raptor)
hunt_targets = list(/mob/living/basic/raptor/baby_raptor)
hunt_chance = 75
hunt_range = 9
@@ -19,7 +19,7 @@
/obj/item/raptor_dex/ui_static_data(mob/user)
var/list/data = list()
var/mob/living/basic/mining/raptor/my_raptor = raptor.resolve()
var/mob/living/basic/raptor/my_raptor = raptor.resolve()
data["raptor_image"] = icon2base64(getFlatIcon(image(icon = my_raptor.icon, icon_state = my_raptor.icon_state)))
data["raptor_attack"] = my_raptor.melee_damage_lower
@@ -44,7 +44,7 @@
data["inherited_attack_max"] = RAPTOR_INHERIT_MAX_ATTACK
data["inherited_health"] = inherit.health_modifier
data["inherited_health_max"] = RAPTOR_INHERIT_MAX_HEALTH
data["inherited_traits"] = list()
for(var/index in inherit.inherit_traits)
data["inherited_traits"] += GLOB.raptor_inherit_traits[index]
@@ -52,7 +52,7 @@
/obj/item/raptor_dex/interact_with_atom(atom/attacked_atom, mob/living/user)
if(!istype(attacked_atom, /mob/living/basic/mining/raptor))
if(!istype(attacked_atom, /mob/living/basic/raptor))
return NONE
raptor = WEAKREF(attacked_atom)
@@ -9,7 +9,7 @@
if(SSmapping.is_planetary())
icon = 'icons/mob/simple/lavaland/raptor_icebox.dmi'
/obj/item/food/egg/raptor_egg/proc/determine_growth_path(mob/living/basic/mining/raptor/dad, mob/living/basic/mining/raptor/mom)
/obj/item/food/egg/raptor_egg/proc/determine_growth_path(mob/living/basic/raptor/dad, mob/living/basic/raptor/mom)
if(dad.type == mom.type)
add_growth_component(dad.child_path)
return
@@ -24,9 +24,9 @@
add_growth_component(path)
return
var/list/valid_subtypes = list()
var/static/list/all_subtypes = subtypesof(/mob/living/basic/mining/raptor/baby_raptor)
var/static/list/all_subtypes = subtypesof(/mob/living/basic/raptor/baby_raptor)
for(var/path in all_subtypes)
var/mob/living/basic/mining/raptor/baby_raptor/raptor_path = path
var/mob/living/basic/raptor/baby_raptor/raptor_path = path
if(!prob(initial(raptor_path.roll_rate)))
continue
valid_subtypes += raptor_path
@@ -46,7 +46,7 @@
post_hatch = CALLBACK(src, PROC_REF(post_hatch)),\
)
/obj/item/food/egg/raptor_egg/proc/post_hatch(mob/living/basic/mining/raptor/baby)
/obj/item/food/egg/raptor_egg/proc/post_hatch(mob/living/basic/raptor/baby)
if(!istype(baby))
return
QDEL_NULL(baby.inherited_stats)