diff --git a/_module/are/dml_trollmound.are.json b/_module/are/dml_trollmound.are.json index 278b7852..17b67f00 100644 --- a/_module/are/dml_trollmound.are.json +++ b/_module/are/dml_trollmound.are.json @@ -6353,7 +6353,7 @@ }, "Version": { "type": "dword", - "value": 16 + "value": 17 }, "Width": { "type": "int", diff --git a/_module/gic/dml_trollmound.gic.json b/_module/gic/dml_trollmound.gic.json index 285b6f81..11faa4eb 100644 --- a/_module/gic/dml_trollmound.gic.json +++ b/_module/gic/dml_trollmound.gic.json @@ -646,6 +646,13 @@ "value": "This is the default waypoint you may place to set a patrol path for a creature or NPC.\r\n1. Create the creature and either use its current Tag or fill in a new one.\r\n2. Place or make sure the WalkWayPoints() is within the body of the On Spawn script for the creature.\r\n3. Place a series of waypoints along the route you wish the creature to walk.\r\n4. Select all of the newly created waypoints and right click. Choose the Create Set option.\r\n5. The waypoint set will have a set name of \"WP_\" + NPC Tag. Thus if an NPC with the Tag \"Guard\" will have a waypoint set called \"WP_Guard\". Note that Tags are case sensitive." } }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This is the default waypoint you may place to set a patrol path for a creature or NPC.\r\n1. Create the creature and either use its current Tag or fill in a new one.\r\n2. Place or make sure the WalkWayPoints() is within the body of the On Spawn script for the creature.\r\n3. Place a series of waypoints along the route you wish the creature to walk.\r\n4. Select all of the newly created waypoints and right click. Choose the Create Set option.\r\n5. The waypoint set will have a set name of \"WP_\" + NPC Tag. Thus if an NPC with the Tag \"Guard\" will have a waypoint set called \"WP_Guard\". Note that Tags are case sensitive." + } + }, { "__struct_id": 5, "Comment": { diff --git a/_module/git/dml_trollmound.git.json b/_module/git/dml_trollmound.git.json index e52a515c..b8ebf4b1 100644 --- a/_module/git/dml_trollmound.git.json +++ b/_module/git/dml_trollmound.git.json @@ -19316,6 +19316,68 @@ "type": "float", "value": 5.497299194335938 } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "id": 14817, + "type": "cexolocstring", + "value": { + "0": "SP_SN04_SA_SR20M05_SD20M16_RW_PC05_RG010M005_DS2" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "RA_TROLL002" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_waypoint" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 59.86631393432617 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 58.00840759277344 + }, + "ZPosition": { + "type": "float", + "value": 4.999994277954102 + } } ] } diff --git a/_module/itp/creaturepalcus.itp.json b/_module/itp/creaturepalcus.itp.json index 9adeab75..b072c25c 100644 --- a/_module/itp/creaturepalcus.itp.json +++ b/_module/itp/creaturepalcus.itp.json @@ -7048,6 +7048,25 @@ "value": "troll004" } }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Troll, Elite [RA]: 06 HD" + }, + "RESREF": { + "type": "resref", + "value": "ra_troll002" + } + }, { "__struct_id": 0, "CR": { diff --git a/_module/ncs/ra_ai_heartbeat.ncs b/_module/ncs/ra_ai_heartbeat.ncs index f733b3d4..ce0b2ccf 100644 Binary files a/_module/ncs/ra_ai_heartbeat.ncs and b/_module/ncs/ra_ai_heartbeat.ncs differ diff --git a/_module/ncs/ra_ai_ondamaged.ncs b/_module/ncs/ra_ai_ondamaged.ncs index f2596e52..c298ffb0 100644 Binary files a/_module/ncs/ra_ai_ondamaged.ncs and b/_module/ncs/ra_ai_ondamaged.ncs differ diff --git a/_module/nss/ra_ai_heartbeat.nss b/_module/nss/ra_ai_heartbeat.nss index 3d4e9acc..4906a9fc 100644 --- a/_module/nss/ra_ai_heartbeat.nss +++ b/_module/nss/ra_ai_heartbeat.nss @@ -15,34 +15,36 @@ void main() { object oNPC = OBJECT_SELF; object oAttacker; - + string sResRef = GetResRef(oNPC); - - effect eSleep = EffectSleep(); -//:: Handles troll regen - if(sResRef == "ra_troll001" || sResRef == "TROLL_FEDORLA") - { - if(GetLocalInt(oNPC, "nSubDual") > 0) - { - SetLocalInt(oNPC, "nSubDual", GetLocalInt(oNPC, "nSubDual") - 5); + effect eSleep = EffectSleep(); - if(GetLocalInt(oNPC, "nSubDual") < GetCurrentHitPoints(oNPC)) - { - RemoveEffect(oNPC, eSleep); - } +//:: Handles troll regen + if(sResRef == "ra_troll001" + || sResRef == "ra_troll002" + || sResRef == "TROLL_FEDORLA") + { + if(GetLocalInt(oNPC, "nSubDual") > 0) + { + SetLocalInt(oNPC, "nSubDual", GetLocalInt(oNPC, "nSubDual") - 5); + + if(GetLocalInt(oNPC, "nSubDual") < GetCurrentHitPoints(oNPC)) + { + RemoveEffect(oNPC, eSleep); + } + + if(GetLocalInt(oNPC, "nSubDual") > GetCurrentHitPoints(oNPC)) + { + SpeakString("I am still unconscious!"); + SetIsDestroyable(FALSE, TRUE, TRUE); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSleep, OBJECT_SELF, 6.5f); + } + + //SpeakString("My Subdual is now " + IntToString(GetLocalInt(oNPC, "nSubDual"))); - if(GetLocalInt(oNPC, "nSubDual") > GetCurrentHitPoints(oNPC)) - { - SpeakString("I am still unconscious!"); - SetIsDestroyable(FALSE, TRUE, TRUE); - ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSleep, OBJECT_SELF, 6.5f); - } - - SpeakString("My Subdual is now " + IntToString(GetLocalInt(oNPC, "nSubDual"))); - } - } + } //:: Equips best armor if ((!GetIsInCombat(oNPC) && (GetItemInSlot(INVENTORY_SLOT_CHEST) == OBJECT_INVALID))) diff --git a/_module/nss/ra_ai_ondamaged.nss b/_module/nss/ra_ai_ondamaged.nss index 9a835fcd..4d62c0b0 100644 --- a/_module/nss/ra_ai_ondamaged.nss +++ b/_module/nss/ra_ai_ondamaged.nss @@ -13,16 +13,16 @@ void main() { - int nTotalDamage = GetTotalDamageDealt(); - int nFireDamage = 0; - int nAcidDamage = 0; - int nTotalHP = GetMaxHitPoints(OBJECT_SELF); - - string sResRef = GetResRef(OBJECT_SELF); + int nTotalDamage = GetTotalDamageDealt(); + int nFireDamage = 0; + int nAcidDamage = 0; + int nTotalHP = GetMaxHitPoints(OBJECT_SELF); + + string sResRef = GetResRef(OBJECT_SELF); effect eSleep = EffectSleep(); - effect eSlow = EffectSlow(); - + effect eSlow = EffectSlow(); + //-------------------------------------------------------------------------- // GZ: 2003-10-16 // Make Plot Creatures Ignore Attacks @@ -33,71 +33,73 @@ void main() } //:: Handles troll regen - if(sResRef == "ra_troll001" || sResRef == "TROLL_FEDORLA") - { - DelayCommand(0.0f, SpeakString("Max/Total HP: " + IntToString(nTotalHP))); - - if(GetDamageDealtByType(DAMAGE_TYPE_FIRE) != -1) - { - nFireDamage = GetDamageDealtByType(DAMAGE_TYPE_FIRE); - //DelayCommand(0.0f, SpeakString("Fire Damage: " + IntToString(nFireDamage))); - } + if(sResRef == "ra_troll001" + || sResRef == "ra_troll002" + || sResRef == "TROLL_FEDORLA") + { + DelayCommand(0.0f, SpeakString("Max/Total HP: " + IntToString(nTotalHP))); - if(GetDamageDealtByType(DAMAGE_TYPE_ACID) != -1) - { - nAcidDamage = GetDamageDealtByType(DAMAGE_TYPE_ACID); - //DelayCommand(0.0f, SpeakString("Acid Damage: " + IntToString(nAcidDamage))); - } - - int nNoRegen = nFireDamage + nAcidDamage; - int nSubDmg = nTotalDamage - nNoRegen; - - //DelayCommand(0.0f, SpeakString("Real damage this attack: " + IntToString(nNoRegen))); - - SetLocalInt(OBJECT_SELF, "NoRegen", nNoRegen + GetLocalInt(OBJECT_SELF, "NoRegen")); - - nNoRegen = GetLocalInt(OBJECT_SELF, "NoRegen"); - - //DelayCommand(0.0f, SpeakString("Actual Damage Stored: " + IntToString(nNoRegen))); + if(GetDamageDealtByType(DAMAGE_TYPE_FIRE) != -1) + { + nFireDamage = GetDamageDealtByType(DAMAGE_TYPE_FIRE); + //DelayCommand(0.0f, SpeakString("Fire Damage: " + IntToString(nFireDamage))); + } - effect eHeal = EffectHeal(nSubDmg); - //DelayCommand(0.0f, SpeakString("Subdual damage healed: " + IntToString(nSubDmg))); - ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, OBJECT_SELF, 0.0f); - - int nCurrentHP = GetCurrentHitPoints(OBJECT_SELF); - DelayCommand(0.0f, SpeakString("Current HP: " + IntToString(nCurrentHP))); - - if ((nTotalHP - nNoRegen) < nCurrentHP) - { - nCurrentHP = nTotalHP - nNoRegen; - //DelayCommand(0.0f, SpeakString("Setting HP to: " + IntToString(nCurrentHP))); - SetCurrentHitPoints(OBJECT_SELF, nCurrentHP); - } - - if(GetLocalInt(OBJECT_SELF, "nSubDual") <= GetCurrentHitPoints(OBJECT_SELF)) - { - SetLocalInt(OBJECT_SELF, "nSubDual", nSubDmg + GetLocalInt(OBJECT_SELF, "nSubDual")); - } + if(GetDamageDealtByType(DAMAGE_TYPE_ACID) != -1) + { + nAcidDamage = GetDamageDealtByType(DAMAGE_TYPE_ACID); + //DelayCommand(0.0f, SpeakString("Acid Damage: " + IntToString(nAcidDamage))); + } - int nSD = GetLocalInt(OBJECT_SELF, "nSubDual"); - - //DelayCommand(0.0f, SpeakString("SD: " + IntToString(nSD))); - //DelayCommand(0.0f, SpeakString("CH: " + IntToString(nCurrentHP))); - //DelayCommand(0.0f, SpeakString("NoRegen: " + IntToString(nNoRegen))); + int nNoRegen = nFireDamage + nAcidDamage; + int nSubDmg = nTotalDamage - nNoRegen; - if(nSD > GetCurrentHitPoints(OBJECT_SELF)) - { - //SpeakString("I am unconscious!"); - SetIsDestroyable(FALSE, TRUE, TRUE); - ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSleep, OBJECT_SELF, 6.0f); - } - else if(nSD == GetCurrentHitPoints(OBJECT_SELF)) - { - //SpeakString("I am staggered!"); - ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSlow, OBJECT_SELF, 6.0f); - } - - } + //DelayCommand(0.0f, SpeakString("Real damage this attack: " + IntToString(nNoRegen))); + + SetLocalInt(OBJECT_SELF, "NoRegen", nNoRegen + GetLocalInt(OBJECT_SELF, "NoRegen")); + + nNoRegen = GetLocalInt(OBJECT_SELF, "NoRegen"); + + //DelayCommand(0.0f, SpeakString("Actual Damage Stored: " + IntToString(nNoRegen))); + + effect eHeal = EffectHeal(nSubDmg); + //DelayCommand(0.0f, SpeakString("Subdual damage healed: " + IntToString(nSubDmg))); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, OBJECT_SELF, 0.0f); + + int nCurrentHP = GetCurrentHitPoints(OBJECT_SELF); + //DelayCommand(0.0f, SpeakString("Current HP: " + IntToString(nCurrentHP))); + + if ((nTotalHP - nNoRegen) < nCurrentHP) + { + nCurrentHP = nTotalHP - nNoRegen; + //DelayCommand(0.0f, SpeakString("Setting HP to: " + IntToString(nCurrentHP))); + SetCurrentHitPoints(OBJECT_SELF, nCurrentHP); + } + + if(GetLocalInt(OBJECT_SELF, "nSubDual") <= GetCurrentHitPoints(OBJECT_SELF)) + { + SetLocalInt(OBJECT_SELF, "nSubDual", nSubDmg + GetLocalInt(OBJECT_SELF, "nSubDual")); + } + + int nSD = GetLocalInt(OBJECT_SELF, "nSubDual"); + + //DelayCommand(0.0f, SpeakString("SD: " + IntToString(nSD))); + //DelayCommand(0.0f, SpeakString("CH: " + IntToString(nCurrentHP))); + //DelayCommand(0.0f, SpeakString("NoRegen: " + IntToString(nNoRegen))); + + if(nSD > GetCurrentHitPoints(OBJECT_SELF)) + { + //SpeakString("I am unconscious!"); + SetIsDestroyable(FALSE, TRUE, TRUE); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSleep, OBJECT_SELF, 6.0f); + } + else if(nSD == GetCurrentHitPoints(OBJECT_SELF)) + { + //SpeakString("I am staggered!"); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSlow, OBJECT_SELF, 6.0f); + } + + } //:: Execute the CODI AI NPC OnDamaged script ExecuteScript("no_ai_dam", OBJECT_SELF); diff --git a/_module/ra_tdog.mod b/_module/ra_tdog.mod index 6c16174b..9d4f96d6 100644 Binary files a/_module/ra_tdog.mod and b/_module/ra_tdog.mod differ diff --git a/_module/utc/ra_troll002.utc.json b/_module/utc/ra_troll002.utc.json new file mode 100644 index 00000000..8e26fc2e --- /dev/null +++ b/_module/utc/ra_troll002.utc.json @@ -0,0 +1,783 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 165 + }, + "BodyBag": { + "type": "byte", + "value": 5 + }, + "Cha": { + "type": "byte", + "value": 13 + }, + "ChallengeRating": { + "type": "float", + "value": 6.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 22 + }, + "ClassLevel": { + "type": "short", + "value": 6 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "Troll [RA]: 06 HD\r\n\r\nMonster Manual I, pg. 247" + }, + "Con": { + "type": "byte", + "value": 10 + }, + "Conversation": { + "type": "resref", + "value": "cv_charmed" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 48 + }, + "DecayTime": { + "type": "dword", + "value": 10000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This big, bipedal creature is about one and a half times as tall as a human but very thin. It has long and ungainly arms and legs The legs end in great three-toed feet, the arms in wide, powerful hands with sharpened claws. The hide is rubbery, and its hair is thick and ropy, and seems to writhe with its own energy." + } + }, + "Dex": { + "type": "byte", + "value": 8 + }, + "Disarmable": { + "type": "byte", + "value": 1 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 16384, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewpsp005" + } + }, + { + "__struct_id": 32768, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewpsp005" + } + }, + { + "__struct_id": 65536, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewps005" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 1 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3112 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2898 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 5195 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 22774 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2468 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2919 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4717 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4095 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4092 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 22 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2884 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 354 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 1089 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3415 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2285 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4742 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 24070 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4235 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2569 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Troll, Elite [RA]: 06 HD" + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 0 + }, + "HitPoints": { + "type": "short", + "value": 48 + }, + "Int": { + "type": "byte", + "value": 14 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "LawfulChaotic": { + "type": "byte", + "value": 0 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 84 + }, + "NaturalAC": { + "type": "byte", + "value": 5 + }, + "NoPermDeath": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 37 + }, + "PerceptionRange": { + "type": "byte", + "value": 10 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 1301 + }, + "Race": { + "type": "byte", + "value": 231 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "ra_ai_attacked" + }, + "ScriptDamaged": { + "type": "resref", + "value": "ra_ai_ondamaged" + }, + "ScriptDeath": { + "type": "resref", + "value": "ra_ai_ondeath" + }, + "ScriptDialogue": { + "type": "resref", + "value": "ra_ai_onconverse" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "ra_ai_ondisturb" + }, + "ScriptEndRound": { + "type": "resref", + "value": "ra_ai_endcmbtrnd" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "ra_ai_heartbeat" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "ra_ai_onblocked" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "ra_ai_onpercept" + }, + "ScriptRested": { + "type": "resref", + "value": "ra_ai_onrested" + }, + "ScriptSpawn": { + "type": "resref", + "value": "ra_ai_onspawn" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "ra_ai_onspelled" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "ra_ai_userdef" + }, + "SkillList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 9 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 4 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 5 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + } + ] + }, + "SoundSetFile": { + "type": "word", + "value": 92 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 84 + }, + "Str": { + "type": "byte", + "value": 12 + }, + "Subrace": { + "type": "cexostring", + "value": "Giant" + }, + "Tag": { + "type": "cexostring", + "value": "RA_TROLL002" + }, + "Tail_New": { + "type": "dword", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "ra_troll002" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SET_NAME" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "Troll" + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SPAWN_TYPE" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "no_spn_ftr" + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "FAST_HEALING" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 5 + } + } + ] + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings_New": { + "type": "dword", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 15 + } +}