cOMS/models/mob/MobStats.h
2024-08-04 00:09:16 +02:00

563 lines
13 KiB
C

/**
* Jingga
*
* @copyright Jingga
* @license OMS License 2.0
* @version 1.0.0
* @link https://jingga.app
*/
#ifndef TOS_MODELS_MOB_STATS_H
#define TOS_MODELS_MOB_STATS_H
#include "../../stdlib/Types.h"
/**
* @todo optimize order of struct members to ensure optimal struct size
*/
// Character stats modifiable through leveling (simple +/- buttons)
struct PrimaryStatsPoints {
byte stat_str; // strength : effects health + base damage
byte stat_int; // inteligence : effects resource + base demage
byte stat_acc; // accuracy : effects critical chance + base damage + miss chance
byte stat_agi; // agility : effects resource + base damage + dodge chance
byte stat_def; // defense : effects resource + base defense + dodge chance
byte stat_sta; // stamina : effects health regen + resource regen
};
struct PrimaryStatsRel {
f32 stat_str;
f32 stat_int;
f32 stat_acc;
f32 stat_agi;
f32 stat_def;
f32 stat_sta;
};
struct PrimaryStatsRelPoints {
byte stat_str;
byte stat_int;
byte stat_acc;
byte stat_agi;
byte stat_def;
byte stat_sta;
};
// Character stats modifiable thorugh skill tree?
struct SecondaryStatsPoints {
// Damage types
byte dmg_pircing;
byte dmg_slashing;
byte dmg_bludgeoning;
byte dmg_stabbing;
byte dmg_fire;
byte dmg_water;
byte dmg_wind;
byte dmg_earth;
byte dmg_poison;
byte dmg_lightning;
byte dmg_ice;
byte dmg_arcane;
byte dmg_corrupted;
byte dmg_holy;
byte dmg_reflection;
byte dmg_reflection_chance;
byte dmg_crit;
byte dmg_crit_chance;
// Health & Resource
byte health;
byte health_on_dmg_dealt;
byte health_on_dmg_taken;
byte health_regen;
byte health_regen_rel;
byte health_regen_on_dmg_dealt;
byte health_regen_on_dmg_taken;
byte resource;
byte resource_on_dmg_dealt;
byte resource_on_dmg_taken;
byte resource_regen;
byte resource_regen_rel;
byte resource_regen_on_dmg_dealt;
byte resource_regen_on_dmg_taken;
byte resource_loss;
byte resource_loss_on_dmg_dealt;
byte resource_loss_on_dmg_taken;
// Defense types
// think about it as armor and/or resistence if it helps
byte defense_pircing;
byte defense_slashing;
byte defense_bludgeoning;
byte defense_stabbing;
byte defense_fire;
byte defense_water;
byte defense_ice;
byte defense_earth;
byte defense_wind;
byte defense_poison;
byte defense_lightning;
byte defense_holy;
byte defense_arcane;
byte defense_corrupted;
// Accuracy
byte dodge_chance;
byte cc_protection;
byte miss_chance;
// Movement
// Additional speeds may be defined for Mobs
byte speed_walk1;
byte speed_swim1;
byte speed_fly1;
// Fighting speed
byte speed_cast;
byte speed_attack;
byte pickup_range;
byte shield;
byte aoe_scale;
byte resource_cost;
byte health_cost;
byte attack_range;
byte melee_range;
byte projectile_speed;
byte projectile_count;
byte shatter_probability;
byte shatter_range;
byte shatter_dmg;
byte shatter_count;
byte passthrough_damage;
byte passthrough_count;
byte dot_duration;
byte dot_count;
byte bleeding_dot;
byte poison_dot;
byte burn_dot;
byte ice_dot;
byte resource_drain;
byte shatter_dot;
byte minon_duration;
byte minion_count;
byte effect_spreading_probability;
byte effect_spreading_radius;
byte effect_spreading_max_count;
byte effect_duration;
byte aura_range;
byte cast_duration;
byte agro_range;
};
// @todo change order for simd calculations so that all valus match up
struct SecondaryStatsValues {
// Damage types
int32 dmg_pircing;
int32 dmg_slashing;
int32 dmg_bludgeoning;
int32 dmg_stabbing;
int32 dmg_fire;
int32 dmg_water;
int32 dmg_wind;
int32 dmg_earth;
int32 dmg_poison;
int32 dmg_lightning;
int32 dmg_ice;
int32 dmg_arcane;
int32 dmg_corrupted;
int32 dmg_holy;
int32 dmg_reflection;
int32 dmg_reflection_chance;
int32 dmg_crit;
f32 dmg_crit_chance;
// Health & Resource
int32 health;
f32 health_on_dmg_dealt;
f32 health_on_dmg_taken;
int32 health_regen;
f32 health_regen_rel;
f32 health_regen_on_dmg_dealt;
f32 health_regen_on_dmg_taken;
int32 resource;
f32 resource_on_dmg_dealt;
f32 resource_on_dmg_taken;
int32 resource_regen;
f32 resource_regen_rel;
f32 resource_regen_on_dmg_dealt;
f32 resource_regen_on_dmg_taken;
int32 resource_loss;
f32 resource_loss_on_dmg_dealt;
f32 resource_loss_on_dmg_taken;
// Defense types
// think about it as armor and/or resistence if it helps
int32 defense_pircing;
int32 defense_slashing;
int32 defense_bludgeoning;
int32 defense_stabbing;
int32 defense_fire;
int32 defense_water;
int32 defense_ice;
int32 defense_earth;
int32 defense_wind;
int32 defense_poison;
int32 defense_lightning;
int32 defense_holy;
int32 defense_arcane;
int32 defense_corrupted;
// Accuracy
f32 dodge_chance;
f32 cc_protection;
f32 miss_chance;
// Movement
// Additional speeds may be defined for Mobs
f32 speed_walk1;
f32 speed_swim1;
f32 speed_fly1;
// Fighting speed
f32 speed_cast;
f32 speed_attack;
f32 pickup_range;
int32 shield;
f32 aoe_scale;
f32 resource_cost;
f32 health_cost;
f32 attack_range;
f32 melee_range;
f32 projectile_speed;
int32 projectile_count;
f32 shatter_probability;
f32 shatter_range;
int32 shatter_dmg;
int32 shatter_count;
f32 passthrough_damage;
int32 passthrough_count;
f32 dot_duration;
int32 dot_count;
int32 bleeding_dot;
int32 poison_dot;
int32 burn_dot;
int32 ice_dot;
int32 resource_drain;
int32 shatter_dot;
f32 minon_duration;
int32 minion_count;
f32 effect_spreading_probability;
f32 effect_spreading_radius;
int32 effect_spreading_max_count;
f32 effect_duration;
f32 aura_range;
f32 cast_duration;
f32 agro_range;
};
struct SecondaryStatsRel {
// Damage types
f32 dmg_pircing;
f32 dmg_slashing;
f32 dmg_bludgeoning;
f32 dmg_stabbing;
f32 dmg_fire;
f32 dmg_water;
f32 dmg_wind;
f32 dmg_earth;
f32 dmg_poison;
f32 dmg_lightning;
f32 dmg_ice;
f32 dmg_arcane;
f32 dmg_corrupted;
f32 dmg_holy;
f32 dmg_reflection;
f32 dmg_reflection_chance;
f32 dmg_crit;
f32 dmg_crit_chance;
// Health & Resource
f32 health;
f32 health_on_dmg_dealt;
f32 health_on_dmg_taken;
f32 health_regen;
f32 health_regen_on_dmg_dealt;
f32 health_regen_on_dmg_taken;
f32 resource;
f32 resource_on_dmg_dealt;
f32 resource_on_dmg_taken;
f32 resource_regen;
f32 resource_regen_on_dmg_dealt;
f32 resource_regen_on_dmg_taken;
f32 resource_loss;
f32 resource_loss_on_dmg_dealt;
f32 resource_loss_on_dmg_taken;
// Defense types
// think about it as armor and/or resistence if it helps
f32 defense_pircing;
f32 defense_slashing;
f32 defense_bludgeoning;
f32 defense_stabbing;
f32 defense_fire;
f32 defense_water;
f32 defense_ice;
f32 defense_earth;
f32 defense_wind;
f32 defense_poison;
f32 defense_lightning;
f32 defense_holy;
f32 defense_arcane;
f32 defense_corrupted;
// Accuracy
f32 dodge_chance;
f32 cc_protection;
f32 miss_chance;
// Movement
// Additional speeds may be defined for Mobs
f32 speed_walk1;
f32 speed_swim1;
f32 speed_fly1;
// Fighting speed
f32 speed_cast;
f32 speed_attack;
f32 pickup_range;
f32 shield;
f32 aoe_scale;
f32 resource_cost;
f32 health_cost;
f32 attack_range;
f32 melee_range;
f32 projectile_speed;
f32 projectile_count;
f32 shatter_probability;
f32 shatter_range;
f32 shatter_dmg;
f32 shatter_count;
f32 passthrough_damage;
f32 passthrough_count;
f32 dot_duration;
f32 dot_count;
f32 bleeding_dot;
f32 poison_dot;
f32 burn_dot;
f32 ice_dot;
f32 resource_drain;
f32 shatter_dot;
f32 minon_duration;
f32 minion_count;
f32 effect_spreading_probability;
f32 effect_spreading_radius;
f32 effect_spreading_max_count;
f32 effect_duration;
f32 aura_range;
f32 cast_duration;
f32 agro_range;
};
struct SecondaryStatsRelPoints {
// Damage types
byte dmg_pircing;
byte dmg_slashing;
byte dmg_bludgeoning;
byte dmg_stabbing;
byte dmg_fire;
byte dmg_water;
byte dmg_wind;
byte dmg_earth;
byte dmg_poison;
byte dmg_lightning;
byte dmg_ice;
byte dmg_arcane;
byte dmg_corrupted;
byte dmg_holy;
byte dmg_reflection;
byte dmg_reflection_chance;
byte dmg_crit;
byte dmg_crit_chance;
// Health & Resource
byte health;
byte health_on_dmg_dealt;
byte health_on_dmg_taken;
byte health_regen;
byte health_regen_on_dmg_dealt;
byte health_regen_on_dmg_taken;
byte resource;
byte resource_on_dmg_dealt;
byte resource_on_dmg_taken;
byte resource_regen;
byte resource_regen_on_dmg_dealt;
byte resource_regen_on_dmg_taken;
byte resource_loss;
byte resource_loss_on_dmg_dealt;
byte resource_loss_on_dmg_taken;
// Defense types
// think about it as armor and/or resistence if it helps
byte defense_pircing;
byte defense_slashing;
byte defense_bludgeoning;
byte defense_stabbing;
byte defense_fire;
byte defense_water;
byte defense_ice;
byte defense_earth;
byte defense_wind;
byte defense_poison;
byte defense_lightning;
byte defense_holy;
byte defense_arcane;
byte defense_corrupted;
// Accuracy
byte dodge_chance;
byte cc_protection;
byte miss_chance;
// Movement
// Additional speeds may be defined for Mobs
byte speed_walk1;
byte speed_swim1;
byte speed_fly1;
// Fighting speed
byte speed_cast;
byte speed_attack;
byte pickup_range;
byte shield;
byte aoe_scale;
byte resource_cost;
byte health_cost;
byte attack_range;
byte melee_range;
byte projectile_speed;
byte projectile_count;
byte shatter_probability;
byte shatter_range;
byte shatter_dmg;
byte shatter_count;
byte passthrough_damage;
byte passthrough_count;
byte dot_duration;
byte dot_count;
byte bleeding_dot;
byte poison_dot;
byte burn_dot;
byte ice_dot;
byte resource_drain;
byte shatter_dot;
byte minon_duration;
byte minion_count;
byte effect_spreading_probability;
byte effect_spreading_radius;
byte effect_spreading_max_count;
byte effect_duration;
byte aura_range;
byte cast_duration;
byte agro_range;
};
struct FixedStats {
// Movement
// Additional speeds may be defined for Mobs
float speed_walk1;
float speed_swim1;
float speed_fly1;
f32 speed_jump;
f32 speed_dodge;
f32 speed_turn;
};
// @question Do we even want this?
struct PlayerStats {
f32 pickup_range;
};
struct SMobStatsTotal {
PrimaryStatsPoints primary_total;
SecondaryStatsValues secondary_total;
FixedStats fixed_total;
uint32 shield_type;
uint32 shield;
bool shield_dispellable;
};
struct SMobStatsTotalCached {
PrimaryStatsPoints primary_total;
PrimaryStatsPoints primary_char; // Only recalculated when char stats change
PrimaryStatsPoints primary_skill; // Only recalculated when skill effect runs out
PrimaryStatsPoints primary_item; // Only recalculated when item changes
PrimaryStatsPoints primary_effect; // External e.g. from mob or ally
SecondaryStatsValues secondary_total;
SecondaryStatsValues secondary_char; // Only recalculated when char stats change
SecondaryStatsValues secondary_skill; // Only recalculated when skill effect runs out
SecondaryStatsValues secondary_item; // Only recalculated when item changes
SecondaryStatsValues secondary_effect; // External e.g. from mob or ally
};
struct SMobStatsPoints {
// Self stats
PrimaryStatsPoints primary_stats;
SecondaryStatsPoints secondary_stats; // @todo this is bad, a char doesn't have fire dmg but might have crit chance ... needs to split?
// Item modifiers
PrimaryStatsPoints item_primary_add;
PrimaryStatsRelPoints item_primary_mul;
SecondaryStatsPoints item_secondary_add;
SecondaryStatsRelPoints item_secondary_mul;
// Skill modifiers
PrimaryStatsPoints skill_primary_add;
PrimaryStatsRelPoints skill_primary_mul;
SecondaryStatsPoints skill_secondary_add;
SecondaryStatsRelPoints skill_secondary_mul;
};
#endif