#pragma once #include "node.h" #include "cstr.h" #include "resource.h" #include "scalar.h" class NotationFile; struct ScenarioRole__ModelResource { // BT 4.10 carries specialCaseDeathPenalty as record slot [1], right after // killBonus (role reader @00429bec dest offsets; the 2007 WinTesla source // dropped the BT-only field -- restored 2026-08-02, the DefaultRendererRate // pattern). Consumed by the BT death handler tail (@004c07cd): every death // with advancedDamageOn costs -specialCaseDeathPenalty score. Scalar killBonus, specialCaseDeathPenalty, damageReceivedModifier, damageInflictedModifier, damageBias, friendlyFirePenalty; int returnFromDeath; }; class ScenarioRole : public Node { public: Scalar CalcDamageReceivedScore(const Scalar &damage_received); protected: Scalar damageInflictedModifier, damageReceivedModifier, friendlyFirePenalty, damageBias, killBonus; Scalar specialCaseDeathPenalty; // BT 4.10 role+0x20 (restored 2026-08-02) CString roleName; int returnFromDeath; public: const int GetReturnFromDeath() { Check(this); return returnFromDeath; } Scalar GetDamageInflictedModifier() const { Check(this); return damageInflictedModifier; } Scalar GetDamageReceivedModifier() const { Check(this); return damageReceivedModifier; } Scalar GetFriendlyFirePenalty() const { Check(this); return friendlyFirePenalty; } Scalar GetDamageBias() const { Check(this); return damageBias; } Scalar GetKillBonus() const { Check(this); return killBonus; } Scalar GetSpecialCaseDeathPenalty() const // BT 4.10 role+0x20 { Check(this); return specialCaseDeathPenalty; } CString GetRoleName() const { Check(this); return roleName; } void SetDamageInflictedModifier(const Scalar &value) { Check(this); damageInflictedModifier = value; } void SetDamageReceivedModifier(const Scalar value) { Check(this); damageReceivedModifier = value; } void SetFriendlyFirePenalty(const Scalar &value) { Check(this); friendlyFirePenalty = value; } void SetDamageBias(const Scalar &value) { Check(this); damageBias = value; } void SetKillBonus(const Scalar &value) { Check(this); killBonus = value; } void SetReturnFromDeath(const int &value) { Check(this); returnFromDeath = value; } public: typedef ScenarioRole__ModelResource ModelResource; ScenarioRole(const CString &role_name, const CString &model_file); ScenarioRole(const CString &role_name); ~ScenarioRole(); static ResourceDescription::ResourceID CreateModelResource(ResourceFile *resource_file, const char* model_name, NotationFile * model_file, const ResourceDirectories *directories, ModelResource *model = NULL); };