角色属性系统
目录
简介
本文件系统化梳理 Cataclysm-DDA 中的角色属性体系,覆盖基础属性(力量、敏捷、智力、感知)、健康与生命值、疲劳度与饥饿口渴睡眠、抗性与免疫、体型与负重、以及移动速度等关键机制。文档以代码为依据,结合类图与流程图,帮助开发者与模组制作者准确理解属性计算、成长与上限、以及各子系统的交互关系。
项目结构
角色属性系统主要由以下模块构成:
- 角色基类与接口:Character、Creature
- 属性与统计:基础属性、当前属性、属性加成、属性上限
- 健康与生命值:最大生命值、当前生命值、恢复与伤害吸收
- 需求与生理:饥饿、口渴、睡眠、疲劳、代谢
- 抗性与免疫:对伤害类型的抗性、免疫、环境抗性
- 体型与负重:体重、BMI、负重容量、移动速度
- 摩擦与装备:护甲、护甲吸收、被动护甲、生物义体护甲
图表来源
- character.h
- creature.h
- player.h
章节来源
- character.h
- creature.h
核心组件
- 角色基类 Character:集中管理属性、健康、需求、抗性、移动、战斗与技能等。提供大量 getter/setter 与计算函数,如 get_str/get_dex/get_int/get_per、get_health_tally、get_stored_kcal、get_sleepiness、get_armor_type 等。
- 生物基类 Creature:提供基础生命值、伤害处理、效果管理等通用能力,Character 继承自 Creature 并扩展角色专属逻辑。
- 玩家特化 player:在 Character 基础上实现玩家行为,包括活动、物品交互、学习与熟练度等。
章节来源
- character.h
- creature.h
架构总览
角色属性系统采用“继承 + 装饰器”模式:
- 继承:Player 继承 Character,Character 继承 Creature,形成统一的生物-角色层次。
- 装饰器:通过 character_modifier、effect、bionics、mutations、items 等对角色进行动态修饰,影响属性、抗性、速度等。
图表来源
- creature.h
- character.h
- player.h
详细组件分析
基础属性系统(力量、敏捷、智力、感知)
- 定义与范围
- 四项基础属性枚举 character_stat,初始默认值与最小/最大范围在头文件中定义。
- 当前属性与基础属性分离,分别对应 str_cur/str_base、dex_cur/dex_base 等。
- 计算与加成
- 提供 get_str/get_dex/get_int/get_per 及其基础与加成版本。
- 属性加成通过 mod_str_bonus/mod_dex_bonus 等方法累积,最终影响命中、闪避、伤害、挖掘、游泳等。
- 成长与上限
- 属性上限受基础值与加成共同决定;存在上限保护,避免无节制增长。
- 通过 practice 技能与某些机制可间接提升属性点数分配。
图表来源
- character.h
- character_modifier.cpp
章节来源
- character.h
- character.h
健康与生命值系统
- 最大生命值与当前生命值
- recalc_hp 重新计算最大生命值,受力量、体质、健康状态、脂肪转换等因素影响。
- get_fat_to_hp 将多余体脂转化为额外最大生命值。
- 伤害吸收与护甲
- absorb_hit 与 armor_absorb 处理护甲吸收与耐久损耗。
- passive_absorb_hit 处理被动吸收(不乘法修正)。
- get_armor_type 返回某部位对特定伤害类型的护甲值。
- 治疗与恢复
- healing_rate/healing_rate_medicine 计算静息与药物辅助下的恢复速率。
- regen 主动恢复与疼痛衰减。
图表来源
- character.h
- character_armor.cpp
章节来源
- character.h
- character.h
- character_armor.cpp
疲劳度、饥饿、口渴与睡眠系统
- 存储能量与饥饿
- get_stored_kcal/get_healthy_kcal 记录卡路里存储与健康阈值。
- mod_stored_kcal 与 mod_hunger 控制能量摄入与消耗。
- 口渴与即时口渴
- get_thirst/get_instant_thirst 提供口渴与即时口渴等级。
- mod_thirst 控制口渴变化。
- 睡眠与疲劳
- get_sleepiness/get_sleep_deprivation 提供清醒度与剥夺度。
- get_daily_sleep/get_continuous_sleep 管理日均与连续睡眠。
- mod_daily_sleep/mod_continuous_sleep 管理睡眠统计。
- 代谢与活动水平
- metabolic_rate_base/metabolic_rate 计算稳定与实时代谢率。
- activity_level_str/set_activity_level 影响代谢与体重。
图表来源
- character.h
- character.h
- sleep.h
- sleep.cpp
- stomach.h
- stomach.cpp
章节来源
- character.h
- character.h
- sleep.h
- sleep.cpp
- stomach.h
- stomach.cpp
抗性系统、免疫机制与负面效果
- 抗性与免疫
- get_armor_type 返回对伤害类型的护甲值。
- is_immune_damage/is_immune_effect/is_immune_field 提供伤害/效果/场特效免疫判定。
- immune_to 判断特定部位对特定伤害是否免疫。
- 被动护甲与生物义体护甲
- mutation_armor 提供基于突变的护甲加成。
- bionic_armor_bonus 提供生物义体护甲加成。
- 负面效果与治疗
- effect 系统管理持续效果,支持叠加、衰减与移除。
- reduce_healing_effect 减弱治疗强度。
图表来源
- character.h
- character.h
- effect.h
- effect.cpp
章节来源
- character.h
- character.h
- effect.h
体型分类、体重与负重
- 体型与尺寸
- get_size/recalculate_size 基于体重与身高计算体型类别。
- 体重与 BMI
- bodyweight/bodyweight_lean/bodyweight_fat 分别返回总体重、瘦体重、脂肪体重。
- get_bmi/get_bmi_fat/get_bmi_lean 计算 BMI 及其分量。
- 负重与容量
- weight_carried/volume_carried 计算携带重量与体积。
- weight_capacity/volume_capacity 计算负重与容量上限。
- encumb(avg_encumb_of_limb_type) 计算肢体负担。
图表来源
- character.h
- character.h
- character.h
- character.h
章节来源
- character.h
- character.h
- character.h
移动速度与速度加成
- 速度计算
- get_speed 返回当前速度,受属性、负重、状态、修饰器等影响。
- recalc_speed_bonus 重新计算速度加成。
- 速度修饰器
- mod_speed_bonus 与 speed_bonus_effects 提供速度加成/惩罚的描述性记录。
- 运动模式
- is_running/is_walking/is_crouching/is_prone 控制运动模式,影响速度与消耗。
章节来源
- character.h
- character.h
- character.h
依赖关系分析
- 组件耦合
- Character 对 Creature 的继承提供了统一的生物接口;对 inventory、bionics、effects、mutations 的组合使用实现了高可扩展性。
- 外部依赖
- units.h/units.cpp 提供质量、体积、能量等单位换算。
- game_constants.h 定义游戏常量(如最大/最小属性值、代谢常数等)。
- 循环依赖
- 通过前置声明与 pimpl 模式降低循环依赖风险。
图表来源
- character.h
- units.h
- game_constants.h
章节来源
- character.h
- units.h
- game_constants.h
性能考虑
- 缓存与惰性计算
- vision_mode_cache、cached_organic_size、cached_dead_state 等缓存减少重复计算。
- 批量更新
- update_body/update_needs 以回合为单位批量处理,避免逐帧高频计算。
- 修饰器与效果
- 通过 character_modifier 与 effect 系统按需计算,避免全局扫描。
故障排除指南
- 属性异常
- 检查属性加成链:mod_str_bonus/mod_dex_bonus 是否被正确调用与清零。
- 使用 reset_bonuses/reset_stats 清理异常状态。
- 健康异常
- 确认 recalc_hp 是否被调用;检查 fat_to_hp 与健康阈值。
- 使用 heal/apply_damage 的调用顺序是否正确。
- 需求异常
- 检查 update_needs 的调用频率与参数;确认 calc_needs_rates 的结果。
- 护甲异常
- 确认 armor_absorb 与 passive_absorb_hit 的调用顺序;检查装备耐久与替换逻辑。
章节来源
- character.h
- character.h
- character.h
结论
Cataclysm-DDA 的角色属性系统以 Character 为核心,通过继承 Creature 实现通用生物能力,再以修饰器、效果、装备、突变与生物义体实现高度可塑的属性与能力扩展。系统在计算上强调缓存与批量更新,在交互上提供丰富的 getter/setter 与事件回调,便于模组扩展与平衡调整。建议在扩展新属性或机制时遵循现有缓存与批量更新模式,确保性能与一致性。